From 4b10ffe9fc10a1e113a7b2df10ccfa7e22c79176 Mon Sep 17 00:00:00 2001 From: KellyCode Date: Fri, 21 Feb 2025 12:09:49 -0600 Subject: [PATCH 01/25] begin upgrade --- Gruntfile.js | 26 +- build/SPE.js | 12 +- build/SPE.min.js | 48 +- docs/MigrationLog.md | 2 +- examples/activeMultiplier.html | 8 +- examples/basic.html | 7 +- examples/clock.html | 4 +- examples/clouds.html | 5 +- examples/distributions.html | 7 +- examples/explosion.html | 6 +- examples/fog.html | 7 +- examples/js/THREE-r84.js | 859 ---------- examples/js/three_r100/three.min.js | 957 +++++++++++ examples/mouseFollow.html | 7 +- examples/multipleEmitters.html | 7 +- examples/orbit.html | 7 +- examples/pool.html | 7 +- examples/rotation.html | 7 +- examples/runtimeChanging.html | 4 +- package-lock.json | 2360 +++++++++++++-------------- package.json | 10 +- 21 files changed, 2151 insertions(+), 2206 deletions(-) delete mode 100755 examples/js/THREE-r84.js create mode 100644 examples/js/three_r100/three.min.js diff --git a/Gruntfile.js b/Gruntfile.js index 1fee25c..a81b4fd 100644 --- a/Gruntfile.js +++ b/Gruntfile.js @@ -2,6 +2,7 @@ module.exports = function( grunt ) { 'use strict'; var packageJSON = grunt.file.readJSON( 'package.json' ); + var addHeader = 'import * as THREE from "three";'; var licenseBanner = '/* ' + packageJSON.name + ' ' + packageJSON.version + '\n' + @@ -37,7 +38,7 @@ module.exports = function( grunt ) { }, banner: licenseBanner, report: 'min', - maxLineLen: 1000, + maxLineLen: 1000 }, files: {} } @@ -54,38 +55,17 @@ module.exports = function( grunt ) { options: { separator: '\n\n', banner: licenseBanner, + footer: '\n// export default SPE;' }, dist: { src: files, dest: outputPath, }, - }, - - jsdoc: { - dist: { - src: 'src/**/*.js', - options: { - destination: 'docs/api' - } - } - }, - - docco: { - options: { - dst: 'docs/source/', - layout: 'parallel' - }, - docs: { - src: 'build/SPE.js' - } } } ); grunt.loadNpmTasks( 'grunt-contrib-concat' ); grunt.loadNpmTasks( 'grunt-contrib-uglify' ); - grunt.loadNpmTasks( 'grunt-jsdoc' ); - grunt.loadNpmTasks( 'grunt-docco2' ); grunt.registerTask( 'default', [ 'concat', 'uglify' ] ); - grunt.registerTask( 'docs', [ 'jsdoc', 'docco' ] ); }; \ No newline at end of file diff --git a/build/SPE.js b/build/SPE.js index f8f2169..2bcdaa6 100644 --- a/build/SPE.js +++ b/build/SPE.js @@ -1,4 +1,4 @@ -/* shader-particle-engine 1.0.6 +/* shader-particle-engine 1.1.0 * * (c) 2015 Luke Moody (http://www.github.com/squarefeet) * Originally based on Lee Stemkoski's original work (https://github.com/stemkoski/stemkoski.github.com/blob/master/Three.js/js/ParticleEngine.js). @@ -528,8 +528,6 @@ SPE.ShaderAttribute.prototype.flagUpdate = function() { range.offset = this.updateMin; range.count = Math.min( ( this.updateMax - this.updateMin ) + this.componentSize, this.typedArray.array.length ); - // console.log( range.offset, range.count, this.typedArray.array.length ); - // console.log( 'flagUpdate:', range.offset, range.count ); attr.needsUpdate = true; }; @@ -573,10 +571,6 @@ SPE.ShaderAttribute.prototype.forceUpdateAll = function() { this.bufferAttribute.array = this.typedArray.array; this.bufferAttribute.updateRange.offset = 0; this.bufferAttribute.updateRange.count = -1; - // this.bufferAttribute.dynamic = false; - // this.bufferAttribute.usage = this.dynamicBuffer ? - // THREE.DynamicDrawUsage : - // THREE.StaticDrawUsage; this.bufferAttribute.usage = THREE.StaticDrawUsage; this.bufferAttribute.needsUpdate = true; @@ -647,7 +641,7 @@ SPE.ShaderAttribute.prototype._createBufferAttribute = function( size ) { } this.bufferAttribute = new THREE.BufferAttribute( this.typedArray.array, this.componentSize ); - // this.bufferAttribute.dynamic = this.dynamicBuffer; + this.bufferAttribute.usage = this.dynamicBuffer ? THREE.DynamicDrawUsage : THREE.StaticDrawUsage; @@ -3596,3 +3590,5 @@ SPE.Emitter.prototype.remove = function() { return this; }; + +// Last line appended \ No newline at end of file diff --git a/build/SPE.min.js b/build/SPE.min.js index 6cfdcc8..fbd9a7a 100644 --- a/build/SPE.min.js +++ b/build/SPE.min.js @@ -1,52 +1,8 @@ -/* shader-particle-engine 1.0.6 +/* shader-particle-engine 1.1.0 * * (c) 2015 Luke Moody (http://www.github.com/squarefeet) * Originally based on Lee Stemkoski's original work (https://github.com/stemkoski/stemkoski.github.com/blob/master/Three.js/js/ParticleEngine.js). * * shader-particle-engine may be freely distributed under the MIT license (See LICENSE at root of this repository.) */ -var SPE={distributions:{BOX:1,SPHERE:2,DISC:3,LINE:4},valueOverLifetimeLength:4};"function"==typeof define&&define.amd?define("spe",SPE):"undefined"!=typeof exports&&"undefined"!=typeof module&&(module.exports=SPE),SPE.TypedArrayHelper=function(a,b,c,d){"use strict";this.componentSize=c||1,this.size=b||1,this.TypedArrayConstructor=a||Float32Array,this.array=new a(b*this.componentSize),this.indexOffset=d||0},SPE.TypedArrayHelper.constructor=SPE.TypedArrayHelper,SPE.TypedArrayHelper.prototype.setSize=function(a,b){"use strict";var c=this.array.length;return b||(a*=this.componentSize),ac?this.grow(a):void console.info("TypedArray is already of size:",a+".","Will not resize.")},SPE.TypedArrayHelper.prototype.shrink=function(a){"use strict";return this.array=this.array.subarray(0,a),this.size=a,this},SPE.TypedArrayHelper.prototype.grow=function(a){"use strict";var b=this.array,c=new this.TypedArrayConstructor(a);return c.set(b),this.array=c,this.size=a,this}, -SPE.TypedArrayHelper.prototype.splice=function(a,b){"use strict";a*=this.componentSize,b*=this.componentSize;for(var c=[],d=this.array,e=d.length,f=0;f=b)&&c.push(d[f]);return this.setFromArray(0,c),this},SPE.TypedArrayHelper.prototype.setFromArray=function(a,b){"use strict";var c=b.length,d=a+c;return d>this.array.length?this.grow(d):d=81&&(this.bufferAttribute.count=this.bufferAttribute.array.length/this.bufferAttribute.itemSize),void(this.bufferAttribute.needsUpdate=!0);this.bufferAttribute=new THREE.BufferAttribute(this.typedArray.array,this.componentSize),this.bufferAttribute.usage=this.dynamicBuffer?THREE.DynamicDrawUsage:THREE.StaticDrawUsage},SPE.ShaderAttribute.prototype.getLength=function(){"use strict";return null===this.typedArray?0:this.typedArray.array.length},SPE.shaderChunks={ -defines:["#define PACKED_COLOR_SIZE 256.0","#define PACKED_COLOR_DIVISOR 255.0"].join("\n"),uniforms:["uniform float deltaTime;","uniform float runTime;","uniform sampler2D tex;","uniform vec4 textureAnimation;","uniform float scale;"].join("\n"),attributes:["attribute vec4 acceleration;","attribute vec3 velocity;","attribute vec4 rotation;","attribute vec3 rotationCenter;","attribute vec4 params;","attribute vec4 size;","attribute vec4 angle;","attribute vec4 color;","attribute vec4 opacity;"].join("\n"),varyings:["varying vec4 vColor;","#ifdef SHOULD_ROTATE_TEXTURE"," varying float vAngle;","#endif","#ifdef SHOULD_CALCULATE_SPRITE"," varying vec4 vSpriteSheet;","#endif"].join("\n"), -branchAvoidanceFunctions:["float when_gt(float x, float y) {"," return max(sign(x - y), 0.0);","}","float when_lt(float x, float y) {"," return min( max(1.0 - sign(x - y), 0.0), 1.0 );","}","float when_eq( float x, float y ) {"," return 1.0 - abs( sign( x - y ) );","}","float when_ge(float x, float y) {"," return 1.0 - when_lt(x, y);","}","float when_le(float x, float y) {"," return 1.0 - when_gt(x, y);","}","float and(float a, float b) {"," return a * b;","}","float or(float a, float b) {"," return min(a + b, 1.0);","}"].join("\n"),unpackColor:["vec3 unpackColor( in float hex ) {"," vec3 c = vec3( 0.0 );"," float r = mod( (hex / PACKED_COLOR_SIZE / PACKED_COLOR_SIZE), PACKED_COLOR_SIZE );"," float g = mod( (hex / PACKED_COLOR_SIZE), PACKED_COLOR_SIZE );"," float b = mod( hex, PACKED_COLOR_SIZE );"," c.r = r / PACKED_COLOR_DIVISOR;"," c.g = g / PACKED_COLOR_DIVISOR;"," c.b = b / PACKED_COLOR_DIVISOR;"," return c;","}"].join("\n"), -unpackRotationAxis:["vec3 unpackRotationAxis( in float hex ) {"," vec3 c = vec3( 0.0 );"," float r = mod( (hex / PACKED_COLOR_SIZE / PACKED_COLOR_SIZE), PACKED_COLOR_SIZE );"," float g = mod( (hex / PACKED_COLOR_SIZE), PACKED_COLOR_SIZE );"," float b = mod( hex, PACKED_COLOR_SIZE );"," c.r = r / PACKED_COLOR_DIVISOR;"," c.g = g / PACKED_COLOR_DIVISOR;"," c.b = b / PACKED_COLOR_DIVISOR;"," c *= vec3( 2.0 );"," c -= vec3( 1.0 );"," return c;","}"].join("\n"), -floatOverLifetime:["float getFloatOverLifetime( in float positionInTime, in vec4 attr ) {"," highp float value = 0.0;"," float deltaAge = positionInTime * float( VALUE_OVER_LIFETIME_LENGTH - 1 );"," float fIndex = 0.0;"," float shouldApplyValue = 0.0;"," value += attr[ 0 ] * when_eq( deltaAge, 0.0 );",""," for( int i = 0; i < VALUE_OVER_LIFETIME_LENGTH - 1; ++i ) {"," fIndex = float( i );"," shouldApplyValue = and( when_gt( deltaAge, fIndex ), when_le( deltaAge, fIndex + 1.0 ) );"," value += shouldApplyValue * mix( attr[ i ], attr[ i + 1 ], deltaAge - fIndex );"," }",""," return value;","}"].join("\n"), -colorOverLifetime:["vec3 getColorOverLifetime( in float positionInTime, in vec3 color1, in vec3 color2, in vec3 color3, in vec3 color4 ) {"," vec3 value = vec3( 0.0 );"," value.x = getFloatOverLifetime( positionInTime, vec4( color1.x, color2.x, color3.x, color4.x ) );"," value.y = getFloatOverLifetime( positionInTime, vec4( color1.y, color2.y, color3.y, color4.y ) );"," value.z = getFloatOverLifetime( positionInTime, vec4( color1.z, color2.z, color3.z, color4.z ) );"," return value;","}"].join("\n"),paramFetchingFunctions:["float getAlive() {"," return params.x;","}","float getAge() {"," return params.y;","}","float getMaxAge() {"," return params.z;","}","float getWiggle() {"," return params.w;","}"].join("\n"), -forceFetchingFunctions:["vec4 getPosition( in float age ) {"," return modelViewMatrix * vec4( position, 1.0 );","}","vec3 getVelocity( in float age ) {"," return velocity * age;","}","vec3 getAcceleration( in float age ) {"," return acceleration.xyz * age;","}"].join("\n"), -rotationFunctions:["#ifdef SHOULD_ROTATE_PARTICLES"," mat4 getRotationMatrix( in vec3 axis, in float angle) {"," axis = normalize(axis);"," float s = sin(angle);"," float c = cos(angle);"," float oc = 1.0 - c;",""," return mat4(oc * axis.x * axis.x + c, oc * axis.x * axis.y - axis.z * s, oc * axis.z * axis.x + axis.y * s, 0.0,"," oc * axis.x * axis.y + axis.z * s, oc * axis.y * axis.y + c, oc * axis.y * axis.z - axis.x * s, 0.0,"," oc * axis.z * axis.x - axis.y * s, oc * axis.y * axis.z + axis.x * s, oc * axis.z * axis.z + c, 0.0,"," 0.0, 0.0, 0.0, 1.0);"," }",""," vec3 getRotation( in vec3 pos, in float positionInTime ) {"," if( rotation.y == 0.0 ) {"," return pos;"," }",""," vec3 axis = unpackRotationAxis( rotation.x );"," vec3 center = rotationCenter;"," vec3 translated;"," mat4 rotationMatrix;"," float angle = 0.0;"," angle += when_eq( rotation.z, 0.0 ) * rotation.y;"," angle += when_gt( rotation.z, 0.0 ) * mix( 0.0, rotation.y, positionInTime );"," translated = rotationCenter - pos;"," rotationMatrix = getRotationMatrix( axis, angle );"," return center - vec3( rotationMatrix * vec4( translated, 0.0 ) );"," }","#endif"].join("\n"), -rotateTexture:[" vec2 vUv = vec2( gl_PointCoord.x, 1.0 - gl_PointCoord.y );",""," #ifdef SHOULD_ROTATE_TEXTURE"," float x = gl_PointCoord.x - 0.5;"," float y = 1.0 - gl_PointCoord.y - 0.5;"," float c = cos( -vAngle );"," float s = sin( -vAngle );"," vUv = vec2( c * x + s * y + 0.5, c * y - s * x + 0.5 );"," #endif",""," #ifdef SHOULD_CALCULATE_SPRITE"," float framesX = vSpriteSheet.x;"," float framesY = vSpriteSheet.y;"," float columnNorm = vSpriteSheet.z;"," float rowNorm = vSpriteSheet.w;"," vUv.x = gl_PointCoord.x * framesX + columnNorm;"," vUv.y = 1.0 - (gl_PointCoord.y * framesY + rowNorm);"," #endif",""," vec4 rotatedTexture = texture2D( tex, vUv );"].join("\n")},SPE.shaders={ -vertex:[SPE.shaderChunks.defines,SPE.shaderChunks.uniforms,SPE.shaderChunks.attributes,SPE.shaderChunks.varyings,THREE.ShaderChunk.common,THREE.ShaderChunk.logdepthbuf_pars_vertex,THREE.ShaderChunk.fog_pars_vertex,SPE.shaderChunks.branchAvoidanceFunctions,SPE.shaderChunks.unpackColor,SPE.shaderChunks.unpackRotationAxis,SPE.shaderChunks.floatOverLifetime,SPE.shaderChunks.colorOverLifetime,SPE.shaderChunks.paramFetchingFunctions,SPE.shaderChunks.forceFetchingFunctions,SPE.shaderChunks.rotationFunctions,"void main() {"," highp float age = getAge();"," highp float alive = getAlive();"," highp float maxAge = getMaxAge();"," highp float positionInTime = (age / maxAge);"," highp float isAlive = when_gt( alive, 0.0 );"," #ifdef SHOULD_WIGGLE_PARTICLES"," float wiggleAmount = positionInTime * getWiggle();"," float wiggleSin = isAlive * sin( wiggleAmount );"," float wiggleCos = isAlive * cos( wiggleAmount );"," #endif"," vec3 vel = getVelocity( age );"," vec3 accel = getAcceleration( age );"," vec3 force = vec3( 0.0 );"," vec3 pos = vec3( position );"," float drag = 1.0 - (positionInTime * 0.5) * acceleration.w;"," force += vel;"," force *= drag;"," force += accel * age;"," pos += force;"," #ifdef SHOULD_WIGGLE_PARTICLES"," pos.x += wiggleSin;"," pos.y += wiggleCos;"," pos.z += wiggleSin;"," #endif"," #ifdef SHOULD_ROTATE_PARTICLES"," pos = getRotation( pos, positionInTime );"," #endif"," vec4 mvPosition = modelViewMatrix * vec4( pos, 1.0 );"," highp float pointSize = getFloatOverLifetime( positionInTime, size ) * isAlive;"," #ifdef HAS_PERSPECTIVE"," float perspective = scale / length( mvPosition.xyz );"," #else"," float perspective = 1.0;"," #endif"," float pointSizePerspective = pointSize * perspective;"," #ifdef COLORIZE"," vec3 c = isAlive * getColorOverLifetime("," positionInTime,"," unpackColor( color.x ),"," unpackColor( color.y ),"," unpackColor( color.z ),"," unpackColor( color.w )"," );"," #else"," vec3 c = vec3(1.0);"," #endif"," float o = isAlive * getFloatOverLifetime( positionInTime, opacity );"," vColor = vec4( c, o );"," #ifdef SHOULD_ROTATE_TEXTURE"," vAngle = isAlive * getFloatOverLifetime( positionInTime, angle );"," #endif"," #ifdef SHOULD_CALCULATE_SPRITE"," float framesX = textureAnimation.x;"," float framesY = textureAnimation.y;"," float loopCount = textureAnimation.w;"," float totalFrames = textureAnimation.z;"," float frameNumber = mod( (positionInTime * loopCount) * totalFrames, totalFrames );"," float column = floor(mod( frameNumber, framesX ));"," float row = floor( (frameNumber - column) / framesX );"," float columnNorm = column / framesX;"," float rowNorm = row / framesY;"," vSpriteSheet.x = 1.0 / framesX;"," vSpriteSheet.y = 1.0 / framesY;"," vSpriteSheet.z = columnNorm;"," vSpriteSheet.w = rowNorm;"," #endif"," gl_PointSize = pointSizePerspective;"," gl_Position = projectionMatrix * mvPosition;",THREE.ShaderChunk.logdepthbuf_vertex,THREE.ShaderChunk.fog_vertex,"}"].join("\n"), -fragment:[SPE.shaderChunks.uniforms,THREE.ShaderChunk.common,THREE.ShaderChunk.fog_pars_fragment,THREE.ShaderChunk.logdepthbuf_pars_fragment,SPE.shaderChunks.varyings,SPE.shaderChunks.branchAvoidanceFunctions,"void main() {"," vec3 outgoingLight = vColor.xyz;"," "," #ifdef ALPHATEST"," if ( vColor.w < float(ALPHATEST) ) discard;"," #endif",SPE.shaderChunks.rotateTexture,THREE.ShaderChunk.logdepthbuf_fragment," outgoingLight = vColor.xyz * rotatedTexture.xyz;"," gl_FragColor = vec4( outgoingLight.xyz, rotatedTexture.w * vColor.w );",THREE.ShaderChunk.fog_fragment,"}"].join("\n")},SPE.utils={types:{BOOLEAN:"boolean",STRING:"string",NUMBER:"number",OBJECT:"object"},ensureTypedArg:function(a,b,c){"use strict";return typeof a===b?a:c},ensureArrayTypedArg:function(a,b,c){"use strict";if(Array.isArray(a)){for(var d=a.length-1;d>=0;--d)if(typeof a[d]!==b)return c;return a}return this.ensureTypedArg(a,b,c)},ensureInstanceOf:function(a,b,c){"use strict" -;return void 0!==b&&a instanceof b?a:c},ensureArrayInstanceOf:function(a,b,c){"use strict";if(Array.isArray(a)){for(var d=a.length-1;d>=0;--d)if(void 0!==b&&a[d]instanceof b==!1)return c;return a}return this.ensureInstanceOf(a,b,c)},ensureValueOverLifetimeCompliance:function(a,b,c){"use strict";b=b||3,c=c||3,!1===Array.isArray(a._value)&&(a._value=[a._value]),!1===Array.isArray(a._spread)&&(a._spread=[a._spread]);var d=this.clamp(a._value.length,b,c),e=this.clamp(a._spread.length,b,c),f=Math.max(d,e);a._value.length!==f&&(a._value=this.interpolateArray(a._value,f)),a._spread.length!==f&&(a._spread=this.interpolateArray(a._spread,f))},interpolateArray:function(a,b){"use strict";for(var c=a.length,d=["function"==typeof a[0].clone?a[0].clone():a[0]],e=(c-1)/(b-1),f=1;f-c&&(d=-d),d},lerpTypeAgnostic:function(a,b,c){"use strict";var d,e=this.types;return typeof a===e.NUMBER&&typeof b===e.NUMBER?a+(b-a)*c:a instanceof THREE.Vector2&&b instanceof THREE.Vector2?(d=a.clone(),d.x=this.lerp(a.x,b.x,c),d.y=this.lerp(a.y,b.y,c),d):a instanceof THREE.Vector3&&b instanceof THREE.Vector3?(d=a.clone(),d.x=this.lerp(a.x,b.x,c),d.y=this.lerp(a.y,b.y,c),d.z=this.lerp(a.z,b.z,c),d):a instanceof THREE.Vector4&&b instanceof THREE.Vector4?(d=a.clone(),d.x=this.lerp(a.x,b.x,c),d.y=this.lerp(a.y,b.y,c),d.z=this.lerp(a.z,b.z,c),d.w=this.lerp(a.w,b.w,c),d):a instanceof THREE.Color&&b instanceof THREE.Color?(d=a.clone(),d.r=this.lerp(a.r,b.r,c),d.g=this.lerp(a.g,b.g,c),d.b=this.lerp(a.b,b.b,c),d):void console.warn("Invalid argument types, or argument types do not match:",a,b)},lerp:function(a,b,c){"use strict";return a+(b-a)*c}, -roundToNearestMultiple:function(a,b){"use strict";var c=0;return 0===b?a:(c=Math.abs(a)%b,0===c?a:a<0?-(Math.abs(a)-c):a+b-c)},arrayValuesAreEqual:function(a){"use strict";for(var b=0;b1||this.textureFrames.y>1},this.attributes={position:new SPE.ShaderAttribute("v3",!0),acceleration:new SPE.ShaderAttribute("v4",!0),velocity:new SPE.ShaderAttribute("v3",!0),rotation:new SPE.ShaderAttribute("v4",!0),rotationCenter:new SPE.ShaderAttribute("v3",!0),params:new SPE.ShaderAttribute("v4",!0),size:new SPE.ShaderAttribute("v4",!0),angle:new SPE.ShaderAttribute("v4",!0),color:new SPE.ShaderAttribute("v4",!0),opacity:new SPE.ShaderAttribute("v4",!0)},this.attributeKeys=Object.keys(this.attributes),this.attributeCount=this.attributeKeys.length,this.material=new THREE.ShaderMaterial({uniforms:this.uniforms,vertexShader:SPE.shaders.vertex,fragmentShader:SPE.shaders.fragment,blending:this.blending,transparent:this.transparent,alphaTest:this.alphaTest,depthWrite:this.depthWrite,depthTest:this.depthTest,defines:this.defines,fog:this.fog}), -this.geometry=new THREE.BufferGeometry,this.mesh=new THREE.Points(this.geometry,this.material),null===this.maxParticleCount&&console.warn("SPE.Group: No maxParticleCount specified. Adding emitters after rendering will probably cause errors.")},SPE.Group.constructor=SPE.Group,SPE.Group.prototype._updateDefines=function(){"use strict";var a,b=this.emitters,c=b.length-1,d=this.defines;for(c;c>=0;--c)a=b[c],d.SHOULD_CALCULATE_SPRITE||(d.SHOULD_ROTATE_TEXTURE=d.SHOULD_ROTATE_TEXTURE||!!Math.max(Math.max.apply(null,a.angle.value),Math.max.apply(null,a.angle.spread))),d.SHOULD_ROTATE_PARTICLES=d.SHOULD_ROTATE_PARTICLES||!!Math.max(a.rotation.angle,a.rotation.angleSpread),d.SHOULD_WIGGLE_PARTICLES=d.SHOULD_WIGGLE_PARTICLES||!!Math.max(a.wiggle.value,a.wiggle.spread);this.material.needsUpdate=!0},SPE.Group.prototype._applyAttributesToGeometry=function(){"use strict";var a,b,c=this.attributes,d=this.geometry,e=d.attributes;for(var f in c)c.hasOwnProperty(f)&&(a=c[f],b=e[f], -b?b.array=a.typedArray.array:d.addAttribute(f,a.bufferAttribute),a.bufferAttribute.needsUpdate=!0);this.geometry.setDrawRange(0,this.particleCount)},SPE.Group.prototype.addEmitter=function(a){"use strict";if(a instanceof SPE.Emitter==!1)return void console.error("`emitter` argument must be instance of SPE.Emitter. Was provided with:",a);if(this.emitterIDs.indexOf(a.uuid)>-1)return void console.error("Emitter already exists in this group. Will not add again.");if(null!==a.group)return void console.error("Emitter already belongs to another group. Will not add to requested group.");var b=this.attributes,c=this.particleCount,d=c+a.particleCount;this.particleCount=d,null!==this.maxParticleCount&&this.particleCount>this.maxParticleCount&&console.warn("SPE.Group: maxParticleCount exceeded. Requesting",this.particleCount,"particles, can support only",this.maxParticleCount),a._calculatePPSValue(a.maxAge._value+a.maxAge._spread),a._setBufferUpdateRanges(this.attributeKeys), -a._setAttributeOffset(c),a.group=this,a.attributes=this.attributes;for(var e in b)b.hasOwnProperty(e)&&b[e]._createBufferAttribute(null!==this.maxParticleCount?this.maxParticleCount:this.particleCount);for(var f=c;f1)for(var c=0;c=0;--b)c[a[b]].resetUpdateRange()},SPE.Group.prototype._updateBuffers=function(a){"use strict";var b,c,d,e=this.attributeKeys,f=this.attributeCount-1,g=this.attributes,h=a.bufferUpdateRanges;for(f;f>=0;--f)b=e[f],c=h[b],d=g[b],d.setUpdateRange(c.min,c.max),d.flagUpdate()},SPE.Group.prototype.tick=function(a){"use strict";var b,c=this.emitters,d=c.length,e=a||this.fixedTimeStep,f=this.attributeKeys,g=this.attributes;if(this._updateUniforms(e),this._resetBufferRanges(),0!==d||!1!==this._attributesNeedRefresh||!1!==this._attributesNeedDynamicReset){for(var h,b=0;b=0;--b)g[f[b]].resetDynamic();this._attributesNeedDynamicReset=!1}if(!0===this._attributesNeedRefresh){for(b=this.attributeCount-1;b>=0;--b)g[f[b]].forceUpdateAll();this._attributesNeedRefresh=!1,this._attributesNeedDynamicReset=!0}}}, -SPE.Group.prototype.dispose=function(){"use strict";return this.geometry.dispose(),this.material.dispose(),this},SPE.Emitter=function(a){"use strict";var b=SPE.utils,c=b.types,d=SPE.valueOverLifetimeLength;a=b.ensureTypedArg(a,c.OBJECT,{}),a.position=b.ensureTypedArg(a.position,c.OBJECT,{}),a.velocity=b.ensureTypedArg(a.velocity,c.OBJECT,{}),a.acceleration=b.ensureTypedArg(a.acceleration,c.OBJECT,{}),a.radius=b.ensureTypedArg(a.radius,c.OBJECT,{}),a.drag=b.ensureTypedArg(a.drag,c.OBJECT,{}),a.rotation=b.ensureTypedArg(a.rotation,c.OBJECT,{}),a.color=b.ensureTypedArg(a.color,c.OBJECT,{}),a.opacity=b.ensureTypedArg(a.opacity,c.OBJECT,{}),a.size=b.ensureTypedArg(a.size,c.OBJECT,{}),a.angle=b.ensureTypedArg(a.angle,c.OBJECT,{}),a.wiggle=b.ensureTypedArg(a.wiggle,c.OBJECT,{}),a.maxAge=b.ensureTypedArg(a.maxAge,c.OBJECT,{}),a.onParticleSpawn&&console.warn("onParticleSpawn has been removed. Please set properties directly to alter values at runtime."),this.uuid=THREE.Math.generateUUID(), -this.type=b.ensureTypedArg(a.type,c.NUMBER,SPE.distributions.BOX),this.position={_value:b.ensureInstanceOf(a.position.value,THREE.Vector3,new THREE.Vector3),_spread:b.ensureInstanceOf(a.position.spread,THREE.Vector3,new THREE.Vector3),_spreadClamp:b.ensureInstanceOf(a.position.spreadClamp,THREE.Vector3,new THREE.Vector3),_distribution:b.ensureTypedArg(a.position.distribution,c.NUMBER,this.type),_randomise:b.ensureTypedArg(a.position.randomise,c.BOOLEAN,!1),_radius:b.ensureTypedArg(a.position.radius,c.NUMBER,10),_radiusScale:b.ensureInstanceOf(a.position.radiusScale,THREE.Vector3,new THREE.Vector3(1,1,1)),_distributionClamp:b.ensureTypedArg(a.position.distributionClamp,c.NUMBER,0)},this.velocity={_value:b.ensureInstanceOf(a.velocity.value,THREE.Vector3,new THREE.Vector3),_spread:b.ensureInstanceOf(a.velocity.spread,THREE.Vector3,new THREE.Vector3),_distribution:b.ensureTypedArg(a.velocity.distribution,c.NUMBER,this.type),_randomise:b.ensureTypedArg(a.position.randomise,c.BOOLEAN,!1)}, -this.acceleration={_value:b.ensureInstanceOf(a.acceleration.value,THREE.Vector3,new THREE.Vector3),_spread:b.ensureInstanceOf(a.acceleration.spread,THREE.Vector3,new THREE.Vector3),_distribution:b.ensureTypedArg(a.acceleration.distribution,c.NUMBER,this.type),_randomise:b.ensureTypedArg(a.position.randomise,c.BOOLEAN,!1)},this.drag={_value:b.ensureTypedArg(a.drag.value,c.NUMBER,0),_spread:b.ensureTypedArg(a.drag.spread,c.NUMBER,0),_randomise:b.ensureTypedArg(a.position.randomise,c.BOOLEAN,!1)},this.wiggle={_value:b.ensureTypedArg(a.wiggle.value,c.NUMBER,0),_spread:b.ensureTypedArg(a.wiggle.spread,c.NUMBER,0)},this.rotation={_axis:b.ensureInstanceOf(a.rotation.axis,THREE.Vector3,new THREE.Vector3(0,1,0)),_axisSpread:b.ensureInstanceOf(a.rotation.axisSpread,THREE.Vector3,new THREE.Vector3),_angle:b.ensureTypedArg(a.rotation.angle,c.NUMBER,0),_angleSpread:b.ensureTypedArg(a.rotation.angleSpread,c.NUMBER,0),_static:b.ensureTypedArg(a.rotation.static,c.BOOLEAN,!1), -_center:b.ensureInstanceOf(a.rotation.center,THREE.Vector3,this.position._value.clone()),_randomise:b.ensureTypedArg(a.position.randomise,c.BOOLEAN,!1)},this.maxAge={_value:b.ensureTypedArg(a.maxAge.value,c.NUMBER,2),_spread:b.ensureTypedArg(a.maxAge.spread,c.NUMBER,0)},this.color={_value:b.ensureArrayInstanceOf(a.color.value,THREE.Color,new THREE.Color),_spread:b.ensureArrayInstanceOf(a.color.spread,THREE.Vector3,new THREE.Vector3),_randomise:b.ensureTypedArg(a.position.randomise,c.BOOLEAN,!1)},this.opacity={_value:b.ensureArrayTypedArg(a.opacity.value,c.NUMBER,1),_spread:b.ensureArrayTypedArg(a.opacity.spread,c.NUMBER,0),_randomise:b.ensureTypedArg(a.position.randomise,c.BOOLEAN,!1)},this.size={_value:b.ensureArrayTypedArg(a.size.value,c.NUMBER,1),_spread:b.ensureArrayTypedArg(a.size.spread,c.NUMBER,0),_randomise:b.ensureTypedArg(a.position.randomise,c.BOOLEAN,!1)},this.angle={_value:b.ensureArrayTypedArg(a.angle.value,c.NUMBER,0), -_spread:b.ensureArrayTypedArg(a.angle.spread,c.NUMBER,0),_randomise:b.ensureTypedArg(a.position.randomise,c.BOOLEAN,!1)},this.particleCount=b.ensureTypedArg(a.particleCount,c.NUMBER,100),this.duration=b.ensureTypedArg(a.duration,c.NUMBER,null),this.isStatic=b.ensureTypedArg(a.isStatic,c.BOOLEAN,!1),this.activeMultiplier=b.ensureTypedArg(a.activeMultiplier,c.NUMBER,1),this.direction=b.ensureTypedArg(a.direction,c.NUMBER,1),this.alive=b.ensureTypedArg(a.alive,c.BOOLEAN,!0),this.particlesPerSecond=0,this.activationIndex=0,this.attributeOffset=0,this.attributeEnd=0,this.age=0,this.activeParticleCount=0,this.group=null,this.attributes=null,this.paramsArray=null,this.resetFlags={position:b.ensureTypedArg(a.position.randomise,c.BOOLEAN,!1)||b.ensureTypedArg(a.radius.randomise,c.BOOLEAN,!1),velocity:b.ensureTypedArg(a.velocity.randomise,c.BOOLEAN,!1),acceleration:b.ensureTypedArg(a.acceleration.randomise,c.BOOLEAN,!1)||b.ensureTypedArg(a.drag.randomise,c.BOOLEAN,!1), -rotation:b.ensureTypedArg(a.rotation.randomise,c.BOOLEAN,!1),rotationCenter:b.ensureTypedArg(a.rotation.randomise,c.BOOLEAN,!1),size:b.ensureTypedArg(a.size.randomise,c.BOOLEAN,!1),color:b.ensureTypedArg(a.color.randomise,c.BOOLEAN,!1),opacity:b.ensureTypedArg(a.opacity.randomise,c.BOOLEAN,!1),angle:b.ensureTypedArg(a.angle.randomise,c.BOOLEAN,!1)},this.updateFlags={},this.updateCounts={},this.updateMap={maxAge:"params",position:"position",velocity:"velocity",acceleration:"acceleration",drag:"acceleration",wiggle:"params",rotation:"rotation",size:"size",color:"color",opacity:"opacity",angle:"angle"};for(var e in this.updateMap)this.updateMap.hasOwnProperty(e)&&(this.updateCounts[this.updateMap[e]]=0,this.updateFlags[this.updateMap[e]]=!1,this._createGetterSetters(this[e],e));this.bufferUpdateRanges={},this.attributeKeys=null,this.attributeCount=0,b.ensureValueOverLifetimeCompliance(this.color,d,d),b.ensureValueOverLifetimeCompliance(this.opacity,d,d), -b.ensureValueOverLifetimeCompliance(this.size,d,d),b.ensureValueOverLifetimeCompliance(this.angle,d,d)},SPE.Emitter.constructor=SPE.Emitter,SPE.Emitter.prototype._createGetterSetters=function(a,b){"use strict";var c=this;for(var d in a)if(a.hasOwnProperty(d)){var e=d.replace("_","");Object.defineProperty(a,e,{get:function(a){return function(){return this[a]}}(d),set:function(a){return function(d){var e=c.updateMap[b],f=this[a],g=SPE.valueOverLifetimeLength;"_rotationCenter"===a?(c.updateFlags.rotationCenter=!0,c.updateCounts.rotationCenter=0):"_randomise"===a?c.resetFlags[e]=d:(c.updateFlags[e]=!0,c.updateCounts[e]=0),c.group._updateDefines(),this[a]=d,Array.isArray(f)&&SPE.utils.ensureValueOverLifetimeCompliance(c[b],g,g)}}(d)})}},SPE.Emitter.prototype._setBufferUpdateRanges=function(a){"use strict";this.attributeKeys=a,this.attributeCount=a.length;for(var b=this.attributeCount-1;b>=0;--b)this.bufferUpdateRanges[a[b]]={min:Number.POSITIVE_INFINITY,max:Number.NEGATIVE_INFINITY}}, -SPE.Emitter.prototype._calculatePPSValue=function(a){"use strict";var b=this.particleCount;this.duration?this.particlesPerSecond=b/(a=0;--h)b=g[h],c=e[b],!0!==d[b]&&!0!==c||(this._assignValue(b,a),this._updateAttributeUpdateRange(b,a),!0===c&&f[b]===this.particleCount?(e[b]=!1,f[b]=0):1==c&&++f[b])},SPE.Emitter.prototype._updateAttributeUpdateRange=function(a,b){"use strict";var c=this.bufferUpdateRanges[a];c.min=Math.min(b,c.min),c.max=Math.max(b,c.max)},SPE.Emitter.prototype._resetBufferRanges=function(){"use strict";var a,b=this.bufferUpdateRanges,c=this.bufferUpdateKeys,d=this.bufferUpdateCount-1;for(d;d>=0;--d)a=c[d],b[a].min=Number.POSITIVE_INFINITY,b[a].max=Number.NEGATIVE_INFINITY},SPE.Emitter.prototype._onRemove=function(){"use strict";this.particlesPerSecond=0,this.attributeOffset=0,this.activationIndex=0,this.activeParticleCount=0, -this.group=null,this.attributes=null,this.paramsArray=null,this.age=0},SPE.Emitter.prototype._decrementParticleCount=function(){"use strict";--this.activeParticleCount},SPE.Emitter.prototype._incrementParticleCount=function(){"use strict";++this.activeParticleCount},SPE.Emitter.prototype._checkParticleAges=function(a,b,c,d){"use strict";for(var e,f,g,h,i=b-1;i>=a;--i)e=4*i,0!==(h=c[e])&&(g=c[e+1],f=c[e+2],1===this.direction?(g+=d)>=f&&(g=0,h=0,this._decrementParticleCount()):(g-=d)<=0&&(g=f,h=0,this._decrementParticleCount()),c[e]=h,c[e+1]=g,this._updateAttributeUpdateRange("params",i))},SPE.Emitter.prototype._activateParticles=function(a,b,c,d){"use strict";for(var e,f,g=this.direction,h=a;hthis.duration)return this.alive=!1,void(this.age=0);var g=1===this.particleCount?f:0|f,h=Math.min(g+e,this.activationEnd),i=h-this.activationIndex|0,j=i>0?a/i:0;this._activateParticles(g,h,d,j),this.activationIndex+=e,this.activationIndex>c&&(this.activationIndex=b),this.age+=a}},SPE.Emitter.prototype.reset=function(a){"use strict";if(this.age=0,this.alive=!1,!0===a){for(var b,c=this.attributeOffset,d=c+this.particleCount,e=this.paramsArray,f=this.attributes.params.bufferAttribute,g=d-1;g>=c;--g)b=4*g,e[b]=0,e[b+1]=0;f.updateRange.offset=0,f.updateRange.count=-1,f.needsUpdate=!0}return this}, -SPE.Emitter.prototype.enable=function(){"use strict";return this.alive=!0,this},SPE.Emitter.prototype.disable=function(){"use strict";return this.alive=!1,this},SPE.Emitter.prototype.remove=function(){"use strict";return null!==this.group?this.group.removeEmitter(this):console.error("Emitter does not belong to a group, cannot remove."),this}; \ No newline at end of file +var SPE={distributions:{BOX:1,SPHERE:2,DISC:3,LINE:4},valueOverLifetimeLength:4};"function"==typeof define&&define.amd?define("spe",SPE):"undefined"!=typeof exports&&"undefined"!=typeof module&&(module.exports=SPE),SPE.TypedArrayHelper=function(e,t,r,i){this.componentSize=r||1,this.size=t||1,this.TypedArrayConstructor=e||Float32Array,this.array=new e(t*this.componentSize),this.indexOffset=i||0},SPE.TypedArrayHelper.constructor=SPE.TypedArrayHelper,SPE.TypedArrayHelper.prototype.setSize=function(e,t){var r=this.array.length;return t||(e*=this.componentSize),ethis.array.length?this.grow(r):r{var u=new THREE.Color;return function(e,t,r,i){for(var a=r.length,o=[],n=0;n{var u=new THREE.Vector3;return function(e,t,r,i,a,o,n,s){u.copy(o),u.x-=r,u.y-=i,u.z-=a,u.normalize().multiplyScalar(-this.randomFloat(n,s)),e.typedArray.setVec3Components(t,u.x,u.y,u.z)}})(),randomDirectionVector3OnDisc:(()=>{var u=new THREE.Vector3;return function(e,t,r,i,a,o,n,s){u.copy(o),u.x-=r,u.y-=i,u.z-=a,u.normalize().multiplyScalar(-this.randomFloat(n,s)),e.typedArray.setVec3Components(t,u.x,u.y,0)}})(),getPackedRotationAxis:(()=>{var r=new THREE.Vector3,i=new THREE.Vector3,a=new THREE.Color,o=new THREE.Vector3(1,1,1);return function(e,t){return r.copy(e).normalize(),i.copy(t).normalize(),r.x+=.5*-t.x+Math.random()*t.x,r.y+=.5*-t.y+Math.random()*t.y,r.z+=.5*-t.z+Math.random()*t.z,r.normalize().add(o).multiplyScalar(.5),a.setRGB(r.x,r.y,r.z),a.getHex()}})()},SPE.Group=function(e){var t=SPE.utils,r=t.types;(e=t.ensureTypedArg(e,r.OBJECT,{})).texture=t.ensureTypedArg(e.texture,r.OBJECT,{}),this.uuid=THREE.Math.generateUUID(),this.fixedTimeStep=t.ensureTypedArg(e.fixedTimeStep,r.NUMBER,.016),this.texture=t.ensureInstanceOf(e.texture.value,THREE.Texture,null),this.textureFrames=t.ensureInstanceOf(e.texture.frames,THREE.Vector2,new THREE.Vector2(1,1)),this.textureFrameCount=t.ensureTypedArg(e.texture.frameCount,r.NUMBER,this.textureFrames.x*this.textureFrames.y),this.textureLoop=t.ensureTypedArg(e.texture.loop,r.NUMBER,1),this.textureFrames.max(new THREE.Vector2(1,1)),this.hasPerspective=t.ensureTypedArg(e.hasPerspective,r.BOOLEAN,!0),this.colorize=t.ensureTypedArg(e.colorize,r.BOOLEAN,!0),this.maxParticleCount=t.ensureTypedArg(e.maxParticleCount,r.NUMBER,null),this.blending=t.ensureTypedArg(e.blending,r.NUMBER,THREE.AdditiveBlending),this.transparent=t.ensureTypedArg(e.transparent,r.BOOLEAN,!0),this.alphaTest=parseFloat(t.ensureTypedArg(e.alphaTest,r.NUMBER,0)),this.depthWrite=t.ensureTypedArg(e.depthWrite,r.BOOLEAN,!1),this.depthTest=t.ensureTypedArg(e.depthTest,r.BOOLEAN,!0),this.fog=t.ensureTypedArg(e.fog,r.BOOLEAN,!0),this.scale=t.ensureTypedArg(e.scale,r.NUMBER,300),this.emitters=[],this.emitterIDs=[],this._pool=[],this._poolCreationSettings=null,this._createNewWhenPoolEmpty=0,this._attributesNeedRefresh=!1,this._attributesNeedDynamicReset=!1,this.particleCount=0,this.uniforms={tex:{type:"t",value:this.texture},textureAnimation:{type:"v4",value:new THREE.Vector4(this.textureFrames.x,this.textureFrames.y,this.textureFrameCount,Math.max(Math.abs(this.textureLoop),1))},fogColor:{type:"c",value:this.fog?new THREE.Color:null},fogNear:{type:"f",value:10},fogFar:{type:"f",value:200},fogDensity:{type:"f",value:.5},deltaTime:{type:"f",value:0},runTime:{type:"f",value:0},scale:{type:"f",value:this.scale}},this.defines={HAS_PERSPECTIVE:this.hasPerspective,COLORIZE:this.colorize,VALUE_OVER_LIFETIME_LENGTH:SPE.valueOverLifetimeLength,SHOULD_ROTATE_TEXTURE:!1,SHOULD_ROTATE_PARTICLES:!1,SHOULD_WIGGLE_PARTICLES:!1,SHOULD_CALCULATE_SPRITE:1this.maxParticleCount&&console.warn("SPE.Group: maxParticleCount exceeded. Requesting",this.particleCount,"particles, can support only",this.maxParticleCount),e._calculatePPSValue(e.maxAge._value+e.maxAge._spread),e._setBufferUpdateRanges(this.attributeKeys),e._setAttributeOffset(i),e.group=this,e.attributes=this.attributes,r)r.hasOwnProperty(t)&&r[t]._createBufferAttribute(null!==this.maxParticleCount?this.maxParticleCount:this.particleCount);for(var o=i;ofunction(){return this[e]})(t),set:(a=>function(e){var t=n.updateMap[o],r=this[a],i=SPE.valueOverLifetimeLength;"_rotationCenter"===a?(n.updateFlags.rotationCenter=!0,n.updateCounts.rotationCenter=0):"_randomise"===a?n.resetFlags[t]=e:(n.updateFlags[t]=!0,n.updateCounts[t]=0),n.group._updateDefines(),this[a]=e,Array.isArray(r)&&SPE.utils.ensureValueOverLifetimeCompliance(n[o],i,i)})(t)}))},SPE.Emitter.prototype._setBufferUpdateRanges=function(e){this.attributeKeys=e,this.attributeCount=e.length;for(var t=this.attributeCount-1;0<=t;--t)this.bufferUpdateRanges[e[t]]={min:Number.POSITIVE_INFINITY,max:Number.NEGATIVE_INFINITY}},SPE.Emitter.prototype._calculatePPSValue=function(e){var t=this.particleCount;this.duration?this.particlesPerSecond=t/(ethis.duration?(this.alive=!1,this.age=0):(o=1===this.particleCount?o:0|o,s=(n=Math.min(o+a,this.activationEnd))-this.activationIndex|0,this._activateParticles(o,n,i,0r&&(this.activationIndex=t),this.age+=e))},SPE.Emitter.prototype.reset=function(e){if(this.age=0,!(this.alive=!1)===e){for(var t,r=this.attributeOffset,e=r+this.particleCount,i=this.paramsArray,a=this.attributes.params.bufferAttribute,o=e-1;r<=o;--o)i[t=4*o]=0,i[1+t]=0;a.updateRange.offset=0,a.updateRange.count=-1,a.needsUpdate=!0}return this},SPE.Emitter.prototype.enable=function(){return this.alive=!0,this},SPE.Emitter.prototype.disable=function(){return this.alive=!1,this},SPE.Emitter.prototype.remove=function(){return null!==this.group?this.group.removeEmitter(this):console.error("Emitter does not belong to a group, cannot remove."),this}; \ No newline at end of file diff --git a/docs/MigrationLog.md b/docs/MigrationLog.md index 2bdaa01..9ffc1f4 100644 --- a/docs/MigrationLog.md +++ b/docs/MigrationLog.md @@ -51,7 +51,7 @@ The `texture` property of `SPE.Group` is in a slightly different format, but now ```javascript var group = new SPE.Group( { texture: { - value: THREE.ImageUtils.loadTexture( ... ), + value: THREE.TextureLoader().load( ... ), frames: new THREE.Vector2( 4, 4 ), // Optional. No. frames on x/y axis of texture frameCount: 16, // Optional. If whole texture isn't used, specify the total number of frames the texture has here loop: 2, // Optional. The number of loops the spritesheet should perform during a particle's lifetime. diff --git a/examples/activeMultiplier.html b/examples/activeMultiplier.html index f0722b6..7fec871 100644 --- a/examples/activeMultiplier.html +++ b/examples/activeMultiplier.html @@ -13,7 +13,7 @@ - + @@ -49,8 +49,10 @@ function initParticles() { particleGroup = new SPE.Group({ texture: { - value: THREE.ImageUtils.loadTexture('./img/smokeparticle.png') - } + value: new THREE.TextureLoader().load('./img/smokeparticle.png') + }, + maxParticleCount: 3000 + }); emitter = new SPE.Emitter({ diff --git a/examples/basic.html b/examples/basic.html index 50f0fb3..78f838d 100644 --- a/examples/basic.html +++ b/examples/basic.html @@ -6,7 +6,7 @@

- + @@ -43,8 +43,9 @@ function initParticles() { particleGroup = new SPE.Group({ texture: { - value: THREE.ImageUtils.loadTexture('./img/smokeparticle.png') - } + value: THREE.TextureLoader().load('./img/smokeparticle.png') + }, + maxParticleCount: 3000 }); emitter = new SPE.Emitter({ diff --git a/examples/clock.html b/examples/clock.html index 3124fcb..1afbfd1 100644 --- a/examples/clock.html +++ b/examples/clock.html @@ -6,7 +6,7 @@ - + @@ -14,7 +14,7 @@ + @@ -43,8 +43,9 @@ function initParticles() { particleGroup = new SPE.Group({ texture: { - value: THREE.ImageUtils.loadTexture('./img/cloud.png') + value: THREE.TextureLoader().load('./img/cloud.png') }, + maxParticleCount: 3000, blending: THREE.NormalBlending, fog: true }); diff --git a/examples/distributions.html b/examples/distributions.html index 196a50a..a72082a 100644 --- a/examples/distributions.html +++ b/examples/distributions.html @@ -5,7 +5,7 @@ - + @@ -40,8 +40,9 @@ function initParticles() { particleGroup = new SPE.Group({ texture: { - value: THREE.ImageUtils.loadTexture('./img/smokeparticle.png') - } + value: THREE.TextureLoader().load('./img/smokeparticle.png') + }, + maxParticleCount: 3000 }); // General distributions. diff --git a/examples/explosion.html b/examples/explosion.html index a868549..55d1ca5 100644 --- a/examples/explosion.html +++ b/examples/explosion.html @@ -6,7 +6,7 @@ - + @@ -41,7 +41,7 @@ clock.getDelta(); var group = new SPE.Group( { texture: { - value: THREE.ImageUtils.loadTexture( './img/sprite-explosion2.png' ), + value: THREE.TextureLoader().load( './img/sprite-explosion2.png' ), frames: new THREE.Vector2( 5, 5 ), loop: 1 }, @@ -52,7 +52,7 @@ } ), shockwaveGroup = new SPE.Group( { texture: { - value: THREE.ImageUtils.loadTexture( './img/smokeparticle.png' ), + value: THREE.TextureLoader().load( './img/smokeparticle.png' ), }, depthTest: false, depthWrite: true, diff --git a/examples/fog.html b/examples/fog.html index 4175db3..587f68c 100644 --- a/examples/fog.html +++ b/examples/fog.html @@ -7,7 +7,7 @@

- + @@ -53,9 +53,10 @@ function initParticles() { particleGroup = new SPE.Group({ texture: { - value: THREE.ImageUtils.loadTexture('./img/smokeparticle.png') + value: THREE.TextureLoader().load('./img/smokeparticle.png') }, - fog: true + fog: true, + maxParticleCount: 3000 }); emitter = new SPE.Emitter({ diff --git a/examples/js/THREE-r84.js b/examples/js/THREE-r84.js deleted file mode 100755 index 76310b5..0000000 --- a/examples/js/THREE-r84.js +++ /dev/null @@ -1,859 +0,0 @@ -// threejs.org/license -(function(l,pa){"object"===typeof exports&&"undefined"!==typeof module?pa(exports):"function"===typeof define&&define.amd?define(["exports"],pa):pa(l.THREE=l.THREE||{})})(this,function(l){function pa(){}function D(a,b){this.x=a||0;this.y=b||0}function ea(a,b,c,d,e,f,g,h,m,k){Object.defineProperty(this,"id",{value:Ze++});this.uuid=N.generateUUID();this.name="";this.image=void 0!==a?a:ea.DEFAULT_IMAGE;this.mipmaps=[];this.mapping=void 0!==b?b:ea.DEFAULT_MAPPING;this.wrapS=void 0!==c?c:1001;this.wrapT= -void 0!==d?d:1001;this.magFilter=void 0!==e?e:1006;this.minFilter=void 0!==f?f:1008;this.anisotropy=void 0!==m?m:1;this.format=void 0!==g?g:1023;this.type=void 0!==h?h:1009;this.offset=new D(0,0);this.repeat=new D(1,1);this.generateMipmaps=!0;this.premultiplyAlpha=!1;this.flipY=!0;this.unpackAlignment=4;this.encoding=void 0!==k?k:3E3;this.version=0;this.onUpdate=null}function fa(a,b,c,d){this.x=a||0;this.y=b||0;this.z=c||0;this.w=void 0!==d?d:1}function Ya(a,b,c){this.uuid=N.generateUUID();this.width= -a;this.height=b;this.scissor=new fa(0,0,a,b);this.scissorTest=!1;this.viewport=new fa(0,0,a,b);c=c||{};void 0===c.minFilter&&(c.minFilter=1006);this.texture=new ea(void 0,void 0,c.wrapS,c.wrapT,c.magFilter,c.minFilter,c.format,c.type,c.anisotropy,c.encoding);this.depthBuffer=void 0!==c.depthBuffer?c.depthBuffer:!0;this.stencilBuffer=void 0!==c.stencilBuffer?c.stencilBuffer:!0;this.depthTexture=void 0!==c.depthTexture?c.depthTexture:null}function Gb(a,b,c){Ya.call(this,a,b,c);this.activeMipMapLevel= -this.activeCubeFace=0}function ca(a,b,c,d){this._x=a||0;this._y=b||0;this._z=c||0;this._w=void 0!==d?d:1}function q(a,b,c){this.x=a||0;this.y=b||0;this.z=c||0}function S(){this.elements=new Float32Array([1,0,0,0,0,1,0,0,0,0,1,0,0,0,0,1]);0= -d||0 0 ) {\nfloat depth = gl_FragCoord.z / gl_FragCoord.w;\nfloat fogFactor = 0.0;\nif ( fogType == 1 ) {\nfogFactor = smoothstep( fogNear, fogFar, depth );\n} else {\nconst float LOG2 = 1.442695;\nfogFactor = exp2( - fogDensity * fogDensity * depth * depth * LOG2 );\nfogFactor = 1.0 - clamp( fogFactor, 0.0, 1.0 );\n}\ngl_FragColor = mix( gl_FragColor, vec4( fogColor, gl_FragColor.w ), fogFactor );\n}\n}"].join("\n")); -v.compileShader(M);v.compileShader(O);v.attachShader(Q,M);v.attachShader(Q,O);v.linkProgram(Q);F=Q;w=v.getAttribLocation(F,"position");y=v.getAttribLocation(F,"uv");c=v.getUniformLocation(F,"uvOffset");d=v.getUniformLocation(F,"uvScale");e=v.getUniformLocation(F,"rotation");f=v.getUniformLocation(F,"scale");g=v.getUniformLocation(F,"color");h=v.getUniformLocation(F,"map");m=v.getUniformLocation(F,"opacity");k=v.getUniformLocation(F,"modelViewMatrix");t=v.getUniformLocation(F,"projectionMatrix");p= -v.getUniformLocation(F,"fogType");n=v.getUniformLocation(F,"fogDensity");u=v.getUniformLocation(F,"fogNear");l=v.getUniformLocation(F,"fogFar");r=v.getUniformLocation(F,"fogColor");A=v.getUniformLocation(F,"alphaTest");Q=document.createElementNS("http://www.w3.org/1999/xhtml","canvas");Q.width=8;Q.height=8;M=Q.getContext("2d");M.fillStyle="white";M.fillRect(0,0,8,8);da=new ea(Q);da.needsUpdate=!0}v.useProgram(F);E.initAttributes();E.enableAttribute(w);E.enableAttribute(y);E.disableUnusedAttributes(); -E.disable(v.CULL_FACE);E.enable(v.BLEND);v.bindBuffer(v.ARRAY_BUFFER,L);v.vertexAttribPointer(w,2,v.FLOAT,!1,16,0);v.vertexAttribPointer(y,2,v.FLOAT,!1,16,8);v.bindBuffer(v.ELEMENT_ARRAY_BUFFER,C);v.uniformMatrix4fv(t,!1,D.projectionMatrix.elements);E.activeTexture(v.TEXTURE0);v.uniform1i(h,0);M=Q=0;(O=q.fog)?(v.uniform3f(r,O.color.r,O.color.g,O.color.b),O.isFog?(v.uniform1f(u,O.near),v.uniform1f(l,O.far),v.uniform1i(p,1),M=Q=1):O.isFogExp2&&(v.uniform1f(n,O.density),v.uniform1i(p,2),M=Q=2)):(v.uniform1i(p, -0),M=Q=0);for(var O=0,P=b.length;O -c&&(c=a[b]);return c}function T(){Object.defineProperty(this,"id",{value:Vd++});this.uuid=N.generateUUID();this.name="";this.type="Geometry";this.vertices=[];this.colors=[];this.faces=[];this.faceVertexUvs=[[]];this.morphTargets=[];this.morphNormals=[];this.skinWeights=[];this.skinIndices=[];this.lineDistances=[];this.boundingSphere=this.boundingBox=null;this.groupsNeedUpdate=this.lineDistancesNeedUpdate=this.colorsNeedUpdate=this.normalsNeedUpdate=this.uvsNeedUpdate=this.verticesNeedUpdate=this.elementsNeedUpdate= -!1}function I(){Object.defineProperty(this,"id",{value:Vd++});this.uuid=N.generateUUID();this.name="";this.type="BufferGeometry";this.index=null;this.attributes={};this.morphAttributes={};this.groups=[];this.boundingSphere=this.boundingBox=null;this.drawRange={start:0,count:Infinity}}function Aa(a,b){x.call(this);this.type="Mesh";this.geometry=void 0!==a?a:new I;this.material=void 0!==b?b:new Ka({color:16777215*Math.random()});this.drawMode=0;this.updateMorphTargets()}function Ib(a,b,c,d,e,f){T.call(this); -this.type="BoxGeometry";this.parameters={width:a,height:b,depth:c,widthSegments:d,heightSegments:e,depthSegments:f};this.fromBufferGeometry(new kb(a,b,c,d,e,f));this.mergeVertices()}function kb(a,b,c,d,e,f){function g(a,b,c,d,e,f,g,l,L,C,F){var da=f/L,H=g/C,aa=f/2,x=g/2,D=l/2;g=L+1;var z=C+1,Q=f=0,M,O,P=new q;for(O=0;O/g,function(a,c){var d=Z[c];if(void 0===d)throw Error("Can not resolve #include <"+c+">");return Xd(d)})}function Qe(a){return a.replace(/for \( int i \= (\d+)\; i < (\d+)\; i \+\+ \) \{([\s\S]+?)(?=\})\}/g,function(a,c,d,e){a="";for(c=parseInt(c);cb||a.height>b){var c=b/Math.max(a.width,a.height),d=document.createElementNS("http://www.w3.org/1999/xhtml","canvas");d.width=Math.floor(a.width*c);d.height=Math.floor(a.height*c);d.getContext("2d").drawImage(a,0,0,a.width,a.height,0,0,d.width,d.height);console.warn("THREE.WebGLRenderer: image is too big ("+a.width+"x"+a.height+"). Resized to "+ -d.width+"x"+d.height,a);return d}return a}function m(a){return N.isPowerOfTwo(a.width)&&N.isPowerOfTwo(a.height)}function k(b){return 1003===b||1004===b||1005===b?a.NEAREST:a.LINEAR}function t(b){b=b.target;b.removeEventListener("dispose",t);a:{var c=d.get(b);if(b.image&&c.__image__webglTextureCube)a.deleteTexture(c.__image__webglTextureCube);else{if(void 0===c.__webglInit)break a;a.deleteTexture(c.__webglTexture)}d["delete"](b)}q.textures--}function p(b){b=b.target;b.removeEventListener("dispose", -p);var c=d.get(b),e=d.get(b.texture);if(b){void 0!==e.__webglTexture&&a.deleteTexture(e.__webglTexture);b.depthTexture&&b.depthTexture.dispose();if(b.isWebGLRenderTargetCube)for(e=0;6>e;e++)a.deleteFramebuffer(c.__webglFramebuffer[e]),c.__webglDepthbuffer&&a.deleteRenderbuffer(c.__webglDepthbuffer[e]);else a.deleteFramebuffer(c.__webglFramebuffer),c.__webglDepthbuffer&&a.deleteRenderbuffer(c.__webglDepthbuffer);d["delete"](b.texture);d["delete"](b)}q.textures--}function n(b,g){var k=d.get(b);if(0< -b.version&&k.__version!==b.version){var n=b.image;if(void 0===n)console.warn("THREE.WebGLRenderer: Texture marked for update but image is undefined",b);else if(!1===n.complete)console.warn("THREE.WebGLRenderer: Texture marked for update but image is incomplete",b);else{void 0===k.__webglInit&&(k.__webglInit=!0,b.addEventListener("dispose",t),k.__webglTexture=a.createTexture(),q.textures++);c.activeTexture(a.TEXTURE0+g);c.bindTexture(a.TEXTURE_2D,k.__webglTexture);a.pixelStorei(a.UNPACK_FLIP_Y_WEBGL, -b.flipY);a.pixelStorei(a.UNPACK_PREMULTIPLY_ALPHA_WEBGL,b.premultiplyAlpha);a.pixelStorei(a.UNPACK_ALIGNMENT,b.unpackAlignment);var p=h(b.image,e.maxTextureSize);if((1001!==b.wrapS||1001!==b.wrapT||1003!==b.minFilter&&1006!==b.minFilter)&&!1===m(p))if(n=p,n instanceof HTMLImageElement||n instanceof HTMLCanvasElement){var l=document.createElementNS("http://www.w3.org/1999/xhtml","canvas");l.width=N.nearestPowerOfTwo(n.width);l.height=N.nearestPowerOfTwo(n.height);l.getContext("2d").drawImage(n,0,0, -l.width,l.height);console.warn("THREE.WebGLRenderer: image is not power of two ("+n.width+"x"+n.height+"). Resized to "+l.width+"x"+l.height,n);p=l}else p=n;var n=m(p),l=f(b.format),G=f(b.type);u(a.TEXTURE_2D,b,n);var r=b.mipmaps;if(b.isDepthTexture){r=a.DEPTH_COMPONENT;if(1015===b.type){if(!w)throw Error("Float Depth Texture only supported in WebGL2.0");r=a.DEPTH_COMPONENT32F}else w&&(r=a.DEPTH_COMPONENT16);1026===b.format&&r===a.DEPTH_COMPONENT&&1012!==b.type&&1014!==b.type&&(console.warn("THREE.WebGLRenderer: Use UnsignedShortType or UnsignedIntType for DepthFormat DepthTexture."), -b.type=1012,G=f(b.type));1027===b.format&&(r=a.DEPTH_STENCIL,1020!==b.type&&(console.warn("THREE.WebGLRenderer: Use UnsignedInt248Type for DepthStencilFormat DepthTexture."),b.type=1020,G=f(b.type)));c.texImage2D(a.TEXTURE_2D,0,r,p.width,p.height,0,l,G,null)}else if(b.isDataTexture)if(0r;r++)l[r]=n||p?p?b.image[r].image:b.image[r]:h(b.image[r],e.maxCubemapSize);var G=m(l[0]),w=f(b.format),aa=f(b.type);u(a.TEXTURE_CUBE_MAP,b,G);for(r=0;6>r;r++)if(n)for(var x,D=l[r].mipmaps,z=0,Q=D.length;zk;k++)e.__webglFramebuffer[k]=a.createFramebuffer()}else e.__webglFramebuffer= -a.createFramebuffer();if(g){c.bindTexture(a.TEXTURE_CUBE_MAP,f.__webglTexture);u(a.TEXTURE_CUBE_MAP,b.texture,h);for(k=0;6>k;k++)l(e.__webglFramebuffer[k],b,a.COLOR_ATTACHMENT0,a.TEXTURE_CUBE_MAP_POSITIVE_X+k);b.texture.generateMipmaps&&h&&a.generateMipmap(a.TEXTURE_CUBE_MAP);c.bindTexture(a.TEXTURE_CUBE_MAP,null)}else c.bindTexture(a.TEXTURE_2D,f.__webglTexture),u(a.TEXTURE_2D,b.texture,h),l(e.__webglFramebuffer,b,a.COLOR_ATTACHMENT0,a.TEXTURE_2D),b.texture.generateMipmaps&&h&&a.generateMipmap(a.TEXTURE_2D), -c.bindTexture(a.TEXTURE_2D,null);if(b.depthBuffer){e=d.get(b);f=!0===b.isWebGLRenderTargetCube;if(b.depthTexture){if(f)throw Error("target.depthTexture not supported in Cube render targets");if(b&&b.isWebGLRenderTargetCube)throw Error("Depth Texture with cube render targets is not supported!");a.bindFramebuffer(a.FRAMEBUFFER,e.__webglFramebuffer);if(!b.depthTexture||!b.depthTexture.isDepthTexture)throw Error("renderTarget.depthTexture must be an instance of THREE.DepthTexture");d.get(b.depthTexture).__webglTexture&& -b.depthTexture.image.width===b.width&&b.depthTexture.image.height===b.height||(b.depthTexture.image.width=b.width,b.depthTexture.image.height=b.height,b.depthTexture.needsUpdate=!0);n(b.depthTexture,0);e=d.get(b.depthTexture).__webglTexture;if(1026===b.depthTexture.format)a.framebufferTexture2D(a.FRAMEBUFFER,a.DEPTH_ATTACHMENT,a.TEXTURE_2D,e,0);else if(1027===b.depthTexture.format)a.framebufferTexture2D(a.FRAMEBUFFER,a.DEPTH_STENCIL_ATTACHMENT,a.TEXTURE_2D,e,0);else throw Error("Unknown depthTexture format"); -}else if(f)for(e.__webglDepthbuffer=[],f=0;6>f;f++)a.bindFramebuffer(a.FRAMEBUFFER,e.__webglFramebuffer[f]),e.__webglDepthbuffer[f]=a.createRenderbuffer(),r(e.__webglDepthbuffer[f],b);else a.bindFramebuffer(a.FRAMEBUFFER,e.__webglFramebuffer),e.__webglDepthbuffer=a.createRenderbuffer(),r(e.__webglDepthbuffer,b);a.bindFramebuffer(a.FRAMEBUFFER,null)}};this.updateRenderTargetMipmap=function(b){var e=b.texture;e.generateMipmaps&&m(b)&&1003!==e.minFilter&&1006!==e.minFilter&&(b=b&&b.isWebGLRenderTargetCube? -a.TEXTURE_CUBE_MAP:a.TEXTURE_2D,e=d.get(e).__webglTexture,c.bindTexture(b,e),a.generateMipmap(b),c.bindTexture(b,null))}}function Qf(){var a={};return{get:function(b){b=b.uuid;var c=a[b];void 0===c&&(c={},a[b]=c);return c},"delete":function(b){delete a[b.uuid]},clear:function(){a={}}}}function Rf(a,b,c){function d(b,c,d){var e=new Uint8Array(4),f=a.createTexture();a.bindTexture(b,f);a.texParameteri(b,a.TEXTURE_MIN_FILTER,a.NEAREST);a.texParameteri(b,a.TEXTURE_MAG_FILTER,a.NEAREST);for(b=0;b=la.maxTextures&&console.warn("WebGLRenderer: trying to use "+a+" texture units while this GPU supports only "+ -la.maxTextures);ea+=1;return a};this.setTexture2D=function(){var a=!1;return function(b,c){b&&b.isWebGLRenderTarget&&(a||(console.warn("THREE.WebGLRenderer.setTexture2D: don't use render targets as textures. Use their .texture property instead."),a=!0),b=b.texture);ta.setTexture2D(b,c)}}();this.setTexture=function(){var a=!1;return function(b,c){a||(console.warn("THREE.WebGLRenderer: .setTexture is deprecated, use setTexture2D instead."),a=!0);ta.setTexture2D(b,c)}}();this.setTextureCube=function(){var a= -!1;return function(b,c){b&&b.isWebGLRenderTargetCube&&(a||(console.warn("THREE.WebGLRenderer.setTextureCube: don't use cube render targets as textures. Use their .texture property instead."),a=!0),b=b.texture);b&&b.isCubeTexture||Array.isArray(b.image)&&6===b.image.length?ta.setTextureCube(b,c):ta.setTextureCubeDynamic(b,c)}}();this.getCurrentRenderTarget=function(){return W};this.setRenderTarget=function(a){(W=a)&&void 0===ha.get(a).__webglFramebuffer&&ta.setupRenderTarget(a);var b=a&&a.isWebGLRenderTargetCube, -c;a?(c=ha.get(a),c=b?c.__webglFramebuffer[a.activeCubeFace]:c.__webglFramebuffer,X.copy(a.scissor),Sa=a.scissorTest,Z.copy(a.viewport)):(c=null,X.copy(ga).multiplyScalar(Ra),Sa=ka,Z.copy(ia).multiplyScalar(Ra));N!==c&&(B.bindFramebuffer(B.FRAMEBUFFER,c),N=c);Y.scissor(X);Y.setScissorTest(Sa);Y.viewport(Z);b&&(b=ha.get(a.texture),B.framebufferTexture2D(B.FRAMEBUFFER,B.COLOR_ATTACHMENT0,B.TEXTURE_CUBE_MAP_POSITIVE_X+a.activeCubeFace,b.__webglTexture,a.activeMipMapLevel))};this.readRenderTargetPixels= -function(a,b,c,d,e,f){if(!1===(a&&a.isWebGLRenderTarget))console.error("THREE.WebGLRenderer.readRenderTargetPixels: renderTarget is not THREE.WebGLRenderTarget.");else{var g=ha.get(a).__webglFramebuffer;if(g){var h=!1;g!==N&&(B.bindFramebuffer(B.FRAMEBUFFER,g),h=!0);try{var k=a.texture,m=k.format,n=k.type;1023!==m&&w(m)!==B.getParameter(B.IMPLEMENTATION_COLOR_READ_FORMAT)?console.error("THREE.WebGLRenderer.readRenderTargetPixels: renderTarget is not in RGBA or implementation defined format."):1009=== -n||w(n)===B.getParameter(B.IMPLEMENTATION_COLOR_READ_TYPE)||1015===n&&(ja.get("OES_texture_float")||ja.get("WEBGL_color_buffer_float"))||1016===n&&ja.get("EXT_color_buffer_half_float")?B.checkFramebufferStatus(B.FRAMEBUFFER)===B.FRAMEBUFFER_COMPLETE?0<=b&&b<=a.width-d&&0<=c&&c<=a.height-e&&B.readPixels(b,c,d,e,w(m),w(n),f):console.error("THREE.WebGLRenderer.readRenderTargetPixels: readPixels from renderTarget failed. Framebuffer not complete."):console.error("THREE.WebGLRenderer.readRenderTargetPixels: renderTarget is not in UnsignedByteType or implementation defined type.")}finally{h&& -B.bindFramebuffer(B.FRAMEBUFFER,N)}}}}}function Kb(a,b){this.name="";this.color=new J(a);this.density=void 0!==b?b:2.5E-4}function Lb(a,b,c){this.name="";this.color=new J(a);this.near=void 0!==b?b:1;this.far=void 0!==c?c:1E3}function mb(){x.call(this);this.type="Scene";this.overrideMaterial=this.fog=this.background=null;this.autoUpdate=!0}function Zd(a,b,c,d,e){x.call(this);this.lensFlares=[];this.positionScreen=new q;this.customUpdateCallback=void 0;void 0!==a&&this.add(a,b,c,d,e)}function nb(a){X.call(this); -this.type="SpriteMaterial";this.color=new J(16777215);this.map=null;this.rotation=0;this.lights=this.fog=!1;this.setValues(a)}function Dc(a){x.call(this);this.type="Sprite";this.material=void 0!==a?a:new nb}function Ec(){x.call(this);this.type="LOD";Object.defineProperties(this,{levels:{enumerable:!0,value:[]}})}function od(a,b,c){this.useVertexTexture=void 0!==c?c:!0;this.identityMatrix=new S;a=a||[];this.bones=a.slice(0);this.useVertexTexture?(a=Math.sqrt(4*this.bones.length),a=N.nextPowerOfTwo(Math.ceil(a)), -this.boneTextureHeight=this.boneTextureWidth=a=Math.max(a,4),this.boneMatrices=new Float32Array(this.boneTextureWidth*this.boneTextureHeight*4),this.boneTexture=new eb(this.boneMatrices,this.boneTextureWidth,this.boneTextureHeight,1023,1015)):this.boneMatrices=new Float32Array(16*this.bones.length);if(void 0===b)this.calculateInverses();else if(this.bones.length===b.length)this.boneInverses=b.slice(0);else for(console.warn("THREE.Skeleton bonInverses is the wrong length."),this.boneInverses=[],b= -0,a=this.bones.length;b=a.HAVE_CURRENT_DATA&&(t.needsUpdate=!0)}ea.call(this,a,b,c,d,e,f,g,h,m);this.generateMipmaps=!1;var t=this;k()}function Nb(a,b,c,d,e,f,g,h,m,k,t,p){ea.call(this,null,f,g,h,m,k,d,e,t,p);this.image={width:b,height:c};this.mipmaps=a;this.generateMipmaps=this.flipY=!1}function sd(a,b,c,d,e,f,g,h,m){ea.call(this,a,b,c,d,e,f,g,h,m);this.needsUpdate=!0}function Gc(a,b,c,d,e,f,g, -h,m,k){k=void 0!==k?k:1026;if(1026!==k&&1027!==k)throw Error("DepthTexture format must be either THREE.DepthFormat or THREE.DepthStencilFormat");void 0===c&&1026===k&&(c=1012);void 0===c&&1027===k&&(c=1020);ea.call(this,null,d,e,f,g,h,k,c,m);this.image={width:a,height:b};this.magFilter=void 0!==g?g:1003;this.minFilter=void 0!==h?h:1003;this.generateMipmaps=this.flipY=!1}function Ob(a){function b(a,b){return a-b}I.call(this);this.type="WireframeGeometry";var c=[],d,e,f,g,h=[0,0],m={},k,t=["a","b", -"c"];if(a&&a.isGeometry){var p=a.faces;d=0;for(f=p.length;de;e++)h[0]=n[t[e]],h[1]=n[t[(e+1)%3]],h.sort(b),k=h.toString(),void 0===m[k]&&(m[k]={index1:h[0],index2:h[1]})}for(k in m)d=m[k],t=a.vertices[d.index1],c.push(t.x,t.y,t.z),t=a.vertices[d.index2],c.push(t.x,t.y,t.z)}else if(a&&a.isBufferGeometry){var l,t=new q;if(null!==a.index){p=a.attributes.position;n=a.index;l=a.groups;0===l.length&&a.addGroup(0,n.count);a=0;for(g=l.length;ae;e++)h[0]=n.getX(d+e),h[1]=n.getX(d+(e+1)%3),h.sort(b),k=h.toString(),void 0===m[k]&&(m[k]={index1:h[0],index2:h[1]});for(k in m)d=m[k],t.fromBufferAttribute(p,d.index1),c.push(t.x,t.y,t.z),t.fromBufferAttribute(p,d.index2),c.push(t.x,t.y,t.z)}else for(p=a.attributes.position,d=0,f=p.count/3;de;e++)m=3*d+e,t.fromBufferAttribute(p,m),c.push(t.x,t.y,t.z),m=3*d+(e+1)%3,t.fromBufferAttribute(p,m),c.push(t.x,t.y,t.z)}this.addAttribute("position",new z(c,3))} -function Hc(a,b,c){T.call(this);this.type="ParametricGeometry";this.parameters={func:a,slices:b,stacks:c};this.fromBufferGeometry(new Pb(a,b,c));this.mergeVertices()}function Pb(a,b,c){I.call(this);this.type="ParametricBufferGeometry";this.parameters={func:a,slices:b,stacks:c};var d=[],e=[],f=[],g,h,m=b+1;for(g=0;g<=c;g++){var k=g/c;for(h=0;h<=b;h++){var t=h/b,p=a(t,k);e.push(p.x,p.y,p.z);f.push(t,k)}}for(g=0;gd&&1===a.x&&(m[b]=a.x-1);0===c.x&&0===c.z&&(m[b]=d/2/Math.PI+ -.5)}I.call(this);this.type="PolyhedronBufferGeometry";this.parameters={vertices:a,indices:b,radius:c,detail:d};c=c||1;var h=[],m=[];(function(a){for(var c=new q,d=new q,g=new q,h=0;he&&(.2>b&&(m[a+0]+=1),.2>c&&(m[a+2]+=1),.2>d&&(m[a+4]+=1))})();this.addAttribute("position",new z(h,3));this.addAttribute("normal",new z(h.slice(),3));this.addAttribute("uv", -new z(m,2));this.normalizeNormals()}function Jc(a,b){T.call(this);this.type="TetrahedronGeometry";this.parameters={radius:a,detail:b};this.fromBufferGeometry(new Qb(a,b));this.mergeVertices()}function Qb(a,b){Ba.call(this,[1,1,1,-1,-1,1,-1,1,-1,1,-1,-1],[2,1,0,0,3,2,1,3,0,2,3,1],a,b);this.type="TetrahedronBufferGeometry";this.parameters={radius:a,detail:b}}function Kc(a,b){T.call(this);this.type="OctahedronGeometry";this.parameters={radius:a,detail:b};this.fromBufferGeometry(new ob(a,b));this.mergeVertices()} -function ob(a,b){Ba.call(this,[1,0,0,-1,0,0,0,1,0,0,-1,0,0,0,1,0,0,-1],[0,2,4,0,4,3,0,3,5,0,5,2,1,2,5,1,5,3,1,3,4,1,4,2],a,b);this.type="OctahedronBufferGeometry";this.parameters={radius:a,detail:b}}function Lc(a,b){T.call(this);this.type="IcosahedronGeometry";this.parameters={radius:a,detail:b};this.fromBufferGeometry(new Rb(a,b));this.mergeVertices()}function Rb(a,b){var c=(1+Math.sqrt(5))/2;Ba.call(this,[-1,c,0,1,c,0,-1,-c,0,1,-c,0,0,-1,c,0,1,c,0,-1,-c,0,1,-c,c,0,-1,c,0,1,-c,0,-1,-c,0,1],[0,11, -5,0,5,1,0,1,7,0,7,10,0,10,11,1,5,9,5,11,4,11,10,2,10,7,6,7,1,8,3,9,4,3,4,2,3,2,6,3,6,8,3,8,9,4,9,5,2,4,11,6,2,10,8,6,7,9,8,1],a,b);this.type="IcosahedronBufferGeometry";this.parameters={radius:a,detail:b}}function Mc(a,b){T.call(this);this.type="DodecahedronGeometry";this.parameters={radius:a,detail:b};this.fromBufferGeometry(new Sb(a,b));this.mergeVertices()}function Sb(a,b){var c=(1+Math.sqrt(5))/2,d=1/c;Ba.call(this,[-1,-1,-1,-1,-1,1,-1,1,-1,-1,1,1,1,-1,-1,1,-1,1,1,1,-1,1,1,1,0,-d,-c,0,-d,c,0, -d,-c,0,d,c,-d,-c,0,-d,c,0,d,-c,0,d,c,0,-c,0,-d,c,0,-d,-c,0,d,c,0,d],[3,11,7,3,7,15,3,15,13,7,19,17,7,17,6,7,6,15,17,4,8,17,8,10,17,10,6,8,0,16,8,16,2,8,2,10,0,12,1,0,1,18,0,18,16,6,10,2,6,2,13,6,13,15,2,16,18,2,18,3,2,3,13,18,1,9,18,9,11,18,11,3,4,14,12,4,12,0,4,0,8,11,9,5,11,5,19,11,19,7,19,5,14,19,14,4,19,4,17,1,12,14,1,14,5,1,5,9],a,b);this.type="DodecahedronBufferGeometry";this.parameters={radius:a,detail:b}}function Nc(a,b,c,d,e,f){T.call(this);this.type="TubeGeometry";this.parameters={path:a, -tubularSegments:b,radius:c,radialSegments:d,closed:e};void 0!==f&&console.warn("THREE.TubeGeometry: taper has been removed.");a=new Tb(a,b,c,d,e);this.tangents=a.tangents;this.normals=a.normals;this.binormals=a.binormals;this.fromBufferGeometry(a);this.mergeVertices()}function Tb(a,b,c,d,e){function f(e){var f=a.getPointAt(e/b),k=g.normals[e];e=g.binormals[e];for(p=0;p<=d;p++){var t=p/d*Math.PI*2,r=Math.sin(t),t=-Math.cos(t);m.x=t*k.x+r*e.x;m.y=t*k.y+r*e.y;m.z=t*k.z+r*e.z;m.normalize();l.push(m.x, -m.y,m.z);h.x=f.x+c*m.x;h.y=f.y+c*m.y;h.z=f.z+c*m.z;n.push(h.x,h.y,h.z)}}I.call(this);this.type="TubeBufferGeometry";this.parameters={path:a,tubularSegments:b,radius:c,radialSegments:d,closed:e};b=b||64;c=c||1;d=d||8;e=e||!1;var g=a.computeFrenetFrames(b,e);this.tangents=g.tangents;this.normals=g.normals;this.binormals=g.binormals;var h=new q,m=new q,k=new D,t,p,n=[],l=[],G=[],r=[];for(t=0;tq;q++)f[0]=l[m[q]],f[1]=l[m[(q+1)%3]],f.sort(c),h=f.toString(),void 0===g[h]?g[h]={index1:f[0],index2:f[1],face1:p,face2:void 0}:g[h].face2=p;for(h in g)if(f=g[h],void 0===f.face2||k[f.face1].normal.dot(k[f.face2].normal)<= -e)m=t[f.index1],d.push(m.x,m.y,m.z),m=t[f.index2],d.push(m.x,m.y,m.z);this.addAttribute("position",new z(d,3))}function qb(a,b,c,d,e,f,g,h){T.call(this);this.type="CylinderGeometry";this.parameters={radiusTop:a,radiusBottom:b,height:c,radialSegments:d,heightSegments:e,openEnded:f,thetaStart:g,thetaLength:h};this.fromBufferGeometry(new Va(a,b,c,d,e,f,g,h));this.mergeVertices()}function Va(a,b,c,d,e,f,g,h){function m(c){var e,f,m,r=new D,C=new q,F=0,x=!0===c?a:b,H=!0===c?1:-1;f=G;for(e=1;e<=d;e++)p.push(0, -A*H,0),n.push(0,H,0),l.push(.5,.5),G++;m=G;for(e=0;e<=d;e++){var aa=e/d*h+g,z=Math.cos(aa),aa=Math.sin(aa);C.x=x*aa;C.y=A*H;C.z=x*z;p.push(C.x,C.y,C.z);n.push(0,H,0);r.x=.5*z+.5;r.y=.5*aa*H+.5;l.push(r.x,r.y);G++}for(e=0;ethis.duration&&this.resetDuration();this.optimize()}function Hd(a){this.manager= -void 0!==a?a:ta;this.textures={}}function ce(a){this.manager=void 0!==a?a:ta}function zb(){this.onLoadStart=function(){};this.onLoadProgress=function(){};this.onLoadComplete=function(){}}function de(a){"boolean"===typeof a&&(console.warn("THREE.JSONLoader: showStatus parameter has been removed from constructor."),a=void 0);this.manager=void 0!==a?a:ta;this.withCredentials=!1}function Se(a){this.manager=void 0!==a?a:ta;this.texturePath=""}function Te(a,b,c,d,e){b=.5*(d-b);e=.5*(e-c);var f=a*a;return(2* -c-2*d+b+e)*a*f+(-3*c+3*d-2*b-e)*f+b*a+c}function Ab(a,b,c,d){var e=1-a;return e*e*b+2*(1-a)*a*c+a*a*d}function Bb(a,b,c,d,e){var f=1-a,g=1-a;return f*f*f*b+3*g*g*a*c+3*(1-a)*a*a*d+a*a*a*e}function ua(){}function Ta(a,b){this.v1=a;this.v2=b}function ad(){this.curves=[];this.autoClose=!1}function Wa(a,b,c,d,e,f,g,h){this.aX=a;this.aY=b;this.xRadius=c;this.yRadius=d;this.aStartAngle=e;this.aEndAngle=f;this.aClockwise=g;this.aRotation=h||0}function Cb(a){this.points=void 0===a?[]:a}function fc(a,b,c, -d){this.v0=a;this.v1=b;this.v2=c;this.v3=d}function gc(a,b,c){this.v0=a;this.v1=b;this.v2=c}function bd(a){ad.call(this);this.currentPoint=new D;a&&this.fromPoints(a)}function Db(){bd.apply(this,arguments);this.holes=[]}function ee(){this.subPaths=[];this.currentPath=null}function fe(a){this.data=a}function Ue(a){this.manager=void 0!==a?a:ta}function ge(a){this.manager=void 0!==a?a:ta}function he(a,b,c,d){ma.call(this,a,b);this.type="RectAreaLight";this.position.set(0,1,0);this.updateMatrix();this.width= -void 0!==c?c:10;this.height=void 0!==d?d:10}function Ve(){this.type="StereoCamera";this.aspect=1;this.eyeSep=.064;this.cameraL=new Fa;this.cameraL.layers.enable(1);this.cameraL.matrixAutoUpdate=!1;this.cameraR=new Fa;this.cameraR.layers.enable(2);this.cameraR.matrixAutoUpdate=!1}function Id(a,b,c){x.call(this);this.type="CubeCamera";var d=new Fa(90,1,a,b);d.up.set(0,-1,0);d.lookAt(new q(1,0,0));this.add(d);var e=new Fa(90,1,a,b);e.up.set(0,-1,0);e.lookAt(new q(-1,0,0));this.add(e);var f=new Fa(90, -1,a,b);f.up.set(0,0,1);f.lookAt(new q(0,1,0));this.add(f);var g=new Fa(90,1,a,b);g.up.set(0,0,-1);g.lookAt(new q(0,-1,0));this.add(g);var h=new Fa(90,1,a,b);h.up.set(0,-1,0);h.lookAt(new q(0,0,1));this.add(h);var m=new Fa(90,1,a,b);m.up.set(0,-1,0);m.lookAt(new q(0,0,-1));this.add(m);this.renderTarget=new Gb(c,c,{format:1022,magFilter:1006,minFilter:1006});this.updateCubeMap=function(a,b){null===this.parent&&this.updateMatrixWorld();var c=this.renderTarget,n=c.texture.generateMipmaps;c.texture.generateMipmaps= -!1;c.activeCubeFace=0;a.render(b,d,c);c.activeCubeFace=1;a.render(b,e,c);c.activeCubeFace=2;a.render(b,f,c);c.activeCubeFace=3;a.render(b,g,c);c.activeCubeFace=4;a.render(b,h,c);c.texture.generateMipmaps=n;c.activeCubeFace=5;a.render(b,m,c);a.setRenderTarget(null)}}function ie(){x.call(this);this.type="AudioListener";this.context=je.getContext();this.gain=this.context.createGain();this.gain.connect(this.context.destination);this.filter=null}function hc(a){x.call(this);this.type="Audio";this.context= -a.context;this.gain=this.context.createGain();this.gain.connect(a.getInput());this.autoplay=!1;this.buffer=null;this.loop=!1;this.startTime=0;this.playbackRate=1;this.isPlaying=!1;this.hasPlaybackControl=!0;this.sourceType="empty";this.filters=[]}function ke(a){hc.call(this,a);this.panner=this.context.createPanner();this.panner.connect(this.gain)}function le(a,b){this.analyser=a.context.createAnalyser();this.analyser.fftSize=void 0!==b?b:2048;this.data=new Uint8Array(this.analyser.frequencyBinCount); -a.getOutput().connect(this.analyser)}function Jd(a,b,c){this.binding=a;this.valueSize=c;a=Float64Array;switch(b){case "quaternion":b=this._slerp;break;case "string":case "bool":a=Array;b=this._select;break;default:b=this._lerp}this.buffer=new a(4*c);this._mixBufferRegion=b;this.referenceCount=this.useCount=this.cumulativeWeight=0}function ka(a,b,c){this.path=b;this.parsedPath=c||ka.parseTrackName(b);this.node=ka.findNode(a,this.parsedPath.nodeName)||a;this.rootNode=a}function me(a){this.uuid=N.generateUUID(); -this._objects=Array.prototype.slice.call(arguments);this.nCachedObjects_=0;var b={};this._indicesByUUID=b;for(var c=0,d=arguments.length;c!==d;++c)b[arguments[c].uuid]=c;this._paths=[];this._parsedPaths=[];this._bindings=[];this._bindingsIndicesByPath={};var e=this;this.stats={objects:{get total(){return e._objects.length},get inUse(){return this.total-e.nCachedObjects_}},get bindingsPerObject(){return e._bindings.length}}}function ne(a,b,c){this._mixer=a;this._clip=b;this._localRoot=c||null;a=b.tracks; -b=a.length;c=Array(b);for(var d={endingStart:2400,endingEnd:2400},e=0;e!==b;++e){var f=a[e].createInterpolant(null);c[e]=f;f.settings=d}this._interpolantSettings=d;this._interpolants=c;this._propertyBindings=Array(b);this._weightInterpolant=this._timeScaleInterpolant=this._byClipCacheIndex=this._cacheIndex=null;this.loop=2201;this._loopCount=-1;this._startTime=null;this.time=0;this._effectiveWeight=this.weight=this._effectiveTimeScale=this.timeScale=1;this.repetitions=Infinity;this.paused=!1;this.enabled= -!0;this.clampWhenFinished=!1;this.zeroSlopeAtEnd=this.zeroSlopeAtStart=!0}function cd(a){this._root=a;this._initMemoryManager();this.time=this._accuIndex=0;this.timeScale=1}function Kd(a,b){"string"===typeof a&&(console.warn("THREE.Uniform: Type parameter is no longer needed."),a=b);this.value=a}function Eb(){I.call(this);this.type="InstancedBufferGeometry";this.maxInstancedCount=void 0}function oe(a,b,c,d){this.uuid=N.generateUUID();this.data=a;this.itemSize=b;this.offset=c;this.normalized=!0=== -d}function ic(a,b){this.uuid=N.generateUUID();this.array=a;this.stride=b;this.count=void 0!==a?a.length/b:0;this.dynamic=!1;this.updateRange={offset:0,count:-1};this.onUploadCallback=function(){};this.version=0}function jc(a,b,c){ic.call(this,a,b);this.meshPerAttribute=c||1}function kc(a,b,c){U.call(this,a,b);this.meshPerAttribute=c||1}function pe(a,b,c,d){this.ray=new cb(a,b);this.near=c||0;this.far=d||Infinity;this.params={Mesh:{},Line:{},LOD:{},Points:{threshold:1},Sprite:{}};Object.defineProperties(this.params, -{PointCloud:{get:function(){console.warn("THREE.Raycaster: params.PointCloud has been renamed to params.Points.");return this.Points}}})}function We(a,b){return a.distance-b.distance}function qe(a,b,c,d){if(!1!==a.visible&&(a.raycast(b,c),!0===d)){a=a.children;d=0;for(var e=a.length;dc;c++,d++){var e=c/32*Math.PI*2,f=d/32* -Math.PI*2;b.push(Math.cos(e),Math.sin(e),1,Math.cos(f),Math.sin(f),1)}a.addAttribute("position",new z(b,3));b=new ia({fog:!1});this.cone=new ga(a,b);this.add(this.cone);this.update()}function mc(a){this.bones=this.getBoneList(a);for(var b=new I,c=[],d=[],e=new J(0,0,1),f=new J(0,1,0),g=0;ga?-1:0e;e++)8===e||13===e||18===e||23===e?b[e]="-":14===e?b[e]="4":(2>=c&&(c=33554432+16777216*Math.random()|0),d=c&15,c>>=4,b[e]=a[19===e?d&3|8:d]);return b.join("")}}(),clamp:function(a,b,c){return Math.max(b,Math.min(c,a))},euclideanModulo:function(a,b){return(a%b+b)%b},mapLinear:function(a,b,c,d,e){return d+(a-b)*(e-d)/(c-b)},lerp:function(a,b,c){return(1-c)*a+c*b},smoothstep:function(a, -b,c){if(a<=b)return 0;if(a>=c)return 1;a=(a-b)/(c-b);return a*a*(3-2*a)},smootherstep:function(a,b,c){if(a<=b)return 0;if(a>=c)return 1;a=(a-b)/(c-b);return a*a*a*(a*(6*a-15)+10)},randInt:function(a,b){return a+Math.floor(Math.random()*(b-a+1))},randFloat:function(a,b){return a+Math.random()*(b-a)},randFloatSpread:function(a){return a*(.5-Math.random())},degToRad:function(a){return a*N.DEG2RAD},radToDeg:function(a){return a*N.RAD2DEG},isPowerOfTwo:function(a){return 0===(a&a-1)&&0!==a},nearestPowerOfTwo:function(a){return Math.pow(2, -Math.round(Math.log(a)/Math.LN2))},nextPowerOfTwo:function(a){a--;a|=a>>1;a|=a>>2;a|=a>>4;a|=a>>8;a|=a>>16;a++;return a}};D.prototype={constructor:D,isVector2:!0,get width(){return this.x},set width(a){this.x=a},get height(){return this.y},set height(a){this.y=a},set:function(a,b){this.x=a;this.y=b;return this},setScalar:function(a){this.y=this.x=a;return this},setX:function(a){this.x=a;return this},setY:function(a){this.y=a;return this},setComponent:function(a,b){switch(a){case 0:this.x=b;break; -case 1:this.y=b;break;default:throw Error("index is out of range: "+a);}return this},getComponent:function(a){switch(a){case 0:return this.x;case 1:return this.y;default:throw Error("index is out of range: "+a);}},clone:function(){return new this.constructor(this.x,this.y)},copy:function(a){this.x=a.x;this.y=a.y;return this},add:function(a,b){if(void 0!==b)return console.warn("THREE.Vector2: .add() now only accepts one argument. Use .addVectors( a, b ) instead."),this.addVectors(a,b);this.x+=a.x; -this.y+=a.y;return this},addScalar:function(a){this.x+=a;this.y+=a;return this},addVectors:function(a,b){this.x=a.x+b.x;this.y=a.y+b.y;return this},addScaledVector:function(a,b){this.x+=a.x*b;this.y+=a.y*b;return this},sub:function(a,b){if(void 0!==b)return console.warn("THREE.Vector2: .sub() now only accepts one argument. Use .subVectors( a, b ) instead."),this.subVectors(a,b);this.x-=a.x;this.y-=a.y;return this},subScalar:function(a){this.x-=a;this.y-=a;return this},subVectors:function(a,b){this.x= -a.x-b.x;this.y=a.y-b.y;return this},multiply:function(a){this.x*=a.x;this.y*=a.y;return this},multiplyScalar:function(a){isFinite(a)?(this.x*=a,this.y*=a):this.y=this.x=0;return this},divide:function(a){this.x/=a.x;this.y/=a.y;return this},divideScalar:function(a){return this.multiplyScalar(1/a)},min:function(a){this.x=Math.min(this.x,a.x);this.y=Math.min(this.y,a.y);return this},max:function(a){this.x=Math.max(this.x,a.x);this.y=Math.max(this.y,a.y);return this},clamp:function(a,b){this.x=Math.max(a.x, -Math.min(b.x,this.x));this.y=Math.max(a.y,Math.min(b.y,this.y));return this},clampScalar:function(){var a,b;return function(c,d){void 0===a&&(a=new D,b=new D);a.set(c,c);b.set(d,d);return this.clamp(a,b)}}(),clampLength:function(a,b){var c=this.length();return this.multiplyScalar(Math.max(a,Math.min(b,c))/c)},floor:function(){this.x=Math.floor(this.x);this.y=Math.floor(this.y);return this},ceil:function(){this.x=Math.ceil(this.x);this.y=Math.ceil(this.y);return this},round:function(){this.x=Math.round(this.x); -this.y=Math.round(this.y);return this},roundToZero:function(){this.x=0>this.x?Math.ceil(this.x):Math.floor(this.x);this.y=0>this.y?Math.ceil(this.y):Math.floor(this.y);return this},negate:function(){this.x=-this.x;this.y=-this.y;return this},dot:function(a){return this.x*a.x+this.y*a.y},lengthSq:function(){return this.x*this.x+this.y*this.y},length:function(){return Math.sqrt(this.x*this.x+this.y*this.y)},lengthManhattan:function(){return Math.abs(this.x)+Math.abs(this.y)},normalize:function(){return this.divideScalar(this.length())}, -angle:function(){var a=Math.atan2(this.y,this.x);0>a&&(a+=2*Math.PI);return a},distanceTo:function(a){return Math.sqrt(this.distanceToSquared(a))},distanceToSquared:function(a){var b=this.x-a.x;a=this.y-a.y;return b*b+a*a},distanceToManhattan:function(a){return Math.abs(this.x-a.x)+Math.abs(this.y-a.y)},setLength:function(a){return this.multiplyScalar(a/this.length())},lerp:function(a,b){this.x+=(a.x-this.x)*b;this.y+=(a.y-this.y)*b;return this},lerpVectors:function(a,b,c){return this.subVectors(b, -a).multiplyScalar(c).add(a)},equals:function(a){return a.x===this.x&&a.y===this.y},fromArray:function(a,b){void 0===b&&(b=0);this.x=a[b];this.y=a[b+1];return this},toArray:function(a,b){void 0===a&&(a=[]);void 0===b&&(b=0);a[b]=this.x;a[b+1]=this.y;return a},fromBufferAttribute:function(a,b,c){void 0!==c&&console.warn("THREE.Vector2: offset has been removed from .fromBufferAttribute().");this.x=a.getX(b);this.y=a.getY(b);return this},rotateAround:function(a,b){var c=Math.cos(b),d=Math.sin(b),e=this.x- -a.x,f=this.y-a.y;this.x=e*c-f*d+a.x;this.y=e*d+f*c+a.y;return this}};var Ze=0;ea.DEFAULT_IMAGE=void 0;ea.DEFAULT_MAPPING=300;ea.prototype={constructor:ea,isTexture:!0,set needsUpdate(a){!0===a&&this.version++},clone:function(){return(new this.constructor).copy(this)},copy:function(a){this.image=a.image;this.mipmaps=a.mipmaps.slice(0);this.mapping=a.mapping;this.wrapS=a.wrapS;this.wrapT=a.wrapT;this.magFilter=a.magFilter;this.minFilter=a.minFilter;this.anisotropy=a.anisotropy;this.format=a.format; -this.type=a.type;this.offset.copy(a.offset);this.repeat.copy(a.repeat);this.generateMipmaps=a.generateMipmaps;this.premultiplyAlpha=a.premultiplyAlpha;this.flipY=a.flipY;this.unpackAlignment=a.unpackAlignment;this.encoding=a.encoding;return this},toJSON:function(a){if(void 0!==a.textures[this.uuid])return a.textures[this.uuid];var b={metadata:{version:4.4,type:"Texture",generator:"Texture.toJSON"},uuid:this.uuid,name:this.name,mapping:this.mapping,repeat:[this.repeat.x,this.repeat.y],offset:[this.offset.x, -this.offset.y],wrap:[this.wrapS,this.wrapT],minFilter:this.minFilter,magFilter:this.magFilter,anisotropy:this.anisotropy,flipY:this.flipY};if(void 0!==this.image){var c=this.image;void 0===c.uuid&&(c.uuid=N.generateUUID());if(void 0===a.images[c.uuid]){var d=a.images,e=c.uuid,f=c.uuid,g;void 0!==c.toDataURL?g=c:(g=document.createElementNS("http://www.w3.org/1999/xhtml","canvas"),g.width=c.width,g.height=c.height,g.getContext("2d").drawImage(c,0,0,c.width,c.height));g=2048a.x||1a.x?0:1;break;case 1002:a.x=1===Math.abs(Math.floor(a.x)%2)?Math.ceil(a.x)-a.x:a.x-Math.floor(a.x)}if(0>a.y||1a.y?0:1;break;case 1002:a.y=1===Math.abs(Math.floor(a.y)%2)?Math.ceil(a.y)-a.y:a.y-Math.floor(a.y)}this.flipY&&(a.y=1-a.y)}}};Object.assign(ea.prototype,pa.prototype);fa.prototype={constructor:fa,isVector4:!0,set:function(a,b,c,d){this.x=a;this.y=b;this.z=c;this.w=d;return this},setScalar:function(a){this.w=this.z=this.y=this.x=a;return this},setX:function(a){this.x=a;return this},setY:function(a){this.y=a;return this},setZ:function(a){this.z=a;return this},setW:function(a){this.w=a;return this}, -setComponent:function(a,b){switch(a){case 0:this.x=b;break;case 1:this.y=b;break;case 2:this.z=b;break;case 3:this.w=b;break;default:throw Error("index is out of range: "+a);}return this},getComponent:function(a){switch(a){case 0:return this.x;case 1:return this.y;case 2:return this.z;case 3:return this.w;default:throw Error("index is out of range: "+a);}},clone:function(){return new this.constructor(this.x,this.y,this.z,this.w)},copy:function(a){this.x=a.x;this.y=a.y;this.z=a.z;this.w=void 0!==a.w? -a.w:1;return this},add:function(a,b){if(void 0!==b)return console.warn("THREE.Vector4: .add() now only accepts one argument. Use .addVectors( a, b ) instead."),this.addVectors(a,b);this.x+=a.x;this.y+=a.y;this.z+=a.z;this.w+=a.w;return this},addScalar:function(a){this.x+=a;this.y+=a;this.z+=a;this.w+=a;return this},addVectors:function(a,b){this.x=a.x+b.x;this.y=a.y+b.y;this.z=a.z+b.z;this.w=a.w+b.w;return this},addScaledVector:function(a,b){this.x+=a.x*b;this.y+=a.y*b;this.z+=a.z*b;this.w+=a.w*b; -return this},sub:function(a,b){if(void 0!==b)return console.warn("THREE.Vector4: .sub() now only accepts one argument. Use .subVectors( a, b ) instead."),this.subVectors(a,b);this.x-=a.x;this.y-=a.y;this.z-=a.z;this.w-=a.w;return this},subScalar:function(a){this.x-=a;this.y-=a;this.z-=a;this.w-=a;return this},subVectors:function(a,b){this.x=a.x-b.x;this.y=a.y-b.y;this.z=a.z-b.z;this.w=a.w-b.w;return this},multiplyScalar:function(a){isFinite(a)?(this.x*=a,this.y*=a,this.z*=a,this.w*=a):this.w=this.z= -this.y=this.x=0;return this},applyMatrix4:function(a){var b=this.x,c=this.y,d=this.z,e=this.w;a=a.elements;this.x=a[0]*b+a[4]*c+a[8]*d+a[12]*e;this.y=a[1]*b+a[5]*c+a[9]*d+a[13]*e;this.z=a[2]*b+a[6]*c+a[10]*d+a[14]*e;this.w=a[3]*b+a[7]*c+a[11]*d+a[15]*e;return this},divideScalar:function(a){return this.multiplyScalar(1/a)},setAxisAngleFromQuaternion:function(a){this.w=2*Math.acos(a.w);var b=Math.sqrt(1-a.w*a.w);1E-4>b?(this.x=1,this.z=this.y=0):(this.x=a.x/b,this.y=a.y/b,this.z=a.z/b);return this}, -setAxisAngleFromRotationMatrix:function(a){var b,c,d;a=a.elements;var e=a[0];d=a[4];var f=a[8],g=a[1],h=a[5],m=a[9];c=a[2];b=a[6];var k=a[10];if(.01>Math.abs(d-g)&&.01>Math.abs(f-c)&&.01>Math.abs(m-b)){if(.1>Math.abs(d+g)&&.1>Math.abs(f+c)&&.1>Math.abs(m+b)&&.1>Math.abs(e+h+k-3))return this.set(1,0,0,0),this;a=Math.PI;e=(e+1)/2;h=(h+1)/2;k=(k+1)/2;d=(d+g)/4;f=(f+c)/4;m=(m+b)/4;e>h&&e>k?.01>e?(b=0,d=c=.707106781):(b=Math.sqrt(e),c=d/b,d=f/b):h>k?.01>h?(b=.707106781,c=0,d=.707106781):(c=Math.sqrt(h), -b=d/c,d=m/c):.01>k?(c=b=.707106781,d=0):(d=Math.sqrt(k),b=f/d,c=m/d);this.set(b,c,d,a);return this}a=Math.sqrt((b-m)*(b-m)+(f-c)*(f-c)+(g-d)*(g-d));.001>Math.abs(a)&&(a=1);this.x=(b-m)/a;this.y=(f-c)/a;this.z=(g-d)/a;this.w=Math.acos((e+h+k-1)/2);return this},min:function(a){this.x=Math.min(this.x,a.x);this.y=Math.min(this.y,a.y);this.z=Math.min(this.z,a.z);this.w=Math.min(this.w,a.w);return this},max:function(a){this.x=Math.max(this.x,a.x);this.y=Math.max(this.y,a.y);this.z=Math.max(this.z,a.z); -this.w=Math.max(this.w,a.w);return this},clamp:function(a,b){this.x=Math.max(a.x,Math.min(b.x,this.x));this.y=Math.max(a.y,Math.min(b.y,this.y));this.z=Math.max(a.z,Math.min(b.z,this.z));this.w=Math.max(a.w,Math.min(b.w,this.w));return this},clampScalar:function(){var a,b;return function(c,d){void 0===a&&(a=new fa,b=new fa);a.set(c,c,c,c);b.set(d,d,d,d);return this.clamp(a,b)}}(),floor:function(){this.x=Math.floor(this.x);this.y=Math.floor(this.y);this.z=Math.floor(this.z);this.w=Math.floor(this.w); -return this},ceil:function(){this.x=Math.ceil(this.x);this.y=Math.ceil(this.y);this.z=Math.ceil(this.z);this.w=Math.ceil(this.w);return this},round:function(){this.x=Math.round(this.x);this.y=Math.round(this.y);this.z=Math.round(this.z);this.w=Math.round(this.w);return this},roundToZero:function(){this.x=0>this.x?Math.ceil(this.x):Math.floor(this.x);this.y=0>this.y?Math.ceil(this.y):Math.floor(this.y);this.z=0>this.z?Math.ceil(this.z):Math.floor(this.z);this.w=0>this.w?Math.ceil(this.w):Math.floor(this.w); -return this},negate:function(){this.x=-this.x;this.y=-this.y;this.z=-this.z;this.w=-this.w;return this},dot:function(a){return this.x*a.x+this.y*a.y+this.z*a.z+this.w*a.w},lengthSq:function(){return this.x*this.x+this.y*this.y+this.z*this.z+this.w*this.w},length:function(){return Math.sqrt(this.x*this.x+this.y*this.y+this.z*this.z+this.w*this.w)},lengthManhattan:function(){return Math.abs(this.x)+Math.abs(this.y)+Math.abs(this.z)+Math.abs(this.w)},normalize:function(){return this.divideScalar(this.length())}, -setLength:function(a){return this.multiplyScalar(a/this.length())},lerp:function(a,b){this.x+=(a.x-this.x)*b;this.y+=(a.y-this.y)*b;this.z+=(a.z-this.z)*b;this.w+=(a.w-this.w)*b;return this},lerpVectors:function(a,b,c){return this.subVectors(b,a).multiplyScalar(c).add(a)},equals:function(a){return a.x===this.x&&a.y===this.y&&a.z===this.z&&a.w===this.w},fromArray:function(a,b){void 0===b&&(b=0);this.x=a[b];this.y=a[b+1];this.z=a[b+2];this.w=a[b+3];return this},toArray:function(a,b){void 0===a&&(a= -[]);void 0===b&&(b=0);a[b]=this.x;a[b+1]=this.y;a[b+2]=this.z;a[b+3]=this.w;return a},fromBufferAttribute:function(a,b,c){void 0!==c&&console.warn("THREE.Vector4: offset has been removed from .fromBufferAttribute().");this.x=a.getX(b);this.y=a.getY(b);this.z=a.getZ(b);this.w=a.getW(b);return this}};Ya.prototype={constructor:Ya,isWebGLRenderTarget:!0,setSize:function(a,b){if(this.width!==a||this.height!==b)this.width=a,this.height=b,this.dispose();this.viewport.set(0,0,a,b);this.scissor.set(0,0,a, -b)},clone:function(){return(new this.constructor).copy(this)},copy:function(a){this.width=a.width;this.height=a.height;this.viewport.copy(a.viewport);this.texture=a.texture.clone();this.depthBuffer=a.depthBuffer;this.stencilBuffer=a.stencilBuffer;this.depthTexture=a.depthTexture;return this},dispose:function(){this.dispatchEvent({type:"dispose"})}};Object.assign(Ya.prototype,pa.prototype);Gb.prototype=Object.create(Ya.prototype);Gb.prototype.constructor=Gb;Gb.prototype.isWebGLRenderTargetCube=!0; -ca.prototype={constructor:ca,get x(){return this._x},set x(a){this._x=a;this.onChangeCallback()},get y(){return this._y},set y(a){this._y=a;this.onChangeCallback()},get z(){return this._z},set z(a){this._z=a;this.onChangeCallback()},get w(){return this._w},set w(a){this._w=a;this.onChangeCallback()},set:function(a,b,c,d){this._x=a;this._y=b;this._z=c;this._w=d;this.onChangeCallback();return this},clone:function(){return new this.constructor(this._x,this._y,this._z,this._w)},copy:function(a){this._x= -a.x;this._y=a.y;this._z=a.z;this._w=a.w;this.onChangeCallback();return this},setFromEuler:function(a,b){if(!1===(a&&a.isEuler))throw Error("THREE.Quaternion: .setFromEuler() now expects an Euler rotation rather than a Vector3 and order.");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),m=a.order;"XYZ"===m?(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"===m?(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"===m?(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"===m?(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"===m?(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"===m&&(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);if(!1!==b)this.onChangeCallback();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);this.onChangeCallback();return this},setFromRotationMatrix:function(a){var b=a.elements,c=b[0];a=b[4];var d=b[8],e=b[1],f=b[5],g=b[9],h=b[2],m=b[6],b=b[10],k=c+f+b;0f&&c>b?(c=2*Math.sqrt(1+c-f-b),this._w=(m-g)/c,this._x=.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=.25*c, -this._z=(g+m)/c):(c=2*Math.sqrt(1+b-c-f),this._w=(e-a)/c,this._x=(d+h)/c,this._y=(g+m)/c,this._z=.25*c);this.onChangeCallback();return this},setFromUnitVectors:function(){var a,b;return function(c,d){void 0===a&&(a=new q);b=c.dot(d)+1;1E-6>b?(b=0,Math.abs(c.x)>Math.abs(c.z)?a.set(-c.y,c.x,0):a.set(0,-c.z,c.y)):a.crossVectors(c,d);this._x=a.x;this._y=a.y;this._z=a.z;this._w=b;return this.normalize()}}(),inverse:function(){return this.conjugate().normalize()},conjugate:function(){this._x*=-1;this._y*= --1;this._z*=-1;this.onChangeCallback();return this},dot:function(a){return this._x*a._x+this._y*a._y+this._z*a._z+this._w*a._w},lengthSq:function(){return this._x*this._x+this._y*this._y+this._z*this._z+this._w*this._w},length:function(){return Math.sqrt(this._x*this._x+this._y*this._y+this._z*this._z+this._w*this._w)},normalize:function(){var a=this.length();0===a?(this._z=this._y=this._x=0,this._w=1):(a=1/a,this._x*=a,this._y*=a,this._z*=a,this._w*=a);this.onChangeCallback();return this},multiply:function(a, -b){return void 0!==b?(console.warn("THREE.Quaternion: .multiply() now only accepts one argument. Use .multiplyQuaternions( a, b ) instead."),this.multiplyQuaternions(a,b)):this.multiplyQuaternions(this,a)},premultiply:function(a){return this.multiplyQuaternions(a,this)},multiplyQuaternions:function(a,b){var c=a._x,d=a._y,e=a._z,f=a._w,g=b._x,h=b._y,m=b._z,k=b._w;this._x=c*k+f*g+d*m-e*h;this._y=d*k+f*h+e*g-c*m;this._z=e*k+f*m+c*h-d*g;this._w=f*k-c*g-d*h-e*m;this.onChangeCallback();return this},slerp:function(a, -b){if(0===b)return this;if(1===b)return this.copy(a);var c=this._x,d=this._y,e=this._z,f=this._w,g=f*a._w+c*a._x+d*a._y+e*a._z;0>g?(this._w=-a._w,this._x=-a._x,this._y=-a._y,this._z=-a._z,g=-g):this.copy(a);if(1<=g)return this._w=f,this._x=c,this._y=d,this._z=e,this;var h=Math.sqrt(1-g*g);if(.001>Math.abs(h))return this._w=.5*(f+this._w),this._x=.5*(c+this._x),this._y=.5*(d+this._y),this._z=.5*(e+this._z),this;var m=Math.atan2(h,g),g=Math.sin((1-b)*m)/h,h=Math.sin(b*m)/h;this._w=f*g+this._w*h;this._x= -c*g+this._x*h;this._y=d*g+this._y*h;this._z=e*g+this._z*h;this.onChangeCallback();return this},equals:function(a){return a._x===this._x&&a._y===this._y&&a._z===this._z&&a._w===this._w},fromArray:function(a,b){void 0===b&&(b=0);this._x=a[b];this._y=a[b+1];this._z=a[b+2];this._w=a[b+3];this.onChangeCallback();return this},toArray:function(a,b){void 0===a&&(a=[]);void 0===b&&(b=0);a[b]=this._x;a[b+1]=this._y;a[b+2]=this._z;a[b+3]=this._w;return a},onChange:function(a){this.onChangeCallback=a;return this}, -onChangeCallback:function(){}};Object.assign(ca,{slerp:function(a,b,c,d){return c.copy(a).slerp(b,d)},slerpFlat:function(a,b,c,d,e,f,g){var h=c[d+0],m=c[d+1],k=c[d+2];c=c[d+3];d=e[f+0];var l=e[f+1],p=e[f+2];e=e[f+3];if(c!==e||h!==d||m!==l||k!==p){f=1-g;var n=h*d+m*l+k*p+c*e,u=0<=n?1:-1,q=1-n*n;q>Number.EPSILON&&(q=Math.sqrt(q),n=Math.atan2(q,n*u),f=Math.sin(f*n)/q,g=Math.sin(g*n)/q);u*=g;h=h*f+d*u;m=m*f+l*u;k=k*f+p*u;c=c*f+e*u;f===1-g&&(g=1/Math.sqrt(h*h+m*m+k*k+c*c),h*=g,m*=g,k*=g,c*=g)}a[b]=h;a[b+ -1]=m;a[b+2]=k;a[b+3]=c}});q.prototype={constructor:q,isVector3:!0,set:function(a,b,c){this.x=a;this.y=b;this.z=c;return this},setScalar:function(a){this.z=this.y=this.x=a;return this},setX:function(a){this.x=a;return this},setY:function(a){this.y=a;return this},setZ:function(a){this.z=a;return this},setComponent:function(a,b){switch(a){case 0:this.x=b;break;case 1:this.y=b;break;case 2:this.z=b;break;default:throw Error("index is out of range: "+a);}return this},getComponent:function(a){switch(a){case 0:return this.x; -case 1:return this.y;case 2:return this.z;default:throw Error("index is out of range: "+a);}},clone:function(){return new this.constructor(this.x,this.y,this.z)},copy:function(a){this.x=a.x;this.y=a.y;this.z=a.z;return this},add:function(a,b){if(void 0!==b)return console.warn("THREE.Vector3: .add() now only accepts one argument. Use .addVectors( a, b ) instead."),this.addVectors(a,b);this.x+=a.x;this.y+=a.y;this.z+=a.z;return this},addScalar:function(a){this.x+=a;this.y+=a;this.z+=a;return this}, -addVectors:function(a,b){this.x=a.x+b.x;this.y=a.y+b.y;this.z=a.z+b.z;return this},addScaledVector:function(a,b){this.x+=a.x*b;this.y+=a.y*b;this.z+=a.z*b;return this},sub:function(a,b){if(void 0!==b)return console.warn("THREE.Vector3: .sub() now only accepts one argument. Use .subVectors( a, b ) instead."),this.subVectors(a,b);this.x-=a.x;this.y-=a.y;this.z-=a.z;return this},subScalar:function(a){this.x-=a;this.y-=a;this.z-=a;return this},subVectors:function(a,b){this.x=a.x-b.x;this.y=a.y-b.y;this.z= -a.z-b.z;return this},multiply:function(a,b){if(void 0!==b)return console.warn("THREE.Vector3: .multiply() now only accepts one argument. Use .multiplyVectors( a, b ) instead."),this.multiplyVectors(a,b);this.x*=a.x;this.y*=a.y;this.z*=a.z;return this},multiplyScalar:function(a){isFinite(a)?(this.x*=a,this.y*=a,this.z*=a):this.z=this.y=this.x=0;return this},multiplyVectors:function(a,b){this.x=a.x*b.x;this.y=a.y*b.y;this.z=a.z*b.z;return this},applyEuler:function(){var a;return function(b){!1===(b&& -b.isEuler)&&console.error("THREE.Vector3: .applyEuler() now expects an Euler rotation rather than a Vector3 and order.");void 0===a&&(a=new ca);return this.applyQuaternion(a.setFromEuler(b))}}(),applyAxisAngle:function(){var a;return function(b,c){void 0===a&&(a=new ca);return this.applyQuaternion(a.setFromAxisAngle(b,c))}}(),applyMatrix3:function(a){var b=this.x,c=this.y,d=this.z;a=a.elements;this.x=a[0]*b+a[3]*c+a[6]*d;this.y=a[1]*b+a[4]*c+a[7]*d;this.z=a[2]*b+a[5]*c+a[8]*d;return this},applyMatrix4:function(a){var b= -this.x,c=this.y,d=this.z;a=a.elements;this.x=a[0]*b+a[4]*c+a[8]*d+a[12];this.y=a[1]*b+a[5]*c+a[9]*d+a[13];this.z=a[2]*b+a[6]*c+a[10]*d+a[14];return this.divideScalar(a[3]*b+a[7]*c+a[11]*d+a[15])},applyQuaternion:function(a){var b=this.x,c=this.y,d=this.z,e=a.x,f=a.y,g=a.z;a=a.w;var h=a*b+f*d-g*c,m=a*c+g*b-e*d,k=a*d+e*c-f*b,b=-e*b-f*c-g*d;this.x=h*a+b*-e+m*-g-k*-f;this.y=m*a+b*-f+k*-e-h*-g;this.z=k*a+b*-g+h*-f-m*-e;return this},project:function(){var a;return function(b){void 0===a&&(a=new S);a.multiplyMatrices(b.projectionMatrix, -a.getInverse(b.matrixWorld));return this.applyMatrix4(a)}}(),unproject:function(){var a;return function(b){void 0===a&&(a=new S);a.multiplyMatrices(b.matrixWorld,a.getInverse(b.projectionMatrix));return this.applyMatrix4(a)}}(),transformDirection:function(a){var b=this.x,c=this.y,d=this.z;a=a.elements;this.x=a[0]*b+a[4]*c+a[8]*d;this.y=a[1]*b+a[5]*c+a[9]*d;this.z=a[2]*b+a[6]*c+a[10]*d;return this.normalize()},divide:function(a){this.x/=a.x;this.y/=a.y;this.z/=a.z;return this},divideScalar:function(a){return this.multiplyScalar(1/ -a)},min:function(a){this.x=Math.min(this.x,a.x);this.y=Math.min(this.y,a.y);this.z=Math.min(this.z,a.z);return this},max:function(a){this.x=Math.max(this.x,a.x);this.y=Math.max(this.y,a.y);this.z=Math.max(this.z,a.z);return this},clamp:function(a,b){this.x=Math.max(a.x,Math.min(b.x,this.x));this.y=Math.max(a.y,Math.min(b.y,this.y));this.z=Math.max(a.z,Math.min(b.z,this.z));return this},clampScalar:function(){var a,b;return function(c,d){void 0===a&&(a=new q,b=new q);a.set(c,c,c);b.set(d,d,d);return this.clamp(a, -b)}}(),clampLength:function(a,b){var c=this.length();return this.multiplyScalar(Math.max(a,Math.min(b,c))/c)},floor:function(){this.x=Math.floor(this.x);this.y=Math.floor(this.y);this.z=Math.floor(this.z);return this},ceil:function(){this.x=Math.ceil(this.x);this.y=Math.ceil(this.y);this.z=Math.ceil(this.z);return this},round:function(){this.x=Math.round(this.x);this.y=Math.round(this.y);this.z=Math.round(this.z);return this},roundToZero:function(){this.x=0>this.x?Math.ceil(this.x):Math.floor(this.x); -this.y=0>this.y?Math.ceil(this.y):Math.floor(this.y);this.z=0>this.z?Math.ceil(this.z):Math.floor(this.z);return this},negate:function(){this.x=-this.x;this.y=-this.y;this.z=-this.z;return this},dot:function(a){return this.x*a.x+this.y*a.y+this.z*a.z},lengthSq:function(){return this.x*this.x+this.y*this.y+this.z*this.z},length:function(){return Math.sqrt(this.x*this.x+this.y*this.y+this.z*this.z)},lengthManhattan:function(){return Math.abs(this.x)+Math.abs(this.y)+Math.abs(this.z)},normalize:function(){return this.divideScalar(this.length())}, -setLength:function(a){return this.multiplyScalar(a/this.length())},lerp:function(a,b){this.x+=(a.x-this.x)*b;this.y+=(a.y-this.y)*b;this.z+=(a.z-this.z)*b;return this},lerpVectors:function(a,b,c){return this.subVectors(b,a).multiplyScalar(c).add(a)},cross:function(a,b){if(void 0!==b)return console.warn("THREE.Vector3: .cross() now only accepts one argument. Use .crossVectors( a, b ) instead."),this.crossVectors(a,b);var c=this.x,d=this.y,e=this.z;this.x=d*a.z-e*a.y;this.y=e*a.x-c*a.z;this.z=c*a.y- -d*a.x;return this},crossVectors:function(a,b){var c=a.x,d=a.y,e=a.z,f=b.x,g=b.y,h=b.z;this.x=d*h-e*g;this.y=e*f-c*h;this.z=c*g-d*f;return this},projectOnVector:function(a){var b=a.dot(this)/a.lengthSq();return this.copy(a).multiplyScalar(b)},projectOnPlane:function(){var a;return function(b){void 0===a&&(a=new q);a.copy(this).projectOnVector(b);return this.sub(a)}}(),reflect:function(){var a;return function(b){void 0===a&&(a=new q);return this.sub(a.copy(b).multiplyScalar(2*this.dot(b)))}}(),angleTo:function(a){a= -this.dot(a)/Math.sqrt(this.lengthSq()*a.lengthSq());return Math.acos(N.clamp(a,-1,1))},distanceTo:function(a){return Math.sqrt(this.distanceToSquared(a))},distanceToSquared:function(a){var b=this.x-a.x,c=this.y-a.y;a=this.z-a.z;return b*b+c*c+a*a},distanceToManhattan:function(a){return Math.abs(this.x-a.x)+Math.abs(this.y-a.y)+Math.abs(this.z-a.z)},setFromSpherical:function(a){var b=Math.sin(a.phi)*a.radius;this.x=b*Math.sin(a.theta);this.y=Math.cos(a.phi)*a.radius;this.z=b*Math.cos(a.theta);return this}, -setFromCylindrical:function(a){this.x=a.radius*Math.sin(a.theta);this.y=a.y;this.z=a.radius*Math.cos(a.theta);return this},setFromMatrixPosition:function(a){return this.setFromMatrixColumn(a,3)},setFromMatrixScale:function(a){var b=this.setFromMatrixColumn(a,0).length(),c=this.setFromMatrixColumn(a,1).length();a=this.setFromMatrixColumn(a,2).length();this.x=b;this.y=c;this.z=a;return this},setFromMatrixColumn:function(a,b){if("number"===typeof a){console.warn("THREE.Vector3: setFromMatrixColumn now expects ( matrix, index )."); -var c=a;a=b;b=c}return this.fromArray(a.elements,4*b)},equals:function(a){return a.x===this.x&&a.y===this.y&&a.z===this.z},fromArray:function(a,b){void 0===b&&(b=0);this.x=a[b];this.y=a[b+1];this.z=a[b+2];return this},toArray:function(a,b){void 0===a&&(a=[]);void 0===b&&(b=0);a[b]=this.x;a[b+1]=this.y;a[b+2]=this.z;return a},fromBufferAttribute:function(a,b,c){void 0!==c&&console.warn("THREE.Vector3: offset has been removed from .fromBufferAttribute().");this.x=a.getX(b);this.y=a.getY(b);this.z=a.getZ(b); -return this}};S.prototype={constructor:S,isMatrix4:!0,set:function(a,b,c,d,e,f,g,h,m,k,l,p,n,u,q,r){var A=this.elements;A[0]=a;A[4]=b;A[8]=c;A[12]=d;A[1]=e;A[5]=f;A[9]=g;A[13]=h;A[2]=m;A[6]=k;A[10]=l;A[14]=p;A[3]=n;A[7]=u;A[11]=q;A[15]=r;return this},identity:function(){this.set(1,0,0,0,0,1,0,0,0,0,1,0,0,0,0,1);return this},clone:function(){return(new S).fromArray(this.elements)},copy:function(a){this.elements.set(a.elements);return this},copyPosition:function(a){var b=this.elements;a=a.elements; -b[12]=a[12];b[13]=a[13];b[14]=a[14];return this},extractBasis:function(a,b,c){a.setFromMatrixColumn(this,0);b.setFromMatrixColumn(this,1);c.setFromMatrixColumn(this,2);return this},makeBasis:function(a,b,c){this.set(a.x,b.x,c.x,0,a.y,b.y,c.y,0,a.z,b.z,c.z,0,0,0,0,1);return this},extractRotation:function(){var a;return function(b){void 0===a&&(a=new q);var c=this.elements,d=b.elements,e=1/a.setFromMatrixColumn(b,0).length(),f=1/a.setFromMatrixColumn(b,1).length();b=1/a.setFromMatrixColumn(b,2).length(); -c[0]=d[0]*e;c[1]=d[1]*e;c[2]=d[2]*e;c[4]=d[4]*f;c[5]=d[5]*f;c[6]=d[6]*f;c[8]=d[8]*b;c[9]=d[9]*b;c[10]=d[10]*b;return this}}(),makeRotationFromEuler:function(a){!1===(a&&a.isEuler)&&console.error("THREE.Matrix: .makeRotationFromEuler() now expects a Euler rotation rather than a Vector3 and order.");var b=this.elements,c=a.x,d=a.y,e=a.z,f=Math.cos(c),c=Math.sin(c),g=Math.cos(d),d=Math.sin(d),h=Math.cos(e),e=Math.sin(e);if("XYZ"===a.order){a=f*h;var m=f*e,k=c*h,l=c*e;b[0]=g*h;b[4]=-g*e;b[8]=d;b[1]=m+ -k*d;b[5]=a-l*d;b[9]=-c*g;b[2]=l-a*d;b[6]=k+m*d;b[10]=f*g}else"YXZ"===a.order?(a=g*h,m=g*e,k=d*h,l=d*e,b[0]=a+l*c,b[4]=k*c-m,b[8]=f*d,b[1]=f*e,b[5]=f*h,b[9]=-c,b[2]=m*c-k,b[6]=l+a*c,b[10]=f*g):"ZXY"===a.order?(a=g*h,m=g*e,k=d*h,l=d*e,b[0]=a-l*c,b[4]=-f*e,b[8]=k+m*c,b[1]=m+k*c,b[5]=f*h,b[9]=l-a*c,b[2]=-f*d,b[6]=c,b[10]=f*g):"ZYX"===a.order?(a=f*h,m=f*e,k=c*h,l=c*e,b[0]=g*h,b[4]=k*d-m,b[8]=a*d+l,b[1]=g*e,b[5]=l*d+a,b[9]=m*d-k,b[2]=-d,b[6]=c*g,b[10]=f*g):"YZX"===a.order?(a=f*g,m=f*d,k=c*g,l=c*d,b[0]= -g*h,b[4]=l-a*e,b[8]=k*e+m,b[1]=e,b[5]=f*h,b[9]=-c*h,b[2]=-d*h,b[6]=m*e+k,b[10]=a-l*e):"XZY"===a.order&&(a=f*g,m=f*d,k=c*g,l=c*d,b[0]=g*h,b[4]=-e,b[8]=d*h,b[1]=a*e+l,b[5]=f*h,b[9]=m*e-k,b[2]=k*e-m,b[6]=c*h,b[10]=l*e+a);b[3]=0;b[7]=0;b[11]=0;b[12]=0;b[13]=0;b[14]=0;b[15]=1;return this},makeRotationFromQuaternion:function(a){var b=this.elements,c=a.x,d=a.y,e=a.z,f=a.w,g=c+c,h=d+d,m=e+e;a=c*g;var k=c*h,c=c*m,l=d*h,d=d*m,e=e*m,g=f*g,h=f*h,f=f*m;b[0]=1-(l+e);b[4]=k-f;b[8]=c+h;b[1]=k+f;b[5]=1-(a+e);b[9]= -d-g;b[2]=c-h;b[6]=d+g;b[10]=1-(a+l);b[3]=0;b[7]=0;b[11]=0;b[12]=0;b[13]=0;b[14]=0;b[15]=1;return this},lookAt:function(){var a,b,c;return function(d,e,f){void 0===a&&(a=new q,b=new q,c=new q);var g=this.elements;c.subVectors(d,e).normalize();0===c.lengthSq()&&(c.z=1);a.crossVectors(f,c).normalize();0===a.lengthSq()&&(c.z+=1E-4,a.crossVectors(f,c).normalize());b.crossVectors(c,a);g[0]=a.x;g[4]=b.x;g[8]=c.x;g[1]=a.y;g[5]=b.y;g[9]=c.y;g[2]=a.z;g[6]=b.z;g[10]=c.z;return this}}(),multiply:function(a,b){return void 0!== -b?(console.warn("THREE.Matrix4: .multiply() now only accepts one argument. Use .multiplyMatrices( a, b ) instead."),this.multiplyMatrices(a,b)):this.multiplyMatrices(this,a)},premultiply:function(a){return this.multiplyMatrices(a,this)},multiplyMatrices:function(a,b){var c=a.elements,d=b.elements,e=this.elements,f=c[0],g=c[4],h=c[8],m=c[12],k=c[1],l=c[5],p=c[9],n=c[13],u=c[2],q=c[6],r=c[10],A=c[14],w=c[3],y=c[7],K=c[11],c=c[15],v=d[0],E=d[4],L=d[8],C=d[12],F=d[1],x=d[5],H=d[9],D=d[13],z=d[2],J=d[6], -I=d[10],Q=d[14],M=d[3],O=d[7],P=d[11],d=d[15];e[0]=f*v+g*F+h*z+m*M;e[4]=f*E+g*x+h*J+m*O;e[8]=f*L+g*H+h*I+m*P;e[12]=f*C+g*D+h*Q+m*d;e[1]=k*v+l*F+p*z+n*M;e[5]=k*E+l*x+p*J+n*O;e[9]=k*L+l*H+p*I+n*P;e[13]=k*C+l*D+p*Q+n*d;e[2]=u*v+q*F+r*z+A*M;e[6]=u*E+q*x+r*J+A*O;e[10]=u*L+q*H+r*I+A*P;e[14]=u*C+q*D+r*Q+A*d;e[3]=w*v+y*F+K*z+c*M;e[7]=w*E+y*x+K*J+c*O;e[11]=w*L+y*H+K*I+c*P;e[15]=w*C+y*D+K*Q+c*d;return this},multiplyToArray:function(a,b,c){var d=this.elements;this.multiplyMatrices(a,b);c[0]=d[0];c[1]=d[1];c[2]= -d[2];c[3]=d[3];c[4]=d[4];c[5]=d[5];c[6]=d[6];c[7]=d[7];c[8]=d[8];c[9]=d[9];c[10]=d[10];c[11]=d[11];c[12]=d[12];c[13]=d[13];c[14]=d[14];c[15]=d[15];return this},multiplyScalar:function(a){var b=this.elements;b[0]*=a;b[4]*=a;b[8]*=a;b[12]*=a;b[1]*=a;b[5]*=a;b[9]*=a;b[13]*=a;b[2]*=a;b[6]*=a;b[10]*=a;b[14]*=a;b[3]*=a;b[7]*=a;b[11]*=a;b[15]*=a;return this},applyToBufferAttribute:function(){var a;return function(b){void 0===a&&(a=new q);for(var c=0,d=b.count;cthis.determinant()&&(g=-g);c.x=f[12];c.y=f[13];c.z=f[14];b.elements.set(this.elements);c=1/g;var f=1/h,k=1/m;b.elements[0]*=c;b.elements[1]*=c;b.elements[2]*=c;b.elements[4]*=f;b.elements[5]*=f;b.elements[6]*=f;b.elements[8]*=k;b.elements[9]*=k;b.elements[10]*=k;d.setFromRotationMatrix(b); -e.x=g;e.y=h;e.z=m;return this}}(),makePerspective:function(a,b,c,d,e,f){void 0===f&&console.warn("THREE.Matrix4: .makePerspective() has been redefined and has a new signature. Please check the docs.");var g=this.elements;g[0]=2*e/(b-a);g[4]=0;g[8]=(b+a)/(b-a);g[12]=0;g[1]=0;g[5]=2*e/(c-d);g[9]=(c+d)/(c-d);g[13]=0;g[2]=0;g[6]=0;g[10]=-(f+e)/(f-e);g[14]=-2*f*e/(f-e);g[3]=0;g[7]=0;g[11]=-1;g[15]=0;return this},makeOrthographic:function(a,b,c,d,e,f){var g=this.elements,h=1/(b-a),m=1/(c-d),k=1/(f-e);g[0]= -2*h;g[4]=0;g[8]=0;g[12]=-((b+a)*h);g[1]=0;g[5]=2*m;g[9]=0;g[13]=-((c+d)*m);g[2]=0;g[6]=0;g[10]=-2*k;g[14]=-((f+e)*k);g[3]=0;g[7]=0;g[11]=0;g[15]=1;return this},equals:function(a){var b=this.elements;a=a.elements;for(var c=0;16>c;c++)if(b[c]!==a[c])return!1;return!0},fromArray:function(a,b){void 0===b&&(b=0);for(var c=0;16>c;c++)this.elements[c]=a[c+b];return this},toArray:function(a,b){void 0===a&&(a=[]);void 0===b&&(b=0);var c=this.elements;a[b]=c[0];a[b+1]=c[1];a[b+2]=c[2];a[b+3]=c[3];a[b+4]=c[4]; -a[b+5]=c[5];a[b+6]=c[6];a[b+7]=c[7];a[b+8]=c[8];a[b+9]=c[9];a[b+10]=c[10];a[b+11]=c[11];a[b+12]=c[12];a[b+13]=c[13];a[b+14]=c[14];a[b+15]=c[15];return a}};Za.prototype=Object.create(ea.prototype);Za.prototype.constructor=Za;Za.prototype.isCubeTexture=!0;Object.defineProperty(Za.prototype,"images",{get:function(){return this.image},set:function(a){this.image=a}});var Ee=new ea,Fe=new Za,Be=[],De=[];Je.prototype.setValue=function(a,b){for(var c=this.seq,d=0,e=c.length;d!==e;++d){var f=c[d];f.setValue(a, -b[f.id])}};var Rd=/([\w\d_]+)(\])?(\[|\.)?/g;$a.prototype.setValue=function(a,b,c){b=this.map[b];void 0!==b&&b.setValue(a,c,this.renderer)};$a.prototype.set=function(a,b,c){var d=this.map[c];void 0!==d&&d.setValue(a,b[c],this.renderer)};$a.prototype.setOptional=function(a,b,c){b=b[c];void 0!==b&&this.setValue(a,c,b)};$a.upload=function(a,b,c,d){for(var e=0,f=b.length;e!==f;++e){var g=b[e],h=c[g.id];!1!==h.needsUpdate&&g.setValue(a,h.value,d)}};$a.seqWithValue=function(a,b){for(var c=[],d=0,e=a.length;d!== -e;++d){var f=a[d];f.id in b&&c.push(f)}return c};var Ja={merge:function(a){for(var b={},c=0;c 0.0 ) {\n#if defined ( PHYSICALLY_CORRECT_LIGHTS )\n\t\t\tfloat distanceFalloff = 1.0 / max( pow( lightDistance, decayExponent ), 0.01 );\n\t\t\tfloat maxDistanceCutoffFactor = pow2( saturate( 1.0 - pow4( lightDistance / cutoffDistance ) ) );\n\t\t\treturn distanceFalloff * maxDistanceCutoffFactor;\n#else\n\t\t\treturn pow( saturate( -lightDistance / cutoffDistance + 1.0 ), decayExponent );\n#endif\n\t\t}\n\t\treturn 1.0;\n}\nvec3 BRDF_Diffuse_Lambert( const in vec3 diffuseColor ) {\n\treturn RECIPROCAL_PI * diffuseColor;\n}\nvec3 F_Schlick( const in vec3 specularColor, const in float dotLH ) {\n\tfloat fresnel = exp2( ( -5.55473 * dotLH - 6.98316 ) * dotLH );\n\treturn ( 1.0 - specularColor ) * fresnel + specularColor;\n}\nfloat G_GGX_Smith( const in float alpha, const in float dotNL, const in float dotNV ) {\n\tfloat a2 = pow2( alpha );\n\tfloat gl = dotNL + sqrt( a2 + ( 1.0 - a2 ) * pow2( dotNL ) );\n\tfloat gv = dotNV + sqrt( a2 + ( 1.0 - a2 ) * pow2( dotNV ) );\n\treturn 1.0 / ( gl * gv );\n}\nfloat G_GGX_SmithCorrelated( const in float alpha, const in float dotNL, const in float dotNV ) {\n\tfloat a2 = pow2( alpha );\n\tfloat gv = dotNL * sqrt( a2 + ( 1.0 - a2 ) * pow2( dotNV ) );\n\tfloat gl = dotNV * sqrt( a2 + ( 1.0 - a2 ) * pow2( dotNL ) );\n\treturn 0.5 / max( gv + gl, EPSILON );\n}\nfloat D_GGX( const in float alpha, const in float dotNH ) {\n\tfloat a2 = pow2( alpha );\n\tfloat denom = pow2( dotNH ) * ( a2 - 1.0 ) + 1.0;\n\treturn RECIPROCAL_PI * a2 / pow2( denom );\n}\nvec3 BRDF_Specular_GGX( const in IncidentLight incidentLight, const in GeometricContext geometry, const in vec3 specularColor, const in float roughness ) {\n\tfloat alpha = pow2( roughness );\n\tvec3 halfDir = normalize( incidentLight.direction + geometry.viewDir );\n\tfloat dotNL = saturate( dot( geometry.normal, incidentLight.direction ) );\n\tfloat dotNV = saturate( dot( geometry.normal, geometry.viewDir ) );\n\tfloat dotNH = saturate( dot( geometry.normal, halfDir ) );\n\tfloat dotLH = saturate( dot( incidentLight.direction, halfDir ) );\n\tvec3 F = F_Schlick( specularColor, dotLH );\n\tfloat G = G_GGX_SmithCorrelated( alpha, dotNL, dotNV );\n\tfloat D = D_GGX( alpha, dotNH );\n\treturn F * ( G * D );\n}\nvec2 ltcTextureCoords( const in GeometricContext geometry, const in float roughness ) {\n\tconst float LUT_SIZE = 64.0;\n\tconst float LUT_SCALE = (LUT_SIZE - 1.0)/LUT_SIZE;\n\tconst float LUT_BIAS = 0.5/LUT_SIZE;\n\tvec3 N = geometry.normal;\n\tvec3 V = geometry.viewDir;\n\tvec3 P = geometry.position;\n\tfloat theta = acos( dot( N, V ) );\n\tvec2 uv = vec2(\n\t\tsqrt( saturate( roughness ) ),\n\t\tsaturate( theta / ( 0.5 * PI ) ) );\n\tuv = uv * LUT_SCALE + LUT_BIAS;\n\treturn uv;\n}\nvoid clipQuadToHorizon( inout vec3 L[5], out int n ) {\n\tint config = 0;\n\tif ( L[0].z > 0.0 ) config += 1;\n\tif ( L[1].z > 0.0 ) config += 2;\n\tif ( L[2].z > 0.0 ) config += 4;\n\tif ( L[3].z > 0.0 ) config += 8;\n\tn = 0;\n\tif ( config == 0 ) {\n\t} else if ( config == 1 ) {\n\t\tn = 3;\n\t\tL[1] = -L[1].z * L[0] + L[0].z * L[1];\n\t\tL[2] = -L[3].z * L[0] + L[0].z * L[3];\n\t} else if ( config == 2 ) {\n\t\tn = 3;\n\t\tL[0] = -L[0].z * L[1] + L[1].z * L[0];\n\t\tL[2] = -L[2].z * L[1] + L[1].z * L[2];\n\t} else if ( config == 3 ) {\n\t\tn = 4;\n\t\tL[2] = -L[2].z * L[1] + L[1].z * L[2];\n\t\tL[3] = -L[3].z * L[0] + L[0].z * L[3];\n\t} else if ( config == 4 ) {\n\t\tn = 3;\n\t\tL[0] = -L[3].z * L[2] + L[2].z * L[3];\n\t\tL[1] = -L[1].z * L[2] + L[2].z * L[1];\n\t} else if ( config == 5 ) {\n\t\tn = 0;\n\t} else if ( config == 6 ) {\n\t\tn = 4;\n\t\tL[0] = -L[0].z * L[1] + L[1].z * L[0];\n\t\tL[3] = -L[3].z * L[2] + L[2].z * L[3];\n\t} else if ( config == 7 ) {\n\t\tn = 5;\n\t\tL[4] = -L[3].z * L[0] + L[0].z * L[3];\n\t\tL[3] = -L[3].z * L[2] + L[2].z * L[3];\n\t} else if ( config == 8 ) {\n\t\tn = 3;\n\t\tL[0] = -L[0].z * L[3] + L[3].z * L[0];\n\t\tL[1] = -L[2].z * L[3] + L[3].z * L[2];\n\t\tL[2] = L[3];\n\t} else if ( config == 9 ) {\n\t\tn = 4;\n\t\tL[1] = -L[1].z * L[0] + L[0].z * L[1];\n\t\tL[2] = -L[2].z * L[3] + L[3].z * L[2];\n\t} else if ( config == 10 ) {\n\t\tn = 0;\n\t} else if ( config == 11 ) {\n\t\tn = 5;\n\t\tL[4] = L[3];\n\t\tL[3] = -L[2].z * L[3] + L[3].z * L[2];\n\t\tL[2] = -L[2].z * L[1] + L[1].z * L[2];\n\t} else if ( config == 12 ) {\n\t\tn = 4;\n\t\tL[1] = -L[1].z * L[2] + L[2].z * L[1];\n\t\tL[0] = -L[0].z * L[3] + L[3].z * L[0];\n\t} else if ( config == 13 ) {\n\t\tn = 5;\n\t\tL[4] = L[3];\n\t\tL[3] = L[2];\n\t\tL[2] = -L[1].z * L[2] + L[2].z * L[1];\n\t\tL[1] = -L[1].z * L[0] + L[0].z * L[1];\n\t} else if ( config == 14 ) {\n\t\tn = 5;\n\t\tL[4] = -L[0].z * L[3] + L[3].z * L[0];\n\t\tL[0] = -L[0].z * L[1] + L[1].z * L[0];\n\t} else if ( config == 15 ) {\n\t\tn = 4;\n\t}\n\tif ( n == 3 )\n\t\tL[3] = L[0];\n\tif ( n == 4 )\n\t\tL[4] = L[0];\n}\nfloat integrateLtcBrdfOverRectEdge( vec3 v1, vec3 v2 ) {\n\tfloat cosTheta = dot( v1, v2 );\n\tfloat theta = acos( cosTheta );\n\tfloat res = cross( v1, v2 ).z * ( ( theta > 0.001 ) ? theta / sin( theta ) : 1.0 );\n\treturn res;\n}\nvoid initRectPoints( const in vec3 pos, const in vec3 halfWidth, const in vec3 halfHeight, out vec3 rectPoints[4] ) {\n\trectPoints[0] = pos - halfWidth - halfHeight;\n\trectPoints[1] = pos + halfWidth - halfHeight;\n\trectPoints[2] = pos + halfWidth + halfHeight;\n\trectPoints[3] = pos - halfWidth + halfHeight;\n}\nvec3 integrateLtcBrdfOverRect( const in GeometricContext geometry, const in mat3 brdfMat, const in vec3 rectPoints[4] ) {\n\tvec3 N = geometry.normal;\n\tvec3 V = geometry.viewDir;\n\tvec3 P = geometry.position;\n\tvec3 T1, T2;\n\tT1 = normalize(V - N * dot( V, N ));\n\tT2 = - cross( N, T1 );\n\tmat3 brdfWrtSurface = brdfMat * transpose( mat3( T1, T2, N ) );\n\tvec3 clippedRect[5];\n\tclippedRect[0] = brdfWrtSurface * ( rectPoints[0] - P );\n\tclippedRect[1] = brdfWrtSurface * ( rectPoints[1] - P );\n\tclippedRect[2] = brdfWrtSurface * ( rectPoints[2] - P );\n\tclippedRect[3] = brdfWrtSurface * ( rectPoints[3] - P );\n\tint n;\n\tclipQuadToHorizon(clippedRect, n);\n\tif ( n == 0 )\n\t\treturn vec3( 0, 0, 0 );\n\tclippedRect[0] = normalize( clippedRect[0] );\n\tclippedRect[1] = normalize( clippedRect[1] );\n\tclippedRect[2] = normalize( clippedRect[2] );\n\tclippedRect[3] = normalize( clippedRect[3] );\n\tclippedRect[4] = normalize( clippedRect[4] );\n\tfloat sum = 0.0;\n\tsum += integrateLtcBrdfOverRectEdge( clippedRect[0], clippedRect[1] );\n\tsum += integrateLtcBrdfOverRectEdge( clippedRect[1], clippedRect[2] );\n\tsum += integrateLtcBrdfOverRectEdge( clippedRect[2], clippedRect[3] );\n\tif (n >= 4)\n\t\tsum += integrateLtcBrdfOverRectEdge( clippedRect[3], clippedRect[4] );\n\tif (n == 5)\n\t\tsum += integrateLtcBrdfOverRectEdge( clippedRect[4], clippedRect[0] );\n\tsum = max( 0.0, sum );\n\tvec3 Lo_i = vec3( sum, sum, sum );\n\treturn Lo_i;\n}\nvec3 Rect_Area_Light_Specular_Reflectance(\n\t\tconst in GeometricContext geometry,\n\t\tconst in vec3 lightPos, const in vec3 lightHalfWidth, const in vec3 lightHalfHeight,\n\t\tconst in float roughness,\n\t\tconst in sampler2D ltcMat, const in sampler2D ltcMag ) {\n\tvec3 rectPoints[4];\n\tinitRectPoints( lightPos, lightHalfWidth, lightHalfHeight, rectPoints );\n\tvec2 uv = ltcTextureCoords( geometry, roughness );\n\tvec4 brdfLtcApproxParams, t;\n\tbrdfLtcApproxParams = texture2D( ltcMat, uv );\n\tt = texture2D( ltcMat, uv );\n\tfloat brdfLtcScalar = texture2D( ltcMag, uv ).a;\n\tmat3 brdfLtcApproxMat = mat3(\n\t\tvec3( 1, 0, t.y ),\n\t\tvec3( 0, t.z, 0 ),\n\t\tvec3( t.w, 0, t.x )\n\t);\n\tvec3 specularReflectance = integrateLtcBrdfOverRect( geometry, brdfLtcApproxMat, rectPoints );\n\tspecularReflectance *= brdfLtcScalar;\n\treturn specularReflectance;\n}\nvec3 Rect_Area_Light_Diffuse_Reflectance(\n\t\tconst in GeometricContext geometry,\n\t\tconst in vec3 lightPos, const in vec3 lightHalfWidth, const in vec3 lightHalfHeight ) {\n\tvec3 rectPoints[4];\n\tinitRectPoints( lightPos, lightHalfWidth, lightHalfHeight, rectPoints );\n\tmat3 diffuseBrdfMat = mat3(1);\n\tvec3 diffuseReflectance = integrateLtcBrdfOverRect( geometry, diffuseBrdfMat, rectPoints );\n\treturn diffuseReflectance;\n}\nvec3 BRDF_Specular_GGX_Environment( const in GeometricContext geometry, const in vec3 specularColor, const in float roughness ) {\n\tfloat dotNV = saturate( dot( geometry.normal, geometry.viewDir ) );\n\tconst vec4 c0 = vec4( - 1, - 0.0275, - 0.572, 0.022 );\n\tconst vec4 c1 = vec4( 1, 0.0425, 1.04, - 0.04 );\n\tvec4 r = roughness * c0 + c1;\n\tfloat a004 = min( r.x * r.x, exp2( - 9.28 * dotNV ) ) * r.x + r.y;\n\tvec2 AB = vec2( -1.04, 1.04 ) * a004 + r.zw;\n\treturn specularColor * AB.x + AB.y;\n}\nfloat G_BlinnPhong_Implicit( ) {\n\treturn 0.25;\n}\nfloat D_BlinnPhong( const in float shininess, const in float dotNH ) {\n\treturn RECIPROCAL_PI * ( shininess * 0.5 + 1.0 ) * pow( dotNH, shininess );\n}\nvec3 BRDF_Specular_BlinnPhong( const in IncidentLight incidentLight, const in GeometricContext geometry, const in vec3 specularColor, const in float shininess ) {\n\tvec3 halfDir = normalize( incidentLight.direction + geometry.viewDir );\n\tfloat dotNH = saturate( dot( geometry.normal, halfDir ) );\n\tfloat dotLH = saturate( dot( incidentLight.direction, halfDir ) );\n\tvec3 F = F_Schlick( specularColor, dotLH );\n\tfloat G = G_BlinnPhong_Implicit( );\n\tfloat D = D_BlinnPhong( shininess, dotNH );\n\treturn F * ( G * D );\n}\nfloat GGXRoughnessToBlinnExponent( const in float ggxRoughness ) {\n\treturn ( 2.0 / pow2( ggxRoughness + 0.0001 ) - 2.0 );\n}\nfloat BlinnExponentToGGXRoughness( const in float blinnExponent ) {\n\treturn sqrt( 2.0 / ( blinnExponent + 2.0 ) );\n}\n", -bumpmap_pars_fragment:"#ifdef USE_BUMPMAP\n\tuniform sampler2D bumpMap;\n\tuniform float bumpScale;\n\tvec2 dHdxy_fwd() {\n\t\tvec2 dSTdx = dFdx( vUv );\n\t\tvec2 dSTdy = dFdy( vUv );\n\t\tfloat Hll = bumpScale * texture2D( bumpMap, vUv ).x;\n\t\tfloat dBx = bumpScale * texture2D( bumpMap, vUv + dSTdx ).x - Hll;\n\t\tfloat dBy = bumpScale * texture2D( bumpMap, vUv + dSTdy ).x - Hll;\n\t\treturn vec2( dBx, dBy );\n\t}\n\tvec3 perturbNormalArb( vec3 surf_pos, vec3 surf_norm, vec2 dHdxy ) {\n\t\tvec3 vSigmaX = dFdx( surf_pos );\n\t\tvec3 vSigmaY = dFdy( surf_pos );\n\t\tvec3 vN = surf_norm;\n\t\tvec3 R1 = cross( vSigmaY, vN );\n\t\tvec3 R2 = cross( vN, vSigmaX );\n\t\tfloat fDet = dot( vSigmaX, R1 );\n\t\tvec3 vGrad = sign( fDet ) * ( dHdxy.x * R1 + dHdxy.y * R2 );\n\t\treturn normalize( abs( fDet ) * surf_norm - vGrad );\n\t}\n#endif\n", -clipping_planes_fragment:"#if NUM_CLIPPING_PLANES > 0\n\tfor ( int i = 0; i < UNION_CLIPPING_PLANES; ++ i ) {\n\t\tvec4 plane = clippingPlanes[ i ];\n\t\tif ( dot( vViewPosition, plane.xyz ) > plane.w ) discard;\n\t}\n\t\t\n\t#if UNION_CLIPPING_PLANES < NUM_CLIPPING_PLANES\n\t\tbool clipped = true;\n\t\tfor ( int i = UNION_CLIPPING_PLANES; i < NUM_CLIPPING_PLANES; ++ i ) {\n\t\t\tvec4 plane = clippingPlanes[ i ];\n\t\t\tclipped = ( dot( vViewPosition, plane.xyz ) > plane.w ) && clipped;\n\t\t}\n\t\tif ( clipped ) discard;\n\t\n\t#endif\n#endif\n", -clipping_planes_pars_fragment:"#if NUM_CLIPPING_PLANES > 0\n\t#if ! defined( PHYSICAL ) && ! defined( PHONG )\n\t\tvarying vec3 vViewPosition;\n\t#endif\n\tuniform vec4 clippingPlanes[ NUM_CLIPPING_PLANES ];\n#endif\n",clipping_planes_pars_vertex:"#if NUM_CLIPPING_PLANES > 0 && ! defined( PHYSICAL ) && ! defined( PHONG )\n\tvarying vec3 vViewPosition;\n#endif\n",clipping_planes_vertex:"#if NUM_CLIPPING_PLANES > 0 && ! defined( PHYSICAL ) && ! defined( PHONG )\n\tvViewPosition = - mvPosition.xyz;\n#endif\n", -color_fragment:"#ifdef USE_COLOR\n\tdiffuseColor.rgb *= vColor;\n#endif",color_pars_fragment:"#ifdef USE_COLOR\n\tvarying vec3 vColor;\n#endif\n",color_pars_vertex:"#ifdef USE_COLOR\n\tvarying vec3 vColor;\n#endif",color_vertex:"#ifdef USE_COLOR\n\tvColor.xyz = color.xyz;\n#endif",common:"#define PI 3.14159265359\n#define PI2 6.28318530718\n#define PI_HALF 1.5707963267949\n#define RECIPROCAL_PI 0.31830988618\n#define RECIPROCAL_PI2 0.15915494\n#define LOG2 1.442695\n#define EPSILON 1e-6\n#define saturate(a) clamp( a, 0.0, 1.0 )\n#define whiteCompliment(a) ( 1.0 - saturate( a ) )\nfloat pow2( const in float x ) { return x*x; }\nfloat pow3( const in float x ) { return x*x*x; }\nfloat pow4( const in float x ) { float x2 = x*x; return x2*x2; }\nfloat average( const in vec3 color ) { return dot( color, vec3( 0.3333 ) ); }\nhighp float rand( const in vec2 uv ) {\n\tconst highp float a = 12.9898, b = 78.233, c = 43758.5453;\n\thighp float dt = dot( uv.xy, vec2( a,b ) ), sn = mod( dt, PI );\n\treturn fract(sin(sn) * c);\n}\nstruct IncidentLight {\n\tvec3 color;\n\tvec3 direction;\n\tbool visible;\n};\nstruct ReflectedLight {\n\tvec3 directDiffuse;\n\tvec3 directSpecular;\n\tvec3 indirectDiffuse;\n\tvec3 indirectSpecular;\n};\nstruct GeometricContext {\n\tvec3 position;\n\tvec3 normal;\n\tvec3 viewDir;\n};\nvec3 transformDirection( in vec3 dir, in mat4 matrix ) {\n\treturn normalize( ( matrix * vec4( dir, 0.0 ) ).xyz );\n}\nvec3 inverseTransformDirection( in vec3 dir, in mat4 matrix ) {\n\treturn normalize( ( vec4( dir, 0.0 ) * matrix ).xyz );\n}\nvec3 projectOnPlane(in vec3 point, in vec3 pointOnPlane, in vec3 planeNormal ) {\n\tfloat distance = dot( planeNormal, point - pointOnPlane );\n\treturn - distance * planeNormal + point;\n}\nfloat sideOfPlane( in vec3 point, in vec3 pointOnPlane, in vec3 planeNormal ) {\n\treturn sign( dot( point - pointOnPlane, planeNormal ) );\n}\nvec3 linePlaneIntersect( in vec3 pointOnLine, in vec3 lineDirection, in vec3 pointOnPlane, in vec3 planeNormal ) {\n\treturn lineDirection * ( dot( planeNormal, pointOnPlane - pointOnLine ) / dot( planeNormal, lineDirection ) ) + pointOnLine;\n}\nmat3 transpose( const in mat3 v ) {\n\tmat3 tmp;\n\ttmp[0] = vec3(v[0].x, v[1].x, v[2].x);\n\ttmp[1] = vec3(v[0].y, v[1].y, v[2].y);\n\ttmp[2] = vec3(v[0].z, v[1].z, v[2].z);\n\treturn tmp;\n}\n", -cube_uv_reflection_fragment:"#ifdef ENVMAP_TYPE_CUBE_UV\n#define cubeUV_textureSize (1024.0)\nint getFaceFromDirection(vec3 direction) {\n\tvec3 absDirection = abs(direction);\n\tint face = -1;\n\tif( absDirection.x > absDirection.z ) {\n\t\tif(absDirection.x > absDirection.y )\n\t\t\tface = direction.x > 0.0 ? 0 : 3;\n\t\telse\n\t\t\tface = direction.y > 0.0 ? 1 : 4;\n\t}\n\telse {\n\t\tif(absDirection.z > absDirection.y )\n\t\t\tface = direction.z > 0.0 ? 2 : 5;\n\t\telse\n\t\t\tface = direction.y > 0.0 ? 1 : 4;\n\t}\n\treturn face;\n}\n#define cubeUV_maxLods1 (log2(cubeUV_textureSize*0.25) - 1.0)\n#define cubeUV_rangeClamp (exp2((6.0 - 1.0) * 2.0))\nvec2 MipLevelInfo( vec3 vec, float roughnessLevel, float roughness ) {\n\tfloat scale = exp2(cubeUV_maxLods1 - roughnessLevel);\n\tfloat dxRoughness = dFdx(roughness);\n\tfloat dyRoughness = dFdy(roughness);\n\tvec3 dx = dFdx( vec * scale * dxRoughness );\n\tvec3 dy = dFdy( vec * scale * dyRoughness );\n\tfloat d = max( dot( dx, dx ), dot( dy, dy ) );\n\td = clamp(d, 1.0, cubeUV_rangeClamp);\n\tfloat mipLevel = 0.5 * log2(d);\n\treturn vec2(floor(mipLevel), fract(mipLevel));\n}\n#define cubeUV_maxLods2 (log2(cubeUV_textureSize*0.25) - 2.0)\n#define cubeUV_rcpTextureSize (1.0 / cubeUV_textureSize)\nvec2 getCubeUV(vec3 direction, float roughnessLevel, float mipLevel) {\n\tmipLevel = roughnessLevel > cubeUV_maxLods2 - 3.0 ? 0.0 : mipLevel;\n\tfloat a = 16.0 * cubeUV_rcpTextureSize;\n\tvec2 exp2_packed = exp2( vec2( roughnessLevel, mipLevel ) );\n\tvec2 rcp_exp2_packed = vec2( 1.0 ) / exp2_packed;\n\tfloat powScale = exp2_packed.x * exp2_packed.y;\n\tfloat scale = rcp_exp2_packed.x * rcp_exp2_packed.y * 0.25;\n\tfloat mipOffset = 0.75*(1.0 - rcp_exp2_packed.y) * rcp_exp2_packed.x;\n\tbool bRes = mipLevel == 0.0;\n\tscale = bRes && (scale < a) ? a : scale;\n\tvec3 r;\n\tvec2 offset;\n\tint face = getFaceFromDirection(direction);\n\tfloat rcpPowScale = 1.0 / powScale;\n\tif( face == 0) {\n\t\tr = vec3(direction.x, -direction.z, direction.y);\n\t\toffset = vec2(0.0+mipOffset,0.75 * rcpPowScale);\n\t\toffset.y = bRes && (offset.y < 2.0*a) ? a : offset.y;\n\t}\n\telse if( face == 1) {\n\t\tr = vec3(direction.y, direction.x, direction.z);\n\t\toffset = vec2(scale+mipOffset, 0.75 * rcpPowScale);\n\t\toffset.y = bRes && (offset.y < 2.0*a) ? a : offset.y;\n\t}\n\telse if( face == 2) {\n\t\tr = vec3(direction.z, direction.x, direction.y);\n\t\toffset = vec2(2.0*scale+mipOffset, 0.75 * rcpPowScale);\n\t\toffset.y = bRes && (offset.y < 2.0*a) ? a : offset.y;\n\t}\n\telse if( face == 3) {\n\t\tr = vec3(direction.x, direction.z, direction.y);\n\t\toffset = vec2(0.0+mipOffset,0.5 * rcpPowScale);\n\t\toffset.y = bRes && (offset.y < 2.0*a) ? 0.0 : offset.y;\n\t}\n\telse if( face == 4) {\n\t\tr = vec3(direction.y, direction.x, -direction.z);\n\t\toffset = vec2(scale+mipOffset, 0.5 * rcpPowScale);\n\t\toffset.y = bRes && (offset.y < 2.0*a) ? 0.0 : offset.y;\n\t}\n\telse {\n\t\tr = vec3(direction.z, -direction.x, direction.y);\n\t\toffset = vec2(2.0*scale+mipOffset, 0.5 * rcpPowScale);\n\t\toffset.y = bRes && (offset.y < 2.0*a) ? 0.0 : offset.y;\n\t}\n\tr = normalize(r);\n\tfloat texelOffset = 0.5 * cubeUV_rcpTextureSize;\n\tvec2 s = ( r.yz / abs( r.x ) + vec2( 1.0 ) ) * 0.5;\n\tvec2 base = offset + vec2( texelOffset );\n\treturn base + s * ( scale - 2.0 * texelOffset );\n}\n#define cubeUV_maxLods3 (log2(cubeUV_textureSize*0.25) - 3.0)\nvec4 textureCubeUV(vec3 reflectedDirection, float roughness ) {\n\tfloat roughnessVal = roughness* cubeUV_maxLods3;\n\tfloat r1 = floor(roughnessVal);\n\tfloat r2 = r1 + 1.0;\n\tfloat t = fract(roughnessVal);\n\tvec2 mipInfo = MipLevelInfo(reflectedDirection, r1, roughness);\n\tfloat s = mipInfo.y;\n\tfloat level0 = mipInfo.x;\n\tfloat level1 = level0 + 1.0;\n\tlevel1 = level1 > 5.0 ? 5.0 : level1;\n\tlevel0 += min( floor( s + 0.5 ), 5.0 );\n\tvec2 uv_10 = getCubeUV(reflectedDirection, r1, level0);\n\tvec4 color10 = envMapTexelToLinear(texture2D(envMap, uv_10));\n\tvec2 uv_20 = getCubeUV(reflectedDirection, r2, level0);\n\tvec4 color20 = envMapTexelToLinear(texture2D(envMap, uv_20));\n\tvec4 result = mix(color10, color20, t);\n\treturn vec4(result.rgb, 1.0);\n}\n#endif\n", -defaultnormal_vertex:"#ifdef FLIP_SIDED\n\tobjectNormal = -objectNormal;\n#endif\nvec3 transformedNormal = normalMatrix * objectNormal;\n",displacementmap_pars_vertex:"#ifdef USE_DISPLACEMENTMAP\n\tuniform sampler2D displacementMap;\n\tuniform float displacementScale;\n\tuniform float displacementBias;\n#endif\n",displacementmap_vertex:"#ifdef USE_DISPLACEMENTMAP\n\ttransformed += normal * ( texture2D( displacementMap, uv ).x * displacementScale + displacementBias );\n#endif\n",emissivemap_fragment:"#ifdef USE_EMISSIVEMAP\n\tvec4 emissiveColor = texture2D( emissiveMap, vUv );\n\temissiveColor.rgb = emissiveMapTexelToLinear( emissiveColor ).rgb;\n\ttotalEmissiveRadiance *= emissiveColor.rgb;\n#endif\n", -emissivemap_pars_fragment:"#ifdef USE_EMISSIVEMAP\n\tuniform sampler2D emissiveMap;\n#endif\n",encodings_fragment:" gl_FragColor = linearToOutputTexel( gl_FragColor );\n",encodings_pars_fragment:"\nvec4 LinearToLinear( in vec4 value ) {\n\treturn value;\n}\nvec4 GammaToLinear( in vec4 value, in float gammaFactor ) {\n\treturn vec4( pow( value.xyz, vec3( gammaFactor ) ), value.w );\n}\nvec4 LinearToGamma( in vec4 value, in float gammaFactor ) {\n\treturn vec4( pow( value.xyz, vec3( 1.0 / gammaFactor ) ), value.w );\n}\nvec4 sRGBToLinear( in vec4 value ) {\n\treturn vec4( mix( pow( value.rgb * 0.9478672986 + vec3( 0.0521327014 ), vec3( 2.4 ) ), value.rgb * 0.0773993808, vec3( lessThanEqual( value.rgb, vec3( 0.04045 ) ) ) ), value.w );\n}\nvec4 LinearTosRGB( in vec4 value ) {\n\treturn vec4( mix( pow( value.rgb, vec3( 0.41666 ) ) * 1.055 - vec3( 0.055 ), value.rgb * 12.92, vec3( lessThanEqual( value.rgb, vec3( 0.0031308 ) ) ) ), value.w );\n}\nvec4 RGBEToLinear( in vec4 value ) {\n\treturn vec4( value.rgb * exp2( value.a * 255.0 - 128.0 ), 1.0 );\n}\nvec4 LinearToRGBE( in vec4 value ) {\n\tfloat maxComponent = max( max( value.r, value.g ), value.b );\n\tfloat fExp = clamp( ceil( log2( maxComponent ) ), -128.0, 127.0 );\n\treturn vec4( value.rgb / exp2( fExp ), ( fExp + 128.0 ) / 255.0 );\n}\nvec4 RGBMToLinear( in vec4 value, in float maxRange ) {\n\treturn vec4( value.xyz * value.w * maxRange, 1.0 );\n}\nvec4 LinearToRGBM( in vec4 value, in float maxRange ) {\n\tfloat maxRGB = max( value.x, max( value.g, value.b ) );\n\tfloat M = clamp( maxRGB / maxRange, 0.0, 1.0 );\n\tM = ceil( M * 255.0 ) / 255.0;\n\treturn vec4( value.rgb / ( M * maxRange ), M );\n}\nvec4 RGBDToLinear( in vec4 value, in float maxRange ) {\n\treturn vec4( value.rgb * ( ( maxRange / 255.0 ) / value.a ), 1.0 );\n}\nvec4 LinearToRGBD( in vec4 value, in float maxRange ) {\n\tfloat maxRGB = max( value.x, max( value.g, value.b ) );\n\tfloat D = max( maxRange / maxRGB, 1.0 );\n\tD = min( floor( D ) / 255.0, 1.0 );\n\treturn vec4( value.rgb * ( D * ( 255.0 / maxRange ) ), D );\n}\nconst mat3 cLogLuvM = mat3( 0.2209, 0.3390, 0.4184, 0.1138, 0.6780, 0.7319, 0.0102, 0.1130, 0.2969 );\nvec4 LinearToLogLuv( in vec4 value ) {\n\tvec3 Xp_Y_XYZp = value.rgb * cLogLuvM;\n\tXp_Y_XYZp = max(Xp_Y_XYZp, vec3(1e-6, 1e-6, 1e-6));\n\tvec4 vResult;\n\tvResult.xy = Xp_Y_XYZp.xy / Xp_Y_XYZp.z;\n\tfloat Le = 2.0 * log2(Xp_Y_XYZp.y) + 127.0;\n\tvResult.w = fract(Le);\n\tvResult.z = (Le - (floor(vResult.w*255.0))/255.0)/255.0;\n\treturn vResult;\n}\nconst mat3 cLogLuvInverseM = mat3( 6.0014, -2.7008, -1.7996, -1.3320, 3.1029, -5.7721, 0.3008, -1.0882, 5.6268 );\nvec4 LogLuvToLinear( in vec4 value ) {\n\tfloat Le = value.z * 255.0 + value.w;\n\tvec3 Xp_Y_XYZp;\n\tXp_Y_XYZp.y = exp2((Le - 127.0) / 2.0);\n\tXp_Y_XYZp.z = Xp_Y_XYZp.y / value.y;\n\tXp_Y_XYZp.x = value.x * Xp_Y_XYZp.z;\n\tvec3 vRGB = Xp_Y_XYZp.rgb * cLogLuvInverseM;\n\treturn vec4( max(vRGB, 0.0), 1.0 );\n}\n", -envmap_fragment:"#ifdef USE_ENVMAP\n\t#if defined( USE_BUMPMAP ) || defined( USE_NORMALMAP ) || defined( PHONG )\n\t\tvec3 cameraToVertex = normalize( vWorldPosition - cameraPosition );\n\t\tvec3 worldNormal = inverseTransformDirection( normal, viewMatrix );\n\t\t#ifdef ENVMAP_MODE_REFLECTION\n\t\t\tvec3 reflectVec = reflect( cameraToVertex, worldNormal );\n\t\t#else\n\t\t\tvec3 reflectVec = refract( cameraToVertex, worldNormal, refractionRatio );\n\t\t#endif\n\t#else\n\t\tvec3 reflectVec = vReflect;\n\t#endif\n\t#ifdef ENVMAP_TYPE_CUBE\n\t\tvec4 envColor = textureCube( envMap, flipNormal * vec3( flipEnvMap * reflectVec.x, reflectVec.yz ) );\n\t#elif defined( ENVMAP_TYPE_EQUIREC )\n\t\tvec2 sampleUV;\n\t\tsampleUV.y = saturate( flipNormal * reflectVec.y * 0.5 + 0.5 );\n\t\tsampleUV.x = atan( flipNormal * reflectVec.z, flipNormal * reflectVec.x ) * RECIPROCAL_PI2 + 0.5;\n\t\tvec4 envColor = texture2D( envMap, sampleUV );\n\t#elif defined( ENVMAP_TYPE_SPHERE )\n\t\tvec3 reflectView = flipNormal * normalize( ( viewMatrix * vec4( reflectVec, 0.0 ) ).xyz + vec3( 0.0, 0.0, 1.0 ) );\n\t\tvec4 envColor = texture2D( envMap, reflectView.xy * 0.5 + 0.5 );\n\t#else\n\t\tvec4 envColor = vec4( 0.0 );\n\t#endif\n\tenvColor = envMapTexelToLinear( envColor );\n\t#ifdef ENVMAP_BLENDING_MULTIPLY\n\t\toutgoingLight = mix( outgoingLight, outgoingLight * envColor.xyz, specularStrength * reflectivity );\n\t#elif defined( ENVMAP_BLENDING_MIX )\n\t\toutgoingLight = mix( outgoingLight, envColor.xyz, specularStrength * reflectivity );\n\t#elif defined( ENVMAP_BLENDING_ADD )\n\t\toutgoingLight += envColor.xyz * specularStrength * reflectivity;\n\t#endif\n#endif\n", -envmap_pars_fragment:"#if defined( USE_ENVMAP ) || defined( PHYSICAL )\n\tuniform float reflectivity;\n\tuniform float envMapIntensity;\n#endif\n#ifdef USE_ENVMAP\n\t#if ! defined( PHYSICAL ) && ( defined( USE_BUMPMAP ) || defined( USE_NORMALMAP ) || defined( PHONG ) )\n\t\tvarying vec3 vWorldPosition;\n\t#endif\n\t#ifdef ENVMAP_TYPE_CUBE\n\t\tuniform samplerCube envMap;\n\t#else\n\t\tuniform sampler2D envMap;\n\t#endif\n\tuniform float flipEnvMap;\n\t#if defined( USE_BUMPMAP ) || defined( USE_NORMALMAP ) || defined( PHONG ) || defined( PHYSICAL )\n\t\tuniform float refractionRatio;\n\t#else\n\t\tvarying vec3 vReflect;\n\t#endif\n#endif\n", -envmap_pars_vertex:"#ifdef USE_ENVMAP\n\t#if defined( USE_BUMPMAP ) || defined( USE_NORMALMAP ) || defined( PHONG )\n\t\tvarying vec3 vWorldPosition;\n\t#else\n\t\tvarying vec3 vReflect;\n\t\tuniform float refractionRatio;\n\t#endif\n#endif\n",envmap_vertex:"#ifdef USE_ENVMAP\n\t#if defined( USE_BUMPMAP ) || defined( USE_NORMALMAP ) || defined( PHONG )\n\t\tvWorldPosition = worldPosition.xyz;\n\t#else\n\t\tvec3 cameraToVertex = normalize( worldPosition.xyz - cameraPosition );\n\t\tvec3 worldNormal = inverseTransformDirection( transformedNormal, viewMatrix );\n\t\t#ifdef ENVMAP_MODE_REFLECTION\n\t\t\tvReflect = reflect( cameraToVertex, worldNormal );\n\t\t#else\n\t\t\tvReflect = refract( cameraToVertex, worldNormal, refractionRatio );\n\t\t#endif\n\t#endif\n#endif\n", -fog_vertex:"\n#ifdef USE_FOG\nfogDepth = -mvPosition.z;\n#endif",fog_pars_vertex:"#ifdef USE_FOG\n varying float fogDepth;\n#endif\n",fog_fragment:"#ifdef USE_FOG\n\t#ifdef FOG_EXP2\n\t\tfloat fogFactor = whiteCompliment( exp2( - fogDensity * fogDensity * fogDepth * fogDepth * LOG2 ) );\n\t#else\n\t\tfloat fogFactor = smoothstep( fogNear, fogFar, fogDepth );\n\t#endif\n\tgl_FragColor.rgb = mix( gl_FragColor.rgb, fogColor, fogFactor );\n#endif\n",fog_pars_fragment:"#ifdef USE_FOG\n\tuniform vec3 fogColor;\n\tvarying float fogDepth;\n\t#ifdef FOG_EXP2\n\t\tuniform float fogDensity;\n\t#else\n\t\tuniform float fogNear;\n\t\tuniform float fogFar;\n\t#endif\n#endif\n", -gradientmap_pars_fragment:"#ifdef TOON\n\tuniform sampler2D gradientMap;\n\tvec3 getGradientIrradiance( vec3 normal, vec3 lightDirection ) {\n\t\tfloat dotNL = dot( normal, lightDirection );\n\t\tvec2 coord = vec2( dotNL * 0.5 + 0.5, 0.0 );\n\t\t#ifdef USE_GRADIENTMAP\n\t\t\treturn texture2D( gradientMap, coord ).rgb;\n\t\t#else\n\t\t\treturn ( coord.x < 0.7 ) ? vec3( 0.7 ) : vec3( 1.0 );\n\t\t#endif\n\t}\n#endif\n",lightmap_fragment:"#ifdef USE_LIGHTMAP\n\treflectedLight.indirectDiffuse += PI * texture2D( lightMap, vUv2 ).xyz * lightMapIntensity;\n#endif\n", -lightmap_pars_fragment:"#ifdef USE_LIGHTMAP\n\tuniform sampler2D lightMap;\n\tuniform float lightMapIntensity;\n#endif",lights_lambert_vertex:"vec3 diffuse = vec3( 1.0 );\nGeometricContext geometry;\ngeometry.position = mvPosition.xyz;\ngeometry.normal = normalize( transformedNormal );\ngeometry.viewDir = normalize( -mvPosition.xyz );\nGeometricContext backGeometry;\nbackGeometry.position = geometry.position;\nbackGeometry.normal = -geometry.normal;\nbackGeometry.viewDir = geometry.viewDir;\nvLightFront = vec3( 0.0 );\n#ifdef DOUBLE_SIDED\n\tvLightBack = vec3( 0.0 );\n#endif\nIncidentLight directLight;\nfloat dotNL;\nvec3 directLightColor_Diffuse;\n#if NUM_POINT_LIGHTS > 0\n\tfor ( int i = 0; i < NUM_POINT_LIGHTS; i ++ ) {\n\t\tgetPointDirectLightIrradiance( pointLights[ i ], geometry, directLight );\n\t\tdotNL = dot( geometry.normal, directLight.direction );\n\t\tdirectLightColor_Diffuse = PI * directLight.color;\n\t\tvLightFront += saturate( dotNL ) * directLightColor_Diffuse;\n\t\t#ifdef DOUBLE_SIDED\n\t\t\tvLightBack += saturate( -dotNL ) * directLightColor_Diffuse;\n\t\t#endif\n\t}\n#endif\n#if NUM_SPOT_LIGHTS > 0\n\tfor ( int i = 0; i < NUM_SPOT_LIGHTS; i ++ ) {\n\t\tgetSpotDirectLightIrradiance( spotLights[ i ], geometry, directLight );\n\t\tdotNL = dot( geometry.normal, directLight.direction );\n\t\tdirectLightColor_Diffuse = PI * directLight.color;\n\t\tvLightFront += saturate( dotNL ) * directLightColor_Diffuse;\n\t\t#ifdef DOUBLE_SIDED\n\t\t\tvLightBack += saturate( -dotNL ) * directLightColor_Diffuse;\n\t\t#endif\n\t}\n#endif\n#if NUM_DIR_LIGHTS > 0\n\tfor ( int i = 0; i < NUM_DIR_LIGHTS; i ++ ) {\n\t\tgetDirectionalDirectLightIrradiance( directionalLights[ i ], geometry, directLight );\n\t\tdotNL = dot( geometry.normal, directLight.direction );\n\t\tdirectLightColor_Diffuse = PI * directLight.color;\n\t\tvLightFront += saturate( dotNL ) * directLightColor_Diffuse;\n\t\t#ifdef DOUBLE_SIDED\n\t\t\tvLightBack += saturate( -dotNL ) * directLightColor_Diffuse;\n\t\t#endif\n\t}\n#endif\n#if NUM_HEMI_LIGHTS > 0\n\tfor ( int i = 0; i < NUM_HEMI_LIGHTS; i ++ ) {\n\t\tvLightFront += getHemisphereLightIrradiance( hemisphereLights[ i ], geometry );\n\t\t#ifdef DOUBLE_SIDED\n\t\t\tvLightBack += getHemisphereLightIrradiance( hemisphereLights[ i ], backGeometry );\n\t\t#endif\n\t}\n#endif\n", -lights_pars:"uniform vec3 ambientLightColor;\nvec3 getAmbientLightIrradiance( const in vec3 ambientLightColor ) {\n\tvec3 irradiance = ambientLightColor;\n\t#ifndef PHYSICALLY_CORRECT_LIGHTS\n\t\tirradiance *= PI;\n\t#endif\n\treturn irradiance;\n}\n#if NUM_DIR_LIGHTS > 0\n\tstruct DirectionalLight {\n\t\tvec3 direction;\n\t\tvec3 color;\n\t\tint shadow;\n\t\tfloat shadowBias;\n\t\tfloat shadowRadius;\n\t\tvec2 shadowMapSize;\n\t};\n\tuniform DirectionalLight directionalLights[ NUM_DIR_LIGHTS ];\n\tvoid getDirectionalDirectLightIrradiance( const in DirectionalLight directionalLight, const in GeometricContext geometry, out IncidentLight directLight ) {\n\t\tdirectLight.color = directionalLight.color;\n\t\tdirectLight.direction = directionalLight.direction;\n\t\tdirectLight.visible = true;\n\t}\n#endif\n#if NUM_POINT_LIGHTS > 0\n\tstruct PointLight {\n\t\tvec3 position;\n\t\tvec3 color;\n\t\tfloat distance;\n\t\tfloat decay;\n\t\tint shadow;\n\t\tfloat shadowBias;\n\t\tfloat shadowRadius;\n\t\tvec2 shadowMapSize;\n\t};\n\tuniform PointLight pointLights[ NUM_POINT_LIGHTS ];\n\tvoid getPointDirectLightIrradiance( const in PointLight pointLight, const in GeometricContext geometry, out IncidentLight directLight ) {\n\t\tvec3 lVector = pointLight.position - geometry.position;\n\t\tdirectLight.direction = normalize( lVector );\n\t\tfloat lightDistance = length( lVector );\n\t\tdirectLight.color = pointLight.color;\n\t\tdirectLight.color *= punctualLightIntensityToIrradianceFactor( lightDistance, pointLight.distance, pointLight.decay );\n\t\tdirectLight.visible = ( directLight.color != vec3( 0.0 ) );\n\t}\n#endif\n#if NUM_SPOT_LIGHTS > 0\n\tstruct SpotLight {\n\t\tvec3 position;\n\t\tvec3 direction;\n\t\tvec3 color;\n\t\tfloat distance;\n\t\tfloat decay;\n\t\tfloat coneCos;\n\t\tfloat penumbraCos;\n\t\tint shadow;\n\t\tfloat shadowBias;\n\t\tfloat shadowRadius;\n\t\tvec2 shadowMapSize;\n\t};\n\tuniform SpotLight spotLights[ NUM_SPOT_LIGHTS ];\n\tvoid getSpotDirectLightIrradiance( const in SpotLight spotLight, const in GeometricContext geometry, out IncidentLight directLight ) {\n\t\tvec3 lVector = spotLight.position - geometry.position;\n\t\tdirectLight.direction = normalize( lVector );\n\t\tfloat lightDistance = length( lVector );\n\t\tfloat angleCos = dot( directLight.direction, spotLight.direction );\n\t\tif ( angleCos > spotLight.coneCos ) {\n\t\t\tfloat spotEffect = smoothstep( spotLight.coneCos, spotLight.penumbraCos, angleCos );\n\t\t\tdirectLight.color = spotLight.color;\n\t\t\tdirectLight.color *= spotEffect * punctualLightIntensityToIrradianceFactor( lightDistance, spotLight.distance, spotLight.decay );\n\t\t\tdirectLight.visible = true;\n\t\t} else {\n\t\t\tdirectLight.color = vec3( 0.0 );\n\t\t\tdirectLight.visible = false;\n\t\t}\n\t}\n#endif\n#if NUM_RECT_AREA_LIGHTS > 0\n\tstruct RectAreaLight {\n\t\tvec3 color;\n\t\tvec3 position;\n\t\tvec3 halfWidth;\n\t\tvec3 halfHeight;\n\t};\n\tuniform sampler2D ltcMat;\tuniform sampler2D ltcMag;\n\tuniform RectAreaLight rectAreaLights[ NUM_RECT_AREA_LIGHTS ];\n#endif\n#if NUM_HEMI_LIGHTS > 0\n\tstruct HemisphereLight {\n\t\tvec3 direction;\n\t\tvec3 skyColor;\n\t\tvec3 groundColor;\n\t};\n\tuniform HemisphereLight hemisphereLights[ NUM_HEMI_LIGHTS ];\n\tvec3 getHemisphereLightIrradiance( const in HemisphereLight hemiLight, const in GeometricContext geometry ) {\n\t\tfloat dotNL = dot( geometry.normal, hemiLight.direction );\n\t\tfloat hemiDiffuseWeight = 0.5 * dotNL + 0.5;\n\t\tvec3 irradiance = mix( hemiLight.groundColor, hemiLight.skyColor, hemiDiffuseWeight );\n\t\t#ifndef PHYSICALLY_CORRECT_LIGHTS\n\t\t\tirradiance *= PI;\n\t\t#endif\n\t\treturn irradiance;\n\t}\n#endif\n#if defined( USE_ENVMAP ) && defined( PHYSICAL )\n\tvec3 getLightProbeIndirectIrradiance( const in GeometricContext geometry, const in int maxMIPLevel ) {\n\t\tvec3 worldNormal = inverseTransformDirection( geometry.normal, viewMatrix );\n\t\t#ifdef ENVMAP_TYPE_CUBE\n\t\t\tvec3 queryVec = vec3( flipEnvMap * worldNormal.x, worldNormal.yz );\n\t\t\t#ifdef TEXTURE_LOD_EXT\n\t\t\t\tvec4 envMapColor = textureCubeLodEXT( envMap, queryVec, float( maxMIPLevel ) );\n\t\t\t#else\n\t\t\t\tvec4 envMapColor = textureCube( envMap, queryVec, float( maxMIPLevel ) );\n\t\t\t#endif\n\t\t\tenvMapColor.rgb = envMapTexelToLinear( envMapColor ).rgb;\n\t\t#elif defined( ENVMAP_TYPE_CUBE_UV )\n\t\t\tvec3 queryVec = vec3( flipEnvMap * worldNormal.x, worldNormal.yz );\n\t\t\tvec4 envMapColor = textureCubeUV( queryVec, 1.0 );\n\t\t#else\n\t\t\tvec4 envMapColor = vec4( 0.0 );\n\t\t#endif\n\t\treturn PI * envMapColor.rgb * envMapIntensity;\n\t}\n\tfloat getSpecularMIPLevel( const in float blinnShininessExponent, const in int maxMIPLevel ) {\n\t\tfloat maxMIPLevelScalar = float( maxMIPLevel );\n\t\tfloat desiredMIPLevel = maxMIPLevelScalar - 0.79248 - 0.5 * log2( pow2( blinnShininessExponent ) + 1.0 );\n\t\treturn clamp( desiredMIPLevel, 0.0, maxMIPLevelScalar );\n\t}\n\tvec3 getLightProbeIndirectRadiance( const in GeometricContext geometry, const in float blinnShininessExponent, const in int maxMIPLevel ) {\n\t\t#ifdef ENVMAP_MODE_REFLECTION\n\t\t\tvec3 reflectVec = reflect( -geometry.viewDir, geometry.normal );\n\t\t#else\n\t\t\tvec3 reflectVec = refract( -geometry.viewDir, geometry.normal, refractionRatio );\n\t\t#endif\n\t\treflectVec = inverseTransformDirection( reflectVec, viewMatrix );\n\t\tfloat specularMIPLevel = getSpecularMIPLevel( blinnShininessExponent, maxMIPLevel );\n\t\t#ifdef ENVMAP_TYPE_CUBE\n\t\t\tvec3 queryReflectVec = vec3( flipEnvMap * reflectVec.x, reflectVec.yz );\n\t\t\t#ifdef TEXTURE_LOD_EXT\n\t\t\t\tvec4 envMapColor = textureCubeLodEXT( envMap, queryReflectVec, specularMIPLevel );\n\t\t\t#else\n\t\t\t\tvec4 envMapColor = textureCube( envMap, queryReflectVec, specularMIPLevel );\n\t\t\t#endif\n\t\t\tenvMapColor.rgb = envMapTexelToLinear( envMapColor ).rgb;\n\t\t#elif defined( ENVMAP_TYPE_CUBE_UV )\n\t\t\tvec3 queryReflectVec = vec3( flipEnvMap * reflectVec.x, reflectVec.yz );\n\t\t\tvec4 envMapColor = textureCubeUV(queryReflectVec, BlinnExponentToGGXRoughness(blinnShininessExponent));\n\t\t#elif defined( ENVMAP_TYPE_EQUIREC )\n\t\t\tvec2 sampleUV;\n\t\t\tsampleUV.y = saturate( reflectVec.y * 0.5 + 0.5 );\n\t\t\tsampleUV.x = atan( reflectVec.z, reflectVec.x ) * RECIPROCAL_PI2 + 0.5;\n\t\t\t#ifdef TEXTURE_LOD_EXT\n\t\t\t\tvec4 envMapColor = texture2DLodEXT( envMap, sampleUV, specularMIPLevel );\n\t\t\t#else\n\t\t\t\tvec4 envMapColor = texture2D( envMap, sampleUV, specularMIPLevel );\n\t\t\t#endif\n\t\t\tenvMapColor.rgb = envMapTexelToLinear( envMapColor ).rgb;\n\t\t#elif defined( ENVMAP_TYPE_SPHERE )\n\t\t\tvec3 reflectView = normalize( ( viewMatrix * vec4( reflectVec, 0.0 ) ).xyz + vec3( 0.0,0.0,1.0 ) );\n\t\t\t#ifdef TEXTURE_LOD_EXT\n\t\t\t\tvec4 envMapColor = texture2DLodEXT( envMap, reflectView.xy * 0.5 + 0.5, specularMIPLevel );\n\t\t\t#else\n\t\t\t\tvec4 envMapColor = texture2D( envMap, reflectView.xy * 0.5 + 0.5, specularMIPLevel );\n\t\t\t#endif\n\t\t\tenvMapColor.rgb = envMapTexelToLinear( envMapColor ).rgb;\n\t\t#endif\n\t\treturn envMapColor.rgb * envMapIntensity;\n\t}\n#endif\n", -lights_phong_fragment:"BlinnPhongMaterial material;\nmaterial.diffuseColor = diffuseColor.rgb;\nmaterial.specularColor = specular;\nmaterial.specularShininess = shininess;\nmaterial.specularStrength = specularStrength;\n",lights_phong_pars_fragment:"varying vec3 vViewPosition;\n#ifndef FLAT_SHADED\n\tvarying vec3 vNormal;\n#endif\nstruct BlinnPhongMaterial {\n\tvec3\tdiffuseColor;\n\tvec3\tspecularColor;\n\tfloat\tspecularShininess;\n\tfloat\tspecularStrength;\n};\n#if NUM_RECT_AREA_LIGHTS > 0\n\tvoid RE_Direct_RectArea_BlinnPhong( const in RectAreaLight rectAreaLight, const in GeometricContext geometry, const in BlinnPhongMaterial material, inout ReflectedLight reflectedLight ) {\n\t\tvec3 matDiffColor = material.diffuseColor;\n\t\tvec3 matSpecColor = material.specularColor;\n\t\tvec3 lightColor = rectAreaLight.color;\n\t\tfloat roughness = BlinnExponentToGGXRoughness( material.specularShininess );\n\t\tvec3 spec = Rect_Area_Light_Specular_Reflectance(\n\t\t\t\tgeometry,\n\t\t\t\trectAreaLight.position, rectAreaLight.halfWidth, rectAreaLight.halfHeight,\n\t\t\t\troughness,\n\t\t\t\tltcMat, ltcMag );\n\t\tvec3 diff = Rect_Area_Light_Diffuse_Reflectance(\n\t\t\t\tgeometry,\n\t\t\t\trectAreaLight.position, rectAreaLight.halfWidth, rectAreaLight.halfHeight );\n\t\treflectedLight.directSpecular += lightColor * matSpecColor * spec / PI2;\n\t\treflectedLight.directDiffuse += lightColor * matDiffColor * diff / PI2;\n\t}\n#endif\nvoid RE_Direct_BlinnPhong( const in IncidentLight directLight, const in GeometricContext geometry, const in BlinnPhongMaterial material, inout ReflectedLight reflectedLight ) {\n\t#ifdef TOON\n\t\tvec3 irradiance = getGradientIrradiance( geometry.normal, directLight.direction ) * directLight.color;\n\t#else\n\t\tfloat dotNL = saturate( dot( geometry.normal, directLight.direction ) );\n\t\tvec3 irradiance = dotNL * directLight.color;\n\t#endif\n\t#ifndef PHYSICALLY_CORRECT_LIGHTS\n\t\tirradiance *= PI;\n\t#endif\n\treflectedLight.directDiffuse += irradiance * BRDF_Diffuse_Lambert( material.diffuseColor );\n\treflectedLight.directSpecular += irradiance * BRDF_Specular_BlinnPhong( directLight, geometry, material.specularColor, material.specularShininess ) * material.specularStrength;\n}\nvoid RE_IndirectDiffuse_BlinnPhong( const in vec3 irradiance, const in GeometricContext geometry, const in BlinnPhongMaterial material, inout ReflectedLight reflectedLight ) {\n\treflectedLight.indirectDiffuse += irradiance * BRDF_Diffuse_Lambert( material.diffuseColor );\n}\n#define RE_Direct\t\t\t\tRE_Direct_BlinnPhong\n#define RE_Direct_RectArea\t\tRE_Direct_RectArea_BlinnPhong\n#define RE_IndirectDiffuse\t\tRE_IndirectDiffuse_BlinnPhong\n#define Material_LightProbeLOD( material )\t(0)\n", -lights_physical_fragment:"PhysicalMaterial material;\nmaterial.diffuseColor = diffuseColor.rgb * ( 1.0 - metalnessFactor );\nmaterial.specularRoughness = clamp( roughnessFactor, 0.04, 1.0 );\n#ifdef STANDARD\n\tmaterial.specularColor = mix( vec3( DEFAULT_SPECULAR_COEFFICIENT ), diffuseColor.rgb, metalnessFactor );\n#else\n\tmaterial.specularColor = mix( vec3( MAXIMUM_SPECULAR_COEFFICIENT * pow2( reflectivity ) ), diffuseColor.rgb, metalnessFactor );\n\tmaterial.clearCoat = saturate( clearCoat );\tmaterial.clearCoatRoughness = clamp( clearCoatRoughness, 0.04, 1.0 );\n#endif\n", -lights_physical_pars_fragment:"struct PhysicalMaterial {\n\tvec3\tdiffuseColor;\n\tfloat\tspecularRoughness;\n\tvec3\tspecularColor;\n\t#ifndef STANDARD\n\t\tfloat clearCoat;\n\t\tfloat clearCoatRoughness;\n\t#endif\n};\n#define MAXIMUM_SPECULAR_COEFFICIENT 0.16\n#define DEFAULT_SPECULAR_COEFFICIENT 0.04\nfloat clearCoatDHRApprox( const in float roughness, const in float dotNL ) {\n\treturn DEFAULT_SPECULAR_COEFFICIENT + ( 1.0 - DEFAULT_SPECULAR_COEFFICIENT ) * ( pow( 1.0 - dotNL, 5.0 ) * pow( 1.0 - roughness, 2.0 ) );\n}\n#if NUM_RECT_AREA_LIGHTS > 0\n\tvoid RE_Direct_RectArea_Physical( const in RectAreaLight rectAreaLight, const in GeometricContext geometry, const in PhysicalMaterial material, inout ReflectedLight reflectedLight ) {\n\t\tvec3 matDiffColor = material.diffuseColor;\n\t\tvec3 matSpecColor = material.specularColor;\n\t\tvec3 lightColor = rectAreaLight.color;\n\t\tfloat roughness = material.specularRoughness;\n\t\tvec3 spec = Rect_Area_Light_Specular_Reflectance(\n\t\t\t\tgeometry,\n\t\t\t\trectAreaLight.position, rectAreaLight.halfWidth, rectAreaLight.halfHeight,\n\t\t\t\troughness,\n\t\t\t\tltcMat, ltcMag );\n\t\tvec3 diff = Rect_Area_Light_Diffuse_Reflectance(\n\t\t\t\tgeometry,\n\t\t\t\trectAreaLight.position, rectAreaLight.halfWidth, rectAreaLight.halfHeight );\n\t\treflectedLight.directSpecular += lightColor * matSpecColor * spec;\n\t\treflectedLight.directDiffuse += lightColor * matDiffColor * diff;\n\t}\n#endif\nvoid RE_Direct_Physical( const in IncidentLight directLight, const in GeometricContext geometry, const in PhysicalMaterial material, inout ReflectedLight reflectedLight ) {\n\tfloat dotNL = saturate( dot( geometry.normal, directLight.direction ) );\n\tvec3 irradiance = dotNL * directLight.color;\n\t#ifndef PHYSICALLY_CORRECT_LIGHTS\n\t\tirradiance *= PI;\n\t#endif\n\t#ifndef STANDARD\n\t\tfloat clearCoatDHR = material.clearCoat * clearCoatDHRApprox( material.clearCoatRoughness, dotNL );\n\t#else\n\t\tfloat clearCoatDHR = 0.0;\n\t#endif\n\treflectedLight.directSpecular += ( 1.0 - clearCoatDHR ) * irradiance * BRDF_Specular_GGX( directLight, geometry, material.specularColor, material.specularRoughness );\n\treflectedLight.directDiffuse += ( 1.0 - clearCoatDHR ) * irradiance * BRDF_Diffuse_Lambert( material.diffuseColor );\n\t#ifndef STANDARD\n\t\treflectedLight.directSpecular += irradiance * material.clearCoat * BRDF_Specular_GGX( directLight, geometry, vec3( DEFAULT_SPECULAR_COEFFICIENT ), material.clearCoatRoughness );\n\t#endif\n}\nvoid RE_IndirectDiffuse_Physical( const in vec3 irradiance, const in GeometricContext geometry, const in PhysicalMaterial material, inout ReflectedLight reflectedLight ) {\n\treflectedLight.indirectDiffuse += irradiance * BRDF_Diffuse_Lambert( material.diffuseColor );\n}\nvoid RE_IndirectSpecular_Physical( const in vec3 radiance, const in vec3 clearCoatRadiance, const in GeometricContext geometry, const in PhysicalMaterial material, inout ReflectedLight reflectedLight ) {\n\t#ifndef STANDARD\n\t\tfloat dotNV = saturate( dot( geometry.normal, geometry.viewDir ) );\n\t\tfloat dotNL = dotNV;\n\t\tfloat clearCoatDHR = material.clearCoat * clearCoatDHRApprox( material.clearCoatRoughness, dotNL );\n\t#else\n\t\tfloat clearCoatDHR = 0.0;\n\t#endif\n\treflectedLight.indirectSpecular += ( 1.0 - clearCoatDHR ) * radiance * BRDF_Specular_GGX_Environment( geometry, material.specularColor, material.specularRoughness );\n\t#ifndef STANDARD\n\t\treflectedLight.indirectSpecular += clearCoatRadiance * material.clearCoat * BRDF_Specular_GGX_Environment( geometry, vec3( DEFAULT_SPECULAR_COEFFICIENT ), material.clearCoatRoughness );\n\t#endif\n}\n#define RE_Direct\t\t\t\tRE_Direct_Physical\n#define RE_Direct_RectArea\t\tRE_Direct_RectArea_Physical\n#define RE_IndirectDiffuse\t\tRE_IndirectDiffuse_Physical\n#define RE_IndirectSpecular\t\tRE_IndirectSpecular_Physical\n#define Material_BlinnShininessExponent( material ) GGXRoughnessToBlinnExponent( material.specularRoughness )\n#define Material_ClearCoat_BlinnShininessExponent( material ) GGXRoughnessToBlinnExponent( material.clearCoatRoughness )\nfloat computeSpecularOcclusion( const in float dotNV, const in float ambientOcclusion, const in float roughness ) {\n\treturn saturate( pow( dotNV + ambientOcclusion, exp2( - 16.0 * roughness - 1.0 ) ) - 1.0 + ambientOcclusion );\n}\n", -lights_template:"\nGeometricContext geometry;\ngeometry.position = - vViewPosition;\ngeometry.normal = normal;\ngeometry.viewDir = normalize( vViewPosition );\nIncidentLight directLight;\n#if ( NUM_POINT_LIGHTS > 0 ) && defined( RE_Direct )\n\tPointLight pointLight;\n\tfor ( int i = 0; i < NUM_POINT_LIGHTS; i ++ ) {\n\t\tpointLight = pointLights[ i ];\n\t\tgetPointDirectLightIrradiance( pointLight, geometry, directLight );\n\t\t#ifdef USE_SHADOWMAP\n\t\tdirectLight.color *= all( bvec2( pointLight.shadow, directLight.visible ) ) ? getPointShadow( pointShadowMap[ i ], pointLight.shadowMapSize, pointLight.shadowBias, pointLight.shadowRadius, vPointShadowCoord[ i ] ) : 1.0;\n\t\t#endif\n\t\tRE_Direct( directLight, geometry, material, reflectedLight );\n\t}\n#endif\n#if ( NUM_SPOT_LIGHTS > 0 ) && defined( RE_Direct )\n\tSpotLight spotLight;\n\tfor ( int i = 0; i < NUM_SPOT_LIGHTS; i ++ ) {\n\t\tspotLight = spotLights[ i ];\n\t\tgetSpotDirectLightIrradiance( spotLight, geometry, directLight );\n\t\t#ifdef USE_SHADOWMAP\n\t\tdirectLight.color *= all( bvec2( spotLight.shadow, directLight.visible ) ) ? getShadow( spotShadowMap[ i ], spotLight.shadowMapSize, spotLight.shadowBias, spotLight.shadowRadius, vSpotShadowCoord[ i ] ) : 1.0;\n\t\t#endif\n\t\tRE_Direct( directLight, geometry, material, reflectedLight );\n\t}\n#endif\n#if ( NUM_DIR_LIGHTS > 0 ) && defined( RE_Direct )\n\tDirectionalLight directionalLight;\n\tfor ( int i = 0; i < NUM_DIR_LIGHTS; i ++ ) {\n\t\tdirectionalLight = directionalLights[ i ];\n\t\tgetDirectionalDirectLightIrradiance( directionalLight, geometry, directLight );\n\t\t#ifdef USE_SHADOWMAP\n\t\tdirectLight.color *= all( bvec2( directionalLight.shadow, directLight.visible ) ) ? getShadow( directionalShadowMap[ i ], directionalLight.shadowMapSize, directionalLight.shadowBias, directionalLight.shadowRadius, vDirectionalShadowCoord[ i ] ) : 1.0;\n\t\t#endif\n\t\tRE_Direct( directLight, geometry, material, reflectedLight );\n\t}\n#endif\n#if ( NUM_RECT_AREA_LIGHTS > 0 ) && defined( RE_Direct_RectArea )\n\tRectAreaLight rectAreaLight;\n\tfor ( int i = 0; i < NUM_RECT_AREA_LIGHTS; i ++ ) {\n\t\trectAreaLight = rectAreaLights[ i ];\n\t\tRE_Direct_RectArea( rectAreaLight, geometry, material, reflectedLight );\n\t}\n#endif\n#if defined( RE_IndirectDiffuse )\n\tvec3 irradiance = getAmbientLightIrradiance( ambientLightColor );\n\t#ifdef USE_LIGHTMAP\n\t\tvec3 lightMapIrradiance = texture2D( lightMap, vUv2 ).xyz * lightMapIntensity;\n\t\t#ifndef PHYSICALLY_CORRECT_LIGHTS\n\t\t\tlightMapIrradiance *= PI;\n\t\t#endif\n\t\tirradiance += lightMapIrradiance;\n\t#endif\n\t#if ( NUM_HEMI_LIGHTS > 0 )\n\t\tfor ( int i = 0; i < NUM_HEMI_LIGHTS; i ++ ) {\n\t\t\tirradiance += getHemisphereLightIrradiance( hemisphereLights[ i ], geometry );\n\t\t}\n\t#endif\n\t#if defined( USE_ENVMAP ) && defined( PHYSICAL ) && defined( ENVMAP_TYPE_CUBE_UV )\n\t\tirradiance += getLightProbeIndirectIrradiance( geometry, 8 );\n\t#endif\n\tRE_IndirectDiffuse( irradiance, geometry, material, reflectedLight );\n#endif\n#if defined( USE_ENVMAP ) && defined( RE_IndirectSpecular )\n\tvec3 radiance = getLightProbeIndirectRadiance( geometry, Material_BlinnShininessExponent( material ), 8 );\n\t#ifndef STANDARD\n\t\tvec3 clearCoatRadiance = getLightProbeIndirectRadiance( geometry, Material_ClearCoat_BlinnShininessExponent( material ), 8 );\n\t#else\n\t\tvec3 clearCoatRadiance = vec3( 0.0 );\n\t#endif\n\tRE_IndirectSpecular( radiance, clearCoatRadiance, geometry, material, reflectedLight );\n#endif\n", -logdepthbuf_fragment:"#if defined(USE_LOGDEPTHBUF) && defined(USE_LOGDEPTHBUF_EXT)\n\tgl_FragDepthEXT = log2(vFragDepth) * logDepthBufFC * 0.5;\n#endif",logdepthbuf_pars_fragment:"#ifdef USE_LOGDEPTHBUF\n\tuniform float logDepthBufFC;\n\t#ifdef USE_LOGDEPTHBUF_EXT\n\t\tvarying float vFragDepth;\n\t#endif\n#endif\n",logdepthbuf_pars_vertex:"#ifdef USE_LOGDEPTHBUF\n\t#ifdef USE_LOGDEPTHBUF_EXT\n\t\tvarying float vFragDepth;\n\t#endif\n\tuniform float logDepthBufFC;\n#endif",logdepthbuf_vertex:"#ifdef USE_LOGDEPTHBUF\n\tgl_Position.z = log2(max( EPSILON, gl_Position.w + 1.0 )) * logDepthBufFC;\n\t#ifdef USE_LOGDEPTHBUF_EXT\n\t\tvFragDepth = 1.0 + gl_Position.w;\n\t#else\n\t\tgl_Position.z = (gl_Position.z - 1.0) * gl_Position.w;\n\t#endif\n#endif\n", -map_fragment:"#ifdef USE_MAP\n\tvec4 texelColor = texture2D( map, vUv );\n\ttexelColor = mapTexelToLinear( texelColor );\n\tdiffuseColor *= texelColor;\n#endif\n",map_pars_fragment:"#ifdef USE_MAP\n\tuniform sampler2D map;\n#endif\n",map_particle_fragment:"#ifdef USE_MAP\n\tvec4 mapTexel = texture2D( map, vec2( gl_PointCoord.x, 1.0 - gl_PointCoord.y ) * offsetRepeat.zw + offsetRepeat.xy );\n\tdiffuseColor *= mapTexelToLinear( mapTexel );\n#endif\n",map_particle_pars_fragment:"#ifdef USE_MAP\n\tuniform vec4 offsetRepeat;\n\tuniform sampler2D map;\n#endif\n", -metalnessmap_fragment:"float metalnessFactor = metalness;\n#ifdef USE_METALNESSMAP\n\tvec4 texelMetalness = texture2D( metalnessMap, vUv );\n\tmetalnessFactor *= texelMetalness.r;\n#endif\n",metalnessmap_pars_fragment:"#ifdef USE_METALNESSMAP\n\tuniform sampler2D metalnessMap;\n#endif",morphnormal_vertex:"#ifdef USE_MORPHNORMALS\n\tobjectNormal += ( morphNormal0 - normal ) * morphTargetInfluences[ 0 ];\n\tobjectNormal += ( morphNormal1 - normal ) * morphTargetInfluences[ 1 ];\n\tobjectNormal += ( morphNormal2 - normal ) * morphTargetInfluences[ 2 ];\n\tobjectNormal += ( morphNormal3 - normal ) * morphTargetInfluences[ 3 ];\n#endif\n", -morphtarget_pars_vertex:"#ifdef USE_MORPHTARGETS\n\t#ifndef USE_MORPHNORMALS\n\tuniform float morphTargetInfluences[ 8 ];\n\t#else\n\tuniform float morphTargetInfluences[ 4 ];\n\t#endif\n#endif",morphtarget_vertex:"#ifdef USE_MORPHTARGETS\n\ttransformed += ( morphTarget0 - position ) * morphTargetInfluences[ 0 ];\n\ttransformed += ( morphTarget1 - position ) * morphTargetInfluences[ 1 ];\n\ttransformed += ( morphTarget2 - position ) * morphTargetInfluences[ 2 ];\n\ttransformed += ( morphTarget3 - position ) * morphTargetInfluences[ 3 ];\n\t#ifndef USE_MORPHNORMALS\n\ttransformed += ( morphTarget4 - position ) * morphTargetInfluences[ 4 ];\n\ttransformed += ( morphTarget5 - position ) * morphTargetInfluences[ 5 ];\n\ttransformed += ( morphTarget6 - position ) * morphTargetInfluences[ 6 ];\n\ttransformed += ( morphTarget7 - position ) * morphTargetInfluences[ 7 ];\n\t#endif\n#endif\n", -normal_flip:"#ifdef DOUBLE_SIDED\n\tfloat flipNormal = ( float( gl_FrontFacing ) * 2.0 - 1.0 );\n#else\n\tfloat flipNormal = 1.0;\n#endif\n",normal_fragment:"#ifdef FLAT_SHADED\n\tvec3 fdx = vec3( dFdx( vViewPosition.x ), dFdx( vViewPosition.y ), dFdx( vViewPosition.z ) );\n\tvec3 fdy = vec3( dFdy( vViewPosition.x ), dFdy( vViewPosition.y ), dFdy( vViewPosition.z ) );\n\tvec3 normal = normalize( cross( fdx, fdy ) );\n#else\n\tvec3 normal = normalize( vNormal ) * flipNormal;\n#endif\n#ifdef USE_NORMALMAP\n\tnormal = perturbNormal2Arb( -vViewPosition, normal );\n#elif defined( USE_BUMPMAP )\n\tnormal = perturbNormalArb( -vViewPosition, normal, dHdxy_fwd() );\n#endif\n", -normalmap_pars_fragment:"#ifdef USE_NORMALMAP\n\tuniform sampler2D normalMap;\n\tuniform vec2 normalScale;\n\tvec3 perturbNormal2Arb( vec3 eye_pos, vec3 surf_norm ) {\n\t\tvec3 q0 = dFdx( eye_pos.xyz );\n\t\tvec3 q1 = dFdy( eye_pos.xyz );\n\t\tvec2 st0 = dFdx( vUv.st );\n\t\tvec2 st1 = dFdy( vUv.st );\n\t\tvec3 S = normalize( q0 * st1.t - q1 * st0.t );\n\t\tvec3 T = normalize( -q0 * st1.s + q1 * st0.s );\n\t\tvec3 N = normalize( surf_norm );\n\t\tvec3 mapN = texture2D( normalMap, vUv ).xyz * 2.0 - 1.0;\n\t\tmapN.xy = normalScale * mapN.xy;\n\t\tmat3 tsn = mat3( S, T, N );\n\t\treturn normalize( tsn * mapN );\n\t}\n#endif\n", -packing:"vec3 packNormalToRGB( const in vec3 normal ) {\n\treturn normalize( normal ) * 0.5 + 0.5;\n}\nvec3 unpackRGBToNormal( const in vec3 rgb ) {\n\treturn 1.0 - 2.0 * rgb.xyz;\n}\nconst float PackUpscale = 256. / 255.;const float UnpackDownscale = 255. / 256.;\nconst vec3 PackFactors = vec3( 256. * 256. * 256., 256. * 256., 256. );\nconst vec4 UnpackFactors = UnpackDownscale / vec4( PackFactors, 1. );\nconst float ShiftRight8 = 1. / 256.;\nvec4 packDepthToRGBA( const in float v ) {\n\tvec4 r = vec4( fract( v * PackFactors ), v );\n\tr.yzw -= r.xyz * ShiftRight8;\treturn r * PackUpscale;\n}\nfloat unpackRGBAToDepth( const in vec4 v ) {\n\treturn dot( v, UnpackFactors );\n}\nfloat viewZToOrthographicDepth( const in float viewZ, const in float near, const in float far ) {\n\treturn ( viewZ + near ) / ( near - far );\n}\nfloat orthographicDepthToViewZ( const in float linearClipZ, const in float near, const in float far ) {\n\treturn linearClipZ * ( near - far ) - near;\n}\nfloat viewZToPerspectiveDepth( const in float viewZ, const in float near, const in float far ) {\n\treturn (( near + viewZ ) * far ) / (( far - near ) * viewZ );\n}\nfloat perspectiveDepthToViewZ( const in float invClipZ, const in float near, const in float far ) {\n\treturn ( near * far ) / ( ( far - near ) * invClipZ - far );\n}\n", -premultiplied_alpha_fragment:"#ifdef PREMULTIPLIED_ALPHA\n\tgl_FragColor.rgb *= gl_FragColor.a;\n#endif\n",project_vertex:"#ifdef USE_SKINNING\n\tvec4 mvPosition = modelViewMatrix * skinned;\n#else\n\tvec4 mvPosition = modelViewMatrix * vec4( transformed, 1.0 );\n#endif\ngl_Position = projectionMatrix * mvPosition;\n",roughnessmap_fragment:"float roughnessFactor = roughness;\n#ifdef USE_ROUGHNESSMAP\n\tvec4 texelRoughness = texture2D( roughnessMap, vUv );\n\troughnessFactor *= texelRoughness.r;\n#endif\n", -roughnessmap_pars_fragment:"#ifdef USE_ROUGHNESSMAP\n\tuniform sampler2D roughnessMap;\n#endif",shadowmap_pars_fragment:"#ifdef USE_SHADOWMAP\n\t#if NUM_DIR_LIGHTS > 0\n\t\tuniform sampler2D directionalShadowMap[ NUM_DIR_LIGHTS ];\n\t\tvarying vec4 vDirectionalShadowCoord[ NUM_DIR_LIGHTS ];\n\t#endif\n\t#if NUM_SPOT_LIGHTS > 0\n\t\tuniform sampler2D spotShadowMap[ NUM_SPOT_LIGHTS ];\n\t\tvarying vec4 vSpotShadowCoord[ NUM_SPOT_LIGHTS ];\n\t#endif\n\t#if NUM_POINT_LIGHTS > 0\n\t\tuniform sampler2D pointShadowMap[ NUM_POINT_LIGHTS ];\n\t\tvarying vec4 vPointShadowCoord[ NUM_POINT_LIGHTS ];\n\t#endif\n\tfloat texture2DCompare( sampler2D depths, vec2 uv, float compare ) {\n\t\treturn step( compare, unpackRGBAToDepth( texture2D( depths, uv ) ) );\n\t}\n\tfloat texture2DShadowLerp( sampler2D depths, vec2 size, vec2 uv, float compare ) {\n\t\tconst vec2 offset = vec2( 0.0, 1.0 );\n\t\tvec2 texelSize = vec2( 1.0 ) / size;\n\t\tvec2 centroidUV = floor( uv * size + 0.5 ) / size;\n\t\tfloat lb = texture2DCompare( depths, centroidUV + texelSize * offset.xx, compare );\n\t\tfloat lt = texture2DCompare( depths, centroidUV + texelSize * offset.xy, compare );\n\t\tfloat rb = texture2DCompare( depths, centroidUV + texelSize * offset.yx, compare );\n\t\tfloat rt = texture2DCompare( depths, centroidUV + texelSize * offset.yy, compare );\n\t\tvec2 f = fract( uv * size + 0.5 );\n\t\tfloat a = mix( lb, lt, f.y );\n\t\tfloat b = mix( rb, rt, f.y );\n\t\tfloat c = mix( a, b, f.x );\n\t\treturn c;\n\t}\n\tfloat getShadow( sampler2D shadowMap, vec2 shadowMapSize, float shadowBias, float shadowRadius, vec4 shadowCoord ) {\n\t\tshadowCoord.xyz /= shadowCoord.w;\n\t\tshadowCoord.z += shadowBias;\n\t\tbvec4 inFrustumVec = bvec4 ( shadowCoord.x >= 0.0, shadowCoord.x <= 1.0, shadowCoord.y >= 0.0, shadowCoord.y <= 1.0 );\n\t\tbool inFrustum = all( inFrustumVec );\n\t\tbvec2 frustumTestVec = bvec2( inFrustum, shadowCoord.z <= 1.0 );\n\t\tbool frustumTest = all( frustumTestVec );\n\t\tif ( frustumTest ) {\n\t\t#if defined( SHADOWMAP_TYPE_PCF )\n\t\t\tvec2 texelSize = vec2( 1.0 ) / shadowMapSize;\n\t\t\tfloat dx0 = - texelSize.x * shadowRadius;\n\t\t\tfloat dy0 = - texelSize.y * shadowRadius;\n\t\t\tfloat dx1 = + texelSize.x * shadowRadius;\n\t\t\tfloat dy1 = + texelSize.y * shadowRadius;\n\t\t\treturn (\n\t\t\t\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( dx0, dy0 ), shadowCoord.z ) +\n\t\t\t\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( 0.0, dy0 ), shadowCoord.z ) +\n\t\t\t\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( dx1, dy0 ), shadowCoord.z ) +\n\t\t\t\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( dx0, 0.0 ), shadowCoord.z ) +\n\t\t\t\ttexture2DCompare( shadowMap, shadowCoord.xy, shadowCoord.z ) +\n\t\t\t\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( dx1, 0.0 ), shadowCoord.z ) +\n\t\t\t\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( dx0, dy1 ), shadowCoord.z ) +\n\t\t\t\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( 0.0, dy1 ), shadowCoord.z ) +\n\t\t\t\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( dx1, dy1 ), shadowCoord.z )\n\t\t\t) * ( 1.0 / 9.0 );\n\t\t#elif defined( SHADOWMAP_TYPE_PCF_SOFT )\n\t\t\tvec2 texelSize = vec2( 1.0 ) / shadowMapSize;\n\t\t\tfloat dx0 = - texelSize.x * shadowRadius;\n\t\t\tfloat dy0 = - texelSize.y * shadowRadius;\n\t\t\tfloat dx1 = + texelSize.x * shadowRadius;\n\t\t\tfloat dy1 = + texelSize.y * shadowRadius;\n\t\t\treturn (\n\t\t\t\ttexture2DShadowLerp( shadowMap, shadowMapSize, shadowCoord.xy + vec2( dx0, dy0 ), shadowCoord.z ) +\n\t\t\t\ttexture2DShadowLerp( shadowMap, shadowMapSize, shadowCoord.xy + vec2( 0.0, dy0 ), shadowCoord.z ) +\n\t\t\t\ttexture2DShadowLerp( shadowMap, shadowMapSize, shadowCoord.xy + vec2( dx1, dy0 ), shadowCoord.z ) +\n\t\t\t\ttexture2DShadowLerp( shadowMap, shadowMapSize, shadowCoord.xy + vec2( dx0, 0.0 ), shadowCoord.z ) +\n\t\t\t\ttexture2DShadowLerp( shadowMap, shadowMapSize, shadowCoord.xy, shadowCoord.z ) +\n\t\t\t\ttexture2DShadowLerp( shadowMap, shadowMapSize, shadowCoord.xy + vec2( dx1, 0.0 ), shadowCoord.z ) +\n\t\t\t\ttexture2DShadowLerp( shadowMap, shadowMapSize, shadowCoord.xy + vec2( dx0, dy1 ), shadowCoord.z ) +\n\t\t\t\ttexture2DShadowLerp( shadowMap, shadowMapSize, shadowCoord.xy + vec2( 0.0, dy1 ), shadowCoord.z ) +\n\t\t\t\ttexture2DShadowLerp( shadowMap, shadowMapSize, shadowCoord.xy + vec2( dx1, dy1 ), shadowCoord.z )\n\t\t\t) * ( 1.0 / 9.0 );\n\t\t#else\n\t\t\treturn texture2DCompare( shadowMap, shadowCoord.xy, shadowCoord.z );\n\t\t#endif\n\t\t}\n\t\treturn 1.0;\n\t}\n\tvec2 cubeToUV( vec3 v, float texelSizeY ) {\n\t\tvec3 absV = abs( v );\n\t\tfloat scaleToCube = 1.0 / max( absV.x, max( absV.y, absV.z ) );\n\t\tabsV *= scaleToCube;\n\t\tv *= scaleToCube * ( 1.0 - 2.0 * texelSizeY );\n\t\tvec2 planar = v.xy;\n\t\tfloat almostATexel = 1.5 * texelSizeY;\n\t\tfloat almostOne = 1.0 - almostATexel;\n\t\tif ( absV.z >= almostOne ) {\n\t\t\tif ( v.z > 0.0 )\n\t\t\t\tplanar.x = 4.0 - v.x;\n\t\t} else if ( absV.x >= almostOne ) {\n\t\t\tfloat signX = sign( v.x );\n\t\t\tplanar.x = v.z * signX + 2.0 * signX;\n\t\t} else if ( absV.y >= almostOne ) {\n\t\t\tfloat signY = sign( v.y );\n\t\t\tplanar.x = v.x + 2.0 * signY + 2.0;\n\t\t\tplanar.y = v.z * signY - 2.0;\n\t\t}\n\t\treturn vec2( 0.125, 0.25 ) * planar + vec2( 0.375, 0.75 );\n\t}\n\tfloat getPointShadow( sampler2D shadowMap, vec2 shadowMapSize, float shadowBias, float shadowRadius, vec4 shadowCoord ) {\n\t\tvec2 texelSize = vec2( 1.0 ) / ( shadowMapSize * vec2( 4.0, 2.0 ) );\n\t\tvec3 lightToPosition = shadowCoord.xyz;\n\t\tvec3 bd3D = normalize( lightToPosition );\n\t\tfloat dp = ( length( lightToPosition ) - shadowBias ) / 1000.0;\n\t\t#if defined( SHADOWMAP_TYPE_PCF ) || defined( SHADOWMAP_TYPE_PCF_SOFT )\n\t\t\tvec2 offset = vec2( - 1, 1 ) * shadowRadius * texelSize.y;\n\t\t\treturn (\n\t\t\t\ttexture2DCompare( shadowMap, cubeToUV( bd3D + offset.xyy, texelSize.y ), dp ) +\n\t\t\t\ttexture2DCompare( shadowMap, cubeToUV( bd3D + offset.yyy, texelSize.y ), dp ) +\n\t\t\t\ttexture2DCompare( shadowMap, cubeToUV( bd3D + offset.xyx, texelSize.y ), dp ) +\n\t\t\t\ttexture2DCompare( shadowMap, cubeToUV( bd3D + offset.yyx, texelSize.y ), dp ) +\n\t\t\t\ttexture2DCompare( shadowMap, cubeToUV( bd3D, texelSize.y ), dp ) +\n\t\t\t\ttexture2DCompare( shadowMap, cubeToUV( bd3D + offset.xxy, texelSize.y ), dp ) +\n\t\t\t\ttexture2DCompare( shadowMap, cubeToUV( bd3D + offset.yxy, texelSize.y ), dp ) +\n\t\t\t\ttexture2DCompare( shadowMap, cubeToUV( bd3D + offset.xxx, texelSize.y ), dp ) +\n\t\t\t\ttexture2DCompare( shadowMap, cubeToUV( bd3D + offset.yxx, texelSize.y ), dp )\n\t\t\t) * ( 1.0 / 9.0 );\n\t\t#else\n\t\t\treturn texture2DCompare( shadowMap, cubeToUV( bd3D, texelSize.y ), dp );\n\t\t#endif\n\t}\n#endif\n", -shadowmap_pars_vertex:"#ifdef USE_SHADOWMAP\n\t#if NUM_DIR_LIGHTS > 0\n\t\tuniform mat4 directionalShadowMatrix[ NUM_DIR_LIGHTS ];\n\t\tvarying vec4 vDirectionalShadowCoord[ NUM_DIR_LIGHTS ];\n\t#endif\n\t#if NUM_SPOT_LIGHTS > 0\n\t\tuniform mat4 spotShadowMatrix[ NUM_SPOT_LIGHTS ];\n\t\tvarying vec4 vSpotShadowCoord[ NUM_SPOT_LIGHTS ];\n\t#endif\n\t#if NUM_POINT_LIGHTS > 0\n\t\tuniform mat4 pointShadowMatrix[ NUM_POINT_LIGHTS ];\n\t\tvarying vec4 vPointShadowCoord[ NUM_POINT_LIGHTS ];\n\t#endif\n#endif\n", -shadowmap_vertex:"#ifdef USE_SHADOWMAP\n\t#if NUM_DIR_LIGHTS > 0\n\tfor ( int i = 0; i < NUM_DIR_LIGHTS; i ++ ) {\n\t\tvDirectionalShadowCoord[ i ] = directionalShadowMatrix[ i ] * worldPosition;\n\t}\n\t#endif\n\t#if NUM_SPOT_LIGHTS > 0\n\tfor ( int i = 0; i < NUM_SPOT_LIGHTS; i ++ ) {\n\t\tvSpotShadowCoord[ i ] = spotShadowMatrix[ i ] * worldPosition;\n\t}\n\t#endif\n\t#if NUM_POINT_LIGHTS > 0\n\tfor ( int i = 0; i < NUM_POINT_LIGHTS; i ++ ) {\n\t\tvPointShadowCoord[ i ] = pointShadowMatrix[ i ] * worldPosition;\n\t}\n\t#endif\n#endif\n", -shadowmask_pars_fragment:"float getShadowMask() {\n\tfloat shadow = 1.0;\n\t#ifdef USE_SHADOWMAP\n\t#if NUM_DIR_LIGHTS > 0\n\tDirectionalLight directionalLight;\n\tfor ( int i = 0; i < NUM_DIR_LIGHTS; i ++ ) {\n\t\tdirectionalLight = directionalLights[ i ];\n\t\tshadow *= bool( directionalLight.shadow ) ? getShadow( directionalShadowMap[ i ], directionalLight.shadowMapSize, directionalLight.shadowBias, directionalLight.shadowRadius, vDirectionalShadowCoord[ i ] ) : 1.0;\n\t}\n\t#endif\n\t#if NUM_SPOT_LIGHTS > 0\n\tSpotLight spotLight;\n\tfor ( int i = 0; i < NUM_SPOT_LIGHTS; i ++ ) {\n\t\tspotLight = spotLights[ i ];\n\t\tshadow *= bool( spotLight.shadow ) ? getShadow( spotShadowMap[ i ], spotLight.shadowMapSize, spotLight.shadowBias, spotLight.shadowRadius, vSpotShadowCoord[ i ] ) : 1.0;\n\t}\n\t#endif\n\t#if NUM_POINT_LIGHTS > 0\n\tPointLight pointLight;\n\tfor ( int i = 0; i < NUM_POINT_LIGHTS; i ++ ) {\n\t\tpointLight = pointLights[ i ];\n\t\tshadow *= bool( pointLight.shadow ) ? getPointShadow( pointShadowMap[ i ], pointLight.shadowMapSize, pointLight.shadowBias, pointLight.shadowRadius, vPointShadowCoord[ i ] ) : 1.0;\n\t}\n\t#endif\n\t#endif\n\treturn shadow;\n}\n", -skinbase_vertex:"#ifdef USE_SKINNING\n\tmat4 boneMatX = getBoneMatrix( skinIndex.x );\n\tmat4 boneMatY = getBoneMatrix( skinIndex.y );\n\tmat4 boneMatZ = getBoneMatrix( skinIndex.z );\n\tmat4 boneMatW = getBoneMatrix( skinIndex.w );\n#endif",skinning_pars_vertex:"#ifdef USE_SKINNING\n\tuniform mat4 bindMatrix;\n\tuniform mat4 bindMatrixInverse;\n\t#ifdef BONE_TEXTURE\n\t\tuniform sampler2D boneTexture;\n\t\tuniform int boneTextureWidth;\n\t\tuniform int boneTextureHeight;\n\t\tmat4 getBoneMatrix( const in float i ) {\n\t\t\tfloat j = i * 4.0;\n\t\t\tfloat x = mod( j, float( boneTextureWidth ) );\n\t\t\tfloat y = floor( j / float( boneTextureWidth ) );\n\t\t\tfloat dx = 1.0 / float( boneTextureWidth );\n\t\t\tfloat dy = 1.0 / float( boneTextureHeight );\n\t\t\ty = dy * ( y + 0.5 );\n\t\t\tvec4 v1 = texture2D( boneTexture, vec2( dx * ( x + 0.5 ), y ) );\n\t\t\tvec4 v2 = texture2D( boneTexture, vec2( dx * ( x + 1.5 ), y ) );\n\t\t\tvec4 v3 = texture2D( boneTexture, vec2( dx * ( x + 2.5 ), y ) );\n\t\t\tvec4 v4 = texture2D( boneTexture, vec2( dx * ( x + 3.5 ), y ) );\n\t\t\tmat4 bone = mat4( v1, v2, v3, v4 );\n\t\t\treturn bone;\n\t\t}\n\t#else\n\t\tuniform mat4 boneMatrices[ MAX_BONES ];\n\t\tmat4 getBoneMatrix( const in float i ) {\n\t\t\tmat4 bone = boneMatrices[ int(i) ];\n\t\t\treturn bone;\n\t\t}\n\t#endif\n#endif\n", -skinning_vertex:"#ifdef USE_SKINNING\n\tvec4 skinVertex = bindMatrix * vec4( transformed, 1.0 );\n\tvec4 skinned = vec4( 0.0 );\n\tskinned += boneMatX * skinVertex * skinWeight.x;\n\tskinned += boneMatY * skinVertex * skinWeight.y;\n\tskinned += boneMatZ * skinVertex * skinWeight.z;\n\tskinned += boneMatW * skinVertex * skinWeight.w;\n\tskinned = bindMatrixInverse * skinned;\n#endif\n",skinnormal_vertex:"#ifdef USE_SKINNING\n\tmat4 skinMatrix = mat4( 0.0 );\n\tskinMatrix += skinWeight.x * boneMatX;\n\tskinMatrix += skinWeight.y * boneMatY;\n\tskinMatrix += skinWeight.z * boneMatZ;\n\tskinMatrix += skinWeight.w * boneMatW;\n\tskinMatrix = bindMatrixInverse * skinMatrix * bindMatrix;\n\tobjectNormal = vec4( skinMatrix * vec4( objectNormal, 0.0 ) ).xyz;\n#endif\n", -specularmap_fragment:"float specularStrength;\n#ifdef USE_SPECULARMAP\n\tvec4 texelSpecular = texture2D( specularMap, vUv );\n\tspecularStrength = texelSpecular.r;\n#else\n\tspecularStrength = 1.0;\n#endif",specularmap_pars_fragment:"#ifdef USE_SPECULARMAP\n\tuniform sampler2D specularMap;\n#endif",tonemapping_fragment:"#if defined( TONE_MAPPING )\n gl_FragColor.rgb = toneMapping( gl_FragColor.rgb );\n#endif\n",tonemapping_pars_fragment:"#define saturate(a) clamp( a, 0.0, 1.0 )\nuniform float toneMappingExposure;\nuniform float toneMappingWhitePoint;\nvec3 LinearToneMapping( vec3 color ) {\n\treturn toneMappingExposure * color;\n}\nvec3 ReinhardToneMapping( vec3 color ) {\n\tcolor *= toneMappingExposure;\n\treturn saturate( color / ( vec3( 1.0 ) + color ) );\n}\n#define Uncharted2Helper( x ) max( ( ( x * ( 0.15 * x + 0.10 * 0.50 ) + 0.20 * 0.02 ) / ( x * ( 0.15 * x + 0.50 ) + 0.20 * 0.30 ) ) - 0.02 / 0.30, vec3( 0.0 ) )\nvec3 Uncharted2ToneMapping( vec3 color ) {\n\tcolor *= toneMappingExposure;\n\treturn saturate( Uncharted2Helper( color ) / Uncharted2Helper( vec3( toneMappingWhitePoint ) ) );\n}\nvec3 OptimizedCineonToneMapping( vec3 color ) {\n\tcolor *= toneMappingExposure;\n\tcolor = max( vec3( 0.0 ), color - 0.004 );\n\treturn pow( ( color * ( 6.2 * color + 0.5 ) ) / ( color * ( 6.2 * color + 1.7 ) + 0.06 ), vec3( 2.2 ) );\n}\n", -uv_pars_fragment:"#if defined( USE_MAP ) || defined( USE_BUMPMAP ) || defined( USE_NORMALMAP ) || defined( USE_SPECULARMAP ) || defined( USE_ALPHAMAP ) || defined( USE_EMISSIVEMAP ) || defined( USE_ROUGHNESSMAP ) || defined( USE_METALNESSMAP )\n\tvarying vec2 vUv;\n#endif",uv_pars_vertex:"#if defined( USE_MAP ) || defined( USE_BUMPMAP ) || defined( USE_NORMALMAP ) || defined( USE_SPECULARMAP ) || defined( USE_ALPHAMAP ) || defined( USE_EMISSIVEMAP ) || defined( USE_ROUGHNESSMAP ) || defined( USE_METALNESSMAP )\n\tvarying vec2 vUv;\n\tuniform vec4 offsetRepeat;\n#endif\n", -uv_vertex:"#if defined( USE_MAP ) || defined( USE_BUMPMAP ) || defined( USE_NORMALMAP ) || defined( USE_SPECULARMAP ) || defined( USE_ALPHAMAP ) || defined( USE_EMISSIVEMAP ) || defined( USE_ROUGHNESSMAP ) || defined( USE_METALNESSMAP )\n\tvUv = uv * offsetRepeat.zw + offsetRepeat.xy;\n#endif",uv2_pars_fragment:"#if defined( USE_LIGHTMAP ) || defined( USE_AOMAP )\n\tvarying vec2 vUv2;\n#endif",uv2_pars_vertex:"#if defined( USE_LIGHTMAP ) || defined( USE_AOMAP )\n\tattribute vec2 uv2;\n\tvarying vec2 vUv2;\n#endif", -uv2_vertex:"#if defined( USE_LIGHTMAP ) || defined( USE_AOMAP )\n\tvUv2 = uv2;\n#endif",worldpos_vertex:"#if defined( USE_ENVMAP ) || defined( PHONG ) || defined( PHYSICAL ) || defined( LAMBERT ) || defined ( USE_SHADOWMAP )\n\t#ifdef USE_SKINNING\n\t\tvec4 worldPosition = modelMatrix * skinned;\n\t#else\n\t\tvec4 worldPosition = modelMatrix * vec4( transformed, 1.0 );\n\t#endif\n#endif\n",cube_frag:"uniform samplerCube tCube;\nuniform float tFlip;\nuniform float opacity;\nvarying vec3 vWorldPosition;\n#include \nvoid main() {\n\tgl_FragColor = textureCube( tCube, vec3( tFlip * vWorldPosition.x, vWorldPosition.yz ) );\n\tgl_FragColor.a *= opacity;\n}\n", -cube_vert:"varying vec3 vWorldPosition;\n#include \nvoid main() {\n\tvWorldPosition = transformDirection( position, modelMatrix );\n\t#include \n\t#include \n}\n",depth_frag:"#if DEPTH_PACKING == 3200\n\tuniform float opacity;\n#endif\n#include \n#include \n#include \n#include \n#include \n#include \n#include \nvoid main() {\n\t#include \n\tvec4 diffuseColor = vec4( 1.0 );\n\t#if DEPTH_PACKING == 3200\n\t\tdiffuseColor.a = opacity;\n\t#endif\n\t#include \n\t#include \n\t#include \n\t#include \n\t#if DEPTH_PACKING == 3200\n\t\tgl_FragColor = vec4( vec3( gl_FragCoord.z ), opacity );\n\t#elif DEPTH_PACKING == 3201\n\t\tgl_FragColor = packDepthToRGBA( gl_FragCoord.z );\n\t#endif\n}\n", -depth_vert:"#include \n#include \n#include \n#include \n#include \n#include \n#include \nvoid main() {\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n}\n", -distanceRGBA_frag:"uniform vec3 lightPos;\nvarying vec4 vWorldPosition;\n#include \n#include \n#include \nvoid main () {\n\t#include \n\tgl_FragColor = packDepthToRGBA( length( vWorldPosition.xyz - lightPos.xyz ) / 1000.0 );\n}\n",distanceRGBA_vert:"varying vec4 vWorldPosition;\n#include \n#include \n#include \n#include \nvoid main() {\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\tvWorldPosition = worldPosition;\n}\n", -equirect_frag:"uniform sampler2D tEquirect;\nuniform float tFlip;\nvarying vec3 vWorldPosition;\n#include \nvoid main() {\n\tvec3 direction = normalize( vWorldPosition );\n\tvec2 sampleUV;\n\tsampleUV.y = saturate( tFlip * direction.y * -0.5 + 0.5 );\n\tsampleUV.x = atan( direction.z, direction.x ) * RECIPROCAL_PI2 + 0.5;\n\tgl_FragColor = texture2D( tEquirect, sampleUV );\n}\n",equirect_vert:"varying vec3 vWorldPosition;\n#include \nvoid main() {\n\tvWorldPosition = transformDirection( position, modelMatrix );\n\t#include \n\t#include \n}\n", -linedashed_frag:"uniform vec3 diffuse;\nuniform float opacity;\nuniform float dashSize;\nuniform float totalSize;\nvarying float vLineDistance;\n#include \n#include \n#include \n#include \n#include \nvoid main() {\n\t#include \n\tif ( mod( vLineDistance, totalSize ) > dashSize ) {\n\t\tdiscard;\n\t}\n\tvec3 outgoingLight = vec3( 0.0 );\n\tvec4 diffuseColor = vec4( diffuse, opacity );\n\t#include \n\t#include \n\toutgoingLight = diffuseColor.rgb;\n\tgl_FragColor = vec4( outgoingLight, diffuseColor.a );\n\t#include \n\t#include \n\t#include \n\t#include \n}\n", -linedashed_vert:"uniform float scale;\nattribute float lineDistance;\nvarying float vLineDistance;\n#include \n#include \n#include \n#include \n#include \nvoid main() {\n\t#include \n\tvLineDistance = scale * lineDistance;\n\tvec4 mvPosition = modelViewMatrix * vec4( position, 1.0 );\n\tgl_Position = projectionMatrix * mvPosition;\n\t#include \n\t#include \n\t#include \n}\n", -meshbasic_frag:"uniform vec3 diffuse;\nuniform float opacity;\n#ifndef FLAT_SHADED\n\tvarying vec3 vNormal;\n#endif\n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \nvoid main() {\n\t#include \n\tvec4 diffuseColor = vec4( diffuse, opacity );\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\tReflectedLight reflectedLight = ReflectedLight( vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ) );\n\t#ifdef USE_LIGHTMAP\n\t\treflectedLight.indirectDiffuse += texture2D( lightMap, vUv2 ).xyz * lightMapIntensity;\n\t#else\n\t\treflectedLight.indirectDiffuse += vec3( 1.0 );\n\t#endif\n\t#include \n\treflectedLight.indirectDiffuse *= diffuseColor.rgb;\n\tvec3 outgoingLight = reflectedLight.indirectDiffuse;\n\t#include \n\t#include \n\tgl_FragColor = vec4( outgoingLight, diffuseColor.a );\n\t#include \n\t#include \n\t#include \n\t#include \n}\n", -meshbasic_vert:"#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \nvoid main() {\n\t#include \n\t#include \n\t#include \n\t#include \n\t#ifdef USE_ENVMAP\n\t#include \n\t#include \n\t#include \n\t#include \n\t#endif\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n}\n", -meshlambert_frag:"uniform vec3 diffuse;\nuniform vec3 emissive;\nuniform float opacity;\nvarying vec3 vLightFront;\n#ifdef DOUBLE_SIDED\n\tvarying vec3 vLightBack;\n#endif\n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \nvoid main() {\n\t#include \n\tvec4 diffuseColor = vec4( diffuse, opacity );\n\tReflectedLight reflectedLight = ReflectedLight( vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ) );\n\tvec3 totalEmissiveRadiance = emissive;\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\treflectedLight.indirectDiffuse = getAmbientLightIrradiance( ambientLightColor );\n\t#include \n\treflectedLight.indirectDiffuse *= BRDF_Diffuse_Lambert( diffuseColor.rgb );\n\t#ifdef DOUBLE_SIDED\n\t\treflectedLight.directDiffuse = ( gl_FrontFacing ) ? vLightFront : vLightBack;\n\t#else\n\t\treflectedLight.directDiffuse = vLightFront;\n\t#endif\n\treflectedLight.directDiffuse *= BRDF_Diffuse_Lambert( diffuseColor.rgb ) * getShadowMask();\n\t#include \n\tvec3 outgoingLight = reflectedLight.directDiffuse + reflectedLight.indirectDiffuse + totalEmissiveRadiance;\n\t#include \n\t#include \n\tgl_FragColor = vec4( outgoingLight, diffuseColor.a );\n\t#include \n\t#include \n\t#include \n\t#include \n}\n", -meshlambert_vert:"#define LAMBERT\nvarying vec3 vLightFront;\n#ifdef DOUBLE_SIDED\n\tvarying vec3 vLightBack;\n#endif\n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \nvoid main() {\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n}\n", -meshphong_frag:"#define PHONG\nuniform vec3 diffuse;\nuniform vec3 emissive;\nuniform vec3 specular;\nuniform float shininess;\nuniform float opacity;\n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \nvoid main() {\n\t#include \n\tvec4 diffuseColor = vec4( diffuse, opacity );\n\tReflectedLight reflectedLight = ReflectedLight( vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ) );\n\tvec3 totalEmissiveRadiance = emissive;\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\tvec3 outgoingLight = reflectedLight.directDiffuse + reflectedLight.indirectDiffuse + reflectedLight.directSpecular + reflectedLight.indirectSpecular + totalEmissiveRadiance;\n\t#include \n\tgl_FragColor = vec4( outgoingLight, diffuseColor.a );\n\t#include \n\t#include \n\t#include \n\t#include \n}\n", -meshphong_vert:"#define PHONG\nvarying vec3 vViewPosition;\n#ifndef FLAT_SHADED\n\tvarying vec3 vNormal;\n#endif\n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \nvoid main() {\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n#ifndef FLAT_SHADED\n\tvNormal = normalize( transformedNormal );\n#endif\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\tvViewPosition = - mvPosition.xyz;\n\t#include \n\t#include \n\t#include \n\t#include \n}\n", -meshphysical_frag:"#define PHYSICAL\nuniform vec3 diffuse;\nuniform vec3 emissive;\nuniform float roughness;\nuniform float metalness;\nuniform float opacity;\n#ifndef STANDARD\n\tuniform float clearCoat;\n\tuniform float clearCoatRoughness;\n#endif\nvarying vec3 vViewPosition;\n#ifndef FLAT_SHADED\n\tvarying vec3 vNormal;\n#endif\n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \nvoid main() {\n\t#include \n\tvec4 diffuseColor = vec4( diffuse, opacity );\n\tReflectedLight reflectedLight = ReflectedLight( vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ) );\n\tvec3 totalEmissiveRadiance = emissive;\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\tvec3 outgoingLight = reflectedLight.directDiffuse + reflectedLight.indirectDiffuse + reflectedLight.directSpecular + reflectedLight.indirectSpecular + totalEmissiveRadiance;\n\tgl_FragColor = vec4( outgoingLight, diffuseColor.a );\n\t#include \n\t#include \n\t#include \n\t#include \n}\n", -meshphysical_vert:"#define PHYSICAL\nvarying vec3 vViewPosition;\n#ifndef FLAT_SHADED\n\tvarying vec3 vNormal;\n#endif\n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \nvoid main() {\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n#ifndef FLAT_SHADED\n\tvNormal = normalize( transformedNormal );\n#endif\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\tvViewPosition = - mvPosition.xyz;\n\t#include \n\t#include \n\t#include \n}\n", -normal_frag:"#define NORMAL\nuniform float opacity;\n#if defined( FLAT_SHADED ) || defined( USE_BUMPMAP ) || defined( USE_NORMALMAP )\n\tvarying vec3 vViewPosition;\n#endif\n#ifndef FLAT_SHADED\n\tvarying vec3 vNormal;\n#endif\n#include \n#include \n#include \n#include \n#include \nvoid main() {\n\t#include \n\t#include \n\t#include \n\tgl_FragColor = vec4( packNormalToRGB( normal ), opacity );\n}\n", -normal_vert:"#define NORMAL\n#if defined( FLAT_SHADED ) || defined( USE_BUMPMAP ) || defined( USE_NORMALMAP )\n\tvarying vec3 vViewPosition;\n#endif\n#ifndef FLAT_SHADED\n\tvarying vec3 vNormal;\n#endif\n#include \n#include \n#include \n#include \n#include \nvoid main() {\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n#ifndef FLAT_SHADED\n\tvNormal = normalize( transformedNormal );\n#endif\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n#if defined( FLAT_SHADED ) || defined( USE_BUMPMAP ) || defined( USE_NORMALMAP )\n\tvViewPosition = - mvPosition.xyz;\n#endif\n}\n", -points_frag:"uniform vec3 diffuse;\nuniform float opacity;\n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \nvoid main() {\n\t#include \n\tvec3 outgoingLight = vec3( 0.0 );\n\tvec4 diffuseColor = vec4( diffuse, opacity );\n\t#include \n\t#include \n\t#include \n\t#include \n\toutgoingLight = diffuseColor.rgb;\n\tgl_FragColor = vec4( outgoingLight, diffuseColor.a );\n\t#include \n\t#include \n\t#include \n\t#include \n}\n", -points_vert:"uniform float size;\nuniform float scale;\n#include \n#include \n#include \n#include \n#include \n#include \nvoid main() {\n\t#include \n\t#include \n\t#include \n\t#ifdef USE_SIZEATTENUATION\n\t\tgl_PointSize = size * ( scale / - mvPosition.z );\n\t#else\n\t\tgl_PointSize = size;\n\t#endif\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n}\n", -shadow_frag:"uniform float opacity;\n#include \n#include \n#include \n#include \n#include \n#include \nvoid main() {\n\tgl_FragColor = vec4( 0.0, 0.0, 0.0, opacity * ( 1.0 - getShadowMask() ) );\n}\n",shadow_vert:"#include \nvoid main() {\n\t#include \n\t#include \n\t#include \n\t#include \n}\n"};J.prototype={constructor:J, -isColor:!0,r:1,g:1,b:1,set:function(a){a&&a.isColor?this.copy(a):"number"===typeof a?this.setHex(a):"string"===typeof a&&this.setStyle(a);return this},setScalar:function(a){this.b=this.g=this.r=a;return this},setHex:function(a){a=Math.floor(a);this.r=(a>>16&255)/255;this.g=(a>>8&255)/255;this.b=(a&255)/255;return this},setRGB:function(a,b,c){this.r=a;this.g=b;this.b=c;return this},setHSL:function(){function a(a,c,d){0>d&&(d+=1);1d?c:d<2/3?a+6*(c-a)*(2/3-d):a}return function(b, -c,d){b=N.euclideanModulo(b,1);c=N.clamp(c,0,1);d=N.clamp(d,0,1);0===c?this.r=this.g=this.b=d:(c=.5>=d?d*(1+c):d+c-d*c,d=2*d-c,this.r=a(d,c,b+1/3),this.g=a(d,c,b),this.b=a(d,c,b-1/3));return this}}(),setStyle:function(a){function b(b){void 0!==b&&1>parseFloat(b)&&console.warn("THREE.Color: Alpha component of "+a+" will be ignored.")}var c;if(c=/^((?:rgb|hsl)a?)\(\s*([^\)]*)\)/.exec(a)){var d=c[2];switch(c[1]){case "rgb":case "rgba":if(c=/^(\d+)\s*,\s*(\d+)\s*,\s*(\d+)\s*(,\s*([0-9]*\.?[0-9]+)\s*)?$/.exec(d))return this.r= -Math.min(255,parseInt(c[1],10))/255,this.g=Math.min(255,parseInt(c[2],10))/255,this.b=Math.min(255,parseInt(c[3],10))/255,b(c[5]),this;if(c=/^(\d+)\%\s*,\s*(\d+)\%\s*,\s*(\d+)\%\s*(,\s*([0-9]*\.?[0-9]+)\s*)?$/.exec(d))return this.r=Math.min(100,parseInt(c[1],10))/100,this.g=Math.min(100,parseInt(c[2],10))/100,this.b=Math.min(100,parseInt(c[3],10))/100,b(c[5]),this;break;case "hsl":case "hsla":if(c=/^([0-9]*\.?[0-9]+)\s*,\s*(\d+)\%\s*,\s*(\d+)\%\s*(,\s*([0-9]*\.?[0-9]+)\s*)?$/.exec(d)){var d=parseFloat(c[1])/ -360,e=parseInt(c[2],10)/100,f=parseInt(c[3],10)/100;b(c[5]);return this.setHSL(d,e,f)}}}else if(c=/^\#([A-Fa-f0-9]+)$/.exec(a)){c=c[1];d=c.length;if(3===d)return this.r=parseInt(c.charAt(0)+c.charAt(0),16)/255,this.g=parseInt(c.charAt(1)+c.charAt(1),16)/255,this.b=parseInt(c.charAt(2)+c.charAt(2),16)/255,this;if(6===d)return this.r=parseInt(c.charAt(0)+c.charAt(1),16)/255,this.g=parseInt(c.charAt(2)+c.charAt(3),16)/255,this.b=parseInt(c.charAt(4)+c.charAt(5),16)/255,this}a&&0=h?m/(e+f): -m/(2-e-f);switch(e){case b:g=(c-d)/m+(cthis.max.x||a.ythis.max.y?!1:!0},containsBox:function(a){return this.min.x<=a.min.x&&a.max.x<=this.max.x&&this.min.y<=a.min.y&&a.max.y<=this.max.y},getParameter:function(a,b){return(b||new D).set((a.x-this.min.x)/(this.max.x-this.min.x),(a.y-this.min.y)/(this.max.y- -this.min.y))},intersectsBox:function(a){return a.max.xthis.max.x||a.max.ythis.max.y?!1:!0},clampPoint:function(a,b){return(b||new D).copy(a).clamp(this.min,this.max)},distanceToPoint:function(){var a=new D;return function(b){return a.copy(b).clamp(this.min,this.max).sub(b).length()}}(),intersect:function(a){this.min.max(a.min);this.max.min(a.max);return this},union:function(a){this.min.min(a.min);this.max.max(a.max);return this},translate:function(a){this.min.add(a); -this.max.add(a);return this},equals:function(a){return a.min.equals(this.min)&&a.max.equals(this.max)}};var Af=0;X.prototype={constructor:X,isMaterial:!0,get needsUpdate(){return this._needsUpdate},set needsUpdate(a){!0===a&&this.update();this._needsUpdate=a},setValues:function(a){if(void 0!==a)for(var b in a){var c=a[b];if(void 0===c)console.warn("THREE.Material: '"+b+"' parameter is undefined.");else{var d=this[b];void 0===d?console.warn("THREE."+this.type+": '"+b+"' is not a property of this material."): -d&&d.isColor?d.set(c):d&&d.isVector3&&c&&c.isVector3?d.copy(c):this[b]="overdraw"===b?Number(c):c}}},toJSON:function(a){function b(a){var b=[],c;for(c in a){var d=a[c];delete d.metadata;b.push(d)}return b}var c=void 0===a;c&&(a={textures:{},images:{}});var d={metadata:{version:4.4,type:"Material",generator:"Material.toJSON"}};d.uuid=this.uuid;d.type=this.type;""!==this.name&&(d.name=this.name);this.color&&this.color.isColor&&(d.color=this.color.getHex());void 0!==this.roughness&&(d.roughness=this.roughness); -void 0!==this.metalness&&(d.metalness=this.metalness);this.emissive&&this.emissive.isColor&&(d.emissive=this.emissive.getHex());this.specular&&this.specular.isColor&&(d.specular=this.specular.getHex());void 0!==this.shininess&&(d.shininess=this.shininess);void 0!==this.clearCoat&&(d.clearCoat=this.clearCoat);void 0!==this.clearCoatRoughness&&(d.clearCoatRoughness=this.clearCoatRoughness);this.map&&this.map.isTexture&&(d.map=this.map.toJSON(a).uuid);this.alphaMap&&this.alphaMap.isTexture&&(d.alphaMap= -this.alphaMap.toJSON(a).uuid);this.lightMap&&this.lightMap.isTexture&&(d.lightMap=this.lightMap.toJSON(a).uuid);this.bumpMap&&this.bumpMap.isTexture&&(d.bumpMap=this.bumpMap.toJSON(a).uuid,d.bumpScale=this.bumpScale);this.normalMap&&this.normalMap.isTexture&&(d.normalMap=this.normalMap.toJSON(a).uuid,d.normalScale=this.normalScale.toArray());this.displacementMap&&this.displacementMap.isTexture&&(d.displacementMap=this.displacementMap.toJSON(a).uuid,d.displacementScale=this.displacementScale,d.displacementBias= -this.displacementBias);this.roughnessMap&&this.roughnessMap.isTexture&&(d.roughnessMap=this.roughnessMap.toJSON(a).uuid);this.metalnessMap&&this.metalnessMap.isTexture&&(d.metalnessMap=this.metalnessMap.toJSON(a).uuid);this.emissiveMap&&this.emissiveMap.isTexture&&(d.emissiveMap=this.emissiveMap.toJSON(a).uuid);this.specularMap&&this.specularMap.isTexture&&(d.specularMap=this.specularMap.toJSON(a).uuid);this.envMap&&this.envMap.isTexture&&(d.envMap=this.envMap.toJSON(a).uuid,d.reflectivity=this.reflectivity); -this.gradientMap&&this.gradientMap.isTexture&&(d.gradientMap=this.gradientMap.toJSON(a).uuid);void 0!==this.size&&(d.size=this.size);void 0!==this.sizeAttenuation&&(d.sizeAttenuation=this.sizeAttenuation);1!==this.blending&&(d.blending=this.blending);2!==this.shading&&(d.shading=this.shading);0!==this.side&&(d.side=this.side);0!==this.vertexColors&&(d.vertexColors=this.vertexColors);1>this.opacity&&(d.opacity=this.opacity);!0===this.transparent&&(d.transparent=this.transparent);d.depthFunc=this.depthFunc; -d.depthTest=this.depthTest;d.depthWrite=this.depthWrite;0e&&(e=k);l>f&&(f=l);p>g&&(g=p)}this.min.set(b,c,d);this.max.set(e,f,g);return this},setFromBufferAttribute:function(a){for(var b=Infinity,c=Infinity,d=Infinity,e=-Infinity,f=-Infinity,g=-Infinity,h=0,m=a.count;he&&(e=k);l>f&&(f=l);p>g&&(g=p)}this.min.set(b,c,d);this.max.set(e,f,g);return this},setFromPoints:function(a){this.makeEmpty();for(var b=0,c=a.length;bthis.max.x||a.ythis.max.y||a.zthis.max.z?!1:!0},containsBox:function(a){return this.min.x<=a.min.x&&a.max.x<=this.max.x&&this.min.y<=a.min.y&&a.max.y<=this.max.y&&this.min.z<=a.min.z&&a.max.z<=this.max.z},getParameter:function(a, -b){return(b||new q).set((a.x-this.min.x)/(this.max.x-this.min.x),(a.y-this.min.y)/(this.max.y-this.min.y),(a.z-this.min.z)/(this.max.z-this.min.z))},intersectsBox:function(a){return a.max.xthis.max.x||a.max.ythis.max.y||a.max.zthis.max.z?!1:!0},intersectsSphere:function(){var a;return function(b){void 0===a&&(a=new q);this.clampPoint(b.center,a);return a.distanceToSquared(b.center)<=b.radius*b.radius}}(),intersectsPlane:function(a){var b, -c;0=a.constant},clampPoint:function(a,b){return(b||new q).copy(a).clamp(this.min,this.max)},distanceToPoint:function(){var a=new q; -return function(b){return a.copy(b).clamp(this.min,this.max).sub(b).length()}}(),getBoundingSphere:function(){var a=new q;return function(b){b=b||new Na;this.getCenter(b.center);b.radius=.5*this.getSize(a).length();return b}}(),intersect:function(a){this.min.max(a.min);this.max.min(a.max);this.isEmpty()&&this.makeEmpty();return this},union:function(a){this.min.min(a.min);this.max.max(a.max);return this},applyMatrix4:function(){var a=[new q,new q,new q,new q,new q,new q,new q,new q];return function(b){if(this.isEmpty())return this; -a[0].set(this.min.x,this.min.y,this.min.z).applyMatrix4(b);a[1].set(this.min.x,this.min.y,this.max.z).applyMatrix4(b);a[2].set(this.min.x,this.max.y,this.min.z).applyMatrix4(b);a[3].set(this.min.x,this.max.y,this.max.z).applyMatrix4(b);a[4].set(this.max.x,this.min.y,this.min.z).applyMatrix4(b);a[5].set(this.max.x,this.min.y,this.max.z).applyMatrix4(b);a[6].set(this.max.x,this.max.y,this.min.z).applyMatrix4(b);a[7].set(this.max.x,this.max.y,this.max.z).applyMatrix4(b);this.setFromPoints(a);return this}}(), -translate:function(a){this.min.add(a);this.max.add(a);return this},equals:function(a){return a.min.equals(this.min)&&a.max.equals(this.max)}};Na.prototype={constructor:Na,set:function(a,b){this.center.copy(a);this.radius=b;return this},setFromPoints:function(){var a;return function(b,c){void 0===a&&(a=new Pa);var d=this.center;void 0!==c?d.copy(c):a.setFromPoints(b).getCenter(d);for(var e=0,f=0,g=b.length;f=this.radius},containsPoint:function(a){return a.distanceToSquared(this.center)<=this.radius*this.radius},distanceToPoint:function(a){return a.distanceTo(this.center)-this.radius},intersectsSphere:function(a){var b=this.radius+a.radius;return a.center.distanceToSquared(this.center)<=b*b},intersectsBox:function(a){return a.intersectsSphere(this)},intersectsPlane:function(a){return Math.abs(this.center.dot(a.normal)- -a.constant)<=this.radius},clampPoint:function(a,b){var c=this.center.distanceToSquared(a),d=b||new q;d.copy(a);c>this.radius*this.radius&&(d.sub(this.center).normalize(),d.multiplyScalar(this.radius).add(this.center));return d},getBoundingBox:function(a){a=a||new Pa;a.set(this.center,this.center);a.expandByScalar(this.radius);return a},applyMatrix4:function(a){this.center.applyMatrix4(a);this.radius*=a.getMaxScaleOnAxis();return this},translate:function(a){this.center.add(a);return this},equals:function(a){return a.center.equals(this.center)&& -a.radius===this.radius}};ya.prototype={constructor:ya,isMatrix3:!0,set:function(a,b,c,d,e,f,g,h,m){var k=this.elements;k[0]=a;k[1]=d;k[2]=g;k[3]=b;k[4]=e;k[5]=h;k[6]=c;k[7]=f;k[8]=m;return this},identity:function(){this.set(1,0,0,0,1,0,0,0,1);return this},clone:function(){return(new this.constructor).fromArray(this.elements)},copy:function(a){a=a.elements;this.set(a[0],a[3],a[6],a[1],a[4],a[7],a[2],a[5],a[8]);return this},setFromMatrix4:function(a){a=a.elements;this.set(a[0],a[4],a[8],a[1],a[5],a[9], -a[2],a[6],a[10]);return this},applyToBufferAttribute:function(){var a;return function(b){void 0===a&&(a=new q);for(var c=0,d=b.count;cc;c++)this.elements[c]=a[c+b];return this},toArray:function(a,b){void 0===a&&(a=[]);void 0===b&&(b=0);var c=this.elements;a[b]=c[0];a[b+1]=c[1];a[b+2]=c[2];a[b+3]=c[3];a[b+4]=c[4];a[b+5]=c[5];a[b+6]=c[6];a[b+7]=c[7];a[b+8]=c[8];return a}};la.prototype={constructor:la,set:function(a,b){this.normal.copy(a);this.constant=b;return this},setComponents:function(a,b,c,d){this.normal.set(a,b,c);this.constant=d;return this},setFromNormalAndCoplanarPoint:function(a, -b){this.normal.copy(a);this.constant=-b.dot(this.normal);return this},setFromCoplanarPoints:function(){var a=new q,b=new q;return function(c,d,e){d=a.subVectors(e,d).cross(b.subVectors(c,d)).normalize();this.setFromNormalAndCoplanarPoint(d,c);return this}}(),clone:function(){return(new this.constructor).copy(this)},copy:function(a){this.normal.copy(a.normal);this.constant=a.constant;return this},normalize:function(){var a=1/this.normal.length();this.normal.multiplyScalar(a);this.constant*=a;return this}, -negate:function(){this.constant*=-1;this.normal.negate();return this},distanceToPoint:function(a){return this.normal.dot(a)+this.constant},distanceToSphere:function(a){return this.distanceToPoint(a.center)-a.radius},projectPoint:function(a,b){return this.orthoPoint(a,b).sub(a).negate()},orthoPoint:function(a,b){var c=this.distanceToPoint(a);return(b||new q).copy(this.normal).multiplyScalar(c)},intersectLine:function(){var a=new q;return function(b,c){var d=c||new q,e=b.delta(a),f=this.normal.dot(e); -if(0===f){if(0===this.distanceToPoint(b.start))return d.copy(b.start)}else return f=-(b.start.dot(this.normal)+this.constant)/f,0>f||1b&&0a&&0c;c++)b[c].copy(a.planes[c]);return this},setFromMatrix:function(a){var b=this.planes,c=a.elements;a=c[0];var d=c[1],e=c[2],f=c[3],g=c[4],h=c[5],m=c[6],k=c[7],l=c[8],p=c[9],n=c[10],u=c[11],q=c[12],r=c[13],A=c[14],c=c[15];b[0].setComponents(f-a,k-g,u-l,c-q).normalize();b[1].setComponents(f+a,k+g,u+l,c+q).normalize();b[2].setComponents(f+d,k+h,u+p,c+r).normalize();b[3].setComponents(f- -d,k-h,u-p,c-r).normalize();b[4].setComponents(f-e,k-m,u-n,c-A).normalize();b[5].setComponents(f+e,k+m,u+n,c+A).normalize();return this},intersectsObject:function(){var a=new Na;return function(b){var c=b.geometry;null===c.boundingSphere&&c.computeBoundingSphere();a.copy(c.boundingSphere).applyMatrix4(b.matrixWorld);return this.intersectsSphere(a)}}(),intersectsSprite:function(){var a=new Na;return function(b){a.center.set(0,0,0);a.radius=.7071067811865476;a.applyMatrix4(b.matrixWorld);return this.intersectsSphere(a)}}(), -intersectsSphere:function(a){var b=this.planes,c=a.center;a=-a.radius;for(var d=0;6>d;d++)if(b[d].distanceToPoint(c)e;e++){var f=d[e];a.x=0 -g&&0>f)return!1}return!0}}(),containsPoint:function(a){for(var b=this.planes,c=0;6>c;c++)if(0>b[c].distanceToPoint(a))return!1;return!0}};cb.prototype={constructor:cb,set:function(a,b){this.origin.copy(a);this.direction.copy(b);return this},clone:function(){return(new this.constructor).copy(this)},copy:function(a){this.origin.copy(a.origin);this.direction.copy(a.direction);return this},at:function(a,b){return(b||new q).copy(this.direction).multiplyScalar(a).add(this.origin)},lookAt:function(a){this.direction.copy(a).sub(this.origin).normalize(); -return this},recast:function(){var a=new q;return function(b){this.origin.copy(this.at(b,a));return this}}(),closestPointToPoint:function(a,b){var c=b||new q;c.subVectors(a,this.origin);var d=c.dot(this.direction);return 0>d?c.copy(this.origin):c.copy(this.direction).multiplyScalar(d).add(this.origin)},distanceToPoint:function(a){return Math.sqrt(this.distanceSqToPoint(a))},distanceSqToPoint:function(){var a=new q;return function(b){var c=a.subVectors(b,this.origin).dot(this.direction);if(0>c)return this.origin.distanceToSquared(b); -a.copy(this.direction).multiplyScalar(c).add(this.origin);return a.distanceToSquared(b)}}(),distanceSqToSegment:function(){var a=new q,b=new q,c=new q;return function(d,e,f,g){a.copy(d).add(e).multiplyScalar(.5);b.copy(e).sub(d).normalize();c.copy(this.origin).sub(a);var h=.5*d.distanceTo(e),m=-this.direction.dot(b),k=c.dot(this.direction),l=-c.dot(b),p=c.lengthSq(),n=Math.abs(1-m*m),u;0=-u?e<=u?(h=1/n,d*=h,e*=h,m=d*(d+m*e+2*k)+e*(m*d+e+2*l)+p):(e=h,d=Math.max(0,-(m* -e+k)),m=-d*d+e*(e+2*l)+p):(e=-h,d=Math.max(0,-(m*e+k)),m=-d*d+e*(e+2*l)+p):e<=-u?(d=Math.max(0,-(-m*h+k)),e=0f)return null;f=Math.sqrt(f-e);e=d-f;d+=f;return 0>e&&0>d?null:0>e?this.at(d,c):this.at(e,c)}}(),intersectsSphere:function(a){return this.distanceToPoint(a.center)<=a.radius},distanceToPlane:function(a){var b=a.normal.dot(this.direction);if(0===b)return 0===a.distanceToPoint(this.origin)?0:null;a=-(this.origin.dot(a.normal)+a.constant)/b;return 0<=a?a:null},intersectPlane:function(a, -b){var c=this.distanceToPlane(a);return null===c?null:this.at(c,b)},intersectsPlane:function(a){var b=a.distanceToPoint(this.origin);return 0===b||0>a.normal.dot(this.direction)*b?!0:!1},intersectBox:function(a,b){var c,d,e,f,g;d=1/this.direction.x;f=1/this.direction.y;g=1/this.direction.z;var h=this.origin;0<=d?(c=(a.min.x-h.x)*d,d*=a.max.x-h.x):(c=(a.max.x-h.x)*d,d*=a.min.x-h.x);0<=f?(e=(a.min.y-h.y)*f,f*=a.max.y-h.y):(e=(a.max.y-h.y)*f,f*=a.min.y-h.y);if(c>f||e>d)return null;if(e>c||c!==c)c=e; -if(fg||e>d)return null;if(e>c||c!==c)c=e;if(gd?null:this.at(0<=c?c:d,b)},intersectsBox:function(){var a=new q;return function(b){return null!==this.intersectBox(b,a)}}(),intersectTriangle:function(){var a=new q,b=new q,c=new q,d=new q;return function(e,f,g,h,m){b.subVectors(f,e);c.subVectors(g,e);d.crossVectors(b,c);f=this.direction.dot(d);if(0f)h= --1,f=-f;else return null;a.subVectors(this.origin,e);e=h*this.direction.dot(c.crossVectors(a,c));if(0>e)return null;g=h*this.direction.dot(b.cross(a));if(0>g||e+g>f)return null;e=-h*a.dot(d);return 0>e?null:this.at(e/f,m)}}(),applyMatrix4:function(a){this.direction.add(this.origin).applyMatrix4(a);this.origin.applyMatrix4(a);this.direction.sub(this.origin);this.direction.normalize();return this},equals:function(a){return a.origin.equals(this.origin)&&a.direction.equals(this.direction)}};db.RotationOrders= -"XYZ YZX ZXY XZY YXZ ZYX".split(" ");db.DefaultOrder="XYZ";db.prototype={constructor:db,isEuler:!0,get x(){return this._x},set x(a){this._x=a;this.onChangeCallback()},get y(){return this._y},set y(a){this._y=a;this.onChangeCallback()},get z(){return this._z},set z(a){this._z=a;this.onChangeCallback()},get order(){return this._order},set order(a){this._order=a;this.onChangeCallback()},set:function(a,b,c,d){this._x=a;this._y=b;this._z=c;this._order=d||this._order;this.onChangeCallback();return this}, -clone:function(){return new this.constructor(this._x,this._y,this._z,this._order)},copy:function(a){this._x=a._x;this._y=a._y;this._z=a._z;this._order=a._order;this.onChangeCallback();return this},setFromRotationMatrix:function(a,b,c){var d=N.clamp,e=a.elements;a=e[0];var f=e[4],g=e[8],h=e[1],m=e[5],k=e[9],l=e[2],p=e[6],e=e[10];b=b||this._order;"XYZ"===b?(this._y=Math.asin(d(g,-1,1)),.99999>Math.abs(g)?(this._x=Math.atan2(-k,e),this._z=Math.atan2(-f,a)):(this._x=Math.atan2(p,m),this._z=0)):"YXZ"=== -b?(this._x=Math.asin(-d(k,-1,1)),.99999>Math.abs(k)?(this._y=Math.atan2(g,e),this._z=Math.atan2(h,m)):(this._y=Math.atan2(-l,a),this._z=0)):"ZXY"===b?(this._x=Math.asin(d(p,-1,1)),.99999>Math.abs(p)?(this._y=Math.atan2(-l,e),this._z=Math.atan2(-f,m)):(this._y=0,this._z=Math.atan2(h,a))):"ZYX"===b?(this._y=Math.asin(-d(l,-1,1)),.99999>Math.abs(l)?(this._x=Math.atan2(p,e),this._z=Math.atan2(h,a)):(this._x=0,this._z=Math.atan2(-f,m))):"YZX"===b?(this._z=Math.asin(d(h,-1,1)),.99999>Math.abs(h)?(this._x= -Math.atan2(-k,m),this._y=Math.atan2(-l,a)):(this._x=0,this._y=Math.atan2(g,e))):"XZY"===b?(this._z=Math.asin(-d(f,-1,1)),.99999>Math.abs(f)?(this._x=Math.atan2(p,m),this._y=Math.atan2(g,a)):(this._x=Math.atan2(-k,e),this._y=0)):console.warn("THREE.Euler: .setFromRotationMatrix() given unsupported order: "+b);this._order=b;if(!1!==c)this.onChangeCallback();return this},setFromQuaternion:function(){var a;return function(b,c,d){void 0===a&&(a=new S);a.makeRotationFromQuaternion(b);return this.setFromRotationMatrix(a, -c,d)}}(),setFromVector3:function(a,b){return this.set(a.x,a.y,a.z,b||this._order)},reorder:function(){var a=new ca;return function(b){a.setFromEuler(this);return this.setFromQuaternion(a,b)}}(),equals:function(a){return a._x===this._x&&a._y===this._y&&a._z===this._z&&a._order===this._order},fromArray:function(a){this._x=a[0];this._y=a[1];this._z=a[2];void 0!==a[3]&&(this._order=a[3]);this.onChangeCallback();return this},toArray:function(a,b){void 0===a&&(a=[]);void 0===b&&(b=0);a[b]=this._x;a[b+1]= -this._y;a[b+2]=this._z;a[b+3]=this._order;return a},toVector3:function(a){return a?a.set(this._x,this._y,this._z):new q(this._x,this._y,this._z)},onChange:function(a){this.onChangeCallback=a;return this},onChangeCallback:function(){}};nd.prototype={constructor:nd,set:function(a){this.mask=1<=b.x+b.y}}();za.prototype={constructor:za,set:function(a,b,c){this.a.copy(a);this.b.copy(b);this.c.copy(c);return this},setFromPointsAndIndices:function(a,b,c,d){this.a.copy(a[b]);this.b.copy(a[c]);this.c.copy(a[d]);return this},clone:function(){return(new this.constructor).copy(this)},copy:function(a){this.a.copy(a.a);this.b.copy(a.b);this.c.copy(a.c);return this}, -area:function(){var a=new q,b=new q;return function(){a.subVectors(this.c,this.b);b.subVectors(this.a,this.b);return.5*a.cross(b).length()}}(),midpoint:function(a){return(a||new q).addVectors(this.a,this.b).add(this.c).multiplyScalar(1/3)},normal:function(a){return za.normal(this.a,this.b,this.c,a)},plane:function(a){return(a||new la).setFromCoplanarPoints(this.a,this.b,this.c)},barycoordFromPoint:function(a,b){return za.barycoordFromPoint(a,this.a,this.b,this.c,b)},containsPoint:function(a){return za.containsPoint(a, -this.a,this.b,this.c)},closestPointToPoint:function(){var a,b,c,d;return function(e,f){void 0===a&&(a=new la,b=[new hb,new hb,new hb],c=new q,d=new q);var g=f||new q,h=Infinity;a.setFromCoplanarPoints(this.a,this.b,this.c);a.projectPoint(e,c);if(!0===this.containsPoint(c))g.copy(c);else{b[0].set(this.a,this.b);b[1].set(this.b,this.c);b[2].set(this.c,this.a);for(var m=0;md;d++)if(e[d]===e[(d+1)%3]){a.push(f);break}for(f=a.length-1;0<=f;f--)for(e=a[f],this.faces.splice(e,1),c=0,g=this.faceVertexUvs.length;cb.far?null:{distance:c,point:w.clone(),object:a}}function c(c,d,e,f,k,l,p,t){g.fromBufferAttribute(f,l);h.fromBufferAttribute(f,p);m.fromBufferAttribute(f,t);if(c=b(c,d,e,g,h,m,A))k&&(n.fromBufferAttribute(k,l),u.fromBufferAttribute(k,p),G.fromBufferAttribute(k,t),c.uv=a(A,g,h,m,n,u,G)),c.face= -new ha(l,p,t,za.normal(g,h,m)),c.faceIndex=l;return c}var d=new S,e=new cb,f=new Na,g=new q,h=new q,m=new q,k=new q,l=new q,p=new q,n=new D,u=new D,G=new D,r=new q,A=new q,w=new q;return function(q,r){var v=this.geometry,w=this.material,L=this.matrixWorld;if(void 0!==w&&(null===v.boundingSphere&&v.computeBoundingSphere(),f.copy(v.boundingSphere),f.applyMatrix4(L),!1!==q.ray.intersectsSphere(f)&&(d.getInverse(L),e.copy(q.ray).applyMatrix4(d),null===v.boundingBox||!1!==e.intersectsBox(v.boundingBox)))){var C; -if(v.isBufferGeometry){var F,x,w=v.index,H=v.attributes.position,L=v.attributes.uv,D,z;if(null!==w)for(D=0,z=w.count;Dthis.scale.x*this.scale.y/4||c.push({distance:Math.sqrt(d),point:this.position, -face:null,object:this})}}(),clone:function(){return(new this.constructor(this.material)).copy(this)}});Ec.prototype=Object.assign(Object.create(x.prototype),{constructor:Ec,copy:function(a){x.prototype.copy.call(this,a,!1);a=a.levels;for(var b=0,c=a.length;b=d[e].distance)d[e- -1].object.visible=!1,d[e].object.visible=!0;else break;for(;ef||(l.applyMatrix4(this.matrixWorld), -r=d.ray.origin.distanceTo(l),rd.far||e.push({distance:r,point:h.clone().applyMatrix4(this.matrixWorld),index:g,face:null,faceIndex:null,object:this}))}else for(g=0,G=u.length/3-1;gf||(l.applyMatrix4(this.matrixWorld),r=d.ray.origin.distanceTo(l),rd.far||e.push({distance:r,point:h.clone().applyMatrix4(this.matrixWorld),index:g,face:null,faceIndex:null,object:this}))}else if(g.isGeometry)for(m=g.vertices, -k=m.length,g=0;gf||(l.applyMatrix4(this.matrixWorld),r=d.ray.origin.distanceTo(l),rd.far||e.push({distance:r,point:h.clone().applyMatrix4(this.matrixWorld),index:g,face:null,faceIndex:null,object:this}))}}}(),clone:function(){return(new this.constructor(this.geometry,this.material)).copy(this)}});ga.prototype=Object.assign(Object.create(Ua.prototype),{constructor:ga,isLineSegments:!0});Oa.prototype=Object.create(X.prototype);Oa.prototype.constructor= -Oa;Oa.prototype.isPointsMaterial=!0;Oa.prototype.copy=function(a){X.prototype.copy.call(this,a);this.color.copy(a.color);this.map=a.map;this.size=a.size;this.sizeAttenuation=a.sizeAttenuation;return this};Mb.prototype=Object.assign(Object.create(x.prototype),{constructor:Mb,isPoints:!0,raycast:function(){var a=new S,b=new cb,c=new Na;return function(d,e){function f(a,c){var f=b.distanceSqToPoint(a);if(fd.far||e.push({distance:k,distanceToRay:Math.sqrt(f),point:h.clone(),index:c,face:null,object:g})}}var g=this,h=this.geometry,m=this.matrixWorld,k=d.params.Points.threshold;null===h.boundingSphere&&h.computeBoundingSphere();c.copy(h.boundingSphere);c.applyMatrix4(m);if(!1!==d.ray.intersectsSphere(c)){a.getInverse(m);b.copy(d.ray).applyMatrix4(a);var k=k/((this.scale.x+this.scale.y+this.scale.z)/3),l=k*k,k=new q;if(h.isBufferGeometry){var p=h.index,h=h.attributes.position.array;if(null!==p)for(var n= -p.array,p=0,u=n.length;pc)return null;var d=[],e=[],f=[],g,h,m;if(0=k--){console.warn("THREE.ShapeUtils: Unable to triangulate polygon! in triangulate()");break}g=h;c<=g&&(g=0);h=g+1;c<=h&&(h=0);m=h+1;c<=m&&(m=0);var l;a:{var p,n,q,G,r,A,w,y;p=a[e[g]].x;n=a[e[g]].y;q=a[e[h]].x;G=a[e[h]].y;r=a[e[m]].x;A=a[e[m]].y;if(0>=(q- -p)*(A-n)-(G-n)*(r-p))l=!1;else{var K,v,E,x,C,F,D,H,z,J;K=r-q;v=A-G;E=p-r;x=n-A;C=q-p;F=G-n;for(l=0;l=-Number.EPSILON&&H>=-Number.EPSILON&&D>=-Number.EPSILON)){l=!1;break a}l=!0}}if(l){d.push([a[e[g]],a[e[h]],a[e[m]]]);f.push([e[g],e[h],e[m]]);g=h;for(m=h+1;mNumber.EPSILON){if(0t||t>p)return[];k=m*l-k*n;if(0>k||k>p)return[]}else{if(0c?[]:k===c?f?[]:[g]:a<=c?[g,h]:[g,m]}function f(a,b,c,d){var e=b.x-a.x,f=b.y-a.y;b=c.x-a.x;c=c.y-a.y;var g=d.x-a.x;d=d.y-a.y;a=e*c-f*b;e=e*d-f*g;return Math.abs(a)>Number.EPSILON?(b=g*c-d*b,0e&&(e=d);var g=a+1;g>d&&(g=0);d=f(h[a],h[e],h[g],k[b]);if(!d)return!1;d=k.length-1;e=b-1;0>e&&(e=d);g=b+1;g>d&&(g=0);return(d=f(k[b],k[e],k[g],h[a]))?!0:!1}function d(a,b){var c,f;for(c=0;cQ){console.log("Infinite Loop! Holes left:"+m.length+", Probably Hole outside Shape!");break}for(n=D;nm;m++)l=k[m].x+":"+k[m].y,l=p[l],void 0!==l&&(k[m]=l);return n.concat()},isClockWise:function(a){return 0>Ia.area(a)}};La.prototype=Object.create(T.prototype);La.prototype.constructor=La;La.prototype.addShapeList=function(a,b){for(var c=a.length,d=0;dNumber.EPSILON){var k=Math.sqrt(h),m=Math.sqrt(d*d+g*g),h=b.x-f/k;b=b.y+e/k;g=((c.x-g/m-h)*g-(c.y+d/m-b)*d)/(e*g-f*d);d=h+e*g-a.x;e=b+f*g-a.y;f=d*d+e*e;if(2>=f)return new D(d,e);f=Math.sqrt(f/2)}else a=!1,e>Number.EPSILON?d>Number.EPSILON&&(a=!0):e<-Number.EPSILON?d<-Number.EPSILON&&(a=!0):Math.sign(f)===Math.sign(g)&&(a=!0),a?(d=-f,f=Math.sqrt(h)):(d=e,e=f,f=Math.sqrt(h/2));return new D(d/f,e/f)} -function e(a,b){var c,d;for(R=a.length;0<=--R;){c=R;d=R-1;0>d&&(d=a.length-1);var e,f=u+2*l;for(e=0;eMath.abs(b.y-c.y)?[new D(b.x,1-b.z),new D(c.x,1-c.z),new D(d.x,1-d.z),new D(e.x,1-e.z)]:[new D(b.y,1-b.z),new D(c.y,1-c.z),new D(d.y,1-d.z),new D(e.y,1-e.z)]}};Qc.prototype=Object.create(La.prototype);Qc.prototype.constructor=Qc;Rc.prototype=Object.create(T.prototype);Rc.prototype.constructor=Rc;pb.prototype=Object.create(I.prototype);pb.prototype.constructor=pb;Sc.prototype=Object.create(T.prototype);Sc.prototype.constructor= -Sc;Wb.prototype=Object.create(I.prototype);Wb.prototype.constructor=Wb;Tc.prototype=Object.create(T.prototype);Tc.prototype.constructor=Tc;Xb.prototype=Object.create(I.prototype);Xb.prototype.constructor=Xb;Yb.prototype=Object.create(T.prototype);Yb.prototype.constructor=Yb;Zb.prototype=Object.create(I.prototype);Zb.prototype.constructor=Zb;$b.prototype=Object.create(I.prototype);$b.prototype.constructor=$b;qb.prototype=Object.create(T.prototype);qb.prototype.constructor=qb;Va.prototype=Object.create(I.prototype); -Va.prototype.constructor=Va;Uc.prototype=Object.create(qb.prototype);Uc.prototype.constructor=Uc;Vc.prototype=Object.create(Va.prototype);Vc.prototype.constructor=Vc;Wc.prototype=Object.create(T.prototype);Wc.prototype.constructor=Wc;ac.prototype=Object.create(I.prototype);ac.prototype.constructor=ac;var Ma=Object.freeze({WireframeGeometry:Ob,ParametricGeometry:Hc,ParametricBufferGeometry:Pb,TetrahedronGeometry:Jc,TetrahedronBufferGeometry:Qb,OctahedronGeometry:Kc,OctahedronBufferGeometry:ob,IcosahedronGeometry:Lc, -IcosahedronBufferGeometry:Rb,DodecahedronGeometry:Mc,DodecahedronBufferGeometry:Sb,PolyhedronGeometry:Ic,PolyhedronBufferGeometry:Ba,TubeGeometry:Nc,TubeBufferGeometry:Tb,TorusKnotGeometry:Oc,TorusKnotBufferGeometry:Ub,TorusGeometry:Pc,TorusBufferGeometry:Vb,TextGeometry:Qc,SphereGeometry:Rc,SphereBufferGeometry:pb,RingGeometry:Sc,RingBufferGeometry:Wb,PlaneGeometry:Ac,PlaneBufferGeometry:lb,LatheGeometry:Tc,LatheBufferGeometry:Xb,ShapeGeometry:Yb,ShapeBufferGeometry:Zb,ExtrudeGeometry:La,EdgesGeometry:$b, -ConeGeometry:Uc,ConeBufferGeometry:Vc,CylinderGeometry:qb,CylinderBufferGeometry:Va,CircleGeometry:Wc,CircleBufferGeometry:ac,BoxGeometry:Ib,BoxBufferGeometry:kb});bc.prototype=Object.create(Ha.prototype);bc.prototype.constructor=bc;bc.prototype.isShadowMaterial=!0;cc.prototype=Object.create(Ha.prototype);cc.prototype.constructor=cc;cc.prototype.isRawShaderMaterial=!0;Xc.prototype={constructor:Xc,isMultiMaterial:!0,toJSON:function(a){for(var b={metadata:{version:4.2,type:"material",generator:"MaterialExporter"}, -uuid:this.uuid,type:this.type,materials:[]},c=this.materials,d=0,e=c.length;d=e)break a;else{f=b[1];a=e)break b}d=c;c=0}}for(;c>>1,ab;)--f;++f;if(0!==e||f!==d)e>=f&&(f=Math.max(f,1),e=f-1),d=this.getValueSize(),this.times=na.arraySlice(c,e,f),this.values=na.arraySlice(this.values,e*d,f*d);return this},validate:function(){var a=!0,b=this.getValueSize();0!==b-Math.floor(b)&&(console.error("invalid value size in track",this),a=!1);var c=this.times,b=this.values,d=c.length;0===d&&(console.error("track is empty", -this),a=!1);for(var e=null,f=0;f!==d;f++){var g=c[f];if("number"===typeof g&&isNaN(g)){console.error("time is not a valid number",this,f,g);a=!1;break}if(null!==e&&e>g){console.error("out of order keys",this,f,g,e);a=!1;break}e=g}if(void 0!==b&&na.isTypedArray(b))for(f=0,c=b.length;f!==c;++f)if(d=b[f],isNaN(d)){console.error("value is not a valid number",this,f,d);a=!1;break}return a},optimize:function(){for(var a=this.times,b=this.values,c=this.getValueSize(),d=2302===this.getInterpolation(),e=1, -f=a.length-1,g=1;gk.opacity&&(k.transparent=!0);d.setTextures(m);return d.parse(k)}}()};zb.Handlers={handlers:[],add:function(a,b){this.handlers.push(a,b)},get:function(a){for(var b=this.handlers,c=0,d=b.length;cg;g++)n=y[m++],w=A[2*n],n=A[2*n+1],w=new D(w,n),2!==g&&c.faceVertexUvs[d][h].push(w),0!==g&&c.faceVertexUvs[d][h+1].push(w);p&&(p=3*y[m++],u.normal.set(x[p++],x[p++],x[p]), -r.normal.copy(u.normal));if(G)for(d=0;4>d;d++)p=3*y[m++],G=new q(x[p++],x[p++],x[p]),2!==d&&u.vertexNormals.push(G),0!==d&&r.vertexNormals.push(G);l&&(l=y[m++],l=v[l],u.color.setHex(l),r.color.setHex(l));if(b)for(d=0;4>d;d++)l=y[m++],l=v[l],2!==d&&u.vertexColors.push(new J(l)),0!==d&&r.vertexColors.push(new J(l));c.faces.push(u);c.faces.push(r)}else{u=new ha;u.a=y[m++];u.b=y[m++];u.c=y[m++];h&&(h=y[m++],u.materialIndex=h);h=c.faces.length;if(d)for(d=0;dg;g++)n=y[m++],w=A[2*n],n=A[2*n+1],w=new D(w,n),c.faceVertexUvs[d][h].push(w);p&&(p=3*y[m++],u.normal.set(x[p++],x[p++],x[p]));if(G)for(d=0;3>d;d++)p=3*y[m++],G=new q(x[p++],x[p++],x[p]),u.vertexNormals.push(G);l&&(l=y[m++],u.color.setHex(v[l]));if(b)for(d=0;3>d;d++)l=y[m++],u.vertexColors.push(new J(v[l]));c.faces.push(u)}})(d);(function(){var b=void 0!==a.influencesPerVertex?a.influencesPerVertex:2;if(a.skinWeights)for(var d=0,g=a.skinWeights.length;dm)g=d+1;else if(0b&&(b=0);1Number.EPSILON&&(g.normalize(),c=Math.acos(N.clamp(d[m-1].dot(d[m]),-1,1)),e[m].applyMatrix4(h.makeRotationAxis(g,c))),f[m].crossVectors(d[m],e[m]);if(!0===b)for(c=Math.acos(N.clamp(e[0].dot(e[a]),-1,1)),c/=a,0=b)return b=c[a]-b,a=this.curves[a],c=a.getLength(),a.getPointAt(0===c?0:1-b/c);a++}return null},getLength:function(){var a=this.getCurveLengths();return a[a.length-1]},updateArcLengths:function(){this.needsUpdate= -!0;this.cacheLengths=null;this.getLengths()},getCurveLengths:function(){if(this.cacheLengths&&this.cacheLengths.length===this.curves.length)return this.cacheLengths;for(var a=[],b=0,c=0,d=this.curves.length;cc;)c+=b;for(;c>b;)c-=b;cb.length-2?b.length-1:a+1],b=b[a>b.length-3?b.length-1:a+2];return new D(Te(c,d.x,e.x,f.x,b.x),Te(c,d.y,e.y,f.y,b.y))};fc.prototype=Object.create(ua.prototype);fc.prototype.constructor= -fc;fc.prototype.getPoint=function(a){var b=this.v0,c=this.v1,d=this.v2,e=this.v3;return new D(Bb(a,b.x,c.x,d.x,e.x),Bb(a,b.y,c.y,d.y,e.y))};gc.prototype=Object.create(ua.prototype);gc.prototype.constructor=gc;gc.prototype.getPoint=function(a){var b=this.v0,c=this.v1,d=this.v2;return new D(Ab(a,b.x,c.x,d.x),Ab(a,b.y,c.y,d.y))};var xe=Object.assign(Object.create(ad.prototype),{fromPoints:function(a){this.moveTo(a[0].x,a[0].y);for(var b=1,c=a.length;bNumber.EPSILON){if(0>m&&(g=b[f],k=-k,h=b[e],m=-m),!(a.yh.y))if(a.y===g.y){if(a.x===g.x)return!0}else{e=m*(a.x-g.x)-k*(a.y-g.y);if(0===e)return!0;0>e||(d=!d)}}else if(a.y===g.y&&(h.x<=a.x&&a.x<=g.x||g.x<=a.x&&a.x<=h.x))return!0}return d}var e=Ia.isClockWise,f=this.subPaths;if(0===f.length)return[];if(!0===b)return c(f);var g,h,m,k=[];if(1===f.length)return h=f[0],m=new Db,m.curves=h.curves,k.push(m),k;var l=!e(f[0].getPoints()),l=a?!l:l;m=[];var p= -[],n=[],q=0,x;p[q]=void 0;n[q]=[];for(var r=0,A=f.length;rd&&this._mixBufferRegion(c,a,3*b,1-d,b);for(var d=b,f=b+b;d!==f;++d)if(c[d]!==c[d+b]){e.setValue(c,a);break}}, -saveOriginalState:function(){var a=this.buffer,b=this.valueSize,c=3*b;this.binding.getValue(a,c);for(var d=b;d!==c;++d)a[d]=a[c+d%b];this.cumulativeWeight=0},restoreOriginalState:function(){this.binding.setValue(this.buffer,3*this.valueSize)},_select:function(a,b,c,d,e){if(.5<=d)for(d=0;d!==e;++d)a[b+d]=a[c+d]},_slerp:function(a,b,c,d,e){ca.slerpFlat(a,b,a,b,a,c,d)},_lerp:function(a,b,c,d,e){for(var f=1-d,g=0;g!==e;++g){var h=b+g;a[h]=a[h]*f+a[c+g]*d}}};ka.prototype={constructor:ka,getValue:function(a, -b){this.bind();this.getValue(a,b)},setValue:function(a,b){this.bind();this.setValue(a,b)},bind:function(){var a=this.node,b=this.parsedPath,c=b.objectName,d=b.propertyName,e=b.propertyIndex;a||(this.node=a=ka.findNode(this.rootNode,b.nodeName)||this.rootNode);this.getValue=this._getValue_unavailable;this.setValue=this._setValue_unavailable;if(a){if(c){var f=b.objectIndex;switch(c){case "materials":if(!a.material){console.error(" can not bind to material as node does not have a material",this);return}if(!a.material.materials){console.error(" can not bind to material.materials as node.material does not have a materials array", -this);return}a=a.material.materials;break;case "bones":if(!a.skeleton){console.error(" can not bind to bones as node does not have a skeleton",this);return}a=a.skeleton.bones;for(c=0;c=c){var p=c++,n=b[p];d[n.uuid]=l;b[l]=n;d[k]=p;b[p]=m;m=0;for(k=f;m!==k;++m){var n=e[m],q=n[l];n[l]=n[p];n[p]=q}}}this.nCachedObjects_=c},uncache:function(a){for(var b=this._objects,c=b.length,d=this.nCachedObjects_,e=this._indicesByUUID,f=this._bindings,g=f.length,h=0,m=arguments.length;h!==m;++h){var k=arguments[h].uuid,l=e[k]; -if(void 0!==l)if(delete e[k],lb||0===c)return;this._startTime=null;b*=c}b*=this._updateTimeScale(a);c=this._updateTime(b);a=this._updateWeight(a);if(0c.parameterPositions[1]&& -(this.stopFading(),0===d&&(this.enabled=!1))}}return this._effectiveWeight=b},_updateTimeScale:function(a){var b=0;if(!this.paused){var b=this.timeScale,c=this._timeScaleInterpolant;if(null!==c){var d=c.evaluate(a)[0],b=b*d;a>c.parameterPositions[1]&&(this.stopWarping(),0===b?this.paused=!0:this.timeScale=b)}}return this._effectiveTimeScale=b},_updateTime:function(a){var b=this.time+a;if(0===a)return b;var c=this._clip.duration,d=this.loop,e=this._loopCount;if(2200===d)a:{if(-1===e&&(this._loopCount= -0,this._setEndings(!0,!0,!1)),b>=c)b=c;else if(0>b)b=0;else break a;this.clampWhenFinished?this.paused=!0:this.enabled=!1;this._mixer.dispatchEvent({type:"finished",action:this,direction:0>a?-1:1})}else{d=2202===d;-1===e&&(0<=a?(e=0,this._setEndings(!0,0===this.repetitions,d)):this._setEndings(0===this.repetitions,!0,d));if(b>=c||0>b){var f=Math.floor(b/c),b=b-c*f,e=e+Math.abs(f),g=this.repetitions-e;0>g?(this.clampWhenFinished?this.paused=!0:this.enabled=!1,b=0a,this._setEndings(a,!a,d)):this._setEndings(!1,!1,d),this._loopCount=e,this._mixer.dispatchEvent({type:"loop",action:this,loopDelta:f}))}if(d&&1===(e&1))return this.time=b,c-b}return this.time=b},_setEndings:function(a,b,c){var d=this._interpolantSettings;c?(d.endingStart=2401,d.endingEnd=2401):(d.endingStart=a?this.zeroSlopeAtStart?2401:2400:2402,d.endingEnd=b?this.zeroSlopeAtEnd?2401:2400:2402)},_scheduleFading:function(a,b,c){var d=this._mixer,e=d.time, -f=this._weightInterpolant;null===f&&(this._weightInterpolant=f=d._lendControlInterpolant());d=f.parameterPositions;f=f.sampleValues;d[0]=e;f[0]=b;d[1]=e+a;f[1]=c;return this}};cd.prototype={constructor:cd,clipAction:function(a,b){var c=b||this._root,d=c.uuid,e="string"===typeof a?qa.findByName(c,a):a,c=null!==e?e.uuid:a,f=this._actionsByClip[c],g=null;if(void 0!==f){g=f.actionByRoot[d];if(void 0!==g)return g;g=f.knownActions[0];null===e&&(e=g._clip)}if(null===e)return null;e=new ne(this,e,b);this._bindAction(e, -g);this._addInactiveAction(e,c,d);return e},existingAction:function(a,b){var c=b||this._root,d=c.uuid,c="string"===typeof a?qa.findByName(c,a):a,c=this._actionsByClip[c?c.uuid:a];return void 0!==c?c.actionByRoot[d]||null:null},stopAllAction:function(){for(var a=this._actions,b=this._nActiveActions,c=this._bindings,d=this._nActiveBindings,e=this._nActiveBindings=this._nActiveActions=0;e!==b;++e)a[e].reset();for(e=0;e!==d;++e)c[e].useCount=0;return this},update:function(a){a*=this.timeScale;for(var b= -this._actions,c=this._nActiveActions,d=this.time+=a,e=Math.sign(a),f=this._accuIndex^=1,g=0;g!==c;++g){var h=b[g];h.enabled&&h._update(d,a,e,f)}a=this._bindings;b=this._nActiveBindings;for(g=0;g!==b;++g)a[g].apply(f);return this},getRoot:function(){return this._root},uncacheClip:function(a){var b=this._actions;a=a.uuid;var c=this._actionsByClip,d=c[a];if(void 0!==d){for(var d=d.knownActions,e=0,f=d.length;e!==f;++e){var g=d[e];this._deactivateAction(g);var h=g._cacheIndex,l=b[b.length-1];g._cacheIndex= -null;g._byClipCacheIndex=null;l._cacheIndex=h;b[h]=l;b.pop();this._removeInactiveBindingsForAction(g)}delete c[a]}},uncacheRoot:function(a){a=a.uuid;var b=this._actionsByClip,c;for(c in b){var d=b[c].actionByRoot[a];void 0!==d&&(this._deactivateAction(d),this._removeInactiveAction(d))}c=this._bindingsByRootAndName[a];if(void 0!==c)for(var e in c)a=c[e],a.restoreOriginalState(),this._removeInactiveBinding(a)},uncacheAction:function(a,b){var c=this.existingAction(a,b);null!==c&&(this._deactivateAction(c), -this._removeInactiveAction(c))}};Object.assign(cd.prototype,{_bindAction:function(a,b){var c=a._localRoot||this._root,d=a._clip.tracks,e=d.length,f=a._propertyBindings,g=a._interpolants,h=c.uuid,l=this._bindingsByRootAndName,k=l[h];void 0===k&&(k={},l[h]=k);for(l=0;l!==e;++l){var q=d[l],p=q.name,n=k[p];if(void 0===n){n=f[l];if(void 0!==n){null===n._cacheIndex&&(++n.referenceCount,this._addInactiveBinding(n,h,p));continue}n=new Jd(ka.create(c,p,b&&b._propertyBindings[l].binding.parsedPath),q.ValueTypeName, -q.getValueSize());++n.referenceCount;this._addInactiveBinding(n,h,p)}f[l]=n;g[l].resultBuffer=n.buffer}},_activateAction:function(a){if(!this._isActiveAction(a)){if(null===a._cacheIndex){var b=(a._localRoot||this._root).uuid,c=a._clip.uuid,d=this._actionsByClip[c];this._bindAction(a,d&&d.knownActions[0]);this._addInactiveAction(a,c,b)}b=a._propertyBindings;c=0;for(d=b.length;c!==d;++c){var e=b[c];0===e.useCount++&&(this._lendBinding(e),e.saveOriginalState())}this._lendAction(a)}},_deactivateAction:function(a){if(this._isActiveAction(a)){for(var b= -a._propertyBindings,c=0,d=b.length;c!==d;++c){var e=b[c];0===--e.useCount&&(e.restoreOriginalState(),this._takeBackBinding(e))}this._takeBackAction(a)}},_initMemoryManager:function(){this._actions=[];this._nActiveActions=0;this._actionsByClip={};this._bindings=[];this._nActiveBindings=0;this._bindingsByRootAndName={};this._controlInterpolants=[];this._nActiveControlInterpolants=0;var a=this;this.stats={actions:{get total(){return a._actions.length},get inUse(){return a._nActiveActions}},bindings:{get total(){return a._bindings.length}, -get inUse(){return a._nActiveBindings}},controlInterpolants:{get total(){return a._controlInterpolants.length},get inUse(){return a._nActiveControlInterpolants}}}},_isActiveAction:function(a){a=a._cacheIndex;return null!==a&&ah.end&&(h.end=f);c||(c=l)}}for(l in d)h=d[l],this.createAnimation(l,h.start,h.end,a);this.firstAnimation=c};oa.prototype.setAnimationDirectionForward=function(a){if(a=this.animationsMap[a])a.direction=1,a.directionBackwards=!1};oa.prototype.setAnimationDirectionBackward=function(a){if(a=this.animationsMap[a])a.direction=-1,a.directionBackwards=!0};oa.prototype.setAnimationFPS= -function(a,b){var c=this.animationsMap[a];c&&(c.fps=b,c.duration=(c.end-c.start)/c.fps)};oa.prototype.setAnimationDuration=function(a,b){var c=this.animationsMap[a];c&&(c.duration=b,c.fps=(c.end-c.start)/c.duration)};oa.prototype.setAnimationWeight=function(a,b){var c=this.animationsMap[a];c&&(c.weight=b)};oa.prototype.setAnimationTime=function(a,b){var c=this.animationsMap[a];c&&(c.time=b)};oa.prototype.getAnimationTime=function(a){var b=0;if(a=this.animationsMap[a])b=a.time;return b};oa.prototype.getAnimationDuration= -function(a){var b=-1;if(a=this.animationsMap[a])b=a.duration;return b};oa.prototype.playAnimation=function(a){var b=this.animationsMap[a];b?(b.time=0,b.active=!0):console.warn("THREE.MorphBlendMesh: animation["+a+"] undefined in .playAnimation()")};oa.prototype.stopAnimation=function(a){if(a=this.animationsMap[a])a.active=!1};oa.prototype.update=function(a){for(var b=0,c=this.animationsList.length;b -d.duration||0>d.time)d.direction*=-1,d.time>d.duration&&(d.time=d.duration,d.directionBackwards=!0),0>d.time&&(d.time=0,d.directionBackwards=!1)}else d.time%=d.duration,0>d.time&&(d.time+=d.duration);var f=d.start+N.clamp(Math.floor(d.time/e),0,d.length-1),g=d.weight;f!==d.currentFrame&&(this.morphTargetInfluences[d.lastFrame]=0,this.morphTargetInfluences[d.currentFrame]=1*g,this.morphTargetInfluences[f]=0,d.lastFrame=d.currentFrame,d.currentFrame=f);e=d.time%e/e;d.directionBackwards&&(e=1-e);d.currentFrame!== -d.lastFrame?(this.morphTargetInfluences[d.currentFrame]=e*g,this.morphTargetInfluences[d.lastFrame]=(1-e)*g):this.morphTargetInfluences[d.currentFrame]=g}}};dd.prototype=Object.create(x.prototype);dd.prototype.constructor=dd;dd.prototype.isImmediateRenderObject=!0;ed.prototype=Object.create(ga.prototype);ed.prototype.constructor=ed;ed.prototype.update=function(){var a=new q,b=new q,c=new ya;return function(){var d=["a","b","c"];this.object.updateMatrixWorld(!0);c.getNormalMatrix(this.object.matrixWorld); -var e=this.object.matrixWorld,f=this.geometry.attributes.position,g=this.object.geometry;if(g&&g.isGeometry)for(var h=g.vertices,l=g.faces,k=g=0,q=l.length;kc.y?this.quaternion.set(1, -0,0,0):(a.set(c.z,0,-c.x).normalize(),b=Math.acos(c.y),this.quaternion.setFromAxisAngle(a,b))}}();Fb.prototype.setLength=function(a,b,c){void 0===b&&(b=.2*a);void 0===c&&(c=.2*b);this.line.scale.set(1,Math.max(0,a-b),1);this.line.updateMatrix();this.cone.scale.set(c,b,c);this.cone.position.y=a;this.cone.updateMatrix()};Fb.prototype.setColor=function(a){this.line.material.color.copy(a);this.cone.material.color.copy(a)};Nd.prototype=Object.create(ga.prototype);Nd.prototype.constructor=Nd;var Qd=new q, -ye=new ve,ze=new ve,Ae=new ve;va.prototype=Object.create(ua.prototype);va.prototype.constructor=va;va.prototype.getPoint=function(a){var b=this.points,c=b.length;2>c&&console.log("duh, you need at least 2 points");a*=c-(this.closed?0:1);var d=Math.floor(a);a-=d;this.closed?d+=0d&&(d=1);1E-4>c&&(c=d);1E-4>h&&(h=d);ye.initNonuniformCatmullRom(e.x,f.x,g.x,b.x,c,d,h);ze.initNonuniformCatmullRom(e.y,f.y,g.y,b.y,c,d,h);Ae.initNonuniformCatmullRom(e.z,f.z,g.z,b.z,c,d,h)}else"catmullrom"===this.type&&(c=void 0!==this.tension?this.tension: -.5,ye.initCatmullRom(e.x,f.x,g.x,b.x,c),ze.initCatmullRom(e.y,f.y,g.y,b.y,c),Ae.initCatmullRom(e.z,f.z,g.z,b.z,c));return new q(ye.calc(a),ze.calc(a),Ae.calc(a))};id.prototype=Object.create(ua.prototype);id.prototype.constructor=id;id.prototype.getPoint=function(a){var b=this.v0,c=this.v1,d=this.v2,e=this.v3;return new q(Bb(a,b.x,c.x,d.x,e.x),Bb(a,b.y,c.y,d.y,e.y),Bb(a,b.z,c.z,d.z,e.z))};jd.prototype=Object.create(ua.prototype);jd.prototype.constructor=jd;jd.prototype.getPoint=function(a){var b=this.v0, -c=this.v1,d=this.v2;return new q(Ab(a,b.x,c.x,d.x),Ab(a,b.y,c.y,d.y),Ab(a,b.z,c.z,d.z))};kd.prototype=Object.create(ua.prototype);kd.prototype.constructor=kd;kd.prototype.getPoint=function(a){if(1===a)return this.v2.clone();var b=new q;b.subVectors(this.v2,this.v1);b.multiplyScalar(a);b.add(this.v1);return b};Od.prototype=Object.create(Wa.prototype);Od.prototype.constructor=Od;ua.create=function(a,b){console.log("THREE.Curve.create() has been deprecated");a.prototype=Object.create(ua.prototype);a.prototype.constructor= -a;a.prototype.getPoint=b;return a};Xe.prototype=Object.create(va.prototype);Ye.prototype=Object.create(va.prototype);we.prototype=Object.create(va.prototype);Object.assign(we.prototype,{initFromArray:function(a){console.error("THREE.Spline: .initFromArray() has been removed.")},getControlPointsArray:function(a){console.error("THREE.Spline: .getControlPointsArray() has been removed.")},reparametrizeByArcLength:function(a){console.error("THREE.Spline: .reparametrizeByArcLength() has been removed.")}}); -fd.prototype.setColors=function(){console.error("THREE.GridHelper: setColors() has been deprecated, pass them in the constructor instead.")};Object.assign(sc.prototype,{center:function(a){console.warn("THREE.Box2: .center() has been renamed to .getCenter().");return this.getCenter(a)},empty:function(){console.warn("THREE.Box2: .empty() has been renamed to .isEmpty().");return this.isEmpty()},isIntersectionBox:function(a){console.warn("THREE.Box2: .isIntersectionBox() has been renamed to .intersectsBox()."); -return this.intersectsBox(a)},size:function(a){console.warn("THREE.Box2: .size() has been renamed to .getSize().");return this.getSize(a)}});Object.assign(Pa.prototype,{center:function(a){console.warn("THREE.Box3: .center() has been renamed to .getCenter().");return this.getCenter(a)},empty:function(){console.warn("THREE.Box3: .empty() has been renamed to .isEmpty().");return this.isEmpty()},isIntersectionBox:function(a){console.warn("THREE.Box3: .isIntersectionBox() has been renamed to .intersectsBox()."); -return this.intersectsBox(a)},isIntersectionSphere:function(a){console.warn("THREE.Box3: .isIntersectionSphere() has been renamed to .intersectsSphere().");return this.intersectsSphere(a)},size:function(a){console.warn("THREE.Box3: .size() has been renamed to .getSize().");return this.getSize(a)}});hb.prototype.center=function(a){console.warn("THREE.Line3: .center() has been renamed to .getCenter().");return this.getCenter(a)};N.random16=function(){console.warn("THREE.Math.random16() has been deprecated. Use Math.random() instead."); -return Math.random()};Object.assign(ya.prototype,{flattenToArrayOffset:function(a,b){console.warn("THREE.Matrix3: .flattenToArrayOffset() has been deprecated. Use .toArray() instead.");return this.toArray(a,b)},multiplyVector3:function(a){console.warn("THREE.Matrix3: .multiplyVector3() has been removed. Use vector.applyMatrix3( matrix ) instead.");return a.applyMatrix3(this)},multiplyVector3Array:function(a){console.warn("THREE.Matrix3: .multiplyVector3Array() has been renamed. Use matrix.applyToVector3Array( array ) instead."); -return this.applyToVector3Array(a)},applyToBuffer:function(a,b,c){console.warn("THREE.Matrix3: .applyToBuffer() has been removed. Use matrix.applyToBufferAttribute( attribute ) instead.");return this.applyToBufferAttribute(a)},applyToVector3Array:function(a,b,c){console.error("THREE.Matrix3: .applyToVector3Array() has been removed.")}});Object.assign(S.prototype,{extractPosition:function(a){console.warn("THREE.Matrix4: .extractPosition() has been renamed to .copyPosition().");return this.copyPosition(a)}, -flattenToArrayOffset:function(a,b){console.warn("THREE.Matrix4: .flattenToArrayOffset() has been deprecated. Use .toArray() instead.");return this.toArray(a,b)},getPosition:function(){var a;return function(){void 0===a&&(a=new q);console.warn("THREE.Matrix4: .getPosition() has been removed. Use Vector3.setFromMatrixPosition( matrix ) instead.");return a.setFromMatrixColumn(this,3)}}(),setRotationFromQuaternion:function(a){console.warn("THREE.Matrix4: .setRotationFromQuaternion() has been renamed to .makeRotationFromQuaternion()."); -return this.makeRotationFromQuaternion(a)},multiplyVector3:function(a){console.warn("THREE.Matrix4: .multiplyVector3() has been removed. Use vector.applyMatrix4( matrix ) instead.");return a.applyMatrix4(this)},multiplyVector4:function(a){console.warn("THREE.Matrix4: .multiplyVector4() has been removed. Use vector.applyMatrix4( matrix ) instead.");return a.applyMatrix4(this)},multiplyVector3Array:function(a){console.warn("THREE.Matrix4: .multiplyVector3Array() has been renamed. Use matrix.applyToVector3Array( array ) instead."); -return this.applyToVector3Array(a)},rotateAxis:function(a){console.warn("THREE.Matrix4: .rotateAxis() has been removed. Use Vector3.transformDirection( matrix ) instead.");a.transformDirection(this)},crossVector:function(a){console.warn("THREE.Matrix4: .crossVector() has been removed. Use vector.applyMatrix4( matrix ) instead.");return a.applyMatrix4(this)},translate:function(){console.error("THREE.Matrix4: .translate() has been removed.")},rotateX:function(){console.error("THREE.Matrix4: .rotateX() has been removed.")}, -rotateY:function(){console.error("THREE.Matrix4: .rotateY() has been removed.")},rotateZ:function(){console.error("THREE.Matrix4: .rotateZ() has been removed.")},rotateByAxis:function(){console.error("THREE.Matrix4: .rotateByAxis() has been removed.")},applyToBuffer:function(a,b,c){console.warn("THREE.Matrix4: .applyToBuffer() has been removed. Use matrix.applyToBufferAttribute( attribute ) instead.");return this.applyToBufferAttribute(a)},applyToVector3Array:function(a,b,c){console.error("THREE.Matrix4: .applyToVector3Array() has been removed.")}, -makeFrustum:function(a,b,c,d,e,f){console.warn("THREE.Matrix4: .makeFrustum() has been removed. Use .makePerspective( left, right, top, bottom, near, far ) instead.");return this.makePerspective(a,b,d,c,e,f)}});la.prototype.isIntersectionLine=function(a){console.warn("THREE.Plane: .isIntersectionLine() has been renamed to .intersectsLine().");return this.intersectsLine(a)};ca.prototype.multiplyVector3=function(a){console.warn("THREE.Quaternion: .multiplyVector3() has been removed. Use is now vector.applyQuaternion( quaternion ) instead."); -return a.applyQuaternion(this)};Object.assign(cb.prototype,{isIntersectionBox:function(a){console.warn("THREE.Ray: .isIntersectionBox() has been renamed to .intersectsBox().");return this.intersectsBox(a)},isIntersectionPlane:function(a){console.warn("THREE.Ray: .isIntersectionPlane() has been renamed to .intersectsPlane().");return this.intersectsPlane(a)},isIntersectionSphere:function(a){console.warn("THREE.Ray: .isIntersectionSphere() has been renamed to .intersectsSphere().");return this.intersectsSphere(a)}}); -Object.assign(Db.prototype,{extrude:function(a){console.warn("THREE.Shape: .extrude() has been removed. Use ExtrudeGeometry() instead.");return new La(this,a)},makeGeometry:function(a){console.warn("THREE.Shape: .makeGeometry() has been removed. Use ShapeGeometry() instead.");return new Yb(this,a)}});Object.assign(D.prototype,{fromAttribute:function(a,b,c){console.error("THREE.Vector2: .fromAttribute() has been renamed to .fromBufferAttribute().");return this.fromBufferAttribute(a,b,c)}});Object.assign(q.prototype, -{setEulerFromRotationMatrix:function(){console.error("THREE.Vector3: .setEulerFromRotationMatrix() has been removed. Use Euler.setFromRotationMatrix() instead.")},setEulerFromQuaternion:function(){console.error("THREE.Vector3: .setEulerFromQuaternion() has been removed. Use Euler.setFromQuaternion() instead.")},getPositionFromMatrix:function(a){console.warn("THREE.Vector3: .getPositionFromMatrix() has been renamed to .setFromMatrixPosition().");return this.setFromMatrixPosition(a)},getScaleFromMatrix:function(a){console.warn("THREE.Vector3: .getScaleFromMatrix() has been renamed to .setFromMatrixScale()."); -return this.setFromMatrixScale(a)},getColumnFromMatrix:function(a,b){console.warn("THREE.Vector3: .getColumnFromMatrix() has been renamed to .setFromMatrixColumn().");return this.setFromMatrixColumn(b,a)},applyProjection:function(a){console.warn("THREE.Vector3: .applyProjection() has been removed. Use .applyMatrix4( m ) instead.");return this.applyMatrix4(a)},fromAttribute:function(a,b,c){console.error("THREE.Vector3: .fromAttribute() has been renamed to .fromBufferAttribute().");return this.fromBufferAttribute(a, -b,c)}});Object.assign(fa.prototype,{fromAttribute:function(a,b,c){console.error("THREE.Vector4: .fromAttribute() has been renamed to .fromBufferAttribute().");return this.fromBufferAttribute(a,b,c)}});T.prototype.computeTangents=function(){console.warn("THREE.Geometry: .computeTangents() has been removed.")};Object.assign(x.prototype,{getChildByName:function(a){console.warn("THREE.Object3D: .getChildByName() has been renamed to .getObjectByName().");return this.getObjectByName(a)},renderDepth:function(){console.warn("THREE.Object3D: .renderDepth has been removed. Use .renderOrder, instead.")}, -translate:function(a,b){console.warn("THREE.Object3D: .translate() has been removed. Use .translateOnAxis( axis, distance ) instead.");return this.translateOnAxis(b,a)}});Object.defineProperties(x.prototype,{eulerOrder:{get:function(){console.warn("THREE.Object3D: .eulerOrder is now .rotation.order.");return this.rotation.order},set:function(a){console.warn("THREE.Object3D: .eulerOrder is now .rotation.order.");this.rotation.order=a}},useQuaternion:{get:function(){console.warn("THREE.Object3D: .useQuaternion has been removed. The library now uses quaternions by default.")}, -set:function(){console.warn("THREE.Object3D: .useQuaternion has been removed. The library now uses quaternions by default.")}}});Object.defineProperties(Ec.prototype,{objects:{get:function(){console.warn("THREE.LOD: .objects has been renamed to .levels.");return this.levels}}});Fa.prototype.setLens=function(a,b){console.warn("THREE.PerspectiveCamera.setLens is deprecated. Use .setFocalLength and .filmGauge for a photographic setup.");void 0!==b&&(this.filmGauge=b);this.setFocalLength(a)};Object.defineProperties(ma.prototype, -{onlyShadow:{set:function(){console.warn("THREE.Light: .onlyShadow has been removed.")}},shadowCameraFov:{set:function(a){console.warn("THREE.Light: .shadowCameraFov is now .shadow.camera.fov.");this.shadow.camera.fov=a}},shadowCameraLeft:{set:function(a){console.warn("THREE.Light: .shadowCameraLeft is now .shadow.camera.left.");this.shadow.camera.left=a}},shadowCameraRight:{set:function(a){console.warn("THREE.Light: .shadowCameraRight is now .shadow.camera.right.");this.shadow.camera.right=a}},shadowCameraTop:{set:function(a){console.warn("THREE.Light: .shadowCameraTop is now .shadow.camera.top."); -this.shadow.camera.top=a}},shadowCameraBottom:{set:function(a){console.warn("THREE.Light: .shadowCameraBottom is now .shadow.camera.bottom.");this.shadow.camera.bottom=a}},shadowCameraNear:{set:function(a){console.warn("THREE.Light: .shadowCameraNear is now .shadow.camera.near.");this.shadow.camera.near=a}},shadowCameraFar:{set:function(a){console.warn("THREE.Light: .shadowCameraFar is now .shadow.camera.far.");this.shadow.camera.far=a}},shadowCameraVisible:{set:function(){console.warn("THREE.Light: .shadowCameraVisible has been removed. Use new THREE.CameraHelper( light.shadow.camera ) instead.")}}, -shadowBias:{set:function(a){console.warn("THREE.Light: .shadowBias is now .shadow.bias.");this.shadow.bias=a}},shadowDarkness:{set:function(){console.warn("THREE.Light: .shadowDarkness has been removed.")}},shadowMapWidth:{set:function(a){console.warn("THREE.Light: .shadowMapWidth is now .shadow.mapSize.width.");this.shadow.mapSize.width=a}},shadowMapHeight:{set:function(a){console.warn("THREE.Light: .shadowMapHeight is now .shadow.mapSize.height.");this.shadow.mapSize.height=a}}});Object.defineProperties(U.prototype, -{length:{get:function(){console.warn("THREE.BufferAttribute: .length has been deprecated. Use .count instead.");return this.array.length}}});Object.assign(I.prototype,{addIndex:function(a){console.warn("THREE.BufferGeometry: .addIndex() has been renamed to .setIndex().");this.setIndex(a)},addDrawCall:function(a,b,c){void 0!==c&&console.warn("THREE.BufferGeometry: .addDrawCall() no longer supports indexOffset.");console.warn("THREE.BufferGeometry: .addDrawCall() is now .addGroup().");this.addGroup(a, -b)},clearDrawCalls:function(){console.warn("THREE.BufferGeometry: .clearDrawCalls() is now .clearGroups().");this.clearGroups()},computeTangents:function(){console.warn("THREE.BufferGeometry: .computeTangents() has been removed.")},computeOffsets:function(){console.warn("THREE.BufferGeometry: .computeOffsets() has been removed.")}});Object.defineProperties(I.prototype,{drawcalls:{get:function(){console.error("THREE.BufferGeometry: .drawcalls has been renamed to .groups.");return this.groups}},offsets:{get:function(){console.warn("THREE.BufferGeometry: .offsets has been renamed to .groups."); -return this.groups}}});Object.defineProperties(Kd.prototype,{dynamic:{set:function(){console.warn("THREE.Uniform: .dynamic has been removed. Use object.onBeforeRender() instead.")}},onUpdate:{value:function(){console.warn("THREE.Uniform: .onUpdate() has been removed. Use object.onBeforeRender() instead.");return this}}});Object.defineProperties(X.prototype,{wrapAround:{get:function(){console.warn("THREE."+this.type+": .wrapAround has been removed.")},set:function(){console.warn("THREE."+this.type+ -": .wrapAround has been removed.")}},wrapRGB:{get:function(){console.warn("THREE."+this.type+": .wrapRGB has been removed.");return new J}}});Object.defineProperties(Ca.prototype,{metal:{get:function(){console.warn("THREE.MeshPhongMaterial: .metal has been removed. Use THREE.MeshStandardMaterial instead.");return!1},set:function(){console.warn("THREE.MeshPhongMaterial: .metal has been removed. Use THREE.MeshStandardMaterial instead")}}});Object.defineProperties(Ha.prototype,{derivatives:{get:function(){console.warn("THREE.ShaderMaterial: .derivatives has been moved to .extensions.derivatives."); -return this.extensions.derivatives},set:function(a){console.warn("THREE. ShaderMaterial: .derivatives has been moved to .extensions.derivatives.");this.extensions.derivatives=a}}});Object.assign(Yd.prototype,{supportsFloatTextures:function(){console.warn("THREE.WebGLRenderer: .supportsFloatTextures() is now .extensions.get( 'OES_texture_float' ).");return this.extensions.get("OES_texture_float")},supportsHalfFloatTextures:function(){console.warn("THREE.WebGLRenderer: .supportsHalfFloatTextures() is now .extensions.get( 'OES_texture_half_float' )."); -return this.extensions.get("OES_texture_half_float")},supportsStandardDerivatives:function(){console.warn("THREE.WebGLRenderer: .supportsStandardDerivatives() is now .extensions.get( 'OES_standard_derivatives' ).");return this.extensions.get("OES_standard_derivatives")},supportsCompressedTextureS3TC:function(){console.warn("THREE.WebGLRenderer: .supportsCompressedTextureS3TC() is now .extensions.get( 'WEBGL_compressed_texture_s3tc' ).");return this.extensions.get("WEBGL_compressed_texture_s3tc")}, -supportsCompressedTexturePVRTC:function(){console.warn("THREE.WebGLRenderer: .supportsCompressedTexturePVRTC() is now .extensions.get( 'WEBGL_compressed_texture_pvrtc' ).");return this.extensions.get("WEBGL_compressed_texture_pvrtc")},supportsBlendMinMax:function(){console.warn("THREE.WebGLRenderer: .supportsBlendMinMax() is now .extensions.get( 'EXT_blend_minmax' ).");return this.extensions.get("EXT_blend_minmax")},supportsVertexTextures:function(){console.warn("THREE.WebGLRenderer: .supportsVertexTextures() is now .capabilities.vertexTextures."); -return this.capabilities.vertexTextures},supportsInstancedArrays:function(){console.warn("THREE.WebGLRenderer: .supportsInstancedArrays() is now .extensions.get( 'ANGLE_instanced_arrays' ).");return this.extensions.get("ANGLE_instanced_arrays")},enableScissorTest:function(a){console.warn("THREE.WebGLRenderer: .enableScissorTest() is now .setScissorTest().");this.setScissorTest(a)},initMaterial:function(){console.warn("THREE.WebGLRenderer: .initMaterial() has been removed.")},addPrePlugin:function(){console.warn("THREE.WebGLRenderer: .addPrePlugin() has been removed.")}, -addPostPlugin:function(){console.warn("THREE.WebGLRenderer: .addPostPlugin() has been removed.")},updateShadowMap:function(){console.warn("THREE.WebGLRenderer: .updateShadowMap() has been removed.")}});Object.defineProperties(Yd.prototype,{shadowMapEnabled:{get:function(){return this.shadowMap.enabled},set:function(a){console.warn("THREE.WebGLRenderer: .shadowMapEnabled is now .shadowMap.enabled.");this.shadowMap.enabled=a}},shadowMapType:{get:function(){return this.shadowMap.type},set:function(a){console.warn("THREE.WebGLRenderer: .shadowMapType is now .shadowMap.type."); -this.shadowMap.type=a}},shadowMapCullFace:{get:function(){return this.shadowMap.cullFace},set:function(a){console.warn("THREE.WebGLRenderer: .shadowMapCullFace is now .shadowMap.cullFace.");this.shadowMap.cullFace=a}}});Object.defineProperties(Ke.prototype,{cullFace:{get:function(){return this.renderReverseSided?2:1},set:function(a){a=1!==a;console.warn("WebGLRenderer: .shadowMap.cullFace is deprecated. Set .shadowMap.renderReverseSided to "+a+".");this.renderReverseSided=a}}});Object.defineProperties(Ya.prototype, -{wrapS:{get:function(){console.warn("THREE.WebGLRenderTarget: .wrapS is now .texture.wrapS.");return this.texture.wrapS},set:function(a){console.warn("THREE.WebGLRenderTarget: .wrapS is now .texture.wrapS.");this.texture.wrapS=a}},wrapT:{get:function(){console.warn("THREE.WebGLRenderTarget: .wrapT is now .texture.wrapT.");return this.texture.wrapT},set:function(a){console.warn("THREE.WebGLRenderTarget: .wrapT is now .texture.wrapT.");this.texture.wrapT=a}},magFilter:{get:function(){console.warn("THREE.WebGLRenderTarget: .magFilter is now .texture.magFilter."); -return this.texture.magFilter},set:function(a){console.warn("THREE.WebGLRenderTarget: .magFilter is now .texture.magFilter.");this.texture.magFilter=a}},minFilter:{get:function(){console.warn("THREE.WebGLRenderTarget: .minFilter is now .texture.minFilter.");return this.texture.minFilter},set:function(a){console.warn("THREE.WebGLRenderTarget: .minFilter is now .texture.minFilter.");this.texture.minFilter=a}},anisotropy:{get:function(){console.warn("THREE.WebGLRenderTarget: .anisotropy is now .texture.anisotropy."); -return this.texture.anisotropy},set:function(a){console.warn("THREE.WebGLRenderTarget: .anisotropy is now .texture.anisotropy.");this.texture.anisotropy=a}},offset:{get:function(){console.warn("THREE.WebGLRenderTarget: .offset is now .texture.offset.");return this.texture.offset},set:function(a){console.warn("THREE.WebGLRenderTarget: .offset is now .texture.offset.");this.texture.offset=a}},repeat:{get:function(){console.warn("THREE.WebGLRenderTarget: .repeat is now .texture.repeat.");return this.texture.repeat}, -set:function(a){console.warn("THREE.WebGLRenderTarget: .repeat is now .texture.repeat.");this.texture.repeat=a}},format:{get:function(){console.warn("THREE.WebGLRenderTarget: .format is now .texture.format.");return this.texture.format},set:function(a){console.warn("THREE.WebGLRenderTarget: .format is now .texture.format.");this.texture.format=a}},type:{get:function(){console.warn("THREE.WebGLRenderTarget: .type is now .texture.type.");return this.texture.type},set:function(a){console.warn("THREE.WebGLRenderTarget: .type is now .texture.type."); -this.texture.type=a}},generateMipmaps:{get:function(){console.warn("THREE.WebGLRenderTarget: .generateMipmaps is now .texture.generateMipmaps.");return this.texture.generateMipmaps},set:function(a){console.warn("THREE.WebGLRenderTarget: .generateMipmaps is now .texture.generateMipmaps.");this.texture.generateMipmaps=a}}});hc.prototype.load=function(a){console.warn("THREE.Audio: .load has been deprecated. Use THREE.AudioLoader instead.");var b=this;(new ge).load(a,function(a){b.setBuffer(a)});return this}; -le.prototype.getData=function(){console.warn("THREE.AudioAnalyser: .getData() is now .getFrequencyData().");return this.getFrequencyData()};l.WebGLRenderTargetCube=Gb;l.WebGLRenderTarget=Ya;l.WebGLRenderer=Yd;l.ShaderLib=bb;l.UniformsLib=V;l.UniformsUtils=Ja;l.ShaderChunk=Z;l.FogExp2=Kb;l.Fog=Lb;l.Scene=mb;l.LensFlare=Zd;l.Sprite=Dc;l.LOD=Ec;l.SkinnedMesh=qd;l.Skeleton=od;l.Bone=pd;l.Mesh=Aa;l.LineSegments=ga;l.Line=Ua;l.Points=Mb;l.Group=Fc;l.VideoTexture=rd;l.DataTexture=eb;l.CompressedTexture= -Nb;l.CubeTexture=Za;l.CanvasTexture=sd;l.DepthTexture=Gc;l.Texture=ea;l.CompressedTextureLoader=Re;l.DataTextureLoader=ae;l.CubeTextureLoader=be;l.TextureLoader=td;l.ObjectLoader=Se;l.MaterialLoader=Hd;l.BufferGeometryLoader=ce;l.DefaultLoadingManager=ta;l.LoadingManager=$d;l.JSONLoader=de;l.ImageLoader=Yc;l.FontLoader=Ue;l.FileLoader=sa;l.Loader=zb;l.Cache=ld;l.AudioLoader=ge;l.SpotLightShadow=vd;l.SpotLight=wd;l.PointLight=xd;l.RectAreaLight=he;l.HemisphereLight=ud;l.DirectionalLightShadow=yd;l.DirectionalLight= -zd;l.AmbientLight=Ad;l.LightShadow=wb;l.Light=ma;l.StereoCamera=Ve;l.PerspectiveCamera=Fa;l.OrthographicCamera=Jb;l.CubeCamera=Id;l.Camera=ra;l.AudioListener=ie;l.PositionalAudio=ke;l.AudioContext=je;l.AudioAnalyser=le;l.Audio=hc;l.VectorKeyframeTrack=dc;l.StringKeyframeTrack=Ed;l.QuaternionKeyframeTrack=$c;l.NumberKeyframeTrack=ec;l.ColorKeyframeTrack=Gd;l.BooleanKeyframeTrack=Fd;l.PropertyMixer=Jd;l.PropertyBinding=ka;l.KeyframeTrack=yb;l.AnimationUtils=na;l.AnimationObjectGroup=me;l.AnimationMixer= -cd;l.AnimationClip=qa;l.Uniform=Kd;l.InstancedBufferGeometry=Eb;l.BufferGeometry=I;l.GeometryIdCount=function(){return Vd++};l.Geometry=T;l.InterleavedBufferAttribute=oe;l.InstancedInterleavedBuffer=jc;l.InterleavedBuffer=ic;l.InstancedBufferAttribute=kc;l.Face3=ha;l.Object3D=x;l.Raycaster=pe;l.Layers=nd;l.EventDispatcher=pa;l.Clock=re;l.QuaternionLinearInterpolant=Dd;l.LinearInterpolant=Zc;l.DiscreteInterpolant=Cd;l.CubicInterpolant=Bd;l.Interpolant=xa;l.Triangle=za;l.Math=N;l.Spherical=se;l.Cylindrical= -te;l.Plane=la;l.Frustum=tc;l.Sphere=Na;l.Ray=cb;l.Matrix4=S;l.Matrix3=ya;l.Box3=Pa;l.Box2=sc;l.Line3=hb;l.Euler=db;l.Vector4=fa;l.Vector3=q;l.Vector2=D;l.Quaternion=ca;l.Color=J;l.MorphBlendMesh=oa;l.ImmediateRenderObject=dd;l.VertexNormalsHelper=ed;l.SpotLightHelper=lc;l.SkeletonHelper=mc;l.PointLightHelper=nc;l.RectAreaLightHelper=oc;l.HemisphereLightHelper=pc;l.GridHelper=fd;l.PolarGridHelper=Ld;l.FaceNormalsHelper=gd;l.DirectionalLightHelper=qc;l.CameraHelper=hd;l.BoxHelper=rc;l.ArrowHelper=Fb; -l.AxisHelper=Nd;l.CatmullRomCurve3=va;l.CubicBezierCurve3=id;l.QuadraticBezierCurve3=jd;l.LineCurve3=kd;l.ArcCurve=Od;l.EllipseCurve=Wa;l.SplineCurve=Cb;l.CubicBezierCurve=fc;l.QuadraticBezierCurve=gc;l.LineCurve=Ta;l.Shape=Db;l.Path=bd;l.ShapePath=ee;l.Font=fe;l.CurvePath=ad;l.Curve=ua;l.ShapeUtils=Ia;l.SceneUtils={createMultiMaterialObject:function(a,b){for(var c=new Fc,d=0,e=b.length;db&&(b=a[c]);return b}function C(){Object.defineProperty(this,"id",{value:Qf+=2});this.uuid=R.generateUUID();this.name="";this.type="BufferGeometry";this.index=null;this.attributes={};this.morphAttributes={};this.groups=[];this.boundingSphere=this.boundingBox=null;this.drawRange={start:0,count:Infinity};this.userData={}} +function Lb(a,b,c,d,e,f){Q.call(this);this.type="BoxGeometry";this.parameters={width:a,height:b,depth:c,widthSegments:d,heightSegments:e,depthSegments:f};this.fromBufferGeometry(new ob(a,b,c,d,e,f));this.mergeVertices()}function ob(a,b,c,d,e,f){function g(a,b,c,d,e,f,g,l,W,B,Mb){var t=f/W,v=g/B,w=f/2,u=g/2,y=l/2;g=W+1;var G=B+1,K=f=0,N,z,A=new n;for(z=0;zm;m++){if(p=d[m])if(h=p[0],k=p[1]){q&&e.addAttribute("morphTarget"+m, +q[h]);f&&e.addAttribute("morphNormal"+m,f[h]);c[m]=k;continue}c[m]=0}g.getUniforms().setValue(a,"morphTargetInfluences",c)}}}function bg(a,b){var c={};return{update:function(d){var e=b.render.frame,f=d.geometry,g=a.get(d,f);c[g.id]!==e&&(f.isGeometry&&g.updateFromObject(d),a.update(g),c[g.id]=e);return g},dispose:function(){c={}}}}function Xa(a,b,c,d,e,f,g,h,k,m){a=void 0!==a?a:[];X.call(this,a,void 0!==b?b:301,c,d,e,f,g,h,k,m);this.flipY=!1}function Nb(a,b,c,d){X.call(this,null);this.image={data:a, +width:b,height:c,depth:d};this.minFilter=this.magFilter=1003;this.flipY=this.generateMipmaps=!1}function Ob(a,b,c){var d=a[0];if(0>=d||0/gm, +function(a,c){a=H[c];if(void 0===a)throw Error("Can not resolve #include <"+c+">");return $d(a)})}function bf(a){return a.replace(/#pragma unroll_loop[\s]+?for \( int i = (\d+); i < (\d+); i \+\+ \) \{([\s\S]+?)(?=\})\}/g,function(a,c,d,e){a="";for(c=parseInt(c);cb||a.height>b){if("data"in a){console.warn("THREE.WebGLRenderer: image in DataTexture is too big ("+a.width+"x"+a.height+").");return}b/=Math.max(a.width,a.height);var c=document.createElementNS("http://www.w3.org/1999/xhtml","canvas");c.width=Math.floor(a.width*b);c.height=Math.floor(a.height*b);c.getContext("2d").drawImage(a,0,0,a.width,a.height,0,0,c.width,c.height);console.warn("THREE.WebGLRenderer: image is too big ("+ +a.width+"x"+a.height+"). Resized to "+c.width+"x"+c.height);return c}return a}function k(a){return R.isPowerOfTwo(a.width)&&R.isPowerOfTwo(a.height)}function m(a,b){return a.generateMipmaps&&b&&1003!==a.minFilter&&1006!==a.minFilter}function q(b,c,e,f){a.generateMipmap(b);d.get(c).__maxMipLevel=Math.log(Math.max(e,f))*Math.LOG2E}function p(a,b){if(!e.isWebGL2)return a;if(6403===a){if(5126===b)return 33326;if(5131===b)return 33325;if(5121===b)return 33321}if(6407===a){if(5126===b)return 34837;if(5131=== +b)return 34843;if(5121===b)return 32849}if(6408===a){if(5126===b)return 34836;if(5131===b)return 34842;if(5121===b)return 32856}return a}function r(a){return 1003===a||1004===a||1005===a?9728:9729}function l(b){b=b.target;b.removeEventListener("dispose",l);a:{var c=d.get(b);if(b.image&&c.__image__webglTextureCube)a.deleteTexture(c.__image__webglTextureCube);else{if(void 0===c.__webglInit)break a;a.deleteTexture(c.__webglTexture)}d.remove(b)}b.isVideoTexture&&delete G[b.id];g.memory.textures--}function t(b){b= +b.target;b.removeEventListener("dispose",t);var c=d.get(b),e=d.get(b.texture);if(b){void 0!==e.__webglTexture&&a.deleteTexture(e.__webglTexture);b.depthTexture&&b.depthTexture.dispose();if(b.isWebGLRenderTargetCube)for(e=0;6>e;e++)a.deleteFramebuffer(c.__webglFramebuffer[e]),c.__webglDepthbuffer&&a.deleteRenderbuffer(c.__webglDepthbuffer[e]);else a.deleteFramebuffer(c.__webglFramebuffer),c.__webglDepthbuffer&&a.deleteRenderbuffer(c.__webglDepthbuffer);d.remove(b.texture);d.remove(b)}g.memory.textures--} +function v(a,b){var e=d.get(a);if(a.isVideoTexture){var f=a.id,h=g.render.frame;G[f]!==h&&(G[f]=h,a.update())}if(0u;u++)v[u]=r||t?t?b.image[u].image:b.image[u]:h(b.image[u],e.maxCubemapSize);var w=v[0],W=k(w),B=f.convert(b.format),G=f.convert(b.type),K=p(B,G);n(34067,b,W);for(u=0;6>u;u++)if(r)for(var y,N=v[u].mipmaps,z=0,A=N.length;zr;r++)e.__webglFramebuffer[r]=a.createFramebuffer()}else e.__webglFramebuffer=a.createFramebuffer();if(h){c.bindTexture(34067,f.__webglTexture);n(34067, +b.texture,p);for(r=0;6>r;r++)u(e.__webglFramebuffer[r],b,36064,34069+r);m(b.texture,p)&&q(34067,b.texture,b.width,b.height);c.bindTexture(34067,null)}else c.bindTexture(3553,f.__webglTexture),n(3553,b.texture,p),u(e.__webglFramebuffer,b,36064,3553),m(b.texture,p)&&q(3553,b.texture,b.width,b.height),c.bindTexture(3553,null);if(b.depthBuffer){e=d.get(b);f=!0===b.isWebGLRenderTargetCube;if(b.depthTexture){if(f)throw Error("target.depthTexture not supported in Cube render targets");if(b&&b.isWebGLRenderTargetCube)throw Error("Depth Texture with cube render targets is not supported"); +a.bindFramebuffer(36160,e.__webglFramebuffer);if(!b.depthTexture||!b.depthTexture.isDepthTexture)throw Error("renderTarget.depthTexture must be an instance of THREE.DepthTexture");d.get(b.depthTexture).__webglTexture&&b.depthTexture.image.width===b.width&&b.depthTexture.image.height===b.height||(b.depthTexture.image.width=b.width,b.depthTexture.image.height=b.height,b.depthTexture.needsUpdate=!0);v(b.depthTexture,0);e=d.get(b.depthTexture).__webglTexture;if(1026===b.depthTexture.format)a.framebufferTexture2D(36160, +36096,3553,e,0);else if(1027===b.depthTexture.format)a.framebufferTexture2D(36160,33306,3553,e,0);else throw Error("Unknown depthTexture format");}else if(f)for(e.__webglDepthbuffer=[],f=0;6>f;f++)a.bindFramebuffer(36160,e.__webglFramebuffer[f]),e.__webglDepthbuffer[f]=a.createRenderbuffer(),K(e.__webglDepthbuffer[f],b);else a.bindFramebuffer(36160,e.__webglFramebuffer),e.__webglDepthbuffer=a.createRenderbuffer(),K(e.__webglDepthbuffer,b);a.bindFramebuffer(36160,null)}};this.updateRenderTargetMipmap= +function(a){var b=a.texture,e=k(a);if(m(b,e)){e=a.isWebGLRenderTargetCube?34067:3553;var f=d.get(b).__webglTexture;c.bindTexture(e,f);q(e,b,a.width,a.height);c.bindTexture(e,null)}}}function ff(a,b,c){return{convert:function(a){if(1E3===a)return 10497;if(1001===a)return 33071;if(1002===a)return 33648;if(1003===a)return 9728;if(1004===a)return 9984;if(1005===a)return 9986;if(1006===a)return 9729;if(1007===a)return 9985;if(1008===a)return 9987;if(1009===a)return 5121;if(1017===a)return 32819;if(1018=== +a)return 32820;if(1019===a)return 33635;if(1010===a)return 5120;if(1011===a)return 5122;if(1012===a)return 5123;if(1013===a)return 5124;if(1014===a)return 5125;if(1015===a)return 5126;if(1016===a){if(c.isWebGL2)return 5131;var d=b.get("OES_texture_half_float");if(null!==d)return d.HALF_FLOAT_OES}if(1021===a)return 6406;if(1022===a)return 6407;if(1023===a)return 6408;if(1024===a)return 6409;if(1025===a)return 6410;if(1026===a)return 6402;if(1027===a)return 34041;if(1028===a)return 6403;if(100===a)return 32774; +if(101===a)return 32778;if(102===a)return 32779;if(200===a)return 0;if(201===a)return 1;if(202===a)return 768;if(203===a)return 769;if(204===a)return 770;if(205===a)return 771;if(206===a)return 772;if(207===a)return 773;if(208===a)return 774;if(209===a)return 775;if(210===a)return 776;if(33776===a||33777===a||33778===a||33779===a)if(d=b.get("WEBGL_compressed_texture_s3tc"),null!==d){if(33776===a)return d.COMPRESSED_RGB_S3TC_DXT1_EXT;if(33777===a)return d.COMPRESSED_RGBA_S3TC_DXT1_EXT;if(33778===a)return d.COMPRESSED_RGBA_S3TC_DXT3_EXT; +if(33779===a)return d.COMPRESSED_RGBA_S3TC_DXT5_EXT}if(35840===a||35841===a||35842===a||35843===a)if(d=b.get("WEBGL_compressed_texture_pvrtc"),null!==d){if(35840===a)return d.COMPRESSED_RGB_PVRTC_4BPPV1_IMG;if(35841===a)return d.COMPRESSED_RGB_PVRTC_2BPPV1_IMG;if(35842===a)return d.COMPRESSED_RGBA_PVRTC_4BPPV1_IMG;if(35843===a)return d.COMPRESSED_RGBA_PVRTC_2BPPV1_IMG}if(36196===a&&(d=b.get("WEBGL_compressed_texture_etc1"),null!==d))return d.COMPRESSED_RGB_ETC1_WEBGL;if(37808===a||37809===a||37810=== +a||37811===a||37812===a||37813===a||37814===a||37815===a||37816===a||37817===a||37818===a||37819===a||37820===a||37821===a)if(d=b.get("WEBGL_compressed_texture_astc"),null!==d)return a;if(103===a||104===a){if(c.isWebGL2){if(103===a)return 32775;if(104===a)return 32776}d=b.get("EXT_blend_minmax");if(null!==d){if(103===a)return d.MIN_EXT;if(104===a)return d.MAX_EXT}}if(1020===a){if(c.isWebGL2)return 34042;d=b.get("WEBGL_depth_texture");if(null!==d)return d.UNSIGNED_INT_24_8_WEBGL}return 0}}}function Pb(){D.call(this); +this.type="Group"}function Ra(){D.call(this);this.type="Camera";this.matrixWorldInverse=new O;this.projectionMatrix=new O;this.projectionMatrixInverse=new O}function V(a,b,c,d){Ra.call(this);this.type="PerspectiveCamera";this.fov=void 0!==a?a:50;this.zoom=1;this.near=void 0!==c?c:.1;this.far=void 0!==d?d:2E3;this.focus=10;this.aspect=void 0!==b?b:1;this.view=null;this.filmGauge=35;this.filmOffset=0;this.updateProjectionMatrix()}function Dc(a){V.call(this);this.cameras=a||[]}function gf(a,b,c){hf.setFromMatrixPosition(b.matrixWorld); +jf.setFromMatrixPosition(c.matrixWorld);var d=hf.distanceTo(jf),e=b.projectionMatrix.elements,f=c.projectionMatrix.elements,g=e[14]/(e[10]-1);c=e[14]/(e[10]+1);var h=(e[9]+1)/e[5],k=(e[9]-1)/e[5],m=(e[8]-1)/e[0],q=(f[8]+1)/f[0];e=g*m;f=g*q;q=d/(-m+q);m=q*-m;b.matrixWorld.decompose(a.position,a.quaternion,a.scale);a.translateX(m);a.translateZ(q);a.matrixWorld.compose(a.position,a.quaternion,a.scale);a.matrixWorldInverse.getInverse(a.matrixWorld);b=g+q;g=c+q;a.projectionMatrix.makePerspective(e-m,f+ +(d-m),h*c/g*b,k*c/g*b,b,g)}function kf(a){function b(){return null!==e&&!0===e.isPresenting}function c(){if(b()){var c=e.getEyeParameters("left"),f=c.renderWidth*q;c=c.renderHeight*q;K=a.getPixelRatio();u=a.getSize();a.setDrawingBufferSize(2*f,c,1);N.start()}else d.enabled&&a.setDrawingBufferSize(u.width,u.height,K),N.stop()}var d=this,e=null,f=null,g=null,h=[],k=new O,m=new O,q=1,p="stage";"undefined"!==typeof window&&"VRFrameData"in window&&(f=new window.VRFrameData,window.addEventListener("vrdisplaypresentchange", +c,!1));var r=new O,l=new ka,t=new n,v=new V;v.bounds=new ca(0,0,.5,1);v.layers.enable(1);var w=new V;w.bounds=new ca(.5,0,.5,1);w.layers.enable(2);var y=new Dc([v,w]);y.layers.enable(1);y.layers.enable(2);var u,K,G=[];this.enabled=!1;this.getController=function(a){var b=h[a];void 0===b&&(b=new Pb,b.matrixAutoUpdate=!1,b.visible=!1,h[a]=b);return b};this.getDevice=function(){return e};this.setDevice=function(a){void 0!==a&&(e=a);N.setContext(a)};this.setFramebufferScaleFactor=function(a){q=a};this.setFrameOfReferenceType= +function(a){p=a};this.setPoseTarget=function(a){void 0!==a&&(g=a)};this.getCamera=function(a){var b="stage"===p?1.6:0;if(null===e)return a.position.set(0,b,0),a;e.depthNear=a.near;e.depthFar=a.far;e.getFrameData(f);if("stage"===p){var c=e.stageParameters;c?k.fromArray(c.sittingToStandingTransform):k.makeTranslation(0,b,0)}b=f.pose;c=null!==g?g:a;c.matrix.copy(k);c.matrix.decompose(c.position,c.quaternion,c.scale);null!==b.orientation&&(l.fromArray(b.orientation),c.quaternion.multiply(l));null!==b.position&& +(l.setFromRotationMatrix(k),t.fromArray(b.position),t.applyQuaternion(l),c.position.add(t));c.updateMatrixWorld();if(!1===e.isPresenting)return a;v.near=a.near;w.near=a.near;v.far=a.far;w.far=a.far;v.matrixWorldInverse.fromArray(f.leftViewMatrix);w.matrixWorldInverse.fromArray(f.rightViewMatrix);m.getInverse(k);"stage"===p&&(v.matrixWorldInverse.multiply(m),w.matrixWorldInverse.multiply(m));a=c.parent;null!==a&&(r.getInverse(a.matrixWorld),v.matrixWorldInverse.multiply(r),w.matrixWorldInverse.multiply(r)); +v.matrixWorld.getInverse(v.matrixWorldInverse);w.matrixWorld.getInverse(w.matrixWorldInverse);v.projectionMatrix.fromArray(f.leftProjectionMatrix);w.projectionMatrix.fromArray(f.rightProjectionMatrix);gf(y,v,w);a=e.getLayers();a.length&&(a=a[0],null!==a.leftBounds&&4===a.leftBounds.length&&v.bounds.fromArray(a.leftBounds),null!==a.rightBounds&&4===a.rightBounds.length&&w.bounds.fromArray(a.rightBounds));a:for(a=0;af.normalMatrix.determinant();aa.setMaterial(e,h);var k=r(a,c,e,f),m=!1;if(b!==d.id||H!==k.id||ud!==(!0===e.wireframe))b=d.id,H=k.id,ud=!0===e.wireframe,m=!0;f.morphTargetInfluences&&(ya.update(f,d,e,k),m=!0);h=d.index;var q=d.attributes.position;c=1;!0===e.wireframe&&(h=ua.getWireframeAttribute(d),c=2);a=za;if(null!==h){var p=ra.get(h);a=Aa;a.setIndex(p)}if(m){if(d&&d.isInstancedBufferGeometry&!xa.isWebGL2&&null===la.get("ANGLE_instanced_arrays"))console.error("THREE.WebGLRenderer.setupVertexAttributes: using THREE.InstancedBufferGeometry but hardware does not support extension ANGLE_instanced_arrays."); +else{aa.initAttributes();m=d.attributes;k=k.getAttributes();var l=e.defaultAttributeValues;for(B in k){var t=k[B];if(0<=t){var x=m[B];if(void 0!==x){var v=x.normalized,n=x.itemSize,u=ra.get(x);if(void 0!==u){var w=u.buffer,y=u.type;u=u.bytesPerElement;if(x.isInterleavedBufferAttribute){var G=x.data,K=G.stride;x=x.offset;G&&G.isInstancedInterleavedBuffer?(aa.enableAttributeAndDivisor(t,G.meshPerAttribute),void 0===d.maxInstancedCount&&(d.maxInstancedCount=G.meshPerAttribute*G.count)):aa.enableAttribute(t); +P.bindBuffer(34962,w);P.vertexAttribPointer(t,n,y,v,K*u,x*u)}else x.isInstancedBufferAttribute?(aa.enableAttributeAndDivisor(t,x.meshPerAttribute),void 0===d.maxInstancedCount&&(d.maxInstancedCount=x.meshPerAttribute*x.count)):aa.enableAttribute(t),P.bindBuffer(34962,w),P.vertexAttribPointer(t,n,y,v,0,0)}}else if(void 0!==l&&(v=l[B],void 0!==v))switch(v.length){case 2:P.vertexAttrib2fv(t,v);break;case 3:P.vertexAttrib3fv(t,v);break;case 4:P.vertexAttrib4fv(t,v);break;default:P.vertexAttrib1fv(t,v)}}}aa.disableUnusedAttributes()}null!== +h&&P.bindBuffer(34963,p.buffer)}p=Infinity;null!==h?p=h.count:void 0!==q&&(p=q.count);h=d.drawRange.start*c;q=null!==g?g.start*c:0;var B=Math.max(h,q);g=Math.max(0,Math.min(p,h+d.drawRange.count*c,q+(null!==g?g.count*c:Infinity))-1-B+1);if(0!==g){if(f.isMesh)if(!0===e.wireframe)aa.setLineWidth(e.wireframeLinewidth*(null===Q?U:1)),a.setMode(1);else switch(f.drawMode){case 0:a.setMode(4);break;case 1:a.setMode(5);break;case 2:a.setMode(6)}else f.isLine?(e=e.linewidth,void 0===e&&(e=1),aa.setLineWidth(e* +(null===Q?U:1)),f.isLineSegments?a.setMode(1):f.isLineLoop?a.setMode(2):a.setMode(3)):f.isPoints?a.setMode(0):f.isSprite&&a.setMode(4);d&&d.isInstancedBufferGeometry?0=xa.maxTextures&&console.warn("THREE.WebGLRenderer: Trying to use "+a+" texture units while this GPU supports only "+ +xa.maxTextures);ba+=1;return a};this.setTexture2D=function(){var a=!1;return function(b,c){b&&b.isWebGLRenderTarget&&(a||(console.warn("THREE.WebGLRenderer.setTexture2D: don't use render targets as textures. Use their .texture property instead."),a=!0),b=b.texture);ha.setTexture2D(b,c)}}();this.setTexture3D=function(){return function(a,b){ha.setTexture3D(a,b)}}();this.setTexture=function(){var a=!1;return function(b,c){a||(console.warn("THREE.WebGLRenderer: .setTexture is deprecated, use setTexture2D instead."), +a=!0);ha.setTexture2D(b,c)}}();this.setTextureCube=function(){var a=!1;return function(b,c){b&&b.isWebGLRenderTargetCube&&(a||(console.warn("THREE.WebGLRenderer.setTextureCube: don't use cube render targets as textures. Use their .texture property instead."),a=!0),b=b.texture);b&&b.isCubeTexture||Array.isArray(b.image)&&6===b.image.length?ha.setTextureCube(b,c):ha.setTextureCubeDynamic(b,c)}}();this.setFramebuffer=function(a){J=a};this.getRenderTarget=function(){return Q};this.setRenderTarget=function(a){(Q= +a)&&void 0===Ca.get(a).__webglFramebuffer&&ha.setupRenderTarget(a);var b=J,c=!1;a?(b=Ca.get(a).__webglFramebuffer,a.isWebGLRenderTargetCube&&(b=b[a.activeCubeFace],c=!0),S.copy(a.viewport),Cc.copy(a.scissor),ea=a.scissorTest):(S.copy(fa).multiplyScalar(U),Cc.copy(ka).multiplyScalar(U),ea=sa);L!==b&&(P.bindFramebuffer(36160,b),L=b);aa.viewport(S);aa.scissor(Cc);aa.setScissorTest(ea);c&&(c=Ca.get(a.texture),P.framebufferTexture2D(36160,36064,34069+a.activeCubeFace,c.__webglTexture,a.activeMipMapLevel))}; +this.readRenderTargetPixels=function(a,b,c,d,e,f){if(a&&a.isWebGLRenderTarget){var g=Ca.get(a).__webglFramebuffer;if(g){var h=!1;g!==L&&(P.bindFramebuffer(36160,g),h=!0);try{var k=a.texture,m=k.format,q=k.type;1023!==m&&ia.convert(m)!==P.getParameter(35739)?console.error("THREE.WebGLRenderer.readRenderTargetPixels: renderTarget is not in RGBA or implementation defined format."):1009===q||ia.convert(q)===P.getParameter(35738)||1015===q&&(xa.isWebGL2||la.get("OES_texture_float")||la.get("WEBGL_color_buffer_float"))|| +1016===q&&(xa.isWebGL2?la.get("EXT_color_buffer_float"):la.get("EXT_color_buffer_half_float"))?36053===P.checkFramebufferStatus(36160)?0<=b&&b<=a.width-d&&0<=c&&c<=a.height-e&&P.readPixels(b,c,d,e,ia.convert(m),ia.convert(q),f):console.error("THREE.WebGLRenderer.readRenderTargetPixels: readPixels from renderTarget failed. Framebuffer not complete."):console.error("THREE.WebGLRenderer.readRenderTargetPixels: renderTarget is not in UnsignedByteType or implementation defined type.")}finally{h&&P.bindFramebuffer(36160, +L)}}}else console.error("THREE.WebGLRenderer.readRenderTargetPixels: renderTarget is not THREE.WebGLRenderTarget.")};this.copyFramebufferToTexture=function(a,b,c){var d=b.image.width,e=b.image.height,f=ia.convert(b.format);this.setTexture2D(b,0);P.copyTexImage2D(3553,c||0,f,a.x,a.y,d,e,0)};this.copyTextureToTexture=function(a,b,c,d){var e=b.image.width,f=b.image.height,g=ia.convert(c.format),h=ia.convert(c.type);this.setTexture2D(c,0);b.isDataTexture?P.texSubImage2D(3553,d||0,a.x,a.y,e,f,g,h,b.image.data): +P.texSubImage2D(3553,d||0,a.x,a.y,g,h,b.image)}}function Qb(a,b){this.name="";this.color=new I(a);this.density=void 0!==b?b:2.5E-4}function Rb(a,b,c){this.name="";this.color=new I(a);this.near=void 0!==b?b:1;this.far=void 0!==c?c:1E3}function xd(){D.call(this);this.type="Scene";this.overrideMaterial=this.fog=this.background=null;this.autoUpdate=!0}function rb(a,b){this.array=a;this.stride=b;this.count=void 0!==a?a.length/b:0;this.dynamic=!1;this.updateRange={offset:0,count:-1};this.version=0}function Ec(a, +b,c,d){this.data=a;this.itemSize=b;this.offset=c;this.normalized=!0===d}function gb(a){L.call(this);this.type="SpriteMaterial";this.color=new I(16777215);this.map=null;this.rotation=0;this.sizeAttenuation=!0;this.lights=!1;this.transparent=!0;this.setValues(a)}function Fc(a){D.call(this);this.type="Sprite";if(void 0===Sb){Sb=new C;var b=new Float32Array([-.5,-.5,0,0,0,.5,-.5,0,1,0,.5,.5,0,1,1,-.5,.5,0,0,1]);b=new rb(b,5);Sb.setIndex([0,1,2,0,2,3]);Sb.addAttribute("position",new Ec(b,3,0,!1));Sb.addAttribute("uv", +new Ec(b,2,3,!1))}this.geometry=Sb;this.material=void 0!==a?a:new gb;this.center=new z(.5,.5)}function Gc(){D.call(this);this.type="LOD";Object.defineProperties(this,{levels:{enumerable:!0,value:[]}})}function Hc(a,b){a&&a.isGeometry&&console.error("THREE.SkinnedMesh no longer supports THREE.Geometry. Use THREE.BufferGeometry instead.");na.call(this,a,b);this.type="SkinnedMesh";this.bindMode="attached";this.bindMatrix=new O;this.bindMatrixInverse=new O}function yd(a,b){a=a||[];this.bones=a.slice(0); +this.boneMatrices=new Float32Array(16*this.bones.length);if(void 0===b)this.calculateInverses();else if(this.bones.length===b.length)this.boneInverses=b.slice(0);else for(console.warn("THREE.Skeleton boneInverses is the wrong length."),this.boneInverses=[],a=0,b=this.bones.length;ac;c++){var p=q[h[c]];var r=q[h[(c+1)%3]];f[0]=Math.min(p,r);f[1]=Math.max(p,r);p=f[0]+","+f[1];void 0===g[p]&&(g[p]={index1:f[0],index2:f[1]})}}for(p in g)m=g[p],h=a.vertices[m.index1],b.push(h.x,h.y,h.z),h=a.vertices[m.index2],b.push(h.x,h.y,h.z)}else if(a&&a.isBufferGeometry)if(h=new n,null!==a.index){k= +a.attributes.position;q=a.index;var l=a.groups;0===l.length&&(l=[{start:0,count:q.count,materialIndex:0}]);a=0;for(e=l.length;ac;c++)p=q.getX(m+c),r=q.getX(m+(c+1)%3),f[0]=Math.min(p,r),f[1]=Math.max(p,r),p=f[0]+","+f[1],void 0===g[p]&&(g[p]={index1:f[0],index2:f[1]});for(p in g)m=g[p],h.fromBufferAttribute(k,m.index1),b.push(h.x,h.y,h.z),h.fromBufferAttribute(k,m.index2),b.push(h.x,h.y,h.z)}else for(k=a.attributes.position,m=0,d= +k.count/3;mc;c++)g=3*m+c,h.fromBufferAttribute(k,g),b.push(h.x,h.y,h.z),g=3*m+(c+1)%3,h.fromBufferAttribute(k,g),b.push(h.x,h.y,h.z);this.addAttribute("position",new A(b,3))}function Kc(a,b,c){Q.call(this);this.type="ParametricGeometry";this.parameters={func:a,slices:b,stacks:c};this.fromBufferGeometry(new Wb(a,b,c));this.mergeVertices()}function Wb(a,b,c){C.call(this);this.type="ParametricBufferGeometry";this.parameters={func:a,slices:b,stacks:c};var d=[],e=[],f=[],g=[],h=new n, +k=new n,m=new n,q=new n,p=new n,r,l;3>a.length&&console.error("THREE.ParametricGeometry: Function must now modify a Vector3 as third parameter.");var t=b+1;for(r=0;r<=c;r++){var v=r/c;for(l=0;l<=b;l++){var w=l/b;a(w,v,k);e.push(k.x,k.y,k.z);0<=w-1E-5?(a(w-1E-5,v,m),q.subVectors(k,m)):(a(w+1E-5,v,m),q.subVectors(m,k));0<=v-1E-5?(a(w,v-1E-5,m),p.subVectors(k,m)):(a(w,v+1E-5,m),p.subVectors(m,k));h.crossVectors(q,p).normalize();f.push(h.x,h.y,h.z);g.push(w,v)}}for(r=0;rd&&1===a.x&&(k[b]=a.x-1);0===c.x&&0===c.z&&(k[b]=d/2/Math.PI+.5)}C.call(this);this.type="PolyhedronBufferGeometry";this.parameters={vertices:a,indices:b,radius:c,detail:d};c=c||1;d=d||0;var h=[],k=[];(function(a){for(var c=new n,d=new n,g=new n,h=0;he&&(.2>b&&(k[a+0]+=1),.2>c&&(k[a+2]+=1),.2>d&&(k[a+4]+=1))})();this.addAttribute("position", +new A(h,3));this.addAttribute("normal",new A(h.slice(),3));this.addAttribute("uv",new A(k,2));0===d?this.computeVertexNormals():this.normalizeNormals()}function Mc(a,b){Q.call(this);this.type="TetrahedronGeometry";this.parameters={radius:a,detail:b};this.fromBufferGeometry(new Xb(a,b));this.mergeVertices()}function Xb(a,b){ya.call(this,[1,1,1,-1,-1,1,-1,1,-1,1,-1,-1],[2,1,0,0,3,2,1,3,0,2,3,1],a,b);this.type="TetrahedronBufferGeometry";this.parameters={radius:a,detail:b}}function Nc(a,b){Q.call(this); +this.type="OctahedronGeometry";this.parameters={radius:a,detail:b};this.fromBufferGeometry(new sb(a,b));this.mergeVertices()}function sb(a,b){ya.call(this,[1,0,0,-1,0,0,0,1,0,0,-1,0,0,0,1,0,0,-1],[0,2,4,0,4,3,0,3,5,0,5,2,1,2,5,1,5,3,1,3,4,1,4,2],a,b);this.type="OctahedronBufferGeometry";this.parameters={radius:a,detail:b}}function Oc(a,b){Q.call(this);this.type="IcosahedronGeometry";this.parameters={radius:a,detail:b};this.fromBufferGeometry(new Yb(a,b));this.mergeVertices()}function Yb(a,b){var c= +(1+Math.sqrt(5))/2;ya.call(this,[-1,c,0,1,c,0,-1,-c,0,1,-c,0,0,-1,c,0,1,c,0,-1,-c,0,1,-c,c,0,-1,c,0,1,-c,0,-1,-c,0,1],[0,11,5,0,5,1,0,1,7,0,7,10,0,10,11,1,5,9,5,11,4,11,10,2,10,7,6,7,1,8,3,9,4,3,4,2,3,2,6,3,6,8,3,8,9,4,9,5,2,4,11,6,2,10,8,6,7,9,8,1],a,b);this.type="IcosahedronBufferGeometry";this.parameters={radius:a,detail:b}}function Pc(a,b){Q.call(this);this.type="DodecahedronGeometry";this.parameters={radius:a,detail:b};this.fromBufferGeometry(new Zb(a,b));this.mergeVertices()}function Zb(a,b){var c= +(1+Math.sqrt(5))/2,d=1/c;ya.call(this,[-1,-1,-1,-1,-1,1,-1,1,-1,-1,1,1,1,-1,-1,1,-1,1,1,1,-1,1,1,1,0,-d,-c,0,-d,c,0,d,-c,0,d,c,-d,-c,0,-d,c,0,d,-c,0,d,c,0,-c,0,-d,c,0,-d,-c,0,d,c,0,d],[3,11,7,3,7,15,3,15,13,7,19,17,7,17,6,7,6,15,17,4,8,17,8,10,17,10,6,8,0,16,8,16,2,8,2,10,0,12,1,0,1,18,0,18,16,6,10,2,6,2,13,6,13,15,2,16,18,2,18,3,2,3,13,18,1,9,18,9,11,18,11,3,4,14,12,4,12,0,4,0,8,11,9,5,11,5,19,11,19,7,19,5,14,19,14,4,19,4,17,1,12,14,1,14,5,1,5,9],a,b);this.type="DodecahedronBufferGeometry";this.parameters= +{radius:a,detail:b}}function Qc(a,b,c,d,e,f){Q.call(this);this.type="TubeGeometry";this.parameters={path:a,tubularSegments:b,radius:c,radialSegments:d,closed:e};void 0!==f&&console.warn("THREE.TubeGeometry: taper has been removed.");a=new $b(a,b,c,d,e);this.tangents=a.tangents;this.normals=a.normals;this.binormals=a.binormals;this.fromBufferGeometry(a);this.mergeVertices()}function $b(a,b,c,d,e){function f(e){q=a.getPointAt(e/b,q);var f=g.normals[e];e=g.binormals[e];for(r=0;r<=d;r++){var m=r/d*Math.PI* +2,p=Math.sin(m);m=-Math.cos(m);k.x=m*f.x+p*e.x;k.y=m*f.y+p*e.y;k.z=m*f.z+p*e.z;k.normalize();t.push(k.x,k.y,k.z);h.x=q.x+c*k.x;h.y=q.y+c*k.y;h.z=q.z+c*k.z;l.push(h.x,h.y,h.z)}}C.call(this);this.type="TubeBufferGeometry";this.parameters={path:a,tubularSegments:b,radius:c,radialSegments:d,closed:e};b=b||64;c=c||1;d=d||8;e=e||!1;var g=a.computeFrenetFrames(b,e);this.tangents=g.tangents;this.normals=g.normals;this.binormals=g.binormals;var h=new n,k=new n,m=new z,q=new n,p,r,l=[],t=[],v=[],w=[];for(p= +0;p=b;e-=d)f=mf(e,a[e],a[e+1],f);f&&tb(f,f.next)&&(Tc(f),f=f.next);return f}function Uc(a,b){if(!a)return a; +b||(b=a);do{var c=!1;if(a.steiner||!tb(a,a.next)&&0!==pa(a.prev,a,a.next))a=a.next;else{Tc(a);a=b=a.prev;if(a===a.next)break;c=!0}}while(c||a!==b);return b}function Vc(a,b,c,d,e,f,g){if(a){if(!g&&f){var h=a,k=h;do null===k.z&&(k.z=ee(k.x,k.y,d,e,f)),k.prevZ=k.prev,k=k.nextZ=k.next;while(k!==h);k.prevZ.nextZ=null;k.prevZ=null;h=k;var m,q,p,r,l=1;do{k=h;var t=h=null;for(q=0;k;){q++;var n=k;for(m=p=0;mp.x?q.x>l.x?q.x:l.x:p.x>l.x?p.x:l.x,K=q.y>p.y?q.y>l.y?q.y:l.y:p.y>l.y?p.y:l.y;m=ee(q.x=m;){if(w!==t.prev&&w!==t.next&&Ad(q.x,q.y,p.x,p.y,l.x,l.y,w.x,w.y)&&0<=pa(w.prev,w,w.next)){t=!1;break a}w=w.prevZ}t=!0}}else a:if(t=a,q=t.prev,p=t,l=t.next,0<=pa(q,p,l))t=!1;else{for(m=t.next.next;m!==t.prev;){if(Ad(q.x,q.y,p.x,p.y,l.x,l.y,m.x,m.y)&&0<=pa(m.prev,m,m.next)){t=!1;break a}m=m.next}t=!0}if(t)b.push(k.i/c),b.push(a.i/c),b.push(n.i/c),Tc(a),h=a=n.next;else if(a=n,a===h){if(!g)Vc(Uc(a),b,c,d,e,f,1);else if(1===g){g=b;h=c;k=a;do n=k.prev, +t=k.next.next,!tb(n,t)&&nf(n,k,k.next,t)&&Wc(n,t)&&Wc(t,n)&&(g.push(n.i/h),g.push(k.i/h),g.push(t.i/h),Tc(k),Tc(k.next),k=a=t),k=k.next;while(k!==a);a=k;Vc(a,b,c,d,e,f,2)}else if(2===g)a:{g=a;do{for(h=g.next.next;h!==g.prev;){if(k=g.i!==h.i){k=g;n=h;if(t=k.next.i!==n.i&&k.prev.i!==n.i){b:{t=k;do{if(t.i!==k.i&&t.next.i!==k.i&&t.i!==n.i&&t.next.i!==n.i&&nf(t,t.next,k,n)){t=!0;break b}t=t.next}while(t!==k);t=!1}t=!t}if(t=t&&Wc(k,n)&&Wc(n,k)){t=k;q=!1;p=(k.x+n.x)/2;n=(k.y+n.y)/2;do t.y>n!==t.next.y>n&& +t.next.y!==t.y&&p<(t.next.x-t.x)*(n-t.y)/(t.next.y-t.y)+t.x&&(q=!q),t=t.next;while(t!==k);t=q}k=t}if(k){a=of(g,h);g=Uc(g,g.next);a=Uc(a,a.next);Vc(g,b,c,d,e,f);Vc(a,b,c,d,e,f);break a}h=h.next}g=g.next}while(g!==a)}break}}}}function Vg(a,b){return a.x-b.x}function Wg(a,b){var c=b,d=a.x,e=a.y,f=-Infinity;do{if(e<=c.y&&e>=c.next.y&&c.next.y!==c.y){var g=c.x+(e-c.y)*(c.next.x-c.x)/(c.next.y-c.y);if(g<=d&&g>f){f=g;if(g===d){if(e===c.y)return c;if(e===c.next.y)return c.next}var h=c.x=c.x&&c.x>=g&&d!==c.x&&Ad(eh.x)&&Wc(c,a)&&(h=c,m=q)}c=c.next}return h}function ee(a,b,c,d,e){a=32767*(a-c)*e;b=32767*(b-d)*e;a=(a|a<<8)&16711935;a=(a|a<<4)&252645135;a=(a|a<<2)&858993459;b=(b|b<<8)&16711935;b=(b|b<<4)&252645135;b=(b|b<<2)&858993459;return(a|a<<1)&1431655765|((b|b<<1)&1431655765)<<1}function Xg(a){var b= +a,c=a;do b.xpa(a.prev,a,a.next)?0<=pa(a,b,a.next)&&0<=pa(a,a.prev,b):0>pa(a,b,a.prev)|| +0>pa(a,a.next,b)}function of(a,b){var c=new fe(a.i,a.x,a.y),d=new fe(b.i,b.x,b.y),e=a.next,f=b.prev;a.next=b;b.prev=a;c.next=e;e.prev=c;d.next=c;c.prev=d;f.next=d;d.prev=f;return d}function mf(a,b,c,d){a=new fe(a,b,c);d?(a.next=d.next,a.prev=d,d.next.prev=a,d.next=a):(a.prev=a,a.next=a);return a}function Tc(a){a.next.prev=a.prev;a.prev.next=a.next;a.prevZ&&(a.prevZ.nextZ=a.nextZ);a.nextZ&&(a.nextZ.prevZ=a.prevZ)}function fe(a,b,c){this.i=a;this.x=b;this.y=c;this.nextZ=this.prevZ=this.z=this.next= +this.prev=null;this.steiner=!1}function pf(a){var b=a.length;2Number.EPSILON){var k=Math.sqrt(h),m=Math.sqrt(f*f+g*g);h=b.x-e/k;b=b.y+d/k;g=((c.x-g/m-h)*g-(c.y+f/m-b)*f)/(d*g-e*f);f=h+d*g-a.x;d=b+e*g-a.y;e=f*f+d*d;if(2>=e)return new z(f,d);e=Math.sqrt(e/2)}else a=!1,d>Number.EPSILON?f>Number.EPSILON&&(a=!0):d<-Number.EPSILON?f<-Number.EPSILON&&(a=!0):Math.sign(e)===Math.sign(g)&&(a=!0),a?(f=-e,e=Math.sqrt(h)):(f=d,d=e,e=Math.sqrt(h/2));return new z(f/e,d/e)}function h(a,b){for(M=a.length;0<= +--M;){var c=M;var f=M-1;0>f&&(f=a.length-1);var g,h=u+2*B;for(g=0;gq;q++){var l=m[f[q]];var r=m[f[(q+1)%3]];d[0]=Math.min(l,r);d[1]=Math.max(l,r);l=d[0]+","+d[1];void 0===e[l]?e[l]={index1:d[0],index2:d[1],face1:h,face2:void 0}:e[l].face2=h}for(l in e)if(d=e[l], +void 0===d.face2||g[d.face1].normal.dot(g[d.face2].normal)<=b)f=a[d.index1],c.push(f.x,f.y,f.z),f=a[d.index2],c.push(f.x,f.y,f.z);this.addAttribute("position",new A(c,3))}function yb(a,b,c,d,e,f,g,h){Q.call(this);this.type="CylinderGeometry";this.parameters={radiusTop:a,radiusBottom:b,height:c,radialSegments:d,heightSegments:e,openEnded:f,thetaStart:g,thetaLength:h};this.fromBufferGeometry(new Za(a,b,c,d,e,f,g,h));this.mergeVertices()}function Za(a,b,c,d,e,f,g,h){function k(c){var e,f=new z,k=new n, +p=0,u=!0===c?a:b,v=!0===c?1:-1;var A=t;for(e=1;e<=d;e++)l.push(0,w*v,0),r.push(0,v,0),x.push(.5,.5),t++;var C=t;for(e=0;e<=d;e++){var D=e/d*h+g,E=Math.cos(D);D=Math.sin(D);k.x=u*D;k.y=w*v;k.z=u*E;l.push(k.x,k.y,k.z);r.push(0,v,0);f.x=.5*E+.5;f.y=.5*D*v+.5;x.push(f.x,f.y);t++}for(e=0;ethis.duration&&this.resetDuration()}function Zg(a){switch(a.toLowerCase()){case "scalar":case "double":case "float":case "number":case "integer":return ic; +case "vector":case "vector2":case "vector3":case "vector4":return jc;case "color":return Ed;case "quaternion":return ed;case "bool":case "boolean":return Dd;case "string":return Gd}throw Error("THREE.KeyframeTrack: Unsupported typeName: "+a);}function $g(a){if(void 0===a.type)throw Error("THREE.KeyframeTrack: track type undefined, can not parse");var b=Zg(a.type);if(void 0===a.times){var c=[],d=[];ra.flattenJSON(a.keys,c,d,"value");a.times=c;a.values=d}return void 0!==b.parse?b.parse(a):new b(a.name, +a.times,a.values,a.interpolation)}function ge(a,b,c){var d=this,e=!1,f=0,g=0,h=void 0;this.onStart=void 0;this.onLoad=a;this.onProgress=b;this.onError=c;this.itemStart=function(a){g++;if(!1===e&&void 0!==d.onStart)d.onStart(a,f,g);e=!0};this.itemEnd=function(a){f++;if(void 0!==d.onProgress)d.onProgress(a,f,g);if(f===g&&(e=!1,void 0!==d.onLoad))d.onLoad()};this.itemError=function(a){if(void 0!==d.onError)d.onError(a)};this.resolveURL=function(a){return h?h(a):a};this.setURLModifier=function(a){h=a; +return this}}function Ia(a){this.manager=void 0!==a?a:za}function tf(a){this.manager=void 0!==a?a:za}function uf(a){this.manager=void 0!==a?a:za;this._parser=null}function he(a){this.manager=void 0!==a?a:za;this._parser=null}function fd(a){this.manager=void 0!==a?a:za}function ie(a){this.manager=void 0!==a?a:za}function Hd(a){this.manager=void 0!==a?a:za}function J(){this.type="Curve";this.arcLengthDivisions=200}function Da(a,b,c,d,e,f,g,h){J.call(this);this.type="EllipseCurve";this.aX=a||0;this.aY= +b||0;this.xRadius=c||1;this.yRadius=d||1;this.aStartAngle=e||0;this.aEndAngle=f||2*Math.PI;this.aClockwise=g||!1;this.aRotation=h||0}function kc(a,b,c,d,e,f){Da.call(this,a,b,c,c,d,e,f);this.type="ArcCurve"}function je(){var a=0,b=0,c=0,d=0;return{initCatmullRom:function(e,f,g,h,k){e=k*(g-e);h=k*(h-f);a=f;b=e;c=-3*f+3*g-2*e-h;d=2*f-2*g+e+h},initNonuniformCatmullRom:function(e,f,g,h,k,m,q){e=((f-e)/k-(g-e)/(k+m)+(g-f)/m)*m;h=((g-f)/m-(h-f)/(m+q)+(h-g)/q)*m;a=f;b=e;c=-3*f+3*g-2*e-h;d=2*f-2*g+e+h},calc:function(e){var f= +e*e;return a+b*e+c*f+d*f*e}}}function ua(a,b,c,d){J.call(this);this.type="CatmullRomCurve3";this.points=a||[];this.closed=b||!1;this.curveType=c||"centripetal";this.tension=d||.5}function vf(a,b,c,d,e){b=.5*(d-b);e=.5*(e-c);var f=a*a;return(2*c-2*d+b+e)*a*f+(-3*c+3*d-2*b-e)*f+b*a+c}function gd(a,b,c,d){var e=1-a;return e*e*b+2*(1-a)*a*c+a*a*d}function hd(a,b,c,d,e){var f=1-a,g=1-a;return f*f*f*b+3*g*g*a*c+3*(1-a)*a*a*d+a*a*a*e}function Ja(a,b,c,d){J.call(this);this.type="CubicBezierCurve";this.v0= +a||new z;this.v1=b||new z;this.v2=c||new z;this.v3=d||new z}function Ua(a,b,c,d){J.call(this);this.type="CubicBezierCurve3";this.v0=a||new n;this.v1=b||new n;this.v2=c||new n;this.v3=d||new n}function Aa(a,b){J.call(this);this.type="LineCurve";this.v1=a||new z;this.v2=b||new z}function Ka(a,b){J.call(this);this.type="LineCurve3";this.v1=a||new n;this.v2=b||new n}function La(a,b,c){J.call(this);this.type="QuadraticBezierCurve";this.v0=a||new z;this.v1=b||new z;this.v2=c||new z}function Va(a,b,c){J.call(this); +this.type="QuadraticBezierCurve3";this.v0=a||new n;this.v1=b||new n;this.v2=c||new n}function Ma(a){J.call(this);this.type="SplineCurve";this.points=a||[]}function $a(){J.call(this);this.type="CurvePath";this.curves=[];this.autoClose=!1}function Na(a){$a.call(this);this.type="Path";this.currentPoint=new z;a&&this.setFromPoints(a)}function hb(a){Na.call(this,a);this.uuid=R.generateUUID();this.type="Shape";this.holes=[]}function ba(a,b){D.call(this);this.type="Light";this.color=new I(a);this.intensity= +void 0!==b?b:1;this.receiveShadow=void 0}function Id(a,b,c){ba.call(this,a,c);this.type="HemisphereLight";this.castShadow=void 0;this.position.copy(D.DefaultUp);this.updateMatrix();this.groundColor=new I(b)}function Gb(a){this.camera=a;this.bias=0;this.radius=1;this.mapSize=new z(512,512);this.map=null;this.matrix=new O}function Jd(){Gb.call(this,new V(50,1,.5,500))}function Kd(a,b,c,d,e,f){ba.call(this,a,b);this.type="SpotLight";this.position.copy(D.DefaultUp);this.updateMatrix();this.target=new D; +Object.defineProperty(this,"power",{get:function(){return this.intensity*Math.PI},set:function(a){this.intensity=a/Math.PI}});this.distance=void 0!==c?c:0;this.angle=void 0!==d?d:Math.PI/3;this.penumbra=void 0!==e?e:0;this.decay=void 0!==f?f:1;this.shadow=new Jd}function Ld(a,b,c,d){ba.call(this,a,b);this.type="PointLight";Object.defineProperty(this,"power",{get:function(){return 4*this.intensity*Math.PI},set:function(a){this.intensity=a/(4*Math.PI)}});this.distance=void 0!==c?c:0;this.decay=void 0!== +d?d:1;this.shadow=new Gb(new V(90,1,.5,500))}function id(a,b,c,d,e,f){Ra.call(this);this.type="OrthographicCamera";this.zoom=1;this.view=null;this.left=void 0!==a?a:-1;this.right=void 0!==b?b:1;this.top=void 0!==c?c:1;this.bottom=void 0!==d?d:-1;this.near=void 0!==e?e:.1;this.far=void 0!==f?f:2E3;this.updateProjectionMatrix()}function Md(){Gb.call(this,new id(-5,5,5,-5,.5,500))}function Nd(a,b){ba.call(this,a,b);this.type="DirectionalLight";this.position.copy(D.DefaultUp);this.updateMatrix();this.target= +new D;this.shadow=new Md}function Od(a,b){ba.call(this,a,b);this.type="AmbientLight";this.castShadow=void 0}function Pd(a,b,c,d){ba.call(this,a,b);this.type="RectAreaLight";this.width=void 0!==c?c:10;this.height=void 0!==d?d:10}function Qd(a){this.manager=void 0!==a?a:za;this.textures={}}function ke(a){this.manager=void 0!==a?a:za}function le(a){this.manager=void 0!==a?a:za;this.resourcePath=""}function me(a){"undefined"===typeof createImageBitmap&&console.warn("THREE.ImageBitmapLoader: createImageBitmap() not supported."); +"undefined"===typeof fetch&&console.warn("THREE.ImageBitmapLoader: fetch() not supported.");this.manager=void 0!==a?a:za;this.options=void 0}function ne(){this.type="ShapePath";this.color=new I;this.subPaths=[];this.currentPath=null}function oe(a){this.type="Font";this.data=a}function wf(a){this.manager=void 0!==a?a:za}function jd(){}function pe(a){this.manager=void 0!==a?a:za}function xf(){this.type="StereoCamera";this.aspect=1;this.eyeSep=.064;this.cameraL=new V;this.cameraL.layers.enable(1);this.cameraL.matrixAutoUpdate= +!1;this.cameraR=new V;this.cameraR.layers.enable(2);this.cameraR.matrixAutoUpdate=!1}function kd(a,b,c,d){D.call(this);this.type="CubeCamera";var e=new V(90,1,a,b);e.up.set(0,-1,0);e.lookAt(new n(1,0,0));this.add(e);var f=new V(90,1,a,b);f.up.set(0,-1,0);f.lookAt(new n(-1,0,0));this.add(f);var g=new V(90,1,a,b);g.up.set(0,0,1);g.lookAt(new n(0,1,0));this.add(g);var h=new V(90,1,a,b);h.up.set(0,0,-1);h.lookAt(new n(0,-1,0));this.add(h);var k=new V(90,1,a,b);k.up.set(0,-1,0);k.lookAt(new n(0,0,1)); +this.add(k);var m=new V(90,1,a,b);m.up.set(0,-1,0);m.lookAt(new n(0,0,-1));this.add(m);d=d||{format:1022,magFilter:1006,minFilter:1006};this.renderTarget=new Ib(c,c,d);this.renderTarget.texture.name="CubeCamera";this.update=function(a,b){null===this.parent&&this.updateMatrixWorld();var c=this.renderTarget,d=c.texture.generateMipmaps;c.texture.generateMipmaps=!1;c.activeCubeFace=0;a.render(b,e,c);c.activeCubeFace=1;a.render(b,f,c);c.activeCubeFace=2;a.render(b,g,c);c.activeCubeFace=3;a.render(b,h, +c);c.activeCubeFace=4;a.render(b,k,c);c.texture.generateMipmaps=d;c.activeCubeFace=5;a.render(b,m,c);a.setRenderTarget(null)};this.clear=function(a,b,c,d){for(var e=this.renderTarget,f=0;6>f;f++)e.activeCubeFace=f,a.setRenderTarget(e),a.clear(b,c,d);a.setRenderTarget(null)}}function qe(a){this.autoStart=void 0!==a?a:!0;this.elapsedTime=this.oldTime=this.startTime=0;this.running=!1}function re(){D.call(this);this.type="AudioListener";this.context=se.getContext();this.gain=this.context.createGain(); +this.gain.connect(this.context.destination);this.filter=null;this.timeDelta=0}function lc(a){D.call(this);this.type="Audio";this.listener=a;this.context=a.context;this.gain=this.context.createGain();this.gain.connect(a.getInput());this.autoplay=!1;this.buffer=null;this.detune=0;this.loop=!1;this.offset=this.startTime=0;this.playbackRate=1;this.isPlaying=!1;this.hasPlaybackControl=!0;this.sourceType="empty";this.filters=[]}function te(a){lc.call(this,a);this.panner=this.context.createPanner();this.panner.connect(this.gain)} +function ue(a,b){this.analyser=a.context.createAnalyser();this.analyser.fftSize=void 0!==b?b:2048;this.data=new Uint8Array(this.analyser.frequencyBinCount);a.getOutput().connect(this.analyser)}function ve(a,b,c){this.binding=a;this.valueSize=c;a=Float64Array;switch(b){case "quaternion":b=this._slerp;break;case "string":case "bool":a=Array;b=this._select;break;default:b=this._lerp}this.buffer=new a(4*c);this._mixBufferRegion=b;this.referenceCount=this.useCount=this.cumulativeWeight=0}function yf(a, +b,c){c=c||oa.parseTrackName(b);this._targetGroup=a;this._bindings=a.subscribe_(b,c)}function oa(a,b,c){this.path=b;this.parsedPath=c||oa.parseTrackName(b);this.node=oa.findNode(a,this.parsedPath.nodeName)||a;this.rootNode=a}function zf(){this.uuid=R.generateUUID();this._objects=Array.prototype.slice.call(arguments);this.nCachedObjects_=0;var a={};this._indicesByUUID=a;for(var b=0,c=arguments.length;b!==c;++b)a[arguments[b].uuid]=b;this._paths=[];this._parsedPaths=[];this._bindings=[];this._bindingsIndicesByPath= +{};var d=this;this.stats={objects:{get total(){return d._objects.length},get inUse(){return this.total-d.nCachedObjects_}},get bindingsPerObject(){return d._bindings.length}}}function Af(a,b,c){this._mixer=a;this._clip=b;this._localRoot=c||null;a=b.tracks;b=a.length;c=Array(b);for(var d={endingStart:2400,endingEnd:2400},e=0;e!==b;++e){var f=a[e].createInterpolant(null);c[e]=f;f.settings=d}this._interpolantSettings=d;this._interpolants=c;this._propertyBindings=Array(b);this._weightInterpolant=this._timeScaleInterpolant= +this._byClipCacheIndex=this._cacheIndex=null;this.loop=2201;this._loopCount=-1;this._startTime=null;this.time=0;this._effectiveWeight=this.weight=this._effectiveTimeScale=this.timeScale=1;this.repetitions=Infinity;this.paused=!1;this.enabled=!0;this.clampWhenFinished=!1;this.zeroSlopeAtEnd=this.zeroSlopeAtStart=!0}function we(a){this._root=a;this._initMemoryManager();this.time=this._accuIndex=0;this.timeScale=1}function Rd(a,b){"string"===typeof a&&(console.warn("THREE.Uniform: Type parameter is no longer needed."), +a=b);this.value=a}function xe(){C.call(this);this.type="InstancedBufferGeometry";this.maxInstancedCount=void 0}function ye(a,b,c){rb.call(this,a,b);this.meshPerAttribute=c||1}function ze(a,b,c,d){"number"===typeof c&&(d=c,c=!1,console.error("THREE.InstancedBufferAttribute: The constructor now expects normalized as the third argument."));E.call(this,a,b,c);this.meshPerAttribute=d||1}function Bf(a,b,c,d){this.ray=new qb(a,b);this.near=c||0;this.far=d||Infinity;this.params={Mesh:{},Line:{},LOD:{},Points:{threshold:1}, +Sprite:{}};Object.defineProperties(this.params,{PointCloud:{get:function(){console.warn("THREE.Raycaster: params.PointCloud has been renamed to params.Points.");return this.Points}}})}function Cf(a,b){return a.distance-b.distance}function Ae(a,b,c,d){if(!1!==a.visible&&(a.raycast(b,c),!0===d)){a=a.children;d=0;for(var e=a.length;dc;c++,d++){var e=c/32*Math.PI*2,f=d/32*Math.PI*2;b.push(Math.cos(e),Math.sin(e),1,Math.cos(f),Math.sin(f), +1)}a.addAttribute("position",new A(b,3));b=new T({fog:!1});this.cone=new S(a,b);this.add(this.cone);this.update()}function Ff(a){var b=[];a&&a.isBone&&b.push(a);for(var c=0;ca?-1:0b;b++)a[b]=(16>b?"0":"")+b.toString(16);return function(){var b=4294967295*Math.random()|0,d=4294967295*Math.random()|0,e=4294967295*Math.random()|0,f=4294967295*Math.random()|0;return(a[b&255]+a[b>>8&255]+a[b>>16&255]+a[b>>24&255]+"-"+a[d&255]+a[d>>8&255]+"-"+a[d>> +16&15|64]+a[d>>24&255]+"-"+a[e&63|128]+a[e>>8&255]+"-"+a[e>>16&255]+a[e>>24&255]+a[f&255]+a[f>>8&255]+a[f>>16&255]+a[f>>24&255]).toUpperCase()}}(),clamp:function(a,b,c){return Math.max(b,Math.min(c,a))},euclideanModulo:function(a,b){return(a%b+b)%b},mapLinear:function(a,b,c,d,e){return d+(a-b)*(e-d)/(c-b)},lerp:function(a,b,c){return(1-c)*a+c*b},smoothstep:function(a,b,c){if(a<=b)return 0;if(a>=c)return 1;a=(a-b)/(c-b);return a*a*(3-2*a)},smootherstep:function(a,b,c){if(a<=b)return 0;if(a>=c)return 1; +a=(a-b)/(c-b);return a*a*a*(a*(6*a-15)+10)},randInt:function(a,b){return a+Math.floor(Math.random()*(b-a+1))},randFloat:function(a,b){return a+Math.random()*(b-a)},randFloatSpread:function(a){return a*(.5-Math.random())},degToRad:function(a){return a*R.DEG2RAD},radToDeg:function(a){return a*R.RAD2DEG},isPowerOfTwo:function(a){return 0===(a&a-1)&&0!==a},ceilPowerOfTwo:function(a){return Math.pow(2,Math.ceil(Math.log(a)/Math.LN2))},floorPowerOfTwo:function(a){return Math.pow(2,Math.floor(Math.log(a)/ +Math.LN2))}};Object.defineProperties(z.prototype,{width:{get:function(){return this.x},set:function(a){this.x=a}},height:{get:function(){return this.y},set:function(a){this.y=a}}});Object.assign(z.prototype,{isVector2:!0,set:function(a,b){this.x=a;this.y=b;return this},setScalar:function(a){this.y=this.x=a;return this},setX:function(a){this.x=a;return this},setY:function(a){this.y=a;return this},setComponent:function(a,b){switch(a){case 0:this.x=b;break;case 1:this.y=b;break;default:throw Error("index is out of range: "+ +a);}return this},getComponent:function(a){switch(a){case 0:return this.x;case 1:return this.y;default:throw Error("index is out of range: "+a);}},clone:function(){return new this.constructor(this.x,this.y)},copy:function(a){this.x=a.x;this.y=a.y;return this},add:function(a,b){if(void 0!==b)return console.warn("THREE.Vector2: .add() now only accepts one argument. Use .addVectors( a, b ) instead."),this.addVectors(a,b);this.x+=a.x;this.y+=a.y;return this},addScalar:function(a){this.x+=a;this.y+=a;return this}, +addVectors:function(a,b){this.x=a.x+b.x;this.y=a.y+b.y;return this},addScaledVector:function(a,b){this.x+=a.x*b;this.y+=a.y*b;return this},sub:function(a,b){if(void 0!==b)return console.warn("THREE.Vector2: .sub() now only accepts one argument. Use .subVectors( a, b ) instead."),this.subVectors(a,b);this.x-=a.x;this.y-=a.y;return this},subScalar:function(a){this.x-=a;this.y-=a;return this},subVectors:function(a,b){this.x=a.x-b.x;this.y=a.y-b.y;return this},multiply:function(a){this.x*=a.x;this.y*= +a.y;return this},multiplyScalar:function(a){this.x*=a;this.y*=a;return this},divide:function(a){this.x/=a.x;this.y/=a.y;return this},divideScalar:function(a){return this.multiplyScalar(1/a)},applyMatrix3:function(a){var b=this.x,c=this.y;a=a.elements;this.x=a[0]*b+a[3]*c+a[6];this.y=a[1]*b+a[4]*c+a[7];return this},min:function(a){this.x=Math.min(this.x,a.x);this.y=Math.min(this.y,a.y);return this},max:function(a){this.x=Math.max(this.x,a.x);this.y=Math.max(this.y,a.y);return this},clamp:function(a, +b){this.x=Math.max(a.x,Math.min(b.x,this.x));this.y=Math.max(a.y,Math.min(b.y,this.y));return this},clampScalar:function(){var a=new z,b=new z;return function(c,d){a.set(c,c);b.set(d,d);return this.clamp(a,b)}}(),clampLength:function(a,b){var c=this.length();return this.divideScalar(c||1).multiplyScalar(Math.max(a,Math.min(b,c)))},floor:function(){this.x=Math.floor(this.x);this.y=Math.floor(this.y);return this},ceil:function(){this.x=Math.ceil(this.x);this.y=Math.ceil(this.y);return this},round:function(){this.x= +Math.round(this.x);this.y=Math.round(this.y);return this},roundToZero:function(){this.x=0>this.x?Math.ceil(this.x):Math.floor(this.x);this.y=0>this.y?Math.ceil(this.y):Math.floor(this.y);return this},negate:function(){this.x=-this.x;this.y=-this.y;return this},dot:function(a){return this.x*a.x+this.y*a.y},cross:function(a){return this.x*a.y-this.y*a.x},lengthSq:function(){return this.x*this.x+this.y*this.y},length:function(){return Math.sqrt(this.x*this.x+this.y*this.y)},manhattanLength:function(){return Math.abs(this.x)+ +Math.abs(this.y)},normalize:function(){return this.divideScalar(this.length()||1)},angle:function(){var a=Math.atan2(this.y,this.x);0>a&&(a+=2*Math.PI);return a},distanceTo:function(a){return Math.sqrt(this.distanceToSquared(a))},distanceToSquared:function(a){var b=this.x-a.x;a=this.y-a.y;return b*b+a*a},manhattanDistanceTo:function(a){return Math.abs(this.x-a.x)+Math.abs(this.y-a.y)},setLength:function(a){return this.normalize().multiplyScalar(a)},lerp:function(a,b){this.x+=(a.x-this.x)*b;this.y+= +(a.y-this.y)*b;return this},lerpVectors:function(a,b,c){return this.subVectors(b,a).multiplyScalar(c).add(a)},equals:function(a){return a.x===this.x&&a.y===this.y},fromArray:function(a,b){void 0===b&&(b=0);this.x=a[b];this.y=a[b+1];return this},toArray:function(a,b){void 0===a&&(a=[]);void 0===b&&(b=0);a[b]=this.x;a[b+1]=this.y;return a},fromBufferAttribute:function(a,b,c){void 0!==c&&console.warn("THREE.Vector2: offset has been removed from .fromBufferAttribute().");this.x=a.getX(b);this.y=a.getY(b); +return this},rotateAround:function(a,b){var c=Math.cos(b);b=Math.sin(b);var d=this.x-a.x,e=this.y-a.y;this.x=d*c-e*b+a.x;this.y=d*b+e*c+a.y;return this}});Object.assign(O.prototype,{isMatrix4:!0,set:function(a,b,c,d,e,f,g,h,k,m,l,p,r,n,t,v){var q=this.elements;q[0]=a;q[4]=b;q[8]=c;q[12]=d;q[1]=e;q[5]=f;q[9]=g;q[13]=h;q[2]=k;q[6]=m;q[10]=l;q[14]=p;q[3]=r;q[7]=n;q[11]=t;q[15]=v;return this},identity:function(){this.set(1,0,0,0,0,1,0,0,0,0,1,0,0,0,0,1);return this},clone:function(){return(new O).fromArray(this.elements)}, +copy:function(a){var b=this.elements;a=a.elements;b[0]=a[0];b[1]=a[1];b[2]=a[2];b[3]=a[3];b[4]=a[4];b[5]=a[5];b[6]=a[6];b[7]=a[7];b[8]=a[8];b[9]=a[9];b[10]=a[10];b[11]=a[11];b[12]=a[12];b[13]=a[13];b[14]=a[14];b[15]=a[15];return this},copyPosition:function(a){var b=this.elements;a=a.elements;b[12]=a[12];b[13]=a[13];b[14]=a[14];return this},extractBasis:function(a,b,c){a.setFromMatrixColumn(this,0);b.setFromMatrixColumn(this,1);c.setFromMatrixColumn(this,2);return this},makeBasis:function(a,b,c){this.set(a.x, +b.x,c.x,0,a.y,b.y,c.y,0,a.z,b.z,c.z,0,0,0,0,1);return this},extractRotation:function(){var a=new n;return function(b){var c=this.elements,d=b.elements,e=1/a.setFromMatrixColumn(b,0).length(),f=1/a.setFromMatrixColumn(b,1).length();b=1/a.setFromMatrixColumn(b,2).length();c[0]=d[0]*e;c[1]=d[1]*e;c[2]=d[2]*e;c[3]=0;c[4]=d[4]*f;c[5]=d[5]*f;c[6]=d[6]*f;c[7]=0;c[8]=d[8]*b;c[9]=d[9]*b;c[10]=d[10]*b;c[11]=0;c[12]=0;c[13]=0;c[14]=0;c[15]=1;return this}}(),makeRotationFromEuler:function(a){a&&a.isEuler||console.error("THREE.Matrix4: .makeRotationFromEuler() now expects a Euler rotation rather than a Vector3 and order."); +var b=this.elements,c=a.x,d=a.y,e=a.z,f=Math.cos(c);c=Math.sin(c);var g=Math.cos(d);d=Math.sin(d);var h=Math.cos(e);e=Math.sin(e);if("XYZ"===a.order){a=f*h;var k=f*e,m=c*h,q=c*e;b[0]=g*h;b[4]=-g*e;b[8]=d;b[1]=k+m*d;b[5]=a-q*d;b[9]=-c*g;b[2]=q-a*d;b[6]=m+k*d;b[10]=f*g}else"YXZ"===a.order?(a=g*h,k=g*e,m=d*h,q=d*e,b[0]=a+q*c,b[4]=m*c-k,b[8]=f*d,b[1]=f*e,b[5]=f*h,b[9]=-c,b[2]=k*c-m,b[6]=q+a*c,b[10]=f*g):"ZXY"===a.order?(a=g*h,k=g*e,m=d*h,q=d*e,b[0]=a-q*c,b[4]=-f*e,b[8]=m+k*c,b[1]=k+m*c,b[5]=f*h,b[9]= +q-a*c,b[2]=-f*d,b[6]=c,b[10]=f*g):"ZYX"===a.order?(a=f*h,k=f*e,m=c*h,q=c*e,b[0]=g*h,b[4]=m*d-k,b[8]=a*d+q,b[1]=g*e,b[5]=q*d+a,b[9]=k*d-m,b[2]=-d,b[6]=c*g,b[10]=f*g):"YZX"===a.order?(a=f*g,k=f*d,m=c*g,q=c*d,b[0]=g*h,b[4]=q-a*e,b[8]=m*e+k,b[1]=e,b[5]=f*h,b[9]=-c*h,b[2]=-d*h,b[6]=k*e+m,b[10]=a-q*e):"XZY"===a.order&&(a=f*g,k=f*d,m=c*g,q=c*d,b[0]=g*h,b[4]=-e,b[8]=d*h,b[1]=a*e+q,b[5]=f*h,b[9]=k*e-m,b[2]=m*e-k,b[6]=c*h,b[10]=q*e+a);b[3]=0;b[7]=0;b[11]=0;b[12]=0;b[13]=0;b[14]=0;b[15]=1;return this},makeRotationFromQuaternion:function(){var a= +new n(0,0,0),b=new n(1,1,1);return function(c){return this.compose(a,c,b)}}(),lookAt:function(){var a=new n,b=new n,c=new n;return function(d,e,f){var g=this.elements;c.subVectors(d,e);0===c.lengthSq()&&(c.z=1);c.normalize();a.crossVectors(f,c);0===a.lengthSq()&&(1===Math.abs(f.z)?c.x+=1E-4:c.z+=1E-4,c.normalize(),a.crossVectors(f,c));a.normalize();b.crossVectors(c,a);g[0]=a.x;g[4]=b.x;g[8]=c.x;g[1]=a.y;g[5]=b.y;g[9]=c.y;g[2]=a.z;g[6]=b.z;g[10]=c.z;return this}}(),multiply:function(a,b){return void 0!== +b?(console.warn("THREE.Matrix4: .multiply() now only accepts one argument. Use .multiplyMatrices( a, b ) instead."),this.multiplyMatrices(a,b)):this.multiplyMatrices(this,a)},premultiply:function(a){return this.multiplyMatrices(a,this)},multiplyMatrices:function(a,b){var c=a.elements,d=b.elements;b=this.elements;a=c[0];var e=c[4],f=c[8],g=c[12],h=c[1],k=c[5],m=c[9],q=c[13],l=c[2],r=c[6],n=c[10],t=c[14],v=c[3],w=c[7],y=c[11];c=c[15];var u=d[0],z=d[4],G=d[8],N=d[12],A=d[1],B=d[5],D=d[9],C=d[13],E=d[2], +F=d[6],I=d[10],L=d[14],H=d[3],J=d[7],O=d[11];d=d[15];b[0]=a*u+e*A+f*E+g*H;b[4]=a*z+e*B+f*F+g*J;b[8]=a*G+e*D+f*I+g*O;b[12]=a*N+e*C+f*L+g*d;b[1]=h*u+k*A+m*E+q*H;b[5]=h*z+k*B+m*F+q*J;b[9]=h*G+k*D+m*I+q*O;b[13]=h*N+k*C+m*L+q*d;b[2]=l*u+r*A+n*E+t*H;b[6]=l*z+r*B+n*F+t*J;b[10]=l*G+r*D+n*I+t*O;b[14]=l*N+r*C+n*L+t*d;b[3]=v*u+w*A+y*E+c*H;b[7]=v*z+w*B+y*F+c*J;b[11]=v*G+w*D+y*I+c*O;b[15]=v*N+w*C+y*L+c*d;return this},multiplyScalar:function(a){var b=this.elements;b[0]*=a;b[4]*=a;b[8]*=a;b[12]*=a;b[1]*=a;b[5]*= +a;b[9]*=a;b[13]*=a;b[2]*=a;b[6]*=a;b[10]*=a;b[14]*=a;b[3]*=a;b[7]*=a;b[11]*=a;b[15]*=a;return this},applyToBufferAttribute:function(){var a=new n;return function(b){for(var c=0,d=b.count;cthis.determinant()&&(g=-g);c.x=f[12];c.y=f[13];c.z=f[14];b.copy(this);c=1/g;f=1/h;var m=1/k;b.elements[0]*=c;b.elements[1]*=c;b.elements[2]*=c;b.elements[4]*=f;b.elements[5]*=f;b.elements[6]*=f;b.elements[8]*=m;b.elements[9]*=m;b.elements[10]*=m;d.setFromRotationMatrix(b); +e.x=g;e.y=h;e.z=k;return this}}(),makePerspective:function(a,b,c,d,e,f){void 0===f&&console.warn("THREE.Matrix4: .makePerspective() has been redefined and has a new signature. Please check the docs.");var g=this.elements;g[0]=2*e/(b-a);g[4]=0;g[8]=(b+a)/(b-a);g[12]=0;g[1]=0;g[5]=2*e/(c-d);g[9]=(c+d)/(c-d);g[13]=0;g[2]=0;g[6]=0;g[10]=-(f+e)/(f-e);g[14]=-2*f*e/(f-e);g[3]=0;g[7]=0;g[11]=-1;g[15]=0;return this},makeOrthographic:function(a,b,c,d,e,f){var g=this.elements,h=1/(b-a),k=1/(c-d),m=1/(f-e);g[0]= +2*h;g[4]=0;g[8]=0;g[12]=-((b+a)*h);g[1]=0;g[5]=2*k;g[9]=0;g[13]=-((c+d)*k);g[2]=0;g[6]=0;g[10]=-2*m;g[14]=-((f+e)*m);g[3]=0;g[7]=0;g[11]=0;g[15]=1;return this},equals:function(a){var b=this.elements;a=a.elements;for(var c=0;16>c;c++)if(b[c]!==a[c])return!1;return!0},fromArray:function(a,b){void 0===b&&(b=0);for(var c=0;16>c;c++)this.elements[c]=a[c+b];return this},toArray:function(a,b){void 0===a&&(a=[]);void 0===b&&(b=0);var c=this.elements;a[b]=c[0];a[b+1]=c[1];a[b+2]=c[2];a[b+3]=c[3];a[b+4]=c[4]; +a[b+5]=c[5];a[b+6]=c[6];a[b+7]=c[7];a[b+8]=c[8];a[b+9]=c[9];a[b+10]=c[10];a[b+11]=c[11];a[b+12]=c[12];a[b+13]=c[13];a[b+14]=c[14];a[b+15]=c[15];return a}});Object.assign(ka,{slerp:function(a,b,c,d){return c.copy(a).slerp(b,d)},slerpFlat:function(a,b,c,d,e,f,g){var h=c[d+0],k=c[d+1],m=c[d+2];c=c[d+3];d=e[f+0];var l=e[f+1],p=e[f+2];e=e[f+3];if(c!==e||h!==d||k!==l||m!==p){f=1-g;var r=h*d+k*l+m*p+c*e,n=0<=r?1:-1,t=1-r*r;t>Number.EPSILON&&(t=Math.sqrt(t),r=Math.atan2(t,r*n),f=Math.sin(f*r)/t,g=Math.sin(g* +r)/t);n*=g;h=h*f+d*n;k=k*f+l*n;m=m*f+p*n;c=c*f+e*n;f===1-g&&(g=1/Math.sqrt(h*h+k*k+m*m+c*c),h*=g,k*=g,m*=g,c*=g)}a[b]=h;a[b+1]=k;a[b+2]=m;a[b+3]=c}});Object.defineProperties(ka.prototype,{x:{get:function(){return this._x},set:function(a){this._x=a;this.onChangeCallback()}},y:{get:function(){return this._y},set:function(a){this._y=a;this.onChangeCallback()}},z:{get:function(){return this._z},set:function(a){this._z=a;this.onChangeCallback()}},w:{get:function(){return this._w},set:function(a){this._w= +a;this.onChangeCallback()}}});Object.assign(ka.prototype,{isQuaternion:!0,set:function(a,b,c,d){this._x=a;this._y=b;this._z=c;this._w=d;this.onChangeCallback();return this},clone:function(){return new this.constructor(this._x,this._y,this._z,this._w)},copy:function(a){this._x=a.x;this._y=a.y;this._z=a.z;this._w=a.w;this.onChangeCallback();return this},setFromEuler:function(a,b){if(!a||!a.isEuler)throw Error("THREE.Quaternion: .setFromEuler() now expects an Euler rotation rather than a Vector3 and order."); +var c=a._x,d=a._y,e=a._z;a=a.order;var f=Math.cos,g=Math.sin,h=f(c/2),k=f(d/2);f=f(e/2);c=g(c/2);d=g(d/2);e=g(e/2);"XYZ"===a?(this._x=c*k*f+h*d*e,this._y=h*d*f-c*k*e,this._z=h*k*e+c*d*f,this._w=h*k*f-c*d*e):"YXZ"===a?(this._x=c*k*f+h*d*e,this._y=h*d*f-c*k*e,this._z=h*k*e-c*d*f,this._w=h*k*f+c*d*e):"ZXY"===a?(this._x=c*k*f-h*d*e,this._y=h*d*f+c*k*e,this._z=h*k*e+c*d*f,this._w=h*k*f-c*d*e):"ZYX"===a?(this._x=c*k*f-h*d*e,this._y=h*d*f+c*k*e,this._z=h*k*e-c*d*f,this._w=h*k*f+c*d*e):"YZX"===a?(this._x= +c*k*f+h*d*e,this._y=h*d*f+c*k*e,this._z=h*k*e-c*d*f,this._w=h*k*f-c*d*e):"XZY"===a&&(this._x=c*k*f-h*d*e,this._y=h*d*f-c*k*e,this._z=h*k*e+c*d*f,this._w=h*k*f+c*d*e);if(!1!==b)this.onChangeCallback();return this},setFromAxisAngle:function(a,b){b/=2;var c=Math.sin(b);this._x=a.x*c;this._y=a.y*c;this._z=a.z*c;this._w=Math.cos(b);this.onChangeCallback();return this},setFromRotationMatrix:function(a){var b=a.elements,c=b[0];a=b[4];var d=b[8],e=b[1],f=b[5],g=b[9],h=b[2],k=b[6];b=b[10];var m=c+f+b;0f&&c>b?(c=2*Math.sqrt(1+c-f-b),this._w=(k-g)/c,this._x=.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=.25*c,this._z=(g+k)/c):(c=2*Math.sqrt(1+b-c-f),this._w=(e-a)/c,this._x=(d+h)/c,this._y=(g+k)/c,this._z=.25*c);this.onChangeCallback();return this},setFromUnitVectors:function(){var a=new n,b;return function(c,d){void 0===a&&(a=new n);b=c.dot(d)+1;1E-6>b? +(b=0,Math.abs(c.x)>Math.abs(c.z)?a.set(-c.y,c.x,0):a.set(0,-c.z,c.y)):a.crossVectors(c,d);this._x=a.x;this._y=a.y;this._z=a.z;this._w=b;return this.normalize()}}(),angleTo:function(a){return 2*Math.acos(Math.abs(R.clamp(this.dot(a),-1,1)))},rotateTowards:function(a,b){var c=this.angleTo(a);if(0===c)return this;this.slerp(a,Math.min(1,b/c));return this},inverse:function(){return this.conjugate()},conjugate:function(){this._x*=-1;this._y*=-1;this._z*=-1;this.onChangeCallback();return this},dot:function(a){return this._x* +a._x+this._y*a._y+this._z*a._z+this._w*a._w},lengthSq:function(){return this._x*this._x+this._y*this._y+this._z*this._z+this._w*this._w},length:function(){return Math.sqrt(this._x*this._x+this._y*this._y+this._z*this._z+this._w*this._w)},normalize:function(){var a=this.length();0===a?(this._z=this._y=this._x=0,this._w=1):(a=1/a,this._x*=a,this._y*=a,this._z*=a,this._w*=a);this.onChangeCallback();return this},multiply:function(a,b){return void 0!==b?(console.warn("THREE.Quaternion: .multiply() now only accepts one argument. Use .multiplyQuaternions( a, b ) instead."), +this.multiplyQuaternions(a,b)):this.multiplyQuaternions(this,a)},premultiply:function(a){return this.multiplyQuaternions(a,this)},multiplyQuaternions:function(a,b){var c=a._x,d=a._y,e=a._z;a=a._w;var f=b._x,g=b._y,h=b._z;b=b._w;this._x=c*b+a*f+d*h-e*g;this._y=d*b+a*g+e*f-c*h;this._z=e*b+a*h+c*g-d*f;this._w=a*b-c*f-d*g-e*h;this.onChangeCallback();return this},slerp:function(a,b){if(0===b)return this;if(1===b)return this.copy(a);var c=this._x,d=this._y,e=this._z,f=this._w,g=f*a._w+c*a._x+d*a._y+e*a._z; +0>g?(this._w=-a._w,this._x=-a._x,this._y=-a._y,this._z=-a._z,g=-g):this.copy(a);if(1<=g)return this._w=f,this._x=c,this._y=d,this._z=e,this;a=1-g*g;if(a<=Number.EPSILON)return g=1-b,this._w=g*f+b*this._w,this._x=g*c+b*this._x,this._y=g*d+b*this._y,this._z=g*e+b*this._z,this.normalize();a=Math.sqrt(a);var h=Math.atan2(a,g);g=Math.sin((1-b)*h)/a;b=Math.sin(b*h)/a;this._w=f*g+this._w*b;this._x=c*g+this._x*b;this._y=d*g+this._y*b;this._z=e*g+this._z*b;this.onChangeCallback();return this},equals:function(a){return a._x=== +this._x&&a._y===this._y&&a._z===this._z&&a._w===this._w},fromArray:function(a,b){void 0===b&&(b=0);this._x=a[b];this._y=a[b+1];this._z=a[b+2];this._w=a[b+3];this.onChangeCallback();return this},toArray:function(a,b){void 0===a&&(a=[]);void 0===b&&(b=0);a[b]=this._x;a[b+1]=this._y;a[b+2]=this._z;a[b+3]=this._w;return a},onChange:function(a){this.onChangeCallback=a;return this},onChangeCallback:function(){}});Object.assign(n.prototype,{isVector3:!0,set:function(a,b,c){this.x=a;this.y=b;this.z=c;return this}, +setScalar:function(a){this.z=this.y=this.x=a;return this},setX:function(a){this.x=a;return this},setY:function(a){this.y=a;return this},setZ:function(a){this.z=a;return this},setComponent:function(a,b){switch(a){case 0:this.x=b;break;case 1:this.y=b;break;case 2:this.z=b;break;default:throw Error("index is out of range: "+a);}return this},getComponent:function(a){switch(a){case 0:return this.x;case 1:return this.y;case 2:return this.z;default:throw Error("index is out of range: "+a);}},clone:function(){return new this.constructor(this.x, +this.y,this.z)},copy:function(a){this.x=a.x;this.y=a.y;this.z=a.z;return this},add:function(a,b){if(void 0!==b)return console.warn("THREE.Vector3: .add() now only accepts one argument. Use .addVectors( a, b ) instead."),this.addVectors(a,b);this.x+=a.x;this.y+=a.y;this.z+=a.z;return this},addScalar:function(a){this.x+=a;this.y+=a;this.z+=a;return this},addVectors:function(a,b){this.x=a.x+b.x;this.y=a.y+b.y;this.z=a.z+b.z;return this},addScaledVector:function(a,b){this.x+=a.x*b;this.y+=a.y*b;this.z+= +a.z*b;return this},sub:function(a,b){if(void 0!==b)return console.warn("THREE.Vector3: .sub() now only accepts one argument. Use .subVectors( a, b ) instead."),this.subVectors(a,b);this.x-=a.x;this.y-=a.y;this.z-=a.z;return this},subScalar:function(a){this.x-=a;this.y-=a;this.z-=a;return this},subVectors:function(a,b){this.x=a.x-b.x;this.y=a.y-b.y;this.z=a.z-b.z;return this},multiply:function(a,b){if(void 0!==b)return console.warn("THREE.Vector3: .multiply() now only accepts one argument. Use .multiplyVectors( a, b ) instead."), +this.multiplyVectors(a,b);this.x*=a.x;this.y*=a.y;this.z*=a.z;return this},multiplyScalar:function(a){this.x*=a;this.y*=a;this.z*=a;return this},multiplyVectors:function(a,b){this.x=a.x*b.x;this.y=a.y*b.y;this.z=a.z*b.z;return this},applyEuler:function(){var a=new ka;return function(b){b&&b.isEuler||console.error("THREE.Vector3: .applyEuler() now expects an Euler rotation rather than a Vector3 and order.");return this.applyQuaternion(a.setFromEuler(b))}}(),applyAxisAngle:function(){var a=new ka;return function(b, +c){return this.applyQuaternion(a.setFromAxisAngle(b,c))}}(),applyMatrix3:function(a){var b=this.x,c=this.y,d=this.z;a=a.elements;this.x=a[0]*b+a[3]*c+a[6]*d;this.y=a[1]*b+a[4]*c+a[7]*d;this.z=a[2]*b+a[5]*c+a[8]*d;return this},applyMatrix4:function(a){var b=this.x,c=this.y,d=this.z;a=a.elements;var e=1/(a[3]*b+a[7]*c+a[11]*d+a[15]);this.x=(a[0]*b+a[4]*c+a[8]*d+a[12])*e;this.y=(a[1]*b+a[5]*c+a[9]*d+a[13])*e;this.z=(a[2]*b+a[6]*c+a[10]*d+a[14])*e;return this},applyQuaternion:function(a){var b=this.x, +c=this.y,d=this.z,e=a.x,f=a.y,g=a.z;a=a.w;var h=a*b+f*d-g*c,k=a*c+g*b-e*d,m=a*d+e*c-f*b;b=-e*b-f*c-g*d;this.x=h*a+b*-e+k*-g-m*-f;this.y=k*a+b*-f+m*-e-h*-g;this.z=m*a+b*-g+h*-f-k*-e;return this},project:function(a){return this.applyMatrix4(a.matrixWorldInverse).applyMatrix4(a.projectionMatrix)},unproject:function(){var a=new O;return function(b){return this.applyMatrix4(a.getInverse(b.projectionMatrix)).applyMatrix4(b.matrixWorld)}}(),transformDirection:function(a){var b=this.x,c=this.y,d=this.z;a= +a.elements;this.x=a[0]*b+a[4]*c+a[8]*d;this.y=a[1]*b+a[5]*c+a[9]*d;this.z=a[2]*b+a[6]*c+a[10]*d;return this.normalize()},divide:function(a){this.x/=a.x;this.y/=a.y;this.z/=a.z;return this},divideScalar:function(a){return this.multiplyScalar(1/a)},min:function(a){this.x=Math.min(this.x,a.x);this.y=Math.min(this.y,a.y);this.z=Math.min(this.z,a.z);return this},max:function(a){this.x=Math.max(this.x,a.x);this.y=Math.max(this.y,a.y);this.z=Math.max(this.z,a.z);return this},clamp:function(a,b){this.x=Math.max(a.x, +Math.min(b.x,this.x));this.y=Math.max(a.y,Math.min(b.y,this.y));this.z=Math.max(a.z,Math.min(b.z,this.z));return this},clampScalar:function(){var a=new n,b=new n;return function(c,d){a.set(c,c,c);b.set(d,d,d);return this.clamp(a,b)}}(),clampLength:function(a,b){var c=this.length();return this.divideScalar(c||1).multiplyScalar(Math.max(a,Math.min(b,c)))},floor:function(){this.x=Math.floor(this.x);this.y=Math.floor(this.y);this.z=Math.floor(this.z);return this},ceil:function(){this.x=Math.ceil(this.x); +this.y=Math.ceil(this.y);this.z=Math.ceil(this.z);return this},round:function(){this.x=Math.round(this.x);this.y=Math.round(this.y);this.z=Math.round(this.z);return this},roundToZero:function(){this.x=0>this.x?Math.ceil(this.x):Math.floor(this.x);this.y=0>this.y?Math.ceil(this.y):Math.floor(this.y);this.z=0>this.z?Math.ceil(this.z):Math.floor(this.z);return this},negate:function(){this.x=-this.x;this.y=-this.y;this.z=-this.z;return this},dot:function(a){return this.x*a.x+this.y*a.y+this.z*a.z},lengthSq:function(){return this.x* +this.x+this.y*this.y+this.z*this.z},length:function(){return Math.sqrt(this.x*this.x+this.y*this.y+this.z*this.z)},manhattanLength:function(){return Math.abs(this.x)+Math.abs(this.y)+Math.abs(this.z)},normalize:function(){return this.divideScalar(this.length()||1)},setLength:function(a){return this.normalize().multiplyScalar(a)},lerp:function(a,b){this.x+=(a.x-this.x)*b;this.y+=(a.y-this.y)*b;this.z+=(a.z-this.z)*b;return this},lerpVectors:function(a,b,c){return this.subVectors(b,a).multiplyScalar(c).add(a)}, +cross:function(a,b){return void 0!==b?(console.warn("THREE.Vector3: .cross() now only accepts one argument. Use .crossVectors( a, b ) instead."),this.crossVectors(a,b)):this.crossVectors(this,a)},crossVectors:function(a,b){var c=a.x,d=a.y;a=a.z;var e=b.x,f=b.y;b=b.z;this.x=d*b-a*f;this.y=a*e-c*b;this.z=c*f-d*e;return this},projectOnVector:function(a){var b=a.dot(this)/a.lengthSq();return this.copy(a).multiplyScalar(b)},projectOnPlane:function(){var a=new n;return function(b){a.copy(this).projectOnVector(b); +return this.sub(a)}}(),reflect:function(){var a=new n;return function(b){return this.sub(a.copy(b).multiplyScalar(2*this.dot(b)))}}(),angleTo:function(a){a=this.dot(a)/Math.sqrt(this.lengthSq()*a.lengthSq());return Math.acos(R.clamp(a,-1,1))},distanceTo:function(a){return Math.sqrt(this.distanceToSquared(a))},distanceToSquared:function(a){var b=this.x-a.x,c=this.y-a.y;a=this.z-a.z;return b*b+c*c+a*a},manhattanDistanceTo:function(a){return Math.abs(this.x-a.x)+Math.abs(this.y-a.y)+Math.abs(this.z- +a.z)},setFromSpherical:function(a){return this.setFromSphericalCoords(a.radius,a.phi,a.theta)},setFromSphericalCoords:function(a,b,c){var d=Math.sin(b)*a;this.x=d*Math.sin(c);this.y=Math.cos(b)*a;this.z=d*Math.cos(c);return this},setFromCylindrical:function(a){return this.setFromCylindricalCoords(a.radius,a.theta,a.y)},setFromCylindricalCoords:function(a,b,c){this.x=a*Math.sin(b);this.y=c;this.z=a*Math.cos(b);return this},setFromMatrixPosition:function(a){a=a.elements;this.x=a[12];this.y=a[13];this.z= +a[14];return this},setFromMatrixScale:function(a){var b=this.setFromMatrixColumn(a,0).length(),c=this.setFromMatrixColumn(a,1).length();a=this.setFromMatrixColumn(a,2).length();this.x=b;this.y=c;this.z=a;return this},setFromMatrixColumn:function(a,b){return this.fromArray(a.elements,4*b)},equals:function(a){return a.x===this.x&&a.y===this.y&&a.z===this.z},fromArray:function(a,b){void 0===b&&(b=0);this.x=a[b];this.y=a[b+1];this.z=a[b+2];return this},toArray:function(a,b){void 0===a&&(a=[]);void 0=== +b&&(b=0);a[b]=this.x;a[b+1]=this.y;a[b+2]=this.z;return a},fromBufferAttribute:function(a,b,c){void 0!==c&&console.warn("THREE.Vector3: offset has been removed from .fromBufferAttribute().");this.x=a.getX(b);this.y=a.getY(b);this.z=a.getZ(b);return this}});Object.assign(da.prototype,{isMatrix3:!0,set:function(a,b,c,d,e,f,g,h,k){var m=this.elements;m[0]=a;m[1]=d;m[2]=g;m[3]=b;m[4]=e;m[5]=h;m[6]=c;m[7]=f;m[8]=k;return this},identity:function(){this.set(1,0,0,0,1,0,0,0,1);return this},clone:function(){return(new this.constructor).fromArray(this.elements)}, +copy:function(a){var b=this.elements;a=a.elements;b[0]=a[0];b[1]=a[1];b[2]=a[2];b[3]=a[3];b[4]=a[4];b[5]=a[5];b[6]=a[6];b[7]=a[7];b[8]=a[8];return this},setFromMatrix4:function(a){a=a.elements;this.set(a[0],a[4],a[8],a[1],a[5],a[9],a[2],a[6],a[10]);return this},applyToBufferAttribute:function(){var a=new n;return function(b){for(var c=0,d=b.count;cc;c++)if(b[c]!==a[c])return!1;return!0},fromArray:function(a,b){void 0===b&&(b=0);for(var c=0;9>c;c++)this.elements[c]=a[c+b];return this},toArray:function(a,b){void 0===a&&(a=[]);void 0===b&&(b=0);var c= +this.elements;a[b]=c[0];a[b+1]=c[1];a[b+2]=c[2];a[b+3]=c[3];a[b+4]=c[4];a[b+5]=c[5];a[b+6]=c[6];a[b+7]=c[7];a[b+8]=c[8];return a}});var sc,ib={getDataURL:function(a){if("undefined"==typeof HTMLCanvasElement)return a.src;if(!(a instanceof HTMLCanvasElement)){void 0===sc&&(sc=document.createElementNS("http://www.w3.org/1999/xhtml","canvas"));sc.width=a.width;sc.height=a.height;var b=sc.getContext("2d");a instanceof ImageData?b.putImageData(a,0,0):b.drawImage(a,0,0,a.width,a.height);a=sc}return 2048< +a.width||2048a.x||1a.x?0:1;break;case 1002:a.x=1===Math.abs(Math.floor(a.x)%2)?Math.ceil(a.x)-a.x:a.x-Math.floor(a.x)}if(0>a.y||1a.y?0:1;break;case 1002:a.y=1===Math.abs(Math.floor(a.y)%2)?Math.ceil(a.y)-a.y:a.y-Math.floor(a.y)}this.flipY&&(a.y=1-a.y);return a}});Object.defineProperty(X.prototype, +"needsUpdate",{set:function(a){!0===a&&this.version++}});Object.assign(ca.prototype,{isVector4:!0,set:function(a,b,c,d){this.x=a;this.y=b;this.z=c;this.w=d;return this},setScalar:function(a){this.w=this.z=this.y=this.x=a;return this},setX:function(a){this.x=a;return this},setY:function(a){this.y=a;return this},setZ:function(a){this.z=a;return this},setW:function(a){this.w=a;return this},setComponent:function(a,b){switch(a){case 0:this.x=b;break;case 1:this.y=b;break;case 2:this.z=b;break;case 3:this.w= +b;break;default:throw Error("index is out of range: "+a);}return this},getComponent:function(a){switch(a){case 0:return this.x;case 1:return this.y;case 2:return this.z;case 3:return this.w;default:throw Error("index is out of range: "+a);}},clone:function(){return new this.constructor(this.x,this.y,this.z,this.w)},copy:function(a){this.x=a.x;this.y=a.y;this.z=a.z;this.w=void 0!==a.w?a.w:1;return this},add:function(a,b){if(void 0!==b)return console.warn("THREE.Vector4: .add() now only accepts one argument. Use .addVectors( a, b ) instead."), +this.addVectors(a,b);this.x+=a.x;this.y+=a.y;this.z+=a.z;this.w+=a.w;return this},addScalar:function(a){this.x+=a;this.y+=a;this.z+=a;this.w+=a;return this},addVectors:function(a,b){this.x=a.x+b.x;this.y=a.y+b.y;this.z=a.z+b.z;this.w=a.w+b.w;return this},addScaledVector:function(a,b){this.x+=a.x*b;this.y+=a.y*b;this.z+=a.z*b;this.w+=a.w*b;return this},sub:function(a,b){if(void 0!==b)return console.warn("THREE.Vector4: .sub() now only accepts one argument. Use .subVectors( a, b ) instead."),this.subVectors(a, +b);this.x-=a.x;this.y-=a.y;this.z-=a.z;this.w-=a.w;return this},subScalar:function(a){this.x-=a;this.y-=a;this.z-=a;this.w-=a;return this},subVectors:function(a,b){this.x=a.x-b.x;this.y=a.y-b.y;this.z=a.z-b.z;this.w=a.w-b.w;return this},multiplyScalar:function(a){this.x*=a;this.y*=a;this.z*=a;this.w*=a;return this},applyMatrix4:function(a){var b=this.x,c=this.y,d=this.z,e=this.w;a=a.elements;this.x=a[0]*b+a[4]*c+a[8]*d+a[12]*e;this.y=a[1]*b+a[5]*c+a[9]*d+a[13]*e;this.z=a[2]*b+a[6]*c+a[10]*d+a[14]* +e;this.w=a[3]*b+a[7]*c+a[11]*d+a[15]*e;return this},divideScalar:function(a){return this.multiplyScalar(1/a)},setAxisAngleFromQuaternion:function(a){this.w=2*Math.acos(a.w);var b=Math.sqrt(1-a.w*a.w);1E-4>b?(this.x=1,this.z=this.y=0):(this.x=a.x/b,this.y=a.y/b,this.z=a.z/b);return this},setAxisAngleFromRotationMatrix:function(a){a=a.elements;var b=a[0];var c=a[4];var d=a[8],e=a[1],f=a[5],g=a[9];var h=a[2];var k=a[6];var m=a[10];if(.01>Math.abs(c-e)&&.01>Math.abs(d-h)&&.01>Math.abs(g-k)){if(.1>Math.abs(c+ +e)&&.1>Math.abs(d+h)&&.1>Math.abs(g+k)&&.1>Math.abs(b+f+m-3))return this.set(1,0,0,0),this;a=Math.PI;b=(b+1)/2;f=(f+1)/2;m=(m+1)/2;c=(c+e)/4;d=(d+h)/4;g=(g+k)/4;b>f&&b>m?.01>b?(k=0,c=h=.707106781):(k=Math.sqrt(b),h=c/k,c=d/k):f>m?.01>f?(k=.707106781,h=0,c=.707106781):(h=Math.sqrt(f),k=c/h,c=g/h):.01>m?(h=k=.707106781,c=0):(c=Math.sqrt(m),k=d/c,h=g/c);this.set(k,h,c,a);return this}a=Math.sqrt((k-g)*(k-g)+(d-h)*(d-h)+(e-c)*(e-c));.001>Math.abs(a)&&(a=1);this.x=(k-g)/a;this.y=(d-h)/a;this.z=(e-c)/a; +this.w=Math.acos((b+f+m-1)/2);return this},min:function(a){this.x=Math.min(this.x,a.x);this.y=Math.min(this.y,a.y);this.z=Math.min(this.z,a.z);this.w=Math.min(this.w,a.w);return this},max:function(a){this.x=Math.max(this.x,a.x);this.y=Math.max(this.y,a.y);this.z=Math.max(this.z,a.z);this.w=Math.max(this.w,a.w);return this},clamp:function(a,b){this.x=Math.max(a.x,Math.min(b.x,this.x));this.y=Math.max(a.y,Math.min(b.y,this.y));this.z=Math.max(a.z,Math.min(b.z,this.z));this.w=Math.max(a.w,Math.min(b.w, +this.w));return this},clampScalar:function(){var a,b;return function(c,d){void 0===a&&(a=new ca,b=new ca);a.set(c,c,c,c);b.set(d,d,d,d);return this.clamp(a,b)}}(),clampLength:function(a,b){var c=this.length();return this.divideScalar(c||1).multiplyScalar(Math.max(a,Math.min(b,c)))},floor:function(){this.x=Math.floor(this.x);this.y=Math.floor(this.y);this.z=Math.floor(this.z);this.w=Math.floor(this.w);return this},ceil:function(){this.x=Math.ceil(this.x);this.y=Math.ceil(this.y);this.z=Math.ceil(this.z); +this.w=Math.ceil(this.w);return this},round:function(){this.x=Math.round(this.x);this.y=Math.round(this.y);this.z=Math.round(this.z);this.w=Math.round(this.w);return this},roundToZero:function(){this.x=0>this.x?Math.ceil(this.x):Math.floor(this.x);this.y=0>this.y?Math.ceil(this.y):Math.floor(this.y);this.z=0>this.z?Math.ceil(this.z):Math.floor(this.z);this.w=0>this.w?Math.ceil(this.w):Math.floor(this.w);return this},negate:function(){this.x=-this.x;this.y=-this.y;this.z=-this.z;this.w=-this.w;return this}, +dot:function(a){return this.x*a.x+this.y*a.y+this.z*a.z+this.w*a.w},lengthSq:function(){return this.x*this.x+this.y*this.y+this.z*this.z+this.w*this.w},length:function(){return Math.sqrt(this.x*this.x+this.y*this.y+this.z*this.z+this.w*this.w)},manhattanLength:function(){return Math.abs(this.x)+Math.abs(this.y)+Math.abs(this.z)+Math.abs(this.w)},normalize:function(){return this.divideScalar(this.length()||1)},setLength:function(a){return this.normalize().multiplyScalar(a)},lerp:function(a,b){this.x+= +(a.x-this.x)*b;this.y+=(a.y-this.y)*b;this.z+=(a.z-this.z)*b;this.w+=(a.w-this.w)*b;return this},lerpVectors:function(a,b,c){return this.subVectors(b,a).multiplyScalar(c).add(a)},equals:function(a){return a.x===this.x&&a.y===this.y&&a.z===this.z&&a.w===this.w},fromArray:function(a,b){void 0===b&&(b=0);this.x=a[b];this.y=a[b+1];this.z=a[b+2];this.w=a[b+3];return this},toArray:function(a,b){void 0===a&&(a=[]);void 0===b&&(b=0);a[b]=this.x;a[b+1]=this.y;a[b+2]=this.z;a[b+3]=this.w;return a},fromBufferAttribute:function(a, +b,c){void 0!==c&&console.warn("THREE.Vector4: offset has been removed from .fromBufferAttribute().");this.x=a.getX(b);this.y=a.getY(b);this.z=a.getZ(b);this.w=a.getW(b);return this}});jb.prototype=Object.assign(Object.create(ja.prototype),{constructor:jb,isWebGLRenderTarget:!0,setSize:function(a,b){if(this.width!==a||this.height!==b)this.width=a,this.height=b,this.dispose();this.viewport.set(0,0,a,b);this.scissor.set(0,0,a,b)},clone:function(){return(new this.constructor).copy(this)},copy:function(a){this.width= +a.width;this.height=a.height;this.viewport.copy(a.viewport);this.texture=a.texture.clone();this.depthBuffer=a.depthBuffer;this.stencilBuffer=a.stencilBuffer;this.depthTexture=a.depthTexture;return this},dispose:function(){this.dispatchEvent({type:"dispose"})}});Ib.prototype=Object.create(jb.prototype);Ib.prototype.constructor=Ib;Ib.prototype.isWebGLRenderTargetCube=!0;kb.prototype=Object.create(X.prototype);kb.prototype.constructor=kb;kb.prototype.isDataTexture=!0;Object.assign(Wa.prototype,{isBox3:!0, +set:function(a,b){this.min.copy(a);this.max.copy(b);return this},setFromArray:function(a){for(var b=Infinity,c=Infinity,d=Infinity,e=-Infinity,f=-Infinity,g=-Infinity,h=0,k=a.length;he&&(e=m);l>f&&(f=l);p>g&&(g=p)}this.min.set(b,c,d);this.max.set(e,f,g);return this},setFromBufferAttribute:function(a){for(var b=Infinity,c=Infinity,d=Infinity,e=-Infinity,f=-Infinity,g=-Infinity,h=0,k=a.count;he&&(e=m);l>f&&(f=l);p>g&&(g=p)}this.min.set(b,c,d);this.max.set(e,f,g);return this},setFromPoints:function(a){this.makeEmpty();for(var b=0,c=a.length;bthis.max.x||a.ythis.max.y||a.zthis.max.z?!1:!0},containsBox:function(a){return this.min.x<=a.min.x&&a.max.x<= +this.max.x&&this.min.y<=a.min.y&&a.max.y<=this.max.y&&this.min.z<=a.min.z&&a.max.z<=this.max.z},getParameter:function(a,b){void 0===b&&(console.warn("THREE.Box3: .getParameter() target is now required"),b=new n);return b.set((a.x-this.min.x)/(this.max.x-this.min.x),(a.y-this.min.y)/(this.max.y-this.min.y),(a.z-this.min.z)/(this.max.z-this.min.z))},intersectsBox:function(a){return a.max.xthis.max.x||a.max.ythis.max.y||a.max.zthis.max.z? +!1:!0},intersectsSphere:function(){var a=new n;return function(b){this.clampPoint(b.center,a);return a.distanceToSquared(b.center)<=b.radius*b.radius}}(),intersectsPlane:function(a){if(0=-a.constant},intersectsTriangle:function(){function a(a){var e;var f=0;for(e=a.length-3;f<=e;f+=3){h.fromArray(a,f);var g=m.x*Math.abs(h.x)+m.y*Math.abs(h.y)+m.z*Math.abs(h.z),k=b.dot(h),l=c.dot(h),q=d.dot(h);if(Math.max(-Math.max(k,l,q),Math.min(k,l,q))>g)return!1}return!0}var b=new n,c=new n,d=new n,e=new n,f=new n,g=new n,h=new n,k=new n,m=new n,l=new n;return function(h){if(this.isEmpty())return!1;this.getCenter(k);m.subVectors(this.max, +k);b.subVectors(h.a,k);c.subVectors(h.b,k);d.subVectors(h.c,k);e.subVectors(c,b);f.subVectors(d,c);g.subVectors(b,d);h=[0,-e.z,e.y,0,-f.z,f.y,0,-g.z,g.y,e.z,0,-e.x,f.z,0,-f.x,g.z,0,-g.x,-e.y,e.x,0,-f.y,f.x,0,-g.y,g.x,0];if(!a(h))return!1;h=[1,0,0,0,1,0,0,0,1];if(!a(h))return!1;l.crossVectors(e,f);h=[l.x,l.y,l.z];return a(h)}}(),clampPoint:function(a,b){void 0===b&&(console.warn("THREE.Box3: .clampPoint() target is now required"),b=new n);return b.copy(a).clamp(this.min,this.max)},distanceToPoint:function(){var a= +new n;return function(b){return a.copy(b).clamp(this.min,this.max).sub(b).length()}}(),getBoundingSphere:function(){var a=new n;return function(b){void 0===b&&(console.warn("THREE.Box3: .getBoundingSphere() target is now required"),b=new Ea);this.getCenter(b.center);b.radius=.5*this.getSize(a).length();return b}}(),intersect:function(a){this.min.max(a.min);this.max.min(a.max);this.isEmpty()&&this.makeEmpty();return this},union:function(a){this.min.min(a.min);this.max.max(a.max);return this},applyMatrix4:function(){var a= +[new n,new n,new n,new n,new n,new n,new n,new n];return function(b){if(this.isEmpty())return this;a[0].set(this.min.x,this.min.y,this.min.z).applyMatrix4(b);a[1].set(this.min.x,this.min.y,this.max.z).applyMatrix4(b);a[2].set(this.min.x,this.max.y,this.min.z).applyMatrix4(b);a[3].set(this.min.x,this.max.y,this.max.z).applyMatrix4(b);a[4].set(this.max.x,this.min.y,this.min.z).applyMatrix4(b);a[5].set(this.max.x,this.min.y,this.max.z).applyMatrix4(b);a[6].set(this.max.x,this.max.y,this.min.z).applyMatrix4(b); +a[7].set(this.max.x,this.max.y,this.max.z).applyMatrix4(b);this.setFromPoints(a);return this}}(),translate:function(a){this.min.add(a);this.max.add(a);return this},equals:function(a){return a.min.equals(this.min)&&a.max.equals(this.max)}});Object.assign(Ea.prototype,{set:function(a,b){this.center.copy(a);this.radius=b;return this},setFromPoints:function(){var a=new Wa;return function(b,c){var d=this.center;void 0!==c?d.copy(c):a.setFromPoints(b).getCenter(d);for(var e=c=0,f=b.length;e=this.radius},containsPoint:function(a){return a.distanceToSquared(this.center)<=this.radius*this.radius},distanceToPoint:function(a){return a.distanceTo(this.center)-this.radius},intersectsSphere:function(a){var b=this.radius+a.radius;return a.center.distanceToSquared(this.center)<= +b*b},intersectsBox:function(a){return a.intersectsSphere(this)},intersectsPlane:function(a){return Math.abs(a.distanceToPoint(this.center))<=this.radius},clampPoint:function(a,b){var c=this.center.distanceToSquared(a);void 0===b&&(console.warn("THREE.Sphere: .clampPoint() target is now required"),b=new n);b.copy(a);c>this.radius*this.radius&&(b.sub(this.center).normalize(),b.multiplyScalar(this.radius).add(this.center));return b},getBoundingBox:function(a){void 0===a&&(console.warn("THREE.Sphere: .getBoundingBox() target is now required"), +a=new Wa);a.set(this.center,this.center);a.expandByScalar(this.radius);return a},applyMatrix4:function(a){this.center.applyMatrix4(a);this.radius*=a.getMaxScaleOnAxis();return this},translate:function(a){this.center.add(a);return this},equals:function(a){return a.center.equals(this.center)&&a.radius===this.radius}});Object.assign(Pa.prototype,{set:function(a,b){this.normal.copy(a);this.constant=b;return this},setComponents:function(a,b,c,d){this.normal.set(a,b,c);this.constant=d;return this},setFromNormalAndCoplanarPoint:function(a, +b){this.normal.copy(a);this.constant=-b.dot(this.normal);return this},setFromCoplanarPoints:function(){var a=new n,b=new n;return function(c,d,e){d=a.subVectors(e,d).cross(b.subVectors(c,d)).normalize();this.setFromNormalAndCoplanarPoint(d,c);return this}}(),clone:function(){return(new this.constructor).copy(this)},copy:function(a){this.normal.copy(a.normal);this.constant=a.constant;return this},normalize:function(){var a=1/this.normal.length();this.normal.multiplyScalar(a);this.constant*=a;return this}, +negate:function(){this.constant*=-1;this.normal.negate();return this},distanceToPoint:function(a){return this.normal.dot(a)+this.constant},distanceToSphere:function(a){return this.distanceToPoint(a.center)-a.radius},projectPoint:function(a,b){void 0===b&&(console.warn("THREE.Plane: .projectPoint() target is now required"),b=new n);return b.copy(this.normal).multiplyScalar(-this.distanceToPoint(a)).add(a)},intersectLine:function(){var a=new n;return function(b,c){void 0===c&&(console.warn("THREE.Plane: .intersectLine() target is now required"), +c=new n);var d=b.delta(a),e=this.normal.dot(d);if(0===e){if(0===this.distanceToPoint(b.start))return c.copy(b.start)}else if(e=-(b.start.dot(this.normal)+this.constant)/e,!(0>e||1b&&0a&&0c;c++)b[c].copy(a.planes[c]);return this},setFromMatrix:function(a){var b=this.planes,c=a.elements;a=c[0];var d=c[1],e=c[2],f=c[3],g=c[4],h=c[5],k=c[6],m=c[7],l=c[8],p=c[9],r=c[10],n=c[11],t=c[12],v=c[13],w=c[14];c=c[15];b[0].setComponents(f- +a,m-g,n-l,c-t).normalize();b[1].setComponents(f+a,m+g,n+l,c+t).normalize();b[2].setComponents(f+d,m+h,n+p,c+v).normalize();b[3].setComponents(f-d,m-h,n-p,c-v).normalize();b[4].setComponents(f-e,m-k,n-r,c-w).normalize();b[5].setComponents(f+e,m+k,n+r,c+w).normalize();return this},intersectsObject:function(){var a=new Ea;return function(b){var c=b.geometry;null===c.boundingSphere&&c.computeBoundingSphere();a.copy(c.boundingSphere).applyMatrix4(b.matrixWorld);return this.intersectsSphere(a)}}(),intersectsSprite:function(){var a= +new Ea;return function(b){a.center.set(0,0,0);a.radius=.7071067811865476;a.applyMatrix4(b.matrixWorld);return this.intersectsSphere(a)}}(),intersectsSphere:function(a){var b=this.planes,c=a.center;a=-a.radius;for(var d=0;6>d;d++)if(b[d].distanceToPoint(c)d;d++){var e=c[d];a.x=0e.distanceToPoint(a))return!1}return!0}}(), +containsPoint:function(a){for(var b=this.planes,c=0;6>c;c++)if(0>b[c].distanceToPoint(a))return!1;return!0}});var H={alphamap_fragment:"#ifdef USE_ALPHAMAP\n\tdiffuseColor.a *= texture2D( alphaMap, vUv ).g;\n#endif",alphamap_pars_fragment:"#ifdef USE_ALPHAMAP\n\tuniform sampler2D alphaMap;\n#endif",alphatest_fragment:"#ifdef ALPHATEST\n\tif ( diffuseColor.a < ALPHATEST ) discard;\n#endif",aomap_fragment:"#ifdef USE_AOMAP\n\tfloat ambientOcclusion = ( texture2D( aoMap, vUv2 ).r - 1.0 ) * aoMapIntensity + 1.0;\n\treflectedLight.indirectDiffuse *= ambientOcclusion;\n\t#if defined( USE_ENVMAP ) && defined( PHYSICAL )\n\t\tfloat dotNV = saturate( dot( geometry.normal, geometry.viewDir ) );\n\t\treflectedLight.indirectSpecular *= computeSpecularOcclusion( dotNV, ambientOcclusion, material.specularRoughness );\n\t#endif\n#endif", +aomap_pars_fragment:"#ifdef USE_AOMAP\n\tuniform sampler2D aoMap;\n\tuniform float aoMapIntensity;\n#endif",begin_vertex:"vec3 transformed = vec3( position );",beginnormal_vertex:"vec3 objectNormal = vec3( normal );",bsdfs:"float punctualLightIntensityToIrradianceFactor( const in float lightDistance, const in float cutoffDistance, const in float decayExponent ) {\n#if defined ( PHYSICALLY_CORRECT_LIGHTS )\n\tfloat distanceFalloff = 1.0 / max( pow( lightDistance, decayExponent ), 0.01 );\n\tif( cutoffDistance > 0.0 ) {\n\t\tdistanceFalloff *= pow2( saturate( 1.0 - pow4( lightDistance / cutoffDistance ) ) );\n\t}\n\treturn distanceFalloff;\n#else\n\tif( cutoffDistance > 0.0 && decayExponent > 0.0 ) {\n\t\treturn pow( saturate( -lightDistance / cutoffDistance + 1.0 ), decayExponent );\n\t}\n\treturn 1.0;\n#endif\n}\nvec3 BRDF_Diffuse_Lambert( const in vec3 diffuseColor ) {\n\treturn RECIPROCAL_PI * diffuseColor;\n}\nvec3 F_Schlick( const in vec3 specularColor, const in float dotLH ) {\n\tfloat fresnel = exp2( ( -5.55473 * dotLH - 6.98316 ) * dotLH );\n\treturn ( 1.0 - specularColor ) * fresnel + specularColor;\n}\nfloat G_GGX_Smith( const in float alpha, const in float dotNL, const in float dotNV ) {\n\tfloat a2 = pow2( alpha );\n\tfloat gl = dotNL + sqrt( a2 + ( 1.0 - a2 ) * pow2( dotNL ) );\n\tfloat gv = dotNV + sqrt( a2 + ( 1.0 - a2 ) * pow2( dotNV ) );\n\treturn 1.0 / ( gl * gv );\n}\nfloat G_GGX_SmithCorrelated( const in float alpha, const in float dotNL, const in float dotNV ) {\n\tfloat a2 = pow2( alpha );\n\tfloat gv = dotNL * sqrt( a2 + ( 1.0 - a2 ) * pow2( dotNV ) );\n\tfloat gl = dotNV * sqrt( a2 + ( 1.0 - a2 ) * pow2( dotNL ) );\n\treturn 0.5 / max( gv + gl, EPSILON );\n}\nfloat D_GGX( const in float alpha, const in float dotNH ) {\n\tfloat a2 = pow2( alpha );\n\tfloat denom = pow2( dotNH ) * ( a2 - 1.0 ) + 1.0;\n\treturn RECIPROCAL_PI * a2 / pow2( denom );\n}\nvec3 BRDF_Specular_GGX( const in IncidentLight incidentLight, const in GeometricContext geometry, const in vec3 specularColor, const in float roughness ) {\n\tfloat alpha = pow2( roughness );\n\tvec3 halfDir = normalize( incidentLight.direction + geometry.viewDir );\n\tfloat dotNL = saturate( dot( geometry.normal, incidentLight.direction ) );\n\tfloat dotNV = saturate( dot( geometry.normal, geometry.viewDir ) );\n\tfloat dotNH = saturate( dot( geometry.normal, halfDir ) );\n\tfloat dotLH = saturate( dot( incidentLight.direction, halfDir ) );\n\tvec3 F = F_Schlick( specularColor, dotLH );\n\tfloat G = G_GGX_SmithCorrelated( alpha, dotNL, dotNV );\n\tfloat D = D_GGX( alpha, dotNH );\n\treturn F * ( G * D );\n}\nvec2 LTC_Uv( const in vec3 N, const in vec3 V, const in float roughness ) {\n\tconst float LUT_SIZE = 64.0;\n\tconst float LUT_SCALE = ( LUT_SIZE - 1.0 ) / LUT_SIZE;\n\tconst float LUT_BIAS = 0.5 / LUT_SIZE;\n\tfloat dotNV = saturate( dot( N, V ) );\n\tvec2 uv = vec2( roughness, sqrt( 1.0 - dotNV ) );\n\tuv = uv * LUT_SCALE + LUT_BIAS;\n\treturn uv;\n}\nfloat LTC_ClippedSphereFormFactor( const in vec3 f ) {\n\tfloat l = length( f );\n\treturn max( ( l * l + f.z ) / ( l + 1.0 ), 0.0 );\n}\nvec3 LTC_EdgeVectorFormFactor( const in vec3 v1, const in vec3 v2 ) {\n\tfloat x = dot( v1, v2 );\n\tfloat y = abs( x );\n\tfloat a = 0.8543985 + ( 0.4965155 + 0.0145206 * y ) * y;\n\tfloat b = 3.4175940 + ( 4.1616724 + y ) * y;\n\tfloat v = a / b;\n\tfloat theta_sintheta = ( x > 0.0 ) ? v : 0.5 * inversesqrt( max( 1.0 - x * x, 1e-7 ) ) - v;\n\treturn cross( v1, v2 ) * theta_sintheta;\n}\nvec3 LTC_Evaluate( const in vec3 N, const in vec3 V, const in vec3 P, const in mat3 mInv, const in vec3 rectCoords[ 4 ] ) {\n\tvec3 v1 = rectCoords[ 1 ] - rectCoords[ 0 ];\n\tvec3 v2 = rectCoords[ 3 ] - rectCoords[ 0 ];\n\tvec3 lightNormal = cross( v1, v2 );\n\tif( dot( lightNormal, P - rectCoords[ 0 ] ) < 0.0 ) return vec3( 0.0 );\n\tvec3 T1, T2;\n\tT1 = normalize( V - N * dot( V, N ) );\n\tT2 = - cross( N, T1 );\n\tmat3 mat = mInv * transposeMat3( mat3( T1, T2, N ) );\n\tvec3 coords[ 4 ];\n\tcoords[ 0 ] = mat * ( rectCoords[ 0 ] - P );\n\tcoords[ 1 ] = mat * ( rectCoords[ 1 ] - P );\n\tcoords[ 2 ] = mat * ( rectCoords[ 2 ] - P );\n\tcoords[ 3 ] = mat * ( rectCoords[ 3 ] - P );\n\tcoords[ 0 ] = normalize( coords[ 0 ] );\n\tcoords[ 1 ] = normalize( coords[ 1 ] );\n\tcoords[ 2 ] = normalize( coords[ 2 ] );\n\tcoords[ 3 ] = normalize( coords[ 3 ] );\n\tvec3 vectorFormFactor = vec3( 0.0 );\n\tvectorFormFactor += LTC_EdgeVectorFormFactor( coords[ 0 ], coords[ 1 ] );\n\tvectorFormFactor += LTC_EdgeVectorFormFactor( coords[ 1 ], coords[ 2 ] );\n\tvectorFormFactor += LTC_EdgeVectorFormFactor( coords[ 2 ], coords[ 3 ] );\n\tvectorFormFactor += LTC_EdgeVectorFormFactor( coords[ 3 ], coords[ 0 ] );\n\tfloat result = LTC_ClippedSphereFormFactor( vectorFormFactor );\n\treturn vec3( result );\n}\nvec3 BRDF_Specular_GGX_Environment( const in GeometricContext geometry, const in vec3 specularColor, const in float roughness ) {\n\tfloat dotNV = saturate( dot( geometry.normal, geometry.viewDir ) );\n\tconst vec4 c0 = vec4( - 1, - 0.0275, - 0.572, 0.022 );\n\tconst vec4 c1 = vec4( 1, 0.0425, 1.04, - 0.04 );\n\tvec4 r = roughness * c0 + c1;\n\tfloat a004 = min( r.x * r.x, exp2( - 9.28 * dotNV ) ) * r.x + r.y;\n\tvec2 AB = vec2( -1.04, 1.04 ) * a004 + r.zw;\n\treturn specularColor * AB.x + AB.y;\n}\nfloat G_BlinnPhong_Implicit( ) {\n\treturn 0.25;\n}\nfloat D_BlinnPhong( const in float shininess, const in float dotNH ) {\n\treturn RECIPROCAL_PI * ( shininess * 0.5 + 1.0 ) * pow( dotNH, shininess );\n}\nvec3 BRDF_Specular_BlinnPhong( const in IncidentLight incidentLight, const in GeometricContext geometry, const in vec3 specularColor, const in float shininess ) {\n\tvec3 halfDir = normalize( incidentLight.direction + geometry.viewDir );\n\tfloat dotNH = saturate( dot( geometry.normal, halfDir ) );\n\tfloat dotLH = saturate( dot( incidentLight.direction, halfDir ) );\n\tvec3 F = F_Schlick( specularColor, dotLH );\n\tfloat G = G_BlinnPhong_Implicit( );\n\tfloat D = D_BlinnPhong( shininess, dotNH );\n\treturn F * ( G * D );\n}\nfloat GGXRoughnessToBlinnExponent( const in float ggxRoughness ) {\n\treturn ( 2.0 / pow2( ggxRoughness + 0.0001 ) - 2.0 );\n}\nfloat BlinnExponentToGGXRoughness( const in float blinnExponent ) {\n\treturn sqrt( 2.0 / ( blinnExponent + 2.0 ) );\n}", +bumpmap_pars_fragment:"#ifdef USE_BUMPMAP\n\tuniform sampler2D bumpMap;\n\tuniform float bumpScale;\n\tvec2 dHdxy_fwd() {\n\t\tvec2 dSTdx = dFdx( vUv );\n\t\tvec2 dSTdy = dFdy( vUv );\n\t\tfloat Hll = bumpScale * texture2D( bumpMap, vUv ).x;\n\t\tfloat dBx = bumpScale * texture2D( bumpMap, vUv + dSTdx ).x - Hll;\n\t\tfloat dBy = bumpScale * texture2D( bumpMap, vUv + dSTdy ).x - Hll;\n\t\treturn vec2( dBx, dBy );\n\t}\n\tvec3 perturbNormalArb( vec3 surf_pos, vec3 surf_norm, vec2 dHdxy ) {\n\t\tvec3 vSigmaX = vec3( dFdx( surf_pos.x ), dFdx( surf_pos.y ), dFdx( surf_pos.z ) );\n\t\tvec3 vSigmaY = vec3( dFdy( surf_pos.x ), dFdy( surf_pos.y ), dFdy( surf_pos.z ) );\n\t\tvec3 vN = surf_norm;\n\t\tvec3 R1 = cross( vSigmaY, vN );\n\t\tvec3 R2 = cross( vN, vSigmaX );\n\t\tfloat fDet = dot( vSigmaX, R1 );\n\t\tfDet *= ( float( gl_FrontFacing ) * 2.0 - 1.0 );\n\t\tvec3 vGrad = sign( fDet ) * ( dHdxy.x * R1 + dHdxy.y * R2 );\n\t\treturn normalize( abs( fDet ) * surf_norm - vGrad );\n\t}\n#endif", +clipping_planes_fragment:"#if NUM_CLIPPING_PLANES > 0\n\tvec4 plane;\n\t#pragma unroll_loop\n\tfor ( int i = 0; i < UNION_CLIPPING_PLANES; i ++ ) {\n\t\tplane = clippingPlanes[ i ];\n\t\tif ( dot( vViewPosition, plane.xyz ) > plane.w ) discard;\n\t}\n\t#if UNION_CLIPPING_PLANES < NUM_CLIPPING_PLANES\n\t\tbool clipped = true;\n\t\t#pragma unroll_loop\n\t\tfor ( int i = UNION_CLIPPING_PLANES; i < NUM_CLIPPING_PLANES; i ++ ) {\n\t\t\tplane = clippingPlanes[ i ];\n\t\t\tclipped = ( dot( vViewPosition, plane.xyz ) > plane.w ) && clipped;\n\t\t}\n\t\tif ( clipped ) discard;\n\t#endif\n#endif", +clipping_planes_pars_fragment:"#if NUM_CLIPPING_PLANES > 0\n\t#if ! defined( PHYSICAL ) && ! defined( PHONG ) && ! defined( MATCAP )\n\t\tvarying vec3 vViewPosition;\n\t#endif\n\tuniform vec4 clippingPlanes[ NUM_CLIPPING_PLANES ];\n#endif",clipping_planes_pars_vertex:"#if NUM_CLIPPING_PLANES > 0 && ! defined( PHYSICAL ) && ! defined( PHONG ) && ! defined( MATCAP )\n\tvarying vec3 vViewPosition;\n#endif",clipping_planes_vertex:"#if NUM_CLIPPING_PLANES > 0 && ! defined( PHYSICAL ) && ! defined( PHONG ) && ! defined( MATCAP )\n\tvViewPosition = - mvPosition.xyz;\n#endif", +color_fragment:"#ifdef USE_COLOR\n\tdiffuseColor.rgb *= vColor;\n#endif",color_pars_fragment:"#ifdef USE_COLOR\n\tvarying vec3 vColor;\n#endif",color_pars_vertex:"#ifdef USE_COLOR\n\tvarying vec3 vColor;\n#endif",color_vertex:"#ifdef USE_COLOR\n\tvColor.xyz = color.xyz;\n#endif",common:"#define PI 3.14159265359\n#define PI2 6.28318530718\n#define PI_HALF 1.5707963267949\n#define RECIPROCAL_PI 0.31830988618\n#define RECIPROCAL_PI2 0.15915494\n#define LOG2 1.442695\n#define EPSILON 1e-6\n#define saturate(a) clamp( a, 0.0, 1.0 )\n#define whiteCompliment(a) ( 1.0 - saturate( a ) )\nfloat pow2( const in float x ) { return x*x; }\nfloat pow3( const in float x ) { return x*x*x; }\nfloat pow4( const in float x ) { float x2 = x*x; return x2*x2; }\nfloat average( const in vec3 color ) { return dot( color, vec3( 0.3333 ) ); }\nhighp float rand( const in vec2 uv ) {\n\tconst highp float a = 12.9898, b = 78.233, c = 43758.5453;\n\thighp float dt = dot( uv.xy, vec2( a,b ) ), sn = mod( dt, PI );\n\treturn fract(sin(sn) * c);\n}\nstruct IncidentLight {\n\tvec3 color;\n\tvec3 direction;\n\tbool visible;\n};\nstruct ReflectedLight {\n\tvec3 directDiffuse;\n\tvec3 directSpecular;\n\tvec3 indirectDiffuse;\n\tvec3 indirectSpecular;\n};\nstruct GeometricContext {\n\tvec3 position;\n\tvec3 normal;\n\tvec3 viewDir;\n};\nvec3 transformDirection( in vec3 dir, in mat4 matrix ) {\n\treturn normalize( ( matrix * vec4( dir, 0.0 ) ).xyz );\n}\nvec3 inverseTransformDirection( in vec3 dir, in mat4 matrix ) {\n\treturn normalize( ( vec4( dir, 0.0 ) * matrix ).xyz );\n}\nvec3 projectOnPlane(in vec3 point, in vec3 pointOnPlane, in vec3 planeNormal ) {\n\tfloat distance = dot( planeNormal, point - pointOnPlane );\n\treturn - distance * planeNormal + point;\n}\nfloat sideOfPlane( in vec3 point, in vec3 pointOnPlane, in vec3 planeNormal ) {\n\treturn sign( dot( point - pointOnPlane, planeNormal ) );\n}\nvec3 linePlaneIntersect( in vec3 pointOnLine, in vec3 lineDirection, in vec3 pointOnPlane, in vec3 planeNormal ) {\n\treturn lineDirection * ( dot( planeNormal, pointOnPlane - pointOnLine ) / dot( planeNormal, lineDirection ) ) + pointOnLine;\n}\nmat3 transposeMat3( const in mat3 m ) {\n\tmat3 tmp;\n\ttmp[ 0 ] = vec3( m[ 0 ].x, m[ 1 ].x, m[ 2 ].x );\n\ttmp[ 1 ] = vec3( m[ 0 ].y, m[ 1 ].y, m[ 2 ].y );\n\ttmp[ 2 ] = vec3( m[ 0 ].z, m[ 1 ].z, m[ 2 ].z );\n\treturn tmp;\n}\nfloat linearToRelativeLuminance( const in vec3 color ) {\n\tvec3 weights = vec3( 0.2126, 0.7152, 0.0722 );\n\treturn dot( weights, color.rgb );\n}", +cube_uv_reflection_fragment:"#ifdef ENVMAP_TYPE_CUBE_UV\n#define cubeUV_textureSize (1024.0)\nint getFaceFromDirection(vec3 direction) {\n\tvec3 absDirection = abs(direction);\n\tint face = -1;\n\tif( absDirection.x > absDirection.z ) {\n\t\tif(absDirection.x > absDirection.y )\n\t\t\tface = direction.x > 0.0 ? 0 : 3;\n\t\telse\n\t\t\tface = direction.y > 0.0 ? 1 : 4;\n\t}\n\telse {\n\t\tif(absDirection.z > absDirection.y )\n\t\t\tface = direction.z > 0.0 ? 2 : 5;\n\t\telse\n\t\t\tface = direction.y > 0.0 ? 1 : 4;\n\t}\n\treturn face;\n}\n#define cubeUV_maxLods1 (log2(cubeUV_textureSize*0.25) - 1.0)\n#define cubeUV_rangeClamp (exp2((6.0 - 1.0) * 2.0))\nvec2 MipLevelInfo( vec3 vec, float roughnessLevel, float roughness ) {\n\tfloat scale = exp2(cubeUV_maxLods1 - roughnessLevel);\n\tfloat dxRoughness = dFdx(roughness);\n\tfloat dyRoughness = dFdy(roughness);\n\tvec3 dx = dFdx( vec * scale * dxRoughness );\n\tvec3 dy = dFdy( vec * scale * dyRoughness );\n\tfloat d = max( dot( dx, dx ), dot( dy, dy ) );\n\td = clamp(d, 1.0, cubeUV_rangeClamp);\n\tfloat mipLevel = 0.5 * log2(d);\n\treturn vec2(floor(mipLevel), fract(mipLevel));\n}\n#define cubeUV_maxLods2 (log2(cubeUV_textureSize*0.25) - 2.0)\n#define cubeUV_rcpTextureSize (1.0 / cubeUV_textureSize)\nvec2 getCubeUV(vec3 direction, float roughnessLevel, float mipLevel) {\n\tmipLevel = roughnessLevel > cubeUV_maxLods2 - 3.0 ? 0.0 : mipLevel;\n\tfloat a = 16.0 * cubeUV_rcpTextureSize;\n\tvec2 exp2_packed = exp2( vec2( roughnessLevel, mipLevel ) );\n\tvec2 rcp_exp2_packed = vec2( 1.0 ) / exp2_packed;\n\tfloat powScale = exp2_packed.x * exp2_packed.y;\n\tfloat scale = rcp_exp2_packed.x * rcp_exp2_packed.y * 0.25;\n\tfloat mipOffset = 0.75*(1.0 - rcp_exp2_packed.y) * rcp_exp2_packed.x;\n\tbool bRes = mipLevel == 0.0;\n\tscale = bRes && (scale < a) ? a : scale;\n\tvec3 r;\n\tvec2 offset;\n\tint face = getFaceFromDirection(direction);\n\tfloat rcpPowScale = 1.0 / powScale;\n\tif( face == 0) {\n\t\tr = vec3(direction.x, -direction.z, direction.y);\n\t\toffset = vec2(0.0+mipOffset,0.75 * rcpPowScale);\n\t\toffset.y = bRes && (offset.y < 2.0*a) ? a : offset.y;\n\t}\n\telse if( face == 1) {\n\t\tr = vec3(direction.y, direction.x, direction.z);\n\t\toffset = vec2(scale+mipOffset, 0.75 * rcpPowScale);\n\t\toffset.y = bRes && (offset.y < 2.0*a) ? a : offset.y;\n\t}\n\telse if( face == 2) {\n\t\tr = vec3(direction.z, direction.x, direction.y);\n\t\toffset = vec2(2.0*scale+mipOffset, 0.75 * rcpPowScale);\n\t\toffset.y = bRes && (offset.y < 2.0*a) ? a : offset.y;\n\t}\n\telse if( face == 3) {\n\t\tr = vec3(direction.x, direction.z, direction.y);\n\t\toffset = vec2(0.0+mipOffset,0.5 * rcpPowScale);\n\t\toffset.y = bRes && (offset.y < 2.0*a) ? 0.0 : offset.y;\n\t}\n\telse if( face == 4) {\n\t\tr = vec3(direction.y, direction.x, -direction.z);\n\t\toffset = vec2(scale+mipOffset, 0.5 * rcpPowScale);\n\t\toffset.y = bRes && (offset.y < 2.0*a) ? 0.0 : offset.y;\n\t}\n\telse {\n\t\tr = vec3(direction.z, -direction.x, direction.y);\n\t\toffset = vec2(2.0*scale+mipOffset, 0.5 * rcpPowScale);\n\t\toffset.y = bRes && (offset.y < 2.0*a) ? 0.0 : offset.y;\n\t}\n\tr = normalize(r);\n\tfloat texelOffset = 0.5 * cubeUV_rcpTextureSize;\n\tvec2 s = ( r.yz / abs( r.x ) + vec2( 1.0 ) ) * 0.5;\n\tvec2 base = offset + vec2( texelOffset );\n\treturn base + s * ( scale - 2.0 * texelOffset );\n}\n#define cubeUV_maxLods3 (log2(cubeUV_textureSize*0.25) - 3.0)\nvec4 textureCubeUV( sampler2D envMap, vec3 reflectedDirection, float roughness ) {\n\tfloat roughnessVal = roughness* cubeUV_maxLods3;\n\tfloat r1 = floor(roughnessVal);\n\tfloat r2 = r1 + 1.0;\n\tfloat t = fract(roughnessVal);\n\tvec2 mipInfo = MipLevelInfo(reflectedDirection, r1, roughness);\n\tfloat s = mipInfo.y;\n\tfloat level0 = mipInfo.x;\n\tfloat level1 = level0 + 1.0;\n\tlevel1 = level1 > 5.0 ? 5.0 : level1;\n\tlevel0 += min( floor( s + 0.5 ), 5.0 );\n\tvec2 uv_10 = getCubeUV(reflectedDirection, r1, level0);\n\tvec4 color10 = envMapTexelToLinear(texture2D(envMap, uv_10));\n\tvec2 uv_20 = getCubeUV(reflectedDirection, r2, level0);\n\tvec4 color20 = envMapTexelToLinear(texture2D(envMap, uv_20));\n\tvec4 result = mix(color10, color20, t);\n\treturn vec4(result.rgb, 1.0);\n}\n#endif", +defaultnormal_vertex:"vec3 transformedNormal = normalMatrix * objectNormal;\n#ifdef FLIP_SIDED\n\ttransformedNormal = - transformedNormal;\n#endif",displacementmap_pars_vertex:"#ifdef USE_DISPLACEMENTMAP\n\tuniform sampler2D displacementMap;\n\tuniform float displacementScale;\n\tuniform float displacementBias;\n#endif",displacementmap_vertex:"#ifdef USE_DISPLACEMENTMAP\n\ttransformed += normalize( objectNormal ) * ( texture2D( displacementMap, uv ).x * displacementScale + displacementBias );\n#endif", +emissivemap_fragment:"#ifdef USE_EMISSIVEMAP\n\tvec4 emissiveColor = texture2D( emissiveMap, vUv );\n\temissiveColor.rgb = emissiveMapTexelToLinear( emissiveColor ).rgb;\n\ttotalEmissiveRadiance *= emissiveColor.rgb;\n#endif",emissivemap_pars_fragment:"#ifdef USE_EMISSIVEMAP\n\tuniform sampler2D emissiveMap;\n#endif",encodings_fragment:"gl_FragColor = linearToOutputTexel( gl_FragColor );",encodings_pars_fragment:"\nvec4 LinearToLinear( in vec4 value ) {\n\treturn value;\n}\nvec4 GammaToLinear( in vec4 value, in float gammaFactor ) {\n\treturn vec4( pow( value.rgb, vec3( gammaFactor ) ), value.a );\n}\nvec4 LinearToGamma( in vec4 value, in float gammaFactor ) {\n\treturn vec4( pow( value.rgb, vec3( 1.0 / gammaFactor ) ), value.a );\n}\nvec4 sRGBToLinear( in vec4 value ) {\n\treturn vec4( mix( pow( value.rgb * 0.9478672986 + vec3( 0.0521327014 ), vec3( 2.4 ) ), value.rgb * 0.0773993808, vec3( lessThanEqual( value.rgb, vec3( 0.04045 ) ) ) ), value.a );\n}\nvec4 LinearTosRGB( in vec4 value ) {\n\treturn vec4( mix( pow( value.rgb, vec3( 0.41666 ) ) * 1.055 - vec3( 0.055 ), value.rgb * 12.92, vec3( lessThanEqual( value.rgb, vec3( 0.0031308 ) ) ) ), value.a );\n}\nvec4 RGBEToLinear( in vec4 value ) {\n\treturn vec4( value.rgb * exp2( value.a * 255.0 - 128.0 ), 1.0 );\n}\nvec4 LinearToRGBE( in vec4 value ) {\n\tfloat maxComponent = max( max( value.r, value.g ), value.b );\n\tfloat fExp = clamp( ceil( log2( maxComponent ) ), -128.0, 127.0 );\n\treturn vec4( value.rgb / exp2( fExp ), ( fExp + 128.0 ) / 255.0 );\n}\nvec4 RGBMToLinear( in vec4 value, in float maxRange ) {\n\treturn vec4( value.rgb * value.a * maxRange, 1.0 );\n}\nvec4 LinearToRGBM( in vec4 value, in float maxRange ) {\n\tfloat maxRGB = max( value.r, max( value.g, value.b ) );\n\tfloat M = clamp( maxRGB / maxRange, 0.0, 1.0 );\n\tM = ceil( M * 255.0 ) / 255.0;\n\treturn vec4( value.rgb / ( M * maxRange ), M );\n}\nvec4 RGBDToLinear( in vec4 value, in float maxRange ) {\n\treturn vec4( value.rgb * ( ( maxRange / 255.0 ) / value.a ), 1.0 );\n}\nvec4 LinearToRGBD( in vec4 value, in float maxRange ) {\n\tfloat maxRGB = max( value.r, max( value.g, value.b ) );\n\tfloat D = max( maxRange / maxRGB, 1.0 );\n\tD = min( floor( D ) / 255.0, 1.0 );\n\treturn vec4( value.rgb * ( D * ( 255.0 / maxRange ) ), D );\n}\nconst mat3 cLogLuvM = mat3( 0.2209, 0.3390, 0.4184, 0.1138, 0.6780, 0.7319, 0.0102, 0.1130, 0.2969 );\nvec4 LinearToLogLuv( in vec4 value ) {\n\tvec3 Xp_Y_XYZp = value.rgb * cLogLuvM;\n\tXp_Y_XYZp = max( Xp_Y_XYZp, vec3( 1e-6, 1e-6, 1e-6 ) );\n\tvec4 vResult;\n\tvResult.xy = Xp_Y_XYZp.xy / Xp_Y_XYZp.z;\n\tfloat Le = 2.0 * log2(Xp_Y_XYZp.y) + 127.0;\n\tvResult.w = fract( Le );\n\tvResult.z = ( Le - ( floor( vResult.w * 255.0 ) ) / 255.0 ) / 255.0;\n\treturn vResult;\n}\nconst mat3 cLogLuvInverseM = mat3( 6.0014, -2.7008, -1.7996, -1.3320, 3.1029, -5.7721, 0.3008, -1.0882, 5.6268 );\nvec4 LogLuvToLinear( in vec4 value ) {\n\tfloat Le = value.z * 255.0 + value.w;\n\tvec3 Xp_Y_XYZp;\n\tXp_Y_XYZp.y = exp2( ( Le - 127.0 ) / 2.0 );\n\tXp_Y_XYZp.z = Xp_Y_XYZp.y / value.y;\n\tXp_Y_XYZp.x = value.x * Xp_Y_XYZp.z;\n\tvec3 vRGB = Xp_Y_XYZp.rgb * cLogLuvInverseM;\n\treturn vec4( max( vRGB, 0.0 ), 1.0 );\n}", +envmap_fragment:"#ifdef USE_ENVMAP\n\t#if defined( USE_BUMPMAP ) || defined( USE_NORMALMAP ) || defined( PHONG )\n\t\tvec3 cameraToVertex = normalize( vWorldPosition - cameraPosition );\n\t\tvec3 worldNormal = inverseTransformDirection( normal, viewMatrix );\n\t\t#ifdef ENVMAP_MODE_REFLECTION\n\t\t\tvec3 reflectVec = reflect( cameraToVertex, worldNormal );\n\t\t#else\n\t\t\tvec3 reflectVec = refract( cameraToVertex, worldNormal, refractionRatio );\n\t\t#endif\n\t#else\n\t\tvec3 reflectVec = vReflect;\n\t#endif\n\t#ifdef ENVMAP_TYPE_CUBE\n\t\tvec4 envColor = textureCube( envMap, vec3( flipEnvMap * reflectVec.x, reflectVec.yz ) );\n\t#elif defined( ENVMAP_TYPE_EQUIREC )\n\t\tvec2 sampleUV;\n\t\treflectVec = normalize( reflectVec );\n\t\tsampleUV.y = asin( clamp( reflectVec.y, - 1.0, 1.0 ) ) * RECIPROCAL_PI + 0.5;\n\t\tsampleUV.x = atan( reflectVec.z, reflectVec.x ) * RECIPROCAL_PI2 + 0.5;\n\t\tvec4 envColor = texture2D( envMap, sampleUV );\n\t#elif defined( ENVMAP_TYPE_SPHERE )\n\t\treflectVec = normalize( reflectVec );\n\t\tvec3 reflectView = normalize( ( viewMatrix * vec4( reflectVec, 0.0 ) ).xyz + vec3( 0.0, 0.0, 1.0 ) );\n\t\tvec4 envColor = texture2D( envMap, reflectView.xy * 0.5 + 0.5 );\n\t#else\n\t\tvec4 envColor = vec4( 0.0 );\n\t#endif\n\tenvColor = envMapTexelToLinear( envColor );\n\t#ifdef ENVMAP_BLENDING_MULTIPLY\n\t\toutgoingLight = mix( outgoingLight, outgoingLight * envColor.xyz, specularStrength * reflectivity );\n\t#elif defined( ENVMAP_BLENDING_MIX )\n\t\toutgoingLight = mix( outgoingLight, envColor.xyz, specularStrength * reflectivity );\n\t#elif defined( ENVMAP_BLENDING_ADD )\n\t\toutgoingLight += envColor.xyz * specularStrength * reflectivity;\n\t#endif\n#endif", +envmap_pars_fragment:"#if defined( USE_ENVMAP ) || defined( PHYSICAL )\n\tuniform float reflectivity;\n\tuniform float envMapIntensity;\n#endif\n#ifdef USE_ENVMAP\n\t#if ! defined( PHYSICAL ) && ( defined( USE_BUMPMAP ) || defined( USE_NORMALMAP ) || defined( PHONG ) )\n\t\tvarying vec3 vWorldPosition;\n\t#endif\n\t#ifdef ENVMAP_TYPE_CUBE\n\t\tuniform samplerCube envMap;\n\t#else\n\t\tuniform sampler2D envMap;\n\t#endif\n\tuniform float flipEnvMap;\n\tuniform int maxMipLevel;\n\t#if defined( USE_BUMPMAP ) || defined( USE_NORMALMAP ) || defined( PHONG ) || defined( PHYSICAL )\n\t\tuniform float refractionRatio;\n\t#else\n\t\tvarying vec3 vReflect;\n\t#endif\n#endif", +envmap_pars_vertex:"#ifdef USE_ENVMAP\n\t#if defined( USE_BUMPMAP ) || defined( USE_NORMALMAP ) || defined( PHONG )\n\t\tvarying vec3 vWorldPosition;\n\t#else\n\t\tvarying vec3 vReflect;\n\t\tuniform float refractionRatio;\n\t#endif\n#endif",envmap_physical_pars_fragment:"#if defined( USE_ENVMAP ) && defined( PHYSICAL )\n\tvec3 getLightProbeIndirectIrradiance( const in GeometricContext geometry, const in int maxMIPLevel ) {\n\t\tvec3 worldNormal = inverseTransformDirection( geometry.normal, viewMatrix );\n\t\t#ifdef ENVMAP_TYPE_CUBE\n\t\t\tvec3 queryVec = vec3( flipEnvMap * worldNormal.x, worldNormal.yz );\n\t\t\t#ifdef TEXTURE_LOD_EXT\n\t\t\t\tvec4 envMapColor = textureCubeLodEXT( envMap, queryVec, float( maxMIPLevel ) );\n\t\t\t#else\n\t\t\t\tvec4 envMapColor = textureCube( envMap, queryVec, float( maxMIPLevel ) );\n\t\t\t#endif\n\t\t\tenvMapColor.rgb = envMapTexelToLinear( envMapColor ).rgb;\n\t\t#elif defined( ENVMAP_TYPE_CUBE_UV )\n\t\t\tvec3 queryVec = vec3( flipEnvMap * worldNormal.x, worldNormal.yz );\n\t\t\tvec4 envMapColor = textureCubeUV( envMap, queryVec, 1.0 );\n\t\t#else\n\t\t\tvec4 envMapColor = vec4( 0.0 );\n\t\t#endif\n\t\treturn PI * envMapColor.rgb * envMapIntensity;\n\t}\n\tfloat getSpecularMIPLevel( const in float blinnShininessExponent, const in int maxMIPLevel ) {\n\t\tfloat maxMIPLevelScalar = float( maxMIPLevel );\n\t\tfloat desiredMIPLevel = maxMIPLevelScalar + 0.79248 - 0.5 * log2( pow2( blinnShininessExponent ) + 1.0 );\n\t\treturn clamp( desiredMIPLevel, 0.0, maxMIPLevelScalar );\n\t}\n\tvec3 getLightProbeIndirectRadiance( const in GeometricContext geometry, const in float blinnShininessExponent, const in int maxMIPLevel ) {\n\t\t#ifdef ENVMAP_MODE_REFLECTION\n\t\t\tvec3 reflectVec = reflect( -geometry.viewDir, geometry.normal );\n\t\t#else\n\t\t\tvec3 reflectVec = refract( -geometry.viewDir, geometry.normal, refractionRatio );\n\t\t#endif\n\t\treflectVec = inverseTransformDirection( reflectVec, viewMatrix );\n\t\tfloat specularMIPLevel = getSpecularMIPLevel( blinnShininessExponent, maxMIPLevel );\n\t\t#ifdef ENVMAP_TYPE_CUBE\n\t\t\tvec3 queryReflectVec = vec3( flipEnvMap * reflectVec.x, reflectVec.yz );\n\t\t\t#ifdef TEXTURE_LOD_EXT\n\t\t\t\tvec4 envMapColor = textureCubeLodEXT( envMap, queryReflectVec, specularMIPLevel );\n\t\t\t#else\n\t\t\t\tvec4 envMapColor = textureCube( envMap, queryReflectVec, specularMIPLevel );\n\t\t\t#endif\n\t\t\tenvMapColor.rgb = envMapTexelToLinear( envMapColor ).rgb;\n\t\t#elif defined( ENVMAP_TYPE_CUBE_UV )\n\t\t\tvec3 queryReflectVec = vec3( flipEnvMap * reflectVec.x, reflectVec.yz );\n\t\t\tvec4 envMapColor = textureCubeUV( envMap, queryReflectVec, BlinnExponentToGGXRoughness(blinnShininessExponent ));\n\t\t#elif defined( ENVMAP_TYPE_EQUIREC )\n\t\t\tvec2 sampleUV;\n\t\t\tsampleUV.y = asin( clamp( reflectVec.y, - 1.0, 1.0 ) ) * RECIPROCAL_PI + 0.5;\n\t\t\tsampleUV.x = atan( reflectVec.z, reflectVec.x ) * RECIPROCAL_PI2 + 0.5;\n\t\t\t#ifdef TEXTURE_LOD_EXT\n\t\t\t\tvec4 envMapColor = texture2DLodEXT( envMap, sampleUV, specularMIPLevel );\n\t\t\t#else\n\t\t\t\tvec4 envMapColor = texture2D( envMap, sampleUV, specularMIPLevel );\n\t\t\t#endif\n\t\t\tenvMapColor.rgb = envMapTexelToLinear( envMapColor ).rgb;\n\t\t#elif defined( ENVMAP_TYPE_SPHERE )\n\t\t\tvec3 reflectView = normalize( ( viewMatrix * vec4( reflectVec, 0.0 ) ).xyz + vec3( 0.0,0.0,1.0 ) );\n\t\t\t#ifdef TEXTURE_LOD_EXT\n\t\t\t\tvec4 envMapColor = texture2DLodEXT( envMap, reflectView.xy * 0.5 + 0.5, specularMIPLevel );\n\t\t\t#else\n\t\t\t\tvec4 envMapColor = texture2D( envMap, reflectView.xy * 0.5 + 0.5, specularMIPLevel );\n\t\t\t#endif\n\t\t\tenvMapColor.rgb = envMapTexelToLinear( envMapColor ).rgb;\n\t\t#endif\n\t\treturn envMapColor.rgb * envMapIntensity;\n\t}\n#endif", +envmap_vertex:"#ifdef USE_ENVMAP\n\t#if defined( USE_BUMPMAP ) || defined( USE_NORMALMAP ) || defined( PHONG )\n\t\tvWorldPosition = worldPosition.xyz;\n\t#else\n\t\tvec3 cameraToVertex = normalize( worldPosition.xyz - cameraPosition );\n\t\tvec3 worldNormal = inverseTransformDirection( transformedNormal, viewMatrix );\n\t\t#ifdef ENVMAP_MODE_REFLECTION\n\t\t\tvReflect = reflect( cameraToVertex, worldNormal );\n\t\t#else\n\t\t\tvReflect = refract( cameraToVertex, worldNormal, refractionRatio );\n\t\t#endif\n\t#endif\n#endif", +fog_vertex:"#ifdef USE_FOG\n\tfogDepth = -mvPosition.z;\n#endif",fog_pars_vertex:"#ifdef USE_FOG\n\tvarying float fogDepth;\n#endif",fog_fragment:"#ifdef USE_FOG\n\t#ifdef FOG_EXP2\n\t\tfloat fogFactor = whiteCompliment( exp2( - fogDensity * fogDensity * fogDepth * fogDepth * LOG2 ) );\n\t#else\n\t\tfloat fogFactor = smoothstep( fogNear, fogFar, fogDepth );\n\t#endif\n\tgl_FragColor.rgb = mix( gl_FragColor.rgb, fogColor, fogFactor );\n#endif",fog_pars_fragment:"#ifdef USE_FOG\n\tuniform vec3 fogColor;\n\tvarying float fogDepth;\n\t#ifdef FOG_EXP2\n\t\tuniform float fogDensity;\n\t#else\n\t\tuniform float fogNear;\n\t\tuniform float fogFar;\n\t#endif\n#endif", +gradientmap_pars_fragment:"#ifdef TOON\n\tuniform sampler2D gradientMap;\n\tvec3 getGradientIrradiance( vec3 normal, vec3 lightDirection ) {\n\t\tfloat dotNL = dot( normal, lightDirection );\n\t\tvec2 coord = vec2( dotNL * 0.5 + 0.5, 0.0 );\n\t\t#ifdef USE_GRADIENTMAP\n\t\t\treturn texture2D( gradientMap, coord ).rgb;\n\t\t#else\n\t\t\treturn ( coord.x < 0.7 ) ? vec3( 0.7 ) : vec3( 1.0 );\n\t\t#endif\n\t}\n#endif",lightmap_fragment:"#ifdef USE_LIGHTMAP\n\treflectedLight.indirectDiffuse += PI * texture2D( lightMap, vUv2 ).xyz * lightMapIntensity;\n#endif", +lightmap_pars_fragment:"#ifdef USE_LIGHTMAP\n\tuniform sampler2D lightMap;\n\tuniform float lightMapIntensity;\n#endif",lights_lambert_vertex:"vec3 diffuse = vec3( 1.0 );\nGeometricContext geometry;\ngeometry.position = mvPosition.xyz;\ngeometry.normal = normalize( transformedNormal );\ngeometry.viewDir = normalize( -mvPosition.xyz );\nGeometricContext backGeometry;\nbackGeometry.position = geometry.position;\nbackGeometry.normal = -geometry.normal;\nbackGeometry.viewDir = geometry.viewDir;\nvLightFront = vec3( 0.0 );\n#ifdef DOUBLE_SIDED\n\tvLightBack = vec3( 0.0 );\n#endif\nIncidentLight directLight;\nfloat dotNL;\nvec3 directLightColor_Diffuse;\n#if NUM_POINT_LIGHTS > 0\n\t#pragma unroll_loop\n\tfor ( int i = 0; i < NUM_POINT_LIGHTS; i ++ ) {\n\t\tgetPointDirectLightIrradiance( pointLights[ i ], geometry, directLight );\n\t\tdotNL = dot( geometry.normal, directLight.direction );\n\t\tdirectLightColor_Diffuse = PI * directLight.color;\n\t\tvLightFront += saturate( dotNL ) * directLightColor_Diffuse;\n\t\t#ifdef DOUBLE_SIDED\n\t\t\tvLightBack += saturate( -dotNL ) * directLightColor_Diffuse;\n\t\t#endif\n\t}\n#endif\n#if NUM_SPOT_LIGHTS > 0\n\t#pragma unroll_loop\n\tfor ( int i = 0; i < NUM_SPOT_LIGHTS; i ++ ) {\n\t\tgetSpotDirectLightIrradiance( spotLights[ i ], geometry, directLight );\n\t\tdotNL = dot( geometry.normal, directLight.direction );\n\t\tdirectLightColor_Diffuse = PI * directLight.color;\n\t\tvLightFront += saturate( dotNL ) * directLightColor_Diffuse;\n\t\t#ifdef DOUBLE_SIDED\n\t\t\tvLightBack += saturate( -dotNL ) * directLightColor_Diffuse;\n\t\t#endif\n\t}\n#endif\n#if NUM_DIR_LIGHTS > 0\n\t#pragma unroll_loop\n\tfor ( int i = 0; i < NUM_DIR_LIGHTS; i ++ ) {\n\t\tgetDirectionalDirectLightIrradiance( directionalLights[ i ], geometry, directLight );\n\t\tdotNL = dot( geometry.normal, directLight.direction );\n\t\tdirectLightColor_Diffuse = PI * directLight.color;\n\t\tvLightFront += saturate( dotNL ) * directLightColor_Diffuse;\n\t\t#ifdef DOUBLE_SIDED\n\t\t\tvLightBack += saturate( -dotNL ) * directLightColor_Diffuse;\n\t\t#endif\n\t}\n#endif\n#if NUM_HEMI_LIGHTS > 0\n\t#pragma unroll_loop\n\tfor ( int i = 0; i < NUM_HEMI_LIGHTS; i ++ ) {\n\t\tvLightFront += getHemisphereLightIrradiance( hemisphereLights[ i ], geometry );\n\t\t#ifdef DOUBLE_SIDED\n\t\t\tvLightBack += getHemisphereLightIrradiance( hemisphereLights[ i ], backGeometry );\n\t\t#endif\n\t}\n#endif", +lights_pars_begin:"uniform vec3 ambientLightColor;\nvec3 getAmbientLightIrradiance( const in vec3 ambientLightColor ) {\n\tvec3 irradiance = ambientLightColor;\n\t#ifndef PHYSICALLY_CORRECT_LIGHTS\n\t\tirradiance *= PI;\n\t#endif\n\treturn irradiance;\n}\n#if NUM_DIR_LIGHTS > 0\n\tstruct DirectionalLight {\n\t\tvec3 direction;\n\t\tvec3 color;\n\t\tint shadow;\n\t\tfloat shadowBias;\n\t\tfloat shadowRadius;\n\t\tvec2 shadowMapSize;\n\t};\n\tuniform DirectionalLight directionalLights[ NUM_DIR_LIGHTS ];\n\tvoid getDirectionalDirectLightIrradiance( const in DirectionalLight directionalLight, const in GeometricContext geometry, out IncidentLight directLight ) {\n\t\tdirectLight.color = directionalLight.color;\n\t\tdirectLight.direction = directionalLight.direction;\n\t\tdirectLight.visible = true;\n\t}\n#endif\n#if NUM_POINT_LIGHTS > 0\n\tstruct PointLight {\n\t\tvec3 position;\n\t\tvec3 color;\n\t\tfloat distance;\n\t\tfloat decay;\n\t\tint shadow;\n\t\tfloat shadowBias;\n\t\tfloat shadowRadius;\n\t\tvec2 shadowMapSize;\n\t\tfloat shadowCameraNear;\n\t\tfloat shadowCameraFar;\n\t};\n\tuniform PointLight pointLights[ NUM_POINT_LIGHTS ];\n\tvoid getPointDirectLightIrradiance( const in PointLight pointLight, const in GeometricContext geometry, out IncidentLight directLight ) {\n\t\tvec3 lVector = pointLight.position - geometry.position;\n\t\tdirectLight.direction = normalize( lVector );\n\t\tfloat lightDistance = length( lVector );\n\t\tdirectLight.color = pointLight.color;\n\t\tdirectLight.color *= punctualLightIntensityToIrradianceFactor( lightDistance, pointLight.distance, pointLight.decay );\n\t\tdirectLight.visible = ( directLight.color != vec3( 0.0 ) );\n\t}\n#endif\n#if NUM_SPOT_LIGHTS > 0\n\tstruct SpotLight {\n\t\tvec3 position;\n\t\tvec3 direction;\n\t\tvec3 color;\n\t\tfloat distance;\n\t\tfloat decay;\n\t\tfloat coneCos;\n\t\tfloat penumbraCos;\n\t\tint shadow;\n\t\tfloat shadowBias;\n\t\tfloat shadowRadius;\n\t\tvec2 shadowMapSize;\n\t};\n\tuniform SpotLight spotLights[ NUM_SPOT_LIGHTS ];\n\tvoid getSpotDirectLightIrradiance( const in SpotLight spotLight, const in GeometricContext geometry, out IncidentLight directLight ) {\n\t\tvec3 lVector = spotLight.position - geometry.position;\n\t\tdirectLight.direction = normalize( lVector );\n\t\tfloat lightDistance = length( lVector );\n\t\tfloat angleCos = dot( directLight.direction, spotLight.direction );\n\t\tif ( angleCos > spotLight.coneCos ) {\n\t\t\tfloat spotEffect = smoothstep( spotLight.coneCos, spotLight.penumbraCos, angleCos );\n\t\t\tdirectLight.color = spotLight.color;\n\t\t\tdirectLight.color *= spotEffect * punctualLightIntensityToIrradianceFactor( lightDistance, spotLight.distance, spotLight.decay );\n\t\t\tdirectLight.visible = true;\n\t\t} else {\n\t\t\tdirectLight.color = vec3( 0.0 );\n\t\t\tdirectLight.visible = false;\n\t\t}\n\t}\n#endif\n#if NUM_RECT_AREA_LIGHTS > 0\n\tstruct RectAreaLight {\n\t\tvec3 color;\n\t\tvec3 position;\n\t\tvec3 halfWidth;\n\t\tvec3 halfHeight;\n\t};\n\tuniform sampler2D ltc_1;\tuniform sampler2D ltc_2;\n\tuniform RectAreaLight rectAreaLights[ NUM_RECT_AREA_LIGHTS ];\n#endif\n#if NUM_HEMI_LIGHTS > 0\n\tstruct HemisphereLight {\n\t\tvec3 direction;\n\t\tvec3 skyColor;\n\t\tvec3 groundColor;\n\t};\n\tuniform HemisphereLight hemisphereLights[ NUM_HEMI_LIGHTS ];\n\tvec3 getHemisphereLightIrradiance( const in HemisphereLight hemiLight, const in GeometricContext geometry ) {\n\t\tfloat dotNL = dot( geometry.normal, hemiLight.direction );\n\t\tfloat hemiDiffuseWeight = 0.5 * dotNL + 0.5;\n\t\tvec3 irradiance = mix( hemiLight.groundColor, hemiLight.skyColor, hemiDiffuseWeight );\n\t\t#ifndef PHYSICALLY_CORRECT_LIGHTS\n\t\t\tirradiance *= PI;\n\t\t#endif\n\t\treturn irradiance;\n\t}\n#endif", +lights_phong_fragment:"BlinnPhongMaterial material;\nmaterial.diffuseColor = diffuseColor.rgb;\nmaterial.specularColor = specular;\nmaterial.specularShininess = shininess;\nmaterial.specularStrength = specularStrength;",lights_phong_pars_fragment:"varying vec3 vViewPosition;\n#ifndef FLAT_SHADED\n\tvarying vec3 vNormal;\n#endif\nstruct BlinnPhongMaterial {\n\tvec3\tdiffuseColor;\n\tvec3\tspecularColor;\n\tfloat\tspecularShininess;\n\tfloat\tspecularStrength;\n};\nvoid RE_Direct_BlinnPhong( const in IncidentLight directLight, const in GeometricContext geometry, const in BlinnPhongMaterial material, inout ReflectedLight reflectedLight ) {\n\t#ifdef TOON\n\t\tvec3 irradiance = getGradientIrradiance( geometry.normal, directLight.direction ) * directLight.color;\n\t#else\n\t\tfloat dotNL = saturate( dot( geometry.normal, directLight.direction ) );\n\t\tvec3 irradiance = dotNL * directLight.color;\n\t#endif\n\t#ifndef PHYSICALLY_CORRECT_LIGHTS\n\t\tirradiance *= PI;\n\t#endif\n\treflectedLight.directDiffuse += irradiance * BRDF_Diffuse_Lambert( material.diffuseColor );\n\treflectedLight.directSpecular += irradiance * BRDF_Specular_BlinnPhong( directLight, geometry, material.specularColor, material.specularShininess ) * material.specularStrength;\n}\nvoid RE_IndirectDiffuse_BlinnPhong( const in vec3 irradiance, const in GeometricContext geometry, const in BlinnPhongMaterial material, inout ReflectedLight reflectedLight ) {\n\treflectedLight.indirectDiffuse += irradiance * BRDF_Diffuse_Lambert( material.diffuseColor );\n}\n#define RE_Direct\t\t\t\tRE_Direct_BlinnPhong\n#define RE_IndirectDiffuse\t\tRE_IndirectDiffuse_BlinnPhong\n#define Material_LightProbeLOD( material )\t(0)", +lights_physical_fragment:"PhysicalMaterial material;\nmaterial.diffuseColor = diffuseColor.rgb * ( 1.0 - metalnessFactor );\nmaterial.specularRoughness = clamp( roughnessFactor, 0.04, 1.0 );\n#ifdef STANDARD\n\tmaterial.specularColor = mix( vec3( DEFAULT_SPECULAR_COEFFICIENT ), diffuseColor.rgb, metalnessFactor );\n#else\n\tmaterial.specularColor = mix( vec3( MAXIMUM_SPECULAR_COEFFICIENT * pow2( reflectivity ) ), diffuseColor.rgb, metalnessFactor );\n\tmaterial.clearCoat = saturate( clearCoat );\tmaterial.clearCoatRoughness = clamp( clearCoatRoughness, 0.04, 1.0 );\n#endif", +lights_physical_pars_fragment:"struct PhysicalMaterial {\n\tvec3\tdiffuseColor;\n\tfloat\tspecularRoughness;\n\tvec3\tspecularColor;\n\t#ifndef STANDARD\n\t\tfloat clearCoat;\n\t\tfloat clearCoatRoughness;\n\t#endif\n};\n#define MAXIMUM_SPECULAR_COEFFICIENT 0.16\n#define DEFAULT_SPECULAR_COEFFICIENT 0.04\nfloat clearCoatDHRApprox( const in float roughness, const in float dotNL ) {\n\treturn DEFAULT_SPECULAR_COEFFICIENT + ( 1.0 - DEFAULT_SPECULAR_COEFFICIENT ) * ( pow( 1.0 - dotNL, 5.0 ) * pow( 1.0 - roughness, 2.0 ) );\n}\n#if NUM_RECT_AREA_LIGHTS > 0\n\tvoid RE_Direct_RectArea_Physical( const in RectAreaLight rectAreaLight, const in GeometricContext geometry, const in PhysicalMaterial material, inout ReflectedLight reflectedLight ) {\n\t\tvec3 normal = geometry.normal;\n\t\tvec3 viewDir = geometry.viewDir;\n\t\tvec3 position = geometry.position;\n\t\tvec3 lightPos = rectAreaLight.position;\n\t\tvec3 halfWidth = rectAreaLight.halfWidth;\n\t\tvec3 halfHeight = rectAreaLight.halfHeight;\n\t\tvec3 lightColor = rectAreaLight.color;\n\t\tfloat roughness = material.specularRoughness;\n\t\tvec3 rectCoords[ 4 ];\n\t\trectCoords[ 0 ] = lightPos + halfWidth - halfHeight;\t\trectCoords[ 1 ] = lightPos - halfWidth - halfHeight;\n\t\trectCoords[ 2 ] = lightPos - halfWidth + halfHeight;\n\t\trectCoords[ 3 ] = lightPos + halfWidth + halfHeight;\n\t\tvec2 uv = LTC_Uv( normal, viewDir, roughness );\n\t\tvec4 t1 = texture2D( ltc_1, uv );\n\t\tvec4 t2 = texture2D( ltc_2, uv );\n\t\tmat3 mInv = mat3(\n\t\t\tvec3( t1.x, 0, t1.y ),\n\t\t\tvec3( 0, 1, 0 ),\n\t\t\tvec3( t1.z, 0, t1.w )\n\t\t);\n\t\tvec3 fresnel = ( material.specularColor * t2.x + ( vec3( 1.0 ) - material.specularColor ) * t2.y );\n\t\treflectedLight.directSpecular += lightColor * fresnel * LTC_Evaluate( normal, viewDir, position, mInv, rectCoords );\n\t\treflectedLight.directDiffuse += lightColor * material.diffuseColor * LTC_Evaluate( normal, viewDir, position, mat3( 1.0 ), rectCoords );\n\t}\n#endif\nvoid RE_Direct_Physical( const in IncidentLight directLight, const in GeometricContext geometry, const in PhysicalMaterial material, inout ReflectedLight reflectedLight ) {\n\tfloat dotNL = saturate( dot( geometry.normal, directLight.direction ) );\n\tvec3 irradiance = dotNL * directLight.color;\n\t#ifndef PHYSICALLY_CORRECT_LIGHTS\n\t\tirradiance *= PI;\n\t#endif\n\t#ifndef STANDARD\n\t\tfloat clearCoatDHR = material.clearCoat * clearCoatDHRApprox( material.clearCoatRoughness, dotNL );\n\t#else\n\t\tfloat clearCoatDHR = 0.0;\n\t#endif\n\treflectedLight.directSpecular += ( 1.0 - clearCoatDHR ) * irradiance * BRDF_Specular_GGX( directLight, geometry, material.specularColor, material.specularRoughness );\n\treflectedLight.directDiffuse += ( 1.0 - clearCoatDHR ) * irradiance * BRDF_Diffuse_Lambert( material.diffuseColor );\n\t#ifndef STANDARD\n\t\treflectedLight.directSpecular += irradiance * material.clearCoat * BRDF_Specular_GGX( directLight, geometry, vec3( DEFAULT_SPECULAR_COEFFICIENT ), material.clearCoatRoughness );\n\t#endif\n}\nvoid RE_IndirectDiffuse_Physical( const in vec3 irradiance, const in GeometricContext geometry, const in PhysicalMaterial material, inout ReflectedLight reflectedLight ) {\n\treflectedLight.indirectDiffuse += irradiance * BRDF_Diffuse_Lambert( material.diffuseColor );\n}\nvoid RE_IndirectSpecular_Physical( const in vec3 radiance, const in vec3 clearCoatRadiance, const in GeometricContext geometry, const in PhysicalMaterial material, inout ReflectedLight reflectedLight ) {\n\t#ifndef STANDARD\n\t\tfloat dotNV = saturate( dot( geometry.normal, geometry.viewDir ) );\n\t\tfloat dotNL = dotNV;\n\t\tfloat clearCoatDHR = material.clearCoat * clearCoatDHRApprox( material.clearCoatRoughness, dotNL );\n\t#else\n\t\tfloat clearCoatDHR = 0.0;\n\t#endif\n\treflectedLight.indirectSpecular += ( 1.0 - clearCoatDHR ) * radiance * BRDF_Specular_GGX_Environment( geometry, material.specularColor, material.specularRoughness );\n\t#ifndef STANDARD\n\t\treflectedLight.indirectSpecular += clearCoatRadiance * material.clearCoat * BRDF_Specular_GGX_Environment( geometry, vec3( DEFAULT_SPECULAR_COEFFICIENT ), material.clearCoatRoughness );\n\t#endif\n}\n#define RE_Direct\t\t\t\tRE_Direct_Physical\n#define RE_Direct_RectArea\t\tRE_Direct_RectArea_Physical\n#define RE_IndirectDiffuse\t\tRE_IndirectDiffuse_Physical\n#define RE_IndirectSpecular\t\tRE_IndirectSpecular_Physical\n#define Material_BlinnShininessExponent( material ) GGXRoughnessToBlinnExponent( material.specularRoughness )\n#define Material_ClearCoat_BlinnShininessExponent( material ) GGXRoughnessToBlinnExponent( material.clearCoatRoughness )\nfloat computeSpecularOcclusion( const in float dotNV, const in float ambientOcclusion, const in float roughness ) {\n\treturn saturate( pow( dotNV + ambientOcclusion, exp2( - 16.0 * roughness - 1.0 ) ) - 1.0 + ambientOcclusion );\n}", +lights_fragment_begin:"\nGeometricContext geometry;\ngeometry.position = - vViewPosition;\ngeometry.normal = normal;\ngeometry.viewDir = normalize( vViewPosition );\nIncidentLight directLight;\n#if ( NUM_POINT_LIGHTS > 0 ) && defined( RE_Direct )\n\tPointLight pointLight;\n\t#pragma unroll_loop\n\tfor ( int i = 0; i < NUM_POINT_LIGHTS; i ++ ) {\n\t\tpointLight = pointLights[ i ];\n\t\tgetPointDirectLightIrradiance( pointLight, geometry, directLight );\n\t\t#ifdef USE_SHADOWMAP\n\t\tdirectLight.color *= all( bvec2( pointLight.shadow, directLight.visible ) ) ? getPointShadow( pointShadowMap[ i ], pointLight.shadowMapSize, pointLight.shadowBias, pointLight.shadowRadius, vPointShadowCoord[ i ], pointLight.shadowCameraNear, pointLight.shadowCameraFar ) : 1.0;\n\t\t#endif\n\t\tRE_Direct( directLight, geometry, material, reflectedLight );\n\t}\n#endif\n#if ( NUM_SPOT_LIGHTS > 0 ) && defined( RE_Direct )\n\tSpotLight spotLight;\n\t#pragma unroll_loop\n\tfor ( int i = 0; i < NUM_SPOT_LIGHTS; i ++ ) {\n\t\tspotLight = spotLights[ i ];\n\t\tgetSpotDirectLightIrradiance( spotLight, geometry, directLight );\n\t\t#ifdef USE_SHADOWMAP\n\t\tdirectLight.color *= all( bvec2( spotLight.shadow, directLight.visible ) ) ? getShadow( spotShadowMap[ i ], spotLight.shadowMapSize, spotLight.shadowBias, spotLight.shadowRadius, vSpotShadowCoord[ i ] ) : 1.0;\n\t\t#endif\n\t\tRE_Direct( directLight, geometry, material, reflectedLight );\n\t}\n#endif\n#if ( NUM_DIR_LIGHTS > 0 ) && defined( RE_Direct )\n\tDirectionalLight directionalLight;\n\t#pragma unroll_loop\n\tfor ( int i = 0; i < NUM_DIR_LIGHTS; i ++ ) {\n\t\tdirectionalLight = directionalLights[ i ];\n\t\tgetDirectionalDirectLightIrradiance( directionalLight, geometry, directLight );\n\t\t#ifdef USE_SHADOWMAP\n\t\tdirectLight.color *= all( bvec2( directionalLight.shadow, directLight.visible ) ) ? getShadow( directionalShadowMap[ i ], directionalLight.shadowMapSize, directionalLight.shadowBias, directionalLight.shadowRadius, vDirectionalShadowCoord[ i ] ) : 1.0;\n\t\t#endif\n\t\tRE_Direct( directLight, geometry, material, reflectedLight );\n\t}\n#endif\n#if ( NUM_RECT_AREA_LIGHTS > 0 ) && defined( RE_Direct_RectArea )\n\tRectAreaLight rectAreaLight;\n\t#pragma unroll_loop\n\tfor ( int i = 0; i < NUM_RECT_AREA_LIGHTS; i ++ ) {\n\t\trectAreaLight = rectAreaLights[ i ];\n\t\tRE_Direct_RectArea( rectAreaLight, geometry, material, reflectedLight );\n\t}\n#endif\n#if defined( RE_IndirectDiffuse )\n\tvec3 irradiance = getAmbientLightIrradiance( ambientLightColor );\n\t#if ( NUM_HEMI_LIGHTS > 0 )\n\t\t#pragma unroll_loop\n\t\tfor ( int i = 0; i < NUM_HEMI_LIGHTS; i ++ ) {\n\t\t\tirradiance += getHemisphereLightIrradiance( hemisphereLights[ i ], geometry );\n\t\t}\n\t#endif\n#endif\n#if defined( RE_IndirectSpecular )\n\tvec3 radiance = vec3( 0.0 );\n\tvec3 clearCoatRadiance = vec3( 0.0 );\n#endif", +lights_fragment_maps:"#if defined( RE_IndirectDiffuse )\n\t#ifdef USE_LIGHTMAP\n\t\tvec3 lightMapIrradiance = texture2D( lightMap, vUv2 ).xyz * lightMapIntensity;\n\t\t#ifndef PHYSICALLY_CORRECT_LIGHTS\n\t\t\tlightMapIrradiance *= PI;\n\t\t#endif\n\t\tirradiance += lightMapIrradiance;\n\t#endif\n\t#if defined( USE_ENVMAP ) && defined( PHYSICAL ) && defined( ENVMAP_TYPE_CUBE_UV )\n\t\tirradiance += getLightProbeIndirectIrradiance( geometry, maxMipLevel );\n\t#endif\n#endif\n#if defined( USE_ENVMAP ) && defined( RE_IndirectSpecular )\n\tradiance += getLightProbeIndirectRadiance( geometry, Material_BlinnShininessExponent( material ), maxMipLevel );\n\t#ifndef STANDARD\n\t\tclearCoatRadiance += getLightProbeIndirectRadiance( geometry, Material_ClearCoat_BlinnShininessExponent( material ), maxMipLevel );\n\t#endif\n#endif", +lights_fragment_end:"#if defined( RE_IndirectDiffuse )\n\tRE_IndirectDiffuse( irradiance, geometry, material, reflectedLight );\n#endif\n#if defined( RE_IndirectSpecular )\n\tRE_IndirectSpecular( radiance, clearCoatRadiance, geometry, material, reflectedLight );\n#endif",logdepthbuf_fragment:"#if defined( USE_LOGDEPTHBUF ) && defined( USE_LOGDEPTHBUF_EXT )\n\tgl_FragDepthEXT = log2( vFragDepth ) * logDepthBufFC * 0.5;\n#endif",logdepthbuf_pars_fragment:"#if defined( USE_LOGDEPTHBUF ) && defined( USE_LOGDEPTHBUF_EXT )\n\tuniform float logDepthBufFC;\n\tvarying float vFragDepth;\n#endif", +logdepthbuf_pars_vertex:"#ifdef USE_LOGDEPTHBUF\n\t#ifdef USE_LOGDEPTHBUF_EXT\n\t\tvarying float vFragDepth;\n\t#else\n\t\tuniform float logDepthBufFC;\n\t#endif\n#endif",logdepthbuf_vertex:"#ifdef USE_LOGDEPTHBUF\n\t#ifdef USE_LOGDEPTHBUF_EXT\n\t\tvFragDepth = 1.0 + gl_Position.w;\n\t#else\n\t\tgl_Position.z = log2( max( EPSILON, gl_Position.w + 1.0 ) ) * logDepthBufFC - 1.0;\n\t\tgl_Position.z *= gl_Position.w;\n\t#endif\n#endif",map_fragment:"#ifdef USE_MAP\n\tvec4 texelColor = texture2D( map, vUv );\n\ttexelColor = mapTexelToLinear( texelColor );\n\tdiffuseColor *= texelColor;\n#endif", +map_pars_fragment:"#ifdef USE_MAP\n\tuniform sampler2D map;\n#endif",map_particle_fragment:"#ifdef USE_MAP\n\tvec2 uv = ( uvTransform * vec3( gl_PointCoord.x, 1.0 - gl_PointCoord.y, 1 ) ).xy;\n\tvec4 mapTexel = texture2D( map, uv );\n\tdiffuseColor *= mapTexelToLinear( mapTexel );\n#endif",map_particle_pars_fragment:"#ifdef USE_MAP\n\tuniform mat3 uvTransform;\n\tuniform sampler2D map;\n#endif",metalnessmap_fragment:"float metalnessFactor = metalness;\n#ifdef USE_METALNESSMAP\n\tvec4 texelMetalness = texture2D( metalnessMap, vUv );\n\tmetalnessFactor *= texelMetalness.b;\n#endif", +metalnessmap_pars_fragment:"#ifdef USE_METALNESSMAP\n\tuniform sampler2D metalnessMap;\n#endif",morphnormal_vertex:"#ifdef USE_MORPHNORMALS\n\tobjectNormal += ( morphNormal0 - normal ) * morphTargetInfluences[ 0 ];\n\tobjectNormal += ( morphNormal1 - normal ) * morphTargetInfluences[ 1 ];\n\tobjectNormal += ( morphNormal2 - normal ) * morphTargetInfluences[ 2 ];\n\tobjectNormal += ( morphNormal3 - normal ) * morphTargetInfluences[ 3 ];\n#endif",morphtarget_pars_vertex:"#ifdef USE_MORPHTARGETS\n\t#ifndef USE_MORPHNORMALS\n\tuniform float morphTargetInfluences[ 8 ];\n\t#else\n\tuniform float morphTargetInfluences[ 4 ];\n\t#endif\n#endif", +morphtarget_vertex:"#ifdef USE_MORPHTARGETS\n\ttransformed += ( morphTarget0 - position ) * morphTargetInfluences[ 0 ];\n\ttransformed += ( morphTarget1 - position ) * morphTargetInfluences[ 1 ];\n\ttransformed += ( morphTarget2 - position ) * morphTargetInfluences[ 2 ];\n\ttransformed += ( morphTarget3 - position ) * morphTargetInfluences[ 3 ];\n\t#ifndef USE_MORPHNORMALS\n\ttransformed += ( morphTarget4 - position ) * morphTargetInfluences[ 4 ];\n\ttransformed += ( morphTarget5 - position ) * morphTargetInfluences[ 5 ];\n\ttransformed += ( morphTarget6 - position ) * morphTargetInfluences[ 6 ];\n\ttransformed += ( morphTarget7 - position ) * morphTargetInfluences[ 7 ];\n\t#endif\n#endif", +normal_fragment_begin:"#ifdef FLAT_SHADED\n\tvec3 fdx = vec3( dFdx( vViewPosition.x ), dFdx( vViewPosition.y ), dFdx( vViewPosition.z ) );\n\tvec3 fdy = vec3( dFdy( vViewPosition.x ), dFdy( vViewPosition.y ), dFdy( vViewPosition.z ) );\n\tvec3 normal = normalize( cross( fdx, fdy ) );\n#else\n\tvec3 normal = normalize( vNormal );\n\t#ifdef DOUBLE_SIDED\n\t\tnormal = normal * ( float( gl_FrontFacing ) * 2.0 - 1.0 );\n\t#endif\n#endif",normal_fragment_maps:"#ifdef USE_NORMALMAP\n\t#ifdef OBJECTSPACE_NORMALMAP\n\t\tnormal = texture2D( normalMap, vUv ).xyz * 2.0 - 1.0;\n\t\t#ifdef FLIP_SIDED\n\t\t\tnormal = - normal;\n\t\t#endif\n\t\t#ifdef DOUBLE_SIDED\n\t\t\tnormal = normal * ( float( gl_FrontFacing ) * 2.0 - 1.0 );\n\t\t#endif\n\t\tnormal = normalize( normalMatrix * normal );\n\t#else\n\t\tnormal = perturbNormal2Arb( -vViewPosition, normal );\n\t#endif\n#elif defined( USE_BUMPMAP )\n\tnormal = perturbNormalArb( -vViewPosition, normal, dHdxy_fwd() );\n#endif", +normalmap_pars_fragment:"#ifdef USE_NORMALMAP\n\tuniform sampler2D normalMap;\n\tuniform vec2 normalScale;\n\t#ifdef OBJECTSPACE_NORMALMAP\n\t\tuniform mat3 normalMatrix;\n\t#else\n\t\tvec3 perturbNormal2Arb( vec3 eye_pos, vec3 surf_norm ) {\n\t\t\tvec3 q0 = vec3( dFdx( eye_pos.x ), dFdx( eye_pos.y ), dFdx( eye_pos.z ) );\n\t\t\tvec3 q1 = vec3( dFdy( eye_pos.x ), dFdy( eye_pos.y ), dFdy( eye_pos.z ) );\n\t\t\tvec2 st0 = dFdx( vUv.st );\n\t\t\tvec2 st1 = dFdy( vUv.st );\n\t\t\tfloat scale = sign( st1.t * st0.s - st0.t * st1.s );\n\t\t\tvec3 S = normalize( ( q0 * st1.t - q1 * st0.t ) * scale );\n\t\t\tvec3 T = normalize( ( - q0 * st1.s + q1 * st0.s ) * scale );\n\t\t\tvec3 N = normalize( surf_norm );\n\t\t\tmat3 tsn = mat3( S, T, N );\n\t\t\tvec3 mapN = texture2D( normalMap, vUv ).xyz * 2.0 - 1.0;\n\t\t\tmapN.xy *= normalScale;\n\t\t\tmapN.xy *= ( float( gl_FrontFacing ) * 2.0 - 1.0 );\n\t\t\treturn normalize( tsn * mapN );\n\t\t}\n\t#endif\n#endif", +packing:"vec3 packNormalToRGB( const in vec3 normal ) {\n\treturn normalize( normal ) * 0.5 + 0.5;\n}\nvec3 unpackRGBToNormal( const in vec3 rgb ) {\n\treturn 2.0 * rgb.xyz - 1.0;\n}\nconst float PackUpscale = 256. / 255.;const float UnpackDownscale = 255. / 256.;\nconst vec3 PackFactors = vec3( 256. * 256. * 256., 256. * 256., 256. );\nconst vec4 UnpackFactors = UnpackDownscale / vec4( PackFactors, 1. );\nconst float ShiftRight8 = 1. / 256.;\nvec4 packDepthToRGBA( const in float v ) {\n\tvec4 r = vec4( fract( v * PackFactors ), v );\n\tr.yzw -= r.xyz * ShiftRight8;\treturn r * PackUpscale;\n}\nfloat unpackRGBAToDepth( const in vec4 v ) {\n\treturn dot( v, UnpackFactors );\n}\nfloat viewZToOrthographicDepth( const in float viewZ, const in float near, const in float far ) {\n\treturn ( viewZ + near ) / ( near - far );\n}\nfloat orthographicDepthToViewZ( const in float linearClipZ, const in float near, const in float far ) {\n\treturn linearClipZ * ( near - far ) - near;\n}\nfloat viewZToPerspectiveDepth( const in float viewZ, const in float near, const in float far ) {\n\treturn (( near + viewZ ) * far ) / (( far - near ) * viewZ );\n}\nfloat perspectiveDepthToViewZ( const in float invClipZ, const in float near, const in float far ) {\n\treturn ( near * far ) / ( ( far - near ) * invClipZ - far );\n}", +premultiplied_alpha_fragment:"#ifdef PREMULTIPLIED_ALPHA\n\tgl_FragColor.rgb *= gl_FragColor.a;\n#endif",project_vertex:"vec4 mvPosition = modelViewMatrix * vec4( transformed, 1.0 );\ngl_Position = projectionMatrix * mvPosition;",dithering_fragment:"#if defined( DITHERING )\n gl_FragColor.rgb = dithering( gl_FragColor.rgb );\n#endif",dithering_pars_fragment:"#if defined( DITHERING )\n\tvec3 dithering( vec3 color ) {\n\t\tfloat grid_position = rand( gl_FragCoord.xy );\n\t\tvec3 dither_shift_RGB = vec3( 0.25 / 255.0, -0.25 / 255.0, 0.25 / 255.0 );\n\t\tdither_shift_RGB = mix( 2.0 * dither_shift_RGB, -2.0 * dither_shift_RGB, grid_position );\n\t\treturn color + dither_shift_RGB;\n\t}\n#endif", +roughnessmap_fragment:"float roughnessFactor = roughness;\n#ifdef USE_ROUGHNESSMAP\n\tvec4 texelRoughness = texture2D( roughnessMap, vUv );\n\troughnessFactor *= texelRoughness.g;\n#endif",roughnessmap_pars_fragment:"#ifdef USE_ROUGHNESSMAP\n\tuniform sampler2D roughnessMap;\n#endif",shadowmap_pars_fragment:"#ifdef USE_SHADOWMAP\n\t#if NUM_DIR_LIGHTS > 0\n\t\tuniform sampler2D directionalShadowMap[ NUM_DIR_LIGHTS ];\n\t\tvarying vec4 vDirectionalShadowCoord[ NUM_DIR_LIGHTS ];\n\t#endif\n\t#if NUM_SPOT_LIGHTS > 0\n\t\tuniform sampler2D spotShadowMap[ NUM_SPOT_LIGHTS ];\n\t\tvarying vec4 vSpotShadowCoord[ NUM_SPOT_LIGHTS ];\n\t#endif\n\t#if NUM_POINT_LIGHTS > 0\n\t\tuniform sampler2D pointShadowMap[ NUM_POINT_LIGHTS ];\n\t\tvarying vec4 vPointShadowCoord[ NUM_POINT_LIGHTS ];\n\t#endif\n\tfloat texture2DCompare( sampler2D depths, vec2 uv, float compare ) {\n\t\treturn step( compare, unpackRGBAToDepth( texture2D( depths, uv ) ) );\n\t}\n\tfloat texture2DShadowLerp( sampler2D depths, vec2 size, vec2 uv, float compare ) {\n\t\tconst vec2 offset = vec2( 0.0, 1.0 );\n\t\tvec2 texelSize = vec2( 1.0 ) / size;\n\t\tvec2 centroidUV = floor( uv * size + 0.5 ) / size;\n\t\tfloat lb = texture2DCompare( depths, centroidUV + texelSize * offset.xx, compare );\n\t\tfloat lt = texture2DCompare( depths, centroidUV + texelSize * offset.xy, compare );\n\t\tfloat rb = texture2DCompare( depths, centroidUV + texelSize * offset.yx, compare );\n\t\tfloat rt = texture2DCompare( depths, centroidUV + texelSize * offset.yy, compare );\n\t\tvec2 f = fract( uv * size + 0.5 );\n\t\tfloat a = mix( lb, lt, f.y );\n\t\tfloat b = mix( rb, rt, f.y );\n\t\tfloat c = mix( a, b, f.x );\n\t\treturn c;\n\t}\n\tfloat getShadow( sampler2D shadowMap, vec2 shadowMapSize, float shadowBias, float shadowRadius, vec4 shadowCoord ) {\n\t\tfloat shadow = 1.0;\n\t\tshadowCoord.xyz /= shadowCoord.w;\n\t\tshadowCoord.z += shadowBias;\n\t\tbvec4 inFrustumVec = bvec4 ( shadowCoord.x >= 0.0, shadowCoord.x <= 1.0, shadowCoord.y >= 0.0, shadowCoord.y <= 1.0 );\n\t\tbool inFrustum = all( inFrustumVec );\n\t\tbvec2 frustumTestVec = bvec2( inFrustum, shadowCoord.z <= 1.0 );\n\t\tbool frustumTest = all( frustumTestVec );\n\t\tif ( frustumTest ) {\n\t\t#if defined( SHADOWMAP_TYPE_PCF )\n\t\t\tvec2 texelSize = vec2( 1.0 ) / shadowMapSize;\n\t\t\tfloat dx0 = - texelSize.x * shadowRadius;\n\t\t\tfloat dy0 = - texelSize.y * shadowRadius;\n\t\t\tfloat dx1 = + texelSize.x * shadowRadius;\n\t\t\tfloat dy1 = + texelSize.y * shadowRadius;\n\t\t\tshadow = (\n\t\t\t\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( dx0, dy0 ), shadowCoord.z ) +\n\t\t\t\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( 0.0, dy0 ), shadowCoord.z ) +\n\t\t\t\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( dx1, dy0 ), shadowCoord.z ) +\n\t\t\t\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( dx0, 0.0 ), shadowCoord.z ) +\n\t\t\t\ttexture2DCompare( shadowMap, shadowCoord.xy, shadowCoord.z ) +\n\t\t\t\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( dx1, 0.0 ), shadowCoord.z ) +\n\t\t\t\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( dx0, dy1 ), shadowCoord.z ) +\n\t\t\t\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( 0.0, dy1 ), shadowCoord.z ) +\n\t\t\t\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( dx1, dy1 ), shadowCoord.z )\n\t\t\t) * ( 1.0 / 9.0 );\n\t\t#elif defined( SHADOWMAP_TYPE_PCF_SOFT )\n\t\t\tvec2 texelSize = vec2( 1.0 ) / shadowMapSize;\n\t\t\tfloat dx0 = - texelSize.x * shadowRadius;\n\t\t\tfloat dy0 = - texelSize.y * shadowRadius;\n\t\t\tfloat dx1 = + texelSize.x * shadowRadius;\n\t\t\tfloat dy1 = + texelSize.y * shadowRadius;\n\t\t\tshadow = (\n\t\t\t\ttexture2DShadowLerp( shadowMap, shadowMapSize, shadowCoord.xy + vec2( dx0, dy0 ), shadowCoord.z ) +\n\t\t\t\ttexture2DShadowLerp( shadowMap, shadowMapSize, shadowCoord.xy + vec2( 0.0, dy0 ), shadowCoord.z ) +\n\t\t\t\ttexture2DShadowLerp( shadowMap, shadowMapSize, shadowCoord.xy + vec2( dx1, dy0 ), shadowCoord.z ) +\n\t\t\t\ttexture2DShadowLerp( shadowMap, shadowMapSize, shadowCoord.xy + vec2( dx0, 0.0 ), shadowCoord.z ) +\n\t\t\t\ttexture2DShadowLerp( shadowMap, shadowMapSize, shadowCoord.xy, shadowCoord.z ) +\n\t\t\t\ttexture2DShadowLerp( shadowMap, shadowMapSize, shadowCoord.xy + vec2( dx1, 0.0 ), shadowCoord.z ) +\n\t\t\t\ttexture2DShadowLerp( shadowMap, shadowMapSize, shadowCoord.xy + vec2( dx0, dy1 ), shadowCoord.z ) +\n\t\t\t\ttexture2DShadowLerp( shadowMap, shadowMapSize, shadowCoord.xy + vec2( 0.0, dy1 ), shadowCoord.z ) +\n\t\t\t\ttexture2DShadowLerp( shadowMap, shadowMapSize, shadowCoord.xy + vec2( dx1, dy1 ), shadowCoord.z )\n\t\t\t) * ( 1.0 / 9.0 );\n\t\t#else\n\t\t\tshadow = texture2DCompare( shadowMap, shadowCoord.xy, shadowCoord.z );\n\t\t#endif\n\t\t}\n\t\treturn shadow;\n\t}\n\tvec2 cubeToUV( vec3 v, float texelSizeY ) {\n\t\tvec3 absV = abs( v );\n\t\tfloat scaleToCube = 1.0 / max( absV.x, max( absV.y, absV.z ) );\n\t\tabsV *= scaleToCube;\n\t\tv *= scaleToCube * ( 1.0 - 2.0 * texelSizeY );\n\t\tvec2 planar = v.xy;\n\t\tfloat almostATexel = 1.5 * texelSizeY;\n\t\tfloat almostOne = 1.0 - almostATexel;\n\t\tif ( absV.z >= almostOne ) {\n\t\t\tif ( v.z > 0.0 )\n\t\t\t\tplanar.x = 4.0 - v.x;\n\t\t} else if ( absV.x >= almostOne ) {\n\t\t\tfloat signX = sign( v.x );\n\t\t\tplanar.x = v.z * signX + 2.0 * signX;\n\t\t} else if ( absV.y >= almostOne ) {\n\t\t\tfloat signY = sign( v.y );\n\t\t\tplanar.x = v.x + 2.0 * signY + 2.0;\n\t\t\tplanar.y = v.z * signY - 2.0;\n\t\t}\n\t\treturn vec2( 0.125, 0.25 ) * planar + vec2( 0.375, 0.75 );\n\t}\n\tfloat getPointShadow( sampler2D shadowMap, vec2 shadowMapSize, float shadowBias, float shadowRadius, vec4 shadowCoord, float shadowCameraNear, float shadowCameraFar ) {\n\t\tvec2 texelSize = vec2( 1.0 ) / ( shadowMapSize * vec2( 4.0, 2.0 ) );\n\t\tvec3 lightToPosition = shadowCoord.xyz;\n\t\tfloat dp = ( length( lightToPosition ) - shadowCameraNear ) / ( shadowCameraFar - shadowCameraNear );\t\tdp += shadowBias;\n\t\tvec3 bd3D = normalize( lightToPosition );\n\t\t#if defined( SHADOWMAP_TYPE_PCF ) || defined( SHADOWMAP_TYPE_PCF_SOFT )\n\t\t\tvec2 offset = vec2( - 1, 1 ) * shadowRadius * texelSize.y;\n\t\t\treturn (\n\t\t\t\ttexture2DCompare( shadowMap, cubeToUV( bd3D + offset.xyy, texelSize.y ), dp ) +\n\t\t\t\ttexture2DCompare( shadowMap, cubeToUV( bd3D + offset.yyy, texelSize.y ), dp ) +\n\t\t\t\ttexture2DCompare( shadowMap, cubeToUV( bd3D + offset.xyx, texelSize.y ), dp ) +\n\t\t\t\ttexture2DCompare( shadowMap, cubeToUV( bd3D + offset.yyx, texelSize.y ), dp ) +\n\t\t\t\ttexture2DCompare( shadowMap, cubeToUV( bd3D, texelSize.y ), dp ) +\n\t\t\t\ttexture2DCompare( shadowMap, cubeToUV( bd3D + offset.xxy, texelSize.y ), dp ) +\n\t\t\t\ttexture2DCompare( shadowMap, cubeToUV( bd3D + offset.yxy, texelSize.y ), dp ) +\n\t\t\t\ttexture2DCompare( shadowMap, cubeToUV( bd3D + offset.xxx, texelSize.y ), dp ) +\n\t\t\t\ttexture2DCompare( shadowMap, cubeToUV( bd3D + offset.yxx, texelSize.y ), dp )\n\t\t\t) * ( 1.0 / 9.0 );\n\t\t#else\n\t\t\treturn texture2DCompare( shadowMap, cubeToUV( bd3D, texelSize.y ), dp );\n\t\t#endif\n\t}\n#endif", +shadowmap_pars_vertex:"#ifdef USE_SHADOWMAP\n\t#if NUM_DIR_LIGHTS > 0\n\t\tuniform mat4 directionalShadowMatrix[ NUM_DIR_LIGHTS ];\n\t\tvarying vec4 vDirectionalShadowCoord[ NUM_DIR_LIGHTS ];\n\t#endif\n\t#if NUM_SPOT_LIGHTS > 0\n\t\tuniform mat4 spotShadowMatrix[ NUM_SPOT_LIGHTS ];\n\t\tvarying vec4 vSpotShadowCoord[ NUM_SPOT_LIGHTS ];\n\t#endif\n\t#if NUM_POINT_LIGHTS > 0\n\t\tuniform mat4 pointShadowMatrix[ NUM_POINT_LIGHTS ];\n\t\tvarying vec4 vPointShadowCoord[ NUM_POINT_LIGHTS ];\n\t#endif\n#endif", +shadowmap_vertex:"#ifdef USE_SHADOWMAP\n\t#if NUM_DIR_LIGHTS > 0\n\t#pragma unroll_loop\n\tfor ( int i = 0; i < NUM_DIR_LIGHTS; i ++ ) {\n\t\tvDirectionalShadowCoord[ i ] = directionalShadowMatrix[ i ] * worldPosition;\n\t}\n\t#endif\n\t#if NUM_SPOT_LIGHTS > 0\n\t#pragma unroll_loop\n\tfor ( int i = 0; i < NUM_SPOT_LIGHTS; i ++ ) {\n\t\tvSpotShadowCoord[ i ] = spotShadowMatrix[ i ] * worldPosition;\n\t}\n\t#endif\n\t#if NUM_POINT_LIGHTS > 0\n\t#pragma unroll_loop\n\tfor ( int i = 0; i < NUM_POINT_LIGHTS; i ++ ) {\n\t\tvPointShadowCoord[ i ] = pointShadowMatrix[ i ] * worldPosition;\n\t}\n\t#endif\n#endif", +shadowmask_pars_fragment:"float getShadowMask() {\n\tfloat shadow = 1.0;\n\t#ifdef USE_SHADOWMAP\n\t#if NUM_DIR_LIGHTS > 0\n\tDirectionalLight directionalLight;\n\t#pragma unroll_loop\n\tfor ( int i = 0; i < NUM_DIR_LIGHTS; i ++ ) {\n\t\tdirectionalLight = directionalLights[ i ];\n\t\tshadow *= bool( directionalLight.shadow ) ? getShadow( directionalShadowMap[ i ], directionalLight.shadowMapSize, directionalLight.shadowBias, directionalLight.shadowRadius, vDirectionalShadowCoord[ i ] ) : 1.0;\n\t}\n\t#endif\n\t#if NUM_SPOT_LIGHTS > 0\n\tSpotLight spotLight;\n\t#pragma unroll_loop\n\tfor ( int i = 0; i < NUM_SPOT_LIGHTS; i ++ ) {\n\t\tspotLight = spotLights[ i ];\n\t\tshadow *= bool( spotLight.shadow ) ? getShadow( spotShadowMap[ i ], spotLight.shadowMapSize, spotLight.shadowBias, spotLight.shadowRadius, vSpotShadowCoord[ i ] ) : 1.0;\n\t}\n\t#endif\n\t#if NUM_POINT_LIGHTS > 0\n\tPointLight pointLight;\n\t#pragma unroll_loop\n\tfor ( int i = 0; i < NUM_POINT_LIGHTS; i ++ ) {\n\t\tpointLight = pointLights[ i ];\n\t\tshadow *= bool( pointLight.shadow ) ? getPointShadow( pointShadowMap[ i ], pointLight.shadowMapSize, pointLight.shadowBias, pointLight.shadowRadius, vPointShadowCoord[ i ], pointLight.shadowCameraNear, pointLight.shadowCameraFar ) : 1.0;\n\t}\n\t#endif\n\t#endif\n\treturn shadow;\n}", +skinbase_vertex:"#ifdef USE_SKINNING\n\tmat4 boneMatX = getBoneMatrix( skinIndex.x );\n\tmat4 boneMatY = getBoneMatrix( skinIndex.y );\n\tmat4 boneMatZ = getBoneMatrix( skinIndex.z );\n\tmat4 boneMatW = getBoneMatrix( skinIndex.w );\n#endif",skinning_pars_vertex:"#ifdef USE_SKINNING\n\tuniform mat4 bindMatrix;\n\tuniform mat4 bindMatrixInverse;\n\t#ifdef BONE_TEXTURE\n\t\tuniform sampler2D boneTexture;\n\t\tuniform int boneTextureSize;\n\t\tmat4 getBoneMatrix( const in float i ) {\n\t\t\tfloat j = i * 4.0;\n\t\t\tfloat x = mod( j, float( boneTextureSize ) );\n\t\t\tfloat y = floor( j / float( boneTextureSize ) );\n\t\t\tfloat dx = 1.0 / float( boneTextureSize );\n\t\t\tfloat dy = 1.0 / float( boneTextureSize );\n\t\t\ty = dy * ( y + 0.5 );\n\t\t\tvec4 v1 = texture2D( boneTexture, vec2( dx * ( x + 0.5 ), y ) );\n\t\t\tvec4 v2 = texture2D( boneTexture, vec2( dx * ( x + 1.5 ), y ) );\n\t\t\tvec4 v3 = texture2D( boneTexture, vec2( dx * ( x + 2.5 ), y ) );\n\t\t\tvec4 v4 = texture2D( boneTexture, vec2( dx * ( x + 3.5 ), y ) );\n\t\t\tmat4 bone = mat4( v1, v2, v3, v4 );\n\t\t\treturn bone;\n\t\t}\n\t#else\n\t\tuniform mat4 boneMatrices[ MAX_BONES ];\n\t\tmat4 getBoneMatrix( const in float i ) {\n\t\t\tmat4 bone = boneMatrices[ int(i) ];\n\t\t\treturn bone;\n\t\t}\n\t#endif\n#endif", +skinning_vertex:"#ifdef USE_SKINNING\n\tvec4 skinVertex = bindMatrix * vec4( transformed, 1.0 );\n\tvec4 skinned = vec4( 0.0 );\n\tskinned += boneMatX * skinVertex * skinWeight.x;\n\tskinned += boneMatY * skinVertex * skinWeight.y;\n\tskinned += boneMatZ * skinVertex * skinWeight.z;\n\tskinned += boneMatW * skinVertex * skinWeight.w;\n\ttransformed = ( bindMatrixInverse * skinned ).xyz;\n#endif",skinnormal_vertex:"#ifdef USE_SKINNING\n\tmat4 skinMatrix = mat4( 0.0 );\n\tskinMatrix += skinWeight.x * boneMatX;\n\tskinMatrix += skinWeight.y * boneMatY;\n\tskinMatrix += skinWeight.z * boneMatZ;\n\tskinMatrix += skinWeight.w * boneMatW;\n\tskinMatrix = bindMatrixInverse * skinMatrix * bindMatrix;\n\tobjectNormal = vec4( skinMatrix * vec4( objectNormal, 0.0 ) ).xyz;\n#endif", +specularmap_fragment:"float specularStrength;\n#ifdef USE_SPECULARMAP\n\tvec4 texelSpecular = texture2D( specularMap, vUv );\n\tspecularStrength = texelSpecular.r;\n#else\n\tspecularStrength = 1.0;\n#endif",specularmap_pars_fragment:"#ifdef USE_SPECULARMAP\n\tuniform sampler2D specularMap;\n#endif",tonemapping_fragment:"#if defined( TONE_MAPPING )\n gl_FragColor.rgb = toneMapping( gl_FragColor.rgb );\n#endif",tonemapping_pars_fragment:"#ifndef saturate\n\t#define saturate(a) clamp( a, 0.0, 1.0 )\n#endif\nuniform float toneMappingExposure;\nuniform float toneMappingWhitePoint;\nvec3 LinearToneMapping( vec3 color ) {\n\treturn toneMappingExposure * color;\n}\nvec3 ReinhardToneMapping( vec3 color ) {\n\tcolor *= toneMappingExposure;\n\treturn saturate( color / ( vec3( 1.0 ) + color ) );\n}\n#define Uncharted2Helper( x ) max( ( ( x * ( 0.15 * x + 0.10 * 0.50 ) + 0.20 * 0.02 ) / ( x * ( 0.15 * x + 0.50 ) + 0.20 * 0.30 ) ) - 0.02 / 0.30, vec3( 0.0 ) )\nvec3 Uncharted2ToneMapping( vec3 color ) {\n\tcolor *= toneMappingExposure;\n\treturn saturate( Uncharted2Helper( color ) / Uncharted2Helper( vec3( toneMappingWhitePoint ) ) );\n}\nvec3 OptimizedCineonToneMapping( vec3 color ) {\n\tcolor *= toneMappingExposure;\n\tcolor = max( vec3( 0.0 ), color - 0.004 );\n\treturn pow( ( color * ( 6.2 * color + 0.5 ) ) / ( color * ( 6.2 * color + 1.7 ) + 0.06 ), vec3( 2.2 ) );\n}\nvec3 ACESFilmicToneMapping( vec3 color ) {\n\tcolor *= toneMappingExposure;\n\treturn saturate( ( color * ( 2.51 * color + 0.03 ) ) / ( color * ( 2.43 * color + 0.59 ) + 0.14 ) );\n}", +uv_pars_fragment:"#if defined( USE_MAP ) || defined( USE_BUMPMAP ) || defined( USE_NORMALMAP ) || defined( USE_SPECULARMAP ) || defined( USE_ALPHAMAP ) || defined( USE_EMISSIVEMAP ) || defined( USE_ROUGHNESSMAP ) || defined( USE_METALNESSMAP )\n\tvarying vec2 vUv;\n#endif",uv_pars_vertex:"#if defined( USE_MAP ) || defined( USE_BUMPMAP ) || defined( USE_NORMALMAP ) || defined( USE_SPECULARMAP ) || defined( USE_ALPHAMAP ) || defined( USE_EMISSIVEMAP ) || defined( USE_ROUGHNESSMAP ) || defined( USE_METALNESSMAP )\n\tvarying vec2 vUv;\n\tuniform mat3 uvTransform;\n#endif", +uv_vertex:"#if defined( USE_MAP ) || defined( USE_BUMPMAP ) || defined( USE_NORMALMAP ) || defined( USE_SPECULARMAP ) || defined( USE_ALPHAMAP ) || defined( USE_EMISSIVEMAP ) || defined( USE_ROUGHNESSMAP ) || defined( USE_METALNESSMAP )\n\tvUv = ( uvTransform * vec3( uv, 1 ) ).xy;\n#endif",uv2_pars_fragment:"#if defined( USE_LIGHTMAP ) || defined( USE_AOMAP )\n\tvarying vec2 vUv2;\n#endif",uv2_pars_vertex:"#if defined( USE_LIGHTMAP ) || defined( USE_AOMAP )\n\tattribute vec2 uv2;\n\tvarying vec2 vUv2;\n#endif", +uv2_vertex:"#if defined( USE_LIGHTMAP ) || defined( USE_AOMAP )\n\tvUv2 = uv2;\n#endif",worldpos_vertex:"#if defined( USE_ENVMAP ) || defined( DISTANCE ) || defined ( USE_SHADOWMAP )\n\tvec4 worldPosition = modelMatrix * vec4( transformed, 1.0 );\n#endif",background_frag:"uniform sampler2D t2D;\nvarying vec2 vUv;\nvoid main() {\n\tvec4 texColor = texture2D( t2D, vUv );\n\tgl_FragColor = mapTexelToLinear( texColor );\n\t#include \n\t#include \n}",background_vert:"varying vec2 vUv;\nuniform mat3 uvTransform;\nvoid main() {\n\tvUv = ( uvTransform * vec3( uv, 1 ) ).xy;\n\tgl_Position = vec4( position.xy, 1.0, 1.0 );\n}", +cube_frag:"uniform samplerCube tCube;\nuniform float tFlip;\nuniform float opacity;\nvarying vec3 vWorldDirection;\nvoid main() {\n\tvec4 texColor = textureCube( tCube, vec3( tFlip * vWorldDirection.x, vWorldDirection.yz ) );\n\tgl_FragColor = mapTexelToLinear( texColor );\n\tgl_FragColor.a *= opacity;\n\t#include \n\t#include \n}",cube_vert:"varying vec3 vWorldDirection;\n#include \nvoid main() {\n\tvWorldDirection = transformDirection( position, modelMatrix );\n\t#include \n\t#include \n\tgl_Position.z = gl_Position.w;\n}", +depth_frag:"#if DEPTH_PACKING == 3200\n\tuniform float opacity;\n#endif\n#include \n#include \n#include \n#include \n#include \n#include \n#include \nvoid main() {\n\t#include \n\tvec4 diffuseColor = vec4( 1.0 );\n\t#if DEPTH_PACKING == 3200\n\t\tdiffuseColor.a = opacity;\n\t#endif\n\t#include \n\t#include \n\t#include \n\t#include \n\t#if DEPTH_PACKING == 3200\n\t\tgl_FragColor = vec4( vec3( 1.0 - gl_FragCoord.z ), opacity );\n\t#elif DEPTH_PACKING == 3201\n\t\tgl_FragColor = packDepthToRGBA( gl_FragCoord.z );\n\t#endif\n}", +depth_vert:"#include \n#include \n#include \n#include \n#include \n#include \n#include \nvoid main() {\n\t#include \n\t#include \n\t#ifdef USE_DISPLACEMENTMAP\n\t\t#include \n\t\t#include \n\t\t#include \n\t#endif\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n}", +distanceRGBA_frag:"#define DISTANCE\nuniform vec3 referencePosition;\nuniform float nearDistance;\nuniform float farDistance;\nvarying vec3 vWorldPosition;\n#include \n#include \n#include \n#include \n#include \n#include \nvoid main () {\n\t#include \n\tvec4 diffuseColor = vec4( 1.0 );\n\t#include \n\t#include \n\t#include \n\tfloat dist = length( vWorldPosition - referencePosition );\n\tdist = ( dist - nearDistance ) / ( farDistance - nearDistance );\n\tdist = saturate( dist );\n\tgl_FragColor = packDepthToRGBA( dist );\n}", +distanceRGBA_vert:"#define DISTANCE\nvarying vec3 vWorldPosition;\n#include \n#include \n#include \n#include \n#include \n#include \nvoid main() {\n\t#include \n\t#include \n\t#ifdef USE_DISPLACEMENTMAP\n\t\t#include \n\t\t#include \n\t\t#include \n\t#endif\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\tvWorldPosition = worldPosition.xyz;\n}", +equirect_frag:"uniform sampler2D tEquirect;\nvarying vec3 vWorldDirection;\n#include \nvoid main() {\n\tvec3 direction = normalize( vWorldDirection );\n\tvec2 sampleUV;\n\tsampleUV.y = asin( clamp( direction.y, - 1.0, 1.0 ) ) * RECIPROCAL_PI + 0.5;\n\tsampleUV.x = atan( direction.z, direction.x ) * RECIPROCAL_PI2 + 0.5;\n\tvec4 texColor = texture2D( tEquirect, sampleUV );\n\tgl_FragColor = mapTexelToLinear( texColor );\n\t#include \n\t#include \n}", +equirect_vert:"varying vec3 vWorldDirection;\n#include \nvoid main() {\n\tvWorldDirection = transformDirection( position, modelMatrix );\n\t#include \n\t#include \n}",linedashed_frag:"uniform vec3 diffuse;\nuniform float opacity;\nuniform float dashSize;\nuniform float totalSize;\nvarying float vLineDistance;\n#include \n#include \n#include \n#include \n#include \nvoid main() {\n\t#include \n\tif ( mod( vLineDistance, totalSize ) > dashSize ) {\n\t\tdiscard;\n\t}\n\tvec3 outgoingLight = vec3( 0.0 );\n\tvec4 diffuseColor = vec4( diffuse, opacity );\n\t#include \n\t#include \n\toutgoingLight = diffuseColor.rgb;\n\tgl_FragColor = vec4( outgoingLight, diffuseColor.a );\n\t#include \n\t#include \n\t#include \n\t#include \n}", +linedashed_vert:"uniform float scale;\nattribute float lineDistance;\nvarying float vLineDistance;\n#include \n#include \n#include \n#include \n#include \nvoid main() {\n\t#include \n\tvLineDistance = scale * lineDistance;\n\tvec4 mvPosition = modelViewMatrix * vec4( position, 1.0 );\n\tgl_Position = projectionMatrix * mvPosition;\n\t#include \n\t#include \n\t#include \n}", +meshbasic_frag:"uniform vec3 diffuse;\nuniform float opacity;\n#ifndef FLAT_SHADED\n\tvarying vec3 vNormal;\n#endif\n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \nvoid main() {\n\t#include \n\tvec4 diffuseColor = vec4( diffuse, opacity );\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\tReflectedLight reflectedLight = ReflectedLight( vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ) );\n\t#ifdef USE_LIGHTMAP\n\t\treflectedLight.indirectDiffuse += texture2D( lightMap, vUv2 ).xyz * lightMapIntensity;\n\t#else\n\t\treflectedLight.indirectDiffuse += vec3( 1.0 );\n\t#endif\n\t#include \n\treflectedLight.indirectDiffuse *= diffuseColor.rgb;\n\tvec3 outgoingLight = reflectedLight.indirectDiffuse;\n\t#include \n\tgl_FragColor = vec4( outgoingLight, diffuseColor.a );\n\t#include \n\t#include \n\t#include \n\t#include \n}", +meshbasic_vert:"#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \nvoid main() {\n\t#include \n\t#include \n\t#include \n\t#include \n\t#ifdef USE_ENVMAP\n\t#include \n\t#include \n\t#include \n\t#include \n\t#endif\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n}", +meshlambert_frag:"uniform vec3 diffuse;\nuniform vec3 emissive;\nuniform float opacity;\nvarying vec3 vLightFront;\n#ifdef DOUBLE_SIDED\n\tvarying vec3 vLightBack;\n#endif\n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \nvoid main() {\n\t#include \n\tvec4 diffuseColor = vec4( diffuse, opacity );\n\tReflectedLight reflectedLight = ReflectedLight( vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ) );\n\tvec3 totalEmissiveRadiance = emissive;\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\treflectedLight.indirectDiffuse = getAmbientLightIrradiance( ambientLightColor );\n\t#include \n\treflectedLight.indirectDiffuse *= BRDF_Diffuse_Lambert( diffuseColor.rgb );\n\t#ifdef DOUBLE_SIDED\n\t\treflectedLight.directDiffuse = ( gl_FrontFacing ) ? vLightFront : vLightBack;\n\t#else\n\t\treflectedLight.directDiffuse = vLightFront;\n\t#endif\n\treflectedLight.directDiffuse *= BRDF_Diffuse_Lambert( diffuseColor.rgb ) * getShadowMask();\n\t#include \n\tvec3 outgoingLight = reflectedLight.directDiffuse + reflectedLight.indirectDiffuse + totalEmissiveRadiance;\n\t#include \n\tgl_FragColor = vec4( outgoingLight, diffuseColor.a );\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n}", +meshlambert_vert:"#define LAMBERT\nvarying vec3 vLightFront;\n#ifdef DOUBLE_SIDED\n\tvarying vec3 vLightBack;\n#endif\n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \nvoid main() {\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n}", +meshmatcap_frag:"#define MATCAP\nuniform vec3 diffuse;\nuniform float opacity;\nuniform sampler2D matcap;\nvarying vec3 vViewPosition;\n#ifndef FLAT_SHADED\n\tvarying vec3 vNormal;\n#endif\n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \nvoid main() {\n\t#include \n\tvec4 diffuseColor = vec4( diffuse, opacity );\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\tvec3 viewDir = normalize( vViewPosition );\n\tvec3 x = normalize( vec3( viewDir.z, 0.0, - viewDir.x ) );\n\tvec3 y = cross( viewDir, x );\n\tvec2 uv = vec2( dot( x, normal ), dot( y, normal ) ) * 0.495 + 0.5;\n\t#ifdef USE_MATCAP\n\t\tvec4 matcapColor = texture2D( matcap, uv );\n\t\tmatcapColor = matcapTexelToLinear( matcapColor );\n\t#else\n\t\tvec4 matcapColor = vec4( 1.0 );\n\t#endif\n\tvec3 outgoingLight = diffuseColor.rgb * matcapColor.rgb;\n\tgl_FragColor = vec4( outgoingLight, diffuseColor.a );\n\t#include \n\t#include \n\t#include \n\t#include \n}", +meshmatcap_vert:"#define MATCAP\nvarying vec3 vViewPosition;\n#ifndef FLAT_SHADED\n\tvarying vec3 vNormal;\n#endif\n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \nvoid main() {\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#ifndef FLAT_SHADED\n\t\tvNormal = normalize( transformedNormal );\n\t#endif\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\tvViewPosition = - mvPosition.xyz;\n}", +meshphong_frag:"#define PHONG\nuniform vec3 diffuse;\nuniform vec3 emissive;\nuniform vec3 specular;\nuniform float shininess;\nuniform float opacity;\n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \nvoid main() {\n\t#include \n\tvec4 diffuseColor = vec4( diffuse, opacity );\n\tReflectedLight reflectedLight = ReflectedLight( vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ) );\n\tvec3 totalEmissiveRadiance = emissive;\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\tvec3 outgoingLight = reflectedLight.directDiffuse + reflectedLight.indirectDiffuse + reflectedLight.directSpecular + reflectedLight.indirectSpecular + totalEmissiveRadiance;\n\t#include \n\tgl_FragColor = vec4( outgoingLight, diffuseColor.a );\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n}", +meshphong_vert:"#define PHONG\nvarying vec3 vViewPosition;\n#ifndef FLAT_SHADED\n\tvarying vec3 vNormal;\n#endif\n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \nvoid main() {\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n#ifndef FLAT_SHADED\n\tvNormal = normalize( transformedNormal );\n#endif\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\tvViewPosition = - mvPosition.xyz;\n\t#include \n\t#include \n\t#include \n\t#include \n}", +meshphysical_frag:"#define PHYSICAL\nuniform vec3 diffuse;\nuniform vec3 emissive;\nuniform float roughness;\nuniform float metalness;\nuniform float opacity;\n#ifndef STANDARD\n\tuniform float clearCoat;\n\tuniform float clearCoatRoughness;\n#endif\nvarying vec3 vViewPosition;\n#ifndef FLAT_SHADED\n\tvarying vec3 vNormal;\n#endif\n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \nvoid main() {\n\t#include \n\tvec4 diffuseColor = vec4( diffuse, opacity );\n\tReflectedLight reflectedLight = ReflectedLight( vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ) );\n\tvec3 totalEmissiveRadiance = emissive;\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\tvec3 outgoingLight = reflectedLight.directDiffuse + reflectedLight.indirectDiffuse + reflectedLight.directSpecular + reflectedLight.indirectSpecular + totalEmissiveRadiance;\n\tgl_FragColor = vec4( outgoingLight, diffuseColor.a );\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n}", +meshphysical_vert:"#define PHYSICAL\nvarying vec3 vViewPosition;\n#ifndef FLAT_SHADED\n\tvarying vec3 vNormal;\n#endif\n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \nvoid main() {\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n#ifndef FLAT_SHADED\n\tvNormal = normalize( transformedNormal );\n#endif\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\tvViewPosition = - mvPosition.xyz;\n\t#include \n\t#include \n\t#include \n}", +normal_frag:"#define NORMAL\nuniform float opacity;\n#if defined( FLAT_SHADED ) || defined( USE_BUMPMAP ) || ( defined( USE_NORMALMAP ) && ! defined( OBJECTSPACE_NORMALMAP ) )\n\tvarying vec3 vViewPosition;\n#endif\n#ifndef FLAT_SHADED\n\tvarying vec3 vNormal;\n#endif\n#include \n#include \n#include \n#include \n#include \nvoid main() {\n\t#include \n\t#include \n\t#include \n\tgl_FragColor = vec4( packNormalToRGB( normal ), opacity );\n}", +normal_vert:"#define NORMAL\n#if defined( FLAT_SHADED ) || defined( USE_BUMPMAP ) || ( defined( USE_NORMALMAP ) && ! defined( OBJECTSPACE_NORMALMAP ) )\n\tvarying vec3 vViewPosition;\n#endif\n#ifndef FLAT_SHADED\n\tvarying vec3 vNormal;\n#endif\n#include \n#include \n#include \n#include \n#include \nvoid main() {\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n#ifndef FLAT_SHADED\n\tvNormal = normalize( transformedNormal );\n#endif\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n#if defined( FLAT_SHADED ) || defined( USE_BUMPMAP ) || ( defined( USE_NORMALMAP ) && ! defined( OBJECTSPACE_NORMALMAP ) )\n\tvViewPosition = - mvPosition.xyz;\n#endif\n}", +points_frag:"uniform vec3 diffuse;\nuniform float opacity;\n#include \n#include \n#include \n#include \n#include \n#include \nvoid main() {\n\t#include \n\tvec3 outgoingLight = vec3( 0.0 );\n\tvec4 diffuseColor = vec4( diffuse, opacity );\n\t#include \n\t#include \n\t#include \n\t#include \n\toutgoingLight = diffuseColor.rgb;\n\tgl_FragColor = vec4( outgoingLight, diffuseColor.a );\n\t#include \n\t#include \n\t#include \n\t#include \n}", +points_vert:"uniform float size;\nuniform float scale;\n#include \n#include \n#include \n#include \n#include \n#include \nvoid main() {\n\t#include \n\t#include \n\t#include \n\t#include \n\tgl_PointSize = size;\n\t#ifdef USE_SIZEATTENUATION\n\t\tbool isPerspective = ( projectionMatrix[ 2 ][ 3 ] == - 1.0 );\n\t\tif ( isPerspective ) gl_PointSize *= ( scale / - mvPosition.z );\n\t#endif\n\t#include \n\t#include \n\t#include \n\t#include \n}", +shadow_frag:"uniform vec3 color;\nuniform float opacity;\n#include \n#include \n#include \n#include \n#include \n#include \n#include \nvoid main() {\n\tgl_FragColor = vec4( color, opacity * ( 1.0 - getShadowMask() ) );\n\t#include \n}",shadow_vert:"#include \n#include \nvoid main() {\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n}", +sprite_frag:"uniform vec3 diffuse;\nuniform float opacity;\n#include \n#include \n#include \n#include \n#include \n#include \nvoid main() {\n\t#include \n\tvec3 outgoingLight = vec3( 0.0 );\n\tvec4 diffuseColor = vec4( diffuse, opacity );\n\t#include \n\t#include \n\t#include \n\toutgoingLight = diffuseColor.rgb;\n\tgl_FragColor = vec4( outgoingLight, diffuseColor.a );\n\t#include \n\t#include \n\t#include \n}", +sprite_vert:"uniform float rotation;\nuniform vec2 center;\n#include \n#include \n#include \n#include \n#include \nvoid main() {\n\t#include \n\tvec4 mvPosition = modelViewMatrix * vec4( 0.0, 0.0, 0.0, 1.0 );\n\tvec2 scale;\n\tscale.x = length( vec3( modelMatrix[ 0 ].x, modelMatrix[ 0 ].y, modelMatrix[ 0 ].z ) );\n\tscale.y = length( vec3( modelMatrix[ 1 ].x, modelMatrix[ 1 ].y, modelMatrix[ 1 ].z ) );\n\t#ifndef USE_SIZEATTENUATION\n\t\tbool isPerspective = ( projectionMatrix[ 2 ][ 3 ] == - 1.0 );\n\t\tif ( isPerspective ) scale *= - mvPosition.z;\n\t#endif\n\tvec2 alignedPosition = ( position.xy - ( center - vec2( 0.5 ) ) ) * scale;\n\tvec2 rotatedPosition;\n\trotatedPosition.x = cos( rotation ) * alignedPosition.x - sin( rotation ) * alignedPosition.y;\n\trotatedPosition.y = sin( rotation ) * alignedPosition.x + cos( rotation ) * alignedPosition.y;\n\tmvPosition.xy += rotatedPosition;\n\tgl_Position = projectionMatrix * mvPosition;\n\t#include \n\t#include \n\t#include \n}"}, +ah={clone:Jb,merge:ma},bh={aliceblue:15792383,antiquewhite:16444375,aqua:65535,aquamarine:8388564,azure:15794175,beige:16119260,bisque:16770244,black:0,blanchedalmond:16772045,blue:255,blueviolet:9055202,brown:10824234,burlywood:14596231,cadetblue:6266528,chartreuse:8388352,chocolate:13789470,coral:16744272,cornflowerblue:6591981,cornsilk:16775388,crimson:14423100,cyan:65535,darkblue:139,darkcyan:35723,darkgoldenrod:12092939,darkgray:11119017,darkgreen:25600,darkgrey:11119017,darkkhaki:12433259,darkmagenta:9109643, +darkolivegreen:5597999,darkorange:16747520,darkorchid:10040012,darkred:9109504,darksalmon:15308410,darkseagreen:9419919,darkslateblue:4734347,darkslategray:3100495,darkslategrey:3100495,darkturquoise:52945,darkviolet:9699539,deeppink:16716947,deepskyblue:49151,dimgray:6908265,dimgrey:6908265,dodgerblue:2003199,firebrick:11674146,floralwhite:16775920,forestgreen:2263842,fuchsia:16711935,gainsboro:14474460,ghostwhite:16316671,gold:16766720,goldenrod:14329120,gray:8421504,green:32768,greenyellow:11403055, +grey:8421504,honeydew:15794160,hotpink:16738740,indianred:13458524,indigo:4915330,ivory:16777200,khaki:15787660,lavender:15132410,lavenderblush:16773365,lawngreen:8190976,lemonchiffon:16775885,lightblue:11393254,lightcoral:15761536,lightcyan:14745599,lightgoldenrodyellow:16448210,lightgray:13882323,lightgreen:9498256,lightgrey:13882323,lightpink:16758465,lightsalmon:16752762,lightseagreen:2142890,lightskyblue:8900346,lightslategray:7833753,lightslategrey:7833753,lightsteelblue:11584734,lightyellow:16777184, +lime:65280,limegreen:3329330,linen:16445670,magenta:16711935,maroon:8388608,mediumaquamarine:6737322,mediumblue:205,mediumorchid:12211667,mediumpurple:9662683,mediumseagreen:3978097,mediumslateblue:8087790,mediumspringgreen:64154,mediumturquoise:4772300,mediumvioletred:13047173,midnightblue:1644912,mintcream:16121850,mistyrose:16770273,moccasin:16770229,navajowhite:16768685,navy:128,oldlace:16643558,olive:8421376,olivedrab:7048739,orange:16753920,orangered:16729344,orchid:14315734,palegoldenrod:15657130, +palegreen:10025880,paleturquoise:11529966,palevioletred:14381203,papayawhip:16773077,peachpuff:16767673,peru:13468991,pink:16761035,plum:14524637,powderblue:11591910,purple:8388736,rebeccapurple:6697881,red:16711680,rosybrown:12357519,royalblue:4286945,saddlebrown:9127187,salmon:16416882,sandybrown:16032864,seagreen:3050327,seashell:16774638,sienna:10506797,silver:12632256,skyblue:8900331,slateblue:6970061,slategray:7372944,slategrey:7372944,snow:16775930,springgreen:65407,steelblue:4620980,tan:13808780, +teal:32896,thistle:14204888,tomato:16737095,turquoise:4251856,violet:15631086,wheat:16113331,white:16777215,whitesmoke:16119285,yellow:16776960,yellowgreen:10145074};Object.assign(I.prototype,{isColor:!0,r:1,g:1,b:1,set:function(a){a&&a.isColor?this.copy(a):"number"===typeof a?this.setHex(a):"string"===typeof a&&this.setStyle(a);return this},setScalar:function(a){this.b=this.g=this.r=a;return this},setHex:function(a){a=Math.floor(a);this.r=(a>>16&255)/255;this.g=(a>>8&255)/255;this.b=(a&255)/255; +return this},setRGB:function(a,b,c){this.r=a;this.g=b;this.b=c;return this},setHSL:function(){function a(a,c,d){0>d&&(d+=1);1d?c:d<2/3?a+6*(c-a)*(2/3-d):a}return function(b,c,d){b=R.euclideanModulo(b,1);c=R.clamp(c,0,1);d=R.clamp(d,0,1);0===c?this.r=this.g=this.b=d:(c=.5>=d?d*(1+c):d+c-d*c,d=2*d-c,this.r=a(d,c,b+1/3),this.g=a(d,c,b),this.b=a(d,c,b-1/3));return this}}(),setStyle:function(a){function b(b){void 0!==b&&1>parseFloat(b)&&console.warn("THREE.Color: Alpha component of "+ +a+" will be ignored.")}var c;if(c=/^((?:rgb|hsl)a?)\(\s*([^\)]*)\)/.exec(a)){var d=c[2];switch(c[1]){case "rgb":case "rgba":if(c=/^(\d+)\s*,\s*(\d+)\s*,\s*(\d+)\s*(,\s*([0-9]*\.?[0-9]+)\s*)?$/.exec(d))return this.r=Math.min(255,parseInt(c[1],10))/255,this.g=Math.min(255,parseInt(c[2],10))/255,this.b=Math.min(255,parseInt(c[3],10))/255,b(c[5]),this;if(c=/^(\d+)%\s*,\s*(\d+)%\s*,\s*(\d+)%\s*(,\s*([0-9]*\.?[0-9]+)\s*)?$/.exec(d))return this.r=Math.min(100,parseInt(c[1],10))/100,this.g=Math.min(100,parseInt(c[2], +10))/100,this.b=Math.min(100,parseInt(c[3],10))/100,b(c[5]),this;break;case "hsl":case "hsla":if(c=/^([0-9]*\.?[0-9]+)\s*,\s*(\d+)%\s*,\s*(\d+)%\s*(,\s*([0-9]*\.?[0-9]+)\s*)?$/.exec(d)){d=parseFloat(c[1])/360;var e=parseInt(c[2],10)/100,f=parseInt(c[3],10)/100;b(c[5]);return this.setHSL(d,e,f)}}}else if(c=/^#([A-Fa-f0-9]+)$/.exec(a)){c=c[1];d=c.length;if(3===d)return this.r=parseInt(c.charAt(0)+c.charAt(0),16)/255,this.g=parseInt(c.charAt(1)+c.charAt(1),16)/255,this.b=parseInt(c.charAt(2)+c.charAt(2), +16)/255,this;if(6===d)return this.r=parseInt(c.charAt(0)+c.charAt(1),16)/255,this.g=parseInt(c.charAt(2)+c.charAt(3),16)/255,this.b=parseInt(c.charAt(4)+c.charAt(5),16)/255,this}a&&0a?.0773993808*a:Math.pow(.9478672986*a+.0521327014,2.4)}return function(b){this.r=a(b.r);this.g=a(b.g);this.b= +a(b.b);return this}}(),copyLinearToSRGB:function(){function a(a){return.0031308>a?12.92*a:1.055*Math.pow(a,.41666)-.055}return function(b){this.r=a(b.r);this.g=a(b.g);this.b=a(b.b);return this}}(),convertSRGBToLinear:function(){this.copySRGBToLinear(this);return this},convertLinearToSRGB:function(){this.copyLinearToSRGB(this);return this},getHex:function(){return 255*this.r<<16^255*this.g<<8^255*this.b<<0},getHexString:function(){return("000000"+this.getHex().toString(16)).slice(-6)},getHSL:function(a){void 0=== +a&&(console.warn("THREE.Color: .getHSL() target is now required"),a={h:0,s:0,l:0});var b=this.r,c=this.g,d=this.b,e=Math.max(b,c,d),f=Math.min(b,c,d),g,h=(f+e)/2;if(f===e)f=g=0;else{var k=e-f;f=.5>=h?k/(e+f):k/(2-e-f);switch(e){case b:g=(c-d)/k+(cMath.abs(g)?(this._x=Math.atan2(-m,e),this._z=Math.atan2(-f,a)):(this._x=Math.atan2(p,k),this._z=0)):"YXZ"===b?(this._x=Math.asin(-d(m,-1,1)),.99999>Math.abs(m)?(this._y=Math.atan2(g,e),this._z=Math.atan2(h,k)):(this._y=Math.atan2(-l,a),this._z=0)):"ZXY"===b?(this._x=Math.asin(d(p,-1,1)),.99999>Math.abs(p)?(this._y=Math.atan2(-l,e),this._z=Math.atan2(-f,k)):(this._y=0,this._z=Math.atan2(h,a))):"ZYX"===b?(this._y=Math.asin(-d(l, +-1,1)),.99999>Math.abs(l)?(this._x=Math.atan2(p,e),this._z=Math.atan2(h,a)):(this._x=0,this._z=Math.atan2(-f,k))):"YZX"===b?(this._z=Math.asin(d(h,-1,1)),.99999>Math.abs(h)?(this._x=Math.atan2(-m,k),this._y=Math.atan2(-l,a)):(this._x=0,this._y=Math.atan2(g,e))):"XZY"===b?(this._z=Math.asin(-d(f,-1,1)),.99999>Math.abs(f)?(this._x=Math.atan2(p,k),this._y=Math.atan2(g,a)):(this._x=Math.atan2(-m,e),this._y=0)):console.warn("THREE.Euler: .setFromRotationMatrix() given unsupported order: "+b);this._order= +b;if(!1!==c)this.onChangeCallback();return this},setFromQuaternion:function(){var a=new O;return function(b,c,d){a.makeRotationFromQuaternion(b);return this.setFromRotationMatrix(a,c,d)}}(),setFromVector3:function(a,b){return this.set(a.x,a.y,a.z,b||this._order)},reorder:function(){var a=new ka;return function(b){a.setFromEuler(this);return this.setFromQuaternion(a,b)}}(),equals:function(a){return a._x===this._x&&a._y===this._y&&a._z===this._z&&a._order===this._order},fromArray:function(a){this._x= +a[0];this._y=a[1];this._z=a[2];void 0!==a[3]&&(this._order=a[3]);this.onChangeCallback();return this},toArray:function(a,b){void 0===a&&(a=[]);void 0===b&&(b=0);a[b]=this._x;a[b+1]=this._y;a[b+2]=this._z;a[b+3]=this._order;return a},toVector3:function(a){return a?a.set(this._x,this._y,this._z):new n(this._x,this._y,this._z)},onChange:function(a){this.onChangeCallback=a;return this},onChangeCallback:function(){}});Object.assign(Xd.prototype,{set:function(a){this.mask=1<g;g++)if(d[g]===d[(g+1)%3]){a.push(f);break}for(f=a.length-1;0<=f;f--)for(d=a[f],this.faces.splice(d,1),c=0,e=this.faceVertexUvs.length;cthis.opacity&& +(d.opacity=this.opacity);!0===this.transparent&&(d.transparent=this.transparent);d.depthFunc=this.depthFunc;d.depthTest=this.depthTest;d.depthWrite=this.depthWrite;0!==this.rotation&&(d.rotation=this.rotation);!0===this.polygonOffset&&(d.polygonOffset=!0);0!==this.polygonOffsetFactor&&(d.polygonOffsetFactor=this.polygonOffsetFactor);0!==this.polygonOffsetUnits&&(d.polygonOffsetUnits=this.polygonOffsetUnits);1!==this.linewidth&&(d.linewidth=this.linewidth);void 0!==this.dashSize&&(d.dashSize=this.dashSize); +void 0!==this.gapSize&&(d.gapSize=this.gapSize);void 0!==this.scale&&(d.scale=this.scale);!0===this.dithering&&(d.dithering=!0);0a?b.copy(this.origin):b.copy(this.direction).multiplyScalar(a).add(this.origin)}, +distanceToPoint:function(a){return Math.sqrt(this.distanceSqToPoint(a))},distanceSqToPoint:function(){var a=new n;return function(b){var c=a.subVectors(b,this.origin).dot(this.direction);if(0>c)return this.origin.distanceToSquared(b);a.copy(this.direction).multiplyScalar(c).add(this.origin);return a.distanceToSquared(b)}}(),distanceSqToSegment:function(){var a=new n,b=new n,c=new n;return function(d,e,f,g){a.copy(d).add(e).multiplyScalar(.5);b.copy(e).sub(d).normalize();c.copy(this.origin).sub(a); +var h=.5*d.distanceTo(e),k=-this.direction.dot(b),m=c.dot(this.direction),l=-c.dot(b),p=c.lengthSq(),r=Math.abs(1-k*k);if(0=-n?e<=n?(h=1/r,d*=h,e*=h,k=d*(d+k*e+2*m)+e*(k*d+e+2*l)+p):(e=h,d=Math.max(0,-(k*e+m)),k=-d*d+e*(e+2*l)+p):(e=-h,d=Math.max(0,-(k*e+m)),k=-d*d+e*(e+2*l)+p):e<=-n?(d=Math.max(0,-(-k*h+m)),e=0b)return null;b=Math.sqrt(b-e);e=d-b;d+=b;return 0>e&&0>d?null:0>e?this.at(d,c):this.at(e,c)}}(),intersectsSphere:function(a){return this.distanceSqToPoint(a.center)<= +a.radius*a.radius},distanceToPlane:function(a){var b=a.normal.dot(this.direction);if(0===b)return 0===a.distanceToPoint(this.origin)?0:null;a=-(this.origin.dot(a.normal)+a.constant)/b;return 0<=a?a:null},intersectPlane:function(a,b){a=this.distanceToPlane(a);return null===a?null:this.at(a,b)},intersectsPlane:function(a){var b=a.distanceToPoint(this.origin);return 0===b||0>a.normal.dot(this.direction)*b?!0:!1},intersectBox:function(a,b){var c=1/this.direction.x;var d=1/this.direction.y;var e=1/this.direction.z, +f=this.origin;if(0<=c){var g=(a.min.x-f.x)*c;c*=a.max.x-f.x}else g=(a.max.x-f.x)*c,c*=a.min.x-f.x;if(0<=d){var h=(a.min.y-f.y)*d;d*=a.max.y-f.y}else h=(a.max.y-f.y)*d,d*=a.min.y-f.y;if(g>d||h>c)return null;if(h>g||g!==g)g=h;if(da||h>c)return null;if(h>g||g!==g)g=h;if(ac?null:this.at(0<=g?g:c,b)},intersectsBox:function(){var a=new n;return function(b){return null!==this.intersectBox(b, +a)}}(),intersectTriangle:function(){var a=new n,b=new n,c=new n,d=new n;return function(e,f,g,h,k){b.subVectors(f,e);c.subVectors(g,e);d.crossVectors(b,c);f=this.direction.dot(d);if(0f)h=-1,f=-f;else return null;a.subVectors(this.origin,e);e=h*this.direction.dot(c.crossVectors(a,c));if(0>e)return null;g=h*this.direction.dot(b.cross(a));if(0>g||e+g>f)return null;e=-h*a.dot(d);return 0>e?null:this.at(e/f,k)}}(),applyMatrix4:function(a){this.origin.applyMatrix4(a); +this.direction.transformDirection(a);return this},equals:function(a){return a.origin.equals(this.origin)&&a.direction.equals(this.direction)}});Object.assign(ha,{getNormal:function(){var a=new n;return function(b,c,d,e){void 0===e&&(console.warn("THREE.Triangle: .getNormal() target is now required"),e=new n);e.subVectors(d,c);a.subVectors(b,c);e.cross(a);b=e.lengthSq();return 0=a.x+a.y}}(),getUV:function(){var a=new n;return function(b,c,d, +e,f,g,h,k){this.getBarycoord(b,c,d,e,a);k.set(0,0);k.addScaledVector(f,a.x);k.addScaledVector(g,a.y);k.addScaledVector(h,a.z);return k}}()});Object.assign(ha.prototype,{set:function(a,b,c){this.a.copy(a);this.b.copy(b);this.c.copy(c);return this},setFromPointsAndIndices:function(a,b,c,d){this.a.copy(a[b]);this.b.copy(a[c]);this.c.copy(a[d]);return this},clone:function(){return(new this.constructor).copy(this)},copy:function(a){this.a.copy(a.a);this.b.copy(a.b);this.c.copy(a.c);return this},getArea:function(){var a= +new n,b=new n;return function(){a.subVectors(this.c,this.b);b.subVectors(this.a,this.b);return.5*a.cross(b).length()}}(),getMidpoint:function(a){void 0===a&&(console.warn("THREE.Triangle: .getMidpoint() target is now required"),a=new n);return a.addVectors(this.a,this.b).add(this.c).multiplyScalar(1/3)},getNormal:function(a){return ha.getNormal(this.a,this.b,this.c,a)},getPlane:function(a){void 0===a&&(console.warn("THREE.Triangle: .getPlane() target is now required"),a=new n);return a.setFromCoplanarPoints(this.a, +this.b,this.c)},getBarycoord:function(a,b){return ha.getBarycoord(a,this.a,this.b,this.c,b)},containsPoint:function(a){return ha.containsPoint(a,this.a,this.b,this.c)},getUV:function(a,b,c,d,e){return ha.getUV(a,this.a,this.b,this.c,b,c,d,e)},intersectsBox:function(a){return a.intersectsTriangle(this)},closestPointToPoint:function(){var a=new n,b=new n,c=new n,d=new n,e=new n,f=new n;return function(g,h){void 0===h&&(console.warn("THREE.Triangle: .closestPointToPoint() target is now required"),h= +new n);var k=this.a,m=this.b,l=this.c;a.subVectors(m,k);b.subVectors(l,k);d.subVectors(g,k);var p=a.dot(d),r=b.dot(d);if(0>=p&&0>=r)return h.copy(k);e.subVectors(g,m);var x=a.dot(e),t=b.dot(e);if(0<=x&&t<=x)return h.copy(m);var v=p*t-x*r;if(0>=v&&0<=p&&0>=x)return m=p/(p-x),h.copy(k).addScaledVector(a,m);f.subVectors(g,l);g=a.dot(f);var w=b.dot(f);if(0<=w&&g<=w)return h.copy(l);p=g*r-p*w;if(0>=p&&0<=r&&0>=w)return v=r/(r-w),h.copy(k).addScaledVector(b,v);r=x*w-g*t;if(0>=r&&0<=t-x&&0<=g-w)return c.subVectors(l, +m),v=(t-x)/(t-x+(g-w)),h.copy(m).addScaledVector(c,v);l=1/(r+p+v);m=p*l;v*=l;return h.copy(k).addScaledVector(a,m).addScaledVector(b,v)}}(),equals:function(a){return a.a.equals(this.a)&&a.b.equals(this.b)&&a.c.equals(this.c)}});wa.prototype=Object.create(L.prototype);wa.prototype.constructor=wa;wa.prototype.isMeshBasicMaterial=!0;wa.prototype.copy=function(a){L.prototype.copy.call(this,a);this.color.copy(a.color);this.map=a.map;this.lightMap=a.lightMap;this.lightMapIntensity=a.lightMapIntensity;this.aoMap= +a.aoMap;this.aoMapIntensity=a.aoMapIntensity;this.specularMap=a.specularMap;this.alphaMap=a.alphaMap;this.envMap=a.envMap;this.combine=a.combine;this.reflectivity=a.reflectivity;this.refractionRatio=a.refractionRatio;this.wireframe=a.wireframe;this.wireframeLinewidth=a.wireframeLinewidth;this.wireframeLinecap=a.wireframeLinecap;this.wireframeLinejoin=a.wireframeLinejoin;this.skinning=a.skinning;this.morphTargets=a.morphTargets;return this};na.prototype=Object.assign(Object.create(D.prototype),{constructor:na, +isMesh:!0,setDrawMode:function(a){this.drawMode=a},copy:function(a){D.prototype.copy.call(this,a);this.drawMode=a.drawMode;void 0!==a.morphTargetInfluences&&(this.morphTargetInfluences=a.morphTargetInfluences.slice());void 0!==a.morphTargetDictionary&&(this.morphTargetDictionary=Object.assign({},a.morphTargetDictionary));return this},updateMorphTargets:function(){var a=this.geometry;if(a.isBufferGeometry){a=a.morphAttributes;var b=Object.keys(a);if(0c.far?null:{distance:b,point:v.clone(),object:a}}function b(b,c,d,e,k,m,l,q,n){f.fromBufferAttribute(k,l);g.fromBufferAttribute(k,q);h.fromBufferAttribute(k,n);if(b=a(b,c,d,e,f,g,h,t))m&&(p.fromBufferAttribute(m,l),r.fromBufferAttribute(m,q),x.fromBufferAttribute(m,n),b.uv=ha.getUV(t,f,g,h,p,r,x,new z)),m=new Kb(l,q,n),ha.getNormal(f,g,h,m.normal),b.face=m;return b}var c=new O,d=new qb,e=new Ea,f=new n,g=new n,h=new n,k=new n,m=new n,l=new n,p=new z, +r=new z,x=new z,t=new n,v=new n;return function(q,n){var u=this.geometry,v=this.material,w=this.matrixWorld;if(void 0!==v&&(null===u.boundingSphere&&u.computeBoundingSphere(),e.copy(u.boundingSphere),e.applyMatrix4(w),!1!==q.ray.intersectsSphere(e)&&(c.getInverse(w),d.copy(q.ray).applyMatrix4(c),null===u.boundingBox||!1!==d.intersectsBox(u.boundingBox))))if(u.isBufferGeometry){var y=u.index,A=u.attributes.position,B=u.attributes.uv,D=u.groups;u=u.drawRange;var C;if(null!==y)if(Array.isArray(v)){var E= +0;for(C=D.length;Ee.far||f.push({distance:t,point:b.clone(),uv:ha.getUV(b, +h,k,m,l,p,r,new z),face:null,object:this})}}(),clone:function(){return(new this.constructor(this.material)).copy(this)},copy:function(a){D.prototype.copy.call(this,a);void 0!==a.center&&this.center.copy(a.center);return this}});Gc.prototype=Object.assign(Object.create(D.prototype),{constructor:Gc,copy:function(a){D.prototype.copy.call(this,a,!1);a=a.levels;for(var b=0,c=a.length;b=d[e].distance)d[e-1].object.visible=!1,d[e].object.visible=!0;else break;for(;ef||(l.applyMatrix4(this.matrixWorld),v=d.ray.origin.distanceTo(l),vd.far||e.push({distance:v,point:h.clone().applyMatrix4(this.matrixWorld),index:g,face:null,faceIndex:null,object:this}))}}else for(g=0,t=x.length/3-1;gf||(l.applyMatrix4(this.matrixWorld),v=d.ray.origin.distanceTo(l),vd.far||e.push({distance:v,point:h.clone().applyMatrix4(this.matrixWorld), +index:g,face:null,faceIndex:null,object:this}))}else if(g.isGeometry)for(k=g.vertices,m=k.length,g=0;gf||(l.applyMatrix4(this.matrixWorld),v=d.ray.origin.distanceTo(l),vd.far||e.push({distance:v,point:h.clone().applyMatrix4(this.matrixWorld),index:g,face:null,faceIndex:null,object:this}))}}}(),copy:function(a){D.prototype.copy.call(this,a);this.geometry.copy(a.geometry);this.material.copy(a.material);return this},clone:function(){return(new this.constructor).copy(this)}}); +S.prototype=Object.assign(Object.create(ta.prototype),{constructor:S,isLineSegments:!0,computeLineDistances:function(){var a=new n,b=new n;return function(){var c=this.geometry;if(c.isBufferGeometry)if(null===c.index){for(var d=c.attributes.position,e=[],f=0,g=d.count;fd.far||e.push({distance:a,distanceToRay:Math.sqrt(f),point:p.clone(),index:c,face:null,object:g}))}var g=this,h=this.geometry,k=this.matrixWorld,m=d.params.Points.threshold; +null===h.boundingSphere&&h.computeBoundingSphere();c.copy(h.boundingSphere);c.applyMatrix4(k);c.radius+=m;if(!1!==d.ray.intersectsSphere(c)){a.getInverse(k);b.copy(d.ray).applyMatrix4(a);m/=(this.scale.x+this.scale.y+this.scale.z)/3;var l=m*m;m=new n;var p=new n;if(h.isBufferGeometry){var r=h.index;h=h.attributes.position.array;if(null!==r){var x=r.array;r=0;for(var t=x.length;r=a.HAVE_CURRENT_DATA&&(this.needsUpdate=!0)}});Ub.prototype=Object.create(X.prototype);Ub.prototype.constructor=Ub;Ub.prototype.isCompressedTexture=!0;Ic.prototype=Object.create(X.prototype);Ic.prototype.constructor=Ic;Ic.prototype.isCanvasTexture= +!0;Jc.prototype=Object.create(X.prototype);Jc.prototype.constructor=Jc;Jc.prototype.isDepthTexture=!0;Vb.prototype=Object.create(C.prototype);Vb.prototype.constructor=Vb;Kc.prototype=Object.create(Q.prototype);Kc.prototype.constructor=Kc;Wb.prototype=Object.create(C.prototype);Wb.prototype.constructor=Wb;Lc.prototype=Object.create(Q.prototype);Lc.prototype.constructor=Lc;ya.prototype=Object.create(C.prototype);ya.prototype.constructor=ya;Mc.prototype=Object.create(Q.prototype);Mc.prototype.constructor= +Mc;Xb.prototype=Object.create(ya.prototype);Xb.prototype.constructor=Xb;Nc.prototype=Object.create(Q.prototype);Nc.prototype.constructor=Nc;sb.prototype=Object.create(ya.prototype);sb.prototype.constructor=sb;Oc.prototype=Object.create(Q.prototype);Oc.prototype.constructor=Oc;Yb.prototype=Object.create(ya.prototype);Yb.prototype.constructor=Yb;Pc.prototype=Object.create(Q.prototype);Pc.prototype.constructor=Pc;Zb.prototype=Object.create(ya.prototype);Zb.prototype.constructor=Zb;Qc.prototype=Object.create(Q.prototype); +Qc.prototype.constructor=Qc;$b.prototype=Object.create(C.prototype);$b.prototype.constructor=$b;Rc.prototype=Object.create(Q.prototype);Rc.prototype.constructor=Rc;ac.prototype=Object.create(C.prototype);ac.prototype.constructor=ac;Sc.prototype=Object.create(Q.prototype);Sc.prototype.constructor=Sc;bc.prototype=Object.create(C.prototype);bc.prototype.constructor=bc;var ch={triangulate:function(a,b,c){c=c||2;var d=b&&b.length,e=d?b[0]*c:a.length,f=lf(a,0,e,c,!0),g=[];if(!f)return g;var h;if(d){var k= +c;d=[];var m;var l=0;for(m=b.length;l80*c){var n=h=a[0];var t=d=a[1];for(k=c;kh&&(h=l),b>d&&(d=b);h=Math.max(h-n,d-t);h=0!==h?1/h:0}Vc(f,g,c,n,t,h);return g}},Ya={area:function(a){for(var b=a.length,c=0,d=b-1,e=0;eYa.area(a)},triangulateShape:function(a,b){var c=[],d=[],e=[];pf(a);qf(c,a);var f=a.length;b.forEach(pf);for(a=0;aMath.abs(g-k)?[new z(a,1-c),new z(h,1-d),new z(m,1-e),new z(p,1-b)]:[new z(g,1-c),new z(k,1-d),new z(l,1-e),new z(r,1-b)]}};Xc.prototype=Object.create(Q.prototype);Xc.prototype.constructor=Xc;cc.prototype=Object.create(Sa.prototype);cc.prototype.constructor=cc;Yc.prototype=Object.create(Q.prototype);Yc.prototype.constructor=Yc;vb.prototype=Object.create(C.prototype);vb.prototype.constructor=vb;Zc.prototype=Object.create(Q.prototype);Zc.prototype.constructor=Zc;dc.prototype=Object.create(C.prototype); +dc.prototype.constructor=dc;$c.prototype=Object.create(Q.prototype);$c.prototype.constructor=$c;ec.prototype=Object.create(C.prototype);ec.prototype.constructor=ec;wb.prototype=Object.create(Q.prototype);wb.prototype.constructor=wb;wb.prototype.toJSON=function(){var a=Q.prototype.toJSON.call(this);return sf(this.parameters.shapes,a)};xb.prototype=Object.create(C.prototype);xb.prototype.constructor=xb;xb.prototype.toJSON=function(){var a=C.prototype.toJSON.call(this);return sf(this.parameters.shapes, +a)};fc.prototype=Object.create(C.prototype);fc.prototype.constructor=fc;yb.prototype=Object.create(Q.prototype);yb.prototype.constructor=yb;Za.prototype=Object.create(C.prototype);Za.prototype.constructor=Za;ad.prototype=Object.create(yb.prototype);ad.prototype.constructor=ad;bd.prototype=Object.create(Za.prototype);bd.prototype.constructor=bd;cd.prototype=Object.create(Q.prototype);cd.prototype.constructor=cd;gc.prototype=Object.create(C.prototype);gc.prototype.constructor=gc;var ia=Object.freeze({WireframeGeometry:Vb, +ParametricGeometry:Kc,ParametricBufferGeometry:Wb,TetrahedronGeometry:Mc,TetrahedronBufferGeometry:Xb,OctahedronGeometry:Nc,OctahedronBufferGeometry:sb,IcosahedronGeometry:Oc,IcosahedronBufferGeometry:Yb,DodecahedronGeometry:Pc,DodecahedronBufferGeometry:Zb,PolyhedronGeometry:Lc,PolyhedronBufferGeometry:ya,TubeGeometry:Qc,TubeBufferGeometry:$b,TorusKnotGeometry:Rc,TorusKnotBufferGeometry:ac,TorusGeometry:Sc,TorusBufferGeometry:bc,TextGeometry:Xc,TextBufferGeometry:cc,SphereGeometry:Yc,SphereBufferGeometry:vb, +RingGeometry:Zc,RingBufferGeometry:dc,PlaneGeometry:zc,PlaneBufferGeometry:pb,LatheGeometry:$c,LatheBufferGeometry:ec,ShapeGeometry:wb,ShapeBufferGeometry:xb,ExtrudeGeometry:ub,ExtrudeBufferGeometry:Sa,EdgesGeometry:fc,ConeGeometry:ad,ConeBufferGeometry:bd,CylinderGeometry:yb,CylinderBufferGeometry:Za,CircleGeometry:cd,CircleBufferGeometry:gc,BoxGeometry:Lb,BoxBufferGeometry:ob});zb.prototype=Object.create(L.prototype);zb.prototype.constructor=zb;zb.prototype.isShadowMaterial=!0;zb.prototype.copy= +function(a){L.prototype.copy.call(this,a);this.color.copy(a.color);return this};hc.prototype=Object.create(Ba.prototype);hc.prototype.constructor=hc;hc.prototype.isRawShaderMaterial=!0;Ta.prototype=Object.create(L.prototype);Ta.prototype.constructor=Ta;Ta.prototype.isMeshStandardMaterial=!0;Ta.prototype.copy=function(a){L.prototype.copy.call(this,a);this.defines={STANDARD:""};this.color.copy(a.color);this.roughness=a.roughness;this.metalness=a.metalness;this.map=a.map;this.lightMap=a.lightMap;this.lightMapIntensity= +a.lightMapIntensity;this.aoMap=a.aoMap;this.aoMapIntensity=a.aoMapIntensity;this.emissive.copy(a.emissive);this.emissiveMap=a.emissiveMap;this.emissiveIntensity=a.emissiveIntensity;this.bumpMap=a.bumpMap;this.bumpScale=a.bumpScale;this.normalMap=a.normalMap;this.normalMapType=a.normalMapType;this.normalScale.copy(a.normalScale);this.displacementMap=a.displacementMap;this.displacementScale=a.displacementScale;this.displacementBias=a.displacementBias;this.roughnessMap=a.roughnessMap;this.metalnessMap= +a.metalnessMap;this.alphaMap=a.alphaMap;this.envMap=a.envMap;this.envMapIntensity=a.envMapIntensity;this.refractionRatio=a.refractionRatio;this.wireframe=a.wireframe;this.wireframeLinewidth=a.wireframeLinewidth;this.wireframeLinecap=a.wireframeLinecap;this.wireframeLinejoin=a.wireframeLinejoin;this.skinning=a.skinning;this.morphTargets=a.morphTargets;this.morphNormals=a.morphNormals;return this};Ab.prototype=Object.create(Ta.prototype);Ab.prototype.constructor=Ab;Ab.prototype.isMeshPhysicalMaterial= +!0;Ab.prototype.copy=function(a){Ta.prototype.copy.call(this,a);this.defines={PHYSICAL:""};this.reflectivity=a.reflectivity;this.clearCoat=a.clearCoat;this.clearCoatRoughness=a.clearCoatRoughness;return this};Ga.prototype=Object.create(L.prototype);Ga.prototype.constructor=Ga;Ga.prototype.isMeshPhongMaterial=!0;Ga.prototype.copy=function(a){L.prototype.copy.call(this,a);this.color.copy(a.color);this.specular.copy(a.specular);this.shininess=a.shininess;this.map=a.map;this.lightMap=a.lightMap;this.lightMapIntensity= +a.lightMapIntensity;this.aoMap=a.aoMap;this.aoMapIntensity=a.aoMapIntensity;this.emissive.copy(a.emissive);this.emissiveMap=a.emissiveMap;this.emissiveIntensity=a.emissiveIntensity;this.bumpMap=a.bumpMap;this.bumpScale=a.bumpScale;this.normalMap=a.normalMap;this.normalMapType=a.normalMapType;this.normalScale.copy(a.normalScale);this.displacementMap=a.displacementMap;this.displacementScale=a.displacementScale;this.displacementBias=a.displacementBias;this.specularMap=a.specularMap;this.alphaMap=a.alphaMap; +this.envMap=a.envMap;this.combine=a.combine;this.reflectivity=a.reflectivity;this.refractionRatio=a.refractionRatio;this.wireframe=a.wireframe;this.wireframeLinewidth=a.wireframeLinewidth;this.wireframeLinecap=a.wireframeLinecap;this.wireframeLinejoin=a.wireframeLinejoin;this.skinning=a.skinning;this.morphTargets=a.morphTargets;this.morphNormals=a.morphNormals;return this};Bb.prototype=Object.create(Ga.prototype);Bb.prototype.constructor=Bb;Bb.prototype.isMeshToonMaterial=!0;Bb.prototype.copy=function(a){Ga.prototype.copy.call(this, +a);this.gradientMap=a.gradientMap;return this};Cb.prototype=Object.create(L.prototype);Cb.prototype.constructor=Cb;Cb.prototype.isMeshNormalMaterial=!0;Cb.prototype.copy=function(a){L.prototype.copy.call(this,a);this.bumpMap=a.bumpMap;this.bumpScale=a.bumpScale;this.normalMap=a.normalMap;this.normalMapType=a.normalMapType;this.normalScale.copy(a.normalScale);this.displacementMap=a.displacementMap;this.displacementScale=a.displacementScale;this.displacementBias=a.displacementBias;this.wireframe=a.wireframe; +this.wireframeLinewidth=a.wireframeLinewidth;this.skinning=a.skinning;this.morphTargets=a.morphTargets;this.morphNormals=a.morphNormals;return this};Db.prototype=Object.create(L.prototype);Db.prototype.constructor=Db;Db.prototype.isMeshLambertMaterial=!0;Db.prototype.copy=function(a){L.prototype.copy.call(this,a);this.color.copy(a.color);this.map=a.map;this.lightMap=a.lightMap;this.lightMapIntensity=a.lightMapIntensity;this.aoMap=a.aoMap;this.aoMapIntensity=a.aoMapIntensity;this.emissive.copy(a.emissive); +this.emissiveMap=a.emissiveMap;this.emissiveIntensity=a.emissiveIntensity;this.specularMap=a.specularMap;this.alphaMap=a.alphaMap;this.envMap=a.envMap;this.combine=a.combine;this.reflectivity=a.reflectivity;this.refractionRatio=a.refractionRatio;this.wireframe=a.wireframe;this.wireframeLinewidth=a.wireframeLinewidth;this.wireframeLinecap=a.wireframeLinecap;this.wireframeLinejoin=a.wireframeLinejoin;this.skinning=a.skinning;this.morphTargets=a.morphTargets;this.morphNormals=a.morphNormals;return this}; +Eb.prototype=Object.create(L.prototype);Eb.prototype.constructor=Eb;Eb.prototype.isMeshMatcapMaterial=!0;Eb.prototype.copy=function(a){L.prototype.copy.call(this,a);this.defines={MATCAP:""};this.color.copy(a.color);this.matcap=a.matcap;this.map=a.map;this.bumpMap=a.bumpMap;this.bumpScale=a.bumpScale;this.normalMap=a.normalMap;this.normalMapType=a.normalMapType;this.normalScale.copy(a.normalScale);this.displacementMap=a.displacementMap;this.displacementScale=a.displacementScale;this.displacementBias= +a.displacementBias;this.alphaMap=a.alphaMap;this.skinning=a.skinning;this.morphTargets=a.morphTargets;this.morphNormals=a.morphNormals;return this};Fb.prototype=Object.create(T.prototype);Fb.prototype.constructor=Fb;Fb.prototype.isLineDashedMaterial=!0;Fb.prototype.copy=function(a){T.prototype.copy.call(this,a);this.scale=a.scale;this.dashSize=a.dashSize;this.gapSize=a.gapSize;return this};var dh=Object.freeze({ShadowMaterial:zb,SpriteMaterial:gb,RawShaderMaterial:hc,ShaderMaterial:Ba,PointsMaterial:Fa, +MeshPhysicalMaterial:Ab,MeshStandardMaterial:Ta,MeshPhongMaterial:Ga,MeshToonMaterial:Bb,MeshNormalMaterial:Cb,MeshLambertMaterial:Db,MeshDepthMaterial:db,MeshDistanceMaterial:eb,MeshBasicMaterial:wa,MeshMatcapMaterial:Eb,LineDashedMaterial:Fb,LineBasicMaterial:T,Material:L}),ra={arraySlice:function(a,b,c){return ra.isTypedArray(a)?new a.constructor(a.subarray(b,void 0!==c?c:a.length)):a.slice(b,c)},convertArray:function(a,b,c){return!a||!c&&a.constructor===b?a:"number"===typeof b.BYTES_PER_ELEMENT? +new b(a):Array.prototype.slice.call(a)},isTypedArray:function(a){return ArrayBuffer.isView(a)&&!(a instanceof DataView)},getKeyframeOrder:function(a){for(var b=a.length,c=Array(b),d=0;d!==b;++d)c[d]=d;c.sort(function(b,c){return a[b]-a[c]});return c},sortedArray:function(a,b,c){for(var d=a.length,e=new a.constructor(d),f=0,g=0;g!==d;++f)for(var h=c[f]*b,k=0;k!==b;++k)e[g++]=a[h+k];return e},flattenJSON:function(a,b,c,d){for(var e=1,f=a[0];void 0!==f&&void 0===f[d];)f=a[e++];if(void 0!==f){var g=f[d]; +if(void 0!==g)if(Array.isArray(g)){do g=f[d],void 0!==g&&(b.push(f.time),c.push.apply(c,g)),f=a[e++];while(void 0!==f)}else if(void 0!==g.toArray){do g=f[d],void 0!==g&&(b.push(f.time),g.toArray(c,c.length)),f=a[e++];while(void 0!==f)}else{do g=f[d],void 0!==g&&(b.push(f.time),c.push(g)),f=a[e++];while(void 0!==f)}}}};Object.assign(va.prototype,{evaluate:function(a){var b=this.parameterPositions,c=this._cachedIndex,d=b[c],e=b[c-1];a:{b:{c:{d:if(!(a=e)break a;else{f=b[1];a=e)break b}d=c;c=0}}for(;c>>1,ab;)--f;++f;if(0!==e||f!==d)e>=f&&(f=Math.max(f,1),e=f-1),a=this.getValueSize(),this.times=ra.arraySlice(c,e,f),this.values=ra.arraySlice(this.values,e*a,f*a);return this},validate:function(){var a=!0,b=this.getValueSize();0!==b-Math.floor(b)&&(console.error("THREE.KeyframeTrack: Invalid value size in track.",this),a=!1);var c=this.times;b=this.values;var d=c.length;0===d&&(console.error("THREE.KeyframeTrack: Track is empty.", +this),a=!1);for(var e=null,f=0;f!==d;f++){var g=c[f];if("number"===typeof g&&isNaN(g)){console.error("THREE.KeyframeTrack: Time is not a valid number.",this,f,g);a=!1;break}if(null!==e&&e>g){console.error("THREE.KeyframeTrack: Out of order keys.",this,f,g,e);a=!1;break}e=g}if(void 0!==b&&ra.isTypedArray(b))for(f=0,c=b.length;f!==c;++f)if(d=b[f],isNaN(d)){console.error("THREE.KeyframeTrack: Value is not a valid number.",this,f,d);a=!1;break}return a},optimize:function(){for(var a=this.times,b=this.values, +c=this.getValueSize(),d=2302===this.getInterpolation(),e=1,f=a.length-1,g=1;gg)e=a+1;else if(0b&&(b=0);1Number.EPSILON&&(g.normalize(),c=Math.acos(R.clamp(d[k-1].dot(d[k]),-1,1)),e[k].applyMatrix4(h.makeRotationAxis(g,c))),f[k].crossVectors(d[k],e[k]);if(!0===b)for(c=Math.acos(R.clamp(e[0].dot(e[a]),-1,1)),c/=a,0d;)d+=c;for(;d>c;)d-=c;de&&(e=1);1E-4>d&&(d=e);1E-4>k&&(k=e);Fe.initNonuniformCatmullRom(f.x,g.x,h.x,c.x,d,e,k);Ge.initNonuniformCatmullRom(f.y,g.y,h.y,c.y,d,e,k);He.initNonuniformCatmullRom(f.z,g.z,h.z,c.z,d,e,k)}else"catmullrom"===this.curveType&&(Fe.initCatmullRom(f.x,g.x,h.x,c.x,this.tension),Ge.initCatmullRom(f.y,g.y,h.y,c.y,this.tension),He.initCatmullRom(f.z,g.z,h.z,c.z,this.tension));b.set(Fe.calc(a), +Ge.calc(a),He.calc(a));return b};ua.prototype.copy=function(a){J.prototype.copy.call(this,a);this.points=[];for(var b=0,c=a.points.length;bc.length-2?c.length-1:a+1];c=c[a>c.length-3?c.length-1:a+2];b.set(vf(d,e.x,f.x,g.x,c.x),vf(d,e.y,f.y,g.y,c.y));return b};Ma.prototype.copy=function(a){J.prototype.copy.call(this,a);this.points=[];for(var b=0,c=a.points.length;b=b)return b=c[a]-b,a=this.curves[a],c=a.getLength(),a.getPointAt(0===c?0:1-b/c);a++}return null},getLength:function(){var a=this.getCurveLengths(); +return a[a.length-1]},updateArcLengths:function(){this.needsUpdate=!0;this.cacheLengths=null;this.getCurveLengths()},getCurveLengths:function(){if(this.cacheLengths&&this.cacheLengths.length===this.curves.length)return this.cacheLengths;for(var a=[],b=0,c=0,d=this.curves.length;cNumber.EPSILON){if(0>l&&(g=b[f],k=-k,h=b[e],l=-l),!(a.yh.y))if(a.y===g.y){if(a.x===g.x)return!0}else{e=l*(a.x-g.x)-k*(a.y-g.y);if(0===e)return!0;0>e||(d=!d)}}else if(a.y===g.y&&(h.x<=a.x&&a.x<=g.x||g.x<=a.x&&a.x<=h.x))return!0}return d}var e=Ya.isClockWise,f=this.subPaths;if(0===f.length)return[];if(!0===b)return c(f);b=[];if(1===f.length){var g=f[0];var h=new hb;h.curves=g.curves; +b.push(h);return b}var k=!e(f[0].getPoints());k=a?!k:k;h=[];var m=[],l=[],p=0;m[p]=void 0;l[p]=[];for(var n=0,x=f.length;nl.opacity&&(l.transparent=!0);d.setTextures(k);return d.parse(l)}}()});var Vd,se={getContext:function(){void 0===Vd&&(Vd=new (window.AudioContext||window.webkitAudioContext));return Vd},setContext:function(a){Vd=a}};Object.assign(pe.prototype,{load:function(a,b,c,d){var e=new Ia(this.manager);e.setResponseType("arraybuffer");e.setPath(this.path);e.load(a,function(a){a=a.slice(0);se.getContext().decodeAudioData(a,function(a){b(a)})},c,d)},setPath:function(a){this.path=a; +return this}});Object.assign(xf.prototype,{update:function(){var a,b,c,d,e,f,g,h,k=new O,l=new O;return function(m){if(a!==this||b!==m.focus||c!==m.fov||d!==m.aspect*this.aspect||e!==m.near||f!==m.far||g!==m.zoom||h!==this.eyeSep){a=this;b=m.focus;c=m.fov;d=m.aspect*this.aspect;e=m.near;f=m.far;g=m.zoom;var p=m.projectionMatrix.clone();h=this.eyeSep/2;var n=h*e/b,q=e*Math.tan(R.DEG2RAD*c*.5)/g;l.elements[12]=-h;k.elements[12]=h;var t=-q*d+n;var v=q*d+n;p.elements[0]=2*e/(v-t);p.elements[8]=(v+t)/ +(v-t);this.cameraL.projectionMatrix.copy(p);t=-q*d-n;v=q*d-n;p.elements[0]=2*e/(v-t);p.elements[8]=(v+t)/(v-t);this.cameraR.projectionMatrix.copy(p)}this.cameraL.matrixWorld.copy(m.matrixWorld).multiply(l);this.cameraR.matrixWorld.copy(m.matrixWorld).multiply(k)}}()});kd.prototype=Object.create(D.prototype);kd.prototype.constructor=kd;Object.assign(qe.prototype,{start:function(){this.oldTime=this.startTime=("undefined"===typeof performance?Date:performance).now();this.elapsedTime=0;this.running=!0}, +stop:function(){this.getElapsedTime();this.autoStart=this.running=!1},getElapsedTime:function(){this.getDelta();return this.elapsedTime},getDelta:function(){var a=0;if(this.autoStart&&!this.running)return this.start(),0;if(this.running){var b=("undefined"===typeof performance?Date:performance).now();a=(b-this.oldTime)/1E3;this.oldTime=b;this.elapsedTime+=a}return a}});re.prototype=Object.assign(Object.create(D.prototype),{constructor:re,getInput:function(){return this.gain},removeFilter:function(){null!== +this.filter&&(this.gain.disconnect(this.filter),this.filter.disconnect(this.context.destination),this.gain.connect(this.context.destination),this.filter=null);return this},getFilter:function(){return this.filter},setFilter:function(a){null!==this.filter?(this.gain.disconnect(this.filter),this.filter.disconnect(this.context.destination)):this.gain.disconnect(this.context.destination);this.filter=a;this.gain.connect(this.filter);this.filter.connect(this.context.destination);return this},getMasterVolume:function(){return this.gain.gain.value}, +setMasterVolume:function(a){this.gain.gain.setTargetAtTime(a,this.context.currentTime,.01);return this},updateMatrixWorld:function(){var a=new n,b=new ka,c=new n,d=new n,e=new qe;return function(f){D.prototype.updateMatrixWorld.call(this,f);f=this.context.listener;var g=this.up;this.timeDelta=e.getDelta();this.matrixWorld.decompose(a,b,c);d.set(0,0,-1).applyQuaternion(b);if(f.positionX){var h=this.context.currentTime+this.timeDelta;f.positionX.linearRampToValueAtTime(a.x,h);f.positionY.linearRampToValueAtTime(a.y, +h);f.positionZ.linearRampToValueAtTime(a.z,h);f.forwardX.linearRampToValueAtTime(d.x,h);f.forwardY.linearRampToValueAtTime(d.y,h);f.forwardZ.linearRampToValueAtTime(d.z,h);f.upX.linearRampToValueAtTime(g.x,h);f.upY.linearRampToValueAtTime(g.y,h);f.upZ.linearRampToValueAtTime(g.z,h)}else f.setPosition(a.x,a.y,a.z),f.setOrientation(d.x,d.y,d.z,g.x,g.y,g.z)}}()});lc.prototype=Object.assign(Object.create(D.prototype),{constructor:lc,getOutput:function(){return this.gain},setNodeSource:function(a){this.hasPlaybackControl= +!1;this.sourceType="audioNode";this.source=a;this.connect();return this},setMediaElementSource:function(a){this.hasPlaybackControl=!1;this.sourceType="mediaNode";this.source=this.context.createMediaElementSource(a);this.connect();return this},setBuffer:function(a){this.buffer=a;this.sourceType="buffer";this.autoplay&&this.play();return this},play:function(){if(!0===this.isPlaying)console.warn("THREE.Audio: Audio is already playing.");else if(!1===this.hasPlaybackControl)console.warn("THREE.Audio: this Audio has no playback control."); +else{var a=this.context.createBufferSource();a.buffer=this.buffer;a.detune.value=this.detune;a.loop=this.loop;a.onended=this.onEnded.bind(this);a.playbackRate.setValueAtTime(this.playbackRate,this.startTime);this.startTime=this.context.currentTime;a.start(this.startTime,this.offset);this.isPlaying=!0;this.source=a;return this.connect()}},pause:function(){if(!1===this.hasPlaybackControl)console.warn("THREE.Audio: this Audio has no playback control.");else return!0===this.isPlaying&&(this.source.stop(), +this.source.onended=null,this.offset+=(this.context.currentTime-this.startTime)*this.playbackRate,this.isPlaying=!1),this},stop:function(){if(!1===this.hasPlaybackControl)console.warn("THREE.Audio: this Audio has no playback control.");else return this.source.stop(),this.source.onended=null,this.offset=0,this.isPlaying=!1,this},connect:function(){if(0d&&this._mixBufferRegion(c,a,3*b,1-d,b);d=b;for(var f=b+b;d!==f;++d)if(c[d]!==c[d+b]){e.setValue(c,a);break}},saveOriginalState:function(){var a=this.buffer,b=this.valueSize,c=3*b;this.binding.getValue(a,c);for(var d=b;d!==c;++d)a[d]=a[c+d%b];this.cumulativeWeight=0},restoreOriginalState:function(){this.binding.setValue(this.buffer,3*this.valueSize)},_select:function(a,b,c,d,e){if(.5<=d)for(d= +0;d!==e;++d)a[b+d]=a[c+d]},_slerp:function(a,b,c,d){ka.slerpFlat(a,b,a,b,a,c,d)},_lerp:function(a,b,c,d,e){for(var f=1-d,g=0;g!==e;++g){var h=b+g;a[h]=a[h]*f+a[c+g]*d}}});Object.assign(yf.prototype,{getValue:function(a,b){this.bind();var c=this._bindings[this._targetGroup.nCachedObjects_];void 0!==c&&c.getValue(a,b)},setValue:function(a,b){for(var c=this._bindings,d=this._targetGroup.nCachedObjects_,e=c.length;d!==e;++d)c[d].setValue(a,b)},bind:function(){for(var a=this._bindings,b=this._targetGroup.nCachedObjects_, +c=a.length;b!==c;++b)a[b].bind()},unbind:function(){for(var a=this._bindings,b=this._targetGroup.nCachedObjects_,c=a.length;b!==c;++b)a[b].unbind()}});Object.assign(oa,{Composite:yf,create:function(a,b,c){return a&&a.isAnimationObjectGroup?new oa.Composite(a,b,c):new oa(a,b,c)},sanitizeNodeName:function(){var a=/[\[\]\.:\/]/g;return function(b){return b.replace(/\s/g,"_").replace(a,"")}}(),parseTrackName:function(){var a="[^"+"\\[\\]\\.:\\/".replace("\\.","")+"]",b=/((?:WC+[\/:])*)/.source.replace("WC", +"[^\\[\\]\\.:\\/]");a=/(WCOD+)?/.source.replace("WCOD",a);var c=/(?:\.(WC+)(?:\[(.+)\])?)?/.source.replace("WC","[^\\[\\]\\.:\\/]"),d=/\.(WC+)(?:\[(.+)\])?/.source.replace("WC","[^\\[\\]\\.:\\/]"),e=new RegExp("^"+b+a+c+d+"$"),f=["material","materials","bones"];return function(a){var b=e.exec(a);if(!b)throw Error("PropertyBinding: Cannot parse trackName: "+a);b={nodeName:b[2],objectName:b[3],objectIndex:b[4],propertyName:b[5],propertyIndex:b[6]};var c=b.nodeName&&b.nodeName.lastIndexOf(".");if(void 0!== +c&&-1!==c){var d=b.nodeName.substring(c+1);-1!==f.indexOf(d)&&(b.nodeName=b.nodeName.substring(0,c),b.objectName=d)}if(null===b.propertyName||0===b.propertyName.length)throw Error("PropertyBinding: can not parse propertyName from trackName: "+a);return b}}(),findNode:function(a,b){if(!b||""===b||"root"===b||"."===b||-1===b||b===a.name||b===a.uuid)return a;if(a.skeleton){var c=a.skeleton.getBoneByName(b);if(void 0!==c)return c}if(a.children){var d=function(a){for(var c=0;c=b){var n=b++,p=a[n];c[p.uuid]=l;a[l]=p;c[k]=n;a[n]=h;h=0;for(k=e;h!==k;++h){p=d[h];var r=p[l];p[l]=p[n];p[n]=r}}}this.nCachedObjects_=b},uncache:function(){for(var a=this._objects,b=a.length,c=this.nCachedObjects_,d=this._indicesByUUID,e=this._bindings,f=e.length,g=0,h=arguments.length;g!==h;++g){var k=arguments[g].uuid,l=d[k];if(void 0!==l)if(delete d[k],lb||0===c)return;this._startTime=null;b*=c}b*=this._updateTimeScale(a);c=this._updateTime(b);a=this._updateWeight(a);if(0c.parameterPositions[1]&&(this.stopFading(),0===d&&(this.enabled=!1))}}return this._effectiveWeight=b},_updateTimeScale:function(a){var b=0;if(!this.paused){b=this.timeScale;var c=this._timeScaleInterpolant;if(null!==c){var d=c.evaluate(a)[0]; +b*=d;a>c.parameterPositions[1]&&(this.stopWarping(),0===b?this.paused=!0:this.timeScale=b)}}return this._effectiveTimeScale=b},_updateTime:function(a){var b=this.time+a,c=this._clip.duration,d=this.loop,e=this._loopCount,f=2202===d;if(0===a)return-1===e?b:f&&1===(e&1)?c-b:b;if(2200===d)a:{if(-1===e&&(this._loopCount=0,this._setEndings(!0,!0,!1)),b>=c)b=c;else if(0>b)b=0;else break a;this.clampWhenFinished?this.paused=!0:this.enabled=!1;this._mixer.dispatchEvent({type:"finished",action:this,direction:0> +a?-1:1})}else{-1===e&&(0<=a?(e=0,this._setEndings(!0,0===this.repetitions,f)):this._setEndings(0===this.repetitions,!0,f));if(b>=c||0>b){d=Math.floor(b/c);b-=c*d;e+=Math.abs(d);var g=this.repetitions-e;0>=g?(this.clampWhenFinished?this.paused=!0:this.enabled=!1,b=0a,this._setEndings(a,!a,f)):this._setEndings(!1,!1,f),this._loopCount=e,this._mixer.dispatchEvent({type:"loop",action:this,loopDelta:d}))}if(f&& +1===(e&1))return this.time=b,c-b}return this.time=b},_setEndings:function(a,b,c){var d=this._interpolantSettings;c?(d.endingStart=2401,d.endingEnd=2401):(d.endingStart=a?this.zeroSlopeAtStart?2401:2400:2402,d.endingEnd=b?this.zeroSlopeAtEnd?2401:2400:2402)},_scheduleFading:function(a,b,c){var d=this._mixer,e=d.time,f=this._weightInterpolant;null===f&&(this._weightInterpolant=f=d._lendControlInterpolant());d=f.parameterPositions;f=f.sampleValues;d[0]=e;f[0]=b;d[1]=e+a;f[1]=c;return this}});we.prototype= +Object.assign(Object.create(ja.prototype),{constructor:we,_bindAction:function(a,b){var c=a._localRoot||this._root,d=a._clip.tracks,e=d.length,f=a._propertyBindings;a=a._interpolants;var g=c.uuid,h=this._bindingsByRootAndName,k=h[g];void 0===k&&(k={},h[g]=k);for(h=0;h!==e;++h){var l=d[h],n=l.name,p=k[n];if(void 0===p){p=f[h];if(void 0!==p){null===p._cacheIndex&&(++p.referenceCount,this._addInactiveBinding(p,g,n));continue}p=new ve(oa.create(c,n,b&&b._propertyBindings[h].binding.parsedPath),l.ValueTypeName, +l.getValueSize());++p.referenceCount;this._addInactiveBinding(p,g,n)}f[h]=p;a[h].resultBuffer=p.buffer}},_activateAction:function(a){if(!this._isActiveAction(a)){if(null===a._cacheIndex){var b=(a._localRoot||this._root).uuid,c=a._clip.uuid,d=this._actionsByClip[c];this._bindAction(a,d&&d.knownActions[0]);this._addInactiveAction(a,c,b)}b=a._propertyBindings;c=0;for(d=b.length;c!==d;++c){var e=b[c];0===e.useCount++&&(this._lendBinding(e),e.saveOriginalState())}this._lendAction(a)}},_deactivateAction:function(a){if(this._isActiveAction(a)){for(var b= +a._propertyBindings,c=0,d=b.length;c!==d;++c){var e=b[c];0===--e.useCount&&(e.restoreOriginalState(),this._takeBackBinding(e))}this._takeBackAction(a)}},_initMemoryManager:function(){this._actions=[];this._nActiveActions=0;this._actionsByClip={};this._bindings=[];this._nActiveBindings=0;this._bindingsByRootAndName={};this._controlInterpolants=[];this._nActiveControlInterpolants=0;var a=this;this.stats={actions:{get total(){return a._actions.length},get inUse(){return a._nActiveActions}},bindings:{get total(){return a._bindings.length}, +get inUse(){return a._nActiveBindings}},controlInterpolants:{get total(){return a._controlInterpolants.length},get inUse(){return a._nActiveControlInterpolants}}}},_isActiveAction:function(a){a=a._cacheIndex;return null!==a&&athis.max.x||a.ythis.max.y?!1:!0},containsBox:function(a){return this.min.x<=a.min.x&&a.max.x<=this.max.x&&this.min.y<=a.min.y&&a.max.y<=this.max.y},getParameter:function(a,b){void 0===b&&(console.warn("THREE.Box2: .getParameter() target is now required"),b=new z); +return b.set((a.x-this.min.x)/(this.max.x-this.min.x),(a.y-this.min.y)/(this.max.y-this.min.y))},intersectsBox:function(a){return a.max.xthis.max.x||a.max.ythis.max.y?!1:!0},clampPoint:function(a,b){void 0===b&&(console.warn("THREE.Box2: .clampPoint() target is now required"),b=new z);return b.copy(a).clamp(this.min,this.max)},distanceToPoint:function(){var a=new z;return function(b){return a.copy(b).clamp(this.min,this.max).sub(b).length()}}(),intersect:function(a){this.min.max(a.min); +this.max.min(a.max);return this},union:function(a){this.min.min(a.min);this.max.max(a.max);return this},translate:function(a){this.min.add(a);this.max.add(a);return this},equals:function(a){return a.min.equals(this.min)&&a.max.equals(this.max)}});Object.assign(Ce.prototype,{set:function(a,b){this.start.copy(a);this.end.copy(b);return this},clone:function(){return(new this.constructor).copy(this)},copy:function(a){this.start.copy(a.start);this.end.copy(a.end);return this},getCenter:function(a){void 0=== +a&&(console.warn("THREE.Line3: .getCenter() target is now required"),a=new n);return a.addVectors(this.start,this.end).multiplyScalar(.5)},delta:function(a){void 0===a&&(console.warn("THREE.Line3: .delta() target is now required"),a=new n);return a.subVectors(this.end,this.start)},distanceSq:function(){return this.start.distanceToSquared(this.end)},distance:function(){return this.start.distanceTo(this.end)},at:function(a,b){void 0===b&&(console.warn("THREE.Line3: .at() target is now required"),b= +new n);return this.delta(b).multiplyScalar(a).add(this.start)},closestPointToPointParameter:function(){var a=new n,b=new n;return function(c,d){a.subVectors(c,this.start);b.subVectors(this.end,this.start);c=b.dot(b);c=b.dot(a)/c;d&&(c=R.clamp(c,0,1));return c}}(),closestPointToPoint:function(a,b,c){a=this.closestPointToPointParameter(a,b);void 0===c&&(console.warn("THREE.Line3: .closestPointToPoint() target is now required"),c=new n);return this.delta(c).multiplyScalar(a).add(this.start)},applyMatrix4:function(a){this.start.applyMatrix4(a); +this.end.applyMatrix4(a);return this},equals:function(a){return a.start.equals(this.start)&&a.end.equals(this.end)}});ld.prototype=Object.create(D.prototype);ld.prototype.constructor=ld;ld.prototype.isImmediateRenderObject=!0;md.prototype=Object.create(S.prototype);md.prototype.constructor=md;md.prototype.update=function(){var a=new n,b=new n,c=new da;return function(){var d=["a","b","c"];this.object.updateMatrixWorld(!0);c.getNormalMatrix(this.object.matrixWorld);var e=this.object.matrixWorld,f= +this.geometry.attributes.position,g=this.object.geometry;if(g&&g.isGeometry)for(var h=g.vertices,k=g.faces,l=g=0,n=k.length;lMath.abs(b)&&(b=1E-8);this.scale.set(.5*this.size,.5*this.size,b);this.children[0].material.side=0>b?1:0;this.lookAt(this.plane.normal);D.prototype.updateMatrixWorld.call(this,a)};var Td,De;bb.prototype= +Object.create(D.prototype);bb.prototype.constructor=bb;bb.prototype.setDirection=function(){var a=new n,b;return function(c){.99999c.y?this.quaternion.set(1,0,0,0):(a.set(c.z,0,-c.x).normalize(),b=Math.acos(c.y),this.quaternion.setFromAxisAngle(a,b))}}();bb.prototype.setLength=function(a,b,c){void 0===b&&(b=.2*a);void 0===c&&(c=.2*b);this.line.scale.set(1,Math.max(0,a-b),1);this.line.updateMatrix();this.cone.scale.set(c,b,c);this.cone.position.y=a;this.cone.updateMatrix()}; +bb.prototype.setColor=function(a){this.line.material.color.copy(a);this.cone.material.color.copy(a)};bb.prototype.copy=function(a){D.prototype.copy.call(this,a,!1);this.line.copy(a.line);this.cone.copy(a.cone);return this};bb.prototype.clone=function(){return(new this.constructor).copy(this)};sd.prototype=Object.create(S.prototype);sd.prototype.constructor=sd;J.create=function(a,b){console.log("THREE.Curve.create() has been deprecated");a.prototype=Object.create(J.prototype);a.prototype.constructor= +a;a.prototype.getPoint=b;return a};Object.assign($a.prototype,{createPointsGeometry:function(a){console.warn("THREE.CurvePath: .createPointsGeometry() has been removed. Use new THREE.Geometry().setFromPoints( points ) instead.");a=this.getPoints(a);return this.createGeometry(a)},createSpacedPointsGeometry:function(a){console.warn("THREE.CurvePath: .createSpacedPointsGeometry() has been removed. Use new THREE.Geometry().setFromPoints( points ) instead.");a=this.getSpacedPoints(a);return this.createGeometry(a)}, +createGeometry:function(a){console.warn("THREE.CurvePath: .createGeometry() has been removed. Use new THREE.Geometry().setFromPoints( points ) instead.");for(var b=new Q,c=0,d=a.length;c

- + @@ -46,8 +46,9 @@ function initParticles() { particleGroup = new SPE.Group({ texture: { - value: THREE.ImageUtils.loadTexture('./img/smokeparticle.png') - } + value: THREE.TextureLoader().load('./img/smokeparticle.png') + }, + maxParticleCount: 3000 }); emitter = new SPE.Emitter({ diff --git a/examples/multipleEmitters.html b/examples/multipleEmitters.html index 2c5d88d..36e9816 100644 --- a/examples/multipleEmitters.html +++ b/examples/multipleEmitters.html @@ -7,7 +7,7 @@

- + @@ -53,8 +53,9 @@ function initParticles() { particleGroup = new SPE.Group({ texture: { - value: THREE.ImageUtils.loadTexture('./img/smokeparticle.png'), - } + value: THREE.TextureLoader().load('./img/smokeparticle.png'), + }, + maxParticleCount: 3000 }); for( var i = 0; i < numEmitters; ++i ) { diff --git a/examples/orbit.html b/examples/orbit.html index f814e67..ad703d8 100644 --- a/examples/orbit.html +++ b/examples/orbit.html @@ -5,7 +5,7 @@ - + @@ -41,8 +41,9 @@ function initParticles() { particleGroup = new SPE.Group({ texture: { - value: THREE.ImageUtils.loadTexture('./img/smokeparticle.png') - } + value: THREE.TextureLoader().load('./img/smokeparticle.png') + }, + maxParticleCount: 3000 }); // General distributions. diff --git a/examples/pool.html b/examples/pool.html index 8347411..fd40146 100644 --- a/examples/pool.html +++ b/examples/pool.html @@ -7,7 +7,7 @@

Click mouse or press any key to trigger an explosion.

- + @@ -81,9 +81,10 @@ function initParticles() { particleGroup = new SPE.Group({ texture: { - value: THREE.ImageUtils.loadTexture('./img/smokeparticle.png') + value: THREE.TextureLoader().load('./img/smokeparticle.png') }, - blending: THREE.AdditiveBlending + blending: THREE.AdditiveBlending, + maxParticleCount: 3000 }); particleGroup.addPool( 10, emitterSettings, false ); diff --git a/examples/rotation.html b/examples/rotation.html index 5e92fea..ca0b0e5 100644 --- a/examples/rotation.html +++ b/examples/rotation.html @@ -5,7 +5,7 @@ - + @@ -40,8 +40,9 @@ function initParticles() { particleGroup = new SPE.Group({ texture: { - value: THREE.ImageUtils.loadTexture('./img/smokeparticle.png') - } + value: THREE.TextureLoader().load('./img/smokeparticle.png') + }, + maxParticleCount: 3000 }); // General distributions. diff --git a/examples/runtimeChanging.html b/examples/runtimeChanging.html index e573a63..a5035fe 100644 --- a/examples/runtimeChanging.html +++ b/examples/runtimeChanging.html @@ -18,7 +18,7 @@ - + @@ -32,7 +32,7 @@ group = new SPE.Group( { // Possible API for animated textures... texture: { - value: THREE.ImageUtils.loadTexture( './img/sprite-flame2.jpg' ), + value: THREE.TextureLoader().load( './img/sprite-flame2.jpg' ), frames: new THREE.Vector2( 8, 4 ), // frameCount: 8, loop: 2 diff --git a/package-lock.json b/package-lock.json index 6157e6b..fc9e733 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,1472 +1,1378 @@ { "name": "shader-particle-engine", - "version": "1.0.6", - "lockfileVersion": 1, + "version": "1.1.0", + "lockfileVersion": 3, "requires": true, - "dependencies": { - "@babel/parser": { - "version": "7.10.3", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.10.3.tgz", - "integrity": "sha512-oJtNJCMFdIMwXGmx+KxuaD7i3b8uS7TTFYW/FNG2BT8m+fmGHoiPYoH0Pe3gya07WuFmM5FCDIr1x0irkD/hyA==", - "dev": true - }, - "abbrev": { + "packages": { + "": { + "name": "shader-particle-engine", + "version": "1.1.0", + "license": "MIT", + "dependencies": { + "three": "^0.173.0" + }, + "devDependencies": { + "grunt": "^1.6.1", + "grunt-contrib-concat": "^2.1.0", + "grunt-contrib-uglify": "^5.2.1" + } + }, + "node_modules/abbrev": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/abbrev/-/abbrev-1.1.1.tgz", "integrity": "sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q==", - "dev": true + "dev": true, + "license": "ISC" }, - "align-text": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/align-text/-/align-text-0.1.4.tgz", - "integrity": "sha1-DNkKVhCT810KmSVsIrcGlDP60Rc=", + "node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", "dev": true, - "requires": { - "kind-of": "^3.0.2", - "longest": "^1.0.1", - "repeat-string": "^1.5.2" + "license": "MIT", + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" } }, - "amdefine": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/amdefine/-/amdefine-1.0.1.tgz", - "integrity": "sha1-SlKCrBZHKek2Gbz9OtFR+BfOkfU=", - "dev": true + "node_modules/argparse": { + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", + "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", + "dev": true, + "license": "MIT", + "dependencies": { + "sprintf-js": "~1.0.2" + } }, - "ansi-regex": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-0.2.1.tgz", - "integrity": "sha1-DY6UaWej2BQ/k+JOKYUl/BsiNfk=", - "dev": true + "node_modules/array-each": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/array-each/-/array-each-1.0.1.tgz", + "integrity": "sha512-zHjL5SZa68hkKHBFBK6DJCTtr9sfTCPCaph/L7tMSLcTFgy+zX7E+6q5UArbtOtMBCtxdICpfTCspRse+ywyXA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } }, - "ansi-styles": { + "node_modules/array-slice": { "version": "1.1.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-1.1.0.tgz", - "integrity": "sha1-6uy/Zs1waIJ2Cy9GkVgrj1XXp94=", - "dev": true + "resolved": "https://registry.npmjs.org/array-slice/-/array-slice-1.1.0.tgz", + "integrity": "sha512-B1qMD3RBP7O8o0H2KbrXDyB0IccejMF15+87Lvlor12ONPRHP6gTjXMNkt/d3ZuOGbAe66hFmaCfECI24Ufp6w==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/async": { + "version": "3.2.6", + "resolved": "https://registry.npmjs.org/async/-/async-3.2.6.tgz", + "integrity": "sha512-htCUDlxyyCLMgaM3xXg0C0LW2xqfuQ6p05pCEIsXuyQ+a1koYKTuBMzRNwmybfLgvJDMd0r1LTn4+E0Ti6C2AA==", + "dev": true, + "license": "MIT" + }, + "node_modules/balanced-match": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", + "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", + "dev": true, + "license": "MIT" + }, + "node_modules/brace-expansion": { + "version": "1.1.11", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", + "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "dev": true, + "license": "MIT", + "dependencies": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } }, - "argparse": { - "version": "0.1.16", - "resolved": "https://registry.npmjs.org/argparse/-/argparse-0.1.16.tgz", - "integrity": "sha1-z9AeD7uj1srtBJ+9dY1A9lGW9Xw=", + "node_modules/braces": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.3.tgz", + "integrity": "sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==", "dev": true, - "requires": { - "underscore": "~1.7.0", - "underscore.string": "~2.4.0" + "license": "MIT", + "dependencies": { + "fill-range": "^7.1.1" }, + "engines": { + "node": ">=8" + } + }, + "node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "license": "MIT", "dependencies": { - "underscore.string": { - "version": "2.4.0", - "resolved": "https://registry.npmjs.org/underscore.string/-/underscore.string-2.4.0.tgz", - "integrity": "sha1-jN2PusTi0uoefi6Al8QvRCKA+Fs=", - "dev": true - } + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" } }, - "array-find-index": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/array-find-index/-/array-find-index-1.0.2.tgz", - "integrity": "sha1-3wEKoSh+Fku9pvlyOwqWoexBh6E=", - "dev": true + "node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } }, - "async": { - "version": "0.1.22", - "resolved": "https://registry.npmjs.org/async/-/async-0.1.22.tgz", - "integrity": "sha1-D8GqoIig4+8Ovi2IMbqw3PiEUGE=", - "dev": true + "node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true, + "license": "MIT" }, - "at-least-node": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/at-least-node/-/at-least-node-1.0.0.tgz", - "integrity": "sha512-+q/t7Ekv1EDY2l6Gda6LLiX14rU9TV20Wa3ofeQmwPFZbOMo9DXrLbOjFaaclkXKWidIaopwAObQDqwWtGUjqg==", - "dev": true + "node_modules/colors": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/colors/-/colors-1.1.2.tgz", + "integrity": "sha512-ENwblkFQpqqia6b++zLD/KUWafYlVY/UNnAp7oz7LY7E924wmpye416wBOmvv/HMWzl8gL1kJlfvId/1Dg176w==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.1.90" + } }, - "bluebird": { - "version": "3.7.2", - "resolved": "https://registry.npmjs.org/bluebird/-/bluebird-3.7.2.tgz", - "integrity": "sha512-XpNj6GDQzdfW+r2Wnn7xiSAd7TM3jzkxGXBGTtWKuSXv1xUV+azxAm8jdWZN06QTQk+2N2XB9jRDkvbmQmcRtg==", - "dev": true + "node_modules/concat-map": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", + "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==", + "dev": true, + "license": "MIT" }, - "browserify-zlib": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/browserify-zlib/-/browserify-zlib-0.1.4.tgz", - "integrity": "sha1-uzX4pRn2AOD6a4SFJByXnQFB+y0=", + "node_modules/dateformat": { + "version": "4.6.3", + "resolved": "https://registry.npmjs.org/dateformat/-/dateformat-4.6.3.tgz", + "integrity": "sha512-2P0p0pFGzHS5EMnhdxQi7aJN+iMheud0UhG4dlE1DLAlvL8JHjJJTX/CSm4JXwV0Ka5nGk3zC5mcb5bUQUxxMA==", "dev": true, - "requires": { - "pako": "~0.2.0" + "license": "MIT", + "engines": { + "node": "*" } }, - "buffer-from": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.1.tgz", - "integrity": "sha512-MQcXEUbCKtEo7bhqEs6560Hyd4XaovZlO/k9V3hjVUF/zwW7KBVdSK4gIt/bzwS9MbR5qob+F5jusZsb0YQK2A==", - "dev": true + "node_modules/detect-file": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/detect-file/-/detect-file-1.0.0.tgz", + "integrity": "sha512-DtCOLG98P007x7wiiOmfI0fi3eIKyWiLTGJ2MDnVi/E04lWGbf+JzrRHMm0rgIIZJGtHpKpbVgLWHrv8xXpc3Q==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } }, - "camelcase": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-2.1.1.tgz", - "integrity": "sha1-fB0W1nmhu+WcoCys7PsBHiAfWh8=", - "dev": true + "node_modules/duplexer": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/duplexer/-/duplexer-0.1.2.tgz", + "integrity": "sha512-jtD6YG370ZCIi/9GTaJKQxWTZD045+4R4hTk/x1UyoqadyJ9x9CgSi1RlVDQF8U2sxLLSnFkCaMihqljHIWgMg==", + "dev": true, + "license": "MIT" }, - "camelcase-keys": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/camelcase-keys/-/camelcase-keys-2.1.0.tgz", - "integrity": "sha1-MIvur/3ygRkFHvodkyITyRuPkuc=", + "node_modules/escape-string-regexp": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", + "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==", "dev": true, - "requires": { - "camelcase": "^2.0.0", - "map-obj": "^1.0.0" + "license": "MIT", + "engines": { + "node": ">=0.8.0" } }, - "catharsis": { - "version": "0.8.11", - "resolved": "https://registry.npmjs.org/catharsis/-/catharsis-0.8.11.tgz", - "integrity": "sha512-a+xUyMV7hD1BrDQA/3iPV7oc+6W26BgVJO05PGEoatMyIuPScQKsde6i3YorWX1qs+AZjnJ18NqdKoCtKiNh1g==", + "node_modules/esprima": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz", + "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==", "dev": true, - "requires": { - "lodash": "^4.17.14" + "license": "BSD-2-Clause", + "bin": { + "esparse": "bin/esparse.js", + "esvalidate": "bin/esvalidate.js" }, - "dependencies": { - "lodash": { - "version": "4.17.15", - "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.15.tgz", - "integrity": "sha512-8xOcRHvCjnocdS5cpwXQXVzmmh5e5+saE2QGoeQmbKmRS6J3VQppPOIt0MnmE+4xlZoumy0GPG0D0MVIQbNA1A==", - "dev": true - } + "engines": { + "node": ">=4" } }, - "center-align": { - "version": "0.1.3", - "resolved": "https://registry.npmjs.org/center-align/-/center-align-0.1.3.tgz", - "integrity": "sha1-qg0yYptu6XIgBBHL1EYckHvCt60=", + "node_modules/eventemitter2": { + "version": "0.4.14", + "resolved": "https://registry.npmjs.org/eventemitter2/-/eventemitter2-0.4.14.tgz", + "integrity": "sha512-K7J4xq5xAD5jHsGM5ReWXRTFa3JRGofHiMcVgQ8PRwgWxzjHpMWCIzsmyf60+mh8KLsqYPcjUMa0AC4hd6lPyQ==", "dev": true, - "requires": { - "align-text": "^0.1.3", - "lazy-cache": "^1.0.3" + "license": "MIT" + }, + "node_modules/exit": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/exit/-/exit-0.1.2.tgz", + "integrity": "sha512-Zk/eNKV2zbjpKzrsQ+n1G6poVbErQxJ0LBOJXaKZ1EViLzH+hrLu9cdXI4zw9dBQJslwBEpbQ2P1oS7nDxs6jQ==", + "dev": true, + "engines": { + "node": ">= 0.8.0" } }, - "chalk": { - "version": "0.5.1", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-0.5.1.tgz", - "integrity": "sha1-Zjs6ZItotV0EaQ1JFnqoN4WPIXQ=", + "node_modules/expand-tilde": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/expand-tilde/-/expand-tilde-2.0.2.tgz", + "integrity": "sha512-A5EmesHW6rfnZ9ysHQjPdJRni0SRar0tjtG5MNtm9n5TUvsYU8oozprtRD4AqHxcZWWlVuAmQo2nWKfN9oyjTw==", "dev": true, - "requires": { - "ansi-styles": "^1.1.0", - "escape-string-regexp": "^1.0.0", - "has-ansi": "^0.1.0", - "strip-ansi": "^0.3.0", - "supports-color": "^0.2.0" + "license": "MIT", + "dependencies": { + "homedir-polyfill": "^1.0.1" + }, + "engines": { + "node": ">=0.10.0" } }, - "cliui": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/cliui/-/cliui-2.1.0.tgz", - "integrity": "sha1-S0dXYP+AJkx2LDoXGQMukcf+oNE=", - "dev": true, - "requires": { - "center-align": "^0.1.1", - "right-align": "^0.1.1", - "wordwrap": "0.0.2" - } - }, - "coffee-script": { - "version": "1.3.3", - "resolved": "https://registry.npmjs.org/coffee-script/-/coffee-script-1.3.3.tgz", - "integrity": "sha1-FQ1rTLUiiUNp7+1qIQHCC8f0pPQ=", - "dev": true - }, - "colors": { - "version": "0.6.2", - "resolved": "https://registry.npmjs.org/colors/-/colors-0.6.2.tgz", - "integrity": "sha1-JCP+ZnisDF2uiFLl0OW+CMmXq8w=", - "dev": true - }, - "commander": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/commander/-/commander-5.1.0.tgz", - "integrity": "sha512-P0CysNDQ7rtVw4QIQtm+MRxV66vKFSvlsQvGYXZWR3qFU0jlMKHZZZgw8e+8DSah4UDKMqnknRDQz+xuQXQ/Zg==", - "dev": true - }, - "concat-stream": { - "version": "1.6.2", - "resolved": "https://registry.npmjs.org/concat-stream/-/concat-stream-1.6.2.tgz", - "integrity": "sha512-27HBghJxjiZtIk3Ycvn/4kbJk/1uZuJFfuPEns6LaEvpvG1f0hTea8lilrouyo9mVc2GWdcEZ8OLoGmSADlrCw==", - "dev": true, - "requires": { - "buffer-from": "^1.0.0", - "inherits": "^2.0.3", - "readable-stream": "^2.2.2", - "typedarray": "^0.0.6" - } - }, - "core-util-is": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz", - "integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=", - "dev": true + "node_modules/extend": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz", + "integrity": "sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==", + "dev": true, + "license": "MIT" }, - "currently-unhandled": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/currently-unhandled/-/currently-unhandled-0.4.1.tgz", - "integrity": "sha1-mI3zP+qxke95mmE2nddsF635V+o=", + "node_modules/figures": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/figures/-/figures-3.2.0.tgz", + "integrity": "sha512-yaduQFRKLXYOGgEn6AZau90j3ggSOyiqXU0F9JZfeXYhNa+Jk4X+s45A2zg5jns87GAFa34BBm2kXw4XpNcbdg==", "dev": true, - "requires": { - "array-find-index": "^1.0.1" + "license": "MIT", + "dependencies": { + "escape-string-regexp": "^1.0.5" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "dateformat": { - "version": "1.0.2-1.2.3", - "resolved": "https://registry.npmjs.org/dateformat/-/dateformat-1.0.2-1.2.3.tgz", - "integrity": "sha1-sCIMAt6YYXQztyhRz0fePfLNvuk=", - "dev": true + "node_modules/fill-range": { + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.1.1.tgz", + "integrity": "sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==", + "dev": true, + "license": "MIT", + "dependencies": { + "to-regex-range": "^5.0.1" + }, + "engines": { + "node": ">=8" + } }, - "decamelize": { + "node_modules/findup-sync": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/findup-sync/-/findup-sync-5.0.0.tgz", + "integrity": "sha512-MzwXju70AuyflbgeOhzvQWAvvQdo1XL0A9bVvlXsYcFEBM87WR4OakL4OfZq+QRmr+duJubio+UtNQCPsVESzQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "detect-file": "^1.0.0", + "is-glob": "^4.0.3", + "micromatch": "^4.0.4", + "resolve-dir": "^1.0.1" + }, + "engines": { + "node": ">= 10.13.0" + } + }, + "node_modules/fined": { "version": "1.2.0", - "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz", - "integrity": "sha1-9lNNFRSCabIDUue+4m9QH5oZEpA=", - "dev": true + "resolved": "https://registry.npmjs.org/fined/-/fined-1.2.0.tgz", + "integrity": "sha512-ZYDqPLGxDkDhDZBjZBb+oD1+j0rA4E0pXY50eplAAOPg2N/gUBSSk5IM1/QhPfyVo19lJ+CvXpqfvk+b2p/8Ng==", + "dev": true, + "license": "MIT", + "dependencies": { + "expand-tilde": "^2.0.2", + "is-plain-object": "^2.0.3", + "object.defaults": "^1.1.0", + "object.pick": "^1.2.0", + "parse-filepath": "^1.0.1" + }, + "engines": { + "node": ">= 0.10" + } }, - "docco": { - "version": "0.6.3", - "resolved": "https://registry.npmjs.org/docco/-/docco-0.6.3.tgz", - "integrity": "sha1-xHtYI9eVY9b8Or1J895ImG5VIu4=", + "node_modules/flagged-respawn": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/flagged-respawn/-/flagged-respawn-1.0.1.tgz", + "integrity": "sha512-lNaHNVymajmk0OJMBn8fVUAU1BtDeKIqKoVhk4xAALB57aALg6b4W0MfJ/cUE0g9YBXy5XhSlPIpYIJ7HaY/3Q==", "dev": true, - "requires": { - "commander": ">= 0.5.2", - "fs-extra": ">= 0.6.0", - "highlight.js": ">= 8.0.x", - "marked": ">= 0.2.7", - "underscore": ">= 1.0.0" + "license": "MIT", + "engines": { + "node": ">= 0.10" } }, - "entities": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/entities/-/entities-2.0.3.tgz", - "integrity": "sha512-MyoZ0jgnLvB2X3Lg5HqpFmn1kybDiIfEQmKzTb5apr51Rb+T3KdmMiqa70T+bhGnyv7bQ6WMj2QMHpGMmlrUYQ==", - "dev": true + "node_modules/for-in": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/for-in/-/for-in-1.0.2.tgz", + "integrity": "sha512-7EwmXrOjyL+ChxMhmG5lnW9MPt1aIeZEwKhQzoBUdTV0N3zuwWDZYVJatDvZ2OyzPUvdIAZDsCetk3coyMfcnQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } }, - "error-ex": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz", - "integrity": "sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==", + "node_modules/for-own": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/for-own/-/for-own-1.0.0.tgz", + "integrity": "sha512-0OABksIGrxKK8K4kynWkQ7y1zounQxP+CWnyclVwj81KW3vlLlGUx57DKGcP/LH216GzqnstnPocF16Nxs0Ycg==", "dev": true, - "requires": { - "is-arrayish": "^0.2.1" + "license": "MIT", + "dependencies": { + "for-in": "^1.0.1" + }, + "engines": { + "node": ">=0.10.0" } }, - "escape-string-regexp": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", - "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=", - "dev": true + "node_modules/fs.realpath": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", + "integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==", + "dev": true, + "license": "ISC" }, - "esprima": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/esprima/-/esprima-1.0.4.tgz", - "integrity": "sha1-n1V+CPw7TSbs6d00+Pv0drYlha0=", - "dev": true + "node_modules/function-bind": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.2.tgz", + "integrity": "sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==", + "dev": true, + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/ljharb" + } }, - "eventemitter2": { - "version": "0.4.14", - "resolved": "https://registry.npmjs.org/eventemitter2/-/eventemitter2-0.4.14.tgz", - "integrity": "sha1-j2G3XN4BKy6esoTUVFWDtWQ7Yas=", - "dev": true + "node_modules/getobject": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/getobject/-/getobject-1.0.2.tgz", + "integrity": "sha512-2zblDBaFcb3rB4rF77XVnuINOE2h2k/OnqXAiy0IrTxUfV1iFp3la33oAQVY9pCpWU268WFYVt2t71hlMuLsOg==", + "dev": true, + "engines": { + "node": ">=10" + } }, - "exit": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/exit/-/exit-0.1.2.tgz", - "integrity": "sha1-BjJjj42HfMghB9MKD/8aF8uhzQw=", - "dev": true + "node_modules/glob": { + "version": "7.1.7", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.7.tgz", + "integrity": "sha512-OvD9ENzPLbegENnYP5UUfJIirTg4+XwMWGaQfQTY0JenxNvvIKP3U3/tAQSPIu/lHxXYSZmpXlUHeqAIdKzBLQ==", + "deprecated": "Glob versions prior to v9 are no longer supported", + "dev": true, + "license": "ISC", + "dependencies": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.0.4", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + }, + "engines": { + "node": "*" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } }, - "figures": { - "version": "1.7.0", - "resolved": "https://registry.npmjs.org/figures/-/figures-1.7.0.tgz", - "integrity": "sha1-y+Hjr/zxzUS4DK3+0o3Hk6lwHS4=", + "node_modules/global-modules": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/global-modules/-/global-modules-1.0.0.tgz", + "integrity": "sha512-sKzpEkf11GpOFuw0Zzjzmt4B4UZwjOcG757PPvrfhxcLFbq0wpsgpOqxpxtxFiCG4DtG93M6XRVbF2oGdev7bg==", "dev": true, - "requires": { - "escape-string-regexp": "^1.0.5", - "object-assign": "^4.1.0" + "license": "MIT", + "dependencies": { + "global-prefix": "^1.0.1", + "is-windows": "^1.0.1", + "resolve-dir": "^1.0.0" + }, + "engines": { + "node": ">=0.10.0" } }, - "find-up": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-1.1.2.tgz", - "integrity": "sha1-ay6YIrGizgpgq2TWEOzK1TyyTQ8=", + "node_modules/global-prefix": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/global-prefix/-/global-prefix-1.0.2.tgz", + "integrity": "sha512-5lsx1NUDHtSjfg0eHlmYvZKv8/nVqX4ckFbM+FrGcQ+04KWcWFo9P5MxPZYSzUvyzmdTbI7Eix8Q4IbELDqzKg==", "dev": true, - "requires": { - "path-exists": "^2.0.0", - "pinkie-promise": "^2.0.0" + "license": "MIT", + "dependencies": { + "expand-tilde": "^2.0.2", + "homedir-polyfill": "^1.0.1", + "ini": "^1.3.4", + "is-windows": "^1.0.1", + "which": "^1.2.14" + }, + "engines": { + "node": ">=0.10.0" } }, - "findup-sync": { - "version": "0.1.3", - "resolved": "https://registry.npmjs.org/findup-sync/-/findup-sync-0.1.3.tgz", - "integrity": "sha1-fz56l7gjksZTvwZYm9hRkOk8NoM=", + "node_modules/global-prefix/node_modules/which": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz", + "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==", "dev": true, - "requires": { - "glob": "~3.2.9", - "lodash": "~2.4.1" + "license": "ISC", + "dependencies": { + "isexe": "^2.0.0" }, + "bin": { + "which": "bin/which" + } + }, + "node_modules/grunt": { + "version": "1.6.1", + "resolved": "https://registry.npmjs.org/grunt/-/grunt-1.6.1.tgz", + "integrity": "sha512-/ABUy3gYWu5iBmrUSRBP97JLpQUm0GgVveDCp6t3yRNIoltIYw7rEj3g5y1o2PGPR2vfTRGa7WC/LZHLTXnEzA==", + "dev": true, + "license": "MIT", "dependencies": { - "glob": { - "version": "3.2.11", - "resolved": "https://registry.npmjs.org/glob/-/glob-3.2.11.tgz", - "integrity": "sha1-Spc/Y1uRkPcV0QmH1cAP0oFevj0=", - "dev": true, - "requires": { - "inherits": "2", - "minimatch": "0.3" - } - }, - "lodash": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/lodash/-/lodash-2.4.2.tgz", - "integrity": "sha1-+t2DS5aDBz2hebPq5tnA0VBT9z4=", - "dev": true - }, - "minimatch": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-0.3.0.tgz", - "integrity": "sha1-J12O2qxPG7MyZHIInnlJyDlGmd0=", - "dev": true, - "requires": { - "lru-cache": "2", - "sigmund": "~1.0.0" - } - } - } - }, - "fs-extra": { - "version": "9.0.1", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-9.0.1.tgz", - "integrity": "sha512-h2iAoN838FqAFJY2/qVpzFXy+EBxfVE220PalAqQLDVsFOHLJrZvut5puAbCdNv6WJk+B8ihI+k0c7JK5erwqQ==", - "dev": true, - "requires": { - "at-least-node": "^1.0.0", - "graceful-fs": "^4.2.0", - "jsonfile": "^6.0.1", - "universalify": "^1.0.0" + "dateformat": "~4.6.2", + "eventemitter2": "~0.4.13", + "exit": "~0.1.2", + "findup-sync": "~5.0.0", + "glob": "~7.1.6", + "grunt-cli": "~1.4.3", + "grunt-known-options": "~2.0.0", + "grunt-legacy-log": "~3.0.0", + "grunt-legacy-util": "~2.0.1", + "iconv-lite": "~0.6.3", + "js-yaml": "~3.14.0", + "minimatch": "~3.0.4", + "nopt": "~3.0.6" + }, + "bin": { + "grunt": "bin/grunt" }, + "engines": { + "node": ">=16" + } + }, + "node_modules/grunt-cli": { + "version": "1.4.3", + "resolved": "https://registry.npmjs.org/grunt-cli/-/grunt-cli-1.4.3.tgz", + "integrity": "sha512-9Dtx/AhVeB4LYzsViCjUQkd0Kw0McN2gYpdmGYKtE2a5Yt7v1Q+HYZVWhqXc/kGnxlMtqKDxSwotiGeFmkrCoQ==", + "dev": true, + "license": "MIT", "dependencies": { - "graceful-fs": { - "version": "4.2.4", - "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.4.tgz", - "integrity": "sha512-WjKPNJF79dtJAVniUlGGWHYGz2jWxT6VhN/4m1NdkbZ2nOsEF+cI1Edgql5zCRhs/VsQYRvrXctxktVXZUkixw==", - "dev": true - } + "grunt-known-options": "~2.0.0", + "interpret": "~1.1.0", + "liftup": "~3.0.1", + "nopt": "~4.0.1", + "v8flags": "~3.2.0" + }, + "bin": { + "grunt": "bin/grunt" + }, + "engines": { + "node": ">=10" } }, - "get-stdin": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/get-stdin/-/get-stdin-4.0.1.tgz", - "integrity": "sha1-uWjGsKBDhDJJAui/Gl3zJXmkUP4=", - "dev": true - }, - "getobject": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/getobject/-/getobject-0.1.0.tgz", - "integrity": "sha1-BHpEl4n6Fg0Bj1SG7ZEyC27HiFw=", - "dev": true - }, - "glob": { - "version": "3.1.21", - "resolved": "https://registry.npmjs.org/glob/-/glob-3.1.21.tgz", - "integrity": "sha1-0p4KBV3qUTj00H7UDomC6DwgZs0=", - "dev": true, - "requires": { - "graceful-fs": "~1.2.0", - "inherits": "1", - "minimatch": "~0.2.11" + "node_modules/grunt-cli/node_modules/nopt": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/nopt/-/nopt-4.0.3.tgz", + "integrity": "sha512-CvaGwVMztSMJLOeXPrez7fyfObdZqNUK1cPAEzLHrTybIua9pMdmmPR5YwtfNftIOMv3DPUhFaxsZMNTQO20Kg==", + "dev": true, + "license": "ISC", + "dependencies": { + "abbrev": "1", + "osenv": "^0.1.4" }, + "bin": { + "nopt": "bin/nopt.js" + } + }, + "node_modules/grunt-contrib-concat": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/grunt-contrib-concat/-/grunt-contrib-concat-2.1.0.tgz", + "integrity": "sha512-Vnl95JIOxfhEN7bnYIlCgQz41kkbi7tsZ/9a4usZmxNxi1S2YAIOy8ysFmO8u4MN26Apal1O106BwARdaNxXQw==", + "dev": true, + "license": "MIT", "dependencies": { - "inherits": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/inherits/-/inherits-1.0.2.tgz", - "integrity": "sha1-ykMJ2t7mtUzAuNJH6NfHoJdb3Js=", - "dev": true - } - } - }, - "graceful-fs": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-1.2.3.tgz", - "integrity": "sha1-FaSAaldUfLLS2/J/QuiajDRRs2Q=", - "dev": true - }, - "grunt": { - "version": "0.4.5", - "resolved": "https://registry.npmjs.org/grunt/-/grunt-0.4.5.tgz", - "integrity": "sha1-VpN81RlDJK3/bSB2MYMqnWuk5/A=", - "dev": true, - "requires": { - "async": "~0.1.22", - "coffee-script": "~1.3.3", - "colors": "~0.6.2", - "dateformat": "1.0.2-1.2.3", - "eventemitter2": "~0.4.13", - "exit": "~0.1.1", - "findup-sync": "~0.1.2", - "getobject": "~0.1.0", - "glob": "~3.1.21", - "grunt-legacy-log": "~0.1.0", - "grunt-legacy-util": "~0.2.0", - "hooker": "~0.2.3", - "iconv-lite": "~0.2.11", - "js-yaml": "~2.0.5", - "lodash": "~0.9.2", - "minimatch": "~0.2.12", - "nopt": "~1.0.10", - "rimraf": "~2.2.8", - "underscore.string": "~2.2.1", - "which": "~1.0.5" - } - }, - "grunt-contrib-concat": { - "version": "0.5.1", - "resolved": "https://registry.npmjs.org/grunt-contrib-concat/-/grunt-contrib-concat-0.5.1.tgz", - "integrity": "sha1-lTxu/f39LBB6uchQd/LUsk0xzUk=", - "dev": true, - "requires": { - "chalk": "^0.5.1", - "source-map": "^0.3.0" - } - }, - "grunt-contrib-uglify": { - "version": "0.9.2", - "resolved": "https://registry.npmjs.org/grunt-contrib-uglify/-/grunt-contrib-uglify-0.9.2.tgz", - "integrity": "sha1-GmHG8hJBDkq7T3yJFTcXsQFWAmA=", - "dev": true, - "requires": { - "chalk": "^1.0.0", - "lodash": "^3.2.0", - "maxmin": "^1.0.0", - "uglify-js": "^2.4.24", - "uri-path": "0.0.2" + "chalk": "^4.1.2", + "source-map": "^0.5.3" }, + "engines": { + "node": ">=0.12.0" + }, + "peerDependencies": { + "grunt": ">=1.4.1" + } + }, + "node_modules/grunt-contrib-uglify": { + "version": "5.2.2", + "resolved": "https://registry.npmjs.org/grunt-contrib-uglify/-/grunt-contrib-uglify-5.2.2.tgz", + "integrity": "sha512-ITxiWxrjjP+RZu/aJ5GLvdele+sxlznh+6fK9Qckio5ma8f7Iv8woZjRkGfafvpuygxNefOJNc+hfjjBayRn2Q==", + "dev": true, + "license": "MIT", "dependencies": { - "ansi-regex": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", - "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=", - "dev": true - }, - "ansi-styles": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz", - "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=", - "dev": true - }, - "chalk": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", - "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=", - "dev": true, - "requires": { - "ansi-styles": "^2.2.1", - "escape-string-regexp": "^1.0.2", - "has-ansi": "^2.0.0", - "strip-ansi": "^3.0.0", - "supports-color": "^2.0.0" - } - }, - "has-ansi": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/has-ansi/-/has-ansi-2.0.0.tgz", - "integrity": "sha1-NPUEnOHs3ysGSa8+8k5F7TVBbZE=", - "dev": true, - "requires": { - "ansi-regex": "^2.0.0" - } - }, - "lodash": { - "version": "3.10.1", - "resolved": "https://registry.npmjs.org/lodash/-/lodash-3.10.1.tgz", - "integrity": "sha1-W/Rejkm6QYnhfUgnid/RW9FAt7Y=", - "dev": true - }, - "strip-ansi": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", - "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", - "dev": true, - "requires": { - "ansi-regex": "^2.0.0" - } - }, - "supports-color": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz", - "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=", - "dev": true - } - } - }, - "grunt-docco2": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/grunt-docco2/-/grunt-docco2-0.2.1.tgz", - "integrity": "sha1-ZghyYavBkcjofI77/LeIEr/krMs=", - "dev": true, - "requires": { - "docco": "~0.6.3" - } - }, - "grunt-jsdoc": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/grunt-jsdoc/-/grunt-jsdoc-1.1.0.tgz", - "integrity": "sha1-S87+YFh6ZGpbcg/pq/lMxIh/6FQ=", + "chalk": "^4.1.2", + "maxmin": "^3.0.0", + "uglify-js": "^3.16.1", + "uri-path": "^1.0.0" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/grunt-known-options": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/grunt-known-options/-/grunt-known-options-2.0.0.tgz", + "integrity": "sha512-GD7cTz0I4SAede1/+pAbmJRG44zFLPipVtdL9o3vqx9IEyb7b4/Y3s7r6ofI3CchR5GvYJ+8buCSioDv5dQLiA==", "dev": true, - "requires": { - "jsdoc": "^3.4.0" + "license": "MIT", + "engines": { + "node": ">=0.10.0" } }, - "grunt-legacy-log": { - "version": "0.1.3", - "resolved": "https://registry.npmjs.org/grunt-legacy-log/-/grunt-legacy-log-0.1.3.tgz", - "integrity": "sha1-7ClCboAwIa9ZAp+H0vnNczWgVTE=", + "node_modules/grunt-legacy-log": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/grunt-legacy-log/-/grunt-legacy-log-3.0.0.tgz", + "integrity": "sha512-GHZQzZmhyq0u3hr7aHW4qUH0xDzwp2YXldLPZTCjlOeGscAOWWPftZG3XioW8MasGp+OBRIu39LFx14SLjXRcA==", "dev": true, - "requires": { - "colors": "~0.6.2", - "grunt-legacy-log-utils": "~0.1.1", + "license": "MIT", + "dependencies": { + "colors": "~1.1.2", + "grunt-legacy-log-utils": "~2.1.0", "hooker": "~0.2.3", - "lodash": "~2.4.1", - "underscore.string": "~2.3.3" + "lodash": "~4.17.19" }, - "dependencies": { - "lodash": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/lodash/-/lodash-2.4.2.tgz", - "integrity": "sha1-+t2DS5aDBz2hebPq5tnA0VBT9z4=", - "dev": true - }, - "underscore.string": { - "version": "2.3.3", - "resolved": "https://registry.npmjs.org/underscore.string/-/underscore.string-2.3.3.tgz", - "integrity": "sha1-ccCL9rQosRM/N+ePo6Icgvcymw0=", - "dev": true - } - } - }, - "grunt-legacy-log-utils": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/grunt-legacy-log-utils/-/grunt-legacy-log-utils-0.1.1.tgz", - "integrity": "sha1-wHBrndkGThFvNvI/5OawSGcsD34=", + "engines": { + "node": ">= 0.10.0" + } + }, + "node_modules/grunt-legacy-log-utils": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/grunt-legacy-log-utils/-/grunt-legacy-log-utils-2.1.0.tgz", + "integrity": "sha512-lwquaPXJtKQk0rUM1IQAop5noEpwFqOXasVoedLeNzaibf/OPWjKYvvdqnEHNmU+0T0CaReAXIbGo747ZD+Aaw==", "dev": true, - "requires": { - "colors": "~0.6.2", - "lodash": "~2.4.1", - "underscore.string": "~2.3.3" + "license": "MIT", + "dependencies": { + "chalk": "~4.1.0", + "lodash": "~4.17.19" }, + "engines": { + "node": ">=10" + } + }, + "node_modules/grunt-legacy-util": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/grunt-legacy-util/-/grunt-legacy-util-2.0.1.tgz", + "integrity": "sha512-2bQiD4fzXqX8rhNdXkAywCadeqiPiay0oQny77wA2F3WF4grPJXCvAcyoWUJV+po/b15glGkxuSiQCK299UC2w==", + "dev": true, + "license": "MIT", "dependencies": { - "lodash": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/lodash/-/lodash-2.4.2.tgz", - "integrity": "sha1-+t2DS5aDBz2hebPq5tnA0VBT9z4=", - "dev": true - }, - "underscore.string": { - "version": "2.3.3", - "resolved": "https://registry.npmjs.org/underscore.string/-/underscore.string-2.3.3.tgz", - "integrity": "sha1-ccCL9rQosRM/N+ePo6Icgvcymw0=", - "dev": true - } - } - }, - "grunt-legacy-util": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/grunt-legacy-util/-/grunt-legacy-util-0.2.0.tgz", - "integrity": "sha1-kzJIhNv343qf98Am3/RR2UqeVUs=", - "dev": true, - "requires": { - "async": "~0.1.22", - "exit": "~0.1.1", - "getobject": "~0.1.0", + "async": "~3.2.0", + "exit": "~0.1.2", + "getobject": "~1.0.0", "hooker": "~0.2.3", - "lodash": "~0.9.2", - "underscore.string": "~2.2.1", - "which": "~1.0.5" + "lodash": "~4.17.21", + "underscore.string": "~3.3.5", + "which": "~2.0.2" + }, + "engines": { + "node": ">=10" } }, - "gzip-size": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/gzip-size/-/gzip-size-1.0.0.tgz", - "integrity": "sha1-Zs+LEBBHInuVus5uodoMF37Vwi8=", + "node_modules/gzip-size": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/gzip-size/-/gzip-size-5.1.1.tgz", + "integrity": "sha512-FNHi6mmoHvs1mxZAds4PpdCS6QG8B4C1krxJsMutgxl5t3+GlRTzzI3NEkifXx2pVsOvJdOGSmIgDhQ55FwdPA==", "dev": true, - "requires": { - "browserify-zlib": "^0.1.4", - "concat-stream": "^1.4.1" + "license": "MIT", + "dependencies": { + "duplexer": "^0.1.1", + "pify": "^4.0.1" + }, + "engines": { + "node": ">=6" } }, - "has-ansi": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/has-ansi/-/has-ansi-0.1.0.tgz", - "integrity": "sha1-hPJlqujA5qiKEtcCKJS3VoiUxi4=", + "node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", "dev": true, - "requires": { - "ansi-regex": "^0.2.0" + "license": "MIT", + "engines": { + "node": ">=8" } }, - "highlight.js": { - "version": "10.1.1", - "resolved": "https://registry.npmjs.org/highlight.js/-/highlight.js-10.1.1.tgz", - "integrity": "sha512-b4L09127uVa+9vkMgPpdUQP78ickGbHEQTWeBrQFTJZ4/n2aihWOGS0ZoUqAwjVmfjhq/C76HRzkqwZhK4sBbg==", - "dev": true + "node_modules/hasown": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.2.tgz", + "integrity": "sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "function-bind": "^1.1.2" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/homedir-polyfill": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/homedir-polyfill/-/homedir-polyfill-1.0.3.tgz", + "integrity": "sha512-eSmmWE5bZTK2Nou4g0AI3zZ9rswp7GRKoKXS1BLUkvPviOqs4YTN1djQIqrXy9k5gEtdLPy86JjRwsNM9tnDcA==", + "dev": true, + "license": "MIT", + "dependencies": { + "parse-passwd": "^1.0.0" + }, + "engines": { + "node": ">=0.10.0" + } }, - "hooker": { + "node_modules/hooker": { "version": "0.2.3", "resolved": "https://registry.npmjs.org/hooker/-/hooker-0.2.3.tgz", - "integrity": "sha1-uDT3I8xKJCqmWWNFnfbZhMXT2Vk=", - "dev": true - }, - "hosted-git-info": { - "version": "2.8.8", - "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.8.8.tgz", - "integrity": "sha512-f/wzC2QaWBs7t9IYqB4T3sR1xviIViXJRJTWBlx2Gf3g0Xi5vI7Yy4koXQ1c9OYDGHN9sBy1DQ2AB8fqZBWhUg==", - "dev": true - }, - "iconv-lite": { - "version": "0.2.11", - "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.2.11.tgz", - "integrity": "sha1-HOYKOleGSiktEyH/RgnKS7llrcg=", - "dev": true - }, - "indent-string": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-2.1.0.tgz", - "integrity": "sha1-ji1INIdCEhtKghi3oTfppSBJ3IA=", + "integrity": "sha512-t+UerCsQviSymAInD01Pw+Dn/usmz1sRO+3Zk1+lx8eg+WKpD2ulcwWqHHL0+aseRBr+3+vIhiG1K1JTwaIcTA==", "dev": true, - "requires": { - "repeating": "^2.0.0" + "engines": { + "node": "*" + } + }, + "node_modules/iconv-lite": { + "version": "0.6.3", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.6.3.tgz", + "integrity": "sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==", + "dev": true, + "license": "MIT", + "dependencies": { + "safer-buffer": ">= 2.1.2 < 3.0.0" + }, + "engines": { + "node": ">=0.10.0" } }, - "inherits": { + "node_modules/inflight": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", + "integrity": "sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==", + "deprecated": "This module is not supported, and leaks memory. Do not use it. Check out lru-cache if you want a good and tested way to coalesce async requests by a key value, which is much more comprehensive and powerful.", + "dev": true, + "license": "ISC", + "dependencies": { + "once": "^1.3.0", + "wrappy": "1" + } + }, + "node_modules/inherits": { "version": "2.0.4", "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", - "dev": true - }, - "is-arrayish": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz", - "integrity": "sha1-d8mYQFJ6qOyxqLppe4BkWnqSap0=", - "dev": true + "dev": true, + "license": "ISC" }, - "is-buffer": { - "version": "1.1.6", - "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz", - "integrity": "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==", - "dev": true + "node_modules/ini": { + "version": "1.3.8", + "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.8.tgz", + "integrity": "sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==", + "dev": true, + "license": "ISC" }, - "is-finite": { + "node_modules/interpret": { "version": "1.1.0", - "resolved": "https://registry.npmjs.org/is-finite/-/is-finite-1.1.0.tgz", - "integrity": "sha512-cdyMtqX/BOqqNBBiKlIVkytNHm49MtMlYyn1zxzvJKWmFMlGzm+ry5BBfYyeY9YmNKbRSo/o7OX9w9ale0wg3w==", - "dev": true - }, - "is-utf8": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/is-utf8/-/is-utf8-0.2.1.tgz", - "integrity": "sha1-Sw2hRCEE0bM2NA6AeX6GXPOffXI=", - "dev": true + "resolved": "https://registry.npmjs.org/interpret/-/interpret-1.1.0.tgz", + "integrity": "sha512-CLM8SNMDu7C5psFCn6Wg/tgpj/bKAg7hc2gWqcuR9OD5Ft9PhBpIu8PLicPeis+xDd6YX2ncI8MCA64I9tftIA==", + "dev": true, + "license": "MIT" }, - "isarray": { + "node_modules/is-absolute": { "version": "1.0.0", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", - "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=", - "dev": true - }, - "js-yaml": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-2.0.5.tgz", - "integrity": "sha1-olrmUJmZ6X3yeMZxnaEb0Gh3Q6g=", + "resolved": "https://registry.npmjs.org/is-absolute/-/is-absolute-1.0.0.tgz", + "integrity": "sha512-dOWoqflvcydARa360Gvv18DZ/gRuHKi2NU/wU5X1ZFzdYfH29nkiNZsF3mp4OJ3H4yo9Mx8A/uAGNzpzPN3yBA==", "dev": true, - "requires": { - "argparse": "~ 0.1.11", - "esprima": "~ 1.0.2" + "license": "MIT", + "dependencies": { + "is-relative": "^1.0.0", + "is-windows": "^1.0.1" + }, + "engines": { + "node": ">=0.10.0" } }, - "js2xmlparser": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/js2xmlparser/-/js2xmlparser-4.0.1.tgz", - "integrity": "sha512-KrPTolcw6RocpYjdC7pL7v62e55q7qOMHvLX1UCLc5AAS8qeJ6nukarEJAF2KL2PZxlbGueEbINqZR2bDe/gUw==", - "dev": true, - "requires": { - "xmlcreate": "^2.0.3" - } - }, - "jsdoc": { - "version": "3.6.4", - "resolved": "https://registry.npmjs.org/jsdoc/-/jsdoc-3.6.4.tgz", - "integrity": "sha512-3G9d37VHv7MFdheviDCjUfQoIjdv4TC5zTTf5G9VODLtOnVS6La1eoYBDlbWfsRT3/Xo+j2MIqki2EV12BZfwA==", - "dev": true, - "requires": { - "@babel/parser": "^7.9.4", - "bluebird": "^3.7.2", - "catharsis": "^0.8.11", - "escape-string-regexp": "^2.0.0", - "js2xmlparser": "^4.0.1", - "klaw": "^3.0.0", - "markdown-it": "^10.0.0", - "markdown-it-anchor": "^5.2.7", - "marked": "^0.8.2", - "mkdirp": "^1.0.4", - "requizzle": "^0.2.3", - "strip-json-comments": "^3.1.0", - "taffydb": "2.6.2", - "underscore": "~1.10.2" - }, + "node_modules/is-core-module": { + "version": "2.16.1", + "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.16.1.tgz", + "integrity": "sha512-UfoeMA6fIJ8wTYFEUjelnaGI67v6+N7qXJEvQuIGa99l4xsCruSYOVSQ0uPANn4dAzm8lkYPaKLrrijLq7x23w==", + "dev": true, + "license": "MIT", "dependencies": { - "escape-string-regexp": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-2.0.0.tgz", - "integrity": "sha512-UpzcLCXolUWcNu5HtVMHYdXJjArjsF9C0aNnquZYY4uW/Vu0miy5YoWvbV345HauVvcAUnpRuhMMcqTcGOY2+w==", - "dev": true - }, - "marked": { - "version": "0.8.2", - "resolved": "https://registry.npmjs.org/marked/-/marked-0.8.2.tgz", - "integrity": "sha512-EGwzEeCcLniFX51DhTpmTom+dSA/MG/OBUDjnWtHbEnjAH180VzUeAw+oE4+Zv+CoYBWyRlYOTR0N8SO9R1PVw==", - "dev": true - }, - "underscore": { - "version": "1.10.2", - "resolved": "https://registry.npmjs.org/underscore/-/underscore-1.10.2.tgz", - "integrity": "sha512-N4P+Q/BuyuEKFJ43B9gYuOj4TQUHXX+j2FqguVOpjkssLUUrnJofCcBccJSCoeturDoZU6GorDTHSvUDlSQbTg==", - "dev": true - } - } - }, - "jsonfile": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.0.1.tgz", - "integrity": "sha512-jR2b5v7d2vIOust+w3wtFKZIfpC2pnRmFAhAC/BuweZFQR8qZzxH1OyrQ10HmdVYiXWkYUqPVsz91cG7EL2FBg==", - "dev": true, - "requires": { - "graceful-fs": "^4.1.6", - "universalify": "^1.0.0" + "hasown": "^2.0.2" }, - "dependencies": { - "graceful-fs": { - "version": "4.2.4", - "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.4.tgz", - "integrity": "sha512-WjKPNJF79dtJAVniUlGGWHYGz2jWxT6VhN/4m1NdkbZ2nOsEF+cI1Edgql5zCRhs/VsQYRvrXctxktVXZUkixw==", - "dev": true, - "optional": true - } + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "node_modules/is-extglob": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", + "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==", "dev": true, - "requires": { - "is-buffer": "^1.1.5" + "license": "MIT", + "engines": { + "node": ">=0.10.0" } }, - "klaw": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/klaw/-/klaw-3.0.0.tgz", - "integrity": "sha512-0Fo5oir+O9jnXu5EefYbVK+mHMBeEVEy2cmctR1O1NECcCkPRreJKrS6Qt/j3KC2C148Dfo9i3pCmCMsdqGr0g==", + "node_modules/is-glob": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", + "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", "dev": true, - "requires": { - "graceful-fs": "^4.1.9" - }, + "license": "MIT", "dependencies": { - "graceful-fs": { - "version": "4.2.4", - "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.4.tgz", - "integrity": "sha512-WjKPNJF79dtJAVniUlGGWHYGz2jWxT6VhN/4m1NdkbZ2nOsEF+cI1Edgql5zCRhs/VsQYRvrXctxktVXZUkixw==", - "dev": true - } + "is-extglob": "^2.1.1" + }, + "engines": { + "node": ">=0.10.0" } }, - "lazy-cache": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/lazy-cache/-/lazy-cache-1.0.4.tgz", - "integrity": "sha1-odePw6UEdMuAhF07O24dpJpEbo4=", - "dev": true - }, - "linkify-it": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/linkify-it/-/linkify-it-2.2.0.tgz", - "integrity": "sha512-GnAl/knGn+i1U/wjBz3akz2stz+HrHLsxMwHQGofCDfPvlf+gDKN58UtfmUquTY4/MXeE2x7k19KQmeoZi94Iw==", + "node_modules/is-number": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", + "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", "dev": true, - "requires": { - "uc.micro": "^1.0.1" + "license": "MIT", + "engines": { + "node": ">=0.12.0" } }, - "load-json-file": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/load-json-file/-/load-json-file-1.1.0.tgz", - "integrity": "sha1-lWkFcI1YtLq0wiYbBPWfMcmTdMA=", + "node_modules/is-plain-object": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-2.0.4.tgz", + "integrity": "sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==", "dev": true, - "requires": { - "graceful-fs": "^4.1.2", - "parse-json": "^2.2.0", - "pify": "^2.0.0", - "pinkie-promise": "^2.0.0", - "strip-bom": "^2.0.0" - }, + "license": "MIT", "dependencies": { - "graceful-fs": { - "version": "4.2.4", - "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.4.tgz", - "integrity": "sha512-WjKPNJF79dtJAVniUlGGWHYGz2jWxT6VhN/4m1NdkbZ2nOsEF+cI1Edgql5zCRhs/VsQYRvrXctxktVXZUkixw==", - "dev": true - } + "isobject": "^3.0.1" + }, + "engines": { + "node": ">=0.10.0" } }, - "lodash": { - "version": "0.9.2", - "resolved": "https://registry.npmjs.org/lodash/-/lodash-0.9.2.tgz", - "integrity": "sha1-jzSZxSRdNG1oLlsNO0B2fgnxqSw=", - "dev": true + "node_modules/is-relative": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-relative/-/is-relative-1.0.0.tgz", + "integrity": "sha512-Kw/ReK0iqwKeu0MITLFuj0jbPAmEiOsIwyIXvvbfa6QfmN9pkD1M+8pdk7Rl/dTKbH34/XBFMbgD4iMJhLQbGA==", + "dev": true, + "license": "MIT", + "dependencies": { + "is-unc-path": "^1.0.0" + }, + "engines": { + "node": ">=0.10.0" + } }, - "longest": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/longest/-/longest-1.0.1.tgz", - "integrity": "sha1-MKCy2jj3N3DoKUoNIuZiXtd9AJc=", - "dev": true + "node_modules/is-unc-path": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-unc-path/-/is-unc-path-1.0.0.tgz", + "integrity": "sha512-mrGpVd0fs7WWLfVsStvgF6iEJnbjDFZh9/emhRDcGWTduTfNHd9CHeUwH3gYIjdbwo4On6hunkztwOaAw0yllQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "unc-path-regex": "^0.1.2" + }, + "engines": { + "node": ">=0.10.0" + } }, - "loud-rejection": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/loud-rejection/-/loud-rejection-1.6.0.tgz", - "integrity": "sha1-W0b4AUft7leIcPCG0Eghz5mOVR8=", + "node_modules/is-windows": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-windows/-/is-windows-1.0.2.tgz", + "integrity": "sha512-eXK1UInq2bPmjyX6e3VHIzMLobc4J94i4AWn+Hpq3OU5KkrRC96OAcR3PRJ/pGu6m8TRnBHP9dkXQVsT/COVIA==", "dev": true, - "requires": { - "currently-unhandled": "^0.4.1", - "signal-exit": "^3.0.0" + "license": "MIT", + "engines": { + "node": ">=0.10.0" } }, - "lru-cache": { - "version": "2.7.3", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-2.7.3.tgz", - "integrity": "sha1-bUUk6LlV+V1PW1iFHOId1y+06VI=", - "dev": true + "node_modules/isexe": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", + "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==", + "dev": true, + "license": "ISC" }, - "map-obj": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/map-obj/-/map-obj-1.0.1.tgz", - "integrity": "sha1-2TPOuSBdgr3PSIb2dCvcK03qFG0=", - "dev": true + "node_modules/isobject": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", + "integrity": "sha512-WhB9zCku7EGTj/HQQRz5aUQEUeoQZH2bWcltRErOpymJ4boYE6wL9Tbr23krRPSZ+C5zqNSrSw+Cc7sZZ4b7vg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } }, - "markdown-it": { - "version": "10.0.0", - "resolved": "https://registry.npmjs.org/markdown-it/-/markdown-it-10.0.0.tgz", - "integrity": "sha512-YWOP1j7UbDNz+TumYP1kpwnP0aEa711cJjrAQrzd0UXlbJfc5aAq0F/PZHjiioqDC1NKgvIMX+o+9Bk7yuM2dg==", + "node_modules/js-yaml": { + "version": "3.14.1", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.1.tgz", + "integrity": "sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==", "dev": true, - "requires": { + "license": "MIT", + "dependencies": { "argparse": "^1.0.7", - "entities": "~2.0.0", - "linkify-it": "^2.0.0", - "mdurl": "^1.0.1", - "uc.micro": "^1.0.5" + "esprima": "^4.0.0" }, - "dependencies": { - "argparse": { - "version": "1.0.10", - "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", - "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", - "dev": true, - "requires": { - "sprintf-js": "~1.0.2" - } - } - } - }, - "markdown-it-anchor": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/markdown-it-anchor/-/markdown-it-anchor-5.3.0.tgz", - "integrity": "sha512-/V1MnLL/rgJ3jkMWo84UR+K+jF1cxNG1a+KwqeXqTIJ+jtA8aWSHuigx8lTzauiIjBDbwF3NcWQMotd0Dm39jA==", - "dev": true - }, - "marked": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/marked/-/marked-1.1.0.tgz", - "integrity": "sha512-EkE7RW6KcXfMHy2PA7Jg0YJE1l8UPEZE8k45tylzmZM30/r1M1MUXWQfJlrSbsTeh7m/XTwHbWUENvAJZpp1YA==", - "dev": true + "bin": { + "js-yaml": "bin/js-yaml.js" + } }, - "maxmin": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/maxmin/-/maxmin-1.1.0.tgz", - "integrity": "sha1-cTZehKmd2Piz99X94vANHn9zvmE=", - "dev": true, - "requires": { - "chalk": "^1.0.0", - "figures": "^1.0.1", - "gzip-size": "^1.0.0", - "pretty-bytes": "^1.0.0" - }, - "dependencies": { - "ansi-regex": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", - "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=", - "dev": true - }, - "ansi-styles": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz", - "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=", - "dev": true - }, - "chalk": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", - "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=", - "dev": true, - "requires": { - "ansi-styles": "^2.2.1", - "escape-string-regexp": "^1.0.2", - "has-ansi": "^2.0.0", - "strip-ansi": "^3.0.0", - "supports-color": "^2.0.0" - } - }, - "has-ansi": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/has-ansi/-/has-ansi-2.0.0.tgz", - "integrity": "sha1-NPUEnOHs3ysGSa8+8k5F7TVBbZE=", - "dev": true, - "requires": { - "ansi-regex": "^2.0.0" - } - }, - "strip-ansi": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", - "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", - "dev": true, - "requires": { - "ansi-regex": "^2.0.0" - } - }, - "supports-color": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz", - "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=", - "dev": true - } - } - }, - "mdurl": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/mdurl/-/mdurl-1.0.1.tgz", - "integrity": "sha1-/oWy7HWlkDfyrf7BAP1sYBdhFS4=", - "dev": true - }, - "meow": { - "version": "3.7.0", - "resolved": "https://registry.npmjs.org/meow/-/meow-3.7.0.tgz", - "integrity": "sha1-cstmi0JSKCkKu/qFaJJYcwioAfs=", - "dev": true, - "requires": { - "camelcase-keys": "^2.0.0", - "decamelize": "^1.1.2", - "loud-rejection": "^1.0.0", - "map-obj": "^1.0.1", - "minimist": "^1.1.3", - "normalize-package-data": "^2.3.4", - "object-assign": "^4.0.1", - "read-pkg-up": "^1.0.1", - "redent": "^1.0.0", - "trim-newlines": "^1.0.0" - } - }, - "minimatch": { - "version": "0.2.14", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-0.2.14.tgz", - "integrity": "sha1-x054BXT2PG+aCQ6Q775u9TpqdWo=", - "dev": true, - "requires": { - "lru-cache": "2", - "sigmund": "~1.0.0" - } - }, - "minimist": { - "version": "1.2.5", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.5.tgz", - "integrity": "sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw==", - "dev": true - }, - "mkdirp": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz", - "integrity": "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==", - "dev": true - }, - "nopt": { - "version": "1.0.10", - "resolved": "https://registry.npmjs.org/nopt/-/nopt-1.0.10.tgz", - "integrity": "sha1-bd0hvSoxQXuScn3Vhfim83YI6+4=", + "node_modules/kind-of": { + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz", + "integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==", "dev": true, - "requires": { - "abbrev": "1" + "license": "MIT", + "engines": { + "node": ">=0.10.0" } }, - "normalize-package-data": { - "version": "2.5.0", - "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-2.5.0.tgz", - "integrity": "sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA==", + "node_modules/liftup": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/liftup/-/liftup-3.0.1.tgz", + "integrity": "sha512-yRHaiQDizWSzoXk3APcA71eOI/UuhEkNN9DiW2Tt44mhYzX4joFoCZlxsSOF7RyeLlfqzFLQI1ngFq3ggMPhOw==", "dev": true, - "requires": { - "hosted-git-info": "^2.1.4", - "resolve": "^1.10.0", - "semver": "2 || 3 || 4 || 5", - "validate-npm-package-license": "^3.0.1" + "license": "MIT", + "dependencies": { + "extend": "^3.0.2", + "findup-sync": "^4.0.0", + "fined": "^1.2.0", + "flagged-respawn": "^1.0.1", + "is-plain-object": "^2.0.4", + "object.map": "^1.0.1", + "rechoir": "^0.7.0", + "resolve": "^1.19.0" + }, + "engines": { + "node": ">=10" } }, - "object-assign": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", - "integrity": "sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM=", - "dev": true + "node_modules/liftup/node_modules/findup-sync": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/findup-sync/-/findup-sync-4.0.0.tgz", + "integrity": "sha512-6jvvn/12IC4quLBL1KNokxC7wWTvYncaVUYSoxWw7YykPLuRrnv4qdHcSOywOI5RpkOVGeQRtWM8/q+G6W6qfQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "detect-file": "^1.0.0", + "is-glob": "^4.0.0", + "micromatch": "^4.0.2", + "resolve-dir": "^1.0.1" + }, + "engines": { + "node": ">= 8" + } }, - "pako": { - "version": "0.2.9", - "resolved": "https://registry.npmjs.org/pako/-/pako-0.2.9.tgz", - "integrity": "sha1-8/dSL073gjSNqBYbrZ7P1Rv4OnU=", - "dev": true + "node_modules/lodash": { + "version": "4.17.21", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", + "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==", + "dev": true, + "license": "MIT" }, - "parse-json": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-2.2.0.tgz", - "integrity": "sha1-9ID0BDTvgHQfhGkJn43qGPVaTck=", + "node_modules/make-iterator": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/make-iterator/-/make-iterator-1.0.1.tgz", + "integrity": "sha512-pxiuXh0iVEq7VM7KMIhs5gxsfxCux2URptUQaXo4iZZJxBAzTPOLE2BumO5dbfVYq/hBJFBR/a1mFDmOx5AGmw==", "dev": true, - "requires": { - "error-ex": "^1.2.0" + "license": "MIT", + "dependencies": { + "kind-of": "^6.0.2" + }, + "engines": { + "node": ">=0.10.0" } }, - "path-exists": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-2.1.0.tgz", - "integrity": "sha1-D+tsZPD8UY2adU3V77YscCJ2H0s=", + "node_modules/map-cache": { + "version": "0.2.2", + "resolved": "https://registry.npmjs.org/map-cache/-/map-cache-0.2.2.tgz", + "integrity": "sha512-8y/eV9QQZCiyn1SprXSrCmqJN0yNRATe+PO8ztwqrvrbdRLA3eYJF0yaR0YayLWkMbsQSKWS9N2gPcGEc4UsZg==", "dev": true, - "requires": { - "pinkie-promise": "^2.0.0" + "license": "MIT", + "engines": { + "node": ">=0.10.0" } }, - "path-parse": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.6.tgz", - "integrity": "sha512-GSmOT2EbHrINBf9SR7CDELwlJ8AENk3Qn7OikK4nFYAu3Ote2+JYNVvkpAEQm3/TLNEJFD/xZJjzyxg3KBWOzw==", - "dev": true - }, - "path-type": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/path-type/-/path-type-1.1.0.tgz", - "integrity": "sha1-WcRPfuSR2nBNpBXaWkBwuk+P5EE=", + "node_modules/maxmin": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/maxmin/-/maxmin-3.0.0.tgz", + "integrity": "sha512-wcahMInmGtg/7c6a75fr21Ch/Ks1Tb+Jtoan5Ft4bAI0ZvJqyOw8kkM7e7p8hDSzY805vmxwHT50KcjGwKyJ0g==", "dev": true, - "requires": { - "graceful-fs": "^4.1.2", - "pify": "^2.0.0", - "pinkie-promise": "^2.0.0" - }, + "license": "MIT", "dependencies": { - "graceful-fs": { - "version": "4.2.4", - "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.4.tgz", - "integrity": "sha512-WjKPNJF79dtJAVniUlGGWHYGz2jWxT6VhN/4m1NdkbZ2nOsEF+cI1Edgql5zCRhs/VsQYRvrXctxktVXZUkixw==", - "dev": true - } + "chalk": "^4.1.0", + "figures": "^3.2.0", + "gzip-size": "^5.1.1", + "pretty-bytes": "^5.3.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "pify": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", - "integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw=", - "dev": true - }, - "pinkie": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/pinkie/-/pinkie-2.0.4.tgz", - "integrity": "sha1-clVrgM+g1IqXToDnckjoDtT3+HA=", - "dev": true - }, - "pinkie-promise": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/pinkie-promise/-/pinkie-promise-2.0.1.tgz", - "integrity": "sha1-ITXW36ejWMBprJsXh3YogihFD/o=", + "node_modules/micromatch": { + "version": "4.0.8", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.8.tgz", + "integrity": "sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA==", "dev": true, - "requires": { - "pinkie": "^2.0.0" + "license": "MIT", + "dependencies": { + "braces": "^3.0.3", + "picomatch": "^2.3.1" + }, + "engines": { + "node": ">=8.6" } }, - "pretty-bytes": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/pretty-bytes/-/pretty-bytes-1.0.4.tgz", - "integrity": "sha1-CiLoIQYJrTVUL4yNXSFZr/B1HIQ=", + "node_modules/minimatch": { + "version": "3.0.8", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.8.tgz", + "integrity": "sha512-6FsRAQsxQ61mw+qP1ZzbL9Bc78x2p5OqNgNpnoAFLTrX8n5Kxph0CsnhmKKNXTWjXqU5L0pGPR7hYk+XWZr60Q==", "dev": true, - "requires": { - "get-stdin": "^4.0.1", - "meow": "^3.1.0" + "license": "ISC", + "dependencies": { + "brace-expansion": "^1.1.7" + }, + "engines": { + "node": "*" } }, - "process-nextick-args": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz", - "integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==", - "dev": true + "node_modules/nopt": { + "version": "3.0.6", + "resolved": "https://registry.npmjs.org/nopt/-/nopt-3.0.6.tgz", + "integrity": "sha512-4GUt3kSEYmk4ITxzB/b9vaIDfUVWN/Ml1Fwl11IlnIG2iaJ9O6WXZ9SrYM9NLI8OCBieN2Y8SWC2oJV0RQ7qYg==", + "dev": true, + "license": "ISC", + "dependencies": { + "abbrev": "1" + }, + "bin": { + "nopt": "bin/nopt.js" + } }, - "read-pkg": { + "node_modules/object.defaults": { "version": "1.1.0", - "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-1.1.0.tgz", - "integrity": "sha1-9f+qXs0pyzHAR0vKfXVra7KePyg=", + "resolved": "https://registry.npmjs.org/object.defaults/-/object.defaults-1.1.0.tgz", + "integrity": "sha512-c/K0mw/F11k4dEUBMW8naXUuBuhxRCfG7W+yFy8EcijU/rSmazOUd1XAEEe6bC0OuXY4HUKjTJv7xbxIMqdxrA==", "dev": true, - "requires": { - "load-json-file": "^1.0.0", - "normalize-package-data": "^2.3.2", - "path-type": "^1.0.0" + "license": "MIT", + "dependencies": { + "array-each": "^1.0.1", + "array-slice": "^1.0.0", + "for-own": "^1.0.0", + "isobject": "^3.0.0" + }, + "engines": { + "node": ">=0.10.0" } }, - "read-pkg-up": { + "node_modules/object.map": { "version": "1.0.1", - "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-1.0.1.tgz", - "integrity": "sha1-nWPBMnbAZZGNV/ACpX9AobZD+wI=", + "resolved": "https://registry.npmjs.org/object.map/-/object.map-1.0.1.tgz", + "integrity": "sha512-3+mAJu2PLfnSVGHwIWubpOFLscJANBKuB/6A4CxBstc4aqwQY0FWcsppuy4jU5GSB95yES5JHSI+33AWuS4k6w==", "dev": true, - "requires": { - "find-up": "^1.0.0", - "read-pkg": "^1.0.0" + "license": "MIT", + "dependencies": { + "for-own": "^1.0.0", + "make-iterator": "^1.0.0" + }, + "engines": { + "node": ">=0.10.0" } }, - "readable-stream": { - "version": "2.3.7", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", - "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", + "node_modules/object.pick": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/object.pick/-/object.pick-1.3.0.tgz", + "integrity": "sha512-tqa/UMy/CCoYmj+H5qc07qvSL9dqcs/WZENZ1JbtWBlATP+iVOe778gE6MSijnyCnORzDuX6hU+LA4SZ09YjFQ==", "dev": true, - "requires": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.3", - "isarray": "~1.0.0", - "process-nextick-args": "~2.0.0", - "safe-buffer": "~5.1.1", - "string_decoder": "~1.1.1", - "util-deprecate": "~1.0.1" + "license": "MIT", + "dependencies": { + "isobject": "^3.0.1" + }, + "engines": { + "node": ">=0.10.0" } }, - "redent": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/redent/-/redent-1.0.0.tgz", - "integrity": "sha1-z5Fqsf1fHxbfsggi3W7H9zDCr94=", + "node_modules/once": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", + "integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==", "dev": true, - "requires": { - "indent-string": "^2.1.0", - "strip-indent": "^1.0.1" + "license": "ISC", + "dependencies": { + "wrappy": "1" } }, - "repeat-string": { - "version": "1.6.1", - "resolved": "https://registry.npmjs.org/repeat-string/-/repeat-string-1.6.1.tgz", - "integrity": "sha1-jcrkcOHIirwtYA//Sndihtp15jc=", - "dev": true + "node_modules/os-homedir": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/os-homedir/-/os-homedir-1.0.2.tgz", + "integrity": "sha512-B5JU3cabzk8c67mRRd3ECmROafjYMXbuzlwtqdM8IbS8ktlTix8aFGb2bAGKrSRIlnfKwovGUUr72JUPyOb6kQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } }, - "repeating": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/repeating/-/repeating-2.0.1.tgz", - "integrity": "sha1-UhTFOpJtNVJwdSf7q0FdvAjQbdo=", + "node_modules/os-tmpdir": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/os-tmpdir/-/os-tmpdir-1.0.2.tgz", + "integrity": "sha512-D2FR03Vir7FIu45XBY20mTb+/ZSWB00sjU9jdQXt83gDrI4Ztz5Fs7/yy74g2N5SVQY4xY1qDr4rNddwYRVX0g==", "dev": true, - "requires": { - "is-finite": "^1.0.0" + "license": "MIT", + "engines": { + "node": ">=0.10.0" } }, - "requizzle": { - "version": "0.2.3", - "resolved": "https://registry.npmjs.org/requizzle/-/requizzle-0.2.3.tgz", - "integrity": "sha512-YanoyJjykPxGHii0fZP0uUPEXpvqfBDxWV7s6GKAiiOsiqhX6vHNyW3Qzdmqp/iq/ExbhaGbVrjB4ruEVSM4GQ==", + "node_modules/osenv": { + "version": "0.1.5", + "resolved": "https://registry.npmjs.org/osenv/-/osenv-0.1.5.tgz", + "integrity": "sha512-0CWcCECdMVc2Rw3U5w9ZjqX6ga6ubk1xDVKxtBQPK7wis/0F2r9T6k4ydGYhecl7YUBxBVxhL5oisPsNxAPe2g==", + "deprecated": "This package is no longer supported.", "dev": true, - "requires": { - "lodash": "^4.17.14" - }, + "license": "ISC", "dependencies": { - "lodash": { - "version": "4.17.15", - "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.15.tgz", - "integrity": "sha512-8xOcRHvCjnocdS5cpwXQXVzmmh5e5+saE2QGoeQmbKmRS6J3VQppPOIt0MnmE+4xlZoumy0GPG0D0MVIQbNA1A==", - "dev": true - } + "os-homedir": "^1.0.0", + "os-tmpdir": "^1.0.0" } }, - "resolve": { - "version": "1.17.0", - "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.17.0.tgz", - "integrity": "sha512-ic+7JYiV8Vi2yzQGFWOkiZD5Z9z7O2Zhm9XMaTxdJExKasieFCr+yXZ/WmXsckHiKl12ar0y6XiXDx3m4RHn1w==", + "node_modules/parse-filepath": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/parse-filepath/-/parse-filepath-1.0.2.tgz", + "integrity": "sha512-FwdRXKCohSVeXqwtYonZTXtbGJKrn+HNyWDYVcp5yuJlesTwNH4rsmRZ+GrKAPJ5bLpRxESMeS+Rl0VCHRvB2Q==", "dev": true, - "requires": { - "path-parse": "^1.0.6" + "license": "MIT", + "dependencies": { + "is-absolute": "^1.0.0", + "map-cache": "^0.2.0", + "path-root": "^0.1.1" + }, + "engines": { + "node": ">=0.8" } }, - "right-align": { - "version": "0.1.3", - "resolved": "https://registry.npmjs.org/right-align/-/right-align-0.1.3.tgz", - "integrity": "sha1-YTObci/mo1FWiSENJOFMlhSGE+8=", + "node_modules/parse-passwd": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/parse-passwd/-/parse-passwd-1.0.0.tgz", + "integrity": "sha512-1Y1A//QUXEZK7YKz+rD9WydcE1+EuPr6ZBgKecAB8tmoW6UFv0NREVJe1p+jRxtThkcbbKkfwIbWJe/IeE6m2Q==", "dev": true, - "requires": { - "align-text": "^0.1.1" + "license": "MIT", + "engines": { + "node": ">=0.10.0" } }, - "rimraf": { - "version": "2.2.8", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.2.8.tgz", - "integrity": "sha1-5Dm+Kq7jJzIZUnMPmaiSnk/FBYI=", - "dev": true - }, - "safe-buffer": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", - "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", - "dev": true - }, - "semver": { - "version": "5.7.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", - "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", - "dev": true - }, - "sigmund": { + "node_modules/path-is-absolute": { "version": "1.0.1", - "resolved": "https://registry.npmjs.org/sigmund/-/sigmund-1.0.1.tgz", - "integrity": "sha1-P/IfGYytIXX587eBhT/ZTQ0ZtZA=", - "dev": true + "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", + "integrity": "sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } }, - "signal-exit": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.3.tgz", - "integrity": "sha512-VUJ49FC8U1OxwZLxIbTTrDvLnf/6TDgxZcK8wxR8zs13xpx7xbG60ndBlhNrFi2EMuFRoeDoJO7wthSLq42EjA==", - "dev": true + "node_modules/path-parse": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz", + "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==", + "dev": true, + "license": "MIT" }, - "source-map": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.3.0.tgz", - "integrity": "sha1-hYb7mloAXltQHiHNGLbyG0V60fk=", + "node_modules/path-root": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/path-root/-/path-root-0.1.1.tgz", + "integrity": "sha512-QLcPegTHF11axjfojBIoDygmS2E3Lf+8+jI6wOVmNVenrKSo3mFdSGiIgdSHenczw3wPtlVMQaFVwGmM7BJdtg==", "dev": true, - "requires": { - "amdefine": ">=0.0.4" + "license": "MIT", + "dependencies": { + "path-root-regex": "^0.1.0" + }, + "engines": { + "node": ">=0.10.0" } }, - "spdx-correct": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/spdx-correct/-/spdx-correct-3.1.1.tgz", - "integrity": "sha512-cOYcUWwhCuHCXi49RhFRCyJEK3iPj1Ziz9DpViV3tbZOwXD49QzIN3MpOLJNxh2qwq2lJJZaKMVw9qNi4jTC0w==", + "node_modules/path-root-regex": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/path-root-regex/-/path-root-regex-0.1.2.tgz", + "integrity": "sha512-4GlJ6rZDhQZFE0DPVKh0e9jmZ5egZfxTkp7bcRDuPlJXbAwhxcl2dINPUAsjLdejqaLsCeg8axcLjIbvBjN4pQ==", "dev": true, - "requires": { - "spdx-expression-parse": "^3.0.0", - "spdx-license-ids": "^3.0.0" + "license": "MIT", + "engines": { + "node": ">=0.10.0" } }, - "spdx-exceptions": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/spdx-exceptions/-/spdx-exceptions-2.3.0.tgz", - "integrity": "sha512-/tTrYOC7PPI1nUAgx34hUpqXuyJG+DTHJTnIULG4rDygi4xu/tfgmq1e1cIRwRzwZgo4NLySi+ricLkZkw4i5A==", - "dev": true - }, - "spdx-expression-parse": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/spdx-expression-parse/-/spdx-expression-parse-3.0.1.tgz", - "integrity": "sha512-cbqHunsQWnJNE6KhVSMsMeH5H/L9EpymbzqTQ3uLwNCLZ1Q481oWaofqH7nO6V07xlXwY6PhQdQ2IedWx/ZK4Q==", + "node_modules/picomatch": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", + "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", "dev": true, - "requires": { - "spdx-exceptions": "^2.1.0", - "spdx-license-ids": "^3.0.0" + "license": "MIT", + "engines": { + "node": ">=8.6" + }, + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" } }, - "spdx-license-ids": { - "version": "3.0.5", - "resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.5.tgz", - "integrity": "sha512-J+FWzZoynJEXGphVIS+XEh3kFSjZX/1i9gFBaWQcB+/tmpe2qUsSBABpcxqxnAxFdiUFEgAX1bjYGQvIZmoz9Q==", - "dev": true - }, - "sprintf-js": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", - "integrity": "sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw=", - "dev": true + "node_modules/pify": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/pify/-/pify-4.0.1.tgz", + "integrity": "sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + } }, - "string_decoder": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", - "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", + "node_modules/pretty-bytes": { + "version": "5.6.0", + "resolved": "https://registry.npmjs.org/pretty-bytes/-/pretty-bytes-5.6.0.tgz", + "integrity": "sha512-FFw039TmrBqFK8ma/7OL3sDz/VytdtJr044/QUJtH0wK9lb9jLq9tJyIxUwtQJHwar2BqtiA4iCWSwo9JLkzFg==", "dev": true, - "requires": { - "safe-buffer": "~5.1.0" + "license": "MIT", + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "strip-ansi": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-0.3.0.tgz", - "integrity": "sha1-JfSOoiynkYfzF0pNuHWTR7sSYiA=", + "node_modules/rechoir": { + "version": "0.7.1", + "resolved": "https://registry.npmjs.org/rechoir/-/rechoir-0.7.1.tgz", + "integrity": "sha512-/njmZ8s1wVeR6pjTZ+0nCnv8SpZNRMT2D1RLOJQESlYFDBvwpTA4KWJpZ+sBJ4+vhjILRcK7JIFdGCdxEAAitg==", "dev": true, - "requires": { - "ansi-regex": "^0.2.1" + "license": "MIT", + "dependencies": { + "resolve": "^1.9.0" + }, + "engines": { + "node": ">= 0.10" } }, - "strip-bom": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-2.0.0.tgz", - "integrity": "sha1-YhmoVhZSBJHzV4i9vxRHqZx+aw4=", + "node_modules/resolve": { + "version": "1.22.10", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.10.tgz", + "integrity": "sha512-NPRy+/ncIMeDlTAsuqwKIiferiawhefFJtkNSW0qZJEqMEb+qBt/77B/jGeeek+F0uOeN05CDa6HXbbIgtVX4w==", "dev": true, - "requires": { - "is-utf8": "^0.2.0" + "license": "MIT", + "dependencies": { + "is-core-module": "^2.16.0", + "path-parse": "^1.0.7", + "supports-preserve-symlinks-flag": "^1.0.0" + }, + "bin": { + "resolve": "bin/resolve" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "strip-indent": { + "node_modules/resolve-dir": { "version": "1.0.1", - "resolved": "https://registry.npmjs.org/strip-indent/-/strip-indent-1.0.1.tgz", - "integrity": "sha1-DHlipq3vp7vUrDZkYKY4VSrhoKI=", + "resolved": "https://registry.npmjs.org/resolve-dir/-/resolve-dir-1.0.1.tgz", + "integrity": "sha512-R7uiTjECzvOsWSfdM0QKFNBVFcK27aHOUwdvK53BcW8zqnGdYp0Fbj82cy54+2A4P2tFM22J5kRfe1R+lM/1yg==", "dev": true, - "requires": { - "get-stdin": "^4.0.1" + "license": "MIT", + "dependencies": { + "expand-tilde": "^2.0.0", + "global-modules": "^1.0.0" + }, + "engines": { + "node": ">=0.10.0" } }, - "strip-json-comments": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.0.tgz", - "integrity": "sha512-e6/d0eBu7gHtdCqFt0xJr642LdToM5/cN4Qb9DbHjVx1CP5RyeM+zH7pbecEmDv/lBqb0QH+6Uqq75rxFPkM0w==", - "dev": true + "node_modules/safer-buffer": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", + "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==", + "dev": true, + "license": "MIT" }, - "supports-color": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-0.2.0.tgz", - "integrity": "sha1-2S3iaU6z9nMjlz1649i1W0wiGQo=", - "dev": true + "node_modules/source-map": { + "version": "0.5.7", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", + "integrity": "sha512-LbrmJOMUSdEVxIKvdcJzQC+nQhe8FUZQTXQy6+I75skNgn3OoQ0DZA8YnFa7gp8tqtL3KPf1kmo0R5DoApeSGQ==", + "dev": true, + "license": "BSD-3-Clause", + "engines": { + "node": ">=0.10.0" + } }, - "taffydb": { - "version": "2.6.2", - "resolved": "https://registry.npmjs.org/taffydb/-/taffydb-2.6.2.tgz", - "integrity": "sha1-fLy2S1oUG2ou/CxdLGe04VCyomg=", - "dev": true + "node_modules/sprintf-js": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", + "integrity": "sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g==", + "dev": true, + "license": "BSD-3-Clause" }, - "three": { - "version": "0.118.3", - "resolved": "https://registry.npmjs.org/three/-/three-0.118.3.tgz", - "integrity": "sha512-ijECXrNzDkHieoeh2H69kgawTGH8DiamhR4uBN8jEM7VHSKvfTdEvOoHsA8Aq7dh7PHAxhlqBsN5arBI3KixSw==" + "node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "license": "MIT", + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } }, - "trim-newlines": { + "node_modules/supports-preserve-symlinks-flag": { "version": "1.0.0", - "resolved": "https://registry.npmjs.org/trim-newlines/-/trim-newlines-1.0.0.tgz", - "integrity": "sha1-WIeWa7WCpFA6QetST301ARgVphM=", - "dev": true + "resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz", + "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } }, - "typedarray": { - "version": "0.0.6", - "resolved": "https://registry.npmjs.org/typedarray/-/typedarray-0.0.6.tgz", - "integrity": "sha1-hnrHTjhkGHsdPUfZlqeOxciDB3c=", - "dev": true + "node_modules/three": { + "version": "0.173.0", + "resolved": "https://registry.npmjs.org/three/-/three-0.173.0.tgz", + "integrity": "sha512-AUwVmViIEUgBwxJJ7stnF0NkPpZxx1aZ6WiAbQ/Qq61h6I9UR4grXtZDmO8mnlaNORhHnIBlXJ1uBxILEKuVyw==", + "license": "MIT" }, - "uc.micro": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/uc.micro/-/uc.micro-1.0.6.tgz", - "integrity": "sha512-8Y75pvTYkLJW2hWQHXxoqRgV7qb9B+9vFEtidML+7koHUFapnVJAZ6cKs+Qjz5Aw3aZWHMC6u0wJE3At+nSGwA==", - "dev": true + "node_modules/to-regex-range": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", + "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "is-number": "^7.0.0" + }, + "engines": { + "node": ">=8.0" + } }, - "uglify-js": { - "version": "2.8.29", - "resolved": "https://registry.npmjs.org/uglify-js/-/uglify-js-2.8.29.tgz", - "integrity": "sha1-KcVzMUgFe7Th913zW3qcty5qWd0=", + "node_modules/uglify-js": { + "version": "3.19.3", + "resolved": "https://registry.npmjs.org/uglify-js/-/uglify-js-3.19.3.tgz", + "integrity": "sha512-v3Xu+yuwBXisp6QYTcH4UbH+xYJXqnq2m/LtQVWKWzYc1iehYnLixoQDN9FH6/j9/oybfd6W9Ghwkl8+UMKTKQ==", "dev": true, - "requires": { - "source-map": "~0.5.1", - "uglify-to-browserify": "~1.0.0", - "yargs": "~3.10.0" + "license": "BSD-2-Clause", + "bin": { + "uglifyjs": "bin/uglifyjs" }, - "dependencies": { - "source-map": { - "version": "0.5.7", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", - "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=", - "dev": true - } + "engines": { + "node": ">=0.8.0" } }, - "uglify-to-browserify": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/uglify-to-browserify/-/uglify-to-browserify-1.0.2.tgz", - "integrity": "sha1-bgkk1r2mta/jSeOabWMoUKD4grc=", + "node_modules/unc-path-regex": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/unc-path-regex/-/unc-path-regex-0.1.2.tgz", + "integrity": "sha512-eXL4nmJT7oCpkZsHZUOJo8hcX3GbsiDOa0Qu9F646fi8dT3XuSVopVqAcEiVzSKKH7UoDti23wNX3qGFxcW5Qg==", "dev": true, - "optional": true + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } }, - "underscore": { - "version": "1.7.0", - "resolved": "https://registry.npmjs.org/underscore/-/underscore-1.7.0.tgz", - "integrity": "sha1-a7rwh3UA02vjTsqlhODbn+8DUgk=", - "dev": true + "node_modules/underscore.string": { + "version": "3.3.6", + "resolved": "https://registry.npmjs.org/underscore.string/-/underscore.string-3.3.6.tgz", + "integrity": "sha512-VoC83HWXmCrF6rgkyxS9GHv8W9Q5nhMKho+OadDJGzL2oDYbYEppBaCMH6pFlwLeqj2QS+hhkw2kpXkSdD1JxQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "sprintf-js": "^1.1.1", + "util-deprecate": "^1.0.2" + }, + "engines": { + "node": "*" + } }, - "underscore.string": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/underscore.string/-/underscore.string-2.2.1.tgz", - "integrity": "sha1-18D6KvXVoaZ/QlPa7pgTLnM/Dxk=", - "dev": true + "node_modules/underscore.string/node_modules/sprintf-js": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.1.3.tgz", + "integrity": "sha512-Oo+0REFV59/rz3gfJNKQiBlwfHaSESl1pcGyABQsnnIfWOFt6JNj5gCog2U6MLZ//IGYD+nA8nI+mTShREReaA==", + "dev": true, + "license": "BSD-3-Clause" }, - "universalify": { + "node_modules/uri-path": { "version": "1.0.0", - "resolved": "https://registry.npmjs.org/universalify/-/universalify-1.0.0.tgz", - "integrity": "sha512-rb6X1W158d7pRQBg5gkR8uPaSfiids68LTJQYOtEUhoJUWBdaQHsuT/EUduxXYxcrt4r5PJ4fuHW1MHT6p0qug==", - "dev": true - }, - "uri-path": { - "version": "0.0.2", - "resolved": "https://registry.npmjs.org/uri-path/-/uri-path-0.0.2.tgz", - "integrity": "sha1-gD6wHy/rF5J9zOD2GH5yt19T9VQ=", - "dev": true + "resolved": "https://registry.npmjs.org/uri-path/-/uri-path-1.0.0.tgz", + "integrity": "sha512-8pMuAn4KacYdGMkFaoQARicp4HSw24/DHOVKWqVRJ8LhhAwPPFpdGvdL9184JVmUwe7vz7Z9n6IqI6t5n2ELdg==", + "dev": true, + "license": "WTFPL OR MIT", + "engines": { + "node": ">= 0.10" + } }, - "util-deprecate": { + "node_modules/util-deprecate": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", - "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=", - "dev": true - }, - "validate-npm-package-license": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/validate-npm-package-license/-/validate-npm-package-license-3.0.4.tgz", - "integrity": "sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew==", - "dev": true, - "requires": { - "spdx-correct": "^3.0.0", - "spdx-expression-parse": "^3.0.0" - } - }, - "which": { - "version": "1.0.9", - "resolved": "https://registry.npmjs.org/which/-/which-1.0.9.tgz", - "integrity": "sha1-RgwdoPgQED0DIam2M6+eV15kSG8=", - "dev": true - }, - "window-size": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/window-size/-/window-size-0.1.0.tgz", - "integrity": "sha1-VDjNLqk7IC76Ohn+iIeu58lPnJ0=", - "dev": true - }, - "wordwrap": { - "version": "0.0.2", - "resolved": "https://registry.npmjs.org/wordwrap/-/wordwrap-0.0.2.tgz", - "integrity": "sha1-t5Zpu0LstAn4PVg8rVLKF+qhZD8=", - "dev": true - }, - "xmlcreate": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/xmlcreate/-/xmlcreate-2.0.3.tgz", - "integrity": "sha512-HgS+X6zAztGa9zIK3Y3LXuJes33Lz9x+YyTxgrkIdabu2vqcGOWwdfCpf1hWLRrd553wd4QCDf6BBO6FfdsRiQ==", - "dev": true - }, - "yargs": { - "version": "3.10.0", - "resolved": "https://registry.npmjs.org/yargs/-/yargs-3.10.0.tgz", - "integrity": "sha1-9+572FfdfB0tOMDnTvvWgdFDH9E=", - "dev": true, - "requires": { - "camelcase": "^1.0.2", - "cliui": "^2.1.0", - "decamelize": "^1.0.0", - "window-size": "0.1.0" + "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==", + "dev": true, + "license": "MIT" + }, + "node_modules/v8flags": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/v8flags/-/v8flags-3.2.0.tgz", + "integrity": "sha512-mH8etigqMfiGWdeXpaaqGfs6BndypxusHHcv2qSHyZkGEznCd/qAXCWWRzeowtL54147cktFOC4P5y+kl8d8Jg==", + "dev": true, + "license": "MIT", + "dependencies": { + "homedir-polyfill": "^1.0.1" }, + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/which": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", + "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", + "dev": true, + "license": "ISC", "dependencies": { - "camelcase": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-1.2.1.tgz", - "integrity": "sha1-m7UwTS4LVmmLLHWLCKPqqdqlijk=", - "dev": true - } + "isexe": "^2.0.0" + }, + "bin": { + "node-which": "bin/node-which" + }, + "engines": { + "node": ">= 8" } + }, + "node_modules/wrappy": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", + "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==", + "dev": true, + "license": "ISC" } } } diff --git a/package.json b/package.json index d065c5e..8b6e02d 100644 --- a/package.json +++ b/package.json @@ -22,11 +22,9 @@ "spe" ], "devDependencies": { - "grunt": "^0.4.5", - "grunt-contrib-concat": "^0.5.1", - "grunt-contrib-uglify": "^0.9.2", - "grunt-docco2": "^0.2.1", - "grunt-jsdoc": "^1.0.0" + "grunt": "^1.6.1", + "grunt-contrib-concat": "^2.1.0", + "grunt-contrib-uglify": "^5.2.1" }, "scripts": { "test": "grunt", @@ -38,6 +36,6 @@ "example": "examples" }, "dependencies": { - "three": "^0.118.3" + "three": "^0.173.0" } } From 2acd2be7ddf2f9e1e6332682083e8ff619040467 Mon Sep 17 00:00:00 2001 From: KellyCode Date: Fri, 21 Feb 2025 12:21:24 -0600 Subject: [PATCH 02/25] begin upgrade --- .gitignore | 3 +- Gruntfile.js | 12 +- build/SPE.js | 2 +- package-lock.json | 324 +++++++++++++++++++++++++++++++++++++++++++++- package.json | 3 +- 5 files changed, 339 insertions(+), 5 deletions(-) diff --git a/.gitignore b/.gitignore index 84414fa..e5663e3 100644 --- a/.gitignore +++ b/.gitignore @@ -1,3 +1,4 @@ /node_modules NOTES.md -/tests \ No newline at end of file +/tests +/docs \ No newline at end of file diff --git a/Gruntfile.js b/Gruntfile.js index a81b4fd..0f9a49b 100644 --- a/Gruntfile.js +++ b/Gruntfile.js @@ -61,7 +61,17 @@ module.exports = function( grunt ) { src: files, dest: outputPath, }, - } + }, + + jsdoc: { + dist: { + src: 'src/**/*.js', + options: { + destination: 'docs/api' + } + } + }, + } ); grunt.loadNpmTasks( 'grunt-contrib-concat' ); diff --git a/build/SPE.js b/build/SPE.js index 2bcdaa6..4eaac0a 100644 --- a/build/SPE.js +++ b/build/SPE.js @@ -3591,4 +3591,4 @@ SPE.Emitter.prototype.remove = function() { return this; }; -// Last line appended \ No newline at end of file +// export default SPE; \ No newline at end of file diff --git a/package-lock.json b/package-lock.json index fc9e733..7b3f844 100644 --- a/package-lock.json +++ b/package-lock.json @@ -14,9 +14,98 @@ "devDependencies": { "grunt": "^1.6.1", "grunt-contrib-concat": "^2.1.0", - "grunt-contrib-uglify": "^5.2.1" + "grunt-contrib-uglify": "^5.2.1", + "jsdoc": "^4.0.4" } }, + "node_modules/@babel/helper-string-parser": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.25.9.tgz", + "integrity": "sha512-4A/SCr/2KLd5jrtOMFzaKjVtAei3+2r/NChoBNoZ3EyP/+GlhoaEGoWOZUmFmoITP7zOJyHIMm+DYRd8o3PvHA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-validator-identifier": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.25.9.tgz", + "integrity": "sha512-Ed61U6XJc3CVRfkERJWDz4dJwKe7iLmmJsbOGu9wSloNSFttHV0I8g6UAgb7qnK5ly5bGLPd4oXZlxCdANBOWQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/parser": { + "version": "7.26.9", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.26.9.tgz", + "integrity": "sha512-81NWa1njQblgZbQHxWHpxxCzNsa3ZwvFqpUg7P+NNUU6f3UU2jBEg4OlF/J6rl8+PQGh1q6/zWScd001YwcA5A==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/types": "^7.26.9" + }, + "bin": { + "parser": "bin/babel-parser.js" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@babel/types": { + "version": "7.26.9", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.26.9.tgz", + "integrity": "sha512-Y3IR1cRnOxOCDvMmNiym7XpXQ93iGDDPHx+Zj+NM+rg0fBaShfQLkg+hKPaZCEvg5N/LeCo4+Rj/i3FuJsIQaw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-string-parser": "^7.25.9", + "@babel/helper-validator-identifier": "^7.25.9" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@jsdoc/salty": { + "version": "0.2.9", + "resolved": "https://registry.npmjs.org/@jsdoc/salty/-/salty-0.2.9.tgz", + "integrity": "sha512-yYxMVH7Dqw6nO0d5NIV8OQWnitU8k6vXH8NtgqAfIa/IUqRMxRv/NUJJ08VEKbAakwxlgBl5PJdrU0dMPStsnw==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "lodash": "^4.17.21" + }, + "engines": { + "node": ">=v12.0.0" + } + }, + "node_modules/@types/linkify-it": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/@types/linkify-it/-/linkify-it-5.0.0.tgz", + "integrity": "sha512-sVDA58zAw4eWAffKOaQH5/5j3XeayukzDk+ewSsnv3p4yJEZHCCzMDiZM8e0OUrRvmpGZ85jf4yDHkHsgBNr9Q==", + "dev": true, + "license": "MIT" + }, + "node_modules/@types/markdown-it": { + "version": "14.1.2", + "resolved": "https://registry.npmjs.org/@types/markdown-it/-/markdown-it-14.1.2.tgz", + "integrity": "sha512-promo4eFwuiW+TfGxhi+0x3czqTYJkG8qB17ZUJiVF10Xm7NLVRSLUsfRTU/6h1e24VvRnXCx+hG7li58lkzog==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/linkify-it": "^5", + "@types/mdurl": "^2" + } + }, + "node_modules/@types/mdurl": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/@types/mdurl/-/mdurl-2.0.0.tgz", + "integrity": "sha512-RGdgjQUZba5p6QEFAVx2OGb8rQDL/cPRG7GiedRzMcJ1tYnUANBncjbSB1NRGwbvjcPeikRABz2nshyPk1bhWg==", + "dev": true, + "license": "MIT" + }, "node_modules/abbrev": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/abbrev/-/abbrev-1.1.1.tgz", @@ -84,6 +173,13 @@ "dev": true, "license": "MIT" }, + "node_modules/bluebird": { + "version": "3.7.2", + "resolved": "https://registry.npmjs.org/bluebird/-/bluebird-3.7.2.tgz", + "integrity": "sha512-XpNj6GDQzdfW+r2Wnn7xiSAd7TM3jzkxGXBGTtWKuSXv1xUV+azxAm8jdWZN06QTQk+2N2XB9jRDkvbmQmcRtg==", + "dev": true, + "license": "MIT" + }, "node_modules/brace-expansion": { "version": "1.1.11", "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", @@ -108,6 +204,19 @@ "node": ">=8" } }, + "node_modules/catharsis": { + "version": "0.9.0", + "resolved": "https://registry.npmjs.org/catharsis/-/catharsis-0.9.0.tgz", + "integrity": "sha512-prMTQVpcns/tzFgFVkVp6ak6RykZyWb3gu8ckUpd6YkTlacOd3DXGJjIpD4Q6zJirizvaiAjSSHlOsA+6sNh2A==", + "dev": true, + "license": "MIT", + "dependencies": { + "lodash": "^4.17.15" + }, + "engines": { + "node": ">= 10" + } + }, "node_modules/chalk": { "version": "4.1.2", "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", @@ -189,6 +298,19 @@ "dev": true, "license": "MIT" }, + "node_modules/entities": { + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/entities/-/entities-4.5.0.tgz", + "integrity": "sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw==", + "dev": true, + "license": "BSD-2-Clause", + "engines": { + "node": ">=0.12" + }, + "funding": { + "url": "https://github.com/fb55/entities?sponsor=1" + } + }, "node_modules/escape-string-regexp": { "version": "1.0.5", "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", @@ -437,6 +559,13 @@ "which": "bin/which" } }, + "node_modules/graceful-fs": { + "version": "4.2.11", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.11.tgz", + "integrity": "sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==", + "dev": true, + "license": "ISC" + }, "node_modules/grunt": { "version": "1.6.1", "resolved": "https://registry.npmjs.org/grunt/-/grunt-1.6.1.tgz", @@ -839,6 +968,56 @@ "js-yaml": "bin/js-yaml.js" } }, + "node_modules/js2xmlparser": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/js2xmlparser/-/js2xmlparser-4.0.2.tgz", + "integrity": "sha512-6n4D8gLlLf1n5mNLQPRfViYzu9RATblzPEtm1SthMX1Pjao0r9YI9nw7ZIfRxQMERS87mcswrg+r/OYrPRX6jA==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "xmlcreate": "^2.0.4" + } + }, + "node_modules/jsdoc": { + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/jsdoc/-/jsdoc-4.0.4.tgz", + "integrity": "sha512-zeFezwyXeG4syyYHbvh1A967IAqq/67yXtXvuL5wnqCkFZe8I0vKfm+EO+YEvLguo6w9CDUbrAXVtJSHh2E8rw==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@babel/parser": "^7.20.15", + "@jsdoc/salty": "^0.2.1", + "@types/markdown-it": "^14.1.1", + "bluebird": "^3.7.2", + "catharsis": "^0.9.0", + "escape-string-regexp": "^2.0.0", + "js2xmlparser": "^4.0.2", + "klaw": "^3.0.0", + "markdown-it": "^14.1.0", + "markdown-it-anchor": "^8.6.7", + "marked": "^4.0.10", + "mkdirp": "^1.0.4", + "requizzle": "^0.2.3", + "strip-json-comments": "^3.1.0", + "underscore": "~1.13.2" + }, + "bin": { + "jsdoc": "jsdoc.js" + }, + "engines": { + "node": ">=12.0.0" + } + }, + "node_modules/jsdoc/node_modules/escape-string-regexp": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-2.0.0.tgz", + "integrity": "sha512-UpzcLCXolUWcNu5HtVMHYdXJjArjsF9C0aNnquZYY4uW/Vu0miy5YoWvbV345HauVvcAUnpRuhMMcqTcGOY2+w==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, "node_modules/kind-of": { "version": "6.0.3", "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz", @@ -849,6 +1028,16 @@ "node": ">=0.10.0" } }, + "node_modules/klaw": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/klaw/-/klaw-3.0.0.tgz", + "integrity": "sha512-0Fo5oir+O9jnXu5EefYbVK+mHMBeEVEy2cmctR1O1NECcCkPRreJKrS6Qt/j3KC2C148Dfo9i3pCmCMsdqGr0g==", + "dev": true, + "license": "MIT", + "dependencies": { + "graceful-fs": "^4.1.9" + } + }, "node_modules/liftup": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/liftup/-/liftup-3.0.1.tgz", @@ -885,6 +1074,16 @@ "node": ">= 8" } }, + "node_modules/linkify-it": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/linkify-it/-/linkify-it-5.0.0.tgz", + "integrity": "sha512-5aHCbzQRADcdP+ATqnDuhhJ/MRIqDkZX5pyjFHRRysS8vZ5AbqGEoFIb6pYHPZ+L/OC2Lc+xT8uHVVR5CAK/wQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "uc.micro": "^2.0.0" + } + }, "node_modules/lodash": { "version": "4.17.21", "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", @@ -915,6 +1114,55 @@ "node": ">=0.10.0" } }, + "node_modules/markdown-it": { + "version": "14.1.0", + "resolved": "https://registry.npmjs.org/markdown-it/-/markdown-it-14.1.0.tgz", + "integrity": "sha512-a54IwgWPaeBCAAsv13YgmALOF1elABB08FxO9i+r4VFk5Vl4pKokRPeX8u5TCgSsPi6ec1otfLjdOpVcgbpshg==", + "dev": true, + "license": "MIT", + "dependencies": { + "argparse": "^2.0.1", + "entities": "^4.4.0", + "linkify-it": "^5.0.0", + "mdurl": "^2.0.0", + "punycode.js": "^2.3.1", + "uc.micro": "^2.1.0" + }, + "bin": { + "markdown-it": "bin/markdown-it.mjs" + } + }, + "node_modules/markdown-it-anchor": { + "version": "8.6.7", + "resolved": "https://registry.npmjs.org/markdown-it-anchor/-/markdown-it-anchor-8.6.7.tgz", + "integrity": "sha512-FlCHFwNnutLgVTflOYHPW2pPcl2AACqVzExlkGQNsi4CJgqOHN7YTgDd4LuhgN1BFO3TS0vLAruV1Td6dwWPJA==", + "dev": true, + "license": "Unlicense", + "peerDependencies": { + "@types/markdown-it": "*", + "markdown-it": "*" + } + }, + "node_modules/markdown-it/node_modules/argparse": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", + "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", + "dev": true, + "license": "Python-2.0" + }, + "node_modules/marked": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/marked/-/marked-4.3.0.tgz", + "integrity": "sha512-PRsaiG84bK+AMvxziE/lCFss8juXjNaWzVbN5tXAm4XjeaS9NAHhop+PjQxz2A9h8Q4M/xGmzP8vqNwy6JeK0A==", + "dev": true, + "license": "MIT", + "bin": { + "marked": "bin/marked.js" + }, + "engines": { + "node": ">= 12" + } + }, "node_modules/maxmin": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/maxmin/-/maxmin-3.0.0.tgz", @@ -934,6 +1182,13 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/mdurl": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/mdurl/-/mdurl-2.0.0.tgz", + "integrity": "sha512-Lf+9+2r+Tdp5wXDXC4PcIBjTDtq4UKjCPMQhKIuzpJNW0b96kVqSwW0bT7FhRSfmAiFYgP+SCRvdrDozfh0U5w==", + "dev": true, + "license": "MIT" + }, "node_modules/micromatch": { "version": "4.0.8", "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.8.tgz", @@ -961,6 +1216,19 @@ "node": "*" } }, + "node_modules/mkdirp": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz", + "integrity": "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==", + "dev": true, + "license": "MIT", + "bin": { + "mkdirp": "bin/cmd.js" + }, + "engines": { + "node": ">=10" + } + }, "node_modules/nopt": { "version": "3.0.6", "resolved": "https://registry.npmjs.org/nopt/-/nopt-3.0.6.tgz", @@ -1160,6 +1428,16 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/punycode.js": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/punycode.js/-/punycode.js-2.3.1.tgz", + "integrity": "sha512-uxFIHU0YlHYhDQtV4R9J6a52SLx28BCjT+4ieh7IGbgwVJWO+km431c4yRlREUAsAmt/uMjQUyQHNEPf0M39CA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + } + }, "node_modules/rechoir": { "version": "0.7.1", "resolved": "https://registry.npmjs.org/rechoir/-/rechoir-0.7.1.tgz", @@ -1173,6 +1451,16 @@ "node": ">= 0.10" } }, + "node_modules/requizzle": { + "version": "0.2.4", + "resolved": "https://registry.npmjs.org/requizzle/-/requizzle-0.2.4.tgz", + "integrity": "sha512-JRrFk1D4OQ4SqovXOgdav+K8EAhSB/LJZqCz8tbX0KObcdeM15Ss59ozWMBWmmINMagCwmqn4ZNryUGpBsl6Jw==", + "dev": true, + "license": "MIT", + "dependencies": { + "lodash": "^4.17.21" + } + }, "node_modules/resolve": { "version": "1.22.10", "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.10.tgz", @@ -1232,6 +1520,19 @@ "dev": true, "license": "BSD-3-Clause" }, + "node_modules/strip-json-comments": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz", + "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/supports-color": { "version": "7.2.0", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", @@ -1277,6 +1578,13 @@ "node": ">=8.0" } }, + "node_modules/uc.micro": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/uc.micro/-/uc.micro-2.1.0.tgz", + "integrity": "sha512-ARDJmphmdvUk6Glw7y9DQ2bFkKBHwQHLi2lsaH6PPmz/Ka9sFOBsBluozhDltWmnv9u/cF6Rt87znRTPV+yp/A==", + "dev": true, + "license": "MIT" + }, "node_modules/uglify-js": { "version": "3.19.3", "resolved": "https://registry.npmjs.org/uglify-js/-/uglify-js-3.19.3.tgz", @@ -1300,6 +1608,13 @@ "node": ">=0.10.0" } }, + "node_modules/underscore": { + "version": "1.13.7", + "resolved": "https://registry.npmjs.org/underscore/-/underscore-1.13.7.tgz", + "integrity": "sha512-GMXzWtsc57XAtguZgaQViUOzs0KTkk8ojr3/xAxXLITqf/3EMwxC0inyETfDFjH/Krbhuep0HNbbjI9i/q3F3g==", + "dev": true, + "license": "MIT" + }, "node_modules/underscore.string": { "version": "3.3.6", "resolved": "https://registry.npmjs.org/underscore.string/-/underscore.string-3.3.6.tgz", @@ -1373,6 +1688,13 @@ "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==", "dev": true, "license": "ISC" + }, + "node_modules/xmlcreate": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/xmlcreate/-/xmlcreate-2.0.4.tgz", + "integrity": "sha512-nquOebG4sngPmGPICTS5EnxqhKbCmz5Ox5hsszI2T6U5qdrJizBc+0ilYSEjTSzU0yZcmvppztXe/5Al5fUwdg==", + "dev": true, + "license": "Apache-2.0" } } } diff --git a/package.json b/package.json index 8b6e02d..b501242 100644 --- a/package.json +++ b/package.json @@ -24,7 +24,8 @@ "devDependencies": { "grunt": "^1.6.1", "grunt-contrib-concat": "^2.1.0", - "grunt-contrib-uglify": "^5.2.1" + "grunt-contrib-uglify": "^5.2.1", + "jsdoc": "^4.0.4" }, "scripts": { "test": "grunt", From 3e5f2bf9d69a5fbc316074e0ca06b182f4610695 Mon Sep 17 00:00:00 2001 From: KellyCode Date: Fri, 21 Feb 2025 15:53:58 -0600 Subject: [PATCH 03/25] example links --- build/SPE.js | 2 +- build/SPE.min.js | 2 +- examples/activeMultiplier.html | 18 +- examples/basic.html | 20 +- examples/clock.html | 24 +- examples/clouds.html | 20 +- examples/css/style.css | 66 +- examples/distributions.html | 22 +- examples/explosion.html | 26 +- examples/fog.html | 22 +- .../Corel Auto-Preserve/sprite-explosion.png | Bin 0 -> 115671 bytes .../Corel Auto-Preserve/sprite-explosion2.png | Bin 0 -> 138117 bytes examples/img/sprite-explosion.png | Bin 115671 -> 332684 bytes examples/img/sprite-explosion2.png | Bin 138117 -> 520712 bytes examples/js/three_r110/three.min.js | 1019 +++++++++++++++ examples/js/three_r120/three.min.js | 1092 +++++++++++++++++ examples/js/three_r130/three.min.js | 6 + examples/js/three_r140/three.min.js | 6 + examples/js/three_r150/three.min.js | 7 + examples/js/three_r160/three.min.js | 7 + examples/mouseFollow.html | 20 +- examples/multipleEmitters.html | 20 +- examples/orbit.html | 20 +- examples/pool.html | 20 +- examples/rotation.html | 20 +- examples/runtimeChanging.html | 21 +- src/core/SPE.Group.js | 2 +- 27 files changed, 2439 insertions(+), 43 deletions(-) create mode 100644 examples/img/Corel Auto-Preserve/sprite-explosion.png create mode 100644 examples/img/Corel Auto-Preserve/sprite-explosion2.png create mode 100644 examples/js/three_r110/three.min.js create mode 100644 examples/js/three_r120/three.min.js create mode 100644 examples/js/three_r130/three.min.js create mode 100644 examples/js/three_r140/three.min.js create mode 100644 examples/js/three_r150/three.min.js create mode 100644 examples/js/three_r160/three.min.js diff --git a/build/SPE.js b/build/SPE.js index 4eaac0a..661dceb 100644 --- a/build/SPE.js +++ b/build/SPE.js @@ -2121,7 +2121,7 @@ SPE.Group.prototype._applyAttributesToGeometry = function() { // // Add the attribute to the geometry if it doesn't already exist. else { - geometry.addAttribute( attr, attribute.bufferAttribute ); + geometry.setAttribute( attr, attribute.bufferAttribute ); } // Mark the attribute as needing an update the next time a frame is rendered. diff --git a/build/SPE.min.js b/build/SPE.min.js index fbd9a7a..ec42574 100644 --- a/build/SPE.min.js +++ b/build/SPE.min.js @@ -5,4 +5,4 @@ * * shader-particle-engine may be freely distributed under the MIT license (See LICENSE at root of this repository.) */ -var SPE={distributions:{BOX:1,SPHERE:2,DISC:3,LINE:4},valueOverLifetimeLength:4};"function"==typeof define&&define.amd?define("spe",SPE):"undefined"!=typeof exports&&"undefined"!=typeof module&&(module.exports=SPE),SPE.TypedArrayHelper=function(e,t,r,i){this.componentSize=r||1,this.size=t||1,this.TypedArrayConstructor=e||Float32Array,this.array=new e(t*this.componentSize),this.indexOffset=i||0},SPE.TypedArrayHelper.constructor=SPE.TypedArrayHelper,SPE.TypedArrayHelper.prototype.setSize=function(e,t){var r=this.array.length;return t||(e*=this.componentSize),ethis.array.length?this.grow(r):r{var u=new THREE.Color;return function(e,t,r,i){for(var a=r.length,o=[],n=0;n{var u=new THREE.Vector3;return function(e,t,r,i,a,o,n,s){u.copy(o),u.x-=r,u.y-=i,u.z-=a,u.normalize().multiplyScalar(-this.randomFloat(n,s)),e.typedArray.setVec3Components(t,u.x,u.y,u.z)}})(),randomDirectionVector3OnDisc:(()=>{var u=new THREE.Vector3;return function(e,t,r,i,a,o,n,s){u.copy(o),u.x-=r,u.y-=i,u.z-=a,u.normalize().multiplyScalar(-this.randomFloat(n,s)),e.typedArray.setVec3Components(t,u.x,u.y,0)}})(),getPackedRotationAxis:(()=>{var r=new THREE.Vector3,i=new THREE.Vector3,a=new THREE.Color,o=new THREE.Vector3(1,1,1);return function(e,t){return r.copy(e).normalize(),i.copy(t).normalize(),r.x+=.5*-t.x+Math.random()*t.x,r.y+=.5*-t.y+Math.random()*t.y,r.z+=.5*-t.z+Math.random()*t.z,r.normalize().add(o).multiplyScalar(.5),a.setRGB(r.x,r.y,r.z),a.getHex()}})()},SPE.Group=function(e){var t=SPE.utils,r=t.types;(e=t.ensureTypedArg(e,r.OBJECT,{})).texture=t.ensureTypedArg(e.texture,r.OBJECT,{}),this.uuid=THREE.Math.generateUUID(),this.fixedTimeStep=t.ensureTypedArg(e.fixedTimeStep,r.NUMBER,.016),this.texture=t.ensureInstanceOf(e.texture.value,THREE.Texture,null),this.textureFrames=t.ensureInstanceOf(e.texture.frames,THREE.Vector2,new THREE.Vector2(1,1)),this.textureFrameCount=t.ensureTypedArg(e.texture.frameCount,r.NUMBER,this.textureFrames.x*this.textureFrames.y),this.textureLoop=t.ensureTypedArg(e.texture.loop,r.NUMBER,1),this.textureFrames.max(new THREE.Vector2(1,1)),this.hasPerspective=t.ensureTypedArg(e.hasPerspective,r.BOOLEAN,!0),this.colorize=t.ensureTypedArg(e.colorize,r.BOOLEAN,!0),this.maxParticleCount=t.ensureTypedArg(e.maxParticleCount,r.NUMBER,null),this.blending=t.ensureTypedArg(e.blending,r.NUMBER,THREE.AdditiveBlending),this.transparent=t.ensureTypedArg(e.transparent,r.BOOLEAN,!0),this.alphaTest=parseFloat(t.ensureTypedArg(e.alphaTest,r.NUMBER,0)),this.depthWrite=t.ensureTypedArg(e.depthWrite,r.BOOLEAN,!1),this.depthTest=t.ensureTypedArg(e.depthTest,r.BOOLEAN,!0),this.fog=t.ensureTypedArg(e.fog,r.BOOLEAN,!0),this.scale=t.ensureTypedArg(e.scale,r.NUMBER,300),this.emitters=[],this.emitterIDs=[],this._pool=[],this._poolCreationSettings=null,this._createNewWhenPoolEmpty=0,this._attributesNeedRefresh=!1,this._attributesNeedDynamicReset=!1,this.particleCount=0,this.uniforms={tex:{type:"t",value:this.texture},textureAnimation:{type:"v4",value:new THREE.Vector4(this.textureFrames.x,this.textureFrames.y,this.textureFrameCount,Math.max(Math.abs(this.textureLoop),1))},fogColor:{type:"c",value:this.fog?new THREE.Color:null},fogNear:{type:"f",value:10},fogFar:{type:"f",value:200},fogDensity:{type:"f",value:.5},deltaTime:{type:"f",value:0},runTime:{type:"f",value:0},scale:{type:"f",value:this.scale}},this.defines={HAS_PERSPECTIVE:this.hasPerspective,COLORIZE:this.colorize,VALUE_OVER_LIFETIME_LENGTH:SPE.valueOverLifetimeLength,SHOULD_ROTATE_TEXTURE:!1,SHOULD_ROTATE_PARTICLES:!1,SHOULD_WIGGLE_PARTICLES:!1,SHOULD_CALCULATE_SPRITE:1this.maxParticleCount&&console.warn("SPE.Group: maxParticleCount exceeded. Requesting",this.particleCount,"particles, can support only",this.maxParticleCount),e._calculatePPSValue(e.maxAge._value+e.maxAge._spread),e._setBufferUpdateRanges(this.attributeKeys),e._setAttributeOffset(i),e.group=this,e.attributes=this.attributes,r)r.hasOwnProperty(t)&&r[t]._createBufferAttribute(null!==this.maxParticleCount?this.maxParticleCount:this.particleCount);for(var o=i;ofunction(){return this[e]})(t),set:(a=>function(e){var t=n.updateMap[o],r=this[a],i=SPE.valueOverLifetimeLength;"_rotationCenter"===a?(n.updateFlags.rotationCenter=!0,n.updateCounts.rotationCenter=0):"_randomise"===a?n.resetFlags[t]=e:(n.updateFlags[t]=!0,n.updateCounts[t]=0),n.group._updateDefines(),this[a]=e,Array.isArray(r)&&SPE.utils.ensureValueOverLifetimeCompliance(n[o],i,i)})(t)}))},SPE.Emitter.prototype._setBufferUpdateRanges=function(e){this.attributeKeys=e,this.attributeCount=e.length;for(var t=this.attributeCount-1;0<=t;--t)this.bufferUpdateRanges[e[t]]={min:Number.POSITIVE_INFINITY,max:Number.NEGATIVE_INFINITY}},SPE.Emitter.prototype._calculatePPSValue=function(e){var t=this.particleCount;this.duration?this.particlesPerSecond=t/(ethis.duration?(this.alive=!1,this.age=0):(o=1===this.particleCount?o:0|o,s=(n=Math.min(o+a,this.activationEnd))-this.activationIndex|0,this._activateParticles(o,n,i,0r&&(this.activationIndex=t),this.age+=e))},SPE.Emitter.prototype.reset=function(e){if(this.age=0,!(this.alive=!1)===e){for(var t,r=this.attributeOffset,e=r+this.particleCount,i=this.paramsArray,a=this.attributes.params.bufferAttribute,o=e-1;r<=o;--o)i[t=4*o]=0,i[1+t]=0;a.updateRange.offset=0,a.updateRange.count=-1,a.needsUpdate=!0}return this},SPE.Emitter.prototype.enable=function(){return this.alive=!0,this},SPE.Emitter.prototype.disable=function(){return this.alive=!1,this},SPE.Emitter.prototype.remove=function(){return null!==this.group?this.group.removeEmitter(this):console.error("Emitter does not belong to a group, cannot remove."),this}; \ No newline at end of file +var SPE={distributions:{BOX:1,SPHERE:2,DISC:3,LINE:4},valueOverLifetimeLength:4};"function"==typeof define&&define.amd?define("spe",SPE):"undefined"!=typeof exports&&"undefined"!=typeof module&&(module.exports=SPE),SPE.TypedArrayHelper=function(e,t,r,i){this.componentSize=r||1,this.size=t||1,this.TypedArrayConstructor=e||Float32Array,this.array=new e(t*this.componentSize),this.indexOffset=i||0},SPE.TypedArrayHelper.constructor=SPE.TypedArrayHelper,SPE.TypedArrayHelper.prototype.setSize=function(e,t){var r=this.array.length;return t||(e*=this.componentSize),ethis.array.length?this.grow(r):r{var u=new THREE.Color;return function(e,t,r,i){for(var a=r.length,o=[],n=0;n{var u=new THREE.Vector3;return function(e,t,r,i,a,o,n,s){u.copy(o),u.x-=r,u.y-=i,u.z-=a,u.normalize().multiplyScalar(-this.randomFloat(n,s)),e.typedArray.setVec3Components(t,u.x,u.y,u.z)}})(),randomDirectionVector3OnDisc:(()=>{var u=new THREE.Vector3;return function(e,t,r,i,a,o,n,s){u.copy(o),u.x-=r,u.y-=i,u.z-=a,u.normalize().multiplyScalar(-this.randomFloat(n,s)),e.typedArray.setVec3Components(t,u.x,u.y,0)}})(),getPackedRotationAxis:(()=>{var r=new THREE.Vector3,i=new THREE.Vector3,a=new THREE.Color,o=new THREE.Vector3(1,1,1);return function(e,t){return r.copy(e).normalize(),i.copy(t).normalize(),r.x+=.5*-t.x+Math.random()*t.x,r.y+=.5*-t.y+Math.random()*t.y,r.z+=.5*-t.z+Math.random()*t.z,r.normalize().add(o).multiplyScalar(.5),a.setRGB(r.x,r.y,r.z),a.getHex()}})()},SPE.Group=function(e){var t=SPE.utils,r=t.types;(e=t.ensureTypedArg(e,r.OBJECT,{})).texture=t.ensureTypedArg(e.texture,r.OBJECT,{}),this.uuid=THREE.Math.generateUUID(),this.fixedTimeStep=t.ensureTypedArg(e.fixedTimeStep,r.NUMBER,.016),this.texture=t.ensureInstanceOf(e.texture.value,THREE.Texture,null),this.textureFrames=t.ensureInstanceOf(e.texture.frames,THREE.Vector2,new THREE.Vector2(1,1)),this.textureFrameCount=t.ensureTypedArg(e.texture.frameCount,r.NUMBER,this.textureFrames.x*this.textureFrames.y),this.textureLoop=t.ensureTypedArg(e.texture.loop,r.NUMBER,1),this.textureFrames.max(new THREE.Vector2(1,1)),this.hasPerspective=t.ensureTypedArg(e.hasPerspective,r.BOOLEAN,!0),this.colorize=t.ensureTypedArg(e.colorize,r.BOOLEAN,!0),this.maxParticleCount=t.ensureTypedArg(e.maxParticleCount,r.NUMBER,null),this.blending=t.ensureTypedArg(e.blending,r.NUMBER,THREE.AdditiveBlending),this.transparent=t.ensureTypedArg(e.transparent,r.BOOLEAN,!0),this.alphaTest=parseFloat(t.ensureTypedArg(e.alphaTest,r.NUMBER,0)),this.depthWrite=t.ensureTypedArg(e.depthWrite,r.BOOLEAN,!1),this.depthTest=t.ensureTypedArg(e.depthTest,r.BOOLEAN,!0),this.fog=t.ensureTypedArg(e.fog,r.BOOLEAN,!0),this.scale=t.ensureTypedArg(e.scale,r.NUMBER,300),this.emitters=[],this.emitterIDs=[],this._pool=[],this._poolCreationSettings=null,this._createNewWhenPoolEmpty=0,this._attributesNeedRefresh=!1,this._attributesNeedDynamicReset=!1,this.particleCount=0,this.uniforms={tex:{type:"t",value:this.texture},textureAnimation:{type:"v4",value:new THREE.Vector4(this.textureFrames.x,this.textureFrames.y,this.textureFrameCount,Math.max(Math.abs(this.textureLoop),1))},fogColor:{type:"c",value:this.fog?new THREE.Color:null},fogNear:{type:"f",value:10},fogFar:{type:"f",value:200},fogDensity:{type:"f",value:.5},deltaTime:{type:"f",value:0},runTime:{type:"f",value:0},scale:{type:"f",value:this.scale}},this.defines={HAS_PERSPECTIVE:this.hasPerspective,COLORIZE:this.colorize,VALUE_OVER_LIFETIME_LENGTH:SPE.valueOverLifetimeLength,SHOULD_ROTATE_TEXTURE:!1,SHOULD_ROTATE_PARTICLES:!1,SHOULD_WIGGLE_PARTICLES:!1,SHOULD_CALCULATE_SPRITE:1this.maxParticleCount&&console.warn("SPE.Group: maxParticleCount exceeded. Requesting",this.particleCount,"particles, can support only",this.maxParticleCount),e._calculatePPSValue(e.maxAge._value+e.maxAge._spread),e._setBufferUpdateRanges(this.attributeKeys),e._setAttributeOffset(i),e.group=this,e.attributes=this.attributes,r)r.hasOwnProperty(t)&&r[t]._createBufferAttribute(null!==this.maxParticleCount?this.maxParticleCount:this.particleCount);for(var o=i;ofunction(){return this[e]})(t),set:(a=>function(e){var t=n.updateMap[o],r=this[a],i=SPE.valueOverLifetimeLength;"_rotationCenter"===a?(n.updateFlags.rotationCenter=!0,n.updateCounts.rotationCenter=0):"_randomise"===a?n.resetFlags[t]=e:(n.updateFlags[t]=!0,n.updateCounts[t]=0),n.group._updateDefines(),this[a]=e,Array.isArray(r)&&SPE.utils.ensureValueOverLifetimeCompliance(n[o],i,i)})(t)}))},SPE.Emitter.prototype._setBufferUpdateRanges=function(e){this.attributeKeys=e,this.attributeCount=e.length;for(var t=this.attributeCount-1;0<=t;--t)this.bufferUpdateRanges[e[t]]={min:Number.POSITIVE_INFINITY,max:Number.NEGATIVE_INFINITY}},SPE.Emitter.prototype._calculatePPSValue=function(e){var t=this.particleCount;this.duration?this.particlesPerSecond=t/(ethis.duration?(this.alive=!1,this.age=0):(o=1===this.particleCount?o:0|o,s=(n=Math.min(o+a,this.activationEnd))-this.activationIndex|0,this._activateParticles(o,n,i,0r&&(this.activationIndex=t),this.age+=e))},SPE.Emitter.prototype.reset=function(e){if(this.age=0,!(this.alive=!1)===e){for(var t,r=this.attributeOffset,e=r+this.particleCount,i=this.paramsArray,a=this.attributes.params.bufferAttribute,o=e-1;r<=o;--o)i[t=4*o]=0,i[1+t]=0;a.updateRange.offset=0,a.updateRange.count=-1,a.needsUpdate=!0}return this},SPE.Emitter.prototype.enable=function(){return this.alive=!0,this},SPE.Emitter.prototype.disable=function(){return this.alive=!1,this},SPE.Emitter.prototype.remove=function(){return null!==this.group?this.group.removeEmitter(this):console.error("Emitter does not belong to a group, cannot remove."),this}; \ No newline at end of file diff --git a/examples/activeMultiplier.html b/examples/activeMultiplier.html index 7fec871..f1b6b65 100644 --- a/examples/activeMultiplier.html +++ b/examples/activeMultiplier.html @@ -13,7 +13,23 @@ - + + + diff --git a/examples/basic.html b/examples/basic.html index 78f838d..e663cbe 100644 --- a/examples/basic.html +++ b/examples/basic.html @@ -6,7 +6,23 @@

- + + + @@ -43,7 +59,7 @@ function initParticles() { particleGroup = new SPE.Group({ texture: { - value: THREE.TextureLoader().load('./img/smokeparticle.png') + value: new THREE.TextureLoader().load('./img/smokeparticle.png') }, maxParticleCount: 3000 }); diff --git a/examples/clock.html b/examples/clock.html index 1afbfd1..31e0c1f 100644 --- a/examples/clock.html +++ b/examples/clock.html @@ -6,7 +6,24 @@ - + + + + @@ -14,8 +31,9 @@ + + + @@ -43,7 +59,7 @@ function initParticles() { particleGroup = new SPE.Group({ texture: { - value: THREE.TextureLoader().load('./img/cloud.png') + value: new THREE.TextureLoader().load('./img/cloud.png') }, maxParticleCount: 3000, blending: THREE.NormalBlending, diff --git a/examples/css/style.css b/examples/css/style.css index b8151f0..aa68b14 100644 --- a/examples/css/style.css +++ b/examples/css/style.css @@ -1,6 +1,6 @@ * { - margin: 0; - padding: 0; + margin: 0; + padding: 0; } body { @@ -18,12 +18,58 @@ p.small { font-size: 0.8em; } +.link_man { + position: absolute; + left: 0px; + top: 50%; + -ms-transform: translateY(-50%); + transform: translateY(-50%); + background-color: black; + padding: 15px; + border-top-right-radius: 6px; + border-bottom-right-radius: 6px; +} + +.link_man h4 { + padding-left: 6px; +} + +.link_man a { + display: block; + margin: 6px; +} + +a:link { + color: lightblue; /* Default color for unvisited links */ + text-decoration: none; /* Remove underline */ +} + +a:visited { + color: lightblue; /* Change visited links to blue */ + text-decoration: none; /* Remove underline */ +} + +a:hover { + color: lightgreen; /* Change color on hover */ + text-decoration: none; /* Remove underline */ +} + +a:focus { + color: yellow; /* Change color on focus */ + text-decoration: none; /* Remove underline */ +} + +a:active { + color: lightgreen; /* Change color on click */ + text-decoration: none; /* Remove underline */ +} + .numParticles { - position: absolute; - bottom: 10px; - left: 10px; - color: white; - text-shadow: 0 0 3px rgba(0, 0, 0, 0.8); + position: absolute; + bottom: 10px; + left: 10px; + color: white; + text-shadow: 0 0 3px rgba(0, 0, 0, 0.8); } .alive-wrapper { @@ -34,13 +80,13 @@ p.small { margin-left: -12.5em; text-align: center; padding: 1em; - background-color: rgba( 255, 255, 255, 0.15 ); + background-color: rgba(255, 255, 255, 0.15); border-radius: 1em; - border: 1px solid rgba( 255, 255, 255, 0.3 ); + border: 1px solid rgba(255, 255, 255, 0.3); } #stats { position: absolute; top: 0; z-index: 2; -} \ No newline at end of file +} diff --git a/examples/distributions.html b/examples/distributions.html index a72082a..ad9e9e6 100644 --- a/examples/distributions.html +++ b/examples/distributions.html @@ -5,7 +5,23 @@ - + + + @@ -40,9 +56,9 @@ function initParticles() { particleGroup = new SPE.Group({ texture: { - value: THREE.TextureLoader().load('./img/smokeparticle.png') + value: new THREE.TextureLoader().load('./img/smokeparticle.png') }, - maxParticleCount: 3000 + maxParticleCount: 5000 }); // General distributions. diff --git a/examples/explosion.html b/examples/explosion.html index 55d1ca5..ce91ad9 100644 --- a/examples/explosion.html +++ b/examples/explosion.html @@ -6,7 +6,23 @@ - + + + @@ -41,22 +57,24 @@ clock.getDelta(); var group = new SPE.Group( { texture: { - value: THREE.TextureLoader().load( './img/sprite-explosion2.png' ), + value: new THREE.TextureLoader().load( './img/sprite-explosion2.png' ), frames: new THREE.Vector2( 5, 5 ), loop: 1 }, depthTest: true, depthWrite: false, blending: THREE.AdditiveBlending, - scale: 600 + scale: 600, + maxParticleCount: 5000 } ), shockwaveGroup = new SPE.Group( { texture: { - value: THREE.TextureLoader().load( './img/smokeparticle.png' ), + value: new THREE.TextureLoader().load( './img/smokeparticle.png' ), }, depthTest: false, depthWrite: true, blending: THREE.NormalBlending, + maxParticleCount: 5000 } ), shockwave = new SPE.Emitter( { particleCount: 200, diff --git a/examples/fog.html b/examples/fog.html index 587f68c..34e99b1 100644 --- a/examples/fog.html +++ b/examples/fog.html @@ -7,7 +7,23 @@

- + + + @@ -53,10 +69,10 @@ function initParticles() { particleGroup = new SPE.Group({ texture: { - value: THREE.TextureLoader().load('./img/smokeparticle.png') + value: new THREE.TextureLoader().load('./img/smokeparticle.png') }, fog: true, - maxParticleCount: 3000 + maxParticleCount: 25000 }); emitter = new SPE.Emitter({ diff --git a/examples/img/Corel Auto-Preserve/sprite-explosion.png b/examples/img/Corel Auto-Preserve/sprite-explosion.png new file mode 100644 index 0000000000000000000000000000000000000000..f9fa1d68e9496e72bd6b082feddae08d5aa176c3 GIT binary patch literal 115671 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�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ùqHUG89>G=@_KS0Dh+l#JpIU&y%tisn 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
w5Gmu`c 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 D=3#l% diff --git a/examples/js/three_r110/three.min.js b/examples/js/three_r110/three.min.js new file mode 100644 index 0000000..25b51b8 --- /dev/null +++ b/examples/js/three_r110/three.min.js @@ -0,0 +1,1019 @@ +// threejs.org/license +(function(k,Aa){"object"===typeof exports&&"undefined"!==typeof module?Aa(exports):"function"===typeof define&&define.amd?define(["exports"],Aa):(k=k||self,Aa(k.THREE={}))})(this,function(k){function Aa(){}function B(a,b){this.x=a||0;this.y=b||0}function wa(a,b,c,d){this._x=a||0;this._y=b||0;this._z=c||0;this._w=void 0!==d?d:1}function n(a,b,c){this.x=a||0;this.y=b||0;this.z=c||0}function Z(){this.elements=[1,0,0,0,1,0,0,0,1];0h)return!1}return!0}function mb(a,b){this.center=void 0!==a?a:new n;this.radius=void 0!==b?b:0}function Rb(a,b){this.origin=void 0!==a?a:new n;this.direction=void 0!==b?b:new n}function Oa(a,b){this.normal=void 0!==a?a:new n(1,0,0);this.constant=void 0!==b?b:0}function ba(a,b,c){this.a=void 0!==a?a:new n;this.b=void 0!== +b?b:new n;this.c=void 0!==c?c:new n}function J(a,b,c){return void 0===b&&void 0===c?this.set(a):this.setRGB(a,b,c)}function Vf(a,b,c){0>c&&(c+=1);1c?b:c<2/3?a+6*(b-a)*(2/3-c):a}function Wf(a){return.04045>a?.0773993808*a:Math.pow(.9478672986*a+.0521327014,2.4)}function Xf(a){return.0031308>a?12.92*a:1.055*Math.pow(a,.41666)-.055}function xc(a,b,c,d,e,f){this.a=a;this.b=b;this.c=c;this.normal=d&&d.isVector3?d:new n;this.vertexNormals=Array.isArray(d)?d:[];this.color= +e&&e.isColor?e:new J;this.vertexColors=Array.isArray(e)?e:[];this.materialIndex=void 0!==f?f:0}function O(){Object.defineProperty(this,"id",{value:Ui++});this.uuid=P.generateUUID();this.name="";this.type="Material";this.fog=!0;this.blending=1;this.side=0;this.vertexTangents=this.flatShading=!1;this.vertexColors=0;this.opacity=1;this.transparent=!1;this.blendSrc=204;this.blendDst=205;this.blendEquation=100;this.blendEquationAlpha=this.blendDstAlpha=this.blendSrcAlpha=null;this.depthFunc=3;this.depthWrite= +this.depthTest=!0;this.stencilWriteMask=255;this.stencilFunc=519;this.stencilRef=0;this.stencilFuncMask=255;this.stencilZPass=this.stencilZFail=this.stencilFail=7680;this.stencilWrite=!1;this.clippingPlanes=null;this.clipShadows=this.clipIntersection=!1;this.shadowSide=null;this.colorWrite=!0;this.precision=null;this.polygonOffset=!1;this.polygonOffsetUnits=this.polygonOffsetFactor=0;this.dithering=!1;this.alphaTest=0;this.premultipliedAlpha=!1;this.toneMapped=this.visible=!0;this.userData={};this.needsUpdate= +!0}function Ga(a){O.call(this);this.type="MeshBasicMaterial";this.color=new J(16777215);this.lightMap=this.map=null;this.lightMapIntensity=1;this.aoMap=null;this.aoMapIntensity=1;this.envMap=this.alphaMap=this.specularMap=null;this.combine=0;this.reflectivity=1;this.refractionRatio=.98;this.wireframe=!1;this.wireframeLinewidth=1;this.wireframeLinejoin=this.wireframeLinecap="round";this.morphTargets=this.skinning=!1;this.setValues(a)}function N(a,b,c){if(Array.isArray(a))throw new TypeError("THREE.BufferAttribute: array should be a Typed Array."); +this.name="";this.array=a;this.itemSize=b;this.count=void 0!==a?a.length/b:0;this.normalized=!0===c;this.usage=35044;this.updateRange={offset:0,count:-1};this.version=0}function wd(a,b,c){N.call(this,new Int8Array(a),b,c)}function xd(a,b,c){N.call(this,new Uint8Array(a),b,c)}function yd(a,b,c){N.call(this,new Uint8ClampedArray(a),b,c)}function zd(a,b,c){N.call(this,new Int16Array(a),b,c)}function Sb(a,b,c){N.call(this,new Uint16Array(a),b,c)}function Ad(a,b,c){N.call(this,new Int32Array(a),b,c)}function Tb(a, +b,c){N.call(this,new Uint32Array(a),b,c)}function A(a,b,c){N.call(this,new Float32Array(a),b,c)}function Bd(a,b,c){N.call(this,new Float64Array(a),b,c)}function ih(){this.vertices=[];this.normals=[];this.colors=[];this.uvs=[];this.uvs2=[];this.groups=[];this.morphTargets={};this.skinWeights=[];this.skinIndices=[];this.boundingSphere=this.boundingBox=null;this.groupsNeedUpdate=this.uvsNeedUpdate=this.colorsNeedUpdate=this.normalsNeedUpdate=this.verticesNeedUpdate=!1}function jh(a){if(0===a.length)return-Infinity; +for(var b=a[0],c=1,d=a.length;cb&&(b=a[c]);return b}function D(){Object.defineProperty(this,"id",{value:Vi+=2});this.uuid=P.generateUUID();this.name="";this.type="BufferGeometry";this.index=null;this.attributes={};this.morphAttributes={};this.groups=[];this.boundingSphere=this.boundingBox=null;this.drawRange={start:0,count:Infinity};this.userData={}}function ea(a,b){E.call(this);this.type="Mesh";this.geometry=void 0!==a?a:new D;this.material=void 0!==b?b:new Ga({color:16777215*Math.random()}); +this.drawMode=0;this.updateMorphTargets()}function kh(a,b,c,d,e,f,g,h){if(null===(1===b.side?d.intersectTriangle(g,f,e,!0,h):d.intersectTriangle(e,f,g,2!==b.side,h)))return null;Ee.copy(h);Ee.applyMatrix4(a.matrixWorld);b=c.ray.origin.distanceTo(Ee);return bc.far?null:{distance:b,point:Ee.clone(),object:a}}function Fe(a,b,c,d,e,f,g,h,l,m,r){Ub.fromBufferAttribute(e,l);Vb.fromBufferAttribute(e,m);Wb.fromBufferAttribute(e,r);e=a.morphTargetInfluences;if(b.morphTargets&&f&&e){Yf.set(0,0,0); +Zf.set(0,0,0);$f.set(0,0,0);for(var q=0,u=f.length;qg;g++)a.setRenderTarget(f,g),a.clear(b,c,d);a.setRenderTarget(e)}}function Bb(a,b,c){Ba.call(this,a,b,c)}function Yb(a,b,c,d,e,f,g,h,l,m,r,q){Y.call(this,null,f,g,h,l,m,d,e,r,q);this.image={data:a||null, +width:b||1,height:c||1};this.magFilter=void 0!==l?l:1003;this.minFilter=void 0!==m?m:1003;this.flipY=this.generateMipmaps=!1;this.unpackAlignment=1;this.needsUpdate=!0}function Dd(a,b,c,d,e,f){this.planes=[void 0!==a?a:new Oa,void 0!==b?b:new Oa,void 0!==c?c:new Oa,void 0!==d?d:new Oa,void 0!==e?e:new Oa,void 0!==f?f:new Oa]}function ag(){function a(e,f){!1!==c&&(d(e,f),b.requestAnimationFrame(a))}var b=null,c=!1,d=null;return{start:function(){!0!==c&&null!==d&&(b.requestAnimationFrame(a),c=!0)}, +stop:function(){c=!1},setAnimationLoop:function(a){d=a},setContext:function(a){b=a}}}function Xi(a){function b(b,c){var d=b.array,e=b.usage,h=a.createBuffer();a.bindBuffer(c,h);a.bufferData(c,d,e);b.onUploadCallback();c=5126;d instanceof Float32Array?c=5126:d instanceof Float64Array?console.warn("THREE.WebGLAttributes: Unsupported data buffer format: Float64Array."):d instanceof Uint16Array?c=5123:d instanceof Int16Array?c=5122:d instanceof Uint32Array?c=5125:d instanceof Int32Array?c=5124:d instanceof +Int8Array?c=5120:d instanceof Uint8Array&&(c=5121);return{buffer:h,type:c,bytesPerElement:d.BYTES_PER_ELEMENT,version:b.version}}var c=new WeakMap;return{get:function(a){a.isInterleavedBufferAttribute&&(a=a.data);return c.get(a)},remove:function(b){b.isInterleavedBufferAttribute&&(b=b.data);var d=c.get(b);d&&(a.deleteBuffer(d.buffer),c.delete(b))},update:function(d,e){d.isInterleavedBufferAttribute&&(d=d.data);var f=c.get(d);if(void 0===f)c.set(d,b(d,e));else if(f.versionm;m++){if(q=d[m])if(h=q[0],l=q[1]){r&&e.setAttribute("morphTarget"+ +m,r[h]);f&&e.setAttribute("morphNormal"+m,f[h]);c[m]=l;continue}c[m]=0}g.getUniforms().setValue(a,"morphTargetInfluences",c)}}}function hj(a,b,c,d){var e={};return{update:function(a){var f=d.render.frame,h=a.geometry,l=b.get(a,h);e[l.id]!==f&&(h.isGeometry&&l.updateFromObject(a),b.update(l),e[l.id]=f);a.isInstancedMesh&&c.update(a.instanceMatrix,34962);return l},dispose:function(){e={}}}}function nb(a,b,c,d,e,f,g,h,l,m){a=void 0!==a?a:[];Y.call(this,a,void 0!==b?b:301,c,d,e,f,void 0!==g?g:1022,h, +l,m);this.flipY=!1}function Cc(a,b,c,d){Y.call(this,null);this.image={data:a||null,width:b||1,height:c||1,depth:d||1};this.minFilter=this.magFilter=1003;this.wrapR=1001;this.flipY=this.generateMipmaps=!1;this.needsUpdate=!0}function Dc(a,b,c,d){Y.call(this,null);this.image={data:a||null,width:b||1,height:c||1,depth:d||1};this.minFilter=this.magFilter=1003;this.wrapR=1001;this.flipY=this.generateMipmaps=!1;this.needsUpdate=!0}function Ec(a,b,c){var d=a[0];if(0>=d||0");return a.replace(dg,cg)}function Dh(a,b,c,d){a="";for(b=parseInt(b);bc;c++)b.probe.push(new n);var d=new n,e=new Q,f=new Q;return{setup:function(c,h,l){for(var g=0,r=0,q=0,k=0;9>k;k++)b.probe[k].set(0,0,0);var p=h=0,t=0,v=0,n=0,w=0,x= +0,F=0;l=l.matrixWorldInverse;c.sort(fk);k=0;for(var I=c.length;kla;la++)b.probe[la].addScaledVector(z.sh.coefficients[la],ia);else if(z.isDirectionalLight){var H=a.get(z);H.color.copy(z.color).multiplyScalar(z.intensity);H.direction.setFromMatrixPosition(z.matrixWorld);d.setFromMatrixPosition(z.target.matrixWorld); +H.direction.sub(d);H.direction.transformDirection(l);if(H.shadow=z.castShadow)ia=z.shadow,H.shadowBias=ia.bias,H.shadowRadius=ia.radius,H.shadowMapSize=ia.mapSize,b.directionalShadowMap[h]=la,b.directionalShadowMatrix[h]=z.shadow.matrix,w++;b.directional[h]=H;h++}else if(z.isSpotLight){H=a.get(z);H.position.setFromMatrixPosition(z.matrixWorld);H.position.applyMatrix4(l);H.color.copy(Ca).multiplyScalar(ia);H.distance=B;H.direction.setFromMatrixPosition(z.matrixWorld);d.setFromMatrixPosition(z.target.matrixWorld); +H.direction.sub(d);H.direction.transformDirection(l);H.coneCos=Math.cos(z.angle);H.penumbraCos=Math.cos(z.angle*(1-z.penumbra));H.decay=z.decay;if(H.shadow=z.castShadow)ia=z.shadow,H.shadowBias=ia.bias,H.shadowRadius=ia.radius,H.shadowMapSize=ia.mapSize,b.spotShadowMap[t]=la,b.spotShadowMatrix[t]=z.shadow.matrix,F++;b.spot[t]=H;t++}else if(z.isRectAreaLight)H=a.get(z),H.color.copy(Ca).multiplyScalar(ia),H.position.setFromMatrixPosition(z.matrixWorld),H.position.applyMatrix4(l),f.identity(),e.copy(z.matrixWorld), +e.premultiply(l),f.extractRotation(e),H.halfWidth.set(.5*z.width,0,0),H.halfHeight.set(0,.5*z.height,0),H.halfWidth.applyMatrix4(f),H.halfHeight.applyMatrix4(f),b.rectArea[v]=H,v++;else if(z.isPointLight){H=a.get(z);H.position.setFromMatrixPosition(z.matrixWorld);H.position.applyMatrix4(l);H.color.copy(z.color).multiplyScalar(z.intensity);H.distance=z.distance;H.decay=z.decay;if(H.shadow=z.castShadow)ia=z.shadow,H.shadowBias=ia.bias,H.shadowRadius=ia.radius,H.shadowMapSize=ia.mapSize,H.shadowCameraNear= +ia.camera.near,H.shadowCameraFar=ia.camera.far,b.pointShadowMap[p]=la,b.pointShadowMatrix[p]=z.shadow.matrix,x++;b.point[p]=H;p++}else z.isHemisphereLight&&(H=a.get(z),H.direction.setFromMatrixPosition(z.matrixWorld),H.direction.transformDirection(l),H.direction.normalize(),H.skyColor.copy(z.color).multiplyScalar(ia),H.groundColor.copy(z.groundColor).multiplyScalar(ia),b.hemi[n]=H,n++)}b.ambient[0]=g;b.ambient[1]=r;b.ambient[2]=q;c=b.hash;if(c.directionalLength!==h||c.pointLength!==p||c.spotLength!== +t||c.rectAreaLength!==v||c.hemiLength!==n||c.numDirectionalShadows!==w||c.numPointShadows!==x||c.numSpotShadows!==F)b.directional.length=h,b.spot.length=t,b.rectArea.length=v,b.point.length=p,b.hemi.length=n,b.directionalShadowMap.length=w,b.pointShadowMap.length=x,b.spotShadowMap.length=F,b.directionalShadowMatrix.length=w,b.pointShadowMatrix.length=x,b.spotShadowMatrix.length=F,c.directionalLength=h,c.pointLength=p,c.spotLength=t,c.rectAreaLength=v,c.hemiLength=n,c.numDirectionalShadows=w,c.numPointShadows= +x,c.numSpotShadows=F,b.version=hk++},state:b}}function Hh(){var a=new gk,b=[],c=[];return{init:function(){b.length=0;c.length=0},state:{lightsArray:b,shadowsArray:c,lights:a},setupLights:function(d){a.setup(b,c,d)},pushLight:function(a){b.push(a)},pushShadow:function(a){c.push(a)}}}function ik(){function a(c){c=c.target;c.removeEventListener("dispose",a);b.delete(c)}var b=new WeakMap;return{get:function(c,d){if(!1===b.has(c)){var e=new Hh;b.set(c,new WeakMap);b.get(c).set(d,e);c.addEventListener("dispose", +a)}else!1===b.get(c).has(d)?(e=new Hh,b.get(c).set(d,e)):e=b.get(c).get(d);return e},dispose:function(){b=new WeakMap}}}function Db(a){O.call(this);this.type="MeshDepthMaterial";this.depthPacking=3200;this.morphTargets=this.skinning=!1;this.displacementMap=this.alphaMap=this.map=null;this.displacementScale=1;this.displacementBias=0;this.wireframe=!1;this.wireframeLinewidth=1;this.fog=!1;this.setValues(a)}function Eb(a){O.call(this);this.type="MeshDistanceMaterial";this.referencePosition=new n;this.nearDistance= +1;this.farDistance=1E3;this.morphTargets=this.skinning=!1;this.displacementMap=this.alphaMap=this.map=null;this.displacementScale=1;this.displacementBias=0;this.fog=!1;this.setValues(a)}function Ih(a,b,c){function d(a,b,c){c=a<<0|b<<1|c<<2;var d=q[c];void 0===d&&(d=new Db({depthPacking:3201,morphTargets:a,skinning:b}),q[c]=d);return d}function e(a,b,c){c=a<<0|b<<1|c<<2;var d=k[c];void 0===d&&(d=new Eb({morphTargets:a,skinning:b}),k[c]=d);return d}function f(b,c,f,g,h,l){var m=b.geometry,r=d,q=b.customDepthMaterial; +!0===f.isPointLight&&(r=e,q=b.customDistanceMaterial);void 0===q?(q=!1,!0===c.morphTargets&&(!0===m.isBufferGeometry?q=m.morphAttributes&&m.morphAttributes.position&&0\nvoid main() {\n float mean = 0.0;\n float squared_mean = 0.0;\n \n\tfloat depth = unpackRGBAToDepth( texture2D( shadow_pass, ( gl_FragCoord.xy ) / resolution ) );\n for ( float i = -1.0; i < 1.0 ; i += SAMPLE_RATE) {\n #ifdef HORIZONAL_PASS\n vec2 distribution = decodeHalfRGBA ( texture2D( shadow_pass, ( gl_FragCoord.xy + vec2( i, 0.0 ) * radius ) / resolution ) );\n mean += distribution.x;\n squared_mean += distribution.y * distribution.y + distribution.x * distribution.x;\n #else\n float depth = unpackRGBAToDepth( texture2D( shadow_pass, ( gl_FragCoord.xy + vec2( 0.0, i ) * radius ) / resolution ) );\n mean += depth;\n squared_mean += depth * depth;\n #endif\n }\n mean = mean * HALF_SAMPLE_RATE;\n squared_mean = squared_mean * HALF_SAMPLE_RATE;\n float std_dev = pow( squared_mean - mean * mean, 0.5 );\n gl_FragColor = encodeHalfRGBA( vec2( mean, std_dev ) );\n}"}), +n=v.clone();n.defines.HORIZONAL_PASS=1;var w=new D;w.setAttribute("position",new N(new Float32Array([-1,-1,.5,3,-1,.5,-1,3,.5]),3));var x=new ea(w,v),F=this;this.enabled=!1;this.autoUpdate=!0;this.needsUpdate=!1;this.type=1;this.render=function(d,e,f){if(!1!==F.enabled&&(!1!==F.autoUpdate||!1!==F.needsUpdate)&&0!==d.length){var q=a.getRenderTarget(),k=a.getActiveCubeFace(),u=a.getActiveMipmapLevel(),t=a.state;t.setBlending(0);t.buffers.color.setClear(1,1,1,1);t.buffers.depth.setTest(!0);t.setScissorTest(!1); +for(var p=0,y=d.length;pc||l.y>c)console.warn("THREE.WebGLShadowMap:",w,"has shadow exceeding max texture size, reducing"),l.x>c&&(m.x=Math.floor(c/I.x),l.x=m.x*I.x,z.mapSize.x=m.x),l.y>c&&(m.y=Math.floor(c/I.y),l.y=m.y*I.y,z.mapSize.y=m.y);null!==z.map||z.isPointLightShadow||3!==this.type||(I={minFilter:1006,magFilter:1006, +format:1023},z.map=new Ba(l.x,l.y,I),z.map.texture.name=w.name+".shadowMap",z.mapPass=new Ba(l.x,l.y,I),z.camera.updateProjectionMatrix());null===z.map&&(I={minFilter:1003,magFilter:1003,format:1023},z.map=new Ba(l.x,l.y,I),z.map.texture.name=w.name+".shadowMap",z.camera.updateProjectionMatrix());a.setRenderTarget(z.map);a.clear();I=z.getViewportCount();for(var Ca=0;Cad||a.height>d)e=d/Math.max(a.width,a.height);if(1>e||!0===b){if("undefined"!==typeof HTMLImageElement&&a instanceof HTMLImageElement||"undefined"!==typeof HTMLCanvasElement&&a instanceof HTMLCanvasElement||"undefined"!==typeof ImageBitmap&&a instanceof ImageBitmap)return d=b?P.floorPowerOfTwo:Math.floor,b=d(e*a.width),e=d(e*a.height),void 0===L&&(L=h(b,e)),c=c?h(b,e):L,c.width=b,c.height=e, +c.getContext("2d").drawImage(a,0,0,b,e),console.warn("THREE.WebGLRenderer: Texture has been resized from ("+a.width+"x"+a.height+") to ("+b+"x"+e+")."),c;"data"in a&&console.warn("THREE.WebGLRenderer: Image in DataTexture is too big ("+a.width+"x"+a.height+").")}return a}function m(a){return P.isPowerOfTwo(a.width)&&P.isPowerOfTwo(a.height)}function r(a,b){return a.generateMipmaps&&b&&1003!==a.minFilter&&1006!==a.minFilter}function q(b,c,e,f){a.generateMipmap(b);d.get(c).__maxMipLevel=Math.log(Math.max(e, +f))*Math.LOG2E}function k(a,c){if(!1===la)return a;var d=a;6403===a&&(5126===c&&(d=33326),5131===c&&(d=33325),5121===c&&(d=33321));6407===a&&(5126===c&&(d=34837),5131===c&&(d=34843),5121===c&&(d=32849));6408===a&&(5126===c&&(d=34836),5131===c&&(d=34842),5121===c&&(d=32856));33325===d||33326===d||34842===d||34836===d?b.get("EXT_color_buffer_float"):(34843===d||34837===d)&&console.warn("THREE.WebGLRenderer: Floating point textures with RGB format not supported. Please use RGBA instead.");return d}function p(a){return 1003=== +a||1004===a||1005===a?9728:9729}function t(b){b=b.target;b.removeEventListener("dispose",t);var c=d.get(b);void 0!==c.__webglInit&&(a.deleteTexture(c.__webglTexture),d.remove(b));b.isVideoTexture&&J.delete(b);g.memory.textures--}function v(b){b=b.target;b.removeEventListener("dispose",v);var c=d.get(b),e=d.get(b.texture);if(b){void 0!==e.__webglTexture&&a.deleteTexture(e.__webglTexture);b.depthTexture&&b.depthTexture.dispose();if(b.isWebGLRenderTargetCube)for(e=0;6>e;e++)a.deleteFramebuffer(c.__webglFramebuffer[e]), +c.__webglDepthbuffer&&a.deleteRenderbuffer(c.__webglDepthbuffer[e]);else a.deleteFramebuffer(c.__webglFramebuffer),c.__webglDepthbuffer&&a.deleteRenderbuffer(c.__webglDepthbuffer);if(b.isWebGLMultiviewRenderTarget){a.deleteTexture(c.__webglColorTexture);a.deleteTexture(c.__webglDepthStencilTexture);g.memory.textures-=2;e=0;for(var f=c.__webglViewFramebuffers.length;eu;u++)t[u]=h||e?e?b.image[u].image:b.image[u]:l(b.image[u],!1,!0,Hd);var p=t[0],v=m(p)||la,n=f.convert(b.format),y=f.convert(b.type),w=k(n,y);F(34067,b,v);if(h){for(u=0;6>u;u++){var z=t[u].mipmaps;for(h=0;hu;u++)if(e)for(c.texImage2D(34069+u,0,w,t[u].width,t[u].height,0,n,y,t[u].data),h=0;h=H&&console.warn("THREE.WebGLTextures: Trying to use "+a+" texture units while this GPU supports only "+ +H);G+=1;return a};this.resetTextureUnits=function(){G=0};this.setTexture2D=n;this.setTexture2DArray=function(a,b){var e=d.get(a);0w;w++)h.__webglFramebuffer[w]=a.createFramebuffer()}else if(h.__webglFramebuffer=a.createFramebuffer(),t)if(la){h.__webglMultisampledFramebuffer=a.createFramebuffer();h.__webglColorRenderbuffer=a.createRenderbuffer();a.bindRenderbuffer(36161, +h.__webglColorRenderbuffer);t=f.convert(e.texture.format);var z=f.convert(e.texture.type);t=k(t,z);z=A(e);a.renderbufferStorageMultisample(36161,z,t,e.width,e.height);a.bindFramebuffer(36160,h.__webglMultisampledFramebuffer);a.framebufferRenderbuffer(36160,36064,36161,h.__webglColorRenderbuffer);a.bindRenderbuffer(36161,null);e.depthBuffer&&(h.__webglDepthRenderbuffer=a.createRenderbuffer(),ia(h.__webglDepthRenderbuffer,e,!0));a.bindFramebuffer(36160,null)}else console.warn("THREE.WebGLRenderer: WebGLMultisampleRenderTarget can only be used with WebGL2."); +else if(p){w=e.width;var x=e.height;t=e.numViews;a.bindFramebuffer(36160,h.__webglFramebuffer);var I=b.get("OVR_multiview2");g.memory.textures+=2;z=a.createTexture();a.bindTexture(35866,z);a.texParameteri(35866,10240,9728);a.texParameteri(35866,10241,9728);a.texImage3D(35866,0,32856,w,x,t,0,6408,5121,null);I.framebufferTextureMultiviewOVR(36160,36064,z,0,0,t);var H=a.createTexture();a.bindTexture(35866,H);a.texParameteri(35866,10240,9728);a.texParameteri(35866,10241,9728);a.texImage3D(35866,0,35056, +w,x,t,0,34041,34042,null);I.framebufferTextureMultiviewOVR(36160,33306,H,0,0,t);x=Array(t);for(w=0;ww;w++)B(h.__webglFramebuffer[w],e,36064,34069+w);r(e.texture,y)&&q(34067,e.texture, +e.width,e.height);c.bindTexture(34067,null)}else p||(c.bindTexture(3553,l.__webglTexture),F(3553,e.texture,y),B(h.__webglFramebuffer,e,36064,3553),r(e.texture,y)&&q(3553,e.texture,e.width,e.height),c.bindTexture(3553,null));if(e.depthBuffer){h=d.get(e);l=!0===e.isWebGLRenderTargetCube;if(e.depthTexture){if(l)throw Error("target.depthTexture not supported in Cube render targets");if(e&&e.isWebGLRenderTargetCube)throw Error("Depth Texture with cube render targets is not supported");a.bindFramebuffer(36160, +h.__webglFramebuffer);if(!e.depthTexture||!e.depthTexture.isDepthTexture)throw Error("renderTarget.depthTexture must be an instance of THREE.DepthTexture");d.get(e.depthTexture).__webglTexture&&e.depthTexture.image.width===e.width&&e.depthTexture.image.height===e.height||(e.depthTexture.image.width=e.width,e.depthTexture.image.height=e.height,e.depthTexture.needsUpdate=!0);n(e.depthTexture,0);h=d.get(e.depthTexture).__webglTexture;if(1026===e.depthTexture.format)a.framebufferTexture2D(36160,36096, +3553,h,0);else if(1027===e.depthTexture.format)a.framebufferTexture2D(36160,33306,3553,h,0);else throw Error("Unknown depthTexture format");}else if(l)for(h.__webglDepthbuffer=[],l=0;6>l;l++)a.bindFramebuffer(36160,h.__webglFramebuffer[l]),h.__webglDepthbuffer[l]=a.createRenderbuffer(),ia(h.__webglDepthbuffer[l],e);else a.bindFramebuffer(36160,h.__webglFramebuffer),h.__webglDepthbuffer=a.createRenderbuffer(),ia(h.__webglDepthbuffer,e);a.bindFramebuffer(36160,null)}};this.updateRenderTargetMipmap= +function(a){var b=a.texture,e=m(a)||la;if(r(b,e)){e=a.isWebGLRenderTargetCube?34067:3553;var f=d.get(b).__webglTexture;c.bindTexture(e,f);q(e,b,a.width,a.height);c.bindTexture(e,null)}};this.updateMultisampleRenderTarget=function(b){if(b.isWebGLMultisampleRenderTarget)if(la){var c=d.get(b);a.bindFramebuffer(36008,c.__webglMultisampledFramebuffer);a.bindFramebuffer(36009,c.__webglFramebuffer);c=b.width;var e=b.height,f=16384;b.depthBuffer&&(f|=256);b.stencilBuffer&&(f|=1024);a.blitFramebuffer(0,0, +c,e,0,0,c,e,f,9728)}else console.warn("THREE.WebGLRenderer: WebGLMultisampleRenderTarget can only be used with WebGL2.")};this.safeSetTexture2D=function(a,b){a&&a.isWebGLRenderTarget&&(!1===Q&&(console.warn("THREE.WebGLTextures.safeSetTexture2D: don't use render targets as textures. Use their .texture property instead."),Q=!0),a=a.texture);n(a,b)};this.safeSetTextureCube=function(a,b){a&&a.isWebGLRenderTargetCube&&(!1===S&&(console.warn("THREE.WebGLTextures.safeSetTextureCube: don't use cube render targets as textures. Use their .texture property instead."), +S=!0),a=a.texture);a&&a.isCubeTexture||Array.isArray(a.image)&&6===a.image.length?w(a,b):x(a,b)}}function Kh(a,b,c){var d=c.isWebGL2;return{convert:function(a){if(1009===a)return 5121;if(1017===a)return 32819;if(1018===a)return 32820;if(1019===a)return 33635;if(1010===a)return 5120;if(1011===a)return 5122;if(1012===a)return 5123;if(1013===a)return 5124;if(1014===a)return 5125;if(1015===a)return 5126;if(1016===a){if(d)return 5131;var c=b.get("OES_texture_half_float");return null!==c?c.HALF_FLOAT_OES: +null}if(1021===a)return 6406;if(1022===a)return 6407;if(1023===a)return 6408;if(1024===a)return 6409;if(1025===a)return 6410;if(1026===a)return 6402;if(1027===a)return 34041;if(1028===a)return 6403;if(33776===a||33777===a||33778===a||33779===a)if(c=b.get("WEBGL_compressed_texture_s3tc"),null!==c){if(33776===a)return c.COMPRESSED_RGB_S3TC_DXT1_EXT;if(33777===a)return c.COMPRESSED_RGBA_S3TC_DXT1_EXT;if(33778===a)return c.COMPRESSED_RGBA_S3TC_DXT3_EXT;if(33779===a)return c.COMPRESSED_RGBA_S3TC_DXT5_EXT}else return null; +if(35840===a||35841===a||35842===a||35843===a)if(c=b.get("WEBGL_compressed_texture_pvrtc"),null!==c){if(35840===a)return c.COMPRESSED_RGB_PVRTC_4BPPV1_IMG;if(35841===a)return c.COMPRESSED_RGB_PVRTC_2BPPV1_IMG;if(35842===a)return c.COMPRESSED_RGBA_PVRTC_4BPPV1_IMG;if(35843===a)return c.COMPRESSED_RGBA_PVRTC_2BPPV1_IMG}else return null;if(36196===a)return c=b.get("WEBGL_compressed_texture_etc1"),null!==c?c.COMPRESSED_RGB_ETC1_WEBGL:null;if(37808===a||37809===a||37810===a||37811===a||37812===a||37813=== +a||37814===a||37815===a||37816===a||37817===a||37818===a||37819===a||37820===a||37821===a)return c=b.get("WEBGL_compressed_texture_astc"),null!==c?a:null;if(1020===a){if(d)return 34042;c=b.get("WEBGL_depth_texture");return null!==c?c.UNSIGNED_INT_24_8_WEBGL:null}}}}function fg(a,b,c,d){Ba.call(this,a,b,d);this.stencilBuffer=this.depthBuffer=!1;this.numViews=c}function lk(a,b){function c(a){if(a.isArrayCamera)return a.cameras;r[0]=a;return r}function d(a){if(void 0===a.isArrayCamera)return!0;a=a.cameras; +if(a.length>p)return!1;for(var b=1,c=a.length;bf.matrixWorld.determinant();aa.setMaterial(e,h);var l=k(a,c,e,f),m=!1;if(b!==d.id||Je!==l.id||Y!==(!0===e.wireframe))b=d.id,Je=l.id,Y=!0===e.wireframe,m=!0;f.morphTargetInfluences&&(ya.update(f,d,e,l), +m=!0);h=d.index;var r=d.attributes.position;c=1;!0===e.wireframe&&(h=xa.getWireframeAttribute(d),c=2);a=Aa;if(null!==h){var q=ra.get(h);a=Ba;a.setIndex(q)}if(m){if(!1!==Fa.isWebGL2||!f.isInstancedMesh&&!d.isInstancedBufferGeometry||null!==qa.get("ANGLE_instanced_arrays")){aa.initAttributes();m=d.attributes;l=l.getAttributes();var u=e.defaultAttributeValues;for(I in l){var p=l[I];if(0<=p){var t=m[I];if(void 0!==t){var n=t.normalized,v=t.itemSize,y=ra.get(t);if(void 0!==y){var w=y.buffer,x=y.type;y= +y.bytesPerElement;if(t.isInterleavedBufferAttribute){var z=t.data,F=z.stride;t=t.offset;z&&z.isInstancedInterleavedBuffer?(aa.enableAttributeAndDivisor(p,z.meshPerAttribute),void 0===d.maxInstancedCount&&(d.maxInstancedCount=z.meshPerAttribute*z.count)):aa.enableAttribute(p);K.bindBuffer(34962,w);K.vertexAttribPointer(p,v,x,n,F*y,t*y)}else t.isInstancedBufferAttribute?(aa.enableAttributeAndDivisor(p,t.meshPerAttribute),void 0===d.maxInstancedCount&&(d.maxInstancedCount=t.meshPerAttribute*t.count)): +aa.enableAttribute(p),K.bindBuffer(34962,w),K.vertexAttribPointer(p,v,x,n,0,0)}}else if("instanceMatrix"===I)y=ra.get(f.instanceMatrix),void 0!==y&&(w=y.buffer,x=y.type,aa.enableAttributeAndDivisor(p+0,1),aa.enableAttributeAndDivisor(p+1,1),aa.enableAttributeAndDivisor(p+2,1),aa.enableAttributeAndDivisor(p+3,1),K.bindBuffer(34962,w),K.vertexAttribPointer(p+0,4,x,!1,64,0),K.vertexAttribPointer(p+1,4,x,!1,64,16),K.vertexAttribPointer(p+2,4,x,!1,64,32),K.vertexAttribPointer(p+3,4,x,!1,64,48));else if(void 0!== +u&&(n=u[I],void 0!==n))switch(n.length){case 2:K.vertexAttrib2fv(p,n);break;case 3:K.vertexAttrib3fv(p,n);break;case 4:K.vertexAttrib4fv(p,n);break;default:K.vertexAttrib1fv(p,n)}}}aa.disableUnusedAttributes()}null!==h&&K.bindBuffer(34963,q.buffer)}q=Infinity;null!==h?q=h.count:void 0!==r&&(q=r.count);h=d.drawRange.start*c;r=null!==g?g.start*c:0;var I=Math.max(h,r);g=Math.max(0,Math.min(q,h+d.drawRange.count*c,r+(null!==g?g.count*c:Infinity))-1-I+1);if(0!==g){if(f.isMesh)if(!0===e.wireframe)aa.setLineWidth(e.wireframeLinewidth* +(null===R?fa:1)),a.setMode(1);else switch(f.drawMode){case 0:a.setMode(4);break;case 1:a.setMode(5);break;case 2:a.setMode(6)}else f.isLine?(e=e.linewidth,void 0===e&&(e=1),aa.setLineWidth(e*(null===R?fa:1)),f.isLineSegments?a.setMode(1):f.isLineLoop?a.setMode(2):a.setMode(3)):f.isPoints?a.setMode(0):f.isSprite&&a.setMode(4);f.isInstancedMesh?a.renderInstances(d,I,g,f.count):d.isInstancedBufferGeometry?a.renderInstances(d,I,g,d.maxInstancedCount):a.render(I,g)}};this.compile=function(a,b){C=va.get(a, +b);C.init();a.traverse(function(a){a.isLight&&(C.pushLight(a),a.castShadow&&C.pushShadow(a))});C.setupLights(b);a.traverse(function(b){if(b.material)if(Array.isArray(b.material))for(var c=0;ce.far||f.push({distance:a,distanceToRay:Math.sqrt(h),point:c,index:b,face:null,object:g}))}function lg(a,b,c,d,e,f,g,h,l){Y.call(this,a,b,c,d,e,f,g,h,l);this.format=void 0!==g?g:1022;this.minFilter=void 0!==f?f:1006;this.magFilter=void 0!==e?e:1006;this.generateMipmaps=!1}function Kc(a,b,c,d,e,f,g,h,l,m,r,q){Y.call(this,null,f,g,h,l,m,d,e,r,q);this.image= +{width:b,height:c};this.mipmaps=a;this.generateMipmaps=this.flipY=!1}function Pd(a,b,c,d,e,f,g,h,l){Y.call(this,a,b,c,d,e,f,g,h,l);this.needsUpdate=!0}function Qd(a,b,c,d,e,f,g,h,l,m){m=void 0!==m?m:1026;if(1026!==m&&1027!==m)throw Error("DepthTexture format must be either THREE.DepthFormat or THREE.DepthStencilFormat");void 0===c&&1026===m&&(c=1012);void 0===c&&1027===m&&(c=1020);Y.call(this,null,d,e,f,g,h,m,c,l);this.image={width:a,height:b};this.magFilter=void 0!==g?g:1003;this.minFilter=void 0!== +h?h:1003;this.generateMipmaps=this.flipY=!1}function Lc(a){D.call(this);this.type="WireframeGeometry";var b=[],c,d,e,f=[0,0],g={},h=["a","b","c"];if(a&&a.isGeometry){var l=a.faces;var m=0;for(d=l.length;mc;c++){var q=r[h[c]];var k=r[h[(c+1)%3]];f[0]=Math.min(q,k);f[1]=Math.max(q,k);q=f[0]+","+f[1];void 0===g[q]&&(g[q]={index1:f[0],index2:f[1]})}}for(q in g)m=g[q],h=a.vertices[m.index1],b.push(h.x,h.y,h.z),h=a.vertices[m.index2],b.push(h.x,h.y,h.z)}else if(a&&a.isBufferGeometry)if(h= +new n,null!==a.index){l=a.attributes.position;r=a.index;var p=a.groups;0===p.length&&(p=[{start:0,count:r.count,materialIndex:0}]);a=0;for(e=p.length;ac;c++)q=r.getX(m+c),k=r.getX(m+(c+1)%3),f[0]=Math.min(q,k),f[1]=Math.max(q,k),q=f[0]+","+f[1],void 0===g[q]&&(g[q]={index1:f[0],index2:f[1]});for(q in g)m=g[q],h.fromBufferAttribute(l,m.index1),b.push(h.x,h.y,h.z),h.fromBufferAttribute(l,m.index2),b.push(h.x,h.y,h.z)}else for(l=a.attributes.position, +m=0,d=l.count/3;mc;c++)g=3*m+c,h.fromBufferAttribute(l,g),b.push(h.x,h.y,h.z),g=3*m+(c+1)%3,h.fromBufferAttribute(l,g),b.push(h.x,h.y,h.z);this.setAttribute("position",new A(b,3))}function Rd(a,b,c){G.call(this);this.type="ParametricGeometry";this.parameters={func:a,slices:b,stacks:c};this.fromBufferGeometry(new Mc(a,b,c));this.mergeVertices()}function Mc(a,b,c){D.call(this);this.type="ParametricBufferGeometry";this.parameters={func:a,slices:b,stacks:c};var d=[],e=[],f=[],g=[],h= +new n,l=new n,m=new n,r=new n,q=new n,k,p;3>a.length&&console.error("THREE.ParametricGeometry: Function must now modify a Vector3 as third parameter.");var t=b+1;for(k=0;k<=c;k++){var v=k/c;for(p=0;p<=b;p++){var y=p/b;a(y,v,l);e.push(l.x,l.y,l.z);0<=y-1E-5?(a(y-1E-5,v,m),r.subVectors(l,m)):(a(y+1E-5,v,m),r.subVectors(m,l));0<=v-1E-5?(a(y,v-1E-5,m),q.subVectors(l,m)):(a(y,v+1E-5,m),q.subVectors(m,l));h.crossVectors(r,q).normalize();f.push(h.x,h.y,h.z);g.push(y,v)}}for(k=0;kd&&1===a.x&&(l[b]=a.x-1);0===c.x&&0===c.z&&(l[b]=d/2/Math.PI+.5)}D.call(this);this.type="PolyhedronBufferGeometry";this.parameters={vertices:a,indices:b,radius:c,detail:d};c=c||1;d=d||0;var h=[],l=[];(function(a){for(var c=new n,d=new n,g=new n,h=0;he&&(.2>b&&(l[a+0]+=1),.2>c&&(l[a+2]+=1),.2>d&&(l[a+4]+=1))})();this.setAttribute("position", +new A(h,3));this.setAttribute("normal",new A(h.slice(),3));this.setAttribute("uv",new A(l,2));0===d?this.computeVertexNormals():this.normalizeNormals()}function Td(a,b){G.call(this);this.type="TetrahedronGeometry";this.parameters={radius:a,detail:b};this.fromBufferGeometry(new Nc(a,b));this.mergeVertices()}function Nc(a,b){Ea.call(this,[1,1,1,-1,-1,1,-1,1,-1,1,-1,-1],[2,1,0,0,3,2,1,3,0,2,3,1],a,b);this.type="TetrahedronBufferGeometry";this.parameters={radius:a,detail:b}}function Ud(a,b){G.call(this); +this.type="OctahedronGeometry";this.parameters={radius:a,detail:b};this.fromBufferGeometry(new ac(a,b));this.mergeVertices()}function ac(a,b){Ea.call(this,[1,0,0,-1,0,0,0,1,0,0,-1,0,0,0,1,0,0,-1],[0,2,4,0,4,3,0,3,5,0,5,2,1,2,5,1,5,3,1,3,4,1,4,2],a,b);this.type="OctahedronBufferGeometry";this.parameters={radius:a,detail:b}}function Vd(a,b){G.call(this);this.type="IcosahedronGeometry";this.parameters={radius:a,detail:b};this.fromBufferGeometry(new Oc(a,b));this.mergeVertices()}function Oc(a,b){var c= +(1+Math.sqrt(5))/2;Ea.call(this,[-1,c,0,1,c,0,-1,-c,0,1,-c,0,0,-1,c,0,1,c,0,-1,-c,0,1,-c,c,0,-1,c,0,1,-c,0,-1,-c,0,1],[0,11,5,0,5,1,0,1,7,0,7,10,0,10,11,1,5,9,5,11,4,11,10,2,10,7,6,7,1,8,3,9,4,3,4,2,3,2,6,3,6,8,3,8,9,4,9,5,2,4,11,6,2,10,8,6,7,9,8,1],a,b);this.type="IcosahedronBufferGeometry";this.parameters={radius:a,detail:b}}function Wd(a,b){G.call(this);this.type="DodecahedronGeometry";this.parameters={radius:a,detail:b};this.fromBufferGeometry(new Pc(a,b));this.mergeVertices()}function Pc(a,b){var c= +(1+Math.sqrt(5))/2,d=1/c;Ea.call(this,[-1,-1,-1,-1,-1,1,-1,1,-1,-1,1,1,1,-1,-1,1,-1,1,1,1,-1,1,1,1,0,-d,-c,0,-d,c,0,d,-c,0,d,c,-d,-c,0,-d,c,0,d,-c,0,d,c,0,-c,0,-d,c,0,-d,-c,0,d,c,0,d],[3,11,7,3,7,15,3,15,13,7,19,17,7,17,6,7,6,15,17,4,8,17,8,10,17,10,6,8,0,16,8,16,2,8,2,10,0,12,1,0,1,18,0,18,16,6,10,2,6,2,13,6,13,15,2,16,18,2,18,3,2,3,13,18,1,9,18,9,11,18,11,3,4,14,12,4,12,0,4,0,8,11,9,5,11,5,19,11,19,7,19,5,14,19,14,4,19,4,17,1,12,14,1,14,5,1,5,9],a,b);this.type="DodecahedronBufferGeometry";this.parameters= +{radius:a,detail:b}}function Xd(a,b,c,d,e,f){G.call(this);this.type="TubeGeometry";this.parameters={path:a,tubularSegments:b,radius:c,radialSegments:d,closed:e};void 0!==f&&console.warn("THREE.TubeGeometry: taper has been removed.");a=new bc(a,b,c,d,e);this.tangents=a.tangents;this.normals=a.normals;this.binormals=a.binormals;this.fromBufferGeometry(a);this.mergeVertices()}function bc(a,b,c,d,e){function f(e){r=a.getPointAt(e/b,r);var f=g.normals[e];e=g.binormals[e];for(u=0;u<=d;u++){var m=u/d*Math.PI* +2,k=Math.sin(m);m=-Math.cos(m);l.x=m*f.x+k*e.x;l.y=m*f.y+k*e.y;l.z=m*f.z+k*e.z;l.normalize();t.push(l.x,l.y,l.z);h.x=r.x+c*l.x;h.y=r.y+c*l.y;h.z=r.z+c*l.z;p.push(h.x,h.y,h.z)}}D.call(this);this.type="TubeBufferGeometry";this.parameters={path:a,tubularSegments:b,radius:c,radialSegments:d,closed:e};b=b||64;c=c||1;d=d||8;e=e||!1;var g=a.computeFrenetFrames(b,e);this.tangents=g.tangents;this.normals=g.normals;this.binormals=g.binormals;var h=new n,l=new n,m=new B,r=new n,k,u,p=[],t=[],v=[],y=[];for(k= +0;k=b;e-=d)f=Sh(e,a[e],a[e+1],f);f&&cc(f,f.next)&&($d(f),f=f.next);return f}function ae(a,b){if(!a)return a; +b||(b=a);do{var c=!1;if(a.steiner||!cc(a,a.next)&&0!==xa(a.prev,a,a.next))a=a.next;else{$d(a);a=b=a.prev;if(a===a.next)break;c=!0}}while(c||a!==b);return b}function be(a,b,c,d,e,f,g){if(a){if(!g&&f){var h=a,l=h;do null===l.z&&(l.z=mg(l.x,l.y,d,e,f)),l.prevZ=l.prev,l=l.nextZ=l.next;while(l!==h);l.prevZ.nextZ=null;l.prevZ=null;h=l;var m,r,k,u,p=1;do{l=h;var t=h=null;for(r=0;l;){r++;var n=l;for(m=k=0;mn!==t.next.y>n&&t.next.y!==t.y&&k<(t.next.x- +t.x)*(n-t.y)/(t.next.y-t.y)+t.x&&(r=!r),t=t.next;while(t!==l);t=r}l=t}if(l){a=Uh(g,h);g=ae(g,g.next);a=ae(a,a.next);be(g,b,c,d,e,f);be(a,b,c,d,e,f);break a}h=h.next}g=g.next}while(g!==a)}break}}}}function mk(a,b,c,d){var e=a.prev,f=a.next;if(0<=xa(e,a,f))return!1;var g=e.x>a.x?e.x>f.x?e.x:f.x:a.x>f.x?a.x:f.x,h=e.y>a.y?e.y>f.y?e.y:f.y:a.y>f.y?a.y:f.y,l=mg(e.x=l&&d&&d.z<= +b;){if(c!==a.prev&&c!==a.next&&Sc(e.x,e.y,a.x,a.y,f.x,f.y,c.x,c.y)&&0<=xa(c.prev,c,c.next))return!1;c=c.prevZ;if(d!==a.prev&&d!==a.next&&Sc(e.x,e.y,a.x,a.y,f.x,f.y,d.x,d.y)&&0<=xa(d.prev,d,d.next))return!1;d=d.nextZ}for(;c&&c.z>=l;){if(c!==a.prev&&c!==a.next&&Sc(e.x,e.y,a.x,a.y,f.x,f.y,c.x,c.y)&&0<=xa(c.prev,c,c.next))return!1;c=c.prevZ}for(;d&&d.z<=b;){if(d!==a.prev&&d!==a.next&&Sc(e.x,e.y,a.x,a.y,f.x,f.y,d.x,d.y)&&0<=xa(d.prev,d,d.next))return!1;d=d.nextZ}return!0}function nk(a,b){return a.x-b.x} +function ok(a,b){var c=b,d=a.x,e=a.y,f=-Infinity;do{if(e<=c.y&&e>=c.next.y&&c.next.y!==c.y){var g=c.x+(e-c.y)*(c.next.x-c.x)/(c.next.y-c.y);if(g<=d&&g>f){f=g;if(g===d){if(e===c.y)return c;if(e===c.next.y)return c.next}var h=c.x=c.x&&c.x>=g&&d!==c.x&&Sc(eh.x)&&ce(c,a)&&(h=c,m=r)}c= +c.next}return h}function mg(a,b,c,d,e){a=32767*(a-c)*e;b=32767*(b-d)*e;a=(a|a<<8)&16711935;a=(a|a<<4)&252645135;a=(a|a<<2)&858993459;b=(b|b<<8)&16711935;b=(b|b<<4)&252645135;b=(b|b<<2)&858993459;return(a|a<<1)&1431655765|((b|b<<1)&1431655765)<<1}function pk(a){var b=a,c=a;do{if(b.xxa(a.prev,a,a.next)?0<=xa(a,b,a.next)&&0<=xa(a,a.prev,b):0>xa(a,b,a.prev)||0>xa(a,a.next,b)}function Uh(a,b){var c=new ng(a.i,a.x,a.y),d=new ng(b.i,b.x,b.y),e=a.next,f=b.prev;a.next=b;b.prev=a;c.next=e;e.prev=c;d.next=c;c.prev=d;f.next=d;d.prev=f;return d}function Sh(a,b,c,d){a=new ng(a, +b,c);d?(a.next=d.next,a.prev=d,d.next.prev=a,d.next=a):(a.prev=a,a.next=a);return a}function $d(a){a.next.prev=a.prev;a.prev.next=a.next;a.prevZ&&(a.prevZ.nextZ=a.nextZ);a.nextZ&&(a.nextZ.prevZ=a.prevZ)}function ng(a,b,c){this.i=a;this.x=b;this.y=c;this.nextZ=this.prevZ=this.z=this.next=this.prev=null;this.steiner=!1}function Vh(a){var b=a.length;2Number.EPSILON){var l=Math.sqrt(h),m=Math.sqrt(f*f+g*g);h=b.x-e/l;b=b.y+d/l;g=((c.x-g/m-h)*g-(c.y+f/m-b)*f)/(d*g-e*f);f=h+d*g-a.x;d=b+e*g-a.y;e=f*f+ +d*d;if(2>=e)return new B(f,d);e=Math.sqrt(e/2)}else a=!1,d>Number.EPSILON?f>Number.EPSILON&&(a=!0):d<-Number.EPSILON?f<-Number.EPSILON&&(a=!0):Math.sign(e)===Math.sign(g)&&(a=!0),a?(f=-e,e=Math.sqrt(h)):(f=d,d=e,e=Math.sqrt(h/2));return new B(f/e,d/e)}function h(a,b){for(M=a.length;0<=--M;){var c=M;var f=M-1;0>f&&(f=a.length-1);var g,h=x+2*E;for(g=0;gk;k++){var q=m[f[k]];var n=m[f[(k+1)%3]];d[0]=Math.min(q,n);d[1]=Math.max(q,n);q=d[0]+","+d[1];void 0===e[q]?e[q]={index1:d[0],index2:d[1],face1:h,face2:void 0}:e[q].face2=h}for(q in e)if(d=e[q],void 0===d.face2||g[d.face1].normal.dot(g[d.face2].normal)<= +b)f=a[d.index1],c.push(f.x,f.y,f.z),f=a[d.index2],c.push(f.x,f.y,f.z);this.setAttribute("position",new A(c,3))}function gc(a,b,c,d,e,f,g,h){G.call(this);this.type="CylinderGeometry";this.parameters={radiusTop:a,radiusBottom:b,height:c,radialSegments:d,heightSegments:e,openEnded:f,thetaStart:g,thetaLength:h};this.fromBufferGeometry(new rb(a,b,c,d,e,f,g,h));this.mergeVertices()}function rb(a,b,c,d,e,f,g,h){function l(c){var e,f=new B,l=new n,r=0,v=!0===c?a:b,x=!0===c?1:-1;var A=t;for(e=1;e<=d;e++)q.push(0, +y*x,0),u.push(0,x,0),p.push(.5,.5),t++;var H=t;for(e=0;e<=d;e++){var E=e/d*h+g,C=Math.cos(E);E=Math.sin(E);l.x=v*E;l.y=y*x;l.z=v*C;q.push(l.x,l.y,l.z);u.push(0,x,0);f.x=.5*C+.5;f.y=.5*E*x+.5;p.push(f.x,f.y);t++}for(e=0;ethis.duration&& +this.resetDuration()}function rk(a){switch(a.toLowerCase()){case "scalar":case "double":case "float":case "number":case "integer":return Zc;case "vector":case "vector2":case "vector3":case "vector4":return $c;case "color":return Ue;case "quaternion":return le;case "bool":case "boolean":return Te;case "string":return We}throw Error("THREE.KeyframeTrack: Unsupported typeName: "+a);}function sk(a){if(void 0===a.type)throw Error("THREE.KeyframeTrack: track type undefined, can not parse");var b=rk(a.type); +if(void 0===a.times){var c=[],d=[];ta.flattenJSON(a.keys,c,d,"value");a.times=c;a.values=d}return void 0!==b.parse?b.parse(a):new b(a.name,a.times,a.values,a.interpolation)}function og(a,b,c){var d=this,e=!1,f=0,g=0,h=void 0,l=[];this.onStart=void 0;this.onLoad=a;this.onProgress=b;this.onError=c;this.itemStart=function(a){g++;if(!1===e&&void 0!==d.onStart)d.onStart(a,f,g);e=!0};this.itemEnd=function(a){f++;if(void 0!==d.onProgress)d.onProgress(a,f,g);if(f===g&&(e=!1,void 0!==d.onLoad))d.onLoad()}; +this.itemError=function(a){if(void 0!==d.onError)d.onError(a)};this.resolveURL=function(a){return h?h(a):a};this.setURLModifier=function(a){h=a;return this};this.addHandler=function(a,b){l.push(a,b);return this};this.removeHandler=function(a){a=l.indexOf(a);-1!==a&&l.splice(a,2);return this};this.getHandler=function(a){for(var b=0,c=l.length;ba;a++)this.coefficients.push(new n)}function Xa(a,b){T.call(this,void 0,b);this.sh=void 0!==a?a:new of}function xg(a,b,c){Xa.call(this,void 0,c);a=(new J).set(a);c=(new J).set(b);b=new n(a.r,a.g,a.b);a=new n(c.r,c.g,c.b);c=Math.sqrt(Math.PI);var d=c*Math.sqrt(.75);this.sh.coefficients[0].copy(b).add(a).multiplyScalar(c);this.sh.coefficients[1].copy(b).sub(a).multiplyScalar(d)}function yg(a,b){Xa.call(this,void 0,b);a=(new J).set(a);this.sh.coefficients[0].set(a.r,a.g,a.b).multiplyScalar(2*Math.sqrt(Math.PI))} +function ai(){this.type="StereoCamera";this.aspect=1;this.eyeSep=.064;this.cameraL=new U;this.cameraL.layers.enable(1);this.cameraL.matrixAutoUpdate=!1;this.cameraR=new U;this.cameraR.layers.enable(2);this.cameraR.matrixAutoUpdate=!1;this._cache={focus:null,fov:null,aspect:null,near:null,far:null,zoom:null,eyeSep:null}}function zg(a){this.autoStart=void 0!==a?a:!0;this.elapsedTime=this.oldTime=this.startTime=0;this.running=!1}function Ag(){E.call(this);this.type="AudioListener";this.context=Bg.getContext(); +this.gain=this.context.createGain();this.gain.connect(this.context.destination);this.filter=null;this.timeDelta=0;this._clock=new zg}function cd(a){E.call(this);this.type="Audio";this.listener=a;this.context=a.context;this.gain=this.context.createGain();this.gain.connect(a.getInput());this.autoplay=!1;this.buffer=null;this.detune=0;this.loop=!1;this.offset=this.loopEnd=this.loopStart=0;this.duration=void 0;this.playbackRate=1;this.isPlaying=!1;this.hasPlaybackControl=!0;this.sourceType="empty";this._pausedAt= +this._startedAt=0;this.filters=[]}function Cg(a){cd.call(this,a);this.panner=this.context.createPanner();this.panner.panningModel="HRTF";this.panner.connect(this.gain)}function Dg(a,b){this.analyser=a.context.createAnalyser();this.analyser.fftSize=void 0!==b?b:2048;this.data=new Uint8Array(this.analyser.frequencyBinCount);a.getOutput().connect(this.analyser)}function Eg(a,b,c){this.binding=a;this.valueSize=c;a=Float64Array;switch(b){case "quaternion":b=this._slerp;break;case "string":case "bool":a= +Array;b=this._select;break;default:b=this._lerp}this.buffer=new a(4*c);this._mixBufferRegion=b;this.referenceCount=this.useCount=this.cumulativeWeight=0}function bi(a,b,c){c=c||ya.parseTrackName(b);this._targetGroup=a;this._bindings=a.subscribe_(b,c)}function ya(a,b,c){this.path=b;this.parsedPath=c||ya.parseTrackName(b);this.node=ya.findNode(a,this.parsedPath.nodeName)||a;this.rootNode=a}function ci(){this.uuid=P.generateUUID();this._objects=Array.prototype.slice.call(arguments);this.nCachedObjects_= +0;var a={};this._indicesByUUID=a;for(var b=0,c=arguments.length;b!==c;++b)a[arguments[b].uuid]=b;this._paths=[];this._parsedPaths=[];this._bindings=[];this._bindingsIndicesByPath={};var d=this;this.stats={objects:{get total(){return d._objects.length},get inUse(){return this.total-d.nCachedObjects_}},get bindingsPerObject(){return d._bindings.length}}}function di(a,b,c){this._mixer=a;this._clip=b;this._localRoot=c||null;a=b.tracks;b=a.length;c=Array(b);for(var d={endingStart:2400,endingEnd:2400}, +e=0;e!==b;++e){var f=a[e].createInterpolant(null);c[e]=f;f.settings=d}this._interpolantSettings=d;this._interpolants=c;this._propertyBindings=Array(b);this._weightInterpolant=this._timeScaleInterpolant=this._byClipCacheIndex=this._cacheIndex=null;this.loop=2201;this._loopCount=-1;this._startTime=null;this.time=0;this._effectiveWeight=this.weight=this._effectiveTimeScale=this.timeScale=1;this.repetitions=Infinity;this.paused=!1;this.enabled=!0;this.clampWhenFinished=!1;this.zeroSlopeAtEnd=this.zeroSlopeAtStart= +!0}function Fg(a){this._root=a;this._initMemoryManager();this.time=this._accuIndex=0;this.timeScale=1}function pf(a,b){"string"===typeof a&&(console.warn("THREE.Uniform: Type parameter is no longer needed."),a=b);this.value=a}function Gg(a,b,c){pb.call(this,a,b);this.meshPerAttribute=c||1}function ei(a,b,c,d){this.ray=new Rb(a,b);this.near=c||0;this.far=d||Infinity;this.camera=null;this.params={Mesh:{},Line:{},LOD:{},Points:{threshold:1},Sprite:{}};Object.defineProperties(this.params,{PointCloud:{get:function(){console.warn("THREE.Raycaster: params.PointCloud has been renamed to params.Points."); +return this.Points}}})}function fi(a,b){return a.distance-b.distance}function Hg(a,b,c,d){if(!1!==a.visible&&(a.raycast(b,c),!0===d)){a=a.children;d=0;for(var e=a.length;dc;c++,d++){var e=c/32*Math.PI*2,f=d/32*Math.PI*2;b.push(Math.cos(e),Math.sin(e),1,Math.cos(f),Math.sin(f),1)}a.setAttribute("position",new A(b,3));b=new R({fog:!1});this.cone=new X(a,b);this.add(this.cone);this.update()}function ii(a){var b=[];a&&a.isBone&&b.push(a);for(var c= +0;ca?-1:0we;we++)oa[we]=(16>we?"0":"")+ +we.toString(16);var P={DEG2RAD:Math.PI/180,RAD2DEG:180/Math.PI,generateUUID:function(){var a=4294967295*Math.random()|0,b=4294967295*Math.random()|0,c=4294967295*Math.random()|0,d=4294967295*Math.random()|0;return(oa[a&255]+oa[a>>8&255]+oa[a>>16&255]+oa[a>>24&255]+"-"+oa[b&255]+oa[b>>8&255]+"-"+oa[b>>16&15|64]+oa[b>>24&255]+"-"+oa[c&63|128]+oa[c>>8&255]+"-"+oa[c>>16&255]+oa[c>>24&255]+oa[d&255]+oa[d>>8&255]+oa[d>>16&255]+oa[d>>24&255]).toUpperCase()},clamp:function(a,b,c){return Math.max(b,Math.min(c, +a))},euclideanModulo:function(a,b){return(a%b+b)%b},mapLinear:function(a,b,c,d,e){return d+(a-b)*(e-d)/(c-b)},lerp:function(a,b,c){return(1-c)*a+c*b},smoothstep:function(a,b,c){if(a<=b)return 0;if(a>=c)return 1;a=(a-b)/(c-b);return a*a*(3-2*a)},smootherstep:function(a,b,c){if(a<=b)return 0;if(a>=c)return 1;a=(a-b)/(c-b);return a*a*a*(a*(6*a-15)+10)},randInt:function(a,b){return a+Math.floor(Math.random()*(b-a+1))},randFloat:function(a,b){return a+Math.random()*(b-a)},randFloatSpread:function(a){return a* +(.5-Math.random())},degToRad:function(a){return a*P.DEG2RAD},radToDeg:function(a){return a*P.RAD2DEG},isPowerOfTwo:function(a){return 0===(a&a-1)&&0!==a},ceilPowerOfTwo:function(a){return Math.pow(2,Math.ceil(Math.log(a)/Math.LN2))},floorPowerOfTwo:function(a){return Math.pow(2,Math.floor(Math.log(a)/Math.LN2))}};Object.defineProperties(B.prototype,{width:{get:function(){return this.x},set:function(a){this.x=a}},height:{get:function(){return this.y},set:function(a){this.y=a}}});Object.assign(B.prototype, +{isVector2:!0,set:function(a,b){this.x=a;this.y=b;return this},setScalar:function(a){this.y=this.x=a;return this},setX:function(a){this.x=a;return this},setY:function(a){this.y=a;return this},setComponent:function(a,b){switch(a){case 0:this.x=b;break;case 1:this.y=b;break;default:throw Error("index is out of range: "+a);}return this},getComponent:function(a){switch(a){case 0:return this.x;case 1:return this.y;default:throw Error("index is out of range: "+a);}},clone:function(){return new this.constructor(this.x, +this.y)},copy:function(a){this.x=a.x;this.y=a.y;return this},add:function(a,b){if(void 0!==b)return console.warn("THREE.Vector2: .add() now only accepts one argument. Use .addVectors( a, b ) instead."),this.addVectors(a,b);this.x+=a.x;this.y+=a.y;return this},addScalar:function(a){this.x+=a;this.y+=a;return this},addVectors:function(a,b){this.x=a.x+b.x;this.y=a.y+b.y;return this},addScaledVector:function(a,b){this.x+=a.x*b;this.y+=a.y*b;return this},sub:function(a,b){if(void 0!==b)return console.warn("THREE.Vector2: .sub() now only accepts one argument. Use .subVectors( a, b ) instead."), +this.subVectors(a,b);this.x-=a.x;this.y-=a.y;return this},subScalar:function(a){this.x-=a;this.y-=a;return this},subVectors:function(a,b){this.x=a.x-b.x;this.y=a.y-b.y;return this},multiply:function(a){this.x*=a.x;this.y*=a.y;return this},multiplyScalar:function(a){this.x*=a;this.y*=a;return this},divide:function(a){this.x/=a.x;this.y/=a.y;return this},divideScalar:function(a){return this.multiplyScalar(1/a)},applyMatrix3:function(a){var b=this.x,c=this.y;a=a.elements;this.x=a[0]*b+a[3]*c+a[6];this.y= +a[1]*b+a[4]*c+a[7];return this},min:function(a){this.x=Math.min(this.x,a.x);this.y=Math.min(this.y,a.y);return this},max:function(a){this.x=Math.max(this.x,a.x);this.y=Math.max(this.y,a.y);return this},clamp:function(a,b){this.x=Math.max(a.x,Math.min(b.x,this.x));this.y=Math.max(a.y,Math.min(b.y,this.y));return this},clampScalar:function(a,b){this.x=Math.max(a,Math.min(b,this.x));this.y=Math.max(a,Math.min(b,this.y));return this},clampLength:function(a,b){var c=this.length();return this.divideScalar(c|| +1).multiplyScalar(Math.max(a,Math.min(b,c)))},floor:function(){this.x=Math.floor(this.x);this.y=Math.floor(this.y);return this},ceil:function(){this.x=Math.ceil(this.x);this.y=Math.ceil(this.y);return this},round:function(){this.x=Math.round(this.x);this.y=Math.round(this.y);return this},roundToZero:function(){this.x=0>this.x?Math.ceil(this.x):Math.floor(this.x);this.y=0>this.y?Math.ceil(this.y):Math.floor(this.y);return this},negate:function(){this.x=-this.x;this.y=-this.y;return this},dot:function(a){return this.x* +a.x+this.y*a.y},cross:function(a){return this.x*a.y-this.y*a.x},lengthSq:function(){return this.x*this.x+this.y*this.y},length:function(){return Math.sqrt(this.x*this.x+this.y*this.y)},manhattanLength:function(){return Math.abs(this.x)+Math.abs(this.y)},normalize:function(){return this.divideScalar(this.length()||1)},angle:function(){var a=Math.atan2(this.y,this.x);0>a&&(a+=2*Math.PI);return a},distanceTo:function(a){return Math.sqrt(this.distanceToSquared(a))},distanceToSquared:function(a){var b= +this.x-a.x;a=this.y-a.y;return b*b+a*a},manhattanDistanceTo:function(a){return Math.abs(this.x-a.x)+Math.abs(this.y-a.y)},setLength:function(a){return this.normalize().multiplyScalar(a)},lerp:function(a,b){this.x+=(a.x-this.x)*b;this.y+=(a.y-this.y)*b;return this},lerpVectors:function(a,b,c){return this.subVectors(b,a).multiplyScalar(c).add(a)},equals:function(a){return a.x===this.x&&a.y===this.y},fromArray:function(a,b){void 0===b&&(b=0);this.x=a[b];this.y=a[b+1];return this},toArray:function(a, +b){void 0===a&&(a=[]);void 0===b&&(b=0);a[b]=this.x;a[b+1]=this.y;return a},fromBufferAttribute:function(a,b,c){void 0!==c&&console.warn("THREE.Vector2: offset has been removed from .fromBufferAttribute().");this.x=a.getX(b);this.y=a.getY(b);return this},rotateAround:function(a,b){var c=Math.cos(b);b=Math.sin(b);var d=this.x-a.x,e=this.y-a.y;this.x=d*c-e*b+a.x;this.y=d*b+e*c+a.y;return this}});Object.assign(wa,{slerp:function(a,b,c,d){return c.copy(a).slerp(b,d)},slerpFlat:function(a,b,c,d,e,f,g){var h= +c[d+0],l=c[d+1],m=c[d+2];c=c[d+3];d=e[f+0];var k=e[f+1],q=e[f+2];e=e[f+3];if(c!==e||h!==d||l!==k||m!==q){f=1-g;var n=h*d+l*k+m*q+c*e,p=0<=n?1:-1,t=1-n*n;t>Number.EPSILON&&(t=Math.sqrt(t),n=Math.atan2(t,n*p),f=Math.sin(f*n)/t,g=Math.sin(g*n)/t);p*=g;h=h*f+d*p;l=l*f+k*p;m=m*f+q*p;c=c*f+e*p;f===1-g&&(g=1/Math.sqrt(h*h+l*l+m*m+c*c),h*=g,l*=g,m*=g,c*=g)}a[b]=h;a[b+1]=l;a[b+2]=m;a[b+3]=c}});Object.defineProperties(wa.prototype,{x:{get:function(){return this._x},set:function(a){this._x=a;this._onChangeCallback()}}, +y:{get:function(){return this._y},set:function(a){this._y=a;this._onChangeCallback()}},z:{get:function(){return this._z},set:function(a){this._z=a;this._onChangeCallback()}},w:{get:function(){return this._w},set:function(a){this._w=a;this._onChangeCallback()}}});Object.assign(wa.prototype,{isQuaternion:!0,set:function(a,b,c,d){this._x=a;this._y=b;this._z=c;this._w=d;this._onChangeCallback();return this},clone:function(){return new this.constructor(this._x,this._y,this._z,this._w)},copy:function(a){this._x= +a.x;this._y=a.y;this._z=a.z;this._w=a.w;this._onChangeCallback();return this},setFromEuler:function(a,b){if(!a||!a.isEuler)throw Error("THREE.Quaternion: .setFromEuler() now expects an Euler rotation rather than a Vector3 and order.");var c=a._x,d=a._y,e=a._z;a=a.order;var f=Math.cos,g=Math.sin,h=f(c/2),l=f(d/2);f=f(e/2);c=g(c/2);d=g(d/2);e=g(e/2);"XYZ"===a?(this._x=c*l*f+h*d*e,this._y=h*d*f-c*l*e,this._z=h*l*e+c*d*f,this._w=h*l*f-c*d*e):"YXZ"===a?(this._x=c*l*f+h*d*e,this._y=h*d*f-c*l*e,this._z= +h*l*e-c*d*f,this._w=h*l*f+c*d*e):"ZXY"===a?(this._x=c*l*f-h*d*e,this._y=h*d*f+c*l*e,this._z=h*l*e+c*d*f,this._w=h*l*f-c*d*e):"ZYX"===a?(this._x=c*l*f-h*d*e,this._y=h*d*f+c*l*e,this._z=h*l*e-c*d*f,this._w=h*l*f+c*d*e):"YZX"===a?(this._x=c*l*f+h*d*e,this._y=h*d*f+c*l*e,this._z=h*l*e-c*d*f,this._w=h*l*f-c*d*e):"XZY"===a&&(this._x=c*l*f-h*d*e,this._y=h*d*f-c*l*e,this._z=h*l*e+c*d*f,this._w=h*l*f+c*d*e);!1!==b&&this._onChangeCallback();return this},setFromAxisAngle:function(a,b){b/=2;var c=Math.sin(b); +this._x=a.x*c;this._y=a.y*c;this._z=a.z*c;this._w=Math.cos(b);this._onChangeCallback();return this},setFromRotationMatrix:function(a){var b=a.elements,c=b[0];a=b[4];var d=b[8],e=b[1],f=b[5],g=b[9],h=b[2],l=b[6];b=b[10];var m=c+f+b;0f&&c>b?(c=2*Math.sqrt(1+c-f-b),this._w=(l-g)/c,this._x=.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=.25*c,this._z=(g+l)/ +c):(c=2*Math.sqrt(1+b-c-f),this._w=(e-a)/c,this._x=(d+h)/c,this._y=(g+l)/c,this._z=.25*c);this._onChangeCallback();return this},setFromUnitVectors:function(a,b){var c=a.dot(b)+1;1E-6>c?(c=0,Math.abs(a.x)>Math.abs(a.z)?(this._x=-a.y,this._y=a.x,this._z=0):(this._x=0,this._y=-a.z,this._z=a.y)):(this._x=a.y*b.z-a.z*b.y,this._y=a.z*b.x-a.x*b.z,this._z=a.x*b.y-a.y*b.x);this._w=c;return this.normalize()},angleTo:function(a){return 2*Math.acos(Math.abs(P.clamp(this.dot(a),-1,1)))},rotateTowards:function(a, +b){var c=this.angleTo(a);if(0===c)return this;this.slerp(a,Math.min(1,b/c));return this},inverse:function(){return this.conjugate()},conjugate:function(){this._x*=-1;this._y*=-1;this._z*=-1;this._onChangeCallback();return this},dot:function(a){return this._x*a._x+this._y*a._y+this._z*a._z+this._w*a._w},lengthSq:function(){return this._x*this._x+this._y*this._y+this._z*this._z+this._w*this._w},length:function(){return Math.sqrt(this._x*this._x+this._y*this._y+this._z*this._z+this._w*this._w)},normalize:function(){var a= +this.length();0===a?(this._z=this._y=this._x=0,this._w=1):(a=1/a,this._x*=a,this._y*=a,this._z*=a,this._w*=a);this._onChangeCallback();return this},multiply:function(a,b){return void 0!==b?(console.warn("THREE.Quaternion: .multiply() now only accepts one argument. Use .multiplyQuaternions( a, b ) instead."),this.multiplyQuaternions(a,b)):this.multiplyQuaternions(this,a)},premultiply:function(a){return this.multiplyQuaternions(a,this)},multiplyQuaternions:function(a,b){var c=a._x,d=a._y,e=a._z;a=a._w; +var f=b._x,g=b._y,h=b._z;b=b._w;this._x=c*b+a*f+d*h-e*g;this._y=d*b+a*g+e*f-c*h;this._z=e*b+a*h+c*g-d*f;this._w=a*b-c*f-d*g-e*h;this._onChangeCallback();return this},slerp:function(a,b){if(0===b)return this;if(1===b)return this.copy(a);var c=this._x,d=this._y,e=this._z,f=this._w,g=f*a._w+c*a._x+d*a._y+e*a._z;0>g?(this._w=-a._w,this._x=-a._x,this._y=-a._y,this._z=-a._z,g=-g):this.copy(a);if(1<=g)return this._w=f,this._x=c,this._y=d,this._z=e,this;a=1-g*g;if(a<=Number.EPSILON)return g=1-b,this._w=g* +f+b*this._w,this._x=g*c+b*this._x,this._y=g*d+b*this._y,this._z=g*e+b*this._z,this.normalize(),this._onChangeCallback(),this;a=Math.sqrt(a);var h=Math.atan2(a,g);g=Math.sin((1-b)*h)/a;b=Math.sin(b*h)/a;this._w=f*g+this._w*b;this._x=c*g+this._x*b;this._y=d*g+this._y*b;this._z=e*g+this._z*b;this._onChangeCallback();return this},equals:function(a){return a._x===this._x&&a._y===this._y&&a._z===this._z&&a._w===this._w},fromArray:function(a,b){void 0===b&&(b=0);this._x=a[b];this._y=a[b+1];this._z=a[b+2]; +this._w=a[b+3];this._onChangeCallback();return this},toArray:function(a,b){void 0===a&&(a=[]);void 0===b&&(b=0);a[b]=this._x;a[b+1]=this._y;a[b+2]=this._z;a[b+3]=this._w;return a},_onChange:function(a){this._onChangeCallback=a;return this},_onChangeCallback:function(){}});var Mg=new n,li=new wa;Object.assign(n.prototype,{isVector3:!0,set:function(a,b,c){this.x=a;this.y=b;this.z=c;return this},setScalar:function(a){this.z=this.y=this.x=a;return this},setX:function(a){this.x=a;return this},setY:function(a){this.y= +a;return this},setZ:function(a){this.z=a;return this},setComponent:function(a,b){switch(a){case 0:this.x=b;break;case 1:this.y=b;break;case 2:this.z=b;break;default:throw Error("index is out of range: "+a);}return this},getComponent:function(a){switch(a){case 0:return this.x;case 1:return this.y;case 2:return this.z;default:throw Error("index is out of range: "+a);}},clone:function(){return new this.constructor(this.x,this.y,this.z)},copy:function(a){this.x=a.x;this.y=a.y;this.z=a.z;return this}, +add:function(a,b){if(void 0!==b)return console.warn("THREE.Vector3: .add() now only accepts one argument. Use .addVectors( a, b ) instead."),this.addVectors(a,b);this.x+=a.x;this.y+=a.y;this.z+=a.z;return this},addScalar:function(a){this.x+=a;this.y+=a;this.z+=a;return this},addVectors:function(a,b){this.x=a.x+b.x;this.y=a.y+b.y;this.z=a.z+b.z;return this},addScaledVector:function(a,b){this.x+=a.x*b;this.y+=a.y*b;this.z+=a.z*b;return this},sub:function(a,b){if(void 0!==b)return console.warn("THREE.Vector3: .sub() now only accepts one argument. Use .subVectors( a, b ) instead."), +this.subVectors(a,b);this.x-=a.x;this.y-=a.y;this.z-=a.z;return this},subScalar:function(a){this.x-=a;this.y-=a;this.z-=a;return this},subVectors:function(a,b){this.x=a.x-b.x;this.y=a.y-b.y;this.z=a.z-b.z;return this},multiply:function(a,b){if(void 0!==b)return console.warn("THREE.Vector3: .multiply() now only accepts one argument. Use .multiplyVectors( a, b ) instead."),this.multiplyVectors(a,b);this.x*=a.x;this.y*=a.y;this.z*=a.z;return this},multiplyScalar:function(a){this.x*=a;this.y*=a;this.z*= +a;return this},multiplyVectors:function(a,b){this.x=a.x*b.x;this.y=a.y*b.y;this.z=a.z*b.z;return this},applyEuler:function(a){a&&a.isEuler||console.error("THREE.Vector3: .applyEuler() now expects an Euler rotation rather than a Vector3 and order.");return this.applyQuaternion(li.setFromEuler(a))},applyAxisAngle:function(a,b){return this.applyQuaternion(li.setFromAxisAngle(a,b))},applyMatrix3:function(a){var b=this.x,c=this.y,d=this.z;a=a.elements;this.x=a[0]*b+a[3]*c+a[6]*d;this.y=a[1]*b+a[4]*c+a[7]* +d;this.z=a[2]*b+a[5]*c+a[8]*d;return this},applyMatrix4:function(a){var b=this.x,c=this.y,d=this.z;a=a.elements;var e=1/(a[3]*b+a[7]*c+a[11]*d+a[15]);this.x=(a[0]*b+a[4]*c+a[8]*d+a[12])*e;this.y=(a[1]*b+a[5]*c+a[9]*d+a[13])*e;this.z=(a[2]*b+a[6]*c+a[10]*d+a[14])*e;return this},applyQuaternion:function(a){var b=this.x,c=this.y,d=this.z,e=a.x,f=a.y,g=a.z;a=a.w;var h=a*b+f*d-g*c,l=a*c+g*b-e*d,m=a*d+e*c-f*b;b=-e*b-f*c-g*d;this.x=h*a+b*-e+l*-g-m*-f;this.y=l*a+b*-f+m*-e-h*-g;this.z=m*a+b*-g+h*-f-l*-e;return this}, +project:function(a){return this.applyMatrix4(a.matrixWorldInverse).applyMatrix4(a.projectionMatrix)},unproject:function(a){return this.applyMatrix4(a.projectionMatrixInverse).applyMatrix4(a.matrixWorld)},transformDirection:function(a){var b=this.x,c=this.y,d=this.z;a=a.elements;this.x=a[0]*b+a[4]*c+a[8]*d;this.y=a[1]*b+a[5]*c+a[9]*d;this.z=a[2]*b+a[6]*c+a[10]*d;return this.normalize()},divide:function(a){this.x/=a.x;this.y/=a.y;this.z/=a.z;return this},divideScalar:function(a){return this.multiplyScalar(1/ +a)},min:function(a){this.x=Math.min(this.x,a.x);this.y=Math.min(this.y,a.y);this.z=Math.min(this.z,a.z);return this},max:function(a){this.x=Math.max(this.x,a.x);this.y=Math.max(this.y,a.y);this.z=Math.max(this.z,a.z);return this},clamp:function(a,b){this.x=Math.max(a.x,Math.min(b.x,this.x));this.y=Math.max(a.y,Math.min(b.y,this.y));this.z=Math.max(a.z,Math.min(b.z,this.z));return this},clampScalar:function(a,b){this.x=Math.max(a,Math.min(b,this.x));this.y=Math.max(a,Math.min(b,this.y));this.z=Math.max(a, +Math.min(b,this.z));return this},clampLength:function(a,b){var c=this.length();return this.divideScalar(c||1).multiplyScalar(Math.max(a,Math.min(b,c)))},floor:function(){this.x=Math.floor(this.x);this.y=Math.floor(this.y);this.z=Math.floor(this.z);return this},ceil:function(){this.x=Math.ceil(this.x);this.y=Math.ceil(this.y);this.z=Math.ceil(this.z);return this},round:function(){this.x=Math.round(this.x);this.y=Math.round(this.y);this.z=Math.round(this.z);return this},roundToZero:function(){this.x= +0>this.x?Math.ceil(this.x):Math.floor(this.x);this.y=0>this.y?Math.ceil(this.y):Math.floor(this.y);this.z=0>this.z?Math.ceil(this.z):Math.floor(this.z);return this},negate:function(){this.x=-this.x;this.y=-this.y;this.z=-this.z;return this},dot:function(a){return this.x*a.x+this.y*a.y+this.z*a.z},lengthSq:function(){return this.x*this.x+this.y*this.y+this.z*this.z},length:function(){return Math.sqrt(this.x*this.x+this.y*this.y+this.z*this.z)},manhattanLength:function(){return Math.abs(this.x)+Math.abs(this.y)+ +Math.abs(this.z)},normalize:function(){return this.divideScalar(this.length()||1)},setLength:function(a){return this.normalize().multiplyScalar(a)},lerp:function(a,b){this.x+=(a.x-this.x)*b;this.y+=(a.y-this.y)*b;this.z+=(a.z-this.z)*b;return this},lerpVectors:function(a,b,c){return this.subVectors(b,a).multiplyScalar(c).add(a)},cross:function(a,b){return void 0!==b?(console.warn("THREE.Vector3: .cross() now only accepts one argument. Use .crossVectors( a, b ) instead."),this.crossVectors(a,b)):this.crossVectors(this, +a)},crossVectors:function(a,b){var c=a.x,d=a.y;a=a.z;var e=b.x,f=b.y;b=b.z;this.x=d*b-a*f;this.y=a*e-c*b;this.z=c*f-d*e;return this},projectOnVector:function(a){var b=a.dot(this)/a.lengthSq();return this.copy(a).multiplyScalar(b)},projectOnPlane:function(a){Mg.copy(this).projectOnVector(a);return this.sub(Mg)},reflect:function(a){return this.sub(Mg.copy(a).multiplyScalar(2*this.dot(a)))},angleTo:function(a){var b=Math.sqrt(this.lengthSq()*a.lengthSq());0===b&&console.error("THREE.Vector3: angleTo() can't handle zero length vectors."); +a=this.dot(a)/b;return Math.acos(P.clamp(a,-1,1))},distanceTo:function(a){return Math.sqrt(this.distanceToSquared(a))},distanceToSquared:function(a){var b=this.x-a.x,c=this.y-a.y;a=this.z-a.z;return b*b+c*c+a*a},manhattanDistanceTo:function(a){return Math.abs(this.x-a.x)+Math.abs(this.y-a.y)+Math.abs(this.z-a.z)},setFromSpherical:function(a){return this.setFromSphericalCoords(a.radius,a.phi,a.theta)},setFromSphericalCoords:function(a,b,c){var d=Math.sin(b)*a;this.x=d*Math.sin(c);this.y=Math.cos(b)* +a;this.z=d*Math.cos(c);return this},setFromCylindrical:function(a){return this.setFromCylindricalCoords(a.radius,a.theta,a.y)},setFromCylindricalCoords:function(a,b,c){this.x=a*Math.sin(b);this.y=c;this.z=a*Math.cos(b);return this},setFromMatrixPosition:function(a){a=a.elements;this.x=a[12];this.y=a[13];this.z=a[14];return this},setFromMatrixScale:function(a){var b=this.setFromMatrixColumn(a,0).length(),c=this.setFromMatrixColumn(a,1).length();a=this.setFromMatrixColumn(a,2).length();this.x=b;this.y= +c;this.z=a;return this},setFromMatrixColumn:function(a,b){return this.fromArray(a.elements,4*b)},equals:function(a){return a.x===this.x&&a.y===this.y&&a.z===this.z},fromArray:function(a,b){void 0===b&&(b=0);this.x=a[b];this.y=a[b+1];this.z=a[b+2];return this},toArray:function(a,b){void 0===a&&(a=[]);void 0===b&&(b=0);a[b]=this.x;a[b+1]=this.y;a[b+2]=this.z;return a},fromBufferAttribute:function(a,b,c){void 0!==c&&console.warn("THREE.Vector3: offset has been removed from .fromBufferAttribute()."); +this.x=a.getX(b);this.y=a.getY(b);this.z=a.getZ(b);return this}});var oc=new n;Object.assign(Z.prototype,{isMatrix3:!0,set:function(a,b,c,d,e,f,g,h,l){var m=this.elements;m[0]=a;m[1]=d;m[2]=g;m[3]=b;m[4]=e;m[5]=h;m[6]=c;m[7]=f;m[8]=l;return this},identity:function(){this.set(1,0,0,0,1,0,0,0,1);return this},clone:function(){return(new this.constructor).fromArray(this.elements)},copy:function(a){var b=this.elements;a=a.elements;b[0]=a[0];b[1]=a[1];b[2]=a[2];b[3]=a[3];b[4]=a[4];b[5]=a[5];b[6]=a[6];b[7]= +a[7];b[8]=a[8];return this},setFromMatrix4:function(a){a=a.elements;this.set(a[0],a[4],a[8],a[1],a[5],a[9],a[2],a[6],a[10]);return this},applyToBufferAttribute:function(a){for(var b=0,c=a.count;bc;c++)if(b[c]!==a[c])return!1;return!0},fromArray:function(a,b){void 0===b&&(b=0);for(var c=0;9>c;c++)this.elements[c]=a[c+b];return this},toArray:function(a,b){void 0===a&&(a=[]);void 0===b&&(b=0);var c=this.elements;a[b]=c[0];a[b+1]=c[1];a[b+2]=c[2];a[b+3]=c[3];a[b+4]=c[4];a[b+5]=c[5];a[b+6]=c[6];a[b+7]=c[7];a[b+8]=c[8]; +return a}});var ld,Jb={getDataURL:function(a){if("undefined"==typeof HTMLCanvasElement)return a.src;if(!(a instanceof HTMLCanvasElement)){void 0===ld&&(ld=document.createElementNS("http://www.w3.org/1999/xhtml","canvas"));ld.width=a.width;ld.height=a.height;var b=ld.getContext("2d");a instanceof ImageData?b.putImageData(a,0,0):b.drawImage(a,0,0,a.width,a.height);a=ld}return 2048a.x||1a.x?0:1;break;case 1002:a.x=1===Math.abs(Math.floor(a.x)%2)?Math.ceil(a.x)-a.x:a.x-Math.floor(a.x)}if(0>a.y||1a.y?0:1;break;case 1002:a.y=1===Math.abs(Math.floor(a.y)%2)?Math.ceil(a.y)-a.y:a.y-Math.floor(a.y)}this.flipY&&(a.y=1-a.y);return a}});Object.defineProperty(Y.prototype,"needsUpdate",{set:function(a){!0===a&&this.version++}});Object.defineProperties(da.prototype,{width:{get:function(){return this.z}, +set:function(a){this.z=a}},height:{get:function(){return this.w},set:function(a){this.w=a}}});Object.assign(da.prototype,{isVector4:!0,set:function(a,b,c,d){this.x=a;this.y=b;this.z=c;this.w=d;return this},setScalar:function(a){this.w=this.z=this.y=this.x=a;return this},setX:function(a){this.x=a;return this},setY:function(a){this.y=a;return this},setZ:function(a){this.z=a;return this},setW:function(a){this.w=a;return this},setComponent:function(a,b){switch(a){case 0:this.x=b;break;case 1:this.y=b; +break;case 2:this.z=b;break;case 3:this.w=b;break;default:throw Error("index is out of range: "+a);}return this},getComponent:function(a){switch(a){case 0:return this.x;case 1:return this.y;case 2:return this.z;case 3:return this.w;default:throw Error("index is out of range: "+a);}},clone:function(){return new this.constructor(this.x,this.y,this.z,this.w)},copy:function(a){this.x=a.x;this.y=a.y;this.z=a.z;this.w=void 0!==a.w?a.w:1;return this},add:function(a,b){if(void 0!==b)return console.warn("THREE.Vector4: .add() now only accepts one argument. Use .addVectors( a, b ) instead."), +this.addVectors(a,b);this.x+=a.x;this.y+=a.y;this.z+=a.z;this.w+=a.w;return this},addScalar:function(a){this.x+=a;this.y+=a;this.z+=a;this.w+=a;return this},addVectors:function(a,b){this.x=a.x+b.x;this.y=a.y+b.y;this.z=a.z+b.z;this.w=a.w+b.w;return this},addScaledVector:function(a,b){this.x+=a.x*b;this.y+=a.y*b;this.z+=a.z*b;this.w+=a.w*b;return this},sub:function(a,b){if(void 0!==b)return console.warn("THREE.Vector4: .sub() now only accepts one argument. Use .subVectors( a, b ) instead."),this.subVectors(a, +b);this.x-=a.x;this.y-=a.y;this.z-=a.z;this.w-=a.w;return this},subScalar:function(a){this.x-=a;this.y-=a;this.z-=a;this.w-=a;return this},subVectors:function(a,b){this.x=a.x-b.x;this.y=a.y-b.y;this.z=a.z-b.z;this.w=a.w-b.w;return this},multiplyScalar:function(a){this.x*=a;this.y*=a;this.z*=a;this.w*=a;return this},applyMatrix4:function(a){var b=this.x,c=this.y,d=this.z,e=this.w;a=a.elements;this.x=a[0]*b+a[4]*c+a[8]*d+a[12]*e;this.y=a[1]*b+a[5]*c+a[9]*d+a[13]*e;this.z=a[2]*b+a[6]*c+a[10]*d+a[14]* +e;this.w=a[3]*b+a[7]*c+a[11]*d+a[15]*e;return this},divideScalar:function(a){return this.multiplyScalar(1/a)},setAxisAngleFromQuaternion:function(a){this.w=2*Math.acos(a.w);var b=Math.sqrt(1-a.w*a.w);1E-4>b?(this.x=1,this.z=this.y=0):(this.x=a.x/b,this.y=a.y/b,this.z=a.z/b);return this},setAxisAngleFromRotationMatrix:function(a){a=a.elements;var b=a[0];var c=a[4];var d=a[8],e=a[1],f=a[5],g=a[9];var h=a[2];var l=a[6];var m=a[10];if(.01>Math.abs(c-e)&&.01>Math.abs(d-h)&&.01>Math.abs(g-l)){if(.1>Math.abs(c+ +e)&&.1>Math.abs(d+h)&&.1>Math.abs(g+l)&&.1>Math.abs(b+f+m-3))return this.set(1,0,0,0),this;a=Math.PI;b=(b+1)/2;f=(f+1)/2;m=(m+1)/2;c=(c+e)/4;d=(d+h)/4;g=(g+l)/4;b>f&&b>m?.01>b?(l=0,c=h=.707106781):(l=Math.sqrt(b),h=c/l,c=d/l):f>m?.01>f?(l=.707106781,h=0,c=.707106781):(h=Math.sqrt(f),l=c/h,c=g/h):.01>m?(h=l=.707106781,c=0):(c=Math.sqrt(m),l=d/c,h=g/c);this.set(l,h,c,a);return this}a=Math.sqrt((l-g)*(l-g)+(d-h)*(d-h)+(e-c)*(e-c));.001>Math.abs(a)&&(a=1);this.x=(l-g)/a;this.y=(d-h)/a;this.z=(e-c)/a; +this.w=Math.acos((b+f+m-1)/2);return this},min:function(a){this.x=Math.min(this.x,a.x);this.y=Math.min(this.y,a.y);this.z=Math.min(this.z,a.z);this.w=Math.min(this.w,a.w);return this},max:function(a){this.x=Math.max(this.x,a.x);this.y=Math.max(this.y,a.y);this.z=Math.max(this.z,a.z);this.w=Math.max(this.w,a.w);return this},clamp:function(a,b){this.x=Math.max(a.x,Math.min(b.x,this.x));this.y=Math.max(a.y,Math.min(b.y,this.y));this.z=Math.max(a.z,Math.min(b.z,this.z));this.w=Math.max(a.w,Math.min(b.w, +this.w));return this},clampScalar:function(a,b){this.x=Math.max(a,Math.min(b,this.x));this.y=Math.max(a,Math.min(b,this.y));this.z=Math.max(a,Math.min(b,this.z));this.w=Math.max(a,Math.min(b,this.w));return this},clampLength:function(a,b){var c=this.length();return this.divideScalar(c||1).multiplyScalar(Math.max(a,Math.min(b,c)))},floor:function(){this.x=Math.floor(this.x);this.y=Math.floor(this.y);this.z=Math.floor(this.z);this.w=Math.floor(this.w);return this},ceil:function(){this.x=Math.ceil(this.x); +this.y=Math.ceil(this.y);this.z=Math.ceil(this.z);this.w=Math.ceil(this.w);return this},round:function(){this.x=Math.round(this.x);this.y=Math.round(this.y);this.z=Math.round(this.z);this.w=Math.round(this.w);return this},roundToZero:function(){this.x=0>this.x?Math.ceil(this.x):Math.floor(this.x);this.y=0>this.y?Math.ceil(this.y):Math.floor(this.y);this.z=0>this.z?Math.ceil(this.z):Math.floor(this.z);this.w=0>this.w?Math.ceil(this.w):Math.floor(this.w);return this},negate:function(){this.x=-this.x; +this.y=-this.y;this.z=-this.z;this.w=-this.w;return this},dot:function(a){return this.x*a.x+this.y*a.y+this.z*a.z+this.w*a.w},lengthSq:function(){return this.x*this.x+this.y*this.y+this.z*this.z+this.w*this.w},length:function(){return Math.sqrt(this.x*this.x+this.y*this.y+this.z*this.z+this.w*this.w)},manhattanLength:function(){return Math.abs(this.x)+Math.abs(this.y)+Math.abs(this.z)+Math.abs(this.w)},normalize:function(){return this.divideScalar(this.length()||1)},setLength:function(a){return this.normalize().multiplyScalar(a)}, +lerp:function(a,b){this.x+=(a.x-this.x)*b;this.y+=(a.y-this.y)*b;this.z+=(a.z-this.z)*b;this.w+=(a.w-this.w)*b;return this},lerpVectors:function(a,b,c){return this.subVectors(b,a).multiplyScalar(c).add(a)},equals:function(a){return a.x===this.x&&a.y===this.y&&a.z===this.z&&a.w===this.w},fromArray:function(a,b){void 0===b&&(b=0);this.x=a[b];this.y=a[b+1];this.z=a[b+2];this.w=a[b+3];return this},toArray:function(a,b){void 0===a&&(a=[]);void 0===b&&(b=0);a[b]=this.x;a[b+1]=this.y;a[b+2]=this.z;a[b+3]= +this.w;return a},fromBufferAttribute:function(a,b,c){void 0!==c&&console.warn("THREE.Vector4: offset has been removed from .fromBufferAttribute().");this.x=a.getX(b);this.y=a.getY(b);this.z=a.getZ(b);this.w=a.getW(b);return this}});Ba.prototype=Object.assign(Object.create(Aa.prototype),{constructor:Ba,isWebGLRenderTarget:!0,setSize:function(a,b){if(this.width!==a||this.height!==b)this.width=a,this.height=b,this.texture.image.width=a,this.texture.image.height=b,this.dispose();this.viewport.set(0,0, +a,b);this.scissor.set(0,0,a,b)},clone:function(){return(new this.constructor).copy(this)},copy:function(a){this.width=a.width;this.height=a.height;this.viewport.copy(a.viewport);this.texture=a.texture.clone();this.depthBuffer=a.depthBuffer;this.stencilBuffer=a.stencilBuffer;this.depthTexture=a.depthTexture;return this},dispose:function(){this.dispatchEvent({type:"dispose"})}});Sf.prototype=Object.assign(Object.create(Ba.prototype),{constructor:Sf,isWebGLMultisampleRenderTarget:!0,copy:function(a){Ba.prototype.copy.call(this, +a);this.samples=a.samples;return this}});var Ka=new n,ca=new Q,tk=new n(0,0,0),uk=new n(1,1,1),Kb=new n,uf=new n,pa=new n;Object.assign(Q.prototype,{isMatrix4:!0,set:function(a,b,c,d,e,f,g,h,l,m,k,q,n,p,t,v){var r=this.elements;r[0]=a;r[4]=b;r[8]=c;r[12]=d;r[1]=e;r[5]=f;r[9]=g;r[13]=h;r[2]=l;r[6]=m;r[10]=k;r[14]=q;r[3]=n;r[7]=p;r[11]=t;r[15]=v;return this},identity:function(){this.set(1,0,0,0,0,1,0,0,0,0,1,0,0,0,0,1);return this},clone:function(){return(new Q).fromArray(this.elements)},copy:function(a){var b= +this.elements;a=a.elements;b[0]=a[0];b[1]=a[1];b[2]=a[2];b[3]=a[3];b[4]=a[4];b[5]=a[5];b[6]=a[6];b[7]=a[7];b[8]=a[8];b[9]=a[9];b[10]=a[10];b[11]=a[11];b[12]=a[12];b[13]=a[13];b[14]=a[14];b[15]=a[15];return this},copyPosition:function(a){var b=this.elements;a=a.elements;b[12]=a[12];b[13]=a[13];b[14]=a[14];return this},extractBasis:function(a,b,c){a.setFromMatrixColumn(this,0);b.setFromMatrixColumn(this,1);c.setFromMatrixColumn(this,2);return this},makeBasis:function(a,b,c){this.set(a.x,b.x,c.x,0,a.y, +b.y,c.y,0,a.z,b.z,c.z,0,0,0,0,1);return this},extractRotation:function(a){var b=this.elements,c=a.elements,d=1/Ka.setFromMatrixColumn(a,0).length(),e=1/Ka.setFromMatrixColumn(a,1).length();a=1/Ka.setFromMatrixColumn(a,2).length();b[0]=c[0]*d;b[1]=c[1]*d;b[2]=c[2]*d;b[3]=0;b[4]=c[4]*e;b[5]=c[5]*e;b[6]=c[6]*e;b[7]=0;b[8]=c[8]*a;b[9]=c[9]*a;b[10]=c[10]*a;b[11]=0;b[12]=0;b[13]=0;b[14]=0;b[15]=1;return this},makeRotationFromEuler:function(a){a&&a.isEuler||console.error("THREE.Matrix4: .makeRotationFromEuler() now expects a Euler rotation rather than a Vector3 and order."); +var b=this.elements,c=a.x,d=a.y,e=a.z,f=Math.cos(c);c=Math.sin(c);var g=Math.cos(d);d=Math.sin(d);var h=Math.cos(e);e=Math.sin(e);if("XYZ"===a.order){a=f*h;var l=f*e,m=c*h,k=c*e;b[0]=g*h;b[4]=-g*e;b[8]=d;b[1]=l+m*d;b[5]=a-k*d;b[9]=-c*g;b[2]=k-a*d;b[6]=m+l*d;b[10]=f*g}else"YXZ"===a.order?(a=g*h,l=g*e,m=d*h,k=d*e,b[0]=a+k*c,b[4]=m*c-l,b[8]=f*d,b[1]=f*e,b[5]=f*h,b[9]=-c,b[2]=l*c-m,b[6]=k+a*c,b[10]=f*g):"ZXY"===a.order?(a=g*h,l=g*e,m=d*h,k=d*e,b[0]=a-k*c,b[4]=-f*e,b[8]=m+l*c,b[1]=l+m*c,b[5]=f*h,b[9]= +k-a*c,b[2]=-f*d,b[6]=c,b[10]=f*g):"ZYX"===a.order?(a=f*h,l=f*e,m=c*h,k=c*e,b[0]=g*h,b[4]=m*d-l,b[8]=a*d+k,b[1]=g*e,b[5]=k*d+a,b[9]=l*d-m,b[2]=-d,b[6]=c*g,b[10]=f*g):"YZX"===a.order?(a=f*g,l=f*d,m=c*g,k=c*d,b[0]=g*h,b[4]=k-a*e,b[8]=m*e+l,b[1]=e,b[5]=f*h,b[9]=-c*h,b[2]=-d*h,b[6]=l*e+m,b[10]=a-k*e):"XZY"===a.order&&(a=f*g,l=f*d,m=c*g,k=c*d,b[0]=g*h,b[4]=-e,b[8]=d*h,b[1]=a*e+k,b[5]=f*h,b[9]=l*e-m,b[2]=m*e-l,b[6]=c*h,b[10]=k*e+a);b[3]=0;b[7]=0;b[11]=0;b[12]=0;b[13]=0;b[14]=0;b[15]=1;return this},makeRotationFromQuaternion:function(a){return this.compose(tk, +a,uk)},lookAt:function(a,b,c){var d=this.elements;pa.subVectors(a,b);0===pa.lengthSq()&&(pa.z=1);pa.normalize();Kb.crossVectors(c,pa);0===Kb.lengthSq()&&(1===Math.abs(c.z)?pa.x+=1E-4:pa.z+=1E-4,pa.normalize(),Kb.crossVectors(c,pa));Kb.normalize();uf.crossVectors(pa,Kb);d[0]=Kb.x;d[4]=uf.x;d[8]=pa.x;d[1]=Kb.y;d[5]=uf.y;d[9]=pa.y;d[2]=Kb.z;d[6]=uf.z;d[10]=pa.z;return this},multiply:function(a,b){return void 0!==b?(console.warn("THREE.Matrix4: .multiply() now only accepts one argument. Use .multiplyMatrices( a, b ) instead."), +this.multiplyMatrices(a,b)):this.multiplyMatrices(this,a)},premultiply:function(a){return this.multiplyMatrices(a,this)},multiplyMatrices:function(a,b){var c=a.elements,d=b.elements;b=this.elements;a=c[0];var e=c[4],f=c[8],g=c[12],h=c[1],l=c[5],m=c[9],k=c[13],q=c[2],n=c[6],p=c[10],t=c[14],v=c[3],y=c[7],w=c[11];c=c[15];var x=d[0],B=d[4],I=d[8],z=d[12],A=d[1],E=d[5],C=d[9],D=d[13],H=d[2],G=d[6],J=d[10],L=d[14],N=d[3],O=d[7],P=d[11];d=d[15];b[0]=a*x+e*A+f*H+g*N;b[4]=a*B+e*E+f*G+g*O;b[8]=a*I+e*C+f*J+ +g*P;b[12]=a*z+e*D+f*L+g*d;b[1]=h*x+l*A+m*H+k*N;b[5]=h*B+l*E+m*G+k*O;b[9]=h*I+l*C+m*J+k*P;b[13]=h*z+l*D+m*L+k*d;b[2]=q*x+n*A+p*H+t*N;b[6]=q*B+n*E+p*G+t*O;b[10]=q*I+n*C+p*J+t*P;b[14]=q*z+n*D+p*L+t*d;b[3]=v*x+y*A+w*H+c*N;b[7]=v*B+y*E+w*G+c*O;b[11]=v*I+y*C+w*J+c*P;b[15]=v*z+y*D+w*L+c*d;return this},multiplyScalar:function(a){var b=this.elements;b[0]*=a;b[4]*=a;b[8]*=a;b[12]*=a;b[1]*=a;b[5]*=a;b[9]*=a;b[13]*=a;b[2]*=a;b[6]*=a;b[10]*=a;b[14]*=a;b[3]*=a;b[7]*=a;b[11]*=a;b[15]*=a;return this},applyToBufferAttribute:function(a){for(var b= +0,c=a.count;bthis.determinant()&&(e=-e);a.x=d[12];a.y=d[13];a.z=d[14];ca.copy(this);a=1/e;d=1/f;var h=1/g;ca.elements[0]*=a;ca.elements[1]*=a;ca.elements[2]*=a;ca.elements[4]*=d;ca.elements[5]*=d;ca.elements[6]*=d;ca.elements[8]*=h;ca.elements[9]*=h;ca.elements[10]*=h;b.setFromRotationMatrix(ca);c.x=e;c.y=f;c.z=g;return this},makePerspective:function(a,b,c,d,e,f){void 0===f&&console.warn("THREE.Matrix4: .makePerspective() has been redefined and has a new signature. Please check the docs."); +var g=this.elements;g[0]=2*e/(b-a);g[4]=0;g[8]=(b+a)/(b-a);g[12]=0;g[1]=0;g[5]=2*e/(c-d);g[9]=(c+d)/(c-d);g[13]=0;g[2]=0;g[6]=0;g[10]=-(f+e)/(f-e);g[14]=-2*f*e/(f-e);g[3]=0;g[7]=0;g[11]=-1;g[15]=0;return this},makeOrthographic:function(a,b,c,d,e,f){var g=this.elements,h=1/(b-a),l=1/(c-d),m=1/(f-e);g[0]=2*h;g[4]=0;g[8]=0;g[12]=-((b+a)*h);g[1]=0;g[5]=2*l;g[9]=0;g[13]=-((c+d)*l);g[2]=0;g[6]=0;g[10]=-2*m;g[14]=-((f+e)*m);g[3]=0;g[7]=0;g[11]=0;g[15]=1;return this},equals:function(a){var b=this.elements; +a=a.elements;for(var c=0;16>c;c++)if(b[c]!==a[c])return!1;return!0},fromArray:function(a,b){void 0===b&&(b=0);for(var c=0;16>c;c++)this.elements[c]=a[c+b];return this},toArray:function(a,b){void 0===a&&(a=[]);void 0===b&&(b=0);var c=this.elements;a[b]=c[0];a[b+1]=c[1];a[b+2]=c[2];a[b+3]=c[3];a[b+4]=c[4];a[b+5]=c[5];a[b+6]=c[6];a[b+7]=c[7];a[b+8]=c[8];a[b+9]=c[9];a[b+10]=c[10];a[b+11]=c[11];a[b+12]=c[12];a[b+13]=c[13];a[b+14]=c[14];a[b+15]=c[15];return a}});var mi=new Q,ni=new wa;Pb.RotationOrders= +"XYZ YZX ZXY XZY YXZ ZYX".split(" ");Pb.DefaultOrder="XYZ";Object.defineProperties(Pb.prototype,{x:{get:function(){return this._x},set:function(a){this._x=a;this._onChangeCallback()}},y:{get:function(){return this._y},set:function(a){this._y=a;this._onChangeCallback()}},z:{get:function(){return this._z},set:function(a){this._z=a;this._onChangeCallback()}},order:{get:function(){return this._order},set:function(a){this._order=a;this._onChangeCallback()}}});Object.assign(Pb.prototype,{isEuler:!0,set:function(a, +b,c,d){this._x=a;this._y=b;this._z=c;this._order=d||this._order;this._onChangeCallback();return this},clone:function(){return new this.constructor(this._x,this._y,this._z,this._order)},copy:function(a){this._x=a._x;this._y=a._y;this._z=a._z;this._order=a._order;this._onChangeCallback();return this},setFromRotationMatrix:function(a,b,c){var d=P.clamp,e=a.elements;a=e[0];var f=e[4],g=e[8],h=e[1],l=e[5],m=e[9],k=e[2],n=e[6];e=e[10];b=b||this._order;"XYZ"===b?(this._y=Math.asin(d(g,-1,1)),.9999999>Math.abs(g)? +(this._x=Math.atan2(-m,e),this._z=Math.atan2(-f,a)):(this._x=Math.atan2(n,l),this._z=0)):"YXZ"===b?(this._x=Math.asin(-d(m,-1,1)),.9999999>Math.abs(m)?(this._y=Math.atan2(g,e),this._z=Math.atan2(h,l)):(this._y=Math.atan2(-k,a),this._z=0)):"ZXY"===b?(this._x=Math.asin(d(n,-1,1)),.9999999>Math.abs(n)?(this._y=Math.atan2(-k,e),this._z=Math.atan2(-f,l)):(this._y=0,this._z=Math.atan2(h,a))):"ZYX"===b?(this._y=Math.asin(-d(k,-1,1)),.9999999>Math.abs(k)?(this._x=Math.atan2(n,e),this._z=Math.atan2(h,a)): +(this._x=0,this._z=Math.atan2(-f,l))):"YZX"===b?(this._z=Math.asin(d(h,-1,1)),.9999999>Math.abs(h)?(this._x=Math.atan2(-m,l),this._y=Math.atan2(-k,a)):(this._x=0,this._y=Math.atan2(g,e))):"XZY"===b?(this._z=Math.asin(-d(f,-1,1)),.9999999>Math.abs(f)?(this._x=Math.atan2(n,l),this._y=Math.atan2(g,a)):(this._x=Math.atan2(-m,e),this._y=0)):console.warn("THREE.Euler: .setFromRotationMatrix() given unsupported order: "+b);this._order=b;!1!==c&&this._onChangeCallback();return this},setFromQuaternion:function(a, +b,c){mi.makeRotationFromQuaternion(a);return this.setFromRotationMatrix(mi,b,c)},setFromVector3:function(a,b){return this.set(a.x,a.y,a.z,b||this._order)},reorder:function(a){ni.setFromEuler(this);return this.setFromQuaternion(ni,a)},equals:function(a){return a._x===this._x&&a._y===this._y&&a._z===this._z&&a._order===this._order},fromArray:function(a){this._x=a[0];this._y=a[1];this._z=a[2];void 0!==a[3]&&(this._order=a[3]);this._onChangeCallback();return this},toArray:function(a,b){void 0===a&&(a= +[]);void 0===b&&(b=0);a[b]=this._x;a[b+1]=this._y;a[b+2]=this._z;a[b+3]=this._order;return a},toVector3:function(a){return a?a.set(this._x,this._y,this._z):new n(this._x,this._y,this._z)},_onChange:function(a){this._onChangeCallback=a;return this},_onChangeCallback:function(){}});Object.assign(Tf.prototype,{set:function(a){this.mask=1<e&&(e=m);k>f&&(f=k);n>g&&(g=n)}this.min.set(b,c,d);this.max.set(e,f,g);return this},setFromBufferAttribute:function(a){for(var b=Infinity,c=Infinity,d=Infinity,e=-Infinity,f=-Infinity,g=-Infinity,h=0,l=a.count;he&&(e=m);k>f&&(f=k);n>g&&(g=n)}this.min.set(b,c,d); +this.max.set(e,f,g);return this},setFromPoints:function(a){this.makeEmpty();for(var b=0,c=a.length;bthis.max.x||a.ythis.max.y||a.zthis.max.z?!1:!0},containsBox:function(a){return this.min.x<=a.min.x&&a.max.x<=this.max.x&&this.min.y<=a.min.y&&a.max.y<=this.max.y&&this.min.z<=a.min.z&&a.max.z<= +this.max.z},getParameter:function(a,b){void 0===b&&(console.warn("THREE.Box3: .getParameter() target is now required"),b=new n);return b.set((a.x-this.min.x)/(this.max.x-this.min.x),(a.y-this.min.y)/(this.max.y-this.min.y),(a.z-this.min.z)/(this.max.z-this.min.z))},intersectsBox:function(a){return a.max.xthis.max.x||a.max.ythis.max.y||a.max.zthis.max.z?!1:!0},intersectsSphere:function(a){this.clampPoint(a.center,ib);return ib.distanceToSquared(a.center)<= +a.radius*a.radius},intersectsPlane:function(a){if(0=-a.constant},intersectsTriangle:function(a){if(this.isEmpty())return!1; +this.getCenter(ye);wf.subVectors(this.max,ye);nd.subVectors(a.a,ye);od.subVectors(a.b,ye);pd.subVectors(a.c,ye);Lb.subVectors(od,nd);Mb.subVectors(pd,od);pc.subVectors(nd,pd);a=[0,-Lb.z,Lb.y,0,-Mb.z,Mb.y,0,-pc.z,pc.y,Lb.z,0,-Lb.x,Mb.z,0,-Mb.x,pc.z,0,-pc.x,-Lb.y,Lb.x,0,-Mb.y,Mb.x,0,-pc.y,pc.x,0];if(!Uf(a,nd,od,pd,wf))return!1;a=[1,0,0,0,1,0,0,0,1];if(!Uf(a,nd,od,pd,wf))return!1;xf.crossVectors(Lb,Mb);a=[xf.x,xf.y,xf.z];return Uf(a,nd,od,pd,wf)},clampPoint:function(a,b){void 0===b&&(console.warn("THREE.Box3: .clampPoint() target is now required"), +b=new n);return b.copy(a).clamp(this.min,this.max)},distanceToPoint:function(a){return ib.copy(a).clamp(this.min,this.max).sub(a).length()},getBoundingSphere:function(a){void 0===a&&console.error("THREE.Box3: .getBoundingSphere() target is now required");this.getCenter(a.center);a.radius=.5*this.getSize(ib).length();return a},intersect:function(a){this.min.max(a.min);this.max.min(a.max);this.isEmpty()&&this.makeEmpty();return this},union:function(a){this.min.min(a.min);this.max.max(a.max);return this}, +applyMatrix4:function(a){if(this.isEmpty())return this;wb[0].set(this.min.x,this.min.y,this.min.z).applyMatrix4(a);wb[1].set(this.min.x,this.min.y,this.max.z).applyMatrix4(a);wb[2].set(this.min.x,this.max.y,this.min.z).applyMatrix4(a);wb[3].set(this.min.x,this.max.y,this.max.z).applyMatrix4(a);wb[4].set(this.max.x,this.min.y,this.min.z).applyMatrix4(a);wb[5].set(this.max.x,this.min.y,this.max.z).applyMatrix4(a);wb[6].set(this.max.x,this.max.y,this.min.z).applyMatrix4(a);wb[7].set(this.max.x,this.max.y, +this.max.z).applyMatrix4(a);this.setFromPoints(wb);return this},translate:function(a){this.min.add(a);this.max.add(a);return this},equals:function(a){return a.min.equals(this.min)&&a.max.equals(this.max)}});var zk=new ab;Object.assign(mb.prototype,{set:function(a,b){this.center.copy(a);this.radius=b;return this},setFromPoints:function(a,b){var c=this.center;void 0!==b?c.copy(b):zk.setFromPoints(a).getCenter(c);for(var d=b=0,e=a.length;d=this.radius},containsPoint:function(a){return a.distanceToSquared(this.center)<=this.radius*this.radius},distanceToPoint:function(a){return a.distanceTo(this.center)-this.radius},intersectsSphere:function(a){var b=this.radius+a.radius;return a.center.distanceToSquared(this.center)<=b*b},intersectsBox:function(a){return a.intersectsSphere(this)}, +intersectsPlane:function(a){return Math.abs(a.distanceToPoint(this.center))<=this.radius},clampPoint:function(a,b){var c=this.center.distanceToSquared(a);void 0===b&&(console.warn("THREE.Sphere: .clampPoint() target is now required"),b=new n);b.copy(a);c>this.radius*this.radius&&(b.sub(this.center).normalize(),b.multiplyScalar(this.radius).add(this.center));return b},getBoundingBox:function(a){void 0===a&&(console.warn("THREE.Sphere: .getBoundingBox() target is now required"),a=new ab);a.set(this.center, +this.center);a.expandByScalar(this.radius);return a},applyMatrix4:function(a){this.center.applyMatrix4(a);this.radius*=a.getMaxScaleOnAxis();return this},translate:function(a){this.center.add(a);return this},equals:function(a){return a.center.equals(this.center)&&a.radius===this.radius}});var xb=new n,Ng=new n,yf=new n,Nb=new n,Og=new n,zf=new n,Pg=new n;Object.assign(Rb.prototype,{set:function(a,b){this.origin.copy(a);this.direction.copy(b);return this},clone:function(){return(new this.constructor).copy(this)}, +copy:function(a){this.origin.copy(a.origin);this.direction.copy(a.direction);return this},at:function(a,b){void 0===b&&(console.warn("THREE.Ray: .at() target is now required"),b=new n);return b.copy(this.direction).multiplyScalar(a).add(this.origin)},lookAt:function(a){this.direction.copy(a).sub(this.origin).normalize();return this},recast:function(a){this.origin.copy(this.at(a,xb));return this},closestPointToPoint:function(a,b){void 0===b&&(console.warn("THREE.Ray: .closestPointToPoint() target is now required"), +b=new n);b.subVectors(a,this.origin);a=b.dot(this.direction);return 0>a?b.copy(this.origin):b.copy(this.direction).multiplyScalar(a).add(this.origin)},distanceToPoint:function(a){return Math.sqrt(this.distanceSqToPoint(a))},distanceSqToPoint:function(a){var b=xb.subVectors(a,this.origin).dot(this.direction);if(0>b)return this.origin.distanceToSquared(a);xb.copy(this.direction).multiplyScalar(b).add(this.origin);return xb.distanceToSquared(a)},distanceSqToSegment:function(a,b,c,d){Ng.copy(a).add(b).multiplyScalar(.5); +yf.copy(b).sub(a).normalize();Nb.copy(this.origin).sub(Ng);var e=.5*a.distanceTo(b),f=-this.direction.dot(yf),g=Nb.dot(this.direction),h=-Nb.dot(yf),l=Nb.lengthSq(),m=Math.abs(1-f*f);if(0=-k?b<=k?(e=1/m,a*=e,b*=e,f=a*(a+f*b+2*g)+b*(f*a+b+2*h)+l):(b=e,a=Math.max(0,-(f*b+g)),f=-a*a+b*(b+2*h)+l):(b=-e,a=Math.max(0,-(f*b+g)),f=-a*a+b*(b+2*h)+l):b<=-k?(a=Math.max(0,-(-f*e+g)),b=0a)return null;a=Math.sqrt(a-d);d=c-a;c+=a;return 0>d&&0>c?null:0>d?this.at(c,b):this.at(d,b)}, +intersectsSphere:function(a){return this.distanceSqToPoint(a.center)<=a.radius*a.radius},distanceToPlane:function(a){var b=a.normal.dot(this.direction);if(0===b)return 0===a.distanceToPoint(this.origin)?0:null;a=-(this.origin.dot(a.normal)+a.constant)/b;return 0<=a?a:null},intersectPlane:function(a,b){a=this.distanceToPlane(a);return null===a?null:this.at(a,b)},intersectsPlane:function(a){var b=a.distanceToPoint(this.origin);return 0===b||0>a.normal.dot(this.direction)*b?!0:!1},intersectBox:function(a, +b){var c=1/this.direction.x;var d=1/this.direction.y;var e=1/this.direction.z,f=this.origin;if(0<=c){var g=(a.min.x-f.x)*c;c*=a.max.x-f.x}else g=(a.max.x-f.x)*c,c*=a.min.x-f.x;if(0<=d){var h=(a.min.y-f.y)*d;d*=a.max.y-f.y}else h=(a.max.y-f.y)*d,d*=a.min.y-f.y;if(g>d||h>c)return null;if(h>g||g!==g)g=h;if(da||h>c)return null;if(h>g||g!==g)g=h;if(ac?null:this.at(0<=g?g:c,b)},intersectsBox:function(a){return null!== +this.intersectBox(a,xb)},intersectTriangle:function(a,b,c,d,e){Og.subVectors(b,a);zf.subVectors(c,a);Pg.crossVectors(Og,zf);b=this.direction.dot(Pg);if(0b)d=-1,b=-b;else return null;Nb.subVectors(this.origin,a);a=d*this.direction.dot(zf.crossVectors(Nb,zf));if(0>a)return null;c=d*this.direction.dot(Og.cross(Nb));if(0>c||a+c>b)return null;a=-d*Nb.dot(Pg);return 0>a?null:this.at(a/b,e)},applyMatrix4:function(a){this.origin.applyMatrix4(a);this.direction.transformDirection(a); +return this},equals:function(a){return a.origin.equals(this.origin)&&a.direction.equals(this.direction)}});var Qg=new n,Ak=new n,Bk=new Z;Object.assign(Oa.prototype,{isPlane:!0,set:function(a,b){this.normal.copy(a);this.constant=b;return this},setComponents:function(a,b,c,d){this.normal.set(a,b,c);this.constant=d;return this},setFromNormalAndCoplanarPoint:function(a,b){this.normal.copy(a);this.constant=-b.dot(this.normal);return this},setFromCoplanarPoints:function(a,b,c){b=Qg.subVectors(c,b).cross(Ak.subVectors(a, +b)).normalize();this.setFromNormalAndCoplanarPoint(b,a);return this},clone:function(){return(new this.constructor).copy(this)},copy:function(a){this.normal.copy(a.normal);this.constant=a.constant;return this},normalize:function(){var a=1/this.normal.length();this.normal.multiplyScalar(a);this.constant*=a;return this},negate:function(){this.constant*=-1;this.normal.negate();return this},distanceToPoint:function(a){return this.normal.dot(a)+this.constant},distanceToSphere:function(a){return this.distanceToPoint(a.center)- +a.radius},projectPoint:function(a,b){void 0===b&&(console.warn("THREE.Plane: .projectPoint() target is now required"),b=new n);return b.copy(this.normal).multiplyScalar(-this.distanceToPoint(a)).add(a)},intersectLine:function(a,b){void 0===b&&(console.warn("THREE.Plane: .intersectLine() target is now required"),b=new n);var c=a.delta(Qg),d=this.normal.dot(c);if(0===d){if(0===this.distanceToPoint(a.start))return b.copy(a.start)}else if(d=-(a.start.dot(this.normal)+this.constant)/d,!(0>d||1b&&0a&&0=zb.x+zb.y},getUV:function(a,b,c,d,e,f,g,h){this.getBarycoord(a,b,c,d,zb);h.set(0,0);h.addScaledVector(e,zb.x);h.addScaledVector(f,zb.y);h.addScaledVector(g,zb.z);return h},isFrontFacing:function(a,b,c,d){Ya.subVectors(c,b);yb.subVectors(a,b);return 0>Ya.cross(yb).dot(d)?!0:!1}});Object.assign(ba.prototype,{set:function(a,b,c){this.a.copy(a);this.b.copy(b);this.c.copy(c);return this},setFromPointsAndIndices:function(a,b,c,d){this.a.copy(a[b]);this.b.copy(a[c]);this.c.copy(a[d]); +return this},clone:function(){return(new this.constructor).copy(this)},copy:function(a){this.a.copy(a.a);this.b.copy(a.b);this.c.copy(a.c);return this},getArea:function(){Ya.subVectors(this.c,this.b);yb.subVectors(this.a,this.b);return.5*Ya.cross(yb).length()},getMidpoint:function(a){void 0===a&&(console.warn("THREE.Triangle: .getMidpoint() target is now required"),a=new n);return a.addVectors(this.a,this.b).add(this.c).multiplyScalar(1/3)},getNormal:function(a){return ba.getNormal(this.a,this.b, +this.c,a)},getPlane:function(a){void 0===a&&(console.warn("THREE.Triangle: .getPlane() target is now required"),a=new Oa);return a.setFromCoplanarPoints(this.a,this.b,this.c)},getBarycoord:function(a,b){return ba.getBarycoord(a,this.a,this.b,this.c,b)},getUV:function(a,b,c,d,e){return ba.getUV(a,this.a,this.b,this.c,b,c,d,e)},containsPoint:function(a){return ba.containsPoint(a,this.a,this.b,this.c)},isFrontFacing:function(a){return ba.isFrontFacing(this.a,this.b,this.c,a)},intersectsBox:function(a){return a.intersectsTriangle(this)}, +closestPointToPoint:function(a,b){void 0===b&&(console.warn("THREE.Triangle: .closestPointToPoint() target is now required"),b=new n);var c=this.a,d=this.b,e=this.c;qd.subVectors(d,c);rd.subVectors(e,c);Sg.subVectors(a,c);var f=qd.dot(Sg),g=rd.dot(Sg);if(0>=f&&0>=g)return b.copy(c);Tg.subVectors(a,d);var h=qd.dot(Tg),l=rd.dot(Tg);if(0<=h&&l<=h)return b.copy(d);var m=f*l-h*g;if(0>=m&&0<=f&&0>=h)return d=f/(f-h),b.copy(c).addScaledVector(qd,d);Ug.subVectors(a,e);a=qd.dot(Ug);var k=rd.dot(Ug);if(0<= +k&&a<=k)return b.copy(e);f=a*g-f*k;if(0>=f&&0<=g&&0>=k)return m=g/(g-k),b.copy(c).addScaledVector(rd,m);g=h*k-a*l;if(0>=g&&0<=l-h&&0<=a-k)return si.subVectors(e,d),m=(l-h)/(l-h+(a-k)),b.copy(d).addScaledVector(si,m);e=1/(g+f+m);d=f*e;m*=e;return b.copy(c).addScaledVector(qd,d).addScaledVector(rd,m)},equals:function(a){return a.a.equals(this.a)&&a.b.equals(this.b)&&a.c.equals(this.c)}});var ti={aliceblue:15792383,antiquewhite:16444375,aqua:65535,aquamarine:8388564,azure:15794175,beige:16119260,bisque:16770244, +black:0,blanchedalmond:16772045,blue:255,blueviolet:9055202,brown:10824234,burlywood:14596231,cadetblue:6266528,chartreuse:8388352,chocolate:13789470,coral:16744272,cornflowerblue:6591981,cornsilk:16775388,crimson:14423100,cyan:65535,darkblue:139,darkcyan:35723,darkgoldenrod:12092939,darkgray:11119017,darkgreen:25600,darkgrey:11119017,darkkhaki:12433259,darkmagenta:9109643,darkolivegreen:5597999,darkorange:16747520,darkorchid:10040012,darkred:9109504,darksalmon:15308410,darkseagreen:9419919,darkslateblue:4734347, +darkslategray:3100495,darkslategrey:3100495,darkturquoise:52945,darkviolet:9699539,deeppink:16716947,deepskyblue:49151,dimgray:6908265,dimgrey:6908265,dodgerblue:2003199,firebrick:11674146,floralwhite:16775920,forestgreen:2263842,fuchsia:16711935,gainsboro:14474460,ghostwhite:16316671,gold:16766720,goldenrod:14329120,gray:8421504,green:32768,greenyellow:11403055,grey:8421504,honeydew:15794160,hotpink:16738740,indianred:13458524,indigo:4915330,ivory:16777200,khaki:15787660,lavender:15132410,lavenderblush:16773365, +lawngreen:8190976,lemonchiffon:16775885,lightblue:11393254,lightcoral:15761536,lightcyan:14745599,lightgoldenrodyellow:16448210,lightgray:13882323,lightgreen:9498256,lightgrey:13882323,lightpink:16758465,lightsalmon:16752762,lightseagreen:2142890,lightskyblue:8900346,lightslategray:7833753,lightslategrey:7833753,lightsteelblue:11584734,lightyellow:16777184,lime:65280,limegreen:3329330,linen:16445670,magenta:16711935,maroon:8388608,mediumaquamarine:6737322,mediumblue:205,mediumorchid:12211667,mediumpurple:9662683, +mediumseagreen:3978097,mediumslateblue:8087790,mediumspringgreen:64154,mediumturquoise:4772300,mediumvioletred:13047173,midnightblue:1644912,mintcream:16121850,mistyrose:16770273,moccasin:16770229,navajowhite:16768685,navy:128,oldlace:16643558,olive:8421376,olivedrab:7048739,orange:16753920,orangered:16729344,orchid:14315734,palegoldenrod:15657130,palegreen:10025880,paleturquoise:11529966,palevioletred:14381203,papayawhip:16773077,peachpuff:16767673,peru:13468991,pink:16761035,plum:14524637,powderblue:11591910, +purple:8388736,rebeccapurple:6697881,red:16711680,rosybrown:12357519,royalblue:4286945,saddlebrown:9127187,salmon:16416882,sandybrown:16032864,seagreen:3050327,seashell:16774638,sienna:10506797,silver:12632256,skyblue:8900331,slateblue:6970061,slategray:7372944,slategrey:7372944,snow:16775930,springgreen:65407,steelblue:4620980,tan:13808780,teal:32896,thistle:14204888,tomato:16737095,turquoise:4251856,violet:15631086,wheat:16113331,white:16777215,whitesmoke:16119285,yellow:16776960,yellowgreen:10145074}, +za={h:0,s:0,l:0},Af={h:0,s:0,l:0};Object.assign(J.prototype,{isColor:!0,r:1,g:1,b:1,set:function(a){a&&a.isColor?this.copy(a):"number"===typeof a?this.setHex(a):"string"===typeof a&&this.setStyle(a);return this},setScalar:function(a){this.b=this.g=this.r=a;return this},setHex:function(a){a=Math.floor(a);this.r=(a>>16&255)/255;this.g=(a>>8&255)/255;this.b=(a&255)/255;return this},setRGB:function(a,b,c){this.r=a;this.g=b;this.b=c;return this},setHSL:function(a,b,c){a=P.euclideanModulo(a,1);b=P.clamp(b, +0,1);c=P.clamp(c,0,1);0===b?this.r=this.g=this.b=c:(b=.5>=c?c*(1+b):c+b-c*b,c=2*c-b,this.r=Vf(c,b,a+1/3),this.g=Vf(c,b,a),this.b=Vf(c,b,a-1/3));return this},setStyle:function(a){function b(b){void 0!==b&&1>parseFloat(b)&&console.warn("THREE.Color: Alpha component of "+a+" will be ignored.")}var c;if(c=/^((?:rgb|hsl)a?)\(\s*([^\)]*)\)/.exec(a)){var d=c[2];switch(c[1]){case "rgb":case "rgba":if(c=/^(\d+)\s*,\s*(\d+)\s*,\s*(\d+)\s*(,\s*([0-9]*\.?[0-9]+)\s*)?$/.exec(d))return this.r=Math.min(255,parseInt(c[1], +10))/255,this.g=Math.min(255,parseInt(c[2],10))/255,this.b=Math.min(255,parseInt(c[3],10))/255,b(c[5]),this;if(c=/^(\d+)%\s*,\s*(\d+)%\s*,\s*(\d+)%\s*(,\s*([0-9]*\.?[0-9]+)\s*)?$/.exec(d))return this.r=Math.min(100,parseInt(c[1],10))/100,this.g=Math.min(100,parseInt(c[2],10))/100,this.b=Math.min(100,parseInt(c[3],10))/100,b(c[5]),this;break;case "hsl":case "hsla":if(c=/^([0-9]*\.?[0-9]+)\s*,\s*(\d+)%\s*,\s*(\d+)%\s*(,\s*([0-9]*\.?[0-9]+)\s*)?$/.exec(d)){d=parseFloat(c[1])/360;var e=parseInt(c[2], +10)/100,f=parseInt(c[3],10)/100;b(c[5]);return this.setHSL(d,e,f)}}}else if(c=/^#([A-Fa-f0-9]+)$/.exec(a)){c=c[1];d=c.length;if(3===d)return this.r=parseInt(c.charAt(0)+c.charAt(0),16)/255,this.g=parseInt(c.charAt(1)+c.charAt(1),16)/255,this.b=parseInt(c.charAt(2)+c.charAt(2),16)/255,this;if(6===d)return this.r=parseInt(c.charAt(0)+c.charAt(1),16)/255,this.g=parseInt(c.charAt(2)+c.charAt(3),16)/255,this.b=parseInt(c.charAt(4)+c.charAt(5),16)/255,this}return a&&0=h?l/(e+f):l/(2-e-f);switch(e){case b:g=(c-d)/l+(cthis.opacity&&(d.opacity=this.opacity);!0===this.transparent&&(d.transparent=this.transparent);d.depthFunc=this.depthFunc;d.depthTest=this.depthTest;d.depthWrite=this.depthWrite;d.stencilWrite=this.stencilWrite;d.stencilWriteMask=this.stencilWriteMask;d.stencilFunc=this.stencilFunc;d.stencilRef=this.stencilRef; +d.stencilFuncMask=this.stencilFuncMask;d.stencilFail=this.stencilFail;d.stencilZFail=this.stencilZFail;d.stencilZPass=this.stencilZPass;this.rotation&&0!==this.rotation&&(d.rotation=this.rotation);!0===this.polygonOffset&&(d.polygonOffset=!0);0!==this.polygonOffsetFactor&&(d.polygonOffsetFactor=this.polygonOffsetFactor);0!==this.polygonOffsetUnits&&(d.polygonOffsetUnits=this.polygonOffsetUnits);this.linewidth&&1!==this.linewidth&&(d.linewidth=this.linewidth);void 0!==this.dashSize&&(d.dashSize=this.dashSize); +void 0!==this.gapSize&&(d.gapSize=this.gapSize);void 0!==this.scale&&(d.scale=this.scale);!0===this.dithering&&(d.dithering=!0);0g;g++)if(d[g]===d[(g+1)%3]){a.push(f);break}for(f=a.length-1;0<=f;f--)for(d=a[f],this.faces.splice(d,1),c=0,e=this.faceVertexUvs.length;c\n\t#include \n}", +fragmentShader:"uniform sampler2D tEquirect;\nvarying vec3 vWorldDirection;\n#define RECIPROCAL_PI 0.31830988618\n#define RECIPROCAL_PI2 0.15915494\nvoid main() {\n\tvec3 direction = normalize( vWorldDirection );\n\tvec2 sampleUV;\n\tsampleUV.y = asin( clamp( direction.y, - 1.0, 1.0 ) ) * RECIPROCAL_PI + 0.5;\n\tsampleUV.x = atan( direction.z, direction.x ) * RECIPROCAL_PI2 + 0.5;\n\tgl_FragColor = texture2D( tEquirect, sampleUV );\n}",side:1,blending:0});d.uniforms.tEquirect.value=b;b=new ea(new Fd(5, +5,5),d);c.add(b);d=new Bc(1,10,1);d.renderTarget=this;d.renderTarget.texture.name="CubeCameraTexture";d.update(a,c);b.geometry.dispose();b.material.dispose();return this};Yb.prototype=Object.create(Y.prototype);Yb.prototype.constructor=Yb;Yb.prototype.isDataTexture=!0;var sd=new mb,Df=new n;Object.assign(Dd.prototype,{set:function(a,b,c,d,e,f){var g=this.planes;g[0].copy(a);g[1].copy(b);g[2].copy(c);g[3].copy(d);g[4].copy(e);g[5].copy(f);return this},clone:function(){return(new this.constructor).copy(this)}, +copy:function(a){for(var b=this.planes,c=0;6>c;c++)b[c].copy(a.planes[c]);return this},setFromMatrix:function(a){var b=this.planes,c=a.elements;a=c[0];var d=c[1],e=c[2],f=c[3],g=c[4],h=c[5],l=c[6],m=c[7],k=c[8],n=c[9],u=c[10],p=c[11],t=c[12],v=c[13],y=c[14];c=c[15];b[0].setComponents(f-a,m-g,p-k,c-t).normalize();b[1].setComponents(f+a,m+g,p+k,c+t).normalize();b[2].setComponents(f+d,m+h,p+n,c+v).normalize();b[3].setComponents(f-d,m-h,p-n,c-v).normalize();b[4].setComponents(f-e,m-l,p-u,c-y).normalize(); +b[5].setComponents(f+e,m+l,p+u,c+y).normalize();return this},intersectsObject:function(a){var b=a.geometry;null===b.boundingSphere&&b.computeBoundingSphere();sd.copy(b.boundingSphere).applyMatrix4(a.matrixWorld);return this.intersectsSphere(sd)},intersectsSprite:function(a){sd.center.set(0,0,0);sd.radius=.7071067811865476;sd.applyMatrix4(a.matrixWorld);return this.intersectsSphere(sd)},intersectsSphere:function(a){var b=this.planes,c=a.center;a=-a.radius;for(var d=0;6>d;d++)if(b[d].distanceToPoint(c)< +a)return!1;return!0},intersectsBox:function(a){for(var b=this.planes,c=0;6>c;c++){var d=b[c];Df.x=0d.distanceToPoint(Df))return!1}return!0},containsPoint:function(a){for(var b=this.planes,c=0;6>c;c++)if(0>b[c].distanceToPoint(a))return!1;return!0}});var S={alphamap_fragment:"#ifdef USE_ALPHAMAP\n\tdiffuseColor.a *= texture2D( alphaMap, vUv ).g;\n#endif",alphamap_pars_fragment:"#ifdef USE_ALPHAMAP\n\tuniform sampler2D alphaMap;\n#endif", +alphatest_fragment:"#ifdef ALPHATEST\n\tif ( diffuseColor.a < ALPHATEST ) discard;\n#endif",aomap_fragment:"#ifdef USE_AOMAP\n\tfloat ambientOcclusion = ( texture2D( aoMap, vUv2 ).r - 1.0 ) * aoMapIntensity + 1.0;\n\treflectedLight.indirectDiffuse *= ambientOcclusion;\n\t#if defined( USE_ENVMAP ) && defined( STANDARD )\n\t\tfloat dotNV = saturate( dot( geometry.normal, geometry.viewDir ) );\n\t\treflectedLight.indirectSpecular *= computeSpecularOcclusion( dotNV, ambientOcclusion, material.specularRoughness );\n\t#endif\n#endif", +aomap_pars_fragment:"#ifdef USE_AOMAP\n\tuniform sampler2D aoMap;\n\tuniform float aoMapIntensity;\n#endif",begin_vertex:"vec3 transformed = vec3( position );",beginnormal_vertex:"vec3 objectNormal = vec3( normal );\n#ifdef USE_TANGENT\n\tvec3 objectTangent = vec3( tangent.xyz );\n#endif",bsdfs:"vec2 integrateSpecularBRDF( const in float dotNV, const in float roughness ) {\n\tconst vec4 c0 = vec4( - 1, - 0.0275, - 0.572, 0.022 );\n\tconst vec4 c1 = vec4( 1, 0.0425, 1.04, - 0.04 );\n\tvec4 r = roughness * c0 + c1;\n\tfloat a004 = min( r.x * r.x, exp2( - 9.28 * dotNV ) ) * r.x + r.y;\n\treturn vec2( -1.04, 1.04 ) * a004 + r.zw;\n}\nfloat punctualLightIntensityToIrradianceFactor( const in float lightDistance, const in float cutoffDistance, const in float decayExponent ) {\n#if defined ( PHYSICALLY_CORRECT_LIGHTS )\n\tfloat distanceFalloff = 1.0 / max( pow( lightDistance, decayExponent ), 0.01 );\n\tif( cutoffDistance > 0.0 ) {\n\t\tdistanceFalloff *= pow2( saturate( 1.0 - pow4( lightDistance / cutoffDistance ) ) );\n\t}\n\treturn distanceFalloff;\n#else\n\tif( cutoffDistance > 0.0 && decayExponent > 0.0 ) {\n\t\treturn pow( saturate( -lightDistance / cutoffDistance + 1.0 ), decayExponent );\n\t}\n\treturn 1.0;\n#endif\n}\nvec3 BRDF_Diffuse_Lambert( const in vec3 diffuseColor ) {\n\treturn RECIPROCAL_PI * diffuseColor;\n}\nvec3 F_Schlick( const in vec3 specularColor, const in float dotLH ) {\n\tfloat fresnel = exp2( ( -5.55473 * dotLH - 6.98316 ) * dotLH );\n\treturn ( 1.0 - specularColor ) * fresnel + specularColor;\n}\nvec3 F_Schlick_RoughnessDependent( const in vec3 F0, const in float dotNV, const in float roughness ) {\n\tfloat fresnel = exp2( ( -5.55473 * dotNV - 6.98316 ) * dotNV );\n\tvec3 Fr = max( vec3( 1.0 - roughness ), F0 ) - F0;\n\treturn Fr * fresnel + F0;\n}\nfloat G_GGX_Smith( const in float alpha, const in float dotNL, const in float dotNV ) {\n\tfloat a2 = pow2( alpha );\n\tfloat gl = dotNL + sqrt( a2 + ( 1.0 - a2 ) * pow2( dotNL ) );\n\tfloat gv = dotNV + sqrt( a2 + ( 1.0 - a2 ) * pow2( dotNV ) );\n\treturn 1.0 / ( gl * gv );\n}\nfloat G_GGX_SmithCorrelated( const in float alpha, const in float dotNL, const in float dotNV ) {\n\tfloat a2 = pow2( alpha );\n\tfloat gv = dotNL * sqrt( a2 + ( 1.0 - a2 ) * pow2( dotNV ) );\n\tfloat gl = dotNV * sqrt( a2 + ( 1.0 - a2 ) * pow2( dotNL ) );\n\treturn 0.5 / max( gv + gl, EPSILON );\n}\nfloat D_GGX( const in float alpha, const in float dotNH ) {\n\tfloat a2 = pow2( alpha );\n\tfloat denom = pow2( dotNH ) * ( a2 - 1.0 ) + 1.0;\n\treturn RECIPROCAL_PI * a2 / pow2( denom );\n}\nvec3 BRDF_Specular_GGX( const in IncidentLight incidentLight, const in vec3 viewDir, const in vec3 normal, const in vec3 specularColor, const in float roughness ) {\n\tfloat alpha = pow2( roughness );\n\tvec3 halfDir = normalize( incidentLight.direction + viewDir );\n\tfloat dotNL = saturate( dot( normal, incidentLight.direction ) );\n\tfloat dotNV = saturate( dot( normal, viewDir ) );\n\tfloat dotNH = saturate( dot( normal, halfDir ) );\n\tfloat dotLH = saturate( dot( incidentLight.direction, halfDir ) );\n\tvec3 F = F_Schlick( specularColor, dotLH );\n\tfloat G = G_GGX_SmithCorrelated( alpha, dotNL, dotNV );\n\tfloat D = D_GGX( alpha, dotNH );\n\treturn F * ( G * D );\n}\nvec2 LTC_Uv( const in vec3 N, const in vec3 V, const in float roughness ) {\n\tconst float LUT_SIZE = 64.0;\n\tconst float LUT_SCALE = ( LUT_SIZE - 1.0 ) / LUT_SIZE;\n\tconst float LUT_BIAS = 0.5 / LUT_SIZE;\n\tfloat dotNV = saturate( dot( N, V ) );\n\tvec2 uv = vec2( roughness, sqrt( 1.0 - dotNV ) );\n\tuv = uv * LUT_SCALE + LUT_BIAS;\n\treturn uv;\n}\nfloat LTC_ClippedSphereFormFactor( const in vec3 f ) {\n\tfloat l = length( f );\n\treturn max( ( l * l + f.z ) / ( l + 1.0 ), 0.0 );\n}\nvec3 LTC_EdgeVectorFormFactor( const in vec3 v1, const in vec3 v2 ) {\n\tfloat x = dot( v1, v2 );\n\tfloat y = abs( x );\n\tfloat a = 0.8543985 + ( 0.4965155 + 0.0145206 * y ) * y;\n\tfloat b = 3.4175940 + ( 4.1616724 + y ) * y;\n\tfloat v = a / b;\n\tfloat theta_sintheta = ( x > 0.0 ) ? v : 0.5 * inversesqrt( max( 1.0 - x * x, 1e-7 ) ) - v;\n\treturn cross( v1, v2 ) * theta_sintheta;\n}\nvec3 LTC_Evaluate( const in vec3 N, const in vec3 V, const in vec3 P, const in mat3 mInv, const in vec3 rectCoords[ 4 ] ) {\n\tvec3 v1 = rectCoords[ 1 ] - rectCoords[ 0 ];\n\tvec3 v2 = rectCoords[ 3 ] - rectCoords[ 0 ];\n\tvec3 lightNormal = cross( v1, v2 );\n\tif( dot( lightNormal, P - rectCoords[ 0 ] ) < 0.0 ) return vec3( 0.0 );\n\tvec3 T1, T2;\n\tT1 = normalize( V - N * dot( V, N ) );\n\tT2 = - cross( N, T1 );\n\tmat3 mat = mInv * transposeMat3( mat3( T1, T2, N ) );\n\tvec3 coords[ 4 ];\n\tcoords[ 0 ] = mat * ( rectCoords[ 0 ] - P );\n\tcoords[ 1 ] = mat * ( rectCoords[ 1 ] - P );\n\tcoords[ 2 ] = mat * ( rectCoords[ 2 ] - P );\n\tcoords[ 3 ] = mat * ( rectCoords[ 3 ] - P );\n\tcoords[ 0 ] = normalize( coords[ 0 ] );\n\tcoords[ 1 ] = normalize( coords[ 1 ] );\n\tcoords[ 2 ] = normalize( coords[ 2 ] );\n\tcoords[ 3 ] = normalize( coords[ 3 ] );\n\tvec3 vectorFormFactor = vec3( 0.0 );\n\tvectorFormFactor += LTC_EdgeVectorFormFactor( coords[ 0 ], coords[ 1 ] );\n\tvectorFormFactor += LTC_EdgeVectorFormFactor( coords[ 1 ], coords[ 2 ] );\n\tvectorFormFactor += LTC_EdgeVectorFormFactor( coords[ 2 ], coords[ 3 ] );\n\tvectorFormFactor += LTC_EdgeVectorFormFactor( coords[ 3 ], coords[ 0 ] );\n\tfloat result = LTC_ClippedSphereFormFactor( vectorFormFactor );\n\treturn vec3( result );\n}\nvec3 BRDF_Specular_GGX_Environment( const in vec3 viewDir, const in vec3 normal, const in vec3 specularColor, const in float roughness ) {\n\tfloat dotNV = saturate( dot( normal, viewDir ) );\n\tvec2 brdf = integrateSpecularBRDF( dotNV, roughness );\n\treturn specularColor * brdf.x + brdf.y;\n}\nvoid BRDF_Specular_Multiscattering_Environment( const in GeometricContext geometry, const in vec3 specularColor, const in float roughness, inout vec3 singleScatter, inout vec3 multiScatter ) {\n\tfloat dotNV = saturate( dot( geometry.normal, geometry.viewDir ) );\n\tvec3 F = F_Schlick_RoughnessDependent( specularColor, dotNV, roughness );\n\tvec2 brdf = integrateSpecularBRDF( dotNV, roughness );\n\tvec3 FssEss = F * brdf.x + brdf.y;\n\tfloat Ess = brdf.x + brdf.y;\n\tfloat Ems = 1.0 - Ess;\n\tvec3 Favg = specularColor + ( 1.0 - specularColor ) * 0.047619;\tvec3 Fms = FssEss * Favg / ( 1.0 - Ems * Favg );\n\tsingleScatter += FssEss;\n\tmultiScatter += Fms * Ems;\n}\nfloat G_BlinnPhong_Implicit( ) {\n\treturn 0.25;\n}\nfloat D_BlinnPhong( const in float shininess, const in float dotNH ) {\n\treturn RECIPROCAL_PI * ( shininess * 0.5 + 1.0 ) * pow( dotNH, shininess );\n}\nvec3 BRDF_Specular_BlinnPhong( const in IncidentLight incidentLight, const in GeometricContext geometry, const in vec3 specularColor, const in float shininess ) {\n\tvec3 halfDir = normalize( incidentLight.direction + geometry.viewDir );\n\tfloat dotNH = saturate( dot( geometry.normal, halfDir ) );\n\tfloat dotLH = saturate( dot( incidentLight.direction, halfDir ) );\n\tvec3 F = F_Schlick( specularColor, dotLH );\n\tfloat G = G_BlinnPhong_Implicit( );\n\tfloat D = D_BlinnPhong( shininess, dotNH );\n\treturn F * ( G * D );\n}\nfloat GGXRoughnessToBlinnExponent( const in float ggxRoughness ) {\n\treturn ( 2.0 / pow2( ggxRoughness + 0.0001 ) - 2.0 );\n}\nfloat BlinnExponentToGGXRoughness( const in float blinnExponent ) {\n\treturn sqrt( 2.0 / ( blinnExponent + 2.0 ) );\n}\n#if defined( USE_SHEEN )\nfloat D_Charlie(float roughness, float NoH) {\n\tfloat invAlpha = 1.0 / roughness;\n\tfloat cos2h = NoH * NoH;\n\tfloat sin2h = max(1.0 - cos2h, 0.0078125);\treturn (2.0 + invAlpha) * pow(sin2h, invAlpha * 0.5) / (2.0 * PI);\n}\nfloat V_Neubelt(float NoV, float NoL) {\n\treturn saturate(1.0 / (4.0 * (NoL + NoV - NoL * NoV)));\n}\nvec3 BRDF_Specular_Sheen( const in float roughness, const in vec3 L, const in GeometricContext geometry, vec3 specularColor ) {\n\tvec3 N = geometry.normal;\n\tvec3 V = geometry.viewDir;\n\tvec3 H = normalize( V + L );\n\tfloat dotNH = saturate( dot( N, H ) );\n\treturn specularColor * D_Charlie( roughness, dotNH ) * V_Neubelt( dot(N, V), dot(N, L) );\n}\n#endif", +bumpmap_pars_fragment:"#ifdef USE_BUMPMAP\n\tuniform sampler2D bumpMap;\n\tuniform float bumpScale;\n\tvec2 dHdxy_fwd() {\n\t\tvec2 dSTdx = dFdx( vUv );\n\t\tvec2 dSTdy = dFdy( vUv );\n\t\tfloat Hll = bumpScale * texture2D( bumpMap, vUv ).x;\n\t\tfloat dBx = bumpScale * texture2D( bumpMap, vUv + dSTdx ).x - Hll;\n\t\tfloat dBy = bumpScale * texture2D( bumpMap, vUv + dSTdy ).x - Hll;\n\t\treturn vec2( dBx, dBy );\n\t}\n\tvec3 perturbNormalArb( vec3 surf_pos, vec3 surf_norm, vec2 dHdxy ) {\n\t\tvec3 vSigmaX = vec3( dFdx( surf_pos.x ), dFdx( surf_pos.y ), dFdx( surf_pos.z ) );\n\t\tvec3 vSigmaY = vec3( dFdy( surf_pos.x ), dFdy( surf_pos.y ), dFdy( surf_pos.z ) );\n\t\tvec3 vN = surf_norm;\n\t\tvec3 R1 = cross( vSigmaY, vN );\n\t\tvec3 R2 = cross( vN, vSigmaX );\n\t\tfloat fDet = dot( vSigmaX, R1 );\n\t\tfDet *= ( float( gl_FrontFacing ) * 2.0 - 1.0 );\n\t\tvec3 vGrad = sign( fDet ) * ( dHdxy.x * R1 + dHdxy.y * R2 );\n\t\treturn normalize( abs( fDet ) * surf_norm - vGrad );\n\t}\n#endif", +clipping_planes_fragment:"#if NUM_CLIPPING_PLANES > 0\n\tvec4 plane;\n\t#pragma unroll_loop\n\tfor ( int i = 0; i < UNION_CLIPPING_PLANES; i ++ ) {\n\t\tplane = clippingPlanes[ i ];\n\t\tif ( dot( vViewPosition, plane.xyz ) > plane.w ) discard;\n\t}\n\t#if UNION_CLIPPING_PLANES < NUM_CLIPPING_PLANES\n\t\tbool clipped = true;\n\t\t#pragma unroll_loop\n\t\tfor ( int i = UNION_CLIPPING_PLANES; i < NUM_CLIPPING_PLANES; i ++ ) {\n\t\t\tplane = clippingPlanes[ i ];\n\t\t\tclipped = ( dot( vViewPosition, plane.xyz ) > plane.w ) && clipped;\n\t\t}\n\t\tif ( clipped ) discard;\n\t#endif\n#endif", +clipping_planes_pars_fragment:"#if NUM_CLIPPING_PLANES > 0\n\t#if ! defined( STANDARD ) && ! defined( PHONG ) && ! defined( MATCAP )\n\t\tvarying vec3 vViewPosition;\n\t#endif\n\tuniform vec4 clippingPlanes[ NUM_CLIPPING_PLANES ];\n#endif",clipping_planes_pars_vertex:"#if NUM_CLIPPING_PLANES > 0 && ! defined( STANDARD ) && ! defined( PHONG ) && ! defined( MATCAP )\n\tvarying vec3 vViewPosition;\n#endif",clipping_planes_vertex:"#if NUM_CLIPPING_PLANES > 0 && ! defined( STANDARD ) && ! defined( PHONG ) && ! defined( MATCAP )\n\tvViewPosition = - mvPosition.xyz;\n#endif", +color_fragment:"#ifdef USE_COLOR\n\tdiffuseColor.rgb *= vColor;\n#endif",color_pars_fragment:"#ifdef USE_COLOR\n\tvarying vec3 vColor;\n#endif",color_pars_vertex:"#ifdef USE_COLOR\n\tvarying vec3 vColor;\n#endif",color_vertex:"#ifdef USE_COLOR\n\tvColor.xyz = color.xyz;\n#endif",common:"#define PI 3.14159265359\n#define PI2 6.28318530718\n#define PI_HALF 1.5707963267949\n#define RECIPROCAL_PI 0.31830988618\n#define RECIPROCAL_PI2 0.15915494\n#define LOG2 1.442695\n#define EPSILON 1e-6\n#ifndef saturate\n#define saturate(a) clamp( a, 0.0, 1.0 )\n#endif\n#define whiteComplement(a) ( 1.0 - saturate( a ) )\nfloat pow2( const in float x ) { return x*x; }\nfloat pow3( const in float x ) { return x*x*x; }\nfloat pow4( const in float x ) { float x2 = x*x; return x2*x2; }\nfloat average( const in vec3 color ) { return dot( color, vec3( 0.3333 ) ); }\nhighp float rand( const in vec2 uv ) {\n\tconst highp float a = 12.9898, b = 78.233, c = 43758.5453;\n\thighp float dt = dot( uv.xy, vec2( a,b ) ), sn = mod( dt, PI );\n\treturn fract(sin(sn) * c);\n}\n#ifdef HIGH_PRECISION\n\tfloat precisionSafeLength( vec3 v ) { return length( v ); }\n#else\n\tfloat max3( vec3 v ) { return max( max( v.x, v.y ), v.z ); }\n\tfloat precisionSafeLength( vec3 v ) {\n\t\tfloat maxComponent = max3( abs( v ) );\n\t\treturn length( v / maxComponent ) * maxComponent;\n\t}\n#endif\nstruct IncidentLight {\n\tvec3 color;\n\tvec3 direction;\n\tbool visible;\n};\nstruct ReflectedLight {\n\tvec3 directDiffuse;\n\tvec3 directSpecular;\n\tvec3 indirectDiffuse;\n\tvec3 indirectSpecular;\n};\nstruct GeometricContext {\n\tvec3 position;\n\tvec3 normal;\n\tvec3 viewDir;\n#ifdef CLEARCOAT\n\tvec3 clearcoatNormal;\n#endif\n};\nvec3 transformDirection( in vec3 dir, in mat4 matrix ) {\n\treturn normalize( ( matrix * vec4( dir, 0.0 ) ).xyz );\n}\nvec3 inverseTransformDirection( in vec3 dir, in mat4 matrix ) {\n\treturn normalize( ( vec4( dir, 0.0 ) * matrix ).xyz );\n}\nvec3 projectOnPlane(in vec3 point, in vec3 pointOnPlane, in vec3 planeNormal ) {\n\tfloat distance = dot( planeNormal, point - pointOnPlane );\n\treturn - distance * planeNormal + point;\n}\nfloat sideOfPlane( in vec3 point, in vec3 pointOnPlane, in vec3 planeNormal ) {\n\treturn sign( dot( point - pointOnPlane, planeNormal ) );\n}\nvec3 linePlaneIntersect( in vec3 pointOnLine, in vec3 lineDirection, in vec3 pointOnPlane, in vec3 planeNormal ) {\n\treturn lineDirection * ( dot( planeNormal, pointOnPlane - pointOnLine ) / dot( planeNormal, lineDirection ) ) + pointOnLine;\n}\nmat3 transposeMat3( const in mat3 m ) {\n\tmat3 tmp;\n\ttmp[ 0 ] = vec3( m[ 0 ].x, m[ 1 ].x, m[ 2 ].x );\n\ttmp[ 1 ] = vec3( m[ 0 ].y, m[ 1 ].y, m[ 2 ].y );\n\ttmp[ 2 ] = vec3( m[ 0 ].z, m[ 1 ].z, m[ 2 ].z );\n\treturn tmp;\n}\nfloat linearToRelativeLuminance( const in vec3 color ) {\n\tvec3 weights = vec3( 0.2126, 0.7152, 0.0722 );\n\treturn dot( weights, color.rgb );\n}\nbool isPerspectiveMatrix( mat4 m ) {\n return m[ 2 ][ 3 ] == - 1.0;\n}", +cube_uv_reflection_fragment:"#ifdef ENVMAP_TYPE_CUBE_UV\n#define cubeUV_textureSize (1024.0)\nint getFaceFromDirection(vec3 direction) {\n\tvec3 absDirection = abs(direction);\n\tint face = -1;\n\tif( absDirection.x > absDirection.z ) {\n\t\tif(absDirection.x > absDirection.y )\n\t\t\tface = direction.x > 0.0 ? 0 : 3;\n\t\telse\n\t\t\tface = direction.y > 0.0 ? 1 : 4;\n\t}\n\telse {\n\t\tif(absDirection.z > absDirection.y )\n\t\t\tface = direction.z > 0.0 ? 2 : 5;\n\t\telse\n\t\t\tface = direction.y > 0.0 ? 1 : 4;\n\t}\n\treturn face;\n}\n#define cubeUV_maxLods1 (log2(cubeUV_textureSize*0.25) - 1.0)\n#define cubeUV_rangeClamp (exp2((6.0 - 1.0) * 2.0))\nvec2 MipLevelInfo( vec3 vec, float roughnessLevel, float roughness ) {\n\tfloat scale = exp2(cubeUV_maxLods1 - roughnessLevel);\n\tfloat dxRoughness = dFdx(roughness);\n\tfloat dyRoughness = dFdy(roughness);\n\tvec3 dx = dFdx( vec * scale * dxRoughness );\n\tvec3 dy = dFdy( vec * scale * dyRoughness );\n\tfloat d = max( dot( dx, dx ), dot( dy, dy ) );\n\td = clamp(d, 1.0, cubeUV_rangeClamp);\n\tfloat mipLevel = 0.5 * log2(d);\n\treturn vec2(floor(mipLevel), fract(mipLevel));\n}\n#define cubeUV_maxLods2 (log2(cubeUV_textureSize*0.25) - 2.0)\n#define cubeUV_rcpTextureSize (1.0 / cubeUV_textureSize)\nvec2 getCubeUV(vec3 direction, float roughnessLevel, float mipLevel) {\n\tmipLevel = roughnessLevel > cubeUV_maxLods2 - 3.0 ? 0.0 : mipLevel;\n\tfloat a = 16.0 * cubeUV_rcpTextureSize;\n\tvec2 exp2_packed = exp2( vec2( roughnessLevel, mipLevel ) );\n\tvec2 rcp_exp2_packed = vec2( 1.0 ) / exp2_packed;\n\tfloat powScale = exp2_packed.x * exp2_packed.y;\n\tfloat scale = rcp_exp2_packed.x * rcp_exp2_packed.y * 0.25;\n\tfloat mipOffset = 0.75*(1.0 - rcp_exp2_packed.y) * rcp_exp2_packed.x;\n\tbool bRes = mipLevel == 0.0;\n\tscale = bRes && (scale < a) ? a : scale;\n\tvec3 r;\n\tvec2 offset;\n\tint face = getFaceFromDirection(direction);\n\tfloat rcpPowScale = 1.0 / powScale;\n\tif( face == 0) {\n\t\tr = vec3(direction.x, -direction.z, direction.y);\n\t\toffset = vec2(0.0+mipOffset,0.75 * rcpPowScale);\n\t\toffset.y = bRes && (offset.y < 2.0*a) ? a : offset.y;\n\t}\n\telse if( face == 1) {\n\t\tr = vec3(direction.y, direction.x, direction.z);\n\t\toffset = vec2(scale+mipOffset, 0.75 * rcpPowScale);\n\t\toffset.y = bRes && (offset.y < 2.0*a) ? a : offset.y;\n\t}\n\telse if( face == 2) {\n\t\tr = vec3(direction.z, direction.x, direction.y);\n\t\toffset = vec2(2.0*scale+mipOffset, 0.75 * rcpPowScale);\n\t\toffset.y = bRes && (offset.y < 2.0*a) ? a : offset.y;\n\t}\n\telse if( face == 3) {\n\t\tr = vec3(direction.x, direction.z, direction.y);\n\t\toffset = vec2(0.0+mipOffset,0.5 * rcpPowScale);\n\t\toffset.y = bRes && (offset.y < 2.0*a) ? 0.0 : offset.y;\n\t}\n\telse if( face == 4) {\n\t\tr = vec3(direction.y, direction.x, -direction.z);\n\t\toffset = vec2(scale+mipOffset, 0.5 * rcpPowScale);\n\t\toffset.y = bRes && (offset.y < 2.0*a) ? 0.0 : offset.y;\n\t}\n\telse {\n\t\tr = vec3(direction.z, -direction.x, direction.y);\n\t\toffset = vec2(2.0*scale+mipOffset, 0.5 * rcpPowScale);\n\t\toffset.y = bRes && (offset.y < 2.0*a) ? 0.0 : offset.y;\n\t}\n\tr = normalize(r);\n\tfloat texelOffset = 0.5 * cubeUV_rcpTextureSize;\n\tvec2 s = ( r.yz / abs( r.x ) + vec2( 1.0 ) ) * 0.5;\n\tvec2 base = offset + vec2( texelOffset );\n\treturn base + s * ( scale - 2.0 * texelOffset );\n}\n#define cubeUV_maxLods3 (log2(cubeUV_textureSize*0.25) - 3.0)\nvec4 textureCubeUV( sampler2D envMap, vec3 reflectedDirection, float roughness ) {\n\tfloat roughnessVal = roughness* cubeUV_maxLods3;\n\tfloat r1 = floor(roughnessVal);\n\tfloat r2 = r1 + 1.0;\n\tfloat t = fract(roughnessVal);\n\tvec2 mipInfo = MipLevelInfo(reflectedDirection, r1, roughness);\n\tfloat s = mipInfo.y;\n\tfloat level0 = mipInfo.x;\n\tfloat level1 = level0 + 1.0;\n\tlevel1 = level1 > 5.0 ? 5.0 : level1;\n\tlevel0 += min( floor( s + 0.5 ), 5.0 );\n\tvec2 uv_10 = getCubeUV(reflectedDirection, r1, level0);\n\tvec4 color10 = envMapTexelToLinear(texture2D(envMap, uv_10));\n\tvec2 uv_20 = getCubeUV(reflectedDirection, r2, level0);\n\tvec4 color20 = envMapTexelToLinear(texture2D(envMap, uv_20));\n\tvec4 result = mix(color10, color20, t);\n\treturn vec4(result.rgb, 1.0);\n}\n#endif", +defaultnormal_vertex:"vec3 transformedNormal = objectNormal;\n#ifdef USE_INSTANCING\n\ttransformedNormal = mat3( instanceMatrix ) * transformedNormal;\n#endif\ntransformedNormal = normalMatrix * transformedNormal;\n#ifdef FLIP_SIDED\n\ttransformedNormal = - transformedNormal;\n#endif\n#ifdef USE_TANGENT\n\tvec3 transformedTangent = normalMatrix * objectTangent;\n\t#ifdef FLIP_SIDED\n\t\ttransformedTangent = - transformedTangent;\n\t#endif\n#endif",displacementmap_pars_vertex:"#ifdef USE_DISPLACEMENTMAP\n\tuniform sampler2D displacementMap;\n\tuniform float displacementScale;\n\tuniform float displacementBias;\n#endif", +displacementmap_vertex:"#ifdef USE_DISPLACEMENTMAP\n\ttransformed += normalize( objectNormal ) * ( texture2D( displacementMap, vUv ).x * displacementScale + displacementBias );\n#endif",emissivemap_fragment:"#ifdef USE_EMISSIVEMAP\n\tvec4 emissiveColor = texture2D( emissiveMap, vUv );\n\temissiveColor.rgb = emissiveMapTexelToLinear( emissiveColor ).rgb;\n\ttotalEmissiveRadiance *= emissiveColor.rgb;\n#endif",emissivemap_pars_fragment:"#ifdef USE_EMISSIVEMAP\n\tuniform sampler2D emissiveMap;\n#endif", +encodings_fragment:"gl_FragColor = linearToOutputTexel( gl_FragColor );",encodings_pars_fragment:"\nvec4 LinearToLinear( in vec4 value ) {\n\treturn value;\n}\nvec4 GammaToLinear( in vec4 value, in float gammaFactor ) {\n\treturn vec4( pow( value.rgb, vec3( gammaFactor ) ), value.a );\n}\nvec4 LinearToGamma( in vec4 value, in float gammaFactor ) {\n\treturn vec4( pow( value.rgb, vec3( 1.0 / gammaFactor ) ), value.a );\n}\nvec4 sRGBToLinear( in vec4 value ) {\n\treturn vec4( mix( pow( value.rgb * 0.9478672986 + vec3( 0.0521327014 ), vec3( 2.4 ) ), value.rgb * 0.0773993808, vec3( lessThanEqual( value.rgb, vec3( 0.04045 ) ) ) ), value.a );\n}\nvec4 LinearTosRGB( in vec4 value ) {\n\treturn vec4( mix( pow( value.rgb, vec3( 0.41666 ) ) * 1.055 - vec3( 0.055 ), value.rgb * 12.92, vec3( lessThanEqual( value.rgb, vec3( 0.0031308 ) ) ) ), value.a );\n}\nvec4 RGBEToLinear( in vec4 value ) {\n\treturn vec4( value.rgb * exp2( value.a * 255.0 - 128.0 ), 1.0 );\n}\nvec4 LinearToRGBE( in vec4 value ) {\n\tfloat maxComponent = max( max( value.r, value.g ), value.b );\n\tfloat fExp = clamp( ceil( log2( maxComponent ) ), -128.0, 127.0 );\n\treturn vec4( value.rgb / exp2( fExp ), ( fExp + 128.0 ) / 255.0 );\n}\nvec4 RGBMToLinear( in vec4 value, in float maxRange ) {\n\treturn vec4( value.rgb * value.a * maxRange, 1.0 );\n}\nvec4 LinearToRGBM( in vec4 value, in float maxRange ) {\n\tfloat maxRGB = max( value.r, max( value.g, value.b ) );\n\tfloat M = clamp( maxRGB / maxRange, 0.0, 1.0 );\n\tM = ceil( M * 255.0 ) / 255.0;\n\treturn vec4( value.rgb / ( M * maxRange ), M );\n}\nvec4 RGBDToLinear( in vec4 value, in float maxRange ) {\n\treturn vec4( value.rgb * ( ( maxRange / 255.0 ) / value.a ), 1.0 );\n}\nvec4 LinearToRGBD( in vec4 value, in float maxRange ) {\n\tfloat maxRGB = max( value.r, max( value.g, value.b ) );\n\tfloat D = max( maxRange / maxRGB, 1.0 );\n\tD = min( floor( D ) / 255.0, 1.0 );\n\treturn vec4( value.rgb * ( D * ( 255.0 / maxRange ) ), D );\n}\nconst mat3 cLogLuvM = mat3( 0.2209, 0.3390, 0.4184, 0.1138, 0.6780, 0.7319, 0.0102, 0.1130, 0.2969 );\nvec4 LinearToLogLuv( in vec4 value ) {\n\tvec3 Xp_Y_XYZp = cLogLuvM * value.rgb;\n\tXp_Y_XYZp = max( Xp_Y_XYZp, vec3( 1e-6, 1e-6, 1e-6 ) );\n\tvec4 vResult;\n\tvResult.xy = Xp_Y_XYZp.xy / Xp_Y_XYZp.z;\n\tfloat Le = 2.0 * log2(Xp_Y_XYZp.y) + 127.0;\n\tvResult.w = fract( Le );\n\tvResult.z = ( Le - ( floor( vResult.w * 255.0 ) ) / 255.0 ) / 255.0;\n\treturn vResult;\n}\nconst mat3 cLogLuvInverseM = mat3( 6.0014, -2.7008, -1.7996, -1.3320, 3.1029, -5.7721, 0.3008, -1.0882, 5.6268 );\nvec4 LogLuvToLinear( in vec4 value ) {\n\tfloat Le = value.z * 255.0 + value.w;\n\tvec3 Xp_Y_XYZp;\n\tXp_Y_XYZp.y = exp2( ( Le - 127.0 ) / 2.0 );\n\tXp_Y_XYZp.z = Xp_Y_XYZp.y / value.y;\n\tXp_Y_XYZp.x = value.x * Xp_Y_XYZp.z;\n\tvec3 vRGB = cLogLuvInverseM * Xp_Y_XYZp.rgb;\n\treturn vec4( max( vRGB, 0.0 ), 1.0 );\n}", +envmap_fragment:"#ifdef USE_ENVMAP\n\t#ifdef ENV_WORLDPOS\n\t\tvec3 cameraToFrag;\n\t\t\n\t\tif ( isOrthographic ) {\n\t\t\tcameraToFrag = normalize( vec3( - viewMatrix[ 0 ][ 2 ], - viewMatrix[ 1 ][ 2 ], - viewMatrix[ 2 ][ 2 ] ) );\n\t\t} else {\n\t\t\tcameraToFrag = normalize( vWorldPosition - cameraPosition );\n\t\t}\n\t\tvec3 worldNormal = inverseTransformDirection( normal, viewMatrix );\n\t\t#ifdef ENVMAP_MODE_REFLECTION\n\t\t\tvec3 reflectVec = reflect( cameraToFrag, worldNormal );\n\t\t#else\n\t\t\tvec3 reflectVec = refract( cameraToFrag, worldNormal, refractionRatio );\n\t\t#endif\n\t#else\n\t\tvec3 reflectVec = vReflect;\n\t#endif\n\t#ifdef ENVMAP_TYPE_CUBE\n\t\tvec4 envColor = textureCube( envMap, vec3( flipEnvMap * reflectVec.x, reflectVec.yz ) );\n\t#elif defined( ENVMAP_TYPE_EQUIREC )\n\t\tvec2 sampleUV;\n\t\treflectVec = normalize( reflectVec );\n\t\tsampleUV.y = asin( clamp( reflectVec.y, - 1.0, 1.0 ) ) * RECIPROCAL_PI + 0.5;\n\t\tsampleUV.x = atan( reflectVec.z, reflectVec.x ) * RECIPROCAL_PI2 + 0.5;\n\t\tvec4 envColor = texture2D( envMap, sampleUV );\n\t#elif defined( ENVMAP_TYPE_SPHERE )\n\t\treflectVec = normalize( reflectVec );\n\t\tvec3 reflectView = normalize( ( viewMatrix * vec4( reflectVec, 0.0 ) ).xyz + vec3( 0.0, 0.0, 1.0 ) );\n\t\tvec4 envColor = texture2D( envMap, reflectView.xy * 0.5 + 0.5 );\n\t#else\n\t\tvec4 envColor = vec4( 0.0 );\n\t#endif\n\tenvColor = envMapTexelToLinear( envColor );\n\t#ifdef ENVMAP_BLENDING_MULTIPLY\n\t\toutgoingLight = mix( outgoingLight, outgoingLight * envColor.xyz, specularStrength * reflectivity );\n\t#elif defined( ENVMAP_BLENDING_MIX )\n\t\toutgoingLight = mix( outgoingLight, envColor.xyz, specularStrength * reflectivity );\n\t#elif defined( ENVMAP_BLENDING_ADD )\n\t\toutgoingLight += envColor.xyz * specularStrength * reflectivity;\n\t#endif\n#endif", +envmap_common_pars_fragment:"#ifdef USE_ENVMAP\n\tuniform float envMapIntensity;\n\tuniform float flipEnvMap;\n\tuniform int maxMipLevel;\n\t#ifdef ENVMAP_TYPE_CUBE\n\t\tuniform samplerCube envMap;\n\t#else\n\t\tuniform sampler2D envMap;\n\t#endif\n\t\n#endif",envmap_pars_fragment:"#ifdef USE_ENVMAP\n\tuniform float reflectivity;\n\t#if defined( USE_BUMPMAP ) || defined( USE_NORMALMAP ) || defined( PHONG )\n\t\t#define ENV_WORLDPOS\n\t#endif\n\t#ifdef ENV_WORLDPOS\n\t\tvarying vec3 vWorldPosition;\n\t\tuniform float refractionRatio;\n\t#else\n\t\tvarying vec3 vReflect;\n\t#endif\n#endif", +envmap_pars_vertex:"#ifdef USE_ENVMAP\n\t#if defined( USE_BUMPMAP ) || defined( USE_NORMALMAP ) ||defined( PHONG )\n\t\t#define ENV_WORLDPOS\n\t#endif\n\t#ifdef ENV_WORLDPOS\n\t\t\n\t\tvarying vec3 vWorldPosition;\n\t#else\n\t\tvarying vec3 vReflect;\n\t\tuniform float refractionRatio;\n\t#endif\n#endif",envmap_physical_pars_fragment:"#if defined( USE_ENVMAP )\n\t#ifdef ENVMAP_MODE_REFRACTION\n\t\tuniform float refractionRatio;\n\t#endif\n\tvec3 getLightProbeIndirectIrradiance( const in GeometricContext geometry, const in int maxMIPLevel ) {\n\t\tvec3 worldNormal = inverseTransformDirection( geometry.normal, viewMatrix );\n\t\t#ifdef ENVMAP_TYPE_CUBE\n\t\t\tvec3 queryVec = vec3( flipEnvMap * worldNormal.x, worldNormal.yz );\n\t\t\t#ifdef TEXTURE_LOD_EXT\n\t\t\t\tvec4 envMapColor = textureCubeLodEXT( envMap, queryVec, float( maxMIPLevel ) );\n\t\t\t#else\n\t\t\t\tvec4 envMapColor = textureCube( envMap, queryVec, float( maxMIPLevel ) );\n\t\t\t#endif\n\t\t\tenvMapColor.rgb = envMapTexelToLinear( envMapColor ).rgb;\n\t\t#elif defined( ENVMAP_TYPE_CUBE_UV )\n\t\t\tvec3 queryVec = vec3( flipEnvMap * worldNormal.x, worldNormal.yz );\n\t\t\tvec4 envMapColor = textureCubeUV( envMap, queryVec, 1.0 );\n\t\t#else\n\t\t\tvec4 envMapColor = vec4( 0.0 );\n\t\t#endif\n\t\treturn PI * envMapColor.rgb * envMapIntensity;\n\t}\n\tfloat getSpecularMIPLevel( const in float roughness, const in int maxMIPLevel ) {\n\t\tfloat maxMIPLevelScalar = float( maxMIPLevel );\n\t\tfloat sigma = PI * roughness * roughness / ( 1.0 + roughness );\n\t\tfloat desiredMIPLevel = maxMIPLevelScalar + log2( sigma );\n\t\treturn clamp( desiredMIPLevel, 0.0, maxMIPLevelScalar );\n\t}\n\tvec3 getLightProbeIndirectRadiance( const in vec3 viewDir, const in vec3 normal, const in float roughness, const in int maxMIPLevel ) {\n\t\t#ifdef ENVMAP_MODE_REFLECTION\n\t\t vec3 reflectVec = reflect( -viewDir, normal );\n\t\t reflectVec = normalize( mix( reflectVec, normal, roughness * roughness) );\n\t\t#else\n\t\t vec3 reflectVec = refract( -viewDir, normal, refractionRatio );\n\t\t#endif\n\t\treflectVec = inverseTransformDirection( reflectVec, viewMatrix );\n\t\tfloat specularMIPLevel = getSpecularMIPLevel( roughness, maxMIPLevel );\n\t\t#ifdef ENVMAP_TYPE_CUBE\n\t\t\tvec3 queryReflectVec = vec3( flipEnvMap * reflectVec.x, reflectVec.yz );\n\t\t\t#ifdef TEXTURE_LOD_EXT\n\t\t\t\tvec4 envMapColor = textureCubeLodEXT( envMap, queryReflectVec, specularMIPLevel );\n\t\t\t#else\n\t\t\t\tvec4 envMapColor = textureCube( envMap, queryReflectVec, specularMIPLevel );\n\t\t\t#endif\n\t\t\tenvMapColor.rgb = envMapTexelToLinear( envMapColor ).rgb;\n\t\t#elif defined( ENVMAP_TYPE_CUBE_UV )\n\t\t\tvec3 queryReflectVec = vec3( flipEnvMap * reflectVec.x, reflectVec.yz );\n\t\t\tvec4 envMapColor = textureCubeUV( envMap, queryReflectVec, roughness );\n\t\t#elif defined( ENVMAP_TYPE_EQUIREC )\n\t\t\tvec2 sampleUV;\n\t\t\tsampleUV.y = asin( clamp( reflectVec.y, - 1.0, 1.0 ) ) * RECIPROCAL_PI + 0.5;\n\t\t\tsampleUV.x = atan( reflectVec.z, reflectVec.x ) * RECIPROCAL_PI2 + 0.5;\n\t\t\t#ifdef TEXTURE_LOD_EXT\n\t\t\t\tvec4 envMapColor = texture2DLodEXT( envMap, sampleUV, specularMIPLevel );\n\t\t\t#else\n\t\t\t\tvec4 envMapColor = texture2D( envMap, sampleUV, specularMIPLevel );\n\t\t\t#endif\n\t\t\tenvMapColor.rgb = envMapTexelToLinear( envMapColor ).rgb;\n\t\t#elif defined( ENVMAP_TYPE_SPHERE )\n\t\t\tvec3 reflectView = normalize( ( viewMatrix * vec4( reflectVec, 0.0 ) ).xyz + vec3( 0.0,0.0,1.0 ) );\n\t\t\t#ifdef TEXTURE_LOD_EXT\n\t\t\t\tvec4 envMapColor = texture2DLodEXT( envMap, reflectView.xy * 0.5 + 0.5, specularMIPLevel );\n\t\t\t#else\n\t\t\t\tvec4 envMapColor = texture2D( envMap, reflectView.xy * 0.5 + 0.5, specularMIPLevel );\n\t\t\t#endif\n\t\t\tenvMapColor.rgb = envMapTexelToLinear( envMapColor ).rgb;\n\t\t#endif\n\t\treturn envMapColor.rgb * envMapIntensity;\n\t}\n#endif", +envmap_vertex:"#ifdef USE_ENVMAP\n\t#ifdef ENV_WORLDPOS\n\t\tvWorldPosition = worldPosition.xyz;\n\t#else\n\t\tvec3 cameraToVertex;\n\t\tif ( isOrthographic ) { \n\t\t\tcameraToVertex = normalize( vec3( - viewMatrix[ 0 ][ 2 ], - viewMatrix[ 1 ][ 2 ], - viewMatrix[ 2 ][ 2 ] ) );\n\t\t} else {\n\t\t\tcameraToVertex = normalize( worldPosition.xyz - cameraPosition );\n\t\t}\n\t\tvec3 worldNormal = inverseTransformDirection( transformedNormal, viewMatrix );\n\t\t#ifdef ENVMAP_MODE_REFLECTION\n\t\t\tvReflect = reflect( cameraToVertex, worldNormal );\n\t\t#else\n\t\t\tvReflect = refract( cameraToVertex, worldNormal, refractionRatio );\n\t\t#endif\n\t#endif\n#endif", +fog_vertex:"#ifdef USE_FOG\n\tfogDepth = -mvPosition.z;\n#endif",fog_pars_vertex:"#ifdef USE_FOG\n\tvarying float fogDepth;\n#endif",fog_fragment:"#ifdef USE_FOG\n\t#ifdef FOG_EXP2\n\t\tfloat fogFactor = 1.0 - exp( - fogDensity * fogDensity * fogDepth * fogDepth );\n\t#else\n\t\tfloat fogFactor = smoothstep( fogNear, fogFar, fogDepth );\n\t#endif\n\tgl_FragColor.rgb = mix( gl_FragColor.rgb, fogColor, fogFactor );\n#endif",fog_pars_fragment:"#ifdef USE_FOG\n\tuniform vec3 fogColor;\n\tvarying float fogDepth;\n\t#ifdef FOG_EXP2\n\t\tuniform float fogDensity;\n\t#else\n\t\tuniform float fogNear;\n\t\tuniform float fogFar;\n\t#endif\n#endif", +gradientmap_pars_fragment:"#ifdef TOON\n\tuniform sampler2D gradientMap;\n\tvec3 getGradientIrradiance( vec3 normal, vec3 lightDirection ) {\n\t\tfloat dotNL = dot( normal, lightDirection );\n\t\tvec2 coord = vec2( dotNL * 0.5 + 0.5, 0.0 );\n\t\t#ifdef USE_GRADIENTMAP\n\t\t\treturn texture2D( gradientMap, coord ).rgb;\n\t\t#else\n\t\t\treturn ( coord.x < 0.7 ) ? vec3( 0.7 ) : vec3( 1.0 );\n\t\t#endif\n\t}\n#endif",lightmap_fragment:"#ifdef USE_LIGHTMAP\n\treflectedLight.indirectDiffuse += PI * texture2D( lightMap, vUv2 ).xyz * lightMapIntensity;\n#endif", +lightmap_pars_fragment:"#ifdef USE_LIGHTMAP\n\tuniform sampler2D lightMap;\n\tuniform float lightMapIntensity;\n#endif",lights_lambert_vertex:"vec3 diffuse = vec3( 1.0 );\nGeometricContext geometry;\ngeometry.position = mvPosition.xyz;\ngeometry.normal = normalize( transformedNormal );\ngeometry.viewDir = ( isOrthographic ) ? vec3( 0, 0, 1 ) : normalize( -mvPosition.xyz );\nGeometricContext backGeometry;\nbackGeometry.position = geometry.position;\nbackGeometry.normal = -geometry.normal;\nbackGeometry.viewDir = geometry.viewDir;\nvLightFront = vec3( 0.0 );\nvIndirectFront = vec3( 0.0 );\n#ifdef DOUBLE_SIDED\n\tvLightBack = vec3( 0.0 );\n\tvIndirectBack = vec3( 0.0 );\n#endif\nIncidentLight directLight;\nfloat dotNL;\nvec3 directLightColor_Diffuse;\n#if NUM_POINT_LIGHTS > 0\n\t#pragma unroll_loop\n\tfor ( int i = 0; i < NUM_POINT_LIGHTS; i ++ ) {\n\t\tgetPointDirectLightIrradiance( pointLights[ i ], geometry, directLight );\n\t\tdotNL = dot( geometry.normal, directLight.direction );\n\t\tdirectLightColor_Diffuse = PI * directLight.color;\n\t\tvLightFront += saturate( dotNL ) * directLightColor_Diffuse;\n\t\t#ifdef DOUBLE_SIDED\n\t\t\tvLightBack += saturate( -dotNL ) * directLightColor_Diffuse;\n\t\t#endif\n\t}\n#endif\n#if NUM_SPOT_LIGHTS > 0\n\t#pragma unroll_loop\n\tfor ( int i = 0; i < NUM_SPOT_LIGHTS; i ++ ) {\n\t\tgetSpotDirectLightIrradiance( spotLights[ i ], geometry, directLight );\n\t\tdotNL = dot( geometry.normal, directLight.direction );\n\t\tdirectLightColor_Diffuse = PI * directLight.color;\n\t\tvLightFront += saturate( dotNL ) * directLightColor_Diffuse;\n\t\t#ifdef DOUBLE_SIDED\n\t\t\tvLightBack += saturate( -dotNL ) * directLightColor_Diffuse;\n\t\t#endif\n\t}\n#endif\n#if NUM_DIR_LIGHTS > 0\n\t#pragma unroll_loop\n\tfor ( int i = 0; i < NUM_DIR_LIGHTS; i ++ ) {\n\t\tgetDirectionalDirectLightIrradiance( directionalLights[ i ], geometry, directLight );\n\t\tdotNL = dot( geometry.normal, directLight.direction );\n\t\tdirectLightColor_Diffuse = PI * directLight.color;\n\t\tvLightFront += saturate( dotNL ) * directLightColor_Diffuse;\n\t\t#ifdef DOUBLE_SIDED\n\t\t\tvLightBack += saturate( -dotNL ) * directLightColor_Diffuse;\n\t\t#endif\n\t}\n#endif\n#if NUM_HEMI_LIGHTS > 0\n\t#pragma unroll_loop\n\tfor ( int i = 0; i < NUM_HEMI_LIGHTS; i ++ ) {\n\t\tvIndirectFront += getHemisphereLightIrradiance( hemisphereLights[ i ], geometry );\n\t\t#ifdef DOUBLE_SIDED\n\t\t\tvIndirectBack += getHemisphereLightIrradiance( hemisphereLights[ i ], backGeometry );\n\t\t#endif\n\t}\n#endif", +lights_pars_begin:"uniform bool receiveShadow;\nuniform vec3 ambientLightColor;\nuniform vec3 lightProbe[ 9 ];\nvec3 shGetIrradianceAt( in vec3 normal, in vec3 shCoefficients[ 9 ] ) {\n\tfloat x = normal.x, y = normal.y, z = normal.z;\n\tvec3 result = shCoefficients[ 0 ] * 0.886227;\n\tresult += shCoefficients[ 1 ] * 2.0 * 0.511664 * y;\n\tresult += shCoefficients[ 2 ] * 2.0 * 0.511664 * z;\n\tresult += shCoefficients[ 3 ] * 2.0 * 0.511664 * x;\n\tresult += shCoefficients[ 4 ] * 2.0 * 0.429043 * x * y;\n\tresult += shCoefficients[ 5 ] * 2.0 * 0.429043 * y * z;\n\tresult += shCoefficients[ 6 ] * ( 0.743125 * z * z - 0.247708 );\n\tresult += shCoefficients[ 7 ] * 2.0 * 0.429043 * x * z;\n\tresult += shCoefficients[ 8 ] * 0.429043 * ( x * x - y * y );\n\treturn result;\n}\nvec3 getLightProbeIrradiance( const in vec3 lightProbe[ 9 ], const in GeometricContext geometry ) {\n\tvec3 worldNormal = inverseTransformDirection( geometry.normal, viewMatrix );\n\tvec3 irradiance = shGetIrradianceAt( worldNormal, lightProbe );\n\treturn irradiance;\n}\nvec3 getAmbientLightIrradiance( const in vec3 ambientLightColor ) {\n\tvec3 irradiance = ambientLightColor;\n\t#ifndef PHYSICALLY_CORRECT_LIGHTS\n\t\tirradiance *= PI;\n\t#endif\n\treturn irradiance;\n}\n#if NUM_DIR_LIGHTS > 0\n\tstruct DirectionalLight {\n\t\tvec3 direction;\n\t\tvec3 color;\n\t\tint shadow;\n\t\tfloat shadowBias;\n\t\tfloat shadowRadius;\n\t\tvec2 shadowMapSize;\n\t};\n\tuniform DirectionalLight directionalLights[ NUM_DIR_LIGHTS ];\n\tvoid getDirectionalDirectLightIrradiance( const in DirectionalLight directionalLight, const in GeometricContext geometry, out IncidentLight directLight ) {\n\t\tdirectLight.color = directionalLight.color;\n\t\tdirectLight.direction = directionalLight.direction;\n\t\tdirectLight.visible = true;\n\t}\n#endif\n#if NUM_POINT_LIGHTS > 0\n\tstruct PointLight {\n\t\tvec3 position;\n\t\tvec3 color;\n\t\tfloat distance;\n\t\tfloat decay;\n\t\tint shadow;\n\t\tfloat shadowBias;\n\t\tfloat shadowRadius;\n\t\tvec2 shadowMapSize;\n\t\tfloat shadowCameraNear;\n\t\tfloat shadowCameraFar;\n\t};\n\tuniform PointLight pointLights[ NUM_POINT_LIGHTS ];\n\tvoid getPointDirectLightIrradiance( const in PointLight pointLight, const in GeometricContext geometry, out IncidentLight directLight ) {\n\t\tvec3 lVector = pointLight.position - geometry.position;\n\t\tdirectLight.direction = normalize( lVector );\n\t\tfloat lightDistance = length( lVector );\n\t\tdirectLight.color = pointLight.color;\n\t\tdirectLight.color *= punctualLightIntensityToIrradianceFactor( lightDistance, pointLight.distance, pointLight.decay );\n\t\tdirectLight.visible = ( directLight.color != vec3( 0.0 ) );\n\t}\n#endif\n#if NUM_SPOT_LIGHTS > 0\n\tstruct SpotLight {\n\t\tvec3 position;\n\t\tvec3 direction;\n\t\tvec3 color;\n\t\tfloat distance;\n\t\tfloat decay;\n\t\tfloat coneCos;\n\t\tfloat penumbraCos;\n\t\tint shadow;\n\t\tfloat shadowBias;\n\t\tfloat shadowRadius;\n\t\tvec2 shadowMapSize;\n\t};\n\tuniform SpotLight spotLights[ NUM_SPOT_LIGHTS ];\n\tvoid getSpotDirectLightIrradiance( const in SpotLight spotLight, const in GeometricContext geometry, out IncidentLight directLight ) {\n\t\tvec3 lVector = spotLight.position - geometry.position;\n\t\tdirectLight.direction = normalize( lVector );\n\t\tfloat lightDistance = length( lVector );\n\t\tfloat angleCos = dot( directLight.direction, spotLight.direction );\n\t\tif ( angleCos > spotLight.coneCos ) {\n\t\t\tfloat spotEffect = smoothstep( spotLight.coneCos, spotLight.penumbraCos, angleCos );\n\t\t\tdirectLight.color = spotLight.color;\n\t\t\tdirectLight.color *= spotEffect * punctualLightIntensityToIrradianceFactor( lightDistance, spotLight.distance, spotLight.decay );\n\t\t\tdirectLight.visible = true;\n\t\t} else {\n\t\t\tdirectLight.color = vec3( 0.0 );\n\t\t\tdirectLight.visible = false;\n\t\t}\n\t}\n#endif\n#if NUM_RECT_AREA_LIGHTS > 0\n\tstruct RectAreaLight {\n\t\tvec3 color;\n\t\tvec3 position;\n\t\tvec3 halfWidth;\n\t\tvec3 halfHeight;\n\t};\n\tuniform sampler2D ltc_1;\tuniform sampler2D ltc_2;\n\tuniform RectAreaLight rectAreaLights[ NUM_RECT_AREA_LIGHTS ];\n#endif\n#if NUM_HEMI_LIGHTS > 0\n\tstruct HemisphereLight {\n\t\tvec3 direction;\n\t\tvec3 skyColor;\n\t\tvec3 groundColor;\n\t};\n\tuniform HemisphereLight hemisphereLights[ NUM_HEMI_LIGHTS ];\n\tvec3 getHemisphereLightIrradiance( const in HemisphereLight hemiLight, const in GeometricContext geometry ) {\n\t\tfloat dotNL = dot( geometry.normal, hemiLight.direction );\n\t\tfloat hemiDiffuseWeight = 0.5 * dotNL + 0.5;\n\t\tvec3 irradiance = mix( hemiLight.groundColor, hemiLight.skyColor, hemiDiffuseWeight );\n\t\t#ifndef PHYSICALLY_CORRECT_LIGHTS\n\t\t\tirradiance *= PI;\n\t\t#endif\n\t\treturn irradiance;\n\t}\n#endif", +lights_phong_fragment:"BlinnPhongMaterial material;\nmaterial.diffuseColor = diffuseColor.rgb;\nmaterial.specularColor = specular;\nmaterial.specularShininess = shininess;\nmaterial.specularStrength = specularStrength;",lights_phong_pars_fragment:"varying vec3 vViewPosition;\n#ifndef FLAT_SHADED\n\tvarying vec3 vNormal;\n#endif\nstruct BlinnPhongMaterial {\n\tvec3\tdiffuseColor;\n\tvec3\tspecularColor;\n\tfloat\tspecularShininess;\n\tfloat\tspecularStrength;\n};\nvoid RE_Direct_BlinnPhong( const in IncidentLight directLight, const in GeometricContext geometry, const in BlinnPhongMaterial material, inout ReflectedLight reflectedLight ) {\n\t#ifdef TOON\n\t\tvec3 irradiance = getGradientIrradiance( geometry.normal, directLight.direction ) * directLight.color;\n\t#else\n\t\tfloat dotNL = saturate( dot( geometry.normal, directLight.direction ) );\n\t\tvec3 irradiance = dotNL * directLight.color;\n\t#endif\n\t#ifndef PHYSICALLY_CORRECT_LIGHTS\n\t\tirradiance *= PI;\n\t#endif\n\treflectedLight.directDiffuse += irradiance * BRDF_Diffuse_Lambert( material.diffuseColor );\n\treflectedLight.directSpecular += irradiance * BRDF_Specular_BlinnPhong( directLight, geometry, material.specularColor, material.specularShininess ) * material.specularStrength;\n}\nvoid RE_IndirectDiffuse_BlinnPhong( const in vec3 irradiance, const in GeometricContext geometry, const in BlinnPhongMaterial material, inout ReflectedLight reflectedLight ) {\n\treflectedLight.indirectDiffuse += irradiance * BRDF_Diffuse_Lambert( material.diffuseColor );\n}\n#define RE_Direct\t\t\t\tRE_Direct_BlinnPhong\n#define RE_IndirectDiffuse\t\tRE_IndirectDiffuse_BlinnPhong\n#define Material_LightProbeLOD( material )\t(0)", +lights_physical_fragment:"PhysicalMaterial material;\nmaterial.diffuseColor = diffuseColor.rgb * ( 1.0 - metalnessFactor );\nmaterial.specularRoughness = clamp( roughnessFactor, 0.04, 1.0 );\n#ifdef REFLECTIVITY\n\tmaterial.specularColor = mix( vec3( MAXIMUM_SPECULAR_COEFFICIENT * pow2( reflectivity ) ), diffuseColor.rgb, metalnessFactor );\n#else\n\tmaterial.specularColor = mix( vec3( DEFAULT_SPECULAR_COEFFICIENT ), diffuseColor.rgb, metalnessFactor );\n#endif\n#ifdef CLEARCOAT\n\tmaterial.clearcoat = saturate( clearcoat );\tmaterial.clearcoatRoughness = clamp( clearcoatRoughness, 0.04, 1.0 );\n#endif\n#ifdef USE_SHEEN\n\tmaterial.sheenColor = sheen;\n#endif", +lights_physical_pars_fragment:"struct PhysicalMaterial {\n\tvec3\tdiffuseColor;\n\tfloat\tspecularRoughness;\n\tvec3\tspecularColor;\n#ifdef CLEARCOAT\n\tfloat clearcoat;\n\tfloat clearcoatRoughness;\n#endif\n#ifdef USE_SHEEN\n\tvec3 sheenColor;\n#endif\n};\n#define MAXIMUM_SPECULAR_COEFFICIENT 0.16\n#define DEFAULT_SPECULAR_COEFFICIENT 0.04\nfloat clearcoatDHRApprox( const in float roughness, const in float dotNL ) {\n\treturn DEFAULT_SPECULAR_COEFFICIENT + ( 1.0 - DEFAULT_SPECULAR_COEFFICIENT ) * ( pow( 1.0 - dotNL, 5.0 ) * pow( 1.0 - roughness, 2.0 ) );\n}\n#if NUM_RECT_AREA_LIGHTS > 0\n\tvoid RE_Direct_RectArea_Physical( const in RectAreaLight rectAreaLight, const in GeometricContext geometry, const in PhysicalMaterial material, inout ReflectedLight reflectedLight ) {\n\t\tvec3 normal = geometry.normal;\n\t\tvec3 viewDir = geometry.viewDir;\n\t\tvec3 position = geometry.position;\n\t\tvec3 lightPos = rectAreaLight.position;\n\t\tvec3 halfWidth = rectAreaLight.halfWidth;\n\t\tvec3 halfHeight = rectAreaLight.halfHeight;\n\t\tvec3 lightColor = rectAreaLight.color;\n\t\tfloat roughness = material.specularRoughness;\n\t\tvec3 rectCoords[ 4 ];\n\t\trectCoords[ 0 ] = lightPos + halfWidth - halfHeight;\t\trectCoords[ 1 ] = lightPos - halfWidth - halfHeight;\n\t\trectCoords[ 2 ] = lightPos - halfWidth + halfHeight;\n\t\trectCoords[ 3 ] = lightPos + halfWidth + halfHeight;\n\t\tvec2 uv = LTC_Uv( normal, viewDir, roughness );\n\t\tvec4 t1 = texture2D( ltc_1, uv );\n\t\tvec4 t2 = texture2D( ltc_2, uv );\n\t\tmat3 mInv = mat3(\n\t\t\tvec3( t1.x, 0, t1.y ),\n\t\t\tvec3( 0, 1, 0 ),\n\t\t\tvec3( t1.z, 0, t1.w )\n\t\t);\n\t\tvec3 fresnel = ( material.specularColor * t2.x + ( vec3( 1.0 ) - material.specularColor ) * t2.y );\n\t\treflectedLight.directSpecular += lightColor * fresnel * LTC_Evaluate( normal, viewDir, position, mInv, rectCoords );\n\t\treflectedLight.directDiffuse += lightColor * material.diffuseColor * LTC_Evaluate( normal, viewDir, position, mat3( 1.0 ), rectCoords );\n\t}\n#endif\nvoid RE_Direct_Physical( const in IncidentLight directLight, const in GeometricContext geometry, const in PhysicalMaterial material, inout ReflectedLight reflectedLight ) {\n\tfloat dotNL = saturate( dot( geometry.normal, directLight.direction ) );\n\tvec3 irradiance = dotNL * directLight.color;\n\t#ifndef PHYSICALLY_CORRECT_LIGHTS\n\t\tirradiance *= PI;\n\t#endif\n\t#ifdef CLEARCOAT\n\t\tfloat ccDotNL = saturate( dot( geometry.clearcoatNormal, directLight.direction ) );\n\t\tvec3 ccIrradiance = ccDotNL * directLight.color;\n\t\t#ifndef PHYSICALLY_CORRECT_LIGHTS\n\t\t\tccIrradiance *= PI;\n\t\t#endif\n\t\tfloat clearcoatDHR = material.clearcoat * clearcoatDHRApprox( material.clearcoatRoughness, ccDotNL );\n\t\treflectedLight.directSpecular += ccIrradiance * material.clearcoat * BRDF_Specular_GGX( directLight, geometry.viewDir, geometry.clearcoatNormal, vec3( DEFAULT_SPECULAR_COEFFICIENT ), material.clearcoatRoughness );\n\t#else\n\t\tfloat clearcoatDHR = 0.0;\n\t#endif\n\t#ifdef USE_SHEEN\n\t\treflectedLight.directSpecular += ( 1.0 - clearcoatDHR ) * irradiance * BRDF_Specular_Sheen(\n\t\t\tmaterial.specularRoughness,\n\t\t\tdirectLight.direction,\n\t\t\tgeometry,\n\t\t\tmaterial.sheenColor\n\t\t);\n\t#else\n\t\treflectedLight.directSpecular += ( 1.0 - clearcoatDHR ) * irradiance * BRDF_Specular_GGX( directLight, geometry.viewDir, geometry.normal, material.specularColor, material.specularRoughness);\n\t#endif\n\treflectedLight.directDiffuse += ( 1.0 - clearcoatDHR ) * irradiance * BRDF_Diffuse_Lambert( material.diffuseColor );\n}\nvoid RE_IndirectDiffuse_Physical( const in vec3 irradiance, const in GeometricContext geometry, const in PhysicalMaterial material, inout ReflectedLight reflectedLight ) {\n\treflectedLight.indirectDiffuse += irradiance * BRDF_Diffuse_Lambert( material.diffuseColor );\n}\nvoid RE_IndirectSpecular_Physical( const in vec3 radiance, const in vec3 irradiance, const in vec3 clearcoatRadiance, const in GeometricContext geometry, const in PhysicalMaterial material, inout ReflectedLight reflectedLight) {\n\t#ifdef CLEARCOAT\n\t\tfloat ccDotNV = saturate( dot( geometry.clearcoatNormal, geometry.viewDir ) );\n\t\treflectedLight.indirectSpecular += clearcoatRadiance * material.clearcoat * BRDF_Specular_GGX_Environment( geometry.viewDir, geometry.clearcoatNormal, vec3( DEFAULT_SPECULAR_COEFFICIENT ), material.clearcoatRoughness );\n\t\tfloat ccDotNL = ccDotNV;\n\t\tfloat clearcoatDHR = material.clearcoat * clearcoatDHRApprox( material.clearcoatRoughness, ccDotNL );\n\t#else\n\t\tfloat clearcoatDHR = 0.0;\n\t#endif\n\tfloat clearcoatInv = 1.0 - clearcoatDHR;\n\tvec3 singleScattering = vec3( 0.0 );\n\tvec3 multiScattering = vec3( 0.0 );\n\tvec3 cosineWeightedIrradiance = irradiance * RECIPROCAL_PI;\n\tBRDF_Specular_Multiscattering_Environment( geometry, material.specularColor, material.specularRoughness, singleScattering, multiScattering );\n\tvec3 diffuse = material.diffuseColor * ( 1.0 - ( singleScattering + multiScattering ) );\n\treflectedLight.indirectSpecular += clearcoatInv * radiance * singleScattering;\n\treflectedLight.indirectSpecular += multiScattering * cosineWeightedIrradiance;\n\treflectedLight.indirectDiffuse += diffuse * cosineWeightedIrradiance;\n}\n#define RE_Direct\t\t\t\tRE_Direct_Physical\n#define RE_Direct_RectArea\t\tRE_Direct_RectArea_Physical\n#define RE_IndirectDiffuse\t\tRE_IndirectDiffuse_Physical\n#define RE_IndirectSpecular\t\tRE_IndirectSpecular_Physical\nfloat computeSpecularOcclusion( const in float dotNV, const in float ambientOcclusion, const in float roughness ) {\n\treturn saturate( pow( dotNV + ambientOcclusion, exp2( - 16.0 * roughness - 1.0 ) ) - 1.0 + ambientOcclusion );\n}", +lights_fragment_begin:"\nGeometricContext geometry;\ngeometry.position = - vViewPosition;\ngeometry.normal = normal;\ngeometry.viewDir = ( isOrthographic ) ? vec3( 0, 0, 1 ) : normalize( vViewPosition );\n#ifdef CLEARCOAT\n\tgeometry.clearcoatNormal = clearcoatNormal;\n#endif\nIncidentLight directLight;\n#if ( NUM_POINT_LIGHTS > 0 ) && defined( RE_Direct )\n\tPointLight pointLight;\n\t#pragma unroll_loop\n\tfor ( int i = 0; i < NUM_POINT_LIGHTS; i ++ ) {\n\t\tpointLight = pointLights[ i ];\n\t\tgetPointDirectLightIrradiance( pointLight, geometry, directLight );\n\t\t#if defined( USE_SHADOWMAP ) && ( UNROLLED_LOOP_INDEX < NUM_POINT_LIGHT_SHADOWS )\n\t\tdirectLight.color *= all( bvec3( pointLight.shadow, directLight.visible, receiveShadow ) ) ? getPointShadow( pointShadowMap[ i ], pointLight.shadowMapSize, pointLight.shadowBias, pointLight.shadowRadius, vPointShadowCoord[ i ], pointLight.shadowCameraNear, pointLight.shadowCameraFar ) : 1.0;\n\t\t#endif\n\t\tRE_Direct( directLight, geometry, material, reflectedLight );\n\t}\n#endif\n#if ( NUM_SPOT_LIGHTS > 0 ) && defined( RE_Direct )\n\tSpotLight spotLight;\n\t#pragma unroll_loop\n\tfor ( int i = 0; i < NUM_SPOT_LIGHTS; i ++ ) {\n\t\tspotLight = spotLights[ i ];\n\t\tgetSpotDirectLightIrradiance( spotLight, geometry, directLight );\n\t\t#if defined( USE_SHADOWMAP ) && ( UNROLLED_LOOP_INDEX < NUM_SPOT_LIGHT_SHADOWS )\n\t\tdirectLight.color *= all( bvec3( spotLight.shadow, directLight.visible, receiveShadow ) ) ? getShadow( spotShadowMap[ i ], spotLight.shadowMapSize, spotLight.shadowBias, spotLight.shadowRadius, vSpotShadowCoord[ i ] ) : 1.0;\n\t\t#endif\n\t\tRE_Direct( directLight, geometry, material, reflectedLight );\n\t}\n#endif\n#if ( NUM_DIR_LIGHTS > 0 ) && defined( RE_Direct )\n\tDirectionalLight directionalLight;\n\t#pragma unroll_loop\n\tfor ( int i = 0; i < NUM_DIR_LIGHTS; i ++ ) {\n\t\tdirectionalLight = directionalLights[ i ];\n\t\tgetDirectionalDirectLightIrradiance( directionalLight, geometry, directLight );\n\t\t#if defined( USE_SHADOWMAP ) && ( UNROLLED_LOOP_INDEX < NUM_DIR_LIGHT_SHADOWS )\n\t\tdirectLight.color *= all( bvec3( directionalLight.shadow, directLight.visible, receiveShadow ) ) ? getShadow( directionalShadowMap[ i ], directionalLight.shadowMapSize, directionalLight.shadowBias, directionalLight.shadowRadius, vDirectionalShadowCoord[ i ] ) : 1.0;\n\t\t#endif\n\t\tRE_Direct( directLight, geometry, material, reflectedLight );\n\t}\n#endif\n#if ( NUM_RECT_AREA_LIGHTS > 0 ) && defined( RE_Direct_RectArea )\n\tRectAreaLight rectAreaLight;\n\t#pragma unroll_loop\n\tfor ( int i = 0; i < NUM_RECT_AREA_LIGHTS; i ++ ) {\n\t\trectAreaLight = rectAreaLights[ i ];\n\t\tRE_Direct_RectArea( rectAreaLight, geometry, material, reflectedLight );\n\t}\n#endif\n#if defined( RE_IndirectDiffuse )\n\tvec3 iblIrradiance = vec3( 0.0 );\n\tvec3 irradiance = getAmbientLightIrradiance( ambientLightColor );\n\tirradiance += getLightProbeIrradiance( lightProbe, geometry );\n\t#if ( NUM_HEMI_LIGHTS > 0 )\n\t\t#pragma unroll_loop\n\t\tfor ( int i = 0; i < NUM_HEMI_LIGHTS; i ++ ) {\n\t\t\tirradiance += getHemisphereLightIrradiance( hemisphereLights[ i ], geometry );\n\t\t}\n\t#endif\n#endif\n#if defined( RE_IndirectSpecular )\n\tvec3 radiance = vec3( 0.0 );\n\tvec3 clearcoatRadiance = vec3( 0.0 );\n#endif", +lights_fragment_maps:"#if defined( RE_IndirectDiffuse )\n\t#ifdef USE_LIGHTMAP\n\t\tvec3 lightMapIrradiance = texture2D( lightMap, vUv2 ).xyz * lightMapIntensity;\n\t\t#ifndef PHYSICALLY_CORRECT_LIGHTS\n\t\t\tlightMapIrradiance *= PI;\n\t\t#endif\n\t\tirradiance += lightMapIrradiance;\n\t#endif\n\t#if defined( USE_ENVMAP ) && defined( STANDARD ) && defined( ENVMAP_TYPE_CUBE_UV )\n\t\tiblIrradiance += getLightProbeIndirectIrradiance( geometry, maxMipLevel );\n\t#endif\n#endif\n#if defined( USE_ENVMAP ) && defined( RE_IndirectSpecular )\n\tradiance += getLightProbeIndirectRadiance( geometry.viewDir, geometry.normal, material.specularRoughness, maxMipLevel );\n\t#ifdef CLEARCOAT\n\t\tclearcoatRadiance += getLightProbeIndirectRadiance( geometry.viewDir, geometry.clearcoatNormal, material.clearcoatRoughness, maxMipLevel );\n\t#endif\n#endif", +lights_fragment_end:"#if defined( RE_IndirectDiffuse )\n\tRE_IndirectDiffuse( irradiance, geometry, material, reflectedLight );\n#endif\n#if defined( RE_IndirectSpecular )\n\tRE_IndirectSpecular( radiance, iblIrradiance, clearcoatRadiance, geometry, material, reflectedLight );\n#endif",logdepthbuf_fragment:"#if defined( USE_LOGDEPTHBUF ) && defined( USE_LOGDEPTHBUF_EXT )\n\tgl_FragDepthEXT = vIsPerspective == 0.0 ? gl_FragCoord.z : log2( vFragDepth ) * logDepthBufFC * 0.5;\n#endif",logdepthbuf_pars_fragment:"#if defined( USE_LOGDEPTHBUF ) && defined( USE_LOGDEPTHBUF_EXT )\n\tuniform float logDepthBufFC;\n\tvarying float vFragDepth;\n\tvarying float vIsPerspective;\n#endif", +logdepthbuf_pars_vertex:"#ifdef USE_LOGDEPTHBUF\n\t#ifdef USE_LOGDEPTHBUF_EXT\n\t\tvarying float vFragDepth;\n\t\tvarying float vIsPerspective;\n\t#else\n\t\tuniform float logDepthBufFC;\n\t#endif\n#endif",logdepthbuf_vertex:"#ifdef USE_LOGDEPTHBUF\n\t#ifdef USE_LOGDEPTHBUF_EXT\n\t\tvFragDepth = 1.0 + gl_Position.w;\n\t\tvIsPerspective = float( isPerspectiveMatrix( projectionMatrix ) );\n\t#else\n\t\tif ( isPerspectiveMatrix( projectionMatrix ) ) {\n\t\t\tgl_Position.z = log2( max( EPSILON, gl_Position.w + 1.0 ) ) * logDepthBufFC - 1.0;\n\t\t\tgl_Position.z *= gl_Position.w;\n\t\t}\n\t#endif\n#endif", +map_fragment:"#ifdef USE_MAP\n\tvec4 texelColor = texture2D( map, vUv );\n\ttexelColor = mapTexelToLinear( texelColor );\n\tdiffuseColor *= texelColor;\n#endif",map_pars_fragment:"#ifdef USE_MAP\n\tuniform sampler2D map;\n#endif",map_particle_fragment:"#if defined( USE_MAP ) || defined( USE_ALPHAMAP )\n\tvec2 uv = ( uvTransform * vec3( gl_PointCoord.x, 1.0 - gl_PointCoord.y, 1 ) ).xy;\n#endif\n#ifdef USE_MAP\n\tvec4 mapTexel = texture2D( map, uv );\n\tdiffuseColor *= mapTexelToLinear( mapTexel );\n#endif\n#ifdef USE_ALPHAMAP\n\tdiffuseColor.a *= texture2D( alphaMap, uv ).g;\n#endif", +map_particle_pars_fragment:"#if defined( USE_MAP ) || defined( USE_ALPHAMAP )\n\tuniform mat3 uvTransform;\n#endif\n#ifdef USE_MAP\n\tuniform sampler2D map;\n#endif\n#ifdef USE_ALPHAMAP\n\tuniform sampler2D alphaMap;\n#endif",metalnessmap_fragment:"float metalnessFactor = metalness;\n#ifdef USE_METALNESSMAP\n\tvec4 texelMetalness = texture2D( metalnessMap, vUv );\n\tmetalnessFactor *= texelMetalness.b;\n#endif",metalnessmap_pars_fragment:"#ifdef USE_METALNESSMAP\n\tuniform sampler2D metalnessMap;\n#endif", +morphnormal_vertex:"#ifdef USE_MORPHNORMALS\n\tobjectNormal += ( morphNormal0 - normal ) * morphTargetInfluences[ 0 ];\n\tobjectNormal += ( morphNormal1 - normal ) * morphTargetInfluences[ 1 ];\n\tobjectNormal += ( morphNormal2 - normal ) * morphTargetInfluences[ 2 ];\n\tobjectNormal += ( morphNormal3 - normal ) * morphTargetInfluences[ 3 ];\n#endif",morphtarget_pars_vertex:"#ifdef USE_MORPHTARGETS\n\t#ifndef USE_MORPHNORMALS\n\tuniform float morphTargetInfluences[ 8 ];\n\t#else\n\tuniform float morphTargetInfluences[ 4 ];\n\t#endif\n#endif", +morphtarget_vertex:"#ifdef USE_MORPHTARGETS\n\ttransformed += ( morphTarget0 - position ) * morphTargetInfluences[ 0 ];\n\ttransformed += ( morphTarget1 - position ) * morphTargetInfluences[ 1 ];\n\ttransformed += ( morphTarget2 - position ) * morphTargetInfluences[ 2 ];\n\ttransformed += ( morphTarget3 - position ) * morphTargetInfluences[ 3 ];\n\t#ifndef USE_MORPHNORMALS\n\ttransformed += ( morphTarget4 - position ) * morphTargetInfluences[ 4 ];\n\ttransformed += ( morphTarget5 - position ) * morphTargetInfluences[ 5 ];\n\ttransformed += ( morphTarget6 - position ) * morphTargetInfluences[ 6 ];\n\ttransformed += ( morphTarget7 - position ) * morphTargetInfluences[ 7 ];\n\t#endif\n#endif", +normal_fragment_begin:"#ifdef FLAT_SHADED\n\tvec3 fdx = vec3( dFdx( vViewPosition.x ), dFdx( vViewPosition.y ), dFdx( vViewPosition.z ) );\n\tvec3 fdy = vec3( dFdy( vViewPosition.x ), dFdy( vViewPosition.y ), dFdy( vViewPosition.z ) );\n\tvec3 normal = normalize( cross( fdx, fdy ) );\n#else\n\tvec3 normal = normalize( vNormal );\n\t#ifdef DOUBLE_SIDED\n\t\tnormal = normal * ( float( gl_FrontFacing ) * 2.0 - 1.0 );\n\t#endif\n\t#ifdef USE_TANGENT\n\t\tvec3 tangent = normalize( vTangent );\n\t\tvec3 bitangent = normalize( vBitangent );\n\t\t#ifdef DOUBLE_SIDED\n\t\t\ttangent = tangent * ( float( gl_FrontFacing ) * 2.0 - 1.0 );\n\t\t\tbitangent = bitangent * ( float( gl_FrontFacing ) * 2.0 - 1.0 );\n\t\t#endif\n\t#endif\n#endif\nvec3 geometryNormal = normal;", +normal_fragment_maps:"#ifdef OBJECTSPACE_NORMALMAP\n\tnormal = texture2D( normalMap, vUv ).xyz * 2.0 - 1.0;\n\t#ifdef FLIP_SIDED\n\t\tnormal = - normal;\n\t#endif\n\t#ifdef DOUBLE_SIDED\n\t\tnormal = normal * ( float( gl_FrontFacing ) * 2.0 - 1.0 );\n\t#endif\n\tnormal = normalize( normalMatrix * normal );\n#elif defined( TANGENTSPACE_NORMALMAP )\n\t#ifdef USE_TANGENT\n\t\tmat3 vTBN = mat3( tangent, bitangent, normal );\n\t\tvec3 mapN = texture2D( normalMap, vUv ).xyz * 2.0 - 1.0;\n\t\tmapN.xy = normalScale * mapN.xy;\n\t\tnormal = normalize( vTBN * mapN );\n\t#else\n\t\tnormal = perturbNormal2Arb( -vViewPosition, normal, normalScale, normalMap );\n\t#endif\n#elif defined( USE_BUMPMAP )\n\tnormal = perturbNormalArb( -vViewPosition, normal, dHdxy_fwd() );\n#endif", +normalmap_pars_fragment:"#ifdef USE_NORMALMAP\n\tuniform sampler2D normalMap;\n\tuniform vec2 normalScale;\n#endif\n#ifdef OBJECTSPACE_NORMALMAP\n\tuniform mat3 normalMatrix;\n#endif\n#if ! defined ( USE_TANGENT ) && ( defined ( TANGENTSPACE_NORMALMAP ) || defined ( USE_CLEARCOAT_NORMALMAP ) )\n\tvec3 perturbNormal2Arb( vec3 eye_pos, vec3 surf_norm, vec2 normalScale, in sampler2D normalMap ) {\n\t\tvec3 q0 = vec3( dFdx( eye_pos.x ), dFdx( eye_pos.y ), dFdx( eye_pos.z ) );\n\t\tvec3 q1 = vec3( dFdy( eye_pos.x ), dFdy( eye_pos.y ), dFdy( eye_pos.z ) );\n\t\tvec2 st0 = dFdx( vUv.st );\n\t\tvec2 st1 = dFdy( vUv.st );\n\t\tfloat scale = sign( st1.t * st0.s - st0.t * st1.s );\n\t\tvec3 S = normalize( ( q0 * st1.t - q1 * st0.t ) * scale );\n\t\tvec3 T = normalize( ( - q0 * st1.s + q1 * st0.s ) * scale );\n\t\tvec3 N = normalize( surf_norm );\n\t\tvec3 mapN = texture2D( normalMap, vUv ).xyz * 2.0 - 1.0;\n\t\tmapN.xy *= normalScale;\n\t\t#ifdef DOUBLE_SIDED\n\t\t\tbool frontFacing = dot( cross( S, T ), N ) > 0.0;\n\t\t\tmapN.xy *= ( float( frontFacing ) * 2.0 - 1.0 );\n\t\t#else\n\t\t\tmapN.xy *= ( float( gl_FrontFacing ) * 2.0 - 1.0 );\n\t\t#endif\n\t\tmat3 tsn = mat3( S, T, N );\n\t\treturn normalize( tsn * mapN );\n\t}\n#endif", +clearcoat_normal_fragment_begin:"#ifdef CLEARCOAT\n\tvec3 clearcoatNormal = geometryNormal;\n#endif",clearcoat_normal_fragment_maps:"#ifdef USE_CLEARCOAT_NORMALMAP\n\t#ifdef USE_TANGENT\n\t\tmat3 vTBN = mat3( tangent, bitangent, clearcoatNormal );\n\t\tvec3 mapN = texture2D( normalMap, vUv ).xyz * 2.0 - 1.0;\n\t\tmapN.xy = clearcoatNormalScale * mapN.xy;\n\t\tclearcoatNormal = normalize( vTBN * mapN );\n\t#else\n\t\tclearcoatNormal = perturbNormal2Arb( - vViewPosition, clearcoatNormal, clearcoatNormalScale, clearcoatNormalMap );\n\t#endif\n#endif", +clearcoat_normalmap_pars_fragment:"#ifdef USE_CLEARCOAT_NORMALMAP\n\tuniform sampler2D clearcoatNormalMap;\n\tuniform vec2 clearcoatNormalScale;\n#endif",packing:"vec3 packNormalToRGB( const in vec3 normal ) {\n\treturn normalize( normal ) * 0.5 + 0.5;\n}\nvec3 unpackRGBToNormal( const in vec3 rgb ) {\n\treturn 2.0 * rgb.xyz - 1.0;\n}\nconst float PackUpscale = 256. / 255.;const float UnpackDownscale = 255. / 256.;\nconst vec3 PackFactors = vec3( 256. * 256. * 256., 256. * 256., 256. );\nconst vec4 UnpackFactors = UnpackDownscale / vec4( PackFactors, 1. );\nconst float ShiftRight8 = 1. / 256.;\nvec4 packDepthToRGBA( const in float v ) {\n\tvec4 r = vec4( fract( v * PackFactors ), v );\n\tr.yzw -= r.xyz * ShiftRight8;\treturn r * PackUpscale;\n}\nfloat unpackRGBAToDepth( const in vec4 v ) {\n\treturn dot( v, UnpackFactors );\n}\nvec4 encodeHalfRGBA ( vec2 v ) {\n\tvec4 encoded = vec4( 0.0 );\n\tconst vec2 offset = vec2( 1.0 / 255.0, 0.0 );\n\tencoded.xy = vec2( v.x, fract( v.x * 255.0 ) );\n\tencoded.xy = encoded.xy - ( encoded.yy * offset );\n\tencoded.zw = vec2( v.y, fract( v.y * 255.0 ) );\n\tencoded.zw = encoded.zw - ( encoded.ww * offset );\n\treturn encoded;\n}\nvec2 decodeHalfRGBA( vec4 v ) {\n\treturn vec2( v.x + ( v.y / 255.0 ), v.z + ( v.w / 255.0 ) );\n}\nfloat viewZToOrthographicDepth( const in float viewZ, const in float near, const in float far ) {\n\treturn ( viewZ + near ) / ( near - far );\n}\nfloat orthographicDepthToViewZ( const in float linearClipZ, const in float near, const in float far ) {\n\treturn linearClipZ * ( near - far ) - near;\n}\nfloat viewZToPerspectiveDepth( const in float viewZ, const in float near, const in float far ) {\n\treturn (( near + viewZ ) * far ) / (( far - near ) * viewZ );\n}\nfloat perspectiveDepthToViewZ( const in float invClipZ, const in float near, const in float far ) {\n\treturn ( near * far ) / ( ( far - near ) * invClipZ - far );\n}", +premultiplied_alpha_fragment:"#ifdef PREMULTIPLIED_ALPHA\n\tgl_FragColor.rgb *= gl_FragColor.a;\n#endif",project_vertex:"vec4 mvPosition = vec4( transformed, 1.0 );\n#ifdef USE_INSTANCING\n\tmvPosition = instanceMatrix * mvPosition;\n#endif\nmvPosition = modelViewMatrix * mvPosition;\ngl_Position = projectionMatrix * mvPosition;",dithering_fragment:"#ifdef DITHERING\n\tgl_FragColor.rgb = dithering( gl_FragColor.rgb );\n#endif",dithering_pars_fragment:"#ifdef DITHERING\n\tvec3 dithering( vec3 color ) {\n\t\tfloat grid_position = rand( gl_FragCoord.xy );\n\t\tvec3 dither_shift_RGB = vec3( 0.25 / 255.0, -0.25 / 255.0, 0.25 / 255.0 );\n\t\tdither_shift_RGB = mix( 2.0 * dither_shift_RGB, -2.0 * dither_shift_RGB, grid_position );\n\t\treturn color + dither_shift_RGB;\n\t}\n#endif", +roughnessmap_fragment:"float roughnessFactor = roughness;\n#ifdef USE_ROUGHNESSMAP\n\tvec4 texelRoughness = texture2D( roughnessMap, vUv );\n\troughnessFactor *= texelRoughness.g;\n#endif",roughnessmap_pars_fragment:"#ifdef USE_ROUGHNESSMAP\n\tuniform sampler2D roughnessMap;\n#endif",shadowmap_pars_fragment:"#ifdef USE_SHADOWMAP\n\t#if NUM_DIR_LIGHT_SHADOWS > 0\n\t\tuniform sampler2D directionalShadowMap[ NUM_DIR_LIGHT_SHADOWS ];\n\t\tvarying vec4 vDirectionalShadowCoord[ NUM_DIR_LIGHT_SHADOWS ];\n\t#endif\n\t#if NUM_SPOT_LIGHT_SHADOWS > 0\n\t\tuniform sampler2D spotShadowMap[ NUM_SPOT_LIGHT_SHADOWS ];\n\t\tvarying vec4 vSpotShadowCoord[ NUM_SPOT_LIGHT_SHADOWS ];\n\t#endif\n\t#if NUM_POINT_LIGHT_SHADOWS > 0\n\t\tuniform sampler2D pointShadowMap[ NUM_POINT_LIGHT_SHADOWS ];\n\t\tvarying vec4 vPointShadowCoord[ NUM_POINT_LIGHT_SHADOWS ];\n\t#endif\n\tfloat texture2DCompare( sampler2D depths, vec2 uv, float compare ) {\n\t\treturn step( compare, unpackRGBAToDepth( texture2D( depths, uv ) ) );\n\t}\n\tvec2 texture2DDistribution( sampler2D shadow, vec2 uv ) {\n\t\treturn decodeHalfRGBA( texture2D( shadow, uv ) );\n\t}\n\tfloat VSMShadow (sampler2D shadow, vec2 uv, float compare ){\n\t\tfloat occlusion = 1.0;\n\t\tvec2 distribution = texture2DDistribution( shadow, uv );\n\t\tfloat hard_shadow = step( compare , distribution.x );\n\t\tif (hard_shadow != 1.0 ) {\n\t\t\tfloat distance = compare - distribution.x ;\n\t\t\tfloat variance = max( 0.00000, distribution.y * distribution.y );\n\t\t\tfloat softness_probability = variance / (variance + distance * distance );\t\t\tsoftness_probability = clamp( ( softness_probability - 0.3 ) / ( 0.95 - 0.3 ), 0.0, 1.0 );\t\t\tocclusion = clamp( max( hard_shadow, softness_probability ), 0.0, 1.0 );\n\t\t}\n\t\treturn occlusion;\n\t}\n\tfloat texture2DShadowLerp( sampler2D depths, vec2 size, vec2 uv, float compare ) {\n\t\tconst vec2 offset = vec2( 0.0, 1.0 );\n\t\tvec2 texelSize = vec2( 1.0 ) / size;\n\t\tvec2 centroidUV = ( floor( uv * size - 0.5 ) + 0.5 ) * texelSize;\n\t\tfloat lb = texture2DCompare( depths, centroidUV + texelSize * offset.xx, compare );\n\t\tfloat lt = texture2DCompare( depths, centroidUV + texelSize * offset.xy, compare );\n\t\tfloat rb = texture2DCompare( depths, centroidUV + texelSize * offset.yx, compare );\n\t\tfloat rt = texture2DCompare( depths, centroidUV + texelSize * offset.yy, compare );\n\t\tvec2 f = fract( uv * size + 0.5 );\n\t\tfloat a = mix( lb, lt, f.y );\n\t\tfloat b = mix( rb, rt, f.y );\n\t\tfloat c = mix( a, b, f.x );\n\t\treturn c;\n\t}\n\tfloat getShadow( sampler2D shadowMap, vec2 shadowMapSize, float shadowBias, float shadowRadius, vec4 shadowCoord ) {\n\t\tfloat shadow = 1.0;\n\t\tshadowCoord.xyz /= shadowCoord.w;\n\t\tshadowCoord.z += shadowBias;\n\t\tbvec4 inFrustumVec = bvec4 ( shadowCoord.x >= 0.0, shadowCoord.x <= 1.0, shadowCoord.y >= 0.0, shadowCoord.y <= 1.0 );\n\t\tbool inFrustum = all( inFrustumVec );\n\t\tbvec2 frustumTestVec = bvec2( inFrustum, shadowCoord.z <= 1.0 );\n\t\tbool frustumTest = all( frustumTestVec );\n\t\tif ( frustumTest ) {\n\t\t#if defined( SHADOWMAP_TYPE_PCF )\n\t\t\tvec2 texelSize = vec2( 1.0 ) / shadowMapSize;\n\t\t\tfloat dx0 = - texelSize.x * shadowRadius;\n\t\t\tfloat dy0 = - texelSize.y * shadowRadius;\n\t\t\tfloat dx1 = + texelSize.x * shadowRadius;\n\t\t\tfloat dy1 = + texelSize.y * shadowRadius;\n\t\t\tfloat dx2 = dx0 / 2.0;\n\t\t\tfloat dy2 = dy0 / 2.0;\n\t\t\tfloat dx3 = dx1 / 2.0;\n\t\t\tfloat dy3 = dy1 / 2.0;\n\t\t\tshadow = (\n\t\t\t\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( dx0, dy0 ), shadowCoord.z ) +\n\t\t\t\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( 0.0, dy0 ), shadowCoord.z ) +\n\t\t\t\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( dx1, dy0 ), shadowCoord.z ) +\n\t\t\t\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( dx2, dy2 ), shadowCoord.z ) +\n\t\t\t\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( 0.0, dy2 ), shadowCoord.z ) +\n\t\t\t\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( dx3, dy2 ), shadowCoord.z ) +\n\t\t\t\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( dx0, 0.0 ), shadowCoord.z ) +\n\t\t\t\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( dx2, 0.0 ), shadowCoord.z ) +\n\t\t\t\ttexture2DCompare( shadowMap, shadowCoord.xy, shadowCoord.z ) +\n\t\t\t\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( dx3, 0.0 ), shadowCoord.z ) +\n\t\t\t\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( dx1, 0.0 ), shadowCoord.z ) +\n\t\t\t\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( dx2, dy3 ), shadowCoord.z ) +\n\t\t\t\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( 0.0, dy3 ), shadowCoord.z ) +\n\t\t\t\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( dx3, dy3 ), shadowCoord.z ) +\n\t\t\t\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( dx0, dy1 ), shadowCoord.z ) +\n\t\t\t\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( 0.0, dy1 ), shadowCoord.z ) +\n\t\t\t\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( dx1, dy1 ), shadowCoord.z )\n\t\t\t) * ( 1.0 / 17.0 );\n\t\t#elif defined( SHADOWMAP_TYPE_PCF_SOFT )\n\t\t\tvec2 texelSize = vec2( 1.0 ) / shadowMapSize;\n\t\t\tfloat dx0 = - texelSize.x * shadowRadius;\n\t\t\tfloat dy0 = - texelSize.y * shadowRadius;\n\t\t\tfloat dx1 = + texelSize.x * shadowRadius;\n\t\t\tfloat dy1 = + texelSize.y * shadowRadius;\n\t\t\tshadow = (\n\t\t\t\ttexture2DShadowLerp( shadowMap, shadowMapSize, shadowCoord.xy + vec2( dx0, dy0 ), shadowCoord.z ) +\n\t\t\t\ttexture2DShadowLerp( shadowMap, shadowMapSize, shadowCoord.xy + vec2( 0.0, dy0 ), shadowCoord.z ) +\n\t\t\t\ttexture2DShadowLerp( shadowMap, shadowMapSize, shadowCoord.xy + vec2( dx1, dy0 ), shadowCoord.z ) +\n\t\t\t\ttexture2DShadowLerp( shadowMap, shadowMapSize, shadowCoord.xy + vec2( dx0, 0.0 ), shadowCoord.z ) +\n\t\t\t\ttexture2DShadowLerp( shadowMap, shadowMapSize, shadowCoord.xy, shadowCoord.z ) +\n\t\t\t\ttexture2DShadowLerp( shadowMap, shadowMapSize, shadowCoord.xy + vec2( dx1, 0.0 ), shadowCoord.z ) +\n\t\t\t\ttexture2DShadowLerp( shadowMap, shadowMapSize, shadowCoord.xy + vec2( dx0, dy1 ), shadowCoord.z ) +\n\t\t\t\ttexture2DShadowLerp( shadowMap, shadowMapSize, shadowCoord.xy + vec2( 0.0, dy1 ), shadowCoord.z ) +\n\t\t\t\ttexture2DShadowLerp( shadowMap, shadowMapSize, shadowCoord.xy + vec2( dx1, dy1 ), shadowCoord.z )\n\t\t\t) * ( 1.0 / 9.0 );\n\t\t#elif defined( SHADOWMAP_TYPE_VSM )\n\t\t\tshadow = VSMShadow( shadowMap, shadowCoord.xy, shadowCoord.z );\n\t\t#else\n\t\t\tshadow = texture2DCompare( shadowMap, shadowCoord.xy, shadowCoord.z );\n\t\t#endif\n\t\t}\n\t\treturn shadow;\n\t}\n\tvec2 cubeToUV( vec3 v, float texelSizeY ) {\n\t\tvec3 absV = abs( v );\n\t\tfloat scaleToCube = 1.0 / max( absV.x, max( absV.y, absV.z ) );\n\t\tabsV *= scaleToCube;\n\t\tv *= scaleToCube * ( 1.0 - 2.0 * texelSizeY );\n\t\tvec2 planar = v.xy;\n\t\tfloat almostATexel = 1.5 * texelSizeY;\n\t\tfloat almostOne = 1.0 - almostATexel;\n\t\tif ( absV.z >= almostOne ) {\n\t\t\tif ( v.z > 0.0 )\n\t\t\t\tplanar.x = 4.0 - v.x;\n\t\t} else if ( absV.x >= almostOne ) {\n\t\t\tfloat signX = sign( v.x );\n\t\t\tplanar.x = v.z * signX + 2.0 * signX;\n\t\t} else if ( absV.y >= almostOne ) {\n\t\t\tfloat signY = sign( v.y );\n\t\t\tplanar.x = v.x + 2.0 * signY + 2.0;\n\t\t\tplanar.y = v.z * signY - 2.0;\n\t\t}\n\t\treturn vec2( 0.125, 0.25 ) * planar + vec2( 0.375, 0.75 );\n\t}\n\tfloat getPointShadow( sampler2D shadowMap, vec2 shadowMapSize, float shadowBias, float shadowRadius, vec4 shadowCoord, float shadowCameraNear, float shadowCameraFar ) {\n\t\tvec2 texelSize = vec2( 1.0 ) / ( shadowMapSize * vec2( 4.0, 2.0 ) );\n\t\tvec3 lightToPosition = shadowCoord.xyz;\n\t\tfloat dp = ( length( lightToPosition ) - shadowCameraNear ) / ( shadowCameraFar - shadowCameraNear );\t\tdp += shadowBias;\n\t\tvec3 bd3D = normalize( lightToPosition );\n\t\t#if defined( SHADOWMAP_TYPE_PCF ) || defined( SHADOWMAP_TYPE_PCF_SOFT ) || defined( SHADOWMAP_TYPE_VSM )\n\t\t\tvec2 offset = vec2( - 1, 1 ) * shadowRadius * texelSize.y;\n\t\t\treturn (\n\t\t\t\ttexture2DCompare( shadowMap, cubeToUV( bd3D + offset.xyy, texelSize.y ), dp ) +\n\t\t\t\ttexture2DCompare( shadowMap, cubeToUV( bd3D + offset.yyy, texelSize.y ), dp ) +\n\t\t\t\ttexture2DCompare( shadowMap, cubeToUV( bd3D + offset.xyx, texelSize.y ), dp ) +\n\t\t\t\ttexture2DCompare( shadowMap, cubeToUV( bd3D + offset.yyx, texelSize.y ), dp ) +\n\t\t\t\ttexture2DCompare( shadowMap, cubeToUV( bd3D, texelSize.y ), dp ) +\n\t\t\t\ttexture2DCompare( shadowMap, cubeToUV( bd3D + offset.xxy, texelSize.y ), dp ) +\n\t\t\t\ttexture2DCompare( shadowMap, cubeToUV( bd3D + offset.yxy, texelSize.y ), dp ) +\n\t\t\t\ttexture2DCompare( shadowMap, cubeToUV( bd3D + offset.xxx, texelSize.y ), dp ) +\n\t\t\t\ttexture2DCompare( shadowMap, cubeToUV( bd3D + offset.yxx, texelSize.y ), dp )\n\t\t\t) * ( 1.0 / 9.0 );\n\t\t#else\n\t\t\treturn texture2DCompare( shadowMap, cubeToUV( bd3D, texelSize.y ), dp );\n\t\t#endif\n\t}\n#endif", +shadowmap_pars_vertex:"#ifdef USE_SHADOWMAP\n\t#if NUM_DIR_LIGHT_SHADOWS > 0\n\t\tuniform mat4 directionalShadowMatrix[ NUM_DIR_LIGHT_SHADOWS ];\n\t\tvarying vec4 vDirectionalShadowCoord[ NUM_DIR_LIGHT_SHADOWS ];\n\t#endif\n\t#if NUM_SPOT_LIGHT_SHADOWS > 0\n\t\tuniform mat4 spotShadowMatrix[ NUM_SPOT_LIGHT_SHADOWS ];\n\t\tvarying vec4 vSpotShadowCoord[ NUM_SPOT_LIGHT_SHADOWS ];\n\t#endif\n\t#if NUM_POINT_LIGHT_SHADOWS > 0\n\t\tuniform mat4 pointShadowMatrix[ NUM_POINT_LIGHT_SHADOWS ];\n\t\tvarying vec4 vPointShadowCoord[ NUM_POINT_LIGHT_SHADOWS ];\n\t#endif\n#endif", +shadowmap_vertex:"#ifdef USE_SHADOWMAP\n\t#if NUM_DIR_LIGHT_SHADOWS > 0\n\t#pragma unroll_loop\n\tfor ( int i = 0; i < NUM_DIR_LIGHT_SHADOWS; i ++ ) {\n\t\tvDirectionalShadowCoord[ i ] = directionalShadowMatrix[ i ] * worldPosition;\n\t}\n\t#endif\n\t#if NUM_SPOT_LIGHT_SHADOWS > 0\n\t#pragma unroll_loop\n\tfor ( int i = 0; i < NUM_SPOT_LIGHT_SHADOWS; i ++ ) {\n\t\tvSpotShadowCoord[ i ] = spotShadowMatrix[ i ] * worldPosition;\n\t}\n\t#endif\n\t#if NUM_POINT_LIGHT_SHADOWS > 0\n\t#pragma unroll_loop\n\tfor ( int i = 0; i < NUM_POINT_LIGHT_SHADOWS; i ++ ) {\n\t\tvPointShadowCoord[ i ] = pointShadowMatrix[ i ] * worldPosition;\n\t}\n\t#endif\n#endif", +shadowmask_pars_fragment:"float getShadowMask() {\n\tfloat shadow = 1.0;\n\t#ifdef USE_SHADOWMAP\n\t#if NUM_DIR_LIGHT_SHADOWS > 0\n\tDirectionalLight directionalLight;\n\t#pragma unroll_loop\n\tfor ( int i = 0; i < NUM_DIR_LIGHT_SHADOWS; i ++ ) {\n\t\tdirectionalLight = directionalLights[ i ];\n\t\tshadow *= all( bvec2( directionalLight.shadow, receiveShadow ) ) ? getShadow( directionalShadowMap[ i ], directionalLight.shadowMapSize, directionalLight.shadowBias, directionalLight.shadowRadius, vDirectionalShadowCoord[ i ] ) : 1.0;\n\t}\n\t#endif\n\t#if NUM_SPOT_LIGHT_SHADOWS > 0\n\tSpotLight spotLight;\n\t#pragma unroll_loop\n\tfor ( int i = 0; i < NUM_SPOT_LIGHT_SHADOWS; i ++ ) {\n\t\tspotLight = spotLights[ i ];\n\t\tshadow *= all( bvec2( spotLight.shadow, receiveShadow ) ) ? getShadow( spotShadowMap[ i ], spotLight.shadowMapSize, spotLight.shadowBias, spotLight.shadowRadius, vSpotShadowCoord[ i ] ) : 1.0;\n\t}\n\t#endif\n\t#if NUM_POINT_LIGHT_SHADOWS > 0\n\tPointLight pointLight;\n\t#pragma unroll_loop\n\tfor ( int i = 0; i < NUM_POINT_LIGHT_SHADOWS; i ++ ) {\n\t\tpointLight = pointLights[ i ];\n\t\tshadow *= all( bvec2( pointLight.shadow, receiveShadow ) ) ? getPointShadow( pointShadowMap[ i ], pointLight.shadowMapSize, pointLight.shadowBias, pointLight.shadowRadius, vPointShadowCoord[ i ], pointLight.shadowCameraNear, pointLight.shadowCameraFar ) : 1.0;\n\t}\n\t#endif\n\t#endif\n\treturn shadow;\n}", +skinbase_vertex:"#ifdef USE_SKINNING\n\tmat4 boneMatX = getBoneMatrix( skinIndex.x );\n\tmat4 boneMatY = getBoneMatrix( skinIndex.y );\n\tmat4 boneMatZ = getBoneMatrix( skinIndex.z );\n\tmat4 boneMatW = getBoneMatrix( skinIndex.w );\n#endif",skinning_pars_vertex:"#ifdef USE_SKINNING\n\tuniform mat4 bindMatrix;\n\tuniform mat4 bindMatrixInverse;\n\t#ifdef BONE_TEXTURE\n\t\tuniform highp sampler2D boneTexture;\n\t\tuniform int boneTextureSize;\n\t\tmat4 getBoneMatrix( const in float i ) {\n\t\t\tfloat j = i * 4.0;\n\t\t\tfloat x = mod( j, float( boneTextureSize ) );\n\t\t\tfloat y = floor( j / float( boneTextureSize ) );\n\t\t\tfloat dx = 1.0 / float( boneTextureSize );\n\t\t\tfloat dy = 1.0 / float( boneTextureSize );\n\t\t\ty = dy * ( y + 0.5 );\n\t\t\tvec4 v1 = texture2D( boneTexture, vec2( dx * ( x + 0.5 ), y ) );\n\t\t\tvec4 v2 = texture2D( boneTexture, vec2( dx * ( x + 1.5 ), y ) );\n\t\t\tvec4 v3 = texture2D( boneTexture, vec2( dx * ( x + 2.5 ), y ) );\n\t\t\tvec4 v4 = texture2D( boneTexture, vec2( dx * ( x + 3.5 ), y ) );\n\t\t\tmat4 bone = mat4( v1, v2, v3, v4 );\n\t\t\treturn bone;\n\t\t}\n\t#else\n\t\tuniform mat4 boneMatrices[ MAX_BONES ];\n\t\tmat4 getBoneMatrix( const in float i ) {\n\t\t\tmat4 bone = boneMatrices[ int(i) ];\n\t\t\treturn bone;\n\t\t}\n\t#endif\n#endif", +skinning_vertex:"#ifdef USE_SKINNING\n\tvec4 skinVertex = bindMatrix * vec4( transformed, 1.0 );\n\tvec4 skinned = vec4( 0.0 );\n\tskinned += boneMatX * skinVertex * skinWeight.x;\n\tskinned += boneMatY * skinVertex * skinWeight.y;\n\tskinned += boneMatZ * skinVertex * skinWeight.z;\n\tskinned += boneMatW * skinVertex * skinWeight.w;\n\ttransformed = ( bindMatrixInverse * skinned ).xyz;\n#endif",skinnormal_vertex:"#ifdef USE_SKINNING\n\tmat4 skinMatrix = mat4( 0.0 );\n\tskinMatrix += skinWeight.x * boneMatX;\n\tskinMatrix += skinWeight.y * boneMatY;\n\tskinMatrix += skinWeight.z * boneMatZ;\n\tskinMatrix += skinWeight.w * boneMatW;\n\tskinMatrix = bindMatrixInverse * skinMatrix * bindMatrix;\n\tobjectNormal = vec4( skinMatrix * vec4( objectNormal, 0.0 ) ).xyz;\n\t#ifdef USE_TANGENT\n\t\tobjectTangent = vec4( skinMatrix * vec4( objectTangent, 0.0 ) ).xyz;\n\t#endif\n#endif", +specularmap_fragment:"float specularStrength;\n#ifdef USE_SPECULARMAP\n\tvec4 texelSpecular = texture2D( specularMap, vUv );\n\tspecularStrength = texelSpecular.r;\n#else\n\tspecularStrength = 1.0;\n#endif",specularmap_pars_fragment:"#ifdef USE_SPECULARMAP\n\tuniform sampler2D specularMap;\n#endif",tonemapping_fragment:"#if defined( TONE_MAPPING )\n\tgl_FragColor.rgb = toneMapping( gl_FragColor.rgb );\n#endif",tonemapping_pars_fragment:"#ifndef saturate\n#define saturate(a) clamp( a, 0.0, 1.0 )\n#endif\nuniform float toneMappingExposure;\nuniform float toneMappingWhitePoint;\nvec3 LinearToneMapping( vec3 color ) {\n\treturn toneMappingExposure * color;\n}\nvec3 ReinhardToneMapping( vec3 color ) {\n\tcolor *= toneMappingExposure;\n\treturn saturate( color / ( vec3( 1.0 ) + color ) );\n}\n#define Uncharted2Helper( x ) max( ( ( x * ( 0.15 * x + 0.10 * 0.50 ) + 0.20 * 0.02 ) / ( x * ( 0.15 * x + 0.50 ) + 0.20 * 0.30 ) ) - 0.02 / 0.30, vec3( 0.0 ) )\nvec3 Uncharted2ToneMapping( vec3 color ) {\n\tcolor *= toneMappingExposure;\n\treturn saturate( Uncharted2Helper( color ) / Uncharted2Helper( vec3( toneMappingWhitePoint ) ) );\n}\nvec3 OptimizedCineonToneMapping( vec3 color ) {\n\tcolor *= toneMappingExposure;\n\tcolor = max( vec3( 0.0 ), color - 0.004 );\n\treturn pow( ( color * ( 6.2 * color + 0.5 ) ) / ( color * ( 6.2 * color + 1.7 ) + 0.06 ), vec3( 2.2 ) );\n}\nvec3 ACESFilmicToneMapping( vec3 color ) {\n\tcolor *= toneMappingExposure;\n\treturn saturate( ( color * ( 2.51 * color + 0.03 ) ) / ( color * ( 2.43 * color + 0.59 ) + 0.14 ) );\n}", +uv_pars_fragment:"#if ( defined( USE_UV ) && ! defined( UVS_VERTEX_ONLY ) )\n\tvarying vec2 vUv;\n#endif",uv_pars_vertex:"#ifdef USE_UV\n\t#ifdef UVS_VERTEX_ONLY\n\t\tvec2 vUv;\n\t#else\n\t\tvarying vec2 vUv;\n\t#endif\n\tuniform mat3 uvTransform;\n#endif",uv_vertex:"#ifdef USE_UV\n\tvUv = ( uvTransform * vec3( uv, 1 ) ).xy;\n#endif",uv2_pars_fragment:"#if defined( USE_LIGHTMAP ) || defined( USE_AOMAP )\n\tvarying vec2 vUv2;\n#endif",uv2_pars_vertex:"#if defined( USE_LIGHTMAP ) || defined( USE_AOMAP )\n\tattribute vec2 uv2;\n\tvarying vec2 vUv2;\n#endif", +uv2_vertex:"#if defined( USE_LIGHTMAP ) || defined( USE_AOMAP )\n\tvUv2 = uv2;\n#endif",worldpos_vertex:"#if defined( USE_ENVMAP ) || defined( DISTANCE ) || defined ( USE_SHADOWMAP )\n\tvec4 worldPosition = vec4( transformed, 1.0 );\n\t#ifdef USE_INSTANCING\n\t\tworldPosition = instanceMatrix * worldPosition;\n\t#endif\n\tworldPosition = modelMatrix * worldPosition;\n#endif",background_frag:"uniform sampler2D t2D;\nvarying vec2 vUv;\nvoid main() {\n\tvec4 texColor = texture2D( t2D, vUv );\n\tgl_FragColor = mapTexelToLinear( texColor );\n\t#include \n\t#include \n}", +background_vert:"varying vec2 vUv;\nuniform mat3 uvTransform;\nvoid main() {\n\tvUv = ( uvTransform * vec3( uv, 1 ) ).xy;\n\tgl_Position = vec4( position.xy, 1.0, 1.0 );\n}",cube_frag:"uniform samplerCube tCube;\nuniform float tFlip;\nuniform float opacity;\nvarying vec3 vWorldDirection;\nvoid main() {\n\tvec4 texColor = textureCube( tCube, vec3( tFlip * vWorldDirection.x, vWorldDirection.yz ) );\n\tgl_FragColor = mapTexelToLinear( texColor );\n\tgl_FragColor.a *= opacity;\n\t#include \n\t#include \n}", +cube_vert:"varying vec3 vWorldDirection;\n#include \nvoid main() {\n\tvWorldDirection = transformDirection( position, modelMatrix );\n\t#include \n\t#include \n\tgl_Position.z = gl_Position.w;\n}",depth_frag:"#if DEPTH_PACKING == 3200\n\tuniform float opacity;\n#endif\n#include \n#include \n#include \n#include \n#include \n#include \n#include \nvoid main() {\n\t#include \n\tvec4 diffuseColor = vec4( 1.0 );\n\t#if DEPTH_PACKING == 3200\n\t\tdiffuseColor.a = opacity;\n\t#endif\n\t#include \n\t#include \n\t#include \n\t#include \n\t#if DEPTH_PACKING == 3200\n\t\tgl_FragColor = vec4( vec3( 1.0 - gl_FragCoord.z ), opacity );\n\t#elif DEPTH_PACKING == 3201\n\t\tgl_FragColor = packDepthToRGBA( gl_FragCoord.z );\n\t#endif\n}", +depth_vert:"#include \n#include \n#include \n#include \n#include \n#include \n#include \nvoid main() {\n\t#include \n\t#include \n\t#ifdef USE_DISPLACEMENTMAP\n\t\t#include \n\t\t#include \n\t\t#include \n\t#endif\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n}", +distanceRGBA_frag:"#define DISTANCE\nuniform vec3 referencePosition;\nuniform float nearDistance;\nuniform float farDistance;\nvarying vec3 vWorldPosition;\n#include \n#include \n#include \n#include \n#include \n#include \nvoid main () {\n\t#include \n\tvec4 diffuseColor = vec4( 1.0 );\n\t#include \n\t#include \n\t#include \n\tfloat dist = length( vWorldPosition - referencePosition );\n\tdist = ( dist - nearDistance ) / ( farDistance - nearDistance );\n\tdist = saturate( dist );\n\tgl_FragColor = packDepthToRGBA( dist );\n}", +distanceRGBA_vert:"#define DISTANCE\nvarying vec3 vWorldPosition;\n#include \n#include \n#include \n#include \n#include \n#include \nvoid main() {\n\t#include \n\t#include \n\t#ifdef USE_DISPLACEMENTMAP\n\t\t#include \n\t\t#include \n\t\t#include \n\t#endif\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\tvWorldPosition = worldPosition.xyz;\n}", +equirect_frag:"uniform sampler2D tEquirect;\nvarying vec3 vWorldDirection;\n#include \nvoid main() {\n\tvec3 direction = normalize( vWorldDirection );\n\tvec2 sampleUV;\n\tsampleUV.y = asin( clamp( direction.y, - 1.0, 1.0 ) ) * RECIPROCAL_PI + 0.5;\n\tsampleUV.x = atan( direction.z, direction.x ) * RECIPROCAL_PI2 + 0.5;\n\tvec4 texColor = texture2D( tEquirect, sampleUV );\n\tgl_FragColor = mapTexelToLinear( texColor );\n\t#include \n\t#include \n}", +equirect_vert:"varying vec3 vWorldDirection;\n#include \nvoid main() {\n\tvWorldDirection = transformDirection( position, modelMatrix );\n\t#include \n\t#include \n}",linedashed_frag:"uniform vec3 diffuse;\nuniform float opacity;\nuniform float dashSize;\nuniform float totalSize;\nvarying float vLineDistance;\n#include \n#include \n#include \n#include \n#include \nvoid main() {\n\t#include \n\tif ( mod( vLineDistance, totalSize ) > dashSize ) {\n\t\tdiscard;\n\t}\n\tvec3 outgoingLight = vec3( 0.0 );\n\tvec4 diffuseColor = vec4( diffuse, opacity );\n\t#include \n\t#include \n\toutgoingLight = diffuseColor.rgb;\n\tgl_FragColor = vec4( outgoingLight, diffuseColor.a );\n\t#include \n\t#include \n\t#include \n\t#include \n}", +linedashed_vert:"uniform float scale;\nattribute float lineDistance;\nvarying float vLineDistance;\n#include \n#include \n#include \n#include \n#include \nvoid main() {\n\t#include \n\tvLineDistance = scale * lineDistance;\n\tvec4 mvPosition = modelViewMatrix * vec4( position, 1.0 );\n\tgl_Position = projectionMatrix * mvPosition;\n\t#include \n\t#include \n\t#include \n}", +meshbasic_frag:"uniform vec3 diffuse;\nuniform float opacity;\n#ifndef FLAT_SHADED\n\tvarying vec3 vNormal;\n#endif\n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \nvoid main() {\n\t#include \n\tvec4 diffuseColor = vec4( diffuse, opacity );\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\tReflectedLight reflectedLight = ReflectedLight( vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ) );\n\t#ifdef USE_LIGHTMAP\n\t\treflectedLight.indirectDiffuse += texture2D( lightMap, vUv2 ).xyz * lightMapIntensity;\n\t#else\n\t\treflectedLight.indirectDiffuse += vec3( 1.0 );\n\t#endif\n\t#include \n\treflectedLight.indirectDiffuse *= diffuseColor.rgb;\n\tvec3 outgoingLight = reflectedLight.indirectDiffuse;\n\t#include \n\tgl_FragColor = vec4( outgoingLight, diffuseColor.a );\n\t#include \n\t#include \n\t#include \n\t#include \n}", +meshbasic_vert:"#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \nvoid main() {\n\t#include \n\t#include \n\t#include \n\t#include \n\t#ifdef USE_ENVMAP\n\t#include \n\t#include \n\t#include \n\t#include \n\t#endif\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n}", +meshlambert_frag:"uniform vec3 diffuse;\nuniform vec3 emissive;\nuniform float opacity;\nvarying vec3 vLightFront;\nvarying vec3 vIndirectFront;\n#ifdef DOUBLE_SIDED\n\tvarying vec3 vLightBack;\n\tvarying vec3 vIndirectBack;\n#endif\n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \nvoid main() {\n\t#include \n\tvec4 diffuseColor = vec4( diffuse, opacity );\n\tReflectedLight reflectedLight = ReflectedLight( vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ) );\n\tvec3 totalEmissiveRadiance = emissive;\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\treflectedLight.indirectDiffuse = getAmbientLightIrradiance( ambientLightColor );\n\t#ifdef DOUBLE_SIDED\n\t\treflectedLight.indirectDiffuse += ( gl_FrontFacing ) ? vIndirectFront : vIndirectBack;\n\t#else\n\t\treflectedLight.indirectDiffuse += vIndirectFront;\n\t#endif\n\t#include \n\treflectedLight.indirectDiffuse *= BRDF_Diffuse_Lambert( diffuseColor.rgb );\n\t#ifdef DOUBLE_SIDED\n\t\treflectedLight.directDiffuse = ( gl_FrontFacing ) ? vLightFront : vLightBack;\n\t#else\n\t\treflectedLight.directDiffuse = vLightFront;\n\t#endif\n\treflectedLight.directDiffuse *= BRDF_Diffuse_Lambert( diffuseColor.rgb ) * getShadowMask();\n\t#include \n\tvec3 outgoingLight = reflectedLight.directDiffuse + reflectedLight.indirectDiffuse + totalEmissiveRadiance;\n\t#include \n\tgl_FragColor = vec4( outgoingLight, diffuseColor.a );\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n}", +meshlambert_vert:"#define LAMBERT\nvarying vec3 vLightFront;\nvarying vec3 vIndirectFront;\n#ifdef DOUBLE_SIDED\n\tvarying vec3 vLightBack;\n\tvarying vec3 vIndirectBack;\n#endif\n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \nvoid main() {\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n}", +meshmatcap_frag:"#define MATCAP\nuniform vec3 diffuse;\nuniform float opacity;\nuniform sampler2D matcap;\nvarying vec3 vViewPosition;\n#ifndef FLAT_SHADED\n\tvarying vec3 vNormal;\n#endif\n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \nvoid main() {\n\t#include \n\tvec4 diffuseColor = vec4( diffuse, opacity );\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\tvec3 viewDir = normalize( vViewPosition );\n\tvec3 x = normalize( vec3( viewDir.z, 0.0, - viewDir.x ) );\n\tvec3 y = cross( viewDir, x );\n\tvec2 uv = vec2( dot( x, normal ), dot( y, normal ) ) * 0.495 + 0.5;\n\t#ifdef USE_MATCAP\n\t\tvec4 matcapColor = texture2D( matcap, uv );\n\t\tmatcapColor = matcapTexelToLinear( matcapColor );\n\t#else\n\t\tvec4 matcapColor = vec4( 1.0 );\n\t#endif\n\tvec3 outgoingLight = diffuseColor.rgb * matcapColor.rgb;\n\tgl_FragColor = vec4( outgoingLight, diffuseColor.a );\n\t#include \n\t#include \n\t#include \n\t#include \n}", +meshmatcap_vert:"#define MATCAP\nvarying vec3 vViewPosition;\n#ifndef FLAT_SHADED\n\tvarying vec3 vNormal;\n#endif\n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \nvoid main() {\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#ifndef FLAT_SHADED\n\t\tvNormal = normalize( transformedNormal );\n\t#endif\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\tvViewPosition = - mvPosition.xyz;\n}", +meshphong_frag:"#define PHONG\nuniform vec3 diffuse;\nuniform vec3 emissive;\nuniform vec3 specular;\nuniform float shininess;\nuniform float opacity;\n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \nvoid main() {\n\t#include \n\tvec4 diffuseColor = vec4( diffuse, opacity );\n\tReflectedLight reflectedLight = ReflectedLight( vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ) );\n\tvec3 totalEmissiveRadiance = emissive;\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\tvec3 outgoingLight = reflectedLight.directDiffuse + reflectedLight.indirectDiffuse + reflectedLight.directSpecular + reflectedLight.indirectSpecular + totalEmissiveRadiance;\n\t#include \n\tgl_FragColor = vec4( outgoingLight, diffuseColor.a );\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n}", +meshphong_vert:"#define PHONG\nvarying vec3 vViewPosition;\n#ifndef FLAT_SHADED\n\tvarying vec3 vNormal;\n#endif\n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \nvoid main() {\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n#ifndef FLAT_SHADED\n\tvNormal = normalize( transformedNormal );\n#endif\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\tvViewPosition = - mvPosition.xyz;\n\t#include \n\t#include \n\t#include \n\t#include \n}", +meshphysical_frag:"#define STANDARD\n#ifdef PHYSICAL\n\t#define REFLECTIVITY\n\t#define CLEARCOAT\n\t#define TRANSPARENCY\n#endif\nuniform vec3 diffuse;\nuniform vec3 emissive;\nuniform float roughness;\nuniform float metalness;\nuniform float opacity;\n#ifdef TRANSPARENCY\n\tuniform float transparency;\n#endif\n#ifdef REFLECTIVITY\n\tuniform float reflectivity;\n#endif\n#ifdef CLEARCOAT\n\tuniform float clearcoat;\n\tuniform float clearcoatRoughness;\n#endif\n#ifdef USE_SHEEN\n\tuniform vec3 sheen;\n#endif\nvarying vec3 vViewPosition;\n#ifndef FLAT_SHADED\n\tvarying vec3 vNormal;\n\t#ifdef USE_TANGENT\n\t\tvarying vec3 vTangent;\n\t\tvarying vec3 vBitangent;\n\t#endif\n#endif\n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \nvoid main() {\n\t#include \n\tvec4 diffuseColor = vec4( diffuse, opacity );\n\tReflectedLight reflectedLight = ReflectedLight( vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ) );\n\tvec3 totalEmissiveRadiance = emissive;\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\tvec3 outgoingLight = reflectedLight.directDiffuse + reflectedLight.indirectDiffuse + reflectedLight.directSpecular + reflectedLight.indirectSpecular + totalEmissiveRadiance;\n\t#ifdef TRANSPARENCY\n\t\tdiffuseColor.a *= saturate( 1. - transparency + linearToRelativeLuminance( reflectedLight.directSpecular + reflectedLight.indirectSpecular ) );\n\t#endif\n\tgl_FragColor = vec4( outgoingLight, diffuseColor.a );\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n}", +meshphysical_vert:"#define STANDARD\nvarying vec3 vViewPosition;\n#ifndef FLAT_SHADED\n\tvarying vec3 vNormal;\n\t#ifdef USE_TANGENT\n\t\tvarying vec3 vTangent;\n\t\tvarying vec3 vBitangent;\n\t#endif\n#endif\n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \nvoid main() {\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n#ifndef FLAT_SHADED\n\tvNormal = normalize( transformedNormal );\n\t#ifdef USE_TANGENT\n\t\tvTangent = normalize( transformedTangent );\n\t\tvBitangent = normalize( cross( vNormal, vTangent ) * tangent.w );\n\t#endif\n#endif\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\tvViewPosition = - mvPosition.xyz;\n\t#include \n\t#include \n\t#include \n}", +normal_frag:"#define NORMAL\nuniform float opacity;\n#if defined( FLAT_SHADED ) || defined( USE_BUMPMAP ) || defined( TANGENTSPACE_NORMALMAP )\n\tvarying vec3 vViewPosition;\n#endif\n#ifndef FLAT_SHADED\n\tvarying vec3 vNormal;\n\t#ifdef USE_TANGENT\n\t\tvarying vec3 vTangent;\n\t\tvarying vec3 vBitangent;\n\t#endif\n#endif\n#include \n#include \n#include \n#include \n#include \n#include \nvoid main() {\n\t#include \n\t#include \n\t#include \n\t#include \n\tgl_FragColor = vec4( packNormalToRGB( normal ), opacity );\n}", +normal_vert:"#define NORMAL\n#if defined( FLAT_SHADED ) || defined( USE_BUMPMAP ) || defined( TANGENTSPACE_NORMALMAP )\n\tvarying vec3 vViewPosition;\n#endif\n#ifndef FLAT_SHADED\n\tvarying vec3 vNormal;\n\t#ifdef USE_TANGENT\n\t\tvarying vec3 vTangent;\n\t\tvarying vec3 vBitangent;\n\t#endif\n#endif\n#include \n#include \n#include \n#include \n#include \n#include \n#include \nvoid main() {\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n#ifndef FLAT_SHADED\n\tvNormal = normalize( transformedNormal );\n\t#ifdef USE_TANGENT\n\t\tvTangent = normalize( transformedTangent );\n\t\tvBitangent = normalize( cross( vNormal, vTangent ) * tangent.w );\n\t#endif\n#endif\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n#if defined( FLAT_SHADED ) || defined( USE_BUMPMAP ) || defined( TANGENTSPACE_NORMALMAP )\n\tvViewPosition = - mvPosition.xyz;\n#endif\n}", +points_frag:"uniform vec3 diffuse;\nuniform float opacity;\n#include \n#include \n#include \n#include \n#include \n#include \nvoid main() {\n\t#include \n\tvec3 outgoingLight = vec3( 0.0 );\n\tvec4 diffuseColor = vec4( diffuse, opacity );\n\t#include \n\t#include \n\t#include \n\t#include \n\toutgoingLight = diffuseColor.rgb;\n\tgl_FragColor = vec4( outgoingLight, diffuseColor.a );\n\t#include \n\t#include \n\t#include \n\t#include \n}", +points_vert:"uniform float size;\nuniform float scale;\n#include \n#include \n#include \n#include \n#include \n#include \nvoid main() {\n\t#include \n\t#include \n\t#include \n\t#include \n\tgl_PointSize = size;\n\t#ifdef USE_SIZEATTENUATION\n\t\tbool isPerspective = isPerspectiveMatrix( projectionMatrix );\n\t\tif ( isPerspective ) gl_PointSize *= ( scale / - mvPosition.z );\n\t#endif\n\t#include \n\t#include \n\t#include \n\t#include \n}", +shadow_frag:"uniform vec3 color;\nuniform float opacity;\n#include \n#include \n#include \n#include \n#include \n#include \n#include \nvoid main() {\n\tgl_FragColor = vec4( color, opacity * ( 1.0 - getShadowMask() ) );\n\t#include \n}",shadow_vert:"#include \n#include \nvoid main() {\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n}", +sprite_frag:"uniform vec3 diffuse;\nuniform float opacity;\n#include \n#include \n#include \n#include \n#include \n#include \n#include \nvoid main() {\n\t#include \n\tvec3 outgoingLight = vec3( 0.0 );\n\tvec4 diffuseColor = vec4( diffuse, opacity );\n\t#include \n\t#include \n\t#include \n\t#include \n\toutgoingLight = diffuseColor.rgb;\n\tgl_FragColor = vec4( outgoingLight, diffuseColor.a );\n\t#include \n\t#include \n\t#include \n}", +sprite_vert:"uniform float rotation;\nuniform vec2 center;\n#include \n#include \n#include \n#include \n#include \nvoid main() {\n\t#include \n\tvec4 mvPosition = modelViewMatrix * vec4( 0.0, 0.0, 0.0, 1.0 );\n\tvec2 scale;\n\tscale.x = length( vec3( modelMatrix[ 0 ].x, modelMatrix[ 0 ].y, modelMatrix[ 0 ].z ) );\n\tscale.y = length( vec3( modelMatrix[ 1 ].x, modelMatrix[ 1 ].y, modelMatrix[ 1 ].z ) );\n\t#ifndef USE_SIZEATTENUATION\n\t\tbool isPerspective = isPerspectiveMatrix( projectionMatrix );\n\t\tif ( isPerspective ) scale *= - mvPosition.z;\n\t#endif\n\tvec2 alignedPosition = ( position.xy - ( center - vec2( 0.5 ) ) ) * scale;\n\tvec2 rotatedPosition;\n\trotatedPosition.x = cos( rotation ) * alignedPosition.x - sin( rotation ) * alignedPosition.y;\n\trotatedPosition.y = sin( rotation ) * alignedPosition.x + cos( rotation ) * alignedPosition.y;\n\tmvPosition.xy += rotatedPosition;\n\tgl_Position = projectionMatrix * mvPosition;\n\t#include \n\t#include \n\t#include \n}"}, +L={common:{diffuse:{value:new J(15658734)},opacity:{value:1},map:{value:null},uvTransform:{value:new Z},alphaMap:{value:null}},specularmap:{specularMap:{value:null}},envmap:{envMap:{value:null},flipEnvMap:{value:-1},reflectivity:{value:1},refractionRatio:{value:.98},maxMipLevel:{value:0}},aomap:{aoMap:{value:null},aoMapIntensity:{value:1}},lightmap:{lightMap:{value:null},lightMapIntensity:{value:1}},emissivemap:{emissiveMap:{value:null}},bumpmap:{bumpMap:{value:null},bumpScale:{value:1}},normalmap:{normalMap:{value:null}, +normalScale:{value:new B(1,1)}},displacementmap:{displacementMap:{value:null},displacementScale:{value:1},displacementBias:{value:0}},roughnessmap:{roughnessMap:{value:null}},metalnessmap:{metalnessMap:{value:null}},gradientmap:{gradientMap:{value:null}},fog:{fogDensity:{value:2.5E-4},fogNear:{value:1},fogFar:{value:2E3},fogColor:{value:new J(16777215)}},lights:{ambientLightColor:{value:[]},lightProbe:{value:[]},directionalLights:{value:[],properties:{direction:{},color:{},shadow:{},shadowBias:{}, +shadowRadius:{},shadowMapSize:{}}},directionalShadowMap:{value:[]},directionalShadowMatrix:{value:[]},spotLights:{value:[],properties:{color:{},position:{},direction:{},distance:{},coneCos:{},penumbraCos:{},decay:{},shadow:{},shadowBias:{},shadowRadius:{},shadowMapSize:{}}},spotShadowMap:{value:[]},spotShadowMatrix:{value:[]},pointLights:{value:[],properties:{color:{},position:{},decay:{},distance:{},shadow:{},shadowBias:{},shadowRadius:{},shadowMapSize:{},shadowCameraNear:{},shadowCameraFar:{}}}, +pointShadowMap:{value:[]},pointShadowMatrix:{value:[]},hemisphereLights:{value:[],properties:{direction:{},skyColor:{},groundColor:{}}},rectAreaLights:{value:[],properties:{color:{},position:{},width:{},height:{}}}},points:{diffuse:{value:new J(15658734)},opacity:{value:1},size:{value:1},scale:{value:1},map:{value:null},alphaMap:{value:null},uvTransform:{value:new Z}},sprite:{diffuse:{value:new J(15658734)},opacity:{value:1},center:{value:new B(.5,.5)},rotation:{value:0},map:{value:null},alphaMap:{value:null}, +uvTransform:{value:new Z}}},cb={basic:{uniforms:ua([L.common,L.specularmap,L.envmap,L.aomap,L.lightmap,L.fog]),vertexShader:S.meshbasic_vert,fragmentShader:S.meshbasic_frag},lambert:{uniforms:ua([L.common,L.specularmap,L.envmap,L.aomap,L.lightmap,L.emissivemap,L.fog,L.lights,{emissive:{value:new J(0)}}]),vertexShader:S.meshlambert_vert,fragmentShader:S.meshlambert_frag},phong:{uniforms:ua([L.common,L.specularmap,L.envmap,L.aomap,L.lightmap,L.emissivemap,L.bumpmap,L.normalmap,L.displacementmap,L.gradientmap, +L.fog,L.lights,{emissive:{value:new J(0)},specular:{value:new J(1118481)},shininess:{value:30}}]),vertexShader:S.meshphong_vert,fragmentShader:S.meshphong_frag},standard:{uniforms:ua([L.common,L.envmap,L.aomap,L.lightmap,L.emissivemap,L.bumpmap,L.normalmap,L.displacementmap,L.roughnessmap,L.metalnessmap,L.fog,L.lights,{emissive:{value:new J(0)},roughness:{value:.5},metalness:{value:.5},envMapIntensity:{value:1}}]),vertexShader:S.meshphysical_vert,fragmentShader:S.meshphysical_frag},matcap:{uniforms:ua([L.common, +L.bumpmap,L.normalmap,L.displacementmap,L.fog,{matcap:{value:null}}]),vertexShader:S.meshmatcap_vert,fragmentShader:S.meshmatcap_frag},points:{uniforms:ua([L.points,L.fog]),vertexShader:S.points_vert,fragmentShader:S.points_frag},dashed:{uniforms:ua([L.common,L.fog,{scale:{value:1},dashSize:{value:1},totalSize:{value:2}}]),vertexShader:S.linedashed_vert,fragmentShader:S.linedashed_frag},depth:{uniforms:ua([L.common,L.displacementmap]),vertexShader:S.depth_vert,fragmentShader:S.depth_frag},normal:{uniforms:ua([L.common, +L.bumpmap,L.normalmap,L.displacementmap,{opacity:{value:1}}]),vertexShader:S.normal_vert,fragmentShader:S.normal_frag},sprite:{uniforms:ua([L.sprite,L.fog]),vertexShader:S.sprite_vert,fragmentShader:S.sprite_frag},background:{uniforms:{uvTransform:{value:new Z},t2D:{value:null}},vertexShader:S.background_vert,fragmentShader:S.background_frag},cube:{uniforms:{tCube:{value:null},tFlip:{value:-1},opacity:{value:1}},vertexShader:S.cube_vert,fragmentShader:S.cube_frag},equirect:{uniforms:{tEquirect:{value:null}}, +vertexShader:S.equirect_vert,fragmentShader:S.equirect_frag},distanceRGBA:{uniforms:ua([L.common,L.displacementmap,{referencePosition:{value:new n},nearDistance:{value:1},farDistance:{value:1E3}}]),vertexShader:S.distanceRGBA_vert,fragmentShader:S.distanceRGBA_frag},shadow:{uniforms:ua([L.lights,L.fog,{color:{value:new J(0)},opacity:{value:1}}]),vertexShader:S.shadow_vert,fragmentShader:S.shadow_frag}};cb.physical={uniforms:ua([cb.standard.uniforms,{transparency:{value:0},clearcoat:{value:0},clearcoatRoughness:{value:0}, +sheen:{value:new J(0)},clearcoatNormalScale:{value:new B(1,1)},clearcoatNormalMap:{value:null}}]),vertexShader:S.meshphysical_vert,fragmentShader:S.meshphysical_frag};Ed.prototype=Object.create(G.prototype);Ed.prototype.constructor=Ed;Zb.prototype=Object.create(D.prototype);Zb.prototype.constructor=Zb;nb.prototype=Object.create(Y.prototype);nb.prototype.constructor=nb;nb.prototype.isCubeTexture=!0;Object.defineProperty(nb.prototype,"images",{get:function(){return this.image},set:function(a){this.image= +a}});Cc.prototype=Object.create(Y.prototype);Cc.prototype.constructor=Cc;Cc.prototype.isDataTexture2DArray=!0;Dc.prototype=Object.create(Y.prototype);Dc.prototype.constructor=Dc;Dc.prototype.isDataTexture3D=!0;var uh=new Y,rj=new Cc,tj=new Dc,vh=new nb,oh=[],qh=[],th=new Float32Array(16),sh=new Float32Array(9),rh=new Float32Array(4);wh.prototype.updateCache=function(a){var b=this.cache;a instanceof Float32Array&&b.length!==a.length&&(this.cache=new Float32Array(a.length));Ha(b,a)};xh.prototype.setValue= +function(a,b,c){for(var d=this.seq,e=0,f=d.length;e!==f;++e){var g=d[e];g.setValue(a,b[g.id],c)}};var bg=/([\w\d_]+)(\])?(\[|\.)?/g;Cb.prototype.setValue=function(a,b,c,d){b=this.map[b];void 0!==b&&b.setValue(a,c,d)};Cb.prototype.setOptional=function(a,b,c){b=b[c];void 0!==b&&this.setValue(a,c,b)};Cb.upload=function(a,b,c,d){for(var e=0,f=b.length;e!==f;++e){var g=b[e],h=c[g.id];!1!==h.needsUpdate&&g.setValue(a,h.value,d)}};Cb.seqWithValue=function(a,b){for(var c=[],d=0,e=a.length;d!==e;++d){var f= +a[d];f.id in b&&c.push(f)}return c};var Yj=0,dg=/^[ \t]*#include +<([\w\d./]+)>/gm,Fh=/#pragma unroll_loop[\s]+?for \( int i = (\d+); i < (\d+); i \+\+ \) \{([\s\S]+?)(?=\})\}/g,hk=0;Db.prototype=Object.create(O.prototype);Db.prototype.constructor=Db;Db.prototype.isMeshDepthMaterial=!0;Db.prototype.copy=function(a){O.prototype.copy.call(this,a);this.depthPacking=a.depthPacking;this.skinning=a.skinning;this.morphTargets=a.morphTargets;this.map=a.map;this.alphaMap=a.alphaMap;this.displacementMap=a.displacementMap; +this.displacementScale=a.displacementScale;this.displacementBias=a.displacementBias;this.wireframe=a.wireframe;this.wireframeLinewidth=a.wireframeLinewidth;return this};Eb.prototype=Object.create(O.prototype);Eb.prototype.constructor=Eb;Eb.prototype.isMeshDistanceMaterial=!0;Eb.prototype.copy=function(a){O.prototype.copy.call(this,a);this.referencePosition.copy(a.referencePosition);this.nearDistance=a.nearDistance;this.farDistance=a.farDistance;this.skinning=a.skinning;this.morphTargets=a.morphTargets; +this.map=a.map;this.alphaMap=a.alphaMap;this.displacementMap=a.displacementMap;this.displacementScale=a.displacementScale;this.displacementBias=a.displacementBias;return this};fg.prototype=Object.assign(Object.create(Ba.prototype),{constructor:fg,isWebGLMultiviewRenderTarget:!0,copy:function(a){Ba.prototype.copy.call(this,a);this.numViews=a.numViews;return this},setNumViews:function(a){this.numViews!==a&&(this.numViews=a,this.dispose());return this}});Gc.prototype=Object.assign(Object.create(E.prototype), +{constructor:Gc,isGroup:!0});Jd.prototype=Object.assign(Object.create(U.prototype),{constructor:Jd,isArrayCamera:!0});var Mh=new n,Nh=new n;Object.assign(gg.prototype,Aa.prototype);Object.assign(Oh.prototype,Aa.prototype);Object.assign(Le.prototype,{isFogExp2:!0,clone:function(){return new Le(this.color,this.density)},toJSON:function(){return{type:"FogExp2",color:this.color.getHex(),density:this.density}}});Object.assign(Me.prototype,{isFog:!0,clone:function(){return new Me(this.color,this.near,this.far)}, +toJSON:function(){return{type:"Fog",color:this.color.getHex(),near:this.near,far:this.far}}});Object.defineProperty(pb.prototype,"needsUpdate",{set:function(a){!0===a&&this.version++}});Object.assign(pb.prototype,{isInterleavedBuffer:!0,onUploadCallback:function(){},setUsage:function(a){this.usage=a;return this},copy:function(a){this.array=new a.array.constructor(a.array);this.count=a.count;this.stride=a.stride;this.usage=a.usage;return this},copyAt:function(a,b,c){a*=this.stride;c*=b.stride;for(var d= +0,e=this.stride;da.far||b.push({distance:e,point:ze.clone(),uv:ba.getUV(ze,Ef,Ae,Ff,vi,$g,wi,new B),face:null,object:this})},clone:function(){return(new this.constructor(this.material)).copy(this)}, +copy:function(a){E.prototype.copy.call(this,a);void 0!==a.center&&this.center.copy(a.center);return this}});var Gf=new n,xi=new n;Nd.prototype=Object.assign(Object.create(E.prototype),{constructor:Nd,isLOD:!0,copy:function(a){E.prototype.copy.call(this,a,!1);a=a.levels;for(var b=0,c=a.length;b=b[c].distance)b[c-1].object.visible=!1,b[c].object.visible=!0;else break;for(;cc||(h.applyMatrix4(this.matrixWorld),u=a.ray.origin.distanceTo(h),ua.far||b.push({distance:u,point:e.clone().applyMatrix4(this.matrixWorld),index:d,face:null,faceIndex:null,object:this}))}}else for(d=0,q=k.length/3-1;dc||(h.applyMatrix4(this.matrixWorld),u=a.ray.origin.distanceTo(h),ua.far||b.push({distance:u,point:e.clone().applyMatrix4(this.matrixWorld), +index:d,face:null,faceIndex:null,object:this}))}else if(d.isGeometry)for(f=d.vertices,g=f.length,d=0;dc||(h.applyMatrix4(this.matrixWorld),u=a.ray.origin.distanceTo(h),ua.far||b.push({distance:u,point:e.clone().applyMatrix4(this.matrixWorld),index:d,face:null,faceIndex:null,object:this}))}},clone:function(){return(new this.constructor(this.geometry,this.material)).copy(this)}});var If=new n,Jf=new n;X.prototype=Object.assign(Object.create(ra.prototype), +{constructor:X,isLineSegments:!0,computeLineDistances:function(){var a=this.geometry;if(a.isBufferGeometry)if(null===a.index){for(var b=a.attributes.position,c=[],d=0,e=b.count;d= +a.HAVE_CURRENT_DATA&&(this.needsUpdate=!0)}});Kc.prototype=Object.create(Y.prototype);Kc.prototype.constructor=Kc;Kc.prototype.isCompressedTexture=!0;Pd.prototype=Object.create(Y.prototype);Pd.prototype.constructor=Pd;Pd.prototype.isCanvasTexture=!0;Qd.prototype=Object.create(Y.prototype);Qd.prototype.constructor=Qd;Qd.prototype.isDepthTexture=!0;Lc.prototype=Object.create(D.prototype);Lc.prototype.constructor=Lc;Rd.prototype=Object.create(G.prototype);Rd.prototype.constructor=Rd;Mc.prototype=Object.create(D.prototype); +Mc.prototype.constructor=Mc;Sd.prototype=Object.create(G.prototype);Sd.prototype.constructor=Sd;Ea.prototype=Object.create(D.prototype);Ea.prototype.constructor=Ea;Td.prototype=Object.create(G.prototype);Td.prototype.constructor=Td;Nc.prototype=Object.create(Ea.prototype);Nc.prototype.constructor=Nc;Ud.prototype=Object.create(G.prototype);Ud.prototype.constructor=Ud;ac.prototype=Object.create(Ea.prototype);ac.prototype.constructor=ac;Vd.prototype=Object.create(G.prototype);Vd.prototype.constructor= +Vd;Oc.prototype=Object.create(Ea.prototype);Oc.prototype.constructor=Oc;Wd.prototype=Object.create(G.prototype);Wd.prototype.constructor=Wd;Pc.prototype=Object.create(Ea.prototype);Pc.prototype.constructor=Pc;Xd.prototype=Object.create(G.prototype);Xd.prototype.constructor=Xd;bc.prototype=Object.create(D.prototype);bc.prototype.constructor=bc;bc.prototype.toJSON=function(){var a=D.prototype.toJSON.call(this);a.path=this.parameters.path.toJSON();return a};Yd.prototype=Object.create(G.prototype);Yd.prototype.constructor= +Yd;Qc.prototype=Object.create(D.prototype);Qc.prototype.constructor=Qc;Zd.prototype=Object.create(G.prototype);Zd.prototype.constructor=Zd;Rc.prototype=Object.create(D.prototype);Rc.prototype.constructor=Rc;var Ek={triangulate:function(a,b,c){c=c||2;var d=b&&b.length,e=d?b[0]*c:a.length,f=Rh(a,0,e,c,!0),g=[];if(!f||f.next===f.prev)return g;var h;if(d){var l=c;d=[];var m;var k=0;for(m=b.length;k80*c){var p=h=a[0];var t=d=a[1];for(l=c;lh&&(h=k),b>d&&(d=b);h=Math.max(h-p,d-t);h=0!==h?1/h:0}be(f,g,c,p,t,h);return g}},qb={area:function(a){for(var b=a.length,c=0,d=b-1,e=0;eqb.area(a)},triangulateShape:function(a,b){var c=[],d=[],e=[];Vh(a);Wh(c,a);var f=a.length;b.forEach(Vh); +for(a=0;aMath.abs(g-l)?[new B(a,1-c),new B(h,1-d),new B(k,1-e),new B(q,1-b)]:[new B(g,1-c),new B(l,1-d),new B(n,1-e),new B(u,1-b)]}};de.prototype=Object.create(G.prototype); +de.prototype.constructor=de;Tc.prototype=Object.create(db.prototype);Tc.prototype.constructor=Tc;ee.prototype=Object.create(G.prototype);ee.prototype.constructor=ee;Hb.prototype=Object.create(D.prototype);Hb.prototype.constructor=Hb;fe.prototype=Object.create(G.prototype);fe.prototype.constructor=fe;Uc.prototype=Object.create(D.prototype);Uc.prototype.constructor=Uc;ge.prototype=Object.create(G.prototype);ge.prototype.constructor=ge;Vc.prototype=Object.create(D.prototype);Vc.prototype.constructor= +Vc;ec.prototype=Object.create(G.prototype);ec.prototype.constructor=ec;ec.prototype.toJSON=function(){var a=G.prototype.toJSON.call(this);return Yh(this.parameters.shapes,a)};fc.prototype=Object.create(D.prototype);fc.prototype.constructor=fc;fc.prototype.toJSON=function(){var a=D.prototype.toJSON.call(this);return Yh(this.parameters.shapes,a)};Wc.prototype=Object.create(D.prototype);Wc.prototype.constructor=Wc;gc.prototype=Object.create(G.prototype);gc.prototype.constructor=gc;rb.prototype=Object.create(D.prototype); +rb.prototype.constructor=rb;he.prototype=Object.create(gc.prototype);he.prototype.constructor=he;ie.prototype=Object.create(rb.prototype);ie.prototype.constructor=ie;je.prototype=Object.create(G.prototype);je.prototype.constructor=je;Xc.prototype=Object.create(D.prototype);Xc.prototype.constructor=Xc;var ja=Object.freeze({__proto__:null,WireframeGeometry:Lc,ParametricGeometry:Rd,ParametricBufferGeometry:Mc,TetrahedronGeometry:Td,TetrahedronBufferGeometry:Nc,OctahedronGeometry:Ud,OctahedronBufferGeometry:ac, +IcosahedronGeometry:Vd,IcosahedronBufferGeometry:Oc,DodecahedronGeometry:Wd,DodecahedronBufferGeometry:Pc,PolyhedronGeometry:Sd,PolyhedronBufferGeometry:Ea,TubeGeometry:Xd,TubeBufferGeometry:bc,TorusKnotGeometry:Yd,TorusKnotBufferGeometry:Qc,TorusGeometry:Zd,TorusBufferGeometry:Rc,TextGeometry:de,TextBufferGeometry:Tc,SphereGeometry:ee,SphereBufferGeometry:Hb,RingGeometry:fe,RingBufferGeometry:Uc,PlaneGeometry:Ed,PlaneBufferGeometry:Zb,LatheGeometry:ge,LatheBufferGeometry:Vc,ShapeGeometry:ec,ShapeBufferGeometry:fc, +ExtrudeGeometry:dc,ExtrudeBufferGeometry:db,EdgesGeometry:Wc,ConeGeometry:he,ConeBufferGeometry:ie,CylinderGeometry:gc,CylinderBufferGeometry:rb,CircleGeometry:je,CircleBufferGeometry:Xc,BoxGeometry:Zg,BoxBufferGeometry:Fd});hc.prototype=Object.create(O.prototype);hc.prototype.constructor=hc;hc.prototype.isShadowMaterial=!0;hc.prototype.copy=function(a){O.prototype.copy.call(this,a);this.color.copy(a.color);return this};Yc.prototype=Object.create(va.prototype);Yc.prototype.constructor=Yc;Yc.prototype.isRawShaderMaterial= +!0;eb.prototype=Object.create(O.prototype);eb.prototype.constructor=eb;eb.prototype.isMeshStandardMaterial=!0;eb.prototype.copy=function(a){O.prototype.copy.call(this,a);this.defines={STANDARD:""};this.color.copy(a.color);this.roughness=a.roughness;this.metalness=a.metalness;this.map=a.map;this.lightMap=a.lightMap;this.lightMapIntensity=a.lightMapIntensity;this.aoMap=a.aoMap;this.aoMapIntensity=a.aoMapIntensity;this.emissive.copy(a.emissive);this.emissiveMap=a.emissiveMap;this.emissiveIntensity=a.emissiveIntensity; +this.bumpMap=a.bumpMap;this.bumpScale=a.bumpScale;this.normalMap=a.normalMap;this.normalMapType=a.normalMapType;this.normalScale.copy(a.normalScale);this.displacementMap=a.displacementMap;this.displacementScale=a.displacementScale;this.displacementBias=a.displacementBias;this.roughnessMap=a.roughnessMap;this.metalnessMap=a.metalnessMap;this.alphaMap=a.alphaMap;this.envMap=a.envMap;this.envMapIntensity=a.envMapIntensity;this.refractionRatio=a.refractionRatio;this.wireframe=a.wireframe;this.wireframeLinewidth= +a.wireframeLinewidth;this.wireframeLinecap=a.wireframeLinecap;this.wireframeLinejoin=a.wireframeLinejoin;this.skinning=a.skinning;this.morphTargets=a.morphTargets;this.morphNormals=a.morphNormals;return this};ic.prototype=Object.create(eb.prototype);ic.prototype.constructor=ic;ic.prototype.isMeshPhysicalMaterial=!0;ic.prototype.copy=function(a){eb.prototype.copy.call(this,a);this.defines={STANDARD:"",PHYSICAL:""};this.reflectivity=a.reflectivity;this.clearcoat=a.clearcoat;this.clearcoatRoughness= +a.clearcoatRoughness;this.sheen=a.sheen?(this.sheen||new J).copy(a.sheen):null;this.clearcoatNormalMap=a.clearcoatNormalMap;this.clearcoatNormalScale.copy(a.clearcoatNormalScale);this.transparency=a.transparency;return this};Ra.prototype=Object.create(O.prototype);Ra.prototype.constructor=Ra;Ra.prototype.isMeshPhongMaterial=!0;Ra.prototype.copy=function(a){O.prototype.copy.call(this,a);this.color.copy(a.color);this.specular.copy(a.specular);this.shininess=a.shininess;this.map=a.map;this.lightMap= +a.lightMap;this.lightMapIntensity=a.lightMapIntensity;this.aoMap=a.aoMap;this.aoMapIntensity=a.aoMapIntensity;this.emissive.copy(a.emissive);this.emissiveMap=a.emissiveMap;this.emissiveIntensity=a.emissiveIntensity;this.bumpMap=a.bumpMap;this.bumpScale=a.bumpScale;this.normalMap=a.normalMap;this.normalMapType=a.normalMapType;this.normalScale.copy(a.normalScale);this.displacementMap=a.displacementMap;this.displacementScale=a.displacementScale;this.displacementBias=a.displacementBias;this.specularMap= +a.specularMap;this.alphaMap=a.alphaMap;this.envMap=a.envMap;this.combine=a.combine;this.reflectivity=a.reflectivity;this.refractionRatio=a.refractionRatio;this.wireframe=a.wireframe;this.wireframeLinewidth=a.wireframeLinewidth;this.wireframeLinecap=a.wireframeLinecap;this.wireframeLinejoin=a.wireframeLinejoin;this.skinning=a.skinning;this.morphTargets=a.morphTargets;this.morphNormals=a.morphNormals;return this};jc.prototype=Object.create(Ra.prototype);jc.prototype.constructor=jc;jc.prototype.isMeshToonMaterial= +!0;jc.prototype.copy=function(a){Ra.prototype.copy.call(this,a);this.gradientMap=a.gradientMap;return this};kc.prototype=Object.create(O.prototype);kc.prototype.constructor=kc;kc.prototype.isMeshNormalMaterial=!0;kc.prototype.copy=function(a){O.prototype.copy.call(this,a);this.bumpMap=a.bumpMap;this.bumpScale=a.bumpScale;this.normalMap=a.normalMap;this.normalMapType=a.normalMapType;this.normalScale.copy(a.normalScale);this.displacementMap=a.displacementMap;this.displacementScale=a.displacementScale; +this.displacementBias=a.displacementBias;this.wireframe=a.wireframe;this.wireframeLinewidth=a.wireframeLinewidth;this.skinning=a.skinning;this.morphTargets=a.morphTargets;this.morphNormals=a.morphNormals;return this};lc.prototype=Object.create(O.prototype);lc.prototype.constructor=lc;lc.prototype.isMeshLambertMaterial=!0;lc.prototype.copy=function(a){O.prototype.copy.call(this,a);this.color.copy(a.color);this.map=a.map;this.lightMap=a.lightMap;this.lightMapIntensity=a.lightMapIntensity;this.aoMap= +a.aoMap;this.aoMapIntensity=a.aoMapIntensity;this.emissive.copy(a.emissive);this.emissiveMap=a.emissiveMap;this.emissiveIntensity=a.emissiveIntensity;this.specularMap=a.specularMap;this.alphaMap=a.alphaMap;this.envMap=a.envMap;this.combine=a.combine;this.reflectivity=a.reflectivity;this.refractionRatio=a.refractionRatio;this.wireframe=a.wireframe;this.wireframeLinewidth=a.wireframeLinewidth;this.wireframeLinecap=a.wireframeLinecap;this.wireframeLinejoin=a.wireframeLinejoin;this.skinning=a.skinning; +this.morphTargets=a.morphTargets;this.morphNormals=a.morphNormals;return this};mc.prototype=Object.create(O.prototype);mc.prototype.constructor=mc;mc.prototype.isMeshMatcapMaterial=!0;mc.prototype.copy=function(a){O.prototype.copy.call(this,a);this.defines={MATCAP:""};this.color.copy(a.color);this.matcap=a.matcap;this.map=a.map;this.bumpMap=a.bumpMap;this.bumpScale=a.bumpScale;this.normalMap=a.normalMap;this.normalMapType=a.normalMapType;this.normalScale.copy(a.normalScale);this.displacementMap=a.displacementMap; +this.displacementScale=a.displacementScale;this.displacementBias=a.displacementBias;this.alphaMap=a.alphaMap;this.skinning=a.skinning;this.morphTargets=a.morphTargets;this.morphNormals=a.morphNormals;return this};nc.prototype=Object.create(R.prototype);nc.prototype.constructor=nc;nc.prototype.isLineDashedMaterial=!0;nc.prototype.copy=function(a){R.prototype.copy.call(this,a);this.scale=a.scale;this.dashSize=a.dashSize;this.gapSize=a.gapSize;return this};var Fk=Object.freeze({__proto__:null,ShadowMaterial:hc, +SpriteMaterial:Gb,RawShaderMaterial:Yc,ShaderMaterial:va,PointsMaterial:Qa,MeshPhysicalMaterial:ic,MeshStandardMaterial:eb,MeshPhongMaterial:Ra,MeshToonMaterial:jc,MeshNormalMaterial:kc,MeshLambertMaterial:lc,MeshDepthMaterial:Db,MeshDistanceMaterial:Eb,MeshBasicMaterial:Ga,MeshMatcapMaterial:mc,LineDashedMaterial:nc,LineBasicMaterial:R,Material:O}),ta={arraySlice:function(a,b,c){return ta.isTypedArray(a)?new a.constructor(a.subarray(b,void 0!==c?c:a.length)):a.slice(b,c)},convertArray:function(a, +b,c){return!a||!c&&a.constructor===b?a:"number"===typeof b.BYTES_PER_ELEMENT?new b(a):Array.prototype.slice.call(a)},isTypedArray:function(a){return ArrayBuffer.isView(a)&&!(a instanceof DataView)},getKeyframeOrder:function(a){for(var b=a.length,c=Array(b),d=0;d!==b;++d)c[d]=d;c.sort(function(b,c){return a[b]-a[c]});return c},sortedArray:function(a,b,c){for(var d=a.length,e=new a.constructor(d),f=0,g=0;g!==d;++f)for(var h=c[f]*b,l=0;l!==b;++l)e[g++]=a[h+l];return e},flattenJSON:function(a,b,c,d){for(var e= +1,f=a[0];void 0!==f&&void 0===f[d];)f=a[e++];if(void 0!==f){var g=f[d];if(void 0!==g)if(Array.isArray(g)){do g=f[d],void 0!==g&&(b.push(f.time),c.push.apply(c,g)),f=a[e++];while(void 0!==f)}else if(void 0!==g.toArray){do g=f[d],void 0!==g&&(b.push(f.time),g.toArray(c,c.length)),f=a[e++];while(void 0!==f)}else{do g=f[d],void 0!==g&&(b.push(f.time),c.push(g)),f=a[e++];while(void 0!==f)}}},subclip:function(a,b,c,d,e){e=e||30;a=a.clone();a.name=b;var f=[];for(b=0;b=d))for(l.push(g.times[n]),q=0;qa.tracks[b].times[0]&&(c=a.tracks[b].times[0]);for(b=0;b=e)break a;else{f=b[1];a=e)break b}d=c;c=0}}for(;c>>1,ab;)--f;++f;if(0!==e||f!==d)e>=f&&(f=Math.max(f,1),e=f-1),a=this.getValueSize(),this.times=ta.arraySlice(c,e,f),this.values=ta.arraySlice(this.values,e*a,f*a);return this},validate:function(){var a=!0,b=this.getValueSize();0!==b-Math.floor(b)&&(console.error("THREE.KeyframeTrack: Invalid value size in track.",this),a=!1);var c=this.times; +b=this.values;var d=c.length;0===d&&(console.error("THREE.KeyframeTrack: Track is empty.",this),a=!1);for(var e=null,f=0;f!==d;f++){var g=c[f];if("number"===typeof g&&isNaN(g)){console.error("THREE.KeyframeTrack: Time is not a valid number.",this,f,g);a=!1;break}if(null!==e&&e>g){console.error("THREE.KeyframeTrack: Out of order keys.",this,f,g,e);a=!1;break}e=g}if(void 0!==b&&ta.isTypedArray(b))for(f=0,c=b.length;f!==c;++f)if(d=b[f],isNaN(d)){console.error("THREE.KeyframeTrack: Value is not a valid number.", +this,f,d);a=!1;break}return a},optimize:function(){for(var a=this.times,b=this.values,c=this.getValueSize(),d=2302===this.getInterpolation(),e=1,f=a.length-1,g=1;gg)e=a+1;else if(0b&&(b=0);1Number.EPSILON&&(g.normalize(),c=Math.acos(P.clamp(d[l-1].dot(d[l]),-1,1)),e[l].applyMatrix4(h.makeRotationAxis(g,c))),f[l].crossVectors(d[l],e[l]);if(!0===b)for(c=Math.acos(P.clamp(e[0].dot(e[a]),-1,1)),c/=a,0d;)d+=c;for(;d>c;)d-=c;de&&(e=1);1E-4>d&&(d=e);1E-4>l&&(l=e);ah.initNonuniformCatmullRom(f.x,g.x,h.x,c.x,d,e,l);bh.initNonuniformCatmullRom(f.y,g.y,h.y,c.y,d,e,l);ch.initNonuniformCatmullRom(f.z,g.z,h.z,c.z,d,e,l)}else"catmullrom"===this.curveType&&(ah.initCatmullRom(f.x,g.x,h.x,c.x,this.tension),bh.initCatmullRom(f.y,g.y,h.y,c.y,this.tension),ch.initCatmullRom(f.z,g.z,h.z,c.z,this.tension));b.set(ah.calc(a), +bh.calc(a),ch.calc(a));return b};ma.prototype.copy=function(a){C.prototype.copy.call(this,a);this.points=[];for(var b=0,c=a.points.length;bc.length-2?c.length-1:a+1];c=c[a>c.length-3?c.length-1:a+2];b.set($h(d,e.x,f.x,g.x,c.x),$h(d,e.y,f.y,g.y,c.y));return b};Va.prototype.copy=function(a){C.prototype.copy.call(this,a);this.points=[];for(var b=0,c=a.points.length;b=b)return b=c[a]-b,a=this.curves[a],c=a.getLength(),a.getPointAt(0===c?0:1-b/c);a++}return null},getLength:function(){var a= +this.getCurveLengths();return a[a.length-1]},updateArcLengths:function(){this.needsUpdate=!0;this.cacheLengths=null;this.getCurveLengths()},getCurveLengths:function(){if(this.cacheLengths&&this.cacheLengths.length===this.curves.length)return this.cacheLengths;for(var a=[],b=0,c=0,d=this.curves.length;cNumber.EPSILON){if(0>k&&(g=b[f],l=-l,h=b[e],k=-k),!(a.yh.y))if(a.y===g.y){if(a.x===g.x)return!0}else{e=k*(a.x-g.x)-l*(a.y-g.y);if(0===e)return!0;0>e||(d=!d)}}else if(a.y===g.y&&(h.x<=a.x&&a.x<=g.x||g.x<=a.x&&a.x<=h.x))return!0}return d} +var e=qb.isClockWise,f=this.subPaths;if(0===f.length)return[];if(!0===b)return c(f);b=[];if(1===f.length){var g=f[0];var h=new Ib;h.curves=g.curves;b.push(h);return b}var l=!e(f[0].getPoints());l=a?!l:l;h=[];var k=[],n=[],q=0;k[q]=void 0;n[q]=[];for(var u=0,p=f.length;ub;b++)this.coefficients[b].copy(a[b]);return this},zero:function(){for(var a=0;9>a;a++)this.coefficients[a].set(0,0,0);return this},getAt:function(a,b){var c=a.x,d=a.y;a=a.z;var e=this.coefficients;b.copy(e[0]).multiplyScalar(.282095); +b.addScale(e[1],.488603*d);b.addScale(e[2],.488603*a);b.addScale(e[3],.488603*c);b.addScale(e[4],1.092548*c*d);b.addScale(e[5],1.092548*d*a);b.addScale(e[6],.315392*(3*a*a-1));b.addScale(e[7],1.092548*c*a);b.addScale(e[8],.546274*(c*c-d*d));return b},getIrradianceAt:function(a,b){var c=a.x,d=a.y;a=a.z;var e=this.coefficients;b.copy(e[0]).multiplyScalar(.886227);b.addScale(e[1],1.023328*d);b.addScale(e[2],1.023328*a);b.addScale(e[3],1.023328*c);b.addScale(e[4],.858086*c*d);b.addScale(e[5],.858086* +d*a);b.addScale(e[6],.743125*a*a-.247708);b.addScale(e[7],.858086*c*a);b.addScale(e[8],.429043*(c*c-d*d));return b},add:function(a){for(var b=0;9>b;b++)this.coefficients[b].add(a.coefficients[b]);return this},scale:function(a){for(var b=0;9>b;b++)this.coefficients[b].multiplyScalar(a);return this},lerp:function(a,b){for(var c=0;9>c;c++)this.coefficients[c].lerp(a.coefficients[c],b);return this},equals:function(a){for(var b=0;9>b;b++)if(!this.coefficients[b].equals(a.coefficients[b]))return!1;return!0}, +copy:function(a){return this.set(a.coefficients)},clone:function(){return(new this.constructor).copy(this)},fromArray:function(a,b){void 0===b&&(b=0);for(var c=this.coefficients,d=0;9>d;d++)c[d].fromArray(a,b+3*d);return this},toArray:function(a,b){void 0===a&&(a=[]);void 0===b&&(b=0);for(var c=this.coefficients,d=0;9>d;d++)c[d].toArray(a,b+3*d);return a}});Object.assign(of,{getBasisAt:function(a,b){var c=a.x,d=a.y;a=a.z;b[0]=.282095;b[1]=.488603*d;b[2]=.488603*a;b[3]=.488603*c;b[4]=1.092548*c*d; +b[5]=1.092548*d*a;b[6]=.315392*(3*a*a-1);b[7]=1.092548*c*a;b[8]=.546274*(c*c-d*d)}});Xa.prototype=Object.assign(Object.create(T.prototype),{constructor:Xa,isLightProbe:!0,copy:function(a){T.prototype.copy.call(this,a);this.sh.copy(a.sh);this.intensity=a.intensity;return this},toJSON:function(a){return T.prototype.toJSON.call(this,a)}});xg.prototype=Object.assign(Object.create(Xa.prototype),{constructor:xg,isHemisphereLightProbe:!0,copy:function(a){Xa.prototype.copy.call(this,a);return this},toJSON:function(a){return Xa.prototype.toJSON.call(this, +a)}});yg.prototype=Object.assign(Object.create(Xa.prototype),{constructor:yg,isAmbientLightProbe:!0,copy:function(a){Xa.prototype.copy.call(this,a);return this},toJSON:function(a){return Xa.prototype.toJSON.call(this,a)}});var Fi=new Q,Gi=new Q;Object.assign(ai.prototype,{update:function(a){var b=this._cache;if(b.focus!==a.focus||b.fov!==a.fov||b.aspect!==a.aspect*this.aspect||b.near!==a.near||b.far!==a.far||b.zoom!==a.zoom||b.eyeSep!==this.eyeSep){b.focus=a.focus;b.fov=a.fov;b.aspect=a.aspect*this.aspect; +b.near=a.near;b.far=a.far;b.zoom=a.zoom;b.eyeSep=this.eyeSep;var c=a.projectionMatrix.clone(),d=b.eyeSep/2,e=d*b.near/b.focus,f=b.near*Math.tan(P.DEG2RAD*b.fov*.5)/b.zoom;Gi.elements[12]=-d;Fi.elements[12]=d;d=-f*b.aspect+e;var g=f*b.aspect+e;c.elements[0]=2*b.near/(g-d);c.elements[8]=(g+d)/(g-d);this.cameraL.projectionMatrix.copy(c);d=-f*b.aspect-e;g=f*b.aspect-e;c.elements[0]=2*b.near/(g-d);c.elements[8]=(g+d)/(g-d);this.cameraR.projectionMatrix.copy(c)}this.cameraL.matrixWorld.copy(a.matrixWorld).multiply(Gi); +this.cameraR.matrixWorld.copy(a.matrixWorld).multiply(Fi)}});Object.assign(zg.prototype,{start:function(){this.oldTime=this.startTime=("undefined"===typeof performance?Date:performance).now();this.elapsedTime=0;this.running=!0},stop:function(){this.getElapsedTime();this.autoStart=this.running=!1},getElapsedTime:function(){this.getDelta();return this.elapsedTime},getDelta:function(){var a=0;if(this.autoStart&&!this.running)return this.start(),0;if(this.running){var b=("undefined"===typeof performance? +Date:performance).now();a=(b-this.oldTime)/1E3;this.oldTime=b;this.elapsedTime+=a}return a}});var tc=new n,Hi=new wa,Hk=new n,uc=new n;Ag.prototype=Object.assign(Object.create(E.prototype),{constructor:Ag,getInput:function(){return this.gain},removeFilter:function(){null!==this.filter&&(this.gain.disconnect(this.filter),this.filter.disconnect(this.context.destination),this.gain.connect(this.context.destination),this.filter=null);return this},getFilter:function(){return this.filter},setFilter:function(a){null!== +this.filter?(this.gain.disconnect(this.filter),this.filter.disconnect(this.context.destination)):this.gain.disconnect(this.context.destination);this.filter=a;this.gain.connect(this.filter);this.filter.connect(this.context.destination);return this},getMasterVolume:function(){return this.gain.gain.value},setMasterVolume:function(a){this.gain.gain.setTargetAtTime(a,this.context.currentTime,.01);return this},updateMatrixWorld:function(a){E.prototype.updateMatrixWorld.call(this,a);a=this.context.listener; +var b=this.up;this.timeDelta=this._clock.getDelta();this.matrixWorld.decompose(tc,Hi,Hk);uc.set(0,0,-1).applyQuaternion(Hi);if(a.positionX){var c=this.context.currentTime+this.timeDelta;a.positionX.linearRampToValueAtTime(tc.x,c);a.positionY.linearRampToValueAtTime(tc.y,c);a.positionZ.linearRampToValueAtTime(tc.z,c);a.forwardX.linearRampToValueAtTime(uc.x,c);a.forwardY.linearRampToValueAtTime(uc.y,c);a.forwardZ.linearRampToValueAtTime(uc.z,c);a.upX.linearRampToValueAtTime(b.x,c);a.upY.linearRampToValueAtTime(b.y, +c);a.upZ.linearRampToValueAtTime(b.z,c)}else a.setPosition(tc.x,tc.y,tc.z),a.setOrientation(uc.x,uc.y,uc.z,b.x,b.y,b.z)}});cd.prototype=Object.assign(Object.create(E.prototype),{constructor:cd,getOutput:function(){return this.gain},setNodeSource:function(a){this.hasPlaybackControl=!1;this.sourceType="audioNode";this.source=a;this.connect();return this},setMediaElementSource:function(a){this.hasPlaybackControl=!1;this.sourceType="mediaNode";this.source=this.context.createMediaElementSource(a);this.connect(); +return this},setMediaStreamSource:function(a){this.hasPlaybackControl=!1;this.sourceType="mediaStreamNode";this.source=this.context.createMediaStreamSource(a);this.connect();return this},setBuffer:function(a){this.buffer=a;this.sourceType="buffer";this.autoplay&&this.play();return this},play:function(a){void 0===a&&(a=0);if(!0===this.isPlaying)console.warn("THREE.Audio: Audio is already playing.");else if(!1===this.hasPlaybackControl)console.warn("THREE.Audio: this Audio has no playback control."); +else return this._startedAt=this.context.currentTime+a,a=this.context.createBufferSource(),a.buffer=this.buffer,a.loop=this.loop,a.loopStart=this.loopStart,a.loopEnd=this.loopEnd,a.onended=this.onEnded.bind(this),a.start(this._startedAt,this._pausedAt+this.offset,this.duration),this.isPlaying=!0,this.source=a,this.setDetune(this.detune),this.setPlaybackRate(this.playbackRate),this.connect()},pause:function(){if(!1===this.hasPlaybackControl)console.warn("THREE.Audio: this Audio has no playback control."); +else return!0===this.isPlaying&&(this._pausedAt=(this.context.currentTime-this._startedAt)*this.playbackRate,this.source.stop(),this.source.onended=null,this.isPlaying=!1),this},stop:function(){if(!1===this.hasPlaybackControl)console.warn("THREE.Audio: this Audio has no playback control.");else return this._pausedAt=0,this.source.stop(),this.source.onended=null,this.isPlaying=!1,this},connect:function(){if(0d&&this._mixBufferRegion(c,a,3*b,1-d,b);d=b;for(var f=b+b;d!==f;++d)if(c[d]!==c[d+b]){e.setValue(c,a);break}},saveOriginalState:function(){var a=this.buffer,b=this.valueSize,c=3*b;this.binding.getValue(a,c);for(var d=b;d!==c;++d)a[d]= +a[c+d%b];this.cumulativeWeight=0},restoreOriginalState:function(){this.binding.setValue(this.buffer,3*this.valueSize)},_select:function(a,b,c,d,e){if(.5<=d)for(d=0;d!==e;++d)a[b+d]=a[c+d]},_slerp:function(a,b,c,d){wa.slerpFlat(a,b,a,b,a,c,d)},_lerp:function(a,b,c,d,e){for(var f=1-d,g=0;g!==e;++g){var h=b+g;a[h]=a[h]*f+a[c+g]*d}}});var Jk=/[\[\]\.:\/]/g,Kk="[^"+"\\[\\]\\.:\\/".replace("\\.","")+"]",Lk=/((?:WC+[\/:])*)/.source.replace("WC","[^\\[\\]\\.:\\/]"),Mk=/(WCOD+)?/.source.replace("WCOD",Kk), +Nk=/(?:\.(WC+)(?:\[(.+)\])?)?/.source.replace("WC","[^\\[\\]\\.:\\/]"),Ok=/\.(WC+)(?:\[(.+)\])?/.source.replace("WC","[^\\[\\]\\.:\\/]"),Pk=new RegExp("^"+Lk+Mk+Nk+Ok+"$"),Qk=["material","materials","bones"];Object.assign(bi.prototype,{getValue:function(a,b){this.bind();var c=this._bindings[this._targetGroup.nCachedObjects_];void 0!==c&&c.getValue(a,b)},setValue:function(a,b){for(var c=this._bindings,d=this._targetGroup.nCachedObjects_,e=c.length;d!==e;++d)c[d].setValue(a,b)},bind:function(){for(var a= +this._bindings,b=this._targetGroup.nCachedObjects_,c=a.length;b!==c;++b)a[b].bind()},unbind:function(){for(var a=this._bindings,b=this._targetGroup.nCachedObjects_,c=a.length;b!==c;++b)a[b].unbind()}});Object.assign(ya,{Composite:bi,create:function(a,b,c){return a&&a.isAnimationObjectGroup?new ya.Composite(a,b,c):new ya(a,b,c)},sanitizeNodeName:function(a){return a.replace(/\s/g,"_").replace(Jk,"")},parseTrackName:function(a){var b=Pk.exec(a);if(!b)throw Error("PropertyBinding: Cannot parse trackName: "+ +a);b={nodeName:b[2],objectName:b[3],objectIndex:b[4],propertyName:b[5],propertyIndex:b[6]};var c=b.nodeName&&b.nodeName.lastIndexOf(".");if(void 0!==c&&-1!==c){var d=b.nodeName.substring(c+1);-1!==Qk.indexOf(d)&&(b.nodeName=b.nodeName.substring(0,c),b.objectName=d)}if(null===b.propertyName||0===b.propertyName.length)throw Error("PropertyBinding: can not parse propertyName from trackName: "+a);return b},findNode:function(a,b){if(!b||""===b||"root"===b||"."===b||-1===b||b===a.name||b===a.uuid)return a; +if(a.skeleton){var c=a.skeleton.getBoneByName(b);if(void 0!==c)return c}if(a.children){var d=function(a){for(var c=0;c=b){var n=b++,q=a[n];c[q.uuid]=m;a[m]=q;c[k]=n;a[n]=h;h=0;for(k=e;h!==k;++h){q=d[h];var u=q[m];q[m]=q[n];q[n]=u}}}this.nCachedObjects_=b},uncache:function(){for(var a=this._objects,b=a.length,c=this.nCachedObjects_,d=this._indicesByUUID,e=this._bindings,f=e.length,g=0,h=arguments.length;g!==h;++g){var k= +arguments[g].uuid,m=d[k];if(void 0!==m)if(delete d[k],mb||0===c)return;this._startTime=null;b*=c}b*=this._updateTimeScale(a);c=this._updateTime(b);a=this._updateWeight(a);if(0c.parameterPositions[1]&&(this.stopFading(),0===d&&(this.enabled=!1))}}return this._effectiveWeight=b},_updateTimeScale:function(a){var b=0;if(!this.paused){b=this.timeScale;var c=this._timeScaleInterpolant;if(null!==c){var d=c.evaluate(a)[0];b*=d;a>c.parameterPositions[1]&&(this.stopWarping(),0===b?this.paused=!0:this.timeScale=b)}}return this._effectiveTimeScale=b},_updateTime:function(a){var b=this.time+a,c=this._clip.duration,d=this.loop,e=this._loopCount,f=2202===d;if(0===a)return-1=== +e?b:f&&1===(e&1)?c-b:b;if(2200===d)a:{if(-1===e&&(this._loopCount=0,this._setEndings(!0,!0,!1)),b>=c)b=c;else if(0>b)b=0;else{this.time=b;break a}this.clampWhenFinished?this.paused=!0:this.enabled=!1;this.time=b;this._mixer.dispatchEvent({type:"finished",action:this,direction:0>a?-1:1})}else{-1===e&&(0<=a?(e=0,this._setEndings(!0,0===this.repetitions,f)):this._setEndings(0===this.repetitions,!0,f));if(b>=c||0>b){d=Math.floor(b/c);b-=c*d;e+=Math.abs(d);var g=this.repetitions-e;0>=g?(this.clampWhenFinished? +this.paused=!0:this.enabled=!1,this.time=b=0a,this._setEndings(a,!a,f)):this._setEndings(!1,!1,f),this._loopCount=e,this.time=b,this._mixer.dispatchEvent({type:"loop",action:this,loopDelta:d}))}else this.time=b;if(f&&1===(e&1))return c-b}return b},_setEndings:function(a,b,c){var d=this._interpolantSettings;c?(d.endingStart=2401,d.endingEnd=2401):(d.endingStart=a?this.zeroSlopeAtStart?2401:2400:2402,d.endingEnd= +b?this.zeroSlopeAtEnd?2401:2400:2402)},_scheduleFading:function(a,b,c){var d=this._mixer,e=d.time,f=this._weightInterpolant;null===f&&(this._weightInterpolant=f=d._lendControlInterpolant());d=f.parameterPositions;f=f.sampleValues;d[0]=e;f[0]=b;d[1]=e+a;f[1]=c;return this}});Fg.prototype=Object.assign(Object.create(Aa.prototype),{constructor:Fg,_bindAction:function(a,b){var c=a._localRoot||this._root,d=a._clip.tracks,e=d.length,f=a._propertyBindings;a=a._interpolants;var g=c.uuid,h=this._bindingsByRootAndName, +k=h[g];void 0===k&&(k={},h[g]=k);for(h=0;h!==e;++h){var m=d[h],n=m.name,q=k[n];if(void 0===q){q=f[h];if(void 0!==q){null===q._cacheIndex&&(++q.referenceCount,this._addInactiveBinding(q,g,n));continue}q=new Eg(ya.create(c,n,b&&b._propertyBindings[h].binding.parsedPath),m.ValueTypeName,m.getValueSize());++q.referenceCount;this._addInactiveBinding(q,g,n)}f[h]=q;a[h].resultBuffer=q.buffer}},_activateAction:function(a){if(!this._isActiveAction(a)){if(null===a._cacheIndex){var b=(a._localRoot||this._root).uuid, +c=a._clip.uuid,d=this._actionsByClip[c];this._bindAction(a,d&&d.knownActions[0]);this._addInactiveAction(a,c,b)}b=a._propertyBindings;c=0;for(d=b.length;c!==d;++c){var e=b[c];0===e.useCount++&&(this._lendBinding(e),e.saveOriginalState())}this._lendAction(a)}},_deactivateAction:function(a){if(this._isActiveAction(a)){for(var b=a._propertyBindings,c=0,d=b.length;c!==d;++c){var e=b[c];0===--e.useCount&&(e.restoreOriginalState(),this._takeBackBinding(e))}this._takeBackAction(a)}},_initMemoryManager:function(){this._actions= +[];this._nActiveActions=0;this._actionsByClip={};this._bindings=[];this._nActiveBindings=0;this._bindingsByRootAndName={};this._controlInterpolants=[];this._nActiveControlInterpolants=0;var a=this;this.stats={actions:{get total(){return a._actions.length},get inUse(){return a._nActiveActions}},bindings:{get total(){return a._bindings.length},get inUse(){return a._nActiveBindings}},controlInterpolants:{get total(){return a._controlInterpolants.length},get inUse(){return a._nActiveControlInterpolants}}}}, +_isActiveAction:function(a){a=a._cacheIndex;return null!==a&&athis.max.x||a.ythis.max.y?!1:!0},containsBox:function(a){return this.min.x<=a.min.x&&a.max.x<=this.max.x&&this.min.y<=a.min.y&&a.max.y<=this.max.y},getParameter:function(a,b){void 0===b&&(console.warn("THREE.Box2: .getParameter() target is now required"),b=new B);return b.set((a.x-this.min.x)/(this.max.x-this.min.x), +(a.y-this.min.y)/(this.max.y-this.min.y))},intersectsBox:function(a){return a.max.xthis.max.x||a.max.ythis.max.y?!1:!0},clampPoint:function(a,b){void 0===b&&(console.warn("THREE.Box2: .clampPoint() target is now required"),b=new B);return b.copy(a).clamp(this.min,this.max)},distanceToPoint:function(a){return Ji.copy(a).clamp(this.min,this.max).sub(a).length()},intersect:function(a){this.min.max(a.min);this.max.min(a.max);return this},union:function(a){this.min.min(a.min); +this.max.max(a.max);return this},translate:function(a){this.min.add(a);this.max.add(a);return this},equals:function(a){return a.min.equals(this.min)&&a.max.equals(this.max)}});var Ki=new n,Nf=new n;Object.assign(Jg.prototype,{set:function(a,b){this.start.copy(a);this.end.copy(b);return this},clone:function(){return(new this.constructor).copy(this)},copy:function(a){this.start.copy(a.start);this.end.copy(a.end);return this},getCenter:function(a){void 0===a&&(console.warn("THREE.Line3: .getCenter() target is now required"), +a=new n);return a.addVectors(this.start,this.end).multiplyScalar(.5)},delta:function(a){void 0===a&&(console.warn("THREE.Line3: .delta() target is now required"),a=new n);return a.subVectors(this.end,this.start)},distanceSq:function(){return this.start.distanceToSquared(this.end)},distance:function(){return this.start.distanceTo(this.end)},at:function(a,b){void 0===b&&(console.warn("THREE.Line3: .at() target is now required"),b=new n);return this.delta(b).multiplyScalar(a).add(this.start)},closestPointToPointParameter:function(a, +b){Ki.subVectors(a,this.start);Nf.subVectors(this.end,this.start);a=Nf.dot(Nf);a=Nf.dot(Ki)/a;b&&(a=P.clamp(a,0,1));return a},closestPointToPoint:function(a,b,c){a=this.closestPointToPointParameter(a,b);void 0===c&&(console.warn("THREE.Line3: .closestPointToPoint() target is now required"),c=new n);return this.delta(c).multiplyScalar(a).add(this.start)},applyMatrix4:function(a){this.start.applyMatrix4(a);this.end.applyMatrix4(a);return this},equals:function(a){return a.start.equals(this.start)&&a.end.equals(this.end)}}); +pe.prototype=Object.create(E.prototype);pe.prototype.constructor=pe;pe.prototype.isImmediateRenderObject=!0;var lb=new n,Ab=new n,gh=new Z,Rk=["a","b","c"];qe.prototype=Object.create(X.prototype);qe.prototype.constructor=qe;qe.prototype.update=function(){this.object.updateMatrixWorld(!0);gh.getNormalMatrix(this.object.matrixWorld);var a=this.object.matrixWorld,b=this.geometry.attributes.position,c=this.object.geometry;if(c&&c.isGeometry)for(var d=c.vertices,e=c.faces,f=c=0,g=e.length;fMath.abs(b)&&(b=1E-8);this.scale.set(.5*this.size,.5*this.size,b);this.children[0].material.side= +0>b?1:0;this.lookAt(this.plane.normal);E.prototype.updateMatrixWorld.call(this,a)};var Ri=new n,tf,Kg;ub.prototype=Object.create(E.prototype);ub.prototype.constructor=ub;ub.prototype.setDirection=function(a){.99999a.y?this.quaternion.set(1,0,0,0):(Ri.set(a.z,0,-a.x).normalize(),this.quaternion.setFromAxisAngle(Ri,Math.acos(a.y)))};ub.prototype.setLength=function(a,b,c){void 0===b&&(b=.2*a);void 0===c&&(c=.2*b);this.line.scale.set(1,Math.max(1E-4,a-b),1);this.line.updateMatrix(); +this.cone.scale.set(c,b,c);this.cone.position.y=a;this.cone.updateMatrix()};ub.prototype.setColor=function(a){this.line.material.color.set(a);this.cone.material.color.set(a)};ub.prototype.copy=function(a){E.prototype.copy.call(this,a,!1);this.line.copy(a.line);this.cone.copy(a.cone);return this};ub.prototype.clone=function(){return(new this.constructor).copy(this)};ve.prototype=Object.create(X.prototype);ve.prototype.constructor=ve;C.create=function(a,b){console.log("THREE.Curve.create() has been deprecated"); +a.prototype=Object.create(C.prototype);a.prototype.constructor=a;a.prototype.getPoint=b;return a};Object.assign(sb.prototype,{createPointsGeometry:function(a){console.warn("THREE.CurvePath: .createPointsGeometry() has been removed. Use new THREE.Geometry().setFromPoints( points ) instead.");a=this.getPoints(a);return this.createGeometry(a)},createSpacedPointsGeometry:function(a){console.warn("THREE.CurvePath: .createSpacedPointsGeometry() has been removed. Use new THREE.Geometry().setFromPoints( points ) instead."); +a=this.getSpacedPoints(a);return this.createGeometry(a)},createGeometry:function(a){console.warn("THREE.CurvePath: .createGeometry() has been removed. Use new THREE.Geometry().setFromPoints( points ) instead.");for(var b=new G,c=0,d=a.length;ch)return!1}return!0}function ha(){Object.defineProperty(this,"id",{value:ik++});this.uuid=xa.generateUUID();this.name=""; +this.type="Object3D";this.parent=null;this.children=[];this.up=ha.DefaultUp.clone();var c=new w,a=new hb,b=new ua,d=new w(1,1,1);a._onChange(function(){b.setFromEuler(a,!1)});b._onChange(function(){a.setFromQuaternion(b,void 0,!1)});Object.defineProperties(this,{position:{configurable:!0,enumerable:!0,value:c},rotation:{configurable:!0,enumerable:!0,value:a},quaternion:{configurable:!0,enumerable:!0,value:b},scale:{configurable:!0,enumerable:!0,value:d},modelViewMatrix:{value:new da},normalMatrix:{value:new Da}}); +this.matrix=new da;this.matrixWorld=new da;this.matrixAutoUpdate=ha.DefaultMatrixAutoUpdate;this.matrixWorldNeedsUpdate=!1;this.layers=new $b;this.visible=!0;this.receiveShadow=this.castShadow=!1;this.frustumCulled=!0;this.renderOrder=0;this.userData={}}function fh(c,a,b){0>b&&(b+=1);1b?a:b<2/3?c+6*(a-c)*(2/3-b):c}function gh(c){return.04045>c?.0773993808*c:Math.pow(.9478672986*c+.0521327014,2.4)}function hh(c){return.0031308>c?12.92*c:1.055*Math.pow(c,.41666)- +.055}function ra(){Object.defineProperty(this,"id",{value:jk++});this.uuid=xa.generateUUID();this.name="";this.type="Material";this.fog=!0;this.blending=1;this.side=0;this.vertexColors=this.flatShading=!1;this.opacity=1;this.transparent=!1;this.blendSrc=204;this.blendDst=205;this.blendEquation=100;this.blendEquationAlpha=this.blendDstAlpha=this.blendSrcAlpha=null;this.depthFunc=3;this.depthWrite=this.depthTest=!0;this.stencilWriteMask=255;this.stencilFunc=519;this.stencilRef=0;this.stencilFuncMask= +255;this.stencilZPass=this.stencilZFail=this.stencilFail=7680;this.stencilWrite=!1;this.clippingPlanes=null;this.clipShadows=this.clipIntersection=!1;this.shadowSide=null;this.colorWrite=!0;this.precision=null;this.polygonOffset=!1;this.polygonOffsetUnits=this.polygonOffsetFactor=0;this.dithering=!1;this.alphaTest=0;this.premultipliedAlpha=!1;this.toneMapped=this.visible=!0;this.userData={};this.version=0}function Kb(c){ra.call(this);this.type="MeshBasicMaterial";this.color=new S(16777215);this.lightMap= +this.map=null;this.lightMapIntensity=1;this.aoMap=null;this.aoMapIntensity=1;this.envMap=this.alphaMap=this.specularMap=null;this.combine=0;this.reflectivity=1;this.refractionRatio=.98;this.wireframe=!1;this.wireframeLinewidth=1;this.wireframeLinejoin=this.wireframeLinecap="round";this.morphTargets=this.skinning=!1;this.setValues(c)}function pa(c,a,b){if(Array.isArray(c))throw new TypeError("THREE.BufferAttribute: array should be a Typed Array.");this.name="";this.array=c;this.itemSize=a;this.count= +void 0!==c?c.length/a:0;this.normalized=!0===b;this.usage=35044;this.updateRange={offset:0,count:-1};this.version=0}function Ce(c,a,b){pa.call(this,new Int8Array(c),a,b)}function De(c,a,b){pa.call(this,new Uint8Array(c),a,b)}function Ee(c,a,b){pa.call(this,new Uint8ClampedArray(c),a,b)}function Fe(c,a,b){pa.call(this,new Int16Array(c),a,b)}function Zc(c,a,b){pa.call(this,new Uint16Array(c),a,b)}function Ge(c,a,b){pa.call(this,new Int32Array(c),a,b)}function $c(c,a,b){pa.call(this,new Uint32Array(c), +a,b)}function ea(c,a,b){pa.call(this,new Float32Array(c),a,b)}function He(c,a,b){pa.call(this,new Float64Array(c),a,b)}function vi(c){if(0===c.length)return-Infinity;for(var a=c[0],b=1,d=c.length;ba&&(a=c[b]);return a}function ka(){Object.defineProperty(this,"id",{value:kk+=2});this.uuid=xa.generateUUID();this.name="";this.type="BufferGeometry";this.index=null;this.attributes={};this.morphAttributes={};this.morphTargetsRelative=!1;this.groups=[];this.boundingSphere=this.boundingBox=null; +this.drawRange={start:0,count:Infinity};this.userData={}}function Qa(c,a){ha.call(this);this.type="Mesh";this.geometry=void 0!==c?c:new ka;this.material=void 0!==a?a:new Kb;this.updateMorphTargets()}function wi(c,a,b,d,e,f,g,h){if(null===(1===a.side?d.intersectTriangle(g,f,e,!0,h):d.intersectTriangle(e,f,g,2!==a.side,h)))return null;Of.copy(h);Of.applyMatrix4(c.matrixWorld);a=b.ray.origin.distanceTo(Of);return ab.far?null:{distance:a,point:Of.clone(),object:c}}function Pf(c,a,b,d,e,f,g, +h,k,l,m,n){yc.fromBufferAttribute(e,l);zc.fromBufferAttribute(e,m);Ac.fromBufferAttribute(e,n);e=c.morphTargetInfluences;if(a.morphTargets&&f&&e){Qf.set(0,0,0);Rf.set(0,0,0);Sf.set(0,0,0);for(var p=0,t=f.length;pq;q++)l.setRenderTarget(b,q),l.clear(m,n,p);l.setRenderTarget(t)}}}function Cc(c,a,b){Number.isInteger(a)&&(console.warn("THREE.WebGLCubeRenderTarget: constructor signature is now WebGLCubeRenderTarget( size, options )"),a=b);Db.call(this,c,c,a);this.texture.isWebGLCubeRenderTargetTexture=!0}function bd(c,a,b,d,e,f,g,h,k,l,m,n){Oa.call(this,null,f,g,h,k,l,d,e,m,n);this.image={data:c|| +null,width:a||1,height:b||1};this.magFilter=void 0!==k?k:1003;this.minFilter=void 0!==l?l:1003;this.flipY=this.generateMipmaps=!1;this.unpackAlignment=1;this.needsUpdate=!0}function xi(){function c(f,g){d(f,g);e=a.requestAnimationFrame(c)}var a=null,b=!1,d=null,e=null;return{start:function(){!0!==b&&null!==d&&(e=a.requestAnimationFrame(c),b=!0)},stop:function(){a.cancelAnimationFrame(e);b=!1},setAnimationLoop:function(f){d=f},setContext:function(f){a=f}}}function mk(c,a){function b(f,g){var h=f.array, +k=f.usage,l=c.createBuffer();c.bindBuffer(g,l);c.bufferData(g,h,k);f.onUploadCallback();g=5126;h instanceof Float32Array?g=5126:h instanceof Float64Array?console.warn("THREE.WebGLAttributes: Unsupported data buffer format: Float64Array."):h instanceof Uint16Array?g=5123:h instanceof Int16Array?g=5122:h instanceof Uint32Array?g=5125:h instanceof Int32Array?g=5124:h instanceof Int8Array?g=5120:h instanceof Uint8Array&&(g=5121);return{buffer:l,type:g,bytesPerElement:h.BYTES_PER_ELEMENT,version:f.version}} +var d=a.isWebGL2,e=new WeakMap;return{get:function(f){f.isInterleavedBufferAttribute&&(f=f.data);return e.get(f)},remove:function(f){f.isInterleavedBufferAttribute&&(f=f.data);var g=e.get(f);g&&(c.deleteBuffer(g.buffer),e.delete(f))},update:function(f,g){if(f.isGLBufferAttribute)g=e.get(f),(!g||g.versione;e++)d[e]=[e,0];return{update:function(f,g,h,k){var l=f.morphTargetInfluences;f=void 0===l?0:l.length;var m=a[g.id];if(void 0===m){m=[];for(var n=0;nl;l++)ll;l++)p=d[l],n=p[0],p=p[1],n!==Number.MAX_SAFE_INTEGER&&p?(f&&g.getAttribute("morphTarget"+l)!==f[n]&&g.setAttribute("morphTarget"+l,f[n]),h&&g.getAttribute("morphNormal"+l)!==h[n]&&g.setAttribute("morphNormal"+l,h[n]),b[l]=p,m+=p):(f&&void 0!==g.getAttribute("morphTarget"+l)&&g.deleteAttribute("morphTarget"+l),h&&void 0!==g.getAttribute("morphNormal"+l)&&g.deleteAttribute("morphNormal"+l),b[l]=0);g=g.morphTargetsRelative?1:1-m;k.getUniforms().setValue(c,"morphTargetBaseInfluence",g); +k.getUniforms().setValue(c,"morphTargetInfluences",b)}}}function Ak(c,a,b,d){var e=new WeakMap;return{update:function(f){var g=d.render.frame,h=f.geometry,k=a.get(f,h);e.get(k)!==g&&(h.isGeometry&&k.updateFromObject(f),a.update(k),e.set(k,g));f.isInstancedMesh&&(b.update(f.instanceMatrix,34962),null!==f.instanceColor&&b.update(f.instanceColor,34962));return k},dispose:function(){e=new WeakMap}}}function kc(c,a,b,d,e,f,g,h,k,l){c=void 0!==c?c:[];Oa.call(this,c,void 0!==a?a:301,b,d,e,f,void 0!==g?g: +1022,h,k,l);this.flipY=!1}function Id(c,a,b,d){Oa.call(this,null);this.image={data:c||null,width:a||1,height:b||1,depth:d||1};this.minFilter=this.magFilter=1003;this.wrapR=1001;this.flipY=this.generateMipmaps=!1;this.needsUpdate=!0}function Jd(c,a,b,d){Oa.call(this,null);this.image={data:c||null,width:a||1,height:b||1,depth:d||1};this.minFilter=this.magFilter=1003;this.wrapR=1001;this.flipY=this.generateMipmaps=!1;this.needsUpdate=!0}function Kd(c,a,b){var d=c[0];if(0>=d||0");return c.replace(nh,mh)}function Ni(c,a,b,d){console.warn("WebGLProgram: #pragma unroll_loop shader syntax is deprecated. Please use #pragma unroll_loop_start syntax instead.");return oh(c,a,b,d)}function oh(c,a,b,d){c="";for(a=parseInt(a);ad;d++)b.probe.push(new w);var e=new w,f=new da,g=new da;return{setup:function(h,k,l){for(var m=k=0,n=0,p=0;9>p;p++)b.probe[p].set(0,0,0);var t=p=0,q=0,v=0,u=0,A=0,B=0,D=0;l=l.matrixWorldInverse;h.sort(yl);for(var G=0,I=h.length;GK;K++)b.probe[K].addScaledVector(E.sh.coefficients[K],M);else if(E.isDirectionalLight){M=c.get(E);M.color.copy(E.color).multiplyScalar(E.intensity);M.direction.setFromMatrixPosition(E.matrixWorld);e.setFromMatrixPosition(E.target.matrixWorld);M.direction.sub(e);M.direction.transformDirection(l);if(E.castShadow){var P=E.shadow;H=a.get(E);H.shadowBias=P.bias;H.shadowNormalBias=P.normalBias; +H.shadowRadius=P.radius;H.shadowMapSize=P.mapSize;b.directionalShadow[p]=H;b.directionalShadowMap[p]=K;b.directionalShadowMatrix[p]=E.shadow.matrix;A++}b.directional[p]=M;p++}else E.isSpotLight?(P=c.get(E),P.position.setFromMatrixPosition(E.matrixWorld),P.position.applyMatrix4(l),P.color.copy(H).multiplyScalar(M),P.distance=F,P.direction.setFromMatrixPosition(E.matrixWorld),e.setFromMatrixPosition(E.target.matrixWorld),P.direction.sub(e),P.direction.transformDirection(l),P.coneCos=Math.cos(E.angle), +P.penumbraCos=Math.cos(E.angle*(1-E.penumbra)),P.decay=E.decay,E.castShadow&&(M=E.shadow,H=a.get(E),H.shadowBias=M.bias,H.shadowNormalBias=M.normalBias,H.shadowRadius=M.radius,H.shadowMapSize=M.mapSize,b.spotShadow[q]=H,b.spotShadowMap[q]=K,b.spotShadowMatrix[q]=E.shadow.matrix,D++),b.spot[q]=P,q++):E.isRectAreaLight?(K=c.get(E),K.color.copy(H).multiplyScalar(M),K.position.setFromMatrixPosition(E.matrixWorld),K.position.applyMatrix4(l),g.identity(),f.copy(E.matrixWorld),f.premultiply(l),g.extractRotation(f), +K.halfWidth.set(.5*E.width,0,0),K.halfHeight.set(0,.5*E.height,0),K.halfWidth.applyMatrix4(g),K.halfHeight.applyMatrix4(g),b.rectArea[v]=K,v++):E.isPointLight?(M=c.get(E),M.position.setFromMatrixPosition(E.matrixWorld),M.position.applyMatrix4(l),M.color.copy(E.color).multiplyScalar(E.intensity),M.distance=E.distance,M.decay=E.decay,E.castShadow&&(P=E.shadow,H=a.get(E),H.shadowBias=P.bias,H.shadowNormalBias=P.normalBias,H.shadowRadius=P.radius,H.shadowMapSize=P.mapSize,H.shadowCameraNear=P.camera.near, +H.shadowCameraFar=P.camera.far,b.pointShadow[t]=H,b.pointShadowMap[t]=K,b.pointShadowMatrix[t]=E.shadow.matrix,B++),b.point[t]=M,t++):E.isHemisphereLight&&(K=c.get(E),K.direction.setFromMatrixPosition(E.matrixWorld),K.direction.transformDirection(l),K.direction.normalize(),K.skyColor.copy(E.color).multiplyScalar(M),K.groundColor.copy(E.groundColor).multiplyScalar(M),b.hemi[u]=K,u++)}0\nvoid main() {\n\tfloat mean = 0.0;\n\tfloat squared_mean = 0.0;\n\tfloat depth = unpackRGBAToDepth( texture2D( shadow_pass, ( gl_FragCoord.xy ) / resolution ) );\n\tfor ( float i = -1.0; i < 1.0 ; i += SAMPLE_RATE) {\n\t\t#ifdef HORIZONAL_PASS\n\t\t\tvec2 distribution = unpackRGBATo2Half( texture2D( shadow_pass, ( gl_FragCoord.xy + vec2( i, 0.0 ) * radius ) / resolution ) );\n\t\t\tmean += distribution.x;\n\t\t\tsquared_mean += distribution.y * distribution.y + distribution.x * distribution.x;\n\t\t#else\n\t\t\tfloat depth = unpackRGBAToDepth( texture2D( shadow_pass, ( gl_FragCoord.xy + vec2( 0.0, i ) * radius ) / resolution ) );\n\t\t\tmean += depth;\n\t\t\tsquared_mean += depth * depth;\n\t\t#endif\n\t}\n\tmean = mean * HALF_SAMPLE_RATE;\n\tsquared_mean = squared_mean * HALF_SAMPLE_RATE;\n\tfloat std_dev = sqrt( squared_mean - mean * mean );\n\tgl_FragColor = pack2HalfToRGBA( vec2( mean, std_dev ) );\n}"}), +u=v.clone();u.defines.HORIZONAL_PASS=1;var A=new ka;A.setAttribute("position",new pa(new Float32Array([-1,-1,.5,3,-1,.5,-1,3,.5]),3));var B=new Qa(A,v),D=this;this.enabled=!1;this.autoUpdate=!0;this.needsUpdate=!1;this.type=1;this.render=function(G,I,E){if(!1!==D.enabled&&(!1!==D.autoUpdate||!1!==D.needsUpdate)&&0!==G.length){var H=c.getRenderTarget(),M=c.getActiveCubeFace(),F=c.getActiveMipmapLevel(),K=c.state;K.setBlending(0);K.buffers.color.setClear(1,1,1,1);K.buffers.depth.setTest(!0);K.setScissorTest(!1); +for(var P=0,V=G.length;Pb||k.y>b)k.x>b&&(l.x=Math.floor(b/aa.x),k.x=l.x*aa.x,W.mapSize.x=l.x),k.y>b&&(l.y=Math.floor(b/aa.y),k.y=l.y*aa.y,W.mapSize.y=l.y);null!==W.map||W.isPointLightShadow||3!==this.type||(aa={minFilter:1006,magFilter:1006,format:1023},W.map=new Db(k.x, +k.y,aa),W.map.texture.name=ia.name+".shadowMap",W.mapPass=new Db(k.x,k.y,aa),W.camera.updateProjectionMatrix());null===W.map&&(W.map=new Db(k.x,k.y,{minFilter:1003,magFilter:1003,format:1023}),W.map.texture.name=ia.name+".shadowMap",W.camera.updateProjectionMatrix());c.setRenderTarget(W.map);c.clear();aa=W.getViewportCount();for(var Z=0;ZQ||z.height>Q)T=Q/Math.max(z.width,z.height);if(1>T||!0===C){if("undefined"!==typeof HTMLImageElement&&z instanceof HTMLImageElement||"undefined"!==typeof HTMLCanvasElement&&z instanceof HTMLCanvasElement||"undefined"!==typeof ImageBitmap&&z instanceof ImageBitmap)return Q=C?xa.floorPowerOfTwo:Math.floor,C=Q(T*z.width),T=Q(T*z.height),void 0===aa&&(aa=h(C,T)),y=y?h(C,T):aa,y.width=C,y.height=T,y.getContext("2d").drawImage(z,0,0,C,T),console.warn("THREE.WebGLRenderer: Texture has been resized from ("+ +z.width+"x"+z.height+") to ("+C+"x"+T+")."),y;"data"in z&&console.warn("THREE.WebGLRenderer: Image in DataTexture is too big ("+z.width+"x"+z.height+").")}return z}function l(z){return xa.isPowerOfTwo(z.width)&&xa.isPowerOfTwo(z.height)}function m(z,C){return z.generateMipmaps&&C&&1003!==z.minFilter&&1006!==z.minFilter}function n(z,C,y,Q){c.generateMipmap(z);d.get(C).__maxMipLevel=Math.log(Math.max(y,Q))*Math.LOG2E}function p(z,C,y){if(!1===F)return C;if(null!==z){if(void 0!==c[z])return c[z];console.warn("THREE.WebGLRenderer: Attempt to use non-existing WebGL internal format '"+ +z+"'")}z=C;6403===C&&(5126===y&&(z=33326),5131===y&&(z=33325),5121===y&&(z=33321));6407===C&&(5126===y&&(z=34837),5131===y&&(z=34843),5121===y&&(z=32849));6408===C&&(5126===y&&(z=34836),5131===y&&(z=34842),5121===y&&(z=32856));33325!==z&&33326!==z&&34842!==z&&34836!==z||a.get("EXT_color_buffer_float");return z}function t(z){return 1003===z||1004===z||1005===z?9728:9729}function q(z){z=z.target;z.removeEventListener("dispose",q);var C=d.get(z);void 0!==C.__webglInit&&(c.deleteTexture(C.__webglTexture), +d.remove(z));z.isVideoTexture&&W.delete(z);g.memory.textures--}function v(z){z=z.target;z.removeEventListener("dispose",v);var C=d.get(z),y=d.get(z.texture);if(z){void 0!==y.__webglTexture&&c.deleteTexture(y.__webglTexture);z.depthTexture&&z.depthTexture.dispose();if(z.isWebGLCubeRenderTarget)for(y=0;6>y;y++)c.deleteFramebuffer(C.__webglFramebuffer[y]),C.__webglDepthbuffer&&c.deleteRenderbuffer(C.__webglDepthbuffer[y]);else c.deleteFramebuffer(C.__webglFramebuffer),C.__webglDepthbuffer&&c.deleteRenderbuffer(C.__webglDepthbuffer), +C.__webglMultisampledFramebuffer&&c.deleteFramebuffer(C.__webglMultisampledFramebuffer),C.__webglColorRenderbuffer&&c.deleteRenderbuffer(C.__webglColorRenderbuffer),C.__webglDepthRenderbuffer&&c.deleteRenderbuffer(C.__webglDepthRenderbuffer);d.remove(z.texture);d.remove(z)}g.memory.textures--}function u(z,C){var y=d.get(z);if(z.isVideoTexture){var Q=g.render.frame;W.get(z)!==Q&&(W.set(z,Q),z.update())}if(0ba;ba++)C[ba]=Q||T?T?z.image[ba].image:z.image[ba]:k(z.image[ba],!1,!0,P);ba=C[0];var X=l(ba)||F,ta=f.convert(z.format),va=f.convert(z.type),ya=p(z.internalFormat,ta,va);D(34067,z,X);if(Q){for(T=0;6>T;T++){var Pa=C[T].mipmaps;for(Q=0;QQ;Q++)if(T)for(b.texImage2D(34069+Q,0,ya,C[Q].width,C[Q].height,0,ta,va,C[Q].data),U=0;U=K&&console.warn("THREE.WebGLTextures: Trying to use "+z+" texture units while this GPU supports only "+K);ja+=1;return z};this.resetTextureUnits=function(){ja=0};this.setTexture2D=u;this.setTexture2DArray=function(z,C){var y=d.get(z);0T;T++)C.__webglFramebuffer[T]=c.createFramebuffer();else if(C.__webglFramebuffer=c.createFramebuffer(),T)if(F){C.__webglMultisampledFramebuffer=c.createFramebuffer();C.__webglColorRenderbuffer=c.createRenderbuffer();c.bindRenderbuffer(36161,C.__webglColorRenderbuffer);T=f.convert(z.texture.format);var X=f.convert(z.texture.type);T=p(z.texture.internalFormat, +T,X);X=M(z);c.renderbufferStorageMultisample(36161,X,T,z.width,z.height);c.bindFramebuffer(36160,C.__webglMultisampledFramebuffer);c.framebufferRenderbuffer(36160,36064,36161,C.__webglColorRenderbuffer);c.bindRenderbuffer(36161,null);z.depthBuffer&&(C.__webglDepthRenderbuffer=c.createRenderbuffer(),H(C.__webglDepthRenderbuffer,z,!0));c.bindFramebuffer(36160,null)}else console.warn("THREE.WebGLRenderer: WebGLMultisampleRenderTarget can only be used with WebGL2.");if(Q){b.bindTexture(34067,y.__webglTexture); +D(34067,z.texture,ba);for(y=0;6>y;y++)E(C.__webglFramebuffer[y],z,36064,34069+y);m(z.texture,ba)&&n(34067,z.texture,z.width,z.height);b.bindTexture(34067,null)}else b.bindTexture(3553,y.__webglTexture),D(3553,z.texture,ba),E(C.__webglFramebuffer,z,36064,3553),m(z.texture,ba)&&n(3553,z.texture,z.width,z.height),b.bindTexture(3553,null);if(z.depthBuffer){C=d.get(z);ba=!0===z.isWebGLCubeRenderTarget;if(z.depthTexture){if(ba)throw Error("target.depthTexture not supported in Cube render targets");if(z&& +z.isWebGLCubeRenderTarget)throw Error("Depth Texture with cube render targets is not supported");c.bindFramebuffer(36160,C.__webglFramebuffer);if(!z.depthTexture||!z.depthTexture.isDepthTexture)throw Error("renderTarget.depthTexture must be an instance of THREE.DepthTexture");d.get(z.depthTexture).__webglTexture&&z.depthTexture.image.width===z.width&&z.depthTexture.image.height===z.height||(z.depthTexture.image.width=z.width,z.depthTexture.image.height=z.height,z.depthTexture.needsUpdate=!0);u(z.depthTexture, +0);C=d.get(z.depthTexture).__webglTexture;if(1026===z.depthTexture.format)c.framebufferTexture2D(36160,36096,3553,C,0);else if(1027===z.depthTexture.format)c.framebufferTexture2D(36160,33306,3553,C,0);else throw Error("Unknown depthTexture format");}else if(ba)for(C.__webglDepthbuffer=[],ba=0;6>ba;ba++)c.bindFramebuffer(36160,C.__webglFramebuffer[ba]),C.__webglDepthbuffer[ba]=c.createRenderbuffer(),H(C.__webglDepthbuffer[ba],z,!1);else c.bindFramebuffer(36160,C.__webglFramebuffer),C.__webglDepthbuffer= +c.createRenderbuffer(),H(C.__webglDepthbuffer,z,!1);c.bindFramebuffer(36160,null)}};this.updateRenderTargetMipmap=function(z){var C=z.texture,y=l(z)||F;if(m(C,y)){y=z.isWebGLCubeRenderTarget?34067:3553;var Q=d.get(C).__webglTexture;b.bindTexture(y,Q);n(y,C,z.width,z.height);b.bindTexture(y,null)}};this.updateMultisampleRenderTarget=function(z){if(z.isWebGLMultisampleRenderTarget)if(F){var C=d.get(z);c.bindFramebuffer(36008,C.__webglMultisampledFramebuffer);c.bindFramebuffer(36009,C.__webglFramebuffer); +var y=z.width,Q=z.height,T=16384;z.depthBuffer&&(T|=256);z.stencilBuffer&&(T|=1024);c.blitFramebuffer(0,0,y,Q,0,0,y,Q,T,9728);c.bindFramebuffer(36160,C.__webglMultisampledFramebuffer)}else console.warn("THREE.WebGLRenderer: WebGLMultisampleRenderTarget can only be used with WebGL2.")};this.safeSetTexture2D=function(z,C){z&&z.isWebGLRenderTarget&&(!1===bb&&(console.warn("THREE.WebGLTextures.safeSetTexture2D: don't use render targets as textures. Use their .texture property instead."),bb=!0),z=z.texture); +u(z,C)};this.safeSetTextureCube=function(z,C){z&&z.isWebGLCubeRenderTarget&&(!1===fb&&(console.warn("THREE.WebGLTextures.safeSetTextureCube: don't use cube render targets as textures. Use their .texture property instead."),fb=!0),z=z.texture);z&&z.isCubeTexture||Array.isArray(z.image)&&6===z.image.length?A(z,C):B(z,C)}}function Vi(c,a,b){var d=b.isWebGL2;return{convert:function(e){if(1009===e)return 5121;if(1017===e)return 32819;if(1018===e)return 32820;if(1019===e)return 33635;if(1010===e)return 5120; +if(1011===e)return 5122;if(1012===e)return 5123;if(1013===e)return 5124;if(1014===e)return 5125;if(1015===e)return 5126;if(1016===e){if(d)return 5131;var f=a.get("OES_texture_half_float");return null!==f?f.HALF_FLOAT_OES:null}if(1021===e)return 6406;if(1022===e)return 6407;if(1023===e)return 6408;if(1024===e)return 6409;if(1025===e)return 6410;if(1026===e)return 6402;if(1027===e)return 34041;if(1028===e)return 6403;if(1029===e)return 36244;if(1030===e)return 33319;if(1031===e)return 33320;if(1032=== +e)return 36248;if(1033===e)return 36249;if(33776===e||33777===e||33778===e||33779===e)if(f=a.get("WEBGL_compressed_texture_s3tc"),null!==f){if(33776===e)return f.COMPRESSED_RGB_S3TC_DXT1_EXT;if(33777===e)return f.COMPRESSED_RGBA_S3TC_DXT1_EXT;if(33778===e)return f.COMPRESSED_RGBA_S3TC_DXT3_EXT;if(33779===e)return f.COMPRESSED_RGBA_S3TC_DXT5_EXT}else return null;if(35840===e||35841===e||35842===e||35843===e)if(f=a.get("WEBGL_compressed_texture_pvrtc"),null!==f){if(35840===e)return f.COMPRESSED_RGB_PVRTC_4BPPV1_IMG; +if(35841===e)return f.COMPRESSED_RGB_PVRTC_2BPPV1_IMG;if(35842===e)return f.COMPRESSED_RGBA_PVRTC_4BPPV1_IMG;if(35843===e)return f.COMPRESSED_RGBA_PVRTC_2BPPV1_IMG}else return null;if(36196===e)return f=a.get("WEBGL_compressed_texture_etc1"),null!==f?f.COMPRESSED_RGB_ETC1_WEBGL:null;if(37492===e||37496===e)if(f=a.get("WEBGL_compressed_texture_etc"),null!==f){if(37492===e)return f.COMPRESSED_RGB8_ETC2;if(37496===e)return f.COMPRESSED_RGBA8_ETC2_EAC}if(37808===e||37809===e||37810===e||37811===e||37812=== +e||37813===e||37814===e||37815===e||37816===e||37817===e||37818===e||37819===e||37820===e||37821===e||37840===e||37841===e||37842===e||37843===e||37844===e||37845===e||37846===e||37847===e||37848===e||37849===e||37850===e||37851===e||37852===e||37853===e)return f=a.get("WEBGL_compressed_texture_astc"),null!==f?e:null;if(36492===e)return f=a.get("EXT_texture_compression_bptc"),null!==f?e:null;if(1020===e){if(d)return 34042;f=a.get("WEBGL_depth_texture");return null!==f?f.UNSIGNED_INT_24_8_WEBGL:null}}}} +function Tf(c){eb.call(this);this.cameras=c||[]}function Gc(){ha.call(this);this.type="Group"}function Me(){this._hand=this._grip=this._targetRay=null}function Wi(c,a){function b(F){var K=q.get(F.inputSource);K&&K.dispatchEvent({type:F.type})}function d(){q.forEach(function(F,K){F.disconnect(K)});q.clear();c.setFramebuffer(null);c.setRenderTarget(c.getRenderTarget());M.stop();h.isPresenting=!1;h.dispatchEvent({type:"sessionend"})}function e(F){m=F;M.setContext(k);M.start();h.isPresenting=!0;h.dispatchEvent({type:"sessionstart"})} +function f(F){for(var K=k.inputSources,P=0;PY.matrixWorld.determinant();x=p(x,N,O,Y); +Ca.setMaterial(O,na);na=J.index;N=J.attributes.position;if(null===na){if(void 0===N||0===N.count)return}else if(0===na.count)return;var Ha=1;!0===O.wireframe&&(na=ph.getWireframeAttribute(J),Ha=2);(O.morphTargets||O.morphNormals)&&Xi.update(Y,J,O,x);Fb.setup(Y,O,x,J,na);x=Yi;if(null!==na){var Fa=Oe.get(na);x=Zi;x.setIndex(Fa)}var ib=J.drawRange.start*Ha,Ia=null!==ma?ma.start*Ha:0;Fa=Math.max(ib,Ia);ma=Math.max(0,Math.min(null!==na?na.count:N.count,ib+J.drawRange.count*Ha,Ia+(null!==ma?ma.count*Ha: +Infinity))-1-Fa+1);0!==ma&&(Y.isMesh?!0===O.wireframe?(Ca.setLineWidth(O.wireframeLinewidth*(null===W?y:1)),x.setMode(1)):x.setMode(4):Y.isLine?(O=O.linewidth,void 0===O&&(O=1),Ca.setLineWidth(O*(null===W?y:1)),Y.isLineSegments?x.setMode(1):Y.isLineLoop?x.setMode(2):x.setMode(3)):Y.isPoints?x.setMode(0):Y.isSprite&&x.setMode(4),Y.isInstancedMesh?x.renderInstances(Fa,ma,Y.count):J.isInstancedBufferGeometry?x.renderInstances(Fa,ma,Math.min(J.instanceCount,J._maxInstanceCount)):x.render(Fa,ma))};this.compile= +function(x,N){M=Md.get(x,N);M.init();x.traverse(function(O){O.isLight&&(M.pushLight(O),O.castShadow&&M.pushShadow(O))});M.setupLights(N);var J=new WeakMap;x.traverse(function(O){var Y=O.material;if(Y)if(Array.isArray(Y))for(var ma=0;mae.far||f.push({distance:c,distanceToRay:Math.sqrt(h),point:b,index:a,face:null,object:g}))}function xh(c,a,b,d, +e,f,g,h,k){function l(){m.needsUpdate=!0;c.requestVideoFrameCallback(l)}Oa.call(this,c,a,b,d,e,f,g,h,k);this.format=void 0!==g?g:1022;this.minFilter=void 0!==f?f:1006;this.magFilter=void 0!==e?e:1006;this.generateMipmaps=!1;var m=this;"requestVideoFrameCallback"in c&&c.requestVideoFrameCallback(l)}function Qd(c,a,b,d,e,f,g,h,k,l,m,n){Oa.call(this,null,f,g,h,k,l,d,e,m,n);this.image={width:a,height:b};this.mipmaps=c;this.generateMipmaps=this.flipY=!1}function Te(c,a,b,d,e,f,g,h,k){Oa.call(this,c,a, +b,d,e,f,g,h,k);this.needsUpdate=!0}function Ue(c,a,b,d,e,f,g,h,k,l){l=void 0!==l?l:1026;if(1026!==l&&1027!==l)throw Error("DepthTexture format must be either THREE.DepthFormat or THREE.DepthStencilFormat");void 0===b&&1026===l&&(b=1012);void 0===b&&1027===l&&(b=1020);Oa.call(this,null,d,e,f,g,h,l,b,k);this.image={width:c,height:a};this.magFilter=void 0!==g?g:1003;this.minFilter=void 0!==h?h:1003;this.generateMipmaps=this.flipY=!1}function Rd(c){ka.call(this);this.type="WireframeGeometry";var a=[], +b=[0,0],d={},e=["a","b","c"];if(c&&c.isGeometry){for(var f=c.faces,g=0,h=f.length;gl;l++){var m=k[e[l]],n=k[e[(l+1)%3]];b[0]=Math.min(m,n);b[1]=Math.max(m,n);m=b[0]+","+b[1];void 0===d[m]&&(d[m]={index1:b[0],index2:b[1]})}for(var p in d)b=d[p],f=c.vertices[b.index1],a.push(f.x,f.y,f.z),f=c.vertices[b.index2],a.push(f.x,f.y,f.z)}else if(c&&c.isBufferGeometry)if(p=new w,null!==c.index){e=c.attributes.position;g=c.index;c=c.groups;0===c.length&&(c=[{start:0,count:g.count, +materialIndex:0}]);h=0;for(k=c.length;hn;n++){var t=g.getX(l+n),q=g.getX(l+(n+1)%3);b[0]=Math.min(t,q);b[1]=Math.max(t,q);t=b[0]+","+b[1];void 0===d[t]&&(d[t]={index1:b[0],index2:b[1]})}for(f in d)b=d[f],p.fromBufferAttribute(e,b.index1),a.push(p.x,p.y,p.z),p.fromBufferAttribute(e,b.index2),a.push(p.x,p.y,p.z)}else for(d=c.attributes.position,b=0,f=d.count/3;bc;c++)p.fromBufferAttribute(d,3*b+c),a.push(p.x,p.y,p.z),p.fromBufferAttribute(d, +3*b+(c+1)%3),a.push(p.x,p.y,p.z);this.setAttribute("position",new ea(a,3))}function Ve(c,a,b){sa.call(this);this.type="ParametricGeometry";this.parameters={func:c,slices:a,stacks:b};this.fromBufferGeometry(new Sd(c,a,b));this.mergeVertices()}function Sd(c,a,b){ka.call(this);this.type="ParametricBufferGeometry";this.parameters={func:c,slices:a,stacks:b};var d=[],e=[],f=[],g=[],h=new w,k=new w,l=new w,m=new w,n=new w;3>c.length&&console.error("THREE.ParametricGeometry: Function must now modify a Vector3 as third parameter."); +for(var p=a+1,t=0;t<=b;t++)for(var q=t/b,v=0;v<=a;v++){var u=v/a;c(u,q,k);e.push(k.x,k.y,k.z);0<=u-1E-5?(c(u-1E-5,q,l),m.subVectors(k,l)):(c(u+1E-5,q,l),m.subVectors(l,k));0<=q-1E-5?(c(u,q-1E-5,l),n.subVectors(k,l)):(c(u,q+1E-5,l),n.subVectors(l,k));h.crossVectors(m,n).normalize();f.push(h.x,h.y,h.z);g.push(u,q)}for(c=0;cp&&1===l.x&&(k[m]=l.x-1);0===n.x&&0===n.z&&(k[m]=p/2/Math.PI+.5)}ka.call(this);this.type="PolyhedronBufferGeometry";this.parameters={vertices:c,indices:a, +radius:b,detail:d};b=b||1;d=d||0;var h=[],k=[];(function(l){for(var m=new w,n=new w,p=new w,t=0;tt&&(.2>m&&(k[l+0]+=1),.2>n&&(k[l+2]+=1),.2>p&&(k[l+4]+=1))})();this.setAttribute("position",new ea(h,3));this.setAttribute("normal",new ea(h.slice(),3));this.setAttribute("uv",new ea(k,2));0===d?this.computeVertexNormals():this.normalizeNormals()}function Xe(c, +a){sa.call(this);this.type="TetrahedronGeometry";this.parameters={radius:c,detail:a};this.fromBufferGeometry(new Td(c,a));this.mergeVertices()}function Td(c,a){zb.call(this,[1,1,1,-1,-1,1,-1,1,-1,1,-1,-1],[2,1,0,0,3,2,1,3,0,2,3,1],c,a);this.type="TetrahedronBufferGeometry";this.parameters={radius:c,detail:a}}function Ye(c,a){sa.call(this);this.type="OctahedronGeometry";this.parameters={radius:c,detail:a};this.fromBufferGeometry(new fd(c,a));this.mergeVertices()}function fd(c,a){zb.call(this,[1,0, +0,-1,0,0,0,1,0,0,-1,0,0,0,1,0,0,-1],[0,2,4,0,4,3,0,3,5,0,5,2,1,2,5,1,5,3,1,3,4,1,4,2],c,a);this.type="OctahedronBufferGeometry";this.parameters={radius:c,detail:a}}function Ze(c,a){sa.call(this);this.type="IcosahedronGeometry";this.parameters={radius:c,detail:a};this.fromBufferGeometry(new Ud(c,a));this.mergeVertices()}function Ud(c,a){var b=(1+Math.sqrt(5))/2;zb.call(this,[-1,b,0,1,b,0,-1,-b,0,1,-b,0,0,-1,b,0,1,b,0,-1,-b,0,1,-b,b,0,-1,b,0,1,-b,0,-1,-b,0,1],[0,11,5,0,5,1,0,1,7,0,7,10,0,10,11,1,5, +9,5,11,4,11,10,2,10,7,6,7,1,8,3,9,4,3,4,2,3,2,6,3,6,8,3,8,9,4,9,5,2,4,11,6,2,10,8,6,7,9,8,1],c,a);this.type="IcosahedronBufferGeometry";this.parameters={radius:c,detail:a}}function $e(c,a){sa.call(this);this.type="DodecahedronGeometry";this.parameters={radius:c,detail:a};this.fromBufferGeometry(new Vd(c,a));this.mergeVertices()}function Vd(c,a){var b=(1+Math.sqrt(5))/2,d=1/b;zb.call(this,[-1,-1,-1,-1,-1,1,-1,1,-1,-1,1,1,1,-1,-1,1,-1,1,1,1,-1,1,1,1,0,-d,-b,0,-d,b,0,d,-b,0,d,b,-d,-b,0,-d,b,0,d,-b,0, +d,b,0,-b,0,-d,b,0,-d,-b,0,d,b,0,d],[3,11,7,3,7,15,3,15,13,7,19,17,7,17,6,7,6,15,17,4,8,17,8,10,17,10,6,8,0,16,8,16,2,8,2,10,0,12,1,0,1,18,0,18,16,6,10,2,6,2,13,6,13,15,2,16,18,2,18,3,2,3,13,18,1,9,18,9,11,18,11,3,4,14,12,4,12,0,4,0,8,11,9,5,11,5,19,11,19,7,19,5,14,19,14,4,19,4,17,1,12,14,1,14,5,1,5,9],c,a);this.type="DodecahedronBufferGeometry";this.parameters={radius:c,detail:a}}function af(c,a,b,d,e,f){sa.call(this);this.type="TubeGeometry";this.parameters={path:c,tubularSegments:a,radius:b,radialSegments:d, +closed:e};void 0!==f&&console.warn("THREE.TubeGeometry: taper has been removed.");c=new gd(c,a,b,d,e);this.tangents=c.tangents;this.normals=c.normals;this.binormals=c.binormals;this.fromBufferGeometry(c);this.mergeVertices()}function gd(c,a,b,d,e){function f(v){m=c.getPointAt(v/a,m);var u=g.normals[v];v=g.binormals[v];for(var A=0;A<=d;A++){var B=A/d*Math.PI*2,D=Math.sin(B);B=-Math.cos(B);k.x=B*u.x+D*v.x;k.y=B*u.y+D*v.y;k.z=B*u.z+D*v.z;k.normalize();p.push(k.x,k.y,k.z);h.x=m.x+b*k.x;h.y=m.y+b*k.y; +h.z=m.z+b*k.z;n.push(h.x,h.y,h.z)}}ka.call(this);this.type="TubeBufferGeometry";this.parameters={path:c,tubularSegments:a,radius:b,radialSegments:d,closed:e};a=a||64;b=b||1;d=d||8;e=e||!1;var g=c.computeFrenetFrames(a,e);this.tangents=g.tangents;this.normals=g.normals;this.binormals=g.binormals;var h=new w,k=new w,l=new L,m=new w,n=[],p=[],t=[],q=[];(function(){for(var v=0;v=a;e-=d)f=cj(e,c[e],c[e+1],f);f&&ag(f,f.next)&&(df(f),f=f.next);return f}function Mc(c,a){if(!c)return c;a||(a=c);do{var b=!1;if(c.steiner||!ag(c,c.next)&&0!==ab(c.prev,c,c.next))c=c.next;else{df(c);c=a= +c.prev;if(c===c.next)break;b=!0}}while(b||c!==a);return a}function ef(c,a,b,d,e,f,g){if(c){if(!g&&f){var h=c,k=h;do null===k.z&&(k.z=yh(k.x,k.y,d,e,f)),k.prevZ=k.prev,k=k.nextZ=k.next;while(k!==h);k.prevZ.nextZ=null;k.prevZ=null;h=k;var l,m,n,p,t=1;do{k=h;var q=h=null;for(m=0;k;){m++;var v=k;for(l=n=0;lt!==q.next.y>t&&q.next.y!==q.y&&n<(q.next.x-q.x)*(t-q.y)/(q.next.y-q.y)+q.x&&(m=!m),q=q.next;while(q!==k);q=m}q=q&&(ab(k.prev,k, +v.prev)||ab(k,v.prev,v))||ag(k,v)&&0c.x?e.x>f.x?e.x:f.x:c.x>f.x?c.x:f.x,h=e.y>c.y?e.y>f.y?e.y:f.y:c.y>f.y?c.y:f.y,k=yh(e.x=k&&d&&d.z<=a;){if(b!==c.prev&&b!==c.next&&Yd(e.x,e.y,c.x,c.y,f.x,f.y,b.x,b.y)&&0<=ab(b.prev,b,b.next))return!1;b=b.prevZ;if(d!==c.prev&&d!==c.next&&Yd(e.x,e.y,c.x,c.y,f.x,f.y,d.x,d.y)&&0<=ab(d.prev,d,d.next))return!1;d=d.nextZ}for(;b&&b.z>=k;){if(b!==c.prev&&b!==c.next&&Yd(e.x,e.y,c.x,c.y,f.x,f.y,b.x,b.y)&&0<=ab(b.prev,b,b.next))return!1;b=b.prevZ}for(;d&&d.z<=a;){if(d!==c.prev&&d!==c.next&&Yd(e.x,e.y,c.x,c.y,f.x,f.y,d.x,d.y)&&0<=ab(d.prev,d,d.next))return!1;d=d.nextZ}return!0}function Gl(c, +a){return c.x-a.x}function Hl(c,a){var b=a,d=c.x,e=c.y,f=-Infinity;do{if(e<=b.y&&e>=b.next.y&&b.next.y!==b.y){var g=b.x+(e-b.y)*(b.next.x-b.x)/(b.next.y-b.y);if(g<=d&&g>f){f=g;if(g===d){if(e===b.y)return b;if(e===b.next.y)return b.next}var h=b.x=b.x&&b.x>=g&&d!==b.x&&Yd(eh.x)&&(n=b.x===h.x)){n=h;var p=b;n=0>ab(n.prev,n,p.prev)&&0>ab(p.next,n,n.next)}n&&(h=b,l=m)}b=b.next}while(b!==a);return h}function yh(c,a,b,d,e){c=32767*(c-b)*e;a=32767*(a-d)*e;c=(c|c<<8)&16711935;c=(c|c<<4)&252645135;c=(c|c<<2)&858993459;a=(a|a<<8)&16711935;a=(a|a<<4)&252645135;a=(a|a<<2)&858993459;return(c|c<<1)&1431655765|((a|a<<1)&1431655765)<<1}function Il(c){var a=c,b=c;do{if(a.x=Math.min(c.x,b.x)&&a.y<=Math.max(c.y,b.y)&&a.y>=Math.min(c.y,b.y)}function bg(c){return 0< +c?1:0>c?-1:0}function ff(c,a){return 0>ab(c.prev,c,c.next)?0<=ab(c,a,c.next)&&0<=ab(c,c.prev,a):0>ab(c,a,c.prev)||0>ab(c,c.next,a)}function ej(c,a){var b=new zh(c.i,c.x,c.y),d=new zh(a.i,a.x,a.y),e=c.next,f=a.prev;c.next=a;a.prev=c;b.next=e;e.prev=b;d.next=b;b.prev=d;f.next=d;d.prev=f;return d}function cj(c,a,b,d){c=new zh(c,a,b);d?(c.next=d.next,c.prev=d,d.next.prev=c,d.next=c):(c.prev=c,c.next=c);return c}function df(c){c.next.prev=c.prev;c.prev.next=c.next;c.prevZ&&(c.prevZ.nextZ=c.nextZ);c.nextZ&& +(c.nextZ.prevZ=c.prevZ)}function zh(c,a,b){this.i=c;this.x=a;this.y=b;this.nextZ=this.prevZ=this.z=this.next=this.prev=null;this.steiner=!1}function fj(c){var a=c.length;2Number.EPSILON){var Ra=Math.sqrt(Ka),kb=Math.sqrt(Ea*Ea+Ca*Ca);Ka=la.x-qa/Ra;la=la.y+R/Ra;Ca=((wa.x-Ca/kb-Ka)*Ca-(wa.y+Ea/kb-la)*Ea)/(R*Ca-qa*Ea);Ea=Ka+R*Ca-U.x;R=la+qa*Ca-U.y;qa=Ea*Ea+R*R;if(2>=qa)return new L(Ea,R);qa=Math.sqrt(qa/2)}else U=!1,R>Number.EPSILON?Ea>Number.EPSILON&&(U=!0):R<-Number.EPSILON?Ea<-Number.EPSILON&&(U=!0):Math.sign(qa)=== +Math.sign(Ca)&&(U=!0),U?(Ea=-qa,qa=Math.sqrt(Ka)):(Ea=R,R=qa,qa=Math.sqrt(Ka/2));return new L(Ea/qa,R/qa)}function n(U,la){for(var wa=U.length;0<=--wa;){var R=wa,qa=wa-1;0>qa&&(qa=U.length-1);for(var Ea=0,Ca=B+2*M;Eam;m++){var n=l[f[m]];var p=l[f[(m+1)%3]];d[0]=Math.min(n,p);d[1]=Math.max(n,p);n=d[0]+","+d[1];void 0===e[n]?e[n]={index1:d[0],index2:d[1],face1:h,face2:void 0}:e[n].face2=h}for(n in e)if(d=e[n],void 0===d.face2||g[d.face1].normal.dot(g[d.face2].normal)<=a)f=c[d.index1], +b.push(f.x,f.y,f.z),f=c[d.index2],b.push(f.x,f.y,f.z);this.setAttribute("position",new ea(b,3))}function ld(c,a,b,d,e,f,g,h){sa.call(this);this.type="CylinderGeometry";this.parameters={radiusTop:c,radiusBottom:a,height:b,radialSegments:d,heightSegments:e,openEnded:f,thetaStart:g,thetaLength:h};this.fromBufferGeometry(new oc(c,a,b,d,e,f,g,h));this.mergeVertices()}function oc(c,a,b,d,e,f,g,h){function k(B){for(var D=q,G=new L,I=new w,E=0,H=!0===B?c:a,M=!0===B?1:-1,F=1;F<=d;F++)n.push(0,u*M,0),p.push(0, +M,0),t.push(.5,.5),q++;F=q;for(var K=0;K<=d;K++){var P=K/d*h+g,V=Math.cos(P);P=Math.sin(P);I.x=H*P;I.y=u*M;I.z=H*V;n.push(I.x,I.y,I.z);p.push(0,M,0);G.x=.5*V+.5;G.y=.5*P*M+.5;t.push(G.x,G.y);q++}for(G=0;Gthis.duration&&this.resetDuration()}function Kl(c){switch(c.toLowerCase()){case "scalar":case "double":case "float":case "number":case "integer":return de;case "vector":case "vector2":case "vector3":case "vector4":return ee;case "color":return gg;case "quaternion":return pf;case "bool":case "boolean":return fg;case "string":return ig}throw Error("THREE.KeyframeTrack: Unsupported typeName: "+c);}function Ll(c){if(void 0=== +c.type)throw Error("THREE.KeyframeTrack: track type undefined, can not parse");var a=Kl(c.type);if(void 0===c.times){var b=[],d=[];Va.flattenJSON(c.keys,b,d,"value");c.times=b;c.values=d}return void 0!==a.parse?a.parse(c):new a(c.name,c.times,c.values,c.interpolation)}function Ah(c,a,b){var d=this,e=!1,f=0,g=0,h=void 0,k=[];this.onStart=void 0;this.onLoad=c;this.onProgress=a;this.onError=b;this.itemStart=function(l){g++;if(!1===e&&void 0!==d.onStart)d.onStart(l,f,g);e=!0};this.itemEnd=function(l){f++; +if(void 0!==d.onProgress)d.onProgress(l,f,g);if(f===g&&(e=!1,void 0!==d.onLoad))d.onLoad()};this.itemError=function(l){if(void 0!==d.onError)d.onError(l)};this.resolveURL=function(l){return h?h(l):l};this.setURLModifier=function(l){h=l;return this};this.addHandler=function(l,m){k.push(l,m);return this};this.removeHandler=function(l){l=k.indexOf(l);-1!==l&&k.splice(l,2);return this};this.getHandler=function(l){for(var m=0,n=k.length;mb;b++,d++){var e=b/32*Math.PI*2,f=d/32*Math.PI*2;a.push(Math.cos(e),Math.sin(e),1,Math.cos(f),Math.sin(f),1)}c.setAttribute("position",new ea(a,3));a=new Ya({fog:!1, +toneMapped:!1});this.cone=new Za(c,a);this.add(this.cone);this.update()}function ke(c){for(var a=pj(c),b=new ka,d=[],e=[],f=new S(0,0,1),g=new S(0,1,0),h=0;h\n\n\t\t\tvoid main() {\n\n\t\t\t\tgl_FragColor = vec4( 0.0, 0.0, 0.0, 1.0 );\n\n\t\t\t\tvec3 outputDirection = normalize( vOutputDirection );\n\t\t\t\tvec2 uv = equirectUv( outputDirection );\n\n\t\t\t\tvec2 f = fract( uv / texelSize - 0.5 );\n\t\t\t\tuv -= f * texelSize;\n\t\t\t\tvec3 tl = envMapTexelToLinear( texture2D ( envMap, uv ) ).rgb;\n\t\t\t\tuv.x += texelSize.x;\n\t\t\t\tvec3 tr = envMapTexelToLinear( texture2D ( envMap, uv ) ).rgb;\n\t\t\t\tuv.y += texelSize.y;\n\t\t\t\tvec3 br = envMapTexelToLinear( texture2D ( envMap, uv ) ).rgb;\n\t\t\t\tuv.x -= texelSize.x;\n\t\t\t\tvec3 bl = envMapTexelToLinear( texture2D ( envMap, uv ) ).rgb;\n\n\t\t\t\tvec3 tm = mix( tl, tr, f.x );\n\t\t\t\tvec3 bm = mix( bl, br, f.x );\n\t\t\t\tgl_FragColor.rgb = mix( tm, bm, f.y );\n\n\t\t\t\tgl_FragColor = linearToOutputTexel( gl_FragColor );\n\n\t\t\t}\n\t\t", +blending:0,depthTest:!1,depthWrite:!1})}function sj(){return new pc({name:"CubemapToCubeUV",uniforms:{envMap:{value:null},inputEncoding:{value:hc[3E3]},outputEncoding:{value:hc[3E3]}},vertexShader:Vh(),fragmentShader:"\n\n\t\t\tprecision mediump float;\n\t\t\tprecision mediump int;\n\n\t\t\tvarying vec3 vOutputDirection;\n\n\t\t\tuniform samplerCube envMap;\n\n\t\t\t"+Wh()+"\n\n\t\t\tvoid main() {\n\n\t\t\t\tgl_FragColor = vec4( 0.0, 0.0, 0.0, 1.0 );\n\t\t\t\tgl_FragColor.rgb = envMapTexelToLinear( textureCube( envMap, vec3( - vOutputDirection.x, vOutputDirection.yz ) ) ).rgb;\n\t\t\t\tgl_FragColor = linearToOutputTexel( gl_FragColor );\n\n\t\t\t}\n\t\t", +blending:0,depthTest:!1,depthWrite:!1})}function Vh(){return"\n\n\t\tprecision mediump float;\n\t\tprecision mediump int;\n\n\t\tattribute vec3 position;\n\t\tattribute vec2 uv;\n\t\tattribute float faceIndex;\n\n\t\tvarying vec3 vOutputDirection;\n\n\t\t// RH coordinate system; PMREM face-indexing convention\n\t\tvec3 getDirection( vec2 uv, float face ) {\n\n\t\t\tuv = 2.0 * uv - 1.0;\n\n\t\t\tvec3 direction = vec3( uv, 1.0 );\n\n\t\t\tif ( face == 0.0 ) {\n\n\t\t\t\tdirection = direction.zyx; // ( 1, v, u ) pos x\n\n\t\t\t} else if ( face == 1.0 ) {\n\n\t\t\t\tdirection = direction.xzy;\n\t\t\t\tdirection.xz *= -1.0; // ( -u, 1, -v ) pos y\n\n\t\t\t} else if ( face == 2.0 ) {\n\n\t\t\t\tdirection.x *= -1.0; // ( -u, v, 1 ) pos z\n\n\t\t\t} else if ( face == 3.0 ) {\n\n\t\t\t\tdirection = direction.zyx;\n\t\t\t\tdirection.xz *= -1.0; // ( -1, v, -u ) neg x\n\n\t\t\t} else if ( face == 4.0 ) {\n\n\t\t\t\tdirection = direction.xzy;\n\t\t\t\tdirection.xy *= -1.0; // ( -u, -1, v ) neg y\n\n\t\t\t} else if ( face == 5.0 ) {\n\n\t\t\t\tdirection.z *= -1.0; // ( u, v, -1 ) neg z\n\n\t\t\t}\n\n\t\t\treturn direction;\n\n\t\t}\n\n\t\tvoid main() {\n\n\t\t\tvOutputDirection = getDirection( uv, faceIndex );\n\t\t\tgl_Position = vec4( position, 1.0 );\n\n\t\t}\n\t"} +function Wh(){return"\n\n\t\tuniform int inputEncoding;\n\t\tuniform int outputEncoding;\n\n\t\t#include \n\n\t\tvec4 inputTexelToLinear( vec4 value ) {\n\n\t\t\tif ( inputEncoding == 0 ) {\n\n\t\t\t\treturn value;\n\n\t\t\t} else if ( inputEncoding == 1 ) {\n\n\t\t\t\treturn sRGBToLinear( value );\n\n\t\t\t} else if ( inputEncoding == 2 ) {\n\n\t\t\t\treturn RGBEToLinear( value );\n\n\t\t\t} else if ( inputEncoding == 3 ) {\n\n\t\t\t\treturn RGBMToLinear( value, 7.0 );\n\n\t\t\t} else if ( inputEncoding == 4 ) {\n\n\t\t\t\treturn RGBMToLinear( value, 16.0 );\n\n\t\t\t} else if ( inputEncoding == 5 ) {\n\n\t\t\t\treturn RGBDToLinear( value, 256.0 );\n\n\t\t\t} else {\n\n\t\t\t\treturn GammaToLinear( value, 2.2 );\n\n\t\t\t}\n\n\t\t}\n\n\t\tvec4 linearToOutputTexel( vec4 value ) {\n\n\t\t\tif ( outputEncoding == 0 ) {\n\n\t\t\t\treturn value;\n\n\t\t\t} else if ( outputEncoding == 1 ) {\n\n\t\t\t\treturn LinearTosRGB( value );\n\n\t\t\t} else if ( outputEncoding == 2 ) {\n\n\t\t\t\treturn LinearToRGBE( value );\n\n\t\t\t} else if ( outputEncoding == 3 ) {\n\n\t\t\t\treturn LinearToRGBM( value, 7.0 );\n\n\t\t\t} else if ( outputEncoding == 4 ) {\n\n\t\t\t\treturn LinearToRGBM( value, 16.0 );\n\n\t\t\t} else if ( outputEncoding == 5 ) {\n\n\t\t\t\treturn LinearToRGBD( value, 256.0 );\n\n\t\t\t} else {\n\n\t\t\t\treturn LinearToGamma( value, 2.2 );\n\n\t\t\t}\n\n\t\t}\n\n\t\tvec4 envMapTexelToLinear( vec4 color ) {\n\n\t\t\treturn inputTexelToLinear( color );\n\n\t\t}\n\t"} +function tj(c){console.warn("THREE.ClosedSplineCurve3 has been deprecated. Use THREE.CatmullRomCurve3 instead.");ob.call(this,c);this.type="catmullrom";this.closed=!0}function uj(c){console.warn("THREE.SplineCurve3 has been deprecated. Use THREE.CatmullRomCurve3 instead.");ob.call(this,c);this.type="catmullrom"}function Xh(c){console.warn("THREE.Spline has been removed. Use THREE.CatmullRomCurve3 instead.");ob.call(this,c);this.type="catmullrom"}void 0===Number.EPSILON&&(Number.EPSILON=Math.pow(2, +-52));void 0===Number.isInteger&&(Number.isInteger=function(c){return"number"===typeof c&&isFinite(c)&&Math.floor(c)===c});void 0===Math.sign&&(Math.sign=function(c){return 0>c?-1:0zf;zf++)mb[zf]=(16>zf?"0":"")+zf.toString(16);var Bg=1234567,xa={DEG2RAD:Math.PI/180,RAD2DEG:180/Math.PI,generateUUID:function(){var c=4294967295*Math.random()|0,a=4294967295*Math.random()|0,b= +4294967295*Math.random()|0,d=4294967295*Math.random()|0;return(mb[c&255]+mb[c>>8&255]+mb[c>>16&255]+mb[c>>24&255]+"-"+mb[a&255]+mb[a>>8&255]+"-"+mb[a>>16&15|64]+mb[a>>24&255]+"-"+mb[b&63|128]+mb[b>>8&255]+"-"+mb[b>>16&255]+mb[b>>24&255]+mb[d&255]+mb[d>>8&255]+mb[d>>16&255]+mb[d>>24&255]).toUpperCase()},clamp:function(c,a,b){return Math.max(a,Math.min(b,c))},euclideanModulo:function(c,a){return(c%a+a)%a},mapLinear:function(c,a,b,d,e){return d+(c-a)*(e-d)/(b-a)},lerp:function(c,a,b){return(1-b)*c+b* +a},smoothstep:function(c,a,b){if(c<=a)return 0;if(c>=b)return 1;c=(c-a)/(b-a);return c*c*(3-2*c)},smootherstep:function(c,a,b){if(c<=a)return 0;if(c>=b)return 1;c=(c-a)/(b-a);return c*c*c*(c*(6*c-15)+10)},randInt:function(c,a){return c+Math.floor(Math.random()*(a-c+1))},randFloat:function(c,a){return c+Math.random()*(a-c)},randFloatSpread:function(c){return c*(.5-Math.random())},seededRandom:function(c){void 0!==c&&(Bg=c%2147483647);Bg=16807*Bg%2147483647;return(Bg-1)/2147483646},degToRad:function(c){return c* +xa.DEG2RAD},radToDeg:function(c){return c*xa.RAD2DEG},isPowerOfTwo:function(c){return 0===(c&c-1)&&0!==c},ceilPowerOfTwo:function(c){return Math.pow(2,Math.ceil(Math.log(c)/Math.LN2))},floorPowerOfTwo:function(c){return Math.pow(2,Math.floor(Math.log(c)/Math.LN2))},setQuaternionFromProperEuler:function(c,a,b,d,e){var f=Math.cos,g=Math.sin,h=f(b/2);b=g(b/2);var k=f((a+d)/2),l=g((a+d)/2),m=f((a-d)/2),n=g((a-d)/2);f=f((d-a)/2);a=g((d-a)/2);switch(e){case "XYX":c.set(h*l,b*m,b*n,h*k);break;case "YZY":c.set(b* +n,h*l,b*m,h*k);break;case "ZXZ":c.set(b*m,b*n,h*l,h*k);break;case "XZX":c.set(h*l,b*a,b*f,h*k);break;case "YXY":c.set(b*f,h*l,b*a,h*k);break;case "ZYZ":c.set(b*a,b*f,h*l,h*k);break;default:console.warn("THREE.MathUtils: .setQuaternionFromProperEuler() encountered an unknown order: "+e)}}},L=function(c,a){void 0===c&&(c=0);void 0===a&&(a=0);Object.defineProperty(this,"isVector2",{value:!0});this.x=c;this.y=a},Af={width:{configurable:!0},height:{configurable:!0}};Af.width.get=function(){return this.x}; +Af.width.set=function(c){this.x=c};Af.height.get=function(){return this.y};Af.height.set=function(c){this.y=c};L.prototype.set=function(c,a){this.x=c;this.y=a;return this};L.prototype.setScalar=function(c){this.y=this.x=c;return this};L.prototype.setX=function(c){this.x=c;return this};L.prototype.setY=function(c){this.y=c;return this};L.prototype.setComponent=function(c,a){switch(c){case 0:this.x=a;break;case 1:this.y=a;break;default:throw Error("index is out of range: "+c);}return this};L.prototype.getComponent= +function(c){switch(c){case 0:return this.x;case 1:return this.y;default:throw Error("index is out of range: "+c);}};L.prototype.clone=function(){return new this.constructor(this.x,this.y)};L.prototype.copy=function(c){this.x=c.x;this.y=c.y;return this};L.prototype.add=function(c,a){if(void 0!==a)return console.warn("THREE.Vector2: .add() now only accepts one argument. Use .addVectors( a, b ) instead."),this.addVectors(c,a);this.x+=c.x;this.y+=c.y;return this};L.prototype.addScalar=function(c){this.x+= +c;this.y+=c;return this};L.prototype.addVectors=function(c,a){this.x=c.x+a.x;this.y=c.y+a.y;return this};L.prototype.addScaledVector=function(c,a){this.x+=c.x*a;this.y+=c.y*a;return this};L.prototype.sub=function(c,a){if(void 0!==a)return console.warn("THREE.Vector2: .sub() now only accepts one argument. Use .subVectors( a, b ) instead."),this.subVectors(c,a);this.x-=c.x;this.y-=c.y;return this};L.prototype.subScalar=function(c){this.x-=c;this.y-=c;return this};L.prototype.subVectors=function(c,a){this.x= +c.x-a.x;this.y=c.y-a.y;return this};L.prototype.multiply=function(c){this.x*=c.x;this.y*=c.y;return this};L.prototype.multiplyScalar=function(c){this.x*=c;this.y*=c;return this};L.prototype.divide=function(c){this.x/=c.x;this.y/=c.y;return this};L.prototype.divideScalar=function(c){return this.multiplyScalar(1/c)};L.prototype.applyMatrix3=function(c){var a=this.x,b=this.y;c=c.elements;this.x=c[0]*a+c[3]*b+c[6];this.y=c[1]*a+c[4]*b+c[7];return this};L.prototype.min=function(c){this.x=Math.min(this.x, +c.x);this.y=Math.min(this.y,c.y);return this};L.prototype.max=function(c){this.x=Math.max(this.x,c.x);this.y=Math.max(this.y,c.y);return this};L.prototype.clamp=function(c,a){this.x=Math.max(c.x,Math.min(a.x,this.x));this.y=Math.max(c.y,Math.min(a.y,this.y));return this};L.prototype.clampScalar=function(c,a){this.x=Math.max(c,Math.min(a,this.x));this.y=Math.max(c,Math.min(a,this.y));return this};L.prototype.clampLength=function(c,a){var b=this.length();return this.divideScalar(b||1).multiplyScalar(Math.max(c, +Math.min(a,b)))};L.prototype.floor=function(){this.x=Math.floor(this.x);this.y=Math.floor(this.y);return this};L.prototype.ceil=function(){this.x=Math.ceil(this.x);this.y=Math.ceil(this.y);return this};L.prototype.round=function(){this.x=Math.round(this.x);this.y=Math.round(this.y);return this};L.prototype.roundToZero=function(){this.x=0>this.x?Math.ceil(this.x):Math.floor(this.x);this.y=0>this.y?Math.ceil(this.y):Math.floor(this.y);return this};L.prototype.negate=function(){this.x=-this.x;this.y= +-this.y;return this};L.prototype.dot=function(c){return this.x*c.x+this.y*c.y};L.prototype.cross=function(c){return this.x*c.y-this.y*c.x};L.prototype.lengthSq=function(){return this.x*this.x+this.y*this.y};L.prototype.length=function(){return Math.sqrt(this.x*this.x+this.y*this.y)};L.prototype.manhattanLength=function(){return Math.abs(this.x)+Math.abs(this.y)};L.prototype.normalize=function(){return this.divideScalar(this.length()||1)};L.prototype.angle=function(){return Math.atan2(-this.y,-this.x)+ +Math.PI};L.prototype.distanceTo=function(c){return Math.sqrt(this.distanceToSquared(c))};L.prototype.distanceToSquared=function(c){var a=this.x-c.x;c=this.y-c.y;return a*a+c*c};L.prototype.manhattanDistanceTo=function(c){return Math.abs(this.x-c.x)+Math.abs(this.y-c.y)};L.prototype.setLength=function(c){return this.normalize().multiplyScalar(c)};L.prototype.lerp=function(c,a){this.x+=(c.x-this.x)*a;this.y+=(c.y-this.y)*a;return this};L.prototype.lerpVectors=function(c,a,b){this.x=c.x+(a.x-c.x)*b; +this.y=c.y+(a.y-c.y)*b;return this};L.prototype.equals=function(c){return c.x===this.x&&c.y===this.y};L.prototype.fromArray=function(c,a){void 0===a&&(a=0);this.x=c[a];this.y=c[a+1];return this};L.prototype.toArray=function(c,a){void 0===c&&(c=[]);void 0===a&&(a=0);c[a]=this.x;c[a+1]=this.y;return c};L.prototype.fromBufferAttribute=function(c,a,b){void 0!==b&&console.warn("THREE.Vector2: offset has been removed from .fromBufferAttribute().");this.x=c.getX(a);this.y=c.getY(a);return this};L.prototype.rotateAround= +function(c,a){var b=Math.cos(a);a=Math.sin(a);var d=this.x-c.x,e=this.y-c.y;this.x=d*b-e*a+c.x;this.y=d*a+e*b+c.y;return this};L.prototype.random=function(){this.x=Math.random();this.y=Math.random();return this};Object.defineProperties(L.prototype,Af);var Da=function(){Object.defineProperty(this,"isMatrix3",{value:!0});this.elements=[1,0,0,0,1,0,0,0,1];0b;b++)if(a[b]!==c[b])return!1;return!0};Da.prototype.fromArray=function(c,a){void 0===a&&(a=0);for(var b=0;9>b;b++)this.elements[b]=c[b+a];return this};Da.prototype.toArray=function(c,a){void 0===c&&(c=[]);void 0===a&&(a=0);var b=this.elements;c[a]=b[0];c[a+1]=b[1];c[a+2]=b[2];c[a+3]=b[3];c[a+4]=b[4];c[a+5]=b[5];c[a+6]=b[6];c[a+7]=b[7];c[a+8]=b[8];return c};var oe, +Sc={getDataURL:function(c){if(/^data:/i.test(c.src)||"undefined"==typeof HTMLCanvasElement)return c.src;if(!(c instanceof HTMLCanvasElement)){void 0===oe&&(oe=document.createElementNS("http://www.w3.org/1999/xhtml","canvas"));oe.width=c.width;oe.height=c.height;var a=oe.getContext("2d");c instanceof ImageData?a.putImageData(c,0,0):a.drawImage(c,0,0,c.width,c.height);c=oe}return 2048c.x||1c.x?0:1;break;case 1002:c.x=1===Math.abs(Math.floor(c.x)%2)?Math.ceil(c.x)-c.x:c.x-Math.floor(c.x)}if(0>c.y||1c.y?0:1;break;case 1002:c.y=1===Math.abs(Math.floor(c.y)%2)?Math.ceil(c.y)-c.y:c.y-Math.floor(c.y)}this.flipY&&(c.y=1-c.y);return c}});Object.defineProperty(Oa.prototype,"needsUpdate",{set:function(c){!0===c&&this.version++}});var ca= +function(c,a,b,d){void 0===c&&(c=0);void 0===a&&(a=0);void 0===b&&(b=0);void 0===d&&(d=1);Object.defineProperty(this,"isVector4",{value:!0});this.x=c;this.y=a;this.z=b;this.w=d},Bf={width:{configurable:!0},height:{configurable:!0}};Bf.width.get=function(){return this.z};Bf.width.set=function(c){this.z=c};Bf.height.get=function(){return this.w};Bf.height.set=function(c){this.w=c};ca.prototype.set=function(c,a,b,d){this.x=c;this.y=a;this.z=b;this.w=d;return this};ca.prototype.setScalar=function(c){this.w= +this.z=this.y=this.x=c;return this};ca.prototype.setX=function(c){this.x=c;return this};ca.prototype.setY=function(c){this.y=c;return this};ca.prototype.setZ=function(c){this.z=c;return this};ca.prototype.setW=function(c){this.w=c;return this};ca.prototype.setComponent=function(c,a){switch(c){case 0:this.x=a;break;case 1:this.y=a;break;case 2:this.z=a;break;case 3:this.w=a;break;default:throw Error("index is out of range: "+c);}return this};ca.prototype.getComponent=function(c){switch(c){case 0:return this.x; +case 1:return this.y;case 2:return this.z;case 3:return this.w;default:throw Error("index is out of range: "+c);}};ca.prototype.clone=function(){return new this.constructor(this.x,this.y,this.z,this.w)};ca.prototype.copy=function(c){this.x=c.x;this.y=c.y;this.z=c.z;this.w=void 0!==c.w?c.w:1;return this};ca.prototype.add=function(c,a){if(void 0!==a)return console.warn("THREE.Vector4: .add() now only accepts one argument. Use .addVectors( a, b ) instead."),this.addVectors(c,a);this.x+=c.x;this.y+=c.y; +this.z+=c.z;this.w+=c.w;return this};ca.prototype.addScalar=function(c){this.x+=c;this.y+=c;this.z+=c;this.w+=c;return this};ca.prototype.addVectors=function(c,a){this.x=c.x+a.x;this.y=c.y+a.y;this.z=c.z+a.z;this.w=c.w+a.w;return this};ca.prototype.addScaledVector=function(c,a){this.x+=c.x*a;this.y+=c.y*a;this.z+=c.z*a;this.w+=c.w*a;return this};ca.prototype.sub=function(c,a){if(void 0!==a)return console.warn("THREE.Vector4: .sub() now only accepts one argument. Use .subVectors( a, b ) instead."), +this.subVectors(c,a);this.x-=c.x;this.y-=c.y;this.z-=c.z;this.w-=c.w;return this};ca.prototype.subScalar=function(c){this.x-=c;this.y-=c;this.z-=c;this.w-=c;return this};ca.prototype.subVectors=function(c,a){this.x=c.x-a.x;this.y=c.y-a.y;this.z=c.z-a.z;this.w=c.w-a.w;return this};ca.prototype.multiplyScalar=function(c){this.x*=c;this.y*=c;this.z*=c;this.w*=c;return this};ca.prototype.applyMatrix4=function(c){var a=this.x,b=this.y,d=this.z,e=this.w;c=c.elements;this.x=c[0]*a+c[4]*b+c[8]*d+c[12]*e; +this.y=c[1]*a+c[5]*b+c[9]*d+c[13]*e;this.z=c[2]*a+c[6]*b+c[10]*d+c[14]*e;this.w=c[3]*a+c[7]*b+c[11]*d+c[15]*e;return this};ca.prototype.divideScalar=function(c){return this.multiplyScalar(1/c)};ca.prototype.setAxisAngleFromQuaternion=function(c){this.w=2*Math.acos(c.w);var a=Math.sqrt(1-c.w*c.w);1E-4>a?(this.x=1,this.z=this.y=0):(this.x=c.x/a,this.y=c.y/a,this.z=c.z/a);return this};ca.prototype.setAxisAngleFromRotationMatrix=function(c){c=c.elements;var a=c[0];var b=c[4];var d=c[8],e=c[1],f=c[5], +g=c[9];var h=c[2];var k=c[6];var l=c[10];if(.01>Math.abs(b-e)&&.01>Math.abs(d-h)&&.01>Math.abs(g-k)){if(.1>Math.abs(b+e)&&.1>Math.abs(d+h)&&.1>Math.abs(g+k)&&.1>Math.abs(a+f+l-3))return this.set(1,0,0,0),this;c=Math.PI;a=(a+1)/2;f=(f+1)/2;l=(l+1)/2;b=(b+e)/4;d=(d+h)/4;g=(g+k)/4;a>f&&a>l?.01>a?(k=0,b=h=.707106781):(k=Math.sqrt(a),h=b/k,b=d/k):f>l?.01>f?(k=.707106781,h=0,b=.707106781):(h=Math.sqrt(f),k=b/h,b=g/h):.01>l?(h=k=.707106781,b=0):(b=Math.sqrt(l),k=d/b,h=g/b);this.set(k,h,b,c);return this}c= +Math.sqrt((k-g)*(k-g)+(d-h)*(d-h)+(e-b)*(e-b));.001>Math.abs(c)&&(c=1);this.x=(k-g)/c;this.y=(d-h)/c;this.z=(e-b)/c;this.w=Math.acos((a+f+l-1)/2);return this};ca.prototype.min=function(c){this.x=Math.min(this.x,c.x);this.y=Math.min(this.y,c.y);this.z=Math.min(this.z,c.z);this.w=Math.min(this.w,c.w);return this};ca.prototype.max=function(c){this.x=Math.max(this.x,c.x);this.y=Math.max(this.y,c.y);this.z=Math.max(this.z,c.z);this.w=Math.max(this.w,c.w);return this};ca.prototype.clamp=function(c,a){this.x= +Math.max(c.x,Math.min(a.x,this.x));this.y=Math.max(c.y,Math.min(a.y,this.y));this.z=Math.max(c.z,Math.min(a.z,this.z));this.w=Math.max(c.w,Math.min(a.w,this.w));return this};ca.prototype.clampScalar=function(c,a){this.x=Math.max(c,Math.min(a,this.x));this.y=Math.max(c,Math.min(a,this.y));this.z=Math.max(c,Math.min(a,this.z));this.w=Math.max(c,Math.min(a,this.w));return this};ca.prototype.clampLength=function(c,a){var b=this.length();return this.divideScalar(b||1).multiplyScalar(Math.max(c,Math.min(a, +b)))};ca.prototype.floor=function(){this.x=Math.floor(this.x);this.y=Math.floor(this.y);this.z=Math.floor(this.z);this.w=Math.floor(this.w);return this};ca.prototype.ceil=function(){this.x=Math.ceil(this.x);this.y=Math.ceil(this.y);this.z=Math.ceil(this.z);this.w=Math.ceil(this.w);return this};ca.prototype.round=function(){this.x=Math.round(this.x);this.y=Math.round(this.y);this.z=Math.round(this.z);this.w=Math.round(this.w);return this};ca.prototype.roundToZero=function(){this.x=0>this.x?Math.ceil(this.x): +Math.floor(this.x);this.y=0>this.y?Math.ceil(this.y):Math.floor(this.y);this.z=0>this.z?Math.ceil(this.z):Math.floor(this.z);this.w=0>this.w?Math.ceil(this.w):Math.floor(this.w);return this};ca.prototype.negate=function(){this.x=-this.x;this.y=-this.y;this.z=-this.z;this.w=-this.w;return this};ca.prototype.dot=function(c){return this.x*c.x+this.y*c.y+this.z*c.z+this.w*c.w};ca.prototype.lengthSq=function(){return this.x*this.x+this.y*this.y+this.z*this.z+this.w*this.w};ca.prototype.length=function(){return Math.sqrt(this.x* +this.x+this.y*this.y+this.z*this.z+this.w*this.w)};ca.prototype.manhattanLength=function(){return Math.abs(this.x)+Math.abs(this.y)+Math.abs(this.z)+Math.abs(this.w)};ca.prototype.normalize=function(){return this.divideScalar(this.length()||1)};ca.prototype.setLength=function(c){return this.normalize().multiplyScalar(c)};ca.prototype.lerp=function(c,a){this.x+=(c.x-this.x)*a;this.y+=(c.y-this.y)*a;this.z+=(c.z-this.z)*a;this.w+=(c.w-this.w)*a;return this};ca.prototype.lerpVectors=function(c,a,b){this.x= +c.x+(a.x-c.x)*b;this.y=c.y+(a.y-c.y)*b;this.z=c.z+(a.z-c.z)*b;this.w=c.w+(a.w-c.w)*b;return this};ca.prototype.equals=function(c){return c.x===this.x&&c.y===this.y&&c.z===this.z&&c.w===this.w};ca.prototype.fromArray=function(c,a){void 0===a&&(a=0);this.x=c[a];this.y=c[a+1];this.z=c[a+2];this.w=c[a+3];return this};ca.prototype.toArray=function(c,a){void 0===c&&(c=[]);void 0===a&&(a=0);c[a]=this.x;c[a+1]=this.y;c[a+2]=this.z;c[a+3]=this.w;return c};ca.prototype.fromBufferAttribute=function(c,a,b){void 0!== +b&&console.warn("THREE.Vector4: offset has been removed from .fromBufferAttribute().");this.x=c.getX(a);this.y=c.getY(a);this.z=c.getZ(a);this.w=c.getW(a);return this};ca.prototype.random=function(){this.x=Math.random();this.y=Math.random();this.z=Math.random();this.w=Math.random();return this};Object.defineProperties(ca.prototype,Bf);Db.prototype=Object.assign(Object.create(wb.prototype),{constructor:Db,isWebGLRenderTarget:!0,setSize:function(c,a){if(this.width!==c||this.height!==a)this.width=c, +this.height=a,this.texture.image.width=c,this.texture.image.height=a,this.dispose();this.viewport.set(0,0,c,a);this.scissor.set(0,0,c,a)},clone:function(){return(new this.constructor).copy(this)},copy:function(c){this.width=c.width;this.height=c.height;this.viewport.copy(c.viewport);this.texture=c.texture.clone();this.depthBuffer=c.depthBuffer;this.stencilBuffer=c.stencilBuffer;this.depthTexture=c.depthTexture;return this},dispose:function(){this.dispatchEvent({type:"dispose"})}});dh.prototype=Object.assign(Object.create(Db.prototype), +{constructor:dh,isWebGLMultisampleRenderTarget:!0,copy:function(c){Db.prototype.copy.call(this,c);this.samples=c.samples;return this}});var ua=function(c,a,b,d){void 0===c&&(c=0);void 0===a&&(a=0);void 0===b&&(b=0);void 0===d&&(d=1);Object.defineProperty(this,"isQuaternion",{value:!0});this._x=c;this._y=a;this._z=b;this._w=d},rc={x:{configurable:!0},y:{configurable:!0},z:{configurable:!0},w:{configurable:!0}};ua.slerp=function(c,a,b,d){return b.copy(c).slerp(a,d)};ua.slerpFlat=function(c,a,b,d,e, +f,g){var h=b[d+0],k=b[d+1],l=b[d+2];b=b[d+3];d=e[f+0];var m=e[f+1],n=e[f+2];e=e[f+3];if(b!==e||h!==d||k!==m||l!==n){f=1-g;var p=h*d+k*m+l*n+b*e,t=0<=p?1:-1,q=1-p*p;q>Number.EPSILON&&(q=Math.sqrt(q),p=Math.atan2(q,p*t),f=Math.sin(f*p)/q,g=Math.sin(g*p)/q);t*=g;h=h*f+d*t;k=k*f+m*t;l=l*f+n*t;b=b*f+e*t;f===1-g&&(g=1/Math.sqrt(h*h+k*k+l*l+b*b),h*=g,k*=g,l*=g,b*=g)}c[a]=h;c[a+1]=k;c[a+2]=l;c[a+3]=b};ua.multiplyQuaternionsFlat=function(c,a,b,d,e,f){var g=b[d],h=b[d+1],k=b[d+2];b=b[d+3];d=e[f];var l=e[f+ +1],m=e[f+2];e=e[f+3];c[a]=g*e+b*d+h*m-k*l;c[a+1]=h*e+b*l+k*d-g*m;c[a+2]=k*e+b*m+g*l-h*d;c[a+3]=b*e-g*d-h*l-k*m;return c};rc.x.get=function(){return this._x};rc.x.set=function(c){this._x=c;this._onChangeCallback()};rc.y.get=function(){return this._y};rc.y.set=function(c){this._y=c;this._onChangeCallback()};rc.z.get=function(){return this._z};rc.z.set=function(c){this._z=c;this._onChangeCallback()};rc.w.get=function(){return this._w};rc.w.set=function(c){this._w=c;this._onChangeCallback()};ua.prototype.set= +function(c,a,b,d){this._x=c;this._y=a;this._z=b;this._w=d;this._onChangeCallback();return this};ua.prototype.clone=function(){return new this.constructor(this._x,this._y,this._z,this._w)};ua.prototype.copy=function(c){this._x=c.x;this._y=c.y;this._z=c.z;this._w=c.w;this._onChangeCallback();return this};ua.prototype.setFromEuler=function(c,a){if(!c||!c.isEuler)throw Error("THREE.Quaternion: .setFromEuler() now expects an Euler rotation rather than a Vector3 and order.");var b=c._x,d=c._y,e=c._z;c= +c._order;var f=Math.cos,g=Math.sin,h=f(b/2),k=f(d/2);f=f(e/2);b=g(b/2);d=g(d/2);e=g(e/2);switch(c){case "XYZ":this._x=b*k*f+h*d*e;this._y=h*d*f-b*k*e;this._z=h*k*e+b*d*f;this._w=h*k*f-b*d*e;break;case "YXZ":this._x=b*k*f+h*d*e;this._y=h*d*f-b*k*e;this._z=h*k*e-b*d*f;this._w=h*k*f+b*d*e;break;case "ZXY":this._x=b*k*f-h*d*e;this._y=h*d*f+b*k*e;this._z=h*k*e+b*d*f;this._w=h*k*f-b*d*e;break;case "ZYX":this._x=b*k*f-h*d*e;this._y=h*d*f+b*k*e;this._z=h*k*e-b*d*f;this._w=h*k*f+b*d*e;break;case "YZX":this._x= +b*k*f+h*d*e;this._y=h*d*f+b*k*e;this._z=h*k*e-b*d*f;this._w=h*k*f-b*d*e;break;case "XZY":this._x=b*k*f-h*d*e;this._y=h*d*f-b*k*e;this._z=h*k*e+b*d*f;this._w=h*k*f+b*d*e;break;default:console.warn("THREE.Quaternion: .setFromEuler() encountered an unknown order: "+c)}!1!==a&&this._onChangeCallback();return this};ua.prototype.setFromAxisAngle=function(c,a){a/=2;var b=Math.sin(a);this._x=c.x*b;this._y=c.y*b;this._z=c.z*b;this._w=Math.cos(a);this._onChangeCallback();return this};ua.prototype.setFromRotationMatrix= +function(c){var a=c.elements,b=a[0];c=a[4];var d=a[8],e=a[1],f=a[5],g=a[9],h=a[2],k=a[6];a=a[10];var l=b+f+a;0f&&b>a?(b=2*Math.sqrt(1+b-f-a),this._w=(k-g)/b,this._x=.25*b,this._y=(c+e)/b,this._z=(d+h)/b):f>a?(b=2*Math.sqrt(1+f-b-a),this._w=(d-h)/b,this._x=(c+e)/b,this._y=.25*b,this._z=(g+k)/b):(b=2*Math.sqrt(1+a-b-f),this._w=(e-c)/b,this._x=(d+h)/b,this._y=(g+k)/b,this._z=.25*b);this._onChangeCallback();return this}; +ua.prototype.setFromUnitVectors=function(c,a){var b=c.dot(a)+1;1E-6>b?(b=0,Math.abs(c.x)>Math.abs(c.z)?(this._x=-c.y,this._y=c.x,this._z=0):(this._x=0,this._y=-c.z,this._z=c.y)):(this._x=c.y*a.z-c.z*a.y,this._y=c.z*a.x-c.x*a.z,this._z=c.x*a.y-c.y*a.x);this._w=b;return this.normalize()};ua.prototype.angleTo=function(c){return 2*Math.acos(Math.abs(xa.clamp(this.dot(c),-1,1)))};ua.prototype.rotateTowards=function(c,a){var b=this.angleTo(c);if(0===b)return this;this.slerp(c,Math.min(1,a/b));return this}; +ua.prototype.identity=function(){return this.set(0,0,0,1)};ua.prototype.inverse=function(){return this.conjugate()};ua.prototype.conjugate=function(){this._x*=-1;this._y*=-1;this._z*=-1;this._onChangeCallback();return this};ua.prototype.dot=function(c){return this._x*c._x+this._y*c._y+this._z*c._z+this._w*c._w};ua.prototype.lengthSq=function(){return this._x*this._x+this._y*this._y+this._z*this._z+this._w*this._w};ua.prototype.length=function(){return Math.sqrt(this._x*this._x+this._y*this._y+this._z* +this._z+this._w*this._w)};ua.prototype.normalize=function(){var c=this.length();0===c?(this._z=this._y=this._x=0,this._w=1):(c=1/c,this._x*=c,this._y*=c,this._z*=c,this._w*=c);this._onChangeCallback();return this};ua.prototype.multiply=function(c,a){return void 0!==a?(console.warn("THREE.Quaternion: .multiply() now only accepts one argument. Use .multiplyQuaternions( a, b ) instead."),this.multiplyQuaternions(c,a)):this.multiplyQuaternions(this,c)};ua.prototype.premultiply=function(c){return this.multiplyQuaternions(c, +this)};ua.prototype.multiplyQuaternions=function(c,a){var b=c._x,d=c._y,e=c._z;c=c._w;var f=a._x,g=a._y,h=a._z;a=a._w;this._x=b*a+c*f+d*h-e*g;this._y=d*a+c*g+e*f-b*h;this._z=e*a+c*h+b*g-d*f;this._w=c*a-b*f-d*g-e*h;this._onChangeCallback();return this};ua.prototype.slerp=function(c,a){if(0===a)return this;if(1===a)return this.copy(c);var b=this._x,d=this._y,e=this._z,f=this._w,g=f*c._w+b*c._x+d*c._y+e*c._z;0>g?(this._w=-c._w,this._x=-c._x,this._y=-c._y,this._z=-c._z,g=-g):this.copy(c);if(1<=g)return this._w= +f,this._x=b,this._y=d,this._z=e,this;c=1-g*g;if(c<=Number.EPSILON)return g=1-a,this._w=g*f+a*this._w,this._x=g*b+a*this._x,this._y=g*d+a*this._y,this._z=g*e+a*this._z,this.normalize(),this._onChangeCallback(),this;c=Math.sqrt(c);var h=Math.atan2(c,g);g=Math.sin((1-a)*h)/c;a=Math.sin(a*h)/c;this._w=f*g+this._w*a;this._x=b*g+this._x*a;this._y=d*g+this._y*a;this._z=e*g+this._z*a;this._onChangeCallback();return this};ua.prototype.equals=function(c){return c._x===this._x&&c._y===this._y&&c._z===this._z&& +c._w===this._w};ua.prototype.fromArray=function(c,a){void 0===a&&(a=0);this._x=c[a];this._y=c[a+1];this._z=c[a+2];this._w=c[a+3];this._onChangeCallback();return this};ua.prototype.toArray=function(c,a){void 0===c&&(c=[]);void 0===a&&(a=0);c[a]=this._x;c[a+1]=this._y;c[a+2]=this._z;c[a+3]=this._w;return c};ua.prototype.fromBufferAttribute=function(c,a){this._x=c.getX(a);this._y=c.getY(a);this._z=c.getZ(a);this._w=c.getW(a);return this};ua.prototype._onChange=function(c){this._onChangeCallback=c;return this}; +ua.prototype._onChangeCallback=function(){};Object.defineProperties(ua.prototype,rc);var w=function(c,a,b){void 0===c&&(c=0);void 0===a&&(a=0);void 0===b&&(b=0);Object.defineProperty(this,"isVector3",{value:!0});this.x=c;this.y=a;this.z=b};w.prototype.set=function(c,a,b){void 0===b&&(b=this.z);this.x=c;this.y=a;this.z=b;return this};w.prototype.setScalar=function(c){this.z=this.y=this.x=c;return this};w.prototype.setX=function(c){this.x=c;return this};w.prototype.setY=function(c){this.y=c;return this}; +w.prototype.setZ=function(c){this.z=c;return this};w.prototype.setComponent=function(c,a){switch(c){case 0:this.x=a;break;case 1:this.y=a;break;case 2:this.z=a;break;default:throw Error("index is out of range: "+c);}return this};w.prototype.getComponent=function(c){switch(c){case 0:return this.x;case 1:return this.y;case 2:return this.z;default:throw Error("index is out of range: "+c);}};w.prototype.clone=function(){return new this.constructor(this.x,this.y,this.z)};w.prototype.copy=function(c){this.x= +c.x;this.y=c.y;this.z=c.z;return this};w.prototype.add=function(c,a){if(void 0!==a)return console.warn("THREE.Vector3: .add() now only accepts one argument. Use .addVectors( a, b ) instead."),this.addVectors(c,a);this.x+=c.x;this.y+=c.y;this.z+=c.z;return this};w.prototype.addScalar=function(c){this.x+=c;this.y+=c;this.z+=c;return this};w.prototype.addVectors=function(c,a){this.x=c.x+a.x;this.y=c.y+a.y;this.z=c.z+a.z;return this};w.prototype.addScaledVector=function(c,a){this.x+=c.x*a;this.y+=c.y* +a;this.z+=c.z*a;return this};w.prototype.sub=function(c,a){if(void 0!==a)return console.warn("THREE.Vector3: .sub() now only accepts one argument. Use .subVectors( a, b ) instead."),this.subVectors(c,a);this.x-=c.x;this.y-=c.y;this.z-=c.z;return this};w.prototype.subScalar=function(c){this.x-=c;this.y-=c;this.z-=c;return this};w.prototype.subVectors=function(c,a){this.x=c.x-a.x;this.y=c.y-a.y;this.z=c.z-a.z;return this};w.prototype.multiply=function(c,a){if(void 0!==a)return console.warn("THREE.Vector3: .multiply() now only accepts one argument. Use .multiplyVectors( a, b ) instead."), +this.multiplyVectors(c,a);this.x*=c.x;this.y*=c.y;this.z*=c.z;return this};w.prototype.multiplyScalar=function(c){this.x*=c;this.y*=c;this.z*=c;return this};w.prototype.multiplyVectors=function(c,a){this.x=c.x*a.x;this.y=c.y*a.y;this.z=c.z*a.z;return this};w.prototype.applyEuler=function(c){c&&c.isEuler||console.error("THREE.Vector3: .applyEuler() now expects an Euler rotation rather than a Vector3 and order.");return this.applyQuaternion(vj.setFromEuler(c))};w.prototype.applyAxisAngle=function(c, +a){return this.applyQuaternion(vj.setFromAxisAngle(c,a))};w.prototype.applyMatrix3=function(c){var a=this.x,b=this.y,d=this.z;c=c.elements;this.x=c[0]*a+c[3]*b+c[6]*d;this.y=c[1]*a+c[4]*b+c[7]*d;this.z=c[2]*a+c[5]*b+c[8]*d;return this};w.prototype.applyNormalMatrix=function(c){return this.applyMatrix3(c).normalize()};w.prototype.applyMatrix4=function(c){var a=this.x,b=this.y,d=this.z;c=c.elements;var e=1/(c[3]*a+c[7]*b+c[11]*d+c[15]);this.x=(c[0]*a+c[4]*b+c[8]*d+c[12])*e;this.y=(c[1]*a+c[5]*b+c[9]* +d+c[13])*e;this.z=(c[2]*a+c[6]*b+c[10]*d+c[14])*e;return this};w.prototype.applyQuaternion=function(c){var a=this.x,b=this.y,d=this.z,e=c.x,f=c.y,g=c.z;c=c.w;var h=c*a+f*d-g*b,k=c*b+g*a-e*d,l=c*d+e*b-f*a;a=-e*a-f*b-g*d;this.x=h*c+a*-e+k*-g-l*-f;this.y=k*c+a*-f+l*-e-h*-g;this.z=l*c+a*-g+h*-f-k*-e;return this};w.prototype.project=function(c){return this.applyMatrix4(c.matrixWorldInverse).applyMatrix4(c.projectionMatrix)};w.prototype.unproject=function(c){return this.applyMatrix4(c.projectionMatrixInverse).applyMatrix4(c.matrixWorld)}; +w.prototype.transformDirection=function(c){var a=this.x,b=this.y,d=this.z;c=c.elements;this.x=c[0]*a+c[4]*b+c[8]*d;this.y=c[1]*a+c[5]*b+c[9]*d;this.z=c[2]*a+c[6]*b+c[10]*d;return this.normalize()};w.prototype.divide=function(c){this.x/=c.x;this.y/=c.y;this.z/=c.z;return this};w.prototype.divideScalar=function(c){return this.multiplyScalar(1/c)};w.prototype.min=function(c){this.x=Math.min(this.x,c.x);this.y=Math.min(this.y,c.y);this.z=Math.min(this.z,c.z);return this};w.prototype.max=function(c){this.x= +Math.max(this.x,c.x);this.y=Math.max(this.y,c.y);this.z=Math.max(this.z,c.z);return this};w.prototype.clamp=function(c,a){this.x=Math.max(c.x,Math.min(a.x,this.x));this.y=Math.max(c.y,Math.min(a.y,this.y));this.z=Math.max(c.z,Math.min(a.z,this.z));return this};w.prototype.clampScalar=function(c,a){this.x=Math.max(c,Math.min(a,this.x));this.y=Math.max(c,Math.min(a,this.y));this.z=Math.max(c,Math.min(a,this.z));return this};w.prototype.clampLength=function(c,a){var b=this.length();return this.divideScalar(b|| +1).multiplyScalar(Math.max(c,Math.min(a,b)))};w.prototype.floor=function(){this.x=Math.floor(this.x);this.y=Math.floor(this.y);this.z=Math.floor(this.z);return this};w.prototype.ceil=function(){this.x=Math.ceil(this.x);this.y=Math.ceil(this.y);this.z=Math.ceil(this.z);return this};w.prototype.round=function(){this.x=Math.round(this.x);this.y=Math.round(this.y);this.z=Math.round(this.z);return this};w.prototype.roundToZero=function(){this.x=0>this.x?Math.ceil(this.x):Math.floor(this.x);this.y=0>this.y? +Math.ceil(this.y):Math.floor(this.y);this.z=0>this.z?Math.ceil(this.z):Math.floor(this.z);return this};w.prototype.negate=function(){this.x=-this.x;this.y=-this.y;this.z=-this.z;return this};w.prototype.dot=function(c){return this.x*c.x+this.y*c.y+this.z*c.z};w.prototype.lengthSq=function(){return this.x*this.x+this.y*this.y+this.z*this.z};w.prototype.length=function(){return Math.sqrt(this.x*this.x+this.y*this.y+this.z*this.z)};w.prototype.manhattanLength=function(){return Math.abs(this.x)+Math.abs(this.y)+ +Math.abs(this.z)};w.prototype.normalize=function(){return this.divideScalar(this.length()||1)};w.prototype.setLength=function(c){return this.normalize().multiplyScalar(c)};w.prototype.lerp=function(c,a){this.x+=(c.x-this.x)*a;this.y+=(c.y-this.y)*a;this.z+=(c.z-this.z)*a;return this};w.prototype.lerpVectors=function(c,a,b){this.x=c.x+(a.x-c.x)*b;this.y=c.y+(a.y-c.y)*b;this.z=c.z+(a.z-c.z)*b;return this};w.prototype.cross=function(c,a){return void 0!==a?(console.warn("THREE.Vector3: .cross() now only accepts one argument. Use .crossVectors( a, b ) instead."), +this.crossVectors(c,a)):this.crossVectors(this,c)};w.prototype.crossVectors=function(c,a){var b=c.x,d=c.y;c=c.z;var e=a.x,f=a.y;a=a.z;this.x=d*a-c*f;this.y=c*e-b*a;this.z=b*f-d*e;return this};w.prototype.projectOnVector=function(c){var a=c.lengthSq();if(0===a)return this.set(0,0,0);a=c.dot(this)/a;return this.copy(c).multiplyScalar(a)};w.prototype.projectOnPlane=function(c){Yh.copy(this).projectOnVector(c);return this.sub(Yh)};w.prototype.reflect=function(c){return this.sub(Yh.copy(c).multiplyScalar(2* +this.dot(c)))};w.prototype.angleTo=function(c){var a=Math.sqrt(this.lengthSq()*c.lengthSq());if(0===a)return Math.PI/2;c=this.dot(c)/a;return Math.acos(xa.clamp(c,-1,1))};w.prototype.distanceTo=function(c){return Math.sqrt(this.distanceToSquared(c))};w.prototype.distanceToSquared=function(c){var a=this.x-c.x,b=this.y-c.y;c=this.z-c.z;return a*a+b*b+c*c};w.prototype.manhattanDistanceTo=function(c){return Math.abs(this.x-c.x)+Math.abs(this.y-c.y)+Math.abs(this.z-c.z)};w.prototype.setFromSpherical=function(c){return this.setFromSphericalCoords(c.radius, +c.phi,c.theta)};w.prototype.setFromSphericalCoords=function(c,a,b){var d=Math.sin(a)*c;this.x=d*Math.sin(b);this.y=Math.cos(a)*c;this.z=d*Math.cos(b);return this};w.prototype.setFromCylindrical=function(c){return this.setFromCylindricalCoords(c.radius,c.theta,c.y)};w.prototype.setFromCylindricalCoords=function(c,a,b){this.x=c*Math.sin(a);this.y=b;this.z=c*Math.cos(a);return this};w.prototype.setFromMatrixPosition=function(c){c=c.elements;this.x=c[12];this.y=c[13];this.z=c[14];return this};w.prototype.setFromMatrixScale= +function(c){var a=this.setFromMatrixColumn(c,0).length(),b=this.setFromMatrixColumn(c,1).length();c=this.setFromMatrixColumn(c,2).length();this.x=a;this.y=b;this.z=c;return this};w.prototype.setFromMatrixColumn=function(c,a){return this.fromArray(c.elements,4*a)};w.prototype.setFromMatrix3Column=function(c,a){return this.fromArray(c.elements,3*a)};w.prototype.equals=function(c){return c.x===this.x&&c.y===this.y&&c.z===this.z};w.prototype.fromArray=function(c,a){void 0===a&&(a=0);this.x=c[a];this.y= +c[a+1];this.z=c[a+2];return this};w.prototype.toArray=function(c,a){void 0===c&&(c=[]);void 0===a&&(a=0);c[a]=this.x;c[a+1]=this.y;c[a+2]=this.z;return c};w.prototype.fromBufferAttribute=function(c,a,b){void 0!==b&&console.warn("THREE.Vector3: offset has been removed from .fromBufferAttribute().");this.x=c.getX(a);this.y=c.getY(a);this.z=c.getZ(a);return this};w.prototype.random=function(){this.x=Math.random();this.y=Math.random();this.z=Math.random();return this};var Yh=new w,vj=new ua,za=function(c, +a){Object.defineProperty(this,"isBox3",{value:!0});this.min=void 0!==c?c:new w(Infinity,Infinity,Infinity);this.max=void 0!==a?a:new w(-Infinity,-Infinity,-Infinity)};za.prototype.set=function(c,a){this.min.copy(c);this.max.copy(a);return this};za.prototype.setFromArray=function(c){for(var a=Infinity,b=Infinity,d=Infinity,e=-Infinity,f=-Infinity,g=-Infinity,h=0,k=c.length;he&&(e=l);m>f&&(f=m);n>g&&(g=n)}this.min.set(a,b,d);this.max.set(e, +f,g);return this};za.prototype.setFromBufferAttribute=function(c){for(var a=Infinity,b=Infinity,d=Infinity,e=-Infinity,f=-Infinity,g=-Infinity,h=0,k=c.count;he&&(e=l);m>f&&(f=m);n>g&&(g=n)}this.min.set(a,b,d);this.max.set(e,f,g);return this};za.prototype.setFromPoints=function(c){this.makeEmpty();for(var a=0,b=c.length;athis.max.x||c.ythis.max.y||c.zthis.max.z?!1:!0};za.prototype.containsBox=function(c){return this.min.x<=c.min.x&&c.max.x<=this.max.x&&this.min.y<=c.min.y&&c.max.y<=this.max.y&&this.min.z<=c.min.z&&c.max.z<=this.max.z};za.prototype.getParameter=function(c,a){void 0===a&&(console.warn("THREE.Box3: .getParameter() target is now required"),a=new w);return a.set((c.x-this.min.x)/(this.max.x-this.min.x),(c.y-this.min.y)/(this.max.y- +this.min.y),(c.z-this.min.z)/(this.max.z-this.min.z))};za.prototype.intersectsBox=function(c){return c.max.xthis.max.x||c.max.ythis.max.y||c.max.zthis.max.z?!1:!0};za.prototype.intersectsSphere=function(c){this.clampPoint(c.center,Cf);return Cf.distanceToSquared(c.center)<=c.radius*c.radius};za.prototype.intersectsPlane=function(c){if(0=-c.constant};za.prototype.intersectsTriangle=function(c){if(this.isEmpty())return!1;this.getCenter(Df);Cg.subVectors(this.max,Df);pe.subVectors(c.a,Df);qe.subVectors(c.b,Df);re.subVectors(c.c,Df);Tc.subVectors(qe,pe);Uc.subVectors(re, +qe);sd.subVectors(pe,re);c=[0,-Tc.z,Tc.y,0,-Uc.z,Uc.y,0,-sd.z,sd.y,Tc.z,0,-Tc.x,Uc.z,0,-Uc.x,sd.z,0,-sd.x,-Tc.y,Tc.x,0,-Uc.y,Uc.x,0,-sd.y,sd.x,0];if(!eh(c,pe,qe,re,Cg))return!1;c=[1,0,0,0,1,0,0,0,1];if(!eh(c,pe,qe,re,Cg))return!1;Dg.crossVectors(Tc,Uc);c=[Dg.x,Dg.y,Dg.z];return eh(c,pe,qe,re,Cg)};za.prototype.clampPoint=function(c,a){void 0===a&&(console.warn("THREE.Box3: .clampPoint() target is now required"),a=new w);return a.copy(c).clamp(this.min,this.max)};za.prototype.distanceToPoint=function(c){return Cf.copy(c).clamp(this.min, +this.max).sub(c).length()};za.prototype.getBoundingSphere=function(c){void 0===c&&console.error("THREE.Box3: .getBoundingSphere() target is now required");this.getCenter(c.center);c.radius=.5*this.getSize(Cf).length();return c};za.prototype.intersect=function(c){this.min.max(c.min);this.max.min(c.max);this.isEmpty()&&this.makeEmpty();return this};za.prototype.union=function(c){this.min.min(c.min);this.max.max(c.max);return this};za.prototype.applyMatrix4=function(c){if(this.isEmpty())return this; +sc[0].set(this.min.x,this.min.y,this.min.z).applyMatrix4(c);sc[1].set(this.min.x,this.min.y,this.max.z).applyMatrix4(c);sc[2].set(this.min.x,this.max.y,this.min.z).applyMatrix4(c);sc[3].set(this.min.x,this.max.y,this.max.z).applyMatrix4(c);sc[4].set(this.max.x,this.min.y,this.min.z).applyMatrix4(c);sc[5].set(this.max.x,this.min.y,this.max.z).applyMatrix4(c);sc[6].set(this.max.x,this.max.y,this.min.z).applyMatrix4(c);sc[7].set(this.max.x,this.max.y,this.max.z).applyMatrix4(c);this.setFromPoints(sc); +return this};za.prototype.translate=function(c){this.min.add(c);this.max.add(c);return this};za.prototype.equals=function(c){return c.min.equals(this.min)&&c.max.equals(this.max)};var sc=[new w,new w,new w,new w,new w,new w,new w,new w],Cf=new w,Zh=new za,pe=new w,qe=new w,re=new w,Tc=new w,Uc=new w,sd=new w,Df=new w,Cg=new w,Dg=new w,Yc=new w,Ml=new za,Wa=function(c,a){this.center=void 0!==c?c:new w;this.radius=void 0!==a?a:-1};Wa.prototype.set=function(c,a){this.center.copy(c);this.radius=a;return this}; +Wa.prototype.setFromPoints=function(c,a){var b=this.center;void 0!==a?b.copy(a):Ml.setFromPoints(c).getCenter(b);for(var d=a=0,e=c.length;dthis.radius};Wa.prototype.makeEmpty=function(){this.center.set(0,0,0);this.radius= +-1;return this};Wa.prototype.containsPoint=function(c){return c.distanceToSquared(this.center)<=this.radius*this.radius};Wa.prototype.distanceToPoint=function(c){return c.distanceTo(this.center)-this.radius};Wa.prototype.intersectsSphere=function(c){var a=this.radius+c.radius;return c.center.distanceToSquared(this.center)<=a*a};Wa.prototype.intersectsBox=function(c){return c.intersectsSphere(this)};Wa.prototype.intersectsPlane=function(c){return Math.abs(c.distanceToPoint(this.center))<=this.radius}; +Wa.prototype.clampPoint=function(c,a){var b=this.center.distanceToSquared(c);void 0===a&&(console.warn("THREE.Sphere: .clampPoint() target is now required"),a=new w);a.copy(c);b>this.radius*this.radius&&(a.sub(this.center).normalize(),a.multiplyScalar(this.radius).add(this.center));return a};Wa.prototype.getBoundingBox=function(c){void 0===c&&(console.warn("THREE.Sphere: .getBoundingBox() target is now required"),c=new za);if(this.isEmpty())return c.makeEmpty(),c;c.set(this.center,this.center);c.expandByScalar(this.radius); +return c};Wa.prototype.applyMatrix4=function(c){this.center.applyMatrix4(c);this.radius*=c.getMaxScaleOnAxis();return this};Wa.prototype.translate=function(c){this.center.add(c);return this};Wa.prototype.equals=function(c){return c.center.equals(this.center)&&c.radius===this.radius};var tc=new w,$h=new w,Eg=new w,Vc=new w,ai=new w,Fg=new w,bi=new w,Ta=function(c,a){this.origin=void 0!==c?c:new w;this.direction=void 0!==a?a:new w(0,0,-1)};Ta.prototype.set=function(c,a){this.origin.copy(c);this.direction.copy(a); +return this};Ta.prototype.clone=function(){return(new this.constructor).copy(this)};Ta.prototype.copy=function(c){this.origin.copy(c.origin);this.direction.copy(c.direction);return this};Ta.prototype.at=function(c,a){void 0===a&&(console.warn("THREE.Ray: .at() target is now required"),a=new w);return a.copy(this.direction).multiplyScalar(c).add(this.origin)};Ta.prototype.lookAt=function(c){this.direction.copy(c).sub(this.origin).normalize();return this};Ta.prototype.recast=function(c){this.origin.copy(this.at(c, +tc));return this};Ta.prototype.closestPointToPoint=function(c,a){void 0===a&&(console.warn("THREE.Ray: .closestPointToPoint() target is now required"),a=new w);a.subVectors(c,this.origin);c=a.dot(this.direction);return 0>c?a.copy(this.origin):a.copy(this.direction).multiplyScalar(c).add(this.origin)};Ta.prototype.distanceToPoint=function(c){return Math.sqrt(this.distanceSqToPoint(c))};Ta.prototype.distanceSqToPoint=function(c){var a=tc.subVectors(c,this.origin).dot(this.direction);if(0>a)return this.origin.distanceToSquared(c); +tc.copy(this.direction).multiplyScalar(a).add(this.origin);return tc.distanceToSquared(c)};Ta.prototype.distanceSqToSegment=function(c,a,b,d){$h.copy(c).add(a).multiplyScalar(.5);Eg.copy(a).sub(c).normalize();Vc.copy(this.origin).sub($h);var e=.5*c.distanceTo(a),f=-this.direction.dot(Eg),g=Vc.dot(this.direction),h=-Vc.dot(Eg),k=Vc.lengthSq(),l=Math.abs(1-f*f);if(0=-m?a<=m?(e=1/l,c*=e,a*=e,f=c*(c+f*a+2*g)+a*(f*c+a+2*h)+k):(a=e,c=Math.max(0,-(f*a+g)),f=-c*c+a*(a+ +2*h)+k):(a=-e,c=Math.max(0,-(f*a+g)),f=-c*c+a*(a+2*h)+k):a<=-m?(c=Math.max(0,-(-f*e+g)),a=0c)return null;c=Math.sqrt(c-d);d=b-c;b+=c;return 0>d&&0>b?null:0>d?this.at(b,a):this.at(d,a)};Ta.prototype.intersectsSphere=function(c){return this.distanceSqToPoint(c.center)<=c.radius*c.radius};Ta.prototype.distanceToPlane=function(c){var a=c.normal.dot(this.direction);if(0===a)return 0===c.distanceToPoint(this.origin)?0:null;c=-(this.origin.dot(c.normal)+c.constant)/a;return 0<=c?c:null};Ta.prototype.intersectPlane= +function(c,a){c=this.distanceToPlane(c);return null===c?null:this.at(c,a)};Ta.prototype.intersectsPlane=function(c){var a=c.distanceToPoint(this.origin);return 0===a||0>c.normal.dot(this.direction)*a?!0:!1};Ta.prototype.intersectBox=function(c,a){var b=1/this.direction.x;var d=1/this.direction.y;var e=1/this.direction.z,f=this.origin;if(0<=b){var g=(c.min.x-f.x)*b;b*=c.max.x-f.x}else g=(c.max.x-f.x)*b,b*=c.min.x-f.x;if(0<=d){var h=(c.min.y-f.y)*d;d*=c.max.y-f.y}else h=(c.max.y-f.y)*d,d*=c.min.y-f.y; +if(g>d||h>b)return null;if(h>g||g!==g)g=h;if(dc||h>b)return null;if(h>g||g!==g)g=h;if(cb?null:this.at(0<=g?g:b,a)};Ta.prototype.intersectsBox=function(c){return null!==this.intersectBox(c,tc)};Ta.prototype.intersectTriangle=function(c,a,b,d,e){ai.subVectors(a,c);Fg.subVectors(b,c);bi.crossVectors(ai,Fg);a=this.direction.dot(bi);if(0a)d=-1,a= +-a;else return null;Vc.subVectors(this.origin,c);c=d*this.direction.dot(Fg.crossVectors(Vc,Fg));if(0>c)return null;b=d*this.direction.dot(ai.cross(Vc));if(0>b||c+b>a)return null;c=-d*Vc.dot(bi);return 0>c?null:this.at(c/a,e)};Ta.prototype.applyMatrix4=function(c){this.origin.applyMatrix4(c);this.direction.transformDirection(c);return this};Ta.prototype.equals=function(c){return c.origin.equals(this.origin)&&c.direction.equals(this.direction)};var da=function(){Object.defineProperty(this,"isMatrix4", +{value:!0});this.elements=[1,0,0,0,0,1,0,0,0,0,1,0,0,0,0,1];0this.determinant()&&(e=-e);c.x=d[12];c.y=d[13];c.z=d[14];gb.copy(this);c=1/e;d=1/f;var h=1/g;gb.elements[0]*= +c;gb.elements[1]*=c;gb.elements[2]*=c;gb.elements[4]*=d;gb.elements[5]*=d;gb.elements[6]*=d;gb.elements[8]*=h;gb.elements[9]*=h;gb.elements[10]*=h;a.setFromRotationMatrix(gb);b.x=e;b.y=f;b.z=g;return this};da.prototype.makePerspective=function(c,a,b,d,e,f){void 0===f&&console.warn("THREE.Matrix4: .makePerspective() has been redefined and has a new signature. Please check the docs.");var g=this.elements;g[0]=2*e/(a-c);g[4]=0;g[8]=(a+c)/(a-c);g[12]=0;g[1]=0;g[5]=2*e/(b-d);g[9]=(b+d)/(b-d);g[13]=0;g[2]= +0;g[6]=0;g[10]=-(f+e)/(f-e);g[14]=-2*f*e/(f-e);g[3]=0;g[7]=0;g[11]=-1;g[15]=0;return this};da.prototype.makeOrthographic=function(c,a,b,d,e,f){var g=this.elements,h=1/(a-c),k=1/(b-d),l=1/(f-e);g[0]=2*h;g[4]=0;g[8]=0;g[12]=-((a+c)*h);g[1]=0;g[5]=2*k;g[9]=0;g[13]=-((b+d)*k);g[2]=0;g[6]=0;g[10]=-2*l;g[14]=-((f+e)*l);g[3]=0;g[7]=0;g[11]=0;g[15]=1;return this};da.prototype.equals=function(c){var a=this.elements;c=c.elements;for(var b=0;16>b;b++)if(a[b]!==c[b])return!1;return!0};da.prototype.fromArray= +function(c,a){void 0===a&&(a=0);for(var b=0;16>b;b++)this.elements[b]=c[b+a];return this};da.prototype.toArray=function(c,a){void 0===c&&(c=[]);void 0===a&&(a=0);var b=this.elements;c[a]=b[0];c[a+1]=b[1];c[a+2]=b[2];c[a+3]=b[3];c[a+4]=b[4];c[a+5]=b[5];c[a+6]=b[6];c[a+7]=b[7];c[a+8]=b[8];c[a+9]=b[9];c[a+10]=b[10];c[a+11]=b[11];c[a+12]=b[12];c[a+13]=b[13];c[a+14]=b[14];c[a+15]=b[15];return c};var se=new w,gb=new da,Nl=new w(0,0,0),Ol=new w(1,1,1),Wc=new w,Gg=new w,ub=new w,hb=function f(a,b,d,e){void 0=== +a&&(a=0);void 0===b&&(b=0);void 0===d&&(d=0);void 0===e&&(e=f.DefaultOrder);Object.defineProperty(this,"isEuler",{value:!0});this._x=a;this._y=b;this._z=d;this._order=e},uc={x:{configurable:!0},y:{configurable:!0},z:{configurable:!0},order:{configurable:!0}};uc.x.get=function(){return this._x};uc.x.set=function(a){this._x=a;this._onChangeCallback()};uc.y.get=function(){return this._y};uc.y.set=function(a){this._y=a;this._onChangeCallback()};uc.z.get=function(){return this._z};uc.z.set=function(a){this._z= +a;this._onChangeCallback()};uc.order.get=function(){return this._order};uc.order.set=function(a){this._order=a;this._onChangeCallback()};hb.prototype.set=function(a,b,d,e){this._x=a;this._y=b;this._z=d;this._order=e||this._order;this._onChangeCallback();return this};hb.prototype.clone=function(){return new this.constructor(this._x,this._y,this._z,this._order)};hb.prototype.copy=function(a){this._x=a._x;this._y=a._y;this._z=a._z;this._order=a._order;this._onChangeCallback();return this};hb.prototype.setFromRotationMatrix= +function(a,b,d){var e=xa.clamp,f=a.elements;a=f[0];var g=f[4],h=f[8],k=f[1],l=f[5],m=f[9],n=f[2],p=f[6];f=f[10];b=b||this._order;switch(b){case "XYZ":this._y=Math.asin(e(h,-1,1));.9999999>Math.abs(h)?(this._x=Math.atan2(-m,f),this._z=Math.atan2(-g,a)):(this._x=Math.atan2(p,l),this._z=0);break;case "YXZ":this._x=Math.asin(-e(m,-1,1));.9999999>Math.abs(m)?(this._y=Math.atan2(h,f),this._z=Math.atan2(k,l)):(this._y=Math.atan2(-n,a),this._z=0);break;case "ZXY":this._x=Math.asin(e(p,-1,1));.9999999>Math.abs(p)? +(this._y=Math.atan2(-n,f),this._z=Math.atan2(-g,l)):(this._y=0,this._z=Math.atan2(k,a));break;case "ZYX":this._y=Math.asin(-e(n,-1,1));.9999999>Math.abs(n)?(this._x=Math.atan2(p,f),this._z=Math.atan2(k,a)):(this._x=0,this._z=Math.atan2(-g,l));break;case "YZX":this._z=Math.asin(e(k,-1,1));.9999999>Math.abs(k)?(this._x=Math.atan2(-m,l),this._y=Math.atan2(-n,a)):(this._x=0,this._y=Math.atan2(h,f));break;case "XZY":this._z=Math.asin(-e(g,-1,1));.9999999>Math.abs(g)?(this._x=Math.atan2(p,l),this._y=Math.atan2(h, +a)):(this._x=Math.atan2(-m,f),this._y=0);break;default:console.warn("THREE.Euler: .setFromRotationMatrix() encountered an unknown order: "+b)}this._order=b;!1!==d&&this._onChangeCallback();return this};hb.prototype.setFromQuaternion=function(a,b,d){wj.makeRotationFromQuaternion(a);return this.setFromRotationMatrix(wj,b,d)};hb.prototype.setFromVector3=function(a,b){return this.set(a.x,a.y,a.z,b||this._order)};hb.prototype.reorder=function(a){xj.setFromEuler(this);return this.setFromQuaternion(xj,a)}; +hb.prototype.equals=function(a){return a._x===this._x&&a._y===this._y&&a._z===this._z&&a._order===this._order};hb.prototype.fromArray=function(a){this._x=a[0];this._y=a[1];this._z=a[2];void 0!==a[3]&&(this._order=a[3]);this._onChangeCallback();return this};hb.prototype.toArray=function(a,b){void 0===a&&(a=[]);void 0===b&&(b=0);a[b]=this._x;a[b+1]=this._y;a[b+2]=this._z;a[b+3]=this._order;return a};hb.prototype.toVector3=function(a){return a?a.set(this._x,this._y,this._z):new w(this._x,this._y,this._z)}; +hb.prototype._onChange=function(a){this._onChangeCallback=a;return this};hb.prototype._onChangeCallback=function(){};Object.defineProperties(hb.prototype,uc);hb.DefaultOrder="XYZ";hb.RotationOrders="XYZ YZX ZXY XZY YXZ ZYX".split(" ");var wj=new da,xj=new ua,$b=function(){this.mask=1};$b.prototype.set=function(a){this.mask=1<e||1b&&0a&&0=xc.x+xc.y};Ga.getUV=function(a,b,d,e,f,g,h,k){this.getBarycoord(a,b,d,e,xc);k.set(0,0);k.addScaledVector(f, +xc.x);k.addScaledVector(g,xc.y);k.addScaledVector(h,xc.z);return k};Ga.isFrontFacing=function(a,b,d,e){Yb.subVectors(d,b);wc.subVectors(a,b);return 0>Yb.cross(wc).dot(e)?!0:!1};Ga.prototype.set=function(a,b,d){this.a.copy(a);this.b.copy(b);this.c.copy(d);return this};Ga.prototype.setFromPointsAndIndices=function(a,b,d,e){this.a.copy(a[b]);this.b.copy(a[d]);this.c.copy(a[e]);return this};Ga.prototype.clone=function(){return(new this.constructor).copy(this)};Ga.prototype.copy=function(a){this.a.copy(a.a); +this.b.copy(a.b);this.c.copy(a.c);return this};Ga.prototype.getArea=function(){Yb.subVectors(this.c,this.b);wc.subVectors(this.a,this.b);return.5*Yb.cross(wc).length()};Ga.prototype.getMidpoint=function(a){void 0===a&&(console.warn("THREE.Triangle: .getMidpoint() target is now required"),a=new w);return a.addVectors(this.a,this.b).add(this.c).multiplyScalar(1/3)};Ga.prototype.getNormal=function(a){return Ga.getNormal(this.a,this.b,this.c,a)};Ga.prototype.getPlane=function(a){void 0===a&&(console.warn("THREE.Triangle: .getPlane() target is now required"), +a=new Na);return a.setFromCoplanarPoints(this.a,this.b,this.c)};Ga.prototype.getBarycoord=function(a,b){return Ga.getBarycoord(a,this.a,this.b,this.c,b)};Ga.prototype.getUV=function(a,b,d,e,f){return Ga.getUV(a,this.a,this.b,this.c,b,d,e,f)};Ga.prototype.containsPoint=function(a){return Ga.containsPoint(a,this.a,this.b,this.c)};Ga.prototype.isFrontFacing=function(a){return Ga.isFrontFacing(this.a,this.b,this.c,a)};Ga.prototype.intersectsBox=function(a){return a.intersectsTriangle(this)};Ga.prototype.closestPointToPoint= +function(a,b){void 0===b&&(console.warn("THREE.Triangle: .closestPointToPoint() target is now required"),b=new w);var d=this.a,e=this.b,f=this.c;ue.subVectors(e,d);ve.subVectors(f,d);ei.subVectors(a,d);var g=ue.dot(ei),h=ve.dot(ei);if(0>=g&&0>=h)return b.copy(d);fi.subVectors(a,e);var k=ue.dot(fi),l=ve.dot(fi);if(0<=k&&l<=k)return b.copy(e);var m=g*l-k*h;if(0>=m&&0<=g&&0>=k)return e=g/(g-k),b.copy(d).addScaledVector(ue,e);gi.subVectors(a,f);a=ue.dot(gi);var n=ve.dot(gi);if(0<=n&&a<=n)return b.copy(f); +g=a*h-g*n;if(0>=g&&0<=h&&0>=n)return m=h/(h-n),b.copy(d).addScaledVector(ve,m);h=k*n-a*l;if(0>=h&&0<=l-k&&0<=a-n)return Cj.subVectors(f,e),m=(l-k)/(l-k+(a-n)),b.copy(e).addScaledVector(Cj,m);f=1/(h+g+m);e=g*f;m*=f;return b.copy(d).addScaledVector(ue,e).addScaledVector(ve,m)};Ga.prototype.equals=function(a){return a.a.equals(this.a)&&a.b.equals(this.b)&&a.c.equals(this.c)};var Dj={aliceblue:15792383,antiquewhite:16444375,aqua:65535,aquamarine:8388564,azure:15794175,beige:16119260,bisque:16770244,black:0, +blanchedalmond:16772045,blue:255,blueviolet:9055202,brown:10824234,burlywood:14596231,cadetblue:6266528,chartreuse:8388352,chocolate:13789470,coral:16744272,cornflowerblue:6591981,cornsilk:16775388,crimson:14423100,cyan:65535,darkblue:139,darkcyan:35723,darkgoldenrod:12092939,darkgray:11119017,darkgreen:25600,darkgrey:11119017,darkkhaki:12433259,darkmagenta:9109643,darkolivegreen:5597999,darkorange:16747520,darkorchid:10040012,darkred:9109504,darksalmon:15308410,darkseagreen:9419919,darkslateblue:4734347, +darkslategray:3100495,darkslategrey:3100495,darkturquoise:52945,darkviolet:9699539,deeppink:16716947,deepskyblue:49151,dimgray:6908265,dimgrey:6908265,dodgerblue:2003199,firebrick:11674146,floralwhite:16775920,forestgreen:2263842,fuchsia:16711935,gainsboro:14474460,ghostwhite:16316671,gold:16766720,goldenrod:14329120,gray:8421504,green:32768,greenyellow:11403055,grey:8421504,honeydew:15794160,hotpink:16738740,indianred:13458524,indigo:4915330,ivory:16777200,khaki:15787660,lavender:15132410,lavenderblush:16773365, +lawngreen:8190976,lemonchiffon:16775885,lightblue:11393254,lightcoral:15761536,lightcyan:14745599,lightgoldenrodyellow:16448210,lightgray:13882323,lightgreen:9498256,lightgrey:13882323,lightpink:16758465,lightsalmon:16752762,lightseagreen:2142890,lightskyblue:8900346,lightslategray:7833753,lightslategrey:7833753,lightsteelblue:11584734,lightyellow:16777184,lime:65280,limegreen:3329330,linen:16445670,magenta:16711935,maroon:8388608,mediumaquamarine:6737322,mediumblue:205,mediumorchid:12211667,mediumpurple:9662683, +mediumseagreen:3978097,mediumslateblue:8087790,mediumspringgreen:64154,mediumturquoise:4772300,mediumvioletred:13047173,midnightblue:1644912,mintcream:16121850,mistyrose:16770273,moccasin:16770229,navajowhite:16768685,navy:128,oldlace:16643558,olive:8421376,olivedrab:7048739,orange:16753920,orangered:16729344,orchid:14315734,palegoldenrod:15657130,palegreen:10025880,paleturquoise:11529966,palevioletred:14381203,papayawhip:16773077,peachpuff:16767673,peru:13468991,pink:16761035,plum:14524637,powderblue:11591910, +purple:8388736,rebeccapurple:6697881,red:16711680,rosybrown:12357519,royalblue:4286945,saddlebrown:9127187,salmon:16416882,sandybrown:16032864,seagreen:3050327,seashell:16774638,sienna:10506797,silver:12632256,skyblue:8900331,slateblue:6970061,slategray:7372944,slategrey:7372944,snow:16775930,springgreen:65407,steelblue:4620980,tan:13808780,teal:32896,thistle:14204888,tomato:16737095,turquoise:4251856,violet:15631086,wheat:16113331,white:16777215,whitesmoke:16119285,yellow:16776960,yellowgreen:10145074}, +Bb={h:0,s:0,l:0},Ig={h:0,s:0,l:0},S=function(a,b,d){Object.defineProperty(this,"isColor",{value:!0});return void 0===b&&void 0===d?this.set(a):this.setRGB(a,b,d)};S.prototype.set=function(a){a&&a.isColor?this.copy(a):"number"===typeof a?this.setHex(a):"string"===typeof a&&this.setStyle(a);return this};S.prototype.setScalar=function(a){this.b=this.g=this.r=a;return this};S.prototype.setHex=function(a){a=Math.floor(a);this.r=(a>>16&255)/255;this.g=(a>>8&255)/255;this.b=(a&255)/255;return this};S.prototype.setRGB= +function(a,b,d){this.r=a;this.g=b;this.b=d;return this};S.prototype.setHSL=function(a,b,d){a=xa.euclideanModulo(a,1);b=xa.clamp(b,0,1);d=xa.clamp(d,0,1);0===b?this.r=this.g=this.b=d:(b=.5>=d?d*(1+b):d+b-d*b,d=2*d-b,this.r=fh(d,b,a+1/3),this.g=fh(d,b,a),this.b=fh(d,b,a-1/3));return this};S.prototype.setStyle=function(a){function b(h){void 0!==h&&1>parseFloat(h)&&console.warn("THREE.Color: Alpha component of "+a+" will be ignored.")}var d;if(d=/^((?:rgb|hsl)a?)\(\s*([^\)]*)\)/.exec(a)){var e=d[2];switch(d[1]){case "rgb":case "rgba":if(d= +/^(\d+)\s*,\s*(\d+)\s*,\s*(\d+)\s*(,\s*([0-9]*\.?[0-9]+)\s*)?$/.exec(e))return this.r=Math.min(255,parseInt(d[1],10))/255,this.g=Math.min(255,parseInt(d[2],10))/255,this.b=Math.min(255,parseInt(d[3],10))/255,b(d[5]),this;if(d=/^(\d+)%\s*,\s*(\d+)%\s*,\s*(\d+)%\s*(,\s*([0-9]*\.?[0-9]+)\s*)?$/.exec(e))return this.r=Math.min(100,parseInt(d[1],10))/100,this.g=Math.min(100,parseInt(d[2],10))/100,this.b=Math.min(100,parseInt(d[3],10))/100,b(d[5]),this;break;case "hsl":case "hsla":if(d=/^([0-9]*\.?[0-9]+)\s*,\s*(\d+)%\s*,\s*(\d+)%\s*(,\s*([0-9]*\.?[0-9]+)\s*)?$/.exec(e)){e= +parseFloat(d[1])/360;var f=parseInt(d[2],10)/100,g=parseInt(d[3],10)/100;b(d[5]);return this.setHSL(e,f,g)}}}else if(d=/^#([A-Fa-f0-9]+)$/.exec(a)){d=d[1];e=d.length;if(3===e)return this.r=parseInt(d.charAt(0)+d.charAt(0),16)/255,this.g=parseInt(d.charAt(1)+d.charAt(1),16)/255,this.b=parseInt(d.charAt(2)+d.charAt(2),16)/255,this;if(6===e)return this.r=parseInt(d.charAt(0)+d.charAt(1),16)/255,this.g=parseInt(d.charAt(2)+d.charAt(3),16)/255,this.b=parseInt(d.charAt(4)+d.charAt(5),16)/255,this}return a&& +0=k?l/(f+g):l/(2-f-g);switch(f){case b:h=(d-e)/l+(dthis.opacity&&(e.opacity=this.opacity);!0===this.transparent&&(e.transparent=this.transparent);e.depthFunc=this.depthFunc;e.depthTest=this.depthTest;e.depthWrite=this.depthWrite;e.stencilWrite=this.stencilWrite;e.stencilWriteMask= +this.stencilWriteMask;e.stencilFunc=this.stencilFunc;e.stencilRef=this.stencilRef;e.stencilFuncMask=this.stencilFuncMask;e.stencilFail=this.stencilFail;e.stencilZFail=this.stencilZFail;e.stencilZPass=this.stencilZPass;this.rotation&&0!==this.rotation&&(e.rotation=this.rotation);!0===this.polygonOffset&&(e.polygonOffset=!0);0!==this.polygonOffsetFactor&&(e.polygonOffsetFactor=this.polygonOffsetFactor);0!==this.polygonOffsetUnits&&(e.polygonOffsetUnits=this.polygonOffsetUnits);this.linewidth&&1!==this.linewidth&& +(e.linewidth=this.linewidth);void 0!==this.dashSize&&(e.dashSize=this.dashSize);void 0!==this.gapSize&&(e.gapSize=this.gapSize);void 0!==this.scale&&(e.scale=this.scale);!0===this.dithering&&(e.dithering=!0);0h;h++)if(g[h]===g[(h+1)%3]){a.push(e);break}for(d=a.length-1;0<=d;d--)for(e=a[d],this.faces.splice(e,1),f=0,g=this.faceVertexUvs.length;f\n\t\t\t\t#include \n\n\t\t\t}\n\t\t", +fragmentShader:"\n\n\t\t\tuniform sampler2D tEquirect;\n\n\t\t\tvarying vec3 vWorldDirection;\n\n\t\t\t#include \n\n\t\t\tvoid main() {\n\n\t\t\t\tvec3 direction = normalize( vWorldDirection );\n\n\t\t\t\tvec2 sampleUV = equirectUv( direction );\n\n\t\t\t\tgl_FragColor = texture2D( tEquirect, sampleUV );\n\n\t\t\t}\n\t\t",side:1,blending:0});e.uniforms.tEquirect.value=b;d=new Qa(d,e);e=b.minFilter;1008===b.minFilter&&(b.minFilter=1006);(new Hd(1,10,this)).update(a,d);b.minFilter=e;d.geometry.dispose(); +d.material.dispose();return this};bd.prototype=Object.create(Oa.prototype);bd.prototype.constructor=bd;bd.prototype.isDataTexture=!0;var xe=new Wa,Lg=new w,xb=function(a,b,d,e,f,g){this.planes=[void 0!==a?a:new Na,void 0!==b?b:new Na,void 0!==d?d:new Na,void 0!==e?e:new Na,void 0!==f?f:new Na,void 0!==g?g:new Na]};xb.prototype.set=function(a,b,d,e,f,g){var h=this.planes;h[0].copy(a);h[1].copy(b);h[2].copy(d);h[3].copy(e);h[4].copy(f);h[5].copy(g);return this};xb.prototype.clone=function(){return(new this.constructor).copy(this)}; +xb.prototype.copy=function(a){for(var b=this.planes,d=0;6>d;d++)b[d].copy(a.planes[d]);return this};xb.prototype.setFromProjectionMatrix=function(a){var b=this.planes,d=a.elements;a=d[0];var e=d[1],f=d[2],g=d[3],h=d[4],k=d[5],l=d[6],m=d[7],n=d[8],p=d[9],t=d[10],q=d[11],v=d[12],u=d[13],A=d[14];d=d[15];b[0].setComponents(g-a,m-h,q-n,d-v).normalize();b[1].setComponents(g+a,m+h,q+n,d+v).normalize();b[2].setComponents(g+e,m+k,q+p,d+u).normalize();b[3].setComponents(g-e,m-k,q-p,d-u).normalize();b[4].setComponents(g- +f,m-l,q-t,d-A).normalize();b[5].setComponents(g+f,m+l,q+t,d+A).normalize();return this};xb.prototype.intersectsObject=function(a){var b=a.geometry;null===b.boundingSphere&&b.computeBoundingSphere();xe.copy(b.boundingSphere).applyMatrix4(a.matrixWorld);return this.intersectsSphere(xe)};xb.prototype.intersectsSprite=function(a){xe.center.set(0,0,0);xe.radius=.7071067811865476;xe.applyMatrix4(a.matrixWorld);return this.intersectsSphere(xe)};xb.prototype.intersectsSphere=function(a){var b=this.planes, +d=a.center;a=-a.radius;for(var e=0;6>e;e++)if(b[e].distanceToPoint(d)d;d++){var e=b[d];Lg.x=0e.distanceToPoint(Lg))return!1}return!0};xb.prototype.containsPoint=function(a){for(var b=this.planes,d=0;6>d;d++)if(0>b[d].distanceToPoint(a))return!1;return!0};Je.prototype=Object.create(sa.prototype);Je.prototype.constructor= +Je;cd.prototype=Object.create(ka.prototype);cd.prototype.constructor=cd;var Ba={alphamap_fragment:"#ifdef USE_ALPHAMAP\n\tdiffuseColor.a *= texture2D( alphaMap, vUv ).g;\n#endif",alphamap_pars_fragment:"#ifdef USE_ALPHAMAP\n\tuniform sampler2D alphaMap;\n#endif",alphatest_fragment:"#ifdef ALPHATEST\n\tif ( diffuseColor.a < ALPHATEST ) discard;\n#endif",aomap_fragment:"#ifdef USE_AOMAP\n\tfloat ambientOcclusion = ( texture2D( aoMap, vUv2 ).r - 1.0 ) * aoMapIntensity + 1.0;\n\treflectedLight.indirectDiffuse *= ambientOcclusion;\n\t#if defined( USE_ENVMAP ) && defined( STANDARD )\n\t\tfloat dotNV = saturate( dot( geometry.normal, geometry.viewDir ) );\n\t\treflectedLight.indirectSpecular *= computeSpecularOcclusion( dotNV, ambientOcclusion, material.specularRoughness );\n\t#endif\n#endif", +aomap_pars_fragment:"#ifdef USE_AOMAP\n\tuniform sampler2D aoMap;\n\tuniform float aoMapIntensity;\n#endif",begin_vertex:"vec3 transformed = vec3( position );",beginnormal_vertex:"vec3 objectNormal = vec3( normal );\n#ifdef USE_TANGENT\n\tvec3 objectTangent = vec3( tangent.xyz );\n#endif",bsdfs:"vec2 integrateSpecularBRDF( const in float dotNV, const in float roughness ) {\n\tconst vec4 c0 = vec4( - 1, - 0.0275, - 0.572, 0.022 );\n\tconst vec4 c1 = vec4( 1, 0.0425, 1.04, - 0.04 );\n\tvec4 r = roughness * c0 + c1;\n\tfloat a004 = min( r.x * r.x, exp2( - 9.28 * dotNV ) ) * r.x + r.y;\n\treturn vec2( -1.04, 1.04 ) * a004 + r.zw;\n}\nfloat punctualLightIntensityToIrradianceFactor( const in float lightDistance, const in float cutoffDistance, const in float decayExponent ) {\n#if defined ( PHYSICALLY_CORRECT_LIGHTS )\n\tfloat distanceFalloff = 1.0 / max( pow( lightDistance, decayExponent ), 0.01 );\n\tif( cutoffDistance > 0.0 ) {\n\t\tdistanceFalloff *= pow2( saturate( 1.0 - pow4( lightDistance / cutoffDistance ) ) );\n\t}\n\treturn distanceFalloff;\n#else\n\tif( cutoffDistance > 0.0 && decayExponent > 0.0 ) {\n\t\treturn pow( saturate( -lightDistance / cutoffDistance + 1.0 ), decayExponent );\n\t}\n\treturn 1.0;\n#endif\n}\nvec3 BRDF_Diffuse_Lambert( const in vec3 diffuseColor ) {\n\treturn RECIPROCAL_PI * diffuseColor;\n}\nvec3 F_Schlick( const in vec3 specularColor, const in float dotLH ) {\n\tfloat fresnel = exp2( ( -5.55473 * dotLH - 6.98316 ) * dotLH );\n\treturn ( 1.0 - specularColor ) * fresnel + specularColor;\n}\nvec3 F_Schlick_RoughnessDependent( const in vec3 F0, const in float dotNV, const in float roughness ) {\n\tfloat fresnel = exp2( ( -5.55473 * dotNV - 6.98316 ) * dotNV );\n\tvec3 Fr = max( vec3( 1.0 - roughness ), F0 ) - F0;\n\treturn Fr * fresnel + F0;\n}\nfloat G_GGX_Smith( const in float alpha, const in float dotNL, const in float dotNV ) {\n\tfloat a2 = pow2( alpha );\n\tfloat gl = dotNL + sqrt( a2 + ( 1.0 - a2 ) * pow2( dotNL ) );\n\tfloat gv = dotNV + sqrt( a2 + ( 1.0 - a2 ) * pow2( dotNV ) );\n\treturn 1.0 / ( gl * gv );\n}\nfloat G_GGX_SmithCorrelated( const in float alpha, const in float dotNL, const in float dotNV ) {\n\tfloat a2 = pow2( alpha );\n\tfloat gv = dotNL * sqrt( a2 + ( 1.0 - a2 ) * pow2( dotNV ) );\n\tfloat gl = dotNV * sqrt( a2 + ( 1.0 - a2 ) * pow2( dotNL ) );\n\treturn 0.5 / max( gv + gl, EPSILON );\n}\nfloat D_GGX( const in float alpha, const in float dotNH ) {\n\tfloat a2 = pow2( alpha );\n\tfloat denom = pow2( dotNH ) * ( a2 - 1.0 ) + 1.0;\n\treturn RECIPROCAL_PI * a2 / pow2( denom );\n}\nvec3 BRDF_Specular_GGX( const in IncidentLight incidentLight, const in vec3 viewDir, const in vec3 normal, const in vec3 specularColor, const in float roughness ) {\n\tfloat alpha = pow2( roughness );\n\tvec3 halfDir = normalize( incidentLight.direction + viewDir );\n\tfloat dotNL = saturate( dot( normal, incidentLight.direction ) );\n\tfloat dotNV = saturate( dot( normal, viewDir ) );\n\tfloat dotNH = saturate( dot( normal, halfDir ) );\n\tfloat dotLH = saturate( dot( incidentLight.direction, halfDir ) );\n\tvec3 F = F_Schlick( specularColor, dotLH );\n\tfloat G = G_GGX_SmithCorrelated( alpha, dotNL, dotNV );\n\tfloat D = D_GGX( alpha, dotNH );\n\treturn F * ( G * D );\n}\nvec2 LTC_Uv( const in vec3 N, const in vec3 V, const in float roughness ) {\n\tconst float LUT_SIZE = 64.0;\n\tconst float LUT_SCALE = ( LUT_SIZE - 1.0 ) / LUT_SIZE;\n\tconst float LUT_BIAS = 0.5 / LUT_SIZE;\n\tfloat dotNV = saturate( dot( N, V ) );\n\tvec2 uv = vec2( roughness, sqrt( 1.0 - dotNV ) );\n\tuv = uv * LUT_SCALE + LUT_BIAS;\n\treturn uv;\n}\nfloat LTC_ClippedSphereFormFactor( const in vec3 f ) {\n\tfloat l = length( f );\n\treturn max( ( l * l + f.z ) / ( l + 1.0 ), 0.0 );\n}\nvec3 LTC_EdgeVectorFormFactor( const in vec3 v1, const in vec3 v2 ) {\n\tfloat x = dot( v1, v2 );\n\tfloat y = abs( x );\n\tfloat a = 0.8543985 + ( 0.4965155 + 0.0145206 * y ) * y;\n\tfloat b = 3.4175940 + ( 4.1616724 + y ) * y;\n\tfloat v = a / b;\n\tfloat theta_sintheta = ( x > 0.0 ) ? v : 0.5 * inversesqrt( max( 1.0 - x * x, 1e-7 ) ) - v;\n\treturn cross( v1, v2 ) * theta_sintheta;\n}\nvec3 LTC_Evaluate( const in vec3 N, const in vec3 V, const in vec3 P, const in mat3 mInv, const in vec3 rectCoords[ 4 ] ) {\n\tvec3 v1 = rectCoords[ 1 ] - rectCoords[ 0 ];\n\tvec3 v2 = rectCoords[ 3 ] - rectCoords[ 0 ];\n\tvec3 lightNormal = cross( v1, v2 );\n\tif( dot( lightNormal, P - rectCoords[ 0 ] ) < 0.0 ) return vec3( 0.0 );\n\tvec3 T1, T2;\n\tT1 = normalize( V - N * dot( V, N ) );\n\tT2 = - cross( N, T1 );\n\tmat3 mat = mInv * transposeMat3( mat3( T1, T2, N ) );\n\tvec3 coords[ 4 ];\n\tcoords[ 0 ] = mat * ( rectCoords[ 0 ] - P );\n\tcoords[ 1 ] = mat * ( rectCoords[ 1 ] - P );\n\tcoords[ 2 ] = mat * ( rectCoords[ 2 ] - P );\n\tcoords[ 3 ] = mat * ( rectCoords[ 3 ] - P );\n\tcoords[ 0 ] = normalize( coords[ 0 ] );\n\tcoords[ 1 ] = normalize( coords[ 1 ] );\n\tcoords[ 2 ] = normalize( coords[ 2 ] );\n\tcoords[ 3 ] = normalize( coords[ 3 ] );\n\tvec3 vectorFormFactor = vec3( 0.0 );\n\tvectorFormFactor += LTC_EdgeVectorFormFactor( coords[ 0 ], coords[ 1 ] );\n\tvectorFormFactor += LTC_EdgeVectorFormFactor( coords[ 1 ], coords[ 2 ] );\n\tvectorFormFactor += LTC_EdgeVectorFormFactor( coords[ 2 ], coords[ 3 ] );\n\tvectorFormFactor += LTC_EdgeVectorFormFactor( coords[ 3 ], coords[ 0 ] );\n\tfloat result = LTC_ClippedSphereFormFactor( vectorFormFactor );\n\treturn vec3( result );\n}\nvec3 BRDF_Specular_GGX_Environment( const in vec3 viewDir, const in vec3 normal, const in vec3 specularColor, const in float roughness ) {\n\tfloat dotNV = saturate( dot( normal, viewDir ) );\n\tvec2 brdf = integrateSpecularBRDF( dotNV, roughness );\n\treturn specularColor * brdf.x + brdf.y;\n}\nvoid BRDF_Specular_Multiscattering_Environment( const in GeometricContext geometry, const in vec3 specularColor, const in float roughness, inout vec3 singleScatter, inout vec3 multiScatter ) {\n\tfloat dotNV = saturate( dot( geometry.normal, geometry.viewDir ) );\n\tvec3 F = F_Schlick_RoughnessDependent( specularColor, dotNV, roughness );\n\tvec2 brdf = integrateSpecularBRDF( dotNV, roughness );\n\tvec3 FssEss = F * brdf.x + brdf.y;\n\tfloat Ess = brdf.x + brdf.y;\n\tfloat Ems = 1.0 - Ess;\n\tvec3 Favg = specularColor + ( 1.0 - specularColor ) * 0.047619;\tvec3 Fms = FssEss * Favg / ( 1.0 - Ems * Favg );\n\tsingleScatter += FssEss;\n\tmultiScatter += Fms * Ems;\n}\nfloat G_BlinnPhong_Implicit( ) {\n\treturn 0.25;\n}\nfloat D_BlinnPhong( const in float shininess, const in float dotNH ) {\n\treturn RECIPROCAL_PI * ( shininess * 0.5 + 1.0 ) * pow( dotNH, shininess );\n}\nvec3 BRDF_Specular_BlinnPhong( const in IncidentLight incidentLight, const in GeometricContext geometry, const in vec3 specularColor, const in float shininess ) {\n\tvec3 halfDir = normalize( incidentLight.direction + geometry.viewDir );\n\tfloat dotNH = saturate( dot( geometry.normal, halfDir ) );\n\tfloat dotLH = saturate( dot( incidentLight.direction, halfDir ) );\n\tvec3 F = F_Schlick( specularColor, dotLH );\n\tfloat G = G_BlinnPhong_Implicit( );\n\tfloat D = D_BlinnPhong( shininess, dotNH );\n\treturn F * ( G * D );\n}\nfloat GGXRoughnessToBlinnExponent( const in float ggxRoughness ) {\n\treturn ( 2.0 / pow2( ggxRoughness + 0.0001 ) - 2.0 );\n}\nfloat BlinnExponentToGGXRoughness( const in float blinnExponent ) {\n\treturn sqrt( 2.0 / ( blinnExponent + 2.0 ) );\n}\n#if defined( USE_SHEEN )\nfloat D_Charlie(float roughness, float NoH) {\n\tfloat invAlpha = 1.0 / roughness;\n\tfloat cos2h = NoH * NoH;\n\tfloat sin2h = max(1.0 - cos2h, 0.0078125);\treturn (2.0 + invAlpha) * pow(sin2h, invAlpha * 0.5) / (2.0 * PI);\n}\nfloat V_Neubelt(float NoV, float NoL) {\n\treturn saturate(1.0 / (4.0 * (NoL + NoV - NoL * NoV)));\n}\nvec3 BRDF_Specular_Sheen( const in float roughness, const in vec3 L, const in GeometricContext geometry, vec3 specularColor ) {\n\tvec3 N = geometry.normal;\n\tvec3 V = geometry.viewDir;\n\tvec3 H = normalize( V + L );\n\tfloat dotNH = saturate( dot( N, H ) );\n\treturn specularColor * D_Charlie( roughness, dotNH ) * V_Neubelt( dot(N, V), dot(N, L) );\n}\n#endif", +bumpmap_pars_fragment:"#ifdef USE_BUMPMAP\n\tuniform sampler2D bumpMap;\n\tuniform float bumpScale;\n\tvec2 dHdxy_fwd() {\n\t\tvec2 dSTdx = dFdx( vUv );\n\t\tvec2 dSTdy = dFdy( vUv );\n\t\tfloat Hll = bumpScale * texture2D( bumpMap, vUv ).x;\n\t\tfloat dBx = bumpScale * texture2D( bumpMap, vUv + dSTdx ).x - Hll;\n\t\tfloat dBy = bumpScale * texture2D( bumpMap, vUv + dSTdy ).x - Hll;\n\t\treturn vec2( dBx, dBy );\n\t}\n\tvec3 perturbNormalArb( vec3 surf_pos, vec3 surf_norm, vec2 dHdxy ) {\n\t\tvec3 vSigmaX = vec3( dFdx( surf_pos.x ), dFdx( surf_pos.y ), dFdx( surf_pos.z ) );\n\t\tvec3 vSigmaY = vec3( dFdy( surf_pos.x ), dFdy( surf_pos.y ), dFdy( surf_pos.z ) );\n\t\tvec3 vN = surf_norm;\n\t\tvec3 R1 = cross( vSigmaY, vN );\n\t\tvec3 R2 = cross( vN, vSigmaX );\n\t\tfloat fDet = dot( vSigmaX, R1 );\n\t\tfDet *= ( float( gl_FrontFacing ) * 2.0 - 1.0 );\n\t\tvec3 vGrad = sign( fDet ) * ( dHdxy.x * R1 + dHdxy.y * R2 );\n\t\treturn normalize( abs( fDet ) * surf_norm - vGrad );\n\t}\n#endif", +clipping_planes_fragment:"#if NUM_CLIPPING_PLANES > 0\n\tvec4 plane;\n\t#pragma unroll_loop_start\n\tfor ( int i = 0; i < UNION_CLIPPING_PLANES; i ++ ) {\n\t\tplane = clippingPlanes[ i ];\n\t\tif ( dot( vClipPosition, plane.xyz ) > plane.w ) discard;\n\t}\n\t#pragma unroll_loop_end\n\t#if UNION_CLIPPING_PLANES < NUM_CLIPPING_PLANES\n\t\tbool clipped = true;\n\t\t#pragma unroll_loop_start\n\t\tfor ( int i = UNION_CLIPPING_PLANES; i < NUM_CLIPPING_PLANES; i ++ ) {\n\t\t\tplane = clippingPlanes[ i ];\n\t\t\tclipped = ( dot( vClipPosition, plane.xyz ) > plane.w ) && clipped;\n\t\t}\n\t\t#pragma unroll_loop_end\n\t\tif ( clipped ) discard;\n\t#endif\n#endif", +clipping_planes_pars_fragment:"#if NUM_CLIPPING_PLANES > 0\n\tvarying vec3 vClipPosition;\n\tuniform vec4 clippingPlanes[ NUM_CLIPPING_PLANES ];\n#endif",clipping_planes_pars_vertex:"#if NUM_CLIPPING_PLANES > 0\n\tvarying vec3 vClipPosition;\n#endif",clipping_planes_vertex:"#if NUM_CLIPPING_PLANES > 0\n\tvClipPosition = - mvPosition.xyz;\n#endif",color_fragment:"#ifdef USE_COLOR\n\tdiffuseColor.rgb *= vColor;\n#endif",color_pars_fragment:"#ifdef USE_COLOR\n\tvarying vec3 vColor;\n#endif",color_pars_vertex:"#if defined( USE_COLOR ) || defined( USE_INSTANCING_COLOR )\n\tvarying vec3 vColor;\n#endif", +color_vertex:"#if defined( USE_COLOR ) || defined( USE_INSTANCING_COLOR )\n\tvColor = vec3( 1.0 );\n#endif\n#ifdef USE_COLOR\n\tvColor.xyz *= color.xyz;\n#endif\n#ifdef USE_INSTANCING_COLOR\n\tvColor.xyz *= instanceColor.xyz;\n#endif",common:"#define PI 3.141592653589793\n#define PI2 6.283185307179586\n#define PI_HALF 1.5707963267948966\n#define RECIPROCAL_PI 0.3183098861837907\n#define RECIPROCAL_PI2 0.15915494309189535\n#define EPSILON 1e-6\n#ifndef saturate\n#define saturate(a) clamp( a, 0.0, 1.0 )\n#endif\n#define whiteComplement(a) ( 1.0 - saturate( a ) )\nfloat pow2( const in float x ) { return x*x; }\nfloat pow3( const in float x ) { return x*x*x; }\nfloat pow4( const in float x ) { float x2 = x*x; return x2*x2; }\nfloat average( const in vec3 color ) { return dot( color, vec3( 0.3333 ) ); }\nhighp float rand( const in vec2 uv ) {\n\tconst highp float a = 12.9898, b = 78.233, c = 43758.5453;\n\thighp float dt = dot( uv.xy, vec2( a,b ) ), sn = mod( dt, PI );\n\treturn fract(sin(sn) * c);\n}\n#ifdef HIGH_PRECISION\n\tfloat precisionSafeLength( vec3 v ) { return length( v ); }\n#else\n\tfloat max3( vec3 v ) { return max( max( v.x, v.y ), v.z ); }\n\tfloat precisionSafeLength( vec3 v ) {\n\t\tfloat maxComponent = max3( abs( v ) );\n\t\treturn length( v / maxComponent ) * maxComponent;\n\t}\n#endif\nstruct IncidentLight {\n\tvec3 color;\n\tvec3 direction;\n\tbool visible;\n};\nstruct ReflectedLight {\n\tvec3 directDiffuse;\n\tvec3 directSpecular;\n\tvec3 indirectDiffuse;\n\tvec3 indirectSpecular;\n};\nstruct GeometricContext {\n\tvec3 position;\n\tvec3 normal;\n\tvec3 viewDir;\n#ifdef CLEARCOAT\n\tvec3 clearcoatNormal;\n#endif\n};\nvec3 transformDirection( in vec3 dir, in mat4 matrix ) {\n\treturn normalize( ( matrix * vec4( dir, 0.0 ) ).xyz );\n}\nvec3 inverseTransformDirection( in vec3 dir, in mat4 matrix ) {\n\treturn normalize( ( vec4( dir, 0.0 ) * matrix ).xyz );\n}\nvec3 projectOnPlane(in vec3 point, in vec3 pointOnPlane, in vec3 planeNormal ) {\n\tfloat distance = dot( planeNormal, point - pointOnPlane );\n\treturn - distance * planeNormal + point;\n}\nfloat sideOfPlane( in vec3 point, in vec3 pointOnPlane, in vec3 planeNormal ) {\n\treturn sign( dot( point - pointOnPlane, planeNormal ) );\n}\nvec3 linePlaneIntersect( in vec3 pointOnLine, in vec3 lineDirection, in vec3 pointOnPlane, in vec3 planeNormal ) {\n\treturn lineDirection * ( dot( planeNormal, pointOnPlane - pointOnLine ) / dot( planeNormal, lineDirection ) ) + pointOnLine;\n}\nmat3 transposeMat3( const in mat3 m ) {\n\tmat3 tmp;\n\ttmp[ 0 ] = vec3( m[ 0 ].x, m[ 1 ].x, m[ 2 ].x );\n\ttmp[ 1 ] = vec3( m[ 0 ].y, m[ 1 ].y, m[ 2 ].y );\n\ttmp[ 2 ] = vec3( m[ 0 ].z, m[ 1 ].z, m[ 2 ].z );\n\treturn tmp;\n}\nfloat linearToRelativeLuminance( const in vec3 color ) {\n\tvec3 weights = vec3( 0.2126, 0.7152, 0.0722 );\n\treturn dot( weights, color.rgb );\n}\nbool isPerspectiveMatrix( mat4 m ) {\n\treturn m[ 2 ][ 3 ] == - 1.0;\n}\nvec2 equirectUv( in vec3 dir ) {\n\tfloat u = atan( dir.z, dir.x ) * RECIPROCAL_PI2 + 0.5;\n\tfloat v = asin( clamp( dir.y, - 1.0, 1.0 ) ) * RECIPROCAL_PI + 0.5;\n\treturn vec2( u, v );\n}", +cube_uv_reflection_fragment:"#ifdef ENVMAP_TYPE_CUBE_UV\n\t#define cubeUV_maxMipLevel 8.0\n\t#define cubeUV_minMipLevel 4.0\n\t#define cubeUV_maxTileSize 256.0\n\t#define cubeUV_minTileSize 16.0\n\tfloat getFace( vec3 direction ) {\n\t\tvec3 absDirection = abs( direction );\n\t\tfloat face = - 1.0;\n\t\tif ( absDirection.x > absDirection.z ) {\n\t\t\tif ( absDirection.x > absDirection.y )\n\t\t\t\tface = direction.x > 0.0 ? 0.0 : 3.0;\n\t\t\telse\n\t\t\t\tface = direction.y > 0.0 ? 1.0 : 4.0;\n\t\t} else {\n\t\t\tif ( absDirection.z > absDirection.y )\n\t\t\t\tface = direction.z > 0.0 ? 2.0 : 5.0;\n\t\t\telse\n\t\t\t\tface = direction.y > 0.0 ? 1.0 : 4.0;\n\t\t}\n\t\treturn face;\n\t}\n\tvec2 getUV( vec3 direction, float face ) {\n\t\tvec2 uv;\n\t\tif ( face == 0.0 ) {\n\t\t\tuv = vec2( direction.z, direction.y ) / abs( direction.x );\n\t\t} else if ( face == 1.0 ) {\n\t\t\tuv = vec2( - direction.x, - direction.z ) / abs( direction.y );\n\t\t} else if ( face == 2.0 ) {\n\t\t\tuv = vec2( - direction.x, direction.y ) / abs( direction.z );\n\t\t} else if ( face == 3.0 ) {\n\t\t\tuv = vec2( - direction.z, direction.y ) / abs( direction.x );\n\t\t} else if ( face == 4.0 ) {\n\t\t\tuv = vec2( - direction.x, direction.z ) / abs( direction.y );\n\t\t} else {\n\t\t\tuv = vec2( direction.x, direction.y ) / abs( direction.z );\n\t\t}\n\t\treturn 0.5 * ( uv + 1.0 );\n\t}\n\tvec3 bilinearCubeUV( sampler2D envMap, vec3 direction, float mipInt ) {\n\t\tfloat face = getFace( direction );\n\t\tfloat filterInt = max( cubeUV_minMipLevel - mipInt, 0.0 );\n\t\tmipInt = max( mipInt, cubeUV_minMipLevel );\n\t\tfloat faceSize = exp2( mipInt );\n\t\tfloat texelSize = 1.0 / ( 3.0 * cubeUV_maxTileSize );\n\t\tvec2 uv = getUV( direction, face ) * ( faceSize - 1.0 );\n\t\tvec2 f = fract( uv );\n\t\tuv += 0.5 - f;\n\t\tif ( face > 2.0 ) {\n\t\t\tuv.y += faceSize;\n\t\t\tface -= 3.0;\n\t\t}\n\t\tuv.x += face * faceSize;\n\t\tif ( mipInt < cubeUV_maxMipLevel ) {\n\t\t\tuv.y += 2.0 * cubeUV_maxTileSize;\n\t\t}\n\t\tuv.y += filterInt * 2.0 * cubeUV_minTileSize;\n\t\tuv.x += 3.0 * max( 0.0, cubeUV_maxTileSize - 2.0 * faceSize );\n\t\tuv *= texelSize;\n\t\tvec3 tl = envMapTexelToLinear( texture2D( envMap, uv ) ).rgb;\n\t\tuv.x += texelSize;\n\t\tvec3 tr = envMapTexelToLinear( texture2D( envMap, uv ) ).rgb;\n\t\tuv.y += texelSize;\n\t\tvec3 br = envMapTexelToLinear( texture2D( envMap, uv ) ).rgb;\n\t\tuv.x -= texelSize;\n\t\tvec3 bl = envMapTexelToLinear( texture2D( envMap, uv ) ).rgb;\n\t\tvec3 tm = mix( tl, tr, f.x );\n\t\tvec3 bm = mix( bl, br, f.x );\n\t\treturn mix( tm, bm, f.y );\n\t}\n\t#define r0 1.0\n\t#define v0 0.339\n\t#define m0 - 2.0\n\t#define r1 0.8\n\t#define v1 0.276\n\t#define m1 - 1.0\n\t#define r4 0.4\n\t#define v4 0.046\n\t#define m4 2.0\n\t#define r5 0.305\n\t#define v5 0.016\n\t#define m5 3.0\n\t#define r6 0.21\n\t#define v6 0.0038\n\t#define m6 4.0\n\tfloat roughnessToMip( float roughness ) {\n\t\tfloat mip = 0.0;\n\t\tif ( roughness >= r1 ) {\n\t\t\tmip = ( r0 - roughness ) * ( m1 - m0 ) / ( r0 - r1 ) + m0;\n\t\t} else if ( roughness >= r4 ) {\n\t\t\tmip = ( r1 - roughness ) * ( m4 - m1 ) / ( r1 - r4 ) + m1;\n\t\t} else if ( roughness >= r5 ) {\n\t\t\tmip = ( r4 - roughness ) * ( m5 - m4 ) / ( r4 - r5 ) + m4;\n\t\t} else if ( roughness >= r6 ) {\n\t\t\tmip = ( r5 - roughness ) * ( m6 - m5 ) / ( r5 - r6 ) + m5;\n\t\t} else {\n\t\t\tmip = - 2.0 * log2( 1.16 * roughness );\t\t}\n\t\treturn mip;\n\t}\n\tvec4 textureCubeUV( sampler2D envMap, vec3 sampleDir, float roughness ) {\n\t\tfloat mip = clamp( roughnessToMip( roughness ), m0, cubeUV_maxMipLevel );\n\t\tfloat mipF = fract( mip );\n\t\tfloat mipInt = floor( mip );\n\t\tvec3 color0 = bilinearCubeUV( envMap, sampleDir, mipInt );\n\t\tif ( mipF == 0.0 ) {\n\t\t\treturn vec4( color0, 1.0 );\n\t\t} else {\n\t\t\tvec3 color1 = bilinearCubeUV( envMap, sampleDir, mipInt + 1.0 );\n\t\t\treturn vec4( mix( color0, color1, mipF ), 1.0 );\n\t\t}\n\t}\n#endif", +defaultnormal_vertex:"vec3 transformedNormal = objectNormal;\n#ifdef USE_INSTANCING\n\tmat3 m = mat3( instanceMatrix );\n\ttransformedNormal /= vec3( dot( m[ 0 ], m[ 0 ] ), dot( m[ 1 ], m[ 1 ] ), dot( m[ 2 ], m[ 2 ] ) );\n\ttransformedNormal = m * transformedNormal;\n#endif\ntransformedNormal = normalMatrix * transformedNormal;\n#ifdef FLIP_SIDED\n\ttransformedNormal = - transformedNormal;\n#endif\n#ifdef USE_TANGENT\n\tvec3 transformedTangent = ( modelViewMatrix * vec4( objectTangent, 0.0 ) ).xyz;\n\t#ifdef FLIP_SIDED\n\t\ttransformedTangent = - transformedTangent;\n\t#endif\n#endif", +displacementmap_pars_vertex:"#ifdef USE_DISPLACEMENTMAP\n\tuniform sampler2D displacementMap;\n\tuniform float displacementScale;\n\tuniform float displacementBias;\n#endif",displacementmap_vertex:"#ifdef USE_DISPLACEMENTMAP\n\ttransformed += normalize( objectNormal ) * ( texture2D( displacementMap, vUv ).x * displacementScale + displacementBias );\n#endif",emissivemap_fragment:"#ifdef USE_EMISSIVEMAP\n\tvec4 emissiveColor = texture2D( emissiveMap, vUv );\n\temissiveColor.rgb = emissiveMapTexelToLinear( emissiveColor ).rgb;\n\ttotalEmissiveRadiance *= emissiveColor.rgb;\n#endif", +emissivemap_pars_fragment:"#ifdef USE_EMISSIVEMAP\n\tuniform sampler2D emissiveMap;\n#endif",encodings_fragment:"gl_FragColor = linearToOutputTexel( gl_FragColor );",encodings_pars_fragment:"\nvec4 LinearToLinear( in vec4 value ) {\n\treturn value;\n}\nvec4 GammaToLinear( in vec4 value, in float gammaFactor ) {\n\treturn vec4( pow( value.rgb, vec3( gammaFactor ) ), value.a );\n}\nvec4 LinearToGamma( in vec4 value, in float gammaFactor ) {\n\treturn vec4( pow( value.rgb, vec3( 1.0 / gammaFactor ) ), value.a );\n}\nvec4 sRGBToLinear( in vec4 value ) {\n\treturn vec4( mix( pow( value.rgb * 0.9478672986 + vec3( 0.0521327014 ), vec3( 2.4 ) ), value.rgb * 0.0773993808, vec3( lessThanEqual( value.rgb, vec3( 0.04045 ) ) ) ), value.a );\n}\nvec4 LinearTosRGB( in vec4 value ) {\n\treturn vec4( mix( pow( value.rgb, vec3( 0.41666 ) ) * 1.055 - vec3( 0.055 ), value.rgb * 12.92, vec3( lessThanEqual( value.rgb, vec3( 0.0031308 ) ) ) ), value.a );\n}\nvec4 RGBEToLinear( in vec4 value ) {\n\treturn vec4( value.rgb * exp2( value.a * 255.0 - 128.0 ), 1.0 );\n}\nvec4 LinearToRGBE( in vec4 value ) {\n\tfloat maxComponent = max( max( value.r, value.g ), value.b );\n\tfloat fExp = clamp( ceil( log2( maxComponent ) ), -128.0, 127.0 );\n\treturn vec4( value.rgb / exp2( fExp ), ( fExp + 128.0 ) / 255.0 );\n}\nvec4 RGBMToLinear( in vec4 value, in float maxRange ) {\n\treturn vec4( value.rgb * value.a * maxRange, 1.0 );\n}\nvec4 LinearToRGBM( in vec4 value, in float maxRange ) {\n\tfloat maxRGB = max( value.r, max( value.g, value.b ) );\n\tfloat M = clamp( maxRGB / maxRange, 0.0, 1.0 );\n\tM = ceil( M * 255.0 ) / 255.0;\n\treturn vec4( value.rgb / ( M * maxRange ), M );\n}\nvec4 RGBDToLinear( in vec4 value, in float maxRange ) {\n\treturn vec4( value.rgb * ( ( maxRange / 255.0 ) / value.a ), 1.0 );\n}\nvec4 LinearToRGBD( in vec4 value, in float maxRange ) {\n\tfloat maxRGB = max( value.r, max( value.g, value.b ) );\n\tfloat D = max( maxRange / maxRGB, 1.0 );\n\tD = clamp( floor( D ) / 255.0, 0.0, 1.0 );\n\treturn vec4( value.rgb * ( D * ( 255.0 / maxRange ) ), D );\n}\nconst mat3 cLogLuvM = mat3( 0.2209, 0.3390, 0.4184, 0.1138, 0.6780, 0.7319, 0.0102, 0.1130, 0.2969 );\nvec4 LinearToLogLuv( in vec4 value ) {\n\tvec3 Xp_Y_XYZp = cLogLuvM * value.rgb;\n\tXp_Y_XYZp = max( Xp_Y_XYZp, vec3( 1e-6, 1e-6, 1e-6 ) );\n\tvec4 vResult;\n\tvResult.xy = Xp_Y_XYZp.xy / Xp_Y_XYZp.z;\n\tfloat Le = 2.0 * log2(Xp_Y_XYZp.y) + 127.0;\n\tvResult.w = fract( Le );\n\tvResult.z = ( Le - ( floor( vResult.w * 255.0 ) ) / 255.0 ) / 255.0;\n\treturn vResult;\n}\nconst mat3 cLogLuvInverseM = mat3( 6.0014, -2.7008, -1.7996, -1.3320, 3.1029, -5.7721, 0.3008, -1.0882, 5.6268 );\nvec4 LogLuvToLinear( in vec4 value ) {\n\tfloat Le = value.z * 255.0 + value.w;\n\tvec3 Xp_Y_XYZp;\n\tXp_Y_XYZp.y = exp2( ( Le - 127.0 ) / 2.0 );\n\tXp_Y_XYZp.z = Xp_Y_XYZp.y / value.y;\n\tXp_Y_XYZp.x = value.x * Xp_Y_XYZp.z;\n\tvec3 vRGB = cLogLuvInverseM * Xp_Y_XYZp.rgb;\n\treturn vec4( max( vRGB, 0.0 ), 1.0 );\n}", +envmap_fragment:"#ifdef USE_ENVMAP\n\t#ifdef ENV_WORLDPOS\n\t\tvec3 cameraToFrag;\n\t\tif ( isOrthographic ) {\n\t\t\tcameraToFrag = normalize( vec3( - viewMatrix[ 0 ][ 2 ], - viewMatrix[ 1 ][ 2 ], - viewMatrix[ 2 ][ 2 ] ) );\n\t\t} else {\n\t\t\tcameraToFrag = normalize( vWorldPosition - cameraPosition );\n\t\t}\n\t\tvec3 worldNormal = inverseTransformDirection( normal, viewMatrix );\n\t\t#ifdef ENVMAP_MODE_REFLECTION\n\t\t\tvec3 reflectVec = reflect( cameraToFrag, worldNormal );\n\t\t#else\n\t\t\tvec3 reflectVec = refract( cameraToFrag, worldNormal, refractionRatio );\n\t\t#endif\n\t#else\n\t\tvec3 reflectVec = vReflect;\n\t#endif\n\t#ifdef ENVMAP_TYPE_CUBE\n\t\tvec4 envColor = textureCube( envMap, vec3( flipEnvMap * reflectVec.x, reflectVec.yz ) );\n\t#elif defined( ENVMAP_TYPE_CUBE_UV )\n\t\tvec4 envColor = textureCubeUV( envMap, reflectVec, 0.0 );\n\t#else\n\t\tvec4 envColor = vec4( 0.0 );\n\t#endif\n\t#ifndef ENVMAP_TYPE_CUBE_UV\n\t\tenvColor = envMapTexelToLinear( envColor );\n\t#endif\n\t#ifdef ENVMAP_BLENDING_MULTIPLY\n\t\toutgoingLight = mix( outgoingLight, outgoingLight * envColor.xyz, specularStrength * reflectivity );\n\t#elif defined( ENVMAP_BLENDING_MIX )\n\t\toutgoingLight = mix( outgoingLight, envColor.xyz, specularStrength * reflectivity );\n\t#elif defined( ENVMAP_BLENDING_ADD )\n\t\toutgoingLight += envColor.xyz * specularStrength * reflectivity;\n\t#endif\n#endif", +envmap_common_pars_fragment:"#ifdef USE_ENVMAP\n\tuniform float envMapIntensity;\n\tuniform float flipEnvMap;\n\tuniform int maxMipLevel;\n\t#ifdef ENVMAP_TYPE_CUBE\n\t\tuniform samplerCube envMap;\n\t#else\n\t\tuniform sampler2D envMap;\n\t#endif\n\t\n#endif",envmap_pars_fragment:"#ifdef USE_ENVMAP\n\tuniform float reflectivity;\n\t#if defined( USE_BUMPMAP ) || defined( USE_NORMALMAP ) || defined( PHONG )\n\t\t#define ENV_WORLDPOS\n\t#endif\n\t#ifdef ENV_WORLDPOS\n\t\tvarying vec3 vWorldPosition;\n\t\tuniform float refractionRatio;\n\t#else\n\t\tvarying vec3 vReflect;\n\t#endif\n#endif", +envmap_pars_vertex:"#ifdef USE_ENVMAP\n\t#if defined( USE_BUMPMAP ) || defined( USE_NORMALMAP ) ||defined( PHONG )\n\t\t#define ENV_WORLDPOS\n\t#endif\n\t#ifdef ENV_WORLDPOS\n\t\t\n\t\tvarying vec3 vWorldPosition;\n\t#else\n\t\tvarying vec3 vReflect;\n\t\tuniform float refractionRatio;\n\t#endif\n#endif",envmap_physical_pars_fragment:"#if defined( USE_ENVMAP )\n\t#ifdef ENVMAP_MODE_REFRACTION\n\t\tuniform float refractionRatio;\n\t#endif\n\tvec3 getLightProbeIndirectIrradiance( const in GeometricContext geometry, const in int maxMIPLevel ) {\n\t\tvec3 worldNormal = inverseTransformDirection( geometry.normal, viewMatrix );\n\t\t#ifdef ENVMAP_TYPE_CUBE\n\t\t\tvec3 queryVec = vec3( flipEnvMap * worldNormal.x, worldNormal.yz );\n\t\t\t#ifdef TEXTURE_LOD_EXT\n\t\t\t\tvec4 envMapColor = textureCubeLodEXT( envMap, queryVec, float( maxMIPLevel ) );\n\t\t\t#else\n\t\t\t\tvec4 envMapColor = textureCube( envMap, queryVec, float( maxMIPLevel ) );\n\t\t\t#endif\n\t\t\tenvMapColor.rgb = envMapTexelToLinear( envMapColor ).rgb;\n\t\t#elif defined( ENVMAP_TYPE_CUBE_UV )\n\t\t\tvec4 envMapColor = textureCubeUV( envMap, worldNormal, 1.0 );\n\t\t#else\n\t\t\tvec4 envMapColor = vec4( 0.0 );\n\t\t#endif\n\t\treturn PI * envMapColor.rgb * envMapIntensity;\n\t}\n\tfloat getSpecularMIPLevel( const in float roughness, const in int maxMIPLevel ) {\n\t\tfloat maxMIPLevelScalar = float( maxMIPLevel );\n\t\tfloat sigma = PI * roughness * roughness / ( 1.0 + roughness );\n\t\tfloat desiredMIPLevel = maxMIPLevelScalar + log2( sigma );\n\t\treturn clamp( desiredMIPLevel, 0.0, maxMIPLevelScalar );\n\t}\n\tvec3 getLightProbeIndirectRadiance( const in vec3 viewDir, const in vec3 normal, const in float roughness, const in int maxMIPLevel ) {\n\t\t#ifdef ENVMAP_MODE_REFLECTION\n\t\t\tvec3 reflectVec = reflect( -viewDir, normal );\n\t\t\treflectVec = normalize( mix( reflectVec, normal, roughness * roughness) );\n\t\t#else\n\t\t\tvec3 reflectVec = refract( -viewDir, normal, refractionRatio );\n\t\t#endif\n\t\treflectVec = inverseTransformDirection( reflectVec, viewMatrix );\n\t\tfloat specularMIPLevel = getSpecularMIPLevel( roughness, maxMIPLevel );\n\t\t#ifdef ENVMAP_TYPE_CUBE\n\t\t\tvec3 queryReflectVec = vec3( flipEnvMap * reflectVec.x, reflectVec.yz );\n\t\t\t#ifdef TEXTURE_LOD_EXT\n\t\t\t\tvec4 envMapColor = textureCubeLodEXT( envMap, queryReflectVec, specularMIPLevel );\n\t\t\t#else\n\t\t\t\tvec4 envMapColor = textureCube( envMap, queryReflectVec, specularMIPLevel );\n\t\t\t#endif\n\t\t\tenvMapColor.rgb = envMapTexelToLinear( envMapColor ).rgb;\n\t\t#elif defined( ENVMAP_TYPE_CUBE_UV )\n\t\t\tvec4 envMapColor = textureCubeUV( envMap, reflectVec, roughness );\n\t\t#endif\n\t\treturn envMapColor.rgb * envMapIntensity;\n\t}\n#endif", +envmap_vertex:"#ifdef USE_ENVMAP\n\t#ifdef ENV_WORLDPOS\n\t\tvWorldPosition = worldPosition.xyz;\n\t#else\n\t\tvec3 cameraToVertex;\n\t\tif ( isOrthographic ) {\n\t\t\tcameraToVertex = normalize( vec3( - viewMatrix[ 0 ][ 2 ], - viewMatrix[ 1 ][ 2 ], - viewMatrix[ 2 ][ 2 ] ) );\n\t\t} else {\n\t\t\tcameraToVertex = normalize( worldPosition.xyz - cameraPosition );\n\t\t}\n\t\tvec3 worldNormal = inverseTransformDirection( transformedNormal, viewMatrix );\n\t\t#ifdef ENVMAP_MODE_REFLECTION\n\t\t\tvReflect = reflect( cameraToVertex, worldNormal );\n\t\t#else\n\t\t\tvReflect = refract( cameraToVertex, worldNormal, refractionRatio );\n\t\t#endif\n\t#endif\n#endif", +fog_vertex:"#ifdef USE_FOG\n\tfogDepth = - mvPosition.z;\n#endif",fog_pars_vertex:"#ifdef USE_FOG\n\tvarying float fogDepth;\n#endif",fog_fragment:"#ifdef USE_FOG\n\t#ifdef FOG_EXP2\n\t\tfloat fogFactor = 1.0 - exp( - fogDensity * fogDensity * fogDepth * fogDepth );\n\t#else\n\t\tfloat fogFactor = smoothstep( fogNear, fogFar, fogDepth );\n\t#endif\n\tgl_FragColor.rgb = mix( gl_FragColor.rgb, fogColor, fogFactor );\n#endif",fog_pars_fragment:"#ifdef USE_FOG\n\tuniform vec3 fogColor;\n\tvarying float fogDepth;\n\t#ifdef FOG_EXP2\n\t\tuniform float fogDensity;\n\t#else\n\t\tuniform float fogNear;\n\t\tuniform float fogFar;\n\t#endif\n#endif", +gradientmap_pars_fragment:"#ifdef USE_GRADIENTMAP\n\tuniform sampler2D gradientMap;\n#endif\nvec3 getGradientIrradiance( vec3 normal, vec3 lightDirection ) {\n\tfloat dotNL = dot( normal, lightDirection );\n\tvec2 coord = vec2( dotNL * 0.5 + 0.5, 0.0 );\n\t#ifdef USE_GRADIENTMAP\n\t\treturn texture2D( gradientMap, coord ).rgb;\n\t#else\n\t\treturn ( coord.x < 0.7 ) ? vec3( 0.7 ) : vec3( 1.0 );\n\t#endif\n}",lightmap_fragment:"#ifdef USE_LIGHTMAP\n\tvec4 lightMapTexel= texture2D( lightMap, vUv2 );\n\treflectedLight.indirectDiffuse += PI * lightMapTexelToLinear( lightMapTexel ).rgb * lightMapIntensity;\n#endif", +lightmap_pars_fragment:"#ifdef USE_LIGHTMAP\n\tuniform sampler2D lightMap;\n\tuniform float lightMapIntensity;\n#endif",lights_lambert_vertex:"vec3 diffuse = vec3( 1.0 );\nGeometricContext geometry;\ngeometry.position = mvPosition.xyz;\ngeometry.normal = normalize( transformedNormal );\ngeometry.viewDir = ( isOrthographic ) ? vec3( 0, 0, 1 ) : normalize( -mvPosition.xyz );\nGeometricContext backGeometry;\nbackGeometry.position = geometry.position;\nbackGeometry.normal = -geometry.normal;\nbackGeometry.viewDir = geometry.viewDir;\nvLightFront = vec3( 0.0 );\nvIndirectFront = vec3( 0.0 );\n#ifdef DOUBLE_SIDED\n\tvLightBack = vec3( 0.0 );\n\tvIndirectBack = vec3( 0.0 );\n#endif\nIncidentLight directLight;\nfloat dotNL;\nvec3 directLightColor_Diffuse;\nvIndirectFront += getAmbientLightIrradiance( ambientLightColor );\nvIndirectFront += getLightProbeIrradiance( lightProbe, geometry );\n#ifdef DOUBLE_SIDED\n\tvIndirectBack += getAmbientLightIrradiance( ambientLightColor );\n\tvIndirectBack += getLightProbeIrradiance( lightProbe, backGeometry );\n#endif\n#if NUM_POINT_LIGHTS > 0\n\t#pragma unroll_loop_start\n\tfor ( int i = 0; i < NUM_POINT_LIGHTS; i ++ ) {\n\t\tgetPointDirectLightIrradiance( pointLights[ i ], geometry, directLight );\n\t\tdotNL = dot( geometry.normal, directLight.direction );\n\t\tdirectLightColor_Diffuse = PI * directLight.color;\n\t\tvLightFront += saturate( dotNL ) * directLightColor_Diffuse;\n\t\t#ifdef DOUBLE_SIDED\n\t\t\tvLightBack += saturate( -dotNL ) * directLightColor_Diffuse;\n\t\t#endif\n\t}\n\t#pragma unroll_loop_end\n#endif\n#if NUM_SPOT_LIGHTS > 0\n\t#pragma unroll_loop_start\n\tfor ( int i = 0; i < NUM_SPOT_LIGHTS; i ++ ) {\n\t\tgetSpotDirectLightIrradiance( spotLights[ i ], geometry, directLight );\n\t\tdotNL = dot( geometry.normal, directLight.direction );\n\t\tdirectLightColor_Diffuse = PI * directLight.color;\n\t\tvLightFront += saturate( dotNL ) * directLightColor_Diffuse;\n\t\t#ifdef DOUBLE_SIDED\n\t\t\tvLightBack += saturate( -dotNL ) * directLightColor_Diffuse;\n\t\t#endif\n\t}\n\t#pragma unroll_loop_end\n#endif\n#if NUM_DIR_LIGHTS > 0\n\t#pragma unroll_loop_start\n\tfor ( int i = 0; i < NUM_DIR_LIGHTS; i ++ ) {\n\t\tgetDirectionalDirectLightIrradiance( directionalLights[ i ], geometry, directLight );\n\t\tdotNL = dot( geometry.normal, directLight.direction );\n\t\tdirectLightColor_Diffuse = PI * directLight.color;\n\t\tvLightFront += saturate( dotNL ) * directLightColor_Diffuse;\n\t\t#ifdef DOUBLE_SIDED\n\t\t\tvLightBack += saturate( -dotNL ) * directLightColor_Diffuse;\n\t\t#endif\n\t}\n\t#pragma unroll_loop_end\n#endif\n#if NUM_HEMI_LIGHTS > 0\n\t#pragma unroll_loop_start\n\tfor ( int i = 0; i < NUM_HEMI_LIGHTS; i ++ ) {\n\t\tvIndirectFront += getHemisphereLightIrradiance( hemisphereLights[ i ], geometry );\n\t\t#ifdef DOUBLE_SIDED\n\t\t\tvIndirectBack += getHemisphereLightIrradiance( hemisphereLights[ i ], backGeometry );\n\t\t#endif\n\t}\n\t#pragma unroll_loop_end\n#endif", +lights_pars_begin:"uniform bool receiveShadow;\nuniform vec3 ambientLightColor;\nuniform vec3 lightProbe[ 9 ];\nvec3 shGetIrradianceAt( in vec3 normal, in vec3 shCoefficients[ 9 ] ) {\n\tfloat x = normal.x, y = normal.y, z = normal.z;\n\tvec3 result = shCoefficients[ 0 ] * 0.886227;\n\tresult += shCoefficients[ 1 ] * 2.0 * 0.511664 * y;\n\tresult += shCoefficients[ 2 ] * 2.0 * 0.511664 * z;\n\tresult += shCoefficients[ 3 ] * 2.0 * 0.511664 * x;\n\tresult += shCoefficients[ 4 ] * 2.0 * 0.429043 * x * y;\n\tresult += shCoefficients[ 5 ] * 2.0 * 0.429043 * y * z;\n\tresult += shCoefficients[ 6 ] * ( 0.743125 * z * z - 0.247708 );\n\tresult += shCoefficients[ 7 ] * 2.0 * 0.429043 * x * z;\n\tresult += shCoefficients[ 8 ] * 0.429043 * ( x * x - y * y );\n\treturn result;\n}\nvec3 getLightProbeIrradiance( const in vec3 lightProbe[ 9 ], const in GeometricContext geometry ) {\n\tvec3 worldNormal = inverseTransformDirection( geometry.normal, viewMatrix );\n\tvec3 irradiance = shGetIrradianceAt( worldNormal, lightProbe );\n\treturn irradiance;\n}\nvec3 getAmbientLightIrradiance( const in vec3 ambientLightColor ) {\n\tvec3 irradiance = ambientLightColor;\n\t#ifndef PHYSICALLY_CORRECT_LIGHTS\n\t\tirradiance *= PI;\n\t#endif\n\treturn irradiance;\n}\n#if NUM_DIR_LIGHTS > 0\n\tstruct DirectionalLight {\n\t\tvec3 direction;\n\t\tvec3 color;\n\t};\n\tuniform DirectionalLight directionalLights[ NUM_DIR_LIGHTS ];\n\tvoid getDirectionalDirectLightIrradiance( const in DirectionalLight directionalLight, const in GeometricContext geometry, out IncidentLight directLight ) {\n\t\tdirectLight.color = directionalLight.color;\n\t\tdirectLight.direction = directionalLight.direction;\n\t\tdirectLight.visible = true;\n\t}\n#endif\n#if NUM_POINT_LIGHTS > 0\n\tstruct PointLight {\n\t\tvec3 position;\n\t\tvec3 color;\n\t\tfloat distance;\n\t\tfloat decay;\n\t};\n\tuniform PointLight pointLights[ NUM_POINT_LIGHTS ];\n\tvoid getPointDirectLightIrradiance( const in PointLight pointLight, const in GeometricContext geometry, out IncidentLight directLight ) {\n\t\tvec3 lVector = pointLight.position - geometry.position;\n\t\tdirectLight.direction = normalize( lVector );\n\t\tfloat lightDistance = length( lVector );\n\t\tdirectLight.color = pointLight.color;\n\t\tdirectLight.color *= punctualLightIntensityToIrradianceFactor( lightDistance, pointLight.distance, pointLight.decay );\n\t\tdirectLight.visible = ( directLight.color != vec3( 0.0 ) );\n\t}\n#endif\n#if NUM_SPOT_LIGHTS > 0\n\tstruct SpotLight {\n\t\tvec3 position;\n\t\tvec3 direction;\n\t\tvec3 color;\n\t\tfloat distance;\n\t\tfloat decay;\n\t\tfloat coneCos;\n\t\tfloat penumbraCos;\n\t};\n\tuniform SpotLight spotLights[ NUM_SPOT_LIGHTS ];\n\tvoid getSpotDirectLightIrradiance( const in SpotLight spotLight, const in GeometricContext geometry, out IncidentLight directLight ) {\n\t\tvec3 lVector = spotLight.position - geometry.position;\n\t\tdirectLight.direction = normalize( lVector );\n\t\tfloat lightDistance = length( lVector );\n\t\tfloat angleCos = dot( directLight.direction, spotLight.direction );\n\t\tif ( angleCos > spotLight.coneCos ) {\n\t\t\tfloat spotEffect = smoothstep( spotLight.coneCos, spotLight.penumbraCos, angleCos );\n\t\t\tdirectLight.color = spotLight.color;\n\t\t\tdirectLight.color *= spotEffect * punctualLightIntensityToIrradianceFactor( lightDistance, spotLight.distance, spotLight.decay );\n\t\t\tdirectLight.visible = true;\n\t\t} else {\n\t\t\tdirectLight.color = vec3( 0.0 );\n\t\t\tdirectLight.visible = false;\n\t\t}\n\t}\n#endif\n#if NUM_RECT_AREA_LIGHTS > 0\n\tstruct RectAreaLight {\n\t\tvec3 color;\n\t\tvec3 position;\n\t\tvec3 halfWidth;\n\t\tvec3 halfHeight;\n\t};\n\tuniform sampler2D ltc_1;\tuniform sampler2D ltc_2;\n\tuniform RectAreaLight rectAreaLights[ NUM_RECT_AREA_LIGHTS ];\n#endif\n#if NUM_HEMI_LIGHTS > 0\n\tstruct HemisphereLight {\n\t\tvec3 direction;\n\t\tvec3 skyColor;\n\t\tvec3 groundColor;\n\t};\n\tuniform HemisphereLight hemisphereLights[ NUM_HEMI_LIGHTS ];\n\tvec3 getHemisphereLightIrradiance( const in HemisphereLight hemiLight, const in GeometricContext geometry ) {\n\t\tfloat dotNL = dot( geometry.normal, hemiLight.direction );\n\t\tfloat hemiDiffuseWeight = 0.5 * dotNL + 0.5;\n\t\tvec3 irradiance = mix( hemiLight.groundColor, hemiLight.skyColor, hemiDiffuseWeight );\n\t\t#ifndef PHYSICALLY_CORRECT_LIGHTS\n\t\t\tirradiance *= PI;\n\t\t#endif\n\t\treturn irradiance;\n\t}\n#endif", +lights_toon_fragment:"ToonMaterial material;\nmaterial.diffuseColor = diffuseColor.rgb;",lights_toon_pars_fragment:"varying vec3 vViewPosition;\n#ifndef FLAT_SHADED\n\tvarying vec3 vNormal;\n#endif\nstruct ToonMaterial {\n\tvec3 diffuseColor;\n};\nvoid RE_Direct_Toon( const in IncidentLight directLight, const in GeometricContext geometry, const in ToonMaterial material, inout ReflectedLight reflectedLight ) {\n\tvec3 irradiance = getGradientIrradiance( geometry.normal, directLight.direction ) * directLight.color;\n\t#ifndef PHYSICALLY_CORRECT_LIGHTS\n\t\tirradiance *= PI;\n\t#endif\n\treflectedLight.directDiffuse += irradiance * BRDF_Diffuse_Lambert( material.diffuseColor );\n}\nvoid RE_IndirectDiffuse_Toon( const in vec3 irradiance, const in GeometricContext geometry, const in ToonMaterial material, inout ReflectedLight reflectedLight ) {\n\treflectedLight.indirectDiffuse += irradiance * BRDF_Diffuse_Lambert( material.diffuseColor );\n}\n#define RE_Direct\t\t\t\tRE_Direct_Toon\n#define RE_IndirectDiffuse\t\tRE_IndirectDiffuse_Toon\n#define Material_LightProbeLOD( material )\t(0)", +lights_phong_fragment:"BlinnPhongMaterial material;\nmaterial.diffuseColor = diffuseColor.rgb;\nmaterial.specularColor = specular;\nmaterial.specularShininess = shininess;\nmaterial.specularStrength = specularStrength;",lights_phong_pars_fragment:"varying vec3 vViewPosition;\n#ifndef FLAT_SHADED\n\tvarying vec3 vNormal;\n#endif\nstruct BlinnPhongMaterial {\n\tvec3 diffuseColor;\n\tvec3 specularColor;\n\tfloat specularShininess;\n\tfloat specularStrength;\n};\nvoid RE_Direct_BlinnPhong( const in IncidentLight directLight, const in GeometricContext geometry, const in BlinnPhongMaterial material, inout ReflectedLight reflectedLight ) {\n\tfloat dotNL = saturate( dot( geometry.normal, directLight.direction ) );\n\tvec3 irradiance = dotNL * directLight.color;\n\t#ifndef PHYSICALLY_CORRECT_LIGHTS\n\t\tirradiance *= PI;\n\t#endif\n\treflectedLight.directDiffuse += irradiance * BRDF_Diffuse_Lambert( material.diffuseColor );\n\treflectedLight.directSpecular += irradiance * BRDF_Specular_BlinnPhong( directLight, geometry, material.specularColor, material.specularShininess ) * material.specularStrength;\n}\nvoid RE_IndirectDiffuse_BlinnPhong( const in vec3 irradiance, const in GeometricContext geometry, const in BlinnPhongMaterial material, inout ReflectedLight reflectedLight ) {\n\treflectedLight.indirectDiffuse += irradiance * BRDF_Diffuse_Lambert( material.diffuseColor );\n}\n#define RE_Direct\t\t\t\tRE_Direct_BlinnPhong\n#define RE_IndirectDiffuse\t\tRE_IndirectDiffuse_BlinnPhong\n#define Material_LightProbeLOD( material )\t(0)", +lights_physical_fragment:"PhysicalMaterial material;\nmaterial.diffuseColor = diffuseColor.rgb * ( 1.0 - metalnessFactor );\nvec3 dxy = max( abs( dFdx( geometryNormal ) ), abs( dFdy( geometryNormal ) ) );\nfloat geometryRoughness = max( max( dxy.x, dxy.y ), dxy.z );\nmaterial.specularRoughness = max( roughnessFactor, 0.0525 );material.specularRoughness += geometryRoughness;\nmaterial.specularRoughness = min( material.specularRoughness, 1.0 );\n#ifdef REFLECTIVITY\n\tmaterial.specularColor = mix( vec3( MAXIMUM_SPECULAR_COEFFICIENT * pow2( reflectivity ) ), diffuseColor.rgb, metalnessFactor );\n#else\n\tmaterial.specularColor = mix( vec3( DEFAULT_SPECULAR_COEFFICIENT ), diffuseColor.rgb, metalnessFactor );\n#endif\n#ifdef CLEARCOAT\n\tmaterial.clearcoat = clearcoat;\n\tmaterial.clearcoatRoughness = clearcoatRoughness;\n\t#ifdef USE_CLEARCOATMAP\n\t\tmaterial.clearcoat *= texture2D( clearcoatMap, vUv ).x;\n\t#endif\n\t#ifdef USE_CLEARCOAT_ROUGHNESSMAP\n\t\tmaterial.clearcoatRoughness *= texture2D( clearcoatRoughnessMap, vUv ).y;\n\t#endif\n\tmaterial.clearcoat = saturate( material.clearcoat );\tmaterial.clearcoatRoughness = max( material.clearcoatRoughness, 0.0525 );\n\tmaterial.clearcoatRoughness += geometryRoughness;\n\tmaterial.clearcoatRoughness = min( material.clearcoatRoughness, 1.0 );\n#endif\n#ifdef USE_SHEEN\n\tmaterial.sheenColor = sheen;\n#endif", +lights_physical_pars_fragment:"struct PhysicalMaterial {\n\tvec3 diffuseColor;\n\tfloat specularRoughness;\n\tvec3 specularColor;\n#ifdef CLEARCOAT\n\tfloat clearcoat;\n\tfloat clearcoatRoughness;\n#endif\n#ifdef USE_SHEEN\n\tvec3 sheenColor;\n#endif\n};\n#define MAXIMUM_SPECULAR_COEFFICIENT 0.16\n#define DEFAULT_SPECULAR_COEFFICIENT 0.04\nfloat clearcoatDHRApprox( const in float roughness, const in float dotNL ) {\n\treturn DEFAULT_SPECULAR_COEFFICIENT + ( 1.0 - DEFAULT_SPECULAR_COEFFICIENT ) * ( pow( 1.0 - dotNL, 5.0 ) * pow( 1.0 - roughness, 2.0 ) );\n}\n#if NUM_RECT_AREA_LIGHTS > 0\n\tvoid RE_Direct_RectArea_Physical( const in RectAreaLight rectAreaLight, const in GeometricContext geometry, const in PhysicalMaterial material, inout ReflectedLight reflectedLight ) {\n\t\tvec3 normal = geometry.normal;\n\t\tvec3 viewDir = geometry.viewDir;\n\t\tvec3 position = geometry.position;\n\t\tvec3 lightPos = rectAreaLight.position;\n\t\tvec3 halfWidth = rectAreaLight.halfWidth;\n\t\tvec3 halfHeight = rectAreaLight.halfHeight;\n\t\tvec3 lightColor = rectAreaLight.color;\n\t\tfloat roughness = material.specularRoughness;\n\t\tvec3 rectCoords[ 4 ];\n\t\trectCoords[ 0 ] = lightPos + halfWidth - halfHeight;\t\trectCoords[ 1 ] = lightPos - halfWidth - halfHeight;\n\t\trectCoords[ 2 ] = lightPos - halfWidth + halfHeight;\n\t\trectCoords[ 3 ] = lightPos + halfWidth + halfHeight;\n\t\tvec2 uv = LTC_Uv( normal, viewDir, roughness );\n\t\tvec4 t1 = texture2D( ltc_1, uv );\n\t\tvec4 t2 = texture2D( ltc_2, uv );\n\t\tmat3 mInv = mat3(\n\t\t\tvec3( t1.x, 0, t1.y ),\n\t\t\tvec3( 0, 1, 0 ),\n\t\t\tvec3( t1.z, 0, t1.w )\n\t\t);\n\t\tvec3 fresnel = ( material.specularColor * t2.x + ( vec3( 1.0 ) - material.specularColor ) * t2.y );\n\t\treflectedLight.directSpecular += lightColor * fresnel * LTC_Evaluate( normal, viewDir, position, mInv, rectCoords );\n\t\treflectedLight.directDiffuse += lightColor * material.diffuseColor * LTC_Evaluate( normal, viewDir, position, mat3( 1.0 ), rectCoords );\n\t}\n#endif\nvoid RE_Direct_Physical( const in IncidentLight directLight, const in GeometricContext geometry, const in PhysicalMaterial material, inout ReflectedLight reflectedLight ) {\n\tfloat dotNL = saturate( dot( geometry.normal, directLight.direction ) );\n\tvec3 irradiance = dotNL * directLight.color;\n\t#ifndef PHYSICALLY_CORRECT_LIGHTS\n\t\tirradiance *= PI;\n\t#endif\n\t#ifdef CLEARCOAT\n\t\tfloat ccDotNL = saturate( dot( geometry.clearcoatNormal, directLight.direction ) );\n\t\tvec3 ccIrradiance = ccDotNL * directLight.color;\n\t\t#ifndef PHYSICALLY_CORRECT_LIGHTS\n\t\t\tccIrradiance *= PI;\n\t\t#endif\n\t\tfloat clearcoatDHR = material.clearcoat * clearcoatDHRApprox( material.clearcoatRoughness, ccDotNL );\n\t\treflectedLight.directSpecular += ccIrradiance * material.clearcoat * BRDF_Specular_GGX( directLight, geometry.viewDir, geometry.clearcoatNormal, vec3( DEFAULT_SPECULAR_COEFFICIENT ), material.clearcoatRoughness );\n\t#else\n\t\tfloat clearcoatDHR = 0.0;\n\t#endif\n\t#ifdef USE_SHEEN\n\t\treflectedLight.directSpecular += ( 1.0 - clearcoatDHR ) * irradiance * BRDF_Specular_Sheen(\n\t\t\tmaterial.specularRoughness,\n\t\t\tdirectLight.direction,\n\t\t\tgeometry,\n\t\t\tmaterial.sheenColor\n\t\t);\n\t#else\n\t\treflectedLight.directSpecular += ( 1.0 - clearcoatDHR ) * irradiance * BRDF_Specular_GGX( directLight, geometry.viewDir, geometry.normal, material.specularColor, material.specularRoughness);\n\t#endif\n\treflectedLight.directDiffuse += ( 1.0 - clearcoatDHR ) * irradiance * BRDF_Diffuse_Lambert( material.diffuseColor );\n}\nvoid RE_IndirectDiffuse_Physical( const in vec3 irradiance, const in GeometricContext geometry, const in PhysicalMaterial material, inout ReflectedLight reflectedLight ) {\n\treflectedLight.indirectDiffuse += irradiance * BRDF_Diffuse_Lambert( material.diffuseColor );\n}\nvoid RE_IndirectSpecular_Physical( const in vec3 radiance, const in vec3 irradiance, const in vec3 clearcoatRadiance, const in GeometricContext geometry, const in PhysicalMaterial material, inout ReflectedLight reflectedLight) {\n\t#ifdef CLEARCOAT\n\t\tfloat ccDotNV = saturate( dot( geometry.clearcoatNormal, geometry.viewDir ) );\n\t\treflectedLight.indirectSpecular += clearcoatRadiance * material.clearcoat * BRDF_Specular_GGX_Environment( geometry.viewDir, geometry.clearcoatNormal, vec3( DEFAULT_SPECULAR_COEFFICIENT ), material.clearcoatRoughness );\n\t\tfloat ccDotNL = ccDotNV;\n\t\tfloat clearcoatDHR = material.clearcoat * clearcoatDHRApprox( material.clearcoatRoughness, ccDotNL );\n\t#else\n\t\tfloat clearcoatDHR = 0.0;\n\t#endif\n\tfloat clearcoatInv = 1.0 - clearcoatDHR;\n\tvec3 singleScattering = vec3( 0.0 );\n\tvec3 multiScattering = vec3( 0.0 );\n\tvec3 cosineWeightedIrradiance = irradiance * RECIPROCAL_PI;\n\tBRDF_Specular_Multiscattering_Environment( geometry, material.specularColor, material.specularRoughness, singleScattering, multiScattering );\n\tvec3 diffuse = material.diffuseColor * ( 1.0 - ( singleScattering + multiScattering ) );\n\treflectedLight.indirectSpecular += clearcoatInv * radiance * singleScattering;\n\treflectedLight.indirectSpecular += multiScattering * cosineWeightedIrradiance;\n\treflectedLight.indirectDiffuse += diffuse * cosineWeightedIrradiance;\n}\n#define RE_Direct\t\t\t\tRE_Direct_Physical\n#define RE_Direct_RectArea\t\tRE_Direct_RectArea_Physical\n#define RE_IndirectDiffuse\t\tRE_IndirectDiffuse_Physical\n#define RE_IndirectSpecular\t\tRE_IndirectSpecular_Physical\nfloat computeSpecularOcclusion( const in float dotNV, const in float ambientOcclusion, const in float roughness ) {\n\treturn saturate( pow( dotNV + ambientOcclusion, exp2( - 16.0 * roughness - 1.0 ) ) - 1.0 + ambientOcclusion );\n}", +lights_fragment_begin:"\nGeometricContext geometry;\ngeometry.position = - vViewPosition;\ngeometry.normal = normal;\ngeometry.viewDir = ( isOrthographic ) ? vec3( 0, 0, 1 ) : normalize( vViewPosition );\n#ifdef CLEARCOAT\n\tgeometry.clearcoatNormal = clearcoatNormal;\n#endif\nIncidentLight directLight;\n#if ( NUM_POINT_LIGHTS > 0 ) && defined( RE_Direct )\n\tPointLight pointLight;\n\t#if defined( USE_SHADOWMAP ) && NUM_POINT_LIGHT_SHADOWS > 0\n\tPointLightShadow pointLightShadow;\n\t#endif\n\t#pragma unroll_loop_start\n\tfor ( int i = 0; i < NUM_POINT_LIGHTS; i ++ ) {\n\t\tpointLight = pointLights[ i ];\n\t\tgetPointDirectLightIrradiance( pointLight, geometry, directLight );\n\t\t#if defined( USE_SHADOWMAP ) && ( UNROLLED_LOOP_INDEX < NUM_POINT_LIGHT_SHADOWS )\n\t\tpointLightShadow = pointLightShadows[ i ];\n\t\tdirectLight.color *= all( bvec2( directLight.visible, receiveShadow ) ) ? getPointShadow( pointShadowMap[ i ], pointLightShadow.shadowMapSize, pointLightShadow.shadowBias, pointLightShadow.shadowRadius, vPointShadowCoord[ i ], pointLightShadow.shadowCameraNear, pointLightShadow.shadowCameraFar ) : 1.0;\n\t\t#endif\n\t\tRE_Direct( directLight, geometry, material, reflectedLight );\n\t}\n\t#pragma unroll_loop_end\n#endif\n#if ( NUM_SPOT_LIGHTS > 0 ) && defined( RE_Direct )\n\tSpotLight spotLight;\n\t#if defined( USE_SHADOWMAP ) && NUM_SPOT_LIGHT_SHADOWS > 0\n\tSpotLightShadow spotLightShadow;\n\t#endif\n\t#pragma unroll_loop_start\n\tfor ( int i = 0; i < NUM_SPOT_LIGHTS; i ++ ) {\n\t\tspotLight = spotLights[ i ];\n\t\tgetSpotDirectLightIrradiance( spotLight, geometry, directLight );\n\t\t#if defined( USE_SHADOWMAP ) && ( UNROLLED_LOOP_INDEX < NUM_SPOT_LIGHT_SHADOWS )\n\t\tspotLightShadow = spotLightShadows[ i ];\n\t\tdirectLight.color *= all( bvec2( directLight.visible, receiveShadow ) ) ? getShadow( spotShadowMap[ i ], spotLightShadow.shadowMapSize, spotLightShadow.shadowBias, spotLightShadow.shadowRadius, vSpotShadowCoord[ i ] ) : 1.0;\n\t\t#endif\n\t\tRE_Direct( directLight, geometry, material, reflectedLight );\n\t}\n\t#pragma unroll_loop_end\n#endif\n#if ( NUM_DIR_LIGHTS > 0 ) && defined( RE_Direct )\n\tDirectionalLight directionalLight;\n\t#if defined( USE_SHADOWMAP ) && NUM_DIR_LIGHT_SHADOWS > 0\n\tDirectionalLightShadow directionalLightShadow;\n\t#endif\n\t#pragma unroll_loop_start\n\tfor ( int i = 0; i < NUM_DIR_LIGHTS; i ++ ) {\n\t\tdirectionalLight = directionalLights[ i ];\n\t\tgetDirectionalDirectLightIrradiance( directionalLight, geometry, directLight );\n\t\t#if defined( USE_SHADOWMAP ) && ( UNROLLED_LOOP_INDEX < NUM_DIR_LIGHT_SHADOWS )\n\t\tdirectionalLightShadow = directionalLightShadows[ i ];\n\t\tdirectLight.color *= all( bvec2( directLight.visible, receiveShadow ) ) ? getShadow( directionalShadowMap[ i ], directionalLightShadow.shadowMapSize, directionalLightShadow.shadowBias, directionalLightShadow.shadowRadius, vDirectionalShadowCoord[ i ] ) : 1.0;\n\t\t#endif\n\t\tRE_Direct( directLight, geometry, material, reflectedLight );\n\t}\n\t#pragma unroll_loop_end\n#endif\n#if ( NUM_RECT_AREA_LIGHTS > 0 ) && defined( RE_Direct_RectArea )\n\tRectAreaLight rectAreaLight;\n\t#pragma unroll_loop_start\n\tfor ( int i = 0; i < NUM_RECT_AREA_LIGHTS; i ++ ) {\n\t\trectAreaLight = rectAreaLights[ i ];\n\t\tRE_Direct_RectArea( rectAreaLight, geometry, material, reflectedLight );\n\t}\n\t#pragma unroll_loop_end\n#endif\n#if defined( RE_IndirectDiffuse )\n\tvec3 iblIrradiance = vec3( 0.0 );\n\tvec3 irradiance = getAmbientLightIrradiance( ambientLightColor );\n\tirradiance += getLightProbeIrradiance( lightProbe, geometry );\n\t#if ( NUM_HEMI_LIGHTS > 0 )\n\t\t#pragma unroll_loop_start\n\t\tfor ( int i = 0; i < NUM_HEMI_LIGHTS; i ++ ) {\n\t\t\tirradiance += getHemisphereLightIrradiance( hemisphereLights[ i ], geometry );\n\t\t}\n\t\t#pragma unroll_loop_end\n\t#endif\n#endif\n#if defined( RE_IndirectSpecular )\n\tvec3 radiance = vec3( 0.0 );\n\tvec3 clearcoatRadiance = vec3( 0.0 );\n#endif", +lights_fragment_maps:"#if defined( RE_IndirectDiffuse )\n\t#ifdef USE_LIGHTMAP\n\t\tvec4 lightMapTexel= texture2D( lightMap, vUv2 );\n\t\tvec3 lightMapIrradiance = lightMapTexelToLinear( lightMapTexel ).rgb * lightMapIntensity;\n\t\t#ifndef PHYSICALLY_CORRECT_LIGHTS\n\t\t\tlightMapIrradiance *= PI;\n\t\t#endif\n\t\tirradiance += lightMapIrradiance;\n\t#endif\n\t#if defined( USE_ENVMAP ) && defined( STANDARD ) && defined( ENVMAP_TYPE_CUBE_UV )\n\t\tiblIrradiance += getLightProbeIndirectIrradiance( geometry, maxMipLevel );\n\t#endif\n#endif\n#if defined( USE_ENVMAP ) && defined( RE_IndirectSpecular )\n\tradiance += getLightProbeIndirectRadiance( geometry.viewDir, geometry.normal, material.specularRoughness, maxMipLevel );\n\t#ifdef CLEARCOAT\n\t\tclearcoatRadiance += getLightProbeIndirectRadiance( geometry.viewDir, geometry.clearcoatNormal, material.clearcoatRoughness, maxMipLevel );\n\t#endif\n#endif", +lights_fragment_end:"#if defined( RE_IndirectDiffuse )\n\tRE_IndirectDiffuse( irradiance, geometry, material, reflectedLight );\n#endif\n#if defined( RE_IndirectSpecular )\n\tRE_IndirectSpecular( radiance, iblIrradiance, clearcoatRadiance, geometry, material, reflectedLight );\n#endif",logdepthbuf_fragment:"#if defined( USE_LOGDEPTHBUF ) && defined( USE_LOGDEPTHBUF_EXT )\n\tgl_FragDepthEXT = vIsPerspective == 0.0 ? gl_FragCoord.z : log2( vFragDepth ) * logDepthBufFC * 0.5;\n#endif",logdepthbuf_pars_fragment:"#if defined( USE_LOGDEPTHBUF ) && defined( USE_LOGDEPTHBUF_EXT )\n\tuniform float logDepthBufFC;\n\tvarying float vFragDepth;\n\tvarying float vIsPerspective;\n#endif", +logdepthbuf_pars_vertex:"#ifdef USE_LOGDEPTHBUF\n\t#ifdef USE_LOGDEPTHBUF_EXT\n\t\tvarying float vFragDepth;\n\t\tvarying float vIsPerspective;\n\t#else\n\t\tuniform float logDepthBufFC;\n\t#endif\n#endif",logdepthbuf_vertex:"#ifdef USE_LOGDEPTHBUF\n\t#ifdef USE_LOGDEPTHBUF_EXT\n\t\tvFragDepth = 1.0 + gl_Position.w;\n\t\tvIsPerspective = float( isPerspectiveMatrix( projectionMatrix ) );\n\t#else\n\t\tif ( isPerspectiveMatrix( projectionMatrix ) ) {\n\t\t\tgl_Position.z = log2( max( EPSILON, gl_Position.w + 1.0 ) ) * logDepthBufFC - 1.0;\n\t\t\tgl_Position.z *= gl_Position.w;\n\t\t}\n\t#endif\n#endif", +map_fragment:"#ifdef USE_MAP\n\tvec4 texelColor = texture2D( map, vUv );\n\ttexelColor = mapTexelToLinear( texelColor );\n\tdiffuseColor *= texelColor;\n#endif",map_pars_fragment:"#ifdef USE_MAP\n\tuniform sampler2D map;\n#endif",map_particle_fragment:"#if defined( USE_MAP ) || defined( USE_ALPHAMAP )\n\tvec2 uv = ( uvTransform * vec3( gl_PointCoord.x, 1.0 - gl_PointCoord.y, 1 ) ).xy;\n#endif\n#ifdef USE_MAP\n\tvec4 mapTexel = texture2D( map, uv );\n\tdiffuseColor *= mapTexelToLinear( mapTexel );\n#endif\n#ifdef USE_ALPHAMAP\n\tdiffuseColor.a *= texture2D( alphaMap, uv ).g;\n#endif", +map_particle_pars_fragment:"#if defined( USE_MAP ) || defined( USE_ALPHAMAP )\n\tuniform mat3 uvTransform;\n#endif\n#ifdef USE_MAP\n\tuniform sampler2D map;\n#endif\n#ifdef USE_ALPHAMAP\n\tuniform sampler2D alphaMap;\n#endif",metalnessmap_fragment:"float metalnessFactor = metalness;\n#ifdef USE_METALNESSMAP\n\tvec4 texelMetalness = texture2D( metalnessMap, vUv );\n\tmetalnessFactor *= texelMetalness.b;\n#endif",metalnessmap_pars_fragment:"#ifdef USE_METALNESSMAP\n\tuniform sampler2D metalnessMap;\n#endif", +morphnormal_vertex:"#ifdef USE_MORPHNORMALS\n\tobjectNormal *= morphTargetBaseInfluence;\n\tobjectNormal += morphNormal0 * morphTargetInfluences[ 0 ];\n\tobjectNormal += morphNormal1 * morphTargetInfluences[ 1 ];\n\tobjectNormal += morphNormal2 * morphTargetInfluences[ 2 ];\n\tobjectNormal += morphNormal3 * morphTargetInfluences[ 3 ];\n#endif",morphtarget_pars_vertex:"#ifdef USE_MORPHTARGETS\n\tuniform float morphTargetBaseInfluence;\n\t#ifndef USE_MORPHNORMALS\n\t\tuniform float morphTargetInfluences[ 8 ];\n\t#else\n\t\tuniform float morphTargetInfluences[ 4 ];\n\t#endif\n#endif", +morphtarget_vertex:"#ifdef USE_MORPHTARGETS\n\ttransformed *= morphTargetBaseInfluence;\n\ttransformed += morphTarget0 * morphTargetInfluences[ 0 ];\n\ttransformed += morphTarget1 * morphTargetInfluences[ 1 ];\n\ttransformed += morphTarget2 * morphTargetInfluences[ 2 ];\n\ttransformed += morphTarget3 * morphTargetInfluences[ 3 ];\n\t#ifndef USE_MORPHNORMALS\n\t\ttransformed += morphTarget4 * morphTargetInfluences[ 4 ];\n\t\ttransformed += morphTarget5 * morphTargetInfluences[ 5 ];\n\t\ttransformed += morphTarget6 * morphTargetInfluences[ 6 ];\n\t\ttransformed += morphTarget7 * morphTargetInfluences[ 7 ];\n\t#endif\n#endif", +normal_fragment_begin:"#ifdef FLAT_SHADED\n\tvec3 fdx = vec3( dFdx( vViewPosition.x ), dFdx( vViewPosition.y ), dFdx( vViewPosition.z ) );\n\tvec3 fdy = vec3( dFdy( vViewPosition.x ), dFdy( vViewPosition.y ), dFdy( vViewPosition.z ) );\n\tvec3 normal = normalize( cross( fdx, fdy ) );\n#else\n\tvec3 normal = normalize( vNormal );\n\t#ifdef DOUBLE_SIDED\n\t\tnormal = normal * ( float( gl_FrontFacing ) * 2.0 - 1.0 );\n\t#endif\n\t#ifdef USE_TANGENT\n\t\tvec3 tangent = normalize( vTangent );\n\t\tvec3 bitangent = normalize( vBitangent );\n\t\t#ifdef DOUBLE_SIDED\n\t\t\ttangent = tangent * ( float( gl_FrontFacing ) * 2.0 - 1.0 );\n\t\t\tbitangent = bitangent * ( float( gl_FrontFacing ) * 2.0 - 1.0 );\n\t\t#endif\n\t\t#if defined( TANGENTSPACE_NORMALMAP ) || defined( USE_CLEARCOAT_NORMALMAP )\n\t\t\tmat3 vTBN = mat3( tangent, bitangent, normal );\n\t\t#endif\n\t#endif\n#endif\nvec3 geometryNormal = normal;", +normal_fragment_maps:"#ifdef OBJECTSPACE_NORMALMAP\n\tnormal = texture2D( normalMap, vUv ).xyz * 2.0 - 1.0;\n\t#ifdef FLIP_SIDED\n\t\tnormal = - normal;\n\t#endif\n\t#ifdef DOUBLE_SIDED\n\t\tnormal = normal * ( float( gl_FrontFacing ) * 2.0 - 1.0 );\n\t#endif\n\tnormal = normalize( normalMatrix * normal );\n#elif defined( TANGENTSPACE_NORMALMAP )\n\tvec3 mapN = texture2D( normalMap, vUv ).xyz * 2.0 - 1.0;\n\tmapN.xy *= normalScale;\n\t#ifdef USE_TANGENT\n\t\tnormal = normalize( vTBN * mapN );\n\t#else\n\t\tnormal = perturbNormal2Arb( -vViewPosition, normal, mapN );\n\t#endif\n#elif defined( USE_BUMPMAP )\n\tnormal = perturbNormalArb( -vViewPosition, normal, dHdxy_fwd() );\n#endif", +normalmap_pars_fragment:"#ifdef USE_NORMALMAP\n\tuniform sampler2D normalMap;\n\tuniform vec2 normalScale;\n#endif\n#ifdef OBJECTSPACE_NORMALMAP\n\tuniform mat3 normalMatrix;\n#endif\n#if ! defined ( USE_TANGENT ) && ( defined ( TANGENTSPACE_NORMALMAP ) || defined ( USE_CLEARCOAT_NORMALMAP ) )\n\tvec3 perturbNormal2Arb( vec3 eye_pos, vec3 surf_norm, vec3 mapN ) {\n\t\tvec3 q0 = vec3( dFdx( eye_pos.x ), dFdx( eye_pos.y ), dFdx( eye_pos.z ) );\n\t\tvec3 q1 = vec3( dFdy( eye_pos.x ), dFdy( eye_pos.y ), dFdy( eye_pos.z ) );\n\t\tvec2 st0 = dFdx( vUv.st );\n\t\tvec2 st1 = dFdy( vUv.st );\n\t\tfloat scale = sign( st1.t * st0.s - st0.t * st1.s );\n\t\tvec3 S = normalize( ( q0 * st1.t - q1 * st0.t ) * scale );\n\t\tvec3 T = normalize( ( - q0 * st1.s + q1 * st0.s ) * scale );\n\t\tvec3 N = normalize( surf_norm );\n\t\tmat3 tsn = mat3( S, T, N );\n\t\tmapN.xy *= ( float( gl_FrontFacing ) * 2.0 - 1.0 );\n\t\treturn normalize( tsn * mapN );\n\t}\n#endif", +clearcoat_normal_fragment_begin:"#ifdef CLEARCOAT\n\tvec3 clearcoatNormal = geometryNormal;\n#endif",clearcoat_normal_fragment_maps:"#ifdef USE_CLEARCOAT_NORMALMAP\n\tvec3 clearcoatMapN = texture2D( clearcoatNormalMap, vUv ).xyz * 2.0 - 1.0;\n\tclearcoatMapN.xy *= clearcoatNormalScale;\n\t#ifdef USE_TANGENT\n\t\tclearcoatNormal = normalize( vTBN * clearcoatMapN );\n\t#else\n\t\tclearcoatNormal = perturbNormal2Arb( - vViewPosition, clearcoatNormal, clearcoatMapN );\n\t#endif\n#endif",clearcoat_pars_fragment:"#ifdef USE_CLEARCOATMAP\n\tuniform sampler2D clearcoatMap;\n#endif\n#ifdef USE_CLEARCOAT_ROUGHNESSMAP\n\tuniform sampler2D clearcoatRoughnessMap;\n#endif\n#ifdef USE_CLEARCOAT_NORMALMAP\n\tuniform sampler2D clearcoatNormalMap;\n\tuniform vec2 clearcoatNormalScale;\n#endif", +packing:"vec3 packNormalToRGB( const in vec3 normal ) {\n\treturn normalize( normal ) * 0.5 + 0.5;\n}\nvec3 unpackRGBToNormal( const in vec3 rgb ) {\n\treturn 2.0 * rgb.xyz - 1.0;\n}\nconst float PackUpscale = 256. / 255.;const float UnpackDownscale = 255. / 256.;\nconst vec3 PackFactors = vec3( 256. * 256. * 256., 256. * 256., 256. );\nconst vec4 UnpackFactors = UnpackDownscale / vec4( PackFactors, 1. );\nconst float ShiftRight8 = 1. / 256.;\nvec4 packDepthToRGBA( const in float v ) {\n\tvec4 r = vec4( fract( v * PackFactors ), v );\n\tr.yzw -= r.xyz * ShiftRight8;\treturn r * PackUpscale;\n}\nfloat unpackRGBAToDepth( const in vec4 v ) {\n\treturn dot( v, UnpackFactors );\n}\nvec4 pack2HalfToRGBA( vec2 v ) {\n\tvec4 r = vec4( v.x, fract( v.x * 255.0 ), v.y, fract( v.y * 255.0 ));\n\treturn vec4( r.x - r.y / 255.0, r.y, r.z - r.w / 255.0, r.w);\n}\nvec2 unpackRGBATo2Half( vec4 v ) {\n\treturn vec2( v.x + ( v.y / 255.0 ), v.z + ( v.w / 255.0 ) );\n}\nfloat viewZToOrthographicDepth( const in float viewZ, const in float near, const in float far ) {\n\treturn ( viewZ + near ) / ( near - far );\n}\nfloat orthographicDepthToViewZ( const in float linearClipZ, const in float near, const in float far ) {\n\treturn linearClipZ * ( near - far ) - near;\n}\nfloat viewZToPerspectiveDepth( const in float viewZ, const in float near, const in float far ) {\n\treturn (( near + viewZ ) * far ) / (( far - near ) * viewZ );\n}\nfloat perspectiveDepthToViewZ( const in float invClipZ, const in float near, const in float far ) {\n\treturn ( near * far ) / ( ( far - near ) * invClipZ - far );\n}", +premultiplied_alpha_fragment:"#ifdef PREMULTIPLIED_ALPHA\n\tgl_FragColor.rgb *= gl_FragColor.a;\n#endif",project_vertex:"vec4 mvPosition = vec4( transformed, 1.0 );\n#ifdef USE_INSTANCING\n\tmvPosition = instanceMatrix * mvPosition;\n#endif\nmvPosition = modelViewMatrix * mvPosition;\ngl_Position = projectionMatrix * mvPosition;",dithering_fragment:"#ifdef DITHERING\n\tgl_FragColor.rgb = dithering( gl_FragColor.rgb );\n#endif",dithering_pars_fragment:"#ifdef DITHERING\n\tvec3 dithering( vec3 color ) {\n\t\tfloat grid_position = rand( gl_FragCoord.xy );\n\t\tvec3 dither_shift_RGB = vec3( 0.25 / 255.0, -0.25 / 255.0, 0.25 / 255.0 );\n\t\tdither_shift_RGB = mix( 2.0 * dither_shift_RGB, -2.0 * dither_shift_RGB, grid_position );\n\t\treturn color + dither_shift_RGB;\n\t}\n#endif", +roughnessmap_fragment:"float roughnessFactor = roughness;\n#ifdef USE_ROUGHNESSMAP\n\tvec4 texelRoughness = texture2D( roughnessMap, vUv );\n\troughnessFactor *= texelRoughness.g;\n#endif",roughnessmap_pars_fragment:"#ifdef USE_ROUGHNESSMAP\n\tuniform sampler2D roughnessMap;\n#endif",shadowmap_pars_fragment:"#ifdef USE_SHADOWMAP\n\t#if NUM_DIR_LIGHT_SHADOWS > 0\n\t\tuniform sampler2D directionalShadowMap[ NUM_DIR_LIGHT_SHADOWS ];\n\t\tvarying vec4 vDirectionalShadowCoord[ NUM_DIR_LIGHT_SHADOWS ];\n\t\tstruct DirectionalLightShadow {\n\t\t\tfloat shadowBias;\n\t\t\tfloat shadowNormalBias;\n\t\t\tfloat shadowRadius;\n\t\t\tvec2 shadowMapSize;\n\t\t};\n\t\tuniform DirectionalLightShadow directionalLightShadows[ NUM_DIR_LIGHT_SHADOWS ];\n\t#endif\n\t#if NUM_SPOT_LIGHT_SHADOWS > 0\n\t\tuniform sampler2D spotShadowMap[ NUM_SPOT_LIGHT_SHADOWS ];\n\t\tvarying vec4 vSpotShadowCoord[ NUM_SPOT_LIGHT_SHADOWS ];\n\t\tstruct SpotLightShadow {\n\t\t\tfloat shadowBias;\n\t\t\tfloat shadowNormalBias;\n\t\t\tfloat shadowRadius;\n\t\t\tvec2 shadowMapSize;\n\t\t};\n\t\tuniform SpotLightShadow spotLightShadows[ NUM_SPOT_LIGHT_SHADOWS ];\n\t#endif\n\t#if NUM_POINT_LIGHT_SHADOWS > 0\n\t\tuniform sampler2D pointShadowMap[ NUM_POINT_LIGHT_SHADOWS ];\n\t\tvarying vec4 vPointShadowCoord[ NUM_POINT_LIGHT_SHADOWS ];\n\t\tstruct PointLightShadow {\n\t\t\tfloat shadowBias;\n\t\t\tfloat shadowNormalBias;\n\t\t\tfloat shadowRadius;\n\t\t\tvec2 shadowMapSize;\n\t\t\tfloat shadowCameraNear;\n\t\t\tfloat shadowCameraFar;\n\t\t};\n\t\tuniform PointLightShadow pointLightShadows[ NUM_POINT_LIGHT_SHADOWS ];\n\t#endif\n\tfloat texture2DCompare( sampler2D depths, vec2 uv, float compare ) {\n\t\treturn step( compare, unpackRGBAToDepth( texture2D( depths, uv ) ) );\n\t}\n\tvec2 texture2DDistribution( sampler2D shadow, vec2 uv ) {\n\t\treturn unpackRGBATo2Half( texture2D( shadow, uv ) );\n\t}\n\tfloat VSMShadow (sampler2D shadow, vec2 uv, float compare ){\n\t\tfloat occlusion = 1.0;\n\t\tvec2 distribution = texture2DDistribution( shadow, uv );\n\t\tfloat hard_shadow = step( compare , distribution.x );\n\t\tif (hard_shadow != 1.0 ) {\n\t\t\tfloat distance = compare - distribution.x ;\n\t\t\tfloat variance = max( 0.00000, distribution.y * distribution.y );\n\t\t\tfloat softness_probability = variance / (variance + distance * distance );\t\t\tsoftness_probability = clamp( ( softness_probability - 0.3 ) / ( 0.95 - 0.3 ), 0.0, 1.0 );\t\t\tocclusion = clamp( max( hard_shadow, softness_probability ), 0.0, 1.0 );\n\t\t}\n\t\treturn occlusion;\n\t}\n\tfloat getShadow( sampler2D shadowMap, vec2 shadowMapSize, float shadowBias, float shadowRadius, vec4 shadowCoord ) {\n\t\tfloat shadow = 1.0;\n\t\tshadowCoord.xyz /= shadowCoord.w;\n\t\tshadowCoord.z += shadowBias;\n\t\tbvec4 inFrustumVec = bvec4 ( shadowCoord.x >= 0.0, shadowCoord.x <= 1.0, shadowCoord.y >= 0.0, shadowCoord.y <= 1.0 );\n\t\tbool inFrustum = all( inFrustumVec );\n\t\tbvec2 frustumTestVec = bvec2( inFrustum, shadowCoord.z <= 1.0 );\n\t\tbool frustumTest = all( frustumTestVec );\n\t\tif ( frustumTest ) {\n\t\t#if defined( SHADOWMAP_TYPE_PCF )\n\t\t\tvec2 texelSize = vec2( 1.0 ) / shadowMapSize;\n\t\t\tfloat dx0 = - texelSize.x * shadowRadius;\n\t\t\tfloat dy0 = - texelSize.y * shadowRadius;\n\t\t\tfloat dx1 = + texelSize.x * shadowRadius;\n\t\t\tfloat dy1 = + texelSize.y * shadowRadius;\n\t\t\tfloat dx2 = dx0 / 2.0;\n\t\t\tfloat dy2 = dy0 / 2.0;\n\t\t\tfloat dx3 = dx1 / 2.0;\n\t\t\tfloat dy3 = dy1 / 2.0;\n\t\t\tshadow = (\n\t\t\t\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( dx0, dy0 ), shadowCoord.z ) +\n\t\t\t\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( 0.0, dy0 ), shadowCoord.z ) +\n\t\t\t\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( dx1, dy0 ), shadowCoord.z ) +\n\t\t\t\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( dx2, dy2 ), shadowCoord.z ) +\n\t\t\t\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( 0.0, dy2 ), shadowCoord.z ) +\n\t\t\t\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( dx3, dy2 ), shadowCoord.z ) +\n\t\t\t\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( dx0, 0.0 ), shadowCoord.z ) +\n\t\t\t\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( dx2, 0.0 ), shadowCoord.z ) +\n\t\t\t\ttexture2DCompare( shadowMap, shadowCoord.xy, shadowCoord.z ) +\n\t\t\t\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( dx3, 0.0 ), shadowCoord.z ) +\n\t\t\t\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( dx1, 0.0 ), shadowCoord.z ) +\n\t\t\t\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( dx2, dy3 ), shadowCoord.z ) +\n\t\t\t\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( 0.0, dy3 ), shadowCoord.z ) +\n\t\t\t\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( dx3, dy3 ), shadowCoord.z ) +\n\t\t\t\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( dx0, dy1 ), shadowCoord.z ) +\n\t\t\t\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( 0.0, dy1 ), shadowCoord.z ) +\n\t\t\t\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( dx1, dy1 ), shadowCoord.z )\n\t\t\t) * ( 1.0 / 17.0 );\n\t\t#elif defined( SHADOWMAP_TYPE_PCF_SOFT )\n\t\t\tvec2 texelSize = vec2( 1.0 ) / shadowMapSize;\n\t\t\tfloat dx = texelSize.x;\n\t\t\tfloat dy = texelSize.y;\n\t\t\tvec2 uv = shadowCoord.xy;\n\t\t\tvec2 f = fract( uv * shadowMapSize + 0.5 );\n\t\t\tuv -= f * texelSize;\n\t\t\tshadow = (\n\t\t\t\ttexture2DCompare( shadowMap, uv, shadowCoord.z ) +\n\t\t\t\ttexture2DCompare( shadowMap, uv + vec2( dx, 0.0 ), shadowCoord.z ) +\n\t\t\t\ttexture2DCompare( shadowMap, uv + vec2( 0.0, dy ), shadowCoord.z ) +\n\t\t\t\ttexture2DCompare( shadowMap, uv + texelSize, shadowCoord.z ) +\n\t\t\t\tmix( texture2DCompare( shadowMap, uv + vec2( -dx, 0.0 ), shadowCoord.z ), \n\t\t\t\t\t texture2DCompare( shadowMap, uv + vec2( 2.0 * dx, 0.0 ), shadowCoord.z ),\n\t\t\t\t\t f.x ) +\n\t\t\t\tmix( texture2DCompare( shadowMap, uv + vec2( -dx, dy ), shadowCoord.z ), \n\t\t\t\t\t texture2DCompare( shadowMap, uv + vec2( 2.0 * dx, dy ), shadowCoord.z ),\n\t\t\t\t\t f.x ) +\n\t\t\t\tmix( texture2DCompare( shadowMap, uv + vec2( 0.0, -dy ), shadowCoord.z ), \n\t\t\t\t\t texture2DCompare( shadowMap, uv + vec2( 0.0, 2.0 * dy ), shadowCoord.z ),\n\t\t\t\t\t f.y ) +\n\t\t\t\tmix( texture2DCompare( shadowMap, uv + vec2( dx, -dy ), shadowCoord.z ), \n\t\t\t\t\t texture2DCompare( shadowMap, uv + vec2( dx, 2.0 * dy ), shadowCoord.z ),\n\t\t\t\t\t f.y ) +\n\t\t\t\tmix( mix( texture2DCompare( shadowMap, uv + vec2( -dx, -dy ), shadowCoord.z ), \n\t\t\t\t\t\t texture2DCompare( shadowMap, uv + vec2( 2.0 * dx, -dy ), shadowCoord.z ),\n\t\t\t\t\t\t f.x ),\n\t\t\t\t\t mix( texture2DCompare( shadowMap, uv + vec2( -dx, 2.0 * dy ), shadowCoord.z ), \n\t\t\t\t\t\t texture2DCompare( shadowMap, uv + vec2( 2.0 * dx, 2.0 * dy ), shadowCoord.z ),\n\t\t\t\t\t\t f.x ),\n\t\t\t\t\t f.y )\n\t\t\t) * ( 1.0 / 9.0 );\n\t\t#elif defined( SHADOWMAP_TYPE_VSM )\n\t\t\tshadow = VSMShadow( shadowMap, shadowCoord.xy, shadowCoord.z );\n\t\t#else\n\t\t\tshadow = texture2DCompare( shadowMap, shadowCoord.xy, shadowCoord.z );\n\t\t#endif\n\t\t}\n\t\treturn shadow;\n\t}\n\tvec2 cubeToUV( vec3 v, float texelSizeY ) {\n\t\tvec3 absV = abs( v );\n\t\tfloat scaleToCube = 1.0 / max( absV.x, max( absV.y, absV.z ) );\n\t\tabsV *= scaleToCube;\n\t\tv *= scaleToCube * ( 1.0 - 2.0 * texelSizeY );\n\t\tvec2 planar = v.xy;\n\t\tfloat almostATexel = 1.5 * texelSizeY;\n\t\tfloat almostOne = 1.0 - almostATexel;\n\t\tif ( absV.z >= almostOne ) {\n\t\t\tif ( v.z > 0.0 )\n\t\t\t\tplanar.x = 4.0 - v.x;\n\t\t} else if ( absV.x >= almostOne ) {\n\t\t\tfloat signX = sign( v.x );\n\t\t\tplanar.x = v.z * signX + 2.0 * signX;\n\t\t} else if ( absV.y >= almostOne ) {\n\t\t\tfloat signY = sign( v.y );\n\t\t\tplanar.x = v.x + 2.0 * signY + 2.0;\n\t\t\tplanar.y = v.z * signY - 2.0;\n\t\t}\n\t\treturn vec2( 0.125, 0.25 ) * planar + vec2( 0.375, 0.75 );\n\t}\n\tfloat getPointShadow( sampler2D shadowMap, vec2 shadowMapSize, float shadowBias, float shadowRadius, vec4 shadowCoord, float shadowCameraNear, float shadowCameraFar ) {\n\t\tvec2 texelSize = vec2( 1.0 ) / ( shadowMapSize * vec2( 4.0, 2.0 ) );\n\t\tvec3 lightToPosition = shadowCoord.xyz;\n\t\tfloat dp = ( length( lightToPosition ) - shadowCameraNear ) / ( shadowCameraFar - shadowCameraNear );\t\tdp += shadowBias;\n\t\tvec3 bd3D = normalize( lightToPosition );\n\t\t#if defined( SHADOWMAP_TYPE_PCF ) || defined( SHADOWMAP_TYPE_PCF_SOFT ) || defined( SHADOWMAP_TYPE_VSM )\n\t\t\tvec2 offset = vec2( - 1, 1 ) * shadowRadius * texelSize.y;\n\t\t\treturn (\n\t\t\t\ttexture2DCompare( shadowMap, cubeToUV( bd3D + offset.xyy, texelSize.y ), dp ) +\n\t\t\t\ttexture2DCompare( shadowMap, cubeToUV( bd3D + offset.yyy, texelSize.y ), dp ) +\n\t\t\t\ttexture2DCompare( shadowMap, cubeToUV( bd3D + offset.xyx, texelSize.y ), dp ) +\n\t\t\t\ttexture2DCompare( shadowMap, cubeToUV( bd3D + offset.yyx, texelSize.y ), dp ) +\n\t\t\t\ttexture2DCompare( shadowMap, cubeToUV( bd3D, texelSize.y ), dp ) +\n\t\t\t\ttexture2DCompare( shadowMap, cubeToUV( bd3D + offset.xxy, texelSize.y ), dp ) +\n\t\t\t\ttexture2DCompare( shadowMap, cubeToUV( bd3D + offset.yxy, texelSize.y ), dp ) +\n\t\t\t\ttexture2DCompare( shadowMap, cubeToUV( bd3D + offset.xxx, texelSize.y ), dp ) +\n\t\t\t\ttexture2DCompare( shadowMap, cubeToUV( bd3D + offset.yxx, texelSize.y ), dp )\n\t\t\t) * ( 1.0 / 9.0 );\n\t\t#else\n\t\t\treturn texture2DCompare( shadowMap, cubeToUV( bd3D, texelSize.y ), dp );\n\t\t#endif\n\t}\n#endif", +shadowmap_pars_vertex:"#ifdef USE_SHADOWMAP\n\t#if NUM_DIR_LIGHT_SHADOWS > 0\n\t\tuniform mat4 directionalShadowMatrix[ NUM_DIR_LIGHT_SHADOWS ];\n\t\tvarying vec4 vDirectionalShadowCoord[ NUM_DIR_LIGHT_SHADOWS ];\n\t\tstruct DirectionalLightShadow {\n\t\t\tfloat shadowBias;\n\t\t\tfloat shadowNormalBias;\n\t\t\tfloat shadowRadius;\n\t\t\tvec2 shadowMapSize;\n\t\t};\n\t\tuniform DirectionalLightShadow directionalLightShadows[ NUM_DIR_LIGHT_SHADOWS ];\n\t#endif\n\t#if NUM_SPOT_LIGHT_SHADOWS > 0\n\t\tuniform mat4 spotShadowMatrix[ NUM_SPOT_LIGHT_SHADOWS ];\n\t\tvarying vec4 vSpotShadowCoord[ NUM_SPOT_LIGHT_SHADOWS ];\n\t\tstruct SpotLightShadow {\n\t\t\tfloat shadowBias;\n\t\t\tfloat shadowNormalBias;\n\t\t\tfloat shadowRadius;\n\t\t\tvec2 shadowMapSize;\n\t\t};\n\t\tuniform SpotLightShadow spotLightShadows[ NUM_SPOT_LIGHT_SHADOWS ];\n\t#endif\n\t#if NUM_POINT_LIGHT_SHADOWS > 0\n\t\tuniform mat4 pointShadowMatrix[ NUM_POINT_LIGHT_SHADOWS ];\n\t\tvarying vec4 vPointShadowCoord[ NUM_POINT_LIGHT_SHADOWS ];\n\t\tstruct PointLightShadow {\n\t\t\tfloat shadowBias;\n\t\t\tfloat shadowNormalBias;\n\t\t\tfloat shadowRadius;\n\t\t\tvec2 shadowMapSize;\n\t\t\tfloat shadowCameraNear;\n\t\t\tfloat shadowCameraFar;\n\t\t};\n\t\tuniform PointLightShadow pointLightShadows[ NUM_POINT_LIGHT_SHADOWS ];\n\t#endif\n#endif", +shadowmap_vertex:"#ifdef USE_SHADOWMAP\n\t#if NUM_DIR_LIGHT_SHADOWS > 0 || NUM_SPOT_LIGHT_SHADOWS > 0 || NUM_POINT_LIGHT_SHADOWS > 0\n\t\tvec3 shadowWorldNormal = inverseTransformDirection( transformedNormal, viewMatrix );\n\t\tvec4 shadowWorldPosition;\n\t#endif\n\t#if NUM_DIR_LIGHT_SHADOWS > 0\n\t#pragma unroll_loop_start\n\tfor ( int i = 0; i < NUM_DIR_LIGHT_SHADOWS; i ++ ) {\n\t\tshadowWorldPosition = worldPosition + vec4( shadowWorldNormal * directionalLightShadows[ i ].shadowNormalBias, 0 );\n\t\tvDirectionalShadowCoord[ i ] = directionalShadowMatrix[ i ] * shadowWorldPosition;\n\t}\n\t#pragma unroll_loop_end\n\t#endif\n\t#if NUM_SPOT_LIGHT_SHADOWS > 0\n\t#pragma unroll_loop_start\n\tfor ( int i = 0; i < NUM_SPOT_LIGHT_SHADOWS; i ++ ) {\n\t\tshadowWorldPosition = worldPosition + vec4( shadowWorldNormal * spotLightShadows[ i ].shadowNormalBias, 0 );\n\t\tvSpotShadowCoord[ i ] = spotShadowMatrix[ i ] * shadowWorldPosition;\n\t}\n\t#pragma unroll_loop_end\n\t#endif\n\t#if NUM_POINT_LIGHT_SHADOWS > 0\n\t#pragma unroll_loop_start\n\tfor ( int i = 0; i < NUM_POINT_LIGHT_SHADOWS; i ++ ) {\n\t\tshadowWorldPosition = worldPosition + vec4( shadowWorldNormal * pointLightShadows[ i ].shadowNormalBias, 0 );\n\t\tvPointShadowCoord[ i ] = pointShadowMatrix[ i ] * shadowWorldPosition;\n\t}\n\t#pragma unroll_loop_end\n\t#endif\n#endif", +shadowmask_pars_fragment:"float getShadowMask() {\n\tfloat shadow = 1.0;\n\t#ifdef USE_SHADOWMAP\n\t#if NUM_DIR_LIGHT_SHADOWS > 0\n\tDirectionalLightShadow directionalLight;\n\t#pragma unroll_loop_start\n\tfor ( int i = 0; i < NUM_DIR_LIGHT_SHADOWS; i ++ ) {\n\t\tdirectionalLight = directionalLightShadows[ i ];\n\t\tshadow *= receiveShadow ? getShadow( directionalShadowMap[ i ], directionalLight.shadowMapSize, directionalLight.shadowBias, directionalLight.shadowRadius, vDirectionalShadowCoord[ i ] ) : 1.0;\n\t}\n\t#pragma unroll_loop_end\n\t#endif\n\t#if NUM_SPOT_LIGHT_SHADOWS > 0\n\tSpotLightShadow spotLight;\n\t#pragma unroll_loop_start\n\tfor ( int i = 0; i < NUM_SPOT_LIGHT_SHADOWS; i ++ ) {\n\t\tspotLight = spotLightShadows[ i ];\n\t\tshadow *= receiveShadow ? getShadow( spotShadowMap[ i ], spotLight.shadowMapSize, spotLight.shadowBias, spotLight.shadowRadius, vSpotShadowCoord[ i ] ) : 1.0;\n\t}\n\t#pragma unroll_loop_end\n\t#endif\n\t#if NUM_POINT_LIGHT_SHADOWS > 0\n\tPointLightShadow pointLight;\n\t#pragma unroll_loop_start\n\tfor ( int i = 0; i < NUM_POINT_LIGHT_SHADOWS; i ++ ) {\n\t\tpointLight = pointLightShadows[ i ];\n\t\tshadow *= receiveShadow ? getPointShadow( pointShadowMap[ i ], pointLight.shadowMapSize, pointLight.shadowBias, pointLight.shadowRadius, vPointShadowCoord[ i ], pointLight.shadowCameraNear, pointLight.shadowCameraFar ) : 1.0;\n\t}\n\t#pragma unroll_loop_end\n\t#endif\n\t#endif\n\treturn shadow;\n}", +skinbase_vertex:"#ifdef USE_SKINNING\n\tmat4 boneMatX = getBoneMatrix( skinIndex.x );\n\tmat4 boneMatY = getBoneMatrix( skinIndex.y );\n\tmat4 boneMatZ = getBoneMatrix( skinIndex.z );\n\tmat4 boneMatW = getBoneMatrix( skinIndex.w );\n#endif",skinning_pars_vertex:"#ifdef USE_SKINNING\n\tuniform mat4 bindMatrix;\n\tuniform mat4 bindMatrixInverse;\n\t#ifdef BONE_TEXTURE\n\t\tuniform highp sampler2D boneTexture;\n\t\tuniform int boneTextureSize;\n\t\tmat4 getBoneMatrix( const in float i ) {\n\t\t\tfloat j = i * 4.0;\n\t\t\tfloat x = mod( j, float( boneTextureSize ) );\n\t\t\tfloat y = floor( j / float( boneTextureSize ) );\n\t\t\tfloat dx = 1.0 / float( boneTextureSize );\n\t\t\tfloat dy = 1.0 / float( boneTextureSize );\n\t\t\ty = dy * ( y + 0.5 );\n\t\t\tvec4 v1 = texture2D( boneTexture, vec2( dx * ( x + 0.5 ), y ) );\n\t\t\tvec4 v2 = texture2D( boneTexture, vec2( dx * ( x + 1.5 ), y ) );\n\t\t\tvec4 v3 = texture2D( boneTexture, vec2( dx * ( x + 2.5 ), y ) );\n\t\t\tvec4 v4 = texture2D( boneTexture, vec2( dx * ( x + 3.5 ), y ) );\n\t\t\tmat4 bone = mat4( v1, v2, v3, v4 );\n\t\t\treturn bone;\n\t\t}\n\t#else\n\t\tuniform mat4 boneMatrices[ MAX_BONES ];\n\t\tmat4 getBoneMatrix( const in float i ) {\n\t\t\tmat4 bone = boneMatrices[ int(i) ];\n\t\t\treturn bone;\n\t\t}\n\t#endif\n#endif", +skinning_vertex:"#ifdef USE_SKINNING\n\tvec4 skinVertex = bindMatrix * vec4( transformed, 1.0 );\n\tvec4 skinned = vec4( 0.0 );\n\tskinned += boneMatX * skinVertex * skinWeight.x;\n\tskinned += boneMatY * skinVertex * skinWeight.y;\n\tskinned += boneMatZ * skinVertex * skinWeight.z;\n\tskinned += boneMatW * skinVertex * skinWeight.w;\n\ttransformed = ( bindMatrixInverse * skinned ).xyz;\n#endif",skinnormal_vertex:"#ifdef USE_SKINNING\n\tmat4 skinMatrix = mat4( 0.0 );\n\tskinMatrix += skinWeight.x * boneMatX;\n\tskinMatrix += skinWeight.y * boneMatY;\n\tskinMatrix += skinWeight.z * boneMatZ;\n\tskinMatrix += skinWeight.w * boneMatW;\n\tskinMatrix = bindMatrixInverse * skinMatrix * bindMatrix;\n\tobjectNormal = vec4( skinMatrix * vec4( objectNormal, 0.0 ) ).xyz;\n\t#ifdef USE_TANGENT\n\t\tobjectTangent = vec4( skinMatrix * vec4( objectTangent, 0.0 ) ).xyz;\n\t#endif\n#endif", +specularmap_fragment:"float specularStrength;\n#ifdef USE_SPECULARMAP\n\tvec4 texelSpecular = texture2D( specularMap, vUv );\n\tspecularStrength = texelSpecular.r;\n#else\n\tspecularStrength = 1.0;\n#endif",specularmap_pars_fragment:"#ifdef USE_SPECULARMAP\n\tuniform sampler2D specularMap;\n#endif",tonemapping_fragment:"#if defined( TONE_MAPPING )\n\tgl_FragColor.rgb = toneMapping( gl_FragColor.rgb );\n#endif",tonemapping_pars_fragment:"#ifndef saturate\n#define saturate(a) clamp( a, 0.0, 1.0 )\n#endif\nuniform float toneMappingExposure;\nvec3 LinearToneMapping( vec3 color ) {\n\treturn toneMappingExposure * color;\n}\nvec3 ReinhardToneMapping( vec3 color ) {\n\tcolor *= toneMappingExposure;\n\treturn saturate( color / ( vec3( 1.0 ) + color ) );\n}\nvec3 OptimizedCineonToneMapping( vec3 color ) {\n\tcolor *= toneMappingExposure;\n\tcolor = max( vec3( 0.0 ), color - 0.004 );\n\treturn pow( ( color * ( 6.2 * color + 0.5 ) ) / ( color * ( 6.2 * color + 1.7 ) + 0.06 ), vec3( 2.2 ) );\n}\nvec3 RRTAndODTFit( vec3 v ) {\n\tvec3 a = v * ( v + 0.0245786 ) - 0.000090537;\n\tvec3 b = v * ( 0.983729 * v + 0.4329510 ) + 0.238081;\n\treturn a / b;\n}\nvec3 ACESFilmicToneMapping( vec3 color ) {\n\tconst mat3 ACESInputMat = mat3(\n\t\tvec3( 0.59719, 0.07600, 0.02840 ),\t\tvec3( 0.35458, 0.90834, 0.13383 ),\n\t\tvec3( 0.04823, 0.01566, 0.83777 )\n\t);\n\tconst mat3 ACESOutputMat = mat3(\n\t\tvec3( 1.60475, -0.10208, -0.00327 ),\t\tvec3( -0.53108, 1.10813, -0.07276 ),\n\t\tvec3( -0.07367, -0.00605, 1.07602 )\n\t);\n\tcolor *= toneMappingExposure / 0.6;\n\tcolor = ACESInputMat * color;\n\tcolor = RRTAndODTFit( color );\n\tcolor = ACESOutputMat * color;\n\treturn saturate( color );\n}\nvec3 CustomToneMapping( vec3 color ) { return color; }", +transmissionmap_fragment:"#ifdef USE_TRANSMISSIONMAP\n\ttotalTransmission *= texture2D( transmissionMap, vUv ).r;\n#endif",transmissionmap_pars_fragment:"#ifdef USE_TRANSMISSIONMAP\n\tuniform sampler2D transmissionMap;\n#endif",uv_pars_fragment:"#if ( defined( USE_UV ) && ! defined( UVS_VERTEX_ONLY ) )\n\tvarying vec2 vUv;\n#endif",uv_pars_vertex:"#ifdef USE_UV\n\t#ifdef UVS_VERTEX_ONLY\n\t\tvec2 vUv;\n\t#else\n\t\tvarying vec2 vUv;\n\t#endif\n\tuniform mat3 uvTransform;\n#endif",uv_vertex:"#ifdef USE_UV\n\tvUv = ( uvTransform * vec3( uv, 1 ) ).xy;\n#endif", +uv2_pars_fragment:"#if defined( USE_LIGHTMAP ) || defined( USE_AOMAP )\n\tvarying vec2 vUv2;\n#endif",uv2_pars_vertex:"#if defined( USE_LIGHTMAP ) || defined( USE_AOMAP )\n\tattribute vec2 uv2;\n\tvarying vec2 vUv2;\n\tuniform mat3 uv2Transform;\n#endif",uv2_vertex:"#if defined( USE_LIGHTMAP ) || defined( USE_AOMAP )\n\tvUv2 = ( uv2Transform * vec3( uv2, 1 ) ).xy;\n#endif",worldpos_vertex:"#if defined( USE_ENVMAP ) || defined( DISTANCE ) || defined ( USE_SHADOWMAP )\n\tvec4 worldPosition = vec4( transformed, 1.0 );\n\t#ifdef USE_INSTANCING\n\t\tworldPosition = instanceMatrix * worldPosition;\n\t#endif\n\tworldPosition = modelMatrix * worldPosition;\n#endif", +background_frag:"uniform sampler2D t2D;\nvarying vec2 vUv;\nvoid main() {\n\tvec4 texColor = texture2D( t2D, vUv );\n\tgl_FragColor = mapTexelToLinear( texColor );\n\t#include \n\t#include \n}",background_vert:"varying vec2 vUv;\nuniform mat3 uvTransform;\nvoid main() {\n\tvUv = ( uvTransform * vec3( uv, 1 ) ).xy;\n\tgl_Position = vec4( position.xy, 1.0, 1.0 );\n}",cube_frag:"#include \nuniform float opacity;\nvarying vec3 vWorldDirection;\n#include \nvoid main() {\n\tvec3 vReflect = vWorldDirection;\n\t#include \n\tgl_FragColor = envColor;\n\tgl_FragColor.a *= opacity;\n\t#include \n\t#include \n}", +cube_vert:"varying vec3 vWorldDirection;\n#include \nvoid main() {\n\tvWorldDirection = transformDirection( position, modelMatrix );\n\t#include \n\t#include \n\tgl_Position.z = gl_Position.w;\n}",depth_frag:"#if DEPTH_PACKING == 3200\n\tuniform float opacity;\n#endif\n#include \n#include \n#include \n#include \n#include \n#include \n#include \nvarying vec2 vHighPrecisionZW;\nvoid main() {\n\t#include \n\tvec4 diffuseColor = vec4( 1.0 );\n\t#if DEPTH_PACKING == 3200\n\t\tdiffuseColor.a = opacity;\n\t#endif\n\t#include \n\t#include \n\t#include \n\t#include \n\tfloat fragCoordZ = 0.5 * vHighPrecisionZW[0] / vHighPrecisionZW[1] + 0.5;\n\t#if DEPTH_PACKING == 3200\n\t\tgl_FragColor = vec4( vec3( 1.0 - fragCoordZ ), opacity );\n\t#elif DEPTH_PACKING == 3201\n\t\tgl_FragColor = packDepthToRGBA( fragCoordZ );\n\t#endif\n}", +depth_vert:"#include \n#include \n#include \n#include \n#include \n#include \n#include \nvarying vec2 vHighPrecisionZW;\nvoid main() {\n\t#include \n\t#include \n\t#ifdef USE_DISPLACEMENTMAP\n\t\t#include \n\t\t#include \n\t\t#include \n\t#endif\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\tvHighPrecisionZW = gl_Position.zw;\n}", +distanceRGBA_frag:"#define DISTANCE\nuniform vec3 referencePosition;\nuniform float nearDistance;\nuniform float farDistance;\nvarying vec3 vWorldPosition;\n#include \n#include \n#include \n#include \n#include \n#include \nvoid main () {\n\t#include \n\tvec4 diffuseColor = vec4( 1.0 );\n\t#include \n\t#include \n\t#include \n\tfloat dist = length( vWorldPosition - referencePosition );\n\tdist = ( dist - nearDistance ) / ( farDistance - nearDistance );\n\tdist = saturate( dist );\n\tgl_FragColor = packDepthToRGBA( dist );\n}", +distanceRGBA_vert:"#define DISTANCE\nvarying vec3 vWorldPosition;\n#include \n#include \n#include \n#include \n#include \n#include \nvoid main() {\n\t#include \n\t#include \n\t#ifdef USE_DISPLACEMENTMAP\n\t\t#include \n\t\t#include \n\t\t#include \n\t#endif\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\tvWorldPosition = worldPosition.xyz;\n}", +equirect_frag:"uniform sampler2D tEquirect;\nvarying vec3 vWorldDirection;\n#include \nvoid main() {\n\tvec3 direction = normalize( vWorldDirection );\n\tvec2 sampleUV = equirectUv( direction );\n\tvec4 texColor = texture2D( tEquirect, sampleUV );\n\tgl_FragColor = mapTexelToLinear( texColor );\n\t#include \n\t#include \n}",equirect_vert:"varying vec3 vWorldDirection;\n#include \nvoid main() {\n\tvWorldDirection = transformDirection( position, modelMatrix );\n\t#include \n\t#include \n}", +linedashed_frag:"uniform vec3 diffuse;\nuniform float opacity;\nuniform float dashSize;\nuniform float totalSize;\nvarying float vLineDistance;\n#include \n#include \n#include \n#include \n#include \nvoid main() {\n\t#include \n\tif ( mod( vLineDistance, totalSize ) > dashSize ) {\n\t\tdiscard;\n\t}\n\tvec3 outgoingLight = vec3( 0.0 );\n\tvec4 diffuseColor = vec4( diffuse, opacity );\n\t#include \n\t#include \n\toutgoingLight = diffuseColor.rgb;\n\tgl_FragColor = vec4( outgoingLight, diffuseColor.a );\n\t#include \n\t#include \n\t#include \n\t#include \n}", +linedashed_vert:"uniform float scale;\nattribute float lineDistance;\nvarying float vLineDistance;\n#include \n#include \n#include \n#include \n#include \n#include \nvoid main() {\n\tvLineDistance = scale * lineDistance;\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n}", +meshbasic_frag:"uniform vec3 diffuse;\nuniform float opacity;\n#ifndef FLAT_SHADED\n\tvarying vec3 vNormal;\n#endif\n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \nvoid main() {\n\t#include \n\tvec4 diffuseColor = vec4( diffuse, opacity );\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\tReflectedLight reflectedLight = ReflectedLight( vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ) );\n\t#ifdef USE_LIGHTMAP\n\t\n\t\tvec4 lightMapTexel= texture2D( lightMap, vUv2 );\n\t\treflectedLight.indirectDiffuse += lightMapTexelToLinear( lightMapTexel ).rgb * lightMapIntensity;\n\t#else\n\t\treflectedLight.indirectDiffuse += vec3( 1.0 );\n\t#endif\n\t#include \n\treflectedLight.indirectDiffuse *= diffuseColor.rgb;\n\tvec3 outgoingLight = reflectedLight.indirectDiffuse;\n\t#include \n\tgl_FragColor = vec4( outgoingLight, diffuseColor.a );\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n}", +meshbasic_vert:"#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \nvoid main() {\n\t#include \n\t#include \n\t#include \n\t#include \n\t#ifdef USE_ENVMAP\n\t#include \n\t#include \n\t#include \n\t#include \n\t#endif\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n}", +meshlambert_frag:"uniform vec3 diffuse;\nuniform vec3 emissive;\nuniform float opacity;\nvarying vec3 vLightFront;\nvarying vec3 vIndirectFront;\n#ifdef DOUBLE_SIDED\n\tvarying vec3 vLightBack;\n\tvarying vec3 vIndirectBack;\n#endif\n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \nvoid main() {\n\t#include \n\tvec4 diffuseColor = vec4( diffuse, opacity );\n\tReflectedLight reflectedLight = ReflectedLight( vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ) );\n\tvec3 totalEmissiveRadiance = emissive;\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#ifdef DOUBLE_SIDED\n\t\treflectedLight.indirectDiffuse += ( gl_FrontFacing ) ? vIndirectFront : vIndirectBack;\n\t#else\n\t\treflectedLight.indirectDiffuse += vIndirectFront;\n\t#endif\n\t#include \n\treflectedLight.indirectDiffuse *= BRDF_Diffuse_Lambert( diffuseColor.rgb );\n\t#ifdef DOUBLE_SIDED\n\t\treflectedLight.directDiffuse = ( gl_FrontFacing ) ? vLightFront : vLightBack;\n\t#else\n\t\treflectedLight.directDiffuse = vLightFront;\n\t#endif\n\treflectedLight.directDiffuse *= BRDF_Diffuse_Lambert( diffuseColor.rgb ) * getShadowMask();\n\t#include \n\tvec3 outgoingLight = reflectedLight.directDiffuse + reflectedLight.indirectDiffuse + totalEmissiveRadiance;\n\t#include \n\tgl_FragColor = vec4( outgoingLight, diffuseColor.a );\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n}", +meshlambert_vert:"#define LAMBERT\nvarying vec3 vLightFront;\nvarying vec3 vIndirectFront;\n#ifdef DOUBLE_SIDED\n\tvarying vec3 vLightBack;\n\tvarying vec3 vIndirectBack;\n#endif\n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \nvoid main() {\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n}", +meshmatcap_frag:"#define MATCAP\nuniform vec3 diffuse;\nuniform float opacity;\nuniform sampler2D matcap;\nvarying vec3 vViewPosition;\n#ifndef FLAT_SHADED\n\tvarying vec3 vNormal;\n#endif\n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \nvoid main() {\n\t#include \n\tvec4 diffuseColor = vec4( diffuse, opacity );\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\tvec3 viewDir = normalize( vViewPosition );\n\tvec3 x = normalize( vec3( viewDir.z, 0.0, - viewDir.x ) );\n\tvec3 y = cross( viewDir, x );\n\tvec2 uv = vec2( dot( x, normal ), dot( y, normal ) ) * 0.495 + 0.5;\n\t#ifdef USE_MATCAP\n\t\tvec4 matcapColor = texture2D( matcap, uv );\n\t\tmatcapColor = matcapTexelToLinear( matcapColor );\n\t#else\n\t\tvec4 matcapColor = vec4( 1.0 );\n\t#endif\n\tvec3 outgoingLight = diffuseColor.rgb * matcapColor.rgb;\n\tgl_FragColor = vec4( outgoingLight, diffuseColor.a );\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n}", +meshmatcap_vert:"#define MATCAP\nvarying vec3 vViewPosition;\n#ifndef FLAT_SHADED\n\tvarying vec3 vNormal;\n#endif\n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \nvoid main() {\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#ifndef FLAT_SHADED\n\t\tvNormal = normalize( transformedNormal );\n\t#endif\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\tvViewPosition = - mvPosition.xyz;\n}", +meshtoon_frag:"#define TOON\nuniform vec3 diffuse;\nuniform vec3 emissive;\nuniform float opacity;\n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \nvoid main() {\n\t#include \n\tvec4 diffuseColor = vec4( diffuse, opacity );\n\tReflectedLight reflectedLight = ReflectedLight( vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ) );\n\tvec3 totalEmissiveRadiance = emissive;\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\tvec3 outgoingLight = reflectedLight.directDiffuse + reflectedLight.indirectDiffuse + totalEmissiveRadiance;\n\tgl_FragColor = vec4( outgoingLight, diffuseColor.a );\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n}", +meshtoon_vert:"#define TOON\nvarying vec3 vViewPosition;\n#ifndef FLAT_SHADED\n\tvarying vec3 vNormal;\n#endif\n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \nvoid main() {\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n#ifndef FLAT_SHADED\n\tvNormal = normalize( transformedNormal );\n#endif\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\tvViewPosition = - mvPosition.xyz;\n\t#include \n\t#include \n\t#include \n}", +meshphong_frag:"#define PHONG\nuniform vec3 diffuse;\nuniform vec3 emissive;\nuniform vec3 specular;\nuniform float shininess;\nuniform float opacity;\n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \nvoid main() {\n\t#include \n\tvec4 diffuseColor = vec4( diffuse, opacity );\n\tReflectedLight reflectedLight = ReflectedLight( vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ) );\n\tvec3 totalEmissiveRadiance = emissive;\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\tvec3 outgoingLight = reflectedLight.directDiffuse + reflectedLight.indirectDiffuse + reflectedLight.directSpecular + reflectedLight.indirectSpecular + totalEmissiveRadiance;\n\t#include \n\tgl_FragColor = vec4( outgoingLight, diffuseColor.a );\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n}", +meshphong_vert:"#define PHONG\nvarying vec3 vViewPosition;\n#ifndef FLAT_SHADED\n\tvarying vec3 vNormal;\n#endif\n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \nvoid main() {\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n#ifndef FLAT_SHADED\n\tvNormal = normalize( transformedNormal );\n#endif\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\tvViewPosition = - mvPosition.xyz;\n\t#include \n\t#include \n\t#include \n\t#include \n}", +meshphysical_frag:"#define STANDARD\n#ifdef PHYSICAL\n\t#define REFLECTIVITY\n\t#define CLEARCOAT\n\t#define TRANSMISSION\n#endif\nuniform vec3 diffuse;\nuniform vec3 emissive;\nuniform float roughness;\nuniform float metalness;\nuniform float opacity;\n#ifdef TRANSMISSION\n\tuniform float transmission;\n#endif\n#ifdef REFLECTIVITY\n\tuniform float reflectivity;\n#endif\n#ifdef CLEARCOAT\n\tuniform float clearcoat;\n\tuniform float clearcoatRoughness;\n#endif\n#ifdef USE_SHEEN\n\tuniform vec3 sheen;\n#endif\nvarying vec3 vViewPosition;\n#ifndef FLAT_SHADED\n\tvarying vec3 vNormal;\n\t#ifdef USE_TANGENT\n\t\tvarying vec3 vTangent;\n\t\tvarying vec3 vBitangent;\n\t#endif\n#endif\n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \nvoid main() {\n\t#include \n\tvec4 diffuseColor = vec4( diffuse, opacity );\n\tReflectedLight reflectedLight = ReflectedLight( vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ) );\n\tvec3 totalEmissiveRadiance = emissive;\n\t#ifdef TRANSMISSION\n\t\tfloat totalTransmission = transmission;\n\t#endif\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\tvec3 outgoingLight = reflectedLight.directDiffuse + reflectedLight.indirectDiffuse + reflectedLight.directSpecular + reflectedLight.indirectSpecular + totalEmissiveRadiance;\n\t#ifdef TRANSMISSION\n\t\tdiffuseColor.a *= saturate( 1. - totalTransmission + linearToRelativeLuminance( reflectedLight.directSpecular + reflectedLight.indirectSpecular ) );\n\t#endif\n\tgl_FragColor = vec4( outgoingLight, diffuseColor.a );\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n}", +meshphysical_vert:"#define STANDARD\nvarying vec3 vViewPosition;\n#ifndef FLAT_SHADED\n\tvarying vec3 vNormal;\n\t#ifdef USE_TANGENT\n\t\tvarying vec3 vTangent;\n\t\tvarying vec3 vBitangent;\n\t#endif\n#endif\n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \nvoid main() {\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n#ifndef FLAT_SHADED\n\tvNormal = normalize( transformedNormal );\n\t#ifdef USE_TANGENT\n\t\tvTangent = normalize( transformedTangent );\n\t\tvBitangent = normalize( cross( vNormal, vTangent ) * tangent.w );\n\t#endif\n#endif\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\tvViewPosition = - mvPosition.xyz;\n\t#include \n\t#include \n\t#include \n}", +normal_frag:"#define NORMAL\nuniform float opacity;\n#if defined( FLAT_SHADED ) || defined( USE_BUMPMAP ) || defined( TANGENTSPACE_NORMALMAP )\n\tvarying vec3 vViewPosition;\n#endif\n#ifndef FLAT_SHADED\n\tvarying vec3 vNormal;\n\t#ifdef USE_TANGENT\n\t\tvarying vec3 vTangent;\n\t\tvarying vec3 vBitangent;\n\t#endif\n#endif\n#include \n#include \n#include \n#include \n#include \n#include \nvoid main() {\n\t#include \n\t#include \n\t#include \n\t#include \n\tgl_FragColor = vec4( packNormalToRGB( normal ), opacity );\n}", +normal_vert:"#define NORMAL\n#if defined( FLAT_SHADED ) || defined( USE_BUMPMAP ) || defined( TANGENTSPACE_NORMALMAP )\n\tvarying vec3 vViewPosition;\n#endif\n#ifndef FLAT_SHADED\n\tvarying vec3 vNormal;\n\t#ifdef USE_TANGENT\n\t\tvarying vec3 vTangent;\n\t\tvarying vec3 vBitangent;\n\t#endif\n#endif\n#include \n#include \n#include \n#include \n#include \n#include \n#include \nvoid main() {\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n#ifndef FLAT_SHADED\n\tvNormal = normalize( transformedNormal );\n\t#ifdef USE_TANGENT\n\t\tvTangent = normalize( transformedTangent );\n\t\tvBitangent = normalize( cross( vNormal, vTangent ) * tangent.w );\n\t#endif\n#endif\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n#if defined( FLAT_SHADED ) || defined( USE_BUMPMAP ) || defined( TANGENTSPACE_NORMALMAP )\n\tvViewPosition = - mvPosition.xyz;\n#endif\n}", +points_frag:"uniform vec3 diffuse;\nuniform float opacity;\n#include \n#include \n#include \n#include \n#include \n#include \nvoid main() {\n\t#include \n\tvec3 outgoingLight = vec3( 0.0 );\n\tvec4 diffuseColor = vec4( diffuse, opacity );\n\t#include \n\t#include \n\t#include \n\t#include \n\toutgoingLight = diffuseColor.rgb;\n\tgl_FragColor = vec4( outgoingLight, diffuseColor.a );\n\t#include \n\t#include \n\t#include \n\t#include \n}", +points_vert:"uniform float size;\nuniform float scale;\n#include \n#include \n#include \n#include \n#include \n#include \nvoid main() {\n\t#include \n\t#include \n\t#include \n\t#include \n\tgl_PointSize = size;\n\t#ifdef USE_SIZEATTENUATION\n\t\tbool isPerspective = isPerspectiveMatrix( projectionMatrix );\n\t\tif ( isPerspective ) gl_PointSize *= ( scale / - mvPosition.z );\n\t#endif\n\t#include \n\t#include \n\t#include \n\t#include \n}", +shadow_frag:"uniform vec3 color;\nuniform float opacity;\n#include \n#include \n#include \n#include \n#include \n#include \n#include \nvoid main() {\n\tgl_FragColor = vec4( color, opacity * ( 1.0 - getShadowMask() ) );\n\t#include \n\t#include \n\t#include \n}",shadow_vert:"#include \n#include \n#include \nvoid main() {\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n}", +sprite_frag:"uniform vec3 diffuse;\nuniform float opacity;\n#include \n#include \n#include \n#include \n#include \n#include \n#include \nvoid main() {\n\t#include \n\tvec3 outgoingLight = vec3( 0.0 );\n\tvec4 diffuseColor = vec4( diffuse, opacity );\n\t#include \n\t#include \n\t#include \n\t#include \n\toutgoingLight = diffuseColor.rgb;\n\tgl_FragColor = vec4( outgoingLight, diffuseColor.a );\n\t#include \n\t#include \n\t#include \n}", +sprite_vert:"uniform float rotation;\nuniform vec2 center;\n#include \n#include \n#include \n#include \n#include \nvoid main() {\n\t#include \n\tvec4 mvPosition = modelViewMatrix * vec4( 0.0, 0.0, 0.0, 1.0 );\n\tvec2 scale;\n\tscale.x = length( vec3( modelMatrix[ 0 ].x, modelMatrix[ 0 ].y, modelMatrix[ 0 ].z ) );\n\tscale.y = length( vec3( modelMatrix[ 1 ].x, modelMatrix[ 1 ].y, modelMatrix[ 1 ].z ) );\n\t#ifndef USE_SIZEATTENUATION\n\t\tbool isPerspective = isPerspectiveMatrix( projectionMatrix );\n\t\tif ( isPerspective ) scale *= - mvPosition.z;\n\t#endif\n\tvec2 alignedPosition = ( position.xy - ( center - vec2( 0.5 ) ) ) * scale;\n\tvec2 rotatedPosition;\n\trotatedPosition.x = cos( rotation ) * alignedPosition.x - sin( rotation ) * alignedPosition.y;\n\trotatedPosition.y = sin( rotation ) * alignedPosition.x + cos( rotation ) * alignedPosition.y;\n\tmvPosition.xy += rotatedPosition;\n\tgl_Position = projectionMatrix * mvPosition;\n\t#include \n\t#include \n\t#include \n}"}, +fa={common:{diffuse:{value:new S(15658734)},opacity:{value:1},map:{value:null},uvTransform:{value:new Da},uv2Transform:{value:new Da},alphaMap:{value:null}},specularmap:{specularMap:{value:null}},envmap:{envMap:{value:null},flipEnvMap:{value:-1},reflectivity:{value:1},refractionRatio:{value:.98},maxMipLevel:{value:0}},aomap:{aoMap:{value:null},aoMapIntensity:{value:1}},lightmap:{lightMap:{value:null},lightMapIntensity:{value:1}},emissivemap:{emissiveMap:{value:null}},bumpmap:{bumpMap:{value:null}, +bumpScale:{value:1}},normalmap:{normalMap:{value:null},normalScale:{value:new L(1,1)}},displacementmap:{displacementMap:{value:null},displacementScale:{value:1},displacementBias:{value:0}},roughnessmap:{roughnessMap:{value:null}},metalnessmap:{metalnessMap:{value:null}},gradientmap:{gradientMap:{value:null}},fog:{fogDensity:{value:2.5E-4},fogNear:{value:1},fogFar:{value:2E3},fogColor:{value:new S(16777215)}},lights:{ambientLightColor:{value:[]},lightProbe:{value:[]},directionalLights:{value:[],properties:{direction:{}, +color:{}}},directionalLightShadows:{value:[],properties:{shadowBias:{},shadowNormalBias:{},shadowRadius:{},shadowMapSize:{}}},directionalShadowMap:{value:[]},directionalShadowMatrix:{value:[]},spotLights:{value:[],properties:{color:{},position:{},direction:{},distance:{},coneCos:{},penumbraCos:{},decay:{}}},spotLightShadows:{value:[],properties:{shadowBias:{},shadowNormalBias:{},shadowRadius:{},shadowMapSize:{}}},spotShadowMap:{value:[]},spotShadowMatrix:{value:[]},pointLights:{value:[],properties:{color:{}, +position:{},decay:{},distance:{}}},pointLightShadows:{value:[],properties:{shadowBias:{},shadowNormalBias:{},shadowRadius:{},shadowMapSize:{},shadowCameraNear:{},shadowCameraFar:{}}},pointShadowMap:{value:[]},pointShadowMatrix:{value:[]},hemisphereLights:{value:[],properties:{direction:{},skyColor:{},groundColor:{}}},rectAreaLights:{value:[],properties:{color:{},position:{},width:{},height:{}}},ltc_1:{value:null},ltc_2:{value:null}},points:{diffuse:{value:new S(15658734)},opacity:{value:1},size:{value:1}, +scale:{value:1},map:{value:null},alphaMap:{value:null},uvTransform:{value:new Da}},sprite:{diffuse:{value:new S(15658734)},opacity:{value:1},center:{value:new L(.5,.5)},rotation:{value:0},map:{value:null},alphaMap:{value:null},uvTransform:{value:new Da}}},Pb={basic:{uniforms:nb([fa.common,fa.specularmap,fa.envmap,fa.aomap,fa.lightmap,fa.fog]),vertexShader:Ba.meshbasic_vert,fragmentShader:Ba.meshbasic_frag},lambert:{uniforms:nb([fa.common,fa.specularmap,fa.envmap,fa.aomap,fa.lightmap,fa.emissivemap, +fa.fog,fa.lights,{emissive:{value:new S(0)}}]),vertexShader:Ba.meshlambert_vert,fragmentShader:Ba.meshlambert_frag},phong:{uniforms:nb([fa.common,fa.specularmap,fa.envmap,fa.aomap,fa.lightmap,fa.emissivemap,fa.bumpmap,fa.normalmap,fa.displacementmap,fa.fog,fa.lights,{emissive:{value:new S(0)},specular:{value:new S(1118481)},shininess:{value:30}}]),vertexShader:Ba.meshphong_vert,fragmentShader:Ba.meshphong_frag},standard:{uniforms:nb([fa.common,fa.envmap,fa.aomap,fa.lightmap,fa.emissivemap,fa.bumpmap, +fa.normalmap,fa.displacementmap,fa.roughnessmap,fa.metalnessmap,fa.fog,fa.lights,{emissive:{value:new S(0)},roughness:{value:1},metalness:{value:0},envMapIntensity:{value:1}}]),vertexShader:Ba.meshphysical_vert,fragmentShader:Ba.meshphysical_frag},toon:{uniforms:nb([fa.common,fa.aomap,fa.lightmap,fa.emissivemap,fa.bumpmap,fa.normalmap,fa.displacementmap,fa.gradientmap,fa.fog,fa.lights,{emissive:{value:new S(0)}}]),vertexShader:Ba.meshtoon_vert,fragmentShader:Ba.meshtoon_frag},matcap:{uniforms:nb([fa.common, +fa.bumpmap,fa.normalmap,fa.displacementmap,fa.fog,{matcap:{value:null}}]),vertexShader:Ba.meshmatcap_vert,fragmentShader:Ba.meshmatcap_frag},points:{uniforms:nb([fa.points,fa.fog]),vertexShader:Ba.points_vert,fragmentShader:Ba.points_frag},dashed:{uniforms:nb([fa.common,fa.fog,{scale:{value:1},dashSize:{value:1},totalSize:{value:2}}]),vertexShader:Ba.linedashed_vert,fragmentShader:Ba.linedashed_frag},depth:{uniforms:nb([fa.common,fa.displacementmap]),vertexShader:Ba.depth_vert,fragmentShader:Ba.depth_frag}, +normal:{uniforms:nb([fa.common,fa.bumpmap,fa.normalmap,fa.displacementmap,{opacity:{value:1}}]),vertexShader:Ba.normal_vert,fragmentShader:Ba.normal_frag},sprite:{uniforms:nb([fa.sprite,fa.fog]),vertexShader:Ba.sprite_vert,fragmentShader:Ba.sprite_frag},background:{uniforms:{uvTransform:{value:new Da},t2D:{value:null}},vertexShader:Ba.background_vert,fragmentShader:Ba.background_frag},cube:{uniforms:nb([fa.envmap,{opacity:{value:1}}]),vertexShader:Ba.cube_vert,fragmentShader:Ba.cube_frag},equirect:{uniforms:{tEquirect:{value:null}}, +vertexShader:Ba.equirect_vert,fragmentShader:Ba.equirect_frag},distanceRGBA:{uniforms:nb([fa.common,fa.displacementmap,{referencePosition:{value:new w},nearDistance:{value:1},farDistance:{value:1E3}}]),vertexShader:Ba.distanceRGBA_vert,fragmentShader:Ba.distanceRGBA_frag},shadow:{uniforms:nb([fa.lights,fa.fog,{color:{value:new S(0)},opacity:{value:1}}]),vertexShader:Ba.shadow_vert,fragmentShader:Ba.shadow_frag}};Pb.physical={uniforms:nb([Pb.standard.uniforms,{clearcoat:{value:0},clearcoatMap:{value:null}, +clearcoatRoughness:{value:0},clearcoatRoughnessMap:{value:null},clearcoatNormalScale:{value:new L(1,1)},clearcoatNormalMap:{value:null},sheen:{value:new S(0)},transmission:{value:0},transmissionMap:{value:null}}]),vertexShader:Ba.meshphysical_vert,fragmentShader:Ba.meshphysical_frag};kc.prototype=Object.create(Oa.prototype);kc.prototype.constructor=kc;kc.prototype.isCubeTexture=!0;Object.defineProperty(kc.prototype,"images",{get:function(){return this.image},set:function(a){this.image=a}});Id.prototype= +Object.create(Oa.prototype);Id.prototype.constructor=Id;Id.prototype.isDataTexture2DArray=!0;Jd.prototype=Object.create(Oa.prototype);Jd.prototype.constructor=Jd;Jd.prototype.isDataTexture3D=!0;var Ei=new Oa,Kk=new Id,Mk=new Jd,Fi=new kc,yi=[],Ai=[],Di=new Float32Array(16),Ci=new Float32Array(9),Bi=new Float32Array(4);Gi.prototype.updateCache=function(a){var b=this.cache;a instanceof Float32Array&&b.length!==a.length&&(this.cache=new Float32Array(a.length));Eb(b,a)};Hi.prototype.setValue=function(a, +b,d){for(var e=this.seq,f=0,g=e.length;f!==g;++f){var h=e[f];h.setValue(a,b[h.id],d)}};var lh=/([\w\d_]+)(\])?(\[|\.)?/g;Dc.prototype.setValue=function(a,b,d,e){b=this.map[b];void 0!==b&&b.setValue(a,d,e)};Dc.prototype.setOptional=function(a,b,d){b=b[d];void 0!==b&&this.setValue(a,d,b)};Dc.upload=function(a,b,d,e){for(var f=0,g=b.length;f!==g;++f){var h=b[f],k=d[h.id];!1!==k.needsUpdate&&h.setValue(a,k.value,e)}};Dc.seqWithValue=function(a,b){for(var d=[],e=0,f=a.length;e!==f;++e){var g=a[e];g.id in +b&&d.push(g)}return d};var ql=0,nh=/^[ \t]*#include +<([\w\d./]+)>/gm,Qi=/#pragma unroll_loop[\s]+?for \( int i = (\d+); i < (\d+); i \+\+ \) \{([\s\S]+?)(?=\})\}/g,Pi=/#pragma unroll_loop_start\s+for\s*\(\s*int\s+i\s*=\s*(\d+)\s*;\s*i\s*<\s*(\d+)\s*;\s*i\s*\+\+\s*\)\s*{([\s\S]+?)}\s+#pragma unroll_loop_end/g,Al=0;Ec.prototype=Object.create(ra.prototype);Ec.prototype.constructor=Ec;Ec.prototype.isMeshDepthMaterial=!0;Ec.prototype.copy=function(a){ra.prototype.copy.call(this,a);this.depthPacking=a.depthPacking; +this.skinning=a.skinning;this.morphTargets=a.morphTargets;this.map=a.map;this.alphaMap=a.alphaMap;this.displacementMap=a.displacementMap;this.displacementScale=a.displacementScale;this.displacementBias=a.displacementBias;this.wireframe=a.wireframe;this.wireframeLinewidth=a.wireframeLinewidth;return this};Fc.prototype=Object.create(ra.prototype);Fc.prototype.constructor=Fc;Fc.prototype.isMeshDistanceMaterial=!0;Fc.prototype.copy=function(a){ra.prototype.copy.call(this,a);this.referencePosition.copy(a.referencePosition); +this.nearDistance=a.nearDistance;this.farDistance=a.farDistance;this.skinning=a.skinning;this.morphTargets=a.morphTargets;this.map=a.map;this.alphaMap=a.alphaMap;this.displacementMap=a.displacementMap;this.displacementScale=a.displacementScale;this.displacementBias=a.displacementBias;return this};Tf.prototype=Object.assign(Object.create(eb.prototype),{constructor:Tf,isArrayCamera:!0});Gc.prototype=Object.assign(Object.create(ha.prototype),{constructor:Gc,isGroup:!0});Object.assign(Me.prototype,{constructor:Me, +getHandSpace:function(){if(null===this._hand&&(this._hand=new Gc,this._hand.matrixAutoUpdate=!1,this._hand.visible=!1,this._hand.joints=[],this._hand.inputState={pinching:!1},window.XRHand))for(var a=0;a<=window.XRHand.LITTLE_PHALANX_TIP;a++){var b=new Gc;b.matrixAutoUpdate=!1;b.visible=!1;this._hand.joints.push(b);this._hand.add(b)}return this._hand},getTargetRaySpace:function(){null===this._targetRay&&(this._targetRay=new Gc,this._targetRay.matrixAutoUpdate=!1,this._targetRay.visible=!1);return this._targetRay}, +getGripSpace:function(){null===this._grip&&(this._grip=new Gc,this._grip.matrixAutoUpdate=!1,this._grip.visible=!1);return this._grip},dispatchEvent:function(a){null!==this._targetRay&&this._targetRay.dispatchEvent(a);null!==this._grip&&this._grip.dispatchEvent(a);null!==this._hand&&this._hand.dispatchEvent(a);return this},disconnect:function(a){this.dispatchEvent({type:"disconnected",data:a});null!==this._targetRay&&(this._targetRay.visible=!1);null!==this._grip&&(this._grip.visible=!1);null!==this._hand&& +(this._hand.visible=!1);return this},update:function(a,b,d){var e=null,f=null,g=null,h=this._targetRay,k=this._grip,l=this._hand;if(a)if(l&&a.hand){g=!0;for(var m=0;m<=window.XRHand.LITTLE_PHALANX_TIP;m++)if(a.hand[m]){var n=b.getJointPose(a.hand[m],d),p=l.joints[m];null!==n&&(p.matrix.fromArray(n.transform.matrix),p.matrix.decompose(p.position,p.rotation,p.scale),p.jointRadius=n.radius);p.visible=null!==n;n=l.joints[window.XRHand.INDEX_PHALANX_TIP].position.distanceTo(l.joints[window.XRHand.THUMB_PHALANX_TIP].position); +l.inputState.pinching&&.025=n&&(l.inputState.pinching=!0,this.dispatchEvent({type:"pinchstart",handedness:a.handedness,target:this}))}}else null!==h&&(e=b.getPose(a.targetRaySpace,d),null!==e&&(h.matrix.fromArray(e.transform.matrix),h.matrix.decompose(h.position,h.rotation,h.scale))),null!==k&&a.gripSpace&&(f=b.getPose(a.gripSpace,d),null!==f&&(k.matrix.fromArray(f.transform.matrix), +k.matrix.decompose(k.position,k.rotation,k.scale)));null!==h&&(h.visible=null!==e);null!==k&&(k.visible=null!==f);null!==l&&(l.visible=null!==g);return this}});Object.assign(Wi.prototype,wb.prototype);th.prototype=Object.assign(Object.create(Ne.prototype),{constructor:th,isWebGL1Renderer:!0});var Gf=function(a,b){Object.defineProperty(this,"isFogExp2",{value:!0});this.name="";this.color=new S(a);this.density=void 0!==b?b:2.5E-4};Gf.prototype.clone=function(){return new Gf(this.color,this.density)}; +Gf.prototype.toJSON=function(){return{type:"FogExp2",color:this.color.getHex(),density:this.density}};var Hf=function(a,b,d){Object.defineProperty(this,"isFog",{value:!0});this.name="";this.color=new S(a);this.near=void 0!==b?b:1;this.far=void 0!==d?d:1E3};Hf.prototype.clone=function(){return new Hf(this.color,this.near,this.far)};Hf.prototype.toJSON=function(){return{type:"Fog",color:this.color.getHex(),near:this.near,far:this.far}};Jc.prototype=Object.create(ha.prototype);Jc.prototype.constructor= +Jc;Jc.prototype.copy=function(a,b){ha.prototype.copy.call(this,a,b);null!==a.background&&(this.background=a.background.clone());null!==a.environment&&(this.environment=a.environment.clone());null!==a.fog&&(this.fog=a.fog.clone());null!==a.overrideMaterial&&(this.overrideMaterial=a.overrideMaterial.clone());this.autoUpdate=a.autoUpdate;this.matrixAutoUpdate=a.matrixAutoUpdate;return this};Jc.prototype.toJSON=function(a){var b=ha.prototype.toJSON.call(this,a);null!==this.background&&(b.object.background= +this.background.toJSON(a));null!==this.environment&&(b.object.environment=this.environment.toJSON(a));null!==this.fog&&(b.object.fog=this.fog.toJSON());return b};Object.defineProperty(Gb.prototype,"needsUpdate",{set:function(a){!0===a&&this.version++}});Object.assign(Gb.prototype,{isInterleavedBuffer:!0,onUploadCallback:function(){},setUsage:function(a){this.usage=a;return this},copy:function(a){this.array=new a.array.constructor(a.array);this.count=a.count;this.stride=a.stride;this.usage=a.usage; +return this},copyAt:function(a,b,d){a*=this.stride;d*=b.stride;for(var e=0,f=this.stride;ea.far||b.push({distance:f,point:If.clone(),uv:Ga.getUV(If,Mg,Jf,Ng,Fj,li,Gj,new L),face:null,object:this})},copy:function(a){ha.prototype.copy.call(this, +a);void 0!==a.center&&this.center.copy(a.center);this.material=a.material;return this}});var Og=new w,Hj=new w;Se.prototype=Object.assign(Object.create(ha.prototype),{constructor:Se,isLOD:!0,copy:function(a){ha.prototype.copy.call(this,a,!1);for(var b=a.levels,d=0,e=b.length;d=b[e].distance)b[e-1].object.visible=!1,b[e].object.visible=!0;else break;for(this._currentLevel=e-1;eg;g++)if(l=d.getComponent(g),0!==l){var m=b.getComponent(g);f.multiplyMatrices(k.bones[m].matrixWorld, +k.boneInverses[m]);h.addScaledVector(e.copy(a).applyMatrix4(f),l)}return h.applyMatrix4(this.bindMatrixInverse)}}()});var Ij=new da,Vl=new da;Object.assign(Yf.prototype,{calculateInverses:function(){this.boneInverses=[];for(var a=0,b=this.bones.length;ae||(k.applyMatrix4(this.matrixWorld),t=a.ray.origin.distanceTo(k),ta.far||b.push({distance:t,point:f.clone().applyMatrix4(this.matrixWorld),index:n,face:null,faceIndex:null,object:this}))}}else for(m=0,n=d.length/3-1;me||(k.applyMatrix4(this.matrixWorld),p=a.ray.origin.distanceTo(k),pa.far||b.push({distance:p,point:f.clone().applyMatrix4(this.matrixWorld),index:m,face:null,faceIndex:null,object:this}))}else if(d.isGeometry)for(g=d.vertices,h=g.length,d=0;de||(k.applyMatrix4(this.matrixWorld),m=a.ray.origin.distanceTo(k),ma.far||b.push({distance:m,point:f.clone().applyMatrix4(this.matrixWorld), +index:d,face:null,faceIndex:null,object:this}))}},updateMorphTargets:function(){var a=this.geometry;if(a.isBufferGeometry){a=a.morphAttributes;var b=Object.keys(a);if(0=a.HAVE_CURRENT_DATA&&(this.needsUpdate=!0)}});Qd.prototype=Object.create(Oa.prototype);Qd.prototype.constructor=Qd;Qd.prototype.isCompressedTexture=!0;Te.prototype=Object.create(Oa.prototype);Te.prototype.constructor=Te;Te.prototype.isCanvasTexture=!0;Ue.prototype=Object.create(Oa.prototype);Ue.prototype.constructor=Ue;Ue.prototype.isDepthTexture=!0;Rd.prototype=Object.create(ka.prototype); +Rd.prototype.constructor=Rd;Ve.prototype=Object.create(sa.prototype);Ve.prototype.constructor=Ve;Sd.prototype=Object.create(ka.prototype);Sd.prototype.constructor=Sd;We.prototype=Object.create(sa.prototype);We.prototype.constructor=We;zb.prototype=Object.create(ka.prototype);zb.prototype.constructor=zb;Xe.prototype=Object.create(sa.prototype);Xe.prototype.constructor=Xe;Td.prototype=Object.create(zb.prototype);Td.prototype.constructor=Td;Ye.prototype=Object.create(sa.prototype);Ye.prototype.constructor= +Ye;fd.prototype=Object.create(zb.prototype);fd.prototype.constructor=fd;Ze.prototype=Object.create(sa.prototype);Ze.prototype.constructor=Ze;Ud.prototype=Object.create(zb.prototype);Ud.prototype.constructor=Ud;$e.prototype=Object.create(sa.prototype);$e.prototype.constructor=$e;Vd.prototype=Object.create(zb.prototype);Vd.prototype.constructor=Vd;af.prototype=Object.create(sa.prototype);af.prototype.constructor=af;gd.prototype=Object.create(ka.prototype);gd.prototype.constructor=gd;gd.prototype.toJSON= +function(){var a=ka.prototype.toJSON.call(this);a.path=this.parameters.path.toJSON();return a};bf.prototype=Object.create(sa.prototype);bf.prototype.constructor=bf;Wd.prototype=Object.create(ka.prototype);Wd.prototype.constructor=Wd;cf.prototype=Object.create(sa.prototype);cf.prototype.constructor=cf;Xd.prototype=Object.create(ka.prototype);Xd.prototype.constructor=Xd;var Wl={triangulate:function(a,b,d){d=d||2;var e=b&&b.length,f=e?b[0]*d:a.length,g=bj(a,0,f,d,!0),h=[];if(!g||g.next===g.prev)return h; +var k;if(e){var l=d;e=[];var m;var n=0;for(m=b.length;n80*d){var q=k=a[0];var v=e=a[1];for(l=d;lk&&(k=n),b>e&&(e=b);k=Math.max(k-q,e-v);k=0!==k?1/k:0}ef(g,h,d,q,v,k);return h}},nc={area:function(a){for(var b=a.length,d=0, +e=b-1,f=0;fnc.area(a)},triangulateShape:function(a,b){var d=[],e=[],f=[];fj(a);gj(d,a);a=a.length;b.forEach(fj);for(var g=0;gMath.abs(h-l)?[new L(a,1-d),new L(k,1-e),new L(m,1-f),new L(p,1-b)]:[new L(h,1-d),new L(l,1-e),new L(n,1-f),new L(t,1-b)]}};gf.prototype=Object.create(sa.prototype);gf.prototype.constructor=gf;Zd.prototype=Object.create(bc.prototype);Zd.prototype.constructor=Zd;hf.prototype=Object.create(sa.prototype);hf.prototype.constructor=hf;id.prototype=Object.create(ka.prototype);id.prototype.constructor=id;jf.prototype=Object.create(sa.prototype);jf.prototype.constructor= +jf;$d.prototype=Object.create(ka.prototype);$d.prototype.constructor=$d;kf.prototype=Object.create(sa.prototype);kf.prototype.constructor=kf;ae.prototype=Object.create(ka.prototype);ae.prototype.constructor=ae;jd.prototype=Object.create(sa.prototype);jd.prototype.constructor=jd;jd.prototype.toJSON=function(){var a=sa.prototype.toJSON.call(this);return ij(this.parameters.shapes,a)};kd.prototype=Object.create(ka.prototype);kd.prototype.constructor=kd;kd.prototype.toJSON=function(){var a=ka.prototype.toJSON.call(this); +return ij(this.parameters.shapes,a)};be.prototype=Object.create(ka.prototype);be.prototype.constructor=be;ld.prototype=Object.create(sa.prototype);ld.prototype.constructor=ld;oc.prototype=Object.create(ka.prototype);oc.prototype.constructor=oc;lf.prototype=Object.create(ld.prototype);lf.prototype.constructor=lf;mf.prototype=Object.create(oc.prototype);mf.prototype.constructor=mf;nf.prototype=Object.create(sa.prototype);nf.prototype.constructor=nf;ce.prototype=Object.create(ka.prototype);ce.prototype.constructor= +ce;var vb=Object.freeze({__proto__:null,WireframeGeometry:Rd,ParametricGeometry:Ve,ParametricBufferGeometry:Sd,TetrahedronGeometry:Xe,TetrahedronBufferGeometry:Td,OctahedronGeometry:Ye,OctahedronBufferGeometry:fd,IcosahedronGeometry:Ze,IcosahedronBufferGeometry:Ud,DodecahedronGeometry:$e,DodecahedronBufferGeometry:Vd,PolyhedronGeometry:We,PolyhedronBufferGeometry:zb,TubeGeometry:af,TubeBufferGeometry:gd,TorusKnotGeometry:bf,TorusKnotBufferGeometry:Wd,TorusGeometry:cf,TorusBufferGeometry:Xd,TextGeometry:gf, +TextBufferGeometry:Zd,SphereGeometry:hf,SphereBufferGeometry:id,RingGeometry:jf,RingBufferGeometry:$d,PlaneGeometry:Je,PlaneBufferGeometry:cd,LatheGeometry:kf,LatheBufferGeometry:ae,ShapeGeometry:jd,ShapeBufferGeometry:kd,ExtrudeGeometry:hd,ExtrudeBufferGeometry:bc,EdgesGeometry:be,ConeGeometry:lf,ConeBufferGeometry:mf,CylinderGeometry:ld,CylinderBufferGeometry:oc,CircleGeometry:nf,CircleBufferGeometry:ce,BoxGeometry:Fd,BoxBufferGeometry:Bc});md.prototype=Object.create(ra.prototype);md.prototype.constructor= +md;md.prototype.isShadowMaterial=!0;md.prototype.copy=function(a){ra.prototype.copy.call(this,a);this.color.copy(a.color);return this};pc.prototype=Object.create(sb.prototype);pc.prototype.constructor=pc;pc.prototype.isRawShaderMaterial=!0;cc.prototype=Object.create(ra.prototype);cc.prototype.constructor=cc;cc.prototype.isMeshStandardMaterial=!0;cc.prototype.copy=function(a){ra.prototype.copy.call(this,a);this.defines={STANDARD:""};this.color.copy(a.color);this.roughness=a.roughness;this.metalness= +a.metalness;this.map=a.map;this.lightMap=a.lightMap;this.lightMapIntensity=a.lightMapIntensity;this.aoMap=a.aoMap;this.aoMapIntensity=a.aoMapIntensity;this.emissive.copy(a.emissive);this.emissiveMap=a.emissiveMap;this.emissiveIntensity=a.emissiveIntensity;this.bumpMap=a.bumpMap;this.bumpScale=a.bumpScale;this.normalMap=a.normalMap;this.normalMapType=a.normalMapType;this.normalScale.copy(a.normalScale);this.displacementMap=a.displacementMap;this.displacementScale=a.displacementScale;this.displacementBias= +a.displacementBias;this.roughnessMap=a.roughnessMap;this.metalnessMap=a.metalnessMap;this.alphaMap=a.alphaMap;this.envMap=a.envMap;this.envMapIntensity=a.envMapIntensity;this.refractionRatio=a.refractionRatio;this.wireframe=a.wireframe;this.wireframeLinewidth=a.wireframeLinewidth;this.wireframeLinecap=a.wireframeLinecap;this.wireframeLinejoin=a.wireframeLinejoin;this.skinning=a.skinning;this.morphTargets=a.morphTargets;this.morphNormals=a.morphNormals;this.vertexTangents=a.vertexTangents;return this}; +Nc.prototype=Object.create(cc.prototype);Nc.prototype.constructor=Nc;Nc.prototype.isMeshPhysicalMaterial=!0;Nc.prototype.copy=function(a){cc.prototype.copy.call(this,a);this.defines={STANDARD:"",PHYSICAL:""};this.clearcoat=a.clearcoat;this.clearcoatMap=a.clearcoatMap;this.clearcoatRoughness=a.clearcoatRoughness;this.clearcoatRoughnessMap=a.clearcoatRoughnessMap;this.clearcoatNormalMap=a.clearcoatNormalMap;this.clearcoatNormalScale.copy(a.clearcoatNormalScale);this.reflectivity=a.reflectivity;this.sheen= +a.sheen?(this.sheen||new S).copy(a.sheen):null;this.transmission=a.transmission;this.transmissionMap=a.transmissionMap;return this};Oc.prototype=Object.create(ra.prototype);Oc.prototype.constructor=Oc;Oc.prototype.isMeshPhongMaterial=!0;Oc.prototype.copy=function(a){ra.prototype.copy.call(this,a);this.color.copy(a.color);this.specular.copy(a.specular);this.shininess=a.shininess;this.map=a.map;this.lightMap=a.lightMap;this.lightMapIntensity=a.lightMapIntensity;this.aoMap=a.aoMap;this.aoMapIntensity= +a.aoMapIntensity;this.emissive.copy(a.emissive);this.emissiveMap=a.emissiveMap;this.emissiveIntensity=a.emissiveIntensity;this.bumpMap=a.bumpMap;this.bumpScale=a.bumpScale;this.normalMap=a.normalMap;this.normalMapType=a.normalMapType;this.normalScale.copy(a.normalScale);this.displacementMap=a.displacementMap;this.displacementScale=a.displacementScale;this.displacementBias=a.displacementBias;this.specularMap=a.specularMap;this.alphaMap=a.alphaMap;this.envMap=a.envMap;this.combine=a.combine;this.reflectivity= +a.reflectivity;this.refractionRatio=a.refractionRatio;this.wireframe=a.wireframe;this.wireframeLinewidth=a.wireframeLinewidth;this.wireframeLinecap=a.wireframeLinecap;this.wireframeLinejoin=a.wireframeLinejoin;this.skinning=a.skinning;this.morphTargets=a.morphTargets;this.morphNormals=a.morphNormals;return this};nd.prototype=Object.create(ra.prototype);nd.prototype.constructor=nd;nd.prototype.isMeshToonMaterial=!0;nd.prototype.copy=function(a){ra.prototype.copy.call(this,a);this.color.copy(a.color); +this.map=a.map;this.gradientMap=a.gradientMap;this.lightMap=a.lightMap;this.lightMapIntensity=a.lightMapIntensity;this.aoMap=a.aoMap;this.aoMapIntensity=a.aoMapIntensity;this.emissive.copy(a.emissive);this.emissiveMap=a.emissiveMap;this.emissiveIntensity=a.emissiveIntensity;this.bumpMap=a.bumpMap;this.bumpScale=a.bumpScale;this.normalMap=a.normalMap;this.normalMapType=a.normalMapType;this.normalScale.copy(a.normalScale);this.displacementMap=a.displacementMap;this.displacementScale=a.displacementScale; +this.displacementBias=a.displacementBias;this.alphaMap=a.alphaMap;this.wireframe=a.wireframe;this.wireframeLinewidth=a.wireframeLinewidth;this.wireframeLinecap=a.wireframeLinecap;this.wireframeLinejoin=a.wireframeLinejoin;this.skinning=a.skinning;this.morphTargets=a.morphTargets;this.morphNormals=a.morphNormals;return this};od.prototype=Object.create(ra.prototype);od.prototype.constructor=od;od.prototype.isMeshNormalMaterial=!0;od.prototype.copy=function(a){ra.prototype.copy.call(this,a);this.bumpMap= +a.bumpMap;this.bumpScale=a.bumpScale;this.normalMap=a.normalMap;this.normalMapType=a.normalMapType;this.normalScale.copy(a.normalScale);this.displacementMap=a.displacementMap;this.displacementScale=a.displacementScale;this.displacementBias=a.displacementBias;this.wireframe=a.wireframe;this.wireframeLinewidth=a.wireframeLinewidth;this.skinning=a.skinning;this.morphTargets=a.morphTargets;this.morphNormals=a.morphNormals;return this};pd.prototype=Object.create(ra.prototype);pd.prototype.constructor= +pd;pd.prototype.isMeshLambertMaterial=!0;pd.prototype.copy=function(a){ra.prototype.copy.call(this,a);this.color.copy(a.color);this.map=a.map;this.lightMap=a.lightMap;this.lightMapIntensity=a.lightMapIntensity;this.aoMap=a.aoMap;this.aoMapIntensity=a.aoMapIntensity;this.emissive.copy(a.emissive);this.emissiveMap=a.emissiveMap;this.emissiveIntensity=a.emissiveIntensity;this.specularMap=a.specularMap;this.alphaMap=a.alphaMap;this.envMap=a.envMap;this.combine=a.combine;this.reflectivity=a.reflectivity; +this.refractionRatio=a.refractionRatio;this.wireframe=a.wireframe;this.wireframeLinewidth=a.wireframeLinewidth;this.wireframeLinecap=a.wireframeLinecap;this.wireframeLinejoin=a.wireframeLinejoin;this.skinning=a.skinning;this.morphTargets=a.morphTargets;this.morphNormals=a.morphNormals;return this};qd.prototype=Object.create(ra.prototype);qd.prototype.constructor=qd;qd.prototype.isMeshMatcapMaterial=!0;qd.prototype.copy=function(a){ra.prototype.copy.call(this,a);this.defines={MATCAP:""};this.color.copy(a.color); +this.matcap=a.matcap;this.map=a.map;this.bumpMap=a.bumpMap;this.bumpScale=a.bumpScale;this.normalMap=a.normalMap;this.normalMapType=a.normalMapType;this.normalScale.copy(a.normalScale);this.displacementMap=a.displacementMap;this.displacementScale=a.displacementScale;this.displacementBias=a.displacementBias;this.alphaMap=a.alphaMap;this.skinning=a.skinning;this.morphTargets=a.morphTargets;this.morphNormals=a.morphNormals;return this};rd.prototype=Object.create(Ya.prototype);rd.prototype.constructor= +rd;rd.prototype.isLineDashedMaterial=!0;rd.prototype.copy=function(a){Ya.prototype.copy.call(this,a);this.scale=a.scale;this.dashSize=a.dashSize;this.gapSize=a.gapSize;return this};var Xl=Object.freeze({__proto__:null,ShadowMaterial:md,SpriteMaterial:Lc,RawShaderMaterial:pc,ShaderMaterial:sb,PointsMaterial:Rb,MeshPhysicalMaterial:Nc,MeshStandardMaterial:cc,MeshPhongMaterial:Oc,MeshToonMaterial:nd,MeshNormalMaterial:od,MeshLambertMaterial:pd,MeshDepthMaterial:Ec,MeshDistanceMaterial:Fc,MeshBasicMaterial:Kb, +MeshMatcapMaterial:qd,LineDashedMaterial:rd,LineBasicMaterial:Ya,Material:ra}),Va={arraySlice:function(a,b,d){return Va.isTypedArray(a)?new a.constructor(a.subarray(b,void 0!==d?d:a.length)):a.slice(b,d)},convertArray:function(a,b,d){return!a||!d&&a.constructor===b?a:"number"===typeof b.BYTES_PER_ELEMENT?new b(a):Array.prototype.slice.call(a)},isTypedArray:function(a){return ArrayBuffer.isView(a)&&!(a instanceof DataView)},getKeyframeOrder:function(a){for(var b=a.length,d=Array(b),e=0;e!==b;++e)d[e]= +e;d.sort(function(f,g){return a[f]-a[g]});return d},sortedArray:function(a,b,d){for(var e=a.length,f=new a.constructor(e),g=0,h=0;h!==e;++g)for(var k=d[g]*b,l=0;l!==b;++l)f[h++]=a[k+l];return f},flattenJSON:function(a,b,d,e){for(var f=1,g=a[0];void 0!==g&&void 0===g[e];)g=a[f++];if(void 0!==g){var h=g[e];if(void 0!==h)if(Array.isArray(h)){do h=g[e],void 0!==h&&(b.push(g.time),d.push.apply(d,h)),g=a[f++];while(void 0!==g)}else if(void 0!==h.toArray){do h=g[e],void 0!==h&&(b.push(g.time),h.toArray(d, +d.length)),g=a[f++];while(void 0!==g)}else{do h=g[e],void 0!==h&&(b.push(g.time),d.push(h)),g=a[f++];while(void 0!==g)}}},subclip:function(a,b,d,e,f){f=f||30;a=a.clone();a.name=b;b=[];for(var g=0;g=e))for(l.push(h.times[n]),p=0;pa.tracks[e].times[0]&&(d=a.tracks[e].times[0]);for(e=0;e=e)e=30;var f=a.tracks.length,g=b/e;b=function(h){var k=d.tracks[h],l=k.ValueTypeName;if("bool"!==l&&"string"!==l&&(h=a.tracks.find(function(B){return B.name===k.name&&B.ValueTypeName===l}),void 0!==h)){var m=0,n=k.getValueSize(); +k.createInterpolant.isInterpolantFactoryMethodGLTFCubicSpline&&(m=n/3);var p=0,t=h.getValueSize();h.createInterpolant.isInterpolantFactoryMethodGLTFCubicSpline&&(p=t/3);var q=k.times.length-1,v=void 0;g<=k.times[0]?v=Va.arraySlice(k.values,m,n-m):g>=k.times[q]?(v=q*n+m,v=Va.arraySlice(k.values,v,v+n-m)):(v=k.createInterpolant(),q=m,m=n-m,v.evaluate(g),v=Va.arraySlice(v.resultBuffer,q,m));"quaternion"===l&&(new ua).fromArray(v).normalize().conjugate().toArray(v);m=h.times.length;for(n=0;n=f)break a; +else{g=b[1];a=f)break b}e=d;d=0}}for(;d>>1,ab;)--g;++g;if(0!==f||g!==e)f>=g&&(g=Math.max(g, +1),f=g-1),a=this.getValueSize(),this.times=Va.arraySlice(d,f,g),this.values=Va.arraySlice(this.values,f*a,g*a);return this},validate:function(){var a=!0,b=this.getValueSize();0!==b-Math.floor(b)&&(console.error("THREE.KeyframeTrack: Invalid value size in track.",this),a=!1);var d=this.times;b=this.values;var e=d.length;0===e&&(console.error("THREE.KeyframeTrack: Track is empty.",this),a=!1);for(var f=null,g=0;g!==e;g++){var h=d[g];if("number"===typeof h&&isNaN(h)){console.error("THREE.KeyframeTrack: Time is not a valid number.", +this,g,h);a=!1;break}if(null!==f&&f>h){console.error("THREE.KeyframeTrack: Out of order keys.",this,g,h,f);a=!1;break}f=h}if(void 0!==b&&Va.isTypedArray(b))for(d=0,e=b.length;d!==e;++d)if(f=b[d],isNaN(f)){console.error("THREE.KeyframeTrack: Value is not a valid number.",this,d,f);a=!1;break}return a},optimize:function(){for(var a=Va.arraySlice(this.times),b=Va.arraySlice(this.values),d=this.getValueSize(),e=2302===this.getInterpolation(),f=a.length-1,g=1,h=1;hh)f=a+1;else if(0d&&(d=0);1Number.EPSILON&&(h.normalize(), +l=Math.acos(xa.clamp(e[d-1].dot(e[d]),-1,1)),f[d].applyMatrix4(k.makeRotationAxis(h,l))),g[d].crossVectors(e[d],f[d]);if(!0===b)for(b=Math.acos(xa.clamp(f[0].dot(f[a]),-1,1)),b/=a,0e;)e+=d;for(;e>d;)e-=d;ef&&(f=1);1E-4>e&&(e=f);1E-4>l&&(l=f);mi.initNonuniformCatmullRom(g.x,h.x,k.x,d.x, +e,f,l);ni.initNonuniformCatmullRom(g.y,h.y,k.y,d.y,e,f,l);oi.initNonuniformCatmullRom(g.z,h.z,k.z,d.z,e,f,l)}else"catmullrom"===this.curveType&&(mi.initCatmullRom(g.x,h.x,k.x,d.x,this.tension),ni.initCatmullRom(g.y,h.y,k.y,d.y,this.tension),oi.initCatmullRom(g.z,h.z,k.z,d.z,this.tension));b.set(mi.calc(a),ni.calc(a),oi.calc(a));return b};ob.prototype.copy=function(a){oa.prototype.copy.call(this,a);this.points=[];for(var b=0,d=a.points.length;bd.length-2?d.length-1:a+1];d=d[a>d.length-3?d.length-1:a+2];b.set(kj(e,f.x,g.x,h.x,d.x),kj(e,f.y,g.y,h.y,d.y));return b};Vb.prototype.copy=function(a){oa.prototype.copy.call(this,a);this.points=[];for(var b=0,d=a.points.length;b=b)return b=d[a]-b,a=this.curves[a],d=a.getLength(),a.getPointAt(0===d?0:1-b/d);a++}return null},getLength:function(){var a=this.getCurveLengths();return a[a.length-1]},updateArcLengths:function(){this.needsUpdate=!0;this.cacheLengths=null;this.getCurveLengths()},getCurveLengths:function(){if(this.cacheLengths&& +this.cacheLengths.length===this.curves.length)return this.cacheLengths;for(var a=[],b=0,d=0,e=this.curves.length;da;a++)this.coefficients.push(new w)};pb.prototype.set=function(a){for(var b=0;9>b;b++)this.coefficients[b].copy(a[b]);return this};pb.prototype.zero=function(){for(var a=0;9>a;a++)this.coefficients[a].set(0,0,0);return this};pb.prototype.getAt=function(a,b){var d=a.x,e=a.y;a=a.z;var f=this.coefficients;b.copy(f[0]).multiplyScalar(.282095);b.addScaledVector(f[1],.488603*e); +b.addScaledVector(f[2],.488603*a);b.addScaledVector(f[3],.488603*d);b.addScaledVector(f[4],1.092548*d*e);b.addScaledVector(f[5],1.092548*e*a);b.addScaledVector(f[6],.315392*(3*a*a-1));b.addScaledVector(f[7],1.092548*d*a);b.addScaledVector(f[8],.546274*(d*d-e*e));return b};pb.prototype.getIrradianceAt=function(a,b){var d=a.x,e=a.y;a=a.z;var f=this.coefficients;b.copy(f[0]).multiplyScalar(.886227);b.addScaledVector(f[1],1.023328*e);b.addScaledVector(f[2],1.023328*a);b.addScaledVector(f[3],1.023328* +d);b.addScaledVector(f[4],.858086*d*e);b.addScaledVector(f[5],.858086*e*a);b.addScaledVector(f[6],.743125*a*a-.247708);b.addScaledVector(f[7],.858086*d*a);b.addScaledVector(f[8],.429043*(d*d-e*e));return b};pb.prototype.add=function(a){for(var b=0;9>b;b++)this.coefficients[b].add(a.coefficients[b]);return this};pb.prototype.addScaledSH=function(a,b){for(var d=0;9>d;d++)this.coefficients[d].addScaledVector(a.coefficients[d],b);return this};pb.prototype.scale=function(a){for(var b=0;9>b;b++)this.coefficients[b].multiplyScalar(a); +return this};pb.prototype.lerp=function(a,b){for(var d=0;9>d;d++)this.coefficients[d].lerp(a.coefficients[d],b);return this};pb.prototype.equals=function(a){for(var b=0;9>b;b++)if(!this.coefficients[b].equals(a.coefficients[b]))return!1;return!0};pb.prototype.copy=function(a){return this.set(a.coefficients)};pb.prototype.clone=function(){return(new this.constructor).copy(this)};pb.prototype.fromArray=function(a,b){void 0===b&&(b=0);for(var d=this.coefficients,e=0;9>e;e++)d[e].fromArray(a,b+3*e);return this}; +pb.prototype.toArray=function(a,b){void 0===a&&(a=[]);void 0===b&&(b=0);for(var d=this.coefficients,e=0;9>e;e++)d[e].toArray(a,b+3*e);return a};pb.getBasisAt=function(a,b){var d=a.x,e=a.y;a=a.z;b[0]=.282095;b[1]=.488603*e;b[2]=.488603*a;b[3]=.488603*d;b[4]=1.092548*d*e;b[5]=1.092548*e*a;b[6]=.315392*(3*a*a-1);b[7]=1.092548*d*a;b[8]=.546274*(d*d-e*e)};Ob.prototype=Object.assign(Object.create(Sa.prototype),{constructor:Ob,isLightProbe:!0,copy:function(a){Sa.prototype.copy.call(this,a);this.sh.copy(a.sh); +return this},fromJSON:function(a){this.intensity=a.intensity;this.sh.fromArray(a.sh);return this},toJSON:function(a){a=Sa.prototype.toJSON.call(this,a);a.object.sh=this.sh.toArray();return a}});sg.prototype=Object.assign(Object.create(Ma.prototype),{constructor:sg,load:function(a,b,d,e){var f=this,g=new Nb(f.manager);g.setPath(f.path);g.setRequestHeader(f.requestHeader);g.load(a,function(h){try{b(f.parse(JSON.parse(h)))}catch(k){e?e(k):console.error(k),f.manager.itemError(a)}},d,e)},parse:function(a){function b(k){void 0=== +d[k]&&console.warn("THREE.MaterialLoader: Undefined texture",k);return d[k]}var d=this.textures,e=new Xl[a.type];void 0!==a.uuid&&(e.uuid=a.uuid);void 0!==a.name&&(e.name=a.name);void 0!==a.color&&e.color.setHex(a.color);void 0!==a.roughness&&(e.roughness=a.roughness);void 0!==a.metalness&&(e.metalness=a.metalness);void 0!==a.sheen&&(e.sheen=(new S).setHex(a.sheen));void 0!==a.emissive&&e.emissive.setHex(a.emissive);void 0!==a.specular&&e.specular.setHex(a.specular);void 0!==a.shininess&&(e.shininess= +a.shininess);void 0!==a.clearcoat&&(e.clearcoat=a.clearcoat);void 0!==a.clearcoatRoughness&&(e.clearcoatRoughness=a.clearcoatRoughness);void 0!==a.fog&&(e.fog=a.fog);void 0!==a.flatShading&&(e.flatShading=a.flatShading);void 0!==a.blending&&(e.blending=a.blending);void 0!==a.combine&&(e.combine=a.combine);void 0!==a.side&&(e.side=a.side);void 0!==a.opacity&&(e.opacity=a.opacity);void 0!==a.transparent&&(e.transparent=a.transparent);void 0!==a.alphaTest&&(e.alphaTest=a.alphaTest);void 0!==a.depthTest&& +(e.depthTest=a.depthTest);void 0!==a.depthWrite&&(e.depthWrite=a.depthWrite);void 0!==a.colorWrite&&(e.colorWrite=a.colorWrite);void 0!==a.stencilWrite&&(e.stencilWrite=a.stencilWrite);void 0!==a.stencilWriteMask&&(e.stencilWriteMask=a.stencilWriteMask);void 0!==a.stencilFunc&&(e.stencilFunc=a.stencilFunc);void 0!==a.stencilRef&&(e.stencilRef=a.stencilRef);void 0!==a.stencilFuncMask&&(e.stencilFuncMask=a.stencilFuncMask);void 0!==a.stencilFail&&(e.stencilFail=a.stencilFail);void 0!==a.stencilZFail&& +(e.stencilZFail=a.stencilZFail);void 0!==a.stencilZPass&&(e.stencilZPass=a.stencilZPass);void 0!==a.wireframe&&(e.wireframe=a.wireframe);void 0!==a.wireframeLinewidth&&(e.wireframeLinewidth=a.wireframeLinewidth);void 0!==a.wireframeLinecap&&(e.wireframeLinecap=a.wireframeLinecap);void 0!==a.wireframeLinejoin&&(e.wireframeLinejoin=a.wireframeLinejoin);void 0!==a.rotation&&(e.rotation=a.rotation);1!==a.linewidth&&(e.linewidth=a.linewidth);void 0!==a.dashSize&&(e.dashSize=a.dashSize);void 0!==a.gapSize&& +(e.gapSize=a.gapSize);void 0!==a.scale&&(e.scale=a.scale);void 0!==a.polygonOffset&&(e.polygonOffset=a.polygonOffset);void 0!==a.polygonOffsetFactor&&(e.polygonOffsetFactor=a.polygonOffsetFactor);void 0!==a.polygonOffsetUnits&&(e.polygonOffsetUnits=a.polygonOffsetUnits);void 0!==a.skinning&&(e.skinning=a.skinning);void 0!==a.morphTargets&&(e.morphTargets=a.morphTargets);void 0!==a.morphNormals&&(e.morphNormals=a.morphNormals);void 0!==a.dithering&&(e.dithering=a.dithering);void 0!==a.vertexTangents&& +(e.vertexTangents=a.vertexTangents);void 0!==a.visible&&(e.visible=a.visible);void 0!==a.toneMapped&&(e.toneMapped=a.toneMapped);void 0!==a.userData&&(e.userData=a.userData);void 0!==a.vertexColors&&(e.vertexColors="number"===typeof a.vertexColors?0Number.EPSILON){if(0>K&&(H=B[E],F=-F,M=B[I],K=-K),!(A.yM.y))if(A.y===H.y){if(A.x===H.x)return!0}else{I=K*(A.x-H.x)-F*(A.y-H.y);if(0===I)return!0;0>I||(G=!G)}}else if(A.y=== +H.y&&(M.x<=A.x&&A.x<=H.x||H.x<=A.x&&A.x<=M.x))return!0}return G}var f=nc.isClockWise,g=this.subPaths;if(0===g.length)return[];if(!0===b)return d(g);b=[];if(1===g.length){var h=g[0];var k=new Pc;k.curves=h.curves;b.push(k);return b}var l=!f(g[0].getPoints());l=a?!l:l;k=[];var m=[],n=[],p=0;m[p]=void 0;n[p]=[];for(var t=0,q=g.length;te&&this._mixBufferRegion(d,a,b*this._origIndex,1-e,b);0=f){var n=f++,p=a[n];b[p.uuid]=m;a[m]=p;b[l]=n;a[n]=k;k=0;for(l=e;k!==l;++k){p=d[k];var t=p[m];p[m]=p[n];p[n]=t}}}this.nCachedObjects_=f},uncache:function(){for(var a=this._objects,b=this._indicesByUUID,d=this._bindings,e=d.length,f=this.nCachedObjects_,g=a.length,h=0,k=arguments.length;h!==k;++h){var l=arguments[h].uuid,m=b[l];if(void 0!==m)if(delete b[l],mb||0=== +d)return;this._startTime=null;b*=d}b*=this._updateTimeScale(a);d=this._updateTime(b);a=this._updateWeight(a);if(0d.parameterPositions[1]&&(this.stopFading(),0===e&&(this.enabled=!1))}}return this._effectiveWeight=b};La.prototype._updateTimeScale=function(a){var b=0;if(!this.paused){b=this.timeScale;var d=this._timeScaleInterpolant;if(null!==d){var e=d.evaluate(a)[0];b*=e;a>d.parameterPositions[1]&&(this.stopWarping(),0===b?this.paused=!0:this.timeScale=b)}}return this._effectiveTimeScale=b};La.prototype._updateTime=function(a){var b=this._clip.duration,d=this.loop,e=this.time+ +a,f=this._loopCount,g=2202===d;if(0===a)return-1===f?e:g&&1===(f&1)?b-e:e;if(2200===d)a:{if(-1===f&&(this._loopCount=0,this._setEndings(!0,!0,!1)),e>=b)e=b;else if(0>e)e=0;else{this.time=e;break a}this.clampWhenFinished?this.paused=!0:this.enabled=!1;this.time=e;this._mixer.dispatchEvent({type:"finished",action:this,direction:0>a?-1:1})}else{-1===f&&(0<=a?(f=0,this._setEndings(!0,0===this.repetitions,g)):this._setEndings(0===this.repetitions,!0,g));if(e>=b||0>e){d=Math.floor(e/b);e-=b*d;f+=Math.abs(d); +var h=this.repetitions-f;0>=h?(this.clampWhenFinished?this.paused=!0:this.enabled=!1,this.time=e=0a,this._setEndings(a,!a,g)):this._setEndings(!1,!1,g),this._loopCount=f,this.time=e,this._mixer.dispatchEvent({type:"loop",action:this,loopDelta:d}))}else this.time=e;if(g&&1===(f&1))return b-e}return e};La.prototype._setEndings=function(a,b,d){var e=this._interpolantSettings;d?(e.endingStart=2401,e.endingEnd= +2401):(e.endingStart=a?this.zeroSlopeAtStart?2401:2400:2402,e.endingEnd=b?this.zeroSlopeAtEnd?2401:2400:2402)};La.prototype._scheduleFading=function(a,b,d){var e=this._mixer,f=e.time,g=this._weightInterpolant;null===g&&(this._weightInterpolant=g=e._lendControlInterpolant());e=g.parameterPositions;g=g.sampleValues;e[0]=f;g[0]=b;e[1]=f+a;g[1]=d;return this};Ph.prototype=Object.assign(Object.create(wb.prototype),{constructor:Ph,_bindAction:function(a,b){var d=a._localRoot||this._root,e=a._clip.tracks, +f=e.length,g=a._propertyBindings;a=a._interpolants;var h=d.uuid,k=this._bindingsByRootAndName,l=k[h];void 0===l&&(l={},k[h]=l);for(k=0;k!==f;++k){var m=e[k],n=m.name,p=l[n];if(void 0===p){p=g[k];if(void 0!==p){null===p._cacheIndex&&(++p.referenceCount,this._addInactiveBinding(p,h,n));continue}p=new Oh(qb.create(d,n,b&&b._propertyBindings[k].binding.parsedPath),m.ValueTypeName,m.getValueSize());++p.referenceCount;this._addInactiveBinding(p,h,n)}g[k]=p;a[k].resultBuffer=p.buffer}},_activateAction:function(a){if(!this._isActiveAction(a)){if(null=== +a._cacheIndex){var b=(a._localRoot||this._root).uuid,d=a._clip.uuid,e=this._actionsByClip[d];this._bindAction(a,e&&e.knownActions[0]);this._addInactiveAction(a,d,b)}b=a._propertyBindings;d=0;for(e=b.length;d!==e;++d){var f=b[d];0===f.useCount++&&(this._lendBinding(f),f.saveOriginalState())}this._lendAction(a)}},_deactivateAction:function(a){if(this._isActiveAction(a)){for(var b=a._propertyBindings,d=0,e=b.length;d!==e;++d){var f=b[d];0===--f.useCount&&(f.restoreOriginalState(),this._takeBackBinding(f))}this._takeBackAction(a)}}, +_initMemoryManager:function(){this._actions=[];this._nActiveActions=0;this._actionsByClip={};this._bindings=[];this._nActiveBindings=0;this._bindingsByRootAndName={};this._controlInterpolants=[];this._nActiveControlInterpolants=0;var a=this;this.stats={actions:{get total(){return a._actions.length},get inUse(){return a._nActiveActions}},bindings:{get total(){return a._bindings.length},get inUse(){return a._nActiveBindings}},controlInterpolants:{get total(){return a._controlInterpolants.length},get inUse(){return a._nActiveControlInterpolants}}}}, +_isActiveAction:function(a){a=a._cacheIndex;return null!==a&&athis.max.x||a.ythis.max.y?!1:!0};$a.prototype.containsBox=function(a){return this.min.x<= +a.min.x&&a.max.x<=this.max.x&&this.min.y<=a.min.y&&a.max.y<=this.max.y};$a.prototype.getParameter=function(a,b){void 0===b&&(console.warn("THREE.Box2: .getParameter() target is now required"),b=new L);return b.set((a.x-this.min.x)/(this.max.x-this.min.x),(a.y-this.min.y)/(this.max.y-this.min.y))};$a.prototype.intersectsBox=function(a){return a.max.xthis.max.x||a.max.ythis.max.y?!1:!0};$a.prototype.clampPoint=function(a,b){void 0===b&&(console.warn("THREE.Box2: .clampPoint() target is now required"), +b=new L);return b.copy(a).clamp(this.min,this.max)};$a.prototype.distanceToPoint=function(a){return Vj.copy(a).clamp(this.min,this.max).sub(a).length()};$a.prototype.intersect=function(a){this.min.max(a.min);this.max.min(a.max);return this};$a.prototype.union=function(a){this.min.min(a.min);this.max.max(a.max);return this};$a.prototype.translate=function(a){this.min.add(a);this.max.add(a);return this};$a.prototype.equals=function(a){return a.min.equals(this.min)&&a.max.equals(this.max)};var Wj=new w, +Zg=new w,Cb=function(a,b){this.start=void 0!==a?a:new w;this.end=void 0!==b?b:new w};Cb.prototype.set=function(a,b){this.start.copy(a);this.end.copy(b);return this};Cb.prototype.clone=function(){return(new this.constructor).copy(this)};Cb.prototype.copy=function(a){this.start.copy(a.start);this.end.copy(a.end);return this};Cb.prototype.getCenter=function(a){void 0===a&&(console.warn("THREE.Line3: .getCenter() target is now required"),a=new w);return a.addVectors(this.start,this.end).multiplyScalar(.5)}; +Cb.prototype.delta=function(a){void 0===a&&(console.warn("THREE.Line3: .delta() target is now required"),a=new w);return a.subVectors(this.end,this.start)};Cb.prototype.distanceSq=function(){return this.start.distanceToSquared(this.end)};Cb.prototype.distance=function(){return this.start.distanceTo(this.end)};Cb.prototype.at=function(a,b){void 0===b&&(console.warn("THREE.Line3: .at() target is now required"),b=new w);return this.delta(b).multiplyScalar(a).add(this.start)};Cb.prototype.closestPointToPointParameter= +function(a,b){Wj.subVectors(a,this.start);Zg.subVectors(this.end,this.start);a=Zg.dot(Zg);a=Zg.dot(Wj)/a;b&&(a=xa.clamp(a,0,1));return a};Cb.prototype.closestPointToPoint=function(a,b,d){a=this.closestPointToPointParameter(a,b);void 0===d&&(console.warn("THREE.Line3: .closestPointToPoint() target is now required"),d=new w);return this.delta(d).multiplyScalar(a).add(this.start)};Cb.prototype.applyMatrix4=function(a){this.start.applyMatrix4(a);this.end.applyMatrix4(a);return this};Cb.prototype.equals= +function(a){return a.start.equals(this.start)&&a.end.equals(this.end)};tf.prototype=Object.create(ha.prototype);tf.prototype.constructor=tf;tf.prototype.isImmediateRenderObject=!0;var Xj=new w;je.prototype=Object.create(ha.prototype);je.prototype.constructor=je;je.prototype.dispose=function(){this.cone.geometry.dispose();this.cone.material.dispose()};je.prototype.update=function(){this.light.updateMatrixWorld();var a=this.light.distance?this.light.distance:1E3,b=a*Math.tan(this.light.angle);this.cone.scale.set(b, +b,a);Xj.setFromMatrixPosition(this.light.target.matrixWorld);this.cone.lookAt(Xj);void 0!==this.color?this.cone.material.color.set(this.color):this.cone.material.color.copy(this.light.color)};var Xc=new w,$g=new da,ri=new da;ke.prototype=Object.create(Za.prototype);ke.prototype.constructor=ke;ke.prototype.updateMatrixWorld=function(a){var b=this.bones,d=this.geometry,e=d.getAttribute("position");ri.getInverse(this.root.matrixWorld);for(var f=0,g=0;fMath.abs(b)&&(b=1E-8);this.scale.set(.5*this.size,.5*this.size,b);this.children[0].material.side= +0>b?1:0;this.lookAt(this.plane.normal);yb.prototype.updateMatrixWorld.call(this,a)};var ck=new w,zg,Uh;Rc.prototype=Object.create(ha.prototype);Rc.prototype.constructor=Rc;Rc.prototype.setDirection=function(a){.99999a.y?this.quaternion.set(1,0,0,0):(ck.set(a.z,0,-a.x).normalize(),this.quaternion.setFromAxisAngle(ck,Math.acos(a.y)))};Rc.prototype.setLength=function(a,b,d){void 0===b&&(b=.2*a);void 0===d&&(d=.2*b);this.line.scale.set(1,Math.max(1E-4,a-b),1); +this.line.updateMatrix();this.cone.scale.set(d,b,d);this.cone.position.y=a;this.cone.updateMatrix()};Rc.prototype.setColor=function(a){this.line.material.color.set(a);this.cone.material.color.set(a)};Rc.prototype.copy=function(a){ha.prototype.copy.call(this,a,!1);this.line.copy(a.line);this.cone.copy(a.cone);return this};yf.prototype=Object.create(Za.prototype);yf.prototype.constructor=yf;var gc=Math.pow(2,8),dk=[.125,.215,.35,.446,.526,.582],ek=5+dk.length,hc={3E3:0,3001:1,3002:2,3004:3,3005:4,3006:5, +3007:6},si=new he,ti=function(){for(var a=[],b=[],d=[],e=8,f=0;fm;m++){var n=m%3*2/3-1,p=2\n\n\t\t\tvec3 getSample( float theta, vec3 axis ) {\n\n\t\t\t\tfloat cosTheta = cos( theta );\n\t\t\t\t// Rodrigues' axis-angle rotation\n\t\t\t\tvec3 sampleDirection = vOutputDirection * cosTheta\n\t\t\t\t\t+ cross( axis, vOutputDirection ) * sin( theta )\n\t\t\t\t\t+ axis * dot( axis, vOutputDirection ) * ( 1.0 - cosTheta );\n\n\t\t\t\treturn bilinearCubeUV( envMap, sampleDirection, mipInt );\n\n\t\t\t}\n\n\t\t\tvoid main() {\n\n\t\t\t\tvec3 axis = latitudinal ? poleAxis : cross( poleAxis, vOutputDirection );\n\n\t\t\t\tif ( all( equal( axis, vec3( 0.0 ) ) ) ) {\n\n\t\t\t\t\taxis = vec3( vOutputDirection.z, 0.0, - vOutputDirection.x );\n\n\t\t\t\t}\n\n\t\t\t\taxis = normalize( axis );\n\n\t\t\t\tgl_FragColor = vec4( 0.0, 0.0, 0.0, 1.0 );\n\t\t\t\tgl_FragColor.rgb += weights[ 0 ] * getSample( 0.0, axis );\n\n\t\t\t\tfor ( int i = 1; i < n; i++ ) {\n\n\t\t\t\t\tif ( i >= samples ) {\n\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\t}\n\n\t\t\t\t\tfloat theta = dTheta * float( i );\n\t\t\t\t\tgl_FragColor.rgb += weights[ i ] * getSample( -1.0 * theta, axis );\n\t\t\t\t\tgl_FragColor.rgb += weights[ i ] * getSample( theta, axis );\n\n\t\t\t\t}\n\n\t\t\t\tgl_FragColor = linearToOutputTexel( gl_FragColor );\n\n\t\t\t}\n\t\t", +blending:0,depthTest:!1,depthWrite:!1});this._cubemapShader=this._equirectShader=null;this._compileMaterial(this._blurMaterial)};rb.prototype.fromScene=function(a,b,d,e){void 0===b&&(b=0);void 0===d&&(d=.1);void 0===e&&(e=100);ui=this._renderer.getRenderTarget();var f=this._allocateTargets();this._sceneToCubeUV(a,d,e,f);0n;n++)p=n%3,0==p?(b.up.set(0,d[n],0),b.lookAt(f[n],0,0)):1==p?(b.up.set(0,0,d[n]),b.lookAt(0,f[n],0)):(b.up.set(0,d[n],0),b.lookAt(0,0,f[n])),Ag(e,p*gc,2v;++v){var u=v/p;u=Math.exp(-u*u/2);f.push(u);0==v?q+=u:v>8&255]+st[t>>16&255]+st[t>>24&255]+"-"+st[255&e]+st[e>>8&255]+"-"+st[e>>16&15|64]+st[e>>24&255]+"-"+st[63&n|128]+st[n>>8&255]+"-"+st[n>>16&255]+st[n>>24&255]+st[255&i]+st[i>>8&255]+st[i>>16&255]+st[i>>24&255]).toUpperCase()}function ht(t,e,n){return Math.max(e,Math.min(n,t))}function ut(t,e){return(t%e+e)%e}function dt(t,e,n){return(1-n)*t+n*e}function pt(t){return 0==(t&t-1)&&0!==t}function mt(t){return Math.pow(2,Math.ceil(Math.log(t)/Math.LN2))}function ft(t){return Math.pow(2,Math.floor(Math.log(t)/Math.LN2))}var gt=Object.freeze({__proto__:null,DEG2RAD:ot,RAD2DEG:lt,generateUUID:ct,clamp:ht,euclideanModulo:ut,mapLinear:function(t,e,n,i,r){return i+(t-e)*(r-i)/(n-e)},inverseLerp:function(t,e,n){return t!==e?(n-t)/(e-t):0},lerp:dt,damp:function(t,e,n,i){return dt(t,e,1-Math.exp(-n*i))},pingpong:function(t,e=1){return e-Math.abs(ut(t,2*e)-e)},smoothstep:function(t,e,n){return t<=e?0:t>=n?1:(t=(t-e)/(n-e))*t*(3-2*t)},smootherstep:function(t,e,n){return t<=e?0:t>=n?1:(t=(t-e)/(n-e))*t*t*(t*(6*t-15)+10)},randInt:function(t,e){return t+Math.floor(Math.random()*(e-t+1))},randFloat:function(t,e){return t+Math.random()*(e-t)},randFloatSpread:function(t){return t*(.5-Math.random())},seededRandom:function(t){return void 0!==t&&(at=t%2147483647),at=16807*at%2147483647,(at-1)/2147483646},degToRad:function(t){return t*ot},radToDeg:function(t){return t*lt},isPowerOfTwo:pt,ceilPowerOfTwo:mt,floorPowerOfTwo:ft,setQuaternionFromProperEuler:function(t,e,n,i,r){const s=Math.cos,a=Math.sin,o=s(n/2),l=a(n/2),c=s((e+i)/2),h=a((e+i)/2),u=s((e-i)/2),d=a((e-i)/2),p=s((i-e)/2),m=a((i-e)/2);switch(r){case"XYX":t.set(o*h,l*u,l*d,o*c);break;case"YZY":t.set(l*d,o*h,l*u,o*c);break;case"ZXZ":t.set(l*u,l*d,o*h,o*c);break;case"XZX":t.set(o*h,l*m,l*p,o*c);break;case"YXY":t.set(l*p,o*h,l*m,o*c);break;case"ZYZ":t.set(l*m,l*p,o*h,o*c);break;default:console.warn("THREE.MathUtils: .setQuaternionFromProperEuler() encountered an unknown order: "+r)}}});class vt{constructor(t=0,e=0){this.x=t,this.y=e}get width(){return this.x}set width(t){this.x=t}get height(){return this.y}set height(t){this.y=t}set(t,e){return this.x=t,this.y=e,this}setScalar(t){return this.x=t,this.y=t,this}setX(t){return this.x=t,this}setY(t){return this.y=t,this}setComponent(t,e){switch(t){case 0:this.x=e;break;case 1:this.y=e;break;default:throw new Error("index is out of range: "+t)}return this}getComponent(t){switch(t){case 0:return this.x;case 1:return this.y;default:throw new Error("index is out of range: "+t)}}clone(){return new this.constructor(this.x,this.y)}copy(t){return this.x=t.x,this.y=t.y,this}add(t,e){return void 0!==e?(console.warn("THREE.Vector2: .add() now only accepts one argument. Use .addVectors( a, b ) instead."),this.addVectors(t,e)):(this.x+=t.x,this.y+=t.y,this)}addScalar(t){return this.x+=t,this.y+=t,this}addVectors(t,e){return this.x=t.x+e.x,this.y=t.y+e.y,this}addScaledVector(t,e){return this.x+=t.x*e,this.y+=t.y*e,this}sub(t,e){return void 0!==e?(console.warn("THREE.Vector2: .sub() now only accepts one argument. Use .subVectors( a, b ) instead."),this.subVectors(t,e)):(this.x-=t.x,this.y-=t.y,this)}subScalar(t){return this.x-=t,this.y-=t,this}subVectors(t,e){return this.x=t.x-e.x,this.y=t.y-e.y,this}multiply(t){return this.x*=t.x,this.y*=t.y,this}multiplyScalar(t){return this.x*=t,this.y*=t,this}divide(t){return this.x/=t.x,this.y/=t.y,this}divideScalar(t){return this.multiplyScalar(1/t)}applyMatrix3(t){const e=this.x,n=this.y,i=t.elements;return this.x=i[0]*e+i[3]*n+i[6],this.y=i[1]*e+i[4]*n+i[7],this}min(t){return this.x=Math.min(this.x,t.x),this.y=Math.min(this.y,t.y),this}max(t){return this.x=Math.max(this.x,t.x),this.y=Math.max(this.y,t.y),this}clamp(t,e){return this.x=Math.max(t.x,Math.min(e.x,this.x)),this.y=Math.max(t.y,Math.min(e.y,this.y)),this}clampScalar(t,e){return this.x=Math.max(t,Math.min(e,this.x)),this.y=Math.max(t,Math.min(e,this.y)),this}clampLength(t,e){const n=this.length();return this.divideScalar(n||1).multiplyScalar(Math.max(t,Math.min(e,n)))}floor(){return this.x=Math.floor(this.x),this.y=Math.floor(this.y),this}ceil(){return this.x=Math.ceil(this.x),this.y=Math.ceil(this.y),this}round(){return this.x=Math.round(this.x),this.y=Math.round(this.y),this}roundToZero(){return this.x=this.x<0?Math.ceil(this.x):Math.floor(this.x),this.y=this.y<0?Math.ceil(this.y):Math.floor(this.y),this}negate(){return this.x=-this.x,this.y=-this.y,this}dot(t){return this.x*t.x+this.y*t.y}cross(t){return this.x*t.y-this.y*t.x}lengthSq(){return this.x*this.x+this.y*this.y}length(){return Math.sqrt(this.x*this.x+this.y*this.y)}manhattanLength(){return Math.abs(this.x)+Math.abs(this.y)}normalize(){return this.divideScalar(this.length()||1)}angle(){return Math.atan2(-this.y,-this.x)+Math.PI}distanceTo(t){return Math.sqrt(this.distanceToSquared(t))}distanceToSquared(t){const e=this.x-t.x,n=this.y-t.y;return e*e+n*n}manhattanDistanceTo(t){return Math.abs(this.x-t.x)+Math.abs(this.y-t.y)}setLength(t){return this.normalize().multiplyScalar(t)}lerp(t,e){return this.x+=(t.x-this.x)*e,this.y+=(t.y-this.y)*e,this}lerpVectors(t,e,n){return this.x=t.x+(e.x-t.x)*n,this.y=t.y+(e.y-t.y)*n,this}equals(t){return t.x===this.x&&t.y===this.y}fromArray(t,e=0){return this.x=t[e],this.y=t[e+1],this}toArray(t=[],e=0){return t[e]=this.x,t[e+1]=this.y,t}fromBufferAttribute(t,e,n){return void 0!==n&&console.warn("THREE.Vector2: offset has been removed from .fromBufferAttribute()."),this.x=t.getX(e),this.y=t.getY(e),this}rotateAround(t,e){const n=Math.cos(e),i=Math.sin(e),r=this.x-t.x,s=this.y-t.y;return this.x=r*n-s*i+t.x,this.y=r*i+s*n+t.y,this}random(){return this.x=Math.random(),this.y=Math.random(),this}}vt.prototype.isVector2=!0;class yt{constructor(){this.elements=[1,0,0,0,1,0,0,0,1],arguments.length>0&&console.error("THREE.Matrix3: the constructor no longer reads arguments. use .set() instead.")}set(t,e,n,i,r,s,a,o,l){const c=this.elements;return c[0]=t,c[1]=i,c[2]=a,c[3]=e,c[4]=r,c[5]=o,c[6]=n,c[7]=s,c[8]=l,this}identity(){return this.set(1,0,0,0,1,0,0,0,1),this}copy(t){const e=this.elements,n=t.elements;return e[0]=n[0],e[1]=n[1],e[2]=n[2],e[3]=n[3],e[4]=n[4],e[5]=n[5],e[6]=n[6],e[7]=n[7],e[8]=n[8],this}extractBasis(t,e,n){return t.setFromMatrix3Column(this,0),e.setFromMatrix3Column(this,1),n.setFromMatrix3Column(this,2),this}setFromMatrix4(t){const e=t.elements;return this.set(e[0],e[4],e[8],e[1],e[5],e[9],e[2],e[6],e[10]),this}multiply(t){return this.multiplyMatrices(this,t)}premultiply(t){return this.multiplyMatrices(t,this)}multiplyMatrices(t,e){const n=t.elements,i=e.elements,r=this.elements,s=n[0],a=n[3],o=n[6],l=n[1],c=n[4],h=n[7],u=n[2],d=n[5],p=n[8],m=i[0],f=i[3],g=i[6],v=i[1],y=i[4],x=i[7],_=i[2],b=i[5],M=i[8];return r[0]=s*m+a*v+o*_,r[3]=s*f+a*y+o*b,r[6]=s*g+a*x+o*M,r[1]=l*m+c*v+h*_,r[4]=l*f+c*y+h*b,r[7]=l*g+c*x+h*M,r[2]=u*m+d*v+p*_,r[5]=u*f+d*y+p*b,r[8]=u*g+d*x+p*M,this}multiplyScalar(t){const e=this.elements;return e[0]*=t,e[3]*=t,e[6]*=t,e[1]*=t,e[4]*=t,e[7]*=t,e[2]*=t,e[5]*=t,e[8]*=t,this}determinant(){const t=this.elements,e=t[0],n=t[1],i=t[2],r=t[3],s=t[4],a=t[5],o=t[6],l=t[7],c=t[8];return e*s*c-e*a*l-n*r*c+n*a*o+i*r*l-i*s*o}invert(){const t=this.elements,e=t[0],n=t[1],i=t[2],r=t[3],s=t[4],a=t[5],o=t[6],l=t[7],c=t[8],h=c*s-a*l,u=a*o-c*r,d=l*r-s*o,p=e*h+n*u+i*d;if(0===p)return this.set(0,0,0,0,0,0,0,0,0);const m=1/p;return t[0]=h*m,t[1]=(i*l-c*n)*m,t[2]=(a*n-i*s)*m,t[3]=u*m,t[4]=(c*e-i*o)*m,t[5]=(i*r-a*e)*m,t[6]=d*m,t[7]=(n*o-l*e)*m,t[8]=(s*e-n*r)*m,this}transpose(){let t;const e=this.elements;return t=e[1],e[1]=e[3],e[3]=t,t=e[2],e[2]=e[6],e[6]=t,t=e[5],e[5]=e[7],e[7]=t,this}getNormalMatrix(t){return this.setFromMatrix4(t).invert().transpose()}transposeIntoArray(t){const e=this.elements;return t[0]=e[0],t[1]=e[3],t[2]=e[6],t[3]=e[1],t[4]=e[4],t[5]=e[7],t[6]=e[2],t[7]=e[5],t[8]=e[8],this}setUvTransform(t,e,n,i,r,s,a){const o=Math.cos(r),l=Math.sin(r);return this.set(n*o,n*l,-n*(o*s+l*a)+s+t,-i*l,i*o,-i*(-l*s+o*a)+a+e,0,0,1),this}scale(t,e){const n=this.elements;return n[0]*=t,n[3]*=t,n[6]*=t,n[1]*=e,n[4]*=e,n[7]*=e,this}rotate(t){const e=Math.cos(t),n=Math.sin(t),i=this.elements,r=i[0],s=i[3],a=i[6],o=i[1],l=i[4],c=i[7];return i[0]=e*r+n*o,i[3]=e*s+n*l,i[6]=e*a+n*c,i[1]=-n*r+e*o,i[4]=-n*s+e*l,i[7]=-n*a+e*c,this}translate(t,e){const n=this.elements;return n[0]+=t*n[2],n[3]+=t*n[5],n[6]+=t*n[8],n[1]+=e*n[2],n[4]+=e*n[5],n[7]+=e*n[8],this}equals(t){const e=this.elements,n=t.elements;for(let t=0;t<9;t++)if(e[t]!==n[t])return!1;return!0}fromArray(t,e=0){for(let n=0;n<9;n++)this.elements[n]=t[n+e];return this}toArray(t=[],e=0){const n=this.elements;return t[e]=n[0],t[e+1]=n[1],t[e+2]=n[2],t[e+3]=n[3],t[e+4]=n[4],t[e+5]=n[5],t[e+6]=n[6],t[e+7]=n[7],t[e+8]=n[8],t}clone(){return(new this.constructor).fromArray(this.elements)}}let xt;yt.prototype.isMatrix3=!0;class _t{static getDataURL(t){if(/^data:/i.test(t.src))return t.src;if("undefined"==typeof HTMLCanvasElement)return t.src;let e;if(t instanceof HTMLCanvasElement)e=t;else{void 0===xt&&(xt=document.createElementNS("http://www.w3.org/1999/xhtml","canvas")),xt.width=t.width,xt.height=t.height;const n=xt.getContext("2d");t instanceof ImageData?n.putImageData(t,0,0):n.drawImage(t,0,0,t.width,t.height),e=xt}return e.width>2048||e.height>2048?(console.warn("THREE.ImageUtils.getDataURL: Image converted to jpg for performance reasons",t),e.toDataURL("image/jpeg",.6)):e.toDataURL("image/png")}}let bt=0;class Mt extends rt{constructor(t=Mt.DEFAULT_IMAGE,e=Mt.DEFAULT_MAPPING,n=1001,i=1001,r=1006,s=1008,a=1023,o=1009,l=1,c=3e3){super(),Object.defineProperty(this,"id",{value:bt++}),this.uuid=ct(),this.name="",this.image=t,this.mipmaps=[],this.mapping=e,this.wrapS=n,this.wrapT=i,this.magFilter=r,this.minFilter=s,this.anisotropy=l,this.format=a,this.internalFormat=null,this.type=o,this.offset=new vt(0,0),this.repeat=new vt(1,1),this.center=new vt(0,0),this.rotation=0,this.matrixAutoUpdate=!0,this.matrix=new yt,this.generateMipmaps=!0,this.premultiplyAlpha=!1,this.flipY=!0,this.unpackAlignment=4,this.encoding=c,this.version=0,this.onUpdate=null}updateMatrix(){this.matrix.setUvTransform(this.offset.x,this.offset.y,this.repeat.x,this.repeat.y,this.rotation,this.center.x,this.center.y)}clone(){return(new this.constructor).copy(this)}copy(t){return this.name=t.name,this.image=t.image,this.mipmaps=t.mipmaps.slice(0),this.mapping=t.mapping,this.wrapS=t.wrapS,this.wrapT=t.wrapT,this.magFilter=t.magFilter,this.minFilter=t.minFilter,this.anisotropy=t.anisotropy,this.format=t.format,this.internalFormat=t.internalFormat,this.type=t.type,this.offset.copy(t.offset),this.repeat.copy(t.repeat),this.center.copy(t.center),this.rotation=t.rotation,this.matrixAutoUpdate=t.matrixAutoUpdate,this.matrix.copy(t.matrix),this.generateMipmaps=t.generateMipmaps,this.premultiplyAlpha=t.premultiplyAlpha,this.flipY=t.flipY,this.unpackAlignment=t.unpackAlignment,this.encoding=t.encoding,this}toJSON(t){const e=void 0===t||"string"==typeof t;if(!e&&void 0!==t.textures[this.uuid])return t.textures[this.uuid];const n={metadata:{version:4.5,type:"Texture",generator:"Texture.toJSON"},uuid:this.uuid,name:this.name,mapping:this.mapping,repeat:[this.repeat.x,this.repeat.y],offset:[this.offset.x,this.offset.y],center:[this.center.x,this.center.y],rotation:this.rotation,wrap:[this.wrapS,this.wrapT],format:this.format,type:this.type,encoding:this.encoding,minFilter:this.minFilter,magFilter:this.magFilter,anisotropy:this.anisotropy,flipY:this.flipY,premultiplyAlpha:this.premultiplyAlpha,unpackAlignment:this.unpackAlignment};if(void 0!==this.image){const i=this.image;if(void 0===i.uuid&&(i.uuid=ct()),!e&&void 0===t.images[i.uuid]){let e;if(Array.isArray(i)){e=[];for(let t=0,n=i.length;t1)switch(this.wrapS){case h:t.x=t.x-Math.floor(t.x);break;case u:t.x=t.x<0?0:1;break;case d:1===Math.abs(Math.floor(t.x)%2)?t.x=Math.ceil(t.x)-t.x:t.x=t.x-Math.floor(t.x)}if(t.y<0||t.y>1)switch(this.wrapT){case h:t.y=t.y-Math.floor(t.y);break;case u:t.y=t.y<0?0:1;break;case d:1===Math.abs(Math.floor(t.y)%2)?t.y=Math.ceil(t.y)-t.y:t.y=t.y-Math.floor(t.y)}return this.flipY&&(t.y=1-t.y),t}set needsUpdate(t){!0===t&&this.version++}}function wt(t){return"undefined"!=typeof HTMLImageElement&&t instanceof HTMLImageElement||"undefined"!=typeof HTMLCanvasElement&&t instanceof HTMLCanvasElement||"undefined"!=typeof ImageBitmap&&t instanceof ImageBitmap?_t.getDataURL(t):t.data?{data:Array.prototype.slice.call(t.data),width:t.width,height:t.height,type:t.data.constructor.name}:(console.warn("THREE.Texture: Unable to serialize Texture."),{})}Mt.DEFAULT_IMAGE=void 0,Mt.DEFAULT_MAPPING=i,Mt.prototype.isTexture=!0;class St{constructor(t=0,e=0,n=0,i=1){this.x=t,this.y=e,this.z=n,this.w=i}get width(){return this.z}set width(t){this.z=t}get height(){return this.w}set height(t){this.w=t}set(t,e,n,i){return this.x=t,this.y=e,this.z=n,this.w=i,this}setScalar(t){return this.x=t,this.y=t,this.z=t,this.w=t,this}setX(t){return this.x=t,this}setY(t){return this.y=t,this}setZ(t){return this.z=t,this}setW(t){return this.w=t,this}setComponent(t,e){switch(t){case 0:this.x=e;break;case 1:this.y=e;break;case 2:this.z=e;break;case 3:this.w=e;break;default:throw new Error("index is out of range: "+t)}return this}getComponent(t){switch(t){case 0:return this.x;case 1:return this.y;case 2:return this.z;case 3:return this.w;default:throw new Error("index is out of range: "+t)}}clone(){return new this.constructor(this.x,this.y,this.z,this.w)}copy(t){return this.x=t.x,this.y=t.y,this.z=t.z,this.w=void 0!==t.w?t.w:1,this}add(t,e){return void 0!==e?(console.warn("THREE.Vector4: .add() now only accepts one argument. Use .addVectors( a, b ) instead."),this.addVectors(t,e)):(this.x+=t.x,this.y+=t.y,this.z+=t.z,this.w+=t.w,this)}addScalar(t){return this.x+=t,this.y+=t,this.z+=t,this.w+=t,this}addVectors(t,e){return this.x=t.x+e.x,this.y=t.y+e.y,this.z=t.z+e.z,this.w=t.w+e.w,this}addScaledVector(t,e){return this.x+=t.x*e,this.y+=t.y*e,this.z+=t.z*e,this.w+=t.w*e,this}sub(t,e){return void 0!==e?(console.warn("THREE.Vector4: .sub() now only accepts one argument. Use .subVectors( a, b ) instead."),this.subVectors(t,e)):(this.x-=t.x,this.y-=t.y,this.z-=t.z,this.w-=t.w,this)}subScalar(t){return this.x-=t,this.y-=t,this.z-=t,this.w-=t,this}subVectors(t,e){return this.x=t.x-e.x,this.y=t.y-e.y,this.z=t.z-e.z,this.w=t.w-e.w,this}multiply(t){return this.x*=t.x,this.y*=t.y,this.z*=t.z,this.w*=t.w,this}multiplyScalar(t){return this.x*=t,this.y*=t,this.z*=t,this.w*=t,this}applyMatrix4(t){const e=this.x,n=this.y,i=this.z,r=this.w,s=t.elements;return this.x=s[0]*e+s[4]*n+s[8]*i+s[12]*r,this.y=s[1]*e+s[5]*n+s[9]*i+s[13]*r,this.z=s[2]*e+s[6]*n+s[10]*i+s[14]*r,this.w=s[3]*e+s[7]*n+s[11]*i+s[15]*r,this}divideScalar(t){return this.multiplyScalar(1/t)}setAxisAngleFromQuaternion(t){this.w=2*Math.acos(t.w);const e=Math.sqrt(1-t.w*t.w);return e<1e-4?(this.x=1,this.y=0,this.z=0):(this.x=t.x/e,this.y=t.y/e,this.z=t.z/e),this}setAxisAngleFromRotationMatrix(t){let e,n,i,r;const s=.01,a=.1,o=t.elements,l=o[0],c=o[4],h=o[8],u=o[1],d=o[5],p=o[9],m=o[2],f=o[6],g=o[10];if(Math.abs(c-u)o&&t>v?tv?o=0?1:-1,i=1-e*e;if(i>Number.EPSILON){const r=Math.sqrt(i),s=Math.atan2(r,e*n);t=Math.sin(t*s)/r,a=Math.sin(a*s)/r}const r=a*n;if(o=o*t+u*r,l=l*t+d*r,c=c*t+p*r,h=h*t+m*r,t===1-a){const t=1/Math.sqrt(o*o+l*l+c*c+h*h);o*=t,l*=t,c*=t,h*=t}}t[e]=o,t[e+1]=l,t[e+2]=c,t[e+3]=h}static multiplyQuaternionsFlat(t,e,n,i,r,s){const a=n[i],o=n[i+1],l=n[i+2],c=n[i+3],h=r[s],u=r[s+1],d=r[s+2],p=r[s+3];return t[e]=a*p+c*h+o*d-l*u,t[e+1]=o*p+c*u+l*h-a*d,t[e+2]=l*p+c*d+a*u-o*h,t[e+3]=c*p-a*h-o*u-l*d,t}get x(){return this._x}set x(t){this._x=t,this._onChangeCallback()}get y(){return this._y}set y(t){this._y=t,this._onChangeCallback()}get z(){return this._z}set z(t){this._z=t,this._onChangeCallback()}get w(){return this._w}set w(t){this._w=t,this._onChangeCallback()}set(t,e,n,i){return this._x=t,this._y=e,this._z=n,this._w=i,this._onChangeCallback(),this}clone(){return new this.constructor(this._x,this._y,this._z,this._w)}copy(t){return this._x=t.x,this._y=t.y,this._z=t.z,this._w=t.w,this._onChangeCallback(),this}setFromEuler(t,e){if(!t||!t.isEuler)throw new Error("THREE.Quaternion: .setFromEuler() now expects an Euler rotation rather than a Vector3 and order.");const n=t._x,i=t._y,r=t._z,s=t._order,a=Math.cos,o=Math.sin,l=a(n/2),c=a(i/2),h=a(r/2),u=o(n/2),d=o(i/2),p=o(r/2);switch(s){case"XYZ":this._x=u*c*h+l*d*p,this._y=l*d*h-u*c*p,this._z=l*c*p+u*d*h,this._w=l*c*h-u*d*p;break;case"YXZ":this._x=u*c*h+l*d*p,this._y=l*d*h-u*c*p,this._z=l*c*p-u*d*h,this._w=l*c*h+u*d*p;break;case"ZXY":this._x=u*c*h-l*d*p,this._y=l*d*h+u*c*p,this._z=l*c*p+u*d*h,this._w=l*c*h-u*d*p;break;case"ZYX":this._x=u*c*h-l*d*p,this._y=l*d*h+u*c*p,this._z=l*c*p-u*d*h,this._w=l*c*h+u*d*p;break;case"YZX":this._x=u*c*h+l*d*p,this._y=l*d*h+u*c*p,this._z=l*c*p-u*d*h,this._w=l*c*h-u*d*p;break;case"XZY":this._x=u*c*h-l*d*p,this._y=l*d*h-u*c*p,this._z=l*c*p+u*d*h,this._w=l*c*h+u*d*p;break;default:console.warn("THREE.Quaternion: .setFromEuler() encountered an unknown order: "+s)}return!1!==e&&this._onChangeCallback(),this}setFromAxisAngle(t,e){const n=e/2,i=Math.sin(n);return this._x=t.x*i,this._y=t.y*i,this._z=t.z*i,this._w=Math.cos(n),this._onChangeCallback(),this}setFromRotationMatrix(t){const e=t.elements,n=e[0],i=e[4],r=e[8],s=e[1],a=e[5],o=e[9],l=e[2],c=e[6],h=e[10],u=n+a+h;if(u>0){const t=.5/Math.sqrt(u+1);this._w=.25/t,this._x=(c-o)*t,this._y=(r-l)*t,this._z=(s-i)*t}else if(n>a&&n>h){const t=2*Math.sqrt(1+n-a-h);this._w=(c-o)/t,this._x=.25*t,this._y=(i+s)/t,this._z=(r+l)/t}else if(a>h){const t=2*Math.sqrt(1+a-n-h);this._w=(r-l)/t,this._x=(i+s)/t,this._y=.25*t,this._z=(o+c)/t}else{const t=2*Math.sqrt(1+h-n-a);this._w=(s-i)/t,this._x=(r+l)/t,this._y=(o+c)/t,this._z=.25*t}return this._onChangeCallback(),this}setFromUnitVectors(t,e){let n=t.dot(e)+1;return nMath.abs(t.z)?(this._x=-t.y,this._y=t.x,this._z=0,this._w=n):(this._x=0,this._y=-t.z,this._z=t.y,this._w=n)):(this._x=t.y*e.z-t.z*e.y,this._y=t.z*e.x-t.x*e.z,this._z=t.x*e.y-t.y*e.x,this._w=n),this.normalize()}angleTo(t){return 2*Math.acos(Math.abs(ht(this.dot(t),-1,1)))}rotateTowards(t,e){const n=this.angleTo(t);if(0===n)return this;const i=Math.min(1,e/n);return this.slerp(t,i),this}identity(){return this.set(0,0,0,1)}invert(){return this.conjugate()}conjugate(){return this._x*=-1,this._y*=-1,this._z*=-1,this._onChangeCallback(),this}dot(t){return this._x*t._x+this._y*t._y+this._z*t._z+this._w*t._w}lengthSq(){return this._x*this._x+this._y*this._y+this._z*this._z+this._w*this._w}length(){return Math.sqrt(this._x*this._x+this._y*this._y+this._z*this._z+this._w*this._w)}normalize(){let t=this.length();return 0===t?(this._x=0,this._y=0,this._z=0,this._w=1):(t=1/t,this._x=this._x*t,this._y=this._y*t,this._z=this._z*t,this._w=this._w*t),this._onChangeCallback(),this}multiply(t,e){return void 0!==e?(console.warn("THREE.Quaternion: .multiply() now only accepts one argument. Use .multiplyQuaternions( a, b ) instead."),this.multiplyQuaternions(t,e)):this.multiplyQuaternions(this,t)}premultiply(t){return this.multiplyQuaternions(t,this)}multiplyQuaternions(t,e){const n=t._x,i=t._y,r=t._z,s=t._w,a=e._x,o=e._y,l=e._z,c=e._w;return this._x=n*c+s*a+i*l-r*o,this._y=i*c+s*o+r*a-n*l,this._z=r*c+s*l+n*o-i*a,this._w=s*c-n*a-i*o-r*l,this._onChangeCallback(),this}slerp(t,e){if(0===e)return this;if(1===e)return this.copy(t);const n=this._x,i=this._y,r=this._z,s=this._w;let a=s*t._w+n*t._x+i*t._y+r*t._z;if(a<0?(this._w=-t._w,this._x=-t._x,this._y=-t._y,this._z=-t._z,a=-a):this.copy(t),a>=1)return this._w=s,this._x=n,this._y=i,this._z=r,this;const o=1-a*a;if(o<=Number.EPSILON){const t=1-e;return this._w=t*s+e*this._w,this._x=t*n+e*this._x,this._y=t*i+e*this._y,this._z=t*r+e*this._z,this.normalize(),this._onChangeCallback(),this}const l=Math.sqrt(o),c=Math.atan2(l,a),h=Math.sin((1-e)*c)/l,u=Math.sin(e*c)/l;return this._w=s*h+this._w*u,this._x=n*h+this._x*u,this._y=i*h+this._y*u,this._z=r*h+this._z*u,this._onChangeCallback(),this}slerpQuaternions(t,e,n){this.copy(t).slerp(e,n)}equals(t){return t._x===this._x&&t._y===this._y&&t._z===this._z&&t._w===this._w}fromArray(t,e=0){return this._x=t[e],this._y=t[e+1],this._z=t[e+2],this._w=t[e+3],this._onChangeCallback(),this}toArray(t=[],e=0){return t[e]=this._x,t[e+1]=this._y,t[e+2]=this._z,t[e+3]=this._w,t}fromBufferAttribute(t,e){return this._x=t.getX(e),this._y=t.getY(e),this._z=t.getZ(e),this._w=t.getW(e),this}_onChange(t){return this._onChangeCallback=t,this}_onChangeCallback(){}}Lt.prototype.isQuaternion=!0;class Rt{constructor(t=0,e=0,n=0){this.x=t,this.y=e,this.z=n}set(t,e,n){return void 0===n&&(n=this.z),this.x=t,this.y=e,this.z=n,this}setScalar(t){return this.x=t,this.y=t,this.z=t,this}setX(t){return this.x=t,this}setY(t){return this.y=t,this}setZ(t){return this.z=t,this}setComponent(t,e){switch(t){case 0:this.x=e;break;case 1:this.y=e;break;case 2:this.z=e;break;default:throw new Error("index is out of range: "+t)}return this}getComponent(t){switch(t){case 0:return this.x;case 1:return this.y;case 2:return this.z;default:throw new Error("index is out of range: "+t)}}clone(){return new this.constructor(this.x,this.y,this.z)}copy(t){return this.x=t.x,this.y=t.y,this.z=t.z,this}add(t,e){return void 0!==e?(console.warn("THREE.Vector3: .add() now only accepts one argument. Use .addVectors( a, b ) instead."),this.addVectors(t,e)):(this.x+=t.x,this.y+=t.y,this.z+=t.z,this)}addScalar(t){return this.x+=t,this.y+=t,this.z+=t,this}addVectors(t,e){return this.x=t.x+e.x,this.y=t.y+e.y,this.z=t.z+e.z,this}addScaledVector(t,e){return this.x+=t.x*e,this.y+=t.y*e,this.z+=t.z*e,this}sub(t,e){return void 0!==e?(console.warn("THREE.Vector3: .sub() now only accepts one argument. Use .subVectors( a, b ) instead."),this.subVectors(t,e)):(this.x-=t.x,this.y-=t.y,this.z-=t.z,this)}subScalar(t){return this.x-=t,this.y-=t,this.z-=t,this}subVectors(t,e){return this.x=t.x-e.x,this.y=t.y-e.y,this.z=t.z-e.z,this}multiply(t,e){return void 0!==e?(console.warn("THREE.Vector3: .multiply() now only accepts one argument. Use .multiplyVectors( a, b ) instead."),this.multiplyVectors(t,e)):(this.x*=t.x,this.y*=t.y,this.z*=t.z,this)}multiplyScalar(t){return this.x*=t,this.y*=t,this.z*=t,this}multiplyVectors(t,e){return this.x=t.x*e.x,this.y=t.y*e.y,this.z=t.z*e.z,this}applyEuler(t){return t&&t.isEuler||console.error("THREE.Vector3: .applyEuler() now expects an Euler rotation rather than a Vector3 and order."),this.applyQuaternion(Pt.setFromEuler(t))}applyAxisAngle(t,e){return this.applyQuaternion(Pt.setFromAxisAngle(t,e))}applyMatrix3(t){const e=this.x,n=this.y,i=this.z,r=t.elements;return this.x=r[0]*e+r[3]*n+r[6]*i,this.y=r[1]*e+r[4]*n+r[7]*i,this.z=r[2]*e+r[5]*n+r[8]*i,this}applyNormalMatrix(t){return this.applyMatrix3(t).normalize()}applyMatrix4(t){const e=this.x,n=this.y,i=this.z,r=t.elements,s=1/(r[3]*e+r[7]*n+r[11]*i+r[15]);return this.x=(r[0]*e+r[4]*n+r[8]*i+r[12])*s,this.y=(r[1]*e+r[5]*n+r[9]*i+r[13])*s,this.z=(r[2]*e+r[6]*n+r[10]*i+r[14])*s,this}applyQuaternion(t){const e=this.x,n=this.y,i=this.z,r=t.x,s=t.y,a=t.z,o=t.w,l=o*e+s*i-a*n,c=o*n+a*e-r*i,h=o*i+r*n-s*e,u=-r*e-s*n-a*i;return this.x=l*o+u*-r+c*-a-h*-s,this.y=c*o+u*-s+h*-r-l*-a,this.z=h*o+u*-a+l*-s-c*-r,this}project(t){return this.applyMatrix4(t.matrixWorldInverse).applyMatrix4(t.projectionMatrix)}unproject(t){return this.applyMatrix4(t.projectionMatrixInverse).applyMatrix4(t.matrixWorld)}transformDirection(t){const e=this.x,n=this.y,i=this.z,r=t.elements;return this.x=r[0]*e+r[4]*n+r[8]*i,this.y=r[1]*e+r[5]*n+r[9]*i,this.z=r[2]*e+r[6]*n+r[10]*i,this.normalize()}divide(t){return this.x/=t.x,this.y/=t.y,this.z/=t.z,this}divideScalar(t){return this.multiplyScalar(1/t)}min(t){return this.x=Math.min(this.x,t.x),this.y=Math.min(this.y,t.y),this.z=Math.min(this.z,t.z),this}max(t){return this.x=Math.max(this.x,t.x),this.y=Math.max(this.y,t.y),this.z=Math.max(this.z,t.z),this}clamp(t,e){return this.x=Math.max(t.x,Math.min(e.x,this.x)),this.y=Math.max(t.y,Math.min(e.y,this.y)),this.z=Math.max(t.z,Math.min(e.z,this.z)),this}clampScalar(t,e){return this.x=Math.max(t,Math.min(e,this.x)),this.y=Math.max(t,Math.min(e,this.y)),this.z=Math.max(t,Math.min(e,this.z)),this}clampLength(t,e){const n=this.length();return this.divideScalar(n||1).multiplyScalar(Math.max(t,Math.min(e,n)))}floor(){return this.x=Math.floor(this.x),this.y=Math.floor(this.y),this.z=Math.floor(this.z),this}ceil(){return this.x=Math.ceil(this.x),this.y=Math.ceil(this.y),this.z=Math.ceil(this.z),this}round(){return this.x=Math.round(this.x),this.y=Math.round(this.y),this.z=Math.round(this.z),this}roundToZero(){return this.x=this.x<0?Math.ceil(this.x):Math.floor(this.x),this.y=this.y<0?Math.ceil(this.y):Math.floor(this.y),this.z=this.z<0?Math.ceil(this.z):Math.floor(this.z),this}negate(){return this.x=-this.x,this.y=-this.y,this.z=-this.z,this}dot(t){return this.x*t.x+this.y*t.y+this.z*t.z}lengthSq(){return this.x*this.x+this.y*this.y+this.z*this.z}length(){return Math.sqrt(this.x*this.x+this.y*this.y+this.z*this.z)}manhattanLength(){return Math.abs(this.x)+Math.abs(this.y)+Math.abs(this.z)}normalize(){return this.divideScalar(this.length()||1)}setLength(t){return this.normalize().multiplyScalar(t)}lerp(t,e){return this.x+=(t.x-this.x)*e,this.y+=(t.y-this.y)*e,this.z+=(t.z-this.z)*e,this}lerpVectors(t,e,n){return this.x=t.x+(e.x-t.x)*n,this.y=t.y+(e.y-t.y)*n,this.z=t.z+(e.z-t.z)*n,this}cross(t,e){return void 0!==e?(console.warn("THREE.Vector3: .cross() now only accepts one argument. Use .crossVectors( a, b ) instead."),this.crossVectors(t,e)):this.crossVectors(this,t)}crossVectors(t,e){const n=t.x,i=t.y,r=t.z,s=e.x,a=e.y,o=e.z;return this.x=i*o-r*a,this.y=r*s-n*o,this.z=n*a-i*s,this}projectOnVector(t){const e=t.lengthSq();if(0===e)return this.set(0,0,0);const n=t.dot(this)/e;return this.copy(t).multiplyScalar(n)}projectOnPlane(t){return Ct.copy(this).projectOnVector(t),this.sub(Ct)}reflect(t){return this.sub(Ct.copy(t).multiplyScalar(2*this.dot(t)))}angleTo(t){const e=Math.sqrt(this.lengthSq()*t.lengthSq());if(0===e)return Math.PI/2;const n=this.dot(t)/e;return Math.acos(ht(n,-1,1))}distanceTo(t){return Math.sqrt(this.distanceToSquared(t))}distanceToSquared(t){const e=this.x-t.x,n=this.y-t.y,i=this.z-t.z;return e*e+n*n+i*i}manhattanDistanceTo(t){return Math.abs(this.x-t.x)+Math.abs(this.y-t.y)+Math.abs(this.z-t.z)}setFromSpherical(t){return this.setFromSphericalCoords(t.radius,t.phi,t.theta)}setFromSphericalCoords(t,e,n){const i=Math.sin(e)*t;return this.x=i*Math.sin(n),this.y=Math.cos(e)*t,this.z=i*Math.cos(n),this}setFromCylindrical(t){return this.setFromCylindricalCoords(t.radius,t.theta,t.y)}setFromCylindricalCoords(t,e,n){return this.x=t*Math.sin(e),this.y=n,this.z=t*Math.cos(e),this}setFromMatrixPosition(t){const e=t.elements;return this.x=e[12],this.y=e[13],this.z=e[14],this}setFromMatrixScale(t){const e=this.setFromMatrixColumn(t,0).length(),n=this.setFromMatrixColumn(t,1).length(),i=this.setFromMatrixColumn(t,2).length();return this.x=e,this.y=n,this.z=i,this}setFromMatrixColumn(t,e){return this.fromArray(t.elements,4*e)}setFromMatrix3Column(t,e){return this.fromArray(t.elements,3*e)}equals(t){return t.x===this.x&&t.y===this.y&&t.z===this.z}fromArray(t,e=0){return this.x=t[e],this.y=t[e+1],this.z=t[e+2],this}toArray(t=[],e=0){return t[e]=this.x,t[e+1]=this.y,t[e+2]=this.z,t}fromBufferAttribute(t,e,n){return void 0!==n&&console.warn("THREE.Vector3: offset has been removed from .fromBufferAttribute()."),this.x=t.getX(e),this.y=t.getY(e),this.z=t.getZ(e),this}random(){return this.x=Math.random(),this.y=Math.random(),this.z=Math.random(),this}}Rt.prototype.isVector3=!0;const Ct=new Rt,Pt=new Lt;class Dt{constructor(t=new Rt(1/0,1/0,1/0),e=new Rt(-1/0,-1/0,-1/0)){this.min=t,this.max=e}set(t,e){return this.min.copy(t),this.max.copy(e),this}setFromArray(t){let e=1/0,n=1/0,i=1/0,r=-1/0,s=-1/0,a=-1/0;for(let o=0,l=t.length;or&&(r=l),c>s&&(s=c),h>a&&(a=h)}return this.min.set(e,n,i),this.max.set(r,s,a),this}setFromBufferAttribute(t){let e=1/0,n=1/0,i=1/0,r=-1/0,s=-1/0,a=-1/0;for(let o=0,l=t.count;or&&(r=l),c>s&&(s=c),h>a&&(a=h)}return this.min.set(e,n,i),this.max.set(r,s,a),this}setFromPoints(t){this.makeEmpty();for(let e=0,n=t.length;ethis.max.x||t.ythis.max.y||t.zthis.max.z)}containsBox(t){return this.min.x<=t.min.x&&t.max.x<=this.max.x&&this.min.y<=t.min.y&&t.max.y<=this.max.y&&this.min.z<=t.min.z&&t.max.z<=this.max.z}getParameter(t,e){return e.set((t.x-this.min.x)/(this.max.x-this.min.x),(t.y-this.min.y)/(this.max.y-this.min.y),(t.z-this.min.z)/(this.max.z-this.min.z))}intersectsBox(t){return!(t.max.xthis.max.x||t.max.ythis.max.y||t.max.zthis.max.z)}intersectsSphere(t){return this.clampPoint(t.center,Nt),Nt.distanceToSquared(t.center)<=t.radius*t.radius}intersectsPlane(t){let e,n;return t.normal.x>0?(e=t.normal.x*this.min.x,n=t.normal.x*this.max.x):(e=t.normal.x*this.max.x,n=t.normal.x*this.min.x),t.normal.y>0?(e+=t.normal.y*this.min.y,n+=t.normal.y*this.max.y):(e+=t.normal.y*this.max.y,n+=t.normal.y*this.min.y),t.normal.z>0?(e+=t.normal.z*this.min.z,n+=t.normal.z*this.max.z):(e+=t.normal.z*this.max.z,n+=t.normal.z*this.min.z),e<=-t.constant&&n>=-t.constant}intersectsTriangle(t){if(this.isEmpty())return!1;this.getCenter(kt),Vt.subVectors(this.max,kt),zt.subVectors(t.a,kt),Ft.subVectors(t.b,kt),Ot.subVectors(t.c,kt),Ht.subVectors(Ft,zt),Ut.subVectors(Ot,Ft),Gt.subVectors(zt,Ot);let e=[0,-Ht.z,Ht.y,0,-Ut.z,Ut.y,0,-Gt.z,Gt.y,Ht.z,0,-Ht.x,Ut.z,0,-Ut.x,Gt.z,0,-Gt.x,-Ht.y,Ht.x,0,-Ut.y,Ut.x,0,-Gt.y,Gt.x,0];return!!qt(e,zt,Ft,Ot,Vt)&&(e=[1,0,0,0,1,0,0,0,1],!!qt(e,zt,Ft,Ot,Vt)&&(Wt.crossVectors(Ht,Ut),e=[Wt.x,Wt.y,Wt.z],qt(e,zt,Ft,Ot,Vt)))}clampPoint(t,e){return e.copy(t).clamp(this.min,this.max)}distanceToPoint(t){return Nt.copy(t).clamp(this.min,this.max).sub(t).length()}getBoundingSphere(t){return this.getCenter(t.center),t.radius=.5*this.getSize(Nt).length(),t}intersect(t){return this.min.max(t.min),this.max.min(t.max),this.isEmpty()&&this.makeEmpty(),this}union(t){return this.min.min(t.min),this.max.max(t.max),this}applyMatrix4(t){return this.isEmpty()||(It[0].set(this.min.x,this.min.y,this.min.z).applyMatrix4(t),It[1].set(this.min.x,this.min.y,this.max.z).applyMatrix4(t),It[2].set(this.min.x,this.max.y,this.min.z).applyMatrix4(t),It[3].set(this.min.x,this.max.y,this.max.z).applyMatrix4(t),It[4].set(this.max.x,this.min.y,this.min.z).applyMatrix4(t),It[5].set(this.max.x,this.min.y,this.max.z).applyMatrix4(t),It[6].set(this.max.x,this.max.y,this.min.z).applyMatrix4(t),It[7].set(this.max.x,this.max.y,this.max.z).applyMatrix4(t),this.setFromPoints(It)),this}translate(t){return this.min.add(t),this.max.add(t),this}equals(t){return t.min.equals(this.min)&&t.max.equals(this.max)}}Dt.prototype.isBox3=!0;const It=[new Rt,new Rt,new Rt,new Rt,new Rt,new Rt,new Rt,new Rt],Nt=new Rt,Bt=new Dt,zt=new Rt,Ft=new Rt,Ot=new Rt,Ht=new Rt,Ut=new Rt,Gt=new Rt,kt=new Rt,Vt=new Rt,Wt=new Rt,jt=new Rt;function qt(t,e,n,i,r){for(let s=0,a=t.length-3;s<=a;s+=3){jt.fromArray(t,s);const a=r.x*Math.abs(jt.x)+r.y*Math.abs(jt.y)+r.z*Math.abs(jt.z),o=e.dot(jt),l=n.dot(jt),c=i.dot(jt);if(Math.max(-Math.max(o,l,c),Math.min(o,l,c))>a)return!1}return!0}const Xt=new Dt,Yt=new Rt,Jt=new Rt,Zt=new Rt;class Qt{constructor(t=new Rt,e=-1){this.center=t,this.radius=e}set(t,e){return this.center.copy(t),this.radius=e,this}setFromPoints(t,e){const n=this.center;void 0!==e?n.copy(e):Xt.setFromPoints(t).getCenter(n);let i=0;for(let e=0,r=t.length;ethis.radius*this.radius&&(e.sub(this.center).normalize(),e.multiplyScalar(this.radius).add(this.center)),e}getBoundingBox(t){return this.isEmpty()?(t.makeEmpty(),t):(t.set(this.center,this.center),t.expandByScalar(this.radius),t)}applyMatrix4(t){return this.center.applyMatrix4(t),this.radius=this.radius*t.getMaxScaleOnAxis(),this}translate(t){return this.center.add(t),this}expandByPoint(t){Zt.subVectors(t,this.center);const e=Zt.lengthSq();if(e>this.radius*this.radius){const t=Math.sqrt(e),n=.5*(t-this.radius);this.center.add(Zt.multiplyScalar(n/t)),this.radius+=n}return this}union(t){return Jt.subVectors(t.center,this.center).normalize().multiplyScalar(t.radius),this.expandByPoint(Yt.copy(t.center).add(Jt)),this.expandByPoint(Yt.copy(t.center).sub(Jt)),this}equals(t){return t.center.equals(this.center)&&t.radius===this.radius}clone(){return(new this.constructor).copy(this)}}const Kt=new Rt,$t=new Rt,te=new Rt,ee=new Rt,ne=new Rt,ie=new Rt,re=new Rt;class se{constructor(t=new Rt,e=new Rt(0,0,-1)){this.origin=t,this.direction=e}set(t,e){return this.origin.copy(t),this.direction.copy(e),this}copy(t){return this.origin.copy(t.origin),this.direction.copy(t.direction),this}at(t,e){return e.copy(this.direction).multiplyScalar(t).add(this.origin)}lookAt(t){return this.direction.copy(t).sub(this.origin).normalize(),this}recast(t){return this.origin.copy(this.at(t,Kt)),this}closestPointToPoint(t,e){e.subVectors(t,this.origin);const n=e.dot(this.direction);return n<0?e.copy(this.origin):e.copy(this.direction).multiplyScalar(n).add(this.origin)}distanceToPoint(t){return Math.sqrt(this.distanceSqToPoint(t))}distanceSqToPoint(t){const e=Kt.subVectors(t,this.origin).dot(this.direction);return e<0?this.origin.distanceToSquared(t):(Kt.copy(this.direction).multiplyScalar(e).add(this.origin),Kt.distanceToSquared(t))}distanceSqToSegment(t,e,n,i){$t.copy(t).add(e).multiplyScalar(.5),te.copy(e).sub(t).normalize(),ee.copy(this.origin).sub($t);const r=.5*t.distanceTo(e),s=-this.direction.dot(te),a=ee.dot(this.direction),o=-ee.dot(te),l=ee.lengthSq(),c=Math.abs(1-s*s);let h,u,d,p;if(c>0)if(h=s*o-a,u=s*a-o,p=r*c,h>=0)if(u>=-p)if(u<=p){const t=1/c;h*=t,u*=t,d=h*(h+s*u+2*a)+u*(s*h+u+2*o)+l}else u=r,h=Math.max(0,-(s*u+a)),d=-h*h+u*(u+2*o)+l;else u=-r,h=Math.max(0,-(s*u+a)),d=-h*h+u*(u+2*o)+l;else u<=-p?(h=Math.max(0,-(-s*r+a)),u=h>0?-r:Math.min(Math.max(-r,-o),r),d=-h*h+u*(u+2*o)+l):u<=p?(h=0,u=Math.min(Math.max(-r,-o),r),d=u*(u+2*o)+l):(h=Math.max(0,-(s*r+a)),u=h>0?r:Math.min(Math.max(-r,-o),r),d=-h*h+u*(u+2*o)+l);else u=s>0?-r:r,h=Math.max(0,-(s*u+a)),d=-h*h+u*(u+2*o)+l;return n&&n.copy(this.direction).multiplyScalar(h).add(this.origin),i&&i.copy(te).multiplyScalar(u).add($t),d}intersectSphere(t,e){Kt.subVectors(t.center,this.origin);const n=Kt.dot(this.direction),i=Kt.dot(Kt)-n*n,r=t.radius*t.radius;if(i>r)return null;const s=Math.sqrt(r-i),a=n-s,o=n+s;return a<0&&o<0?null:a<0?this.at(o,e):this.at(a,e)}intersectsSphere(t){return this.distanceSqToPoint(t.center)<=t.radius*t.radius}distanceToPlane(t){const e=t.normal.dot(this.direction);if(0===e)return 0===t.distanceToPoint(this.origin)?0:null;const n=-(this.origin.dot(t.normal)+t.constant)/e;return n>=0?n:null}intersectPlane(t,e){const n=this.distanceToPlane(t);return null===n?null:this.at(n,e)}intersectsPlane(t){const e=t.distanceToPoint(this.origin);if(0===e)return!0;return t.normal.dot(this.direction)*e<0}intersectBox(t,e){let n,i,r,s,a,o;const l=1/this.direction.x,c=1/this.direction.y,h=1/this.direction.z,u=this.origin;return l>=0?(n=(t.min.x-u.x)*l,i=(t.max.x-u.x)*l):(n=(t.max.x-u.x)*l,i=(t.min.x-u.x)*l),c>=0?(r=(t.min.y-u.y)*c,s=(t.max.y-u.y)*c):(r=(t.max.y-u.y)*c,s=(t.min.y-u.y)*c),n>s||r>i?null:((r>n||n!=n)&&(n=r),(s=0?(a=(t.min.z-u.z)*h,o=(t.max.z-u.z)*h):(a=(t.max.z-u.z)*h,o=(t.min.z-u.z)*h),n>o||a>i?null:((a>n||n!=n)&&(n=a),(o=0?n:i,e)))}intersectsBox(t){return null!==this.intersectBox(t,Kt)}intersectTriangle(t,e,n,i,r){ne.subVectors(e,t),ie.subVectors(n,t),re.crossVectors(ne,ie);let s,a=this.direction.dot(re);if(a>0){if(i)return null;s=1}else{if(!(a<0))return null;s=-1,a=-a}ee.subVectors(this.origin,t);const o=s*this.direction.dot(ie.crossVectors(ee,ie));if(o<0)return null;const l=s*this.direction.dot(ne.cross(ee));if(l<0)return null;if(o+l>a)return null;const c=-s*ee.dot(re);return c<0?null:this.at(c/a,r)}applyMatrix4(t){return this.origin.applyMatrix4(t),this.direction.transformDirection(t),this}equals(t){return t.origin.equals(this.origin)&&t.direction.equals(this.direction)}clone(){return(new this.constructor).copy(this)}}class ae{constructor(){this.elements=[1,0,0,0,0,1,0,0,0,0,1,0,0,0,0,1],arguments.length>0&&console.error("THREE.Matrix4: the constructor no longer reads arguments. use .set() instead.")}set(t,e,n,i,r,s,a,o,l,c,h,u,d,p,m,f){const g=this.elements;return g[0]=t,g[4]=e,g[8]=n,g[12]=i,g[1]=r,g[5]=s,g[9]=a,g[13]=o,g[2]=l,g[6]=c,g[10]=h,g[14]=u,g[3]=d,g[7]=p,g[11]=m,g[15]=f,this}identity(){return this.set(1,0,0,0,0,1,0,0,0,0,1,0,0,0,0,1),this}clone(){return(new ae).fromArray(this.elements)}copy(t){const e=this.elements,n=t.elements;return e[0]=n[0],e[1]=n[1],e[2]=n[2],e[3]=n[3],e[4]=n[4],e[5]=n[5],e[6]=n[6],e[7]=n[7],e[8]=n[8],e[9]=n[9],e[10]=n[10],e[11]=n[11],e[12]=n[12],e[13]=n[13],e[14]=n[14],e[15]=n[15],this}copyPosition(t){const e=this.elements,n=t.elements;return e[12]=n[12],e[13]=n[13],e[14]=n[14],this}setFromMatrix3(t){const e=t.elements;return this.set(e[0],e[3],e[6],0,e[1],e[4],e[7],0,e[2],e[5],e[8],0,0,0,0,1),this}extractBasis(t,e,n){return t.setFromMatrixColumn(this,0),e.setFromMatrixColumn(this,1),n.setFromMatrixColumn(this,2),this}makeBasis(t,e,n){return this.set(t.x,e.x,n.x,0,t.y,e.y,n.y,0,t.z,e.z,n.z,0,0,0,0,1),this}extractRotation(t){const e=this.elements,n=t.elements,i=1/oe.setFromMatrixColumn(t,0).length(),r=1/oe.setFromMatrixColumn(t,1).length(),s=1/oe.setFromMatrixColumn(t,2).length();return e[0]=n[0]*i,e[1]=n[1]*i,e[2]=n[2]*i,e[3]=0,e[4]=n[4]*r,e[5]=n[5]*r,e[6]=n[6]*r,e[7]=0,e[8]=n[8]*s,e[9]=n[9]*s,e[10]=n[10]*s,e[11]=0,e[12]=0,e[13]=0,e[14]=0,e[15]=1,this}makeRotationFromEuler(t){t&&t.isEuler||console.error("THREE.Matrix4: .makeRotationFromEuler() now expects a Euler rotation rather than a Vector3 and order.");const e=this.elements,n=t.x,i=t.y,r=t.z,s=Math.cos(n),a=Math.sin(n),o=Math.cos(i),l=Math.sin(i),c=Math.cos(r),h=Math.sin(r);if("XYZ"===t.order){const t=s*c,n=s*h,i=a*c,r=a*h;e[0]=o*c,e[4]=-o*h,e[8]=l,e[1]=n+i*l,e[5]=t-r*l,e[9]=-a*o,e[2]=r-t*l,e[6]=i+n*l,e[10]=s*o}else if("YXZ"===t.order){const t=o*c,n=o*h,i=l*c,r=l*h;e[0]=t+r*a,e[4]=i*a-n,e[8]=s*l,e[1]=s*h,e[5]=s*c,e[9]=-a,e[2]=n*a-i,e[6]=r+t*a,e[10]=s*o}else if("ZXY"===t.order){const t=o*c,n=o*h,i=l*c,r=l*h;e[0]=t-r*a,e[4]=-s*h,e[8]=i+n*a,e[1]=n+i*a,e[5]=s*c,e[9]=r-t*a,e[2]=-s*l,e[6]=a,e[10]=s*o}else if("ZYX"===t.order){const t=s*c,n=s*h,i=a*c,r=a*h;e[0]=o*c,e[4]=i*l-n,e[8]=t*l+r,e[1]=o*h,e[5]=r*l+t,e[9]=n*l-i,e[2]=-l,e[6]=a*o,e[10]=s*o}else if("YZX"===t.order){const t=s*o,n=s*l,i=a*o,r=a*l;e[0]=o*c,e[4]=r-t*h,e[8]=i*h+n,e[1]=h,e[5]=s*c,e[9]=-a*c,e[2]=-l*c,e[6]=n*h+i,e[10]=t-r*h}else if("XZY"===t.order){const t=s*o,n=s*l,i=a*o,r=a*l;e[0]=o*c,e[4]=-h,e[8]=l*c,e[1]=t*h+r,e[5]=s*c,e[9]=n*h-i,e[2]=i*h-n,e[6]=a*c,e[10]=r*h+t}return e[3]=0,e[7]=0,e[11]=0,e[12]=0,e[13]=0,e[14]=0,e[15]=1,this}makeRotationFromQuaternion(t){return this.compose(ce,t,he)}lookAt(t,e,n){const i=this.elements;return pe.subVectors(t,e),0===pe.lengthSq()&&(pe.z=1),pe.normalize(),ue.crossVectors(n,pe),0===ue.lengthSq()&&(1===Math.abs(n.z)?pe.x+=1e-4:pe.z+=1e-4,pe.normalize(),ue.crossVectors(n,pe)),ue.normalize(),de.crossVectors(pe,ue),i[0]=ue.x,i[4]=de.x,i[8]=pe.x,i[1]=ue.y,i[5]=de.y,i[9]=pe.y,i[2]=ue.z,i[6]=de.z,i[10]=pe.z,this}multiply(t,e){return void 0!==e?(console.warn("THREE.Matrix4: .multiply() now only accepts one argument. Use .multiplyMatrices( a, b ) instead."),this.multiplyMatrices(t,e)):this.multiplyMatrices(this,t)}premultiply(t){return this.multiplyMatrices(t,this)}multiplyMatrices(t,e){const n=t.elements,i=e.elements,r=this.elements,s=n[0],a=n[4],o=n[8],l=n[12],c=n[1],h=n[5],u=n[9],d=n[13],p=n[2],m=n[6],f=n[10],g=n[14],v=n[3],y=n[7],x=n[11],_=n[15],b=i[0],M=i[4],w=i[8],S=i[12],T=i[1],E=i[5],A=i[9],L=i[13],R=i[2],C=i[6],P=i[10],D=i[14],I=i[3],N=i[7],B=i[11],z=i[15];return r[0]=s*b+a*T+o*R+l*I,r[4]=s*M+a*E+o*C+l*N,r[8]=s*w+a*A+o*P+l*B,r[12]=s*S+a*L+o*D+l*z,r[1]=c*b+h*T+u*R+d*I,r[5]=c*M+h*E+u*C+d*N,r[9]=c*w+h*A+u*P+d*B,r[13]=c*S+h*L+u*D+d*z,r[2]=p*b+m*T+f*R+g*I,r[6]=p*M+m*E+f*C+g*N,r[10]=p*w+m*A+f*P+g*B,r[14]=p*S+m*L+f*D+g*z,r[3]=v*b+y*T+x*R+_*I,r[7]=v*M+y*E+x*C+_*N,r[11]=v*w+y*A+x*P+_*B,r[15]=v*S+y*L+x*D+_*z,this}multiplyScalar(t){const e=this.elements;return e[0]*=t,e[4]*=t,e[8]*=t,e[12]*=t,e[1]*=t,e[5]*=t,e[9]*=t,e[13]*=t,e[2]*=t,e[6]*=t,e[10]*=t,e[14]*=t,e[3]*=t,e[7]*=t,e[11]*=t,e[15]*=t,this}determinant(){const t=this.elements,e=t[0],n=t[4],i=t[8],r=t[12],s=t[1],a=t[5],o=t[9],l=t[13],c=t[2],h=t[6],u=t[10],d=t[14];return t[3]*(+r*o*h-i*l*h-r*a*u+n*l*u+i*a*d-n*o*d)+t[7]*(+e*o*d-e*l*u+r*s*u-i*s*d+i*l*c-r*o*c)+t[11]*(+e*l*h-e*a*d-r*s*h+n*s*d+r*a*c-n*l*c)+t[15]*(-i*a*c-e*o*h+e*a*u+i*s*h-n*s*u+n*o*c)}transpose(){const t=this.elements;let e;return e=t[1],t[1]=t[4],t[4]=e,e=t[2],t[2]=t[8],t[8]=e,e=t[6],t[6]=t[9],t[9]=e,e=t[3],t[3]=t[12],t[12]=e,e=t[7],t[7]=t[13],t[13]=e,e=t[11],t[11]=t[14],t[14]=e,this}setPosition(t,e,n){const i=this.elements;return t.isVector3?(i[12]=t.x,i[13]=t.y,i[14]=t.z):(i[12]=t,i[13]=e,i[14]=n),this}invert(){const t=this.elements,e=t[0],n=t[1],i=t[2],r=t[3],s=t[4],a=t[5],o=t[6],l=t[7],c=t[8],h=t[9],u=t[10],d=t[11],p=t[12],m=t[13],f=t[14],g=t[15],v=h*f*l-m*u*l+m*o*d-a*f*d-h*o*g+a*u*g,y=p*u*l-c*f*l-p*o*d+s*f*d+c*o*g-s*u*g,x=c*m*l-p*h*l+p*a*d-s*m*d-c*a*g+s*h*g,_=p*h*o-c*m*o-p*a*u+s*m*u+c*a*f-s*h*f,b=e*v+n*y+i*x+r*_;if(0===b)return this.set(0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0);const M=1/b;return t[0]=v*M,t[1]=(m*u*r-h*f*r-m*i*d+n*f*d+h*i*g-n*u*g)*M,t[2]=(a*f*r-m*o*r+m*i*l-n*f*l-a*i*g+n*o*g)*M,t[3]=(h*o*r-a*u*r-h*i*l+n*u*l+a*i*d-n*o*d)*M,t[4]=y*M,t[5]=(c*f*r-p*u*r+p*i*d-e*f*d-c*i*g+e*u*g)*M,t[6]=(p*o*r-s*f*r-p*i*l+e*f*l+s*i*g-e*o*g)*M,t[7]=(s*u*r-c*o*r+c*i*l-e*u*l-s*i*d+e*o*d)*M,t[8]=x*M,t[9]=(p*h*r-c*m*r-p*n*d+e*m*d+c*n*g-e*h*g)*M,t[10]=(s*m*r-p*a*r+p*n*l-e*m*l-s*n*g+e*a*g)*M,t[11]=(c*a*r-s*h*r-c*n*l+e*h*l+s*n*d-e*a*d)*M,t[12]=_*M,t[13]=(c*m*i-p*h*i+p*n*u-e*m*u-c*n*f+e*h*f)*M,t[14]=(p*a*i-s*m*i-p*n*o+e*m*o+s*n*f-e*a*f)*M,t[15]=(s*h*i-c*a*i+c*n*o-e*h*o-s*n*u+e*a*u)*M,this}scale(t){const e=this.elements,n=t.x,i=t.y,r=t.z;return e[0]*=n,e[4]*=i,e[8]*=r,e[1]*=n,e[5]*=i,e[9]*=r,e[2]*=n,e[6]*=i,e[10]*=r,e[3]*=n,e[7]*=i,e[11]*=r,this}getMaxScaleOnAxis(){const t=this.elements,e=t[0]*t[0]+t[1]*t[1]+t[2]*t[2],n=t[4]*t[4]+t[5]*t[5]+t[6]*t[6],i=t[8]*t[8]+t[9]*t[9]+t[10]*t[10];return Math.sqrt(Math.max(e,n,i))}makeTranslation(t,e,n){return this.set(1,0,0,t,0,1,0,e,0,0,1,n,0,0,0,1),this}makeRotationX(t){const e=Math.cos(t),n=Math.sin(t);return this.set(1,0,0,0,0,e,-n,0,0,n,e,0,0,0,0,1),this}makeRotationY(t){const e=Math.cos(t),n=Math.sin(t);return this.set(e,0,n,0,0,1,0,0,-n,0,e,0,0,0,0,1),this}makeRotationZ(t){const e=Math.cos(t),n=Math.sin(t);return this.set(e,-n,0,0,n,e,0,0,0,0,1,0,0,0,0,1),this}makeRotationAxis(t,e){const n=Math.cos(e),i=Math.sin(e),r=1-n,s=t.x,a=t.y,o=t.z,l=r*s,c=r*a;return this.set(l*s+n,l*a-i*o,l*o+i*a,0,l*a+i*o,c*a+n,c*o-i*s,0,l*o-i*a,c*o+i*s,r*o*o+n,0,0,0,0,1),this}makeScale(t,e,n){return this.set(t,0,0,0,0,e,0,0,0,0,n,0,0,0,0,1),this}makeShear(t,e,n,i,r,s){return this.set(1,n,r,0,t,1,s,0,e,i,1,0,0,0,0,1),this}compose(t,e,n){const i=this.elements,r=e._x,s=e._y,a=e._z,o=e._w,l=r+r,c=s+s,h=a+a,u=r*l,d=r*c,p=r*h,m=s*c,f=s*h,g=a*h,v=o*l,y=o*c,x=o*h,_=n.x,b=n.y,M=n.z;return i[0]=(1-(m+g))*_,i[1]=(d+x)*_,i[2]=(p-y)*_,i[3]=0,i[4]=(d-x)*b,i[5]=(1-(u+g))*b,i[6]=(f+v)*b,i[7]=0,i[8]=(p+y)*M,i[9]=(f-v)*M,i[10]=(1-(u+m))*M,i[11]=0,i[12]=t.x,i[13]=t.y,i[14]=t.z,i[15]=1,this}decompose(t,e,n){const i=this.elements;let r=oe.set(i[0],i[1],i[2]).length();const s=oe.set(i[4],i[5],i[6]).length(),a=oe.set(i[8],i[9],i[10]).length();this.determinant()<0&&(r=-r),t.x=i[12],t.y=i[13],t.z=i[14],le.copy(this);const o=1/r,l=1/s,c=1/a;return le.elements[0]*=o,le.elements[1]*=o,le.elements[2]*=o,le.elements[4]*=l,le.elements[5]*=l,le.elements[6]*=l,le.elements[8]*=c,le.elements[9]*=c,le.elements[10]*=c,e.setFromRotationMatrix(le),n.x=r,n.y=s,n.z=a,this}makePerspective(t,e,n,i,r,s){void 0===s&&console.warn("THREE.Matrix4: .makePerspective() has been redefined and has a new signature. Please check the docs.");const a=this.elements,o=2*r/(e-t),l=2*r/(n-i),c=(e+t)/(e-t),h=(n+i)/(n-i),u=-(s+r)/(s-r),d=-2*s*r/(s-r);return a[0]=o,a[4]=0,a[8]=c,a[12]=0,a[1]=0,a[5]=l,a[9]=h,a[13]=0,a[2]=0,a[6]=0,a[10]=u,a[14]=d,a[3]=0,a[7]=0,a[11]=-1,a[15]=0,this}makeOrthographic(t,e,n,i,r,s){const a=this.elements,o=1/(e-t),l=1/(n-i),c=1/(s-r),h=(e+t)*o,u=(n+i)*l,d=(s+r)*c;return a[0]=2*o,a[4]=0,a[8]=0,a[12]=-h,a[1]=0,a[5]=2*l,a[9]=0,a[13]=-u,a[2]=0,a[6]=0,a[10]=-2*c,a[14]=-d,a[3]=0,a[7]=0,a[11]=0,a[15]=1,this}equals(t){const e=this.elements,n=t.elements;for(let t=0;t<16;t++)if(e[t]!==n[t])return!1;return!0}fromArray(t,e=0){for(let n=0;n<16;n++)this.elements[n]=t[n+e];return this}toArray(t=[],e=0){const n=this.elements;return t[e]=n[0],t[e+1]=n[1],t[e+2]=n[2],t[e+3]=n[3],t[e+4]=n[4],t[e+5]=n[5],t[e+6]=n[6],t[e+7]=n[7],t[e+8]=n[8],t[e+9]=n[9],t[e+10]=n[10],t[e+11]=n[11],t[e+12]=n[12],t[e+13]=n[13],t[e+14]=n[14],t[e+15]=n[15],t}}ae.prototype.isMatrix4=!0;const oe=new Rt,le=new ae,ce=new Rt(0,0,0),he=new Rt(1,1,1),ue=new Rt,de=new Rt,pe=new Rt,me=new ae,fe=new Lt;class ge{constructor(t=0,e=0,n=0,i=ge.DefaultOrder){this._x=t,this._y=e,this._z=n,this._order=i}get x(){return this._x}set x(t){this._x=t,this._onChangeCallback()}get y(){return this._y}set y(t){this._y=t,this._onChangeCallback()}get z(){return this._z}set z(t){this._z=t,this._onChangeCallback()}get order(){return this._order}set order(t){this._order=t,this._onChangeCallback()}set(t,e,n,i=this._order){return this._x=t,this._y=e,this._z=n,this._order=i,this._onChangeCallback(),this}clone(){return new this.constructor(this._x,this._y,this._z,this._order)}copy(t){return this._x=t._x,this._y=t._y,this._z=t._z,this._order=t._order,this._onChangeCallback(),this}setFromRotationMatrix(t,e=this._order,n=!0){const i=t.elements,r=i[0],s=i[4],a=i[8],o=i[1],l=i[5],c=i[9],h=i[2],u=i[6],d=i[10];switch(e){case"XYZ":this._y=Math.asin(ht(a,-1,1)),Math.abs(a)<.9999999?(this._x=Math.atan2(-c,d),this._z=Math.atan2(-s,r)):(this._x=Math.atan2(u,l),this._z=0);break;case"YXZ":this._x=Math.asin(-ht(c,-1,1)),Math.abs(c)<.9999999?(this._y=Math.atan2(a,d),this._z=Math.atan2(o,l)):(this._y=Math.atan2(-h,r),this._z=0);break;case"ZXY":this._x=Math.asin(ht(u,-1,1)),Math.abs(u)<.9999999?(this._y=Math.atan2(-h,d),this._z=Math.atan2(-s,l)):(this._y=0,this._z=Math.atan2(o,r));break;case"ZYX":this._y=Math.asin(-ht(h,-1,1)),Math.abs(h)<.9999999?(this._x=Math.atan2(u,d),this._z=Math.atan2(o,r)):(this._x=0,this._z=Math.atan2(-s,l));break;case"YZX":this._z=Math.asin(ht(o,-1,1)),Math.abs(o)<.9999999?(this._x=Math.atan2(-c,l),this._y=Math.atan2(-h,r)):(this._x=0,this._y=Math.atan2(a,d));break;case"XZY":this._z=Math.asin(-ht(s,-1,1)),Math.abs(s)<.9999999?(this._x=Math.atan2(u,l),this._y=Math.atan2(a,r)):(this._x=Math.atan2(-c,d),this._y=0);break;default:console.warn("THREE.Euler: .setFromRotationMatrix() encountered an unknown order: "+e)}return this._order=e,!0===n&&this._onChangeCallback(),this}setFromQuaternion(t,e,n){return me.makeRotationFromQuaternion(t),this.setFromRotationMatrix(me,e,n)}setFromVector3(t,e=this._order){return this.set(t.x,t.y,t.z,e)}reorder(t){return fe.setFromEuler(this),this.setFromQuaternion(fe,t)}equals(t){return t._x===this._x&&t._y===this._y&&t._z===this._z&&t._order===this._order}fromArray(t){return this._x=t[0],this._y=t[1],this._z=t[2],void 0!==t[3]&&(this._order=t[3]),this._onChangeCallback(),this}toArray(t=[],e=0){return t[e]=this._x,t[e+1]=this._y,t[e+2]=this._z,t[e+3]=this._order,t}toVector3(t){return t?t.set(this._x,this._y,this._z):new Rt(this._x,this._y,this._z)}_onChange(t){return this._onChangeCallback=t,this}_onChangeCallback(){}}ge.prototype.isEuler=!0,ge.DefaultOrder="XYZ",ge.RotationOrders=["XYZ","YZX","ZXY","XZY","YXZ","ZYX"];class ve{constructor(){this.mask=1}set(t){this.mask=1<1){for(let t=0;t1){for(let t=0;t0){i.children=[];for(let e=0;e0){i.animations=[];for(let e=0;e0&&(n.geometries=e),i.length>0&&(n.materials=i),r.length>0&&(n.textures=r),a.length>0&&(n.images=a),o.length>0&&(n.shapes=o),l.length>0&&(n.skeletons=l),c.length>0&&(n.animations=c)}return n.object=i,n;function s(t){const e=[];for(const n in t){const i=t[n];delete i.metadata,e.push(i)}return e}}clone(t){return(new this.constructor).copy(this,t)}copy(t,e=!0){if(this.name=t.name,this.up.copy(t.up),this.position.copy(t.position),this.rotation.order=t.rotation.order,this.quaternion.copy(t.quaternion),this.scale.copy(t.scale),this.matrix.copy(t.matrix),this.matrixWorld.copy(t.matrixWorld),this.matrixAutoUpdate=t.matrixAutoUpdate,this.matrixWorldNeedsUpdate=t.matrixWorldNeedsUpdate,this.layers.mask=t.layers.mask,this.visible=t.visible,this.castShadow=t.castShadow,this.receiveShadow=t.receiveShadow,this.frustumCulled=t.frustumCulled,this.renderOrder=t.renderOrder,this.userData=JSON.parse(JSON.stringify(t.userData)),!0===e)for(let e=0;e0?i.multiplyScalar(1/Math.sqrt(r)):i.set(0,0,0)}static getBarycoord(t,e,n,i,r){De.subVectors(i,e),Ie.subVectors(n,e),Ne.subVectors(t,e);const s=De.dot(De),a=De.dot(Ie),o=De.dot(Ne),l=Ie.dot(Ie),c=Ie.dot(Ne),h=s*l-a*a;if(0===h)return r.set(-2,-1,-1);const u=1/h,d=(l*o-a*c)*u,p=(s*c-a*o)*u;return r.set(1-d-p,p,d)}static containsPoint(t,e,n,i){return this.getBarycoord(t,e,n,i,Be),Be.x>=0&&Be.y>=0&&Be.x+Be.y<=1}static getUV(t,e,n,i,r,s,a,o){return this.getBarycoord(t,e,n,i,Be),o.set(0,0),o.addScaledVector(r,Be.x),o.addScaledVector(s,Be.y),o.addScaledVector(a,Be.z),o}static isFrontFacing(t,e,n,i){return De.subVectors(n,e),Ie.subVectors(t,e),De.cross(Ie).dot(i)<0}set(t,e,n){return this.a.copy(t),this.b.copy(e),this.c.copy(n),this}setFromPointsAndIndices(t,e,n,i){return this.a.copy(t[e]),this.b.copy(t[n]),this.c.copy(t[i]),this}clone(){return(new this.constructor).copy(this)}copy(t){return this.a.copy(t.a),this.b.copy(t.b),this.c.copy(t.c),this}getArea(){return De.subVectors(this.c,this.b),Ie.subVectors(this.a,this.b),.5*De.cross(Ie).length()}getMidpoint(t){return t.addVectors(this.a,this.b).add(this.c).multiplyScalar(1/3)}getNormal(t){return ke.getNormal(this.a,this.b,this.c,t)}getPlane(t){return t.setFromCoplanarPoints(this.a,this.b,this.c)}getBarycoord(t,e){return ke.getBarycoord(t,this.a,this.b,this.c,e)}getUV(t,e,n,i,r){return ke.getUV(t,this.a,this.b,this.c,e,n,i,r)}containsPoint(t){return ke.containsPoint(t,this.a,this.b,this.c)}isFrontFacing(t){return ke.isFrontFacing(this.a,this.b,this.c,t)}intersectsBox(t){return t.intersectsTriangle(this)}closestPointToPoint(t,e){const n=this.a,i=this.b,r=this.c;let s,a;ze.subVectors(i,n),Fe.subVectors(r,n),He.subVectors(t,n);const o=ze.dot(He),l=Fe.dot(He);if(o<=0&&l<=0)return e.copy(n);Ue.subVectors(t,i);const c=ze.dot(Ue),h=Fe.dot(Ue);if(c>=0&&h<=c)return e.copy(i);const u=o*h-c*l;if(u<=0&&o>=0&&c<=0)return s=o/(o-c),e.copy(n).addScaledVector(ze,s);Ge.subVectors(t,r);const d=ze.dot(Ge),p=Fe.dot(Ge);if(p>=0&&d<=p)return e.copy(r);const m=d*l-o*p;if(m<=0&&l>=0&&p<=0)return a=l/(l-p),e.copy(n).addScaledVector(Fe,a);const f=c*p-d*h;if(f<=0&&h-c>=0&&d-p>=0)return Oe.subVectors(r,i),a=(h-c)/(h-c+(d-p)),e.copy(i).addScaledVector(Oe,a);const g=1/(f+m+u);return s=m*g,a=u*g,e.copy(n).addScaledVector(ze,s).addScaledVector(Fe,a)}equals(t){return t.a.equals(this.a)&&t.b.equals(this.b)&&t.c.equals(this.c)}}let Ve=0;class We extends rt{constructor(){super(),Object.defineProperty(this,"id",{value:Ve++}),this.uuid=ct(),this.name="",this.type="Material",this.fog=!0,this.blending=1,this.side=0,this.vertexColors=!1,this.opacity=1,this.transparent=!1,this.blendSrc=204,this.blendDst=205,this.blendEquation=n,this.blendSrcAlpha=null,this.blendDstAlpha=null,this.blendEquationAlpha=null,this.depthFunc=3,this.depthTest=!0,this.depthWrite=!0,this.stencilWriteMask=255,this.stencilFunc=519,this.stencilRef=0,this.stencilFuncMask=255,this.stencilFail=tt,this.stencilZFail=tt,this.stencilZPass=tt,this.stencilWrite=!1,this.clippingPlanes=null,this.clipIntersection=!1,this.clipShadows=!1,this.shadowSide=null,this.colorWrite=!0,this.precision=null,this.polygonOffset=!1,this.polygonOffsetFactor=0,this.polygonOffsetUnits=0,this.dithering=!1,this.alphaTest=0,this.alphaToCoverage=!1,this.premultipliedAlpha=!1,this.visible=!0,this.toneMapped=!0,this.userData={},this.version=0}onBuild(){}onBeforeCompile(){}customProgramCacheKey(){return this.onBeforeCompile.toString()}setValues(t){if(void 0!==t)for(const e in t){const n=t[e];if(void 0===n){console.warn("THREE.Material: '"+e+"' parameter is undefined.");continue}if("shading"===e){console.warn("THREE."+this.type+": .shading has been removed. Use the boolean .flatShading instead."),this.flatShading=1===n;continue}const i=this[e];void 0!==i?i&&i.isColor?i.set(n):i&&i.isVector3&&n&&n.isVector3?i.copy(n):this[e]=n:console.warn("THREE."+this.type+": '"+e+"' is not a property of this material.")}}toJSON(t){const e=void 0===t||"string"==typeof t;e&&(t={textures:{},images:{}});const n={metadata:{version:4.5,type:"Material",generator:"Material.toJSON"}};function i(t){const e=[];for(const n in t){const i=t[n];delete i.metadata,e.push(i)}return e}if(n.uuid=this.uuid,n.type=this.type,""!==this.name&&(n.name=this.name),this.color&&this.color.isColor&&(n.color=this.color.getHex()),void 0!==this.roughness&&(n.roughness=this.roughness),void 0!==this.metalness&&(n.metalness=this.metalness),this.sheen&&this.sheen.isColor&&(n.sheen=this.sheen.getHex()),this.emissive&&this.emissive.isColor&&(n.emissive=this.emissive.getHex()),this.emissiveIntensity&&1!==this.emissiveIntensity&&(n.emissiveIntensity=this.emissiveIntensity),this.specular&&this.specular.isColor&&(n.specular=this.specular.getHex()),void 0!==this.shininess&&(n.shininess=this.shininess),void 0!==this.clearcoat&&(n.clearcoat=this.clearcoat),void 0!==this.clearcoatRoughness&&(n.clearcoatRoughness=this.clearcoatRoughness),this.clearcoatMap&&this.clearcoatMap.isTexture&&(n.clearcoatMap=this.clearcoatMap.toJSON(t).uuid),this.clearcoatRoughnessMap&&this.clearcoatRoughnessMap.isTexture&&(n.clearcoatRoughnessMap=this.clearcoatRoughnessMap.toJSON(t).uuid),this.clearcoatNormalMap&&this.clearcoatNormalMap.isTexture&&(n.clearcoatNormalMap=this.clearcoatNormalMap.toJSON(t).uuid,n.clearcoatNormalScale=this.clearcoatNormalScale.toArray()),this.map&&this.map.isTexture&&(n.map=this.map.toJSON(t).uuid),this.matcap&&this.matcap.isTexture&&(n.matcap=this.matcap.toJSON(t).uuid),this.alphaMap&&this.alphaMap.isTexture&&(n.alphaMap=this.alphaMap.toJSON(t).uuid),this.lightMap&&this.lightMap.isTexture&&(n.lightMap=this.lightMap.toJSON(t).uuid,n.lightMapIntensity=this.lightMapIntensity),this.aoMap&&this.aoMap.isTexture&&(n.aoMap=this.aoMap.toJSON(t).uuid,n.aoMapIntensity=this.aoMapIntensity),this.bumpMap&&this.bumpMap.isTexture&&(n.bumpMap=this.bumpMap.toJSON(t).uuid,n.bumpScale=this.bumpScale),this.normalMap&&this.normalMap.isTexture&&(n.normalMap=this.normalMap.toJSON(t).uuid,n.normalMapType=this.normalMapType,n.normalScale=this.normalScale.toArray()),this.displacementMap&&this.displacementMap.isTexture&&(n.displacementMap=this.displacementMap.toJSON(t).uuid,n.displacementScale=this.displacementScale,n.displacementBias=this.displacementBias),this.roughnessMap&&this.roughnessMap.isTexture&&(n.roughnessMap=this.roughnessMap.toJSON(t).uuid),this.metalnessMap&&this.metalnessMap.isTexture&&(n.metalnessMap=this.metalnessMap.toJSON(t).uuid),this.emissiveMap&&this.emissiveMap.isTexture&&(n.emissiveMap=this.emissiveMap.toJSON(t).uuid),this.specularMap&&this.specularMap.isTexture&&(n.specularMap=this.specularMap.toJSON(t).uuid),this.envMap&&this.envMap.isTexture&&(n.envMap=this.envMap.toJSON(t).uuid,void 0!==this.combine&&(n.combine=this.combine)),void 0!==this.envMapIntensity&&(n.envMapIntensity=this.envMapIntensity),void 0!==this.reflectivity&&(n.reflectivity=this.reflectivity),void 0!==this.refractionRatio&&(n.refractionRatio=this.refractionRatio),this.gradientMap&&this.gradientMap.isTexture&&(n.gradientMap=this.gradientMap.toJSON(t).uuid),void 0!==this.transmission&&(n.transmission=this.transmission),this.transmissionMap&&this.transmissionMap.isTexture&&(n.transmissionMap=this.transmissionMap.toJSON(t).uuid),void 0!==this.thickness&&(n.thickness=this.thickness),this.thicknessMap&&this.thicknessMap.isTexture&&(n.thicknessMap=this.thicknessMap.toJSON(t).uuid),void 0!==this.attenuationDistance&&(n.attenuationDistance=this.attenuationDistance),void 0!==this.attenuationColor&&(n.attenuationColor=this.attenuationColor.getHex()),void 0!==this.size&&(n.size=this.size),null!==this.shadowSide&&(n.shadowSide=this.shadowSide),void 0!==this.sizeAttenuation&&(n.sizeAttenuation=this.sizeAttenuation),1!==this.blending&&(n.blending=this.blending),0!==this.side&&(n.side=this.side),this.vertexColors&&(n.vertexColors=!0),this.opacity<1&&(n.opacity=this.opacity),!0===this.transparent&&(n.transparent=this.transparent),n.depthFunc=this.depthFunc,n.depthTest=this.depthTest,n.depthWrite=this.depthWrite,n.colorWrite=this.colorWrite,n.stencilWrite=this.stencilWrite,n.stencilWriteMask=this.stencilWriteMask,n.stencilFunc=this.stencilFunc,n.stencilRef=this.stencilRef,n.stencilFuncMask=this.stencilFuncMask,n.stencilFail=this.stencilFail,n.stencilZFail=this.stencilZFail,n.stencilZPass=this.stencilZPass,this.rotation&&0!==this.rotation&&(n.rotation=this.rotation),!0===this.polygonOffset&&(n.polygonOffset=!0),0!==this.polygonOffsetFactor&&(n.polygonOffsetFactor=this.polygonOffsetFactor),0!==this.polygonOffsetUnits&&(n.polygonOffsetUnits=this.polygonOffsetUnits),this.linewidth&&1!==this.linewidth&&(n.linewidth=this.linewidth),void 0!==this.dashSize&&(n.dashSize=this.dashSize),void 0!==this.gapSize&&(n.gapSize=this.gapSize),void 0!==this.scale&&(n.scale=this.scale),!0===this.dithering&&(n.dithering=!0),this.alphaTest>0&&(n.alphaTest=this.alphaTest),!0===this.alphaToCoverage&&(n.alphaToCoverage=this.alphaToCoverage),!0===this.premultipliedAlpha&&(n.premultipliedAlpha=this.premultipliedAlpha),!0===this.wireframe&&(n.wireframe=this.wireframe),this.wireframeLinewidth>1&&(n.wireframeLinewidth=this.wireframeLinewidth),"round"!==this.wireframeLinecap&&(n.wireframeLinecap=this.wireframeLinecap),"round"!==this.wireframeLinejoin&&(n.wireframeLinejoin=this.wireframeLinejoin),!0===this.morphTargets&&(n.morphTargets=!0),!0===this.morphNormals&&(n.morphNormals=!0),!0===this.flatShading&&(n.flatShading=this.flatShading),!1===this.visible&&(n.visible=!1),!1===this.toneMapped&&(n.toneMapped=!1),"{}"!==JSON.stringify(this.userData)&&(n.userData=this.userData),e){const e=i(t.textures),r=i(t.images);e.length>0&&(n.textures=e),r.length>0&&(n.images=r)}return n}clone(){return(new this.constructor).copy(this)}copy(t){this.name=t.name,this.fog=t.fog,this.blending=t.blending,this.side=t.side,this.vertexColors=t.vertexColors,this.opacity=t.opacity,this.transparent=t.transparent,this.blendSrc=t.blendSrc,this.blendDst=t.blendDst,this.blendEquation=t.blendEquation,this.blendSrcAlpha=t.blendSrcAlpha,this.blendDstAlpha=t.blendDstAlpha,this.blendEquationAlpha=t.blendEquationAlpha,this.depthFunc=t.depthFunc,this.depthTest=t.depthTest,this.depthWrite=t.depthWrite,this.stencilWriteMask=t.stencilWriteMask,this.stencilFunc=t.stencilFunc,this.stencilRef=t.stencilRef,this.stencilFuncMask=t.stencilFuncMask,this.stencilFail=t.stencilFail,this.stencilZFail=t.stencilZFail,this.stencilZPass=t.stencilZPass,this.stencilWrite=t.stencilWrite;const e=t.clippingPlanes;let n=null;if(null!==e){const t=e.length;n=new Array(t);for(let i=0;i!==t;++i)n[i]=e[i].clone()}return this.clippingPlanes=n,this.clipIntersection=t.clipIntersection,this.clipShadows=t.clipShadows,this.shadowSide=t.shadowSide,this.colorWrite=t.colorWrite,this.precision=t.precision,this.polygonOffset=t.polygonOffset,this.polygonOffsetFactor=t.polygonOffsetFactor,this.polygonOffsetUnits=t.polygonOffsetUnits,this.dithering=t.dithering,this.alphaTest=t.alphaTest,this.alphaToCoverage=t.alphaToCoverage,this.premultipliedAlpha=t.premultipliedAlpha,this.visible=t.visible,this.toneMapped=t.toneMapped,this.userData=JSON.parse(JSON.stringify(t.userData)),this}dispose(){this.dispatchEvent({type:"dispose"})}set needsUpdate(t){!0===t&&this.version++}}We.prototype.isMaterial=!0;const je={aliceblue:15792383,antiquewhite:16444375,aqua:65535,aquamarine:8388564,azure:15794175,beige:16119260,bisque:16770244,black:0,blanchedalmond:16772045,blue:255,blueviolet:9055202,brown:10824234,burlywood:14596231,cadetblue:6266528,chartreuse:8388352,chocolate:13789470,coral:16744272,cornflowerblue:6591981,cornsilk:16775388,crimson:14423100,cyan:65535,darkblue:139,darkcyan:35723,darkgoldenrod:12092939,darkgray:11119017,darkgreen:25600,darkgrey:11119017,darkkhaki:12433259,darkmagenta:9109643,darkolivegreen:5597999,darkorange:16747520,darkorchid:10040012,darkred:9109504,darksalmon:15308410,darkseagreen:9419919,darkslateblue:4734347,darkslategray:3100495,darkslategrey:3100495,darkturquoise:52945,darkviolet:9699539,deeppink:16716947,deepskyblue:49151,dimgray:6908265,dimgrey:6908265,dodgerblue:2003199,firebrick:11674146,floralwhite:16775920,forestgreen:2263842,fuchsia:16711935,gainsboro:14474460,ghostwhite:16316671,gold:16766720,goldenrod:14329120,gray:8421504,green:32768,greenyellow:11403055,grey:8421504,honeydew:15794160,hotpink:16738740,indianred:13458524,indigo:4915330,ivory:16777200,khaki:15787660,lavender:15132410,lavenderblush:16773365,lawngreen:8190976,lemonchiffon:16775885,lightblue:11393254,lightcoral:15761536,lightcyan:14745599,lightgoldenrodyellow:16448210,lightgray:13882323,lightgreen:9498256,lightgrey:13882323,lightpink:16758465,lightsalmon:16752762,lightseagreen:2142890,lightskyblue:8900346,lightslategray:7833753,lightslategrey:7833753,lightsteelblue:11584734,lightyellow:16777184,lime:65280,limegreen:3329330,linen:16445670,magenta:16711935,maroon:8388608,mediumaquamarine:6737322,mediumblue:205,mediumorchid:12211667,mediumpurple:9662683,mediumseagreen:3978097,mediumslateblue:8087790,mediumspringgreen:64154,mediumturquoise:4772300,mediumvioletred:13047173,midnightblue:1644912,mintcream:16121850,mistyrose:16770273,moccasin:16770229,navajowhite:16768685,navy:128,oldlace:16643558,olive:8421376,olivedrab:7048739,orange:16753920,orangered:16729344,orchid:14315734,palegoldenrod:15657130,palegreen:10025880,paleturquoise:11529966,palevioletred:14381203,papayawhip:16773077,peachpuff:16767673,peru:13468991,pink:16761035,plum:14524637,powderblue:11591910,purple:8388736,rebeccapurple:6697881,red:16711680,rosybrown:12357519,royalblue:4286945,saddlebrown:9127187,salmon:16416882,sandybrown:16032864,seagreen:3050327,seashell:16774638,sienna:10506797,silver:12632256,skyblue:8900331,slateblue:6970061,slategray:7372944,slategrey:7372944,snow:16775930,springgreen:65407,steelblue:4620980,tan:13808780,teal:32896,thistle:14204888,tomato:16737095,turquoise:4251856,violet:15631086,wheat:16113331,white:16777215,whitesmoke:16119285,yellow:16776960,yellowgreen:10145074},qe={h:0,s:0,l:0},Xe={h:0,s:0,l:0};function Ye(t,e,n){return n<0&&(n+=1),n>1&&(n-=1),n<1/6?t+6*(e-t)*n:n<.5?e:n<2/3?t+6*(e-t)*(2/3-n):t}function Je(t){return t<.04045?.0773993808*t:Math.pow(.9478672986*t+.0521327014,2.4)}function Ze(t){return t<.0031308?12.92*t:1.055*Math.pow(t,.41666)-.055}class Qe{constructor(t,e,n){return void 0===e&&void 0===n?this.set(t):this.setRGB(t,e,n)}set(t){return t&&t.isColor?this.copy(t):"number"==typeof t?this.setHex(t):"string"==typeof t&&this.setStyle(t),this}setScalar(t){return this.r=t,this.g=t,this.b=t,this}setHex(t){return t=Math.floor(t),this.r=(t>>16&255)/255,this.g=(t>>8&255)/255,this.b=(255&t)/255,this}setRGB(t,e,n){return this.r=t,this.g=e,this.b=n,this}setHSL(t,e,n){if(t=ut(t,1),e=ht(e,0,1),n=ht(n,0,1),0===e)this.r=this.g=this.b=n;else{const i=n<=.5?n*(1+e):n+e-n*e,r=2*n-i;this.r=Ye(r,i,t+1/3),this.g=Ye(r,i,t),this.b=Ye(r,i,t-1/3)}return this}setStyle(t){function e(e){void 0!==e&&parseFloat(e)<1&&console.warn("THREE.Color: Alpha component of "+t+" will be ignored.")}let n;if(n=/^((?:rgb|hsl)a?)\(([^\)]*)\)/.exec(t)){let t;const i=n[1],r=n[2];switch(i){case"rgb":case"rgba":if(t=/^\s*(\d+)\s*,\s*(\d+)\s*,\s*(\d+)\s*(?:,\s*(\d*\.?\d+)\s*)?$/.exec(r))return this.r=Math.min(255,parseInt(t[1],10))/255,this.g=Math.min(255,parseInt(t[2],10))/255,this.b=Math.min(255,parseInt(t[3],10))/255,e(t[4]),this;if(t=/^\s*(\d+)\%\s*,\s*(\d+)\%\s*,\s*(\d+)\%\s*(?:,\s*(\d*\.?\d+)\s*)?$/.exec(r))return this.r=Math.min(100,parseInt(t[1],10))/100,this.g=Math.min(100,parseInt(t[2],10))/100,this.b=Math.min(100,parseInt(t[3],10))/100,e(t[4]),this;break;case"hsl":case"hsla":if(t=/^\s*(\d*\.?\d+)\s*,\s*(\d+)\%\s*,\s*(\d+)\%\s*(?:,\s*(\d*\.?\d+)\s*)?$/.exec(r)){const n=parseFloat(t[1])/360,i=parseInt(t[2],10)/100,r=parseInt(t[3],10)/100;return e(t[4]),this.setHSL(n,i,r)}}}else if(n=/^\#([A-Fa-f\d]+)$/.exec(t)){const t=n[1],e=t.length;if(3===e)return this.r=parseInt(t.charAt(0)+t.charAt(0),16)/255,this.g=parseInt(t.charAt(1)+t.charAt(1),16)/255,this.b=parseInt(t.charAt(2)+t.charAt(2),16)/255,this;if(6===e)return this.r=parseInt(t.charAt(0)+t.charAt(1),16)/255,this.g=parseInt(t.charAt(2)+t.charAt(3),16)/255,this.b=parseInt(t.charAt(4)+t.charAt(5),16)/255,this}return t&&t.length>0?this.setColorName(t):this}setColorName(t){const e=je[t.toLowerCase()];return void 0!==e?this.setHex(e):console.warn("THREE.Color: Unknown color "+t),this}clone(){return new this.constructor(this.r,this.g,this.b)}copy(t){return this.r=t.r,this.g=t.g,this.b=t.b,this}copyGammaToLinear(t,e=2){return this.r=Math.pow(t.r,e),this.g=Math.pow(t.g,e),this.b=Math.pow(t.b,e),this}copyLinearToGamma(t,e=2){const n=e>0?1/e:1;return this.r=Math.pow(t.r,n),this.g=Math.pow(t.g,n),this.b=Math.pow(t.b,n),this}convertGammaToLinear(t){return this.copyGammaToLinear(this,t),this}convertLinearToGamma(t){return this.copyLinearToGamma(this,t),this}copySRGBToLinear(t){return this.r=Je(t.r),this.g=Je(t.g),this.b=Je(t.b),this}copyLinearToSRGB(t){return this.r=Ze(t.r),this.g=Ze(t.g),this.b=Ze(t.b),this}convertSRGBToLinear(){return this.copySRGBToLinear(this),this}convertLinearToSRGB(){return this.copyLinearToSRGB(this),this}getHex(){return 255*this.r<<16^255*this.g<<8^255*this.b<<0}getHexString(){return("000000"+this.getHex().toString(16)).slice(-6)}getHSL(t){const e=this.r,n=this.g,i=this.b,r=Math.max(e,n,i),s=Math.min(e,n,i);let a,o;const l=(s+r)/2;if(s===r)a=0,o=0;else{const t=r-s;switch(o=l<=.5?t/(r+s):t/(2-r-s),r){case e:a=(n-i)/t+(ne&&(e=t[n]);return e}const mn={Int8Array:Int8Array,Uint8Array:Uint8Array,Uint8ClampedArray:Uint8ClampedArray,Int16Array:Int16Array,Uint16Array:Uint16Array,Int32Array:Int32Array,Uint32Array:Uint32Array,Float32Array:Float32Array,Float64Array:Float64Array};function fn(t,e){return new mn[t](e)}let gn=0;const vn=new ae,yn=new Pe,xn=new Rt,_n=new Dt,bn=new Dt,Mn=new Rt;class wn extends rt{constructor(){super(),Object.defineProperty(this,"id",{value:gn++}),this.uuid=ct(),this.name="",this.type="BufferGeometry",this.index=null,this.attributes={},this.morphAttributes={},this.morphTargetsRelative=!1,this.groups=[],this.boundingBox=null,this.boundingSphere=null,this.drawRange={start:0,count:1/0},this.userData={}}getIndex(){return this.index}setIndex(t){return Array.isArray(t)?this.index=new(pn(t)>65535?cn:on)(t,1):this.index=t,this}getAttribute(t){return this.attributes[t]}setAttribute(t,e){return this.attributes[t]=e,this}deleteAttribute(t){return delete this.attributes[t],this}hasAttribute(t){return void 0!==this.attributes[t]}addGroup(t,e,n=0){this.groups.push({start:t,count:e,materialIndex:n})}clearGroups(){this.groups=[]}setDrawRange(t,e){this.drawRange.start=t,this.drawRange.count=e}applyMatrix4(t){const e=this.attributes.position;void 0!==e&&(e.applyMatrix4(t),e.needsUpdate=!0);const n=this.attributes.normal;if(void 0!==n){const e=(new yt).getNormalMatrix(t);n.applyNormalMatrix(e),n.needsUpdate=!0}const i=this.attributes.tangent;return void 0!==i&&(i.transformDirection(t),i.needsUpdate=!0),null!==this.boundingBox&&this.computeBoundingBox(),null!==this.boundingSphere&&this.computeBoundingSphere(),this}applyQuaternion(t){return vn.makeRotationFromQuaternion(t),this.applyMatrix4(vn),this}rotateX(t){return vn.makeRotationX(t),this.applyMatrix4(vn),this}rotateY(t){return vn.makeRotationY(t),this.applyMatrix4(vn),this}rotateZ(t){return vn.makeRotationZ(t),this.applyMatrix4(vn),this}translate(t,e,n){return vn.makeTranslation(t,e,n),this.applyMatrix4(vn),this}scale(t,e,n){return vn.makeScale(t,e,n),this.applyMatrix4(vn),this}lookAt(t){return yn.lookAt(t),yn.updateMatrix(),this.applyMatrix4(yn.matrix),this}center(){return this.computeBoundingBox(),this.boundingBox.getCenter(xn).negate(),this.translate(xn.x,xn.y,xn.z),this}setFromPoints(t){const e=[];for(let n=0,i=t.length;n0&&(t.userData=this.userData),void 0!==this.parameters){const e=this.parameters;for(const n in e)void 0!==e[n]&&(t[n]=e[n]);return t}t.data={attributes:{}};const e=this.index;null!==e&&(t.data.index={type:e.array.constructor.name,array:Array.prototype.slice.call(e.array)});const n=this.attributes;for(const e in n){const i=n[e];t.data.attributes[e]=i.toJSON(t.data)}const i={};let r=!1;for(const e in this.morphAttributes){const n=this.morphAttributes[e],s=[];for(let e=0,i=n.length;e0&&(i[e]=s,r=!0)}r&&(t.data.morphAttributes=i,t.data.morphTargetsRelative=this.morphTargetsRelative);const s=this.groups;s.length>0&&(t.data.groups=JSON.parse(JSON.stringify(s)));const a=this.boundingSphere;return null!==a&&(t.data.boundingSphere={center:a.center.toArray(),radius:a.radius}),t}clone(){return(new wn).copy(this)}copy(t){this.index=null,this.attributes={},this.morphAttributes={},this.groups=[],this.boundingBox=null,this.boundingSphere=null;const e={};this.name=t.name;const n=t.index;null!==n&&this.setIndex(n.clone(e));const i=t.attributes;for(const t in i){const n=i[t];this.setAttribute(t,n.clone(e))}const r=t.morphAttributes;for(const t in r){const n=[],i=r[t];for(let t=0,r=i.length;t0){const t=e[n[0]];if(void 0!==t){this.morphTargetInfluences=[],this.morphTargetDictionary={};for(let e=0,n=t.length;e0&&console.error("THREE.Mesh.updateMorphTargets() no longer supports THREE.Geometry. Use THREE.BufferGeometry instead.")}}raycast(t,e){const n=this.geometry,i=this.material,r=this.matrixWorld;if(void 0===i)return;if(null===n.boundingSphere&&n.computeBoundingSphere(),En.copy(n.boundingSphere),En.applyMatrix4(r),!1===t.ray.intersectsSphere(En))return;if(Sn.copy(r).invert(),Tn.copy(t.ray).applyMatrix4(Sn),null!==n.boundingBox&&!1===Tn.intersectsBox(n.boundingBox))return;let s;if(n.isBufferGeometry){const r=n.index,a=n.attributes.position,o=n.morphAttributes.position,l=n.morphTargetsRelative,c=n.attributes.uv,h=n.attributes.uv2,u=n.groups,d=n.drawRange;if(null!==r)if(Array.isArray(i))for(let n=0,p=u.length;nn.far?null:{distance:c,point:Un.clone(),object:t}}(t,e,n,i,An,Ln,Rn,Hn);if(p){o&&(zn.fromBufferAttribute(o,c),Fn.fromBufferAttribute(o,h),On.fromBufferAttribute(o,u),p.uv=ke.getUV(Hn,An,Ln,Rn,zn,Fn,On,new vt)),l&&(zn.fromBufferAttribute(l,c),Fn.fromBufferAttribute(l,h),On.fromBufferAttribute(l,u),p.uv2=ke.getUV(Hn,An,Ln,Rn,zn,Fn,On,new vt));const t={a:c,b:h,c:u,normal:new Rt,materialIndex:0};ke.getNormal(An,Ln,Rn,t.normal),p.face=t}return p}Gn.prototype.isMesh=!0;class Vn extends wn{constructor(t=1,e=1,n=1,i=1,r=1,s=1){super(),this.type="BoxGeometry",this.parameters={width:t,height:e,depth:n,widthSegments:i,heightSegments:r,depthSegments:s};const a=this;i=Math.floor(i),r=Math.floor(r),s=Math.floor(s);const o=[],l=[],c=[],h=[];let u=0,d=0;function p(t,e,n,i,r,s,p,m,f,g,v){const y=s/f,x=p/g,_=s/2,b=p/2,M=m/2,w=f+1,S=g+1;let T=0,E=0;const A=new Rt;for(let s=0;s0?1:-1,c.push(A.x,A.y,A.z),h.push(o/f),h.push(1-s/g),T+=1}}for(let t=0;t0&&(e.defines=this.defines),e.vertexShader=this.vertexShader,e.fragmentShader=this.fragmentShader;const n={};for(const t in this.extensions)!0===this.extensions[t]&&(n[t]=!0);return Object.keys(n).length>0&&(e.extensions=n),e}}Xn.prototype.isShaderMaterial=!0;class Yn extends Pe{constructor(){super(),this.type="Camera",this.matrixWorldInverse=new ae,this.projectionMatrix=new ae,this.projectionMatrixInverse=new ae}copy(t,e){return super.copy(t,e),this.matrixWorldInverse.copy(t.matrixWorldInverse),this.projectionMatrix.copy(t.projectionMatrix),this.projectionMatrixInverse.copy(t.projectionMatrixInverse),this}getWorldDirection(t){this.updateWorldMatrix(!0,!1);const e=this.matrixWorld.elements;return t.set(-e[8],-e[9],-e[10]).normalize()}updateMatrixWorld(t){super.updateMatrixWorld(t),this.matrixWorldInverse.copy(this.matrixWorld).invert()}updateWorldMatrix(t,e){super.updateWorldMatrix(t,e),this.matrixWorldInverse.copy(this.matrixWorld).invert()}clone(){return(new this.constructor).copy(this)}}Yn.prototype.isCamera=!0;class Jn extends Yn{constructor(t=50,e=1,n=.1,i=2e3){super(),this.type="PerspectiveCamera",this.fov=t,this.zoom=1,this.near=n,this.far=i,this.focus=10,this.aspect=e,this.view=null,this.filmGauge=35,this.filmOffset=0,this.updateProjectionMatrix()}copy(t,e){return super.copy(t,e),this.fov=t.fov,this.zoom=t.zoom,this.near=t.near,this.far=t.far,this.focus=t.focus,this.aspect=t.aspect,this.view=null===t.view?null:Object.assign({},t.view),this.filmGauge=t.filmGauge,this.filmOffset=t.filmOffset,this}setFocalLength(t){const e=.5*this.getFilmHeight()/t;this.fov=2*lt*Math.atan(e),this.updateProjectionMatrix()}getFocalLength(){const t=Math.tan(.5*ot*this.fov);return.5*this.getFilmHeight()/t}getEffectiveFOV(){return 2*lt*Math.atan(Math.tan(.5*ot*this.fov)/this.zoom)}getFilmWidth(){return this.filmGauge*Math.min(this.aspect,1)}getFilmHeight(){return this.filmGauge/Math.max(this.aspect,1)}setViewOffset(t,e,n,i,r,s){this.aspect=t/e,null===this.view&&(this.view={enabled:!0,fullWidth:1,fullHeight:1,offsetX:0,offsetY:0,width:1,height:1}),this.view.enabled=!0,this.view.fullWidth=t,this.view.fullHeight=e,this.view.offsetX=n,this.view.offsetY=i,this.view.width=r,this.view.height=s,this.updateProjectionMatrix()}clearViewOffset(){null!==this.view&&(this.view.enabled=!1),this.updateProjectionMatrix()}updateProjectionMatrix(){const t=this.near;let e=t*Math.tan(.5*ot*this.fov)/this.zoom,n=2*e,i=this.aspect*n,r=-.5*i;const s=this.view;if(null!==this.view&&this.view.enabled){const t=s.fullWidth,a=s.fullHeight;r+=s.offsetX*i/t,e-=s.offsetY*n/a,i*=s.width/t,n*=s.height/a}const a=this.filmOffset;0!==a&&(r+=t*a/this.getFilmWidth()),this.projectionMatrix.makePerspective(r,r+i,e,e-n,t,this.far),this.projectionMatrixInverse.copy(this.projectionMatrix).invert()}toJSON(t){const e=super.toJSON(t);return e.object.fov=this.fov,e.object.zoom=this.zoom,e.object.near=this.near,e.object.far=this.far,e.object.focus=this.focus,e.object.aspect=this.aspect,null!==this.view&&(e.object.view=Object.assign({},this.view)),e.object.filmGauge=this.filmGauge,e.object.filmOffset=this.filmOffset,e}}Jn.prototype.isPerspectiveCamera=!0;const Zn=90;class Qn extends Pe{constructor(t,e,n){if(super(),this.type="CubeCamera",!0!==n.isWebGLCubeRenderTarget)return void console.error("THREE.CubeCamera: The constructor now expects an instance of WebGLCubeRenderTarget as third parameter.");this.renderTarget=n;const i=new Jn(Zn,1,t,e);i.layers=this.layers,i.up.set(0,-1,0),i.lookAt(new Rt(1,0,0)),this.add(i);const r=new Jn(Zn,1,t,e);r.layers=this.layers,r.up.set(0,-1,0),r.lookAt(new Rt(-1,0,0)),this.add(r);const s=new Jn(Zn,1,t,e);s.layers=this.layers,s.up.set(0,0,1),s.lookAt(new Rt(0,1,0)),this.add(s);const a=new Jn(Zn,1,t,e);a.layers=this.layers,a.up.set(0,0,-1),a.lookAt(new Rt(0,-1,0)),this.add(a);const o=new Jn(Zn,1,t,e);o.layers=this.layers,o.up.set(0,-1,0),o.lookAt(new Rt(0,0,1)),this.add(o);const l=new Jn(Zn,1,t,e);l.layers=this.layers,l.up.set(0,-1,0),l.lookAt(new Rt(0,0,-1)),this.add(l)}update(t,e){null===this.parent&&this.updateMatrixWorld();const n=this.renderTarget,[i,r,s,a,o,l]=this.children,c=t.xr.enabled,h=t.getRenderTarget();t.xr.enabled=!1;const u=n.texture.generateMipmaps;n.texture.generateMipmaps=!1,t.setRenderTarget(n,0),t.render(e,i),t.setRenderTarget(n,1),t.render(e,r),t.setRenderTarget(n,2),t.render(e,s),t.setRenderTarget(n,3),t.render(e,a),t.setRenderTarget(n,4),t.render(e,o),n.texture.generateMipmaps=u,t.setRenderTarget(n,5),t.render(e,l),t.setRenderTarget(h),t.xr.enabled=c}}class Kn extends Mt{constructor(t,e,n,i,s,a,o,l,c,h){super(t=void 0!==t?t:[],e=void 0!==e?e:r,n,i,s,a,o=void 0!==o?o:T,l,c,h),this._needsFlipEnvMap=!0,this.flipY=!1}get images(){return this.image}set images(t){this.image=t}}Kn.prototype.isCubeTexture=!0;class $n extends Tt{constructor(t,e,n){Number.isInteger(e)&&(console.warn("THREE.WebGLCubeRenderTarget: constructor signature is now WebGLCubeRenderTarget( size, options )"),e=n),super(t,t,e),e=e||{},this.texture=new Kn(void 0,e.mapping,e.wrapS,e.wrapT,e.magFilter,e.minFilter,e.format,e.type,e.anisotropy,e.encoding),this.texture.generateMipmaps=void 0!==e.generateMipmaps&&e.generateMipmaps,this.texture.minFilter=void 0!==e.minFilter?e.minFilter:g,this.texture._needsFlipEnvMap=!1}fromEquirectangularTexture(t,e){this.texture.type=e.type,this.texture.format=E,this.texture.encoding=e.encoding,this.texture.generateMipmaps=e.generateMipmaps,this.texture.minFilter=e.minFilter,this.texture.magFilter=e.magFilter;const n={uniforms:{tEquirect:{value:null}},vertexShader:"\n\n\t\t\t\tvarying vec3 vWorldDirection;\n\n\t\t\t\tvec3 transformDirection( in vec3 dir, in mat4 matrix ) {\n\n\t\t\t\t\treturn normalize( ( matrix * vec4( dir, 0.0 ) ).xyz );\n\n\t\t\t\t}\n\n\t\t\t\tvoid main() {\n\n\t\t\t\t\tvWorldDirection = transformDirection( position, modelMatrix );\n\n\t\t\t\t\t#include \n\t\t\t\t\t#include \n\n\t\t\t\t}\n\t\t\t",fragmentShader:"\n\n\t\t\t\tuniform sampler2D tEquirect;\n\n\t\t\t\tvarying vec3 vWorldDirection;\n\n\t\t\t\t#include \n\n\t\t\t\tvoid main() {\n\n\t\t\t\t\tvec3 direction = normalize( vWorldDirection );\n\n\t\t\t\t\tvec2 sampleUV = equirectUv( direction );\n\n\t\t\t\t\tgl_FragColor = texture2D( tEquirect, sampleUV );\n\n\t\t\t\t}\n\t\t\t"},i=new Vn(5,5,5),r=new Xn({name:"CubemapFromEquirect",uniforms:Wn(n.uniforms),vertexShader:n.vertexShader,fragmentShader:n.fragmentShader,side:1,blending:0});r.uniforms.tEquirect.value=e;const s=new Gn(i,r),a=e.minFilter;e.minFilter===y&&(e.minFilter=g);return new Qn(1,10,this).update(t,s),e.minFilter=a,s.geometry.dispose(),s.material.dispose(),this}clear(t,e,n,i){const r=t.getRenderTarget();for(let r=0;r<6;r++)t.setRenderTarget(this,r),t.clear(e,n,i);t.setRenderTarget(r)}}$n.prototype.isWebGLCubeRenderTarget=!0;const ti=new Rt,ei=new Rt,ni=new yt;class ii{constructor(t=new Rt(1,0,0),e=0){this.normal=t,this.constant=e}set(t,e){return this.normal.copy(t),this.constant=e,this}setComponents(t,e,n,i){return this.normal.set(t,e,n),this.constant=i,this}setFromNormalAndCoplanarPoint(t,e){return this.normal.copy(t),this.constant=-e.dot(this.normal),this}setFromCoplanarPoints(t,e,n){const i=ti.subVectors(n,e).cross(ei.subVectors(t,e)).normalize();return this.setFromNormalAndCoplanarPoint(i,t),this}copy(t){return this.normal.copy(t.normal),this.constant=t.constant,this}normalize(){const t=1/this.normal.length();return this.normal.multiplyScalar(t),this.constant*=t,this}negate(){return this.constant*=-1,this.normal.negate(),this}distanceToPoint(t){return this.normal.dot(t)+this.constant}distanceToSphere(t){return this.distanceToPoint(t.center)-t.radius}projectPoint(t,e){return e.copy(this.normal).multiplyScalar(-this.distanceToPoint(t)).add(t)}intersectLine(t,e){const n=t.delta(ti),i=this.normal.dot(n);if(0===i)return 0===this.distanceToPoint(t.start)?e.copy(t.start):null;const r=-(t.start.dot(this.normal)+this.constant)/i;return r<0||r>1?null:e.copy(n).multiplyScalar(r).add(t.start)}intersectsLine(t){const e=this.distanceToPoint(t.start),n=this.distanceToPoint(t.end);return e<0&&n>0||n<0&&e>0}intersectsBox(t){return t.intersectsPlane(this)}intersectsSphere(t){return t.intersectsPlane(this)}coplanarPoint(t){return t.copy(this.normal).multiplyScalar(-this.constant)}applyMatrix4(t,e){const n=e||ni.getNormalMatrix(t),i=this.coplanarPoint(ti).applyMatrix4(t),r=this.normal.applyMatrix3(n).normalize();return this.constant=-i.dot(r),this}translate(t){return this.constant-=t.dot(this.normal),this}equals(t){return t.normal.equals(this.normal)&&t.constant===this.constant}clone(){return(new this.constructor).copy(this)}}ii.prototype.isPlane=!0;const ri=new Qt,si=new Rt;class ai{constructor(t=new ii,e=new ii,n=new ii,i=new ii,r=new ii,s=new ii){this.planes=[t,e,n,i,r,s]}set(t,e,n,i,r,s){const a=this.planes;return a[0].copy(t),a[1].copy(e),a[2].copy(n),a[3].copy(i),a[4].copy(r),a[5].copy(s),this}copy(t){const e=this.planes;for(let n=0;n<6;n++)e[n].copy(t.planes[n]);return this}setFromProjectionMatrix(t){const e=this.planes,n=t.elements,i=n[0],r=n[1],s=n[2],a=n[3],o=n[4],l=n[5],c=n[6],h=n[7],u=n[8],d=n[9],p=n[10],m=n[11],f=n[12],g=n[13],v=n[14],y=n[15];return e[0].setComponents(a-i,h-o,m-u,y-f).normalize(),e[1].setComponents(a+i,h+o,m+u,y+f).normalize(),e[2].setComponents(a+r,h+l,m+d,y+g).normalize(),e[3].setComponents(a-r,h-l,m-d,y-g).normalize(),e[4].setComponents(a-s,h-c,m-p,y-v).normalize(),e[5].setComponents(a+s,h+c,m+p,y+v).normalize(),this}intersectsObject(t){const e=t.geometry;return null===e.boundingSphere&&e.computeBoundingSphere(),ri.copy(e.boundingSphere).applyMatrix4(t.matrixWorld),this.intersectsSphere(ri)}intersectsSprite(t){return ri.center.set(0,0,0),ri.radius=.7071067811865476,ri.applyMatrix4(t.matrixWorld),this.intersectsSphere(ri)}intersectsSphere(t){const e=this.planes,n=t.center,i=-t.radius;for(let t=0;t<6;t++){if(e[t].distanceToPoint(n)0?t.max.x:t.min.x,si.y=i.normal.y>0?t.max.y:t.min.y,si.z=i.normal.z>0?t.max.z:t.min.z,i.distanceToPoint(si)<0)return!1}return!0}containsPoint(t){const e=this.planes;for(let n=0;n<6;n++)if(e[n].distanceToPoint(t)<0)return!1;return!0}clone(){return(new this.constructor).copy(this)}}function oi(){let t=null,e=!1,n=null,i=null;function r(e,s){n(e,s),i=t.requestAnimationFrame(r)}return{start:function(){!0!==e&&null!==n&&(i=t.requestAnimationFrame(r),e=!0)},stop:function(){t.cancelAnimationFrame(i),e=!1},setAnimationLoop:function(t){n=t},setContext:function(e){t=e}}}function li(t,e){const n=e.isWebGL2,i=new WeakMap;return{get:function(t){return t.isInterleavedBufferAttribute&&(t=t.data),i.get(t)},remove:function(e){e.isInterleavedBufferAttribute&&(e=e.data);const n=i.get(e);n&&(t.deleteBuffer(n.buffer),i.delete(e))},update:function(e,r){if(e.isGLBufferAttribute){const t=i.get(e);return void((!t||t.version 0.0 ) {\n\t\tdistanceFalloff *= pow2( saturate( 1.0 - pow4( lightDistance / cutoffDistance ) ) );\n\t}\n\treturn distanceFalloff;\n#else\n\tif( cutoffDistance > 0.0 && decayExponent > 0.0 ) {\n\t\treturn pow( saturate( -lightDistance / cutoffDistance + 1.0 ), decayExponent );\n\t}\n\treturn 1.0;\n#endif\n}\nvec3 BRDF_Diffuse_Lambert( const in vec3 diffuseColor ) {\n\treturn RECIPROCAL_PI * diffuseColor;\n}\nvec3 F_Schlick( const in vec3 specularColor, const in float dotVH ) {\n\tfloat fresnel = exp2( ( -5.55473 * dotVH - 6.98316 ) * dotVH );\n\treturn ( 1.0 - specularColor ) * fresnel + specularColor;\n}\nvec3 F_Schlick_RoughnessDependent( const in vec3 F0, const in float dotNV, const in float roughness ) {\n\tfloat fresnel = exp2( ( -5.55473 * dotNV - 6.98316 ) * dotNV );\n\tvec3 Fr = max( vec3( 1.0 - roughness ), F0 ) - F0;\n\treturn Fr * fresnel + F0;\n}\nfloat G_GGX_Smith( const in float alpha, const in float dotNL, const in float dotNV ) {\n\tfloat a2 = pow2( alpha );\n\tfloat gl = dotNL + sqrt( a2 + ( 1.0 - a2 ) * pow2( dotNL ) );\n\tfloat gv = dotNV + sqrt( a2 + ( 1.0 - a2 ) * pow2( dotNV ) );\n\treturn 1.0 / ( gl * gv );\n}\nfloat G_GGX_SmithCorrelated( const in float alpha, const in float dotNL, const in float dotNV ) {\n\tfloat a2 = pow2( alpha );\n\tfloat gv = dotNL * sqrt( a2 + ( 1.0 - a2 ) * pow2( dotNV ) );\n\tfloat gl = dotNV * sqrt( a2 + ( 1.0 - a2 ) * pow2( dotNL ) );\n\treturn 0.5 / max( gv + gl, EPSILON );\n}\nfloat D_GGX( const in float alpha, const in float dotNH ) {\n\tfloat a2 = pow2( alpha );\n\tfloat denom = pow2( dotNH ) * ( a2 - 1.0 ) + 1.0;\n\treturn RECIPROCAL_PI * a2 / pow2( denom );\n}\nvec3 BRDF_Specular_GGX( const in IncidentLight incidentLight, const in vec3 viewDir, const in vec3 normal, const in vec3 specularColor, const in float roughness ) {\n\tfloat alpha = pow2( roughness );\n\tvec3 halfDir = normalize( incidentLight.direction + viewDir );\n\tfloat dotNL = saturate( dot( normal, incidentLight.direction ) );\n\tfloat dotNV = saturate( dot( normal, viewDir ) );\n\tfloat dotNH = saturate( dot( normal, halfDir ) );\n\tfloat dotLH = saturate( dot( incidentLight.direction, halfDir ) );\n\tvec3 F = F_Schlick( specularColor, dotLH );\n\tfloat G = G_GGX_SmithCorrelated( alpha, dotNL, dotNV );\n\tfloat D = D_GGX( alpha, dotNH );\n\treturn F * ( G * D );\n}\nvec2 LTC_Uv( const in vec3 N, const in vec3 V, const in float roughness ) {\n\tconst float LUT_SIZE = 64.0;\n\tconst float LUT_SCALE = ( LUT_SIZE - 1.0 ) / LUT_SIZE;\n\tconst float LUT_BIAS = 0.5 / LUT_SIZE;\n\tfloat dotNV = saturate( dot( N, V ) );\n\tvec2 uv = vec2( roughness, sqrt( 1.0 - dotNV ) );\n\tuv = uv * LUT_SCALE + LUT_BIAS;\n\treturn uv;\n}\nfloat LTC_ClippedSphereFormFactor( const in vec3 f ) {\n\tfloat l = length( f );\n\treturn max( ( l * l + f.z ) / ( l + 1.0 ), 0.0 );\n}\nvec3 LTC_EdgeVectorFormFactor( const in vec3 v1, const in vec3 v2 ) {\n\tfloat x = dot( v1, v2 );\n\tfloat y = abs( x );\n\tfloat a = 0.8543985 + ( 0.4965155 + 0.0145206 * y ) * y;\n\tfloat b = 3.4175940 + ( 4.1616724 + y ) * y;\n\tfloat v = a / b;\n\tfloat theta_sintheta = ( x > 0.0 ) ? v : 0.5 * inversesqrt( max( 1.0 - x * x, 1e-7 ) ) - v;\n\treturn cross( v1, v2 ) * theta_sintheta;\n}\nvec3 LTC_Evaluate( const in vec3 N, const in vec3 V, const in vec3 P, const in mat3 mInv, const in vec3 rectCoords[ 4 ] ) {\n\tvec3 v1 = rectCoords[ 1 ] - rectCoords[ 0 ];\n\tvec3 v2 = rectCoords[ 3 ] - rectCoords[ 0 ];\n\tvec3 lightNormal = cross( v1, v2 );\n\tif( dot( lightNormal, P - rectCoords[ 0 ] ) < 0.0 ) return vec3( 0.0 );\n\tvec3 T1, T2;\n\tT1 = normalize( V - N * dot( V, N ) );\n\tT2 = - cross( N, T1 );\n\tmat3 mat = mInv * transposeMat3( mat3( T1, T2, N ) );\n\tvec3 coords[ 4 ];\n\tcoords[ 0 ] = mat * ( rectCoords[ 0 ] - P );\n\tcoords[ 1 ] = mat * ( rectCoords[ 1 ] - P );\n\tcoords[ 2 ] = mat * ( rectCoords[ 2 ] - P );\n\tcoords[ 3 ] = mat * ( rectCoords[ 3 ] - P );\n\tcoords[ 0 ] = normalize( coords[ 0 ] );\n\tcoords[ 1 ] = normalize( coords[ 1 ] );\n\tcoords[ 2 ] = normalize( coords[ 2 ] );\n\tcoords[ 3 ] = normalize( coords[ 3 ] );\n\tvec3 vectorFormFactor = vec3( 0.0 );\n\tvectorFormFactor += LTC_EdgeVectorFormFactor( coords[ 0 ], coords[ 1 ] );\n\tvectorFormFactor += LTC_EdgeVectorFormFactor( coords[ 1 ], coords[ 2 ] );\n\tvectorFormFactor += LTC_EdgeVectorFormFactor( coords[ 2 ], coords[ 3 ] );\n\tvectorFormFactor += LTC_EdgeVectorFormFactor( coords[ 3 ], coords[ 0 ] );\n\tfloat result = LTC_ClippedSphereFormFactor( vectorFormFactor );\n\treturn vec3( result );\n}\nvec3 BRDF_Specular_GGX_Environment( const in vec3 viewDir, const in vec3 normal, const in vec3 specularColor, const in float roughness ) {\n\tfloat dotNV = saturate( dot( normal, viewDir ) );\n\tvec2 brdf = integrateSpecularBRDF( dotNV, roughness );\n\treturn specularColor * brdf.x + brdf.y;\n}\nvoid BRDF_Specular_Multiscattering_Environment( const in GeometricContext geometry, const in vec3 specularColor, const in float roughness, inout vec3 singleScatter, inout vec3 multiScatter ) {\n\tfloat dotNV = saturate( dot( geometry.normal, geometry.viewDir ) );\n\tvec3 F = F_Schlick_RoughnessDependent( specularColor, dotNV, roughness );\n\tvec2 brdf = integrateSpecularBRDF( dotNV, roughness );\n\tvec3 FssEss = F * brdf.x + brdf.y;\n\tfloat Ess = brdf.x + brdf.y;\n\tfloat Ems = 1.0 - Ess;\n\tvec3 Favg = specularColor + ( 1.0 - specularColor ) * 0.047619;\tvec3 Fms = FssEss * Favg / ( 1.0 - Ems * Favg );\n\tsingleScatter += FssEss;\n\tmultiScatter += Fms * Ems;\n}\nfloat G_BlinnPhong_Implicit( ) {\n\treturn 0.25;\n}\nfloat D_BlinnPhong( const in float shininess, const in float dotNH ) {\n\treturn RECIPROCAL_PI * ( shininess * 0.5 + 1.0 ) * pow( dotNH, shininess );\n}\nvec3 BRDF_Specular_BlinnPhong( const in IncidentLight incidentLight, const in GeometricContext geometry, const in vec3 specularColor, const in float shininess ) {\n\tvec3 halfDir = normalize( incidentLight.direction + geometry.viewDir );\n\tfloat dotNH = saturate( dot( geometry.normal, halfDir ) );\n\tfloat dotLH = saturate( dot( incidentLight.direction, halfDir ) );\n\tvec3 F = F_Schlick( specularColor, dotLH );\n\tfloat G = G_BlinnPhong_Implicit( );\n\tfloat D = D_BlinnPhong( shininess, dotNH );\n\treturn F * ( G * D );\n}\nfloat GGXRoughnessToBlinnExponent( const in float ggxRoughness ) {\n\treturn ( 2.0 / pow2( ggxRoughness + 0.0001 ) - 2.0 );\n}\nfloat BlinnExponentToGGXRoughness( const in float blinnExponent ) {\n\treturn sqrt( 2.0 / ( blinnExponent + 2.0 ) );\n}\n#if defined( USE_SHEEN )\nfloat D_Charlie(float roughness, float NoH) {\n\tfloat invAlpha = 1.0 / roughness;\n\tfloat cos2h = NoH * NoH;\n\tfloat sin2h = max(1.0 - cos2h, 0.0078125);\treturn (2.0 + invAlpha) * pow(sin2h, invAlpha * 0.5) / (2.0 * PI);\n}\nfloat V_Neubelt(float NoV, float NoL) {\n\treturn saturate(1.0 / (4.0 * (NoL + NoV - NoL * NoV)));\n}\nvec3 BRDF_Specular_Sheen( const in float roughness, const in vec3 L, const in GeometricContext geometry, vec3 specularColor ) {\n\tvec3 N = geometry.normal;\n\tvec3 V = geometry.viewDir;\n\tvec3 H = normalize( V + L );\n\tfloat dotNH = saturate( dot( N, H ) );\n\treturn specularColor * D_Charlie( roughness, dotNH ) * V_Neubelt( dot(N, V), dot(N, L) );\n}\n#endif",bumpmap_pars_fragment:"#ifdef USE_BUMPMAP\n\tuniform sampler2D bumpMap;\n\tuniform float bumpScale;\n\tvec2 dHdxy_fwd() {\n\t\tvec2 dSTdx = dFdx( vUv );\n\t\tvec2 dSTdy = dFdy( vUv );\n\t\tfloat Hll = bumpScale * texture2D( bumpMap, vUv ).x;\n\t\tfloat dBx = bumpScale * texture2D( bumpMap, vUv + dSTdx ).x - Hll;\n\t\tfloat dBy = bumpScale * texture2D( bumpMap, vUv + dSTdy ).x - Hll;\n\t\treturn vec2( dBx, dBy );\n\t}\n\tvec3 perturbNormalArb( vec3 surf_pos, vec3 surf_norm, vec2 dHdxy, float faceDirection ) {\n\t\tvec3 vSigmaX = vec3( dFdx( surf_pos.x ), dFdx( surf_pos.y ), dFdx( surf_pos.z ) );\n\t\tvec3 vSigmaY = vec3( dFdy( surf_pos.x ), dFdy( surf_pos.y ), dFdy( surf_pos.z ) );\n\t\tvec3 vN = surf_norm;\n\t\tvec3 R1 = cross( vSigmaY, vN );\n\t\tvec3 R2 = cross( vN, vSigmaX );\n\t\tfloat fDet = dot( vSigmaX, R1 ) * faceDirection;\n\t\tvec3 vGrad = sign( fDet ) * ( dHdxy.x * R1 + dHdxy.y * R2 );\n\t\treturn normalize( abs( fDet ) * surf_norm - vGrad );\n\t}\n#endif",clipping_planes_fragment:"#if NUM_CLIPPING_PLANES > 0\n\tvec4 plane;\n\t#pragma unroll_loop_start\n\tfor ( int i = 0; i < UNION_CLIPPING_PLANES; i ++ ) {\n\t\tplane = clippingPlanes[ i ];\n\t\tif ( dot( vClipPosition, plane.xyz ) > plane.w ) discard;\n\t}\n\t#pragma unroll_loop_end\n\t#if UNION_CLIPPING_PLANES < NUM_CLIPPING_PLANES\n\t\tbool clipped = true;\n\t\t#pragma unroll_loop_start\n\t\tfor ( int i = UNION_CLIPPING_PLANES; i < NUM_CLIPPING_PLANES; i ++ ) {\n\t\t\tplane = clippingPlanes[ i ];\n\t\t\tclipped = ( dot( vClipPosition, plane.xyz ) > plane.w ) && clipped;\n\t\t}\n\t\t#pragma unroll_loop_end\n\t\tif ( clipped ) discard;\n\t#endif\n#endif",clipping_planes_pars_fragment:"#if NUM_CLIPPING_PLANES > 0\n\tvarying vec3 vClipPosition;\n\tuniform vec4 clippingPlanes[ NUM_CLIPPING_PLANES ];\n#endif",clipping_planes_pars_vertex:"#if NUM_CLIPPING_PLANES > 0\n\tvarying vec3 vClipPosition;\n#endif",clipping_planes_vertex:"#if NUM_CLIPPING_PLANES > 0\n\tvClipPosition = - mvPosition.xyz;\n#endif",color_fragment:"#if defined( USE_COLOR_ALPHA )\n\tdiffuseColor *= vColor;\n#elif defined( USE_COLOR )\n\tdiffuseColor.rgb *= vColor;\n#endif",color_pars_fragment:"#if defined( USE_COLOR_ALPHA )\n\tvarying vec4 vColor;\n#elif defined( USE_COLOR )\n\tvarying vec3 vColor;\n#endif",color_pars_vertex:"#if defined( USE_COLOR_ALPHA )\n\tvarying vec4 vColor;\n#elif defined( USE_COLOR ) || defined( USE_INSTANCING_COLOR )\n\tvarying vec3 vColor;\n#endif",color_vertex:"#if defined( USE_COLOR_ALPHA )\n\tvColor = vec4( 1.0 );\n#elif defined( USE_COLOR ) || defined( USE_INSTANCING_COLOR )\n\tvColor = vec3( 1.0 );\n#endif\n#ifdef USE_COLOR\n\tvColor *= color;\n#endif\n#ifdef USE_INSTANCING_COLOR\n\tvColor.xyz *= instanceColor.xyz;\n#endif",common:"#define PI 3.141592653589793\n#define PI2 6.283185307179586\n#define PI_HALF 1.5707963267948966\n#define RECIPROCAL_PI 0.3183098861837907\n#define RECIPROCAL_PI2 0.15915494309189535\n#define EPSILON 1e-6\n#ifndef saturate\n#define saturate(a) clamp( a, 0.0, 1.0 )\n#endif\n#define whiteComplement(a) ( 1.0 - saturate( a ) )\nfloat pow2( const in float x ) { return x*x; }\nfloat pow3( const in float x ) { return x*x*x; }\nfloat pow4( const in float x ) { float x2 = x*x; return x2*x2; }\nfloat average( const in vec3 color ) { return dot( color, vec3( 0.3333 ) ); }\nhighp float rand( const in vec2 uv ) {\n\tconst highp float a = 12.9898, b = 78.233, c = 43758.5453;\n\thighp float dt = dot( uv.xy, vec2( a,b ) ), sn = mod( dt, PI );\n\treturn fract(sin(sn) * c);\n}\n#ifdef HIGH_PRECISION\n\tfloat precisionSafeLength( vec3 v ) { return length( v ); }\n#else\n\tfloat max3( vec3 v ) { return max( max( v.x, v.y ), v.z ); }\n\tfloat precisionSafeLength( vec3 v ) {\n\t\tfloat maxComponent = max3( abs( v ) );\n\t\treturn length( v / maxComponent ) * maxComponent;\n\t}\n#endif\nstruct IncidentLight {\n\tvec3 color;\n\tvec3 direction;\n\tbool visible;\n};\nstruct ReflectedLight {\n\tvec3 directDiffuse;\n\tvec3 directSpecular;\n\tvec3 indirectDiffuse;\n\tvec3 indirectSpecular;\n};\nstruct GeometricContext {\n\tvec3 position;\n\tvec3 normal;\n\tvec3 viewDir;\n#ifdef CLEARCOAT\n\tvec3 clearcoatNormal;\n#endif\n};\nvec3 transformDirection( in vec3 dir, in mat4 matrix ) {\n\treturn normalize( ( matrix * vec4( dir, 0.0 ) ).xyz );\n}\nvec3 inverseTransformDirection( in vec3 dir, in mat4 matrix ) {\n\treturn normalize( ( vec4( dir, 0.0 ) * matrix ).xyz );\n}\nvec3 projectOnPlane(in vec3 point, in vec3 pointOnPlane, in vec3 planeNormal ) {\n\tfloat distance = dot( planeNormal, point - pointOnPlane );\n\treturn - distance * planeNormal + point;\n}\nfloat sideOfPlane( in vec3 point, in vec3 pointOnPlane, in vec3 planeNormal ) {\n\treturn sign( dot( point - pointOnPlane, planeNormal ) );\n}\nvec3 linePlaneIntersect( in vec3 pointOnLine, in vec3 lineDirection, in vec3 pointOnPlane, in vec3 planeNormal ) {\n\treturn lineDirection * ( dot( planeNormal, pointOnPlane - pointOnLine ) / dot( planeNormal, lineDirection ) ) + pointOnLine;\n}\nmat3 transposeMat3( const in mat3 m ) {\n\tmat3 tmp;\n\ttmp[ 0 ] = vec3( m[ 0 ].x, m[ 1 ].x, m[ 2 ].x );\n\ttmp[ 1 ] = vec3( m[ 0 ].y, m[ 1 ].y, m[ 2 ].y );\n\ttmp[ 2 ] = vec3( m[ 0 ].z, m[ 1 ].z, m[ 2 ].z );\n\treturn tmp;\n}\nfloat linearToRelativeLuminance( const in vec3 color ) {\n\tvec3 weights = vec3( 0.2126, 0.7152, 0.0722 );\n\treturn dot( weights, color.rgb );\n}\nbool isPerspectiveMatrix( mat4 m ) {\n\treturn m[ 2 ][ 3 ] == - 1.0;\n}\nvec2 equirectUv( in vec3 dir ) {\n\tfloat u = atan( dir.z, dir.x ) * RECIPROCAL_PI2 + 0.5;\n\tfloat v = asin( clamp( dir.y, - 1.0, 1.0 ) ) * RECIPROCAL_PI + 0.5;\n\treturn vec2( u, v );\n}",cube_uv_reflection_fragment:"#ifdef ENVMAP_TYPE_CUBE_UV\n\t#define cubeUV_maxMipLevel 8.0\n\t#define cubeUV_minMipLevel 4.0\n\t#define cubeUV_maxTileSize 256.0\n\t#define cubeUV_minTileSize 16.0\n\tfloat getFace( vec3 direction ) {\n\t\tvec3 absDirection = abs( direction );\n\t\tfloat face = - 1.0;\n\t\tif ( absDirection.x > absDirection.z ) {\n\t\t\tif ( absDirection.x > absDirection.y )\n\t\t\t\tface = direction.x > 0.0 ? 0.0 : 3.0;\n\t\t\telse\n\t\t\t\tface = direction.y > 0.0 ? 1.0 : 4.0;\n\t\t} else {\n\t\t\tif ( absDirection.z > absDirection.y )\n\t\t\t\tface = direction.z > 0.0 ? 2.0 : 5.0;\n\t\t\telse\n\t\t\t\tface = direction.y > 0.0 ? 1.0 : 4.0;\n\t\t}\n\t\treturn face;\n\t}\n\tvec2 getUV( vec3 direction, float face ) {\n\t\tvec2 uv;\n\t\tif ( face == 0.0 ) {\n\t\t\tuv = vec2( direction.z, direction.y ) / abs( direction.x );\n\t\t} else if ( face == 1.0 ) {\n\t\t\tuv = vec2( - direction.x, - direction.z ) / abs( direction.y );\n\t\t} else if ( face == 2.0 ) {\n\t\t\tuv = vec2( - direction.x, direction.y ) / abs( direction.z );\n\t\t} else if ( face == 3.0 ) {\n\t\t\tuv = vec2( - direction.z, direction.y ) / abs( direction.x );\n\t\t} else if ( face == 4.0 ) {\n\t\t\tuv = vec2( - direction.x, direction.z ) / abs( direction.y );\n\t\t} else {\n\t\t\tuv = vec2( direction.x, direction.y ) / abs( direction.z );\n\t\t}\n\t\treturn 0.5 * ( uv + 1.0 );\n\t}\n\tvec3 bilinearCubeUV( sampler2D envMap, vec3 direction, float mipInt ) {\n\t\tfloat face = getFace( direction );\n\t\tfloat filterInt = max( cubeUV_minMipLevel - mipInt, 0.0 );\n\t\tmipInt = max( mipInt, cubeUV_minMipLevel );\n\t\tfloat faceSize = exp2( mipInt );\n\t\tfloat texelSize = 1.0 / ( 3.0 * cubeUV_maxTileSize );\n\t\tvec2 uv = getUV( direction, face ) * ( faceSize - 1.0 );\n\t\tvec2 f = fract( uv );\n\t\tuv += 0.5 - f;\n\t\tif ( face > 2.0 ) {\n\t\t\tuv.y += faceSize;\n\t\t\tface -= 3.0;\n\t\t}\n\t\tuv.x += face * faceSize;\n\t\tif ( mipInt < cubeUV_maxMipLevel ) {\n\t\t\tuv.y += 2.0 * cubeUV_maxTileSize;\n\t\t}\n\t\tuv.y += filterInt * 2.0 * cubeUV_minTileSize;\n\t\tuv.x += 3.0 * max( 0.0, cubeUV_maxTileSize - 2.0 * faceSize );\n\t\tuv *= texelSize;\n\t\tvec3 tl = envMapTexelToLinear( texture2D( envMap, uv ) ).rgb;\n\t\tuv.x += texelSize;\n\t\tvec3 tr = envMapTexelToLinear( texture2D( envMap, uv ) ).rgb;\n\t\tuv.y += texelSize;\n\t\tvec3 br = envMapTexelToLinear( texture2D( envMap, uv ) ).rgb;\n\t\tuv.x -= texelSize;\n\t\tvec3 bl = envMapTexelToLinear( texture2D( envMap, uv ) ).rgb;\n\t\tvec3 tm = mix( tl, tr, f.x );\n\t\tvec3 bm = mix( bl, br, f.x );\n\t\treturn mix( tm, bm, f.y );\n\t}\n\t#define r0 1.0\n\t#define v0 0.339\n\t#define m0 - 2.0\n\t#define r1 0.8\n\t#define v1 0.276\n\t#define m1 - 1.0\n\t#define r4 0.4\n\t#define v4 0.046\n\t#define m4 2.0\n\t#define r5 0.305\n\t#define v5 0.016\n\t#define m5 3.0\n\t#define r6 0.21\n\t#define v6 0.0038\n\t#define m6 4.0\n\tfloat roughnessToMip( float roughness ) {\n\t\tfloat mip = 0.0;\n\t\tif ( roughness >= r1 ) {\n\t\t\tmip = ( r0 - roughness ) * ( m1 - m0 ) / ( r0 - r1 ) + m0;\n\t\t} else if ( roughness >= r4 ) {\n\t\t\tmip = ( r1 - roughness ) * ( m4 - m1 ) / ( r1 - r4 ) + m1;\n\t\t} else if ( roughness >= r5 ) {\n\t\t\tmip = ( r4 - roughness ) * ( m5 - m4 ) / ( r4 - r5 ) + m4;\n\t\t} else if ( roughness >= r6 ) {\n\t\t\tmip = ( r5 - roughness ) * ( m6 - m5 ) / ( r5 - r6 ) + m5;\n\t\t} else {\n\t\t\tmip = - 2.0 * log2( 1.16 * roughness );\t\t}\n\t\treturn mip;\n\t}\n\tvec4 textureCubeUV( sampler2D envMap, vec3 sampleDir, float roughness ) {\n\t\tfloat mip = clamp( roughnessToMip( roughness ), m0, cubeUV_maxMipLevel );\n\t\tfloat mipF = fract( mip );\n\t\tfloat mipInt = floor( mip );\n\t\tvec3 color0 = bilinearCubeUV( envMap, sampleDir, mipInt );\n\t\tif ( mipF == 0.0 ) {\n\t\t\treturn vec4( color0, 1.0 );\n\t\t} else {\n\t\t\tvec3 color1 = bilinearCubeUV( envMap, sampleDir, mipInt + 1.0 );\n\t\t\treturn vec4( mix( color0, color1, mipF ), 1.0 );\n\t\t}\n\t}\n#endif",defaultnormal_vertex:"vec3 transformedNormal = objectNormal;\n#ifdef USE_INSTANCING\n\tmat3 m = mat3( instanceMatrix );\n\ttransformedNormal /= vec3( dot( m[ 0 ], m[ 0 ] ), dot( m[ 1 ], m[ 1 ] ), dot( m[ 2 ], m[ 2 ] ) );\n\ttransformedNormal = m * transformedNormal;\n#endif\ntransformedNormal = normalMatrix * transformedNormal;\n#ifdef FLIP_SIDED\n\ttransformedNormal = - transformedNormal;\n#endif\n#ifdef USE_TANGENT\n\tvec3 transformedTangent = ( modelViewMatrix * vec4( objectTangent, 0.0 ) ).xyz;\n\t#ifdef FLIP_SIDED\n\t\ttransformedTangent = - transformedTangent;\n\t#endif\n#endif",displacementmap_pars_vertex:"#ifdef USE_DISPLACEMENTMAP\n\tuniform sampler2D displacementMap;\n\tuniform float displacementScale;\n\tuniform float displacementBias;\n#endif",displacementmap_vertex:"#ifdef USE_DISPLACEMENTMAP\n\ttransformed += normalize( objectNormal ) * ( texture2D( displacementMap, vUv ).x * displacementScale + displacementBias );\n#endif",emissivemap_fragment:"#ifdef USE_EMISSIVEMAP\n\tvec4 emissiveColor = texture2D( emissiveMap, vUv );\n\temissiveColor.rgb = emissiveMapTexelToLinear( emissiveColor ).rgb;\n\ttotalEmissiveRadiance *= emissiveColor.rgb;\n#endif",emissivemap_pars_fragment:"#ifdef USE_EMISSIVEMAP\n\tuniform sampler2D emissiveMap;\n#endif",encodings_fragment:"gl_FragColor = linearToOutputTexel( gl_FragColor );",encodings_pars_fragment:"\nvec4 LinearToLinear( in vec4 value ) {\n\treturn value;\n}\nvec4 GammaToLinear( in vec4 value, in float gammaFactor ) {\n\treturn vec4( pow( value.rgb, vec3( gammaFactor ) ), value.a );\n}\nvec4 LinearToGamma( in vec4 value, in float gammaFactor ) {\n\treturn vec4( pow( value.rgb, vec3( 1.0 / gammaFactor ) ), value.a );\n}\nvec4 sRGBToLinear( in vec4 value ) {\n\treturn vec4( mix( pow( value.rgb * 0.9478672986 + vec3( 0.0521327014 ), vec3( 2.4 ) ), value.rgb * 0.0773993808, vec3( lessThanEqual( value.rgb, vec3( 0.04045 ) ) ) ), value.a );\n}\nvec4 LinearTosRGB( in vec4 value ) {\n\treturn vec4( mix( pow( value.rgb, vec3( 0.41666 ) ) * 1.055 - vec3( 0.055 ), value.rgb * 12.92, vec3( lessThanEqual( value.rgb, vec3( 0.0031308 ) ) ) ), value.a );\n}\nvec4 RGBEToLinear( in vec4 value ) {\n\treturn vec4( value.rgb * exp2( value.a * 255.0 - 128.0 ), 1.0 );\n}\nvec4 LinearToRGBE( in vec4 value ) {\n\tfloat maxComponent = max( max( value.r, value.g ), value.b );\n\tfloat fExp = clamp( ceil( log2( maxComponent ) ), -128.0, 127.0 );\n\treturn vec4( value.rgb / exp2( fExp ), ( fExp + 128.0 ) / 255.0 );\n}\nvec4 RGBMToLinear( in vec4 value, in float maxRange ) {\n\treturn vec4( value.rgb * value.a * maxRange, 1.0 );\n}\nvec4 LinearToRGBM( in vec4 value, in float maxRange ) {\n\tfloat maxRGB = max( value.r, max( value.g, value.b ) );\n\tfloat M = clamp( maxRGB / maxRange, 0.0, 1.0 );\n\tM = ceil( M * 255.0 ) / 255.0;\n\treturn vec4( value.rgb / ( M * maxRange ), M );\n}\nvec4 RGBDToLinear( in vec4 value, in float maxRange ) {\n\treturn vec4( value.rgb * ( ( maxRange / 255.0 ) / value.a ), 1.0 );\n}\nvec4 LinearToRGBD( in vec4 value, in float maxRange ) {\n\tfloat maxRGB = max( value.r, max( value.g, value.b ) );\n\tfloat D = max( maxRange / maxRGB, 1.0 );\n\tD = clamp( floor( D ) / 255.0, 0.0, 1.0 );\n\treturn vec4( value.rgb * ( D * ( 255.0 / maxRange ) ), D );\n}\nconst mat3 cLogLuvM = mat3( 0.2209, 0.3390, 0.4184, 0.1138, 0.6780, 0.7319, 0.0102, 0.1130, 0.2969 );\nvec4 LinearToLogLuv( in vec4 value ) {\n\tvec3 Xp_Y_XYZp = cLogLuvM * value.rgb;\n\tXp_Y_XYZp = max( Xp_Y_XYZp, vec3( 1e-6, 1e-6, 1e-6 ) );\n\tvec4 vResult;\n\tvResult.xy = Xp_Y_XYZp.xy / Xp_Y_XYZp.z;\n\tfloat Le = 2.0 * log2(Xp_Y_XYZp.y) + 127.0;\n\tvResult.w = fract( Le );\n\tvResult.z = ( Le - ( floor( vResult.w * 255.0 ) ) / 255.0 ) / 255.0;\n\treturn vResult;\n}\nconst mat3 cLogLuvInverseM = mat3( 6.0014, -2.7008, -1.7996, -1.3320, 3.1029, -5.7721, 0.3008, -1.0882, 5.6268 );\nvec4 LogLuvToLinear( in vec4 value ) {\n\tfloat Le = value.z * 255.0 + value.w;\n\tvec3 Xp_Y_XYZp;\n\tXp_Y_XYZp.y = exp2( ( Le - 127.0 ) / 2.0 );\n\tXp_Y_XYZp.z = Xp_Y_XYZp.y / value.y;\n\tXp_Y_XYZp.x = value.x * Xp_Y_XYZp.z;\n\tvec3 vRGB = cLogLuvInverseM * Xp_Y_XYZp.rgb;\n\treturn vec4( max( vRGB, 0.0 ), 1.0 );\n}",envmap_fragment:"#ifdef USE_ENVMAP\n\t#ifdef ENV_WORLDPOS\n\t\tvec3 cameraToFrag;\n\t\tif ( isOrthographic ) {\n\t\t\tcameraToFrag = normalize( vec3( - viewMatrix[ 0 ][ 2 ], - viewMatrix[ 1 ][ 2 ], - viewMatrix[ 2 ][ 2 ] ) );\n\t\t} else {\n\t\t\tcameraToFrag = normalize( vWorldPosition - cameraPosition );\n\t\t}\n\t\tvec3 worldNormal = inverseTransformDirection( normal, viewMatrix );\n\t\t#ifdef ENVMAP_MODE_REFLECTION\n\t\t\tvec3 reflectVec = reflect( cameraToFrag, worldNormal );\n\t\t#else\n\t\t\tvec3 reflectVec = refract( cameraToFrag, worldNormal, refractionRatio );\n\t\t#endif\n\t#else\n\t\tvec3 reflectVec = vReflect;\n\t#endif\n\t#ifdef ENVMAP_TYPE_CUBE\n\t\tvec4 envColor = textureCube( envMap, vec3( flipEnvMap * reflectVec.x, reflectVec.yz ) );\n\t#elif defined( ENVMAP_TYPE_CUBE_UV )\n\t\tvec4 envColor = textureCubeUV( envMap, reflectVec, 0.0 );\n\t#else\n\t\tvec4 envColor = vec4( 0.0 );\n\t#endif\n\t#ifndef ENVMAP_TYPE_CUBE_UV\n\t\tenvColor = envMapTexelToLinear( envColor );\n\t#endif\n\t#ifdef ENVMAP_BLENDING_MULTIPLY\n\t\toutgoingLight = mix( outgoingLight, outgoingLight * envColor.xyz, specularStrength * reflectivity );\n\t#elif defined( ENVMAP_BLENDING_MIX )\n\t\toutgoingLight = mix( outgoingLight, envColor.xyz, specularStrength * reflectivity );\n\t#elif defined( ENVMAP_BLENDING_ADD )\n\t\toutgoingLight += envColor.xyz * specularStrength * reflectivity;\n\t#endif\n#endif",envmap_common_pars_fragment:"#ifdef USE_ENVMAP\n\tuniform float envMapIntensity;\n\tuniform float flipEnvMap;\n\tuniform int maxMipLevel;\n\t#ifdef ENVMAP_TYPE_CUBE\n\t\tuniform samplerCube envMap;\n\t#else\n\t\tuniform sampler2D envMap;\n\t#endif\n\t\n#endif",envmap_pars_fragment:"#ifdef USE_ENVMAP\n\tuniform float reflectivity;\n\t#if defined( USE_BUMPMAP ) || defined( USE_NORMALMAP ) || defined( PHONG )\n\t\t#define ENV_WORLDPOS\n\t#endif\n\t#ifdef ENV_WORLDPOS\n\t\tvarying vec3 vWorldPosition;\n\t\tuniform float refractionRatio;\n\t#else\n\t\tvarying vec3 vReflect;\n\t#endif\n#endif",envmap_pars_vertex:"#ifdef USE_ENVMAP\n\t#if defined( USE_BUMPMAP ) || defined( USE_NORMALMAP ) ||defined( PHONG )\n\t\t#define ENV_WORLDPOS\n\t#endif\n\t#ifdef ENV_WORLDPOS\n\t\t\n\t\tvarying vec3 vWorldPosition;\n\t#else\n\t\tvarying vec3 vReflect;\n\t\tuniform float refractionRatio;\n\t#endif\n#endif",envmap_physical_pars_fragment:"#if defined( USE_ENVMAP )\n\t#ifdef ENVMAP_MODE_REFRACTION\n\t\tuniform float refractionRatio;\n\t#endif\n\tvec3 getLightProbeIndirectIrradiance( const in GeometricContext geometry, const in int maxMIPLevel ) {\n\t\tvec3 worldNormal = inverseTransformDirection( geometry.normal, viewMatrix );\n\t\t#ifdef ENVMAP_TYPE_CUBE\n\t\t\tvec3 queryVec = vec3( flipEnvMap * worldNormal.x, worldNormal.yz );\n\t\t\t#ifdef TEXTURE_LOD_EXT\n\t\t\t\tvec4 envMapColor = textureCubeLodEXT( envMap, queryVec, float( maxMIPLevel ) );\n\t\t\t#else\n\t\t\t\tvec4 envMapColor = textureCube( envMap, queryVec, float( maxMIPLevel ) );\n\t\t\t#endif\n\t\t\tenvMapColor.rgb = envMapTexelToLinear( envMapColor ).rgb;\n\t\t#elif defined( ENVMAP_TYPE_CUBE_UV )\n\t\t\tvec4 envMapColor = textureCubeUV( envMap, worldNormal, 1.0 );\n\t\t#else\n\t\t\tvec4 envMapColor = vec4( 0.0 );\n\t\t#endif\n\t\treturn PI * envMapColor.rgb * envMapIntensity;\n\t}\n\tfloat getSpecularMIPLevel( const in float roughness, const in int maxMIPLevel ) {\n\t\tfloat maxMIPLevelScalar = float( maxMIPLevel );\n\t\tfloat sigma = PI * roughness * roughness / ( 1.0 + roughness );\n\t\tfloat desiredMIPLevel = maxMIPLevelScalar + log2( sigma );\n\t\treturn clamp( desiredMIPLevel, 0.0, maxMIPLevelScalar );\n\t}\n\tvec3 getLightProbeIndirectRadiance( const in vec3 viewDir, const in vec3 normal, const in float roughness, const in int maxMIPLevel ) {\n\t\t#ifdef ENVMAP_MODE_REFLECTION\n\t\t\tvec3 reflectVec = reflect( -viewDir, normal );\n\t\t\treflectVec = normalize( mix( reflectVec, normal, roughness * roughness) );\n\t\t#else\n\t\t\tvec3 reflectVec = refract( -viewDir, normal, refractionRatio );\n\t\t#endif\n\t\treflectVec = inverseTransformDirection( reflectVec, viewMatrix );\n\t\tfloat specularMIPLevel = getSpecularMIPLevel( roughness, maxMIPLevel );\n\t\t#ifdef ENVMAP_TYPE_CUBE\n\t\t\tvec3 queryReflectVec = vec3( flipEnvMap * reflectVec.x, reflectVec.yz );\n\t\t\t#ifdef TEXTURE_LOD_EXT\n\t\t\t\tvec4 envMapColor = textureCubeLodEXT( envMap, queryReflectVec, specularMIPLevel );\n\t\t\t#else\n\t\t\t\tvec4 envMapColor = textureCube( envMap, queryReflectVec, specularMIPLevel );\n\t\t\t#endif\n\t\t\tenvMapColor.rgb = envMapTexelToLinear( envMapColor ).rgb;\n\t\t#elif defined( ENVMAP_TYPE_CUBE_UV )\n\t\t\tvec4 envMapColor = textureCubeUV( envMap, reflectVec, roughness );\n\t\t#endif\n\t\treturn envMapColor.rgb * envMapIntensity;\n\t}\n#endif",envmap_vertex:"#ifdef USE_ENVMAP\n\t#ifdef ENV_WORLDPOS\n\t\tvWorldPosition = worldPosition.xyz;\n\t#else\n\t\tvec3 cameraToVertex;\n\t\tif ( isOrthographic ) {\n\t\t\tcameraToVertex = normalize( vec3( - viewMatrix[ 0 ][ 2 ], - viewMatrix[ 1 ][ 2 ], - viewMatrix[ 2 ][ 2 ] ) );\n\t\t} else {\n\t\t\tcameraToVertex = normalize( worldPosition.xyz - cameraPosition );\n\t\t}\n\t\tvec3 worldNormal = inverseTransformDirection( transformedNormal, viewMatrix );\n\t\t#ifdef ENVMAP_MODE_REFLECTION\n\t\t\tvReflect = reflect( cameraToVertex, worldNormal );\n\t\t#else\n\t\t\tvReflect = refract( cameraToVertex, worldNormal, refractionRatio );\n\t\t#endif\n\t#endif\n#endif",fog_vertex:"#ifdef USE_FOG\n\tfogDepth = - mvPosition.z;\n#endif",fog_pars_vertex:"#ifdef USE_FOG\n\tvarying float fogDepth;\n#endif",fog_fragment:"#ifdef USE_FOG\n\t#ifdef FOG_EXP2\n\t\tfloat fogFactor = 1.0 - exp( - fogDensity * fogDensity * fogDepth * fogDepth );\n\t#else\n\t\tfloat fogFactor = smoothstep( fogNear, fogFar, fogDepth );\n\t#endif\n\tgl_FragColor.rgb = mix( gl_FragColor.rgb, fogColor, fogFactor );\n#endif",fog_pars_fragment:"#ifdef USE_FOG\n\tuniform vec3 fogColor;\n\tvarying float fogDepth;\n\t#ifdef FOG_EXP2\n\t\tuniform float fogDensity;\n\t#else\n\t\tuniform float fogNear;\n\t\tuniform float fogFar;\n\t#endif\n#endif",gradientmap_pars_fragment:"#ifdef USE_GRADIENTMAP\n\tuniform sampler2D gradientMap;\n#endif\nvec3 getGradientIrradiance( vec3 normal, vec3 lightDirection ) {\n\tfloat dotNL = dot( normal, lightDirection );\n\tvec2 coord = vec2( dotNL * 0.5 + 0.5, 0.0 );\n\t#ifdef USE_GRADIENTMAP\n\t\treturn texture2D( gradientMap, coord ).rgb;\n\t#else\n\t\treturn ( coord.x < 0.7 ) ? vec3( 0.7 ) : vec3( 1.0 );\n\t#endif\n}",lightmap_fragment:"#ifdef USE_LIGHTMAP\n\tvec4 lightMapTexel= texture2D( lightMap, vUv2 );\n\treflectedLight.indirectDiffuse += PI * lightMapTexelToLinear( lightMapTexel ).rgb * lightMapIntensity;\n#endif",lightmap_pars_fragment:"#ifdef USE_LIGHTMAP\n\tuniform sampler2D lightMap;\n\tuniform float lightMapIntensity;\n#endif",lights_lambert_vertex:"vec3 diffuse = vec3( 1.0 );\nGeometricContext geometry;\ngeometry.position = mvPosition.xyz;\ngeometry.normal = normalize( transformedNormal );\ngeometry.viewDir = ( isOrthographic ) ? vec3( 0, 0, 1 ) : normalize( -mvPosition.xyz );\nGeometricContext backGeometry;\nbackGeometry.position = geometry.position;\nbackGeometry.normal = -geometry.normal;\nbackGeometry.viewDir = geometry.viewDir;\nvLightFront = vec3( 0.0 );\nvIndirectFront = vec3( 0.0 );\n#ifdef DOUBLE_SIDED\n\tvLightBack = vec3( 0.0 );\n\tvIndirectBack = vec3( 0.0 );\n#endif\nIncidentLight directLight;\nfloat dotNL;\nvec3 directLightColor_Diffuse;\nvIndirectFront += getAmbientLightIrradiance( ambientLightColor );\nvIndirectFront += getLightProbeIrradiance( lightProbe, geometry );\n#ifdef DOUBLE_SIDED\n\tvIndirectBack += getAmbientLightIrradiance( ambientLightColor );\n\tvIndirectBack += getLightProbeIrradiance( lightProbe, backGeometry );\n#endif\n#if NUM_POINT_LIGHTS > 0\n\t#pragma unroll_loop_start\n\tfor ( int i = 0; i < NUM_POINT_LIGHTS; i ++ ) {\n\t\tgetPointDirectLightIrradiance( pointLights[ i ], geometry, directLight );\n\t\tdotNL = dot( geometry.normal, directLight.direction );\n\t\tdirectLightColor_Diffuse = PI * directLight.color;\n\t\tvLightFront += saturate( dotNL ) * directLightColor_Diffuse;\n\t\t#ifdef DOUBLE_SIDED\n\t\t\tvLightBack += saturate( -dotNL ) * directLightColor_Diffuse;\n\t\t#endif\n\t}\n\t#pragma unroll_loop_end\n#endif\n#if NUM_SPOT_LIGHTS > 0\n\t#pragma unroll_loop_start\n\tfor ( int i = 0; i < NUM_SPOT_LIGHTS; i ++ ) {\n\t\tgetSpotDirectLightIrradiance( spotLights[ i ], geometry, directLight );\n\t\tdotNL = dot( geometry.normal, directLight.direction );\n\t\tdirectLightColor_Diffuse = PI * directLight.color;\n\t\tvLightFront += saturate( dotNL ) * directLightColor_Diffuse;\n\t\t#ifdef DOUBLE_SIDED\n\t\t\tvLightBack += saturate( -dotNL ) * directLightColor_Diffuse;\n\t\t#endif\n\t}\n\t#pragma unroll_loop_end\n#endif\n#if NUM_DIR_LIGHTS > 0\n\t#pragma unroll_loop_start\n\tfor ( int i = 0; i < NUM_DIR_LIGHTS; i ++ ) {\n\t\tgetDirectionalDirectLightIrradiance( directionalLights[ i ], geometry, directLight );\n\t\tdotNL = dot( geometry.normal, directLight.direction );\n\t\tdirectLightColor_Diffuse = PI * directLight.color;\n\t\tvLightFront += saturate( dotNL ) * directLightColor_Diffuse;\n\t\t#ifdef DOUBLE_SIDED\n\t\t\tvLightBack += saturate( -dotNL ) * directLightColor_Diffuse;\n\t\t#endif\n\t}\n\t#pragma unroll_loop_end\n#endif\n#if NUM_HEMI_LIGHTS > 0\n\t#pragma unroll_loop_start\n\tfor ( int i = 0; i < NUM_HEMI_LIGHTS; i ++ ) {\n\t\tvIndirectFront += getHemisphereLightIrradiance( hemisphereLights[ i ], geometry );\n\t\t#ifdef DOUBLE_SIDED\n\t\t\tvIndirectBack += getHemisphereLightIrradiance( hemisphereLights[ i ], backGeometry );\n\t\t#endif\n\t}\n\t#pragma unroll_loop_end\n#endif",lights_pars_begin:"uniform bool receiveShadow;\nuniform vec3 ambientLightColor;\nuniform vec3 lightProbe[ 9 ];\nvec3 shGetIrradianceAt( in vec3 normal, in vec3 shCoefficients[ 9 ] ) {\n\tfloat x = normal.x, y = normal.y, z = normal.z;\n\tvec3 result = shCoefficients[ 0 ] * 0.886227;\n\tresult += shCoefficients[ 1 ] * 2.0 * 0.511664 * y;\n\tresult += shCoefficients[ 2 ] * 2.0 * 0.511664 * z;\n\tresult += shCoefficients[ 3 ] * 2.0 * 0.511664 * x;\n\tresult += shCoefficients[ 4 ] * 2.0 * 0.429043 * x * y;\n\tresult += shCoefficients[ 5 ] * 2.0 * 0.429043 * y * z;\n\tresult += shCoefficients[ 6 ] * ( 0.743125 * z * z - 0.247708 );\n\tresult += shCoefficients[ 7 ] * 2.0 * 0.429043 * x * z;\n\tresult += shCoefficients[ 8 ] * 0.429043 * ( x * x - y * y );\n\treturn result;\n}\nvec3 getLightProbeIrradiance( const in vec3 lightProbe[ 9 ], const in GeometricContext geometry ) {\n\tvec3 worldNormal = inverseTransformDirection( geometry.normal, viewMatrix );\n\tvec3 irradiance = shGetIrradianceAt( worldNormal, lightProbe );\n\treturn irradiance;\n}\nvec3 getAmbientLightIrradiance( const in vec3 ambientLightColor ) {\n\tvec3 irradiance = ambientLightColor;\n\t#ifndef PHYSICALLY_CORRECT_LIGHTS\n\t\tirradiance *= PI;\n\t#endif\n\treturn irradiance;\n}\n#if NUM_DIR_LIGHTS > 0\n\tstruct DirectionalLight {\n\t\tvec3 direction;\n\t\tvec3 color;\n\t};\n\tuniform DirectionalLight directionalLights[ NUM_DIR_LIGHTS ];\n\tvoid getDirectionalDirectLightIrradiance( const in DirectionalLight directionalLight, const in GeometricContext geometry, out IncidentLight directLight ) {\n\t\tdirectLight.color = directionalLight.color;\n\t\tdirectLight.direction = directionalLight.direction;\n\t\tdirectLight.visible = true;\n\t}\n#endif\n#if NUM_POINT_LIGHTS > 0\n\tstruct PointLight {\n\t\tvec3 position;\n\t\tvec3 color;\n\t\tfloat distance;\n\t\tfloat decay;\n\t};\n\tuniform PointLight pointLights[ NUM_POINT_LIGHTS ];\n\tvoid getPointDirectLightIrradiance( const in PointLight pointLight, const in GeometricContext geometry, out IncidentLight directLight ) {\n\t\tvec3 lVector = pointLight.position - geometry.position;\n\t\tdirectLight.direction = normalize( lVector );\n\t\tfloat lightDistance = length( lVector );\n\t\tdirectLight.color = pointLight.color;\n\t\tdirectLight.color *= punctualLightIntensityToIrradianceFactor( lightDistance, pointLight.distance, pointLight.decay );\n\t\tdirectLight.visible = ( directLight.color != vec3( 0.0 ) );\n\t}\n#endif\n#if NUM_SPOT_LIGHTS > 0\n\tstruct SpotLight {\n\t\tvec3 position;\n\t\tvec3 direction;\n\t\tvec3 color;\n\t\tfloat distance;\n\t\tfloat decay;\n\t\tfloat coneCos;\n\t\tfloat penumbraCos;\n\t};\n\tuniform SpotLight spotLights[ NUM_SPOT_LIGHTS ];\n\tvoid getSpotDirectLightIrradiance( const in SpotLight spotLight, const in GeometricContext geometry, out IncidentLight directLight ) {\n\t\tvec3 lVector = spotLight.position - geometry.position;\n\t\tdirectLight.direction = normalize( lVector );\n\t\tfloat lightDistance = length( lVector );\n\t\tfloat angleCos = dot( directLight.direction, spotLight.direction );\n\t\tif ( angleCos > spotLight.coneCos ) {\n\t\t\tfloat spotEffect = smoothstep( spotLight.coneCos, spotLight.penumbraCos, angleCos );\n\t\t\tdirectLight.color = spotLight.color;\n\t\t\tdirectLight.color *= spotEffect * punctualLightIntensityToIrradianceFactor( lightDistance, spotLight.distance, spotLight.decay );\n\t\t\tdirectLight.visible = true;\n\t\t} else {\n\t\t\tdirectLight.color = vec3( 0.0 );\n\t\t\tdirectLight.visible = false;\n\t\t}\n\t}\n#endif\n#if NUM_RECT_AREA_LIGHTS > 0\n\tstruct RectAreaLight {\n\t\tvec3 color;\n\t\tvec3 position;\n\t\tvec3 halfWidth;\n\t\tvec3 halfHeight;\n\t};\n\tuniform sampler2D ltc_1;\tuniform sampler2D ltc_2;\n\tuniform RectAreaLight rectAreaLights[ NUM_RECT_AREA_LIGHTS ];\n#endif\n#if NUM_HEMI_LIGHTS > 0\n\tstruct HemisphereLight {\n\t\tvec3 direction;\n\t\tvec3 skyColor;\n\t\tvec3 groundColor;\n\t};\n\tuniform HemisphereLight hemisphereLights[ NUM_HEMI_LIGHTS ];\n\tvec3 getHemisphereLightIrradiance( const in HemisphereLight hemiLight, const in GeometricContext geometry ) {\n\t\tfloat dotNL = dot( geometry.normal, hemiLight.direction );\n\t\tfloat hemiDiffuseWeight = 0.5 * dotNL + 0.5;\n\t\tvec3 irradiance = mix( hemiLight.groundColor, hemiLight.skyColor, hemiDiffuseWeight );\n\t\t#ifndef PHYSICALLY_CORRECT_LIGHTS\n\t\t\tirradiance *= PI;\n\t\t#endif\n\t\treturn irradiance;\n\t}\n#endif",lights_toon_fragment:"ToonMaterial material;\nmaterial.diffuseColor = diffuseColor.rgb;",lights_toon_pars_fragment:"varying vec3 vViewPosition;\n#ifndef FLAT_SHADED\n\tvarying vec3 vNormal;\n#endif\nstruct ToonMaterial {\n\tvec3 diffuseColor;\n};\nvoid RE_Direct_Toon( const in IncidentLight directLight, const in GeometricContext geometry, const in ToonMaterial material, inout ReflectedLight reflectedLight ) {\n\tvec3 irradiance = getGradientIrradiance( geometry.normal, directLight.direction ) * directLight.color;\n\t#ifndef PHYSICALLY_CORRECT_LIGHTS\n\t\tirradiance *= PI;\n\t#endif\n\treflectedLight.directDiffuse += irradiance * BRDF_Diffuse_Lambert( material.diffuseColor );\n}\nvoid RE_IndirectDiffuse_Toon( const in vec3 irradiance, const in GeometricContext geometry, const in ToonMaterial material, inout ReflectedLight reflectedLight ) {\n\treflectedLight.indirectDiffuse += irradiance * BRDF_Diffuse_Lambert( material.diffuseColor );\n}\n#define RE_Direct\t\t\t\tRE_Direct_Toon\n#define RE_IndirectDiffuse\t\tRE_IndirectDiffuse_Toon\n#define Material_LightProbeLOD( material )\t(0)",lights_phong_fragment:"BlinnPhongMaterial material;\nmaterial.diffuseColor = diffuseColor.rgb;\nmaterial.specularColor = specular;\nmaterial.specularShininess = shininess;\nmaterial.specularStrength = specularStrength;",lights_phong_pars_fragment:"varying vec3 vViewPosition;\n#ifndef FLAT_SHADED\n\tvarying vec3 vNormal;\n#endif\nstruct BlinnPhongMaterial {\n\tvec3 diffuseColor;\n\tvec3 specularColor;\n\tfloat specularShininess;\n\tfloat specularStrength;\n};\nvoid RE_Direct_BlinnPhong( const in IncidentLight directLight, const in GeometricContext geometry, const in BlinnPhongMaterial material, inout ReflectedLight reflectedLight ) {\n\tfloat dotNL = saturate( dot( geometry.normal, directLight.direction ) );\n\tvec3 irradiance = dotNL * directLight.color;\n\t#ifndef PHYSICALLY_CORRECT_LIGHTS\n\t\tirradiance *= PI;\n\t#endif\n\treflectedLight.directDiffuse += irradiance * BRDF_Diffuse_Lambert( material.diffuseColor );\n\treflectedLight.directSpecular += irradiance * BRDF_Specular_BlinnPhong( directLight, geometry, material.specularColor, material.specularShininess ) * material.specularStrength;\n}\nvoid RE_IndirectDiffuse_BlinnPhong( const in vec3 irradiance, const in GeometricContext geometry, const in BlinnPhongMaterial material, inout ReflectedLight reflectedLight ) {\n\treflectedLight.indirectDiffuse += irradiance * BRDF_Diffuse_Lambert( material.diffuseColor );\n}\n#define RE_Direct\t\t\t\tRE_Direct_BlinnPhong\n#define RE_IndirectDiffuse\t\tRE_IndirectDiffuse_BlinnPhong\n#define Material_LightProbeLOD( material )\t(0)",lights_physical_fragment:"PhysicalMaterial material;\nmaterial.diffuseColor = diffuseColor.rgb * ( 1.0 - metalnessFactor );\nvec3 dxy = max( abs( dFdx( geometryNormal ) ), abs( dFdy( geometryNormal ) ) );\nfloat geometryRoughness = max( max( dxy.x, dxy.y ), dxy.z );\nmaterial.specularRoughness = max( roughnessFactor, 0.0525 );material.specularRoughness += geometryRoughness;\nmaterial.specularRoughness = min( material.specularRoughness, 1.0 );\n#ifdef REFLECTIVITY\n\tmaterial.specularColor = mix( vec3( MAXIMUM_SPECULAR_COEFFICIENT * pow2( reflectivity ) ), diffuseColor.rgb, metalnessFactor );\n#else\n\tmaterial.specularColor = mix( vec3( DEFAULT_SPECULAR_COEFFICIENT ), diffuseColor.rgb, metalnessFactor );\n#endif\n#ifdef CLEARCOAT\n\tmaterial.clearcoat = clearcoat;\n\tmaterial.clearcoatRoughness = clearcoatRoughness;\n\t#ifdef USE_CLEARCOATMAP\n\t\tmaterial.clearcoat *= texture2D( clearcoatMap, vUv ).x;\n\t#endif\n\t#ifdef USE_CLEARCOAT_ROUGHNESSMAP\n\t\tmaterial.clearcoatRoughness *= texture2D( clearcoatRoughnessMap, vUv ).y;\n\t#endif\n\tmaterial.clearcoat = saturate( material.clearcoat );\tmaterial.clearcoatRoughness = max( material.clearcoatRoughness, 0.0525 );\n\tmaterial.clearcoatRoughness += geometryRoughness;\n\tmaterial.clearcoatRoughness = min( material.clearcoatRoughness, 1.0 );\n#endif\n#ifdef USE_SHEEN\n\tmaterial.sheenColor = sheen;\n#endif",lights_physical_pars_fragment:"struct PhysicalMaterial {\n\tvec3 diffuseColor;\n\tfloat specularRoughness;\n\tvec3 specularColor;\n#ifdef CLEARCOAT\n\tfloat clearcoat;\n\tfloat clearcoatRoughness;\n#endif\n#ifdef USE_SHEEN\n\tvec3 sheenColor;\n#endif\n};\n#define MAXIMUM_SPECULAR_COEFFICIENT 0.16\n#define DEFAULT_SPECULAR_COEFFICIENT 0.04\nfloat clearcoatDHRApprox( const in float roughness, const in float dotNL ) {\n\treturn DEFAULT_SPECULAR_COEFFICIENT + ( 1.0 - DEFAULT_SPECULAR_COEFFICIENT ) * ( pow( 1.0 - dotNL, 5.0 ) * pow( 1.0 - roughness, 2.0 ) );\n}\n#if NUM_RECT_AREA_LIGHTS > 0\n\tvoid RE_Direct_RectArea_Physical( const in RectAreaLight rectAreaLight, const in GeometricContext geometry, const in PhysicalMaterial material, inout ReflectedLight reflectedLight ) {\n\t\tvec3 normal = geometry.normal;\n\t\tvec3 viewDir = geometry.viewDir;\n\t\tvec3 position = geometry.position;\n\t\tvec3 lightPos = rectAreaLight.position;\n\t\tvec3 halfWidth = rectAreaLight.halfWidth;\n\t\tvec3 halfHeight = rectAreaLight.halfHeight;\n\t\tvec3 lightColor = rectAreaLight.color;\n\t\tfloat roughness = material.specularRoughness;\n\t\tvec3 rectCoords[ 4 ];\n\t\trectCoords[ 0 ] = lightPos + halfWidth - halfHeight;\t\trectCoords[ 1 ] = lightPos - halfWidth - halfHeight;\n\t\trectCoords[ 2 ] = lightPos - halfWidth + halfHeight;\n\t\trectCoords[ 3 ] = lightPos + halfWidth + halfHeight;\n\t\tvec2 uv = LTC_Uv( normal, viewDir, roughness );\n\t\tvec4 t1 = texture2D( ltc_1, uv );\n\t\tvec4 t2 = texture2D( ltc_2, uv );\n\t\tmat3 mInv = mat3(\n\t\t\tvec3( t1.x, 0, t1.y ),\n\t\t\tvec3(\t\t0, 1,\t\t0 ),\n\t\t\tvec3( t1.z, 0, t1.w )\n\t\t);\n\t\tvec3 fresnel = ( material.specularColor * t2.x + ( vec3( 1.0 ) - material.specularColor ) * t2.y );\n\t\treflectedLight.directSpecular += lightColor * fresnel * LTC_Evaluate( normal, viewDir, position, mInv, rectCoords );\n\t\treflectedLight.directDiffuse += lightColor * material.diffuseColor * LTC_Evaluate( normal, viewDir, position, mat3( 1.0 ), rectCoords );\n\t}\n#endif\nvoid RE_Direct_Physical( const in IncidentLight directLight, const in GeometricContext geometry, const in PhysicalMaterial material, inout ReflectedLight reflectedLight ) {\n\tfloat dotNL = saturate( dot( geometry.normal, directLight.direction ) );\n\tvec3 irradiance = dotNL * directLight.color;\n\t#ifndef PHYSICALLY_CORRECT_LIGHTS\n\t\tirradiance *= PI;\n\t#endif\n\t#ifdef CLEARCOAT\n\t\tfloat ccDotNL = saturate( dot( geometry.clearcoatNormal, directLight.direction ) );\n\t\tvec3 ccIrradiance = ccDotNL * directLight.color;\n\t\t#ifndef PHYSICALLY_CORRECT_LIGHTS\n\t\t\tccIrradiance *= PI;\n\t\t#endif\n\t\tfloat clearcoatDHR = material.clearcoat * clearcoatDHRApprox( material.clearcoatRoughness, ccDotNL );\n\t\treflectedLight.directSpecular += ccIrradiance * material.clearcoat * BRDF_Specular_GGX( directLight, geometry.viewDir, geometry.clearcoatNormal, vec3( DEFAULT_SPECULAR_COEFFICIENT ), material.clearcoatRoughness );\n\t#else\n\t\tfloat clearcoatDHR = 0.0;\n\t#endif\n\t#ifdef USE_SHEEN\n\t\treflectedLight.directSpecular += ( 1.0 - clearcoatDHR ) * irradiance * BRDF_Specular_Sheen(\n\t\t\tmaterial.specularRoughness,\n\t\t\tdirectLight.direction,\n\t\t\tgeometry,\n\t\t\tmaterial.sheenColor\n\t\t);\n\t#else\n\t\treflectedLight.directSpecular += ( 1.0 - clearcoatDHR ) * irradiance * BRDF_Specular_GGX( directLight, geometry.viewDir, geometry.normal, material.specularColor, material.specularRoughness);\n\t#endif\n\treflectedLight.directDiffuse += ( 1.0 - clearcoatDHR ) * irradiance * BRDF_Diffuse_Lambert( material.diffuseColor );\n}\nvoid RE_IndirectDiffuse_Physical( const in vec3 irradiance, const in GeometricContext geometry, const in PhysicalMaterial material, inout ReflectedLight reflectedLight ) {\n\treflectedLight.indirectDiffuse += irradiance * BRDF_Diffuse_Lambert( material.diffuseColor );\n}\nvoid RE_IndirectSpecular_Physical( const in vec3 radiance, const in vec3 irradiance, const in vec3 clearcoatRadiance, const in GeometricContext geometry, const in PhysicalMaterial material, inout ReflectedLight reflectedLight) {\n\t#ifdef CLEARCOAT\n\t\tfloat ccDotNV = saturate( dot( geometry.clearcoatNormal, geometry.viewDir ) );\n\t\treflectedLight.indirectSpecular += clearcoatRadiance * material.clearcoat * BRDF_Specular_GGX_Environment( geometry.viewDir, geometry.clearcoatNormal, vec3( DEFAULT_SPECULAR_COEFFICIENT ), material.clearcoatRoughness );\n\t\tfloat ccDotNL = ccDotNV;\n\t\tfloat clearcoatDHR = material.clearcoat * clearcoatDHRApprox( material.clearcoatRoughness, ccDotNL );\n\t#else\n\t\tfloat clearcoatDHR = 0.0;\n\t#endif\n\tfloat clearcoatInv = 1.0 - clearcoatDHR;\n\tvec3 singleScattering = vec3( 0.0 );\n\tvec3 multiScattering = vec3( 0.0 );\n\tvec3 cosineWeightedIrradiance = irradiance * RECIPROCAL_PI;\n\tBRDF_Specular_Multiscattering_Environment( geometry, material.specularColor, material.specularRoughness, singleScattering, multiScattering );\n\tvec3 diffuse = material.diffuseColor * ( 1.0 - ( singleScattering + multiScattering ) );\n\treflectedLight.indirectSpecular += clearcoatInv * radiance * singleScattering;\n\treflectedLight.indirectSpecular += multiScattering * cosineWeightedIrradiance;\n\treflectedLight.indirectDiffuse += diffuse * cosineWeightedIrradiance;\n}\n#define RE_Direct\t\t\t\tRE_Direct_Physical\n#define RE_Direct_RectArea\t\tRE_Direct_RectArea_Physical\n#define RE_IndirectDiffuse\t\tRE_IndirectDiffuse_Physical\n#define RE_IndirectSpecular\t\tRE_IndirectSpecular_Physical\nfloat computeSpecularOcclusion( const in float dotNV, const in float ambientOcclusion, const in float roughness ) {\n\treturn saturate( pow( dotNV + ambientOcclusion, exp2( - 16.0 * roughness - 1.0 ) ) - 1.0 + ambientOcclusion );\n}",lights_fragment_begin:"\nGeometricContext geometry;\ngeometry.position = - vViewPosition;\ngeometry.normal = normal;\ngeometry.viewDir = ( isOrthographic ) ? vec3( 0, 0, 1 ) : normalize( vViewPosition );\n#ifdef CLEARCOAT\n\tgeometry.clearcoatNormal = clearcoatNormal;\n#endif\nIncidentLight directLight;\n#if ( NUM_POINT_LIGHTS > 0 ) && defined( RE_Direct )\n\tPointLight pointLight;\n\t#if defined( USE_SHADOWMAP ) && NUM_POINT_LIGHT_SHADOWS > 0\n\tPointLightShadow pointLightShadow;\n\t#endif\n\t#pragma unroll_loop_start\n\tfor ( int i = 0; i < NUM_POINT_LIGHTS; i ++ ) {\n\t\tpointLight = pointLights[ i ];\n\t\tgetPointDirectLightIrradiance( pointLight, geometry, directLight );\n\t\t#if defined( USE_SHADOWMAP ) && ( UNROLLED_LOOP_INDEX < NUM_POINT_LIGHT_SHADOWS )\n\t\tpointLightShadow = pointLightShadows[ i ];\n\t\tdirectLight.color *= all( bvec2( directLight.visible, receiveShadow ) ) ? getPointShadow( pointShadowMap[ i ], pointLightShadow.shadowMapSize, pointLightShadow.shadowBias, pointLightShadow.shadowRadius, vPointShadowCoord[ i ], pointLightShadow.shadowCameraNear, pointLightShadow.shadowCameraFar ) : 1.0;\n\t\t#endif\n\t\tRE_Direct( directLight, geometry, material, reflectedLight );\n\t}\n\t#pragma unroll_loop_end\n#endif\n#if ( NUM_SPOT_LIGHTS > 0 ) && defined( RE_Direct )\n\tSpotLight spotLight;\n\t#if defined( USE_SHADOWMAP ) && NUM_SPOT_LIGHT_SHADOWS > 0\n\tSpotLightShadow spotLightShadow;\n\t#endif\n\t#pragma unroll_loop_start\n\tfor ( int i = 0; i < NUM_SPOT_LIGHTS; i ++ ) {\n\t\tspotLight = spotLights[ i ];\n\t\tgetSpotDirectLightIrradiance( spotLight, geometry, directLight );\n\t\t#if defined( USE_SHADOWMAP ) && ( UNROLLED_LOOP_INDEX < NUM_SPOT_LIGHT_SHADOWS )\n\t\tspotLightShadow = spotLightShadows[ i ];\n\t\tdirectLight.color *= all( bvec2( directLight.visible, receiveShadow ) ) ? getShadow( spotShadowMap[ i ], spotLightShadow.shadowMapSize, spotLightShadow.shadowBias, spotLightShadow.shadowRadius, vSpotShadowCoord[ i ] ) : 1.0;\n\t\t#endif\n\t\tRE_Direct( directLight, geometry, material, reflectedLight );\n\t}\n\t#pragma unroll_loop_end\n#endif\n#if ( NUM_DIR_LIGHTS > 0 ) && defined( RE_Direct )\n\tDirectionalLight directionalLight;\n\t#if defined( USE_SHADOWMAP ) && NUM_DIR_LIGHT_SHADOWS > 0\n\tDirectionalLightShadow directionalLightShadow;\n\t#endif\n\t#pragma unroll_loop_start\n\tfor ( int i = 0; i < NUM_DIR_LIGHTS; i ++ ) {\n\t\tdirectionalLight = directionalLights[ i ];\n\t\tgetDirectionalDirectLightIrradiance( directionalLight, geometry, directLight );\n\t\t#if defined( USE_SHADOWMAP ) && ( UNROLLED_LOOP_INDEX < NUM_DIR_LIGHT_SHADOWS )\n\t\tdirectionalLightShadow = directionalLightShadows[ i ];\n\t\tdirectLight.color *= all( bvec2( directLight.visible, receiveShadow ) ) ? getShadow( directionalShadowMap[ i ], directionalLightShadow.shadowMapSize, directionalLightShadow.shadowBias, directionalLightShadow.shadowRadius, vDirectionalShadowCoord[ i ] ) : 1.0;\n\t\t#endif\n\t\tRE_Direct( directLight, geometry, material, reflectedLight );\n\t}\n\t#pragma unroll_loop_end\n#endif\n#if ( NUM_RECT_AREA_LIGHTS > 0 ) && defined( RE_Direct_RectArea )\n\tRectAreaLight rectAreaLight;\n\t#pragma unroll_loop_start\n\tfor ( int i = 0; i < NUM_RECT_AREA_LIGHTS; i ++ ) {\n\t\trectAreaLight = rectAreaLights[ i ];\n\t\tRE_Direct_RectArea( rectAreaLight, geometry, material, reflectedLight );\n\t}\n\t#pragma unroll_loop_end\n#endif\n#if defined( RE_IndirectDiffuse )\n\tvec3 iblIrradiance = vec3( 0.0 );\n\tvec3 irradiance = getAmbientLightIrradiance( ambientLightColor );\n\tirradiance += getLightProbeIrradiance( lightProbe, geometry );\n\t#if ( NUM_HEMI_LIGHTS > 0 )\n\t\t#pragma unroll_loop_start\n\t\tfor ( int i = 0; i < NUM_HEMI_LIGHTS; i ++ ) {\n\t\t\tirradiance += getHemisphereLightIrradiance( hemisphereLights[ i ], geometry );\n\t\t}\n\t\t#pragma unroll_loop_end\n\t#endif\n#endif\n#if defined( RE_IndirectSpecular )\n\tvec3 radiance = vec3( 0.0 );\n\tvec3 clearcoatRadiance = vec3( 0.0 );\n#endif",lights_fragment_maps:"#if defined( RE_IndirectDiffuse )\n\t#ifdef USE_LIGHTMAP\n\t\tvec4 lightMapTexel= texture2D( lightMap, vUv2 );\n\t\tvec3 lightMapIrradiance = lightMapTexelToLinear( lightMapTexel ).rgb * lightMapIntensity;\n\t\t#ifndef PHYSICALLY_CORRECT_LIGHTS\n\t\t\tlightMapIrradiance *= PI;\n\t\t#endif\n\t\tirradiance += lightMapIrradiance;\n\t#endif\n\t#if defined( USE_ENVMAP ) && defined( STANDARD ) && defined( ENVMAP_TYPE_CUBE_UV )\n\t\tiblIrradiance += getLightProbeIndirectIrradiance( geometry, maxMipLevel );\n\t#endif\n#endif\n#if defined( USE_ENVMAP ) && defined( RE_IndirectSpecular )\n\tradiance += getLightProbeIndirectRadiance( geometry.viewDir, geometry.normal, material.specularRoughness, maxMipLevel );\n\t#ifdef CLEARCOAT\n\t\tclearcoatRadiance += getLightProbeIndirectRadiance( geometry.viewDir, geometry.clearcoatNormal, material.clearcoatRoughness, maxMipLevel );\n\t#endif\n#endif",lights_fragment_end:"#if defined( RE_IndirectDiffuse )\n\tRE_IndirectDiffuse( irradiance, geometry, material, reflectedLight );\n#endif\n#if defined( RE_IndirectSpecular )\n\tRE_IndirectSpecular( radiance, iblIrradiance, clearcoatRadiance, geometry, material, reflectedLight );\n#endif",logdepthbuf_fragment:"#if defined( USE_LOGDEPTHBUF ) && defined( USE_LOGDEPTHBUF_EXT )\n\tgl_FragDepthEXT = vIsPerspective == 0.0 ? gl_FragCoord.z : log2( vFragDepth ) * logDepthBufFC * 0.5;\n#endif",logdepthbuf_pars_fragment:"#if defined( USE_LOGDEPTHBUF ) && defined( USE_LOGDEPTHBUF_EXT )\n\tuniform float logDepthBufFC;\n\tvarying float vFragDepth;\n\tvarying float vIsPerspective;\n#endif",logdepthbuf_pars_vertex:"#ifdef USE_LOGDEPTHBUF\n\t#ifdef USE_LOGDEPTHBUF_EXT\n\t\tvarying float vFragDepth;\n\t\tvarying float vIsPerspective;\n\t#else\n\t\tuniform float logDepthBufFC;\n\t#endif\n#endif",logdepthbuf_vertex:"#ifdef USE_LOGDEPTHBUF\n\t#ifdef USE_LOGDEPTHBUF_EXT\n\t\tvFragDepth = 1.0 + gl_Position.w;\n\t\tvIsPerspective = float( isPerspectiveMatrix( projectionMatrix ) );\n\t#else\n\t\tif ( isPerspectiveMatrix( projectionMatrix ) ) {\n\t\t\tgl_Position.z = log2( max( EPSILON, gl_Position.w + 1.0 ) ) * logDepthBufFC - 1.0;\n\t\t\tgl_Position.z *= gl_Position.w;\n\t\t}\n\t#endif\n#endif",map_fragment:"#ifdef USE_MAP\n\tvec4 texelColor = texture2D( map, vUv );\n\ttexelColor = mapTexelToLinear( texelColor );\n\tdiffuseColor *= texelColor;\n#endif",map_pars_fragment:"#ifdef USE_MAP\n\tuniform sampler2D map;\n#endif",map_particle_fragment:"#if defined( USE_MAP ) || defined( USE_ALPHAMAP )\n\tvec2 uv = ( uvTransform * vec3( gl_PointCoord.x, 1.0 - gl_PointCoord.y, 1 ) ).xy;\n#endif\n#ifdef USE_MAP\n\tvec4 mapTexel = texture2D( map, uv );\n\tdiffuseColor *= mapTexelToLinear( mapTexel );\n#endif\n#ifdef USE_ALPHAMAP\n\tdiffuseColor.a *= texture2D( alphaMap, uv ).g;\n#endif",map_particle_pars_fragment:"#if defined( USE_MAP ) || defined( USE_ALPHAMAP )\n\tuniform mat3 uvTransform;\n#endif\n#ifdef USE_MAP\n\tuniform sampler2D map;\n#endif\n#ifdef USE_ALPHAMAP\n\tuniform sampler2D alphaMap;\n#endif",metalnessmap_fragment:"float metalnessFactor = metalness;\n#ifdef USE_METALNESSMAP\n\tvec4 texelMetalness = texture2D( metalnessMap, vUv );\n\tmetalnessFactor *= texelMetalness.b;\n#endif",metalnessmap_pars_fragment:"#ifdef USE_METALNESSMAP\n\tuniform sampler2D metalnessMap;\n#endif",morphnormal_vertex:"#ifdef USE_MORPHNORMALS\n\tobjectNormal *= morphTargetBaseInfluence;\n\tobjectNormal += morphNormal0 * morphTargetInfluences[ 0 ];\n\tobjectNormal += morphNormal1 * morphTargetInfluences[ 1 ];\n\tobjectNormal += morphNormal2 * morphTargetInfluences[ 2 ];\n\tobjectNormal += morphNormal3 * morphTargetInfluences[ 3 ];\n#endif",morphtarget_pars_vertex:"#ifdef USE_MORPHTARGETS\n\tuniform float morphTargetBaseInfluence;\n\t#ifndef USE_MORPHNORMALS\n\t\tuniform float morphTargetInfluences[ 8 ];\n\t#else\n\t\tuniform float morphTargetInfluences[ 4 ];\n\t#endif\n#endif",morphtarget_vertex:"#ifdef USE_MORPHTARGETS\n\ttransformed *= morphTargetBaseInfluence;\n\ttransformed += morphTarget0 * morphTargetInfluences[ 0 ];\n\ttransformed += morphTarget1 * morphTargetInfluences[ 1 ];\n\ttransformed += morphTarget2 * morphTargetInfluences[ 2 ];\n\ttransformed += morphTarget3 * morphTargetInfluences[ 3 ];\n\t#ifndef USE_MORPHNORMALS\n\t\ttransformed += morphTarget4 * morphTargetInfluences[ 4 ];\n\t\ttransformed += morphTarget5 * morphTargetInfluences[ 5 ];\n\t\ttransformed += morphTarget6 * morphTargetInfluences[ 6 ];\n\t\ttransformed += morphTarget7 * morphTargetInfluences[ 7 ];\n\t#endif\n#endif",normal_fragment_begin:"float faceDirection = gl_FrontFacing ? 1.0 : - 1.0;\n#ifdef FLAT_SHADED\n\tvec3 fdx = vec3( dFdx( vViewPosition.x ), dFdx( vViewPosition.y ), dFdx( vViewPosition.z ) );\n\tvec3 fdy = vec3( dFdy( vViewPosition.x ), dFdy( vViewPosition.y ), dFdy( vViewPosition.z ) );\n\tvec3 normal = normalize( cross( fdx, fdy ) );\n#else\n\tvec3 normal = normalize( vNormal );\n\t#ifdef DOUBLE_SIDED\n\t\tnormal = normal * faceDirection;\n\t#endif\n\t#ifdef USE_TANGENT\n\t\tvec3 tangent = normalize( vTangent );\n\t\tvec3 bitangent = normalize( vBitangent );\n\t\t#ifdef DOUBLE_SIDED\n\t\t\ttangent = tangent * faceDirection;\n\t\t\tbitangent = bitangent * faceDirection;\n\t\t#endif\n\t\t#if defined( TANGENTSPACE_NORMALMAP ) || defined( USE_CLEARCOAT_NORMALMAP )\n\t\t\tmat3 vTBN = mat3( tangent, bitangent, normal );\n\t\t#endif\n\t#endif\n#endif\nvec3 geometryNormal = normal;",normal_fragment_maps:"#ifdef OBJECTSPACE_NORMALMAP\n\tnormal = texture2D( normalMap, vUv ).xyz * 2.0 - 1.0;\n\t#ifdef FLIP_SIDED\n\t\tnormal = - normal;\n\t#endif\n\t#ifdef DOUBLE_SIDED\n\t\tnormal = normal * faceDirection;\n\t#endif\n\tnormal = normalize( normalMatrix * normal );\n#elif defined( TANGENTSPACE_NORMALMAP )\n\tvec3 mapN = texture2D( normalMap, vUv ).xyz * 2.0 - 1.0;\n\tmapN.xy *= normalScale;\n\t#ifdef USE_TANGENT\n\t\tnormal = normalize( vTBN * mapN );\n\t#else\n\t\tnormal = perturbNormal2Arb( -vViewPosition, normal, mapN, faceDirection );\n\t#endif\n#elif defined( USE_BUMPMAP )\n\tnormal = perturbNormalArb( -vViewPosition, normal, dHdxy_fwd(), faceDirection );\n#endif",normalmap_pars_fragment:"#ifdef USE_NORMALMAP\n\tuniform sampler2D normalMap;\n\tuniform vec2 normalScale;\n#endif\n#ifdef OBJECTSPACE_NORMALMAP\n\tuniform mat3 normalMatrix;\n#endif\n#if ! defined ( USE_TANGENT ) && ( defined ( TANGENTSPACE_NORMALMAP ) || defined ( USE_CLEARCOAT_NORMALMAP ) )\n\tvec3 perturbNormal2Arb( vec3 eye_pos, vec3 surf_norm, vec3 mapN, float faceDirection ) {\n\t\tvec3 q0 = vec3( dFdx( eye_pos.x ), dFdx( eye_pos.y ), dFdx( eye_pos.z ) );\n\t\tvec3 q1 = vec3( dFdy( eye_pos.x ), dFdy( eye_pos.y ), dFdy( eye_pos.z ) );\n\t\tvec2 st0 = dFdx( vUv.st );\n\t\tvec2 st1 = dFdy( vUv.st );\n\t\tvec3 N = surf_norm;\n\t\tvec3 q1perp = cross( q1, N );\n\t\tvec3 q0perp = cross( N, q0 );\n\t\tvec3 T = q1perp * st0.x + q0perp * st1.x;\n\t\tvec3 B = q1perp * st0.y + q0perp * st1.y;\n\t\tfloat det = max( dot( T, T ), dot( B, B ) );\n\t\tfloat scale = ( det == 0.0 ) ? 0.0 : faceDirection * inversesqrt( det );\n\t\treturn normalize( T * ( mapN.x * scale ) + B * ( mapN.y * scale ) + N * mapN.z );\n\t}\n#endif",clearcoat_normal_fragment_begin:"#ifdef CLEARCOAT\n\tvec3 clearcoatNormal = geometryNormal;\n#endif",clearcoat_normal_fragment_maps:"#ifdef USE_CLEARCOAT_NORMALMAP\n\tvec3 clearcoatMapN = texture2D( clearcoatNormalMap, vUv ).xyz * 2.0 - 1.0;\n\tclearcoatMapN.xy *= clearcoatNormalScale;\n\t#ifdef USE_TANGENT\n\t\tclearcoatNormal = normalize( vTBN * clearcoatMapN );\n\t#else\n\t\tclearcoatNormal = perturbNormal2Arb( - vViewPosition, clearcoatNormal, clearcoatMapN, faceDirection );\n\t#endif\n#endif",clearcoat_pars_fragment:"#ifdef USE_CLEARCOATMAP\n\tuniform sampler2D clearcoatMap;\n#endif\n#ifdef USE_CLEARCOAT_ROUGHNESSMAP\n\tuniform sampler2D clearcoatRoughnessMap;\n#endif\n#ifdef USE_CLEARCOAT_NORMALMAP\n\tuniform sampler2D clearcoatNormalMap;\n\tuniform vec2 clearcoatNormalScale;\n#endif",packing:"vec3 packNormalToRGB( const in vec3 normal ) {\n\treturn normalize( normal ) * 0.5 + 0.5;\n}\nvec3 unpackRGBToNormal( const in vec3 rgb ) {\n\treturn 2.0 * rgb.xyz - 1.0;\n}\nconst float PackUpscale = 256. / 255.;const float UnpackDownscale = 255. / 256.;\nconst vec3 PackFactors = vec3( 256. * 256. * 256., 256. * 256., 256. );\nconst vec4 UnpackFactors = UnpackDownscale / vec4( PackFactors, 1. );\nconst float ShiftRight8 = 1. / 256.;\nvec4 packDepthToRGBA( const in float v ) {\n\tvec4 r = vec4( fract( v * PackFactors ), v );\n\tr.yzw -= r.xyz * ShiftRight8;\treturn r * PackUpscale;\n}\nfloat unpackRGBAToDepth( const in vec4 v ) {\n\treturn dot( v, UnpackFactors );\n}\nvec4 pack2HalfToRGBA( vec2 v ) {\n\tvec4 r = vec4( v.x, fract( v.x * 255.0 ), v.y, fract( v.y * 255.0 ));\n\treturn vec4( r.x - r.y / 255.0, r.y, r.z - r.w / 255.0, r.w);\n}\nvec2 unpackRGBATo2Half( vec4 v ) {\n\treturn vec2( v.x + ( v.y / 255.0 ), v.z + ( v.w / 255.0 ) );\n}\nfloat viewZToOrthographicDepth( const in float viewZ, const in float near, const in float far ) {\n\treturn ( viewZ + near ) / ( near - far );\n}\nfloat orthographicDepthToViewZ( const in float linearClipZ, const in float near, const in float far ) {\n\treturn linearClipZ * ( near - far ) - near;\n}\nfloat viewZToPerspectiveDepth( const in float viewZ, const in float near, const in float far ) {\n\treturn (( near + viewZ ) * far ) / (( far - near ) * viewZ );\n}\nfloat perspectiveDepthToViewZ( const in float invClipZ, const in float near, const in float far ) {\n\treturn ( near * far ) / ( ( far - near ) * invClipZ - far );\n}",premultiplied_alpha_fragment:"#ifdef PREMULTIPLIED_ALPHA\n\tgl_FragColor.rgb *= gl_FragColor.a;\n#endif",project_vertex:"vec4 mvPosition = vec4( transformed, 1.0 );\n#ifdef USE_INSTANCING\n\tmvPosition = instanceMatrix * mvPosition;\n#endif\nmvPosition = modelViewMatrix * mvPosition;\ngl_Position = projectionMatrix * mvPosition;",dithering_fragment:"#ifdef DITHERING\n\tgl_FragColor.rgb = dithering( gl_FragColor.rgb );\n#endif",dithering_pars_fragment:"#ifdef DITHERING\n\tvec3 dithering( vec3 color ) {\n\t\tfloat grid_position = rand( gl_FragCoord.xy );\n\t\tvec3 dither_shift_RGB = vec3( 0.25 / 255.0, -0.25 / 255.0, 0.25 / 255.0 );\n\t\tdither_shift_RGB = mix( 2.0 * dither_shift_RGB, -2.0 * dither_shift_RGB, grid_position );\n\t\treturn color + dither_shift_RGB;\n\t}\n#endif",roughnessmap_fragment:"float roughnessFactor = roughness;\n#ifdef USE_ROUGHNESSMAP\n\tvec4 texelRoughness = texture2D( roughnessMap, vUv );\n\troughnessFactor *= texelRoughness.g;\n#endif",roughnessmap_pars_fragment:"#ifdef USE_ROUGHNESSMAP\n\tuniform sampler2D roughnessMap;\n#endif",shadowmap_pars_fragment:"#ifdef USE_SHADOWMAP\n\t#if NUM_DIR_LIGHT_SHADOWS > 0\n\t\tuniform sampler2D directionalShadowMap[ NUM_DIR_LIGHT_SHADOWS ];\n\t\tvarying vec4 vDirectionalShadowCoord[ NUM_DIR_LIGHT_SHADOWS ];\n\t\tstruct DirectionalLightShadow {\n\t\t\tfloat shadowBias;\n\t\t\tfloat shadowNormalBias;\n\t\t\tfloat shadowRadius;\n\t\t\tvec2 shadowMapSize;\n\t\t};\n\t\tuniform DirectionalLightShadow directionalLightShadows[ NUM_DIR_LIGHT_SHADOWS ];\n\t#endif\n\t#if NUM_SPOT_LIGHT_SHADOWS > 0\n\t\tuniform sampler2D spotShadowMap[ NUM_SPOT_LIGHT_SHADOWS ];\n\t\tvarying vec4 vSpotShadowCoord[ NUM_SPOT_LIGHT_SHADOWS ];\n\t\tstruct SpotLightShadow {\n\t\t\tfloat shadowBias;\n\t\t\tfloat shadowNormalBias;\n\t\t\tfloat shadowRadius;\n\t\t\tvec2 shadowMapSize;\n\t\t};\n\t\tuniform SpotLightShadow spotLightShadows[ NUM_SPOT_LIGHT_SHADOWS ];\n\t#endif\n\t#if NUM_POINT_LIGHT_SHADOWS > 0\n\t\tuniform sampler2D pointShadowMap[ NUM_POINT_LIGHT_SHADOWS ];\n\t\tvarying vec4 vPointShadowCoord[ NUM_POINT_LIGHT_SHADOWS ];\n\t\tstruct PointLightShadow {\n\t\t\tfloat shadowBias;\n\t\t\tfloat shadowNormalBias;\n\t\t\tfloat shadowRadius;\n\t\t\tvec2 shadowMapSize;\n\t\t\tfloat shadowCameraNear;\n\t\t\tfloat shadowCameraFar;\n\t\t};\n\t\tuniform PointLightShadow pointLightShadows[ NUM_POINT_LIGHT_SHADOWS ];\n\t#endif\n\tfloat texture2DCompare( sampler2D depths, vec2 uv, float compare ) {\n\t\treturn step( compare, unpackRGBAToDepth( texture2D( depths, uv ) ) );\n\t}\n\tvec2 texture2DDistribution( sampler2D shadow, vec2 uv ) {\n\t\treturn unpackRGBATo2Half( texture2D( shadow, uv ) );\n\t}\n\tfloat VSMShadow (sampler2D shadow, vec2 uv, float compare ){\n\t\tfloat occlusion = 1.0;\n\t\tvec2 distribution = texture2DDistribution( shadow, uv );\n\t\tfloat hard_shadow = step( compare , distribution.x );\n\t\tif (hard_shadow != 1.0 ) {\n\t\t\tfloat distance = compare - distribution.x ;\n\t\t\tfloat variance = max( 0.00000, distribution.y * distribution.y );\n\t\t\tfloat softness_probability = variance / (variance + distance * distance );\t\t\tsoftness_probability = clamp( ( softness_probability - 0.3 ) / ( 0.95 - 0.3 ), 0.0, 1.0 );\t\t\tocclusion = clamp( max( hard_shadow, softness_probability ), 0.0, 1.0 );\n\t\t}\n\t\treturn occlusion;\n\t}\n\tfloat getShadow( sampler2D shadowMap, vec2 shadowMapSize, float shadowBias, float shadowRadius, vec4 shadowCoord ) {\n\t\tfloat shadow = 1.0;\n\t\tshadowCoord.xyz /= shadowCoord.w;\n\t\tshadowCoord.z += shadowBias;\n\t\tbvec4 inFrustumVec = bvec4 ( shadowCoord.x >= 0.0, shadowCoord.x <= 1.0, shadowCoord.y >= 0.0, shadowCoord.y <= 1.0 );\n\t\tbool inFrustum = all( inFrustumVec );\n\t\tbvec2 frustumTestVec = bvec2( inFrustum, shadowCoord.z <= 1.0 );\n\t\tbool frustumTest = all( frustumTestVec );\n\t\tif ( frustumTest ) {\n\t\t#if defined( SHADOWMAP_TYPE_PCF )\n\t\t\tvec2 texelSize = vec2( 1.0 ) / shadowMapSize;\n\t\t\tfloat dx0 = - texelSize.x * shadowRadius;\n\t\t\tfloat dy0 = - texelSize.y * shadowRadius;\n\t\t\tfloat dx1 = + texelSize.x * shadowRadius;\n\t\t\tfloat dy1 = + texelSize.y * shadowRadius;\n\t\t\tfloat dx2 = dx0 / 2.0;\n\t\t\tfloat dy2 = dy0 / 2.0;\n\t\t\tfloat dx3 = dx1 / 2.0;\n\t\t\tfloat dy3 = dy1 / 2.0;\n\t\t\tshadow = (\n\t\t\t\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( dx0, dy0 ), shadowCoord.z ) +\n\t\t\t\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( 0.0, dy0 ), shadowCoord.z ) +\n\t\t\t\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( dx1, dy0 ), shadowCoord.z ) +\n\t\t\t\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( dx2, dy2 ), shadowCoord.z ) +\n\t\t\t\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( 0.0, dy2 ), shadowCoord.z ) +\n\t\t\t\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( dx3, dy2 ), shadowCoord.z ) +\n\t\t\t\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( dx0, 0.0 ), shadowCoord.z ) +\n\t\t\t\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( dx2, 0.0 ), shadowCoord.z ) +\n\t\t\t\ttexture2DCompare( shadowMap, shadowCoord.xy, shadowCoord.z ) +\n\t\t\t\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( dx3, 0.0 ), shadowCoord.z ) +\n\t\t\t\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( dx1, 0.0 ), shadowCoord.z ) +\n\t\t\t\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( dx2, dy3 ), shadowCoord.z ) +\n\t\t\t\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( 0.0, dy3 ), shadowCoord.z ) +\n\t\t\t\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( dx3, dy3 ), shadowCoord.z ) +\n\t\t\t\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( dx0, dy1 ), shadowCoord.z ) +\n\t\t\t\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( 0.0, dy1 ), shadowCoord.z ) +\n\t\t\t\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( dx1, dy1 ), shadowCoord.z )\n\t\t\t) * ( 1.0 / 17.0 );\n\t\t#elif defined( SHADOWMAP_TYPE_PCF_SOFT )\n\t\t\tvec2 texelSize = vec2( 1.0 ) / shadowMapSize;\n\t\t\tfloat dx = texelSize.x;\n\t\t\tfloat dy = texelSize.y;\n\t\t\tvec2 uv = shadowCoord.xy;\n\t\t\tvec2 f = fract( uv * shadowMapSize + 0.5 );\n\t\t\tuv -= f * texelSize;\n\t\t\tshadow = (\n\t\t\t\ttexture2DCompare( shadowMap, uv, shadowCoord.z ) +\n\t\t\t\ttexture2DCompare( shadowMap, uv + vec2( dx, 0.0 ), shadowCoord.z ) +\n\t\t\t\ttexture2DCompare( shadowMap, uv + vec2( 0.0, dy ), shadowCoord.z ) +\n\t\t\t\ttexture2DCompare( shadowMap, uv + texelSize, shadowCoord.z ) +\n\t\t\t\tmix( texture2DCompare( shadowMap, uv + vec2( -dx, 0.0 ), shadowCoord.z ), \n\t\t\t\t\t texture2DCompare( shadowMap, uv + vec2( 2.0 * dx, 0.0 ), shadowCoord.z ),\n\t\t\t\t\t f.x ) +\n\t\t\t\tmix( texture2DCompare( shadowMap, uv + vec2( -dx, dy ), shadowCoord.z ), \n\t\t\t\t\t texture2DCompare( shadowMap, uv + vec2( 2.0 * dx, dy ), shadowCoord.z ),\n\t\t\t\t\t f.x ) +\n\t\t\t\tmix( texture2DCompare( shadowMap, uv + vec2( 0.0, -dy ), shadowCoord.z ), \n\t\t\t\t\t texture2DCompare( shadowMap, uv + vec2( 0.0, 2.0 * dy ), shadowCoord.z ),\n\t\t\t\t\t f.y ) +\n\t\t\t\tmix( texture2DCompare( shadowMap, uv + vec2( dx, -dy ), shadowCoord.z ), \n\t\t\t\t\t texture2DCompare( shadowMap, uv + vec2( dx, 2.0 * dy ), shadowCoord.z ),\n\t\t\t\t\t f.y ) +\n\t\t\t\tmix( mix( texture2DCompare( shadowMap, uv + vec2( -dx, -dy ), shadowCoord.z ), \n\t\t\t\t\t\t\ttexture2DCompare( shadowMap, uv + vec2( 2.0 * dx, -dy ), shadowCoord.z ),\n\t\t\t\t\t\t\tf.x ),\n\t\t\t\t\t mix( texture2DCompare( shadowMap, uv + vec2( -dx, 2.0 * dy ), shadowCoord.z ), \n\t\t\t\t\t\t\ttexture2DCompare( shadowMap, uv + vec2( 2.0 * dx, 2.0 * dy ), shadowCoord.z ),\n\t\t\t\t\t\t\tf.x ),\n\t\t\t\t\t f.y )\n\t\t\t) * ( 1.0 / 9.0 );\n\t\t#elif defined( SHADOWMAP_TYPE_VSM )\n\t\t\tshadow = VSMShadow( shadowMap, shadowCoord.xy, shadowCoord.z );\n\t\t#else\n\t\t\tshadow = texture2DCompare( shadowMap, shadowCoord.xy, shadowCoord.z );\n\t\t#endif\n\t\t}\n\t\treturn shadow;\n\t}\n\tvec2 cubeToUV( vec3 v, float texelSizeY ) {\n\t\tvec3 absV = abs( v );\n\t\tfloat scaleToCube = 1.0 / max( absV.x, max( absV.y, absV.z ) );\n\t\tabsV *= scaleToCube;\n\t\tv *= scaleToCube * ( 1.0 - 2.0 * texelSizeY );\n\t\tvec2 planar = v.xy;\n\t\tfloat almostATexel = 1.5 * texelSizeY;\n\t\tfloat almostOne = 1.0 - almostATexel;\n\t\tif ( absV.z >= almostOne ) {\n\t\t\tif ( v.z > 0.0 )\n\t\t\t\tplanar.x = 4.0 - v.x;\n\t\t} else if ( absV.x >= almostOne ) {\n\t\t\tfloat signX = sign( v.x );\n\t\t\tplanar.x = v.z * signX + 2.0 * signX;\n\t\t} else if ( absV.y >= almostOne ) {\n\t\t\tfloat signY = sign( v.y );\n\t\t\tplanar.x = v.x + 2.0 * signY + 2.0;\n\t\t\tplanar.y = v.z * signY - 2.0;\n\t\t}\n\t\treturn vec2( 0.125, 0.25 ) * planar + vec2( 0.375, 0.75 );\n\t}\n\tfloat getPointShadow( sampler2D shadowMap, vec2 shadowMapSize, float shadowBias, float shadowRadius, vec4 shadowCoord, float shadowCameraNear, float shadowCameraFar ) {\n\t\tvec2 texelSize = vec2( 1.0 ) / ( shadowMapSize * vec2( 4.0, 2.0 ) );\n\t\tvec3 lightToPosition = shadowCoord.xyz;\n\t\tfloat dp = ( length( lightToPosition ) - shadowCameraNear ) / ( shadowCameraFar - shadowCameraNear );\t\tdp += shadowBias;\n\t\tvec3 bd3D = normalize( lightToPosition );\n\t\t#if defined( SHADOWMAP_TYPE_PCF ) || defined( SHADOWMAP_TYPE_PCF_SOFT ) || defined( SHADOWMAP_TYPE_VSM )\n\t\t\tvec2 offset = vec2( - 1, 1 ) * shadowRadius * texelSize.y;\n\t\t\treturn (\n\t\t\t\ttexture2DCompare( shadowMap, cubeToUV( bd3D + offset.xyy, texelSize.y ), dp ) +\n\t\t\t\ttexture2DCompare( shadowMap, cubeToUV( bd3D + offset.yyy, texelSize.y ), dp ) +\n\t\t\t\ttexture2DCompare( shadowMap, cubeToUV( bd3D + offset.xyx, texelSize.y ), dp ) +\n\t\t\t\ttexture2DCompare( shadowMap, cubeToUV( bd3D + offset.yyx, texelSize.y ), dp ) +\n\t\t\t\ttexture2DCompare( shadowMap, cubeToUV( bd3D, texelSize.y ), dp ) +\n\t\t\t\ttexture2DCompare( shadowMap, cubeToUV( bd3D + offset.xxy, texelSize.y ), dp ) +\n\t\t\t\ttexture2DCompare( shadowMap, cubeToUV( bd3D + offset.yxy, texelSize.y ), dp ) +\n\t\t\t\ttexture2DCompare( shadowMap, cubeToUV( bd3D + offset.xxx, texelSize.y ), dp ) +\n\t\t\t\ttexture2DCompare( shadowMap, cubeToUV( bd3D + offset.yxx, texelSize.y ), dp )\n\t\t\t) * ( 1.0 / 9.0 );\n\t\t#else\n\t\t\treturn texture2DCompare( shadowMap, cubeToUV( bd3D, texelSize.y ), dp );\n\t\t#endif\n\t}\n#endif",shadowmap_pars_vertex:"#ifdef USE_SHADOWMAP\n\t#if NUM_DIR_LIGHT_SHADOWS > 0\n\t\tuniform mat4 directionalShadowMatrix[ NUM_DIR_LIGHT_SHADOWS ];\n\t\tvarying vec4 vDirectionalShadowCoord[ NUM_DIR_LIGHT_SHADOWS ];\n\t\tstruct DirectionalLightShadow {\n\t\t\tfloat shadowBias;\n\t\t\tfloat shadowNormalBias;\n\t\t\tfloat shadowRadius;\n\t\t\tvec2 shadowMapSize;\n\t\t};\n\t\tuniform DirectionalLightShadow directionalLightShadows[ NUM_DIR_LIGHT_SHADOWS ];\n\t#endif\n\t#if NUM_SPOT_LIGHT_SHADOWS > 0\n\t\tuniform mat4 spotShadowMatrix[ NUM_SPOT_LIGHT_SHADOWS ];\n\t\tvarying vec4 vSpotShadowCoord[ NUM_SPOT_LIGHT_SHADOWS ];\n\t\tstruct SpotLightShadow {\n\t\t\tfloat shadowBias;\n\t\t\tfloat shadowNormalBias;\n\t\t\tfloat shadowRadius;\n\t\t\tvec2 shadowMapSize;\n\t\t};\n\t\tuniform SpotLightShadow spotLightShadows[ NUM_SPOT_LIGHT_SHADOWS ];\n\t#endif\n\t#if NUM_POINT_LIGHT_SHADOWS > 0\n\t\tuniform mat4 pointShadowMatrix[ NUM_POINT_LIGHT_SHADOWS ];\n\t\tvarying vec4 vPointShadowCoord[ NUM_POINT_LIGHT_SHADOWS ];\n\t\tstruct PointLightShadow {\n\t\t\tfloat shadowBias;\n\t\t\tfloat shadowNormalBias;\n\t\t\tfloat shadowRadius;\n\t\t\tvec2 shadowMapSize;\n\t\t\tfloat shadowCameraNear;\n\t\t\tfloat shadowCameraFar;\n\t\t};\n\t\tuniform PointLightShadow pointLightShadows[ NUM_POINT_LIGHT_SHADOWS ];\n\t#endif\n#endif",shadowmap_vertex:"#ifdef USE_SHADOWMAP\n\t#if NUM_DIR_LIGHT_SHADOWS > 0 || NUM_SPOT_LIGHT_SHADOWS > 0 || NUM_POINT_LIGHT_SHADOWS > 0\n\t\tvec3 shadowWorldNormal = inverseTransformDirection( transformedNormal, viewMatrix );\n\t\tvec4 shadowWorldPosition;\n\t#endif\n\t#if NUM_DIR_LIGHT_SHADOWS > 0\n\t#pragma unroll_loop_start\n\tfor ( int i = 0; i < NUM_DIR_LIGHT_SHADOWS; i ++ ) {\n\t\tshadowWorldPosition = worldPosition + vec4( shadowWorldNormal * directionalLightShadows[ i ].shadowNormalBias, 0 );\n\t\tvDirectionalShadowCoord[ i ] = directionalShadowMatrix[ i ] * shadowWorldPosition;\n\t}\n\t#pragma unroll_loop_end\n\t#endif\n\t#if NUM_SPOT_LIGHT_SHADOWS > 0\n\t#pragma unroll_loop_start\n\tfor ( int i = 0; i < NUM_SPOT_LIGHT_SHADOWS; i ++ ) {\n\t\tshadowWorldPosition = worldPosition + vec4( shadowWorldNormal * spotLightShadows[ i ].shadowNormalBias, 0 );\n\t\tvSpotShadowCoord[ i ] = spotShadowMatrix[ i ] * shadowWorldPosition;\n\t}\n\t#pragma unroll_loop_end\n\t#endif\n\t#if NUM_POINT_LIGHT_SHADOWS > 0\n\t#pragma unroll_loop_start\n\tfor ( int i = 0; i < NUM_POINT_LIGHT_SHADOWS; i ++ ) {\n\t\tshadowWorldPosition = worldPosition + vec4( shadowWorldNormal * pointLightShadows[ i ].shadowNormalBias, 0 );\n\t\tvPointShadowCoord[ i ] = pointShadowMatrix[ i ] * shadowWorldPosition;\n\t}\n\t#pragma unroll_loop_end\n\t#endif\n#endif",shadowmask_pars_fragment:"float getShadowMask() {\n\tfloat shadow = 1.0;\n\t#ifdef USE_SHADOWMAP\n\t#if NUM_DIR_LIGHT_SHADOWS > 0\n\tDirectionalLightShadow directionalLight;\n\t#pragma unroll_loop_start\n\tfor ( int i = 0; i < NUM_DIR_LIGHT_SHADOWS; i ++ ) {\n\t\tdirectionalLight = directionalLightShadows[ i ];\n\t\tshadow *= receiveShadow ? getShadow( directionalShadowMap[ i ], directionalLight.shadowMapSize, directionalLight.shadowBias, directionalLight.shadowRadius, vDirectionalShadowCoord[ i ] ) : 1.0;\n\t}\n\t#pragma unroll_loop_end\n\t#endif\n\t#if NUM_SPOT_LIGHT_SHADOWS > 0\n\tSpotLightShadow spotLight;\n\t#pragma unroll_loop_start\n\tfor ( int i = 0; i < NUM_SPOT_LIGHT_SHADOWS; i ++ ) {\n\t\tspotLight = spotLightShadows[ i ];\n\t\tshadow *= receiveShadow ? getShadow( spotShadowMap[ i ], spotLight.shadowMapSize, spotLight.shadowBias, spotLight.shadowRadius, vSpotShadowCoord[ i ] ) : 1.0;\n\t}\n\t#pragma unroll_loop_end\n\t#endif\n\t#if NUM_POINT_LIGHT_SHADOWS > 0\n\tPointLightShadow pointLight;\n\t#pragma unroll_loop_start\n\tfor ( int i = 0; i < NUM_POINT_LIGHT_SHADOWS; i ++ ) {\n\t\tpointLight = pointLightShadows[ i ];\n\t\tshadow *= receiveShadow ? getPointShadow( pointShadowMap[ i ], pointLight.shadowMapSize, pointLight.shadowBias, pointLight.shadowRadius, vPointShadowCoord[ i ], pointLight.shadowCameraNear, pointLight.shadowCameraFar ) : 1.0;\n\t}\n\t#pragma unroll_loop_end\n\t#endif\n\t#endif\n\treturn shadow;\n}",skinbase_vertex:"#ifdef USE_SKINNING\n\tmat4 boneMatX = getBoneMatrix( skinIndex.x );\n\tmat4 boneMatY = getBoneMatrix( skinIndex.y );\n\tmat4 boneMatZ = getBoneMatrix( skinIndex.z );\n\tmat4 boneMatW = getBoneMatrix( skinIndex.w );\n#endif",skinning_pars_vertex:"#ifdef USE_SKINNING\n\tuniform mat4 bindMatrix;\n\tuniform mat4 bindMatrixInverse;\n\t#ifdef BONE_TEXTURE\n\t\tuniform highp sampler2D boneTexture;\n\t\tuniform int boneTextureSize;\n\t\tmat4 getBoneMatrix( const in float i ) {\n\t\t\tfloat j = i * 4.0;\n\t\t\tfloat x = mod( j, float( boneTextureSize ) );\n\t\t\tfloat y = floor( j / float( boneTextureSize ) );\n\t\t\tfloat dx = 1.0 / float( boneTextureSize );\n\t\t\tfloat dy = 1.0 / float( boneTextureSize );\n\t\t\ty = dy * ( y + 0.5 );\n\t\t\tvec4 v1 = texture2D( boneTexture, vec2( dx * ( x + 0.5 ), y ) );\n\t\t\tvec4 v2 = texture2D( boneTexture, vec2( dx * ( x + 1.5 ), y ) );\n\t\t\tvec4 v3 = texture2D( boneTexture, vec2( dx * ( x + 2.5 ), y ) );\n\t\t\tvec4 v4 = texture2D( boneTexture, vec2( dx * ( x + 3.5 ), y ) );\n\t\t\tmat4 bone = mat4( v1, v2, v3, v4 );\n\t\t\treturn bone;\n\t\t}\n\t#else\n\t\tuniform mat4 boneMatrices[ MAX_BONES ];\n\t\tmat4 getBoneMatrix( const in float i ) {\n\t\t\tmat4 bone = boneMatrices[ int(i) ];\n\t\t\treturn bone;\n\t\t}\n\t#endif\n#endif",skinning_vertex:"#ifdef USE_SKINNING\n\tvec4 skinVertex = bindMatrix * vec4( transformed, 1.0 );\n\tvec4 skinned = vec4( 0.0 );\n\tskinned += boneMatX * skinVertex * skinWeight.x;\n\tskinned += boneMatY * skinVertex * skinWeight.y;\n\tskinned += boneMatZ * skinVertex * skinWeight.z;\n\tskinned += boneMatW * skinVertex * skinWeight.w;\n\ttransformed = ( bindMatrixInverse * skinned ).xyz;\n#endif",skinnormal_vertex:"#ifdef USE_SKINNING\n\tmat4 skinMatrix = mat4( 0.0 );\n\tskinMatrix += skinWeight.x * boneMatX;\n\tskinMatrix += skinWeight.y * boneMatY;\n\tskinMatrix += skinWeight.z * boneMatZ;\n\tskinMatrix += skinWeight.w * boneMatW;\n\tskinMatrix = bindMatrixInverse * skinMatrix * bindMatrix;\n\tobjectNormal = vec4( skinMatrix * vec4( objectNormal, 0.0 ) ).xyz;\n\t#ifdef USE_TANGENT\n\t\tobjectTangent = vec4( skinMatrix * vec4( objectTangent, 0.0 ) ).xyz;\n\t#endif\n#endif",specularmap_fragment:"float specularStrength;\n#ifdef USE_SPECULARMAP\n\tvec4 texelSpecular = texture2D( specularMap, vUv );\n\tspecularStrength = texelSpecular.r;\n#else\n\tspecularStrength = 1.0;\n#endif",specularmap_pars_fragment:"#ifdef USE_SPECULARMAP\n\tuniform sampler2D specularMap;\n#endif",tonemapping_fragment:"#if defined( TONE_MAPPING )\n\tgl_FragColor.rgb = toneMapping( gl_FragColor.rgb );\n#endif",tonemapping_pars_fragment:"#ifndef saturate\n#define saturate(a) clamp( a, 0.0, 1.0 )\n#endif\nuniform float toneMappingExposure;\nvec3 LinearToneMapping( vec3 color ) {\n\treturn toneMappingExposure * color;\n}\nvec3 ReinhardToneMapping( vec3 color ) {\n\tcolor *= toneMappingExposure;\n\treturn saturate( color / ( vec3( 1.0 ) + color ) );\n}\nvec3 OptimizedCineonToneMapping( vec3 color ) {\n\tcolor *= toneMappingExposure;\n\tcolor = max( vec3( 0.0 ), color - 0.004 );\n\treturn pow( ( color * ( 6.2 * color + 0.5 ) ) / ( color * ( 6.2 * color + 1.7 ) + 0.06 ), vec3( 2.2 ) );\n}\nvec3 RRTAndODTFit( vec3 v ) {\n\tvec3 a = v * ( v + 0.0245786 ) - 0.000090537;\n\tvec3 b = v * ( 0.983729 * v + 0.4329510 ) + 0.238081;\n\treturn a / b;\n}\nvec3 ACESFilmicToneMapping( vec3 color ) {\n\tconst mat3 ACESInputMat = mat3(\n\t\tvec3( 0.59719, 0.07600, 0.02840 ),\t\tvec3( 0.35458, 0.90834, 0.13383 ),\n\t\tvec3( 0.04823, 0.01566, 0.83777 )\n\t);\n\tconst mat3 ACESOutputMat = mat3(\n\t\tvec3(\t1.60475, -0.10208, -0.00327 ),\t\tvec3( -0.53108,\t1.10813, -0.07276 ),\n\t\tvec3( -0.07367, -0.00605,\t1.07602 )\n\t);\n\tcolor *= toneMappingExposure / 0.6;\n\tcolor = ACESInputMat * color;\n\tcolor = RRTAndODTFit( color );\n\tcolor = ACESOutputMat * color;\n\treturn saturate( color );\n}\nvec3 CustomToneMapping( vec3 color ) { return color; }",transmission_fragment:"#ifdef USE_TRANSMISSION\n\tfloat transmissionFactor = transmission;\n\tfloat thicknessFactor = thickness;\n\t#ifdef USE_TRANSMISSIONMAP\n\t\ttransmissionFactor *= texture2D( transmissionMap, vUv ).r;\n\t#endif\n\t#ifdef USE_THICKNESSNMAP\n\t\tthicknessFactor *= texture2D( thicknessMap, vUv ).g;\n\t#endif\n\tvec3 pos = vWorldPosition.xyz / vWorldPosition.w;\n\tvec3 v = normalize( cameraPosition - pos );\n\tfloat ior = ( 1.0 + 0.4 * reflectivity ) / ( 1.0 - 0.4 * reflectivity );\n\tvec3 transmission = transmissionFactor * getIBLVolumeRefraction(\n\t\tnormal, v, roughnessFactor, material.diffuseColor, totalSpecular,\n\t\tpos, modelMatrix, viewMatrix, projectionMatrix, ior, thicknessFactor,\n\t\tattenuationColor, attenuationDistance );\n\ttotalDiffuse = mix( totalDiffuse, transmission, transmissionFactor );\n#endif",transmission_pars_fragment:"#ifdef USE_TRANSMISSION\n\t#ifdef USE_TRANSMISSIONMAP\n\t\tuniform sampler2D transmissionMap;\n\t#endif\n\t#ifdef USE_THICKNESSMAP\n\t\tuniform sampler2D thicknessMap;\n\t#endif\n\tuniform vec2 transmissionSamplerSize;\n\tuniform sampler2D transmissionSamplerMap;\n\tuniform mat4 modelMatrix;\n\tuniform mat4 projectionMatrix;\n\tvarying vec4 vWorldPosition;\n\tvec3 getVolumeTransmissionRay(vec3 n, vec3 v, float thickness, float ior, mat4 modelMatrix) {\n\t\tvec3 refractionVector = refract(-v, normalize(n), 1.0 / ior);\n\t\tvec3 modelScale;\n\t\tmodelScale.x = length(vec3(modelMatrix[0].xyz));\n\t\tmodelScale.y = length(vec3(modelMatrix[1].xyz));\n\t\tmodelScale.z = length(vec3(modelMatrix[2].xyz));\n\t\treturn normalize(refractionVector) * thickness * modelScale;\n\t}\n\tfloat applyIorToRoughness(float roughness, float ior) {\n\t\treturn roughness * clamp(ior * 2.0 - 2.0, 0.0, 1.0);\n\t}\n\tvec3 getTransmissionSample(vec2 fragCoord, float roughness, float ior) {\n\t\tfloat framebufferLod = log2(transmissionSamplerSize.x) * applyIorToRoughness(roughness, ior);\n\t\treturn texture2DLodEXT(transmissionSamplerMap, fragCoord.xy, framebufferLod).rgb;\n\t}\n\tvec3 applyVolumeAttenuation(vec3 radiance, float transmissionDistance, vec3 attenuationColor, float attenuationDistance) {\n\t\tif (attenuationDistance == 0.0) {\n\t\t\treturn radiance;\n\t\t} else {\n\t\t\tvec3 attenuationCoefficient = -log(attenuationColor) / attenuationDistance;\n\t\t\tvec3 transmittance = exp(-attenuationCoefficient * transmissionDistance);\t\t\treturn transmittance * radiance;\n\t\t}\n\t}\n\tvec3 getIBLVolumeRefraction(vec3 n, vec3 v, float perceptualRoughness, vec3 baseColor, vec3 specularColor,\n\t\tvec3 position, mat4 modelMatrix, mat4 viewMatrix, mat4 projMatrix, float ior, float thickness,\n\t\tvec3 attenuationColor, float attenuationDistance) {\n\t\tvec3 transmissionRay = getVolumeTransmissionRay(n, v, thickness, ior, modelMatrix);\n\t\tvec3 refractedRayExit = position + transmissionRay;\n\t\tvec4 ndcPos = projMatrix * viewMatrix * vec4(refractedRayExit, 1.0);\n\t\tvec2 refractionCoords = ndcPos.xy / ndcPos.w;\n\t\trefractionCoords += 1.0;\n\t\trefractionCoords /= 2.0;\n\t\tvec3 transmittedLight = getTransmissionSample(refractionCoords, perceptualRoughness, ior);\n\t\tvec3 attenuatedColor = applyVolumeAttenuation(transmittedLight, length(transmissionRay), attenuationColor, attenuationDistance);\n\t\treturn (1.0 - specularColor) * attenuatedColor * baseColor;\n\t}\n#endif",uv_pars_fragment:"#if ( defined( USE_UV ) && ! defined( UVS_VERTEX_ONLY ) )\n\tvarying vec2 vUv;\n#endif",uv_pars_vertex:"#ifdef USE_UV\n\t#ifdef UVS_VERTEX_ONLY\n\t\tvec2 vUv;\n\t#else\n\t\tvarying vec2 vUv;\n\t#endif\n\tuniform mat3 uvTransform;\n#endif",uv_vertex:"#ifdef USE_UV\n\tvUv = ( uvTransform * vec3( uv, 1 ) ).xy;\n#endif",uv2_pars_fragment:"#if defined( USE_LIGHTMAP ) || defined( USE_AOMAP )\n\tvarying vec2 vUv2;\n#endif",uv2_pars_vertex:"#if defined( USE_LIGHTMAP ) || defined( USE_AOMAP )\n\tattribute vec2 uv2;\n\tvarying vec2 vUv2;\n\tuniform mat3 uv2Transform;\n#endif",uv2_vertex:"#if defined( USE_LIGHTMAP ) || defined( USE_AOMAP )\n\tvUv2 = ( uv2Transform * vec3( uv2, 1 ) ).xy;\n#endif",worldpos_vertex:"#if defined( USE_ENVMAP ) || defined( DISTANCE ) || defined ( USE_SHADOWMAP ) || defined ( USE_TRANSMISSION )\n\tvec4 worldPosition = vec4( transformed, 1.0 );\n\t#ifdef USE_INSTANCING\n\t\tworldPosition = instanceMatrix * worldPosition;\n\t#endif\n\tworldPosition = modelMatrix * worldPosition;\n#endif",background_frag:"uniform sampler2D t2D;\nvarying vec2 vUv;\nvoid main() {\n\tvec4 texColor = texture2D( t2D, vUv );\n\tgl_FragColor = mapTexelToLinear( texColor );\n\t#include \n\t#include \n}",background_vert:"varying vec2 vUv;\nuniform mat3 uvTransform;\nvoid main() {\n\tvUv = ( uvTransform * vec3( uv, 1 ) ).xy;\n\tgl_Position = vec4( position.xy, 1.0, 1.0 );\n}",cube_frag:"#include \nuniform float opacity;\nvarying vec3 vWorldDirection;\n#include \nvoid main() {\n\tvec3 vReflect = vWorldDirection;\n\t#include \n\tgl_FragColor = envColor;\n\tgl_FragColor.a *= opacity;\n\t#include \n\t#include \n}",cube_vert:"varying vec3 vWorldDirection;\n#include \nvoid main() {\n\tvWorldDirection = transformDirection( position, modelMatrix );\n\t#include \n\t#include \n\tgl_Position.z = gl_Position.w;\n}",depth_frag:"#if DEPTH_PACKING == 3200\n\tuniform float opacity;\n#endif\n#include \n#include \n#include \n#include \n#include \n#include \n#include \nvarying vec2 vHighPrecisionZW;\nvoid main() {\n\t#include \n\tvec4 diffuseColor = vec4( 1.0 );\n\t#if DEPTH_PACKING == 3200\n\t\tdiffuseColor.a = opacity;\n\t#endif\n\t#include \n\t#include \n\t#include \n\t#include \n\tfloat fragCoordZ = 0.5 * vHighPrecisionZW[0] / vHighPrecisionZW[1] + 0.5;\n\t#if DEPTH_PACKING == 3200\n\t\tgl_FragColor = vec4( vec3( 1.0 - fragCoordZ ), opacity );\n\t#elif DEPTH_PACKING == 3201\n\t\tgl_FragColor = packDepthToRGBA( fragCoordZ );\n\t#endif\n}",depth_vert:"#include \n#include \n#include \n#include \n#include \n#include \n#include \nvarying vec2 vHighPrecisionZW;\nvoid main() {\n\t#include \n\t#include \n\t#ifdef USE_DISPLACEMENTMAP\n\t\t#include \n\t\t#include \n\t\t#include \n\t#endif\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\tvHighPrecisionZW = gl_Position.zw;\n}",distanceRGBA_frag:"#define DISTANCE\nuniform vec3 referencePosition;\nuniform float nearDistance;\nuniform float farDistance;\nvarying vec3 vWorldPosition;\n#include \n#include \n#include \n#include \n#include \n#include \nvoid main () {\n\t#include \n\tvec4 diffuseColor = vec4( 1.0 );\n\t#include \n\t#include \n\t#include \n\tfloat dist = length( vWorldPosition - referencePosition );\n\tdist = ( dist - nearDistance ) / ( farDistance - nearDistance );\n\tdist = saturate( dist );\n\tgl_FragColor = packDepthToRGBA( dist );\n}",distanceRGBA_vert:"#define DISTANCE\nvarying vec3 vWorldPosition;\n#include \n#include \n#include \n#include \n#include \n#include \nvoid main() {\n\t#include \n\t#include \n\t#ifdef USE_DISPLACEMENTMAP\n\t\t#include \n\t\t#include \n\t\t#include \n\t#endif\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\tvWorldPosition = worldPosition.xyz;\n}",equirect_frag:"uniform sampler2D tEquirect;\nvarying vec3 vWorldDirection;\n#include \nvoid main() {\n\tvec3 direction = normalize( vWorldDirection );\n\tvec2 sampleUV = equirectUv( direction );\n\tvec4 texColor = texture2D( tEquirect, sampleUV );\n\tgl_FragColor = mapTexelToLinear( texColor );\n\t#include \n\t#include \n}",equirect_vert:"varying vec3 vWorldDirection;\n#include \nvoid main() {\n\tvWorldDirection = transformDirection( position, modelMatrix );\n\t#include \n\t#include \n}",linedashed_frag:"uniform vec3 diffuse;\nuniform float opacity;\nuniform float dashSize;\nuniform float totalSize;\nvarying float vLineDistance;\n#include \n#include \n#include \n#include \n#include \nvoid main() {\n\t#include \n\tif ( mod( vLineDistance, totalSize ) > dashSize ) {\n\t\tdiscard;\n\t}\n\tvec3 outgoingLight = vec3( 0.0 );\n\tvec4 diffuseColor = vec4( diffuse, opacity );\n\t#include \n\t#include \n\toutgoingLight = diffuseColor.rgb;\n\tgl_FragColor = vec4( outgoingLight, diffuseColor.a );\n\t#include \n\t#include \n\t#include \n\t#include \n}",linedashed_vert:"uniform float scale;\nattribute float lineDistance;\nvarying float vLineDistance;\n#include \n#include \n#include \n#include \n#include \n#include \nvoid main() {\n\tvLineDistance = scale * lineDistance;\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n}",meshbasic_frag:"uniform vec3 diffuse;\nuniform float opacity;\n#ifndef FLAT_SHADED\n\tvarying vec3 vNormal;\n#endif\n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \nvoid main() {\n\t#include \n\tvec4 diffuseColor = vec4( diffuse, opacity );\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\tReflectedLight reflectedLight = ReflectedLight( vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ) );\n\t#ifdef USE_LIGHTMAP\n\t\n\t\tvec4 lightMapTexel= texture2D( lightMap, vUv2 );\n\t\treflectedLight.indirectDiffuse += lightMapTexelToLinear( lightMapTexel ).rgb * lightMapIntensity;\n\t#else\n\t\treflectedLight.indirectDiffuse += vec3( 1.0 );\n\t#endif\n\t#include \n\treflectedLight.indirectDiffuse *= diffuseColor.rgb;\n\tvec3 outgoingLight = reflectedLight.indirectDiffuse;\n\t#include \n\tgl_FragColor = vec4( outgoingLight, diffuseColor.a );\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n}",meshbasic_vert:"#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \nvoid main() {\n\t#include \n\t#include \n\t#include \n\t#include \n\t#ifdef USE_ENVMAP\n\t#include \n\t#include \n\t#include \n\t#include \n\t#endif\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n}",meshlambert_frag:"uniform vec3 diffuse;\nuniform vec3 emissive;\nuniform float opacity;\nvarying vec3 vLightFront;\nvarying vec3 vIndirectFront;\n#ifdef DOUBLE_SIDED\n\tvarying vec3 vLightBack;\n\tvarying vec3 vIndirectBack;\n#endif\n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \nvoid main() {\n\t#include \n\tvec4 diffuseColor = vec4( diffuse, opacity );\n\tReflectedLight reflectedLight = ReflectedLight( vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ) );\n\tvec3 totalEmissiveRadiance = emissive;\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#ifdef DOUBLE_SIDED\n\t\treflectedLight.indirectDiffuse += ( gl_FrontFacing ) ? vIndirectFront : vIndirectBack;\n\t#else\n\t\treflectedLight.indirectDiffuse += vIndirectFront;\n\t#endif\n\t#include \n\treflectedLight.indirectDiffuse *= BRDF_Diffuse_Lambert( diffuseColor.rgb );\n\t#ifdef DOUBLE_SIDED\n\t\treflectedLight.directDiffuse = ( gl_FrontFacing ) ? vLightFront : vLightBack;\n\t#else\n\t\treflectedLight.directDiffuse = vLightFront;\n\t#endif\n\treflectedLight.directDiffuse *= BRDF_Diffuse_Lambert( diffuseColor.rgb ) * getShadowMask();\n\t#include \n\tvec3 outgoingLight = reflectedLight.directDiffuse + reflectedLight.indirectDiffuse + totalEmissiveRadiance;\n\t#include \n\tgl_FragColor = vec4( outgoingLight, diffuseColor.a );\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n}",meshlambert_vert:"#define LAMBERT\nvarying vec3 vLightFront;\nvarying vec3 vIndirectFront;\n#ifdef DOUBLE_SIDED\n\tvarying vec3 vLightBack;\n\tvarying vec3 vIndirectBack;\n#endif\n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \nvoid main() {\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n}",meshmatcap_frag:"#define MATCAP\nuniform vec3 diffuse;\nuniform float opacity;\nuniform sampler2D matcap;\nvarying vec3 vViewPosition;\n#ifndef FLAT_SHADED\n\tvarying vec3 vNormal;\n#endif\n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \nvoid main() {\n\t#include \n\tvec4 diffuseColor = vec4( diffuse, opacity );\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\tvec3 viewDir = normalize( vViewPosition );\n\tvec3 x = normalize( vec3( viewDir.z, 0.0, - viewDir.x ) );\n\tvec3 y = cross( viewDir, x );\n\tvec2 uv = vec2( dot( x, normal ), dot( y, normal ) ) * 0.495 + 0.5;\n\t#ifdef USE_MATCAP\n\t\tvec4 matcapColor = texture2D( matcap, uv );\n\t\tmatcapColor = matcapTexelToLinear( matcapColor );\n\t#else\n\t\tvec4 matcapColor = vec4( 1.0 );\n\t#endif\n\tvec3 outgoingLight = diffuseColor.rgb * matcapColor.rgb;\n\tgl_FragColor = vec4( outgoingLight, diffuseColor.a );\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n}",meshmatcap_vert:"#define MATCAP\nvarying vec3 vViewPosition;\n#ifndef FLAT_SHADED\n\tvarying vec3 vNormal;\n#endif\n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \nvoid main() {\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#ifndef FLAT_SHADED\n\t\tvNormal = normalize( transformedNormal );\n\t#endif\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\tvViewPosition = - mvPosition.xyz;\n}",meshtoon_frag:"#define TOON\nuniform vec3 diffuse;\nuniform vec3 emissive;\nuniform float opacity;\n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \nvoid main() {\n\t#include \n\tvec4 diffuseColor = vec4( diffuse, opacity );\n\tReflectedLight reflectedLight = ReflectedLight( vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ) );\n\tvec3 totalEmissiveRadiance = emissive;\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\tvec3 outgoingLight = reflectedLight.directDiffuse + reflectedLight.indirectDiffuse + totalEmissiveRadiance;\n\tgl_FragColor = vec4( outgoingLight, diffuseColor.a );\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n}",meshtoon_vert:"#define TOON\nvarying vec3 vViewPosition;\n#ifndef FLAT_SHADED\n\tvarying vec3 vNormal;\n#endif\n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \nvoid main() {\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n#ifndef FLAT_SHADED\n\tvNormal = normalize( transformedNormal );\n#endif\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\tvViewPosition = - mvPosition.xyz;\n\t#include \n\t#include \n\t#include \n}",meshphong_frag:"#define PHONG\nuniform vec3 diffuse;\nuniform vec3 emissive;\nuniform vec3 specular;\nuniform float shininess;\nuniform float opacity;\n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \nvoid main() {\n\t#include \n\tvec4 diffuseColor = vec4( diffuse, opacity );\n\tReflectedLight reflectedLight = ReflectedLight( vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ) );\n\tvec3 totalEmissiveRadiance = emissive;\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\tvec3 outgoingLight = reflectedLight.directDiffuse + reflectedLight.indirectDiffuse + reflectedLight.directSpecular + reflectedLight.indirectSpecular + totalEmissiveRadiance;\n\t#include \n\tgl_FragColor = vec4( outgoingLight, diffuseColor.a );\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n}",meshphong_vert:"#define PHONG\nvarying vec3 vViewPosition;\n#ifndef FLAT_SHADED\n\tvarying vec3 vNormal;\n#endif\n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \nvoid main() {\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n#ifndef FLAT_SHADED\n\tvNormal = normalize( transformedNormal );\n#endif\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\tvViewPosition = - mvPosition.xyz;\n\t#include \n\t#include \n\t#include \n\t#include \n}",meshphysical_frag:"#define STANDARD\n#ifdef PHYSICAL\n\t#define REFLECTIVITY\n\t#define CLEARCOAT\n#endif\nuniform vec3 diffuse;\nuniform vec3 emissive;\nuniform float roughness;\nuniform float metalness;\nuniform float opacity;\n#ifdef USE_TRANSMISSION\n\tuniform float transmission;\n\tuniform float thickness;\n\tuniform vec3 attenuationColor;\n\tuniform float attenuationDistance;\n#endif\n#ifdef REFLECTIVITY\n\tuniform float reflectivity;\n#endif\n#ifdef CLEARCOAT\n\tuniform float clearcoat;\n\tuniform float clearcoatRoughness;\n#endif\n#ifdef USE_SHEEN\n\tuniform vec3 sheen;\n#endif\nvarying vec3 vViewPosition;\n#ifndef FLAT_SHADED\n\tvarying vec3 vNormal;\n\t#ifdef USE_TANGENT\n\t\tvarying vec3 vTangent;\n\t\tvarying vec3 vBitangent;\n\t#endif\n#endif\n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \nvoid main() {\n\t#include \n\tvec4 diffuseColor = vec4( diffuse, opacity );\n\tReflectedLight reflectedLight = ReflectedLight( vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ) );\n\tvec3 totalEmissiveRadiance = emissive;\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\tvec3 totalDiffuse = reflectedLight.directDiffuse + reflectedLight.indirectDiffuse;\n\tvec3 totalSpecular = reflectedLight.directSpecular + reflectedLight.indirectSpecular;\n\t#include \n\tvec3 outgoingLight = totalDiffuse + totalSpecular + totalEmissiveRadiance;\n\tgl_FragColor = vec4( outgoingLight, diffuseColor.a );\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n}",meshphysical_vert:"#define STANDARD\nvarying vec3 vViewPosition;\n#ifndef FLAT_SHADED\n\tvarying vec3 vNormal;\n\t#ifdef USE_TANGENT\n\t\tvarying vec3 vTangent;\n\t\tvarying vec3 vBitangent;\n\t#endif\n#endif\n#ifdef USE_TRANSMISSION\n\tvarying vec4 vWorldPosition;\n#endif\n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \nvoid main() {\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n#ifndef FLAT_SHADED\n\tvNormal = normalize( transformedNormal );\n\t#ifdef USE_TANGENT\n\t\tvTangent = normalize( transformedTangent );\n\t\tvBitangent = normalize( cross( vNormal, vTangent ) * tangent.w );\n\t#endif\n#endif\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\tvViewPosition = - mvPosition.xyz;\n\t#include \n\t#include \n\t#include \n#ifdef USE_TRANSMISSION\n\tvWorldPosition = worldPosition;\n#endif\n}",normal_frag:"#define NORMAL\nuniform float opacity;\n#if defined( FLAT_SHADED ) || defined( USE_BUMPMAP ) || defined( TANGENTSPACE_NORMALMAP )\n\tvarying vec3 vViewPosition;\n#endif\n#ifndef FLAT_SHADED\n\tvarying vec3 vNormal;\n\t#ifdef USE_TANGENT\n\t\tvarying vec3 vTangent;\n\t\tvarying vec3 vBitangent;\n\t#endif\n#endif\n#include \n#include \n#include \n#include \n#include \n#include \nvoid main() {\n\t#include \n\t#include \n\t#include \n\t#include \n\tgl_FragColor = vec4( packNormalToRGB( normal ), opacity );\n}",normal_vert:"#define NORMAL\n#if defined( FLAT_SHADED ) || defined( USE_BUMPMAP ) || defined( TANGENTSPACE_NORMALMAP )\n\tvarying vec3 vViewPosition;\n#endif\n#ifndef FLAT_SHADED\n\tvarying vec3 vNormal;\n\t#ifdef USE_TANGENT\n\t\tvarying vec3 vTangent;\n\t\tvarying vec3 vBitangent;\n\t#endif\n#endif\n#include \n#include \n#include \n#include \n#include \n#include \n#include \nvoid main() {\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n#ifndef FLAT_SHADED\n\tvNormal = normalize( transformedNormal );\n\t#ifdef USE_TANGENT\n\t\tvTangent = normalize( transformedTangent );\n\t\tvBitangent = normalize( cross( vNormal, vTangent ) * tangent.w );\n\t#endif\n#endif\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n#if defined( FLAT_SHADED ) || defined( USE_BUMPMAP ) || defined( TANGENTSPACE_NORMALMAP )\n\tvViewPosition = - mvPosition.xyz;\n#endif\n}",points_frag:"uniform vec3 diffuse;\nuniform float opacity;\n#include \n#include \n#include \n#include \n#include \n#include \nvoid main() {\n\t#include \n\tvec3 outgoingLight = vec3( 0.0 );\n\tvec4 diffuseColor = vec4( diffuse, opacity );\n\t#include \n\t#include \n\t#include \n\t#include \n\toutgoingLight = diffuseColor.rgb;\n\tgl_FragColor = vec4( outgoingLight, diffuseColor.a );\n\t#include \n\t#include \n\t#include \n\t#include \n}",points_vert:"uniform float size;\nuniform float scale;\n#include \n#include \n#include \n#include \n#include \n#include \nvoid main() {\n\t#include \n\t#include \n\t#include \n\t#include \n\tgl_PointSize = size;\n\t#ifdef USE_SIZEATTENUATION\n\t\tbool isPerspective = isPerspectiveMatrix( projectionMatrix );\n\t\tif ( isPerspective ) gl_PointSize *= ( scale / - mvPosition.z );\n\t#endif\n\t#include \n\t#include \n\t#include \n\t#include \n}",shadow_frag:"uniform vec3 color;\nuniform float opacity;\n#include \n#include \n#include \n#include \n#include \n#include \n#include \nvoid main() {\n\tgl_FragColor = vec4( color, opacity * ( 1.0 - getShadowMask() ) );\n\t#include \n\t#include \n\t#include \n}",shadow_vert:"#include \n#include \n#include \nvoid main() {\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n}",sprite_frag:"uniform vec3 diffuse;\nuniform float opacity;\n#include \n#include \n#include \n#include \n#include \n#include \n#include \nvoid main() {\n\t#include \n\tvec3 outgoingLight = vec3( 0.0 );\n\tvec4 diffuseColor = vec4( diffuse, opacity );\n\t#include \n\t#include \n\t#include \n\t#include \n\toutgoingLight = diffuseColor.rgb;\n\tgl_FragColor = vec4( outgoingLight, diffuseColor.a );\n\t#include \n\t#include \n\t#include \n}",sprite_vert:"uniform float rotation;\nuniform vec2 center;\n#include \n#include \n#include \n#include \n#include \nvoid main() {\n\t#include \n\tvec4 mvPosition = modelViewMatrix * vec4( 0.0, 0.0, 0.0, 1.0 );\n\tvec2 scale;\n\tscale.x = length( vec3( modelMatrix[ 0 ].x, modelMatrix[ 0 ].y, modelMatrix[ 0 ].z ) );\n\tscale.y = length( vec3( modelMatrix[ 1 ].x, modelMatrix[ 1 ].y, modelMatrix[ 1 ].z ) );\n\t#ifndef USE_SIZEATTENUATION\n\t\tbool isPerspective = isPerspectiveMatrix( projectionMatrix );\n\t\tif ( isPerspective ) scale *= - mvPosition.z;\n\t#endif\n\tvec2 alignedPosition = ( position.xy - ( center - vec2( 0.5 ) ) ) * scale;\n\tvec2 rotatedPosition;\n\trotatedPosition.x = cos( rotation ) * alignedPosition.x - sin( rotation ) * alignedPosition.y;\n\trotatedPosition.y = sin( rotation ) * alignedPosition.x + cos( rotation ) * alignedPosition.y;\n\tmvPosition.xy += rotatedPosition;\n\tgl_Position = projectionMatrix * mvPosition;\n\t#include \n\t#include \n\t#include \n}"},ui={common:{diffuse:{value:new Qe(16777215)},opacity:{value:1},map:{value:null},uvTransform:{value:new yt},uv2Transform:{value:new yt},alphaMap:{value:null}},specularmap:{specularMap:{value:null}},envmap:{envMap:{value:null},flipEnvMap:{value:-1},reflectivity:{value:1},refractionRatio:{value:.98},maxMipLevel:{value:0}},aomap:{aoMap:{value:null},aoMapIntensity:{value:1}},lightmap:{lightMap:{value:null},lightMapIntensity:{value:1}},emissivemap:{emissiveMap:{value:null}},bumpmap:{bumpMap:{value:null},bumpScale:{value:1}},normalmap:{normalMap:{value:null},normalScale:{value:new vt(1,1)}},displacementmap:{displacementMap:{value:null},displacementScale:{value:1},displacementBias:{value:0}},roughnessmap:{roughnessMap:{value:null}},metalnessmap:{metalnessMap:{value:null}},gradientmap:{gradientMap:{value:null}},fog:{fogDensity:{value:25e-5},fogNear:{value:1},fogFar:{value:2e3},fogColor:{value:new Qe(16777215)}},lights:{ambientLightColor:{value:[]},lightProbe:{value:[]},directionalLights:{value:[],properties:{direction:{},color:{}}},directionalLightShadows:{value:[],properties:{shadowBias:{},shadowNormalBias:{},shadowRadius:{},shadowMapSize:{}}},directionalShadowMap:{value:[]},directionalShadowMatrix:{value:[]},spotLights:{value:[],properties:{color:{},position:{},direction:{},distance:{},coneCos:{},penumbraCos:{},decay:{}}},spotLightShadows:{value:[],properties:{shadowBias:{},shadowNormalBias:{},shadowRadius:{},shadowMapSize:{}}},spotShadowMap:{value:[]},spotShadowMatrix:{value:[]},pointLights:{value:[],properties:{color:{},position:{},decay:{},distance:{}}},pointLightShadows:{value:[],properties:{shadowBias:{},shadowNormalBias:{},shadowRadius:{},shadowMapSize:{},shadowCameraNear:{},shadowCameraFar:{}}},pointShadowMap:{value:[]},pointShadowMatrix:{value:[]},hemisphereLights:{value:[],properties:{direction:{},skyColor:{},groundColor:{}}},rectAreaLights:{value:[],properties:{color:{},position:{},width:{},height:{}}},ltc_1:{value:null},ltc_2:{value:null}},points:{diffuse:{value:new Qe(16777215)},opacity:{value:1},size:{value:1},scale:{value:1},map:{value:null},alphaMap:{value:null},uvTransform:{value:new yt}},sprite:{diffuse:{value:new Qe(16777215)},opacity:{value:1},center:{value:new vt(.5,.5)},rotation:{value:0},map:{value:null},alphaMap:{value:null},uvTransform:{value:new yt}}},di={basic:{uniforms:jn([ui.common,ui.specularmap,ui.envmap,ui.aomap,ui.lightmap,ui.fog]),vertexShader:hi.meshbasic_vert,fragmentShader:hi.meshbasic_frag},lambert:{uniforms:jn([ui.common,ui.specularmap,ui.envmap,ui.aomap,ui.lightmap,ui.emissivemap,ui.fog,ui.lights,{emissive:{value:new Qe(0)}}]),vertexShader:hi.meshlambert_vert,fragmentShader:hi.meshlambert_frag},phong:{uniforms:jn([ui.common,ui.specularmap,ui.envmap,ui.aomap,ui.lightmap,ui.emissivemap,ui.bumpmap,ui.normalmap,ui.displacementmap,ui.fog,ui.lights,{emissive:{value:new Qe(0)},specular:{value:new Qe(1118481)},shininess:{value:30}}]),vertexShader:hi.meshphong_vert,fragmentShader:hi.meshphong_frag},standard:{uniforms:jn([ui.common,ui.envmap,ui.aomap,ui.lightmap,ui.emissivemap,ui.bumpmap,ui.normalmap,ui.displacementmap,ui.roughnessmap,ui.metalnessmap,ui.fog,ui.lights,{emissive:{value:new Qe(0)},roughness:{value:1},metalness:{value:0},envMapIntensity:{value:1}}]),vertexShader:hi.meshphysical_vert,fragmentShader:hi.meshphysical_frag},toon:{uniforms:jn([ui.common,ui.aomap,ui.lightmap,ui.emissivemap,ui.bumpmap,ui.normalmap,ui.displacementmap,ui.gradientmap,ui.fog,ui.lights,{emissive:{value:new Qe(0)}}]),vertexShader:hi.meshtoon_vert,fragmentShader:hi.meshtoon_frag},matcap:{uniforms:jn([ui.common,ui.bumpmap,ui.normalmap,ui.displacementmap,ui.fog,{matcap:{value:null}}]),vertexShader:hi.meshmatcap_vert,fragmentShader:hi.meshmatcap_frag},points:{uniforms:jn([ui.points,ui.fog]),vertexShader:hi.points_vert,fragmentShader:hi.points_frag},dashed:{uniforms:jn([ui.common,ui.fog,{scale:{value:1},dashSize:{value:1},totalSize:{value:2}}]),vertexShader:hi.linedashed_vert,fragmentShader:hi.linedashed_frag},depth:{uniforms:jn([ui.common,ui.displacementmap]),vertexShader:hi.depth_vert,fragmentShader:hi.depth_frag},normal:{uniforms:jn([ui.common,ui.bumpmap,ui.normalmap,ui.displacementmap,{opacity:{value:1}}]),vertexShader:hi.normal_vert,fragmentShader:hi.normal_frag},sprite:{uniforms:jn([ui.sprite,ui.fog]),vertexShader:hi.sprite_vert,fragmentShader:hi.sprite_frag},background:{uniforms:{uvTransform:{value:new yt},t2D:{value:null}},vertexShader:hi.background_vert,fragmentShader:hi.background_frag},cube:{uniforms:jn([ui.envmap,{opacity:{value:1}}]),vertexShader:hi.cube_vert,fragmentShader:hi.cube_frag},equirect:{uniforms:{tEquirect:{value:null}},vertexShader:hi.equirect_vert,fragmentShader:hi.equirect_frag},distanceRGBA:{uniforms:jn([ui.common,ui.displacementmap,{referencePosition:{value:new Rt},nearDistance:{value:1},farDistance:{value:1e3}}]),vertexShader:hi.distanceRGBA_vert,fragmentShader:hi.distanceRGBA_frag},shadow:{uniforms:jn([ui.lights,ui.fog,{color:{value:new Qe(0)},opacity:{value:1}}]),vertexShader:hi.shadow_vert,fragmentShader:hi.shadow_frag}};function pi(t,e,n,i,r){const s=new Qe(0);let a,o,c=0,h=null,u=0,d=null;function p(t,e){n.buffers.color.setClear(t.r,t.g,t.b,e,r)}return{getClearColor:function(){return s},setClearColor:function(t,e=1){s.set(t),c=e,p(s,c)},getClearAlpha:function(){return c},setClearAlpha:function(t){c=t,p(s,c)},render:function(n,r){let m=!1,f=!0===r.isScene?r.background:null;f&&f.isTexture&&(f=e.get(f));const g=t.xr,v=g.getSession&&g.getSession();v&&"additive"===v.environmentBlendMode&&(f=null),null===f?p(s,c):f&&f.isColor&&(p(f,1),m=!0),(t.autoClear||m)&&t.clear(t.autoClearColor,t.autoClearDepth,t.autoClearStencil),f&&(f.isCubeTexture||f.mapping===l)?(void 0===o&&(o=new Gn(new Vn(1,1,1),new Xn({name:"BackgroundCubeMaterial",uniforms:Wn(di.cube.uniforms),vertexShader:di.cube.vertexShader,fragmentShader:di.cube.fragmentShader,side:1,depthTest:!1,depthWrite:!1,fog:!1})),o.geometry.deleteAttribute("normal"),o.geometry.deleteAttribute("uv"),o.onBeforeRender=function(t,e,n){this.matrixWorld.copyPosition(n.matrixWorld)},Object.defineProperty(o.material,"envMap",{get:function(){return this.uniforms.envMap.value}}),i.update(o)),o.material.uniforms.envMap.value=f,o.material.uniforms.flipEnvMap.value=f.isCubeTexture&&f._needsFlipEnvMap?-1:1,h===f&&u===f.version&&d===t.toneMapping||(o.material.needsUpdate=!0,h=f,u=f.version,d=t.toneMapping),n.unshift(o,o.geometry,o.material,0,0,null)):f&&f.isTexture&&(void 0===a&&(a=new Gn(new ci(2,2),new Xn({name:"BackgroundMaterial",uniforms:Wn(di.background.uniforms),vertexShader:di.background.vertexShader,fragmentShader:di.background.fragmentShader,side:0,depthTest:!1,depthWrite:!1,fog:!1})),a.geometry.deleteAttribute("normal"),Object.defineProperty(a.material,"map",{get:function(){return this.uniforms.t2D.value}}),i.update(a)),a.material.uniforms.t2D.value=f,!0===f.matrixAutoUpdate&&f.updateMatrix(),a.material.uniforms.uvTransform.value.copy(f.matrix),h===f&&u===f.version&&d===t.toneMapping||(a.material.needsUpdate=!0,h=f,u=f.version,d=t.toneMapping),n.unshift(a,a.geometry,a.material,0,0,null))}}}function mi(t,e,n,i){const r=t.getParameter(34921),s=i.isWebGL2?null:e.get("OES_vertex_array_object"),a=i.isWebGL2||null!==s,o={},l=d(null);let c=l;function h(e){return i.isWebGL2?t.bindVertexArray(e):s.bindVertexArrayOES(e)}function u(e){return i.isWebGL2?t.deleteVertexArray(e):s.deleteVertexArrayOES(e)}function d(t){const e=[],n=[],i=[];for(let t=0;t=0){const s=l[e];if(void 0!==s){const e=s.normalized,r=s.itemSize,a=n.get(s);if(void 0===a)continue;const l=a.buffer,c=a.type,h=a.bytesPerElement;if(s.isInterleavedBufferAttribute){const n=s.data,a=n.stride,u=s.offset;n&&n.isInstancedInterleavedBuffer?(f(i,n.meshPerAttribute),void 0===o._maxInstanceCount&&(o._maxInstanceCount=n.meshPerAttribute*n.count)):m(i),t.bindBuffer(34962,l),v(i,r,c,e,a*h,u*h)}else s.isInstancedBufferAttribute?(f(i,s.meshPerAttribute),void 0===o._maxInstanceCount&&(o._maxInstanceCount=s.meshPerAttribute*s.count)):m(i),t.bindBuffer(34962,l),v(i,r,c,e,0,0)}else if("instanceMatrix"===e){const e=n.get(r.instanceMatrix);if(void 0===e)continue;const s=e.buffer,a=e.type;f(i+0,1),f(i+1,1),f(i+2,1),f(i+3,1),t.bindBuffer(34962,s),t.vertexAttribPointer(i+0,4,a,!1,64,0),t.vertexAttribPointer(i+1,4,a,!1,64,16),t.vertexAttribPointer(i+2,4,a,!1,64,32),t.vertexAttribPointer(i+3,4,a,!1,64,48)}else if("instanceColor"===e){const e=n.get(r.instanceColor);if(void 0===e)continue;const s=e.buffer,a=e.type;f(i,1),t.bindBuffer(34962,s),t.vertexAttribPointer(i,3,a,!1,12,0)}else if(void 0!==h){const n=h[e];if(void 0!==n)switch(n.length){case 2:t.vertexAttrib2fv(i,n);break;case 3:t.vertexAttrib3fv(i,n);break;case 4:t.vertexAttrib4fv(i,n);break;default:t.vertexAttrib1fv(i,n)}}}}g()}(r,l,u,y),null!==x&&t.bindBuffer(34963,n.get(x).buffer))},reset:y,resetDefaultState:x,dispose:function(){y();for(const t in o){const e=o[t];for(const t in e){const n=e[t];for(const t in n)u(n[t].object),delete n[t];delete e[t]}delete o[t]}},releaseStatesOfGeometry:function(t){if(void 0===o[t.id])return;const e=o[t.id];for(const t in e){const n=e[t];for(const t in n)u(n[t].object),delete n[t];delete e[t]}delete o[t.id]},releaseStatesOfProgram:function(t){for(const e in o){const n=o[e];if(void 0===n[t.id])continue;const i=n[t.id];for(const t in i)u(i[t].object),delete i[t];delete n[t.id]}},initAttributes:p,enableAttribute:m,disableUnusedAttributes:g}}function fi(t,e,n,i){const r=i.isWebGL2;let s;this.setMode=function(t){s=t},this.render=function(e,i){t.drawArrays(s,e,i),n.update(i,s,1)},this.renderInstances=function(i,a,o){if(0===o)return;let l,c;if(r)l=t,c="drawArraysInstanced";else if(l=e.get("ANGLE_instanced_arrays"),c="drawArraysInstancedANGLE",null===l)return void console.error("THREE.WebGLBufferRenderer: using THREE.InstancedBufferGeometry but hardware does not support extension ANGLE_instanced_arrays.");l[c](s,i,a,o),n.update(a,s,o)}}function gi(t,e,n){let i;function r(e){if("highp"===e){if(t.getShaderPrecisionFormat(35633,36338).precision>0&&t.getShaderPrecisionFormat(35632,36338).precision>0)return"highp";e="mediump"}return"mediump"===e&&t.getShaderPrecisionFormat(35633,36337).precision>0&&t.getShaderPrecisionFormat(35632,36337).precision>0?"mediump":"lowp"}const s="undefined"!=typeof WebGL2RenderingContext&&t instanceof WebGL2RenderingContext||"undefined"!=typeof WebGL2ComputeRenderingContext&&t instanceof WebGL2ComputeRenderingContext;let a=void 0!==n.precision?n.precision:"highp";const o=r(a);o!==a&&(console.warn("THREE.WebGLRenderer:",a,"not supported, using",o,"instead."),a=o);const l=s||e.has("WEBGL_draw_buffers"),c=!0===n.logarithmicDepthBuffer,h=t.getParameter(34930),u=t.getParameter(35660),d=t.getParameter(3379),p=t.getParameter(34076),m=t.getParameter(34921),f=t.getParameter(36347),g=t.getParameter(36348),v=t.getParameter(36349),y=u>0,x=s||e.has("OES_texture_float");return{isWebGL2:s,drawBuffers:l,getMaxAnisotropy:function(){if(void 0!==i)return i;if(!0===e.has("EXT_texture_filter_anisotropic")){const n=e.get("EXT_texture_filter_anisotropic");i=t.getParameter(n.MAX_TEXTURE_MAX_ANISOTROPY_EXT)}else i=0;return i},getMaxPrecision:r,precision:a,logarithmicDepthBuffer:c,maxTextures:h,maxVertexTextures:u,maxTextureSize:d,maxCubemapSize:p,maxAttributes:m,maxVertexUniforms:f,maxVaryings:g,maxFragmentUniforms:v,vertexTextures:y,floatFragmentTextures:x,floatVertexTextures:y&&x,maxSamples:s?t.getParameter(36183):0}}function vi(t){const e=this;let n=null,i=0,r=!1,s=!1;const a=new ii,o=new yt,l={value:null,needsUpdate:!1};function c(){l.value!==n&&(l.value=n,l.needsUpdate=i>0),e.numPlanes=i,e.numIntersection=0}function h(t,n,i,r){const s=null!==t?t.length:0;let c=null;if(0!==s){if(c=l.value,!0!==r||null===c){const e=i+4*s,r=n.matrixWorldInverse;o.getNormalMatrix(r),(null===c||c.length0){const a=t.getRenderTarget(),o=new $n(s.height/2);return o.fromEquirectangularTexture(t,r),e.set(r,o),t.setRenderTarget(a),r.addEventListener("dispose",i),n(o.texture,r.mapping)}return null}}}return r},dispose:function(){e=new WeakMap}}}function xi(t){const e={};function n(n){if(void 0!==e[n])return e[n];let i;switch(n){case"WEBGL_depth_texture":i=t.getExtension("WEBGL_depth_texture")||t.getExtension("MOZ_WEBGL_depth_texture")||t.getExtension("WEBKIT_WEBGL_depth_texture");break;case"EXT_texture_filter_anisotropic":i=t.getExtension("EXT_texture_filter_anisotropic")||t.getExtension("MOZ_EXT_texture_filter_anisotropic")||t.getExtension("WEBKIT_EXT_texture_filter_anisotropic");break;case"WEBGL_compressed_texture_s3tc":i=t.getExtension("WEBGL_compressed_texture_s3tc")||t.getExtension("MOZ_WEBGL_compressed_texture_s3tc")||t.getExtension("WEBKIT_WEBGL_compressed_texture_s3tc");break;case"WEBGL_compressed_texture_pvrtc":i=t.getExtension("WEBGL_compressed_texture_pvrtc")||t.getExtension("WEBKIT_WEBGL_compressed_texture_pvrtc");break;default:i=t.getExtension(n)}return e[n]=i,i}return{has:function(t){return null!==n(t)},init:function(t){t.isWebGL2?n("EXT_color_buffer_float"):(n("WEBGL_depth_texture"),n("OES_texture_float"),n("OES_texture_half_float"),n("OES_texture_half_float_linear"),n("OES_standard_derivatives"),n("OES_element_index_uint"),n("OES_vertex_array_object"),n("ANGLE_instanced_arrays")),n("OES_texture_float_linear"),n("EXT_color_buffer_half_float")},get:function(t){const e=n(t);return null===e&&console.warn("THREE.WebGLRenderer: "+t+" extension not supported."),e}}}function _i(t,e,n,i){const r={},s=new WeakMap;function a(t){const o=t.target;null!==o.index&&e.remove(o.index);for(const t in o.attributes)e.remove(o.attributes[t]);o.removeEventListener("dispose",a),delete r[o.id];const l=s.get(o);l&&(e.remove(l),s.delete(o)),i.releaseStatesOfGeometry(o),!0===o.isInstancedBufferGeometry&&delete o._maxInstanceCount,n.memory.geometries--}function o(t){const n=[],i=t.index,r=t.attributes.position;let a=0;if(null!==i){const t=i.array;a=i.version;for(let e=0,i=t.length;e65535?cn:on)(n,1);o.version=a;const l=s.get(t);l&&e.remove(l),s.set(t,o)}return{get:function(t,e){return!0===r[e.id]||(e.addEventListener("dispose",a),r[e.id]=!0,n.memory.geometries++),e},update:function(t){const n=t.attributes;for(const t in n)e.update(n[t],34962);const i=t.morphAttributes;for(const t in i){const n=i[t];for(let t=0,i=n.length;t0)return t;const r=e*n;let s=Ii[r];if(void 0===s&&(s=new Float32Array(r),Ii[r]=s),0!==e){i.toArray(s,0);for(let i=1,r=0;i!==e;++i)r+=n,t[i].toArray(s,r)}return s}function Hi(t,e){if(t.length!==e.length)return!1;for(let n=0,i=t.length;n/gm;function kr(t){return t.replace(Gr,Vr)}function Vr(t,e){const n=hi[e];if(void 0===n)throw new Error("Can not resolve #include <"+e+">");return kr(n)}const Wr=/#pragma unroll_loop[\s]+?for \( int i \= (\d+)\; i < (\d+)\; i \+\+ \) \{([\s\S]+?)(?=\})\}/g,jr=/#pragma unroll_loop_start\s+for\s*\(\s*int\s+i\s*=\s*(\d+)\s*;\s*i\s*<\s*(\d+)\s*;\s*i\s*\+\+\s*\)\s*{([\s\S]+?)}\s+#pragma unroll_loop_end/g;function qr(t){return t.replace(jr,Yr).replace(Wr,Xr)}function Xr(t,e,n,i){return console.warn("WebGLProgram: #pragma unroll_loop shader syntax is deprecated. Please use #pragma unroll_loop_start syntax instead."),Yr(t,e,n,i)}function Yr(t,e,n,i){let r="";for(let t=parseInt(e);t0?t.gammaFactor:1,v=n.isWebGL2?"":function(t){return[t.extensionDerivatives||t.envMapCubeUV||t.bumpMap||t.tangentSpaceNormalMap||t.clearcoatNormalMap||t.flatShading||"physical"===t.shaderID?"#extension GL_OES_standard_derivatives : enable":"",(t.extensionFragDepth||t.logarithmicDepthBuffer)&&t.rendererExtensionFragDepth?"#extension GL_EXT_frag_depth : enable":"",t.extensionDrawBuffers&&t.rendererExtensionDrawBuffers?"#extension GL_EXT_draw_buffers : require":"",(t.extensionShaderTextureLOD||t.envMap||t.transmission>0)&&t.rendererExtensionShaderTextureLod?"#extension GL_EXT_shader_texture_lod : enable":""].filter(Or).join("\n")}(n),y=function(t){const e=[];for(const n in t){const i=t[n];!1!==i&&e.push("#define "+n+" "+i)}return e.join("\n")}(o),x=a.createProgram();let _,b,M=n.glslVersion?"#version "+n.glslVersion+"\n":"";n.isRawShaderMaterial?(_=[y].filter(Or).join("\n"),_.length>0&&(_+="\n"),b=[v,y].filter(Or).join("\n"),b.length>0&&(b+="\n")):(_=[Jr(n),"#define SHADER_NAME "+n.shaderName,y,n.instancing?"#define USE_INSTANCING":"",n.instancingColor?"#define USE_INSTANCING_COLOR":"",n.supportsVertexTextures?"#define VERTEX_TEXTURES":"","#define GAMMA_FACTOR "+g,"#define MAX_BONES "+n.maxBones,n.useFog&&n.fog?"#define USE_FOG":"",n.useFog&&n.fogExp2?"#define FOG_EXP2":"",n.map?"#define USE_MAP":"",n.envMap?"#define USE_ENVMAP":"",n.envMap?"#define "+m:"",n.lightMap?"#define USE_LIGHTMAP":"",n.aoMap?"#define USE_AOMAP":"",n.emissiveMap?"#define USE_EMISSIVEMAP":"",n.bumpMap?"#define USE_BUMPMAP":"",n.normalMap?"#define USE_NORMALMAP":"",n.normalMap&&n.objectSpaceNormalMap?"#define OBJECTSPACE_NORMALMAP":"",n.normalMap&&n.tangentSpaceNormalMap?"#define TANGENTSPACE_NORMALMAP":"",n.clearcoatMap?"#define USE_CLEARCOATMAP":"",n.clearcoatRoughnessMap?"#define USE_CLEARCOAT_ROUGHNESSMAP":"",n.clearcoatNormalMap?"#define USE_CLEARCOAT_NORMALMAP":"",n.displacementMap&&n.supportsVertexTextures?"#define USE_DISPLACEMENTMAP":"",n.specularMap?"#define USE_SPECULARMAP":"",n.roughnessMap?"#define USE_ROUGHNESSMAP":"",n.metalnessMap?"#define USE_METALNESSMAP":"",n.alphaMap?"#define USE_ALPHAMAP":"",n.transmission?"#define USE_TRANSMISSION":"",n.transmissionMap?"#define USE_TRANSMISSIONMAP":"",n.thicknessMap?"#define USE_THICKNESSMAP":"",n.vertexTangents?"#define USE_TANGENT":"",n.vertexColors?"#define USE_COLOR":"",n.vertexAlphas?"#define USE_COLOR_ALPHA":"",n.vertexUvs?"#define USE_UV":"",n.uvsVertexOnly?"#define UVS_VERTEX_ONLY":"",n.flatShading?"#define FLAT_SHADED":"",n.skinning?"#define USE_SKINNING":"",n.useVertexTexture?"#define BONE_TEXTURE":"",n.morphTargets?"#define USE_MORPHTARGETS":"",n.morphNormals&&!1===n.flatShading?"#define USE_MORPHNORMALS":"",n.doubleSided?"#define DOUBLE_SIDED":"",n.flipSided?"#define FLIP_SIDED":"",n.shadowMapEnabled?"#define USE_SHADOWMAP":"",n.shadowMapEnabled?"#define "+d:"",n.sizeAttenuation?"#define USE_SIZEATTENUATION":"",n.logarithmicDepthBuffer?"#define USE_LOGDEPTHBUF":"",n.logarithmicDepthBuffer&&n.rendererExtensionFragDepth?"#define USE_LOGDEPTHBUF_EXT":"","uniform mat4 modelMatrix;","uniform mat4 modelViewMatrix;","uniform mat4 projectionMatrix;","uniform mat4 viewMatrix;","uniform mat3 normalMatrix;","uniform vec3 cameraPosition;","uniform bool isOrthographic;","#ifdef USE_INSTANCING","\tattribute mat4 instanceMatrix;","#endif","#ifdef USE_INSTANCING_COLOR","\tattribute vec3 instanceColor;","#endif","attribute vec3 position;","attribute vec3 normal;","attribute vec2 uv;","#ifdef USE_TANGENT","\tattribute vec4 tangent;","#endif","#if defined( USE_COLOR_ALPHA )","\tattribute vec4 color;","#elif defined( USE_COLOR )","\tattribute vec3 color;","#endif","#ifdef USE_MORPHTARGETS","\tattribute vec3 morphTarget0;","\tattribute vec3 morphTarget1;","\tattribute vec3 morphTarget2;","\tattribute vec3 morphTarget3;","\t#ifdef USE_MORPHNORMALS","\t\tattribute vec3 morphNormal0;","\t\tattribute vec3 morphNormal1;","\t\tattribute vec3 morphNormal2;","\t\tattribute vec3 morphNormal3;","\t#else","\t\tattribute vec3 morphTarget4;","\t\tattribute vec3 morphTarget5;","\t\tattribute vec3 morphTarget6;","\t\tattribute vec3 morphTarget7;","\t#endif","#endif","#ifdef USE_SKINNING","\tattribute vec4 skinIndex;","\tattribute vec4 skinWeight;","#endif","\n"].filter(Or).join("\n"),b=[v,Jr(n),"#define SHADER_NAME "+n.shaderName,y,n.alphaTest?"#define ALPHATEST "+n.alphaTest+(n.alphaTest%1?"":".0"):"","#define GAMMA_FACTOR "+g,n.useFog&&n.fog?"#define USE_FOG":"",n.useFog&&n.fogExp2?"#define FOG_EXP2":"",n.map?"#define USE_MAP":"",n.matcap?"#define USE_MATCAP":"",n.envMap?"#define USE_ENVMAP":"",n.envMap?"#define "+p:"",n.envMap?"#define "+m:"",n.envMap?"#define "+f:"",n.lightMap?"#define USE_LIGHTMAP":"",n.aoMap?"#define USE_AOMAP":"",n.emissiveMap?"#define USE_EMISSIVEMAP":"",n.bumpMap?"#define USE_BUMPMAP":"",n.normalMap?"#define USE_NORMALMAP":"",n.normalMap&&n.objectSpaceNormalMap?"#define OBJECTSPACE_NORMALMAP":"",n.normalMap&&n.tangentSpaceNormalMap?"#define TANGENTSPACE_NORMALMAP":"",n.clearcoatMap?"#define USE_CLEARCOATMAP":"",n.clearcoatRoughnessMap?"#define USE_CLEARCOAT_ROUGHNESSMAP":"",n.clearcoatNormalMap?"#define USE_CLEARCOAT_NORMALMAP":"",n.specularMap?"#define USE_SPECULARMAP":"",n.roughnessMap?"#define USE_ROUGHNESSMAP":"",n.metalnessMap?"#define USE_METALNESSMAP":"",n.alphaMap?"#define USE_ALPHAMAP":"",n.sheen?"#define USE_SHEEN":"",n.transmission?"#define USE_TRANSMISSION":"",n.transmissionMap?"#define USE_TRANSMISSIONMAP":"",n.thicknessMap?"#define USE_THICKNESSMAP":"",n.vertexTangents?"#define USE_TANGENT":"",n.vertexColors||n.instancingColor?"#define USE_COLOR":"",n.vertexAlphas?"#define USE_COLOR_ALPHA":"",n.vertexUvs?"#define USE_UV":"",n.uvsVertexOnly?"#define UVS_VERTEX_ONLY":"",n.gradientMap?"#define USE_GRADIENTMAP":"",n.flatShading?"#define FLAT_SHADED":"",n.doubleSided?"#define DOUBLE_SIDED":"",n.flipSided?"#define FLIP_SIDED":"",n.shadowMapEnabled?"#define USE_SHADOWMAP":"",n.shadowMapEnabled?"#define "+d:"",n.premultipliedAlpha?"#define PREMULTIPLIED_ALPHA":"",n.physicallyCorrectLights?"#define PHYSICALLY_CORRECT_LIGHTS":"",n.logarithmicDepthBuffer?"#define USE_LOGDEPTHBUF":"",n.logarithmicDepthBuffer&&n.rendererExtensionFragDepth?"#define USE_LOGDEPTHBUF_EXT":"",(n.extensionShaderTextureLOD||n.envMap)&&n.rendererExtensionShaderTextureLod?"#define TEXTURE_LOD_EXT":"","uniform mat4 viewMatrix;","uniform vec3 cameraPosition;","uniform bool isOrthographic;",0!==n.toneMapping?"#define TONE_MAPPING":"",0!==n.toneMapping?hi.tonemapping_pars_fragment:"",0!==n.toneMapping?Fr("toneMapping",n.toneMapping):"",n.dithering?"#define DITHERING":"",hi.encodings_pars_fragment,n.map?Br("mapTexelToLinear",n.mapEncoding):"",n.matcap?Br("matcapTexelToLinear",n.matcapEncoding):"",n.envMap?Br("envMapTexelToLinear",n.envMapEncoding):"",n.emissiveMap?Br("emissiveMapTexelToLinear",n.emissiveMapEncoding):"",n.lightMap?Br("lightMapTexelToLinear",n.lightMapEncoding):"",zr("linearToOutputTexel",n.outputEncoding),n.depthPacking?"#define DEPTH_PACKING "+n.depthPacking:"","\n"].filter(Or).join("\n")),h=kr(h),h=Hr(h,n),h=Ur(h,n),u=kr(u),u=Hr(u,n),u=Ur(u,n),h=qr(h),u=qr(u),n.isWebGL2&&!0!==n.isRawShaderMaterial&&(M="#version 300 es\n",_=["#define attribute in","#define varying out","#define texture2D texture"].join("\n")+"\n"+_,b=["#define varying in",n.glslVersion===it?"":"out highp vec4 pc_fragColor;",n.glslVersion===it?"":"#define gl_FragColor pc_fragColor","#define gl_FragDepthEXT gl_FragDepth","#define texture2D texture","#define textureCube texture","#define texture2DProj textureProj","#define texture2DLodEXT textureLod","#define texture2DProjLodEXT textureProjLod","#define textureCubeLodEXT textureLod","#define texture2DGradEXT textureGrad","#define texture2DProjGradEXT textureProjGrad","#define textureCubeGradEXT textureGrad"].join("\n")+"\n"+b);const w=M+b+u,S=Pr(a,35633,M+_+h),T=Pr(a,35632,w);if(a.attachShader(x,S),a.attachShader(x,T),void 0!==n.index0AttributeName?a.bindAttribLocation(x,0,n.index0AttributeName):!0===n.morphTargets&&a.bindAttribLocation(x,0,"position"),a.linkProgram(x),t.debug.checkShaderErrors){const t=a.getProgramInfoLog(x).trim(),e=a.getShaderInfoLog(S).trim(),n=a.getShaderInfoLog(T).trim();let i=!0,r=!0;if(!1===a.getProgramParameter(x,35714)){i=!1;const e=Nr(a,S,"vertex"),n=Nr(a,T,"fragment");console.error("THREE.WebGLProgram: shader error: ",a.getError(),"35715",a.getProgramParameter(x,35715),"gl.getProgramInfoLog",t,e,n)}else""!==t?console.warn("THREE.WebGLProgram: gl.getProgramInfoLog()",t):""!==e&&""!==n||(r=!1);r&&(this.diagnostics={runnable:i,programLog:t,vertexShader:{log:e,prefix:_},fragmentShader:{log:n,prefix:b}})}let E,A;return a.deleteShader(S),a.deleteShader(T),this.getUniforms=function(){return void 0===E&&(E=new Cr(a,x)),E},this.getAttributes=function(){return void 0===A&&(A=function(t,e){const n={},i=t.getProgramParameter(e,35721);for(let r=0;r0,maxBones:S,useVertexTexture:u,morphTargets:r.morphTargets,morphNormals:r.morphNormals,numDirLights:a.directional.length,numPointLights:a.point.length,numSpotLights:a.spot.length,numRectAreaLights:a.rectArea.length,numHemiLights:a.hemi.length,numDirLightShadows:a.directionalShadowMap.length,numPointLightShadows:a.pointShadowMap.length,numSpotLightShadows:a.spotShadowMap.length,numClippingPlanes:s.numPlanes,numClipIntersection:s.numIntersection,dithering:r.dithering,shadowMapEnabled:t.shadowMap.enabled&&g.length>0,shadowMapType:t.shadowMap.type,toneMapping:r.toneMapped?t.toneMapping:0,physicallyCorrectLights:t.physicallyCorrectLights,premultipliedAlpha:r.premultipliedAlpha,alphaTest:r.alphaTest,doubleSided:2===r.side,flipSided:1===r.side,depthPacking:void 0!==r.depthPacking&&r.depthPacking,index0AttributeName:r.index0AttributeName,extensionDerivatives:r.extensions&&r.extensions.derivatives,extensionFragDepth:r.extensions&&r.extensions.fragDepth,extensionDrawBuffers:r.extensions&&r.extensions.drawBuffers,extensionShaderTextureLOD:r.extensions&&r.extensions.shaderTextureLOD,rendererExtensionFragDepth:o||n.has("EXT_frag_depth"),rendererExtensionDrawBuffers:o||n.has("WEBGL_draw_buffers"),rendererExtensionShaderTextureLod:o||n.has("EXT_shader_texture_lod"),customProgramCacheKey:r.customProgramCacheKey()}},getProgramCacheKey:function(e){const n=[];if(e.shaderID?n.push(e.shaderID):(n.push(e.fragmentShader),n.push(e.vertexShader)),void 0!==e.defines)for(const t in e.defines)n.push(t),n.push(e.defines[t]);if(!1===e.isRawShaderMaterial){for(let t=0;t0?r.push(h):!0===n.transparent?s.push(h):i.push(h)},unshift:function(t,e,n,a,l,c){const h=o(t,e,n,a,l,c);n.transmission>0?r.unshift(h):!0===n.transparent?s.unshift(h):i.unshift(h)},finish:function(){for(let t=n,i=e.length;t1&&i.sort(t||$r),r.length>1&&r.sort(e||ts),s.length>1&&s.sort(e||ts)}}}function ns(t){let e=new WeakMap;return{get:function(n,i){let r;return!1===e.has(n)?(r=new es(t),e.set(n,[r])):i>=e.get(n).length?(r=new es(t),e.get(n).push(r)):r=e.get(n)[i],r},dispose:function(){e=new WeakMap}}}function is(){const t={};return{get:function(e){if(void 0!==t[e.id])return t[e.id];let n;switch(e.type){case"DirectionalLight":n={direction:new Rt,color:new Qe};break;case"SpotLight":n={position:new Rt,direction:new Rt,color:new Qe,distance:0,coneCos:0,penumbraCos:0,decay:0};break;case"PointLight":n={position:new Rt,color:new Qe,distance:0,decay:0};break;case"HemisphereLight":n={direction:new Rt,skyColor:new Qe,groundColor:new Qe};break;case"RectAreaLight":n={color:new Qe,position:new Rt,halfWidth:new Rt,halfHeight:new Rt}}return t[e.id]=n,n}}}let rs=0;function ss(t,e){return(e.castShadow?1:0)-(t.castShadow?1:0)}function as(t,e){const n=new is,i=function(){const t={};return{get:function(e){if(void 0!==t[e.id])return t[e.id];let n;switch(e.type){case"DirectionalLight":case"SpotLight":n={shadowBias:0,shadowNormalBias:0,shadowRadius:1,shadowMapSize:new vt};break;case"PointLight":n={shadowBias:0,shadowNormalBias:0,shadowRadius:1,shadowMapSize:new vt,shadowCameraNear:1,shadowCameraFar:1e3}}return t[e.id]=n,n}}}(),r={version:0,hash:{directionalLength:-1,pointLength:-1,spotLength:-1,rectAreaLength:-1,hemiLength:-1,numDirectionalShadows:-1,numPointShadows:-1,numSpotShadows:-1},ambient:[0,0,0],probe:[],directional:[],directionalShadow:[],directionalShadowMap:[],directionalShadowMatrix:[],spot:[],spotShadow:[],spotShadowMap:[],spotShadowMatrix:[],rectArea:[],rectAreaLTC1:null,rectAreaLTC2:null,point:[],pointShadow:[],pointShadowMap:[],pointShadowMatrix:[],hemi:[]};for(let t=0;t<9;t++)r.probe.push(new Rt);const s=new Rt,a=new ae,o=new ae;return{setup:function(s){let a=0,o=0,l=0;for(let t=0;t<9;t++)r.probe[t].set(0,0,0);let c=0,h=0,u=0,d=0,p=0,m=0,f=0,g=0;s.sort(ss);for(let t=0,e=s.length;t0&&(e.isWebGL2||!0===t.has("OES_texture_float_linear")?(r.rectAreaLTC1=ui.LTC_FLOAT_1,r.rectAreaLTC2=ui.LTC_FLOAT_2):!0===t.has("OES_texture_half_float_linear")?(r.rectAreaLTC1=ui.LTC_HALF_1,r.rectAreaLTC2=ui.LTC_HALF_2):console.error("THREE.WebGLRenderer: Unable to use RectAreaLight. Missing WebGL extensions.")),r.ambient[0]=a,r.ambient[1]=o,r.ambient[2]=l;const v=r.hash;v.directionalLength===c&&v.pointLength===h&&v.spotLength===u&&v.rectAreaLength===d&&v.hemiLength===p&&v.numDirectionalShadows===m&&v.numPointShadows===f&&v.numSpotShadows===g||(r.directional.length=c,r.spot.length=u,r.rectArea.length=d,r.point.length=h,r.hemi.length=p,r.directionalShadow.length=m,r.directionalShadowMap.length=m,r.pointShadow.length=f,r.pointShadowMap.length=f,r.spotShadow.length=g,r.spotShadowMap.length=g,r.directionalShadowMatrix.length=m,r.pointShadowMatrix.length=f,r.spotShadowMatrix.length=g,v.directionalLength=c,v.pointLength=h,v.spotLength=u,v.rectAreaLength=d,v.hemiLength=p,v.numDirectionalShadows=m,v.numPointShadows=f,v.numSpotShadows=g,r.version=rs++)},setupView:function(t,e){let n=0,i=0,l=0,c=0,h=0;const u=e.matrixWorldInverse;for(let e=0,d=t.length;e=n.get(i).length?(s=new os(t,e),n.get(i).push(s)):s=n.get(i)[r],s},dispose:function(){n=new WeakMap}}}class cs extends We{constructor(t){super(),this.type="MeshDepthMaterial",this.depthPacking=3200,this.morphTargets=!1,this.map=null,this.alphaMap=null,this.displacementMap=null,this.displacementScale=1,this.displacementBias=0,this.wireframe=!1,this.wireframeLinewidth=1,this.fog=!1,this.setValues(t)}copy(t){return super.copy(t),this.depthPacking=t.depthPacking,this.morphTargets=t.morphTargets,this.map=t.map,this.alphaMap=t.alphaMap,this.displacementMap=t.displacementMap,this.displacementScale=t.displacementScale,this.displacementBias=t.displacementBias,this.wireframe=t.wireframe,this.wireframeLinewidth=t.wireframeLinewidth,this}}cs.prototype.isMeshDepthMaterial=!0;class hs extends We{constructor(t){super(),this.type="MeshDistanceMaterial",this.referencePosition=new Rt,this.nearDistance=1,this.farDistance=1e3,this.morphTargets=!1,this.map=null,this.alphaMap=null,this.displacementMap=null,this.displacementScale=1,this.displacementBias=0,this.fog=!1,this.setValues(t)}copy(t){return super.copy(t),this.referencePosition.copy(t.referencePosition),this.nearDistance=t.nearDistance,this.farDistance=t.farDistance,this.morphTargets=t.morphTargets,this.map=t.map,this.alphaMap=t.alphaMap,this.displacementMap=t.displacementMap,this.displacementScale=t.displacementScale,this.displacementBias=t.displacementBias,this}}hs.prototype.isMeshDistanceMaterial=!0;function us(t,e,n){let i=new ai;const r=new vt,s=new vt,a=new St,o=[],l=[],c={},h=n.maxTextureSize,u={0:1,1:0,2:2},d=new Xn({defines:{SAMPLE_RATE:2/8,HALF_SAMPLE_RATE:1/8},uniforms:{shadow_pass:{value:null},resolution:{value:new vt},radius:{value:4}},vertexShader:"void main() {\n\tgl_Position = vec4( position, 1.0 );\n}",fragmentShader:"uniform sampler2D shadow_pass;\nuniform vec2 resolution;\nuniform float radius;\n#include \nvoid main() {\n\tfloat mean = 0.0;\n\tfloat squared_mean = 0.0;\n\tfloat depth = unpackRGBAToDepth( texture2D( shadow_pass, ( gl_FragCoord.xy ) / resolution ) );\n\tfor ( float i = -1.0; i < 1.0 ; i += SAMPLE_RATE) {\n\t\t#ifdef HORIZONTAL_PASS\n\t\t\tvec2 distribution = unpackRGBATo2Half( texture2D( shadow_pass, ( gl_FragCoord.xy + vec2( i, 0.0 ) * radius ) / resolution ) );\n\t\t\tmean += distribution.x;\n\t\t\tsquared_mean += distribution.y * distribution.y + distribution.x * distribution.x;\n\t\t#else\n\t\t\tfloat depth = unpackRGBAToDepth( texture2D( shadow_pass, ( gl_FragCoord.xy + vec2( 0.0, i ) * radius ) / resolution ) );\n\t\t\tmean += depth;\n\t\t\tsquared_mean += depth * depth;\n\t\t#endif\n\t}\n\tmean = mean * HALF_SAMPLE_RATE;\n\tsquared_mean = squared_mean * HALF_SAMPLE_RATE;\n\tfloat std_dev = sqrt( squared_mean - mean * mean );\n\tgl_FragColor = pack2HalfToRGBA( vec2( mean, std_dev ) );\n}"}),m=d.clone();m.defines.HORIZONTAL_PASS=1;const f=new wn;f.setAttribute("position",new en(new Float32Array([-1,-1,.5,3,-1,.5,-1,3,.5]),3));const v=new Gn(f,d),y=this;function x(n,i){const r=e.update(v);d.uniforms.shadow_pass.value=n.map.texture,d.uniforms.resolution.value=n.mapSize,d.uniforms.radius.value=n.radius,t.setRenderTarget(n.mapPass),t.clear(),t.renderBufferDirect(i,null,r,d,v,null),m.uniforms.shadow_pass.value=n.mapPass.texture,m.uniforms.resolution.value=n.mapSize,m.uniforms.radius.value=n.radius,t.setRenderTarget(n.map),t.clear(),t.renderBufferDirect(i,null,r,m,v,null)}function _(t){const e=t<<0;let n=o[e];return void 0===n&&(n=new cs({depthPacking:3201,morphTargets:t}),o[e]=n),n}function b(t){const e=t<<0;let n=l[e];return void 0===n&&(n=new hs({morphTargets:t}),l[e]=n),n}function M(e,n,i,r,s,a,o){let l=null,h=_,d=e.customDepthMaterial;if(!0===r.isPointLight&&(h=b,d=e.customDistanceMaterial),void 0===d){let t=!1;!0===i.morphTargets&&(t=n.morphAttributes&&n.morphAttributes.position&&n.morphAttributes.position.length>0),l=h(t)}else l=d;if(t.localClippingEnabled&&!0===i.clipShadows&&0!==i.clippingPlanes.length){const t=l.uuid,e=i.uuid;let n=c[t];void 0===n&&(n={},c[t]=n);let r=n[e];void 0===r&&(r=l.clone(),n[e]=r),l=r}return l.visible=i.visible,l.wireframe=i.wireframe,l.side=3===o?null!==i.shadowSide?i.shadowSide:i.side:null!==i.shadowSide?i.shadowSide:u[i.side],l.clipShadows=i.clipShadows,l.clippingPlanes=i.clippingPlanes,l.clipIntersection=i.clipIntersection,l.wireframeLinewidth=i.wireframeLinewidth,l.linewidth=i.linewidth,!0===r.isPointLight&&!0===l.isMeshDistanceMaterial&&(l.referencePosition.setFromMatrixPosition(r.matrixWorld),l.nearDistance=s,l.farDistance=a),l}function w(n,r,s,a,o){if(!1===n.visible)return;if(n.layers.test(r.layers)&&(n.isMesh||n.isLine||n.isPoints)&&(n.castShadow||n.receiveShadow&&3===o)&&(!n.frustumCulled||i.intersectsObject(n))){n.modelViewMatrix.multiplyMatrices(s.matrixWorldInverse,n.matrixWorld);const i=e.update(n),r=n.material;if(Array.isArray(r)){const e=i.groups;for(let l=0,c=e.length;lh||r.y>h)&&(r.x>h&&(s.x=Math.floor(h/m.x),r.x=s.x*m.x,u.mapSize.x=s.x),r.y>h&&(s.y=Math.floor(h/m.y),r.y=s.y*m.y,u.mapSize.y=s.y)),null===u.map&&!u.isPointLightShadow&&3===this.type){const t={minFilter:g,magFilter:g,format:E};u.map=new Tt(r.x,r.y,t),u.map.texture.name=c.name+".shadowMap",u.mapPass=new Tt(r.x,r.y,t),u.camera.updateProjectionMatrix()}if(null===u.map){const t={minFilter:p,magFilter:p,format:E};u.map=new Tt(r.x,r.y,t),u.map.texture.name=c.name+".shadowMap",u.camera.updateProjectionMatrix()}t.setRenderTarget(u.map),t.clear();const f=u.getViewportCount();for(let t=0;t=1):-1!==R.indexOf("OpenGL ES")&&(L=parseFloat(/^OpenGL ES (\d)/.exec(R)[1]),A=L>=2);let C=null,P={};const D=t.getParameter(3088),I=t.getParameter(2978),N=(new St).fromArray(D),B=(new St).fromArray(I);function z(e,n,i){const r=new Uint8Array(4),s=t.createTexture();t.bindTexture(e,s),t.texParameteri(e,10241,9728),t.texParameteri(e,10240,9728);for(let e=0;ei||t.height>i)&&(r=i/Math.max(t.width,t.height)),r<1||!0===e){if("undefined"!=typeof HTMLImageElement&&t instanceof HTMLImageElement||"undefined"!=typeof HTMLCanvasElement&&t instanceof HTMLCanvasElement||"undefined"!=typeof ImageBitmap&&t instanceof ImageBitmap){const i=e?ft:Math.floor,s=i(r*t.width),a=i(r*t.height);void 0===P&&(P=I(s,a));const o=n?I(s,a):P;o.width=s,o.height=a;return o.getContext("2d").drawImage(t,0,0,s,a),console.warn("THREE.WebGLRenderer: Texture has been resized from ("+t.width+"x"+t.height+") to ("+s+"x"+a+")."),o}return"data"in t&&console.warn("THREE.WebGLRenderer: Image in DataTexture is too big ("+t.width+"x"+t.height+")."),t}return t}function B(t){return pt(t.width)&&pt(t.height)}function z(t,e){return t.generateMipmaps&&e&&t.minFilter!==p&&t.minFilter!==g}function F(e,n,r,s,a=1){t.generateMipmap(e);i.get(n).__maxMipLevel=Math.log2(Math.max(r,s,a))}function O(n,i,r){if(!1===o)return i;if(null!==n){if(void 0!==t[n])return t[n];console.warn("THREE.WebGLRenderer: Attempt to use non-existing WebGL internal format '"+n+"'")}let s=i;return 6403===i&&(5126===r&&(s=33326),5131===r&&(s=33325),5121===r&&(s=33321)),6407===i&&(5126===r&&(s=34837),5131===r&&(s=34843),5121===r&&(s=32849)),6408===i&&(5126===r&&(s=34836),5131===r&&(s=34842),5121===r&&(s=32856)),33325!==s&&33326!==s&&34842!==s&&34836!==s||e.get("EXT_color_buffer_float"),s}function H(t){return t===p||t===m||t===f?9728:9729}function U(e){const n=e.target;n.removeEventListener("dispose",U),function(e){const n=i.get(e);if(void 0===n.__webglInit)return;t.deleteTexture(n.__webglTexture),i.remove(e)}(n),n.isVideoTexture&&C.delete(n),a.memory.textures--}function G(e){const n=e.target;n.removeEventListener("dispose",G),function(e){const n=e.texture,r=i.get(e),s=i.get(n);if(!e)return;void 0!==s.__webglTexture&&(t.deleteTexture(s.__webglTexture),a.memory.textures--);e.depthTexture&&e.depthTexture.dispose();if(e.isWebGLCubeRenderTarget)for(let e=0;e<6;e++)t.deleteFramebuffer(r.__webglFramebuffer[e]),r.__webglDepthbuffer&&t.deleteRenderbuffer(r.__webglDepthbuffer[e]);else t.deleteFramebuffer(r.__webglFramebuffer),r.__webglDepthbuffer&&t.deleteRenderbuffer(r.__webglDepthbuffer),r.__webglMultisampledFramebuffer&&t.deleteFramebuffer(r.__webglMultisampledFramebuffer),r.__webglColorRenderbuffer&&t.deleteRenderbuffer(r.__webglColorRenderbuffer),r.__webglDepthRenderbuffer&&t.deleteRenderbuffer(r.__webglDepthRenderbuffer);if(e.isWebGLMultipleRenderTargets)for(let e=0,r=n.length;e0&&r.__version!==t.version){const n=t.image;if(void 0===n)console.warn("THREE.WebGLRenderer: Texture marked for update but image is undefined");else{if(!1!==n.complete)return void J(r,t,e);console.warn("THREE.WebGLRenderer: Texture marked for update but image is incomplete")}}n.activeTexture(33984+e),n.bindTexture(3553,r.__webglTexture)}function W(e,r){const a=i.get(e);e.version>0&&a.__version!==e.version?function(e,i,r){if(6!==i.image.length)return;Y(e,i),n.activeTexture(33984+r),n.bindTexture(34067,e.__webglTexture),t.pixelStorei(37440,i.flipY),t.pixelStorei(37441,i.premultiplyAlpha),t.pixelStorei(3317,i.unpackAlignment),t.pixelStorei(37443,0);const a=i&&(i.isCompressedTexture||i.image[0].isCompressedTexture),l=i.image[0]&&i.image[0].isDataTexture,h=[];for(let t=0;t<6;t++)h[t]=a||l?l?i.image[t].image:i.image[t]:N(i.image[t],!1,!0,c);const u=h[0],d=B(u)||o,p=s.convert(i.format),m=s.convert(i.type),f=O(i.internalFormat,p,m);let g;if(X(34067,i,d),a){for(let t=0;t<6;t++){g=h[t].mipmaps;for(let e=0;e1||i.get(s).__currentAnisotropy)&&(t.texParameterf(n,a.TEXTURE_MAX_ANISOTROPY_EXT,Math.min(s.anisotropy,r.getMaxAnisotropy())),i.get(s).__currentAnisotropy=s.anisotropy)}}function Y(e,n){void 0===e.__webglInit&&(e.__webglInit=!0,n.addEventListener("dispose",U),e.__webglTexture=t.createTexture(),a.memory.textures++)}function J(e,i,r){let a=3553;i.isDataTexture2DArray&&(a=35866),i.isDataTexture3D&&(a=32879),Y(e,i),n.activeTexture(33984+r),n.bindTexture(a,e.__webglTexture),t.pixelStorei(37440,i.flipY),t.pixelStorei(37441,i.premultiplyAlpha),t.pixelStorei(3317,i.unpackAlignment),t.pixelStorei(37443,0);const l=function(t){return!o&&(t.wrapS!==u||t.wrapT!==u||t.minFilter!==p&&t.minFilter!==g)}(i)&&!1===B(i.image),c=N(i.image,l,!1,x),h=B(c)||o,d=s.convert(i.format);let m,f=s.convert(i.type),v=O(i.internalFormat,d,f);X(a,i,h);const y=i.mipmaps;if(i.isDepthTexture)v=6402,o?v=i.type===M?36012:i.type===b?33190:i.type===S?35056:33189:i.type===M&&console.error("WebGLRenderer: Floating point depth texture requires WebGL2."),i.format===A&&6402===v&&i.type!==_&&i.type!==b&&(console.warn("THREE.WebGLRenderer: Use UnsignedShortType or UnsignedIntType for DepthFormat DepthTexture."),i.type=_,f=s.convert(i.type)),i.format===L&&6402===v&&(v=34041,i.type!==S&&(console.warn("THREE.WebGLRenderer: Use UnsignedInt248Type for DepthStencilFormat DepthTexture."),i.type=S,f=s.convert(i.type))),n.texImage2D(3553,0,v,c.width,c.height,0,d,f,null);else if(i.isDataTexture)if(y.length>0&&h){for(let t=0,e=y.length;t0&&h){for(let t=0,e=y.length;t=l&&console.warn("THREE.WebGLTextures: Trying to use "+t+" texture units while this GPU supports only "+l),k+=1,t},this.resetTextureUnits=function(){k=0},this.setTexture2D=V,this.setTexture2DArray=function(t,e){const r=i.get(t);t.version>0&&r.__version!==t.version?J(r,t,e):(n.activeTexture(33984+e),n.bindTexture(35866,r.__webglTexture))},this.setTexture3D=function(t,e){const r=i.get(t);t.version>0&&r.__version!==t.version?J(r,t,e):(n.activeTexture(33984+e),n.bindTexture(32879,r.__webglTexture))},this.setTextureCube=W,this.setupRenderTarget=function(e){const l=e.texture,c=i.get(e),h=i.get(l);e.addEventListener("dispose",G),!0!==e.isWebGLMultipleRenderTargets&&(h.__webglTexture=t.createTexture(),h.__version=l.version,a.memory.textures++);const u=!0===e.isWebGLCubeRenderTarget,d=!0===e.isWebGLMultipleRenderTargets,p=!0===e.isWebGLMultisampleRenderTarget,m=l.isDataTexture3D||l.isDataTexture2DArray,f=B(e)||o;if(!o||l.format!==T||l.type!==M&&l.type!==w||(l.format=E,console.warn("THREE.WebGLRenderer: Rendering to textures with RGB format is not supported. Using RGBA format instead.")),u){c.__webglFramebuffer=[];for(let e=0;e<6;e++)c.__webglFramebuffer[e]=t.createFramebuffer()}else if(c.__webglFramebuffer=t.createFramebuffer(),d)if(r.drawBuffers){const n=e.texture;for(let e=0,r=n.length;eo+c?(l.inputState.pinching=!1,this.dispatchEvent({type:"pinchend",handedness:t.handedness,target:this})):!l.inputState.pinching&&a<=o-c&&(l.inputState.pinching=!0,this.dispatchEvent({type:"pinchstart",handedness:t.handedness,target:this}))}else null!==o&&t.gripSpace&&(r=e.getPose(t.gripSpace,n),null!==r&&(o.matrix.fromArray(r.transform.matrix),o.matrix.decompose(o.position,o.rotation,o.scale),r.linearVelocity?(o.hasLinearVelocity=!0,o.linearVelocity.copy(r.linearVelocity)):o.hasLinearVelocity=!1,r.angularVelocity?(o.hasAngularVelocity=!0,o.angularVelocity.copy(r.angularVelocity)):o.hasAngularVelocity=!1));return null!==a&&(a.visible=null!==i),null!==o&&(o.visible=null!==r),null!==l&&(l.visible=null!==s),this}}class xs extends rt{constructor(t,e){super();const n=this,i=t.state;let r=null,s=1,a=null,o="local-floor",l=null,c=null,h=null,u=null;const d=[],p=new Map,m=new Jn;m.layers.enable(1),m.viewport=new St;const f=new Jn;f.layers.enable(2),f.viewport=new St;const g=[m,f],v=new fs;v.layers.enable(1),v.layers.enable(2);let y=null,x=null;function _(t){const e=p.get(t.inputSource);e&&e.dispatchEvent({type:t.type,data:t.inputSource})}function b(){p.forEach((function(t,e){t.disconnect(e)})),p.clear(),y=null,x=null,i.bindXRFramebuffer(null),t.setRenderTarget(t.getRenderTarget()),A.stop(),n.isPresenting=!1,n.dispatchEvent({type:"sessionend"})}function M(t){const e=r.inputSources;for(let t=0;t0&&(t.transmissionSamplerMap.value=i.texture,t.transmissionSamplerSize.value.set(i.width,i.height));t.thickness.value=e.thickness,e.thicknessMap&&(t.thicknessMap.value=e.thicknessMap);t.attenuationDistance.value=e.attenuationDistance,t.attenuationColor.value.copy(e.attenuationColor)}(t,i,a):n(t,i)):i.isMeshMatcapMaterial?(e(t,i),function(t,e){e.matcap&&(t.matcap.value=e.matcap);e.bumpMap&&(t.bumpMap.value=e.bumpMap,t.bumpScale.value=e.bumpScale,1===e.side&&(t.bumpScale.value*=-1));e.normalMap&&(t.normalMap.value=e.normalMap,t.normalScale.value.copy(e.normalScale),1===e.side&&t.normalScale.value.negate());e.displacementMap&&(t.displacementMap.value=e.displacementMap,t.displacementScale.value=e.displacementScale,t.displacementBias.value=e.displacementBias)}(t,i)):i.isMeshDepthMaterial?(e(t,i),function(t,e){e.displacementMap&&(t.displacementMap.value=e.displacementMap,t.displacementScale.value=e.displacementScale,t.displacementBias.value=e.displacementBias)}(t,i)):i.isMeshDistanceMaterial?(e(t,i),function(t,e){e.displacementMap&&(t.displacementMap.value=e.displacementMap,t.displacementScale.value=e.displacementScale,t.displacementBias.value=e.displacementBias);t.referencePosition.value.copy(e.referencePosition),t.nearDistance.value=e.nearDistance,t.farDistance.value=e.farDistance}(t,i)):i.isMeshNormalMaterial?(e(t,i),function(t,e){e.bumpMap&&(t.bumpMap.value=e.bumpMap,t.bumpScale.value=e.bumpScale,1===e.side&&(t.bumpScale.value*=-1));e.normalMap&&(t.normalMap.value=e.normalMap,t.normalScale.value.copy(e.normalScale),1===e.side&&t.normalScale.value.negate());e.displacementMap&&(t.displacementMap.value=e.displacementMap,t.displacementScale.value=e.displacementScale,t.displacementBias.value=e.displacementBias)}(t,i)):i.isLineBasicMaterial?(function(t,e){t.diffuse.value.copy(e.color),t.opacity.value=e.opacity}(t,i),i.isLineDashedMaterial&&function(t,e){t.dashSize.value=e.dashSize,t.totalSize.value=e.dashSize+e.gapSize,t.scale.value=e.scale}(t,i)):i.isPointsMaterial?function(t,e,n,i){t.diffuse.value.copy(e.color),t.opacity.value=e.opacity,t.size.value=e.size*n,t.scale.value=.5*i,e.map&&(t.map.value=e.map);e.alphaMap&&(t.alphaMap.value=e.alphaMap);let r;e.map?r=e.map:e.alphaMap&&(r=e.alphaMap);void 0!==r&&(!0===r.matrixAutoUpdate&&r.updateMatrix(),t.uvTransform.value.copy(r.matrix))}(t,i,r,s):i.isSpriteMaterial?function(t,e){t.diffuse.value.copy(e.color),t.opacity.value=e.opacity,t.rotation.value=e.rotation,e.map&&(t.map.value=e.map);e.alphaMap&&(t.alphaMap.value=e.alphaMap);let n;e.map?n=e.map:e.alphaMap&&(n=e.alphaMap);void 0!==n&&(!0===n.matrixAutoUpdate&&n.updateMatrix(),t.uvTransform.value.copy(n.matrix))}(t,i):i.isShadowMaterial?(t.color.value.copy(i.color),t.opacity.value=i.opacity):i.isShaderMaterial&&(i.uniformsNeedUpdate=!1)}}}function bs(t={}){const e=void 0!==t.canvas?t.canvas:function(){const t=document.createElementNS("http://www.w3.org/1999/xhtml","canvas");return t.style.display="block",t}(),n=void 0!==t.context?t.context:null,i=void 0!==t.alpha&&t.alpha,r=void 0===t.depth||t.depth,s=void 0===t.stencil||t.stencil,a=void 0!==t.antialias&&t.antialias,o=void 0===t.premultipliedAlpha||t.premultipliedAlpha,l=void 0!==t.preserveDrawingBuffer&&t.preserveDrawingBuffer,c=void 0!==t.powerPreference?t.powerPreference:"default",h=void 0!==t.failIfMajorPerformanceCaveat&&t.failIfMajorPerformanceCaveat;let d=null,m=null;const f=[],g=[];this.domElement=e,this.debug={checkShaderErrors:!0},this.autoClear=!0,this.autoClearColor=!0,this.autoClearDepth=!0,this.autoClearStencil=!0,this.sortObjects=!0,this.clippingPlanes=[],this.localClippingEnabled=!1,this.gammaFactor=2,this.outputEncoding=X,this.physicallyCorrectLights=!1,this.toneMapping=0,this.toneMappingExposure=1;const v=this;let _=!1,b=0,S=0,T=null,A=-1,L=null;const R=new St,C=new St;let P=null,D=e.width,I=e.height,N=1,B=null,z=null;const F=new St(0,0,D,I),O=new St(0,0,D,I);let H=!1;const U=[],G=new ai;let k=!1,V=!1,W=null;const j=new ae,q=new Rt,Y={background:null,fog:null,environment:null,overrideMaterial:null,isScene:!0};function J(){return null===T?N:1}let Z,Q,K,$,tt,et,nt,it,rt,st,at,ot,lt,ct,ht,ut,dt,pt,mt,ft,gt,vt,yt=n;function xt(t,n){for(let i=0;i0&&Nt(i,t,e),r.length>0&&function(t,e,n,i){if(null===W){const t=!0===a&&!0===Q.isWebGL2;W=new(t?At:Tt)(1024,1024,{generateMipmaps:!0,type:null!==gt.convert(w)?w:x,minFilter:y,magFilter:p,wrapS:u,wrapT:u})}const r=v.getRenderTarget();v.setRenderTarget(W),v.clear();const s=v.toneMapping;v.toneMapping=0,Nt(t,n,i),v.toneMapping=s,et.updateMultisampleRenderTarget(W),et.updateRenderTargetMipmap(W),v.setRenderTarget(r),Nt(e,n,i)}(i,r,t,e),s.length>0&&Nt(s,t,e),null!==T&&(et.updateMultisampleRenderTarget(T),et.updateRenderTargetMipmap(T)),!0===t.isScene&&t.onAfterRender(v,t,e),K.buffers.depth.setTest(!0),K.buffers.depth.setMask(!0),K.buffers.color.setMask(!0),K.setPolygonOffset(!1),vt.resetDefaultState(),A=-1,L=null,g.pop(),m=g.length>0?g[g.length-1]:null,f.pop(),d=f.length>0?f[f.length-1]:null},this.getActiveCubeFace=function(){return b},this.getActiveMipmapLevel=function(){return S},this.getRenderTarget=function(){return T},this.setRenderTarget=function(t,e=0,n=0){T=t,b=e,S=n,t&&void 0===tt.get(t).__webglFramebuffer&&et.setupRenderTarget(t);let i=null,r=!1,s=!1;if(t){const n=t.texture;(n.isDataTexture3D||n.isDataTexture2DArray)&&(s=!0);const a=tt.get(t).__webglFramebuffer;t.isWebGLCubeRenderTarget?(i=a[e],r=!0):i=t.isWebGLMultisampleRenderTarget?tt.get(t).__webglMultisampledFramebuffer:a,R.copy(t.viewport),C.copy(t.scissor),P=t.scissorTest}else R.copy(F).multiplyScalar(N).floor(),C.copy(O).multiplyScalar(N).floor(),P=H;if(K.bindFramebuffer(36160,i)&&Q.drawBuffers){let e=!1;if(t)if(t.isWebGLMultipleRenderTargets){const n=t.texture;if(U.length!==n.length||36064!==U[0]){for(let t=0,e=n.length;t=0&&e<=t.width-i&&n>=0&&n<=t.height-r&&yt.readPixels(e,n,i,r,gt.convert(o),gt.convert(l),s):console.error("THREE.WebGLRenderer.readRenderTargetPixels: readPixels from renderTarget failed. Framebuffer not complete.")}finally{const t=null!==T?tt.get(T).__webglFramebuffer:null;K.bindFramebuffer(36160,t)}}},this.copyFramebufferToTexture=function(t,e,n=0){const i=Math.pow(2,-n),r=Math.floor(e.image.width*i),s=Math.floor(e.image.height*i);let a=gt.convert(e.format);Q.isWebGL2&&(6407===a&&(a=32849),6408===a&&(a=32856)),et.setTexture2D(e,0),yt.copyTexImage2D(3553,n,a,t.x,t.y,r,s,0),K.unbindTexture()},this.copyTextureToTexture=function(t,e,n,i=0){const r=e.image.width,s=e.image.height,a=gt.convert(n.format),o=gt.convert(n.type);et.setTexture2D(n,0),yt.pixelStorei(37440,n.flipY),yt.pixelStorei(37441,n.premultiplyAlpha),yt.pixelStorei(3317,n.unpackAlignment),e.isDataTexture?yt.texSubImage2D(3553,i,t.x,t.y,r,s,a,o,e.image.data):e.isCompressedTexture?yt.compressedTexSubImage2D(3553,i,t.x,t.y,e.mipmaps[0].width,e.mipmaps[0].height,a,e.mipmaps[0].data):yt.texSubImage2D(3553,i,t.x,t.y,a,o,e.image),0===i&&n.generateMipmaps&&yt.generateMipmap(3553),K.unbindTexture()},this.copyTextureToTexture3D=function(t,e,n,i,r=0){if(v.isWebGL1Renderer)return void console.warn("THREE.WebGLRenderer.copyTextureToTexture3D: can only be used with WebGL2.");const s=t.max.x-t.min.x+1,a=t.max.y-t.min.y+1,o=t.max.z-t.min.z+1,l=gt.convert(i.format),c=gt.convert(i.type);let h;if(i.isDataTexture3D)et.setTexture3D(i,0),h=32879;else{if(!i.isDataTexture2DArray)return void console.warn("THREE.WebGLRenderer.copyTextureToTexture3D: only supports THREE.DataTexture3D and THREE.DataTexture2DArray.");et.setTexture2DArray(i,0),h=35866}yt.pixelStorei(37440,i.flipY),yt.pixelStorei(37441,i.premultiplyAlpha),yt.pixelStorei(3317,i.unpackAlignment);const u=yt.getParameter(3314),d=yt.getParameter(32878),p=yt.getParameter(3316),m=yt.getParameter(3315),f=yt.getParameter(32877),g=n.isCompressedTexture?n.mipmaps[0]:n.image;yt.pixelStorei(3314,g.width),yt.pixelStorei(32878,g.height),yt.pixelStorei(3316,t.min.x),yt.pixelStorei(3315,t.min.y),yt.pixelStorei(32877,t.min.z),n.isDataTexture||n.isDataTexture3D?yt.texSubImage3D(h,r,e.x,e.y,e.z,s,a,o,l,c,g.data):n.isCompressedTexture?(console.warn("THREE.WebGLRenderer.copyTextureToTexture3D: untested support for compressed srcTexture."),yt.compressedTexSubImage3D(h,r,e.x,e.y,e.z,s,a,o,l,g.data)):yt.texSubImage3D(h,r,e.x,e.y,e.z,s,a,o,l,c,g),yt.pixelStorei(3314,u),yt.pixelStorei(32878,d),yt.pixelStorei(3316,p),yt.pixelStorei(3315,m),yt.pixelStorei(32877,f),0===r&&i.generateMipmaps&&yt.generateMipmap(h),K.unbindTexture()},this.initTexture=function(t){et.setTexture2D(t,0),K.unbindTexture()},this.resetState=function(){b=0,S=0,T=null,K.reset(),vt.reset()},"undefined"!=typeof __THREE_DEVTOOLS__&&__THREE_DEVTOOLS__.dispatchEvent(new CustomEvent("observe",{detail:this}))}class Ms extends bs{}Ms.prototype.isWebGL1Renderer=!0;class ws{constructor(t,e=25e-5){this.name="",this.color=new Qe(t),this.density=e}clone(){return new ws(this.color,this.density)}toJSON(){return{type:"FogExp2",color:this.color.getHex(),density:this.density}}}ws.prototype.isFogExp2=!0;class Ss{constructor(t,e=1,n=1e3){this.name="",this.color=new Qe(t),this.near=e,this.far=n}clone(){return new Ss(this.color,this.near,this.far)}toJSON(){return{type:"Fog",color:this.color.getHex(),near:this.near,far:this.far}}}Ss.prototype.isFog=!0;class Ts extends Pe{constructor(){super(),this.type="Scene",this.background=null,this.environment=null,this.fog=null,this.overrideMaterial=null,this.autoUpdate=!0,"undefined"!=typeof __THREE_DEVTOOLS__&&__THREE_DEVTOOLS__.dispatchEvent(new CustomEvent("observe",{detail:this}))}copy(t,e){return super.copy(t,e),null!==t.background&&(this.background=t.background.clone()),null!==t.environment&&(this.environment=t.environment.clone()),null!==t.fog&&(this.fog=t.fog.clone()),null!==t.overrideMaterial&&(this.overrideMaterial=t.overrideMaterial.clone()),this.autoUpdate=t.autoUpdate,this.matrixAutoUpdate=t.matrixAutoUpdate,this}toJSON(t){const e=super.toJSON(t);return null!==this.fog&&(e.object.fog=this.fog.toJSON()),e}}Ts.prototype.isScene=!0;class Es{constructor(t,e){this.array=t,this.stride=e,this.count=void 0!==t?t.length/e:0,this.usage=et,this.updateRange={offset:0,count:-1},this.version=0,this.uuid=ct()}onUploadCallback(){}set needsUpdate(t){!0===t&&this.version++}setUsage(t){return this.usage=t,this}copy(t){return this.array=new t.array.constructor(t.array),this.count=t.count,this.stride=t.stride,this.usage=t.usage,this}copyAt(t,e,n){t*=this.stride,n*=e.stride;for(let i=0,r=this.stride;it.far||e.push({distance:o,point:Ps.clone(),uv:ke.getUV(Ps,Fs,Os,Hs,Us,Gs,ks,new vt),face:null,object:this})}copy(t){return super.copy(t),void 0!==t.center&&this.center.copy(t.center),this.material=t.material,this}}function Ws(t,e,n,i,r,s){Ns.subVectors(t,n).addScalar(.5).multiply(i),void 0!==r?(Bs.x=s*Ns.x-r*Ns.y,Bs.y=r*Ns.x+s*Ns.y):Bs.copy(Ns),t.copy(e),t.x+=Bs.x,t.y+=Bs.y,t.applyMatrix4(zs)}Vs.prototype.isSprite=!0;const js=new Rt,qs=new Rt;class Xs extends Pe{constructor(){super(),this._currentLevel=0,this.type="LOD",Object.defineProperties(this,{levels:{enumerable:!0,value:[]},isLOD:{value:!0}}),this.autoUpdate=!0}copy(t){super.copy(t,!1);const e=t.levels;for(let t=0,n=e.length;t0){let n,i;for(n=1,i=e.length;n0){js.setFromMatrixPosition(this.matrixWorld);const n=t.ray.origin.distanceTo(js);this.getObjectForDistance(n).raycast(t,e)}}update(t){const e=this.levels;if(e.length>1){js.setFromMatrixPosition(t.matrixWorld),qs.setFromMatrixPosition(this.matrixWorld);const n=js.distanceTo(qs)/t.zoom;let i,r;for(e[0].object.visible=!0,i=1,r=e.length;i=e[i].distance;i++)e[i-1].object.visible=!1,e[i].object.visible=!0;for(this._currentLevel=i-1;io)continue;u.applyMatrix4(this.matrixWorld);const d=t.ray.origin.distanceTo(u);dt.far||e.push({distance:d,point:h.clone().applyMatrix4(this.matrixWorld),index:n,face:null,faceIndex:null,object:this})}}else{for(let n=Math.max(0,s.start),i=Math.min(r.count,s.start+s.count)-1;no)continue;u.applyMatrix4(this.matrixWorld);const i=t.ray.origin.distanceTo(u);it.far||e.push({distance:i,point:h.clone().applyMatrix4(this.matrixWorld),index:n,face:null,faceIndex:null,object:this})}}}else n.isGeometry&&console.error("THREE.Line.raycast() no longer supports THREE.Geometry. Use THREE.BufferGeometry instead.")}updateMorphTargets(){const t=this.geometry;if(t.isBufferGeometry){const e=t.morphAttributes,n=Object.keys(e);if(n.length>0){const t=e[n[0]];if(void 0!==t){this.morphTargetInfluences=[],this.morphTargetDictionary={};for(let e=0,n=t.length;e0&&console.error("THREE.Line.updateMorphTargets() does not support THREE.Geometry. Use THREE.BufferGeometry instead.")}}}ga.prototype.isLine=!0;const va=new Rt,ya=new Rt;class xa extends ga{constructor(t,e){super(t,e),this.type="LineSegments"}computeLineDistances(){const t=this.geometry;if(t.isBufferGeometry)if(null===t.index){const e=t.attributes.position,n=[];for(let t=0,i=e.count;t0){const t=e[n[0]];if(void 0!==t){this.morphTargetInfluences=[],this.morphTargetDictionary={};for(let e=0,n=t.length;e0&&console.error("THREE.Points.updateMorphTargets() does not support THREE.Geometry. Use THREE.BufferGeometry instead.")}}}function Aa(t,e,n,i,r,s,a){const o=wa.distanceSqToPoint(t);if(or.far)return;s.push({distance:l,distanceToRay:Math.sqrt(o),point:n,index:e,face:null,object:a})}}Ea.prototype.isPoints=!0;class La extends Mt{constructor(t,e,n,i,r,s,a,o,l){super(t,e,n,i,r,s,a,o,l),this.format=void 0!==a?a:T,this.minFilter=void 0!==s?s:g,this.magFilter=void 0!==r?r:g,this.generateMipmaps=!1;const c=this;"requestVideoFrameCallback"in t&&t.requestVideoFrameCallback((function e(){c.needsUpdate=!0,t.requestVideoFrameCallback(e)}))}clone(){return new this.constructor(this.image).copy(this)}update(){const t=this.image;!1==="requestVideoFrameCallback"in t&&t.readyState>=t.HAVE_CURRENT_DATA&&(this.needsUpdate=!0)}}La.prototype.isVideoTexture=!0;class Ra extends Mt{constructor(t,e,n,i,r,s,a,o,l,c,h,u){super(null,s,a,o,l,c,i,r,h,u),this.image={width:e,height:n},this.mipmaps=t,this.flipY=!1,this.generateMipmaps=!1}}Ra.prototype.isCompressedTexture=!0;class Ca extends Mt{constructor(t,e,n,i,r,s,a,o,l){super(t,e,n,i,r,s,a,o,l),this.needsUpdate=!0}}Ca.prototype.isCanvasTexture=!0;class Pa extends Mt{constructor(t,e,n,i,r,s,a,o,l,c){if((c=void 0!==c?c:A)!==A&&c!==L)throw new Error("DepthTexture format must be either THREE.DepthFormat or THREE.DepthStencilFormat");void 0===n&&c===A&&(n=_),void 0===n&&c===L&&(n=S),super(null,i,r,s,a,o,c,n,l),this.image={width:t,height:e},this.magFilter=void 0!==a?a:p,this.minFilter=void 0!==o?o:p,this.flipY=!1,this.generateMipmaps=!1}}Pa.prototype.isDepthTexture=!0;class Da extends wn{constructor(t=1,e=8,n=0,i=2*Math.PI){super(),this.type="CircleGeometry",this.parameters={radius:t,segments:e,thetaStart:n,thetaLength:i},e=Math.max(3,e);const r=[],s=[],a=[],o=[],l=new Rt,c=new vt;s.push(0,0,0),a.push(0,0,1),o.push(.5,.5);for(let r=0,h=3;r<=e;r++,h+=3){const u=n+r/e*i;l.x=t*Math.cos(u),l.y=t*Math.sin(u),s.push(l.x,l.y,l.z),a.push(0,0,1),c.x=(s[h]/t+1)/2,c.y=(s[h+1]/t+1)/2,o.push(c.x,c.y)}for(let t=1;t<=e;t++)r.push(t,t+1,0);this.setIndex(r),this.setAttribute("position",new un(s,3)),this.setAttribute("normal",new un(a,3)),this.setAttribute("uv",new un(o,2))}static fromJSON(t){return new Da(t.radius,t.segments,t.thetaStart,t.thetaLength)}}class Ia extends wn{constructor(t=1,e=1,n=1,i=8,r=1,s=!1,a=0,o=2*Math.PI){super(),this.type="CylinderGeometry",this.parameters={radiusTop:t,radiusBottom:e,height:n,radialSegments:i,heightSegments:r,openEnded:s,thetaStart:a,thetaLength:o};const l=this;i=Math.floor(i),r=Math.floor(r);const c=[],h=[],u=[],d=[];let p=0;const m=[],f=n/2;let g=0;function v(n){const r=p,s=new vt,m=new Rt;let v=0;const y=!0===n?t:e,x=!0===n?1:-1;for(let t=1;t<=i;t++)h.push(0,f*x,0),u.push(0,x,0),d.push(.5,.5),p++;const _=p;for(let t=0;t<=i;t++){const e=t/i*o+a,n=Math.cos(e),r=Math.sin(e);m.x=y*r,m.y=f*x,m.z=y*n,h.push(m.x,m.y,m.z),u.push(0,x,0),s.x=.5*n+.5,s.y=.5*r*x+.5,d.push(s.x,s.y),p++}for(let t=0;t0&&v(!0),e>0&&v(!1)),this.setIndex(c),this.setAttribute("position",new un(h,3)),this.setAttribute("normal",new un(u,3)),this.setAttribute("uv",new un(d,2))}static fromJSON(t){return new Ia(t.radiusTop,t.radiusBottom,t.height,t.radialSegments,t.heightSegments,t.openEnded,t.thetaStart,t.thetaLength)}}class Na extends Ia{constructor(t=1,e=1,n=8,i=1,r=!1,s=0,a=2*Math.PI){super(0,t,e,n,i,r,s,a),this.type="ConeGeometry",this.parameters={radius:t,height:e,radialSegments:n,heightSegments:i,openEnded:r,thetaStart:s,thetaLength:a}}static fromJSON(t){return new Na(t.radius,t.height,t.radialSegments,t.heightSegments,t.openEnded,t.thetaStart,t.thetaLength)}}class Ba extends wn{constructor(t,e,n=1,i=0){super(),this.type="PolyhedronGeometry",this.parameters={vertices:t,indices:e,radius:n,detail:i};const r=[],s=[];function a(t,e,n,i){const r=i+1,s=[];for(let i=0;i<=r;i++){s[i]=[];const a=t.clone().lerp(n,i/r),o=e.clone().lerp(n,i/r),l=r-i;for(let t=0;t<=l;t++)s[i][t]=0===t&&i===r?a:a.clone().lerp(o,t/l)}for(let t=0;t.9&&a<.1&&(e<.2&&(s[t+0]+=1),n<.2&&(s[t+2]+=1),i<.2&&(s[t+4]+=1))}}()}(),this.setAttribute("position",new un(r,3)),this.setAttribute("normal",new un(r.slice(),3)),this.setAttribute("uv",new un(s,2)),0===i?this.computeVertexNormals():this.normalizeNormals()}static fromJSON(t){return new Ba(t.vertices,t.indices,t.radius,t.details)}}class za extends Ba{constructor(t=1,e=0){const n=(1+Math.sqrt(5))/2,i=1/n;super([-1,-1,-1,-1,-1,1,-1,1,-1,-1,1,1,1,-1,-1,1,-1,1,1,1,-1,1,1,1,0,-i,-n,0,-i,n,0,i,-n,0,i,n,-i,-n,0,-i,n,0,i,-n,0,i,n,0,-n,0,-i,n,0,-i,-n,0,i,n,0,i],[3,11,7,3,7,15,3,15,13,7,19,17,7,17,6,7,6,15,17,4,8,17,8,10,17,10,6,8,0,16,8,16,2,8,2,10,0,12,1,0,1,18,0,18,16,6,10,2,6,2,13,6,13,15,2,16,18,2,18,3,2,3,13,18,1,9,18,9,11,18,11,3,4,14,12,4,12,0,4,0,8,11,9,5,11,5,19,11,19,7,19,5,14,19,14,4,19,4,17,1,12,14,1,14,5,1,5,9],t,e),this.type="DodecahedronGeometry",this.parameters={radius:t,detail:e}}static fromJSON(t){return new za(t.radius,t.detail)}}const Fa=new Rt,Oa=new Rt,Ha=new Rt,Ua=new ke;class Ga extends wn{constructor(t,e){if(super(),this.type="EdgesGeometry",this.parameters={thresholdAngle:e},e=void 0!==e?e:1,!0===t.isGeometry)return void console.error("THREE.EdgesGeometry no longer supports THREE.Geometry. Use THREE.BufferGeometry instead.");const n=Math.pow(10,4),i=Math.cos(ot*e),r=t.getIndex(),s=t.getAttribute("position"),a=r?r.count:s.count,o=[0,0,0],l=["a","b","c"],c=new Array(3),h={},u=[];for(let t=0;t0)){l=i;break}l=i-1}if(i=l,n[i]===s)return i/(r-1);const c=n[i];return(i+(s-c)/(n[i+1]-c))/(r-1)}getTangent(t,e){const n=1e-4;let i=t-n,r=t+n;i<0&&(i=0),r>1&&(r=1);const s=this.getPoint(i),a=this.getPoint(r),o=e||(s.isVector2?new vt:new Rt);return o.copy(a).sub(s).normalize(),o}getTangentAt(t,e){const n=this.getUtoTmapping(t);return this.getTangent(n,e)}computeFrenetFrames(t,e){const n=new Rt,i=[],r=[],s=[],a=new Rt,o=new ae;for(let e=0;e<=t;e++){const n=e/t;i[e]=this.getTangentAt(n,new Rt),i[e].normalize()}r[0]=new Rt,s[0]=new Rt;let l=Number.MAX_VALUE;const c=Math.abs(i[0].x),h=Math.abs(i[0].y),u=Math.abs(i[0].z);c<=l&&(l=c,n.set(1,0,0)),h<=l&&(l=h,n.set(0,1,0)),u<=l&&n.set(0,0,1),a.crossVectors(i[0],n).normalize(),r[0].crossVectors(i[0],a),s[0].crossVectors(i[0],r[0]);for(let e=1;e<=t;e++){if(r[e]=r[e-1].clone(),s[e]=s[e-1].clone(),a.crossVectors(i[e-1],i[e]),a.length()>Number.EPSILON){a.normalize();const t=Math.acos(ht(i[e-1].dot(i[e]),-1,1));r[e].applyMatrix4(o.makeRotationAxis(a,t))}s[e].crossVectors(i[e],r[e])}if(!0===e){let e=Math.acos(ht(r[0].dot(r[t]),-1,1));e/=t,i[0].dot(a.crossVectors(r[0],r[t]))>0&&(e=-e);for(let n=1;n<=t;n++)r[n].applyMatrix4(o.makeRotationAxis(i[n],e*n)),s[n].crossVectors(i[n],r[n])}return{tangents:i,normals:r,binormals:s}}clone(){return(new this.constructor).copy(this)}copy(t){return this.arcLengthDivisions=t.arcLengthDivisions,this}toJSON(){const t={metadata:{version:4.5,type:"Curve",generator:"Curve.toJSON"}};return t.arcLengthDivisions=this.arcLengthDivisions,t.type=this.type,t}fromJSON(t){return this.arcLengthDivisions=t.arcLengthDivisions,this}}class Va extends ka{constructor(t=0,e=0,n=1,i=1,r=0,s=2*Math.PI,a=!1,o=0){super(),this.type="EllipseCurve",this.aX=t,this.aY=e,this.xRadius=n,this.yRadius=i,this.aStartAngle=r,this.aEndAngle=s,this.aClockwise=a,this.aRotation=o}getPoint(t,e){const n=e||new vt,i=2*Math.PI;let r=this.aEndAngle-this.aStartAngle;const s=Math.abs(r)i;)r-=i;r0?0:(Math.floor(Math.abs(l)/r)+1)*r:0===c&&l===r-1&&(l=r-2,c=1),this.closed||l>0?a=i[(l-1)%r]:(qa.subVectors(i[0],i[1]).add(i[0]),a=qa);const h=i[l%r],u=i[(l+1)%r];if(this.closed||l+2i.length-2?i.length-1:s+1],h=i[s>i.length-3?i.length-1:s+2];return n.set(Qa(a,o.x,l.x,c.x,h.x),Qa(a,o.y,l.y,c.y,h.y)),n}copy(t){super.copy(t),this.points=[];for(let e=0,n=t.points.length;e80*n){o=c=t[0],l=h=t[1];for(let e=n;ec&&(c=u),d>h&&(h=d);p=Math.max(c-o,h-l),p=0!==p?1/p:0}return uo(s,a,n,o,l,p),a};function co(t,e,n,i,r){let s,a;if(r===function(t,e,n,i){let r=0;for(let s=e,a=n-i;s0)for(s=e;s=e;s-=i)a=Po(s,t[s],t[s+1],a);return a&&To(a,a.next)&&(Do(a),a=a.next),a}function ho(t,e){if(!t)return t;e||(e=t);let n,i=t;do{if(n=!1,i.steiner||!To(i,i.next)&&0!==So(i.prev,i,i.next))i=i.next;else{if(Do(i),i=e=i.prev,i===i.next)break;n=!0}}while(n||i!==e);return e}function uo(t,e,n,i,r,s,a){if(!t)return;!a&&s&&function(t,e,n,i){let r=t;do{null===r.z&&(r.z=_o(r.x,r.y,e,n,i)),r.prevZ=r.prev,r.nextZ=r.next,r=r.next}while(r!==t);r.prevZ.nextZ=null,r.prevZ=null,function(t){let e,n,i,r,s,a,o,l,c=1;do{for(n=t,t=null,s=null,a=0;n;){for(a++,i=n,o=0,e=0;e0||l>0&&i;)0!==o&&(0===l||!i||n.z<=i.z)?(r=n,n=n.nextZ,o--):(r=i,i=i.nextZ,l--),s?s.nextZ=r:t=r,r.prevZ=s,s=r;n=i}s.nextZ=null,c*=2}while(a>1)}(r)}(t,i,r,s);let o,l,c=t;for(;t.prev!==t.next;)if(o=t.prev,l=t.next,s?mo(t,i,r,s):po(t))e.push(o.i/n),e.push(t.i/n),e.push(l.i/n),Do(t),t=l.next,c=l.next;else if((t=l)===c){a?1===a?uo(t=fo(ho(t),e,n),e,n,i,r,s,2):2===a&&go(t,e,n,i,r,s):uo(ho(t),e,n,i,r,s,1);break}}function po(t){const e=t.prev,n=t,i=t.next;if(So(e,n,i)>=0)return!1;let r=t.next.next;for(;r!==t.prev;){if(Mo(e.x,e.y,n.x,n.y,i.x,i.y,r.x,r.y)&&So(r.prev,r,r.next)>=0)return!1;r=r.next}return!0}function mo(t,e,n,i){const r=t.prev,s=t,a=t.next;if(So(r,s,a)>=0)return!1;const o=r.xs.x?r.x>a.x?r.x:a.x:s.x>a.x?s.x:a.x,h=r.y>s.y?r.y>a.y?r.y:a.y:s.y>a.y?s.y:a.y,u=_o(o,l,e,n,i),d=_o(c,h,e,n,i);let p=t.prevZ,m=t.nextZ;for(;p&&p.z>=u&&m&&m.z<=d;){if(p!==t.prev&&p!==t.next&&Mo(r.x,r.y,s.x,s.y,a.x,a.y,p.x,p.y)&&So(p.prev,p,p.next)>=0)return!1;if(p=p.prevZ,m!==t.prev&&m!==t.next&&Mo(r.x,r.y,s.x,s.y,a.x,a.y,m.x,m.y)&&So(m.prev,m,m.next)>=0)return!1;m=m.nextZ}for(;p&&p.z>=u;){if(p!==t.prev&&p!==t.next&&Mo(r.x,r.y,s.x,s.y,a.x,a.y,p.x,p.y)&&So(p.prev,p,p.next)>=0)return!1;p=p.prevZ}for(;m&&m.z<=d;){if(m!==t.prev&&m!==t.next&&Mo(r.x,r.y,s.x,s.y,a.x,a.y,m.x,m.y)&&So(m.prev,m,m.next)>=0)return!1;m=m.nextZ}return!0}function fo(t,e,n){let i=t;do{const r=i.prev,s=i.next.next;!To(r,s)&&Eo(r,i,i.next,s)&&Ro(r,s)&&Ro(s,r)&&(e.push(r.i/n),e.push(i.i/n),e.push(s.i/n),Do(i),Do(i.next),i=t=s),i=i.next}while(i!==t);return ho(i)}function go(t,e,n,i,r,s){let a=t;do{let t=a.next.next;for(;t!==a.prev;){if(a.i!==t.i&&wo(a,t)){let o=Co(a,t);return a=ho(a,a.next),o=ho(o,o.next),uo(a,e,n,i,r,s),void uo(o,e,n,i,r,s)}t=t.next}a=a.next}while(a!==t)}function vo(t,e){return t.x-e.x}function yo(t,e){if(e=function(t,e){let n=e;const i=t.x,r=t.y;let s,a=-1/0;do{if(r<=n.y&&r>=n.next.y&&n.next.y!==n.y){const t=n.x+(r-n.y)*(n.next.x-n.x)/(n.next.y-n.y);if(t<=i&&t>a){if(a=t,t===i){if(r===n.y)return n;if(r===n.next.y)return n.next}s=n.x=n.x&&n.x>=l&&i!==n.x&&Mo(rs.x||n.x===s.x&&xo(s,n)))&&(s=n,u=h)),n=n.next}while(n!==o);return s}(t,e)){const n=Co(e,t);ho(e,e.next),ho(n,n.next)}}function xo(t,e){return So(t.prev,t,e.prev)<0&&So(e.next,t,t.next)<0}function _o(t,e,n,i,r){return(t=1431655765&((t=858993459&((t=252645135&((t=16711935&((t=32767*(t-n)*r)|t<<8))|t<<4))|t<<2))|t<<1))|(e=1431655765&((e=858993459&((e=252645135&((e=16711935&((e=32767*(e-i)*r)|e<<8))|e<<4))|e<<2))|e<<1))<<1}function bo(t){let e=t,n=t;do{(e.x=0&&(t-a)*(i-o)-(n-a)*(e-o)>=0&&(n-a)*(s-o)-(r-a)*(i-o)>=0}function wo(t,e){return t.next.i!==e.i&&t.prev.i!==e.i&&!function(t,e){let n=t;do{if(n.i!==t.i&&n.next.i!==t.i&&n.i!==e.i&&n.next.i!==e.i&&Eo(n,n.next,t,e))return!0;n=n.next}while(n!==t);return!1}(t,e)&&(Ro(t,e)&&Ro(e,t)&&function(t,e){let n=t,i=!1;const r=(t.x+e.x)/2,s=(t.y+e.y)/2;do{n.y>s!=n.next.y>s&&n.next.y!==n.y&&r<(n.next.x-n.x)*(s-n.y)/(n.next.y-n.y)+n.x&&(i=!i),n=n.next}while(n!==t);return i}(t,e)&&(So(t.prev,t,e.prev)||So(t,e.prev,e))||To(t,e)&&So(t.prev,t,t.next)>0&&So(e.prev,e,e.next)>0)}function So(t,e,n){return(e.y-t.y)*(n.x-e.x)-(e.x-t.x)*(n.y-e.y)}function To(t,e){return t.x===e.x&&t.y===e.y}function Eo(t,e,n,i){const r=Lo(So(t,e,n)),s=Lo(So(t,e,i)),a=Lo(So(n,i,t)),o=Lo(So(n,i,e));return r!==s&&a!==o||(!(0!==r||!Ao(t,n,e))||(!(0!==s||!Ao(t,i,e))||(!(0!==a||!Ao(n,t,i))||!(0!==o||!Ao(n,e,i)))))}function Ao(t,e,n){return e.x<=Math.max(t.x,n.x)&&e.x>=Math.min(t.x,n.x)&&e.y<=Math.max(t.y,n.y)&&e.y>=Math.min(t.y,n.y)}function Lo(t){return t>0?1:t<0?-1:0}function Ro(t,e){return So(t.prev,t,t.next)<0?So(t,e,t.next)>=0&&So(t,t.prev,e)>=0:So(t,e,t.prev)<0||So(t,t.next,e)<0}function Co(t,e){const n=new Io(t.i,t.x,t.y),i=new Io(e.i,e.x,e.y),r=t.next,s=e.prev;return t.next=e,e.prev=t,n.next=r,r.prev=n,i.next=n,n.prev=i,s.next=i,i.prev=s,i}function Po(t,e,n,i){const r=new Io(t,e,n);return i?(r.next=i.next,r.prev=i,i.next.prev=r,i.next=r):(r.prev=r,r.next=r),r}function Do(t){t.next.prev=t.prev,t.prev.next=t.next,t.prevZ&&(t.prevZ.nextZ=t.nextZ),t.nextZ&&(t.nextZ.prevZ=t.prevZ)}function Io(t,e,n){this.i=t,this.x=e,this.y=n,this.prev=null,this.next=null,this.z=null,this.prevZ=null,this.nextZ=null,this.steiner=!1}class No{static area(t){const e=t.length;let n=0;for(let i=e-1,r=0;r2&&t[e-1].equals(t[0])&&t.pop()}function zo(t,e){for(let n=0;nNumber.EPSILON){const u=Math.sqrt(h),d=Math.sqrt(l*l+c*c),p=e.x-o/u,m=e.y+a/u,f=((n.x-c/d-p)*c-(n.y+l/d-m)*l)/(a*c-o*l);i=p+a*f-t.x,r=m+o*f-t.y;const g=i*i+r*r;if(g<=2)return new vt(i,r);s=Math.sqrt(g/2)}else{let t=!1;a>Number.EPSILON?l>Number.EPSILON&&(t=!0):a<-Number.EPSILON?l<-Number.EPSILON&&(t=!0):Math.sign(o)===Math.sign(c)&&(t=!0),t?(i=-o,r=a,s=Math.sqrt(h)):(i=a,r=o,s=Math.sqrt(h/2))}return new vt(i/s,r/s)}const P=[];for(let t=0,e=E.length,n=e-1,i=t+1;t=0;t--){const e=t/p,n=h*Math.cos(e*Math.PI/2),i=u*Math.sin(e*Math.PI/2)+d;for(let t=0,e=E.length;t=0;){const i=n;let r=n-1;r<0&&(r=t.length-1);for(let t=0,n=o+2*p;t=0?(t(i-o,p,h),u.subVectors(c,h)):(t(i+o,p,h),u.subVectors(h,c)),p-o>=0?(t(i,p-o,h),d.subVectors(c,h)):(t(i,p+o,h),d.subVectors(h,c)),l.crossVectors(u,d).normalize(),s.push(l.x,l.y,l.z),a.push(i,p)}}for(let t=0;t0)&&d.push(e,r,l),(t!==n-1||o=i)){l.push(e.times[t]);for(let n=0;ns.tracks[t].times[0]&&(o=s.tracks[t].times[0]);for(let t=0;t=i.times[u]){const t=u*l+o,e=t+l-o;d=hl.arraySlice(i.values,t,e)}else{const t=i.createInterpolant(),e=o,n=l-o;t.evaluate(s),d=hl.arraySlice(t.resultBuffer,e,n)}if("quaternion"===r){(new Lt).fromArray(d).normalize().conjugate().toArray(d)}const p=a.times.length;for(let t=0;t=r)break t;{const a=e[1];t=r)break e}s=n,n=0}}for(;n>>1;te;)--s;if(++s,0!==r||s!==i){r>=s&&(s=Math.max(s,1),r=s-1);const t=this.getValueSize();this.times=hl.arraySlice(n,r,s),this.values=hl.arraySlice(this.values,r*t,s*t)}return this}validate(){let t=!0;const e=this.getValueSize();e-Math.floor(e)!=0&&(console.error("THREE.KeyframeTrack: Invalid value size in track.",this),t=!1);const n=this.times,i=this.values,r=n.length;0===r&&(console.error("THREE.KeyframeTrack: Track is empty.",this),t=!1);let s=null;for(let e=0;e!==r;e++){const i=n[e];if("number"==typeof i&&isNaN(i)){console.error("THREE.KeyframeTrack: Time is not a valid number.",this,e,i),t=!1;break}if(null!==s&&s>i){console.error("THREE.KeyframeTrack: Out of order keys.",this,e,i,s),t=!1;break}s=i}if(void 0!==i&&hl.isTypedArray(i))for(let e=0,n=i.length;e!==n;++e){const n=i[e];if(isNaN(n)){console.error("THREE.KeyframeTrack: Value is not a valid number.",this,e,n),t=!1;break}}return t}optimize(){const t=hl.arraySlice(this.times),e=hl.arraySlice(this.values),n=this.getValueSize(),i=this.getInterpolation()===G,r=t.length-1;let s=1;for(let a=1;a0){t[s]=t[r];for(let t=r*n,i=s*n,a=0;a!==n;++a)e[i+a]=e[t+a];++s}return s!==t.length?(this.times=hl.arraySlice(t,0,s),this.values=hl.arraySlice(e,0,s*n)):(this.times=t,this.values=e),this}clone(){const t=hl.arraySlice(this.times,0),e=hl.arraySlice(this.values,0),n=new(0,this.constructor)(this.name,t,e);return n.createInterpolant=this.createInterpolant,n}}fl.prototype.TimeBufferType=Float32Array,fl.prototype.ValueBufferType=Float32Array,fl.prototype.DefaultInterpolation=U;class gl extends fl{}gl.prototype.ValueTypeName="bool",gl.prototype.ValueBufferType=Array,gl.prototype.DefaultInterpolation=H,gl.prototype.InterpolantFactoryMethodLinear=void 0,gl.prototype.InterpolantFactoryMethodSmooth=void 0;class vl extends fl{}vl.prototype.ValueTypeName="color";class yl extends fl{}yl.prototype.ValueTypeName="number";class xl extends ul{constructor(t,e,n,i){super(t,e,n,i)}interpolate_(t,e,n,i){const r=this.resultBuffer,s=this.sampleValues,a=this.valueSize,o=(n-e)/(i-e);let l=t*a;for(let t=l+a;l!==t;l+=4)Lt.slerpFlat(r,0,s,l-a,s,l,o);return r}}class _l extends fl{InterpolantFactoryMethodLinear(t){return new xl(this.times,this.values,this.getValueSize(),t)}}_l.prototype.ValueTypeName="quaternion",_l.prototype.DefaultInterpolation=U,_l.prototype.InterpolantFactoryMethodSmooth=void 0;class bl extends fl{}bl.prototype.ValueTypeName="string",bl.prototype.ValueBufferType=Array,bl.prototype.DefaultInterpolation=H,bl.prototype.InterpolantFactoryMethodLinear=void 0,bl.prototype.InterpolantFactoryMethodSmooth=void 0;class Ml extends fl{}Ml.prototype.ValueTypeName="vector";class wl{constructor(t,e=-1,n,i=2500){this.name=t,this.tracks=n,this.duration=e,this.blendMode=i,this.uuid=ct(),this.duration<0&&this.resetDuration()}static parse(t){const e=[],n=t.tracks,i=1/(t.fps||1);for(let t=0,r=n.length;t!==r;++t)e.push(Sl(n[t]).scale(i));const r=new this(t.name,t.duration,e,t.blendMode);return r.uuid=t.uuid,r}static toJSON(t){const e=[],n=t.tracks,i={name:t.name,duration:t.duration,tracks:e,uuid:t.uuid,blendMode:t.blendMode};for(let t=0,i=n.length;t!==i;++t)e.push(fl.toJSON(n[t]));return i}static CreateFromMorphTargetSequence(t,e,n,i){const r=e.length,s=[];for(let t=0;t1){const t=s[1];let e=i[t];e||(i[t]=e=[]),e.push(n)}}const s=[];for(const t in i)s.push(this.CreateFromMorphTargetSequence(t,i[t],e,n));return s}static parseAnimation(t,e){if(!t)return console.error("THREE.AnimationClip: No animation in JSONLoader data."),null;const n=function(t,e,n,i,r){if(0!==n.length){const s=[],a=[];hl.flattenJSON(n,s,a,i),0!==s.length&&r.push(new t(e,s,a))}},i=[],r=t.name||"default",s=t.fps||30,a=t.blendMode;let o=t.length||-1;const l=t.hierarchy||[];for(let t=0;t0||0===t.search(/^data\:image\/jpeg/);r.format=i?T:E,r.needsUpdate=!0,void 0!==e&&e(r)}),n,i),r}}class Bl extends ka{constructor(){super(),this.type="CurvePath",this.curves=[],this.autoClose=!1}add(t){this.curves.push(t)}closePath(){const t=this.curves[0].getPoint(0),e=this.curves[this.curves.length-1].getPoint(1);t.equals(e)||this.curves.push(new no(e,t))}getPoint(t){const e=t*this.getLength(),n=this.getCurveLengths();let i=0;for(;i=e){const t=n[i]-e,r=this.curves[i],s=r.getLength(),a=0===s?0:1-t/s;return r.getPointAt(a)}i++}return null}getLength(){const t=this.getCurveLengths();return t[t.length-1]}updateArcLengths(){this.needsUpdate=!0,this.cacheLengths=null,this.getCurveLengths()}getCurveLengths(){if(this.cacheLengths&&this.cacheLengths.length===this.curves.length)return this.cacheLengths;const t=[];let e=0;for(let n=0,i=this.curves.length;n1&&!e[e.length-1].equals(e[0])&&e.push(e[0]),e}copy(t){super.copy(t),this.curves=[];for(let e=0,n=t.curves.length;e0){const t=l.getPoint(0);t.equals(this.currentPoint)||this.lineTo(t.x,t.y)}this.curves.push(l);const c=l.getPoint(1);return this.currentPoint.copy(c),this}copy(t){return super.copy(t),this.currentPoint.copy(t.currentPoint),this}toJSON(){const t=super.toJSON();return t.currentPoint=this.currentPoint.toArray(),t}fromJSON(t){return super.fromJSON(t),this.currentPoint.fromArray(t.currentPoint),this}}class Fl extends zl{constructor(t){super(t),this.uuid=ct(),this.type="Shape",this.holes=[]}getPointsHoles(t){const e=[];for(let n=0,i=this.holes.length;n0:i.vertexColors=t.vertexColors),void 0!==t.uniforms)for(const e in t.uniforms){const r=t.uniforms[e];switch(i.uniforms[e]={},r.type){case"t":i.uniforms[e].value=n(r.value);break;case"c":i.uniforms[e].value=(new Qe).setHex(r.value);break;case"v2":i.uniforms[e].value=(new vt).fromArray(r.value);break;case"v3":i.uniforms[e].value=(new Rt).fromArray(r.value);break;case"v4":i.uniforms[e].value=(new St).fromArray(r.value);break;case"m3":i.uniforms[e].value=(new yt).fromArray(r.value);break;case"m4":i.uniforms[e].value=(new ae).fromArray(r.value);break;default:i.uniforms[e].value=r.value}}if(void 0!==t.defines&&(i.defines=t.defines),void 0!==t.vertexShader&&(i.vertexShader=t.vertexShader),void 0!==t.fragmentShader&&(i.fragmentShader=t.fragmentShader),void 0!==t.extensions)for(const e in t.extensions)i.extensions[e]=t.extensions[e];if(void 0!==t.shading&&(i.flatShading=1===t.shading),void 0!==t.size&&(i.size=t.size),void 0!==t.sizeAttenuation&&(i.sizeAttenuation=t.sizeAttenuation),void 0!==t.map&&(i.map=n(t.map)),void 0!==t.matcap&&(i.matcap=n(t.matcap)),void 0!==t.alphaMap&&(i.alphaMap=n(t.alphaMap)),void 0!==t.bumpMap&&(i.bumpMap=n(t.bumpMap)),void 0!==t.bumpScale&&(i.bumpScale=t.bumpScale),void 0!==t.normalMap&&(i.normalMap=n(t.normalMap)),void 0!==t.normalMapType&&(i.normalMapType=t.normalMapType),void 0!==t.normalScale){let e=t.normalScale;!1===Array.isArray(e)&&(e=[e,e]),i.normalScale=(new vt).fromArray(e)}return void 0!==t.displacementMap&&(i.displacementMap=n(t.displacementMap)),void 0!==t.displacementScale&&(i.displacementScale=t.displacementScale),void 0!==t.displacementBias&&(i.displacementBias=t.displacementBias),void 0!==t.roughnessMap&&(i.roughnessMap=n(t.roughnessMap)),void 0!==t.metalnessMap&&(i.metalnessMap=n(t.metalnessMap)),void 0!==t.emissiveMap&&(i.emissiveMap=n(t.emissiveMap)),void 0!==t.emissiveIntensity&&(i.emissiveIntensity=t.emissiveIntensity),void 0!==t.specularMap&&(i.specularMap=n(t.specularMap)),void 0!==t.envMap&&(i.envMap=n(t.envMap)),void 0!==t.envMapIntensity&&(i.envMapIntensity=t.envMapIntensity),void 0!==t.reflectivity&&(i.reflectivity=t.reflectivity),void 0!==t.refractionRatio&&(i.refractionRatio=t.refractionRatio),void 0!==t.lightMap&&(i.lightMap=n(t.lightMap)),void 0!==t.lightMapIntensity&&(i.lightMapIntensity=t.lightMapIntensity),void 0!==t.aoMap&&(i.aoMap=n(t.aoMap)),void 0!==t.aoMapIntensity&&(i.aoMapIntensity=t.aoMapIntensity),void 0!==t.gradientMap&&(i.gradientMap=n(t.gradientMap)),void 0!==t.clearcoatMap&&(i.clearcoatMap=n(t.clearcoatMap)),void 0!==t.clearcoatRoughnessMap&&(i.clearcoatRoughnessMap=n(t.clearcoatRoughnessMap)),void 0!==t.clearcoatNormalMap&&(i.clearcoatNormalMap=n(t.clearcoatNormalMap)),void 0!==t.clearcoatNormalScale&&(i.clearcoatNormalScale=(new vt).fromArray(t.clearcoatNormalScale)),void 0!==t.transmissionMap&&(i.transmissionMap=n(t.transmissionMap)),void 0!==t.thicknessMap&&(i.thicknessMap=n(t.thicknessMap)),i}setTextures(t){return this.textures=t,this}}class sc{static decodeText(t){if("undefined"!=typeof TextDecoder)return(new TextDecoder).decode(t);let e="";for(let n=0,i=t.length;nNumber.EPSILON){if(l<0&&(n=e[s],o=-o,a=e[r],l=-l),t.ya.y)continue;if(t.y===n.y){if(t.x===n.x)return!0}else{const e=l*(t.x-n.x)-o*(t.y-n.y);if(0===e)return!0;if(e<0)continue;i=!i}}else{if(t.y!==n.y)continue;if(a.x<=t.x&&t.x<=n.x||n.x<=t.x&&t.x<=a.x)return!0}}return i}const r=No.isClockWise,s=this.subPaths;if(0===s.length)return[];if(!0===e)return n(s);let a,o,l;const c=[];if(1===s.length)return o=s[0],l=new Fl,l.curves=o.curves,c.push(l),c;let h=!r(s[0].getPoints());h=t?!h:h;const u=[],d=[];let p,m,f=[],g=0;d[g]=void 0,f[g]=[];for(let e=0,n=s.length;e1){let t=!1;const e=[];for(let t=0,e=d.length;t0&&(t||(f=u))}for(let t=0,e=d.length;t0){this.source.connect(this.filters[0]);for(let t=1,e=this.filters.length;t0){this.source.disconnect(this.filters[0]);for(let t=1,e=this.filters.length;t0&&this._mixBufferRegionAdditive(n,i,this._addIndex*e,1,e);for(let t=e,r=e+e;t!==r;++t)if(n[t]!==n[t+e]){a.setValue(n,i);break}}saveOriginalState(){const t=this.binding,e=this.buffer,n=this.valueSize,i=n*this._origIndex;t.getValue(e,i);for(let t=n,r=i;t!==r;++t)e[t]=e[i+t%n];this._setIdentity(),this.cumulativeWeight=0,this.cumulativeWeightAdditive=0}restoreOriginalState(){const t=3*this.valueSize;this.binding.setValue(this.buffer,t)}_setAdditiveIdentityNumeric(){const t=this._addIndex*this.valueSize,e=t+this.valueSize;for(let n=t;n=.5)for(let i=0;i!==r;++i)t[e+i]=t[n+i]}_slerp(t,e,n,i){Lt.slerpFlat(t,e,t,e,t,n,i)}_slerpAdditive(t,e,n,i,r){const s=this._workIndex*r;Lt.multiplyQuaternionsFlat(t,s,t,e,t,n),Lt.slerpFlat(t,e,t,e,t,s,i)}_lerp(t,e,n,i,r){const s=1-i;for(let a=0;a!==r;++a){const r=e+a;t[r]=t[r]*s+t[n+a]*i}}_lerpAdditive(t,e,n,i,r){for(let s=0;s!==r;++s){const r=e+s;t[r]=t[r]+t[n+s]*i}}}const zc="\\[\\]\\.:\\/",Fc=new RegExp("[\\[\\]\\.:\\/]","g"),Oc="[^\\[\\]\\.:\\/]",Hc="[^"+zc.replace("\\.","")+"]",Uc=/((?:WC+[\/:])*)/.source.replace("WC",Oc),Gc=/(WCOD+)?/.source.replace("WCOD",Hc),kc=/(?:\.(WC+)(?:\[(.+)\])?)?/.source.replace("WC",Oc),Vc=/\.(WC+)(?:\[(.+)\])?/.source.replace("WC",Oc),Wc=new RegExp("^"+Uc+Gc+kc+Vc+"$"),jc=["material","materials","bones"];class qc{constructor(t,e,n){this.path=e,this.parsedPath=n||qc.parseTrackName(e),this.node=qc.findNode(t,this.parsedPath.nodeName)||t,this.rootNode=t,this.getValue=this._getValue_unbound,this.setValue=this._setValue_unbound}static create(t,e,n){return t&&t.isAnimationObjectGroup?new qc.Composite(t,e,n):new qc(t,e,n)}static sanitizeNodeName(t){return t.replace(/\s/g,"_").replace(Fc,"")}static parseTrackName(t){const e=Wc.exec(t);if(!e)throw new Error("PropertyBinding: Cannot parse trackName: "+t);const n={nodeName:e[2],objectName:e[3],objectIndex:e[4],propertyName:e[5],propertyIndex:e[6]},i=n.nodeName&&n.nodeName.lastIndexOf(".");if(void 0!==i&&-1!==i){const t=n.nodeName.substring(i+1);-1!==jc.indexOf(t)&&(n.nodeName=n.nodeName.substring(0,i),n.objectName=t)}if(null===n.propertyName||0===n.propertyName.length)throw new Error("PropertyBinding: can not parse propertyName from trackName: "+t);return n}static findNode(t,e){if(!e||""===e||"."===e||-1===e||e===t.name||e===t.uuid)return t;if(t.skeleton){const n=t.skeleton.getBoneByName(e);if(void 0!==n)return n}if(t.children){const n=function(t){for(let i=0;i=r){const s=r++,c=t[s];e[c.uuid]=l,t[l]=c,e[o]=s,t[s]=a;for(let t=0,e=i;t!==e;++t){const e=n[t],i=e[s],r=e[l];e[l]=i,e[s]=r}}}this.nCachedObjects_=r}uncache(){const t=this._objects,e=this._indicesByUUID,n=this._bindings,i=n.length;let r=this.nCachedObjects_,s=t.length;for(let a=0,o=arguments.length;a!==o;++a){const o=arguments[a].uuid,l=e[o];if(void 0!==l)if(delete e[o],l0&&(e[a.uuid]=l),t[l]=a,t.pop();for(let t=0,e=i;t!==e;++t){const e=n[t];e[l]=e[r],e.pop()}}}this.nCachedObjects_=r}subscribe_(t,e){const n=this._bindingsIndicesByPath;let i=n[t];const r=this._bindings;if(void 0!==i)return r[i];const s=this._paths,a=this._parsedPaths,o=this._objects,l=o.length,c=this.nCachedObjects_,h=new Array(l);i=r.length,n[t]=i,s.push(t),a.push(e),r.push(h);for(let n=c,i=o.length;n!==i;++n){const i=o[n];h[n]=new qc(i,t,e)}return h}unsubscribe_(t){const e=this._bindingsIndicesByPath,n=e[t];if(void 0!==n){const i=this._paths,r=this._parsedPaths,s=this._bindings,a=s.length-1,o=s[a];e[t[a]]=n,s[n]=o,s.pop(),r[n]=r[a],r.pop(),i[n]=i[a],i.pop()}}}Xc.prototype.isAnimationObjectGroup=!0;class Yc{constructor(t,e,n=null,i=e.blendMode){this._mixer=t,this._clip=e,this._localRoot=n,this.blendMode=i;const r=e.tracks,s=r.length,a=new Array(s),o={endingStart:k,endingEnd:k};for(let t=0;t!==s;++t){const e=r[t].createInterpolant(null);a[t]=e,e.settings=o}this._interpolantSettings=o,this._interpolants=a,this._propertyBindings=new Array(s),this._cacheIndex=null,this._byClipCacheIndex=null,this._timeScaleInterpolant=null,this._weightInterpolant=null,this.loop=2201,this._loopCount=-1,this._startTime=null,this.time=0,this.timeScale=1,this._effectiveTimeScale=1,this.weight=1,this._effectiveWeight=1,this.repetitions=1/0,this.paused=!1,this.enabled=!0,this.clampWhenFinished=!1,this.zeroSlopeAtStart=!0,this.zeroSlopeAtEnd=!0}play(){return this._mixer._activateAction(this),this}stop(){return this._mixer._deactivateAction(this),this.reset()}reset(){return this.paused=!1,this.enabled=!0,this.time=0,this._loopCount=-1,this._startTime=null,this.stopFading().stopWarping()}isRunning(){return this.enabled&&!this.paused&&0!==this.timeScale&&null===this._startTime&&this._mixer._isActiveAction(this)}isScheduled(){return this._mixer._isActiveAction(this)}startAt(t){return this._startTime=t,this}setLoop(t,e){return this.loop=t,this.repetitions=e,this}setEffectiveWeight(t){return this.weight=t,this._effectiveWeight=this.enabled?t:0,this.stopFading()}getEffectiveWeight(){return this._effectiveWeight}fadeIn(t){return this._scheduleFading(t,0,1)}fadeOut(t){return this._scheduleFading(t,1,0)}crossFadeFrom(t,e,n){if(t.fadeOut(e),this.fadeIn(e),n){const n=this._clip.duration,i=t._clip.duration,r=i/n,s=n/i;t.warp(1,r,e),this.warp(s,1,e)}return this}crossFadeTo(t,e,n){return t.crossFadeFrom(this,e,n)}stopFading(){const t=this._weightInterpolant;return null!==t&&(this._weightInterpolant=null,this._mixer._takeBackControlInterpolant(t)),this}setEffectiveTimeScale(t){return this.timeScale=t,this._effectiveTimeScale=this.paused?0:t,this.stopWarping()}getEffectiveTimeScale(){return this._effectiveTimeScale}setDuration(t){return this.timeScale=this._clip.duration/t,this.stopWarping()}syncWith(t){return this.time=t.time,this.timeScale=t.timeScale,this.stopWarping()}halt(t){return this.warp(this._effectiveTimeScale,0,t)}warp(t,e,n){const i=this._mixer,r=i.time,s=this.timeScale;let a=this._timeScaleInterpolant;null===a&&(a=i._lendControlInterpolant(),this._timeScaleInterpolant=a);const o=a.parameterPositions,l=a.sampleValues;return o[0]=r,o[1]=r+n,l[0]=t/s,l[1]=e/s,this}stopWarping(){const t=this._timeScaleInterpolant;return null!==t&&(this._timeScaleInterpolant=null,this._mixer._takeBackControlInterpolant(t)),this}getMixer(){return this._mixer}getClip(){return this._clip}getRoot(){return this._localRoot||this._mixer._root}_update(t,e,n,i){if(!this.enabled)return void this._updateWeight(t);const r=this._startTime;if(null!==r){const i=(t-r)*n;if(i<0||0===n)return;this._startTime=null,e=n*i}e*=this._updateTimeScale(t);const s=this._updateTime(e),a=this._updateWeight(t);if(a>0){const t=this._interpolants,e=this._propertyBindings;switch(this.blendMode){case q:for(let n=0,i=t.length;n!==i;++n)t[n].evaluate(s),e[n].accumulateAdditive(a);break;case j:default:for(let n=0,r=t.length;n!==r;++n)t[n].evaluate(s),e[n].accumulate(i,a)}}}_updateWeight(t){let e=0;if(this.enabled){e=this.weight;const n=this._weightInterpolant;if(null!==n){const i=n.evaluate(t)[0];e*=i,t>n.parameterPositions[1]&&(this.stopFading(),0===i&&(this.enabled=!1))}}return this._effectiveWeight=e,e}_updateTimeScale(t){let e=0;if(!this.paused){e=this.timeScale;const n=this._timeScaleInterpolant;if(null!==n){e*=n.evaluate(t)[0],t>n.parameterPositions[1]&&(this.stopWarping(),0===e?this.paused=!0:this.timeScale=e)}}return this._effectiveTimeScale=e,e}_updateTime(t){const e=this._clip.duration,n=this.loop;let i=this.time+t,r=this._loopCount;const s=2202===n;if(0===t)return-1===r?i:s&&1==(1&r)?e-i:i;if(2200===n){-1===r&&(this._loopCount=0,this._setEndings(!0,!0,!1));t:{if(i>=e)i=e;else{if(!(i<0)){this.time=i;break t}i=0}this.clampWhenFinished?this.paused=!0:this.enabled=!1,this.time=i,this._mixer.dispatchEvent({type:"finished",action:this,direction:t<0?-1:1})}}else{if(-1===r&&(t>=0?(r=0,this._setEndings(!0,0===this.repetitions,s)):this._setEndings(0===this.repetitions,!0,s)),i>=e||i<0){const n=Math.floor(i/e);i-=e*n,r+=Math.abs(n);const a=this.repetitions-r;if(a<=0)this.clampWhenFinished?this.paused=!0:this.enabled=!1,i=t>0?e:0,this.time=i,this._mixer.dispatchEvent({type:"finished",action:this,direction:t>0?1:-1});else{if(1===a){const e=t<0;this._setEndings(e,!e,s)}else this._setEndings(!1,!1,s);this._loopCount=r,this.time=i,this._mixer.dispatchEvent({type:"loop",action:this,loopDelta:n})}}else this.time=i;if(s&&1==(1&r))return e-i}return i}_setEndings(t,e,n){const i=this._interpolantSettings;n?(i.endingStart=V,i.endingEnd=V):(i.endingStart=t?this.zeroSlopeAtStart?V:k:W,i.endingEnd=e?this.zeroSlopeAtEnd?V:k:W)}_scheduleFading(t,e,n){const i=this._mixer,r=i.time;let s=this._weightInterpolant;null===s&&(s=i._lendControlInterpolant(),this._weightInterpolant=s);const a=s.parameterPositions,o=s.sampleValues;return a[0]=r,o[0]=e,a[1]=r+t,o[1]=n,this}}class Jc extends rt{constructor(t){super(),this._root=t,this._initMemoryManager(),this._accuIndex=0,this.time=0,this.timeScale=1}_bindAction(t,e){const n=t._localRoot||this._root,i=t._clip.tracks,r=i.length,s=t._propertyBindings,a=t._interpolants,o=n.uuid,l=this._bindingsByRootAndName;let c=l[o];void 0===c&&(c={},l[o]=c);for(let t=0;t!==r;++t){const r=i[t],l=r.name;let h=c[l];if(void 0!==h)s[t]=h;else{if(h=s[t],void 0!==h){null===h._cacheIndex&&(++h.referenceCount,this._addInactiveBinding(h,o,l));continue}const i=e&&e._propertyBindings[t].binding.parsedPath;h=new Bc(qc.create(n,l,i),r.ValueTypeName,r.getValueSize()),++h.referenceCount,this._addInactiveBinding(h,o,l),s[t]=h}a[t].resultBuffer=h.buffer}}_activateAction(t){if(!this._isActiveAction(t)){if(null===t._cacheIndex){const e=(t._localRoot||this._root).uuid,n=t._clip.uuid,i=this._actionsByClip[n];this._bindAction(t,i&&i.knownActions[0]),this._addInactiveAction(t,n,e)}const e=t._propertyBindings;for(let t=0,n=e.length;t!==n;++t){const n=e[t];0==n.useCount++&&(this._lendBinding(n),n.saveOriginalState())}this._lendAction(t)}}_deactivateAction(t){if(this._isActiveAction(t)){const e=t._propertyBindings;for(let t=0,n=e.length;t!==n;++t){const n=e[t];0==--n.useCount&&(n.restoreOriginalState(),this._takeBackBinding(n))}this._takeBackAction(t)}}_initMemoryManager(){this._actions=[],this._nActiveActions=0,this._actionsByClip={},this._bindings=[],this._nActiveBindings=0,this._bindingsByRootAndName={},this._controlInterpolants=[],this._nActiveControlInterpolants=0;const t=this;this.stats={actions:{get total(){return t._actions.length},get inUse(){return t._nActiveActions}},bindings:{get total(){return t._bindings.length},get inUse(){return t._nActiveBindings}},controlInterpolants:{get total(){return t._controlInterpolants.length},get inUse(){return t._nActiveControlInterpolants}}}}_isActiveAction(t){const e=t._cacheIndex;return null!==e&&e=0;--e)t[e].stop();return this}update(t){t*=this.timeScale;const e=this._actions,n=this._nActiveActions,i=this.time+=t,r=Math.sign(t),s=this._accuIndex^=1;for(let a=0;a!==n;++a){e[a]._update(i,t,r,s)}const a=this._bindings,o=this._nActiveBindings;for(let t=0;t!==o;++t)a[t].apply(s);return this}setTime(t){this.time=0;for(let t=0;tthis.max.x||t.ythis.max.y)}containsBox(t){return this.min.x<=t.min.x&&t.max.x<=this.max.x&&this.min.y<=t.min.y&&t.max.y<=this.max.y}getParameter(t,e){return e.set((t.x-this.min.x)/(this.max.x-this.min.x),(t.y-this.min.y)/(this.max.y-this.min.y))}intersectsBox(t){return!(t.max.xthis.max.x||t.max.ythis.max.y)}clampPoint(t,e){return e.copy(t).clamp(this.min,this.max)}distanceToPoint(t){return eh.copy(t).clamp(this.min,this.max).sub(t).length()}intersect(t){return this.min.max(t.min),this.max.min(t.max),this}union(t){return this.min.min(t.min),this.max.max(t.max),this}translate(t){return this.min.add(t),this.max.add(t),this}equals(t){return t.min.equals(this.min)&&t.max.equals(this.max)}}nh.prototype.isBox2=!0;const ih=new Rt,rh=new Rt;class sh{constructor(t=new Rt,e=new Rt){this.start=t,this.end=e}set(t,e){return this.start.copy(t),this.end.copy(e),this}copy(t){return this.start.copy(t.start),this.end.copy(t.end),this}getCenter(t){return t.addVectors(this.start,this.end).multiplyScalar(.5)}delta(t){return t.subVectors(this.end,this.start)}distanceSq(){return this.start.distanceToSquared(this.end)}distance(){return this.start.distanceTo(this.end)}at(t,e){return this.delta(e).multiplyScalar(t).add(this.start)}closestPointToPointParameter(t,e){ih.subVectors(t,this.start),rh.subVectors(this.end,this.start);const n=rh.dot(rh);let i=rh.dot(ih)/n;return e&&(i=ht(i,0,1)),i}closestPointToPoint(t,e,n){const i=this.closestPointToPointParameter(t,e);return this.delta(n).multiplyScalar(i).add(this.start)}applyMatrix4(t){return this.start.applyMatrix4(t),this.end.applyMatrix4(t),this}equals(t){return t.start.equals(this.start)&&t.end.equals(this.end)}clone(){return(new this.constructor).copy(this)}}class ah extends Pe{constructor(t){super(),this.material=t,this.render=function(){},this.hasPositions=!1,this.hasNormals=!1,this.hasColors=!1,this.hasUvs=!1,this.positionArray=null,this.normalArray=null,this.colorArray=null,this.uvArray=null,this.count=0}}ah.prototype.isImmediateRenderObject=!0;const oh=new Rt;const lh=new Rt,ch=new ae,hh=new ae;class uh extends xa{constructor(t){const e=dh(t),n=new wn,i=[],r=[],s=new Qe(0,0,1),a=new Qe(0,1,0);for(let t=0;t4?a=Dh[r-8+4-1]:0==r&&(a=0),n.push(a);const o=1/(s-1),l=-o/2,c=1+o/2,h=[l,l,c,l,c,c,l,l,c,c,l,c],u=6,d=6,p=3,m=2,f=1,g=new Float32Array(p*d*u),v=new Float32Array(m*d*u),y=new Float32Array(f*d*u);for(let t=0;t2?0:-1,i=[e,n,0,e+2/3,n,0,e+2/3,n+1,0,e,n,0,e+2/3,n+1,0,e,n+1,0];g.set(i,p*d*t),v.set(h,m*d*t);const r=[t,t,t,t,t,t];y.set(r,f*d*t)}const x=new wn;x.setAttribute("position",new en(g,p)),x.setAttribute("uv",new en(v,m)),x.setAttribute("faceIndex",new en(y,f)),t.push(x),i>4&&i--}return{_lodPlanes:t,_sizeLods:e,_sigmas:n}}function Zh(t){const e=new Tt(3*Ph,3*Ph,t);return e.texture.mapping=l,e.texture.name="PMREM.cubeUv",e.scissorTest=!0,e}function Qh(t,e,n,i,r){t.viewport.set(e,n,i,r),t.scissor.set(e,n,i,r)}function Kh(){const t=new vt(1,1);return new tl({name:"EquirectangularToCubeUV",uniforms:{envMap:{value:null},texelSize:{value:t},inputEncoding:{value:Bh[3e3]},outputEncoding:{value:Bh[3e3]}},vertexShader:tu(),fragmentShader:`\n\n\t\t\tprecision mediump float;\n\t\t\tprecision mediump int;\n\n\t\t\tvarying vec3 vOutputDirection;\n\n\t\t\tuniform sampler2D envMap;\n\t\t\tuniform vec2 texelSize;\n\n\t\t\t${eu()}\n\n\t\t\t#include \n\n\t\t\tvoid main() {\n\n\t\t\t\tgl_FragColor = vec4( 0.0, 0.0, 0.0, 1.0 );\n\n\t\t\t\tvec3 outputDirection = normalize( vOutputDirection );\n\t\t\t\tvec2 uv = equirectUv( outputDirection );\n\n\t\t\t\tvec2 f = fract( uv / texelSize - 0.5 );\n\t\t\t\tuv -= f * texelSize;\n\t\t\t\tvec3 tl = envMapTexelToLinear( texture2D ( envMap, uv ) ).rgb;\n\t\t\t\tuv.x += texelSize.x;\n\t\t\t\tvec3 tr = envMapTexelToLinear( texture2D ( envMap, uv ) ).rgb;\n\t\t\t\tuv.y += texelSize.y;\n\t\t\t\tvec3 br = envMapTexelToLinear( texture2D ( envMap, uv ) ).rgb;\n\t\t\t\tuv.x -= texelSize.x;\n\t\t\t\tvec3 bl = envMapTexelToLinear( texture2D ( envMap, uv ) ).rgb;\n\n\t\t\t\tvec3 tm = mix( tl, tr, f.x );\n\t\t\t\tvec3 bm = mix( bl, br, f.x );\n\t\t\t\tgl_FragColor.rgb = mix( tm, bm, f.y );\n\n\t\t\t\tgl_FragColor = linearToOutputTexel( gl_FragColor );\n\n\t\t\t}\n\t\t`,blending:0,depthTest:!1,depthWrite:!1})}function $h(){return new tl({name:"CubemapToCubeUV",uniforms:{envMap:{value:null},inputEncoding:{value:Bh[3e3]},outputEncoding:{value:Bh[3e3]}},vertexShader:tu(),fragmentShader:`\n\n\t\t\tprecision mediump float;\n\t\t\tprecision mediump int;\n\n\t\t\tvarying vec3 vOutputDirection;\n\n\t\t\tuniform samplerCube envMap;\n\n\t\t\t${eu()}\n\n\t\t\tvoid main() {\n\n\t\t\t\tgl_FragColor = vec4( 0.0, 0.0, 0.0, 1.0 );\n\t\t\t\tgl_FragColor.rgb = envMapTexelToLinear( textureCube( envMap, vec3( - vOutputDirection.x, vOutputDirection.yz ) ) ).rgb;\n\t\t\t\tgl_FragColor = linearToOutputTexel( gl_FragColor );\n\n\t\t\t}\n\t\t`,blending:0,depthTest:!1,depthWrite:!1})}function tu(){return"\n\n\t\tprecision mediump float;\n\t\tprecision mediump int;\n\n\t\tattribute vec3 position;\n\t\tattribute vec2 uv;\n\t\tattribute float faceIndex;\n\n\t\tvarying vec3 vOutputDirection;\n\n\t\t// RH coordinate system; PMREM face-indexing convention\n\t\tvec3 getDirection( vec2 uv, float face ) {\n\n\t\t\tuv = 2.0 * uv - 1.0;\n\n\t\t\tvec3 direction = vec3( uv, 1.0 );\n\n\t\t\tif ( face == 0.0 ) {\n\n\t\t\t\tdirection = direction.zyx; // ( 1, v, u ) pos x\n\n\t\t\t} else if ( face == 1.0 ) {\n\n\t\t\t\tdirection = direction.xzy;\n\t\t\t\tdirection.xz *= -1.0; // ( -u, 1, -v ) pos y\n\n\t\t\t} else if ( face == 2.0 ) {\n\n\t\t\t\tdirection.x *= -1.0; // ( -u, v, 1 ) pos z\n\n\t\t\t} else if ( face == 3.0 ) {\n\n\t\t\t\tdirection = direction.zyx;\n\t\t\t\tdirection.xz *= -1.0; // ( -1, v, -u ) neg x\n\n\t\t\t} else if ( face == 4.0 ) {\n\n\t\t\t\tdirection = direction.xzy;\n\t\t\t\tdirection.xy *= -1.0; // ( -u, -1, v ) neg y\n\n\t\t\t} else if ( face == 5.0 ) {\n\n\t\t\t\tdirection.z *= -1.0; // ( u, v, -1 ) neg z\n\n\t\t\t}\n\n\t\t\treturn direction;\n\n\t\t}\n\n\t\tvoid main() {\n\n\t\t\tvOutputDirection = getDirection( uv, faceIndex );\n\t\t\tgl_Position = vec4( position, 1.0 );\n\n\t\t}\n\t"}function eu(){return"\n\n\t\tuniform int inputEncoding;\n\t\tuniform int outputEncoding;\n\n\t\t#include \n\n\t\tvec4 inputTexelToLinear( vec4 value ) {\n\n\t\t\tif ( inputEncoding == 0 ) {\n\n\t\t\t\treturn value;\n\n\t\t\t} else if ( inputEncoding == 1 ) {\n\n\t\t\t\treturn sRGBToLinear( value );\n\n\t\t\t} else if ( inputEncoding == 2 ) {\n\n\t\t\t\treturn RGBEToLinear( value );\n\n\t\t\t} else if ( inputEncoding == 3 ) {\n\n\t\t\t\treturn RGBMToLinear( value, 7.0 );\n\n\t\t\t} else if ( inputEncoding == 4 ) {\n\n\t\t\t\treturn RGBMToLinear( value, 16.0 );\n\n\t\t\t} else if ( inputEncoding == 5 ) {\n\n\t\t\t\treturn RGBDToLinear( value, 256.0 );\n\n\t\t\t} else {\n\n\t\t\t\treturn GammaToLinear( value, 2.2 );\n\n\t\t\t}\n\n\t\t}\n\n\t\tvec4 linearToOutputTexel( vec4 value ) {\n\n\t\t\tif ( outputEncoding == 0 ) {\n\n\t\t\t\treturn value;\n\n\t\t\t} else if ( outputEncoding == 1 ) {\n\n\t\t\t\treturn LinearTosRGB( value );\n\n\t\t\t} else if ( outputEncoding == 2 ) {\n\n\t\t\t\treturn LinearToRGBE( value );\n\n\t\t\t} else if ( outputEncoding == 3 ) {\n\n\t\t\t\treturn LinearToRGBM( value, 7.0 );\n\n\t\t\t} else if ( outputEncoding == 4 ) {\n\n\t\t\t\treturn LinearToRGBM( value, 16.0 );\n\n\t\t\t} else if ( outputEncoding == 5 ) {\n\n\t\t\t\treturn LinearToRGBD( value, 256.0 );\n\n\t\t\t} else {\n\n\t\t\t\treturn LinearToGamma( value, 2.2 );\n\n\t\t\t}\n\n\t\t}\n\n\t\tvec4 envMapTexelToLinear( vec4 color ) {\n\n\t\t\treturn inputTexelToLinear( color );\n\n\t\t}\n\t"}ka.create=function(t,e){return console.log("THREE.Curve.create() has been deprecated"),t.prototype=Object.create(ka.prototype),t.prototype.constructor=t,t.prototype.getPoint=e,t},zl.prototype.fromPoints=function(t){return console.warn("THREE.Path: .fromPoints() has been renamed to .setFromPoints()."),this.setFromPoints(t)},gh.prototype.setColors=function(){console.error("THREE.GridHelper: setColors() has been deprecated, pass them in the constructor instead.")},uh.prototype.update=function(){console.error("THREE.SkeletonHelper: update() no longer needs to be called.")},Ll.prototype.extractUrlBase=function(t){return console.warn("THREE.Loader: .extractUrlBase() has been deprecated. Use THREE.LoaderUtils.extractUrlBase() instead."),sc.extractUrlBase(t)},Ll.Handlers={add:function(){console.error("THREE.Loader: Handlers.add() has been removed. Use LoadingManager.addHandler() instead.")},get:function(){console.error("THREE.Loader: Handlers.get() has been removed. Use LoadingManager.getHandler() instead.")}},nh.prototype.center=function(t){return console.warn("THREE.Box2: .center() has been renamed to .getCenter()."),this.getCenter(t)},nh.prototype.empty=function(){return console.warn("THREE.Box2: .empty() has been renamed to .isEmpty()."),this.isEmpty()},nh.prototype.isIntersectionBox=function(t){return console.warn("THREE.Box2: .isIntersectionBox() has been renamed to .intersectsBox()."),this.intersectsBox(t)},nh.prototype.size=function(t){return console.warn("THREE.Box2: .size() has been renamed to .getSize()."),this.getSize(t)},Dt.prototype.center=function(t){return console.warn("THREE.Box3: .center() has been renamed to .getCenter()."),this.getCenter(t)},Dt.prototype.empty=function(){return console.warn("THREE.Box3: .empty() has been renamed to .isEmpty()."),this.isEmpty()},Dt.prototype.isIntersectionBox=function(t){return console.warn("THREE.Box3: .isIntersectionBox() has been renamed to .intersectsBox()."),this.intersectsBox(t)},Dt.prototype.isIntersectionSphere=function(t){return console.warn("THREE.Box3: .isIntersectionSphere() has been renamed to .intersectsSphere()."),this.intersectsSphere(t)},Dt.prototype.size=function(t){return console.warn("THREE.Box3: .size() has been renamed to .getSize()."),this.getSize(t)},Qt.prototype.empty=function(){return console.warn("THREE.Sphere: .empty() has been renamed to .isEmpty()."),this.isEmpty()},ai.prototype.setFromMatrix=function(t){return console.warn("THREE.Frustum: .setFromMatrix() has been renamed to .setFromProjectionMatrix()."),this.setFromProjectionMatrix(t)},sh.prototype.center=function(t){return console.warn("THREE.Line3: .center() has been renamed to .getCenter()."),this.getCenter(t)},yt.prototype.flattenToArrayOffset=function(t,e){return console.warn("THREE.Matrix3: .flattenToArrayOffset() has been deprecated. Use .toArray() instead."),this.toArray(t,e)},yt.prototype.multiplyVector3=function(t){return console.warn("THREE.Matrix3: .multiplyVector3() has been removed. Use vector.applyMatrix3( matrix ) instead."),t.applyMatrix3(this)},yt.prototype.multiplyVector3Array=function(){console.error("THREE.Matrix3: .multiplyVector3Array() has been removed.")},yt.prototype.applyToBufferAttribute=function(t){return console.warn("THREE.Matrix3: .applyToBufferAttribute() has been removed. Use attribute.applyMatrix3( matrix ) instead."),t.applyMatrix3(this)},yt.prototype.applyToVector3Array=function(){console.error("THREE.Matrix3: .applyToVector3Array() has been removed.")},yt.prototype.getInverse=function(t){return console.warn("THREE.Matrix3: .getInverse() has been removed. Use matrixInv.copy( matrix ).invert(); instead."),this.copy(t).invert()},ae.prototype.extractPosition=function(t){return console.warn("THREE.Matrix4: .extractPosition() has been renamed to .copyPosition()."),this.copyPosition(t)},ae.prototype.flattenToArrayOffset=function(t,e){return console.warn("THREE.Matrix4: .flattenToArrayOffset() has been deprecated. Use .toArray() instead."),this.toArray(t,e)},ae.prototype.getPosition=function(){return console.warn("THREE.Matrix4: .getPosition() has been removed. Use Vector3.setFromMatrixPosition( matrix ) instead."),(new Rt).setFromMatrixColumn(this,3)},ae.prototype.setRotationFromQuaternion=function(t){return console.warn("THREE.Matrix4: .setRotationFromQuaternion() has been renamed to .makeRotationFromQuaternion()."),this.makeRotationFromQuaternion(t)},ae.prototype.multiplyToArray=function(){console.warn("THREE.Matrix4: .multiplyToArray() has been removed.")},ae.prototype.multiplyVector3=function(t){return console.warn("THREE.Matrix4: .multiplyVector3() has been removed. Use vector.applyMatrix4( matrix ) instead."),t.applyMatrix4(this)},ae.prototype.multiplyVector4=function(t){return console.warn("THREE.Matrix4: .multiplyVector4() has been removed. Use vector.applyMatrix4( matrix ) instead."),t.applyMatrix4(this)},ae.prototype.multiplyVector3Array=function(){console.error("THREE.Matrix4: .multiplyVector3Array() has been removed.")},ae.prototype.rotateAxis=function(t){console.warn("THREE.Matrix4: .rotateAxis() has been removed. Use Vector3.transformDirection( matrix ) instead."),t.transformDirection(this)},ae.prototype.crossVector=function(t){return console.warn("THREE.Matrix4: .crossVector() has been removed. Use vector.applyMatrix4( matrix ) instead."),t.applyMatrix4(this)},ae.prototype.translate=function(){console.error("THREE.Matrix4: .translate() has been removed.")},ae.prototype.rotateX=function(){console.error("THREE.Matrix4: .rotateX() has been removed.")},ae.prototype.rotateY=function(){console.error("THREE.Matrix4: .rotateY() has been removed.")},ae.prototype.rotateZ=function(){console.error("THREE.Matrix4: .rotateZ() has been removed.")},ae.prototype.rotateByAxis=function(){console.error("THREE.Matrix4: .rotateByAxis() has been removed.")},ae.prototype.applyToBufferAttribute=function(t){return console.warn("THREE.Matrix4: .applyToBufferAttribute() has been removed. Use attribute.applyMatrix4( matrix ) instead."),t.applyMatrix4(this)},ae.prototype.applyToVector3Array=function(){console.error("THREE.Matrix4: .applyToVector3Array() has been removed.")},ae.prototype.makeFrustum=function(t,e,n,i,r,s){return console.warn("THREE.Matrix4: .makeFrustum() has been removed. Use .makePerspective( left, right, top, bottom, near, far ) instead."),this.makePerspective(t,e,i,n,r,s)},ae.prototype.getInverse=function(t){return console.warn("THREE.Matrix4: .getInverse() has been removed. Use matrixInv.copy( matrix ).invert(); instead."),this.copy(t).invert()},ii.prototype.isIntersectionLine=function(t){return console.warn("THREE.Plane: .isIntersectionLine() has been renamed to .intersectsLine()."),this.intersectsLine(t)},Lt.prototype.multiplyVector3=function(t){return console.warn("THREE.Quaternion: .multiplyVector3() has been removed. Use is now vector.applyQuaternion( quaternion ) instead."),t.applyQuaternion(this)},Lt.prototype.inverse=function(){return console.warn("THREE.Quaternion: .inverse() has been renamed to invert()."),this.invert()},se.prototype.isIntersectionBox=function(t){return console.warn("THREE.Ray: .isIntersectionBox() has been renamed to .intersectsBox()."),this.intersectsBox(t)},se.prototype.isIntersectionPlane=function(t){return console.warn("THREE.Ray: .isIntersectionPlane() has been renamed to .intersectsPlane()."),this.intersectsPlane(t)},se.prototype.isIntersectionSphere=function(t){return console.warn("THREE.Ray: .isIntersectionSphere() has been renamed to .intersectsSphere()."),this.intersectsSphere(t)},ke.prototype.area=function(){return console.warn("THREE.Triangle: .area() has been renamed to .getArea()."),this.getArea()},ke.prototype.barycoordFromPoint=function(t,e){return console.warn("THREE.Triangle: .barycoordFromPoint() has been renamed to .getBarycoord()."),this.getBarycoord(t,e)},ke.prototype.midpoint=function(t){return console.warn("THREE.Triangle: .midpoint() has been renamed to .getMidpoint()."),this.getMidpoint(t)},ke.prototypenormal=function(t){return console.warn("THREE.Triangle: .normal() has been renamed to .getNormal()."),this.getNormal(t)},ke.prototype.plane=function(t){return console.warn("THREE.Triangle: .plane() has been renamed to .getPlane()."),this.getPlane(t)},ke.barycoordFromPoint=function(t,e,n,i,r){return console.warn("THREE.Triangle: .barycoordFromPoint() has been renamed to .getBarycoord()."),ke.getBarycoord(t,e,n,i,r)},ke.normal=function(t,e,n,i){return console.warn("THREE.Triangle: .normal() has been renamed to .getNormal()."),ke.getNormal(t,e,n,i)},Fl.prototype.extractAllPoints=function(t){return console.warn("THREE.Shape: .extractAllPoints() has been removed. Use .extractPoints() instead."),this.extractPoints(t)},Fl.prototype.extrude=function(t){return console.warn("THREE.Shape: .extrude() has been removed. Use ExtrudeGeometry() instead."),new Fo(this,t)},Fl.prototype.makeGeometry=function(t){return console.warn("THREE.Shape: .makeGeometry() has been removed. Use ShapeGeometry() instead."),new Wo(this,t)},vt.prototype.fromAttribute=function(t,e,n){return console.warn("THREE.Vector2: .fromAttribute() has been renamed to .fromBufferAttribute()."),this.fromBufferAttribute(t,e,n)},vt.prototype.distanceToManhattan=function(t){return console.warn("THREE.Vector2: .distanceToManhattan() has been renamed to .manhattanDistanceTo()."),this.manhattanDistanceTo(t)},vt.prototype.lengthManhattan=function(){return console.warn("THREE.Vector2: .lengthManhattan() has been renamed to .manhattanLength()."),this.manhattanLength()},Rt.prototype.setEulerFromRotationMatrix=function(){console.error("THREE.Vector3: .setEulerFromRotationMatrix() has been removed. Use Euler.setFromRotationMatrix() instead.")},Rt.prototype.setEulerFromQuaternion=function(){console.error("THREE.Vector3: .setEulerFromQuaternion() has been removed. Use Euler.setFromQuaternion() instead.")},Rt.prototype.getPositionFromMatrix=function(t){return console.warn("THREE.Vector3: .getPositionFromMatrix() has been renamed to .setFromMatrixPosition()."),this.setFromMatrixPosition(t)},Rt.prototype.getScaleFromMatrix=function(t){return console.warn("THREE.Vector3: .getScaleFromMatrix() has been renamed to .setFromMatrixScale()."),this.setFromMatrixScale(t)},Rt.prototype.getColumnFromMatrix=function(t,e){return console.warn("THREE.Vector3: .getColumnFromMatrix() has been renamed to .setFromMatrixColumn()."),this.setFromMatrixColumn(e,t)},Rt.prototype.applyProjection=function(t){return console.warn("THREE.Vector3: .applyProjection() has been removed. Use .applyMatrix4( m ) instead."),this.applyMatrix4(t)},Rt.prototype.fromAttribute=function(t,e,n){return console.warn("THREE.Vector3: .fromAttribute() has been renamed to .fromBufferAttribute()."),this.fromBufferAttribute(t,e,n)},Rt.prototype.distanceToManhattan=function(t){return console.warn("THREE.Vector3: .distanceToManhattan() has been renamed to .manhattanDistanceTo()."),this.manhattanDistanceTo(t)},Rt.prototype.lengthManhattan=function(){return console.warn("THREE.Vector3: .lengthManhattan() has been renamed to .manhattanLength()."),this.manhattanLength()},St.prototype.fromAttribute=function(t,e,n){return console.warn("THREE.Vector4: .fromAttribute() has been renamed to .fromBufferAttribute()."),this.fromBufferAttribute(t,e,n)},St.prototype.lengthManhattan=function(){return console.warn("THREE.Vector4: .lengthManhattan() has been renamed to .manhattanLength()."),this.manhattanLength()},Pe.prototype.getChildByName=function(t){return console.warn("THREE.Object3D: .getChildByName() has been renamed to .getObjectByName()."),this.getObjectByName(t)},Pe.prototype.renderDepth=function(){console.warn("THREE.Object3D: .renderDepth has been removed. Use .renderOrder, instead.")},Pe.prototype.translate=function(t,e){return console.warn("THREE.Object3D: .translate() has been removed. Use .translateOnAxis( axis, distance ) instead."),this.translateOnAxis(e,t)},Pe.prototype.getWorldRotation=function(){console.error("THREE.Object3D: .getWorldRotation() has been removed. Use THREE.Object3D.getWorldQuaternion( target ) instead.")},Pe.prototype.applyMatrix=function(t){return console.warn("THREE.Object3D: .applyMatrix() has been renamed to .applyMatrix4()."),this.applyMatrix4(t)},Object.defineProperties(Pe.prototype,{eulerOrder:{get:function(){return console.warn("THREE.Object3D: .eulerOrder is now .rotation.order."),this.rotation.order},set:function(t){console.warn("THREE.Object3D: .eulerOrder is now .rotation.order."),this.rotation.order=t}},useQuaternion:{get:function(){console.warn("THREE.Object3D: .useQuaternion has been removed. The library now uses quaternions by default.")},set:function(){console.warn("THREE.Object3D: .useQuaternion has been removed. The library now uses quaternions by default.")}}}),Gn.prototype.setDrawMode=function(){console.error("THREE.Mesh: .setDrawMode() has been removed. The renderer now always assumes THREE.TrianglesDrawMode. Transform your geometry via BufferGeometryUtils.toTrianglesDrawMode() if necessary.")},Object.defineProperties(Gn.prototype,{drawMode:{get:function(){return console.error("THREE.Mesh: .drawMode has been removed. The renderer now always assumes THREE.TrianglesDrawMode."),0},set:function(){console.error("THREE.Mesh: .drawMode has been removed. The renderer now always assumes THREE.TrianglesDrawMode. Transform your geometry via BufferGeometryUtils.toTrianglesDrawMode() if necessary.")}}}),$s.prototype.initBones=function(){console.error("THREE.SkinnedMesh: initBones() has been removed.")},Jn.prototype.setLens=function(t,e){console.warn("THREE.PerspectiveCamera.setLens is deprecated. Use .setFocalLength and .filmGauge for a photographic setup."),void 0!==e&&(this.filmGauge=e),this.setFocalLength(t)},Object.defineProperties(Ol.prototype,{onlyShadow:{set:function(){console.warn("THREE.Light: .onlyShadow has been removed.")}},shadowCameraFov:{set:function(t){console.warn("THREE.Light: .shadowCameraFov is now .shadow.camera.fov."),this.shadow.camera.fov=t}},shadowCameraLeft:{set:function(t){console.warn("THREE.Light: .shadowCameraLeft is now .shadow.camera.left."),this.shadow.camera.left=t}},shadowCameraRight:{set:function(t){console.warn("THREE.Light: .shadowCameraRight is now .shadow.camera.right."),this.shadow.camera.right=t}},shadowCameraTop:{set:function(t){console.warn("THREE.Light: .shadowCameraTop is now .shadow.camera.top."),this.shadow.camera.top=t}},shadowCameraBottom:{set:function(t){console.warn("THREE.Light: .shadowCameraBottom is now .shadow.camera.bottom."),this.shadow.camera.bottom=t}},shadowCameraNear:{set:function(t){console.warn("THREE.Light: .shadowCameraNear is now .shadow.camera.near."),this.shadow.camera.near=t}},shadowCameraFar:{set:function(t){console.warn("THREE.Light: .shadowCameraFar is now .shadow.camera.far."),this.shadow.camera.far=t}},shadowCameraVisible:{set:function(){console.warn("THREE.Light: .shadowCameraVisible has been removed. Use new THREE.CameraHelper( light.shadow.camera ) instead.")}},shadowBias:{set:function(t){console.warn("THREE.Light: .shadowBias is now .shadow.bias."),this.shadow.bias=t}},shadowDarkness:{set:function(){console.warn("THREE.Light: .shadowDarkness has been removed.")}},shadowMapWidth:{set:function(t){console.warn("THREE.Light: .shadowMapWidth is now .shadow.mapSize.width."),this.shadow.mapSize.width=t}},shadowMapHeight:{set:function(t){console.warn("THREE.Light: .shadowMapHeight is now .shadow.mapSize.height."),this.shadow.mapSize.height=t}}}),Object.defineProperties(en.prototype,{length:{get:function(){return console.warn("THREE.BufferAttribute: .length has been deprecated. Use .count instead."),this.array.length}},dynamic:{get:function(){return console.warn("THREE.BufferAttribute: .dynamic has been deprecated. Use .usage instead."),this.usage===nt},set:function(){console.warn("THREE.BufferAttribute: .dynamic has been deprecated. Use .usage instead."),this.setUsage(nt)}}}),en.prototype.setDynamic=function(t){return console.warn("THREE.BufferAttribute: .setDynamic() has been deprecated. Use .setUsage() instead."),this.setUsage(!0===t?nt:et),this},en.prototype.copyIndicesArray=function(){console.error("THREE.BufferAttribute: .copyIndicesArray() has been removed.")},en.prototype.setArray=function(){console.error("THREE.BufferAttribute: .setArray has been removed. Use BufferGeometry .setAttribute to replace/resize attribute buffers")},wn.prototype.addIndex=function(t){console.warn("THREE.BufferGeometry: .addIndex() has been renamed to .setIndex()."),this.setIndex(t)},wn.prototype.addAttribute=function(t,e){return console.warn("THREE.BufferGeometry: .addAttribute() has been renamed to .setAttribute()."),e&&e.isBufferAttribute||e&&e.isInterleavedBufferAttribute?"index"===t?(console.warn("THREE.BufferGeometry.addAttribute: Use .setIndex() for index attribute."),this.setIndex(e),this):this.setAttribute(t,e):(console.warn("THREE.BufferGeometry: .addAttribute() now expects ( name, attribute )."),this.setAttribute(t,new en(arguments[1],arguments[2])))},wn.prototype.addDrawCall=function(t,e,n){void 0!==n&&console.warn("THREE.BufferGeometry: .addDrawCall() no longer supports indexOffset."),console.warn("THREE.BufferGeometry: .addDrawCall() is now .addGroup()."),this.addGroup(t,e)},wn.prototype.clearDrawCalls=function(){console.warn("THREE.BufferGeometry: .clearDrawCalls() is now .clearGroups()."),this.clearGroups()},wn.prototype.computeOffsets=function(){console.warn("THREE.BufferGeometry: .computeOffsets() has been removed.")},wn.prototype.removeAttribute=function(t){return console.warn("THREE.BufferGeometry: .removeAttribute() has been renamed to .deleteAttribute()."),this.deleteAttribute(t)},wn.prototype.applyMatrix=function(t){return console.warn("THREE.BufferGeometry: .applyMatrix() has been renamed to .applyMatrix4()."),this.applyMatrix4(t)},Object.defineProperties(wn.prototype,{drawcalls:{get:function(){return console.error("THREE.BufferGeometry: .drawcalls has been renamed to .groups."),this.groups}},offsets:{get:function(){return console.warn("THREE.BufferGeometry: .offsets has been renamed to .groups."),this.groups}}}),Es.prototype.setDynamic=function(t){return console.warn("THREE.InterleavedBuffer: .setDynamic() has been deprecated. Use .setUsage() instead."),this.setUsage(!0===t?nt:et),this},Es.prototype.setArray=function(){console.error("THREE.InterleavedBuffer: .setArray has been removed. Use BufferGeometry .setAttribute to replace/resize attribute buffers")},Fo.prototype.getArrays=function(){console.error("THREE.ExtrudeGeometry: .getArrays() has been removed.")},Fo.prototype.addShapeList=function(){console.error("THREE.ExtrudeGeometry: .addShapeList() has been removed.")},Fo.prototype.addShape=function(){console.error("THREE.ExtrudeGeometry: .addShape() has been removed.")},Ts.prototype.dispose=function(){console.error("THREE.Scene: .dispose() has been removed.")},Zc.prototype.onUpdate=function(){return console.warn("THREE.Uniform: .onUpdate() has been removed. Use object.onBeforeRender() instead."),this},Object.defineProperties(We.prototype,{wrapAround:{get:function(){console.warn("THREE.Material: .wrapAround has been removed.")},set:function(){console.warn("THREE.Material: .wrapAround has been removed.")}},overdraw:{get:function(){console.warn("THREE.Material: .overdraw has been removed.")},set:function(){console.warn("THREE.Material: .overdraw has been removed.")}},wrapRGB:{get:function(){return console.warn("THREE.Material: .wrapRGB has been removed."),new Qe}},shading:{get:function(){console.error("THREE."+this.type+": .shading has been removed. Use the boolean .flatShading instead.")},set:function(t){console.warn("THREE."+this.type+": .shading has been removed. Use the boolean .flatShading instead."),this.flatShading=1===t}},stencilMask:{get:function(){return console.warn("THREE."+this.type+": .stencilMask has been removed. Use .stencilFuncMask instead."),this.stencilFuncMask},set:function(t){console.warn("THREE."+this.type+": .stencilMask has been removed. Use .stencilFuncMask instead."),this.stencilFuncMask=t}}}),Object.defineProperties(Xn.prototype,{derivatives:{get:function(){return console.warn("THREE.ShaderMaterial: .derivatives has been moved to .extensions.derivatives."),this.extensions.derivatives},set:function(t){console.warn("THREE. ShaderMaterial: .derivatives has been moved to .extensions.derivatives."),this.extensions.derivatives=t}}}),bs.prototype.clearTarget=function(t,e,n,i){console.warn("THREE.WebGLRenderer: .clearTarget() has been deprecated. Use .setRenderTarget() and .clear() instead."),this.setRenderTarget(t),this.clear(e,n,i)},bs.prototype.animate=function(t){console.warn("THREE.WebGLRenderer: .animate() is now .setAnimationLoop()."),this.setAnimationLoop(t)},bs.prototype.getCurrentRenderTarget=function(){return console.warn("THREE.WebGLRenderer: .getCurrentRenderTarget() is now .getRenderTarget()."),this.getRenderTarget()},bs.prototype.getMaxAnisotropy=function(){return console.warn("THREE.WebGLRenderer: .getMaxAnisotropy() is now .capabilities.getMaxAnisotropy()."),this.capabilities.getMaxAnisotropy()},bs.prototype.getPrecision=function(){return console.warn("THREE.WebGLRenderer: .getPrecision() is now .capabilities.precision."),this.capabilities.precision},bs.prototype.resetGLState=function(){return console.warn("THREE.WebGLRenderer: .resetGLState() is now .state.reset()."),this.state.reset()},bs.prototype.supportsFloatTextures=function(){return console.warn("THREE.WebGLRenderer: .supportsFloatTextures() is now .extensions.get( 'OES_texture_float' )."),this.extensions.get("OES_texture_float")},bs.prototype.supportsHalfFloatTextures=function(){return console.warn("THREE.WebGLRenderer: .supportsHalfFloatTextures() is now .extensions.get( 'OES_texture_half_float' )."),this.extensions.get("OES_texture_half_float")},bs.prototype.supportsStandardDerivatives=function(){return console.warn("THREE.WebGLRenderer: .supportsStandardDerivatives() is now .extensions.get( 'OES_standard_derivatives' )."),this.extensions.get("OES_standard_derivatives")},bs.prototype.supportsCompressedTextureS3TC=function(){return console.warn("THREE.WebGLRenderer: .supportsCompressedTextureS3TC() is now .extensions.get( 'WEBGL_compressed_texture_s3tc' )."),this.extensions.get("WEBGL_compressed_texture_s3tc")},bs.prototype.supportsCompressedTexturePVRTC=function(){return console.warn("THREE.WebGLRenderer: .supportsCompressedTexturePVRTC() is now .extensions.get( 'WEBGL_compressed_texture_pvrtc' )."),this.extensions.get("WEBGL_compressed_texture_pvrtc")},bs.prototype.supportsBlendMinMax=function(){return console.warn("THREE.WebGLRenderer: .supportsBlendMinMax() is now .extensions.get( 'EXT_blend_minmax' )."),this.extensions.get("EXT_blend_minmax")},bs.prototype.supportsVertexTextures=function(){return console.warn("THREE.WebGLRenderer: .supportsVertexTextures() is now .capabilities.vertexTextures."),this.capabilities.vertexTextures},bs.prototype.supportsInstancedArrays=function(){return console.warn("THREE.WebGLRenderer: .supportsInstancedArrays() is now .extensions.get( 'ANGLE_instanced_arrays' )."),this.extensions.get("ANGLE_instanced_arrays")},bs.prototype.enableScissorTest=function(t){console.warn("THREE.WebGLRenderer: .enableScissorTest() is now .setScissorTest()."),this.setScissorTest(t)},bs.prototype.initMaterial=function(){console.warn("THREE.WebGLRenderer: .initMaterial() has been removed.")},bs.prototype.addPrePlugin=function(){console.warn("THREE.WebGLRenderer: .addPrePlugin() has been removed.")},bs.prototype.addPostPlugin=function(){console.warn("THREE.WebGLRenderer: .addPostPlugin() has been removed.")},bs.prototype.updateShadowMap=function(){console.warn("THREE.WebGLRenderer: .updateShadowMap() has been removed.")},bs.prototype.setFaceCulling=function(){console.warn("THREE.WebGLRenderer: .setFaceCulling() has been removed.")},bs.prototype.allocTextureUnit=function(){console.warn("THREE.WebGLRenderer: .allocTextureUnit() has been removed.")},bs.prototype.setTexture=function(){console.warn("THREE.WebGLRenderer: .setTexture() has been removed.")},bs.prototype.setTexture2D=function(){console.warn("THREE.WebGLRenderer: .setTexture2D() has been removed.")},bs.prototype.setTextureCube=function(){console.warn("THREE.WebGLRenderer: .setTextureCube() has been removed.")},bs.prototype.getActiveMipMapLevel=function(){return console.warn("THREE.WebGLRenderer: .getActiveMipMapLevel() is now .getActiveMipmapLevel()."),this.getActiveMipmapLevel()},Object.defineProperties(bs.prototype,{shadowMapEnabled:{get:function(){return this.shadowMap.enabled},set:function(t){console.warn("THREE.WebGLRenderer: .shadowMapEnabled is now .shadowMap.enabled."),this.shadowMap.enabled=t}},shadowMapType:{get:function(){return this.shadowMap.type},set:function(t){console.warn("THREE.WebGLRenderer: .shadowMapType is now .shadowMap.type."),this.shadowMap.type=t}},shadowMapCullFace:{get:function(){console.warn("THREE.WebGLRenderer: .shadowMapCullFace has been removed. Set Material.shadowSide instead.")},set:function(){console.warn("THREE.WebGLRenderer: .shadowMapCullFace has been removed. Set Material.shadowSide instead.")}},context:{get:function(){return console.warn("THREE.WebGLRenderer: .context has been removed. Use .getContext() instead."),this.getContext()}},vr:{get:function(){return console.warn("THREE.WebGLRenderer: .vr has been renamed to .xr"),this.xr}},gammaInput:{get:function(){return console.warn("THREE.WebGLRenderer: .gammaInput has been removed. Set the encoding for textures via Texture.encoding instead."),!1},set:function(){console.warn("THREE.WebGLRenderer: .gammaInput has been removed. Set the encoding for textures via Texture.encoding instead.")}},gammaOutput:{get:function(){return console.warn("THREE.WebGLRenderer: .gammaOutput has been removed. Set WebGLRenderer.outputEncoding instead."),!1},set:function(t){console.warn("THREE.WebGLRenderer: .gammaOutput has been removed. Set WebGLRenderer.outputEncoding instead."),this.outputEncoding=!0===t?Y:X}},toneMappingWhitePoint:{get:function(){return console.warn("THREE.WebGLRenderer: .toneMappingWhitePoint has been removed."),1},set:function(){console.warn("THREE.WebGLRenderer: .toneMappingWhitePoint has been removed.")}}}),Object.defineProperties(us.prototype,{cullFace:{get:function(){console.warn("THREE.WebGLRenderer: .shadowMap.cullFace has been removed. Set Material.shadowSide instead.")},set:function(){console.warn("THREE.WebGLRenderer: .shadowMap.cullFace has been removed. Set Material.shadowSide instead.")}},renderReverseSided:{get:function(){console.warn("THREE.WebGLRenderer: .shadowMap.renderReverseSided has been removed. Set Material.shadowSide instead.")},set:function(){console.warn("THREE.WebGLRenderer: .shadowMap.renderReverseSided has been removed. Set Material.shadowSide instead.")}},renderSingleSided:{get:function(){console.warn("THREE.WebGLRenderer: .shadowMap.renderSingleSided has been removed. Set Material.shadowSide instead.")},set:function(){console.warn("THREE.WebGLRenderer: .shadowMap.renderSingleSided has been removed. Set Material.shadowSide instead.")}}}),Object.defineProperties(Tt.prototype,{wrapS:{get:function(){return console.warn("THREE.WebGLRenderTarget: .wrapS is now .texture.wrapS."),this.texture.wrapS},set:function(t){console.warn("THREE.WebGLRenderTarget: .wrapS is now .texture.wrapS."),this.texture.wrapS=t}},wrapT:{get:function(){return console.warn("THREE.WebGLRenderTarget: .wrapT is now .texture.wrapT."),this.texture.wrapT},set:function(t){console.warn("THREE.WebGLRenderTarget: .wrapT is now .texture.wrapT."),this.texture.wrapT=t}},magFilter:{get:function(){return console.warn("THREE.WebGLRenderTarget: .magFilter is now .texture.magFilter."),this.texture.magFilter},set:function(t){console.warn("THREE.WebGLRenderTarget: .magFilter is now .texture.magFilter."),this.texture.magFilter=t}},minFilter:{get:function(){return console.warn("THREE.WebGLRenderTarget: .minFilter is now .texture.minFilter."),this.texture.minFilter},set:function(t){console.warn("THREE.WebGLRenderTarget: .minFilter is now .texture.minFilter."),this.texture.minFilter=t}},anisotropy:{get:function(){return console.warn("THREE.WebGLRenderTarget: .anisotropy is now .texture.anisotropy."),this.texture.anisotropy},set:function(t){console.warn("THREE.WebGLRenderTarget: .anisotropy is now .texture.anisotropy."),this.texture.anisotropy=t}},offset:{get:function(){return console.warn("THREE.WebGLRenderTarget: .offset is now .texture.offset."),this.texture.offset},set:function(t){console.warn("THREE.WebGLRenderTarget: .offset is now .texture.offset."),this.texture.offset=t}},repeat:{get:function(){return console.warn("THREE.WebGLRenderTarget: .repeat is now .texture.repeat."),this.texture.repeat},set:function(t){console.warn("THREE.WebGLRenderTarget: .repeat is now .texture.repeat."),this.texture.repeat=t}},format:{get:function(){return console.warn("THREE.WebGLRenderTarget: .format is now .texture.format."),this.texture.format},set:function(t){console.warn("THREE.WebGLRenderTarget: .format is now .texture.format."),this.texture.format=t}},type:{get:function(){return console.warn("THREE.WebGLRenderTarget: .type is now .texture.type."),this.texture.type},set:function(t){console.warn("THREE.WebGLRenderTarget: .type is now .texture.type."),this.texture.type=t}},generateMipmaps:{get:function(){return console.warn("THREE.WebGLRenderTarget: .generateMipmaps is now .texture.generateMipmaps."),this.texture.generateMipmaps},set:function(t){console.warn("THREE.WebGLRenderTarget: .generateMipmaps is now .texture.generateMipmaps."),this.texture.generateMipmaps=t}}}),Rc.prototype.load=function(t){console.warn("THREE.Audio: .load has been deprecated. Use THREE.AudioLoader instead.");const e=this;return(new yc).load(t,(function(t){e.setBuffer(t)})),this},Nc.prototype.getData=function(){return console.warn("THREE.AudioAnalyser: .getData() is now .getFrequencyData()."),this.getFrequencyData()},Qn.prototype.updateCubeMap=function(t,e){return console.warn("THREE.CubeCamera: .updateCubeMap() is now .update()."),this.update(t,e)},Qn.prototype.clear=function(t,e,n,i){return console.warn("THREE.CubeCamera: .clear() is now .renderTarget.clear()."),this.renderTarget.clear(t,e,n,i)},_t.crossOrigin=void 0,_t.loadTexture=function(t,e,n,i){console.warn("THREE.ImageUtils.loadTexture has been deprecated. Use THREE.TextureLoader() instead.");const r=new Nl;r.setCrossOrigin(this.crossOrigin);const s=r.load(t,n,void 0,i);return e&&(s.mapping=e),s},_t.loadTextureCube=function(t,e,n,i){console.warn("THREE.ImageUtils.loadTextureCube has been deprecated. Use THREE.CubeTextureLoader() instead.");const r=new Dl;r.setCrossOrigin(this.crossOrigin);const s=r.load(t,n,void 0,i);return e&&(s.mapping=e),s},_t.loadCompressedTexture=function(){console.error("THREE.ImageUtils.loadCompressedTexture has been removed. Use THREE.DDSLoader instead.")},_t.loadCompressedTextureCube=function(){console.error("THREE.ImageUtils.loadCompressedTextureCube has been removed. Use THREE.DDSLoader instead.")};const nu={createMultiMaterialObject:function(){console.error("THREE.SceneUtils has been moved to /examples/jsm/utils/SceneUtils.js")},detach:function(){console.error("THREE.SceneUtils has been moved to /examples/jsm/utils/SceneUtils.js")},attach:function(){console.error("THREE.SceneUtils has been moved to /examples/jsm/utils/SceneUtils.js")}};"undefined"!=typeof __THREE_DEVTOOLS__&&__THREE_DEVTOOLS__.dispatchEvent(new CustomEvent("register",{detail:{revision:e}})),"undefined"!=typeof window&&(window.__THREE__?console.warn("WARNING: Multiple instances of Three.js being imported."):window.__THREE__=e),t.ACESFilmicToneMapping=4,t.AddEquation=n,t.AddOperation=2,t.AdditiveAnimationBlendMode=q,t.AdditiveBlending=2,t.AlphaFormat=1021,t.AlwaysDepth=1,t.AlwaysStencilFunc=519,t.AmbientLight=tc,t.AmbientLightProbe=_c,t.AnimationClip=wl,t.AnimationLoader=class extends Ll{constructor(t){super(t)}load(t,e,n,i){const r=this,s=new Cl(this.manager);s.setPath(this.path),s.setRequestHeader(this.requestHeader),s.setWithCredentials(this.withCredentials),s.load(t,(function(n){try{e(r.parse(JSON.parse(n)))}catch(e){i?i(e):console.error(e),r.manager.itemError(t)}}),n,i)}parse(t){const e=[];for(let n=0;n.99999)this.quaternion.set(0,0,0,1);else if(t.y<-.99999)this.quaternion.set(1,0,0,0);else{Th.set(t.z,0,-t.x).normalize();const e=Math.acos(t.y);this.quaternion.setFromAxisAngle(Th,e)}}setLength(t,e=.2*t,n=.2*e){this.line.scale.set(1,Math.max(1e-4,t-e),1),this.line.updateMatrix(),this.cone.scale.set(n,e,n),this.cone.position.y=t,this.cone.updateMatrix()}setColor(t){this.line.material.color.set(t),this.cone.material.color.set(t)}copy(t){return super.copy(t,!1),this.line.copy(t.line),this.cone.copy(t.cone),this}},t.Audio=Rc,t.AudioAnalyser=Nc,t.AudioContext=vc,t.AudioListener=class extends Pe{constructor(){super(),this.type="AudioListener",this.context=vc.getContext(),this.gain=this.context.createGain(),this.gain.connect(this.context.destination),this.filter=null,this.timeDelta=0,this._clock=new wc}getInput(){return this.gain}removeFilter(){return null!==this.filter&&(this.gain.disconnect(this.filter),this.filter.disconnect(this.context.destination),this.gain.connect(this.context.destination),this.filter=null),this}getFilter(){return this.filter}setFilter(t){return null!==this.filter?(this.gain.disconnect(this.filter),this.filter.disconnect(this.context.destination)):this.gain.disconnect(this.context.destination),this.filter=t,this.gain.connect(this.filter),this.filter.connect(this.context.destination),this}getMasterVolume(){return this.gain.gain.value}setMasterVolume(t){return this.gain.gain.setTargetAtTime(t,this.context.currentTime,.01),this}updateMatrixWorld(t){super.updateMatrixWorld(t);const e=this.context.listener,n=this.up;if(this.timeDelta=this._clock.getDelta(),this.matrixWorld.decompose(Tc,Ec,Ac),Lc.set(0,0,-1).applyQuaternion(Ec),e.positionX){const t=this.context.currentTime+this.timeDelta;e.positionX.linearRampToValueAtTime(Tc.x,t),e.positionY.linearRampToValueAtTime(Tc.y,t),e.positionZ.linearRampToValueAtTime(Tc.z,t),e.forwardX.linearRampToValueAtTime(Lc.x,t),e.forwardY.linearRampToValueAtTime(Lc.y,t),e.forwardZ.linearRampToValueAtTime(Lc.z,t),e.upX.linearRampToValueAtTime(n.x,t),e.upY.linearRampToValueAtTime(n.y,t),e.upZ.linearRampToValueAtTime(n.z,t)}else e.setPosition(Tc.x,Tc.y,Tc.z),e.setOrientation(Lc.x,Lc.y,Lc.z,n.x,n.y,n.z)}},t.AudioLoader=yc,t.AxesHelper=Lh,t.AxisHelper=function(t){return console.warn("THREE.AxisHelper has been renamed to THREE.AxesHelper."),new Lh(t)},t.BackSide=1,t.BasicDepthPacking=3200,t.BasicShadowMap=0,t.BinaryTextureLoader=function(t){return console.warn("THREE.BinaryTextureLoader has been renamed to THREE.DataTextureLoader."),new Il(t)},t.Bone=ta,t.BooleanKeyframeTrack=gl,t.BoundingBoxHelper=function(t,e){return console.warn("THREE.BoundingBoxHelper has been deprecated. Creating a THREE.BoxHelper instead."),new Sh(t,e)},t.Box2=nh,t.Box3=Dt,t.Box3Helper=class extends xa{constructor(t,e=16776960){const n=new Uint16Array([0,1,1,2,2,3,3,0,4,5,5,6,6,7,7,4,0,4,1,5,2,6,3,7]),i=new wn;i.setIndex(new en(n,1)),i.setAttribute("position",new un([1,1,1,-1,1,1,-1,-1,1,1,-1,1,1,1,-1,-1,1,-1,-1,-1,-1,1,-1,-1],3)),super(i,new ha({color:e,toneMapped:!1})),this.box=t,this.type="Box3Helper",this.geometry.computeBoundingSphere()}updateMatrixWorld(t){const e=this.box;e.isEmpty()||(e.getCenter(this.position),e.getSize(this.scale),this.scale.multiplyScalar(.5),super.updateMatrixWorld(t))}},t.BoxBufferGeometry=Vn,t.BoxGeometry=Vn,t.BoxHelper=Sh,t.BufferAttribute=en,t.BufferGeometry=wn,t.BufferGeometryLoader=lc,t.ByteType=1010,t.Cache=Tl,t.Camera=Yn,t.CameraHelper=class extends xa{constructor(t){const e=new wn,n=new ha({color:16777215,vertexColors:!0,toneMapped:!1}),i=[],r=[],s={},a=new Qe(16755200),o=new Qe(16711680),l=new Qe(43775),c=new Qe(16777215),h=new Qe(3355443);function u(t,e,n){d(t,n),d(e,n)}function d(t,e){i.push(0,0,0),r.push(e.r,e.g,e.b),void 0===s[t]&&(s[t]=[]),s[t].push(i.length/3-1)}u("n1","n2",a),u("n2","n4",a),u("n4","n3",a),u("n3","n1",a),u("f1","f2",a),u("f2","f4",a),u("f4","f3",a),u("f3","f1",a),u("n1","f1",a),u("n2","f2",a),u("n3","f3",a),u("n4","f4",a),u("p","n1",o),u("p","n2",o),u("p","n3",o),u("p","n4",o),u("u1","u2",l),u("u2","u3",l),u("u3","u1",l),u("c","t",c),u("p","c",h),u("cn1","cn2",h),u("cn3","cn4",h),u("cf1","cf2",h),u("cf3","cf4",h),e.setAttribute("position",new un(i,3)),e.setAttribute("color",new un(r,3)),super(e,n),this.type="CameraHelper",this.camera=t,this.camera.updateProjectionMatrix&&this.camera.updateProjectionMatrix(),this.matrix=t.matrixWorld,this.matrixAutoUpdate=!1,this.pointMap=s,this.update()}update(){const t=this.geometry,e=this.pointMap;bh.projectionMatrixInverse.copy(this.camera.projectionMatrixInverse),Mh("c",e,t,bh,0,0,-1),Mh("t",e,t,bh,0,0,1),Mh("n1",e,t,bh,-1,-1,-1),Mh("n2",e,t,bh,1,-1,-1),Mh("n3",e,t,bh,-1,1,-1),Mh("n4",e,t,bh,1,1,-1),Mh("f1",e,t,bh,-1,-1,1),Mh("f2",e,t,bh,1,-1,1),Mh("f3",e,t,bh,-1,1,1),Mh("f4",e,t,bh,1,1,1),Mh("u1",e,t,bh,.7,1.1,-1),Mh("u2",e,t,bh,-.7,1.1,-1),Mh("u3",e,t,bh,0,2,-1),Mh("cf1",e,t,bh,-1,0,1),Mh("cf2",e,t,bh,1,0,1),Mh("cf3",e,t,bh,0,-1,1),Mh("cf4",e,t,bh,0,1,1),Mh("cn1",e,t,bh,-1,0,-1),Mh("cn2",e,t,bh,1,0,-1),Mh("cn3",e,t,bh,0,-1,-1),Mh("cn4",e,t,bh,0,1,-1),t.getAttribute("position").needsUpdate=!0}dispose(){this.geometry.dispose(),this.material.dispose()}},t.CanvasRenderer=function(){console.error("THREE.CanvasRenderer has been removed")},t.CanvasTexture=Ca,t.CatmullRomCurve3=Za,t.CineonToneMapping=3,t.CircleBufferGeometry=Da,t.CircleGeometry=Da,t.ClampToEdgeWrapping=u,t.Clock=wc,t.Color=Qe,t.ColorKeyframeTrack=vl,t.CompressedTexture=Ra,t.CompressedTextureLoader=class extends Ll{constructor(t){super(t)}load(t,e,n,i){const r=this,s=[],a=new Ra,o=new Cl(this.manager);o.setPath(this.path),o.setResponseType("arraybuffer"),o.setRequestHeader(this.requestHeader),o.setWithCredentials(r.withCredentials);let l=0;function c(c){o.load(t[c],(function(t){const n=r.parse(t,!0);s[c]={width:n.width,height:n.height,format:n.format,mipmaps:n.mipmaps},l+=1,6===l&&(1===n.mipmapCount&&(a.minFilter=g),a.image=s,a.format=n.format,a.needsUpdate=!0,e&&e(a))}),n,i)}if(Array.isArray(t))for(let e=0,n=t.length;e>16&32768,i=e>>12&2047;const r=e>>23&255;return r<103?n:r>142?(n|=31744,n|=(255==r?0:1)&&8388607&e,n):r<113?(i|=2048,n|=(i>>114-r)+(i>>113-r&1),n):(n|=r-112<<10|i>>1,n+=1&i,n)}},t.DecrementStencilOp=7683,t.DecrementWrapStencilOp=34056,t.DefaultLoadingManager=Al,t.DepthFormat=A,t.DepthStencilFormat=L,t.DepthTexture=Pa,t.DirectionalLight=$l,t.DirectionalLightHelper=class extends Pe{constructor(t,e,n){super(),this.light=t,this.light.updateMatrixWorld(),this.matrix=t.matrixWorld,this.matrixAutoUpdate=!1,this.color=n,void 0===e&&(e=1);let i=new wn;i.setAttribute("position",new un([-e,e,0,e,e,0,e,-e,0,-e,-e,0,-e,e,0],3));const r=new ha({fog:!1,toneMapped:!1});this.lightPlane=new ga(i,r),this.add(this.lightPlane),i=new wn,i.setAttribute("position",new un([0,0,0,0,0,1],3)),this.targetLine=new ga(i,r),this.add(this.targetLine),this.update()}dispose(){this.lightPlane.geometry.dispose(),this.lightPlane.material.dispose(),this.targetLine.geometry.dispose(),this.targetLine.material.dispose()}update(){vh.setFromMatrixPosition(this.light.matrixWorld),yh.setFromMatrixPosition(this.light.target.matrixWorld),xh.subVectors(yh,vh),this.lightPlane.lookAt(yh),void 0!==this.color?(this.lightPlane.material.color.set(this.color),this.targetLine.material.color.set(this.color)):(this.lightPlane.material.color.copy(this.light.color),this.targetLine.material.color.copy(this.light.color)),this.targetLine.lookAt(yh),this.targetLine.scale.z=xh.length()}},t.DiscreteInterpolant=ml,t.DodecahedronBufferGeometry=za,t.DodecahedronGeometry=za,t.DoubleSide=2,t.DstAlphaFactor=206,t.DstColorFactor=208,t.DynamicBufferAttribute=function(t,e){return console.warn("THREE.DynamicBufferAttribute has been removed. Use new THREE.BufferAttribute().setUsage( THREE.DynamicDrawUsage ) instead."),new en(t,e).setUsage(nt)},t.DynamicCopyUsage=35050,t.DynamicDrawUsage=nt,t.DynamicReadUsage=35049,t.EdgesGeometry=Ga,t.EdgesHelper=function(t,e){return console.warn("THREE.EdgesHelper has been removed. Use THREE.EdgesGeometry instead."),new xa(new Ga(t.geometry),new ha({color:void 0!==e?e:16777215}))},t.EllipseCurve=Va,t.EqualDepth=4,t.EqualStencilFunc=514,t.EquirectangularReflectionMapping=a,t.EquirectangularRefractionMapping=o,t.Euler=ge,t.EventDispatcher=rt,t.ExtrudeBufferGeometry=Fo,t.ExtrudeGeometry=Fo,t.FaceColors=1,t.FileLoader=Cl,t.FlatShading=1,t.Float16BufferAttribute=hn,t.Float32Attribute=function(t,e){return console.warn("THREE.Float32Attribute has been removed. Use new THREE.Float32BufferAttribute() instead."),new un(t,e)},t.Float32BufferAttribute=un,t.Float64Attribute=function(t,e){return console.warn("THREE.Float64Attribute has been removed. Use new THREE.Float64BufferAttribute() instead."),new dn(t,e)},t.Float64BufferAttribute=dn,t.FloatType=M,t.Fog=Ss,t.FogExp2=ws,t.Font=mc,t.FontLoader=class extends Ll{constructor(t){super(t)}load(t,e,n,i){const r=this,s=new Cl(this.manager);s.setPath(this.path),s.setRequestHeader(this.requestHeader),s.setWithCredentials(r.withCredentials),s.load(t,(function(t){let n;try{n=JSON.parse(t)}catch(e){console.warn("THREE.FontLoader: typeface.js support is being deprecated. Use typeface.json instead."),n=JSON.parse(t.substring(65,t.length-2))}const i=r.parse(n);e&&e(i)}),n,i)}parse(t){return new mc(t)}},t.FrontSide=0,t.Frustum=ai,t.GLBufferAttribute=Kc,t.GLSL1="100",t.GLSL3=it,t.GammaEncoding=J,t.GreaterDepth=6,t.GreaterEqualDepth=5,t.GreaterEqualStencilFunc=518,t.GreaterStencilFunc=516,t.GridHelper=gh,t.Group=gs,t.HalfFloatType=w,t.HemisphereLight=Hl,t.HemisphereLightHelper=class extends Pe{constructor(t,e,n){super(),this.light=t,this.light.updateMatrixWorld(),this.matrix=t.matrixWorld,this.matrixAutoUpdate=!1,this.color=n;const i=new Go(e);i.rotateY(.5*Math.PI),this.material=new Ke({wireframe:!0,fog:!1,toneMapped:!1}),void 0===this.color&&(this.material.vertexColors=!0);const r=i.getAttribute("position"),s=new Float32Array(3*r.count);i.setAttribute("color",new en(s,3)),this.add(new Gn(i,this.material)),this.update()}dispose(){this.children[0].geometry.dispose(),this.children[0].material.dispose()}update(){const t=this.children[0];if(void 0!==this.color)this.material.color.set(this.color);else{const e=t.geometry.getAttribute("color");mh.copy(this.light.color),fh.copy(this.light.groundColor);for(let t=0,n=e.count;t0){const n=new El(e);r=new Pl(n),r.setCrossOrigin(this.crossOrigin);for(let e=0,n=t.length;e0){i=new Pl(this.manager),i.setCrossOrigin(this.crossOrigin);for(let e=0,i=t.length;e\n\n\t\t\tvec3 getSample( float theta, vec3 axis ) {\n\n\t\t\t\tfloat cosTheta = cos( theta );\n\t\t\t\t// Rodrigues' axis-angle rotation\n\t\t\t\tvec3 sampleDirection = vOutputDirection * cosTheta\n\t\t\t\t\t+ cross( axis, vOutputDirection ) * sin( theta )\n\t\t\t\t\t+ axis * dot( axis, vOutputDirection ) * ( 1.0 - cosTheta );\n\n\t\t\t\treturn bilinearCubeUV( envMap, sampleDirection, mipInt );\n\n\t\t\t}\n\n\t\t\tvoid main() {\n\n\t\t\t\tvec3 axis = latitudinal ? poleAxis : cross( poleAxis, vOutputDirection );\n\n\t\t\t\tif ( all( equal( axis, vec3( 0.0 ) ) ) ) {\n\n\t\t\t\t\taxis = vec3( vOutputDirection.z, 0.0, - vOutputDirection.x );\n\n\t\t\t\t}\n\n\t\t\t\taxis = normalize( axis );\n\n\t\t\t\tgl_FragColor = vec4( 0.0, 0.0, 0.0, 1.0 );\n\t\t\t\tgl_FragColor.rgb += weights[ 0 ] * getSample( 0.0, axis );\n\n\t\t\t\tfor ( int i = 1; i < n; i++ ) {\n\n\t\t\t\t\tif ( i >= samples ) {\n\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\t}\n\n\t\t\t\t\tfloat theta = dTheta * float( i );\n\t\t\t\t\tgl_FragColor.rgb += weights[ i ] * getSample( -1.0 * theta, axis );\n\t\t\t\t\tgl_FragColor.rgb += weights[ i ] * getSample( theta, axis );\n\n\t\t\t\t}\n\n\t\t\t\tgl_FragColor = linearToOutputTexel( gl_FragColor );\n\n\t\t\t}\n\t\t`,blending:0,depthTest:!1,depthWrite:!1})}(Nh),this._equirectShader=null,this._cubemapShader=null,this._compileMaterial(this._blurMaterial)}fromScene(t,e=0,n=.1,i=100){Vh=this._renderer.getRenderTarget();const r=this._allocateTargets();return this._sceneToCubeUV(t,n,i,r),e>0&&this._blur(r,0,0,e),this._applyPMREM(r),this._cleanup(r),r}fromEquirectangular(t){return this._fromTexture(t)}fromCubemap(t){return this._fromTexture(t)}compileCubemapShader(){null===this._cubemapShader&&(this._cubemapShader=$h(),this._compileMaterial(this._cubemapShader))}compileEquirectangularShader(){null===this._equirectShader&&(this._equirectShader=Kh(),this._compileMaterial(this._equirectShader))}dispose(){this._blurMaterial.dispose(),null!==this._cubemapShader&&this._cubemapShader.dispose(),null!==this._equirectShader&&this._equirectShader.dispose();for(let t=0;t2?Ph:0,Ph,Ph),o.setRenderTarget(i),u&&o.render(Fh,r),o.render(t,r)}o.toneMapping=h,o.outputEncoding=c,o.autoClear=l}_textureToCubeUV(t,e){const n=this._renderer;t.isCubeTexture?null==this._cubemapShader&&(this._cubemapShader=$h()):null==this._equirectShader&&(this._equirectShader=Kh());const i=t.isCubeTexture?this._cubemapShader:this._equirectShader,r=new Gn(Hh[0],i),s=i.uniforms;s.envMap.value=t,t.isCubeTexture||s.texelSize.value.set(1/t.image.width,1/t.image.height),s.inputEncoding.value=Bh[t.encoding],s.outputEncoding.value=Bh[e.texture.encoding],Qh(e,0,0,3*Ph,2*Ph),n.setRenderTarget(e),n.render(r,Oh)}_applyPMREM(t){const e=this._renderer,n=e.autoClear;e.autoClear=!1;for(let e=1;eNh&&console.warn(`sigmaRadians, ${r}, is too large and will clip, as it requested ${m} samples when the maximum is set to 20`);const f=[];let g=0;for(let t=0;t4?i-8+4:0),3*v,2*v),o.setRenderTarget(e),o.render(c,Oh)}},t.ParametricBufferGeometry=ko,t.ParametricGeometry=ko,t.Particle=function(t){return console.warn("THREE.Particle has been renamed to THREE.Sprite."),new Vs(t)},t.ParticleBasicMaterial=function(t){return console.warn("THREE.ParticleBasicMaterial has been renamed to THREE.PointsMaterial."),new ba(t)},t.ParticleSystem=function(t,e){return console.warn("THREE.ParticleSystem has been renamed to THREE.Points."),new Ea(t,e)},t.ParticleSystemMaterial=function(t){return console.warn("THREE.ParticleSystemMaterial has been renamed to THREE.PointsMaterial."),new ba(t)},t.Path=zl,t.PerspectiveCamera=Jn,t.Plane=ii,t.PlaneBufferGeometry=ci,t.PlaneGeometry=ci,t.PlaneHelper=class extends ga{constructor(t,e=1,n=16776960){const i=n,r=new wn;r.setAttribute("position",new un([1,-1,1,-1,1,1,-1,-1,1,1,1,1,-1,1,1,-1,-1,1,1,-1,1,1,1,1,0,0,1,0,0,0],3)),r.computeBoundingSphere(),super(r,new ha({color:i,toneMapped:!1})),this.type="PlaneHelper",this.plane=t,this.size=e;const s=new wn;s.setAttribute("position",new un([1,1,1,-1,1,1,-1,-1,1,1,1,1,-1,-1,1,1,-1,1],3)),s.computeBoundingSphere(),this.add(new Gn(s,new Ke({color:i,opacity:.2,transparent:!0,depthWrite:!1,toneMapped:!1})))}updateMatrixWorld(t){let e=-this.plane.constant;Math.abs(e)<1e-8&&(e=1e-8),this.scale.set(.5*this.size,.5*this.size,e),this.children[0].material.side=e<0?1:0,this.lookAt(this.plane.normal),super.updateMatrixWorld(t)}},t.PointCloud=function(t,e){return console.warn("THREE.PointCloud has been renamed to THREE.Points."),new Ea(t,e)},t.PointCloudMaterial=function(t){return console.warn("THREE.PointCloudMaterial has been renamed to THREE.PointsMaterial."),new ba(t)},t.PointLight=Zl,t.PointLightHelper=class extends Gn{constructor(t,e,n){super(new jo(e,4,2),new Ke({wireframe:!0,fog:!1,toneMapped:!1})),this.light=t,this.light.updateMatrixWorld(),this.color=n,this.type="PointLightHelper",this.matrix=this.light.matrixWorld,this.matrixAutoUpdate=!1,this.update()}dispose(){this.geometry.dispose(),this.material.dispose()}update(){void 0!==this.color?this.material.color.set(this.color):this.material.color.copy(this.light.color)}},t.Points=Ea,t.PointsMaterial=ba,t.PolarGridHelper=class extends xa{constructor(t=10,e=16,n=8,i=64,r=4473924,s=8947848){r=new Qe(r),s=new Qe(s);const a=[],o=[];for(let n=0;n<=e;n++){const i=n/e*(2*Math.PI),l=Math.sin(i)*t,c=Math.cos(i)*t;a.push(0,0,0),a.push(l,0,c);const h=1&n?r:s;o.push(h.r,h.g,h.b),o.push(h.r,h.g,h.b)}for(let e=0;e<=n;e++){const l=1&e?r:s,c=t-t/n*e;for(let t=0;t>8&255]+gt[t>>16&255]+gt[t>>24&255]+"-"+gt[255&e]+gt[e>>8&255]+"-"+gt[e>>16&15|64]+gt[e>>24&255]+"-"+gt[63&n|128]+gt[n>>8&255]+"-"+gt[n>>16&255]+gt[n>>24&255]+gt[255&i]+gt[i>>8&255]+gt[i>>16&255]+gt[i>>24&255]).toLowerCase()}function bt(t,e,n){return Math.max(e,Math.min(n,t))}function Mt(t,e){return(t%e+e)%e}function wt(t,e,n){return(1-n)*t+n*e}function St(t){return 0==(t&t-1)&&0!==t}function Tt(t){return Math.pow(2,Math.ceil(Math.log(t)/Math.LN2))}function Et(t){return Math.pow(2,Math.floor(Math.log(t)/Math.LN2))}var At=Object.freeze({__proto__:null,DEG2RAD:yt,RAD2DEG:xt,generateUUID:_t,clamp:bt,euclideanModulo:Mt,mapLinear:function(t,e,n,i,r){return i+(t-e)*(r-i)/(n-e)},inverseLerp:function(t,e,n){return t!==e?(n-t)/(e-t):0},lerp:wt,damp:function(t,e,n,i){return wt(t,e,1-Math.exp(-n*i))},pingpong:function(t,e=1){return e-Math.abs(Mt(t,2*e)-e)},smoothstep:function(t,e,n){return t<=e?0:t>=n?1:(t=(t-e)/(n-e))*t*(3-2*t)},smootherstep:function(t,e,n){return t<=e?0:t>=n?1:(t=(t-e)/(n-e))*t*t*(t*(6*t-15)+10)},randInt:function(t,e){return t+Math.floor(Math.random()*(e-t+1))},randFloat:function(t,e){return t+Math.random()*(e-t)},randFloatSpread:function(t){return t*(.5-Math.random())},seededRandom:function(t){void 0!==t&&(vt=t);let e=vt+=1831565813;return e=Math.imul(e^e>>>15,1|e),e^=e+Math.imul(e^e>>>7,61|e),((e^e>>>14)>>>0)/4294967296},degToRad:function(t){return t*yt},radToDeg:function(t){return t*xt},isPowerOfTwo:St,ceilPowerOfTwo:Tt,floorPowerOfTwo:Et,setQuaternionFromProperEuler:function(t,e,n,i,r){const s=Math.cos,a=Math.sin,o=s(n/2),l=a(n/2),c=s((e+i)/2),h=a((e+i)/2),u=s((e-i)/2),d=a((e-i)/2),p=s((i-e)/2),m=a((i-e)/2);switch(r){case"XYX":t.set(o*h,l*u,l*d,o*c);break;case"YZY":t.set(l*d,o*h,l*u,o*c);break;case"ZXZ":t.set(l*u,l*d,o*h,o*c);break;case"XZX":t.set(o*h,l*m,l*p,o*c);break;case"YXY":t.set(l*p,o*h,l*m,o*c);break;case"ZYZ":t.set(l*m,l*p,o*h,o*c);break;default:console.warn("THREE.MathUtils: .setQuaternionFromProperEuler() encountered an unknown order: "+r)}},normalize:function(t,e){switch(e.constructor){case Float32Array:return t;case Uint16Array:return Math.round(65535*t);case Uint8Array:return Math.round(255*t);case Int16Array:return Math.round(32767*t);case Int8Array:return Math.round(127*t);default:throw new Error("Invalid component type.")}},denormalize:function(t,e){switch(e.constructor){case Float32Array:return t;case Uint16Array:return t/65535;case Uint8Array:return t/255;case Int16Array:return Math.max(t/32767,-1);case Int8Array:return Math.max(t/127,-1);default:throw new Error("Invalid component type.")}}});class Rt{constructor(t=0,e=0){this.x=t,this.y=e}get width(){return this.x}set width(t){this.x=t}get height(){return this.y}set height(t){this.y=t}set(t,e){return this.x=t,this.y=e,this}setScalar(t){return this.x=t,this.y=t,this}setX(t){return this.x=t,this}setY(t){return this.y=t,this}setComponent(t,e){switch(t){case 0:this.x=e;break;case 1:this.y=e;break;default:throw new Error("index is out of range: "+t)}return this}getComponent(t){switch(t){case 0:return this.x;case 1:return this.y;default:throw new Error("index is out of range: "+t)}}clone(){return new this.constructor(this.x,this.y)}copy(t){return this.x=t.x,this.y=t.y,this}add(t,e){return void 0!==e?(console.warn("THREE.Vector2: .add() now only accepts one argument. Use .addVectors( a, b ) instead."),this.addVectors(t,e)):(this.x+=t.x,this.y+=t.y,this)}addScalar(t){return this.x+=t,this.y+=t,this}addVectors(t,e){return this.x=t.x+e.x,this.y=t.y+e.y,this}addScaledVector(t,e){return this.x+=t.x*e,this.y+=t.y*e,this}sub(t,e){return void 0!==e?(console.warn("THREE.Vector2: .sub() now only accepts one argument. Use .subVectors( a, b ) instead."),this.subVectors(t,e)):(this.x-=t.x,this.y-=t.y,this)}subScalar(t){return this.x-=t,this.y-=t,this}subVectors(t,e){return this.x=t.x-e.x,this.y=t.y-e.y,this}multiply(t){return this.x*=t.x,this.y*=t.y,this}multiplyScalar(t){return this.x*=t,this.y*=t,this}divide(t){return this.x/=t.x,this.y/=t.y,this}divideScalar(t){return this.multiplyScalar(1/t)}applyMatrix3(t){const e=this.x,n=this.y,i=t.elements;return this.x=i[0]*e+i[3]*n+i[6],this.y=i[1]*e+i[4]*n+i[7],this}min(t){return this.x=Math.min(this.x,t.x),this.y=Math.min(this.y,t.y),this}max(t){return this.x=Math.max(this.x,t.x),this.y=Math.max(this.y,t.y),this}clamp(t,e){return this.x=Math.max(t.x,Math.min(e.x,this.x)),this.y=Math.max(t.y,Math.min(e.y,this.y)),this}clampScalar(t,e){return this.x=Math.max(t,Math.min(e,this.x)),this.y=Math.max(t,Math.min(e,this.y)),this}clampLength(t,e){const n=this.length();return this.divideScalar(n||1).multiplyScalar(Math.max(t,Math.min(e,n)))}floor(){return this.x=Math.floor(this.x),this.y=Math.floor(this.y),this}ceil(){return this.x=Math.ceil(this.x),this.y=Math.ceil(this.y),this}round(){return this.x=Math.round(this.x),this.y=Math.round(this.y),this}roundToZero(){return this.x=this.x<0?Math.ceil(this.x):Math.floor(this.x),this.y=this.y<0?Math.ceil(this.y):Math.floor(this.y),this}negate(){return this.x=-this.x,this.y=-this.y,this}dot(t){return this.x*t.x+this.y*t.y}cross(t){return this.x*t.y-this.y*t.x}lengthSq(){return this.x*this.x+this.y*this.y}length(){return Math.sqrt(this.x*this.x+this.y*this.y)}manhattanLength(){return Math.abs(this.x)+Math.abs(this.y)}normalize(){return this.divideScalar(this.length()||1)}angle(){return Math.atan2(-this.y,-this.x)+Math.PI}distanceTo(t){return Math.sqrt(this.distanceToSquared(t))}distanceToSquared(t){const e=this.x-t.x,n=this.y-t.y;return e*e+n*n}manhattanDistanceTo(t){return Math.abs(this.x-t.x)+Math.abs(this.y-t.y)}setLength(t){return this.normalize().multiplyScalar(t)}lerp(t,e){return this.x+=(t.x-this.x)*e,this.y+=(t.y-this.y)*e,this}lerpVectors(t,e,n){return this.x=t.x+(e.x-t.x)*n,this.y=t.y+(e.y-t.y)*n,this}equals(t){return t.x===this.x&&t.y===this.y}fromArray(t,e=0){return this.x=t[e],this.y=t[e+1],this}toArray(t=[],e=0){return t[e]=this.x,t[e+1]=this.y,t}fromBufferAttribute(t,e,n){return void 0!==n&&console.warn("THREE.Vector2: offset has been removed from .fromBufferAttribute()."),this.x=t.getX(e),this.y=t.getY(e),this}rotateAround(t,e){const n=Math.cos(e),i=Math.sin(e),r=this.x-t.x,s=this.y-t.y;return this.x=r*n-s*i+t.x,this.y=r*i+s*n+t.y,this}random(){return this.x=Math.random(),this.y=Math.random(),this}*[Symbol.iterator](){yield this.x,yield this.y}}Rt.prototype.isVector2=!0;class Ct{constructor(){this.elements=[1,0,0,0,1,0,0,0,1],arguments.length>0&&console.error("THREE.Matrix3: the constructor no longer reads arguments. use .set() instead.")}set(t,e,n,i,r,s,a,o,l){const c=this.elements;return c[0]=t,c[1]=i,c[2]=a,c[3]=e,c[4]=r,c[5]=o,c[6]=n,c[7]=s,c[8]=l,this}identity(){return this.set(1,0,0,0,1,0,0,0,1),this}copy(t){const e=this.elements,n=t.elements;return e[0]=n[0],e[1]=n[1],e[2]=n[2],e[3]=n[3],e[4]=n[4],e[5]=n[5],e[6]=n[6],e[7]=n[7],e[8]=n[8],this}extractBasis(t,e,n){return t.setFromMatrix3Column(this,0),e.setFromMatrix3Column(this,1),n.setFromMatrix3Column(this,2),this}setFromMatrix4(t){const e=t.elements;return this.set(e[0],e[4],e[8],e[1],e[5],e[9],e[2],e[6],e[10]),this}multiply(t){return this.multiplyMatrices(this,t)}premultiply(t){return this.multiplyMatrices(t,this)}multiplyMatrices(t,e){const n=t.elements,i=e.elements,r=this.elements,s=n[0],a=n[3],o=n[6],l=n[1],c=n[4],h=n[7],u=n[2],d=n[5],p=n[8],m=i[0],f=i[3],g=i[6],v=i[1],y=i[4],x=i[7],_=i[2],b=i[5],M=i[8];return r[0]=s*m+a*v+o*_,r[3]=s*f+a*y+o*b,r[6]=s*g+a*x+o*M,r[1]=l*m+c*v+h*_,r[4]=l*f+c*y+h*b,r[7]=l*g+c*x+h*M,r[2]=u*m+d*v+p*_,r[5]=u*f+d*y+p*b,r[8]=u*g+d*x+p*M,this}multiplyScalar(t){const e=this.elements;return e[0]*=t,e[3]*=t,e[6]*=t,e[1]*=t,e[4]*=t,e[7]*=t,e[2]*=t,e[5]*=t,e[8]*=t,this}determinant(){const t=this.elements,e=t[0],n=t[1],i=t[2],r=t[3],s=t[4],a=t[5],o=t[6],l=t[7],c=t[8];return e*s*c-e*a*l-n*r*c+n*a*o+i*r*l-i*s*o}invert(){const t=this.elements,e=t[0],n=t[1],i=t[2],r=t[3],s=t[4],a=t[5],o=t[6],l=t[7],c=t[8],h=c*s-a*l,u=a*o-c*r,d=l*r-s*o,p=e*h+n*u+i*d;if(0===p)return this.set(0,0,0,0,0,0,0,0,0);const m=1/p;return t[0]=h*m,t[1]=(i*l-c*n)*m,t[2]=(a*n-i*s)*m,t[3]=u*m,t[4]=(c*e-i*o)*m,t[5]=(i*r-a*e)*m,t[6]=d*m,t[7]=(n*o-l*e)*m,t[8]=(s*e-n*r)*m,this}transpose(){let t;const e=this.elements;return t=e[1],e[1]=e[3],e[3]=t,t=e[2],e[2]=e[6],e[6]=t,t=e[5],e[5]=e[7],e[7]=t,this}getNormalMatrix(t){return this.setFromMatrix4(t).invert().transpose()}transposeIntoArray(t){const e=this.elements;return t[0]=e[0],t[1]=e[3],t[2]=e[6],t[3]=e[1],t[4]=e[4],t[5]=e[7],t[6]=e[2],t[7]=e[5],t[8]=e[8],this}setUvTransform(t,e,n,i,r,s,a){const o=Math.cos(r),l=Math.sin(r);return this.set(n*o,n*l,-n*(o*s+l*a)+s+t,-i*l,i*o,-i*(-l*s+o*a)+a+e,0,0,1),this}scale(t,e){const n=this.elements;return n[0]*=t,n[3]*=t,n[6]*=t,n[1]*=e,n[4]*=e,n[7]*=e,this}rotate(t){const e=Math.cos(t),n=Math.sin(t),i=this.elements,r=i[0],s=i[3],a=i[6],o=i[1],l=i[4],c=i[7];return i[0]=e*r+n*o,i[3]=e*s+n*l,i[6]=e*a+n*c,i[1]=-n*r+e*o,i[4]=-n*s+e*l,i[7]=-n*a+e*c,this}translate(t,e){const n=this.elements;return n[0]+=t*n[2],n[3]+=t*n[5],n[6]+=t*n[8],n[1]+=e*n[2],n[4]+=e*n[5],n[7]+=e*n[8],this}equals(t){const e=this.elements,n=t.elements;for(let t=0;t<9;t++)if(e[t]!==n[t])return!1;return!0}fromArray(t,e=0){for(let n=0;n<9;n++)this.elements[n]=t[n+e];return this}toArray(t=[],e=0){const n=this.elements;return t[e]=n[0],t[e+1]=n[1],t[e+2]=n[2],t[e+3]=n[3],t[e+4]=n[4],t[e+5]=n[5],t[e+6]=n[6],t[e+7]=n[7],t[e+8]=n[8],t}clone(){return(new this.constructor).fromArray(this.elements)}}function Lt(t){for(let e=t.length-1;e>=0;--e)if(t[e]>65535)return!0;return!1}Ct.prototype.isMatrix3=!0;const Pt={Int8Array:Int8Array,Uint8Array:Uint8Array,Uint8ClampedArray:Uint8ClampedArray,Int16Array:Int16Array,Uint16Array:Uint16Array,Int32Array:Int32Array,Uint32Array:Uint32Array,Float32Array:Float32Array,Float64Array:Float64Array};function Dt(t,e){return new Pt[t](e)}function It(t){return document.createElementNS("http://www.w3.org/1999/xhtml",t)}function Nt(t){return t<.04045?.0773993808*t:Math.pow(.9478672986*t+.0521327014,2.4)}function Bt(t){return t<.0031308?12.92*t:1.055*Math.pow(t,.41666)-.055}const zt={[lt]:{[ct]:Nt},[ct]:{[lt]:Bt}},Ot={legacyMode:!0,get workingColorSpace(){return ct},set workingColorSpace(t){console.warn("THREE.ColorManagement: .workingColorSpace is readonly.")},convert:function(t,e,n){if(this.legacyMode||e===n||!e||!n)return t;if(zt[e]&&void 0!==zt[e][n]){const i=zt[e][n];return t.r=i(t.r),t.g=i(t.g),t.b=i(t.b),t}throw new Error("Unsupported color space conversion.")},fromWorkingColorSpace:function(t,e){return this.convert(t,this.workingColorSpace,e)},toWorkingColorSpace:function(t,e){return this.convert(t,e,this.workingColorSpace)}},Ut={aliceblue:15792383,antiquewhite:16444375,aqua:65535,aquamarine:8388564,azure:15794175,beige:16119260,bisque:16770244,black:0,blanchedalmond:16772045,blue:255,blueviolet:9055202,brown:10824234,burlywood:14596231,cadetblue:6266528,chartreuse:8388352,chocolate:13789470,coral:16744272,cornflowerblue:6591981,cornsilk:16775388,crimson:14423100,cyan:65535,darkblue:139,darkcyan:35723,darkgoldenrod:12092939,darkgray:11119017,darkgreen:25600,darkgrey:11119017,darkkhaki:12433259,darkmagenta:9109643,darkolivegreen:5597999,darkorange:16747520,darkorchid:10040012,darkred:9109504,darksalmon:15308410,darkseagreen:9419919,darkslateblue:4734347,darkslategray:3100495,darkslategrey:3100495,darkturquoise:52945,darkviolet:9699539,deeppink:16716947,deepskyblue:49151,dimgray:6908265,dimgrey:6908265,dodgerblue:2003199,firebrick:11674146,floralwhite:16775920,forestgreen:2263842,fuchsia:16711935,gainsboro:14474460,ghostwhite:16316671,gold:16766720,goldenrod:14329120,gray:8421504,green:32768,greenyellow:11403055,grey:8421504,honeydew:15794160,hotpink:16738740,indianred:13458524,indigo:4915330,ivory:16777200,khaki:15787660,lavender:15132410,lavenderblush:16773365,lawngreen:8190976,lemonchiffon:16775885,lightblue:11393254,lightcoral:15761536,lightcyan:14745599,lightgoldenrodyellow:16448210,lightgray:13882323,lightgreen:9498256,lightgrey:13882323,lightpink:16758465,lightsalmon:16752762,lightseagreen:2142890,lightskyblue:8900346,lightslategray:7833753,lightslategrey:7833753,lightsteelblue:11584734,lightyellow:16777184,lime:65280,limegreen:3329330,linen:16445670,magenta:16711935,maroon:8388608,mediumaquamarine:6737322,mediumblue:205,mediumorchid:12211667,mediumpurple:9662683,mediumseagreen:3978097,mediumslateblue:8087790,mediumspringgreen:64154,mediumturquoise:4772300,mediumvioletred:13047173,midnightblue:1644912,mintcream:16121850,mistyrose:16770273,moccasin:16770229,navajowhite:16768685,navy:128,oldlace:16643558,olive:8421376,olivedrab:7048739,orange:16753920,orangered:16729344,orchid:14315734,palegoldenrod:15657130,palegreen:10025880,paleturquoise:11529966,palevioletred:14381203,papayawhip:16773077,peachpuff:16767673,peru:13468991,pink:16761035,plum:14524637,powderblue:11591910,purple:8388736,rebeccapurple:6697881,red:16711680,rosybrown:12357519,royalblue:4286945,saddlebrown:9127187,salmon:16416882,sandybrown:16032864,seagreen:3050327,seashell:16774638,sienna:10506797,silver:12632256,skyblue:8900331,slateblue:6970061,slategray:7372944,slategrey:7372944,snow:16775930,springgreen:65407,steelblue:4620980,tan:13808780,teal:32896,thistle:14204888,tomato:16737095,turquoise:4251856,violet:15631086,wheat:16113331,white:16777215,whitesmoke:16119285,yellow:16776960,yellowgreen:10145074},Ft={r:0,g:0,b:0},Ht={h:0,s:0,l:0},Gt={h:0,s:0,l:0};function kt(t,e,n){return n<0&&(n+=1),n>1&&(n-=1),n<1/6?t+6*(e-t)*n:n<.5?e:n<2/3?t+6*(e-t)*(2/3-n):t}function Vt(t,e){return e.r=t.r,e.g=t.g,e.b=t.b,e}class Wt{constructor(t,e,n){return void 0===e&&void 0===n?this.set(t):this.setRGB(t,e,n)}set(t){return t&&t.isColor?this.copy(t):"number"==typeof t?this.setHex(t):"string"==typeof t&&this.setStyle(t),this}setScalar(t){return this.r=t,this.g=t,this.b=t,this}setHex(t,e="srgb"){return t=Math.floor(t),this.r=(t>>16&255)/255,this.g=(t>>8&255)/255,this.b=(255&t)/255,Ot.toWorkingColorSpace(this,e),this}setRGB(t,e,n,i="srgb-linear"){return this.r=t,this.g=e,this.b=n,Ot.toWorkingColorSpace(this,i),this}setHSL(t,e,n,i="srgb-linear"){if(t=Mt(t,1),e=bt(e,0,1),n=bt(n,0,1),0===e)this.r=this.g=this.b=n;else{const i=n<=.5?n*(1+e):n+e-n*e,r=2*n-i;this.r=kt(r,i,t+1/3),this.g=kt(r,i,t),this.b=kt(r,i,t-1/3)}return Ot.toWorkingColorSpace(this,i),this}setStyle(t,e="srgb"){function n(e){void 0!==e&&parseFloat(e)<1&&console.warn("THREE.Color: Alpha component of "+t+" will be ignored.")}let i;if(i=/^((?:rgb|hsl)a?)\(([^\)]*)\)/.exec(t)){let t;const r=i[1],s=i[2];switch(r){case"rgb":case"rgba":if(t=/^\s*(\d+)\s*,\s*(\d+)\s*,\s*(\d+)\s*(?:,\s*(\d*\.?\d+)\s*)?$/.exec(s))return this.r=Math.min(255,parseInt(t[1],10))/255,this.g=Math.min(255,parseInt(t[2],10))/255,this.b=Math.min(255,parseInt(t[3],10))/255,Ot.toWorkingColorSpace(this,e),n(t[4]),this;if(t=/^\s*(\d+)\%\s*,\s*(\d+)\%\s*,\s*(\d+)\%\s*(?:,\s*(\d*\.?\d+)\s*)?$/.exec(s))return this.r=Math.min(100,parseInt(t[1],10))/100,this.g=Math.min(100,parseInt(t[2],10))/100,this.b=Math.min(100,parseInt(t[3],10))/100,Ot.toWorkingColorSpace(this,e),n(t[4]),this;break;case"hsl":case"hsla":if(t=/^\s*(\d*\.?\d+)\s*,\s*(\d+)\%\s*,\s*(\d+)\%\s*(?:,\s*(\d*\.?\d+)\s*)?$/.exec(s)){const i=parseFloat(t[1])/360,r=parseInt(t[2],10)/100,s=parseInt(t[3],10)/100;return n(t[4]),this.setHSL(i,r,s,e)}}}else if(i=/^\#([A-Fa-f\d]+)$/.exec(t)){const t=i[1],n=t.length;if(3===n)return this.r=parseInt(t.charAt(0)+t.charAt(0),16)/255,this.g=parseInt(t.charAt(1)+t.charAt(1),16)/255,this.b=parseInt(t.charAt(2)+t.charAt(2),16)/255,Ot.toWorkingColorSpace(this,e),this;if(6===n)return this.r=parseInt(t.charAt(0)+t.charAt(1),16)/255,this.g=parseInt(t.charAt(2)+t.charAt(3),16)/255,this.b=parseInt(t.charAt(4)+t.charAt(5),16)/255,Ot.toWorkingColorSpace(this,e),this}return t&&t.length>0?this.setColorName(t,e):this}setColorName(t,e="srgb"){const n=Ut[t.toLowerCase()];return void 0!==n?this.setHex(n,e):console.warn("THREE.Color: Unknown color "+t),this}clone(){return new this.constructor(this.r,this.g,this.b)}copy(t){return this.r=t.r,this.g=t.g,this.b=t.b,this}copySRGBToLinear(t){return this.r=Nt(t.r),this.g=Nt(t.g),this.b=Nt(t.b),this}copyLinearToSRGB(t){return this.r=Bt(t.r),this.g=Bt(t.g),this.b=Bt(t.b),this}convertSRGBToLinear(){return this.copySRGBToLinear(this),this}convertLinearToSRGB(){return this.copyLinearToSRGB(this),this}getHex(t="srgb"){return Ot.fromWorkingColorSpace(Vt(this,Ft),t),bt(255*Ft.r,0,255)<<16^bt(255*Ft.g,0,255)<<8^bt(255*Ft.b,0,255)<<0}getHexString(t="srgb"){return("000000"+this.getHex(t).toString(16)).slice(-6)}getHSL(t,e="srgb-linear"){Ot.fromWorkingColorSpace(Vt(this,Ft),e);const n=Ft.r,i=Ft.g,r=Ft.b,s=Math.max(n,i,r),a=Math.min(n,i,r);let o,l;const c=(a+s)/2;if(a===s)o=0,l=0;else{const t=s-a;switch(l=c<=.5?t/(s+a):t/(2-s-a),s){case n:o=(i-r)/t+(i2048||e.height>2048?(console.warn("THREE.ImageUtils.getDataURL: Image converted to jpg for performance reasons",t),e.toDataURL("image/jpeg",.6)):e.toDataURL("image/png")}static sRGBToLinear(t){if("undefined"!=typeof HTMLImageElement&&t instanceof HTMLImageElement||"undefined"!=typeof HTMLCanvasElement&&t instanceof HTMLCanvasElement||"undefined"!=typeof ImageBitmap&&t instanceof ImageBitmap){const e=It("canvas");e.width=t.width,e.height=t.height;const n=e.getContext("2d");n.drawImage(t,0,0,t.width,t.height);const i=n.getImageData(0,0,t.width,t.height),r=i.data;for(let t=0;t1)switch(this.wrapS){case c:t.x=t.x-Math.floor(t.x);break;case h:t.x=t.x<0?0:1;break;case u:1===Math.abs(Math.floor(t.x)%2)?t.x=Math.ceil(t.x)-t.x:t.x=t.x-Math.floor(t.x)}if(t.y<0||t.y>1)switch(this.wrapT){case c:t.y=t.y-Math.floor(t.y);break;case h:t.y=t.y<0?0:1;break;case u:1===Math.abs(Math.floor(t.y)%2)?t.y=Math.ceil(t.y)-t.y:t.y=t.y-Math.floor(t.y)}return this.flipY&&(t.y=1-t.y),t}set needsUpdate(t){!0===t&&(this.version++,this.source.needsUpdate=!0)}}Zt.DEFAULT_IMAGE=null,Zt.DEFAULT_MAPPING=i,Zt.prototype.isTexture=!0;class Kt{constructor(t=0,e=0,n=0,i=1){this.x=t,this.y=e,this.z=n,this.w=i}get width(){return this.z}set width(t){this.z=t}get height(){return this.w}set height(t){this.w=t}set(t,e,n,i){return this.x=t,this.y=e,this.z=n,this.w=i,this}setScalar(t){return this.x=t,this.y=t,this.z=t,this.w=t,this}setX(t){return this.x=t,this}setY(t){return this.y=t,this}setZ(t){return this.z=t,this}setW(t){return this.w=t,this}setComponent(t,e){switch(t){case 0:this.x=e;break;case 1:this.y=e;break;case 2:this.z=e;break;case 3:this.w=e;break;default:throw new Error("index is out of range: "+t)}return this}getComponent(t){switch(t){case 0:return this.x;case 1:return this.y;case 2:return this.z;case 3:return this.w;default:throw new Error("index is out of range: "+t)}}clone(){return new this.constructor(this.x,this.y,this.z,this.w)}copy(t){return this.x=t.x,this.y=t.y,this.z=t.z,this.w=void 0!==t.w?t.w:1,this}add(t,e){return void 0!==e?(console.warn("THREE.Vector4: .add() now only accepts one argument. Use .addVectors( a, b ) instead."),this.addVectors(t,e)):(this.x+=t.x,this.y+=t.y,this.z+=t.z,this.w+=t.w,this)}addScalar(t){return this.x+=t,this.y+=t,this.z+=t,this.w+=t,this}addVectors(t,e){return this.x=t.x+e.x,this.y=t.y+e.y,this.z=t.z+e.z,this.w=t.w+e.w,this}addScaledVector(t,e){return this.x+=t.x*e,this.y+=t.y*e,this.z+=t.z*e,this.w+=t.w*e,this}sub(t,e){return void 0!==e?(console.warn("THREE.Vector4: .sub() now only accepts one argument. Use .subVectors( a, b ) instead."),this.subVectors(t,e)):(this.x-=t.x,this.y-=t.y,this.z-=t.z,this.w-=t.w,this)}subScalar(t){return this.x-=t,this.y-=t,this.z-=t,this.w-=t,this}subVectors(t,e){return this.x=t.x-e.x,this.y=t.y-e.y,this.z=t.z-e.z,this.w=t.w-e.w,this}multiply(t){return this.x*=t.x,this.y*=t.y,this.z*=t.z,this.w*=t.w,this}multiplyScalar(t){return this.x*=t,this.y*=t,this.z*=t,this.w*=t,this}applyMatrix4(t){const e=this.x,n=this.y,i=this.z,r=this.w,s=t.elements;return this.x=s[0]*e+s[4]*n+s[8]*i+s[12]*r,this.y=s[1]*e+s[5]*n+s[9]*i+s[13]*r,this.z=s[2]*e+s[6]*n+s[10]*i+s[14]*r,this.w=s[3]*e+s[7]*n+s[11]*i+s[15]*r,this}divideScalar(t){return this.multiplyScalar(1/t)}setAxisAngleFromQuaternion(t){this.w=2*Math.acos(t.w);const e=Math.sqrt(1-t.w*t.w);return e<1e-4?(this.x=1,this.y=0,this.z=0):(this.x=t.x/e,this.y=t.y/e,this.z=t.z/e),this}setAxisAngleFromRotationMatrix(t){let e,n,i,r;const s=.01,a=.1,o=t.elements,l=o[0],c=o[4],h=o[8],u=o[1],d=o[5],p=o[9],m=o[2],f=o[6],g=o[10];if(Math.abs(c-u)o&&t>v?tv?o=0?1:-1,i=1-e*e;if(i>Number.EPSILON){const r=Math.sqrt(i),s=Math.atan2(r,e*n);t=Math.sin(t*s)/r,a=Math.sin(a*s)/r}const r=a*n;if(o=o*t+u*r,l=l*t+d*r,c=c*t+p*r,h=h*t+m*r,t===1-a){const t=1/Math.sqrt(o*o+l*l+c*c+h*h);o*=t,l*=t,c*=t,h*=t}}t[e]=o,t[e+1]=l,t[e+2]=c,t[e+3]=h}static multiplyQuaternionsFlat(t,e,n,i,r,s){const a=n[i],o=n[i+1],l=n[i+2],c=n[i+3],h=r[s],u=r[s+1],d=r[s+2],p=r[s+3];return t[e]=a*p+c*h+o*d-l*u,t[e+1]=o*p+c*u+l*h-a*d,t[e+2]=l*p+c*d+a*u-o*h,t[e+3]=c*p-a*h-o*u-l*d,t}get x(){return this._x}set x(t){this._x=t,this._onChangeCallback()}get y(){return this._y}set y(t){this._y=t,this._onChangeCallback()}get z(){return this._z}set z(t){this._z=t,this._onChangeCallback()}get w(){return this._w}set w(t){this._w=t,this._onChangeCallback()}set(t,e,n,i){return this._x=t,this._y=e,this._z=n,this._w=i,this._onChangeCallback(),this}clone(){return new this.constructor(this._x,this._y,this._z,this._w)}copy(t){return this._x=t.x,this._y=t.y,this._z=t.z,this._w=t.w,this._onChangeCallback(),this}setFromEuler(t,e){if(!t||!t.isEuler)throw new Error("THREE.Quaternion: .setFromEuler() now expects an Euler rotation rather than a Vector3 and order.");const n=t._x,i=t._y,r=t._z,s=t._order,a=Math.cos,o=Math.sin,l=a(n/2),c=a(i/2),h=a(r/2),u=o(n/2),d=o(i/2),p=o(r/2);switch(s){case"XYZ":this._x=u*c*h+l*d*p,this._y=l*d*h-u*c*p,this._z=l*c*p+u*d*h,this._w=l*c*h-u*d*p;break;case"YXZ":this._x=u*c*h+l*d*p,this._y=l*d*h-u*c*p,this._z=l*c*p-u*d*h,this._w=l*c*h+u*d*p;break;case"ZXY":this._x=u*c*h-l*d*p,this._y=l*d*h+u*c*p,this._z=l*c*p+u*d*h,this._w=l*c*h-u*d*p;break;case"ZYX":this._x=u*c*h-l*d*p,this._y=l*d*h+u*c*p,this._z=l*c*p-u*d*h,this._w=l*c*h+u*d*p;break;case"YZX":this._x=u*c*h+l*d*p,this._y=l*d*h+u*c*p,this._z=l*c*p-u*d*h,this._w=l*c*h-u*d*p;break;case"XZY":this._x=u*c*h-l*d*p,this._y=l*d*h-u*c*p,this._z=l*c*p+u*d*h,this._w=l*c*h+u*d*p;break;default:console.warn("THREE.Quaternion: .setFromEuler() encountered an unknown order: "+s)}return!1!==e&&this._onChangeCallback(),this}setFromAxisAngle(t,e){const n=e/2,i=Math.sin(n);return this._x=t.x*i,this._y=t.y*i,this._z=t.z*i,this._w=Math.cos(n),this._onChangeCallback(),this}setFromRotationMatrix(t){const e=t.elements,n=e[0],i=e[4],r=e[8],s=e[1],a=e[5],o=e[9],l=e[2],c=e[6],h=e[10],u=n+a+h;if(u>0){const t=.5/Math.sqrt(u+1);this._w=.25/t,this._x=(c-o)*t,this._y=(r-l)*t,this._z=(s-i)*t}else if(n>a&&n>h){const t=2*Math.sqrt(1+n-a-h);this._w=(c-o)/t,this._x=.25*t,this._y=(i+s)/t,this._z=(r+l)/t}else if(a>h){const t=2*Math.sqrt(1+a-n-h);this._w=(r-l)/t,this._x=(i+s)/t,this._y=.25*t,this._z=(o+c)/t}else{const t=2*Math.sqrt(1+h-n-a);this._w=(s-i)/t,this._x=(r+l)/t,this._y=(o+c)/t,this._z=.25*t}return this._onChangeCallback(),this}setFromUnitVectors(t,e){let n=t.dot(e)+1;return nMath.abs(t.z)?(this._x=-t.y,this._y=t.x,this._z=0,this._w=n):(this._x=0,this._y=-t.z,this._z=t.y,this._w=n)):(this._x=t.y*e.z-t.z*e.y,this._y=t.z*e.x-t.x*e.z,this._z=t.x*e.y-t.y*e.x,this._w=n),this.normalize()}angleTo(t){return 2*Math.acos(Math.abs(bt(this.dot(t),-1,1)))}rotateTowards(t,e){const n=this.angleTo(t);if(0===n)return this;const i=Math.min(1,e/n);return this.slerp(t,i),this}identity(){return this.set(0,0,0,1)}invert(){return this.conjugate()}conjugate(){return this._x*=-1,this._y*=-1,this._z*=-1,this._onChangeCallback(),this}dot(t){return this._x*t._x+this._y*t._y+this._z*t._z+this._w*t._w}lengthSq(){return this._x*this._x+this._y*this._y+this._z*this._z+this._w*this._w}length(){return Math.sqrt(this._x*this._x+this._y*this._y+this._z*this._z+this._w*this._w)}normalize(){let t=this.length();return 0===t?(this._x=0,this._y=0,this._z=0,this._w=1):(t=1/t,this._x=this._x*t,this._y=this._y*t,this._z=this._z*t,this._w=this._w*t),this._onChangeCallback(),this}multiply(t,e){return void 0!==e?(console.warn("THREE.Quaternion: .multiply() now only accepts one argument. Use .multiplyQuaternions( a, b ) instead."),this.multiplyQuaternions(t,e)):this.multiplyQuaternions(this,t)}premultiply(t){return this.multiplyQuaternions(t,this)}multiplyQuaternions(t,e){const n=t._x,i=t._y,r=t._z,s=t._w,a=e._x,o=e._y,l=e._z,c=e._w;return this._x=n*c+s*a+i*l-r*o,this._y=i*c+s*o+r*a-n*l,this._z=r*c+s*l+n*o-i*a,this._w=s*c-n*a-i*o-r*l,this._onChangeCallback(),this}slerp(t,e){if(0===e)return this;if(1===e)return this.copy(t);const n=this._x,i=this._y,r=this._z,s=this._w;let a=s*t._w+n*t._x+i*t._y+r*t._z;if(a<0?(this._w=-t._w,this._x=-t._x,this._y=-t._y,this._z=-t._z,a=-a):this.copy(t),a>=1)return this._w=s,this._x=n,this._y=i,this._z=r,this;const o=1-a*a;if(o<=Number.EPSILON){const t=1-e;return this._w=t*s+e*this._w,this._x=t*n+e*this._x,this._y=t*i+e*this._y,this._z=t*r+e*this._z,this.normalize(),this._onChangeCallback(),this}const l=Math.sqrt(o),c=Math.atan2(l,a),h=Math.sin((1-e)*c)/l,u=Math.sin(e*c)/l;return this._w=s*h+this._w*u,this._x=n*h+this._x*u,this._y=i*h+this._y*u,this._z=r*h+this._z*u,this._onChangeCallback(),this}slerpQuaternions(t,e,n){return this.copy(t).slerp(e,n)}random(){const t=Math.random(),e=Math.sqrt(1-t),n=Math.sqrt(t),i=2*Math.PI*Math.random(),r=2*Math.PI*Math.random();return this.set(e*Math.cos(i),n*Math.sin(r),n*Math.cos(r),e*Math.sin(i))}equals(t){return t._x===this._x&&t._y===this._y&&t._z===this._z&&t._w===this._w}fromArray(t,e=0){return this._x=t[e],this._y=t[e+1],this._z=t[e+2],this._w=t[e+3],this._onChangeCallback(),this}toArray(t=[],e=0){return t[e]=this._x,t[e+1]=this._y,t[e+2]=this._z,t[e+3]=this._w,t}fromBufferAttribute(t,e){return this._x=t.getX(e),this._y=t.getY(e),this._z=t.getZ(e),this._w=t.getW(e),this}_onChange(t){return this._onChangeCallback=t,this}_onChangeCallback(){}*[Symbol.iterator](){yield this._x,yield this._y,yield this._z,yield this._w}}re.prototype.isQuaternion=!0;class se{constructor(t=0,e=0,n=0){this.x=t,this.y=e,this.z=n}set(t,e,n){return void 0===n&&(n=this.z),this.x=t,this.y=e,this.z=n,this}setScalar(t){return this.x=t,this.y=t,this.z=t,this}setX(t){return this.x=t,this}setY(t){return this.y=t,this}setZ(t){return this.z=t,this}setComponent(t,e){switch(t){case 0:this.x=e;break;case 1:this.y=e;break;case 2:this.z=e;break;default:throw new Error("index is out of range: "+t)}return this}getComponent(t){switch(t){case 0:return this.x;case 1:return this.y;case 2:return this.z;default:throw new Error("index is out of range: "+t)}}clone(){return new this.constructor(this.x,this.y,this.z)}copy(t){return this.x=t.x,this.y=t.y,this.z=t.z,this}add(t,e){return void 0!==e?(console.warn("THREE.Vector3: .add() now only accepts one argument. Use .addVectors( a, b ) instead."),this.addVectors(t,e)):(this.x+=t.x,this.y+=t.y,this.z+=t.z,this)}addScalar(t){return this.x+=t,this.y+=t,this.z+=t,this}addVectors(t,e){return this.x=t.x+e.x,this.y=t.y+e.y,this.z=t.z+e.z,this}addScaledVector(t,e){return this.x+=t.x*e,this.y+=t.y*e,this.z+=t.z*e,this}sub(t,e){return void 0!==e?(console.warn("THREE.Vector3: .sub() now only accepts one argument. Use .subVectors( a, b ) instead."),this.subVectors(t,e)):(this.x-=t.x,this.y-=t.y,this.z-=t.z,this)}subScalar(t){return this.x-=t,this.y-=t,this.z-=t,this}subVectors(t,e){return this.x=t.x-e.x,this.y=t.y-e.y,this.z=t.z-e.z,this}multiply(t,e){return void 0!==e?(console.warn("THREE.Vector3: .multiply() now only accepts one argument. Use .multiplyVectors( a, b ) instead."),this.multiplyVectors(t,e)):(this.x*=t.x,this.y*=t.y,this.z*=t.z,this)}multiplyScalar(t){return this.x*=t,this.y*=t,this.z*=t,this}multiplyVectors(t,e){return this.x=t.x*e.x,this.y=t.y*e.y,this.z=t.z*e.z,this}applyEuler(t){return t&&t.isEuler||console.error("THREE.Vector3: .applyEuler() now expects an Euler rotation rather than a Vector3 and order."),this.applyQuaternion(oe.setFromEuler(t))}applyAxisAngle(t,e){return this.applyQuaternion(oe.setFromAxisAngle(t,e))}applyMatrix3(t){const e=this.x,n=this.y,i=this.z,r=t.elements;return this.x=r[0]*e+r[3]*n+r[6]*i,this.y=r[1]*e+r[4]*n+r[7]*i,this.z=r[2]*e+r[5]*n+r[8]*i,this}applyNormalMatrix(t){return this.applyMatrix3(t).normalize()}applyMatrix4(t){const e=this.x,n=this.y,i=this.z,r=t.elements,s=1/(r[3]*e+r[7]*n+r[11]*i+r[15]);return this.x=(r[0]*e+r[4]*n+r[8]*i+r[12])*s,this.y=(r[1]*e+r[5]*n+r[9]*i+r[13])*s,this.z=(r[2]*e+r[6]*n+r[10]*i+r[14])*s,this}applyQuaternion(t){const e=this.x,n=this.y,i=this.z,r=t.x,s=t.y,a=t.z,o=t.w,l=o*e+s*i-a*n,c=o*n+a*e-r*i,h=o*i+r*n-s*e,u=-r*e-s*n-a*i;return this.x=l*o+u*-r+c*-a-h*-s,this.y=c*o+u*-s+h*-r-l*-a,this.z=h*o+u*-a+l*-s-c*-r,this}project(t){return this.applyMatrix4(t.matrixWorldInverse).applyMatrix4(t.projectionMatrix)}unproject(t){return this.applyMatrix4(t.projectionMatrixInverse).applyMatrix4(t.matrixWorld)}transformDirection(t){const e=this.x,n=this.y,i=this.z,r=t.elements;return this.x=r[0]*e+r[4]*n+r[8]*i,this.y=r[1]*e+r[5]*n+r[9]*i,this.z=r[2]*e+r[6]*n+r[10]*i,this.normalize()}divide(t){return this.x/=t.x,this.y/=t.y,this.z/=t.z,this}divideScalar(t){return this.multiplyScalar(1/t)}min(t){return this.x=Math.min(this.x,t.x),this.y=Math.min(this.y,t.y),this.z=Math.min(this.z,t.z),this}max(t){return this.x=Math.max(this.x,t.x),this.y=Math.max(this.y,t.y),this.z=Math.max(this.z,t.z),this}clamp(t,e){return this.x=Math.max(t.x,Math.min(e.x,this.x)),this.y=Math.max(t.y,Math.min(e.y,this.y)),this.z=Math.max(t.z,Math.min(e.z,this.z)),this}clampScalar(t,e){return this.x=Math.max(t,Math.min(e,this.x)),this.y=Math.max(t,Math.min(e,this.y)),this.z=Math.max(t,Math.min(e,this.z)),this}clampLength(t,e){const n=this.length();return this.divideScalar(n||1).multiplyScalar(Math.max(t,Math.min(e,n)))}floor(){return this.x=Math.floor(this.x),this.y=Math.floor(this.y),this.z=Math.floor(this.z),this}ceil(){return this.x=Math.ceil(this.x),this.y=Math.ceil(this.y),this.z=Math.ceil(this.z),this}round(){return this.x=Math.round(this.x),this.y=Math.round(this.y),this.z=Math.round(this.z),this}roundToZero(){return this.x=this.x<0?Math.ceil(this.x):Math.floor(this.x),this.y=this.y<0?Math.ceil(this.y):Math.floor(this.y),this.z=this.z<0?Math.ceil(this.z):Math.floor(this.z),this}negate(){return this.x=-this.x,this.y=-this.y,this.z=-this.z,this}dot(t){return this.x*t.x+this.y*t.y+this.z*t.z}lengthSq(){return this.x*this.x+this.y*this.y+this.z*this.z}length(){return Math.sqrt(this.x*this.x+this.y*this.y+this.z*this.z)}manhattanLength(){return Math.abs(this.x)+Math.abs(this.y)+Math.abs(this.z)}normalize(){return this.divideScalar(this.length()||1)}setLength(t){return this.normalize().multiplyScalar(t)}lerp(t,e){return this.x+=(t.x-this.x)*e,this.y+=(t.y-this.y)*e,this.z+=(t.z-this.z)*e,this}lerpVectors(t,e,n){return this.x=t.x+(e.x-t.x)*n,this.y=t.y+(e.y-t.y)*n,this.z=t.z+(e.z-t.z)*n,this}cross(t,e){return void 0!==e?(console.warn("THREE.Vector3: .cross() now only accepts one argument. Use .crossVectors( a, b ) instead."),this.crossVectors(t,e)):this.crossVectors(this,t)}crossVectors(t,e){const n=t.x,i=t.y,r=t.z,s=e.x,a=e.y,o=e.z;return this.x=i*o-r*a,this.y=r*s-n*o,this.z=n*a-i*s,this}projectOnVector(t){const e=t.lengthSq();if(0===e)return this.set(0,0,0);const n=t.dot(this)/e;return this.copy(t).multiplyScalar(n)}projectOnPlane(t){return ae.copy(this).projectOnVector(t),this.sub(ae)}reflect(t){return this.sub(ae.copy(t).multiplyScalar(2*this.dot(t)))}angleTo(t){const e=Math.sqrt(this.lengthSq()*t.lengthSq());if(0===e)return Math.PI/2;const n=this.dot(t)/e;return Math.acos(bt(n,-1,1))}distanceTo(t){return Math.sqrt(this.distanceToSquared(t))}distanceToSquared(t){const e=this.x-t.x,n=this.y-t.y,i=this.z-t.z;return e*e+n*n+i*i}manhattanDistanceTo(t){return Math.abs(this.x-t.x)+Math.abs(this.y-t.y)+Math.abs(this.z-t.z)}setFromSpherical(t){return this.setFromSphericalCoords(t.radius,t.phi,t.theta)}setFromSphericalCoords(t,e,n){const i=Math.sin(e)*t;return this.x=i*Math.sin(n),this.y=Math.cos(e)*t,this.z=i*Math.cos(n),this}setFromCylindrical(t){return this.setFromCylindricalCoords(t.radius,t.theta,t.y)}setFromCylindricalCoords(t,e,n){return this.x=t*Math.sin(e),this.y=n,this.z=t*Math.cos(e),this}setFromMatrixPosition(t){const e=t.elements;return this.x=e[12],this.y=e[13],this.z=e[14],this}setFromMatrixScale(t){const e=this.setFromMatrixColumn(t,0).length(),n=this.setFromMatrixColumn(t,1).length(),i=this.setFromMatrixColumn(t,2).length();return this.x=e,this.y=n,this.z=i,this}setFromMatrixColumn(t,e){return this.fromArray(t.elements,4*e)}setFromMatrix3Column(t,e){return this.fromArray(t.elements,3*e)}setFromEuler(t){return this.x=t._x,this.y=t._y,this.z=t._z,this}equals(t){return t.x===this.x&&t.y===this.y&&t.z===this.z}fromArray(t,e=0){return this.x=t[e],this.y=t[e+1],this.z=t[e+2],this}toArray(t=[],e=0){return t[e]=this.x,t[e+1]=this.y,t[e+2]=this.z,t}fromBufferAttribute(t,e,n){return void 0!==n&&console.warn("THREE.Vector3: offset has been removed from .fromBufferAttribute()."),this.x=t.getX(e),this.y=t.getY(e),this.z=t.getZ(e),this}random(){return this.x=Math.random(),this.y=Math.random(),this.z=Math.random(),this}randomDirection(){const t=2*(Math.random()-.5),e=Math.random()*Math.PI*2,n=Math.sqrt(1-t**2);return this.x=n*Math.cos(e),this.y=n*Math.sin(e),this.z=t,this}*[Symbol.iterator](){yield this.x,yield this.y,yield this.z}}se.prototype.isVector3=!0;const ae=new se,oe=new re;class le{constructor(t=new se(1/0,1/0,1/0),e=new se(-1/0,-1/0,-1/0)){this.min=t,this.max=e}set(t,e){return this.min.copy(t),this.max.copy(e),this}setFromArray(t){let e=1/0,n=1/0,i=1/0,r=-1/0,s=-1/0,a=-1/0;for(let o=0,l=t.length;or&&(r=l),c>s&&(s=c),h>a&&(a=h)}return this.min.set(e,n,i),this.max.set(r,s,a),this}setFromBufferAttribute(t){let e=1/0,n=1/0,i=1/0,r=-1/0,s=-1/0,a=-1/0;for(let o=0,l=t.count;or&&(r=l),c>s&&(s=c),h>a&&(a=h)}return this.min.set(e,n,i),this.max.set(r,s,a),this}setFromPoints(t){this.makeEmpty();for(let e=0,n=t.length;ethis.max.x||t.ythis.max.y||t.zthis.max.z)}containsBox(t){return this.min.x<=t.min.x&&t.max.x<=this.max.x&&this.min.y<=t.min.y&&t.max.y<=this.max.y&&this.min.z<=t.min.z&&t.max.z<=this.max.z}getParameter(t,e){return e.set((t.x-this.min.x)/(this.max.x-this.min.x),(t.y-this.min.y)/(this.max.y-this.min.y),(t.z-this.min.z)/(this.max.z-this.min.z))}intersectsBox(t){return!(t.max.xthis.max.x||t.max.ythis.max.y||t.max.zthis.max.z)}intersectsSphere(t){return this.clampPoint(t.center,he),he.distanceToSquared(t.center)<=t.radius*t.radius}intersectsPlane(t){let e,n;return t.normal.x>0?(e=t.normal.x*this.min.x,n=t.normal.x*this.max.x):(e=t.normal.x*this.max.x,n=t.normal.x*this.min.x),t.normal.y>0?(e+=t.normal.y*this.min.y,n+=t.normal.y*this.max.y):(e+=t.normal.y*this.max.y,n+=t.normal.y*this.min.y),t.normal.z>0?(e+=t.normal.z*this.min.z,n+=t.normal.z*this.max.z):(e+=t.normal.z*this.max.z,n+=t.normal.z*this.min.z),e<=-t.constant&&n>=-t.constant}intersectsTriangle(t){if(this.isEmpty())return!1;this.getCenter(ye),xe.subVectors(this.max,ye),de.subVectors(t.a,ye),pe.subVectors(t.b,ye),me.subVectors(t.c,ye),fe.subVectors(pe,de),ge.subVectors(me,pe),ve.subVectors(de,me);let e=[0,-fe.z,fe.y,0,-ge.z,ge.y,0,-ve.z,ve.y,fe.z,0,-fe.x,ge.z,0,-ge.x,ve.z,0,-ve.x,-fe.y,fe.x,0,-ge.y,ge.x,0,-ve.y,ve.x,0];return!!Me(e,de,pe,me,xe)&&(e=[1,0,0,0,1,0,0,0,1],!!Me(e,de,pe,me,xe)&&(_e.crossVectors(fe,ge),e=[_e.x,_e.y,_e.z],Me(e,de,pe,me,xe)))}clampPoint(t,e){return e.copy(t).clamp(this.min,this.max)}distanceToPoint(t){return he.copy(t).clamp(this.min,this.max).sub(t).length()}getBoundingSphere(t){return this.getCenter(t.center),t.radius=.5*this.getSize(he).length(),t}intersect(t){return this.min.max(t.min),this.max.min(t.max),this.isEmpty()&&this.makeEmpty(),this}union(t){return this.min.min(t.min),this.max.max(t.max),this}applyMatrix4(t){return this.isEmpty()||(ce[0].set(this.min.x,this.min.y,this.min.z).applyMatrix4(t),ce[1].set(this.min.x,this.min.y,this.max.z).applyMatrix4(t),ce[2].set(this.min.x,this.max.y,this.min.z).applyMatrix4(t),ce[3].set(this.min.x,this.max.y,this.max.z).applyMatrix4(t),ce[4].set(this.max.x,this.min.y,this.min.z).applyMatrix4(t),ce[5].set(this.max.x,this.min.y,this.max.z).applyMatrix4(t),ce[6].set(this.max.x,this.max.y,this.min.z).applyMatrix4(t),ce[7].set(this.max.x,this.max.y,this.max.z).applyMatrix4(t),this.setFromPoints(ce)),this}translate(t){return this.min.add(t),this.max.add(t),this}equals(t){return t.min.equals(this.min)&&t.max.equals(this.max)}}le.prototype.isBox3=!0;const ce=[new se,new se,new se,new se,new se,new se,new se,new se],he=new se,ue=new le,de=new se,pe=new se,me=new se,fe=new se,ge=new se,ve=new se,ye=new se,xe=new se,_e=new se,be=new se;function Me(t,e,n,i,r){for(let s=0,a=t.length-3;s<=a;s+=3){be.fromArray(t,s);const a=r.x*Math.abs(be.x)+r.y*Math.abs(be.y)+r.z*Math.abs(be.z),o=e.dot(be),l=n.dot(be),c=i.dot(be);if(Math.max(-Math.max(o,l,c),Math.min(o,l,c))>a)return!1}return!0}const we=new le,Se=new se,Te=new se,Ee=new se;class Ae{constructor(t=new se,e=-1){this.center=t,this.radius=e}set(t,e){return this.center.copy(t),this.radius=e,this}setFromPoints(t,e){const n=this.center;void 0!==e?n.copy(e):we.setFromPoints(t).getCenter(n);let i=0;for(let e=0,r=t.length;ethis.radius*this.radius&&(e.sub(this.center).normalize(),e.multiplyScalar(this.radius).add(this.center)),e}getBoundingBox(t){return this.isEmpty()?(t.makeEmpty(),t):(t.set(this.center,this.center),t.expandByScalar(this.radius),t)}applyMatrix4(t){return this.center.applyMatrix4(t),this.radius=this.radius*t.getMaxScaleOnAxis(),this}translate(t){return this.center.add(t),this}expandByPoint(t){Ee.subVectors(t,this.center);const e=Ee.lengthSq();if(e>this.radius*this.radius){const t=Math.sqrt(e),n=.5*(t-this.radius);this.center.add(Ee.multiplyScalar(n/t)),this.radius+=n}return this}union(t){return!0===this.center.equals(t.center)?Te.set(0,0,1).multiplyScalar(t.radius):Te.subVectors(t.center,this.center).normalize().multiplyScalar(t.radius),this.expandByPoint(Se.copy(t.center).add(Te)),this.expandByPoint(Se.copy(t.center).sub(Te)),this}equals(t){return t.center.equals(this.center)&&t.radius===this.radius}clone(){return(new this.constructor).copy(this)}}const Re=new se,Ce=new se,Le=new se,Pe=new se,De=new se,Ie=new se,Ne=new se;class Be{constructor(t=new se,e=new se(0,0,-1)){this.origin=t,this.direction=e}set(t,e){return this.origin.copy(t),this.direction.copy(e),this}copy(t){return this.origin.copy(t.origin),this.direction.copy(t.direction),this}at(t,e){return e.copy(this.direction).multiplyScalar(t).add(this.origin)}lookAt(t){return this.direction.copy(t).sub(this.origin).normalize(),this}recast(t){return this.origin.copy(this.at(t,Re)),this}closestPointToPoint(t,e){e.subVectors(t,this.origin);const n=e.dot(this.direction);return n<0?e.copy(this.origin):e.copy(this.direction).multiplyScalar(n).add(this.origin)}distanceToPoint(t){return Math.sqrt(this.distanceSqToPoint(t))}distanceSqToPoint(t){const e=Re.subVectors(t,this.origin).dot(this.direction);return e<0?this.origin.distanceToSquared(t):(Re.copy(this.direction).multiplyScalar(e).add(this.origin),Re.distanceToSquared(t))}distanceSqToSegment(t,e,n,i){Ce.copy(t).add(e).multiplyScalar(.5),Le.copy(e).sub(t).normalize(),Pe.copy(this.origin).sub(Ce);const r=.5*t.distanceTo(e),s=-this.direction.dot(Le),a=Pe.dot(this.direction),o=-Pe.dot(Le),l=Pe.lengthSq(),c=Math.abs(1-s*s);let h,u,d,p;if(c>0)if(h=s*o-a,u=s*a-o,p=r*c,h>=0)if(u>=-p)if(u<=p){const t=1/c;h*=t,u*=t,d=h*(h+s*u+2*a)+u*(s*h+u+2*o)+l}else u=r,h=Math.max(0,-(s*u+a)),d=-h*h+u*(u+2*o)+l;else u=-r,h=Math.max(0,-(s*u+a)),d=-h*h+u*(u+2*o)+l;else u<=-p?(h=Math.max(0,-(-s*r+a)),u=h>0?-r:Math.min(Math.max(-r,-o),r),d=-h*h+u*(u+2*o)+l):u<=p?(h=0,u=Math.min(Math.max(-r,-o),r),d=u*(u+2*o)+l):(h=Math.max(0,-(s*r+a)),u=h>0?r:Math.min(Math.max(-r,-o),r),d=-h*h+u*(u+2*o)+l);else u=s>0?-r:r,h=Math.max(0,-(s*u+a)),d=-h*h+u*(u+2*o)+l;return n&&n.copy(this.direction).multiplyScalar(h).add(this.origin),i&&i.copy(Le).multiplyScalar(u).add(Ce),d}intersectSphere(t,e){Re.subVectors(t.center,this.origin);const n=Re.dot(this.direction),i=Re.dot(Re)-n*n,r=t.radius*t.radius;if(i>r)return null;const s=Math.sqrt(r-i),a=n-s,o=n+s;return a<0&&o<0?null:a<0?this.at(o,e):this.at(a,e)}intersectsSphere(t){return this.distanceSqToPoint(t.center)<=t.radius*t.radius}distanceToPlane(t){const e=t.normal.dot(this.direction);if(0===e)return 0===t.distanceToPoint(this.origin)?0:null;const n=-(this.origin.dot(t.normal)+t.constant)/e;return n>=0?n:null}intersectPlane(t,e){const n=this.distanceToPlane(t);return null===n?null:this.at(n,e)}intersectsPlane(t){const e=t.distanceToPoint(this.origin);if(0===e)return!0;return t.normal.dot(this.direction)*e<0}intersectBox(t,e){let n,i,r,s,a,o;const l=1/this.direction.x,c=1/this.direction.y,h=1/this.direction.z,u=this.origin;return l>=0?(n=(t.min.x-u.x)*l,i=(t.max.x-u.x)*l):(n=(t.max.x-u.x)*l,i=(t.min.x-u.x)*l),c>=0?(r=(t.min.y-u.y)*c,s=(t.max.y-u.y)*c):(r=(t.max.y-u.y)*c,s=(t.min.y-u.y)*c),n>s||r>i?null:((r>n||n!=n)&&(n=r),(s=0?(a=(t.min.z-u.z)*h,o=(t.max.z-u.z)*h):(a=(t.max.z-u.z)*h,o=(t.min.z-u.z)*h),n>o||a>i?null:((a>n||n!=n)&&(n=a),(o=0?n:i,e)))}intersectsBox(t){return null!==this.intersectBox(t,Re)}intersectTriangle(t,e,n,i,r){De.subVectors(e,t),Ie.subVectors(n,t),Ne.crossVectors(De,Ie);let s,a=this.direction.dot(Ne);if(a>0){if(i)return null;s=1}else{if(!(a<0))return null;s=-1,a=-a}Pe.subVectors(this.origin,t);const o=s*this.direction.dot(Ie.crossVectors(Pe,Ie));if(o<0)return null;const l=s*this.direction.dot(De.cross(Pe));if(l<0)return null;if(o+l>a)return null;const c=-s*Pe.dot(Ne);return c<0?null:this.at(c/a,r)}applyMatrix4(t){return this.origin.applyMatrix4(t),this.direction.transformDirection(t),this}equals(t){return t.origin.equals(this.origin)&&t.direction.equals(this.direction)}clone(){return(new this.constructor).copy(this)}}class ze{constructor(){this.elements=[1,0,0,0,0,1,0,0,0,0,1,0,0,0,0,1],arguments.length>0&&console.error("THREE.Matrix4: the constructor no longer reads arguments. use .set() instead.")}set(t,e,n,i,r,s,a,o,l,c,h,u,d,p,m,f){const g=this.elements;return g[0]=t,g[4]=e,g[8]=n,g[12]=i,g[1]=r,g[5]=s,g[9]=a,g[13]=o,g[2]=l,g[6]=c,g[10]=h,g[14]=u,g[3]=d,g[7]=p,g[11]=m,g[15]=f,this}identity(){return this.set(1,0,0,0,0,1,0,0,0,0,1,0,0,0,0,1),this}clone(){return(new ze).fromArray(this.elements)}copy(t){const e=this.elements,n=t.elements;return e[0]=n[0],e[1]=n[1],e[2]=n[2],e[3]=n[3],e[4]=n[4],e[5]=n[5],e[6]=n[6],e[7]=n[7],e[8]=n[8],e[9]=n[9],e[10]=n[10],e[11]=n[11],e[12]=n[12],e[13]=n[13],e[14]=n[14],e[15]=n[15],this}copyPosition(t){const e=this.elements,n=t.elements;return e[12]=n[12],e[13]=n[13],e[14]=n[14],this}setFromMatrix3(t){const e=t.elements;return this.set(e[0],e[3],e[6],0,e[1],e[4],e[7],0,e[2],e[5],e[8],0,0,0,0,1),this}extractBasis(t,e,n){return t.setFromMatrixColumn(this,0),e.setFromMatrixColumn(this,1),n.setFromMatrixColumn(this,2),this}makeBasis(t,e,n){return this.set(t.x,e.x,n.x,0,t.y,e.y,n.y,0,t.z,e.z,n.z,0,0,0,0,1),this}extractRotation(t){const e=this.elements,n=t.elements,i=1/Oe.setFromMatrixColumn(t,0).length(),r=1/Oe.setFromMatrixColumn(t,1).length(),s=1/Oe.setFromMatrixColumn(t,2).length();return e[0]=n[0]*i,e[1]=n[1]*i,e[2]=n[2]*i,e[3]=0,e[4]=n[4]*r,e[5]=n[5]*r,e[6]=n[6]*r,e[7]=0,e[8]=n[8]*s,e[9]=n[9]*s,e[10]=n[10]*s,e[11]=0,e[12]=0,e[13]=0,e[14]=0,e[15]=1,this}makeRotationFromEuler(t){t&&t.isEuler||console.error("THREE.Matrix4: .makeRotationFromEuler() now expects a Euler rotation rather than a Vector3 and order.");const e=this.elements,n=t.x,i=t.y,r=t.z,s=Math.cos(n),a=Math.sin(n),o=Math.cos(i),l=Math.sin(i),c=Math.cos(r),h=Math.sin(r);if("XYZ"===t.order){const t=s*c,n=s*h,i=a*c,r=a*h;e[0]=o*c,e[4]=-o*h,e[8]=l,e[1]=n+i*l,e[5]=t-r*l,e[9]=-a*o,e[2]=r-t*l,e[6]=i+n*l,e[10]=s*o}else if("YXZ"===t.order){const t=o*c,n=o*h,i=l*c,r=l*h;e[0]=t+r*a,e[4]=i*a-n,e[8]=s*l,e[1]=s*h,e[5]=s*c,e[9]=-a,e[2]=n*a-i,e[6]=r+t*a,e[10]=s*o}else if("ZXY"===t.order){const t=o*c,n=o*h,i=l*c,r=l*h;e[0]=t-r*a,e[4]=-s*h,e[8]=i+n*a,e[1]=n+i*a,e[5]=s*c,e[9]=r-t*a,e[2]=-s*l,e[6]=a,e[10]=s*o}else if("ZYX"===t.order){const t=s*c,n=s*h,i=a*c,r=a*h;e[0]=o*c,e[4]=i*l-n,e[8]=t*l+r,e[1]=o*h,e[5]=r*l+t,e[9]=n*l-i,e[2]=-l,e[6]=a*o,e[10]=s*o}else if("YZX"===t.order){const t=s*o,n=s*l,i=a*o,r=a*l;e[0]=o*c,e[4]=r-t*h,e[8]=i*h+n,e[1]=h,e[5]=s*c,e[9]=-a*c,e[2]=-l*c,e[6]=n*h+i,e[10]=t-r*h}else if("XZY"===t.order){const t=s*o,n=s*l,i=a*o,r=a*l;e[0]=o*c,e[4]=-h,e[8]=l*c,e[1]=t*h+r,e[5]=s*c,e[9]=n*h-i,e[2]=i*h-n,e[6]=a*c,e[10]=r*h+t}return e[3]=0,e[7]=0,e[11]=0,e[12]=0,e[13]=0,e[14]=0,e[15]=1,this}makeRotationFromQuaternion(t){return this.compose(Fe,t,He)}lookAt(t,e,n){const i=this.elements;return Ve.subVectors(t,e),0===Ve.lengthSq()&&(Ve.z=1),Ve.normalize(),Ge.crossVectors(n,Ve),0===Ge.lengthSq()&&(1===Math.abs(n.z)?Ve.x+=1e-4:Ve.z+=1e-4,Ve.normalize(),Ge.crossVectors(n,Ve)),Ge.normalize(),ke.crossVectors(Ve,Ge),i[0]=Ge.x,i[4]=ke.x,i[8]=Ve.x,i[1]=Ge.y,i[5]=ke.y,i[9]=Ve.y,i[2]=Ge.z,i[6]=ke.z,i[10]=Ve.z,this}multiply(t,e){return void 0!==e?(console.warn("THREE.Matrix4: .multiply() now only accepts one argument. Use .multiplyMatrices( a, b ) instead."),this.multiplyMatrices(t,e)):this.multiplyMatrices(this,t)}premultiply(t){return this.multiplyMatrices(t,this)}multiplyMatrices(t,e){const n=t.elements,i=e.elements,r=this.elements,s=n[0],a=n[4],o=n[8],l=n[12],c=n[1],h=n[5],u=n[9],d=n[13],p=n[2],m=n[6],f=n[10],g=n[14],v=n[3],y=n[7],x=n[11],_=n[15],b=i[0],M=i[4],w=i[8],S=i[12],T=i[1],E=i[5],A=i[9],R=i[13],C=i[2],L=i[6],P=i[10],D=i[14],I=i[3],N=i[7],B=i[11],z=i[15];return r[0]=s*b+a*T+o*C+l*I,r[4]=s*M+a*E+o*L+l*N,r[8]=s*w+a*A+o*P+l*B,r[12]=s*S+a*R+o*D+l*z,r[1]=c*b+h*T+u*C+d*I,r[5]=c*M+h*E+u*L+d*N,r[9]=c*w+h*A+u*P+d*B,r[13]=c*S+h*R+u*D+d*z,r[2]=p*b+m*T+f*C+g*I,r[6]=p*M+m*E+f*L+g*N,r[10]=p*w+m*A+f*P+g*B,r[14]=p*S+m*R+f*D+g*z,r[3]=v*b+y*T+x*C+_*I,r[7]=v*M+y*E+x*L+_*N,r[11]=v*w+y*A+x*P+_*B,r[15]=v*S+y*R+x*D+_*z,this}multiplyScalar(t){const e=this.elements;return e[0]*=t,e[4]*=t,e[8]*=t,e[12]*=t,e[1]*=t,e[5]*=t,e[9]*=t,e[13]*=t,e[2]*=t,e[6]*=t,e[10]*=t,e[14]*=t,e[3]*=t,e[7]*=t,e[11]*=t,e[15]*=t,this}determinant(){const t=this.elements,e=t[0],n=t[4],i=t[8],r=t[12],s=t[1],a=t[5],o=t[9],l=t[13],c=t[2],h=t[6],u=t[10],d=t[14];return t[3]*(+r*o*h-i*l*h-r*a*u+n*l*u+i*a*d-n*o*d)+t[7]*(+e*o*d-e*l*u+r*s*u-i*s*d+i*l*c-r*o*c)+t[11]*(+e*l*h-e*a*d-r*s*h+n*s*d+r*a*c-n*l*c)+t[15]*(-i*a*c-e*o*h+e*a*u+i*s*h-n*s*u+n*o*c)}transpose(){const t=this.elements;let e;return e=t[1],t[1]=t[4],t[4]=e,e=t[2],t[2]=t[8],t[8]=e,e=t[6],t[6]=t[9],t[9]=e,e=t[3],t[3]=t[12],t[12]=e,e=t[7],t[7]=t[13],t[13]=e,e=t[11],t[11]=t[14],t[14]=e,this}setPosition(t,e,n){const i=this.elements;return t.isVector3?(i[12]=t.x,i[13]=t.y,i[14]=t.z):(i[12]=t,i[13]=e,i[14]=n),this}invert(){const t=this.elements,e=t[0],n=t[1],i=t[2],r=t[3],s=t[4],a=t[5],o=t[6],l=t[7],c=t[8],h=t[9],u=t[10],d=t[11],p=t[12],m=t[13],f=t[14],g=t[15],v=h*f*l-m*u*l+m*o*d-a*f*d-h*o*g+a*u*g,y=p*u*l-c*f*l-p*o*d+s*f*d+c*o*g-s*u*g,x=c*m*l-p*h*l+p*a*d-s*m*d-c*a*g+s*h*g,_=p*h*o-c*m*o-p*a*u+s*m*u+c*a*f-s*h*f,b=e*v+n*y+i*x+r*_;if(0===b)return this.set(0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0);const M=1/b;return t[0]=v*M,t[1]=(m*u*r-h*f*r-m*i*d+n*f*d+h*i*g-n*u*g)*M,t[2]=(a*f*r-m*o*r+m*i*l-n*f*l-a*i*g+n*o*g)*M,t[3]=(h*o*r-a*u*r-h*i*l+n*u*l+a*i*d-n*o*d)*M,t[4]=y*M,t[5]=(c*f*r-p*u*r+p*i*d-e*f*d-c*i*g+e*u*g)*M,t[6]=(p*o*r-s*f*r-p*i*l+e*f*l+s*i*g-e*o*g)*M,t[7]=(s*u*r-c*o*r+c*i*l-e*u*l-s*i*d+e*o*d)*M,t[8]=x*M,t[9]=(p*h*r-c*m*r-p*n*d+e*m*d+c*n*g-e*h*g)*M,t[10]=(s*m*r-p*a*r+p*n*l-e*m*l-s*n*g+e*a*g)*M,t[11]=(c*a*r-s*h*r-c*n*l+e*h*l+s*n*d-e*a*d)*M,t[12]=_*M,t[13]=(c*m*i-p*h*i+p*n*u-e*m*u-c*n*f+e*h*f)*M,t[14]=(p*a*i-s*m*i-p*n*o+e*m*o+s*n*f-e*a*f)*M,t[15]=(s*h*i-c*a*i+c*n*o-e*h*o-s*n*u+e*a*u)*M,this}scale(t){const e=this.elements,n=t.x,i=t.y,r=t.z;return e[0]*=n,e[4]*=i,e[8]*=r,e[1]*=n,e[5]*=i,e[9]*=r,e[2]*=n,e[6]*=i,e[10]*=r,e[3]*=n,e[7]*=i,e[11]*=r,this}getMaxScaleOnAxis(){const t=this.elements,e=t[0]*t[0]+t[1]*t[1]+t[2]*t[2],n=t[4]*t[4]+t[5]*t[5]+t[6]*t[6],i=t[8]*t[8]+t[9]*t[9]+t[10]*t[10];return Math.sqrt(Math.max(e,n,i))}makeTranslation(t,e,n){return this.set(1,0,0,t,0,1,0,e,0,0,1,n,0,0,0,1),this}makeRotationX(t){const e=Math.cos(t),n=Math.sin(t);return this.set(1,0,0,0,0,e,-n,0,0,n,e,0,0,0,0,1),this}makeRotationY(t){const e=Math.cos(t),n=Math.sin(t);return this.set(e,0,n,0,0,1,0,0,-n,0,e,0,0,0,0,1),this}makeRotationZ(t){const e=Math.cos(t),n=Math.sin(t);return this.set(e,-n,0,0,n,e,0,0,0,0,1,0,0,0,0,1),this}makeRotationAxis(t,e){const n=Math.cos(e),i=Math.sin(e),r=1-n,s=t.x,a=t.y,o=t.z,l=r*s,c=r*a;return this.set(l*s+n,l*a-i*o,l*o+i*a,0,l*a+i*o,c*a+n,c*o-i*s,0,l*o-i*a,c*o+i*s,r*o*o+n,0,0,0,0,1),this}makeScale(t,e,n){return this.set(t,0,0,0,0,e,0,0,0,0,n,0,0,0,0,1),this}makeShear(t,e,n,i,r,s){return this.set(1,n,r,0,t,1,s,0,e,i,1,0,0,0,0,1),this}compose(t,e,n){const i=this.elements,r=e._x,s=e._y,a=e._z,o=e._w,l=r+r,c=s+s,h=a+a,u=r*l,d=r*c,p=r*h,m=s*c,f=s*h,g=a*h,v=o*l,y=o*c,x=o*h,_=n.x,b=n.y,M=n.z;return i[0]=(1-(m+g))*_,i[1]=(d+x)*_,i[2]=(p-y)*_,i[3]=0,i[4]=(d-x)*b,i[5]=(1-(u+g))*b,i[6]=(f+v)*b,i[7]=0,i[8]=(p+y)*M,i[9]=(f-v)*M,i[10]=(1-(u+m))*M,i[11]=0,i[12]=t.x,i[13]=t.y,i[14]=t.z,i[15]=1,this}decompose(t,e,n){const i=this.elements;let r=Oe.set(i[0],i[1],i[2]).length();const s=Oe.set(i[4],i[5],i[6]).length(),a=Oe.set(i[8],i[9],i[10]).length();this.determinant()<0&&(r=-r),t.x=i[12],t.y=i[13],t.z=i[14],Ue.copy(this);const o=1/r,l=1/s,c=1/a;return Ue.elements[0]*=o,Ue.elements[1]*=o,Ue.elements[2]*=o,Ue.elements[4]*=l,Ue.elements[5]*=l,Ue.elements[6]*=l,Ue.elements[8]*=c,Ue.elements[9]*=c,Ue.elements[10]*=c,e.setFromRotationMatrix(Ue),n.x=r,n.y=s,n.z=a,this}makePerspective(t,e,n,i,r,s){void 0===s&&console.warn("THREE.Matrix4: .makePerspective() has been redefined and has a new signature. Please check the docs.");const a=this.elements,o=2*r/(e-t),l=2*r/(n-i),c=(e+t)/(e-t),h=(n+i)/(n-i),u=-(s+r)/(s-r),d=-2*s*r/(s-r);return a[0]=o,a[4]=0,a[8]=c,a[12]=0,a[1]=0,a[5]=l,a[9]=h,a[13]=0,a[2]=0,a[6]=0,a[10]=u,a[14]=d,a[3]=0,a[7]=0,a[11]=-1,a[15]=0,this}makeOrthographic(t,e,n,i,r,s){const a=this.elements,o=1/(e-t),l=1/(n-i),c=1/(s-r),h=(e+t)*o,u=(n+i)*l,d=(s+r)*c;return a[0]=2*o,a[4]=0,a[8]=0,a[12]=-h,a[1]=0,a[5]=2*l,a[9]=0,a[13]=-u,a[2]=0,a[6]=0,a[10]=-2*c,a[14]=-d,a[3]=0,a[7]=0,a[11]=0,a[15]=1,this}equals(t){const e=this.elements,n=t.elements;for(let t=0;t<16;t++)if(e[t]!==n[t])return!1;return!0}fromArray(t,e=0){for(let n=0;n<16;n++)this.elements[n]=t[n+e];return this}toArray(t=[],e=0){const n=this.elements;return t[e]=n[0],t[e+1]=n[1],t[e+2]=n[2],t[e+3]=n[3],t[e+4]=n[4],t[e+5]=n[5],t[e+6]=n[6],t[e+7]=n[7],t[e+8]=n[8],t[e+9]=n[9],t[e+10]=n[10],t[e+11]=n[11],t[e+12]=n[12],t[e+13]=n[13],t[e+14]=n[14],t[e+15]=n[15],t}}ze.prototype.isMatrix4=!0;const Oe=new se,Ue=new ze,Fe=new se(0,0,0),He=new se(1,1,1),Ge=new se,ke=new se,Ve=new se,We=new ze,je=new re;class qe{constructor(t=0,e=0,n=0,i=qe.DefaultOrder){this._x=t,this._y=e,this._z=n,this._order=i}get x(){return this._x}set x(t){this._x=t,this._onChangeCallback()}get y(){return this._y}set y(t){this._y=t,this._onChangeCallback()}get z(){return this._z}set z(t){this._z=t,this._onChangeCallback()}get order(){return this._order}set order(t){this._order=t,this._onChangeCallback()}set(t,e,n,i=this._order){return this._x=t,this._y=e,this._z=n,this._order=i,this._onChangeCallback(),this}clone(){return new this.constructor(this._x,this._y,this._z,this._order)}copy(t){return this._x=t._x,this._y=t._y,this._z=t._z,this._order=t._order,this._onChangeCallback(),this}setFromRotationMatrix(t,e=this._order,n=!0){const i=t.elements,r=i[0],s=i[4],a=i[8],o=i[1],l=i[5],c=i[9],h=i[2],u=i[6],d=i[10];switch(e){case"XYZ":this._y=Math.asin(bt(a,-1,1)),Math.abs(a)<.9999999?(this._x=Math.atan2(-c,d),this._z=Math.atan2(-s,r)):(this._x=Math.atan2(u,l),this._z=0);break;case"YXZ":this._x=Math.asin(-bt(c,-1,1)),Math.abs(c)<.9999999?(this._y=Math.atan2(a,d),this._z=Math.atan2(o,l)):(this._y=Math.atan2(-h,r),this._z=0);break;case"ZXY":this._x=Math.asin(bt(u,-1,1)),Math.abs(u)<.9999999?(this._y=Math.atan2(-h,d),this._z=Math.atan2(-s,l)):(this._y=0,this._z=Math.atan2(o,r));break;case"ZYX":this._y=Math.asin(-bt(h,-1,1)),Math.abs(h)<.9999999?(this._x=Math.atan2(u,d),this._z=Math.atan2(o,r)):(this._x=0,this._z=Math.atan2(-s,l));break;case"YZX":this._z=Math.asin(bt(o,-1,1)),Math.abs(o)<.9999999?(this._x=Math.atan2(-c,l),this._y=Math.atan2(-h,r)):(this._x=0,this._y=Math.atan2(a,d));break;case"XZY":this._z=Math.asin(-bt(s,-1,1)),Math.abs(s)<.9999999?(this._x=Math.atan2(u,l),this._y=Math.atan2(a,r)):(this._x=Math.atan2(-c,d),this._y=0);break;default:console.warn("THREE.Euler: .setFromRotationMatrix() encountered an unknown order: "+e)}return this._order=e,!0===n&&this._onChangeCallback(),this}setFromQuaternion(t,e,n){return We.makeRotationFromQuaternion(t),this.setFromRotationMatrix(We,e,n)}setFromVector3(t,e=this._order){return this.set(t.x,t.y,t.z,e)}reorder(t){return je.setFromEuler(this),this.setFromQuaternion(je,t)}equals(t){return t._x===this._x&&t._y===this._y&&t._z===this._z&&t._order===this._order}fromArray(t){return this._x=t[0],this._y=t[1],this._z=t[2],void 0!==t[3]&&(this._order=t[3]),this._onChangeCallback(),this}toArray(t=[],e=0){return t[e]=this._x,t[e+1]=this._y,t[e+2]=this._z,t[e+3]=this._order,t}_onChange(t){return this._onChangeCallback=t,this}_onChangeCallback(){}*[Symbol.iterator](){yield this._x,yield this._y,yield this._z,yield this._order}}qe.prototype.isEuler=!0,qe.DefaultOrder="XYZ",qe.RotationOrders=["XYZ","YZX","ZXY","XZY","YXZ","ZYX"];class Xe{constructor(){this.mask=1}set(t){this.mask=(1<>>0}enable(t){this.mask|=1<1){for(let t=0;t1){for(let t=0;t0){i.children=[];for(let e=0;e0){i.animations=[];for(let e=0;e0&&(n.geometries=e),i.length>0&&(n.materials=i),r.length>0&&(n.textures=r),a.length>0&&(n.images=a),o.length>0&&(n.shapes=o),l.length>0&&(n.skeletons=l),c.length>0&&(n.animations=c),h.length>0&&(n.nodes=h)}return n.object=i,n;function s(t){const e=[];for(const n in t){const i=t[n];delete i.metadata,e.push(i)}return e}}clone(t){return(new this.constructor).copy(this,t)}copy(t,e=!0){if(this.name=t.name,this.up.copy(t.up),this.position.copy(t.position),this.rotation.order=t.rotation.order,this.quaternion.copy(t.quaternion),this.scale.copy(t.scale),this.matrix.copy(t.matrix),this.matrixWorld.copy(t.matrixWorld),this.matrixAutoUpdate=t.matrixAutoUpdate,this.matrixWorldNeedsUpdate=t.matrixWorldNeedsUpdate,this.layers.mask=t.layers.mask,this.visible=t.visible,this.castShadow=t.castShadow,this.receiveShadow=t.receiveShadow,this.frustumCulled=t.frustumCulled,this.renderOrder=t.renderOrder,this.userData=JSON.parse(JSON.stringify(t.userData)),!0===e)for(let e=0;e0?i.multiplyScalar(1/Math.sqrt(r)):i.set(0,0,0)}static getBarycoord(t,e,n,i,r){cn.subVectors(i,e),hn.subVectors(n,e),un.subVectors(t,e);const s=cn.dot(cn),a=cn.dot(hn),o=cn.dot(un),l=hn.dot(hn),c=hn.dot(un),h=s*l-a*a;if(0===h)return r.set(-2,-1,-1);const u=1/h,d=(l*o-a*c)*u,p=(s*c-a*o)*u;return r.set(1-d-p,p,d)}static containsPoint(t,e,n,i){return this.getBarycoord(t,e,n,i,dn),dn.x>=0&&dn.y>=0&&dn.x+dn.y<=1}static getUV(t,e,n,i,r,s,a,o){return this.getBarycoord(t,e,n,i,dn),o.set(0,0),o.addScaledVector(r,dn.x),o.addScaledVector(s,dn.y),o.addScaledVector(a,dn.z),o}static isFrontFacing(t,e,n,i){return cn.subVectors(n,e),hn.subVectors(t,e),cn.cross(hn).dot(i)<0}set(t,e,n){return this.a.copy(t),this.b.copy(e),this.c.copy(n),this}setFromPointsAndIndices(t,e,n,i){return this.a.copy(t[e]),this.b.copy(t[n]),this.c.copy(t[i]),this}setFromAttributeAndIndices(t,e,n,i){return this.a.fromBufferAttribute(t,e),this.b.fromBufferAttribute(t,n),this.c.fromBufferAttribute(t,i),this}clone(){return(new this.constructor).copy(this)}copy(t){return this.a.copy(t.a),this.b.copy(t.b),this.c.copy(t.c),this}getArea(){return cn.subVectors(this.c,this.b),hn.subVectors(this.a,this.b),.5*cn.cross(hn).length()}getMidpoint(t){return t.addVectors(this.a,this.b).add(this.c).multiplyScalar(1/3)}getNormal(t){return xn.getNormal(this.a,this.b,this.c,t)}getPlane(t){return t.setFromCoplanarPoints(this.a,this.b,this.c)}getBarycoord(t,e){return xn.getBarycoord(t,this.a,this.b,this.c,e)}getUV(t,e,n,i,r){return xn.getUV(t,this.a,this.b,this.c,e,n,i,r)}containsPoint(t){return xn.containsPoint(t,this.a,this.b,this.c)}isFrontFacing(t){return xn.isFrontFacing(this.a,this.b,this.c,t)}intersectsBox(t){return t.intersectsTriangle(this)}closestPointToPoint(t,e){const n=this.a,i=this.b,r=this.c;let s,a;pn.subVectors(i,n),mn.subVectors(r,n),gn.subVectors(t,n);const o=pn.dot(gn),l=mn.dot(gn);if(o<=0&&l<=0)return e.copy(n);vn.subVectors(t,i);const c=pn.dot(vn),h=mn.dot(vn);if(c>=0&&h<=c)return e.copy(i);const u=o*h-c*l;if(u<=0&&o>=0&&c<=0)return s=o/(o-c),e.copy(n).addScaledVector(pn,s);yn.subVectors(t,r);const d=pn.dot(yn),p=mn.dot(yn);if(p>=0&&d<=p)return e.copy(r);const m=d*l-o*p;if(m<=0&&l>=0&&p<=0)return a=l/(l-p),e.copy(n).addScaledVector(mn,a);const f=c*p-d*h;if(f<=0&&h-c>=0&&d-p>=0)return fn.subVectors(r,i),a=(h-c)/(h-c+(d-p)),e.copy(i).addScaledVector(fn,a);const g=1/(f+m+u);return s=m*g,a=u*g,e.copy(n).addScaledVector(pn,s).addScaledVector(mn,a)}equals(t){return t.a.equals(this.a)&&t.b.equals(this.b)&&t.c.equals(this.c)}}let _n=0;class bn extends ft{constructor(){super(),Object.defineProperty(this,"id",{value:_n++}),this.uuid=_t(),this.name="",this.type="Material",this.blending=1,this.side=0,this.vertexColors=!1,this.opacity=1,this.transparent=!1,this.blendSrc=204,this.blendDst=205,this.blendEquation=n,this.blendSrcAlpha=null,this.blendDstAlpha=null,this.blendEquationAlpha=null,this.depthFunc=3,this.depthTest=!0,this.depthWrite=!0,this.stencilWriteMask=255,this.stencilFunc=519,this.stencilRef=0,this.stencilFuncMask=255,this.stencilFail=ht,this.stencilZFail=ht,this.stencilZPass=ht,this.stencilWrite=!1,this.clippingPlanes=null,this.clipIntersection=!1,this.clipShadows=!1,this.shadowSide=null,this.colorWrite=!0,this.precision=null,this.polygonOffset=!1,this.polygonOffsetFactor=0,this.polygonOffsetUnits=0,this.dithering=!1,this.alphaToCoverage=!1,this.premultipliedAlpha=!1,this.visible=!0,this.toneMapped=!0,this.userData={},this.version=0,this._alphaTest=0}get alphaTest(){return this._alphaTest}set alphaTest(t){this._alphaTest>0!=t>0&&this.version++,this._alphaTest=t}onBuild(){}onBeforeRender(){}onBeforeCompile(){}customProgramCacheKey(){return this.onBeforeCompile.toString()}setValues(t){if(void 0!==t)for(const e in t){const n=t[e];if(void 0===n){console.warn("THREE.Material: '"+e+"' parameter is undefined.");continue}if("shading"===e){console.warn("THREE."+this.type+": .shading has been removed. Use the boolean .flatShading instead."),this.flatShading=1===n;continue}const i=this[e];void 0!==i?i&&i.isColor?i.set(n):i&&i.isVector3&&n&&n.isVector3?i.copy(n):this[e]=n:console.warn("THREE."+this.type+": '"+e+"' is not a property of this material.")}}toJSON(t){const e=void 0===t||"string"==typeof t;e&&(t={textures:{},images:{}});const n={metadata:{version:4.5,type:"Material",generator:"Material.toJSON"}};function i(t){const e=[];for(const n in t){const i=t[n];delete i.metadata,e.push(i)}return e}if(n.uuid=this.uuid,n.type=this.type,""!==this.name&&(n.name=this.name),this.color&&this.color.isColor&&(n.color=this.color.getHex()),void 0!==this.roughness&&(n.roughness=this.roughness),void 0!==this.metalness&&(n.metalness=this.metalness),void 0!==this.sheen&&(n.sheen=this.sheen),this.sheenColor&&this.sheenColor.isColor&&(n.sheenColor=this.sheenColor.getHex()),void 0!==this.sheenRoughness&&(n.sheenRoughness=this.sheenRoughness),this.emissive&&this.emissive.isColor&&(n.emissive=this.emissive.getHex()),this.emissiveIntensity&&1!==this.emissiveIntensity&&(n.emissiveIntensity=this.emissiveIntensity),this.specular&&this.specular.isColor&&(n.specular=this.specular.getHex()),void 0!==this.specularIntensity&&(n.specularIntensity=this.specularIntensity),this.specularColor&&this.specularColor.isColor&&(n.specularColor=this.specularColor.getHex()),void 0!==this.shininess&&(n.shininess=this.shininess),void 0!==this.clearcoat&&(n.clearcoat=this.clearcoat),void 0!==this.clearcoatRoughness&&(n.clearcoatRoughness=this.clearcoatRoughness),this.clearcoatMap&&this.clearcoatMap.isTexture&&(n.clearcoatMap=this.clearcoatMap.toJSON(t).uuid),this.clearcoatRoughnessMap&&this.clearcoatRoughnessMap.isTexture&&(n.clearcoatRoughnessMap=this.clearcoatRoughnessMap.toJSON(t).uuid),this.clearcoatNormalMap&&this.clearcoatNormalMap.isTexture&&(n.clearcoatNormalMap=this.clearcoatNormalMap.toJSON(t).uuid,n.clearcoatNormalScale=this.clearcoatNormalScale.toArray()),this.map&&this.map.isTexture&&(n.map=this.map.toJSON(t).uuid),this.matcap&&this.matcap.isTexture&&(n.matcap=this.matcap.toJSON(t).uuid),this.alphaMap&&this.alphaMap.isTexture&&(n.alphaMap=this.alphaMap.toJSON(t).uuid),this.lightMap&&this.lightMap.isTexture&&(n.lightMap=this.lightMap.toJSON(t).uuid,n.lightMapIntensity=this.lightMapIntensity),this.aoMap&&this.aoMap.isTexture&&(n.aoMap=this.aoMap.toJSON(t).uuid,n.aoMapIntensity=this.aoMapIntensity),this.bumpMap&&this.bumpMap.isTexture&&(n.bumpMap=this.bumpMap.toJSON(t).uuid,n.bumpScale=this.bumpScale),this.normalMap&&this.normalMap.isTexture&&(n.normalMap=this.normalMap.toJSON(t).uuid,n.normalMapType=this.normalMapType,n.normalScale=this.normalScale.toArray()),this.displacementMap&&this.displacementMap.isTexture&&(n.displacementMap=this.displacementMap.toJSON(t).uuid,n.displacementScale=this.displacementScale,n.displacementBias=this.displacementBias),this.roughnessMap&&this.roughnessMap.isTexture&&(n.roughnessMap=this.roughnessMap.toJSON(t).uuid),this.metalnessMap&&this.metalnessMap.isTexture&&(n.metalnessMap=this.metalnessMap.toJSON(t).uuid),this.emissiveMap&&this.emissiveMap.isTexture&&(n.emissiveMap=this.emissiveMap.toJSON(t).uuid),this.specularMap&&this.specularMap.isTexture&&(n.specularMap=this.specularMap.toJSON(t).uuid),this.specularIntensityMap&&this.specularIntensityMap.isTexture&&(n.specularIntensityMap=this.specularIntensityMap.toJSON(t).uuid),this.specularColorMap&&this.specularColorMap.isTexture&&(n.specularColorMap=this.specularColorMap.toJSON(t).uuid),this.envMap&&this.envMap.isTexture&&(n.envMap=this.envMap.toJSON(t).uuid,void 0!==this.combine&&(n.combine=this.combine)),void 0!==this.envMapIntensity&&(n.envMapIntensity=this.envMapIntensity),void 0!==this.reflectivity&&(n.reflectivity=this.reflectivity),void 0!==this.refractionRatio&&(n.refractionRatio=this.refractionRatio),this.gradientMap&&this.gradientMap.isTexture&&(n.gradientMap=this.gradientMap.toJSON(t).uuid),void 0!==this.transmission&&(n.transmission=this.transmission),this.transmissionMap&&this.transmissionMap.isTexture&&(n.transmissionMap=this.transmissionMap.toJSON(t).uuid),void 0!==this.thickness&&(n.thickness=this.thickness),this.thicknessMap&&this.thicknessMap.isTexture&&(n.thicknessMap=this.thicknessMap.toJSON(t).uuid),void 0!==this.attenuationDistance&&(n.attenuationDistance=this.attenuationDistance),void 0!==this.attenuationColor&&(n.attenuationColor=this.attenuationColor.getHex()),void 0!==this.size&&(n.size=this.size),null!==this.shadowSide&&(n.shadowSide=this.shadowSide),void 0!==this.sizeAttenuation&&(n.sizeAttenuation=this.sizeAttenuation),1!==this.blending&&(n.blending=this.blending),0!==this.side&&(n.side=this.side),this.vertexColors&&(n.vertexColors=!0),this.opacity<1&&(n.opacity=this.opacity),!0===this.transparent&&(n.transparent=this.transparent),n.depthFunc=this.depthFunc,n.depthTest=this.depthTest,n.depthWrite=this.depthWrite,n.colorWrite=this.colorWrite,n.stencilWrite=this.stencilWrite,n.stencilWriteMask=this.stencilWriteMask,n.stencilFunc=this.stencilFunc,n.stencilRef=this.stencilRef,n.stencilFuncMask=this.stencilFuncMask,n.stencilFail=this.stencilFail,n.stencilZFail=this.stencilZFail,n.stencilZPass=this.stencilZPass,void 0!==this.rotation&&0!==this.rotation&&(n.rotation=this.rotation),!0===this.polygonOffset&&(n.polygonOffset=!0),0!==this.polygonOffsetFactor&&(n.polygonOffsetFactor=this.polygonOffsetFactor),0!==this.polygonOffsetUnits&&(n.polygonOffsetUnits=this.polygonOffsetUnits),void 0!==this.linewidth&&1!==this.linewidth&&(n.linewidth=this.linewidth),void 0!==this.dashSize&&(n.dashSize=this.dashSize),void 0!==this.gapSize&&(n.gapSize=this.gapSize),void 0!==this.scale&&(n.scale=this.scale),!0===this.dithering&&(n.dithering=!0),this.alphaTest>0&&(n.alphaTest=this.alphaTest),!0===this.alphaToCoverage&&(n.alphaToCoverage=this.alphaToCoverage),!0===this.premultipliedAlpha&&(n.premultipliedAlpha=this.premultipliedAlpha),!0===this.wireframe&&(n.wireframe=this.wireframe),this.wireframeLinewidth>1&&(n.wireframeLinewidth=this.wireframeLinewidth),"round"!==this.wireframeLinecap&&(n.wireframeLinecap=this.wireframeLinecap),"round"!==this.wireframeLinejoin&&(n.wireframeLinejoin=this.wireframeLinejoin),!0===this.flatShading&&(n.flatShading=this.flatShading),!1===this.visible&&(n.visible=!1),!1===this.toneMapped&&(n.toneMapped=!1),!1===this.fog&&(n.fog=!1),"{}"!==JSON.stringify(this.userData)&&(n.userData=this.userData),e){const e=i(t.textures),r=i(t.images);e.length>0&&(n.textures=e),r.length>0&&(n.images=r)}return n}clone(){return(new this.constructor).copy(this)}copy(t){this.name=t.name,this.blending=t.blending,this.side=t.side,this.vertexColors=t.vertexColors,this.opacity=t.opacity,this.transparent=t.transparent,this.blendSrc=t.blendSrc,this.blendDst=t.blendDst,this.blendEquation=t.blendEquation,this.blendSrcAlpha=t.blendSrcAlpha,this.blendDstAlpha=t.blendDstAlpha,this.blendEquationAlpha=t.blendEquationAlpha,this.depthFunc=t.depthFunc,this.depthTest=t.depthTest,this.depthWrite=t.depthWrite,this.stencilWriteMask=t.stencilWriteMask,this.stencilFunc=t.stencilFunc,this.stencilRef=t.stencilRef,this.stencilFuncMask=t.stencilFuncMask,this.stencilFail=t.stencilFail,this.stencilZFail=t.stencilZFail,this.stencilZPass=t.stencilZPass,this.stencilWrite=t.stencilWrite;const e=t.clippingPlanes;let n=null;if(null!==e){const t=e.length;n=new Array(t);for(let i=0;i!==t;++i)n[i]=e[i].clone()}return this.clippingPlanes=n,this.clipIntersection=t.clipIntersection,this.clipShadows=t.clipShadows,this.shadowSide=t.shadowSide,this.colorWrite=t.colorWrite,this.precision=t.precision,this.polygonOffset=t.polygonOffset,this.polygonOffsetFactor=t.polygonOffsetFactor,this.polygonOffsetUnits=t.polygonOffsetUnits,this.dithering=t.dithering,this.alphaTest=t.alphaTest,this.alphaToCoverage=t.alphaToCoverage,this.premultipliedAlpha=t.premultipliedAlpha,this.visible=t.visible,this.toneMapped=t.toneMapped,this.userData=JSON.parse(JSON.stringify(t.userData)),this}dispose(){this.dispatchEvent({type:"dispose"})}set needsUpdate(t){!0===t&&this.version++}}bn.prototype.isMaterial=!0,bn.fromType=function(){return null};class Mn extends bn{constructor(t){super(),this.type="MeshBasicMaterial",this.color=new Wt(16777215),this.map=null,this.lightMap=null,this.lightMapIntensity=1,this.aoMap=null,this.aoMapIntensity=1,this.specularMap=null,this.alphaMap=null,this.envMap=null,this.combine=0,this.reflectivity=1,this.refractionRatio=.98,this.wireframe=!1,this.wireframeLinewidth=1,this.wireframeLinecap="round",this.wireframeLinejoin="round",this.fog=!0,this.setValues(t)}copy(t){return super.copy(t),this.color.copy(t.color),this.map=t.map,this.lightMap=t.lightMap,this.lightMapIntensity=t.lightMapIntensity,this.aoMap=t.aoMap,this.aoMapIntensity=t.aoMapIntensity,this.specularMap=t.specularMap,this.alphaMap=t.alphaMap,this.envMap=t.envMap,this.combine=t.combine,this.reflectivity=t.reflectivity,this.refractionRatio=t.refractionRatio,this.wireframe=t.wireframe,this.wireframeLinewidth=t.wireframeLinewidth,this.wireframeLinecap=t.wireframeLinecap,this.wireframeLinejoin=t.wireframeLinejoin,this.fog=t.fog,this}}Mn.prototype.isMeshBasicMaterial=!0;const wn=new se,Sn=new Rt;class Tn{constructor(t,e,n){if(Array.isArray(t))throw new TypeError("THREE.BufferAttribute: array should be a Typed Array.");this.name="",this.array=t,this.itemSize=e,this.count=void 0!==t?t.length/e:0,this.normalized=!0===n,this.usage=ut,this.updateRange={offset:0,count:-1},this.version=0}onUploadCallback(){}set needsUpdate(t){!0===t&&this.version++}setUsage(t){return this.usage=t,this}copy(t){return this.name=t.name,this.array=new t.array.constructor(t.array),this.itemSize=t.itemSize,this.count=t.count,this.normalized=t.normalized,this.usage=t.usage,this}copyAt(t,e,n){t*=this.itemSize,n*=e.itemSize;for(let i=0,r=this.itemSize;i0&&(t.userData=this.userData),void 0!==this.parameters){const e=this.parameters;for(const n in e)void 0!==e[n]&&(t[n]=e[n]);return t}t.data={attributes:{}};const e=this.index;null!==e&&(t.data.index={type:e.array.constructor.name,array:Array.prototype.slice.call(e.array)});const n=this.attributes;for(const e in n){const i=n[e];t.data.attributes[e]=i.toJSON(t.data)}const i={};let r=!1;for(const e in this.morphAttributes){const n=this.morphAttributes[e],s=[];for(let e=0,i=n.length;e0&&(i[e]=s,r=!0)}r&&(t.data.morphAttributes=i,t.data.morphTargetsRelative=this.morphTargetsRelative);const s=this.groups;s.length>0&&(t.data.groups=JSON.parse(JSON.stringify(s)));const a=this.boundingSphere;return null!==a&&(t.data.boundingSphere={center:a.center.toArray(),radius:a.radius}),t}clone(){return(new this.constructor).copy(this)}copy(t){this.index=null,this.attributes={},this.morphAttributes={},this.groups=[],this.boundingBox=null,this.boundingSphere=null;const e={};this.name=t.name;const n=t.index;null!==n&&this.setIndex(n.clone(e));const i=t.attributes;for(const t in i){const n=i[t];this.setAttribute(t,n.clone(e))}const r=t.morphAttributes;for(const t in r){const n=[],i=r[t];for(let t=0,r=i.length;t0){const t=e[n[0]];if(void 0!==t){this.morphTargetInfluences=[],this.morphTargetDictionary={};for(let e=0,n=t.length;e0&&console.error("THREE.Mesh.updateMorphTargets() no longer supports THREE.Geometry. Use THREE.BufferGeometry instead.")}}raycast(t,e){const n=this.geometry,i=this.material,r=this.matrixWorld;if(void 0===i)return;if(null===n.boundingSphere&&n.computeBoundingSphere(),qn.copy(n.boundingSphere),qn.applyMatrix4(r),!1===t.ray.intersectsSphere(qn))return;if(Wn.copy(r).invert(),jn.copy(t.ray).applyMatrix4(Wn),null!==n.boundingBox&&!1===jn.intersectsBox(n.boundingBox))return;let s;if(n.isBufferGeometry){const r=n.index,a=n.attributes.position,o=n.morphAttributes.position,l=n.morphTargetsRelative,c=n.attributes.uv,h=n.attributes.uv2,u=n.groups,d=n.drawRange;if(null!==r)if(Array.isArray(i))for(let n=0,p=u.length;nn.far?null:{distance:c,point:ai.clone(),object:t}}(t,e,n,i,Xn,Jn,Yn,si);if(p){o&&(ni.fromBufferAttribute(o,c),ii.fromBufferAttribute(o,h),ri.fromBufferAttribute(o,u),p.uv=xn.getUV(si,Xn,Jn,Yn,ni,ii,ri,new Rt)),l&&(ni.fromBufferAttribute(l,c),ii.fromBufferAttribute(l,h),ri.fromBufferAttribute(l,u),p.uv2=xn.getUV(si,Xn,Jn,Yn,ni,ii,ri,new Rt));const t={a:c,b:h,c:u,normal:new se,materialIndex:0};xn.getNormal(Xn,Jn,Yn,t.normal),p.face=t}return p}oi.prototype.isMesh=!0;class ci extends Vn{constructor(t=1,e=1,n=1,i=1,r=1,s=1){super(),this.type="BoxGeometry",this.parameters={width:t,height:e,depth:n,widthSegments:i,heightSegments:r,depthSegments:s};const a=this;i=Math.floor(i),r=Math.floor(r),s=Math.floor(s);const o=[],l=[],c=[],h=[];let u=0,d=0;function p(t,e,n,i,r,s,p,m,f,g,v){const y=s/f,x=p/g,_=s/2,b=p/2,M=m/2,w=f+1,S=g+1;let T=0,E=0;const A=new se;for(let s=0;s0?1:-1,c.push(A.x,A.y,A.z),h.push(o/f),h.push(1-s/g),T+=1}}for(let t=0;t0&&(e.defines=this.defines),e.vertexShader=this.vertexShader,e.fragmentShader=this.fragmentShader;const n={};for(const t in this.extensions)!0===this.extensions[t]&&(n[t]=!0);return Object.keys(n).length>0&&(e.extensions=n),e}}pi.prototype.isShaderMaterial=!0;class mi extends ln{constructor(){super(),this.type="Camera",this.matrixWorldInverse=new ze,this.projectionMatrix=new ze,this.projectionMatrixInverse=new ze}copy(t,e){return super.copy(t,e),this.matrixWorldInverse.copy(t.matrixWorldInverse),this.projectionMatrix.copy(t.projectionMatrix),this.projectionMatrixInverse.copy(t.projectionMatrixInverse),this}getWorldDirection(t){this.updateWorldMatrix(!0,!1);const e=this.matrixWorld.elements;return t.set(-e[8],-e[9],-e[10]).normalize()}updateMatrixWorld(t){super.updateMatrixWorld(t),this.matrixWorldInverse.copy(this.matrixWorld).invert()}updateWorldMatrix(t,e){super.updateWorldMatrix(t,e),this.matrixWorldInverse.copy(this.matrixWorld).invert()}clone(){return(new this.constructor).copy(this)}}mi.prototype.isCamera=!0;class fi extends mi{constructor(t=50,e=1,n=.1,i=2e3){super(),this.type="PerspectiveCamera",this.fov=t,this.zoom=1,this.near=n,this.far=i,this.focus=10,this.aspect=e,this.view=null,this.filmGauge=35,this.filmOffset=0,this.updateProjectionMatrix()}copy(t,e){return super.copy(t,e),this.fov=t.fov,this.zoom=t.zoom,this.near=t.near,this.far=t.far,this.focus=t.focus,this.aspect=t.aspect,this.view=null===t.view?null:Object.assign({},t.view),this.filmGauge=t.filmGauge,this.filmOffset=t.filmOffset,this}setFocalLength(t){const e=.5*this.getFilmHeight()/t;this.fov=2*xt*Math.atan(e),this.updateProjectionMatrix()}getFocalLength(){const t=Math.tan(.5*yt*this.fov);return.5*this.getFilmHeight()/t}getEffectiveFOV(){return 2*xt*Math.atan(Math.tan(.5*yt*this.fov)/this.zoom)}getFilmWidth(){return this.filmGauge*Math.min(this.aspect,1)}getFilmHeight(){return this.filmGauge/Math.max(this.aspect,1)}setViewOffset(t,e,n,i,r,s){this.aspect=t/e,null===this.view&&(this.view={enabled:!0,fullWidth:1,fullHeight:1,offsetX:0,offsetY:0,width:1,height:1}),this.view.enabled=!0,this.view.fullWidth=t,this.view.fullHeight=e,this.view.offsetX=n,this.view.offsetY=i,this.view.width=r,this.view.height=s,this.updateProjectionMatrix()}clearViewOffset(){null!==this.view&&(this.view.enabled=!1),this.updateProjectionMatrix()}updateProjectionMatrix(){const t=this.near;let e=t*Math.tan(.5*yt*this.fov)/this.zoom,n=2*e,i=this.aspect*n,r=-.5*i;const s=this.view;if(null!==this.view&&this.view.enabled){const t=s.fullWidth,a=s.fullHeight;r+=s.offsetX*i/t,e-=s.offsetY*n/a,i*=s.width/t,n*=s.height/a}const a=this.filmOffset;0!==a&&(r+=t*a/this.getFilmWidth()),this.projectionMatrix.makePerspective(r,r+i,e,e-n,t,this.far),this.projectionMatrixInverse.copy(this.projectionMatrix).invert()}toJSON(t){const e=super.toJSON(t);return e.object.fov=this.fov,e.object.zoom=this.zoom,e.object.near=this.near,e.object.far=this.far,e.object.focus=this.focus,e.object.aspect=this.aspect,null!==this.view&&(e.object.view=Object.assign({},this.view)),e.object.filmGauge=this.filmGauge,e.object.filmOffset=this.filmOffset,e}}fi.prototype.isPerspectiveCamera=!0;const gi=90;class vi extends ln{constructor(t,e,n){if(super(),this.type="CubeCamera",!0!==n.isWebGLCubeRenderTarget)return void console.error("THREE.CubeCamera: The constructor now expects an instance of WebGLCubeRenderTarget as third parameter.");this.renderTarget=n;const i=new fi(gi,1,t,e);i.layers=this.layers,i.up.set(0,-1,0),i.lookAt(new se(1,0,0)),this.add(i);const r=new fi(gi,1,t,e);r.layers=this.layers,r.up.set(0,-1,0),r.lookAt(new se(-1,0,0)),this.add(r);const s=new fi(gi,1,t,e);s.layers=this.layers,s.up.set(0,0,1),s.lookAt(new se(0,1,0)),this.add(s);const a=new fi(gi,1,t,e);a.layers=this.layers,a.up.set(0,0,-1),a.lookAt(new se(0,-1,0)),this.add(a);const o=new fi(gi,1,t,e);o.layers=this.layers,o.up.set(0,-1,0),o.lookAt(new se(0,0,1)),this.add(o);const l=new fi(gi,1,t,e);l.layers=this.layers,l.up.set(0,-1,0),l.lookAt(new se(0,0,-1)),this.add(l)}update(t,e){null===this.parent&&this.updateMatrixWorld();const n=this.renderTarget,[i,r,s,a,o,l]=this.children,c=t.getRenderTarget(),h=t.toneMapping,u=t.xr.enabled;t.toneMapping=0,t.xr.enabled=!1;const d=n.texture.generateMipmaps;n.texture.generateMipmaps=!1,t.setRenderTarget(n,0),t.render(e,i),t.setRenderTarget(n,1),t.render(e,r),t.setRenderTarget(n,2),t.render(e,s),t.setRenderTarget(n,3),t.render(e,a),t.setRenderTarget(n,4),t.render(e,o),n.texture.generateMipmaps=d,t.setRenderTarget(n,5),t.render(e,l),t.setRenderTarget(c),t.toneMapping=h,t.xr.enabled=u,n.texture.needsPMREMUpdate=!0}}class yi extends Zt{constructor(t,e,n,i,s,a,o,l,c,h){super(t=void 0!==t?t:[],e=void 0!==e?e:r,n,i,s,a,o,l,c,h),this.flipY=!1}get images(){return this.image}set images(t){this.image=t}}yi.prototype.isCubeTexture=!0;class xi extends Qt{constructor(t,e={}){super(t,t,e);const n={width:t,height:t,depth:1},i=[n,n,n,n,n,n];this.texture=new yi(i,e.mapping,e.wrapS,e.wrapT,e.magFilter,e.minFilter,e.format,e.type,e.anisotropy,e.encoding),this.texture.isRenderTargetTexture=!0,this.texture.generateMipmaps=void 0!==e.generateMipmaps&&e.generateMipmaps,this.texture.minFilter=void 0!==e.minFilter?e.minFilter:f}fromEquirectangularTexture(t,e){this.texture.type=e.type,this.texture.encoding=e.encoding,this.texture.generateMipmaps=e.generateMipmaps,this.texture.minFilter=e.minFilter,this.texture.magFilter=e.magFilter;const n={uniforms:{tEquirect:{value:null}},vertexShader:"\n\n\t\t\t\tvarying vec3 vWorldDirection;\n\n\t\t\t\tvec3 transformDirection( in vec3 dir, in mat4 matrix ) {\n\n\t\t\t\t\treturn normalize( ( matrix * vec4( dir, 0.0 ) ).xyz );\n\n\t\t\t\t}\n\n\t\t\t\tvoid main() {\n\n\t\t\t\t\tvWorldDirection = transformDirection( position, modelMatrix );\n\n\t\t\t\t\t#include \n\t\t\t\t\t#include \n\n\t\t\t\t}\n\t\t\t",fragmentShader:"\n\n\t\t\t\tuniform sampler2D tEquirect;\n\n\t\t\t\tvarying vec3 vWorldDirection;\n\n\t\t\t\t#include \n\n\t\t\t\tvoid main() {\n\n\t\t\t\t\tvec3 direction = normalize( vWorldDirection );\n\n\t\t\t\t\tvec2 sampleUV = equirectUv( direction );\n\n\t\t\t\t\tgl_FragColor = texture2D( tEquirect, sampleUV );\n\n\t\t\t\t}\n\t\t\t"},i=new ci(5,5,5),r=new pi({name:"CubemapFromEquirect",uniforms:hi(n.uniforms),vertexShader:n.vertexShader,fragmentShader:n.fragmentShader,side:1,blending:0});r.uniforms.tEquirect.value=e;const s=new oi(i,r),a=e.minFilter;e.minFilter===v&&(e.minFilter=f);return new vi(1,10,this).update(t,s),e.minFilter=a,s.geometry.dispose(),s.material.dispose(),this}clear(t,e,n,i){const r=t.getRenderTarget();for(let r=0;r<6;r++)t.setRenderTarget(this,r),t.clear(e,n,i);t.setRenderTarget(r)}}xi.prototype.isWebGLCubeRenderTarget=!0;const _i=new se,bi=new se,Mi=new Ct;class wi{constructor(t=new se(1,0,0),e=0){this.normal=t,this.constant=e}set(t,e){return this.normal.copy(t),this.constant=e,this}setComponents(t,e,n,i){return this.normal.set(t,e,n),this.constant=i,this}setFromNormalAndCoplanarPoint(t,e){return this.normal.copy(t),this.constant=-e.dot(this.normal),this}setFromCoplanarPoints(t,e,n){const i=_i.subVectors(n,e).cross(bi.subVectors(t,e)).normalize();return this.setFromNormalAndCoplanarPoint(i,t),this}copy(t){return this.normal.copy(t.normal),this.constant=t.constant,this}normalize(){const t=1/this.normal.length();return this.normal.multiplyScalar(t),this.constant*=t,this}negate(){return this.constant*=-1,this.normal.negate(),this}distanceToPoint(t){return this.normal.dot(t)+this.constant}distanceToSphere(t){return this.distanceToPoint(t.center)-t.radius}projectPoint(t,e){return e.copy(this.normal).multiplyScalar(-this.distanceToPoint(t)).add(t)}intersectLine(t,e){const n=t.delta(_i),i=this.normal.dot(n);if(0===i)return 0===this.distanceToPoint(t.start)?e.copy(t.start):null;const r=-(t.start.dot(this.normal)+this.constant)/i;return r<0||r>1?null:e.copy(n).multiplyScalar(r).add(t.start)}intersectsLine(t){const e=this.distanceToPoint(t.start),n=this.distanceToPoint(t.end);return e<0&&n>0||n<0&&e>0}intersectsBox(t){return t.intersectsPlane(this)}intersectsSphere(t){return t.intersectsPlane(this)}coplanarPoint(t){return t.copy(this.normal).multiplyScalar(-this.constant)}applyMatrix4(t,e){const n=e||Mi.getNormalMatrix(t),i=this.coplanarPoint(_i).applyMatrix4(t),r=this.normal.applyMatrix3(n).normalize();return this.constant=-i.dot(r),this}translate(t){return this.constant-=t.dot(this.normal),this}equals(t){return t.normal.equals(this.normal)&&t.constant===this.constant}clone(){return(new this.constructor).copy(this)}}wi.prototype.isPlane=!0;const Si=new Ae,Ti=new se;class Ei{constructor(t=new wi,e=new wi,n=new wi,i=new wi,r=new wi,s=new wi){this.planes=[t,e,n,i,r,s]}set(t,e,n,i,r,s){const a=this.planes;return a[0].copy(t),a[1].copy(e),a[2].copy(n),a[3].copy(i),a[4].copy(r),a[5].copy(s),this}copy(t){const e=this.planes;for(let n=0;n<6;n++)e[n].copy(t.planes[n]);return this}setFromProjectionMatrix(t){const e=this.planes,n=t.elements,i=n[0],r=n[1],s=n[2],a=n[3],o=n[4],l=n[5],c=n[6],h=n[7],u=n[8],d=n[9],p=n[10],m=n[11],f=n[12],g=n[13],v=n[14],y=n[15];return e[0].setComponents(a-i,h-o,m-u,y-f).normalize(),e[1].setComponents(a+i,h+o,m+u,y+f).normalize(),e[2].setComponents(a+r,h+l,m+d,y+g).normalize(),e[3].setComponents(a-r,h-l,m-d,y-g).normalize(),e[4].setComponents(a-s,h-c,m-p,y-v).normalize(),e[5].setComponents(a+s,h+c,m+p,y+v).normalize(),this}intersectsObject(t){const e=t.geometry;return null===e.boundingSphere&&e.computeBoundingSphere(),Si.copy(e.boundingSphere).applyMatrix4(t.matrixWorld),this.intersectsSphere(Si)}intersectsSprite(t){return Si.center.set(0,0,0),Si.radius=.7071067811865476,Si.applyMatrix4(t.matrixWorld),this.intersectsSphere(Si)}intersectsSphere(t){const e=this.planes,n=t.center,i=-t.radius;for(let t=0;t<6;t++){if(e[t].distanceToPoint(n)0?t.max.x:t.min.x,Ti.y=i.normal.y>0?t.max.y:t.min.y,Ti.z=i.normal.z>0?t.max.z:t.min.z,i.distanceToPoint(Ti)<0)return!1}return!0}containsPoint(t){const e=this.planes;for(let n=0;n<6;n++)if(e[n].distanceToPoint(t)<0)return!1;return!0}clone(){return(new this.constructor).copy(this)}}function Ai(){let t=null,e=!1,n=null,i=null;function r(e,s){n(e,s),i=t.requestAnimationFrame(r)}return{start:function(){!0!==e&&null!==n&&(i=t.requestAnimationFrame(r),e=!0)},stop:function(){t.cancelAnimationFrame(i),e=!1},setAnimationLoop:function(t){n=t},setContext:function(e){t=e}}}function Ri(t,e){const n=e.isWebGL2,i=new WeakMap;return{get:function(t){return t.isInterleavedBufferAttribute&&(t=t.data),i.get(t)},remove:function(e){e.isInterleavedBufferAttribute&&(e=e.data);const n=i.get(e);n&&(t.deleteBuffer(n.buffer),i.delete(e))},update:function(e,r){if(e.isGLBufferAttribute){const t=i.get(e);return void((!t||t.version 0.0 ) ? v : 0.5 * inversesqrt( max( 1.0 - x * x, 1e-7 ) ) - v;\n\treturn cross( v1, v2 ) * theta_sintheta;\n}\nvec3 LTC_Evaluate( const in vec3 N, const in vec3 V, const in vec3 P, const in mat3 mInv, const in vec3 rectCoords[ 4 ] ) {\n\tvec3 v1 = rectCoords[ 1 ] - rectCoords[ 0 ];\n\tvec3 v2 = rectCoords[ 3 ] - rectCoords[ 0 ];\n\tvec3 lightNormal = cross( v1, v2 );\n\tif( dot( lightNormal, P - rectCoords[ 0 ] ) < 0.0 ) return vec3( 0.0 );\n\tvec3 T1, T2;\n\tT1 = normalize( V - N * dot( V, N ) );\n\tT2 = - cross( N, T1 );\n\tmat3 mat = mInv * transposeMat3( mat3( T1, T2, N ) );\n\tvec3 coords[ 4 ];\n\tcoords[ 0 ] = mat * ( rectCoords[ 0 ] - P );\n\tcoords[ 1 ] = mat * ( rectCoords[ 1 ] - P );\n\tcoords[ 2 ] = mat * ( rectCoords[ 2 ] - P );\n\tcoords[ 3 ] = mat * ( rectCoords[ 3 ] - P );\n\tcoords[ 0 ] = normalize( coords[ 0 ] );\n\tcoords[ 1 ] = normalize( coords[ 1 ] );\n\tcoords[ 2 ] = normalize( coords[ 2 ] );\n\tcoords[ 3 ] = normalize( coords[ 3 ] );\n\tvec3 vectorFormFactor = vec3( 0.0 );\n\tvectorFormFactor += LTC_EdgeVectorFormFactor( coords[ 0 ], coords[ 1 ] );\n\tvectorFormFactor += LTC_EdgeVectorFormFactor( coords[ 1 ], coords[ 2 ] );\n\tvectorFormFactor += LTC_EdgeVectorFormFactor( coords[ 2 ], coords[ 3 ] );\n\tvectorFormFactor += LTC_EdgeVectorFormFactor( coords[ 3 ], coords[ 0 ] );\n\tfloat result = LTC_ClippedSphereFormFactor( vectorFormFactor );\n\treturn vec3( result );\n}\nfloat G_BlinnPhong_Implicit( ) {\n\treturn 0.25;\n}\nfloat D_BlinnPhong( const in float shininess, const in float dotNH ) {\n\treturn RECIPROCAL_PI * ( shininess * 0.5 + 1.0 ) * pow( dotNH, shininess );\n}\nvec3 BRDF_BlinnPhong( const in vec3 lightDir, const in vec3 viewDir, const in vec3 normal, const in vec3 specularColor, const in float shininess ) {\n\tvec3 halfDir = normalize( lightDir + viewDir );\n\tfloat dotNH = saturate( dot( normal, halfDir ) );\n\tfloat dotVH = saturate( dot( viewDir, halfDir ) );\n\tvec3 F = F_Schlick( specularColor, 1.0, dotVH );\n\tfloat G = G_BlinnPhong_Implicit( );\n\tfloat D = D_BlinnPhong( shininess, dotNH );\n\treturn F * ( G * D );\n}\n#if defined( USE_SHEEN )\nfloat D_Charlie( float roughness, float dotNH ) {\n\tfloat alpha = pow2( roughness );\n\tfloat invAlpha = 1.0 / alpha;\n\tfloat cos2h = dotNH * dotNH;\n\tfloat sin2h = max( 1.0 - cos2h, 0.0078125 );\n\treturn ( 2.0 + invAlpha ) * pow( sin2h, invAlpha * 0.5 ) / ( 2.0 * PI );\n}\nfloat V_Neubelt( float dotNV, float dotNL ) {\n\treturn saturate( 1.0 / ( 4.0 * ( dotNL + dotNV - dotNL * dotNV ) ) );\n}\nvec3 BRDF_Sheen( const in vec3 lightDir, const in vec3 viewDir, const in vec3 normal, vec3 sheenColor, const in float sheenRoughness ) {\n\tvec3 halfDir = normalize( lightDir + viewDir );\n\tfloat dotNL = saturate( dot( normal, lightDir ) );\n\tfloat dotNV = saturate( dot( normal, viewDir ) );\n\tfloat dotNH = saturate( dot( normal, halfDir ) );\n\tfloat D = D_Charlie( sheenRoughness, dotNH );\n\tfloat V = V_Neubelt( dotNV, dotNL );\n\treturn sheenColor * ( D * V );\n}\n#endif",bumpmap_pars_fragment:"#ifdef USE_BUMPMAP\n\tuniform sampler2D bumpMap;\n\tuniform float bumpScale;\n\tvec2 dHdxy_fwd() {\n\t\tvec2 dSTdx = dFdx( vUv );\n\t\tvec2 dSTdy = dFdy( vUv );\n\t\tfloat Hll = bumpScale * texture2D( bumpMap, vUv ).x;\n\t\tfloat dBx = bumpScale * texture2D( bumpMap, vUv + dSTdx ).x - Hll;\n\t\tfloat dBy = bumpScale * texture2D( bumpMap, vUv + dSTdy ).x - Hll;\n\t\treturn vec2( dBx, dBy );\n\t}\n\tvec3 perturbNormalArb( vec3 surf_pos, vec3 surf_norm, vec2 dHdxy, float faceDirection ) {\n\t\tvec3 vSigmaX = vec3( dFdx( surf_pos.x ), dFdx( surf_pos.y ), dFdx( surf_pos.z ) );\n\t\tvec3 vSigmaY = vec3( dFdy( surf_pos.x ), dFdy( surf_pos.y ), dFdy( surf_pos.z ) );\n\t\tvec3 vN = surf_norm;\n\t\tvec3 R1 = cross( vSigmaY, vN );\n\t\tvec3 R2 = cross( vN, vSigmaX );\n\t\tfloat fDet = dot( vSigmaX, R1 ) * faceDirection;\n\t\tvec3 vGrad = sign( fDet ) * ( dHdxy.x * R1 + dHdxy.y * R2 );\n\t\treturn normalize( abs( fDet ) * surf_norm - vGrad );\n\t}\n#endif",clipping_planes_fragment:"#if NUM_CLIPPING_PLANES > 0\n\tvec4 plane;\n\t#pragma unroll_loop_start\n\tfor ( int i = 0; i < UNION_CLIPPING_PLANES; i ++ ) {\n\t\tplane = clippingPlanes[ i ];\n\t\tif ( dot( vClipPosition, plane.xyz ) > plane.w ) discard;\n\t}\n\t#pragma unroll_loop_end\n\t#if UNION_CLIPPING_PLANES < NUM_CLIPPING_PLANES\n\t\tbool clipped = true;\n\t\t#pragma unroll_loop_start\n\t\tfor ( int i = UNION_CLIPPING_PLANES; i < NUM_CLIPPING_PLANES; i ++ ) {\n\t\t\tplane = clippingPlanes[ i ];\n\t\t\tclipped = ( dot( vClipPosition, plane.xyz ) > plane.w ) && clipped;\n\t\t}\n\t\t#pragma unroll_loop_end\n\t\tif ( clipped ) discard;\n\t#endif\n#endif",clipping_planes_pars_fragment:"#if NUM_CLIPPING_PLANES > 0\n\tvarying vec3 vClipPosition;\n\tuniform vec4 clippingPlanes[ NUM_CLIPPING_PLANES ];\n#endif",clipping_planes_pars_vertex:"#if NUM_CLIPPING_PLANES > 0\n\tvarying vec3 vClipPosition;\n#endif",clipping_planes_vertex:"#if NUM_CLIPPING_PLANES > 0\n\tvClipPosition = - mvPosition.xyz;\n#endif",color_fragment:"#if defined( USE_COLOR_ALPHA )\n\tdiffuseColor *= vColor;\n#elif defined( USE_COLOR )\n\tdiffuseColor.rgb *= vColor;\n#endif",color_pars_fragment:"#if defined( USE_COLOR_ALPHA )\n\tvarying vec4 vColor;\n#elif defined( USE_COLOR )\n\tvarying vec3 vColor;\n#endif",color_pars_vertex:"#if defined( USE_COLOR_ALPHA )\n\tvarying vec4 vColor;\n#elif defined( USE_COLOR ) || defined( USE_INSTANCING_COLOR )\n\tvarying vec3 vColor;\n#endif",color_vertex:"#if defined( USE_COLOR_ALPHA )\n\tvColor = vec4( 1.0 );\n#elif defined( USE_COLOR ) || defined( USE_INSTANCING_COLOR )\n\tvColor = vec3( 1.0 );\n#endif\n#ifdef USE_COLOR\n\tvColor *= color;\n#endif\n#ifdef USE_INSTANCING_COLOR\n\tvColor.xyz *= instanceColor.xyz;\n#endif",common:"#define PI 3.141592653589793\n#define PI2 6.283185307179586\n#define PI_HALF 1.5707963267948966\n#define RECIPROCAL_PI 0.3183098861837907\n#define RECIPROCAL_PI2 0.15915494309189535\n#define EPSILON 1e-6\n#ifndef saturate\n#define saturate( a ) clamp( a, 0.0, 1.0 )\n#endif\n#define whiteComplement( a ) ( 1.0 - saturate( a ) )\nfloat pow2( const in float x ) { return x*x; }\nfloat pow3( const in float x ) { return x*x*x; }\nfloat pow4( const in float x ) { float x2 = x*x; return x2*x2; }\nfloat max3( const in vec3 v ) { return max( max( v.x, v.y ), v.z ); }\nfloat average( const in vec3 color ) { return dot( color, vec3( 0.3333 ) ); }\nhighp float rand( const in vec2 uv ) {\n\tconst highp float a = 12.9898, b = 78.233, c = 43758.5453;\n\thighp float dt = dot( uv.xy, vec2( a,b ) ), sn = mod( dt, PI );\n\treturn fract( sin( sn ) * c );\n}\n#ifdef HIGH_PRECISION\n\tfloat precisionSafeLength( vec3 v ) { return length( v ); }\n#else\n\tfloat precisionSafeLength( vec3 v ) {\n\t\tfloat maxComponent = max3( abs( v ) );\n\t\treturn length( v / maxComponent ) * maxComponent;\n\t}\n#endif\nstruct IncidentLight {\n\tvec3 color;\n\tvec3 direction;\n\tbool visible;\n};\nstruct ReflectedLight {\n\tvec3 directDiffuse;\n\tvec3 directSpecular;\n\tvec3 indirectDiffuse;\n\tvec3 indirectSpecular;\n};\nstruct GeometricContext {\n\tvec3 position;\n\tvec3 normal;\n\tvec3 viewDir;\n#ifdef USE_CLEARCOAT\n\tvec3 clearcoatNormal;\n#endif\n};\nvec3 transformDirection( in vec3 dir, in mat4 matrix ) {\n\treturn normalize( ( matrix * vec4( dir, 0.0 ) ).xyz );\n}\nvec3 inverseTransformDirection( in vec3 dir, in mat4 matrix ) {\n\treturn normalize( ( vec4( dir, 0.0 ) * matrix ).xyz );\n}\nmat3 transposeMat3( const in mat3 m ) {\n\tmat3 tmp;\n\ttmp[ 0 ] = vec3( m[ 0 ].x, m[ 1 ].x, m[ 2 ].x );\n\ttmp[ 1 ] = vec3( m[ 0 ].y, m[ 1 ].y, m[ 2 ].y );\n\ttmp[ 2 ] = vec3( m[ 0 ].z, m[ 1 ].z, m[ 2 ].z );\n\treturn tmp;\n}\nfloat linearToRelativeLuminance( const in vec3 color ) {\n\tvec3 weights = vec3( 0.2126, 0.7152, 0.0722 );\n\treturn dot( weights, color.rgb );\n}\nbool isPerspectiveMatrix( mat4 m ) {\n\treturn m[ 2 ][ 3 ] == - 1.0;\n}\nvec2 equirectUv( in vec3 dir ) {\n\tfloat u = atan( dir.z, dir.x ) * RECIPROCAL_PI2 + 0.5;\n\tfloat v = asin( clamp( dir.y, - 1.0, 1.0 ) ) * RECIPROCAL_PI + 0.5;\n\treturn vec2( u, v );\n}",cube_uv_reflection_fragment:"#ifdef ENVMAP_TYPE_CUBE_UV\n\t#define cubeUV_minMipLevel 4.0\n\t#define cubeUV_minTileSize 16.0\n\tfloat getFace( vec3 direction ) {\n\t\tvec3 absDirection = abs( direction );\n\t\tfloat face = - 1.0;\n\t\tif ( absDirection.x > absDirection.z ) {\n\t\t\tif ( absDirection.x > absDirection.y )\n\t\t\t\tface = direction.x > 0.0 ? 0.0 : 3.0;\n\t\t\telse\n\t\t\t\tface = direction.y > 0.0 ? 1.0 : 4.0;\n\t\t} else {\n\t\t\tif ( absDirection.z > absDirection.y )\n\t\t\t\tface = direction.z > 0.0 ? 2.0 : 5.0;\n\t\t\telse\n\t\t\t\tface = direction.y > 0.0 ? 1.0 : 4.0;\n\t\t}\n\t\treturn face;\n\t}\n\tvec2 getUV( vec3 direction, float face ) {\n\t\tvec2 uv;\n\t\tif ( face == 0.0 ) {\n\t\t\tuv = vec2( direction.z, direction.y ) / abs( direction.x );\n\t\t} else if ( face == 1.0 ) {\n\t\t\tuv = vec2( - direction.x, - direction.z ) / abs( direction.y );\n\t\t} else if ( face == 2.0 ) {\n\t\t\tuv = vec2( - direction.x, direction.y ) / abs( direction.z );\n\t\t} else if ( face == 3.0 ) {\n\t\t\tuv = vec2( - direction.z, direction.y ) / abs( direction.x );\n\t\t} else if ( face == 4.0 ) {\n\t\t\tuv = vec2( - direction.x, direction.z ) / abs( direction.y );\n\t\t} else {\n\t\t\tuv = vec2( direction.x, direction.y ) / abs( direction.z );\n\t\t}\n\t\treturn 0.5 * ( uv + 1.0 );\n\t}\n\tvec3 bilinearCubeUV( sampler2D envMap, vec3 direction, float mipInt ) {\n\t\tfloat face = getFace( direction );\n\t\tfloat filterInt = max( cubeUV_minMipLevel - mipInt, 0.0 );\n\t\tmipInt = max( mipInt, cubeUV_minMipLevel );\n\t\tfloat faceSize = exp2( mipInt );\n\t\tvec2 uv = getUV( direction, face ) * ( faceSize - 2.0 ) + 1.0;\n\t\tif ( face > 2.0 ) {\n\t\t\tuv.y += faceSize;\n\t\t\tface -= 3.0;\n\t\t}\n\t\tuv.x += face * faceSize;\n\t\tuv.x += filterInt * 3.0 * cubeUV_minTileSize;\n\t\tuv.y += 4.0 * ( exp2( CUBEUV_MAX_MIP ) - faceSize );\n\t\tuv.x *= CUBEUV_TEXEL_WIDTH;\n\t\tuv.y *= CUBEUV_TEXEL_HEIGHT;\n\t\t#ifdef texture2DGradEXT\n\t\t\treturn texture2DGradEXT( envMap, uv, vec2( 0.0 ), vec2( 0.0 ) ).rgb;\n\t\t#else\n\t\t\treturn texture2D( envMap, uv ).rgb;\n\t\t#endif\n\t}\n\t#define r0 1.0\n\t#define v0 0.339\n\t#define m0 - 2.0\n\t#define r1 0.8\n\t#define v1 0.276\n\t#define m1 - 1.0\n\t#define r4 0.4\n\t#define v4 0.046\n\t#define m4 2.0\n\t#define r5 0.305\n\t#define v5 0.016\n\t#define m5 3.0\n\t#define r6 0.21\n\t#define v6 0.0038\n\t#define m6 4.0\n\tfloat roughnessToMip( float roughness ) {\n\t\tfloat mip = 0.0;\n\t\tif ( roughness >= r1 ) {\n\t\t\tmip = ( r0 - roughness ) * ( m1 - m0 ) / ( r0 - r1 ) + m0;\n\t\t} else if ( roughness >= r4 ) {\n\t\t\tmip = ( r1 - roughness ) * ( m4 - m1 ) / ( r1 - r4 ) + m1;\n\t\t} else if ( roughness >= r5 ) {\n\t\t\tmip = ( r4 - roughness ) * ( m5 - m4 ) / ( r4 - r5 ) + m4;\n\t\t} else if ( roughness >= r6 ) {\n\t\t\tmip = ( r5 - roughness ) * ( m6 - m5 ) / ( r5 - r6 ) + m5;\n\t\t} else {\n\t\t\tmip = - 2.0 * log2( 1.16 * roughness );\t\t}\n\t\treturn mip;\n\t}\n\tvec4 textureCubeUV( sampler2D envMap, vec3 sampleDir, float roughness ) {\n\t\tfloat mip = clamp( roughnessToMip( roughness ), m0, CUBEUV_MAX_MIP );\n\t\tfloat mipF = fract( mip );\n\t\tfloat mipInt = floor( mip );\n\t\tvec3 color0 = bilinearCubeUV( envMap, sampleDir, mipInt );\n\t\tif ( mipF == 0.0 ) {\n\t\t\treturn vec4( color0, 1.0 );\n\t\t} else {\n\t\t\tvec3 color1 = bilinearCubeUV( envMap, sampleDir, mipInt + 1.0 );\n\t\t\treturn vec4( mix( color0, color1, mipF ), 1.0 );\n\t\t}\n\t}\n#endif",defaultnormal_vertex:"vec3 transformedNormal = objectNormal;\n#ifdef USE_INSTANCING\n\tmat3 m = mat3( instanceMatrix );\n\ttransformedNormal /= vec3( dot( m[ 0 ], m[ 0 ] ), dot( m[ 1 ], m[ 1 ] ), dot( m[ 2 ], m[ 2 ] ) );\n\ttransformedNormal = m * transformedNormal;\n#endif\ntransformedNormal = normalMatrix * transformedNormal;\n#ifdef FLIP_SIDED\n\ttransformedNormal = - transformedNormal;\n#endif\n#ifdef USE_TANGENT\n\tvec3 transformedTangent = ( modelViewMatrix * vec4( objectTangent, 0.0 ) ).xyz;\n\t#ifdef FLIP_SIDED\n\t\ttransformedTangent = - transformedTangent;\n\t#endif\n#endif",displacementmap_pars_vertex:"#ifdef USE_DISPLACEMENTMAP\n\tuniform sampler2D displacementMap;\n\tuniform float displacementScale;\n\tuniform float displacementBias;\n#endif",displacementmap_vertex:"#ifdef USE_DISPLACEMENTMAP\n\ttransformed += normalize( objectNormal ) * ( texture2D( displacementMap, vUv ).x * displacementScale + displacementBias );\n#endif",emissivemap_fragment:"#ifdef USE_EMISSIVEMAP\n\tvec4 emissiveColor = texture2D( emissiveMap, vUv );\n\ttotalEmissiveRadiance *= emissiveColor.rgb;\n#endif",emissivemap_pars_fragment:"#ifdef USE_EMISSIVEMAP\n\tuniform sampler2D emissiveMap;\n#endif",encodings_fragment:"gl_FragColor = linearToOutputTexel( gl_FragColor );",encodings_pars_fragment:"vec4 LinearToLinear( in vec4 value ) {\n\treturn value;\n}\nvec4 LinearTosRGB( in vec4 value ) {\n\treturn vec4( mix( pow( value.rgb, vec3( 0.41666 ) ) * 1.055 - vec3( 0.055 ), value.rgb * 12.92, vec3( lessThanEqual( value.rgb, vec3( 0.0031308 ) ) ) ), value.a );\n}",envmap_fragment:"#ifdef USE_ENVMAP\n\t#ifdef ENV_WORLDPOS\n\t\tvec3 cameraToFrag;\n\t\tif ( isOrthographic ) {\n\t\t\tcameraToFrag = normalize( vec3( - viewMatrix[ 0 ][ 2 ], - viewMatrix[ 1 ][ 2 ], - viewMatrix[ 2 ][ 2 ] ) );\n\t\t} else {\n\t\t\tcameraToFrag = normalize( vWorldPosition - cameraPosition );\n\t\t}\n\t\tvec3 worldNormal = inverseTransformDirection( normal, viewMatrix );\n\t\t#ifdef ENVMAP_MODE_REFLECTION\n\t\t\tvec3 reflectVec = reflect( cameraToFrag, worldNormal );\n\t\t#else\n\t\t\tvec3 reflectVec = refract( cameraToFrag, worldNormal, refractionRatio );\n\t\t#endif\n\t#else\n\t\tvec3 reflectVec = vReflect;\n\t#endif\n\t#ifdef ENVMAP_TYPE_CUBE\n\t\tvec4 envColor = textureCube( envMap, vec3( flipEnvMap * reflectVec.x, reflectVec.yz ) );\n\t#elif defined( ENVMAP_TYPE_CUBE_UV )\n\t\tvec4 envColor = textureCubeUV( envMap, reflectVec, 0.0 );\n\t#else\n\t\tvec4 envColor = vec4( 0.0 );\n\t#endif\n\t#ifdef ENVMAP_BLENDING_MULTIPLY\n\t\toutgoingLight = mix( outgoingLight, outgoingLight * envColor.xyz, specularStrength * reflectivity );\n\t#elif defined( ENVMAP_BLENDING_MIX )\n\t\toutgoingLight = mix( outgoingLight, envColor.xyz, specularStrength * reflectivity );\n\t#elif defined( ENVMAP_BLENDING_ADD )\n\t\toutgoingLight += envColor.xyz * specularStrength * reflectivity;\n\t#endif\n#endif",envmap_common_pars_fragment:"#ifdef USE_ENVMAP\n\tuniform float envMapIntensity;\n\tuniform float flipEnvMap;\n\t#ifdef ENVMAP_TYPE_CUBE\n\t\tuniform samplerCube envMap;\n\t#else\n\t\tuniform sampler2D envMap;\n\t#endif\n\t\n#endif",envmap_pars_fragment:"#ifdef USE_ENVMAP\n\tuniform float reflectivity;\n\t#if defined( USE_BUMPMAP ) || defined( USE_NORMALMAP ) || defined( PHONG )\n\t\t#define ENV_WORLDPOS\n\t#endif\n\t#ifdef ENV_WORLDPOS\n\t\tvarying vec3 vWorldPosition;\n\t\tuniform float refractionRatio;\n\t#else\n\t\tvarying vec3 vReflect;\n\t#endif\n#endif",envmap_pars_vertex:"#ifdef USE_ENVMAP\n\t#if defined( USE_BUMPMAP ) || defined( USE_NORMALMAP ) ||defined( PHONG )\n\t\t#define ENV_WORLDPOS\n\t#endif\n\t#ifdef ENV_WORLDPOS\n\t\t\n\t\tvarying vec3 vWorldPosition;\n\t#else\n\t\tvarying vec3 vReflect;\n\t\tuniform float refractionRatio;\n\t#endif\n#endif",envmap_physical_pars_fragment:"#if defined( USE_ENVMAP )\n\tvec3 getIBLIrradiance( const in vec3 normal ) {\n\t\t#if defined( ENVMAP_TYPE_CUBE_UV )\n\t\t\tvec3 worldNormal = inverseTransformDirection( normal, viewMatrix );\n\t\t\tvec4 envMapColor = textureCubeUV( envMap, worldNormal, 1.0 );\n\t\t\treturn PI * envMapColor.rgb * envMapIntensity;\n\t\t#else\n\t\t\treturn vec3( 0.0 );\n\t\t#endif\n\t}\n\tvec3 getIBLRadiance( const in vec3 viewDir, const in vec3 normal, const in float roughness ) {\n\t\t#if defined( ENVMAP_TYPE_CUBE_UV )\n\t\t\tvec3 reflectVec = reflect( - viewDir, normal );\n\t\t\treflectVec = normalize( mix( reflectVec, normal, roughness * roughness) );\n\t\t\treflectVec = inverseTransformDirection( reflectVec, viewMatrix );\n\t\t\tvec4 envMapColor = textureCubeUV( envMap, reflectVec, roughness );\n\t\t\treturn envMapColor.rgb * envMapIntensity;\n\t\t#else\n\t\t\treturn vec3( 0.0 );\n\t\t#endif\n\t}\n#endif",envmap_vertex:"#ifdef USE_ENVMAP\n\t#ifdef ENV_WORLDPOS\n\t\tvWorldPosition = worldPosition.xyz;\n\t#else\n\t\tvec3 cameraToVertex;\n\t\tif ( isOrthographic ) {\n\t\t\tcameraToVertex = normalize( vec3( - viewMatrix[ 0 ][ 2 ], - viewMatrix[ 1 ][ 2 ], - viewMatrix[ 2 ][ 2 ] ) );\n\t\t} else {\n\t\t\tcameraToVertex = normalize( worldPosition.xyz - cameraPosition );\n\t\t}\n\t\tvec3 worldNormal = inverseTransformDirection( transformedNormal, viewMatrix );\n\t\t#ifdef ENVMAP_MODE_REFLECTION\n\t\t\tvReflect = reflect( cameraToVertex, worldNormal );\n\t\t#else\n\t\t\tvReflect = refract( cameraToVertex, worldNormal, refractionRatio );\n\t\t#endif\n\t#endif\n#endif",fog_vertex:"#ifdef USE_FOG\n\tvFogDepth = - mvPosition.z;\n#endif",fog_pars_vertex:"#ifdef USE_FOG\n\tvarying float vFogDepth;\n#endif",fog_fragment:"#ifdef USE_FOG\n\t#ifdef FOG_EXP2\n\t\tfloat fogFactor = 1.0 - exp( - fogDensity * fogDensity * vFogDepth * vFogDepth );\n\t#else\n\t\tfloat fogFactor = smoothstep( fogNear, fogFar, vFogDepth );\n\t#endif\n\tgl_FragColor.rgb = mix( gl_FragColor.rgb, fogColor, fogFactor );\n#endif",fog_pars_fragment:"#ifdef USE_FOG\n\tuniform vec3 fogColor;\n\tvarying float vFogDepth;\n\t#ifdef FOG_EXP2\n\t\tuniform float fogDensity;\n\t#else\n\t\tuniform float fogNear;\n\t\tuniform float fogFar;\n\t#endif\n#endif",gradientmap_pars_fragment:"#ifdef USE_GRADIENTMAP\n\tuniform sampler2D gradientMap;\n#endif\nvec3 getGradientIrradiance( vec3 normal, vec3 lightDirection ) {\n\tfloat dotNL = dot( normal, lightDirection );\n\tvec2 coord = vec2( dotNL * 0.5 + 0.5, 0.0 );\n\t#ifdef USE_GRADIENTMAP\n\t\treturn vec3( texture2D( gradientMap, coord ).r );\n\t#else\n\t\treturn ( coord.x < 0.7 ) ? vec3( 0.7 ) : vec3( 1.0 );\n\t#endif\n}",lightmap_fragment:"#ifdef USE_LIGHTMAP\n\tvec4 lightMapTexel = texture2D( lightMap, vUv2 );\n\tvec3 lightMapIrradiance = lightMapTexel.rgb * lightMapIntensity;\n\treflectedLight.indirectDiffuse += lightMapIrradiance;\n#endif",lightmap_pars_fragment:"#ifdef USE_LIGHTMAP\n\tuniform sampler2D lightMap;\n\tuniform float lightMapIntensity;\n#endif",lights_lambert_vertex:"vec3 diffuse = vec3( 1.0 );\nGeometricContext geometry;\ngeometry.position = mvPosition.xyz;\ngeometry.normal = normalize( transformedNormal );\ngeometry.viewDir = ( isOrthographic ) ? vec3( 0, 0, 1 ) : normalize( -mvPosition.xyz );\nGeometricContext backGeometry;\nbackGeometry.position = geometry.position;\nbackGeometry.normal = -geometry.normal;\nbackGeometry.viewDir = geometry.viewDir;\nvLightFront = vec3( 0.0 );\nvIndirectFront = vec3( 0.0 );\n#ifdef DOUBLE_SIDED\n\tvLightBack = vec3( 0.0 );\n\tvIndirectBack = vec3( 0.0 );\n#endif\nIncidentLight directLight;\nfloat dotNL;\nvec3 directLightColor_Diffuse;\nvIndirectFront += getAmbientLightIrradiance( ambientLightColor );\nvIndirectFront += getLightProbeIrradiance( lightProbe, geometry.normal );\n#ifdef DOUBLE_SIDED\n\tvIndirectBack += getAmbientLightIrradiance( ambientLightColor );\n\tvIndirectBack += getLightProbeIrradiance( lightProbe, backGeometry.normal );\n#endif\n#if NUM_POINT_LIGHTS > 0\n\t#pragma unroll_loop_start\n\tfor ( int i = 0; i < NUM_POINT_LIGHTS; i ++ ) {\n\t\tgetPointLightInfo( pointLights[ i ], geometry, directLight );\n\t\tdotNL = dot( geometry.normal, directLight.direction );\n\t\tdirectLightColor_Diffuse = directLight.color;\n\t\tvLightFront += saturate( dotNL ) * directLightColor_Diffuse;\n\t\t#ifdef DOUBLE_SIDED\n\t\t\tvLightBack += saturate( - dotNL ) * directLightColor_Diffuse;\n\t\t#endif\n\t}\n\t#pragma unroll_loop_end\n#endif\n#if NUM_SPOT_LIGHTS > 0\n\t#pragma unroll_loop_start\n\tfor ( int i = 0; i < NUM_SPOT_LIGHTS; i ++ ) {\n\t\tgetSpotLightInfo( spotLights[ i ], geometry, directLight );\n\t\tdotNL = dot( geometry.normal, directLight.direction );\n\t\tdirectLightColor_Diffuse = directLight.color;\n\t\tvLightFront += saturate( dotNL ) * directLightColor_Diffuse;\n\t\t#ifdef DOUBLE_SIDED\n\t\t\tvLightBack += saturate( - dotNL ) * directLightColor_Diffuse;\n\t\t#endif\n\t}\n\t#pragma unroll_loop_end\n#endif\n#if NUM_DIR_LIGHTS > 0\n\t#pragma unroll_loop_start\n\tfor ( int i = 0; i < NUM_DIR_LIGHTS; i ++ ) {\n\t\tgetDirectionalLightInfo( directionalLights[ i ], geometry, directLight );\n\t\tdotNL = dot( geometry.normal, directLight.direction );\n\t\tdirectLightColor_Diffuse = directLight.color;\n\t\tvLightFront += saturate( dotNL ) * directLightColor_Diffuse;\n\t\t#ifdef DOUBLE_SIDED\n\t\t\tvLightBack += saturate( - dotNL ) * directLightColor_Diffuse;\n\t\t#endif\n\t}\n\t#pragma unroll_loop_end\n#endif\n#if NUM_HEMI_LIGHTS > 0\n\t#pragma unroll_loop_start\n\tfor ( int i = 0; i < NUM_HEMI_LIGHTS; i ++ ) {\n\t\tvIndirectFront += getHemisphereLightIrradiance( hemisphereLights[ i ], geometry.normal );\n\t\t#ifdef DOUBLE_SIDED\n\t\t\tvIndirectBack += getHemisphereLightIrradiance( hemisphereLights[ i ], backGeometry.normal );\n\t\t#endif\n\t}\n\t#pragma unroll_loop_end\n#endif",lights_pars_begin:"uniform bool receiveShadow;\nuniform vec3 ambientLightColor;\nuniform vec3 lightProbe[ 9 ];\nvec3 shGetIrradianceAt( in vec3 normal, in vec3 shCoefficients[ 9 ] ) {\n\tfloat x = normal.x, y = normal.y, z = normal.z;\n\tvec3 result = shCoefficients[ 0 ] * 0.886227;\n\tresult += shCoefficients[ 1 ] * 2.0 * 0.511664 * y;\n\tresult += shCoefficients[ 2 ] * 2.0 * 0.511664 * z;\n\tresult += shCoefficients[ 3 ] * 2.0 * 0.511664 * x;\n\tresult += shCoefficients[ 4 ] * 2.0 * 0.429043 * x * y;\n\tresult += shCoefficients[ 5 ] * 2.0 * 0.429043 * y * z;\n\tresult += shCoefficients[ 6 ] * ( 0.743125 * z * z - 0.247708 );\n\tresult += shCoefficients[ 7 ] * 2.0 * 0.429043 * x * z;\n\tresult += shCoefficients[ 8 ] * 0.429043 * ( x * x - y * y );\n\treturn result;\n}\nvec3 getLightProbeIrradiance( const in vec3 lightProbe[ 9 ], const in vec3 normal ) {\n\tvec3 worldNormal = inverseTransformDirection( normal, viewMatrix );\n\tvec3 irradiance = shGetIrradianceAt( worldNormal, lightProbe );\n\treturn irradiance;\n}\nvec3 getAmbientLightIrradiance( const in vec3 ambientLightColor ) {\n\tvec3 irradiance = ambientLightColor;\n\treturn irradiance;\n}\nfloat getDistanceAttenuation( const in float lightDistance, const in float cutoffDistance, const in float decayExponent ) {\n\t#if defined ( PHYSICALLY_CORRECT_LIGHTS )\n\t\tfloat distanceFalloff = 1.0 / max( pow( lightDistance, decayExponent ), 0.01 );\n\t\tif ( cutoffDistance > 0.0 ) {\n\t\t\tdistanceFalloff *= pow2( saturate( 1.0 - pow4( lightDistance / cutoffDistance ) ) );\n\t\t}\n\t\treturn distanceFalloff;\n\t#else\n\t\tif ( cutoffDistance > 0.0 && decayExponent > 0.0 ) {\n\t\t\treturn pow( saturate( - lightDistance / cutoffDistance + 1.0 ), decayExponent );\n\t\t}\n\t\treturn 1.0;\n\t#endif\n}\nfloat getSpotAttenuation( const in float coneCosine, const in float penumbraCosine, const in float angleCosine ) {\n\treturn smoothstep( coneCosine, penumbraCosine, angleCosine );\n}\n#if NUM_DIR_LIGHTS > 0\n\tstruct DirectionalLight {\n\t\tvec3 direction;\n\t\tvec3 color;\n\t};\n\tuniform DirectionalLight directionalLights[ NUM_DIR_LIGHTS ];\n\tvoid getDirectionalLightInfo( const in DirectionalLight directionalLight, const in GeometricContext geometry, out IncidentLight light ) {\n\t\tlight.color = directionalLight.color;\n\t\tlight.direction = directionalLight.direction;\n\t\tlight.visible = true;\n\t}\n#endif\n#if NUM_POINT_LIGHTS > 0\n\tstruct PointLight {\n\t\tvec3 position;\n\t\tvec3 color;\n\t\tfloat distance;\n\t\tfloat decay;\n\t};\n\tuniform PointLight pointLights[ NUM_POINT_LIGHTS ];\n\tvoid getPointLightInfo( const in PointLight pointLight, const in GeometricContext geometry, out IncidentLight light ) {\n\t\tvec3 lVector = pointLight.position - geometry.position;\n\t\tlight.direction = normalize( lVector );\n\t\tfloat lightDistance = length( lVector );\n\t\tlight.color = pointLight.color;\n\t\tlight.color *= getDistanceAttenuation( lightDistance, pointLight.distance, pointLight.decay );\n\t\tlight.visible = ( light.color != vec3( 0.0 ) );\n\t}\n#endif\n#if NUM_SPOT_LIGHTS > 0\n\tstruct SpotLight {\n\t\tvec3 position;\n\t\tvec3 direction;\n\t\tvec3 color;\n\t\tfloat distance;\n\t\tfloat decay;\n\t\tfloat coneCos;\n\t\tfloat penumbraCos;\n\t};\n\tuniform SpotLight spotLights[ NUM_SPOT_LIGHTS ];\n\tvoid getSpotLightInfo( const in SpotLight spotLight, const in GeometricContext geometry, out IncidentLight light ) {\n\t\tvec3 lVector = spotLight.position - geometry.position;\n\t\tlight.direction = normalize( lVector );\n\t\tfloat angleCos = dot( light.direction, spotLight.direction );\n\t\tfloat spotAttenuation = getSpotAttenuation( spotLight.coneCos, spotLight.penumbraCos, angleCos );\n\t\tif ( spotAttenuation > 0.0 ) {\n\t\t\tfloat lightDistance = length( lVector );\n\t\t\tlight.color = spotLight.color * spotAttenuation;\n\t\t\tlight.color *= getDistanceAttenuation( lightDistance, spotLight.distance, spotLight.decay );\n\t\t\tlight.visible = ( light.color != vec3( 0.0 ) );\n\t\t} else {\n\t\t\tlight.color = vec3( 0.0 );\n\t\t\tlight.visible = false;\n\t\t}\n\t}\n#endif\n#if NUM_RECT_AREA_LIGHTS > 0\n\tstruct RectAreaLight {\n\t\tvec3 color;\n\t\tvec3 position;\n\t\tvec3 halfWidth;\n\t\tvec3 halfHeight;\n\t};\n\tuniform sampler2D ltc_1;\tuniform sampler2D ltc_2;\n\tuniform RectAreaLight rectAreaLights[ NUM_RECT_AREA_LIGHTS ];\n#endif\n#if NUM_HEMI_LIGHTS > 0\n\tstruct HemisphereLight {\n\t\tvec3 direction;\n\t\tvec3 skyColor;\n\t\tvec3 groundColor;\n\t};\n\tuniform HemisphereLight hemisphereLights[ NUM_HEMI_LIGHTS ];\n\tvec3 getHemisphereLightIrradiance( const in HemisphereLight hemiLight, const in vec3 normal ) {\n\t\tfloat dotNL = dot( normal, hemiLight.direction );\n\t\tfloat hemiDiffuseWeight = 0.5 * dotNL + 0.5;\n\t\tvec3 irradiance = mix( hemiLight.groundColor, hemiLight.skyColor, hemiDiffuseWeight );\n\t\treturn irradiance;\n\t}\n#endif",lights_toon_fragment:"ToonMaterial material;\nmaterial.diffuseColor = diffuseColor.rgb;",lights_toon_pars_fragment:"varying vec3 vViewPosition;\nstruct ToonMaterial {\n\tvec3 diffuseColor;\n};\nvoid RE_Direct_Toon( const in IncidentLight directLight, const in GeometricContext geometry, const in ToonMaterial material, inout ReflectedLight reflectedLight ) {\n\tvec3 irradiance = getGradientIrradiance( geometry.normal, directLight.direction ) * directLight.color;\n\treflectedLight.directDiffuse += irradiance * BRDF_Lambert( material.diffuseColor );\n}\nvoid RE_IndirectDiffuse_Toon( const in vec3 irradiance, const in GeometricContext geometry, const in ToonMaterial material, inout ReflectedLight reflectedLight ) {\n\treflectedLight.indirectDiffuse += irradiance * BRDF_Lambert( material.diffuseColor );\n}\n#define RE_Direct\t\t\t\tRE_Direct_Toon\n#define RE_IndirectDiffuse\t\tRE_IndirectDiffuse_Toon\n#define Material_LightProbeLOD( material )\t(0)",lights_phong_fragment:"BlinnPhongMaterial material;\nmaterial.diffuseColor = diffuseColor.rgb;\nmaterial.specularColor = specular;\nmaterial.specularShininess = shininess;\nmaterial.specularStrength = specularStrength;",lights_phong_pars_fragment:"varying vec3 vViewPosition;\nstruct BlinnPhongMaterial {\n\tvec3 diffuseColor;\n\tvec3 specularColor;\n\tfloat specularShininess;\n\tfloat specularStrength;\n};\nvoid RE_Direct_BlinnPhong( const in IncidentLight directLight, const in GeometricContext geometry, const in BlinnPhongMaterial material, inout ReflectedLight reflectedLight ) {\n\tfloat dotNL = saturate( dot( geometry.normal, directLight.direction ) );\n\tvec3 irradiance = dotNL * directLight.color;\n\treflectedLight.directDiffuse += irradiance * BRDF_Lambert( material.diffuseColor );\n\treflectedLight.directSpecular += irradiance * BRDF_BlinnPhong( directLight.direction, geometry.viewDir, geometry.normal, material.specularColor, material.specularShininess ) * material.specularStrength;\n}\nvoid RE_IndirectDiffuse_BlinnPhong( const in vec3 irradiance, const in GeometricContext geometry, const in BlinnPhongMaterial material, inout ReflectedLight reflectedLight ) {\n\treflectedLight.indirectDiffuse += irradiance * BRDF_Lambert( material.diffuseColor );\n}\n#define RE_Direct\t\t\t\tRE_Direct_BlinnPhong\n#define RE_IndirectDiffuse\t\tRE_IndirectDiffuse_BlinnPhong\n#define Material_LightProbeLOD( material )\t(0)",lights_physical_fragment:"PhysicalMaterial material;\nmaterial.diffuseColor = diffuseColor.rgb * ( 1.0 - metalnessFactor );\nvec3 dxy = max( abs( dFdx( geometryNormal ) ), abs( dFdy( geometryNormal ) ) );\nfloat geometryRoughness = max( max( dxy.x, dxy.y ), dxy.z );\nmaterial.roughness = max( roughnessFactor, 0.0525 );material.roughness += geometryRoughness;\nmaterial.roughness = min( material.roughness, 1.0 );\n#ifdef IOR\n\t#ifdef SPECULAR\n\t\tfloat specularIntensityFactor = specularIntensity;\n\t\tvec3 specularColorFactor = specularColor;\n\t\t#ifdef USE_SPECULARINTENSITYMAP\n\t\t\tspecularIntensityFactor *= texture2D( specularIntensityMap, vUv ).a;\n\t\t#endif\n\t\t#ifdef USE_SPECULARCOLORMAP\n\t\t\tspecularColorFactor *= texture2D( specularColorMap, vUv ).rgb;\n\t\t#endif\n\t\tmaterial.specularF90 = mix( specularIntensityFactor, 1.0, metalnessFactor );\n\t#else\n\t\tfloat specularIntensityFactor = 1.0;\n\t\tvec3 specularColorFactor = vec3( 1.0 );\n\t\tmaterial.specularF90 = 1.0;\n\t#endif\n\tmaterial.specularColor = mix( min( pow2( ( ior - 1.0 ) / ( ior + 1.0 ) ) * specularColorFactor, vec3( 1.0 ) ) * specularIntensityFactor, diffuseColor.rgb, metalnessFactor );\n#else\n\tmaterial.specularColor = mix( vec3( 0.04 ), diffuseColor.rgb, metalnessFactor );\n\tmaterial.specularF90 = 1.0;\n#endif\n#ifdef USE_CLEARCOAT\n\tmaterial.clearcoat = clearcoat;\n\tmaterial.clearcoatRoughness = clearcoatRoughness;\n\tmaterial.clearcoatF0 = vec3( 0.04 );\n\tmaterial.clearcoatF90 = 1.0;\n\t#ifdef USE_CLEARCOATMAP\n\t\tmaterial.clearcoat *= texture2D( clearcoatMap, vUv ).x;\n\t#endif\n\t#ifdef USE_CLEARCOAT_ROUGHNESSMAP\n\t\tmaterial.clearcoatRoughness *= texture2D( clearcoatRoughnessMap, vUv ).y;\n\t#endif\n\tmaterial.clearcoat = saturate( material.clearcoat );\tmaterial.clearcoatRoughness = max( material.clearcoatRoughness, 0.0525 );\n\tmaterial.clearcoatRoughness += geometryRoughness;\n\tmaterial.clearcoatRoughness = min( material.clearcoatRoughness, 1.0 );\n#endif\n#ifdef USE_SHEEN\n\tmaterial.sheenColor = sheenColor;\n\t#ifdef USE_SHEENCOLORMAP\n\t\tmaterial.sheenColor *= texture2D( sheenColorMap, vUv ).rgb;\n\t#endif\n\tmaterial.sheenRoughness = clamp( sheenRoughness, 0.07, 1.0 );\n\t#ifdef USE_SHEENROUGHNESSMAP\n\t\tmaterial.sheenRoughness *= texture2D( sheenRoughnessMap, vUv ).a;\n\t#endif\n#endif",lights_physical_pars_fragment:"struct PhysicalMaterial {\n\tvec3 diffuseColor;\n\tfloat roughness;\n\tvec3 specularColor;\n\tfloat specularF90;\n\t#ifdef USE_CLEARCOAT\n\t\tfloat clearcoat;\n\t\tfloat clearcoatRoughness;\n\t\tvec3 clearcoatF0;\n\t\tfloat clearcoatF90;\n\t#endif\n\t#ifdef USE_SHEEN\n\t\tvec3 sheenColor;\n\t\tfloat sheenRoughness;\n\t#endif\n};\nvec3 clearcoatSpecular = vec3( 0.0 );\nvec3 sheenSpecular = vec3( 0.0 );\nfloat IBLSheenBRDF( const in vec3 normal, const in vec3 viewDir, const in float roughness) {\n\tfloat dotNV = saturate( dot( normal, viewDir ) );\n\tfloat r2 = roughness * roughness;\n\tfloat a = roughness < 0.25 ? -339.2 * r2 + 161.4 * roughness - 25.9 : -8.48 * r2 + 14.3 * roughness - 9.95;\n\tfloat b = roughness < 0.25 ? 44.0 * r2 - 23.7 * roughness + 3.26 : 1.97 * r2 - 3.27 * roughness + 0.72;\n\tfloat DG = exp( a * dotNV + b ) + ( roughness < 0.25 ? 0.0 : 0.1 * ( roughness - 0.25 ) );\n\treturn saturate( DG * RECIPROCAL_PI );\n}\nvec2 DFGApprox( const in vec3 normal, const in vec3 viewDir, const in float roughness ) {\n\tfloat dotNV = saturate( dot( normal, viewDir ) );\n\tconst vec4 c0 = vec4( - 1, - 0.0275, - 0.572, 0.022 );\n\tconst vec4 c1 = vec4( 1, 0.0425, 1.04, - 0.04 );\n\tvec4 r = roughness * c0 + c1;\n\tfloat a004 = min( r.x * r.x, exp2( - 9.28 * dotNV ) ) * r.x + r.y;\n\tvec2 fab = vec2( - 1.04, 1.04 ) * a004 + r.zw;\n\treturn fab;\n}\nvec3 EnvironmentBRDF( const in vec3 normal, const in vec3 viewDir, const in vec3 specularColor, const in float specularF90, const in float roughness ) {\n\tvec2 fab = DFGApprox( normal, viewDir, roughness );\n\treturn specularColor * fab.x + specularF90 * fab.y;\n}\nvoid computeMultiscattering( const in vec3 normal, const in vec3 viewDir, const in vec3 specularColor, const in float specularF90, const in float roughness, inout vec3 singleScatter, inout vec3 multiScatter ) {\n\tvec2 fab = DFGApprox( normal, viewDir, roughness );\n\tvec3 FssEss = specularColor * fab.x + specularF90 * fab.y;\n\tfloat Ess = fab.x + fab.y;\n\tfloat Ems = 1.0 - Ess;\n\tvec3 Favg = specularColor + ( 1.0 - specularColor ) * 0.047619;\tvec3 Fms = FssEss * Favg / ( 1.0 - Ems * Favg );\n\tsingleScatter += FssEss;\n\tmultiScatter += Fms * Ems;\n}\n#if NUM_RECT_AREA_LIGHTS > 0\n\tvoid RE_Direct_RectArea_Physical( const in RectAreaLight rectAreaLight, const in GeometricContext geometry, const in PhysicalMaterial material, inout ReflectedLight reflectedLight ) {\n\t\tvec3 normal = geometry.normal;\n\t\tvec3 viewDir = geometry.viewDir;\n\t\tvec3 position = geometry.position;\n\t\tvec3 lightPos = rectAreaLight.position;\n\t\tvec3 halfWidth = rectAreaLight.halfWidth;\n\t\tvec3 halfHeight = rectAreaLight.halfHeight;\n\t\tvec3 lightColor = rectAreaLight.color;\n\t\tfloat roughness = material.roughness;\n\t\tvec3 rectCoords[ 4 ];\n\t\trectCoords[ 0 ] = lightPos + halfWidth - halfHeight;\t\trectCoords[ 1 ] = lightPos - halfWidth - halfHeight;\n\t\trectCoords[ 2 ] = lightPos - halfWidth + halfHeight;\n\t\trectCoords[ 3 ] = lightPos + halfWidth + halfHeight;\n\t\tvec2 uv = LTC_Uv( normal, viewDir, roughness );\n\t\tvec4 t1 = texture2D( ltc_1, uv );\n\t\tvec4 t2 = texture2D( ltc_2, uv );\n\t\tmat3 mInv = mat3(\n\t\t\tvec3( t1.x, 0, t1.y ),\n\t\t\tvec3(\t\t0, 1,\t\t0 ),\n\t\t\tvec3( t1.z, 0, t1.w )\n\t\t);\n\t\tvec3 fresnel = ( material.specularColor * t2.x + ( vec3( 1.0 ) - material.specularColor ) * t2.y );\n\t\treflectedLight.directSpecular += lightColor * fresnel * LTC_Evaluate( normal, viewDir, position, mInv, rectCoords );\n\t\treflectedLight.directDiffuse += lightColor * material.diffuseColor * LTC_Evaluate( normal, viewDir, position, mat3( 1.0 ), rectCoords );\n\t}\n#endif\nvoid RE_Direct_Physical( const in IncidentLight directLight, const in GeometricContext geometry, const in PhysicalMaterial material, inout ReflectedLight reflectedLight ) {\n\tfloat dotNL = saturate( dot( geometry.normal, directLight.direction ) );\n\tvec3 irradiance = dotNL * directLight.color;\n\t#ifdef USE_CLEARCOAT\n\t\tfloat dotNLcc = saturate( dot( geometry.clearcoatNormal, directLight.direction ) );\n\t\tvec3 ccIrradiance = dotNLcc * directLight.color;\n\t\tclearcoatSpecular += ccIrradiance * BRDF_GGX( directLight.direction, geometry.viewDir, geometry.clearcoatNormal, material.clearcoatF0, material.clearcoatF90, material.clearcoatRoughness );\n\t#endif\n\t#ifdef USE_SHEEN\n\t\tsheenSpecular += irradiance * BRDF_Sheen( directLight.direction, geometry.viewDir, geometry.normal, material.sheenColor, material.sheenRoughness );\n\t#endif\n\treflectedLight.directSpecular += irradiance * BRDF_GGX( directLight.direction, geometry.viewDir, geometry.normal, material.specularColor, material.specularF90, material.roughness );\n\treflectedLight.directDiffuse += irradiance * BRDF_Lambert( material.diffuseColor );\n}\nvoid RE_IndirectDiffuse_Physical( const in vec3 irradiance, const in GeometricContext geometry, const in PhysicalMaterial material, inout ReflectedLight reflectedLight ) {\n\treflectedLight.indirectDiffuse += irradiance * BRDF_Lambert( material.diffuseColor );\n}\nvoid RE_IndirectSpecular_Physical( const in vec3 radiance, const in vec3 irradiance, const in vec3 clearcoatRadiance, const in GeometricContext geometry, const in PhysicalMaterial material, inout ReflectedLight reflectedLight) {\n\t#ifdef USE_CLEARCOAT\n\t\tclearcoatSpecular += clearcoatRadiance * EnvironmentBRDF( geometry.clearcoatNormal, geometry.viewDir, material.clearcoatF0, material.clearcoatF90, material.clearcoatRoughness );\n\t#endif\n\t#ifdef USE_SHEEN\n\t\tsheenSpecular += irradiance * material.sheenColor * IBLSheenBRDF( geometry.normal, geometry.viewDir, material.sheenRoughness );\n\t#endif\n\tvec3 singleScattering = vec3( 0.0 );\n\tvec3 multiScattering = vec3( 0.0 );\n\tvec3 cosineWeightedIrradiance = irradiance * RECIPROCAL_PI;\n\tcomputeMultiscattering( geometry.normal, geometry.viewDir, material.specularColor, material.specularF90, material.roughness, singleScattering, multiScattering );\n\tvec3 diffuse = material.diffuseColor * ( 1.0 - ( singleScattering + multiScattering ) );\n\treflectedLight.indirectSpecular += radiance * singleScattering;\n\treflectedLight.indirectSpecular += multiScattering * cosineWeightedIrradiance;\n\treflectedLight.indirectDiffuse += diffuse * cosineWeightedIrradiance;\n}\n#define RE_Direct\t\t\t\tRE_Direct_Physical\n#define RE_Direct_RectArea\t\tRE_Direct_RectArea_Physical\n#define RE_IndirectDiffuse\t\tRE_IndirectDiffuse_Physical\n#define RE_IndirectSpecular\t\tRE_IndirectSpecular_Physical\nfloat computeSpecularOcclusion( const in float dotNV, const in float ambientOcclusion, const in float roughness ) {\n\treturn saturate( pow( dotNV + ambientOcclusion, exp2( - 16.0 * roughness - 1.0 ) ) - 1.0 + ambientOcclusion );\n}",lights_fragment_begin:"\nGeometricContext geometry;\ngeometry.position = - vViewPosition;\ngeometry.normal = normal;\ngeometry.viewDir = ( isOrthographic ) ? vec3( 0, 0, 1 ) : normalize( vViewPosition );\n#ifdef USE_CLEARCOAT\n\tgeometry.clearcoatNormal = clearcoatNormal;\n#endif\nIncidentLight directLight;\n#if ( NUM_POINT_LIGHTS > 0 ) && defined( RE_Direct )\n\tPointLight pointLight;\n\t#if defined( USE_SHADOWMAP ) && NUM_POINT_LIGHT_SHADOWS > 0\n\tPointLightShadow pointLightShadow;\n\t#endif\n\t#pragma unroll_loop_start\n\tfor ( int i = 0; i < NUM_POINT_LIGHTS; i ++ ) {\n\t\tpointLight = pointLights[ i ];\n\t\tgetPointLightInfo( pointLight, geometry, directLight );\n\t\t#if defined( USE_SHADOWMAP ) && ( UNROLLED_LOOP_INDEX < NUM_POINT_LIGHT_SHADOWS )\n\t\tpointLightShadow = pointLightShadows[ i ];\n\t\tdirectLight.color *= all( bvec2( directLight.visible, receiveShadow ) ) ? getPointShadow( pointShadowMap[ i ], pointLightShadow.shadowMapSize, pointLightShadow.shadowBias, pointLightShadow.shadowRadius, vPointShadowCoord[ i ], pointLightShadow.shadowCameraNear, pointLightShadow.shadowCameraFar ) : 1.0;\n\t\t#endif\n\t\tRE_Direct( directLight, geometry, material, reflectedLight );\n\t}\n\t#pragma unroll_loop_end\n#endif\n#if ( NUM_SPOT_LIGHTS > 0 ) && defined( RE_Direct )\n\tSpotLight spotLight;\n\t#if defined( USE_SHADOWMAP ) && NUM_SPOT_LIGHT_SHADOWS > 0\n\tSpotLightShadow spotLightShadow;\n\t#endif\n\t#pragma unroll_loop_start\n\tfor ( int i = 0; i < NUM_SPOT_LIGHTS; i ++ ) {\n\t\tspotLight = spotLights[ i ];\n\t\tgetSpotLightInfo( spotLight, geometry, directLight );\n\t\t#if defined( USE_SHADOWMAP ) && ( UNROLLED_LOOP_INDEX < NUM_SPOT_LIGHT_SHADOWS )\n\t\tspotLightShadow = spotLightShadows[ i ];\n\t\tdirectLight.color *= all( bvec2( directLight.visible, receiveShadow ) ) ? getShadow( spotShadowMap[ i ], spotLightShadow.shadowMapSize, spotLightShadow.shadowBias, spotLightShadow.shadowRadius, vSpotShadowCoord[ i ] ) : 1.0;\n\t\t#endif\n\t\tRE_Direct( directLight, geometry, material, reflectedLight );\n\t}\n\t#pragma unroll_loop_end\n#endif\n#if ( NUM_DIR_LIGHTS > 0 ) && defined( RE_Direct )\n\tDirectionalLight directionalLight;\n\t#if defined( USE_SHADOWMAP ) && NUM_DIR_LIGHT_SHADOWS > 0\n\tDirectionalLightShadow directionalLightShadow;\n\t#endif\n\t#pragma unroll_loop_start\n\tfor ( int i = 0; i < NUM_DIR_LIGHTS; i ++ ) {\n\t\tdirectionalLight = directionalLights[ i ];\n\t\tgetDirectionalLightInfo( directionalLight, geometry, directLight );\n\t\t#if defined( USE_SHADOWMAP ) && ( UNROLLED_LOOP_INDEX < NUM_DIR_LIGHT_SHADOWS )\n\t\tdirectionalLightShadow = directionalLightShadows[ i ];\n\t\tdirectLight.color *= all( bvec2( directLight.visible, receiveShadow ) ) ? getShadow( directionalShadowMap[ i ], directionalLightShadow.shadowMapSize, directionalLightShadow.shadowBias, directionalLightShadow.shadowRadius, vDirectionalShadowCoord[ i ] ) : 1.0;\n\t\t#endif\n\t\tRE_Direct( directLight, geometry, material, reflectedLight );\n\t}\n\t#pragma unroll_loop_end\n#endif\n#if ( NUM_RECT_AREA_LIGHTS > 0 ) && defined( RE_Direct_RectArea )\n\tRectAreaLight rectAreaLight;\n\t#pragma unroll_loop_start\n\tfor ( int i = 0; i < NUM_RECT_AREA_LIGHTS; i ++ ) {\n\t\trectAreaLight = rectAreaLights[ i ];\n\t\tRE_Direct_RectArea( rectAreaLight, geometry, material, reflectedLight );\n\t}\n\t#pragma unroll_loop_end\n#endif\n#if defined( RE_IndirectDiffuse )\n\tvec3 iblIrradiance = vec3( 0.0 );\n\tvec3 irradiance = getAmbientLightIrradiance( ambientLightColor );\n\tirradiance += getLightProbeIrradiance( lightProbe, geometry.normal );\n\t#if ( NUM_HEMI_LIGHTS > 0 )\n\t\t#pragma unroll_loop_start\n\t\tfor ( int i = 0; i < NUM_HEMI_LIGHTS; i ++ ) {\n\t\t\tirradiance += getHemisphereLightIrradiance( hemisphereLights[ i ], geometry.normal );\n\t\t}\n\t\t#pragma unroll_loop_end\n\t#endif\n#endif\n#if defined( RE_IndirectSpecular )\n\tvec3 radiance = vec3( 0.0 );\n\tvec3 clearcoatRadiance = vec3( 0.0 );\n#endif",lights_fragment_maps:"#if defined( RE_IndirectDiffuse )\n\t#ifdef USE_LIGHTMAP\n\t\tvec4 lightMapTexel = texture2D( lightMap, vUv2 );\n\t\tvec3 lightMapIrradiance = lightMapTexel.rgb * lightMapIntensity;\n\t\tirradiance += lightMapIrradiance;\n\t#endif\n\t#if defined( USE_ENVMAP ) && defined( STANDARD ) && defined( ENVMAP_TYPE_CUBE_UV )\n\t\tiblIrradiance += getIBLIrradiance( geometry.normal );\n\t#endif\n#endif\n#if defined( USE_ENVMAP ) && defined( RE_IndirectSpecular )\n\tradiance += getIBLRadiance( geometry.viewDir, geometry.normal, material.roughness );\n\t#ifdef USE_CLEARCOAT\n\t\tclearcoatRadiance += getIBLRadiance( geometry.viewDir, geometry.clearcoatNormal, material.clearcoatRoughness );\n\t#endif\n#endif",lights_fragment_end:"#if defined( RE_IndirectDiffuse )\n\tRE_IndirectDiffuse( irradiance, geometry, material, reflectedLight );\n#endif\n#if defined( RE_IndirectSpecular )\n\tRE_IndirectSpecular( radiance, iblIrradiance, clearcoatRadiance, geometry, material, reflectedLight );\n#endif",logdepthbuf_fragment:"#if defined( USE_LOGDEPTHBUF ) && defined( USE_LOGDEPTHBUF_EXT )\n\tgl_FragDepthEXT = vIsPerspective == 0.0 ? gl_FragCoord.z : log2( vFragDepth ) * logDepthBufFC * 0.5;\n#endif",logdepthbuf_pars_fragment:"#if defined( USE_LOGDEPTHBUF ) && defined( USE_LOGDEPTHBUF_EXT )\n\tuniform float logDepthBufFC;\n\tvarying float vFragDepth;\n\tvarying float vIsPerspective;\n#endif",logdepthbuf_pars_vertex:"#ifdef USE_LOGDEPTHBUF\n\t#ifdef USE_LOGDEPTHBUF_EXT\n\t\tvarying float vFragDepth;\n\t\tvarying float vIsPerspective;\n\t#else\n\t\tuniform float logDepthBufFC;\n\t#endif\n#endif",logdepthbuf_vertex:"#ifdef USE_LOGDEPTHBUF\n\t#ifdef USE_LOGDEPTHBUF_EXT\n\t\tvFragDepth = 1.0 + gl_Position.w;\n\t\tvIsPerspective = float( isPerspectiveMatrix( projectionMatrix ) );\n\t#else\n\t\tif ( isPerspectiveMatrix( projectionMatrix ) ) {\n\t\t\tgl_Position.z = log2( max( EPSILON, gl_Position.w + 1.0 ) ) * logDepthBufFC - 1.0;\n\t\t\tgl_Position.z *= gl_Position.w;\n\t\t}\n\t#endif\n#endif",map_fragment:"#ifdef USE_MAP\n\tvec4 sampledDiffuseColor = texture2D( map, vUv );\n\t#ifdef DECODE_VIDEO_TEXTURE\n\t\tsampledDiffuseColor = vec4( mix( pow( sampledDiffuseColor.rgb * 0.9478672986 + vec3( 0.0521327014 ), vec3( 2.4 ) ), sampledDiffuseColor.rgb * 0.0773993808, vec3( lessThanEqual( sampledDiffuseColor.rgb, vec3( 0.04045 ) ) ) ), sampledDiffuseColor.w );\n\t#endif\n\tdiffuseColor *= sampledDiffuseColor;\n#endif",map_pars_fragment:"#ifdef USE_MAP\n\tuniform sampler2D map;\n#endif",map_particle_fragment:"#if defined( USE_MAP ) || defined( USE_ALPHAMAP )\n\tvec2 uv = ( uvTransform * vec3( gl_PointCoord.x, 1.0 - gl_PointCoord.y, 1 ) ).xy;\n#endif\n#ifdef USE_MAP\n\tdiffuseColor *= texture2D( map, uv );\n#endif\n#ifdef USE_ALPHAMAP\n\tdiffuseColor.a *= texture2D( alphaMap, uv ).g;\n#endif",map_particle_pars_fragment:"#if defined( USE_MAP ) || defined( USE_ALPHAMAP )\n\tuniform mat3 uvTransform;\n#endif\n#ifdef USE_MAP\n\tuniform sampler2D map;\n#endif\n#ifdef USE_ALPHAMAP\n\tuniform sampler2D alphaMap;\n#endif",metalnessmap_fragment:"float metalnessFactor = metalness;\n#ifdef USE_METALNESSMAP\n\tvec4 texelMetalness = texture2D( metalnessMap, vUv );\n\tmetalnessFactor *= texelMetalness.b;\n#endif",metalnessmap_pars_fragment:"#ifdef USE_METALNESSMAP\n\tuniform sampler2D metalnessMap;\n#endif",morphcolor_vertex:"#if defined( USE_MORPHCOLORS ) && defined( MORPHTARGETS_TEXTURE )\n\tvColor *= morphTargetBaseInfluence;\n\tfor ( int i = 0; i < MORPHTARGETS_COUNT; i ++ ) {\n\t\t#if defined( USE_COLOR_ALPHA )\n\t\t\tif ( morphTargetInfluences[ i ] != 0.0 ) vColor += getMorph( gl_VertexID, i, 2 ) * morphTargetInfluences[ i ];\n\t\t#elif defined( USE_COLOR )\n\t\t\tif ( morphTargetInfluences[ i ] != 0.0 ) vColor += getMorph( gl_VertexID, i, 2 ).rgb * morphTargetInfluences[ i ];\n\t\t#endif\n\t}\n#endif",morphnormal_vertex:"#ifdef USE_MORPHNORMALS\n\tobjectNormal *= morphTargetBaseInfluence;\n\t#ifdef MORPHTARGETS_TEXTURE\n\t\tfor ( int i = 0; i < MORPHTARGETS_COUNT; i ++ ) {\n\t\t\tif ( morphTargetInfluences[ i ] != 0.0 ) objectNormal += getMorph( gl_VertexID, i, 1 ).xyz * morphTargetInfluences[ i ];\n\t\t}\n\t#else\n\t\tobjectNormal += morphNormal0 * morphTargetInfluences[ 0 ];\n\t\tobjectNormal += morphNormal1 * morphTargetInfluences[ 1 ];\n\t\tobjectNormal += morphNormal2 * morphTargetInfluences[ 2 ];\n\t\tobjectNormal += morphNormal3 * morphTargetInfluences[ 3 ];\n\t#endif\n#endif",morphtarget_pars_vertex:"#ifdef USE_MORPHTARGETS\n\tuniform float morphTargetBaseInfluence;\n\t#ifdef MORPHTARGETS_TEXTURE\n\t\tuniform float morphTargetInfluences[ MORPHTARGETS_COUNT ];\n\t\tuniform sampler2DArray morphTargetsTexture;\n\t\tuniform ivec2 morphTargetsTextureSize;\n\t\tvec4 getMorph( const in int vertexIndex, const in int morphTargetIndex, const in int offset ) {\n\t\t\tint texelIndex = vertexIndex * MORPHTARGETS_TEXTURE_STRIDE + offset;\n\t\t\tint y = texelIndex / morphTargetsTextureSize.x;\n\t\t\tint x = texelIndex - y * morphTargetsTextureSize.x;\n\t\t\tivec3 morphUV = ivec3( x, y, morphTargetIndex );\n\t\t\treturn texelFetch( morphTargetsTexture, morphUV, 0 );\n\t\t}\n\t#else\n\t\t#ifndef USE_MORPHNORMALS\n\t\t\tuniform float morphTargetInfluences[ 8 ];\n\t\t#else\n\t\t\tuniform float morphTargetInfluences[ 4 ];\n\t\t#endif\n\t#endif\n#endif",morphtarget_vertex:"#ifdef USE_MORPHTARGETS\n\ttransformed *= morphTargetBaseInfluence;\n\t#ifdef MORPHTARGETS_TEXTURE\n\t\tfor ( int i = 0; i < MORPHTARGETS_COUNT; i ++ ) {\n\t\t\tif ( morphTargetInfluences[ i ] != 0.0 ) transformed += getMorph( gl_VertexID, i, 0 ).xyz * morphTargetInfluences[ i ];\n\t\t}\n\t#else\n\t\ttransformed += morphTarget0 * morphTargetInfluences[ 0 ];\n\t\ttransformed += morphTarget1 * morphTargetInfluences[ 1 ];\n\t\ttransformed += morphTarget2 * morphTargetInfluences[ 2 ];\n\t\ttransformed += morphTarget3 * morphTargetInfluences[ 3 ];\n\t\t#ifndef USE_MORPHNORMALS\n\t\t\ttransformed += morphTarget4 * morphTargetInfluences[ 4 ];\n\t\t\ttransformed += morphTarget5 * morphTargetInfluences[ 5 ];\n\t\t\ttransformed += morphTarget6 * morphTargetInfluences[ 6 ];\n\t\t\ttransformed += morphTarget7 * morphTargetInfluences[ 7 ];\n\t\t#endif\n\t#endif\n#endif",normal_fragment_begin:"float faceDirection = gl_FrontFacing ? 1.0 : - 1.0;\n#ifdef FLAT_SHADED\n\tvec3 fdx = vec3( dFdx( vViewPosition.x ), dFdx( vViewPosition.y ), dFdx( vViewPosition.z ) );\n\tvec3 fdy = vec3( dFdy( vViewPosition.x ), dFdy( vViewPosition.y ), dFdy( vViewPosition.z ) );\n\tvec3 normal = normalize( cross( fdx, fdy ) );\n#else\n\tvec3 normal = normalize( vNormal );\n\t#ifdef DOUBLE_SIDED\n\t\tnormal = normal * faceDirection;\n\t#endif\n\t#ifdef USE_TANGENT\n\t\tvec3 tangent = normalize( vTangent );\n\t\tvec3 bitangent = normalize( vBitangent );\n\t\t#ifdef DOUBLE_SIDED\n\t\t\ttangent = tangent * faceDirection;\n\t\t\tbitangent = bitangent * faceDirection;\n\t\t#endif\n\t\t#if defined( TANGENTSPACE_NORMALMAP ) || defined( USE_CLEARCOAT_NORMALMAP )\n\t\t\tmat3 vTBN = mat3( tangent, bitangent, normal );\n\t\t#endif\n\t#endif\n#endif\nvec3 geometryNormal = normal;",normal_fragment_maps:"#ifdef OBJECTSPACE_NORMALMAP\n\tnormal = texture2D( normalMap, vUv ).xyz * 2.0 - 1.0;\n\t#ifdef FLIP_SIDED\n\t\tnormal = - normal;\n\t#endif\n\t#ifdef DOUBLE_SIDED\n\t\tnormal = normal * faceDirection;\n\t#endif\n\tnormal = normalize( normalMatrix * normal );\n#elif defined( TANGENTSPACE_NORMALMAP )\n\tvec3 mapN = texture2D( normalMap, vUv ).xyz * 2.0 - 1.0;\n\tmapN.xy *= normalScale;\n\t#ifdef USE_TANGENT\n\t\tnormal = normalize( vTBN * mapN );\n\t#else\n\t\tnormal = perturbNormal2Arb( - vViewPosition, normal, mapN, faceDirection );\n\t#endif\n#elif defined( USE_BUMPMAP )\n\tnormal = perturbNormalArb( - vViewPosition, normal, dHdxy_fwd(), faceDirection );\n#endif",normal_pars_fragment:"#ifndef FLAT_SHADED\n\tvarying vec3 vNormal;\n\t#ifdef USE_TANGENT\n\t\tvarying vec3 vTangent;\n\t\tvarying vec3 vBitangent;\n\t#endif\n#endif",normal_pars_vertex:"#ifndef FLAT_SHADED\n\tvarying vec3 vNormal;\n\t#ifdef USE_TANGENT\n\t\tvarying vec3 vTangent;\n\t\tvarying vec3 vBitangent;\n\t#endif\n#endif",normal_vertex:"#ifndef FLAT_SHADED\n\tvNormal = normalize( transformedNormal );\n\t#ifdef USE_TANGENT\n\t\tvTangent = normalize( transformedTangent );\n\t\tvBitangent = normalize( cross( vNormal, vTangent ) * tangent.w );\n\t#endif\n#endif",normalmap_pars_fragment:"#ifdef USE_NORMALMAP\n\tuniform sampler2D normalMap;\n\tuniform vec2 normalScale;\n#endif\n#ifdef OBJECTSPACE_NORMALMAP\n\tuniform mat3 normalMatrix;\n#endif\n#if ! defined ( USE_TANGENT ) && ( defined ( TANGENTSPACE_NORMALMAP ) || defined ( USE_CLEARCOAT_NORMALMAP ) )\n\tvec3 perturbNormal2Arb( vec3 eye_pos, vec3 surf_norm, vec3 mapN, float faceDirection ) {\n\t\tvec3 q0 = vec3( dFdx( eye_pos.x ), dFdx( eye_pos.y ), dFdx( eye_pos.z ) );\n\t\tvec3 q1 = vec3( dFdy( eye_pos.x ), dFdy( eye_pos.y ), dFdy( eye_pos.z ) );\n\t\tvec2 st0 = dFdx( vUv.st );\n\t\tvec2 st1 = dFdy( vUv.st );\n\t\tvec3 N = surf_norm;\n\t\tvec3 q1perp = cross( q1, N );\n\t\tvec3 q0perp = cross( N, q0 );\n\t\tvec3 T = q1perp * st0.x + q0perp * st1.x;\n\t\tvec3 B = q1perp * st0.y + q0perp * st1.y;\n\t\tfloat det = max( dot( T, T ), dot( B, B ) );\n\t\tfloat scale = ( det == 0.0 ) ? 0.0 : faceDirection * inversesqrt( det );\n\t\treturn normalize( T * ( mapN.x * scale ) + B * ( mapN.y * scale ) + N * mapN.z );\n\t}\n#endif",clearcoat_normal_fragment_begin:"#ifdef USE_CLEARCOAT\n\tvec3 clearcoatNormal = geometryNormal;\n#endif",clearcoat_normal_fragment_maps:"#ifdef USE_CLEARCOAT_NORMALMAP\n\tvec3 clearcoatMapN = texture2D( clearcoatNormalMap, vUv ).xyz * 2.0 - 1.0;\n\tclearcoatMapN.xy *= clearcoatNormalScale;\n\t#ifdef USE_TANGENT\n\t\tclearcoatNormal = normalize( vTBN * clearcoatMapN );\n\t#else\n\t\tclearcoatNormal = perturbNormal2Arb( - vViewPosition, clearcoatNormal, clearcoatMapN, faceDirection );\n\t#endif\n#endif",clearcoat_pars_fragment:"#ifdef USE_CLEARCOATMAP\n\tuniform sampler2D clearcoatMap;\n#endif\n#ifdef USE_CLEARCOAT_ROUGHNESSMAP\n\tuniform sampler2D clearcoatRoughnessMap;\n#endif\n#ifdef USE_CLEARCOAT_NORMALMAP\n\tuniform sampler2D clearcoatNormalMap;\n\tuniform vec2 clearcoatNormalScale;\n#endif",output_fragment:"#ifdef OPAQUE\ndiffuseColor.a = 1.0;\n#endif\n#ifdef USE_TRANSMISSION\ndiffuseColor.a *= transmissionAlpha + 0.1;\n#endif\ngl_FragColor = vec4( outgoingLight, diffuseColor.a );",packing:"vec3 packNormalToRGB( const in vec3 normal ) {\n\treturn normalize( normal ) * 0.5 + 0.5;\n}\nvec3 unpackRGBToNormal( const in vec3 rgb ) {\n\treturn 2.0 * rgb.xyz - 1.0;\n}\nconst float PackUpscale = 256. / 255.;const float UnpackDownscale = 255. / 256.;\nconst vec3 PackFactors = vec3( 256. * 256. * 256., 256. * 256., 256. );\nconst vec4 UnpackFactors = UnpackDownscale / vec4( PackFactors, 1. );\nconst float ShiftRight8 = 1. / 256.;\nvec4 packDepthToRGBA( const in float v ) {\n\tvec4 r = vec4( fract( v * PackFactors ), v );\n\tr.yzw -= r.xyz * ShiftRight8;\treturn r * PackUpscale;\n}\nfloat unpackRGBAToDepth( const in vec4 v ) {\n\treturn dot( v, UnpackFactors );\n}\nvec4 pack2HalfToRGBA( vec2 v ) {\n\tvec4 r = vec4( v.x, fract( v.x * 255.0 ), v.y, fract( v.y * 255.0 ) );\n\treturn vec4( r.x - r.y / 255.0, r.y, r.z - r.w / 255.0, r.w );\n}\nvec2 unpackRGBATo2Half( vec4 v ) {\n\treturn vec2( v.x + ( v.y / 255.0 ), v.z + ( v.w / 255.0 ) );\n}\nfloat viewZToOrthographicDepth( const in float viewZ, const in float near, const in float far ) {\n\treturn ( viewZ + near ) / ( near - far );\n}\nfloat orthographicDepthToViewZ( const in float linearClipZ, const in float near, const in float far ) {\n\treturn linearClipZ * ( near - far ) - near;\n}\nfloat viewZToPerspectiveDepth( const in float viewZ, const in float near, const in float far ) {\n\treturn ( ( near + viewZ ) * far ) / ( ( far - near ) * viewZ );\n}\nfloat perspectiveDepthToViewZ( const in float invClipZ, const in float near, const in float far ) {\n\treturn ( near * far ) / ( ( far - near ) * invClipZ - far );\n}",premultiplied_alpha_fragment:"#ifdef PREMULTIPLIED_ALPHA\n\tgl_FragColor.rgb *= gl_FragColor.a;\n#endif",project_vertex:"vec4 mvPosition = vec4( transformed, 1.0 );\n#ifdef USE_INSTANCING\n\tmvPosition = instanceMatrix * mvPosition;\n#endif\nmvPosition = modelViewMatrix * mvPosition;\ngl_Position = projectionMatrix * mvPosition;",dithering_fragment:"#ifdef DITHERING\n\tgl_FragColor.rgb = dithering( gl_FragColor.rgb );\n#endif",dithering_pars_fragment:"#ifdef DITHERING\n\tvec3 dithering( vec3 color ) {\n\t\tfloat grid_position = rand( gl_FragCoord.xy );\n\t\tvec3 dither_shift_RGB = vec3( 0.25 / 255.0, -0.25 / 255.0, 0.25 / 255.0 );\n\t\tdither_shift_RGB = mix( 2.0 * dither_shift_RGB, -2.0 * dither_shift_RGB, grid_position );\n\t\treturn color + dither_shift_RGB;\n\t}\n#endif",roughnessmap_fragment:"float roughnessFactor = roughness;\n#ifdef USE_ROUGHNESSMAP\n\tvec4 texelRoughness = texture2D( roughnessMap, vUv );\n\troughnessFactor *= texelRoughness.g;\n#endif",roughnessmap_pars_fragment:"#ifdef USE_ROUGHNESSMAP\n\tuniform sampler2D roughnessMap;\n#endif",shadowmap_pars_fragment:"#ifdef USE_SHADOWMAP\n\t#if NUM_DIR_LIGHT_SHADOWS > 0\n\t\tuniform sampler2D directionalShadowMap[ NUM_DIR_LIGHT_SHADOWS ];\n\t\tvarying vec4 vDirectionalShadowCoord[ NUM_DIR_LIGHT_SHADOWS ];\n\t\tstruct DirectionalLightShadow {\n\t\t\tfloat shadowBias;\n\t\t\tfloat shadowNormalBias;\n\t\t\tfloat shadowRadius;\n\t\t\tvec2 shadowMapSize;\n\t\t};\n\t\tuniform DirectionalLightShadow directionalLightShadows[ NUM_DIR_LIGHT_SHADOWS ];\n\t#endif\n\t#if NUM_SPOT_LIGHT_SHADOWS > 0\n\t\tuniform sampler2D spotShadowMap[ NUM_SPOT_LIGHT_SHADOWS ];\n\t\tvarying vec4 vSpotShadowCoord[ NUM_SPOT_LIGHT_SHADOWS ];\n\t\tstruct SpotLightShadow {\n\t\t\tfloat shadowBias;\n\t\t\tfloat shadowNormalBias;\n\t\t\tfloat shadowRadius;\n\t\t\tvec2 shadowMapSize;\n\t\t};\n\t\tuniform SpotLightShadow spotLightShadows[ NUM_SPOT_LIGHT_SHADOWS ];\n\t#endif\n\t#if NUM_POINT_LIGHT_SHADOWS > 0\n\t\tuniform sampler2D pointShadowMap[ NUM_POINT_LIGHT_SHADOWS ];\n\t\tvarying vec4 vPointShadowCoord[ NUM_POINT_LIGHT_SHADOWS ];\n\t\tstruct PointLightShadow {\n\t\t\tfloat shadowBias;\n\t\t\tfloat shadowNormalBias;\n\t\t\tfloat shadowRadius;\n\t\t\tvec2 shadowMapSize;\n\t\t\tfloat shadowCameraNear;\n\t\t\tfloat shadowCameraFar;\n\t\t};\n\t\tuniform PointLightShadow pointLightShadows[ NUM_POINT_LIGHT_SHADOWS ];\n\t#endif\n\tfloat texture2DCompare( sampler2D depths, vec2 uv, float compare ) {\n\t\treturn step( compare, unpackRGBAToDepth( texture2D( depths, uv ) ) );\n\t}\n\tvec2 texture2DDistribution( sampler2D shadow, vec2 uv ) {\n\t\treturn unpackRGBATo2Half( texture2D( shadow, uv ) );\n\t}\n\tfloat VSMShadow (sampler2D shadow, vec2 uv, float compare ){\n\t\tfloat occlusion = 1.0;\n\t\tvec2 distribution = texture2DDistribution( shadow, uv );\n\t\tfloat hard_shadow = step( compare , distribution.x );\n\t\tif (hard_shadow != 1.0 ) {\n\t\t\tfloat distance = compare - distribution.x ;\n\t\t\tfloat variance = max( 0.00000, distribution.y * distribution.y );\n\t\t\tfloat softness_probability = variance / (variance + distance * distance );\t\t\tsoftness_probability = clamp( ( softness_probability - 0.3 ) / ( 0.95 - 0.3 ), 0.0, 1.0 );\t\t\tocclusion = clamp( max( hard_shadow, softness_probability ), 0.0, 1.0 );\n\t\t}\n\t\treturn occlusion;\n\t}\n\tfloat getShadow( sampler2D shadowMap, vec2 shadowMapSize, float shadowBias, float shadowRadius, vec4 shadowCoord ) {\n\t\tfloat shadow = 1.0;\n\t\tshadowCoord.xyz /= shadowCoord.w;\n\t\tshadowCoord.z += shadowBias;\n\t\tbvec4 inFrustumVec = bvec4 ( shadowCoord.x >= 0.0, shadowCoord.x <= 1.0, shadowCoord.y >= 0.0, shadowCoord.y <= 1.0 );\n\t\tbool inFrustum = all( inFrustumVec );\n\t\tbvec2 frustumTestVec = bvec2( inFrustum, shadowCoord.z <= 1.0 );\n\t\tbool frustumTest = all( frustumTestVec );\n\t\tif ( frustumTest ) {\n\t\t#if defined( SHADOWMAP_TYPE_PCF )\n\t\t\tvec2 texelSize = vec2( 1.0 ) / shadowMapSize;\n\t\t\tfloat dx0 = - texelSize.x * shadowRadius;\n\t\t\tfloat dy0 = - texelSize.y * shadowRadius;\n\t\t\tfloat dx1 = + texelSize.x * shadowRadius;\n\t\t\tfloat dy1 = + texelSize.y * shadowRadius;\n\t\t\tfloat dx2 = dx0 / 2.0;\n\t\t\tfloat dy2 = dy0 / 2.0;\n\t\t\tfloat dx3 = dx1 / 2.0;\n\t\t\tfloat dy3 = dy1 / 2.0;\n\t\t\tshadow = (\n\t\t\t\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( dx0, dy0 ), shadowCoord.z ) +\n\t\t\t\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( 0.0, dy0 ), shadowCoord.z ) +\n\t\t\t\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( dx1, dy0 ), shadowCoord.z ) +\n\t\t\t\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( dx2, dy2 ), shadowCoord.z ) +\n\t\t\t\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( 0.0, dy2 ), shadowCoord.z ) +\n\t\t\t\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( dx3, dy2 ), shadowCoord.z ) +\n\t\t\t\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( dx0, 0.0 ), shadowCoord.z ) +\n\t\t\t\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( dx2, 0.0 ), shadowCoord.z ) +\n\t\t\t\ttexture2DCompare( shadowMap, shadowCoord.xy, shadowCoord.z ) +\n\t\t\t\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( dx3, 0.0 ), shadowCoord.z ) +\n\t\t\t\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( dx1, 0.0 ), shadowCoord.z ) +\n\t\t\t\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( dx2, dy3 ), shadowCoord.z ) +\n\t\t\t\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( 0.0, dy3 ), shadowCoord.z ) +\n\t\t\t\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( dx3, dy3 ), shadowCoord.z ) +\n\t\t\t\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( dx0, dy1 ), shadowCoord.z ) +\n\t\t\t\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( 0.0, dy1 ), shadowCoord.z ) +\n\t\t\t\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( dx1, dy1 ), shadowCoord.z )\n\t\t\t) * ( 1.0 / 17.0 );\n\t\t#elif defined( SHADOWMAP_TYPE_PCF_SOFT )\n\t\t\tvec2 texelSize = vec2( 1.0 ) / shadowMapSize;\n\t\t\tfloat dx = texelSize.x;\n\t\t\tfloat dy = texelSize.y;\n\t\t\tvec2 uv = shadowCoord.xy;\n\t\t\tvec2 f = fract( uv * shadowMapSize + 0.5 );\n\t\t\tuv -= f * texelSize;\n\t\t\tshadow = (\n\t\t\t\ttexture2DCompare( shadowMap, uv, shadowCoord.z ) +\n\t\t\t\ttexture2DCompare( shadowMap, uv + vec2( dx, 0.0 ), shadowCoord.z ) +\n\t\t\t\ttexture2DCompare( shadowMap, uv + vec2( 0.0, dy ), shadowCoord.z ) +\n\t\t\t\ttexture2DCompare( shadowMap, uv + texelSize, shadowCoord.z ) +\n\t\t\t\tmix( texture2DCompare( shadowMap, uv + vec2( -dx, 0.0 ), shadowCoord.z ), \n\t\t\t\t\t texture2DCompare( shadowMap, uv + vec2( 2.0 * dx, 0.0 ), shadowCoord.z ),\n\t\t\t\t\t f.x ) +\n\t\t\t\tmix( texture2DCompare( shadowMap, uv + vec2( -dx, dy ), shadowCoord.z ), \n\t\t\t\t\t texture2DCompare( shadowMap, uv + vec2( 2.0 * dx, dy ), shadowCoord.z ),\n\t\t\t\t\t f.x ) +\n\t\t\t\tmix( texture2DCompare( shadowMap, uv + vec2( 0.0, -dy ), shadowCoord.z ), \n\t\t\t\t\t texture2DCompare( shadowMap, uv + vec2( 0.0, 2.0 * dy ), shadowCoord.z ),\n\t\t\t\t\t f.y ) +\n\t\t\t\tmix( texture2DCompare( shadowMap, uv + vec2( dx, -dy ), shadowCoord.z ), \n\t\t\t\t\t texture2DCompare( shadowMap, uv + vec2( dx, 2.0 * dy ), shadowCoord.z ),\n\t\t\t\t\t f.y ) +\n\t\t\t\tmix( mix( texture2DCompare( shadowMap, uv + vec2( -dx, -dy ), shadowCoord.z ), \n\t\t\t\t\t\t\ttexture2DCompare( shadowMap, uv + vec2( 2.0 * dx, -dy ), shadowCoord.z ),\n\t\t\t\t\t\t\tf.x ),\n\t\t\t\t\t mix( texture2DCompare( shadowMap, uv + vec2( -dx, 2.0 * dy ), shadowCoord.z ), \n\t\t\t\t\t\t\ttexture2DCompare( shadowMap, uv + vec2( 2.0 * dx, 2.0 * dy ), shadowCoord.z ),\n\t\t\t\t\t\t\tf.x ),\n\t\t\t\t\t f.y )\n\t\t\t) * ( 1.0 / 9.0 );\n\t\t#elif defined( SHADOWMAP_TYPE_VSM )\n\t\t\tshadow = VSMShadow( shadowMap, shadowCoord.xy, shadowCoord.z );\n\t\t#else\n\t\t\tshadow = texture2DCompare( shadowMap, shadowCoord.xy, shadowCoord.z );\n\t\t#endif\n\t\t}\n\t\treturn shadow;\n\t}\n\tvec2 cubeToUV( vec3 v, float texelSizeY ) {\n\t\tvec3 absV = abs( v );\n\t\tfloat scaleToCube = 1.0 / max( absV.x, max( absV.y, absV.z ) );\n\t\tabsV *= scaleToCube;\n\t\tv *= scaleToCube * ( 1.0 - 2.0 * texelSizeY );\n\t\tvec2 planar = v.xy;\n\t\tfloat almostATexel = 1.5 * texelSizeY;\n\t\tfloat almostOne = 1.0 - almostATexel;\n\t\tif ( absV.z >= almostOne ) {\n\t\t\tif ( v.z > 0.0 )\n\t\t\t\tplanar.x = 4.0 - v.x;\n\t\t} else if ( absV.x >= almostOne ) {\n\t\t\tfloat signX = sign( v.x );\n\t\t\tplanar.x = v.z * signX + 2.0 * signX;\n\t\t} else if ( absV.y >= almostOne ) {\n\t\t\tfloat signY = sign( v.y );\n\t\t\tplanar.x = v.x + 2.0 * signY + 2.0;\n\t\t\tplanar.y = v.z * signY - 2.0;\n\t\t}\n\t\treturn vec2( 0.125, 0.25 ) * planar + vec2( 0.375, 0.75 );\n\t}\n\tfloat getPointShadow( sampler2D shadowMap, vec2 shadowMapSize, float shadowBias, float shadowRadius, vec4 shadowCoord, float shadowCameraNear, float shadowCameraFar ) {\n\t\tvec2 texelSize = vec2( 1.0 ) / ( shadowMapSize * vec2( 4.0, 2.0 ) );\n\t\tvec3 lightToPosition = shadowCoord.xyz;\n\t\tfloat dp = ( length( lightToPosition ) - shadowCameraNear ) / ( shadowCameraFar - shadowCameraNear );\t\tdp += shadowBias;\n\t\tvec3 bd3D = normalize( lightToPosition );\n\t\t#if defined( SHADOWMAP_TYPE_PCF ) || defined( SHADOWMAP_TYPE_PCF_SOFT ) || defined( SHADOWMAP_TYPE_VSM )\n\t\t\tvec2 offset = vec2( - 1, 1 ) * shadowRadius * texelSize.y;\n\t\t\treturn (\n\t\t\t\ttexture2DCompare( shadowMap, cubeToUV( bd3D + offset.xyy, texelSize.y ), dp ) +\n\t\t\t\ttexture2DCompare( shadowMap, cubeToUV( bd3D + offset.yyy, texelSize.y ), dp ) +\n\t\t\t\ttexture2DCompare( shadowMap, cubeToUV( bd3D + offset.xyx, texelSize.y ), dp ) +\n\t\t\t\ttexture2DCompare( shadowMap, cubeToUV( bd3D + offset.yyx, texelSize.y ), dp ) +\n\t\t\t\ttexture2DCompare( shadowMap, cubeToUV( bd3D, texelSize.y ), dp ) +\n\t\t\t\ttexture2DCompare( shadowMap, cubeToUV( bd3D + offset.xxy, texelSize.y ), dp ) +\n\t\t\t\ttexture2DCompare( shadowMap, cubeToUV( bd3D + offset.yxy, texelSize.y ), dp ) +\n\t\t\t\ttexture2DCompare( shadowMap, cubeToUV( bd3D + offset.xxx, texelSize.y ), dp ) +\n\t\t\t\ttexture2DCompare( shadowMap, cubeToUV( bd3D + offset.yxx, texelSize.y ), dp )\n\t\t\t) * ( 1.0 / 9.0 );\n\t\t#else\n\t\t\treturn texture2DCompare( shadowMap, cubeToUV( bd3D, texelSize.y ), dp );\n\t\t#endif\n\t}\n#endif",shadowmap_pars_vertex:"#ifdef USE_SHADOWMAP\n\t#if NUM_DIR_LIGHT_SHADOWS > 0\n\t\tuniform mat4 directionalShadowMatrix[ NUM_DIR_LIGHT_SHADOWS ];\n\t\tvarying vec4 vDirectionalShadowCoord[ NUM_DIR_LIGHT_SHADOWS ];\n\t\tstruct DirectionalLightShadow {\n\t\t\tfloat shadowBias;\n\t\t\tfloat shadowNormalBias;\n\t\t\tfloat shadowRadius;\n\t\t\tvec2 shadowMapSize;\n\t\t};\n\t\tuniform DirectionalLightShadow directionalLightShadows[ NUM_DIR_LIGHT_SHADOWS ];\n\t#endif\n\t#if NUM_SPOT_LIGHT_SHADOWS > 0\n\t\tuniform mat4 spotShadowMatrix[ NUM_SPOT_LIGHT_SHADOWS ];\n\t\tvarying vec4 vSpotShadowCoord[ NUM_SPOT_LIGHT_SHADOWS ];\n\t\tstruct SpotLightShadow {\n\t\t\tfloat shadowBias;\n\t\t\tfloat shadowNormalBias;\n\t\t\tfloat shadowRadius;\n\t\t\tvec2 shadowMapSize;\n\t\t};\n\t\tuniform SpotLightShadow spotLightShadows[ NUM_SPOT_LIGHT_SHADOWS ];\n\t#endif\n\t#if NUM_POINT_LIGHT_SHADOWS > 0\n\t\tuniform mat4 pointShadowMatrix[ NUM_POINT_LIGHT_SHADOWS ];\n\t\tvarying vec4 vPointShadowCoord[ NUM_POINT_LIGHT_SHADOWS ];\n\t\tstruct PointLightShadow {\n\t\t\tfloat shadowBias;\n\t\t\tfloat shadowNormalBias;\n\t\t\tfloat shadowRadius;\n\t\t\tvec2 shadowMapSize;\n\t\t\tfloat shadowCameraNear;\n\t\t\tfloat shadowCameraFar;\n\t\t};\n\t\tuniform PointLightShadow pointLightShadows[ NUM_POINT_LIGHT_SHADOWS ];\n\t#endif\n#endif",shadowmap_vertex:"#ifdef USE_SHADOWMAP\n\t#if NUM_DIR_LIGHT_SHADOWS > 0 || NUM_SPOT_LIGHT_SHADOWS > 0 || NUM_POINT_LIGHT_SHADOWS > 0\n\t\tvec3 shadowWorldNormal = inverseTransformDirection( transformedNormal, viewMatrix );\n\t\tvec4 shadowWorldPosition;\n\t#endif\n\t#if NUM_DIR_LIGHT_SHADOWS > 0\n\t#pragma unroll_loop_start\n\tfor ( int i = 0; i < NUM_DIR_LIGHT_SHADOWS; i ++ ) {\n\t\tshadowWorldPosition = worldPosition + vec4( shadowWorldNormal * directionalLightShadows[ i ].shadowNormalBias, 0 );\n\t\tvDirectionalShadowCoord[ i ] = directionalShadowMatrix[ i ] * shadowWorldPosition;\n\t}\n\t#pragma unroll_loop_end\n\t#endif\n\t#if NUM_SPOT_LIGHT_SHADOWS > 0\n\t#pragma unroll_loop_start\n\tfor ( int i = 0; i < NUM_SPOT_LIGHT_SHADOWS; i ++ ) {\n\t\tshadowWorldPosition = worldPosition + vec4( shadowWorldNormal * spotLightShadows[ i ].shadowNormalBias, 0 );\n\t\tvSpotShadowCoord[ i ] = spotShadowMatrix[ i ] * shadowWorldPosition;\n\t}\n\t#pragma unroll_loop_end\n\t#endif\n\t#if NUM_POINT_LIGHT_SHADOWS > 0\n\t#pragma unroll_loop_start\n\tfor ( int i = 0; i < NUM_POINT_LIGHT_SHADOWS; i ++ ) {\n\t\tshadowWorldPosition = worldPosition + vec4( shadowWorldNormal * pointLightShadows[ i ].shadowNormalBias, 0 );\n\t\tvPointShadowCoord[ i ] = pointShadowMatrix[ i ] * shadowWorldPosition;\n\t}\n\t#pragma unroll_loop_end\n\t#endif\n#endif",shadowmask_pars_fragment:"float getShadowMask() {\n\tfloat shadow = 1.0;\n\t#ifdef USE_SHADOWMAP\n\t#if NUM_DIR_LIGHT_SHADOWS > 0\n\tDirectionalLightShadow directionalLight;\n\t#pragma unroll_loop_start\n\tfor ( int i = 0; i < NUM_DIR_LIGHT_SHADOWS; i ++ ) {\n\t\tdirectionalLight = directionalLightShadows[ i ];\n\t\tshadow *= receiveShadow ? getShadow( directionalShadowMap[ i ], directionalLight.shadowMapSize, directionalLight.shadowBias, directionalLight.shadowRadius, vDirectionalShadowCoord[ i ] ) : 1.0;\n\t}\n\t#pragma unroll_loop_end\n\t#endif\n\t#if NUM_SPOT_LIGHT_SHADOWS > 0\n\tSpotLightShadow spotLight;\n\t#pragma unroll_loop_start\n\tfor ( int i = 0; i < NUM_SPOT_LIGHT_SHADOWS; i ++ ) {\n\t\tspotLight = spotLightShadows[ i ];\n\t\tshadow *= receiveShadow ? getShadow( spotShadowMap[ i ], spotLight.shadowMapSize, spotLight.shadowBias, spotLight.shadowRadius, vSpotShadowCoord[ i ] ) : 1.0;\n\t}\n\t#pragma unroll_loop_end\n\t#endif\n\t#if NUM_POINT_LIGHT_SHADOWS > 0\n\tPointLightShadow pointLight;\n\t#pragma unroll_loop_start\n\tfor ( int i = 0; i < NUM_POINT_LIGHT_SHADOWS; i ++ ) {\n\t\tpointLight = pointLightShadows[ i ];\n\t\tshadow *= receiveShadow ? getPointShadow( pointShadowMap[ i ], pointLight.shadowMapSize, pointLight.shadowBias, pointLight.shadowRadius, vPointShadowCoord[ i ], pointLight.shadowCameraNear, pointLight.shadowCameraFar ) : 1.0;\n\t}\n\t#pragma unroll_loop_end\n\t#endif\n\t#endif\n\treturn shadow;\n}",skinbase_vertex:"#ifdef USE_SKINNING\n\tmat4 boneMatX = getBoneMatrix( skinIndex.x );\n\tmat4 boneMatY = getBoneMatrix( skinIndex.y );\n\tmat4 boneMatZ = getBoneMatrix( skinIndex.z );\n\tmat4 boneMatW = getBoneMatrix( skinIndex.w );\n#endif",skinning_pars_vertex:"#ifdef USE_SKINNING\n\tuniform mat4 bindMatrix;\n\tuniform mat4 bindMatrixInverse;\n\tuniform highp sampler2D boneTexture;\n\tuniform int boneTextureSize;\n\tmat4 getBoneMatrix( const in float i ) {\n\t\tfloat j = i * 4.0;\n\t\tfloat x = mod( j, float( boneTextureSize ) );\n\t\tfloat y = floor( j / float( boneTextureSize ) );\n\t\tfloat dx = 1.0 / float( boneTextureSize );\n\t\tfloat dy = 1.0 / float( boneTextureSize );\n\t\ty = dy * ( y + 0.5 );\n\t\tvec4 v1 = texture2D( boneTexture, vec2( dx * ( x + 0.5 ), y ) );\n\t\tvec4 v2 = texture2D( boneTexture, vec2( dx * ( x + 1.5 ), y ) );\n\t\tvec4 v3 = texture2D( boneTexture, vec2( dx * ( x + 2.5 ), y ) );\n\t\tvec4 v4 = texture2D( boneTexture, vec2( dx * ( x + 3.5 ), y ) );\n\t\tmat4 bone = mat4( v1, v2, v3, v4 );\n\t\treturn bone;\n\t}\n#endif",skinning_vertex:"#ifdef USE_SKINNING\n\tvec4 skinVertex = bindMatrix * vec4( transformed, 1.0 );\n\tvec4 skinned = vec4( 0.0 );\n\tskinned += boneMatX * skinVertex * skinWeight.x;\n\tskinned += boneMatY * skinVertex * skinWeight.y;\n\tskinned += boneMatZ * skinVertex * skinWeight.z;\n\tskinned += boneMatW * skinVertex * skinWeight.w;\n\ttransformed = ( bindMatrixInverse * skinned ).xyz;\n#endif",skinnormal_vertex:"#ifdef USE_SKINNING\n\tmat4 skinMatrix = mat4( 0.0 );\n\tskinMatrix += skinWeight.x * boneMatX;\n\tskinMatrix += skinWeight.y * boneMatY;\n\tskinMatrix += skinWeight.z * boneMatZ;\n\tskinMatrix += skinWeight.w * boneMatW;\n\tskinMatrix = bindMatrixInverse * skinMatrix * bindMatrix;\n\tobjectNormal = vec4( skinMatrix * vec4( objectNormal, 0.0 ) ).xyz;\n\t#ifdef USE_TANGENT\n\t\tobjectTangent = vec4( skinMatrix * vec4( objectTangent, 0.0 ) ).xyz;\n\t#endif\n#endif",specularmap_fragment:"float specularStrength;\n#ifdef USE_SPECULARMAP\n\tvec4 texelSpecular = texture2D( specularMap, vUv );\n\tspecularStrength = texelSpecular.r;\n#else\n\tspecularStrength = 1.0;\n#endif",specularmap_pars_fragment:"#ifdef USE_SPECULARMAP\n\tuniform sampler2D specularMap;\n#endif",tonemapping_fragment:"#if defined( TONE_MAPPING )\n\tgl_FragColor.rgb = toneMapping( gl_FragColor.rgb );\n#endif",tonemapping_pars_fragment:"#ifndef saturate\n#define saturate( a ) clamp( a, 0.0, 1.0 )\n#endif\nuniform float toneMappingExposure;\nvec3 LinearToneMapping( vec3 color ) {\n\treturn toneMappingExposure * color;\n}\nvec3 ReinhardToneMapping( vec3 color ) {\n\tcolor *= toneMappingExposure;\n\treturn saturate( color / ( vec3( 1.0 ) + color ) );\n}\nvec3 OptimizedCineonToneMapping( vec3 color ) {\n\tcolor *= toneMappingExposure;\n\tcolor = max( vec3( 0.0 ), color - 0.004 );\n\treturn pow( ( color * ( 6.2 * color + 0.5 ) ) / ( color * ( 6.2 * color + 1.7 ) + 0.06 ), vec3( 2.2 ) );\n}\nvec3 RRTAndODTFit( vec3 v ) {\n\tvec3 a = v * ( v + 0.0245786 ) - 0.000090537;\n\tvec3 b = v * ( 0.983729 * v + 0.4329510 ) + 0.238081;\n\treturn a / b;\n}\nvec3 ACESFilmicToneMapping( vec3 color ) {\n\tconst mat3 ACESInputMat = mat3(\n\t\tvec3( 0.59719, 0.07600, 0.02840 ),\t\tvec3( 0.35458, 0.90834, 0.13383 ),\n\t\tvec3( 0.04823, 0.01566, 0.83777 )\n\t);\n\tconst mat3 ACESOutputMat = mat3(\n\t\tvec3(\t1.60475, -0.10208, -0.00327 ),\t\tvec3( -0.53108,\t1.10813, -0.07276 ),\n\t\tvec3( -0.07367, -0.00605,\t1.07602 )\n\t);\n\tcolor *= toneMappingExposure / 0.6;\n\tcolor = ACESInputMat * color;\n\tcolor = RRTAndODTFit( color );\n\tcolor = ACESOutputMat * color;\n\treturn saturate( color );\n}\nvec3 CustomToneMapping( vec3 color ) { return color; }",transmission_fragment:"#ifdef USE_TRANSMISSION\n\tfloat transmissionAlpha = 1.0;\n\tfloat transmissionFactor = transmission;\n\tfloat thicknessFactor = thickness;\n\t#ifdef USE_TRANSMISSIONMAP\n\t\ttransmissionFactor *= texture2D( transmissionMap, vUv ).r;\n\t#endif\n\t#ifdef USE_THICKNESSMAP\n\t\tthicknessFactor *= texture2D( thicknessMap, vUv ).g;\n\t#endif\n\tvec3 pos = vWorldPosition;\n\tvec3 v = normalize( cameraPosition - pos );\n\tvec3 n = inverseTransformDirection( normal, viewMatrix );\n\tvec4 transmission = getIBLVolumeRefraction(\n\t\tn, v, roughnessFactor, material.diffuseColor, material.specularColor, material.specularF90,\n\t\tpos, modelMatrix, viewMatrix, projectionMatrix, ior, thicknessFactor,\n\t\tattenuationColor, attenuationDistance );\n\ttotalDiffuse = mix( totalDiffuse, transmission.rgb, transmissionFactor );\n\ttransmissionAlpha = mix( transmissionAlpha, transmission.a, transmissionFactor );\n#endif",transmission_pars_fragment:"#ifdef USE_TRANSMISSION\n\tuniform float transmission;\n\tuniform float thickness;\n\tuniform float attenuationDistance;\n\tuniform vec3 attenuationColor;\n\t#ifdef USE_TRANSMISSIONMAP\n\t\tuniform sampler2D transmissionMap;\n\t#endif\n\t#ifdef USE_THICKNESSMAP\n\t\tuniform sampler2D thicknessMap;\n\t#endif\n\tuniform vec2 transmissionSamplerSize;\n\tuniform sampler2D transmissionSamplerMap;\n\tuniform mat4 modelMatrix;\n\tuniform mat4 projectionMatrix;\n\tvarying vec3 vWorldPosition;\n\tvec3 getVolumeTransmissionRay( const in vec3 n, const in vec3 v, const in float thickness, const in float ior, const in mat4 modelMatrix ) {\n\t\tvec3 refractionVector = refract( - v, normalize( n ), 1.0 / ior );\n\t\tvec3 modelScale;\n\t\tmodelScale.x = length( vec3( modelMatrix[ 0 ].xyz ) );\n\t\tmodelScale.y = length( vec3( modelMatrix[ 1 ].xyz ) );\n\t\tmodelScale.z = length( vec3( modelMatrix[ 2 ].xyz ) );\n\t\treturn normalize( refractionVector ) * thickness * modelScale;\n\t}\n\tfloat applyIorToRoughness( const in float roughness, const in float ior ) {\n\t\treturn roughness * clamp( ior * 2.0 - 2.0, 0.0, 1.0 );\n\t}\n\tvec4 getTransmissionSample( const in vec2 fragCoord, const in float roughness, const in float ior ) {\n\t\tfloat framebufferLod = log2( transmissionSamplerSize.x ) * applyIorToRoughness( roughness, ior );\n\t\t#ifdef texture2DLodEXT\n\t\t\treturn texture2DLodEXT( transmissionSamplerMap, fragCoord.xy, framebufferLod );\n\t\t#else\n\t\t\treturn texture2D( transmissionSamplerMap, fragCoord.xy, framebufferLod );\n\t\t#endif\n\t}\n\tvec3 applyVolumeAttenuation( const in vec3 radiance, const in float transmissionDistance, const in vec3 attenuationColor, const in float attenuationDistance ) {\n\t\tif ( attenuationDistance == 0.0 ) {\n\t\t\treturn radiance;\n\t\t} else {\n\t\t\tvec3 attenuationCoefficient = -log( attenuationColor ) / attenuationDistance;\n\t\t\tvec3 transmittance = exp( - attenuationCoefficient * transmissionDistance );\t\t\treturn transmittance * radiance;\n\t\t}\n\t}\n\tvec4 getIBLVolumeRefraction( const in vec3 n, const in vec3 v, const in float roughness, const in vec3 diffuseColor,\n\t\tconst in vec3 specularColor, const in float specularF90, const in vec3 position, const in mat4 modelMatrix,\n\t\tconst in mat4 viewMatrix, const in mat4 projMatrix, const in float ior, const in float thickness,\n\t\tconst in vec3 attenuationColor, const in float attenuationDistance ) {\n\t\tvec3 transmissionRay = getVolumeTransmissionRay( n, v, thickness, ior, modelMatrix );\n\t\tvec3 refractedRayExit = position + transmissionRay;\n\t\tvec4 ndcPos = projMatrix * viewMatrix * vec4( refractedRayExit, 1.0 );\n\t\tvec2 refractionCoords = ndcPos.xy / ndcPos.w;\n\t\trefractionCoords += 1.0;\n\t\trefractionCoords /= 2.0;\n\t\tvec4 transmittedLight = getTransmissionSample( refractionCoords, roughness, ior );\n\t\tvec3 attenuatedColor = applyVolumeAttenuation( transmittedLight.rgb, length( transmissionRay ), attenuationColor, attenuationDistance );\n\t\tvec3 F = EnvironmentBRDF( n, v, specularColor, specularF90, roughness );\n\t\treturn vec4( ( 1.0 - F ) * attenuatedColor * diffuseColor, transmittedLight.a );\n\t}\n#endif",uv_pars_fragment:"#if ( defined( USE_UV ) && ! defined( UVS_VERTEX_ONLY ) )\n\tvarying vec2 vUv;\n#endif",uv_pars_vertex:"#ifdef USE_UV\n\t#ifdef UVS_VERTEX_ONLY\n\t\tvec2 vUv;\n\t#else\n\t\tvarying vec2 vUv;\n\t#endif\n\tuniform mat3 uvTransform;\n#endif",uv_vertex:"#ifdef USE_UV\n\tvUv = ( uvTransform * vec3( uv, 1 ) ).xy;\n#endif",uv2_pars_fragment:"#if defined( USE_LIGHTMAP ) || defined( USE_AOMAP )\n\tvarying vec2 vUv2;\n#endif",uv2_pars_vertex:"#if defined( USE_LIGHTMAP ) || defined( USE_AOMAP )\n\tattribute vec2 uv2;\n\tvarying vec2 vUv2;\n\tuniform mat3 uv2Transform;\n#endif",uv2_vertex:"#if defined( USE_LIGHTMAP ) || defined( USE_AOMAP )\n\tvUv2 = ( uv2Transform * vec3( uv2, 1 ) ).xy;\n#endif",worldpos_vertex:"#if defined( USE_ENVMAP ) || defined( DISTANCE ) || defined ( USE_SHADOWMAP ) || defined ( USE_TRANSMISSION )\n\tvec4 worldPosition = vec4( transformed, 1.0 );\n\t#ifdef USE_INSTANCING\n\t\tworldPosition = instanceMatrix * worldPosition;\n\t#endif\n\tworldPosition = modelMatrix * worldPosition;\n#endif",background_vert:"varying vec2 vUv;\nuniform mat3 uvTransform;\nvoid main() {\n\tvUv = ( uvTransform * vec3( uv, 1 ) ).xy;\n\tgl_Position = vec4( position.xy, 1.0, 1.0 );\n}",background_frag:"uniform sampler2D t2D;\nvarying vec2 vUv;\nvoid main() {\n\tgl_FragColor = texture2D( t2D, vUv );\n\t#ifdef DECODE_VIDEO_TEXTURE\n\t\tgl_FragColor = vec4( mix( pow( gl_FragColor.rgb * 0.9478672986 + vec3( 0.0521327014 ), vec3( 2.4 ) ), gl_FragColor.rgb * 0.0773993808, vec3( lessThanEqual( gl_FragColor.rgb, vec3( 0.04045 ) ) ) ), gl_FragColor.w );\n\t#endif\n\t#include \n\t#include \n}",cube_vert:"varying vec3 vWorldDirection;\n#include \nvoid main() {\n\tvWorldDirection = transformDirection( position, modelMatrix );\n\t#include \n\t#include \n\tgl_Position.z = gl_Position.w;\n}",cube_frag:"#include \nuniform float opacity;\nvarying vec3 vWorldDirection;\n#include \nvoid main() {\n\tvec3 vReflect = vWorldDirection;\n\t#include \n\tgl_FragColor = envColor;\n\tgl_FragColor.a *= opacity;\n\t#include \n\t#include \n}",depth_vert:"#include \n#include \n#include \n#include \n#include \n#include \n#include \nvarying vec2 vHighPrecisionZW;\nvoid main() {\n\t#include \n\t#include \n\t#ifdef USE_DISPLACEMENTMAP\n\t\t#include \n\t\t#include \n\t\t#include \n\t#endif\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\tvHighPrecisionZW = gl_Position.zw;\n}",depth_frag:"#if DEPTH_PACKING == 3200\n\tuniform float opacity;\n#endif\n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \nvarying vec2 vHighPrecisionZW;\nvoid main() {\n\t#include \n\tvec4 diffuseColor = vec4( 1.0 );\n\t#if DEPTH_PACKING == 3200\n\t\tdiffuseColor.a = opacity;\n\t#endif\n\t#include \n\t#include \n\t#include \n\t#include \n\tfloat fragCoordZ = 0.5 * vHighPrecisionZW[0] / vHighPrecisionZW[1] + 0.5;\n\t#if DEPTH_PACKING == 3200\n\t\tgl_FragColor = vec4( vec3( 1.0 - fragCoordZ ), opacity );\n\t#elif DEPTH_PACKING == 3201\n\t\tgl_FragColor = packDepthToRGBA( fragCoordZ );\n\t#endif\n}",distanceRGBA_vert:"#define DISTANCE\nvarying vec3 vWorldPosition;\n#include \n#include \n#include \n#include \n#include \n#include \nvoid main() {\n\t#include \n\t#include \n\t#ifdef USE_DISPLACEMENTMAP\n\t\t#include \n\t\t#include \n\t\t#include \n\t#endif\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\tvWorldPosition = worldPosition.xyz;\n}",distanceRGBA_frag:"#define DISTANCE\nuniform vec3 referencePosition;\nuniform float nearDistance;\nuniform float farDistance;\nvarying vec3 vWorldPosition;\n#include \n#include \n#include \n#include \n#include \n#include \n#include \nvoid main () {\n\t#include \n\tvec4 diffuseColor = vec4( 1.0 );\n\t#include \n\t#include \n\t#include \n\tfloat dist = length( vWorldPosition - referencePosition );\n\tdist = ( dist - nearDistance ) / ( farDistance - nearDistance );\n\tdist = saturate( dist );\n\tgl_FragColor = packDepthToRGBA( dist );\n}",equirect_vert:"varying vec3 vWorldDirection;\n#include \nvoid main() {\n\tvWorldDirection = transformDirection( position, modelMatrix );\n\t#include \n\t#include \n}",equirect_frag:"uniform sampler2D tEquirect;\nvarying vec3 vWorldDirection;\n#include \nvoid main() {\n\tvec3 direction = normalize( vWorldDirection );\n\tvec2 sampleUV = equirectUv( direction );\n\tgl_FragColor = texture2D( tEquirect, sampleUV );\n\t#include \n\t#include \n}",linedashed_vert:"uniform float scale;\nattribute float lineDistance;\nvarying float vLineDistance;\n#include \n#include \n#include \n#include \n#include \n#include \nvoid main() {\n\tvLineDistance = scale * lineDistance;\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n}",linedashed_frag:"uniform vec3 diffuse;\nuniform float opacity;\nuniform float dashSize;\nuniform float totalSize;\nvarying float vLineDistance;\n#include \n#include \n#include \n#include \n#include \nvoid main() {\n\t#include \n\tif ( mod( vLineDistance, totalSize ) > dashSize ) {\n\t\tdiscard;\n\t}\n\tvec3 outgoingLight = vec3( 0.0 );\n\tvec4 diffuseColor = vec4( diffuse, opacity );\n\t#include \n\t#include \n\toutgoingLight = diffuseColor.rgb;\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n}",meshbasic_vert:"#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \nvoid main() {\n\t#include \n\t#include \n\t#include \n\t#include \n\t#if defined ( USE_ENVMAP ) || defined ( USE_SKINNING )\n\t\t#include \n\t\t#include \n\t\t#include \n\t\t#include \n\t\t#include \n\t#endif\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n}",meshbasic_frag:"uniform vec3 diffuse;\nuniform float opacity;\n#ifndef FLAT_SHADED\n\tvarying vec3 vNormal;\n#endif\n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \nvoid main() {\n\t#include \n\tvec4 diffuseColor = vec4( diffuse, opacity );\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\tReflectedLight reflectedLight = ReflectedLight( vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ) );\n\t#ifdef USE_LIGHTMAP\n\t\tvec4 lightMapTexel = texture2D( lightMap, vUv2 );\n\t\treflectedLight.indirectDiffuse += lightMapTexel.rgb * lightMapIntensity * RECIPROCAL_PI;\n\t#else\n\t\treflectedLight.indirectDiffuse += vec3( 1.0 );\n\t#endif\n\t#include \n\treflectedLight.indirectDiffuse *= diffuseColor.rgb;\n\tvec3 outgoingLight = reflectedLight.indirectDiffuse;\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n}",meshlambert_vert:"#define LAMBERT\nvarying vec3 vLightFront;\nvarying vec3 vIndirectFront;\n#ifdef DOUBLE_SIDED\n\tvarying vec3 vLightBack;\n\tvarying vec3 vIndirectBack;\n#endif\n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \nvoid main() {\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n}",meshlambert_frag:"uniform vec3 diffuse;\nuniform vec3 emissive;\nuniform float opacity;\nvarying vec3 vLightFront;\nvarying vec3 vIndirectFront;\n#ifdef DOUBLE_SIDED\n\tvarying vec3 vLightBack;\n\tvarying vec3 vIndirectBack;\n#endif\n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \nvoid main() {\n\t#include \n\tvec4 diffuseColor = vec4( diffuse, opacity );\n\tReflectedLight reflectedLight = ReflectedLight( vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ) );\n\tvec3 totalEmissiveRadiance = emissive;\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#ifdef DOUBLE_SIDED\n\t\treflectedLight.indirectDiffuse += ( gl_FrontFacing ) ? vIndirectFront : vIndirectBack;\n\t#else\n\t\treflectedLight.indirectDiffuse += vIndirectFront;\n\t#endif\n\t#include \n\treflectedLight.indirectDiffuse *= BRDF_Lambert( diffuseColor.rgb );\n\t#ifdef DOUBLE_SIDED\n\t\treflectedLight.directDiffuse = ( gl_FrontFacing ) ? vLightFront : vLightBack;\n\t#else\n\t\treflectedLight.directDiffuse = vLightFront;\n\t#endif\n\treflectedLight.directDiffuse *= BRDF_Lambert( diffuseColor.rgb ) * getShadowMask();\n\t#include \n\tvec3 outgoingLight = reflectedLight.directDiffuse + reflectedLight.indirectDiffuse + totalEmissiveRadiance;\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n}",meshmatcap_vert:"#define MATCAP\nvarying vec3 vViewPosition;\n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \nvoid main() {\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\tvViewPosition = - mvPosition.xyz;\n}",meshmatcap_frag:"#define MATCAP\nuniform vec3 diffuse;\nuniform float opacity;\nuniform sampler2D matcap;\nvarying vec3 vViewPosition;\n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \nvoid main() {\n\t#include \n\tvec4 diffuseColor = vec4( diffuse, opacity );\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\tvec3 viewDir = normalize( vViewPosition );\n\tvec3 x = normalize( vec3( viewDir.z, 0.0, - viewDir.x ) );\n\tvec3 y = cross( viewDir, x );\n\tvec2 uv = vec2( dot( x, normal ), dot( y, normal ) ) * 0.495 + 0.5;\n\t#ifdef USE_MATCAP\n\t\tvec4 matcapColor = texture2D( matcap, uv );\n\t#else\n\t\tvec4 matcapColor = vec4( vec3( mix( 0.2, 0.8, uv.y ) ), 1.0 );\n\t#endif\n\tvec3 outgoingLight = diffuseColor.rgb * matcapColor.rgb;\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n}",meshnormal_vert:"#define NORMAL\n#if defined( FLAT_SHADED ) || defined( USE_BUMPMAP ) || defined( TANGENTSPACE_NORMALMAP )\n\tvarying vec3 vViewPosition;\n#endif\n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \nvoid main() {\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n#if defined( FLAT_SHADED ) || defined( USE_BUMPMAP ) || defined( TANGENTSPACE_NORMALMAP )\n\tvViewPosition = - mvPosition.xyz;\n#endif\n}",meshnormal_frag:"#define NORMAL\nuniform float opacity;\n#if defined( FLAT_SHADED ) || defined( USE_BUMPMAP ) || defined( TANGENTSPACE_NORMALMAP )\n\tvarying vec3 vViewPosition;\n#endif\n#include \n#include \n#include \n#include \n#include \n#include \n#include \nvoid main() {\n\t#include \n\t#include \n\t#include \n\t#include \n\tgl_FragColor = vec4( packNormalToRGB( normal ), opacity );\n\t#ifdef OPAQUE\n\t\tgl_FragColor.a = 1.0;\n\t#endif\n}",meshphong_vert:"#define PHONG\nvarying vec3 vViewPosition;\n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \nvoid main() {\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\tvViewPosition = - mvPosition.xyz;\n\t#include \n\t#include \n\t#include \n\t#include \n}",meshphong_frag:"#define PHONG\nuniform vec3 diffuse;\nuniform vec3 emissive;\nuniform vec3 specular;\nuniform float shininess;\nuniform float opacity;\n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \nvoid main() {\n\t#include \n\tvec4 diffuseColor = vec4( diffuse, opacity );\n\tReflectedLight reflectedLight = ReflectedLight( vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ) );\n\tvec3 totalEmissiveRadiance = emissive;\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\tvec3 outgoingLight = reflectedLight.directDiffuse + reflectedLight.indirectDiffuse + reflectedLight.directSpecular + reflectedLight.indirectSpecular + totalEmissiveRadiance;\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n}",meshphysical_vert:"#define STANDARD\nvarying vec3 vViewPosition;\n#ifdef USE_TRANSMISSION\n\tvarying vec3 vWorldPosition;\n#endif\n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \nvoid main() {\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\tvViewPosition = - mvPosition.xyz;\n\t#include \n\t#include \n\t#include \n#ifdef USE_TRANSMISSION\n\tvWorldPosition = worldPosition.xyz;\n#endif\n}",meshphysical_frag:"#define STANDARD\n#ifdef PHYSICAL\n\t#define IOR\n\t#define SPECULAR\n#endif\nuniform vec3 diffuse;\nuniform vec3 emissive;\nuniform float roughness;\nuniform float metalness;\nuniform float opacity;\n#ifdef IOR\n\tuniform float ior;\n#endif\n#ifdef SPECULAR\n\tuniform float specularIntensity;\n\tuniform vec3 specularColor;\n\t#ifdef USE_SPECULARINTENSITYMAP\n\t\tuniform sampler2D specularIntensityMap;\n\t#endif\n\t#ifdef USE_SPECULARCOLORMAP\n\t\tuniform sampler2D specularColorMap;\n\t#endif\n#endif\n#ifdef USE_CLEARCOAT\n\tuniform float clearcoat;\n\tuniform float clearcoatRoughness;\n#endif\n#ifdef USE_SHEEN\n\tuniform vec3 sheenColor;\n\tuniform float sheenRoughness;\n\t#ifdef USE_SHEENCOLORMAP\n\t\tuniform sampler2D sheenColorMap;\n\t#endif\n\t#ifdef USE_SHEENROUGHNESSMAP\n\t\tuniform sampler2D sheenRoughnessMap;\n\t#endif\n#endif\nvarying vec3 vViewPosition;\n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \nvoid main() {\n\t#include \n\tvec4 diffuseColor = vec4( diffuse, opacity );\n\tReflectedLight reflectedLight = ReflectedLight( vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ) );\n\tvec3 totalEmissiveRadiance = emissive;\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\tvec3 totalDiffuse = reflectedLight.directDiffuse + reflectedLight.indirectDiffuse;\n\tvec3 totalSpecular = reflectedLight.directSpecular + reflectedLight.indirectSpecular;\n\t#include \n\tvec3 outgoingLight = totalDiffuse + totalSpecular + totalEmissiveRadiance;\n\t#ifdef USE_SHEEN\n\t\tfloat sheenEnergyComp = 1.0 - 0.157 * max3( material.sheenColor );\n\t\toutgoingLight = outgoingLight * sheenEnergyComp + sheenSpecular;\n\t#endif\n\t#ifdef USE_CLEARCOAT\n\t\tfloat dotNVcc = saturate( dot( geometry.clearcoatNormal, geometry.viewDir ) );\n\t\tvec3 Fcc = F_Schlick( material.clearcoatF0, material.clearcoatF90, dotNVcc );\n\t\toutgoingLight = outgoingLight * ( 1.0 - material.clearcoat * Fcc ) + clearcoatSpecular * material.clearcoat;\n\t#endif\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n}",meshtoon_vert:"#define TOON\nvarying vec3 vViewPosition;\n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \nvoid main() {\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\tvViewPosition = - mvPosition.xyz;\n\t#include \n\t#include \n\t#include \n}",meshtoon_frag:"#define TOON\nuniform vec3 diffuse;\nuniform vec3 emissive;\nuniform float opacity;\n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \nvoid main() {\n\t#include \n\tvec4 diffuseColor = vec4( diffuse, opacity );\n\tReflectedLight reflectedLight = ReflectedLight( vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ) );\n\tvec3 totalEmissiveRadiance = emissive;\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\tvec3 outgoingLight = reflectedLight.directDiffuse + reflectedLight.indirectDiffuse + totalEmissiveRadiance;\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n}",points_vert:"uniform float size;\nuniform float scale;\n#include \n#include \n#include \n#include \n#include \n#include \nvoid main() {\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\tgl_PointSize = size;\n\t#ifdef USE_SIZEATTENUATION\n\t\tbool isPerspective = isPerspectiveMatrix( projectionMatrix );\n\t\tif ( isPerspective ) gl_PointSize *= ( scale / - mvPosition.z );\n\t#endif\n\t#include \n\t#include \n\t#include \n\t#include \n}",points_frag:"uniform vec3 diffuse;\nuniform float opacity;\n#include \n#include \n#include \n#include \n#include \n#include \n#include \nvoid main() {\n\t#include \n\tvec3 outgoingLight = vec3( 0.0 );\n\tvec4 diffuseColor = vec4( diffuse, opacity );\n\t#include \n\t#include \n\t#include \n\t#include \n\toutgoingLight = diffuseColor.rgb;\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n}",shadow_vert:"#include \n#include \n#include \n#include \n#include \nvoid main() {\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n}",shadow_frag:"uniform vec3 color;\nuniform float opacity;\n#include \n#include \n#include \n#include \n#include \n#include \n#include \nvoid main() {\n\tgl_FragColor = vec4( color, opacity * ( 1.0 - getShadowMask() ) );\n\t#include \n\t#include \n\t#include \n}",sprite_vert:"uniform float rotation;\nuniform vec2 center;\n#include \n#include \n#include \n#include \n#include \nvoid main() {\n\t#include \n\tvec4 mvPosition = modelViewMatrix * vec4( 0.0, 0.0, 0.0, 1.0 );\n\tvec2 scale;\n\tscale.x = length( vec3( modelMatrix[ 0 ].x, modelMatrix[ 0 ].y, modelMatrix[ 0 ].z ) );\n\tscale.y = length( vec3( modelMatrix[ 1 ].x, modelMatrix[ 1 ].y, modelMatrix[ 1 ].z ) );\n\t#ifndef USE_SIZEATTENUATION\n\t\tbool isPerspective = isPerspectiveMatrix( projectionMatrix );\n\t\tif ( isPerspective ) scale *= - mvPosition.z;\n\t#endif\n\tvec2 alignedPosition = ( position.xy - ( center - vec2( 0.5 ) ) ) * scale;\n\tvec2 rotatedPosition;\n\trotatedPosition.x = cos( rotation ) * alignedPosition.x - sin( rotation ) * alignedPosition.y;\n\trotatedPosition.y = sin( rotation ) * alignedPosition.x + cos( rotation ) * alignedPosition.y;\n\tmvPosition.xy += rotatedPosition;\n\tgl_Position = projectionMatrix * mvPosition;\n\t#include \n\t#include \n\t#include \n}",sprite_frag:"uniform vec3 diffuse;\nuniform float opacity;\n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \nvoid main() {\n\t#include \n\tvec3 outgoingLight = vec3( 0.0 );\n\tvec4 diffuseColor = vec4( diffuse, opacity );\n\t#include \n\t#include \n\t#include \n\t#include \n\toutgoingLight = diffuseColor.rgb;\n\t#include \n\t#include \n\t#include \n\t#include \n}"},Pi={common:{diffuse:{value:new Wt(16777215)},opacity:{value:1},map:{value:null},uvTransform:{value:new Ct},uv2Transform:{value:new Ct},alphaMap:{value:null},alphaTest:{value:0}},specularmap:{specularMap:{value:null}},envmap:{envMap:{value:null},flipEnvMap:{value:-1},reflectivity:{value:1},ior:{value:1.5},refractionRatio:{value:.98}},aomap:{aoMap:{value:null},aoMapIntensity:{value:1}},lightmap:{lightMap:{value:null},lightMapIntensity:{value:1}},emissivemap:{emissiveMap:{value:null}},bumpmap:{bumpMap:{value:null},bumpScale:{value:1}},normalmap:{normalMap:{value:null},normalScale:{value:new Rt(1,1)}},displacementmap:{displacementMap:{value:null},displacementScale:{value:1},displacementBias:{value:0}},roughnessmap:{roughnessMap:{value:null}},metalnessmap:{metalnessMap:{value:null}},gradientmap:{gradientMap:{value:null}},fog:{fogDensity:{value:25e-5},fogNear:{value:1},fogFar:{value:2e3},fogColor:{value:new Wt(16777215)}},lights:{ambientLightColor:{value:[]},lightProbe:{value:[]},directionalLights:{value:[],properties:{direction:{},color:{}}},directionalLightShadows:{value:[],properties:{shadowBias:{},shadowNormalBias:{},shadowRadius:{},shadowMapSize:{}}},directionalShadowMap:{value:[]},directionalShadowMatrix:{value:[]},spotLights:{value:[],properties:{color:{},position:{},direction:{},distance:{},coneCos:{},penumbraCos:{},decay:{}}},spotLightShadows:{value:[],properties:{shadowBias:{},shadowNormalBias:{},shadowRadius:{},shadowMapSize:{}}},spotShadowMap:{value:[]},spotShadowMatrix:{value:[]},pointLights:{value:[],properties:{color:{},position:{},decay:{},distance:{}}},pointLightShadows:{value:[],properties:{shadowBias:{},shadowNormalBias:{},shadowRadius:{},shadowMapSize:{},shadowCameraNear:{},shadowCameraFar:{}}},pointShadowMap:{value:[]},pointShadowMatrix:{value:[]},hemisphereLights:{value:[],properties:{direction:{},skyColor:{},groundColor:{}}},rectAreaLights:{value:[],properties:{color:{},position:{},width:{},height:{}}},ltc_1:{value:null},ltc_2:{value:null}},points:{diffuse:{value:new Wt(16777215)},opacity:{value:1},size:{value:1},scale:{value:1},map:{value:null},alphaMap:{value:null},alphaTest:{value:0},uvTransform:{value:new Ct}},sprite:{diffuse:{value:new Wt(16777215)},opacity:{value:1},center:{value:new Rt(.5,.5)},rotation:{value:0},map:{value:null},alphaMap:{value:null},alphaTest:{value:0},uvTransform:{value:new Ct}}},Di={basic:{uniforms:ui([Pi.common,Pi.specularmap,Pi.envmap,Pi.aomap,Pi.lightmap,Pi.fog]),vertexShader:Li.meshbasic_vert,fragmentShader:Li.meshbasic_frag},lambert:{uniforms:ui([Pi.common,Pi.specularmap,Pi.envmap,Pi.aomap,Pi.lightmap,Pi.emissivemap,Pi.fog,Pi.lights,{emissive:{value:new Wt(0)}}]),vertexShader:Li.meshlambert_vert,fragmentShader:Li.meshlambert_frag},phong:{uniforms:ui([Pi.common,Pi.specularmap,Pi.envmap,Pi.aomap,Pi.lightmap,Pi.emissivemap,Pi.bumpmap,Pi.normalmap,Pi.displacementmap,Pi.fog,Pi.lights,{emissive:{value:new Wt(0)},specular:{value:new Wt(1118481)},shininess:{value:30}}]),vertexShader:Li.meshphong_vert,fragmentShader:Li.meshphong_frag},standard:{uniforms:ui([Pi.common,Pi.envmap,Pi.aomap,Pi.lightmap,Pi.emissivemap,Pi.bumpmap,Pi.normalmap,Pi.displacementmap,Pi.roughnessmap,Pi.metalnessmap,Pi.fog,Pi.lights,{emissive:{value:new Wt(0)},roughness:{value:1},metalness:{value:0},envMapIntensity:{value:1}}]),vertexShader:Li.meshphysical_vert,fragmentShader:Li.meshphysical_frag},toon:{uniforms:ui([Pi.common,Pi.aomap,Pi.lightmap,Pi.emissivemap,Pi.bumpmap,Pi.normalmap,Pi.displacementmap,Pi.gradientmap,Pi.fog,Pi.lights,{emissive:{value:new Wt(0)}}]),vertexShader:Li.meshtoon_vert,fragmentShader:Li.meshtoon_frag},matcap:{uniforms:ui([Pi.common,Pi.bumpmap,Pi.normalmap,Pi.displacementmap,Pi.fog,{matcap:{value:null}}]),vertexShader:Li.meshmatcap_vert,fragmentShader:Li.meshmatcap_frag},points:{uniforms:ui([Pi.points,Pi.fog]),vertexShader:Li.points_vert,fragmentShader:Li.points_frag},dashed:{uniforms:ui([Pi.common,Pi.fog,{scale:{value:1},dashSize:{value:1},totalSize:{value:2}}]),vertexShader:Li.linedashed_vert,fragmentShader:Li.linedashed_frag},depth:{uniforms:ui([Pi.common,Pi.displacementmap]),vertexShader:Li.depth_vert,fragmentShader:Li.depth_frag},normal:{uniforms:ui([Pi.common,Pi.bumpmap,Pi.normalmap,Pi.displacementmap,{opacity:{value:1}}]),vertexShader:Li.meshnormal_vert,fragmentShader:Li.meshnormal_frag},sprite:{uniforms:ui([Pi.sprite,Pi.fog]),vertexShader:Li.sprite_vert,fragmentShader:Li.sprite_frag},background:{uniforms:{uvTransform:{value:new Ct},t2D:{value:null}},vertexShader:Li.background_vert,fragmentShader:Li.background_frag},cube:{uniforms:ui([Pi.envmap,{opacity:{value:1}}]),vertexShader:Li.cube_vert,fragmentShader:Li.cube_frag},equirect:{uniforms:{tEquirect:{value:null}},vertexShader:Li.equirect_vert,fragmentShader:Li.equirect_frag},distanceRGBA:{uniforms:ui([Pi.common,Pi.displacementmap,{referencePosition:{value:new se},nearDistance:{value:1},farDistance:{value:1e3}}]),vertexShader:Li.distanceRGBA_vert,fragmentShader:Li.distanceRGBA_frag},shadow:{uniforms:ui([Pi.lights,Pi.fog,{color:{value:new Wt(0)},opacity:{value:1}}]),vertexShader:Li.shadow_vert,fragmentShader:Li.shadow_frag}};function Ii(t,e,n,i,r,s){const a=new Wt(0);let o,c,h=!0===r?0:1,u=null,d=0,p=null;function m(t,e){n.buffers.color.setClear(t.r,t.g,t.b,e,s)}return{getClearColor:function(){return a},setClearColor:function(t,e=1){a.set(t),h=e,m(a,h)},getClearAlpha:function(){return h},setClearAlpha:function(t){h=t,m(a,h)},render:function(n,r){let s=!1,f=!0===r.isScene?r.background:null;f&&f.isTexture&&(f=e.get(f));const g=t.xr,v=g.getSession&&g.getSession();v&&"additive"===v.environmentBlendMode&&(f=null),null===f?m(a,h):f&&f.isColor&&(m(f,1),s=!0),(t.autoClear||s)&&t.clear(t.autoClearColor,t.autoClearDepth,t.autoClearStencil),f&&(f.isCubeTexture||f.mapping===l)?(void 0===c&&(c=new oi(new ci(1,1,1),new pi({name:"BackgroundCubeMaterial",uniforms:hi(Di.cube.uniforms),vertexShader:Di.cube.vertexShader,fragmentShader:Di.cube.fragmentShader,side:1,depthTest:!1,depthWrite:!1,fog:!1})),c.geometry.deleteAttribute("normal"),c.geometry.deleteAttribute("uv"),c.onBeforeRender=function(t,e,n){this.matrixWorld.copyPosition(n.matrixWorld)},Object.defineProperty(c.material,"envMap",{get:function(){return this.uniforms.envMap.value}}),i.update(c)),c.material.uniforms.envMap.value=f,c.material.uniforms.flipEnvMap.value=f.isCubeTexture&&!1===f.isRenderTargetTexture?-1:1,u===f&&d===f.version&&p===t.toneMapping||(c.material.needsUpdate=!0,u=f,d=f.version,p=t.toneMapping),c.layers.enableAll(),n.unshift(c,c.geometry,c.material,0,0,null)):f&&f.isTexture&&(void 0===o&&(o=new oi(new Ci(2,2),new pi({name:"BackgroundMaterial",uniforms:hi(Di.background.uniforms),vertexShader:Di.background.vertexShader,fragmentShader:Di.background.fragmentShader,side:0,depthTest:!1,depthWrite:!1,fog:!1})),o.geometry.deleteAttribute("normal"),Object.defineProperty(o.material,"map",{get:function(){return this.uniforms.t2D.value}}),i.update(o)),o.material.uniforms.t2D.value=f,!0===f.matrixAutoUpdate&&f.updateMatrix(),o.material.uniforms.uvTransform.value.copy(f.matrix),u===f&&d===f.version&&p===t.toneMapping||(o.material.needsUpdate=!0,u=f,d=f.version,p=t.toneMapping),o.layers.enableAll(),n.unshift(o,o.geometry,o.material,0,0,null))}}}function Ni(t,e,n,i){const r=t.getParameter(34921),s=i.isWebGL2?null:e.get("OES_vertex_array_object"),a=i.isWebGL2||null!==s,o={},l=p(null);let c=l,h=!1;function u(e){return i.isWebGL2?t.bindVertexArray(e):s.bindVertexArrayOES(e)}function d(e){return i.isWebGL2?t.deleteVertexArray(e):s.deleteVertexArrayOES(e)}function p(t){const e=[],n=[],i=[];for(let t=0;t=0){const n=r[e];let i=s[e];if(void 0===i&&("instanceMatrix"===e&&t.instanceMatrix&&(i=t.instanceMatrix),"instanceColor"===e&&t.instanceColor&&(i=t.instanceColor)),void 0===n)return!0;if(n.attribute!==i)return!0;if(i&&n.data!==i.data)return!0;a++}}return c.attributesNum!==a||c.index!==i}(r,x,d,_),b&&function(t,e,n,i){const r={},s=e.attributes;let a=0;const o=n.getAttributes();for(const e in o){if(o[e].location>=0){let n=s[e];void 0===n&&("instanceMatrix"===e&&t.instanceMatrix&&(n=t.instanceMatrix),"instanceColor"===e&&t.instanceColor&&(n=t.instanceColor));const i={};i.attribute=n,n&&n.data&&(i.data=n.data),r[e]=i,a++}}c.attributes=r,c.attributesNum=a,c.index=i}(r,x,d,_)}else{const t=!0===l.wireframe;c.geometry===x.id&&c.program===d.id&&c.wireframe===t||(c.geometry=x.id,c.program=d.id,c.wireframe=t,b=!0)}null!==_&&n.update(_,34963),(b||h)&&(h=!1,function(r,s,a,o){if(!1===i.isWebGL2&&(r.isInstancedMesh||o.isInstancedBufferGeometry)&&null===e.get("ANGLE_instanced_arrays"))return;m();const l=o.attributes,c=a.getAttributes(),h=s.defaultAttributeValues;for(const e in c){const i=c[e];if(i.location>=0){let s=l[e];if(void 0===s&&("instanceMatrix"===e&&r.instanceMatrix&&(s=r.instanceMatrix),"instanceColor"===e&&r.instanceColor&&(s=r.instanceColor)),void 0!==s){const e=s.normalized,a=s.itemSize,l=n.get(s);if(void 0===l)continue;const c=l.buffer,h=l.type,u=l.bytesPerElement;if(s.isInterleavedBufferAttribute){const n=s.data,l=n.stride,d=s.offset;if(n.isInstancedInterleavedBuffer){for(let t=0;t0&&t.getShaderPrecisionFormat(35632,36338).precision>0)return"highp";e="mediump"}return"mediump"===e&&t.getShaderPrecisionFormat(35633,36337).precision>0&&t.getShaderPrecisionFormat(35632,36337).precision>0?"mediump":"lowp"}const s="undefined"!=typeof WebGL2RenderingContext&&t instanceof WebGL2RenderingContext||"undefined"!=typeof WebGL2ComputeRenderingContext&&t instanceof WebGL2ComputeRenderingContext;let a=void 0!==n.precision?n.precision:"highp";const o=r(a);o!==a&&(console.warn("THREE.WebGLRenderer:",a,"not supported, using",o,"instead."),a=o);const l=s||e.has("WEBGL_draw_buffers"),c=!0===n.logarithmicDepthBuffer,h=t.getParameter(34930),u=t.getParameter(35660),d=t.getParameter(3379),p=t.getParameter(34076),m=t.getParameter(34921),f=t.getParameter(36347),g=t.getParameter(36348),v=t.getParameter(36349),y=u>0,x=s||e.has("OES_texture_float");return{isWebGL2:s,drawBuffers:l,getMaxAnisotropy:function(){if(void 0!==i)return i;if(!0===e.has("EXT_texture_filter_anisotropic")){const n=e.get("EXT_texture_filter_anisotropic");i=t.getParameter(n.MAX_TEXTURE_MAX_ANISOTROPY_EXT)}else i=0;return i},getMaxPrecision:r,precision:a,logarithmicDepthBuffer:c,maxTextures:h,maxVertexTextures:u,maxTextureSize:d,maxCubemapSize:p,maxAttributes:m,maxVertexUniforms:f,maxVaryings:g,maxFragmentUniforms:v,vertexTextures:y,floatFragmentTextures:x,floatVertexTextures:y&&x,maxSamples:s?t.getParameter(36183):0}}function Oi(t){const e=this;let n=null,i=0,r=!1,s=!1;const a=new wi,o=new Ct,l={value:null,needsUpdate:!1};function c(){l.value!==n&&(l.value=n,l.needsUpdate=i>0),e.numPlanes=i,e.numIntersection=0}function h(t,n,i,r){const s=null!==t?t.length:0;let c=null;if(0!==s){if(c=l.value,!0!==r||null===c){const e=i+4*s,r=n.matrixWorldInverse;o.getNormalMatrix(r),(null===c||c.length0){const a=new xi(s.height/2);return a.fromEquirectangularTexture(t,r),e.set(r,a),r.addEventListener("dispose",i),n(a.texture,r.mapping)}return null}}}return r},dispose:function(){e=new WeakMap}}}Di.physical={uniforms:ui([Di.standard.uniforms,{clearcoat:{value:0},clearcoatMap:{value:null},clearcoatRoughness:{value:0},clearcoatRoughnessMap:{value:null},clearcoatNormalScale:{value:new Rt(1,1)},clearcoatNormalMap:{value:null},sheen:{value:0},sheenColor:{value:new Wt(0)},sheenColorMap:{value:null},sheenRoughness:{value:1},sheenRoughnessMap:{value:null},transmission:{value:0},transmissionMap:{value:null},transmissionSamplerSize:{value:new Rt},transmissionSamplerMap:{value:null},thickness:{value:0},thicknessMap:{value:null},attenuationDistance:{value:0},attenuationColor:{value:new Wt(0)},specularIntensity:{value:1},specularIntensityMap:{value:null},specularColor:{value:new Wt(1,1,1)},specularColorMap:{value:null}}]),vertexShader:Li.meshphysical_vert,fragmentShader:Li.meshphysical_frag};class Fi extends mi{constructor(t=-1,e=1,n=1,i=-1,r=.1,s=2e3){super(),this.type="OrthographicCamera",this.zoom=1,this.view=null,this.left=t,this.right=e,this.top=n,this.bottom=i,this.near=r,this.far=s,this.updateProjectionMatrix()}copy(t,e){return super.copy(t,e),this.left=t.left,this.right=t.right,this.top=t.top,this.bottom=t.bottom,this.near=t.near,this.far=t.far,this.zoom=t.zoom,this.view=null===t.view?null:Object.assign({},t.view),this}setViewOffset(t,e,n,i,r,s){null===this.view&&(this.view={enabled:!0,fullWidth:1,fullHeight:1,offsetX:0,offsetY:0,width:1,height:1}),this.view.enabled=!0,this.view.fullWidth=t,this.view.fullHeight=e,this.view.offsetX=n,this.view.offsetY=i,this.view.width=r,this.view.height=s,this.updateProjectionMatrix()}clearViewOffset(){null!==this.view&&(this.view.enabled=!1),this.updateProjectionMatrix()}updateProjectionMatrix(){const t=(this.right-this.left)/(2*this.zoom),e=(this.top-this.bottom)/(2*this.zoom),n=(this.right+this.left)/2,i=(this.top+this.bottom)/2;let r=n-t,s=n+t,a=i+e,o=i-e;if(null!==this.view&&this.view.enabled){const t=(this.right-this.left)/this.view.fullWidth/this.zoom,e=(this.top-this.bottom)/this.view.fullHeight/this.zoom;r+=t*this.view.offsetX,s=r+t*this.view.width,a-=e*this.view.offsetY,o=a-e*this.view.height}this.projectionMatrix.makeOrthographic(r,s,a,o,this.near,this.far),this.projectionMatrixInverse.copy(this.projectionMatrix).invert()}toJSON(t){const e=super.toJSON(t);return e.object.zoom=this.zoom,e.object.left=this.left,e.object.right=this.right,e.object.top=this.top,e.object.bottom=this.bottom,e.object.near=this.near,e.object.far=this.far,null!==this.view&&(e.object.view=Object.assign({},this.view)),e}}Fi.prototype.isOrthographicCamera=!0;const Hi=[.125,.215,.35,.446,.526,.582],Gi=20,ki=new Fi,Vi=new Wt;let Wi=null;const ji=(1+Math.sqrt(5))/2,qi=1/ji,Xi=[new se(1,1,1),new se(-1,1,1),new se(1,1,-1),new se(-1,1,-1),new se(0,ji,qi),new se(0,ji,-qi),new se(qi,0,ji),new se(-qi,0,ji),new se(ji,qi,0),new se(-ji,qi,0)];class Ji{constructor(t){this._renderer=t,this._pingPongRenderTarget=null,this._lodMax=0,this._cubeSize=0,this._lodPlanes=[],this._sizeLods=[],this._sigmas=[],this._blurMaterial=null,this._cubemapMaterial=null,this._equirectMaterial=null,this._compileMaterial(this._blurMaterial)}fromScene(t,e=0,n=.1,i=100){Wi=this._renderer.getRenderTarget(),this._setSize(256);const r=this._allocateTargets();return r.depthBuffer=!0,this._sceneToCubeUV(t,n,i,r),e>0&&this._blur(r,0,0,e),this._applyPMREM(r),this._cleanup(r),r}fromEquirectangular(t,e=null){return this._fromTexture(t,e)}fromCubemap(t,e=null){return this._fromTexture(t,e)}compileCubemapShader(){null===this._cubemapMaterial&&(this._cubemapMaterial=Qi(),this._compileMaterial(this._cubemapMaterial))}compileEquirectangularShader(){null===this._equirectMaterial&&(this._equirectMaterial=Ki(),this._compileMaterial(this._equirectMaterial))}dispose(){this._dispose(),null!==this._cubemapMaterial&&this._cubemapMaterial.dispose(),null!==this._equirectMaterial&&this._equirectMaterial.dispose()}_setSize(t){this._lodMax=Math.floor(Math.log2(t)),this._cubeSize=Math.pow(2,this._lodMax)}_dispose(){null!==this._blurMaterial&&this._blurMaterial.dispose(),null!==this._pingPongRenderTarget&&this._pingPongRenderTarget.dispose();for(let t=0;tt-4?o=Hi[a-t+4-1]:0===a&&(o=0),i.push(o);const l=1/(s-2),c=-l,h=1+l,u=[c,c,h,c,h,h,c,c,h,h,c,h],d=6,p=6,m=3,f=2,g=1,v=new Float32Array(m*p*d),y=new Float32Array(f*p*d),x=new Float32Array(g*p*d);for(let t=0;t2?0:-1,i=[e,n,0,e+2/3,n,0,e+2/3,n+1,0,e,n,0,e+2/3,n+1,0,e,n+1,0];v.set(i,m*p*t),y.set(u,f*p*t);const r=[t,t,t,t,t,t];x.set(r,g*p*t)}const _=new Vn;_.setAttribute("position",new Tn(v,m)),_.setAttribute("uv",new Tn(y,f)),_.setAttribute("faceIndex",new Tn(x,g)),e.push(_),r>4&&r--}return{lodPlanes:e,sizeLods:n,sigmas:i}}(i)),this._blurMaterial=function(t,e,n){const i=new Float32Array(Gi),r=new se(0,1,0);return new pi({name:"SphericalGaussianBlur",defines:{n:Gi,CUBEUV_TEXEL_WIDTH:1/e,CUBEUV_TEXEL_HEIGHT:1/n,CUBEUV_MAX_MIP:`${t}.0`},uniforms:{envMap:{value:null},samples:{value:1},weights:{value:i},latitudinal:{value:!1},dTheta:{value:0},mipInt:{value:0},poleAxis:{value:r}},vertexShader:$i(),fragmentShader:"\n\n\t\t\tprecision mediump float;\n\t\t\tprecision mediump int;\n\n\t\t\tvarying vec3 vOutputDirection;\n\n\t\t\tuniform sampler2D envMap;\n\t\t\tuniform int samples;\n\t\t\tuniform float weights[ n ];\n\t\t\tuniform bool latitudinal;\n\t\t\tuniform float dTheta;\n\t\t\tuniform float mipInt;\n\t\t\tuniform vec3 poleAxis;\n\n\t\t\t#define ENVMAP_TYPE_CUBE_UV\n\t\t\t#include \n\n\t\t\tvec3 getSample( float theta, vec3 axis ) {\n\n\t\t\t\tfloat cosTheta = cos( theta );\n\t\t\t\t// Rodrigues' axis-angle rotation\n\t\t\t\tvec3 sampleDirection = vOutputDirection * cosTheta\n\t\t\t\t\t+ cross( axis, vOutputDirection ) * sin( theta )\n\t\t\t\t\t+ axis * dot( axis, vOutputDirection ) * ( 1.0 - cosTheta );\n\n\t\t\t\treturn bilinearCubeUV( envMap, sampleDirection, mipInt );\n\n\t\t\t}\n\n\t\t\tvoid main() {\n\n\t\t\t\tvec3 axis = latitudinal ? poleAxis : cross( poleAxis, vOutputDirection );\n\n\t\t\t\tif ( all( equal( axis, vec3( 0.0 ) ) ) ) {\n\n\t\t\t\t\taxis = vec3( vOutputDirection.z, 0.0, - vOutputDirection.x );\n\n\t\t\t\t}\n\n\t\t\t\taxis = normalize( axis );\n\n\t\t\t\tgl_FragColor = vec4( 0.0, 0.0, 0.0, 1.0 );\n\t\t\t\tgl_FragColor.rgb += weights[ 0 ] * getSample( 0.0, axis );\n\n\t\t\t\tfor ( int i = 1; i < n; i++ ) {\n\n\t\t\t\t\tif ( i >= samples ) {\n\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\t}\n\n\t\t\t\t\tfloat theta = dTheta * float( i );\n\t\t\t\t\tgl_FragColor.rgb += weights[ i ] * getSample( -1.0 * theta, axis );\n\t\t\t\t\tgl_FragColor.rgb += weights[ i ] * getSample( theta, axis );\n\n\t\t\t\t}\n\n\t\t\t}\n\t\t",blending:0,depthTest:!1,depthWrite:!1})}(i,t,e)}return i}_compileMaterial(t){const e=new oi(this._lodPlanes[0],t);this._renderer.compile(e,ki)}_sceneToCubeUV(t,e,n,i){const r=new fi(90,1,e,n),s=[1,-1,1,1,1,1],a=[1,1,1,-1,-1,-1],o=this._renderer,l=o.autoClear,c=o.toneMapping;o.getClearColor(Vi),o.toneMapping=0,o.autoClear=!1;const h=new Mn({name:"PMREM.Background",side:1,depthWrite:!1,depthTest:!1}),u=new oi(new ci,h);let d=!1;const p=t.background;p?p.isColor&&(h.color.copy(p),t.background=null,d=!0):(h.color.copy(Vi),d=!0);for(let e=0;e<6;e++){const n=e%3;0===n?(r.up.set(0,s[e],0),r.lookAt(a[e],0,0)):1===n?(r.up.set(0,0,s[e]),r.lookAt(0,a[e],0)):(r.up.set(0,s[e],0),r.lookAt(0,0,a[e]));const l=this._cubeSize;Zi(i,n*l,e>2?l:0,l,l),o.setRenderTarget(i),d&&o.render(u,r),o.render(t,r)}u.geometry.dispose(),u.material.dispose(),o.toneMapping=c,o.autoClear=l,t.background=p}_textureToCubeUV(t,e){const n=this._renderer,i=t.mapping===r||t.mapping===s;i?(null===this._cubemapMaterial&&(this._cubemapMaterial=Qi()),this._cubemapMaterial.uniforms.flipEnvMap.value=!1===t.isRenderTargetTexture?-1:1):null===this._equirectMaterial&&(this._equirectMaterial=Ki());const a=i?this._cubemapMaterial:this._equirectMaterial,o=new oi(this._lodPlanes[0],a);a.uniforms.envMap.value=t;const l=this._cubeSize;Zi(e,0,0,3*l,2*l),n.setRenderTarget(e),n.render(o,ki)}_applyPMREM(t){const e=this._renderer,n=e.autoClear;e.autoClear=!1;for(let e=1;eGi&&console.warn(`sigmaRadians, ${r}, is too large and will clip, as it requested ${m} samples when the maximum is set to 20`);const f=[];let g=0;for(let t=0;tv-4?i-v+4:0),4*(this._cubeSize-y),3*y,2*y),o.setRenderTarget(e),o.render(c,ki)}}function Yi(t,e,n){const i=new Qt(t,e,n);return i.texture.mapping=l,i.texture.name="PMREM.cubeUv",i.scissorTest=!0,i}function Zi(t,e,n,i,r){t.viewport.set(e,n,i,r),t.scissor.set(e,n,i,r)}function Ki(){return new pi({name:"EquirectangularToCubeUV",uniforms:{envMap:{value:null}},vertexShader:$i(),fragmentShader:"\n\n\t\t\tprecision mediump float;\n\t\t\tprecision mediump int;\n\n\t\t\tvarying vec3 vOutputDirection;\n\n\t\t\tuniform sampler2D envMap;\n\n\t\t\t#include \n\n\t\t\tvoid main() {\n\n\t\t\t\tvec3 outputDirection = normalize( vOutputDirection );\n\t\t\t\tvec2 uv = equirectUv( outputDirection );\n\n\t\t\t\tgl_FragColor = vec4( texture2D ( envMap, uv ).rgb, 1.0 );\n\n\t\t\t}\n\t\t",blending:0,depthTest:!1,depthWrite:!1})}function Qi(){return new pi({name:"CubemapToCubeUV",uniforms:{envMap:{value:null},flipEnvMap:{value:-1}},vertexShader:$i(),fragmentShader:"\n\n\t\t\tprecision mediump float;\n\t\t\tprecision mediump int;\n\n\t\t\tuniform float flipEnvMap;\n\n\t\t\tvarying vec3 vOutputDirection;\n\n\t\t\tuniform samplerCube envMap;\n\n\t\t\tvoid main() {\n\n\t\t\t\tgl_FragColor = textureCube( envMap, vec3( flipEnvMap * vOutputDirection.x, vOutputDirection.yz ) );\n\n\t\t\t}\n\t\t",blending:0,depthTest:!1,depthWrite:!1})}function $i(){return"\n\n\t\tprecision mediump float;\n\t\tprecision mediump int;\n\n\t\tattribute float faceIndex;\n\n\t\tvarying vec3 vOutputDirection;\n\n\t\t// RH coordinate system; PMREM face-indexing convention\n\t\tvec3 getDirection( vec2 uv, float face ) {\n\n\t\t\tuv = 2.0 * uv - 1.0;\n\n\t\t\tvec3 direction = vec3( uv, 1.0 );\n\n\t\t\tif ( face == 0.0 ) {\n\n\t\t\t\tdirection = direction.zyx; // ( 1, v, u ) pos x\n\n\t\t\t} else if ( face == 1.0 ) {\n\n\t\t\t\tdirection = direction.xzy;\n\t\t\t\tdirection.xz *= -1.0; // ( -u, 1, -v ) pos y\n\n\t\t\t} else if ( face == 2.0 ) {\n\n\t\t\t\tdirection.x *= -1.0; // ( -u, v, 1 ) pos z\n\n\t\t\t} else if ( face == 3.0 ) {\n\n\t\t\t\tdirection = direction.zyx;\n\t\t\t\tdirection.xz *= -1.0; // ( -1, v, -u ) neg x\n\n\t\t\t} else if ( face == 4.0 ) {\n\n\t\t\t\tdirection = direction.xzy;\n\t\t\t\tdirection.xy *= -1.0; // ( -u, -1, v ) neg y\n\n\t\t\t} else if ( face == 5.0 ) {\n\n\t\t\t\tdirection.z *= -1.0; // ( u, v, -1 ) neg z\n\n\t\t\t}\n\n\t\t\treturn direction;\n\n\t\t}\n\n\t\tvoid main() {\n\n\t\t\tvOutputDirection = getDirection( uv, faceIndex );\n\t\t\tgl_Position = vec4( position, 1.0 );\n\n\t\t}\n\t"}function tr(t){let e=new WeakMap,n=null;function i(t){const n=t.target;n.removeEventListener("dispose",i);const r=e.get(n);void 0!==r&&(e.delete(n),r.dispose())}return{get:function(l){if(l&&l.isTexture){const c=l.mapping,h=c===a||c===o,u=c===r||c===s;if(h||u){if(l.isRenderTargetTexture&&!0===l.needsPMREMUpdate){l.needsPMREMUpdate=!1;let i=e.get(l);return null===n&&(n=new Ji(t)),i=h?n.fromEquirectangular(l,i):n.fromCubemap(l,i),e.set(l,i),i.texture}if(e.has(l))return e.get(l).texture;{const r=l.image;if(h&&r&&r.height>0||u&&r&&function(t){let e=0;const n=6;for(let i=0;ie.maxTextureSize&&(A=Math.ceil(E/e.maxTextureSize),E=e.maxTextureSize);const R=new Float32Array(E*A*4*m),C=new $t(R,E,A,m);C.type=b,C.needsUpdate=!0;const L=4*T;for(let D=0;D0)return t;const r=e*n;let s=mr[r];if(void 0===s&&(s=new Float32Array(r),mr[r]=s),0!==e){i.toArray(s,0);for(let i=1,r=0;i!==e;++i)r+=n,t[i].toArray(s,r)}return s}function _r(t,e){if(t.length!==e.length)return!1;for(let n=0,i=t.length;n/gm;function ws(t){return t.replace(Ms,Ss)}function Ss(t,e){const n=Li[e];if(void 0===n)throw new Error("Can not resolve #include <"+e+">");return ws(n)}const Ts=/#pragma unroll_loop[\s]+?for \( int i \= (\d+)\; i < (\d+)\; i \+\+ \) \{([\s\S]+?)(?=\})\}/g,Es=/#pragma unroll_loop_start\s+for\s*\(\s*int\s+i\s*=\s*(\d+)\s*;\s*i\s*<\s*(\d+)\s*;\s*i\s*\+\+\s*\)\s*{([\s\S]+?)}\s+#pragma unroll_loop_end/g;function As(t){return t.replace(Es,Cs).replace(Ts,Rs)}function Rs(t,e,n,i){return console.warn("WebGLProgram: #pragma unroll_loop shader syntax is deprecated. Please use #pragma unroll_loop_start syntax instead."),Cs(t,e,n,i)}function Cs(t,e,n,i){let r="";for(let t=parseInt(e);t0&&(x+="\n"),_=[g,v].filter(xs).join("\n"),_.length>0&&(_+="\n")):(x=[Ls(n),"#define SHADER_NAME "+n.shaderName,v,n.instancing?"#define USE_INSTANCING":"",n.instancingColor?"#define USE_INSTANCING_COLOR":"",n.supportsVertexTextures?"#define VERTEX_TEXTURES":"",n.useFog&&n.fog?"#define USE_FOG":"",n.useFog&&n.fogExp2?"#define FOG_EXP2":"",n.map?"#define USE_MAP":"",n.envMap?"#define USE_ENVMAP":"",n.envMap?"#define "+p:"",n.lightMap?"#define USE_LIGHTMAP":"",n.aoMap?"#define USE_AOMAP":"",n.emissiveMap?"#define USE_EMISSIVEMAP":"",n.bumpMap?"#define USE_BUMPMAP":"",n.normalMap?"#define USE_NORMALMAP":"",n.normalMap&&n.objectSpaceNormalMap?"#define OBJECTSPACE_NORMALMAP":"",n.normalMap&&n.tangentSpaceNormalMap?"#define TANGENTSPACE_NORMALMAP":"",n.clearcoatMap?"#define USE_CLEARCOATMAP":"",n.clearcoatRoughnessMap?"#define USE_CLEARCOAT_ROUGHNESSMAP":"",n.clearcoatNormalMap?"#define USE_CLEARCOAT_NORMALMAP":"",n.displacementMap&&n.supportsVertexTextures?"#define USE_DISPLACEMENTMAP":"",n.specularMap?"#define USE_SPECULARMAP":"",n.specularIntensityMap?"#define USE_SPECULARINTENSITYMAP":"",n.specularColorMap?"#define USE_SPECULARCOLORMAP":"",n.roughnessMap?"#define USE_ROUGHNESSMAP":"",n.metalnessMap?"#define USE_METALNESSMAP":"",n.alphaMap?"#define USE_ALPHAMAP":"",n.transmission?"#define USE_TRANSMISSION":"",n.transmissionMap?"#define USE_TRANSMISSIONMAP":"",n.thicknessMap?"#define USE_THICKNESSMAP":"",n.sheenColorMap?"#define USE_SHEENCOLORMAP":"",n.sheenRoughnessMap?"#define USE_SHEENROUGHNESSMAP":"",n.vertexTangents?"#define USE_TANGENT":"",n.vertexColors?"#define USE_COLOR":"",n.vertexAlphas?"#define USE_COLOR_ALPHA":"",n.vertexUvs?"#define USE_UV":"",n.uvsVertexOnly?"#define UVS_VERTEX_ONLY":"",n.flatShading?"#define FLAT_SHADED":"",n.skinning?"#define USE_SKINNING":"",n.morphTargets?"#define USE_MORPHTARGETS":"",n.morphNormals&&!1===n.flatShading?"#define USE_MORPHNORMALS":"",n.morphColors&&n.isWebGL2?"#define USE_MORPHCOLORS":"",n.morphTargetsCount>0&&n.isWebGL2?"#define MORPHTARGETS_TEXTURE":"",n.morphTargetsCount>0&&n.isWebGL2?"#define MORPHTARGETS_TEXTURE_STRIDE "+n.morphTextureStride:"",n.morphTargetsCount>0&&n.isWebGL2?"#define MORPHTARGETS_COUNT "+n.morphTargetsCount:"",n.doubleSided?"#define DOUBLE_SIDED":"",n.flipSided?"#define FLIP_SIDED":"",n.shadowMapEnabled?"#define USE_SHADOWMAP":"",n.shadowMapEnabled?"#define "+u:"",n.sizeAttenuation?"#define USE_SIZEATTENUATION":"",n.logarithmicDepthBuffer?"#define USE_LOGDEPTHBUF":"",n.logarithmicDepthBuffer&&n.rendererExtensionFragDepth?"#define USE_LOGDEPTHBUF_EXT":"","uniform mat4 modelMatrix;","uniform mat4 modelViewMatrix;","uniform mat4 projectionMatrix;","uniform mat4 viewMatrix;","uniform mat3 normalMatrix;","uniform vec3 cameraPosition;","uniform bool isOrthographic;","#ifdef USE_INSTANCING","\tattribute mat4 instanceMatrix;","#endif","#ifdef USE_INSTANCING_COLOR","\tattribute vec3 instanceColor;","#endif","attribute vec3 position;","attribute vec3 normal;","attribute vec2 uv;","#ifdef USE_TANGENT","\tattribute vec4 tangent;","#endif","#if defined( USE_COLOR_ALPHA )","\tattribute vec4 color;","#elif defined( USE_COLOR )","\tattribute vec3 color;","#endif","#if ( defined( USE_MORPHTARGETS ) && ! defined( MORPHTARGETS_TEXTURE ) )","\tattribute vec3 morphTarget0;","\tattribute vec3 morphTarget1;","\tattribute vec3 morphTarget2;","\tattribute vec3 morphTarget3;","\t#ifdef USE_MORPHNORMALS","\t\tattribute vec3 morphNormal0;","\t\tattribute vec3 morphNormal1;","\t\tattribute vec3 morphNormal2;","\t\tattribute vec3 morphNormal3;","\t#else","\t\tattribute vec3 morphTarget4;","\t\tattribute vec3 morphTarget5;","\t\tattribute vec3 morphTarget6;","\t\tattribute vec3 morphTarget7;","\t#endif","#endif","#ifdef USE_SKINNING","\tattribute vec4 skinIndex;","\tattribute vec4 skinWeight;","#endif","\n"].filter(xs).join("\n"),_=[g,Ls(n),"#define SHADER_NAME "+n.shaderName,v,n.useFog&&n.fog?"#define USE_FOG":"",n.useFog&&n.fogExp2?"#define FOG_EXP2":"",n.map?"#define USE_MAP":"",n.matcap?"#define USE_MATCAP":"",n.envMap?"#define USE_ENVMAP":"",n.envMap?"#define "+d:"",n.envMap?"#define "+p:"",n.envMap?"#define "+m:"",f?"#define CUBEUV_TEXEL_WIDTH "+f.texelWidth:"",f?"#define CUBEUV_TEXEL_HEIGHT "+f.texelHeight:"",f?"#define CUBEUV_MAX_MIP "+f.maxMip+".0":"",n.lightMap?"#define USE_LIGHTMAP":"",n.aoMap?"#define USE_AOMAP":"",n.emissiveMap?"#define USE_EMISSIVEMAP":"",n.bumpMap?"#define USE_BUMPMAP":"",n.normalMap?"#define USE_NORMALMAP":"",n.normalMap&&n.objectSpaceNormalMap?"#define OBJECTSPACE_NORMALMAP":"",n.normalMap&&n.tangentSpaceNormalMap?"#define TANGENTSPACE_NORMALMAP":"",n.clearcoat?"#define USE_CLEARCOAT":"",n.clearcoatMap?"#define USE_CLEARCOATMAP":"",n.clearcoatRoughnessMap?"#define USE_CLEARCOAT_ROUGHNESSMAP":"",n.clearcoatNormalMap?"#define USE_CLEARCOAT_NORMALMAP":"",n.specularMap?"#define USE_SPECULARMAP":"",n.specularIntensityMap?"#define USE_SPECULARINTENSITYMAP":"",n.specularColorMap?"#define USE_SPECULARCOLORMAP":"",n.roughnessMap?"#define USE_ROUGHNESSMAP":"",n.metalnessMap?"#define USE_METALNESSMAP":"",n.alphaMap?"#define USE_ALPHAMAP":"",n.alphaTest?"#define USE_ALPHATEST":"",n.sheen?"#define USE_SHEEN":"",n.sheenColorMap?"#define USE_SHEENCOLORMAP":"",n.sheenRoughnessMap?"#define USE_SHEENROUGHNESSMAP":"",n.transmission?"#define USE_TRANSMISSION":"",n.transmissionMap?"#define USE_TRANSMISSIONMAP":"",n.thicknessMap?"#define USE_THICKNESSMAP":"",n.decodeVideoTexture?"#define DECODE_VIDEO_TEXTURE":"",n.vertexTangents?"#define USE_TANGENT":"",n.vertexColors||n.instancingColor?"#define USE_COLOR":"",n.vertexAlphas?"#define USE_COLOR_ALPHA":"",n.vertexUvs?"#define USE_UV":"",n.uvsVertexOnly?"#define UVS_VERTEX_ONLY":"",n.gradientMap?"#define USE_GRADIENTMAP":"",n.flatShading?"#define FLAT_SHADED":"",n.doubleSided?"#define DOUBLE_SIDED":"",n.flipSided?"#define FLIP_SIDED":"",n.shadowMapEnabled?"#define USE_SHADOWMAP":"",n.shadowMapEnabled?"#define "+u:"",n.premultipliedAlpha?"#define PREMULTIPLIED_ALPHA":"",n.physicallyCorrectLights?"#define PHYSICALLY_CORRECT_LIGHTS":"",n.logarithmicDepthBuffer?"#define USE_LOGDEPTHBUF":"",n.logarithmicDepthBuffer&&n.rendererExtensionFragDepth?"#define USE_LOGDEPTHBUF_EXT":"","uniform mat4 viewMatrix;","uniform vec3 cameraPosition;","uniform bool isOrthographic;",0!==n.toneMapping?"#define TONE_MAPPING":"",0!==n.toneMapping?Li.tonemapping_pars_fragment:"",0!==n.toneMapping?ys("toneMapping",n.toneMapping):"",n.dithering?"#define DITHERING":"",n.opaque?"#define OPAQUE":"",Li.encodings_pars_fragment,vs("linearToOutputTexel",n.outputEncoding),n.useDepthPacking?"#define DEPTH_PACKING "+n.depthPacking:"","\n"].filter(xs).join("\n")),c=ws(c),c=_s(c,n),c=bs(c,n),h=ws(h),h=_s(h,n),h=bs(h,n),c=As(c),h=As(h),n.isWebGL2&&!0!==n.isRawShaderMaterial&&(b="#version 300 es\n",x=["precision mediump sampler2DArray;","#define attribute in","#define varying out","#define texture2D texture"].join("\n")+"\n"+x,_=["#define varying in",n.glslVersion===pt?"":"layout(location = 0) out highp vec4 pc_fragColor;",n.glslVersion===pt?"":"#define gl_FragColor pc_fragColor","#define gl_FragDepthEXT gl_FragDepth","#define texture2D texture","#define textureCube texture","#define texture2DProj textureProj","#define texture2DLodEXT textureLod","#define texture2DProjLodEXT textureProjLod","#define textureCubeLodEXT textureLod","#define texture2DGradEXT textureGrad","#define texture2DProjGradEXT textureProjGrad","#define textureCubeGradEXT textureGrad"].join("\n")+"\n"+_);const M=b+_+h,w=ms(a,35633,b+x+c),S=ms(a,35632,M);if(a.attachShader(y,w),a.attachShader(y,S),void 0!==n.index0AttributeName?a.bindAttribLocation(y,0,n.index0AttributeName):!0===n.morphTargets&&a.bindAttribLocation(y,0,"position"),a.linkProgram(y),t.debug.checkShaderErrors){const t=a.getProgramInfoLog(y).trim(),e=a.getShaderInfoLog(w).trim(),n=a.getShaderInfoLog(S).trim();let i=!0,r=!0;if(!1===a.getProgramParameter(y,35714)){i=!1;const e=gs(a,w,"vertex"),n=gs(a,S,"fragment");console.error("THREE.WebGLProgram: Shader Error "+a.getError()+" - VALIDATE_STATUS "+a.getProgramParameter(y,35715)+"\n\nProgram Info Log: "+t+"\n"+e+"\n"+n)}else""!==t?console.warn("THREE.WebGLProgram: Program Info Log:",t):""!==e&&""!==n||(r=!1);r&&(this.diagnostics={runnable:i,programLog:t,vertexShader:{log:e,prefix:x},fragmentShader:{log:n,prefix:_}})}let T,E;return a.deleteShader(w),a.deleteShader(S),this.getUniforms=function(){return void 0===T&&(T=new ps(a,y)),T},this.getAttributes=function(){return void 0===E&&(E=function(t,e){const n={},i=t.getProgramParameter(e,35721);for(let r=0;r0,I=s.clearcoat>0;return{isWebGL2:u,shaderID:w,shaderName:s.type,vertexShader:E,fragmentShader:A,defines:s.defines,customVertexShaderID:R,customFragmentShaderID:C,isRawShaderMaterial:!0===s.isRawShaderMaterial,glslVersion:s.glslVersion,precision:m,instancing:!0===v.isInstancedMesh,instancingColor:!0===v.isInstancedMesh&&null!==v.instanceColor,supportsVertexTextures:p,outputEncoding:null===P?t.outputEncoding:!0===P.isXRRenderTarget?P.texture.encoding:at,map:!!s.map,matcap:!!s.matcap,envMap:!!b,envMapMode:b&&b.mapping,envMapCubeUVHeight:M,lightMap:!!s.lightMap,aoMap:!!s.aoMap,emissiveMap:!!s.emissiveMap,bumpMap:!!s.bumpMap,normalMap:!!s.normalMap,objectSpaceNormalMap:1===s.normalMapType,tangentSpaceNormalMap:0===s.normalMapType,decodeVideoTexture:!!s.map&&!0===s.map.isVideoTexture&&s.map.encoding===ot,clearcoat:I,clearcoatMap:I&&!!s.clearcoatMap,clearcoatRoughnessMap:I&&!!s.clearcoatRoughnessMap,clearcoatNormalMap:I&&!!s.clearcoatNormalMap,displacementMap:!!s.displacementMap,roughnessMap:!!s.roughnessMap,metalnessMap:!!s.metalnessMap,specularMap:!!s.specularMap,specularIntensityMap:!!s.specularIntensityMap,specularColorMap:!!s.specularColorMap,opaque:!1===s.transparent&&1===s.blending,alphaMap:!!s.alphaMap,alphaTest:D,gradientMap:!!s.gradientMap,sheen:s.sheen>0,sheenColorMap:!!s.sheenColorMap,sheenRoughnessMap:!!s.sheenRoughnessMap,transmission:s.transmission>0,transmissionMap:!!s.transmissionMap,thicknessMap:!!s.thicknessMap,combine:s.combine,vertexTangents:!!s.normalMap&&!!x.attributes.tangent,vertexColors:s.vertexColors,vertexAlphas:!0===s.vertexColors&&!!x.attributes.color&&4===x.attributes.color.itemSize,vertexUvs:!!(s.map||s.bumpMap||s.normalMap||s.specularMap||s.alphaMap||s.emissiveMap||s.roughnessMap||s.metalnessMap||s.clearcoatMap||s.clearcoatRoughnessMap||s.clearcoatNormalMap||s.displacementMap||s.transmissionMap||s.thicknessMap||s.specularIntensityMap||s.specularColorMap||s.sheenColorMap||s.sheenRoughnessMap),uvsVertexOnly:!(s.map||s.bumpMap||s.normalMap||s.specularMap||s.alphaMap||s.emissiveMap||s.roughnessMap||s.metalnessMap||s.clearcoatNormalMap||s.transmission>0||s.transmissionMap||s.thicknessMap||s.specularIntensityMap||s.specularColorMap||s.sheen>0||s.sheenColorMap||s.sheenRoughnessMap||!s.displacementMap),fog:!!y,useFog:!0===s.fog,fogExp2:y&&y.isFogExp2,flatShading:!!s.flatShading,sizeAttenuation:s.sizeAttenuation,logarithmicDepthBuffer:d,skinning:!0===v.isSkinnedMesh,morphTargets:void 0!==x.morphAttributes.position,morphNormals:void 0!==x.morphAttributes.normal,morphColors:void 0!==x.morphAttributes.color,morphTargetsCount:T,morphTextureStride:L,numDirLights:o.directional.length,numPointLights:o.point.length,numSpotLights:o.spot.length,numRectAreaLights:o.rectArea.length,numHemiLights:o.hemi.length,numDirLightShadows:o.directionalShadowMap.length,numPointLightShadows:o.pointShadowMap.length,numSpotLightShadows:o.spotShadowMap.length,numClippingPlanes:a.numPlanes,numClipIntersection:a.numIntersection,dithering:s.dithering,shadowMapEnabled:t.shadowMap.enabled&&h.length>0,shadowMapType:t.shadowMap.type,toneMapping:s.toneMapped?t.toneMapping:0,physicallyCorrectLights:t.physicallyCorrectLights,premultipliedAlpha:s.premultipliedAlpha,doubleSided:2===s.side,flipSided:1===s.side,useDepthPacking:!!s.depthPacking,depthPacking:s.depthPacking||0,index0AttributeName:s.index0AttributeName,extensionDerivatives:s.extensions&&s.extensions.derivatives,extensionFragDepth:s.extensions&&s.extensions.fragDepth,extensionDrawBuffers:s.extensions&&s.extensions.drawBuffers,extensionShaderTextureLOD:s.extensions&&s.extensions.shaderTextureLOD,rendererExtensionFragDepth:u||i.has("EXT_frag_depth"),rendererExtensionDrawBuffers:u||i.has("WEBGL_draw_buffers"),rendererExtensionShaderTextureLod:u||i.has("EXT_shader_texture_lod"),customProgramCacheKey:s.customProgramCacheKey()}},getProgramCacheKey:function(e){const n=[];if(e.shaderID?n.push(e.shaderID):(n.push(e.customVertexShaderID),n.push(e.customFragmentShaderID)),void 0!==e.defines)for(const t in e.defines)n.push(t),n.push(e.defines[t]);return!1===e.isRawShaderMaterial&&(!function(t,e){t.push(e.precision),t.push(e.outputEncoding),t.push(e.envMapMode),t.push(e.envMapCubeUVHeight),t.push(e.combine),t.push(e.vertexUvs),t.push(e.fogExp2),t.push(e.sizeAttenuation),t.push(e.morphTargetsCount),t.push(e.morphAttributeCount),t.push(e.numDirLights),t.push(e.numPointLights),t.push(e.numSpotLights),t.push(e.numHemiLights),t.push(e.numRectAreaLights),t.push(e.numDirLightShadows),t.push(e.numPointLightShadows),t.push(e.numSpotLightShadows),t.push(e.shadowMapType),t.push(e.toneMapping),t.push(e.numClippingPlanes),t.push(e.numClipIntersection),t.push(e.depthPacking)}(n,e),function(t,e){o.disableAll(),e.isWebGL2&&o.enable(0);e.supportsVertexTextures&&o.enable(1);e.instancing&&o.enable(2);e.instancingColor&&o.enable(3);e.map&&o.enable(4);e.matcap&&o.enable(5);e.envMap&&o.enable(6);e.lightMap&&o.enable(7);e.aoMap&&o.enable(8);e.emissiveMap&&o.enable(9);e.bumpMap&&o.enable(10);e.normalMap&&o.enable(11);e.objectSpaceNormalMap&&o.enable(12);e.tangentSpaceNormalMap&&o.enable(13);e.clearcoat&&o.enable(14);e.clearcoatMap&&o.enable(15);e.clearcoatRoughnessMap&&o.enable(16);e.clearcoatNormalMap&&o.enable(17);e.displacementMap&&o.enable(18);e.specularMap&&o.enable(19);e.roughnessMap&&o.enable(20);e.metalnessMap&&o.enable(21);e.gradientMap&&o.enable(22);e.alphaMap&&o.enable(23);e.alphaTest&&o.enable(24);e.vertexColors&&o.enable(25);e.vertexAlphas&&o.enable(26);e.vertexUvs&&o.enable(27);e.vertexTangents&&o.enable(28);e.uvsVertexOnly&&o.enable(29);e.fog&&o.enable(30);t.push(o.mask),o.disableAll(),e.useFog&&o.enable(0);e.flatShading&&o.enable(1);e.logarithmicDepthBuffer&&o.enable(2);e.skinning&&o.enable(3);e.morphTargets&&o.enable(4);e.morphNormals&&o.enable(5);e.morphColors&&o.enable(6);e.premultipliedAlpha&&o.enable(7);e.shadowMapEnabled&&o.enable(8);e.physicallyCorrectLights&&o.enable(9);e.doubleSided&&o.enable(10);e.flipSided&&o.enable(11);e.useDepthPacking&&o.enable(12);e.dithering&&o.enable(13);e.specularIntensityMap&&o.enable(14);e.specularColorMap&&o.enable(15);e.transmission&&o.enable(16);e.transmissionMap&&o.enable(17);e.thicknessMap&&o.enable(18);e.sheen&&o.enable(19);e.sheenColorMap&&o.enable(20);e.sheenRoughnessMap&&o.enable(21);e.decodeVideoTexture&&o.enable(22);e.opaque&&o.enable(23);t.push(o.mask)}(n,e),n.push(t.outputEncoding)),n.push(e.customProgramCacheKey),n.join()},getUniforms:function(t){const e=f[t.type];let n;if(e){const t=Di[e];n=di.clone(t.uniforms)}else n=t.uniforms;return n},acquireProgram:function(e,n){let i;for(let t=0,e=h.length;t0?i.push(h):!0===a.transparent?r.push(h):n.push(h)},unshift:function(t,e,a,o,l,c){const h=s(t,e,a,o,l,c);a.transmission>0?i.unshift(h):!0===a.transparent?r.unshift(h):n.unshift(h)},finish:function(){for(let n=e,i=t.length;n1&&n.sort(t||Os),i.length>1&&i.sort(e||Us),r.length>1&&r.sort(e||Us)}}}function Hs(){let t=new WeakMap;return{get:function(e,n){let i;return!1===t.has(e)?(i=new Fs,t.set(e,[i])):n>=t.get(e).length?(i=new Fs,t.get(e).push(i)):i=t.get(e)[n],i},dispose:function(){t=new WeakMap}}}function Gs(){const t={};return{get:function(e){if(void 0!==t[e.id])return t[e.id];let n;switch(e.type){case"DirectionalLight":n={direction:new se,color:new Wt};break;case"SpotLight":n={position:new se,direction:new se,color:new Wt,distance:0,coneCos:0,penumbraCos:0,decay:0};break;case"PointLight":n={position:new se,color:new Wt,distance:0,decay:0};break;case"HemisphereLight":n={direction:new se,skyColor:new Wt,groundColor:new Wt};break;case"RectAreaLight":n={color:new Wt,position:new se,halfWidth:new se,halfHeight:new se}}return t[e.id]=n,n}}}let ks=0;function Vs(t,e){return(e.castShadow?1:0)-(t.castShadow?1:0)}function Ws(t,e){const n=new Gs,i=function(){const t={};return{get:function(e){if(void 0!==t[e.id])return t[e.id];let n;switch(e.type){case"DirectionalLight":case"SpotLight":n={shadowBias:0,shadowNormalBias:0,shadowRadius:1,shadowMapSize:new Rt};break;case"PointLight":n={shadowBias:0,shadowNormalBias:0,shadowRadius:1,shadowMapSize:new Rt,shadowCameraNear:1,shadowCameraFar:1e3}}return t[e.id]=n,n}}}(),r={version:0,hash:{directionalLength:-1,pointLength:-1,spotLength:-1,rectAreaLength:-1,hemiLength:-1,numDirectionalShadows:-1,numPointShadows:-1,numSpotShadows:-1},ambient:[0,0,0],probe:[],directional:[],directionalShadow:[],directionalShadowMap:[],directionalShadowMatrix:[],spot:[],spotShadow:[],spotShadowMap:[],spotShadowMatrix:[],rectArea:[],rectAreaLTC1:null,rectAreaLTC2:null,point:[],pointShadow:[],pointShadowMap:[],pointShadowMatrix:[],hemi:[]};for(let t=0;t<9;t++)r.probe.push(new se);const s=new se,a=new ze,o=new ze;return{setup:function(s,a){let o=0,l=0,c=0;for(let t=0;t<9;t++)r.probe[t].set(0,0,0);let h=0,u=0,d=0,p=0,m=0,f=0,g=0,v=0;s.sort(Vs);const y=!0!==a?Math.PI:1;for(let t=0,e=s.length;t0&&(e.isWebGL2||!0===t.has("OES_texture_float_linear")?(r.rectAreaLTC1=Pi.LTC_FLOAT_1,r.rectAreaLTC2=Pi.LTC_FLOAT_2):!0===t.has("OES_texture_half_float_linear")?(r.rectAreaLTC1=Pi.LTC_HALF_1,r.rectAreaLTC2=Pi.LTC_HALF_2):console.error("THREE.WebGLRenderer: Unable to use RectAreaLight. Missing WebGL extensions.")),r.ambient[0]=o,r.ambient[1]=l,r.ambient[2]=c;const x=r.hash;x.directionalLength===h&&x.pointLength===u&&x.spotLength===d&&x.rectAreaLength===p&&x.hemiLength===m&&x.numDirectionalShadows===f&&x.numPointShadows===g&&x.numSpotShadows===v||(r.directional.length=h,r.spot.length=d,r.rectArea.length=p,r.point.length=u,r.hemi.length=m,r.directionalShadow.length=f,r.directionalShadowMap.length=f,r.pointShadow.length=g,r.pointShadowMap.length=g,r.spotShadow.length=v,r.spotShadowMap.length=v,r.directionalShadowMatrix.length=f,r.pointShadowMatrix.length=g,r.spotShadowMatrix.length=v,x.directionalLength=h,x.pointLength=u,x.spotLength=d,x.rectAreaLength=p,x.hemiLength=m,x.numDirectionalShadows=f,x.numPointShadows=g,x.numSpotShadows=v,r.version=ks++)},setupView:function(t,e){let n=0,i=0,l=0,c=0,h=0;const u=e.matrixWorldInverse;for(let e=0,d=t.length;e=n.get(i).length?(s=new js(t,e),n.get(i).push(s)):s=n.get(i)[r],s},dispose:function(){n=new WeakMap}}}class Xs extends bn{constructor(t){super(),this.type="MeshDepthMaterial",this.depthPacking=3200,this.map=null,this.alphaMap=null,this.displacementMap=null,this.displacementScale=1,this.displacementBias=0,this.wireframe=!1,this.wireframeLinewidth=1,this.setValues(t)}copy(t){return super.copy(t),this.depthPacking=t.depthPacking,this.map=t.map,this.alphaMap=t.alphaMap,this.displacementMap=t.displacementMap,this.displacementScale=t.displacementScale,this.displacementBias=t.displacementBias,this.wireframe=t.wireframe,this.wireframeLinewidth=t.wireframeLinewidth,this}}Xs.prototype.isMeshDepthMaterial=!0;class Js extends bn{constructor(t){super(),this.type="MeshDistanceMaterial",this.referencePosition=new se,this.nearDistance=1,this.farDistance=1e3,this.map=null,this.alphaMap=null,this.displacementMap=null,this.displacementScale=1,this.displacementBias=0,this.setValues(t)}copy(t){return super.copy(t),this.referencePosition.copy(t.referencePosition),this.nearDistance=t.nearDistance,this.farDistance=t.farDistance,this.map=t.map,this.alphaMap=t.alphaMap,this.displacementMap=t.displacementMap,this.displacementScale=t.displacementScale,this.displacementBias=t.displacementBias,this}}Js.prototype.isMeshDistanceMaterial=!0;function Ys(t,e,n){let i=new Ei;const r=new Rt,s=new Rt,a=new Kt,o=new Xs({depthPacking:3201}),l=new Js,c={},h=n.maxTextureSize,u={0:1,1:0,2:2},p=new pi({defines:{VSM_SAMPLES:8},uniforms:{shadow_pass:{value:null},resolution:{value:new Rt},radius:{value:4}},vertexShader:"void main() {\n\tgl_Position = vec4( position, 1.0 );\n}",fragmentShader:"uniform sampler2D shadow_pass;\nuniform vec2 resolution;\nuniform float radius;\n#include \nvoid main() {\n\tconst float samples = float( VSM_SAMPLES );\n\tfloat mean = 0.0;\n\tfloat squared_mean = 0.0;\n\tfloat uvStride = samples <= 1.0 ? 0.0 : 2.0 / ( samples - 1.0 );\n\tfloat uvStart = samples <= 1.0 ? 0.0 : - 1.0;\n\tfor ( float i = 0.0; i < samples; i ++ ) {\n\t\tfloat uvOffset = uvStart + i * uvStride;\n\t\t#ifdef HORIZONTAL_PASS\n\t\t\tvec2 distribution = unpackRGBATo2Half( texture2D( shadow_pass, ( gl_FragCoord.xy + vec2( uvOffset, 0.0 ) * radius ) / resolution ) );\n\t\t\tmean += distribution.x;\n\t\t\tsquared_mean += distribution.y * distribution.y + distribution.x * distribution.x;\n\t\t#else\n\t\t\tfloat depth = unpackRGBAToDepth( texture2D( shadow_pass, ( gl_FragCoord.xy + vec2( 0.0, uvOffset ) * radius ) / resolution ) );\n\t\t\tmean += depth;\n\t\t\tsquared_mean += depth * depth;\n\t\t#endif\n\t}\n\tmean = mean / samples;\n\tsquared_mean = squared_mean / samples;\n\tfloat std_dev = sqrt( squared_mean - mean * mean );\n\tgl_FragColor = pack2HalfToRGBA( vec2( mean, std_dev ) );\n}"}),m=p.clone();m.defines.HORIZONTAL_PASS=1;const f=new Vn;f.setAttribute("position",new Tn(new Float32Array([-1,-1,.5,3,-1,.5,-1,3,.5]),3));const g=new oi(f,p),v=this;function y(n,i){const r=e.update(g);p.defines.VSM_SAMPLES!==n.blurSamples&&(p.defines.VSM_SAMPLES=n.blurSamples,m.defines.VSM_SAMPLES=n.blurSamples,p.needsUpdate=!0,m.needsUpdate=!0),p.uniforms.shadow_pass.value=n.map.texture,p.uniforms.resolution.value=n.mapSize,p.uniforms.radius.value=n.radius,t.setRenderTarget(n.mapPass),t.clear(),t.renderBufferDirect(i,null,r,p,g,null),m.uniforms.shadow_pass.value=n.mapPass.texture,m.uniforms.resolution.value=n.mapSize,m.uniforms.radius.value=n.radius,t.setRenderTarget(n.map),t.clear(),t.renderBufferDirect(i,null,r,m,g,null)}function x(e,n,i,r,s,a){let h=null;const d=!0===i.isPointLight?e.customDistanceMaterial:e.customDepthMaterial;if(h=void 0!==d?d:!0===i.isPointLight?l:o,t.localClippingEnabled&&!0===n.clipShadows&&0!==n.clippingPlanes.length||n.displacementMap&&0!==n.displacementScale||n.alphaMap&&n.alphaTest>0){const t=h.uuid,e=n.uuid;let i=c[t];void 0===i&&(i={},c[t]=i);let r=i[e];void 0===r&&(r=h.clone(),i[e]=r),h=r}return h.visible=n.visible,h.wireframe=n.wireframe,h.side=3===a?null!==n.shadowSide?n.shadowSide:n.side:null!==n.shadowSide?n.shadowSide:u[n.side],h.alphaMap=n.alphaMap,h.alphaTest=n.alphaTest,h.clipShadows=n.clipShadows,h.clippingPlanes=n.clippingPlanes,h.clipIntersection=n.clipIntersection,h.displacementMap=n.displacementMap,h.displacementScale=n.displacementScale,h.displacementBias=n.displacementBias,h.wireframeLinewidth=n.wireframeLinewidth,h.linewidth=n.linewidth,!0===i.isPointLight&&!0===h.isMeshDistanceMaterial&&(h.referencePosition.setFromMatrixPosition(i.matrixWorld),h.nearDistance=r,h.farDistance=s),h}function _(n,r,s,a,o){if(!1===n.visible)return;if(n.layers.test(r.layers)&&(n.isMesh||n.isLine||n.isPoints)&&(n.castShadow||n.receiveShadow&&3===o)&&(!n.frustumCulled||i.intersectsObject(n))){n.modelViewMatrix.multiplyMatrices(s.matrixWorldInverse,n.matrixWorld);const i=e.update(n),r=n.material;if(Array.isArray(r)){const e=i.groups;for(let l=0,c=e.length;lh||r.y>h)&&(r.x>h&&(s.x=Math.floor(h/m.x),r.x=s.x*m.x,u.mapSize.x=s.x),r.y>h&&(s.y=Math.floor(h/m.y),r.y=s.y*m.y,u.mapSize.y=s.y)),null!==u.map||u.isPointLightShadow||3!==this.type||(u.map=new Qt(r.x,r.y),u.map.texture.name=c.name+".shadowMap",u.mapPass=new Qt(r.x,r.y),u.camera.updateProjectionMatrix()),null===u.map){const t={minFilter:d,magFilter:d,format:S};u.map=new Qt(r.x,r.y,t),u.map.texture.name=c.name+".shadowMap",u.camera.updateProjectionMatrix()}t.setRenderTarget(u.map),t.clear();const f=u.getViewportCount();for(let t=0;t=1):-1!==L.indexOf("OpenGL ES")&&(C=parseFloat(/^OpenGL ES (\d)/.exec(L)[1]),R=C>=2);let P=null,D={};const I=t.getParameter(3088),N=t.getParameter(2978),B=(new Kt).fromArray(I),z=(new Kt).fromArray(N);function O(e,n,i){const r=new Uint8Array(4),s=t.createTexture();t.bindTexture(e,s),t.texParameteri(e,10241,9728),t.texParameteri(e,10240,9728);for(let e=0;ei||t.height>i)&&(r=i/Math.max(t.width,t.height)),r<1||!0===e){if("undefined"!=typeof HTMLImageElement&&t instanceof HTMLImageElement||"undefined"!=typeof HTMLCanvasElement&&t instanceof HTMLCanvasElement||"undefined"!=typeof ImageBitmap&&t instanceof ImageBitmap){const i=e?Et:Math.floor,s=i(r*t.width),a=i(r*t.height);void 0===I&&(I=z(s,a));const o=n?z(s,a):I;o.width=s,o.height=a;return o.getContext("2d").drawImage(t,0,0,s,a),console.warn("THREE.WebGLRenderer: Texture has been resized from ("+t.width+"x"+t.height+") to ("+s+"x"+a+")."),o}return"data"in t&&console.warn("THREE.WebGLRenderer: Image in DataTexture is too big ("+t.width+"x"+t.height+")."),t}return t}function U(t){return St(t.width)&&St(t.height)}function F(t,e){return t.generateMipmaps&&e&&t.minFilter!==d&&t.minFilter!==f}function H(e){t.generateMipmap(e)}function G(n,i,r,s,a=!1){if(!1===o)return i;if(null!==n){if(void 0!==t[n])return t[n];console.warn("THREE.WebGLRenderer: Attempt to use non-existing WebGL internal format '"+n+"'")}let l=i;return 6403===i&&(5126===r&&(l=33326),5131===r&&(l=33325),5121===r&&(l=33321)),33319===i&&(5126===r&&(l=33328),5131===r&&(l=33327),5121===r&&(l=33323)),6408===i&&(5126===r&&(l=34836),5131===r&&(l=34842),5121===r&&(l=s===ot&&!1===a?35907:32856),32819===r&&(l=32854),32820===r&&(l=32855)),33325!==l&&33326!==l&&33327!==l&&33328!==l&&34842!==l&&34836!==l||e.get("EXT_color_buffer_float"),l}function k(t,e,n){return!0===F(t,n)||t.isFramebufferTexture&&t.minFilter!==d&&t.minFilter!==f?Math.log2(Math.max(e.width,e.height))+1:void 0!==t.mipmaps&&t.mipmaps.length>0?t.mipmaps.length:t.isCompressedTexture&&Array.isArray(t.image)?e.mipmaps.length:1}function V(t){return t===d||t===p||t===m?9728:9729}function W(t){const e=t.target;e.removeEventListener("dispose",W),function(t){const e=i.get(t);if(void 0===e.__webglInit)return;const n=t.source,r=N.get(n);if(r){const i=r[e.__cacheKey];i.usedTimes--,0===i.usedTimes&&q(t),0===Object.keys(r).length&&N.delete(n)}i.remove(t)}(e),e.isVideoTexture&&D.delete(e)}function j(e){const n=e.target;n.removeEventListener("dispose",j),function(e){const n=e.texture,r=i.get(e),s=i.get(n);void 0!==s.__webglTexture&&(t.deleteTexture(s.__webglTexture),a.memory.textures--);e.depthTexture&&e.depthTexture.dispose();if(e.isWebGLCubeRenderTarget)for(let e=0;e<6;e++)t.deleteFramebuffer(r.__webglFramebuffer[e]),r.__webglDepthbuffer&&t.deleteRenderbuffer(r.__webglDepthbuffer[e]);else t.deleteFramebuffer(r.__webglFramebuffer),r.__webglDepthbuffer&&t.deleteRenderbuffer(r.__webglDepthbuffer),r.__webglMultisampledFramebuffer&&t.deleteFramebuffer(r.__webglMultisampledFramebuffer),r.__webglColorRenderbuffer&&t.deleteRenderbuffer(r.__webglColorRenderbuffer),r.__webglDepthRenderbuffer&&t.deleteRenderbuffer(r.__webglDepthRenderbuffer);if(e.isWebGLMultipleRenderTargets)for(let e=0,r=n.length;e0&&r.__version!==t.version){const n=t.image;if(null===n)console.warn("THREE.WebGLRenderer: Texture marked for update but no image data found.");else{if(!1!==n.complete)return void $(r,t,e);console.warn("THREE.WebGLRenderer: Texture marked for update but image is incomplete")}}n.activeTexture(33984+e),n.bindTexture(3553,r.__webglTexture)}const Y={[c]:10497,[h]:33071,[u]:33648},Z={[d]:9728,[p]:9984,[m]:9986,[f]:9729,[g]:9985,[v]:9987};function K(n,s,a){if(a?(t.texParameteri(n,10242,Y[s.wrapS]),t.texParameteri(n,10243,Y[s.wrapT]),32879!==n&&35866!==n||t.texParameteri(n,32882,Y[s.wrapR]),t.texParameteri(n,10240,Z[s.magFilter]),t.texParameteri(n,10241,Z[s.minFilter])):(t.texParameteri(n,10242,33071),t.texParameteri(n,10243,33071),32879!==n&&35866!==n||t.texParameteri(n,32882,33071),s.wrapS===h&&s.wrapT===h||console.warn("THREE.WebGLRenderer: Texture is not power of two. Texture.wrapS and Texture.wrapT should be set to THREE.ClampToEdgeWrapping."),t.texParameteri(n,10240,V(s.magFilter)),t.texParameteri(n,10241,V(s.minFilter)),s.minFilter!==d&&s.minFilter!==f&&console.warn("THREE.WebGLRenderer: Texture is not power of two. Texture.minFilter should be set to THREE.NearestFilter or THREE.LinearFilter.")),!0===e.has("EXT_texture_filter_anisotropic")){const a=e.get("EXT_texture_filter_anisotropic");if(s.type===b&&!1===e.has("OES_texture_float_linear"))return;if(!1===o&&s.type===M&&!1===e.has("OES_texture_half_float_linear"))return;(s.anisotropy>1||i.get(s).__currentAnisotropy)&&(t.texParameterf(n,a.TEXTURE_MAX_ANISOTROPY_EXT,Math.min(s.anisotropy,r.getMaxAnisotropy())),i.get(s).__currentAnisotropy=s.anisotropy)}}function Q(e,n){let i=!1;void 0===e.__webglInit&&(e.__webglInit=!0,n.addEventListener("dispose",W));const r=n.source;let s=N.get(r);void 0===s&&(s={},N.set(r,s));const o=function(t){const e=[];return e.push(t.wrapS),e.push(t.wrapT),e.push(t.magFilter),e.push(t.minFilter),e.push(t.anisotropy),e.push(t.internalFormat),e.push(t.format),e.push(t.type),e.push(t.generateMipmaps),e.push(t.premultiplyAlpha),e.push(t.flipY),e.push(t.unpackAlignment),e.push(t.encoding),e.join()}(n);if(o!==e.__cacheKey){void 0===s[o]&&(s[o]={texture:t.createTexture(),usedTimes:0},a.memory.textures++,i=!0),s[o].usedTimes++;const r=s[e.__cacheKey];void 0!==r&&(s[e.__cacheKey].usedTimes--,0===r.usedTimes&&q(n)),e.__cacheKey=o,e.__webglTexture=s[o].texture}return i}function $(e,i,r){let a=3553;i.isDataArrayTexture&&(a=35866),i.isData3DTexture&&(a=32879);const l=Q(e,i),c=i.source;if(n.activeTexture(33984+r),n.bindTexture(a,e.__webglTexture),c.version!==c.__currentVersion||!0===l){t.pixelStorei(37440,i.flipY),t.pixelStorei(37441,i.premultiplyAlpha),t.pixelStorei(3317,i.unpackAlignment),t.pixelStorei(37443,0);const r=function(t){return!o&&(t.wrapS!==h||t.wrapT!==h||t.minFilter!==d&&t.minFilter!==f)}(i)&&!1===U(i.image);let u=O(i.image,r,!1,R);u=st(i,u);const p=U(u)||o,m=s.convert(i.format,i.encoding);let g,v=s.convert(i.type),y=G(i.internalFormat,m,v,i.encoding,i.isVideoTexture);K(a,i,p);const M=i.mipmaps,A=o&&!0!==i.isVideoTexture,C=void 0===e.__version||!0===l,L=k(i,u,p);if(i.isDepthTexture)y=6402,o?y=i.type===b?36012:i.type===_?33190:i.type===w?35056:33189:i.type===b&&console.error("WebGLRenderer: Floating point depth texture requires WebGL2."),i.format===T&&6402===y&&i.type!==x&&i.type!==_&&(console.warn("THREE.WebGLRenderer: Use UnsignedShortType or UnsignedIntType for DepthFormat DepthTexture."),i.type=x,v=s.convert(i.type)),i.format===E&&6402===y&&(y=34041,i.type!==w&&(console.warn("THREE.WebGLRenderer: Use UnsignedInt248Type for DepthStencilFormat DepthTexture."),i.type=w,v=s.convert(i.type))),C&&(A?n.texStorage2D(3553,1,y,u.width,u.height):n.texImage2D(3553,0,y,u.width,u.height,0,m,v,null));else if(i.isDataTexture)if(M.length>0&&p){A&&C&&n.texStorage2D(3553,L,y,M[0].width,M[0].height);for(let t=0,e=M.length;t>=1,e>>=1}}else if(M.length>0&&p){A&&C&&n.texStorage2D(3553,L,y,M[0].width,M[0].height);for(let t=0,e=M.length;t0&&!0===e.has("WEBGL_multisampled_render_to_texture")&&!1!==n.__useRenderToTexture}function st(t,n){const i=t.encoding,r=t.format,s=t.type;return!0===t.isCompressedTexture||!0===t.isVideoTexture||t.format===mt||i!==at&&(i===ot?!1===o?!0===e.has("EXT_sRGB")&&r===S?(t.format=mt,t.minFilter=f,t.generateMipmaps=!1):n=qt.sRGBToLinear(n):r===S&&s===y||console.warn("THREE.WebGLTextures: sRGB encoded textures have to use RGBAFormat and UnsignedByteType."):console.error("THREE.WebGLTextures: Unsupported texture encoding:",i)),n}this.allocateTextureUnit=function(){const t=X;return t>=l&&console.warn("THREE.WebGLTextures: Trying to use "+t+" texture units while this GPU supports only "+l),X+=1,t},this.resetTextureUnits=function(){X=0},this.setTexture2D=J,this.setTexture2DArray=function(t,e){const r=i.get(t);t.version>0&&r.__version!==t.version?$(r,t,e):(n.activeTexture(33984+e),n.bindTexture(35866,r.__webglTexture))},this.setTexture3D=function(t,e){const r=i.get(t);t.version>0&&r.__version!==t.version?$(r,t,e):(n.activeTexture(33984+e),n.bindTexture(32879,r.__webglTexture))},this.setTextureCube=function(e,r){const a=i.get(e);e.version>0&&a.__version!==e.version?function(e,i,r){if(6!==i.image.length)return;const a=Q(e,i),l=i.source;if(n.activeTexture(33984+r),n.bindTexture(34067,e.__webglTexture),l.version!==l.__currentVersion||!0===a){t.pixelStorei(37440,i.flipY),t.pixelStorei(37441,i.premultiplyAlpha),t.pixelStorei(3317,i.unpackAlignment),t.pixelStorei(37443,0);const r=i.isCompressedTexture||i.image[0].isCompressedTexture,a=i.image[0]&&i.image[0].isDataTexture,c=[];for(let t=0;t<6;t++)c[t]=r||a?a?i.image[t].image:i.image[t]:O(i.image[t],!1,!0,A),c[t]=st(i,c[t]);const h=c[0],u=U(h)||o,d=s.convert(i.format,i.encoding),p=s.convert(i.type),m=G(i.internalFormat,d,p,i.encoding),f=o&&!0!==i.isVideoTexture,g=void 0===e.__version;let v,y=k(i,h,u);if(K(34067,i,u),r){f&&g&&n.texStorage2D(34067,y,m,h.width,h.height);for(let t=0;t<6;t++){v=c[t].mipmaps;for(let e=0;e0&&y++,n.texStorage2D(34067,y,m,c[0].width,c[0].height));for(let t=0;t<6;t++)if(a){f?n.texSubImage2D(34069+t,0,0,0,c[t].width,c[t].height,d,p,c[t].data):n.texImage2D(34069+t,0,m,c[t].width,c[t].height,0,d,p,c[t].data);for(let e=0;e0&&!1===rt(e)){c.__webglMultisampledFramebuffer=t.createFramebuffer(),c.__webglColorRenderbuffer=t.createRenderbuffer(),t.bindRenderbuffer(36161,c.__webglColorRenderbuffer);const i=s.convert(l.format,l.encoding),r=s.convert(l.type),a=G(l.internalFormat,i,r,l.encoding),o=it(e);t.renderbufferStorageMultisample(36161,o,a,e.width,e.height),n.bindFramebuffer(36160,c.__webglMultisampledFramebuffer),t.framebufferRenderbuffer(36160,36064,36161,c.__webglColorRenderbuffer),t.bindRenderbuffer(36161,null),e.depthBuffer&&(c.__webglDepthRenderbuffer=t.createRenderbuffer(),et(c.__webglDepthRenderbuffer,e,!0)),n.bindFramebuffer(36160,null)}if(u){n.bindTexture(34067,h.__webglTexture),K(34067,l,p);for(let t=0;t<6;t++)tt(c.__webglFramebuffer[t],e,l,36064,34069+t);F(l,p)&&H(34067),n.unbindTexture()}else if(d){const t=e.texture;for(let r=0,s=t.length;r0&&!1===rt(e)){const r=e.width,s=e.height;let a=16384;const o=[36064],l=e.stencilBuffer?33306:36096;e.depthBuffer&&o.push(l);const c=i.get(e),h=void 0!==c.__ignoreDepthValues&&c.__ignoreDepthValues;!1===h&&(e.depthBuffer&&(a|=256),e.stencilBuffer&&(a|=1024)),n.bindFramebuffer(36008,c.__webglMultisampledFramebuffer),n.bindFramebuffer(36009,c.__webglFramebuffer),!0===h&&(t.invalidateFramebuffer(36008,[l]),t.invalidateFramebuffer(36009,[l])),t.blitFramebuffer(0,0,r,s,0,0,r,s,a,9728),P&&t.invalidateFramebuffer(36008,o),n.bindFramebuffer(36008,null),n.bindFramebuffer(36009,c.__webglMultisampledFramebuffer)}},this.setupDepthRenderbuffer=nt,this.setupFrameBufferTexture=tt,this.useMultisampledRTT=rt}function Qs(t,e,n){const i=n.isWebGL2;return{convert:function(n,r=null){let s;if(n===y)return 5121;if(1017===n)return 32819;if(1018===n)return 32820;if(1010===n)return 5120;if(1011===n)return 5122;if(n===x)return 5123;if(1013===n)return 5124;if(n===_)return 5125;if(n===b)return 5126;if(n===M)return i?5131:(s=e.get("OES_texture_half_float"),null!==s?s.HALF_FLOAT_OES:null);if(1021===n)return 6406;if(n===S)return 6408;if(1024===n)return 6409;if(1025===n)return 6410;if(n===T)return 6402;if(n===E)return 34041;if(1028===n)return 6403;if(1022===n)return console.warn("THREE.WebGLRenderer: THREE.RGBFormat has been removed. Use THREE.RGBAFormat instead. https://github.com/mrdoob/three.js/pull/23228"),6408;if(n===mt)return s=e.get("EXT_sRGB"),null!==s?s.SRGB_ALPHA_EXT:null;if(1029===n)return 36244;if(1030===n)return 33319;if(1031===n)return 33320;if(1033===n)return 36249;if(n===A||n===R||n===C||n===L)if(r===ot){if(s=e.get("WEBGL_compressed_texture_s3tc_srgb"),null===s)return null;if(n===A)return s.COMPRESSED_SRGB_S3TC_DXT1_EXT;if(n===R)return s.COMPRESSED_SRGB_ALPHA_S3TC_DXT1_EXT;if(n===C)return s.COMPRESSED_SRGB_ALPHA_S3TC_DXT3_EXT;if(n===L)return s.COMPRESSED_SRGB_ALPHA_S3TC_DXT5_EXT}else{if(s=e.get("WEBGL_compressed_texture_s3tc"),null===s)return null;if(n===A)return s.COMPRESSED_RGB_S3TC_DXT1_EXT;if(n===R)return s.COMPRESSED_RGBA_S3TC_DXT1_EXT;if(n===C)return s.COMPRESSED_RGBA_S3TC_DXT3_EXT;if(n===L)return s.COMPRESSED_RGBA_S3TC_DXT5_EXT}if(n===P||n===D||n===I||n===N){if(s=e.get("WEBGL_compressed_texture_pvrtc"),null===s)return null;if(n===P)return s.COMPRESSED_RGB_PVRTC_4BPPV1_IMG;if(n===D)return s.COMPRESSED_RGB_PVRTC_2BPPV1_IMG;if(n===I)return s.COMPRESSED_RGBA_PVRTC_4BPPV1_IMG;if(n===N)return s.COMPRESSED_RGBA_PVRTC_2BPPV1_IMG}if(36196===n)return s=e.get("WEBGL_compressed_texture_etc1"),null!==s?s.COMPRESSED_RGB_ETC1_WEBGL:null;if(n===B||n===z){if(s=e.get("WEBGL_compressed_texture_etc"),null===s)return null;if(n===B)return r===ot?s.COMPRESSED_SRGB8_ETC2:s.COMPRESSED_RGB8_ETC2;if(n===z)return r===ot?s.COMPRESSED_SRGB8_ALPHA8_ETC2_EAC:s.COMPRESSED_RGBA8_ETC2_EAC}if(n===O||n===U||n===F||n===H||n===G||n===k||n===V||n===W||n===j||n===q||n===X||n===J||n===Y||n===Z){if(s=e.get("WEBGL_compressed_texture_astc"),null===s)return null;if(n===O)return r===ot?s.COMPRESSED_SRGB8_ALPHA8_ASTC_4x4_KHR:s.COMPRESSED_RGBA_ASTC_4x4_KHR;if(n===U)return r===ot?s.COMPRESSED_SRGB8_ALPHA8_ASTC_5x4_KHR:s.COMPRESSED_RGBA_ASTC_5x4_KHR;if(n===F)return r===ot?s.COMPRESSED_SRGB8_ALPHA8_ASTC_5x5_KHR:s.COMPRESSED_RGBA_ASTC_5x5_KHR;if(n===H)return r===ot?s.COMPRESSED_SRGB8_ALPHA8_ASTC_6x5_KHR:s.COMPRESSED_RGBA_ASTC_6x5_KHR;if(n===G)return r===ot?s.COMPRESSED_SRGB8_ALPHA8_ASTC_6x6_KHR:s.COMPRESSED_RGBA_ASTC_6x6_KHR;if(n===k)return r===ot?s.COMPRESSED_SRGB8_ALPHA8_ASTC_8x5_KHR:s.COMPRESSED_RGBA_ASTC_8x5_KHR;if(n===V)return r===ot?s.COMPRESSED_SRGB8_ALPHA8_ASTC_8x6_KHR:s.COMPRESSED_RGBA_ASTC_8x6_KHR;if(n===W)return r===ot?s.COMPRESSED_SRGB8_ALPHA8_ASTC_8x8_KHR:s.COMPRESSED_RGBA_ASTC_8x8_KHR;if(n===j)return r===ot?s.COMPRESSED_SRGB8_ALPHA8_ASTC_10x5_KHR:s.COMPRESSED_RGBA_ASTC_10x5_KHR;if(n===q)return r===ot?s.COMPRESSED_SRGB8_ALPHA8_ASTC_10x6_KHR:s.COMPRESSED_RGBA_ASTC_10x6_KHR;if(n===X)return r===ot?s.COMPRESSED_SRGB8_ALPHA8_ASTC_10x8_KHR:s.COMPRESSED_RGBA_ASTC_10x8_KHR;if(n===J)return r===ot?s.COMPRESSED_SRGB8_ALPHA8_ASTC_10x10_KHR:s.COMPRESSED_RGBA_ASTC_10x10_KHR;if(n===Y)return r===ot?s.COMPRESSED_SRGB8_ALPHA8_ASTC_12x10_KHR:s.COMPRESSED_RGBA_ASTC_12x10_KHR;if(n===Z)return r===ot?s.COMPRESSED_SRGB8_ALPHA8_ASTC_12x12_KHR:s.COMPRESSED_RGBA_ASTC_12x12_KHR}if(n===K){if(s=e.get("EXT_texture_compression_bptc"),null===s)return null;if(n===K)return r===ot?s.COMPRESSED_SRGB_ALPHA_BPTC_UNORM_EXT:s.COMPRESSED_RGBA_BPTC_UNORM_EXT}return n===w?i?34042:(s=e.get("WEBGL_depth_texture"),null!==s?s.UNSIGNED_INT_24_8_WEBGL:null):void 0!==t[n]?t[n]:null}}}class $s extends fi{constructor(t=[]){super(),this.cameras=t}}$s.prototype.isArrayCamera=!0;class ta extends ln{constructor(){super(),this.type="Group"}}ta.prototype.isGroup=!0;const ea={type:"move"};class na{constructor(){this._targetRay=null,this._grip=null,this._hand=null}getHandSpace(){return null===this._hand&&(this._hand=new ta,this._hand.matrixAutoUpdate=!1,this._hand.visible=!1,this._hand.joints={},this._hand.inputState={pinching:!1}),this._hand}getTargetRaySpace(){return null===this._targetRay&&(this._targetRay=new ta,this._targetRay.matrixAutoUpdate=!1,this._targetRay.visible=!1,this._targetRay.hasLinearVelocity=!1,this._targetRay.linearVelocity=new se,this._targetRay.hasAngularVelocity=!1,this._targetRay.angularVelocity=new se),this._targetRay}getGripSpace(){return null===this._grip&&(this._grip=new ta,this._grip.matrixAutoUpdate=!1,this._grip.visible=!1,this._grip.hasLinearVelocity=!1,this._grip.linearVelocity=new se,this._grip.hasAngularVelocity=!1,this._grip.angularVelocity=new se),this._grip}dispatchEvent(t){return null!==this._targetRay&&this._targetRay.dispatchEvent(t),null!==this._grip&&this._grip.dispatchEvent(t),null!==this._hand&&this._hand.dispatchEvent(t),this}disconnect(t){return this.dispatchEvent({type:"disconnected",data:t}),null!==this._targetRay&&(this._targetRay.visible=!1),null!==this._grip&&(this._grip.visible=!1),null!==this._hand&&(this._hand.visible=!1),this}update(t,e,n){let i=null,r=null,s=null;const a=this._targetRay,o=this._grip,l=this._hand;if(t&&"visible-blurred"!==e.session.visibilityState)if(null!==a&&(i=e.getPose(t.targetRaySpace,n),null!==i&&(a.matrix.fromArray(i.transform.matrix),a.matrix.decompose(a.position,a.rotation,a.scale),i.linearVelocity?(a.hasLinearVelocity=!0,a.linearVelocity.copy(i.linearVelocity)):a.hasLinearVelocity=!1,i.angularVelocity?(a.hasAngularVelocity=!0,a.angularVelocity.copy(i.angularVelocity)):a.hasAngularVelocity=!1,this.dispatchEvent(ea))),l&&t.hand){s=!0;for(const i of t.hand.values()){const t=e.getJointPose(i,n);if(void 0===l.joints[i.jointName]){const t=new ta;t.matrixAutoUpdate=!1,t.visible=!1,l.joints[i.jointName]=t,l.add(t)}const r=l.joints[i.jointName];null!==t&&(r.matrix.fromArray(t.transform.matrix),r.matrix.decompose(r.position,r.rotation,r.scale),r.jointRadius=t.radius),r.visible=null!==t}const i=l.joints["index-finger-tip"],r=l.joints["thumb-tip"],a=i.position.distanceTo(r.position),o=.02,c=.005;l.inputState.pinching&&a>o+c?(l.inputState.pinching=!1,this.dispatchEvent({type:"pinchend",handedness:t.handedness,target:this})):!l.inputState.pinching&&a<=o-c&&(l.inputState.pinching=!0,this.dispatchEvent({type:"pinchstart",handedness:t.handedness,target:this}))}else null!==o&&t.gripSpace&&(r=e.getPose(t.gripSpace,n),null!==r&&(o.matrix.fromArray(r.transform.matrix),o.matrix.decompose(o.position,o.rotation,o.scale),r.linearVelocity?(o.hasLinearVelocity=!0,o.linearVelocity.copy(r.linearVelocity)):o.hasLinearVelocity=!1,r.angularVelocity?(o.hasAngularVelocity=!0,o.angularVelocity.copy(r.angularVelocity)):o.hasAngularVelocity=!1));return null!==a&&(a.visible=null!==i),null!==o&&(o.visible=null!==r),null!==l&&(l.visible=null!==s),this}}class ia extends Zt{constructor(t,e,n,i,r,s,a,o,l,c){if((c=void 0!==c?c:T)!==T&&c!==E)throw new Error("DepthTexture format must be either THREE.DepthFormat or THREE.DepthStencilFormat");void 0===n&&c===T&&(n=x),void 0===n&&c===E&&(n=w),super(null,i,r,s,a,o,c,n,l),this.image={width:t,height:e},this.magFilter=void 0!==a?a:d,this.minFilter=void 0!==o?o:d,this.flipY=!1,this.generateMipmaps=!1}}ia.prototype.isDepthTexture=!0;class ra extends ft{constructor(t,e){super();const n=this;let i=null,r=1,s=null,a="local-floor",o=null,l=null,c=null,h=null,u=null,d=null;const p=e.getContextAttributes();let m=null,f=null;const g=[],v=new Map,_=new fi;_.layers.enable(1),_.viewport=new Kt;const b=new fi;b.layers.enable(2),b.viewport=new Kt;const M=[_,b],A=new $s;A.layers.enable(1),A.layers.enable(2);let R=null,C=null;function L(t){const e=v.get(t.inputSource);e&&e.dispatchEvent({type:t.type,data:t.inputSource})}function P(){v.forEach((function(t,e){t.disconnect(e)})),v.clear(),R=null,C=null,t.setRenderTarget(m),u=null,h=null,c=null,i=null,f=null,O.stop(),n.isPresenting=!1,n.dispatchEvent({type:"sessionend"})}function D(t){const e=i.inputSources;for(let t=0;t0&&(n.alphaTest.value=i.alphaTest);const r=e.get(i).envMap;if(r&&(n.envMap.value=r,n.flipEnvMap.value=r.isCubeTexture&&!1===r.isRenderTargetTexture?-1:1,n.reflectivity.value=i.reflectivity,n.ior.value=i.ior,n.refractionRatio.value=i.refractionRatio),i.lightMap){n.lightMap.value=i.lightMap;const e=!0!==t.physicallyCorrectLights?Math.PI:1;n.lightMapIntensity.value=i.lightMapIntensity*e}let s,a;i.aoMap&&(n.aoMap.value=i.aoMap,n.aoMapIntensity.value=i.aoMapIntensity),i.map?s=i.map:i.specularMap?s=i.specularMap:i.displacementMap?s=i.displacementMap:i.normalMap?s=i.normalMap:i.bumpMap?s=i.bumpMap:i.roughnessMap?s=i.roughnessMap:i.metalnessMap?s=i.metalnessMap:i.alphaMap?s=i.alphaMap:i.emissiveMap?s=i.emissiveMap:i.clearcoatMap?s=i.clearcoatMap:i.clearcoatNormalMap?s=i.clearcoatNormalMap:i.clearcoatRoughnessMap?s=i.clearcoatRoughnessMap:i.specularIntensityMap?s=i.specularIntensityMap:i.specularColorMap?s=i.specularColorMap:i.transmissionMap?s=i.transmissionMap:i.thicknessMap?s=i.thicknessMap:i.sheenColorMap?s=i.sheenColorMap:i.sheenRoughnessMap&&(s=i.sheenRoughnessMap),void 0!==s&&(s.isWebGLRenderTarget&&(s=s.texture),!0===s.matrixAutoUpdate&&s.updateMatrix(),n.uvTransform.value.copy(s.matrix)),i.aoMap?a=i.aoMap:i.lightMap&&(a=i.lightMap),void 0!==a&&(a.isWebGLRenderTarget&&(a=a.texture),!0===a.matrixAutoUpdate&&a.updateMatrix(),n.uv2Transform.value.copy(a.matrix))}return{refreshFogUniforms:function(t,e){t.fogColor.value.copy(e.color),e.isFog?(t.fogNear.value=e.near,t.fogFar.value=e.far):e.isFogExp2&&(t.fogDensity.value=e.density)},refreshMaterialUniforms:function(t,i,r,s,a){i.isMeshBasicMaterial||i.isMeshLambertMaterial?n(t,i):i.isMeshToonMaterial?(n(t,i),function(t,e){e.gradientMap&&(t.gradientMap.value=e.gradientMap)}(t,i)):i.isMeshPhongMaterial?(n(t,i),function(t,e){t.specular.value.copy(e.specular),t.shininess.value=Math.max(e.shininess,1e-4)}(t,i)):i.isMeshStandardMaterial?(n(t,i),function(t,n){t.roughness.value=n.roughness,t.metalness.value=n.metalness,n.roughnessMap&&(t.roughnessMap.value=n.roughnessMap);n.metalnessMap&&(t.metalnessMap.value=n.metalnessMap);e.get(n).envMap&&(t.envMapIntensity.value=n.envMapIntensity)}(t,i),i.isMeshPhysicalMaterial&&function(t,e,n){t.ior.value=e.ior,e.sheen>0&&(t.sheenColor.value.copy(e.sheenColor).multiplyScalar(e.sheen),t.sheenRoughness.value=e.sheenRoughness,e.sheenColorMap&&(t.sheenColorMap.value=e.sheenColorMap),e.sheenRoughnessMap&&(t.sheenRoughnessMap.value=e.sheenRoughnessMap));e.clearcoat>0&&(t.clearcoat.value=e.clearcoat,t.clearcoatRoughness.value=e.clearcoatRoughness,e.clearcoatMap&&(t.clearcoatMap.value=e.clearcoatMap),e.clearcoatRoughnessMap&&(t.clearcoatRoughnessMap.value=e.clearcoatRoughnessMap),e.clearcoatNormalMap&&(t.clearcoatNormalScale.value.copy(e.clearcoatNormalScale),t.clearcoatNormalMap.value=e.clearcoatNormalMap,1===e.side&&t.clearcoatNormalScale.value.negate()));e.transmission>0&&(t.transmission.value=e.transmission,t.transmissionSamplerMap.value=n.texture,t.transmissionSamplerSize.value.set(n.width,n.height),e.transmissionMap&&(t.transmissionMap.value=e.transmissionMap),t.thickness.value=e.thickness,e.thicknessMap&&(t.thicknessMap.value=e.thicknessMap),t.attenuationDistance.value=e.attenuationDistance,t.attenuationColor.value.copy(e.attenuationColor));t.specularIntensity.value=e.specularIntensity,t.specularColor.value.copy(e.specularColor),e.specularIntensityMap&&(t.specularIntensityMap.value=e.specularIntensityMap);e.specularColorMap&&(t.specularColorMap.value=e.specularColorMap)}(t,i,a)):i.isMeshMatcapMaterial?(n(t,i),function(t,e){e.matcap&&(t.matcap.value=e.matcap)}(t,i)):i.isMeshDepthMaterial?n(t,i):i.isMeshDistanceMaterial?(n(t,i),function(t,e){t.referencePosition.value.copy(e.referencePosition),t.nearDistance.value=e.nearDistance,t.farDistance.value=e.farDistance}(t,i)):i.isMeshNormalMaterial?n(t,i):i.isLineBasicMaterial?(function(t,e){t.diffuse.value.copy(e.color),t.opacity.value=e.opacity}(t,i),i.isLineDashedMaterial&&function(t,e){t.dashSize.value=e.dashSize,t.totalSize.value=e.dashSize+e.gapSize,t.scale.value=e.scale}(t,i)):i.isPointsMaterial?function(t,e,n,i){t.diffuse.value.copy(e.color),t.opacity.value=e.opacity,t.size.value=e.size*n,t.scale.value=.5*i,e.map&&(t.map.value=e.map);e.alphaMap&&(t.alphaMap.value=e.alphaMap);e.alphaTest>0&&(t.alphaTest.value=e.alphaTest);let r;e.map?r=e.map:e.alphaMap&&(r=e.alphaMap);void 0!==r&&(!0===r.matrixAutoUpdate&&r.updateMatrix(),t.uvTransform.value.copy(r.matrix))}(t,i,r,s):i.isSpriteMaterial?function(t,e){t.diffuse.value.copy(e.color),t.opacity.value=e.opacity,t.rotation.value=e.rotation,e.map&&(t.map.value=e.map);e.alphaMap&&(t.alphaMap.value=e.alphaMap);e.alphaTest>0&&(t.alphaTest.value=e.alphaTest);let n;e.map?n=e.map:e.alphaMap&&(n=e.alphaMap);void 0!==n&&(!0===n.matrixAutoUpdate&&n.updateMatrix(),t.uvTransform.value.copy(n.matrix))}(t,i):i.isShadowMaterial?(t.color.value.copy(i.color),t.opacity.value=i.opacity):i.isShaderMaterial&&(i.uniformsNeedUpdate=!1)}}}function aa(t={}){const e=void 0!==t.canvas?t.canvas:function(){const t=It("canvas");return t.style.display="block",t}(),n=void 0!==t.context?t.context:null,i=void 0===t.depth||t.depth,r=void 0===t.stencil||t.stencil,s=void 0!==t.antialias&&t.antialias,a=void 0===t.premultipliedAlpha||t.premultipliedAlpha,o=void 0!==t.preserveDrawingBuffer&&t.preserveDrawingBuffer,l=void 0!==t.powerPreference?t.powerPreference:"default",c=void 0!==t.failIfMajorPerformanceCaveat&&t.failIfMajorPerformanceCaveat;let h;h=null!==n?n.getContextAttributes().alpha:void 0!==t.alpha&&t.alpha;let u=null,d=null;const p=[],m=[];this.domElement=e,this.debug={checkShaderErrors:!0},this.autoClear=!0,this.autoClearColor=!0,this.autoClearDepth=!0,this.autoClearStencil=!0,this.sortObjects=!0,this.clippingPlanes=[],this.localClippingEnabled=!1,this.outputEncoding=at,this.physicallyCorrectLights=!1,this.toneMapping=0,this.toneMappingExposure=1;const f=this;let g=!1,x=0,_=0,w=null,T=-1,E=null;const A=new Kt,R=new Kt;let C=null,L=e.width,P=e.height,D=1,I=null,N=null;const B=new Kt(0,0,L,P),z=new Kt(0,0,L,P);let O=!1;const U=new Ei;let F=!1,H=!1,G=null;const k=new ze,V=new Rt,W=new se,j={background:null,fog:null,environment:null,overrideMaterial:null,isScene:!0};function q(){return null===w?D:1}let X,J,Y,Z,K,Q,$,tt,et,nt,it,rt,st,ot,lt,ct,ht,ut,dt,pt,mt,ft,gt,vt=n;function yt(t,n){for(let i=0;i0&&function(t,e,n){const i=J.isWebGL2;null===G&&(G=new Qt(1,1,{generateMipmaps:!0,type:X.has("EXT_color_buffer_half_float")?M:y,minFilter:v,samples:i&&!0===s?4:0}));f.getDrawingBufferSize(V),i?G.setSize(V.x,V.y):G.setSize(Et(V.x),Et(V.y));const r=f.getRenderTarget();f.setRenderTarget(G),f.clear();const a=f.toneMapping;f.toneMapping=0,Dt(t,e,n),f.toneMapping=a,Q.updateMultisampleRenderTarget(G),Q.updateRenderTargetMipmap(G),f.setRenderTarget(r)}(r,e,n),i&&Y.viewport(A.copy(i)),r.length>0&&Dt(r,e,n),a.length>0&&Dt(a,e,n),o.length>0&&Dt(o,e,n),Y.buffers.depth.setTest(!0),Y.buffers.depth.setMask(!0),Y.buffers.color.setMask(!0),Y.setPolygonOffset(!1)}function Dt(t,e,n){const i=!0===e.isScene?e.overrideMaterial:null;for(let r=0,s=t.length;r0?m[m.length-1]:null,p.pop(),u=p.length>0?p[p.length-1]:null},this.getActiveCubeFace=function(){return x},this.getActiveMipmapLevel=function(){return _},this.getRenderTarget=function(){return w},this.setRenderTargetTextures=function(t,e,n){K.get(t.texture).__webglTexture=e,K.get(t.depthTexture).__webglTexture=n;const i=K.get(t);i.__hasExternalTextures=!0,i.__hasExternalTextures&&(i.__autoAllocateDepthBuffer=void 0===n,i.__autoAllocateDepthBuffer||!0===X.has("WEBGL_multisampled_render_to_texture")&&(console.warn("THREE.WebGLRenderer: Render-to-texture extension was disabled because an external texture was provided"),i.__useRenderToTexture=!1))},this.setRenderTargetFramebuffer=function(t,e){const n=K.get(t);n.__webglFramebuffer=e,n.__useDefaultFramebuffer=void 0===e},this.setRenderTarget=function(t,e=0,n=0){w=t,x=e,_=n;let i=!0;if(t){const e=K.get(t);void 0!==e.__useDefaultFramebuffer?(Y.bindFramebuffer(36160,null),i=!1):void 0===e.__webglFramebuffer?Q.setupRenderTarget(t):e.__hasExternalTextures&&Q.rebindTextures(t,K.get(t.texture).__webglTexture,K.get(t.depthTexture).__webglTexture)}let r=null,s=!1,a=!1;if(t){const n=t.texture;(n.isData3DTexture||n.isDataArrayTexture)&&(a=!0);const i=K.get(t).__webglFramebuffer;t.isWebGLCubeRenderTarget?(r=i[e],s=!0):r=J.isWebGL2&&t.samples>0&&!1===Q.useMultisampledRTT(t)?K.get(t).__webglMultisampledFramebuffer:i,A.copy(t.viewport),R.copy(t.scissor),C=t.scissorTest}else A.copy(B).multiplyScalar(D).floor(),R.copy(z).multiplyScalar(D).floor(),C=O;if(Y.bindFramebuffer(36160,r)&&J.drawBuffers&&i&&Y.drawBuffers(t,r),Y.viewport(A),Y.scissor(R),Y.setScissorTest(C),s){const i=K.get(t.texture);vt.framebufferTexture2D(36160,36064,34069+e,i.__webglTexture,n)}else if(a){const i=K.get(t.texture),r=e||0;vt.framebufferTextureLayer(36160,36064,i.__webglTexture,n||0,r)}T=-1},this.readRenderTargetPixels=function(t,e,n,i,r,s,a){if(!t||!t.isWebGLRenderTarget)return void console.error("THREE.WebGLRenderer.readRenderTargetPixels: renderTarget is not THREE.WebGLRenderTarget.");let o=K.get(t).__webglFramebuffer;if(t.isWebGLCubeRenderTarget&&void 0!==a&&(o=o[a]),o){Y.bindFramebuffer(36160,o);try{const a=t.texture,o=a.format,l=a.type;if(o!==S&&ft.convert(o)!==vt.getParameter(35739))return void console.error("THREE.WebGLRenderer.readRenderTargetPixels: renderTarget is not in RGBA or implementation defined format.");const c=l===M&&(X.has("EXT_color_buffer_half_float")||J.isWebGL2&&X.has("EXT_color_buffer_float"));if(!(l===y||ft.convert(l)===vt.getParameter(35738)||l===b&&(J.isWebGL2||X.has("OES_texture_float")||X.has("WEBGL_color_buffer_float"))||c))return void console.error("THREE.WebGLRenderer.readRenderTargetPixels: renderTarget is not in UnsignedByteType or implementation defined type.");e>=0&&e<=t.width-i&&n>=0&&n<=t.height-r&&vt.readPixels(e,n,i,r,ft.convert(o),ft.convert(l),s)}finally{const t=null!==w?K.get(w).__webglFramebuffer:null;Y.bindFramebuffer(36160,t)}}},this.copyFramebufferToTexture=function(t,e,n=0){if(!0!==e.isFramebufferTexture)return void console.error("THREE.WebGLRenderer: copyFramebufferToTexture() can only be used with FramebufferTexture.");const i=Math.pow(2,-n),r=Math.floor(e.image.width*i),s=Math.floor(e.image.height*i);Q.setTexture2D(e,0),vt.copyTexSubImage2D(3553,n,0,0,t.x,t.y,r,s),Y.unbindTexture()},this.copyTextureToTexture=function(t,e,n,i=0){const r=e.image.width,s=e.image.height,a=ft.convert(n.format),o=ft.convert(n.type);Q.setTexture2D(n,0),vt.pixelStorei(37440,n.flipY),vt.pixelStorei(37441,n.premultiplyAlpha),vt.pixelStorei(3317,n.unpackAlignment),e.isDataTexture?vt.texSubImage2D(3553,i,t.x,t.y,r,s,a,o,e.image.data):e.isCompressedTexture?vt.compressedTexSubImage2D(3553,i,t.x,t.y,e.mipmaps[0].width,e.mipmaps[0].height,a,e.mipmaps[0].data):vt.texSubImage2D(3553,i,t.x,t.y,a,o,e.image),0===i&&n.generateMipmaps&&vt.generateMipmap(3553),Y.unbindTexture()},this.copyTextureToTexture3D=function(t,e,n,i,r=0){if(f.isWebGL1Renderer)return void console.warn("THREE.WebGLRenderer.copyTextureToTexture3D: can only be used with WebGL2.");const s=t.max.x-t.min.x+1,a=t.max.y-t.min.y+1,o=t.max.z-t.min.z+1,l=ft.convert(i.format),c=ft.convert(i.type);let h;if(i.isData3DTexture)Q.setTexture3D(i,0),h=32879;else{if(!i.isDataArrayTexture)return void console.warn("THREE.WebGLRenderer.copyTextureToTexture3D: only supports THREE.DataTexture3D and THREE.DataTexture2DArray.");Q.setTexture2DArray(i,0),h=35866}vt.pixelStorei(37440,i.flipY),vt.pixelStorei(37441,i.premultiplyAlpha),vt.pixelStorei(3317,i.unpackAlignment);const u=vt.getParameter(3314),d=vt.getParameter(32878),p=vt.getParameter(3316),m=vt.getParameter(3315),g=vt.getParameter(32877),v=n.isCompressedTexture?n.mipmaps[0]:n.image;vt.pixelStorei(3314,v.width),vt.pixelStorei(32878,v.height),vt.pixelStorei(3316,t.min.x),vt.pixelStorei(3315,t.min.y),vt.pixelStorei(32877,t.min.z),n.isDataTexture||n.isData3DTexture?vt.texSubImage3D(h,r,e.x,e.y,e.z,s,a,o,l,c,v.data):n.isCompressedTexture?(console.warn("THREE.WebGLRenderer.copyTextureToTexture3D: untested support for compressed srcTexture."),vt.compressedTexSubImage3D(h,r,e.x,e.y,e.z,s,a,o,l,v.data)):vt.texSubImage3D(h,r,e.x,e.y,e.z,s,a,o,l,c,v),vt.pixelStorei(3314,u),vt.pixelStorei(32878,d),vt.pixelStorei(3316,p),vt.pixelStorei(3315,m),vt.pixelStorei(32877,g),0===r&&i.generateMipmaps&&vt.generateMipmap(h),Y.unbindTexture()},this.initTexture=function(t){Q.setTexture2D(t,0),Y.unbindTexture()},this.resetState=function(){x=0,_=0,w=null,Y.reset(),gt.reset()},"undefined"!=typeof __THREE_DEVTOOLS__&&__THREE_DEVTOOLS__.dispatchEvent(new CustomEvent("observe",{detail:this}))}aa.prototype.isWebGLRenderer=!0;class oa extends aa{}oa.prototype.isWebGL1Renderer=!0;class la{constructor(t,e=25e-5){this.name="",this.color=new Wt(t),this.density=e}clone(){return new la(this.color,this.density)}toJSON(){return{type:"FogExp2",color:this.color.getHex(),density:this.density}}}la.prototype.isFogExp2=!0;class ca{constructor(t,e=1,n=1e3){this.name="",this.color=new Wt(t),this.near=e,this.far=n}clone(){return new ca(this.color,this.near,this.far)}toJSON(){return{type:"Fog",color:this.color.getHex(),near:this.near,far:this.far}}}ca.prototype.isFog=!0;class ha extends ln{constructor(){super(),this.type="Scene",this.background=null,this.environment=null,this.fog=null,this.overrideMaterial=null,this.autoUpdate=!0,"undefined"!=typeof __THREE_DEVTOOLS__&&__THREE_DEVTOOLS__.dispatchEvent(new CustomEvent("observe",{detail:this}))}copy(t,e){return super.copy(t,e),null!==t.background&&(this.background=t.background.clone()),null!==t.environment&&(this.environment=t.environment.clone()),null!==t.fog&&(this.fog=t.fog.clone()),null!==t.overrideMaterial&&(this.overrideMaterial=t.overrideMaterial.clone()),this.autoUpdate=t.autoUpdate,this.matrixAutoUpdate=t.matrixAutoUpdate,this}toJSON(t){const e=super.toJSON(t);return null!==this.fog&&(e.object.fog=this.fog.toJSON()),e}}ha.prototype.isScene=!0;class ua{constructor(t,e){this.array=t,this.stride=e,this.count=void 0!==t?t.length/e:0,this.usage=ut,this.updateRange={offset:0,count:-1},this.version=0,this.uuid=_t()}onUploadCallback(){}set needsUpdate(t){!0===t&&this.version++}setUsage(t){return this.usage=t,this}copy(t){return this.array=new t.array.constructor(t.array),this.count=t.count,this.stride=t.stride,this.usage=t.usage,this}copyAt(t,e,n){t*=this.stride,n*=e.stride;for(let i=0,r=this.stride;it.far||e.push({distance:o,point:ga.clone(),uv:xn.getUV(ga,Ma,wa,Sa,Ta,Ea,Aa,new Rt),face:null,object:this})}copy(t){return super.copy(t),void 0!==t.center&&this.center.copy(t.center),this.material=t.material,this}}function Ca(t,e,n,i,r,s){xa.subVectors(t,n).addScalar(.5).multiply(i),void 0!==r?(_a.x=s*xa.x-r*xa.y,_a.y=r*xa.x+s*xa.y):_a.copy(xa),t.copy(e),t.x+=_a.x,t.y+=_a.y,t.applyMatrix4(ba)}Ra.prototype.isSprite=!0;const La=new se,Pa=new se;class Da extends ln{constructor(){super(),this._currentLevel=0,this.type="LOD",Object.defineProperties(this,{levels:{enumerable:!0,value:[]},isLOD:{value:!0}}),this.autoUpdate=!0}copy(t){super.copy(t,!1);const e=t.levels;for(let t=0,n=e.length;t0){let n,i;for(n=1,i=e.length;n0){La.setFromMatrixPosition(this.matrixWorld);const n=t.ray.origin.distanceTo(La);this.getObjectForDistance(n).raycast(t,e)}}update(t){const e=this.levels;if(e.length>1){La.setFromMatrixPosition(t.matrixWorld),Pa.setFromMatrixPosition(this.matrixWorld);const n=La.distanceTo(Pa)/t.zoom;let i,r;for(e[0].object.visible=!0,i=1,r=e.length;i=e[i].distance;i++)e[i-1].object.visible=!1,e[i].object.visible=!0;for(this._currentLevel=i-1;io)continue;u.applyMatrix4(this.matrixWorld);const d=t.ray.origin.distanceTo(u);dt.far||e.push({distance:d,point:h.clone().applyMatrix4(this.matrixWorld),index:n,face:null,faceIndex:null,object:this})}}else{for(let n=Math.max(0,s.start),i=Math.min(r.count,s.start+s.count)-1;no)continue;u.applyMatrix4(this.matrixWorld);const i=t.ray.origin.distanceTo(u);it.far||e.push({distance:i,point:h.clone().applyMatrix4(this.matrixWorld),index:n,face:null,faceIndex:null,object:this})}}}else n.isGeometry&&console.error("THREE.Line.raycast() no longer supports THREE.Geometry. Use THREE.BufferGeometry instead.")}updateMorphTargets(){const t=this.geometry;if(t.isBufferGeometry){const e=t.morphAttributes,n=Object.keys(e);if(n.length>0){const t=e[n[0]];if(void 0!==t){this.morphTargetInfluences=[],this.morphTargetDictionary={};for(let e=0,n=t.length;e0&&console.error("THREE.Line.updateMorphTargets() does not support THREE.Geometry. Use THREE.BufferGeometry instead.")}}}no.prototype.isLine=!0;const io=new se,ro=new se;class so extends no{constructor(t,e){super(t,e),this.type="LineSegments"}computeLineDistances(){const t=this.geometry;if(t.isBufferGeometry)if(null===t.index){const e=t.attributes.position,n=[];for(let t=0,i=e.count;t0){const t=e[n[0]];if(void 0!==t){this.morphTargetInfluences=[],this.morphTargetDictionary={};for(let e=0,n=t.length;e0&&console.error("THREE.Points.updateMorphTargets() does not support THREE.Geometry. Use THREE.BufferGeometry instead.")}}}function mo(t,e,n,i,r,s,a){const o=co.distanceSqToPoint(t);if(or.far)return;s.push({distance:l,distanceToRay:Math.sqrt(o),point:n,index:e,face:null,object:a})}}po.prototype.isPoints=!0;class fo extends Zt{constructor(t,e,n,i,r,s,a,o,l){super(t,e,n,i,r,s,a,o,l),this.minFilter=void 0!==s?s:f,this.magFilter=void 0!==r?r:f,this.generateMipmaps=!1;const c=this;"requestVideoFrameCallback"in t&&t.requestVideoFrameCallback((function e(){c.needsUpdate=!0,t.requestVideoFrameCallback(e)}))}clone(){return new this.constructor(this.image).copy(this)}update(){const t=this.image;!1==="requestVideoFrameCallback"in t&&t.readyState>=t.HAVE_CURRENT_DATA&&(this.needsUpdate=!0)}}fo.prototype.isVideoTexture=!0;class go extends Zt{constructor(t,e,n){super({width:t,height:e}),this.format=n,this.magFilter=d,this.minFilter=d,this.generateMipmaps=!1,this.needsUpdate=!0}}go.prototype.isFramebufferTexture=!0;class vo extends Zt{constructor(t,e,n,i,r,s,a,o,l,c,h,u){super(null,s,a,o,l,c,i,r,h,u),this.image={width:e,height:n},this.mipmaps=t,this.flipY=!1,this.generateMipmaps=!1}}vo.prototype.isCompressedTexture=!0;class yo extends Zt{constructor(t,e,n,i,r,s,a,o,l){super(t,e,n,i,r,s,a,o,l),this.needsUpdate=!0}}yo.prototype.isCanvasTexture=!0;class xo{constructor(){this.type="Curve",this.arcLengthDivisions=200}getPoint(){return console.warn("THREE.Curve: .getPoint() not implemented."),null}getPointAt(t,e){const n=this.getUtoTmapping(t);return this.getPoint(n,e)}getPoints(t=5){const e=[];for(let n=0;n<=t;n++)e.push(this.getPoint(n/t));return e}getSpacedPoints(t=5){const e=[];for(let n=0;n<=t;n++)e.push(this.getPointAt(n/t));return e}getLength(){const t=this.getLengths();return t[t.length-1]}getLengths(t=this.arcLengthDivisions){if(this.cacheArcLengths&&this.cacheArcLengths.length===t+1&&!this.needsUpdate)return this.cacheArcLengths;this.needsUpdate=!1;const e=[];let n,i=this.getPoint(0),r=0;e.push(0);for(let s=1;s<=t;s++)n=this.getPoint(s/t),r+=n.distanceTo(i),e.push(r),i=n;return this.cacheArcLengths=e,e}updateArcLengths(){this.needsUpdate=!0,this.getLengths()}getUtoTmapping(t,e){const n=this.getLengths();let i=0;const r=n.length;let s;s=e||t*n[r-1];let a,o=0,l=r-1;for(;o<=l;)if(i=Math.floor(o+(l-o)/2),a=n[i]-s,a<0)o=i+1;else{if(!(a>0)){l=i;break}l=i-1}if(i=l,n[i]===s)return i/(r-1);const c=n[i];return(i+(s-c)/(n[i+1]-c))/(r-1)}getTangent(t,e){const n=1e-4;let i=t-n,r=t+n;i<0&&(i=0),r>1&&(r=1);const s=this.getPoint(i),a=this.getPoint(r),o=e||(s.isVector2?new Rt:new se);return o.copy(a).sub(s).normalize(),o}getTangentAt(t,e){const n=this.getUtoTmapping(t);return this.getTangent(n,e)}computeFrenetFrames(t,e){const n=new se,i=[],r=[],s=[],a=new se,o=new ze;for(let e=0;e<=t;e++){const n=e/t;i[e]=this.getTangentAt(n,new se)}r[0]=new se,s[0]=new se;let l=Number.MAX_VALUE;const c=Math.abs(i[0].x),h=Math.abs(i[0].y),u=Math.abs(i[0].z);c<=l&&(l=c,n.set(1,0,0)),h<=l&&(l=h,n.set(0,1,0)),u<=l&&n.set(0,0,1),a.crossVectors(i[0],n).normalize(),r[0].crossVectors(i[0],a),s[0].crossVectors(i[0],r[0]);for(let e=1;e<=t;e++){if(r[e]=r[e-1].clone(),s[e]=s[e-1].clone(),a.crossVectors(i[e-1],i[e]),a.length()>Number.EPSILON){a.normalize();const t=Math.acos(bt(i[e-1].dot(i[e]),-1,1));r[e].applyMatrix4(o.makeRotationAxis(a,t))}s[e].crossVectors(i[e],r[e])}if(!0===e){let e=Math.acos(bt(r[0].dot(r[t]),-1,1));e/=t,i[0].dot(a.crossVectors(r[0],r[t]))>0&&(e=-e);for(let n=1;n<=t;n++)r[n].applyMatrix4(o.makeRotationAxis(i[n],e*n)),s[n].crossVectors(i[n],r[n])}return{tangents:i,normals:r,binormals:s}}clone(){return(new this.constructor).copy(this)}copy(t){return this.arcLengthDivisions=t.arcLengthDivisions,this}toJSON(){const t={metadata:{version:4.5,type:"Curve",generator:"Curve.toJSON"}};return t.arcLengthDivisions=this.arcLengthDivisions,t.type=this.type,t}fromJSON(t){return this.arcLengthDivisions=t.arcLengthDivisions,this}}class _o extends xo{constructor(t=0,e=0,n=1,i=1,r=0,s=2*Math.PI,a=!1,o=0){super(),this.type="EllipseCurve",this.aX=t,this.aY=e,this.xRadius=n,this.yRadius=i,this.aStartAngle=r,this.aEndAngle=s,this.aClockwise=a,this.aRotation=o}getPoint(t,e){const n=e||new Rt,i=2*Math.PI;let r=this.aEndAngle-this.aStartAngle;const s=Math.abs(r)i;)r-=i;r0?0:(Math.floor(Math.abs(l)/r)+1)*r:0===c&&l===r-1&&(l=r-2,c=1),this.closed||l>0?a=i[(l-1)%r]:(wo.subVectors(i[0],i[1]).add(i[0]),a=wo);const h=i[l%r],u=i[(l+1)%r];if(this.closed||l+2i.length-2?i.length-1:s+1],h=i[s>i.length-3?i.length-1:s+2];return n.set(Ro(a,o.x,l.x,c.x,h.x),Ro(a,o.y,l.y,c.y,h.y)),n}copy(t){super.copy(t),this.points=[];for(let e=0,n=t.points.length;e=n){const t=i[r]-n,s=this.curves[r],a=s.getLength(),o=0===a?0:1-t/a;return s.getPointAt(o,e)}r++}return null}getLength(){const t=this.getCurveLengths();return t[t.length-1]}updateArcLengths(){this.needsUpdate=!0,this.cacheLengths=null,this.getCurveLengths()}getCurveLengths(){if(this.cacheLengths&&this.cacheLengths.length===this.curves.length)return this.cacheLengths;const t=[];let e=0;for(let n=0,i=this.curves.length;n1&&!e[e.length-1].equals(e[0])&&e.push(e[0]),e}copy(t){super.copy(t),this.curves=[];for(let e=0,n=t.curves.length;e0){const t=l.getPoint(0);t.equals(this.currentPoint)||this.lineTo(t.x,t.y)}this.curves.push(l);const c=l.getPoint(1);return this.currentPoint.copy(c),this}copy(t){return super.copy(t),this.currentPoint.copy(t.currentPoint),this}toJSON(){const t=super.toJSON();return t.currentPoint=this.currentPoint.toArray(),t}fromJSON(t){return super.fromJSON(t),this.currentPoint.fromArray(t.currentPoint),this}}class Go extends Vn{constructor(t=[new Rt(0,.5),new Rt(.5,0),new Rt(0,-.5)],e=12,n=0,i=2*Math.PI){super(),this.type="LatheGeometry",this.parameters={points:t,segments:e,phiStart:n,phiLength:i},e=Math.floor(e),i=bt(i,0,2*Math.PI);const r=[],s=[],a=[],o=[],l=[],c=1/e,h=new se,u=new Rt,d=new se,p=new se,m=new se;let f=0,g=0;for(let e=0;e<=t.length-1;e++)switch(e){case 0:f=t[e+1].x-t[e].x,g=t[e+1].y-t[e].y,d.x=1*g,d.y=-f,d.z=0*g,m.copy(d),d.normalize(),o.push(d.x,d.y,d.z);break;case t.length-1:o.push(m.x,m.y,m.z);break;default:f=t[e+1].x-t[e].x,g=t[e+1].y-t[e].y,d.x=1*g,d.y=-f,d.z=0*g,p.copy(d),d.x+=m.x,d.y+=m.y,d.z+=m.z,d.normalize(),o.push(d.x,d.y,d.z),m.copy(p)}for(let r=0;r<=e;r++){const d=n+r*c*i,p=Math.sin(d),m=Math.cos(d);for(let n=0;n<=t.length-1;n++){h.x=t[n].x*p,h.y=t[n].y,h.z=t[n].x*m,s.push(h.x,h.y,h.z),u.x=r/e,u.y=n/(t.length-1),a.push(u.x,u.y);const i=o[3*n+0]*p,c=o[3*n+1],d=o[3*n+0]*m;l.push(i,c,d)}}for(let n=0;n0&&v(!0),e>0&&v(!1)),this.setIndex(c),this.setAttribute("position",new Nn(h,3)),this.setAttribute("normal",new Nn(u,3)),this.setAttribute("uv",new Nn(d,2))}static fromJSON(t){return new Wo(t.radiusTop,t.radiusBottom,t.height,t.radialSegments,t.heightSegments,t.openEnded,t.thetaStart,t.thetaLength)}}class jo extends Wo{constructor(t=1,e=1,n=8,i=1,r=!1,s=0,a=2*Math.PI){super(0,t,e,n,i,r,s,a),this.type="ConeGeometry",this.parameters={radius:t,height:e,radialSegments:n,heightSegments:i,openEnded:r,thetaStart:s,thetaLength:a}}static fromJSON(t){return new jo(t.radius,t.height,t.radialSegments,t.heightSegments,t.openEnded,t.thetaStart,t.thetaLength)}}class qo extends Vn{constructor(t=[],e=[],n=1,i=0){super(),this.type="PolyhedronGeometry",this.parameters={vertices:t,indices:e,radius:n,detail:i};const r=[],s=[];function a(t,e,n,i){const r=i+1,s=[];for(let i=0;i<=r;i++){s[i]=[];const a=t.clone().lerp(n,i/r),o=e.clone().lerp(n,i/r),l=r-i;for(let t=0;t<=l;t++)s[i][t]=0===t&&i===r?a:a.clone().lerp(o,t/l)}for(let t=0;t.9&&a<.1&&(e<.2&&(s[t+0]+=1),n<.2&&(s[t+2]+=1),i<.2&&(s[t+4]+=1))}}()}(),this.setAttribute("position",new Nn(r,3)),this.setAttribute("normal",new Nn(r.slice(),3)),this.setAttribute("uv",new Nn(s,2)),0===i?this.computeVertexNormals():this.normalizeNormals()}static fromJSON(t){return new qo(t.vertices,t.indices,t.radius,t.details)}}class Xo extends qo{constructor(t=1,e=0){const n=(1+Math.sqrt(5))/2,i=1/n;super([-1,-1,-1,-1,-1,1,-1,1,-1,-1,1,1,1,-1,-1,1,-1,1,1,1,-1,1,1,1,0,-i,-n,0,-i,n,0,i,-n,0,i,n,-i,-n,0,-i,n,0,i,-n,0,i,n,0,-n,0,-i,n,0,-i,-n,0,i,n,0,i],[3,11,7,3,7,15,3,15,13,7,19,17,7,17,6,7,6,15,17,4,8,17,8,10,17,10,6,8,0,16,8,16,2,8,2,10,0,12,1,0,1,18,0,18,16,6,10,2,6,2,13,6,13,15,2,16,18,2,18,3,2,3,13,18,1,9,18,9,11,18,11,3,4,14,12,4,12,0,4,0,8,11,9,5,11,5,19,11,19,7,19,5,14,19,14,4,19,4,17,1,12,14,1,14,5,1,5,9],t,e),this.type="DodecahedronGeometry",this.parameters={radius:t,detail:e}}static fromJSON(t){return new Xo(t.radius,t.detail)}}const Jo=new se,Yo=new se,Zo=new se,Ko=new xn;class Qo extends Vn{constructor(t=null,e=1){if(super(),this.type="EdgesGeometry",this.parameters={geometry:t,thresholdAngle:e},null!==t){const n=4,i=Math.pow(10,n),r=Math.cos(yt*e),s=t.getIndex(),a=t.getAttribute("position"),o=s?s.count:a.count,l=[0,0,0],c=["a","b","c"],h=new Array(3),u={},d=[];for(let t=0;t80*n){o=c=t[0],l=h=t[1];for(let e=n;ec&&(c=u),d>h&&(h=d);p=Math.max(c-o,h-l),p=0!==p?1/p:0}return il(s,a,n,o,l,p),a};function el(t,e,n,i,r){let s,a;if(r===function(t,e,n,i){let r=0;for(let s=e,a=n-i;s0)for(s=e;s=e;s-=i)a=Ml(s,t[s],t[s+1],a);return a&&gl(a,a.next)&&(wl(a),a=a.next),a}function nl(t,e){if(!t)return t;e||(e=t);let n,i=t;do{if(n=!1,i.steiner||!gl(i,i.next)&&0!==fl(i.prev,i,i.next))i=i.next;else{if(wl(i),i=e=i.prev,i===i.next)break;n=!0}}while(n||i!==e);return e}function il(t,e,n,i,r,s,a){if(!t)return;!a&&s&&function(t,e,n,i){let r=t;do{null===r.z&&(r.z=ul(r.x,r.y,e,n,i)),r.prevZ=r.prev,r.nextZ=r.next,r=r.next}while(r!==t);r.prevZ.nextZ=null,r.prevZ=null,function(t){let e,n,i,r,s,a,o,l,c=1;do{for(n=t,t=null,s=null,a=0;n;){for(a++,i=n,o=0,e=0;e0||l>0&&i;)0!==o&&(0===l||!i||n.z<=i.z)?(r=n,n=n.nextZ,o--):(r=i,i=i.nextZ,l--),s?s.nextZ=r:t=r,r.prevZ=s,s=r;n=i}s.nextZ=null,c*=2}while(a>1)}(r)}(t,i,r,s);let o,l,c=t;for(;t.prev!==t.next;)if(o=t.prev,l=t.next,s?sl(t,i,r,s):rl(t))e.push(o.i/n),e.push(t.i/n),e.push(l.i/n),wl(t),t=l.next,c=l.next;else if((t=l)===c){a?1===a?il(t=al(nl(t),e,n),e,n,i,r,s,2):2===a&&ol(t,e,n,i,r,s):il(nl(t),e,n,i,r,s,1);break}}function rl(t){const e=t.prev,n=t,i=t.next;if(fl(e,n,i)>=0)return!1;let r=t.next.next;for(;r!==t.prev;){if(pl(e.x,e.y,n.x,n.y,i.x,i.y,r.x,r.y)&&fl(r.prev,r,r.next)>=0)return!1;r=r.next}return!0}function sl(t,e,n,i){const r=t.prev,s=t,a=t.next;if(fl(r,s,a)>=0)return!1;const o=r.xs.x?r.x>a.x?r.x:a.x:s.x>a.x?s.x:a.x,h=r.y>s.y?r.y>a.y?r.y:a.y:s.y>a.y?s.y:a.y,u=ul(o,l,e,n,i),d=ul(c,h,e,n,i);let p=t.prevZ,m=t.nextZ;for(;p&&p.z>=u&&m&&m.z<=d;){if(p!==t.prev&&p!==t.next&&pl(r.x,r.y,s.x,s.y,a.x,a.y,p.x,p.y)&&fl(p.prev,p,p.next)>=0)return!1;if(p=p.prevZ,m!==t.prev&&m!==t.next&&pl(r.x,r.y,s.x,s.y,a.x,a.y,m.x,m.y)&&fl(m.prev,m,m.next)>=0)return!1;m=m.nextZ}for(;p&&p.z>=u;){if(p!==t.prev&&p!==t.next&&pl(r.x,r.y,s.x,s.y,a.x,a.y,p.x,p.y)&&fl(p.prev,p,p.next)>=0)return!1;p=p.prevZ}for(;m&&m.z<=d;){if(m!==t.prev&&m!==t.next&&pl(r.x,r.y,s.x,s.y,a.x,a.y,m.x,m.y)&&fl(m.prev,m,m.next)>=0)return!1;m=m.nextZ}return!0}function al(t,e,n){let i=t;do{const r=i.prev,s=i.next.next;!gl(r,s)&&vl(r,i,i.next,s)&&_l(r,s)&&_l(s,r)&&(e.push(r.i/n),e.push(i.i/n),e.push(s.i/n),wl(i),wl(i.next),i=t=s),i=i.next}while(i!==t);return nl(i)}function ol(t,e,n,i,r,s){let a=t;do{let t=a.next.next;for(;t!==a.prev;){if(a.i!==t.i&&ml(a,t)){let o=bl(a,t);return a=nl(a,a.next),o=nl(o,o.next),il(a,e,n,i,r,s),void il(o,e,n,i,r,s)}t=t.next}a=a.next}while(a!==t)}function ll(t,e){return t.x-e.x}function cl(t,e){if(e=function(t,e){let n=e;const i=t.x,r=t.y;let s,a=-1/0;do{if(r<=n.y&&r>=n.next.y&&n.next.y!==n.y){const t=n.x+(r-n.y)*(n.next.x-n.x)/(n.next.y-n.y);if(t<=i&&t>a){if(a=t,t===i){if(r===n.y)return n;if(r===n.next.y)return n.next}s=n.x=n.x&&n.x>=l&&i!==n.x&&pl(rs.x||n.x===s.x&&hl(s,n)))&&(s=n,u=h)),n=n.next}while(n!==o);return s}(t,e),e){const n=bl(e,t);nl(e,e.next),nl(n,n.next)}}function hl(t,e){return fl(t.prev,t,e.prev)<0&&fl(e.next,t,t.next)<0}function ul(t,e,n,i,r){return(t=1431655765&((t=858993459&((t=252645135&((t=16711935&((t=32767*(t-n)*r)|t<<8))|t<<4))|t<<2))|t<<1))|(e=1431655765&((e=858993459&((e=252645135&((e=16711935&((e=32767*(e-i)*r)|e<<8))|e<<4))|e<<2))|e<<1))<<1}function dl(t){let e=t,n=t;do{(e.x=0&&(t-a)*(i-o)-(n-a)*(e-o)>=0&&(n-a)*(s-o)-(r-a)*(i-o)>=0}function ml(t,e){return t.next.i!==e.i&&t.prev.i!==e.i&&!function(t,e){let n=t;do{if(n.i!==t.i&&n.next.i!==t.i&&n.i!==e.i&&n.next.i!==e.i&&vl(n,n.next,t,e))return!0;n=n.next}while(n!==t);return!1}(t,e)&&(_l(t,e)&&_l(e,t)&&function(t,e){let n=t,i=!1;const r=(t.x+e.x)/2,s=(t.y+e.y)/2;do{n.y>s!=n.next.y>s&&n.next.y!==n.y&&r<(n.next.x-n.x)*(s-n.y)/(n.next.y-n.y)+n.x&&(i=!i),n=n.next}while(n!==t);return i}(t,e)&&(fl(t.prev,t,e.prev)||fl(t,e.prev,e))||gl(t,e)&&fl(t.prev,t,t.next)>0&&fl(e.prev,e,e.next)>0)}function fl(t,e,n){return(e.y-t.y)*(n.x-e.x)-(e.x-t.x)*(n.y-e.y)}function gl(t,e){return t.x===e.x&&t.y===e.y}function vl(t,e,n,i){const r=xl(fl(t,e,n)),s=xl(fl(t,e,i)),a=xl(fl(n,i,t)),o=xl(fl(n,i,e));return r!==s&&a!==o||(!(0!==r||!yl(t,n,e))||(!(0!==s||!yl(t,i,e))||(!(0!==a||!yl(n,t,i))||!(0!==o||!yl(n,e,i)))))}function yl(t,e,n){return e.x<=Math.max(t.x,n.x)&&e.x>=Math.min(t.x,n.x)&&e.y<=Math.max(t.y,n.y)&&e.y>=Math.min(t.y,n.y)}function xl(t){return t>0?1:t<0?-1:0}function _l(t,e){return fl(t.prev,t,t.next)<0?fl(t,e,t.next)>=0&&fl(t,t.prev,e)>=0:fl(t,e,t.prev)<0||fl(t,t.next,e)<0}function bl(t,e){const n=new Sl(t.i,t.x,t.y),i=new Sl(e.i,e.x,e.y),r=t.next,s=e.prev;return t.next=e,e.prev=t,n.next=r,r.prev=n,i.next=n,n.prev=i,s.next=i,i.prev=s,i}function Ml(t,e,n,i){const r=new Sl(t,e,n);return i?(r.next=i.next,r.prev=i,i.next.prev=r,i.next=r):(r.prev=r,r.next=r),r}function wl(t){t.next.prev=t.prev,t.prev.next=t.next,t.prevZ&&(t.prevZ.nextZ=t.nextZ),t.nextZ&&(t.nextZ.prevZ=t.prevZ)}function Sl(t,e,n){this.i=t,this.x=e,this.y=n,this.prev=null,this.next=null,this.z=null,this.prevZ=null,this.nextZ=null,this.steiner=!1}class Tl{static area(t){const e=t.length;let n=0;for(let i=e-1,r=0;r2&&t[e-1].equals(t[0])&&t.pop()}function Al(t,e){for(let n=0;nNumber.EPSILON){const u=Math.sqrt(h),d=Math.sqrt(l*l+c*c),p=e.x-o/u,m=e.y+a/u,f=((n.x-c/d-p)*c-(n.y+l/d-m)*l)/(a*c-o*l);i=p+a*f-t.x,r=m+o*f-t.y;const g=i*i+r*r;if(g<=2)return new Rt(i,r);s=Math.sqrt(g/2)}else{let t=!1;a>Number.EPSILON?l>Number.EPSILON&&(t=!0):a<-Number.EPSILON?l<-Number.EPSILON&&(t=!0):Math.sign(o)===Math.sign(c)&&(t=!0),t?(i=-o,r=a,s=Math.sqrt(h)):(i=a,r=o,s=Math.sqrt(h/2))}return new Rt(i/s,r/s)}const P=[];for(let t=0,e=E.length,n=e-1,i=t+1;t=0;t--){const e=t/p,n=h*Math.cos(e*Math.PI/2),i=u*Math.sin(e*Math.PI/2)+d;for(let t=0,e=E.length;t=0;){const i=n;let r=n-1;r<0&&(r=t.length-1);for(let t=0,n=o+2*p;t0)&&d.push(e,r,l),(t!==n-1||o0!=t>0&&this.version++,this._sheen=t}get clearcoat(){return this._clearcoat}set clearcoat(t){this._clearcoat>0!=t>0&&this.version++,this._clearcoat=t}get transmission(){return this._transmission}set transmission(t){this._transmission>0!=t>0&&this.version++,this._transmission=t}copy(t){return super.copy(t),this.defines={STANDARD:"",PHYSICAL:""},this.clearcoat=t.clearcoat,this.clearcoatMap=t.clearcoatMap,this.clearcoatRoughness=t.clearcoatRoughness,this.clearcoatRoughnessMap=t.clearcoatRoughnessMap,this.clearcoatNormalMap=t.clearcoatNormalMap,this.clearcoatNormalScale.copy(t.clearcoatNormalScale),this.ior=t.ior,this.sheen=t.sheen,this.sheenColor.copy(t.sheenColor),this.sheenColorMap=t.sheenColorMap,this.sheenRoughness=t.sheenRoughness,this.sheenRoughnessMap=t.sheenRoughnessMap,this.transmission=t.transmission,this.transmissionMap=t.transmissionMap,this.thickness=t.thickness,this.thicknessMap=t.thicknessMap,this.attenuationDistance=t.attenuationDistance,this.attenuationColor.copy(t.attenuationColor),this.specularIntensity=t.specularIntensity,this.specularIntensityMap=t.specularIntensityMap,this.specularColor.copy(t.specularColor),this.specularColorMap=t.specularColorMap,this}}jl.prototype.isMeshPhysicalMaterial=!0;class ql extends bn{constructor(t){super(),this.type="MeshPhongMaterial",this.color=new Wt(16777215),this.specular=new Wt(1118481),this.shininess=30,this.map=null,this.lightMap=null,this.lightMapIntensity=1,this.aoMap=null,this.aoMapIntensity=1,this.emissive=new Wt(0),this.emissiveIntensity=1,this.emissiveMap=null,this.bumpMap=null,this.bumpScale=1,this.normalMap=null,this.normalMapType=0,this.normalScale=new Rt(1,1),this.displacementMap=null,this.displacementScale=1,this.displacementBias=0,this.specularMap=null,this.alphaMap=null,this.envMap=null,this.combine=0,this.reflectivity=1,this.refractionRatio=.98,this.wireframe=!1,this.wireframeLinewidth=1,this.wireframeLinecap="round",this.wireframeLinejoin="round",this.flatShading=!1,this.fog=!0,this.setValues(t)}copy(t){return super.copy(t),this.color.copy(t.color),this.specular.copy(t.specular),this.shininess=t.shininess,this.map=t.map,this.lightMap=t.lightMap,this.lightMapIntensity=t.lightMapIntensity,this.aoMap=t.aoMap,this.aoMapIntensity=t.aoMapIntensity,this.emissive.copy(t.emissive),this.emissiveMap=t.emissiveMap,this.emissiveIntensity=t.emissiveIntensity,this.bumpMap=t.bumpMap,this.bumpScale=t.bumpScale,this.normalMap=t.normalMap,this.normalMapType=t.normalMapType,this.normalScale.copy(t.normalScale),this.displacementMap=t.displacementMap,this.displacementScale=t.displacementScale,this.displacementBias=t.displacementBias,this.specularMap=t.specularMap,this.alphaMap=t.alphaMap,this.envMap=t.envMap,this.combine=t.combine,this.reflectivity=t.reflectivity,this.refractionRatio=t.refractionRatio,this.wireframe=t.wireframe,this.wireframeLinewidth=t.wireframeLinewidth,this.wireframeLinecap=t.wireframeLinecap,this.wireframeLinejoin=t.wireframeLinejoin,this.flatShading=t.flatShading,this.fog=t.fog,this}}ql.prototype.isMeshPhongMaterial=!0;class Xl extends bn{constructor(t){super(),this.defines={TOON:""},this.type="MeshToonMaterial",this.color=new Wt(16777215),this.map=null,this.gradientMap=null,this.lightMap=null,this.lightMapIntensity=1,this.aoMap=null,this.aoMapIntensity=1,this.emissive=new Wt(0),this.emissiveIntensity=1,this.emissiveMap=null,this.bumpMap=null,this.bumpScale=1,this.normalMap=null,this.normalMapType=0,this.normalScale=new Rt(1,1),this.displacementMap=null,this.displacementScale=1,this.displacementBias=0,this.alphaMap=null,this.wireframe=!1,this.wireframeLinewidth=1,this.wireframeLinecap="round",this.wireframeLinejoin="round",this.fog=!0,this.setValues(t)}copy(t){return super.copy(t),this.color.copy(t.color),this.map=t.map,this.gradientMap=t.gradientMap,this.lightMap=t.lightMap,this.lightMapIntensity=t.lightMapIntensity,this.aoMap=t.aoMap,this.aoMapIntensity=t.aoMapIntensity,this.emissive.copy(t.emissive),this.emissiveMap=t.emissiveMap,this.emissiveIntensity=t.emissiveIntensity,this.bumpMap=t.bumpMap,this.bumpScale=t.bumpScale,this.normalMap=t.normalMap,this.normalMapType=t.normalMapType,this.normalScale.copy(t.normalScale),this.displacementMap=t.displacementMap,this.displacementScale=t.displacementScale,this.displacementBias=t.displacementBias,this.alphaMap=t.alphaMap,this.wireframe=t.wireframe,this.wireframeLinewidth=t.wireframeLinewidth,this.wireframeLinecap=t.wireframeLinecap,this.wireframeLinejoin=t.wireframeLinejoin,this.fog=t.fog,this}}Xl.prototype.isMeshToonMaterial=!0;class Jl extends bn{constructor(t){super(),this.type="MeshNormalMaterial",this.bumpMap=null,this.bumpScale=1,this.normalMap=null,this.normalMapType=0,this.normalScale=new Rt(1,1),this.displacementMap=null,this.displacementScale=1,this.displacementBias=0,this.wireframe=!1,this.wireframeLinewidth=1,this.flatShading=!1,this.setValues(t)}copy(t){return super.copy(t),this.bumpMap=t.bumpMap,this.bumpScale=t.bumpScale,this.normalMap=t.normalMap,this.normalMapType=t.normalMapType,this.normalScale.copy(t.normalScale),this.displacementMap=t.displacementMap,this.displacementScale=t.displacementScale,this.displacementBias=t.displacementBias,this.wireframe=t.wireframe,this.wireframeLinewidth=t.wireframeLinewidth,this.flatShading=t.flatShading,this}}Jl.prototype.isMeshNormalMaterial=!0;class Yl extends bn{constructor(t){super(),this.type="MeshLambertMaterial",this.color=new Wt(16777215),this.map=null,this.lightMap=null,this.lightMapIntensity=1,this.aoMap=null,this.aoMapIntensity=1,this.emissive=new Wt(0),this.emissiveIntensity=1,this.emissiveMap=null,this.specularMap=null,this.alphaMap=null,this.envMap=null,this.combine=0,this.reflectivity=1,this.refractionRatio=.98,this.wireframe=!1,this.wireframeLinewidth=1,this.wireframeLinecap="round",this.wireframeLinejoin="round",this.fog=!0,this.setValues(t)}copy(t){return super.copy(t),this.color.copy(t.color),this.map=t.map,this.lightMap=t.lightMap,this.lightMapIntensity=t.lightMapIntensity,this.aoMap=t.aoMap,this.aoMapIntensity=t.aoMapIntensity,this.emissive.copy(t.emissive),this.emissiveMap=t.emissiveMap,this.emissiveIntensity=t.emissiveIntensity,this.specularMap=t.specularMap,this.alphaMap=t.alphaMap,this.envMap=t.envMap,this.combine=t.combine,this.reflectivity=t.reflectivity,this.refractionRatio=t.refractionRatio,this.wireframe=t.wireframe,this.wireframeLinewidth=t.wireframeLinewidth,this.wireframeLinecap=t.wireframeLinecap,this.wireframeLinejoin=t.wireframeLinejoin,this.fog=t.fog,this}}Yl.prototype.isMeshLambertMaterial=!0;class Zl extends bn{constructor(t){super(),this.defines={MATCAP:""},this.type="MeshMatcapMaterial",this.color=new Wt(16777215),this.matcap=null,this.map=null,this.bumpMap=null,this.bumpScale=1,this.normalMap=null,this.normalMapType=0,this.normalScale=new Rt(1,1),this.displacementMap=null,this.displacementScale=1,this.displacementBias=0,this.alphaMap=null,this.flatShading=!1,this.fog=!0,this.setValues(t)}copy(t){return super.copy(t),this.defines={MATCAP:""},this.color.copy(t.color),this.matcap=t.matcap,this.map=t.map,this.bumpMap=t.bumpMap,this.bumpScale=t.bumpScale,this.normalMap=t.normalMap,this.normalMapType=t.normalMapType,this.normalScale.copy(t.normalScale),this.displacementMap=t.displacementMap,this.displacementScale=t.displacementScale,this.displacementBias=t.displacementBias,this.alphaMap=t.alphaMap,this.flatShading=t.flatShading,this.fog=t.fog,this}}Zl.prototype.isMeshMatcapMaterial=!0;class Kl extends Za{constructor(t){super(),this.type="LineDashedMaterial",this.scale=1,this.dashSize=3,this.gapSize=1,this.setValues(t)}copy(t){return super.copy(t),this.scale=t.scale,this.dashSize=t.dashSize,this.gapSize=t.gapSize,this}}Kl.prototype.isLineDashedMaterial=!0;const Ql={ShadowMaterial:kl,SpriteMaterial:ma,RawShaderMaterial:Vl,ShaderMaterial:pi,PointsMaterial:oo,MeshPhysicalMaterial:jl,MeshStandardMaterial:Wl,MeshPhongMaterial:ql,MeshToonMaterial:Xl,MeshNormalMaterial:Jl,MeshLambertMaterial:Yl,MeshDepthMaterial:Xs,MeshDistanceMaterial:Js,MeshBasicMaterial:Mn,MeshMatcapMaterial:Zl,LineDashedMaterial:Kl,LineBasicMaterial:Za,Material:bn};bn.fromType=function(t){return new Ql[t]};const $l={arraySlice:function(t,e,n){return $l.isTypedArray(t)?new t.constructor(t.subarray(e,void 0!==n?n:t.length)):t.slice(e,n)},convertArray:function(t,e,n){return!t||!n&&t.constructor===e?t:"number"==typeof e.BYTES_PER_ELEMENT?new e(t):Array.prototype.slice.call(t)},isTypedArray:function(t){return ArrayBuffer.isView(t)&&!(t instanceof DataView)},getKeyframeOrder:function(t){const e=t.length,n=new Array(e);for(let t=0;t!==e;++t)n[t]=t;return n.sort((function(e,n){return t[e]-t[n]})),n},sortedArray:function(t,e,n){const i=t.length,r=new t.constructor(i);for(let s=0,a=0;a!==i;++s){const i=n[s]*e;for(let n=0;n!==e;++n)r[a++]=t[i+n]}return r},flattenJSON:function(t,e,n,i){let r=1,s=t[0];for(;void 0!==s&&void 0===s[i];)s=t[r++];if(void 0===s)return;let a=s[i];if(void 0!==a)if(Array.isArray(a))do{a=s[i],void 0!==a&&(e.push(s.time),n.push.apply(n,a)),s=t[r++]}while(void 0!==s);else if(void 0!==a.toArray)do{a=s[i],void 0!==a&&(e.push(s.time),a.toArray(n,n.length)),s=t[r++]}while(void 0!==s);else do{a=s[i],void 0!==a&&(e.push(s.time),n.push(a)),s=t[r++]}while(void 0!==s)},subclip:function(t,e,n,i,r=30){const s=t.clone();s.name=e;const a=[];for(let t=0;t=i)){l.push(e.times[t]);for(let n=0;ns.tracks[t].times[0]&&(o=s.tracks[t].times[0]);for(let t=0;t=i.times[u]){const t=u*l+o,e=t+l-o;d=$l.arraySlice(i.values,t,e)}else{const t=i.createInterpolant(),e=o,n=l-o;t.evaluate(s),d=$l.arraySlice(t.resultBuffer,e,n)}if("quaternion"===r){(new re).fromArray(d).normalize().conjugate().toArray(d)}const p=a.times.length;for(let t=0;t=r)break t;{const a=e[1];t=r)break e}s=n,n=0}}for(;n>>1;te;)--s;if(++s,0!==r||s!==i){r>=s&&(s=Math.max(s,1),r=s-1);const t=this.getValueSize();this.times=$l.arraySlice(n,r,s),this.values=$l.arraySlice(this.values,r*t,s*t)}return this}validate(){let t=!0;const e=this.getValueSize();e-Math.floor(e)!=0&&(console.error("THREE.KeyframeTrack: Invalid value size in track.",this),t=!1);const n=this.times,i=this.values,r=n.length;0===r&&(console.error("THREE.KeyframeTrack: Track is empty.",this),t=!1);let s=null;for(let e=0;e!==r;e++){const i=n[e];if("number"==typeof i&&isNaN(i)){console.error("THREE.KeyframeTrack: Time is not a valid number.",this,e,i),t=!1;break}if(null!==s&&s>i){console.error("THREE.KeyframeTrack: Out of order keys.",this,e,i,s),t=!1;break}s=i}if(void 0!==i&&$l.isTypedArray(i))for(let e=0,n=i.length;e!==n;++e){const n=i[e];if(isNaN(n)){console.error("THREE.KeyframeTrack: Value is not a valid number.",this,e,n),t=!1;break}}return t}optimize(){const t=$l.arraySlice(this.times),e=$l.arraySlice(this.values),n=this.getValueSize(),i=this.getInterpolation()===tt,r=t.length-1;let s=1;for(let a=1;a0){t[s]=t[r];for(let t=r*n,i=s*n,a=0;a!==n;++a)e[i+a]=e[t+a];++s}return s!==t.length?(this.times=$l.arraySlice(t,0,s),this.values=$l.arraySlice(e,0,s*n)):(this.times=t,this.values=e),this}clone(){const t=$l.arraySlice(this.times,0),e=$l.arraySlice(this.values,0),n=new(0,this.constructor)(this.name,t,e);return n.createInterpolant=this.createInterpolant,n}}rc.prototype.TimeBufferType=Float32Array,rc.prototype.ValueBufferType=Float32Array,rc.prototype.DefaultInterpolation=$;class sc extends rc{}sc.prototype.ValueTypeName="bool",sc.prototype.ValueBufferType=Array,sc.prototype.DefaultInterpolation=Q,sc.prototype.InterpolantFactoryMethodLinear=void 0,sc.prototype.InterpolantFactoryMethodSmooth=void 0;class ac extends rc{}ac.prototype.ValueTypeName="color";class oc extends rc{}oc.prototype.ValueTypeName="number";class lc extends tc{constructor(t,e,n,i){super(t,e,n,i)}interpolate_(t,e,n,i){const r=this.resultBuffer,s=this.sampleValues,a=this.valueSize,o=(n-e)/(i-e);let l=t*a;for(let t=l+a;l!==t;l+=4)re.slerpFlat(r,0,s,l-a,s,l,o);return r}}class cc extends rc{InterpolantFactoryMethodLinear(t){return new lc(this.times,this.values,this.getValueSize(),t)}}cc.prototype.ValueTypeName="quaternion",cc.prototype.DefaultInterpolation=$,cc.prototype.InterpolantFactoryMethodSmooth=void 0;class hc extends rc{}hc.prototype.ValueTypeName="string",hc.prototype.ValueBufferType=Array,hc.prototype.DefaultInterpolation=Q,hc.prototype.InterpolantFactoryMethodLinear=void 0,hc.prototype.InterpolantFactoryMethodSmooth=void 0;class uc extends rc{}uc.prototype.ValueTypeName="vector";class dc{constructor(t,e=-1,n,i=2500){this.name=t,this.tracks=n,this.duration=e,this.blendMode=i,this.uuid=_t(),this.duration<0&&this.resetDuration()}static parse(t){const e=[],n=t.tracks,i=1/(t.fps||1);for(let t=0,r=n.length;t!==r;++t)e.push(pc(n[t]).scale(i));const r=new this(t.name,t.duration,e,t.blendMode);return r.uuid=t.uuid,r}static toJSON(t){const e=[],n=t.tracks,i={name:t.name,duration:t.duration,tracks:e,uuid:t.uuid,blendMode:t.blendMode};for(let t=0,i=n.length;t!==i;++t)e.push(rc.toJSON(n[t]));return i}static CreateFromMorphTargetSequence(t,e,n,i){const r=e.length,s=[];for(let t=0;t1){const t=s[1];let e=i[t];e||(i[t]=e=[]),e.push(n)}}const s=[];for(const t in i)s.push(this.CreateFromMorphTargetSequence(t,i[t],e,n));return s}static parseAnimation(t,e){if(!t)return console.error("THREE.AnimationClip: No animation in JSONLoader data."),null;const n=function(t,e,n,i,r){if(0!==n.length){const s=[],a=[];$l.flattenJSON(n,s,a,i),0!==s.length&&r.push(new t(e,s,a))}},i=[],r=t.name||"default",s=t.fps||30,a=t.blendMode;let o=t.length||-1;const l=t.hierarchy||[];for(let t=0;t{e&&e(r),this.manager.itemEnd(t)}),0),r;if(void 0!==yc[t])return void yc[t].push({onLoad:e,onProgress:n,onError:i});yc[t]=[],yc[t].push({onLoad:e,onProgress:n,onError:i});const s=new Request(t,{headers:new Headers(this.requestHeader),credentials:this.withCredentials?"include":"same-origin"}),a=this.mimeType,o=this.responseType;fetch(s).then((e=>{if(200===e.status||0===e.status){if(0===e.status&&console.warn("THREE.FileLoader: HTTP Status 0 received."),"undefined"==typeof ReadableStream||void 0===e.body||void 0===e.body.getReader)return e;const n=yc[t],i=e.body.getReader(),r=e.headers.get("Content-Length"),s=r?parseInt(r):0,a=0!==s;let o=0;const l=new ReadableStream({start(t){!function e(){i.read().then((({done:i,value:r})=>{if(i)t.close();else{o+=r.byteLength;const i=new ProgressEvent("progress",{lengthComputable:a,loaded:o,total:s});for(let t=0,e=n.length;t{switch(o){case"arraybuffer":return t.arrayBuffer();case"blob":return t.blob();case"document":return t.text().then((t=>(new DOMParser).parseFromString(t,a)));case"json":return t.json();default:if(void 0===a)return t.text();{const e=/charset="?([^;"\s]*)"?/i.exec(a),n=e&&e[1]?e[1].toLowerCase():void 0,i=new TextDecoder(n);return t.arrayBuffer().then((t=>i.decode(t)))}}})).then((e=>{mc.add(t,e);const n=yc[t];delete yc[t];for(let t=0,i=n.length;t{const n=yc[t];if(void 0===n)throw this.manager.itemError(t),e;delete yc[t];for(let t=0,i=n.length;t{this.manager.itemEnd(t)})),this.manager.itemStart(t)}setResponseType(t){return this.responseType=t,this}setMimeType(t){return this.mimeType=t,this}}class _c extends vc{constructor(t){super(t)}load(t,e,n,i){void 0!==this.path&&(t=this.path+t),t=this.manager.resolveURL(t);const r=this,s=mc.get(t);if(void 0!==s)return r.manager.itemStart(t),setTimeout((function(){e&&e(s),r.manager.itemEnd(t)}),0),s;const a=It("img");function o(){c(),mc.add(t,this),e&&e(this),r.manager.itemEnd(t)}function l(e){c(),i&&i(e),r.manager.itemError(t),r.manager.itemEnd(t)}function c(){a.removeEventListener("load",o,!1),a.removeEventListener("error",l,!1)}return a.addEventListener("load",o,!1),a.addEventListener("error",l,!1),"data:"!==t.slice(0,5)&&void 0!==this.crossOrigin&&(a.crossOrigin=this.crossOrigin),r.manager.itemStart(t),a.src=t,a}}class bc extends vc{constructor(t){super(t)}load(t,e,n,i){const r=new yi,s=new _c(this.manager);s.setCrossOrigin(this.crossOrigin),s.setPath(this.path);let a=0;function o(n){s.load(t[n],(function(t){r.images[n]=t,a++,6===a&&(r.needsUpdate=!0,e&&e(r))}),void 0,i)}for(let e=0;e0:i.vertexColors=t.vertexColors),void 0!==t.uniforms)for(const e in t.uniforms){const r=t.uniforms[e];switch(i.uniforms[e]={},r.type){case"t":i.uniforms[e].value=n(r.value);break;case"c":i.uniforms[e].value=(new Wt).setHex(r.value);break;case"v2":i.uniforms[e].value=(new Rt).fromArray(r.value);break;case"v3":i.uniforms[e].value=(new se).fromArray(r.value);break;case"v4":i.uniforms[e].value=(new Kt).fromArray(r.value);break;case"m3":i.uniforms[e].value=(new Ct).fromArray(r.value);break;case"m4":i.uniforms[e].value=(new ze).fromArray(r.value);break;default:i.uniforms[e].value=r.value}}if(void 0!==t.defines&&(i.defines=t.defines),void 0!==t.vertexShader&&(i.vertexShader=t.vertexShader),void 0!==t.fragmentShader&&(i.fragmentShader=t.fragmentShader),void 0!==t.extensions)for(const e in t.extensions)i.extensions[e]=t.extensions[e];if(void 0!==t.shading&&(i.flatShading=1===t.shading),void 0!==t.size&&(i.size=t.size),void 0!==t.sizeAttenuation&&(i.sizeAttenuation=t.sizeAttenuation),void 0!==t.map&&(i.map=n(t.map)),void 0!==t.matcap&&(i.matcap=n(t.matcap)),void 0!==t.alphaMap&&(i.alphaMap=n(t.alphaMap)),void 0!==t.bumpMap&&(i.bumpMap=n(t.bumpMap)),void 0!==t.bumpScale&&(i.bumpScale=t.bumpScale),void 0!==t.normalMap&&(i.normalMap=n(t.normalMap)),void 0!==t.normalMapType&&(i.normalMapType=t.normalMapType),void 0!==t.normalScale){let e=t.normalScale;!1===Array.isArray(e)&&(e=[e,e]),i.normalScale=(new Rt).fromArray(e)}return void 0!==t.displacementMap&&(i.displacementMap=n(t.displacementMap)),void 0!==t.displacementScale&&(i.displacementScale=t.displacementScale),void 0!==t.displacementBias&&(i.displacementBias=t.displacementBias),void 0!==t.roughnessMap&&(i.roughnessMap=n(t.roughnessMap)),void 0!==t.metalnessMap&&(i.metalnessMap=n(t.metalnessMap)),void 0!==t.emissiveMap&&(i.emissiveMap=n(t.emissiveMap)),void 0!==t.emissiveIntensity&&(i.emissiveIntensity=t.emissiveIntensity),void 0!==t.specularMap&&(i.specularMap=n(t.specularMap)),void 0!==t.specularIntensityMap&&(i.specularIntensityMap=n(t.specularIntensityMap)),void 0!==t.specularColorMap&&(i.specularColorMap=n(t.specularColorMap)),void 0!==t.envMap&&(i.envMap=n(t.envMap)),void 0!==t.envMapIntensity&&(i.envMapIntensity=t.envMapIntensity),void 0!==t.reflectivity&&(i.reflectivity=t.reflectivity),void 0!==t.refractionRatio&&(i.refractionRatio=t.refractionRatio),void 0!==t.lightMap&&(i.lightMap=n(t.lightMap)),void 0!==t.lightMapIntensity&&(i.lightMapIntensity=t.lightMapIntensity),void 0!==t.aoMap&&(i.aoMap=n(t.aoMap)),void 0!==t.aoMapIntensity&&(i.aoMapIntensity=t.aoMapIntensity),void 0!==t.gradientMap&&(i.gradientMap=n(t.gradientMap)),void 0!==t.clearcoatMap&&(i.clearcoatMap=n(t.clearcoatMap)),void 0!==t.clearcoatRoughnessMap&&(i.clearcoatRoughnessMap=n(t.clearcoatRoughnessMap)),void 0!==t.clearcoatNormalMap&&(i.clearcoatNormalMap=n(t.clearcoatNormalMap)),void 0!==t.clearcoatNormalScale&&(i.clearcoatNormalScale=(new Rt).fromArray(t.clearcoatNormalScale)),void 0!==t.transmissionMap&&(i.transmissionMap=n(t.transmissionMap)),void 0!==t.thicknessMap&&(i.thicknessMap=n(t.thicknessMap)),void 0!==t.sheenColorMap&&(i.sheenColorMap=n(t.sheenColorMap)),void 0!==t.sheenRoughnessMap&&(i.sheenRoughnessMap=n(t.sheenRoughnessMap)),i}setTextures(t){return this.textures=t,this}}class Wc{static decodeText(t){if("undefined"!=typeof TextDecoder)return(new TextDecoder).decode(t);let e="";for(let n=0,i=t.length;n0){this.source.connect(this.filters[0]);for(let t=1,e=this.filters.length;t0){this.source.disconnect(this.filters[0]);for(let t=1,e=this.filters.length;t0&&this._mixBufferRegionAdditive(n,i,this._addIndex*e,1,e);for(let t=e,r=e+e;t!==r;++t)if(n[t]!==n[t+e]){a.setValue(n,i);break}}saveOriginalState(){const t=this.binding,e=this.buffer,n=this.valueSize,i=n*this._origIndex;t.getValue(e,i);for(let t=n,r=i;t!==r;++t)e[t]=e[i+t%n];this._setIdentity(),this.cumulativeWeight=0,this.cumulativeWeightAdditive=0}restoreOriginalState(){const t=3*this.valueSize;this.binding.setValue(this.buffer,t)}_setAdditiveIdentityNumeric(){const t=this._addIndex*this.valueSize,e=t+this.valueSize;for(let n=t;n=.5)for(let i=0;i!==r;++i)t[e+i]=t[n+i]}_slerp(t,e,n,i){re.slerpFlat(t,e,t,e,t,n,i)}_slerpAdditive(t,e,n,i,r){const s=this._workIndex*r;re.multiplyQuaternionsFlat(t,s,t,e,t,n),re.slerpFlat(t,e,t,e,t,s,i)}_lerp(t,e,n,i,r){const s=1-i;for(let a=0;a!==r;++a){const r=e+a;t[r]=t[r]*s+t[n+a]*i}}_lerpAdditive(t,e,n,i,r){for(let s=0;s!==r;++s){const r=e+s;t[r]=t[r]+t[n+s]*i}}}const yh="\\[\\]\\.:\\/",xh=new RegExp("[\\[\\]\\.:\\/]","g"),_h="[^\\[\\]\\.:\\/]",bh="[^"+yh.replace("\\.","")+"]",Mh=/((?:WC+[\/:])*)/.source.replace("WC",_h),wh=/(WCOD+)?/.source.replace("WCOD",bh),Sh=/(?:\.(WC+)(?:\[(.+)\])?)?/.source.replace("WC",_h),Th=/\.(WC+)(?:\[(.+)\])?/.source.replace("WC",_h),Eh=new RegExp("^"+Mh+wh+Sh+Th+"$"),Ah=["material","materials","bones"];class Rh{constructor(t,e,n){this.path=e,this.parsedPath=n||Rh.parseTrackName(e),this.node=Rh.findNode(t,this.parsedPath.nodeName)||t,this.rootNode=t,this.getValue=this._getValue_unbound,this.setValue=this._setValue_unbound}static create(t,e,n){return t&&t.isAnimationObjectGroup?new Rh.Composite(t,e,n):new Rh(t,e,n)}static sanitizeNodeName(t){return t.replace(/\s/g,"_").replace(xh,"")}static parseTrackName(t){const e=Eh.exec(t);if(null===e)throw new Error("PropertyBinding: Cannot parse trackName: "+t);const n={nodeName:e[2],objectName:e[3],objectIndex:e[4],propertyName:e[5],propertyIndex:e[6]},i=n.nodeName&&n.nodeName.lastIndexOf(".");if(void 0!==i&&-1!==i){const t=n.nodeName.substring(i+1);-1!==Ah.indexOf(t)&&(n.nodeName=n.nodeName.substring(0,i),n.objectName=t)}if(null===n.propertyName||0===n.propertyName.length)throw new Error("PropertyBinding: can not parse propertyName from trackName: "+t);return n}static findNode(t,e){if(void 0===e||""===e||"."===e||-1===e||e===t.name||e===t.uuid)return t;if(t.skeleton){const n=t.skeleton.getBoneByName(e);if(void 0!==n)return n}if(t.children){const n=function(t){for(let i=0;i=r){const s=r++,c=t[s];e[c.uuid]=l,t[l]=c,e[o]=s,t[s]=a;for(let t=0,e=i;t!==e;++t){const e=n[t],i=e[s],r=e[l];e[l]=i,e[s]=r}}}this.nCachedObjects_=r}uncache(){const t=this._objects,e=this._indicesByUUID,n=this._bindings,i=n.length;let r=this.nCachedObjects_,s=t.length;for(let a=0,o=arguments.length;a!==o;++a){const o=arguments[a].uuid,l=e[o];if(void 0!==l)if(delete e[o],l0&&(e[a.uuid]=l),t[l]=a,t.pop();for(let t=0,e=i;t!==e;++t){const e=n[t];e[l]=e[r],e.pop()}}}this.nCachedObjects_=r}subscribe_(t,e){const n=this._bindingsIndicesByPath;let i=n[t];const r=this._bindings;if(void 0!==i)return r[i];const s=this._paths,a=this._parsedPaths,o=this._objects,l=o.length,c=this.nCachedObjects_,h=new Array(l);i=r.length,n[t]=i,s.push(t),a.push(e),r.push(h);for(let n=c,i=o.length;n!==i;++n){const i=o[n];h[n]=new Rh(i,t,e)}return h}unsubscribe_(t){const e=this._bindingsIndicesByPath,n=e[t];if(void 0!==n){const i=this._paths,r=this._parsedPaths,s=this._bindings,a=s.length-1,o=s[a];e[t[a]]=n,s[n]=o,s.pop(),r[n]=r[a],r.pop(),i[n]=i[a],i.pop()}}}Ch.prototype.isAnimationObjectGroup=!0;class Lh{constructor(t,e,n=null,i=e.blendMode){this._mixer=t,this._clip=e,this._localRoot=n,this.blendMode=i;const r=e.tracks,s=r.length,a=new Array(s),o={endingStart:et,endingEnd:et};for(let t=0;t!==s;++t){const e=r[t].createInterpolant(null);a[t]=e,e.settings=o}this._interpolantSettings=o,this._interpolants=a,this._propertyBindings=new Array(s),this._cacheIndex=null,this._byClipCacheIndex=null,this._timeScaleInterpolant=null,this._weightInterpolant=null,this.loop=2201,this._loopCount=-1,this._startTime=null,this.time=0,this.timeScale=1,this._effectiveTimeScale=1,this.weight=1,this._effectiveWeight=1,this.repetitions=1/0,this.paused=!1,this.enabled=!0,this.clampWhenFinished=!1,this.zeroSlopeAtStart=!0,this.zeroSlopeAtEnd=!0}play(){return this._mixer._activateAction(this),this}stop(){return this._mixer._deactivateAction(this),this.reset()}reset(){return this.paused=!1,this.enabled=!0,this.time=0,this._loopCount=-1,this._startTime=null,this.stopFading().stopWarping()}isRunning(){return this.enabled&&!this.paused&&0!==this.timeScale&&null===this._startTime&&this._mixer._isActiveAction(this)}isScheduled(){return this._mixer._isActiveAction(this)}startAt(t){return this._startTime=t,this}setLoop(t,e){return this.loop=t,this.repetitions=e,this}setEffectiveWeight(t){return this.weight=t,this._effectiveWeight=this.enabled?t:0,this.stopFading()}getEffectiveWeight(){return this._effectiveWeight}fadeIn(t){return this._scheduleFading(t,0,1)}fadeOut(t){return this._scheduleFading(t,1,0)}crossFadeFrom(t,e,n){if(t.fadeOut(e),this.fadeIn(e),n){const n=this._clip.duration,i=t._clip.duration,r=i/n,s=n/i;t.warp(1,r,e),this.warp(s,1,e)}return this}crossFadeTo(t,e,n){return t.crossFadeFrom(this,e,n)}stopFading(){const t=this._weightInterpolant;return null!==t&&(this._weightInterpolant=null,this._mixer._takeBackControlInterpolant(t)),this}setEffectiveTimeScale(t){return this.timeScale=t,this._effectiveTimeScale=this.paused?0:t,this.stopWarping()}getEffectiveTimeScale(){return this._effectiveTimeScale}setDuration(t){return this.timeScale=this._clip.duration/t,this.stopWarping()}syncWith(t){return this.time=t.time,this.timeScale=t.timeScale,this.stopWarping()}halt(t){return this.warp(this._effectiveTimeScale,0,t)}warp(t,e,n){const i=this._mixer,r=i.time,s=this.timeScale;let a=this._timeScaleInterpolant;null===a&&(a=i._lendControlInterpolant(),this._timeScaleInterpolant=a);const o=a.parameterPositions,l=a.sampleValues;return o[0]=r,o[1]=r+n,l[0]=t/s,l[1]=e/s,this}stopWarping(){const t=this._timeScaleInterpolant;return null!==t&&(this._timeScaleInterpolant=null,this._mixer._takeBackControlInterpolant(t)),this}getMixer(){return this._mixer}getClip(){return this._clip}getRoot(){return this._localRoot||this._mixer._root}_update(t,e,n,i){if(!this.enabled)return void this._updateWeight(t);const r=this._startTime;if(null!==r){const i=(t-r)*n;if(i<0||0===n)return;this._startTime=null,e=n*i}e*=this._updateTimeScale(t);const s=this._updateTime(e),a=this._updateWeight(t);if(a>0){const t=this._interpolants,e=this._propertyBindings;if(this.blendMode===st)for(let n=0,i=t.length;n!==i;++n)t[n].evaluate(s),e[n].accumulateAdditive(a);else for(let n=0,r=t.length;n!==r;++n)t[n].evaluate(s),e[n].accumulate(i,a)}}_updateWeight(t){let e=0;if(this.enabled){e=this.weight;const n=this._weightInterpolant;if(null!==n){const i=n.evaluate(t)[0];e*=i,t>n.parameterPositions[1]&&(this.stopFading(),0===i&&(this.enabled=!1))}}return this._effectiveWeight=e,e}_updateTimeScale(t){let e=0;if(!this.paused){e=this.timeScale;const n=this._timeScaleInterpolant;if(null!==n){e*=n.evaluate(t)[0],t>n.parameterPositions[1]&&(this.stopWarping(),0===e?this.paused=!0:this.timeScale=e)}}return this._effectiveTimeScale=e,e}_updateTime(t){const e=this._clip.duration,n=this.loop;let i=this.time+t,r=this._loopCount;const s=2202===n;if(0===t)return-1===r?i:s&&1==(1&r)?e-i:i;if(2200===n){-1===r&&(this._loopCount=0,this._setEndings(!0,!0,!1));t:{if(i>=e)i=e;else{if(!(i<0)){this.time=i;break t}i=0}this.clampWhenFinished?this.paused=!0:this.enabled=!1,this.time=i,this._mixer.dispatchEvent({type:"finished",action:this,direction:t<0?-1:1})}}else{if(-1===r&&(t>=0?(r=0,this._setEndings(!0,0===this.repetitions,s)):this._setEndings(0===this.repetitions,!0,s)),i>=e||i<0){const n=Math.floor(i/e);i-=e*n,r+=Math.abs(n);const a=this.repetitions-r;if(a<=0)this.clampWhenFinished?this.paused=!0:this.enabled=!1,i=t>0?e:0,this.time=i,this._mixer.dispatchEvent({type:"finished",action:this,direction:t>0?1:-1});else{if(1===a){const e=t<0;this._setEndings(e,!e,s)}else this._setEndings(!1,!1,s);this._loopCount=r,this.time=i,this._mixer.dispatchEvent({type:"loop",action:this,loopDelta:n})}}else this.time=i;if(s&&1==(1&r))return e-i}return i}_setEndings(t,e,n){const i=this._interpolantSettings;n?(i.endingStart=nt,i.endingEnd=nt):(i.endingStart=t?this.zeroSlopeAtStart?nt:et:it,i.endingEnd=e?this.zeroSlopeAtEnd?nt:et:it)}_scheduleFading(t,e,n){const i=this._mixer,r=i.time;let s=this._weightInterpolant;null===s&&(s=i._lendControlInterpolant(),this._weightInterpolant=s);const a=s.parameterPositions,o=s.sampleValues;return a[0]=r,o[0]=e,a[1]=r+t,o[1]=n,this}}class Ph extends ft{constructor(t){super(),this._root=t,this._initMemoryManager(),this._accuIndex=0,this.time=0,this.timeScale=1}_bindAction(t,e){const n=t._localRoot||this._root,i=t._clip.tracks,r=i.length,s=t._propertyBindings,a=t._interpolants,o=n.uuid,l=this._bindingsByRootAndName;let c=l[o];void 0===c&&(c={},l[o]=c);for(let t=0;t!==r;++t){const r=i[t],l=r.name;let h=c[l];if(void 0!==h)++h.referenceCount,s[t]=h;else{if(h=s[t],void 0!==h){null===h._cacheIndex&&(++h.referenceCount,this._addInactiveBinding(h,o,l));continue}const i=e&&e._propertyBindings[t].binding.parsedPath;h=new vh(Rh.create(n,l,i),r.ValueTypeName,r.getValueSize()),++h.referenceCount,this._addInactiveBinding(h,o,l),s[t]=h}a[t].resultBuffer=h.buffer}}_activateAction(t){if(!this._isActiveAction(t)){if(null===t._cacheIndex){const e=(t._localRoot||this._root).uuid,n=t._clip.uuid,i=this._actionsByClip[n];this._bindAction(t,i&&i.knownActions[0]),this._addInactiveAction(t,n,e)}const e=t._propertyBindings;for(let t=0,n=e.length;t!==n;++t){const n=e[t];0==n.useCount++&&(this._lendBinding(n),n.saveOriginalState())}this._lendAction(t)}}_deactivateAction(t){if(this._isActiveAction(t)){const e=t._propertyBindings;for(let t=0,n=e.length;t!==n;++t){const n=e[t];0==--n.useCount&&(n.restoreOriginalState(),this._takeBackBinding(n))}this._takeBackAction(t)}}_initMemoryManager(){this._actions=[],this._nActiveActions=0,this._actionsByClip={},this._bindings=[],this._nActiveBindings=0,this._bindingsByRootAndName={},this._controlInterpolants=[],this._nActiveControlInterpolants=0;const t=this;this.stats={actions:{get total(){return t._actions.length},get inUse(){return t._nActiveActions}},bindings:{get total(){return t._bindings.length},get inUse(){return t._nActiveBindings}},controlInterpolants:{get total(){return t._controlInterpolants.length},get inUse(){return t._nActiveControlInterpolants}}}}_isActiveAction(t){const e=t._cacheIndex;return null!==e&&e=0;--e)t[e].stop();return this}update(t){t*=this.timeScale;const e=this._actions,n=this._nActiveActions,i=this.time+=t,r=Math.sign(t),s=this._accuIndex^=1;for(let a=0;a!==n;++a){e[a]._update(i,t,r,s)}const a=this._bindings,o=this._nActiveBindings;for(let t=0;t!==o;++t)a[t].apply(s);return this}setTime(t){this.time=0;for(let t=0;tthis.max.x||t.ythis.max.y)}containsBox(t){return this.min.x<=t.min.x&&t.max.x<=this.max.x&&this.min.y<=t.min.y&&t.max.y<=this.max.y}getParameter(t,e){return e.set((t.x-this.min.x)/(this.max.x-this.min.x),(t.y-this.min.y)/(this.max.y-this.min.y))}intersectsBox(t){return!(t.max.xthis.max.x||t.max.ythis.max.y)}clampPoint(t,e){return e.copy(t).clamp(this.min,this.max)}distanceToPoint(t){return Oh.copy(t).clamp(this.min,this.max).sub(t).length()}intersect(t){return this.min.max(t.min),this.max.min(t.max),this}union(t){return this.min.min(t.min),this.max.max(t.max),this}translate(t){return this.min.add(t),this.max.add(t),this}equals(t){return t.min.equals(this.min)&&t.max.equals(this.max)}}Uh.prototype.isBox2=!0;const Fh=new se,Hh=new se;class Gh{constructor(t=new se,e=new se){this.start=t,this.end=e}set(t,e){return this.start.copy(t),this.end.copy(e),this}copy(t){return this.start.copy(t.start),this.end.copy(t.end),this}getCenter(t){return t.addVectors(this.start,this.end).multiplyScalar(.5)}delta(t){return t.subVectors(this.end,this.start)}distanceSq(){return this.start.distanceToSquared(this.end)}distance(){return this.start.distanceTo(this.end)}at(t,e){return this.delta(e).multiplyScalar(t).add(this.start)}closestPointToPointParameter(t,e){Fh.subVectors(t,this.start),Hh.subVectors(this.end,this.start);const n=Hh.dot(Hh);let i=Hh.dot(Fh)/n;return e&&(i=bt(i,0,1)),i}closestPointToPoint(t,e,n){const i=this.closestPointToPointParameter(t,e);return this.delta(n).multiplyScalar(i).add(this.start)}applyMatrix4(t){return this.start.applyMatrix4(t),this.end.applyMatrix4(t),this}equals(t){return t.start.equals(this.start)&&t.end.equals(this.end)}clone(){return(new this.constructor).copy(this)}}const kh=new se;const Vh=new se,Wh=new ze,jh=new ze;class qh extends so{constructor(t){const e=Xh(t),n=new Vn,i=[],r=[],s=new Wt(0,0,1),a=new Wt(0,1,0);for(let t=0;t>-e-14,pu[256|t]=1024>>-e-14|32768,mu[t]=-e-1,mu[256|t]=-e-1):e<=15?(pu[t]=e+15<<10,pu[256|t]=e+15<<10|32768,mu[t]=13,mu[256|t]=13):e<128?(pu[t]=31744,pu[256|t]=64512,mu[t]=24,mu[256|t]=24):(pu[t]=31744,pu[256|t]=64512,mu[t]=13,mu[256|t]=13)}const fu=new Uint32Array(2048),gu=new Uint32Array(64),vu=new Uint32Array(64);for(let t=1;t<1024;++t){let e=t<<13,n=0;for(;0==(8388608&e);)e<<=1,n-=8388608;e&=-8388609,n+=947912704,fu[t]=e|n}for(let t=1024;t<2048;++t)fu[t]=939524096+(t-1024<<13);for(let t=1;t<31;++t)gu[t]=t<<23;gu[31]=1199570944,gu[32]=2147483648;for(let t=33;t<63;++t)gu[t]=2147483648+(t-32<<23);gu[63]=3347054592;for(let t=1;t<64;++t)32!==t&&(vu[t]=1024);xo.create=function(t,e){return console.log("THREE.Curve.create() has been deprecated"),t.prototype=Object.create(xo.prototype),t.prototype.constructor=t,t.prototype.getPoint=e,t},Ho.prototype.fromPoints=function(t){return console.warn("THREE.Path: .fromPoints() has been renamed to .setFromPoints()."),this.setFromPoints(t)};Kh.prototype.setColors=function(){console.error("THREE.GridHelper: setColors() has been deprecated, pass them in the constructor instead.")},qh.prototype.update=function(){console.error("THREE.SkeletonHelper: update() no longer needs to be called.")};vc.prototype.extractUrlBase=function(t){return console.warn("THREE.Loader: .extractUrlBase() has been deprecated. Use THREE.LoaderUtils.extractUrlBase() instead."),Wc.extractUrlBase(t)},vc.Handlers={add:function(){console.error("THREE.Loader: Handlers.add() has been removed. Use LoadingManager.addHandler() instead.")},get:function(){console.error("THREE.Loader: Handlers.get() has been removed. Use LoadingManager.getHandler() instead.")}};Uh.prototype.center=function(t){return console.warn("THREE.Box2: .center() has been renamed to .getCenter()."),this.getCenter(t)},Uh.prototype.empty=function(){return console.warn("THREE.Box2: .empty() has been renamed to .isEmpty()."),this.isEmpty()},Uh.prototype.isIntersectionBox=function(t){return console.warn("THREE.Box2: .isIntersectionBox() has been renamed to .intersectsBox()."),this.intersectsBox(t)},Uh.prototype.size=function(t){return console.warn("THREE.Box2: .size() has been renamed to .getSize()."),this.getSize(t)},le.prototype.center=function(t){return console.warn("THREE.Box3: .center() has been renamed to .getCenter()."),this.getCenter(t)},le.prototype.empty=function(){return console.warn("THREE.Box3: .empty() has been renamed to .isEmpty()."),this.isEmpty()},le.prototype.isIntersectionBox=function(t){return console.warn("THREE.Box3: .isIntersectionBox() has been renamed to .intersectsBox()."),this.intersectsBox(t)},le.prototype.isIntersectionSphere=function(t){return console.warn("THREE.Box3: .isIntersectionSphere() has been renamed to .intersectsSphere()."),this.intersectsSphere(t)},le.prototype.size=function(t){return console.warn("THREE.Box3: .size() has been renamed to .getSize()."),this.getSize(t)},qe.prototype.toVector3=function(){console.error("THREE.Euler: .toVector3() has been removed. Use Vector3.setFromEuler() instead")},Ae.prototype.empty=function(){return console.warn("THREE.Sphere: .empty() has been renamed to .isEmpty()."),this.isEmpty()},Ei.prototype.setFromMatrix=function(t){return console.warn("THREE.Frustum: .setFromMatrix() has been renamed to .setFromProjectionMatrix()."),this.setFromProjectionMatrix(t)},Gh.prototype.center=function(t){return console.warn("THREE.Line3: .center() has been renamed to .getCenter()."),this.getCenter(t)},Ct.prototype.flattenToArrayOffset=function(t,e){return console.warn("THREE.Matrix3: .flattenToArrayOffset() has been deprecated. Use .toArray() instead."),this.toArray(t,e)},Ct.prototype.multiplyVector3=function(t){return console.warn("THREE.Matrix3: .multiplyVector3() has been removed. Use vector.applyMatrix3( matrix ) instead."),t.applyMatrix3(this)},Ct.prototype.multiplyVector3Array=function(){console.error("THREE.Matrix3: .multiplyVector3Array() has been removed.")},Ct.prototype.applyToBufferAttribute=function(t){return console.warn("THREE.Matrix3: .applyToBufferAttribute() has been removed. Use attribute.applyMatrix3( matrix ) instead."),t.applyMatrix3(this)},Ct.prototype.applyToVector3Array=function(){console.error("THREE.Matrix3: .applyToVector3Array() has been removed.")},Ct.prototype.getInverse=function(t){return console.warn("THREE.Matrix3: .getInverse() has been removed. Use matrixInv.copy( matrix ).invert(); instead."),this.copy(t).invert()},ze.prototype.extractPosition=function(t){return console.warn("THREE.Matrix4: .extractPosition() has been renamed to .copyPosition()."),this.copyPosition(t)},ze.prototype.flattenToArrayOffset=function(t,e){return console.warn("THREE.Matrix4: .flattenToArrayOffset() has been deprecated. Use .toArray() instead."),this.toArray(t,e)},ze.prototype.getPosition=function(){return console.warn("THREE.Matrix4: .getPosition() has been removed. Use Vector3.setFromMatrixPosition( matrix ) instead."),(new se).setFromMatrixColumn(this,3)},ze.prototype.setRotationFromQuaternion=function(t){return console.warn("THREE.Matrix4: .setRotationFromQuaternion() has been renamed to .makeRotationFromQuaternion()."),this.makeRotationFromQuaternion(t)},ze.prototype.multiplyToArray=function(){console.warn("THREE.Matrix4: .multiplyToArray() has been removed.")},ze.prototype.multiplyVector3=function(t){return console.warn("THREE.Matrix4: .multiplyVector3() has been removed. Use vector.applyMatrix4( matrix ) instead."),t.applyMatrix4(this)},ze.prototype.multiplyVector4=function(t){return console.warn("THREE.Matrix4: .multiplyVector4() has been removed. Use vector.applyMatrix4( matrix ) instead."),t.applyMatrix4(this)},ze.prototype.multiplyVector3Array=function(){console.error("THREE.Matrix4: .multiplyVector3Array() has been removed.")},ze.prototype.rotateAxis=function(t){console.warn("THREE.Matrix4: .rotateAxis() has been removed. Use Vector3.transformDirection( matrix ) instead."),t.transformDirection(this)},ze.prototype.crossVector=function(t){return console.warn("THREE.Matrix4: .crossVector() has been removed. Use vector.applyMatrix4( matrix ) instead."),t.applyMatrix4(this)},ze.prototype.translate=function(){console.error("THREE.Matrix4: .translate() has been removed.")},ze.prototype.rotateX=function(){console.error("THREE.Matrix4: .rotateX() has been removed.")},ze.prototype.rotateY=function(){console.error("THREE.Matrix4: .rotateY() has been removed.")},ze.prototype.rotateZ=function(){console.error("THREE.Matrix4: .rotateZ() has been removed.")},ze.prototype.rotateByAxis=function(){console.error("THREE.Matrix4: .rotateByAxis() has been removed.")},ze.prototype.applyToBufferAttribute=function(t){return console.warn("THREE.Matrix4: .applyToBufferAttribute() has been removed. Use attribute.applyMatrix4( matrix ) instead."),t.applyMatrix4(this)},ze.prototype.applyToVector3Array=function(){console.error("THREE.Matrix4: .applyToVector3Array() has been removed.")},ze.prototype.makeFrustum=function(t,e,n,i,r,s){return console.warn("THREE.Matrix4: .makeFrustum() has been removed. Use .makePerspective( left, right, top, bottom, near, far ) instead."),this.makePerspective(t,e,i,n,r,s)},ze.prototype.getInverse=function(t){return console.warn("THREE.Matrix4: .getInverse() has been removed. Use matrixInv.copy( matrix ).invert(); instead."),this.copy(t).invert()},wi.prototype.isIntersectionLine=function(t){return console.warn("THREE.Plane: .isIntersectionLine() has been renamed to .intersectsLine()."),this.intersectsLine(t)},re.prototype.multiplyVector3=function(t){return console.warn("THREE.Quaternion: .multiplyVector3() has been removed. Use is now vector.applyQuaternion( quaternion ) instead."),t.applyQuaternion(this)},re.prototype.inverse=function(){return console.warn("THREE.Quaternion: .inverse() has been renamed to invert()."),this.invert()},Be.prototype.isIntersectionBox=function(t){return console.warn("THREE.Ray: .isIntersectionBox() has been renamed to .intersectsBox()."),this.intersectsBox(t)},Be.prototype.isIntersectionPlane=function(t){return console.warn("THREE.Ray: .isIntersectionPlane() has been renamed to .intersectsPlane()."),this.intersectsPlane(t)},Be.prototype.isIntersectionSphere=function(t){return console.warn("THREE.Ray: .isIntersectionSphere() has been renamed to .intersectsSphere()."),this.intersectsSphere(t)},xn.prototype.area=function(){return console.warn("THREE.Triangle: .area() has been renamed to .getArea()."),this.getArea()},xn.prototype.barycoordFromPoint=function(t,e){return console.warn("THREE.Triangle: .barycoordFromPoint() has been renamed to .getBarycoord()."),this.getBarycoord(t,e)},xn.prototype.midpoint=function(t){return console.warn("THREE.Triangle: .midpoint() has been renamed to .getMidpoint()."),this.getMidpoint(t)},xn.prototypenormal=function(t){return console.warn("THREE.Triangle: .normal() has been renamed to .getNormal()."),this.getNormal(t)},xn.prototype.plane=function(t){return console.warn("THREE.Triangle: .plane() has been renamed to .getPlane()."),this.getPlane(t)},xn.barycoordFromPoint=function(t,e,n,i,r){return console.warn("THREE.Triangle: .barycoordFromPoint() has been renamed to .getBarycoord()."),xn.getBarycoord(t,e,n,i,r)},xn.normal=function(t,e,n,i){return console.warn("THREE.Triangle: .normal() has been renamed to .getNormal()."),xn.getNormal(t,e,n,i)},$o.prototype.extractAllPoints=function(t){return console.warn("THREE.Shape: .extractAllPoints() has been removed. Use .extractPoints() instead."),this.extractPoints(t)},$o.prototype.extrude=function(t){return console.warn("THREE.Shape: .extrude() has been removed. Use ExtrudeGeometry() instead."),new Rl(this,t)},$o.prototype.makeGeometry=function(t){return console.warn("THREE.Shape: .makeGeometry() has been removed. Use ShapeGeometry() instead."),new Il(this,t)},Rt.prototype.fromAttribute=function(t,e,n){return console.warn("THREE.Vector2: .fromAttribute() has been renamed to .fromBufferAttribute()."),this.fromBufferAttribute(t,e,n)},Rt.prototype.distanceToManhattan=function(t){return console.warn("THREE.Vector2: .distanceToManhattan() has been renamed to .manhattanDistanceTo()."),this.manhattanDistanceTo(t)},Rt.prototype.lengthManhattan=function(){return console.warn("THREE.Vector2: .lengthManhattan() has been renamed to .manhattanLength()."),this.manhattanLength()},se.prototype.setEulerFromRotationMatrix=function(){console.error("THREE.Vector3: .setEulerFromRotationMatrix() has been removed. Use Euler.setFromRotationMatrix() instead.")},se.prototype.setEulerFromQuaternion=function(){console.error("THREE.Vector3: .setEulerFromQuaternion() has been removed. Use Euler.setFromQuaternion() instead.")},se.prototype.getPositionFromMatrix=function(t){return console.warn("THREE.Vector3: .getPositionFromMatrix() has been renamed to .setFromMatrixPosition()."),this.setFromMatrixPosition(t)},se.prototype.getScaleFromMatrix=function(t){return console.warn("THREE.Vector3: .getScaleFromMatrix() has been renamed to .setFromMatrixScale()."),this.setFromMatrixScale(t)},se.prototype.getColumnFromMatrix=function(t,e){return console.warn("THREE.Vector3: .getColumnFromMatrix() has been renamed to .setFromMatrixColumn()."),this.setFromMatrixColumn(e,t)},se.prototype.applyProjection=function(t){return console.warn("THREE.Vector3: .applyProjection() has been removed. Use .applyMatrix4( m ) instead."),this.applyMatrix4(t)},se.prototype.fromAttribute=function(t,e,n){return console.warn("THREE.Vector3: .fromAttribute() has been renamed to .fromBufferAttribute()."),this.fromBufferAttribute(t,e,n)},se.prototype.distanceToManhattan=function(t){return console.warn("THREE.Vector3: .distanceToManhattan() has been renamed to .manhattanDistanceTo()."),this.manhattanDistanceTo(t)},se.prototype.lengthManhattan=function(){return console.warn("THREE.Vector3: .lengthManhattan() has been renamed to .manhattanLength()."),this.manhattanLength()},Kt.prototype.fromAttribute=function(t,e,n){return console.warn("THREE.Vector4: .fromAttribute() has been renamed to .fromBufferAttribute()."),this.fromBufferAttribute(t,e,n)},Kt.prototype.lengthManhattan=function(){return console.warn("THREE.Vector4: .lengthManhattan() has been renamed to .manhattanLength()."),this.manhattanLength()},ln.prototype.getChildByName=function(t){return console.warn("THREE.Object3D: .getChildByName() has been renamed to .getObjectByName()."),this.getObjectByName(t)},ln.prototype.renderDepth=function(){console.warn("THREE.Object3D: .renderDepth has been removed. Use .renderOrder, instead.")},ln.prototype.translate=function(t,e){return console.warn("THREE.Object3D: .translate() has been removed. Use .translateOnAxis( axis, distance ) instead."),this.translateOnAxis(e,t)},ln.prototype.getWorldRotation=function(){console.error("THREE.Object3D: .getWorldRotation() has been removed. Use THREE.Object3D.getWorldQuaternion( target ) instead.")},ln.prototype.applyMatrix=function(t){return console.warn("THREE.Object3D: .applyMatrix() has been renamed to .applyMatrix4()."),this.applyMatrix4(t)},Object.defineProperties(ln.prototype,{eulerOrder:{get:function(){return console.warn("THREE.Object3D: .eulerOrder is now .rotation.order."),this.rotation.order},set:function(t){console.warn("THREE.Object3D: .eulerOrder is now .rotation.order."),this.rotation.order=t}},useQuaternion:{get:function(){console.warn("THREE.Object3D: .useQuaternion has been removed. The library now uses quaternions by default.")},set:function(){console.warn("THREE.Object3D: .useQuaternion has been removed. The library now uses quaternions by default.")}}}),oi.prototype.setDrawMode=function(){console.error("THREE.Mesh: .setDrawMode() has been removed. The renderer now always assumes THREE.TrianglesDrawMode. Transform your geometry via BufferGeometryUtils.toTrianglesDrawMode() if necessary.")},Object.defineProperties(oi.prototype,{drawMode:{get:function(){return console.error("THREE.Mesh: .drawMode has been removed. The renderer now always assumes THREE.TrianglesDrawMode."),0},set:function(){console.error("THREE.Mesh: .drawMode has been removed. The renderer now always assumes THREE.TrianglesDrawMode. Transform your geometry via BufferGeometryUtils.toTrianglesDrawMode() if necessary.")}}}),Ua.prototype.initBones=function(){console.error("THREE.SkinnedMesh: initBones() has been removed.")},fi.prototype.setLens=function(t,e){console.warn("THREE.PerspectiveCamera.setLens is deprecated. Use .setFocalLength and .filmGauge for a photographic setup."),void 0!==e&&(this.filmGauge=e),this.setFocalLength(t)},Object.defineProperties(Sc.prototype,{onlyShadow:{set:function(){console.warn("THREE.Light: .onlyShadow has been removed.")}},shadowCameraFov:{set:function(t){console.warn("THREE.Light: .shadowCameraFov is now .shadow.camera.fov."),this.shadow.camera.fov=t}},shadowCameraLeft:{set:function(t){console.warn("THREE.Light: .shadowCameraLeft is now .shadow.camera.left."),this.shadow.camera.left=t}},shadowCameraRight:{set:function(t){console.warn("THREE.Light: .shadowCameraRight is now .shadow.camera.right."),this.shadow.camera.right=t}},shadowCameraTop:{set:function(t){console.warn("THREE.Light: .shadowCameraTop is now .shadow.camera.top."),this.shadow.camera.top=t}},shadowCameraBottom:{set:function(t){console.warn("THREE.Light: .shadowCameraBottom is now .shadow.camera.bottom."),this.shadow.camera.bottom=t}},shadowCameraNear:{set:function(t){console.warn("THREE.Light: .shadowCameraNear is now .shadow.camera.near."),this.shadow.camera.near=t}},shadowCameraFar:{set:function(t){console.warn("THREE.Light: .shadowCameraFar is now .shadow.camera.far."),this.shadow.camera.far=t}},shadowCameraVisible:{set:function(){console.warn("THREE.Light: .shadowCameraVisible has been removed. Use new THREE.CameraHelper( light.shadow.camera ) instead.")}},shadowBias:{set:function(t){console.warn("THREE.Light: .shadowBias is now .shadow.bias."),this.shadow.bias=t}},shadowDarkness:{set:function(){console.warn("THREE.Light: .shadowDarkness has been removed.")}},shadowMapWidth:{set:function(t){console.warn("THREE.Light: .shadowMapWidth is now .shadow.mapSize.width."),this.shadow.mapSize.width=t}},shadowMapHeight:{set:function(t){console.warn("THREE.Light: .shadowMapHeight is now .shadow.mapSize.height."),this.shadow.mapSize.height=t}}}),Object.defineProperties(Tn.prototype,{length:{get:function(){return console.warn("THREE.BufferAttribute: .length has been deprecated. Use .count instead."),this.array.length}},dynamic:{get:function(){return console.warn("THREE.BufferAttribute: .dynamic has been deprecated. Use .usage instead."),this.usage===dt},set:function(){console.warn("THREE.BufferAttribute: .dynamic has been deprecated. Use .usage instead."),this.setUsage(dt)}}}),Tn.prototype.setDynamic=function(t){return console.warn("THREE.BufferAttribute: .setDynamic() has been deprecated. Use .setUsage() instead."),this.setUsage(!0===t?dt:ut),this},Tn.prototype.copyIndicesArray=function(){console.error("THREE.BufferAttribute: .copyIndicesArray() has been removed.")},Tn.prototype.setArray=function(){console.error("THREE.BufferAttribute: .setArray has been removed. Use BufferGeometry .setAttribute to replace/resize attribute buffers")},Vn.prototype.addIndex=function(t){console.warn("THREE.BufferGeometry: .addIndex() has been renamed to .setIndex()."),this.setIndex(t)},Vn.prototype.addAttribute=function(t,e){return console.warn("THREE.BufferGeometry: .addAttribute() has been renamed to .setAttribute()."),e&&e.isBufferAttribute||e&&e.isInterleavedBufferAttribute?"index"===t?(console.warn("THREE.BufferGeometry.addAttribute: Use .setIndex() for index attribute."),this.setIndex(e),this):this.setAttribute(t,e):(console.warn("THREE.BufferGeometry: .addAttribute() now expects ( name, attribute )."),this.setAttribute(t,new Tn(arguments[1],arguments[2])))},Vn.prototype.addDrawCall=function(t,e,n){void 0!==n&&console.warn("THREE.BufferGeometry: .addDrawCall() no longer supports indexOffset."),console.warn("THREE.BufferGeometry: .addDrawCall() is now .addGroup()."),this.addGroup(t,e)},Vn.prototype.clearDrawCalls=function(){console.warn("THREE.BufferGeometry: .clearDrawCalls() is now .clearGroups()."),this.clearGroups()},Vn.prototype.computeOffsets=function(){console.warn("THREE.BufferGeometry: .computeOffsets() has been removed.")},Vn.prototype.removeAttribute=function(t){return console.warn("THREE.BufferGeometry: .removeAttribute() has been renamed to .deleteAttribute()."),this.deleteAttribute(t)},Vn.prototype.applyMatrix=function(t){return console.warn("THREE.BufferGeometry: .applyMatrix() has been renamed to .applyMatrix4()."),this.applyMatrix4(t)},Object.defineProperties(Vn.prototype,{drawcalls:{get:function(){return console.error("THREE.BufferGeometry: .drawcalls has been renamed to .groups."),this.groups}},offsets:{get:function(){return console.warn("THREE.BufferGeometry: .offsets has been renamed to .groups."),this.groups}}}),ua.prototype.setDynamic=function(t){return console.warn("THREE.InterleavedBuffer: .setDynamic() has been deprecated. Use .setUsage() instead."),this.setUsage(!0===t?dt:ut),this},ua.prototype.setArray=function(){console.error("THREE.InterleavedBuffer: .setArray has been removed. Use BufferGeometry .setAttribute to replace/resize attribute buffers")},Rl.prototype.getArrays=function(){console.error("THREE.ExtrudeGeometry: .getArrays() has been removed.")},Rl.prototype.addShapeList=function(){console.error("THREE.ExtrudeGeometry: .addShapeList() has been removed.")},Rl.prototype.addShape=function(){console.error("THREE.ExtrudeGeometry: .addShape() has been removed.")},ha.prototype.dispose=function(){console.error("THREE.Scene: .dispose() has been removed.")},Dh.prototype.onUpdate=function(){return console.warn("THREE.Uniform: .onUpdate() has been removed. Use object.onBeforeRender() instead."),this},Object.defineProperties(bn.prototype,{wrapAround:{get:function(){console.warn("THREE.Material: .wrapAround has been removed.")},set:function(){console.warn("THREE.Material: .wrapAround has been removed.")}},overdraw:{get:function(){console.warn("THREE.Material: .overdraw has been removed.")},set:function(){console.warn("THREE.Material: .overdraw has been removed.")}},wrapRGB:{get:function(){return console.warn("THREE.Material: .wrapRGB has been removed."),new Wt}},shading:{get:function(){console.error("THREE."+this.type+": .shading has been removed. Use the boolean .flatShading instead.")},set:function(t){console.warn("THREE."+this.type+": .shading has been removed. Use the boolean .flatShading instead."),this.flatShading=1===t}},stencilMask:{get:function(){return console.warn("THREE."+this.type+": .stencilMask has been removed. Use .stencilFuncMask instead."),this.stencilFuncMask},set:function(t){console.warn("THREE."+this.type+": .stencilMask has been removed. Use .stencilFuncMask instead."),this.stencilFuncMask=t}},vertexTangents:{get:function(){console.warn("THREE."+this.type+": .vertexTangents has been removed.")},set:function(){console.warn("THREE."+this.type+": .vertexTangents has been removed.")}}}),Object.defineProperties(pi.prototype,{derivatives:{get:function(){return console.warn("THREE.ShaderMaterial: .derivatives has been moved to .extensions.derivatives."),this.extensions.derivatives},set:function(t){console.warn("THREE. ShaderMaterial: .derivatives has been moved to .extensions.derivatives."),this.extensions.derivatives=t}}}),aa.prototype.clearTarget=function(t,e,n,i){console.warn("THREE.WebGLRenderer: .clearTarget() has been deprecated. Use .setRenderTarget() and .clear() instead."),this.setRenderTarget(t),this.clear(e,n,i)},aa.prototype.animate=function(t){console.warn("THREE.WebGLRenderer: .animate() is now .setAnimationLoop()."),this.setAnimationLoop(t)},aa.prototype.getCurrentRenderTarget=function(){return console.warn("THREE.WebGLRenderer: .getCurrentRenderTarget() is now .getRenderTarget()."),this.getRenderTarget()},aa.prototype.getMaxAnisotropy=function(){return console.warn("THREE.WebGLRenderer: .getMaxAnisotropy() is now .capabilities.getMaxAnisotropy()."),this.capabilities.getMaxAnisotropy()},aa.prototype.getPrecision=function(){return console.warn("THREE.WebGLRenderer: .getPrecision() is now .capabilities.precision."),this.capabilities.precision},aa.prototype.resetGLState=function(){return console.warn("THREE.WebGLRenderer: .resetGLState() is now .state.reset()."),this.state.reset()},aa.prototype.supportsFloatTextures=function(){return console.warn("THREE.WebGLRenderer: .supportsFloatTextures() is now .extensions.get( 'OES_texture_float' )."),this.extensions.get("OES_texture_float")},aa.prototype.supportsHalfFloatTextures=function(){return console.warn("THREE.WebGLRenderer: .supportsHalfFloatTextures() is now .extensions.get( 'OES_texture_half_float' )."),this.extensions.get("OES_texture_half_float")},aa.prototype.supportsStandardDerivatives=function(){return console.warn("THREE.WebGLRenderer: .supportsStandardDerivatives() is now .extensions.get( 'OES_standard_derivatives' )."),this.extensions.get("OES_standard_derivatives")},aa.prototype.supportsCompressedTextureS3TC=function(){return console.warn("THREE.WebGLRenderer: .supportsCompressedTextureS3TC() is now .extensions.get( 'WEBGL_compressed_texture_s3tc' )."),this.extensions.get("WEBGL_compressed_texture_s3tc")},aa.prototype.supportsCompressedTexturePVRTC=function(){return console.warn("THREE.WebGLRenderer: .supportsCompressedTexturePVRTC() is now .extensions.get( 'WEBGL_compressed_texture_pvrtc' )."),this.extensions.get("WEBGL_compressed_texture_pvrtc")},aa.prototype.supportsBlendMinMax=function(){return console.warn("THREE.WebGLRenderer: .supportsBlendMinMax() is now .extensions.get( 'EXT_blend_minmax' )."),this.extensions.get("EXT_blend_minmax")},aa.prototype.supportsVertexTextures=function(){return console.warn("THREE.WebGLRenderer: .supportsVertexTextures() is now .capabilities.vertexTextures."),this.capabilities.vertexTextures},aa.prototype.supportsInstancedArrays=function(){return console.warn("THREE.WebGLRenderer: .supportsInstancedArrays() is now .extensions.get( 'ANGLE_instanced_arrays' )."),this.extensions.get("ANGLE_instanced_arrays")},aa.prototype.enableScissorTest=function(t){console.warn("THREE.WebGLRenderer: .enableScissorTest() is now .setScissorTest()."),this.setScissorTest(t)},aa.prototype.initMaterial=function(){console.warn("THREE.WebGLRenderer: .initMaterial() has been removed.")},aa.prototype.addPrePlugin=function(){console.warn("THREE.WebGLRenderer: .addPrePlugin() has been removed.")},aa.prototype.addPostPlugin=function(){console.warn("THREE.WebGLRenderer: .addPostPlugin() has been removed.")},aa.prototype.updateShadowMap=function(){console.warn("THREE.WebGLRenderer: .updateShadowMap() has been removed.")},aa.prototype.setFaceCulling=function(){console.warn("THREE.WebGLRenderer: .setFaceCulling() has been removed.")},aa.prototype.allocTextureUnit=function(){console.warn("THREE.WebGLRenderer: .allocTextureUnit() has been removed.")},aa.prototype.setTexture=function(){console.warn("THREE.WebGLRenderer: .setTexture() has been removed.")},aa.prototype.setTexture2D=function(){console.warn("THREE.WebGLRenderer: .setTexture2D() has been removed.")},aa.prototype.setTextureCube=function(){console.warn("THREE.WebGLRenderer: .setTextureCube() has been removed.")},aa.prototype.getActiveMipMapLevel=function(){return console.warn("THREE.WebGLRenderer: .getActiveMipMapLevel() is now .getActiveMipmapLevel()."),this.getActiveMipmapLevel()},Object.defineProperties(aa.prototype,{shadowMapEnabled:{get:function(){return this.shadowMap.enabled},set:function(t){console.warn("THREE.WebGLRenderer: .shadowMapEnabled is now .shadowMap.enabled."),this.shadowMap.enabled=t}},shadowMapType:{get:function(){return this.shadowMap.type},set:function(t){console.warn("THREE.WebGLRenderer: .shadowMapType is now .shadowMap.type."),this.shadowMap.type=t}},shadowMapCullFace:{get:function(){console.warn("THREE.WebGLRenderer: .shadowMapCullFace has been removed. Set Material.shadowSide instead.")},set:function(){console.warn("THREE.WebGLRenderer: .shadowMapCullFace has been removed. Set Material.shadowSide instead.")}},context:{get:function(){return console.warn("THREE.WebGLRenderer: .context has been removed. Use .getContext() instead."),this.getContext()}},vr:{get:function(){return console.warn("THREE.WebGLRenderer: .vr has been renamed to .xr"),this.xr}},gammaInput:{get:function(){return console.warn("THREE.WebGLRenderer: .gammaInput has been removed. Set the encoding for textures via Texture.encoding instead."),!1},set:function(){console.warn("THREE.WebGLRenderer: .gammaInput has been removed. Set the encoding for textures via Texture.encoding instead.")}},gammaOutput:{get:function(){return console.warn("THREE.WebGLRenderer: .gammaOutput has been removed. Set WebGLRenderer.outputEncoding instead."),!1},set:function(t){console.warn("THREE.WebGLRenderer: .gammaOutput has been removed. Set WebGLRenderer.outputEncoding instead."),this.outputEncoding=!0===t?ot:at}},toneMappingWhitePoint:{get:function(){return console.warn("THREE.WebGLRenderer: .toneMappingWhitePoint has been removed."),1},set:function(){console.warn("THREE.WebGLRenderer: .toneMappingWhitePoint has been removed.")}},gammaFactor:{get:function(){return console.warn("THREE.WebGLRenderer: .gammaFactor has been removed."),2},set:function(){console.warn("THREE.WebGLRenderer: .gammaFactor has been removed.")}}}),Object.defineProperties(Ys.prototype,{cullFace:{get:function(){console.warn("THREE.WebGLRenderer: .shadowMap.cullFace has been removed. Set Material.shadowSide instead.")},set:function(){console.warn("THREE.WebGLRenderer: .shadowMap.cullFace has been removed. Set Material.shadowSide instead.")}},renderReverseSided:{get:function(){console.warn("THREE.WebGLRenderer: .shadowMap.renderReverseSided has been removed. Set Material.shadowSide instead.")},set:function(){console.warn("THREE.WebGLRenderer: .shadowMap.renderReverseSided has been removed. Set Material.shadowSide instead.")}},renderSingleSided:{get:function(){console.warn("THREE.WebGLRenderer: .shadowMap.renderSingleSided has been removed. Set Material.shadowSide instead.")},set:function(){console.warn("THREE.WebGLRenderer: .shadowMap.renderSingleSided has been removed. Set Material.shadowSide instead.")}}});Object.defineProperties(Qt.prototype,{wrapS:{get:function(){return console.warn("THREE.WebGLRenderTarget: .wrapS is now .texture.wrapS."),this.texture.wrapS},set:function(t){console.warn("THREE.WebGLRenderTarget: .wrapS is now .texture.wrapS."),this.texture.wrapS=t}},wrapT:{get:function(){return console.warn("THREE.WebGLRenderTarget: .wrapT is now .texture.wrapT."),this.texture.wrapT},set:function(t){console.warn("THREE.WebGLRenderTarget: .wrapT is now .texture.wrapT."),this.texture.wrapT=t}},magFilter:{get:function(){return console.warn("THREE.WebGLRenderTarget: .magFilter is now .texture.magFilter."),this.texture.magFilter},set:function(t){console.warn("THREE.WebGLRenderTarget: .magFilter is now .texture.magFilter."),this.texture.magFilter=t}},minFilter:{get:function(){return console.warn("THREE.WebGLRenderTarget: .minFilter is now .texture.minFilter."),this.texture.minFilter},set:function(t){console.warn("THREE.WebGLRenderTarget: .minFilter is now .texture.minFilter."),this.texture.minFilter=t}},anisotropy:{get:function(){return console.warn("THREE.WebGLRenderTarget: .anisotropy is now .texture.anisotropy."),this.texture.anisotropy},set:function(t){console.warn("THREE.WebGLRenderTarget: .anisotropy is now .texture.anisotropy."),this.texture.anisotropy=t}},offset:{get:function(){return console.warn("THREE.WebGLRenderTarget: .offset is now .texture.offset."),this.texture.offset},set:function(t){console.warn("THREE.WebGLRenderTarget: .offset is now .texture.offset."),this.texture.offset=t}},repeat:{get:function(){return console.warn("THREE.WebGLRenderTarget: .repeat is now .texture.repeat."),this.texture.repeat},set:function(t){console.warn("THREE.WebGLRenderTarget: .repeat is now .texture.repeat."),this.texture.repeat=t}},format:{get:function(){return console.warn("THREE.WebGLRenderTarget: .format is now .texture.format."),this.texture.format},set:function(t){console.warn("THREE.WebGLRenderTarget: .format is now .texture.format."),this.texture.format=t}},type:{get:function(){return console.warn("THREE.WebGLRenderTarget: .type is now .texture.type."),this.texture.type},set:function(t){console.warn("THREE.WebGLRenderTarget: .type is now .texture.type."),this.texture.type=t}},generateMipmaps:{get:function(){return console.warn("THREE.WebGLRenderTarget: .generateMipmaps is now .texture.generateMipmaps."),this.texture.generateMipmaps},set:function(t){console.warn("THREE.WebGLRenderTarget: .generateMipmaps is now .texture.generateMipmaps."),this.texture.generateMipmaps=t}}}),uh.prototype.load=function(t){console.warn("THREE.Audio: .load has been deprecated. Use THREE.AudioLoader instead.");const e=this;return(new $c).load(t,(function(t){e.setBuffer(t)})),this},gh.prototype.getData=function(){return console.warn("THREE.AudioAnalyser: .getData() is now .getFrequencyData()."),this.getFrequencyData()},vi.prototype.updateCubeMap=function(t,e){return console.warn("THREE.CubeCamera: .updateCubeMap() is now .update()."),this.update(t,e)},vi.prototype.clear=function(t,e,n,i){return console.warn("THREE.CubeCamera: .clear() is now .renderTarget.clear()."),this.renderTarget.clear(t,e,n,i)},qt.crossOrigin=void 0,qt.loadTexture=function(t,e,n,i){console.warn("THREE.ImageUtils.loadTexture has been deprecated. Use THREE.TextureLoader() instead.");const r=new wc;r.setCrossOrigin(this.crossOrigin);const s=r.load(t,n,void 0,i);return e&&(s.mapping=e),s},qt.loadTextureCube=function(t,e,n,i){console.warn("THREE.ImageUtils.loadTextureCube has been deprecated. Use THREE.CubeTextureLoader() instead.");const r=new bc;r.setCrossOrigin(this.crossOrigin);const s=r.load(t,n,void 0,i);return e&&(s.mapping=e),s},qt.loadCompressedTexture=function(){console.error("THREE.ImageUtils.loadCompressedTexture has been removed. Use THREE.DDSLoader instead.")},qt.loadCompressedTextureCube=function(){console.error("THREE.ImageUtils.loadCompressedTextureCube has been removed. Use THREE.DDSLoader instead.")};const yu={createMultiMaterialObject:function(){console.error("THREE.SceneUtils has been moved to /examples/jsm/utils/SceneUtils.js")},detach:function(){console.error("THREE.SceneUtils has been moved to /examples/jsm/utils/SceneUtils.js")},attach:function(){console.error("THREE.SceneUtils has been moved to /examples/jsm/utils/SceneUtils.js")}};"undefined"!=typeof __THREE_DEVTOOLS__&&__THREE_DEVTOOLS__.dispatchEvent(new CustomEvent("register",{detail:{revision:e}})),"undefined"!=typeof window&&(window.__THREE__?console.warn("WARNING: Multiple instances of Three.js being imported."):window.__THREE__=e),t.ACESFilmicToneMapping=4,t.AddEquation=n,t.AddOperation=2,t.AdditiveAnimationBlendMode=st,t.AdditiveBlending=2,t.AlphaFormat=1021,t.AlwaysDepth=1,t.AlwaysStencilFunc=519,t.AmbientLight=Fc,t.AmbientLightProbe=eh,t.AnimationClip=dc,t.AnimationLoader=class extends vc{constructor(t){super(t)}load(t,e,n,i){const r=this,s=new xc(this.manager);s.setPath(this.path),s.setRequestHeader(this.requestHeader),s.setWithCredentials(this.withCredentials),s.load(t,(function(n){try{e(r.parse(JSON.parse(n)))}catch(e){i?i(e):console.error(e),r.manager.itemError(t)}}),n,i)}parse(t){const e=[];for(let n=0;n.99999)this.quaternion.set(0,0,0,1);else if(t.y<-.99999)this.quaternion.set(1,0,0,0);else{au.set(t.z,0,-t.x).normalize();const e=Math.acos(t.y);this.quaternion.setFromAxisAngle(au,e)}}setLength(t,e=.2*t,n=.2*e){this.line.scale.set(1,Math.max(1e-4,t-e),1),this.line.updateMatrix(),this.cone.scale.set(n,e,n),this.cone.position.y=t,this.cone.updateMatrix()}setColor(t){this.line.material.color.set(t),this.cone.material.color.set(t)}copy(t){return super.copy(t,!1),this.line.copy(t.line),this.cone.copy(t.cone),this}},t.Audio=uh,t.AudioAnalyser=gh,t.AudioContext=Qc,t.AudioListener=class extends ln{constructor(){super(),this.type="AudioListener",this.context=Qc.getContext(),this.gain=this.context.createGain(),this.gain.connect(this.context.destination),this.filter=null,this.timeDelta=0,this._clock=new sh}getInput(){return this.gain}removeFilter(){return null!==this.filter&&(this.gain.disconnect(this.filter),this.filter.disconnect(this.context.destination),this.gain.connect(this.context.destination),this.filter=null),this}getFilter(){return this.filter}setFilter(t){return null!==this.filter?(this.gain.disconnect(this.filter),this.filter.disconnect(this.context.destination)):this.gain.disconnect(this.context.destination),this.filter=t,this.gain.connect(this.filter),this.filter.connect(this.context.destination),this}getMasterVolume(){return this.gain.gain.value}setMasterVolume(t){return this.gain.gain.setTargetAtTime(t,this.context.currentTime,.01),this}updateMatrixWorld(t){super.updateMatrixWorld(t);const e=this.context.listener,n=this.up;if(this.timeDelta=this._clock.getDelta(),this.matrixWorld.decompose(oh,lh,ch),hh.set(0,0,-1).applyQuaternion(lh),e.positionX){const t=this.context.currentTime+this.timeDelta;e.positionX.linearRampToValueAtTime(oh.x,t),e.positionY.linearRampToValueAtTime(oh.y,t),e.positionZ.linearRampToValueAtTime(oh.z,t),e.forwardX.linearRampToValueAtTime(hh.x,t),e.forwardY.linearRampToValueAtTime(hh.y,t),e.forwardZ.linearRampToValueAtTime(hh.z,t),e.upX.linearRampToValueAtTime(n.x,t),e.upY.linearRampToValueAtTime(n.y,t),e.upZ.linearRampToValueAtTime(n.z,t)}else e.setPosition(oh.x,oh.y,oh.z),e.setOrientation(hh.x,hh.y,hh.z,n.x,n.y,n.z)}},t.AudioLoader=$c,t.AxesHelper=cu,t.AxisHelper=class extends cu{constructor(t){console.warn("THREE.AxisHelper has been renamed to THREE.AxesHelper."),super(t)}},t.BackSide=1,t.BasicDepthPacking=3200,t.BasicShadowMap=0,t.BinaryTextureLoader=class extends Mc{constructor(t){console.warn("THREE.BinaryTextureLoader has been renamed to THREE.DataTextureLoader."),super(t)}},t.Bone=Fa,t.BooleanKeyframeTrack=sc,t.BoundingBoxHelper=class extends su{constructor(t,e){console.warn("THREE.BoundingBoxHelper has been deprecated. Creating a THREE.BoxHelper instead."),super(t,e)}},t.Box2=Uh,t.Box3=le,t.Box3Helper=class extends so{constructor(t,e=16776960){const n=new Uint16Array([0,1,1,2,2,3,3,0,4,5,5,6,6,7,7,4,0,4,1,5,2,6,3,7]),i=new Vn;i.setIndex(new Tn(n,1)),i.setAttribute("position",new Nn([1,1,1,-1,1,1,-1,-1,1,1,-1,1,1,1,-1,-1,1,-1,-1,-1,-1,1,-1,-1],3)),super(i,new Za({color:e,toneMapped:!1})),this.box=t,this.type="Box3Helper",this.geometry.computeBoundingSphere()}updateMatrixWorld(t){const e=this.box;e.isEmpty()||(e.getCenter(this.position),e.getSize(this.scale),this.scale.multiplyScalar(.5),super.updateMatrixWorld(t))}},t.BoxBufferGeometry=ci,t.BoxGeometry=ci,t.BoxHelper=su,t.BufferAttribute=Tn,t.BufferGeometry=Vn,t.BufferGeometryLoader=qc,t.ByteType=1010,t.Cache=mc,t.Camera=mi,t.CameraHelper=class extends so{constructor(t){const e=new Vn,n=new Za({color:16777215,vertexColors:!0,toneMapped:!1}),i=[],r=[],s={},a=new Wt(16755200),o=new Wt(16711680),l=new Wt(43775),c=new Wt(16777215),h=new Wt(3355443);function u(t,e,n){d(t,n),d(e,n)}function d(t,e){i.push(0,0,0),r.push(e.r,e.g,e.b),void 0===s[t]&&(s[t]=[]),s[t].push(i.length/3-1)}u("n1","n2",a),u("n2","n4",a),u("n4","n3",a),u("n3","n1",a),u("f1","f2",a),u("f2","f4",a),u("f4","f3",a),u("f3","f1",a),u("n1","f1",a),u("n2","f2",a),u("n3","f3",a),u("n4","f4",a),u("p","n1",o),u("p","n2",o),u("p","n3",o),u("p","n4",o),u("u1","u2",l),u("u2","u3",l),u("u3","u1",l),u("c","t",c),u("p","c",h),u("cn1","cn2",h),u("cn3","cn4",h),u("cf1","cf2",h),u("cf3","cf4",h),e.setAttribute("position",new Nn(i,3)),e.setAttribute("color",new Nn(r,3)),super(e,n),this.type="CameraHelper",this.camera=t,this.camera.updateProjectionMatrix&&this.camera.updateProjectionMatrix(),this.matrix=t.matrixWorld,this.matrixAutoUpdate=!1,this.pointMap=s,this.update()}update(){const t=this.geometry,e=this.pointMap;nu.projectionMatrixInverse.copy(this.camera.projectionMatrixInverse),iu("c",e,t,nu,0,0,-1),iu("t",e,t,nu,0,0,1),iu("n1",e,t,nu,-1,-1,-1),iu("n2",e,t,nu,1,-1,-1),iu("n3",e,t,nu,-1,1,-1),iu("n4",e,t,nu,1,1,-1),iu("f1",e,t,nu,-1,-1,1),iu("f2",e,t,nu,1,-1,1),iu("f3",e,t,nu,-1,1,1),iu("f4",e,t,nu,1,1,1),iu("u1",e,t,nu,.7,1.1,-1),iu("u2",e,t,nu,-.7,1.1,-1),iu("u3",e,t,nu,0,2,-1),iu("cf1",e,t,nu,-1,0,1),iu("cf2",e,t,nu,1,0,1),iu("cf3",e,t,nu,0,-1,1),iu("cf4",e,t,nu,0,1,1),iu("cn1",e,t,nu,-1,0,-1),iu("cn2",e,t,nu,1,0,-1),iu("cn3",e,t,nu,0,-1,-1),iu("cn4",e,t,nu,0,1,-1),t.getAttribute("position").needsUpdate=!0}dispose(){this.geometry.dispose(),this.material.dispose()}},t.CanvasRenderer=function(){console.error("THREE.CanvasRenderer has been removed")},t.CanvasTexture=yo,t.CapsuleBufferGeometry=ko,t.CapsuleGeometry=ko,t.CatmullRomCurve3=Ao,t.CineonToneMapping=3,t.CircleBufferGeometry=Vo,t.CircleGeometry=Vo,t.ClampToEdgeWrapping=h,t.Clock=sh,t.Color=Wt,t.ColorKeyframeTrack=ac,t.ColorManagement=Ot,t.CompressedTexture=vo,t.CompressedTextureLoader=class extends vc{constructor(t){super(t)}load(t,e,n,i){const r=this,s=[],a=new vo,o=new xc(this.manager);o.setPath(this.path),o.setResponseType("arraybuffer"),o.setRequestHeader(this.requestHeader),o.setWithCredentials(r.withCredentials);let l=0;function c(c){o.load(t[c],(function(t){const n=r.parse(t,!0);s[c]={width:n.width,height:n.height,format:n.format,mipmaps:n.mipmaps},l+=1,6===l&&(1===n.mipmapCount&&(a.minFilter=f),a.image=s,a.format=n.format,a.needsUpdate=!0,e&&e(a))}),n,i)}if(Array.isArray(t))for(let e=0,n=t.length;e65504&&console.warn("THREE.DataUtils.toHalfFloat(): Value out of range."),t=bt(t,-65504,65504),uu[0]=t;const e=du[0],n=e>>23&511;return pu[n]+((8388607&e)>>mu[n])}static fromHalfFloat(t){const e=t>>10;return du[0]=fu[vu[e]+(1023&t)]+gu[e],uu[0]}},t.DecrementStencilOp=7683,t.DecrementWrapStencilOp=34056,t.DefaultLoadingManager=gc,t.DepthFormat=T,t.DepthStencilFormat=E,t.DepthTexture=ia,t.DirectionalLight=Uc,t.DirectionalLightHelper=class extends ln{constructor(t,e,n){super(),this.light=t,this.light.updateMatrixWorld(),this.matrix=t.matrixWorld,this.matrixAutoUpdate=!1,this.color=n,void 0===e&&(e=1);let i=new Vn;i.setAttribute("position",new Nn([-e,e,0,e,e,0,e,-e,0,-e,-e,0,-e,e,0],3));const r=new Za({fog:!1,toneMapped:!1});this.lightPlane=new no(i,r),this.add(this.lightPlane),i=new Vn,i.setAttribute("position",new Nn([0,0,0,0,0,1],3)),this.targetLine=new no(i,r),this.add(this.targetLine),this.update()}dispose(){this.lightPlane.geometry.dispose(),this.lightPlane.material.dispose(),this.targetLine.geometry.dispose(),this.targetLine.material.dispose()}update(){Qh.setFromMatrixPosition(this.light.matrixWorld),$h.setFromMatrixPosition(this.light.target.matrixWorld),tu.subVectors($h,Qh),this.lightPlane.lookAt($h),void 0!==this.color?(this.lightPlane.material.color.set(this.color),this.targetLine.material.color.set(this.color)):(this.lightPlane.material.color.copy(this.light.color),this.targetLine.material.color.copy(this.light.color)),this.targetLine.lookAt($h),this.targetLine.scale.z=tu.length()}},t.DiscreteInterpolant=ic,t.DodecahedronBufferGeometry=Xo,t.DodecahedronGeometry=Xo,t.DoubleSide=2,t.DstAlphaFactor=206,t.DstColorFactor=208,t.DynamicBufferAttribute=class extends Tn{constructor(t,e){console.warn("THREE.DynamicBufferAttribute has been removed. Use new THREE.BufferAttribute().setUsage( THREE.DynamicDrawUsage ) instead."),super(t,e),this.setUsage(dt)}},t.DynamicCopyUsage=35050,t.DynamicDrawUsage=dt,t.DynamicReadUsage=35049,t.EdgesGeometry=Qo,t.EdgesHelper=class extends so{constructor(t,e){console.warn("THREE.EdgesHelper has been removed. Use THREE.EdgesGeometry instead."),super(new Qo(t.geometry),new Za({color:void 0!==e?e:16777215}))}},t.EllipseCurve=_o,t.EqualDepth=4,t.EqualStencilFunc=514,t.EquirectangularReflectionMapping=a,t.EquirectangularRefractionMapping=o,t.Euler=qe,t.EventDispatcher=ft,t.ExtrudeBufferGeometry=Rl,t.ExtrudeGeometry=Rl,t.FaceColors=1,t.FileLoader=xc,t.FlatShading=1,t.Float16BufferAttribute=In,t.Float32Attribute=class extends Nn{constructor(t,e){console.warn("THREE.Float32Attribute has been removed. Use new THREE.Float32BufferAttribute() instead."),super(t,e)}},t.Float32BufferAttribute=Nn,t.Float64Attribute=class extends Bn{constructor(t,e){console.warn("THREE.Float64Attribute has been removed. Use new THREE.Float64BufferAttribute() instead."),super(t,e)}},t.Float64BufferAttribute=Bn,t.FloatType=b,t.Fog=ca,t.FogExp2=la,t.Font=function(){console.error("THREE.Font has been moved to /examples/jsm/loaders/FontLoader.js")},t.FontLoader=function(){console.error("THREE.FontLoader has been moved to /examples/jsm/loaders/FontLoader.js")},t.FramebufferTexture=go,t.FrontSide=0,t.Frustum=Ei,t.GLBufferAttribute=Nh,t.GLSL1="100",t.GLSL3=pt,t.GreaterDepth=6,t.GreaterEqualDepth=5,t.GreaterEqualStencilFunc=518,t.GreaterStencilFunc=516,t.GridHelper=Kh,t.Group=ta,t.HalfFloatType=M,t.HemisphereLight=Tc,t.HemisphereLightHelper=class extends ln{constructor(t,e,n){super(),this.light=t,this.light.updateMatrixWorld(),this.matrix=t.matrixWorld,this.matrixAutoUpdate=!1,this.color=n;const i=new Pl(e);i.rotateY(.5*Math.PI),this.material=new Mn({wireframe:!0,fog:!1,toneMapped:!1}),void 0===this.color&&(this.material.vertexColors=!0);const r=i.getAttribute("position"),s=new Float32Array(3*r.count);i.setAttribute("color",new Tn(s,3)),this.add(new oi(i,this.material)),this.update()}dispose(){this.children[0].geometry.dispose(),this.children[0].material.dispose()}update(){const t=this.children[0];if(void 0!==this.color)this.material.color.set(this.color);else{const e=t.geometry.getAttribute("color");Yh.copy(this.light.color),Zh.copy(this.light.groundColor);for(let t=0,n=e.count;t0){const n=new fc(e);r=new _c(n),r.setCrossOrigin(this.crossOrigin);for(let e=0,n=t.length;e0){i=new _c(this.manager),i.setCrossOrigin(this.crossOrigin);for(let e=0,i=t.length;eNumber.EPSILON){if(l<0&&(n=e[s],o=-o,a=e[r],l=-l),t.ya.y)continue;if(t.y===n.y){if(t.x===n.x)return!0}else{const e=l*(t.x-n.x)-o*(t.y-n.y);if(0===e)return!0;if(e<0)continue;i=!i}}else{if(t.y!==n.y)continue;if(a.x<=t.x&&t.x<=n.x||n.x<=t.x&&t.x<=a.x)return!0}}return i}const r=Tl.isClockWise,s=this.subPaths;if(0===s.length)return[];if(!0===e)return n(s);let a,o,l;const c=[];if(1===s.length)return o=s[0],l=new $o,l.curves=o.curves,c.push(l),c;let h=!r(s[0].getPoints());h=t?!h:h;const u=[],d=[];let p,m,f=[],g=0;d[g]=void 0,f[g]=[];for(let e=0,n=s.length;e1){let t=!1,e=0;for(let t=0,e=d.length;t0&&!1===t&&(f=u)}for(let t=0,e=d.length;t>8&255]+Re[t>>16&255]+Re[t>>24&255]+"-"+Re[255&e]+Re[e>>8&255]+"-"+Re[e>>16&15|64]+Re[e>>24&255]+"-"+Re[63&i|128]+Re[i>>8&255]+"-"+Re[i>>16&255]+Re[i>>24&255]+Re[255&n]+Re[n>>8&255]+Re[n>>16&255]+Re[n>>24&255]).toLowerCase()}function Oe(t,e,i){return Math.max(e,Math.min(i,t))}function ze(t,e){return(t%e+e)%e}function Ue(t,e,i){return(1-i)*t+i*e}function Be(t){return 0==(t&t-1)&&0!==t}function Fe(t){return Math.pow(2,Math.ceil(Math.log(t)/Math.LN2))}function ke(t){return Math.pow(2,Math.floor(Math.log(t)/Math.LN2))}function Ge(t,e){switch(e.constructor){case Float32Array:return t;case Uint16Array:return t/65535;case Uint8Array:return t/255;case Int16Array:return Math.max(t/32767,-1);case Int8Array:return Math.max(t/127,-1);default:throw new Error("Invalid component type.")}}function Ve(t,e){switch(e.constructor){case Float32Array:return t;case Uint16Array:return Math.round(65535*t);case Uint8Array:return Math.round(255*t);case Int16Array:return Math.round(32767*t);case Int8Array:return Math.round(127*t);default:throw new Error("Invalid component type.")}}const He={DEG2RAD:Ie,RAD2DEG:De,generateUUID:Ne,clamp:Oe,euclideanModulo:ze,mapLinear:function(t,e,i,n,r){return n+(t-e)*(r-n)/(i-e)},inverseLerp:function(t,e,i){return t!==e?(i-t)/(e-t):0},lerp:Ue,damp:function(t,e,i,n){return Ue(t,e,1-Math.exp(-i*n))},pingpong:function(t,e=1){return e-Math.abs(ze(t,2*e)-e)},smoothstep:function(t,e,i){return t<=e?0:t>=i?1:(t=(t-e)/(i-e))*t*(3-2*t)},smootherstep:function(t,e,i){return t<=e?0:t>=i?1:(t=(t-e)/(i-e))*t*t*(t*(6*t-15)+10)},randInt:function(t,e){return t+Math.floor(Math.random()*(e-t+1))},randFloat:function(t,e){return t+Math.random()*(e-t)},randFloatSpread:function(t){return t*(.5-Math.random())},seededRandom:function(t){void 0!==t&&(Pe=t);let e=Pe+=1831565813;return e=Math.imul(e^e>>>15,1|e),e^=e+Math.imul(e^e>>>7,61|e),((e^e>>>14)>>>0)/4294967296},degToRad:function(t){return t*Ie},radToDeg:function(t){return t*De},isPowerOfTwo:Be,ceilPowerOfTwo:Fe,floorPowerOfTwo:ke,setQuaternionFromProperEuler:function(t,e,i,n,r){const s=Math.cos,a=Math.sin,o=s(i/2),l=a(i/2),c=s((e+n)/2),h=a((e+n)/2),u=s((e-n)/2),d=a((e-n)/2),p=s((n-e)/2),m=a((n-e)/2);switch(r){case"XYX":t.set(o*h,l*u,l*d,o*c);break;case"YZY":t.set(l*d,o*h,l*u,o*c);break;case"ZXZ":t.set(l*u,l*d,o*h,o*c);break;case"XZX":t.set(o*h,l*m,l*p,o*c);break;case"YXY":t.set(l*p,o*h,l*m,o*c);break;case"ZYZ":t.set(l*m,l*p,o*h,o*c);break;default:console.warn("THREE.MathUtils: .setQuaternionFromProperEuler() encountered an unknown order: "+r)}},normalize:Ve,denormalize:Ge};class We{constructor(t=0,e=0){We.prototype.isVector2=!0,this.x=t,this.y=e}get width(){return this.x}set width(t){this.x=t}get height(){return this.y}set height(t){this.y=t}set(t,e){return this.x=t,this.y=e,this}setScalar(t){return this.x=t,this.y=t,this}setX(t){return this.x=t,this}setY(t){return this.y=t,this}setComponent(t,e){switch(t){case 0:this.x=e;break;case 1:this.y=e;break;default:throw new Error("index is out of range: "+t)}return this}getComponent(t){switch(t){case 0:return this.x;case 1:return this.y;default:throw new Error("index is out of range: "+t)}}clone(){return new this.constructor(this.x,this.y)}copy(t){return this.x=t.x,this.y=t.y,this}add(t){return this.x+=t.x,this.y+=t.y,this}addScalar(t){return this.x+=t,this.y+=t,this}addVectors(t,e){return this.x=t.x+e.x,this.y=t.y+e.y,this}addScaledVector(t,e){return this.x+=t.x*e,this.y+=t.y*e,this}sub(t){return this.x-=t.x,this.y-=t.y,this}subScalar(t){return this.x-=t,this.y-=t,this}subVectors(t,e){return this.x=t.x-e.x,this.y=t.y-e.y,this}multiply(t){return this.x*=t.x,this.y*=t.y,this}multiplyScalar(t){return this.x*=t,this.y*=t,this}divide(t){return this.x/=t.x,this.y/=t.y,this}divideScalar(t){return this.multiplyScalar(1/t)}applyMatrix3(t){const e=this.x,i=this.y,n=t.elements;return this.x=n[0]*e+n[3]*i+n[6],this.y=n[1]*e+n[4]*i+n[7],this}min(t){return this.x=Math.min(this.x,t.x),this.y=Math.min(this.y,t.y),this}max(t){return this.x=Math.max(this.x,t.x),this.y=Math.max(this.y,t.y),this}clamp(t,e){return this.x=Math.max(t.x,Math.min(e.x,this.x)),this.y=Math.max(t.y,Math.min(e.y,this.y)),this}clampScalar(t,e){return this.x=Math.max(t,Math.min(e,this.x)),this.y=Math.max(t,Math.min(e,this.y)),this}clampLength(t,e){const i=this.length();return this.divideScalar(i||1).multiplyScalar(Math.max(t,Math.min(e,i)))}floor(){return this.x=Math.floor(this.x),this.y=Math.floor(this.y),this}ceil(){return this.x=Math.ceil(this.x),this.y=Math.ceil(this.y),this}round(){return this.x=Math.round(this.x),this.y=Math.round(this.y),this}roundToZero(){return this.x=this.x<0?Math.ceil(this.x):Math.floor(this.x),this.y=this.y<0?Math.ceil(this.y):Math.floor(this.y),this}negate(){return this.x=-this.x,this.y=-this.y,this}dot(t){return this.x*t.x+this.y*t.y}cross(t){return this.x*t.y-this.y*t.x}lengthSq(){return this.x*this.x+this.y*this.y}length(){return Math.sqrt(this.x*this.x+this.y*this.y)}manhattanLength(){return Math.abs(this.x)+Math.abs(this.y)}normalize(){return this.divideScalar(this.length()||1)}angle(){return Math.atan2(-this.y,-this.x)+Math.PI}distanceTo(t){return Math.sqrt(this.distanceToSquared(t))}distanceToSquared(t){const e=this.x-t.x,i=this.y-t.y;return e*e+i*i}manhattanDistanceTo(t){return Math.abs(this.x-t.x)+Math.abs(this.y-t.y)}setLength(t){return this.normalize().multiplyScalar(t)}lerp(t,e){return this.x+=(t.x-this.x)*e,this.y+=(t.y-this.y)*e,this}lerpVectors(t,e,i){return this.x=t.x+(e.x-t.x)*i,this.y=t.y+(e.y-t.y)*i,this}equals(t){return t.x===this.x&&t.y===this.y}fromArray(t,e=0){return this.x=t[e],this.y=t[e+1],this}toArray(t=[],e=0){return t[e]=this.x,t[e+1]=this.y,t}fromBufferAttribute(t,e){return this.x=t.getX(e),this.y=t.getY(e),this}rotateAround(t,e){const i=Math.cos(e),n=Math.sin(e),r=this.x-t.x,s=this.y-t.y;return this.x=r*i-s*n+t.x,this.y=r*n+s*i+t.y,this}random(){return this.x=Math.random(),this.y=Math.random(),this}*[Symbol.iterator](){yield this.x,yield this.y}}class je{constructor(){je.prototype.isMatrix3=!0,this.elements=[1,0,0,0,1,0,0,0,1]}set(t,e,i,n,r,s,a,o,l){const c=this.elements;return c[0]=t,c[1]=n,c[2]=a,c[3]=e,c[4]=r,c[5]=o,c[6]=i,c[7]=s,c[8]=l,this}identity(){return this.set(1,0,0,0,1,0,0,0,1),this}copy(t){const e=this.elements,i=t.elements;return e[0]=i[0],e[1]=i[1],e[2]=i[2],e[3]=i[3],e[4]=i[4],e[5]=i[5],e[6]=i[6],e[7]=i[7],e[8]=i[8],this}extractBasis(t,e,i){return t.setFromMatrix3Column(this,0),e.setFromMatrix3Column(this,1),i.setFromMatrix3Column(this,2),this}setFromMatrix4(t){const e=t.elements;return this.set(e[0],e[4],e[8],e[1],e[5],e[9],e[2],e[6],e[10]),this}multiply(t){return this.multiplyMatrices(this,t)}premultiply(t){return this.multiplyMatrices(t,this)}multiplyMatrices(t,e){const i=t.elements,n=e.elements,r=this.elements,s=i[0],a=i[3],o=i[6],l=i[1],c=i[4],h=i[7],u=i[2],d=i[5],p=i[8],m=n[0],f=n[3],g=n[6],v=n[1],x=n[4],_=n[7],y=n[2],M=n[5],b=n[8];return r[0]=s*m+a*v+o*y,r[3]=s*f+a*x+o*M,r[6]=s*g+a*_+o*b,r[1]=l*m+c*v+h*y,r[4]=l*f+c*x+h*M,r[7]=l*g+c*_+h*b,r[2]=u*m+d*v+p*y,r[5]=u*f+d*x+p*M,r[8]=u*g+d*_+p*b,this}multiplyScalar(t){const e=this.elements;return e[0]*=t,e[3]*=t,e[6]*=t,e[1]*=t,e[4]*=t,e[7]*=t,e[2]*=t,e[5]*=t,e[8]*=t,this}determinant(){const t=this.elements,e=t[0],i=t[1],n=t[2],r=t[3],s=t[4],a=t[5],o=t[6],l=t[7],c=t[8];return e*s*c-e*a*l-i*r*c+i*a*o+n*r*l-n*s*o}invert(){const t=this.elements,e=t[0],i=t[1],n=t[2],r=t[3],s=t[4],a=t[5],o=t[6],l=t[7],c=t[8],h=c*s-a*l,u=a*o-c*r,d=l*r-s*o,p=e*h+i*u+n*d;if(0===p)return this.set(0,0,0,0,0,0,0,0,0);const m=1/p;return t[0]=h*m,t[1]=(n*l-c*i)*m,t[2]=(a*i-n*s)*m,t[3]=u*m,t[4]=(c*e-n*o)*m,t[5]=(n*r-a*e)*m,t[6]=d*m,t[7]=(i*o-l*e)*m,t[8]=(s*e-i*r)*m,this}transpose(){let t;const e=this.elements;return t=e[1],e[1]=e[3],e[3]=t,t=e[2],e[2]=e[6],e[6]=t,t=e[5],e[5]=e[7],e[7]=t,this}getNormalMatrix(t){return this.setFromMatrix4(t).invert().transpose()}transposeIntoArray(t){const e=this.elements;return t[0]=e[0],t[1]=e[3],t[2]=e[6],t[3]=e[1],t[4]=e[4],t[5]=e[7],t[6]=e[2],t[7]=e[5],t[8]=e[8],this}setUvTransform(t,e,i,n,r,s,a){const o=Math.cos(r),l=Math.sin(r);return this.set(i*o,i*l,-i*(o*s+l*a)+s+t,-n*l,n*o,-n*(-l*s+o*a)+a+e,0,0,1),this}scale(t,e){return this.premultiply(qe.makeScale(t,e)),this}rotate(t){return this.premultiply(qe.makeRotation(-t)),this}translate(t,e){return this.premultiply(qe.makeTranslation(t,e)),this}makeTranslation(t,e){return this.set(1,0,t,0,1,e,0,0,1),this}makeRotation(t){const e=Math.cos(t),i=Math.sin(t);return this.set(e,-i,0,i,e,0,0,0,1),this}makeScale(t,e){return this.set(t,0,0,0,e,0,0,0,1),this}equals(t){const e=this.elements,i=t.elements;for(let t=0;t<9;t++)if(e[t]!==i[t])return!1;return!0}fromArray(t,e=0){for(let i=0;i<9;i++)this.elements[i]=t[i+e];return this}toArray(t=[],e=0){const i=this.elements;return t[e]=i[0],t[e+1]=i[1],t[e+2]=i[2],t[e+3]=i[3],t[e+4]=i[4],t[e+5]=i[5],t[e+6]=i[6],t[e+7]=i[7],t[e+8]=i[8],t}clone(){return(new this.constructor).fromArray(this.elements)}}const qe=new je;function Xe(t){for(let e=t.length-1;e>=0;--e)if(t[e]>=65535)return!0;return!1}const Ye={Int8Array:Int8Array,Uint8Array:Uint8Array,Uint8ClampedArray:Uint8ClampedArray,Int16Array:Int16Array,Uint16Array:Uint16Array,Int32Array:Int32Array,Uint32Array:Uint32Array,Float32Array:Float32Array,Float64Array:Float64Array};function Ze(t,e){return new Ye[t](e)}function Je(t){return document.createElementNS("http://www.w3.org/1999/xhtml",t)}class Ke{constructor(t=0,e=0,i=0,n=1){this.isQuaternion=!0,this._x=t,this._y=e,this._z=i,this._w=n}static slerpFlat(t,e,i,n,r,s,a){let o=i[n+0],l=i[n+1],c=i[n+2],h=i[n+3];const u=r[s+0],d=r[s+1],p=r[s+2],m=r[s+3];if(0===a)return t[e+0]=o,t[e+1]=l,t[e+2]=c,void(t[e+3]=h);if(1===a)return t[e+0]=u,t[e+1]=d,t[e+2]=p,void(t[e+3]=m);if(h!==m||o!==u||l!==d||c!==p){let t=1-a;const e=o*u+l*d+c*p+h*m,i=e>=0?1:-1,n=1-e*e;if(n>Number.EPSILON){const r=Math.sqrt(n),s=Math.atan2(r,e*i);t=Math.sin(t*s)/r,a=Math.sin(a*s)/r}const r=a*i;if(o=o*t+u*r,l=l*t+d*r,c=c*t+p*r,h=h*t+m*r,t===1-a){const t=1/Math.sqrt(o*o+l*l+c*c+h*h);o*=t,l*=t,c*=t,h*=t}}t[e]=o,t[e+1]=l,t[e+2]=c,t[e+3]=h}static multiplyQuaternionsFlat(t,e,i,n,r,s){const a=i[n],o=i[n+1],l=i[n+2],c=i[n+3],h=r[s],u=r[s+1],d=r[s+2],p=r[s+3];return t[e]=a*p+c*h+o*d-l*u,t[e+1]=o*p+c*u+l*h-a*d,t[e+2]=l*p+c*d+a*u-o*h,t[e+3]=c*p-a*h-o*u-l*d,t}get x(){return this._x}set x(t){this._x=t,this._onChangeCallback()}get y(){return this._y}set y(t){this._y=t,this._onChangeCallback()}get z(){return this._z}set z(t){this._z=t,this._onChangeCallback()}get w(){return this._w}set w(t){this._w=t,this._onChangeCallback()}set(t,e,i,n){return this._x=t,this._y=e,this._z=i,this._w=n,this._onChangeCallback(),this}clone(){return new this.constructor(this._x,this._y,this._z,this._w)}copy(t){return this._x=t.x,this._y=t.y,this._z=t.z,this._w=t.w,this._onChangeCallback(),this}setFromEuler(t,e){const i=t._x,n=t._y,r=t._z,s=t._order,a=Math.cos,o=Math.sin,l=a(i/2),c=a(n/2),h=a(r/2),u=o(i/2),d=o(n/2),p=o(r/2);switch(s){case"XYZ":this._x=u*c*h+l*d*p,this._y=l*d*h-u*c*p,this._z=l*c*p+u*d*h,this._w=l*c*h-u*d*p;break;case"YXZ":this._x=u*c*h+l*d*p,this._y=l*d*h-u*c*p,this._z=l*c*p-u*d*h,this._w=l*c*h+u*d*p;break;case"ZXY":this._x=u*c*h-l*d*p,this._y=l*d*h+u*c*p,this._z=l*c*p+u*d*h,this._w=l*c*h-u*d*p;break;case"ZYX":this._x=u*c*h-l*d*p,this._y=l*d*h+u*c*p,this._z=l*c*p-u*d*h,this._w=l*c*h+u*d*p;break;case"YZX":this._x=u*c*h+l*d*p,this._y=l*d*h+u*c*p,this._z=l*c*p-u*d*h,this._w=l*c*h-u*d*p;break;case"XZY":this._x=u*c*h-l*d*p,this._y=l*d*h-u*c*p,this._z=l*c*p+u*d*h,this._w=l*c*h+u*d*p;break;default:console.warn("THREE.Quaternion: .setFromEuler() encountered an unknown order: "+s)}return!1!==e&&this._onChangeCallback(),this}setFromAxisAngle(t,e){const i=e/2,n=Math.sin(i);return this._x=t.x*n,this._y=t.y*n,this._z=t.z*n,this._w=Math.cos(i),this._onChangeCallback(),this}setFromRotationMatrix(t){const e=t.elements,i=e[0],n=e[4],r=e[8],s=e[1],a=e[5],o=e[9],l=e[2],c=e[6],h=e[10],u=i+a+h;if(u>0){const t=.5/Math.sqrt(u+1);this._w=.25/t,this._x=(c-o)*t,this._y=(r-l)*t,this._z=(s-n)*t}else if(i>a&&i>h){const t=2*Math.sqrt(1+i-a-h);this._w=(c-o)/t,this._x=.25*t,this._y=(n+s)/t,this._z=(r+l)/t}else if(a>h){const t=2*Math.sqrt(1+a-i-h);this._w=(r-l)/t,this._x=(n+s)/t,this._y=.25*t,this._z=(o+c)/t}else{const t=2*Math.sqrt(1+h-i-a);this._w=(s-n)/t,this._x=(r+l)/t,this._y=(o+c)/t,this._z=.25*t}return this._onChangeCallback(),this}setFromUnitVectors(t,e){let i=t.dot(e)+1;return iMath.abs(t.z)?(this._x=-t.y,this._y=t.x,this._z=0,this._w=i):(this._x=0,this._y=-t.z,this._z=t.y,this._w=i)):(this._x=t.y*e.z-t.z*e.y,this._y=t.z*e.x-t.x*e.z,this._z=t.x*e.y-t.y*e.x,this._w=i),this.normalize()}angleTo(t){return 2*Math.acos(Math.abs(Oe(this.dot(t),-1,1)))}rotateTowards(t,e){const i=this.angleTo(t);if(0===i)return this;const n=Math.min(1,e/i);return this.slerp(t,n),this}identity(){return this.set(0,0,0,1)}invert(){return this.conjugate()}conjugate(){return this._x*=-1,this._y*=-1,this._z*=-1,this._onChangeCallback(),this}dot(t){return this._x*t._x+this._y*t._y+this._z*t._z+this._w*t._w}lengthSq(){return this._x*this._x+this._y*this._y+this._z*this._z+this._w*this._w}length(){return Math.sqrt(this._x*this._x+this._y*this._y+this._z*this._z+this._w*this._w)}normalize(){let t=this.length();return 0===t?(this._x=0,this._y=0,this._z=0,this._w=1):(t=1/t,this._x=this._x*t,this._y=this._y*t,this._z=this._z*t,this._w=this._w*t),this._onChangeCallback(),this}multiply(t){return this.multiplyQuaternions(this,t)}premultiply(t){return this.multiplyQuaternions(t,this)}multiplyQuaternions(t,e){const i=t._x,n=t._y,r=t._z,s=t._w,a=e._x,o=e._y,l=e._z,c=e._w;return this._x=i*c+s*a+n*l-r*o,this._y=n*c+s*o+r*a-i*l,this._z=r*c+s*l+i*o-n*a,this._w=s*c-i*a-n*o-r*l,this._onChangeCallback(),this}slerp(t,e){if(0===e)return this;if(1===e)return this.copy(t);const i=this._x,n=this._y,r=this._z,s=this._w;let a=s*t._w+i*t._x+n*t._y+r*t._z;if(a<0?(this._w=-t._w,this._x=-t._x,this._y=-t._y,this._z=-t._z,a=-a):this.copy(t),a>=1)return this._w=s,this._x=i,this._y=n,this._z=r,this;const o=1-a*a;if(o<=Number.EPSILON){const t=1-e;return this._w=t*s+e*this._w,this._x=t*i+e*this._x,this._y=t*n+e*this._y,this._z=t*r+e*this._z,this.normalize(),this._onChangeCallback(),this}const l=Math.sqrt(o),c=Math.atan2(l,a),h=Math.sin((1-e)*c)/l,u=Math.sin(e*c)/l;return this._w=s*h+this._w*u,this._x=i*h+this._x*u,this._y=n*h+this._y*u,this._z=r*h+this._z*u,this._onChangeCallback(),this}slerpQuaternions(t,e,i){return this.copy(t).slerp(e,i)}random(){const t=Math.random(),e=Math.sqrt(1-t),i=Math.sqrt(t),n=2*Math.PI*Math.random(),r=2*Math.PI*Math.random();return this.set(e*Math.cos(n),i*Math.sin(r),i*Math.cos(r),e*Math.sin(n))}equals(t){return t._x===this._x&&t._y===this._y&&t._z===this._z&&t._w===this._w}fromArray(t,e=0){return this._x=t[e],this._y=t[e+1],this._z=t[e+2],this._w=t[e+3],this._onChangeCallback(),this}toArray(t=[],e=0){return t[e]=this._x,t[e+1]=this._y,t[e+2]=this._z,t[e+3]=this._w,t}fromBufferAttribute(t,e){return this._x=t.getX(e),this._y=t.getY(e),this._z=t.getZ(e),this._w=t.getW(e),this}_onChange(t){return this._onChangeCallback=t,this}_onChangeCallback(){}*[Symbol.iterator](){yield this._x,yield this._y,yield this._z,yield this._w}}class $e{constructor(t=0,e=0,i=0){$e.prototype.isVector3=!0,this.x=t,this.y=e,this.z=i}set(t,e,i){return void 0===i&&(i=this.z),this.x=t,this.y=e,this.z=i,this}setScalar(t){return this.x=t,this.y=t,this.z=t,this}setX(t){return this.x=t,this}setY(t){return this.y=t,this}setZ(t){return this.z=t,this}setComponent(t,e){switch(t){case 0:this.x=e;break;case 1:this.y=e;break;case 2:this.z=e;break;default:throw new Error("index is out of range: "+t)}return this}getComponent(t){switch(t){case 0:return this.x;case 1:return this.y;case 2:return this.z;default:throw new Error("index is out of range: "+t)}}clone(){return new this.constructor(this.x,this.y,this.z)}copy(t){return this.x=t.x,this.y=t.y,this.z=t.z,this}add(t){return this.x+=t.x,this.y+=t.y,this.z+=t.z,this}addScalar(t){return this.x+=t,this.y+=t,this.z+=t,this}addVectors(t,e){return this.x=t.x+e.x,this.y=t.y+e.y,this.z=t.z+e.z,this}addScaledVector(t,e){return this.x+=t.x*e,this.y+=t.y*e,this.z+=t.z*e,this}sub(t){return this.x-=t.x,this.y-=t.y,this.z-=t.z,this}subScalar(t){return this.x-=t,this.y-=t,this.z-=t,this}subVectors(t,e){return this.x=t.x-e.x,this.y=t.y-e.y,this.z=t.z-e.z,this}multiply(t){return this.x*=t.x,this.y*=t.y,this.z*=t.z,this}multiplyScalar(t){return this.x*=t,this.y*=t,this.z*=t,this}multiplyVectors(t,e){return this.x=t.x*e.x,this.y=t.y*e.y,this.z=t.z*e.z,this}applyEuler(t){return this.applyQuaternion(ti.setFromEuler(t))}applyAxisAngle(t,e){return this.applyQuaternion(ti.setFromAxisAngle(t,e))}applyMatrix3(t){const e=this.x,i=this.y,n=this.z,r=t.elements;return this.x=r[0]*e+r[3]*i+r[6]*n,this.y=r[1]*e+r[4]*i+r[7]*n,this.z=r[2]*e+r[5]*i+r[8]*n,this}applyNormalMatrix(t){return this.applyMatrix3(t).normalize()}applyMatrix4(t){const e=this.x,i=this.y,n=this.z,r=t.elements,s=1/(r[3]*e+r[7]*i+r[11]*n+r[15]);return this.x=(r[0]*e+r[4]*i+r[8]*n+r[12])*s,this.y=(r[1]*e+r[5]*i+r[9]*n+r[13])*s,this.z=(r[2]*e+r[6]*i+r[10]*n+r[14])*s,this}applyQuaternion(t){const e=this.x,i=this.y,n=this.z,r=t.x,s=t.y,a=t.z,o=t.w,l=o*e+s*n-a*i,c=o*i+a*e-r*n,h=o*n+r*i-s*e,u=-r*e-s*i-a*n;return this.x=l*o+u*-r+c*-a-h*-s,this.y=c*o+u*-s+h*-r-l*-a,this.z=h*o+u*-a+l*-s-c*-r,this}project(t){return this.applyMatrix4(t.matrixWorldInverse).applyMatrix4(t.projectionMatrix)}unproject(t){return this.applyMatrix4(t.projectionMatrixInverse).applyMatrix4(t.matrixWorld)}transformDirection(t){const e=this.x,i=this.y,n=this.z,r=t.elements;return this.x=r[0]*e+r[4]*i+r[8]*n,this.y=r[1]*e+r[5]*i+r[9]*n,this.z=r[2]*e+r[6]*i+r[10]*n,this.normalize()}divide(t){return this.x/=t.x,this.y/=t.y,this.z/=t.z,this}divideScalar(t){return this.multiplyScalar(1/t)}min(t){return this.x=Math.min(this.x,t.x),this.y=Math.min(this.y,t.y),this.z=Math.min(this.z,t.z),this}max(t){return this.x=Math.max(this.x,t.x),this.y=Math.max(this.y,t.y),this.z=Math.max(this.z,t.z),this}clamp(t,e){return this.x=Math.max(t.x,Math.min(e.x,this.x)),this.y=Math.max(t.y,Math.min(e.y,this.y)),this.z=Math.max(t.z,Math.min(e.z,this.z)),this}clampScalar(t,e){return this.x=Math.max(t,Math.min(e,this.x)),this.y=Math.max(t,Math.min(e,this.y)),this.z=Math.max(t,Math.min(e,this.z)),this}clampLength(t,e){const i=this.length();return this.divideScalar(i||1).multiplyScalar(Math.max(t,Math.min(e,i)))}floor(){return this.x=Math.floor(this.x),this.y=Math.floor(this.y),this.z=Math.floor(this.z),this}ceil(){return this.x=Math.ceil(this.x),this.y=Math.ceil(this.y),this.z=Math.ceil(this.z),this}round(){return this.x=Math.round(this.x),this.y=Math.round(this.y),this.z=Math.round(this.z),this}roundToZero(){return this.x=this.x<0?Math.ceil(this.x):Math.floor(this.x),this.y=this.y<0?Math.ceil(this.y):Math.floor(this.y),this.z=this.z<0?Math.ceil(this.z):Math.floor(this.z),this}negate(){return this.x=-this.x,this.y=-this.y,this.z=-this.z,this}dot(t){return this.x*t.x+this.y*t.y+this.z*t.z}lengthSq(){return this.x*this.x+this.y*this.y+this.z*this.z}length(){return Math.sqrt(this.x*this.x+this.y*this.y+this.z*this.z)}manhattanLength(){return Math.abs(this.x)+Math.abs(this.y)+Math.abs(this.z)}normalize(){return this.divideScalar(this.length()||1)}setLength(t){return this.normalize().multiplyScalar(t)}lerp(t,e){return this.x+=(t.x-this.x)*e,this.y+=(t.y-this.y)*e,this.z+=(t.z-this.z)*e,this}lerpVectors(t,e,i){return this.x=t.x+(e.x-t.x)*i,this.y=t.y+(e.y-t.y)*i,this.z=t.z+(e.z-t.z)*i,this}cross(t){return this.crossVectors(this,t)}crossVectors(t,e){const i=t.x,n=t.y,r=t.z,s=e.x,a=e.y,o=e.z;return this.x=n*o-r*a,this.y=r*s-i*o,this.z=i*a-n*s,this}projectOnVector(t){const e=t.lengthSq();if(0===e)return this.set(0,0,0);const i=t.dot(this)/e;return this.copy(t).multiplyScalar(i)}projectOnPlane(t){return Qe.copy(this).projectOnVector(t),this.sub(Qe)}reflect(t){return this.sub(Qe.copy(t).multiplyScalar(2*this.dot(t)))}angleTo(t){const e=Math.sqrt(this.lengthSq()*t.lengthSq());if(0===e)return Math.PI/2;const i=this.dot(t)/e;return Math.acos(Oe(i,-1,1))}distanceTo(t){return Math.sqrt(this.distanceToSquared(t))}distanceToSquared(t){const e=this.x-t.x,i=this.y-t.y,n=this.z-t.z;return e*e+i*i+n*n}manhattanDistanceTo(t){return Math.abs(this.x-t.x)+Math.abs(this.y-t.y)+Math.abs(this.z-t.z)}setFromSpherical(t){return this.setFromSphericalCoords(t.radius,t.phi,t.theta)}setFromSphericalCoords(t,e,i){const n=Math.sin(e)*t;return this.x=n*Math.sin(i),this.y=Math.cos(e)*t,this.z=n*Math.cos(i),this}setFromCylindrical(t){return this.setFromCylindricalCoords(t.radius,t.theta,t.y)}setFromCylindricalCoords(t,e,i){return this.x=t*Math.sin(e),this.y=i,this.z=t*Math.cos(e),this}setFromMatrixPosition(t){const e=t.elements;return this.x=e[12],this.y=e[13],this.z=e[14],this}setFromMatrixScale(t){const e=this.setFromMatrixColumn(t,0).length(),i=this.setFromMatrixColumn(t,1).length(),n=this.setFromMatrixColumn(t,2).length();return this.x=e,this.y=i,this.z=n,this}setFromMatrixColumn(t,e){return this.fromArray(t.elements,4*e)}setFromMatrix3Column(t,e){return this.fromArray(t.elements,3*e)}setFromEuler(t){return this.x=t._x,this.y=t._y,this.z=t._z,this}equals(t){return t.x===this.x&&t.y===this.y&&t.z===this.z}fromArray(t,e=0){return this.x=t[e],this.y=t[e+1],this.z=t[e+2],this}toArray(t=[],e=0){return t[e]=this.x,t[e+1]=this.y,t[e+2]=this.z,t}fromBufferAttribute(t,e){return this.x=t.getX(e),this.y=t.getY(e),this.z=t.getZ(e),this}random(){return this.x=Math.random(),this.y=Math.random(),this.z=Math.random(),this}randomDirection(){const t=2*(Math.random()-.5),e=Math.random()*Math.PI*2,i=Math.sqrt(1-t**2);return this.x=i*Math.cos(e),this.y=i*Math.sin(e),this.z=t,this}*[Symbol.iterator](){yield this.x,yield this.y,yield this.z}}const Qe=new $e,ti=new Ke;function ei(t){return t<.04045?.0773993808*t:Math.pow(.9478672986*t+.0521327014,2.4)}function ii(t){return t<.0031308?12.92*t:1.055*Math.pow(t,.41666)-.055}const ni=(new je).fromArray([.8224621,.0331941,.0170827,.177538,.9668058,.0723974,-1e-7,1e-7,.9105199]),ri=(new je).fromArray([1.2249401,-.0420569,-.0196376,-.2249404,1.0420571,-.0786361,1e-7,0,1.0982735]),si=new $e;const ai={[Se]:t=>t,[be]:t=>t.convertSRGBToLinear(),[we]:function(t){return t.convertSRGBToLinear(),si.set(t.r,t.g,t.b).applyMatrix3(ri),t.setRGB(si.x,si.y,si.z)}},oi={[Se]:t=>t,[be]:t=>t.convertLinearToSRGB(),[we]:function(t){return si.set(t.r,t.g,t.b).applyMatrix3(ni),t.setRGB(si.x,si.y,si.z).convertLinearToSRGB()}},li={enabled:!1,get legacyMode(){return console.warn("THREE.ColorManagement: .legacyMode=false renamed to .enabled=true in r150."),!this.enabled},set legacyMode(t){console.warn("THREE.ColorManagement: .legacyMode=false renamed to .enabled=true in r150."),this.enabled=!t},get workingColorSpace(){return Se},set workingColorSpace(t){console.warn("THREE.ColorManagement: .workingColorSpace is readonly.")},convert:function(t,e,i){if(!1===this.enabled||e===i||!e||!i)return t;const n=ai[e],r=oi[i];if(void 0===n||void 0===r)throw new Error(`Unsupported color space conversion, "${e}" to "${i}".`);return r(n(t))},fromWorkingColorSpace:function(t,e){return this.convert(t,this.workingColorSpace,e)},toWorkingColorSpace:function(t,e){return this.convert(t,e,this.workingColorSpace)}};let ci;class hi{static getDataURL(t){if(/^data:/i.test(t.src))return t.src;if("undefined"==typeof HTMLCanvasElement)return t.src;let e;if(t instanceof HTMLCanvasElement)e=t;else{void 0===ci&&(ci=Je("canvas")),ci.width=t.width,ci.height=t.height;const i=ci.getContext("2d");t instanceof ImageData?i.putImageData(t,0,0):i.drawImage(t,0,0,t.width,t.height),e=ci}return e.width>2048||e.height>2048?(console.warn("THREE.ImageUtils.getDataURL: Image converted to jpg for performance reasons",t),e.toDataURL("image/jpeg",.6)):e.toDataURL("image/png")}static sRGBToLinear(t){if("undefined"!=typeof HTMLImageElement&&t instanceof HTMLImageElement||"undefined"!=typeof HTMLCanvasElement&&t instanceof HTMLCanvasElement||"undefined"!=typeof ImageBitmap&&t instanceof ImageBitmap){const e=Je("canvas");e.width=t.width,e.height=t.height;const i=e.getContext("2d");i.drawImage(t,0,0,t.width,t.height);const n=i.getImageData(0,0,t.width,t.height),r=n.data;for(let t=0;t0&&(i.userData=this.userData),e||(t.textures[this.uuid]=i),i}dispose(){this.dispatchEvent({type:"dispose"})}transformUv(t){if(this.mapping!==J)return t;if(t.applyMatrix3(this.matrix),t.x<0||t.x>1)switch(this.wrapS){case it:t.x=t.x-Math.floor(t.x);break;case nt:t.x=t.x<0?0:1;break;case rt:1===Math.abs(Math.floor(t.x)%2)?t.x=Math.ceil(t.x)-t.x:t.x=t.x-Math.floor(t.x)}if(t.y<0||t.y>1)switch(this.wrapT){case it:t.y=t.y-Math.floor(t.y);break;case nt:t.y=t.y<0?0:1;break;case rt:1===Math.abs(Math.floor(t.y)%2)?t.y=Math.ceil(t.y)-t.y:t.y=t.y-Math.floor(t.y)}return this.flipY&&(t.y=1-t.y),t}set needsUpdate(t){!0===t&&(this.version++,this.source.needsUpdate=!0)}}mi.DEFAULT_IMAGE=null,mi.DEFAULT_MAPPING=J,mi.DEFAULT_ANISOTROPY=1;class fi{constructor(t=0,e=0,i=0,n=1){fi.prototype.isVector4=!0,this.x=t,this.y=e,this.z=i,this.w=n}get width(){return this.z}set width(t){this.z=t}get height(){return this.w}set height(t){this.w=t}set(t,e,i,n){return this.x=t,this.y=e,this.z=i,this.w=n,this}setScalar(t){return this.x=t,this.y=t,this.z=t,this.w=t,this}setX(t){return this.x=t,this}setY(t){return this.y=t,this}setZ(t){return this.z=t,this}setW(t){return this.w=t,this}setComponent(t,e){switch(t){case 0:this.x=e;break;case 1:this.y=e;break;case 2:this.z=e;break;case 3:this.w=e;break;default:throw new Error("index is out of range: "+t)}return this}getComponent(t){switch(t){case 0:return this.x;case 1:return this.y;case 2:return this.z;case 3:return this.w;default:throw new Error("index is out of range: "+t)}}clone(){return new this.constructor(this.x,this.y,this.z,this.w)}copy(t){return this.x=t.x,this.y=t.y,this.z=t.z,this.w=void 0!==t.w?t.w:1,this}add(t){return this.x+=t.x,this.y+=t.y,this.z+=t.z,this.w+=t.w,this}addScalar(t){return this.x+=t,this.y+=t,this.z+=t,this.w+=t,this}addVectors(t,e){return this.x=t.x+e.x,this.y=t.y+e.y,this.z=t.z+e.z,this.w=t.w+e.w,this}addScaledVector(t,e){return this.x+=t.x*e,this.y+=t.y*e,this.z+=t.z*e,this.w+=t.w*e,this}sub(t){return this.x-=t.x,this.y-=t.y,this.z-=t.z,this.w-=t.w,this}subScalar(t){return this.x-=t,this.y-=t,this.z-=t,this.w-=t,this}subVectors(t,e){return this.x=t.x-e.x,this.y=t.y-e.y,this.z=t.z-e.z,this.w=t.w-e.w,this}multiply(t){return this.x*=t.x,this.y*=t.y,this.z*=t.z,this.w*=t.w,this}multiplyScalar(t){return this.x*=t,this.y*=t,this.z*=t,this.w*=t,this}applyMatrix4(t){const e=this.x,i=this.y,n=this.z,r=this.w,s=t.elements;return this.x=s[0]*e+s[4]*i+s[8]*n+s[12]*r,this.y=s[1]*e+s[5]*i+s[9]*n+s[13]*r,this.z=s[2]*e+s[6]*i+s[10]*n+s[14]*r,this.w=s[3]*e+s[7]*i+s[11]*n+s[15]*r,this}divideScalar(t){return this.multiplyScalar(1/t)}setAxisAngleFromQuaternion(t){this.w=2*Math.acos(t.w);const e=Math.sqrt(1-t.w*t.w);return e<1e-4?(this.x=1,this.y=0,this.z=0):(this.x=t.x/e,this.y=t.y/e,this.z=t.z/e),this}setAxisAngleFromRotationMatrix(t){let e,i,n,r;const s=.01,a=.1,o=t.elements,l=o[0],c=o[4],h=o[8],u=o[1],d=o[5],p=o[9],m=o[2],f=o[6],g=o[10];if(Math.abs(c-u)o&&t>v?tv?or&&(r=l),c>s&&(s=c),h>a&&(a=h)}return this.min.set(e,i,n),this.max.set(r,s,a),this}setFromBufferAttribute(t){let e=1/0,i=1/0,n=1/0,r=-1/0,s=-1/0,a=-1/0;for(let o=0,l=t.count;or&&(r=l),c>s&&(s=c),h>a&&(a=h)}return this.min.set(e,i,n),this.max.set(r,s,a),this}setFromPoints(t){this.makeEmpty();for(let e=0,i=t.length;ethis.max.x||t.ythis.max.y||t.zthis.max.z)}containsBox(t){return this.min.x<=t.min.x&&t.max.x<=this.max.x&&this.min.y<=t.min.y&&t.max.y<=this.max.y&&this.min.z<=t.min.z&&t.max.z<=this.max.z}getParameter(t,e){return e.set((t.x-this.min.x)/(this.max.x-this.min.x),(t.y-this.min.y)/(this.max.y-this.min.y),(t.z-this.min.z)/(this.max.z-this.min.z))}intersectsBox(t){return!(t.max.xthis.max.x||t.max.ythis.max.y||t.max.zthis.max.z)}intersectsSphere(t){return this.clampPoint(t.center,Mi),Mi.distanceToSquared(t.center)<=t.radius*t.radius}intersectsPlane(t){let e,i;return t.normal.x>0?(e=t.normal.x*this.min.x,i=t.normal.x*this.max.x):(e=t.normal.x*this.max.x,i=t.normal.x*this.min.x),t.normal.y>0?(e+=t.normal.y*this.min.y,i+=t.normal.y*this.max.y):(e+=t.normal.y*this.max.y,i+=t.normal.y*this.min.y),t.normal.z>0?(e+=t.normal.z*this.min.z,i+=t.normal.z*this.max.z):(e+=t.normal.z*this.max.z,i+=t.normal.z*this.min.z),e<=-t.constant&&i>=-t.constant}intersectsTriangle(t){if(this.isEmpty())return!1;this.getCenter(Li),Ri.subVectors(this.max,Li),Si.subVectors(t.a,Li),wi.subVectors(t.b,Li),Ti.subVectors(t.c,Li),Ai.subVectors(wi,Si),Ei.subVectors(Ti,wi),Ci.subVectors(Si,Ti);let e=[0,-Ai.z,Ai.y,0,-Ei.z,Ei.y,0,-Ci.z,Ci.y,Ai.z,0,-Ai.x,Ei.z,0,-Ei.x,Ci.z,0,-Ci.x,-Ai.y,Ai.x,0,-Ei.y,Ei.x,0,-Ci.y,Ci.x,0];return!!Di(e,Si,wi,Ti,Ri)&&(e=[1,0,0,0,1,0,0,0,1],!!Di(e,Si,wi,Ti,Ri)&&(Pi.crossVectors(Ai,Ei),e=[Pi.x,Pi.y,Pi.z],Di(e,Si,wi,Ti,Ri)))}clampPoint(t,e){return e.copy(t).clamp(this.min,this.max)}distanceToPoint(t){return this.clampPoint(t,Mi).distanceTo(t)}getBoundingSphere(t){return this.isEmpty()?t.makeEmpty():(this.getCenter(t.center),t.radius=.5*this.getSize(Mi).length()),t}intersect(t){return this.min.max(t.min),this.max.min(t.max),this.isEmpty()&&this.makeEmpty(),this}union(t){return this.min.min(t.min),this.max.max(t.max),this}applyMatrix4(t){return this.isEmpty()||(yi[0].set(this.min.x,this.min.y,this.min.z).applyMatrix4(t),yi[1].set(this.min.x,this.min.y,this.max.z).applyMatrix4(t),yi[2].set(this.min.x,this.max.y,this.min.z).applyMatrix4(t),yi[3].set(this.min.x,this.max.y,this.max.z).applyMatrix4(t),yi[4].set(this.max.x,this.min.y,this.min.z).applyMatrix4(t),yi[5].set(this.max.x,this.min.y,this.max.z).applyMatrix4(t),yi[6].set(this.max.x,this.max.y,this.min.z).applyMatrix4(t),yi[7].set(this.max.x,this.max.y,this.max.z).applyMatrix4(t),this.setFromPoints(yi)),this}translate(t){return this.min.add(t),this.max.add(t),this}equals(t){return t.min.equals(this.min)&&t.max.equals(this.max)}}const yi=[new $e,new $e,new $e,new $e,new $e,new $e,new $e,new $e],Mi=new $e,bi=new _i,Si=new $e,wi=new $e,Ti=new $e,Ai=new $e,Ei=new $e,Ci=new $e,Li=new $e,Ri=new $e,Pi=new $e,Ii=new $e;function Di(t,e,i,n,r){for(let s=0,a=t.length-3;s<=a;s+=3){Ii.fromArray(t,s);const a=r.x*Math.abs(Ii.x)+r.y*Math.abs(Ii.y)+r.z*Math.abs(Ii.z),o=e.dot(Ii),l=i.dot(Ii),c=n.dot(Ii);if(Math.max(-Math.max(o,l,c),Math.min(o,l,c))>a)return!1}return!0}const Ni=new _i,Oi=new $e,zi=new $e;class Ui{constructor(t=new $e,e=-1){this.center=t,this.radius=e}set(t,e){return this.center.copy(t),this.radius=e,this}setFromPoints(t,e){const i=this.center;void 0!==e?i.copy(e):Ni.setFromPoints(t).getCenter(i);let n=0;for(let e=0,r=t.length;ethis.radius*this.radius&&(e.sub(this.center).normalize(),e.multiplyScalar(this.radius).add(this.center)),e}getBoundingBox(t){return this.isEmpty()?(t.makeEmpty(),t):(t.set(this.center,this.center),t.expandByScalar(this.radius),t)}applyMatrix4(t){return this.center.applyMatrix4(t),this.radius=this.radius*t.getMaxScaleOnAxis(),this}translate(t){return this.center.add(t),this}expandByPoint(t){if(this.isEmpty())return this.center.copy(t),this.radius=0,this;Oi.subVectors(t,this.center);const e=Oi.lengthSq();if(e>this.radius*this.radius){const t=Math.sqrt(e),i=.5*(t-this.radius);this.center.addScaledVector(Oi,i/t),this.radius+=i}return this}union(t){return t.isEmpty()?this:this.isEmpty()?(this.copy(t),this):(!0===this.center.equals(t.center)?this.radius=Math.max(this.radius,t.radius):(zi.subVectors(t.center,this.center).setLength(t.radius),this.expandByPoint(Oi.copy(t.center).add(zi)),this.expandByPoint(Oi.copy(t.center).sub(zi))),this)}equals(t){return t.center.equals(this.center)&&t.radius===this.radius}clone(){return(new this.constructor).copy(this)}}const Bi=new $e,Fi=new $e,ki=new $e,Gi=new $e,Vi=new $e,Hi=new $e,Wi=new $e;class ji{constructor(t=new $e,e=new $e(0,0,-1)){this.origin=t,this.direction=e}set(t,e){return this.origin.copy(t),this.direction.copy(e),this}copy(t){return this.origin.copy(t.origin),this.direction.copy(t.direction),this}at(t,e){return e.copy(this.origin).addScaledVector(this.direction,t)}lookAt(t){return this.direction.copy(t).sub(this.origin).normalize(),this}recast(t){return this.origin.copy(this.at(t,Bi)),this}closestPointToPoint(t,e){e.subVectors(t,this.origin);const i=e.dot(this.direction);return i<0?e.copy(this.origin):e.copy(this.origin).addScaledVector(this.direction,i)}distanceToPoint(t){return Math.sqrt(this.distanceSqToPoint(t))}distanceSqToPoint(t){const e=Bi.subVectors(t,this.origin).dot(this.direction);return e<0?this.origin.distanceToSquared(t):(Bi.copy(this.origin).addScaledVector(this.direction,e),Bi.distanceToSquared(t))}distanceSqToSegment(t,e,i,n){Fi.copy(t).add(e).multiplyScalar(.5),ki.copy(e).sub(t).normalize(),Gi.copy(this.origin).sub(Fi);const r=.5*t.distanceTo(e),s=-this.direction.dot(ki),a=Gi.dot(this.direction),o=-Gi.dot(ki),l=Gi.lengthSq(),c=Math.abs(1-s*s);let h,u,d,p;if(c>0)if(h=s*o-a,u=s*a-o,p=r*c,h>=0)if(u>=-p)if(u<=p){const t=1/c;h*=t,u*=t,d=h*(h+s*u+2*a)+u*(s*h+u+2*o)+l}else u=r,h=Math.max(0,-(s*u+a)),d=-h*h+u*(u+2*o)+l;else u=-r,h=Math.max(0,-(s*u+a)),d=-h*h+u*(u+2*o)+l;else u<=-p?(h=Math.max(0,-(-s*r+a)),u=h>0?-r:Math.min(Math.max(-r,-o),r),d=-h*h+u*(u+2*o)+l):u<=p?(h=0,u=Math.min(Math.max(-r,-o),r),d=u*(u+2*o)+l):(h=Math.max(0,-(s*r+a)),u=h>0?r:Math.min(Math.max(-r,-o),r),d=-h*h+u*(u+2*o)+l);else u=s>0?-r:r,h=Math.max(0,-(s*u+a)),d=-h*h+u*(u+2*o)+l;return i&&i.copy(this.origin).addScaledVector(this.direction,h),n&&n.copy(Fi).addScaledVector(ki,u),d}intersectSphere(t,e){Bi.subVectors(t.center,this.origin);const i=Bi.dot(this.direction),n=Bi.dot(Bi)-i*i,r=t.radius*t.radius;if(n>r)return null;const s=Math.sqrt(r-n),a=i-s,o=i+s;return o<0?null:a<0?this.at(o,e):this.at(a,e)}intersectsSphere(t){return this.distanceSqToPoint(t.center)<=t.radius*t.radius}distanceToPlane(t){const e=t.normal.dot(this.direction);if(0===e)return 0===t.distanceToPoint(this.origin)?0:null;const i=-(this.origin.dot(t.normal)+t.constant)/e;return i>=0?i:null}intersectPlane(t,e){const i=this.distanceToPlane(t);return null===i?null:this.at(i,e)}intersectsPlane(t){const e=t.distanceToPoint(this.origin);if(0===e)return!0;return t.normal.dot(this.direction)*e<0}intersectBox(t,e){let i,n,r,s,a,o;const l=1/this.direction.x,c=1/this.direction.y,h=1/this.direction.z,u=this.origin;return l>=0?(i=(t.min.x-u.x)*l,n=(t.max.x-u.x)*l):(i=(t.max.x-u.x)*l,n=(t.min.x-u.x)*l),c>=0?(r=(t.min.y-u.y)*c,s=(t.max.y-u.y)*c):(r=(t.max.y-u.y)*c,s=(t.min.y-u.y)*c),i>s||r>n?null:((r>i||isNaN(i))&&(i=r),(s=0?(a=(t.min.z-u.z)*h,o=(t.max.z-u.z)*h):(a=(t.max.z-u.z)*h,o=(t.min.z-u.z)*h),i>o||a>n?null:((a>i||i!=i)&&(i=a),(o=0?i:n,e)))}intersectsBox(t){return null!==this.intersectBox(t,Bi)}intersectTriangle(t,e,i,n,r){Vi.subVectors(e,t),Hi.subVectors(i,t),Wi.crossVectors(Vi,Hi);let s,a=this.direction.dot(Wi);if(a>0){if(n)return null;s=1}else{if(!(a<0))return null;s=-1,a=-a}Gi.subVectors(this.origin,t);const o=s*this.direction.dot(Hi.crossVectors(Gi,Hi));if(o<0)return null;const l=s*this.direction.dot(Vi.cross(Gi));if(l<0)return null;if(o+l>a)return null;const c=-s*Gi.dot(Wi);return c<0?null:this.at(c/a,r)}applyMatrix4(t){return this.origin.applyMatrix4(t),this.direction.transformDirection(t),this}equals(t){return t.origin.equals(this.origin)&&t.direction.equals(this.direction)}clone(){return(new this.constructor).copy(this)}}class qi{constructor(){qi.prototype.isMatrix4=!0,this.elements=[1,0,0,0,0,1,0,0,0,0,1,0,0,0,0,1]}set(t,e,i,n,r,s,a,o,l,c,h,u,d,p,m,f){const g=this.elements;return g[0]=t,g[4]=e,g[8]=i,g[12]=n,g[1]=r,g[5]=s,g[9]=a,g[13]=o,g[2]=l,g[6]=c,g[10]=h,g[14]=u,g[3]=d,g[7]=p,g[11]=m,g[15]=f,this}identity(){return this.set(1,0,0,0,0,1,0,0,0,0,1,0,0,0,0,1),this}clone(){return(new qi).fromArray(this.elements)}copy(t){const e=this.elements,i=t.elements;return e[0]=i[0],e[1]=i[1],e[2]=i[2],e[3]=i[3],e[4]=i[4],e[5]=i[5],e[6]=i[6],e[7]=i[7],e[8]=i[8],e[9]=i[9],e[10]=i[10],e[11]=i[11],e[12]=i[12],e[13]=i[13],e[14]=i[14],e[15]=i[15],this}copyPosition(t){const e=this.elements,i=t.elements;return e[12]=i[12],e[13]=i[13],e[14]=i[14],this}setFromMatrix3(t){const e=t.elements;return this.set(e[0],e[3],e[6],0,e[1],e[4],e[7],0,e[2],e[5],e[8],0,0,0,0,1),this}extractBasis(t,e,i){return t.setFromMatrixColumn(this,0),e.setFromMatrixColumn(this,1),i.setFromMatrixColumn(this,2),this}makeBasis(t,e,i){return this.set(t.x,e.x,i.x,0,t.y,e.y,i.y,0,t.z,e.z,i.z,0,0,0,0,1),this}extractRotation(t){const e=this.elements,i=t.elements,n=1/Xi.setFromMatrixColumn(t,0).length(),r=1/Xi.setFromMatrixColumn(t,1).length(),s=1/Xi.setFromMatrixColumn(t,2).length();return e[0]=i[0]*n,e[1]=i[1]*n,e[2]=i[2]*n,e[3]=0,e[4]=i[4]*r,e[5]=i[5]*r,e[6]=i[6]*r,e[7]=0,e[8]=i[8]*s,e[9]=i[9]*s,e[10]=i[10]*s,e[11]=0,e[12]=0,e[13]=0,e[14]=0,e[15]=1,this}makeRotationFromEuler(t){const e=this.elements,i=t.x,n=t.y,r=t.z,s=Math.cos(i),a=Math.sin(i),o=Math.cos(n),l=Math.sin(n),c=Math.cos(r),h=Math.sin(r);if("XYZ"===t.order){const t=s*c,i=s*h,n=a*c,r=a*h;e[0]=o*c,e[4]=-o*h,e[8]=l,e[1]=i+n*l,e[5]=t-r*l,e[9]=-a*o,e[2]=r-t*l,e[6]=n+i*l,e[10]=s*o}else if("YXZ"===t.order){const t=o*c,i=o*h,n=l*c,r=l*h;e[0]=t+r*a,e[4]=n*a-i,e[8]=s*l,e[1]=s*h,e[5]=s*c,e[9]=-a,e[2]=i*a-n,e[6]=r+t*a,e[10]=s*o}else if("ZXY"===t.order){const t=o*c,i=o*h,n=l*c,r=l*h;e[0]=t-r*a,e[4]=-s*h,e[8]=n+i*a,e[1]=i+n*a,e[5]=s*c,e[9]=r-t*a,e[2]=-s*l,e[6]=a,e[10]=s*o}else if("ZYX"===t.order){const t=s*c,i=s*h,n=a*c,r=a*h;e[0]=o*c,e[4]=n*l-i,e[8]=t*l+r,e[1]=o*h,e[5]=r*l+t,e[9]=i*l-n,e[2]=-l,e[6]=a*o,e[10]=s*o}else if("YZX"===t.order){const t=s*o,i=s*l,n=a*o,r=a*l;e[0]=o*c,e[4]=r-t*h,e[8]=n*h+i,e[1]=h,e[5]=s*c,e[9]=-a*c,e[2]=-l*c,e[6]=i*h+n,e[10]=t-r*h}else if("XZY"===t.order){const t=s*o,i=s*l,n=a*o,r=a*l;e[0]=o*c,e[4]=-h,e[8]=l*c,e[1]=t*h+r,e[5]=s*c,e[9]=i*h-n,e[2]=n*h-i,e[6]=a*c,e[10]=r*h+t}return e[3]=0,e[7]=0,e[11]=0,e[12]=0,e[13]=0,e[14]=0,e[15]=1,this}makeRotationFromQuaternion(t){return this.compose(Zi,t,Ji)}lookAt(t,e,i){const n=this.elements;return Qi.subVectors(t,e),0===Qi.lengthSq()&&(Qi.z=1),Qi.normalize(),Ki.crossVectors(i,Qi),0===Ki.lengthSq()&&(1===Math.abs(i.z)?Qi.x+=1e-4:Qi.z+=1e-4,Qi.normalize(),Ki.crossVectors(i,Qi)),Ki.normalize(),$i.crossVectors(Qi,Ki),n[0]=Ki.x,n[4]=$i.x,n[8]=Qi.x,n[1]=Ki.y,n[5]=$i.y,n[9]=Qi.y,n[2]=Ki.z,n[6]=$i.z,n[10]=Qi.z,this}multiply(t){return this.multiplyMatrices(this,t)}premultiply(t){return this.multiplyMatrices(t,this)}multiplyMatrices(t,e){const i=t.elements,n=e.elements,r=this.elements,s=i[0],a=i[4],o=i[8],l=i[12],c=i[1],h=i[5],u=i[9],d=i[13],p=i[2],m=i[6],f=i[10],g=i[14],v=i[3],x=i[7],_=i[11],y=i[15],M=n[0],b=n[4],S=n[8],w=n[12],T=n[1],A=n[5],E=n[9],C=n[13],L=n[2],R=n[6],P=n[10],I=n[14],D=n[3],N=n[7],O=n[11],z=n[15];return r[0]=s*M+a*T+o*L+l*D,r[4]=s*b+a*A+o*R+l*N,r[8]=s*S+a*E+o*P+l*O,r[12]=s*w+a*C+o*I+l*z,r[1]=c*M+h*T+u*L+d*D,r[5]=c*b+h*A+u*R+d*N,r[9]=c*S+h*E+u*P+d*O,r[13]=c*w+h*C+u*I+d*z,r[2]=p*M+m*T+f*L+g*D,r[6]=p*b+m*A+f*R+g*N,r[10]=p*S+m*E+f*P+g*O,r[14]=p*w+m*C+f*I+g*z,r[3]=v*M+x*T+_*L+y*D,r[7]=v*b+x*A+_*R+y*N,r[11]=v*S+x*E+_*P+y*O,r[15]=v*w+x*C+_*I+y*z,this}multiplyScalar(t){const e=this.elements;return e[0]*=t,e[4]*=t,e[8]*=t,e[12]*=t,e[1]*=t,e[5]*=t,e[9]*=t,e[13]*=t,e[2]*=t,e[6]*=t,e[10]*=t,e[14]*=t,e[3]*=t,e[7]*=t,e[11]*=t,e[15]*=t,this}determinant(){const t=this.elements,e=t[0],i=t[4],n=t[8],r=t[12],s=t[1],a=t[5],o=t[9],l=t[13],c=t[2],h=t[6],u=t[10],d=t[14];return t[3]*(+r*o*h-n*l*h-r*a*u+i*l*u+n*a*d-i*o*d)+t[7]*(+e*o*d-e*l*u+r*s*u-n*s*d+n*l*c-r*o*c)+t[11]*(+e*l*h-e*a*d-r*s*h+i*s*d+r*a*c-i*l*c)+t[15]*(-n*a*c-e*o*h+e*a*u+n*s*h-i*s*u+i*o*c)}transpose(){const t=this.elements;let e;return e=t[1],t[1]=t[4],t[4]=e,e=t[2],t[2]=t[8],t[8]=e,e=t[6],t[6]=t[9],t[9]=e,e=t[3],t[3]=t[12],t[12]=e,e=t[7],t[7]=t[13],t[13]=e,e=t[11],t[11]=t[14],t[14]=e,this}setPosition(t,e,i){const n=this.elements;return t.isVector3?(n[12]=t.x,n[13]=t.y,n[14]=t.z):(n[12]=t,n[13]=e,n[14]=i),this}invert(){const t=this.elements,e=t[0],i=t[1],n=t[2],r=t[3],s=t[4],a=t[5],o=t[6],l=t[7],c=t[8],h=t[9],u=t[10],d=t[11],p=t[12],m=t[13],f=t[14],g=t[15],v=h*f*l-m*u*l+m*o*d-a*f*d-h*o*g+a*u*g,x=p*u*l-c*f*l-p*o*d+s*f*d+c*o*g-s*u*g,_=c*m*l-p*h*l+p*a*d-s*m*d-c*a*g+s*h*g,y=p*h*o-c*m*o-p*a*u+s*m*u+c*a*f-s*h*f,M=e*v+i*x+n*_+r*y;if(0===M)return this.set(0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0);const b=1/M;return t[0]=v*b,t[1]=(m*u*r-h*f*r-m*n*d+i*f*d+h*n*g-i*u*g)*b,t[2]=(a*f*r-m*o*r+m*n*l-i*f*l-a*n*g+i*o*g)*b,t[3]=(h*o*r-a*u*r-h*n*l+i*u*l+a*n*d-i*o*d)*b,t[4]=x*b,t[5]=(c*f*r-p*u*r+p*n*d-e*f*d-c*n*g+e*u*g)*b,t[6]=(p*o*r-s*f*r-p*n*l+e*f*l+s*n*g-e*o*g)*b,t[7]=(s*u*r-c*o*r+c*n*l-e*u*l-s*n*d+e*o*d)*b,t[8]=_*b,t[9]=(p*h*r-c*m*r-p*i*d+e*m*d+c*i*g-e*h*g)*b,t[10]=(s*m*r-p*a*r+p*i*l-e*m*l-s*i*g+e*a*g)*b,t[11]=(c*a*r-s*h*r-c*i*l+e*h*l+s*i*d-e*a*d)*b,t[12]=y*b,t[13]=(c*m*n-p*h*n+p*i*u-e*m*u-c*i*f+e*h*f)*b,t[14]=(p*a*n-s*m*n-p*i*o+e*m*o+s*i*f-e*a*f)*b,t[15]=(s*h*n-c*a*n+c*i*o-e*h*o-s*i*u+e*a*u)*b,this}scale(t){const e=this.elements,i=t.x,n=t.y,r=t.z;return e[0]*=i,e[4]*=n,e[8]*=r,e[1]*=i,e[5]*=n,e[9]*=r,e[2]*=i,e[6]*=n,e[10]*=r,e[3]*=i,e[7]*=n,e[11]*=r,this}getMaxScaleOnAxis(){const t=this.elements,e=t[0]*t[0]+t[1]*t[1]+t[2]*t[2],i=t[4]*t[4]+t[5]*t[5]+t[6]*t[6],n=t[8]*t[8]+t[9]*t[9]+t[10]*t[10];return Math.sqrt(Math.max(e,i,n))}makeTranslation(t,e,i){return this.set(1,0,0,t,0,1,0,e,0,0,1,i,0,0,0,1),this}makeRotationX(t){const e=Math.cos(t),i=Math.sin(t);return this.set(1,0,0,0,0,e,-i,0,0,i,e,0,0,0,0,1),this}makeRotationY(t){const e=Math.cos(t),i=Math.sin(t);return this.set(e,0,i,0,0,1,0,0,-i,0,e,0,0,0,0,1),this}makeRotationZ(t){const e=Math.cos(t),i=Math.sin(t);return this.set(e,-i,0,0,i,e,0,0,0,0,1,0,0,0,0,1),this}makeRotationAxis(t,e){const i=Math.cos(e),n=Math.sin(e),r=1-i,s=t.x,a=t.y,o=t.z,l=r*s,c=r*a;return this.set(l*s+i,l*a-n*o,l*o+n*a,0,l*a+n*o,c*a+i,c*o-n*s,0,l*o-n*a,c*o+n*s,r*o*o+i,0,0,0,0,1),this}makeScale(t,e,i){return this.set(t,0,0,0,0,e,0,0,0,0,i,0,0,0,0,1),this}makeShear(t,e,i,n,r,s){return this.set(1,i,r,0,t,1,s,0,e,n,1,0,0,0,0,1),this}compose(t,e,i){const n=this.elements,r=e._x,s=e._y,a=e._z,o=e._w,l=r+r,c=s+s,h=a+a,u=r*l,d=r*c,p=r*h,m=s*c,f=s*h,g=a*h,v=o*l,x=o*c,_=o*h,y=i.x,M=i.y,b=i.z;return n[0]=(1-(m+g))*y,n[1]=(d+_)*y,n[2]=(p-x)*y,n[3]=0,n[4]=(d-_)*M,n[5]=(1-(u+g))*M,n[6]=(f+v)*M,n[7]=0,n[8]=(p+x)*b,n[9]=(f-v)*b,n[10]=(1-(u+m))*b,n[11]=0,n[12]=t.x,n[13]=t.y,n[14]=t.z,n[15]=1,this}decompose(t,e,i){const n=this.elements;let r=Xi.set(n[0],n[1],n[2]).length();const s=Xi.set(n[4],n[5],n[6]).length(),a=Xi.set(n[8],n[9],n[10]).length();this.determinant()<0&&(r=-r),t.x=n[12],t.y=n[13],t.z=n[14],Yi.copy(this);const o=1/r,l=1/s,c=1/a;return Yi.elements[0]*=o,Yi.elements[1]*=o,Yi.elements[2]*=o,Yi.elements[4]*=l,Yi.elements[5]*=l,Yi.elements[6]*=l,Yi.elements[8]*=c,Yi.elements[9]*=c,Yi.elements[10]*=c,e.setFromRotationMatrix(Yi),i.x=r,i.y=s,i.z=a,this}makePerspective(t,e,i,n,r,s){const a=this.elements,o=2*r/(e-t),l=2*r/(i-n),c=(e+t)/(e-t),h=(i+n)/(i-n),u=-(s+r)/(s-r),d=-2*s*r/(s-r);return a[0]=o,a[4]=0,a[8]=c,a[12]=0,a[1]=0,a[5]=l,a[9]=h,a[13]=0,a[2]=0,a[6]=0,a[10]=u,a[14]=d,a[3]=0,a[7]=0,a[11]=-1,a[15]=0,this}makeOrthographic(t,e,i,n,r,s){const a=this.elements,o=1/(e-t),l=1/(i-n),c=1/(s-r),h=(e+t)*o,u=(i+n)*l,d=(s+r)*c;return a[0]=2*o,a[4]=0,a[8]=0,a[12]=-h,a[1]=0,a[5]=2*l,a[9]=0,a[13]=-u,a[2]=0,a[6]=0,a[10]=-2*c,a[14]=-d,a[3]=0,a[7]=0,a[11]=0,a[15]=1,this}equals(t){const e=this.elements,i=t.elements;for(let t=0;t<16;t++)if(e[t]!==i[t])return!1;return!0}fromArray(t,e=0){for(let i=0;i<16;i++)this.elements[i]=t[i+e];return this}toArray(t=[],e=0){const i=this.elements;return t[e]=i[0],t[e+1]=i[1],t[e+2]=i[2],t[e+3]=i[3],t[e+4]=i[4],t[e+5]=i[5],t[e+6]=i[6],t[e+7]=i[7],t[e+8]=i[8],t[e+9]=i[9],t[e+10]=i[10],t[e+11]=i[11],t[e+12]=i[12],t[e+13]=i[13],t[e+14]=i[14],t[e+15]=i[15],t}}const Xi=new $e,Yi=new qi,Zi=new $e(0,0,0),Ji=new $e(1,1,1),Ki=new $e,$i=new $e,Qi=new $e,tn=new qi,en=new Ke;class nn{constructor(t=0,e=0,i=0,n=nn.DEFAULT_ORDER){this.isEuler=!0,this._x=t,this._y=e,this._z=i,this._order=n}get x(){return this._x}set x(t){this._x=t,this._onChangeCallback()}get y(){return this._y}set y(t){this._y=t,this._onChangeCallback()}get z(){return this._z}set z(t){this._z=t,this._onChangeCallback()}get order(){return this._order}set order(t){this._order=t,this._onChangeCallback()}set(t,e,i,n=this._order){return this._x=t,this._y=e,this._z=i,this._order=n,this._onChangeCallback(),this}clone(){return new this.constructor(this._x,this._y,this._z,this._order)}copy(t){return this._x=t._x,this._y=t._y,this._z=t._z,this._order=t._order,this._onChangeCallback(),this}setFromRotationMatrix(t,e=this._order,i=!0){const n=t.elements,r=n[0],s=n[4],a=n[8],o=n[1],l=n[5],c=n[9],h=n[2],u=n[6],d=n[10];switch(e){case"XYZ":this._y=Math.asin(Oe(a,-1,1)),Math.abs(a)<.9999999?(this._x=Math.atan2(-c,d),this._z=Math.atan2(-s,r)):(this._x=Math.atan2(u,l),this._z=0);break;case"YXZ":this._x=Math.asin(-Oe(c,-1,1)),Math.abs(c)<.9999999?(this._y=Math.atan2(a,d),this._z=Math.atan2(o,l)):(this._y=Math.atan2(-h,r),this._z=0);break;case"ZXY":this._x=Math.asin(Oe(u,-1,1)),Math.abs(u)<.9999999?(this._y=Math.atan2(-h,d),this._z=Math.atan2(-s,l)):(this._y=0,this._z=Math.atan2(o,r));break;case"ZYX":this._y=Math.asin(-Oe(h,-1,1)),Math.abs(h)<.9999999?(this._x=Math.atan2(u,d),this._z=Math.atan2(o,r)):(this._x=0,this._z=Math.atan2(-s,l));break;case"YZX":this._z=Math.asin(Oe(o,-1,1)),Math.abs(o)<.9999999?(this._x=Math.atan2(-c,l),this._y=Math.atan2(-h,r)):(this._x=0,this._y=Math.atan2(a,d));break;case"XZY":this._z=Math.asin(-Oe(s,-1,1)),Math.abs(s)<.9999999?(this._x=Math.atan2(u,l),this._y=Math.atan2(a,r)):(this._x=Math.atan2(-c,d),this._y=0);break;default:console.warn("THREE.Euler: .setFromRotationMatrix() encountered an unknown order: "+e)}return this._order=e,!0===i&&this._onChangeCallback(),this}setFromQuaternion(t,e,i){return tn.makeRotationFromQuaternion(t),this.setFromRotationMatrix(tn,e,i)}setFromVector3(t,e=this._order){return this.set(t.x,t.y,t.z,e)}reorder(t){return en.setFromEuler(this),this.setFromQuaternion(en,t)}equals(t){return t._x===this._x&&t._y===this._y&&t._z===this._z&&t._order===this._order}fromArray(t){return this._x=t[0],this._y=t[1],this._z=t[2],void 0!==t[3]&&(this._order=t[3]),this._onChangeCallback(),this}toArray(t=[],e=0){return t[e]=this._x,t[e+1]=this._y,t[e+2]=this._z,t[e+3]=this._order,t}_onChange(t){return this._onChangeCallback=t,this}_onChangeCallback(){}*[Symbol.iterator](){yield this._x,yield this._y,yield this._z,yield this._order}}nn.DEFAULT_ORDER="XYZ";class rn{constructor(){this.mask=1}set(t){this.mask=(1<>>0}enable(t){this.mask|=1<1){for(let t=0;t1){for(let t=0;t0&&(i=i.concat(r))}return i}getWorldPosition(t){return this.updateWorldMatrix(!0,!1),t.setFromMatrixPosition(this.matrixWorld)}getWorldQuaternion(t){return this.updateWorldMatrix(!0,!1),this.matrixWorld.decompose(hn,t,un),t}getWorldScale(t){return this.updateWorldMatrix(!0,!1),this.matrixWorld.decompose(hn,dn,t),t}getWorldDirection(t){this.updateWorldMatrix(!0,!1);const e=this.matrixWorld.elements;return t.set(e[8],e[9],e[10]).normalize()}raycast(){}traverse(t){t(this);const e=this.children;for(let i=0,n=e.length;i0&&(n.userData=this.userData),n.layers=this.layers.mask,n.matrix=this.matrix.toArray(),!1===this.matrixAutoUpdate&&(n.matrixAutoUpdate=!1),this.isInstancedMesh&&(n.type="InstancedMesh",n.count=this.count,n.instanceMatrix=this.instanceMatrix.toJSON(),null!==this.instanceColor&&(n.instanceColor=this.instanceColor.toJSON())),this.isScene)this.background&&(this.background.isColor?n.background=this.background.toJSON():this.background.isTexture&&(n.background=this.background.toJSON(t).uuid)),this.environment&&this.environment.isTexture&&!0!==this.environment.isRenderTargetTexture&&(n.environment=this.environment.toJSON(t).uuid);else if(this.isMesh||this.isLine||this.isPoints){n.geometry=r(t.geometries,this.geometry);const e=this.geometry.parameters;if(void 0!==e&&void 0!==e.shapes){const i=e.shapes;if(Array.isArray(i))for(let e=0,n=i.length;e0){n.children=[];for(let e=0;e0){n.animations=[];for(let e=0;e0&&(i.geometries=e),n.length>0&&(i.materials=n),r.length>0&&(i.textures=r),a.length>0&&(i.images=a),o.length>0&&(i.shapes=o),l.length>0&&(i.skeletons=l),c.length>0&&(i.animations=c),h.length>0&&(i.nodes=h)}return i.object=n,i;function s(t){const e=[];for(const i in t){const n=t[i];delete n.metadata,e.push(n)}return e}}clone(t){return(new this.constructor).copy(this,t)}copy(t,e=!0){if(this.name=t.name,this.up.copy(t.up),this.position.copy(t.position),this.rotation.order=t.rotation.order,this.quaternion.copy(t.quaternion),this.scale.copy(t.scale),this.matrix.copy(t.matrix),this.matrixWorld.copy(t.matrixWorld),this.matrixAutoUpdate=t.matrixAutoUpdate,this.matrixWorldNeedsUpdate=t.matrixWorldNeedsUpdate,this.matrixWorldAutoUpdate=t.matrixWorldAutoUpdate,this.layers.mask=t.layers.mask,this.visible=t.visible,this.castShadow=t.castShadow,this.receiveShadow=t.receiveShadow,this.frustumCulled=t.frustumCulled,this.renderOrder=t.renderOrder,this.userData=JSON.parse(JSON.stringify(t.userData)),!0===e)for(let e=0;e0?n.multiplyScalar(1/Math.sqrt(r)):n.set(0,0,0)}static getBarycoord(t,e,i,n,r){_n.subVectors(n,e),yn.subVectors(i,e),Mn.subVectors(t,e);const s=_n.dot(_n),a=_n.dot(yn),o=_n.dot(Mn),l=yn.dot(yn),c=yn.dot(Mn),h=s*l-a*a;if(0===h)return r.set(-2,-1,-1);const u=1/h,d=(l*o-a*c)*u,p=(s*c-a*o)*u;return r.set(1-d-p,p,d)}static containsPoint(t,e,i,n){return this.getBarycoord(t,e,i,n,bn),bn.x>=0&&bn.y>=0&&bn.x+bn.y<=1}static getUV(t,e,i,n,r,s,a,o){return this.getBarycoord(t,e,i,n,bn),o.set(0,0),o.addScaledVector(r,bn.x),o.addScaledVector(s,bn.y),o.addScaledVector(a,bn.z),o}static isFrontFacing(t,e,i,n){return _n.subVectors(i,e),yn.subVectors(t,e),_n.cross(yn).dot(n)<0}set(t,e,i){return this.a.copy(t),this.b.copy(e),this.c.copy(i),this}setFromPointsAndIndices(t,e,i,n){return this.a.copy(t[e]),this.b.copy(t[i]),this.c.copy(t[n]),this}setFromAttributeAndIndices(t,e,i,n){return this.a.fromBufferAttribute(t,e),this.b.fromBufferAttribute(t,i),this.c.fromBufferAttribute(t,n),this}clone(){return(new this.constructor).copy(this)}copy(t){return this.a.copy(t.a),this.b.copy(t.b),this.c.copy(t.c),this}getArea(){return _n.subVectors(this.c,this.b),yn.subVectors(this.a,this.b),.5*_n.cross(yn).length()}getMidpoint(t){return t.addVectors(this.a,this.b).add(this.c).multiplyScalar(1/3)}getNormal(t){return Ln.getNormal(this.a,this.b,this.c,t)}getPlane(t){return t.setFromCoplanarPoints(this.a,this.b,this.c)}getBarycoord(t,e){return Ln.getBarycoord(t,this.a,this.b,this.c,e)}getUV(t,e,i,n,r){return Ln.getUV(t,this.a,this.b,this.c,e,i,n,r)}containsPoint(t){return Ln.containsPoint(t,this.a,this.b,this.c)}isFrontFacing(t){return Ln.isFrontFacing(this.a,this.b,this.c,t)}intersectsBox(t){return t.intersectsTriangle(this)}closestPointToPoint(t,e){const i=this.a,n=this.b,r=this.c;let s,a;Sn.subVectors(n,i),wn.subVectors(r,i),An.subVectors(t,i);const o=Sn.dot(An),l=wn.dot(An);if(o<=0&&l<=0)return e.copy(i);En.subVectors(t,n);const c=Sn.dot(En),h=wn.dot(En);if(c>=0&&h<=c)return e.copy(n);const u=o*h-c*l;if(u<=0&&o>=0&&c<=0)return s=o/(o-c),e.copy(i).addScaledVector(Sn,s);Cn.subVectors(t,r);const d=Sn.dot(Cn),p=wn.dot(Cn);if(p>=0&&d<=p)return e.copy(r);const m=d*l-o*p;if(m<=0&&l>=0&&p<=0)return a=l/(l-p),e.copy(i).addScaledVector(wn,a);const f=c*p-d*h;if(f<=0&&h-c>=0&&d-p>=0)return Tn.subVectors(r,n),a=(h-c)/(h-c+(d-p)),e.copy(n).addScaledVector(Tn,a);const g=1/(f+m+u);return s=m*g,a=u*g,e.copy(i).addScaledVector(Sn,s).addScaledVector(wn,a)}equals(t){return t.a.equals(this.a)&&t.b.equals(this.b)&&t.c.equals(this.c)}}let Rn=0;class Pn extends Le{constructor(){super(),this.isMaterial=!0,Object.defineProperty(this,"id",{value:Rn++}),this.uuid=Ne(),this.name="",this.type="Material",this.blending=d,this.side=l,this.vertexColors=!1,this.opacity=1,this.transparent=!1,this.blendSrc=A,this.blendDst=E,this.blendEquation=v,this.blendSrcAlpha=null,this.blendDstAlpha=null,this.blendEquationAlpha=null,this.depthFunc=z,this.depthTest=!0,this.depthWrite=!0,this.stencilWriteMask=255,this.stencilFunc=519,this.stencilRef=0,this.stencilFuncMask=255,this.stencilFail=Te,this.stencilZFail=Te,this.stencilZPass=Te,this.stencilWrite=!1,this.clippingPlanes=null,this.clipIntersection=!1,this.clipShadows=!1,this.shadowSide=null,this.colorWrite=!0,this.precision=null,this.polygonOffset=!1,this.polygonOffsetFactor=0,this.polygonOffsetUnits=0,this.dithering=!1,this.alphaToCoverage=!1,this.premultipliedAlpha=!1,this.forceSinglePass=!1,this.visible=!0,this.toneMapped=!0,this.userData={},this.version=0,this._alphaTest=0}get alphaTest(){return this._alphaTest}set alphaTest(t){this._alphaTest>0!=t>0&&this.version++,this._alphaTest=t}onBuild(){}onBeforeRender(){}onBeforeCompile(){}customProgramCacheKey(){return this.onBeforeCompile.toString()}setValues(t){if(void 0!==t)for(const e in t){const i=t[e];if(void 0===i){console.warn("THREE.Material: '"+e+"' parameter is undefined.");continue}const n=this[e];void 0!==n?n&&n.isColor?n.set(i):n&&n.isVector3&&i&&i.isVector3?n.copy(i):this[e]=i:console.warn("THREE."+this.type+": '"+e+"' is not a property of this material.")}}toJSON(t){const e=void 0===t||"string"==typeof t;e&&(t={textures:{},images:{}});const i={metadata:{version:4.5,type:"Material",generator:"Material.toJSON"}};function n(t){const e=[];for(const i in t){const n=t[i];delete n.metadata,e.push(n)}return e}if(i.uuid=this.uuid,i.type=this.type,""!==this.name&&(i.name=this.name),this.color&&this.color.isColor&&(i.color=this.color.getHex()),void 0!==this.roughness&&(i.roughness=this.roughness),void 0!==this.metalness&&(i.metalness=this.metalness),void 0!==this.sheen&&(i.sheen=this.sheen),this.sheenColor&&this.sheenColor.isColor&&(i.sheenColor=this.sheenColor.getHex()),void 0!==this.sheenRoughness&&(i.sheenRoughness=this.sheenRoughness),this.emissive&&this.emissive.isColor&&(i.emissive=this.emissive.getHex()),this.emissiveIntensity&&1!==this.emissiveIntensity&&(i.emissiveIntensity=this.emissiveIntensity),this.specular&&this.specular.isColor&&(i.specular=this.specular.getHex()),void 0!==this.specularIntensity&&(i.specularIntensity=this.specularIntensity),this.specularColor&&this.specularColor.isColor&&(i.specularColor=this.specularColor.getHex()),void 0!==this.shininess&&(i.shininess=this.shininess),void 0!==this.clearcoat&&(i.clearcoat=this.clearcoat),void 0!==this.clearcoatRoughness&&(i.clearcoatRoughness=this.clearcoatRoughness),this.clearcoatMap&&this.clearcoatMap.isTexture&&(i.clearcoatMap=this.clearcoatMap.toJSON(t).uuid),this.clearcoatRoughnessMap&&this.clearcoatRoughnessMap.isTexture&&(i.clearcoatRoughnessMap=this.clearcoatRoughnessMap.toJSON(t).uuid),this.clearcoatNormalMap&&this.clearcoatNormalMap.isTexture&&(i.clearcoatNormalMap=this.clearcoatNormalMap.toJSON(t).uuid,i.clearcoatNormalScale=this.clearcoatNormalScale.toArray()),void 0!==this.iridescence&&(i.iridescence=this.iridescence),void 0!==this.iridescenceIOR&&(i.iridescenceIOR=this.iridescenceIOR),void 0!==this.iridescenceThicknessRange&&(i.iridescenceThicknessRange=this.iridescenceThicknessRange),this.iridescenceMap&&this.iridescenceMap.isTexture&&(i.iridescenceMap=this.iridescenceMap.toJSON(t).uuid),this.iridescenceThicknessMap&&this.iridescenceThicknessMap.isTexture&&(i.iridescenceThicknessMap=this.iridescenceThicknessMap.toJSON(t).uuid),this.map&&this.map.isTexture&&(i.map=this.map.toJSON(t).uuid),this.matcap&&this.matcap.isTexture&&(i.matcap=this.matcap.toJSON(t).uuid),this.alphaMap&&this.alphaMap.isTexture&&(i.alphaMap=this.alphaMap.toJSON(t).uuid),this.lightMap&&this.lightMap.isTexture&&(i.lightMap=this.lightMap.toJSON(t).uuid,i.lightMapIntensity=this.lightMapIntensity),this.aoMap&&this.aoMap.isTexture&&(i.aoMap=this.aoMap.toJSON(t).uuid,i.aoMapIntensity=this.aoMapIntensity),this.bumpMap&&this.bumpMap.isTexture&&(i.bumpMap=this.bumpMap.toJSON(t).uuid,i.bumpScale=this.bumpScale),this.normalMap&&this.normalMap.isTexture&&(i.normalMap=this.normalMap.toJSON(t).uuid,i.normalMapType=this.normalMapType,i.normalScale=this.normalScale.toArray()),this.displacementMap&&this.displacementMap.isTexture&&(i.displacementMap=this.displacementMap.toJSON(t).uuid,i.displacementScale=this.displacementScale,i.displacementBias=this.displacementBias),this.roughnessMap&&this.roughnessMap.isTexture&&(i.roughnessMap=this.roughnessMap.toJSON(t).uuid),this.metalnessMap&&this.metalnessMap.isTexture&&(i.metalnessMap=this.metalnessMap.toJSON(t).uuid),this.emissiveMap&&this.emissiveMap.isTexture&&(i.emissiveMap=this.emissiveMap.toJSON(t).uuid),this.specularMap&&this.specularMap.isTexture&&(i.specularMap=this.specularMap.toJSON(t).uuid),this.specularIntensityMap&&this.specularIntensityMap.isTexture&&(i.specularIntensityMap=this.specularIntensityMap.toJSON(t).uuid),this.specularColorMap&&this.specularColorMap.isTexture&&(i.specularColorMap=this.specularColorMap.toJSON(t).uuid),this.envMap&&this.envMap.isTexture&&(i.envMap=this.envMap.toJSON(t).uuid,void 0!==this.combine&&(i.combine=this.combine)),void 0!==this.envMapIntensity&&(i.envMapIntensity=this.envMapIntensity),void 0!==this.reflectivity&&(i.reflectivity=this.reflectivity),void 0!==this.refractionRatio&&(i.refractionRatio=this.refractionRatio),this.gradientMap&&this.gradientMap.isTexture&&(i.gradientMap=this.gradientMap.toJSON(t).uuid),void 0!==this.transmission&&(i.transmission=this.transmission),this.transmissionMap&&this.transmissionMap.isTexture&&(i.transmissionMap=this.transmissionMap.toJSON(t).uuid),void 0!==this.thickness&&(i.thickness=this.thickness),this.thicknessMap&&this.thicknessMap.isTexture&&(i.thicknessMap=this.thicknessMap.toJSON(t).uuid),void 0!==this.attenuationDistance&&this.attenuationDistance!==1/0&&(i.attenuationDistance=this.attenuationDistance),void 0!==this.attenuationColor&&(i.attenuationColor=this.attenuationColor.getHex()),void 0!==this.size&&(i.size=this.size),null!==this.shadowSide&&(i.shadowSide=this.shadowSide),void 0!==this.sizeAttenuation&&(i.sizeAttenuation=this.sizeAttenuation),this.blending!==d&&(i.blending=this.blending),this.side!==l&&(i.side=this.side),this.vertexColors&&(i.vertexColors=!0),this.opacity<1&&(i.opacity=this.opacity),!0===this.transparent&&(i.transparent=this.transparent),i.depthFunc=this.depthFunc,i.depthTest=this.depthTest,i.depthWrite=this.depthWrite,i.colorWrite=this.colorWrite,i.stencilWrite=this.stencilWrite,i.stencilWriteMask=this.stencilWriteMask,i.stencilFunc=this.stencilFunc,i.stencilRef=this.stencilRef,i.stencilFuncMask=this.stencilFuncMask,i.stencilFail=this.stencilFail,i.stencilZFail=this.stencilZFail,i.stencilZPass=this.stencilZPass,void 0!==this.rotation&&0!==this.rotation&&(i.rotation=this.rotation),!0===this.polygonOffset&&(i.polygonOffset=!0),0!==this.polygonOffsetFactor&&(i.polygonOffsetFactor=this.polygonOffsetFactor),0!==this.polygonOffsetUnits&&(i.polygonOffsetUnits=this.polygonOffsetUnits),void 0!==this.linewidth&&1!==this.linewidth&&(i.linewidth=this.linewidth),void 0!==this.dashSize&&(i.dashSize=this.dashSize),void 0!==this.gapSize&&(i.gapSize=this.gapSize),void 0!==this.scale&&(i.scale=this.scale),!0===this.dithering&&(i.dithering=!0),this.alphaTest>0&&(i.alphaTest=this.alphaTest),!0===this.alphaToCoverage&&(i.alphaToCoverage=this.alphaToCoverage),!0===this.premultipliedAlpha&&(i.premultipliedAlpha=this.premultipliedAlpha),!0===this.forceSinglePass&&(i.forceSinglePass=this.forceSinglePass),!0===this.wireframe&&(i.wireframe=this.wireframe),this.wireframeLinewidth>1&&(i.wireframeLinewidth=this.wireframeLinewidth),"round"!==this.wireframeLinecap&&(i.wireframeLinecap=this.wireframeLinecap),"round"!==this.wireframeLinejoin&&(i.wireframeLinejoin=this.wireframeLinejoin),!0===this.flatShading&&(i.flatShading=this.flatShading),!1===this.visible&&(i.visible=!1),!1===this.toneMapped&&(i.toneMapped=!1),!1===this.fog&&(i.fog=!1),Object.keys(this.userData).length>0&&(i.userData=this.userData),e){const e=n(t.textures),r=n(t.images);e.length>0&&(i.textures=e),r.length>0&&(i.images=r)}return i}clone(){return(new this.constructor).copy(this)}copy(t){this.name=t.name,this.blending=t.blending,this.side=t.side,this.vertexColors=t.vertexColors,this.opacity=t.opacity,this.transparent=t.transparent,this.blendSrc=t.blendSrc,this.blendDst=t.blendDst,this.blendEquation=t.blendEquation,this.blendSrcAlpha=t.blendSrcAlpha,this.blendDstAlpha=t.blendDstAlpha,this.blendEquationAlpha=t.blendEquationAlpha,this.depthFunc=t.depthFunc,this.depthTest=t.depthTest,this.depthWrite=t.depthWrite,this.stencilWriteMask=t.stencilWriteMask,this.stencilFunc=t.stencilFunc,this.stencilRef=t.stencilRef,this.stencilFuncMask=t.stencilFuncMask,this.stencilFail=t.stencilFail,this.stencilZFail=t.stencilZFail,this.stencilZPass=t.stencilZPass,this.stencilWrite=t.stencilWrite;const e=t.clippingPlanes;let i=null;if(null!==e){const t=e.length;i=new Array(t);for(let n=0;n!==t;++n)i[n]=e[n].clone()}return this.clippingPlanes=i,this.clipIntersection=t.clipIntersection,this.clipShadows=t.clipShadows,this.shadowSide=t.shadowSide,this.colorWrite=t.colorWrite,this.precision=t.precision,this.polygonOffset=t.polygonOffset,this.polygonOffsetFactor=t.polygonOffsetFactor,this.polygonOffsetUnits=t.polygonOffsetUnits,this.dithering=t.dithering,this.alphaTest=t.alphaTest,this.alphaToCoverage=t.alphaToCoverage,this.premultipliedAlpha=t.premultipliedAlpha,this.forceSinglePass=t.forceSinglePass,this.visible=t.visible,this.toneMapped=t.toneMapped,this.userData=JSON.parse(JSON.stringify(t.userData)),this}dispose(){this.dispatchEvent({type:"dispose"})}set needsUpdate(t){!0===t&&this.version++}}const In={aliceblue:15792383,antiquewhite:16444375,aqua:65535,aquamarine:8388564,azure:15794175,beige:16119260,bisque:16770244,black:0,blanchedalmond:16772045,blue:255,blueviolet:9055202,brown:10824234,burlywood:14596231,cadetblue:6266528,chartreuse:8388352,chocolate:13789470,coral:16744272,cornflowerblue:6591981,cornsilk:16775388,crimson:14423100,cyan:65535,darkblue:139,darkcyan:35723,darkgoldenrod:12092939,darkgray:11119017,darkgreen:25600,darkgrey:11119017,darkkhaki:12433259,darkmagenta:9109643,darkolivegreen:5597999,darkorange:16747520,darkorchid:10040012,darkred:9109504,darksalmon:15308410,darkseagreen:9419919,darkslateblue:4734347,darkslategray:3100495,darkslategrey:3100495,darkturquoise:52945,darkviolet:9699539,deeppink:16716947,deepskyblue:49151,dimgray:6908265,dimgrey:6908265,dodgerblue:2003199,firebrick:11674146,floralwhite:16775920,forestgreen:2263842,fuchsia:16711935,gainsboro:14474460,ghostwhite:16316671,gold:16766720,goldenrod:14329120,gray:8421504,green:32768,greenyellow:11403055,grey:8421504,honeydew:15794160,hotpink:16738740,indianred:13458524,indigo:4915330,ivory:16777200,khaki:15787660,lavender:15132410,lavenderblush:16773365,lawngreen:8190976,lemonchiffon:16775885,lightblue:11393254,lightcoral:15761536,lightcyan:14745599,lightgoldenrodyellow:16448210,lightgray:13882323,lightgreen:9498256,lightgrey:13882323,lightpink:16758465,lightsalmon:16752762,lightseagreen:2142890,lightskyblue:8900346,lightslategray:7833753,lightslategrey:7833753,lightsteelblue:11584734,lightyellow:16777184,lime:65280,limegreen:3329330,linen:16445670,magenta:16711935,maroon:8388608,mediumaquamarine:6737322,mediumblue:205,mediumorchid:12211667,mediumpurple:9662683,mediumseagreen:3978097,mediumslateblue:8087790,mediumspringgreen:64154,mediumturquoise:4772300,mediumvioletred:13047173,midnightblue:1644912,mintcream:16121850,mistyrose:16770273,moccasin:16770229,navajowhite:16768685,navy:128,oldlace:16643558,olive:8421376,olivedrab:7048739,orange:16753920,orangered:16729344,orchid:14315734,palegoldenrod:15657130,palegreen:10025880,paleturquoise:11529966,palevioletred:14381203,papayawhip:16773077,peachpuff:16767673,peru:13468991,pink:16761035,plum:14524637,powderblue:11591910,purple:8388736,rebeccapurple:6697881,red:16711680,rosybrown:12357519,royalblue:4286945,saddlebrown:9127187,salmon:16416882,sandybrown:16032864,seagreen:3050327,seashell:16774638,sienna:10506797,silver:12632256,skyblue:8900331,slateblue:6970061,slategray:7372944,slategrey:7372944,snow:16775930,springgreen:65407,steelblue:4620980,tan:13808780,teal:32896,thistle:14204888,tomato:16737095,turquoise:4251856,violet:15631086,wheat:16113331,white:16777215,whitesmoke:16119285,yellow:16776960,yellowgreen:10145074},Dn={h:0,s:0,l:0},Nn={h:0,s:0,l:0};function On(t,e,i){return i<0&&(i+=1),i>1&&(i-=1),i<1/6?t+6*(e-t)*i:i<.5?e:i<2/3?t+6*(e-t)*(2/3-i):t}class zn{constructor(t,e,i){return this.isColor=!0,this.r=1,this.g=1,this.b=1,void 0===e&&void 0===i?this.set(t):this.setRGB(t,e,i)}set(t){return t&&t.isColor?this.copy(t):"number"==typeof t?this.setHex(t):"string"==typeof t&&this.setStyle(t),this}setScalar(t){return this.r=t,this.g=t,this.b=t,this}setHex(t,e=be){return t=Math.floor(t),this.r=(t>>16&255)/255,this.g=(t>>8&255)/255,this.b=(255&t)/255,li.toWorkingColorSpace(this,e),this}setRGB(t,e,i,n=li.workingColorSpace){return this.r=t,this.g=e,this.b=i,li.toWorkingColorSpace(this,n),this}setHSL(t,e,i,n=li.workingColorSpace){if(t=ze(t,1),e=Oe(e,0,1),i=Oe(i,0,1),0===e)this.r=this.g=this.b=i;else{const n=i<=.5?i*(1+e):i+e-i*e,r=2*i-n;this.r=On(r,n,t+1/3),this.g=On(r,n,t),this.b=On(r,n,t-1/3)}return li.toWorkingColorSpace(this,n),this}setStyle(t,e=be){function i(e){void 0!==e&&parseFloat(e)<1&&console.warn("THREE.Color: Alpha component of "+t+" will be ignored.")}let n;if(n=/^(\w+)\(([^\)]*)\)/.exec(t)){let r;const s=n[1],a=n[2];switch(s){case"rgb":case"rgba":if(r=/^\s*(\d+)\s*,\s*(\d+)\s*,\s*(\d+)\s*(?:,\s*(\d*\.?\d+)\s*)?$/.exec(a))return this.r=Math.min(255,parseInt(r[1],10))/255,this.g=Math.min(255,parseInt(r[2],10))/255,this.b=Math.min(255,parseInt(r[3],10))/255,li.toWorkingColorSpace(this,e),i(r[4]),this;if(r=/^\s*(\d+)\%\s*,\s*(\d+)\%\s*,\s*(\d+)\%\s*(?:,\s*(\d*\.?\d+)\s*)?$/.exec(a))return this.r=Math.min(100,parseInt(r[1],10))/100,this.g=Math.min(100,parseInt(r[2],10))/100,this.b=Math.min(100,parseInt(r[3],10))/100,li.toWorkingColorSpace(this,e),i(r[4]),this;break;case"hsl":case"hsla":if(r=/^\s*(\d*\.?\d+)\s*,\s*(\d*\.?\d+)\%\s*,\s*(\d*\.?\d+)\%\s*(?:,\s*(\d*\.?\d+)\s*)?$/.exec(a)){const t=parseFloat(r[1])/360,n=parseFloat(r[2])/100,s=parseFloat(r[3])/100;return i(r[4]),this.setHSL(t,n,s,e)}break;default:console.warn("THREE.Color: Unknown color model "+t)}}else if(n=/^\#([A-Fa-f\d]+)$/.exec(t)){const i=n[1],r=i.length;if(3===r)return this.r=parseInt(i.charAt(0)+i.charAt(0),16)/255,this.g=parseInt(i.charAt(1)+i.charAt(1),16)/255,this.b=parseInt(i.charAt(2)+i.charAt(2),16)/255,li.toWorkingColorSpace(this,e),this;if(6===r)return this.r=parseInt(i.charAt(0)+i.charAt(1),16)/255,this.g=parseInt(i.charAt(2)+i.charAt(3),16)/255,this.b=parseInt(i.charAt(4)+i.charAt(5),16)/255,li.toWorkingColorSpace(this,e),this;console.warn("THREE.Color: Invalid hex color "+t)}else if(t&&t.length>0)return this.setColorName(t,e);return this}setColorName(t,e=be){const i=In[t.toLowerCase()];return void 0!==i?this.setHex(i,e):console.warn("THREE.Color: Unknown color "+t),this}clone(){return new this.constructor(this.r,this.g,this.b)}copy(t){return this.r=t.r,this.g=t.g,this.b=t.b,this}copySRGBToLinear(t){return this.r=ei(t.r),this.g=ei(t.g),this.b=ei(t.b),this}copyLinearToSRGB(t){return this.r=ii(t.r),this.g=ii(t.g),this.b=ii(t.b),this}convertSRGBToLinear(){return this.copySRGBToLinear(this),this}convertLinearToSRGB(){return this.copyLinearToSRGB(this),this}getHex(t=be){return li.fromWorkingColorSpace(Un.copy(this),t),Oe(255*Un.r,0,255)<<16^Oe(255*Un.g,0,255)<<8^Oe(255*Un.b,0,255)<<0}getHexString(t=be){return("000000"+this.getHex(t).toString(16)).slice(-6)}getHSL(t,e=li.workingColorSpace){li.fromWorkingColorSpace(Un.copy(this),e);const i=Un.r,n=Un.g,r=Un.b,s=Math.max(i,n,r),a=Math.min(i,n,r);let o,l;const c=(a+s)/2;if(a===s)o=0,l=0;else{const t=s-a;switch(l=c<=.5?t/(s+a):t/(2-s-a),s){case i:o=(n-r)/t+(n0&&(t.userData=this.userData),void 0!==this.parameters){const e=this.parameters;for(const i in e)void 0!==e[i]&&(t[i]=e[i]);return t}t.data={attributes:{}};const e=this.index;null!==e&&(t.data.index={type:e.array.constructor.name,array:Array.prototype.slice.call(e.array)});const i=this.attributes;for(const e in i){const n=i[e];t.data.attributes[e]=n.toJSON(t.data)}const n={};let r=!1;for(const e in this.morphAttributes){const i=this.morphAttributes[e],s=[];for(let e=0,n=i.length;e0&&(n[e]=s,r=!0)}r&&(t.data.morphAttributes=n,t.data.morphTargetsRelative=this.morphTargetsRelative);const s=this.groups;s.length>0&&(t.data.groups=JSON.parse(JSON.stringify(s)));const a=this.boundingSphere;return null!==a&&(t.data.boundingSphere={center:a.center.toArray(),radius:a.radius}),t}clone(){return(new this.constructor).copy(this)}copy(t){this.index=null,this.attributes={},this.morphAttributes={},this.groups=[],this.boundingBox=null,this.boundingSphere=null;const e={};this.name=t.name;const i=t.index;null!==i&&this.setIndex(i.clone(e));const n=t.attributes;for(const t in n){const i=n[t];this.setAttribute(t,i.clone(e))}const r=t.morphAttributes;for(const t in r){const i=[],n=r[t];for(let t=0,r=n.length;t0){const i=t[e[0]];if(void 0!==i){this.morphTargetInfluences=[],this.morphTargetDictionary={};for(let t=0,e=i.length;t(t.far-t.near)**2)return}if(Qn.copy(r).invert(),tr.copy(t.ray).applyMatrix4(Qn),null!==i.boundingBox&&!1===tr.intersectsBox(i.boundingBox))return;let s;const a=i.index,o=i.attributes.position,l=i.attributes.uv,c=i.attributes.uv2,h=i.groups,u=i.drawRange;if(null!==a)if(Array.isArray(n))for(let i=0,r=h.length;ii.far?null:{distance:u,point:dr.clone(),object:t}}(t,e,i,n,nr,rr,sr,ur);if(u){r&&(lr.fromBufferAttribute(r,a),cr.fromBufferAttribute(r,o),hr.fromBufferAttribute(r,h),u.uv=Ln.getUV(ur,nr,rr,sr,lr,cr,hr,new We)),s&&(lr.fromBufferAttribute(s,a),cr.fromBufferAttribute(s,o),hr.fromBufferAttribute(s,h),u.uv2=Ln.getUV(ur,nr,rr,sr,lr,cr,hr,new We));const t={a:a,b:o,c:h,normal:new $e,materialIndex:0};Ln.getNormal(nr,rr,sr,t.normal),u.face=t}return u}class fr extends $n{constructor(t=1,e=1,i=1,n=1,r=1,s=1){super(),this.type="BoxGeometry",this.parameters={width:t,height:e,depth:i,widthSegments:n,heightSegments:r,depthSegments:s};const a=this;n=Math.floor(n),r=Math.floor(r),s=Math.floor(s);const o=[],l=[],c=[],h=[];let u=0,d=0;function p(t,e,i,n,r,s,p,m,f,g,v){const x=s/f,_=p/g,y=s/2,M=p/2,b=m/2,S=f+1,w=g+1;let T=0,A=0;const E=new $e;for(let s=0;s0?1:-1,c.push(E.x,E.y,E.z),h.push(o/f),h.push(1-s/g),T+=1}}for(let t=0;t0&&(e.defines=this.defines),e.vertexShader=this.vertexShader,e.fragmentShader=this.fragmentShader;const i={};for(const t in this.extensions)!0===this.extensions[t]&&(i[t]=!0);return Object.keys(i).length>0&&(e.extensions=i),e}}class Mr extends xn{constructor(){super(),this.isCamera=!0,this.type="Camera",this.matrixWorldInverse=new qi,this.projectionMatrix=new qi,this.projectionMatrixInverse=new qi}copy(t,e){return super.copy(t,e),this.matrixWorldInverse.copy(t.matrixWorldInverse),this.projectionMatrix.copy(t.projectionMatrix),this.projectionMatrixInverse.copy(t.projectionMatrixInverse),this}getWorldDirection(t){this.updateWorldMatrix(!0,!1);const e=this.matrixWorld.elements;return t.set(-e[8],-e[9],-e[10]).normalize()}updateMatrixWorld(t){super.updateMatrixWorld(t),this.matrixWorldInverse.copy(this.matrixWorld).invert()}updateWorldMatrix(t,e){super.updateWorldMatrix(t,e),this.matrixWorldInverse.copy(this.matrixWorld).invert()}clone(){return(new this.constructor).copy(this)}}class br extends Mr{constructor(t=50,e=1,i=.1,n=2e3){super(),this.isPerspectiveCamera=!0,this.type="PerspectiveCamera",this.fov=t,this.zoom=1,this.near=i,this.far=n,this.focus=10,this.aspect=e,this.view=null,this.filmGauge=35,this.filmOffset=0,this.updateProjectionMatrix()}copy(t,e){return super.copy(t,e),this.fov=t.fov,this.zoom=t.zoom,this.near=t.near,this.far=t.far,this.focus=t.focus,this.aspect=t.aspect,this.view=null===t.view?null:Object.assign({},t.view),this.filmGauge=t.filmGauge,this.filmOffset=t.filmOffset,this}setFocalLength(t){const e=.5*this.getFilmHeight()/t;this.fov=2*De*Math.atan(e),this.updateProjectionMatrix()}getFocalLength(){const t=Math.tan(.5*Ie*this.fov);return.5*this.getFilmHeight()/t}getEffectiveFOV(){return 2*De*Math.atan(Math.tan(.5*Ie*this.fov)/this.zoom)}getFilmWidth(){return this.filmGauge*Math.min(this.aspect,1)}getFilmHeight(){return this.filmGauge/Math.max(this.aspect,1)}setViewOffset(t,e,i,n,r,s){this.aspect=t/e,null===this.view&&(this.view={enabled:!0,fullWidth:1,fullHeight:1,offsetX:0,offsetY:0,width:1,height:1}),this.view.enabled=!0,this.view.fullWidth=t,this.view.fullHeight=e,this.view.offsetX=i,this.view.offsetY=n,this.view.width=r,this.view.height=s,this.updateProjectionMatrix()}clearViewOffset(){null!==this.view&&(this.view.enabled=!1),this.updateProjectionMatrix()}updateProjectionMatrix(){const t=this.near;let e=t*Math.tan(.5*Ie*this.fov)/this.zoom,i=2*e,n=this.aspect*i,r=-.5*n;const s=this.view;if(null!==this.view&&this.view.enabled){const t=s.fullWidth,a=s.fullHeight;r+=s.offsetX*n/t,e-=s.offsetY*i/a,n*=s.width/t,i*=s.height/a}const a=this.filmOffset;0!==a&&(r+=t*a/this.getFilmWidth()),this.projectionMatrix.makePerspective(r,r+n,e,e-i,t,this.far),this.projectionMatrixInverse.copy(this.projectionMatrix).invert()}toJSON(t){const e=super.toJSON(t);return e.object.fov=this.fov,e.object.zoom=this.zoom,e.object.near=this.near,e.object.far=this.far,e.object.focus=this.focus,e.object.aspect=this.aspect,null!==this.view&&(e.object.view=Object.assign({},this.view)),e.object.filmGauge=this.filmGauge,e.object.filmOffset=this.filmOffset,e}}const Sr=-90;class wr extends xn{constructor(t,e,i){super(),this.type="CubeCamera",this.renderTarget=i;const n=new br(Sr,1,t,e);n.layers=this.layers,n.up.set(0,1,0),n.lookAt(1,0,0),this.add(n);const r=new br(Sr,1,t,e);r.layers=this.layers,r.up.set(0,1,0),r.lookAt(-1,0,0),this.add(r);const s=new br(Sr,1,t,e);s.layers=this.layers,s.up.set(0,0,-1),s.lookAt(0,1,0),this.add(s);const a=new br(Sr,1,t,e);a.layers=this.layers,a.up.set(0,0,1),a.lookAt(0,-1,0),this.add(a);const o=new br(Sr,1,t,e);o.layers=this.layers,o.up.set(0,1,0),o.lookAt(0,0,1),this.add(o);const l=new br(Sr,1,t,e);l.layers=this.layers,l.up.set(0,1,0),l.lookAt(0,0,-1),this.add(l)}update(t,e){null===this.parent&&this.updateMatrixWorld();const i=this.renderTarget,[n,r,s,a,o,l]=this.children,c=t.getRenderTarget(),h=t.toneMapping,u=t.xr.enabled;t.toneMapping=W,t.xr.enabled=!1;const d=i.texture.generateMipmaps;i.texture.generateMipmaps=!1,t.setRenderTarget(i,0),t.render(e,n),t.setRenderTarget(i,1),t.render(e,r),t.setRenderTarget(i,2),t.render(e,s),t.setRenderTarget(i,3),t.render(e,a),t.setRenderTarget(i,4),t.render(e,o),i.texture.generateMipmaps=d,t.setRenderTarget(i,5),t.render(e,l),t.setRenderTarget(c),t.toneMapping=h,t.xr.enabled=u,i.texture.needsPMREMUpdate=!0}}class Tr extends mi{constructor(t,e,i,n,r,s,a,o,l,c){super(t=void 0!==t?t:[],e=void 0!==e?e:K,i,n,r,s,a,o,l,c),this.isCubeTexture=!0,this.flipY=!1}get images(){return this.image}set images(t){this.image=t}}class Ar extends gi{constructor(t=1,e={}){super(t,t,e),this.isWebGLCubeRenderTarget=!0;const i={width:t,height:t,depth:1},n=[i,i,i,i,i,i];this.texture=new Tr(n,e.mapping,e.wrapS,e.wrapT,e.magFilter,e.minFilter,e.format,e.type,e.anisotropy,e.encoding),this.texture.isRenderTargetTexture=!0,this.texture.generateMipmaps=void 0!==e.generateMipmaps&&e.generateMipmaps,this.texture.minFilter=void 0!==e.minFilter?e.minFilter:lt}fromEquirectangularTexture(t,e){this.texture.type=e.type,this.texture.encoding=e.encoding,this.texture.generateMipmaps=e.generateMipmaps,this.texture.minFilter=e.minFilter,this.texture.magFilter=e.magFilter;const i={uniforms:{tEquirect:{value:null}},vertexShader:"\n\n\t\t\t\tvarying vec3 vWorldDirection;\n\n\t\t\t\tvec3 transformDirection( in vec3 dir, in mat4 matrix ) {\n\n\t\t\t\t\treturn normalize( ( matrix * vec4( dir, 0.0 ) ).xyz );\n\n\t\t\t\t}\n\n\t\t\t\tvoid main() {\n\n\t\t\t\t\tvWorldDirection = transformDirection( position, modelMatrix );\n\n\t\t\t\t\t#include \n\t\t\t\t\t#include \n\n\t\t\t\t}\n\t\t\t",fragmentShader:"\n\n\t\t\t\tuniform sampler2D tEquirect;\n\n\t\t\t\tvarying vec3 vWorldDirection;\n\n\t\t\t\t#include \n\n\t\t\t\tvoid main() {\n\n\t\t\t\t\tvec3 direction = normalize( vWorldDirection );\n\n\t\t\t\t\tvec2 sampleUV = equirectUv( direction );\n\n\t\t\t\t\tgl_FragColor = texture2D( tEquirect, sampleUV );\n\n\t\t\t\t}\n\t\t\t"},n=new fr(5,5,5),r=new yr({name:"CubemapFromEquirect",uniforms:gr(i.uniforms),vertexShader:i.vertexShader,fragmentShader:i.fragmentShader,side:c,blending:u});r.uniforms.tEquirect.value=e;const s=new pr(n,r),a=e.minFilter;e.minFilter===ht&&(e.minFilter=lt);return new wr(1,10,this).update(t,s),e.minFilter=a,s.geometry.dispose(),s.material.dispose(),this}clear(t,e,i,n){const r=t.getRenderTarget();for(let r=0;r<6;r++)t.setRenderTarget(this,r),t.clear(e,i,n);t.setRenderTarget(r)}}const Er=new $e,Cr=new $e,Lr=new je;class Rr{constructor(t=new $e(1,0,0),e=0){this.isPlane=!0,this.normal=t,this.constant=e}set(t,e){return this.normal.copy(t),this.constant=e,this}setComponents(t,e,i,n){return this.normal.set(t,e,i),this.constant=n,this}setFromNormalAndCoplanarPoint(t,e){return this.normal.copy(t),this.constant=-e.dot(this.normal),this}setFromCoplanarPoints(t,e,i){const n=Er.subVectors(i,e).cross(Cr.subVectors(t,e)).normalize();return this.setFromNormalAndCoplanarPoint(n,t),this}copy(t){return this.normal.copy(t.normal),this.constant=t.constant,this}normalize(){const t=1/this.normal.length();return this.normal.multiplyScalar(t),this.constant*=t,this}negate(){return this.constant*=-1,this.normal.negate(),this}distanceToPoint(t){return this.normal.dot(t)+this.constant}distanceToSphere(t){return this.distanceToPoint(t.center)-t.radius}projectPoint(t,e){return e.copy(t).addScaledVector(this.normal,-this.distanceToPoint(t))}intersectLine(t,e){const i=t.delta(Er),n=this.normal.dot(i);if(0===n)return 0===this.distanceToPoint(t.start)?e.copy(t.start):null;const r=-(t.start.dot(this.normal)+this.constant)/n;return r<0||r>1?null:e.copy(t.start).addScaledVector(i,r)}intersectsLine(t){const e=this.distanceToPoint(t.start),i=this.distanceToPoint(t.end);return e<0&&i>0||i<0&&e>0}intersectsBox(t){return t.intersectsPlane(this)}intersectsSphere(t){return t.intersectsPlane(this)}coplanarPoint(t){return t.copy(this.normal).multiplyScalar(-this.constant)}applyMatrix4(t,e){const i=e||Lr.getNormalMatrix(t),n=this.coplanarPoint(Er).applyMatrix4(t),r=this.normal.applyMatrix3(i).normalize();return this.constant=-n.dot(r),this}translate(t){return this.constant-=t.dot(this.normal),this}equals(t){return t.normal.equals(this.normal)&&t.constant===this.constant}clone(){return(new this.constructor).copy(this)}}const Pr=new Ui,Ir=new $e;class Dr{constructor(t=new Rr,e=new Rr,i=new Rr,n=new Rr,r=new Rr,s=new Rr){this.planes=[t,e,i,n,r,s]}set(t,e,i,n,r,s){const a=this.planes;return a[0].copy(t),a[1].copy(e),a[2].copy(i),a[3].copy(n),a[4].copy(r),a[5].copy(s),this}copy(t){const e=this.planes;for(let i=0;i<6;i++)e[i].copy(t.planes[i]);return this}setFromProjectionMatrix(t){const e=this.planes,i=t.elements,n=i[0],r=i[1],s=i[2],a=i[3],o=i[4],l=i[5],c=i[6],h=i[7],u=i[8],d=i[9],p=i[10],m=i[11],f=i[12],g=i[13],v=i[14],x=i[15];return e[0].setComponents(a-n,h-o,m-u,x-f).normalize(),e[1].setComponents(a+n,h+o,m+u,x+f).normalize(),e[2].setComponents(a+r,h+l,m+d,x+g).normalize(),e[3].setComponents(a-r,h-l,m-d,x-g).normalize(),e[4].setComponents(a-s,h-c,m-p,x-v).normalize(),e[5].setComponents(a+s,h+c,m+p,x+v).normalize(),this}intersectsObject(t){const e=t.geometry;return null===e.boundingSphere&&e.computeBoundingSphere(),Pr.copy(e.boundingSphere).applyMatrix4(t.matrixWorld),this.intersectsSphere(Pr)}intersectsSprite(t){return Pr.center.set(0,0,0),Pr.radius=.7071067811865476,Pr.applyMatrix4(t.matrixWorld),this.intersectsSphere(Pr)}intersectsSphere(t){const e=this.planes,i=t.center,n=-t.radius;for(let t=0;t<6;t++){if(e[t].distanceToPoint(i)0?t.max.x:t.min.x,Ir.y=n.normal.y>0?t.max.y:t.min.y,Ir.z=n.normal.z>0?t.max.z:t.min.z,n.distanceToPoint(Ir)<0)return!1}return!0}containsPoint(t){const e=this.planes;for(let i=0;i<6;i++)if(e[i].distanceToPoint(t)<0)return!1;return!0}clone(){return(new this.constructor).copy(this)}}function Nr(){let t=null,e=!1,i=null,n=null;function r(e,s){i(e,s),n=t.requestAnimationFrame(r)}return{start:function(){!0!==e&&null!==i&&(n=t.requestAnimationFrame(r),e=!0)},stop:function(){t.cancelAnimationFrame(n),e=!1},setAnimationLoop:function(t){i=t},setContext:function(e){t=e}}}function Or(t,e){const i=e.isWebGL2,n=new WeakMap;return{get:function(t){return t.isInterleavedBufferAttribute&&(t=t.data),n.get(t)},remove:function(e){e.isInterleavedBufferAttribute&&(e=e.data);const i=n.get(e);i&&(t.deleteBuffer(i.buffer),n.delete(e))},update:function(e,r){if(e.isGLBufferAttribute){const t=n.get(e);return void((!t||t.version 0.0 ) ? v : 0.5 * inversesqrt( max( 1.0 - x * x, 1e-7 ) ) - v;\n\treturn cross( v1, v2 ) * theta_sintheta;\n}\nvec3 LTC_Evaluate( const in vec3 N, const in vec3 V, const in vec3 P, const in mat3 mInv, const in vec3 rectCoords[ 4 ] ) {\n\tvec3 v1 = rectCoords[ 1 ] - rectCoords[ 0 ];\n\tvec3 v2 = rectCoords[ 3 ] - rectCoords[ 0 ];\n\tvec3 lightNormal = cross( v1, v2 );\n\tif( dot( lightNormal, P - rectCoords[ 0 ] ) < 0.0 ) return vec3( 0.0 );\n\tvec3 T1, T2;\n\tT1 = normalize( V - N * dot( V, N ) );\n\tT2 = - cross( N, T1 );\n\tmat3 mat = mInv * transposeMat3( mat3( T1, T2, N ) );\n\tvec3 coords[ 4 ];\n\tcoords[ 0 ] = mat * ( rectCoords[ 0 ] - P );\n\tcoords[ 1 ] = mat * ( rectCoords[ 1 ] - P );\n\tcoords[ 2 ] = mat * ( rectCoords[ 2 ] - P );\n\tcoords[ 3 ] = mat * ( rectCoords[ 3 ] - P );\n\tcoords[ 0 ] = normalize( coords[ 0 ] );\n\tcoords[ 1 ] = normalize( coords[ 1 ] );\n\tcoords[ 2 ] = normalize( coords[ 2 ] );\n\tcoords[ 3 ] = normalize( coords[ 3 ] );\n\tvec3 vectorFormFactor = vec3( 0.0 );\n\tvectorFormFactor += LTC_EdgeVectorFormFactor( coords[ 0 ], coords[ 1 ] );\n\tvectorFormFactor += LTC_EdgeVectorFormFactor( coords[ 1 ], coords[ 2 ] );\n\tvectorFormFactor += LTC_EdgeVectorFormFactor( coords[ 2 ], coords[ 3 ] );\n\tvectorFormFactor += LTC_EdgeVectorFormFactor( coords[ 3 ], coords[ 0 ] );\n\tfloat result = LTC_ClippedSphereFormFactor( vectorFormFactor );\n\treturn vec3( result );\n}\nfloat G_BlinnPhong_Implicit( ) {\n\treturn 0.25;\n}\nfloat D_BlinnPhong( const in float shininess, const in float dotNH ) {\n\treturn RECIPROCAL_PI * ( shininess * 0.5 + 1.0 ) * pow( dotNH, shininess );\n}\nvec3 BRDF_BlinnPhong( const in vec3 lightDir, const in vec3 viewDir, const in vec3 normal, const in vec3 specularColor, const in float shininess ) {\n\tvec3 halfDir = normalize( lightDir + viewDir );\n\tfloat dotNH = saturate( dot( normal, halfDir ) );\n\tfloat dotVH = saturate( dot( viewDir, halfDir ) );\n\tvec3 F = F_Schlick( specularColor, 1.0, dotVH );\n\tfloat G = G_BlinnPhong_Implicit( );\n\tfloat D = D_BlinnPhong( shininess, dotNH );\n\treturn F * ( G * D );\n}\n#if defined( USE_SHEEN )\nfloat D_Charlie( float roughness, float dotNH ) {\n\tfloat alpha = pow2( roughness );\n\tfloat invAlpha = 1.0 / alpha;\n\tfloat cos2h = dotNH * dotNH;\n\tfloat sin2h = max( 1.0 - cos2h, 0.0078125 );\n\treturn ( 2.0 + invAlpha ) * pow( sin2h, invAlpha * 0.5 ) / ( 2.0 * PI );\n}\nfloat V_Neubelt( float dotNV, float dotNL ) {\n\treturn saturate( 1.0 / ( 4.0 * ( dotNL + dotNV - dotNL * dotNV ) ) );\n}\nvec3 BRDF_Sheen( const in vec3 lightDir, const in vec3 viewDir, const in vec3 normal, vec3 sheenColor, const in float sheenRoughness ) {\n\tvec3 halfDir = normalize( lightDir + viewDir );\n\tfloat dotNL = saturate( dot( normal, lightDir ) );\n\tfloat dotNV = saturate( dot( normal, viewDir ) );\n\tfloat dotNH = saturate( dot( normal, halfDir ) );\n\tfloat D = D_Charlie( sheenRoughness, dotNH );\n\tfloat V = V_Neubelt( dotNV, dotNL );\n\treturn sheenColor * ( D * V );\n}\n#endif",iridescence_fragment:"#ifdef USE_IRIDESCENCE\n\tconst mat3 XYZ_TO_REC709 = mat3(\n\t\t 3.2404542, -0.9692660, 0.0556434,\n\t\t-1.5371385, 1.8760108, -0.2040259,\n\t\t-0.4985314, 0.0415560, 1.0572252\n\t);\n\tvec3 Fresnel0ToIor( vec3 fresnel0 ) {\n\t\tvec3 sqrtF0 = sqrt( fresnel0 );\n\t\treturn ( vec3( 1.0 ) + sqrtF0 ) / ( vec3( 1.0 ) - sqrtF0 );\n\t}\n\tvec3 IorToFresnel0( vec3 transmittedIor, float incidentIor ) {\n\t\treturn pow2( ( transmittedIor - vec3( incidentIor ) ) / ( transmittedIor + vec3( incidentIor ) ) );\n\t}\n\tfloat IorToFresnel0( float transmittedIor, float incidentIor ) {\n\t\treturn pow2( ( transmittedIor - incidentIor ) / ( transmittedIor + incidentIor ));\n\t}\n\tvec3 evalSensitivity( float OPD, vec3 shift ) {\n\t\tfloat phase = 2.0 * PI * OPD * 1.0e-9;\n\t\tvec3 val = vec3( 5.4856e-13, 4.4201e-13, 5.2481e-13 );\n\t\tvec3 pos = vec3( 1.6810e+06, 1.7953e+06, 2.2084e+06 );\n\t\tvec3 var = vec3( 4.3278e+09, 9.3046e+09, 6.6121e+09 );\n\t\tvec3 xyz = val * sqrt( 2.0 * PI * var ) * cos( pos * phase + shift ) * exp( - pow2( phase ) * var );\n\t\txyz.x += 9.7470e-14 * sqrt( 2.0 * PI * 4.5282e+09 ) * cos( 2.2399e+06 * phase + shift[ 0 ] ) * exp( - 4.5282e+09 * pow2( phase ) );\n\t\txyz /= 1.0685e-7;\n\t\tvec3 rgb = XYZ_TO_REC709 * xyz;\n\t\treturn rgb;\n\t}\n\tvec3 evalIridescence( float outsideIOR, float eta2, float cosTheta1, float thinFilmThickness, vec3 baseF0 ) {\n\t\tvec3 I;\n\t\tfloat iridescenceIOR = mix( outsideIOR, eta2, smoothstep( 0.0, 0.03, thinFilmThickness ) );\n\t\tfloat sinTheta2Sq = pow2( outsideIOR / iridescenceIOR ) * ( 1.0 - pow2( cosTheta1 ) );\n\t\tfloat cosTheta2Sq = 1.0 - sinTheta2Sq;\n\t\tif ( cosTheta2Sq < 0.0 ) {\n\t\t\t return vec3( 1.0 );\n\t\t}\n\t\tfloat cosTheta2 = sqrt( cosTheta2Sq );\n\t\tfloat R0 = IorToFresnel0( iridescenceIOR, outsideIOR );\n\t\tfloat R12 = F_Schlick( R0, 1.0, cosTheta1 );\n\t\tfloat R21 = R12;\n\t\tfloat T121 = 1.0 - R12;\n\t\tfloat phi12 = 0.0;\n\t\tif ( iridescenceIOR < outsideIOR ) phi12 = PI;\n\t\tfloat phi21 = PI - phi12;\n\t\tvec3 baseIOR = Fresnel0ToIor( clamp( baseF0, 0.0, 0.9999 ) );\t\tvec3 R1 = IorToFresnel0( baseIOR, iridescenceIOR );\n\t\tvec3 R23 = F_Schlick( R1, 1.0, cosTheta2 );\n\t\tvec3 phi23 = vec3( 0.0 );\n\t\tif ( baseIOR[ 0 ] < iridescenceIOR ) phi23[ 0 ] = PI;\n\t\tif ( baseIOR[ 1 ] < iridescenceIOR ) phi23[ 1 ] = PI;\n\t\tif ( baseIOR[ 2 ] < iridescenceIOR ) phi23[ 2 ] = PI;\n\t\tfloat OPD = 2.0 * iridescenceIOR * thinFilmThickness * cosTheta2;\n\t\tvec3 phi = vec3( phi21 ) + phi23;\n\t\tvec3 R123 = clamp( R12 * R23, 1e-5, 0.9999 );\n\t\tvec3 r123 = sqrt( R123 );\n\t\tvec3 Rs = pow2( T121 ) * R23 / ( vec3( 1.0 ) - R123 );\n\t\tvec3 C0 = R12 + Rs;\n\t\tI = C0;\n\t\tvec3 Cm = Rs - T121;\n\t\tfor ( int m = 1; m <= 2; ++ m ) {\n\t\t\tCm *= r123;\n\t\t\tvec3 Sm = 2.0 * evalSensitivity( float( m ) * OPD, float( m ) * phi );\n\t\t\tI += Cm * Sm;\n\t\t}\n\t\treturn max( I, vec3( 0.0 ) );\n\t}\n#endif",bumpmap_pars_fragment:"#ifdef USE_BUMPMAP\n\tuniform sampler2D bumpMap;\n\tuniform float bumpScale;\n\tvec2 dHdxy_fwd() {\n\t\tvec2 dSTdx = dFdx( vUv );\n\t\tvec2 dSTdy = dFdy( vUv );\n\t\tfloat Hll = bumpScale * texture2D( bumpMap, vUv ).x;\n\t\tfloat dBx = bumpScale * texture2D( bumpMap, vUv + dSTdx ).x - Hll;\n\t\tfloat dBy = bumpScale * texture2D( bumpMap, vUv + dSTdy ).x - Hll;\n\t\treturn vec2( dBx, dBy );\n\t}\n\tvec3 perturbNormalArb( vec3 surf_pos, vec3 surf_norm, vec2 dHdxy, float faceDirection ) {\n\t\tvec3 vSigmaX = dFdx( surf_pos.xyz );\n\t\tvec3 vSigmaY = dFdy( surf_pos.xyz );\n\t\tvec3 vN = surf_norm;\n\t\tvec3 R1 = cross( vSigmaY, vN );\n\t\tvec3 R2 = cross( vN, vSigmaX );\n\t\tfloat fDet = dot( vSigmaX, R1 ) * faceDirection;\n\t\tvec3 vGrad = sign( fDet ) * ( dHdxy.x * R1 + dHdxy.y * R2 );\n\t\treturn normalize( abs( fDet ) * surf_norm - vGrad );\n\t}\n#endif",clipping_planes_fragment:"#if NUM_CLIPPING_PLANES > 0\n\tvec4 plane;\n\t#pragma unroll_loop_start\n\tfor ( int i = 0; i < UNION_CLIPPING_PLANES; i ++ ) {\n\t\tplane = clippingPlanes[ i ];\n\t\tif ( dot( vClipPosition, plane.xyz ) > plane.w ) discard;\n\t}\n\t#pragma unroll_loop_end\n\t#if UNION_CLIPPING_PLANES < NUM_CLIPPING_PLANES\n\t\tbool clipped = true;\n\t\t#pragma unroll_loop_start\n\t\tfor ( int i = UNION_CLIPPING_PLANES; i < NUM_CLIPPING_PLANES; i ++ ) {\n\t\t\tplane = clippingPlanes[ i ];\n\t\t\tclipped = ( dot( vClipPosition, plane.xyz ) > plane.w ) && clipped;\n\t\t}\n\t\t#pragma unroll_loop_end\n\t\tif ( clipped ) discard;\n\t#endif\n#endif",clipping_planes_pars_fragment:"#if NUM_CLIPPING_PLANES > 0\n\tvarying vec3 vClipPosition;\n\tuniform vec4 clippingPlanes[ NUM_CLIPPING_PLANES ];\n#endif",clipping_planes_pars_vertex:"#if NUM_CLIPPING_PLANES > 0\n\tvarying vec3 vClipPosition;\n#endif",clipping_planes_vertex:"#if NUM_CLIPPING_PLANES > 0\n\tvClipPosition = - mvPosition.xyz;\n#endif",color_fragment:"#if defined( USE_COLOR_ALPHA )\n\tdiffuseColor *= vColor;\n#elif defined( USE_COLOR )\n\tdiffuseColor.rgb *= vColor;\n#endif",color_pars_fragment:"#if defined( USE_COLOR_ALPHA )\n\tvarying vec4 vColor;\n#elif defined( USE_COLOR )\n\tvarying vec3 vColor;\n#endif",color_pars_vertex:"#if defined( USE_COLOR_ALPHA )\n\tvarying vec4 vColor;\n#elif defined( USE_COLOR ) || defined( USE_INSTANCING_COLOR )\n\tvarying vec3 vColor;\n#endif",color_vertex:"#if defined( USE_COLOR_ALPHA )\n\tvColor = vec4( 1.0 );\n#elif defined( USE_COLOR ) || defined( USE_INSTANCING_COLOR )\n\tvColor = vec3( 1.0 );\n#endif\n#ifdef USE_COLOR\n\tvColor *= color;\n#endif\n#ifdef USE_INSTANCING_COLOR\n\tvColor.xyz *= instanceColor.xyz;\n#endif",common:"#define PI 3.141592653589793\n#define PI2 6.283185307179586\n#define PI_HALF 1.5707963267948966\n#define RECIPROCAL_PI 0.3183098861837907\n#define RECIPROCAL_PI2 0.15915494309189535\n#define EPSILON 1e-6\n#ifndef saturate\n#define saturate( a ) clamp( a, 0.0, 1.0 )\n#endif\n#define whiteComplement( a ) ( 1.0 - saturate( a ) )\nfloat pow2( const in float x ) { return x*x; }\nvec3 pow2( const in vec3 x ) { return x*x; }\nfloat pow3( const in float x ) { return x*x*x; }\nfloat pow4( const in float x ) { float x2 = x*x; return x2*x2; }\nfloat max3( const in vec3 v ) { return max( max( v.x, v.y ), v.z ); }\nfloat average( const in vec3 v ) { return dot( v, vec3( 0.3333333 ) ); }\nhighp float rand( const in vec2 uv ) {\n\tconst highp float a = 12.9898, b = 78.233, c = 43758.5453;\n\thighp float dt = dot( uv.xy, vec2( a,b ) ), sn = mod( dt, PI );\n\treturn fract( sin( sn ) * c );\n}\n#ifdef HIGH_PRECISION\n\tfloat precisionSafeLength( vec3 v ) { return length( v ); }\n#else\n\tfloat precisionSafeLength( vec3 v ) {\n\t\tfloat maxComponent = max3( abs( v ) );\n\t\treturn length( v / maxComponent ) * maxComponent;\n\t}\n#endif\nstruct IncidentLight {\n\tvec3 color;\n\tvec3 direction;\n\tbool visible;\n};\nstruct ReflectedLight {\n\tvec3 directDiffuse;\n\tvec3 directSpecular;\n\tvec3 indirectDiffuse;\n\tvec3 indirectSpecular;\n};\nstruct GeometricContext {\n\tvec3 position;\n\tvec3 normal;\n\tvec3 viewDir;\n#ifdef USE_CLEARCOAT\n\tvec3 clearcoatNormal;\n#endif\n};\nvec3 transformDirection( in vec3 dir, in mat4 matrix ) {\n\treturn normalize( ( matrix * vec4( dir, 0.0 ) ).xyz );\n}\nvec3 inverseTransformDirection( in vec3 dir, in mat4 matrix ) {\n\treturn normalize( ( vec4( dir, 0.0 ) * matrix ).xyz );\n}\nmat3 transposeMat3( const in mat3 m ) {\n\tmat3 tmp;\n\ttmp[ 0 ] = vec3( m[ 0 ].x, m[ 1 ].x, m[ 2 ].x );\n\ttmp[ 1 ] = vec3( m[ 0 ].y, m[ 1 ].y, m[ 2 ].y );\n\ttmp[ 2 ] = vec3( m[ 0 ].z, m[ 1 ].z, m[ 2 ].z );\n\treturn tmp;\n}\nfloat luminance( const in vec3 rgb ) {\n\tconst vec3 weights = vec3( 0.2126729, 0.7151522, 0.0721750 );\n\treturn dot( weights, rgb );\n}\nbool isPerspectiveMatrix( mat4 m ) {\n\treturn m[ 2 ][ 3 ] == - 1.0;\n}\nvec2 equirectUv( in vec3 dir ) {\n\tfloat u = atan( dir.z, dir.x ) * RECIPROCAL_PI2 + 0.5;\n\tfloat v = asin( clamp( dir.y, - 1.0, 1.0 ) ) * RECIPROCAL_PI + 0.5;\n\treturn vec2( u, v );\n}\nfloat w0( float a ) {\n\treturn ( 1.0 / 6.0 ) * ( a * ( a * ( - a + 3.0 ) - 3.0 ) + 1.0 );\n}\nfloat w1( float a ) {\n\treturn ( 1.0 / 6.0 ) * ( a * a * ( 3.0 * a - 6.0 ) + 4.0 );\n}\nfloat w2( float a ){\n return ( 1.0 / 6.0 ) * ( a * ( a * ( - 3.0 * a + 3.0 ) + 3.0 ) + 1.0 );\n}\nfloat w3( float a ) {\n\treturn ( 1.0 / 6.0 ) * ( a * a * a );\n}\nfloat g0( float a ) {\n\treturn w0( a ) + w1( a );\n}\nfloat g1( float a ) {\n\treturn w2( a ) + w3( a );\n}\nfloat h0( float a ) {\n\treturn - 1.0 + w1( a ) / ( w0( a ) + w1( a ) );\n}\nfloat h1( float a ) {\n return 1.0 + w3( a ) / ( w2( a ) + w3( a ) );\n}\nvec4 bicubic( sampler2D tex, vec2 uv, vec4 texelSize, vec2 fullSize, float lod ) {\n\tuv = uv * texelSize.zw + 0.5;\n\tvec2 iuv = floor( uv );\n vec2 fuv = fract( uv );\n float g0x = g0( fuv.x );\n float g1x = g1( fuv.x );\n float h0x = h0( fuv.x );\n float h1x = h1( fuv.x );\n float h0y = h0( fuv.y );\n float h1y = h1( fuv.y );\n vec2 p0 = ( vec2( iuv.x + h0x, iuv.y + h0y ) - 0.5 ) * texelSize.xy;\n vec2 p1 = ( vec2( iuv.x + h1x, iuv.y + h0y ) - 0.5 ) * texelSize.xy;\n vec2 p2 = ( vec2( iuv.x + h0x, iuv.y + h1y ) - 0.5 ) * texelSize.xy;\n vec2 p3 = ( vec2( iuv.x + h1x, iuv.y + h1y ) - 0.5 ) * texelSize.xy;\n \n vec2 lodFudge = pow( 1.95, lod ) / fullSize;\n\treturn g0( fuv.y ) * ( g0x * textureLod( tex, p0, lod ) + g1x * textureLod( tex, p1, lod ) ) +\n\t\t g1( fuv.y ) * ( g0x * textureLod( tex, p2, lod ) + g1x * textureLod( tex, p3, lod ) );\n}\nvec4 textureBicubic( sampler2D sampler, vec2 uv, float lod ) {\n\tvec2 fLodSize = vec2( textureSize( sampler, int( lod ) ) );\n\tvec2 cLodSize = vec2( textureSize( sampler, int( lod + 1.0 ) ) );\n\tvec2 fLodSizeInv = 1.0 / fLodSize;\n\tvec2 cLodSizeInv = 1.0 / cLodSize;\n\tvec2 fullSize = vec2( textureSize( sampler, 0 ) );\n\tvec4 fSample = bicubic( sampler, uv, vec4( fLodSizeInv, fLodSize ), fullSize, floor( lod ) );\n\tvec4 cSample = bicubic( sampler, uv, vec4( cLodSizeInv, cLodSize ), fullSize, ceil( lod ) );\n\treturn mix( fSample, cSample, fract( lod ) );\n}",cube_uv_reflection_fragment:"#ifdef ENVMAP_TYPE_CUBE_UV\n\t#define cubeUV_minMipLevel 4.0\n\t#define cubeUV_minTileSize 16.0\n\tfloat getFace( vec3 direction ) {\n\t\tvec3 absDirection = abs( direction );\n\t\tfloat face = - 1.0;\n\t\tif ( absDirection.x > absDirection.z ) {\n\t\t\tif ( absDirection.x > absDirection.y )\n\t\t\t\tface = direction.x > 0.0 ? 0.0 : 3.0;\n\t\t\telse\n\t\t\t\tface = direction.y > 0.0 ? 1.0 : 4.0;\n\t\t} else {\n\t\t\tif ( absDirection.z > absDirection.y )\n\t\t\t\tface = direction.z > 0.0 ? 2.0 : 5.0;\n\t\t\telse\n\t\t\t\tface = direction.y > 0.0 ? 1.0 : 4.0;\n\t\t}\n\t\treturn face;\n\t}\n\tvec2 getUV( vec3 direction, float face ) {\n\t\tvec2 uv;\n\t\tif ( face == 0.0 ) {\n\t\t\tuv = vec2( direction.z, direction.y ) / abs( direction.x );\n\t\t} else if ( face == 1.0 ) {\n\t\t\tuv = vec2( - direction.x, - direction.z ) / abs( direction.y );\n\t\t} else if ( face == 2.0 ) {\n\t\t\tuv = vec2( - direction.x, direction.y ) / abs( direction.z );\n\t\t} else if ( face == 3.0 ) {\n\t\t\tuv = vec2( - direction.z, direction.y ) / abs( direction.x );\n\t\t} else if ( face == 4.0 ) {\n\t\t\tuv = vec2( - direction.x, direction.z ) / abs( direction.y );\n\t\t} else {\n\t\t\tuv = vec2( direction.x, direction.y ) / abs( direction.z );\n\t\t}\n\t\treturn 0.5 * ( uv + 1.0 );\n\t}\n\tvec3 bilinearCubeUV( sampler2D envMap, vec3 direction, float mipInt ) {\n\t\tfloat face = getFace( direction );\n\t\tfloat filterInt = max( cubeUV_minMipLevel - mipInt, 0.0 );\n\t\tmipInt = max( mipInt, cubeUV_minMipLevel );\n\t\tfloat faceSize = exp2( mipInt );\n\t\thighp vec2 uv = getUV( direction, face ) * ( faceSize - 2.0 ) + 1.0;\n\t\tif ( face > 2.0 ) {\n\t\t\tuv.y += faceSize;\n\t\t\tface -= 3.0;\n\t\t}\n\t\tuv.x += face * faceSize;\n\t\tuv.x += filterInt * 3.0 * cubeUV_minTileSize;\n\t\tuv.y += 4.0 * ( exp2( CUBEUV_MAX_MIP ) - faceSize );\n\t\tuv.x *= CUBEUV_TEXEL_WIDTH;\n\t\tuv.y *= CUBEUV_TEXEL_HEIGHT;\n\t\t#ifdef texture2DGradEXT\n\t\t\treturn texture2DGradEXT( envMap, uv, vec2( 0.0 ), vec2( 0.0 ) ).rgb;\n\t\t#else\n\t\t\treturn texture2D( envMap, uv ).rgb;\n\t\t#endif\n\t}\n\t#define cubeUV_r0 1.0\n\t#define cubeUV_v0 0.339\n\t#define cubeUV_m0 - 2.0\n\t#define cubeUV_r1 0.8\n\t#define cubeUV_v1 0.276\n\t#define cubeUV_m1 - 1.0\n\t#define cubeUV_r4 0.4\n\t#define cubeUV_v4 0.046\n\t#define cubeUV_m4 2.0\n\t#define cubeUV_r5 0.305\n\t#define cubeUV_v5 0.016\n\t#define cubeUV_m5 3.0\n\t#define cubeUV_r6 0.21\n\t#define cubeUV_v6 0.0038\n\t#define cubeUV_m6 4.0\n\tfloat roughnessToMip( float roughness ) {\n\t\tfloat mip = 0.0;\n\t\tif ( roughness >= cubeUV_r1 ) {\n\t\t\tmip = ( cubeUV_r0 - roughness ) * ( cubeUV_m1 - cubeUV_m0 ) / ( cubeUV_r0 - cubeUV_r1 ) + cubeUV_m0;\n\t\t} else if ( roughness >= cubeUV_r4 ) {\n\t\t\tmip = ( cubeUV_r1 - roughness ) * ( cubeUV_m4 - cubeUV_m1 ) / ( cubeUV_r1 - cubeUV_r4 ) + cubeUV_m1;\n\t\t} else if ( roughness >= cubeUV_r5 ) {\n\t\t\tmip = ( cubeUV_r4 - roughness ) * ( cubeUV_m5 - cubeUV_m4 ) / ( cubeUV_r4 - cubeUV_r5 ) + cubeUV_m4;\n\t\t} else if ( roughness >= cubeUV_r6 ) {\n\t\t\tmip = ( cubeUV_r5 - roughness ) * ( cubeUV_m6 - cubeUV_m5 ) / ( cubeUV_r5 - cubeUV_r6 ) + cubeUV_m5;\n\t\t} else {\n\t\t\tmip = - 2.0 * log2( 1.16 * roughness );\t\t}\n\t\treturn mip;\n\t}\n\tvec4 textureCubeUV( sampler2D envMap, vec3 sampleDir, float roughness ) {\n\t\tfloat mip = clamp( roughnessToMip( roughness ), cubeUV_m0, CUBEUV_MAX_MIP );\n\t\tfloat mipF = fract( mip );\n\t\tfloat mipInt = floor( mip );\n\t\tvec3 color0 = bilinearCubeUV( envMap, sampleDir, mipInt );\n\t\tif ( mipF == 0.0 ) {\n\t\t\treturn vec4( color0, 1.0 );\n\t\t} else {\n\t\t\tvec3 color1 = bilinearCubeUV( envMap, sampleDir, mipInt + 1.0 );\n\t\t\treturn vec4( mix( color0, color1, mipF ), 1.0 );\n\t\t}\n\t}\n#endif",defaultnormal_vertex:"vec3 transformedNormal = objectNormal;\n#ifdef USE_INSTANCING\n\tmat3 m = mat3( instanceMatrix );\n\ttransformedNormal /= vec3( dot( m[ 0 ], m[ 0 ] ), dot( m[ 1 ], m[ 1 ] ), dot( m[ 2 ], m[ 2 ] ) );\n\ttransformedNormal = m * transformedNormal;\n#endif\ntransformedNormal = normalMatrix * transformedNormal;\n#ifdef FLIP_SIDED\n\ttransformedNormal = - transformedNormal;\n#endif\n#ifdef USE_TANGENT\n\tvec3 transformedTangent = ( modelViewMatrix * vec4( objectTangent, 0.0 ) ).xyz;\n\t#ifdef FLIP_SIDED\n\t\ttransformedTangent = - transformedTangent;\n\t#endif\n#endif",displacementmap_pars_vertex:"#ifdef USE_DISPLACEMENTMAP\n\tuniform sampler2D displacementMap;\n\tuniform float displacementScale;\n\tuniform float displacementBias;\n#endif",displacementmap_vertex:"#ifdef USE_DISPLACEMENTMAP\n\ttransformed += normalize( objectNormal ) * ( texture2D( displacementMap, vUv ).x * displacementScale + displacementBias );\n#endif",emissivemap_fragment:"#ifdef USE_EMISSIVEMAP\n\tvec4 emissiveColor = texture2D( emissiveMap, vUv );\n\ttotalEmissiveRadiance *= emissiveColor.rgb;\n#endif",emissivemap_pars_fragment:"#ifdef USE_EMISSIVEMAP\n\tuniform sampler2D emissiveMap;\n#endif",encodings_fragment:"gl_FragColor = linearToOutputTexel( gl_FragColor );",encodings_pars_fragment:"vec4 LinearToLinear( in vec4 value ) {\n\treturn value;\n}\nvec4 LinearTosRGB( in vec4 value ) {\n\treturn vec4( mix( pow( value.rgb, vec3( 0.41666 ) ) * 1.055 - vec3( 0.055 ), value.rgb * 12.92, vec3( lessThanEqual( value.rgb, vec3( 0.0031308 ) ) ) ), value.a );\n}",envmap_fragment:"#ifdef USE_ENVMAP\n\t#ifdef ENV_WORLDPOS\n\t\tvec3 cameraToFrag;\n\t\tif ( isOrthographic ) {\n\t\t\tcameraToFrag = normalize( vec3( - viewMatrix[ 0 ][ 2 ], - viewMatrix[ 1 ][ 2 ], - viewMatrix[ 2 ][ 2 ] ) );\n\t\t} else {\n\t\t\tcameraToFrag = normalize( vWorldPosition - cameraPosition );\n\t\t}\n\t\tvec3 worldNormal = inverseTransformDirection( normal, viewMatrix );\n\t\t#ifdef ENVMAP_MODE_REFLECTION\n\t\t\tvec3 reflectVec = reflect( cameraToFrag, worldNormal );\n\t\t#else\n\t\t\tvec3 reflectVec = refract( cameraToFrag, worldNormal, refractionRatio );\n\t\t#endif\n\t#else\n\t\tvec3 reflectVec = vReflect;\n\t#endif\n\t#ifdef ENVMAP_TYPE_CUBE\n\t\tvec4 envColor = textureCube( envMap, vec3( flipEnvMap * reflectVec.x, reflectVec.yz ) );\n\t#else\n\t\tvec4 envColor = vec4( 0.0 );\n\t#endif\n\t#ifdef ENVMAP_BLENDING_MULTIPLY\n\t\toutgoingLight = mix( outgoingLight, outgoingLight * envColor.xyz, specularStrength * reflectivity );\n\t#elif defined( ENVMAP_BLENDING_MIX )\n\t\toutgoingLight = mix( outgoingLight, envColor.xyz, specularStrength * reflectivity );\n\t#elif defined( ENVMAP_BLENDING_ADD )\n\t\toutgoingLight += envColor.xyz * specularStrength * reflectivity;\n\t#endif\n#endif",envmap_common_pars_fragment:"#ifdef USE_ENVMAP\n\tuniform float envMapIntensity;\n\tuniform float flipEnvMap;\n\t#ifdef ENVMAP_TYPE_CUBE\n\t\tuniform samplerCube envMap;\n\t#else\n\t\tuniform sampler2D envMap;\n\t#endif\n\t\n#endif",envmap_pars_fragment:"#ifdef USE_ENVMAP\n\tuniform float reflectivity;\n\t#if defined( USE_BUMPMAP ) || defined( USE_NORMALMAP ) || defined( PHONG ) || defined( LAMBERT )\n\t\t#define ENV_WORLDPOS\n\t#endif\n\t#ifdef ENV_WORLDPOS\n\t\tvarying vec3 vWorldPosition;\n\t\tuniform float refractionRatio;\n\t#else\n\t\tvarying vec3 vReflect;\n\t#endif\n#endif",envmap_pars_vertex:"#ifdef USE_ENVMAP\n\t#if defined( USE_BUMPMAP ) || defined( USE_NORMALMAP ) || defined( PHONG ) || defined( LAMBERT )\n\t\t#define ENV_WORLDPOS\n\t#endif\n\t#ifdef ENV_WORLDPOS\n\t\t\n\t\tvarying vec3 vWorldPosition;\n\t#else\n\t\tvarying vec3 vReflect;\n\t\tuniform float refractionRatio;\n\t#endif\n#endif",envmap_physical_pars_fragment:"#if defined( USE_ENVMAP )\n\tvec3 getIBLIrradiance( const in vec3 normal ) {\n\t\t#if defined( ENVMAP_TYPE_CUBE_UV )\n\t\t\tvec3 worldNormal = inverseTransformDirection( normal, viewMatrix );\n\t\t\tvec4 envMapColor = textureCubeUV( envMap, worldNormal, 1.0 );\n\t\t\treturn PI * envMapColor.rgb * envMapIntensity;\n\t\t#else\n\t\t\treturn vec3( 0.0 );\n\t\t#endif\n\t}\n\tvec3 getIBLRadiance( const in vec3 viewDir, const in vec3 normal, const in float roughness ) {\n\t\t#if defined( ENVMAP_TYPE_CUBE_UV )\n\t\t\tvec3 reflectVec = reflect( - viewDir, normal );\n\t\t\treflectVec = normalize( mix( reflectVec, normal, roughness * roughness) );\n\t\t\treflectVec = inverseTransformDirection( reflectVec, viewMatrix );\n\t\t\tvec4 envMapColor = textureCubeUV( envMap, reflectVec, roughness );\n\t\t\treturn envMapColor.rgb * envMapIntensity;\n\t\t#else\n\t\t\treturn vec3( 0.0 );\n\t\t#endif\n\t}\n#endif",envmap_vertex:"#ifdef USE_ENVMAP\n\t#ifdef ENV_WORLDPOS\n\t\tvWorldPosition = worldPosition.xyz;\n\t#else\n\t\tvec3 cameraToVertex;\n\t\tif ( isOrthographic ) {\n\t\t\tcameraToVertex = normalize( vec3( - viewMatrix[ 0 ][ 2 ], - viewMatrix[ 1 ][ 2 ], - viewMatrix[ 2 ][ 2 ] ) );\n\t\t} else {\n\t\t\tcameraToVertex = normalize( worldPosition.xyz - cameraPosition );\n\t\t}\n\t\tvec3 worldNormal = inverseTransformDirection( transformedNormal, viewMatrix );\n\t\t#ifdef ENVMAP_MODE_REFLECTION\n\t\t\tvReflect = reflect( cameraToVertex, worldNormal );\n\t\t#else\n\t\t\tvReflect = refract( cameraToVertex, worldNormal, refractionRatio );\n\t\t#endif\n\t#endif\n#endif",fog_vertex:"#ifdef USE_FOG\n\tvFogDepth = - mvPosition.z;\n#endif",fog_pars_vertex:"#ifdef USE_FOG\n\tvarying float vFogDepth;\n#endif",fog_fragment:"#ifdef USE_FOG\n\t#ifdef FOG_EXP2\n\t\tfloat fogFactor = 1.0 - exp( - fogDensity * fogDensity * vFogDepth * vFogDepth );\n\t#else\n\t\tfloat fogFactor = smoothstep( fogNear, fogFar, vFogDepth );\n\t#endif\n\tgl_FragColor.rgb = mix( gl_FragColor.rgb, fogColor, fogFactor );\n#endif",fog_pars_fragment:"#ifdef USE_FOG\n\tuniform vec3 fogColor;\n\tvarying float vFogDepth;\n\t#ifdef FOG_EXP2\n\t\tuniform float fogDensity;\n\t#else\n\t\tuniform float fogNear;\n\t\tuniform float fogFar;\n\t#endif\n#endif",gradientmap_pars_fragment:"#ifdef USE_GRADIENTMAP\n\tuniform sampler2D gradientMap;\n#endif\nvec3 getGradientIrradiance( vec3 normal, vec3 lightDirection ) {\n\tfloat dotNL = dot( normal, lightDirection );\n\tvec2 coord = vec2( dotNL * 0.5 + 0.5, 0.0 );\n\t#ifdef USE_GRADIENTMAP\n\t\treturn vec3( texture2D( gradientMap, coord ).r );\n\t#else\n\t\tvec2 fw = fwidth( coord ) * 0.5;\n\t\treturn mix( vec3( 0.7 ), vec3( 1.0 ), smoothstep( 0.7 - fw.x, 0.7 + fw.x, coord.x ) );\n\t#endif\n}",lightmap_fragment:"#ifdef USE_LIGHTMAP\n\tvec4 lightMapTexel = texture2D( lightMap, vUv2 );\n\tvec3 lightMapIrradiance = lightMapTexel.rgb * lightMapIntensity;\n\treflectedLight.indirectDiffuse += lightMapIrradiance;\n#endif",lightmap_pars_fragment:"#ifdef USE_LIGHTMAP\n\tuniform sampler2D lightMap;\n\tuniform float lightMapIntensity;\n#endif",lights_lambert_fragment:"LambertMaterial material;\nmaterial.diffuseColor = diffuseColor.rgb;\nmaterial.specularStrength = specularStrength;",lights_lambert_pars_fragment:"varying vec3 vViewPosition;\nstruct LambertMaterial {\n\tvec3 diffuseColor;\n\tfloat specularStrength;\n};\nvoid RE_Direct_Lambert( const in IncidentLight directLight, const in GeometricContext geometry, const in LambertMaterial material, inout ReflectedLight reflectedLight ) {\n\tfloat dotNL = saturate( dot( geometry.normal, directLight.direction ) );\n\tvec3 irradiance = dotNL * directLight.color;\n\treflectedLight.directDiffuse += irradiance * BRDF_Lambert( material.diffuseColor );\n}\nvoid RE_IndirectDiffuse_Lambert( const in vec3 irradiance, const in GeometricContext geometry, const in LambertMaterial material, inout ReflectedLight reflectedLight ) {\n\treflectedLight.indirectDiffuse += irradiance * BRDF_Lambert( material.diffuseColor );\n}\n#define RE_Direct\t\t\t\tRE_Direct_Lambert\n#define RE_IndirectDiffuse\t\tRE_IndirectDiffuse_Lambert",lights_pars_begin:"uniform bool receiveShadow;\nuniform vec3 ambientLightColor;\nuniform vec3 lightProbe[ 9 ];\nvec3 shGetIrradianceAt( in vec3 normal, in vec3 shCoefficients[ 9 ] ) {\n\tfloat x = normal.x, y = normal.y, z = normal.z;\n\tvec3 result = shCoefficients[ 0 ] * 0.886227;\n\tresult += shCoefficients[ 1 ] * 2.0 * 0.511664 * y;\n\tresult += shCoefficients[ 2 ] * 2.0 * 0.511664 * z;\n\tresult += shCoefficients[ 3 ] * 2.0 * 0.511664 * x;\n\tresult += shCoefficients[ 4 ] * 2.0 * 0.429043 * x * y;\n\tresult += shCoefficients[ 5 ] * 2.0 * 0.429043 * y * z;\n\tresult += shCoefficients[ 6 ] * ( 0.743125 * z * z - 0.247708 );\n\tresult += shCoefficients[ 7 ] * 2.0 * 0.429043 * x * z;\n\tresult += shCoefficients[ 8 ] * 0.429043 * ( x * x - y * y );\n\treturn result;\n}\nvec3 getLightProbeIrradiance( const in vec3 lightProbe[ 9 ], const in vec3 normal ) {\n\tvec3 worldNormal = inverseTransformDirection( normal, viewMatrix );\n\tvec3 irradiance = shGetIrradianceAt( worldNormal, lightProbe );\n\treturn irradiance;\n}\nvec3 getAmbientLightIrradiance( const in vec3 ambientLightColor ) {\n\tvec3 irradiance = ambientLightColor;\n\treturn irradiance;\n}\nfloat getDistanceAttenuation( const in float lightDistance, const in float cutoffDistance, const in float decayExponent ) {\n\t#if defined ( LEGACY_LIGHTS )\n\t\tif ( cutoffDistance > 0.0 && decayExponent > 0.0 ) {\n\t\t\treturn pow( saturate( - lightDistance / cutoffDistance + 1.0 ), decayExponent );\n\t\t}\n\t\treturn 1.0;\n\t#else\n\t\tfloat distanceFalloff = 1.0 / max( pow( lightDistance, decayExponent ), 0.01 );\n\t\tif ( cutoffDistance > 0.0 ) {\n\t\t\tdistanceFalloff *= pow2( saturate( 1.0 - pow4( lightDistance / cutoffDistance ) ) );\n\t\t}\n\t\treturn distanceFalloff;\n\t#endif\n}\nfloat getSpotAttenuation( const in float coneCosine, const in float penumbraCosine, const in float angleCosine ) {\n\treturn smoothstep( coneCosine, penumbraCosine, angleCosine );\n}\n#if NUM_DIR_LIGHTS > 0\n\tstruct DirectionalLight {\n\t\tvec3 direction;\n\t\tvec3 color;\n\t};\n\tuniform DirectionalLight directionalLights[ NUM_DIR_LIGHTS ];\n\tvoid getDirectionalLightInfo( const in DirectionalLight directionalLight, const in GeometricContext geometry, out IncidentLight light ) {\n\t\tlight.color = directionalLight.color;\n\t\tlight.direction = directionalLight.direction;\n\t\tlight.visible = true;\n\t}\n#endif\n#if NUM_POINT_LIGHTS > 0\n\tstruct PointLight {\n\t\tvec3 position;\n\t\tvec3 color;\n\t\tfloat distance;\n\t\tfloat decay;\n\t};\n\tuniform PointLight pointLights[ NUM_POINT_LIGHTS ];\n\tvoid getPointLightInfo( const in PointLight pointLight, const in GeometricContext geometry, out IncidentLight light ) {\n\t\tvec3 lVector = pointLight.position - geometry.position;\n\t\tlight.direction = normalize( lVector );\n\t\tfloat lightDistance = length( lVector );\n\t\tlight.color = pointLight.color;\n\t\tlight.color *= getDistanceAttenuation( lightDistance, pointLight.distance, pointLight.decay );\n\t\tlight.visible = ( light.color != vec3( 0.0 ) );\n\t}\n#endif\n#if NUM_SPOT_LIGHTS > 0\n\tstruct SpotLight {\n\t\tvec3 position;\n\t\tvec3 direction;\n\t\tvec3 color;\n\t\tfloat distance;\n\t\tfloat decay;\n\t\tfloat coneCos;\n\t\tfloat penumbraCos;\n\t};\n\tuniform SpotLight spotLights[ NUM_SPOT_LIGHTS ];\n\tvoid getSpotLightInfo( const in SpotLight spotLight, const in GeometricContext geometry, out IncidentLight light ) {\n\t\tvec3 lVector = spotLight.position - geometry.position;\n\t\tlight.direction = normalize( lVector );\n\t\tfloat angleCos = dot( light.direction, spotLight.direction );\n\t\tfloat spotAttenuation = getSpotAttenuation( spotLight.coneCos, spotLight.penumbraCos, angleCos );\n\t\tif ( spotAttenuation > 0.0 ) {\n\t\t\tfloat lightDistance = length( lVector );\n\t\t\tlight.color = spotLight.color * spotAttenuation;\n\t\t\tlight.color *= getDistanceAttenuation( lightDistance, spotLight.distance, spotLight.decay );\n\t\t\tlight.visible = ( light.color != vec3( 0.0 ) );\n\t\t} else {\n\t\t\tlight.color = vec3( 0.0 );\n\t\t\tlight.visible = false;\n\t\t}\n\t}\n#endif\n#if NUM_RECT_AREA_LIGHTS > 0\n\tstruct RectAreaLight {\n\t\tvec3 color;\n\t\tvec3 position;\n\t\tvec3 halfWidth;\n\t\tvec3 halfHeight;\n\t};\n\tuniform sampler2D ltc_1;\tuniform sampler2D ltc_2;\n\tuniform RectAreaLight rectAreaLights[ NUM_RECT_AREA_LIGHTS ];\n#endif\n#if NUM_HEMI_LIGHTS > 0\n\tstruct HemisphereLight {\n\t\tvec3 direction;\n\t\tvec3 skyColor;\n\t\tvec3 groundColor;\n\t};\n\tuniform HemisphereLight hemisphereLights[ NUM_HEMI_LIGHTS ];\n\tvec3 getHemisphereLightIrradiance( const in HemisphereLight hemiLight, const in vec3 normal ) {\n\t\tfloat dotNL = dot( normal, hemiLight.direction );\n\t\tfloat hemiDiffuseWeight = 0.5 * dotNL + 0.5;\n\t\tvec3 irradiance = mix( hemiLight.groundColor, hemiLight.skyColor, hemiDiffuseWeight );\n\t\treturn irradiance;\n\t}\n#endif",lights_toon_fragment:"ToonMaterial material;\nmaterial.diffuseColor = diffuseColor.rgb;",lights_toon_pars_fragment:"varying vec3 vViewPosition;\nstruct ToonMaterial {\n\tvec3 diffuseColor;\n};\nvoid RE_Direct_Toon( const in IncidentLight directLight, const in GeometricContext geometry, const in ToonMaterial material, inout ReflectedLight reflectedLight ) {\n\tvec3 irradiance = getGradientIrradiance( geometry.normal, directLight.direction ) * directLight.color;\n\treflectedLight.directDiffuse += irradiance * BRDF_Lambert( material.diffuseColor );\n}\nvoid RE_IndirectDiffuse_Toon( const in vec3 irradiance, const in GeometricContext geometry, const in ToonMaterial material, inout ReflectedLight reflectedLight ) {\n\treflectedLight.indirectDiffuse += irradiance * BRDF_Lambert( material.diffuseColor );\n}\n#define RE_Direct\t\t\t\tRE_Direct_Toon\n#define RE_IndirectDiffuse\t\tRE_IndirectDiffuse_Toon",lights_phong_fragment:"BlinnPhongMaterial material;\nmaterial.diffuseColor = diffuseColor.rgb;\nmaterial.specularColor = specular;\nmaterial.specularShininess = shininess;\nmaterial.specularStrength = specularStrength;",lights_phong_pars_fragment:"varying vec3 vViewPosition;\nstruct BlinnPhongMaterial {\n\tvec3 diffuseColor;\n\tvec3 specularColor;\n\tfloat specularShininess;\n\tfloat specularStrength;\n};\nvoid RE_Direct_BlinnPhong( const in IncidentLight directLight, const in GeometricContext geometry, const in BlinnPhongMaterial material, inout ReflectedLight reflectedLight ) {\n\tfloat dotNL = saturate( dot( geometry.normal, directLight.direction ) );\n\tvec3 irradiance = dotNL * directLight.color;\n\treflectedLight.directDiffuse += irradiance * BRDF_Lambert( material.diffuseColor );\n\treflectedLight.directSpecular += irradiance * BRDF_BlinnPhong( directLight.direction, geometry.viewDir, geometry.normal, material.specularColor, material.specularShininess ) * material.specularStrength;\n}\nvoid RE_IndirectDiffuse_BlinnPhong( const in vec3 irradiance, const in GeometricContext geometry, const in BlinnPhongMaterial material, inout ReflectedLight reflectedLight ) {\n\treflectedLight.indirectDiffuse += irradiance * BRDF_Lambert( material.diffuseColor );\n}\n#define RE_Direct\t\t\t\tRE_Direct_BlinnPhong\n#define RE_IndirectDiffuse\t\tRE_IndirectDiffuse_BlinnPhong",lights_physical_fragment:"PhysicalMaterial material;\nmaterial.diffuseColor = diffuseColor.rgb * ( 1.0 - metalnessFactor );\nvec3 dxy = max( abs( dFdx( geometryNormal ) ), abs( dFdy( geometryNormal ) ) );\nfloat geometryRoughness = max( max( dxy.x, dxy.y ), dxy.z );\nmaterial.roughness = max( roughnessFactor, 0.0525 );material.roughness += geometryRoughness;\nmaterial.roughness = min( material.roughness, 1.0 );\n#ifdef IOR\n\tmaterial.ior = ior;\n\t#ifdef SPECULAR\n\t\tfloat specularIntensityFactor = specularIntensity;\n\t\tvec3 specularColorFactor = specularColor;\n\t\t#ifdef USE_SPECULARINTENSITYMAP\n\t\t\tspecularIntensityFactor *= texture2D( specularIntensityMap, vUv ).a;\n\t\t#endif\n\t\t#ifdef USE_SPECULARCOLORMAP\n\t\t\tspecularColorFactor *= texture2D( specularColorMap, vUv ).rgb;\n\t\t#endif\n\t\tmaterial.specularF90 = mix( specularIntensityFactor, 1.0, metalnessFactor );\n\t#else\n\t\tfloat specularIntensityFactor = 1.0;\n\t\tvec3 specularColorFactor = vec3( 1.0 );\n\t\tmaterial.specularF90 = 1.0;\n\t#endif\n\tmaterial.specularColor = mix( min( pow2( ( material.ior - 1.0 ) / ( material.ior + 1.0 ) ) * specularColorFactor, vec3( 1.0 ) ) * specularIntensityFactor, diffuseColor.rgb, metalnessFactor );\n#else\n\tmaterial.specularColor = mix( vec3( 0.04 ), diffuseColor.rgb, metalnessFactor );\n\tmaterial.specularF90 = 1.0;\n#endif\n#ifdef USE_CLEARCOAT\n\tmaterial.clearcoat = clearcoat;\n\tmaterial.clearcoatRoughness = clearcoatRoughness;\n\tmaterial.clearcoatF0 = vec3( 0.04 );\n\tmaterial.clearcoatF90 = 1.0;\n\t#ifdef USE_CLEARCOATMAP\n\t\tmaterial.clearcoat *= texture2D( clearcoatMap, vUv ).x;\n\t#endif\n\t#ifdef USE_CLEARCOAT_ROUGHNESSMAP\n\t\tmaterial.clearcoatRoughness *= texture2D( clearcoatRoughnessMap, vUv ).y;\n\t#endif\n\tmaterial.clearcoat = saturate( material.clearcoat );\tmaterial.clearcoatRoughness = max( material.clearcoatRoughness, 0.0525 );\n\tmaterial.clearcoatRoughness += geometryRoughness;\n\tmaterial.clearcoatRoughness = min( material.clearcoatRoughness, 1.0 );\n#endif\n#ifdef USE_IRIDESCENCE\n\tmaterial.iridescence = iridescence;\n\tmaterial.iridescenceIOR = iridescenceIOR;\n\t#ifdef USE_IRIDESCENCEMAP\n\t\tmaterial.iridescence *= texture2D( iridescenceMap, vUv ).r;\n\t#endif\n\t#ifdef USE_IRIDESCENCE_THICKNESSMAP\n\t\tmaterial.iridescenceThickness = (iridescenceThicknessMaximum - iridescenceThicknessMinimum) * texture2D( iridescenceThicknessMap, vUv ).g + iridescenceThicknessMinimum;\n\t#else\n\t\tmaterial.iridescenceThickness = iridescenceThicknessMaximum;\n\t#endif\n#endif\n#ifdef USE_SHEEN\n\tmaterial.sheenColor = sheenColor;\n\t#ifdef USE_SHEENCOLORMAP\n\t\tmaterial.sheenColor *= texture2D( sheenColorMap, vUv ).rgb;\n\t#endif\n\tmaterial.sheenRoughness = clamp( sheenRoughness, 0.07, 1.0 );\n\t#ifdef USE_SHEENROUGHNESSMAP\n\t\tmaterial.sheenRoughness *= texture2D( sheenRoughnessMap, vUv ).a;\n\t#endif\n#endif",lights_physical_pars_fragment:"struct PhysicalMaterial {\n\tvec3 diffuseColor;\n\tfloat roughness;\n\tvec3 specularColor;\n\tfloat specularF90;\n\t#ifdef USE_CLEARCOAT\n\t\tfloat clearcoat;\n\t\tfloat clearcoatRoughness;\n\t\tvec3 clearcoatF0;\n\t\tfloat clearcoatF90;\n\t#endif\n\t#ifdef USE_IRIDESCENCE\n\t\tfloat iridescence;\n\t\tfloat iridescenceIOR;\n\t\tfloat iridescenceThickness;\n\t\tvec3 iridescenceFresnel;\n\t\tvec3 iridescenceF0;\n\t#endif\n\t#ifdef USE_SHEEN\n\t\tvec3 sheenColor;\n\t\tfloat sheenRoughness;\n\t#endif\n\t#ifdef IOR\n\t\tfloat ior;\n\t#endif\n\t#ifdef USE_TRANSMISSION\n\t\tfloat transmission;\n\t\tfloat transmissionAlpha;\n\t\tfloat thickness;\n\t\tfloat attenuationDistance;\n\t\tvec3 attenuationColor;\n\t#endif\n};\nvec3 clearcoatSpecular = vec3( 0.0 );\nvec3 sheenSpecular = vec3( 0.0 );\nfloat IBLSheenBRDF( const in vec3 normal, const in vec3 viewDir, const in float roughness ) {\n\tfloat dotNV = saturate( dot( normal, viewDir ) );\n\tfloat r2 = roughness * roughness;\n\tfloat a = roughness < 0.25 ? -339.2 * r2 + 161.4 * roughness - 25.9 : -8.48 * r2 + 14.3 * roughness - 9.95;\n\tfloat b = roughness < 0.25 ? 44.0 * r2 - 23.7 * roughness + 3.26 : 1.97 * r2 - 3.27 * roughness + 0.72;\n\tfloat DG = exp( a * dotNV + b ) + ( roughness < 0.25 ? 0.0 : 0.1 * ( roughness - 0.25 ) );\n\treturn saturate( DG * RECIPROCAL_PI );\n}\nvec2 DFGApprox( const in vec3 normal, const in vec3 viewDir, const in float roughness ) {\n\tfloat dotNV = saturate( dot( normal, viewDir ) );\n\tconst vec4 c0 = vec4( - 1, - 0.0275, - 0.572, 0.022 );\n\tconst vec4 c1 = vec4( 1, 0.0425, 1.04, - 0.04 );\n\tvec4 r = roughness * c0 + c1;\n\tfloat a004 = min( r.x * r.x, exp2( - 9.28 * dotNV ) ) * r.x + r.y;\n\tvec2 fab = vec2( - 1.04, 1.04 ) * a004 + r.zw;\n\treturn fab;\n}\nvec3 EnvironmentBRDF( const in vec3 normal, const in vec3 viewDir, const in vec3 specularColor, const in float specularF90, const in float roughness ) {\n\tvec2 fab = DFGApprox( normal, viewDir, roughness );\n\treturn specularColor * fab.x + specularF90 * fab.y;\n}\n#ifdef USE_IRIDESCENCE\nvoid computeMultiscatteringIridescence( const in vec3 normal, const in vec3 viewDir, const in vec3 specularColor, const in float specularF90, const in float iridescence, const in vec3 iridescenceF0, const in float roughness, inout vec3 singleScatter, inout vec3 multiScatter ) {\n#else\nvoid computeMultiscattering( const in vec3 normal, const in vec3 viewDir, const in vec3 specularColor, const in float specularF90, const in float roughness, inout vec3 singleScatter, inout vec3 multiScatter ) {\n#endif\n\tvec2 fab = DFGApprox( normal, viewDir, roughness );\n\t#ifdef USE_IRIDESCENCE\n\t\tvec3 Fr = mix( specularColor, iridescenceF0, iridescence );\n\t#else\n\t\tvec3 Fr = specularColor;\n\t#endif\n\tvec3 FssEss = Fr * fab.x + specularF90 * fab.y;\n\tfloat Ess = fab.x + fab.y;\n\tfloat Ems = 1.0 - Ess;\n\tvec3 Favg = Fr + ( 1.0 - Fr ) * 0.047619;\tvec3 Fms = FssEss * Favg / ( 1.0 - Ems * Favg );\n\tsingleScatter += FssEss;\n\tmultiScatter += Fms * Ems;\n}\n#if NUM_RECT_AREA_LIGHTS > 0\n\tvoid RE_Direct_RectArea_Physical( const in RectAreaLight rectAreaLight, const in GeometricContext geometry, const in PhysicalMaterial material, inout ReflectedLight reflectedLight ) {\n\t\tvec3 normal = geometry.normal;\n\t\tvec3 viewDir = geometry.viewDir;\n\t\tvec3 position = geometry.position;\n\t\tvec3 lightPos = rectAreaLight.position;\n\t\tvec3 halfWidth = rectAreaLight.halfWidth;\n\t\tvec3 halfHeight = rectAreaLight.halfHeight;\n\t\tvec3 lightColor = rectAreaLight.color;\n\t\tfloat roughness = material.roughness;\n\t\tvec3 rectCoords[ 4 ];\n\t\trectCoords[ 0 ] = lightPos + halfWidth - halfHeight;\t\trectCoords[ 1 ] = lightPos - halfWidth - halfHeight;\n\t\trectCoords[ 2 ] = lightPos - halfWidth + halfHeight;\n\t\trectCoords[ 3 ] = lightPos + halfWidth + halfHeight;\n\t\tvec2 uv = LTC_Uv( normal, viewDir, roughness );\n\t\tvec4 t1 = texture2D( ltc_1, uv );\n\t\tvec4 t2 = texture2D( ltc_2, uv );\n\t\tmat3 mInv = mat3(\n\t\t\tvec3( t1.x, 0, t1.y ),\n\t\t\tvec3( 0, 1, 0 ),\n\t\t\tvec3( t1.z, 0, t1.w )\n\t\t);\n\t\tvec3 fresnel = ( material.specularColor * t2.x + ( vec3( 1.0 ) - material.specularColor ) * t2.y );\n\t\treflectedLight.directSpecular += lightColor * fresnel * LTC_Evaluate( normal, viewDir, position, mInv, rectCoords );\n\t\treflectedLight.directDiffuse += lightColor * material.diffuseColor * LTC_Evaluate( normal, viewDir, position, mat3( 1.0 ), rectCoords );\n\t}\n#endif\nvoid RE_Direct_Physical( const in IncidentLight directLight, const in GeometricContext geometry, const in PhysicalMaterial material, inout ReflectedLight reflectedLight ) {\n\tfloat dotNL = saturate( dot( geometry.normal, directLight.direction ) );\n\tvec3 irradiance = dotNL * directLight.color;\n\t#ifdef USE_CLEARCOAT\n\t\tfloat dotNLcc = saturate( dot( geometry.clearcoatNormal, directLight.direction ) );\n\t\tvec3 ccIrradiance = dotNLcc * directLight.color;\n\t\tclearcoatSpecular += ccIrradiance * BRDF_GGX( directLight.direction, geometry.viewDir, geometry.clearcoatNormal, material.clearcoatF0, material.clearcoatF90, material.clearcoatRoughness );\n\t#endif\n\t#ifdef USE_SHEEN\n\t\tsheenSpecular += irradiance * BRDF_Sheen( directLight.direction, geometry.viewDir, geometry.normal, material.sheenColor, material.sheenRoughness );\n\t#endif\n\t#ifdef USE_IRIDESCENCE\n\t\treflectedLight.directSpecular += irradiance * BRDF_GGX_Iridescence( directLight.direction, geometry.viewDir, geometry.normal, material.specularColor, material.specularF90, material.iridescence, material.iridescenceFresnel, material.roughness );\n\t#else\n\t\treflectedLight.directSpecular += irradiance * BRDF_GGX( directLight.direction, geometry.viewDir, geometry.normal, material.specularColor, material.specularF90, material.roughness );\n\t#endif\n\treflectedLight.directDiffuse += irradiance * BRDF_Lambert( material.diffuseColor );\n}\nvoid RE_IndirectDiffuse_Physical( const in vec3 irradiance, const in GeometricContext geometry, const in PhysicalMaterial material, inout ReflectedLight reflectedLight ) {\n\treflectedLight.indirectDiffuse += irradiance * BRDF_Lambert( material.diffuseColor );\n}\nvoid RE_IndirectSpecular_Physical( const in vec3 radiance, const in vec3 irradiance, const in vec3 clearcoatRadiance, const in GeometricContext geometry, const in PhysicalMaterial material, inout ReflectedLight reflectedLight) {\n\t#ifdef USE_CLEARCOAT\n\t\tclearcoatSpecular += clearcoatRadiance * EnvironmentBRDF( geometry.clearcoatNormal, geometry.viewDir, material.clearcoatF0, material.clearcoatF90, material.clearcoatRoughness );\n\t#endif\n\t#ifdef USE_SHEEN\n\t\tsheenSpecular += irradiance * material.sheenColor * IBLSheenBRDF( geometry.normal, geometry.viewDir, material.sheenRoughness );\n\t#endif\n\tvec3 singleScattering = vec3( 0.0 );\n\tvec3 multiScattering = vec3( 0.0 );\n\tvec3 cosineWeightedIrradiance = irradiance * RECIPROCAL_PI;\n\t#ifdef USE_IRIDESCENCE\n\t\tcomputeMultiscatteringIridescence( geometry.normal, geometry.viewDir, material.specularColor, material.specularF90, material.iridescence, material.iridescenceFresnel, material.roughness, singleScattering, multiScattering );\n\t#else\n\t\tcomputeMultiscattering( geometry.normal, geometry.viewDir, material.specularColor, material.specularF90, material.roughness, singleScattering, multiScattering );\n\t#endif\n\tvec3 totalScattering = singleScattering + multiScattering;\n\tvec3 diffuse = material.diffuseColor * ( 1.0 - max( max( totalScattering.r, totalScattering.g ), totalScattering.b ) );\n\treflectedLight.indirectSpecular += radiance * singleScattering;\n\treflectedLight.indirectSpecular += multiScattering * cosineWeightedIrradiance;\n\treflectedLight.indirectDiffuse += diffuse * cosineWeightedIrradiance;\n}\n#define RE_Direct\t\t\t\tRE_Direct_Physical\n#define RE_Direct_RectArea\t\tRE_Direct_RectArea_Physical\n#define RE_IndirectDiffuse\t\tRE_IndirectDiffuse_Physical\n#define RE_IndirectSpecular\t\tRE_IndirectSpecular_Physical\nfloat computeSpecularOcclusion( const in float dotNV, const in float ambientOcclusion, const in float roughness ) {\n\treturn saturate( pow( dotNV + ambientOcclusion, exp2( - 16.0 * roughness - 1.0 ) ) - 1.0 + ambientOcclusion );\n}",lights_fragment_begin:"\nGeometricContext geometry;\ngeometry.position = - vViewPosition;\ngeometry.normal = normal;\ngeometry.viewDir = ( isOrthographic ) ? vec3( 0, 0, 1 ) : normalize( vViewPosition );\n#ifdef USE_CLEARCOAT\n\tgeometry.clearcoatNormal = clearcoatNormal;\n#endif\n#ifdef USE_IRIDESCENCE\n\tfloat dotNVi = saturate( dot( normal, geometry.viewDir ) );\n\tif ( material.iridescenceThickness == 0.0 ) {\n\t\tmaterial.iridescence = 0.0;\n\t} else {\n\t\tmaterial.iridescence = saturate( material.iridescence );\n\t}\n\tif ( material.iridescence > 0.0 ) {\n\t\tmaterial.iridescenceFresnel = evalIridescence( 1.0, material.iridescenceIOR, dotNVi, material.iridescenceThickness, material.specularColor );\n\t\tmaterial.iridescenceF0 = Schlick_to_F0( material.iridescenceFresnel, 1.0, dotNVi );\n\t}\n#endif\nIncidentLight directLight;\n#if ( NUM_POINT_LIGHTS > 0 ) && defined( RE_Direct )\n\tPointLight pointLight;\n\t#if defined( USE_SHADOWMAP ) && NUM_POINT_LIGHT_SHADOWS > 0\n\tPointLightShadow pointLightShadow;\n\t#endif\n\t#pragma unroll_loop_start\n\tfor ( int i = 0; i < NUM_POINT_LIGHTS; i ++ ) {\n\t\tpointLight = pointLights[ i ];\n\t\tgetPointLightInfo( pointLight, geometry, directLight );\n\t\t#if defined( USE_SHADOWMAP ) && ( UNROLLED_LOOP_INDEX < NUM_POINT_LIGHT_SHADOWS )\n\t\tpointLightShadow = pointLightShadows[ i ];\n\t\tdirectLight.color *= ( directLight.visible && receiveShadow ) ? getPointShadow( pointShadowMap[ i ], pointLightShadow.shadowMapSize, pointLightShadow.shadowBias, pointLightShadow.shadowRadius, vPointShadowCoord[ i ], pointLightShadow.shadowCameraNear, pointLightShadow.shadowCameraFar ) : 1.0;\n\t\t#endif\n\t\tRE_Direct( directLight, geometry, material, reflectedLight );\n\t}\n\t#pragma unroll_loop_end\n#endif\n#if ( NUM_SPOT_LIGHTS > 0 ) && defined( RE_Direct )\n\tSpotLight spotLight;\n\tvec4 spotColor;\n\tvec3 spotLightCoord;\n\tbool inSpotLightMap;\n\t#if defined( USE_SHADOWMAP ) && NUM_SPOT_LIGHT_SHADOWS > 0\n\tSpotLightShadow spotLightShadow;\n\t#endif\n\t#pragma unroll_loop_start\n\tfor ( int i = 0; i < NUM_SPOT_LIGHTS; i ++ ) {\n\t\tspotLight = spotLights[ i ];\n\t\tgetSpotLightInfo( spotLight, geometry, directLight );\n\t\t#if ( UNROLLED_LOOP_INDEX < NUM_SPOT_LIGHT_SHADOWS_WITH_MAPS )\n\t\t#define SPOT_LIGHT_MAP_INDEX UNROLLED_LOOP_INDEX\n\t\t#elif ( UNROLLED_LOOP_INDEX < NUM_SPOT_LIGHT_SHADOWS )\n\t\t#define SPOT_LIGHT_MAP_INDEX NUM_SPOT_LIGHT_MAPS\n\t\t#else\n\t\t#define SPOT_LIGHT_MAP_INDEX ( UNROLLED_LOOP_INDEX - NUM_SPOT_LIGHT_SHADOWS + NUM_SPOT_LIGHT_SHADOWS_WITH_MAPS )\n\t\t#endif\n\t\t#if ( SPOT_LIGHT_MAP_INDEX < NUM_SPOT_LIGHT_MAPS )\n\t\t\tspotLightCoord = vSpotLightCoord[ i ].xyz / vSpotLightCoord[ i ].w;\n\t\t\tinSpotLightMap = all( lessThan( abs( spotLightCoord * 2. - 1. ), vec3( 1.0 ) ) );\n\t\t\tspotColor = texture2D( spotLightMap[ SPOT_LIGHT_MAP_INDEX ], spotLightCoord.xy );\n\t\t\tdirectLight.color = inSpotLightMap ? directLight.color * spotColor.rgb : directLight.color;\n\t\t#endif\n\t\t#undef SPOT_LIGHT_MAP_INDEX\n\t\t#if defined( USE_SHADOWMAP ) && ( UNROLLED_LOOP_INDEX < NUM_SPOT_LIGHT_SHADOWS )\n\t\tspotLightShadow = spotLightShadows[ i ];\n\t\tdirectLight.color *= ( directLight.visible && receiveShadow ) ? getShadow( spotShadowMap[ i ], spotLightShadow.shadowMapSize, spotLightShadow.shadowBias, spotLightShadow.shadowRadius, vSpotLightCoord[ i ] ) : 1.0;\n\t\t#endif\n\t\tRE_Direct( directLight, geometry, material, reflectedLight );\n\t}\n\t#pragma unroll_loop_end\n#endif\n#if ( NUM_DIR_LIGHTS > 0 ) && defined( RE_Direct )\n\tDirectionalLight directionalLight;\n\t#if defined( USE_SHADOWMAP ) && NUM_DIR_LIGHT_SHADOWS > 0\n\tDirectionalLightShadow directionalLightShadow;\n\t#endif\n\t#pragma unroll_loop_start\n\tfor ( int i = 0; i < NUM_DIR_LIGHTS; i ++ ) {\n\t\tdirectionalLight = directionalLights[ i ];\n\t\tgetDirectionalLightInfo( directionalLight, geometry, directLight );\n\t\t#if defined( USE_SHADOWMAP ) && ( UNROLLED_LOOP_INDEX < NUM_DIR_LIGHT_SHADOWS )\n\t\tdirectionalLightShadow = directionalLightShadows[ i ];\n\t\tdirectLight.color *= ( directLight.visible && receiveShadow ) ? getShadow( directionalShadowMap[ i ], directionalLightShadow.shadowMapSize, directionalLightShadow.shadowBias, directionalLightShadow.shadowRadius, vDirectionalShadowCoord[ i ] ) : 1.0;\n\t\t#endif\n\t\tRE_Direct( directLight, geometry, material, reflectedLight );\n\t}\n\t#pragma unroll_loop_end\n#endif\n#if ( NUM_RECT_AREA_LIGHTS > 0 ) && defined( RE_Direct_RectArea )\n\tRectAreaLight rectAreaLight;\n\t#pragma unroll_loop_start\n\tfor ( int i = 0; i < NUM_RECT_AREA_LIGHTS; i ++ ) {\n\t\trectAreaLight = rectAreaLights[ i ];\n\t\tRE_Direct_RectArea( rectAreaLight, geometry, material, reflectedLight );\n\t}\n\t#pragma unroll_loop_end\n#endif\n#if defined( RE_IndirectDiffuse )\n\tvec3 iblIrradiance = vec3( 0.0 );\n\tvec3 irradiance = getAmbientLightIrradiance( ambientLightColor );\n\tirradiance += getLightProbeIrradiance( lightProbe, geometry.normal );\n\t#if ( NUM_HEMI_LIGHTS > 0 )\n\t\t#pragma unroll_loop_start\n\t\tfor ( int i = 0; i < NUM_HEMI_LIGHTS; i ++ ) {\n\t\t\tirradiance += getHemisphereLightIrradiance( hemisphereLights[ i ], geometry.normal );\n\t\t}\n\t\t#pragma unroll_loop_end\n\t#endif\n#endif\n#if defined( RE_IndirectSpecular )\n\tvec3 radiance = vec3( 0.0 );\n\tvec3 clearcoatRadiance = vec3( 0.0 );\n#endif",lights_fragment_maps:"#if defined( RE_IndirectDiffuse )\n\t#ifdef USE_LIGHTMAP\n\t\tvec4 lightMapTexel = texture2D( lightMap, vUv2 );\n\t\tvec3 lightMapIrradiance = lightMapTexel.rgb * lightMapIntensity;\n\t\tirradiance += lightMapIrradiance;\n\t#endif\n\t#if defined( USE_ENVMAP ) && defined( STANDARD ) && defined( ENVMAP_TYPE_CUBE_UV )\n\t\tiblIrradiance += getIBLIrradiance( geometry.normal );\n\t#endif\n#endif\n#if defined( USE_ENVMAP ) && defined( RE_IndirectSpecular )\n\tradiance += getIBLRadiance( geometry.viewDir, geometry.normal, material.roughness );\n\t#ifdef USE_CLEARCOAT\n\t\tclearcoatRadiance += getIBLRadiance( geometry.viewDir, geometry.clearcoatNormal, material.clearcoatRoughness );\n\t#endif\n#endif",lights_fragment_end:"#if defined( RE_IndirectDiffuse )\n\tRE_IndirectDiffuse( irradiance, geometry, material, reflectedLight );\n#endif\n#if defined( RE_IndirectSpecular )\n\tRE_IndirectSpecular( radiance, iblIrradiance, clearcoatRadiance, geometry, material, reflectedLight );\n#endif",logdepthbuf_fragment:"#if defined( USE_LOGDEPTHBUF ) && defined( USE_LOGDEPTHBUF_EXT )\n\tgl_FragDepthEXT = vIsPerspective == 0.0 ? gl_FragCoord.z : log2( vFragDepth ) * logDepthBufFC * 0.5;\n#endif",logdepthbuf_pars_fragment:"#if defined( USE_LOGDEPTHBUF ) && defined( USE_LOGDEPTHBUF_EXT )\n\tuniform float logDepthBufFC;\n\tvarying float vFragDepth;\n\tvarying float vIsPerspective;\n#endif",logdepthbuf_pars_vertex:"#ifdef USE_LOGDEPTHBUF\n\t#ifdef USE_LOGDEPTHBUF_EXT\n\t\tvarying float vFragDepth;\n\t\tvarying float vIsPerspective;\n\t#else\n\t\tuniform float logDepthBufFC;\n\t#endif\n#endif",logdepthbuf_vertex:"#ifdef USE_LOGDEPTHBUF\n\t#ifdef USE_LOGDEPTHBUF_EXT\n\t\tvFragDepth = 1.0 + gl_Position.w;\n\t\tvIsPerspective = float( isPerspectiveMatrix( projectionMatrix ) );\n\t#else\n\t\tif ( isPerspectiveMatrix( projectionMatrix ) ) {\n\t\t\tgl_Position.z = log2( max( EPSILON, gl_Position.w + 1.0 ) ) * logDepthBufFC - 1.0;\n\t\t\tgl_Position.z *= gl_Position.w;\n\t\t}\n\t#endif\n#endif",map_fragment:"#ifdef USE_MAP\n\tvec4 sampledDiffuseColor = texture2D( map, vUv );\n\t#ifdef DECODE_VIDEO_TEXTURE\n\t\tsampledDiffuseColor = vec4( mix( pow( sampledDiffuseColor.rgb * 0.9478672986 + vec3( 0.0521327014 ), vec3( 2.4 ) ), sampledDiffuseColor.rgb * 0.0773993808, vec3( lessThanEqual( sampledDiffuseColor.rgb, vec3( 0.04045 ) ) ) ), sampledDiffuseColor.w );\n\t#endif\n\tdiffuseColor *= sampledDiffuseColor;\n#endif",map_pars_fragment:"#ifdef USE_MAP\n\tuniform sampler2D map;\n#endif",map_particle_fragment:"#if defined( USE_MAP ) || defined( USE_ALPHAMAP )\n\tvec2 uv = ( uvTransform * vec3( gl_PointCoord.x, 1.0 - gl_PointCoord.y, 1 ) ).xy;\n#endif\n#ifdef USE_MAP\n\tdiffuseColor *= texture2D( map, uv );\n#endif\n#ifdef USE_ALPHAMAP\n\tdiffuseColor.a *= texture2D( alphaMap, uv ).g;\n#endif",map_particle_pars_fragment:"#if defined( USE_MAP ) || defined( USE_ALPHAMAP )\n\tuniform mat3 uvTransform;\n#endif\n#ifdef USE_MAP\n\tuniform sampler2D map;\n#endif\n#ifdef USE_ALPHAMAP\n\tuniform sampler2D alphaMap;\n#endif",metalnessmap_fragment:"float metalnessFactor = metalness;\n#ifdef USE_METALNESSMAP\n\tvec4 texelMetalness = texture2D( metalnessMap, vUv );\n\tmetalnessFactor *= texelMetalness.b;\n#endif",metalnessmap_pars_fragment:"#ifdef USE_METALNESSMAP\n\tuniform sampler2D metalnessMap;\n#endif",morphcolor_vertex:"#if defined( USE_MORPHCOLORS ) && defined( MORPHTARGETS_TEXTURE )\n\tvColor *= morphTargetBaseInfluence;\n\tfor ( int i = 0; i < MORPHTARGETS_COUNT; i ++ ) {\n\t\t#if defined( USE_COLOR_ALPHA )\n\t\t\tif ( morphTargetInfluences[ i ] != 0.0 ) vColor += getMorph( gl_VertexID, i, 2 ) * morphTargetInfluences[ i ];\n\t\t#elif defined( USE_COLOR )\n\t\t\tif ( morphTargetInfluences[ i ] != 0.0 ) vColor += getMorph( gl_VertexID, i, 2 ).rgb * morphTargetInfluences[ i ];\n\t\t#endif\n\t}\n#endif",morphnormal_vertex:"#ifdef USE_MORPHNORMALS\n\tobjectNormal *= morphTargetBaseInfluence;\n\t#ifdef MORPHTARGETS_TEXTURE\n\t\tfor ( int i = 0; i < MORPHTARGETS_COUNT; i ++ ) {\n\t\t\tif ( morphTargetInfluences[ i ] != 0.0 ) objectNormal += getMorph( gl_VertexID, i, 1 ).xyz * morphTargetInfluences[ i ];\n\t\t}\n\t#else\n\t\tobjectNormal += morphNormal0 * morphTargetInfluences[ 0 ];\n\t\tobjectNormal += morphNormal1 * morphTargetInfluences[ 1 ];\n\t\tobjectNormal += morphNormal2 * morphTargetInfluences[ 2 ];\n\t\tobjectNormal += morphNormal3 * morphTargetInfluences[ 3 ];\n\t#endif\n#endif",morphtarget_pars_vertex:"#ifdef USE_MORPHTARGETS\n\tuniform float morphTargetBaseInfluence;\n\t#ifdef MORPHTARGETS_TEXTURE\n\t\tuniform float morphTargetInfluences[ MORPHTARGETS_COUNT ];\n\t\tuniform sampler2DArray morphTargetsTexture;\n\t\tuniform ivec2 morphTargetsTextureSize;\n\t\tvec4 getMorph( const in int vertexIndex, const in int morphTargetIndex, const in int offset ) {\n\t\t\tint texelIndex = vertexIndex * MORPHTARGETS_TEXTURE_STRIDE + offset;\n\t\t\tint y = texelIndex / morphTargetsTextureSize.x;\n\t\t\tint x = texelIndex - y * morphTargetsTextureSize.x;\n\t\t\tivec3 morphUV = ivec3( x, y, morphTargetIndex );\n\t\t\treturn texelFetch( morphTargetsTexture, morphUV, 0 );\n\t\t}\n\t#else\n\t\t#ifndef USE_MORPHNORMALS\n\t\t\tuniform float morphTargetInfluences[ 8 ];\n\t\t#else\n\t\t\tuniform float morphTargetInfluences[ 4 ];\n\t\t#endif\n\t#endif\n#endif",morphtarget_vertex:"#ifdef USE_MORPHTARGETS\n\ttransformed *= morphTargetBaseInfluence;\n\t#ifdef MORPHTARGETS_TEXTURE\n\t\tfor ( int i = 0; i < MORPHTARGETS_COUNT; i ++ ) {\n\t\t\tif ( morphTargetInfluences[ i ] != 0.0 ) transformed += getMorph( gl_VertexID, i, 0 ).xyz * morphTargetInfluences[ i ];\n\t\t}\n\t#else\n\t\ttransformed += morphTarget0 * morphTargetInfluences[ 0 ];\n\t\ttransformed += morphTarget1 * morphTargetInfluences[ 1 ];\n\t\ttransformed += morphTarget2 * morphTargetInfluences[ 2 ];\n\t\ttransformed += morphTarget3 * morphTargetInfluences[ 3 ];\n\t\t#ifndef USE_MORPHNORMALS\n\t\t\ttransformed += morphTarget4 * morphTargetInfluences[ 4 ];\n\t\t\ttransformed += morphTarget5 * morphTargetInfluences[ 5 ];\n\t\t\ttransformed += morphTarget6 * morphTargetInfluences[ 6 ];\n\t\t\ttransformed += morphTarget7 * morphTargetInfluences[ 7 ];\n\t\t#endif\n\t#endif\n#endif",normal_fragment_begin:"float faceDirection = gl_FrontFacing ? 1.0 : - 1.0;\n#ifdef FLAT_SHADED\n\tvec3 fdx = dFdx( vViewPosition );\n\tvec3 fdy = dFdy( vViewPosition );\n\tvec3 normal = normalize( cross( fdx, fdy ) );\n#else\n\tvec3 normal = normalize( vNormal );\n\t#ifdef DOUBLE_SIDED\n\t\tnormal = normal * faceDirection;\n\t#endif\n\t#ifdef USE_TANGENT\n\t\tvec3 tangent = normalize( vTangent );\n\t\tvec3 bitangent = normalize( vBitangent );\n\t\t#ifdef DOUBLE_SIDED\n\t\t\ttangent = tangent * faceDirection;\n\t\t\tbitangent = bitangent * faceDirection;\n\t\t#endif\n\t\t#if defined( TANGENTSPACE_NORMALMAP ) || defined( USE_CLEARCOAT_NORMALMAP )\n\t\t\tmat3 vTBN = mat3( tangent, bitangent, normal );\n\t\t#endif\n\t#endif\n#endif\nvec3 geometryNormal = normal;",normal_fragment_maps:"#ifdef OBJECTSPACE_NORMALMAP\n\tnormal = texture2D( normalMap, vUv ).xyz * 2.0 - 1.0;\n\t#ifdef FLIP_SIDED\n\t\tnormal = - normal;\n\t#endif\n\t#ifdef DOUBLE_SIDED\n\t\tnormal = normal * faceDirection;\n\t#endif\n\tnormal = normalize( normalMatrix * normal );\n#elif defined( TANGENTSPACE_NORMALMAP )\n\tvec3 mapN = texture2D( normalMap, vUv ).xyz * 2.0 - 1.0;\n\tmapN.xy *= normalScale;\n\t#ifdef USE_TANGENT\n\t\tnormal = normalize( vTBN * mapN );\n\t#else\n\t\tnormal = perturbNormal2Arb( - vViewPosition, normal, mapN, faceDirection );\n\t#endif\n#elif defined( USE_BUMPMAP )\n\tnormal = perturbNormalArb( - vViewPosition, normal, dHdxy_fwd(), faceDirection );\n#endif",normal_pars_fragment:"#ifndef FLAT_SHADED\n\tvarying vec3 vNormal;\n\t#ifdef USE_TANGENT\n\t\tvarying vec3 vTangent;\n\t\tvarying vec3 vBitangent;\n\t#endif\n#endif",normal_pars_vertex:"#ifndef FLAT_SHADED\n\tvarying vec3 vNormal;\n\t#ifdef USE_TANGENT\n\t\tvarying vec3 vTangent;\n\t\tvarying vec3 vBitangent;\n\t#endif\n#endif",normal_vertex:"#ifndef FLAT_SHADED\n\tvNormal = normalize( transformedNormal );\n\t#ifdef USE_TANGENT\n\t\tvTangent = normalize( transformedTangent );\n\t\tvBitangent = normalize( cross( vNormal, vTangent ) * tangent.w );\n\t#endif\n#endif",normalmap_pars_fragment:"#ifdef USE_NORMALMAP\n\tuniform sampler2D normalMap;\n\tuniform vec2 normalScale;\n#endif\n#ifdef OBJECTSPACE_NORMALMAP\n\tuniform mat3 normalMatrix;\n#endif\n#if ! defined ( USE_TANGENT ) && ( defined ( TANGENTSPACE_NORMALMAP ) || defined ( USE_CLEARCOAT_NORMALMAP ) )\n\tvec3 perturbNormal2Arb( vec3 eye_pos, vec3 surf_norm, vec3 mapN, float faceDirection ) {\n\t\tvec3 q0 = dFdx( eye_pos.xyz );\n\t\tvec3 q1 = dFdy( eye_pos.xyz );\n\t\tvec2 st0 = dFdx( vUv.st );\n\t\tvec2 st1 = dFdy( vUv.st );\n\t\tvec3 N = surf_norm;\n\t\tvec3 q1perp = cross( q1, N );\n\t\tvec3 q0perp = cross( N, q0 );\n\t\tvec3 T = q1perp * st0.x + q0perp * st1.x;\n\t\tvec3 B = q1perp * st0.y + q0perp * st1.y;\n\t\tfloat det = max( dot( T, T ), dot( B, B ) );\n\t\tfloat scale = ( det == 0.0 ) ? 0.0 : faceDirection * inversesqrt( det );\n\t\treturn normalize( T * ( mapN.x * scale ) + B * ( mapN.y * scale ) + N * mapN.z );\n\t}\n#endif",clearcoat_normal_fragment_begin:"#ifdef USE_CLEARCOAT\n\tvec3 clearcoatNormal = geometryNormal;\n#endif",clearcoat_normal_fragment_maps:"#ifdef USE_CLEARCOAT_NORMALMAP\n\tvec3 clearcoatMapN = texture2D( clearcoatNormalMap, vUv ).xyz * 2.0 - 1.0;\n\tclearcoatMapN.xy *= clearcoatNormalScale;\n\t#ifdef USE_TANGENT\n\t\tclearcoatNormal = normalize( vTBN * clearcoatMapN );\n\t#else\n\t\tclearcoatNormal = perturbNormal2Arb( - vViewPosition, clearcoatNormal, clearcoatMapN, faceDirection );\n\t#endif\n#endif",clearcoat_pars_fragment:"#ifdef USE_CLEARCOATMAP\n\tuniform sampler2D clearcoatMap;\n#endif\n#ifdef USE_CLEARCOAT_ROUGHNESSMAP\n\tuniform sampler2D clearcoatRoughnessMap;\n#endif\n#ifdef USE_CLEARCOAT_NORMALMAP\n\tuniform sampler2D clearcoatNormalMap;\n\tuniform vec2 clearcoatNormalScale;\n#endif",iridescence_pars_fragment:"#ifdef USE_IRIDESCENCEMAP\n\tuniform sampler2D iridescenceMap;\n#endif\n#ifdef USE_IRIDESCENCE_THICKNESSMAP\n\tuniform sampler2D iridescenceThicknessMap;\n#endif",output_fragment:"#ifdef OPAQUE\ndiffuseColor.a = 1.0;\n#endif\n#ifdef USE_TRANSMISSION\ndiffuseColor.a *= material.transmissionAlpha + 0.1;\n#endif\ngl_FragColor = vec4( outgoingLight, diffuseColor.a );",packing:"vec3 packNormalToRGB( const in vec3 normal ) {\n\treturn normalize( normal ) * 0.5 + 0.5;\n}\nvec3 unpackRGBToNormal( const in vec3 rgb ) {\n\treturn 2.0 * rgb.xyz - 1.0;\n}\nconst float PackUpscale = 256. / 255.;const float UnpackDownscale = 255. / 256.;\nconst vec3 PackFactors = vec3( 256. * 256. * 256., 256. * 256., 256. );\nconst vec4 UnpackFactors = UnpackDownscale / vec4( PackFactors, 1. );\nconst float ShiftRight8 = 1. / 256.;\nvec4 packDepthToRGBA( const in float v ) {\n\tvec4 r = vec4( fract( v * PackFactors ), v );\n\tr.yzw -= r.xyz * ShiftRight8;\treturn r * PackUpscale;\n}\nfloat unpackRGBAToDepth( const in vec4 v ) {\n\treturn dot( v, UnpackFactors );\n}\nvec2 packDepthToRG( in highp float v ) {\n\treturn packDepthToRGBA( v ).yx;\n}\nfloat unpackRGToDepth( const in highp vec2 v ) {\n\treturn unpackRGBAToDepth( vec4( v.xy, 0.0, 0.0 ) );\n}\nvec4 pack2HalfToRGBA( vec2 v ) {\n\tvec4 r = vec4( v.x, fract( v.x * 255.0 ), v.y, fract( v.y * 255.0 ) );\n\treturn vec4( r.x - r.y / 255.0, r.y, r.z - r.w / 255.0, r.w );\n}\nvec2 unpackRGBATo2Half( vec4 v ) {\n\treturn vec2( v.x + ( v.y / 255.0 ), v.z + ( v.w / 255.0 ) );\n}\nfloat viewZToOrthographicDepth( const in float viewZ, const in float near, const in float far ) {\n\treturn ( viewZ + near ) / ( near - far );\n}\nfloat orthographicDepthToViewZ( const in float linearClipZ, const in float near, const in float far ) {\n\treturn linearClipZ * ( near - far ) - near;\n}\nfloat viewZToPerspectiveDepth( const in float viewZ, const in float near, const in float far ) {\n\treturn ( ( near + viewZ ) * far ) / ( ( far - near ) * viewZ );\n}\nfloat perspectiveDepthToViewZ( const in float invClipZ, const in float near, const in float far ) {\n\treturn ( near * far ) / ( ( far - near ) * invClipZ - far );\n}",premultiplied_alpha_fragment:"#ifdef PREMULTIPLIED_ALPHA\n\tgl_FragColor.rgb *= gl_FragColor.a;\n#endif",project_vertex:"vec4 mvPosition = vec4( transformed, 1.0 );\n#ifdef USE_INSTANCING\n\tmvPosition = instanceMatrix * mvPosition;\n#endif\nmvPosition = modelViewMatrix * mvPosition;\ngl_Position = projectionMatrix * mvPosition;",dithering_fragment:"#ifdef DITHERING\n\tgl_FragColor.rgb = dithering( gl_FragColor.rgb );\n#endif",dithering_pars_fragment:"#ifdef DITHERING\n\tvec3 dithering( vec3 color ) {\n\t\tfloat grid_position = rand( gl_FragCoord.xy );\n\t\tvec3 dither_shift_RGB = vec3( 0.25 / 255.0, -0.25 / 255.0, 0.25 / 255.0 );\n\t\tdither_shift_RGB = mix( 2.0 * dither_shift_RGB, -2.0 * dither_shift_RGB, grid_position );\n\t\treturn color + dither_shift_RGB;\n\t}\n#endif",roughnessmap_fragment:"float roughnessFactor = roughness;\n#ifdef USE_ROUGHNESSMAP\n\tvec4 texelRoughness = texture2D( roughnessMap, vUv );\n\troughnessFactor *= texelRoughness.g;\n#endif",roughnessmap_pars_fragment:"#ifdef USE_ROUGHNESSMAP\n\tuniform sampler2D roughnessMap;\n#endif",shadowmap_pars_fragment:"#if NUM_SPOT_LIGHT_COORDS > 0\n\tvarying vec4 vSpotLightCoord[ NUM_SPOT_LIGHT_COORDS ];\n#endif\n#if NUM_SPOT_LIGHT_MAPS > 0\n\tuniform sampler2D spotLightMap[ NUM_SPOT_LIGHT_MAPS ];\n#endif\n#ifdef USE_SHADOWMAP\n\t#if NUM_DIR_LIGHT_SHADOWS > 0\n\t\tuniform sampler2D directionalShadowMap[ NUM_DIR_LIGHT_SHADOWS ];\n\t\tvarying vec4 vDirectionalShadowCoord[ NUM_DIR_LIGHT_SHADOWS ];\n\t\tstruct DirectionalLightShadow {\n\t\t\tfloat shadowBias;\n\t\t\tfloat shadowNormalBias;\n\t\t\tfloat shadowRadius;\n\t\t\tvec2 shadowMapSize;\n\t\t};\n\t\tuniform DirectionalLightShadow directionalLightShadows[ NUM_DIR_LIGHT_SHADOWS ];\n\t#endif\n\t#if NUM_SPOT_LIGHT_SHADOWS > 0\n\t\tuniform sampler2D spotShadowMap[ NUM_SPOT_LIGHT_SHADOWS ];\n\t\tstruct SpotLightShadow {\n\t\t\tfloat shadowBias;\n\t\t\tfloat shadowNormalBias;\n\t\t\tfloat shadowRadius;\n\t\t\tvec2 shadowMapSize;\n\t\t};\n\t\tuniform SpotLightShadow spotLightShadows[ NUM_SPOT_LIGHT_SHADOWS ];\n\t#endif\n\t#if NUM_POINT_LIGHT_SHADOWS > 0\n\t\tuniform sampler2D pointShadowMap[ NUM_POINT_LIGHT_SHADOWS ];\n\t\tvarying vec4 vPointShadowCoord[ NUM_POINT_LIGHT_SHADOWS ];\n\t\tstruct PointLightShadow {\n\t\t\tfloat shadowBias;\n\t\t\tfloat shadowNormalBias;\n\t\t\tfloat shadowRadius;\n\t\t\tvec2 shadowMapSize;\n\t\t\tfloat shadowCameraNear;\n\t\t\tfloat shadowCameraFar;\n\t\t};\n\t\tuniform PointLightShadow pointLightShadows[ NUM_POINT_LIGHT_SHADOWS ];\n\t#endif\n\tfloat texture2DCompare( sampler2D depths, vec2 uv, float compare ) {\n\t\treturn step( compare, unpackRGBAToDepth( texture2D( depths, uv ) ) );\n\t}\n\tvec2 texture2DDistribution( sampler2D shadow, vec2 uv ) {\n\t\treturn unpackRGBATo2Half( texture2D( shadow, uv ) );\n\t}\n\tfloat VSMShadow (sampler2D shadow, vec2 uv, float compare ){\n\t\tfloat occlusion = 1.0;\n\t\tvec2 distribution = texture2DDistribution( shadow, uv );\n\t\tfloat hard_shadow = step( compare , distribution.x );\n\t\tif (hard_shadow != 1.0 ) {\n\t\t\tfloat distance = compare - distribution.x ;\n\t\t\tfloat variance = max( 0.00000, distribution.y * distribution.y );\n\t\t\tfloat softness_probability = variance / (variance + distance * distance );\t\t\tsoftness_probability = clamp( ( softness_probability - 0.3 ) / ( 0.95 - 0.3 ), 0.0, 1.0 );\t\t\tocclusion = clamp( max( hard_shadow, softness_probability ), 0.0, 1.0 );\n\t\t}\n\t\treturn occlusion;\n\t}\n\tfloat getShadow( sampler2D shadowMap, vec2 shadowMapSize, float shadowBias, float shadowRadius, vec4 shadowCoord ) {\n\t\tfloat shadow = 1.0;\n\t\tshadowCoord.xyz /= shadowCoord.w;\n\t\tshadowCoord.z += shadowBias;\n\t\tbool inFrustum = shadowCoord.x >= 0.0 && shadowCoord.x <= 1.0 && shadowCoord.y >= 0.0 && shadowCoord.y <= 1.0;\n\t\tbool frustumTest = inFrustum && shadowCoord.z <= 1.0;\n\t\tif ( frustumTest ) {\n\t\t#if defined( SHADOWMAP_TYPE_PCF )\n\t\t\tvec2 texelSize = vec2( 1.0 ) / shadowMapSize;\n\t\t\tfloat dx0 = - texelSize.x * shadowRadius;\n\t\t\tfloat dy0 = - texelSize.y * shadowRadius;\n\t\t\tfloat dx1 = + texelSize.x * shadowRadius;\n\t\t\tfloat dy1 = + texelSize.y * shadowRadius;\n\t\t\tfloat dx2 = dx0 / 2.0;\n\t\t\tfloat dy2 = dy0 / 2.0;\n\t\t\tfloat dx3 = dx1 / 2.0;\n\t\t\tfloat dy3 = dy1 / 2.0;\n\t\t\tshadow = (\n\t\t\t\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( dx0, dy0 ), shadowCoord.z ) +\n\t\t\t\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( 0.0, dy0 ), shadowCoord.z ) +\n\t\t\t\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( dx1, dy0 ), shadowCoord.z ) +\n\t\t\t\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( dx2, dy2 ), shadowCoord.z ) +\n\t\t\t\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( 0.0, dy2 ), shadowCoord.z ) +\n\t\t\t\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( dx3, dy2 ), shadowCoord.z ) +\n\t\t\t\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( dx0, 0.0 ), shadowCoord.z ) +\n\t\t\t\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( dx2, 0.0 ), shadowCoord.z ) +\n\t\t\t\ttexture2DCompare( shadowMap, shadowCoord.xy, shadowCoord.z ) +\n\t\t\t\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( dx3, 0.0 ), shadowCoord.z ) +\n\t\t\t\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( dx1, 0.0 ), shadowCoord.z ) +\n\t\t\t\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( dx2, dy3 ), shadowCoord.z ) +\n\t\t\t\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( 0.0, dy3 ), shadowCoord.z ) +\n\t\t\t\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( dx3, dy3 ), shadowCoord.z ) +\n\t\t\t\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( dx0, dy1 ), shadowCoord.z ) +\n\t\t\t\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( 0.0, dy1 ), shadowCoord.z ) +\n\t\t\t\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( dx1, dy1 ), shadowCoord.z )\n\t\t\t) * ( 1.0 / 17.0 );\n\t\t#elif defined( SHADOWMAP_TYPE_PCF_SOFT )\n\t\t\tvec2 texelSize = vec2( 1.0 ) / shadowMapSize;\n\t\t\tfloat dx = texelSize.x;\n\t\t\tfloat dy = texelSize.y;\n\t\t\tvec2 uv = shadowCoord.xy;\n\t\t\tvec2 f = fract( uv * shadowMapSize + 0.5 );\n\t\t\tuv -= f * texelSize;\n\t\t\tshadow = (\n\t\t\t\ttexture2DCompare( shadowMap, uv, shadowCoord.z ) +\n\t\t\t\ttexture2DCompare( shadowMap, uv + vec2( dx, 0.0 ), shadowCoord.z ) +\n\t\t\t\ttexture2DCompare( shadowMap, uv + vec2( 0.0, dy ), shadowCoord.z ) +\n\t\t\t\ttexture2DCompare( shadowMap, uv + texelSize, shadowCoord.z ) +\n\t\t\t\tmix( texture2DCompare( shadowMap, uv + vec2( -dx, 0.0 ), shadowCoord.z ),\n\t\t\t\t\t texture2DCompare( shadowMap, uv + vec2( 2.0 * dx, 0.0 ), shadowCoord.z ),\n\t\t\t\t\t f.x ) +\n\t\t\t\tmix( texture2DCompare( shadowMap, uv + vec2( -dx, dy ), shadowCoord.z ),\n\t\t\t\t\t texture2DCompare( shadowMap, uv + vec2( 2.0 * dx, dy ), shadowCoord.z ),\n\t\t\t\t\t f.x ) +\n\t\t\t\tmix( texture2DCompare( shadowMap, uv + vec2( 0.0, -dy ), shadowCoord.z ),\n\t\t\t\t\t texture2DCompare( shadowMap, uv + vec2( 0.0, 2.0 * dy ), shadowCoord.z ),\n\t\t\t\t\t f.y ) +\n\t\t\t\tmix( texture2DCompare( shadowMap, uv + vec2( dx, -dy ), shadowCoord.z ),\n\t\t\t\t\t texture2DCompare( shadowMap, uv + vec2( dx, 2.0 * dy ), shadowCoord.z ),\n\t\t\t\t\t f.y ) +\n\t\t\t\tmix( mix( texture2DCompare( shadowMap, uv + vec2( -dx, -dy ), shadowCoord.z ),\n\t\t\t\t\t\t texture2DCompare( shadowMap, uv + vec2( 2.0 * dx, -dy ), shadowCoord.z ),\n\t\t\t\t\t\t f.x ),\n\t\t\t\t\t mix( texture2DCompare( shadowMap, uv + vec2( -dx, 2.0 * dy ), shadowCoord.z ),\n\t\t\t\t\t\t texture2DCompare( shadowMap, uv + vec2( 2.0 * dx, 2.0 * dy ), shadowCoord.z ),\n\t\t\t\t\t\t f.x ),\n\t\t\t\t\t f.y )\n\t\t\t) * ( 1.0 / 9.0 );\n\t\t#elif defined( SHADOWMAP_TYPE_VSM )\n\t\t\tshadow = VSMShadow( shadowMap, shadowCoord.xy, shadowCoord.z );\n\t\t#else\n\t\t\tshadow = texture2DCompare( shadowMap, shadowCoord.xy, shadowCoord.z );\n\t\t#endif\n\t\t}\n\t\treturn shadow;\n\t}\n\tvec2 cubeToUV( vec3 v, float texelSizeY ) {\n\t\tvec3 absV = abs( v );\n\t\tfloat scaleToCube = 1.0 / max( absV.x, max( absV.y, absV.z ) );\n\t\tabsV *= scaleToCube;\n\t\tv *= scaleToCube * ( 1.0 - 2.0 * texelSizeY );\n\t\tvec2 planar = v.xy;\n\t\tfloat almostATexel = 1.5 * texelSizeY;\n\t\tfloat almostOne = 1.0 - almostATexel;\n\t\tif ( absV.z >= almostOne ) {\n\t\t\tif ( v.z > 0.0 )\n\t\t\t\tplanar.x = 4.0 - v.x;\n\t\t} else if ( absV.x >= almostOne ) {\n\t\t\tfloat signX = sign( v.x );\n\t\t\tplanar.x = v.z * signX + 2.0 * signX;\n\t\t} else if ( absV.y >= almostOne ) {\n\t\t\tfloat signY = sign( v.y );\n\t\t\tplanar.x = v.x + 2.0 * signY + 2.0;\n\t\t\tplanar.y = v.z * signY - 2.0;\n\t\t}\n\t\treturn vec2( 0.125, 0.25 ) * planar + vec2( 0.375, 0.75 );\n\t}\n\tfloat getPointShadow( sampler2D shadowMap, vec2 shadowMapSize, float shadowBias, float shadowRadius, vec4 shadowCoord, float shadowCameraNear, float shadowCameraFar ) {\n\t\tvec2 texelSize = vec2( 1.0 ) / ( shadowMapSize * vec2( 4.0, 2.0 ) );\n\t\tvec3 lightToPosition = shadowCoord.xyz;\n\t\tfloat dp = ( length( lightToPosition ) - shadowCameraNear ) / ( shadowCameraFar - shadowCameraNear );\t\tdp += shadowBias;\n\t\tvec3 bd3D = normalize( lightToPosition );\n\t\t#if defined( SHADOWMAP_TYPE_PCF ) || defined( SHADOWMAP_TYPE_PCF_SOFT ) || defined( SHADOWMAP_TYPE_VSM )\n\t\t\tvec2 offset = vec2( - 1, 1 ) * shadowRadius * texelSize.y;\n\t\t\treturn (\n\t\t\t\ttexture2DCompare( shadowMap, cubeToUV( bd3D + offset.xyy, texelSize.y ), dp ) +\n\t\t\t\ttexture2DCompare( shadowMap, cubeToUV( bd3D + offset.yyy, texelSize.y ), dp ) +\n\t\t\t\ttexture2DCompare( shadowMap, cubeToUV( bd3D + offset.xyx, texelSize.y ), dp ) +\n\t\t\t\ttexture2DCompare( shadowMap, cubeToUV( bd3D + offset.yyx, texelSize.y ), dp ) +\n\t\t\t\ttexture2DCompare( shadowMap, cubeToUV( bd3D, texelSize.y ), dp ) +\n\t\t\t\ttexture2DCompare( shadowMap, cubeToUV( bd3D + offset.xxy, texelSize.y ), dp ) +\n\t\t\t\ttexture2DCompare( shadowMap, cubeToUV( bd3D + offset.yxy, texelSize.y ), dp ) +\n\t\t\t\ttexture2DCompare( shadowMap, cubeToUV( bd3D + offset.xxx, texelSize.y ), dp ) +\n\t\t\t\ttexture2DCompare( shadowMap, cubeToUV( bd3D + offset.yxx, texelSize.y ), dp )\n\t\t\t) * ( 1.0 / 9.0 );\n\t\t#else\n\t\t\treturn texture2DCompare( shadowMap, cubeToUV( bd3D, texelSize.y ), dp );\n\t\t#endif\n\t}\n#endif",shadowmap_pars_vertex:"#if NUM_SPOT_LIGHT_COORDS > 0\n\tuniform mat4 spotLightMatrix[ NUM_SPOT_LIGHT_COORDS ];\n\tvarying vec4 vSpotLightCoord[ NUM_SPOT_LIGHT_COORDS ];\n#endif\n#ifdef USE_SHADOWMAP\n\t#if NUM_DIR_LIGHT_SHADOWS > 0\n\t\tuniform mat4 directionalShadowMatrix[ NUM_DIR_LIGHT_SHADOWS ];\n\t\tvarying vec4 vDirectionalShadowCoord[ NUM_DIR_LIGHT_SHADOWS ];\n\t\tstruct DirectionalLightShadow {\n\t\t\tfloat shadowBias;\n\t\t\tfloat shadowNormalBias;\n\t\t\tfloat shadowRadius;\n\t\t\tvec2 shadowMapSize;\n\t\t};\n\t\tuniform DirectionalLightShadow directionalLightShadows[ NUM_DIR_LIGHT_SHADOWS ];\n\t#endif\n\t#if NUM_SPOT_LIGHT_SHADOWS > 0\n\t\tstruct SpotLightShadow {\n\t\t\tfloat shadowBias;\n\t\t\tfloat shadowNormalBias;\n\t\t\tfloat shadowRadius;\n\t\t\tvec2 shadowMapSize;\n\t\t};\n\t\tuniform SpotLightShadow spotLightShadows[ NUM_SPOT_LIGHT_SHADOWS ];\n\t#endif\n\t#if NUM_POINT_LIGHT_SHADOWS > 0\n\t\tuniform mat4 pointShadowMatrix[ NUM_POINT_LIGHT_SHADOWS ];\n\t\tvarying vec4 vPointShadowCoord[ NUM_POINT_LIGHT_SHADOWS ];\n\t\tstruct PointLightShadow {\n\t\t\tfloat shadowBias;\n\t\t\tfloat shadowNormalBias;\n\t\t\tfloat shadowRadius;\n\t\t\tvec2 shadowMapSize;\n\t\t\tfloat shadowCameraNear;\n\t\t\tfloat shadowCameraFar;\n\t\t};\n\t\tuniform PointLightShadow pointLightShadows[ NUM_POINT_LIGHT_SHADOWS ];\n\t#endif\n#endif",shadowmap_vertex:"#if ( defined( USE_SHADOWMAP ) && ( NUM_DIR_LIGHT_SHADOWS > 0 || NUM_POINT_LIGHT_SHADOWS > 0 ) ) || ( NUM_SPOT_LIGHT_COORDS > 0 )\n\tvec3 shadowWorldNormal = inverseTransformDirection( transformedNormal, viewMatrix );\n\tvec4 shadowWorldPosition;\n#endif\n#if defined( USE_SHADOWMAP )\n\t#if NUM_DIR_LIGHT_SHADOWS > 0\n\t\t#pragma unroll_loop_start\n\t\tfor ( int i = 0; i < NUM_DIR_LIGHT_SHADOWS; i ++ ) {\n\t\t\tshadowWorldPosition = worldPosition + vec4( shadowWorldNormal * directionalLightShadows[ i ].shadowNormalBias, 0 );\n\t\t\tvDirectionalShadowCoord[ i ] = directionalShadowMatrix[ i ] * shadowWorldPosition;\n\t\t}\n\t\t#pragma unroll_loop_end\n\t#endif\n\t#if NUM_POINT_LIGHT_SHADOWS > 0\n\t\t#pragma unroll_loop_start\n\t\tfor ( int i = 0; i < NUM_POINT_LIGHT_SHADOWS; i ++ ) {\n\t\t\tshadowWorldPosition = worldPosition + vec4( shadowWorldNormal * pointLightShadows[ i ].shadowNormalBias, 0 );\n\t\t\tvPointShadowCoord[ i ] = pointShadowMatrix[ i ] * shadowWorldPosition;\n\t\t}\n\t\t#pragma unroll_loop_end\n\t#endif\n#endif\n#if NUM_SPOT_LIGHT_COORDS > 0\n\t#pragma unroll_loop_start\n\tfor ( int i = 0; i < NUM_SPOT_LIGHT_COORDS; i ++ ) {\n\t\tshadowWorldPosition = worldPosition;\n\t\t#if ( defined( USE_SHADOWMAP ) && UNROLLED_LOOP_INDEX < NUM_SPOT_LIGHT_SHADOWS )\n\t\t\tshadowWorldPosition.xyz += shadowWorldNormal * spotLightShadows[ i ].shadowNormalBias;\n\t\t#endif\n\t\tvSpotLightCoord[ i ] = spotLightMatrix[ i ] * shadowWorldPosition;\n\t}\n\t#pragma unroll_loop_end\n#endif",shadowmask_pars_fragment:"float getShadowMask() {\n\tfloat shadow = 1.0;\n\t#ifdef USE_SHADOWMAP\n\t#if NUM_DIR_LIGHT_SHADOWS > 0\n\tDirectionalLightShadow directionalLight;\n\t#pragma unroll_loop_start\n\tfor ( int i = 0; i < NUM_DIR_LIGHT_SHADOWS; i ++ ) {\n\t\tdirectionalLight = directionalLightShadows[ i ];\n\t\tshadow *= receiveShadow ? getShadow( directionalShadowMap[ i ], directionalLight.shadowMapSize, directionalLight.shadowBias, directionalLight.shadowRadius, vDirectionalShadowCoord[ i ] ) : 1.0;\n\t}\n\t#pragma unroll_loop_end\n\t#endif\n\t#if NUM_SPOT_LIGHT_SHADOWS > 0\n\tSpotLightShadow spotLight;\n\t#pragma unroll_loop_start\n\tfor ( int i = 0; i < NUM_SPOT_LIGHT_SHADOWS; i ++ ) {\n\t\tspotLight = spotLightShadows[ i ];\n\t\tshadow *= receiveShadow ? getShadow( spotShadowMap[ i ], spotLight.shadowMapSize, spotLight.shadowBias, spotLight.shadowRadius, vSpotLightCoord[ i ] ) : 1.0;\n\t}\n\t#pragma unroll_loop_end\n\t#endif\n\t#if NUM_POINT_LIGHT_SHADOWS > 0\n\tPointLightShadow pointLight;\n\t#pragma unroll_loop_start\n\tfor ( int i = 0; i < NUM_POINT_LIGHT_SHADOWS; i ++ ) {\n\t\tpointLight = pointLightShadows[ i ];\n\t\tshadow *= receiveShadow ? getPointShadow( pointShadowMap[ i ], pointLight.shadowMapSize, pointLight.shadowBias, pointLight.shadowRadius, vPointShadowCoord[ i ], pointLight.shadowCameraNear, pointLight.shadowCameraFar ) : 1.0;\n\t}\n\t#pragma unroll_loop_end\n\t#endif\n\t#endif\n\treturn shadow;\n}",skinbase_vertex:"#ifdef USE_SKINNING\n\tmat4 boneMatX = getBoneMatrix( skinIndex.x );\n\tmat4 boneMatY = getBoneMatrix( skinIndex.y );\n\tmat4 boneMatZ = getBoneMatrix( skinIndex.z );\n\tmat4 boneMatW = getBoneMatrix( skinIndex.w );\n#endif",skinning_pars_vertex:"#ifdef USE_SKINNING\n\tuniform mat4 bindMatrix;\n\tuniform mat4 bindMatrixInverse;\n\tuniform highp sampler2D boneTexture;\n\tuniform int boneTextureSize;\n\tmat4 getBoneMatrix( const in float i ) {\n\t\tfloat j = i * 4.0;\n\t\tfloat x = mod( j, float( boneTextureSize ) );\n\t\tfloat y = floor( j / float( boneTextureSize ) );\n\t\tfloat dx = 1.0 / float( boneTextureSize );\n\t\tfloat dy = 1.0 / float( boneTextureSize );\n\t\ty = dy * ( y + 0.5 );\n\t\tvec4 v1 = texture2D( boneTexture, vec2( dx * ( x + 0.5 ), y ) );\n\t\tvec4 v2 = texture2D( boneTexture, vec2( dx * ( x + 1.5 ), y ) );\n\t\tvec4 v3 = texture2D( boneTexture, vec2( dx * ( x + 2.5 ), y ) );\n\t\tvec4 v4 = texture2D( boneTexture, vec2( dx * ( x + 3.5 ), y ) );\n\t\tmat4 bone = mat4( v1, v2, v3, v4 );\n\t\treturn bone;\n\t}\n#endif",skinning_vertex:"#ifdef USE_SKINNING\n\tvec4 skinVertex = bindMatrix * vec4( transformed, 1.0 );\n\tvec4 skinned = vec4( 0.0 );\n\tskinned += boneMatX * skinVertex * skinWeight.x;\n\tskinned += boneMatY * skinVertex * skinWeight.y;\n\tskinned += boneMatZ * skinVertex * skinWeight.z;\n\tskinned += boneMatW * skinVertex * skinWeight.w;\n\ttransformed = ( bindMatrixInverse * skinned ).xyz;\n#endif",skinnormal_vertex:"#ifdef USE_SKINNING\n\tmat4 skinMatrix = mat4( 0.0 );\n\tskinMatrix += skinWeight.x * boneMatX;\n\tskinMatrix += skinWeight.y * boneMatY;\n\tskinMatrix += skinWeight.z * boneMatZ;\n\tskinMatrix += skinWeight.w * boneMatW;\n\tskinMatrix = bindMatrixInverse * skinMatrix * bindMatrix;\n\tobjectNormal = vec4( skinMatrix * vec4( objectNormal, 0.0 ) ).xyz;\n\t#ifdef USE_TANGENT\n\t\tobjectTangent = vec4( skinMatrix * vec4( objectTangent, 0.0 ) ).xyz;\n\t#endif\n#endif",specularmap_fragment:"float specularStrength;\n#ifdef USE_SPECULARMAP\n\tvec4 texelSpecular = texture2D( specularMap, vUv );\n\tspecularStrength = texelSpecular.r;\n#else\n\tspecularStrength = 1.0;\n#endif",specularmap_pars_fragment:"#ifdef USE_SPECULARMAP\n\tuniform sampler2D specularMap;\n#endif",tonemapping_fragment:"#if defined( TONE_MAPPING )\n\tgl_FragColor.rgb = toneMapping( gl_FragColor.rgb );\n#endif",tonemapping_pars_fragment:"#ifndef saturate\n#define saturate( a ) clamp( a, 0.0, 1.0 )\n#endif\nuniform float toneMappingExposure;\nvec3 LinearToneMapping( vec3 color ) {\n\treturn toneMappingExposure * color;\n}\nvec3 ReinhardToneMapping( vec3 color ) {\n\tcolor *= toneMappingExposure;\n\treturn saturate( color / ( vec3( 1.0 ) + color ) );\n}\nvec3 OptimizedCineonToneMapping( vec3 color ) {\n\tcolor *= toneMappingExposure;\n\tcolor = max( vec3( 0.0 ), color - 0.004 );\n\treturn pow( ( color * ( 6.2 * color + 0.5 ) ) / ( color * ( 6.2 * color + 1.7 ) + 0.06 ), vec3( 2.2 ) );\n}\nvec3 RRTAndODTFit( vec3 v ) {\n\tvec3 a = v * ( v + 0.0245786 ) - 0.000090537;\n\tvec3 b = v * ( 0.983729 * v + 0.4329510 ) + 0.238081;\n\treturn a / b;\n}\nvec3 ACESFilmicToneMapping( vec3 color ) {\n\tconst mat3 ACESInputMat = mat3(\n\t\tvec3( 0.59719, 0.07600, 0.02840 ),\t\tvec3( 0.35458, 0.90834, 0.13383 ),\n\t\tvec3( 0.04823, 0.01566, 0.83777 )\n\t);\n\tconst mat3 ACESOutputMat = mat3(\n\t\tvec3( 1.60475, -0.10208, -0.00327 ),\t\tvec3( -0.53108, 1.10813, -0.07276 ),\n\t\tvec3( -0.07367, -0.00605, 1.07602 )\n\t);\n\tcolor *= toneMappingExposure / 0.6;\n\tcolor = ACESInputMat * color;\n\tcolor = RRTAndODTFit( color );\n\tcolor = ACESOutputMat * color;\n\treturn saturate( color );\n}\nvec3 CustomToneMapping( vec3 color ) { return color; }",transmission_fragment:"#ifdef USE_TRANSMISSION\n\tmaterial.transmission = transmission;\n\tmaterial.transmissionAlpha = 1.0;\n\tmaterial.thickness = thickness;\n\tmaterial.attenuationDistance = attenuationDistance;\n\tmaterial.attenuationColor = attenuationColor;\n\t#ifdef USE_TRANSMISSIONMAP\n\t\tmaterial.transmission *= texture2D( transmissionMap, vUv ).r;\n\t#endif\n\t#ifdef USE_THICKNESSMAP\n\t\tmaterial.thickness *= texture2D( thicknessMap, vUv ).g;\n\t#endif\n\tvec3 pos = vWorldPosition;\n\tvec3 v = normalize( cameraPosition - pos );\n\tvec3 n = inverseTransformDirection( normal, viewMatrix );\n\tvec4 transmission = getIBLVolumeRefraction(\n\t\tn, v, material.roughness, material.diffuseColor, material.specularColor, material.specularF90,\n\t\tpos, modelMatrix, viewMatrix, projectionMatrix, material.ior, material.thickness,\n\t\tmaterial.attenuationColor, material.attenuationDistance );\n\tmaterial.transmissionAlpha = mix( material.transmissionAlpha, transmission.a, material.transmission );\n\ttotalDiffuse = mix( totalDiffuse, transmission.rgb, material.transmission );\n#endif",transmission_pars_fragment:"#ifdef USE_TRANSMISSION\n\tuniform float transmission;\n\tuniform float thickness;\n\tuniform float attenuationDistance;\n\tuniform vec3 attenuationColor;\n\t#ifdef USE_TRANSMISSIONMAP\n\t\tuniform sampler2D transmissionMap;\n\t#endif\n\t#ifdef USE_THICKNESSMAP\n\t\tuniform sampler2D thicknessMap;\n\t#endif\n\tuniform vec2 transmissionSamplerSize;\n\tuniform sampler2D transmissionSamplerMap;\n\tuniform mat4 modelMatrix;\n\tuniform mat4 projectionMatrix;\n\tvarying vec3 vWorldPosition;\n\tvec3 getVolumeTransmissionRay( const in vec3 n, const in vec3 v, const in float thickness, const in float ior, const in mat4 modelMatrix ) {\n\t\tvec3 refractionVector = refract( - v, normalize( n ), 1.0 / ior );\n\t\tvec3 modelScale;\n\t\tmodelScale.x = length( vec3( modelMatrix[ 0 ].xyz ) );\n\t\tmodelScale.y = length( vec3( modelMatrix[ 1 ].xyz ) );\n\t\tmodelScale.z = length( vec3( modelMatrix[ 2 ].xyz ) );\n\t\treturn normalize( refractionVector ) * thickness * modelScale;\n\t}\n\tfloat applyIorToRoughness( const in float roughness, const in float ior ) {\n\t\treturn roughness * clamp( ior * 2.0 - 2.0, 0.0, 1.0 );\n\t}\n\tvec4 getTransmissionSample( const in vec2 fragCoord, const in float roughness, const in float ior ) {\n\t\tfloat lod = log2( transmissionSamplerSize.x ) * applyIorToRoughness( roughness, ior );\n\t\treturn textureBicubic( transmissionSamplerMap, fragCoord.xy, lod );\n\t}\n\tvec3 applyVolumeAttenuation( const in vec3 radiance, const in float transmissionDistance, const in vec3 attenuationColor, const in float attenuationDistance ) {\n\t\tif ( isinf( attenuationDistance ) ) {\n\t\t\treturn radiance;\n\t\t} else {\n\t\t\tvec3 attenuationCoefficient = -log( attenuationColor ) / attenuationDistance;\n\t\t\tvec3 transmittance = exp( - attenuationCoefficient * transmissionDistance );\t\t\treturn transmittance * radiance;\n\t\t}\n\t}\n\tvec4 getIBLVolumeRefraction( const in vec3 n, const in vec3 v, const in float roughness, const in vec3 diffuseColor,\n\t\tconst in vec3 specularColor, const in float specularF90, const in vec3 position, const in mat4 modelMatrix,\n\t\tconst in mat4 viewMatrix, const in mat4 projMatrix, const in float ior, const in float thickness,\n\t\tconst in vec3 attenuationColor, const in float attenuationDistance ) {\n\t\tvec3 transmissionRay = getVolumeTransmissionRay( n, v, thickness, ior, modelMatrix );\n\t\tvec3 refractedRayExit = position + transmissionRay;\n\t\tvec4 ndcPos = projMatrix * viewMatrix * vec4( refractedRayExit, 1.0 );\n\t\tvec2 refractionCoords = ndcPos.xy / ndcPos.w;\n\t\trefractionCoords += 1.0;\n\t\trefractionCoords /= 2.0;\n\t\tvec4 transmittedLight = getTransmissionSample( refractionCoords, roughness, ior );\n\t\tvec3 attenuatedColor = applyVolumeAttenuation( transmittedLight.rgb, length( transmissionRay ), attenuationColor, attenuationDistance );\n\t\tvec3 F = EnvironmentBRDF( n, v, specularColor, specularF90, roughness );\n\t\treturn vec4( ( 1.0 - F ) * attenuatedColor * diffuseColor, transmittedLight.a );\n\t}\n#endif",uv_pars_fragment:"#if ( defined( USE_UV ) && ! defined( UVS_VERTEX_ONLY ) )\n\tvarying vec2 vUv;\n#endif",uv_pars_vertex:"#ifdef USE_UV\n\t#ifdef UVS_VERTEX_ONLY\n\t\tvec2 vUv;\n\t#else\n\t\tvarying vec2 vUv;\n\t#endif\n\tuniform mat3 uvTransform;\n#endif",uv_vertex:"#ifdef USE_UV\n\tvUv = ( uvTransform * vec3( uv, 1 ) ).xy;\n#endif",uv2_pars_fragment:"#if defined( USE_LIGHTMAP ) || defined( USE_AOMAP )\n\tvarying vec2 vUv2;\n#endif",uv2_pars_vertex:"#if defined( USE_LIGHTMAP ) || defined( USE_AOMAP )\n\tattribute vec2 uv2;\n\tvarying vec2 vUv2;\n\tuniform mat3 uv2Transform;\n#endif",uv2_vertex:"#if defined( USE_LIGHTMAP ) || defined( USE_AOMAP )\n\tvUv2 = ( uv2Transform * vec3( uv2, 1 ) ).xy;\n#endif",worldpos_vertex:"#if defined( USE_ENVMAP ) || defined( DISTANCE ) || defined ( USE_SHADOWMAP ) || defined ( USE_TRANSMISSION ) || NUM_SPOT_LIGHT_COORDS > 0\n\tvec4 worldPosition = vec4( transformed, 1.0 );\n\t#ifdef USE_INSTANCING\n\t\tworldPosition = instanceMatrix * worldPosition;\n\t#endif\n\tworldPosition = modelMatrix * worldPosition;\n#endif",background_vert:"varying vec2 vUv;\nuniform mat3 uvTransform;\nvoid main() {\n\tvUv = ( uvTransform * vec3( uv, 1 ) ).xy;\n\tgl_Position = vec4( position.xy, 1.0, 1.0 );\n}",background_frag:"uniform sampler2D t2D;\nuniform float backgroundIntensity;\nvarying vec2 vUv;\nvoid main() {\n\tvec4 texColor = texture2D( t2D, vUv );\n\t#ifdef DECODE_VIDEO_TEXTURE\n\t\ttexColor = vec4( mix( pow( texColor.rgb * 0.9478672986 + vec3( 0.0521327014 ), vec3( 2.4 ) ), texColor.rgb * 0.0773993808, vec3( lessThanEqual( texColor.rgb, vec3( 0.04045 ) ) ) ), texColor.w );\n\t#endif\n\ttexColor.rgb *= backgroundIntensity;\n\tgl_FragColor = texColor;\n\t#include \n\t#include \n}",backgroundCube_vert:"varying vec3 vWorldDirection;\n#include \nvoid main() {\n\tvWorldDirection = transformDirection( position, modelMatrix );\n\t#include \n\t#include \n\tgl_Position.z = gl_Position.w;\n}",backgroundCube_frag:"#ifdef ENVMAP_TYPE_CUBE\n\tuniform samplerCube envMap;\n#elif defined( ENVMAP_TYPE_CUBE_UV )\n\tuniform sampler2D envMap;\n#endif\nuniform float flipEnvMap;\nuniform float backgroundBlurriness;\nuniform float backgroundIntensity;\nvarying vec3 vWorldDirection;\n#include \nvoid main() {\n\t#ifdef ENVMAP_TYPE_CUBE\n\t\tvec4 texColor = textureCube( envMap, vec3( flipEnvMap * vWorldDirection.x, vWorldDirection.yz ) );\n\t#elif defined( ENVMAP_TYPE_CUBE_UV )\n\t\tvec4 texColor = textureCubeUV( envMap, vWorldDirection, backgroundBlurriness );\n\t#else\n\t\tvec4 texColor = vec4( 0.0, 0.0, 0.0, 1.0 );\n\t#endif\n\ttexColor.rgb *= backgroundIntensity;\n\tgl_FragColor = texColor;\n\t#include \n\t#include \n}",cube_vert:"varying vec3 vWorldDirection;\n#include \nvoid main() {\n\tvWorldDirection = transformDirection( position, modelMatrix );\n\t#include \n\t#include \n\tgl_Position.z = gl_Position.w;\n}",cube_frag:"uniform samplerCube tCube;\nuniform float tFlip;\nuniform float opacity;\nvarying vec3 vWorldDirection;\nvoid main() {\n\tvec4 texColor = textureCube( tCube, vec3( tFlip * vWorldDirection.x, vWorldDirection.yz ) );\n\tgl_FragColor = texColor;\n\tgl_FragColor.a *= opacity;\n\t#include \n\t#include \n}",depth_vert:"#include \n#include \n#include \n#include \n#include \n#include \n#include \nvarying vec2 vHighPrecisionZW;\nvoid main() {\n\t#include \n\t#include \n\t#ifdef USE_DISPLACEMENTMAP\n\t\t#include \n\t\t#include \n\t\t#include \n\t#endif\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\tvHighPrecisionZW = gl_Position.zw;\n}",depth_frag:"#if DEPTH_PACKING == 3200\n\tuniform float opacity;\n#endif\n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \nvarying vec2 vHighPrecisionZW;\nvoid main() {\n\t#include \n\tvec4 diffuseColor = vec4( 1.0 );\n\t#if DEPTH_PACKING == 3200\n\t\tdiffuseColor.a = opacity;\n\t#endif\n\t#include \n\t#include \n\t#include \n\t#include \n\tfloat fragCoordZ = 0.5 * vHighPrecisionZW[0] / vHighPrecisionZW[1] + 0.5;\n\t#if DEPTH_PACKING == 3200\n\t\tgl_FragColor = vec4( vec3( 1.0 - fragCoordZ ), opacity );\n\t#elif DEPTH_PACKING == 3201\n\t\tgl_FragColor = packDepthToRGBA( fragCoordZ );\n\t#endif\n}",distanceRGBA_vert:"#define DISTANCE\nvarying vec3 vWorldPosition;\n#include \n#include \n#include \n#include \n#include \n#include \nvoid main() {\n\t#include \n\t#include \n\t#ifdef USE_DISPLACEMENTMAP\n\t\t#include \n\t\t#include \n\t\t#include \n\t#endif\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\tvWorldPosition = worldPosition.xyz;\n}",distanceRGBA_frag:"#define DISTANCE\nuniform vec3 referencePosition;\nuniform float nearDistance;\nuniform float farDistance;\nvarying vec3 vWorldPosition;\n#include \n#include \n#include \n#include \n#include \n#include \n#include \nvoid main () {\n\t#include \n\tvec4 diffuseColor = vec4( 1.0 );\n\t#include \n\t#include \n\t#include \n\tfloat dist = length( vWorldPosition - referencePosition );\n\tdist = ( dist - nearDistance ) / ( farDistance - nearDistance );\n\tdist = saturate( dist );\n\tgl_FragColor = packDepthToRGBA( dist );\n}",equirect_vert:"varying vec3 vWorldDirection;\n#include \nvoid main() {\n\tvWorldDirection = transformDirection( position, modelMatrix );\n\t#include \n\t#include \n}",equirect_frag:"uniform sampler2D tEquirect;\nvarying vec3 vWorldDirection;\n#include \nvoid main() {\n\tvec3 direction = normalize( vWorldDirection );\n\tvec2 sampleUV = equirectUv( direction );\n\tgl_FragColor = texture2D( tEquirect, sampleUV );\n\t#include \n\t#include \n}",linedashed_vert:"uniform float scale;\nattribute float lineDistance;\nvarying float vLineDistance;\n#include \n#include \n#include \n#include \n#include \n#include \nvoid main() {\n\tvLineDistance = scale * lineDistance;\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n}",linedashed_frag:"uniform vec3 diffuse;\nuniform float opacity;\nuniform float dashSize;\nuniform float totalSize;\nvarying float vLineDistance;\n#include \n#include \n#include \n#include \n#include \nvoid main() {\n\t#include \n\tif ( mod( vLineDistance, totalSize ) > dashSize ) {\n\t\tdiscard;\n\t}\n\tvec3 outgoingLight = vec3( 0.0 );\n\tvec4 diffuseColor = vec4( diffuse, opacity );\n\t#include \n\t#include \n\toutgoingLight = diffuseColor.rgb;\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n}",meshbasic_vert:"#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \nvoid main() {\n\t#include \n\t#include \n\t#include \n\t#include \n\t#if defined ( USE_ENVMAP ) || defined ( USE_SKINNING )\n\t\t#include \n\t\t#include \n\t\t#include \n\t\t#include \n\t\t#include \n\t#endif\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n}",meshbasic_frag:"uniform vec3 diffuse;\nuniform float opacity;\n#ifndef FLAT_SHADED\n\tvarying vec3 vNormal;\n#endif\n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \nvoid main() {\n\t#include \n\tvec4 diffuseColor = vec4( diffuse, opacity );\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\tReflectedLight reflectedLight = ReflectedLight( vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ) );\n\t#ifdef USE_LIGHTMAP\n\t\tvec4 lightMapTexel = texture2D( lightMap, vUv2 );\n\t\treflectedLight.indirectDiffuse += lightMapTexel.rgb * lightMapIntensity * RECIPROCAL_PI;\n\t#else\n\t\treflectedLight.indirectDiffuse += vec3( 1.0 );\n\t#endif\n\t#include \n\treflectedLight.indirectDiffuse *= diffuseColor.rgb;\n\tvec3 outgoingLight = reflectedLight.indirectDiffuse;\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n}",meshlambert_vert:"#define LAMBERT\nvarying vec3 vViewPosition;\n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \nvoid main() {\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\tvViewPosition = - mvPosition.xyz;\n\t#include \n\t#include \n\t#include \n\t#include \n}",meshlambert_frag:"#define LAMBERT\nuniform vec3 diffuse;\nuniform vec3 emissive;\nuniform float opacity;\n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \nvoid main() {\n\t#include \n\tvec4 diffuseColor = vec4( diffuse, opacity );\n\tReflectedLight reflectedLight = ReflectedLight( vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ) );\n\tvec3 totalEmissiveRadiance = emissive;\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\tvec3 outgoingLight = reflectedLight.directDiffuse + reflectedLight.indirectDiffuse + totalEmissiveRadiance;\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n}",meshmatcap_vert:"#define MATCAP\nvarying vec3 vViewPosition;\n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \nvoid main() {\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\tvViewPosition = - mvPosition.xyz;\n}",meshmatcap_frag:"#define MATCAP\nuniform vec3 diffuse;\nuniform float opacity;\nuniform sampler2D matcap;\nvarying vec3 vViewPosition;\n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \nvoid main() {\n\t#include \n\tvec4 diffuseColor = vec4( diffuse, opacity );\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\tvec3 viewDir = normalize( vViewPosition );\n\tvec3 x = normalize( vec3( viewDir.z, 0.0, - viewDir.x ) );\n\tvec3 y = cross( viewDir, x );\n\tvec2 uv = vec2( dot( x, normal ), dot( y, normal ) ) * 0.495 + 0.5;\n\t#ifdef USE_MATCAP\n\t\tvec4 matcapColor = texture2D( matcap, uv );\n\t#else\n\t\tvec4 matcapColor = vec4( vec3( mix( 0.2, 0.8, uv.y ) ), 1.0 );\n\t#endif\n\tvec3 outgoingLight = diffuseColor.rgb * matcapColor.rgb;\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n}",meshnormal_vert:"#define NORMAL\n#if defined( FLAT_SHADED ) || defined( USE_BUMPMAP ) || defined( TANGENTSPACE_NORMALMAP )\n\tvarying vec3 vViewPosition;\n#endif\n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \nvoid main() {\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n#if defined( FLAT_SHADED ) || defined( USE_BUMPMAP ) || defined( TANGENTSPACE_NORMALMAP )\n\tvViewPosition = - mvPosition.xyz;\n#endif\n}",meshnormal_frag:"#define NORMAL\nuniform float opacity;\n#if defined( FLAT_SHADED ) || defined( USE_BUMPMAP ) || defined( TANGENTSPACE_NORMALMAP )\n\tvarying vec3 vViewPosition;\n#endif\n#include \n#include \n#include \n#include \n#include \n#include \n#include \nvoid main() {\n\t#include \n\t#include \n\t#include \n\t#include \n\tgl_FragColor = vec4( packNormalToRGB( normal ), opacity );\n\t#ifdef OPAQUE\n\t\tgl_FragColor.a = 1.0;\n\t#endif\n}",meshphong_vert:"#define PHONG\nvarying vec3 vViewPosition;\n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \nvoid main() {\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\tvViewPosition = - mvPosition.xyz;\n\t#include \n\t#include \n\t#include \n\t#include \n}",meshphong_frag:"#define PHONG\nuniform vec3 diffuse;\nuniform vec3 emissive;\nuniform vec3 specular;\nuniform float shininess;\nuniform float opacity;\n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \nvoid main() {\n\t#include \n\tvec4 diffuseColor = vec4( diffuse, opacity );\n\tReflectedLight reflectedLight = ReflectedLight( vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ) );\n\tvec3 totalEmissiveRadiance = emissive;\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\tvec3 outgoingLight = reflectedLight.directDiffuse + reflectedLight.indirectDiffuse + reflectedLight.directSpecular + reflectedLight.indirectSpecular + totalEmissiveRadiance;\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n}",meshphysical_vert:"#define STANDARD\nvarying vec3 vViewPosition;\n#ifdef USE_TRANSMISSION\n\tvarying vec3 vWorldPosition;\n#endif\n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \nvoid main() {\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\tvViewPosition = - mvPosition.xyz;\n\t#include \n\t#include \n\t#include \n#ifdef USE_TRANSMISSION\n\tvWorldPosition = worldPosition.xyz;\n#endif\n}",meshphysical_frag:"#define STANDARD\n#ifdef PHYSICAL\n\t#define IOR\n\t#define SPECULAR\n#endif\nuniform vec3 diffuse;\nuniform vec3 emissive;\nuniform float roughness;\nuniform float metalness;\nuniform float opacity;\n#ifdef IOR\n\tuniform float ior;\n#endif\n#ifdef SPECULAR\n\tuniform float specularIntensity;\n\tuniform vec3 specularColor;\n\t#ifdef USE_SPECULARINTENSITYMAP\n\t\tuniform sampler2D specularIntensityMap;\n\t#endif\n\t#ifdef USE_SPECULARCOLORMAP\n\t\tuniform sampler2D specularColorMap;\n\t#endif\n#endif\n#ifdef USE_CLEARCOAT\n\tuniform float clearcoat;\n\tuniform float clearcoatRoughness;\n#endif\n#ifdef USE_IRIDESCENCE\n\tuniform float iridescence;\n\tuniform float iridescenceIOR;\n\tuniform float iridescenceThicknessMinimum;\n\tuniform float iridescenceThicknessMaximum;\n#endif\n#ifdef USE_SHEEN\n\tuniform vec3 sheenColor;\n\tuniform float sheenRoughness;\n\t#ifdef USE_SHEENCOLORMAP\n\t\tuniform sampler2D sheenColorMap;\n\t#endif\n\t#ifdef USE_SHEENROUGHNESSMAP\n\t\tuniform sampler2D sheenRoughnessMap;\n\t#endif\n#endif\nvarying vec3 vViewPosition;\n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \nvoid main() {\n\t#include \n\tvec4 diffuseColor = vec4( diffuse, opacity );\n\tReflectedLight reflectedLight = ReflectedLight( vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ) );\n\tvec3 totalEmissiveRadiance = emissive;\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\tvec3 totalDiffuse = reflectedLight.directDiffuse + reflectedLight.indirectDiffuse;\n\tvec3 totalSpecular = reflectedLight.directSpecular + reflectedLight.indirectSpecular;\n\t#include \n\tvec3 outgoingLight = totalDiffuse + totalSpecular + totalEmissiveRadiance;\n\t#ifdef USE_SHEEN\n\t\tfloat sheenEnergyComp = 1.0 - 0.157 * max3( material.sheenColor );\n\t\toutgoingLight = outgoingLight * sheenEnergyComp + sheenSpecular;\n\t#endif\n\t#ifdef USE_CLEARCOAT\n\t\tfloat dotNVcc = saturate( dot( geometry.clearcoatNormal, geometry.viewDir ) );\n\t\tvec3 Fcc = F_Schlick( material.clearcoatF0, material.clearcoatF90, dotNVcc );\n\t\toutgoingLight = outgoingLight * ( 1.0 - material.clearcoat * Fcc ) + clearcoatSpecular * material.clearcoat;\n\t#endif\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n}",meshtoon_vert:"#define TOON\nvarying vec3 vViewPosition;\n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \nvoid main() {\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\tvViewPosition = - mvPosition.xyz;\n\t#include \n\t#include \n\t#include \n}",meshtoon_frag:"#define TOON\nuniform vec3 diffuse;\nuniform vec3 emissive;\nuniform float opacity;\n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \nvoid main() {\n\t#include \n\tvec4 diffuseColor = vec4( diffuse, opacity );\n\tReflectedLight reflectedLight = ReflectedLight( vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ) );\n\tvec3 totalEmissiveRadiance = emissive;\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\tvec3 outgoingLight = reflectedLight.directDiffuse + reflectedLight.indirectDiffuse + totalEmissiveRadiance;\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n}",points_vert:"uniform float size;\nuniform float scale;\n#include \n#include \n#include \n#include \n#include \n#include \nvoid main() {\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\tgl_PointSize = size;\n\t#ifdef USE_SIZEATTENUATION\n\t\tbool isPerspective = isPerspectiveMatrix( projectionMatrix );\n\t\tif ( isPerspective ) gl_PointSize *= ( scale / - mvPosition.z );\n\t#endif\n\t#include \n\t#include \n\t#include \n\t#include \n}",points_frag:"uniform vec3 diffuse;\nuniform float opacity;\n#include \n#include \n#include \n#include \n#include \n#include \n#include \nvoid main() {\n\t#include \n\tvec3 outgoingLight = vec3( 0.0 );\n\tvec4 diffuseColor = vec4( diffuse, opacity );\n\t#include \n\t#include \n\t#include \n\t#include \n\toutgoingLight = diffuseColor.rgb;\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n}",shadow_vert:"#include \n#include \n#include \n#include \n#include \n#include \nvoid main() {\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n}",shadow_frag:"uniform vec3 color;\nuniform float opacity;\n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \nvoid main() {\n\t#include \n\tgl_FragColor = vec4( color, opacity * ( 1.0 - getShadowMask() ) );\n\t#include \n\t#include \n\t#include \n}",sprite_vert:"uniform float rotation;\nuniform vec2 center;\n#include \n#include \n#include \n#include \n#include \nvoid main() {\n\t#include \n\tvec4 mvPosition = modelViewMatrix * vec4( 0.0, 0.0, 0.0, 1.0 );\n\tvec2 scale;\n\tscale.x = length( vec3( modelMatrix[ 0 ].x, modelMatrix[ 0 ].y, modelMatrix[ 0 ].z ) );\n\tscale.y = length( vec3( modelMatrix[ 1 ].x, modelMatrix[ 1 ].y, modelMatrix[ 1 ].z ) );\n\t#ifndef USE_SIZEATTENUATION\n\t\tbool isPerspective = isPerspectiveMatrix( projectionMatrix );\n\t\tif ( isPerspective ) scale *= - mvPosition.z;\n\t#endif\n\tvec2 alignedPosition = ( position.xy - ( center - vec2( 0.5 ) ) ) * scale;\n\tvec2 rotatedPosition;\n\trotatedPosition.x = cos( rotation ) * alignedPosition.x - sin( rotation ) * alignedPosition.y;\n\trotatedPosition.y = sin( rotation ) * alignedPosition.x + cos( rotation ) * alignedPosition.y;\n\tmvPosition.xy += rotatedPosition;\n\tgl_Position = projectionMatrix * mvPosition;\n\t#include \n\t#include \n\t#include \n}",sprite_frag:"uniform vec3 diffuse;\nuniform float opacity;\n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \nvoid main() {\n\t#include \n\tvec3 outgoingLight = vec3( 0.0 );\n\tvec4 diffuseColor = vec4( diffuse, opacity );\n\t#include \n\t#include \n\t#include \n\t#include \n\toutgoingLight = diffuseColor.rgb;\n\t#include \n\t#include \n\t#include \n\t#include \n}"},Br={common:{diffuse:{value:new zn(16777215)},opacity:{value:1},map:{value:null},uvTransform:{value:new je},uv2Transform:{value:new je},alphaMap:{value:null},alphaTest:{value:0}},specularmap:{specularMap:{value:null}},envmap:{envMap:{value:null},flipEnvMap:{value:-1},reflectivity:{value:1},ior:{value:1.5},refractionRatio:{value:.98}},aomap:{aoMap:{value:null},aoMapIntensity:{value:1}},lightmap:{lightMap:{value:null},lightMapIntensity:{value:1}},emissivemap:{emissiveMap:{value:null}},bumpmap:{bumpMap:{value:null},bumpScale:{value:1}},normalmap:{normalMap:{value:null},normalScale:{value:new We(1,1)}},displacementmap:{displacementMap:{value:null},displacementScale:{value:1},displacementBias:{value:0}},roughnessmap:{roughnessMap:{value:null}},metalnessmap:{metalnessMap:{value:null}},gradientmap:{gradientMap:{value:null}},fog:{fogDensity:{value:25e-5},fogNear:{value:1},fogFar:{value:2e3},fogColor:{value:new zn(16777215)}},lights:{ambientLightColor:{value:[]},lightProbe:{value:[]},directionalLights:{value:[],properties:{direction:{},color:{}}},directionalLightShadows:{value:[],properties:{shadowBias:{},shadowNormalBias:{},shadowRadius:{},shadowMapSize:{}}},directionalShadowMap:{value:[]},directionalShadowMatrix:{value:[]},spotLights:{value:[],properties:{color:{},position:{},direction:{},distance:{},coneCos:{},penumbraCos:{},decay:{}}},spotLightShadows:{value:[],properties:{shadowBias:{},shadowNormalBias:{},shadowRadius:{},shadowMapSize:{}}},spotLightMap:{value:[]},spotShadowMap:{value:[]},spotLightMatrix:{value:[]},pointLights:{value:[],properties:{color:{},position:{},decay:{},distance:{}}},pointLightShadows:{value:[],properties:{shadowBias:{},shadowNormalBias:{},shadowRadius:{},shadowMapSize:{},shadowCameraNear:{},shadowCameraFar:{}}},pointShadowMap:{value:[]},pointShadowMatrix:{value:[]},hemisphereLights:{value:[],properties:{direction:{},skyColor:{},groundColor:{}}},rectAreaLights:{value:[],properties:{color:{},position:{},width:{},height:{}}},ltc_1:{value:null},ltc_2:{value:null}},points:{diffuse:{value:new zn(16777215)},opacity:{value:1},size:{value:1},scale:{value:1},map:{value:null},alphaMap:{value:null},alphaTest:{value:0},uvTransform:{value:new je}},sprite:{diffuse:{value:new zn(16777215)},opacity:{value:1},center:{value:new We(.5,.5)},rotation:{value:0},map:{value:null},alphaMap:{value:null},alphaTest:{value:0},uvTransform:{value:new je}}},Fr={basic:{uniforms:vr([Br.common,Br.specularmap,Br.envmap,Br.aomap,Br.lightmap,Br.fog]),vertexShader:Ur.meshbasic_vert,fragmentShader:Ur.meshbasic_frag},lambert:{uniforms:vr([Br.common,Br.specularmap,Br.envmap,Br.aomap,Br.lightmap,Br.emissivemap,Br.bumpmap,Br.normalmap,Br.displacementmap,Br.fog,Br.lights,{emissive:{value:new zn(0)}}]),vertexShader:Ur.meshlambert_vert,fragmentShader:Ur.meshlambert_frag},phong:{uniforms:vr([Br.common,Br.specularmap,Br.envmap,Br.aomap,Br.lightmap,Br.emissivemap,Br.bumpmap,Br.normalmap,Br.displacementmap,Br.fog,Br.lights,{emissive:{value:new zn(0)},specular:{value:new zn(1118481)},shininess:{value:30}}]),vertexShader:Ur.meshphong_vert,fragmentShader:Ur.meshphong_frag},standard:{uniforms:vr([Br.common,Br.envmap,Br.aomap,Br.lightmap,Br.emissivemap,Br.bumpmap,Br.normalmap,Br.displacementmap,Br.roughnessmap,Br.metalnessmap,Br.fog,Br.lights,{emissive:{value:new zn(0)},roughness:{value:1},metalness:{value:0},envMapIntensity:{value:1}}]),vertexShader:Ur.meshphysical_vert,fragmentShader:Ur.meshphysical_frag},toon:{uniforms:vr([Br.common,Br.aomap,Br.lightmap,Br.emissivemap,Br.bumpmap,Br.normalmap,Br.displacementmap,Br.gradientmap,Br.fog,Br.lights,{emissive:{value:new zn(0)}}]),vertexShader:Ur.meshtoon_vert,fragmentShader:Ur.meshtoon_frag},matcap:{uniforms:vr([Br.common,Br.bumpmap,Br.normalmap,Br.displacementmap,Br.fog,{matcap:{value:null}}]),vertexShader:Ur.meshmatcap_vert,fragmentShader:Ur.meshmatcap_frag},points:{uniforms:vr([Br.points,Br.fog]),vertexShader:Ur.points_vert,fragmentShader:Ur.points_frag},dashed:{uniforms:vr([Br.common,Br.fog,{scale:{value:1},dashSize:{value:1},totalSize:{value:2}}]),vertexShader:Ur.linedashed_vert,fragmentShader:Ur.linedashed_frag},depth:{uniforms:vr([Br.common,Br.displacementmap]),vertexShader:Ur.depth_vert,fragmentShader:Ur.depth_frag},normal:{uniforms:vr([Br.common,Br.bumpmap,Br.normalmap,Br.displacementmap,{opacity:{value:1}}]),vertexShader:Ur.meshnormal_vert,fragmentShader:Ur.meshnormal_frag},sprite:{uniforms:vr([Br.sprite,Br.fog]),vertexShader:Ur.sprite_vert,fragmentShader:Ur.sprite_frag},background:{uniforms:{uvTransform:{value:new je},t2D:{value:null},backgroundIntensity:{value:1}},vertexShader:Ur.background_vert,fragmentShader:Ur.background_frag},backgroundCube:{uniforms:{envMap:{value:null},flipEnvMap:{value:-1},backgroundBlurriness:{value:0},backgroundIntensity:{value:1}},vertexShader:Ur.backgroundCube_vert,fragmentShader:Ur.backgroundCube_frag},cube:{uniforms:{tCube:{value:null},tFlip:{value:-1},opacity:{value:1}},vertexShader:Ur.cube_vert,fragmentShader:Ur.cube_frag},equirect:{uniforms:{tEquirect:{value:null}},vertexShader:Ur.equirect_vert,fragmentShader:Ur.equirect_frag},distanceRGBA:{uniforms:vr([Br.common,Br.displacementmap,{referencePosition:{value:new $e},nearDistance:{value:1},farDistance:{value:1e3}}]),vertexShader:Ur.distanceRGBA_vert,fragmentShader:Ur.distanceRGBA_frag},shadow:{uniforms:vr([Br.lights,Br.fog,{color:{value:new zn(0)},opacity:{value:1}}]),vertexShader:Ur.shadow_vert,fragmentShader:Ur.shadow_frag}};Fr.physical={uniforms:vr([Fr.standard.uniforms,{clearcoat:{value:0},clearcoatMap:{value:null},clearcoatRoughness:{value:0},clearcoatRoughnessMap:{value:null},clearcoatNormalScale:{value:new We(1,1)},clearcoatNormalMap:{value:null},iridescence:{value:0},iridescenceMap:{value:null},iridescenceIOR:{value:1.3},iridescenceThicknessMinimum:{value:100},iridescenceThicknessMaximum:{value:400},iridescenceThicknessMap:{value:null},sheen:{value:0},sheenColor:{value:new zn(0)},sheenColorMap:{value:null},sheenRoughness:{value:1},sheenRoughnessMap:{value:null},transmission:{value:0},transmissionMap:{value:null},transmissionSamplerSize:{value:new We},transmissionSamplerMap:{value:null},thickness:{value:0},thicknessMap:{value:null},attenuationDistance:{value:0},attenuationColor:{value:new zn(0)},specularIntensity:{value:1},specularIntensityMap:{value:null},specularColor:{value:new zn(1,1,1)},specularColorMap:{value:null}}]),vertexShader:Ur.meshphysical_vert,fragmentShader:Ur.meshphysical_frag};const kr={r:0,b:0,g:0};function Gr(t,e,i,n,r,s,a){const o=new zn(0);let h,u,d=!0===s?0:1,p=null,m=0,f=null;function g(e,i){e.getRGB(kr,xr(t)),n.buffers.color.setClear(kr.r,kr.g,kr.b,i,a)}return{getClearColor:function(){return o},setClearColor:function(t,e=1){o.set(t),d=e,g(o,d)},getClearAlpha:function(){return d},setClearAlpha:function(t){d=t,g(o,d)},render:function(n,s){let a=!1,v=!0===s.isScene?s.background:null;if(v&&v.isTexture){v=(s.backgroundBlurriness>0?i:e).get(v)}const x=t.xr,_=x.getSession&&x.getSession();_&&"additive"===_.environmentBlendMode&&(v=null),null===v?g(o,d):v&&v.isColor&&(g(v,1),a=!0),(t.autoClear||a)&&t.clear(t.autoClearColor,t.autoClearDepth,t.autoClearStencil),v&&(v.isCubeTexture||v.mapping===et)?(void 0===u&&(u=new pr(new fr(1,1,1),new yr({name:"BackgroundCubeMaterial",uniforms:gr(Fr.backgroundCube.uniforms),vertexShader:Fr.backgroundCube.vertexShader,fragmentShader:Fr.backgroundCube.fragmentShader,side:c,depthTest:!1,depthWrite:!1,fog:!1})),u.geometry.deleteAttribute("normal"),u.geometry.deleteAttribute("uv"),u.onBeforeRender=function(t,e,i){this.matrixWorld.copyPosition(i.matrixWorld)},Object.defineProperty(u.material,"envMap",{get:function(){return this.uniforms.envMap.value}}),r.update(u)),u.material.uniforms.envMap.value=v,u.material.uniforms.flipEnvMap.value=v.isCubeTexture&&!1===v.isRenderTargetTexture?-1:1,u.material.uniforms.backgroundBlurriness.value=s.backgroundBlurriness,u.material.uniforms.backgroundIntensity.value=s.backgroundIntensity,u.material.toneMapped=v.encoding!==xe,p===v&&m===v.version&&f===t.toneMapping||(u.material.needsUpdate=!0,p=v,m=v.version,f=t.toneMapping),u.layers.enableAll(),n.unshift(u,u.geometry,u.material,0,0,null)):v&&v.isTexture&&(void 0===h&&(h=new pr(new zr(2,2),new yr({name:"BackgroundMaterial",uniforms:gr(Fr.background.uniforms),vertexShader:Fr.background.vertexShader,fragmentShader:Fr.background.fragmentShader,side:l,depthTest:!1,depthWrite:!1,fog:!1})),h.geometry.deleteAttribute("normal"),Object.defineProperty(h.material,"map",{get:function(){return this.uniforms.t2D.value}}),r.update(h)),h.material.uniforms.t2D.value=v,h.material.uniforms.backgroundIntensity.value=s.backgroundIntensity,h.material.toneMapped=v.encoding!==xe,!0===v.matrixAutoUpdate&&v.updateMatrix(),h.material.uniforms.uvTransform.value.copy(v.matrix),p===v&&m===v.version&&f===t.toneMapping||(h.material.needsUpdate=!0,p=v,m=v.version,f=t.toneMapping),h.layers.enableAll(),n.unshift(h,h.geometry,h.material,0,0,null))}}}function Vr(t,e,i,n){const r=t.getParameter(34921),s=n.isWebGL2?null:e.get("OES_vertex_array_object"),a=n.isWebGL2||null!==s,o={},l=p(null);let c=l,h=!1;function u(e){return n.isWebGL2?t.bindVertexArray(e):s.bindVertexArrayOES(e)}function d(e){return n.isWebGL2?t.deleteVertexArray(e):s.deleteVertexArrayOES(e)}function p(t){const e=[],i=[],n=[];for(let t=0;t=0){const i=r[e];let n=s[e];if(void 0===n&&("instanceMatrix"===e&&t.instanceMatrix&&(n=t.instanceMatrix),"instanceColor"===e&&t.instanceColor&&(n=t.instanceColor)),void 0===i)return!0;if(i.attribute!==n)return!0;if(n&&i.data!==n.data)return!0;a++}}return c.attributesNum!==a||c.index!==n}(r,_,d,y),M&&function(t,e,i,n){const r={},s=e.attributes;let a=0;const o=i.getAttributes();for(const e in o){if(o[e].location>=0){let i=s[e];void 0===i&&("instanceMatrix"===e&&t.instanceMatrix&&(i=t.instanceMatrix),"instanceColor"===e&&t.instanceColor&&(i=t.instanceColor));const n={};n.attribute=i,i&&i.data&&(n.data=i.data),r[e]=n,a++}}c.attributes=r,c.attributesNum=a,c.index=n}(r,_,d,y)}else{const t=!0===l.wireframe;c.geometry===_.id&&c.program===d.id&&c.wireframe===t||(c.geometry=_.id,c.program=d.id,c.wireframe=t,M=!0)}null!==y&&i.update(y,34963),(M||h)&&(h=!1,function(r,s,a,o){if(!1===n.isWebGL2&&(r.isInstancedMesh||o.isInstancedBufferGeometry)&&null===e.get("ANGLE_instanced_arrays"))return;m();const l=o.attributes,c=a.getAttributes(),h=s.defaultAttributeValues;for(const e in c){const n=c[e];if(n.location>=0){let s=l[e];if(void 0===s&&("instanceMatrix"===e&&r.instanceMatrix&&(s=r.instanceMatrix),"instanceColor"===e&&r.instanceColor&&(s=r.instanceColor)),void 0!==s){const e=s.normalized,a=s.itemSize,l=i.get(s);if(void 0===l)continue;const c=l.buffer,h=l.type,u=l.bytesPerElement;if(s.isInterleavedBufferAttribute){const i=s.data,l=i.stride,d=s.offset;if(i.isInstancedInterleavedBuffer){for(let t=0;t0&&t.getShaderPrecisionFormat(35632,36338).precision>0)return"highp";e="mediump"}return"mediump"===e&&t.getShaderPrecisionFormat(35633,36337).precision>0&&t.getShaderPrecisionFormat(35632,36337).precision>0?"mediump":"lowp"}const s="undefined"!=typeof WebGL2RenderingContext&&t instanceof WebGL2RenderingContext;let a=void 0!==i.precision?i.precision:"highp";const o=r(a);o!==a&&(console.warn("THREE.WebGLRenderer:",a,"not supported, using",o,"instead."),a=o);const l=s||e.has("WEBGL_draw_buffers"),c=!0===i.logarithmicDepthBuffer,h=t.getParameter(34930),u=t.getParameter(35660),d=t.getParameter(3379),p=t.getParameter(34076),m=t.getParameter(34921),f=t.getParameter(36347),g=t.getParameter(36348),v=t.getParameter(36349),x=u>0,_=s||e.has("OES_texture_float");return{isWebGL2:s,drawBuffers:l,getMaxAnisotropy:function(){if(void 0!==n)return n;if(!0===e.has("EXT_texture_filter_anisotropic")){const i=e.get("EXT_texture_filter_anisotropic");n=t.getParameter(i.MAX_TEXTURE_MAX_ANISOTROPY_EXT)}else n=0;return n},getMaxPrecision:r,precision:a,logarithmicDepthBuffer:c,maxTextures:h,maxVertexTextures:u,maxTextureSize:d,maxCubemapSize:p,maxAttributes:m,maxVertexUniforms:f,maxVaryings:g,maxFragmentUniforms:v,vertexTextures:x,floatFragmentTextures:_,floatVertexTextures:x&&_,maxSamples:s?t.getParameter(36183):0}}function jr(t){const e=this;let i=null,n=0,r=!1,s=!1;const a=new Rr,o=new je,l={value:null,needsUpdate:!1};function c(t,i,n,r){const s=null!==t?t.length:0;let c=null;if(0!==s){if(c=l.value,!0!==r||null===c){const e=n+4*s,r=i.matrixWorldInverse;o.getNormalMatrix(r),(null===c||c.length0);e.numPlanes=n,e.numIntersection=0}();else{const t=s?0:n,e=4*t;let r=m.clippingState||null;l.value=r,r=c(u,o,e,h);for(let t=0;t!==e;++t)r[t]=i[t];m.clippingState=r,this.numIntersection=d?this.numPlanes:0,this.numPlanes+=t}}}function qr(t){let e=new WeakMap;function i(t,e){return e===Q?t.mapping=K:e===tt&&(t.mapping=$),t}function n(t){const i=t.target;i.removeEventListener("dispose",n);const r=e.get(i);void 0!==r&&(e.delete(i),r.dispose())}return{get:function(r){if(r&&r.isTexture&&!1===r.isRenderTargetTexture){const s=r.mapping;if(s===Q||s===tt){if(e.has(r)){return i(e.get(r).texture,r.mapping)}{const s=r.image;if(s&&s.height>0){const a=new Ar(s.height/2);return a.fromEquirectangularTexture(t,r),e.set(r,a),r.addEventListener("dispose",n),i(a.texture,r.mapping)}return null}}}return r},dispose:function(){e=new WeakMap}}}class Xr extends Mr{constructor(t=-1,e=1,i=1,n=-1,r=.1,s=2e3){super(),this.isOrthographicCamera=!0,this.type="OrthographicCamera",this.zoom=1,this.view=null,this.left=t,this.right=e,this.top=i,this.bottom=n,this.near=r,this.far=s,this.updateProjectionMatrix()}copy(t,e){return super.copy(t,e),this.left=t.left,this.right=t.right,this.top=t.top,this.bottom=t.bottom,this.near=t.near,this.far=t.far,this.zoom=t.zoom,this.view=null===t.view?null:Object.assign({},t.view),this}setViewOffset(t,e,i,n,r,s){null===this.view&&(this.view={enabled:!0,fullWidth:1,fullHeight:1,offsetX:0,offsetY:0,width:1,height:1}),this.view.enabled=!0,this.view.fullWidth=t,this.view.fullHeight=e,this.view.offsetX=i,this.view.offsetY=n,this.view.width=r,this.view.height=s,this.updateProjectionMatrix()}clearViewOffset(){null!==this.view&&(this.view.enabled=!1),this.updateProjectionMatrix()}updateProjectionMatrix(){const t=(this.right-this.left)/(2*this.zoom),e=(this.top-this.bottom)/(2*this.zoom),i=(this.right+this.left)/2,n=(this.top+this.bottom)/2;let r=i-t,s=i+t,a=n+e,o=n-e;if(null!==this.view&&this.view.enabled){const t=(this.right-this.left)/this.view.fullWidth/this.zoom,e=(this.top-this.bottom)/this.view.fullHeight/this.zoom;r+=t*this.view.offsetX,s=r+t*this.view.width,a-=e*this.view.offsetY,o=a-e*this.view.height}this.projectionMatrix.makeOrthographic(r,s,a,o,this.near,this.far),this.projectionMatrixInverse.copy(this.projectionMatrix).invert()}toJSON(t){const e=super.toJSON(t);return e.object.zoom=this.zoom,e.object.left=this.left,e.object.right=this.right,e.object.top=this.top,e.object.bottom=this.bottom,e.object.near=this.near,e.object.far=this.far,null!==this.view&&(e.object.view=Object.assign({},this.view)),e}}const Yr=4,Zr=[.125,.215,.35,.446,.526,.582],Jr=20,Kr=new Xr,$r=new zn;let Qr=null;const ts=(1+Math.sqrt(5))/2,es=1/ts,is=[new $e(1,1,1),new $e(-1,1,1),new $e(1,1,-1),new $e(-1,1,-1),new $e(0,ts,es),new $e(0,ts,-es),new $e(es,0,ts),new $e(-es,0,ts),new $e(ts,es,0),new $e(-ts,es,0)];class ns{constructor(t){this._renderer=t,this._pingPongRenderTarget=null,this._lodMax=0,this._cubeSize=0,this._lodPlanes=[],this._sizeLods=[],this._sigmas=[],this._blurMaterial=null,this._cubemapMaterial=null,this._equirectMaterial=null,this._compileMaterial(this._blurMaterial)}fromScene(t,e=0,i=.1,n=100){Qr=this._renderer.getRenderTarget(),this._setSize(256);const r=this._allocateTargets();return r.depthBuffer=!0,this._sceneToCubeUV(t,i,n,r),e>0&&this._blur(r,0,0,e),this._applyPMREM(r),this._cleanup(r),r}fromEquirectangular(t,e=null){return this._fromTexture(t,e)}fromCubemap(t,e=null){return this._fromTexture(t,e)}compileCubemapShader(){null===this._cubemapMaterial&&(this._cubemapMaterial=os(),this._compileMaterial(this._cubemapMaterial))}compileEquirectangularShader(){null===this._equirectMaterial&&(this._equirectMaterial=as(),this._compileMaterial(this._equirectMaterial))}dispose(){this._dispose(),null!==this._cubemapMaterial&&this._cubemapMaterial.dispose(),null!==this._equirectMaterial&&this._equirectMaterial.dispose()}_setSize(t){this._lodMax=Math.floor(Math.log2(t)),this._cubeSize=Math.pow(2,this._lodMax)}_dispose(){null!==this._blurMaterial&&this._blurMaterial.dispose(),null!==this._pingPongRenderTarget&&this._pingPongRenderTarget.dispose();for(let t=0;tt-Yr?o=Zr[a-t+Yr-1]:0===a&&(o=0),n.push(o);const l=1/(s-2),c=-l,h=1+l,u=[c,c,h,c,h,h,c,c,h,h,c,h],d=6,p=6,m=3,f=2,g=1,v=new Float32Array(m*p*d),x=new Float32Array(f*p*d),_=new Float32Array(g*p*d);for(let t=0;t2?0:-1,n=[e,i,0,e+2/3,i,0,e+2/3,i+1,0,e,i,0,e+2/3,i+1,0,e,i+1,0];v.set(n,m*p*t),x.set(u,f*p*t);const r=[t,t,t,t,t,t];_.set(r,g*p*t)}const y=new $n;y.setAttribute("position",new Gn(v,m)),y.setAttribute("uv",new Gn(x,f)),y.setAttribute("faceIndex",new Gn(_,g)),e.push(y),r>Yr&&r--}return{lodPlanes:e,sizeLods:i,sigmas:n}}(n)),this._blurMaterial=function(t,e,i){const n=new Float32Array(Jr),r=new $e(0,1,0),s=new yr({name:"SphericalGaussianBlur",defines:{n:Jr,CUBEUV_TEXEL_WIDTH:1/e,CUBEUV_TEXEL_HEIGHT:1/i,CUBEUV_MAX_MIP:`${t}.0`},uniforms:{envMap:{value:null},samples:{value:1},weights:{value:n},latitudinal:{value:!1},dTheta:{value:0},mipInt:{value:0},poleAxis:{value:r}},vertexShader:ls(),fragmentShader:"\n\n\t\t\tprecision mediump float;\n\t\t\tprecision mediump int;\n\n\t\t\tvarying vec3 vOutputDirection;\n\n\t\t\tuniform sampler2D envMap;\n\t\t\tuniform int samples;\n\t\t\tuniform float weights[ n ];\n\t\t\tuniform bool latitudinal;\n\t\t\tuniform float dTheta;\n\t\t\tuniform float mipInt;\n\t\t\tuniform vec3 poleAxis;\n\n\t\t\t#define ENVMAP_TYPE_CUBE_UV\n\t\t\t#include \n\n\t\t\tvec3 getSample( float theta, vec3 axis ) {\n\n\t\t\t\tfloat cosTheta = cos( theta );\n\t\t\t\t// Rodrigues' axis-angle rotation\n\t\t\t\tvec3 sampleDirection = vOutputDirection * cosTheta\n\t\t\t\t\t+ cross( axis, vOutputDirection ) * sin( theta )\n\t\t\t\t\t+ axis * dot( axis, vOutputDirection ) * ( 1.0 - cosTheta );\n\n\t\t\t\treturn bilinearCubeUV( envMap, sampleDirection, mipInt );\n\n\t\t\t}\n\n\t\t\tvoid main() {\n\n\t\t\t\tvec3 axis = latitudinal ? poleAxis : cross( poleAxis, vOutputDirection );\n\n\t\t\t\tif ( all( equal( axis, vec3( 0.0 ) ) ) ) {\n\n\t\t\t\t\taxis = vec3( vOutputDirection.z, 0.0, - vOutputDirection.x );\n\n\t\t\t\t}\n\n\t\t\t\taxis = normalize( axis );\n\n\t\t\t\tgl_FragColor = vec4( 0.0, 0.0, 0.0, 1.0 );\n\t\t\t\tgl_FragColor.rgb += weights[ 0 ] * getSample( 0.0, axis );\n\n\t\t\t\tfor ( int i = 1; i < n; i++ ) {\n\n\t\t\t\t\tif ( i >= samples ) {\n\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\t}\n\n\t\t\t\t\tfloat theta = dTheta * float( i );\n\t\t\t\t\tgl_FragColor.rgb += weights[ i ] * getSample( -1.0 * theta, axis );\n\t\t\t\t\tgl_FragColor.rgb += weights[ i ] * getSample( theta, axis );\n\n\t\t\t\t}\n\n\t\t\t}\n\t\t",blending:u,depthTest:!1,depthWrite:!1});return s}(n,t,e)}return n}_compileMaterial(t){const e=new pr(this._lodPlanes[0],t);this._renderer.compile(e,Kr)}_sceneToCubeUV(t,e,i,n){const r=new br(90,1,e,i),s=[1,-1,1,1,1,1],a=[1,1,1,-1,-1,-1],o=this._renderer,l=o.autoClear,h=o.toneMapping;o.getClearColor($r),o.toneMapping=W,o.autoClear=!1;const u=new Bn({name:"PMREM.Background",side:c,depthWrite:!1,depthTest:!1}),d=new pr(new fr,u);let p=!1;const m=t.background;m?m.isColor&&(u.color.copy(m),t.background=null,p=!0):(u.color.copy($r),p=!0);for(let e=0;e<6;e++){const i=e%3;0===i?(r.up.set(0,s[e],0),r.lookAt(a[e],0,0)):1===i?(r.up.set(0,0,s[e]),r.lookAt(0,a[e],0)):(r.up.set(0,s[e],0),r.lookAt(0,0,a[e]));const l=this._cubeSize;ss(n,i*l,e>2?l:0,l,l),o.setRenderTarget(n),p&&o.render(d,r),o.render(t,r)}d.geometry.dispose(),d.material.dispose(),o.toneMapping=h,o.autoClear=l,t.background=m}_textureToCubeUV(t,e){const i=this._renderer,n=t.mapping===K||t.mapping===$;n?(null===this._cubemapMaterial&&(this._cubemapMaterial=os()),this._cubemapMaterial.uniforms.flipEnvMap.value=!1===t.isRenderTargetTexture?-1:1):null===this._equirectMaterial&&(this._equirectMaterial=as());const r=n?this._cubemapMaterial:this._equirectMaterial,s=new pr(this._lodPlanes[0],r);r.uniforms.envMap.value=t;const a=this._cubeSize;ss(e,0,0,3*a,2*a),i.setRenderTarget(e),i.render(s,Kr)}_applyPMREM(t){const e=this._renderer,i=e.autoClear;e.autoClear=!1;for(let e=1;eJr&&console.warn(`sigmaRadians, ${r}, is too large and will clip, as it requested ${m} samples when the maximum is set to ${Jr}`);const f=[];let g=0;for(let t=0;tv-Yr?n-v+Yr:0),4*(this._cubeSize-x),3*x,2*x),o.setRenderTarget(e),o.render(c,Kr)}}function rs(t,e,i){const n=new gi(t,e,i);return n.texture.mapping=et,n.texture.name="PMREM.cubeUv",n.scissorTest=!0,n}function ss(t,e,i,n,r){t.viewport.set(e,i,n,r),t.scissor.set(e,i,n,r)}function as(){return new yr({name:"EquirectangularToCubeUV",uniforms:{envMap:{value:null}},vertexShader:ls(),fragmentShader:"\n\n\t\t\tprecision mediump float;\n\t\t\tprecision mediump int;\n\n\t\t\tvarying vec3 vOutputDirection;\n\n\t\t\tuniform sampler2D envMap;\n\n\t\t\t#include \n\n\t\t\tvoid main() {\n\n\t\t\t\tvec3 outputDirection = normalize( vOutputDirection );\n\t\t\t\tvec2 uv = equirectUv( outputDirection );\n\n\t\t\t\tgl_FragColor = vec4( texture2D ( envMap, uv ).rgb, 1.0 );\n\n\t\t\t}\n\t\t",blending:u,depthTest:!1,depthWrite:!1})}function os(){return new yr({name:"CubemapToCubeUV",uniforms:{envMap:{value:null},flipEnvMap:{value:-1}},vertexShader:ls(),fragmentShader:"\n\n\t\t\tprecision mediump float;\n\t\t\tprecision mediump int;\n\n\t\t\tuniform float flipEnvMap;\n\n\t\t\tvarying vec3 vOutputDirection;\n\n\t\t\tuniform samplerCube envMap;\n\n\t\t\tvoid main() {\n\n\t\t\t\tgl_FragColor = textureCube( envMap, vec3( flipEnvMap * vOutputDirection.x, vOutputDirection.yz ) );\n\n\t\t\t}\n\t\t",blending:u,depthTest:!1,depthWrite:!1})}function ls(){return"\n\n\t\tprecision mediump float;\n\t\tprecision mediump int;\n\n\t\tattribute float faceIndex;\n\n\t\tvarying vec3 vOutputDirection;\n\n\t\t// RH coordinate system; PMREM face-indexing convention\n\t\tvec3 getDirection( vec2 uv, float face ) {\n\n\t\t\tuv = 2.0 * uv - 1.0;\n\n\t\t\tvec3 direction = vec3( uv, 1.0 );\n\n\t\t\tif ( face == 0.0 ) {\n\n\t\t\t\tdirection = direction.zyx; // ( 1, v, u ) pos x\n\n\t\t\t} else if ( face == 1.0 ) {\n\n\t\t\t\tdirection = direction.xzy;\n\t\t\t\tdirection.xz *= -1.0; // ( -u, 1, -v ) pos y\n\n\t\t\t} else if ( face == 2.0 ) {\n\n\t\t\t\tdirection.x *= -1.0; // ( -u, v, 1 ) pos z\n\n\t\t\t} else if ( face == 3.0 ) {\n\n\t\t\t\tdirection = direction.zyx;\n\t\t\t\tdirection.xz *= -1.0; // ( -1, v, -u ) neg x\n\n\t\t\t} else if ( face == 4.0 ) {\n\n\t\t\t\tdirection = direction.xzy;\n\t\t\t\tdirection.xy *= -1.0; // ( -u, -1, v ) neg y\n\n\t\t\t} else if ( face == 5.0 ) {\n\n\t\t\t\tdirection.z *= -1.0; // ( u, v, -1 ) neg z\n\n\t\t\t}\n\n\t\t\treturn direction;\n\n\t\t}\n\n\t\tvoid main() {\n\n\t\t\tvOutputDirection = getDirection( uv, faceIndex );\n\t\t\tgl_Position = vec4( position, 1.0 );\n\n\t\t}\n\t"}function cs(t){let e=new WeakMap,i=null;function n(t){const i=t.target;i.removeEventListener("dispose",n);const r=e.get(i);void 0!==r&&(e.delete(i),r.dispose())}return{get:function(r){if(r&&r.isTexture){const s=r.mapping,a=s===Q||s===tt,o=s===K||s===$;if(a||o){if(r.isRenderTargetTexture&&!0===r.needsPMREMUpdate){r.needsPMREMUpdate=!1;let n=e.get(r);return null===i&&(i=new ns(t)),n=a?i.fromEquirectangular(r,n):i.fromCubemap(r,n),e.set(r,n),n.texture}if(e.has(r))return e.get(r).texture;{const s=r.image;if(a&&s&&s.height>0||o&&s&&function(t){let e=0;const i=6;for(let n=0;ne.maxTextureSize&&(T=Math.ceil(w/e.maxTextureSize),w=e.maxTextureSize);const A=new Float32Array(w*T*4*p),E=new vi(A,w,T,p);E.type=vt,E.needsUpdate=!0;const C=4*S;for(let R=0;R0)return t;const r=e*i;let s=bs[r];if(void 0===s&&(s=new Float32Array(r),bs[r]=s),0!==e){n.toArray(s,0);for(let n=1,r=0;n!==e;++n)r+=i,t[n].toArray(s,r)}return s}function Cs(t,e){if(t.length!==e.length)return!1;for(let i=0,n=t.length;i":" "} ${r}: ${i[t]}`)}return n.join("\n")}(t.getShaderSource(e),n)}return r}function Ta(t,e){const i=function(t){switch(t){case ve:return["Linear","( value )"];case xe:return["sRGB","( value )"];default:return console.warn("THREE.WebGLProgram: Unsupported encoding:",t),["Linear","( value )"]}}(e);return"vec4 "+t+"( vec4 value ) { return LinearTo"+i[0]+i[1]+"; }"}function Aa(t,e){let i;switch(e){case j:i="Linear";break;case q:i="Reinhard";break;case X:i="OptimizedCineon";break;case Y:i="ACESFilmic";break;case Z:i="Custom";break;default:console.warn("THREE.WebGLProgram: Unsupported toneMapping:",e),i="Linear"}return"vec3 "+t+"( vec3 color ) { return "+i+"ToneMapping( color ); }"}function Ea(t){return""!==t}function Ca(t,e){const i=e.numSpotLightShadows+e.numSpotLightMaps-e.numSpotLightShadowsWithMaps;return t.replace(/NUM_DIR_LIGHTS/g,e.numDirLights).replace(/NUM_SPOT_LIGHTS/g,e.numSpotLights).replace(/NUM_SPOT_LIGHT_MAPS/g,e.numSpotLightMaps).replace(/NUM_SPOT_LIGHT_COORDS/g,i).replace(/NUM_RECT_AREA_LIGHTS/g,e.numRectAreaLights).replace(/NUM_POINT_LIGHTS/g,e.numPointLights).replace(/NUM_HEMI_LIGHTS/g,e.numHemiLights).replace(/NUM_DIR_LIGHT_SHADOWS/g,e.numDirLightShadows).replace(/NUM_SPOT_LIGHT_SHADOWS_WITH_MAPS/g,e.numSpotLightShadowsWithMaps).replace(/NUM_SPOT_LIGHT_SHADOWS/g,e.numSpotLightShadows).replace(/NUM_POINT_LIGHT_SHADOWS/g,e.numPointLightShadows)}function La(t,e){return t.replace(/NUM_CLIPPING_PLANES/g,e.numClippingPlanes).replace(/UNION_CLIPPING_PLANES/g,e.numClippingPlanes-e.numClipIntersection)}const Ra=/^[ \t]*#include +<([\w\d./]+)>/gm;function Pa(t){return t.replace(Ra,Ia)}function Ia(t,e){const i=Ur[e];if(void 0===i)throw new Error("Can not resolve #include <"+e+">");return Pa(i)}const Da=/#pragma unroll_loop_start\s+for\s*\(\s*int\s+i\s*=\s*(\d+)\s*;\s*i\s*<\s*(\d+)\s*;\s*i\s*\+\+\s*\)\s*{([\s\S]+?)}\s+#pragma unroll_loop_end/g;function Na(t){return t.replace(Da,Oa)}function Oa(t,e,i,n){let r="";for(let t=parseInt(e);t0&&(_+="\n"),y=[g,v].filter(Ea).join("\n"),y.length>0&&(y+="\n")):(_=[za(i),"#define SHADER_NAME "+i.shaderName,v,i.instancing?"#define USE_INSTANCING":"",i.instancingColor?"#define USE_INSTANCING_COLOR":"",i.supportsVertexTextures?"#define VERTEX_TEXTURES":"",i.useFog&&i.fog?"#define USE_FOG":"",i.useFog&&i.fogExp2?"#define FOG_EXP2":"",i.map?"#define USE_MAP":"",i.envMap?"#define USE_ENVMAP":"",i.envMap?"#define "+p:"",i.lightMap?"#define USE_LIGHTMAP":"",i.aoMap?"#define USE_AOMAP":"",i.emissiveMap?"#define USE_EMISSIVEMAP":"",i.bumpMap?"#define USE_BUMPMAP":"",i.normalMap?"#define USE_NORMALMAP":"",i.normalMap&&i.objectSpaceNormalMap?"#define OBJECTSPACE_NORMALMAP":"",i.normalMap&&i.tangentSpaceNormalMap?"#define TANGENTSPACE_NORMALMAP":"",i.clearcoatMap?"#define USE_CLEARCOATMAP":"",i.clearcoatRoughnessMap?"#define USE_CLEARCOAT_ROUGHNESSMAP":"",i.clearcoatNormalMap?"#define USE_CLEARCOAT_NORMALMAP":"",i.iridescenceMap?"#define USE_IRIDESCENCEMAP":"",i.iridescenceThicknessMap?"#define USE_IRIDESCENCE_THICKNESSMAP":"",i.displacementMap&&i.supportsVertexTextures?"#define USE_DISPLACEMENTMAP":"",i.specularMap?"#define USE_SPECULARMAP":"",i.specularIntensityMap?"#define USE_SPECULARINTENSITYMAP":"",i.specularColorMap?"#define USE_SPECULARCOLORMAP":"",i.roughnessMap?"#define USE_ROUGHNESSMAP":"",i.metalnessMap?"#define USE_METALNESSMAP":"",i.alphaMap?"#define USE_ALPHAMAP":"",i.transmission?"#define USE_TRANSMISSION":"",i.transmissionMap?"#define USE_TRANSMISSIONMAP":"",i.thicknessMap?"#define USE_THICKNESSMAP":"",i.sheenColorMap?"#define USE_SHEENCOLORMAP":"",i.sheenRoughnessMap?"#define USE_SHEENROUGHNESSMAP":"",i.vertexTangents?"#define USE_TANGENT":"",i.vertexColors?"#define USE_COLOR":"",i.vertexAlphas?"#define USE_COLOR_ALPHA":"",i.vertexUvs?"#define USE_UV":"",i.uvsVertexOnly?"#define UVS_VERTEX_ONLY":"",i.flatShading?"#define FLAT_SHADED":"",i.skinning?"#define USE_SKINNING":"",i.morphTargets?"#define USE_MORPHTARGETS":"",i.morphNormals&&!1===i.flatShading?"#define USE_MORPHNORMALS":"",i.morphColors&&i.isWebGL2?"#define USE_MORPHCOLORS":"",i.morphTargetsCount>0&&i.isWebGL2?"#define MORPHTARGETS_TEXTURE":"",i.morphTargetsCount>0&&i.isWebGL2?"#define MORPHTARGETS_TEXTURE_STRIDE "+i.morphTextureStride:"",i.morphTargetsCount>0&&i.isWebGL2?"#define MORPHTARGETS_COUNT "+i.morphTargetsCount:"",i.doubleSided?"#define DOUBLE_SIDED":"",i.flipSided?"#define FLIP_SIDED":"",i.shadowMapEnabled?"#define USE_SHADOWMAP":"",i.shadowMapEnabled?"#define "+u:"",i.sizeAttenuation?"#define USE_SIZEATTENUATION":"",i.logarithmicDepthBuffer?"#define USE_LOGDEPTHBUF":"",i.logarithmicDepthBuffer&&i.rendererExtensionFragDepth?"#define USE_LOGDEPTHBUF_EXT":"","uniform mat4 modelMatrix;","uniform mat4 modelViewMatrix;","uniform mat4 projectionMatrix;","uniform mat4 viewMatrix;","uniform mat3 normalMatrix;","uniform vec3 cameraPosition;","uniform bool isOrthographic;","#ifdef USE_INSTANCING","\tattribute mat4 instanceMatrix;","#endif","#ifdef USE_INSTANCING_COLOR","\tattribute vec3 instanceColor;","#endif","attribute vec3 position;","attribute vec3 normal;","attribute vec2 uv;","#ifdef USE_TANGENT","\tattribute vec4 tangent;","#endif","#if defined( USE_COLOR_ALPHA )","\tattribute vec4 color;","#elif defined( USE_COLOR )","\tattribute vec3 color;","#endif","#if ( defined( USE_MORPHTARGETS ) && ! defined( MORPHTARGETS_TEXTURE ) )","\tattribute vec3 morphTarget0;","\tattribute vec3 morphTarget1;","\tattribute vec3 morphTarget2;","\tattribute vec3 morphTarget3;","\t#ifdef USE_MORPHNORMALS","\t\tattribute vec3 morphNormal0;","\t\tattribute vec3 morphNormal1;","\t\tattribute vec3 morphNormal2;","\t\tattribute vec3 morphNormal3;","\t#else","\t\tattribute vec3 morphTarget4;","\t\tattribute vec3 morphTarget5;","\t\tattribute vec3 morphTarget6;","\t\tattribute vec3 morphTarget7;","\t#endif","#endif","#ifdef USE_SKINNING","\tattribute vec4 skinIndex;","\tattribute vec4 skinWeight;","#endif","\n"].filter(Ea).join("\n"),y=[g,za(i),"#define SHADER_NAME "+i.shaderName,v,i.useFog&&i.fog?"#define USE_FOG":"",i.useFog&&i.fogExp2?"#define FOG_EXP2":"",i.map?"#define USE_MAP":"",i.matcap?"#define USE_MATCAP":"",i.envMap?"#define USE_ENVMAP":"",i.envMap?"#define "+d:"",i.envMap?"#define "+p:"",i.envMap?"#define "+m:"",f?"#define CUBEUV_TEXEL_WIDTH "+f.texelWidth:"",f?"#define CUBEUV_TEXEL_HEIGHT "+f.texelHeight:"",f?"#define CUBEUV_MAX_MIP "+f.maxMip+".0":"",i.lightMap?"#define USE_LIGHTMAP":"",i.aoMap?"#define USE_AOMAP":"",i.emissiveMap?"#define USE_EMISSIVEMAP":"",i.bumpMap?"#define USE_BUMPMAP":"",i.normalMap?"#define USE_NORMALMAP":"",i.normalMap&&i.objectSpaceNormalMap?"#define OBJECTSPACE_NORMALMAP":"",i.normalMap&&i.tangentSpaceNormalMap?"#define TANGENTSPACE_NORMALMAP":"",i.clearcoat?"#define USE_CLEARCOAT":"",i.clearcoatMap?"#define USE_CLEARCOATMAP":"",i.clearcoatRoughnessMap?"#define USE_CLEARCOAT_ROUGHNESSMAP":"",i.clearcoatNormalMap?"#define USE_CLEARCOAT_NORMALMAP":"",i.iridescence?"#define USE_IRIDESCENCE":"",i.iridescenceMap?"#define USE_IRIDESCENCEMAP":"",i.iridescenceThicknessMap?"#define USE_IRIDESCENCE_THICKNESSMAP":"",i.specularMap?"#define USE_SPECULARMAP":"",i.specularIntensityMap?"#define USE_SPECULARINTENSITYMAP":"",i.specularColorMap?"#define USE_SPECULARCOLORMAP":"",i.roughnessMap?"#define USE_ROUGHNESSMAP":"",i.metalnessMap?"#define USE_METALNESSMAP":"",i.alphaMap?"#define USE_ALPHAMAP":"",i.alphaTest?"#define USE_ALPHATEST":"",i.sheen?"#define USE_SHEEN":"",i.sheenColorMap?"#define USE_SHEENCOLORMAP":"",i.sheenRoughnessMap?"#define USE_SHEENROUGHNESSMAP":"",i.transmission?"#define USE_TRANSMISSION":"",i.transmissionMap?"#define USE_TRANSMISSIONMAP":"",i.thicknessMap?"#define USE_THICKNESSMAP":"",i.decodeVideoTexture?"#define DECODE_VIDEO_TEXTURE":"",i.vertexTangents?"#define USE_TANGENT":"",i.vertexColors||i.instancingColor?"#define USE_COLOR":"",i.vertexAlphas?"#define USE_COLOR_ALPHA":"",i.vertexUvs?"#define USE_UV":"",i.uvsVertexOnly?"#define UVS_VERTEX_ONLY":"",i.gradientMap?"#define USE_GRADIENTMAP":"",i.flatShading?"#define FLAT_SHADED":"",i.doubleSided?"#define DOUBLE_SIDED":"",i.flipSided?"#define FLIP_SIDED":"",i.shadowMapEnabled?"#define USE_SHADOWMAP":"",i.shadowMapEnabled?"#define "+u:"",i.premultipliedAlpha?"#define PREMULTIPLIED_ALPHA":"",i.useLegacyLights?"#define LEGACY_LIGHTS":"",i.logarithmicDepthBuffer?"#define USE_LOGDEPTHBUF":"",i.logarithmicDepthBuffer&&i.rendererExtensionFragDepth?"#define USE_LOGDEPTHBUF_EXT":"","uniform mat4 viewMatrix;","uniform vec3 cameraPosition;","uniform bool isOrthographic;",i.toneMapping!==W?"#define TONE_MAPPING":"",i.toneMapping!==W?Ur.tonemapping_pars_fragment:"",i.toneMapping!==W?Aa("toneMapping",i.toneMapping):"",i.dithering?"#define DITHERING":"",i.opaque?"#define OPAQUE":"",Ur.encodings_pars_fragment,Ta("linearToOutputTexel",i.outputEncoding),i.useDepthPacking?"#define DEPTH_PACKING "+i.depthPacking:"","\n"].filter(Ea).join("\n")),c=Pa(c),c=Ca(c,i),c=La(c,i),h=Pa(h),h=Ca(h,i),h=La(h,i),c=Na(c),h=Na(h),i.isWebGL2&&!0!==i.isRawShaderMaterial&&(M="#version 300 es\n",_=["precision mediump sampler2DArray;","#define attribute in","#define varying out","#define texture2D texture"].join("\n")+"\n"+_,y=["#define varying in",i.glslVersion===Ee?"":"layout(location = 0) out highp vec4 pc_fragColor;",i.glslVersion===Ee?"":"#define gl_FragColor pc_fragColor","#define gl_FragDepthEXT gl_FragDepth","#define texture2D texture","#define textureCube texture","#define texture2DProj textureProj","#define texture2DLodEXT textureLod","#define texture2DProjLodEXT textureProjLod","#define textureCubeLodEXT textureLod","#define texture2DGradEXT textureGrad","#define texture2DProjGradEXT textureProjGrad","#define textureCubeGradEXT textureGrad"].join("\n")+"\n"+y);const b=M+y+h,S=ba(r,35633,M+_+c),w=ba(r,35632,b);if(r.attachShader(x,S),r.attachShader(x,w),void 0!==i.index0AttributeName?r.bindAttribLocation(x,0,i.index0AttributeName):!0===i.morphTargets&&r.bindAttribLocation(x,0,"position"),r.linkProgram(x),t.debug.checkShaderErrors){const t=r.getProgramInfoLog(x).trim(),e=r.getShaderInfoLog(S).trim(),i=r.getShaderInfoLog(w).trim();let n=!0,s=!0;if(!1===r.getProgramParameter(x,35714)){n=!1;const e=wa(r,S,"vertex"),i=wa(r,w,"fragment");console.error("THREE.WebGLProgram: Shader Error "+r.getError()+" - VALIDATE_STATUS "+r.getProgramParameter(x,35715)+"\n\nProgram Info Log: "+t+"\n"+e+"\n"+i)}else""!==t?console.warn("THREE.WebGLProgram: Program Info Log:",t):""!==e&&""!==i||(s=!1);s&&(this.diagnostics={runnable:n,programLog:t,vertexShader:{log:e,prefix:_},fragmentShader:{log:i,prefix:y}})}let T,A;return r.deleteShader(S),r.deleteShader(w),this.getUniforms=function(){return void 0===T&&(T=new Ma(r,x)),T},this.getAttributes=function(){return void 0===A&&(A=function(t,e){const i={},n=t.getProgramParameter(e,35721);for(let r=0;r0,O=s.clearcoat>0,z=s.iridescence>0;return{isWebGL2:p,shaderID:T,shaderName:s.type,vertexShader:C,fragmentShader:L,defines:s.defines,customVertexShaderID:R,customFragmentShaderID:P,isRawShaderMaterial:!0===s.isRawShaderMaterial,glslVersion:s.glslVersion,precision:g,instancing:!0===_.isInstancedMesh,instancingColor:!0===_.isInstancedMesh&&null!==_.instanceColor,supportsVertexTextures:f,outputEncoding:null===D?t.outputEncoding:!0===D.isXRRenderTarget?D.texture.encoding:ve,map:!!s.map,matcap:!!s.matcap,envMap:!!S,envMapMode:S&&S.mapping,envMapCubeUVHeight:w,lightMap:!!s.lightMap,aoMap:!!s.aoMap,emissiveMap:!!s.emissiveMap,bumpMap:!!s.bumpMap,normalMap:!!s.normalMap,objectSpaceNormalMap:s.normalMapType===Me,tangentSpaceNormalMap:s.normalMapType===ye,decodeVideoTexture:!!s.map&&!0===s.map.isVideoTexture&&s.map.encoding===xe,clearcoat:O,clearcoatMap:O&&!!s.clearcoatMap,clearcoatRoughnessMap:O&&!!s.clearcoatRoughnessMap,clearcoatNormalMap:O&&!!s.clearcoatNormalMap,iridescence:z,iridescenceMap:z&&!!s.iridescenceMap,iridescenceThicknessMap:z&&!!s.iridescenceThicknessMap,displacementMap:!!s.displacementMap,roughnessMap:!!s.roughnessMap,metalnessMap:!!s.metalnessMap,specularMap:!!s.specularMap,specularIntensityMap:!!s.specularIntensityMap,specularColorMap:!!s.specularColorMap,opaque:!1===s.transparent&&s.blending===d,alphaMap:!!s.alphaMap,alphaTest:N,gradientMap:!!s.gradientMap,sheen:s.sheen>0,sheenColorMap:!!s.sheenColorMap,sheenRoughnessMap:!!s.sheenRoughnessMap,transmission:s.transmission>0,transmissionMap:!!s.transmissionMap,thicknessMap:!!s.thicknessMap,combine:s.combine,vertexTangents:!!s.normalMap&&!!M.attributes.tangent,vertexColors:s.vertexColors,vertexAlphas:!0===s.vertexColors&&!!M.attributes.color&&4===M.attributes.color.itemSize,vertexUvs:!!(s.map||s.bumpMap||s.normalMap||s.specularMap||s.alphaMap||s.emissiveMap||s.roughnessMap||s.metalnessMap||s.clearcoatMap||s.clearcoatRoughnessMap||s.clearcoatNormalMap||s.iridescenceMap||s.iridescenceThicknessMap||s.displacementMap||s.transmissionMap||s.thicknessMap||s.specularIntensityMap||s.specularColorMap||s.sheenColorMap||s.sheenRoughnessMap),uvsVertexOnly:!(s.map||s.bumpMap||s.normalMap||s.specularMap||s.alphaMap||s.emissiveMap||s.roughnessMap||s.metalnessMap||s.clearcoatNormalMap||s.iridescenceMap||s.iridescenceThicknessMap||s.transmission>0||s.transmissionMap||s.thicknessMap||s.specularIntensityMap||s.specularColorMap||s.sheen>0||s.sheenColorMap||s.sheenRoughnessMap||!s.displacementMap),fog:!!y,useFog:!0===s.fog,fogExp2:y&&y.isFogExp2,flatShading:!!s.flatShading,sizeAttenuation:s.sizeAttenuation,logarithmicDepthBuffer:m,skinning:!0===_.isSkinnedMesh,morphTargets:void 0!==M.morphAttributes.position,morphNormals:void 0!==M.morphAttributes.normal,morphColors:void 0!==M.morphAttributes.color,morphTargetsCount:E,morphTextureStride:I,numDirLights:o.directional.length,numPointLights:o.point.length,numSpotLights:o.spot.length,numSpotLightMaps:o.spotLightMap.length,numRectAreaLights:o.rectArea.length,numHemiLights:o.hemi.length,numDirLightShadows:o.directionalShadowMap.length,numPointLightShadows:o.pointShadowMap.length,numSpotLightShadows:o.spotShadowMap.length,numSpotLightShadowsWithMaps:o.numSpotLightShadowsWithMaps,numClippingPlanes:a.numPlanes,numClipIntersection:a.numIntersection,dithering:s.dithering,shadowMapEnabled:t.shadowMap.enabled&&u.length>0,shadowMapType:t.shadowMap.type,toneMapping:s.toneMapped?t.toneMapping:W,useLegacyLights:t.useLegacyLights,premultipliedAlpha:s.premultipliedAlpha,doubleSided:s.side===h,flipSided:s.side===c,useDepthPacking:!!s.depthPacking,depthPacking:s.depthPacking||0,index0AttributeName:s.index0AttributeName,extensionDerivatives:s.extensions&&s.extensions.derivatives,extensionFragDepth:s.extensions&&s.extensions.fragDepth,extensionDrawBuffers:s.extensions&&s.extensions.drawBuffers,extensionShaderTextureLOD:s.extensions&&s.extensions.shaderTextureLOD,rendererExtensionFragDepth:p||n.has("EXT_frag_depth"),rendererExtensionDrawBuffers:p||n.has("WEBGL_draw_buffers"),rendererExtensionShaderTextureLod:p||n.has("EXT_shader_texture_lod"),customProgramCacheKey:s.customProgramCacheKey()}},getProgramCacheKey:function(e){const i=[];if(e.shaderID?i.push(e.shaderID):(i.push(e.customVertexShaderID),i.push(e.customFragmentShaderID)),void 0!==e.defines)for(const t in e.defines)i.push(t),i.push(e.defines[t]);return!1===e.isRawShaderMaterial&&(!function(t,e){t.push(e.precision),t.push(e.outputEncoding),t.push(e.envMapMode),t.push(e.envMapCubeUVHeight),t.push(e.combine),t.push(e.vertexUvs),t.push(e.fogExp2),t.push(e.sizeAttenuation),t.push(e.morphTargetsCount),t.push(e.morphAttributeCount),t.push(e.numDirLights),t.push(e.numPointLights),t.push(e.numSpotLights),t.push(e.numSpotLightMaps),t.push(e.numHemiLights),t.push(e.numRectAreaLights),t.push(e.numDirLightShadows),t.push(e.numPointLightShadows),t.push(e.numSpotLightShadows),t.push(e.numSpotLightShadowsWithMaps),t.push(e.shadowMapType),t.push(e.toneMapping),t.push(e.numClippingPlanes),t.push(e.numClipIntersection),t.push(e.depthPacking)}(i,e),function(t,e){o.disableAll(),e.isWebGL2&&o.enable(0);e.supportsVertexTextures&&o.enable(1);e.instancing&&o.enable(2);e.instancingColor&&o.enable(3);e.map&&o.enable(4);e.matcap&&o.enable(5);e.envMap&&o.enable(6);e.lightMap&&o.enable(7);e.aoMap&&o.enable(8);e.emissiveMap&&o.enable(9);e.bumpMap&&o.enable(10);e.normalMap&&o.enable(11);e.objectSpaceNormalMap&&o.enable(12);e.tangentSpaceNormalMap&&o.enable(13);e.clearcoat&&o.enable(14);e.clearcoatMap&&o.enable(15);e.clearcoatRoughnessMap&&o.enable(16);e.clearcoatNormalMap&&o.enable(17);e.iridescence&&o.enable(18);e.iridescenceMap&&o.enable(19);e.iridescenceThicknessMap&&o.enable(20);e.displacementMap&&o.enable(21);e.specularMap&&o.enable(22);e.roughnessMap&&o.enable(23);e.metalnessMap&&o.enable(24);e.gradientMap&&o.enable(25);e.alphaMap&&o.enable(26);e.alphaTest&&o.enable(27);e.vertexColors&&o.enable(28);e.vertexAlphas&&o.enable(29);e.vertexUvs&&o.enable(30);e.vertexTangents&&o.enable(31);e.uvsVertexOnly&&o.enable(32);t.push(o.mask),o.disableAll(),e.fog&&o.enable(0);e.useFog&&o.enable(1);e.flatShading&&o.enable(2);e.logarithmicDepthBuffer&&o.enable(3);e.skinning&&o.enable(4);e.morphTargets&&o.enable(5);e.morphNormals&&o.enable(6);e.morphColors&&o.enable(7);e.premultipliedAlpha&&o.enable(8);e.shadowMapEnabled&&o.enable(9);e.useLegacyLights&&o.enable(10);e.doubleSided&&o.enable(11);e.flipSided&&o.enable(12);e.useDepthPacking&&o.enable(13);e.dithering&&o.enable(14);e.specularIntensityMap&&o.enable(15);e.specularColorMap&&o.enable(16);e.transmission&&o.enable(17);e.transmissionMap&&o.enable(18);e.thicknessMap&&o.enable(19);e.sheen&&o.enable(20);e.sheenColorMap&&o.enable(21);e.sheenRoughnessMap&&o.enable(22);e.decodeVideoTexture&&o.enable(23);e.opaque&&o.enable(24);t.push(o.mask)}(i,e),i.push(t.outputEncoding)),i.push(e.customProgramCacheKey),i.join()},getUniforms:function(t){const e=v[t.type];let i;if(e){const t=Fr[e];i=_r.clone(t.uniforms)}else i=t.uniforms;return i},acquireProgram:function(e,i){let n;for(let t=0,e=u.length;t0?n.push(h):!0===a.transparent?r.push(h):i.push(h)},unshift:function(t,e,a,o,l,c){const h=s(t,e,a,o,l,c);a.transmission>0?n.unshift(h):!0===a.transparent?r.unshift(h):i.unshift(h)},finish:function(){for(let i=e,n=t.length;i1&&i.sort(t||Ha),n.length>1&&n.sort(e||Wa),r.length>1&&r.sort(e||Wa)}}}function qa(){let t=new WeakMap;return{get:function(e,i){const n=t.get(e);let r;return void 0===n?(r=new ja,t.set(e,[r])):i>=n.length?(r=new ja,n.push(r)):r=n[i],r},dispose:function(){t=new WeakMap}}}function Xa(){const t={};return{get:function(e){if(void 0!==t[e.id])return t[e.id];let i;switch(e.type){case"DirectionalLight":i={direction:new $e,color:new zn};break;case"SpotLight":i={position:new $e,direction:new $e,color:new zn,distance:0,coneCos:0,penumbraCos:0,decay:0};break;case"PointLight":i={position:new $e,color:new zn,distance:0,decay:0};break;case"HemisphereLight":i={direction:new $e,skyColor:new zn,groundColor:new zn};break;case"RectAreaLight":i={color:new zn,position:new $e,halfWidth:new $e,halfHeight:new $e}}return t[e.id]=i,i}}}let Ya=0;function Za(t,e){return(e.castShadow?2:0)-(t.castShadow?2:0)+(e.map?1:0)-(t.map?1:0)}function Ja(t,e){const i=new Xa,n=function(){const t={};return{get:function(e){if(void 0!==t[e.id])return t[e.id];let i;switch(e.type){case"DirectionalLight":case"SpotLight":i={shadowBias:0,shadowNormalBias:0,shadowRadius:1,shadowMapSize:new We};break;case"PointLight":i={shadowBias:0,shadowNormalBias:0,shadowRadius:1,shadowMapSize:new We,shadowCameraNear:1,shadowCameraFar:1e3}}return t[e.id]=i,i}}}(),r={version:0,hash:{directionalLength:-1,pointLength:-1,spotLength:-1,rectAreaLength:-1,hemiLength:-1,numDirectionalShadows:-1,numPointShadows:-1,numSpotShadows:-1,numSpotMaps:-1},ambient:[0,0,0],probe:[],directional:[],directionalShadow:[],directionalShadowMap:[],directionalShadowMatrix:[],spot:[],spotLightMap:[],spotShadow:[],spotShadowMap:[],spotLightMatrix:[],rectArea:[],rectAreaLTC1:null,rectAreaLTC2:null,point:[],pointShadow:[],pointShadowMap:[],pointShadowMatrix:[],hemi:[],numSpotLightShadowsWithMaps:0};for(let t=0;t<9;t++)r.probe.push(new $e);const s=new $e,a=new qi,o=new qi;return{setup:function(s,a){let o=0,l=0,c=0;for(let t=0;t<9;t++)r.probe[t].set(0,0,0);let h=0,u=0,d=0,p=0,m=0,f=0,g=0,v=0,x=0,_=0;s.sort(Za);const y=!0===a?Math.PI:1;for(let t=0,e=s.length;t0&&(e.isWebGL2||!0===t.has("OES_texture_float_linear")?(r.rectAreaLTC1=Br.LTC_FLOAT_1,r.rectAreaLTC2=Br.LTC_FLOAT_2):!0===t.has("OES_texture_half_float_linear")?(r.rectAreaLTC1=Br.LTC_HALF_1,r.rectAreaLTC2=Br.LTC_HALF_2):console.error("THREE.WebGLRenderer: Unable to use RectAreaLight. Missing WebGL extensions.")),r.ambient[0]=o,r.ambient[1]=l,r.ambient[2]=c;const M=r.hash;M.directionalLength===h&&M.pointLength===u&&M.spotLength===d&&M.rectAreaLength===p&&M.hemiLength===m&&M.numDirectionalShadows===f&&M.numPointShadows===g&&M.numSpotShadows===v&&M.numSpotMaps===x||(r.directional.length=h,r.spot.length=d,r.rectArea.length=p,r.point.length=u,r.hemi.length=m,r.directionalShadow.length=f,r.directionalShadowMap.length=f,r.pointShadow.length=g,r.pointShadowMap.length=g,r.spotShadow.length=v,r.spotShadowMap.length=v,r.directionalShadowMatrix.length=f,r.pointShadowMatrix.length=g,r.spotLightMatrix.length=v+x-_,r.spotLightMap.length=x,r.numSpotLightShadowsWithMaps=_,M.directionalLength=h,M.pointLength=u,M.spotLength=d,M.rectAreaLength=p,M.hemiLength=m,M.numDirectionalShadows=f,M.numPointShadows=g,M.numSpotShadows=v,M.numSpotMaps=x,r.version=Ya++)},setupView:function(t,e){let i=0,n=0,l=0,c=0,h=0;const u=e.matrixWorldInverse;for(let e=0,d=t.length;e=s.length?(a=new Ka(t,e),s.push(a)):a=s[r],a},dispose:function(){i=new WeakMap}}}class Qa extends Pn{constructor(t){super(),this.isMeshDepthMaterial=!0,this.type="MeshDepthMaterial",this.depthPacking=3200,this.map=null,this.alphaMap=null,this.displacementMap=null,this.displacementScale=1,this.displacementBias=0,this.wireframe=!1,this.wireframeLinewidth=1,this.setValues(t)}copy(t){return super.copy(t),this.depthPacking=t.depthPacking,this.map=t.map,this.alphaMap=t.alphaMap,this.displacementMap=t.displacementMap,this.displacementScale=t.displacementScale,this.displacementBias=t.displacementBias,this.wireframe=t.wireframe,this.wireframeLinewidth=t.wireframeLinewidth,this}}class to extends Pn{constructor(t){super(),this.isMeshDistanceMaterial=!0,this.type="MeshDistanceMaterial",this.referencePosition=new $e,this.nearDistance=1,this.farDistance=1e3,this.map=null,this.alphaMap=null,this.displacementMap=null,this.displacementScale=1,this.displacementBias=0,this.setValues(t)}copy(t){return super.copy(t),this.referencePosition.copy(t.referencePosition),this.nearDistance=t.nearDistance,this.farDistance=t.farDistance,this.map=t.map,this.alphaMap=t.alphaMap,this.displacementMap=t.displacementMap,this.displacementScale=t.displacementScale,this.displacementBias=t.displacementBias,this}}const eo="void main() {\n\tgl_Position = vec4( position, 1.0 );\n}",io="uniform sampler2D shadow_pass;\nuniform vec2 resolution;\nuniform float radius;\n#include \nvoid main() {\n\tconst float samples = float( VSM_SAMPLES );\n\tfloat mean = 0.0;\n\tfloat squared_mean = 0.0;\n\tfloat uvStride = samples <= 1.0 ? 0.0 : 2.0 / ( samples - 1.0 );\n\tfloat uvStart = samples <= 1.0 ? 0.0 : - 1.0;\n\tfor ( float i = 0.0; i < samples; i ++ ) {\n\t\tfloat uvOffset = uvStart + i * uvStride;\n\t\t#ifdef HORIZONTAL_PASS\n\t\t\tvec2 distribution = unpackRGBATo2Half( texture2D( shadow_pass, ( gl_FragCoord.xy + vec2( uvOffset, 0.0 ) * radius ) / resolution ) );\n\t\t\tmean += distribution.x;\n\t\t\tsquared_mean += distribution.y * distribution.y + distribution.x * distribution.x;\n\t\t#else\n\t\t\tfloat depth = unpackRGBAToDepth( texture2D( shadow_pass, ( gl_FragCoord.xy + vec2( 0.0, uvOffset ) * radius ) / resolution ) );\n\t\t\tmean += depth;\n\t\t\tsquared_mean += depth * depth;\n\t\t#endif\n\t}\n\tmean = mean / samples;\n\tsquared_mean = squared_mean / samples;\n\tfloat std_dev = sqrt( squared_mean - mean * mean );\n\tgl_FragColor = pack2HalfToRGBA( vec2( mean, std_dev ) );\n}";function no(t,e,i){let n=new Dr;const r=new We,a=new We,d=new fi,p=new Qa({depthPacking:_e}),m=new to,f={},g=i.maxTextureSize,v={[l]:c,[c]:l,[h]:h},x=new yr({defines:{VSM_SAMPLES:8},uniforms:{shadow_pass:{value:null},resolution:{value:new We},radius:{value:4}},vertexShader:eo,fragmentShader:io}),_=x.clone();_.defines.HORIZONTAL_PASS=1;const y=new $n;y.setAttribute("position",new Gn(new Float32Array([-1,-1,.5,3,-1,.5,-1,3,.5]),3));const M=new pr(y,x),b=this;function S(i,n){const s=e.update(M);x.defines.VSM_SAMPLES!==i.blurSamples&&(x.defines.VSM_SAMPLES=i.blurSamples,_.defines.VSM_SAMPLES=i.blurSamples,x.needsUpdate=!0,_.needsUpdate=!0),null===i.mapPass&&(i.mapPass=new gi(r.x,r.y)),x.uniforms.shadow_pass.value=i.map.texture,x.uniforms.resolution.value=i.mapSize,x.uniforms.radius.value=i.radius,t.setRenderTarget(i.mapPass),t.clear(),t.renderBufferDirect(n,null,s,x,M,null),_.uniforms.shadow_pass.value=i.mapPass.texture,_.uniforms.resolution.value=i.mapSize,_.uniforms.radius.value=i.radius,t.setRenderTarget(i.map),t.clear(),t.renderBufferDirect(n,null,s,_,M,null)}function w(e,i,n,r,s,a){let l=null;const c=!0===n.isPointLight?e.customDistanceMaterial:e.customDepthMaterial;if(void 0!==c)l=c;else if(l=!0===n.isPointLight?m:p,t.localClippingEnabled&&!0===i.clipShadows&&Array.isArray(i.clippingPlanes)&&0!==i.clippingPlanes.length||i.displacementMap&&0!==i.displacementScale||i.alphaMap&&i.alphaTest>0||i.map&&i.alphaTest>0){const t=l.uuid,e=i.uuid;let n=f[t];void 0===n&&(n={},f[t]=n);let r=n[e];void 0===r&&(r=l.clone(),n[e]=r),l=r}return l.visible=i.visible,l.wireframe=i.wireframe,l.side=a===o?null!==i.shadowSide?i.shadowSide:i.side:null!==i.shadowSide?i.shadowSide:v[i.side],l.alphaMap=i.alphaMap,l.alphaTest=i.alphaTest,l.map=i.map,l.clipShadows=i.clipShadows,l.clippingPlanes=i.clippingPlanes,l.clipIntersection=i.clipIntersection,l.displacementMap=i.displacementMap,l.displacementScale=i.displacementScale,l.displacementBias=i.displacementBias,l.wireframeLinewidth=i.wireframeLinewidth,l.linewidth=i.linewidth,!0===n.isPointLight&&!0===l.isMeshDistanceMaterial&&(l.referencePosition.setFromMatrixPosition(n.matrixWorld),l.nearDistance=r,l.farDistance=s),l}function T(i,r,s,a,l){if(!1===i.visible)return;if(i.layers.test(r.layers)&&(i.isMesh||i.isLine||i.isPoints)&&(i.castShadow||i.receiveShadow&&l===o)&&(!i.frustumCulled||n.intersectsObject(i))){i.modelViewMatrix.multiplyMatrices(s.matrixWorldInverse,i.matrixWorld);const n=e.update(i),r=i.material;if(Array.isArray(r)){const e=n.groups;for(let o=0,c=e.length;og||r.y>g)&&(r.x>g&&(a.x=Math.floor(g/u.x),r.x=a.x*u.x,h.mapSize.x=a.x),r.y>g&&(a.y=Math.floor(g/u.y),r.y=a.y*u.y,h.mapSize.y=a.y)),null===h.map){const t=this.type!==o?{minFilter:st,magFilter:st}:{};h.map=new gi(r.x,r.y,t),h.map.texture.name=c.name+".shadowMap",h.camera.updateProjectionMatrix()}t.setRenderTarget(h.map),t.clear();const m=h.getViewportCount();for(let t=0;t=1):-1!==dt.indexOf("OpenGL ES")&&(ut=parseFloat(/^OpenGL ES (\d)/.exec(dt)[1]),ht=ut>=2);let pt=null,mt={};const ft=t.getParameter(3088),gt=t.getParameter(2978),vt=(new fi).fromArray(ft),xt=(new fi).fromArray(gt);function _t(e,i,n){const r=new Uint8Array(4),s=t.createTexture();t.bindTexture(e,s),t.texParameteri(e,10241,9728),t.texParameteri(e,10240,9728);for(let e=0;en||t.height>n)&&(r=n/Math.max(t.width,t.height)),r<1||!0===e){if("undefined"!=typeof HTMLImageElement&&t instanceof HTMLImageElement||"undefined"!=typeof HTMLCanvasElement&&t instanceof HTMLCanvasElement||"undefined"!=typeof ImageBitmap&&t instanceof ImageBitmap){const n=e?ke:Math.floor,s=n(r*t.width),a=n(r*t.height);void 0===f&&(f=x(s,a));const o=i?x(s,a):f;o.width=s,o.height=a;return o.getContext("2d").drawImage(t,0,0,s,a),console.warn("THREE.WebGLRenderer: Texture has been resized from ("+t.width+"x"+t.height+") to ("+s+"x"+a+")."),o}return"data"in t&&console.warn("THREE.WebGLRenderer: Image in DataTexture is too big ("+t.width+"x"+t.height+")."),t}return t}function y(t){return Be(t.width)&&Be(t.height)}function M(t,e){return t.generateMipmaps&&e&&t.minFilter!==st&&t.minFilter!==lt}function b(e){t.generateMipmap(e)}function S(i,n,r,s,a=!1){if(!1===o)return n;if(null!==i){if(void 0!==t[i])return t[i];console.warn("THREE.WebGLRenderer: Attempt to use non-existing WebGL internal format '"+i+"'")}let l=n;return 6403===n&&(5126===r&&(l=33326),5131===r&&(l=33325),5121===r&&(l=33321)),33319===n&&(5126===r&&(l=33328),5131===r&&(l=33327),5121===r&&(l=33323)),6408===n&&(5126===r&&(l=34836),5131===r&&(l=34842),5121===r&&(l=s===xe&&!1===a?35907:32856),32819===r&&(l=32854),32820===r&&(l=32855)),33325!==l&&33326!==l&&33327!==l&&33328!==l&&34842!==l&&34836!==l||e.get("EXT_color_buffer_float"),l}function w(t,e,i){return!0===M(t,i)||t.isFramebufferTexture&&t.minFilter!==st&&t.minFilter!==lt?Math.log2(Math.max(e.width,e.height))+1:void 0!==t.mipmaps&&t.mipmaps.length>0?t.mipmaps.length:t.isCompressedTexture&&Array.isArray(t.image)?e.mipmaps.length:1}function T(t){return t===st||t===at||t===ot?9728:9729}function A(t){const e=t.target;e.removeEventListener("dispose",A),function(t){const e=n.get(t);if(void 0===e.__webglInit)return;const i=t.source,r=g.get(i);if(r){const n=r[e.__cacheKey];n.usedTimes--,0===n.usedTimes&&C(t),0===Object.keys(r).length&&g.delete(i)}n.remove(t)}(e),e.isVideoTexture&&m.delete(e)}function E(e){const i=e.target;i.removeEventListener("dispose",E),function(e){const i=e.texture,r=n.get(e),s=n.get(i);void 0!==s.__webglTexture&&(t.deleteTexture(s.__webglTexture),a.memory.textures--);e.depthTexture&&e.depthTexture.dispose();if(e.isWebGLCubeRenderTarget)for(let e=0;e<6;e++)t.deleteFramebuffer(r.__webglFramebuffer[e]),r.__webglDepthbuffer&&t.deleteRenderbuffer(r.__webglDepthbuffer[e]);else{if(t.deleteFramebuffer(r.__webglFramebuffer),r.__webglDepthbuffer&&t.deleteRenderbuffer(r.__webglDepthbuffer),r.__webglMultisampledFramebuffer&&t.deleteFramebuffer(r.__webglMultisampledFramebuffer),r.__webglColorRenderbuffer)for(let e=0;e0&&r.__version!==t.version){const i=t.image;if(null===i)console.warn("THREE.WebGLRenderer: Texture marked for update but no image data found.");else{if(!1!==i.complete)return void O(r,t,e);console.warn("THREE.WebGLRenderer: Texture marked for update but image is incomplete")}}i.bindTexture(3553,r.__webglTexture,33984+e)}const P={[it]:10497,[nt]:33071,[rt]:33648},I={[st]:9728,[at]:9984,[ot]:9986,[lt]:9729,[ct]:9985,[ht]:9987};function D(i,s,a){if(a?(t.texParameteri(i,10242,P[s.wrapS]),t.texParameteri(i,10243,P[s.wrapT]),32879!==i&&35866!==i||t.texParameteri(i,32882,P[s.wrapR]),t.texParameteri(i,10240,I[s.magFilter]),t.texParameteri(i,10241,I[s.minFilter])):(t.texParameteri(i,10242,33071),t.texParameteri(i,10243,33071),32879!==i&&35866!==i||t.texParameteri(i,32882,33071),s.wrapS===nt&&s.wrapT===nt||console.warn("THREE.WebGLRenderer: Texture is not power of two. Texture.wrapS and Texture.wrapT should be set to THREE.ClampToEdgeWrapping."),t.texParameteri(i,10240,T(s.magFilter)),t.texParameteri(i,10241,T(s.minFilter)),s.minFilter!==st&&s.minFilter!==lt&&console.warn("THREE.WebGLRenderer: Texture is not power of two. Texture.minFilter should be set to THREE.NearestFilter or THREE.LinearFilter.")),!0===e.has("EXT_texture_filter_anisotropic")){const a=e.get("EXT_texture_filter_anisotropic");if(s.magFilter===st)return;if(s.minFilter!==ot&&s.minFilter!==ht)return;if(s.type===vt&&!1===e.has("OES_texture_float_linear"))return;if(!1===o&&s.type===xt&&!1===e.has("OES_texture_half_float_linear"))return;(s.anisotropy>1||n.get(s).__currentAnisotropy)&&(t.texParameterf(i,a.TEXTURE_MAX_ANISOTROPY_EXT,Math.min(s.anisotropy,r.getMaxAnisotropy())),n.get(s).__currentAnisotropy=s.anisotropy)}}function N(e,i){let n=!1;void 0===e.__webglInit&&(e.__webglInit=!0,i.addEventListener("dispose",A));const r=i.source;let s=g.get(r);void 0===s&&(s={},g.set(r,s));const o=function(t){const e=[];return e.push(t.wrapS),e.push(t.wrapT),e.push(t.wrapR||0),e.push(t.magFilter),e.push(t.minFilter),e.push(t.anisotropy),e.push(t.internalFormat),e.push(t.format),e.push(t.type),e.push(t.generateMipmaps),e.push(t.premultiplyAlpha),e.push(t.flipY),e.push(t.unpackAlignment),e.push(t.encoding),e.join()}(i);if(o!==e.__cacheKey){void 0===s[o]&&(s[o]={texture:t.createTexture(),usedTimes:0},a.memory.textures++,n=!0),s[o].usedTimes++;const r=s[e.__cacheKey];void 0!==r&&(s[e.__cacheKey].usedTimes--,0===r.usedTimes&&C(i)),e.__cacheKey=o,e.__webglTexture=s[o].texture}return n}function O(e,r,a){let l=3553;(r.isDataArrayTexture||r.isCompressedArrayTexture)&&(l=35866),r.isData3DTexture&&(l=32879);const c=N(e,r),u=r.source;i.bindTexture(l,e.__webglTexture,33984+a);const d=n.get(u);if(u.version!==d.__version||!0===c){i.activeTexture(33984+a),t.pixelStorei(37440,r.flipY),t.pixelStorei(37441,r.premultiplyAlpha),t.pixelStorei(3317,r.unpackAlignment),t.pixelStorei(37443,0);const e=function(t){return!o&&(t.wrapS!==nt||t.wrapT!==nt||t.minFilter!==st&&t.minFilter!==lt)}(r)&&!1===y(r.image);let n=_(r.image,e,!1,h);n=G(r,n);const p=y(n)||o,m=s.convert(r.format,r.encoding);let f,g=s.convert(r.type),v=S(r.internalFormat,m,g,r.encoding,r.isVideoTexture);D(l,r,p);const x=r.mipmaps,T=o&&!0!==r.isVideoTexture,A=void 0===d.__version||!0===c,E=w(r,n,p);if(r.isDepthTexture)v=6402,o?v=r.type===vt?36012:r.type===gt?33190:r.type===Mt?35056:33189:r.type===vt&&console.error("WebGLRenderer: Floating point depth texture requires WebGL2."),r.format===At&&6402===v&&r.type!==mt&&r.type!==gt&&(console.warn("THREE.WebGLRenderer: Use UnsignedShortType or UnsignedIntType for DepthFormat DepthTexture."),r.type=gt,g=s.convert(r.type)),r.format===Et&&6402===v&&(v=34041,r.type!==Mt&&(console.warn("THREE.WebGLRenderer: Use UnsignedInt248Type for DepthStencilFormat DepthTexture."),r.type=Mt,g=s.convert(r.type))),A&&(T?i.texStorage2D(3553,1,v,n.width,n.height):i.texImage2D(3553,0,v,n.width,n.height,0,m,g,null));else if(r.isDataTexture)if(x.length>0&&p){T&&A&&i.texStorage2D(3553,E,v,x[0].width,x[0].height);for(let t=0,e=x.length;t>=1,e>>=1}}else if(x.length>0&&p){T&&A&&i.texStorage2D(3553,E,v,x[0].width,x[0].height);for(let t=0,e=x.length;t=34069&&l<=34074)&&t.framebufferTexture2D(36160,o,l,n.get(a).__webglTexture,0),i.bindFramebuffer(36160,null)}function U(e,i,n){if(t.bindRenderbuffer(36161,e),i.depthBuffer&&!i.stencilBuffer){let r=33189;if(n||k(i)){const e=i.depthTexture;e&&e.isDepthTexture&&(e.type===vt?r=36012:e.type===gt&&(r=33190));const n=F(i);k(i)?d.renderbufferStorageMultisampleEXT(36161,n,r,i.width,i.height):t.renderbufferStorageMultisample(36161,n,r,i.width,i.height)}else t.renderbufferStorage(36161,r,i.width,i.height);t.framebufferRenderbuffer(36160,36096,36161,e)}else if(i.depthBuffer&&i.stencilBuffer){const r=F(i);n&&!1===k(i)?t.renderbufferStorageMultisample(36161,r,35056,i.width,i.height):k(i)?d.renderbufferStorageMultisampleEXT(36161,r,35056,i.width,i.height):t.renderbufferStorage(36161,34041,i.width,i.height),t.framebufferRenderbuffer(36160,33306,36161,e)}else{const e=!0===i.isWebGLMultipleRenderTargets?i.texture:[i.texture];for(let r=0;r0&&!0===e.has("WEBGL_multisampled_render_to_texture")&&!1!==i.__useRenderToTexture}function G(t,i){const n=t.encoding,r=t.format,s=t.type;return!0===t.isCompressedTexture||!0===t.isVideoTexture||t.format===Ce||n!==ve&&(n===xe?!1===o?!0===e.has("EXT_sRGB")&&r===St?(t.format=Ce,t.minFilter=lt,t.generateMipmaps=!1):i=hi.sRGBToLinear(i):r===St&&s===ut||console.warn("THREE.WebGLTextures: sRGB encoded textures have to use RGBAFormat and UnsignedByteType."):console.error("THREE.WebGLTextures: Unsupported texture encoding:",n)),i}this.allocateTextureUnit=function(){const t=L;return t>=l&&console.warn("THREE.WebGLTextures: Trying to use "+t+" texture units while this GPU supports only "+l),L+=1,t},this.resetTextureUnits=function(){L=0},this.setTexture2D=R,this.setTexture2DArray=function(t,e){const r=n.get(t);t.version>0&&r.__version!==t.version?O(r,t,e):i.bindTexture(35866,r.__webglTexture,33984+e)},this.setTexture3D=function(t,e){const r=n.get(t);t.version>0&&r.__version!==t.version?O(r,t,e):i.bindTexture(32879,r.__webglTexture,33984+e)},this.setTextureCube=function(e,r){const a=n.get(e);e.version>0&&a.__version!==e.version?function(e,r,a){if(6!==r.image.length)return;const l=N(e,r),h=r.source;i.bindTexture(34067,e.__webglTexture,33984+a);const u=n.get(h);if(h.version!==u.__version||!0===l){i.activeTexture(33984+a),t.pixelStorei(37440,r.flipY),t.pixelStorei(37441,r.premultiplyAlpha),t.pixelStorei(3317,r.unpackAlignment),t.pixelStorei(37443,0);const e=r.isCompressedTexture||r.image[0].isCompressedTexture,n=r.image[0]&&r.image[0].isDataTexture,d=[];for(let t=0;t<6;t++)d[t]=e||n?n?r.image[t].image:r.image[t]:_(r.image[t],!1,!0,c),d[t]=G(r,d[t]);const p=d[0],m=y(p)||o,f=s.convert(r.format,r.encoding),g=s.convert(r.type),v=S(r.internalFormat,f,g,r.encoding),x=o&&!0!==r.isVideoTexture,T=void 0===u.__version||!0===l;let A,E=w(r,p,m);if(D(34067,r,m),e){x&&T&&i.texStorage2D(34067,E,v,p.width,p.height);for(let t=0;t<6;t++){A=d[t].mipmaps;for(let e=0;e0&&E++,i.texStorage2D(34067,E,v,d[0].width,d[0].height));for(let t=0;t<6;t++)if(n){x?i.texSubImage2D(34069+t,0,0,0,d[t].width,d[t].height,f,g,d[t].data):i.texImage2D(34069+t,0,v,d[t].width,d[t].height,0,f,g,d[t].data);for(let e=0;e0&&!1===k(e)){const n=d?l:[l];c.__webglMultisampledFramebuffer=t.createFramebuffer(),c.__webglColorRenderbuffer=[],i.bindFramebuffer(36160,c.__webglMultisampledFramebuffer);for(let i=0;i0&&!1===k(e)){const r=e.isWebGLMultipleRenderTargets?e.texture:[e.texture],s=e.width,a=e.height;let o=16384;const l=[],c=e.stencilBuffer?33306:36096,h=n.get(e),u=!0===e.isWebGLMultipleRenderTargets;if(u)for(let e=0;eo+c?(l.inputState.pinching=!1,this.dispatchEvent({type:"pinchend",handedness:t.handedness,target:this})):!l.inputState.pinching&&a<=o-c&&(l.inputState.pinching=!0,this.dispatchEvent({type:"pinchstart",handedness:t.handedness,target:this}))}else null!==o&&t.gripSpace&&(r=e.getPose(t.gripSpace,i),null!==r&&(o.matrix.fromArray(r.transform.matrix),o.matrix.decompose(o.position,o.rotation,o.scale),r.linearVelocity?(o.hasLinearVelocity=!0,o.linearVelocity.copy(r.linearVelocity)):o.hasLinearVelocity=!1,r.angularVelocity?(o.hasAngularVelocity=!0,o.angularVelocity.copy(r.angularVelocity)):o.hasAngularVelocity=!1));null!==a&&(n=e.getPose(t.targetRaySpace,i),null===n&&null!==r&&(n=r),null!==n&&(a.matrix.fromArray(n.transform.matrix),a.matrix.decompose(a.position,a.rotation,a.scale),n.linearVelocity?(a.hasLinearVelocity=!0,a.linearVelocity.copy(n.linearVelocity)):a.hasLinearVelocity=!1,n.angularVelocity?(a.hasAngularVelocity=!0,a.angularVelocity.copy(n.angularVelocity)):a.hasAngularVelocity=!1,this.dispatchEvent(co)))}return null!==a&&(a.visible=null!==n),null!==o&&(o.visible=null!==r),null!==l&&(l.visible=null!==s),this}_getHandJoint(t,e){if(void 0===t.joints[e.jointName]){const i=new lo;i.matrixAutoUpdate=!1,i.visible=!1,t.joints[e.jointName]=i,t.add(i)}return t.joints[e.jointName]}}class uo extends mi{constructor(t,e,i,n,r,s,a,o,l,c){if((c=void 0!==c?c:At)!==At&&c!==Et)throw new Error("DepthTexture format must be either THREE.DepthFormat or THREE.DepthStencilFormat");void 0===i&&c===At&&(i=gt),void 0===i&&c===Et&&(i=Mt),super(null,n,r,s,a,o,c,i,l),this.isDepthTexture=!0,this.image={width:t,height:e},this.magFilter=void 0!==a?a:st,this.minFilter=void 0!==o?o:st,this.flipY=!1,this.generateMipmaps=!1}}class po extends Le{constructor(t,e){super();const i=this;let n=null,r=1,s=null,a="local-floor",o=1,l=null,c=null,h=null,u=null,d=null,p=null;const m=e.getContextAttributes();let f=null,g=null;const v=[],x=[],_=new Set,y=new Map,M=new br;M.layers.enable(1),M.viewport=new fi;const b=new br;b.layers.enable(2),b.viewport=new fi;const S=[M,b],w=new oo;w.layers.enable(1),w.layers.enable(2);let T=null,A=null;function E(t){const e=x.indexOf(t.inputSource);if(-1===e)return;const i=v[e];void 0!==i&&i.dispatchEvent({type:t.type,data:t.inputSource})}function C(){n.removeEventListener("select",E),n.removeEventListener("selectstart",E),n.removeEventListener("selectend",E),n.removeEventListener("squeeze",E),n.removeEventListener("squeezestart",E),n.removeEventListener("squeezeend",E),n.removeEventListener("end",C),n.removeEventListener("inputsourceschange",L);for(let t=0;t=0&&(x[n]=null,v[n].disconnect(i))}for(let e=0;e=x.length){x.push(i),n=t;break}if(null===x[t]){x[t]=i,n=t;break}}if(-1===n)break}const r=v[n];r&&r.connect(i)}}this.cameraAutoUpdate=!0,this.enabled=!1,this.isPresenting=!1,this.getController=function(t){let e=v[t];return void 0===e&&(e=new ho,v[t]=e),e.getTargetRaySpace()},this.getControllerGrip=function(t){let e=v[t];return void 0===e&&(e=new ho,v[t]=e),e.getGripSpace()},this.getHand=function(t){let e=v[t];return void 0===e&&(e=new ho,v[t]=e),e.getHandSpace()},this.setFramebufferScaleFactor=function(t){r=t,!0===i.isPresenting&&console.warn("THREE.WebXRManager: Cannot change framebuffer scale while presenting.")},this.setReferenceSpaceType=function(t){a=t,!0===i.isPresenting&&console.warn("THREE.WebXRManager: Cannot change reference space type while presenting.")},this.getReferenceSpace=function(){return l||s},this.setReferenceSpace=function(t){l=t},this.getBaseLayer=function(){return null!==u?u:d},this.getBinding=function(){return h},this.getFrame=function(){return p},this.getSession=function(){return n},this.setSession=async function(c){if(n=c,null!==n){if(f=t.getRenderTarget(),n.addEventListener("select",E),n.addEventListener("selectstart",E),n.addEventListener("selectend",E),n.addEventListener("squeeze",E),n.addEventListener("squeezestart",E),n.addEventListener("squeezeend",E),n.addEventListener("end",C),n.addEventListener("inputsourceschange",L),!0!==m.xrCompatible&&await e.makeXRCompatible(),void 0===n.renderState.layers||!1===t.capabilities.isWebGL2){const i={antialias:void 0!==n.renderState.layers||m.antialias,alpha:m.alpha,depth:m.depth,stencil:m.stencil,framebufferScaleFactor:r};d=new XRWebGLLayer(n,e,i),n.updateRenderState({baseLayer:d}),g=new gi(d.framebufferWidth,d.framebufferHeight,{format:St,type:ut,encoding:t.outputEncoding,stencilBuffer:m.stencil})}else{let i=null,s=null,a=null;m.depth&&(a=m.stencil?35056:33190,i=m.stencil?Et:At,s=m.stencil?Mt:gt);const o={colorFormat:32856,depthFormat:a,scaleFactor:r};h=new XRWebGLBinding(n,e),u=h.createProjectionLayer(o),n.updateRenderState({layers:[u]}),g=new gi(u.textureWidth,u.textureHeight,{format:St,type:ut,depthTexture:new uo(u.textureWidth,u.textureHeight,s,void 0,void 0,void 0,void 0,void 0,void 0,i),stencilBuffer:m.stencil,encoding:t.outputEncoding,samples:m.antialias?4:0});t.properties.get(g).__ignoreDepthValues=u.ignoreDepthValues}g.isXRRenderTarget=!0,this.setFoveation(o),l=null,s=await n.requestReferenceSpace(a),N.setContext(n),N.start(),i.isPresenting=!0,i.dispatchEvent({type:"sessionstart"})}};const R=new $e,P=new $e;function I(t,e){null===e?t.matrixWorld.copy(t.matrix):t.matrixWorld.multiplyMatrices(e.matrixWorld,t.matrix),t.matrixWorldInverse.copy(t.matrixWorld).invert()}this.updateCamera=function(t){if(null===n)return;w.near=b.near=M.near=t.near,w.far=b.far=M.far=t.far,T===w.near&&A===w.far||(n.updateRenderState({depthNear:w.near,depthFar:w.far}),T=w.near,A=w.far);const e=t.parent,i=w.cameras;I(w,e);for(let t=0;te&&(y.set(t,t.lastChangedTime),i.dispatchEvent({type:"planechanged",data:t}))}else _.add(t),y.set(t,n.lastChangedTime),i.dispatchEvent({type:"planeadded",data:t})}p=null})),this.setAnimationLoop=function(t){D=t},this.dispose=function(){}}}function mo(t,e){function i(i,n){i.opacity.value=n.opacity,n.color&&i.diffuse.value.copy(n.color),n.emissive&&i.emissive.value.copy(n.emissive).multiplyScalar(n.emissiveIntensity),n.map&&(i.map.value=n.map),n.alphaMap&&(i.alphaMap.value=n.alphaMap),n.bumpMap&&(i.bumpMap.value=n.bumpMap,i.bumpScale.value=n.bumpScale,n.side===c&&(i.bumpScale.value*=-1)),n.displacementMap&&(i.displacementMap.value=n.displacementMap,i.displacementScale.value=n.displacementScale,i.displacementBias.value=n.displacementBias),n.emissiveMap&&(i.emissiveMap.value=n.emissiveMap),n.normalMap&&(i.normalMap.value=n.normalMap,i.normalScale.value.copy(n.normalScale),n.side===c&&i.normalScale.value.negate()),n.specularMap&&(i.specularMap.value=n.specularMap),n.alphaTest>0&&(i.alphaTest.value=n.alphaTest);const r=e.get(n).envMap;if(r&&(i.envMap.value=r,i.flipEnvMap.value=r.isCubeTexture&&!1===r.isRenderTargetTexture?-1:1,i.reflectivity.value=n.reflectivity,i.ior.value=n.ior,i.refractionRatio.value=n.refractionRatio),n.lightMap){i.lightMap.value=n.lightMap;const e=!0===t.useLegacyLights?Math.PI:1;i.lightMapIntensity.value=n.lightMapIntensity*e}let s,a;n.aoMap&&(i.aoMap.value=n.aoMap,i.aoMapIntensity.value=n.aoMapIntensity),n.map?s=n.map:n.specularMap?s=n.specularMap:n.displacementMap?s=n.displacementMap:n.normalMap?s=n.normalMap:n.bumpMap?s=n.bumpMap:n.roughnessMap?s=n.roughnessMap:n.metalnessMap?s=n.metalnessMap:n.alphaMap?s=n.alphaMap:n.emissiveMap?s=n.emissiveMap:n.clearcoatMap?s=n.clearcoatMap:n.clearcoatNormalMap?s=n.clearcoatNormalMap:n.clearcoatRoughnessMap?s=n.clearcoatRoughnessMap:n.iridescenceMap?s=n.iridescenceMap:n.iridescenceThicknessMap?s=n.iridescenceThicknessMap:n.specularIntensityMap?s=n.specularIntensityMap:n.specularColorMap?s=n.specularColorMap:n.transmissionMap?s=n.transmissionMap:n.thicknessMap?s=n.thicknessMap:n.sheenColorMap?s=n.sheenColorMap:n.sheenRoughnessMap&&(s=n.sheenRoughnessMap),void 0!==s&&(s.isWebGLRenderTarget&&(s=s.texture),!0===s.matrixAutoUpdate&&s.updateMatrix(),i.uvTransform.value.copy(s.matrix)),n.aoMap?a=n.aoMap:n.lightMap&&(a=n.lightMap),void 0!==a&&(a.isWebGLRenderTarget&&(a=a.texture),!0===a.matrixAutoUpdate&&a.updateMatrix(),i.uv2Transform.value.copy(a.matrix))}return{refreshFogUniforms:function(e,i){i.color.getRGB(e.fogColor.value,xr(t)),i.isFog?(e.fogNear.value=i.near,e.fogFar.value=i.far):i.isFogExp2&&(e.fogDensity.value=i.density)},refreshMaterialUniforms:function(t,n,r,s,a){n.isMeshBasicMaterial||n.isMeshLambertMaterial?i(t,n):n.isMeshToonMaterial?(i(t,n),function(t,e){e.gradientMap&&(t.gradientMap.value=e.gradientMap)}(t,n)):n.isMeshPhongMaterial?(i(t,n),function(t,e){t.specular.value.copy(e.specular),t.shininess.value=Math.max(e.shininess,1e-4)}(t,n)):n.isMeshStandardMaterial?(i(t,n),function(t,i){t.roughness.value=i.roughness,t.metalness.value=i.metalness,i.roughnessMap&&(t.roughnessMap.value=i.roughnessMap);i.metalnessMap&&(t.metalnessMap.value=i.metalnessMap);const n=e.get(i).envMap;n&&(t.envMapIntensity.value=i.envMapIntensity)}(t,n),n.isMeshPhysicalMaterial&&function(t,e,i){t.ior.value=e.ior,e.sheen>0&&(t.sheenColor.value.copy(e.sheenColor).multiplyScalar(e.sheen),t.sheenRoughness.value=e.sheenRoughness,e.sheenColorMap&&(t.sheenColorMap.value=e.sheenColorMap),e.sheenRoughnessMap&&(t.sheenRoughnessMap.value=e.sheenRoughnessMap));e.clearcoat>0&&(t.clearcoat.value=e.clearcoat,t.clearcoatRoughness.value=e.clearcoatRoughness,e.clearcoatMap&&(t.clearcoatMap.value=e.clearcoatMap),e.clearcoatRoughnessMap&&(t.clearcoatRoughnessMap.value=e.clearcoatRoughnessMap),e.clearcoatNormalMap&&(t.clearcoatNormalScale.value.copy(e.clearcoatNormalScale),t.clearcoatNormalMap.value=e.clearcoatNormalMap,e.side===c&&t.clearcoatNormalScale.value.negate()));e.iridescence>0&&(t.iridescence.value=e.iridescence,t.iridescenceIOR.value=e.iridescenceIOR,t.iridescenceThicknessMinimum.value=e.iridescenceThicknessRange[0],t.iridescenceThicknessMaximum.value=e.iridescenceThicknessRange[1],e.iridescenceMap&&(t.iridescenceMap.value=e.iridescenceMap),e.iridescenceThicknessMap&&(t.iridescenceThicknessMap.value=e.iridescenceThicknessMap));e.transmission>0&&(t.transmission.value=e.transmission,t.transmissionSamplerMap.value=i.texture,t.transmissionSamplerSize.value.set(i.width,i.height),e.transmissionMap&&(t.transmissionMap.value=e.transmissionMap),t.thickness.value=e.thickness,e.thicknessMap&&(t.thicknessMap.value=e.thicknessMap),t.attenuationDistance.value=e.attenuationDistance,t.attenuationColor.value.copy(e.attenuationColor));t.specularIntensity.value=e.specularIntensity,t.specularColor.value.copy(e.specularColor),e.specularIntensityMap&&(t.specularIntensityMap.value=e.specularIntensityMap);e.specularColorMap&&(t.specularColorMap.value=e.specularColorMap)}(t,n,a)):n.isMeshMatcapMaterial?(i(t,n),function(t,e){e.matcap&&(t.matcap.value=e.matcap)}(t,n)):n.isMeshDepthMaterial?i(t,n):n.isMeshDistanceMaterial?(i(t,n),function(t,e){t.referencePosition.value.copy(e.referencePosition),t.nearDistance.value=e.nearDistance,t.farDistance.value=e.farDistance}(t,n)):n.isMeshNormalMaterial?i(t,n):n.isLineBasicMaterial?(function(t,e){t.diffuse.value.copy(e.color),t.opacity.value=e.opacity}(t,n),n.isLineDashedMaterial&&function(t,e){t.dashSize.value=e.dashSize,t.totalSize.value=e.dashSize+e.gapSize,t.scale.value=e.scale}(t,n)):n.isPointsMaterial?function(t,e,i,n){t.diffuse.value.copy(e.color),t.opacity.value=e.opacity,t.size.value=e.size*i,t.scale.value=.5*n,e.map&&(t.map.value=e.map);e.alphaMap&&(t.alphaMap.value=e.alphaMap);e.alphaTest>0&&(t.alphaTest.value=e.alphaTest);let r;e.map?r=e.map:e.alphaMap&&(r=e.alphaMap);void 0!==r&&(!0===r.matrixAutoUpdate&&r.updateMatrix(),t.uvTransform.value.copy(r.matrix))}(t,n,r,s):n.isSpriteMaterial?function(t,e){t.diffuse.value.copy(e.color),t.opacity.value=e.opacity,t.rotation.value=e.rotation,e.map&&(t.map.value=e.map);e.alphaMap&&(t.alphaMap.value=e.alphaMap);e.alphaTest>0&&(t.alphaTest.value=e.alphaTest);let i;e.map?i=e.map:e.alphaMap&&(i=e.alphaMap);void 0!==i&&(!0===i.matrixAutoUpdate&&i.updateMatrix(),t.uvTransform.value.copy(i.matrix))}(t,n):n.isShadowMaterial?(t.color.value.copy(n.color),t.opacity.value=n.opacity):n.isShaderMaterial&&(n.uniformsNeedUpdate=!1)}}}function fo(t,e,i,n){let r={},s={},a=[];const o=i.isWebGL2?t.getParameter(35375):0;function l(t,e,i){const n=t.value;if(void 0===i[e]){if("number"==typeof n)i[e]=n;else{const t=Array.isArray(n)?n:[n],r=[];for(let e=0;e0){r=i%n;0!==r&&n-r-a.boundary<0&&(i+=n-r,s.__offset=i)}i+=a.storage}r=i%n,r>0&&(i+=n-r);t.__size=i,t.__cache={}}(i),d=function(e){const i=function(){for(let t=0;t0&&function(t,e,i){const n=X.isWebGL2;null===k&&(k=new gi(1024,1024,{generateMipmaps:!0,type:q.has("EXT_color_buffer_half_float")?xt:ut,minFilter:ht,samples:n&&!0===a?4:0}));const r=_.getRenderTarget();_.setRenderTarget(k),_.clear();const s=_.toneMapping;_.toneMapping=W,Ot(t,e,i),_.toneMapping=s,K.updateMultisampleRenderTarget(k),K.updateRenderTargetMipmap(k),_.setRenderTarget(r)}(r,e,i),n&&Y.viewport(A.copy(n)),r.length>0&&Ot(r,e,i),s.length>0&&Ot(s,e,i),o.length>0&&Ot(o,e,i),Y.buffers.depth.setTest(!0),Y.buffers.depth.setMask(!0),Y.buffers.color.setMask(!0),Y.setPolygonOffset(!1)}function Ot(t,e,i){const n=!0===e.isScene?e.overrideMaterial:null;for(let r=0,s=t.length;r0?x[x.length-1]:null,v.pop(),f=v.length>0?v[v.length-1]:null},this.getActiveCubeFace=function(){return M},this.getActiveMipmapLevel=function(){return b},this.getRenderTarget=function(){return S},this.setRenderTargetTextures=function(t,e,i){J.get(t.texture).__webglTexture=e,J.get(t.depthTexture).__webglTexture=i;const n=J.get(t);n.__hasExternalTextures=!0,n.__hasExternalTextures&&(n.__autoAllocateDepthBuffer=void 0===i,n.__autoAllocateDepthBuffer||!0===q.has("WEBGL_multisampled_render_to_texture")&&(console.warn("THREE.WebGLRenderer: Render-to-texture extension was disabled because an external texture was provided"),n.__useRenderToTexture=!1))},this.setRenderTargetFramebuffer=function(t,e){const i=J.get(t);i.__webglFramebuffer=e,i.__useDefaultFramebuffer=void 0===e},this.setRenderTarget=function(t,e=0,i=0){S=t,M=e,b=i;let n=!0,r=null,s=!1,a=!1;if(t){const i=J.get(t);void 0!==i.__useDefaultFramebuffer?(Y.bindFramebuffer(36160,null),n=!1):void 0===i.__webglFramebuffer?K.setupRenderTarget(t):i.__hasExternalTextures&&K.rebindTextures(t,J.get(t.texture).__webglTexture,J.get(t.depthTexture).__webglTexture);const o=t.texture;(o.isData3DTexture||o.isDataArrayTexture||o.isCompressedArrayTexture)&&(a=!0);const l=J.get(t).__webglFramebuffer;t.isWebGLCubeRenderTarget?(r=l[e],s=!0):r=X.isWebGL2&&t.samples>0&&!1===K.useMultisampledRTT(t)?J.get(t).__webglMultisampledFramebuffer:l,A.copy(t.viewport),E.copy(t.scissor),C=t.scissorTest}else A.copy(N).multiplyScalar(P).floor(),E.copy(O).multiplyScalar(P).floor(),C=z;if(Y.bindFramebuffer(36160,r)&&X.drawBuffers&&n&&Y.drawBuffers(t,r),Y.viewport(A),Y.scissor(E),Y.setScissorTest(C),s){const n=J.get(t.texture);yt.framebufferTexture2D(36160,36064,34069+e,n.__webglTexture,i)}else if(a){const n=J.get(t.texture),r=e||0;yt.framebufferTextureLayer(36160,36064,n.__webglTexture,i||0,r)}w=-1},this.readRenderTargetPixels=function(t,e,i,n,r,s,a){if(!t||!t.isWebGLRenderTarget)return void console.error("THREE.WebGLRenderer.readRenderTargetPixels: renderTarget is not THREE.WebGLRenderTarget.");let o=J.get(t).__webglFramebuffer;if(t.isWebGLCubeRenderTarget&&void 0!==a&&(o=o[a]),o){Y.bindFramebuffer(36160,o);try{const a=t.texture,o=a.format,l=a.type;if(o!==St&&ft.convert(o)!==yt.getParameter(35739))return void console.error("THREE.WebGLRenderer.readRenderTargetPixels: renderTarget is not in RGBA or implementation defined format.");const c=l===xt&&(q.has("EXT_color_buffer_half_float")||X.isWebGL2&&q.has("EXT_color_buffer_float"));if(!(l===ut||ft.convert(l)===yt.getParameter(35738)||l===vt&&(X.isWebGL2||q.has("OES_texture_float")||q.has("WEBGL_color_buffer_float"))||c))return void console.error("THREE.WebGLRenderer.readRenderTargetPixels: renderTarget is not in UnsignedByteType or implementation defined type.");e>=0&&e<=t.width-n&&i>=0&&i<=t.height-r&&yt.readPixels(e,i,n,r,ft.convert(o),ft.convert(l),s)}finally{const t=null!==S?J.get(S).__webglFramebuffer:null;Y.bindFramebuffer(36160,t)}}},this.copyFramebufferToTexture=function(t,e,i=0){const n=Math.pow(2,-i),r=Math.floor(e.image.width*n),s=Math.floor(e.image.height*n);K.setTexture2D(e,0),yt.copyTexSubImage2D(3553,i,0,0,t.x,t.y,r,s),Y.unbindTexture()},this.copyTextureToTexture=function(t,e,i,n=0){const r=e.image.width,s=e.image.height,a=ft.convert(i.format),o=ft.convert(i.type);K.setTexture2D(i,0),yt.pixelStorei(37440,i.flipY),yt.pixelStorei(37441,i.premultiplyAlpha),yt.pixelStorei(3317,i.unpackAlignment),e.isDataTexture?yt.texSubImage2D(3553,n,t.x,t.y,r,s,a,o,e.image.data):e.isCompressedTexture?yt.compressedTexSubImage2D(3553,n,t.x,t.y,e.mipmaps[0].width,e.mipmaps[0].height,a,e.mipmaps[0].data):yt.texSubImage2D(3553,n,t.x,t.y,a,o,e.image),0===n&&i.generateMipmaps&&yt.generateMipmap(3553),Y.unbindTexture()},this.copyTextureToTexture3D=function(t,e,i,n,r=0){if(_.isWebGL1Renderer)return void console.warn("THREE.WebGLRenderer.copyTextureToTexture3D: can only be used with WebGL2.");const s=t.max.x-t.min.x+1,a=t.max.y-t.min.y+1,o=t.max.z-t.min.z+1,l=ft.convert(n.format),c=ft.convert(n.type);let h;if(n.isData3DTexture)K.setTexture3D(n,0),h=32879;else{if(!n.isDataArrayTexture)return void console.warn("THREE.WebGLRenderer.copyTextureToTexture3D: only supports THREE.DataTexture3D and THREE.DataTexture2DArray.");K.setTexture2DArray(n,0),h=35866}yt.pixelStorei(37440,n.flipY),yt.pixelStorei(37441,n.premultiplyAlpha),yt.pixelStorei(3317,n.unpackAlignment);const u=yt.getParameter(3314),d=yt.getParameter(32878),p=yt.getParameter(3316),m=yt.getParameter(3315),f=yt.getParameter(32877),g=i.isCompressedTexture?i.mipmaps[0]:i.image;yt.pixelStorei(3314,g.width),yt.pixelStorei(32878,g.height),yt.pixelStorei(3316,t.min.x),yt.pixelStorei(3315,t.min.y),yt.pixelStorei(32877,t.min.z),i.isDataTexture||i.isData3DTexture?yt.texSubImage3D(h,r,e.x,e.y,e.z,s,a,o,l,c,g.data):i.isCompressedArrayTexture?(console.warn("THREE.WebGLRenderer.copyTextureToTexture3D: untested support for compressed srcTexture."),yt.compressedTexSubImage3D(h,r,e.x,e.y,e.z,s,a,o,l,g.data)):yt.texSubImage3D(h,r,e.x,e.y,e.z,s,a,o,l,c,g),yt.pixelStorei(3314,u),yt.pixelStorei(32878,d),yt.pixelStorei(3316,p),yt.pixelStorei(3315,m),yt.pixelStorei(32877,f),0===r&&n.generateMipmaps&&yt.generateMipmap(h),Y.unbindTexture()},this.initTexture=function(t){t.isCubeTexture?K.setTextureCube(t,0):t.isData3DTexture?K.setTexture3D(t,0):t.isDataArrayTexture||t.isCompressedArrayTexture?K.setTexture2DArray(t,0):K.setTexture2D(t,0),Y.unbindTexture()},this.resetState=function(){M=0,b=0,S=null,Y.reset(),gt.reset()},"undefined"!=typeof __THREE_DEVTOOLS__&&__THREE_DEVTOOLS__.dispatchEvent(new CustomEvent("observe",{detail:this}))}Object.defineProperties(go.prototype,{physicallyCorrectLights:{get:function(){return console.warn("THREE.WebGLRenderer: the property .physicallyCorrectLights has been removed. Set renderer.useLegacyLights instead."),!this.useLegacyLights},set:function(t){console.warn("THREE.WebGLRenderer: the property .physicallyCorrectLights has been removed. Set renderer.useLegacyLights instead."),this.useLegacyLights=!t}}});class vo extends go{}vo.prototype.isWebGL1Renderer=!0;class xo{constructor(t,e=25e-5){this.isFogExp2=!0,this.name="",this.color=new zn(t),this.density=e}clone(){return new xo(this.color,this.density)}toJSON(){return{type:"FogExp2",color:this.color.getHex(),density:this.density}}}class _o{constructor(t,e=1,i=1e3){this.isFog=!0,this.name="",this.color=new zn(t),this.near=e,this.far=i}clone(){return new _o(this.color,this.near,this.far)}toJSON(){return{type:"Fog",color:this.color.getHex(),near:this.near,far:this.far}}}class yo extends xn{constructor(){super(),this.isScene=!0,this.type="Scene",this.background=null,this.environment=null,this.fog=null,this.backgroundBlurriness=0,this.backgroundIntensity=1,this.overrideMaterial=null,"undefined"!=typeof __THREE_DEVTOOLS__&&__THREE_DEVTOOLS__.dispatchEvent(new CustomEvent("observe",{detail:this}))}copy(t,e){return super.copy(t,e),null!==t.background&&(this.background=t.background.clone()),null!==t.environment&&(this.environment=t.environment.clone()),null!==t.fog&&(this.fog=t.fog.clone()),this.backgroundBlurriness=t.backgroundBlurriness,this.backgroundIntensity=t.backgroundIntensity,null!==t.overrideMaterial&&(this.overrideMaterial=t.overrideMaterial.clone()),this.matrixAutoUpdate=t.matrixAutoUpdate,this}toJSON(t){const e=super.toJSON(t);return null!==this.fog&&(e.object.fog=this.fog.toJSON()),this.backgroundBlurriness>0&&(e.object.backgroundBlurriness=this.backgroundBlurriness),1!==this.backgroundIntensity&&(e.object.backgroundIntensity=this.backgroundIntensity),e}get autoUpdate(){return console.warn("THREE.Scene: autoUpdate was renamed to matrixWorldAutoUpdate in r144."),this.matrixWorldAutoUpdate}set autoUpdate(t){console.warn("THREE.Scene: autoUpdate was renamed to matrixWorldAutoUpdate in r144."),this.matrixWorldAutoUpdate=t}}class Mo{constructor(t,e){this.isInterleavedBuffer=!0,this.array=t,this.stride=e,this.count=void 0!==t?t.length/e:0,this.usage=Ae,this.updateRange={offset:0,count:-1},this.version=0,this.uuid=Ne()}onUploadCallback(){}set needsUpdate(t){!0===t&&this.version++}setUsage(t){return this.usage=t,this}copy(t){return this.array=new t.array.constructor(t.array),this.count=t.count,this.stride=t.stride,this.usage=t.usage,this}copyAt(t,e,i){t*=this.stride,i*=e.stride;for(let n=0,r=this.stride;nt.far||e.push({distance:o,point:Ao.clone(),uv:Ln.getUV(Ao,Io,Do,No,Oo,zo,Uo,new We),face:null,object:this})}copy(t,e){return super.copy(t,e),void 0!==t.center&&this.center.copy(t.center),this.material=t.material,this}}function Fo(t,e,i,n,r,s){Lo.subVectors(t,i).addScalar(.5).multiply(n),void 0!==r?(Ro.x=s*Lo.x-r*Lo.y,Ro.y=r*Lo.x+s*Lo.y):Ro.copy(Lo),t.copy(e),t.x+=Ro.x,t.y+=Ro.y,t.applyMatrix4(Po)}const ko=new $e,Go=new $e;class Vo extends xn{constructor(){super(),this._currentLevel=0,this.type="LOD",Object.defineProperties(this,{levels:{enumerable:!0,value:[]},isLOD:{value:!0}}),this.autoUpdate=!0}copy(t){super.copy(t,!1);const e=t.levels;for(let t=0,i=e.length;t0){let i,n;for(i=1,n=e.length;i0){ko.setFromMatrixPosition(this.matrixWorld);const i=t.ray.origin.distanceTo(ko);this.getObjectForDistance(i).raycast(t,e)}}update(t){const e=this.levels;if(e.length>1){ko.setFromMatrixPosition(t.matrixWorld),Go.setFromMatrixPosition(this.matrixWorld);const i=ko.distanceTo(Go)/t.zoom;let n,r;for(e[0].object.visible=!0,n=1,r=e.length;n=t))break;e[n-1].object.visible=!1,e[n].object.visible=!0}for(this._currentLevel=n-1;no)continue;u.applyMatrix4(this.matrixWorld);const s=t.ray.origin.distanceTo(u);st.far||e.push({distance:s,point:h.clone().applyMatrix4(this.matrixWorld),index:i,face:null,faceIndex:null,object:this})}}else{for(let i=Math.max(0,s.start),n=Math.min(m.count,s.start+s.count)-1;io)continue;u.applyMatrix4(this.matrixWorld);const n=t.ray.origin.distanceTo(u);nt.far||e.push({distance:n,point:h.clone().applyMatrix4(this.matrixWorld),index:i,face:null,faceIndex:null,object:this})}}}updateMorphTargets(){const t=this.geometry.morphAttributes,e=Object.keys(t);if(e.length>0){const i=t[e[0]];if(void 0!==i){this.morphTargetInfluences=[],this.morphTargetDictionary={};for(let t=0,e=i.length;t0){const i=t[e[0]];if(void 0!==i){this.morphTargetInfluences=[],this.morphTargetDictionary={};for(let t=0,e=i.length;tr.far)return;s.push({distance:l,distanceToRay:Math.sqrt(o),point:i,index:e,face:null,object:a})}}class Tl extends mi{constructor(t,e,i,n,r,s,a,o,l,c,h,u){super(null,s,a,o,l,c,n,r,h,u),this.isCompressedTexture=!0,this.image={width:e,height:i},this.mipmaps=t,this.flipY=!1,this.generateMipmaps=!1}}class Al{constructor(){this.type="Curve",this.arcLengthDivisions=200}getPoint(){return console.warn("THREE.Curve: .getPoint() not implemented."),null}getPointAt(t,e){const i=this.getUtoTmapping(t);return this.getPoint(i,e)}getPoints(t=5){const e=[];for(let i=0;i<=t;i++)e.push(this.getPoint(i/t));return e}getSpacedPoints(t=5){const e=[];for(let i=0;i<=t;i++)e.push(this.getPointAt(i/t));return e}getLength(){const t=this.getLengths();return t[t.length-1]}getLengths(t=this.arcLengthDivisions){if(this.cacheArcLengths&&this.cacheArcLengths.length===t+1&&!this.needsUpdate)return this.cacheArcLengths;this.needsUpdate=!1;const e=[];let i,n=this.getPoint(0),r=0;e.push(0);for(let s=1;s<=t;s++)i=this.getPoint(s/t),r+=i.distanceTo(n),e.push(r),n=i;return this.cacheArcLengths=e,e}updateArcLengths(){this.needsUpdate=!0,this.getLengths()}getUtoTmapping(t,e){const i=this.getLengths();let n=0;const r=i.length;let s;s=e||t*i[r-1];let a,o=0,l=r-1;for(;o<=l;)if(n=Math.floor(o+(l-o)/2),a=i[n]-s,a<0)o=n+1;else{if(!(a>0)){l=n;break}l=n-1}if(n=l,i[n]===s)return n/(r-1);const c=i[n];return(n+(s-c)/(i[n+1]-c))/(r-1)}getTangent(t,e){const i=1e-4;let n=t-i,r=t+i;n<0&&(n=0),r>1&&(r=1);const s=this.getPoint(n),a=this.getPoint(r),o=e||(s.isVector2?new We:new $e);return o.copy(a).sub(s).normalize(),o}getTangentAt(t,e){const i=this.getUtoTmapping(t);return this.getTangent(i,e)}computeFrenetFrames(t,e){const i=new $e,n=[],r=[],s=[],a=new $e,o=new qi;for(let e=0;e<=t;e++){const i=e/t;n[e]=this.getTangentAt(i,new $e)}r[0]=new $e,s[0]=new $e;let l=Number.MAX_VALUE;const c=Math.abs(n[0].x),h=Math.abs(n[0].y),u=Math.abs(n[0].z);c<=l&&(l=c,i.set(1,0,0)),h<=l&&(l=h,i.set(0,1,0)),u<=l&&i.set(0,0,1),a.crossVectors(n[0],i).normalize(),r[0].crossVectors(n[0],a),s[0].crossVectors(n[0],r[0]);for(let e=1;e<=t;e++){if(r[e]=r[e-1].clone(),s[e]=s[e-1].clone(),a.crossVectors(n[e-1],n[e]),a.length()>Number.EPSILON){a.normalize();const t=Math.acos(Oe(n[e-1].dot(n[e]),-1,1));r[e].applyMatrix4(o.makeRotationAxis(a,t))}s[e].crossVectors(n[e],r[e])}if(!0===e){let e=Math.acos(Oe(r[0].dot(r[t]),-1,1));e/=t,n[0].dot(a.crossVectors(r[0],r[t]))>0&&(e=-e);for(let i=1;i<=t;i++)r[i].applyMatrix4(o.makeRotationAxis(n[i],e*i)),s[i].crossVectors(n[i],r[i])}return{tangents:n,normals:r,binormals:s}}clone(){return(new this.constructor).copy(this)}copy(t){return this.arcLengthDivisions=t.arcLengthDivisions,this}toJSON(){const t={metadata:{version:4.5,type:"Curve",generator:"Curve.toJSON"}};return t.arcLengthDivisions=this.arcLengthDivisions,t.type=this.type,t}fromJSON(t){return this.arcLengthDivisions=t.arcLengthDivisions,this}}class El extends Al{constructor(t=0,e=0,i=1,n=1,r=0,s=2*Math.PI,a=!1,o=0){super(),this.isEllipseCurve=!0,this.type="EllipseCurve",this.aX=t,this.aY=e,this.xRadius=i,this.yRadius=n,this.aStartAngle=r,this.aEndAngle=s,this.aClockwise=a,this.aRotation=o}getPoint(t,e){const i=e||new We,n=2*Math.PI;let r=this.aEndAngle-this.aStartAngle;const s=Math.abs(r)n;)r-=n;r0?0:(Math.floor(Math.abs(l)/r)+1)*r:0===c&&l===r-1&&(l=r-2,c=1),this.closed||l>0?a=n[(l-1)%r]:(Rl.subVectors(n[0],n[1]).add(n[0]),a=Rl);const h=n[l%r],u=n[(l+1)%r];if(this.closed||l+2n.length-2?n.length-1:s+1],h=n[s>n.length-3?n.length-1:s+2];return i.set(Ol(a,o.x,l.x,c.x,h.x),Ol(a,o.y,l.y,c.y,h.y)),i}copy(t){super.copy(t),this.points=[];for(let e=0,i=t.points.length;e=i){const t=n[r]-i,s=this.curves[r],a=s.getLength(),o=0===a?0:1-t/a;return s.getPointAt(o,e)}r++}return null}getLength(){const t=this.getCurveLengths();return t[t.length-1]}updateArcLengths(){this.needsUpdate=!0,this.cacheLengths=null,this.getCurveLengths()}getCurveLengths(){if(this.cacheLengths&&this.cacheLengths.length===this.curves.length)return this.cacheLengths;const t=[];let e=0;for(let i=0,n=this.curves.length;i1&&!e[e.length-1].equals(e[0])&&e.push(e[0]),e}copy(t){super.copy(t),this.curves=[];for(let e=0,i=t.curves.length;e0){const t=l.getPoint(0);t.equals(this.currentPoint)||this.lineTo(t.x,t.y)}this.curves.push(l);const c=l.getPoint(1);return this.currentPoint.copy(c),this}copy(t){return super.copy(t),this.currentPoint.copy(t.currentPoint),this}toJSON(){const t=super.toJSON();return t.currentPoint=this.currentPoint.toArray(),t}fromJSON(t){return super.fromJSON(t),this.currentPoint.fromArray(t.currentPoint),this}}class Yl extends $n{constructor(t=[new We(0,-.5),new We(.5,0),new We(0,.5)],e=12,i=0,n=2*Math.PI){super(),this.type="LatheGeometry",this.parameters={points:t,segments:e,phiStart:i,phiLength:n},e=Math.floor(e),n=Oe(n,0,2*Math.PI);const r=[],s=[],a=[],o=[],l=[],c=1/e,h=new $e,u=new We,d=new $e,p=new $e,m=new $e;let f=0,g=0;for(let e=0;e<=t.length-1;e++)switch(e){case 0:f=t[e+1].x-t[e].x,g=t[e+1].y-t[e].y,d.x=1*g,d.y=-f,d.z=0*g,m.copy(d),d.normalize(),o.push(d.x,d.y,d.z);break;case t.length-1:o.push(m.x,m.y,m.z);break;default:f=t[e+1].x-t[e].x,g=t[e+1].y-t[e].y,d.x=1*g,d.y=-f,d.z=0*g,p.copy(d),d.x+=m.x,d.y+=m.y,d.z+=m.z,d.normalize(),o.push(d.x,d.y,d.z),m.copy(p)}for(let r=0;r<=e;r++){const d=i+r*c*n,p=Math.sin(d),m=Math.cos(d);for(let i=0;i<=t.length-1;i++){h.x=t[i].x*p,h.y=t[i].y,h.z=t[i].x*m,s.push(h.x,h.y,h.z),u.x=r/e,u.y=i/(t.length-1),a.push(u.x,u.y);const n=o[3*i+0]*p,c=o[3*i+1],d=o[3*i+0]*m;l.push(n,c,d)}}for(let i=0;i0&&v(!0),e>0&&v(!1)),this.setIndex(c),this.setAttribute("position",new Wn(h,3)),this.setAttribute("normal",new Wn(u,3)),this.setAttribute("uv",new Wn(d,2))}copy(t){return super.copy(t),this.parameters=Object.assign({},t.parameters),this}static fromJSON(t){return new Kl(t.radiusTop,t.radiusBottom,t.height,t.radialSegments,t.heightSegments,t.openEnded,t.thetaStart,t.thetaLength)}}class $l extends Kl{constructor(t=1,e=1,i=32,n=1,r=!1,s=0,a=2*Math.PI){super(0,t,e,i,n,r,s,a),this.type="ConeGeometry",this.parameters={radius:t,height:e,radialSegments:i,heightSegments:n,openEnded:r,thetaStart:s,thetaLength:a}}static fromJSON(t){return new $l(t.radius,t.height,t.radialSegments,t.heightSegments,t.openEnded,t.thetaStart,t.thetaLength)}}class Ql extends $n{constructor(t=[],e=[],i=1,n=0){super(),this.type="PolyhedronGeometry",this.parameters={vertices:t,indices:e,radius:i,detail:n};const r=[],s=[];function a(t,e,i,n){const r=n+1,s=[];for(let n=0;n<=r;n++){s[n]=[];const a=t.clone().lerp(i,n/r),o=e.clone().lerp(i,n/r),l=r-n;for(let t=0;t<=l;t++)s[n][t]=0===t&&n===r?a:a.clone().lerp(o,t/l)}for(let t=0;t.9&&a<.1&&(e<.2&&(s[t+0]+=1),i<.2&&(s[t+2]+=1),n<.2&&(s[t+4]+=1))}}()}(),this.setAttribute("position",new Wn(r,3)),this.setAttribute("normal",new Wn(r.slice(),3)),this.setAttribute("uv",new Wn(s,2)),0===n?this.computeVertexNormals():this.normalizeNormals()}copy(t){return super.copy(t),this.parameters=Object.assign({},t.parameters),this}static fromJSON(t){return new Ql(t.vertices,t.indices,t.radius,t.details)}}class tc extends Ql{constructor(t=1,e=0){const i=(1+Math.sqrt(5))/2,n=1/i;super([-1,-1,-1,-1,-1,1,-1,1,-1,-1,1,1,1,-1,-1,1,-1,1,1,1,-1,1,1,1,0,-n,-i,0,-n,i,0,n,-i,0,n,i,-n,-i,0,-n,i,0,n,-i,0,n,i,0,-i,0,-n,i,0,-n,-i,0,n,i,0,n],[3,11,7,3,7,15,3,15,13,7,19,17,7,17,6,7,6,15,17,4,8,17,8,10,17,10,6,8,0,16,8,16,2,8,2,10,0,12,1,0,1,18,0,18,16,6,10,2,6,2,13,6,13,15,2,16,18,2,18,3,2,3,13,18,1,9,18,9,11,18,11,3,4,14,12,4,12,0,4,0,8,11,9,5,11,5,19,11,19,7,19,5,14,19,14,4,19,4,17,1,12,14,1,14,5,1,5,9],t,e),this.type="DodecahedronGeometry",this.parameters={radius:t,detail:e}}static fromJSON(t){return new tc(t.radius,t.detail)}}const ec=new $e,ic=new $e,nc=new $e,rc=new Ln;class sc extends $n{constructor(t=null,e=1){if(super(),this.type="EdgesGeometry",this.parameters={geometry:t,thresholdAngle:e},null!==t){const i=4,n=Math.pow(10,i),r=Math.cos(Ie*e),s=t.getIndex(),a=t.getAttribute("position"),o=s?s.count:a.count,l=[0,0,0],c=["a","b","c"],h=new Array(3),u={},d=[];for(let t=0;t80*i){o=c=t[0],l=h=t[1];for(let e=i;ec&&(c=u),d>h&&(h=d);p=Math.max(c-o,h-l),p=0!==p?32767/p:0}return hc(s,a,i,o,l,p,0),a};function lc(t,e,i,n,r){let s,a;if(r===function(t,e,i,n){let r=0;for(let s=e,a=i-n;s0)for(s=e;s=e;s-=n)a=Lc(s,t[s],t[s+1],a);return a&&Sc(a,a.next)&&(Rc(a),a=a.next),a}function cc(t,e){if(!t)return t;e||(e=t);let i,n=t;do{if(i=!1,n.steiner||!Sc(n,n.next)&&0!==bc(n.prev,n,n.next))n=n.next;else{if(Rc(n),n=e=n.prev,n===n.next)break;i=!0}}while(i||n!==e);return e}function hc(t,e,i,n,r,s,a){if(!t)return;!a&&s&&function(t,e,i,n){let r=t;do{0===r.z&&(r.z=xc(r.x,r.y,e,i,n)),r.prevZ=r.prev,r.nextZ=r.next,r=r.next}while(r!==t);r.prevZ.nextZ=null,r.prevZ=null,function(t){let e,i,n,r,s,a,o,l,c=1;do{for(i=t,t=null,s=null,a=0;i;){for(a++,n=i,o=0,e=0;e0||l>0&&n;)0!==o&&(0===l||!n||i.z<=n.z)?(r=i,i=i.nextZ,o--):(r=n,n=n.nextZ,l--),s?s.nextZ=r:t=r,r.prevZ=s,s=r;i=n}s.nextZ=null,c*=2}while(a>1)}(r)}(t,n,r,s);let o,l,c=t;for(;t.prev!==t.next;)if(o=t.prev,l=t.next,s?dc(t,n,r,s):uc(t))e.push(o.i/i|0),e.push(t.i/i|0),e.push(l.i/i|0),Rc(t),t=l.next,c=l.next;else if((t=l)===c){a?1===a?hc(t=pc(cc(t),e,i),e,i,n,r,s,2):2===a&&mc(t,e,i,n,r,s):hc(cc(t),e,i,n,r,s,1);break}}function uc(t){const e=t.prev,i=t,n=t.next;if(bc(e,i,n)>=0)return!1;const r=e.x,s=i.x,a=n.x,o=e.y,l=i.y,c=n.y,h=rs?r>a?r:a:s>a?s:a,p=o>l?o>c?o:c:l>c?l:c;let m=n.next;for(;m!==e;){if(m.x>=h&&m.x<=d&&m.y>=u&&m.y<=p&&yc(r,o,s,l,a,c,m.x,m.y)&&bc(m.prev,m,m.next)>=0)return!1;m=m.next}return!0}function dc(t,e,i,n){const r=t.prev,s=t,a=t.next;if(bc(r,s,a)>=0)return!1;const o=r.x,l=s.x,c=a.x,h=r.y,u=s.y,d=a.y,p=ol?o>c?o:c:l>c?l:c,g=h>u?h>d?h:d:u>d?u:d,v=xc(p,m,e,i,n),x=xc(f,g,e,i,n);let _=t.prevZ,y=t.nextZ;for(;_&&_.z>=v&&y&&y.z<=x;){if(_.x>=p&&_.x<=f&&_.y>=m&&_.y<=g&&_!==r&&_!==a&&yc(o,h,l,u,c,d,_.x,_.y)&&bc(_.prev,_,_.next)>=0)return!1;if(_=_.prevZ,y.x>=p&&y.x<=f&&y.y>=m&&y.y<=g&&y!==r&&y!==a&&yc(o,h,l,u,c,d,y.x,y.y)&&bc(y.prev,y,y.next)>=0)return!1;y=y.nextZ}for(;_&&_.z>=v;){if(_.x>=p&&_.x<=f&&_.y>=m&&_.y<=g&&_!==r&&_!==a&&yc(o,h,l,u,c,d,_.x,_.y)&&bc(_.prev,_,_.next)>=0)return!1;_=_.prevZ}for(;y&&y.z<=x;){if(y.x>=p&&y.x<=f&&y.y>=m&&y.y<=g&&y!==r&&y!==a&&yc(o,h,l,u,c,d,y.x,y.y)&&bc(y.prev,y,y.next)>=0)return!1;y=y.nextZ}return!0}function pc(t,e,i){let n=t;do{const r=n.prev,s=n.next.next;!Sc(r,s)&&wc(r,n,n.next,s)&&Ec(r,s)&&Ec(s,r)&&(e.push(r.i/i|0),e.push(n.i/i|0),e.push(s.i/i|0),Rc(n),Rc(n.next),n=t=s),n=n.next}while(n!==t);return cc(n)}function mc(t,e,i,n,r,s){let a=t;do{let t=a.next.next;for(;t!==a.prev;){if(a.i!==t.i&&Mc(a,t)){let o=Cc(a,t);return a=cc(a,a.next),o=cc(o,o.next),hc(a,e,i,n,r,s,0),void hc(o,e,i,n,r,s,0)}t=t.next}a=a.next}while(a!==t)}function fc(t,e){return t.x-e.x}function gc(t,e){const i=function(t,e){let i,n=e,r=-1/0;const s=t.x,a=t.y;do{if(a<=n.y&&a>=n.next.y&&n.next.y!==n.y){const t=n.x+(a-n.y)*(n.next.x-n.x)/(n.next.y-n.y);if(t<=s&&t>r&&(r=t,i=n.x=n.x&&n.x>=l&&s!==n.x&&yc(ai.x||n.x===i.x&&vc(i,n)))&&(i=n,u=h)),n=n.next}while(n!==o);return i}(t,e);if(!i)return e;const n=Cc(i,t);return cc(n,n.next),cc(i,i.next)}function vc(t,e){return bc(t.prev,t,e.prev)<0&&bc(e.next,t,t.next)<0}function xc(t,e,i,n,r){return(t=1431655765&((t=858993459&((t=252645135&((t=16711935&((t=(t-i)*r|0)|t<<8))|t<<4))|t<<2))|t<<1))|(e=1431655765&((e=858993459&((e=252645135&((e=16711935&((e=(e-n)*r|0)|e<<8))|e<<4))|e<<2))|e<<1))<<1}function _c(t){let e=t,i=t;do{(e.x=(t-a)*(s-o)&&(t-a)*(n-o)>=(i-a)*(e-o)&&(i-a)*(s-o)>=(r-a)*(n-o)}function Mc(t,e){return t.next.i!==e.i&&t.prev.i!==e.i&&!function(t,e){let i=t;do{if(i.i!==t.i&&i.next.i!==t.i&&i.i!==e.i&&i.next.i!==e.i&&wc(i,i.next,t,e))return!0;i=i.next}while(i!==t);return!1}(t,e)&&(Ec(t,e)&&Ec(e,t)&&function(t,e){let i=t,n=!1;const r=(t.x+e.x)/2,s=(t.y+e.y)/2;do{i.y>s!=i.next.y>s&&i.next.y!==i.y&&r<(i.next.x-i.x)*(s-i.y)/(i.next.y-i.y)+i.x&&(n=!n),i=i.next}while(i!==t);return n}(t,e)&&(bc(t.prev,t,e.prev)||bc(t,e.prev,e))||Sc(t,e)&&bc(t.prev,t,t.next)>0&&bc(e.prev,e,e.next)>0)}function bc(t,e,i){return(e.y-t.y)*(i.x-e.x)-(e.x-t.x)*(i.y-e.y)}function Sc(t,e){return t.x===e.x&&t.y===e.y}function wc(t,e,i,n){const r=Ac(bc(t,e,i)),s=Ac(bc(t,e,n)),a=Ac(bc(i,n,t)),o=Ac(bc(i,n,e));return r!==s&&a!==o||(!(0!==r||!Tc(t,i,e))||(!(0!==s||!Tc(t,n,e))||(!(0!==a||!Tc(i,t,n))||!(0!==o||!Tc(i,e,n)))))}function Tc(t,e,i){return e.x<=Math.max(t.x,i.x)&&e.x>=Math.min(t.x,i.x)&&e.y<=Math.max(t.y,i.y)&&e.y>=Math.min(t.y,i.y)}function Ac(t){return t>0?1:t<0?-1:0}function Ec(t,e){return bc(t.prev,t,t.next)<0?bc(t,e,t.next)>=0&&bc(t,t.prev,e)>=0:bc(t,e,t.prev)<0||bc(t,t.next,e)<0}function Cc(t,e){const i=new Pc(t.i,t.x,t.y),n=new Pc(e.i,e.x,e.y),r=t.next,s=e.prev;return t.next=e,e.prev=t,i.next=r,r.prev=i,n.next=i,i.prev=n,s.next=n,n.prev=s,n}function Lc(t,e,i,n){const r=new Pc(t,e,i);return n?(r.next=n.next,r.prev=n,n.next.prev=r,n.next=r):(r.prev=r,r.next=r),r}function Rc(t){t.next.prev=t.prev,t.prev.next=t.next,t.prevZ&&(t.prevZ.nextZ=t.nextZ),t.nextZ&&(t.nextZ.prevZ=t.prevZ)}function Pc(t,e,i){this.i=t,this.x=e,this.y=i,this.prev=null,this.next=null,this.z=0,this.prevZ=null,this.nextZ=null,this.steiner=!1}class Ic{static area(t){const e=t.length;let i=0;for(let n=e-1,r=0;r2&&t[e-1].equals(t[0])&&t.pop()}function Nc(t,e){for(let i=0;iNumber.EPSILON){const u=Math.sqrt(h),d=Math.sqrt(l*l+c*c),p=e.x-o/u,m=e.y+a/u,f=((i.x-c/d-p)*c-(i.y+l/d-m)*l)/(a*c-o*l);n=p+a*f-t.x,r=m+o*f-t.y;const g=n*n+r*r;if(g<=2)return new We(n,r);s=Math.sqrt(g/2)}else{let t=!1;a>Number.EPSILON?l>Number.EPSILON&&(t=!0):a<-Number.EPSILON?l<-Number.EPSILON&&(t=!0):Math.sign(o)===Math.sign(c)&&(t=!0),t?(n=-o,r=a,s=Math.sqrt(h)):(n=a,r=o,s=Math.sqrt(h/2))}return new We(n/s,r/s)}const P=[];for(let t=0,e=A.length,i=e-1,n=t+1;t=0;t--){const e=t/p,i=h*Math.cos(e*Math.PI/2),n=u*Math.sin(e*Math.PI/2)+d;for(let t=0,e=A.length;t=0;){const n=i;let r=i-1;r<0&&(r=t.length-1);for(let t=0,i=o+2*p;t0)&&d.push(e,r,l),(t!==i-1||o0!=t>0&&this.version++,this._sheen=t}get clearcoat(){return this._clearcoat}set clearcoat(t){this._clearcoat>0!=t>0&&this.version++,this._clearcoat=t}get iridescence(){return this._iridescence}set iridescence(t){this._iridescence>0!=t>0&&this.version++,this._iridescence=t}get transmission(){return this._transmission}set transmission(t){this._transmission>0!=t>0&&this.version++,this._transmission=t}copy(t){return super.copy(t),this.defines={STANDARD:"",PHYSICAL:""},this.clearcoat=t.clearcoat,this.clearcoatMap=t.clearcoatMap,this.clearcoatRoughness=t.clearcoatRoughness,this.clearcoatRoughnessMap=t.clearcoatRoughnessMap,this.clearcoatNormalMap=t.clearcoatNormalMap,this.clearcoatNormalScale.copy(t.clearcoatNormalScale),this.ior=t.ior,this.iridescence=t.iridescence,this.iridescenceMap=t.iridescenceMap,this.iridescenceIOR=t.iridescenceIOR,this.iridescenceThicknessRange=[...t.iridescenceThicknessRange],this.iridescenceThicknessMap=t.iridescenceThicknessMap,this.sheen=t.sheen,this.sheenColor.copy(t.sheenColor),this.sheenColorMap=t.sheenColorMap,this.sheenRoughness=t.sheenRoughness,this.sheenRoughnessMap=t.sheenRoughnessMap,this.transmission=t.transmission,this.transmissionMap=t.transmissionMap,this.thickness=t.thickness,this.thicknessMap=t.thicknessMap,this.attenuationDistance=t.attenuationDistance,this.attenuationColor.copy(t.attenuationColor),this.specularIntensity=t.specularIntensity,this.specularIntensityMap=t.specularIntensityMap,this.specularColor.copy(t.specularColor),this.specularColorMap=t.specularColorMap,this}}class Qc extends Pn{constructor(t){super(),this.isMeshPhongMaterial=!0,this.type="MeshPhongMaterial",this.color=new zn(16777215),this.specular=new zn(1118481),this.shininess=30,this.map=null,this.lightMap=null,this.lightMapIntensity=1,this.aoMap=null,this.aoMapIntensity=1,this.emissive=new zn(0),this.emissiveIntensity=1,this.emissiveMap=null,this.bumpMap=null,this.bumpScale=1,this.normalMap=null,this.normalMapType=ye,this.normalScale=new We(1,1),this.displacementMap=null,this.displacementScale=1,this.displacementBias=0,this.specularMap=null,this.alphaMap=null,this.envMap=null,this.combine=G,this.reflectivity=1,this.refractionRatio=.98,this.wireframe=!1,this.wireframeLinewidth=1,this.wireframeLinecap="round",this.wireframeLinejoin="round",this.flatShading=!1,this.fog=!0,this.setValues(t)}copy(t){return super.copy(t),this.color.copy(t.color),this.specular.copy(t.specular),this.shininess=t.shininess,this.map=t.map,this.lightMap=t.lightMap,this.lightMapIntensity=t.lightMapIntensity,this.aoMap=t.aoMap,this.aoMapIntensity=t.aoMapIntensity,this.emissive.copy(t.emissive),this.emissiveMap=t.emissiveMap,this.emissiveIntensity=t.emissiveIntensity,this.bumpMap=t.bumpMap,this.bumpScale=t.bumpScale,this.normalMap=t.normalMap,this.normalMapType=t.normalMapType,this.normalScale.copy(t.normalScale),this.displacementMap=t.displacementMap,this.displacementScale=t.displacementScale,this.displacementBias=t.displacementBias,this.specularMap=t.specularMap,this.alphaMap=t.alphaMap,this.envMap=t.envMap,this.combine=t.combine,this.reflectivity=t.reflectivity,this.refractionRatio=t.refractionRatio,this.wireframe=t.wireframe,this.wireframeLinewidth=t.wireframeLinewidth,this.wireframeLinecap=t.wireframeLinecap,this.wireframeLinejoin=t.wireframeLinejoin,this.flatShading=t.flatShading,this.fog=t.fog,this}}class th extends Pn{constructor(t){super(),this.isMeshToonMaterial=!0,this.defines={TOON:""},this.type="MeshToonMaterial",this.color=new zn(16777215),this.map=null,this.gradientMap=null,this.lightMap=null,this.lightMapIntensity=1,this.aoMap=null,this.aoMapIntensity=1,this.emissive=new zn(0),this.emissiveIntensity=1,this.emissiveMap=null,this.bumpMap=null,this.bumpScale=1,this.normalMap=null,this.normalMapType=ye,this.normalScale=new We(1,1),this.displacementMap=null,this.displacementScale=1,this.displacementBias=0,this.alphaMap=null,this.wireframe=!1,this.wireframeLinewidth=1,this.wireframeLinecap="round",this.wireframeLinejoin="round",this.fog=!0,this.setValues(t)}copy(t){return super.copy(t),this.color.copy(t.color),this.map=t.map,this.gradientMap=t.gradientMap,this.lightMap=t.lightMap,this.lightMapIntensity=t.lightMapIntensity,this.aoMap=t.aoMap,this.aoMapIntensity=t.aoMapIntensity,this.emissive.copy(t.emissive),this.emissiveMap=t.emissiveMap,this.emissiveIntensity=t.emissiveIntensity,this.bumpMap=t.bumpMap,this.bumpScale=t.bumpScale,this.normalMap=t.normalMap,this.normalMapType=t.normalMapType,this.normalScale.copy(t.normalScale),this.displacementMap=t.displacementMap,this.displacementScale=t.displacementScale,this.displacementBias=t.displacementBias,this.alphaMap=t.alphaMap,this.wireframe=t.wireframe,this.wireframeLinewidth=t.wireframeLinewidth,this.wireframeLinecap=t.wireframeLinecap,this.wireframeLinejoin=t.wireframeLinejoin,this.fog=t.fog,this}}class eh extends Pn{constructor(t){super(),this.isMeshNormalMaterial=!0,this.type="MeshNormalMaterial",this.bumpMap=null,this.bumpScale=1,this.normalMap=null,this.normalMapType=ye,this.normalScale=new We(1,1),this.displacementMap=null,this.displacementScale=1,this.displacementBias=0,this.wireframe=!1,this.wireframeLinewidth=1,this.flatShading=!1,this.setValues(t)}copy(t){return super.copy(t),this.bumpMap=t.bumpMap,this.bumpScale=t.bumpScale,this.normalMap=t.normalMap,this.normalMapType=t.normalMapType,this.normalScale.copy(t.normalScale),this.displacementMap=t.displacementMap,this.displacementScale=t.displacementScale,this.displacementBias=t.displacementBias,this.wireframe=t.wireframe,this.wireframeLinewidth=t.wireframeLinewidth,this.flatShading=t.flatShading,this}}class ih extends Pn{constructor(t){super(),this.isMeshLambertMaterial=!0,this.type="MeshLambertMaterial",this.color=new zn(16777215),this.map=null,this.lightMap=null,this.lightMapIntensity=1,this.aoMap=null,this.aoMapIntensity=1,this.emissive=new zn(0),this.emissiveIntensity=1,this.emissiveMap=null,this.bumpMap=null,this.bumpScale=1,this.normalMap=null,this.normalMapType=ye,this.normalScale=new We(1,1),this.displacementMap=null,this.displacementScale=1,this.displacementBias=0,this.specularMap=null,this.alphaMap=null,this.envMap=null,this.combine=G,this.reflectivity=1,this.refractionRatio=.98,this.wireframe=!1,this.wireframeLinewidth=1,this.wireframeLinecap="round",this.wireframeLinejoin="round",this.flatShading=!1,this.fog=!0,this.setValues(t)}copy(t){return super.copy(t),this.color.copy(t.color),this.map=t.map,this.lightMap=t.lightMap,this.lightMapIntensity=t.lightMapIntensity,this.aoMap=t.aoMap,this.aoMapIntensity=t.aoMapIntensity,this.emissive.copy(t.emissive),this.emissiveMap=t.emissiveMap,this.emissiveIntensity=t.emissiveIntensity,this.bumpMap=t.bumpMap,this.bumpScale=t.bumpScale,this.normalMap=t.normalMap,this.normalMapType=t.normalMapType,this.normalScale.copy(t.normalScale),this.displacementMap=t.displacementMap,this.displacementScale=t.displacementScale,this.displacementBias=t.displacementBias,this.specularMap=t.specularMap,this.alphaMap=t.alphaMap,this.envMap=t.envMap,this.combine=t.combine,this.reflectivity=t.reflectivity,this.refractionRatio=t.refractionRatio,this.wireframe=t.wireframe,this.wireframeLinewidth=t.wireframeLinewidth,this.wireframeLinecap=t.wireframeLinecap,this.wireframeLinejoin=t.wireframeLinejoin,this.flatShading=t.flatShading,this.fog=t.fog,this}}class nh extends Pn{constructor(t){super(),this.isMeshMatcapMaterial=!0,this.defines={MATCAP:""},this.type="MeshMatcapMaterial",this.color=new zn(16777215),this.matcap=null,this.map=null,this.bumpMap=null,this.bumpScale=1,this.normalMap=null,this.normalMapType=ye,this.normalScale=new We(1,1),this.displacementMap=null,this.displacementScale=1,this.displacementBias=0,this.alphaMap=null,this.flatShading=!1,this.fog=!0,this.setValues(t)}copy(t){return super.copy(t),this.defines={MATCAP:""},this.color.copy(t.color),this.matcap=t.matcap,this.map=t.map,this.bumpMap=t.bumpMap,this.bumpScale=t.bumpScale,this.normalMap=t.normalMap,this.normalMapType=t.normalMapType,this.normalScale.copy(t.normalScale),this.displacementMap=t.displacementMap,this.displacementScale=t.displacementScale,this.displacementBias=t.displacementBias,this.alphaMap=t.alphaMap,this.flatShading=t.flatShading,this.fog=t.fog,this}}class rh extends ol{constructor(t){super(),this.isLineDashedMaterial=!0,this.type="LineDashedMaterial",this.scale=1,this.dashSize=3,this.gapSize=1,this.setValues(t)}copy(t){return super.copy(t),this.scale=t.scale,this.dashSize=t.dashSize,this.gapSize=t.gapSize,this}}function sh(t,e,i){return oh(t)?new t.constructor(t.subarray(e,void 0!==i?i:t.length)):t.slice(e,i)}function ah(t,e,i){return!t||!i&&t.constructor===e?t:"number"==typeof e.BYTES_PER_ELEMENT?new e(t):Array.prototype.slice.call(t)}function oh(t){return ArrayBuffer.isView(t)&&!(t instanceof DataView)}function lh(t){const e=t.length,i=new Array(e);for(let t=0;t!==e;++t)i[t]=t;return i.sort((function(e,i){return t[e]-t[i]})),i}function ch(t,e,i){const n=t.length,r=new t.constructor(n);for(let s=0,a=0;a!==n;++s){const n=i[s]*e;for(let i=0;i!==e;++i)r[a++]=t[n+i]}return r}function hh(t,e,i,n){let r=1,s=t[0];for(;void 0!==s&&void 0===s[n];)s=t[r++];if(void 0===s)return;let a=s[n];if(void 0!==a)if(Array.isArray(a))do{a=s[n],void 0!==a&&(e.push(s.time),i.push.apply(i,a)),s=t[r++]}while(void 0!==s);else if(void 0!==a.toArray)do{a=s[n],void 0!==a&&(e.push(s.time),a.toArray(i,i.length)),s=t[r++]}while(void 0!==s);else do{a=s[n],void 0!==a&&(e.push(s.time),i.push(a)),s=t[r++]}while(void 0!==s)}const uh={arraySlice:sh,convertArray:ah,isTypedArray:oh,getKeyframeOrder:lh,sortedArray:ch,flattenJSON:hh,subclip:function(t,e,i,n,r=30){const s=t.clone();s.name=e;const a=[];for(let t=0;t=n)){l.push(e.times[t]);for(let i=0;is.tracks[t].times[0]&&(o=s.tracks[t].times[0]);for(let t=0;t=n.times[u]){const t=u*l+o,e=t+l-o;d=sh(n.values,t,e)}else{const t=n.createInterpolant(),e=o,i=l-o;t.evaluate(s),d=sh(t.resultBuffer,e,i)}if("quaternion"===r){(new Ke).fromArray(d).normalize().conjugate().toArray(d)}const p=a.times.length;for(let t=0;t=r)break t;{const a=e[1];t=r)break e}s=i,i=0}}for(;i>>1;te;)--s;if(++s,0!==r||s!==n){r>=s&&(s=Math.max(s,1),r=s-1);const t=this.getValueSize();this.times=sh(i,r,s),this.values=sh(this.values,r*t,s*t)}return this}validate(){let t=!0;const e=this.getValueSize();e-Math.floor(e)!=0&&(console.error("THREE.KeyframeTrack: Invalid value size in track.",this),t=!1);const i=this.times,n=this.values,r=i.length;0===r&&(console.error("THREE.KeyframeTrack: Track is empty.",this),t=!1);let s=null;for(let e=0;e!==r;e++){const n=i[e];if("number"==typeof n&&isNaN(n)){console.error("THREE.KeyframeTrack: Time is not a valid number.",this,e,n),t=!1;break}if(null!==s&&s>n){console.error("THREE.KeyframeTrack: Out of order keys.",this,e,n,s),t=!1;break}s=n}if(void 0!==n&&oh(n))for(let e=0,i=n.length;e!==i;++e){const i=n[e];if(isNaN(i)){console.error("THREE.KeyframeTrack: Value is not a valid number.",this,e,i),t=!1;break}}return t}optimize(){const t=sh(this.times),e=sh(this.values),i=this.getValueSize(),n=this.getInterpolation()===ue,r=t.length-1;let s=1;for(let a=1;a0){t[s]=t[r];for(let t=r*i,n=s*i,a=0;a!==i;++a)e[n+a]=e[t+a];++s}return s!==t.length?(this.times=sh(t,0,s),this.values=sh(e,0,s*i)):(this.times=t,this.values=e),this}clone(){const t=sh(this.times,0),e=sh(this.values,0),i=new(0,this.constructor)(this.name,t,e);return i.createInterpolant=this.createInterpolant,i}}gh.prototype.TimeBufferType=Float32Array,gh.prototype.ValueBufferType=Float32Array,gh.prototype.DefaultInterpolation=he;class vh extends gh{}vh.prototype.ValueTypeName="bool",vh.prototype.ValueBufferType=Array,vh.prototype.DefaultInterpolation=ce,vh.prototype.InterpolantFactoryMethodLinear=void 0,vh.prototype.InterpolantFactoryMethodSmooth=void 0;class xh extends gh{}xh.prototype.ValueTypeName="color";class _h extends gh{}_h.prototype.ValueTypeName="number";class yh extends dh{constructor(t,e,i,n){super(t,e,i,n)}interpolate_(t,e,i,n){const r=this.resultBuffer,s=this.sampleValues,a=this.valueSize,o=(i-e)/(n-e);let l=t*a;for(let t=l+a;l!==t;l+=4)Ke.slerpFlat(r,0,s,l-a,s,l,o);return r}}class Mh extends gh{InterpolantFactoryMethodLinear(t){return new yh(this.times,this.values,this.getValueSize(),t)}}Mh.prototype.ValueTypeName="quaternion",Mh.prototype.DefaultInterpolation=he,Mh.prototype.InterpolantFactoryMethodSmooth=void 0;class bh extends gh{}bh.prototype.ValueTypeName="string",bh.prototype.ValueBufferType=Array,bh.prototype.DefaultInterpolation=ce,bh.prototype.InterpolantFactoryMethodLinear=void 0,bh.prototype.InterpolantFactoryMethodSmooth=void 0;class Sh extends gh{}Sh.prototype.ValueTypeName="vector";class wh{constructor(t,e=-1,i,n=2500){this.name=t,this.tracks=i,this.duration=e,this.blendMode=n,this.uuid=Ne(),this.duration<0&&this.resetDuration()}static parse(t){const e=[],i=t.tracks,n=1/(t.fps||1);for(let t=0,r=i.length;t!==r;++t)e.push(Th(i[t]).scale(n));const r=new this(t.name,t.duration,e,t.blendMode);return r.uuid=t.uuid,r}static toJSON(t){const e=[],i=t.tracks,n={name:t.name,duration:t.duration,tracks:e,uuid:t.uuid,blendMode:t.blendMode};for(let t=0,n=i.length;t!==n;++t)e.push(gh.toJSON(i[t]));return n}static CreateFromMorphTargetSequence(t,e,i,n){const r=e.length,s=[];for(let t=0;t1){const t=s[1];let e=n[t];e||(n[t]=e=[]),e.push(i)}}const s=[];for(const t in n)s.push(this.CreateFromMorphTargetSequence(t,n[t],e,i));return s}static parseAnimation(t,e){if(!t)return console.error("THREE.AnimationClip: No animation in JSONLoader data."),null;const i=function(t,e,i,n,r){if(0!==i.length){const s=[],a=[];hh(i,s,a,n),0!==s.length&&r.push(new t(e,s,a))}},n=[],r=t.name||"default",s=t.fps||30,a=t.blendMode;let o=t.length||-1;const l=t.hierarchy||[];for(let t=0;t{e&&e(r),this.manager.itemEnd(t)}),0),r;if(void 0!==Rh[t])return void Rh[t].push({onLoad:e,onProgress:i,onError:n});Rh[t]=[],Rh[t].push({onLoad:e,onProgress:i,onError:n});const s=new Request(t,{headers:new Headers(this.requestHeader),credentials:this.withCredentials?"include":"same-origin"}),a=this.mimeType,o=this.responseType;fetch(s).then((e=>{if(200===e.status||0===e.status){if(0===e.status&&console.warn("THREE.FileLoader: HTTP Status 0 received."),"undefined"==typeof ReadableStream||void 0===e.body||void 0===e.body.getReader)return e;const i=Rh[t],n=e.body.getReader(),r=e.headers.get("Content-Length")||e.headers.get("X-File-Size"),s=r?parseInt(r):0,a=0!==s;let o=0;const l=new ReadableStream({start(t){!function e(){n.read().then((({done:n,value:r})=>{if(n)t.close();else{o+=r.byteLength;const n=new ProgressEvent("progress",{lengthComputable:a,loaded:o,total:s});for(let t=0,e=i.length;t{switch(o){case"arraybuffer":return t.arrayBuffer();case"blob":return t.blob();case"document":return t.text().then((t=>(new DOMParser).parseFromString(t,a)));case"json":return t.json();default:if(void 0===a)return t.text();{const e=/charset="?([^;"\s]*)"?/i.exec(a),i=e&&e[1]?e[1].toLowerCase():void 0,n=new TextDecoder(i);return t.arrayBuffer().then((t=>n.decode(t)))}}})).then((e=>{Ah.add(t,e);const i=Rh[t];delete Rh[t];for(let t=0,n=i.length;t{const i=Rh[t];if(void 0===i)throw this.manager.itemError(t),e;delete Rh[t];for(let t=0,n=i.length;t{this.manager.itemEnd(t)})),this.manager.itemStart(t)}setResponseType(t){return this.responseType=t,this}setMimeType(t){return this.mimeType=t,this}}class Dh extends Lh{constructor(t){super(t)}load(t,e,i,n){void 0!==this.path&&(t=this.path+t),t=this.manager.resolveURL(t);const r=this,s=Ah.get(t);if(void 0!==s)return r.manager.itemStart(t),setTimeout((function(){e&&e(s),r.manager.itemEnd(t)}),0),s;const a=Je("img");function o(){c(),Ah.add(t,this),e&&e(this),r.manager.itemEnd(t)}function l(e){c(),n&&n(e),r.manager.itemError(t),r.manager.itemEnd(t)}function c(){a.removeEventListener("load",o,!1),a.removeEventListener("error",l,!1)}return a.addEventListener("load",o,!1),a.addEventListener("error",l,!1),"data:"!==t.slice(0,5)&&void 0!==this.crossOrigin&&(a.crossOrigin=this.crossOrigin),r.manager.itemStart(t),a.src=t,a}}class Nh extends xn{constructor(t,e=1){super(),this.isLight=!0,this.type="Light",this.color=new zn(t),this.intensity=e}dispose(){}copy(t,e){return super.copy(t,e),this.color.copy(t.color),this.intensity=t.intensity,this}toJSON(t){const e=super.toJSON(t);return e.object.color=this.color.getHex(),e.object.intensity=this.intensity,void 0!==this.groundColor&&(e.object.groundColor=this.groundColor.getHex()),void 0!==this.distance&&(e.object.distance=this.distance),void 0!==this.angle&&(e.object.angle=this.angle),void 0!==this.decay&&(e.object.decay=this.decay),void 0!==this.penumbra&&(e.object.penumbra=this.penumbra),void 0!==this.shadow&&(e.object.shadow=this.shadow.toJSON()),e}}class Oh extends Nh{constructor(t,e,i){super(t,i),this.isHemisphereLight=!0,this.type="HemisphereLight",this.position.copy(xn.DEFAULT_UP),this.updateMatrix(),this.groundColor=new zn(e)}copy(t,e){return super.copy(t,e),this.groundColor.copy(t.groundColor),this}}const zh=new qi,Uh=new $e,Bh=new $e;class Fh{constructor(t){this.camera=t,this.bias=0,this.normalBias=0,this.radius=1,this.blurSamples=8,this.mapSize=new We(512,512),this.map=null,this.mapPass=null,this.matrix=new qi,this.autoUpdate=!0,this.needsUpdate=!1,this._frustum=new Dr,this._frameExtents=new We(1,1),this._viewportCount=1,this._viewports=[new fi(0,0,1,1)]}getViewportCount(){return this._viewportCount}getFrustum(){return this._frustum}updateMatrices(t){const e=this.camera,i=this.matrix;Uh.setFromMatrixPosition(t.matrixWorld),e.position.copy(Uh),Bh.setFromMatrixPosition(t.target.matrixWorld),e.lookAt(Bh),e.updateMatrixWorld(),zh.multiplyMatrices(e.projectionMatrix,e.matrixWorldInverse),this._frustum.setFromProjectionMatrix(zh),i.set(.5,0,0,.5,0,.5,0,.5,0,0,.5,.5,0,0,0,1),i.multiply(zh)}getViewport(t){return this._viewports[t]}getFrameExtents(){return this._frameExtents}dispose(){this.map&&this.map.dispose(),this.mapPass&&this.mapPass.dispose()}copy(t){return this.camera=t.camera.clone(),this.bias=t.bias,this.radius=t.radius,this.mapSize.copy(t.mapSize),this}clone(){return(new this.constructor).copy(this)}toJSON(){const t={};return 0!==this.bias&&(t.bias=this.bias),0!==this.normalBias&&(t.normalBias=this.normalBias),1!==this.radius&&(t.radius=this.radius),512===this.mapSize.x&&512===this.mapSize.y||(t.mapSize=this.mapSize.toArray()),t.camera=this.camera.toJSON(!1).object,delete t.camera.matrix,t}}class kh extends Fh{constructor(){super(new br(50,1,.5,500)),this.isSpotLightShadow=!0,this.focus=1}updateMatrices(t){const e=this.camera,i=2*De*t.angle*this.focus,n=this.mapSize.width/this.mapSize.height,r=t.distance||e.far;i===e.fov&&n===e.aspect&&r===e.far||(e.fov=i,e.aspect=n,e.far=r,e.updateProjectionMatrix()),super.updateMatrices(t)}copy(t){return super.copy(t),this.focus=t.focus,this}}class Gh extends Nh{constructor(t,e,i=0,n=Math.PI/3,r=0,s=2){super(t,e),this.isSpotLight=!0,this.type="SpotLight",this.position.copy(xn.DEFAULT_UP),this.updateMatrix(),this.target=new xn,this.distance=i,this.angle=n,this.penumbra=r,this.decay=s,this.map=null,this.shadow=new kh}get power(){return this.intensity*Math.PI}set power(t){this.intensity=t/Math.PI}dispose(){this.shadow.dispose()}copy(t,e){return super.copy(t,e),this.distance=t.distance,this.angle=t.angle,this.penumbra=t.penumbra,this.decay=t.decay,this.target=t.target.clone(),this.shadow=t.shadow.clone(),this}}const Vh=new qi,Hh=new $e,Wh=new $e;class jh extends Fh{constructor(){super(new br(90,1,.5,500)),this.isPointLightShadow=!0,this._frameExtents=new We(4,2),this._viewportCount=6,this._viewports=[new fi(2,1,1,1),new fi(0,1,1,1),new fi(3,1,1,1),new fi(1,1,1,1),new fi(3,0,1,1),new fi(1,0,1,1)],this._cubeDirections=[new $e(1,0,0),new $e(-1,0,0),new $e(0,0,1),new $e(0,0,-1),new $e(0,1,0),new $e(0,-1,0)],this._cubeUps=[new $e(0,1,0),new $e(0,1,0),new $e(0,1,0),new $e(0,1,0),new $e(0,0,1),new $e(0,0,-1)]}updateMatrices(t,e=0){const i=this.camera,n=this.matrix,r=t.distance||i.far;r!==i.far&&(i.far=r,i.updateProjectionMatrix()),Hh.setFromMatrixPosition(t.matrixWorld),i.position.copy(Hh),Wh.copy(i.position),Wh.add(this._cubeDirections[e]),i.up.copy(this._cubeUps[e]),i.lookAt(Wh),i.updateMatrixWorld(),n.makeTranslation(-Hh.x,-Hh.y,-Hh.z),Vh.multiplyMatrices(i.projectionMatrix,i.matrixWorldInverse),this._frustum.setFromProjectionMatrix(Vh)}}class qh extends Nh{constructor(t,e,i=0,n=2){super(t,e),this.isPointLight=!0,this.type="PointLight",this.distance=i,this.decay=n,this.shadow=new jh}get power(){return 4*this.intensity*Math.PI}set power(t){this.intensity=t/(4*Math.PI)}dispose(){this.shadow.dispose()}copy(t,e){return super.copy(t,e),this.distance=t.distance,this.decay=t.decay,this.shadow=t.shadow.clone(),this}}class Xh extends Fh{constructor(){super(new Xr(-5,5,5,-5,.5,500)),this.isDirectionalLightShadow=!0}}class Yh extends Nh{constructor(t,e){super(t,e),this.isDirectionalLight=!0,this.type="DirectionalLight",this.position.copy(xn.DEFAULT_UP),this.updateMatrix(),this.target=new xn,this.shadow=new Xh}dispose(){this.shadow.dispose()}copy(t){return super.copy(t),this.target=t.target.clone(),this.shadow=t.shadow.clone(),this}}class Zh extends Nh{constructor(t,e){super(t,e),this.isAmbientLight=!0,this.type="AmbientLight"}}class Jh extends Nh{constructor(t,e,i=10,n=10){super(t,e),this.isRectAreaLight=!0,this.type="RectAreaLight",this.width=i,this.height=n}get power(){return this.intensity*this.width*this.height*Math.PI}set power(t){this.intensity=t/(this.width*this.height*Math.PI)}copy(t){return super.copy(t),this.width=t.width,this.height=t.height,this}toJSON(t){const e=super.toJSON(t);return e.object.width=this.width,e.object.height=this.height,e}}class Kh{constructor(){this.isSphericalHarmonics3=!0,this.coefficients=[];for(let t=0;t<9;t++)this.coefficients.push(new $e)}set(t){for(let e=0;e<9;e++)this.coefficients[e].copy(t[e]);return this}zero(){for(let t=0;t<9;t++)this.coefficients[t].set(0,0,0);return this}getAt(t,e){const i=t.x,n=t.y,r=t.z,s=this.coefficients;return e.copy(s[0]).multiplyScalar(.282095),e.addScaledVector(s[1],.488603*n),e.addScaledVector(s[2],.488603*r),e.addScaledVector(s[3],.488603*i),e.addScaledVector(s[4],i*n*1.092548),e.addScaledVector(s[5],n*r*1.092548),e.addScaledVector(s[6],.315392*(3*r*r-1)),e.addScaledVector(s[7],i*r*1.092548),e.addScaledVector(s[8],.546274*(i*i-n*n)),e}getIrradianceAt(t,e){const i=t.x,n=t.y,r=t.z,s=this.coefficients;return e.copy(s[0]).multiplyScalar(.886227),e.addScaledVector(s[1],1.023328*n),e.addScaledVector(s[2],1.023328*r),e.addScaledVector(s[3],1.023328*i),e.addScaledVector(s[4],.858086*i*n),e.addScaledVector(s[5],.858086*n*r),e.addScaledVector(s[6],.743125*r*r-.247708),e.addScaledVector(s[7],.858086*i*r),e.addScaledVector(s[8],.429043*(i*i-n*n)),e}add(t){for(let e=0;e<9;e++)this.coefficients[e].add(t.coefficients[e]);return this}addScaledSH(t,e){for(let i=0;i<9;i++)this.coefficients[i].addScaledVector(t.coefficients[i],e);return this}scale(t){for(let e=0;e<9;e++)this.coefficients[e].multiplyScalar(t);return this}lerp(t,e){for(let i=0;i<9;i++)this.coefficients[i].lerp(t.coefficients[i],e);return this}equals(t){for(let e=0;e<9;e++)if(!this.coefficients[e].equals(t.coefficients[e]))return!1;return!0}copy(t){return this.set(t.coefficients)}clone(){return(new this.constructor).copy(this)}fromArray(t,e=0){const i=this.coefficients;for(let n=0;n<9;n++)i[n].fromArray(t,e+3*n);return this}toArray(t=[],e=0){const i=this.coefficients;for(let n=0;n<9;n++)i[n].toArray(t,e+3*n);return t}static getBasisAt(t,e){const i=t.x,n=t.y,r=t.z;e[0]=.282095,e[1]=.488603*n,e[2]=.488603*r,e[3]=.488603*i,e[4]=1.092548*i*n,e[5]=1.092548*n*r,e[6]=.315392*(3*r*r-1),e[7]=1.092548*i*r,e[8]=.546274*(i*i-n*n)}}class $h extends Nh{constructor(t=new Kh,e=1){super(void 0,e),this.isLightProbe=!0,this.sh=t}copy(t){return super.copy(t),this.sh.copy(t.sh),this}fromJSON(t){return this.intensity=t.intensity,this.sh.fromArray(t.sh),this}toJSON(t){const e=super.toJSON(t);return e.object.sh=this.sh.toArray(),e}}class Qh extends Lh{constructor(t){super(t),this.textures={}}load(t,e,i,n){const r=this,s=new Ih(r.manager);s.setPath(r.path),s.setRequestHeader(r.requestHeader),s.setWithCredentials(r.withCredentials),s.load(t,(function(i){try{e(r.parse(JSON.parse(i)))}catch(e){n?n(e):console.error(e),r.manager.itemError(t)}}),i,n)}parse(t){const e=this.textures;function i(t){return void 0===e[t]&&console.warn("THREE.MaterialLoader: Undefined texture",t),e[t]}const n=Qh.createMaterialFromType(t.type);if(void 0!==t.uuid&&(n.uuid=t.uuid),void 0!==t.name&&(n.name=t.name),void 0!==t.color&&void 0!==n.color&&n.color.setHex(t.color),void 0!==t.roughness&&(n.roughness=t.roughness),void 0!==t.metalness&&(n.metalness=t.metalness),void 0!==t.sheen&&(n.sheen=t.sheen),void 0!==t.sheenColor&&(n.sheenColor=(new zn).setHex(t.sheenColor)),void 0!==t.sheenRoughness&&(n.sheenRoughness=t.sheenRoughness),void 0!==t.emissive&&void 0!==n.emissive&&n.emissive.setHex(t.emissive),void 0!==t.specular&&void 0!==n.specular&&n.specular.setHex(t.specular),void 0!==t.specularIntensity&&(n.specularIntensity=t.specularIntensity),void 0!==t.specularColor&&void 0!==n.specularColor&&n.specularColor.setHex(t.specularColor),void 0!==t.shininess&&(n.shininess=t.shininess),void 0!==t.clearcoat&&(n.clearcoat=t.clearcoat),void 0!==t.clearcoatRoughness&&(n.clearcoatRoughness=t.clearcoatRoughness),void 0!==t.iridescence&&(n.iridescence=t.iridescence),void 0!==t.iridescenceIOR&&(n.iridescenceIOR=t.iridescenceIOR),void 0!==t.iridescenceThicknessRange&&(n.iridescenceThicknessRange=t.iridescenceThicknessRange),void 0!==t.transmission&&(n.transmission=t.transmission),void 0!==t.thickness&&(n.thickness=t.thickness),void 0!==t.attenuationDistance&&(n.attenuationDistance=t.attenuationDistance),void 0!==t.attenuationColor&&void 0!==n.attenuationColor&&n.attenuationColor.setHex(t.attenuationColor),void 0!==t.fog&&(n.fog=t.fog),void 0!==t.flatShading&&(n.flatShading=t.flatShading),void 0!==t.blending&&(n.blending=t.blending),void 0!==t.combine&&(n.combine=t.combine),void 0!==t.side&&(n.side=t.side),void 0!==t.shadowSide&&(n.shadowSide=t.shadowSide),void 0!==t.opacity&&(n.opacity=t.opacity),void 0!==t.transparent&&(n.transparent=t.transparent),void 0!==t.alphaTest&&(n.alphaTest=t.alphaTest),void 0!==t.depthTest&&(n.depthTest=t.depthTest),void 0!==t.depthWrite&&(n.depthWrite=t.depthWrite),void 0!==t.colorWrite&&(n.colorWrite=t.colorWrite),void 0!==t.stencilWrite&&(n.stencilWrite=t.stencilWrite),void 0!==t.stencilWriteMask&&(n.stencilWriteMask=t.stencilWriteMask),void 0!==t.stencilFunc&&(n.stencilFunc=t.stencilFunc),void 0!==t.stencilRef&&(n.stencilRef=t.stencilRef),void 0!==t.stencilFuncMask&&(n.stencilFuncMask=t.stencilFuncMask),void 0!==t.stencilFail&&(n.stencilFail=t.stencilFail),void 0!==t.stencilZFail&&(n.stencilZFail=t.stencilZFail),void 0!==t.stencilZPass&&(n.stencilZPass=t.stencilZPass),void 0!==t.wireframe&&(n.wireframe=t.wireframe),void 0!==t.wireframeLinewidth&&(n.wireframeLinewidth=t.wireframeLinewidth),void 0!==t.wireframeLinecap&&(n.wireframeLinecap=t.wireframeLinecap),void 0!==t.wireframeLinejoin&&(n.wireframeLinejoin=t.wireframeLinejoin),void 0!==t.rotation&&(n.rotation=t.rotation),1!==t.linewidth&&(n.linewidth=t.linewidth),void 0!==t.dashSize&&(n.dashSize=t.dashSize),void 0!==t.gapSize&&(n.gapSize=t.gapSize),void 0!==t.scale&&(n.scale=t.scale),void 0!==t.polygonOffset&&(n.polygonOffset=t.polygonOffset),void 0!==t.polygonOffsetFactor&&(n.polygonOffsetFactor=t.polygonOffsetFactor),void 0!==t.polygonOffsetUnits&&(n.polygonOffsetUnits=t.polygonOffsetUnits),void 0!==t.dithering&&(n.dithering=t.dithering),void 0!==t.alphaToCoverage&&(n.alphaToCoverage=t.alphaToCoverage),void 0!==t.premultipliedAlpha&&(n.premultipliedAlpha=t.premultipliedAlpha),void 0!==t.forceSinglePass&&(n.forceSinglePass=t.forceSinglePass),void 0!==t.visible&&(n.visible=t.visible),void 0!==t.toneMapped&&(n.toneMapped=t.toneMapped),void 0!==t.userData&&(n.userData=t.userData),void 0!==t.vertexColors&&("number"==typeof t.vertexColors?n.vertexColors=t.vertexColors>0:n.vertexColors=t.vertexColors),void 0!==t.uniforms)for(const e in t.uniforms){const r=t.uniforms[e];switch(n.uniforms[e]={},r.type){case"t":n.uniforms[e].value=i(r.value);break;case"c":n.uniforms[e].value=(new zn).setHex(r.value);break;case"v2":n.uniforms[e].value=(new We).fromArray(r.value);break;case"v3":n.uniforms[e].value=(new $e).fromArray(r.value);break;case"v4":n.uniforms[e].value=(new fi).fromArray(r.value);break;case"m3":n.uniforms[e].value=(new je).fromArray(r.value);break;case"m4":n.uniforms[e].value=(new qi).fromArray(r.value);break;default:n.uniforms[e].value=r.value}}if(void 0!==t.defines&&(n.defines=t.defines),void 0!==t.vertexShader&&(n.vertexShader=t.vertexShader),void 0!==t.fragmentShader&&(n.fragmentShader=t.fragmentShader),void 0!==t.glslVersion&&(n.glslVersion=t.glslVersion),void 0!==t.extensions)for(const e in t.extensions)n.extensions[e]=t.extensions[e];if(void 0!==t.size&&(n.size=t.size),void 0!==t.sizeAttenuation&&(n.sizeAttenuation=t.sizeAttenuation),void 0!==t.map&&(n.map=i(t.map)),void 0!==t.matcap&&(n.matcap=i(t.matcap)),void 0!==t.alphaMap&&(n.alphaMap=i(t.alphaMap)),void 0!==t.bumpMap&&(n.bumpMap=i(t.bumpMap)),void 0!==t.bumpScale&&(n.bumpScale=t.bumpScale),void 0!==t.normalMap&&(n.normalMap=i(t.normalMap)),void 0!==t.normalMapType&&(n.normalMapType=t.normalMapType),void 0!==t.normalScale){let e=t.normalScale;!1===Array.isArray(e)&&(e=[e,e]),n.normalScale=(new We).fromArray(e)}return void 0!==t.displacementMap&&(n.displacementMap=i(t.displacementMap)),void 0!==t.displacementScale&&(n.displacementScale=t.displacementScale),void 0!==t.displacementBias&&(n.displacementBias=t.displacementBias),void 0!==t.roughnessMap&&(n.roughnessMap=i(t.roughnessMap)),void 0!==t.metalnessMap&&(n.metalnessMap=i(t.metalnessMap)),void 0!==t.emissiveMap&&(n.emissiveMap=i(t.emissiveMap)),void 0!==t.emissiveIntensity&&(n.emissiveIntensity=t.emissiveIntensity),void 0!==t.specularMap&&(n.specularMap=i(t.specularMap)),void 0!==t.specularIntensityMap&&(n.specularIntensityMap=i(t.specularIntensityMap)),void 0!==t.specularColorMap&&(n.specularColorMap=i(t.specularColorMap)),void 0!==t.envMap&&(n.envMap=i(t.envMap)),void 0!==t.envMapIntensity&&(n.envMapIntensity=t.envMapIntensity),void 0!==t.reflectivity&&(n.reflectivity=t.reflectivity),void 0!==t.refractionRatio&&(n.refractionRatio=t.refractionRatio),void 0!==t.lightMap&&(n.lightMap=i(t.lightMap)),void 0!==t.lightMapIntensity&&(n.lightMapIntensity=t.lightMapIntensity),void 0!==t.aoMap&&(n.aoMap=i(t.aoMap)),void 0!==t.aoMapIntensity&&(n.aoMapIntensity=t.aoMapIntensity),void 0!==t.gradientMap&&(n.gradientMap=i(t.gradientMap)),void 0!==t.clearcoatMap&&(n.clearcoatMap=i(t.clearcoatMap)),void 0!==t.clearcoatRoughnessMap&&(n.clearcoatRoughnessMap=i(t.clearcoatRoughnessMap)),void 0!==t.clearcoatNormalMap&&(n.clearcoatNormalMap=i(t.clearcoatNormalMap)),void 0!==t.clearcoatNormalScale&&(n.clearcoatNormalScale=(new We).fromArray(t.clearcoatNormalScale)),void 0!==t.iridescenceMap&&(n.iridescenceMap=i(t.iridescenceMap)),void 0!==t.iridescenceThicknessMap&&(n.iridescenceThicknessMap=i(t.iridescenceThicknessMap)),void 0!==t.transmissionMap&&(n.transmissionMap=i(t.transmissionMap)),void 0!==t.thicknessMap&&(n.thicknessMap=i(t.thicknessMap)),void 0!==t.sheenColorMap&&(n.sheenColorMap=i(t.sheenColorMap)),void 0!==t.sheenRoughnessMap&&(n.sheenRoughnessMap=i(t.sheenRoughnessMap)),n}setTextures(t){return this.textures=t,this}static createMaterialFromType(t){return new{ShadowMaterial:Zc,SpriteMaterial:wo,RawShaderMaterial:Jc,ShaderMaterial:yr,PointsMaterial:xl,MeshPhysicalMaterial:$c,MeshStandardMaterial:Kc,MeshPhongMaterial:Qc,MeshToonMaterial:th,MeshNormalMaterial:eh,MeshLambertMaterial:ih,MeshDepthMaterial:Qa,MeshDistanceMaterial:to,MeshBasicMaterial:Bn,MeshMatcapMaterial:nh,LineDashedMaterial:rh,LineBasicMaterial:ol,Material:Pn}[t]}}class tu{static decodeText(t){if("undefined"!=typeof TextDecoder)return(new TextDecoder).decode(t);let e="";for(let i=0,n=t.length;i0){this.source.connect(this.filters[0]);for(let t=1,e=this.filters.length;t0){this.source.disconnect(this.filters[0]);for(let t=1,e=this.filters.length;t0&&this._mixBufferRegionAdditive(i,n,this._addIndex*e,1,e);for(let t=e,r=e+e;t!==r;++t)if(i[t]!==i[t+e]){a.setValue(i,n);break}}saveOriginalState(){const t=this.binding,e=this.buffer,i=this.valueSize,n=i*this._origIndex;t.getValue(e,n);for(let t=i,r=n;t!==r;++t)e[t]=e[n+t%i];this._setIdentity(),this.cumulativeWeight=0,this.cumulativeWeightAdditive=0}restoreOriginalState(){const t=3*this.valueSize;this.binding.setValue(this.buffer,t)}_setAdditiveIdentityNumeric(){const t=this._addIndex*this.valueSize,e=t+this.valueSize;for(let i=t;i=.5)for(let n=0;n!==r;++n)t[e+n]=t[i+n]}_slerp(t,e,i,n){Ke.slerpFlat(t,e,t,e,t,i,n)}_slerpAdditive(t,e,i,n,r){const s=this._workIndex*r;Ke.multiplyQuaternionsFlat(t,s,t,e,t,i),Ke.slerpFlat(t,e,t,e,t,s,n)}_lerp(t,e,i,n,r){const s=1-n;for(let a=0;a!==r;++a){const r=e+a;t[r]=t[r]*s+t[i+a]*n}}_lerpAdditive(t,e,i,n,r){for(let s=0;s!==r;++s){const r=e+s;t[r]=t[r]+t[i+s]*n}}}const Su="\\[\\]\\.:\\/",wu=new RegExp("["+Su+"]","g"),Tu="[^"+Su+"]",Au="[^"+Su.replace("\\.","")+"]",Eu=new RegExp("^"+/((?:WC+[\/:])*)/.source.replace("WC",Tu)+/(WCOD+)?/.source.replace("WCOD",Au)+/(?:\.(WC+)(?:\[(.+)\])?)?/.source.replace("WC",Tu)+/\.(WC+)(?:\[(.+)\])?/.source.replace("WC",Tu)+"$"),Cu=["material","materials","bones","map"];class Lu{constructor(t,e,i){this.path=e,this.parsedPath=i||Lu.parseTrackName(e),this.node=Lu.findNode(t,this.parsedPath.nodeName),this.rootNode=t,this.getValue=this._getValue_unbound,this.setValue=this._setValue_unbound}static create(t,e,i){return t&&t.isAnimationObjectGroup?new Lu.Composite(t,e,i):new Lu(t,e,i)}static sanitizeNodeName(t){return t.replace(/\s/g,"_").replace(wu,"")}static parseTrackName(t){const e=Eu.exec(t);if(null===e)throw new Error("PropertyBinding: Cannot parse trackName: "+t);const i={nodeName:e[2],objectName:e[3],objectIndex:e[4],propertyName:e[5],propertyIndex:e[6]},n=i.nodeName&&i.nodeName.lastIndexOf(".");if(void 0!==n&&-1!==n){const t=i.nodeName.substring(n+1);-1!==Cu.indexOf(t)&&(i.nodeName=i.nodeName.substring(0,n),i.objectName=t)}if(null===i.propertyName||0===i.propertyName.length)throw new Error("PropertyBinding: can not parse propertyName from trackName: "+t);return i}static findNode(t,e){if(void 0===e||""===e||"."===e||-1===e||e===t.name||e===t.uuid)return t;if(t.skeleton){const i=t.skeleton.getBoneByName(e);if(void 0!==i)return i}if(t.children){const i=function(t){for(let n=0;n0){const t=this._interpolants,e=this._propertyBindings;if(this.blendMode===ge)for(let i=0,n=t.length;i!==n;++i)t[i].evaluate(s),e[i].accumulateAdditive(a);else for(let i=0,r=t.length;i!==r;++i)t[i].evaluate(s),e[i].accumulate(n,a)}}_updateWeight(t){let e=0;if(this.enabled){e=this.weight;const i=this._weightInterpolant;if(null!==i){const n=i.evaluate(t)[0];e*=n,t>i.parameterPositions[1]&&(this.stopFading(),0===n&&(this.enabled=!1))}}return this._effectiveWeight=e,e}_updateTimeScale(t){let e=0;if(!this.paused){e=this.timeScale;const i=this._timeScaleInterpolant;if(null!==i){e*=i.evaluate(t)[0],t>i.parameterPositions[1]&&(this.stopWarping(),0===e?this.paused=!0:this.timeScale=e)}}return this._effectiveTimeScale=e,e}_updateTime(t){const e=this._clip.duration,i=this.loop;let n=this.time+t,r=this._loopCount;const s=2202===i;if(0===t)return-1===r?n:s&&1==(1&r)?e-n:n;if(2200===i){-1===r&&(this._loopCount=0,this._setEndings(!0,!0,!1));t:{if(n>=e)n=e;else{if(!(n<0)){this.time=n;break t}n=0}this.clampWhenFinished?this.paused=!0:this.enabled=!1,this.time=n,this._mixer.dispatchEvent({type:"finished",action:this,direction:t<0?-1:1})}}else{if(-1===r&&(t>=0?(r=0,this._setEndings(!0,0===this.repetitions,s)):this._setEndings(0===this.repetitions,!0,s)),n>=e||n<0){const i=Math.floor(n/e);n-=e*i,r+=Math.abs(i);const a=this.repetitions-r;if(a<=0)this.clampWhenFinished?this.paused=!0:this.enabled=!1,n=t>0?e:0,this.time=n,this._mixer.dispatchEvent({type:"finished",action:this,direction:t>0?1:-1});else{if(1===a){const e=t<0;this._setEndings(e,!e,s)}else this._setEndings(!1,!1,s);this._loopCount=r,this.time=n,this._mixer.dispatchEvent({type:"loop",action:this,loopDelta:i})}}else this.time=n;if(s&&1==(1&r))return e-n}return n}_setEndings(t,e,i){const n=this._interpolantSettings;i?(n.endingStart=pe,n.endingEnd=pe):(n.endingStart=t?this.zeroSlopeAtStart?pe:de:me,n.endingEnd=e?this.zeroSlopeAtEnd?pe:de:me)}_scheduleFading(t,e,i){const n=this._mixer,r=n.time;let s=this._weightInterpolant;null===s&&(s=n._lendControlInterpolant(),this._weightInterpolant=s);const a=s.parameterPositions,o=s.sampleValues;return a[0]=r,o[0]=e,a[1]=r+t,o[1]=i,this}}const Pu=new Float32Array(1);class Iu{constructor(t){this.value=t}clone(){return new Iu(void 0===this.value.clone?this.value:this.value.clone())}}let Du=0;function Nu(t,e){return t.distance-e.distance}function Ou(t,e,i,n){if(t.layers.test(e.layers)&&t.raycast(e,i),!0===n){const n=t.children;for(let t=0,r=n.length;t>-e-14,n[256|t]=1024>>-e-14|32768,r[t]=-e-1,r[256|t]=-e-1):e<=15?(n[t]=e+15<<10,n[256|t]=e+15<<10|32768,r[t]=13,r[256|t]=13):e<128?(n[t]=31744,n[256|t]=64512,r[t]=24,r[256|t]=24):(n[t]=31744,n[256|t]=64512,r[t]=13,r[256|t]=13)}const s=new Uint32Array(2048),a=new Uint32Array(64),o=new Uint32Array(64);for(let t=1;t<1024;++t){let e=t<<13,i=0;for(;0==(8388608&e);)e<<=1,i-=8388608;e&=-8388609,i+=947912704,s[t]=e|i}for(let t=1024;t<2048;++t)s[t]=939524096+(t-1024<<13);for(let t=1;t<31;++t)a[t]=t<<23;a[31]=1199570944,a[32]=2147483648;for(let t=33;t<63;++t)a[t]=2147483648+(t-32<<23);a[63]=3347054592;for(let t=1;t<64;++t)32!==t&&(o[t]=1024);return{floatView:e,uint32View:i,baseTable:n,shiftTable:r,mantissaTable:s,exponentTable:a,offsetTable:o}}const sd={toHalfFloat:function(t){Math.abs(t)>65504&&console.warn("THREE.DataUtils.toHalfFloat(): Value out of range."),t=Oe(t,-65504,65504),nd.floatView[0]=t;const e=nd.uint32View[0],i=e>>23&511;return nd.baseTable[i]+((8388607&e)>>nd.shiftTable[i])},fromHalfFloat:function(t){const e=t>>10;return nd.uint32View[0]=nd.mantissaTable[nd.offsetTable[e]+(1023&t)]+nd.exponentTable[e],nd.floatView[0]}};"undefined"!=typeof __THREE_DEVTOOLS__&&__THREE_DEVTOOLS__.dispatchEvent(new CustomEvent("register",{detail:{revision:e}})),"undefined"!=typeof window&&(window.__THREE__?console.warn("WARNING: Multiple instances of Three.js being imported."):window.__THREE__=e),t.ACESFilmicToneMapping=Y,t.AddEquation=v,t.AddOperation=H,t.AdditiveAnimationBlendMode=ge,t.AdditiveBlending=p,t.AlphaFormat=bt,t.AlwaysDepth=N,t.AlwaysStencilFunc=519,t.AmbientLight=Zh,t.AmbientLightProbe=class extends $h{constructor(t,e=1){super(void 0,e),this.isAmbientLightProbe=!0;const i=(new zn).set(t);this.sh.coefficients[0].set(i.r,i.g,i.b).multiplyScalar(2*Math.sqrt(Math.PI))}},t.AnimationClip=wh,t.AnimationLoader=class extends Lh{constructor(t){super(t)}load(t,e,i,n){const r=this,s=new Ih(this.manager);s.setPath(this.path),s.setRequestHeader(this.requestHeader),s.setWithCredentials(this.withCredentials),s.load(t,(function(i){try{e(r.parse(JSON.parse(i)))}catch(e){n?n(e):console.error(e),r.manager.itemError(t)}}),i,n)}parse(t){const e=[];for(let i=0;i=0;--e)t[e].stop();return this}update(t){t*=this.timeScale;const e=this._actions,i=this._nActiveActions,n=this.time+=t,r=Math.sign(t),s=this._accuIndex^=1;for(let a=0;a!==i;++a){e[a]._update(n,t,r,s)}const a=this._bindings,o=this._nActiveBindings;for(let t=0;t!==o;++t)a[t].apply(s);return this}setTime(t){this.time=0;for(let t=0;t=r){const s=r++,c=t[s];e[c.uuid]=l,t[l]=c,e[o]=s,t[s]=a;for(let t=0,e=n;t!==e;++t){const e=i[t],n=e[s],r=e[l];e[l]=n,e[s]=r}}}this.nCachedObjects_=r}uncache(){const t=this._objects,e=this._indicesByUUID,i=this._bindings,n=i.length;let r=this.nCachedObjects_,s=t.length;for(let a=0,o=arguments.length;a!==o;++a){const o=arguments[a].uuid,l=e[o];if(void 0!==l)if(delete e[o],l0&&(e[a.uuid]=l),t[l]=a,t.pop();for(let t=0,e=n;t!==e;++t){const e=i[t];e[l]=e[r],e.pop()}}}this.nCachedObjects_=r}subscribe_(t,e){const i=this._bindingsIndicesByPath;let n=i[t];const r=this._bindings;if(void 0!==n)return r[n];const s=this._paths,a=this._parsedPaths,o=this._objects,l=o.length,c=this.nCachedObjects_,h=new Array(l);n=r.length,i[t]=n,s.push(t),a.push(e),r.push(h);for(let i=c,n=o.length;i!==n;++i){const n=o[i];h[i]=new Lu(n,t,e)}return h}unsubscribe_(t){const e=this._bindingsIndicesByPath,i=e[t];if(void 0!==i){const n=this._paths,r=this._parsedPaths,s=this._bindings,a=s.length-1,o=s[a];e[t[a]]=i,s[i]=o,s.pop(),r[i]=r[a],r.pop(),n[i]=n[a],n.pop()}}},t.AnimationUtils=uh,t.ArcCurve=Cl,t.ArrayCamera=oo,t.ArrowHelper=class extends xn{constructor(t=new $e(0,0,1),e=new $e(0,0,0),i=1,n=16776960,r=.2*i,s=.2*r){super(),this.type="ArrowHelper",void 0===ed&&(ed=new $n,ed.setAttribute("position",new Wn([0,0,0,0,1,0],3)),id=new Kl(0,.5,1,5,1),id.translate(0,-.5,0)),this.position.copy(e),this.line=new pl(ed,new ol({color:n,toneMapped:!1})),this.line.matrixAutoUpdate=!1,this.add(this.line),this.cone=new pr(id,new Bn({color:n,toneMapped:!1})),this.cone.matrixAutoUpdate=!1,this.add(this.cone),this.setDirection(t),this.setLength(i,r,s)}setDirection(t){if(t.y>.99999)this.quaternion.set(0,0,0,1);else if(t.y<-.99999)this.quaternion.set(1,0,0,0);else{td.set(t.z,0,-t.x).normalize();const e=Math.acos(t.y);this.quaternion.setFromAxisAngle(td,e)}}setLength(t,e=.2*t,i=.2*e){this.line.scale.set(1,Math.max(1e-4,t-e),1),this.line.updateMatrix(),this.cone.scale.set(i,e,i),this.cone.position.y=t,this.cone.updateMatrix()}setColor(t){this.line.material.color.set(t),this.cone.material.color.set(t)}copy(t){return super.copy(t,!1),this.line.copy(t.line),this.cone.copy(t.cone),this}dispose(){this.line.geometry.dispose(),this.line.material.dispose(),this.cone.geometry.dispose(),this.cone.material.dispose()}},t.Audio=vu,t.AudioAnalyser=class{constructor(t,e=2048){this.analyser=t.context.createAnalyser(),this.analyser.fftSize=e,this.data=new Uint8Array(this.analyser.frequencyBinCount),t.getOutput().connect(this.analyser)}getFrequencyData(){return this.analyser.getByteFrequencyData(this.data),this.data}getAverageFrequency(){let t=0;const e=this.getFrequencyData();for(let i=0;ithis.max.x||t.ythis.max.y)}containsBox(t){return this.min.x<=t.min.x&&t.max.x<=this.max.x&&this.min.y<=t.min.y&&t.max.y<=this.max.y}getParameter(t,e){return e.set((t.x-this.min.x)/(this.max.x-this.min.x),(t.y-this.min.y)/(this.max.y-this.min.y))}intersectsBox(t){return!(t.max.xthis.max.x||t.max.ythis.max.y)}clampPoint(t,e){return e.copy(t).clamp(this.min,this.max)}distanceToPoint(t){return this.clampPoint(t,zu).distanceTo(t)}intersect(t){return this.min.max(t.min),this.max.min(t.max),this.isEmpty()&&this.makeEmpty(),this}union(t){return this.min.min(t.min),this.max.max(t.max),this}translate(t){return this.min.add(t),this.max.add(t),this}equals(t){return t.min.equals(this.min)&&t.max.equals(this.max)}},t.Box3=_i,t.Box3Helper=class extends gl{constructor(t,e=16776960){const i=new Uint16Array([0,1,1,2,2,3,3,0,4,5,5,6,6,7,7,4,0,4,1,5,2,6,3,7]),n=new $n;n.setIndex(new Gn(i,1)),n.setAttribute("position",new Wn([1,1,1,-1,1,1,-1,-1,1,1,-1,1,1,1,-1,-1,1,-1,-1,-1,-1,1,-1,-1],3)),super(n,new ol({color:e,toneMapped:!1})),this.box=t,this.type="Box3Helper",this.geometry.computeBoundingSphere()}updateMatrixWorld(t){const e=this.box;e.isEmpty()||(e.getCenter(this.position),e.getSize(this.scale),this.scale.multiplyScalar(.5),super.updateMatrixWorld(t))}dispose(){this.geometry.dispose(),this.material.dispose()}},t.BoxBufferGeometry=class extends fr{constructor(t,e,i,n,r,s){console.warn("THREE.BoxBufferGeometry has been renamed to THREE.BoxGeometry."),super(t,e,i,n,r,s)}},t.BoxGeometry=fr,t.BoxHelper=class extends gl{constructor(t,e=16776960){const i=new Uint16Array([0,1,1,2,2,3,3,0,4,5,5,6,6,7,7,4,0,4,1,5,2,6,3,7]),n=new Float32Array(24),r=new $n;r.setIndex(new Gn(i,1)),r.setAttribute("position",new Gn(n,3)),super(r,new ol({color:e,toneMapped:!1})),this.object=t,this.type="BoxHelper",this.matrixAutoUpdate=!1,this.update()}update(t){if(void 0!==t&&console.warn("THREE.BoxHelper: .update() has no longer arguments."),void 0!==this.object&&Qu.setFromObject(this.object),Qu.isEmpty())return;const e=Qu.min,i=Qu.max,n=this.geometry.attributes.position,r=n.array;r[0]=i.x,r[1]=i.y,r[2]=i.z,r[3]=e.x,r[4]=i.y,r[5]=i.z,r[6]=e.x,r[7]=e.y,r[8]=i.z,r[9]=i.x,r[10]=e.y,r[11]=i.z,r[12]=i.x,r[13]=i.y,r[14]=e.z,r[15]=e.x,r[16]=i.y,r[17]=e.z,r[18]=e.x,r[19]=e.y,r[20]=e.z,r[21]=i.x,r[22]=e.y,r[23]=e.z,n.needsUpdate=!0,this.geometry.computeBoundingSphere()}setFromObject(t){return this.object=t,this.update(),this}copy(t,e){return super.copy(t,e),this.object=t.object,this}dispose(){this.geometry.dispose(),this.material.dispose()}},t.BufferAttribute=Gn,t.BufferGeometry=$n,t.BufferGeometryLoader=iu,t.ByteType=dt,t.Cache=Ah,t.Camera=Mr,t.CameraHelper=class extends gl{constructor(t){const e=new $n,i=new ol({color:16777215,vertexColors:!0,toneMapped:!1}),n=[],r=[],s={};function a(t,e){o(t),o(e)}function o(t){n.push(0,0,0),r.push(0,0,0),void 0===s[t]&&(s[t]=[]),s[t].push(n.length/3-1)}a("n1","n2"),a("n2","n4"),a("n4","n3"),a("n3","n1"),a("f1","f2"),a("f2","f4"),a("f4","f3"),a("f3","f1"),a("n1","f1"),a("n2","f2"),a("n3","f3"),a("n4","f4"),a("p","n1"),a("p","n2"),a("p","n3"),a("p","n4"),a("u1","u2"),a("u2","u3"),a("u3","u1"),a("c","t"),a("p","c"),a("cn1","cn2"),a("cn3","cn4"),a("cf1","cf2"),a("cf3","cf4"),e.setAttribute("position",new Wn(n,3)),e.setAttribute("color",new Wn(r,3)),super(e,i),this.type="CameraHelper",this.camera=t,this.camera.updateProjectionMatrix&&this.camera.updateProjectionMatrix(),this.matrix=t.matrixWorld,this.matrixAutoUpdate=!1,this.pointMap=s,this.update();const l=new zn(16755200),c=new zn(16711680),h=new zn(43775),u=new zn(16777215),d=new zn(3355443);this.setColors(l,c,h,u,d)}setColors(t,e,i,n,r){const s=this.geometry.getAttribute("color");s.setXYZ(0,t.r,t.g,t.b),s.setXYZ(1,t.r,t.g,t.b),s.setXYZ(2,t.r,t.g,t.b),s.setXYZ(3,t.r,t.g,t.b),s.setXYZ(4,t.r,t.g,t.b),s.setXYZ(5,t.r,t.g,t.b),s.setXYZ(6,t.r,t.g,t.b),s.setXYZ(7,t.r,t.g,t.b),s.setXYZ(8,t.r,t.g,t.b),s.setXYZ(9,t.r,t.g,t.b),s.setXYZ(10,t.r,t.g,t.b),s.setXYZ(11,t.r,t.g,t.b),s.setXYZ(12,t.r,t.g,t.b),s.setXYZ(13,t.r,t.g,t.b),s.setXYZ(14,t.r,t.g,t.b),s.setXYZ(15,t.r,t.g,t.b),s.setXYZ(16,t.r,t.g,t.b),s.setXYZ(17,t.r,t.g,t.b),s.setXYZ(18,t.r,t.g,t.b),s.setXYZ(19,t.r,t.g,t.b),s.setXYZ(20,t.r,t.g,t.b),s.setXYZ(21,t.r,t.g,t.b),s.setXYZ(22,t.r,t.g,t.b),s.setXYZ(23,t.r,t.g,t.b),s.setXYZ(24,e.r,e.g,e.b),s.setXYZ(25,e.r,e.g,e.b),s.setXYZ(26,e.r,e.g,e.b),s.setXYZ(27,e.r,e.g,e.b),s.setXYZ(28,e.r,e.g,e.b),s.setXYZ(29,e.r,e.g,e.b),s.setXYZ(30,e.r,e.g,e.b),s.setXYZ(31,e.r,e.g,e.b),s.setXYZ(32,i.r,i.g,i.b),s.setXYZ(33,i.r,i.g,i.b),s.setXYZ(34,i.r,i.g,i.b),s.setXYZ(35,i.r,i.g,i.b),s.setXYZ(36,i.r,i.g,i.b),s.setXYZ(37,i.r,i.g,i.b),s.setXYZ(38,n.r,n.g,n.b),s.setXYZ(39,n.r,n.g,n.b),s.setXYZ(40,r.r,r.g,r.b),s.setXYZ(41,r.r,r.g,r.b),s.setXYZ(42,r.r,r.g,r.b),s.setXYZ(43,r.r,r.g,r.b),s.setXYZ(44,r.r,r.g,r.b),s.setXYZ(45,r.r,r.g,r.b),s.setXYZ(46,r.r,r.g,r.b),s.setXYZ(47,r.r,r.g,r.b),s.setXYZ(48,r.r,r.g,r.b),s.setXYZ(49,r.r,r.g,r.b),s.needsUpdate=!0}update(){const t=this.geometry,e=this.pointMap;Ku.projectionMatrixInverse.copy(this.camera.projectionMatrixInverse),$u("c",e,t,Ku,0,0,-1),$u("t",e,t,Ku,0,0,1),$u("n1",e,t,Ku,-1,-1,-1),$u("n2",e,t,Ku,1,-1,-1),$u("n3",e,t,Ku,-1,1,-1),$u("n4",e,t,Ku,1,1,-1),$u("f1",e,t,Ku,-1,-1,1),$u("f2",e,t,Ku,1,-1,1),$u("f3",e,t,Ku,-1,1,1),$u("f4",e,t,Ku,1,1,1),$u("u1",e,t,Ku,.7,1.1,-1),$u("u2",e,t,Ku,-.7,1.1,-1),$u("u3",e,t,Ku,0,2,-1),$u("cf1",e,t,Ku,-1,0,1),$u("cf2",e,t,Ku,1,0,1),$u("cf3",e,t,Ku,0,-1,1),$u("cf4",e,t,Ku,0,1,1),$u("cn1",e,t,Ku,-1,0,-1),$u("cn2",e,t,Ku,1,0,-1),$u("cn3",e,t,Ku,0,-1,-1),$u("cn4",e,t,Ku,0,1,-1),t.getAttribute("position").needsUpdate=!0}dispose(){this.geometry.dispose(),this.material.dispose()}},t.CanvasTexture=class extends mi{constructor(t,e,i,n,r,s,a,o,l){super(t,e,i,n,r,s,a,o,l),this.isCanvasTexture=!0,this.needsUpdate=!0}},t.CapsuleBufferGeometry=class extends Zl{constructor(t,e,i,n){console.warn("THREE.CapsuleBufferGeometry has been renamed to THREE.CapsuleGeometry."),super(t,e,i,n)}},t.CapsuleGeometry=Zl,t.CatmullRomCurve3=Nl,t.CineonToneMapping=X,t.CircleBufferGeometry=class extends Jl{constructor(t,e,i,n){console.warn("THREE.CircleBufferGeometry has been renamed to THREE.CircleGeometry."),super(t,e,i,n)}},t.CircleGeometry=Jl,t.ClampToEdgeWrapping=nt,t.Clock=uu,t.Color=zn,t.ColorKeyframeTrack=xh,t.ColorManagement=li,t.CompressedArrayTexture=class extends Tl{constructor(t,e,i,n,r,s){super(t,e,i,r,s),this.isCompressedArrayTexture=!0,this.image.depth=n,this.wrapR=nt}},t.CompressedTexture=Tl,t.CompressedTextureLoader=class extends Lh{constructor(t){super(t)}load(t,e,i,n){const r=this,s=[],a=new Tl,o=new Ih(this.manager);o.setPath(this.path),o.setResponseType("arraybuffer"),o.setRequestHeader(this.requestHeader),o.setWithCredentials(r.withCredentials);let l=0;function c(c){o.load(t[c],(function(t){const i=r.parse(t,!0);s[c]={width:i.width,height:i.height,format:i.format,mipmaps:i.mipmaps},l+=1,6===l&&(1===i.mipmapCount&&(a.minFilter=lt),a.image=s,a.format=i.format,a.needsUpdate=!0,e&&e(a))}),i,n)}if(Array.isArray(t))for(let e=0,i=t.length;e0){const i=new Eh(e);r=new Dh(i),r.setCrossOrigin(this.crossOrigin);for(let e=0,i=t.length;e0){n=new Dh(this.manager),n.setCrossOrigin(this.crossOrigin);for(let e=0,n=t.length;e1)for(let i=0;iNumber.EPSILON){if(l<0&&(i=e[s],o=-o,a=e[r],l=-l),t.ya.y)continue;if(t.y===i.y){if(t.x===i.x)return!0}else{const e=l*(t.x-i.x)-o*(t.y-i.y);if(0===e)return!0;if(e<0)continue;n=!n}}else{if(t.y!==i.y)continue;if(a.x<=t.x&&t.x<=i.x||i.x<=t.x&&t.x<=a.x)return!0}}return n}const i=Ic.isClockWise,n=this.subPaths;if(0===n.length)return[];let r,s,a;const o=[];if(1===n.length)return s=n[0],a=new ac,a.curves=s.curves,o.push(a),o;let l=!i(n[0].getPoints());l=t?!l:l;const c=[],h=[];let u,d,p=[],m=0;h[m]=void 0,p[m]=[];for(let e=0,a=n.length;e1){let t=!1,i=0;for(let t=0,e=h.length;t0&&!1===t&&(p=c)}for(let t=0,e=h.length;t=t.HAVE_CURRENT_DATA&&(this.needsUpdate=!0)}},t.WebGL1Renderer=vo,t.WebGL3DRenderTarget=class extends gi{constructor(t=1,e=1,i=1){super(t,e),this.isWebGL3DRenderTarget=!0,this.depth=i,this.texture=new xi(null,t,e,i),this.texture.isRenderTargetTexture=!0}},t.WebGLArrayRenderTarget=class extends gi{constructor(t=1,e=1,i=1){super(t,e),this.isWebGLArrayRenderTarget=!0,this.depth=i,this.texture=new vi(null,t,e,i),this.texture.isRenderTargetTexture=!0}},t.WebGLCubeRenderTarget=Ar,t.WebGLMultipleRenderTargets=class extends gi{constructor(t=1,e=1,i=1,n={}){super(t,e,n),this.isWebGLMultipleRenderTargets=!0;const r=this.texture;this.texture=[];for(let t=0;t>8&255]+ee[t>>16&255]+ee[t>>24&255]+"-"+ee[255&e]+ee[e>>8&255]+"-"+ee[e>>16&15|64]+ee[e>>24&255]+"-"+ee[63&n|128]+ee[n>>8&255]+"-"+ee[n>>16&255]+ee[n>>24&255]+ee[255&i]+ee[i>>8&255]+ee[i>>16&255]+ee[i>>24&255]).toLowerCase()}function ae(t,e,n){return Math.max(e,Math.min(n,t))}function oe(t,e){return(t%e+e)%e}function le(t,e,n){return(1-n)*t+n*e}function ce(t){return 0==(t&t-1)&&0!==t}function he(t){return Math.pow(2,Math.floor(Math.log(t)/Math.LN2))}function ue(t,e){switch(e.constructor){case Float32Array:return t;case Uint32Array:return t/4294967295;case Uint16Array:return t/65535;case Uint8Array:return t/255;case Int32Array:return Math.max(t/2147483647,-1);case Int16Array:return Math.max(t/32767,-1);case Int8Array:return Math.max(t/127,-1);default:throw new Error("Invalid component type.")}}function de(t,e){switch(e.constructor){case Float32Array:return t;case Uint32Array:return Math.round(4294967295*t);case Uint16Array:return Math.round(65535*t);case Uint8Array:return Math.round(255*t);case Int32Array:return Math.round(2147483647*t);case Int16Array:return Math.round(32767*t);case Int8Array:return Math.round(127*t);default:throw new Error("Invalid component type.")}}const pe={DEG2RAD:ie,RAD2DEG:re,generateUUID:se,clamp:ae,euclideanModulo:oe,mapLinear:function(t,e,n,i,r){return i+(t-e)*(r-i)/(n-e)},inverseLerp:function(t,e,n){return t!==e?(n-t)/(e-t):0},lerp:le,damp:function(t,e,n,i){return le(t,e,1-Math.exp(-n*i))},pingpong:function(t,e=1){return e-Math.abs(oe(t,2*e)-e)},smoothstep:function(t,e,n){return t<=e?0:t>=n?1:(t=(t-e)/(n-e))*t*(3-2*t)},smootherstep:function(t,e,n){return t<=e?0:t>=n?1:(t=(t-e)/(n-e))*t*t*(t*(6*t-15)+10)},randInt:function(t,e){return t+Math.floor(Math.random()*(e-t+1))},randFloat:function(t,e){return t+Math.random()*(e-t)},randFloatSpread:function(t){return t*(.5-Math.random())},seededRandom:function(t){void 0!==t&&(ne=t);let e=ne+=1831565813;return e=Math.imul(e^e>>>15,1|e),e^=e+Math.imul(e^e>>>7,61|e),((e^e>>>14)>>>0)/4294967296},degToRad:function(t){return t*ie},radToDeg:function(t){return t*re},isPowerOfTwo:ce,ceilPowerOfTwo:function(t){return Math.pow(2,Math.ceil(Math.log(t)/Math.LN2))},floorPowerOfTwo:he,setQuaternionFromProperEuler:function(t,e,n,i,r){const s=Math.cos,a=Math.sin,o=s(n/2),l=a(n/2),c=s((e+i)/2),h=a((e+i)/2),u=s((e-i)/2),d=a((e-i)/2),p=s((i-e)/2),m=a((i-e)/2);switch(r){case"XYX":t.set(o*h,l*u,l*d,o*c);break;case"YZY":t.set(l*d,o*h,l*u,o*c);break;case"ZXZ":t.set(l*u,l*d,o*h,o*c);break;case"XZX":t.set(o*h,l*m,l*p,o*c);break;case"YXY":t.set(l*p,o*h,l*m,o*c);break;case"ZYZ":t.set(l*m,l*p,o*h,o*c);break;default:console.warn("THREE.MathUtils: .setQuaternionFromProperEuler() encountered an unknown order: "+r)}},normalize:de,denormalize:ue};class me{constructor(t=0,e=0){me.prototype.isVector2=!0,this.x=t,this.y=e}get width(){return this.x}set width(t){this.x=t}get height(){return this.y}set height(t){this.y=t}set(t,e){return this.x=t,this.y=e,this}setScalar(t){return this.x=t,this.y=t,this}setX(t){return this.x=t,this}setY(t){return this.y=t,this}setComponent(t,e){switch(t){case 0:this.x=e;break;case 1:this.y=e;break;default:throw new Error("index is out of range: "+t)}return this}getComponent(t){switch(t){case 0:return this.x;case 1:return this.y;default:throw new Error("index is out of range: "+t)}}clone(){return new this.constructor(this.x,this.y)}copy(t){return this.x=t.x,this.y=t.y,this}add(t){return this.x+=t.x,this.y+=t.y,this}addScalar(t){return this.x+=t,this.y+=t,this}addVectors(t,e){return this.x=t.x+e.x,this.y=t.y+e.y,this}addScaledVector(t,e){return this.x+=t.x*e,this.y+=t.y*e,this}sub(t){return this.x-=t.x,this.y-=t.y,this}subScalar(t){return this.x-=t,this.y-=t,this}subVectors(t,e){return this.x=t.x-e.x,this.y=t.y-e.y,this}multiply(t){return this.x*=t.x,this.y*=t.y,this}multiplyScalar(t){return this.x*=t,this.y*=t,this}divide(t){return this.x/=t.x,this.y/=t.y,this}divideScalar(t){return this.multiplyScalar(1/t)}applyMatrix3(t){const e=this.x,n=this.y,i=t.elements;return this.x=i[0]*e+i[3]*n+i[6],this.y=i[1]*e+i[4]*n+i[7],this}min(t){return this.x=Math.min(this.x,t.x),this.y=Math.min(this.y,t.y),this}max(t){return this.x=Math.max(this.x,t.x),this.y=Math.max(this.y,t.y),this}clamp(t,e){return this.x=Math.max(t.x,Math.min(e.x,this.x)),this.y=Math.max(t.y,Math.min(e.y,this.y)),this}clampScalar(t,e){return this.x=Math.max(t,Math.min(e,this.x)),this.y=Math.max(t,Math.min(e,this.y)),this}clampLength(t,e){const n=this.length();return this.divideScalar(n||1).multiplyScalar(Math.max(t,Math.min(e,n)))}floor(){return this.x=Math.floor(this.x),this.y=Math.floor(this.y),this}ceil(){return this.x=Math.ceil(this.x),this.y=Math.ceil(this.y),this}round(){return this.x=Math.round(this.x),this.y=Math.round(this.y),this}roundToZero(){return this.x=Math.trunc(this.x),this.y=Math.trunc(this.y),this}negate(){return this.x=-this.x,this.y=-this.y,this}dot(t){return this.x*t.x+this.y*t.y}cross(t){return this.x*t.y-this.y*t.x}lengthSq(){return this.x*this.x+this.y*this.y}length(){return Math.sqrt(this.x*this.x+this.y*this.y)}manhattanLength(){return Math.abs(this.x)+Math.abs(this.y)}normalize(){return this.divideScalar(this.length()||1)}angle(){return Math.atan2(-this.y,-this.x)+Math.PI}angleTo(t){const e=Math.sqrt(this.lengthSq()*t.lengthSq());if(0===e)return Math.PI/2;const n=this.dot(t)/e;return Math.acos(ae(n,-1,1))}distanceTo(t){return Math.sqrt(this.distanceToSquared(t))}distanceToSquared(t){const e=this.x-t.x,n=this.y-t.y;return e*e+n*n}manhattanDistanceTo(t){return Math.abs(this.x-t.x)+Math.abs(this.y-t.y)}setLength(t){return this.normalize().multiplyScalar(t)}lerp(t,e){return this.x+=(t.x-this.x)*e,this.y+=(t.y-this.y)*e,this}lerpVectors(t,e,n){return this.x=t.x+(e.x-t.x)*n,this.y=t.y+(e.y-t.y)*n,this}equals(t){return t.x===this.x&&t.y===this.y}fromArray(t,e=0){return this.x=t[e],this.y=t[e+1],this}toArray(t=[],e=0){return t[e]=this.x,t[e+1]=this.y,t}fromBufferAttribute(t,e){return this.x=t.getX(e),this.y=t.getY(e),this}rotateAround(t,e){const n=Math.cos(e),i=Math.sin(e),r=this.x-t.x,s=this.y-t.y;return this.x=r*n-s*i+t.x,this.y=r*i+s*n+t.y,this}random(){return this.x=Math.random(),this.y=Math.random(),this}*[Symbol.iterator](){yield this.x,yield this.y}}class fe{constructor(t,e,n,i,r,s,a,o,l){fe.prototype.isMatrix3=!0,this.elements=[1,0,0,0,1,0,0,0,1],void 0!==t&&this.set(t,e,n,i,r,s,a,o,l)}set(t,e,n,i,r,s,a,o,l){const c=this.elements;return c[0]=t,c[1]=i,c[2]=a,c[3]=e,c[4]=r,c[5]=o,c[6]=n,c[7]=s,c[8]=l,this}identity(){return this.set(1,0,0,0,1,0,0,0,1),this}copy(t){const e=this.elements,n=t.elements;return e[0]=n[0],e[1]=n[1],e[2]=n[2],e[3]=n[3],e[4]=n[4],e[5]=n[5],e[6]=n[6],e[7]=n[7],e[8]=n[8],this}extractBasis(t,e,n){return t.setFromMatrix3Column(this,0),e.setFromMatrix3Column(this,1),n.setFromMatrix3Column(this,2),this}setFromMatrix4(t){const e=t.elements;return this.set(e[0],e[4],e[8],e[1],e[5],e[9],e[2],e[6],e[10]),this}multiply(t){return this.multiplyMatrices(this,t)}premultiply(t){return this.multiplyMatrices(t,this)}multiplyMatrices(t,e){const n=t.elements,i=e.elements,r=this.elements,s=n[0],a=n[3],o=n[6],l=n[1],c=n[4],h=n[7],u=n[2],d=n[5],p=n[8],m=i[0],f=i[3],g=i[6],_=i[1],v=i[4],x=i[7],y=i[2],M=i[5],S=i[8];return r[0]=s*m+a*_+o*y,r[3]=s*f+a*v+o*M,r[6]=s*g+a*x+o*S,r[1]=l*m+c*_+h*y,r[4]=l*f+c*v+h*M,r[7]=l*g+c*x+h*S,r[2]=u*m+d*_+p*y,r[5]=u*f+d*v+p*M,r[8]=u*g+d*x+p*S,this}multiplyScalar(t){const e=this.elements;return e[0]*=t,e[3]*=t,e[6]*=t,e[1]*=t,e[4]*=t,e[7]*=t,e[2]*=t,e[5]*=t,e[8]*=t,this}determinant(){const t=this.elements,e=t[0],n=t[1],i=t[2],r=t[3],s=t[4],a=t[5],o=t[6],l=t[7],c=t[8];return e*s*c-e*a*l-n*r*c+n*a*o+i*r*l-i*s*o}invert(){const t=this.elements,e=t[0],n=t[1],i=t[2],r=t[3],s=t[4],a=t[5],o=t[6],l=t[7],c=t[8],h=c*s-a*l,u=a*o-c*r,d=l*r-s*o,p=e*h+n*u+i*d;if(0===p)return this.set(0,0,0,0,0,0,0,0,0);const m=1/p;return t[0]=h*m,t[1]=(i*l-c*n)*m,t[2]=(a*n-i*s)*m,t[3]=u*m,t[4]=(c*e-i*o)*m,t[5]=(i*r-a*e)*m,t[6]=d*m,t[7]=(n*o-l*e)*m,t[8]=(s*e-n*r)*m,this}transpose(){let t;const e=this.elements;return t=e[1],e[1]=e[3],e[3]=t,t=e[2],e[2]=e[6],e[6]=t,t=e[5],e[5]=e[7],e[7]=t,this}getNormalMatrix(t){return this.setFromMatrix4(t).invert().transpose()}transposeIntoArray(t){const e=this.elements;return t[0]=e[0],t[1]=e[3],t[2]=e[6],t[3]=e[1],t[4]=e[4],t[5]=e[7],t[6]=e[2],t[7]=e[5],t[8]=e[8],this}setUvTransform(t,e,n,i,r,s,a){const o=Math.cos(r),l=Math.sin(r);return this.set(n*o,n*l,-n*(o*s+l*a)+s+t,-i*l,i*o,-i*(-l*s+o*a)+a+e,0,0,1),this}scale(t,e){return this.premultiply(ge.makeScale(t,e)),this}rotate(t){return this.premultiply(ge.makeRotation(-t)),this}translate(t,e){return this.premultiply(ge.makeTranslation(t,e)),this}makeTranslation(t,e){return t.isVector2?this.set(1,0,t.x,0,1,t.y,0,0,1):this.set(1,0,t,0,1,e,0,0,1),this}makeRotation(t){const e=Math.cos(t),n=Math.sin(t);return this.set(e,-n,0,n,e,0,0,0,1),this}makeScale(t,e){return this.set(t,0,0,0,e,0,0,0,1),this}equals(t){const e=this.elements,n=t.elements;for(let t=0;t<9;t++)if(e[t]!==n[t])return!1;return!0}fromArray(t,e=0){for(let n=0;n<9;n++)this.elements[n]=t[n+e];return this}toArray(t=[],e=0){const n=this.elements;return t[e]=n[0],t[e+1]=n[1],t[e+2]=n[2],t[e+3]=n[3],t[e+4]=n[4],t[e+5]=n[5],t[e+6]=n[6],t[e+7]=n[7],t[e+8]=n[8],t}clone(){return(new this.constructor).fromArray(this.elements)}}const ge=new fe;function _e(t){for(let e=t.length-1;e>=0;--e)if(t[e]>=65535)return!0;return!1}const ve={Int8Array:Int8Array,Uint8Array:Uint8Array,Uint8ClampedArray:Uint8ClampedArray,Int16Array:Int16Array,Uint16Array:Uint16Array,Int32Array:Int32Array,Uint32Array:Uint32Array,Float32Array:Float32Array,Float64Array:Float64Array};function xe(t,e){return new ve[t](e)}function ye(t){return document.createElementNS("http://www.w3.org/1999/xhtml",t)}function Me(){const t=ye("canvas");return t.style.display="block",t}const Se={};function be(t){t in Se||(Se[t]=!0,console.warn(t))}const Te=(new fe).set(.8224621,.177538,0,.0331941,.9668058,0,.0170827,.0723974,.9105199),Ee=(new fe).set(1.2249401,-.2249404,0,-.0420569,1.0420571,0,-.0196376,-.0786361,1.0982735),we={[Ht]:{transfer:Wt,primaries:jt,toReference:t=>t,fromReference:t=>t},[Gt]:{transfer:Xt,primaries:jt,toReference:t=>t.convertSRGBToLinear(),fromReference:t=>t.convertLinearToSRGB()},[kt]:{transfer:Wt,primaries:qt,toReference:t=>t.applyMatrix3(Ee),fromReference:t=>t.applyMatrix3(Te)},[Vt]:{transfer:Xt,primaries:qt,toReference:t=>t.convertSRGBToLinear().applyMatrix3(Ee),fromReference:t=>t.applyMatrix3(Te).convertLinearToSRGB()}},Ae=new Set([Ht,kt]),Re={enabled:!0,_workingColorSpace:Ht,get workingColorSpace(){return this._workingColorSpace},set workingColorSpace(t){if(!Ae.has(t))throw new Error(`Unsupported working color space, "${t}".`);this._workingColorSpace=t},convert:function(t,e,n){if(!1===this.enabled||e===n||!e||!n)return t;const i=we[e].toReference;return(0,we[n].fromReference)(i(t))},fromWorkingColorSpace:function(t,e){return this.convert(t,this._workingColorSpace,e)},toWorkingColorSpace:function(t,e){return this.convert(t,e,this._workingColorSpace)},getPrimaries:function(t){return we[t].primaries},getTransfer:function(t){return t===zt?Wt:we[t].transfer}};function Ce(t){return t<.04045?.0773993808*t:Math.pow(.9478672986*t+.0521327014,2.4)}function Le(t){return t<.0031308?12.92*t:1.055*Math.pow(t,.41666)-.055}let Pe;class Ie{static getDataURL(t){if(/^data:/i.test(t.src))return t.src;if("undefined"==typeof HTMLCanvasElement)return t.src;let e;if(t instanceof HTMLCanvasElement)e=t;else{void 0===Pe&&(Pe=ye("canvas")),Pe.width=t.width,Pe.height=t.height;const n=Pe.getContext("2d");t instanceof ImageData?n.putImageData(t,0,0):n.drawImage(t,0,0,t.width,t.height),e=Pe}return e.width>2048||e.height>2048?(console.warn("THREE.ImageUtils.getDataURL: Image converted to jpg for performance reasons",t),e.toDataURL("image/jpeg",.6)):e.toDataURL("image/png")}static sRGBToLinear(t){if("undefined"!=typeof HTMLImageElement&&t instanceof HTMLImageElement||"undefined"!=typeof HTMLCanvasElement&&t instanceof HTMLCanvasElement||"undefined"!=typeof ImageBitmap&&t instanceof ImageBitmap){const e=ye("canvas");e.width=t.width,e.height=t.height;const n=e.getContext("2d");n.drawImage(t,0,0,t.width,t.height);const i=n.getImageData(0,0,t.width,t.height),r=i.data;for(let t=0;t0&&(n.userData=this.userData),e||(t.textures[this.uuid]=n),n}dispose(){this.dispatchEvent({type:"dispose"})}transformUv(t){if(this.mapping!==S)return t;if(t.applyMatrix3(this.matrix),t.x<0||t.x>1)switch(this.wrapS){case R:t.x=t.x-Math.floor(t.x);break;case C:t.x=t.x<0?0:1;break;case L:1===Math.abs(Math.floor(t.x)%2)?t.x=Math.ceil(t.x)-t.x:t.x=t.x-Math.floor(t.x)}if(t.y<0||t.y>1)switch(this.wrapT){case R:t.y=t.y-Math.floor(t.y);break;case C:t.y=t.y<0?0:1;break;case L:1===Math.abs(Math.floor(t.y)%2)?t.y=Math.ceil(t.y)-t.y:t.y=t.y-Math.floor(t.y)}return this.flipY&&(t.y=1-t.y),t}set needsUpdate(t){!0===t&&(this.version++,this.source.needsUpdate=!0)}get encoding(){return be("THREE.Texture: Property .encoding has been replaced by .colorSpace."),this.colorSpace===Gt?Bt:Ft}set encoding(t){be("THREE.Texture: Property .encoding has been replaced by .colorSpace."),this.colorSpace=t===Bt?Gt:zt}}Fe.DEFAULT_IMAGE=null,Fe.DEFAULT_MAPPING=S,Fe.DEFAULT_ANISOTROPY=1;class Be{constructor(t=0,e=0,n=0,i=1){Be.prototype.isVector4=!0,this.x=t,this.y=e,this.z=n,this.w=i}get width(){return this.z}set width(t){this.z=t}get height(){return this.w}set height(t){this.w=t}set(t,e,n,i){return this.x=t,this.y=e,this.z=n,this.w=i,this}setScalar(t){return this.x=t,this.y=t,this.z=t,this.w=t,this}setX(t){return this.x=t,this}setY(t){return this.y=t,this}setZ(t){return this.z=t,this}setW(t){return this.w=t,this}setComponent(t,e){switch(t){case 0:this.x=e;break;case 1:this.y=e;break;case 2:this.z=e;break;case 3:this.w=e;break;default:throw new Error("index is out of range: "+t)}return this}getComponent(t){switch(t){case 0:return this.x;case 1:return this.y;case 2:return this.z;case 3:return this.w;default:throw new Error("index is out of range: "+t)}}clone(){return new this.constructor(this.x,this.y,this.z,this.w)}copy(t){return this.x=t.x,this.y=t.y,this.z=t.z,this.w=void 0!==t.w?t.w:1,this}add(t){return this.x+=t.x,this.y+=t.y,this.z+=t.z,this.w+=t.w,this}addScalar(t){return this.x+=t,this.y+=t,this.z+=t,this.w+=t,this}addVectors(t,e){return this.x=t.x+e.x,this.y=t.y+e.y,this.z=t.z+e.z,this.w=t.w+e.w,this}addScaledVector(t,e){return this.x+=t.x*e,this.y+=t.y*e,this.z+=t.z*e,this.w+=t.w*e,this}sub(t){return this.x-=t.x,this.y-=t.y,this.z-=t.z,this.w-=t.w,this}subScalar(t){return this.x-=t,this.y-=t,this.z-=t,this.w-=t,this}subVectors(t,e){return this.x=t.x-e.x,this.y=t.y-e.y,this.z=t.z-e.z,this.w=t.w-e.w,this}multiply(t){return this.x*=t.x,this.y*=t.y,this.z*=t.z,this.w*=t.w,this}multiplyScalar(t){return this.x*=t,this.y*=t,this.z*=t,this.w*=t,this}applyMatrix4(t){const e=this.x,n=this.y,i=this.z,r=this.w,s=t.elements;return this.x=s[0]*e+s[4]*n+s[8]*i+s[12]*r,this.y=s[1]*e+s[5]*n+s[9]*i+s[13]*r,this.z=s[2]*e+s[6]*n+s[10]*i+s[14]*r,this.w=s[3]*e+s[7]*n+s[11]*i+s[15]*r,this}divideScalar(t){return this.multiplyScalar(1/t)}setAxisAngleFromQuaternion(t){this.w=2*Math.acos(t.w);const e=Math.sqrt(1-t.w*t.w);return e<1e-4?(this.x=1,this.y=0,this.z=0):(this.x=t.x/e,this.y=t.y/e,this.z=t.z/e),this}setAxisAngleFromRotationMatrix(t){let e,n,i,r;const s=.01,a=.1,o=t.elements,l=o[0],c=o[4],h=o[8],u=o[1],d=o[5],p=o[9],m=o[2],f=o[6],g=o[10];if(Math.abs(c-u)o&&t>_?t_?o=0?1:-1,i=1-e*e;if(i>Number.EPSILON){const r=Math.sqrt(i),s=Math.atan2(r,e*n);t=Math.sin(t*s)/r,a=Math.sin(a*s)/r}const r=a*n;if(o=o*t+u*r,l=l*t+d*r,c=c*t+p*r,h=h*t+m*r,t===1-a){const t=1/Math.sqrt(o*o+l*l+c*c+h*h);o*=t,l*=t,c*=t,h*=t}}t[e]=o,t[e+1]=l,t[e+2]=c,t[e+3]=h}static multiplyQuaternionsFlat(t,e,n,i,r,s){const a=n[i],o=n[i+1],l=n[i+2],c=n[i+3],h=r[s],u=r[s+1],d=r[s+2],p=r[s+3];return t[e]=a*p+c*h+o*d-l*u,t[e+1]=o*p+c*u+l*h-a*d,t[e+2]=l*p+c*d+a*u-o*h,t[e+3]=c*p-a*h-o*u-l*d,t}get x(){return this._x}set x(t){this._x=t,this._onChangeCallback()}get y(){return this._y}set y(t){this._y=t,this._onChangeCallback()}get z(){return this._z}set z(t){this._z=t,this._onChangeCallback()}get w(){return this._w}set w(t){this._w=t,this._onChangeCallback()}set(t,e,n,i){return this._x=t,this._y=e,this._z=n,this._w=i,this._onChangeCallback(),this}clone(){return new this.constructor(this._x,this._y,this._z,this._w)}copy(t){return this._x=t.x,this._y=t.y,this._z=t.z,this._w=t.w,this._onChangeCallback(),this}setFromEuler(t,e=!0){const n=t._x,i=t._y,r=t._z,s=t._order,a=Math.cos,o=Math.sin,l=a(n/2),c=a(i/2),h=a(r/2),u=o(n/2),d=o(i/2),p=o(r/2);switch(s){case"XYZ":this._x=u*c*h+l*d*p,this._y=l*d*h-u*c*p,this._z=l*c*p+u*d*h,this._w=l*c*h-u*d*p;break;case"YXZ":this._x=u*c*h+l*d*p,this._y=l*d*h-u*c*p,this._z=l*c*p-u*d*h,this._w=l*c*h+u*d*p;break;case"ZXY":this._x=u*c*h-l*d*p,this._y=l*d*h+u*c*p,this._z=l*c*p+u*d*h,this._w=l*c*h-u*d*p;break;case"ZYX":this._x=u*c*h-l*d*p,this._y=l*d*h+u*c*p,this._z=l*c*p-u*d*h,this._w=l*c*h+u*d*p;break;case"YZX":this._x=u*c*h+l*d*p,this._y=l*d*h+u*c*p,this._z=l*c*p-u*d*h,this._w=l*c*h-u*d*p;break;case"XZY":this._x=u*c*h-l*d*p,this._y=l*d*h-u*c*p,this._z=l*c*p+u*d*h,this._w=l*c*h+u*d*p;break;default:console.warn("THREE.Quaternion: .setFromEuler() encountered an unknown order: "+s)}return!0===e&&this._onChangeCallback(),this}setFromAxisAngle(t,e){const n=e/2,i=Math.sin(n);return this._x=t.x*i,this._y=t.y*i,this._z=t.z*i,this._w=Math.cos(n),this._onChangeCallback(),this}setFromRotationMatrix(t){const e=t.elements,n=e[0],i=e[4],r=e[8],s=e[1],a=e[5],o=e[9],l=e[2],c=e[6],h=e[10],u=n+a+h;if(u>0){const t=.5/Math.sqrt(u+1);this._w=.25/t,this._x=(c-o)*t,this._y=(r-l)*t,this._z=(s-i)*t}else if(n>a&&n>h){const t=2*Math.sqrt(1+n-a-h);this._w=(c-o)/t,this._x=.25*t,this._y=(i+s)/t,this._z=(r+l)/t}else if(a>h){const t=2*Math.sqrt(1+a-n-h);this._w=(r-l)/t,this._x=(i+s)/t,this._y=.25*t,this._z=(o+c)/t}else{const t=2*Math.sqrt(1+h-n-a);this._w=(s-i)/t,this._x=(r+l)/t,this._y=(o+c)/t,this._z=.25*t}return this._onChangeCallback(),this}setFromUnitVectors(t,e){let n=t.dot(e)+1;return nMath.abs(t.z)?(this._x=-t.y,this._y=t.x,this._z=0,this._w=n):(this._x=0,this._y=-t.z,this._z=t.y,this._w=n)):(this._x=t.y*e.z-t.z*e.y,this._y=t.z*e.x-t.x*e.z,this._z=t.x*e.y-t.y*e.x,this._w=n),this.normalize()}angleTo(t){return 2*Math.acos(Math.abs(ae(this.dot(t),-1,1)))}rotateTowards(t,e){const n=this.angleTo(t);if(0===n)return this;const i=Math.min(1,e/n);return this.slerp(t,i),this}identity(){return this.set(0,0,0,1)}invert(){return this.conjugate()}conjugate(){return this._x*=-1,this._y*=-1,this._z*=-1,this._onChangeCallback(),this}dot(t){return this._x*t._x+this._y*t._y+this._z*t._z+this._w*t._w}lengthSq(){return this._x*this._x+this._y*this._y+this._z*this._z+this._w*this._w}length(){return Math.sqrt(this._x*this._x+this._y*this._y+this._z*this._z+this._w*this._w)}normalize(){let t=this.length();return 0===t?(this._x=0,this._y=0,this._z=0,this._w=1):(t=1/t,this._x=this._x*t,this._y=this._y*t,this._z=this._z*t,this._w=this._w*t),this._onChangeCallback(),this}multiply(t){return this.multiplyQuaternions(this,t)}premultiply(t){return this.multiplyQuaternions(t,this)}multiplyQuaternions(t,e){const n=t._x,i=t._y,r=t._z,s=t._w,a=e._x,o=e._y,l=e._z,c=e._w;return this._x=n*c+s*a+i*l-r*o,this._y=i*c+s*o+r*a-n*l,this._z=r*c+s*l+n*o-i*a,this._w=s*c-n*a-i*o-r*l,this._onChangeCallback(),this}slerp(t,e){if(0===e)return this;if(1===e)return this.copy(t);const n=this._x,i=this._y,r=this._z,s=this._w;let a=s*t._w+n*t._x+i*t._y+r*t._z;if(a<0?(this._w=-t._w,this._x=-t._x,this._y=-t._y,this._z=-t._z,a=-a):this.copy(t),a>=1)return this._w=s,this._x=n,this._y=i,this._z=r,this;const o=1-a*a;if(o<=Number.EPSILON){const t=1-e;return this._w=t*s+e*this._w,this._x=t*n+e*this._x,this._y=t*i+e*this._y,this._z=t*r+e*this._z,this.normalize(),this}const l=Math.sqrt(o),c=Math.atan2(l,a),h=Math.sin((1-e)*c)/l,u=Math.sin(e*c)/l;return this._w=s*h+this._w*u,this._x=n*h+this._x*u,this._y=i*h+this._y*u,this._z=r*h+this._z*u,this._onChangeCallback(),this}slerpQuaternions(t,e,n){return this.copy(t).slerp(e,n)}random(){const t=Math.random(),e=Math.sqrt(1-t),n=Math.sqrt(t),i=2*Math.PI*Math.random(),r=2*Math.PI*Math.random();return this.set(e*Math.cos(i),n*Math.sin(r),n*Math.cos(r),e*Math.sin(i))}equals(t){return t._x===this._x&&t._y===this._y&&t._z===this._z&&t._w===this._w}fromArray(t,e=0){return this._x=t[e],this._y=t[e+1],this._z=t[e+2],this._w=t[e+3],this._onChangeCallback(),this}toArray(t=[],e=0){return t[e]=this._x,t[e+1]=this._y,t[e+2]=this._z,t[e+3]=this._w,t}fromBufferAttribute(t,e){return this._x=t.getX(e),this._y=t.getY(e),this._z=t.getZ(e),this._w=t.getW(e),this._onChangeCallback(),this}toJSON(){return this.toArray()}_onChange(t){return this._onChangeCallback=t,this}_onChangeCallback(){}*[Symbol.iterator](){yield this._x,yield this._y,yield this._z,yield this._w}}class We{constructor(t=0,e=0,n=0){We.prototype.isVector3=!0,this.x=t,this.y=e,this.z=n}set(t,e,n){return void 0===n&&(n=this.z),this.x=t,this.y=e,this.z=n,this}setScalar(t){return this.x=t,this.y=t,this.z=t,this}setX(t){return this.x=t,this}setY(t){return this.y=t,this}setZ(t){return this.z=t,this}setComponent(t,e){switch(t){case 0:this.x=e;break;case 1:this.y=e;break;case 2:this.z=e;break;default:throw new Error("index is out of range: "+t)}return this}getComponent(t){switch(t){case 0:return this.x;case 1:return this.y;case 2:return this.z;default:throw new Error("index is out of range: "+t)}}clone(){return new this.constructor(this.x,this.y,this.z)}copy(t){return this.x=t.x,this.y=t.y,this.z=t.z,this}add(t){return this.x+=t.x,this.y+=t.y,this.z+=t.z,this}addScalar(t){return this.x+=t,this.y+=t,this.z+=t,this}addVectors(t,e){return this.x=t.x+e.x,this.y=t.y+e.y,this.z=t.z+e.z,this}addScaledVector(t,e){return this.x+=t.x*e,this.y+=t.y*e,this.z+=t.z*e,this}sub(t){return this.x-=t.x,this.y-=t.y,this.z-=t.z,this}subScalar(t){return this.x-=t,this.y-=t,this.z-=t,this}subVectors(t,e){return this.x=t.x-e.x,this.y=t.y-e.y,this.z=t.z-e.z,this}multiply(t){return this.x*=t.x,this.y*=t.y,this.z*=t.z,this}multiplyScalar(t){return this.x*=t,this.y*=t,this.z*=t,this}multiplyVectors(t,e){return this.x=t.x*e.x,this.y=t.y*e.y,this.z=t.z*e.z,this}applyEuler(t){return this.applyQuaternion(je.setFromEuler(t))}applyAxisAngle(t,e){return this.applyQuaternion(je.setFromAxisAngle(t,e))}applyMatrix3(t){const e=this.x,n=this.y,i=this.z,r=t.elements;return this.x=r[0]*e+r[3]*n+r[6]*i,this.y=r[1]*e+r[4]*n+r[7]*i,this.z=r[2]*e+r[5]*n+r[8]*i,this}applyNormalMatrix(t){return this.applyMatrix3(t).normalize()}applyMatrix4(t){const e=this.x,n=this.y,i=this.z,r=t.elements,s=1/(r[3]*e+r[7]*n+r[11]*i+r[15]);return this.x=(r[0]*e+r[4]*n+r[8]*i+r[12])*s,this.y=(r[1]*e+r[5]*n+r[9]*i+r[13])*s,this.z=(r[2]*e+r[6]*n+r[10]*i+r[14])*s,this}applyQuaternion(t){const e=this.x,n=this.y,i=this.z,r=t.x,s=t.y,a=t.z,o=t.w,l=2*(s*i-a*n),c=2*(a*e-r*i),h=2*(r*n-s*e);return this.x=e+o*l+s*h-a*c,this.y=n+o*c+a*l-r*h,this.z=i+o*h+r*c-s*l,this}project(t){return this.applyMatrix4(t.matrixWorldInverse).applyMatrix4(t.projectionMatrix)}unproject(t){return this.applyMatrix4(t.projectionMatrixInverse).applyMatrix4(t.matrixWorld)}transformDirection(t){const e=this.x,n=this.y,i=this.z,r=t.elements;return this.x=r[0]*e+r[4]*n+r[8]*i,this.y=r[1]*e+r[5]*n+r[9]*i,this.z=r[2]*e+r[6]*n+r[10]*i,this.normalize()}divide(t){return this.x/=t.x,this.y/=t.y,this.z/=t.z,this}divideScalar(t){return this.multiplyScalar(1/t)}min(t){return this.x=Math.min(this.x,t.x),this.y=Math.min(this.y,t.y),this.z=Math.min(this.z,t.z),this}max(t){return this.x=Math.max(this.x,t.x),this.y=Math.max(this.y,t.y),this.z=Math.max(this.z,t.z),this}clamp(t,e){return this.x=Math.max(t.x,Math.min(e.x,this.x)),this.y=Math.max(t.y,Math.min(e.y,this.y)),this.z=Math.max(t.z,Math.min(e.z,this.z)),this}clampScalar(t,e){return this.x=Math.max(t,Math.min(e,this.x)),this.y=Math.max(t,Math.min(e,this.y)),this.z=Math.max(t,Math.min(e,this.z)),this}clampLength(t,e){const n=this.length();return this.divideScalar(n||1).multiplyScalar(Math.max(t,Math.min(e,n)))}floor(){return this.x=Math.floor(this.x),this.y=Math.floor(this.y),this.z=Math.floor(this.z),this}ceil(){return this.x=Math.ceil(this.x),this.y=Math.ceil(this.y),this.z=Math.ceil(this.z),this}round(){return this.x=Math.round(this.x),this.y=Math.round(this.y),this.z=Math.round(this.z),this}roundToZero(){return this.x=Math.trunc(this.x),this.y=Math.trunc(this.y),this.z=Math.trunc(this.z),this}negate(){return this.x=-this.x,this.y=-this.y,this.z=-this.z,this}dot(t){return this.x*t.x+this.y*t.y+this.z*t.z}lengthSq(){return this.x*this.x+this.y*this.y+this.z*this.z}length(){return Math.sqrt(this.x*this.x+this.y*this.y+this.z*this.z)}manhattanLength(){return Math.abs(this.x)+Math.abs(this.y)+Math.abs(this.z)}normalize(){return this.divideScalar(this.length()||1)}setLength(t){return this.normalize().multiplyScalar(t)}lerp(t,e){return this.x+=(t.x-this.x)*e,this.y+=(t.y-this.y)*e,this.z+=(t.z-this.z)*e,this}lerpVectors(t,e,n){return this.x=t.x+(e.x-t.x)*n,this.y=t.y+(e.y-t.y)*n,this.z=t.z+(e.z-t.z)*n,this}cross(t){return this.crossVectors(this,t)}crossVectors(t,e){const n=t.x,i=t.y,r=t.z,s=e.x,a=e.y,o=e.z;return this.x=i*o-r*a,this.y=r*s-n*o,this.z=n*a-i*s,this}projectOnVector(t){const e=t.lengthSq();if(0===e)return this.set(0,0,0);const n=t.dot(this)/e;return this.copy(t).multiplyScalar(n)}projectOnPlane(t){return Xe.copy(this).projectOnVector(t),this.sub(Xe)}reflect(t){return this.sub(Xe.copy(t).multiplyScalar(2*this.dot(t)))}angleTo(t){const e=Math.sqrt(this.lengthSq()*t.lengthSq());if(0===e)return Math.PI/2;const n=this.dot(t)/e;return Math.acos(ae(n,-1,1))}distanceTo(t){return Math.sqrt(this.distanceToSquared(t))}distanceToSquared(t){const e=this.x-t.x,n=this.y-t.y,i=this.z-t.z;return e*e+n*n+i*i}manhattanDistanceTo(t){return Math.abs(this.x-t.x)+Math.abs(this.y-t.y)+Math.abs(this.z-t.z)}setFromSpherical(t){return this.setFromSphericalCoords(t.radius,t.phi,t.theta)}setFromSphericalCoords(t,e,n){const i=Math.sin(e)*t;return this.x=i*Math.sin(n),this.y=Math.cos(e)*t,this.z=i*Math.cos(n),this}setFromCylindrical(t){return this.setFromCylindricalCoords(t.radius,t.theta,t.y)}setFromCylindricalCoords(t,e,n){return this.x=t*Math.sin(e),this.y=n,this.z=t*Math.cos(e),this}setFromMatrixPosition(t){const e=t.elements;return this.x=e[12],this.y=e[13],this.z=e[14],this}setFromMatrixScale(t){const e=this.setFromMatrixColumn(t,0).length(),n=this.setFromMatrixColumn(t,1).length(),i=this.setFromMatrixColumn(t,2).length();return this.x=e,this.y=n,this.z=i,this}setFromMatrixColumn(t,e){return this.fromArray(t.elements,4*e)}setFromMatrix3Column(t,e){return this.fromArray(t.elements,3*e)}setFromEuler(t){return this.x=t._x,this.y=t._y,this.z=t._z,this}setFromColor(t){return this.x=t.r,this.y=t.g,this.z=t.b,this}equals(t){return t.x===this.x&&t.y===this.y&&t.z===this.z}fromArray(t,e=0){return this.x=t[e],this.y=t[e+1],this.z=t[e+2],this}toArray(t=[],e=0){return t[e]=this.x,t[e+1]=this.y,t[e+2]=this.z,t}fromBufferAttribute(t,e){return this.x=t.getX(e),this.y=t.getY(e),this.z=t.getZ(e),this}random(){return this.x=Math.random(),this.y=Math.random(),this.z=Math.random(),this}randomDirection(){const t=2*(Math.random()-.5),e=Math.random()*Math.PI*2,n=Math.sqrt(1-t**2);return this.x=n*Math.cos(e),this.y=n*Math.sin(e),this.z=t,this}*[Symbol.iterator](){yield this.x,yield this.y,yield this.z}}const Xe=new We,je=new ke;class qe{constructor(t=new We(1/0,1/0,1/0),e=new We(-1/0,-1/0,-1/0)){this.isBox3=!0,this.min=t,this.max=e}set(t,e){return this.min.copy(t),this.max.copy(e),this}setFromArray(t){this.makeEmpty();for(let e=0,n=t.length;ethis.max.x||t.ythis.max.y||t.zthis.max.z)}containsBox(t){return this.min.x<=t.min.x&&t.max.x<=this.max.x&&this.min.y<=t.min.y&&t.max.y<=this.max.y&&this.min.z<=t.min.z&&t.max.z<=this.max.z}getParameter(t,e){return e.set((t.x-this.min.x)/(this.max.x-this.min.x),(t.y-this.min.y)/(this.max.y-this.min.y),(t.z-this.min.z)/(this.max.z-this.min.z))}intersectsBox(t){return!(t.max.xthis.max.x||t.max.ythis.max.y||t.max.zthis.max.z)}intersectsSphere(t){return this.clampPoint(t.center,Ze),Ze.distanceToSquared(t.center)<=t.radius*t.radius}intersectsPlane(t){let e,n;return t.normal.x>0?(e=t.normal.x*this.min.x,n=t.normal.x*this.max.x):(e=t.normal.x*this.max.x,n=t.normal.x*this.min.x),t.normal.y>0?(e+=t.normal.y*this.min.y,n+=t.normal.y*this.max.y):(e+=t.normal.y*this.max.y,n+=t.normal.y*this.min.y),t.normal.z>0?(e+=t.normal.z*this.min.z,n+=t.normal.z*this.max.z):(e+=t.normal.z*this.max.z,n+=t.normal.z*this.min.z),e<=-t.constant&&n>=-t.constant}intersectsTriangle(t){if(this.isEmpty())return!1;this.getCenter(rn),sn.subVectors(this.max,rn),Ke.subVectors(t.a,rn),$e.subVectors(t.b,rn),Qe.subVectors(t.c,rn),tn.subVectors($e,Ke),en.subVectors(Qe,$e),nn.subVectors(Ke,Qe);let e=[0,-tn.z,tn.y,0,-en.z,en.y,0,-nn.z,nn.y,tn.z,0,-tn.x,en.z,0,-en.x,nn.z,0,-nn.x,-tn.y,tn.x,0,-en.y,en.x,0,-nn.y,nn.x,0];return!!ln(e,Ke,$e,Qe,sn)&&(e=[1,0,0,0,1,0,0,0,1],!!ln(e,Ke,$e,Qe,sn)&&(an.crossVectors(tn,en),e=[an.x,an.y,an.z],ln(e,Ke,$e,Qe,sn)))}clampPoint(t,e){return e.copy(t).clamp(this.min,this.max)}distanceToPoint(t){return this.clampPoint(t,Ze).distanceTo(t)}getBoundingSphere(t){return this.isEmpty()?t.makeEmpty():(this.getCenter(t.center),t.radius=.5*this.getSize(Ze).length()),t}intersect(t){return this.min.max(t.min),this.max.min(t.max),this.isEmpty()&&this.makeEmpty(),this}union(t){return this.min.min(t.min),this.max.max(t.max),this}applyMatrix4(t){return this.isEmpty()||(Ye[0].set(this.min.x,this.min.y,this.min.z).applyMatrix4(t),Ye[1].set(this.min.x,this.min.y,this.max.z).applyMatrix4(t),Ye[2].set(this.min.x,this.max.y,this.min.z).applyMatrix4(t),Ye[3].set(this.min.x,this.max.y,this.max.z).applyMatrix4(t),Ye[4].set(this.max.x,this.min.y,this.min.z).applyMatrix4(t),Ye[5].set(this.max.x,this.min.y,this.max.z).applyMatrix4(t),Ye[6].set(this.max.x,this.max.y,this.min.z).applyMatrix4(t),Ye[7].set(this.max.x,this.max.y,this.max.z).applyMatrix4(t),this.setFromPoints(Ye)),this}translate(t){return this.min.add(t),this.max.add(t),this}equals(t){return t.min.equals(this.min)&&t.max.equals(this.max)}}const Ye=[new We,new We,new We,new We,new We,new We,new We,new We],Ze=new We,Je=new qe,Ke=new We,$e=new We,Qe=new We,tn=new We,en=new We,nn=new We,rn=new We,sn=new We,an=new We,on=new We;function ln(t,e,n,i,r){for(let s=0,a=t.length-3;s<=a;s+=3){on.fromArray(t,s);const a=r.x*Math.abs(on.x)+r.y*Math.abs(on.y)+r.z*Math.abs(on.z),o=e.dot(on),l=n.dot(on),c=i.dot(on);if(Math.max(-Math.max(o,l,c),Math.min(o,l,c))>a)return!1}return!0}const cn=new qe,hn=new We,un=new We;class dn{constructor(t=new We,e=-1){this.isSphere=!0,this.center=t,this.radius=e}set(t,e){return this.center.copy(t),this.radius=e,this}setFromPoints(t,e){const n=this.center;void 0!==e?n.copy(e):cn.setFromPoints(t).getCenter(n);let i=0;for(let e=0,r=t.length;ethis.radius*this.radius&&(e.sub(this.center).normalize(),e.multiplyScalar(this.radius).add(this.center)),e}getBoundingBox(t){return this.isEmpty()?(t.makeEmpty(),t):(t.set(this.center,this.center),t.expandByScalar(this.radius),t)}applyMatrix4(t){return this.center.applyMatrix4(t),this.radius=this.radius*t.getMaxScaleOnAxis(),this}translate(t){return this.center.add(t),this}expandByPoint(t){if(this.isEmpty())return this.center.copy(t),this.radius=0,this;hn.subVectors(t,this.center);const e=hn.lengthSq();if(e>this.radius*this.radius){const t=Math.sqrt(e),n=.5*(t-this.radius);this.center.addScaledVector(hn,n/t),this.radius+=n}return this}union(t){return t.isEmpty()?this:this.isEmpty()?(this.copy(t),this):(!0===this.center.equals(t.center)?this.radius=Math.max(this.radius,t.radius):(un.subVectors(t.center,this.center).setLength(t.radius),this.expandByPoint(hn.copy(t.center).add(un)),this.expandByPoint(hn.copy(t.center).sub(un))),this)}equals(t){return t.center.equals(this.center)&&t.radius===this.radius}clone(){return(new this.constructor).copy(this)}}const pn=new We,mn=new We,fn=new We,gn=new We,_n=new We,vn=new We,xn=new We;class yn{constructor(t=new We,e=new We(0,0,-1)){this.origin=t,this.direction=e}set(t,e){return this.origin.copy(t),this.direction.copy(e),this}copy(t){return this.origin.copy(t.origin),this.direction.copy(t.direction),this}at(t,e){return e.copy(this.origin).addScaledVector(this.direction,t)}lookAt(t){return this.direction.copy(t).sub(this.origin).normalize(),this}recast(t){return this.origin.copy(this.at(t,pn)),this}closestPointToPoint(t,e){e.subVectors(t,this.origin);const n=e.dot(this.direction);return n<0?e.copy(this.origin):e.copy(this.origin).addScaledVector(this.direction,n)}distanceToPoint(t){return Math.sqrt(this.distanceSqToPoint(t))}distanceSqToPoint(t){const e=pn.subVectors(t,this.origin).dot(this.direction);return e<0?this.origin.distanceToSquared(t):(pn.copy(this.origin).addScaledVector(this.direction,e),pn.distanceToSquared(t))}distanceSqToSegment(t,e,n,i){mn.copy(t).add(e).multiplyScalar(.5),fn.copy(e).sub(t).normalize(),gn.copy(this.origin).sub(mn);const r=.5*t.distanceTo(e),s=-this.direction.dot(fn),a=gn.dot(this.direction),o=-gn.dot(fn),l=gn.lengthSq(),c=Math.abs(1-s*s);let h,u,d,p;if(c>0)if(h=s*o-a,u=s*a-o,p=r*c,h>=0)if(u>=-p)if(u<=p){const t=1/c;h*=t,u*=t,d=h*(h+s*u+2*a)+u*(s*h+u+2*o)+l}else u=r,h=Math.max(0,-(s*u+a)),d=-h*h+u*(u+2*o)+l;else u=-r,h=Math.max(0,-(s*u+a)),d=-h*h+u*(u+2*o)+l;else u<=-p?(h=Math.max(0,-(-s*r+a)),u=h>0?-r:Math.min(Math.max(-r,-o),r),d=-h*h+u*(u+2*o)+l):u<=p?(h=0,u=Math.min(Math.max(-r,-o),r),d=u*(u+2*o)+l):(h=Math.max(0,-(s*r+a)),u=h>0?r:Math.min(Math.max(-r,-o),r),d=-h*h+u*(u+2*o)+l);else u=s>0?-r:r,h=Math.max(0,-(s*u+a)),d=-h*h+u*(u+2*o)+l;return n&&n.copy(this.origin).addScaledVector(this.direction,h),i&&i.copy(mn).addScaledVector(fn,u),d}intersectSphere(t,e){pn.subVectors(t.center,this.origin);const n=pn.dot(this.direction),i=pn.dot(pn)-n*n,r=t.radius*t.radius;if(i>r)return null;const s=Math.sqrt(r-i),a=n-s,o=n+s;return o<0?null:a<0?this.at(o,e):this.at(a,e)}intersectsSphere(t){return this.distanceSqToPoint(t.center)<=t.radius*t.radius}distanceToPlane(t){const e=t.normal.dot(this.direction);if(0===e)return 0===t.distanceToPoint(this.origin)?0:null;const n=-(this.origin.dot(t.normal)+t.constant)/e;return n>=0?n:null}intersectPlane(t,e){const n=this.distanceToPlane(t);return null===n?null:this.at(n,e)}intersectsPlane(t){const e=t.distanceToPoint(this.origin);if(0===e)return!0;return t.normal.dot(this.direction)*e<0}intersectBox(t,e){let n,i,r,s,a,o;const l=1/this.direction.x,c=1/this.direction.y,h=1/this.direction.z,u=this.origin;return l>=0?(n=(t.min.x-u.x)*l,i=(t.max.x-u.x)*l):(n=(t.max.x-u.x)*l,i=(t.min.x-u.x)*l),c>=0?(r=(t.min.y-u.y)*c,s=(t.max.y-u.y)*c):(r=(t.max.y-u.y)*c,s=(t.min.y-u.y)*c),n>s||r>i?null:((r>n||isNaN(n))&&(n=r),(s=0?(a=(t.min.z-u.z)*h,o=(t.max.z-u.z)*h):(a=(t.max.z-u.z)*h,o=(t.min.z-u.z)*h),n>o||a>i?null:((a>n||n!=n)&&(n=a),(o=0?n:i,e)))}intersectsBox(t){return null!==this.intersectBox(t,pn)}intersectTriangle(t,e,n,i,r){_n.subVectors(e,t),vn.subVectors(n,t),xn.crossVectors(_n,vn);let s,a=this.direction.dot(xn);if(a>0){if(i)return null;s=1}else{if(!(a<0))return null;s=-1,a=-a}gn.subVectors(this.origin,t);const o=s*this.direction.dot(vn.crossVectors(gn,vn));if(o<0)return null;const l=s*this.direction.dot(_n.cross(gn));if(l<0)return null;if(o+l>a)return null;const c=-s*gn.dot(xn);return c<0?null:this.at(c/a,r)}applyMatrix4(t){return this.origin.applyMatrix4(t),this.direction.transformDirection(t),this}equals(t){return t.origin.equals(this.origin)&&t.direction.equals(this.direction)}clone(){return(new this.constructor).copy(this)}}class Mn{constructor(t,e,n,i,r,s,a,o,l,c,h,u,d,p,m,f){Mn.prototype.isMatrix4=!0,this.elements=[1,0,0,0,0,1,0,0,0,0,1,0,0,0,0,1],void 0!==t&&this.set(t,e,n,i,r,s,a,o,l,c,h,u,d,p,m,f)}set(t,e,n,i,r,s,a,o,l,c,h,u,d,p,m,f){const g=this.elements;return g[0]=t,g[4]=e,g[8]=n,g[12]=i,g[1]=r,g[5]=s,g[9]=a,g[13]=o,g[2]=l,g[6]=c,g[10]=h,g[14]=u,g[3]=d,g[7]=p,g[11]=m,g[15]=f,this}identity(){return this.set(1,0,0,0,0,1,0,0,0,0,1,0,0,0,0,1),this}clone(){return(new Mn).fromArray(this.elements)}copy(t){const e=this.elements,n=t.elements;return e[0]=n[0],e[1]=n[1],e[2]=n[2],e[3]=n[3],e[4]=n[4],e[5]=n[5],e[6]=n[6],e[7]=n[7],e[8]=n[8],e[9]=n[9],e[10]=n[10],e[11]=n[11],e[12]=n[12],e[13]=n[13],e[14]=n[14],e[15]=n[15],this}copyPosition(t){const e=this.elements,n=t.elements;return e[12]=n[12],e[13]=n[13],e[14]=n[14],this}setFromMatrix3(t){const e=t.elements;return this.set(e[0],e[3],e[6],0,e[1],e[4],e[7],0,e[2],e[5],e[8],0,0,0,0,1),this}extractBasis(t,e,n){return t.setFromMatrixColumn(this,0),e.setFromMatrixColumn(this,1),n.setFromMatrixColumn(this,2),this}makeBasis(t,e,n){return this.set(t.x,e.x,n.x,0,t.y,e.y,n.y,0,t.z,e.z,n.z,0,0,0,0,1),this}extractRotation(t){const e=this.elements,n=t.elements,i=1/Sn.setFromMatrixColumn(t,0).length(),r=1/Sn.setFromMatrixColumn(t,1).length(),s=1/Sn.setFromMatrixColumn(t,2).length();return e[0]=n[0]*i,e[1]=n[1]*i,e[2]=n[2]*i,e[3]=0,e[4]=n[4]*r,e[5]=n[5]*r,e[6]=n[6]*r,e[7]=0,e[8]=n[8]*s,e[9]=n[9]*s,e[10]=n[10]*s,e[11]=0,e[12]=0,e[13]=0,e[14]=0,e[15]=1,this}makeRotationFromEuler(t){const e=this.elements,n=t.x,i=t.y,r=t.z,s=Math.cos(n),a=Math.sin(n),o=Math.cos(i),l=Math.sin(i),c=Math.cos(r),h=Math.sin(r);if("XYZ"===t.order){const t=s*c,n=s*h,i=a*c,r=a*h;e[0]=o*c,e[4]=-o*h,e[8]=l,e[1]=n+i*l,e[5]=t-r*l,e[9]=-a*o,e[2]=r-t*l,e[6]=i+n*l,e[10]=s*o}else if("YXZ"===t.order){const t=o*c,n=o*h,i=l*c,r=l*h;e[0]=t+r*a,e[4]=i*a-n,e[8]=s*l,e[1]=s*h,e[5]=s*c,e[9]=-a,e[2]=n*a-i,e[6]=r+t*a,e[10]=s*o}else if("ZXY"===t.order){const t=o*c,n=o*h,i=l*c,r=l*h;e[0]=t-r*a,e[4]=-s*h,e[8]=i+n*a,e[1]=n+i*a,e[5]=s*c,e[9]=r-t*a,e[2]=-s*l,e[6]=a,e[10]=s*o}else if("ZYX"===t.order){const t=s*c,n=s*h,i=a*c,r=a*h;e[0]=o*c,e[4]=i*l-n,e[8]=t*l+r,e[1]=o*h,e[5]=r*l+t,e[9]=n*l-i,e[2]=-l,e[6]=a*o,e[10]=s*o}else if("YZX"===t.order){const t=s*o,n=s*l,i=a*o,r=a*l;e[0]=o*c,e[4]=r-t*h,e[8]=i*h+n,e[1]=h,e[5]=s*c,e[9]=-a*c,e[2]=-l*c,e[6]=n*h+i,e[10]=t-r*h}else if("XZY"===t.order){const t=s*o,n=s*l,i=a*o,r=a*l;e[0]=o*c,e[4]=-h,e[8]=l*c,e[1]=t*h+r,e[5]=s*c,e[9]=n*h-i,e[2]=i*h-n,e[6]=a*c,e[10]=r*h+t}return e[3]=0,e[7]=0,e[11]=0,e[12]=0,e[13]=0,e[14]=0,e[15]=1,this}makeRotationFromQuaternion(t){return this.compose(Tn,t,En)}lookAt(t,e,n){const i=this.elements;return Rn.subVectors(t,e),0===Rn.lengthSq()&&(Rn.z=1),Rn.normalize(),wn.crossVectors(n,Rn),0===wn.lengthSq()&&(1===Math.abs(n.z)?Rn.x+=1e-4:Rn.z+=1e-4,Rn.normalize(),wn.crossVectors(n,Rn)),wn.normalize(),An.crossVectors(Rn,wn),i[0]=wn.x,i[4]=An.x,i[8]=Rn.x,i[1]=wn.y,i[5]=An.y,i[9]=Rn.y,i[2]=wn.z,i[6]=An.z,i[10]=Rn.z,this}multiply(t){return this.multiplyMatrices(this,t)}premultiply(t){return this.multiplyMatrices(t,this)}multiplyMatrices(t,e){const n=t.elements,i=e.elements,r=this.elements,s=n[0],a=n[4],o=n[8],l=n[12],c=n[1],h=n[5],u=n[9],d=n[13],p=n[2],m=n[6],f=n[10],g=n[14],_=n[3],v=n[7],x=n[11],y=n[15],M=i[0],S=i[4],b=i[8],T=i[12],E=i[1],w=i[5],A=i[9],R=i[13],C=i[2],L=i[6],P=i[10],I=i[14],U=i[3],D=i[7],N=i[11],O=i[15];return r[0]=s*M+a*E+o*C+l*U,r[4]=s*S+a*w+o*L+l*D,r[8]=s*b+a*A+o*P+l*N,r[12]=s*T+a*R+o*I+l*O,r[1]=c*M+h*E+u*C+d*U,r[5]=c*S+h*w+u*L+d*D,r[9]=c*b+h*A+u*P+d*N,r[13]=c*T+h*R+u*I+d*O,r[2]=p*M+m*E+f*C+g*U,r[6]=p*S+m*w+f*L+g*D,r[10]=p*b+m*A+f*P+g*N,r[14]=p*T+m*R+f*I+g*O,r[3]=_*M+v*E+x*C+y*U,r[7]=_*S+v*w+x*L+y*D,r[11]=_*b+v*A+x*P+y*N,r[15]=_*T+v*R+x*I+y*O,this}multiplyScalar(t){const e=this.elements;return e[0]*=t,e[4]*=t,e[8]*=t,e[12]*=t,e[1]*=t,e[5]*=t,e[9]*=t,e[13]*=t,e[2]*=t,e[6]*=t,e[10]*=t,e[14]*=t,e[3]*=t,e[7]*=t,e[11]*=t,e[15]*=t,this}determinant(){const t=this.elements,e=t[0],n=t[4],i=t[8],r=t[12],s=t[1],a=t[5],o=t[9],l=t[13],c=t[2],h=t[6],u=t[10],d=t[14];return t[3]*(+r*o*h-i*l*h-r*a*u+n*l*u+i*a*d-n*o*d)+t[7]*(+e*o*d-e*l*u+r*s*u-i*s*d+i*l*c-r*o*c)+t[11]*(+e*l*h-e*a*d-r*s*h+n*s*d+r*a*c-n*l*c)+t[15]*(-i*a*c-e*o*h+e*a*u+i*s*h-n*s*u+n*o*c)}transpose(){const t=this.elements;let e;return e=t[1],t[1]=t[4],t[4]=e,e=t[2],t[2]=t[8],t[8]=e,e=t[6],t[6]=t[9],t[9]=e,e=t[3],t[3]=t[12],t[12]=e,e=t[7],t[7]=t[13],t[13]=e,e=t[11],t[11]=t[14],t[14]=e,this}setPosition(t,e,n){const i=this.elements;return t.isVector3?(i[12]=t.x,i[13]=t.y,i[14]=t.z):(i[12]=t,i[13]=e,i[14]=n),this}invert(){const t=this.elements,e=t[0],n=t[1],i=t[2],r=t[3],s=t[4],a=t[5],o=t[6],l=t[7],c=t[8],h=t[9],u=t[10],d=t[11],p=t[12],m=t[13],f=t[14],g=t[15],_=h*f*l-m*u*l+m*o*d-a*f*d-h*o*g+a*u*g,v=p*u*l-c*f*l-p*o*d+s*f*d+c*o*g-s*u*g,x=c*m*l-p*h*l+p*a*d-s*m*d-c*a*g+s*h*g,y=p*h*o-c*m*o-p*a*u+s*m*u+c*a*f-s*h*f,M=e*_+n*v+i*x+r*y;if(0===M)return this.set(0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0);const S=1/M;return t[0]=_*S,t[1]=(m*u*r-h*f*r-m*i*d+n*f*d+h*i*g-n*u*g)*S,t[2]=(a*f*r-m*o*r+m*i*l-n*f*l-a*i*g+n*o*g)*S,t[3]=(h*o*r-a*u*r-h*i*l+n*u*l+a*i*d-n*o*d)*S,t[4]=v*S,t[5]=(c*f*r-p*u*r+p*i*d-e*f*d-c*i*g+e*u*g)*S,t[6]=(p*o*r-s*f*r-p*i*l+e*f*l+s*i*g-e*o*g)*S,t[7]=(s*u*r-c*o*r+c*i*l-e*u*l-s*i*d+e*o*d)*S,t[8]=x*S,t[9]=(p*h*r-c*m*r-p*n*d+e*m*d+c*n*g-e*h*g)*S,t[10]=(s*m*r-p*a*r+p*n*l-e*m*l-s*n*g+e*a*g)*S,t[11]=(c*a*r-s*h*r-c*n*l+e*h*l+s*n*d-e*a*d)*S,t[12]=y*S,t[13]=(c*m*i-p*h*i+p*n*u-e*m*u-c*n*f+e*h*f)*S,t[14]=(p*a*i-s*m*i-p*n*o+e*m*o+s*n*f-e*a*f)*S,t[15]=(s*h*i-c*a*i+c*n*o-e*h*o-s*n*u+e*a*u)*S,this}scale(t){const e=this.elements,n=t.x,i=t.y,r=t.z;return e[0]*=n,e[4]*=i,e[8]*=r,e[1]*=n,e[5]*=i,e[9]*=r,e[2]*=n,e[6]*=i,e[10]*=r,e[3]*=n,e[7]*=i,e[11]*=r,this}getMaxScaleOnAxis(){const t=this.elements,e=t[0]*t[0]+t[1]*t[1]+t[2]*t[2],n=t[4]*t[4]+t[5]*t[5]+t[6]*t[6],i=t[8]*t[8]+t[9]*t[9]+t[10]*t[10];return Math.sqrt(Math.max(e,n,i))}makeTranslation(t,e,n){return t.isVector3?this.set(1,0,0,t.x,0,1,0,t.y,0,0,1,t.z,0,0,0,1):this.set(1,0,0,t,0,1,0,e,0,0,1,n,0,0,0,1),this}makeRotationX(t){const e=Math.cos(t),n=Math.sin(t);return this.set(1,0,0,0,0,e,-n,0,0,n,e,0,0,0,0,1),this}makeRotationY(t){const e=Math.cos(t),n=Math.sin(t);return this.set(e,0,n,0,0,1,0,0,-n,0,e,0,0,0,0,1),this}makeRotationZ(t){const e=Math.cos(t),n=Math.sin(t);return this.set(e,-n,0,0,n,e,0,0,0,0,1,0,0,0,0,1),this}makeRotationAxis(t,e){const n=Math.cos(e),i=Math.sin(e),r=1-n,s=t.x,a=t.y,o=t.z,l=r*s,c=r*a;return this.set(l*s+n,l*a-i*o,l*o+i*a,0,l*a+i*o,c*a+n,c*o-i*s,0,l*o-i*a,c*o+i*s,r*o*o+n,0,0,0,0,1),this}makeScale(t,e,n){return this.set(t,0,0,0,0,e,0,0,0,0,n,0,0,0,0,1),this}makeShear(t,e,n,i,r,s){return this.set(1,n,r,0,t,1,s,0,e,i,1,0,0,0,0,1),this}compose(t,e,n){const i=this.elements,r=e._x,s=e._y,a=e._z,o=e._w,l=r+r,c=s+s,h=a+a,u=r*l,d=r*c,p=r*h,m=s*c,f=s*h,g=a*h,_=o*l,v=o*c,x=o*h,y=n.x,M=n.y,S=n.z;return i[0]=(1-(m+g))*y,i[1]=(d+x)*y,i[2]=(p-v)*y,i[3]=0,i[4]=(d-x)*M,i[5]=(1-(u+g))*M,i[6]=(f+_)*M,i[7]=0,i[8]=(p+v)*S,i[9]=(f-_)*S,i[10]=(1-(u+m))*S,i[11]=0,i[12]=t.x,i[13]=t.y,i[14]=t.z,i[15]=1,this}decompose(t,e,n){const i=this.elements;let r=Sn.set(i[0],i[1],i[2]).length();const s=Sn.set(i[4],i[5],i[6]).length(),a=Sn.set(i[8],i[9],i[10]).length();this.determinant()<0&&(r=-r),t.x=i[12],t.y=i[13],t.z=i[14],bn.copy(this);const o=1/r,l=1/s,c=1/a;return bn.elements[0]*=o,bn.elements[1]*=o,bn.elements[2]*=o,bn.elements[4]*=l,bn.elements[5]*=l,bn.elements[6]*=l,bn.elements[8]*=c,bn.elements[9]*=c,bn.elements[10]*=c,e.setFromRotationMatrix(bn),n.x=r,n.y=s,n.z=a,this}makePerspective(t,e,n,i,r,s,a=2e3){const o=this.elements,l=2*r/(e-t),c=2*r/(n-i),h=(e+t)/(e-t),u=(n+i)/(n-i);let d,p;if(a===$t)d=-(s+r)/(s-r),p=-2*s*r/(s-r);else{if(a!==Qt)throw new Error("THREE.Matrix4.makePerspective(): Invalid coordinate system: "+a);d=-s/(s-r),p=-s*r/(s-r)}return o[0]=l,o[4]=0,o[8]=h,o[12]=0,o[1]=0,o[5]=c,o[9]=u,o[13]=0,o[2]=0,o[6]=0,o[10]=d,o[14]=p,o[3]=0,o[7]=0,o[11]=-1,o[15]=0,this}makeOrthographic(t,e,n,i,r,s,a=2e3){const o=this.elements,l=1/(e-t),c=1/(n-i),h=1/(s-r),u=(e+t)*l,d=(n+i)*c;let p,m;if(a===$t)p=(s+r)*h,m=-2*h;else{if(a!==Qt)throw new Error("THREE.Matrix4.makeOrthographic(): Invalid coordinate system: "+a);p=r*h,m=-1*h}return o[0]=2*l,o[4]=0,o[8]=0,o[12]=-u,o[1]=0,o[5]=2*c,o[9]=0,o[13]=-d,o[2]=0,o[6]=0,o[10]=m,o[14]=-p,o[3]=0,o[7]=0,o[11]=0,o[15]=1,this}equals(t){const e=this.elements,n=t.elements;for(let t=0;t<16;t++)if(e[t]!==n[t])return!1;return!0}fromArray(t,e=0){for(let n=0;n<16;n++)this.elements[n]=t[n+e];return this}toArray(t=[],e=0){const n=this.elements;return t[e]=n[0],t[e+1]=n[1],t[e+2]=n[2],t[e+3]=n[3],t[e+4]=n[4],t[e+5]=n[5],t[e+6]=n[6],t[e+7]=n[7],t[e+8]=n[8],t[e+9]=n[9],t[e+10]=n[10],t[e+11]=n[11],t[e+12]=n[12],t[e+13]=n[13],t[e+14]=n[14],t[e+15]=n[15],t}}const Sn=new We,bn=new Mn,Tn=new We(0,0,0),En=new We(1,1,1),wn=new We,An=new We,Rn=new We,Cn=new Mn,Ln=new ke;class Pn{constructor(t=0,e=0,n=0,i=Pn.DEFAULT_ORDER){this.isEuler=!0,this._x=t,this._y=e,this._z=n,this._order=i}get x(){return this._x}set x(t){this._x=t,this._onChangeCallback()}get y(){return this._y}set y(t){this._y=t,this._onChangeCallback()}get z(){return this._z}set z(t){this._z=t,this._onChangeCallback()}get order(){return this._order}set order(t){this._order=t,this._onChangeCallback()}set(t,e,n,i=this._order){return this._x=t,this._y=e,this._z=n,this._order=i,this._onChangeCallback(),this}clone(){return new this.constructor(this._x,this._y,this._z,this._order)}copy(t){return this._x=t._x,this._y=t._y,this._z=t._z,this._order=t._order,this._onChangeCallback(),this}setFromRotationMatrix(t,e=this._order,n=!0){const i=t.elements,r=i[0],s=i[4],a=i[8],o=i[1],l=i[5],c=i[9],h=i[2],u=i[6],d=i[10];switch(e){case"XYZ":this._y=Math.asin(ae(a,-1,1)),Math.abs(a)<.9999999?(this._x=Math.atan2(-c,d),this._z=Math.atan2(-s,r)):(this._x=Math.atan2(u,l),this._z=0);break;case"YXZ":this._x=Math.asin(-ae(c,-1,1)),Math.abs(c)<.9999999?(this._y=Math.atan2(a,d),this._z=Math.atan2(o,l)):(this._y=Math.atan2(-h,r),this._z=0);break;case"ZXY":this._x=Math.asin(ae(u,-1,1)),Math.abs(u)<.9999999?(this._y=Math.atan2(-h,d),this._z=Math.atan2(-s,l)):(this._y=0,this._z=Math.atan2(o,r));break;case"ZYX":this._y=Math.asin(-ae(h,-1,1)),Math.abs(h)<.9999999?(this._x=Math.atan2(u,d),this._z=Math.atan2(o,r)):(this._x=0,this._z=Math.atan2(-s,l));break;case"YZX":this._z=Math.asin(ae(o,-1,1)),Math.abs(o)<.9999999?(this._x=Math.atan2(-c,l),this._y=Math.atan2(-h,r)):(this._x=0,this._y=Math.atan2(a,d));break;case"XZY":this._z=Math.asin(-ae(s,-1,1)),Math.abs(s)<.9999999?(this._x=Math.atan2(u,l),this._y=Math.atan2(a,r)):(this._x=Math.atan2(-c,d),this._y=0);break;default:console.warn("THREE.Euler: .setFromRotationMatrix() encountered an unknown order: "+e)}return this._order=e,!0===n&&this._onChangeCallback(),this}setFromQuaternion(t,e,n){return Cn.makeRotationFromQuaternion(t),this.setFromRotationMatrix(Cn,e,n)}setFromVector3(t,e=this._order){return this.set(t.x,t.y,t.z,e)}reorder(t){return Ln.setFromEuler(this),this.setFromQuaternion(Ln,t)}equals(t){return t._x===this._x&&t._y===this._y&&t._z===this._z&&t._order===this._order}fromArray(t){return this._x=t[0],this._y=t[1],this._z=t[2],void 0!==t[3]&&(this._order=t[3]),this._onChangeCallback(),this}toArray(t=[],e=0){return t[e]=this._x,t[e+1]=this._y,t[e+2]=this._z,t[e+3]=this._order,t}_onChange(t){return this._onChangeCallback=t,this}_onChangeCallback(){}*[Symbol.iterator](){yield this._x,yield this._y,yield this._z,yield this._order}}Pn.DEFAULT_ORDER="XYZ";class In{constructor(){this.mask=1}set(t){this.mask=(1<>>0}enable(t){this.mask|=1<1){for(let t=0;t1){for(let t=0;t0&&(i.userData=this.userData),i.layers=this.layers.mask,i.matrix=this.matrix.toArray(),i.up=this.up.toArray(),!1===this.matrixAutoUpdate&&(i.matrixAutoUpdate=!1),this.isInstancedMesh&&(i.type="InstancedMesh",i.count=this.count,i.instanceMatrix=this.instanceMatrix.toJSON(),null!==this.instanceColor&&(i.instanceColor=this.instanceColor.toJSON())),this.isBatchedMesh&&(i.type="BatchedMesh",i.perObjectFrustumCulled=this.perObjectFrustumCulled,i.sortObjects=this.sortObjects,i.drawRanges=this._drawRanges,i.reservedRanges=this._reservedRanges,i.visibility=this._visibility,i.active=this._active,i.bounds=this._bounds.map((t=>({boxInitialized:t.boxInitialized,boxMin:t.box.min.toArray(),boxMax:t.box.max.toArray(),sphereInitialized:t.sphereInitialized,sphereRadius:t.sphere.radius,sphereCenter:t.sphere.center.toArray()}))),i.maxGeometryCount=this._maxGeometryCount,i.maxVertexCount=this._maxVertexCount,i.maxIndexCount=this._maxIndexCount,i.geometryInitialized=this._geometryInitialized,i.geometryCount=this._geometryCount,i.matricesTexture=this._matricesTexture.toJSON(t),null!==this.boundingSphere&&(i.boundingSphere={center:i.boundingSphere.center.toArray(),radius:i.boundingSphere.radius}),null!==this.boundingBox&&(i.boundingBox={min:i.boundingBox.min.toArray(),max:i.boundingBox.max.toArray()})),this.isScene)this.background&&(this.background.isColor?i.background=this.background.toJSON():this.background.isTexture&&(i.background=this.background.toJSON(t).uuid)),this.environment&&this.environment.isTexture&&!0!==this.environment.isRenderTargetTexture&&(i.environment=this.environment.toJSON(t).uuid);else if(this.isMesh||this.isLine||this.isPoints){i.geometry=r(t.geometries,this.geometry);const e=this.geometry.parameters;if(void 0!==e&&void 0!==e.shapes){const n=e.shapes;if(Array.isArray(n))for(let e=0,i=n.length;e0){i.children=[];for(let e=0;e0){i.animations=[];for(let e=0;e0&&(n.geometries=e),i.length>0&&(n.materials=i),r.length>0&&(n.textures=r),a.length>0&&(n.images=a),o.length>0&&(n.shapes=o),l.length>0&&(n.skeletons=l),c.length>0&&(n.animations=c),h.length>0&&(n.nodes=h)}return n.object=i,n;function s(t){const e=[];for(const n in t){const i=t[n];delete i.metadata,e.push(i)}return e}}clone(t){return(new this.constructor).copy(this,t)}copy(t,e=!0){if(this.name=t.name,this.up.copy(t.up),this.position.copy(t.position),this.rotation.order=t.rotation.order,this.quaternion.copy(t.quaternion),this.scale.copy(t.scale),this.matrix.copy(t.matrix),this.matrixWorld.copy(t.matrixWorld),this.matrixAutoUpdate=t.matrixAutoUpdate,this.matrixWorldAutoUpdate=t.matrixWorldAutoUpdate,this.matrixWorldNeedsUpdate=t.matrixWorldNeedsUpdate,this.layers.mask=t.layers.mask,this.visible=t.visible,this.castShadow=t.castShadow,this.receiveShadow=t.receiveShadow,this.frustumCulled=t.frustumCulled,this.renderOrder=t.renderOrder,this.animations=t.animations.slice(),this.userData=JSON.parse(JSON.stringify(t.userData)),!0===e)for(let e=0;e0?i.multiplyScalar(1/Math.sqrt(r)):i.set(0,0,0)}static getBarycoord(t,e,n,i,r){qn.subVectors(i,e),Yn.subVectors(n,e),Zn.subVectors(t,e);const s=qn.dot(qn),a=qn.dot(Yn),o=qn.dot(Zn),l=Yn.dot(Yn),c=Yn.dot(Zn),h=s*l-a*a;if(0===h)return r.set(0,0,0),null;const u=1/h,d=(l*o-a*c)*u,p=(s*c-a*o)*u;return r.set(1-d-p,p,d)}static containsPoint(t,e,n,i){return null!==this.getBarycoord(t,e,n,i,Jn)&&(Jn.x>=0&&Jn.y>=0&&Jn.x+Jn.y<=1)}static getUV(t,e,n,i,r,s,a,o){return!1===ii&&(console.warn("THREE.Triangle.getUV() has been renamed to THREE.Triangle.getInterpolation()."),ii=!0),this.getInterpolation(t,e,n,i,r,s,a,o)}static getInterpolation(t,e,n,i,r,s,a,o){return null===this.getBarycoord(t,e,n,i,Jn)?(o.x=0,o.y=0,"z"in o&&(o.z=0),"w"in o&&(o.w=0),null):(o.setScalar(0),o.addScaledVector(r,Jn.x),o.addScaledVector(s,Jn.y),o.addScaledVector(a,Jn.z),o)}static isFrontFacing(t,e,n,i){return qn.subVectors(n,e),Yn.subVectors(t,e),qn.cross(Yn).dot(i)<0}set(t,e,n){return this.a.copy(t),this.b.copy(e),this.c.copy(n),this}setFromPointsAndIndices(t,e,n,i){return this.a.copy(t[e]),this.b.copy(t[n]),this.c.copy(t[i]),this}setFromAttributeAndIndices(t,e,n,i){return this.a.fromBufferAttribute(t,e),this.b.fromBufferAttribute(t,n),this.c.fromBufferAttribute(t,i),this}clone(){return(new this.constructor).copy(this)}copy(t){return this.a.copy(t.a),this.b.copy(t.b),this.c.copy(t.c),this}getArea(){return qn.subVectors(this.c,this.b),Yn.subVectors(this.a,this.b),.5*qn.cross(Yn).length()}getMidpoint(t){return t.addVectors(this.a,this.b).add(this.c).multiplyScalar(1/3)}getNormal(t){return ri.getNormal(this.a,this.b,this.c,t)}getPlane(t){return t.setFromCoplanarPoints(this.a,this.b,this.c)}getBarycoord(t,e){return ri.getBarycoord(t,this.a,this.b,this.c,e)}getUV(t,e,n,i,r){return!1===ii&&(console.warn("THREE.Triangle.getUV() has been renamed to THREE.Triangle.getInterpolation()."),ii=!0),ri.getInterpolation(t,this.a,this.b,this.c,e,n,i,r)}getInterpolation(t,e,n,i,r){return ri.getInterpolation(t,this.a,this.b,this.c,e,n,i,r)}containsPoint(t){return ri.containsPoint(t,this.a,this.b,this.c)}isFrontFacing(t){return ri.isFrontFacing(this.a,this.b,this.c,t)}intersectsBox(t){return t.intersectsTriangle(this)}closestPointToPoint(t,e){const n=this.a,i=this.b,r=this.c;let s,a;Kn.subVectors(i,n),$n.subVectors(r,n),ti.subVectors(t,n);const o=Kn.dot(ti),l=$n.dot(ti);if(o<=0&&l<=0)return e.copy(n);ei.subVectors(t,i);const c=Kn.dot(ei),h=$n.dot(ei);if(c>=0&&h<=c)return e.copy(i);const u=o*h-c*l;if(u<=0&&o>=0&&c<=0)return s=o/(o-c),e.copy(n).addScaledVector(Kn,s);ni.subVectors(t,r);const d=Kn.dot(ni),p=$n.dot(ni);if(p>=0&&d<=p)return e.copy(r);const m=d*l-o*p;if(m<=0&&l>=0&&p<=0)return a=l/(l-p),e.copy(n).addScaledVector($n,a);const f=c*p-d*h;if(f<=0&&h-c>=0&&d-p>=0)return Qn.subVectors(r,i),a=(h-c)/(h-c+(d-p)),e.copy(i).addScaledVector(Qn,a);const g=1/(f+m+u);return s=m*g,a=u*g,e.copy(n).addScaledVector(Kn,s).addScaledVector($n,a)}equals(t){return t.a.equals(this.a)&&t.b.equals(this.b)&&t.c.equals(this.c)}}const si={aliceblue:15792383,antiquewhite:16444375,aqua:65535,aquamarine:8388564,azure:15794175,beige:16119260,bisque:16770244,black:0,blanchedalmond:16772045,blue:255,blueviolet:9055202,brown:10824234,burlywood:14596231,cadetblue:6266528,chartreuse:8388352,chocolate:13789470,coral:16744272,cornflowerblue:6591981,cornsilk:16775388,crimson:14423100,cyan:65535,darkblue:139,darkcyan:35723,darkgoldenrod:12092939,darkgray:11119017,darkgreen:25600,darkgrey:11119017,darkkhaki:12433259,darkmagenta:9109643,darkolivegreen:5597999,darkorange:16747520,darkorchid:10040012,darkred:9109504,darksalmon:15308410,darkseagreen:9419919,darkslateblue:4734347,darkslategray:3100495,darkslategrey:3100495,darkturquoise:52945,darkviolet:9699539,deeppink:16716947,deepskyblue:49151,dimgray:6908265,dimgrey:6908265,dodgerblue:2003199,firebrick:11674146,floralwhite:16775920,forestgreen:2263842,fuchsia:16711935,gainsboro:14474460,ghostwhite:16316671,gold:16766720,goldenrod:14329120,gray:8421504,green:32768,greenyellow:11403055,grey:8421504,honeydew:15794160,hotpink:16738740,indianred:13458524,indigo:4915330,ivory:16777200,khaki:15787660,lavender:15132410,lavenderblush:16773365,lawngreen:8190976,lemonchiffon:16775885,lightblue:11393254,lightcoral:15761536,lightcyan:14745599,lightgoldenrodyellow:16448210,lightgray:13882323,lightgreen:9498256,lightgrey:13882323,lightpink:16758465,lightsalmon:16752762,lightseagreen:2142890,lightskyblue:8900346,lightslategray:7833753,lightslategrey:7833753,lightsteelblue:11584734,lightyellow:16777184,lime:65280,limegreen:3329330,linen:16445670,magenta:16711935,maroon:8388608,mediumaquamarine:6737322,mediumblue:205,mediumorchid:12211667,mediumpurple:9662683,mediumseagreen:3978097,mediumslateblue:8087790,mediumspringgreen:64154,mediumturquoise:4772300,mediumvioletred:13047173,midnightblue:1644912,mintcream:16121850,mistyrose:16770273,moccasin:16770229,navajowhite:16768685,navy:128,oldlace:16643558,olive:8421376,olivedrab:7048739,orange:16753920,orangered:16729344,orchid:14315734,palegoldenrod:15657130,palegreen:10025880,paleturquoise:11529966,palevioletred:14381203,papayawhip:16773077,peachpuff:16767673,peru:13468991,pink:16761035,plum:14524637,powderblue:11591910,purple:8388736,rebeccapurple:6697881,red:16711680,rosybrown:12357519,royalblue:4286945,saddlebrown:9127187,salmon:16416882,sandybrown:16032864,seagreen:3050327,seashell:16774638,sienna:10506797,silver:12632256,skyblue:8900331,slateblue:6970061,slategray:7372944,slategrey:7372944,snow:16775930,springgreen:65407,steelblue:4620980,tan:13808780,teal:32896,thistle:14204888,tomato:16737095,turquoise:4251856,violet:15631086,wheat:16113331,white:16777215,whitesmoke:16119285,yellow:16776960,yellowgreen:10145074},ai={h:0,s:0,l:0},oi={h:0,s:0,l:0};function li(t,e,n){return n<0&&(n+=1),n>1&&(n-=1),n<1/6?t+6*(e-t)*n:n<.5?e:n<2/3?t+6*(e-t)*(2/3-n):t}class ci{constructor(t,e,n){return this.isColor=!0,this.r=1,this.g=1,this.b=1,this.set(t,e,n)}set(t,e,n){if(void 0===e&&void 0===n){const e=t;e&&e.isColor?this.copy(e):"number"==typeof e?this.setHex(e):"string"==typeof e&&this.setStyle(e)}else this.setRGB(t,e,n);return this}setScalar(t){return this.r=t,this.g=t,this.b=t,this}setHex(t,e=Gt){return t=Math.floor(t),this.r=(t>>16&255)/255,this.g=(t>>8&255)/255,this.b=(255&t)/255,Re.toWorkingColorSpace(this,e),this}setRGB(t,e,n,i=Re.workingColorSpace){return this.r=t,this.g=e,this.b=n,Re.toWorkingColorSpace(this,i),this}setHSL(t,e,n,i=Re.workingColorSpace){if(t=oe(t,1),e=ae(e,0,1),n=ae(n,0,1),0===e)this.r=this.g=this.b=n;else{const i=n<=.5?n*(1+e):n+e-n*e,r=2*n-i;this.r=li(r,i,t+1/3),this.g=li(r,i,t),this.b=li(r,i,t-1/3)}return Re.toWorkingColorSpace(this,i),this}setStyle(t,e=Gt){function n(e){void 0!==e&&parseFloat(e)<1&&console.warn("THREE.Color: Alpha component of "+t+" will be ignored.")}let i;if(i=/^(\w+)\(([^\)]*)\)/.exec(t)){let r;const s=i[1],a=i[2];switch(s){case"rgb":case"rgba":if(r=/^\s*(\d+)\s*,\s*(\d+)\s*,\s*(\d+)\s*(?:,\s*(\d*\.?\d+)\s*)?$/.exec(a))return n(r[4]),this.setRGB(Math.min(255,parseInt(r[1],10))/255,Math.min(255,parseInt(r[2],10))/255,Math.min(255,parseInt(r[3],10))/255,e);if(r=/^\s*(\d+)\%\s*,\s*(\d+)\%\s*,\s*(\d+)\%\s*(?:,\s*(\d*\.?\d+)\s*)?$/.exec(a))return n(r[4]),this.setRGB(Math.min(100,parseInt(r[1],10))/100,Math.min(100,parseInt(r[2],10))/100,Math.min(100,parseInt(r[3],10))/100,e);break;case"hsl":case"hsla":if(r=/^\s*(\d*\.?\d+)\s*,\s*(\d*\.?\d+)\%\s*,\s*(\d*\.?\d+)\%\s*(?:,\s*(\d*\.?\d+)\s*)?$/.exec(a))return n(r[4]),this.setHSL(parseFloat(r[1])/360,parseFloat(r[2])/100,parseFloat(r[3])/100,e);break;default:console.warn("THREE.Color: Unknown color model "+t)}}else if(i=/^\#([A-Fa-f\d]+)$/.exec(t)){const n=i[1],r=n.length;if(3===r)return this.setRGB(parseInt(n.charAt(0),16)/15,parseInt(n.charAt(1),16)/15,parseInt(n.charAt(2),16)/15,e);if(6===r)return this.setHex(parseInt(n,16),e);console.warn("THREE.Color: Invalid hex color "+t)}else if(t&&t.length>0)return this.setColorName(t,e);return this}setColorName(t,e=Gt){const n=si[t.toLowerCase()];return void 0!==n?this.setHex(n,e):console.warn("THREE.Color: Unknown color "+t),this}clone(){return new this.constructor(this.r,this.g,this.b)}copy(t){return this.r=t.r,this.g=t.g,this.b=t.b,this}copySRGBToLinear(t){return this.r=Ce(t.r),this.g=Ce(t.g),this.b=Ce(t.b),this}copyLinearToSRGB(t){return this.r=Le(t.r),this.g=Le(t.g),this.b=Le(t.b),this}convertSRGBToLinear(){return this.copySRGBToLinear(this),this}convertLinearToSRGB(){return this.copyLinearToSRGB(this),this}getHex(t=Gt){return Re.fromWorkingColorSpace(hi.copy(this),t),65536*Math.round(ae(255*hi.r,0,255))+256*Math.round(ae(255*hi.g,0,255))+Math.round(ae(255*hi.b,0,255))}getHexString(t=Gt){return("000000"+this.getHex(t).toString(16)).slice(-6)}getHSL(t,e=Re.workingColorSpace){Re.fromWorkingColorSpace(hi.copy(this),e);const n=hi.r,i=hi.g,r=hi.b,s=Math.max(n,i,r),a=Math.min(n,i,r);let o,l;const c=(a+s)/2;if(a===s)o=0,l=0;else{const t=s-a;switch(l=c<=.5?t/(s+a):t/(2-s-a),s){case n:o=(i-r)/t+(i0!=t>0&&this.version++,this._alphaTest=t}onBuild(){}onBeforeRender(){}onBeforeCompile(){}customProgramCacheKey(){return this.onBeforeCompile.toString()}setValues(t){if(void 0!==t)for(const e in t){const n=t[e];if(void 0===n){console.warn(`THREE.Material: parameter '${e}' has value of undefined.`);continue}const i=this[e];void 0!==i?i&&i.isColor?i.set(n):i&&i.isVector3&&n&&n.isVector3?i.copy(n):this[e]=n:console.warn(`THREE.Material: '${e}' is not a property of THREE.${this.type}.`)}}toJSON(t){const e=void 0===t||"string"==typeof t;e&&(t={textures:{},images:{}});const n={metadata:{version:4.6,type:"Material",generator:"Material.toJSON"}};function i(t){const e=[];for(const n in t){const i=t[n];delete i.metadata,e.push(i)}return e}if(n.uuid=this.uuid,n.type=this.type,""!==this.name&&(n.name=this.name),this.color&&this.color.isColor&&(n.color=this.color.getHex()),void 0!==this.roughness&&(n.roughness=this.roughness),void 0!==this.metalness&&(n.metalness=this.metalness),void 0!==this.sheen&&(n.sheen=this.sheen),this.sheenColor&&this.sheenColor.isColor&&(n.sheenColor=this.sheenColor.getHex()),void 0!==this.sheenRoughness&&(n.sheenRoughness=this.sheenRoughness),this.emissive&&this.emissive.isColor&&(n.emissive=this.emissive.getHex()),this.emissiveIntensity&&1!==this.emissiveIntensity&&(n.emissiveIntensity=this.emissiveIntensity),this.specular&&this.specular.isColor&&(n.specular=this.specular.getHex()),void 0!==this.specularIntensity&&(n.specularIntensity=this.specularIntensity),this.specularColor&&this.specularColor.isColor&&(n.specularColor=this.specularColor.getHex()),void 0!==this.shininess&&(n.shininess=this.shininess),void 0!==this.clearcoat&&(n.clearcoat=this.clearcoat),void 0!==this.clearcoatRoughness&&(n.clearcoatRoughness=this.clearcoatRoughness),this.clearcoatMap&&this.clearcoatMap.isTexture&&(n.clearcoatMap=this.clearcoatMap.toJSON(t).uuid),this.clearcoatRoughnessMap&&this.clearcoatRoughnessMap.isTexture&&(n.clearcoatRoughnessMap=this.clearcoatRoughnessMap.toJSON(t).uuid),this.clearcoatNormalMap&&this.clearcoatNormalMap.isTexture&&(n.clearcoatNormalMap=this.clearcoatNormalMap.toJSON(t).uuid,n.clearcoatNormalScale=this.clearcoatNormalScale.toArray()),void 0!==this.iridescence&&(n.iridescence=this.iridescence),void 0!==this.iridescenceIOR&&(n.iridescenceIOR=this.iridescenceIOR),void 0!==this.iridescenceThicknessRange&&(n.iridescenceThicknessRange=this.iridescenceThicknessRange),this.iridescenceMap&&this.iridescenceMap.isTexture&&(n.iridescenceMap=this.iridescenceMap.toJSON(t).uuid),this.iridescenceThicknessMap&&this.iridescenceThicknessMap.isTexture&&(n.iridescenceThicknessMap=this.iridescenceThicknessMap.toJSON(t).uuid),void 0!==this.anisotropy&&(n.anisotropy=this.anisotropy),void 0!==this.anisotropyRotation&&(n.anisotropyRotation=this.anisotropyRotation),this.anisotropyMap&&this.anisotropyMap.isTexture&&(n.anisotropyMap=this.anisotropyMap.toJSON(t).uuid),this.map&&this.map.isTexture&&(n.map=this.map.toJSON(t).uuid),this.matcap&&this.matcap.isTexture&&(n.matcap=this.matcap.toJSON(t).uuid),this.alphaMap&&this.alphaMap.isTexture&&(n.alphaMap=this.alphaMap.toJSON(t).uuid),this.lightMap&&this.lightMap.isTexture&&(n.lightMap=this.lightMap.toJSON(t).uuid,n.lightMapIntensity=this.lightMapIntensity),this.aoMap&&this.aoMap.isTexture&&(n.aoMap=this.aoMap.toJSON(t).uuid,n.aoMapIntensity=this.aoMapIntensity),this.bumpMap&&this.bumpMap.isTexture&&(n.bumpMap=this.bumpMap.toJSON(t).uuid,n.bumpScale=this.bumpScale),this.normalMap&&this.normalMap.isTexture&&(n.normalMap=this.normalMap.toJSON(t).uuid,n.normalMapType=this.normalMapType,n.normalScale=this.normalScale.toArray()),this.displacementMap&&this.displacementMap.isTexture&&(n.displacementMap=this.displacementMap.toJSON(t).uuid,n.displacementScale=this.displacementScale,n.displacementBias=this.displacementBias),this.roughnessMap&&this.roughnessMap.isTexture&&(n.roughnessMap=this.roughnessMap.toJSON(t).uuid),this.metalnessMap&&this.metalnessMap.isTexture&&(n.metalnessMap=this.metalnessMap.toJSON(t).uuid),this.emissiveMap&&this.emissiveMap.isTexture&&(n.emissiveMap=this.emissiveMap.toJSON(t).uuid),this.specularMap&&this.specularMap.isTexture&&(n.specularMap=this.specularMap.toJSON(t).uuid),this.specularIntensityMap&&this.specularIntensityMap.isTexture&&(n.specularIntensityMap=this.specularIntensityMap.toJSON(t).uuid),this.specularColorMap&&this.specularColorMap.isTexture&&(n.specularColorMap=this.specularColorMap.toJSON(t).uuid),this.envMap&&this.envMap.isTexture&&(n.envMap=this.envMap.toJSON(t).uuid,void 0!==this.combine&&(n.combine=this.combine)),void 0!==this.envMapIntensity&&(n.envMapIntensity=this.envMapIntensity),void 0!==this.reflectivity&&(n.reflectivity=this.reflectivity),void 0!==this.refractionRatio&&(n.refractionRatio=this.refractionRatio),this.gradientMap&&this.gradientMap.isTexture&&(n.gradientMap=this.gradientMap.toJSON(t).uuid),void 0!==this.transmission&&(n.transmission=this.transmission),this.transmissionMap&&this.transmissionMap.isTexture&&(n.transmissionMap=this.transmissionMap.toJSON(t).uuid),void 0!==this.thickness&&(n.thickness=this.thickness),this.thicknessMap&&this.thicknessMap.isTexture&&(n.thicknessMap=this.thicknessMap.toJSON(t).uuid),void 0!==this.attenuationDistance&&this.attenuationDistance!==1/0&&(n.attenuationDistance=this.attenuationDistance),void 0!==this.attenuationColor&&(n.attenuationColor=this.attenuationColor.getHex()),void 0!==this.size&&(n.size=this.size),null!==this.shadowSide&&(n.shadowSide=this.shadowSide),void 0!==this.sizeAttenuation&&(n.sizeAttenuation=this.sizeAttenuation),1!==this.blending&&(n.blending=this.blending),this.side!==s&&(n.side=this.side),!0===this.vertexColors&&(n.vertexColors=!0),this.opacity<1&&(n.opacity=this.opacity),!0===this.transparent&&(n.transparent=!0),this.blendSrc!==l&&(n.blendSrc=this.blendSrc),this.blendDst!==c&&(n.blendDst=this.blendDst),this.blendEquation!==o&&(n.blendEquation=this.blendEquation),null!==this.blendSrcAlpha&&(n.blendSrcAlpha=this.blendSrcAlpha),null!==this.blendDstAlpha&&(n.blendDstAlpha=this.blendDstAlpha),null!==this.blendEquationAlpha&&(n.blendEquationAlpha=this.blendEquationAlpha),this.blendColor&&this.blendColor.isColor&&(n.blendColor=this.blendColor.getHex()),0!==this.blendAlpha&&(n.blendAlpha=this.blendAlpha),3!==this.depthFunc&&(n.depthFunc=this.depthFunc),!1===this.depthTest&&(n.depthTest=this.depthTest),!1===this.depthWrite&&(n.depthWrite=this.depthWrite),!1===this.colorWrite&&(n.colorWrite=this.colorWrite),255!==this.stencilWriteMask&&(n.stencilWriteMask=this.stencilWriteMask),519!==this.stencilFunc&&(n.stencilFunc=this.stencilFunc),0!==this.stencilRef&&(n.stencilRef=this.stencilRef),255!==this.stencilFuncMask&&(n.stencilFuncMask=this.stencilFuncMask),this.stencilFail!==Yt&&(n.stencilFail=this.stencilFail),this.stencilZFail!==Yt&&(n.stencilZFail=this.stencilZFail),this.stencilZPass!==Yt&&(n.stencilZPass=this.stencilZPass),!0===this.stencilWrite&&(n.stencilWrite=this.stencilWrite),void 0!==this.rotation&&0!==this.rotation&&(n.rotation=this.rotation),!0===this.polygonOffset&&(n.polygonOffset=!0),0!==this.polygonOffsetFactor&&(n.polygonOffsetFactor=this.polygonOffsetFactor),0!==this.polygonOffsetUnits&&(n.polygonOffsetUnits=this.polygonOffsetUnits),void 0!==this.linewidth&&1!==this.linewidth&&(n.linewidth=this.linewidth),void 0!==this.dashSize&&(n.dashSize=this.dashSize),void 0!==this.gapSize&&(n.gapSize=this.gapSize),void 0!==this.scale&&(n.scale=this.scale),!0===this.dithering&&(n.dithering=!0),this.alphaTest>0&&(n.alphaTest=this.alphaTest),!0===this.alphaHash&&(n.alphaHash=!0),!0===this.alphaToCoverage&&(n.alphaToCoverage=!0),!0===this.premultipliedAlpha&&(n.premultipliedAlpha=!0),!0===this.forceSinglePass&&(n.forceSinglePass=!0),!0===this.wireframe&&(n.wireframe=!0),this.wireframeLinewidth>1&&(n.wireframeLinewidth=this.wireframeLinewidth),"round"!==this.wireframeLinecap&&(n.wireframeLinecap=this.wireframeLinecap),"round"!==this.wireframeLinejoin&&(n.wireframeLinejoin=this.wireframeLinejoin),!0===this.flatShading&&(n.flatShading=!0),!1===this.visible&&(n.visible=!1),!1===this.toneMapped&&(n.toneMapped=!1),!1===this.fog&&(n.fog=!1),Object.keys(this.userData).length>0&&(n.userData=this.userData),e){const e=i(t.textures),r=i(t.images);e.length>0&&(n.textures=e),r.length>0&&(n.images=r)}return n}clone(){return(new this.constructor).copy(this)}copy(t){this.name=t.name,this.blending=t.blending,this.side=t.side,this.vertexColors=t.vertexColors,this.opacity=t.opacity,this.transparent=t.transparent,this.blendSrc=t.blendSrc,this.blendDst=t.blendDst,this.blendEquation=t.blendEquation,this.blendSrcAlpha=t.blendSrcAlpha,this.blendDstAlpha=t.blendDstAlpha,this.blendEquationAlpha=t.blendEquationAlpha,this.blendColor.copy(t.blendColor),this.blendAlpha=t.blendAlpha,this.depthFunc=t.depthFunc,this.depthTest=t.depthTest,this.depthWrite=t.depthWrite,this.stencilWriteMask=t.stencilWriteMask,this.stencilFunc=t.stencilFunc,this.stencilRef=t.stencilRef,this.stencilFuncMask=t.stencilFuncMask,this.stencilFail=t.stencilFail,this.stencilZFail=t.stencilZFail,this.stencilZPass=t.stencilZPass,this.stencilWrite=t.stencilWrite;const e=t.clippingPlanes;let n=null;if(null!==e){const t=e.length;n=new Array(t);for(let i=0;i!==t;++i)n[i]=e[i].clone()}return this.clippingPlanes=n,this.clipIntersection=t.clipIntersection,this.clipShadows=t.clipShadows,this.shadowSide=t.shadowSide,this.colorWrite=t.colorWrite,this.precision=t.precision,this.polygonOffset=t.polygonOffset,this.polygonOffsetFactor=t.polygonOffsetFactor,this.polygonOffsetUnits=t.polygonOffsetUnits,this.dithering=t.dithering,this.alphaTest=t.alphaTest,this.alphaHash=t.alphaHash,this.alphaToCoverage=t.alphaToCoverage,this.premultipliedAlpha=t.premultipliedAlpha,this.forceSinglePass=t.forceSinglePass,this.visible=t.visible,this.toneMapped=t.toneMapped,this.userData=JSON.parse(JSON.stringify(t.userData)),this}dispose(){this.dispatchEvent({type:"dispose"})}set needsUpdate(t){!0===t&&this.version++}}class pi extends di{constructor(t){super(),this.isMeshBasicMaterial=!0,this.type="MeshBasicMaterial",this.color=new ci(16777215),this.map=null,this.lightMap=null,this.lightMapIntensity=1,this.aoMap=null,this.aoMapIntensity=1,this.specularMap=null,this.alphaMap=null,this.envMap=null,this.combine=h,this.reflectivity=1,this.refractionRatio=.98,this.wireframe=!1,this.wireframeLinewidth=1,this.wireframeLinecap="round",this.wireframeLinejoin="round",this.fog=!0,this.setValues(t)}copy(t){return super.copy(t),this.color.copy(t.color),this.map=t.map,this.lightMap=t.lightMap,this.lightMapIntensity=t.lightMapIntensity,this.aoMap=t.aoMap,this.aoMapIntensity=t.aoMapIntensity,this.specularMap=t.specularMap,this.alphaMap=t.alphaMap,this.envMap=t.envMap,this.combine=t.combine,this.reflectivity=t.reflectivity,this.refractionRatio=t.refractionRatio,this.wireframe=t.wireframe,this.wireframeLinewidth=t.wireframeLinewidth,this.wireframeLinecap=t.wireframeLinecap,this.wireframeLinejoin=t.wireframeLinejoin,this.fog=t.fog,this}}const mi=fi();function fi(){const t=new ArrayBuffer(4),e=new Float32Array(t),n=new Uint32Array(t),i=new Uint32Array(512),r=new Uint32Array(512);for(let t=0;t<256;++t){const e=t-127;e<-27?(i[t]=0,i[256|t]=32768,r[t]=24,r[256|t]=24):e<-14?(i[t]=1024>>-e-14,i[256|t]=1024>>-e-14|32768,r[t]=-e-1,r[256|t]=-e-1):e<=15?(i[t]=e+15<<10,i[256|t]=e+15<<10|32768,r[t]=13,r[256|t]=13):e<128?(i[t]=31744,i[256|t]=64512,r[t]=24,r[256|t]=24):(i[t]=31744,i[256|t]=64512,r[t]=13,r[256|t]=13)}const s=new Uint32Array(2048),a=new Uint32Array(64),o=new Uint32Array(64);for(let t=1;t<1024;++t){let e=t<<13,n=0;for(;0==(8388608&e);)e<<=1,n-=8388608;e&=-8388609,n+=947912704,s[t]=e|n}for(let t=1024;t<2048;++t)s[t]=939524096+(t-1024<<13);for(let t=1;t<31;++t)a[t]=t<<23;a[31]=1199570944,a[32]=2147483648;for(let t=33;t<63;++t)a[t]=2147483648+(t-32<<23);a[63]=3347054592;for(let t=1;t<64;++t)32!==t&&(o[t]=1024);return{floatView:e,uint32View:n,baseTable:i,shiftTable:r,mantissaTable:s,exponentTable:a,offsetTable:o}}function gi(t){Math.abs(t)>65504&&console.warn("THREE.DataUtils.toHalfFloat(): Value out of range."),t=ae(t,-65504,65504),mi.floatView[0]=t;const e=mi.uint32View[0],n=e>>23&511;return mi.baseTable[n]+((8388607&e)>>mi.shiftTable[n])}function _i(t){const e=t>>10;return mi.uint32View[0]=mi.mantissaTable[mi.offsetTable[e]+(1023&t)]+mi.exponentTable[e],mi.floatView[0]}const vi={toHalfFloat:gi,fromHalfFloat:_i},xi=new We,yi=new me;class Mi{constructor(t,e,n=!1){if(Array.isArray(t))throw new TypeError("THREE.BufferAttribute: array should be a Typed Array.");this.isBufferAttribute=!0,this.name="",this.array=t,this.itemSize=e,this.count=void 0!==t?t.length/e:0,this.normalized=n,this.usage=Zt,this._updateRange={offset:0,count:-1},this.updateRanges=[],this.gpuType=H,this.version=0}onUploadCallback(){}set needsUpdate(t){!0===t&&this.version++}get updateRange(){return console.warn("THREE.BufferAttribute: updateRange() is deprecated and will be removed in r169. Use addUpdateRange() instead."),this._updateRange}setUsage(t){return this.usage=t,this}addUpdateRange(t,e){this.updateRanges.push({start:t,count:e})}clearUpdateRanges(){this.updateRanges.length=0}copy(t){return this.name=t.name,this.array=new t.array.constructor(t.array),this.itemSize=t.itemSize,this.count=t.count,this.normalized=t.normalized,this.usage=t.usage,this.gpuType=t.gpuType,this}copyAt(t,e,n){t*=this.itemSize,n*=e.itemSize;for(let i=0,r=this.itemSize;i0&&(t.userData=this.userData),void 0!==this.parameters){const e=this.parameters;for(const n in e)void 0!==e[n]&&(t[n]=e[n]);return t}t.data={attributes:{}};const e=this.index;null!==e&&(t.data.index={type:e.array.constructor.name,array:Array.prototype.slice.call(e.array)});const n=this.attributes;for(const e in n){const i=n[e];t.data.attributes[e]=i.toJSON(t.data)}const i={};let r=!1;for(const e in this.morphAttributes){const n=this.morphAttributes[e],s=[];for(let e=0,i=n.length;e0&&(i[e]=s,r=!0)}r&&(t.data.morphAttributes=i,t.data.morphTargetsRelative=this.morphTargetsRelative);const s=this.groups;s.length>0&&(t.data.groups=JSON.parse(JSON.stringify(s)));const a=this.boundingSphere;return null!==a&&(t.data.boundingSphere={center:a.center.toArray(),radius:a.radius}),t}clone(){return(new this.constructor).copy(this)}copy(t){this.index=null,this.attributes={},this.morphAttributes={},this.groups=[],this.boundingBox=null,this.boundingSphere=null;const e={};this.name=t.name;const n=t.index;null!==n&&this.setIndex(n.clone(e));const i=t.attributes;for(const t in i){const n=i[t];this.setAttribute(t,n.clone(e))}const r=t.morphAttributes;for(const t in r){const n=[],i=r[t];for(let t=0,r=i.length;t0){const n=t[e[0]];if(void 0!==n){this.morphTargetInfluences=[],this.morphTargetDictionary={};for(let t=0,e=n.length;t(t.far-t.near)**2)return}Ui.copy(r).invert(),Di.copy(t.ray).applyMatrix4(Ui),null!==n.boundingBox&&!1===Di.intersectsBox(n.boundingBox)||this._computeIntersections(t,e,Di)}}_computeIntersections(t,e,n){let i;const r=this.geometry,s=this.material,a=r.index,o=r.attributes.position,l=r.attributes.uv,c=r.attributes.uv1,h=r.attributes.normal,u=r.groups,d=r.drawRange;if(null!==a)if(Array.isArray(s))for(let r=0,o=u.length;rn.far?null:{distance:u,point:Zi.clone(),object:t}}(t,e,n,i,Fi,Bi,zi,Yi);if(d){r&&(Vi.fromBufferAttribute(r,c),ki.fromBufferAttribute(r,h),Wi.fromBufferAttribute(r,u),d.uv=ri.getInterpolation(Yi,Fi,Bi,zi,Vi,ki,Wi,new me)),o&&(Vi.fromBufferAttribute(o,c),ki.fromBufferAttribute(o,h),Wi.fromBufferAttribute(o,u),d.uv1=ri.getInterpolation(Yi,Fi,Bi,zi,Vi,ki,Wi,new me),d.uv2=d.uv1),l&&(Xi.fromBufferAttribute(l,c),ji.fromBufferAttribute(l,h),qi.fromBufferAttribute(l,u),d.normal=ri.getInterpolation(Yi,Fi,Bi,zi,Xi,ji,qi,new We),d.normal.dot(i.direction)>0&&d.normal.multiplyScalar(-1));const t={a:c,b:h,c:u,normal:new We,materialIndex:0};ri.getNormal(Fi,Bi,zi,t.normal),d.face=t}return d}class $i extends Ii{constructor(t=1,e=1,n=1,i=1,r=1,s=1){super(),this.type="BoxGeometry",this.parameters={width:t,height:e,depth:n,widthSegments:i,heightSegments:r,depthSegments:s};const a=this;i=Math.floor(i),r=Math.floor(r),s=Math.floor(s);const o=[],l=[],c=[],h=[];let u=0,d=0;function p(t,e,n,i,r,s,p,m,f,g,_){const v=s/f,x=p/g,y=s/2,M=p/2,S=m/2,b=f+1,T=g+1;let E=0,w=0;const A=new We;for(let s=0;s0?1:-1,c.push(A.x,A.y,A.z),h.push(o/f),h.push(1-s/g),E+=1}}for(let t=0;t0&&(e.defines=this.defines),e.vertexShader=this.vertexShader,e.fragmentShader=this.fragmentShader,e.lights=this.lights,e.clipping=this.clipping;const n={};for(const t in this.extensions)!0===this.extensions[t]&&(n[t]=!0);return Object.keys(n).length>0&&(e.extensions=n),e}}class rr extends jn{constructor(){super(),this.isCamera=!0,this.type="Camera",this.matrixWorldInverse=new Mn,this.projectionMatrix=new Mn,this.projectionMatrixInverse=new Mn,this.coordinateSystem=$t}copy(t,e){return super.copy(t,e),this.matrixWorldInverse.copy(t.matrixWorldInverse),this.projectionMatrix.copy(t.projectionMatrix),this.projectionMatrixInverse.copy(t.projectionMatrixInverse),this.coordinateSystem=t.coordinateSystem,this}getWorldDirection(t){return super.getWorldDirection(t).negate()}updateMatrixWorld(t){super.updateMatrixWorld(t),this.matrixWorldInverse.copy(this.matrixWorld).invert()}updateWorldMatrix(t,e){super.updateWorldMatrix(t,e),this.matrixWorldInverse.copy(this.matrixWorld).invert()}clone(){return(new this.constructor).copy(this)}}class sr extends rr{constructor(t=50,e=1,n=.1,i=2e3){super(),this.isPerspectiveCamera=!0,this.type="PerspectiveCamera",this.fov=t,this.zoom=1,this.near=n,this.far=i,this.focus=10,this.aspect=e,this.view=null,this.filmGauge=35,this.filmOffset=0,this.updateProjectionMatrix()}copy(t,e){return super.copy(t,e),this.fov=t.fov,this.zoom=t.zoom,this.near=t.near,this.far=t.far,this.focus=t.focus,this.aspect=t.aspect,this.view=null===t.view?null:Object.assign({},t.view),this.filmGauge=t.filmGauge,this.filmOffset=t.filmOffset,this}setFocalLength(t){const e=.5*this.getFilmHeight()/t;this.fov=2*re*Math.atan(e),this.updateProjectionMatrix()}getFocalLength(){const t=Math.tan(.5*ie*this.fov);return.5*this.getFilmHeight()/t}getEffectiveFOV(){return 2*re*Math.atan(Math.tan(.5*ie*this.fov)/this.zoom)}getFilmWidth(){return this.filmGauge*Math.min(this.aspect,1)}getFilmHeight(){return this.filmGauge/Math.max(this.aspect,1)}setViewOffset(t,e,n,i,r,s){this.aspect=t/e,null===this.view&&(this.view={enabled:!0,fullWidth:1,fullHeight:1,offsetX:0,offsetY:0,width:1,height:1}),this.view.enabled=!0,this.view.fullWidth=t,this.view.fullHeight=e,this.view.offsetX=n,this.view.offsetY=i,this.view.width=r,this.view.height=s,this.updateProjectionMatrix()}clearViewOffset(){null!==this.view&&(this.view.enabled=!1),this.updateProjectionMatrix()}updateProjectionMatrix(){const t=this.near;let e=t*Math.tan(.5*ie*this.fov)/this.zoom,n=2*e,i=this.aspect*n,r=-.5*i;const s=this.view;if(null!==this.view&&this.view.enabled){const t=s.fullWidth,a=s.fullHeight;r+=s.offsetX*i/t,e-=s.offsetY*n/a,i*=s.width/t,n*=s.height/a}const a=this.filmOffset;0!==a&&(r+=t*a/this.getFilmWidth()),this.projectionMatrix.makePerspective(r,r+i,e,e-n,t,this.far,this.coordinateSystem),this.projectionMatrixInverse.copy(this.projectionMatrix).invert()}toJSON(t){const e=super.toJSON(t);return e.object.fov=this.fov,e.object.zoom=this.zoom,e.object.near=this.near,e.object.far=this.far,e.object.focus=this.focus,e.object.aspect=this.aspect,null!==this.view&&(e.object.view=Object.assign({},this.view)),e.object.filmGauge=this.filmGauge,e.object.filmOffset=this.filmOffset,e}}const ar=-90;class or extends jn{constructor(t,e,n){super(),this.type="CubeCamera",this.renderTarget=n,this.coordinateSystem=null,this.activeMipmapLevel=0;const i=new sr(ar,1,t,e);i.layers=this.layers,this.add(i);const r=new sr(ar,1,t,e);r.layers=this.layers,this.add(r);const s=new sr(ar,1,t,e);s.layers=this.layers,this.add(s);const a=new sr(ar,1,t,e);a.layers=this.layers,this.add(a);const o=new sr(ar,1,t,e);o.layers=this.layers,this.add(o);const l=new sr(ar,1,t,e);l.layers=this.layers,this.add(l)}updateCoordinateSystem(){const t=this.coordinateSystem,e=this.children.concat(),[n,i,r,s,a,o]=e;for(const t of e)this.remove(t);if(t===$t)n.up.set(0,1,0),n.lookAt(1,0,0),i.up.set(0,1,0),i.lookAt(-1,0,0),r.up.set(0,0,-1),r.lookAt(0,1,0),s.up.set(0,0,1),s.lookAt(0,-1,0),a.up.set(0,1,0),a.lookAt(0,0,1),o.up.set(0,1,0),o.lookAt(0,0,-1);else{if(t!==Qt)throw new Error("THREE.CubeCamera.updateCoordinateSystem(): Invalid coordinate system: "+t);n.up.set(0,-1,0),n.lookAt(-1,0,0),i.up.set(0,-1,0),i.lookAt(1,0,0),r.up.set(0,0,1),r.lookAt(0,1,0),s.up.set(0,0,-1),s.lookAt(0,-1,0),a.up.set(0,-1,0),a.lookAt(0,0,1),o.up.set(0,-1,0),o.lookAt(0,0,-1)}for(const t of e)this.add(t),t.updateMatrixWorld()}update(t,e){null===this.parent&&this.updateMatrixWorld();const{renderTarget:n,activeMipmapLevel:i}=this;this.coordinateSystem!==t.coordinateSystem&&(this.coordinateSystem=t.coordinateSystem,this.updateCoordinateSystem());const[r,s,a,o,l,c]=this.children,h=t.getRenderTarget(),u=t.getActiveCubeFace(),d=t.getActiveMipmapLevel(),p=t.xr.enabled;t.xr.enabled=!1;const m=n.texture.generateMipmaps;n.texture.generateMipmaps=!1,t.setRenderTarget(n,0,i),t.render(e,r),t.setRenderTarget(n,1,i),t.render(e,s),t.setRenderTarget(n,2,i),t.render(e,a),t.setRenderTarget(n,3,i),t.render(e,o),t.setRenderTarget(n,4,i),t.render(e,l),n.texture.generateMipmaps=m,t.setRenderTarget(n,5,i),t.render(e,c),t.setRenderTarget(h,u,d),t.xr.enabled=p,n.texture.needsPMREMUpdate=!0}}class lr extends Fe{constructor(t,e,n,i,r,s,a,o,l,c){super(t=void 0!==t?t:[],e=void 0!==e?e:b,n,i,r,s,a,o,l,c),this.isCubeTexture=!0,this.flipY=!1}get images(){return this.image}set images(t){this.image=t}}class cr extends Ge{constructor(t=1,e={}){super(t,t,e),this.isWebGLCubeRenderTarget=!0;const n={width:t,height:t,depth:1},i=[n,n,n,n,n,n];void 0!==e.encoding&&(be("THREE.WebGLCubeRenderTarget: option.encoding has been replaced by option.colorSpace."),e.colorSpace=e.encoding===Bt?Gt:zt),this.texture=new lr(i,e.mapping,e.wrapS,e.wrapT,e.magFilter,e.minFilter,e.format,e.type,e.anisotropy,e.colorSpace),this.texture.isRenderTargetTexture=!0,this.texture.generateMipmaps=void 0!==e.generateMipmaps&&e.generateMipmaps,this.texture.minFilter=void 0!==e.minFilter?e.minFilter:D}fromEquirectangularTexture(t,e){this.texture.type=e.type,this.texture.colorSpace=e.colorSpace,this.texture.generateMipmaps=e.generateMipmaps,this.texture.minFilter=e.minFilter,this.texture.magFilter=e.magFilter;const n={uniforms:{tEquirect:{value:null}},vertexShader:"\n\n\t\t\t\tvarying vec3 vWorldDirection;\n\n\t\t\t\tvec3 transformDirection( in vec3 dir, in mat4 matrix ) {\n\n\t\t\t\t\treturn normalize( ( matrix * vec4( dir, 0.0 ) ).xyz );\n\n\t\t\t\t}\n\n\t\t\t\tvoid main() {\n\n\t\t\t\t\tvWorldDirection = transformDirection( position, modelMatrix );\n\n\t\t\t\t\t#include \n\t\t\t\t\t#include \n\n\t\t\t\t}\n\t\t\t",fragmentShader:"\n\n\t\t\t\tuniform sampler2D tEquirect;\n\n\t\t\t\tvarying vec3 vWorldDirection;\n\n\t\t\t\t#include \n\n\t\t\t\tvoid main() {\n\n\t\t\t\t\tvec3 direction = normalize( vWorldDirection );\n\n\t\t\t\t\tvec2 sampleUV = equirectUv( direction );\n\n\t\t\t\t\tgl_FragColor = texture2D( tEquirect, sampleUV );\n\n\t\t\t\t}\n\t\t\t"},i=new $i(5,5,5),r=new ir({name:"CubemapFromEquirect",uniforms:Qi(n.uniforms),vertexShader:n.vertexShader,fragmentShader:n.fragmentShader,side:a,blending:0});r.uniforms.tEquirect.value=e;const s=new Ji(i,r),o=e.minFilter;e.minFilter===O&&(e.minFilter=D);return new or(1,10,this).update(t,s),e.minFilter=o,s.geometry.dispose(),s.material.dispose(),this}clear(t,e,n,i){const r=t.getRenderTarget();for(let r=0;r<6;r++)t.setRenderTarget(this,r),t.clear(e,n,i);t.setRenderTarget(r)}}const hr=new We,ur=new We,dr=new fe;class pr{constructor(t=new We(1,0,0),e=0){this.isPlane=!0,this.normal=t,this.constant=e}set(t,e){return this.normal.copy(t),this.constant=e,this}setComponents(t,e,n,i){return this.normal.set(t,e,n),this.constant=i,this}setFromNormalAndCoplanarPoint(t,e){return this.normal.copy(t),this.constant=-e.dot(this.normal),this}setFromCoplanarPoints(t,e,n){const i=hr.subVectors(n,e).cross(ur.subVectors(t,e)).normalize();return this.setFromNormalAndCoplanarPoint(i,t),this}copy(t){return this.normal.copy(t.normal),this.constant=t.constant,this}normalize(){const t=1/this.normal.length();return this.normal.multiplyScalar(t),this.constant*=t,this}negate(){return this.constant*=-1,this.normal.negate(),this}distanceToPoint(t){return this.normal.dot(t)+this.constant}distanceToSphere(t){return this.distanceToPoint(t.center)-t.radius}projectPoint(t,e){return e.copy(t).addScaledVector(this.normal,-this.distanceToPoint(t))}intersectLine(t,e){const n=t.delta(hr),i=this.normal.dot(n);if(0===i)return 0===this.distanceToPoint(t.start)?e.copy(t.start):null;const r=-(t.start.dot(this.normal)+this.constant)/i;return r<0||r>1?null:e.copy(t.start).addScaledVector(n,r)}intersectsLine(t){const e=this.distanceToPoint(t.start),n=this.distanceToPoint(t.end);return e<0&&n>0||n<0&&e>0}intersectsBox(t){return t.intersectsPlane(this)}intersectsSphere(t){return t.intersectsPlane(this)}coplanarPoint(t){return t.copy(this.normal).multiplyScalar(-this.constant)}applyMatrix4(t,e){const n=e||dr.getNormalMatrix(t),i=this.coplanarPoint(hr).applyMatrix4(t),r=this.normal.applyMatrix3(n).normalize();return this.constant=-i.dot(r),this}translate(t){return this.constant-=t.dot(this.normal),this}equals(t){return t.normal.equals(this.normal)&&t.constant===this.constant}clone(){return(new this.constructor).copy(this)}}const mr=new dn,fr=new We;class gr{constructor(t=new pr,e=new pr,n=new pr,i=new pr,r=new pr,s=new pr){this.planes=[t,e,n,i,r,s]}set(t,e,n,i,r,s){const a=this.planes;return a[0].copy(t),a[1].copy(e),a[2].copy(n),a[3].copy(i),a[4].copy(r),a[5].copy(s),this}copy(t){const e=this.planes;for(let n=0;n<6;n++)e[n].copy(t.planes[n]);return this}setFromProjectionMatrix(t,e=2e3){const n=this.planes,i=t.elements,r=i[0],s=i[1],a=i[2],o=i[3],l=i[4],c=i[5],h=i[6],u=i[7],d=i[8],p=i[9],m=i[10],f=i[11],g=i[12],_=i[13],v=i[14],x=i[15];if(n[0].setComponents(o-r,u-l,f-d,x-g).normalize(),n[1].setComponents(o+r,u+l,f+d,x+g).normalize(),n[2].setComponents(o+s,u+c,f+p,x+_).normalize(),n[3].setComponents(o-s,u-c,f-p,x-_).normalize(),n[4].setComponents(o-a,u-h,f-m,x-v).normalize(),e===$t)n[5].setComponents(o+a,u+h,f+m,x+v).normalize();else{if(e!==Qt)throw new Error("THREE.Frustum.setFromProjectionMatrix(): Invalid coordinate system: "+e);n[5].setComponents(a,h,m,v).normalize()}return this}intersectsObject(t){if(void 0!==t.boundingSphere)null===t.boundingSphere&&t.computeBoundingSphere(),mr.copy(t.boundingSphere).applyMatrix4(t.matrixWorld);else{const e=t.geometry;null===e.boundingSphere&&e.computeBoundingSphere(),mr.copy(e.boundingSphere).applyMatrix4(t.matrixWorld)}return this.intersectsSphere(mr)}intersectsSprite(t){return mr.center.set(0,0,0),mr.radius=.7071067811865476,mr.applyMatrix4(t.matrixWorld),this.intersectsSphere(mr)}intersectsSphere(t){const e=this.planes,n=t.center,i=-t.radius;for(let t=0;t<6;t++){if(e[t].distanceToPoint(n)0?t.max.x:t.min.x,fr.y=i.normal.y>0?t.max.y:t.min.y,fr.z=i.normal.z>0?t.max.z:t.min.z,i.distanceToPoint(fr)<0)return!1}return!0}containsPoint(t){const e=this.planes;for(let n=0;n<6;n++)if(e[n].distanceToPoint(t)<0)return!1;return!0}clone(){return(new this.constructor).copy(this)}}function _r(){let t=null,e=!1,n=null,i=null;function r(e,s){n(e,s),i=t.requestAnimationFrame(r)}return{start:function(){!0!==e&&null!==n&&(i=t.requestAnimationFrame(r),e=!0)},stop:function(){t.cancelAnimationFrame(i),e=!1},setAnimationLoop:function(t){n=t},setContext:function(e){t=e}}}function vr(t,e){const n=e.isWebGL2,i=new WeakMap;return{get:function(t){return t.isInterleavedBufferAttribute&&(t=t.data),i.get(t)},remove:function(e){e.isInterleavedBufferAttribute&&(e=e.data);const n=i.get(e);n&&(t.deleteBuffer(n.buffer),i.delete(e))},update:function(e,r){if(e.isGLBufferAttribute){const t=i.get(e);return void((!t||t.version 0\n\tvec4 plane;\n\t#pragma unroll_loop_start\n\tfor ( int i = 0; i < UNION_CLIPPING_PLANES; i ++ ) {\n\t\tplane = clippingPlanes[ i ];\n\t\tif ( dot( vClipPosition, plane.xyz ) > plane.w ) discard;\n\t}\n\t#pragma unroll_loop_end\n\t#if UNION_CLIPPING_PLANES < NUM_CLIPPING_PLANES\n\t\tbool clipped = true;\n\t\t#pragma unroll_loop_start\n\t\tfor ( int i = UNION_CLIPPING_PLANES; i < NUM_CLIPPING_PLANES; i ++ ) {\n\t\t\tplane = clippingPlanes[ i ];\n\t\t\tclipped = ( dot( vClipPosition, plane.xyz ) > plane.w ) && clipped;\n\t\t}\n\t\t#pragma unroll_loop_end\n\t\tif ( clipped ) discard;\n\t#endif\n#endif",clipping_planes_pars_fragment:"#if NUM_CLIPPING_PLANES > 0\n\tvarying vec3 vClipPosition;\n\tuniform vec4 clippingPlanes[ NUM_CLIPPING_PLANES ];\n#endif",clipping_planes_pars_vertex:"#if NUM_CLIPPING_PLANES > 0\n\tvarying vec3 vClipPosition;\n#endif",clipping_planes_vertex:"#if NUM_CLIPPING_PLANES > 0\n\tvClipPosition = - mvPosition.xyz;\n#endif",color_fragment:"#if defined( USE_COLOR_ALPHA )\n\tdiffuseColor *= vColor;\n#elif defined( USE_COLOR )\n\tdiffuseColor.rgb *= vColor;\n#endif",color_pars_fragment:"#if defined( USE_COLOR_ALPHA )\n\tvarying vec4 vColor;\n#elif defined( USE_COLOR )\n\tvarying vec3 vColor;\n#endif",color_pars_vertex:"#if defined( USE_COLOR_ALPHA )\n\tvarying vec4 vColor;\n#elif defined( USE_COLOR ) || defined( USE_INSTANCING_COLOR )\n\tvarying vec3 vColor;\n#endif",color_vertex:"#if defined( USE_COLOR_ALPHA )\n\tvColor = vec4( 1.0 );\n#elif defined( USE_COLOR ) || defined( USE_INSTANCING_COLOR )\n\tvColor = vec3( 1.0 );\n#endif\n#ifdef USE_COLOR\n\tvColor *= color;\n#endif\n#ifdef USE_INSTANCING_COLOR\n\tvColor.xyz *= instanceColor.xyz;\n#endif",common:"#define PI 3.141592653589793\n#define PI2 6.283185307179586\n#define PI_HALF 1.5707963267948966\n#define RECIPROCAL_PI 0.3183098861837907\n#define RECIPROCAL_PI2 0.15915494309189535\n#define EPSILON 1e-6\n#ifndef saturate\n#define saturate( a ) clamp( a, 0.0, 1.0 )\n#endif\n#define whiteComplement( a ) ( 1.0 - saturate( a ) )\nfloat pow2( const in float x ) { return x*x; }\nvec3 pow2( const in vec3 x ) { return x*x; }\nfloat pow3( const in float x ) { return x*x*x; }\nfloat pow4( const in float x ) { float x2 = x*x; return x2*x2; }\nfloat max3( const in vec3 v ) { return max( max( v.x, v.y ), v.z ); }\nfloat average( const in vec3 v ) { return dot( v, vec3( 0.3333333 ) ); }\nhighp float rand( const in vec2 uv ) {\n\tconst highp float a = 12.9898, b = 78.233, c = 43758.5453;\n\thighp float dt = dot( uv.xy, vec2( a,b ) ), sn = mod( dt, PI );\n\treturn fract( sin( sn ) * c );\n}\n#ifdef HIGH_PRECISION\n\tfloat precisionSafeLength( vec3 v ) { return length( v ); }\n#else\n\tfloat precisionSafeLength( vec3 v ) {\n\t\tfloat maxComponent = max3( abs( v ) );\n\t\treturn length( v / maxComponent ) * maxComponent;\n\t}\n#endif\nstruct IncidentLight {\n\tvec3 color;\n\tvec3 direction;\n\tbool visible;\n};\nstruct ReflectedLight {\n\tvec3 directDiffuse;\n\tvec3 directSpecular;\n\tvec3 indirectDiffuse;\n\tvec3 indirectSpecular;\n};\n#ifdef USE_ALPHAHASH\n\tvarying vec3 vPosition;\n#endif\nvec3 transformDirection( in vec3 dir, in mat4 matrix ) {\n\treturn normalize( ( matrix * vec4( dir, 0.0 ) ).xyz );\n}\nvec3 inverseTransformDirection( in vec3 dir, in mat4 matrix ) {\n\treturn normalize( ( vec4( dir, 0.0 ) * matrix ).xyz );\n}\nmat3 transposeMat3( const in mat3 m ) {\n\tmat3 tmp;\n\ttmp[ 0 ] = vec3( m[ 0 ].x, m[ 1 ].x, m[ 2 ].x );\n\ttmp[ 1 ] = vec3( m[ 0 ].y, m[ 1 ].y, m[ 2 ].y );\n\ttmp[ 2 ] = vec3( m[ 0 ].z, m[ 1 ].z, m[ 2 ].z );\n\treturn tmp;\n}\nfloat luminance( const in vec3 rgb ) {\n\tconst vec3 weights = vec3( 0.2126729, 0.7151522, 0.0721750 );\n\treturn dot( weights, rgb );\n}\nbool isPerspectiveMatrix( mat4 m ) {\n\treturn m[ 2 ][ 3 ] == - 1.0;\n}\nvec2 equirectUv( in vec3 dir ) {\n\tfloat u = atan( dir.z, dir.x ) * RECIPROCAL_PI2 + 0.5;\n\tfloat v = asin( clamp( dir.y, - 1.0, 1.0 ) ) * RECIPROCAL_PI + 0.5;\n\treturn vec2( u, v );\n}\nvec3 BRDF_Lambert( const in vec3 diffuseColor ) {\n\treturn RECIPROCAL_PI * diffuseColor;\n}\nvec3 F_Schlick( const in vec3 f0, const in float f90, const in float dotVH ) {\n\tfloat fresnel = exp2( ( - 5.55473 * dotVH - 6.98316 ) * dotVH );\n\treturn f0 * ( 1.0 - fresnel ) + ( f90 * fresnel );\n}\nfloat F_Schlick( const in float f0, const in float f90, const in float dotVH ) {\n\tfloat fresnel = exp2( ( - 5.55473 * dotVH - 6.98316 ) * dotVH );\n\treturn f0 * ( 1.0 - fresnel ) + ( f90 * fresnel );\n} // validated",cube_uv_reflection_fragment:"#ifdef ENVMAP_TYPE_CUBE_UV\n\t#define cubeUV_minMipLevel 4.0\n\t#define cubeUV_minTileSize 16.0\n\tfloat getFace( vec3 direction ) {\n\t\tvec3 absDirection = abs( direction );\n\t\tfloat face = - 1.0;\n\t\tif ( absDirection.x > absDirection.z ) {\n\t\t\tif ( absDirection.x > absDirection.y )\n\t\t\t\tface = direction.x > 0.0 ? 0.0 : 3.0;\n\t\t\telse\n\t\t\t\tface = direction.y > 0.0 ? 1.0 : 4.0;\n\t\t} else {\n\t\t\tif ( absDirection.z > absDirection.y )\n\t\t\t\tface = direction.z > 0.0 ? 2.0 : 5.0;\n\t\t\telse\n\t\t\t\tface = direction.y > 0.0 ? 1.0 : 4.0;\n\t\t}\n\t\treturn face;\n\t}\n\tvec2 getUV( vec3 direction, float face ) {\n\t\tvec2 uv;\n\t\tif ( face == 0.0 ) {\n\t\t\tuv = vec2( direction.z, direction.y ) / abs( direction.x );\n\t\t} else if ( face == 1.0 ) {\n\t\t\tuv = vec2( - direction.x, - direction.z ) / abs( direction.y );\n\t\t} else if ( face == 2.0 ) {\n\t\t\tuv = vec2( - direction.x, direction.y ) / abs( direction.z );\n\t\t} else if ( face == 3.0 ) {\n\t\t\tuv = vec2( - direction.z, direction.y ) / abs( direction.x );\n\t\t} else if ( face == 4.0 ) {\n\t\t\tuv = vec2( - direction.x, direction.z ) / abs( direction.y );\n\t\t} else {\n\t\t\tuv = vec2( direction.x, direction.y ) / abs( direction.z );\n\t\t}\n\t\treturn 0.5 * ( uv + 1.0 );\n\t}\n\tvec3 bilinearCubeUV( sampler2D envMap, vec3 direction, float mipInt ) {\n\t\tfloat face = getFace( direction );\n\t\tfloat filterInt = max( cubeUV_minMipLevel - mipInt, 0.0 );\n\t\tmipInt = max( mipInt, cubeUV_minMipLevel );\n\t\tfloat faceSize = exp2( mipInt );\n\t\thighp vec2 uv = getUV( direction, face ) * ( faceSize - 2.0 ) + 1.0;\n\t\tif ( face > 2.0 ) {\n\t\t\tuv.y += faceSize;\n\t\t\tface -= 3.0;\n\t\t}\n\t\tuv.x += face * faceSize;\n\t\tuv.x += filterInt * 3.0 * cubeUV_minTileSize;\n\t\tuv.y += 4.0 * ( exp2( CUBEUV_MAX_MIP ) - faceSize );\n\t\tuv.x *= CUBEUV_TEXEL_WIDTH;\n\t\tuv.y *= CUBEUV_TEXEL_HEIGHT;\n\t\t#ifdef texture2DGradEXT\n\t\t\treturn texture2DGradEXT( envMap, uv, vec2( 0.0 ), vec2( 0.0 ) ).rgb;\n\t\t#else\n\t\t\treturn texture2D( envMap, uv ).rgb;\n\t\t#endif\n\t}\n\t#define cubeUV_r0 1.0\n\t#define cubeUV_m0 - 2.0\n\t#define cubeUV_r1 0.8\n\t#define cubeUV_m1 - 1.0\n\t#define cubeUV_r4 0.4\n\t#define cubeUV_m4 2.0\n\t#define cubeUV_r5 0.305\n\t#define cubeUV_m5 3.0\n\t#define cubeUV_r6 0.21\n\t#define cubeUV_m6 4.0\n\tfloat roughnessToMip( float roughness ) {\n\t\tfloat mip = 0.0;\n\t\tif ( roughness >= cubeUV_r1 ) {\n\t\t\tmip = ( cubeUV_r0 - roughness ) * ( cubeUV_m1 - cubeUV_m0 ) / ( cubeUV_r0 - cubeUV_r1 ) + cubeUV_m0;\n\t\t} else if ( roughness >= cubeUV_r4 ) {\n\t\t\tmip = ( cubeUV_r1 - roughness ) * ( cubeUV_m4 - cubeUV_m1 ) / ( cubeUV_r1 - cubeUV_r4 ) + cubeUV_m1;\n\t\t} else if ( roughness >= cubeUV_r5 ) {\n\t\t\tmip = ( cubeUV_r4 - roughness ) * ( cubeUV_m5 - cubeUV_m4 ) / ( cubeUV_r4 - cubeUV_r5 ) + cubeUV_m4;\n\t\t} else if ( roughness >= cubeUV_r6 ) {\n\t\t\tmip = ( cubeUV_r5 - roughness ) * ( cubeUV_m6 - cubeUV_m5 ) / ( cubeUV_r5 - cubeUV_r6 ) + cubeUV_m5;\n\t\t} else {\n\t\t\tmip = - 2.0 * log2( 1.16 * roughness );\t\t}\n\t\treturn mip;\n\t}\n\tvec4 textureCubeUV( sampler2D envMap, vec3 sampleDir, float roughness ) {\n\t\tfloat mip = clamp( roughnessToMip( roughness ), cubeUV_m0, CUBEUV_MAX_MIP );\n\t\tfloat mipF = fract( mip );\n\t\tfloat mipInt = floor( mip );\n\t\tvec3 color0 = bilinearCubeUV( envMap, sampleDir, mipInt );\n\t\tif ( mipF == 0.0 ) {\n\t\t\treturn vec4( color0, 1.0 );\n\t\t} else {\n\t\t\tvec3 color1 = bilinearCubeUV( envMap, sampleDir, mipInt + 1.0 );\n\t\t\treturn vec4( mix( color0, color1, mipF ), 1.0 );\n\t\t}\n\t}\n#endif",defaultnormal_vertex:"vec3 transformedNormal = objectNormal;\n#ifdef USE_TANGENT\n\tvec3 transformedTangent = objectTangent;\n#endif\n#ifdef USE_BATCHING\n\tmat3 bm = mat3( batchingMatrix );\n\ttransformedNormal /= vec3( dot( bm[ 0 ], bm[ 0 ] ), dot( bm[ 1 ], bm[ 1 ] ), dot( bm[ 2 ], bm[ 2 ] ) );\n\ttransformedNormal = bm * transformedNormal;\n\t#ifdef USE_TANGENT\n\t\ttransformedTangent = bm * transformedTangent;\n\t#endif\n#endif\n#ifdef USE_INSTANCING\n\tmat3 im = mat3( instanceMatrix );\n\ttransformedNormal /= vec3( dot( im[ 0 ], im[ 0 ] ), dot( im[ 1 ], im[ 1 ] ), dot( im[ 2 ], im[ 2 ] ) );\n\ttransformedNormal = im * transformedNormal;\n\t#ifdef USE_TANGENT\n\t\ttransformedTangent = im * transformedTangent;\n\t#endif\n#endif\ntransformedNormal = normalMatrix * transformedNormal;\n#ifdef FLIP_SIDED\n\ttransformedNormal = - transformedNormal;\n#endif\n#ifdef USE_TANGENT\n\ttransformedTangent = ( modelViewMatrix * vec4( transformedTangent, 0.0 ) ).xyz;\n\t#ifdef FLIP_SIDED\n\t\ttransformedTangent = - transformedTangent;\n\t#endif\n#endif",displacementmap_pars_vertex:"#ifdef USE_DISPLACEMENTMAP\n\tuniform sampler2D displacementMap;\n\tuniform float displacementScale;\n\tuniform float displacementBias;\n#endif",displacementmap_vertex:"#ifdef USE_DISPLACEMENTMAP\n\ttransformed += normalize( objectNormal ) * ( texture2D( displacementMap, vDisplacementMapUv ).x * displacementScale + displacementBias );\n#endif",emissivemap_fragment:"#ifdef USE_EMISSIVEMAP\n\tvec4 emissiveColor = texture2D( emissiveMap, vEmissiveMapUv );\n\ttotalEmissiveRadiance *= emissiveColor.rgb;\n#endif",emissivemap_pars_fragment:"#ifdef USE_EMISSIVEMAP\n\tuniform sampler2D emissiveMap;\n#endif",colorspace_fragment:"gl_FragColor = linearToOutputTexel( gl_FragColor );",colorspace_pars_fragment:"\nconst mat3 LINEAR_SRGB_TO_LINEAR_DISPLAY_P3 = mat3(\n\tvec3( 0.8224621, 0.177538, 0.0 ),\n\tvec3( 0.0331941, 0.9668058, 0.0 ),\n\tvec3( 0.0170827, 0.0723974, 0.9105199 )\n);\nconst mat3 LINEAR_DISPLAY_P3_TO_LINEAR_SRGB = mat3(\n\tvec3( 1.2249401, - 0.2249404, 0.0 ),\n\tvec3( - 0.0420569, 1.0420571, 0.0 ),\n\tvec3( - 0.0196376, - 0.0786361, 1.0982735 )\n);\nvec4 LinearSRGBToLinearDisplayP3( in vec4 value ) {\n\treturn vec4( value.rgb * LINEAR_SRGB_TO_LINEAR_DISPLAY_P3, value.a );\n}\nvec4 LinearDisplayP3ToLinearSRGB( in vec4 value ) {\n\treturn vec4( value.rgb * LINEAR_DISPLAY_P3_TO_LINEAR_SRGB, value.a );\n}\nvec4 LinearTransferOETF( in vec4 value ) {\n\treturn value;\n}\nvec4 sRGBTransferOETF( in vec4 value ) {\n\treturn vec4( mix( pow( value.rgb, vec3( 0.41666 ) ) * 1.055 - vec3( 0.055 ), value.rgb * 12.92, vec3( lessThanEqual( value.rgb, vec3( 0.0031308 ) ) ) ), value.a );\n}\nvec4 LinearToLinear( in vec4 value ) {\n\treturn value;\n}\nvec4 LinearTosRGB( in vec4 value ) {\n\treturn sRGBTransferOETF( value );\n}",envmap_fragment:"#ifdef USE_ENVMAP\n\t#ifdef ENV_WORLDPOS\n\t\tvec3 cameraToFrag;\n\t\tif ( isOrthographic ) {\n\t\t\tcameraToFrag = normalize( vec3( - viewMatrix[ 0 ][ 2 ], - viewMatrix[ 1 ][ 2 ], - viewMatrix[ 2 ][ 2 ] ) );\n\t\t} else {\n\t\t\tcameraToFrag = normalize( vWorldPosition - cameraPosition );\n\t\t}\n\t\tvec3 worldNormal = inverseTransformDirection( normal, viewMatrix );\n\t\t#ifdef ENVMAP_MODE_REFLECTION\n\t\t\tvec3 reflectVec = reflect( cameraToFrag, worldNormal );\n\t\t#else\n\t\t\tvec3 reflectVec = refract( cameraToFrag, worldNormal, refractionRatio );\n\t\t#endif\n\t#else\n\t\tvec3 reflectVec = vReflect;\n\t#endif\n\t#ifdef ENVMAP_TYPE_CUBE\n\t\tvec4 envColor = textureCube( envMap, vec3( flipEnvMap * reflectVec.x, reflectVec.yz ) );\n\t#else\n\t\tvec4 envColor = vec4( 0.0 );\n\t#endif\n\t#ifdef ENVMAP_BLENDING_MULTIPLY\n\t\toutgoingLight = mix( outgoingLight, outgoingLight * envColor.xyz, specularStrength * reflectivity );\n\t#elif defined( ENVMAP_BLENDING_MIX )\n\t\toutgoingLight = mix( outgoingLight, envColor.xyz, specularStrength * reflectivity );\n\t#elif defined( ENVMAP_BLENDING_ADD )\n\t\toutgoingLight += envColor.xyz * specularStrength * reflectivity;\n\t#endif\n#endif",envmap_common_pars_fragment:"#ifdef USE_ENVMAP\n\tuniform float envMapIntensity;\n\tuniform float flipEnvMap;\n\t#ifdef ENVMAP_TYPE_CUBE\n\t\tuniform samplerCube envMap;\n\t#else\n\t\tuniform sampler2D envMap;\n\t#endif\n\t\n#endif",envmap_pars_fragment:"#ifdef USE_ENVMAP\n\tuniform float reflectivity;\n\t#if defined( USE_BUMPMAP ) || defined( USE_NORMALMAP ) || defined( PHONG ) || defined( LAMBERT )\n\t\t#define ENV_WORLDPOS\n\t#endif\n\t#ifdef ENV_WORLDPOS\n\t\tvarying vec3 vWorldPosition;\n\t\tuniform float refractionRatio;\n\t#else\n\t\tvarying vec3 vReflect;\n\t#endif\n#endif",envmap_pars_vertex:"#ifdef USE_ENVMAP\n\t#if defined( USE_BUMPMAP ) || defined( USE_NORMALMAP ) || defined( PHONG ) || defined( LAMBERT )\n\t\t#define ENV_WORLDPOS\n\t#endif\n\t#ifdef ENV_WORLDPOS\n\t\t\n\t\tvarying vec3 vWorldPosition;\n\t#else\n\t\tvarying vec3 vReflect;\n\t\tuniform float refractionRatio;\n\t#endif\n#endif",envmap_physical_pars_fragment:"#ifdef USE_ENVMAP\n\tvec3 getIBLIrradiance( const in vec3 normal ) {\n\t\t#ifdef ENVMAP_TYPE_CUBE_UV\n\t\t\tvec3 worldNormal = inverseTransformDirection( normal, viewMatrix );\n\t\t\tvec4 envMapColor = textureCubeUV( envMap, worldNormal, 1.0 );\n\t\t\treturn PI * envMapColor.rgb * envMapIntensity;\n\t\t#else\n\t\t\treturn vec3( 0.0 );\n\t\t#endif\n\t}\n\tvec3 getIBLRadiance( const in vec3 viewDir, const in vec3 normal, const in float roughness ) {\n\t\t#ifdef ENVMAP_TYPE_CUBE_UV\n\t\t\tvec3 reflectVec = reflect( - viewDir, normal );\n\t\t\treflectVec = normalize( mix( reflectVec, normal, roughness * roughness) );\n\t\t\treflectVec = inverseTransformDirection( reflectVec, viewMatrix );\n\t\t\tvec4 envMapColor = textureCubeUV( envMap, reflectVec, roughness );\n\t\t\treturn envMapColor.rgb * envMapIntensity;\n\t\t#else\n\t\t\treturn vec3( 0.0 );\n\t\t#endif\n\t}\n\t#ifdef USE_ANISOTROPY\n\t\tvec3 getIBLAnisotropyRadiance( const in vec3 viewDir, const in vec3 normal, const in float roughness, const in vec3 bitangent, const in float anisotropy ) {\n\t\t\t#ifdef ENVMAP_TYPE_CUBE_UV\n\t\t\t\tvec3 bentNormal = cross( bitangent, viewDir );\n\t\t\t\tbentNormal = normalize( cross( bentNormal, bitangent ) );\n\t\t\t\tbentNormal = normalize( mix( bentNormal, normal, pow2( pow2( 1.0 - anisotropy * ( 1.0 - roughness ) ) ) ) );\n\t\t\t\treturn getIBLRadiance( viewDir, bentNormal, roughness );\n\t\t\t#else\n\t\t\t\treturn vec3( 0.0 );\n\t\t\t#endif\n\t\t}\n\t#endif\n#endif",envmap_vertex:"#ifdef USE_ENVMAP\n\t#ifdef ENV_WORLDPOS\n\t\tvWorldPosition = worldPosition.xyz;\n\t#else\n\t\tvec3 cameraToVertex;\n\t\tif ( isOrthographic ) {\n\t\t\tcameraToVertex = normalize( vec3( - viewMatrix[ 0 ][ 2 ], - viewMatrix[ 1 ][ 2 ], - viewMatrix[ 2 ][ 2 ] ) );\n\t\t} else {\n\t\t\tcameraToVertex = normalize( worldPosition.xyz - cameraPosition );\n\t\t}\n\t\tvec3 worldNormal = inverseTransformDirection( transformedNormal, viewMatrix );\n\t\t#ifdef ENVMAP_MODE_REFLECTION\n\t\t\tvReflect = reflect( cameraToVertex, worldNormal );\n\t\t#else\n\t\t\tvReflect = refract( cameraToVertex, worldNormal, refractionRatio );\n\t\t#endif\n\t#endif\n#endif",fog_vertex:"#ifdef USE_FOG\n\tvFogDepth = - mvPosition.z;\n#endif",fog_pars_vertex:"#ifdef USE_FOG\n\tvarying float vFogDepth;\n#endif",fog_fragment:"#ifdef USE_FOG\n\t#ifdef FOG_EXP2\n\t\tfloat fogFactor = 1.0 - exp( - fogDensity * fogDensity * vFogDepth * vFogDepth );\n\t#else\n\t\tfloat fogFactor = smoothstep( fogNear, fogFar, vFogDepth );\n\t#endif\n\tgl_FragColor.rgb = mix( gl_FragColor.rgb, fogColor, fogFactor );\n#endif",fog_pars_fragment:"#ifdef USE_FOG\n\tuniform vec3 fogColor;\n\tvarying float vFogDepth;\n\t#ifdef FOG_EXP2\n\t\tuniform float fogDensity;\n\t#else\n\t\tuniform float fogNear;\n\t\tuniform float fogFar;\n\t#endif\n#endif",gradientmap_pars_fragment:"#ifdef USE_GRADIENTMAP\n\tuniform sampler2D gradientMap;\n#endif\nvec3 getGradientIrradiance( vec3 normal, vec3 lightDirection ) {\n\tfloat dotNL = dot( normal, lightDirection );\n\tvec2 coord = vec2( dotNL * 0.5 + 0.5, 0.0 );\n\t#ifdef USE_GRADIENTMAP\n\t\treturn vec3( texture2D( gradientMap, coord ).r );\n\t#else\n\t\tvec2 fw = fwidth( coord ) * 0.5;\n\t\treturn mix( vec3( 0.7 ), vec3( 1.0 ), smoothstep( 0.7 - fw.x, 0.7 + fw.x, coord.x ) );\n\t#endif\n}",lightmap_fragment:"#ifdef USE_LIGHTMAP\n\tvec4 lightMapTexel = texture2D( lightMap, vLightMapUv );\n\tvec3 lightMapIrradiance = lightMapTexel.rgb * lightMapIntensity;\n\treflectedLight.indirectDiffuse += lightMapIrradiance;\n#endif",lightmap_pars_fragment:"#ifdef USE_LIGHTMAP\n\tuniform sampler2D lightMap;\n\tuniform float lightMapIntensity;\n#endif",lights_lambert_fragment:"LambertMaterial material;\nmaterial.diffuseColor = diffuseColor.rgb;\nmaterial.specularStrength = specularStrength;",lights_lambert_pars_fragment:"varying vec3 vViewPosition;\nstruct LambertMaterial {\n\tvec3 diffuseColor;\n\tfloat specularStrength;\n};\nvoid RE_Direct_Lambert( const in IncidentLight directLight, const in vec3 geometryPosition, const in vec3 geometryNormal, const in vec3 geometryViewDir, const in vec3 geometryClearcoatNormal, const in LambertMaterial material, inout ReflectedLight reflectedLight ) {\n\tfloat dotNL = saturate( dot( geometryNormal, directLight.direction ) );\n\tvec3 irradiance = dotNL * directLight.color;\n\treflectedLight.directDiffuse += irradiance * BRDF_Lambert( material.diffuseColor );\n}\nvoid RE_IndirectDiffuse_Lambert( const in vec3 irradiance, const in vec3 geometryPosition, const in vec3 geometryNormal, const in vec3 geometryViewDir, const in vec3 geometryClearcoatNormal, const in LambertMaterial material, inout ReflectedLight reflectedLight ) {\n\treflectedLight.indirectDiffuse += irradiance * BRDF_Lambert( material.diffuseColor );\n}\n#define RE_Direct\t\t\t\tRE_Direct_Lambert\n#define RE_IndirectDiffuse\t\tRE_IndirectDiffuse_Lambert",lights_pars_begin:"uniform bool receiveShadow;\nuniform vec3 ambientLightColor;\n#if defined( USE_LIGHT_PROBES )\n\tuniform vec3 lightProbe[ 9 ];\n#endif\nvec3 shGetIrradianceAt( in vec3 normal, in vec3 shCoefficients[ 9 ] ) {\n\tfloat x = normal.x, y = normal.y, z = normal.z;\n\tvec3 result = shCoefficients[ 0 ] * 0.886227;\n\tresult += shCoefficients[ 1 ] * 2.0 * 0.511664 * y;\n\tresult += shCoefficients[ 2 ] * 2.0 * 0.511664 * z;\n\tresult += shCoefficients[ 3 ] * 2.0 * 0.511664 * x;\n\tresult += shCoefficients[ 4 ] * 2.0 * 0.429043 * x * y;\n\tresult += shCoefficients[ 5 ] * 2.0 * 0.429043 * y * z;\n\tresult += shCoefficients[ 6 ] * ( 0.743125 * z * z - 0.247708 );\n\tresult += shCoefficients[ 7 ] * 2.0 * 0.429043 * x * z;\n\tresult += shCoefficients[ 8 ] * 0.429043 * ( x * x - y * y );\n\treturn result;\n}\nvec3 getLightProbeIrradiance( const in vec3 lightProbe[ 9 ], const in vec3 normal ) {\n\tvec3 worldNormal = inverseTransformDirection( normal, viewMatrix );\n\tvec3 irradiance = shGetIrradianceAt( worldNormal, lightProbe );\n\treturn irradiance;\n}\nvec3 getAmbientLightIrradiance( const in vec3 ambientLightColor ) {\n\tvec3 irradiance = ambientLightColor;\n\treturn irradiance;\n}\nfloat getDistanceAttenuation( const in float lightDistance, const in float cutoffDistance, const in float decayExponent ) {\n\t#if defined ( LEGACY_LIGHTS )\n\t\tif ( cutoffDistance > 0.0 && decayExponent > 0.0 ) {\n\t\t\treturn pow( saturate( - lightDistance / cutoffDistance + 1.0 ), decayExponent );\n\t\t}\n\t\treturn 1.0;\n\t#else\n\t\tfloat distanceFalloff = 1.0 / max( pow( lightDistance, decayExponent ), 0.01 );\n\t\tif ( cutoffDistance > 0.0 ) {\n\t\t\tdistanceFalloff *= pow2( saturate( 1.0 - pow4( lightDistance / cutoffDistance ) ) );\n\t\t}\n\t\treturn distanceFalloff;\n\t#endif\n}\nfloat getSpotAttenuation( const in float coneCosine, const in float penumbraCosine, const in float angleCosine ) {\n\treturn smoothstep( coneCosine, penumbraCosine, angleCosine );\n}\n#if NUM_DIR_LIGHTS > 0\n\tstruct DirectionalLight {\n\t\tvec3 direction;\n\t\tvec3 color;\n\t};\n\tuniform DirectionalLight directionalLights[ NUM_DIR_LIGHTS ];\n\tvoid getDirectionalLightInfo( const in DirectionalLight directionalLight, out IncidentLight light ) {\n\t\tlight.color = directionalLight.color;\n\t\tlight.direction = directionalLight.direction;\n\t\tlight.visible = true;\n\t}\n#endif\n#if NUM_POINT_LIGHTS > 0\n\tstruct PointLight {\n\t\tvec3 position;\n\t\tvec3 color;\n\t\tfloat distance;\n\t\tfloat decay;\n\t};\n\tuniform PointLight pointLights[ NUM_POINT_LIGHTS ];\n\tvoid getPointLightInfo( const in PointLight pointLight, const in vec3 geometryPosition, out IncidentLight light ) {\n\t\tvec3 lVector = pointLight.position - geometryPosition;\n\t\tlight.direction = normalize( lVector );\n\t\tfloat lightDistance = length( lVector );\n\t\tlight.color = pointLight.color;\n\t\tlight.color *= getDistanceAttenuation( lightDistance, pointLight.distance, pointLight.decay );\n\t\tlight.visible = ( light.color != vec3( 0.0 ) );\n\t}\n#endif\n#if NUM_SPOT_LIGHTS > 0\n\tstruct SpotLight {\n\t\tvec3 position;\n\t\tvec3 direction;\n\t\tvec3 color;\n\t\tfloat distance;\n\t\tfloat decay;\n\t\tfloat coneCos;\n\t\tfloat penumbraCos;\n\t};\n\tuniform SpotLight spotLights[ NUM_SPOT_LIGHTS ];\n\tvoid getSpotLightInfo( const in SpotLight spotLight, const in vec3 geometryPosition, out IncidentLight light ) {\n\t\tvec3 lVector = spotLight.position - geometryPosition;\n\t\tlight.direction = normalize( lVector );\n\t\tfloat angleCos = dot( light.direction, spotLight.direction );\n\t\tfloat spotAttenuation = getSpotAttenuation( spotLight.coneCos, spotLight.penumbraCos, angleCos );\n\t\tif ( spotAttenuation > 0.0 ) {\n\t\t\tfloat lightDistance = length( lVector );\n\t\t\tlight.color = spotLight.color * spotAttenuation;\n\t\t\tlight.color *= getDistanceAttenuation( lightDistance, spotLight.distance, spotLight.decay );\n\t\t\tlight.visible = ( light.color != vec3( 0.0 ) );\n\t\t} else {\n\t\t\tlight.color = vec3( 0.0 );\n\t\t\tlight.visible = false;\n\t\t}\n\t}\n#endif\n#if NUM_RECT_AREA_LIGHTS > 0\n\tstruct RectAreaLight {\n\t\tvec3 color;\n\t\tvec3 position;\n\t\tvec3 halfWidth;\n\t\tvec3 halfHeight;\n\t};\n\tuniform sampler2D ltc_1;\tuniform sampler2D ltc_2;\n\tuniform RectAreaLight rectAreaLights[ NUM_RECT_AREA_LIGHTS ];\n#endif\n#if NUM_HEMI_LIGHTS > 0\n\tstruct HemisphereLight {\n\t\tvec3 direction;\n\t\tvec3 skyColor;\n\t\tvec3 groundColor;\n\t};\n\tuniform HemisphereLight hemisphereLights[ NUM_HEMI_LIGHTS ];\n\tvec3 getHemisphereLightIrradiance( const in HemisphereLight hemiLight, const in vec3 normal ) {\n\t\tfloat dotNL = dot( normal, hemiLight.direction );\n\t\tfloat hemiDiffuseWeight = 0.5 * dotNL + 0.5;\n\t\tvec3 irradiance = mix( hemiLight.groundColor, hemiLight.skyColor, hemiDiffuseWeight );\n\t\treturn irradiance;\n\t}\n#endif",lights_toon_fragment:"ToonMaterial material;\nmaterial.diffuseColor = diffuseColor.rgb;",lights_toon_pars_fragment:"varying vec3 vViewPosition;\nstruct ToonMaterial {\n\tvec3 diffuseColor;\n};\nvoid RE_Direct_Toon( const in IncidentLight directLight, const in vec3 geometryPosition, const in vec3 geometryNormal, const in vec3 geometryViewDir, const in vec3 geometryClearcoatNormal, const in ToonMaterial material, inout ReflectedLight reflectedLight ) {\n\tvec3 irradiance = getGradientIrradiance( geometryNormal, directLight.direction ) * directLight.color;\n\treflectedLight.directDiffuse += irradiance * BRDF_Lambert( material.diffuseColor );\n}\nvoid RE_IndirectDiffuse_Toon( const in vec3 irradiance, const in vec3 geometryPosition, const in vec3 geometryNormal, const in vec3 geometryViewDir, const in vec3 geometryClearcoatNormal, const in ToonMaterial material, inout ReflectedLight reflectedLight ) {\n\treflectedLight.indirectDiffuse += irradiance * BRDF_Lambert( material.diffuseColor );\n}\n#define RE_Direct\t\t\t\tRE_Direct_Toon\n#define RE_IndirectDiffuse\t\tRE_IndirectDiffuse_Toon",lights_phong_fragment:"BlinnPhongMaterial material;\nmaterial.diffuseColor = diffuseColor.rgb;\nmaterial.specularColor = specular;\nmaterial.specularShininess = shininess;\nmaterial.specularStrength = specularStrength;",lights_phong_pars_fragment:"varying vec3 vViewPosition;\nstruct BlinnPhongMaterial {\n\tvec3 diffuseColor;\n\tvec3 specularColor;\n\tfloat specularShininess;\n\tfloat specularStrength;\n};\nvoid RE_Direct_BlinnPhong( const in IncidentLight directLight, const in vec3 geometryPosition, const in vec3 geometryNormal, const in vec3 geometryViewDir, const in vec3 geometryClearcoatNormal, const in BlinnPhongMaterial material, inout ReflectedLight reflectedLight ) {\n\tfloat dotNL = saturate( dot( geometryNormal, directLight.direction ) );\n\tvec3 irradiance = dotNL * directLight.color;\n\treflectedLight.directDiffuse += irradiance * BRDF_Lambert( material.diffuseColor );\n\treflectedLight.directSpecular += irradiance * BRDF_BlinnPhong( directLight.direction, geometryViewDir, geometryNormal, material.specularColor, material.specularShininess ) * material.specularStrength;\n}\nvoid RE_IndirectDiffuse_BlinnPhong( const in vec3 irradiance, const in vec3 geometryPosition, const in vec3 geometryNormal, const in vec3 geometryViewDir, const in vec3 geometryClearcoatNormal, const in BlinnPhongMaterial material, inout ReflectedLight reflectedLight ) {\n\treflectedLight.indirectDiffuse += irradiance * BRDF_Lambert( material.diffuseColor );\n}\n#define RE_Direct\t\t\t\tRE_Direct_BlinnPhong\n#define RE_IndirectDiffuse\t\tRE_IndirectDiffuse_BlinnPhong",lights_physical_fragment:"PhysicalMaterial material;\nmaterial.diffuseColor = diffuseColor.rgb * ( 1.0 - metalnessFactor );\nvec3 dxy = max( abs( dFdx( nonPerturbedNormal ) ), abs( dFdy( nonPerturbedNormal ) ) );\nfloat geometryRoughness = max( max( dxy.x, dxy.y ), dxy.z );\nmaterial.roughness = max( roughnessFactor, 0.0525 );material.roughness += geometryRoughness;\nmaterial.roughness = min( material.roughness, 1.0 );\n#ifdef IOR\n\tmaterial.ior = ior;\n\t#ifdef USE_SPECULAR\n\t\tfloat specularIntensityFactor = specularIntensity;\n\t\tvec3 specularColorFactor = specularColor;\n\t\t#ifdef USE_SPECULAR_COLORMAP\n\t\t\tspecularColorFactor *= texture2D( specularColorMap, vSpecularColorMapUv ).rgb;\n\t\t#endif\n\t\t#ifdef USE_SPECULAR_INTENSITYMAP\n\t\t\tspecularIntensityFactor *= texture2D( specularIntensityMap, vSpecularIntensityMapUv ).a;\n\t\t#endif\n\t\tmaterial.specularF90 = mix( specularIntensityFactor, 1.0, metalnessFactor );\n\t#else\n\t\tfloat specularIntensityFactor = 1.0;\n\t\tvec3 specularColorFactor = vec3( 1.0 );\n\t\tmaterial.specularF90 = 1.0;\n\t#endif\n\tmaterial.specularColor = mix( min( pow2( ( material.ior - 1.0 ) / ( material.ior + 1.0 ) ) * specularColorFactor, vec3( 1.0 ) ) * specularIntensityFactor, diffuseColor.rgb, metalnessFactor );\n#else\n\tmaterial.specularColor = mix( vec3( 0.04 ), diffuseColor.rgb, metalnessFactor );\n\tmaterial.specularF90 = 1.0;\n#endif\n#ifdef USE_CLEARCOAT\n\tmaterial.clearcoat = clearcoat;\n\tmaterial.clearcoatRoughness = clearcoatRoughness;\n\tmaterial.clearcoatF0 = vec3( 0.04 );\n\tmaterial.clearcoatF90 = 1.0;\n\t#ifdef USE_CLEARCOATMAP\n\t\tmaterial.clearcoat *= texture2D( clearcoatMap, vClearcoatMapUv ).x;\n\t#endif\n\t#ifdef USE_CLEARCOAT_ROUGHNESSMAP\n\t\tmaterial.clearcoatRoughness *= texture2D( clearcoatRoughnessMap, vClearcoatRoughnessMapUv ).y;\n\t#endif\n\tmaterial.clearcoat = saturate( material.clearcoat );\tmaterial.clearcoatRoughness = max( material.clearcoatRoughness, 0.0525 );\n\tmaterial.clearcoatRoughness += geometryRoughness;\n\tmaterial.clearcoatRoughness = min( material.clearcoatRoughness, 1.0 );\n#endif\n#ifdef USE_IRIDESCENCE\n\tmaterial.iridescence = iridescence;\n\tmaterial.iridescenceIOR = iridescenceIOR;\n\t#ifdef USE_IRIDESCENCEMAP\n\t\tmaterial.iridescence *= texture2D( iridescenceMap, vIridescenceMapUv ).r;\n\t#endif\n\t#ifdef USE_IRIDESCENCE_THICKNESSMAP\n\t\tmaterial.iridescenceThickness = (iridescenceThicknessMaximum - iridescenceThicknessMinimum) * texture2D( iridescenceThicknessMap, vIridescenceThicknessMapUv ).g + iridescenceThicknessMinimum;\n\t#else\n\t\tmaterial.iridescenceThickness = iridescenceThicknessMaximum;\n\t#endif\n#endif\n#ifdef USE_SHEEN\n\tmaterial.sheenColor = sheenColor;\n\t#ifdef USE_SHEEN_COLORMAP\n\t\tmaterial.sheenColor *= texture2D( sheenColorMap, vSheenColorMapUv ).rgb;\n\t#endif\n\tmaterial.sheenRoughness = clamp( sheenRoughness, 0.07, 1.0 );\n\t#ifdef USE_SHEEN_ROUGHNESSMAP\n\t\tmaterial.sheenRoughness *= texture2D( sheenRoughnessMap, vSheenRoughnessMapUv ).a;\n\t#endif\n#endif\n#ifdef USE_ANISOTROPY\n\t#ifdef USE_ANISOTROPYMAP\n\t\tmat2 anisotropyMat = mat2( anisotropyVector.x, anisotropyVector.y, - anisotropyVector.y, anisotropyVector.x );\n\t\tvec3 anisotropyPolar = texture2D( anisotropyMap, vAnisotropyMapUv ).rgb;\n\t\tvec2 anisotropyV = anisotropyMat * normalize( 2.0 * anisotropyPolar.rg - vec2( 1.0 ) ) * anisotropyPolar.b;\n\t#else\n\t\tvec2 anisotropyV = anisotropyVector;\n\t#endif\n\tmaterial.anisotropy = length( anisotropyV );\n\tif( material.anisotropy == 0.0 ) {\n\t\tanisotropyV = vec2( 1.0, 0.0 );\n\t} else {\n\t\tanisotropyV /= material.anisotropy;\n\t\tmaterial.anisotropy = saturate( material.anisotropy );\n\t}\n\tmaterial.alphaT = mix( pow2( material.roughness ), 1.0, pow2( material.anisotropy ) );\n\tmaterial.anisotropyT = tbn[ 0 ] * anisotropyV.x + tbn[ 1 ] * anisotropyV.y;\n\tmaterial.anisotropyB = tbn[ 1 ] * anisotropyV.x - tbn[ 0 ] * anisotropyV.y;\n#endif",lights_physical_pars_fragment:"struct PhysicalMaterial {\n\tvec3 diffuseColor;\n\tfloat roughness;\n\tvec3 specularColor;\n\tfloat specularF90;\n\t#ifdef USE_CLEARCOAT\n\t\tfloat clearcoat;\n\t\tfloat clearcoatRoughness;\n\t\tvec3 clearcoatF0;\n\t\tfloat clearcoatF90;\n\t#endif\n\t#ifdef USE_IRIDESCENCE\n\t\tfloat iridescence;\n\t\tfloat iridescenceIOR;\n\t\tfloat iridescenceThickness;\n\t\tvec3 iridescenceFresnel;\n\t\tvec3 iridescenceF0;\n\t#endif\n\t#ifdef USE_SHEEN\n\t\tvec3 sheenColor;\n\t\tfloat sheenRoughness;\n\t#endif\n\t#ifdef IOR\n\t\tfloat ior;\n\t#endif\n\t#ifdef USE_TRANSMISSION\n\t\tfloat transmission;\n\t\tfloat transmissionAlpha;\n\t\tfloat thickness;\n\t\tfloat attenuationDistance;\n\t\tvec3 attenuationColor;\n\t#endif\n\t#ifdef USE_ANISOTROPY\n\t\tfloat anisotropy;\n\t\tfloat alphaT;\n\t\tvec3 anisotropyT;\n\t\tvec3 anisotropyB;\n\t#endif\n};\nvec3 clearcoatSpecularDirect = vec3( 0.0 );\nvec3 clearcoatSpecularIndirect = vec3( 0.0 );\nvec3 sheenSpecularDirect = vec3( 0.0 );\nvec3 sheenSpecularIndirect = vec3(0.0 );\nvec3 Schlick_to_F0( const in vec3 f, const in float f90, const in float dotVH ) {\n float x = clamp( 1.0 - dotVH, 0.0, 1.0 );\n float x2 = x * x;\n float x5 = clamp( x * x2 * x2, 0.0, 0.9999 );\n return ( f - vec3( f90 ) * x5 ) / ( 1.0 - x5 );\n}\nfloat V_GGX_SmithCorrelated( const in float alpha, const in float dotNL, const in float dotNV ) {\n\tfloat a2 = pow2( alpha );\n\tfloat gv = dotNL * sqrt( a2 + ( 1.0 - a2 ) * pow2( dotNV ) );\n\tfloat gl = dotNV * sqrt( a2 + ( 1.0 - a2 ) * pow2( dotNL ) );\n\treturn 0.5 / max( gv + gl, EPSILON );\n}\nfloat D_GGX( const in float alpha, const in float dotNH ) {\n\tfloat a2 = pow2( alpha );\n\tfloat denom = pow2( dotNH ) * ( a2 - 1.0 ) + 1.0;\n\treturn RECIPROCAL_PI * a2 / pow2( denom );\n}\n#ifdef USE_ANISOTROPY\n\tfloat V_GGX_SmithCorrelated_Anisotropic( const in float alphaT, const in float alphaB, const in float dotTV, const in float dotBV, const in float dotTL, const in float dotBL, const in float dotNV, const in float dotNL ) {\n\t\tfloat gv = dotNL * length( vec3( alphaT * dotTV, alphaB * dotBV, dotNV ) );\n\t\tfloat gl = dotNV * length( vec3( alphaT * dotTL, alphaB * dotBL, dotNL ) );\n\t\tfloat v = 0.5 / ( gv + gl );\n\t\treturn saturate(v);\n\t}\n\tfloat D_GGX_Anisotropic( const in float alphaT, const in float alphaB, const in float dotNH, const in float dotTH, const in float dotBH ) {\n\t\tfloat a2 = alphaT * alphaB;\n\t\thighp vec3 v = vec3( alphaB * dotTH, alphaT * dotBH, a2 * dotNH );\n\t\thighp float v2 = dot( v, v );\n\t\tfloat w2 = a2 / v2;\n\t\treturn RECIPROCAL_PI * a2 * pow2 ( w2 );\n\t}\n#endif\n#ifdef USE_CLEARCOAT\n\tvec3 BRDF_GGX_Clearcoat( const in vec3 lightDir, const in vec3 viewDir, const in vec3 normal, const in PhysicalMaterial material) {\n\t\tvec3 f0 = material.clearcoatF0;\n\t\tfloat f90 = material.clearcoatF90;\n\t\tfloat roughness = material.clearcoatRoughness;\n\t\tfloat alpha = pow2( roughness );\n\t\tvec3 halfDir = normalize( lightDir + viewDir );\n\t\tfloat dotNL = saturate( dot( normal, lightDir ) );\n\t\tfloat dotNV = saturate( dot( normal, viewDir ) );\n\t\tfloat dotNH = saturate( dot( normal, halfDir ) );\n\t\tfloat dotVH = saturate( dot( viewDir, halfDir ) );\n\t\tvec3 F = F_Schlick( f0, f90, dotVH );\n\t\tfloat V = V_GGX_SmithCorrelated( alpha, dotNL, dotNV );\n\t\tfloat D = D_GGX( alpha, dotNH );\n\t\treturn F * ( V * D );\n\t}\n#endif\nvec3 BRDF_GGX( const in vec3 lightDir, const in vec3 viewDir, const in vec3 normal, const in PhysicalMaterial material ) {\n\tvec3 f0 = material.specularColor;\n\tfloat f90 = material.specularF90;\n\tfloat roughness = material.roughness;\n\tfloat alpha = pow2( roughness );\n\tvec3 halfDir = normalize( lightDir + viewDir );\n\tfloat dotNL = saturate( dot( normal, lightDir ) );\n\tfloat dotNV = saturate( dot( normal, viewDir ) );\n\tfloat dotNH = saturate( dot( normal, halfDir ) );\n\tfloat dotVH = saturate( dot( viewDir, halfDir ) );\n\tvec3 F = F_Schlick( f0, f90, dotVH );\n\t#ifdef USE_IRIDESCENCE\n\t\tF = mix( F, material.iridescenceFresnel, material.iridescence );\n\t#endif\n\t#ifdef USE_ANISOTROPY\n\t\tfloat dotTL = dot( material.anisotropyT, lightDir );\n\t\tfloat dotTV = dot( material.anisotropyT, viewDir );\n\t\tfloat dotTH = dot( material.anisotropyT, halfDir );\n\t\tfloat dotBL = dot( material.anisotropyB, lightDir );\n\t\tfloat dotBV = dot( material.anisotropyB, viewDir );\n\t\tfloat dotBH = dot( material.anisotropyB, halfDir );\n\t\tfloat V = V_GGX_SmithCorrelated_Anisotropic( material.alphaT, alpha, dotTV, dotBV, dotTL, dotBL, dotNV, dotNL );\n\t\tfloat D = D_GGX_Anisotropic( material.alphaT, alpha, dotNH, dotTH, dotBH );\n\t#else\n\t\tfloat V = V_GGX_SmithCorrelated( alpha, dotNL, dotNV );\n\t\tfloat D = D_GGX( alpha, dotNH );\n\t#endif\n\treturn F * ( V * D );\n}\nvec2 LTC_Uv( const in vec3 N, const in vec3 V, const in float roughness ) {\n\tconst float LUT_SIZE = 64.0;\n\tconst float LUT_SCALE = ( LUT_SIZE - 1.0 ) / LUT_SIZE;\n\tconst float LUT_BIAS = 0.5 / LUT_SIZE;\n\tfloat dotNV = saturate( dot( N, V ) );\n\tvec2 uv = vec2( roughness, sqrt( 1.0 - dotNV ) );\n\tuv = uv * LUT_SCALE + LUT_BIAS;\n\treturn uv;\n}\nfloat LTC_ClippedSphereFormFactor( const in vec3 f ) {\n\tfloat l = length( f );\n\treturn max( ( l * l + f.z ) / ( l + 1.0 ), 0.0 );\n}\nvec3 LTC_EdgeVectorFormFactor( const in vec3 v1, const in vec3 v2 ) {\n\tfloat x = dot( v1, v2 );\n\tfloat y = abs( x );\n\tfloat a = 0.8543985 + ( 0.4965155 + 0.0145206 * y ) * y;\n\tfloat b = 3.4175940 + ( 4.1616724 + y ) * y;\n\tfloat v = a / b;\n\tfloat theta_sintheta = ( x > 0.0 ) ? v : 0.5 * inversesqrt( max( 1.0 - x * x, 1e-7 ) ) - v;\n\treturn cross( v1, v2 ) * theta_sintheta;\n}\nvec3 LTC_Evaluate( const in vec3 N, const in vec3 V, const in vec3 P, const in mat3 mInv, const in vec3 rectCoords[ 4 ] ) {\n\tvec3 v1 = rectCoords[ 1 ] - rectCoords[ 0 ];\n\tvec3 v2 = rectCoords[ 3 ] - rectCoords[ 0 ];\n\tvec3 lightNormal = cross( v1, v2 );\n\tif( dot( lightNormal, P - rectCoords[ 0 ] ) < 0.0 ) return vec3( 0.0 );\n\tvec3 T1, T2;\n\tT1 = normalize( V - N * dot( V, N ) );\n\tT2 = - cross( N, T1 );\n\tmat3 mat = mInv * transposeMat3( mat3( T1, T2, N ) );\n\tvec3 coords[ 4 ];\n\tcoords[ 0 ] = mat * ( rectCoords[ 0 ] - P );\n\tcoords[ 1 ] = mat * ( rectCoords[ 1 ] - P );\n\tcoords[ 2 ] = mat * ( rectCoords[ 2 ] - P );\n\tcoords[ 3 ] = mat * ( rectCoords[ 3 ] - P );\n\tcoords[ 0 ] = normalize( coords[ 0 ] );\n\tcoords[ 1 ] = normalize( coords[ 1 ] );\n\tcoords[ 2 ] = normalize( coords[ 2 ] );\n\tcoords[ 3 ] = normalize( coords[ 3 ] );\n\tvec3 vectorFormFactor = vec3( 0.0 );\n\tvectorFormFactor += LTC_EdgeVectorFormFactor( coords[ 0 ], coords[ 1 ] );\n\tvectorFormFactor += LTC_EdgeVectorFormFactor( coords[ 1 ], coords[ 2 ] );\n\tvectorFormFactor += LTC_EdgeVectorFormFactor( coords[ 2 ], coords[ 3 ] );\n\tvectorFormFactor += LTC_EdgeVectorFormFactor( coords[ 3 ], coords[ 0 ] );\n\tfloat result = LTC_ClippedSphereFormFactor( vectorFormFactor );\n\treturn vec3( result );\n}\n#if defined( USE_SHEEN )\nfloat D_Charlie( float roughness, float dotNH ) {\n\tfloat alpha = pow2( roughness );\n\tfloat invAlpha = 1.0 / alpha;\n\tfloat cos2h = dotNH * dotNH;\n\tfloat sin2h = max( 1.0 - cos2h, 0.0078125 );\n\treturn ( 2.0 + invAlpha ) * pow( sin2h, invAlpha * 0.5 ) / ( 2.0 * PI );\n}\nfloat V_Neubelt( float dotNV, float dotNL ) {\n\treturn saturate( 1.0 / ( 4.0 * ( dotNL + dotNV - dotNL * dotNV ) ) );\n}\nvec3 BRDF_Sheen( const in vec3 lightDir, const in vec3 viewDir, const in vec3 normal, vec3 sheenColor, const in float sheenRoughness ) {\n\tvec3 halfDir = normalize( lightDir + viewDir );\n\tfloat dotNL = saturate( dot( normal, lightDir ) );\n\tfloat dotNV = saturate( dot( normal, viewDir ) );\n\tfloat dotNH = saturate( dot( normal, halfDir ) );\n\tfloat D = D_Charlie( sheenRoughness, dotNH );\n\tfloat V = V_Neubelt( dotNV, dotNL );\n\treturn sheenColor * ( D * V );\n}\n#endif\nfloat IBLSheenBRDF( const in vec3 normal, const in vec3 viewDir, const in float roughness ) {\n\tfloat dotNV = saturate( dot( normal, viewDir ) );\n\tfloat r2 = roughness * roughness;\n\tfloat a = roughness < 0.25 ? -339.2 * r2 + 161.4 * roughness - 25.9 : -8.48 * r2 + 14.3 * roughness - 9.95;\n\tfloat b = roughness < 0.25 ? 44.0 * r2 - 23.7 * roughness + 3.26 : 1.97 * r2 - 3.27 * roughness + 0.72;\n\tfloat DG = exp( a * dotNV + b ) + ( roughness < 0.25 ? 0.0 : 0.1 * ( roughness - 0.25 ) );\n\treturn saturate( DG * RECIPROCAL_PI );\n}\nvec2 DFGApprox( const in vec3 normal, const in vec3 viewDir, const in float roughness ) {\n\tfloat dotNV = saturate( dot( normal, viewDir ) );\n\tconst vec4 c0 = vec4( - 1, - 0.0275, - 0.572, 0.022 );\n\tconst vec4 c1 = vec4( 1, 0.0425, 1.04, - 0.04 );\n\tvec4 r = roughness * c0 + c1;\n\tfloat a004 = min( r.x * r.x, exp2( - 9.28 * dotNV ) ) * r.x + r.y;\n\tvec2 fab = vec2( - 1.04, 1.04 ) * a004 + r.zw;\n\treturn fab;\n}\nvec3 EnvironmentBRDF( const in vec3 normal, const in vec3 viewDir, const in vec3 specularColor, const in float specularF90, const in float roughness ) {\n\tvec2 fab = DFGApprox( normal, viewDir, roughness );\n\treturn specularColor * fab.x + specularF90 * fab.y;\n}\n#ifdef USE_IRIDESCENCE\nvoid computeMultiscatteringIridescence( const in vec3 normal, const in vec3 viewDir, const in vec3 specularColor, const in float specularF90, const in float iridescence, const in vec3 iridescenceF0, const in float roughness, inout vec3 singleScatter, inout vec3 multiScatter ) {\n#else\nvoid computeMultiscattering( const in vec3 normal, const in vec3 viewDir, const in vec3 specularColor, const in float specularF90, const in float roughness, inout vec3 singleScatter, inout vec3 multiScatter ) {\n#endif\n\tvec2 fab = DFGApprox( normal, viewDir, roughness );\n\t#ifdef USE_IRIDESCENCE\n\t\tvec3 Fr = mix( specularColor, iridescenceF0, iridescence );\n\t#else\n\t\tvec3 Fr = specularColor;\n\t#endif\n\tvec3 FssEss = Fr * fab.x + specularF90 * fab.y;\n\tfloat Ess = fab.x + fab.y;\n\tfloat Ems = 1.0 - Ess;\n\tvec3 Favg = Fr + ( 1.0 - Fr ) * 0.047619;\tvec3 Fms = FssEss * Favg / ( 1.0 - Ems * Favg );\n\tsingleScatter += FssEss;\n\tmultiScatter += Fms * Ems;\n}\n#if NUM_RECT_AREA_LIGHTS > 0\n\tvoid RE_Direct_RectArea_Physical( const in RectAreaLight rectAreaLight, const in vec3 geometryPosition, const in vec3 geometryNormal, const in vec3 geometryViewDir, const in vec3 geometryClearcoatNormal, const in PhysicalMaterial material, inout ReflectedLight reflectedLight ) {\n\t\tvec3 normal = geometryNormal;\n\t\tvec3 viewDir = geometryViewDir;\n\t\tvec3 position = geometryPosition;\n\t\tvec3 lightPos = rectAreaLight.position;\n\t\tvec3 halfWidth = rectAreaLight.halfWidth;\n\t\tvec3 halfHeight = rectAreaLight.halfHeight;\n\t\tvec3 lightColor = rectAreaLight.color;\n\t\tfloat roughness = material.roughness;\n\t\tvec3 rectCoords[ 4 ];\n\t\trectCoords[ 0 ] = lightPos + halfWidth - halfHeight;\t\trectCoords[ 1 ] = lightPos - halfWidth - halfHeight;\n\t\trectCoords[ 2 ] = lightPos - halfWidth + halfHeight;\n\t\trectCoords[ 3 ] = lightPos + halfWidth + halfHeight;\n\t\tvec2 uv = LTC_Uv( normal, viewDir, roughness );\n\t\tvec4 t1 = texture2D( ltc_1, uv );\n\t\tvec4 t2 = texture2D( ltc_2, uv );\n\t\tmat3 mInv = mat3(\n\t\t\tvec3( t1.x, 0, t1.y ),\n\t\t\tvec3( 0, 1, 0 ),\n\t\t\tvec3( t1.z, 0, t1.w )\n\t\t);\n\t\tvec3 fresnel = ( material.specularColor * t2.x + ( vec3( 1.0 ) - material.specularColor ) * t2.y );\n\t\treflectedLight.directSpecular += lightColor * fresnel * LTC_Evaluate( normal, viewDir, position, mInv, rectCoords );\n\t\treflectedLight.directDiffuse += lightColor * material.diffuseColor * LTC_Evaluate( normal, viewDir, position, mat3( 1.0 ), rectCoords );\n\t}\n#endif\nvoid RE_Direct_Physical( const in IncidentLight directLight, const in vec3 geometryPosition, const in vec3 geometryNormal, const in vec3 geometryViewDir, const in vec3 geometryClearcoatNormal, const in PhysicalMaterial material, inout ReflectedLight reflectedLight ) {\n\tfloat dotNL = saturate( dot( geometryNormal, directLight.direction ) );\n\tvec3 irradiance = dotNL * directLight.color;\n\t#ifdef USE_CLEARCOAT\n\t\tfloat dotNLcc = saturate( dot( geometryClearcoatNormal, directLight.direction ) );\n\t\tvec3 ccIrradiance = dotNLcc * directLight.color;\n\t\tclearcoatSpecularDirect += ccIrradiance * BRDF_GGX_Clearcoat( directLight.direction, geometryViewDir, geometryClearcoatNormal, material );\n\t#endif\n\t#ifdef USE_SHEEN\n\t\tsheenSpecularDirect += irradiance * BRDF_Sheen( directLight.direction, geometryViewDir, geometryNormal, material.sheenColor, material.sheenRoughness );\n\t#endif\n\treflectedLight.directSpecular += irradiance * BRDF_GGX( directLight.direction, geometryViewDir, geometryNormal, material );\n\treflectedLight.directDiffuse += irradiance * BRDF_Lambert( material.diffuseColor );\n}\nvoid RE_IndirectDiffuse_Physical( const in vec3 irradiance, const in vec3 geometryPosition, const in vec3 geometryNormal, const in vec3 geometryViewDir, const in vec3 geometryClearcoatNormal, const in PhysicalMaterial material, inout ReflectedLight reflectedLight ) {\n\treflectedLight.indirectDiffuse += irradiance * BRDF_Lambert( material.diffuseColor );\n}\nvoid RE_IndirectSpecular_Physical( const in vec3 radiance, const in vec3 irradiance, const in vec3 clearcoatRadiance, const in vec3 geometryPosition, const in vec3 geometryNormal, const in vec3 geometryViewDir, const in vec3 geometryClearcoatNormal, const in PhysicalMaterial material, inout ReflectedLight reflectedLight) {\n\t#ifdef USE_CLEARCOAT\n\t\tclearcoatSpecularIndirect += clearcoatRadiance * EnvironmentBRDF( geometryClearcoatNormal, geometryViewDir, material.clearcoatF0, material.clearcoatF90, material.clearcoatRoughness );\n\t#endif\n\t#ifdef USE_SHEEN\n\t\tsheenSpecularIndirect += irradiance * material.sheenColor * IBLSheenBRDF( geometryNormal, geometryViewDir, material.sheenRoughness );\n\t#endif\n\tvec3 singleScattering = vec3( 0.0 );\n\tvec3 multiScattering = vec3( 0.0 );\n\tvec3 cosineWeightedIrradiance = irradiance * RECIPROCAL_PI;\n\t#ifdef USE_IRIDESCENCE\n\t\tcomputeMultiscatteringIridescence( geometryNormal, geometryViewDir, material.specularColor, material.specularF90, material.iridescence, material.iridescenceFresnel, material.roughness, singleScattering, multiScattering );\n\t#else\n\t\tcomputeMultiscattering( geometryNormal, geometryViewDir, material.specularColor, material.specularF90, material.roughness, singleScattering, multiScattering );\n\t#endif\n\tvec3 totalScattering = singleScattering + multiScattering;\n\tvec3 diffuse = material.diffuseColor * ( 1.0 - max( max( totalScattering.r, totalScattering.g ), totalScattering.b ) );\n\treflectedLight.indirectSpecular += radiance * singleScattering;\n\treflectedLight.indirectSpecular += multiScattering * cosineWeightedIrradiance;\n\treflectedLight.indirectDiffuse += diffuse * cosineWeightedIrradiance;\n}\n#define RE_Direct\t\t\t\tRE_Direct_Physical\n#define RE_Direct_RectArea\t\tRE_Direct_RectArea_Physical\n#define RE_IndirectDiffuse\t\tRE_IndirectDiffuse_Physical\n#define RE_IndirectSpecular\t\tRE_IndirectSpecular_Physical\nfloat computeSpecularOcclusion( const in float dotNV, const in float ambientOcclusion, const in float roughness ) {\n\treturn saturate( pow( dotNV + ambientOcclusion, exp2( - 16.0 * roughness - 1.0 ) ) - 1.0 + ambientOcclusion );\n}",lights_fragment_begin:"\nvec3 geometryPosition = - vViewPosition;\nvec3 geometryNormal = normal;\nvec3 geometryViewDir = ( isOrthographic ) ? vec3( 0, 0, 1 ) : normalize( vViewPosition );\nvec3 geometryClearcoatNormal = vec3( 0.0 );\n#ifdef USE_CLEARCOAT\n\tgeometryClearcoatNormal = clearcoatNormal;\n#endif\n#ifdef USE_IRIDESCENCE\n\tfloat dotNVi = saturate( dot( normal, geometryViewDir ) );\n\tif ( material.iridescenceThickness == 0.0 ) {\n\t\tmaterial.iridescence = 0.0;\n\t} else {\n\t\tmaterial.iridescence = saturate( material.iridescence );\n\t}\n\tif ( material.iridescence > 0.0 ) {\n\t\tmaterial.iridescenceFresnel = evalIridescence( 1.0, material.iridescenceIOR, dotNVi, material.iridescenceThickness, material.specularColor );\n\t\tmaterial.iridescenceF0 = Schlick_to_F0( material.iridescenceFresnel, 1.0, dotNVi );\n\t}\n#endif\nIncidentLight directLight;\n#if ( NUM_POINT_LIGHTS > 0 ) && defined( RE_Direct )\n\tPointLight pointLight;\n\t#if defined( USE_SHADOWMAP ) && NUM_POINT_LIGHT_SHADOWS > 0\n\tPointLightShadow pointLightShadow;\n\t#endif\n\t#pragma unroll_loop_start\n\tfor ( int i = 0; i < NUM_POINT_LIGHTS; i ++ ) {\n\t\tpointLight = pointLights[ i ];\n\t\tgetPointLightInfo( pointLight, geometryPosition, directLight );\n\t\t#if defined( USE_SHADOWMAP ) && ( UNROLLED_LOOP_INDEX < NUM_POINT_LIGHT_SHADOWS )\n\t\tpointLightShadow = pointLightShadows[ i ];\n\t\tdirectLight.color *= ( directLight.visible && receiveShadow ) ? getPointShadow( pointShadowMap[ i ], pointLightShadow.shadowMapSize, pointLightShadow.shadowBias, pointLightShadow.shadowRadius, vPointShadowCoord[ i ], pointLightShadow.shadowCameraNear, pointLightShadow.shadowCameraFar ) : 1.0;\n\t\t#endif\n\t\tRE_Direct( directLight, geometryPosition, geometryNormal, geometryViewDir, geometryClearcoatNormal, material, reflectedLight );\n\t}\n\t#pragma unroll_loop_end\n#endif\n#if ( NUM_SPOT_LIGHTS > 0 ) && defined( RE_Direct )\n\tSpotLight spotLight;\n\tvec4 spotColor;\n\tvec3 spotLightCoord;\n\tbool inSpotLightMap;\n\t#if defined( USE_SHADOWMAP ) && NUM_SPOT_LIGHT_SHADOWS > 0\n\tSpotLightShadow spotLightShadow;\n\t#endif\n\t#pragma unroll_loop_start\n\tfor ( int i = 0; i < NUM_SPOT_LIGHTS; i ++ ) {\n\t\tspotLight = spotLights[ i ];\n\t\tgetSpotLightInfo( spotLight, geometryPosition, directLight );\n\t\t#if ( UNROLLED_LOOP_INDEX < NUM_SPOT_LIGHT_SHADOWS_WITH_MAPS )\n\t\t#define SPOT_LIGHT_MAP_INDEX UNROLLED_LOOP_INDEX\n\t\t#elif ( UNROLLED_LOOP_INDEX < NUM_SPOT_LIGHT_SHADOWS )\n\t\t#define SPOT_LIGHT_MAP_INDEX NUM_SPOT_LIGHT_MAPS\n\t\t#else\n\t\t#define SPOT_LIGHT_MAP_INDEX ( UNROLLED_LOOP_INDEX - NUM_SPOT_LIGHT_SHADOWS + NUM_SPOT_LIGHT_SHADOWS_WITH_MAPS )\n\t\t#endif\n\t\t#if ( SPOT_LIGHT_MAP_INDEX < NUM_SPOT_LIGHT_MAPS )\n\t\t\tspotLightCoord = vSpotLightCoord[ i ].xyz / vSpotLightCoord[ i ].w;\n\t\t\tinSpotLightMap = all( lessThan( abs( spotLightCoord * 2. - 1. ), vec3( 1.0 ) ) );\n\t\t\tspotColor = texture2D( spotLightMap[ SPOT_LIGHT_MAP_INDEX ], spotLightCoord.xy );\n\t\t\tdirectLight.color = inSpotLightMap ? directLight.color * spotColor.rgb : directLight.color;\n\t\t#endif\n\t\t#undef SPOT_LIGHT_MAP_INDEX\n\t\t#if defined( USE_SHADOWMAP ) && ( UNROLLED_LOOP_INDEX < NUM_SPOT_LIGHT_SHADOWS )\n\t\tspotLightShadow = spotLightShadows[ i ];\n\t\tdirectLight.color *= ( directLight.visible && receiveShadow ) ? getShadow( spotShadowMap[ i ], spotLightShadow.shadowMapSize, spotLightShadow.shadowBias, spotLightShadow.shadowRadius, vSpotLightCoord[ i ] ) : 1.0;\n\t\t#endif\n\t\tRE_Direct( directLight, geometryPosition, geometryNormal, geometryViewDir, geometryClearcoatNormal, material, reflectedLight );\n\t}\n\t#pragma unroll_loop_end\n#endif\n#if ( NUM_DIR_LIGHTS > 0 ) && defined( RE_Direct )\n\tDirectionalLight directionalLight;\n\t#if defined( USE_SHADOWMAP ) && NUM_DIR_LIGHT_SHADOWS > 0\n\tDirectionalLightShadow directionalLightShadow;\n\t#endif\n\t#pragma unroll_loop_start\n\tfor ( int i = 0; i < NUM_DIR_LIGHTS; i ++ ) {\n\t\tdirectionalLight = directionalLights[ i ];\n\t\tgetDirectionalLightInfo( directionalLight, directLight );\n\t\t#if defined( USE_SHADOWMAP ) && ( UNROLLED_LOOP_INDEX < NUM_DIR_LIGHT_SHADOWS )\n\t\tdirectionalLightShadow = directionalLightShadows[ i ];\n\t\tdirectLight.color *= ( directLight.visible && receiveShadow ) ? getShadow( directionalShadowMap[ i ], directionalLightShadow.shadowMapSize, directionalLightShadow.shadowBias, directionalLightShadow.shadowRadius, vDirectionalShadowCoord[ i ] ) : 1.0;\n\t\t#endif\n\t\tRE_Direct( directLight, geometryPosition, geometryNormal, geometryViewDir, geometryClearcoatNormal, material, reflectedLight );\n\t}\n\t#pragma unroll_loop_end\n#endif\n#if ( NUM_RECT_AREA_LIGHTS > 0 ) && defined( RE_Direct_RectArea )\n\tRectAreaLight rectAreaLight;\n\t#pragma unroll_loop_start\n\tfor ( int i = 0; i < NUM_RECT_AREA_LIGHTS; i ++ ) {\n\t\trectAreaLight = rectAreaLights[ i ];\n\t\tRE_Direct_RectArea( rectAreaLight, geometryPosition, geometryNormal, geometryViewDir, geometryClearcoatNormal, material, reflectedLight );\n\t}\n\t#pragma unroll_loop_end\n#endif\n#if defined( RE_IndirectDiffuse )\n\tvec3 iblIrradiance = vec3( 0.0 );\n\tvec3 irradiance = getAmbientLightIrradiance( ambientLightColor );\n\t#if defined( USE_LIGHT_PROBES )\n\t\tirradiance += getLightProbeIrradiance( lightProbe, geometryNormal );\n\t#endif\n\t#if ( NUM_HEMI_LIGHTS > 0 )\n\t\t#pragma unroll_loop_start\n\t\tfor ( int i = 0; i < NUM_HEMI_LIGHTS; i ++ ) {\n\t\t\tirradiance += getHemisphereLightIrradiance( hemisphereLights[ i ], geometryNormal );\n\t\t}\n\t\t#pragma unroll_loop_end\n\t#endif\n#endif\n#if defined( RE_IndirectSpecular )\n\tvec3 radiance = vec3( 0.0 );\n\tvec3 clearcoatRadiance = vec3( 0.0 );\n#endif",lights_fragment_maps:"#if defined( RE_IndirectDiffuse )\n\t#ifdef USE_LIGHTMAP\n\t\tvec4 lightMapTexel = texture2D( lightMap, vLightMapUv );\n\t\tvec3 lightMapIrradiance = lightMapTexel.rgb * lightMapIntensity;\n\t\tirradiance += lightMapIrradiance;\n\t#endif\n\t#if defined( USE_ENVMAP ) && defined( STANDARD ) && defined( ENVMAP_TYPE_CUBE_UV )\n\t\tiblIrradiance += getIBLIrradiance( geometryNormal );\n\t#endif\n#endif\n#if defined( USE_ENVMAP ) && defined( RE_IndirectSpecular )\n\t#ifdef USE_ANISOTROPY\n\t\tradiance += getIBLAnisotropyRadiance( geometryViewDir, geometryNormal, material.roughness, material.anisotropyB, material.anisotropy );\n\t#else\n\t\tradiance += getIBLRadiance( geometryViewDir, geometryNormal, material.roughness );\n\t#endif\n\t#ifdef USE_CLEARCOAT\n\t\tclearcoatRadiance += getIBLRadiance( geometryViewDir, geometryClearcoatNormal, material.clearcoatRoughness );\n\t#endif\n#endif",lights_fragment_end:"#if defined( RE_IndirectDiffuse )\n\tRE_IndirectDiffuse( irradiance, geometryPosition, geometryNormal, geometryViewDir, geometryClearcoatNormal, material, reflectedLight );\n#endif\n#if defined( RE_IndirectSpecular )\n\tRE_IndirectSpecular( radiance, iblIrradiance, clearcoatRadiance, geometryPosition, geometryNormal, geometryViewDir, geometryClearcoatNormal, material, reflectedLight );\n#endif",logdepthbuf_fragment:"#if defined( USE_LOGDEPTHBUF ) && defined( USE_LOGDEPTHBUF_EXT )\n\tgl_FragDepthEXT = vIsPerspective == 0.0 ? gl_FragCoord.z : log2( vFragDepth ) * logDepthBufFC * 0.5;\n#endif",logdepthbuf_pars_fragment:"#if defined( USE_LOGDEPTHBUF ) && defined( USE_LOGDEPTHBUF_EXT )\n\tuniform float logDepthBufFC;\n\tvarying float vFragDepth;\n\tvarying float vIsPerspective;\n#endif",logdepthbuf_pars_vertex:"#ifdef USE_LOGDEPTHBUF\n\t#ifdef USE_LOGDEPTHBUF_EXT\n\t\tvarying float vFragDepth;\n\t\tvarying float vIsPerspective;\n\t#else\n\t\tuniform float logDepthBufFC;\n\t#endif\n#endif",logdepthbuf_vertex:"#ifdef USE_LOGDEPTHBUF\n\t#ifdef USE_LOGDEPTHBUF_EXT\n\t\tvFragDepth = 1.0 + gl_Position.w;\n\t\tvIsPerspective = float( isPerspectiveMatrix( projectionMatrix ) );\n\t#else\n\t\tif ( isPerspectiveMatrix( projectionMatrix ) ) {\n\t\t\tgl_Position.z = log2( max( EPSILON, gl_Position.w + 1.0 ) ) * logDepthBufFC - 1.0;\n\t\t\tgl_Position.z *= gl_Position.w;\n\t\t}\n\t#endif\n#endif",map_fragment:"#ifdef USE_MAP\n\tvec4 sampledDiffuseColor = texture2D( map, vMapUv );\n\t#ifdef DECODE_VIDEO_TEXTURE\n\t\tsampledDiffuseColor = vec4( mix( pow( sampledDiffuseColor.rgb * 0.9478672986 + vec3( 0.0521327014 ), vec3( 2.4 ) ), sampledDiffuseColor.rgb * 0.0773993808, vec3( lessThanEqual( sampledDiffuseColor.rgb, vec3( 0.04045 ) ) ) ), sampledDiffuseColor.w );\n\t\n\t#endif\n\tdiffuseColor *= sampledDiffuseColor;\n#endif",map_pars_fragment:"#ifdef USE_MAP\n\tuniform sampler2D map;\n#endif",map_particle_fragment:"#if defined( USE_MAP ) || defined( USE_ALPHAMAP )\n\t#if defined( USE_POINTS_UV )\n\t\tvec2 uv = vUv;\n\t#else\n\t\tvec2 uv = ( uvTransform * vec3( gl_PointCoord.x, 1.0 - gl_PointCoord.y, 1 ) ).xy;\n\t#endif\n#endif\n#ifdef USE_MAP\n\tdiffuseColor *= texture2D( map, uv );\n#endif\n#ifdef USE_ALPHAMAP\n\tdiffuseColor.a *= texture2D( alphaMap, uv ).g;\n#endif",map_particle_pars_fragment:"#if defined( USE_POINTS_UV )\n\tvarying vec2 vUv;\n#else\n\t#if defined( USE_MAP ) || defined( USE_ALPHAMAP )\n\t\tuniform mat3 uvTransform;\n\t#endif\n#endif\n#ifdef USE_MAP\n\tuniform sampler2D map;\n#endif\n#ifdef USE_ALPHAMAP\n\tuniform sampler2D alphaMap;\n#endif",metalnessmap_fragment:"float metalnessFactor = metalness;\n#ifdef USE_METALNESSMAP\n\tvec4 texelMetalness = texture2D( metalnessMap, vMetalnessMapUv );\n\tmetalnessFactor *= texelMetalness.b;\n#endif",metalnessmap_pars_fragment:"#ifdef USE_METALNESSMAP\n\tuniform sampler2D metalnessMap;\n#endif",morphcolor_vertex:"#if defined( USE_MORPHCOLORS ) && defined( MORPHTARGETS_TEXTURE )\n\tvColor *= morphTargetBaseInfluence;\n\tfor ( int i = 0; i < MORPHTARGETS_COUNT; i ++ ) {\n\t\t#if defined( USE_COLOR_ALPHA )\n\t\t\tif ( morphTargetInfluences[ i ] != 0.0 ) vColor += getMorph( gl_VertexID, i, 2 ) * morphTargetInfluences[ i ];\n\t\t#elif defined( USE_COLOR )\n\t\t\tif ( morphTargetInfluences[ i ] != 0.0 ) vColor += getMorph( gl_VertexID, i, 2 ).rgb * morphTargetInfluences[ i ];\n\t\t#endif\n\t}\n#endif",morphnormal_vertex:"#ifdef USE_MORPHNORMALS\n\tobjectNormal *= morphTargetBaseInfluence;\n\t#ifdef MORPHTARGETS_TEXTURE\n\t\tfor ( int i = 0; i < MORPHTARGETS_COUNT; i ++ ) {\n\t\t\tif ( morphTargetInfluences[ i ] != 0.0 ) objectNormal += getMorph( gl_VertexID, i, 1 ).xyz * morphTargetInfluences[ i ];\n\t\t}\n\t#else\n\t\tobjectNormal += morphNormal0 * morphTargetInfluences[ 0 ];\n\t\tobjectNormal += morphNormal1 * morphTargetInfluences[ 1 ];\n\t\tobjectNormal += morphNormal2 * morphTargetInfluences[ 2 ];\n\t\tobjectNormal += morphNormal3 * morphTargetInfluences[ 3 ];\n\t#endif\n#endif",morphtarget_pars_vertex:"#ifdef USE_MORPHTARGETS\n\tuniform float morphTargetBaseInfluence;\n\t#ifdef MORPHTARGETS_TEXTURE\n\t\tuniform float morphTargetInfluences[ MORPHTARGETS_COUNT ];\n\t\tuniform sampler2DArray morphTargetsTexture;\n\t\tuniform ivec2 morphTargetsTextureSize;\n\t\tvec4 getMorph( const in int vertexIndex, const in int morphTargetIndex, const in int offset ) {\n\t\t\tint texelIndex = vertexIndex * MORPHTARGETS_TEXTURE_STRIDE + offset;\n\t\t\tint y = texelIndex / morphTargetsTextureSize.x;\n\t\t\tint x = texelIndex - y * morphTargetsTextureSize.x;\n\t\t\tivec3 morphUV = ivec3( x, y, morphTargetIndex );\n\t\t\treturn texelFetch( morphTargetsTexture, morphUV, 0 );\n\t\t}\n\t#else\n\t\t#ifndef USE_MORPHNORMALS\n\t\t\tuniform float morphTargetInfluences[ 8 ];\n\t\t#else\n\t\t\tuniform float morphTargetInfluences[ 4 ];\n\t\t#endif\n\t#endif\n#endif",morphtarget_vertex:"#ifdef USE_MORPHTARGETS\n\ttransformed *= morphTargetBaseInfluence;\n\t#ifdef MORPHTARGETS_TEXTURE\n\t\tfor ( int i = 0; i < MORPHTARGETS_COUNT; i ++ ) {\n\t\t\tif ( morphTargetInfluences[ i ] != 0.0 ) transformed += getMorph( gl_VertexID, i, 0 ).xyz * morphTargetInfluences[ i ];\n\t\t}\n\t#else\n\t\ttransformed += morphTarget0 * morphTargetInfluences[ 0 ];\n\t\ttransformed += morphTarget1 * morphTargetInfluences[ 1 ];\n\t\ttransformed += morphTarget2 * morphTargetInfluences[ 2 ];\n\t\ttransformed += morphTarget3 * morphTargetInfluences[ 3 ];\n\t\t#ifndef USE_MORPHNORMALS\n\t\t\ttransformed += morphTarget4 * morphTargetInfluences[ 4 ];\n\t\t\ttransformed += morphTarget5 * morphTargetInfluences[ 5 ];\n\t\t\ttransformed += morphTarget6 * morphTargetInfluences[ 6 ];\n\t\t\ttransformed += morphTarget7 * morphTargetInfluences[ 7 ];\n\t\t#endif\n\t#endif\n#endif",normal_fragment_begin:"float faceDirection = gl_FrontFacing ? 1.0 : - 1.0;\n#ifdef FLAT_SHADED\n\tvec3 fdx = dFdx( vViewPosition );\n\tvec3 fdy = dFdy( vViewPosition );\n\tvec3 normal = normalize( cross( fdx, fdy ) );\n#else\n\tvec3 normal = normalize( vNormal );\n\t#ifdef DOUBLE_SIDED\n\t\tnormal *= faceDirection;\n\t#endif\n#endif\n#if defined( USE_NORMALMAP_TANGENTSPACE ) || defined( USE_CLEARCOAT_NORMALMAP ) || defined( USE_ANISOTROPY )\n\t#ifdef USE_TANGENT\n\t\tmat3 tbn = mat3( normalize( vTangent ), normalize( vBitangent ), normal );\n\t#else\n\t\tmat3 tbn = getTangentFrame( - vViewPosition, normal,\n\t\t#if defined( USE_NORMALMAP )\n\t\t\tvNormalMapUv\n\t\t#elif defined( USE_CLEARCOAT_NORMALMAP )\n\t\t\tvClearcoatNormalMapUv\n\t\t#else\n\t\t\tvUv\n\t\t#endif\n\t\t);\n\t#endif\n\t#if defined( DOUBLE_SIDED ) && ! defined( FLAT_SHADED )\n\t\ttbn[0] *= faceDirection;\n\t\ttbn[1] *= faceDirection;\n\t#endif\n#endif\n#ifdef USE_CLEARCOAT_NORMALMAP\n\t#ifdef USE_TANGENT\n\t\tmat3 tbn2 = mat3( normalize( vTangent ), normalize( vBitangent ), normal );\n\t#else\n\t\tmat3 tbn2 = getTangentFrame( - vViewPosition, normal, vClearcoatNormalMapUv );\n\t#endif\n\t#if defined( DOUBLE_SIDED ) && ! defined( FLAT_SHADED )\n\t\ttbn2[0] *= faceDirection;\n\t\ttbn2[1] *= faceDirection;\n\t#endif\n#endif\nvec3 nonPerturbedNormal = normal;",normal_fragment_maps:"#ifdef USE_NORMALMAP_OBJECTSPACE\n\tnormal = texture2D( normalMap, vNormalMapUv ).xyz * 2.0 - 1.0;\n\t#ifdef FLIP_SIDED\n\t\tnormal = - normal;\n\t#endif\n\t#ifdef DOUBLE_SIDED\n\t\tnormal = normal * faceDirection;\n\t#endif\n\tnormal = normalize( normalMatrix * normal );\n#elif defined( USE_NORMALMAP_TANGENTSPACE )\n\tvec3 mapN = texture2D( normalMap, vNormalMapUv ).xyz * 2.0 - 1.0;\n\tmapN.xy *= normalScale;\n\tnormal = normalize( tbn * mapN );\n#elif defined( USE_BUMPMAP )\n\tnormal = perturbNormalArb( - vViewPosition, normal, dHdxy_fwd(), faceDirection );\n#endif",normal_pars_fragment:"#ifndef FLAT_SHADED\n\tvarying vec3 vNormal;\n\t#ifdef USE_TANGENT\n\t\tvarying vec3 vTangent;\n\t\tvarying vec3 vBitangent;\n\t#endif\n#endif",normal_pars_vertex:"#ifndef FLAT_SHADED\n\tvarying vec3 vNormal;\n\t#ifdef USE_TANGENT\n\t\tvarying vec3 vTangent;\n\t\tvarying vec3 vBitangent;\n\t#endif\n#endif",normal_vertex:"#ifndef FLAT_SHADED\n\tvNormal = normalize( transformedNormal );\n\t#ifdef USE_TANGENT\n\t\tvTangent = normalize( transformedTangent );\n\t\tvBitangent = normalize( cross( vNormal, vTangent ) * tangent.w );\n\t#endif\n#endif",normalmap_pars_fragment:"#ifdef USE_NORMALMAP\n\tuniform sampler2D normalMap;\n\tuniform vec2 normalScale;\n#endif\n#ifdef USE_NORMALMAP_OBJECTSPACE\n\tuniform mat3 normalMatrix;\n#endif\n#if ! defined ( USE_TANGENT ) && ( defined ( USE_NORMALMAP_TANGENTSPACE ) || defined ( USE_CLEARCOAT_NORMALMAP ) || defined( USE_ANISOTROPY ) )\n\tmat3 getTangentFrame( vec3 eye_pos, vec3 surf_norm, vec2 uv ) {\n\t\tvec3 q0 = dFdx( eye_pos.xyz );\n\t\tvec3 q1 = dFdy( eye_pos.xyz );\n\t\tvec2 st0 = dFdx( uv.st );\n\t\tvec2 st1 = dFdy( uv.st );\n\t\tvec3 N = surf_norm;\n\t\tvec3 q1perp = cross( q1, N );\n\t\tvec3 q0perp = cross( N, q0 );\n\t\tvec3 T = q1perp * st0.x + q0perp * st1.x;\n\t\tvec3 B = q1perp * st0.y + q0perp * st1.y;\n\t\tfloat det = max( dot( T, T ), dot( B, B ) );\n\t\tfloat scale = ( det == 0.0 ) ? 0.0 : inversesqrt( det );\n\t\treturn mat3( T * scale, B * scale, N );\n\t}\n#endif",clearcoat_normal_fragment_begin:"#ifdef USE_CLEARCOAT\n\tvec3 clearcoatNormal = nonPerturbedNormal;\n#endif",clearcoat_normal_fragment_maps:"#ifdef USE_CLEARCOAT_NORMALMAP\n\tvec3 clearcoatMapN = texture2D( clearcoatNormalMap, vClearcoatNormalMapUv ).xyz * 2.0 - 1.0;\n\tclearcoatMapN.xy *= clearcoatNormalScale;\n\tclearcoatNormal = normalize( tbn2 * clearcoatMapN );\n#endif",clearcoat_pars_fragment:"#ifdef USE_CLEARCOATMAP\n\tuniform sampler2D clearcoatMap;\n#endif\n#ifdef USE_CLEARCOAT_NORMALMAP\n\tuniform sampler2D clearcoatNormalMap;\n\tuniform vec2 clearcoatNormalScale;\n#endif\n#ifdef USE_CLEARCOAT_ROUGHNESSMAP\n\tuniform sampler2D clearcoatRoughnessMap;\n#endif",iridescence_pars_fragment:"#ifdef USE_IRIDESCENCEMAP\n\tuniform sampler2D iridescenceMap;\n#endif\n#ifdef USE_IRIDESCENCE_THICKNESSMAP\n\tuniform sampler2D iridescenceThicknessMap;\n#endif",opaque_fragment:"#ifdef OPAQUE\ndiffuseColor.a = 1.0;\n#endif\n#ifdef USE_TRANSMISSION\ndiffuseColor.a *= material.transmissionAlpha;\n#endif\ngl_FragColor = vec4( outgoingLight, diffuseColor.a );",packing:"vec3 packNormalToRGB( const in vec3 normal ) {\n\treturn normalize( normal ) * 0.5 + 0.5;\n}\nvec3 unpackRGBToNormal( const in vec3 rgb ) {\n\treturn 2.0 * rgb.xyz - 1.0;\n}\nconst float PackUpscale = 256. / 255.;const float UnpackDownscale = 255. / 256.;\nconst vec3 PackFactors = vec3( 256. * 256. * 256., 256. * 256., 256. );\nconst vec4 UnpackFactors = UnpackDownscale / vec4( PackFactors, 1. );\nconst float ShiftRight8 = 1. / 256.;\nvec4 packDepthToRGBA( const in float v ) {\n\tvec4 r = vec4( fract( v * PackFactors ), v );\n\tr.yzw -= r.xyz * ShiftRight8;\treturn r * PackUpscale;\n}\nfloat unpackRGBAToDepth( const in vec4 v ) {\n\treturn dot( v, UnpackFactors );\n}\nvec2 packDepthToRG( in highp float v ) {\n\treturn packDepthToRGBA( v ).yx;\n}\nfloat unpackRGToDepth( const in highp vec2 v ) {\n\treturn unpackRGBAToDepth( vec4( v.xy, 0.0, 0.0 ) );\n}\nvec4 pack2HalfToRGBA( vec2 v ) {\n\tvec4 r = vec4( v.x, fract( v.x * 255.0 ), v.y, fract( v.y * 255.0 ) );\n\treturn vec4( r.x - r.y / 255.0, r.y, r.z - r.w / 255.0, r.w );\n}\nvec2 unpackRGBATo2Half( vec4 v ) {\n\treturn vec2( v.x + ( v.y / 255.0 ), v.z + ( v.w / 255.0 ) );\n}\nfloat viewZToOrthographicDepth( const in float viewZ, const in float near, const in float far ) {\n\treturn ( viewZ + near ) / ( near - far );\n}\nfloat orthographicDepthToViewZ( const in float depth, const in float near, const in float far ) {\n\treturn depth * ( near - far ) - near;\n}\nfloat viewZToPerspectiveDepth( const in float viewZ, const in float near, const in float far ) {\n\treturn ( ( near + viewZ ) * far ) / ( ( far - near ) * viewZ );\n}\nfloat perspectiveDepthToViewZ( const in float depth, const in float near, const in float far ) {\n\treturn ( near * far ) / ( ( far - near ) * depth - far );\n}",premultiplied_alpha_fragment:"#ifdef PREMULTIPLIED_ALPHA\n\tgl_FragColor.rgb *= gl_FragColor.a;\n#endif",project_vertex:"vec4 mvPosition = vec4( transformed, 1.0 );\n#ifdef USE_BATCHING\n\tmvPosition = batchingMatrix * mvPosition;\n#endif\n#ifdef USE_INSTANCING\n\tmvPosition = instanceMatrix * mvPosition;\n#endif\nmvPosition = modelViewMatrix * mvPosition;\ngl_Position = projectionMatrix * mvPosition;",dithering_fragment:"#ifdef DITHERING\n\tgl_FragColor.rgb = dithering( gl_FragColor.rgb );\n#endif",dithering_pars_fragment:"#ifdef DITHERING\n\tvec3 dithering( vec3 color ) {\n\t\tfloat grid_position = rand( gl_FragCoord.xy );\n\t\tvec3 dither_shift_RGB = vec3( 0.25 / 255.0, -0.25 / 255.0, 0.25 / 255.0 );\n\t\tdither_shift_RGB = mix( 2.0 * dither_shift_RGB, -2.0 * dither_shift_RGB, grid_position );\n\t\treturn color + dither_shift_RGB;\n\t}\n#endif",roughnessmap_fragment:"float roughnessFactor = roughness;\n#ifdef USE_ROUGHNESSMAP\n\tvec4 texelRoughness = texture2D( roughnessMap, vRoughnessMapUv );\n\troughnessFactor *= texelRoughness.g;\n#endif",roughnessmap_pars_fragment:"#ifdef USE_ROUGHNESSMAP\n\tuniform sampler2D roughnessMap;\n#endif",shadowmap_pars_fragment:"#if NUM_SPOT_LIGHT_COORDS > 0\n\tvarying vec4 vSpotLightCoord[ NUM_SPOT_LIGHT_COORDS ];\n#endif\n#if NUM_SPOT_LIGHT_MAPS > 0\n\tuniform sampler2D spotLightMap[ NUM_SPOT_LIGHT_MAPS ];\n#endif\n#ifdef USE_SHADOWMAP\n\t#if NUM_DIR_LIGHT_SHADOWS > 0\n\t\tuniform sampler2D directionalShadowMap[ NUM_DIR_LIGHT_SHADOWS ];\n\t\tvarying vec4 vDirectionalShadowCoord[ NUM_DIR_LIGHT_SHADOWS ];\n\t\tstruct DirectionalLightShadow {\n\t\t\tfloat shadowBias;\n\t\t\tfloat shadowNormalBias;\n\t\t\tfloat shadowRadius;\n\t\t\tvec2 shadowMapSize;\n\t\t};\n\t\tuniform DirectionalLightShadow directionalLightShadows[ NUM_DIR_LIGHT_SHADOWS ];\n\t#endif\n\t#if NUM_SPOT_LIGHT_SHADOWS > 0\n\t\tuniform sampler2D spotShadowMap[ NUM_SPOT_LIGHT_SHADOWS ];\n\t\tstruct SpotLightShadow {\n\t\t\tfloat shadowBias;\n\t\t\tfloat shadowNormalBias;\n\t\t\tfloat shadowRadius;\n\t\t\tvec2 shadowMapSize;\n\t\t};\n\t\tuniform SpotLightShadow spotLightShadows[ NUM_SPOT_LIGHT_SHADOWS ];\n\t#endif\n\t#if NUM_POINT_LIGHT_SHADOWS > 0\n\t\tuniform sampler2D pointShadowMap[ NUM_POINT_LIGHT_SHADOWS ];\n\t\tvarying vec4 vPointShadowCoord[ NUM_POINT_LIGHT_SHADOWS ];\n\t\tstruct PointLightShadow {\n\t\t\tfloat shadowBias;\n\t\t\tfloat shadowNormalBias;\n\t\t\tfloat shadowRadius;\n\t\t\tvec2 shadowMapSize;\n\t\t\tfloat shadowCameraNear;\n\t\t\tfloat shadowCameraFar;\n\t\t};\n\t\tuniform PointLightShadow pointLightShadows[ NUM_POINT_LIGHT_SHADOWS ];\n\t#endif\n\tfloat texture2DCompare( sampler2D depths, vec2 uv, float compare ) {\n\t\treturn step( compare, unpackRGBAToDepth( texture2D( depths, uv ) ) );\n\t}\n\tvec2 texture2DDistribution( sampler2D shadow, vec2 uv ) {\n\t\treturn unpackRGBATo2Half( texture2D( shadow, uv ) );\n\t}\n\tfloat VSMShadow (sampler2D shadow, vec2 uv, float compare ){\n\t\tfloat occlusion = 1.0;\n\t\tvec2 distribution = texture2DDistribution( shadow, uv );\n\t\tfloat hard_shadow = step( compare , distribution.x );\n\t\tif (hard_shadow != 1.0 ) {\n\t\t\tfloat distance = compare - distribution.x ;\n\t\t\tfloat variance = max( 0.00000, distribution.y * distribution.y );\n\t\t\tfloat softness_probability = variance / (variance + distance * distance );\t\t\tsoftness_probability = clamp( ( softness_probability - 0.3 ) / ( 0.95 - 0.3 ), 0.0, 1.0 );\t\t\tocclusion = clamp( max( hard_shadow, softness_probability ), 0.0, 1.0 );\n\t\t}\n\t\treturn occlusion;\n\t}\n\tfloat getShadow( sampler2D shadowMap, vec2 shadowMapSize, float shadowBias, float shadowRadius, vec4 shadowCoord ) {\n\t\tfloat shadow = 1.0;\n\t\tshadowCoord.xyz /= shadowCoord.w;\n\t\tshadowCoord.z += shadowBias;\n\t\tbool inFrustum = shadowCoord.x >= 0.0 && shadowCoord.x <= 1.0 && shadowCoord.y >= 0.0 && shadowCoord.y <= 1.0;\n\t\tbool frustumTest = inFrustum && shadowCoord.z <= 1.0;\n\t\tif ( frustumTest ) {\n\t\t#if defined( SHADOWMAP_TYPE_PCF )\n\t\t\tvec2 texelSize = vec2( 1.0 ) / shadowMapSize;\n\t\t\tfloat dx0 = - texelSize.x * shadowRadius;\n\t\t\tfloat dy0 = - texelSize.y * shadowRadius;\n\t\t\tfloat dx1 = + texelSize.x * shadowRadius;\n\t\t\tfloat dy1 = + texelSize.y * shadowRadius;\n\t\t\tfloat dx2 = dx0 / 2.0;\n\t\t\tfloat dy2 = dy0 / 2.0;\n\t\t\tfloat dx3 = dx1 / 2.0;\n\t\t\tfloat dy3 = dy1 / 2.0;\n\t\t\tshadow = (\n\t\t\t\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( dx0, dy0 ), shadowCoord.z ) +\n\t\t\t\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( 0.0, dy0 ), shadowCoord.z ) +\n\t\t\t\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( dx1, dy0 ), shadowCoord.z ) +\n\t\t\t\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( dx2, dy2 ), shadowCoord.z ) +\n\t\t\t\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( 0.0, dy2 ), shadowCoord.z ) +\n\t\t\t\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( dx3, dy2 ), shadowCoord.z ) +\n\t\t\t\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( dx0, 0.0 ), shadowCoord.z ) +\n\t\t\t\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( dx2, 0.0 ), shadowCoord.z ) +\n\t\t\t\ttexture2DCompare( shadowMap, shadowCoord.xy, shadowCoord.z ) +\n\t\t\t\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( dx3, 0.0 ), shadowCoord.z ) +\n\t\t\t\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( dx1, 0.0 ), shadowCoord.z ) +\n\t\t\t\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( dx2, dy3 ), shadowCoord.z ) +\n\t\t\t\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( 0.0, dy3 ), shadowCoord.z ) +\n\t\t\t\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( dx3, dy3 ), shadowCoord.z ) +\n\t\t\t\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( dx0, dy1 ), shadowCoord.z ) +\n\t\t\t\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( 0.0, dy1 ), shadowCoord.z ) +\n\t\t\t\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( dx1, dy1 ), shadowCoord.z )\n\t\t\t) * ( 1.0 / 17.0 );\n\t\t#elif defined( SHADOWMAP_TYPE_PCF_SOFT )\n\t\t\tvec2 texelSize = vec2( 1.0 ) / shadowMapSize;\n\t\t\tfloat dx = texelSize.x;\n\t\t\tfloat dy = texelSize.y;\n\t\t\tvec2 uv = shadowCoord.xy;\n\t\t\tvec2 f = fract( uv * shadowMapSize + 0.5 );\n\t\t\tuv -= f * texelSize;\n\t\t\tshadow = (\n\t\t\t\ttexture2DCompare( shadowMap, uv, shadowCoord.z ) +\n\t\t\t\ttexture2DCompare( shadowMap, uv + vec2( dx, 0.0 ), shadowCoord.z ) +\n\t\t\t\ttexture2DCompare( shadowMap, uv + vec2( 0.0, dy ), shadowCoord.z ) +\n\t\t\t\ttexture2DCompare( shadowMap, uv + texelSize, shadowCoord.z ) +\n\t\t\t\tmix( texture2DCompare( shadowMap, uv + vec2( -dx, 0.0 ), shadowCoord.z ),\n\t\t\t\t\t texture2DCompare( shadowMap, uv + vec2( 2.0 * dx, 0.0 ), shadowCoord.z ),\n\t\t\t\t\t f.x ) +\n\t\t\t\tmix( texture2DCompare( shadowMap, uv + vec2( -dx, dy ), shadowCoord.z ),\n\t\t\t\t\t texture2DCompare( shadowMap, uv + vec2( 2.0 * dx, dy ), shadowCoord.z ),\n\t\t\t\t\t f.x ) +\n\t\t\t\tmix( texture2DCompare( shadowMap, uv + vec2( 0.0, -dy ), shadowCoord.z ),\n\t\t\t\t\t texture2DCompare( shadowMap, uv + vec2( 0.0, 2.0 * dy ), shadowCoord.z ),\n\t\t\t\t\t f.y ) +\n\t\t\t\tmix( texture2DCompare( shadowMap, uv + vec2( dx, -dy ), shadowCoord.z ),\n\t\t\t\t\t texture2DCompare( shadowMap, uv + vec2( dx, 2.0 * dy ), shadowCoord.z ),\n\t\t\t\t\t f.y ) +\n\t\t\t\tmix( mix( texture2DCompare( shadowMap, uv + vec2( -dx, -dy ), shadowCoord.z ),\n\t\t\t\t\t\t texture2DCompare( shadowMap, uv + vec2( 2.0 * dx, -dy ), shadowCoord.z ),\n\t\t\t\t\t\t f.x ),\n\t\t\t\t\t mix( texture2DCompare( shadowMap, uv + vec2( -dx, 2.0 * dy ), shadowCoord.z ),\n\t\t\t\t\t\t texture2DCompare( shadowMap, uv + vec2( 2.0 * dx, 2.0 * dy ), shadowCoord.z ),\n\t\t\t\t\t\t f.x ),\n\t\t\t\t\t f.y )\n\t\t\t) * ( 1.0 / 9.0 );\n\t\t#elif defined( SHADOWMAP_TYPE_VSM )\n\t\t\tshadow = VSMShadow( shadowMap, shadowCoord.xy, shadowCoord.z );\n\t\t#else\n\t\t\tshadow = texture2DCompare( shadowMap, shadowCoord.xy, shadowCoord.z );\n\t\t#endif\n\t\t}\n\t\treturn shadow;\n\t}\n\tvec2 cubeToUV( vec3 v, float texelSizeY ) {\n\t\tvec3 absV = abs( v );\n\t\tfloat scaleToCube = 1.0 / max( absV.x, max( absV.y, absV.z ) );\n\t\tabsV *= scaleToCube;\n\t\tv *= scaleToCube * ( 1.0 - 2.0 * texelSizeY );\n\t\tvec2 planar = v.xy;\n\t\tfloat almostATexel = 1.5 * texelSizeY;\n\t\tfloat almostOne = 1.0 - almostATexel;\n\t\tif ( absV.z >= almostOne ) {\n\t\t\tif ( v.z > 0.0 )\n\t\t\t\tplanar.x = 4.0 - v.x;\n\t\t} else if ( absV.x >= almostOne ) {\n\t\t\tfloat signX = sign( v.x );\n\t\t\tplanar.x = v.z * signX + 2.0 * signX;\n\t\t} else if ( absV.y >= almostOne ) {\n\t\t\tfloat signY = sign( v.y );\n\t\t\tplanar.x = v.x + 2.0 * signY + 2.0;\n\t\t\tplanar.y = v.z * signY - 2.0;\n\t\t}\n\t\treturn vec2( 0.125, 0.25 ) * planar + vec2( 0.375, 0.75 );\n\t}\n\tfloat getPointShadow( sampler2D shadowMap, vec2 shadowMapSize, float shadowBias, float shadowRadius, vec4 shadowCoord, float shadowCameraNear, float shadowCameraFar ) {\n\t\tvec2 texelSize = vec2( 1.0 ) / ( shadowMapSize * vec2( 4.0, 2.0 ) );\n\t\tvec3 lightToPosition = shadowCoord.xyz;\n\t\tfloat dp = ( length( lightToPosition ) - shadowCameraNear ) / ( shadowCameraFar - shadowCameraNear );\t\tdp += shadowBias;\n\t\tvec3 bd3D = normalize( lightToPosition );\n\t\t#if defined( SHADOWMAP_TYPE_PCF ) || defined( SHADOWMAP_TYPE_PCF_SOFT ) || defined( SHADOWMAP_TYPE_VSM )\n\t\t\tvec2 offset = vec2( - 1, 1 ) * shadowRadius * texelSize.y;\n\t\t\treturn (\n\t\t\t\ttexture2DCompare( shadowMap, cubeToUV( bd3D + offset.xyy, texelSize.y ), dp ) +\n\t\t\t\ttexture2DCompare( shadowMap, cubeToUV( bd3D + offset.yyy, texelSize.y ), dp ) +\n\t\t\t\ttexture2DCompare( shadowMap, cubeToUV( bd3D + offset.xyx, texelSize.y ), dp ) +\n\t\t\t\ttexture2DCompare( shadowMap, cubeToUV( bd3D + offset.yyx, texelSize.y ), dp ) +\n\t\t\t\ttexture2DCompare( shadowMap, cubeToUV( bd3D, texelSize.y ), dp ) +\n\t\t\t\ttexture2DCompare( shadowMap, cubeToUV( bd3D + offset.xxy, texelSize.y ), dp ) +\n\t\t\t\ttexture2DCompare( shadowMap, cubeToUV( bd3D + offset.yxy, texelSize.y ), dp ) +\n\t\t\t\ttexture2DCompare( shadowMap, cubeToUV( bd3D + offset.xxx, texelSize.y ), dp ) +\n\t\t\t\ttexture2DCompare( shadowMap, cubeToUV( bd3D + offset.yxx, texelSize.y ), dp )\n\t\t\t) * ( 1.0 / 9.0 );\n\t\t#else\n\t\t\treturn texture2DCompare( shadowMap, cubeToUV( bd3D, texelSize.y ), dp );\n\t\t#endif\n\t}\n#endif",shadowmap_pars_vertex:"#if NUM_SPOT_LIGHT_COORDS > 0\n\tuniform mat4 spotLightMatrix[ NUM_SPOT_LIGHT_COORDS ];\n\tvarying vec4 vSpotLightCoord[ NUM_SPOT_LIGHT_COORDS ];\n#endif\n#ifdef USE_SHADOWMAP\n\t#if NUM_DIR_LIGHT_SHADOWS > 0\n\t\tuniform mat4 directionalShadowMatrix[ NUM_DIR_LIGHT_SHADOWS ];\n\t\tvarying vec4 vDirectionalShadowCoord[ NUM_DIR_LIGHT_SHADOWS ];\n\t\tstruct DirectionalLightShadow {\n\t\t\tfloat shadowBias;\n\t\t\tfloat shadowNormalBias;\n\t\t\tfloat shadowRadius;\n\t\t\tvec2 shadowMapSize;\n\t\t};\n\t\tuniform DirectionalLightShadow directionalLightShadows[ NUM_DIR_LIGHT_SHADOWS ];\n\t#endif\n\t#if NUM_SPOT_LIGHT_SHADOWS > 0\n\t\tstruct SpotLightShadow {\n\t\t\tfloat shadowBias;\n\t\t\tfloat shadowNormalBias;\n\t\t\tfloat shadowRadius;\n\t\t\tvec2 shadowMapSize;\n\t\t};\n\t\tuniform SpotLightShadow spotLightShadows[ NUM_SPOT_LIGHT_SHADOWS ];\n\t#endif\n\t#if NUM_POINT_LIGHT_SHADOWS > 0\n\t\tuniform mat4 pointShadowMatrix[ NUM_POINT_LIGHT_SHADOWS ];\n\t\tvarying vec4 vPointShadowCoord[ NUM_POINT_LIGHT_SHADOWS ];\n\t\tstruct PointLightShadow {\n\t\t\tfloat shadowBias;\n\t\t\tfloat shadowNormalBias;\n\t\t\tfloat shadowRadius;\n\t\t\tvec2 shadowMapSize;\n\t\t\tfloat shadowCameraNear;\n\t\t\tfloat shadowCameraFar;\n\t\t};\n\t\tuniform PointLightShadow pointLightShadows[ NUM_POINT_LIGHT_SHADOWS ];\n\t#endif\n#endif",shadowmap_vertex:"#if ( defined( USE_SHADOWMAP ) && ( NUM_DIR_LIGHT_SHADOWS > 0 || NUM_POINT_LIGHT_SHADOWS > 0 ) ) || ( NUM_SPOT_LIGHT_COORDS > 0 )\n\tvec3 shadowWorldNormal = inverseTransformDirection( transformedNormal, viewMatrix );\n\tvec4 shadowWorldPosition;\n#endif\n#if defined( USE_SHADOWMAP )\n\t#if NUM_DIR_LIGHT_SHADOWS > 0\n\t\t#pragma unroll_loop_start\n\t\tfor ( int i = 0; i < NUM_DIR_LIGHT_SHADOWS; i ++ ) {\n\t\t\tshadowWorldPosition = worldPosition + vec4( shadowWorldNormal * directionalLightShadows[ i ].shadowNormalBias, 0 );\n\t\t\tvDirectionalShadowCoord[ i ] = directionalShadowMatrix[ i ] * shadowWorldPosition;\n\t\t}\n\t\t#pragma unroll_loop_end\n\t#endif\n\t#if NUM_POINT_LIGHT_SHADOWS > 0\n\t\t#pragma unroll_loop_start\n\t\tfor ( int i = 0; i < NUM_POINT_LIGHT_SHADOWS; i ++ ) {\n\t\t\tshadowWorldPosition = worldPosition + vec4( shadowWorldNormal * pointLightShadows[ i ].shadowNormalBias, 0 );\n\t\t\tvPointShadowCoord[ i ] = pointShadowMatrix[ i ] * shadowWorldPosition;\n\t\t}\n\t\t#pragma unroll_loop_end\n\t#endif\n#endif\n#if NUM_SPOT_LIGHT_COORDS > 0\n\t#pragma unroll_loop_start\n\tfor ( int i = 0; i < NUM_SPOT_LIGHT_COORDS; i ++ ) {\n\t\tshadowWorldPosition = worldPosition;\n\t\t#if ( defined( USE_SHADOWMAP ) && UNROLLED_LOOP_INDEX < NUM_SPOT_LIGHT_SHADOWS )\n\t\t\tshadowWorldPosition.xyz += shadowWorldNormal * spotLightShadows[ i ].shadowNormalBias;\n\t\t#endif\n\t\tvSpotLightCoord[ i ] = spotLightMatrix[ i ] * shadowWorldPosition;\n\t}\n\t#pragma unroll_loop_end\n#endif",shadowmask_pars_fragment:"float getShadowMask() {\n\tfloat shadow = 1.0;\n\t#ifdef USE_SHADOWMAP\n\t#if NUM_DIR_LIGHT_SHADOWS > 0\n\tDirectionalLightShadow directionalLight;\n\t#pragma unroll_loop_start\n\tfor ( int i = 0; i < NUM_DIR_LIGHT_SHADOWS; i ++ ) {\n\t\tdirectionalLight = directionalLightShadows[ i ];\n\t\tshadow *= receiveShadow ? getShadow( directionalShadowMap[ i ], directionalLight.shadowMapSize, directionalLight.shadowBias, directionalLight.shadowRadius, vDirectionalShadowCoord[ i ] ) : 1.0;\n\t}\n\t#pragma unroll_loop_end\n\t#endif\n\t#if NUM_SPOT_LIGHT_SHADOWS > 0\n\tSpotLightShadow spotLight;\n\t#pragma unroll_loop_start\n\tfor ( int i = 0; i < NUM_SPOT_LIGHT_SHADOWS; i ++ ) {\n\t\tspotLight = spotLightShadows[ i ];\n\t\tshadow *= receiveShadow ? getShadow( spotShadowMap[ i ], spotLight.shadowMapSize, spotLight.shadowBias, spotLight.shadowRadius, vSpotLightCoord[ i ] ) : 1.0;\n\t}\n\t#pragma unroll_loop_end\n\t#endif\n\t#if NUM_POINT_LIGHT_SHADOWS > 0\n\tPointLightShadow pointLight;\n\t#pragma unroll_loop_start\n\tfor ( int i = 0; i < NUM_POINT_LIGHT_SHADOWS; i ++ ) {\n\t\tpointLight = pointLightShadows[ i ];\n\t\tshadow *= receiveShadow ? getPointShadow( pointShadowMap[ i ], pointLight.shadowMapSize, pointLight.shadowBias, pointLight.shadowRadius, vPointShadowCoord[ i ], pointLight.shadowCameraNear, pointLight.shadowCameraFar ) : 1.0;\n\t}\n\t#pragma unroll_loop_end\n\t#endif\n\t#endif\n\treturn shadow;\n}",skinbase_vertex:"#ifdef USE_SKINNING\n\tmat4 boneMatX = getBoneMatrix( skinIndex.x );\n\tmat4 boneMatY = getBoneMatrix( skinIndex.y );\n\tmat4 boneMatZ = getBoneMatrix( skinIndex.z );\n\tmat4 boneMatW = getBoneMatrix( skinIndex.w );\n#endif",skinning_pars_vertex:"#ifdef USE_SKINNING\n\tuniform mat4 bindMatrix;\n\tuniform mat4 bindMatrixInverse;\n\tuniform highp sampler2D boneTexture;\n\tmat4 getBoneMatrix( const in float i ) {\n\t\tint size = textureSize( boneTexture, 0 ).x;\n\t\tint j = int( i ) * 4;\n\t\tint x = j % size;\n\t\tint y = j / size;\n\t\tvec4 v1 = texelFetch( boneTexture, ivec2( x, y ), 0 );\n\t\tvec4 v2 = texelFetch( boneTexture, ivec2( x + 1, y ), 0 );\n\t\tvec4 v3 = texelFetch( boneTexture, ivec2( x + 2, y ), 0 );\n\t\tvec4 v4 = texelFetch( boneTexture, ivec2( x + 3, y ), 0 );\n\t\treturn mat4( v1, v2, v3, v4 );\n\t}\n#endif",skinning_vertex:"#ifdef USE_SKINNING\n\tvec4 skinVertex = bindMatrix * vec4( transformed, 1.0 );\n\tvec4 skinned = vec4( 0.0 );\n\tskinned += boneMatX * skinVertex * skinWeight.x;\n\tskinned += boneMatY * skinVertex * skinWeight.y;\n\tskinned += boneMatZ * skinVertex * skinWeight.z;\n\tskinned += boneMatW * skinVertex * skinWeight.w;\n\ttransformed = ( bindMatrixInverse * skinned ).xyz;\n#endif",skinnormal_vertex:"#ifdef USE_SKINNING\n\tmat4 skinMatrix = mat4( 0.0 );\n\tskinMatrix += skinWeight.x * boneMatX;\n\tskinMatrix += skinWeight.y * boneMatY;\n\tskinMatrix += skinWeight.z * boneMatZ;\n\tskinMatrix += skinWeight.w * boneMatW;\n\tskinMatrix = bindMatrixInverse * skinMatrix * bindMatrix;\n\tobjectNormal = vec4( skinMatrix * vec4( objectNormal, 0.0 ) ).xyz;\n\t#ifdef USE_TANGENT\n\t\tobjectTangent = vec4( skinMatrix * vec4( objectTangent, 0.0 ) ).xyz;\n\t#endif\n#endif",specularmap_fragment:"float specularStrength;\n#ifdef USE_SPECULARMAP\n\tvec4 texelSpecular = texture2D( specularMap, vSpecularMapUv );\n\tspecularStrength = texelSpecular.r;\n#else\n\tspecularStrength = 1.0;\n#endif",specularmap_pars_fragment:"#ifdef USE_SPECULARMAP\n\tuniform sampler2D specularMap;\n#endif",tonemapping_fragment:"#if defined( TONE_MAPPING )\n\tgl_FragColor.rgb = toneMapping( gl_FragColor.rgb );\n#endif",tonemapping_pars_fragment:"#ifndef saturate\n#define saturate( a ) clamp( a, 0.0, 1.0 )\n#endif\nuniform float toneMappingExposure;\nvec3 LinearToneMapping( vec3 color ) {\n\treturn saturate( toneMappingExposure * color );\n}\nvec3 ReinhardToneMapping( vec3 color ) {\n\tcolor *= toneMappingExposure;\n\treturn saturate( color / ( vec3( 1.0 ) + color ) );\n}\nvec3 OptimizedCineonToneMapping( vec3 color ) {\n\tcolor *= toneMappingExposure;\n\tcolor = max( vec3( 0.0 ), color - 0.004 );\n\treturn pow( ( color * ( 6.2 * color + 0.5 ) ) / ( color * ( 6.2 * color + 1.7 ) + 0.06 ), vec3( 2.2 ) );\n}\nvec3 RRTAndODTFit( vec3 v ) {\n\tvec3 a = v * ( v + 0.0245786 ) - 0.000090537;\n\tvec3 b = v * ( 0.983729 * v + 0.4329510 ) + 0.238081;\n\treturn a / b;\n}\nvec3 ACESFilmicToneMapping( vec3 color ) {\n\tconst mat3 ACESInputMat = mat3(\n\t\tvec3( 0.59719, 0.07600, 0.02840 ),\t\tvec3( 0.35458, 0.90834, 0.13383 ),\n\t\tvec3( 0.04823, 0.01566, 0.83777 )\n\t);\n\tconst mat3 ACESOutputMat = mat3(\n\t\tvec3( 1.60475, -0.10208, -0.00327 ),\t\tvec3( -0.53108, 1.10813, -0.07276 ),\n\t\tvec3( -0.07367, -0.00605, 1.07602 )\n\t);\n\tcolor *= toneMappingExposure / 0.6;\n\tcolor = ACESInputMat * color;\n\tcolor = RRTAndODTFit( color );\n\tcolor = ACESOutputMat * color;\n\treturn saturate( color );\n}\nconst mat3 LINEAR_REC2020_TO_LINEAR_SRGB = mat3(\n\tvec3( 1.6605, - 0.1246, - 0.0182 ),\n\tvec3( - 0.5876, 1.1329, - 0.1006 ),\n\tvec3( - 0.0728, - 0.0083, 1.1187 )\n);\nconst mat3 LINEAR_SRGB_TO_LINEAR_REC2020 = mat3(\n\tvec3( 0.6274, 0.0691, 0.0164 ),\n\tvec3( 0.3293, 0.9195, 0.0880 ),\n\tvec3( 0.0433, 0.0113, 0.8956 )\n);\nvec3 agxDefaultContrastApprox( vec3 x ) {\n\tvec3 x2 = x * x;\n\tvec3 x4 = x2 * x2;\n\treturn + 15.5 * x4 * x2\n\t\t- 40.14 * x4 * x\n\t\t+ 31.96 * x4\n\t\t- 6.868 * x2 * x\n\t\t+ 0.4298 * x2\n\t\t+ 0.1191 * x\n\t\t- 0.00232;\n}\nvec3 AgXToneMapping( vec3 color ) {\n\tconst mat3 AgXInsetMatrix = mat3(\n\t\tvec3( 0.856627153315983, 0.137318972929847, 0.11189821299995 ),\n\t\tvec3( 0.0951212405381588, 0.761241990602591, 0.0767994186031903 ),\n\t\tvec3( 0.0482516061458583, 0.101439036467562, 0.811302368396859 )\n\t);\n\tconst mat3 AgXOutsetMatrix = mat3(\n\t\tvec3( 1.1271005818144368, - 0.1413297634984383, - 0.14132976349843826 ),\n\t\tvec3( - 0.11060664309660323, 1.157823702216272, - 0.11060664309660294 ),\n\t\tvec3( - 0.016493938717834573, - 0.016493938717834257, 1.2519364065950405 )\n\t);\n\tconst float AgxMinEv = - 12.47393;\tconst float AgxMaxEv = 4.026069;\n\tcolor = LINEAR_SRGB_TO_LINEAR_REC2020 * color;\n\tcolor *= toneMappingExposure;\n\tcolor = AgXInsetMatrix * color;\n\tcolor = max( color, 1e-10 );\tcolor = log2( color );\n\tcolor = ( color - AgxMinEv ) / ( AgxMaxEv - AgxMinEv );\n\tcolor = clamp( color, 0.0, 1.0 );\n\tcolor = agxDefaultContrastApprox( color );\n\tcolor = AgXOutsetMatrix * color;\n\tcolor = pow( max( vec3( 0.0 ), color ), vec3( 2.2 ) );\n\tcolor = LINEAR_REC2020_TO_LINEAR_SRGB * color;\n\treturn color;\n}\nvec3 CustomToneMapping( vec3 color ) { return color; }",transmission_fragment:"#ifdef USE_TRANSMISSION\n\tmaterial.transmission = transmission;\n\tmaterial.transmissionAlpha = 1.0;\n\tmaterial.thickness = thickness;\n\tmaterial.attenuationDistance = attenuationDistance;\n\tmaterial.attenuationColor = attenuationColor;\n\t#ifdef USE_TRANSMISSIONMAP\n\t\tmaterial.transmission *= texture2D( transmissionMap, vTransmissionMapUv ).r;\n\t#endif\n\t#ifdef USE_THICKNESSMAP\n\t\tmaterial.thickness *= texture2D( thicknessMap, vThicknessMapUv ).g;\n\t#endif\n\tvec3 pos = vWorldPosition;\n\tvec3 v = normalize( cameraPosition - pos );\n\tvec3 n = inverseTransformDirection( normal, viewMatrix );\n\tvec4 transmitted = getIBLVolumeRefraction(\n\t\tn, v, material.roughness, material.diffuseColor, material.specularColor, material.specularF90,\n\t\tpos, modelMatrix, viewMatrix, projectionMatrix, material.ior, material.thickness,\n\t\tmaterial.attenuationColor, material.attenuationDistance );\n\tmaterial.transmissionAlpha = mix( material.transmissionAlpha, transmitted.a, material.transmission );\n\ttotalDiffuse = mix( totalDiffuse, transmitted.rgb, material.transmission );\n#endif",transmission_pars_fragment:"#ifdef USE_TRANSMISSION\n\tuniform float transmission;\n\tuniform float thickness;\n\tuniform float attenuationDistance;\n\tuniform vec3 attenuationColor;\n\t#ifdef USE_TRANSMISSIONMAP\n\t\tuniform sampler2D transmissionMap;\n\t#endif\n\t#ifdef USE_THICKNESSMAP\n\t\tuniform sampler2D thicknessMap;\n\t#endif\n\tuniform vec2 transmissionSamplerSize;\n\tuniform sampler2D transmissionSamplerMap;\n\tuniform mat4 modelMatrix;\n\tuniform mat4 projectionMatrix;\n\tvarying vec3 vWorldPosition;\n\tfloat w0( float a ) {\n\t\treturn ( 1.0 / 6.0 ) * ( a * ( a * ( - a + 3.0 ) - 3.0 ) + 1.0 );\n\t}\n\tfloat w1( float a ) {\n\t\treturn ( 1.0 / 6.0 ) * ( a * a * ( 3.0 * a - 6.0 ) + 4.0 );\n\t}\n\tfloat w2( float a ){\n\t\treturn ( 1.0 / 6.0 ) * ( a * ( a * ( - 3.0 * a + 3.0 ) + 3.0 ) + 1.0 );\n\t}\n\tfloat w3( float a ) {\n\t\treturn ( 1.0 / 6.0 ) * ( a * a * a );\n\t}\n\tfloat g0( float a ) {\n\t\treturn w0( a ) + w1( a );\n\t}\n\tfloat g1( float a ) {\n\t\treturn w2( a ) + w3( a );\n\t}\n\tfloat h0( float a ) {\n\t\treturn - 1.0 + w1( a ) / ( w0( a ) + w1( a ) );\n\t}\n\tfloat h1( float a ) {\n\t\treturn 1.0 + w3( a ) / ( w2( a ) + w3( a ) );\n\t}\n\tvec4 bicubic( sampler2D tex, vec2 uv, vec4 texelSize, float lod ) {\n\t\tuv = uv * texelSize.zw + 0.5;\n\t\tvec2 iuv = floor( uv );\n\t\tvec2 fuv = fract( uv );\n\t\tfloat g0x = g0( fuv.x );\n\t\tfloat g1x = g1( fuv.x );\n\t\tfloat h0x = h0( fuv.x );\n\t\tfloat h1x = h1( fuv.x );\n\t\tfloat h0y = h0( fuv.y );\n\t\tfloat h1y = h1( fuv.y );\n\t\tvec2 p0 = ( vec2( iuv.x + h0x, iuv.y + h0y ) - 0.5 ) * texelSize.xy;\n\t\tvec2 p1 = ( vec2( iuv.x + h1x, iuv.y + h0y ) - 0.5 ) * texelSize.xy;\n\t\tvec2 p2 = ( vec2( iuv.x + h0x, iuv.y + h1y ) - 0.5 ) * texelSize.xy;\n\t\tvec2 p3 = ( vec2( iuv.x + h1x, iuv.y + h1y ) - 0.5 ) * texelSize.xy;\n\t\treturn g0( fuv.y ) * ( g0x * textureLod( tex, p0, lod ) + g1x * textureLod( tex, p1, lod ) ) +\n\t\t\tg1( fuv.y ) * ( g0x * textureLod( tex, p2, lod ) + g1x * textureLod( tex, p3, lod ) );\n\t}\n\tvec4 textureBicubic( sampler2D sampler, vec2 uv, float lod ) {\n\t\tvec2 fLodSize = vec2( textureSize( sampler, int( lod ) ) );\n\t\tvec2 cLodSize = vec2( textureSize( sampler, int( lod + 1.0 ) ) );\n\t\tvec2 fLodSizeInv = 1.0 / fLodSize;\n\t\tvec2 cLodSizeInv = 1.0 / cLodSize;\n\t\tvec4 fSample = bicubic( sampler, uv, vec4( fLodSizeInv, fLodSize ), floor( lod ) );\n\t\tvec4 cSample = bicubic( sampler, uv, vec4( cLodSizeInv, cLodSize ), ceil( lod ) );\n\t\treturn mix( fSample, cSample, fract( lod ) );\n\t}\n\tvec3 getVolumeTransmissionRay( const in vec3 n, const in vec3 v, const in float thickness, const in float ior, const in mat4 modelMatrix ) {\n\t\tvec3 refractionVector = refract( - v, normalize( n ), 1.0 / ior );\n\t\tvec3 modelScale;\n\t\tmodelScale.x = length( vec3( modelMatrix[ 0 ].xyz ) );\n\t\tmodelScale.y = length( vec3( modelMatrix[ 1 ].xyz ) );\n\t\tmodelScale.z = length( vec3( modelMatrix[ 2 ].xyz ) );\n\t\treturn normalize( refractionVector ) * thickness * modelScale;\n\t}\n\tfloat applyIorToRoughness( const in float roughness, const in float ior ) {\n\t\treturn roughness * clamp( ior * 2.0 - 2.0, 0.0, 1.0 );\n\t}\n\tvec4 getTransmissionSample( const in vec2 fragCoord, const in float roughness, const in float ior ) {\n\t\tfloat lod = log2( transmissionSamplerSize.x ) * applyIorToRoughness( roughness, ior );\n\t\treturn textureBicubic( transmissionSamplerMap, fragCoord.xy, lod );\n\t}\n\tvec3 volumeAttenuation( const in float transmissionDistance, const in vec3 attenuationColor, const in float attenuationDistance ) {\n\t\tif ( isinf( attenuationDistance ) ) {\n\t\t\treturn vec3( 1.0 );\n\t\t} else {\n\t\t\tvec3 attenuationCoefficient = -log( attenuationColor ) / attenuationDistance;\n\t\t\tvec3 transmittance = exp( - attenuationCoefficient * transmissionDistance );\t\t\treturn transmittance;\n\t\t}\n\t}\n\tvec4 getIBLVolumeRefraction( const in vec3 n, const in vec3 v, const in float roughness, const in vec3 diffuseColor,\n\t\tconst in vec3 specularColor, const in float specularF90, const in vec3 position, const in mat4 modelMatrix,\n\t\tconst in mat4 viewMatrix, const in mat4 projMatrix, const in float ior, const in float thickness,\n\t\tconst in vec3 attenuationColor, const in float attenuationDistance ) {\n\t\tvec3 transmissionRay = getVolumeTransmissionRay( n, v, thickness, ior, modelMatrix );\n\t\tvec3 refractedRayExit = position + transmissionRay;\n\t\tvec4 ndcPos = projMatrix * viewMatrix * vec4( refractedRayExit, 1.0 );\n\t\tvec2 refractionCoords = ndcPos.xy / ndcPos.w;\n\t\trefractionCoords += 1.0;\n\t\trefractionCoords /= 2.0;\n\t\tvec4 transmittedLight = getTransmissionSample( refractionCoords, roughness, ior );\n\t\tvec3 transmittance = diffuseColor * volumeAttenuation( length( transmissionRay ), attenuationColor, attenuationDistance );\n\t\tvec3 attenuatedColor = transmittance * transmittedLight.rgb;\n\t\tvec3 F = EnvironmentBRDF( n, v, specularColor, specularF90, roughness );\n\t\tfloat transmittanceFactor = ( transmittance.r + transmittance.g + transmittance.b ) / 3.0;\n\t\treturn vec4( ( 1.0 - F ) * attenuatedColor, 1.0 - ( 1.0 - transmittedLight.a ) * transmittanceFactor );\n\t}\n#endif",uv_pars_fragment:"#if defined( USE_UV ) || defined( USE_ANISOTROPY )\n\tvarying vec2 vUv;\n#endif\n#ifdef USE_MAP\n\tvarying vec2 vMapUv;\n#endif\n#ifdef USE_ALPHAMAP\n\tvarying vec2 vAlphaMapUv;\n#endif\n#ifdef USE_LIGHTMAP\n\tvarying vec2 vLightMapUv;\n#endif\n#ifdef USE_AOMAP\n\tvarying vec2 vAoMapUv;\n#endif\n#ifdef USE_BUMPMAP\n\tvarying vec2 vBumpMapUv;\n#endif\n#ifdef USE_NORMALMAP\n\tvarying vec2 vNormalMapUv;\n#endif\n#ifdef USE_EMISSIVEMAP\n\tvarying vec2 vEmissiveMapUv;\n#endif\n#ifdef USE_METALNESSMAP\n\tvarying vec2 vMetalnessMapUv;\n#endif\n#ifdef USE_ROUGHNESSMAP\n\tvarying vec2 vRoughnessMapUv;\n#endif\n#ifdef USE_ANISOTROPYMAP\n\tvarying vec2 vAnisotropyMapUv;\n#endif\n#ifdef USE_CLEARCOATMAP\n\tvarying vec2 vClearcoatMapUv;\n#endif\n#ifdef USE_CLEARCOAT_NORMALMAP\n\tvarying vec2 vClearcoatNormalMapUv;\n#endif\n#ifdef USE_CLEARCOAT_ROUGHNESSMAP\n\tvarying vec2 vClearcoatRoughnessMapUv;\n#endif\n#ifdef USE_IRIDESCENCEMAP\n\tvarying vec2 vIridescenceMapUv;\n#endif\n#ifdef USE_IRIDESCENCE_THICKNESSMAP\n\tvarying vec2 vIridescenceThicknessMapUv;\n#endif\n#ifdef USE_SHEEN_COLORMAP\n\tvarying vec2 vSheenColorMapUv;\n#endif\n#ifdef USE_SHEEN_ROUGHNESSMAP\n\tvarying vec2 vSheenRoughnessMapUv;\n#endif\n#ifdef USE_SPECULARMAP\n\tvarying vec2 vSpecularMapUv;\n#endif\n#ifdef USE_SPECULAR_COLORMAP\n\tvarying vec2 vSpecularColorMapUv;\n#endif\n#ifdef USE_SPECULAR_INTENSITYMAP\n\tvarying vec2 vSpecularIntensityMapUv;\n#endif\n#ifdef USE_TRANSMISSIONMAP\n\tuniform mat3 transmissionMapTransform;\n\tvarying vec2 vTransmissionMapUv;\n#endif\n#ifdef USE_THICKNESSMAP\n\tuniform mat3 thicknessMapTransform;\n\tvarying vec2 vThicknessMapUv;\n#endif",uv_pars_vertex:"#if defined( USE_UV ) || defined( USE_ANISOTROPY )\n\tvarying vec2 vUv;\n#endif\n#ifdef USE_MAP\n\tuniform mat3 mapTransform;\n\tvarying vec2 vMapUv;\n#endif\n#ifdef USE_ALPHAMAP\n\tuniform mat3 alphaMapTransform;\n\tvarying vec2 vAlphaMapUv;\n#endif\n#ifdef USE_LIGHTMAP\n\tuniform mat3 lightMapTransform;\n\tvarying vec2 vLightMapUv;\n#endif\n#ifdef USE_AOMAP\n\tuniform mat3 aoMapTransform;\n\tvarying vec2 vAoMapUv;\n#endif\n#ifdef USE_BUMPMAP\n\tuniform mat3 bumpMapTransform;\n\tvarying vec2 vBumpMapUv;\n#endif\n#ifdef USE_NORMALMAP\n\tuniform mat3 normalMapTransform;\n\tvarying vec2 vNormalMapUv;\n#endif\n#ifdef USE_DISPLACEMENTMAP\n\tuniform mat3 displacementMapTransform;\n\tvarying vec2 vDisplacementMapUv;\n#endif\n#ifdef USE_EMISSIVEMAP\n\tuniform mat3 emissiveMapTransform;\n\tvarying vec2 vEmissiveMapUv;\n#endif\n#ifdef USE_METALNESSMAP\n\tuniform mat3 metalnessMapTransform;\n\tvarying vec2 vMetalnessMapUv;\n#endif\n#ifdef USE_ROUGHNESSMAP\n\tuniform mat3 roughnessMapTransform;\n\tvarying vec2 vRoughnessMapUv;\n#endif\n#ifdef USE_ANISOTROPYMAP\n\tuniform mat3 anisotropyMapTransform;\n\tvarying vec2 vAnisotropyMapUv;\n#endif\n#ifdef USE_CLEARCOATMAP\n\tuniform mat3 clearcoatMapTransform;\n\tvarying vec2 vClearcoatMapUv;\n#endif\n#ifdef USE_CLEARCOAT_NORMALMAP\n\tuniform mat3 clearcoatNormalMapTransform;\n\tvarying vec2 vClearcoatNormalMapUv;\n#endif\n#ifdef USE_CLEARCOAT_ROUGHNESSMAP\n\tuniform mat3 clearcoatRoughnessMapTransform;\n\tvarying vec2 vClearcoatRoughnessMapUv;\n#endif\n#ifdef USE_SHEEN_COLORMAP\n\tuniform mat3 sheenColorMapTransform;\n\tvarying vec2 vSheenColorMapUv;\n#endif\n#ifdef USE_SHEEN_ROUGHNESSMAP\n\tuniform mat3 sheenRoughnessMapTransform;\n\tvarying vec2 vSheenRoughnessMapUv;\n#endif\n#ifdef USE_IRIDESCENCEMAP\n\tuniform mat3 iridescenceMapTransform;\n\tvarying vec2 vIridescenceMapUv;\n#endif\n#ifdef USE_IRIDESCENCE_THICKNESSMAP\n\tuniform mat3 iridescenceThicknessMapTransform;\n\tvarying vec2 vIridescenceThicknessMapUv;\n#endif\n#ifdef USE_SPECULARMAP\n\tuniform mat3 specularMapTransform;\n\tvarying vec2 vSpecularMapUv;\n#endif\n#ifdef USE_SPECULAR_COLORMAP\n\tuniform mat3 specularColorMapTransform;\n\tvarying vec2 vSpecularColorMapUv;\n#endif\n#ifdef USE_SPECULAR_INTENSITYMAP\n\tuniform mat3 specularIntensityMapTransform;\n\tvarying vec2 vSpecularIntensityMapUv;\n#endif\n#ifdef USE_TRANSMISSIONMAP\n\tuniform mat3 transmissionMapTransform;\n\tvarying vec2 vTransmissionMapUv;\n#endif\n#ifdef USE_THICKNESSMAP\n\tuniform mat3 thicknessMapTransform;\n\tvarying vec2 vThicknessMapUv;\n#endif",uv_vertex:"#if defined( USE_UV ) || defined( USE_ANISOTROPY )\n\tvUv = vec3( uv, 1 ).xy;\n#endif\n#ifdef USE_MAP\n\tvMapUv = ( mapTransform * vec3( MAP_UV, 1 ) ).xy;\n#endif\n#ifdef USE_ALPHAMAP\n\tvAlphaMapUv = ( alphaMapTransform * vec3( ALPHAMAP_UV, 1 ) ).xy;\n#endif\n#ifdef USE_LIGHTMAP\n\tvLightMapUv = ( lightMapTransform * vec3( LIGHTMAP_UV, 1 ) ).xy;\n#endif\n#ifdef USE_AOMAP\n\tvAoMapUv = ( aoMapTransform * vec3( AOMAP_UV, 1 ) ).xy;\n#endif\n#ifdef USE_BUMPMAP\n\tvBumpMapUv = ( bumpMapTransform * vec3( BUMPMAP_UV, 1 ) ).xy;\n#endif\n#ifdef USE_NORMALMAP\n\tvNormalMapUv = ( normalMapTransform * vec3( NORMALMAP_UV, 1 ) ).xy;\n#endif\n#ifdef USE_DISPLACEMENTMAP\n\tvDisplacementMapUv = ( displacementMapTransform * vec3( DISPLACEMENTMAP_UV, 1 ) ).xy;\n#endif\n#ifdef USE_EMISSIVEMAP\n\tvEmissiveMapUv = ( emissiveMapTransform * vec3( EMISSIVEMAP_UV, 1 ) ).xy;\n#endif\n#ifdef USE_METALNESSMAP\n\tvMetalnessMapUv = ( metalnessMapTransform * vec3( METALNESSMAP_UV, 1 ) ).xy;\n#endif\n#ifdef USE_ROUGHNESSMAP\n\tvRoughnessMapUv = ( roughnessMapTransform * vec3( ROUGHNESSMAP_UV, 1 ) ).xy;\n#endif\n#ifdef USE_ANISOTROPYMAP\n\tvAnisotropyMapUv = ( anisotropyMapTransform * vec3( ANISOTROPYMAP_UV, 1 ) ).xy;\n#endif\n#ifdef USE_CLEARCOATMAP\n\tvClearcoatMapUv = ( clearcoatMapTransform * vec3( CLEARCOATMAP_UV, 1 ) ).xy;\n#endif\n#ifdef USE_CLEARCOAT_NORMALMAP\n\tvClearcoatNormalMapUv = ( clearcoatNormalMapTransform * vec3( CLEARCOAT_NORMALMAP_UV, 1 ) ).xy;\n#endif\n#ifdef USE_CLEARCOAT_ROUGHNESSMAP\n\tvClearcoatRoughnessMapUv = ( clearcoatRoughnessMapTransform * vec3( CLEARCOAT_ROUGHNESSMAP_UV, 1 ) ).xy;\n#endif\n#ifdef USE_IRIDESCENCEMAP\n\tvIridescenceMapUv = ( iridescenceMapTransform * vec3( IRIDESCENCEMAP_UV, 1 ) ).xy;\n#endif\n#ifdef USE_IRIDESCENCE_THICKNESSMAP\n\tvIridescenceThicknessMapUv = ( iridescenceThicknessMapTransform * vec3( IRIDESCENCE_THICKNESSMAP_UV, 1 ) ).xy;\n#endif\n#ifdef USE_SHEEN_COLORMAP\n\tvSheenColorMapUv = ( sheenColorMapTransform * vec3( SHEEN_COLORMAP_UV, 1 ) ).xy;\n#endif\n#ifdef USE_SHEEN_ROUGHNESSMAP\n\tvSheenRoughnessMapUv = ( sheenRoughnessMapTransform * vec3( SHEEN_ROUGHNESSMAP_UV, 1 ) ).xy;\n#endif\n#ifdef USE_SPECULARMAP\n\tvSpecularMapUv = ( specularMapTransform * vec3( SPECULARMAP_UV, 1 ) ).xy;\n#endif\n#ifdef USE_SPECULAR_COLORMAP\n\tvSpecularColorMapUv = ( specularColorMapTransform * vec3( SPECULAR_COLORMAP_UV, 1 ) ).xy;\n#endif\n#ifdef USE_SPECULAR_INTENSITYMAP\n\tvSpecularIntensityMapUv = ( specularIntensityMapTransform * vec3( SPECULAR_INTENSITYMAP_UV, 1 ) ).xy;\n#endif\n#ifdef USE_TRANSMISSIONMAP\n\tvTransmissionMapUv = ( transmissionMapTransform * vec3( TRANSMISSIONMAP_UV, 1 ) ).xy;\n#endif\n#ifdef USE_THICKNESSMAP\n\tvThicknessMapUv = ( thicknessMapTransform * vec3( THICKNESSMAP_UV, 1 ) ).xy;\n#endif",worldpos_vertex:"#if defined( USE_ENVMAP ) || defined( DISTANCE ) || defined ( USE_SHADOWMAP ) || defined ( USE_TRANSMISSION ) || NUM_SPOT_LIGHT_COORDS > 0\n\tvec4 worldPosition = vec4( transformed, 1.0 );\n\t#ifdef USE_BATCHING\n\t\tworldPosition = batchingMatrix * worldPosition;\n\t#endif\n\t#ifdef USE_INSTANCING\n\t\tworldPosition = instanceMatrix * worldPosition;\n\t#endif\n\tworldPosition = modelMatrix * worldPosition;\n#endif",background_vert:"varying vec2 vUv;\nuniform mat3 uvTransform;\nvoid main() {\n\tvUv = ( uvTransform * vec3( uv, 1 ) ).xy;\n\tgl_Position = vec4( position.xy, 1.0, 1.0 );\n}",background_frag:"uniform sampler2D t2D;\nuniform float backgroundIntensity;\nvarying vec2 vUv;\nvoid main() {\n\tvec4 texColor = texture2D( t2D, vUv );\n\t#ifdef DECODE_VIDEO_TEXTURE\n\t\ttexColor = vec4( mix( pow( texColor.rgb * 0.9478672986 + vec3( 0.0521327014 ), vec3( 2.4 ) ), texColor.rgb * 0.0773993808, vec3( lessThanEqual( texColor.rgb, vec3( 0.04045 ) ) ) ), texColor.w );\n\t#endif\n\ttexColor.rgb *= backgroundIntensity;\n\tgl_FragColor = texColor;\n\t#include \n\t#include \n}",backgroundCube_vert:"varying vec3 vWorldDirection;\n#include \nvoid main() {\n\tvWorldDirection = transformDirection( position, modelMatrix );\n\t#include \n\t#include \n\tgl_Position.z = gl_Position.w;\n}",backgroundCube_frag:"#ifdef ENVMAP_TYPE_CUBE\n\tuniform samplerCube envMap;\n#elif defined( ENVMAP_TYPE_CUBE_UV )\n\tuniform sampler2D envMap;\n#endif\nuniform float flipEnvMap;\nuniform float backgroundBlurriness;\nuniform float backgroundIntensity;\nvarying vec3 vWorldDirection;\n#include \nvoid main() {\n\t#ifdef ENVMAP_TYPE_CUBE\n\t\tvec4 texColor = textureCube( envMap, vec3( flipEnvMap * vWorldDirection.x, vWorldDirection.yz ) );\n\t#elif defined( ENVMAP_TYPE_CUBE_UV )\n\t\tvec4 texColor = textureCubeUV( envMap, vWorldDirection, backgroundBlurriness );\n\t#else\n\t\tvec4 texColor = vec4( 0.0, 0.0, 0.0, 1.0 );\n\t#endif\n\ttexColor.rgb *= backgroundIntensity;\n\tgl_FragColor = texColor;\n\t#include \n\t#include \n}",cube_vert:"varying vec3 vWorldDirection;\n#include \nvoid main() {\n\tvWorldDirection = transformDirection( position, modelMatrix );\n\t#include \n\t#include \n\tgl_Position.z = gl_Position.w;\n}",cube_frag:"uniform samplerCube tCube;\nuniform float tFlip;\nuniform float opacity;\nvarying vec3 vWorldDirection;\nvoid main() {\n\tvec4 texColor = textureCube( tCube, vec3( tFlip * vWorldDirection.x, vWorldDirection.yz ) );\n\tgl_FragColor = texColor;\n\tgl_FragColor.a *= opacity;\n\t#include \n\t#include \n}",depth_vert:"#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \nvarying vec2 vHighPrecisionZW;\nvoid main() {\n\t#include \n\t#include \n\t#include \n\t#ifdef USE_DISPLACEMENTMAP\n\t\t#include \n\t\t#include \n\t\t#include \n\t#endif\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\tvHighPrecisionZW = gl_Position.zw;\n}",depth_frag:"#if DEPTH_PACKING == 3200\n\tuniform float opacity;\n#endif\n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \nvarying vec2 vHighPrecisionZW;\nvoid main() {\n\t#include \n\tvec4 diffuseColor = vec4( 1.0 );\n\t#if DEPTH_PACKING == 3200\n\t\tdiffuseColor.a = opacity;\n\t#endif\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\tfloat fragCoordZ = 0.5 * vHighPrecisionZW[0] / vHighPrecisionZW[1] + 0.5;\n\t#if DEPTH_PACKING == 3200\n\t\tgl_FragColor = vec4( vec3( 1.0 - fragCoordZ ), opacity );\n\t#elif DEPTH_PACKING == 3201\n\t\tgl_FragColor = packDepthToRGBA( fragCoordZ );\n\t#endif\n}",distanceRGBA_vert:"#define DISTANCE\nvarying vec3 vWorldPosition;\n#include \n#include \n#include \n#include \n#include \n#include \n#include \nvoid main() {\n\t#include \n\t#include \n\t#include \n\t#ifdef USE_DISPLACEMENTMAP\n\t\t#include \n\t\t#include \n\t\t#include \n\t#endif\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\tvWorldPosition = worldPosition.xyz;\n}",distanceRGBA_frag:"#define DISTANCE\nuniform vec3 referencePosition;\nuniform float nearDistance;\nuniform float farDistance;\nvarying vec3 vWorldPosition;\n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \nvoid main () {\n\t#include \n\tvec4 diffuseColor = vec4( 1.0 );\n\t#include \n\t#include \n\t#include \n\t#include \n\tfloat dist = length( vWorldPosition - referencePosition );\n\tdist = ( dist - nearDistance ) / ( farDistance - nearDistance );\n\tdist = saturate( dist );\n\tgl_FragColor = packDepthToRGBA( dist );\n}",equirect_vert:"varying vec3 vWorldDirection;\n#include \nvoid main() {\n\tvWorldDirection = transformDirection( position, modelMatrix );\n\t#include \n\t#include \n}",equirect_frag:"uniform sampler2D tEquirect;\nvarying vec3 vWorldDirection;\n#include \nvoid main() {\n\tvec3 direction = normalize( vWorldDirection );\n\tvec2 sampleUV = equirectUv( direction );\n\tgl_FragColor = texture2D( tEquirect, sampleUV );\n\t#include \n\t#include \n}",linedashed_vert:"uniform float scale;\nattribute float lineDistance;\nvarying float vLineDistance;\n#include \n#include \n#include \n#include \n#include \n#include \n#include \nvoid main() {\n\tvLineDistance = scale * lineDistance;\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n}",linedashed_frag:"uniform vec3 diffuse;\nuniform float opacity;\nuniform float dashSize;\nuniform float totalSize;\nvarying float vLineDistance;\n#include \n#include \n#include \n#include \n#include \n#include \n#include \nvoid main() {\n\t#include \n\tif ( mod( vLineDistance, totalSize ) > dashSize ) {\n\t\tdiscard;\n\t}\n\tvec3 outgoingLight = vec3( 0.0 );\n\tvec4 diffuseColor = vec4( diffuse, opacity );\n\t#include \n\t#include \n\t#include \n\toutgoingLight = diffuseColor.rgb;\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n}",meshbasic_vert:"#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \nvoid main() {\n\t#include \n\t#include \n\t#include \n\t#include \n\t#if defined ( USE_ENVMAP ) || defined ( USE_SKINNING )\n\t\t#include \n\t\t#include \n\t\t#include \n\t\t#include \n\t\t#include \n\t#endif\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n}",meshbasic_frag:"uniform vec3 diffuse;\nuniform float opacity;\n#ifndef FLAT_SHADED\n\tvarying vec3 vNormal;\n#endif\n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \nvoid main() {\n\t#include \n\tvec4 diffuseColor = vec4( diffuse, opacity );\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\tReflectedLight reflectedLight = ReflectedLight( vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ) );\n\t#ifdef USE_LIGHTMAP\n\t\tvec4 lightMapTexel = texture2D( lightMap, vLightMapUv );\n\t\treflectedLight.indirectDiffuse += lightMapTexel.rgb * lightMapIntensity * RECIPROCAL_PI;\n\t#else\n\t\treflectedLight.indirectDiffuse += vec3( 1.0 );\n\t#endif\n\t#include \n\treflectedLight.indirectDiffuse *= diffuseColor.rgb;\n\tvec3 outgoingLight = reflectedLight.indirectDiffuse;\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n}",meshlambert_vert:"#define LAMBERT\nvarying vec3 vViewPosition;\n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \nvoid main() {\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\tvViewPosition = - mvPosition.xyz;\n\t#include \n\t#include \n\t#include \n\t#include \n}",meshlambert_frag:"#define LAMBERT\nuniform vec3 diffuse;\nuniform vec3 emissive;\nuniform float opacity;\n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \nvoid main() {\n\t#include \n\tvec4 diffuseColor = vec4( diffuse, opacity );\n\tReflectedLight reflectedLight = ReflectedLight( vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ) );\n\tvec3 totalEmissiveRadiance = emissive;\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\tvec3 outgoingLight = reflectedLight.directDiffuse + reflectedLight.indirectDiffuse + totalEmissiveRadiance;\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n}",meshmatcap_vert:"#define MATCAP\nvarying vec3 vViewPosition;\n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \nvoid main() {\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\tvViewPosition = - mvPosition.xyz;\n}",meshmatcap_frag:"#define MATCAP\nuniform vec3 diffuse;\nuniform float opacity;\nuniform sampler2D matcap;\nvarying vec3 vViewPosition;\n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \nvoid main() {\n\t#include \n\tvec4 diffuseColor = vec4( diffuse, opacity );\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\tvec3 viewDir = normalize( vViewPosition );\n\tvec3 x = normalize( vec3( viewDir.z, 0.0, - viewDir.x ) );\n\tvec3 y = cross( viewDir, x );\n\tvec2 uv = vec2( dot( x, normal ), dot( y, normal ) ) * 0.495 + 0.5;\n\t#ifdef USE_MATCAP\n\t\tvec4 matcapColor = texture2D( matcap, uv );\n\t#else\n\t\tvec4 matcapColor = vec4( vec3( mix( 0.2, 0.8, uv.y ) ), 1.0 );\n\t#endif\n\tvec3 outgoingLight = diffuseColor.rgb * matcapColor.rgb;\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n}",meshnormal_vert:"#define NORMAL\n#if defined( FLAT_SHADED ) || defined( USE_BUMPMAP ) || defined( USE_NORMALMAP_TANGENTSPACE )\n\tvarying vec3 vViewPosition;\n#endif\n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \nvoid main() {\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n#if defined( FLAT_SHADED ) || defined( USE_BUMPMAP ) || defined( USE_NORMALMAP_TANGENTSPACE )\n\tvViewPosition = - mvPosition.xyz;\n#endif\n}",meshnormal_frag:"#define NORMAL\nuniform float opacity;\n#if defined( FLAT_SHADED ) || defined( USE_BUMPMAP ) || defined( USE_NORMALMAP_TANGENTSPACE )\n\tvarying vec3 vViewPosition;\n#endif\n#include \n#include \n#include \n#include \n#include \n#include \n#include \nvoid main() {\n\t#include \n\t#include \n\t#include \n\t#include \n\tgl_FragColor = vec4( packNormalToRGB( normal ), opacity );\n\t#ifdef OPAQUE\n\t\tgl_FragColor.a = 1.0;\n\t#endif\n}",meshphong_vert:"#define PHONG\nvarying vec3 vViewPosition;\n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \nvoid main() {\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\tvViewPosition = - mvPosition.xyz;\n\t#include \n\t#include \n\t#include \n\t#include \n}",meshphong_frag:"#define PHONG\nuniform vec3 diffuse;\nuniform vec3 emissive;\nuniform vec3 specular;\nuniform float shininess;\nuniform float opacity;\n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \nvoid main() {\n\t#include \n\tvec4 diffuseColor = vec4( diffuse, opacity );\n\tReflectedLight reflectedLight = ReflectedLight( vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ) );\n\tvec3 totalEmissiveRadiance = emissive;\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\tvec3 outgoingLight = reflectedLight.directDiffuse + reflectedLight.indirectDiffuse + reflectedLight.directSpecular + reflectedLight.indirectSpecular + totalEmissiveRadiance;\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n}",meshphysical_vert:"#define STANDARD\nvarying vec3 vViewPosition;\n#ifdef USE_TRANSMISSION\n\tvarying vec3 vWorldPosition;\n#endif\n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \nvoid main() {\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\tvViewPosition = - mvPosition.xyz;\n\t#include \n\t#include \n\t#include \n#ifdef USE_TRANSMISSION\n\tvWorldPosition = worldPosition.xyz;\n#endif\n}",meshphysical_frag:"#define STANDARD\n#ifdef PHYSICAL\n\t#define IOR\n\t#define USE_SPECULAR\n#endif\nuniform vec3 diffuse;\nuniform vec3 emissive;\nuniform float roughness;\nuniform float metalness;\nuniform float opacity;\n#ifdef IOR\n\tuniform float ior;\n#endif\n#ifdef USE_SPECULAR\n\tuniform float specularIntensity;\n\tuniform vec3 specularColor;\n\t#ifdef USE_SPECULAR_COLORMAP\n\t\tuniform sampler2D specularColorMap;\n\t#endif\n\t#ifdef USE_SPECULAR_INTENSITYMAP\n\t\tuniform sampler2D specularIntensityMap;\n\t#endif\n#endif\n#ifdef USE_CLEARCOAT\n\tuniform float clearcoat;\n\tuniform float clearcoatRoughness;\n#endif\n#ifdef USE_IRIDESCENCE\n\tuniform float iridescence;\n\tuniform float iridescenceIOR;\n\tuniform float iridescenceThicknessMinimum;\n\tuniform float iridescenceThicknessMaximum;\n#endif\n#ifdef USE_SHEEN\n\tuniform vec3 sheenColor;\n\tuniform float sheenRoughness;\n\t#ifdef USE_SHEEN_COLORMAP\n\t\tuniform sampler2D sheenColorMap;\n\t#endif\n\t#ifdef USE_SHEEN_ROUGHNESSMAP\n\t\tuniform sampler2D sheenRoughnessMap;\n\t#endif\n#endif\n#ifdef USE_ANISOTROPY\n\tuniform vec2 anisotropyVector;\n\t#ifdef USE_ANISOTROPYMAP\n\t\tuniform sampler2D anisotropyMap;\n\t#endif\n#endif\nvarying vec3 vViewPosition;\n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \nvoid main() {\n\t#include \n\tvec4 diffuseColor = vec4( diffuse, opacity );\n\tReflectedLight reflectedLight = ReflectedLight( vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ) );\n\tvec3 totalEmissiveRadiance = emissive;\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\tvec3 totalDiffuse = reflectedLight.directDiffuse + reflectedLight.indirectDiffuse;\n\tvec3 totalSpecular = reflectedLight.directSpecular + reflectedLight.indirectSpecular;\n\t#include \n\tvec3 outgoingLight = totalDiffuse + totalSpecular + totalEmissiveRadiance;\n\t#ifdef USE_SHEEN\n\t\tfloat sheenEnergyComp = 1.0 - 0.157 * max3( material.sheenColor );\n\t\toutgoingLight = outgoingLight * sheenEnergyComp + sheenSpecularDirect + sheenSpecularIndirect;\n\t#endif\n\t#ifdef USE_CLEARCOAT\n\t\tfloat dotNVcc = saturate( dot( geometryClearcoatNormal, geometryViewDir ) );\n\t\tvec3 Fcc = F_Schlick( material.clearcoatF0, material.clearcoatF90, dotNVcc );\n\t\toutgoingLight = outgoingLight * ( 1.0 - material.clearcoat * Fcc ) + ( clearcoatSpecularDirect + clearcoatSpecularIndirect ) * material.clearcoat;\n\t#endif\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n}",meshtoon_vert:"#define TOON\nvarying vec3 vViewPosition;\n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \nvoid main() {\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\tvViewPosition = - mvPosition.xyz;\n\t#include \n\t#include \n\t#include \n}",meshtoon_frag:"#define TOON\nuniform vec3 diffuse;\nuniform vec3 emissive;\nuniform float opacity;\n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \nvoid main() {\n\t#include \n\tvec4 diffuseColor = vec4( diffuse, opacity );\n\tReflectedLight reflectedLight = ReflectedLight( vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ) );\n\tvec3 totalEmissiveRadiance = emissive;\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\tvec3 outgoingLight = reflectedLight.directDiffuse + reflectedLight.indirectDiffuse + totalEmissiveRadiance;\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n}",points_vert:"uniform float size;\nuniform float scale;\n#include \n#include \n#include \n#include \n#include \n#include \n#ifdef USE_POINTS_UV\n\tvarying vec2 vUv;\n\tuniform mat3 uvTransform;\n#endif\nvoid main() {\n\t#ifdef USE_POINTS_UV\n\t\tvUv = ( uvTransform * vec3( uv, 1 ) ).xy;\n\t#endif\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\tgl_PointSize = size;\n\t#ifdef USE_SIZEATTENUATION\n\t\tbool isPerspective = isPerspectiveMatrix( projectionMatrix );\n\t\tif ( isPerspective ) gl_PointSize *= ( scale / - mvPosition.z );\n\t#endif\n\t#include \n\t#include \n\t#include \n\t#include \n}",points_frag:"uniform vec3 diffuse;\nuniform float opacity;\n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \nvoid main() {\n\t#include \n\tvec3 outgoingLight = vec3( 0.0 );\n\tvec4 diffuseColor = vec4( diffuse, opacity );\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\toutgoingLight = diffuseColor.rgb;\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n}",shadow_vert:"#include \n#include \n#include \n#include \n#include \n#include \n#include \nvoid main() {\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n}",shadow_frag:"uniform vec3 color;\nuniform float opacity;\n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \nvoid main() {\n\t#include \n\tgl_FragColor = vec4( color, opacity * ( 1.0 - getShadowMask() ) );\n\t#include \n\t#include \n\t#include \n}",sprite_vert:"uniform float rotation;\nuniform vec2 center;\n#include \n#include \n#include \n#include \n#include \nvoid main() {\n\t#include \n\tvec4 mvPosition = modelViewMatrix * vec4( 0.0, 0.0, 0.0, 1.0 );\n\tvec2 scale;\n\tscale.x = length( vec3( modelMatrix[ 0 ].x, modelMatrix[ 0 ].y, modelMatrix[ 0 ].z ) );\n\tscale.y = length( vec3( modelMatrix[ 1 ].x, modelMatrix[ 1 ].y, modelMatrix[ 1 ].z ) );\n\t#ifndef USE_SIZEATTENUATION\n\t\tbool isPerspective = isPerspectiveMatrix( projectionMatrix );\n\t\tif ( isPerspective ) scale *= - mvPosition.z;\n\t#endif\n\tvec2 alignedPosition = ( position.xy - ( center - vec2( 0.5 ) ) ) * scale;\n\tvec2 rotatedPosition;\n\trotatedPosition.x = cos( rotation ) * alignedPosition.x - sin( rotation ) * alignedPosition.y;\n\trotatedPosition.y = sin( rotation ) * alignedPosition.x + cos( rotation ) * alignedPosition.y;\n\tmvPosition.xy += rotatedPosition;\n\tgl_Position = projectionMatrix * mvPosition;\n\t#include \n\t#include \n\t#include \n}",sprite_frag:"uniform vec3 diffuse;\nuniform float opacity;\n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \nvoid main() {\n\t#include \n\tvec3 outgoingLight = vec3( 0.0 );\n\tvec4 diffuseColor = vec4( diffuse, opacity );\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\toutgoingLight = diffuseColor.rgb;\n\t#include \n\t#include \n\t#include \n\t#include \n}"},Mr={common:{diffuse:{value:new ci(16777215)},opacity:{value:1},map:{value:null},mapTransform:{value:new fe},alphaMap:{value:null},alphaMapTransform:{value:new fe},alphaTest:{value:0}},specularmap:{specularMap:{value:null},specularMapTransform:{value:new fe}},envmap:{envMap:{value:null},flipEnvMap:{value:-1},reflectivity:{value:1},ior:{value:1.5},refractionRatio:{value:.98}},aomap:{aoMap:{value:null},aoMapIntensity:{value:1},aoMapTransform:{value:new fe}},lightmap:{lightMap:{value:null},lightMapIntensity:{value:1},lightMapTransform:{value:new fe}},bumpmap:{bumpMap:{value:null},bumpMapTransform:{value:new fe},bumpScale:{value:1}},normalmap:{normalMap:{value:null},normalMapTransform:{value:new fe},normalScale:{value:new me(1,1)}},displacementmap:{displacementMap:{value:null},displacementMapTransform:{value:new fe},displacementScale:{value:1},displacementBias:{value:0}},emissivemap:{emissiveMap:{value:null},emissiveMapTransform:{value:new fe}},metalnessmap:{metalnessMap:{value:null},metalnessMapTransform:{value:new fe}},roughnessmap:{roughnessMap:{value:null},roughnessMapTransform:{value:new fe}},gradientmap:{gradientMap:{value:null}},fog:{fogDensity:{value:25e-5},fogNear:{value:1},fogFar:{value:2e3},fogColor:{value:new ci(16777215)}},lights:{ambientLightColor:{value:[]},lightProbe:{value:[]},directionalLights:{value:[],properties:{direction:{},color:{}}},directionalLightShadows:{value:[],properties:{shadowBias:{},shadowNormalBias:{},shadowRadius:{},shadowMapSize:{}}},directionalShadowMap:{value:[]},directionalShadowMatrix:{value:[]},spotLights:{value:[],properties:{color:{},position:{},direction:{},distance:{},coneCos:{},penumbraCos:{},decay:{}}},spotLightShadows:{value:[],properties:{shadowBias:{},shadowNormalBias:{},shadowRadius:{},shadowMapSize:{}}},spotLightMap:{value:[]},spotShadowMap:{value:[]},spotLightMatrix:{value:[]},pointLights:{value:[],properties:{color:{},position:{},decay:{},distance:{}}},pointLightShadows:{value:[],properties:{shadowBias:{},shadowNormalBias:{},shadowRadius:{},shadowMapSize:{},shadowCameraNear:{},shadowCameraFar:{}}},pointShadowMap:{value:[]},pointShadowMatrix:{value:[]},hemisphereLights:{value:[],properties:{direction:{},skyColor:{},groundColor:{}}},rectAreaLights:{value:[],properties:{color:{},position:{},width:{},height:{}}},ltc_1:{value:null},ltc_2:{value:null}},points:{diffuse:{value:new ci(16777215)},opacity:{value:1},size:{value:1},scale:{value:1},map:{value:null},alphaMap:{value:null},alphaMapTransform:{value:new fe},alphaTest:{value:0},uvTransform:{value:new fe}},sprite:{diffuse:{value:new ci(16777215)},opacity:{value:1},center:{value:new me(.5,.5)},rotation:{value:0},map:{value:null},mapTransform:{value:new fe},alphaMap:{value:null},alphaMapTransform:{value:new fe},alphaTest:{value:0}}},Sr={basic:{uniforms:tr([Mr.common,Mr.specularmap,Mr.envmap,Mr.aomap,Mr.lightmap,Mr.fog]),vertexShader:yr.meshbasic_vert,fragmentShader:yr.meshbasic_frag},lambert:{uniforms:tr([Mr.common,Mr.specularmap,Mr.envmap,Mr.aomap,Mr.lightmap,Mr.emissivemap,Mr.bumpmap,Mr.normalmap,Mr.displacementmap,Mr.fog,Mr.lights,{emissive:{value:new ci(0)}}]),vertexShader:yr.meshlambert_vert,fragmentShader:yr.meshlambert_frag},phong:{uniforms:tr([Mr.common,Mr.specularmap,Mr.envmap,Mr.aomap,Mr.lightmap,Mr.emissivemap,Mr.bumpmap,Mr.normalmap,Mr.displacementmap,Mr.fog,Mr.lights,{emissive:{value:new ci(0)},specular:{value:new ci(1118481)},shininess:{value:30}}]),vertexShader:yr.meshphong_vert,fragmentShader:yr.meshphong_frag},standard:{uniforms:tr([Mr.common,Mr.envmap,Mr.aomap,Mr.lightmap,Mr.emissivemap,Mr.bumpmap,Mr.normalmap,Mr.displacementmap,Mr.roughnessmap,Mr.metalnessmap,Mr.fog,Mr.lights,{emissive:{value:new ci(0)},roughness:{value:1},metalness:{value:0},envMapIntensity:{value:1}}]),vertexShader:yr.meshphysical_vert,fragmentShader:yr.meshphysical_frag},toon:{uniforms:tr([Mr.common,Mr.aomap,Mr.lightmap,Mr.emissivemap,Mr.bumpmap,Mr.normalmap,Mr.displacementmap,Mr.gradientmap,Mr.fog,Mr.lights,{emissive:{value:new ci(0)}}]),vertexShader:yr.meshtoon_vert,fragmentShader:yr.meshtoon_frag},matcap:{uniforms:tr([Mr.common,Mr.bumpmap,Mr.normalmap,Mr.displacementmap,Mr.fog,{matcap:{value:null}}]),vertexShader:yr.meshmatcap_vert,fragmentShader:yr.meshmatcap_frag},points:{uniforms:tr([Mr.points,Mr.fog]),vertexShader:yr.points_vert,fragmentShader:yr.points_frag},dashed:{uniforms:tr([Mr.common,Mr.fog,{scale:{value:1},dashSize:{value:1},totalSize:{value:2}}]),vertexShader:yr.linedashed_vert,fragmentShader:yr.linedashed_frag},depth:{uniforms:tr([Mr.common,Mr.displacementmap]),vertexShader:yr.depth_vert,fragmentShader:yr.depth_frag},normal:{uniforms:tr([Mr.common,Mr.bumpmap,Mr.normalmap,Mr.displacementmap,{opacity:{value:1}}]),vertexShader:yr.meshnormal_vert,fragmentShader:yr.meshnormal_frag},sprite:{uniforms:tr([Mr.sprite,Mr.fog]),vertexShader:yr.sprite_vert,fragmentShader:yr.sprite_frag},background:{uniforms:{uvTransform:{value:new fe},t2D:{value:null},backgroundIntensity:{value:1}},vertexShader:yr.background_vert,fragmentShader:yr.background_frag},backgroundCube:{uniforms:{envMap:{value:null},flipEnvMap:{value:-1},backgroundBlurriness:{value:0},backgroundIntensity:{value:1}},vertexShader:yr.backgroundCube_vert,fragmentShader:yr.backgroundCube_frag},cube:{uniforms:{tCube:{value:null},tFlip:{value:-1},opacity:{value:1}},vertexShader:yr.cube_vert,fragmentShader:yr.cube_frag},equirect:{uniforms:{tEquirect:{value:null}},vertexShader:yr.equirect_vert,fragmentShader:yr.equirect_frag},distanceRGBA:{uniforms:tr([Mr.common,Mr.displacementmap,{referencePosition:{value:new We},nearDistance:{value:1},farDistance:{value:1e3}}]),vertexShader:yr.distanceRGBA_vert,fragmentShader:yr.distanceRGBA_frag},shadow:{uniforms:tr([Mr.lights,Mr.fog,{color:{value:new ci(0)},opacity:{value:1}}]),vertexShader:yr.shadow_vert,fragmentShader:yr.shadow_frag}};Sr.physical={uniforms:tr([Sr.standard.uniforms,{clearcoat:{value:0},clearcoatMap:{value:null},clearcoatMapTransform:{value:new fe},clearcoatNormalMap:{value:null},clearcoatNormalMapTransform:{value:new fe},clearcoatNormalScale:{value:new me(1,1)},clearcoatRoughness:{value:0},clearcoatRoughnessMap:{value:null},clearcoatRoughnessMapTransform:{value:new fe},iridescence:{value:0},iridescenceMap:{value:null},iridescenceMapTransform:{value:new fe},iridescenceIOR:{value:1.3},iridescenceThicknessMinimum:{value:100},iridescenceThicknessMaximum:{value:400},iridescenceThicknessMap:{value:null},iridescenceThicknessMapTransform:{value:new fe},sheen:{value:0},sheenColor:{value:new ci(0)},sheenColorMap:{value:null},sheenColorMapTransform:{value:new fe},sheenRoughness:{value:1},sheenRoughnessMap:{value:null},sheenRoughnessMapTransform:{value:new fe},transmission:{value:0},transmissionMap:{value:null},transmissionMapTransform:{value:new fe},transmissionSamplerSize:{value:new me},transmissionSamplerMap:{value:null},thickness:{value:0},thicknessMap:{value:null},thicknessMapTransform:{value:new fe},attenuationDistance:{value:0},attenuationColor:{value:new ci(0)},specularColor:{value:new ci(1,1,1)},specularColorMap:{value:null},specularColorMapTransform:{value:new fe},specularIntensity:{value:1},specularIntensityMap:{value:null},specularIntensityMapTransform:{value:new fe},anisotropyVector:{value:new me},anisotropyMap:{value:null},anisotropyMapTransform:{value:new fe}}]),vertexShader:yr.meshphysical_vert,fragmentShader:yr.meshphysical_frag};const br={r:0,b:0,g:0};function Tr(t,e,n,i,r,o,l){const c=new ci(0);let h,u,d=!0===o?0:1,p=null,m=0,f=null;function g(e,n){e.getRGB(br,er(t)),i.buffers.color.setClear(br.r,br.g,br.b,n,l)}return{getClearColor:function(){return c},setClearColor:function(t,e=1){c.set(t),d=e,g(c,d)},getClearAlpha:function(){return d},setClearAlpha:function(t){d=t,g(c,d)},render:function(o,_){let v=!1,x=!0===_.isScene?_.background:null;if(x&&x.isTexture){x=(_.backgroundBlurriness>0?n:e).get(x)}null===x?g(c,d):x&&x.isColor&&(g(x,1),v=!0);const y=t.xr.getEnvironmentBlendMode();"additive"===y?i.buffers.color.setClear(0,0,0,1,l):"alpha-blend"===y&&i.buffers.color.setClear(0,0,0,0,l),(t.autoClear||v)&&t.clear(t.autoClearColor,t.autoClearDepth,t.autoClearStencil),x&&(x.isCubeTexture||x.mapping===A)?(void 0===u&&(u=new Ji(new $i(1,1,1),new ir({name:"BackgroundCubeMaterial",uniforms:Qi(Sr.backgroundCube.uniforms),vertexShader:Sr.backgroundCube.vertexShader,fragmentShader:Sr.backgroundCube.fragmentShader,side:a,depthTest:!1,depthWrite:!1,fog:!1})),u.geometry.deleteAttribute("normal"),u.geometry.deleteAttribute("uv"),u.onBeforeRender=function(t,e,n){this.matrixWorld.copyPosition(n.matrixWorld)},Object.defineProperty(u.material,"envMap",{get:function(){return this.uniforms.envMap.value}}),r.update(u)),u.material.uniforms.envMap.value=x,u.material.uniforms.flipEnvMap.value=x.isCubeTexture&&!1===x.isRenderTargetTexture?-1:1,u.material.uniforms.backgroundBlurriness.value=_.backgroundBlurriness,u.material.uniforms.backgroundIntensity.value=_.backgroundIntensity,u.material.toneMapped=Re.getTransfer(x.colorSpace)!==Xt,p===x&&m===x.version&&f===t.toneMapping||(u.material.needsUpdate=!0,p=x,m=x.version,f=t.toneMapping),u.layers.enableAll(),o.unshift(u,u.geometry,u.material,0,0,null)):x&&x.isTexture&&(void 0===h&&(h=new Ji(new xr(2,2),new ir({name:"BackgroundMaterial",uniforms:Qi(Sr.background.uniforms),vertexShader:Sr.background.vertexShader,fragmentShader:Sr.background.fragmentShader,side:s,depthTest:!1,depthWrite:!1,fog:!1})),h.geometry.deleteAttribute("normal"),Object.defineProperty(h.material,"map",{get:function(){return this.uniforms.t2D.value}}),r.update(h)),h.material.uniforms.t2D.value=x,h.material.uniforms.backgroundIntensity.value=_.backgroundIntensity,h.material.toneMapped=Re.getTransfer(x.colorSpace)!==Xt,!0===x.matrixAutoUpdate&&x.updateMatrix(),h.material.uniforms.uvTransform.value.copy(x.matrix),p===x&&m===x.version&&f===t.toneMapping||(h.material.needsUpdate=!0,p=x,m=x.version,f=t.toneMapping),h.layers.enableAll(),o.unshift(h,h.geometry,h.material,0,0,null))}}}function Er(t,e,n,i){const r=t.getParameter(t.MAX_VERTEX_ATTRIBS),s=i.isWebGL2?null:e.get("OES_vertex_array_object"),a=i.isWebGL2||null!==s,o={},l=p(null);let c=l,h=!1;function u(e){return i.isWebGL2?t.bindVertexArray(e):s.bindVertexArrayOES(e)}function d(e){return i.isWebGL2?t.deleteVertexArray(e):s.deleteVertexArrayOES(e)}function p(t){const e=[],n=[],i=[];for(let t=0;t=0){const n=r[e];let i=s[e];if(void 0===i&&("instanceMatrix"===e&&t.instanceMatrix&&(i=t.instanceMatrix),"instanceColor"===e&&t.instanceColor&&(i=t.instanceColor)),void 0===n)return!0;if(n.attribute!==i)return!0;if(i&&n.data!==i.data)return!0;a++}}return c.attributesNum!==a||c.index!==i}(r,x,d,y),M&&function(t,e,n,i){const r={},s=e.attributes;let a=0;const o=n.getAttributes();for(const e in o){if(o[e].location>=0){let n=s[e];void 0===n&&("instanceMatrix"===e&&t.instanceMatrix&&(n=t.instanceMatrix),"instanceColor"===e&&t.instanceColor&&(n=t.instanceColor));const i={};i.attribute=n,n&&n.data&&(i.data=n.data),r[e]=i,a++}}c.attributes=r,c.attributesNum=a,c.index=i}(r,x,d,y)}else{const t=!0===l.wireframe;c.geometry===x.id&&c.program===d.id&&c.wireframe===t||(c.geometry=x.id,c.program=d.id,c.wireframe=t,M=!0)}null!==y&&n.update(y,t.ELEMENT_ARRAY_BUFFER),(M||h)&&(h=!1,function(r,s,a,o){if(!1===i.isWebGL2&&(r.isInstancedMesh||o.isInstancedBufferGeometry)&&null===e.get("ANGLE_instanced_arrays"))return;m();const l=o.attributes,c=a.getAttributes(),h=s.defaultAttributeValues;for(const e in c){const s=c[e];if(s.location>=0){let a=l[e];if(void 0===a&&("instanceMatrix"===e&&r.instanceMatrix&&(a=r.instanceMatrix),"instanceColor"===e&&r.instanceColor&&(a=r.instanceColor)),void 0!==a){const e=a.normalized,l=a.itemSize,c=n.get(a);if(void 0===c)continue;const h=c.buffer,u=c.type,d=c.bytesPerElement,p=!0===i.isWebGL2&&(u===t.INT||u===t.UNSIGNED_INT||a.gpuType===z);if(a.isInterleavedBufferAttribute){const n=a.data,i=n.stride,c=a.offset;if(n.isInstancedInterleavedBuffer){for(let t=0;t0&&t.getShaderPrecisionFormat(t.FRAGMENT_SHADER,t.HIGH_FLOAT).precision>0)return"highp";e="mediump"}return"mediump"===e&&t.getShaderPrecisionFormat(t.VERTEX_SHADER,t.MEDIUM_FLOAT).precision>0&&t.getShaderPrecisionFormat(t.FRAGMENT_SHADER,t.MEDIUM_FLOAT).precision>0?"mediump":"lowp"}const s="undefined"!=typeof WebGL2RenderingContext&&"WebGL2RenderingContext"===t.constructor.name;let a=void 0!==n.precision?n.precision:"highp";const o=r(a);o!==a&&(console.warn("THREE.WebGLRenderer:",a,"not supported, using",o,"instead."),a=o);const l=s||e.has("WEBGL_draw_buffers"),c=!0===n.logarithmicDepthBuffer,h=t.getParameter(t.MAX_TEXTURE_IMAGE_UNITS),u=t.getParameter(t.MAX_VERTEX_TEXTURE_IMAGE_UNITS),d=t.getParameter(t.MAX_TEXTURE_SIZE),p=t.getParameter(t.MAX_CUBE_MAP_TEXTURE_SIZE),m=t.getParameter(t.MAX_VERTEX_ATTRIBS),f=t.getParameter(t.MAX_VERTEX_UNIFORM_VECTORS),g=t.getParameter(t.MAX_VARYING_VECTORS),_=t.getParameter(t.MAX_FRAGMENT_UNIFORM_VECTORS),v=u>0,x=s||e.has("OES_texture_float");return{isWebGL2:s,drawBuffers:l,getMaxAnisotropy:function(){if(void 0!==i)return i;if(!0===e.has("EXT_texture_filter_anisotropic")){const n=e.get("EXT_texture_filter_anisotropic");i=t.getParameter(n.MAX_TEXTURE_MAX_ANISOTROPY_EXT)}else i=0;return i},getMaxPrecision:r,precision:a,logarithmicDepthBuffer:c,maxTextures:h,maxVertexTextures:u,maxTextureSize:d,maxCubemapSize:p,maxAttributes:m,maxVertexUniforms:f,maxVaryings:g,maxFragmentUniforms:_,vertexTextures:v,floatFragmentTextures:x,floatVertexTextures:v&&x,maxSamples:s?t.getParameter(t.MAX_SAMPLES):0}}function Rr(t){const e=this;let n=null,i=0,r=!1,s=!1;const a=new pr,o=new fe,l={value:null,needsUpdate:!1};function c(t,n,i,r){const s=null!==t?t.length:0;let c=null;if(0!==s){if(c=l.value,!0!==r||null===c){const e=i+4*s,r=n.matrixWorldInverse;o.getNormalMatrix(r),(null===c||c.length0);e.numPlanes=i,e.numIntersection=0}();else{const t=s?0:i,e=4*t;let r=m.clippingState||null;l.value=r,r=c(u,o,e,h);for(let t=0;t!==e;++t)r[t]=n[t];m.clippingState=r,this.numIntersection=d?this.numPlanes:0,this.numPlanes+=t}}}function Cr(t){let e=new WeakMap;function n(t,e){return e===E?t.mapping=b:e===w&&(t.mapping=T),t}function i(t){const n=t.target;n.removeEventListener("dispose",i);const r=e.get(n);void 0!==r&&(e.delete(n),r.dispose())}return{get:function(r){if(r&&r.isTexture){const s=r.mapping;if(s===E||s===w){if(e.has(r)){return n(e.get(r).texture,r.mapping)}{const s=r.image;if(s&&s.height>0){const a=new cr(s.height/2);return a.fromEquirectangularTexture(t,r),e.set(r,a),r.addEventListener("dispose",i),n(a.texture,r.mapping)}return null}}}return r},dispose:function(){e=new WeakMap}}}class Lr extends rr{constructor(t=-1,e=1,n=1,i=-1,r=.1,s=2e3){super(),this.isOrthographicCamera=!0,this.type="OrthographicCamera",this.zoom=1,this.view=null,this.left=t,this.right=e,this.top=n,this.bottom=i,this.near=r,this.far=s,this.updateProjectionMatrix()}copy(t,e){return super.copy(t,e),this.left=t.left,this.right=t.right,this.top=t.top,this.bottom=t.bottom,this.near=t.near,this.far=t.far,this.zoom=t.zoom,this.view=null===t.view?null:Object.assign({},t.view),this}setViewOffset(t,e,n,i,r,s){null===this.view&&(this.view={enabled:!0,fullWidth:1,fullHeight:1,offsetX:0,offsetY:0,width:1,height:1}),this.view.enabled=!0,this.view.fullWidth=t,this.view.fullHeight=e,this.view.offsetX=n,this.view.offsetY=i,this.view.width=r,this.view.height=s,this.updateProjectionMatrix()}clearViewOffset(){null!==this.view&&(this.view.enabled=!1),this.updateProjectionMatrix()}updateProjectionMatrix(){const t=(this.right-this.left)/(2*this.zoom),e=(this.top-this.bottom)/(2*this.zoom),n=(this.right+this.left)/2,i=(this.top+this.bottom)/2;let r=n-t,s=n+t,a=i+e,o=i-e;if(null!==this.view&&this.view.enabled){const t=(this.right-this.left)/this.view.fullWidth/this.zoom,e=(this.top-this.bottom)/this.view.fullHeight/this.zoom;r+=t*this.view.offsetX,s=r+t*this.view.width,a-=e*this.view.offsetY,o=a-e*this.view.height}this.projectionMatrix.makeOrthographic(r,s,a,o,this.near,this.far,this.coordinateSystem),this.projectionMatrixInverse.copy(this.projectionMatrix).invert()}toJSON(t){const e=super.toJSON(t);return e.object.zoom=this.zoom,e.object.left=this.left,e.object.right=this.right,e.object.top=this.top,e.object.bottom=this.bottom,e.object.near=this.near,e.object.far=this.far,null!==this.view&&(e.object.view=Object.assign({},this.view)),e}}const Pr=[.125,.215,.35,.446,.526,.582],Ir=20,Ur=new Lr,Dr=new ci;let Nr=null,Or=0,Fr=0;const Br=(1+Math.sqrt(5))/2,zr=1/Br,Gr=[new We(1,1,1),new We(-1,1,1),new We(1,1,-1),new We(-1,1,-1),new We(0,Br,zr),new We(0,Br,-zr),new We(zr,0,Br),new We(-zr,0,Br),new We(Br,zr,0),new We(-Br,zr,0)];class Hr{constructor(t){this._renderer=t,this._pingPongRenderTarget=null,this._lodMax=0,this._cubeSize=0,this._lodPlanes=[],this._sizeLods=[],this._sigmas=[],this._blurMaterial=null,this._cubemapMaterial=null,this._equirectMaterial=null,this._compileMaterial(this._blurMaterial)}fromScene(t,e=0,n=.1,i=100){Nr=this._renderer.getRenderTarget(),Or=this._renderer.getActiveCubeFace(),Fr=this._renderer.getActiveMipmapLevel(),this._setSize(256);const r=this._allocateTargets();return r.depthBuffer=!0,this._sceneToCubeUV(t,n,i,r),e>0&&this._blur(r,0,0,e),this._applyPMREM(r),this._cleanup(r),r}fromEquirectangular(t,e=null){return this._fromTexture(t,e)}fromCubemap(t,e=null){return this._fromTexture(t,e)}compileCubemapShader(){null===this._cubemapMaterial&&(this._cubemapMaterial=Xr(),this._compileMaterial(this._cubemapMaterial))}compileEquirectangularShader(){null===this._equirectMaterial&&(this._equirectMaterial=Wr(),this._compileMaterial(this._equirectMaterial))}dispose(){this._dispose(),null!==this._cubemapMaterial&&this._cubemapMaterial.dispose(),null!==this._equirectMaterial&&this._equirectMaterial.dispose()}_setSize(t){this._lodMax=Math.floor(Math.log2(t)),this._cubeSize=Math.pow(2,this._lodMax)}_dispose(){null!==this._blurMaterial&&this._blurMaterial.dispose(),null!==this._pingPongRenderTarget&&this._pingPongRenderTarget.dispose();for(let t=0;tt-4?o=Pr[a-t+4-1]:0===a&&(o=0),i.push(o);const l=1/(s-2),c=-l,h=1+l,u=[c,c,h,c,h,h,c,c,h,h,c,h],d=6,p=6,m=3,f=2,g=1,_=new Float32Array(m*p*d),v=new Float32Array(f*p*d),x=new Float32Array(g*p*d);for(let t=0;t2?0:-1,i=[e,n,0,e+2/3,n,0,e+2/3,n+1,0,e,n,0,e+2/3,n+1,0,e,n+1,0];_.set(i,m*p*t),v.set(u,f*p*t);const r=[t,t,t,t,t,t];x.set(r,g*p*t)}const y=new Ii;y.setAttribute("position",new Mi(_,m)),y.setAttribute("uv",new Mi(v,f)),y.setAttribute("faceIndex",new Mi(x,g)),e.push(y),r>4&&r--}return{lodPlanes:e,sizeLods:n,sigmas:i}}(i)),this._blurMaterial=function(t,e,n){const i=new Float32Array(Ir),r=new We(0,1,0),s=new ir({name:"SphericalGaussianBlur",defines:{n:Ir,CUBEUV_TEXEL_WIDTH:1/e,CUBEUV_TEXEL_HEIGHT:1/n,CUBEUV_MAX_MIP:`${t}.0`},uniforms:{envMap:{value:null},samples:{value:1},weights:{value:i},latitudinal:{value:!1},dTheta:{value:0},mipInt:{value:0},poleAxis:{value:r}},vertexShader:jr(),fragmentShader:"\n\n\t\t\tprecision mediump float;\n\t\t\tprecision mediump int;\n\n\t\t\tvarying vec3 vOutputDirection;\n\n\t\t\tuniform sampler2D envMap;\n\t\t\tuniform int samples;\n\t\t\tuniform float weights[ n ];\n\t\t\tuniform bool latitudinal;\n\t\t\tuniform float dTheta;\n\t\t\tuniform float mipInt;\n\t\t\tuniform vec3 poleAxis;\n\n\t\t\t#define ENVMAP_TYPE_CUBE_UV\n\t\t\t#include \n\n\t\t\tvec3 getSample( float theta, vec3 axis ) {\n\n\t\t\t\tfloat cosTheta = cos( theta );\n\t\t\t\t// Rodrigues' axis-angle rotation\n\t\t\t\tvec3 sampleDirection = vOutputDirection * cosTheta\n\t\t\t\t\t+ cross( axis, vOutputDirection ) * sin( theta )\n\t\t\t\t\t+ axis * dot( axis, vOutputDirection ) * ( 1.0 - cosTheta );\n\n\t\t\t\treturn bilinearCubeUV( envMap, sampleDirection, mipInt );\n\n\t\t\t}\n\n\t\t\tvoid main() {\n\n\t\t\t\tvec3 axis = latitudinal ? poleAxis : cross( poleAxis, vOutputDirection );\n\n\t\t\t\tif ( all( equal( axis, vec3( 0.0 ) ) ) ) {\n\n\t\t\t\t\taxis = vec3( vOutputDirection.z, 0.0, - vOutputDirection.x );\n\n\t\t\t\t}\n\n\t\t\t\taxis = normalize( axis );\n\n\t\t\t\tgl_FragColor = vec4( 0.0, 0.0, 0.0, 1.0 );\n\t\t\t\tgl_FragColor.rgb += weights[ 0 ] * getSample( 0.0, axis );\n\n\t\t\t\tfor ( int i = 1; i < n; i++ ) {\n\n\t\t\t\t\tif ( i >= samples ) {\n\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\t}\n\n\t\t\t\t\tfloat theta = dTheta * float( i );\n\t\t\t\t\tgl_FragColor.rgb += weights[ i ] * getSample( -1.0 * theta, axis );\n\t\t\t\t\tgl_FragColor.rgb += weights[ i ] * getSample( theta, axis );\n\n\t\t\t\t}\n\n\t\t\t}\n\t\t",blending:0,depthTest:!1,depthWrite:!1});return s}(i,t,e)}return i}_compileMaterial(t){const e=new Ji(this._lodPlanes[0],t);this._renderer.compile(e,Ur)}_sceneToCubeUV(t,e,n,i){const r=new sr(90,1,e,n),s=[1,-1,1,1,1,1],o=[1,1,1,-1,-1,-1],l=this._renderer,c=l.autoClear,h=l.toneMapping;l.getClearColor(Dr),l.toneMapping=p,l.autoClear=!1;const u=new pi({name:"PMREM.Background",side:a,depthWrite:!1,depthTest:!1}),d=new Ji(new $i,u);let m=!1;const f=t.background;f?f.isColor&&(u.color.copy(f),t.background=null,m=!0):(u.color.copy(Dr),m=!0);for(let e=0;e<6;e++){const n=e%3;0===n?(r.up.set(0,s[e],0),r.lookAt(o[e],0,0)):1===n?(r.up.set(0,0,s[e]),r.lookAt(0,o[e],0)):(r.up.set(0,s[e],0),r.lookAt(0,0,o[e]));const a=this._cubeSize;kr(i,n*a,e>2?a:0,a,a),l.setRenderTarget(i),m&&l.render(d,r),l.render(t,r)}d.geometry.dispose(),d.material.dispose(),l.toneMapping=h,l.autoClear=c,t.background=f}_textureToCubeUV(t,e){const n=this._renderer,i=t.mapping===b||t.mapping===T;i?(null===this._cubemapMaterial&&(this._cubemapMaterial=Xr()),this._cubemapMaterial.uniforms.flipEnvMap.value=!1===t.isRenderTargetTexture?-1:1):null===this._equirectMaterial&&(this._equirectMaterial=Wr());const r=i?this._cubemapMaterial:this._equirectMaterial,s=new Ji(this._lodPlanes[0],r);r.uniforms.envMap.value=t;const a=this._cubeSize;kr(e,0,0,3*a,2*a),n.setRenderTarget(e),n.render(s,Ur)}_applyPMREM(t){const e=this._renderer,n=e.autoClear;e.autoClear=!1;for(let e=1;eIr&&console.warn(`sigmaRadians, ${r}, is too large and will clip, as it requested ${m} samples when the maximum is set to 20`);const f=[];let g=0;for(let t=0;t_-4?i-_+4:0),4*(this._cubeSize-v),3*v,2*v),o.setRenderTarget(e),o.render(c,Ur)}}function Vr(t,e,n){const i=new Ge(t,e,n);return i.texture.mapping=A,i.texture.name="PMREM.cubeUv",i.scissorTest=!0,i}function kr(t,e,n,i,r){t.viewport.set(e,n,i,r),t.scissor.set(e,n,i,r)}function Wr(){return new ir({name:"EquirectangularToCubeUV",uniforms:{envMap:{value:null}},vertexShader:jr(),fragmentShader:"\n\n\t\t\tprecision mediump float;\n\t\t\tprecision mediump int;\n\n\t\t\tvarying vec3 vOutputDirection;\n\n\t\t\tuniform sampler2D envMap;\n\n\t\t\t#include \n\n\t\t\tvoid main() {\n\n\t\t\t\tvec3 outputDirection = normalize( vOutputDirection );\n\t\t\t\tvec2 uv = equirectUv( outputDirection );\n\n\t\t\t\tgl_FragColor = vec4( texture2D ( envMap, uv ).rgb, 1.0 );\n\n\t\t\t}\n\t\t",blending:0,depthTest:!1,depthWrite:!1})}function Xr(){return new ir({name:"CubemapToCubeUV",uniforms:{envMap:{value:null},flipEnvMap:{value:-1}},vertexShader:jr(),fragmentShader:"\n\n\t\t\tprecision mediump float;\n\t\t\tprecision mediump int;\n\n\t\t\tuniform float flipEnvMap;\n\n\t\t\tvarying vec3 vOutputDirection;\n\n\t\t\tuniform samplerCube envMap;\n\n\t\t\tvoid main() {\n\n\t\t\t\tgl_FragColor = textureCube( envMap, vec3( flipEnvMap * vOutputDirection.x, vOutputDirection.yz ) );\n\n\t\t\t}\n\t\t",blending:0,depthTest:!1,depthWrite:!1})}function jr(){return"\n\n\t\tprecision mediump float;\n\t\tprecision mediump int;\n\n\t\tattribute float faceIndex;\n\n\t\tvarying vec3 vOutputDirection;\n\n\t\t// RH coordinate system; PMREM face-indexing convention\n\t\tvec3 getDirection( vec2 uv, float face ) {\n\n\t\t\tuv = 2.0 * uv - 1.0;\n\n\t\t\tvec3 direction = vec3( uv, 1.0 );\n\n\t\t\tif ( face == 0.0 ) {\n\n\t\t\t\tdirection = direction.zyx; // ( 1, v, u ) pos x\n\n\t\t\t} else if ( face == 1.0 ) {\n\n\t\t\t\tdirection = direction.xzy;\n\t\t\t\tdirection.xz *= -1.0; // ( -u, 1, -v ) pos y\n\n\t\t\t} else if ( face == 2.0 ) {\n\n\t\t\t\tdirection.x *= -1.0; // ( -u, v, 1 ) pos z\n\n\t\t\t} else if ( face == 3.0 ) {\n\n\t\t\t\tdirection = direction.zyx;\n\t\t\t\tdirection.xz *= -1.0; // ( -1, v, -u ) neg x\n\n\t\t\t} else if ( face == 4.0 ) {\n\n\t\t\t\tdirection = direction.xzy;\n\t\t\t\tdirection.xy *= -1.0; // ( -u, -1, v ) neg y\n\n\t\t\t} else if ( face == 5.0 ) {\n\n\t\t\t\tdirection.z *= -1.0; // ( u, v, -1 ) neg z\n\n\t\t\t}\n\n\t\t\treturn direction;\n\n\t\t}\n\n\t\tvoid main() {\n\n\t\t\tvOutputDirection = getDirection( uv, faceIndex );\n\t\t\tgl_Position = vec4( position, 1.0 );\n\n\t\t}\n\t"}function qr(t){let e=new WeakMap,n=null;function i(t){const n=t.target;n.removeEventListener("dispose",i);const r=e.get(n);void 0!==r&&(e.delete(n),r.dispose())}return{get:function(r){if(r&&r.isTexture){const s=r.mapping,a=s===E||s===w,o=s===b||s===T;if(a||o){if(r.isRenderTargetTexture&&!0===r.needsPMREMUpdate){r.needsPMREMUpdate=!1;let i=e.get(r);return null===n&&(n=new Hr(t)),i=a?n.fromEquirectangular(r,i):n.fromCubemap(r,i),e.set(r,i),i.texture}if(e.has(r))return e.get(r).texture;{const s=r.image;if(a&&s&&s.height>0||o&&s&&function(t){let e=0;const n=6;for(let i=0;ie.maxTextureSize&&(E=Math.ceil(T/e.maxTextureSize),T=e.maxTextureSize);const w=new Float32Array(T*E*4*p),A=new He(w,T,E,p);A.type=H,A.needsUpdate=!0;const R=4*b;for(let L=0;L0)return t;const r=e*n;let s=ls[r];if(void 0===s&&(s=new Float32Array(r),ls[r]=s),0!==e){i.toArray(s,0);for(let i=1,r=0;i!==e;++i)r+=n,t[i].toArray(s,r)}return s}function ms(t,e){if(t.length!==e.length)return!1;for(let n=0,i=t.length;n":" "} ${r}: ${n[t]}`)}return i.join("\n")}(t.getShaderSource(e),i)}return r}function da(t,e){const n=function(t){const e=Re.getPrimaries(Re.workingColorSpace),n=Re.getPrimaries(t);let i;switch(e===n?i="":e===qt&&n===jt?i="LinearDisplayP3ToLinearSRGB":e===jt&&n===qt&&(i="LinearSRGBToLinearDisplayP3"),t){case Ht:case kt:return[i,"LinearTransferOETF"];case Gt:case Vt:return[i,"sRGBTransferOETF"];default:return console.warn("THREE.WebGLProgram: Unsupported color space:",t),[i,"LinearTransferOETF"]}}(e);return`vec4 ${t}( vec4 value ) { return ${n[0]}( ${n[1]}( value ) ); }`}function pa(t,e){let n;switch(e){case m:n="Linear";break;case f:n="Reinhard";break;case g:n="OptimizedCineon";break;case _:n="ACESFilmic";break;case x:n="AgX";break;case v:n="Custom";break;default:console.warn("THREE.WebGLProgram: Unsupported toneMapping:",e),n="Linear"}return"vec3 "+t+"( vec3 color ) { return "+n+"ToneMapping( color ); }"}function ma(t){return""!==t}function fa(t,e){const n=e.numSpotLightShadows+e.numSpotLightMaps-e.numSpotLightShadowsWithMaps;return t.replace(/NUM_DIR_LIGHTS/g,e.numDirLights).replace(/NUM_SPOT_LIGHTS/g,e.numSpotLights).replace(/NUM_SPOT_LIGHT_MAPS/g,e.numSpotLightMaps).replace(/NUM_SPOT_LIGHT_COORDS/g,n).replace(/NUM_RECT_AREA_LIGHTS/g,e.numRectAreaLights).replace(/NUM_POINT_LIGHTS/g,e.numPointLights).replace(/NUM_HEMI_LIGHTS/g,e.numHemiLights).replace(/NUM_DIR_LIGHT_SHADOWS/g,e.numDirLightShadows).replace(/NUM_SPOT_LIGHT_SHADOWS_WITH_MAPS/g,e.numSpotLightShadowsWithMaps).replace(/NUM_SPOT_LIGHT_SHADOWS/g,e.numSpotLightShadows).replace(/NUM_POINT_LIGHT_SHADOWS/g,e.numPointLightShadows)}function ga(t,e){return t.replace(/NUM_CLIPPING_PLANES/g,e.numClippingPlanes).replace(/UNION_CLIPPING_PLANES/g,e.numClippingPlanes-e.numClipIntersection)}const _a=/^[ \t]*#include +<([\w\d./]+)>/gm;function va(t){return t.replace(_a,ya)}const xa=new Map([["encodings_fragment","colorspace_fragment"],["encodings_pars_fragment","colorspace_pars_fragment"],["output_fragment","opaque_fragment"]]);function ya(t,e){let n=yr[e];if(void 0===n){const t=xa.get(e);if(void 0===t)throw new Error("Can not resolve #include <"+e+">");n=yr[t],console.warn('THREE.WebGLRenderer: Shader chunk "%s" has been deprecated. Use "%s" instead.',e,t)}return va(n)}const Ma=/#pragma unroll_loop_start\s+for\s*\(\s*int\s+i\s*=\s*(\d+)\s*;\s*i\s*<\s*(\d+)\s*;\s*i\s*\+\+\s*\)\s*{([\s\S]+?)}\s+#pragma unroll_loop_end/g;function Sa(t){return t.replace(Ma,ba)}function ba(t,e,n,i){let r="";for(let t=parseInt(e);t0&&(w+="\n"),R=[y,"#define SHADER_TYPE "+s.shaderType,"#define SHADER_NAME "+s.shaderName,S].filter(ma).join("\n"),R.length>0&&(R+="\n")):(w=[Ta(s),"#define SHADER_TYPE "+s.shaderType,"#define SHADER_NAME "+s.shaderName,S,s.extensionClipCullDistance?"#define USE_CLIP_DISTANCE":"",s.batching?"#define USE_BATCHING":"",s.instancing?"#define USE_INSTANCING":"",s.instancingColor?"#define USE_INSTANCING_COLOR":"",s.useFog&&s.fog?"#define USE_FOG":"",s.useFog&&s.fogExp2?"#define FOG_EXP2":"",s.map?"#define USE_MAP":"",s.envMap?"#define USE_ENVMAP":"",s.envMap?"#define "+_:"",s.lightMap?"#define USE_LIGHTMAP":"",s.aoMap?"#define USE_AOMAP":"",s.bumpMap?"#define USE_BUMPMAP":"",s.normalMap?"#define USE_NORMALMAP":"",s.normalMapObjectSpace?"#define USE_NORMALMAP_OBJECTSPACE":"",s.normalMapTangentSpace?"#define USE_NORMALMAP_TANGENTSPACE":"",s.displacementMap?"#define USE_DISPLACEMENTMAP":"",s.emissiveMap?"#define USE_EMISSIVEMAP":"",s.anisotropy?"#define USE_ANISOTROPY":"",s.anisotropyMap?"#define USE_ANISOTROPYMAP":"",s.clearcoatMap?"#define USE_CLEARCOATMAP":"",s.clearcoatRoughnessMap?"#define USE_CLEARCOAT_ROUGHNESSMAP":"",s.clearcoatNormalMap?"#define USE_CLEARCOAT_NORMALMAP":"",s.iridescenceMap?"#define USE_IRIDESCENCEMAP":"",s.iridescenceThicknessMap?"#define USE_IRIDESCENCE_THICKNESSMAP":"",s.specularMap?"#define USE_SPECULARMAP":"",s.specularColorMap?"#define USE_SPECULAR_COLORMAP":"",s.specularIntensityMap?"#define USE_SPECULAR_INTENSITYMAP":"",s.roughnessMap?"#define USE_ROUGHNESSMAP":"",s.metalnessMap?"#define USE_METALNESSMAP":"",s.alphaMap?"#define USE_ALPHAMAP":"",s.alphaHash?"#define USE_ALPHAHASH":"",s.transmission?"#define USE_TRANSMISSION":"",s.transmissionMap?"#define USE_TRANSMISSIONMAP":"",s.thicknessMap?"#define USE_THICKNESSMAP":"",s.sheenColorMap?"#define USE_SHEEN_COLORMAP":"",s.sheenRoughnessMap?"#define USE_SHEEN_ROUGHNESSMAP":"",s.mapUv?"#define MAP_UV "+s.mapUv:"",s.alphaMapUv?"#define ALPHAMAP_UV "+s.alphaMapUv:"",s.lightMapUv?"#define LIGHTMAP_UV "+s.lightMapUv:"",s.aoMapUv?"#define AOMAP_UV "+s.aoMapUv:"",s.emissiveMapUv?"#define EMISSIVEMAP_UV "+s.emissiveMapUv:"",s.bumpMapUv?"#define BUMPMAP_UV "+s.bumpMapUv:"",s.normalMapUv?"#define NORMALMAP_UV "+s.normalMapUv:"",s.displacementMapUv?"#define DISPLACEMENTMAP_UV "+s.displacementMapUv:"",s.metalnessMapUv?"#define METALNESSMAP_UV "+s.metalnessMapUv:"",s.roughnessMapUv?"#define ROUGHNESSMAP_UV "+s.roughnessMapUv:"",s.anisotropyMapUv?"#define ANISOTROPYMAP_UV "+s.anisotropyMapUv:"",s.clearcoatMapUv?"#define CLEARCOATMAP_UV "+s.clearcoatMapUv:"",s.clearcoatNormalMapUv?"#define CLEARCOAT_NORMALMAP_UV "+s.clearcoatNormalMapUv:"",s.clearcoatRoughnessMapUv?"#define CLEARCOAT_ROUGHNESSMAP_UV "+s.clearcoatRoughnessMapUv:"",s.iridescenceMapUv?"#define IRIDESCENCEMAP_UV "+s.iridescenceMapUv:"",s.iridescenceThicknessMapUv?"#define IRIDESCENCE_THICKNESSMAP_UV "+s.iridescenceThicknessMapUv:"",s.sheenColorMapUv?"#define SHEEN_COLORMAP_UV "+s.sheenColorMapUv:"",s.sheenRoughnessMapUv?"#define SHEEN_ROUGHNESSMAP_UV "+s.sheenRoughnessMapUv:"",s.specularMapUv?"#define SPECULARMAP_UV "+s.specularMapUv:"",s.specularColorMapUv?"#define SPECULAR_COLORMAP_UV "+s.specularColorMapUv:"",s.specularIntensityMapUv?"#define SPECULAR_INTENSITYMAP_UV "+s.specularIntensityMapUv:"",s.transmissionMapUv?"#define TRANSMISSIONMAP_UV "+s.transmissionMapUv:"",s.thicknessMapUv?"#define THICKNESSMAP_UV "+s.thicknessMapUv:"",s.vertexTangents&&!1===s.flatShading?"#define USE_TANGENT":"",s.vertexColors?"#define USE_COLOR":"",s.vertexAlphas?"#define USE_COLOR_ALPHA":"",s.vertexUv1s?"#define USE_UV1":"",s.vertexUv2s?"#define USE_UV2":"",s.vertexUv3s?"#define USE_UV3":"",s.pointsUvs?"#define USE_POINTS_UV":"",s.flatShading?"#define FLAT_SHADED":"",s.skinning?"#define USE_SKINNING":"",s.morphTargets?"#define USE_MORPHTARGETS":"",s.morphNormals&&!1===s.flatShading?"#define USE_MORPHNORMALS":"",s.morphColors&&s.isWebGL2?"#define USE_MORPHCOLORS":"",s.morphTargetsCount>0&&s.isWebGL2?"#define MORPHTARGETS_TEXTURE":"",s.morphTargetsCount>0&&s.isWebGL2?"#define MORPHTARGETS_TEXTURE_STRIDE "+s.morphTextureStride:"",s.morphTargetsCount>0&&s.isWebGL2?"#define MORPHTARGETS_COUNT "+s.morphTargetsCount:"",s.doubleSided?"#define DOUBLE_SIDED":"",s.flipSided?"#define FLIP_SIDED":"",s.shadowMapEnabled?"#define USE_SHADOWMAP":"",s.shadowMapEnabled?"#define "+f:"",s.sizeAttenuation?"#define USE_SIZEATTENUATION":"",s.numLightProbes>0?"#define USE_LIGHT_PROBES":"",s.useLegacyLights?"#define LEGACY_LIGHTS":"",s.logarithmicDepthBuffer?"#define USE_LOGDEPTHBUF":"",s.logarithmicDepthBuffer&&s.rendererExtensionFragDepth?"#define USE_LOGDEPTHBUF_EXT":"","uniform mat4 modelMatrix;","uniform mat4 modelViewMatrix;","uniform mat4 projectionMatrix;","uniform mat4 viewMatrix;","uniform mat3 normalMatrix;","uniform vec3 cameraPosition;","uniform bool isOrthographic;","#ifdef USE_INSTANCING","\tattribute mat4 instanceMatrix;","#endif","#ifdef USE_INSTANCING_COLOR","\tattribute vec3 instanceColor;","#endif","attribute vec3 position;","attribute vec3 normal;","attribute vec2 uv;","#ifdef USE_UV1","\tattribute vec2 uv1;","#endif","#ifdef USE_UV2","\tattribute vec2 uv2;","#endif","#ifdef USE_UV3","\tattribute vec2 uv3;","#endif","#ifdef USE_TANGENT","\tattribute vec4 tangent;","#endif","#if defined( USE_COLOR_ALPHA )","\tattribute vec4 color;","#elif defined( USE_COLOR )","\tattribute vec3 color;","#endif","#if ( defined( USE_MORPHTARGETS ) && ! defined( MORPHTARGETS_TEXTURE ) )","\tattribute vec3 morphTarget0;","\tattribute vec3 morphTarget1;","\tattribute vec3 morphTarget2;","\tattribute vec3 morphTarget3;","\t#ifdef USE_MORPHNORMALS","\t\tattribute vec3 morphNormal0;","\t\tattribute vec3 morphNormal1;","\t\tattribute vec3 morphNormal2;","\t\tattribute vec3 morphNormal3;","\t#else","\t\tattribute vec3 morphTarget4;","\t\tattribute vec3 morphTarget5;","\t\tattribute vec3 morphTarget6;","\t\tattribute vec3 morphTarget7;","\t#endif","#endif","#ifdef USE_SKINNING","\tattribute vec4 skinIndex;","\tattribute vec4 skinWeight;","#endif","\n"].filter(ma).join("\n"),R=[y,Ta(s),"#define SHADER_TYPE "+s.shaderType,"#define SHADER_NAME "+s.shaderName,S,s.useFog&&s.fog?"#define USE_FOG":"",s.useFog&&s.fogExp2?"#define FOG_EXP2":"",s.map?"#define USE_MAP":"",s.matcap?"#define USE_MATCAP":"",s.envMap?"#define USE_ENVMAP":"",s.envMap?"#define "+g:"",s.envMap?"#define "+_:"",s.envMap?"#define "+v:"",x?"#define CUBEUV_TEXEL_WIDTH "+x.texelWidth:"",x?"#define CUBEUV_TEXEL_HEIGHT "+x.texelHeight:"",x?"#define CUBEUV_MAX_MIP "+x.maxMip+".0":"",s.lightMap?"#define USE_LIGHTMAP":"",s.aoMap?"#define USE_AOMAP":"",s.bumpMap?"#define USE_BUMPMAP":"",s.normalMap?"#define USE_NORMALMAP":"",s.normalMapObjectSpace?"#define USE_NORMALMAP_OBJECTSPACE":"",s.normalMapTangentSpace?"#define USE_NORMALMAP_TANGENTSPACE":"",s.emissiveMap?"#define USE_EMISSIVEMAP":"",s.anisotropy?"#define USE_ANISOTROPY":"",s.anisotropyMap?"#define USE_ANISOTROPYMAP":"",s.clearcoat?"#define USE_CLEARCOAT":"",s.clearcoatMap?"#define USE_CLEARCOATMAP":"",s.clearcoatRoughnessMap?"#define USE_CLEARCOAT_ROUGHNESSMAP":"",s.clearcoatNormalMap?"#define USE_CLEARCOAT_NORMALMAP":"",s.iridescence?"#define USE_IRIDESCENCE":"",s.iridescenceMap?"#define USE_IRIDESCENCEMAP":"",s.iridescenceThicknessMap?"#define USE_IRIDESCENCE_THICKNESSMAP":"",s.specularMap?"#define USE_SPECULARMAP":"",s.specularColorMap?"#define USE_SPECULAR_COLORMAP":"",s.specularIntensityMap?"#define USE_SPECULAR_INTENSITYMAP":"",s.roughnessMap?"#define USE_ROUGHNESSMAP":"",s.metalnessMap?"#define USE_METALNESSMAP":"",s.alphaMap?"#define USE_ALPHAMAP":"",s.alphaTest?"#define USE_ALPHATEST":"",s.alphaHash?"#define USE_ALPHAHASH":"",s.sheen?"#define USE_SHEEN":"",s.sheenColorMap?"#define USE_SHEEN_COLORMAP":"",s.sheenRoughnessMap?"#define USE_SHEEN_ROUGHNESSMAP":"",s.transmission?"#define USE_TRANSMISSION":"",s.transmissionMap?"#define USE_TRANSMISSIONMAP":"",s.thicknessMap?"#define USE_THICKNESSMAP":"",s.vertexTangents&&!1===s.flatShading?"#define USE_TANGENT":"",s.vertexColors||s.instancingColor?"#define USE_COLOR":"",s.vertexAlphas?"#define USE_COLOR_ALPHA":"",s.vertexUv1s?"#define USE_UV1":"",s.vertexUv2s?"#define USE_UV2":"",s.vertexUv3s?"#define USE_UV3":"",s.pointsUvs?"#define USE_POINTS_UV":"",s.gradientMap?"#define USE_GRADIENTMAP":"",s.flatShading?"#define FLAT_SHADED":"",s.doubleSided?"#define DOUBLE_SIDED":"",s.flipSided?"#define FLIP_SIDED":"",s.shadowMapEnabled?"#define USE_SHADOWMAP":"",s.shadowMapEnabled?"#define "+f:"",s.premultipliedAlpha?"#define PREMULTIPLIED_ALPHA":"",s.numLightProbes>0?"#define USE_LIGHT_PROBES":"",s.useLegacyLights?"#define LEGACY_LIGHTS":"",s.decodeVideoTexture?"#define DECODE_VIDEO_TEXTURE":"",s.logarithmicDepthBuffer?"#define USE_LOGDEPTHBUF":"",s.logarithmicDepthBuffer&&s.rendererExtensionFragDepth?"#define USE_LOGDEPTHBUF_EXT":"","uniform mat4 viewMatrix;","uniform vec3 cameraPosition;","uniform bool isOrthographic;",s.toneMapping!==p?"#define TONE_MAPPING":"",s.toneMapping!==p?yr.tonemapping_pars_fragment:"",s.toneMapping!==p?pa("toneMapping",s.toneMapping):"",s.dithering?"#define DITHERING":"",s.opaque?"#define OPAQUE":"",yr.colorspace_pars_fragment,da("linearToOutputTexel",s.outputColorSpace),s.useDepthPacking?"#define DEPTH_PACKING "+s.depthPacking:"","\n"].filter(ma).join("\n")),c=va(c),c=fa(c,s),c=ga(c,s),m=va(m),m=fa(m,s),m=ga(m,s),c=Sa(c),m=Sa(m),s.isWebGL2&&!0!==s.isRawShaderMaterial&&(C="#version 300 es\n",w=[M,"precision mediump sampler2DArray;","#define attribute in","#define varying out","#define texture2D texture"].join("\n")+"\n"+w,R=["precision mediump sampler2DArray;","#define varying in",s.glslVersion===Jt?"":"layout(location = 0) out highp vec4 pc_fragColor;",s.glslVersion===Jt?"":"#define gl_FragColor pc_fragColor","#define gl_FragDepthEXT gl_FragDepth","#define texture2D texture","#define textureCube texture","#define texture2DProj textureProj","#define texture2DLodEXT textureLod","#define texture2DProjLodEXT textureProjLod","#define textureCubeLodEXT textureLod","#define texture2DGradEXT textureGrad","#define texture2DProjGradEXT textureProjGrad","#define textureCubeGradEXT textureGrad"].join("\n")+"\n"+R);const L=C+w+c,P=C+R+m,I=la(o,o.VERTEX_SHADER,L),U=la(o,o.FRAGMENT_SHADER,P);function D(e){if(t.debug.checkShaderErrors){const n=o.getProgramInfoLog(E).trim(),i=o.getShaderInfoLog(I).trim(),r=o.getShaderInfoLog(U).trim();let s=!0,a=!0;if(!1===o.getProgramParameter(E,o.LINK_STATUS))if(s=!1,"function"==typeof t.debug.onShaderError)t.debug.onShaderError(o,E,I,U);else{const t=ua(o,I,"vertex"),e=ua(o,U,"fragment");console.error("THREE.WebGLProgram: Shader Error "+o.getError()+" - VALIDATE_STATUS "+o.getProgramParameter(E,o.VALIDATE_STATUS)+"\n\nProgram Info Log: "+n+"\n"+t+"\n"+e)}else""!==n?console.warn("THREE.WebGLProgram: Program Info Log:",n):""!==i&&""!==r||(a=!1);a&&(e.diagnostics={runnable:s,programLog:n,vertexShader:{log:i,prefix:w},fragmentShader:{log:r,prefix:R}})}o.deleteShader(I),o.deleteShader(U),N=new oa(o,E),O=function(t,e){const n={},i=t.getProgramParameter(e,t.ACTIVE_ATTRIBUTES);for(let r=0;r0,Z=s.clearcoat>0,J=s.iridescence>0,K=s.sheen>0,$=s.transmission>0,Q=Y&&!!s.anisotropyMap,tt=Z&&!!s.clearcoatMap,et=Z&&!!s.clearcoatNormalMap,nt=Z&&!!s.clearcoatRoughnessMap,it=J&&!!s.iridescenceMap,rt=J&&!!s.iridescenceThicknessMap,st=K&&!!s.sheenColorMap,at=K&&!!s.sheenRoughnessMap,ot=!!s.specularMap,lt=!!s.specularColorMap,ct=!!s.specularIntensityMap,ht=$&&!!s.transmissionMap,ut=$&&!!s.thicknessMap,dt=!!s.gradientMap,pt=!!s.alphaMap,mt=s.alphaTest>0,ft=!!s.alphaHash,gt=!!s.extensions,_t=!!M.attributes.uv1,vt=!!M.attributes.uv2,xt=!!M.attributes.uv3;let yt=p;return s.toneMapped&&(null!==D&&!0!==D.isXRRenderTarget||(yt=t.toneMapping)),{isWebGL2:u,shaderID:E,shaderType:s.type,shaderName:s.name,vertexShader:C,fragmentShader:L,defines:s.defines,customVertexShaderID:P,customFragmentShaderID:I,isRawShaderMaterial:!0===s.isRawShaderMaterial,glslVersion:s.glslVersion,precision:f,batching:O,instancing:N,instancingColor:N&&null!==x.instanceColor,supportsVertexTextures:m,outputColorSpace:null===D?t.outputColorSpace:!0===D.isXRRenderTarget?D.texture.colorSpace:Ht,map:F,matcap:B,envMap:z,envMapMode:z&&b.mapping,envMapCubeUVHeight:T,aoMap:G,lightMap:H,bumpMap:V,normalMap:k,displacementMap:m&&W,emissiveMap:X,normalMapObjectSpace:k&&1===s.normalMapType,normalMapTangentSpace:k&&0===s.normalMapType,metalnessMap:j,roughnessMap:q,anisotropy:Y,anisotropyMap:Q,clearcoat:Z,clearcoatMap:tt,clearcoatNormalMap:et,clearcoatRoughnessMap:nt,iridescence:J,iridescenceMap:it,iridescenceThicknessMap:rt,sheen:K,sheenColorMap:st,sheenRoughnessMap:at,specularMap:ot,specularColorMap:lt,specularIntensityMap:ct,transmission:$,transmissionMap:ht,thicknessMap:ut,gradientMap:dt,opaque:!1===s.transparent&&1===s.blending,alphaMap:pt,alphaTest:mt,alphaHash:ft,combine:s.combine,mapUv:F&&_(s.map.channel),aoMapUv:G&&_(s.aoMap.channel),lightMapUv:H&&_(s.lightMap.channel),bumpMapUv:V&&_(s.bumpMap.channel),normalMapUv:k&&_(s.normalMap.channel),displacementMapUv:W&&_(s.displacementMap.channel),emissiveMapUv:X&&_(s.emissiveMap.channel),metalnessMapUv:j&&_(s.metalnessMap.channel),roughnessMapUv:q&&_(s.roughnessMap.channel),anisotropyMapUv:Q&&_(s.anisotropyMap.channel),clearcoatMapUv:tt&&_(s.clearcoatMap.channel),clearcoatNormalMapUv:et&&_(s.clearcoatNormalMap.channel),clearcoatRoughnessMapUv:nt&&_(s.clearcoatRoughnessMap.channel),iridescenceMapUv:it&&_(s.iridescenceMap.channel),iridescenceThicknessMapUv:rt&&_(s.iridescenceThicknessMap.channel),sheenColorMapUv:st&&_(s.sheenColorMap.channel),sheenRoughnessMapUv:at&&_(s.sheenRoughnessMap.channel),specularMapUv:ot&&_(s.specularMap.channel),specularColorMapUv:lt&&_(s.specularColorMap.channel),specularIntensityMapUv:ct&&_(s.specularIntensityMap.channel),transmissionMapUv:ht&&_(s.transmissionMap.channel),thicknessMapUv:ut&&_(s.thicknessMap.channel),alphaMapUv:pt&&_(s.alphaMap.channel),vertexTangents:!!M.attributes.tangent&&(k||Y),vertexColors:s.vertexColors,vertexAlphas:!0===s.vertexColors&&!!M.attributes.color&&4===M.attributes.color.itemSize,vertexUv1s:_t,vertexUv2s:vt,vertexUv3s:xt,pointsUvs:!0===x.isPoints&&!!M.attributes.uv&&(F||pt),fog:!!y,useFog:!0===s.fog,fogExp2:y&&y.isFogExp2,flatShading:!0===s.flatShading,sizeAttenuation:!0===s.sizeAttenuation,logarithmicDepthBuffer:d,skinning:!0===x.isSkinnedMesh,morphTargets:void 0!==M.morphAttributes.position,morphNormals:void 0!==M.morphAttributes.normal,morphColors:void 0!==M.morphAttributes.color,morphTargetsCount:R,morphTextureStride:U,numDirLights:l.directional.length,numPointLights:l.point.length,numSpotLights:l.spot.length,numSpotLightMaps:l.spotLightMap.length,numRectAreaLights:l.rectArea.length,numHemiLights:l.hemi.length,numDirLightShadows:l.directionalShadowMap.length,numPointLightShadows:l.pointShadowMap.length,numSpotLightShadows:l.spotShadowMap.length,numSpotLightShadowsWithMaps:l.numSpotLightShadowsWithMaps,numLightProbes:l.numLightProbes,numClippingPlanes:o.numPlanes,numClipIntersection:o.numIntersection,dithering:s.dithering,shadowMapEnabled:t.shadowMap.enabled&&h.length>0,shadowMapType:t.shadowMap.type,toneMapping:yt,useLegacyLights:t._useLegacyLights,decodeVideoTexture:F&&!0===s.map.isVideoTexture&&Re.getTransfer(s.map.colorSpace)===Xt,premultipliedAlpha:s.premultipliedAlpha,doubleSided:2===s.side,flipSided:s.side===a,useDepthPacking:s.depthPacking>=0,depthPacking:s.depthPacking||0,index0AttributeName:s.index0AttributeName,extensionDerivatives:gt&&!0===s.extensions.derivatives,extensionFragDepth:gt&&!0===s.extensions.fragDepth,extensionDrawBuffers:gt&&!0===s.extensions.drawBuffers,extensionShaderTextureLOD:gt&&!0===s.extensions.shaderTextureLOD,extensionClipCullDistance:gt&&s.extensions.clipCullDistance&&i.has("WEBGL_clip_cull_distance"),rendererExtensionFragDepth:u||i.has("EXT_frag_depth"),rendererExtensionDrawBuffers:u||i.has("WEBGL_draw_buffers"),rendererExtensionShaderTextureLod:u||i.has("EXT_shader_texture_lod"),rendererExtensionParallelShaderCompile:i.has("KHR_parallel_shader_compile"),customProgramCacheKey:s.customProgramCacheKey()}},getProgramCacheKey:function(e){const n=[];if(e.shaderID?n.push(e.shaderID):(n.push(e.customVertexShaderID),n.push(e.customFragmentShaderID)),void 0!==e.defines)for(const t in e.defines)n.push(t),n.push(e.defines[t]);return!1===e.isRawShaderMaterial&&(!function(t,e){t.push(e.precision),t.push(e.outputColorSpace),t.push(e.envMapMode),t.push(e.envMapCubeUVHeight),t.push(e.mapUv),t.push(e.alphaMapUv),t.push(e.lightMapUv),t.push(e.aoMapUv),t.push(e.bumpMapUv),t.push(e.normalMapUv),t.push(e.displacementMapUv),t.push(e.emissiveMapUv),t.push(e.metalnessMapUv),t.push(e.roughnessMapUv),t.push(e.anisotropyMapUv),t.push(e.clearcoatMapUv),t.push(e.clearcoatNormalMapUv),t.push(e.clearcoatRoughnessMapUv),t.push(e.iridescenceMapUv),t.push(e.iridescenceThicknessMapUv),t.push(e.sheenColorMapUv),t.push(e.sheenRoughnessMapUv),t.push(e.specularMapUv),t.push(e.specularColorMapUv),t.push(e.specularIntensityMapUv),t.push(e.transmissionMapUv),t.push(e.thicknessMapUv),t.push(e.combine),t.push(e.fogExp2),t.push(e.sizeAttenuation),t.push(e.morphTargetsCount),t.push(e.morphAttributeCount),t.push(e.numDirLights),t.push(e.numPointLights),t.push(e.numSpotLights),t.push(e.numSpotLightMaps),t.push(e.numHemiLights),t.push(e.numRectAreaLights),t.push(e.numDirLightShadows),t.push(e.numPointLightShadows),t.push(e.numSpotLightShadows),t.push(e.numSpotLightShadowsWithMaps),t.push(e.numLightProbes),t.push(e.shadowMapType),t.push(e.toneMapping),t.push(e.numClippingPlanes),t.push(e.numClipIntersection),t.push(e.depthPacking)}(n,e),function(t,e){l.disableAll(),e.isWebGL2&&l.enable(0);e.supportsVertexTextures&&l.enable(1);e.instancing&&l.enable(2);e.instancingColor&&l.enable(3);e.matcap&&l.enable(4);e.envMap&&l.enable(5);e.normalMapObjectSpace&&l.enable(6);e.normalMapTangentSpace&&l.enable(7);e.clearcoat&&l.enable(8);e.iridescence&&l.enable(9);e.alphaTest&&l.enable(10);e.vertexColors&&l.enable(11);e.vertexAlphas&&l.enable(12);e.vertexUv1s&&l.enable(13);e.vertexUv2s&&l.enable(14);e.vertexUv3s&&l.enable(15);e.vertexTangents&&l.enable(16);e.anisotropy&&l.enable(17);e.alphaHash&&l.enable(18);e.batching&&l.enable(19);t.push(l.mask),l.disableAll(),e.fog&&l.enable(0);e.useFog&&l.enable(1);e.flatShading&&l.enable(2);e.logarithmicDepthBuffer&&l.enable(3);e.skinning&&l.enable(4);e.morphTargets&&l.enable(5);e.morphNormals&&l.enable(6);e.morphColors&&l.enable(7);e.premultipliedAlpha&&l.enable(8);e.shadowMapEnabled&&l.enable(9);e.useLegacyLights&&l.enable(10);e.doubleSided&&l.enable(11);e.flipSided&&l.enable(12);e.useDepthPacking&&l.enable(13);e.dithering&&l.enable(14);e.transmission&&l.enable(15);e.sheen&&l.enable(16);e.opaque&&l.enable(17);e.pointsUvs&&l.enable(18);e.decodeVideoTexture&&l.enable(19);t.push(l.mask)}(n,e),n.push(t.outputColorSpace)),n.push(e.customProgramCacheKey),n.join()},getUniforms:function(t){const e=g[t.type];let n;if(e){const t=Sr[e];n=nr.clone(t.uniforms)}else n=t.uniforms;return n},acquireProgram:function(e,n){let i;for(let t=0,e=h.length;t0?i.push(h):!0===a.transparent?r.push(h):n.push(h)},unshift:function(t,e,a,o,l,c){const h=s(t,e,a,o,l,c);a.transmission>0?i.unshift(h):!0===a.transparent?r.unshift(h):n.unshift(h)},finish:function(){for(let n=e,i=t.length;n1&&n.sort(t||Pa),i.length>1&&i.sort(e||Ia),r.length>1&&r.sort(e||Ia)}}}function Da(){let t=new WeakMap;return{get:function(e,n){const i=t.get(e);let r;return void 0===i?(r=new Ua,t.set(e,[r])):n>=i.length?(r=new Ua,i.push(r)):r=i[n],r},dispose:function(){t=new WeakMap}}}function Na(){const t={};return{get:function(e){if(void 0!==t[e.id])return t[e.id];let n;switch(e.type){case"DirectionalLight":n={direction:new We,color:new ci};break;case"SpotLight":n={position:new We,direction:new We,color:new ci,distance:0,coneCos:0,penumbraCos:0,decay:0};break;case"PointLight":n={position:new We,color:new ci,distance:0,decay:0};break;case"HemisphereLight":n={direction:new We,skyColor:new ci,groundColor:new ci};break;case"RectAreaLight":n={color:new ci,position:new We,halfWidth:new We,halfHeight:new We}}return t[e.id]=n,n}}}let Oa=0;function Fa(t,e){return(e.castShadow?2:0)-(t.castShadow?2:0)+(e.map?1:0)-(t.map?1:0)}function Ba(t,e){const n=new Na,i=function(){const t={};return{get:function(e){if(void 0!==t[e.id])return t[e.id];let n;switch(e.type){case"DirectionalLight":case"SpotLight":n={shadowBias:0,shadowNormalBias:0,shadowRadius:1,shadowMapSize:new me};break;case"PointLight":n={shadowBias:0,shadowNormalBias:0,shadowRadius:1,shadowMapSize:new me,shadowCameraNear:1,shadowCameraFar:1e3}}return t[e.id]=n,n}}}(),r={version:0,hash:{directionalLength:-1,pointLength:-1,spotLength:-1,rectAreaLength:-1,hemiLength:-1,numDirectionalShadows:-1,numPointShadows:-1,numSpotShadows:-1,numSpotMaps:-1,numLightProbes:-1},ambient:[0,0,0],probe:[],directional:[],directionalShadow:[],directionalShadowMap:[],directionalShadowMatrix:[],spot:[],spotLightMap:[],spotShadow:[],spotShadowMap:[],spotLightMatrix:[],rectArea:[],rectAreaLTC1:null,rectAreaLTC2:null,point:[],pointShadow:[],pointShadowMap:[],pointShadowMatrix:[],hemi:[],numSpotLightShadowsWithMaps:0,numLightProbes:0};for(let t=0;t<9;t++)r.probe.push(new We);const s=new We,a=new Mn,o=new Mn;return{setup:function(s,a){let o=0,l=0,c=0;for(let t=0;t<9;t++)r.probe[t].set(0,0,0);let h=0,u=0,d=0,p=0,m=0,f=0,g=0,_=0,v=0,x=0,y=0;s.sort(Fa);const M=!0===a?Math.PI:1;for(let t=0,e=s.length;t0&&(e.isWebGL2?!0===t.has("OES_texture_float_linear")?(r.rectAreaLTC1=Mr.LTC_FLOAT_1,r.rectAreaLTC2=Mr.LTC_FLOAT_2):(r.rectAreaLTC1=Mr.LTC_HALF_1,r.rectAreaLTC2=Mr.LTC_HALF_2):!0===t.has("OES_texture_float_linear")?(r.rectAreaLTC1=Mr.LTC_FLOAT_1,r.rectAreaLTC2=Mr.LTC_FLOAT_2):!0===t.has("OES_texture_half_float_linear")?(r.rectAreaLTC1=Mr.LTC_HALF_1,r.rectAreaLTC2=Mr.LTC_HALF_2):console.error("THREE.WebGLRenderer: Unable to use RectAreaLight. Missing WebGL extensions.")),r.ambient[0]=o,r.ambient[1]=l,r.ambient[2]=c;const S=r.hash;S.directionalLength===h&&S.pointLength===u&&S.spotLength===d&&S.rectAreaLength===p&&S.hemiLength===m&&S.numDirectionalShadows===f&&S.numPointShadows===g&&S.numSpotShadows===_&&S.numSpotMaps===v&&S.numLightProbes===y||(r.directional.length=h,r.spot.length=d,r.rectArea.length=p,r.point.length=u,r.hemi.length=m,r.directionalShadow.length=f,r.directionalShadowMap.length=f,r.pointShadow.length=g,r.pointShadowMap.length=g,r.spotShadow.length=_,r.spotShadowMap.length=_,r.directionalShadowMatrix.length=f,r.pointShadowMatrix.length=g,r.spotLightMatrix.length=_+v-x,r.spotLightMap.length=v,r.numSpotLightShadowsWithMaps=x,r.numLightProbes=y,S.directionalLength=h,S.pointLength=u,S.spotLength=d,S.rectAreaLength=p,S.hemiLength=m,S.numDirectionalShadows=f,S.numPointShadows=g,S.numSpotShadows=_,S.numSpotMaps=v,S.numLightProbes=y,r.version=Oa++)},setupView:function(t,e){let n=0,i=0,l=0,c=0,h=0;const u=e.matrixWorldInverse;for(let e=0,d=t.length;e=s.length?(a=new za(t,e),s.push(a)):a=s[r],a},dispose:function(){n=new WeakMap}}}class Ha extends di{constructor(t){super(),this.isMeshDepthMaterial=!0,this.type="MeshDepthMaterial",this.depthPacking=3200,this.map=null,this.alphaMap=null,this.displacementMap=null,this.displacementScale=1,this.displacementBias=0,this.wireframe=!1,this.wireframeLinewidth=1,this.setValues(t)}copy(t){return super.copy(t),this.depthPacking=t.depthPacking,this.map=t.map,this.alphaMap=t.alphaMap,this.displacementMap=t.displacementMap,this.displacementScale=t.displacementScale,this.displacementBias=t.displacementBias,this.wireframe=t.wireframe,this.wireframeLinewidth=t.wireframeLinewidth,this}}class Va extends di{constructor(t){super(),this.isMeshDistanceMaterial=!0,this.type="MeshDistanceMaterial",this.map=null,this.alphaMap=null,this.displacementMap=null,this.displacementScale=1,this.displacementBias=0,this.setValues(t)}copy(t){return super.copy(t),this.map=t.map,this.alphaMap=t.alphaMap,this.displacementMap=t.displacementMap,this.displacementScale=t.displacementScale,this.displacementBias=t.displacementBias,this}}function ka(t,e,i){let o=new gr;const l=new me,c=new me,h=new Be,u=new Ha({depthPacking:3201}),d=new Va,p={},m=i.maxTextureSize,f={[s]:a,[a]:s,2:2},g=new ir({defines:{VSM_SAMPLES:8},uniforms:{shadow_pass:{value:null},resolution:{value:new me},radius:{value:4}},vertexShader:"void main() {\n\tgl_Position = vec4( position, 1.0 );\n}",fragmentShader:"uniform sampler2D shadow_pass;\nuniform vec2 resolution;\nuniform float radius;\n#include \nvoid main() {\n\tconst float samples = float( VSM_SAMPLES );\n\tfloat mean = 0.0;\n\tfloat squared_mean = 0.0;\n\tfloat uvStride = samples <= 1.0 ? 0.0 : 2.0 / ( samples - 1.0 );\n\tfloat uvStart = samples <= 1.0 ? 0.0 : - 1.0;\n\tfor ( float i = 0.0; i < samples; i ++ ) {\n\t\tfloat uvOffset = uvStart + i * uvStride;\n\t\t#ifdef HORIZONTAL_PASS\n\t\t\tvec2 distribution = unpackRGBATo2Half( texture2D( shadow_pass, ( gl_FragCoord.xy + vec2( uvOffset, 0.0 ) * radius ) / resolution ) );\n\t\t\tmean += distribution.x;\n\t\t\tsquared_mean += distribution.y * distribution.y + distribution.x * distribution.x;\n\t\t#else\n\t\t\tfloat depth = unpackRGBAToDepth( texture2D( shadow_pass, ( gl_FragCoord.xy + vec2( 0.0, uvOffset ) * radius ) / resolution ) );\n\t\t\tmean += depth;\n\t\t\tsquared_mean += depth * depth;\n\t\t#endif\n\t}\n\tmean = mean / samples;\n\tsquared_mean = squared_mean / samples;\n\tfloat std_dev = sqrt( squared_mean - mean * mean );\n\tgl_FragColor = pack2HalfToRGBA( vec2( mean, std_dev ) );\n}"}),_=g.clone();_.defines.HORIZONTAL_PASS=1;const v=new Ii;v.setAttribute("position",new Mi(new Float32Array([-1,-1,.5,3,-1,.5,-1,3,.5]),3));const x=new Ji(v,g),y=this;this.enabled=!1,this.autoUpdate=!0,this.needsUpdate=!1,this.type=n;let M=this.type;function S(n,i){const r=e.update(x);g.defines.VSM_SAMPLES!==n.blurSamples&&(g.defines.VSM_SAMPLES=n.blurSamples,_.defines.VSM_SAMPLES=n.blurSamples,g.needsUpdate=!0,_.needsUpdate=!0),null===n.mapPass&&(n.mapPass=new Ge(l.x,l.y)),g.uniforms.shadow_pass.value=n.map.texture,g.uniforms.resolution.value=n.mapSize,g.uniforms.radius.value=n.radius,t.setRenderTarget(n.mapPass),t.clear(),t.renderBufferDirect(i,null,r,g,x,null),_.uniforms.shadow_pass.value=n.mapPass.texture,_.uniforms.resolution.value=n.mapSize,_.uniforms.radius.value=n.radius,t.setRenderTarget(n.map),t.clear(),t.renderBufferDirect(i,null,r,_,x,null)}function b(e,n,i,s){let a=null;const o=!0===i.isPointLight?e.customDistanceMaterial:e.customDepthMaterial;if(void 0!==o)a=o;else if(a=!0===i.isPointLight?d:u,t.localClippingEnabled&&!0===n.clipShadows&&Array.isArray(n.clippingPlanes)&&0!==n.clippingPlanes.length||n.displacementMap&&0!==n.displacementScale||n.alphaMap&&n.alphaTest>0||n.map&&n.alphaTest>0){const t=a.uuid,e=n.uuid;let i=p[t];void 0===i&&(i={},p[t]=i);let r=i[e];void 0===r&&(r=a.clone(),i[e]=r,n.addEventListener("dispose",E)),a=r}if(a.visible=n.visible,a.wireframe=n.wireframe,a.side=s===r?null!==n.shadowSide?n.shadowSide:n.side:null!==n.shadowSide?n.shadowSide:f[n.side],a.alphaMap=n.alphaMap,a.alphaTest=n.alphaTest,a.map=n.map,a.clipShadows=n.clipShadows,a.clippingPlanes=n.clippingPlanes,a.clipIntersection=n.clipIntersection,a.displacementMap=n.displacementMap,a.displacementScale=n.displacementScale,a.displacementBias=n.displacementBias,a.wireframeLinewidth=n.wireframeLinewidth,a.linewidth=n.linewidth,!0===i.isPointLight&&!0===a.isMeshDistanceMaterial){t.properties.get(a).light=i}return a}function T(n,i,s,a,l){if(!1===n.visible)return;if(n.layers.test(i.layers)&&(n.isMesh||n.isLine||n.isPoints)&&(n.castShadow||n.receiveShadow&&l===r)&&(!n.frustumCulled||o.intersectsObject(n))){n.modelViewMatrix.multiplyMatrices(s.matrixWorldInverse,n.matrixWorld);const r=e.update(n),o=n.material;if(Array.isArray(o)){const e=r.groups;for(let c=0,h=e.length;cm||l.y>m)&&(l.x>m&&(c.x=Math.floor(m/g.x),l.x=c.x*g.x,u.mapSize.x=c.x),l.y>m&&(c.y=Math.floor(m/g.y),l.y=c.y*g.y,u.mapSize.y=c.y)),null===u.map||!0===p||!0===f){const t=this.type!==r?{minFilter:P,magFilter:P}:{};null!==u.map&&u.map.dispose(),u.map=new Ge(l.x,l.y,t),u.map.texture.name=a.name+".shadowMap",u.camera.updateProjectionMatrix()}t.setRenderTarget(u.map),t.clear();const _=u.getViewportCount();for(let t=0;t<_;t++){const e=u.getViewport(t);h.set(c.x*e.x,c.y*e.y,c.x*e.z,c.y*e.w),d.viewport(h),u.updateMatrices(a,t),o=u.getFrustum(),T(n,i,u.camera,a,this.type)}!0!==u.isPointLightShadow&&this.type===r&&S(u,i),u.needsUpdate=!1}M=this.type,y.needsUpdate=!1,t.setRenderTarget(s,a,u)}}function Wa(t,e,n){const i=n.isWebGL2;const r=new function(){let e=!1;const n=new Be;let i=null;const r=new Be(0,0,0,0);return{setMask:function(n){i===n||e||(t.colorMask(n,n,n,n),i=n)},setLocked:function(t){e=t},setClear:function(e,i,s,a,o){!0===o&&(e*=a,i*=a,s*=a),n.set(e,i,s,a),!1===r.equals(n)&&(t.clearColor(e,i,s,a),r.copy(n))},reset:function(){e=!1,i=null,r.set(-1,0,0,0)}}},s=new function(){let e=!1,n=null,i=null,r=null;return{setTest:function(e){e?j(t.DEPTH_TEST):q(t.DEPTH_TEST)},setMask:function(i){n===i||e||(t.depthMask(i),n=i)},setFunc:function(e){if(i!==e){switch(e){case 0:t.depthFunc(t.NEVER);break;case 1:t.depthFunc(t.ALWAYS);break;case 2:t.depthFunc(t.LESS);break;case 3:default:t.depthFunc(t.LEQUAL);break;case 4:t.depthFunc(t.EQUAL);break;case 5:t.depthFunc(t.GEQUAL);break;case 6:t.depthFunc(t.GREATER);break;case 7:t.depthFunc(t.NOTEQUAL)}i=e}},setLocked:function(t){e=t},setClear:function(e){r!==e&&(t.clearDepth(e),r=e)},reset:function(){e=!1,n=null,i=null,r=null}}},h=new function(){let e=!1,n=null,i=null,r=null,s=null,a=null,o=null,l=null,c=null;return{setTest:function(n){e||(n?j(t.STENCIL_TEST):q(t.STENCIL_TEST))},setMask:function(i){n===i||e||(t.stencilMask(i),n=i)},setFunc:function(e,n,a){i===e&&r===n&&s===a||(t.stencilFunc(e,n,a),i=e,r=n,s=a)},setOp:function(e,n,i){a===e&&o===n&&l===i||(t.stencilOp(e,n,i),a=e,o=n,l=i)},setLocked:function(t){e=t},setClear:function(e){c!==e&&(t.clearStencil(e),c=e)},reset:function(){e=!1,n=null,i=null,r=null,s=null,a=null,o=null,l=null,c=null}}},u=new WeakMap,d=new WeakMap;let p={},m={},f=new WeakMap,g=[],_=null,v=!1,x=null,y=null,M=null,S=null,b=null,T=null,E=null,w=new ci(0,0,0),A=0,R=!1,C=null,L=null,P=null,I=null,U=null;const D=t.getParameter(t.MAX_COMBINED_TEXTURE_IMAGE_UNITS);let N=!1,O=0;const F=t.getParameter(t.VERSION);-1!==F.indexOf("WebGL")?(O=parseFloat(/^WebGL (\d)/.exec(F)[1]),N=O>=1):-1!==F.indexOf("OpenGL ES")&&(O=parseFloat(/^OpenGL ES (\d)/.exec(F)[1]),N=O>=2);let B=null,z={};const G=t.getParameter(t.SCISSOR_BOX),H=t.getParameter(t.VIEWPORT),V=(new Be).fromArray(G),k=(new Be).fromArray(H);function W(e,n,r,s){const a=new Uint8Array(4),o=t.createTexture();t.bindTexture(e,o),t.texParameteri(e,t.TEXTURE_MIN_FILTER,t.NEAREST),t.texParameteri(e,t.TEXTURE_MAG_FILTER,t.NEAREST);for(let o=0;oi||t.height>i)&&(r=i/Math.max(t.width,t.height)),r<1||!0===e){if("undefined"!=typeof HTMLImageElement&&t instanceof HTMLImageElement||"undefined"!=typeof HTMLCanvasElement&&t instanceof HTMLCanvasElement||"undefined"!=typeof ImageBitmap&&t instanceof ImageBitmap){const i=e?he:Math.floor,s=i(r*t.width),a=i(r*t.height);void 0===u&&(u=m(s,a));const o=n?m(s,a):u;o.width=s,o.height=a;return o.getContext("2d").drawImage(t,0,0,s,a),console.warn("THREE.WebGLRenderer: Texture has been resized from ("+t.width+"x"+t.height+") to ("+s+"x"+a+")."),o}return"data"in t&&console.warn("THREE.WebGLRenderer: Image in DataTexture is too big ("+t.width+"x"+t.height+")."),t}return t}function g(t){return ce(t.width)&&ce(t.height)}function _(t,e){return t.generateMipmaps&&e&&t.minFilter!==P&&t.minFilter!==D}function v(e){t.generateMipmap(e)}function x(n,i,r,s,a=!1){if(!1===o)return i;if(null!==n){if(void 0!==t[n])return t[n];console.warn("THREE.WebGLRenderer: Attempt to use non-existing WebGL internal format '"+n+"'")}let l=i;if(i===t.RED&&(r===t.FLOAT&&(l=t.R32F),r===t.HALF_FLOAT&&(l=t.R16F),r===t.UNSIGNED_BYTE&&(l=t.R8)),i===t.RED_INTEGER&&(r===t.UNSIGNED_BYTE&&(l=t.R8UI),r===t.UNSIGNED_SHORT&&(l=t.R16UI),r===t.UNSIGNED_INT&&(l=t.R32UI),r===t.BYTE&&(l=t.R8I),r===t.SHORT&&(l=t.R16I),r===t.INT&&(l=t.R32I)),i===t.RG&&(r===t.FLOAT&&(l=t.RG32F),r===t.HALF_FLOAT&&(l=t.RG16F),r===t.UNSIGNED_BYTE&&(l=t.RG8)),i===t.RGBA){const e=a?Wt:Re.getTransfer(s);r===t.FLOAT&&(l=t.RGBA32F),r===t.HALF_FLOAT&&(l=t.RGBA16F),r===t.UNSIGNED_BYTE&&(l=e===Xt?t.SRGB8_ALPHA8:t.RGBA8),r===t.UNSIGNED_SHORT_4_4_4_4&&(l=t.RGBA4),r===t.UNSIGNED_SHORT_5_5_5_1&&(l=t.RGB5_A1)}return l!==t.R16F&&l!==t.R32F&&l!==t.RG16F&&l!==t.RG32F&&l!==t.RGBA16F&&l!==t.RGBA32F||e.get("EXT_color_buffer_float"),l}function y(t,e,n){return!0===_(t,n)||t.isFramebufferTexture&&t.minFilter!==P&&t.minFilter!==D?Math.log2(Math.max(e.width,e.height))+1:void 0!==t.mipmaps&&t.mipmaps.length>0?t.mipmaps.length:t.isCompressedTexture&&Array.isArray(t.image)?e.mipmaps.length:1}function M(e){return e===P||e===I||e===U?t.NEAREST:t.LINEAR}function S(t){const e=t.target;e.removeEventListener("dispose",S),function(t){const e=i.get(t);if(void 0===e.__webglInit)return;const n=t.source,r=d.get(n);if(r){const i=r[e.__cacheKey];i.usedTimes--,0===i.usedTimes&&T(t),0===Object.keys(r).length&&d.delete(n)}i.remove(t)}(e),e.isVideoTexture&&h.delete(e)}function b(e){const n=e.target;n.removeEventListener("dispose",b),function(e){const n=e.texture,r=i.get(e),s=i.get(n);void 0!==s.__webglTexture&&(t.deleteTexture(s.__webglTexture),a.memory.textures--);e.depthTexture&&e.depthTexture.dispose();if(e.isWebGLCubeRenderTarget)for(let e=0;e<6;e++){if(Array.isArray(r.__webglFramebuffer[e]))for(let n=0;n0&&s.__version!==e.version){const t=e.image;if(null===t)console.warn("THREE.WebGLRenderer: Texture marked for update but no image data found.");else{if(!1!==t.complete)return void J(s,e,r);console.warn("THREE.WebGLRenderer: Texture marked for update but image is incomplete")}}n.bindTexture(t.TEXTURE_2D,s.__webglTexture,t.TEXTURE0+r)}const A={[R]:t.REPEAT,[C]:t.CLAMP_TO_EDGE,[L]:t.MIRRORED_REPEAT},z={[P]:t.NEAREST,[I]:t.NEAREST_MIPMAP_NEAREST,[U]:t.NEAREST_MIPMAP_LINEAR,[D]:t.LINEAR,[N]:t.LINEAR_MIPMAP_NEAREST,[O]:t.LINEAR_MIPMAP_LINEAR},k={512:t.NEVER,519:t.ALWAYS,513:t.LESS,515:t.LEQUAL,514:t.EQUAL,518:t.GEQUAL,516:t.GREATER,517:t.NOTEQUAL};function W(n,s,a){if(a?(t.texParameteri(n,t.TEXTURE_WRAP_S,A[s.wrapS]),t.texParameteri(n,t.TEXTURE_WRAP_T,A[s.wrapT]),n!==t.TEXTURE_3D&&n!==t.TEXTURE_2D_ARRAY||t.texParameteri(n,t.TEXTURE_WRAP_R,A[s.wrapR]),t.texParameteri(n,t.TEXTURE_MAG_FILTER,z[s.magFilter]),t.texParameteri(n,t.TEXTURE_MIN_FILTER,z[s.minFilter])):(t.texParameteri(n,t.TEXTURE_WRAP_S,t.CLAMP_TO_EDGE),t.texParameteri(n,t.TEXTURE_WRAP_T,t.CLAMP_TO_EDGE),n!==t.TEXTURE_3D&&n!==t.TEXTURE_2D_ARRAY||t.texParameteri(n,t.TEXTURE_WRAP_R,t.CLAMP_TO_EDGE),s.wrapS===C&&s.wrapT===C||console.warn("THREE.WebGLRenderer: Texture is not power of two. Texture.wrapS and Texture.wrapT should be set to THREE.ClampToEdgeWrapping."),t.texParameteri(n,t.TEXTURE_MAG_FILTER,M(s.magFilter)),t.texParameteri(n,t.TEXTURE_MIN_FILTER,M(s.minFilter)),s.minFilter!==P&&s.minFilter!==D&&console.warn("THREE.WebGLRenderer: Texture is not power of two. Texture.minFilter should be set to THREE.NearestFilter or THREE.LinearFilter.")),s.compareFunction&&(t.texParameteri(n,t.TEXTURE_COMPARE_MODE,t.COMPARE_REF_TO_TEXTURE),t.texParameteri(n,t.TEXTURE_COMPARE_FUNC,k[s.compareFunction])),!0===e.has("EXT_texture_filter_anisotropic")){const a=e.get("EXT_texture_filter_anisotropic");if(s.magFilter===P)return;if(s.minFilter!==U&&s.minFilter!==O)return;if(s.type===H&&!1===e.has("OES_texture_float_linear"))return;if(!1===o&&s.type===V&&!1===e.has("OES_texture_half_float_linear"))return;(s.anisotropy>1||i.get(s).__currentAnisotropy)&&(t.texParameterf(n,a.TEXTURE_MAX_ANISOTROPY_EXT,Math.min(s.anisotropy,r.getMaxAnisotropy())),i.get(s).__currentAnisotropy=s.anisotropy)}}function Z(e,n){let i=!1;void 0===e.__webglInit&&(e.__webglInit=!0,n.addEventListener("dispose",S));const r=n.source;let s=d.get(r);void 0===s&&(s={},d.set(r,s));const o=function(t){const e=[];return e.push(t.wrapS),e.push(t.wrapT),e.push(t.wrapR||0),e.push(t.magFilter),e.push(t.minFilter),e.push(t.anisotropy),e.push(t.internalFormat),e.push(t.format),e.push(t.type),e.push(t.generateMipmaps),e.push(t.premultiplyAlpha),e.push(t.flipY),e.push(t.unpackAlignment),e.push(t.colorSpace),e.join()}(n);if(o!==e.__cacheKey){void 0===s[o]&&(s[o]={texture:t.createTexture(),usedTimes:0},a.memory.textures++,i=!0),s[o].usedTimes++;const r=s[e.__cacheKey];void 0!==r&&(s[e.__cacheKey].usedTimes--,0===r.usedTimes&&T(n)),e.__cacheKey=o,e.__webglTexture=s[o].texture}return i}function J(e,a,l){let c=t.TEXTURE_2D;(a.isDataArrayTexture||a.isCompressedArrayTexture)&&(c=t.TEXTURE_2D_ARRAY),a.isData3DTexture&&(c=t.TEXTURE_3D);const h=Z(e,a),u=a.source;n.bindTexture(c,e.__webglTexture,t.TEXTURE0+l);const d=i.get(u);if(u.version!==d.__version||!0===h){n.activeTexture(t.TEXTURE0+l);const e=Re.getPrimaries(Re.workingColorSpace),i=a.colorSpace===zt?null:Re.getPrimaries(a.colorSpace),p=a.colorSpace===zt||e===i?t.NONE:t.BROWSER_DEFAULT_WEBGL;t.pixelStorei(t.UNPACK_FLIP_Y_WEBGL,a.flipY),t.pixelStorei(t.UNPACK_PREMULTIPLY_ALPHA_WEBGL,a.premultiplyAlpha),t.pixelStorei(t.UNPACK_ALIGNMENT,a.unpackAlignment),t.pixelStorei(t.UNPACK_COLORSPACE_CONVERSION_WEBGL,p);const m=function(t){return!o&&(t.wrapS!==C||t.wrapT!==C||t.minFilter!==P&&t.minFilter!==D)}(a)&&!1===g(a.image);let M=f(a.image,m,!1,r.maxTextureSize);M=nt(a,M);const S=g(M)||o,b=s.convert(a.format,a.colorSpace);let T,E=s.convert(a.type),w=x(a.internalFormat,b,E,a.colorSpace,a.isVideoTexture);W(c,a,S);const A=a.mipmaps,R=o&&!0!==a.isVideoTexture&&w!==at,L=void 0===d.__version||!0===h,I=y(a,M,S);if(a.isDepthTexture)w=t.DEPTH_COMPONENT,o?w=a.type===H?t.DEPTH_COMPONENT32F:a.type===G?t.DEPTH_COMPONENT24:a.type===X?t.DEPTH24_STENCIL8:t.DEPTH_COMPONENT16:a.type===H&&console.error("WebGLRenderer: Floating point depth texture requires WebGL2."),a.format===q&&w===t.DEPTH_COMPONENT&&a.type!==B&&a.type!==G&&(console.warn("THREE.WebGLRenderer: Use UnsignedShortType or UnsignedIntType for DepthFormat DepthTexture."),a.type=G,E=s.convert(a.type)),a.format===Y&&w===t.DEPTH_COMPONENT&&(w=t.DEPTH_STENCIL,a.type!==X&&(console.warn("THREE.WebGLRenderer: Use UnsignedInt248Type for DepthStencilFormat DepthTexture."),a.type=X,E=s.convert(a.type))),L&&(R?n.texStorage2D(t.TEXTURE_2D,1,w,M.width,M.height):n.texImage2D(t.TEXTURE_2D,0,w,M.width,M.height,0,b,E,null));else if(a.isDataTexture)if(A.length>0&&S){R&&L&&n.texStorage2D(t.TEXTURE_2D,I,w,A[0].width,A[0].height);for(let e=0,i=A.length;e>=1,i>>=1}}else if(A.length>0&&S){R&&L&&n.texStorage2D(t.TEXTURE_2D,I,w,A[0].width,A[0].height);for(let e=0,i=A.length;e>h),i=Math.max(1,r.height>>h);c===t.TEXTURE_3D||c===t.TEXTURE_2D_ARRAY?n.texImage3D(c,h,p,e,i,r.depth,0,u,d,null):n.texImage2D(c,h,p,e,i,0,u,d,null)}n.bindFramebuffer(t.FRAMEBUFFER,e),et(r)?l.framebufferTexture2DMultisampleEXT(t.FRAMEBUFFER,o,c,i.get(a).__webglTexture,0,tt(r)):(c===t.TEXTURE_2D||c>=t.TEXTURE_CUBE_MAP_POSITIVE_X&&c<=t.TEXTURE_CUBE_MAP_NEGATIVE_Z)&&t.framebufferTexture2D(t.FRAMEBUFFER,o,c,i.get(a).__webglTexture,h),n.bindFramebuffer(t.FRAMEBUFFER,null)}function $(e,n,i){if(t.bindRenderbuffer(t.RENDERBUFFER,e),n.depthBuffer&&!n.stencilBuffer){let r=!0===o?t.DEPTH_COMPONENT24:t.DEPTH_COMPONENT16;if(i||et(n)){const e=n.depthTexture;e&&e.isDepthTexture&&(e.type===H?r=t.DEPTH_COMPONENT32F:e.type===G&&(r=t.DEPTH_COMPONENT24));const i=tt(n);et(n)?l.renderbufferStorageMultisampleEXT(t.RENDERBUFFER,i,r,n.width,n.height):t.renderbufferStorageMultisample(t.RENDERBUFFER,i,r,n.width,n.height)}else t.renderbufferStorage(t.RENDERBUFFER,r,n.width,n.height);t.framebufferRenderbuffer(t.FRAMEBUFFER,t.DEPTH_ATTACHMENT,t.RENDERBUFFER,e)}else if(n.depthBuffer&&n.stencilBuffer){const r=tt(n);i&&!1===et(n)?t.renderbufferStorageMultisample(t.RENDERBUFFER,r,t.DEPTH24_STENCIL8,n.width,n.height):et(n)?l.renderbufferStorageMultisampleEXT(t.RENDERBUFFER,r,t.DEPTH24_STENCIL8,n.width,n.height):t.renderbufferStorage(t.RENDERBUFFER,t.DEPTH_STENCIL,n.width,n.height),t.framebufferRenderbuffer(t.FRAMEBUFFER,t.DEPTH_STENCIL_ATTACHMENT,t.RENDERBUFFER,e)}else{const e=!0===n.isWebGLMultipleRenderTargets?n.texture:[n.texture];for(let r=0;r0&&!0===e.has("WEBGL_multisampled_render_to_texture")&&!1!==n.__useRenderToTexture}function nt(t,n){const i=t.colorSpace,r=t.format,s=t.type;return!0===t.isCompressedTexture||!0===t.isVideoTexture||t.format===Kt||i!==Ht&&i!==zt&&(Re.getTransfer(i)===Xt?!1===o?!0===e.has("EXT_sRGB")&&r===j?(t.format=Kt,t.minFilter=D,t.generateMipmaps=!1):n=Ie.sRGBToLinear(n):r===j&&s===F||console.warn("THREE.WebGLTextures: sRGB encoded textures have to use RGBAFormat and UnsignedByteType."):console.error("THREE.WebGLTextures: Unsupported texture color space:",i)),n}this.allocateTextureUnit=function(){const t=E;return t>=r.maxTextures&&console.warn("THREE.WebGLTextures: Trying to use "+t+" texture units while this GPU supports only "+r.maxTextures),E+=1,t},this.resetTextureUnits=function(){E=0},this.setTexture2D=w,this.setTexture2DArray=function(e,r){const s=i.get(e);e.version>0&&s.__version!==e.version?J(s,e,r):n.bindTexture(t.TEXTURE_2D_ARRAY,s.__webglTexture,t.TEXTURE0+r)},this.setTexture3D=function(e,r){const s=i.get(e);e.version>0&&s.__version!==e.version?J(s,e,r):n.bindTexture(t.TEXTURE_3D,s.__webglTexture,t.TEXTURE0+r)},this.setTextureCube=function(e,a){const l=i.get(e);e.version>0&&l.__version!==e.version?function(e,a,l){if(6!==a.image.length)return;const c=Z(e,a),h=a.source;n.bindTexture(t.TEXTURE_CUBE_MAP,e.__webglTexture,t.TEXTURE0+l);const u=i.get(h);if(h.version!==u.__version||!0===c){n.activeTexture(t.TEXTURE0+l);const e=Re.getPrimaries(Re.workingColorSpace),i=a.colorSpace===zt?null:Re.getPrimaries(a.colorSpace),d=a.colorSpace===zt||e===i?t.NONE:t.BROWSER_DEFAULT_WEBGL;t.pixelStorei(t.UNPACK_FLIP_Y_WEBGL,a.flipY),t.pixelStorei(t.UNPACK_PREMULTIPLY_ALPHA_WEBGL,a.premultiplyAlpha),t.pixelStorei(t.UNPACK_ALIGNMENT,a.unpackAlignment),t.pixelStorei(t.UNPACK_COLORSPACE_CONVERSION_WEBGL,d);const p=a.isCompressedTexture||a.image[0].isCompressedTexture,m=a.image[0]&&a.image[0].isDataTexture,M=[];for(let t=0;t<6;t++)M[t]=p||m?m?a.image[t].image:a.image[t]:f(a.image[t],!1,!0,r.maxCubemapSize),M[t]=nt(a,M[t]);const S=M[0],b=g(S)||o,T=s.convert(a.format,a.colorSpace),E=s.convert(a.type),w=x(a.internalFormat,T,E,a.colorSpace),A=o&&!0!==a.isVideoTexture,R=void 0===u.__version||!0===c;let C,L=y(a,S,b);if(W(t.TEXTURE_CUBE_MAP,a,b),p){A&&R&&n.texStorage2D(t.TEXTURE_CUBE_MAP,L,w,S.width,S.height);for(let e=0;e<6;e++){C=M[e].mipmaps;for(let i=0;i0&&L++,n.texStorage2D(t.TEXTURE_CUBE_MAP,L,w,M[0].width,M[0].height));for(let e=0;e<6;e++)if(m){A?n.texSubImage2D(t.TEXTURE_CUBE_MAP_POSITIVE_X+e,0,0,0,M[e].width,M[e].height,T,E,M[e].data):n.texImage2D(t.TEXTURE_CUBE_MAP_POSITIVE_X+e,0,w,M[e].width,M[e].height,0,T,E,M[e].data);for(let i=0;i0){c.__webglFramebuffer[e]=[];for(let n=0;n0){c.__webglFramebuffer=[];for(let e=0;e0&&!1===et(e)){const i=d?l:[l];c.__webglMultisampledFramebuffer=t.createFramebuffer(),c.__webglColorRenderbuffer=[],n.bindFramebuffer(t.FRAMEBUFFER,c.__webglMultisampledFramebuffer);for(let n=0;n0)for(let i=0;i0)for(let n=0;n0&&!1===et(e)){const r=e.isWebGLMultipleRenderTargets?e.texture:[e.texture],s=e.width,a=e.height;let o=t.COLOR_BUFFER_BIT;const l=[],h=e.stencilBuffer?t.DEPTH_STENCIL_ATTACHMENT:t.DEPTH_ATTACHMENT,u=i.get(e),d=!0===e.isWebGLMultipleRenderTargets;if(d)for(let e=0;eo+c?(l.inputState.pinching=!1,this.dispatchEvent({type:"pinchend",handedness:t.handedness,target:this})):!l.inputState.pinching&&a<=o-c&&(l.inputState.pinching=!0,this.dispatchEvent({type:"pinchstart",handedness:t.handedness,target:this}))}else null!==o&&t.gripSpace&&(r=e.getPose(t.gripSpace,n),null!==r&&(o.matrix.fromArray(r.transform.matrix),o.matrix.decompose(o.position,o.rotation,o.scale),o.matrixWorldNeedsUpdate=!0,r.linearVelocity?(o.hasLinearVelocity=!0,o.linearVelocity.copy(r.linearVelocity)):o.hasLinearVelocity=!1,r.angularVelocity?(o.hasAngularVelocity=!0,o.angularVelocity.copy(r.angularVelocity)):o.hasAngularVelocity=!1));null!==a&&(i=e.getPose(t.targetRaySpace,n),null===i&&null!==r&&(i=r),null!==i&&(a.matrix.fromArray(i.transform.matrix),a.matrix.decompose(a.position,a.rotation,a.scale),a.matrixWorldNeedsUpdate=!0,i.linearVelocity?(a.hasLinearVelocity=!0,a.linearVelocity.copy(i.linearVelocity)):a.hasLinearVelocity=!1,i.angularVelocity?(a.hasAngularVelocity=!0,a.angularVelocity.copy(i.angularVelocity)):a.hasAngularVelocity=!1,this.dispatchEvent(Za)))}return null!==a&&(a.visible=null!==i),null!==o&&(o.visible=null!==r),null!==l&&(l.visible=null!==s),this}_getHandJoint(t,e){if(void 0===t.joints[e.jointName]){const n=new Ya;n.matrixAutoUpdate=!1,n.visible=!1,t.joints[e.jointName]=n,t.add(n)}return t.joints[e.jointName]}}class Ka extends te{constructor(t,e){super();const n=this;let i=null,r=1,s=null,a="local-floor",o=1,l=null,c=null,h=null,u=null,d=null,p=null;const m=e.getContextAttributes();let f=null,g=null;const _=[],v=[],x=new me;let y=null;const M=new sr;M.layers.enable(1),M.viewport=new Be;const S=new sr;S.layers.enable(2),S.viewport=new Be;const b=[M,S],T=new qa;T.layers.enable(1),T.layers.enable(2);let E=null,w=null;function A(t){const e=v.indexOf(t.inputSource);if(-1===e)return;const n=_[e];void 0!==n&&(n.update(t.inputSource,t.frame,l||s),n.dispatchEvent({type:t.type,data:t.inputSource}))}function R(){i.removeEventListener("select",A),i.removeEventListener("selectstart",A),i.removeEventListener("selectend",A),i.removeEventListener("squeeze",A),i.removeEventListener("squeezestart",A),i.removeEventListener("squeezeend",A),i.removeEventListener("end",R),i.removeEventListener("inputsourceschange",C);for(let t=0;t<_.length;t++){const e=v[t];null!==e&&(v[t]=null,_[t].disconnect(e))}E=null,w=null,t.setRenderTarget(f),d=null,u=null,h=null,i=null,g=null,D.stop(),n.isPresenting=!1,t.setPixelRatio(y),t.setSize(x.width,x.height,!1),n.dispatchEvent({type:"sessionend"})}function C(t){for(let e=0;e=0&&(v[i]=null,_[i].disconnect(n))}for(let e=0;e=v.length){v.push(n),i=t;break}if(null===v[t]){v[t]=n,i=t;break}}if(-1===i)break}const r=_[i];r&&r.connect(n)}}this.cameraAutoUpdate=!0,this.enabled=!1,this.isPresenting=!1,this.getController=function(t){let e=_[t];return void 0===e&&(e=new Ja,_[t]=e),e.getTargetRaySpace()},this.getControllerGrip=function(t){let e=_[t];return void 0===e&&(e=new Ja,_[t]=e),e.getGripSpace()},this.getHand=function(t){let e=_[t];return void 0===e&&(e=new Ja,_[t]=e),e.getHandSpace()},this.setFramebufferScaleFactor=function(t){r=t,!0===n.isPresenting&&console.warn("THREE.WebXRManager: Cannot change framebuffer scale while presenting.")},this.setReferenceSpaceType=function(t){a=t,!0===n.isPresenting&&console.warn("THREE.WebXRManager: Cannot change reference space type while presenting.")},this.getReferenceSpace=function(){return l||s},this.setReferenceSpace=function(t){l=t},this.getBaseLayer=function(){return null!==u?u:d},this.getBinding=function(){return h},this.getFrame=function(){return p},this.getSession=function(){return i},this.setSession=async function(c){if(i=c,null!==i){if(f=t.getRenderTarget(),i.addEventListener("select",A),i.addEventListener("selectstart",A),i.addEventListener("selectend",A),i.addEventListener("squeeze",A),i.addEventListener("squeezestart",A),i.addEventListener("squeezeend",A),i.addEventListener("end",R),i.addEventListener("inputsourceschange",C),!0!==m.xrCompatible&&await e.makeXRCompatible(),y=t.getPixelRatio(),t.getSize(x),void 0===i.renderState.layers||!1===t.capabilities.isWebGL2){const n={antialias:void 0!==i.renderState.layers||m.antialias,alpha:!0,depth:m.depth,stencil:m.stencil,framebufferScaleFactor:r};d=new XRWebGLLayer(i,e,n),i.updateRenderState({baseLayer:d}),t.setPixelRatio(1),t.setSize(d.framebufferWidth,d.framebufferHeight,!1),g=new Ge(d.framebufferWidth,d.framebufferHeight,{format:j,type:F,colorSpace:t.outputColorSpace,stencilBuffer:m.stencil})}else{let n=null,s=null,a=null;m.depth&&(a=m.stencil?e.DEPTH24_STENCIL8:e.DEPTH_COMPONENT24,n=m.stencil?Y:q,s=m.stencil?X:G);const o={colorFormat:e.RGBA8,depthFormat:a,scaleFactor:r};h=new XRWebGLBinding(i,e),u=h.createProjectionLayer(o),i.updateRenderState({layers:[u]}),t.setPixelRatio(1),t.setSize(u.textureWidth,u.textureHeight,!1),g=new Ge(u.textureWidth,u.textureHeight,{format:j,type:F,depthTexture:new ns(u.textureWidth,u.textureHeight,s,void 0,void 0,void 0,void 0,void 0,void 0,n),stencilBuffer:m.stencil,colorSpace:t.outputColorSpace,samples:m.antialias?4:0});t.properties.get(g).__ignoreDepthValues=u.ignoreDepthValues}g.isXRRenderTarget=!0,this.setFoveation(o),l=null,s=await i.requestReferenceSpace(a),D.setContext(i),D.start(),n.isPresenting=!0,n.dispatchEvent({type:"sessionstart"})}},this.getEnvironmentBlendMode=function(){if(null!==i)return i.environmentBlendMode};const L=new We,P=new We;function I(t,e){null===e?t.matrixWorld.copy(t.matrix):t.matrixWorld.multiplyMatrices(e.matrixWorld,t.matrix),t.matrixWorldInverse.copy(t.matrixWorld).invert()}this.updateCamera=function(t){if(null===i)return;T.near=S.near=M.near=t.near,T.far=S.far=M.far=t.far,E===T.near&&w===T.far||(i.updateRenderState({depthNear:T.near,depthFar:T.far}),E=T.near,w=T.far);const e=t.parent,n=T.cameras;I(T,e);for(let t=0;t0&&(i.alphaTest.value=r.alphaTest);const s=e.get(r).envMap;if(s&&(i.envMap.value=s,i.flipEnvMap.value=s.isCubeTexture&&!1===s.isRenderTargetTexture?-1:1,i.reflectivity.value=r.reflectivity,i.ior.value=r.ior,i.refractionRatio.value=r.refractionRatio),r.lightMap){i.lightMap.value=r.lightMap;const e=!0===t._useLegacyLights?Math.PI:1;i.lightMapIntensity.value=r.lightMapIntensity*e,n(r.lightMap,i.lightMapTransform)}r.aoMap&&(i.aoMap.value=r.aoMap,i.aoMapIntensity.value=r.aoMapIntensity,n(r.aoMap,i.aoMapTransform))}return{refreshFogUniforms:function(e,n){n.color.getRGB(e.fogColor.value,er(t)),n.isFog?(e.fogNear.value=n.near,e.fogFar.value=n.far):n.isFogExp2&&(e.fogDensity.value=n.density)},refreshMaterialUniforms:function(t,r,s,o,l){r.isMeshBasicMaterial||r.isMeshLambertMaterial?i(t,r):r.isMeshToonMaterial?(i(t,r),function(t,e){e.gradientMap&&(t.gradientMap.value=e.gradientMap)}(t,r)):r.isMeshPhongMaterial?(i(t,r),function(t,e){t.specular.value.copy(e.specular),t.shininess.value=Math.max(e.shininess,1e-4)}(t,r)):r.isMeshStandardMaterial?(i(t,r),function(t,i){t.metalness.value=i.metalness,i.metalnessMap&&(t.metalnessMap.value=i.metalnessMap,n(i.metalnessMap,t.metalnessMapTransform));t.roughness.value=i.roughness,i.roughnessMap&&(t.roughnessMap.value=i.roughnessMap,n(i.roughnessMap,t.roughnessMapTransform));const r=e.get(i).envMap;r&&(t.envMapIntensity.value=i.envMapIntensity)}(t,r),r.isMeshPhysicalMaterial&&function(t,e,i){t.ior.value=e.ior,e.sheen>0&&(t.sheenColor.value.copy(e.sheenColor).multiplyScalar(e.sheen),t.sheenRoughness.value=e.sheenRoughness,e.sheenColorMap&&(t.sheenColorMap.value=e.sheenColorMap,n(e.sheenColorMap,t.sheenColorMapTransform)),e.sheenRoughnessMap&&(t.sheenRoughnessMap.value=e.sheenRoughnessMap,n(e.sheenRoughnessMap,t.sheenRoughnessMapTransform)));e.clearcoat>0&&(t.clearcoat.value=e.clearcoat,t.clearcoatRoughness.value=e.clearcoatRoughness,e.clearcoatMap&&(t.clearcoatMap.value=e.clearcoatMap,n(e.clearcoatMap,t.clearcoatMapTransform)),e.clearcoatRoughnessMap&&(t.clearcoatRoughnessMap.value=e.clearcoatRoughnessMap,n(e.clearcoatRoughnessMap,t.clearcoatRoughnessMapTransform)),e.clearcoatNormalMap&&(t.clearcoatNormalMap.value=e.clearcoatNormalMap,n(e.clearcoatNormalMap,t.clearcoatNormalMapTransform),t.clearcoatNormalScale.value.copy(e.clearcoatNormalScale),e.side===a&&t.clearcoatNormalScale.value.negate()));e.iridescence>0&&(t.iridescence.value=e.iridescence,t.iridescenceIOR.value=e.iridescenceIOR,t.iridescenceThicknessMinimum.value=e.iridescenceThicknessRange[0],t.iridescenceThicknessMaximum.value=e.iridescenceThicknessRange[1],e.iridescenceMap&&(t.iridescenceMap.value=e.iridescenceMap,n(e.iridescenceMap,t.iridescenceMapTransform)),e.iridescenceThicknessMap&&(t.iridescenceThicknessMap.value=e.iridescenceThicknessMap,n(e.iridescenceThicknessMap,t.iridescenceThicknessMapTransform)));e.transmission>0&&(t.transmission.value=e.transmission,t.transmissionSamplerMap.value=i.texture,t.transmissionSamplerSize.value.set(i.width,i.height),e.transmissionMap&&(t.transmissionMap.value=e.transmissionMap,n(e.transmissionMap,t.transmissionMapTransform)),t.thickness.value=e.thickness,e.thicknessMap&&(t.thicknessMap.value=e.thicknessMap,n(e.thicknessMap,t.thicknessMapTransform)),t.attenuationDistance.value=e.attenuationDistance,t.attenuationColor.value.copy(e.attenuationColor));e.anisotropy>0&&(t.anisotropyVector.value.set(e.anisotropy*Math.cos(e.anisotropyRotation),e.anisotropy*Math.sin(e.anisotropyRotation)),e.anisotropyMap&&(t.anisotropyMap.value=e.anisotropyMap,n(e.anisotropyMap,t.anisotropyMapTransform)));t.specularIntensity.value=e.specularIntensity,t.specularColor.value.copy(e.specularColor),e.specularColorMap&&(t.specularColorMap.value=e.specularColorMap,n(e.specularColorMap,t.specularColorMapTransform));e.specularIntensityMap&&(t.specularIntensityMap.value=e.specularIntensityMap,n(e.specularIntensityMap,t.specularIntensityMapTransform))}(t,r,l)):r.isMeshMatcapMaterial?(i(t,r),function(t,e){e.matcap&&(t.matcap.value=e.matcap)}(t,r)):r.isMeshDepthMaterial?i(t,r):r.isMeshDistanceMaterial?(i(t,r),function(t,n){const i=e.get(n).light;t.referencePosition.value.setFromMatrixPosition(i.matrixWorld),t.nearDistance.value=i.shadow.camera.near,t.farDistance.value=i.shadow.camera.far}(t,r)):r.isMeshNormalMaterial?i(t,r):r.isLineBasicMaterial?(function(t,e){t.diffuse.value.copy(e.color),t.opacity.value=e.opacity,e.map&&(t.map.value=e.map,n(e.map,t.mapTransform))}(t,r),r.isLineDashedMaterial&&function(t,e){t.dashSize.value=e.dashSize,t.totalSize.value=e.dashSize+e.gapSize,t.scale.value=e.scale}(t,r)):r.isPointsMaterial?function(t,e,i,r){t.diffuse.value.copy(e.color),t.opacity.value=e.opacity,t.size.value=e.size*i,t.scale.value=.5*r,e.map&&(t.map.value=e.map,n(e.map,t.uvTransform));e.alphaMap&&(t.alphaMap.value=e.alphaMap,n(e.alphaMap,t.alphaMapTransform));e.alphaTest>0&&(t.alphaTest.value=e.alphaTest)}(t,r,s,o):r.isSpriteMaterial?function(t,e){t.diffuse.value.copy(e.color),t.opacity.value=e.opacity,t.rotation.value=e.rotation,e.map&&(t.map.value=e.map,n(e.map,t.mapTransform));e.alphaMap&&(t.alphaMap.value=e.alphaMap,n(e.alphaMap,t.alphaMapTransform));e.alphaTest>0&&(t.alphaTest.value=e.alphaTest)}(t,r):r.isShadowMaterial?(t.color.value.copy(r.color),t.opacity.value=r.opacity):r.isShaderMaterial&&(r.uniformsNeedUpdate=!1)}}}function Qa(t,e,n,i){let r={},s={},a=[];const o=n.isWebGL2?t.getParameter(t.MAX_UNIFORM_BUFFER_BINDINGS):0;function l(t,e,n,i){const r=t.value,s=e+"_"+n;if(void 0===i[s])return i[s]="number"==typeof r||"boolean"==typeof r?r:r.clone(),!0;{const t=i[s];if("number"==typeof r||"boolean"==typeof r){if(t!==r)return i[s]=r,!0}else if(!1===t.equals(r))return t.copy(r),!0}return!1}function c(t){const e={boundary:0,storage:0};return"number"==typeof t||"boolean"==typeof t?(e.boundary=4,e.storage=4):t.isVector2?(e.boundary=8,e.storage=8):t.isVector3||t.isColor?(e.boundary=16,e.storage=12):t.isVector4?(e.boundary=16,e.storage=16):t.isMatrix3?(e.boundary=48,e.storage=48):t.isMatrix4?(e.boundary=64,e.storage=64):t.isTexture?console.warn("THREE.WebGLRenderer: Texture samplers can not be part of an uniforms group."):console.warn("THREE.WebGLRenderer: Unsupported uniform value type.",t),e}function h(e){const n=e.target;n.removeEventListener("dispose",h);const i=a.indexOf(n.__bindingPointIndex);a.splice(i,1),t.deleteBuffer(r[n.id]),delete r[n.id],delete s[n.id]}return{bind:function(t,e){const n=e.program;i.uniformBlockBinding(t,n)},update:function(n,u){let d=r[n.id];void 0===d&&(!function(t){const e=t.uniforms;let n=0;const i=16;for(let t=0,r=e.length;t0&&(n+=i-r);t.__size=n,t.__cache={}}(n),d=function(e){const n=function(){for(let t=0;t0),u=!!n.morphAttributes.position,d=!!n.morphAttributes.normal,m=!!n.morphAttributes.color;let f=p;i.toneMapped&&(null!==w&&!0!==w.isXRRenderTarget||(f=S.toneMapping));const g=n.morphAttributes.position||n.morphAttributes.normal||n.morphAttributes.color,_=void 0!==g?g.length:0,v=mt.get(i),y=x.state.lights;if(!0===nt&&(!0===it||t!==R)){const e=t===R&&i.id===A;Et.setState(i,t,e)}let M=!1;i.version===v.__version?v.needsLights&&v.lightsStateVersion!==y.state.version||v.outputColorSpace!==o||r.isBatchedMesh&&!1===v.batching?M=!0:r.isBatchedMesh||!0!==v.batching?r.isInstancedMesh&&!1===v.instancing?M=!0:r.isInstancedMesh||!0!==v.instancing?r.isSkinnedMesh&&!1===v.skinning?M=!0:r.isSkinnedMesh||!0!==v.skinning?r.isInstancedMesh&&!0===v.instancingColor&&null===r.instanceColor||r.isInstancedMesh&&!1===v.instancingColor&&null!==r.instanceColor||v.envMap!==l||!0===i.fog&&v.fog!==s?M=!0:void 0===v.numClippingPlanes||v.numClippingPlanes===Et.numPlanes&&v.numIntersection===Et.numIntersection?(v.vertexAlphas!==c||v.vertexTangents!==h||v.morphTargets!==u||v.morphNormals!==d||v.morphColors!==m||v.toneMapping!==f||!0===ut.isWebGL2&&v.morphTargetsCount!==_)&&(M=!0):M=!0:M=!0:M=!0:M=!0:(M=!0,v.__version=i.version);let b=v.currentProgram;!0===M&&(b=Qt(i,e,r));let T=!1,E=!1,C=!1;const L=b.getUniforms(),P=v.uniforms;dt.useProgram(b.program)&&(T=!0,E=!0,C=!0);i.id!==A&&(A=i.id,E=!0);if(T||R!==t){L.setValue(Dt,"projectionMatrix",t.projectionMatrix),L.setValue(Dt,"viewMatrix",t.matrixWorldInverse);const e=L.map.cameraPosition;void 0!==e&&e.setValue(Dt,ot.setFromMatrixPosition(t.matrixWorld)),ut.logarithmicDepthBuffer&&L.setValue(Dt,"logDepthBufFC",2/(Math.log(t.far+1)/Math.LN2)),(i.isMeshPhongMaterial||i.isMeshToonMaterial||i.isMeshLambertMaterial||i.isMeshBasicMaterial||i.isMeshStandardMaterial||i.isShaderMaterial)&&L.setValue(Dt,"isOrthographic",!0===t.isOrthographicCamera),R!==t&&(R=t,E=!0,C=!0)}if(r.isSkinnedMesh){L.setOptional(Dt,r,"bindMatrix"),L.setOptional(Dt,r,"bindMatrixInverse");const t=r.skeleton;t&&(ut.floatVertexTextures?(null===t.boneTexture&&t.computeBoneTexture(),L.setValue(Dt,"boneTexture",t.boneTexture,ft)):console.warn("THREE.WebGLRenderer: SkinnedMesh can only be used with WebGL 2. With WebGL 1 OES_texture_float and vertex textures support is required."))}r.isBatchedMesh&&(L.setOptional(Dt,r,"batchingTexture"),L.setValue(Dt,"batchingTexture",r._matricesTexture,ft));const I=n.morphAttributes;(void 0!==I.position||void 0!==I.normal||void 0!==I.color&&!0===ut.isWebGL2)&&Rt.update(r,n,b);(E||v.receiveShadow!==r.receiveShadow)&&(v.receiveShadow=r.receiveShadow,L.setValue(Dt,"receiveShadow",r.receiveShadow));i.isMeshGouraudMaterial&&null!==i.envMap&&(P.envMap.value=l,P.flipEnvMap.value=l.isCubeTexture&&!1===l.isRenderTargetTexture?-1:1);E&&(L.setValue(Dt,"toneMappingExposure",S.toneMappingExposure),v.needsLights&&(D=C,(U=P).ambientLightColor.needsUpdate=D,U.lightProbe.needsUpdate=D,U.directionalLights.needsUpdate=D,U.directionalLightShadows.needsUpdate=D,U.pointLights.needsUpdate=D,U.pointLightShadows.needsUpdate=D,U.spotLights.needsUpdate=D,U.spotLightShadows.needsUpdate=D,U.rectAreaLights.needsUpdate=D,U.hemisphereLights.needsUpdate=D),s&&!0===i.fog&&St.refreshFogUniforms(P,s),St.refreshMaterialUniforms(P,i,z,N,rt),oa.upload(Dt,te(v),P,ft));var U,D;i.isShaderMaterial&&!0===i.uniformsNeedUpdate&&(oa.upload(Dt,te(v),P,ft),i.uniformsNeedUpdate=!1);i.isSpriteMaterial&&L.setValue(Dt,"center",r.center);if(L.setValue(Dt,"modelViewMatrix",r.modelViewMatrix),L.setValue(Dt,"normalMatrix",r.normalMatrix),L.setValue(Dt,"modelMatrix",r.matrixWorld),i.isShaderMaterial||i.isRawShaderMaterial){const t=i.uniformsGroups;for(let e=0,n=t.length;e{function n(){i.forEach((function(t){mt.get(t).currentProgram.isReady()&&i.delete(t)})),0!==i.size?setTimeout(n,10):e(t)}null!==ht.get("KHR_parallel_shader_compile")?n():setTimeout(n,10)}))};let Xt=null;function jt(){Yt.stop()}function qt(){Yt.start()}const Yt=new _r;function Zt(t,e,n,i){if(!1===t.visible)return;if(t.layers.test(e.layers))if(t.isGroup)n=t.renderOrder;else if(t.isLOD)!0===t.autoUpdate&&t.update(e);else if(t.isLight)x.pushLight(t),t.castShadow&&x.pushShadow(t);else if(t.isSprite){if(!t.frustumCulled||et.intersectsSprite(t)){i&&ot.setFromMatrixPosition(t.matrixWorld).applyMatrix4(st);const e=yt.update(t),r=t.material;r.visible&&v.push(t,e,r,n,ot.z,null)}}else if((t.isMesh||t.isLine||t.isPoints)&&(!t.frustumCulled||et.intersectsObject(t))){const e=yt.update(t),r=t.material;if(i&&(void 0!==t.boundingSphere?(null===t.boundingSphere&&t.computeBoundingSphere(),ot.copy(t.boundingSphere.center)):(null===e.boundingSphere&&e.computeBoundingSphere(),ot.copy(e.boundingSphere.center)),ot.applyMatrix4(t.matrixWorld).applyMatrix4(st)),Array.isArray(r)){const i=e.groups;for(let s=0,a=i.length;s0&&function(t,e,n,i){const r=!0===n.isScene?n.overrideMaterial:null;if(null!==r)return;const s=ut.isWebGL2;null===rt&&(rt=new Ge(1,1,{generateMipmaps:!0,type:ht.has("EXT_color_buffer_half_float")?V:F,minFilter:O,samples:s?4:0}));S.getDrawingBufferSize(at),s?rt.setSize(at.x,at.y):rt.setSize(he(at.x),he(at.y));const o=S.getRenderTarget();S.setRenderTarget(rt),S.getClearColor(I),U=S.getClearAlpha(),U<1&&S.setClearColor(16777215,.5);S.clear();const l=S.toneMapping;S.toneMapping=p,Kt(t,n,i),ft.updateMultisampleRenderTarget(rt),ft.updateRenderTargetMipmap(rt);let c=!1;for(let t=0,r=e.length;t0&&Kt(r,e,n),s.length>0&&Kt(s,e,n),o.length>0&&Kt(o,e,n),dt.buffers.depth.setTest(!0),dt.buffers.depth.setMask(!0),dt.buffers.color.setMask(!0),dt.setPolygonOffset(!1)}function Kt(t,e,n){const i=!0===e.isScene?e.overrideMaterial:null;for(let r=0,s=t.length;r0?M[M.length-1]:null,y.pop(),v=y.length>0?y[y.length-1]:null},this.getActiveCubeFace=function(){return T},this.getActiveMipmapLevel=function(){return E},this.getRenderTarget=function(){return w},this.setRenderTargetTextures=function(t,e,n){mt.get(t.texture).__webglTexture=e,mt.get(t.depthTexture).__webglTexture=n;const i=mt.get(t);i.__hasExternalTextures=!0,i.__hasExternalTextures&&(i.__autoAllocateDepthBuffer=void 0===n,i.__autoAllocateDepthBuffer||!0===ht.has("WEBGL_multisampled_render_to_texture")&&(console.warn("THREE.WebGLRenderer: Render-to-texture extension was disabled because an external texture was provided"),i.__useRenderToTexture=!1))},this.setRenderTargetFramebuffer=function(t,e){const n=mt.get(t);n.__webglFramebuffer=e,n.__useDefaultFramebuffer=void 0===e},this.setRenderTarget=function(t,e=0,n=0){w=t,T=e,E=n;let i=!0,r=null,s=!1,a=!1;if(t){const o=mt.get(t);void 0!==o.__useDefaultFramebuffer?(dt.bindFramebuffer(Dt.FRAMEBUFFER,null),i=!1):void 0===o.__webglFramebuffer?ft.setupRenderTarget(t):o.__hasExternalTextures&&ft.rebindTextures(t,mt.get(t.texture).__webglTexture,mt.get(t.depthTexture).__webglTexture);const l=t.texture;(l.isData3DTexture||l.isDataArrayTexture||l.isCompressedArrayTexture)&&(a=!0);const c=mt.get(t).__webglFramebuffer;t.isWebGLCubeRenderTarget?(r=Array.isArray(c[e])?c[e][n]:c[e],s=!0):r=ut.isWebGL2&&t.samples>0&&!1===ft.useMultisampledRTT(t)?mt.get(t).__webglMultisampledFramebuffer:Array.isArray(c)?c[n]:c,C.copy(t.viewport),L.copy(t.scissor),P=t.scissorTest}else C.copy($).multiplyScalar(z).floor(),L.copy(Q).multiplyScalar(z).floor(),P=tt;if(dt.bindFramebuffer(Dt.FRAMEBUFFER,r)&&ut.drawBuffers&&i&&dt.drawBuffers(t,r),dt.viewport(C),dt.scissor(L),dt.setScissorTest(P),s){const i=mt.get(t.texture);Dt.framebufferTexture2D(Dt.FRAMEBUFFER,Dt.COLOR_ATTACHMENT0,Dt.TEXTURE_CUBE_MAP_POSITIVE_X+e,i.__webglTexture,n)}else if(a){const i=mt.get(t.texture),r=e||0;Dt.framebufferTextureLayer(Dt.FRAMEBUFFER,Dt.COLOR_ATTACHMENT0,i.__webglTexture,n||0,r)}A=-1},this.readRenderTargetPixels=function(t,e,n,i,r,s,a){if(!t||!t.isWebGLRenderTarget)return void console.error("THREE.WebGLRenderer.readRenderTargetPixels: renderTarget is not THREE.WebGLRenderTarget.");let o=mt.get(t).__webglFramebuffer;if(t.isWebGLCubeRenderTarget&&void 0!==a&&(o=o[a]),o){dt.bindFramebuffer(Dt.FRAMEBUFFER,o);try{const a=t.texture,o=a.format,l=a.type;if(o!==j&&Pt.convert(o)!==Dt.getParameter(Dt.IMPLEMENTATION_COLOR_READ_FORMAT))return void console.error("THREE.WebGLRenderer.readRenderTargetPixels: renderTarget is not in RGBA or implementation defined format.");const c=l===V&&(ht.has("EXT_color_buffer_half_float")||ut.isWebGL2&&ht.has("EXT_color_buffer_float"));if(!(l===F||Pt.convert(l)===Dt.getParameter(Dt.IMPLEMENTATION_COLOR_READ_TYPE)||l===H&&(ut.isWebGL2||ht.has("OES_texture_float")||ht.has("WEBGL_color_buffer_float"))||c))return void console.error("THREE.WebGLRenderer.readRenderTargetPixels: renderTarget is not in UnsignedByteType or implementation defined type.");e>=0&&e<=t.width-i&&n>=0&&n<=t.height-r&&Dt.readPixels(e,n,i,r,Pt.convert(o),Pt.convert(l),s)}finally{const t=null!==w?mt.get(w).__webglFramebuffer:null;dt.bindFramebuffer(Dt.FRAMEBUFFER,t)}}},this.copyFramebufferToTexture=function(t,e,n=0){const i=Math.pow(2,-n),r=Math.floor(e.image.width*i),s=Math.floor(e.image.height*i);ft.setTexture2D(e,0),Dt.copyTexSubImage2D(Dt.TEXTURE_2D,n,0,0,t.x,t.y,r,s),dt.unbindTexture()},this.copyTextureToTexture=function(t,e,n,i=0){const r=e.image.width,s=e.image.height,a=Pt.convert(n.format),o=Pt.convert(n.type);ft.setTexture2D(n,0),Dt.pixelStorei(Dt.UNPACK_FLIP_Y_WEBGL,n.flipY),Dt.pixelStorei(Dt.UNPACK_PREMULTIPLY_ALPHA_WEBGL,n.premultiplyAlpha),Dt.pixelStorei(Dt.UNPACK_ALIGNMENT,n.unpackAlignment),e.isDataTexture?Dt.texSubImage2D(Dt.TEXTURE_2D,i,t.x,t.y,r,s,a,o,e.image.data):e.isCompressedTexture?Dt.compressedTexSubImage2D(Dt.TEXTURE_2D,i,t.x,t.y,e.mipmaps[0].width,e.mipmaps[0].height,a,e.mipmaps[0].data):Dt.texSubImage2D(Dt.TEXTURE_2D,i,t.x,t.y,a,o,e.image),0===i&&n.generateMipmaps&&Dt.generateMipmap(Dt.TEXTURE_2D),dt.unbindTexture()},this.copyTextureToTexture3D=function(t,e,n,i,r=0){if(S.isWebGL1Renderer)return void console.warn("THREE.WebGLRenderer.copyTextureToTexture3D: can only be used with WebGL2.");const s=t.max.x-t.min.x+1,a=t.max.y-t.min.y+1,o=t.max.z-t.min.z+1,l=Pt.convert(i.format),c=Pt.convert(i.type);let h;if(i.isData3DTexture)ft.setTexture3D(i,0),h=Dt.TEXTURE_3D;else{if(!i.isDataArrayTexture&&!i.isCompressedArrayTexture)return void console.warn("THREE.WebGLRenderer.copyTextureToTexture3D: only supports THREE.DataTexture3D and THREE.DataTexture2DArray.");ft.setTexture2DArray(i,0),h=Dt.TEXTURE_2D_ARRAY}Dt.pixelStorei(Dt.UNPACK_FLIP_Y_WEBGL,i.flipY),Dt.pixelStorei(Dt.UNPACK_PREMULTIPLY_ALPHA_WEBGL,i.premultiplyAlpha),Dt.pixelStorei(Dt.UNPACK_ALIGNMENT,i.unpackAlignment);const u=Dt.getParameter(Dt.UNPACK_ROW_LENGTH),d=Dt.getParameter(Dt.UNPACK_IMAGE_HEIGHT),p=Dt.getParameter(Dt.UNPACK_SKIP_PIXELS),m=Dt.getParameter(Dt.UNPACK_SKIP_ROWS),f=Dt.getParameter(Dt.UNPACK_SKIP_IMAGES),g=n.isCompressedTexture?n.mipmaps[r]:n.image;Dt.pixelStorei(Dt.UNPACK_ROW_LENGTH,g.width),Dt.pixelStorei(Dt.UNPACK_IMAGE_HEIGHT,g.height),Dt.pixelStorei(Dt.UNPACK_SKIP_PIXELS,t.min.x),Dt.pixelStorei(Dt.UNPACK_SKIP_ROWS,t.min.y),Dt.pixelStorei(Dt.UNPACK_SKIP_IMAGES,t.min.z),n.isDataTexture||n.isData3DTexture?Dt.texSubImage3D(h,r,e.x,e.y,e.z,s,a,o,l,c,g.data):n.isCompressedArrayTexture?(console.warn("THREE.WebGLRenderer.copyTextureToTexture3D: untested support for compressed srcTexture."),Dt.compressedTexSubImage3D(h,r,e.x,e.y,e.z,s,a,o,l,g.data)):Dt.texSubImage3D(h,r,e.x,e.y,e.z,s,a,o,l,c,g),Dt.pixelStorei(Dt.UNPACK_ROW_LENGTH,u),Dt.pixelStorei(Dt.UNPACK_IMAGE_HEIGHT,d),Dt.pixelStorei(Dt.UNPACK_SKIP_PIXELS,p),Dt.pixelStorei(Dt.UNPACK_SKIP_ROWS,m),Dt.pixelStorei(Dt.UNPACK_SKIP_IMAGES,f),0===r&&i.generateMipmaps&&Dt.generateMipmap(h),dt.unbindTexture()},this.initTexture=function(t){t.isCubeTexture?ft.setTextureCube(t,0):t.isData3DTexture?ft.setTexture3D(t,0):t.isDataArrayTexture||t.isCompressedArrayTexture?ft.setTexture2DArray(t,0):ft.setTexture2D(t,0),dt.unbindTexture()},this.resetState=function(){T=0,E=0,w=null,dt.reset(),It.reset()},"undefined"!=typeof __THREE_DEVTOOLS__&&__THREE_DEVTOOLS__.dispatchEvent(new CustomEvent("observe",{detail:this}))}get coordinateSystem(){return $t}get outputColorSpace(){return this._outputColorSpace}set outputColorSpace(t){this._outputColorSpace=t;const e=this.getContext();e.drawingBufferColorSpace=t===Vt?"display-p3":"srgb",e.unpackColorSpace=Re.workingColorSpace===kt?"display-p3":"srgb"}get outputEncoding(){return console.warn("THREE.WebGLRenderer: Property .outputEncoding has been removed. Use .outputColorSpace instead."),this.outputColorSpace===Gt?Bt:Ft}set outputEncoding(t){console.warn("THREE.WebGLRenderer: Property .outputEncoding has been removed. Use .outputColorSpace instead."),this.outputColorSpace=t===Bt?Gt:Ht}get useLegacyLights(){return console.warn("THREE.WebGLRenderer: The property .useLegacyLights has been deprecated. Migrate your lighting according to the following guide: https://discourse.threejs.org/t/updates-to-lighting-in-three-js-r155/53733."),this._useLegacyLights}set useLegacyLights(t){console.warn("THREE.WebGLRenderer: The property .useLegacyLights has been deprecated. Migrate your lighting according to the following guide: https://discourse.threejs.org/t/updates-to-lighting-in-three-js-r155/53733."),this._useLegacyLights=t}}class eo extends to{}eo.prototype.isWebGL1Renderer=!0;class no{constructor(t,e=25e-5){this.isFogExp2=!0,this.name="",this.color=new ci(t),this.density=e}clone(){return new no(this.color,this.density)}toJSON(){return{type:"FogExp2",name:this.name,color:this.color.getHex(),density:this.density}}}class io{constructor(t,e=1,n=1e3){this.isFog=!0,this.name="",this.color=new ci(t),this.near=e,this.far=n}clone(){return new io(this.color,this.near,this.far)}toJSON(){return{type:"Fog",name:this.name,color:this.color.getHex(),near:this.near,far:this.far}}}class ro extends jn{constructor(){super(),this.isScene=!0,this.type="Scene",this.background=null,this.environment=null,this.fog=null,this.backgroundBlurriness=0,this.backgroundIntensity=1,this.overrideMaterial=null,"undefined"!=typeof __THREE_DEVTOOLS__&&__THREE_DEVTOOLS__.dispatchEvent(new CustomEvent("observe",{detail:this}))}copy(t,e){return super.copy(t,e),null!==t.background&&(this.background=t.background.clone()),null!==t.environment&&(this.environment=t.environment.clone()),null!==t.fog&&(this.fog=t.fog.clone()),this.backgroundBlurriness=t.backgroundBlurriness,this.backgroundIntensity=t.backgroundIntensity,null!==t.overrideMaterial&&(this.overrideMaterial=t.overrideMaterial.clone()),this.matrixAutoUpdate=t.matrixAutoUpdate,this}toJSON(t){const e=super.toJSON(t);return null!==this.fog&&(e.object.fog=this.fog.toJSON()),this.backgroundBlurriness>0&&(e.object.backgroundBlurriness=this.backgroundBlurriness),1!==this.backgroundIntensity&&(e.object.backgroundIntensity=this.backgroundIntensity),e}}class so{constructor(t,e){this.isInterleavedBuffer=!0,this.array=t,this.stride=e,this.count=void 0!==t?t.length/e:0,this.usage=Zt,this._updateRange={offset:0,count:-1},this.updateRanges=[],this.version=0,this.uuid=se()}onUploadCallback(){}set needsUpdate(t){!0===t&&this.version++}get updateRange(){return console.warn("THREE.InterleavedBuffer: updateRange() is deprecated and will be removed in r169. Use addUpdateRange() instead."),this._updateRange}setUsage(t){return this.usage=t,this}addUpdateRange(t,e){this.updateRanges.push({start:t,count:e})}clearUpdateRanges(){this.updateRanges.length=0}copy(t){return this.array=new t.array.constructor(t.array),this.count=t.count,this.stride=t.stride,this.usage=t.usage,this}copyAt(t,e,n){t*=this.stride,n*=e.stride;for(let i=0,r=this.stride;it.far||e.push({distance:o,point:ho.clone(),uv:ri.getInterpolation(ho,_o,vo,xo,yo,Mo,So,new me),face:null,object:this})}copy(t,e){return super.copy(t,e),void 0!==t.center&&this.center.copy(t.center),this.material=t.material,this}}function To(t,e,n,i,r,s){mo.subVectors(t,n).addScalar(.5).multiply(i),void 0!==r?(fo.x=s*mo.x-r*mo.y,fo.y=r*mo.x+s*mo.y):fo.copy(mo),t.copy(e),t.x+=fo.x,t.y+=fo.y,t.applyMatrix4(go)}const Eo=new We,wo=new We;class Ao extends jn{constructor(){super(),this._currentLevel=0,this.type="LOD",Object.defineProperties(this,{levels:{enumerable:!0,value:[]},isLOD:{value:!0}}),this.autoUpdate=!0}copy(t){super.copy(t,!1);const e=t.levels;for(let t=0,n=e.length;t0){let n,i;for(n=1,i=e.length;n0){Eo.setFromMatrixPosition(this.matrixWorld);const n=t.ray.origin.distanceTo(Eo);this.getObjectForDistance(n).raycast(t,e)}}update(t){const e=this.levels;if(e.length>1){Eo.setFromMatrixPosition(t.matrixWorld),wo.setFromMatrixPosition(this.matrixWorld);const n=Eo.distanceTo(wo)/t.zoom;let i,r;for(e[0].object.visible=!0,i=1,r=e.length;i=t))break;e[i-1].object.visible=!1,e[i].object.visible=!0}for(this._currentLevel=i-1;i=n.length&&n.push({start:-1,count:-1,z:-1});const r=n[this.index];i.push(r),this.index++,r.start=t.start,r.count=t.count,r.z=e}reset(){this.list.length=0,this.index=0}}const el="batchId",nl=new Mn,il=new Mn,rl=new Mn,sl=new Mn,al=new gr,ol=new qe,ll=new dn,cl=new We,hl=new tl,ul=new Ji,dl=[];function pl(t,e,n=0){const i=e.itemSize;if(t.isInterleavedBufferAttribute||t.array.constructor!==e.array.constructor){const r=t.count;for(let s=0;s65536?new Uint32Array(r):new Uint16Array(r);e.setIndex(new Mi(t,1))}const s=i>65536?new Uint32Array(n):new Uint16Array(n);e.setAttribute(el,new Mi(s,1)),this._geometryInitialized=!0}}_validateGeometry(t){if(t.getAttribute(el))throw new Error(`BatchedMesh: Geometry cannot use attribute "${el}"`);const e=this.geometry;if(Boolean(t.getIndex())!==Boolean(e.getIndex()))throw new Error('BatchedMesh: All geometries must consistently have "index".');for(const n in e.attributes){if(n===el)continue;if(!t.hasAttribute(n))throw new Error(`BatchedMesh: Added geometry missing "${n}". All geometries must have consistent attributes.`);const i=t.getAttribute(n),r=e.getAttribute(n);if(i.itemSize!==r.itemSize||i.normalized!==r.normalized)throw new Error("BatchedMesh: All attributes must have a consistent itemSize and normalized value.")}}setCustomSort(t){return this.customSort=t,this}computeBoundingBox(){null===this.boundingBox&&(this.boundingBox=new qe);const t=this._geometryCount,e=this.boundingBox,n=this._active;e.makeEmpty();for(let i=0;i=this._maxGeometryCount)throw new Error("BatchedMesh: Maximum geometry count reached.");const i={vertexStart:-1,vertexCount:-1,indexStart:-1,indexCount:-1};let r=null;const s=this._reservedRanges,a=this._drawRanges,o=this._bounds;0!==this._geometryCount&&(r=s[s.length-1]),i.vertexCount=-1===e?t.getAttribute("position").count:e,i.vertexStart=null===r?0:r.vertexStart+r.vertexCount;const l=t.getIndex(),c=null!==l;if(c&&(i.indexCount=-1===n?l.count:n,i.indexStart=null===r?0:r.indexStart+r.indexCount),-1!==i.indexStart&&i.indexStart+i.indexCount>this._maxIndexCount||i.vertexStart+i.vertexCount>this._maxVertexCount)throw new Error("BatchedMesh: Reserved space request exceeds the maximum buffer size.");const h=this._visibility,u=this._active,d=this._matricesTexture,p=this._matricesTexture.image.data;h.push(!0),u.push(!0);const m=this._geometryCount;this._geometryCount++,rl.toArray(p,16*m),d.needsUpdate=!0,s.push(i),a.push({start:c?i.indexStart:i.vertexStart,count:-1}),o.push({boxInitialized:!1,box:new qe,sphereInitialized:!1,sphere:new dn});const f=this.geometry.getAttribute(el);for(let t=0;t=this._geometryCount)throw new Error("BatchedMesh: Maximum geometry count reached.");this._validateGeometry(e);const n=this.geometry,i=null!==n.getIndex(),r=n.getIndex(),s=e.getIndex(),a=this._reservedRanges[t];if(i&&s.count>a.indexCount||e.attributes.position.count>a.vertexCount)throw new Error("BatchedMesh: Reserved space not large enough for provided geometry.");const o=a.vertexStart,l=a.vertexCount;for(const t in n.attributes){if(t===el)continue;const i=e.getAttribute(t),r=n.getAttribute(t);pl(i,r,o);const s=i.itemSize;for(let t=i.count,e=l;t=e.length||!1===e[t]||(e[t]=!1,this._visibilityChanged=!0),this}getBoundingBoxAt(t,e){if(!1===this._active[t])return this;const n=this._bounds[t],i=n.box,r=this.geometry;if(!1===n.boxInitialized){i.makeEmpty();const e=r.index,s=r.attributes.position,a=this._drawRanges[t];for(let t=a.start,n=a.start+a.count;t=this._geometryCount||!1===n[t]||(e.toArray(r,16*t),i.needsUpdate=!0),this}getMatrixAt(t,e){const n=this._active,i=this._matricesTexture.image.data;return t>=this._geometryCount||!1===n[t]?null:e.fromArray(i,16*t)}setVisibleAt(t,e){const n=this._visibility,i=this._active;return t>=this._geometryCount||!1===i[t]||n[t]===e||(n[t]=e,this._visibilityChanged=!0),this}getVisibleAt(t){const e=this._visibility,n=this._active;return!(t>=this._geometryCount||!1===n[t])&&e[t]}raycast(t,e){const n=this._visibility,i=this._active,r=this._drawRanges,s=this._geometryCount,a=this.matrixWorld,o=this.geometry;ul.material=this.material,ul.geometry.index=o.index,ul.geometry.attributes=o.attributes,null===ul.geometry.boundingBox&&(ul.geometry.boundingBox=new qe),null===ul.geometry.boundingSphere&&(ul.geometry.boundingSphere=new dn);for(let o=0;o({...t}))),this._reservedRanges=t._reservedRanges.map((t=>({...t}))),this._visibility=t._visibility.slice(),this._active=t._active.slice(),this._bounds=t._bounds.map((t=>({boxInitialized:t.boxInitialized,box:t.box.clone(),sphereInitialized:t.sphereInitialized,sphere:t.sphere.clone()}))),this._maxGeometryCount=t._maxGeometryCount,this._maxVertexCount=t._maxVertexCount,this._maxIndexCount=t._maxIndexCount,this._geometryInitialized=t._geometryInitialized,this._geometryCount=t._geometryCount,this._multiDrawCounts=t._multiDrawCounts.slice(),this._multiDrawStarts=t._multiDrawStarts.slice(),this._matricesTexture=t._matricesTexture.clone(),this._matricesTexture.image.data=this._matricesTexture.image.slice(),this}dispose(){return this.geometry.dispose(),this._matricesTexture.dispose(),this._matricesTexture=null,this}onBeforeRender(t,e,n,i,r){if(!this._visibilityChanged&&!this.perObjectFrustumCulled&&!this.sortObjects)return;const s=i.getIndex(),a=null===s?1:s.array.BYTES_PER_ELEMENT,o=this._visibility,l=this._multiDrawStarts,c=this._multiDrawCounts,h=this._drawRanges,u=this.perObjectFrustumCulled;u&&(sl.multiplyMatrices(n.projectionMatrix,n.matrixWorldInverse).multiply(this.matrixWorld),al.setFromProjectionMatrix(sl,t.isWebGPURenderer?Qt:$t));let d=0;if(this.sortObjects){il.copy(this.matrixWorld).invert(),cl.setFromMatrixPosition(n.matrixWorld).applyMatrix4(il);for(let t=0,e=o.length;to)continue;u.applyMatrix4(this.matrixWorld);const s=t.ray.origin.distanceTo(u);st.far||e.push({distance:s,point:h.clone().applyMatrix4(this.matrixWorld),index:n,face:null,faceIndex:null,object:this})}}else{for(let n=Math.max(0,s.start),i=Math.min(m.count,s.start+s.count)-1;no)continue;u.applyMatrix4(this.matrixWorld);const i=t.ray.origin.distanceTo(u);it.far||e.push({distance:i,point:h.clone().applyMatrix4(this.matrixWorld),index:n,face:null,faceIndex:null,object:this})}}}updateMorphTargets(){const t=this.geometry.morphAttributes,e=Object.keys(t);if(e.length>0){const n=t[e[0]];if(void 0!==n){this.morphTargetInfluences=[],this.morphTargetDictionary={};for(let t=0,e=n.length;t0){const n=t[e[0]];if(void 0!==n){this.morphTargetInfluences=[],this.morphTargetDictionary={};for(let t=0,e=n.length;tr.far)return;s.push({distance:l,distanceToRay:Math.sqrt(o),point:n,index:e,face:null,object:a})}}class Ul extends Fe{constructor(t,e,n,i,r,s,a,o,l,c,h,u){super(null,s,a,o,l,c,i,r,h,u),this.isCompressedTexture=!0,this.image={width:e,height:n},this.mipmaps=t,this.flipY=!1,this.generateMipmaps=!1}}class Dl{constructor(){this.type="Curve",this.arcLengthDivisions=200}getPoint(){return console.warn("THREE.Curve: .getPoint() not implemented."),null}getPointAt(t,e){const n=this.getUtoTmapping(t);return this.getPoint(n,e)}getPoints(t=5){const e=[];for(let n=0;n<=t;n++)e.push(this.getPoint(n/t));return e}getSpacedPoints(t=5){const e=[];for(let n=0;n<=t;n++)e.push(this.getPointAt(n/t));return e}getLength(){const t=this.getLengths();return t[t.length-1]}getLengths(t=this.arcLengthDivisions){if(this.cacheArcLengths&&this.cacheArcLengths.length===t+1&&!this.needsUpdate)return this.cacheArcLengths;this.needsUpdate=!1;const e=[];let n,i=this.getPoint(0),r=0;e.push(0);for(let s=1;s<=t;s++)n=this.getPoint(s/t),r+=n.distanceTo(i),e.push(r),i=n;return this.cacheArcLengths=e,e}updateArcLengths(){this.needsUpdate=!0,this.getLengths()}getUtoTmapping(t,e){const n=this.getLengths();let i=0;const r=n.length;let s;s=e||t*n[r-1];let a,o=0,l=r-1;for(;o<=l;)if(i=Math.floor(o+(l-o)/2),a=n[i]-s,a<0)o=i+1;else{if(!(a>0)){l=i;break}l=i-1}if(i=l,n[i]===s)return i/(r-1);const c=n[i];return(i+(s-c)/(n[i+1]-c))/(r-1)}getTangent(t,e){const n=1e-4;let i=t-n,r=t+n;i<0&&(i=0),r>1&&(r=1);const s=this.getPoint(i),a=this.getPoint(r),o=e||(s.isVector2?new me:new We);return o.copy(a).sub(s).normalize(),o}getTangentAt(t,e){const n=this.getUtoTmapping(t);return this.getTangent(n,e)}computeFrenetFrames(t,e){const n=new We,i=[],r=[],s=[],a=new We,o=new Mn;for(let e=0;e<=t;e++){const n=e/t;i[e]=this.getTangentAt(n,new We)}r[0]=new We,s[0]=new We;let l=Number.MAX_VALUE;const c=Math.abs(i[0].x),h=Math.abs(i[0].y),u=Math.abs(i[0].z);c<=l&&(l=c,n.set(1,0,0)),h<=l&&(l=h,n.set(0,1,0)),u<=l&&n.set(0,0,1),a.crossVectors(i[0],n).normalize(),r[0].crossVectors(i[0],a),s[0].crossVectors(i[0],r[0]);for(let e=1;e<=t;e++){if(r[e]=r[e-1].clone(),s[e]=s[e-1].clone(),a.crossVectors(i[e-1],i[e]),a.length()>Number.EPSILON){a.normalize();const t=Math.acos(ae(i[e-1].dot(i[e]),-1,1));r[e].applyMatrix4(o.makeRotationAxis(a,t))}s[e].crossVectors(i[e],r[e])}if(!0===e){let e=Math.acos(ae(r[0].dot(r[t]),-1,1));e/=t,i[0].dot(a.crossVectors(r[0],r[t]))>0&&(e=-e);for(let n=1;n<=t;n++)r[n].applyMatrix4(o.makeRotationAxis(i[n],e*n)),s[n].crossVectors(i[n],r[n])}return{tangents:i,normals:r,binormals:s}}clone(){return(new this.constructor).copy(this)}copy(t){return this.arcLengthDivisions=t.arcLengthDivisions,this}toJSON(){const t={metadata:{version:4.6,type:"Curve",generator:"Curve.toJSON"}};return t.arcLengthDivisions=this.arcLengthDivisions,t.type=this.type,t}fromJSON(t){return this.arcLengthDivisions=t.arcLengthDivisions,this}}class Nl extends Dl{constructor(t=0,e=0,n=1,i=1,r=0,s=2*Math.PI,a=!1,o=0){super(),this.isEllipseCurve=!0,this.type="EllipseCurve",this.aX=t,this.aY=e,this.xRadius=n,this.yRadius=i,this.aStartAngle=r,this.aEndAngle=s,this.aClockwise=a,this.aRotation=o}getPoint(t,e){const n=e||new me,i=2*Math.PI;let r=this.aEndAngle-this.aStartAngle;const s=Math.abs(r)i;)r-=i;r0?0:(Math.floor(Math.abs(l)/r)+1)*r:0===c&&l===r-1&&(l=r-2,c=1),this.closed||l>0?a=i[(l-1)%r]:(Bl.subVectors(i[0],i[1]).add(i[0]),a=Bl);const h=i[l%r],u=i[(l+1)%r];if(this.closed||l+2i.length-2?i.length-1:s+1],h=i[s>i.length-3?i.length-1:s+2];return n.set(kl(a,o.x,l.x,c.x,h.x),kl(a,o.y,l.y,c.y,h.y)),n}copy(t){super.copy(t),this.points=[];for(let e=0,n=t.points.length;e=n){const t=i[r]-n,s=this.curves[r],a=s.getLength(),o=0===a?0:1-t/a;return s.getPointAt(o,e)}r++}return null}getLength(){const t=this.getCurveLengths();return t[t.length-1]}updateArcLengths(){this.needsUpdate=!0,this.cacheLengths=null,this.getCurveLengths()}getCurveLengths(){if(this.cacheLengths&&this.cacheLengths.length===this.curves.length)return this.cacheLengths;const t=[];let e=0;for(let n=0,i=this.curves.length;n1&&!e[e.length-1].equals(e[0])&&e.push(e[0]),e}copy(t){super.copy(t),this.curves=[];for(let e=0,n=t.curves.length;e0){const t=l.getPoint(0);t.equals(this.currentPoint)||this.lineTo(t.x,t.y)}this.curves.push(l);const c=l.getPoint(1);return this.currentPoint.copy(c),this}copy(t){return super.copy(t),this.currentPoint.copy(t.currentPoint),this}toJSON(){const t=super.toJSON();return t.currentPoint=this.currentPoint.toArray(),t}fromJSON(t){return super.fromJSON(t),this.currentPoint.fromArray(t.currentPoint),this}}class nc extends Ii{constructor(t=[new me(0,-.5),new me(.5,0),new me(0,.5)],e=12,n=0,i=2*Math.PI){super(),this.type="LatheGeometry",this.parameters={points:t,segments:e,phiStart:n,phiLength:i},e=Math.floor(e),i=ae(i,0,2*Math.PI);const r=[],s=[],a=[],o=[],l=[],c=1/e,h=new We,u=new me,d=new We,p=new We,m=new We;let f=0,g=0;for(let e=0;e<=t.length-1;e++)switch(e){case 0:f=t[e+1].x-t[e].x,g=t[e+1].y-t[e].y,d.x=1*g,d.y=-f,d.z=0*g,m.copy(d),d.normalize(),o.push(d.x,d.y,d.z);break;case t.length-1:o.push(m.x,m.y,m.z);break;default:f=t[e+1].x-t[e].x,g=t[e+1].y-t[e].y,d.x=1*g,d.y=-f,d.z=0*g,p.copy(d),d.x+=m.x,d.y+=m.y,d.z+=m.z,d.normalize(),o.push(d.x,d.y,d.z),m.copy(p)}for(let r=0;r<=e;r++){const d=n+r*c*i,p=Math.sin(d),m=Math.cos(d);for(let n=0;n<=t.length-1;n++){h.x=t[n].x*p,h.y=t[n].y,h.z=t[n].x*m,s.push(h.x,h.y,h.z),u.x=r/e,u.y=n/(t.length-1),a.push(u.x,u.y);const i=o[3*n+0]*p,c=o[3*n+1],d=o[3*n+0]*m;l.push(i,c,d)}}for(let n=0;n0&&_(!0),e>0&&_(!1)),this.setIndex(c),this.setAttribute("position",new Ti(h,3)),this.setAttribute("normal",new Ti(u,3)),this.setAttribute("uv",new Ti(d,2))}copy(t){return super.copy(t),this.parameters=Object.assign({},t.parameters),this}static fromJSON(t){return new sc(t.radiusTop,t.radiusBottom,t.height,t.radialSegments,t.heightSegments,t.openEnded,t.thetaStart,t.thetaLength)}}class ac extends sc{constructor(t=1,e=1,n=32,i=1,r=!1,s=0,a=2*Math.PI){super(0,t,e,n,i,r,s,a),this.type="ConeGeometry",this.parameters={radius:t,height:e,radialSegments:n,heightSegments:i,openEnded:r,thetaStart:s,thetaLength:a}}static fromJSON(t){return new ac(t.radius,t.height,t.radialSegments,t.heightSegments,t.openEnded,t.thetaStart,t.thetaLength)}}class oc extends Ii{constructor(t=[],e=[],n=1,i=0){super(),this.type="PolyhedronGeometry",this.parameters={vertices:t,indices:e,radius:n,detail:i};const r=[],s=[];function a(t,e,n,i){const r=i+1,s=[];for(let i=0;i<=r;i++){s[i]=[];const a=t.clone().lerp(n,i/r),o=e.clone().lerp(n,i/r),l=r-i;for(let t=0;t<=l;t++)s[i][t]=0===t&&i===r?a:a.clone().lerp(o,t/l)}for(let t=0;t.9&&a<.1&&(e<.2&&(s[t+0]+=1),n<.2&&(s[t+2]+=1),i<.2&&(s[t+4]+=1))}}()}(),this.setAttribute("position",new Ti(r,3)),this.setAttribute("normal",new Ti(r.slice(),3)),this.setAttribute("uv",new Ti(s,2)),0===i?this.computeVertexNormals():this.normalizeNormals()}copy(t){return super.copy(t),this.parameters=Object.assign({},t.parameters),this}static fromJSON(t){return new oc(t.vertices,t.indices,t.radius,t.details)}}class lc extends oc{constructor(t=1,e=0){const n=(1+Math.sqrt(5))/2,i=1/n;super([-1,-1,-1,-1,-1,1,-1,1,-1,-1,1,1,1,-1,-1,1,-1,1,1,1,-1,1,1,1,0,-i,-n,0,-i,n,0,i,-n,0,i,n,-i,-n,0,-i,n,0,i,-n,0,i,n,0,-n,0,-i,n,0,-i,-n,0,i,n,0,i],[3,11,7,3,7,15,3,15,13,7,19,17,7,17,6,7,6,15,17,4,8,17,8,10,17,10,6,8,0,16,8,16,2,8,2,10,0,12,1,0,1,18,0,18,16,6,10,2,6,2,13,6,13,15,2,16,18,2,18,3,2,3,13,18,1,9,18,9,11,18,11,3,4,14,12,4,12,0,4,0,8,11,9,5,11,5,19,11,19,7,19,5,14,19,14,4,19,4,17,1,12,14,1,14,5,1,5,9],t,e),this.type="DodecahedronGeometry",this.parameters={radius:t,detail:e}}static fromJSON(t){return new lc(t.radius,t.detail)}}const cc=new We,hc=new We,uc=new We,dc=new ri;class pc extends Ii{constructor(t=null,e=1){if(super(),this.type="EdgesGeometry",this.parameters={geometry:t,thresholdAngle:e},null!==t){const n=4,i=Math.pow(10,n),r=Math.cos(ie*e),s=t.getIndex(),a=t.getAttribute("position"),o=s?s.count:a.count,l=[0,0,0],c=["a","b","c"],h=new Array(3),u={},d=[];for(let t=0;t80*n){o=c=t[0],l=h=t[1];for(let e=n;ec&&(c=u),d>h&&(h=d);p=Math.max(c-o,h-l),p=0!==p?32767/p:0}return vc(s,a,n,o,l,p,0),a};function gc(t,e,n,i,r){let s,a;if(r===function(t,e,n,i){let r=0;for(let s=e,a=n-i;s0)for(s=e;s=e;s-=i)a=Fc(s,t[s],t[s+1],a);return a&&Pc(a,a.next)&&(Bc(a),a=a.next),a}function _c(t,e){if(!t)return t;e||(e=t);let n,i=t;do{if(n=!1,i.steiner||!Pc(i,i.next)&&0!==Lc(i.prev,i,i.next))i=i.next;else{if(Bc(i),i=e=i.prev,i===i.next)break;n=!0}}while(n||i!==e);return e}function vc(t,e,n,i,r,s,a){if(!t)return;!a&&s&&function(t,e,n,i){let r=t;do{0===r.z&&(r.z=wc(r.x,r.y,e,n,i)),r.prevZ=r.prev,r.nextZ=r.next,r=r.next}while(r!==t);r.prevZ.nextZ=null,r.prevZ=null,function(t){let e,n,i,r,s,a,o,l,c=1;do{for(n=t,t=null,s=null,a=0;n;){for(a++,i=n,o=0,e=0;e0||l>0&&i;)0!==o&&(0===l||!i||n.z<=i.z)?(r=n,n=n.nextZ,o--):(r=i,i=i.nextZ,l--),s?s.nextZ=r:t=r,r.prevZ=s,s=r;n=i}s.nextZ=null,c*=2}while(a>1)}(r)}(t,i,r,s);let o,l,c=t;for(;t.prev!==t.next;)if(o=t.prev,l=t.next,s?yc(t,i,r,s):xc(t))e.push(o.i/n|0),e.push(t.i/n|0),e.push(l.i/n|0),Bc(t),t=l.next,c=l.next;else if((t=l)===c){a?1===a?vc(t=Mc(_c(t),e,n),e,n,i,r,s,2):2===a&&Sc(t,e,n,i,r,s):vc(_c(t),e,n,i,r,s,1);break}}function xc(t){const e=t.prev,n=t,i=t.next;if(Lc(e,n,i)>=0)return!1;const r=e.x,s=n.x,a=i.x,o=e.y,l=n.y,c=i.y,h=rs?r>a?r:a:s>a?s:a,p=o>l?o>c?o:c:l>c?l:c;let m=i.next;for(;m!==e;){if(m.x>=h&&m.x<=d&&m.y>=u&&m.y<=p&&Rc(r,o,s,l,a,c,m.x,m.y)&&Lc(m.prev,m,m.next)>=0)return!1;m=m.next}return!0}function yc(t,e,n,i){const r=t.prev,s=t,a=t.next;if(Lc(r,s,a)>=0)return!1;const o=r.x,l=s.x,c=a.x,h=r.y,u=s.y,d=a.y,p=ol?o>c?o:c:l>c?l:c,g=h>u?h>d?h:d:u>d?u:d,_=wc(p,m,e,n,i),v=wc(f,g,e,n,i);let x=t.prevZ,y=t.nextZ;for(;x&&x.z>=_&&y&&y.z<=v;){if(x.x>=p&&x.x<=f&&x.y>=m&&x.y<=g&&x!==r&&x!==a&&Rc(o,h,l,u,c,d,x.x,x.y)&&Lc(x.prev,x,x.next)>=0)return!1;if(x=x.prevZ,y.x>=p&&y.x<=f&&y.y>=m&&y.y<=g&&y!==r&&y!==a&&Rc(o,h,l,u,c,d,y.x,y.y)&&Lc(y.prev,y,y.next)>=0)return!1;y=y.nextZ}for(;x&&x.z>=_;){if(x.x>=p&&x.x<=f&&x.y>=m&&x.y<=g&&x!==r&&x!==a&&Rc(o,h,l,u,c,d,x.x,x.y)&&Lc(x.prev,x,x.next)>=0)return!1;x=x.prevZ}for(;y&&y.z<=v;){if(y.x>=p&&y.x<=f&&y.y>=m&&y.y<=g&&y!==r&&y!==a&&Rc(o,h,l,u,c,d,y.x,y.y)&&Lc(y.prev,y,y.next)>=0)return!1;y=y.nextZ}return!0}function Mc(t,e,n){let i=t;do{const r=i.prev,s=i.next.next;!Pc(r,s)&&Ic(r,i,i.next,s)&&Nc(r,s)&&Nc(s,r)&&(e.push(r.i/n|0),e.push(i.i/n|0),e.push(s.i/n|0),Bc(i),Bc(i.next),i=t=s),i=i.next}while(i!==t);return _c(i)}function Sc(t,e,n,i,r,s){let a=t;do{let t=a.next.next;for(;t!==a.prev;){if(a.i!==t.i&&Cc(a,t)){let o=Oc(a,t);return a=_c(a,a.next),o=_c(o,o.next),vc(a,e,n,i,r,s,0),void vc(o,e,n,i,r,s,0)}t=t.next}a=a.next}while(a!==t)}function bc(t,e){return t.x-e.x}function Tc(t,e){const n=function(t,e){let n,i=e,r=-1/0;const s=t.x,a=t.y;do{if(a<=i.y&&a>=i.next.y&&i.next.y!==i.y){const t=i.x+(a-i.y)*(i.next.x-i.x)/(i.next.y-i.y);if(t<=s&&t>r&&(r=t,n=i.x=i.x&&i.x>=l&&s!==i.x&&Rc(an.x||i.x===n.x&&Ec(n,i)))&&(n=i,u=h)),i=i.next}while(i!==o);return n}(t,e);if(!n)return e;const i=Oc(n,t);return _c(i,i.next),_c(n,n.next)}function Ec(t,e){return Lc(t.prev,t,e.prev)<0&&Lc(e.next,t,t.next)<0}function wc(t,e,n,i,r){return(t=1431655765&((t=858993459&((t=252645135&((t=16711935&((t=(t-n)*r|0)|t<<8))|t<<4))|t<<2))|t<<1))|(e=1431655765&((e=858993459&((e=252645135&((e=16711935&((e=(e-i)*r|0)|e<<8))|e<<4))|e<<2))|e<<1))<<1}function Ac(t){let e=t,n=t;do{(e.x=(t-a)*(s-o)&&(t-a)*(i-o)>=(n-a)*(e-o)&&(n-a)*(s-o)>=(r-a)*(i-o)}function Cc(t,e){return t.next.i!==e.i&&t.prev.i!==e.i&&!function(t,e){let n=t;do{if(n.i!==t.i&&n.next.i!==t.i&&n.i!==e.i&&n.next.i!==e.i&&Ic(n,n.next,t,e))return!0;n=n.next}while(n!==t);return!1}(t,e)&&(Nc(t,e)&&Nc(e,t)&&function(t,e){let n=t,i=!1;const r=(t.x+e.x)/2,s=(t.y+e.y)/2;do{n.y>s!=n.next.y>s&&n.next.y!==n.y&&r<(n.next.x-n.x)*(s-n.y)/(n.next.y-n.y)+n.x&&(i=!i),n=n.next}while(n!==t);return i}(t,e)&&(Lc(t.prev,t,e.prev)||Lc(t,e.prev,e))||Pc(t,e)&&Lc(t.prev,t,t.next)>0&&Lc(e.prev,e,e.next)>0)}function Lc(t,e,n){return(e.y-t.y)*(n.x-e.x)-(e.x-t.x)*(n.y-e.y)}function Pc(t,e){return t.x===e.x&&t.y===e.y}function Ic(t,e,n,i){const r=Dc(Lc(t,e,n)),s=Dc(Lc(t,e,i)),a=Dc(Lc(n,i,t)),o=Dc(Lc(n,i,e));return r!==s&&a!==o||(!(0!==r||!Uc(t,n,e))||(!(0!==s||!Uc(t,i,e))||(!(0!==a||!Uc(n,t,i))||!(0!==o||!Uc(n,e,i)))))}function Uc(t,e,n){return e.x<=Math.max(t.x,n.x)&&e.x>=Math.min(t.x,n.x)&&e.y<=Math.max(t.y,n.y)&&e.y>=Math.min(t.y,n.y)}function Dc(t){return t>0?1:t<0?-1:0}function Nc(t,e){return Lc(t.prev,t,t.next)<0?Lc(t,e,t.next)>=0&&Lc(t,t.prev,e)>=0:Lc(t,e,t.prev)<0||Lc(t,t.next,e)<0}function Oc(t,e){const n=new zc(t.i,t.x,t.y),i=new zc(e.i,e.x,e.y),r=t.next,s=e.prev;return t.next=e,e.prev=t,n.next=r,r.prev=n,i.next=n,n.prev=i,s.next=i,i.prev=s,i}function Fc(t,e,n,i){const r=new zc(t,e,n);return i?(r.next=i.next,r.prev=i,i.next.prev=r,i.next=r):(r.prev=r,r.next=r),r}function Bc(t){t.next.prev=t.prev,t.prev.next=t.next,t.prevZ&&(t.prevZ.nextZ=t.nextZ),t.nextZ&&(t.nextZ.prevZ=t.prevZ)}function zc(t,e,n){this.i=t,this.x=e,this.y=n,this.prev=null,this.next=null,this.z=0,this.prevZ=null,this.nextZ=null,this.steiner=!1}class Gc{static area(t){const e=t.length;let n=0;for(let i=e-1,r=0;r2&&t[e-1].equals(t[0])&&t.pop()}function Vc(t,e){for(let n=0;nNumber.EPSILON){const u=Math.sqrt(h),d=Math.sqrt(l*l+c*c),p=e.x-o/u,m=e.y+a/u,f=((n.x-c/d-p)*c-(n.y+l/d-m)*l)/(a*c-o*l);i=p+a*f-t.x,r=m+o*f-t.y;const g=i*i+r*r;if(g<=2)return new me(i,r);s=Math.sqrt(g/2)}else{let t=!1;a>Number.EPSILON?l>Number.EPSILON&&(t=!0):a<-Number.EPSILON?l<-Number.EPSILON&&(t=!0):Math.sign(o)===Math.sign(c)&&(t=!0),t?(i=-o,r=a,s=Math.sqrt(h)):(i=a,r=o,s=Math.sqrt(h/2))}return new me(i/s,r/s)}const P=[];for(let t=0,e=w.length,n=e-1,i=t+1;t=0;t--){const e=t/p,n=h*Math.cos(e*Math.PI/2),i=u*Math.sin(e*Math.PI/2)+d;for(let t=0,e=w.length;t=0;){const i=n;let r=n-1;r<0&&(r=t.length-1);for(let t=0,n=o+2*p;t0)&&d.push(e,r,l),(t!==n-1||o0!=t>0&&this.version++,this._anisotropy=t}get clearcoat(){return this._clearcoat}set clearcoat(t){this._clearcoat>0!=t>0&&this.version++,this._clearcoat=t}get iridescence(){return this._iridescence}set iridescence(t){this._iridescence>0!=t>0&&this.version++,this._iridescence=t}get sheen(){return this._sheen}set sheen(t){this._sheen>0!=t>0&&this.version++,this._sheen=t}get transmission(){return this._transmission}set transmission(t){this._transmission>0!=t>0&&this.version++,this._transmission=t}copy(t){return super.copy(t),this.defines={STANDARD:"",PHYSICAL:""},this.anisotropy=t.anisotropy,this.anisotropyRotation=t.anisotropyRotation,this.anisotropyMap=t.anisotropyMap,this.clearcoat=t.clearcoat,this.clearcoatMap=t.clearcoatMap,this.clearcoatRoughness=t.clearcoatRoughness,this.clearcoatRoughnessMap=t.clearcoatRoughnessMap,this.clearcoatNormalMap=t.clearcoatNormalMap,this.clearcoatNormalScale.copy(t.clearcoatNormalScale),this.ior=t.ior,this.iridescence=t.iridescence,this.iridescenceMap=t.iridescenceMap,this.iridescenceIOR=t.iridescenceIOR,this.iridescenceThicknessRange=[...t.iridescenceThicknessRange],this.iridescenceThicknessMap=t.iridescenceThicknessMap,this.sheen=t.sheen,this.sheenColor.copy(t.sheenColor),this.sheenColorMap=t.sheenColorMap,this.sheenRoughness=t.sheenRoughness,this.sheenRoughnessMap=t.sheenRoughnessMap,this.transmission=t.transmission,this.transmissionMap=t.transmissionMap,this.thickness=t.thickness,this.thicknessMap=t.thicknessMap,this.attenuationDistance=t.attenuationDistance,this.attenuationColor.copy(t.attenuationColor),this.specularIntensity=t.specularIntensity,this.specularIntensityMap=t.specularIntensityMap,this.specularColor.copy(t.specularColor),this.specularColorMap=t.specularColorMap,this}}class oh extends di{constructor(t){super(),this.isMeshPhongMaterial=!0,this.type="MeshPhongMaterial",this.color=new ci(16777215),this.specular=new ci(1118481),this.shininess=30,this.map=null,this.lightMap=null,this.lightMapIntensity=1,this.aoMap=null,this.aoMapIntensity=1,this.emissive=new ci(0),this.emissiveIntensity=1,this.emissiveMap=null,this.bumpMap=null,this.bumpScale=1,this.normalMap=null,this.normalMapType=0,this.normalScale=new me(1,1),this.displacementMap=null,this.displacementScale=1,this.displacementBias=0,this.specularMap=null,this.alphaMap=null,this.envMap=null,this.combine=h,this.reflectivity=1,this.refractionRatio=.98,this.wireframe=!1,this.wireframeLinewidth=1,this.wireframeLinecap="round",this.wireframeLinejoin="round",this.flatShading=!1,this.fog=!0,this.setValues(t)}copy(t){return super.copy(t),this.color.copy(t.color),this.specular.copy(t.specular),this.shininess=t.shininess,this.map=t.map,this.lightMap=t.lightMap,this.lightMapIntensity=t.lightMapIntensity,this.aoMap=t.aoMap,this.aoMapIntensity=t.aoMapIntensity,this.emissive.copy(t.emissive),this.emissiveMap=t.emissiveMap,this.emissiveIntensity=t.emissiveIntensity,this.bumpMap=t.bumpMap,this.bumpScale=t.bumpScale,this.normalMap=t.normalMap,this.normalMapType=t.normalMapType,this.normalScale.copy(t.normalScale),this.displacementMap=t.displacementMap,this.displacementScale=t.displacementScale,this.displacementBias=t.displacementBias,this.specularMap=t.specularMap,this.alphaMap=t.alphaMap,this.envMap=t.envMap,this.combine=t.combine,this.reflectivity=t.reflectivity,this.refractionRatio=t.refractionRatio,this.wireframe=t.wireframe,this.wireframeLinewidth=t.wireframeLinewidth,this.wireframeLinecap=t.wireframeLinecap,this.wireframeLinejoin=t.wireframeLinejoin,this.flatShading=t.flatShading,this.fog=t.fog,this}}class lh extends di{constructor(t){super(),this.isMeshToonMaterial=!0,this.defines={TOON:""},this.type="MeshToonMaterial",this.color=new ci(16777215),this.map=null,this.gradientMap=null,this.lightMap=null,this.lightMapIntensity=1,this.aoMap=null,this.aoMapIntensity=1,this.emissive=new ci(0),this.emissiveIntensity=1,this.emissiveMap=null,this.bumpMap=null,this.bumpScale=1,this.normalMap=null,this.normalMapType=0,this.normalScale=new me(1,1),this.displacementMap=null,this.displacementScale=1,this.displacementBias=0,this.alphaMap=null,this.wireframe=!1,this.wireframeLinewidth=1,this.wireframeLinecap="round",this.wireframeLinejoin="round",this.fog=!0,this.setValues(t)}copy(t){return super.copy(t),this.color.copy(t.color),this.map=t.map,this.gradientMap=t.gradientMap,this.lightMap=t.lightMap,this.lightMapIntensity=t.lightMapIntensity,this.aoMap=t.aoMap,this.aoMapIntensity=t.aoMapIntensity,this.emissive.copy(t.emissive),this.emissiveMap=t.emissiveMap,this.emissiveIntensity=t.emissiveIntensity,this.bumpMap=t.bumpMap,this.bumpScale=t.bumpScale,this.normalMap=t.normalMap,this.normalMapType=t.normalMapType,this.normalScale.copy(t.normalScale),this.displacementMap=t.displacementMap,this.displacementScale=t.displacementScale,this.displacementBias=t.displacementBias,this.alphaMap=t.alphaMap,this.wireframe=t.wireframe,this.wireframeLinewidth=t.wireframeLinewidth,this.wireframeLinecap=t.wireframeLinecap,this.wireframeLinejoin=t.wireframeLinejoin,this.fog=t.fog,this}}class ch extends di{constructor(t){super(),this.isMeshNormalMaterial=!0,this.type="MeshNormalMaterial",this.bumpMap=null,this.bumpScale=1,this.normalMap=null,this.normalMapType=0,this.normalScale=new me(1,1),this.displacementMap=null,this.displacementScale=1,this.displacementBias=0,this.wireframe=!1,this.wireframeLinewidth=1,this.flatShading=!1,this.setValues(t)}copy(t){return super.copy(t),this.bumpMap=t.bumpMap,this.bumpScale=t.bumpScale,this.normalMap=t.normalMap,this.normalMapType=t.normalMapType,this.normalScale.copy(t.normalScale),this.displacementMap=t.displacementMap,this.displacementScale=t.displacementScale,this.displacementBias=t.displacementBias,this.wireframe=t.wireframe,this.wireframeLinewidth=t.wireframeLinewidth,this.flatShading=t.flatShading,this}}class hh extends di{constructor(t){super(),this.isMeshLambertMaterial=!0,this.type="MeshLambertMaterial",this.color=new ci(16777215),this.map=null,this.lightMap=null,this.lightMapIntensity=1,this.aoMap=null,this.aoMapIntensity=1,this.emissive=new ci(0),this.emissiveIntensity=1,this.emissiveMap=null,this.bumpMap=null,this.bumpScale=1,this.normalMap=null,this.normalMapType=0,this.normalScale=new me(1,1),this.displacementMap=null,this.displacementScale=1,this.displacementBias=0,this.specularMap=null,this.alphaMap=null,this.envMap=null,this.combine=h,this.reflectivity=1,this.refractionRatio=.98,this.wireframe=!1,this.wireframeLinewidth=1,this.wireframeLinecap="round",this.wireframeLinejoin="round",this.flatShading=!1,this.fog=!0,this.setValues(t)}copy(t){return super.copy(t),this.color.copy(t.color),this.map=t.map,this.lightMap=t.lightMap,this.lightMapIntensity=t.lightMapIntensity,this.aoMap=t.aoMap,this.aoMapIntensity=t.aoMapIntensity,this.emissive.copy(t.emissive),this.emissiveMap=t.emissiveMap,this.emissiveIntensity=t.emissiveIntensity,this.bumpMap=t.bumpMap,this.bumpScale=t.bumpScale,this.normalMap=t.normalMap,this.normalMapType=t.normalMapType,this.normalScale.copy(t.normalScale),this.displacementMap=t.displacementMap,this.displacementScale=t.displacementScale,this.displacementBias=t.displacementBias,this.specularMap=t.specularMap,this.alphaMap=t.alphaMap,this.envMap=t.envMap,this.combine=t.combine,this.reflectivity=t.reflectivity,this.refractionRatio=t.refractionRatio,this.wireframe=t.wireframe,this.wireframeLinewidth=t.wireframeLinewidth,this.wireframeLinecap=t.wireframeLinecap,this.wireframeLinejoin=t.wireframeLinejoin,this.flatShading=t.flatShading,this.fog=t.fog,this}}class uh extends di{constructor(t){super(),this.isMeshMatcapMaterial=!0,this.defines={MATCAP:""},this.type="MeshMatcapMaterial",this.color=new ci(16777215),this.matcap=null,this.map=null,this.bumpMap=null,this.bumpScale=1,this.normalMap=null,this.normalMapType=0,this.normalScale=new me(1,1),this.displacementMap=null,this.displacementScale=1,this.displacementBias=0,this.alphaMap=null,this.flatShading=!1,this.fog=!0,this.setValues(t)}copy(t){return super.copy(t),this.defines={MATCAP:""},this.color.copy(t.color),this.matcap=t.matcap,this.map=t.map,this.bumpMap=t.bumpMap,this.bumpScale=t.bumpScale,this.normalMap=t.normalMap,this.normalMapType=t.normalMapType,this.normalScale.copy(t.normalScale),this.displacementMap=t.displacementMap,this.displacementScale=t.displacementScale,this.displacementBias=t.displacementBias,this.alphaMap=t.alphaMap,this.flatShading=t.flatShading,this.fog=t.fog,this}}class dh extends fl{constructor(t){super(),this.isLineDashedMaterial=!0,this.type="LineDashedMaterial",this.scale=1,this.dashSize=3,this.gapSize=1,this.setValues(t)}copy(t){return super.copy(t),this.scale=t.scale,this.dashSize=t.dashSize,this.gapSize=t.gapSize,this}}function ph(t,e,n){return!t||!n&&t.constructor===e?t:"number"==typeof e.BYTES_PER_ELEMENT?new e(t):Array.prototype.slice.call(t)}function mh(t){return ArrayBuffer.isView(t)&&!(t instanceof DataView)}function fh(t){const e=t.length,n=new Array(e);for(let t=0;t!==e;++t)n[t]=t;return n.sort((function(e,n){return t[e]-t[n]})),n}function gh(t,e,n){const i=t.length,r=new t.constructor(i);for(let s=0,a=0;a!==i;++s){const i=n[s]*e;for(let n=0;n!==e;++n)r[a++]=t[i+n]}return r}function _h(t,e,n,i){let r=1,s=t[0];for(;void 0!==s&&void 0===s[i];)s=t[r++];if(void 0===s)return;let a=s[i];if(void 0!==a)if(Array.isArray(a))do{a=s[i],void 0!==a&&(e.push(s.time),n.push.apply(n,a)),s=t[r++]}while(void 0!==s);else if(void 0!==a.toArray)do{a=s[i],void 0!==a&&(e.push(s.time),a.toArray(n,n.length)),s=t[r++]}while(void 0!==s);else do{a=s[i],void 0!==a&&(e.push(s.time),n.push(a)),s=t[r++]}while(void 0!==s)}const vh={convertArray:ph,isTypedArray:mh,getKeyframeOrder:fh,sortedArray:gh,flattenJSON:_h,subclip:function(t,e,n,i,r=30){const s=t.clone();s.name=e;const a=[];for(let t=0;t=i)){l.push(e.times[t]);for(let n=0;ns.tracks[t].times[0]&&(o=s.tracks[t].times[0]);for(let t=0;t=i.times[u]){const t=u*l+o,e=t+l-o;d=i.values.slice(t,e)}else{const t=i.createInterpolant(),e=o,n=l-o;t.evaluate(s),d=t.resultBuffer.slice(e,n)}if("quaternion"===r){(new ke).fromArray(d).normalize().conjugate().toArray(d)}const p=a.times.length;for(let t=0;t=r)break t;{const a=e[1];t=r)break e}s=n,n=0}}for(;n>>1;te;)--s;if(++s,0!==r||s!==i){r>=s&&(s=Math.max(s,1),r=s-1);const t=this.getValueSize();this.times=n.slice(r,s),this.values=this.values.slice(r*t,s*t)}return this}validate(){let t=!0;const e=this.getValueSize();e-Math.floor(e)!=0&&(console.error("THREE.KeyframeTrack: Invalid value size in track.",this),t=!1);const n=this.times,i=this.values,r=n.length;0===r&&(console.error("THREE.KeyframeTrack: Track is empty.",this),t=!1);let s=null;for(let e=0;e!==r;e++){const i=n[e];if("number"==typeof i&&isNaN(i)){console.error("THREE.KeyframeTrack: Time is not a valid number.",this,e,i),t=!1;break}if(null!==s&&s>i){console.error("THREE.KeyframeTrack: Out of order keys.",this,e,i,s),t=!1;break}s=i}if(void 0!==i&&mh(i))for(let e=0,n=i.length;e!==n;++e){const n=i[e];if(isNaN(n)){console.error("THREE.KeyframeTrack: Value is not a valid number.",this,e,n),t=!1;break}}return t}optimize(){const t=this.times.slice(),e=this.values.slice(),n=this.getValueSize(),i=this.getInterpolation()===Pt,r=t.length-1;let s=1;for(let a=1;a0){t[s]=t[r];for(let t=r*n,i=s*n,a=0;a!==n;++a)e[i+a]=e[t+a];++s}return s!==t.length?(this.times=t.slice(0,s),this.values=e.slice(0,s*n)):(this.times=t,this.values=e),this}clone(){const t=this.times.slice(),e=this.values.slice(),n=new(0,this.constructor)(this.name,t,e);return n.createInterpolant=this.createInterpolant,n}}bh.prototype.TimeBufferType=Float32Array,bh.prototype.ValueBufferType=Float32Array,bh.prototype.DefaultInterpolation=Lt;class Th extends bh{}Th.prototype.ValueTypeName="bool",Th.prototype.ValueBufferType=Array,Th.prototype.DefaultInterpolation=Ct,Th.prototype.InterpolantFactoryMethodLinear=void 0,Th.prototype.InterpolantFactoryMethodSmooth=void 0;class Eh extends bh{}Eh.prototype.ValueTypeName="color";class wh extends bh{}wh.prototype.ValueTypeName="number";class Ah extends xh{constructor(t,e,n,i){super(t,e,n,i)}interpolate_(t,e,n,i){const r=this.resultBuffer,s=this.sampleValues,a=this.valueSize,o=(n-e)/(i-e);let l=t*a;for(let t=l+a;l!==t;l+=4)ke.slerpFlat(r,0,s,l-a,s,l,o);return r}}class Rh extends bh{InterpolantFactoryMethodLinear(t){return new Ah(this.times,this.values,this.getValueSize(),t)}}Rh.prototype.ValueTypeName="quaternion",Rh.prototype.DefaultInterpolation=Lt,Rh.prototype.InterpolantFactoryMethodSmooth=void 0;class Ch extends bh{}Ch.prototype.ValueTypeName="string",Ch.prototype.ValueBufferType=Array,Ch.prototype.DefaultInterpolation=Ct,Ch.prototype.InterpolantFactoryMethodLinear=void 0,Ch.prototype.InterpolantFactoryMethodSmooth=void 0;class Lh extends bh{}Lh.prototype.ValueTypeName="vector";class Ph{constructor(t,e=-1,n,i=2500){this.name=t,this.tracks=n,this.duration=e,this.blendMode=i,this.uuid=se(),this.duration<0&&this.resetDuration()}static parse(t){const e=[],n=t.tracks,i=1/(t.fps||1);for(let t=0,r=n.length;t!==r;++t)e.push(Ih(n[t]).scale(i));const r=new this(t.name,t.duration,e,t.blendMode);return r.uuid=t.uuid,r}static toJSON(t){const e=[],n=t.tracks,i={name:t.name,duration:t.duration,tracks:e,uuid:t.uuid,blendMode:t.blendMode};for(let t=0,i=n.length;t!==i;++t)e.push(bh.toJSON(n[t]));return i}static CreateFromMorphTargetSequence(t,e,n,i){const r=e.length,s=[];for(let t=0;t1){const t=s[1];let e=i[t];e||(i[t]=e=[]),e.push(n)}}const s=[];for(const t in i)s.push(this.CreateFromMorphTargetSequence(t,i[t],e,n));return s}static parseAnimation(t,e){if(!t)return console.error("THREE.AnimationClip: No animation in JSONLoader data."),null;const n=function(t,e,n,i,r){if(0!==n.length){const s=[],a=[];_h(n,s,a,i),0!==s.length&&r.push(new t(e,s,a))}},i=[],r=t.name||"default",s=t.fps||30,a=t.blendMode;let o=t.length||-1;const l=t.hierarchy||[];for(let t=0;t{e&&e(r),this.manager.itemEnd(t)}),0),r;if(void 0!==Fh[t])return void Fh[t].push({onLoad:e,onProgress:n,onError:i});Fh[t]=[],Fh[t].push({onLoad:e,onProgress:n,onError:i});const s=new Request(t,{headers:new Headers(this.requestHeader),credentials:this.withCredentials?"include":"same-origin"}),a=this.mimeType,o=this.responseType;fetch(s).then((e=>{if(200===e.status||0===e.status){if(0===e.status&&console.warn("THREE.FileLoader: HTTP Status 0 received."),"undefined"==typeof ReadableStream||void 0===e.body||void 0===e.body.getReader)return e;const n=Fh[t],i=e.body.getReader(),r=e.headers.get("Content-Length")||e.headers.get("X-File-Size"),s=r?parseInt(r):0,a=0!==s;let o=0;const l=new ReadableStream({start(t){!function e(){i.read().then((({done:i,value:r})=>{if(i)t.close();else{o+=r.byteLength;const i=new ProgressEvent("progress",{lengthComputable:a,loaded:o,total:s});for(let t=0,e=n.length;t{switch(o){case"arraybuffer":return t.arrayBuffer();case"blob":return t.blob();case"document":return t.text().then((t=>(new DOMParser).parseFromString(t,a)));case"json":return t.json();default:if(void 0===a)return t.text();{const e=/charset="?([^;"\s]*)"?/i.exec(a),n=e&&e[1]?e[1].toLowerCase():void 0,i=new TextDecoder(n);return t.arrayBuffer().then((t=>i.decode(t)))}}})).then((e=>{Uh.add(t,e);const n=Fh[t];delete Fh[t];for(let t=0,i=n.length;t{const n=Fh[t];if(void 0===n)throw this.manager.itemError(t),e;delete Fh[t];for(let t=0,i=n.length;t{this.manager.itemEnd(t)})),this.manager.itemStart(t)}setResponseType(t){return this.responseType=t,this}setMimeType(t){return this.mimeType=t,this}}class Gh extends Oh{constructor(t){super(t)}load(t,e,n,i){void 0!==this.path&&(t=this.path+t),t=this.manager.resolveURL(t);const r=this,s=Uh.get(t);if(void 0!==s)return r.manager.itemStart(t),setTimeout((function(){e&&e(s),r.manager.itemEnd(t)}),0),s;const a=ye("img");function o(){c(),Uh.add(t,this),e&&e(this),r.manager.itemEnd(t)}function l(e){c(),i&&i(e),r.manager.itemError(t),r.manager.itemEnd(t)}function c(){a.removeEventListener("load",o,!1),a.removeEventListener("error",l,!1)}return a.addEventListener("load",o,!1),a.addEventListener("error",l,!1),"data:"!==t.slice(0,5)&&void 0!==this.crossOrigin&&(a.crossOrigin=this.crossOrigin),r.manager.itemStart(t),a.src=t,a}}class Hh extends jn{constructor(t,e=1){super(),this.isLight=!0,this.type="Light",this.color=new ci(t),this.intensity=e}dispose(){}copy(t,e){return super.copy(t,e),this.color.copy(t.color),this.intensity=t.intensity,this}toJSON(t){const e=super.toJSON(t);return e.object.color=this.color.getHex(),e.object.intensity=this.intensity,void 0!==this.groundColor&&(e.object.groundColor=this.groundColor.getHex()),void 0!==this.distance&&(e.object.distance=this.distance),void 0!==this.angle&&(e.object.angle=this.angle),void 0!==this.decay&&(e.object.decay=this.decay),void 0!==this.penumbra&&(e.object.penumbra=this.penumbra),void 0!==this.shadow&&(e.object.shadow=this.shadow.toJSON()),e}}class Vh extends Hh{constructor(t,e,n){super(t,n),this.isHemisphereLight=!0,this.type="HemisphereLight",this.position.copy(jn.DEFAULT_UP),this.updateMatrix(),this.groundColor=new ci(e)}copy(t,e){return super.copy(t,e),this.groundColor.copy(t.groundColor),this}}const kh=new Mn,Wh=new We,Xh=new We;class jh{constructor(t){this.camera=t,this.bias=0,this.normalBias=0,this.radius=1,this.blurSamples=8,this.mapSize=new me(512,512),this.map=null,this.mapPass=null,this.matrix=new Mn,this.autoUpdate=!0,this.needsUpdate=!1,this._frustum=new gr,this._frameExtents=new me(1,1),this._viewportCount=1,this._viewports=[new Be(0,0,1,1)]}getViewportCount(){return this._viewportCount}getFrustum(){return this._frustum}updateMatrices(t){const e=this.camera,n=this.matrix;Wh.setFromMatrixPosition(t.matrixWorld),e.position.copy(Wh),Xh.setFromMatrixPosition(t.target.matrixWorld),e.lookAt(Xh),e.updateMatrixWorld(),kh.multiplyMatrices(e.projectionMatrix,e.matrixWorldInverse),this._frustum.setFromProjectionMatrix(kh),n.set(.5,0,0,.5,0,.5,0,.5,0,0,.5,.5,0,0,0,1),n.multiply(kh)}getViewport(t){return this._viewports[t]}getFrameExtents(){return this._frameExtents}dispose(){this.map&&this.map.dispose(),this.mapPass&&this.mapPass.dispose()}copy(t){return this.camera=t.camera.clone(),this.bias=t.bias,this.radius=t.radius,this.mapSize.copy(t.mapSize),this}clone(){return(new this.constructor).copy(this)}toJSON(){const t={};return 0!==this.bias&&(t.bias=this.bias),0!==this.normalBias&&(t.normalBias=this.normalBias),1!==this.radius&&(t.radius=this.radius),512===this.mapSize.x&&512===this.mapSize.y||(t.mapSize=this.mapSize.toArray()),t.camera=this.camera.toJSON(!1).object,delete t.camera.matrix,t}}class qh extends jh{constructor(){super(new sr(50,1,.5,500)),this.isSpotLightShadow=!0,this.focus=1}updateMatrices(t){const e=this.camera,n=2*re*t.angle*this.focus,i=this.mapSize.width/this.mapSize.height,r=t.distance||e.far;n===e.fov&&i===e.aspect&&r===e.far||(e.fov=n,e.aspect=i,e.far=r,e.updateProjectionMatrix()),super.updateMatrices(t)}copy(t){return super.copy(t),this.focus=t.focus,this}}class Yh extends Hh{constructor(t,e,n=0,i=Math.PI/3,r=0,s=2){super(t,e),this.isSpotLight=!0,this.type="SpotLight",this.position.copy(jn.DEFAULT_UP),this.updateMatrix(),this.target=new jn,this.distance=n,this.angle=i,this.penumbra=r,this.decay=s,this.map=null,this.shadow=new qh}get power(){return this.intensity*Math.PI}set power(t){this.intensity=t/Math.PI}dispose(){this.shadow.dispose()}copy(t,e){return super.copy(t,e),this.distance=t.distance,this.angle=t.angle,this.penumbra=t.penumbra,this.decay=t.decay,this.target=t.target.clone(),this.shadow=t.shadow.clone(),this}}const Zh=new Mn,Jh=new We,Kh=new We;class $h extends jh{constructor(){super(new sr(90,1,.5,500)),this.isPointLightShadow=!0,this._frameExtents=new me(4,2),this._viewportCount=6,this._viewports=[new Be(2,1,1,1),new Be(0,1,1,1),new Be(3,1,1,1),new Be(1,1,1,1),new Be(3,0,1,1),new Be(1,0,1,1)],this._cubeDirections=[new We(1,0,0),new We(-1,0,0),new We(0,0,1),new We(0,0,-1),new We(0,1,0),new We(0,-1,0)],this._cubeUps=[new We(0,1,0),new We(0,1,0),new We(0,1,0),new We(0,1,0),new We(0,0,1),new We(0,0,-1)]}updateMatrices(t,e=0){const n=this.camera,i=this.matrix,r=t.distance||n.far;r!==n.far&&(n.far=r,n.updateProjectionMatrix()),Jh.setFromMatrixPosition(t.matrixWorld),n.position.copy(Jh),Kh.copy(n.position),Kh.add(this._cubeDirections[e]),n.up.copy(this._cubeUps[e]),n.lookAt(Kh),n.updateMatrixWorld(),i.makeTranslation(-Jh.x,-Jh.y,-Jh.z),Zh.multiplyMatrices(n.projectionMatrix,n.matrixWorldInverse),this._frustum.setFromProjectionMatrix(Zh)}}class Qh extends Hh{constructor(t,e,n=0,i=2){super(t,e),this.isPointLight=!0,this.type="PointLight",this.distance=n,this.decay=i,this.shadow=new $h}get power(){return 4*this.intensity*Math.PI}set power(t){this.intensity=t/(4*Math.PI)}dispose(){this.shadow.dispose()}copy(t,e){return super.copy(t,e),this.distance=t.distance,this.decay=t.decay,this.shadow=t.shadow.clone(),this}}class tu extends jh{constructor(){super(new Lr(-5,5,5,-5,.5,500)),this.isDirectionalLightShadow=!0}}class eu extends Hh{constructor(t,e){super(t,e),this.isDirectionalLight=!0,this.type="DirectionalLight",this.position.copy(jn.DEFAULT_UP),this.updateMatrix(),this.target=new jn,this.shadow=new tu}dispose(){this.shadow.dispose()}copy(t){return super.copy(t),this.target=t.target.clone(),this.shadow=t.shadow.clone(),this}}class nu extends Hh{constructor(t,e){super(t,e),this.isAmbientLight=!0,this.type="AmbientLight"}}class iu extends Hh{constructor(t,e,n=10,i=10){super(t,e),this.isRectAreaLight=!0,this.type="RectAreaLight",this.width=n,this.height=i}get power(){return this.intensity*this.width*this.height*Math.PI}set power(t){this.intensity=t/(this.width*this.height*Math.PI)}copy(t){return super.copy(t),this.width=t.width,this.height=t.height,this}toJSON(t){const e=super.toJSON(t);return e.object.width=this.width,e.object.height=this.height,e}}class ru{constructor(){this.isSphericalHarmonics3=!0,this.coefficients=[];for(let t=0;t<9;t++)this.coefficients.push(new We)}set(t){for(let e=0;e<9;e++)this.coefficients[e].copy(t[e]);return this}zero(){for(let t=0;t<9;t++)this.coefficients[t].set(0,0,0);return this}getAt(t,e){const n=t.x,i=t.y,r=t.z,s=this.coefficients;return e.copy(s[0]).multiplyScalar(.282095),e.addScaledVector(s[1],.488603*i),e.addScaledVector(s[2],.488603*r),e.addScaledVector(s[3],.488603*n),e.addScaledVector(s[4],n*i*1.092548),e.addScaledVector(s[5],i*r*1.092548),e.addScaledVector(s[6],.315392*(3*r*r-1)),e.addScaledVector(s[7],n*r*1.092548),e.addScaledVector(s[8],.546274*(n*n-i*i)),e}getIrradianceAt(t,e){const n=t.x,i=t.y,r=t.z,s=this.coefficients;return e.copy(s[0]).multiplyScalar(.886227),e.addScaledVector(s[1],1.023328*i),e.addScaledVector(s[2],1.023328*r),e.addScaledVector(s[3],1.023328*n),e.addScaledVector(s[4],.858086*n*i),e.addScaledVector(s[5],.858086*i*r),e.addScaledVector(s[6],.743125*r*r-.247708),e.addScaledVector(s[7],.858086*n*r),e.addScaledVector(s[8],.429043*(n*n-i*i)),e}add(t){for(let e=0;e<9;e++)this.coefficients[e].add(t.coefficients[e]);return this}addScaledSH(t,e){for(let n=0;n<9;n++)this.coefficients[n].addScaledVector(t.coefficients[n],e);return this}scale(t){for(let e=0;e<9;e++)this.coefficients[e].multiplyScalar(t);return this}lerp(t,e){for(let n=0;n<9;n++)this.coefficients[n].lerp(t.coefficients[n],e);return this}equals(t){for(let e=0;e<9;e++)if(!this.coefficients[e].equals(t.coefficients[e]))return!1;return!0}copy(t){return this.set(t.coefficients)}clone(){return(new this.constructor).copy(this)}fromArray(t,e=0){const n=this.coefficients;for(let i=0;i<9;i++)n[i].fromArray(t,e+3*i);return this}toArray(t=[],e=0){const n=this.coefficients;for(let i=0;i<9;i++)n[i].toArray(t,e+3*i);return t}static getBasisAt(t,e){const n=t.x,i=t.y,r=t.z;e[0]=.282095,e[1]=.488603*i,e[2]=.488603*r,e[3]=.488603*n,e[4]=1.092548*n*i,e[5]=1.092548*i*r,e[6]=.315392*(3*r*r-1),e[7]=1.092548*n*r,e[8]=.546274*(n*n-i*i)}}class su extends Hh{constructor(t=new ru,e=1){super(void 0,e),this.isLightProbe=!0,this.sh=t}copy(t){return super.copy(t),this.sh.copy(t.sh),this}fromJSON(t){return this.intensity=t.intensity,this.sh.fromArray(t.sh),this}toJSON(t){const e=super.toJSON(t);return e.object.sh=this.sh.toArray(),e}}class au extends Oh{constructor(t){super(t),this.textures={}}load(t,e,n,i){const r=this,s=new zh(r.manager);s.setPath(r.path),s.setRequestHeader(r.requestHeader),s.setWithCredentials(r.withCredentials),s.load(t,(function(n){try{e(r.parse(JSON.parse(n)))}catch(e){i?i(e):console.error(e),r.manager.itemError(t)}}),n,i)}parse(t){const e=this.textures;function n(t){return void 0===e[t]&&console.warn("THREE.MaterialLoader: Undefined texture",t),e[t]}const i=au.createMaterialFromType(t.type);if(void 0!==t.uuid&&(i.uuid=t.uuid),void 0!==t.name&&(i.name=t.name),void 0!==t.color&&void 0!==i.color&&i.color.setHex(t.color),void 0!==t.roughness&&(i.roughness=t.roughness),void 0!==t.metalness&&(i.metalness=t.metalness),void 0!==t.sheen&&(i.sheen=t.sheen),void 0!==t.sheenColor&&(i.sheenColor=(new ci).setHex(t.sheenColor)),void 0!==t.sheenRoughness&&(i.sheenRoughness=t.sheenRoughness),void 0!==t.emissive&&void 0!==i.emissive&&i.emissive.setHex(t.emissive),void 0!==t.specular&&void 0!==i.specular&&i.specular.setHex(t.specular),void 0!==t.specularIntensity&&(i.specularIntensity=t.specularIntensity),void 0!==t.specularColor&&void 0!==i.specularColor&&i.specularColor.setHex(t.specularColor),void 0!==t.shininess&&(i.shininess=t.shininess),void 0!==t.clearcoat&&(i.clearcoat=t.clearcoat),void 0!==t.clearcoatRoughness&&(i.clearcoatRoughness=t.clearcoatRoughness),void 0!==t.iridescence&&(i.iridescence=t.iridescence),void 0!==t.iridescenceIOR&&(i.iridescenceIOR=t.iridescenceIOR),void 0!==t.iridescenceThicknessRange&&(i.iridescenceThicknessRange=t.iridescenceThicknessRange),void 0!==t.transmission&&(i.transmission=t.transmission),void 0!==t.thickness&&(i.thickness=t.thickness),void 0!==t.attenuationDistance&&(i.attenuationDistance=t.attenuationDistance),void 0!==t.attenuationColor&&void 0!==i.attenuationColor&&i.attenuationColor.setHex(t.attenuationColor),void 0!==t.anisotropy&&(i.anisotropy=t.anisotropy),void 0!==t.anisotropyRotation&&(i.anisotropyRotation=t.anisotropyRotation),void 0!==t.fog&&(i.fog=t.fog),void 0!==t.flatShading&&(i.flatShading=t.flatShading),void 0!==t.blending&&(i.blending=t.blending),void 0!==t.combine&&(i.combine=t.combine),void 0!==t.side&&(i.side=t.side),void 0!==t.shadowSide&&(i.shadowSide=t.shadowSide),void 0!==t.opacity&&(i.opacity=t.opacity),void 0!==t.transparent&&(i.transparent=t.transparent),void 0!==t.alphaTest&&(i.alphaTest=t.alphaTest),void 0!==t.alphaHash&&(i.alphaHash=t.alphaHash),void 0!==t.depthFunc&&(i.depthFunc=t.depthFunc),void 0!==t.depthTest&&(i.depthTest=t.depthTest),void 0!==t.depthWrite&&(i.depthWrite=t.depthWrite),void 0!==t.colorWrite&&(i.colorWrite=t.colorWrite),void 0!==t.blendSrc&&(i.blendSrc=t.blendSrc),void 0!==t.blendDst&&(i.blendDst=t.blendDst),void 0!==t.blendEquation&&(i.blendEquation=t.blendEquation),void 0!==t.blendSrcAlpha&&(i.blendSrcAlpha=t.blendSrcAlpha),void 0!==t.blendDstAlpha&&(i.blendDstAlpha=t.blendDstAlpha),void 0!==t.blendEquationAlpha&&(i.blendEquationAlpha=t.blendEquationAlpha),void 0!==t.blendColor&&void 0!==i.blendColor&&i.blendColor.setHex(t.blendColor),void 0!==t.blendAlpha&&(i.blendAlpha=t.blendAlpha),void 0!==t.stencilWriteMask&&(i.stencilWriteMask=t.stencilWriteMask),void 0!==t.stencilFunc&&(i.stencilFunc=t.stencilFunc),void 0!==t.stencilRef&&(i.stencilRef=t.stencilRef),void 0!==t.stencilFuncMask&&(i.stencilFuncMask=t.stencilFuncMask),void 0!==t.stencilFail&&(i.stencilFail=t.stencilFail),void 0!==t.stencilZFail&&(i.stencilZFail=t.stencilZFail),void 0!==t.stencilZPass&&(i.stencilZPass=t.stencilZPass),void 0!==t.stencilWrite&&(i.stencilWrite=t.stencilWrite),void 0!==t.wireframe&&(i.wireframe=t.wireframe),void 0!==t.wireframeLinewidth&&(i.wireframeLinewidth=t.wireframeLinewidth),void 0!==t.wireframeLinecap&&(i.wireframeLinecap=t.wireframeLinecap),void 0!==t.wireframeLinejoin&&(i.wireframeLinejoin=t.wireframeLinejoin),void 0!==t.rotation&&(i.rotation=t.rotation),void 0!==t.linewidth&&(i.linewidth=t.linewidth),void 0!==t.dashSize&&(i.dashSize=t.dashSize),void 0!==t.gapSize&&(i.gapSize=t.gapSize),void 0!==t.scale&&(i.scale=t.scale),void 0!==t.polygonOffset&&(i.polygonOffset=t.polygonOffset),void 0!==t.polygonOffsetFactor&&(i.polygonOffsetFactor=t.polygonOffsetFactor),void 0!==t.polygonOffsetUnits&&(i.polygonOffsetUnits=t.polygonOffsetUnits),void 0!==t.dithering&&(i.dithering=t.dithering),void 0!==t.alphaToCoverage&&(i.alphaToCoverage=t.alphaToCoverage),void 0!==t.premultipliedAlpha&&(i.premultipliedAlpha=t.premultipliedAlpha),void 0!==t.forceSinglePass&&(i.forceSinglePass=t.forceSinglePass),void 0!==t.visible&&(i.visible=t.visible),void 0!==t.toneMapped&&(i.toneMapped=t.toneMapped),void 0!==t.userData&&(i.userData=t.userData),void 0!==t.vertexColors&&("number"==typeof t.vertexColors?i.vertexColors=t.vertexColors>0:i.vertexColors=t.vertexColors),void 0!==t.uniforms)for(const e in t.uniforms){const r=t.uniforms[e];switch(i.uniforms[e]={},r.type){case"t":i.uniforms[e].value=n(r.value);break;case"c":i.uniforms[e].value=(new ci).setHex(r.value);break;case"v2":i.uniforms[e].value=(new me).fromArray(r.value);break;case"v3":i.uniforms[e].value=(new We).fromArray(r.value);break;case"v4":i.uniforms[e].value=(new Be).fromArray(r.value);break;case"m3":i.uniforms[e].value=(new fe).fromArray(r.value);break;case"m4":i.uniforms[e].value=(new Mn).fromArray(r.value);break;default:i.uniforms[e].value=r.value}}if(void 0!==t.defines&&(i.defines=t.defines),void 0!==t.vertexShader&&(i.vertexShader=t.vertexShader),void 0!==t.fragmentShader&&(i.fragmentShader=t.fragmentShader),void 0!==t.glslVersion&&(i.glslVersion=t.glslVersion),void 0!==t.extensions)for(const e in t.extensions)i.extensions[e]=t.extensions[e];if(void 0!==t.lights&&(i.lights=t.lights),void 0!==t.clipping&&(i.clipping=t.clipping),void 0!==t.size&&(i.size=t.size),void 0!==t.sizeAttenuation&&(i.sizeAttenuation=t.sizeAttenuation),void 0!==t.map&&(i.map=n(t.map)),void 0!==t.matcap&&(i.matcap=n(t.matcap)),void 0!==t.alphaMap&&(i.alphaMap=n(t.alphaMap)),void 0!==t.bumpMap&&(i.bumpMap=n(t.bumpMap)),void 0!==t.bumpScale&&(i.bumpScale=t.bumpScale),void 0!==t.normalMap&&(i.normalMap=n(t.normalMap)),void 0!==t.normalMapType&&(i.normalMapType=t.normalMapType),void 0!==t.normalScale){let e=t.normalScale;!1===Array.isArray(e)&&(e=[e,e]),i.normalScale=(new me).fromArray(e)}return void 0!==t.displacementMap&&(i.displacementMap=n(t.displacementMap)),void 0!==t.displacementScale&&(i.displacementScale=t.displacementScale),void 0!==t.displacementBias&&(i.displacementBias=t.displacementBias),void 0!==t.roughnessMap&&(i.roughnessMap=n(t.roughnessMap)),void 0!==t.metalnessMap&&(i.metalnessMap=n(t.metalnessMap)),void 0!==t.emissiveMap&&(i.emissiveMap=n(t.emissiveMap)),void 0!==t.emissiveIntensity&&(i.emissiveIntensity=t.emissiveIntensity),void 0!==t.specularMap&&(i.specularMap=n(t.specularMap)),void 0!==t.specularIntensityMap&&(i.specularIntensityMap=n(t.specularIntensityMap)),void 0!==t.specularColorMap&&(i.specularColorMap=n(t.specularColorMap)),void 0!==t.envMap&&(i.envMap=n(t.envMap)),void 0!==t.envMapIntensity&&(i.envMapIntensity=t.envMapIntensity),void 0!==t.reflectivity&&(i.reflectivity=t.reflectivity),void 0!==t.refractionRatio&&(i.refractionRatio=t.refractionRatio),void 0!==t.lightMap&&(i.lightMap=n(t.lightMap)),void 0!==t.lightMapIntensity&&(i.lightMapIntensity=t.lightMapIntensity),void 0!==t.aoMap&&(i.aoMap=n(t.aoMap)),void 0!==t.aoMapIntensity&&(i.aoMapIntensity=t.aoMapIntensity),void 0!==t.gradientMap&&(i.gradientMap=n(t.gradientMap)),void 0!==t.clearcoatMap&&(i.clearcoatMap=n(t.clearcoatMap)),void 0!==t.clearcoatRoughnessMap&&(i.clearcoatRoughnessMap=n(t.clearcoatRoughnessMap)),void 0!==t.clearcoatNormalMap&&(i.clearcoatNormalMap=n(t.clearcoatNormalMap)),void 0!==t.clearcoatNormalScale&&(i.clearcoatNormalScale=(new me).fromArray(t.clearcoatNormalScale)),void 0!==t.iridescenceMap&&(i.iridescenceMap=n(t.iridescenceMap)),void 0!==t.iridescenceThicknessMap&&(i.iridescenceThicknessMap=n(t.iridescenceThicknessMap)),void 0!==t.transmissionMap&&(i.transmissionMap=n(t.transmissionMap)),void 0!==t.thicknessMap&&(i.thicknessMap=n(t.thicknessMap)),void 0!==t.anisotropyMap&&(i.anisotropyMap=n(t.anisotropyMap)),void 0!==t.sheenColorMap&&(i.sheenColorMap=n(t.sheenColorMap)),void 0!==t.sheenRoughnessMap&&(i.sheenRoughnessMap=n(t.sheenRoughnessMap)),i}setTextures(t){return this.textures=t,this}static createMaterialFromType(t){return new{ShadowMaterial:ih,SpriteMaterial:lo,RawShaderMaterial:rh,ShaderMaterial:ir,PointsMaterial:wl,MeshPhysicalMaterial:ah,MeshStandardMaterial:sh,MeshPhongMaterial:oh,MeshToonMaterial:lh,MeshNormalMaterial:ch,MeshLambertMaterial:hh,MeshDepthMaterial:Ha,MeshDistanceMaterial:Va,MeshBasicMaterial:pi,MeshMatcapMaterial:uh,LineDashedMaterial:dh,LineBasicMaterial:fl,Material:di}[t]}}class ou{static decodeText(t){if("undefined"!=typeof TextDecoder)return(new TextDecoder).decode(t);let e="";for(let n=0,i=t.length;n0){this.source.connect(this.filters[0]);for(let t=1,e=this.filters.length;t0){this.source.disconnect(this.filters[0]);for(let t=1,e=this.filters.length;t0&&this._mixBufferRegionAdditive(n,i,this._addIndex*e,1,e);for(let t=e,r=e+e;t!==r;++t)if(n[t]!==n[t+e]){a.setValue(n,i);break}}saveOriginalState(){const t=this.binding,e=this.buffer,n=this.valueSize,i=n*this._origIndex;t.getValue(e,i);for(let t=n,r=i;t!==r;++t)e[t]=e[i+t%n];this._setIdentity(),this.cumulativeWeight=0,this.cumulativeWeightAdditive=0}restoreOriginalState(){const t=3*this.valueSize;this.binding.setValue(this.buffer,t)}_setAdditiveIdentityNumeric(){const t=this._addIndex*this.valueSize,e=t+this.valueSize;for(let n=t;n=.5)for(let i=0;i!==r;++i)t[e+i]=t[n+i]}_slerp(t,e,n,i){ke.slerpFlat(t,e,t,e,t,n,i)}_slerpAdditive(t,e,n,i,r){const s=this._workIndex*r;ke.multiplyQuaternionsFlat(t,s,t,e,t,n),ke.slerpFlat(t,e,t,e,t,s,i)}_lerp(t,e,n,i,r){const s=1-i;for(let a=0;a!==r;++a){const r=e+a;t[r]=t[r]*s+t[n+a]*i}}_lerpAdditive(t,e,n,i,r){for(let s=0;s!==r;++s){const r=e+s;t[r]=t[r]+t[n+s]*i}}}const Lu="\\[\\]\\.:\\/",Pu=new RegExp("["+Lu+"]","g"),Iu="[^"+Lu+"]",Uu="[^"+Lu.replace("\\.","")+"]",Du=new RegExp("^"+/((?:WC+[\/:])*)/.source.replace("WC",Iu)+/(WCOD+)?/.source.replace("WCOD",Uu)+/(?:\.(WC+)(?:\[(.+)\])?)?/.source.replace("WC",Iu)+/\.(WC+)(?:\[(.+)\])?/.source.replace("WC",Iu)+"$"),Nu=["material","materials","bones","map"];class Ou{constructor(t,e,n){this.path=e,this.parsedPath=n||Ou.parseTrackName(e),this.node=Ou.findNode(t,this.parsedPath.nodeName),this.rootNode=t,this.getValue=this._getValue_unbound,this.setValue=this._setValue_unbound}static create(t,e,n){return t&&t.isAnimationObjectGroup?new Ou.Composite(t,e,n):new Ou(t,e,n)}static sanitizeNodeName(t){return t.replace(/\s/g,"_").replace(Pu,"")}static parseTrackName(t){const e=Du.exec(t);if(null===e)throw new Error("PropertyBinding: Cannot parse trackName: "+t);const n={nodeName:e[2],objectName:e[3],objectIndex:e[4],propertyName:e[5],propertyIndex:e[6]},i=n.nodeName&&n.nodeName.lastIndexOf(".");if(void 0!==i&&-1!==i){const t=n.nodeName.substring(i+1);-1!==Nu.indexOf(t)&&(n.nodeName=n.nodeName.substring(0,i),n.objectName=t)}if(null===n.propertyName||0===n.propertyName.length)throw new Error("PropertyBinding: can not parse propertyName from trackName: "+t);return n}static findNode(t,e){if(void 0===e||""===e||"."===e||-1===e||e===t.name||e===t.uuid)return t;if(t.skeleton){const n=t.skeleton.getBoneByName(e);if(void 0!==n)return n}if(t.children){const n=function(t){for(let i=0;i0){const t=this._interpolants,e=this._propertyBindings;if(this.blendMode===Ot)for(let n=0,i=t.length;n!==i;++n)t[n].evaluate(s),e[n].accumulateAdditive(a);else for(let n=0,r=t.length;n!==r;++n)t[n].evaluate(s),e[n].accumulate(i,a)}}_updateWeight(t){let e=0;if(this.enabled){e=this.weight;const n=this._weightInterpolant;if(null!==n){const i=n.evaluate(t)[0];e*=i,t>n.parameterPositions[1]&&(this.stopFading(),0===i&&(this.enabled=!1))}}return this._effectiveWeight=e,e}_updateTimeScale(t){let e=0;if(!this.paused){e=this.timeScale;const n=this._timeScaleInterpolant;if(null!==n){e*=n.evaluate(t)[0],t>n.parameterPositions[1]&&(this.stopWarping(),0===e?this.paused=!0:this.timeScale=e)}}return this._effectiveTimeScale=e,e}_updateTime(t){const e=this._clip.duration,n=this.loop;let i=this.time+t,r=this._loopCount;const s=2202===n;if(0===t)return-1===r?i:s&&1==(1&r)?e-i:i;if(2200===n){-1===r&&(this._loopCount=0,this._setEndings(!0,!0,!1));t:{if(i>=e)i=e;else{if(!(i<0)){this.time=i;break t}i=0}this.clampWhenFinished?this.paused=!0:this.enabled=!1,this.time=i,this._mixer.dispatchEvent({type:"finished",action:this,direction:t<0?-1:1})}}else{if(-1===r&&(t>=0?(r=0,this._setEndings(!0,0===this.repetitions,s)):this._setEndings(0===this.repetitions,!0,s)),i>=e||i<0){const n=Math.floor(i/e);i-=e*n,r+=Math.abs(n);const a=this.repetitions-r;if(a<=0)this.clampWhenFinished?this.paused=!0:this.enabled=!1,i=t>0?e:0,this.time=i,this._mixer.dispatchEvent({type:"finished",action:this,direction:t>0?1:-1});else{if(1===a){const e=t<0;this._setEndings(e,!e,s)}else this._setEndings(!1,!1,s);this._loopCount=r,this.time=i,this._mixer.dispatchEvent({type:"loop",action:this,loopDelta:n})}}else this.time=i;if(s&&1==(1&r))return e-i}return i}_setEndings(t,e,n){const i=this._interpolantSettings;n?(i.endingStart=Ut,i.endingEnd=Ut):(i.endingStart=t?this.zeroSlopeAtStart?Ut:It:Dt,i.endingEnd=e?this.zeroSlopeAtEnd?Ut:It:Dt)}_scheduleFading(t,e,n){const i=this._mixer,r=i.time;let s=this._weightInterpolant;null===s&&(s=i._lendControlInterpolant(),this._weightInterpolant=s);const a=s.parameterPositions,o=s.sampleValues;return a[0]=r,o[0]=e,a[1]=r+t,o[1]=n,this}}const Bu=new Float32Array(1);class zu{constructor(t){this.value=t}clone(){return new zu(void 0===this.value.clone?this.value:this.value.clone())}}let Gu=0;function Hu(t,e){return t.distance-e.distance}function Vu(t,e,n,i){if(t.layers.test(e.layers)&&t.raycast(e,n),!0===i){const i=t.children;for(let t=0,r=i.length;t=0;--e)t[e].stop();return this}update(t){t*=this.timeScale;const e=this._actions,n=this._nActiveActions,i=this.time+=t,r=Math.sign(t),s=this._accuIndex^=1;for(let a=0;a!==n;++a){e[a]._update(i,t,r,s)}const a=this._bindings,o=this._nActiveBindings;for(let t=0;t!==o;++t)a[t].apply(s);return this}setTime(t){this.time=0;for(let t=0;t=r){const s=r++,c=t[s];e[c.uuid]=l,t[l]=c,e[o]=s,t[s]=a;for(let t=0,e=i;t!==e;++t){const e=n[t],i=e[s],r=e[l];e[l]=i,e[s]=r}}}this.nCachedObjects_=r}uncache(){const t=this._objects,e=this._indicesByUUID,n=this._bindings,i=n.length;let r=this.nCachedObjects_,s=t.length;for(let a=0,o=arguments.length;a!==o;++a){const o=arguments[a].uuid,l=e[o];if(void 0!==l)if(delete e[o],l0&&(e[a.uuid]=l),t[l]=a,t.pop();for(let t=0,e=i;t!==e;++t){const e=n[t];e[l]=e[r],e.pop()}}}this.nCachedObjects_=r}subscribe_(t,e){const n=this._bindingsIndicesByPath;let i=n[t];const r=this._bindings;if(void 0!==i)return r[i];const s=this._paths,a=this._parsedPaths,o=this._objects,l=o.length,c=this.nCachedObjects_,h=new Array(l);i=r.length,n[t]=i,s.push(t),a.push(e),r.push(h);for(let n=c,i=o.length;n!==i;++n){const i=o[n];h[n]=new Ou(i,t,e)}return h}unsubscribe_(t){const e=this._bindingsIndicesByPath,n=e[t];if(void 0!==n){const i=this._paths,r=this._parsedPaths,s=this._bindings,a=s.length-1,o=s[a];e[t[a]]=n,s[n]=o,s.pop(),r[n]=r[a],r.pop(),i[n]=i[a],i.pop()}}},t.AnimationUtils=vh,t.ArcCurve=Ol,t.ArrayCamera=qa,t.ArrowHelper=class extends jn{constructor(t=new We(0,0,1),e=new We(0,0,0),n=1,i=16776960,r=.2*n,s=.2*r){super(),this.type="ArrowHelper",void 0===ld&&(ld=new Ii,ld.setAttribute("position",new Ti([0,0,0,0,1,0],3)),cd=new sc(0,.5,1,5,1),cd.translate(0,-.5,0)),this.position.copy(e),this.line=new Ml(ld,new fl({color:i,toneMapped:!1})),this.line.matrixAutoUpdate=!1,this.add(this.line),this.cone=new Ji(cd,new pi({color:i,toneMapped:!1})),this.cone.matrixAutoUpdate=!1,this.add(this.cone),this.setDirection(t),this.setLength(n,r,s)}setDirection(t){if(t.y>.99999)this.quaternion.set(0,0,0,1);else if(t.y<-.99999)this.quaternion.set(1,0,0,0);else{od.set(t.z,0,-t.x).normalize();const e=Math.acos(t.y);this.quaternion.setFromAxisAngle(od,e)}}setLength(t,e=.2*t,n=.2*e){this.line.scale.set(1,Math.max(1e-4,t-e),1),this.line.updateMatrix(),this.cone.scale.set(n,e,n),this.cone.position.y=t,this.cone.updateMatrix()}setColor(t){this.line.material.color.set(t),this.cone.material.color.set(t)}copy(t){return super.copy(t,!1),this.line.copy(t.line),this.cone.copy(t.cone),this}dispose(){this.line.geometry.dispose(),this.line.material.dispose(),this.cone.geometry.dispose(),this.cone.material.dispose()}},t.AttachedBindMode=y,t.Audio=Tu,t.AudioAnalyser=class{constructor(t,e=2048){this.analyser=t.context.createAnalyser(),this.analyser.fftSize=e,this.data=new Uint8Array(this.analyser.frequencyBinCount),t.getOutput().connect(this.analyser)}getFrequencyData(){return this.analyser.getByteFrequencyData(this.data),this.data}getAverageFrequency(){let t=0;const e=this.getFrequencyData();for(let n=0;nthis.max.x||t.ythis.max.y)}containsBox(t){return this.min.x<=t.min.x&&t.max.x<=this.max.x&&this.min.y<=t.min.y&&t.max.y<=this.max.y}getParameter(t,e){return e.set((t.x-this.min.x)/(this.max.x-this.min.x),(t.y-this.min.y)/(this.max.y-this.min.y))}intersectsBox(t){return!(t.max.xthis.max.x||t.max.ythis.max.y)}clampPoint(t,e){return e.copy(t).clamp(this.min,this.max)}distanceToPoint(t){return this.clampPoint(t,ku).distanceTo(t)}intersect(t){return this.min.max(t.min),this.max.min(t.max),this.isEmpty()&&this.makeEmpty(),this}union(t){return this.min.min(t.min),this.max.max(t.max),this}translate(t){return this.min.add(t),this.max.add(t),this}equals(t){return t.min.equals(this.min)&&t.max.equals(this.max)}},t.Box3=qe,t.Box3Helper=class extends Tl{constructor(t,e=16776960){const n=new Uint16Array([0,1,1,2,2,3,3,0,4,5,5,6,6,7,7,4,0,4,1,5,2,6,3,7]),i=new Ii;i.setIndex(new Mi(n,1)),i.setAttribute("position",new Ti([1,1,1,-1,1,1,-1,-1,1,1,-1,1,1,1,-1,-1,1,-1,-1,-1,-1,1,-1,-1],3)),super(i,new fl({color:e,toneMapped:!1})),this.box=t,this.type="Box3Helper",this.geometry.computeBoundingSphere()}updateMatrixWorld(t){const e=this.box;e.isEmpty()||(e.getCenter(this.position),e.getSize(this.scale),this.scale.multiplyScalar(.5),super.updateMatrixWorld(t))}dispose(){this.geometry.dispose(),this.material.dispose()}},t.BoxGeometry=$i,t.BoxHelper=class extends Tl{constructor(t,e=16776960){const n=new Uint16Array([0,1,1,2,2,3,3,0,4,5,5,6,6,7,7,4,0,4,1,5,2,6,3,7]),i=new Float32Array(24),r=new Ii;r.setIndex(new Mi(n,1)),r.setAttribute("position",new Mi(i,3)),super(r,new fl({color:e,toneMapped:!1})),this.object=t,this.type="BoxHelper",this.matrixAutoUpdate=!1,this.update()}update(t){if(void 0!==t&&console.warn("THREE.BoxHelper: .update() has no longer arguments."),void 0!==this.object&&ad.setFromObject(this.object),ad.isEmpty())return;const e=ad.min,n=ad.max,i=this.geometry.attributes.position,r=i.array;r[0]=n.x,r[1]=n.y,r[2]=n.z,r[3]=e.x,r[4]=n.y,r[5]=n.z,r[6]=e.x,r[7]=e.y,r[8]=n.z,r[9]=n.x,r[10]=e.y,r[11]=n.z,r[12]=n.x,r[13]=n.y,r[14]=e.z,r[15]=e.x,r[16]=n.y,r[17]=e.z,r[18]=e.x,r[19]=e.y,r[20]=e.z,r[21]=n.x,r[22]=e.y,r[23]=e.z,i.needsUpdate=!0,this.geometry.computeBoundingSphere()}setFromObject(t){return this.object=t,this.update(),this}copy(t,e){return super.copy(t,e),this.object=t.object,this}dispose(){this.geometry.dispose(),this.material.dispose()}},t.BufferAttribute=Mi,t.BufferGeometry=Ii,t.BufferGeometryLoader=cu,t.ByteType=1010,t.Cache=Uh,t.Camera=rr,t.CameraHelper=class extends Tl{constructor(t){const e=new Ii,n=new fl({color:16777215,vertexColors:!0,toneMapped:!1}),i=[],r=[],s={};function a(t,e){o(t),o(e)}function o(t){i.push(0,0,0),r.push(0,0,0),void 0===s[t]&&(s[t]=[]),s[t].push(i.length/3-1)}a("n1","n2"),a("n2","n4"),a("n4","n3"),a("n3","n1"),a("f1","f2"),a("f2","f4"),a("f4","f3"),a("f3","f1"),a("n1","f1"),a("n2","f2"),a("n3","f3"),a("n4","f4"),a("p","n1"),a("p","n2"),a("p","n3"),a("p","n4"),a("u1","u2"),a("u2","u3"),a("u3","u1"),a("c","t"),a("p","c"),a("cn1","cn2"),a("cn3","cn4"),a("cf1","cf2"),a("cf3","cf4"),e.setAttribute("position",new Ti(i,3)),e.setAttribute("color",new Ti(r,3)),super(e,n),this.type="CameraHelper",this.camera=t,this.camera.updateProjectionMatrix&&this.camera.updateProjectionMatrix(),this.matrix=t.matrixWorld,this.matrixAutoUpdate=!1,this.pointMap=s,this.update();const l=new ci(16755200),c=new ci(16711680),h=new ci(43775),u=new ci(16777215),d=new ci(3355443);this.setColors(l,c,h,u,d)}setColors(t,e,n,i,r){const s=this.geometry.getAttribute("color");s.setXYZ(0,t.r,t.g,t.b),s.setXYZ(1,t.r,t.g,t.b),s.setXYZ(2,t.r,t.g,t.b),s.setXYZ(3,t.r,t.g,t.b),s.setXYZ(4,t.r,t.g,t.b),s.setXYZ(5,t.r,t.g,t.b),s.setXYZ(6,t.r,t.g,t.b),s.setXYZ(7,t.r,t.g,t.b),s.setXYZ(8,t.r,t.g,t.b),s.setXYZ(9,t.r,t.g,t.b),s.setXYZ(10,t.r,t.g,t.b),s.setXYZ(11,t.r,t.g,t.b),s.setXYZ(12,t.r,t.g,t.b),s.setXYZ(13,t.r,t.g,t.b),s.setXYZ(14,t.r,t.g,t.b),s.setXYZ(15,t.r,t.g,t.b),s.setXYZ(16,t.r,t.g,t.b),s.setXYZ(17,t.r,t.g,t.b),s.setXYZ(18,t.r,t.g,t.b),s.setXYZ(19,t.r,t.g,t.b),s.setXYZ(20,t.r,t.g,t.b),s.setXYZ(21,t.r,t.g,t.b),s.setXYZ(22,t.r,t.g,t.b),s.setXYZ(23,t.r,t.g,t.b),s.setXYZ(24,e.r,e.g,e.b),s.setXYZ(25,e.r,e.g,e.b),s.setXYZ(26,e.r,e.g,e.b),s.setXYZ(27,e.r,e.g,e.b),s.setXYZ(28,e.r,e.g,e.b),s.setXYZ(29,e.r,e.g,e.b),s.setXYZ(30,e.r,e.g,e.b),s.setXYZ(31,e.r,e.g,e.b),s.setXYZ(32,n.r,n.g,n.b),s.setXYZ(33,n.r,n.g,n.b),s.setXYZ(34,n.r,n.g,n.b),s.setXYZ(35,n.r,n.g,n.b),s.setXYZ(36,n.r,n.g,n.b),s.setXYZ(37,n.r,n.g,n.b),s.setXYZ(38,i.r,i.g,i.b),s.setXYZ(39,i.r,i.g,i.b),s.setXYZ(40,r.r,r.g,r.b),s.setXYZ(41,r.r,r.g,r.b),s.setXYZ(42,r.r,r.g,r.b),s.setXYZ(43,r.r,r.g,r.b),s.setXYZ(44,r.r,r.g,r.b),s.setXYZ(45,r.r,r.g,r.b),s.setXYZ(46,r.r,r.g,r.b),s.setXYZ(47,r.r,r.g,r.b),s.setXYZ(48,r.r,r.g,r.b),s.setXYZ(49,r.r,r.g,r.b),s.needsUpdate=!0}update(){const t=this.geometry,e=this.pointMap;rd.projectionMatrixInverse.copy(this.camera.projectionMatrixInverse),sd("c",e,t,rd,0,0,-1),sd("t",e,t,rd,0,0,1),sd("n1",e,t,rd,-1,-1,-1),sd("n2",e,t,rd,1,-1,-1),sd("n3",e,t,rd,-1,1,-1),sd("n4",e,t,rd,1,1,-1),sd("f1",e,t,rd,-1,-1,1),sd("f2",e,t,rd,1,-1,1),sd("f3",e,t,rd,-1,1,1),sd("f4",e,t,rd,1,1,1),sd("u1",e,t,rd,.7,1.1,-1),sd("u2",e,t,rd,-.7,1.1,-1),sd("u3",e,t,rd,0,2,-1),sd("cf1",e,t,rd,-1,0,1),sd("cf2",e,t,rd,1,0,1),sd("cf3",e,t,rd,0,-1,1),sd("cf4",e,t,rd,0,1,1),sd("cn1",e,t,rd,-1,0,-1),sd("cn2",e,t,rd,1,0,-1),sd("cn3",e,t,rd,0,-1,-1),sd("cn4",e,t,rd,0,1,-1),t.getAttribute("position").needsUpdate=!0}dispose(){this.geometry.dispose(),this.material.dispose()}},t.CanvasTexture=class extends Fe{constructor(t,e,n,i,r,s,a,o,l){super(t,e,n,i,r,s,a,o,l),this.isCanvasTexture=!0,this.needsUpdate=!0}},t.CapsuleGeometry=ic,t.CatmullRomCurve3=Vl,t.CineonToneMapping=g,t.CircleGeometry=rc,t.ClampToEdgeWrapping=C,t.Clock=vu,t.Color=ci,t.ColorKeyframeTrack=Eh,t.ColorManagement=Re,t.CompressedArrayTexture=class extends Ul{constructor(t,e,n,i,r,s){super(t,e,n,r,s),this.isCompressedArrayTexture=!0,this.image.depth=i,this.wrapR=C}},t.CompressedCubeTexture=class extends Ul{constructor(t,e,n){super(void 0,t[0].width,t[0].height,e,n,b),this.isCompressedCubeTexture=!0,this.isCubeTexture=!0,this.image=t}},t.CompressedTexture=Ul,t.CompressedTextureLoader=class extends Oh{constructor(t){super(t)}load(t,e,n,i){const r=this,s=[],a=new Ul,o=new zh(this.manager);o.setPath(this.path),o.setResponseType("arraybuffer"),o.setRequestHeader(this.requestHeader),o.setWithCredentials(r.withCredentials);let l=0;function c(c){o.load(t[c],(function(t){const n=r.parse(t,!0);s[c]={width:n.width,height:n.height,format:n.format,mipmaps:n.mipmaps},l+=1,6===l&&(1===n.mipmapCount&&(a.minFilter=D),a.image=s,a.format=n.format,a.needsUpdate=!0,e&&e(a))}),n,i)}if(Array.isArray(t))for(let e=0,n=t.length;e{e&&e(n),r.manager.itemEnd(t)})).catch((t=>{i&&i(t)})):(setTimeout((function(){e&&e(s),r.manager.itemEnd(t)}),0),s);const a={};a.credentials="anonymous"===this.crossOrigin?"same-origin":"include",a.headers=this.requestHeader;const o=fetch(t,a).then((function(t){return t.blob()})).then((function(t){return createImageBitmap(t,Object.assign(r.options,{colorSpaceConversion:"none"}))})).then((function(n){return Uh.add(t,n),e&&e(n),r.manager.itemEnd(t),n})).catch((function(e){i&&i(e),Uh.remove(t),r.manager.itemError(t),r.manager.itemEnd(t)}));Uh.add(t,o),r.manager.itemStart(t)}},t.ImageLoader=Gh,t.ImageUtils=Ie,t.IncrementStencilOp=7682,t.IncrementWrapStencilOp=34055,t.InstancedBufferAttribute=ko,t.InstancedBufferGeometry=lu,t.InstancedInterleavedBuffer=class extends so{constructor(t,e,n=1){super(t,e),this.isInstancedInterleavedBuffer=!0,this.meshPerAttribute=n}copy(t){return super.copy(t),this.meshPerAttribute=t.meshPerAttribute,this}clone(t){const e=super.clone(t);return e.meshPerAttribute=this.meshPerAttribute,e}toJSON(t){const e=super.toJSON(t);return e.isInstancedInterleavedBuffer=!0,e.meshPerAttribute=this.meshPerAttribute,e}},t.InstancedMesh=Ko,t.Int16BufferAttribute=class extends Mi{constructor(t,e,n){super(new Int16Array(t),e,n)}},t.Int32BufferAttribute=class extends Mi{constructor(t,e,n){super(new Int32Array(t),e,n)}},t.Int8BufferAttribute=class extends Mi{constructor(t,e,n){super(new Int8Array(t),e,n)}},t.IntType=z,t.InterleavedBuffer=so,t.InterleavedBufferAttribute=oo,t.Interpolant=xh,t.InterpolateDiscrete=Ct,t.InterpolateLinear=Lt,t.InterpolateSmooth=Pt,t.InvertStencilOp=5386,t.KeepStencilOp=Yt,t.KeyframeTrack=bh,t.LOD=Ao,t.LatheGeometry=nc,t.Layers=In,t.LessCompare=513,t.LessDepth=2,t.LessEqualCompare=515,t.LessEqualDepth=3,t.LessEqualStencilFunc=515,t.LessStencilFunc=513,t.Light=Hh,t.LightProbe=su,t.Line=Ml,t.Line3=class{constructor(t=new We,e=new We){this.start=t,this.end=e}set(t,e){return this.start.copy(t),this.end.copy(e),this}copy(t){return this.start.copy(t.start),this.end.copy(t.end),this}getCenter(t){return t.addVectors(this.start,this.end).multiplyScalar(.5)}delta(t){return t.subVectors(this.end,this.start)}distanceSq(){return this.start.distanceToSquared(this.end)}distance(){return this.start.distanceTo(this.end)}at(t,e){return this.delta(e).multiplyScalar(t).add(this.start)}closestPointToPointParameter(t,e){Wu.subVectors(t,this.start),Xu.subVectors(this.end,this.start);const n=Xu.dot(Xu);let i=Xu.dot(Wu)/n;return e&&(i=ae(i,0,1)),i}closestPointToPoint(t,e,n){const i=this.closestPointToPointParameter(t,e);return this.delta(n).multiplyScalar(i).add(this.start)}applyMatrix4(t){return this.start.applyMatrix4(t),this.end.applyMatrix4(t),this}equals(t){return t.start.equals(this.start)&&t.end.equals(this.end)}clone(){return(new this.constructor).copy(this)}},t.LineBasicMaterial=fl,t.LineCurve=Yl,t.LineCurve3=Zl,t.LineDashedMaterial=dh,t.LineLoop=El,t.LineSegments=Tl,t.LinearDisplayP3ColorSpace=kt,t.LinearEncoding=Ft,t.LinearFilter=D,t.LinearInterpolant=Mh,t.LinearMipMapLinearFilter=1008,t.LinearMipMapNearestFilter=1007,t.LinearMipmapLinearFilter=O,t.LinearMipmapNearestFilter=N,t.LinearSRGBColorSpace=Ht,t.LinearToneMapping=m,t.LinearTransfer=Wt,t.Loader=Oh,t.LoaderUtils=ou,t.LoadingManager=Dh,t.LoopOnce=2200,t.LoopPingPong=2202,t.LoopRepeat=2201,t.LuminanceAlphaFormat=1025,t.LuminanceFormat=1024,t.MOUSE={LEFT:0,MIDDLE:1,RIGHT:2,ROTATE:0,DOLLY:1,PAN:2},t.Material=di,t.MaterialLoader=au,t.MathUtils=pe,t.Matrix3=fe,t.Matrix4=Mn,t.MaxEquation=104,t.Mesh=Ji,t.MeshBasicMaterial=pi,t.MeshDepthMaterial=Ha,t.MeshDistanceMaterial=Va,t.MeshLambertMaterial=hh,t.MeshMatcapMaterial=uh,t.MeshNormalMaterial=ch,t.MeshPhongMaterial=oh,t.MeshPhysicalMaterial=ah,t.MeshStandardMaterial=sh,t.MeshToonMaterial=lh,t.MinEquation=103,t.MirroredRepeatWrapping=L,t.MixOperation=u,t.MultiplyBlending=4,t.MultiplyOperation=h,t.NearestFilter=P,t.NearestMipMapLinearFilter=1005,t.NearestMipMapNearestFilter=1004,t.NearestMipmapLinearFilter=U,t.NearestMipmapNearestFilter=I,t.NeverCompare=512,t.NeverDepth=0,t.NeverStencilFunc=512,t.NoBlending=0,t.NoColorSpace=zt,t.NoToneMapping=p,t.NormalAnimationBlendMode=Nt,t.NormalBlending=1,t.NotEqualCompare=517,t.NotEqualDepth=7,t.NotEqualStencilFunc=517,t.NumberKeyframeTrack=wh,t.Object3D=jn,t.ObjectLoader=class extends Oh{constructor(t){super(t)}load(t,e,n,i){const r=this,s=""===this.path?ou.extractUrlBase(t):this.path;this.resourcePath=this.resourcePath||s;const a=new zh(this.manager);a.setPath(this.path),a.setRequestHeader(this.requestHeader),a.setWithCredentials(this.withCredentials),a.load(t,(function(n){let s=null;try{s=JSON.parse(n)}catch(e){return void 0!==i&&i(e),void console.error("THREE:ObjectLoader: Can't parse "+t+".",e.message)}const a=s.metadata;if(void 0===a||void 0===a.type||"geometry"===a.type.toLowerCase())return void 0!==i&&i(new Error("THREE.ObjectLoader: Can't load "+t)),void console.error("THREE.ObjectLoader: Can't load "+t);r.parse(s,e)}),n,i)}async loadAsync(t,e){const n=""===this.path?ou.extractUrlBase(t):this.path;this.resourcePath=this.resourcePath||n;const i=new zh(this.manager);i.setPath(this.path),i.setRequestHeader(this.requestHeader),i.setWithCredentials(this.withCredentials);const r=await i.loadAsync(t,e),s=JSON.parse(r),a=s.metadata;if(void 0===a||void 0===a.type||"geometry"===a.type.toLowerCase())throw new Error("THREE.ObjectLoader: Can't load "+t);return await this.parseAsync(s)}parse(t,e){const n=this.parseAnimations(t.animations),i=this.parseShapes(t.shapes),r=this.parseGeometries(t.geometries,i),s=this.parseImages(t.images,(function(){void 0!==e&&e(l)})),a=this.parseTextures(t.textures,s),o=this.parseMaterials(t.materials,a),l=this.parseObject(t.object,r,o,a,n),c=this.parseSkeletons(t.skeletons,l);if(this.bindSkeletons(l,c),void 0!==e){let t=!1;for(const e in s)if(s[e].data instanceof HTMLImageElement){t=!0;break}!1===t&&e(l)}return l}async parseAsync(t){const e=this.parseAnimations(t.animations),n=this.parseShapes(t.shapes),i=this.parseGeometries(t.geometries,n),r=await this.parseImagesAsync(t.images),s=this.parseTextures(t.textures,r),a=this.parseMaterials(t.materials,s),o=this.parseObject(t.object,i,a,s,e),l=this.parseSkeletons(t.skeletons,o);return this.bindSkeletons(o,l),o}parseShapes(t){const e={};if(void 0!==t)for(let n=0,i=t.length;n0){const n=new Dh(e);r=new Gh(n),r.setCrossOrigin(this.crossOrigin);for(let e=0,n=t.length;e0){i=new Gh(this.manager),i.setCrossOrigin(this.crossOrigin);for(let e=0,i=t.length;e{const e=new qe;e.min.fromArray(t.boxMin),e.max.fromArray(t.boxMax);const n=new dn;return n.radius=t.sphereRadius,n.center.fromArray(t.sphereCenter),{boxInitialized:t.boxInitialized,box:e,sphereInitialized:t.sphereInitialized,sphere:n}})),s._maxGeometryCount=t.maxGeometryCount,s._maxVertexCount=t.maxVertexCount,s._maxIndexCount=t.maxIndexCount,s._geometryInitialized=t.geometryInitialized,s._geometryCount=t.geometryCount,s._matricesTexture=h(t.matricesTexture.uuid);break;case"LOD":s=new Ao;break;case"Line":s=new Ml(l(t.geometry),c(t.material));break;case"LineLoop":s=new El(l(t.geometry),c(t.material));break;case"LineSegments":s=new Tl(l(t.geometry),c(t.material));break;case"PointCloud":case"Points":s=new Pl(l(t.geometry),c(t.material));break;case"Sprite":s=new bo(c(t.material));break;case"Group":s=new Ya;break;case"Bone":s=new Bo;break;default:s=new jn}if(s.uuid=t.uuid,void 0!==t.name&&(s.name=t.name),void 0!==t.matrix?(s.matrix.fromArray(t.matrix),void 0!==t.matrixAutoUpdate&&(s.matrixAutoUpdate=t.matrixAutoUpdate),s.matrixAutoUpdate&&s.matrix.decompose(s.position,s.quaternion,s.scale)):(void 0!==t.position&&s.position.fromArray(t.position),void 0!==t.rotation&&s.rotation.fromArray(t.rotation),void 0!==t.quaternion&&s.quaternion.fromArray(t.quaternion),void 0!==t.scale&&s.scale.fromArray(t.scale)),void 0!==t.up&&s.up.fromArray(t.up),void 0!==t.castShadow&&(s.castShadow=t.castShadow),void 0!==t.receiveShadow&&(s.receiveShadow=t.receiveShadow),t.shadow&&(void 0!==t.shadow.bias&&(s.shadow.bias=t.shadow.bias),void 0!==t.shadow.normalBias&&(s.shadow.normalBias=t.shadow.normalBias),void 0!==t.shadow.radius&&(s.shadow.radius=t.shadow.radius),void 0!==t.shadow.mapSize&&s.shadow.mapSize.fromArray(t.shadow.mapSize),void 0!==t.shadow.camera&&(s.shadow.camera=this.parseObject(t.shadow.camera))),void 0!==t.visible&&(s.visible=t.visible),void 0!==t.frustumCulled&&(s.frustumCulled=t.frustumCulled),void 0!==t.renderOrder&&(s.renderOrder=t.renderOrder),void 0!==t.userData&&(s.userData=t.userData),void 0!==t.layers&&(s.layers.mask=t.layers),void 0!==t.children){const a=t.children;for(let t=0;t1)for(let n=0;nNumber.EPSILON){if(l<0&&(n=e[s],o=-o,a=e[r],l=-l),t.ya.y)continue;if(t.y===n.y){if(t.x===n.x)return!0}else{const e=l*(t.x-n.x)-o*(t.y-n.y);if(0===e)return!0;if(e<0)continue;i=!i}}else{if(t.y!==n.y)continue;if(a.x<=t.x&&t.x<=n.x||n.x<=t.x&&t.x<=a.x)return!0}}return i}const n=Gc.isClockWise,i=this.subPaths;if(0===i.length)return[];let r,s,a;const o=[];if(1===i.length)return s=i[0],a=new mc,a.curves=s.curves,o.push(a),o;let l=!n(i[0].getPoints());l=t?!l:l;const c=[],h=[];let u,d,p=[],m=0;h[m]=void 0,p[m]=[];for(let e=0,a=i.length;e1){let t=!1,n=0;for(let t=0,e=h.length;t0&&!1===t&&(p=c)}for(let t=0,e=h.length;t=t.HAVE_CURRENT_DATA&&(this.needsUpdate=!0)}},t.WebGL1Renderer=eo,t.WebGL3DRenderTarget=class extends Ge{constructor(t=1,e=1,n=1,i={}){super(t,e,i),this.isWebGL3DRenderTarget=!0,this.depth=n,this.texture=new Ve(null,t,e,n),this.texture.isRenderTargetTexture=!0}},t.WebGLArrayRenderTarget=class extends Ge{constructor(t=1,e=1,n=1,i={}){super(t,e,i),this.isWebGLArrayRenderTarget=!0,this.depth=n,this.texture=new He(null,t,e,n),this.texture.isRenderTargetTexture=!0}},t.WebGLCoordinateSystem=$t,t.WebGLCubeRenderTarget=cr,t.WebGLMultipleRenderTargets=class extends Ge{constructor(t=1,e=1,n=1,i={}){super(t,e,i),this.isWebGLMultipleRenderTargets=!0;const r=this.texture;this.texture=[];for(let t=0;t

- + + + @@ -46,7 +62,7 @@ function initParticles() { particleGroup = new SPE.Group({ texture: { - value: THREE.TextureLoader().load('./img/smokeparticle.png') + value: new THREE.TextureLoader().load('./img/smokeparticle.png') }, maxParticleCount: 3000 }); diff --git a/examples/multipleEmitters.html b/examples/multipleEmitters.html index 36e9816..8ca5757 100644 --- a/examples/multipleEmitters.html +++ b/examples/multipleEmitters.html @@ -7,7 +7,23 @@

- + + + @@ -53,7 +69,7 @@ function initParticles() { particleGroup = new SPE.Group({ texture: { - value: THREE.TextureLoader().load('./img/smokeparticle.png'), + value: new THREE.TextureLoader().load('./img/smokeparticle.png'), }, maxParticleCount: 3000 }); diff --git a/examples/orbit.html b/examples/orbit.html index ad703d8..1dec495 100644 --- a/examples/orbit.html +++ b/examples/orbit.html @@ -5,7 +5,23 @@ - + + + @@ -41,7 +57,7 @@ function initParticles() { particleGroup = new SPE.Group({ texture: { - value: THREE.TextureLoader().load('./img/smokeparticle.png') + value: new THREE.TextureLoader().load('./img/smokeparticle.png') }, maxParticleCount: 3000 }); diff --git a/examples/pool.html b/examples/pool.html index fd40146..8694663 100644 --- a/examples/pool.html +++ b/examples/pool.html @@ -7,7 +7,23 @@

Click mouse or press any key to trigger an explosion.

- + + + @@ -81,7 +97,7 @@ function initParticles() { particleGroup = new SPE.Group({ texture: { - value: THREE.TextureLoader().load('./img/smokeparticle.png') + value: new THREE.TextureLoader().load('./img/smokeparticle.png') }, blending: THREE.AdditiveBlending, maxParticleCount: 3000 diff --git a/examples/rotation.html b/examples/rotation.html index ca0b0e5..c924152 100644 --- a/examples/rotation.html +++ b/examples/rotation.html @@ -5,7 +5,23 @@ - + + + @@ -40,7 +56,7 @@ function initParticles() { particleGroup = new SPE.Group({ texture: { - value: THREE.TextureLoader().load('./img/smokeparticle.png') + value: new THREE.TextureLoader().load('./img/smokeparticle.png') }, maxParticleCount: 3000 }); diff --git a/examples/runtimeChanging.html b/examples/runtimeChanging.html index a5035fe..3d9adf3 100644 --- a/examples/runtimeChanging.html +++ b/examples/runtimeChanging.html @@ -15,10 +15,27 @@ z-index: 2; } + + + - + @@ -32,7 +49,7 @@ group = new SPE.Group( { // Possible API for animated textures... texture: { - value: THREE.TextureLoader().load( './img/sprite-flame2.jpg' ), + value: new THREE.TextureLoader().load( './img/sprite-flame2.jpg' ), frames: new THREE.Vector2( 8, 4 ), // frameCount: 8, loop: 2 diff --git a/src/core/SPE.Group.js b/src/core/SPE.Group.js index 1e1d585..b9e3349 100644 --- a/src/core/SPE.Group.js +++ b/src/core/SPE.Group.js @@ -284,7 +284,7 @@ SPE.Group.prototype._applyAttributesToGeometry = function() { // // Add the attribute to the geometry if it doesn't already exist. else { - geometry.addAttribute( attr, attribute.bufferAttribute ); + geometry.setAttribute( attr, attribute.bufferAttribute ); } // Mark the attribute as needing an update the next time a frame is rendered. From 74121e26456b5d0938cb5850e8ae687e88e6cb69 Mon Sep 17 00:00:00 2001 From: KellyCode Date: Fri, 21 Feb 2025 17:44:04 -0600 Subject: [PATCH 04/25] adding safe texture loading --- examples/activeMultiplier.html | 309 ++--- examples/basic.html | 275 ++--- examples/clock.html | 341 +++--- examples/clouds.html | 4 +- examples/distributions.html | 3 +- examples/explosion.html | 3 +- examples/fog.html | 3 +- examples/img/Corel Auto-Preserve/bullet.png | Bin 0 -> 662 bytes examples/img/Corel Auto-Preserve/bullet2.png | Bin 0 -> 1800 bytes examples/img/Corel Auto-Preserve/cloud.png | Bin 0 -> 113120 bytes examples/img/Corel Auto-Preserve/cloudSml.png | Bin 0 -> 11119 bytes examples/img/Corel Auto-Preserve/flames.jpg | Bin 0 -> 742500 bytes .../img/Corel Auto-Preserve/shockwave.png | Bin 0 -> 62207 bytes .../img/Corel Auto-Preserve/smokeparticle.png | Bin 0 -> 15427 bytes .../Corel Auto-Preserve/smokeparticle_2.png | Bin 0 -> 31377 bytes .../img/Corel Auto-Preserve/sprite-1x4.jpg | Bin 0 -> 11798 bytes .../img/Corel Auto-Preserve/sprite-2x2.jpg | Bin 0 -> 10990 bytes .../img/Corel Auto-Preserve/sprite-3x3.jpg | Bin 0 -> 39125 bytes .../img/Corel Auto-Preserve/sprite-4x1.jpg | Bin 0 -> 12054 bytes .../img/Corel Auto-Preserve/sprite-flame.jpg | Bin 0 -> 39405 bytes .../img/Corel Auto-Preserve/sprite-flame2.jpg | Bin 0 -> 190868 bytes .../img/Corel Auto-Preserve/sprite-smoke.jpg | Bin 0 -> 112582 bytes examples/img/Corel Auto-Preserve/star.png | Bin 0 -> 8018 bytes examples/img/bullet.png | Bin 662 -> 756 bytes examples/img/bullet2.png | Bin 1800 -> 3073 bytes examples/img/cloud.png | Bin 113120 -> 176101 bytes examples/img/cloudSml.png | Bin 11119 -> 13755 bytes examples/img/flames.jpg | Bin 742500 -> 847922 bytes examples/img/shockwave.png | Bin 62207 -> 63488 bytes examples/img/smokeparticle.png | Bin 15427 -> 29640 bytes examples/img/smokeparticle_2.png | Bin 0 -> 29640 bytes examples/img/sprite-1x4.jpg | Bin 11798 -> 21851 bytes examples/img/sprite-2x2.jpg | Bin 10990 -> 22016 bytes examples/img/sprite-3x3.jpg | Bin 39125 -> 63863 bytes examples/img/sprite-4x1.jpg | Bin 12054 -> 22438 bytes examples/img/sprite-explosion.png | Bin 332684 -> 332684 bytes examples/img/sprite-explosion2.png | Bin 520712 -> 429274 bytes examples/img/sprite-flame.jpg | Bin 39405 -> 181568 bytes examples/img/sprite-flame2.jpg | Bin 190868 -> 217310 bytes examples/img/sprite-smoke.jpg | Bin 112582 -> 224718 bytes examples/img/star.png | Bin 8018 -> 6214 bytes examples/js/safeLoader.js | 58 + examples/js/three_r115/three.min.js | 1037 ++++++++++++++++ examples/js/three_r116/three.min.js | 1048 ++++++++++++++++ examples/js/three_r117/three.min.js | 1054 ++++++++++++++++ examples/js/three_r118/three.min.js | 1064 ++++++++++++++++ examples/js/three_r119/three.min.js | 1070 +++++++++++++++++ examples/mouseFollow.html | 3 +- examples/multipleEmitters.html | 5 +- examples/orbit.html | 3 +- examples/pool.html | 3 +- examples/rotation.html | 5 +- examples/runtimeChanging.html | 5 +- notes.txt | 13 + 54 files changed, 5842 insertions(+), 464 deletions(-) create mode 100644 examples/img/Corel Auto-Preserve/bullet.png create mode 100644 examples/img/Corel Auto-Preserve/bullet2.png create mode 100644 examples/img/Corel Auto-Preserve/cloud.png create mode 100644 examples/img/Corel Auto-Preserve/cloudSml.png create mode 100644 examples/img/Corel Auto-Preserve/flames.jpg create mode 100644 examples/img/Corel Auto-Preserve/shockwave.png create mode 100644 examples/img/Corel Auto-Preserve/smokeparticle.png create mode 100644 examples/img/Corel Auto-Preserve/smokeparticle_2.png create mode 100644 examples/img/Corel Auto-Preserve/sprite-1x4.jpg create mode 100644 examples/img/Corel Auto-Preserve/sprite-2x2.jpg create mode 100644 examples/img/Corel Auto-Preserve/sprite-3x3.jpg create mode 100644 examples/img/Corel Auto-Preserve/sprite-4x1.jpg create mode 100644 examples/img/Corel Auto-Preserve/sprite-flame.jpg create mode 100644 examples/img/Corel Auto-Preserve/sprite-flame2.jpg create mode 100644 examples/img/Corel Auto-Preserve/sprite-smoke.jpg create mode 100644 examples/img/Corel Auto-Preserve/star.png create mode 100644 examples/img/smokeparticle_2.png create mode 100644 examples/js/safeLoader.js create mode 100644 examples/js/three_r115/three.min.js create mode 100644 examples/js/three_r116/three.min.js create mode 100644 examples/js/three_r117/three.min.js create mode 100644 examples/js/three_r118/three.min.js create mode 100644 examples/js/three_r119/three.min.js create mode 100644 notes.txt diff --git a/examples/activeMultiplier.html b/examples/activeMultiplier.html index f1b6b65..567293a 100644 --- a/examples/activeMultiplier.html +++ b/examples/activeMultiplier.html @@ -1,152 +1,161 @@ - - SPE: ActiveMultiplier - - - - -

- -
-

Change value below to change number of particles

-

0 = No particles; 1 = 100% of emitter's particle count

- -
- - - - - - - - - - + + SPE: ActiveMultiplier + + + + +

+ +
+

Change value below to change number of particles

+

0 = No particles; 1 = 100% of emitter's particle count

+ +
+ + + + + + + + + + diff --git a/examples/basic.html b/examples/basic.html index e663cbe..8041bd5 100644 --- a/examples/basic.html +++ b/examples/basic.html @@ -1,137 +1,142 @@ - - SPE: Basic - - - -

- - - - - - - - - - - + + SPE: Basic + + + +

+ + + + + + + + + + diff --git a/examples/clock.html b/examples/clock.html index 31e0c1f..cd2821f 100644 --- a/examples/clock.html +++ b/examples/clock.html @@ -1,170 +1,179 @@ - - SPE: Clock - - - - - - - - - - - - - + + + + + + - + safeLoad(["./img/smokeparticle.png"], allIn) + + function initClock(textures) { + (group = new SPE.Group({ + texture: { + value: textures["./img/smokeparticle.png"], + }, + maxParticleCount: 2000, + })), + (secondHand = new SPE.Emitter({ + particleCount: 500, + maxAge: { + value: 2, + }, + position: { + value: new THREE.Vector3(0, 5, 0), + }, + size: { + value: [0, 1], + }, + color: { + value: [new THREE.Color(0, 0, 1), new THREE.Color(1, 1, 0), new THREE.Color(1, 0, 0)], + }, + opacity: { + value: 1, + }, + rotation: { + axis: new THREE.Vector3(0, 0, 1), + angle: 0, + static: false, + center: new THREE.Vector3(), + }, + direction: -1, + })), + (minuteHand = new SPE.Emitter({ + particleCount: 500, + maxAge: { + value: 2, + }, + position: { + value: new THREE.Vector3(0, 7.5, 0), + }, + size: { + value: [0, 2], + }, + color: { + value: [new THREE.Color(0, 0, 1), new THREE.Color(0, 1, 0), new THREE.Color(0, 1, 1)], + }, + opacity: { + value: 1, + }, + rotation: { + axis: new THREE.Vector3(0, 0, 1), + angle: 0, + static: false, + center: new THREE.Vector3(), + }, + direction: -1, + })), + (hourHand = new SPE.Emitter({ + particleCount: 500, + maxAge: { + value: 2, + }, + position: { + value: new THREE.Vector3(0, 10, 0), + }, + size: { + value: [0, 4], + }, + color: { + value: new THREE.Color(0.5, 0.25, 0.9), + }, + opacity: { + value: 1, + }, + rotation: { + axis: new THREE.Vector3(0, 0, 1), + angle: 0, + static: false, + center: new THREE.Vector3(), + }, + direction: -1, + })); + + group.addEmitter(secondHand); + group.addEmitter(minuteHand); + group.addEmitter(hourHand); + scene.add(group.mesh); + + camera.position.z = 40; + camera.lookAt(scene.position); + + renderer.setSize(window.innerWidth, window.innerHeight); + document.body.appendChild(renderer.domElement); + document.body.appendChild(stats.domElement); + + var date = new Date(Date.now()); + + function preRender() { + var catchUpSeconds = date.getSeconds(), + catchUpMinutes = date.getMinutes(), + catchUpHours = date.getHours() % 12; + + secondHand.rotation.angle = (catchUpSeconds / 60) * Math.PI * 2; + minuteHand.rotation.angle = (catchUpMinutes / 60) * Math.PI * 2; + hourHand.rotation.angle = (catchUpHours / 12) * Math.PI * 2; + } + + function onAnimate() { + date.setTime(Date.now()); + + var seconds = date.getSeconds(), + minutes = date.getMinutes(), + hours = date.getHours() % 12, + fullRotation = Math.PI * 2, + secondAngle = (seconds / 60) * fullRotation, + minuteAngle = (minutes / 60) * fullRotation, + hourAngle = (hours / 12) * fullRotation; + + if (secondAngle !== secondHand.rotation.angle) { + secondHand.rotation.angle = secondAngle; + } + + if (minuteAngle !== minuteHand.rotation.angle) { + minuteHand.rotation.angle = minuteAngle; + } + + if (hourAngle !== hourHand.rotation.angle) { + hourHand.rotation.angle = hourAngle; + } + } + + fixedTimeStep = true; + + preRender(); + animate(); + } + + diff --git a/examples/clouds.html b/examples/clouds.html index ce9e9f3..45cb6b9 100644 --- a/examples/clouds.html +++ b/examples/clouds.html @@ -12,6 +12,7 @@

Examples

activeMultiplier basic clock + clouds distributions explosion fog @@ -23,9 +24,10 @@

Examples

runtimeChanging - + + + diff --git a/examples/explosion.html b/examples/explosion.html index ce91ad9..1e205e1 100644 --- a/examples/explosion.html +++ b/examples/explosion.html @@ -13,6 +13,7 @@

Examples

clock clouds distributions + explosion fog mouseFollow multipleEmitters @@ -22,7 +23,7 @@

Examples

runtimeChanging - + diff --git a/examples/fog.html b/examples/fog.html index 34e99b1..77fc3b9 100644 --- a/examples/fog.html +++ b/examples/fog.html @@ -15,6 +15,7 @@

Examples

clouds distributions explosion + fog mouseFollow multipleEmitters orbit @@ -23,7 +24,7 @@

Examples

runtimeChanging - + diff --git a/examples/img/Corel Auto-Preserve/bullet.png b/examples/img/Corel Auto-Preserve/bullet.png new file mode 100644 index 0000000000000000000000000000000000000000..8310ac5b911b86feae2e3445f08033e5a19924bb GIT binary patch literal 662 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%0A*(L5nOHI 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 pKZeD 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 Ml2Mkfku(PX4>Ny4?EnA( literal 0 HcmV?d00001 diff --git a/examples/img/Corel Auto-Preserve/flames.jpg b/examples/img/Corel Auto-Preserve/flames.jpg new file mode 100644 index 0000000000000000000000000000000000000000..5f36e642d90409033f38502d87700448df9469d0 GIT binary patch literal 742500 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 ew}Qjl^(TV4FvxH5^Y6SqEag} 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

e~A*nDeA7 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�lYHV{SoB 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

i<-ie_W8>To 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 qD@zlgKsnN#_>cqoH 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

AT!=j<6ke^k`i^0ibx4`@1L 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%0D>wQ0uWm5{dSjaL9NO^k#uJR zV_8*zroX7QdT@+8_Cm{fO!~c((t^bisk!NtD!cv~l9gqI2^k9+Cwut*`7cEZia(D^ zI*J)||DCqQ#s_z$=Jqb1lsp7nWV9rW?GKh8c;#bs}h2X-<+)-1YSWyQ{= zu9bnII)Q_bT##dPF#yQJ^|(XXi_h^HGi1!V?#ms`n3#l#R!cYY+f0aAx((U+zjbRr z5&LAHg%J_*n!B;#u|2#Ht?LRIQCk1&Rc2;&ow zV?uyBVq*yaDh4~QzAFG%4;m8B9f*81;W2_;^UHjtn~vl>crVNqdcxmVV*vBPqs@1( zw*Rxj;6HRal8Pj1D|e1L5lwA`iM`HKUR;H*Yc zD`|%9{_xeNbpWicx(F%u7Ps z?NUo~S5`2%qTnV>Vdu^Ol?@z3xAXFiQ%FzZxJ3gzXjJU|j=TRZ6LUPfVXTftAgTd7 z3H}Rce>BC3fA`xJfERwfA~*IoN%H}1Eop79#A3nFnzG+KsGtkzn#KsObHT2WBN zW^LI4;-)L8x~b{_S-(EG0@E%fqUu=!m&+9%_lN%cV#~ee+)P;1_{5TPOC>->`YkK) ze!naJuqfp=DJQ|YfS`Y`wqeQ5M?$V~$2-^qI)$%6LgNEeZ@)&YNsy==$OCh)+sUKC z)DQwgTFW0rLVk#ckdGOb7RSE${m+x1o^%UCNAW`o!00aoXgg#u`z8ej?e<4Rj0H>CJ*C?v?M#lH%VB{t| zc|c&OO)ZBAT;-u#)J#-5wWbKNQOwLX?en>4{MNQ_kZT4`6-d{C(f^^{Xu_SZRU7Lh zdkXpScwC7e(dqU zBDO@=Cf>=O-L`F;Sam68i3tHyc2wJ~lsf~{DlMg&XeNCat-2#gVcIr9;|)_-a+CR1 z3MQ0G1HCL5bHDB0{^v_}5YRjb)i7NFNDC4r0UC=S*4wsw3T|{j8WWihEg@RZZ=03` zs53DD17k~ICRVY{Wo?ICZ&1=W>z)`>-Ht8BfYsF0h5osjcYt;j#FE&IYC#4B@Zg(f z!-REja6R7l-NyrSX0ooJ8K1U79{j7o?D@;th6`IR->8RayqNwy_Ks-y0H)n9pz;u= zow|QKlg^Z!96;P+_xpYj00u75VO^j$)qP#n`&tcrTvRlo;iM^3PBkA@;=1Ebg( zgQJhShmz`UIk5m^h6SuDwAr=|ZnvAe!H7=XdW*x7wzoa0Wnc^Iq^WelFw^RR$7b`I@B`0H&53qH=A3-dF=T=(Gm4M$Q0AS5sK+ZJrCb)^O_4kKAYMd0mg>(@o~ zSKL6Ejzy#5V!j|z??cNBM8d0(yc87a^+U)|&4{$L$SmeCuBq$q7>P`a!>(o%vc0e52s_!=_Oce_bo{12Yr*3rfKYYy~BfBoGMZ+e?9c-n^y4@7KAf{A!Dy zxtXJon_buroI4wLbY*6H4VX}qlnG#Mht2R1U*C#pBXCN}?pxf}%oLdwt8`Sg2M~$d z+D#&`sQ{`dhhAEQ&n+c;OI`OhPQOUmT?F5Te~#JugYO zDKV+*K;^~r!#*R@opA-uFt?9v0)7YxIKFsm7ia%%9_ZfE57fl&0Yo@W9K!JZTL>iq zllaNkswu7!aGEF$trHo|773}Pv+ABXFWDW1to6@fwG}%TM1-W~8&*IPB=@{4TWK`q zlweij5bHtZO0ey_#!G`lYiZFbYDPk8eU=7vm0+tx7FwQj4gmykW1d91jN#xgV2|rLCXo?3pBH{FG1o#ER?G#=Gls z8!2eEKA#r~e2EkA!#aR?`0e#Yu|nUvi|3D9YFjwQ6K{g}MzlEh=JD3qj!u+xGA-p_BsmyQmC>0k{vuC^b|;fXdk2?h!;X5RbVI)Nc$cZu3+G$cV6; zM?aEx0M>H5vyMq&3j=0ZqnSn8C0}F=&=$I?j9cEP#fxcLk|yQoJxvveB+SM99le;T z0#BMPGsdi~9Zx8Q%qZdUdglHHr?>(RtiMbd3K5Ljd_n@Ocp%txeE)$VINy%7xuE+T z;Y{XxR#@f$;&(3quX_FYJDvKfXJHMM>%jmdR>ZS!6WeaF`7RQ`kObxSwqHM3D@+s~ za9bOhr4$l2hZjwDwOh#!o>)YykxkMC6g&KQ2yW{vX1 z5y+dlnRGno1dzi1n!$~MTfwO0e0`tQF}II}dxs&rg$lRooH+GzO5H7c#vf#$O7JKT z7X?Mf-S`2fB<-OAja10D0i_lwo3!vTp3EY)SohaJBJ+)hj0k(t~d!5p(khtd$)Dh>1HLsJ2s!)588nMWy=s*{jf)d})M>CyH9BBCer0 z9^%(;?vMEX{nQR%ECPpIK|b3Ji~@#U#1d_^8;AuCI3Y@#%NnfVbWIjrx{nMYTFd}S zi}bcVa^WI6euTigufaoq33ER~4#;%Q%`1SIU`?xAi0@?=?!wwkD2zH>)F4A_u^%ev zk?((h+~Iz^JN>xUJ%E_@Fr&YIW&Npv~Hz+}dQ*Sun7AAn0qUjrN;Cx(ra< zMqZWbI2U%mD^&zFCkyv<$ZL(xwAp@ajvsnkg$o?>w5PxN& zpyXl$Ko}a^x}euN0+Dg40<<1ZMWZrpa^|I^A%1gdvFx% z%u=vsF<&1Y4SpFS&?{76x8-^PG{nePABu!M6k^?6j~Z$OcYEc^!u*TXI7^$E$fBZ^ zTY$p*HVZ2tP|x}5uDg-(CwlR87+b_`IJxh?9d<7wnjUP1v?(Q6mj!YbIsG)ybW!FE zjD!M`5kpP2lf_asHlYNOCR-~aJ9XP^(EPzvd-g&_qs+3e<%mcM2B6543(IH*r3*AQ z2Pe6*jl;oS^xN7`xDMuA<<9i z0AfbKv+6aANE)3@`2<}vv*WQw>d5xKva&ohhTC03s z=?HRBk@c$u#Mq&d7Q84uTbz87b|(J022|bXz)j%OSd6T8Z}#z%Zla=1{(Ic|wmxl# z*)#^vXuxp{82|Su-E8bOk~t+a;&VF`BO zz|f`d97YWuKCl1|T23D#N=r%Xj=i{~j-427$RUB7ix}E$<{wNfD=_N_l*O2n#9V>F*DfJPT7NBC+-AsVOomco-YpE>Vp4y7{D2~{{Wh#V-Yy}cg-$|^ri}j z*A;L_Kr(6xVsWw?z>`~{-42pVs4BQhe&hPi-&%YNsc=p>ySJd*T&cYj6FYH;i2)W} z$0Z9sZOTDRLihDmWhKZ&aDUw4aewIi+%^C*zO?8wA;6Hfv?i_zlvr#QS_X{S&skV* zR?|CBRl^QyxsP5XWzdlB0vpy~1vIwW1zP(Lf$1TT*LBs%k)|n!^+ocj>I} ze-Fk)YJggFjYoR;JBskh+RdT?l_*BGQss&Cw{z=F9r5&;+b@6J2JaUK0i9^|ULl}! zKf$mLu!CkdBXDF%wM3qN9fs2nweuSY48AU<1>2g)tia+LZ}c>S{=0f>d>d8d_8b$hZkvD%Qr33$3_QTmxatU5YeZ1qjr`pnXo}#uO8Z^(Pbo z7u80{x9$zvHYe`wS#!1oh*pp^a6qhOCvUR{|9@l!{s$tDeGk)N*j2#ioPh41Vh91n z#zpzs4Us8gjrmv*KuqT zw;_g_D`3UmyD*8jpLGJ!AOE;g`@iH#SZ%4%k9SqqDJ3iWT+UScqBoLzkNUoBsyW z^D#HUQRVj4#2)^=I)HeP7(bpP#H?$wY2{^L*YeA4ZiXFa?_FFGMhw6`+dEhiohfI8 z83XtbC-!GHs_1QRbY%A%;Hueur4^)F0GG9OELE6ncCZ_p4fLRD0no#>@5N=YO{&U( zi}~tRZToB6c?aD*nFLyaKfx^|D0HtPi8ZBM)VY(n8z**8#8Qi_U5!CaRr&KN?C-58 zklS-d;|_bD&zPk(5V%a>g*smB8nPN~onrfeI5^ZVx#odQ_#;r zLxSO(&E2p&PR2?5|E<`6KZOW{Pnv>ms$Gl z>A@q-NCKgMpyaUP(V@s?wMr4Awu-avLNpWAi=0q^5hzuleFqMRyBVEC1RQ|?D9dPp>|GC% z+NP245TaGK>kC4#YusE|k?l<|!`v_K_uGKj8B$Niu>z&8KjURG zrdTnb-^$Ns`2Lwr&fI)8i08K~0NzgFtAC$5bI+(~>uv`O3_~+ljNs2$WQI!JRq5~{ z*LZ6Vpkl}5Vst^0^XEzDX`Ri*Qas-1Aw~?9-_F#v^+pt8MsNG~vO9m?DZJP^AJm_l zwavG}Wok4xHw|x$v-$#~vT_B|0_5ztN}V#282#oK;^yjdSpd+`atd~P!6K+J({|g?QhR6pRumObr z^JIiV1@fL@&8x2mV^UM2OS8KMn=;T3NDb0q>WhHg0?!yA6EB$l%(Abht&=;WtT)~OKReUk=@R{|3&08d7eJEE4P~Yj3=(lX z@kpN{u6k0M7kl!u8-o`+bXq$WpEpN`-EbQ?Maf`=}D^4l|wCa0Mn`D-Uow?t-1fHJE zvg~h96{{~tqORyz5oqhV77WWlH92Ad^7GYBS!o*=Fdj!`s0uDNQ&5@$x5qUew_881 zu*s}B0$_~IO?X}i(l@UJzcmK%v;`V4fGOfRR&n3bJ!e&U6(1s%Slg60Tnv{WM=?Iuq={# zFp_|{x$?TanH$jQSO5s8-)PBPg;P%!)vf%7k(oCFW>NUV0sXf^Q$W_9G!$4!t&rMB z9D`q*IcZ!s%06!7W7v7~6(3+{=sK=$N~d$V<`ZR>Z=5} zR3W+~NCH|i02}C2892+~ua#U2P^rzY*8WG3tWb%ebUyD!X|yF4b83g*UuRV&B2({Q zSOv2vRd4|BID%NGy9p`G#JX-QRl-)0Wh6?tv?3F3{=~_@zl{OW4jwTp(MbSKd(UHt zsIO=BmTsV<-1?QOyuJ!^JRoxY2|8S$8!J!9IlYbmbXYXn14kh{!TGZF#i7wivLp!Zn(Q5QtBnDaMQv%UO#K*`d}0m&fNC>rBwIli!@mS01>dQ5%qz0V@^o21xVz85}D1Fai?kk2GuR+LKnv!OyyQf z1xLho23**9VSp$@Rm*!kDiIa1q^V4~0(0^XV6=yipB*L?5|M3a zAbGYV^TgaG_4eH`G6uuyIBtnrr#Rg5uO9w!Tpj!Zj((TlXaE1>*MO(;-(b!NP1bYf zujW!s2k08-dL}RGOg=+Zj{wu?;yW6W%v_2PLy}8aDay^W_{7*4fdHn~NBf%Cx&TY6 zAtJX4i;-t0n~kB9wyjuU^^lXuou{g4JBSYGb=?s|4+0t;IrnKxQMT(_1qIT`R-;uM zwZX=W)ZQ0k4;o3x#sg$*Jem`WIKzWtQ9NcAH2XEI;j?nW&(J;U#n2`B4qaf^>2MnZ z+VgM>3H=tg^uKlu_|YF46Q2Iv{_j(_LW#2ASywTg@xt~X`r<#^0e4bheXxwP?!p>v zwLL9n^ekY83eA|)Og_AA50c$jpq#s}uElMYWoS9+7NDp|NjdO#>jEqGAmSe<_*e#B zNJ9446V`+-bdvN9m+{)6GUVUbhbE2g-g_&W$Oj>CW68mzk|J(&d=}=r{gZp{7yPyS+}r;{U*u)nB>Di%+N>F}I`RQ#ubsoq z9i_mKz-hmZIVz#Y4xAheH5OHH%`MB-W!P_Hs=6v{Ew4CGQM=uNAakCu=q!wqLNX6D zkdfmqzgdC_wpM{LL)EUu{S1PI7N!hP15-{x&xFa5aRl_0ryb;qw(^s-9s#!!6#}c1k1`TOhIC;*+)F z7%yfc3xtCj3rGAFS(@>%dWfuzAF*%*6=uvdczRXO)_wHCwr{Wl|J7Q7<;R?Vc6#os zxZu~X~++l z#cav4U%p-zU4T0V#YEjRbJDSJC+L%khtC((&fM^Ts1ukz8^h+Pvjz_U>vUE85wH$_ zJfQd6f`DgT!z)w&j2-ptzdv;Np|!4&g_y>}9>_%YK*_u<78*0NRF}@`4DGEwiL5!^ z_&hwAv5?5F-FWN6$YcZ~<4f?+(sHi>u$$TlMTTL-*I_{(UB_j&BlTZDsx!MN>^P~p z9X9)hgaHm9+-YIAP|?ZA*6r#!I!f`u3NGRaXZX)YZuj5e@c;M%@Ty-RPxiFXlyeCJ ze}53^j33-g%+Uz+y_w@Ib1)K&%_;MQ&3UuwSx3Z9-Rynb8 z9oOxo84py{SZJczr}F^9%x+G|6j6C*sLZf1LZt$j*TcBv?mUo=V-&Xl4RPPD-D|XN z#Ee#&TJIcZzKR*I%BZav2 zYxM|5&pOSxHRdNif$!p7e+s~p(MXLI`P>TdN30*8?QJ8S*Jf{9`*mId`eBP3&2g@7 zn)M(pRhMGm=0P9Vb0bJO127{s+Dtwyg(iY#9$f}O&a3lyyrqF)SPxdfDtQPz9&|NJ zwMZ-nFhc|z3hL<`f+@H@n1nb@ndsft8oMOkeib-&5uWtx6+0M&1betR&OCcg-b=sY z-|6)Ki~=x(CmmLEBjf8?)x`-pvA6e%DkoLA zp^gsz?f0AIWyd%3y(udFF_d55#1_&6_ zT4!zFD|6rTmXSYn^FIR?A>{W+^EU+me$^4+G=T95Iq2KYU-%s5?eyDi?KZz5dLrOxr) zVTr*d;-kjF6s!~Hp6&pfTbhZDplK2gm*bgh^T9K-??z@|ZR`j~ZGpvsjq>dg1fCVr zbh2uibzLtZ{r`fwzq{mq*V%qXDg9>0ALqp<3SZ((dZsPlVMZO-T!*xpK_t`tT!T*C zGYx_RPz1mZY)BfuW^@IH9(@-t0h$7lotTG)=q#AL2jkB;{GBnTE!w4b9m2qqID7x% zpHGVnPCC%xS&HE3({=H0e)xY|5Rg9ks2?1(hcm1BdO*)#*>VbfDI`5njZq zgWayIYmHH&%{ufOxV!zL;i)tJl6?<6r253Yy@zw+`#;Oqc5?*JJH6gHm{0%ww21tJ zR{q~oDE<_H5BzenPL!2$Uj({{a=_^=KhBkBDz-Bq67ms!W^XjK#g8ecJ=SaL69iB#OZtZT~V}nk8BToK&_F0$1l z{{K1<@MmBR-E2Pm`Qd>W1TyV^!>Q}=CyIVJan(=Fz zZsFb606nf?fa93MaMS`E8HR^K2j`AWOK^kRB=BN=G;)^;PFw&qcL9}fl15Al1~%zK6Q zwOjqQlR3404?2PW(&7Kp0lYK+yZR3X6A5a}Hox@(@_t~GantaBgen@d?t#y5b6J(a z!MtM}0iNBs-EFQeNA4;#b5b5|_V_bDbIi5(=eU^CUML2} zfE$%;u{hY@6Sf{605_f(UySqrX#MrVr~K(D>yv?2Al=x$l$Zp)=Z-x4wmHtPN~kshxXXncZOx?egEwJ z9Sd2v&;QOTyX|{FC;R-HSA%~Fz&pTE_htoR$#@fH# zUUIGpAXry4BAEG3hh)Z}(Ot>kHwo?Sis0-(J?8@av-bYIG2?0X@E@2A{uF>$9)t<_ zbT-ExT4Tm(>;I2m8^z)=EFzwKpU5=yp@dJ0!*FQ3Z9&9IFu;?OuEOQAfpHi4`r|0@ o3J~~Diolpp_+LHz0093#0Dryk^32RvbN~PV07*qoM6N<$f}B*gzyJUM literal 0 HcmV?d00001 diff --git a/examples/img/Corel Auto-Preserve/smokeparticle.png b/examples/img/Corel Auto-Preserve/smokeparticle.png new file mode 100644 index 0000000000000000000000000000000000000000..7bad8c685f636179ff1ce401869188bae2d2225a GIT binary patch literal 15427 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 literal 0 HcmV?d00001 diff --git a/examples/img/Corel Auto-Preserve/smokeparticle_2.png b/examples/img/Corel Auto-Preserve/smokeparticle_2.png new file mode 100644 index 0000000000000000000000000000000000000000..723d87ed2edd4f01f1be9111797e5fb16e2db7c1 GIT binary patch literal 31377 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 literal 0 HcmV?d00001 diff --git a/examples/img/Corel Auto-Preserve/sprite-1x4.jpg b/examples/img/Corel Auto-Preserve/sprite-1x4.jpg new file mode 100644 index 0000000000000000000000000000000000000000..38e9dc3fc052bbf28441a61258f321d416d1fa15 GIT binary patch literal 11798 zcmbVy1z1&Gx9-}(X4BoZ>F!3QJES|LrMnvhL_!+r21!AXR!IRxK{^B^rBtL95boak z|KInWbMNu~&lwNAyladx=Nx0qxz?U@ZLa68R{?T`07rWOP*LFk;K1K<{TU#T_qA~j z1V8{3skQ}x>osg66*;*(S~{AFD(VUV2m}Dw%Ic18?qGZXaCP(X(ovE{7#W)&&_@9< zfC0b&egLqt@%GTrRn$Xut)d`@@J2fQJq)sU;B*Fs05Hj|tc5`Q!}gz00viu69{>Pp zA)N(n?YwP}JQ~Se{Czx7`fo^1Z0(HVU{oH&UdRBEoE*jP{^nf2e13Cj6t{JCL*@%c z#q440YK!6nNFL|sYlq|zbtI4VbF}kE@+l-|a`AO_MDp)QPV8!DUF>{( zxV5ZooUOcU5pwRX9#(FF$cg!tGpZFph^j3DS!5A@aS;)20Ul)e|B^o%|ML1XLCx)N zk0b40a|R-P`?v1zwtwr~O94Ra1X-Juzjf9*0MHf#0OSjQ>zIlG052K)<5Fl(y_C*^Rjb84rPE`WsYulk<;yF>*(X??uKx5`=4g` zf7$FGF`(%0b&VuM^umFfzA<_c+Yu?l`3;@)fXGpj8d)*^B z(*6to3xJc6mtb$ly9kt8PDc-6ddf1!w>!fCmr*6aX#22(SU%fB+y0+yJBj z1wa+h1oQx7zyh!V8~|6q3-AX*fJh(~NB~lROduC10?L7E;0e$Kv;oh7USJRy0p0`C zzz1Lj*aY@~Z@?*V0Rn;0K{y~H5Cw=1#0=sD34p{vk{|_;I!Fg(46+2>1-XHIK_Q@f zpaf7FC>K-$ss=p;b%1(7uR-IWdC)3o2XqKJ2SdQvU}7*0m<7xW76Z$G)xdgSbMRfT zCpZWk4SopD2A6{Cz^&k3@CbMsyaL_>pFjWz7K9W+58;N0LF6Es5EF4(D*`JUs}XA$YZdDUHX$|#wj8z@wlDTW?8n$W*z?#&I5;>gIMO&K zI6gQJajJ3pah7qu;}YTW;Hu!-;)dhq;kM#V;C{u!z+=Xf!Lz^%!pp*I#v8-?jE{lO zf-i?}g&&5Whu?uei+@5uM8Hp=N#IJ5NKixYnqZp{osfl4fzXyPny`$ppKzTBLc~ZU zM`S~EkEopJ711U!jF^>Jh1iKWfw-P{l=vG7A&C%)0Z9N!9?1)m6;cQ(3#kgJ3u!WG z6X^`;IT;O^44EC-1F|P%6J%%PROHg+cI5Ho4dm10=M)GE1qx@1REjo=B}ynI2c21E6UGQ#8fw^Y^dU?ny412!PFeoI@H0`Wz=t}PiSaqlxRF?a%lQ#KGTxYO4B;g zX3)N*-Jv6*lcaN`%b@F~+eMHdWDqWhY{UTK8$C6>GQBT-3H>Pj1p_OCK0_2k1H%#{ zCZiamJ!1xAALBPBIwlRK5T;tD1!fFpF=hwmN6bUaXDqBNhAj74+E}(($yrrcgIH@> z7uj&wq}V*!O4+8^VeDe;&g=#3?>WF6!W<49c^qS$U``QEN6rGyaV|72aV|HmQm$EU zY;GBDKki!YRUT3vb)G1mHlDA%OuQz%sk}qHSA4>JE_~&DANUFRRr#a%JNXX^{?1T!1=7foaHH7aA_X+SVsk^2vJ1w#c5zNyvrD^~giymE_~)M->Pa z^c8XymK7Nk?<&?Rep3=w3Rdb-MpIT(PF0>&p;56>saE->DykZ)I-rKFrmL2#wx-UZ z?xo(T0oG8}NY_}r&3xPKcAF-ksiK*#xunIa<*C)B4b#@r&eQ&+!><#fGo(wTdq=lM z_f$_-FIn${KAXO;exCuJftf+I!I`1FVVdEJ5wB6G(TFjnv7>Rj3A%}aNu|k&se);y z>86>mS*+QNIjebq`D+VG3m1zQcku35-D$Q&voy4v?{eau~xCpxBg}$XY


OU7-R?t-+)TaoW%G^k zUG0P^))&qg z9v!|Jp%hUSi5ck}`7VktDlO{xp5eXDXqxDV==B(-nA%v}Sg+XG`#0_v#X;j7<3=9{ zKFE1+6>l5=CV?*@E8#NHCh<)Ye^PeR^+WrIqsb!4g(mH& z)(k{Oe8zF+oy^x+LRm$RFdz9oTFF+=ZqH%LNy)j)b;zC0lg(?$r_O(ne^y{yFi|L7 z_@s!YD52=Q*s*x7M5&~;l%+JQ3|8h>_Nm;Ue5gXKqPmi@GNJP4W4FgERXSAz)uPqa zHPki9wcuLc+MPPHy7%?+_3cl%pOiF^HY79xjlPY$Pc5I$G^sW9HH$SrdB*%KzlEqJ zz7^CO*!r!_p>3tzxP81swWF`|MrTVGPuJt;^w0BNki1BKiTN`6<#l&Z_eqaO&*$E| zz3Y8<`abj<^-m3G4~)K2do?_$IM_cVGt@nNYxwzViPs%(#NM=xh>Wzp6@J_DPWWBR zsK{vRnCMvhd-3<3<2T1&PDoAkPRdUXPN__dOy8a!pV6P0n>CwVnX{eSo_Co)Snyl8 z_z#nIzqq2s<2t&`M8C}b$^NtRO6_X#+V%SS`YXU9W9x2h2iW!?_W~dY zKmvupFmV8Y1i1&Ny9EF&qX57|eEk84Mjkupp-0 z4hDb-2#5dx6M!HDpz8q;0=ex0p`kiQX7F2}AT$^{90LNzL@NKg4f4wd24UhO^Mydb z5R8Afgn*%Fd>|M?5FM~27J+*Z@Dma-3JH^nk|2izA$K1bP#iecuOX0E1WSSAx#Xk{N_0>t79Fdo8Bz+EHbqujZu)<&*SNVSDze{ybp;lA%M&q4IKu@ zgronXA9{X5Gz1^AA5Smo$W#UaBFmDey|UJQ#5z$;6O7*Xn0#O!-wx86Gf0HTS4#!u zbZv-`d7;9Ep#3XrWJTzak??)9@&eUI4HmAY{291jq?q$JISU zotFM6WE?5=&pt&UeW1xTl7*i~Xl^IhQM53_yQ+wumb zF*|~rYECTT&Nr}HEoP?LbUGcP)OkTkj7+5nWXNlb9k-gJqx)i5_=9}s0Ep#T z+>}iO@V2S0|5?yj^LM#KF`aqXtTgbife1I$zRf_DgL(_mBD|O0LoKvY&*E9 z2gUv%AeKiTNA~u%&XiG3==zRVKPEf6g`GnlYeXOwu*m_@WKAcx(@odzt(mqrKHEqo zM5yue?VRab(|JZB-8Ws9x!wm;rAs3XfS*O;@kpWHT{7pld75G2C>K*cfY#d#;Ev=RO1cJ*|pU9;ARZd}b zRc9GfJS-*DFEl0)8}Mv8Pw1-Qz}0coPSpu0y!qv}!M?V?FQS5`ec5%S*DF{$UQOHI zXT2^@MSYVxthK;OT`I>leY6&lF=f6aTa*u`?(#VZ8tF3YYWWu|?lfikRw(Pca8m!! z&AjL?sfAFIBon6z)!wWUM+i}||jhe${fMRGkx)F^_PyhcE^jcy)4o2%>M&70|d{&&oSjlUk`FP^Jim=6i>x|4&AXXGby--(P64032J|z0e;Q~{?+1TudC*~& zm-+hNkelvYv+1%zjL}hDsNRQ$KjA8n{W{jhioGf?x6EpzB9n%KHKDg%duCl*RG2AR zq5agVzufDF7P6qCLcM}+SEkIp%42mh1qbgpywwWQrZnEk=4FGa#XWX{{u%^1+~V1b zdS{E-7RMc_(A8_e)IeckqB^$9J|KBkFKoY8)Q;DFHY0d_41Bf+Yt{HMPFG)Nko2&e zo>9{|{8tenzlxYZZpdtU@x^7=JB32wThq+u7dM;3WOO%!Pf~2({5IY0WF?uA;i)SQ zO4OOT(|Y)>Wp~_qRBfQCqMvD0tD{)SDSF5EsbY7&Z^6%5S*1xDL#0O8yT_BeZ!~tZ zt1xexe|3JHc50tcOhO#Z+klPxobQI^UrXZG;;3fV`ReyDPmAYkp3fLZ(oiY}#~6ED zzO~qVsKU}T2?o1B)o?YJA+6tIPXDT|&J>-8i{3(;D}lmQ3iQZp&rcfVm0m6wu0j3e z;Ucpv`FfX?rC)c6kLL(CKRiyDF<;nRdh#2Vw^a3N>#->JJlzNmPlheLYvW~v_`dIY z&M1%#(|T1W^wctC54RtuLwcWPTBn*-B=Lx-wqXa_NF62F3#Ri&-MH7u`>*1G!7wTC zH|w*qqOUPq=3ssXjP16{#1dhaZjtcMW4Vc!?suh5@4izE6KyWqf1~WQ+MpOOQkkaj zCt~O#xC-~Rg6Jf11dc6Bm0o={$284N!;s|g_vWr|+0{aPKYFJ+_AkqXrRd|>&k9Rq_eaSQ1TZ%p6B<%}wh+{a^h^OowEyL}fB-3|%pIV_h$5u4b z9x_p}ndHufAbA;T6Cfj553aOd_AGW*R#x}3cu=-xLA%8ZqoM?xkXaTyYLJsK@BbKh zA0EkFugv5Wul)Fo{Tld0^JD62Q|hw6TOw8DJ5T*(r0EZE+aa3!2Ij|Ml5U<|XMM?n zmQsmcTC={k&5AlobDmqcU88;(K1+}$VZ(Q_Z6EMo_&NwDg;KU?{}8ElY*VIsrsQVQ zwwa+UWQgSp-z%MD`uKd!nOPBPu3_q|Ct{$XXY$ErpIPzP^#$d6tGLt0M^Ls1hp$uu zrNtBOh&<^;_##J{AWodvp8e^EO5j-kT~_@Mb(MD<>$n`yA03~!igS7i+sKbo7qk|H zQrD^K!pR1&zQ(ZZ%GMY(Pq*o7J$%FAHmIZz(NW4@@S5)C?Xq{W;@;gS!Ht`Ip5y5z zUN4`%{+2TwVQ?k=uYA926DcPMep0wM5L$GwU1lcfT}Y^tIVygYT6fj`=>yv}P$j=7 znrTkCdbFjsA-_%K@VLNLEyuWC`v9}9IDq9d5gvtPP;kW@>7-ld(aw3vVWwhR;L%x; ztX_TTBYZ$J>R(Sz$gg#4*+h)h1CK8iNiD2d2-h;Q!AmiXBr`QX>qQhcr*v{%0}rz^ zCU-f)_O!K`az|1hd>VUv;Ch)kNw_$axp*E<`th|nKlj@}^RYzkwp_^4kRzxsGH5WQLS$Y#N$wWG2NB&D{y!(z9vjMxe$>y{&tmX#sZb#( zPO5yF|CyBWc3%+toTkz}%(a`5W=biXaffK0w9-!)he-y!z7{L!UG(1;rHf9x*%9MO z{p@Mv2=kC7@AFMn<4GUfH#T-5Q~PEvW=ti6(=!CL+Eyew)+)L4t`o2?z!wUqHE}z! zUz~g|y)=Sn*eXcy;TSL~We$v(dv&#JYg@d*^Ck_;_@ZTIiuY(xjcn=V zAvF(I(^WaSfpQ|_PA5i>8mjGq3G|81`4_Dlh#+k7rs)B%?9@E{d4Cdc;DfG%692*| zcd%;y-3hm8oa%{^IujxN`Ec@~u+K3O88K5;m}7=5gjOJUfq}NJB>_)i4SEf3K_$O9 zax{O+ylnXNG6%#XNpIhN(e%llPJFV;+ke&}5Zs;|L#D$}Ci@{Gro88#gZOdS-B-FZ z!Xw4k0Qm)##5Dj*zXnVsWxYqkY=%mUMkZokxQlN;OLjiZcxNrBMHi+e>mw2|DXJxc zsrl2tDSt1(+JH*7RIjXrVb0m0WX#rKkd9GesuhDHPGov`c86Q>dwk}ThgQ3xydSf9 zEWlr?Wvv{)6Ip~Qq?%1jq?W$d?O zb);@DQ|K?*$h8!uAfUNEMSDFDu}oyeRmzhOlMO%iFxe*!@j7aLH&*T+@XJU|d%hyf zc~sk9rZP<&s1e3)kGOim{Aj&PSOUlK$9Yhd3ICMK^{W5k@Q2O1PS zSxoE_-O{tUY{SonXEM4;o_L-#?62<|(wSUc;V#TNvd%p(WIRjG zR#}q@_!0g8q*hv_HjNxnMi&vDD?th^0~E3Ejs=vmX|>E;8$hgaKi4;dRdxnEwoPme z1vc-fP3_mDn|07VGt!oLFH4o+PR2rM?5fKtXlgM(qEbf4V^H~CkP%Gbr)Q)6G&(DG zVOKuE&7R;im8Qd(%<6FCfbMxntGUGZ<6(W&DHSL1Yw`R9K9Zf7dnyiO(Fntt!`Y0eahVGV=_|1-+O8a!&QOeu2 zIZ@3#PM!w&b6t}>n~pCC7z?MD653<3hnVd0Rut#G9;&YO?FwUYFFh{}3K4W0uX9@x zzr(xnJDyrBst$FLGs2A2sZF>3#yC;>{3n_PFQ$8zY&E>n|BX*0o%4jH*QAP#MbS%dhKWtX^Kuo zJemX-LvK!}Y?vfomZwg#DZFThm!&XZuw`ryo__rlTk7p`)sMphDT2CLw@yX3QV+nAz`mUGEx5 z>9)-060ufzU?ljCeqH%d%cFJW#d~>&YYQ_Uw4=suHz#wyc(NsBQV?hxdU!WAnTM&x zIkR)jYjU4JG_RWte76Rd=ZTYQt(mlNRqZnDqCF4FZy)KevX=2eU*+ zERInUaK4@?e@FZ7(kl(_SF37M|052=C4B7X&>6YZM{>_9>JJtX1gfV=iOY!T^`+^x zS2EfnLgnz(+2G{63s=n^rX9?@X8HHWrFaCX6heg><fg^~FBl`&Z@Mz&75+J}+=xE!E(rZ9_E?%Wq%~f(x)Q zvYJKe)^Z09MeaAD3OBU5NNu;vtMs5vCP`KgZam}|-kqZaei|Lrq~T*+nD^hur558O z%d+q9EcYxOfJQ}#JWlBOurdtg7nx|mEhNBH?(2viJwAT?fO9j8V3B>BRe&U#sMIN$ zDpFl7+XO=;Uc8tz8rHeJ>fj_CxvOoIGK^uG)b}okV4lbzNa!q@OSt$U2lpcfA3mu> zq0MU`AfGwJ!_oy?y;Jz!1c4la>!Gkdnqj(|h&(<`&2Vh|usXpkFj)NbFz{TKE7_)+rB!Zb>WK@7{`#)}SLpK4)%MH-!CDVsG2+j^@oBx_iniO zdvb1Z`)FhCiiB{t8&cdmU)zs<;el*5JcbANWd^K5jPLX9MbE|r0I%Py;~J21-qa08 zLu)vy%0N$Cj_6G=JzvpM9v3lF}DkAKq{W+PB{v%Ky}OLA9nf};c{D;c|b!TE&d+++WvwL|474$aG$tH>P% zwg=tr8a~g>Wp5*xqI`;GsD(5+cftdI9MT>gZQR=08V(*COF1hlqTiR2wtO2(KYz6n~!zDh&LCgSsa@|4UX{L9hv zE7=OE*u8@$4aiAelOI^y$d!}|{Bck>9H(O)u|S@&SfBz+Zvm^(R}swU9K6`tdSxY1 zD`wi|q)PH?`dGyz=B+jdlf`?leFL;XTZ@!66$+j7yaZT7@^V;+LW2Q<07Mgwr+N*j zMCz>kBWO9K`Tq0EpIW_$8)3&9uhMRbeU~NYx$~hjFW8^_yCr3Ji`x6eDMzwU3B&Ho z@8v0ei$(?a48v8kM(VkXRbf*c{MOA$kum}&Bo*_s!{S@#RYR1Vo+(BJ*MJi?nk5{Q z|G4e@=cA)ao^y3%10|1*tNz5zXpVa%p%Bx z$Q=o^z2Qv-LtBymS2kf)unlQwZ6k#vF&`WPPa1G}D0bjdj*AYO8uHtc2G-SW8E8&n zM((f5a|zYU!d$qznqKWKw72B6zYF1U2}(d{(X)M-S_-r`G-%9HNkqO(s>x4^>y27s zzkx@;|DpZ3z0MP!!b>?xT`lvW#8Cgy4r=rH_d9L;KfK=iZR$b&!Jb1Q?AOch|AG-H z{huUFh3St!%)hK`vcKG}P{`VeLWlth2?T!W|ImZiFNgmb8K0;yd8sf1D5R%;jYJj; z6c=MdAtM6{Q4#)6_@~@{+1P#|AqqjLf0+Wf-=h$C7J)(@6#Pkk-HssS?TCMFby$Va zc&j+G69OOcJ#A)ISm0>;0+?r&)Z+uC#v?go zd!p6S5ri#1SgI$*!`}}JqNDq^7m)MxPPem#g!v$yK%CHe;A(NY%!F2q-^8WNPA{J&|=bkL@`NQ zAlBBClfHYvm-qgQlI|)rvtF1DAJd3c17@7z)%@Nd3agczYnB9jIOnAuei+~bX1T8t% zci-EN?_SP+L?(A4O9reer}ed(cGTvRV9YR)^TKM zEo<{}?c+3zz528W^EgZ5ctPBW&gIIW0>_b$aV9;?Bw(ftBNFM)zPFw`a|yZ_sAKyS z6ZcCuWo1^V%4we!u*=aZjE<^xB`R%S;j%ojVkM7{$-2j(8o#BnAt((*Fv1bL?}W}x z|Jn!OpIfr2BW!cflK?hh$AWP(tTRLbTUFdJJPkssUqoAUb0Ozo=jdH^5k+K=UO(Nm zY=5d3yb3?Ob1aEegW>~dA^)jJ^Y@E8^pV)+*Kbi9mhRMH}|`*9GexcOJ`dh2v} zj88gjkWG`}&GY-Lah5s7X}EA=%lA!l0c+ONeBRssJ!z-u#mQqj?zDXUbcp%)Y&MqG zq=_^Emsr3kK_3e-`$!XE2g^+sZa1!XKYK8tZ}~b5Kt@$I;!Yref}Xc%Rz<4L_+^jv zG@WjZYH~-w7#Ps0Oix}>W8$@9fpcvze6H*6b%h)?qnO_fBR0yAv*Kv_42I(aB4Sd2_b{D3q z;f;O34=g;&LZmo{lD8sKq2$DPbev0Tjig7F@_hy(%9a2`9zYth*5Kl zEHf3YzG7B>(0JQ-l?IX|^Lg0C2e#Mr&gFUe6QS)7^x|9(eH z=MNa|mVx9Dc{wHo#Ls|8_dB_(pEKHPQ*8NEMRxw-)%nlg8&1ft$DB=lF0Yv~zdfU4 zT0jkxp5rZE1~E^N@`&wp-yP5n*Yc-Oa1niB?S|lVz(jE2XL%j==nfeB!ZjeDD+zJT zz!%h{e3y+bU&eu9mt8p`ms%9wvf|p*`=jfNk%s{7NQmdXJAhXsQ3!=YalCqjItC9; zv;@9U-Gf64;=Ek+JGp}r5}4$dtj$9pSCQg~FANV@j7Q5g&R>eXw$<>d@i9us81FkR z2D?Fg>MyE`de$yCp=vti0_hm6q_9(9*fN*9;=@FQ-aK(A{u_4<1~I0Jc4=L3reqcL zBR}o^c$bAp!ZqZ=KQU{^$3)<@yf2ZB!6f#9K6Sx*d92dQW}U_sq4wY|GhE4ni?bBr z!?Hp?uyAHtf&IWsm;ow1ya>@@@3F(P#HdYsWiNIQp~%OU`sA^y_p2D5gZrNAr5EGB}43gDQGam1GEu?5L8 z$OT0^@7U9R$PyZD z86zG0)@?(G>>!YjVG!S7uC50*ZC0R8eP|F3t+=gs15S9srXENWPkoT>KK{K?A+FVv U0L@p}IE=w5x^v{X`+ENW0RIAq!q(QnnlpMMn1Vuokq#MMbTLA$P1d)LebCG zB?tfkP_)<%04~1bny4x$SnB9$-%!<10ze=Dz*W(3a`yle0)U&lueYAEJkrF}3<)0s zzyKBi1NZ^J+SbQYQ~!p+rE66s1*8vJ>F;6C-hqSh%O?PQ;#Sc?BLC6%pCH24)7uvS zKssn;K|7R>Et(_I>>A+fc`4sUGl`AMC4(>LLE?=L5X}^q?C_hfUFrO0*-N%_b4Sk? zd>ON+otxbyccMAk-w%amhz6RY{GCt%XdXo~v#Xz*6Pl0EOyY*J_5lDW?xoxpW$TD$ zJ~ZQc8|W#Z`8oh#;yV0;ZT`W&s6cd_0HEOE8RYHc;OL8Fx8*?ci;IgPRZs!0C|_T0 z9cx<`Yi~QGf`^-@wR;eHVXo$UX$25n<`#)gvIxJphzPd;4?6vSwg0j6FRlL>F4y+A z#;)$wnt{j${+9i1`?t*F832gwqjQt=x6CFR02=QD0L9ebGUg`$KoAK44a5JK5835@ zarE`|l;GtJ2ngVDLfP_MCiJiN|5W%(^S_6GjK_01-e0*xDx&PI{ak&Kmr1qtaP{!> zM*4VK+oF)%|Mw>T*M|QH>mPAk(?i*#yixAxp^VVG%*ovWz1;40PQFea?no#1|89l< zrP)7XxWwQ48V$sSzW@?T9)NI|1b}P~08nBa0Ai7k?g9O^ZW>rdz~#v^reFEJ@6n9z zzk2?c2RIS^FWAS)0eLA_&@({V`g!|bGWtwhJ}>}mfB+x?C;>Wv31A1f0Rcc1kOX7_ zB|r_(1`GgG;1*yDI09~fHxK}X0QZ0>APz_Z(t#Y{F;EDU0o6b)&??E3ypFso?Y1`~y;z)WGzu-mYB*dtgC ztR40d_6@cVhr=o1TyQD4HryKS3y*?l!ztNwiLDjwlnrU>@4hR>@MsX z>|Goj97Y^*99bI14z(xJ0;|xC*!yxPG_^xFxvlxSw%%@$m3i@nrGL z@O<$S@XGMs;mzS4;S=NY;H%=>;ors2#c#kL!QUdlB48nqBe+EnOprlPM=(sVL5M}j zN~l0+O?Zbem+%$g1mQk{7{QOwMz|s35#@;Yi0?#jB32?LB0Hi;q5`6KMBj)Z#7x8r z#J0o{#D&CN#7iVF5;hW55@(V)k}8rRl5J8VQXx_!(m>K&(pJ)WG6)$fnJSqpSt402 z**Mt=IW4&yIf^`nyqbK3{E&j0LY4wW5lc}+F-CDhiKJAbbfHY9Y^0o}f>Lo(=~4wy zrD%fV& z@z`b9z1W|zk8;2`#5i0y9&vo&1ak^=I&$W64s(IIM7W%|9&vrVhH*{&n)|h9*Cx1e zx#hV1xhuFAc*uA(c*1!adA4|&dCho}d3$(&@d@*}@)hz;^Aqu_@rUy_^Zyj!6tES@ z6&Mx76TBgKSFlNNM~F)ZC6q5TDNHP^Df~dVL-<@oRK#1PT4Ys}S=352Pjo_zL`+94 zUaVIfLtI|`u6T?1v4n_(uSBiH4@quG7s+zT@7LL`qplZT|0cyKWi9noYF-*CZ6*Cg zdR~S>##-i?%vV_^Sv%Qc*%dhsIcK>_xh;7rsurr&sgA3zub!j+RfAK* zTccSMtf{7%syU;@qUEmDs10bVYNu+?>agi}>Acp3>FVg_>MrZ?>xJm`=o9N(>X+*u z7|0tW8cZ9q8~Pb`7!ep*7?l|v8Y>#77|)yVnuMD4n^KuNnKqfh&5X>7&GyZe%+t-6 zEQBqhEXHrL-3+|>{ub3O*ITWY1eVs8bygTw##ZH4XV%)*&#d=tRBiHXwrv$`Gi}%H zWbM-IR#8%@6x52nlzoc*cLynlREJeZ8OIFA4JQSs9H$*;73as!hc4PKB`z1P#;!GP zm~K{XuiS~;UEDi8=sW^FK6-L_MtRPANqD7uZF{SG7yE#GZu&I&lAw#J0Y7%X`+f`l z(*C*rM*&6wb%BUL_rQT5&Y+l}mEaq}MYo~1ZEtskFofI-SqPO2eR>CU$L3DQU8cK{ zcbCGH!%FXA-*dS)7|s`-622E<9MK#}8yOb)?Y{E;iYWXj@2H6fk`Eq7L!+IdhhhX{ zvSWV5+Qs(8@x^7toyFV6_dVo)nDy`?!9HOqQ6w=x36|uZG@dMzT$+MN2~PQzs+ro5 zhD?i1+e^1hf1e?g@i-GZ(=T&AOCzf(n>jlv`z*&XXDnAfw(_eA)c! z$Fz^*9-lmMdNTP``Dw#5)@K<7umb;r>zumKa*Lre%B+{)7C51+wxxG{i{B)zQ%r${)PeJftQ2AgD;0f zh8l)Nhnqf#e`x-A{o|VvnUS}j6hC#3s*d)LX^njxHyodwu$Y*iw440?+4b|zl>gM} zbl42WOzbS-Y{neT+_NtnUuxz>=35sO7Y4rSf1Unj`)z&EXYp()av5(qV}*XD?7P7C zmem`pAJ)v*mexJjPdB1A5u15i>|6CeWPc27n`|%bc<)^NjNhf)E!h*=>)6-XpF40n zI6aI#qC6@+7CY`aF+N#24LF0JWu0@JH~&)qHFM#1adEK)u*%ta*q{Krc62QOf&ipY z2n-t!07%glE}bg6lMQ_J=hX1VZo2zo341V#7#*#iJrFgPYQ1d0I$ z5u&@m00aXQ@<%TO48?%)fdFE-CxS!>GmL?sNsv@ngosQOfldtw3WZ@2;{4VHgCI}@ zz(9n-$InPCrz@{V0<%v3C}86q&QvGsxqa_xih{mRDzlJpWIbt^*NYCp0!0HmGJhff z1cpE%*l;`;{K^sfUjPB+W8f#!CB~4m_PUqMD1de*`}D;}8}C}r?YH469V1MF3K71f zVYWVL!mx#%XLZahWW?xsU8e1?xuG+{z|SYAi*_Nqo$UGa#aqI#osSC_QvfamogV}Q zfnMHExcZOhuf{cn@mR-S5$T&Wr@Sk|NU~X`Xum{|`Ra}AD+2z#A{_O8WIgco3Gjzs zd~KhIlhd=WzLMyo)1!#W0RX(En?j{tWl6H0?p#lANWs{Bu=l67f4YObd0IZShu3L9 zl8BtTX8X1kz!l2=Neloyiu_{5e@xcTsZ5K*j^CXC;9hOmh1;YT?iLpsR{&}3{;={Tmk35+tz_kc+zHR_eaX(C)nx%`hq?DQ?$ej9f(vXqd z#QQ-j6EEp_&4M`p;ayVVT~XR%L&Q4wN-%AVA&LLsZRDR3p?I|-mqNE~WLOsffJ`nf z%N76)9yHIyrbc=?YE3Nc^!*vmWqNCIE#6UF!k^}7!a;To@P}Q>{)qb$|AnFuJrlC& z(iR{deDLDziU_3wy|3VZSGMGHaQBXT&&`qDFaT@$-Q+I-!1u6x(Xrvz4q(!?h@*de z=1y(7DjoISEPan#ysIY7WLvWqG!L-l64)LAfT&uhYD4jy$&bVngWf+Z06U50`OO2J zrLB7l(%@f~*RB5024y>1#7%LjK0e`3(iNoNTYV1vF|8H<*RKzAKd)C&Y(AV6`Cu~t z$1GvGg&zLijh|8JrDqR5ReYh$s(${$3P1*LFQRV+Uik3T&(&55q<1t2C&nFRl9jAl z{h1!>)r8tFMaEybg9+4f(C2L80TKZ2%(RT0JgbV=PaB3;i~xU5f<;;i^&!|GlRP&X zfD+uI3A;)(bk}<0?r-{Emch{{8uRk4h5_DqsyUQwuSQZ$cArV$c3O4D*oh{a_?m{T z17#XS4m(>;^xL8o=s`b^rPkx`bR};R0xy81&czjK-V*IS0{t(_f@H6KP07#ZNbZ-2 zmSkZiPlYN@*cVSOxr4>nruU0iBk|K2H4)=F7Mp`qv8RFf)@k8i;{AHipPtWRwhRXT zL)2Vi-SQRezV}IA&Ze;e25t>_?XTd2I@O`|0-;~L`VnSXxeM={f(LECe954E!jv=q zh;r{*W`1AlBdjMHO&Kw3II=HaELL_rL+y2GcGgATppJ{L?{sI`QgcO$w;JnI_w?hYfhl95w0^ zgjfj}GEw&To0Rb~%@~UtQUsY2tF;YE9vjV>UnWJcPDM^lzeeJ-5a)gs+s)LwS4n~V zPRb3k_t|PAfok=Y(?7;*^dHHh$Uma0`e%yFQiSDg2Y{*|Q0G zeF)N(G z_>xz+1h1&V@X_JnQe}7jeQU)eKW?L(vu=aD@0$2_KVOI*Jaw~quT+sR%#B+8)Q>Zj zC$j!QbgFN?_7%sDMloum-ob07ikalQc#NQiiv8+?@1JBc-&bu)YDNWNi4QDhPfa?Q zikgio`D^~(CSaHh_>g^Yta0qqQ*|GCIkqmU=8W;FJ$Awn|C6WL6S8@|DM9>8Q98M) zci*~>ao=7oex@rvBN+pvcB9gz(*o!>&$A*o((=>_*Yi^n^oREAihu%*QM;T2N^SaOS&3In{Bvfgu~s(Z-6dT&{$o1Pr6iRI(tNSHbvQ#qWZ0$ z6Wo+BNG}|ZcQR1Hoi}dHPU-x0xhpNLm>;FM+C!=A}wiL;m-1+NO6i`MxbSURdQWJu>IN#$r$Q#qwUBGzWDYF!&HNDSRSuZ+jox}k%DYMa2K4}AJCjavbq4k=)-bSXi`|_<-(*RbCgXfI z^#Y)kS(CQ@#rLK3F|y$ivA(_cfV;}!580=m@ybr(OC)2~hKbUAV?HvhQs4c=p)Gd) z>^0Nyk9l+M7zPIE-l%iMWA54_MOL5tq6U@2d{45s((>caY{<)qaO8~wwXQc!Ez9Qi zH3gl0S)ue((=XoV49r(CRIFW2p8+tFv~F5Fz$-1N(#2h5U9Uro9R(Jc)+T-1Q=0+G zoaO|GndFwfcvrZd-&E+!Qu@5eN9mOve(M6zbV#y-6E+5XJ!Pccho_9&Qj8T> zm$2=St~_+<al`geMKEk>|2~tyci^@A;BBzY>cgMh%bqcXLsJ{J`xsFo zq2L+JzNy_eSkT?P4BZE_-6Q3pO4>`#&djMn-agljKB?psNLHK-lLX6y_u}k+xwWCZ z>YFHjzMjY6=)uJNz@2*BaGu^hGH=_r+0vu2Ks9k^^r#@W$t|kiZ8@_ZLk~+%g0Rk_yHs=J-Ru`d-GnZEtHOW8jIGh-;$LC=S41n z%1xmQVETH#v-T|VY~Sy-6y2y{KmOj22DiG8!uym(dD+bB^t?vIbq9iKrR7-S87za@ zt#ZTz1$Tu&tDL;u(-(k4qrQk9O6~pWin7VCP576ok}2WxL8G;N=3kOwpcae{&I>>Q z?XdQ#GgjUXU-8;lPSO3PeCEQK!qgH(7xrk3i@Dlxr9Hv55|^?vlN-Z!7_UNNBTqOM zW{nNJZZu6iA0t-n?U#F<>uM!obI#Y@tAFq7_#ICoxWH%&>uud^ZI%Ut5}GD;UP(yM zCzqM^_qc0)g}8MH9*;!Pu7`Je<-a^NHt@-acqXe+B6oZ%WvyXhO#0`p-Fh#+v;1w7 zZS6-~3xm)0`%K@-l7l+Azqe7JAKFyx^4zu`D+lGd$i3-y8_|RR63HtI{S5`_5&`VmBB1{sOq#aUc--owr{~3H=!FfYpV&T6YP)7DsoZ4Be3S-RL&c!?#?W`@0vKMFiRs@QZA)7xD0qJ^3tjHhnKj!r zh|vw*d=!vxXRyKTG^HunwtJlT)%(I#+!M zV;fa^G0v&gL`LO8iZwP3K6rc$xlg{zx$(^|RZZC=->qxiC8DuE^!nO4xYC`_9%AnH zf&~GaruABvJ(9^^ZjxG2E6%A(#&98+;)JpTJM#znPmvWoVADFq*Fo3v&kJl!En-vG;F=GzB^J1@4|;9g z^s96#ZFG1*_K0nOphTL^6-(rqfW_nVfb_w!9;dxuKaER#H15N=P3GMD^dq@@z|?(( zjaB^KuH%*|oj!bN+^^cQ#t8~ii(-0AnGxiTMeVE6iV2Jxao^op-0iNr z>;1fKq;NJOiTDh4X4ZXJN1Hqvv(n?fzDb4M!dpT8MS|%bLGW&3KvUc|?if3qbD=`% zEI5|1u}qY?((p(j$Flsevfn7c{aHn1lzoVI)Z{GAqt>5UJAA7+mnhi4cA2n&V#X!s z)@esFuatBgqs#PsOs!rtKxpbnsnpfV*fmMDsduV6VA-@tt3#~s7X3tMDlkkU%!()FQc*)IaK*aX-iR$w8jK(VXLbH2Fe`VTIoJ^pIB2t7|9vhoue^|H=R= zvg<~6(tNm^!Sh(MuCzfzL!)As`tqVaUbEj79{OrRhT%jPw9%R>FYE4LSvfNFeBT%wy7Twp$bAAnp>@&{FqVhh?;?RuUM@H(@eEz5H@-wazbvi zQ$87Xq?Y(__YL1S9r1=%fH8fOnzBXib=8A<#RjZJ6 z{=V?=1G_*LRSE=qyFaEe zUxhs`{Nvq>zPm!NpH6%P>(JECvbF^|m$Nk%&^UvK{_#-zTc>^@#`kX5%r5}5?mZZ; z*~$no>!`Rgb5GLnoeOzDGQ;bNsdc4W!=(1db1H zwo0$xGPm{&pRQ}oY%&bPus%qsZ62523g<4|sLbgjRZ-;d4A_x%){nsN+^Ou-XS>so zx~Kp8cqcRk8H=vV819DcD6z-1-O5?@dl+c~ga~gA?^ZRbc0!Z1QqSH+#Vp;`PrSZC zdc;*&AMl-sgr;0M)6DuFkd|p1SR%i{UH8iM%0!IfG3QuUby`_&NP!w`$A&Fluu@#*7|n}b9K_Lk{qZNM!fB+%VDxbA}X1d~$kppXvhWge_71(6Ao5VV5v#uQes{X5}TG|3UBS<4(Ow zin|2oRA5(}gY)2HUUT1G!~lG`nU3!CWR=&of^dB}@oX-4iZ-~-)kj}|nn1Y*QME%4 z>U=U*oUpZt|D4@i`c^t0ZT)m@0n1WW#e<=(lATBH<;nT-t&}0lD?{~1gspGSCXRj_ zTYhU>0%+j-V(W7lcQE|uSoWaShs+z~eueMC7BkMl+2HyYuxX#Z!FYD7f*7fhBMADS z+{!bJ8eQ+&w0iTYZbn=Q=@)^=xvjS7-rasswP4fWnk;wC8?PtFuQ}ty*0<z?KA z1>hE*Xf;9pyZ~U!(IAFB#jH#Efz>J<1~W-+-3qR*K|M*~)uwL|g!wW~QJc7Zdumy{ z@p5NEhY9@CXIWVJ$wTD8qx4+;DDhizi#+^&QOn}a;UGVO8(u+Xj{+l62R~&Y!gAlmn%ZAp!^7H@4|IX@aK=g=AzelvX z932yO6-nVGvn^jTJmiv@PA-`Teb1YsDxr3z<9Q|bzT&-0{x^~Tj^TG*i9RBPCpyOl zgshXV!4JPujN6|sjo8o>WK@;{TINZ(K9$_#Q0Hs|-0+<9W#|IllM1j+&Nc>claU5C zQt#Yi!_!gA4yQ!qv`w33OXR8z^mpAqhNIeC7^2Y}a-;im<~ZHu@UT(qfkohaw1xw*#vsxPfEt ztUjbGgij$K{F>F^#{9<$x<(M6EN@VfaVy_)0t?ZQMQ@vFs~QwYfBnSFxC*A+leWRk zN?}`7;6bvAL$`vrcA#_G1= zJ^XWeE)Tjei-*|dOe*i63upLrMnD|4G>`*&hy4x}y=C{OgmBJVFloIB!+^4W2Fe{H z#*mzCfDqRpy8T|tyVSzDx?ZF2u==HE0El|AVM8)cpZ@{~VnH%LUAg0wIgs*|+8N2Usgbm+qFmLaEo)OZu#y@jD6}%w`S1jfiRmFvV-Wqtcc;bINXxAi38XThUFH zwOAvu(eYt1NPd**+6HXud zUrY3g^*SrJn>`$)k9(Jsj3zEgNjBnqJh)Eu5MU?f>sT_uuz4E4R0{12fbfwe*vBqx!n_4D$rbpwmm7rag1%b#pnQVcZkR^+neMxKuhYkAJ zjDV95knc=s8=#rC?mB|Bdb}3%77s!%9dFR9ZZYo9P)&u7R|bH9n_UdTW>#X2qM2V> zGw6J0u9xN)*&{1BH))PW{bW0@YDX?IYpT;PW*(YsnXUCQC5@Vw&23`su_*JyHF)*Q zA0fhRgh~92=Z@EW^JX4t5M?mo%GQ0DM=*gR>RT;5b^5#d*wv@`B~$jPD*{g-XY8Z- zPFA!#$Ie++S*0~NJhjxHoXW(cHo=R6(R^dwKU4BDJbRz;)eB>TIx0)`+VeV3K+wOo0ITFcYKh%nwg>w(fMAY z-K+NPZosCArvN>wjjE5?z)gymQOpaZ(r-7`VF_BjHn$vtA@Q^(Oxy(P4Q_*u600mL zG!xcA8-2}4@fbH&b1;lZyy}W*IAN< zN6J3i@aQ|>Ood@J;f*wI72koAudp+krK3-xu6LLsnE>`41Z zCe)JqQN_S}$KvBIKfi!W$`Gbbw9c@@&0MJ1W`=KRrv%Oo zPMV-hua{z?=blA`>K_Q;aQ3oTLE}f|_TD6cm;@i-fEbA5LC*^!aVoXF*}|P-MZ72! zk#6OF9Z4rQR4^AynFnv;zonbe;bBw=;Y>abKGPIHsbtVc={&jZL)vFJF}`?CEDB)j sF~Hhge^AS&J$ZIJTIo(G9JagpD!mI_J2<7)iMq*t(`fCS?c($Q0gYfRiU0rr literal 0 HcmV?d00001 diff --git a/examples/img/Corel Auto-Preserve/sprite-3x3.jpg b/examples/img/Corel Auto-Preserve/sprite-3x3.jpg new file mode 100644 index 0000000000000000000000000000000000000000..ec23489d5f45d85a79e863366462b30e16a551e4 GIT binary patch literal 39125 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∋*)iyNiq$(-=W9%p#+WTjTJe7*|-9uwYv2 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 Dfr1=2 literal 0 HcmV?d00001 diff --git a/examples/img/Corel Auto-Preserve/sprite-4x1.jpg b/examples/img/Corel Auto-Preserve/sprite-4x1.jpg new file mode 100644 index 0000000000000000000000000000000000000000..c30b196b8f0eedcd00585870056c177eb4bff3a5 GIT binary patch literal 12054 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 JkiCCr{s(=7${+v$ literal 0 HcmV?d00001 diff --git a/examples/img/Corel Auto-Preserve/sprite-flame2.jpg b/examples/img/Corel Auto-Preserve/sprite-flame2.jpg new file mode 100644 index 0000000000000000000000000000000000000000..e682457aac623a0b518c2d69064f59a3772cb54d GIT binary patch literal 190868 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 *b}zwG#OpIM%CuV|e$1o2dD?$|$~s93+P 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 literal 113120 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%0A*(L5nOHI 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 pKZeD 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 CDE?0X literal 11119 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 Ml2Mkfku(PX4>Ny4?EnA( diff --git a/examples/img/flames.jpg b/examples/img/flames.jpg index 5f36e642d90409033f38502d87700448df9469d0..e242c151d5d21fd607a6b251ea947f8cd69e05f2 100644 GIT binary patch literal 847922 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

=iA&0aTsk2wo)Zc_Z6Evl4q(5oR`P@zOW&# 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%0AMTqij7^wv9AH#-!4F#@Dv7| zPc!B{!E@4YE8Y)!9Tpk^O;lxi2R;axyGd*zMyIU)aY*??yt5CfBQ!PK!uIdK0DtI2 zcWHq3c|#q{+*qXqk}4#e&3w7Ne}s(=ym$RuX9d_H%)rv|WbZIz{}OxsN4}J{;y2C* z&3x0J#x_fgusI&j5#s@GYEznf!jBT$+@dlK+Rc5=nu;E~AjrtP9S1P!$^1qlP#2ga z!mjol97`0Y?{(^C4_BKujoING zdVH!}=uHJQzYKEq(FsZ?Ys|s!I-Ht+m(S5#z!LBHAew|Z_2KSncdR~8&LD$6Nvp>K zV7y)TK$Y;jma(sy@spMhN{DqGeR*qT_DA~0=-E!gn(`#~yL08gd#BCZ+OmNLxY>*+ z)oyan9rrFjGv@5YG{=6MDKJg@NG>px_lAe_n450681M9dE7+BCdaOvs+r{vgtWMl@ z))6VMeYTPS$VJWDAmB4yO`ReY(uh;G?OOV49(l@ z=OF__DqF`CkIX`2Te|<4#|>V^r0EgI>@e0pD;8!Ni{Mf+?rm~!iO9z&k?uUG&Ml+3 z<~>~3(t7QWxTgB=C$?c?9X0Iz-}b6~DT=PiiqAZUFi+1V-|{2~nIPB-UqwXavIsq& zXQTeT%qO+ffx++6DoKg8WiYB_KMY7|R$mz8F26ZB4FOnAwg{DB?Z)6AC%~L^L&{+< zAb_BCAf~$tNcd8xt6 zcV(4B+7WDwg$kSNE+yesCBn{RfqVQO));vDHu0`5$ND;mSpkDNOrBhu@&FftE1fU9 z*xHf~>^Y&7T5j?&RlC~C357nUw)E}@u1a21k}l=@-iWDOpn0JYx@+k&3A4{S4r5Bh zZW;eHezT#5Bp|{jeBK;li=PhJIO!NxMtzK^Res2RR_q(qvBDd`Cg}EeB zq@j3a27XL@TOml=>r!Vuyxi97&1q=4;oB(m1gk9Js0Obz~opVGwb>3yPyCte4iJJ z60CKqdm?xhv-;t+dl~49`{O)&8kO2p%^s7$E1sEC{zU2E=RGz`7%VPyH-N`+UvpvI zERkH5lld|~y7WJ(T7*H6bvEmM>{iImQlfJ9DRIM4j!6zMMCAc+TMhwHw4_?*!8T2}t6fv7+<)Wp42M%!e5GBiXrB!?ri zjCrmHqEuo?Y(Uk{CQpt~LNiRzX>3MC%=V{w90Tmmq~mox1Z5IyXhG^VL&tOys?FZ6 zjQP$^ztO#ak0H8K@Nx#~^%M7~Hy2Y$UajE)WF-|C0r9u%K_&-#O#VinQK~53y-dm` zpd3i;NFM!~k=M8CV%qg*6Ok!EU_d-}6rdvxcOQSiUvft&&<7aD)lKfL~4EdZ7dNEX{fI)iO7n|-{2 z2ckuY!t;kS>YZVdf6G*iWlh%R{S4sT#j-w?ql-YxpB|~FGwjfjp*_Ky=(t9Xm7JK_ zea`rTQ=XFn`q}N~XY15&eY!P*HzgcsQiwAF?$pj+mxp674Rm!fR*9q5cnQdKUy2QO zaXs$NOXp?pdX%u0QdKfLiGsnUh$uI0NIP;oOkP`WUP@XO?MwGiCHtD5YRyNn-JWfR z&XOz5GIIp?%xc*AVl5Y`%)wciP(AIAuKAjr-E%J#&P+)>gb<1&wC{fVA&`{aBmACj zV_oH4=OYlA`#8Hxx4`$ByU*im2J8R#3K`lmR`B@$`zel=ak{%3I_Cx2h^+TU`LRKI zY_?vpB?3BgLihp@hXhJC9}uapihAfA6CSP#{WUR94fDh_1OP`t=lb1+#mTQQL{g&R zdQz5eZ75YLBiOT0=q;DmeOa6qBU8Yo(kt|Q(!5#on{e&spb+4|jnVO7PSqZDMi7Gi zJcG~0=N0$zI)sWq_E9X{vM*$lC0fD%E*(<{(rk%M_Khr9e82r^cynmQgzCfDJ#HB} z(91?wFP$8w$1JwWDQ{cXvaCi4wnY8y0?)0NMGxRQBgRD6R^1iEW?zL;h3>g3!9;!O zbC^V88!)Mfj_v*4QLcf^mGys?SkwI;RtBwek5sAiLPCcA?o|M0&-_|_?#0&o`wv4# zT6)@87su zdXSVM6i`LCCu+xIlWxT?TTNO|NhcpDKG?7$I0biC88Y%HfEVW0=(Bpm_4i8 zCyWZNjji^X%Du_U4Iq-u?(brW#i;B((q|JyrgLM!&M& zSp}!Va$ELRiD<WPyAWUVo0`%m>lE`)pN=l?AnZKXfy1z5CUK!|@i?|Eb`( zm~!nIkp8e#s^{h)wzNMczU+g=%M_Ttby=9y!u4&jh9ta6LRyRUjzpQBycDZhB2@2f zd;1i&d#?;#nZn>c_6PTI>3WM-cJ{E(KB4;;HNutZ-ZB@f1M~NE-?RO8qQB~Q|Nf>u zZYOv&rPUBod)A(Y*z5ss_8%pA_62r?nXM{Cj6o`{>ptk=|9;Y>3e`_zc{6WYqugqY z3e9!6S_kelTuV$69_o+l8E|Yr%X}LwiMeR(P!U=86o2%!k?;PE^Yb3!_ul9avfJvF zUgpUhGTGNoTz(b7ZM-RJAM<~x51s=RLOy7&E`0`cJ7nzJsRION6h)p32ynT`FVB-Q z+p}sHjQ`vY;X->S!07B~>AmbSW4x(50UeDc9?gOmzSP{1(e-dP-ieg9CQNlDU~-ZI zsUqi0+9Xh)p~43>l>yOc^~Mg~<7CrHs>6l5=LrI9GJ-kX6WVF4#tWBxB-P+4jL^0n z9(I_Qj6UclS5a@RcUPa0{n}~fPef1Q@3pmykTT-BvXfBqOTKQ-mkeOiRAKLa{j$&S z%`uxlJwC2Li{-o+Oq+yz=rQ@{g5#q3KTvlp6Wfh;r<*KI`JGomFEl8#K`5XZRxL1l ztE}ey?9OBD!XjhxtK1#m(j7h<*BRNGZ~y$E~ksDMb;jX3w#q_SuFe_Y>s(J05&pm&*gO5e2#1C6+viA zSFn>|Vj>zlRM$LtHahx!T+shl!gV`NekL#6W+xo3zokE~n>HJ6JN~AuxUnuJd9iQu z3@0#~JUa-Y>25zHYRx_3e+L%HF5odO61jUZK@^2Tx=L)0@mc377mfR@YqZtLL|j`D zm?pB7v+a%lX1t!{A#p5u*+Dp%ux@+tJ=gA<7I+BAcpQt?7nf4$mRF6zXJ^bFK~%_ZvTj3!v$Rnx8F0L2sYH(3lfx5?PNXu&yM4i ztxKQn)(?Im7PCT?&q^K=nGsAf%sdY#oSlWG0|327U|v#y7|+&eweyt9!ME*S z+~h**7Y^=@L5zO?M`uArjaf z$c+BKOtR=PKMQO0?#$jIaL-RUmtkDx3j_!ciGy=YL3WfL`2m{pV{IeZ32=ioy1LIzBcE6G>^tU<3XCd;f{~eWnrV~fr1=C zj5iAKPP5$>^Uq&1D92diwwYw3U{`wp3@~IfzU2tCCauDx8U)m{@p}q9x;F3@3<7Dl z+z%ym=U7@S^L6#xL}W6ku#SI!B*en}ByJFMq+37PR!b#lG(%3cmKYuLgD4xM^)C@5 zIZd0O%$)0)`sKS21yFRv6BZ~?I!E^z(q&i;S_=COecAL`6Y)q0q|v1u9Dd_oovWAW z2t`^s>~1+jj}@c8koT}1m^SgZlTPoz9KNVW)gLg}MG#KBz32^L+Z+5et(;KM8uqY@ zc1vgS#I{ZGNFQ_2ca}_87F+^w#{BlHs*jI`2zds~{&ctLGtZZ9T0*+Qg2V1bUb_^J z^~Q9{FnP}-0=uccAp3(MI(zK0whBphNP(f`U3iSs7WutMMXy#1Cnw*@4(%PE1kmA9 z5X(=LKjdg57W6sz*4#}Rm5AUvjp);1+CWuMkI)h|l^zxP6eOyustR4A#Wn0>cRB%X zuprURoet|e-$l;`T1F9LGo$GWm(VRrBJ>q@kFH$_w7b||TU~Em6^;O&_W$m5m-&BM zTlgKZcJY&tE_Edk_N<1kHU;=1tn0Yymo5Qr?5uVxprLYDcHVpVwoL#C(nZJU z(}~;zuqYc~l_>a<#@dT3Dr*mD%^GT#vCKA0)Q}}!nO1yb;SG0>XnoHl?}#97zZR8S z1D9@bZmYuJ3;3qB_%zUyQPnseNcTqcHj^lg7FdN>TaZVyPJJ)}qyb&x_4%x|w+QJJ z1^pjS4Ei5M=N(Vg|Httw%1A`Xm08FPnfGQzWrpms3t73i_PS(MTx5rf3fV;Vx+L=& z*;&`PE?M_-jf;!#@BIGucpR6LJYfuctzM6OP6MVh;PAHca2E9ufqWHi=$gYdAVY`S&>QxI$ zDi0bRBN8$};p}ko$O5l$L0#LN{@wT{;>}Z!szdzohbwTVg}*&I@e7~rt_LSyQEk!t z40;Lg)!p)7^bR0t7<3*7YH)EUCC_qiHY-5!0Dg#kIHY^bpY=y@HINETABKH=EoOcAWUAImz+7arNfdY0YhqF$tC6eYNrfa(RxvakST=MT0 z!WppF-Ci6zVJx@(qZAsL7W!lh09?Gm#S&O)%M zgoUb~ugzk!Y)Ht~>Dl8}%0c4Dir<=H7gGL;lp1}SfO~)6a%cipL^gNx^g`9kE2IM6 z!0TKgX02jdSME5y<3?ih{1PMDQNq{g(aNL{QoyyUP{oB?E4;Tl`Dxi<74IZT?B2Is zm?;Ww;Hjx^v+3)&Jj`CjcZ-I(b;ju7^#El(_SU+&RUux#Z13lm781j=lp%OS!x>Mc zJ}vg-vpa~Xh%cx0lD4V{^?8lV{uxGz6=|1A)1h6S=MkoKb=ZZv;-C zZ&x@Cv48bUR1)7AF|f`D&y_YO{0G9e)yMu(>*%wiU%IYMvwk^lbv2Y=z&mBR7Iy7( zg&>oQc6%5lI6M2K_2Tj5=Vka`+s|d74kq(Ra^9WKcE04blu`NQR`e43=_$ir>RnWx zxVg*@?=JS-Ck%LosmO(ikxjPt?ldJXS8G0Xw8Hs1-4|$$6I@IztzFJTG@l3xju_oQ zOfSrmypPZS4e8q049~etWU5(z7Uj0Ycr{S{c>Gl)+A*Yo_rY6*-3jfYP}v5ByhS3X zakG~XehAWTeP^(cxc_(_ZxmGkVCx4bDhf=#*))iedhsdz5ANSp?0J1B-I^o~o0anH z*tug8at13GT~G+Da&jchsKC;7teTG&ZQSJ)cl}USchp)nm9kJ=8^KT!Z#Rf{&;5N! zgB%@cadDNLSgQIaG1}Zld5@6!z0*14>iX~TZc%|BLtIZE5A1zwQM9o%-!?4=;e57zJxiiZ;$@P&iMo$02RjQD79-II7OmZjHQRHO6{93h+ZB`bx=b$@s(;)2d+Xdj+yBh4)MKWZ?j37kl}P{U?FCBzUgM5BaeT-j#b$LyrEmTB*bPbFri=(zZaMG;D=sK~y=d<+|tcPu>W3 zq%bA4n0w3g%_U4x;X3SONT1|$#rl5h$hj#!jD~hL>WQd5^jc3g%2TaQzoEKsMO3NSJi?uvkwwYrs1S+IC@m15bt#eM0lk@fAF9QT(V1i*qj1 zII%KH!QZ`9+s(aMd}XXlBXTXN;JM+O2?7<(&hO9I!7GbxyOei(sKDQBq_cb66ZuJF z`8z^`DEr&(n?+zX7lGaJoJ089dsA7&(xDlh-*-Xh5rsRc(mL7R1j_pAI#oWEP4j#ooCq{Mz|jbdf)6Q*bdZLhVj` zTEY1rhs$BD$GZRa;$8$@@3IpbZZchJ!}|-&qwG1w)P@VJ0;~Fo!9zSpVJkh>F=oHt z$l7Z>aIZqd=Cyr;qnd<7w0o4WMA^c>$1T6n4LwmiaQ;bmLHRiGXG{gKHSODP_Gd*3 z8?YzR1Ew8eawgD}u=(?G(NpLeOT5HeF5J$%;~CGBF&m<+y^3jFAv;WyP;6;_qT+TC zy(}*H%vyElnabT-N`RJ{jk|J<^~(ubu}FF3SkEyecBG?eBW>U}Pf z0_7gca=#4|E5~D?zvLu`7*L-QJl5D$XCIo1&nB%w(aXnG}LM4S?b*Xp6YKa2{g;(JXf>mz& z!L9RoUma9r@!N^DY!~v_ABZjc?-&%hexvdz zgR&}l!EOk%vsxK&UiC|RMFoT!B7&j)(~~qO9%dw# zhZubAr%5izjE<=2`eaSl7;l(wnC&b5k?qs9Y4of0@pn2uq89}AnIy?!bBfHb`Ps4(4b*1siDP@t{OeMQ z7qbJD5QSQm%aVP^BVvUg3*%8YiWq`*XN-)ZB*9I^qsV+7{TC#)Ep8m4$1p4weKSNx zz`S8B*Vu1elbu;OL-J!L%`+=Pgpzp3t>~XQ<@uD}sQnicU*Er`Gf6B15id$B>E@7J?PFejM>Gc&->S+i6aY^lNyrh< zju&DR$*uD~<0}n^1r~*uq+UNiG&8DbL=tGI`}mMS?i>1sA){_spqp=>ZuUWP3O-{d zIrVKze`DpF!!f1BQ|()8HeVd+0Vd{+PcnZT8q~0Lcr*Mzr$Dv+9Rc$G0k90bO5Z6C zry42ZTCF~55>mCW=oV}w%)#bc=l%m3ob{GoV&)I0r}h%mzLV+Mh=cYvJez=Sy#bs_ zl3OJ@(nsFeS*_;3YTHZYZG!gw#+!s+S0tsWN-$iq^t=X?tL0te=-)-m(nthfjU z91K5}jh?4k8S6_Z)kGB(WX&4-kJ-4m;k~z+|Jrv){^G4gcU?2AENFPL$M!|+<`|#k z+5!s_(_G}Ayp6ypL9RH-fEt((jlE^k^OSBCJx>XhaTzozib&?d> zvlonh7V=|@WrXR4zL#-YL4_PJZ#z`@%Qct+oBdJRCuwr3%r4W0F#-7M2tx_Zz`#_4 zy4dTFX_B;3pq#cYV*BQ2!*66AqXxZh7BsnPlz#=fKuSoVg&wi@A;Be-_Dz?(EeUD; z1bfrPG<|bGXrK8H)Y06zvAfToK2bjA!YyH>ULk<|J)3MSD&%NEAJRJA!fXZ(% zmLD$E%gaCXi_#?MmgwL(quzb!Vf4v=0+_Oo) zu*YC? zrdT67{n`cUTlV}T-x^_0pJ8>mZq*2XM7|fh&U)Dy-;(?Sa@02%qAW%%YGuus zx^mnL{^;wh@y7_2-t2KU|0l}0K~iij@!^GS&zbG+4RIV&@U0(D#?RhLkE4(3Tq&vF z@k2*KM-#FkQ>l0kZ&F?qR`J+rMU~1mWh1L1dZ6~%&{a+s6}>|QY~5nVp9(H@5E#r|F28%N##anrRW*l@cEA9bJ@Y+f8o$+E z*poG;wD*0wt9gx_;c#(uQsrFD=-%MBFsJ{JOA^zFq9R2Y7$Ye=U*(1{2*7?(^+%sI zXiJW_`C*7H06kXJLVlv}kp^GhXc4fxOik@);>7J*u`9T#o}AF4yLTAhwrJboAq3(g z50t!xOM6eosBQEPb(6z8{06i7Q62IqWjW=ZH;v!!g7Sbn{~6R6xw-kPq&*V2dx)=061EB=tOO$Zd? z{uy2%J$0?J3|Mk@DClPAcuNNQnv*>ORev6tPN%+@qKb$ZC}Mn0g-n;|goi~X&pZ4F zQuAtV(MFFO{MKjEhH7iB0NWl(LFWaZ*1#Zw#Mn*hpW+%+v{VVp8`BJbx$7ssSBcql zvI{ir^c5T+o5~A^nr%Z2sds10Xwjn5o>aY{CEwl?xpI}8dd@{EjtciEix-^uW=hmt zT>$@aj6A;i25G$k6QQZMa8fEYZg;{2pSha*nNh)a-Gz8;_xk{1{YlVQcMIj zh;=><3koSuYxDWyHqA-}AkQp?02l!q_lqO1cUwKnNx90N4`VOQw!Ed;A679=rdnEG zvtwF*_bC8y5WZvRU4!;<28E*SuF25AHTmFB+A=SIbL=#4O2@M_v&!c&{`!PhYP;hW_*(dH`@1P^wL#Hei)2C?Caye;{38kN8IulN%4q~s zLvgY@?qqH(s(<4c5X2>q-D;P(c-ojjo?m!?az#l*EvpcC(<>UnwLktHPTvzu^@y+o zi|`7Ea?3}+wXkpqw|7Dp;m;lT6&0(bybPC48Xf}!#6)fx!my~cy@Z+ORnt;Elq&`( zv5bJ68o5H0(S*uihB3i3AUCduqrWuY|KJs?jha zSrVi;-*X|67pb5~+K74oUZIFCz;Nxqds0m0)c^${?Es3^e;~&uKrOF&L@PATU!|5T zkBjWT6nX{!{y4!%%xaUDYYID{%SX}^Pb$&(;eo`R|Y^~e@gg_6#T)N2CR z$}XuZ05fQ5>3}ltR0-S{z0TJenX?6JiXtcAk7PkbLXcG)7@*+b=HqKYO-f8bY`ivV z;JJUm)&2b%o+zNGBRd6>a=j)JG`UrYr8JzLo)CTzilqm7=KY9T0n7mg@iZwz1$YZV zvJSp9>%5OAR`>eX!msa-@FxV@^D(t`gG4ZPc7BG_yVOeLFPCY#N8a*iQggkF1$okN z6>}UYUty9~1Qv=Wpn0nBz}{;}`!iDD7y6sakEtU#BlDUErOUMl43(~ylV#Q~T(?a0 z8kiHgd^TkZ$<7H59YL_ub`TIVkzDH5ettxK}eQHR+-57?#N5tXV82= zWouR}6ug;*tRDyHjB{uX_qo?f_KMY=eZLYcLE&or@kM~kgQv(>5LT{NDB>-|&V#Yt zKs?sEqpv-}ch(3B@5=f8Dkj*}+FGLg^UH;zV#ez_k$(U>OE_GAKGvNBiic#99dU ztpSMs9N34?KBBqOzs{&1FssR7pQo>ZdpwioeBgqn03%=0J(~jGljk*&KmEmO|6e{T z#O-%3#x}ZB;#up2FmMN-SxP<)3$FSP#P8vQ=tOZv3w9_baA=G-J@!h9=E;*<%Z81) zY|WiKX|mSZ50MUIb{sk<*6sNpfEaM1Gq2vY`CrzwO~u6*1d;Ei1e4H~h^M57df2$Q zi_CuFj+uh_-=yGA)5{5Ndu=dgwpw!Q@FTIg1r(;nM%KZMrS=W>W~7 z}Ar)k5@YKruZwnmPGutiKg7EQv71&Y|N*ZS|g9t*v(K<0DX0R|dQP z%9#)1UH-nhT0hE$5fu2IR=8(@-6vhxs-C4jWrVAj(a`Ki$fH(&P*+;=FS^qg`YcLH z<#R$IU9-aHxsJk=#f6L3&POLTOrDqsD!v+=*8&o5?!3B|I3CnZC(+|d>&zZ?Kp)e$xPS$Y`&%elfGqpM)wREE~PK+Y00sJ z!ih_(K8!bVe|ya`t)TQ}kcKJ(y;dH*{33TLGU?Mz(jzF(XByMs;nA7PJNIx6nnm5? z>kSH|K8_DcOCn${!jgR@w8t-HTrhN_^Zw~qJ$xFI&Tx>Tp05CM#O5C(k@?rqvlH`_lnS{eZ*knrtxvl#$q3WY*uTS2- z8=>;0ui#&ul$>5rL?qvhq=?R--B3-;RI*=kkml)0_RAq{RfJ3E=LNN1Yez5%?Qgml zh{mVOa_T>hALM6X@tkWX4sx;a!8$I#6Wb5-!KAcJ&m1PnQi}k^24L@NvBU+)fn!0lIRv&eHGD zx^<^-|A7V#3X5V{iZt3y z)e+;f(5_@wqxFjy`;u|xEy1JF`5wXN;=79Pq%zHn-}jhzmZp@@{j&O#+?>iU;nKBI z6zGB(!f*%9Blu5?$7KJ7s4gG-{Iin^&HBqPF=_N$qx!5f@1DUz8V)S7pWamwmX=vB zbK_&h$1#*^gr%S7TMdk9dKNU?Xp_`SD z`4o>rHQ67%@*i>oTzi)zFx|qO+k&;kWLKON z*5uv^GU=iStZ35j$T*SdO_)bi4xAtvE2oA3%(sUgadLo?TS zJuMII+Yiwpwer@Li0HQ9$zfUhgHK#aI#u3G%MXZzyfp~ zAKC%FSQ^{hYS-@4>T-tb*`mztosx&8*xuwK;>{{a1Owbn6GOmYQ&Ht8_W&sWQt>iY z>;_avLN^zChb*h1bc`}|`JT3-FB{sGUiEVD`(iExltCGp_!h#YATi*jixAa*NXoyj( z<7n{ovHq>qTEv^{j3FJ8m`_yD2TdtMm~>A4#kS~KcK$4Bn8FLcAEQQT+8PBohz2h^ z+RQjLbTLRaAN<(Hbl@;?@(gJ-5SZZ(9=v?;=!6ji{O|6gn2eKlsF=(o4Ud%@Gp(S%Xt@_{XeUya2L!s_NLAC~x4J##6I>@U zAX}zW;M{C=u`NhAK)UN2C5onJzZ47Z9}w!G7`OYx#NV{0#Nlp>{L!%t6uI${R z`x}~zc-uE2MS@B<_Zka%Y+N+Xs$e$GbI$$fx~YwOC)QPA%VHN-$rL-c=8+xMqBF(a z@84-uSa+W#FD_~-_Dnsj`p~Kt_@F^J{06)kmX`l1KHY2~xrkGBauGNfm*tt+myZH_ zUmkG`pl`fMFj*GXB!3Q(zkNNb4O%*d%$wc!U)x6{A@06blIuG*50{2$UduG?)aA9P zEpj$ab5W0n>}wwX%r5+h7(UD0na^k&I>T>GXC-{EwgFUOJ+ab3#Hjb$xA%_)3}5{% zTTD;Nmd#TCuEZww8UoGJdEiE+#{%#ZJV zy*XR^$~fKEzOTHk`>du_D1ag;@#(o$kr;f5KxJ>r+8R9_KBk4Q`TVaXkV^es^h#Uo zbN~447DIrpW_Fs#{ITkG?pUhJcq+6=Sw2IloxACEewdf>^F+yu439h$6AO)|9$YIy-RsQ#lcN&1%vGTpLnEE$^WNH87rjvG_7n>Elbwfon6pgGQhH6`> za);(ib8MLkGWm_K5uTjL8`au#O&4UvBKg#BZTPJ@>~T<-!hUc=P1Dv`Sxmm6MmD~X zDAqfp0aGmN1%Tdf|aUC z7aFeyk`J^*Z=$Z6HK)n7Dt6qcU{MT}>ZqtO(NudLb$o+jI(J;AS63UV zdoJi;?=vm)l(Pev$rH5Aj8_%1#ecIZypx)1*``b%XZ)6=EyaTeCiA1tCz7A9>W>`< zTIjhEiYt_d9mi)$=mXv^BHIrxy$EE!ZB_+4#&TvD2?aXtuD@5}6(!?|BKz99^M+)T z!c8$7rOH%BqtvAy_j$HqF- z9>XZk<0h`Q8D&%4UZsnUbPW$Cn`Hv>JCT-1E!y*=donjR9jj5 zks%>MUJ@_I!9RCNn7>F4$1fHqaU+5Ec#RW09bfifgq?{!3~ya->vb`)WM#7TyddQ$ zq-0B$NEX8?)tI$Y&LfZKx>1at&>Gc~4^qlWNOllpQ8npbEYGd^k!CSY+6VQ2>eRSJ#{AHkkIj>oM zH=sv4j96L}?7ZD?Ay!A|qoUdCQ5z0ohI@n&{kA+*GJtQRF%~DgRf!>DmGq2G&!%O!eu}$$H7S+Er8y#< zynfjwX6jTyh8MF}TI-y+6j6=@B@DZIInX3o z*a;-@9m==`_ zG@Sn~f5Y%C!TFXv&;LN54cMf`^&j_~X{VdU8PLX-?m$9xypj1X8yKN7l%J)h8}E+3 zzx70n_2+S$;RI=ZZ?u)2fjpA)WT3g>2ZOz_^HS^5Qj`-cTb0>)S;dvfsSv|QPVAs$jTk#;y|-XM3uT~*aWIBFUcL{6DA@Fl5Vx+Jmv<|mZ24awGE>2=L8pl>3s7;QypJGBv%~4m=Z{B zf&AazFu7WC%4Q3}vVN>oNUzgkY ztI}37h=Tp0?)Pf(E-l#M^XA|h3gcRpPMWh`v&vY3xl)r)3Np|nYdRS)X3QE{EiP!T zRW|MVTO9l1Xs3JvP%djn^BAsMq;h(WMzM8S#AC^hM z)-$@;_WlF;P$ZY9Bg)TQ3Lj<2S8Ka_IV9=9mVSP4j9^3Sl_!0jFMJJ_W)mN(m3eE> z6_BS|@o8mKC;p{zmA-qAn-+jt*A8wS)0PZe%*b}z7?N!IHPm`j)TC@jc*3wbM*+Oh z`HuqCC#6F93j%S1Wru z{i4r|rpG?yMq?dfZfSk2N`85;Cx-pTN1qLCb(z*GZBoBtzwR+SLu^t}e{XFTvlLL( z1!LKxWj3e&*r^VzMjSCTI7bPXbE8gJYt*!CAp&O3#_OLQw#IvuaQ>;)ch~%78@q*j zH#XJ@p#F>vII|$!w|Ks~X5RKGz4nXbN977mYT7z?+(q}a^WX-rF~5q7XABed2HFgA zv%HP7$)!aEOw0O#>X0hij4XUweb^ z7eImK@&S50Hw*a~4{0f>B4s+|1`xs{Bisw+)uV`u{i3_#w|Kg7njp-fYv+WZ#j`f1r|ViOFh4Xu|NU_lY`9O$!H8Fn@cJ}pSfAK(zU^D? z>TxR@U36UOKNbNqW);Yl*+ML3?JWNFj#e#qD4kE< zB`mSt@|lZ1$4RX5!&jent=%o2 zlmxZRUY;SgWsg!u%+D92d17eqnR?p3JZ&z|_um`RF-!z5O7Gp9#h^l*u{kKf4>(v` zz7>#|0$;21mslA5Ev&g($*@$pjcZuoPAx6*$iHYl2y-3ojZWy&N&WsM-#K_lxRK-? z1`lZ)i;E?z1;h~ z0?9H-!&*Bt&f{J$EzX~SH~p_av~zI4ajgs3`%2Y~Q!gI&FI@*(7Aa^2>a9m&W&Y}U zpBb;yZ9a%UUSj=%0#GS`o`XtFmYBTy=E&iyHi1`9{#@h^X+k1sqr80GzH%EmUJq4cV1jKCSzM)+}R&QA>jzk^tB?nO_b^Lp{KMehT zi7T1v7moUea(F*AqlyJcnikwg1AkcENuX2yN1I&IaaLGlR- z4`_2E{S3e$mUoXBaLzqb;Dy>Hq>s{SQl6EOp7Q7Ism;!gexpY=4;yG{xNcxSzk_@C zsWkR@>a2p8^ksUK|4|vxko!PRv>bfl+Wd_2xZN)_G>lw3t1SKN_z|nqKbMf+O(we< zo@(=twqmH2D1U^4T^jAd0$dc|Py{;=1UnpIW(uPTsT^qmiUhwDo35>ULu@90Mi z6M~$Idl0V4UMcr=%uCab=Z5~fp1Hc;*$G`2BCW1wfuy0-kki9ezyIeHax~kuH>Q=t#GhY6 z9v$J3ew}=~&Qu+CPW;N65T(<|Y4FHRP!pH^yAEY~Tmy9z#}{hl(@Xk6tPmWSgG06W z3;hlJw!Z^c1XX80gfmcxbmHoeQUjY7xj!DacG2w1zV=pllPyO2F9>8=(z&WIo#*Oj z{m~=Mbsh$3Hvqls6R1f+fwWEnIjj3FcHZRYyZ>_=aVQ}Lm+Tz-{Reu#3Bf0@!=xT9 z+0)klQEi>St{PMNP%sd7Ro6mk$QEni9ZDhsul6tvmYiN1{B96(9|?cRwU_H{Qkk;$ zPp2iJ0SE%vPJMHTpa*x-a!Un3akOASPECk4GCyQ(UT_6c0FS-?(NR;2LbuM8wV}!z z3pUdeets5;VOg*xeI_LpT@P{P-QB0pl zS=qMGq5UW})~r(tziDDlG?t{!oT$IjhBMK=e$aE-QoGRq&6Ct`DMsi5|1-AfgXkVF zve$_5{HOe!CdUpgRs?Z(t*{_@+E7sBUJAJ)Oo6DY7fK`s#pXwt3q_vk4kVHN%6!Bh zhW#YQn#XQb^xni{0`~pzw$ZgGiF~&@X)ZxGUnWpr_h(MiWlVgu*nMUiEGRU77N5uPp~c{`cyTQuu6Ggi!`j0^kqI0D#Jo1MdRzLm$--~sFqJkyH78!152WEK z*rmmM>L^`xjG=wDe`W$yzpI{C>*>}f`%m3IoN3Rs*7_R}WJu^wU%C3D^UIemBkO!b@GFjQjjPg$X4e%w)Woa>J2J=;~tVJ?-`r=B%$w%b1)(c4AMuOjwY7NacvXHAL)RsPqSfavki204)VgM&ZhAMN9Ws2lHybA+*M^M5WH_lqetK^q=x z8zeL;Xj6xMO~{+AmvNr!(5T`alIi_o?0Yfil@x21KN}RXzL8nVS{B*&*j@50Q@3hn zs;`NW`EIe09n%-89}jv>eLq!B()tS|C6X;_N+3Pvx|!%LedFdBo;oe~04%FWng246 z(?C<(zoDv_X?#Wt3{@O9bHXcI@bQ5XS2p{0F-&}V!D;JHgdL50SJq$h6@DI>#-T%c9#Sz}iNc<(6R@0;{`#+YF%m_z~WbjznR|; zQKbY;nd?#7x2rf@{+y~F1s!{N;}UOg+|r}T)wS((6C3j2`mmzin@0VVx=fVQ@XpDF z5!3X53Ma50V{QDF$Gi&OHmEyabs6xg#S>;iti}v%5SA9ho10_tBiL51r46S{!YyBC zlW#Z)jdj51pi#hGK^xE`3tb1Cdjp=SD2IYDFV!Cno!P3O5S7tYih$vWT)7PRnQ(zz zt7!S&-MRN^?;JVo`Gw;R9fya|OL++)Ua>0@BHfL0$mrXN3vp}3IKPELLCCKytP#?l z8;UYlKwo@woC%SBmcjhq4U6JS#VG?``KzIMegi`zE3KAfetW{k_RvIeiwR@GjxzA$xU~IcqlS)j>nlRP0?^Y)sRlsYYgU#h5tEY3#@Xf$*?6<# z)bs>Z_AUVau9Ep@C%-n*f8Gf|;>~Ne`0<;;xn9ft+W%z_mOJptkB+j|i8U*M>R6%n z*U2aIRVoN=-`I6H*?lJO!7wLVZNJfKvnQ>FJx@J53qCQvH* zHv}r%HUl}DoJ-R*-vU=!1`kGB*0V&WJ(A}NSMl_cn5MC7JgIq*Yp!^N^D!yFiGD&1 zOXQ-f@a zvVG~A>Z1;K2X{o|^osoQeH)qy7rNQmws`Xd)R>Ya&iprB2=`Lr zjpLX%KJPWgBqdEJE}Ps+XIG%QF3K#A^Rd*Be&{usY4~g9!RJ;9^Jv4g5Dd%vFNOWW zjlnKmNj*gmQ-ut&JQmO`Yy`QH{!`w|4nAHS>6}|eNY6j;94Db8KHP|iHRZ=DxygNz zQVf*qG0*X?6pr-p&U)k6;{_WPTtZhq`m{h>C!3wO55Rn*)7u+&&yKdmS3?|A>E*vw z-*34{Y-L`)ZN;)|K;s})co?|s8C#2knG}7`)}vvWhLQ%v2w zA>Dw*jfg2D=My!r5Eq&hIY*YtT?b7+sH^#1Qs;E0zIyi9*JQ#&xOkt^9!wlx-fCEw zKuOA4%YWb9n)Lu{_!-s0iX{CE3SJ3hNZQ!?J~T~Zw=YgScO&p!na4S6aDFs;l)@_t zdg)I98Pd{Y4Koyep?A4gs~m`1LK3$A*fr^H679(y7j_! zFHtsyd=doMYDTabZYOigs%lFJg`q}Www)4hlV1yJqpdRg?d=jKG>F*vpnf!)ex&ngIPYB!DOwO^tv3Rd; za_R}JNytsz(sBV!SidrtTZtvMfPY_XEZee4WnLI-eCK4_b`lNiJoijymNRSTduHph8 z$y!K^uWNx%v#L|2{ahDKc^`kzw!J#11nfQ_zj{_23GFiTZOSYNZV*+chIA|7(P(mb7 zX}^XCzQ$EOjy?Rg<5-x1Ii*yFm{bUF;zbq~X0-kPE#N~v01Ph7^ewB(p1==&ZU`9C zYZF)jl+nFc9NQ#6(c~ldad{z`Jv9rZCRGMKl@j1|y+U7xHF0TQ+-Il#n+3o)@Dj>_ zC$|yOLyOC6(U~@T6&yUE)E{O|e@jDLjZc21JF`hB*%R*B{h_0Cb>C39u%cGh*c&z# zchT}6=vf_2v|z$hMWrUT$S0lF)-U9Zp4t6SitJ-7nY(IeBd;q11dWi24Nl&9)iW0Mqu3wE?{+2icYP-hJVKX= zqTRU0EbYpQ)nAWZF^h-OP(*4yyCcvU3VnGp)5jtQ>$}(nhJeJ_;e55;YuUkjt4RBi zKo549t)CUa({;@1llQUv#bAK#ZwO3rH-jIbsNsECN4c(bo~n$jclMGBZS#2J|ljFSlU7b_EyPOiQ;)m#0A1PUP`| z(pBTJH}%QOj~p}AMcfMu{pq+or0+Q5{nN4jKf+qNgKm1cWj#Pa?b#95cKP)vAUe?S zcDjYf3{e*`C^A)~Vf3>|thW7T-NwK~SPKU8t^Q(fV1BkH*M1&M^VEy(F=xrMs@Wue z{1+Rq+BCiHY&Y{VhH9^rIK2P95!v=!(cOi;a?vFh&!wI`9skMR# zp)`DagB=oZGkyl=MJS`<@#0h` z-r6=mwf?9F7#Cg)5Dk2Zgu7uh$D+K~47_M=5q{Jr3%^Tn&;M|eY+3GJhcrTvOPubQ zw%ej#IsuCd3#l@TT9b`JVrYX(>%ayClTsUcVO!()d1ZHm@uEV-+!&jJZeNr^OJ{WR ze6$cfI?VVpvb=TmT*A~h9`iI&;)%vANz0Lh6L0jc%ZCagjQnA9k$ZA(23L(L?=c^H zY!CH}ue&~|%aZ}lbf57w%g<-C&>l(J#JH&WP~u1L5E0AFxsfaiWxj1>M0Hm3=;dzj zZv&<+KX!}Iaw0VIdd-u)ff`Ne4{uDLsladU7!|Tbo+Z|WA$GgE2j^mBo?W?{AnLQM z*ITCdvKJeVFWPs#5Q8st|2!NB*lvmQWWGNnRl6DLn#X_isd-8%IlcWbD?_&JaB#vu z6`Hu3c+__ub%>76YA>lgHrH{hV1rfOLyu2!Hw1;~)LRa|_%r>#f7q!U5*0!g z3OS#JIj0XAIiJrJk~5q0X%10oPGgjY3e8z^oM8^-G>39X%$bohbC`3#_xI;7m_4?= zU$6UqKCjEqS@BPo2~PIXZO7T|@l(~gkYP^gMdq8V(u1<4c`6q3T$WIZ7_Li^G@j)- zgc2{&{gv7Q&!5qV;{JN%IVL}It!?DHwp@wIewg~Pv2!q6@(V}@G*hGBPu*qL-~+jG zZDwIO>@N28_g!4~-ABb0+_w6ef6SMjbf&RBPF(=$DXp1L&^Q!OM#_1CUIl#TZ zPoQBSR-xhonEW)rD_V>tl^Z7^jSZj8fS9s|`}(HPA)1@@peraZsGNxb&L%h zA$^Yl1a|-_VQkSae5Sr(kFkLtc@0Uu$RIN@w;#m1{5XA`?!|pNDatkDIw+p7}fv)Ej0z`<` z;ud5J(X~uf{62jBf@e=@Ka}E78m5YPD?B4vdpQ;M)P$zbXu9l;9H;Nh!OEgL0Wy@I zot+JU=bPc*qoi5QQIB0;l*^;^(~)M#WklE~FofLR6%tvtL6||f{M-i&Z`T)Z+|`lq zvZ-!t$O2!#V}8S4`rU2I4#AgE)BXRb)+R!%32@K*q7UDXAb{_&!iA*6`Ha=6x}CwM z4mtm;UP6g=0n>iTNVoM{3U+lUS7h>f0dI6@@0pR>RC;ja*G#vqL*AP^nc263rf7qg z7Wm|ZzV9@P`0 zDlb&{aJI2&Wls8x>O5=j4)T81`a!&Z-maN{_Iv&Xapm^Dmw|0Q?T@p2J7GSaqodiQ zB$h|OI>yKs9*?K*PT50!w;j135O*%!JIPO8^t8oS>K2iGLHHqYiyG2oKsnXfb>!Yt% zxRkltfbJgze5Ef%J$ln|JgUd&o~p0hIi8Y-DDDwpy^kfy(wUK@i|d3!e3N z&b~M?gGgRm5mqEgzdf17ZC^YL<+_4iK?n8FO7MUJT~bERAuLqj^>%f+Fm?98Y zcB!x)mRe>so$7!MvSgsashuZjNSV-Hb=jXWKoEet+u;;GtMCZ@;t6wM<)KTxbTdutv__UQQ(hsCe-ab;n0WfNIm|%{8#f@ zEEFy$E=6|PP8t?^^ES1^k6*?r8!qq_?ONPodS<#15MQ>Y*x|j5y}H;CGg1goEm?)7 z0)h5fLU63nJIzYUIc?3OQ(!Tn!iXIx!;(uP1<3u&u_#}O!C=hCsbT^KXn%bn*1d8^ zxFopoyYTZx>k)cBN@Y)2yCnV^;u0i1a2XN+F#{uLPy1=<*OK_O_@fk72Q+=pW_)+l zY=VjHrjJ&7x32K`R*J4Me`MR%`uUpvxnsLu-S;UywbQf4-ZpRa0V(v0P=WE+TtJ-Z zD=6|8%U|_4@Nj@OWPQ|(y?O~nH@Dw5qz2obO`=mk(5QzkDnFBn$fp!v3Hmw(?7CR1 zz~CXZJlXRX)P*kN>gQPg_><^Bs!S>q+Q#<9+hAdg)1RKdFR1k%{$x=C1p#K8xmc|$ zgX*fujTF!(h+NBRuhCi4!2bjtBzRW9e}?@*1ELlf4HyigT7t!dDKBJr*qs}gQtXW= z7xibay5<>xqJv*1O`pXMl%75o5x=c(iZ7lU{?%$ZJ4AA?oLntF7`mfPrJttzsI7;I zvG)%vc_k@vTz)z7hYqf5gmmQ7-zwedn;Tf4t4H(biDLCL-7N_BAWiz95sM1EF6HXI zrpX>iBlrOX+8eF7>V<=gaS`l@W(Fy%RCuF3cYqpQPRYH z`0EX6T7hCd*=JO=CA7uIZ@PhoPEkWJ^7aBULg@%@Pt`rcrAB7a8VsjS&y(LyGE^0* z(C&5is@&eC)B!2zK+gOoV=6@cyEusX&%Hd%?ZaO$x;836g%ty$QIu1=Nc;6Q>4!ah z(tsEM+tx+BG$+%2s)`$}2)uY2@uR_e-beJzrD}r-U$proTI<6RahMV zKZqs1^XM&`h(9}2SMk!646KI^Al`J(Z<{LsrxuMbzt93AjY85}&>vrLILgRKgu%RE z2;Thhy*#L`_;oRj&}&7&LIJ>3p&pWZKBe}RFC>gXOuPR)9i2U9Fus&M7-EaxMJ zZrWni6eAw4Ikvb5Ain;{vQ;A`eQP_m``d!~ayU|O-N6w)+ZnHY^R!!lo;G+f_Q(|; zSloSj-{i>jL#=PtDI;ng-^VXW z(L2oXvV?-U+rc2vVugY4CUp9$$b{l%z;~!Qe=L$!+h3ULfB(Y)YYBh2KWwwNOPT%BXsfW-)gk(n)08Nx z?#C?Mzhk`WXUC5-x*%=6LsT>nGx<17oTi4l7Z^jFRzwsYJGe>t*>?jP0O*oIb^LpI zB%|S40WHbQco*m$X};R)q8JKQ6%F=`BrAR?GsrnBmCcr#y-JFX0*4j!)up_3WVEt+ zGxjpxZ$?x6QD2|_;w9)K9zcUEd2wJYmV+dX1CW~$(ifb^#p4+c%&S~(UA%(Zb|h#h z7bd(5gV^1q;9Gpnh>>lX$uv0eZ}hy@+uFGu*ZHs4|2EFnl+My{Bqa4lRLU;XxQXZ=a>(=~Q)`OL z@_zv+K1x{~5=ybii(wx!i+j*&nc@}( z?K8Ui1G@JR1%dQAtOiBzhk4s|_-^00UHqf)A@_6CguLRP{x;DE{Eib-r+SrZeTCCZ zQU!iG?%!JT$f?AJBNur3bbR6N1PXKu0VXMv!4Lv+5Aif;tKCRUZE_SLKoHfN`KIZQ zpL>VDl!9A`y5iWF5=Pv#`g?^~PEFhtz1wqJd-Hjo=w-!cI`iL3>hUobsI!Rk+{|Sz zCQAW*wG24l{gy6tSkyYXy{Zn#;05*kqta_lLEi>x*y_n<7Q7A0^j&)}lDR46(UiiH zucp2V)ypz%UMSDJJG6moQ@PsuW`01)uwK{ZZbKqJj)=14&Tx&eh#TH&2lpewx{Qz7 z^ISY!cHi~;wY>iRJGW)vj&Yt7`LMZ^t)X)ROX|Z6i2fMXEUYOVRL*7~94S$Xd_6S7 zP6r)^-q&u62OBR0ICTP=V&-nRpx<4Mjzt%D&z`}8l>iM(&Pb#p4Z5}@Yw&7V<`~#C z(}hvD(B(5q1EMc!U@heVfkdT3r&`GY9s&zBkz|`kjUzd}g8-0$*ZSMiZ#x~G^;$PK zcY#&ID~}p#h&l6Mc?2w4*MrhV4FV+=lkYXxb?3Co~IUG zn|*|E2yl#z0H_^=zF|bcQJ%-Uu_~*=6{VVh<>iJ+(%RDI@2P2QE1Qd5>**y#xeX`T z&4P-CWnTQAz|%x+LY}T{J5y)gYGZ?w=?4@(UY8c8PUj}$Z)A3e zraXznD@aX!Kw_0gVI|IxQLPW!s$DTvRvVP<*ypzi=5R#`q)$ZJZ9X{Wc z_`TN_WEk{pcr$Z=1W|x72JvJefR%~gH;+>r@6(p+X86bx>Cot-y{^X@j8^x-atRVT z9uW#9I(;$;LVZ=+!j@5WmtGY6M(0aRrqcNfvjyl1Q{dJ`%4UddE&?#2xG9~(Bu$AV zBdqU_WJ@bzj{h1!$CZ>g8|2Ef<);UNWJ6zVe`ySE%ras3G3kQ5lLiWcIF5f*|0Ts0 z8RhY!!5-#uFQYbHxWsidYY&s~$9#+R!hC9-e8~g5p^er*7IrzjMwh=FV^mN=R)zC! z8|SN7a_4j{I>hJZq>{+m?n5p{&^Iw6g!hh>ucJk7Bh$3;J>%vAR2N%Zro;0!$J#2@ zb>CcKb1*S;Jy)z$zQ`(BLM$l(^6-xl=xgg{_dMw@2CNkQVo#^?@tbF^=F2|jcf-mu z1p@#3cKotx+M(cTp+DC`)4X!u8Qu-Bz2od1$0^3FY=$Eyu*lNSE3d+IO|vCh$D1~{ zI_&mfaQS5ck1>ZpOCD|;0hL6F@)>g)8~+Jaf7SYc{|e{@m+CIoNoVk?{wAYZ_7YuR z84@Ye5sh^y;)ZrOOirGSyo{PT$(rD2s6^QICl#We&@5;(S1%<>aSEjbU&Uo-aU`Ma z>x8z5t*4PUDA54A=3pH4XDe{0_U~|sF8RAz<{jyv?ku%$GoYGfbCchYi0Vw=BJuB; zsv`a?%FMuT7`0ovjkjz%RzK0FDxq)dIQn^s2c*)GbI-GAYcFt8%;{|Ie8x#nM4y);WbYI73|U(Eis4)3eAfBGB~tno4*so61%ffre=h{=@rg?L z0>_#pc*qN&&@D>R6=Q=1B)rfmoW;|%YDVPk=Hobrij*5G z{stfNJOk6z*eqGf#BQQv9xB>RNI zRO@0Y7U(~Q#roVU#gg@M$_s8m5sSSdBM7i4w6V)Hzd5Y6y7)Z?Em-nt!O1ejxFcLecMaK=%+*pW_uAZT#JKwE7*|?yxj(7a_n1gBr{) zm-O!pj|x%h`Oo#%d|tj@SUK^11-4627jA-INuJprIUUXh}yHX`UW9pTRR z@XWb_N{t5FrE)z@K7B-a14@5>ptUtlftV)6?mbazuhwx&Lvkyw8un6=KC^OoFYx2V~C%x&8V zs~b6HU4_rHN9yiSI8r*Fw$yuMbiwRkPI<^>lAmovlgN6sy+^3#rsikiH??xS0%h&k zyu0jj8zk*OH#`5rDlWW_-iHZ;jo!iQ6gSOqBkS~w*Knq0gD*$hZIgy)@_Iq+hXIDn z9~Lb`NlDyaJB1z-T}{)N+-&Vb2n`oeW%KJ#1A@Mtxhb1}Cs_&`T}N*+41&_*4@1n~ zLJ?uYI~sb7=8=FNG}0xu4Cy{rYHDa&;nCi)wVSOZo=S=SU7uA_7BRjYX*pkY*C#*l z9Vt!BSk&s(b%hUOOCmy~uX>jRjysw*HKgk?Oc}{)(pX*(G1JJ4(*{jRn^s>7Y#1PC z;R4*Jq!aH~YL*@_tZ1bhPopm7_f&KBiWgx4=kP7lS$1hMD`{2u9fvJ@fv~V^`)n{( zo6xs`Jr_Y7FFRuY>8{6VxvD*NT?%B}$h}oHjrt*qUly?$ca<7D@oQ6j%7O>IV zAvR~4^y15i*WR_Q!7pzpWkIX%v|R?1dp>BH==(|h5k9IfE%vHPw)5!8mpYHWJsBMy zg<3fb{=Vpo#Yoxo{-YARc=4CgnwpJ*Nlo^dIeM$u5qNYT5cFC?^i8Bz*~3y?X2&=Gp&^r zuol_IFMlf^SQabS?UjoLCo4u~g+cQtGQMoYK8eK^RSujbxz?(ftbMNOpfk%;hyfpACu zCj7PC)wi9WiECL_4U9hQ$u|JotwK7n2ifs5i~#*)X)V@{Z%iRv3`X%pM!e#VGDw7h zv`gL@B}2N*Q6COvjY1Gj(1>B^@556=;WO6#k`ql*V`P==qC^!fNYWdWxo%#d?J0Ly zhY~fqk*aPxW(jsI;DH)lJt?HdH z5|hZJUq8YRQd?f^UsO!|=l^{PSwMd$JcX+5YC^X#Qklcgz;1Tjg{#w6BYlkMynZs3 zmS-$fzmhFTBLfiBRZ{}aJ-x@hvPGx0r9)SFo6F9mb;!?H;_1`;*KFcrY&K~t8I(^( zLYg<1RJ#-%CLyQ2FgRIrgsgO?(U%h^SMcc6X5)M~OE7M&eCnepX|ZvN*lIYoyevv! z6$;`whXY{bb&OOqW@M*!b$DR4aRlX=b+I{%KeWdSV+kTddW>hr$cF6pR>=|Vo*A0WMf16v*C#yUc6 z2r?MffE&;Zb{e!(oG*G*%m?pqQ2AOHaNq~h(b13GGDqhspFxI@CWmz*MY~4V^Y0;( zja>R#h0ip+c%tkqgOh)|2PX>3-E)7^XT-1i@|Qtt``{U5hR_sgRU;#hmv z%x_Tra%SyOw9t^?sLytvRb=&2(r+UGUD2f`E;_$!W(kk5&w?iMN?E$?0#DLw7U+@Y zFkyxWU{f}n+L7}k-p*l&$H&67$m|u|sW$IS_!nM$q(~rAIdbKBPy-qPZdVHOa zwIKY=85yw%s68zxXnpit{l#sZ&w1pK zxS9*A7!WNeFZ3A{%E*s=_l#ckt;ra&X=GmVLGM5bpe{K3&zlXM5oZ+U(pWK2S2ekXeo>3DN10oB`h0=9U7fXf{oo_@!;D&5WE=AiG!#Tl!LDmv89`G)BV1`~ zX^(vWh7Gk)DaSz{C_m$Pm&XEmrUy#VWU{tyFe_hV-^K%bA=YIDmX$v-oT)7%s<9we z7@L!%YxzSb7?akiW*mB-`a5-Do%HqdU-& zEUIgUD&Q2BN@sV|xU7e_ub}#k-MX+I5Ea#WKH-8+jK|ZceV_=1tvV}a zPj46a#I@m%J$`k5aFheJ)+d{*xkyS%2w><;I$YwFxZ1f7zC|0G+nqR!J2)h z!mn{?ySj363kYvRS)!j8Zeg93fY(?S#-q&^{mZtu>l8|c9w7aWqc($~Wb zEA{vjxvmmi)(uVYaU$cA`zYxj;c1;K5lt zy2`w`gTGqzxs8hg!s$O1X-yonvhxp4n5Ltjrkum3_A+MTIA(IGR<;(^l*E5B2MsFo zC%qhAj=H>os(2p5B0rik0oqNYRy)umH7WRGPx z9QWE-c@7cOc0%D+7-?!+Gx}Uimx2)tY@c(l4Bva`;rpVZ0EZ*v=SSuLpbxnC8y>`j zM;0t^J~rCKwM1!_MW#KC1rIs6Hx3#H{EXFKZ=xSy#|7?R;OA~ij=EOg1`|iqjMzom zhnxZ?Yl^ojZU#Md<1jPJZ5f@7&Jn`nW_zquW82!UrvGGVVWLfGW`;w*Y~u|g-xSYn z&9kGO_p!kjzK)8odeX13Q1i=7S_^WT$sAF+(*>>mFo2vnY69_6=KzbTPvByM>0*56 z059HcA|$fm!pYohjI_rY*jE|7ym}`&n@aJaLg=MyORi6H+ZrV51}qj$Sgf-37L z|514yQnLP0xxYL3YX04**2Sy|@p;r`dnBRgX5o}WE4TJpFL5>mQMhz$L8e+ymzt`D z($QfppIe0>g%FBR4c+Ouav9cs&%2YpKbPyqm2!-JnE~N78pw<7%AVEY%z`1KGEA6m zWJzBYF7$%z|588`$o9RrrpSmj^WhLu31F*KHf0WLu-*AbS*d*iT+5By^ zgfd0pSYQkQWb_i+tup<%b;24-@k&bH5B$8a(oN1m9o&I1wRLK-Isv;(I{;bCAZ24D zscmr_1`cz%Qa{gNV5_|qi64WXu?ct7-@5nyi&HmqK;=_Sx$;E!dQ%w}|Nb^@q@m12 zs-(;Nangn6E@jmo{Y>_#-;mKVDj1I)3O&1$wFfxjfJi*J-UD92d&8~qG49n4xx@UV zlD9|%2G;gp@ijq|KAeRuqruM?xuAOa(3!=}8 zg#{3en&YyjTCxQLN2UQ9?`i9H zw+nG2=+wp}UG1?+q8QV>m26t!Cd2M!W~EDX+iLPkgnjnvzDy6OaXPj`e6}cbFVbP^ z5K#hlQX^9UFa{&c;KLrXmHF%9g95;KapCJVfpM2A*^6kJUk}Gj{u;ae$gxe%fQvOD z((QWJ@?BvGEk_)U#`waA^Ce-W?UCZ5OQ**pzEzM_&H?G9@xyRkQ~v;pvAIOsxsxgM zt-~blOU1U-w=wB(wd&=_*&7t@P7kxN@Mb}p@B054lWXn!5s^QqxO!E!nbR({Za03( z<+U`E?O5dSJPOl=rf!Y#%@_jIm?`A9<(EPc*cpdknRjT{Y8duN2kb?KpRomp$38WV z*0!g(L4$<=_t9wi28)EROkLHV<#A8wru1^}v|Dgp#UsI|Zwb;>h-5pN5^<{%Cu`4e za$n@HvEn^|ZoZo!Wr)RusLvl+U$sK7=^mn&j+>lC`=k+HFW`Th>-beTYIf~* z?7M4^{j{l>srJ0QaQ9lWz8PA*tU|*^=gc9mFBp;C*<$4P zY8wCJq@e*J1Ivg^)>&WY@TH_S7 z<>t{v3r1<05$Wfo7$HD^n#^piHjKA!_Kec=|`V|2s&@qmZDW>?s!{27IpU4&<2Ohj)(+?F`8gHQ5yKASv^V8lOpTDNTbWhV*%mJT5Ig?ZR}!BslMDjwX92zPU^g*ABYay z=5^n}2b~-{ZtwaK;l|)DlOMXC?4!90nezl8)oCA53$Yr`{QS+d7reIaz0d+^hs{t%>O}v zzdfxW7F;|f#a$Mn_|k6EAjL(%LNUrcX=zaE<5p)|{cRnfX;MX|;N{)#>y8|zG}J~8 z?vhFdE=1PP|E?1V(LU;{`Xj<9LA`$den$(jc^)2+JWGL>zYLXl>b8ZLU#_80gisW) z@~T=^5qeYj*Rnt*0|mBNMyL}zoS6$mrBmdLATW_hrwzYtcKKdpYAub~>S@Am0NECvYZybpzRvJI!W0vi}+=4b`G`9k2jF|47z3s+Dt6DY` zH`HrmKO-~9b1ibR)4-$rKIKX4bt#N>k|H%Z`XSC`Nsl05B==t!c!=AvfJvmtu*=Na z`nc+CbHqQYc3$C|W!g8s{U7081RDH~md^qG@i6{3$XrmL%73*hV&$}jb$vL7bA;*uxOVogAN^Du zH<&#+hb-s@w=r-2yhOMG+2G9h>**$R8(2^ekcGD)M8F-e!*Tmii1-Tv=8uhyi&&al zqR!Vg6!|iJ@a_12EW$O10+E9d!kawR!Q~Fpd2F_1QWC=AoapZtG!&titrO*& zI?~8_J=0jVmscgDL!u7Ww0nfHl5gQ;iu{)B`)Ci+l!aKToagbnhyh-tzGmu3C}ocI zB|m;Nnpomt@}OuS_&VQ!BRLBF{nH!Ha%YR^X@L-khWPVT`j;tu zSKnD4{yaKfG@mBD!f}G7LJGm|qJ$Y!bfzG1tY{B#rg07H^Sf?^V(17G9N)%1DcV$@ zvC)UUL@U0u7|lp(PW{94>2ie^sG{2DCH#GX$@;zD{fRm}2A56#EQwPO1~?C)?mWD1 zfHePHot`S($@q_I2pdffy2E2gKCNW`)H_g`5&3qnT(iFInXu7TVH9a=Pu2c?M1451 z=%hsd+*oF;S)Kjmmf^6dCAVN2A)R!b{zT+_k*-gyMp1WsFw9-QLdEy`a>*Ox#p2A| z#a$`D&uy}N!IsO=QE06`A0dq;?7jIR4k_FwZj*o$C96WqdJ%h3keADYPicgA{qN`K z3}14fih@OSEi@M7N<$s?uw_WOx5=X8xoQ%nngJ@c^U8Ii=Wldj2KjRo_I#X3$KbF1 z(&tSOQL=hS$c*Cu7(9|S0lxv&1lyOoVTNajIBn*)nOaFSs*&HtMBHXJzKb}7y|>hP zY+;2iEY-ihTw!LO+JV`IMamX!eBE{0K5I=?Z%CDvQ`4V_J6e=-^0h9<=C|C&?VCCb zXDdk-lI}S-{WR4j7k@oc)mv^Dj$G*jg1Q?qQb08$xKowW*L71pKECx=87T_&+c zOW8xU4TznK#4p?8b)}nu6?|bcedjG>(qUbuZ;eK8@p#_c%m;TPuPr_$+bJSqs;P8` z`@V0rMVG0*{iIzq`BF%9c6vEg;(Ru$DwtwN+`y4r zZTa%~8uHsEX@B5rQokSFH}LXU{uwD=7McWN7ZDtZRIhZfbC7kLcNwkRbRF!#;S*}A z;h!&3&O+Y1<_Y^JI|$jDW8S;Gn0GrHye}IXYUp=ZqV3<5jT$jBUMpLCu`6Ym<92l7 zG{X4$lauLkTqa82;ah`JOF@x-?r}yP=>nc7K+d+rC33(2E&etkxq+KqG@Wcx z?zPOk#nWa=KA-+W{73c3)>*aPq(lVTXOghrFyREPY0xF^H?&;b2q=7EIwTL0lrUdv z|6N8mdS1xcdW^M0g#Dw+vSfFmZ;%{>F+(}H)(_)Cv5fLt@Zg9f)N!j(K62W<0i zl?<9?<3wRWsg<*G60uXvsqeC=(ijEZ`D6r7+&?eZhIh}{t!bP6Cff%hoxF-B&&|l! z=4fnS4ItKR|6XpvJl$}YB+mN>e}*1S_Fdq|mmeD~=4ZNTsao8#Mtn}tln1IeX)2== zl2yX+b$buWt=2HZzAGppOjE(G2f;5QIx7U(obOWjQ*t>17skOnV@vRP@#{ZdoMUX( z)5aJsl!+E`uVmH9%FXIpft6JBz|fiD#g%_l`Xo3(3iHRm{#JSQJMYKO)+N+Qn$din znPG0qutBw9(~&G$WNLG%c%}J%_uLkW<1m}{-AMmUa=*Xb)J+EKA=`UQZtbzbGHw>9 zF9MHi@<|%XUHXYqg}%q&iedY@tw|+711+`XfCjX+4?=lpK}NK!qPhXaiz1UovL^Wo zMVsK`0?|NEqP8i*O))BaPLnY`a{KmYy4?5EA8o#KN>q1oG_UM2^i6&LV9D_+>(3O2 z*Ur}6K_6|Vpbsd`kQuxhTS)ZU(#An1I%?B6yRk~{4HMc%!1F{6SwXotsy*A398IY zSk(ZwO^2x2%}Vwm%ScJaFGWn~2FmdPDH)i@tQt&TIEP*^?n=i!WjcC2xE~P6P7;Aa z&C$n2((oKHec!XMhc!n}#rJfkLqX}aI_X`*Rke#R=xWZ&b^WbF59Xw1H0;iAu$k){ z0PTU=i}bSzEA-bfPt!6^Ze4p(o$mKA@5+Tkdjo)z=KAZ)FNto_WCDAlY>g^LS-S#v zWlUGucdEi5vxs2mJQLFJ12fYqb+X~7i)hJ>v;exw7zW6o3^ccu2iiM?(pUTG&;mT< zbJFPK%jDwoLinh|^yQs~mb%DO>N z;mZnl_lobtJS_>m8522OHccfEVrx*<+(&XcF(c&LA4b7B*El^YayM1r61rsnLi*^c zEH#&KY3zt#OjytJo)sV=N|R_c*`fy`=`IAsIe(%P1x|1y!6d(fbER8`wOJeHd0Kpm zjHhjj;MolHp|2jLG`xGHE}`_-KG%cW(0~+u=DC;xl5nFsz~p~?c_%#fPe96sx(f4i zKvull+s4%f2D$F0yyO0OIZHUDB`})> z=6mHy@BT+y#z>iaZfUVnE=pN}!GC?w9|AyU_Ad^VSANH^DJxG|7c0}F)6rzrkVVxO zw|u-oc`uo%LRaWh-mP}8)W@>WRngyuEKwtNzEe%@(Ayci7j>b!<+213NR6XAiNg%N zJ?c=n9i+9ihd0YQJY>p&Z9MO?mXj864QfqPJaPRw^LzU#v|$HBzQC8onkLW&tdkd` zA;bx-HbF&|5kvL29(tS7>y1glRm_*c{Fhg#($OGq!9~pOEs3h=LZU%SB);nCX`8Ft zAh_EI8j$}EfKpy?NEs?1ZyAKCUtX;GN#;nQp38`*;2#H;hBOWTwX*U(rAgBbxk2=& z6%}M*V1m;xCstPcinA+h`8AiIZm%g$WwEy>;=MfXUkDKju^;_n2SC^gu`;XuQBBai}7GBkPvUjCV$}8Uqw|+h${TBF2b)pd| zxJQ>R`y0Eo)28}Njl6A5g*p>R@X+?qQN)_#&ir^>xK>KZ%fFP|}V`vo=Tb`7y=F@IHyQH$-;T5v{uo@|=zhPsDh z*4Fr~w;rvp(_ahFjw15HX>>K&j?E0Lwy_1IkYubi1wT(3t-f8G%+@2f&c!mXYe8eH zyG&0jj0t~ZnUv`=th>K6CN^AV$JlG`Fide4!;xC{XPum!BeV@%T~uVu%*AY>7U}6{ zHUemnfAprim1*D-w(bM8?Zq{n$j~;mHr&zTRiN}TDK@0PGkG43hTKkHid6M z^}}jLd2Tgvr9@ZfOj;fmc}kRW`A%qGXsJ{$Z14X4Evznl!M?(L75mp6Yw1wH=?f9# z_=qv`l^TAz=xc8zIwOaem*l*UMR+43J5!X~O;~0whXfKEeul%tn+|*g_x0jKH_I*X zRqqy&7zz2<-p5Erp%4D*P|ix@0X@Zf{k3!8mf1NiMz9|x0b0kXX(7IdnPu|k`Sw;U zC=D{*KE)|U^%wYV^3RZQLq#4Pq^VL^@Ma+gA>84?c@eNd<*n}SLXR0&-DMwQ( zmd*xm3MW&lkL{fwFtlHZPoruFxh1j=jHk5i7Ze;E!#k4&i;9l%RblYp-v?B=Jpj_l zKWydB8~!+1$o&XsQ?l|_%XmGKk{xux+wz9yc411ePkYxK(~jO_)^|_fE&Aq=y2H20 zDj7zmMgeh7lplUl)%&A};?0=L5!Z==yS+UtBf}*gt}|cEJnFp27~(MSJPCkcQLFzy10&ns|?fyBk{7P zkcp}p=r-ve)nuwwo;{=|MM? zqz8KVeJ5?6h^~+9DiA})1C8Y%FD6r^DOH#j0w!XW0Bk+3Mu)CvgO$6K+ir)Rm2?J+ z+Pk)_9^bFT&ujvydvE>!F~N+CN{OmPM&I%8jaQkFTPV}T+GkJG-S;7&bw!e=!}uu4`})GfFIXeK9yFK z2NhE}f^AEbB_u4j`SO~26#S@kaC1VvlJDxq!A0x567vZ&>w}+H3;f3a$2;pT#kzUT zn)q(oKUffDl23SU(=(%u%1(F|EO9Woph{n0DDd#ltO1s+|3VvNJQ&ZT$ldlIn6 zVFDUQ%3E^&EK1?O-~L`!A@)G;Jk1*zAJ2Qo6dqs-w3e#NUHX4Fsn3#+<3+66k5dJ< z7U|fAgu%xz3~{#5PpbDuBBxu2hJ4uYn-bLqBWFFQi>Ji9 z)1{}u5?v7P*n#_A`ltKywIR#Fn-|8%Z$;AinnT>_=mwo7Le73@=}`5sg4p@CE&9xB zYNO#HK#7uWy@&y#YxcqTILx7HTf+mUey6W0>Hy)~?9BWD>crny@s%C*zB4w?9w~5a zbCu{{j*DKmR%$LRN27oz90$cd`$Ox=>KO(z!1`>>s1&hUrU%gv&ZiVqeCk`s1i*h# zU5!)8_Ug&|VUgc9k{mkrZn(a?ckFWG*_~QNBe@^in}5W?dm^niFenD2B>iVtbnzsx3ZMW=?`ScJw)V7`F@Zzo>@#x6l+%uO@pTA=3;MxmwL6KamIKw~&I3TNwq2}ZEn-Ke%FWJ4@1>l-yLT~T zjy)W@CRsfuFhc+(lf1bn<4M!KRw($)#Lo)zS<@1;Ojqpjs*%hm5rZ7)%VTzjD&7}H z7$q@8ZS%(=fg4l)K~H`4`u1Cnu~DRuut?+M=+P%9wXJo#-u4ymHZP5Fa2x!`mBHos z5dcDhyBPUJR<^BMl2MNa3q2lYaqtPvTcJFMGX=P%XNW| zJB0P>aKBuLOnq z3bu8GRQ!`G2m`zxWKkVQK#~*v9KsD5t^8dB&7as74I!4h3`pM0I@RD<+|*T9)kj)E z=^EtqNv=L4<)T8%W9gZ62*FaIGU!++746n{{B~Wzp;|V-HdDxMYB*aQ1^!*ZATI48 zZg(?Zt;ERW(CCBL)VXwme-(F1vXqWz;5^G&^B_C6WyZtFDie%c&Tb(z`&~TG-!YL! zm`8e_mtDw*_Es)6j^uZ#RKEXQf8{@gP2Q(Pwk`GJPpZ``5Wa=gKINb4;}iZ-eI6=! zMb{Z~#yb~@GPMZsyQE()V4&&c7~xR@4>KzKynw3AJI(LN*H4j3y>?XdU0KAsM1qs0 z_{j@rAl;QIz+j06-!5Rp*DtLo>xu=W%4vut*NZ>d^4>Jz9=}S-l>fWvGYVWe5=Us?R(D6`ktg15!vH*5Q2k7ro-Wm zwfWbj8w|Y8m79Mon%(*jDbc6vw|#SGjkkHTu4G(?n3_^PmwL6d485^4DMqF?6-oKH z5NgtTEd_4K`V4ZRdV@qN6_0&OPxYbtb1R?-QF>9R(AF0`rePNIuCyzc)3mA5^4Uh! zP|YM8rQ$^yd5@4|9q|XjadVabX_Kz(=9L6;kIxcpPp&$(7^FCxQ#xP~;6d)La`L+% zo>XVoBK&=wh9&!UmrM{Y1ot87U0nxslMfg!Y8|S1=W1h`4A=?`oWf8`4K%g&+4bql z2brI-VVPAcKpFE0e){l%F*;)}<}yRqFuQ!fpOui?BI8Tq22N3KtTks6cWGrVWun70rrz)8!ghfAaYhQfQ(S$2kr!=-rHWD zFDk+uEB=q7^Nwcof8Tg~v^A~ut;ULkmY|BN-PVjf zYDTEt+C->Lj3D9r%kSj>oSgGKdEWPPUHA36C{(-u0pN4HK}!>)YO`gWVAjYpCx&Q3 zYR^*Z!@<^Pu_q2qokk{PMgCe!(yLUpHqAvIF{s}?N+MIjuBGNI zq9dDdu|4VI(I=wcSK)0?jwik@E~&>yMQsbx?%wHp-CMza^X6yzqU)}@W`J+(e6CNn zQK*a-nkt}ap8L1{{A^zeO9ex5Oa{#zLup^}mjnI#qO!7Oy-y*;A|WVgEO*@#T3c5p z;o)*ezQ7L)ONY|G-Ghem*q9sF&u-rx%!Ib(cTCL`oHbuvbC8J%O8ecYzEOXxq(xw% zMv*dAt~~gMiR*+aDvgB04v#N|AYj)!u%hN4T++G>r=u~YphZe>xks?W5zL$V7snZ- zkwE_}effOfM3Goz`X=?z zqKBze(Q^UK??7o&b+7>b{$ZmroNo1Od%M~fX8Z~-l{Hpfbb zFTa#1|Agfb)doN}R~rR8SP$(a4&hg=G0U(knF50Y`P^c?`=UW94<0A~)1%hwMU*Lk z2=~3hO5B1RuO%9M7eQW$T`K<6b5u-iP|sYiVfPy4Hr@NXh2}*>{p-@!w_nBER2A$j zy}A3#QB|pP*-Lx8XR3%2N~x`QkXhUY^M%|+P2~7zi{Y`OqUeZ2jZ!e}+2^)8ec7SM zW+Us;G)NmpD!13sN7#96+@j5r{Nx6C#wc#R;(g(RsbaLLrQy-6%=*h|Ao*t*8D!bW z4lR=~FmyYAkm#A2$huQiU*!D%D{+7EMrj7)t;RWO;&!3~#dzdX@2;Lluk|p_Ts_e0 zKGzYQd%HqxZa-`4pnd0WVWHB zM}9UGu*y1OrHXa@3EBhKuBYgoX9xU@m**RPJ)n8*`_1k>mQiKTM%9viU6(<+79GRL z+Xa#W!jTHd&y?*EM+&OnUH>ammr}PE(J)gNwI7icgW+g%Hc)%>*u*Gqo6pCv3Ib1lQ?|$L*K=Ri zw=dRiB!2)#W+~OaFew6!707&ObZ@te2?npEe$W?PJY4_K?8SXI)lh2>EOei_NaPK# zbLP$$>6Ul%)doJMDqqAOx@vLN&Olf^W{M1ZO-<(c*ryYe_yqQVMr#PqF3lmC1dco& zsCmMgAOy}noTBMXdNmz%7*88F_t>O$MHDWHVb76^HK z&a&@z~X6?j6SJMEJl*$Zb*(WdVHP3ej%?>Pddq_rd?QTgqkcFi(Bv{snrt6xkJkC6sC zGGj6CcQ0e+7C=LmQ7=q|!HlJlDvqOW*#@H|6=IRFN(pvP@wn|oh@eLr?s`L$k&%VD z9Zu-&Aa?U_EWX6T= z!pw}z*mUfNbGEYW69atl>){rvf{h5PG9fLq4>|FOS68wH3dD|{=#B588a;PBrA4JH zd%2v`-z7k+T8-Fm>hez%h}`<3ka5lJdTmQpBq$_TOpMd`G!m0FKLdiscnFauY(}Ia zG2r0-eNOi73Jxp8p??aTbiukI$p|b#P~Z+woHo?^)XdXKhkauVJ|6$dK8^XmKn?1 z*qI1(b?+9h9on)og>{Ju%hWzCZ&ZKI(Vf|N$;B24f4sELC`thn*r^Vo_D3<}U3Kq5uG4>7MS8j7HSsnTYL zYhScNW2YPCw{Ih!6^JM)%<&5iq&<4=n@4^9uD2QZll7`J=pm9J_<@nf?905}m}Da& zx^h0O<^XdZWIUFiDk%BoAJ)7~Xc|9lL+})q41y9CF!>53kovxQddAr(Njp+Fe|DAd z%2$g1=+=9dq0g_bx8Ckm4oiytj)rQEOo*X2e2J28IbVV5m1WOY7m5xk=eBH#u&{^k z2XKVp!&`D1pUA)!-P9sGkdJ>_z292O^OJ1Jg9RZ>mQhYtqs`b^8(!$j!e zc)57$KrI3rl>YQ+uw}(1Hs@;RSOSTB&x&oQ9H zZ#v}tmqp;gS=_O^%aVN6=0A96w5Dg4F0SfSv)Kjikqbh~$@0xJd$+S(1!4u^demGa zfc_zwmUKX2aaKmh$yr(++O{J+YUbqZ1~hab&d=}06Gi~fz(#U-coRJTBE01DsncUy zjBIW&{OAPw2Q%6xv5;eepkljO7$Ec*6{Wz)!V%&0YOx#12;+IM;;GIZ|!# zGHPNPbbUv@VLr{y4jP>Nr)Wp@Dif~rU(HiZYF4nkyp#ji&EzYkeu1Phu63Vp5_AjFTQLf!y&XO%F`AL%c89xrL zO9R+Ydy4zl{YJ%h?$xKx&aQs}gKFZ0qV@L<^Xam zB%-tyfYy-E0m-zq-w5r0MmQ$mNmwkh{-oD-@rfFSm368a2!&<}~)TAFf7*zc6-Uahf0C7_o&!Zk`FAhB&*T|F^USUa1*dm9%~20L<&4kb z%?C-v^`8aw7nVU0c3<=r+wH8wNlRZlNZx&-uY$h~3eIryAmW%71VBvHdtN%#6A@n| z(B9%D>vd6`Yq3xH9rBih`IK-+^tzut&FlB)z1?e0n}3jUMRb;_&cm0T-=6C!G2EDU zYMyNB8##qAhDB6MBW%JK{|7i@@&(Vhqwa)`C<+$x;@a5=7Wr+9Rh9z(o>^@+o?QC= zetH8MFrs^16DQ^$zpdr5qgc_geZnmtOJ|JsN8Pz6sA52GcXAy5K)biMLOq&D42P*( z7!hla+1S?t)oRaN(_%1(g2c$0XbQTKh1Pp`jjK?X8V-#@m!X{T_v^H~199w)(P1p3 z-$s3Nk7&42({I7Sk|!ISD2L4X_WSI2+3*=5E=oEPaA==t>-|d&Uf4e9ZwseuZ;#SxkdZ9 zRHxSyJAT!TL+-jS%bTpF^iHwDMDjj6-`3IJcvOXketrKkO+1HKBYJfhvy0hl|MwnP zajR62t4}RdX@HOVPjp@J{=FHU7lBB4u-6VcXy&5v9}v6FD@ICqWoneW_syw$;|o+J z?efM~QRH0qD&^GakntEC5e5}iJWzNE$@)P=6-Z_gua0bQ-fxud;ymor`D^Or;QWV* zh8Iq=@VANi_sOp1R4F|?p_F4tx!)jnBJwa8mOevfafk^eBj! z{Gzhs;a>2qN;W5U-s|jujhqE&%b<@xNZJhYm#kcR6>U|WwIFNogC&-x^fhN}k05}; zW$N+Z6YyXBvZs@gCfPjEHnVg&XI&a{^wjZ}C)KsJ^d~ZT6>rrD>OMUM(P?>0rk{0E zzOr#_+<=jRdQ0P4x0@>rJFNqn`N(y zJ8C`|C%_@Kt?1_9g{7Gio3RM#YbQmM;C3(Mxmcdz+TLDZmOc2pxw0&P;rGVjugGsAoGk?k929ZUq~Rrfy? zZ?(dDPP*8x9YnuoifJ<`7k<2ohI0W~+y`~)xP&9^PSdg}r+=K#Mx5p{9L#wl5vs(d zUeE(sY?d(7E~<^}p`+H2MF)y2Hbd+8LM| zwJVM9998pZ(r$O-37wX!h!E7B)i=7bCUu(U#<)Ju5Yf zZCNrShNPWE{txiW!eZTG_{vU8o6(3a9W&uAac@VB)|neMfLUvqwO7sFJ`EC?u**Gbm1F<3mfA-7 z7Jbr~_0j_R3w*^1QVD#ncWqgO#?{#-mhHx^tm|(VKafpFMWV?$p5rkotu+$UcKdBp z`3>ByNacHIH>{3SU8&?-;g-2iTB>b=l2JO6D+tFFww0jUs$tJjY?J*Wot5K4?~6Q~ zU{EV{0|5O2d-#lOxi-4b?x=J>Vyu03K?huGe@bj~nk-4oW6>(gEYiKpE(!H7<%tL- znS!L(o2NmX1+EgzYPBno=E7C|k(shFPA(r`j0&-ZRbgw-m3R>JwJ|9{=`Libbee|87RjINpMk4 z_tvr@Y>;&SB_&)b+qegBtD3tGYx?jX?N{&Y@=4u8-*0q&XkqxBN7jcmn12bqz!7sK z5wNl=7NrXcjQ+7J;A7>7!ejRWy7!JYX0nXJJurLScKavmG$|eqQz3E~t(^7K`a|Y5 zILd`>B-|uH*vcjyQN;FbcJBGmSsp3qEFL%}DZ9jk4SZkz;azca9dbE<`pxSBHxGuy zIS>7~<@-ZEfr>uucQ4fNf989bJ`AtWsdB&&j}a8fG%aVowISvFGd?DGWGv&T)&4j( zjd58tf<8zpqzpsXT{-Whw8>wn*cb3J*K=`)Pq-_Uo*FD!B0G@?JU0Pq&`l6&#nEECou87wn_yNrjbCFN=mc}g_WncYi|l`JwZI= zd832XCkV3j4uRyy>}Id1QVuE9;sDmTsy8EtCSeGhLiQ0qR6(0!6Cpx5ddH<$0DCiF ze>gh+s;{Fl?Oh$yeXD=!!jrBIVf^%cd#l=};QFXSUPZ_8XKM|88RxgyG=e*F$j}QF z{NF4C>nDQ;LzRwsXx_#(yl$Qm@Zugf+q-Ykm=vWfh=fx6xKyw0C5^pYq_?7JO}!U&f#*?u7{dT$&s^;n(>b z`DZX!rTIE(z1^(tp;#b~DaosGK__fHiaUTd>_t)SX_N(nN zt^k_gL6W3dg=ot_aAt8>4S!Bu)IfpT8IsznCl>S0p{JkYE@>_>Q{=z@_yLQz3{+zJ{x9bAzLz3A!s=pJ8eDQdVTxpLXxvhoLFz_m}osO_w zu`R$JX|!Z0ccdnQ1rMf=YgO#|#=v=T}We~41mH`Qp+=`=j9w;ZyYZBvYB zg{Ns)kaTxVRs=Z$gopfJ+O0iWl53yfdEdYYvu;Kj2DVq&lW&k)JifH&2DA&IVtlNh zA#ZVJv%Y>e^6O?`*qTH6r!du$CN&*(mwD`wiKBJdd(VJV_(l-QO%7sS!qbSQCEqq> z$yT|FD&d~oj@}MV{lG^t zHzFTV?#p+dgOPmMBs;D*li%jo}EZ_N=Rmu#EuOBcPq@9UtkT;gEqd4mz=q0Jj91 zee+8(hbLn_uQtbvnA||j`Y}O)$t3%Ojq{tol=4NDu>POkiquR?S(HzSnBpVnPdp7r zpm-P`Qv|8P&Mr*HrVpAJ2w{^+=o@DYQC)jIbkMq%O54L7;%|GW+1smvQea?Kng&8q z4u?|y0+E0jVgr6IOR{D*NxW?@itckr+QSlB*rGKjFR!;qz>h|U`@8wM4F%a!MgiiF z=8~J2t~f3l3fw9fw;+b-^1$MA0jvN|@Y3prO}jZE1}l5{KnjgO0xE7NlYcPpCJC;~ z_-A5*mQ9`&d1%*kZ0rZ)XR@syIIiuBNadDY-xI`2=wTK&2eE>z!bdtbBhta^&BQV# z?{CFI4}tiGwOhmf1+EKoGYzvdx>X~rBFXg9hC%d*&KE>X_+2L4N`Nrx0jUJ(OFGP zd`aNP5ATm1*+D4A4#k@o;ExL%@l$XJ5zM3{jSGMh(<8rBhQ_ujYU0xA>C(`1tp>0N zokll}5&(D2c`g39qV-GWSq7qQ!@W4?sy(_RZY$RN{H^lOl{67rHh!M}0Vwd01%CeO zJ>=|F`jzgm9u4&pEcOX_aYSWOe&I{K#EkdJ39O@LW`#dhL%|c4%}`Fouo&x24+TXD z>o*{j^DKgLITj=#?!~jEL4jVre(9&9->=?|Svu|wwx$NnP?SvS_Ra!muie3gu$uAMqS0@xVYnf( z@YtzUPId~a6Fdz=`kUe6)d^W1Alrh4KJz{AoW~V>)Y*y|pLaa0)yS75a zT~$f<15I8!v``&$p|(0T50GUI3m|O&_8;==TIwTUBi9^+HX}V>#zbe%6^N-dkA3`*U!KuWZ|lt?`DXJYy2WO70p@IlB0)u-M*%Z3r%liuH9@*eWCv7 zC8Z%;uH5)5jwd{lT>b!(V4}|b!w$ER*2Wa1N49?lozVe}y@Ul3+oLF{1-Lz{1Q|8% zvr+F}_?Ta0Pg)efh$Y>W?id({Mou+8=_}P%(lN$L${Q zZK8nhN?b7fJ1`oTB$kGik@Nu4bp#nlUH%1*c`f2eR_!i>(dI5ZVO%1!kB%imu4@a# z?}(_jwcWtGyyoke(hcEyXr zyuFqdJ8X?9QAF#xUFJcLzor9Xy*C!f&dmcu7ES@&35mbbGLPuTOGJDm|MdA6Va6xc z&!UKfbRdO}7M>(qH=cy@(4=y2-Sdv)eAD&?Z?2WSnmUJt&BGtBg}i?`e0Mc&ab-h! zk0LDYZ3et}0k%9(Dc{u(0L@S`O{Zb9_)K_k$jSG!q4$sT(7yGp zr^K4Ws62(UOk#=ki`v_Zaen<9>E*~JLLvQt(3b4$C;KM2xl(o+Yv6;K8Q z6H_6c(rL0`5PUK*tPmqXIIHwc?TxUJiEA~>AlZA`5v3!4Qc{#fl)#?4Y4p{;p8lQ9 zcMNZ*G+*vK6iV|})X_U4Am$6rd14sk8@$FUl3;lrKomZy44kR2;38a#QPeWd%zjiL zx}I1R?VAQpFZ?(n^Ene=_8_l~L^>o=((7*&M9Cu7RT@k&%k{o)U!!{pIKBow&%9!8 zB7a5PT6Atk7BXZAV#RXTTtE1)6jNodITZX}dOi!SI(~aFlBlZc{%y6Kd?#C`WXDPI z=%|}BZ85tZ<`jr75)agH>TyIxDjtg7wX;X}to<3p%%5gJQdFMlO!^cTvanQcuwV{L zC6BU0yZ(G*M-iHwGx6SS-M5Ma+M@R-XD&JWf+1~RvPf5y{&*E&CStiT{3qNR$if4b z4BFajA2mIVGtaPvl^ck92L&maUH`LhcK)gJ#ob9HFKXP#&`w(4mr}~;E*vn1Kw22& z=dOhigEs|+N}9<$t;cL>Vs~|AL5^^F^OS6EM?DT96FAstJHEwRN#|}t*@)`zEclhB zq}*lnSHHa1a-rs57U(C}zUH0V2yi)xUS^lf3}^*^V~9Qs9-(uwEqs#+DA>cb-%FVb z{aO;y0==T&BV8|e+|b(K4;|C>@s__bYuonTBjovfC{_JODrCJW!u0`Zn(~Kj+B&`e zbq1YQT!HAVBD}L4&gl@CnVh0)XdHgh-ss7L5!Q~hBZP176?{IJHZo?VuMP!Q86m9g zUui*Mg`?&<l!$12QtYcX!1FjYpPy48z%<+8uaPxJHvh>7&V11)h z>>mv`#@!UGea;4|>90wla`c#z7v|8)2D5|7l3GI{_RBZ?)7lCz#k+o&Azzl*DJJUX zpw2x;)bY!d*5IMQLM1fx|9Qk&s^fUnmniT-h-p~8R~UTzHC+8zpoc%x+gbOfOyfxB zz<|xKT=7+E-&qCibJhpTE1XFN>C#icyh(;QbAR9f8wso4s7GqHFlD}$8jA=f? z^1tD5fInH+P`IY>>GivBNqBI#uDG={vLh1`gpJpb4#j7A|5BF?4bobG$q`y5(b#uFFwYZ(Dm{E0df!J z^+D|qOtw}9F~&JB%Wg)RBihcOf>xA$?t^gMo%-Qu!APGor&CeVM`q6R*Up6ThkV`) zpE>+mTED>;t%K&BB}O@0oTKY6H#<4aDpoc}40WWhJfIb%Swm7IG$%hiPGx9M6O;6BOTdTA=E77G+jd z=4C2(=x(#5P`%gEeTR%&l`~_jnLm(Q5uupoSml|lTq_N)n25#bqm&u>{6liguO*a3JWq(vmoe12(Sr`Zcn>#O+wskDZ!Zthv z1!-FDX22*&pu+zFwts4?#=q%epaZPsH*u2x2!!rZ+LiyAE;dI#_0#8klUnj4t{BCT zrq%K6MXp@Yyw8&!K~5Cn;RPezU=MYFB)7ZIwrOc88NdZY_Q_>~0s&WBu#d@P7Wx!Q(zAUVO9DI$*XTk21hMqfQ6HHT$3u{wTNY0w34QyRZp$hBR?t3$3(>@9m8g_iM7jxv=NC@6G$fJ;}j zz>}(h=tQf!L8GX8w~wkXV0Rn)-|f5Unmod6{an)F`FTPBzEoXsK>pu;qsiYY9?|hn zxsLuxrFN|Set4rQ3CaQC+lPKhr)j9LwPi^@x(s#C`4O(**(Cs(2VNZ5w&ge>52Gmgmts`KQtHPcI*)zI|gSBV9+g?YSwAukgrL*kD$dY}R;GA)Cm* z$3Adw@BXT3jrqu#TRH;89gS!i+P*lySE8i2Xg7fzr1*#DOC4>ctxMpKyCa$@9~{DR zO(ba5EVxSnK4LOtOJZS3w9B0~BHIK6Z!6ngVb&ItyEvmCG0p3!!??42Lmj=gp|KyZ zXWnMQGNFVQ7%7c*JB$H0k&!eWf8^mxiVk|b!ZdKIK4t%BX)=bCjWz;gN!B>Qwdmh@ zb#uhh%&c<+S`bxDr}ESKI*67l>Ito4xsm_hkAqc`6=}rkj+&76%XcHu2mLhppYO)$ z39|Fw=!ZnVG7*10w1rq8%6k(HvcI{yA_PYJtxO7)mQ;+a7UYS=SNR(&dg9> zT~9mUp;V1rgT49f%mjhzsi`;}f0o;lV51)3l2+<_s<`II!~>)WlW5>BO_v$q3=}-x z@5Bm=R>Fec=RcPE?r6>l+htIWGjT=*{PUx~^yEim#+kWvLF@Tv#3@mc&Eb;& ze}k>pu+dolByD+C`s*S)_JrBTaOXdRV1k)G_-}W^E4Z%f2ha1wH|mh8}b3Ak!4RBGk=NzG+m9XX}n8`???5-7zBHn+mMb)oF&08rS8F>`_0` zzgwgO(O#KR(XqJyD(yG5{l6?Gj>NvPlt=;hnL;B8OHoS1(feXAjX+WulmT(|jZ&c; z@bSH4>uLOLOG(*_kXf_!M)7?%vZsX6`e$~;Uhs|qQ8QJPvMkJy0;uh zx1+8c{9y-R_Fb$B|J)xNY=!dub`d{JP8+a4{8#qAqAUI#C6vN$#m$0*L#9W4OIt#K>dZI^g zE$kcg`h#1OXg+UNQDJPmxzbR{j9tMBdsgQF?q=sd8jaBK%cYULFDH9IC_W^5AG|%O zrE?>UH(z-f=gXV+kpW^;;+C3$grj(0r zbT|~(!Qx@bFBnLiz+c+D9F}HP#G(1VX-vP(TzGBcqPWQ#_@Y)F#FqMpMo@|R``StG z^Rj+tB$n@e1&a`6UvsgMn?I_v;%=W*7dzlhET;3yUi^6xmvJNRGNuQ~plwk%St8&o z8ujagY_H{u>hfQCpOHG(GU78+t&bKA;P=gvT03gCe^mOjebRXuWb@E?A;wibYwn`a z&#a#z+Aazj&bdFZ&^f@q?E1FAka*Q$pCRF;r(dlt91t?My57(dQL(tq)~1_%Gq%LS zA#;F#dH*$4ETjA~uDt4nu?OXI6Fyh0--NEO zM(+CHsRwN^;@cycPxl5kM0mobMAX6Q^6>3V-W^U#I>wZNYydBO1UgOAP!$+Pp>0tHtnF&k50mG18jZ?oU9!{` zUl4R6&x#XqZr6=MXwK!&oqce=gGSGip2(CLnSI%}I?Sq;3V{^~VchC#)V->SldYq_ zUQee!$exsv-Nf7|67A2NCAGGqQl-)a1v@ZUI!T4XE^LL}lB&+>=2!X}Hbz&+t!MX+ z>^N&1KZf-&T9c-ZpLG5HTpncyk86%`1EnD~f;`T7@*M-n80iX->T|k03h8{L&-EC=D^0@zd(l7S7$2v|aaz!kym)UDT?SP4 z9$Kv_X&+z8g3JwS{0s|{Vk-|61SaZ}M7)8K$WkFYP&h$_piw(|&}$2}thT3h5LbO-zNpm zUH`?NPa|8DJJAP9eU-F^M@3Ka4Pw}#L#ktbFkhZ93Vh>8;ZlHtwvnPJeH^*(D+9$L zyVG00=d^icR2`v}>4ndquFtxeylH|a{!K4OpLbwtO3dRX4>HSgm%k60-~|=`6^PoA zW(>Zm)WqjV;o;4|r7fP=XyMUPrcJMG?srwe`q6k%BFv0L>szNrqud;LumFl?DC&I(y)rNWOP)h zjSoXRWMoHd6ODST-nQw0oY@zUs0xTEx34(@TJ1|X4F>&vV1L)M?5#^2g&ws&YvUuY zK%cxVG~4BZPPoMNIPVA8)W6#OA;%XseHvH+k`760+bQL?^zs&r4(&F=M`D)n3E&@H z(BFekjMvS}AZgjMrofPt8QJ;-!Bd|ru6y8(m@7u=vtm_t(nGTT?^RUTmEu(NU9xiH zn`D(CId7fq)f=Bv3xCp_y1iYq1c=NzFAfiF+RwyjMYCju9lu$Dy(j}JN^o>L)q=eF z7~NN*Yv>fAM*-c{UKG%i!D2iFim)+j=XIS}St=sl#|eMKu%JYmEbKoCx9UjV$|mTD zm&olDzROIAe((}iXR>kkOb+=$=KjNvXogVgVa)e_qehkH;C?mH%Rk9Kll8l-R|r4J z#}tAxxxRw(-RP|VpaF8J?P~N_+hP`;Kz!H5n})byXD;Xo+f`h&=Q~rr9qki*Qf@}k z!YI2GJ^PzSkM1H6fv2flr<*nMDKT?ZdJ#Z&%(a_u5&OoB(uV(V`KM)lmEFmw zOzZX&jh{+@i(_Tqz7ggsOC~DvE_V^ZX}@w1A+AItSe&$VI#)WfPrs{AhH%_(R}XwL zwR5#kL7-+JwoID6D>O*aOQ%Fb(ou{;j*l4S_fq=LLMhv4_yHaX+EEsH{raeDYrDfs zvh7ogHDoi=lET$>EcBV*uRKg6FT<_RcWwZbMnXA{Q0pb*M*90sVKcd&hb9YEE?+1^ zFhzQ1Bt3jDztAD{nv?u1{cryeRB`aacx@eQ%}l?DU6jvEJ5o6k$8lI+(Okg|1r9T8 zt%Qg&w?;G5X{cB%UWIRz3R1cpk(xSKY)gzS<9i%l5hPu7uUzghAfmOc27k@j8rXl> z{8GW1sP@SnG|M7x1GSE)CDce@D&JYYV^bR0#byk=BAo0go?MC4RaQ2$E6L)q6tlZ# zYt5EXCp@j~WKRVa|Kh{8|CK9njayoAqk1ns&B{z)whj&QF-*PO59vOY9nX&kI8$vguJjJSgOai(>&xJ>KQpO4ONz{9l%qMxa-(MZNfH1IM!WEn>~uAC@r1Je{Zqh5rYMb0Q%|qgyJ3U-m#|HxaQLXU0Nh> zvtCcCFe`pSK!(n~G+IxYowMluy0BP1W?)b+$aZDf8wT|(I`z@GJLQWFi&)%SD6Z@H z+tG8P@YeTPIV$TZ@QM5U4>qVJTXz%t%|=mTZh#v@(U0aJ&oWJP1gk_0CDPItIgWr= z(2FRP(2{)gjS^hM1(b$1qnYwwp*c%jVm_>zku(;wN9~h9!zZ6B59px7trA@i4sL$K z-Tauud)@H{-)vPDHjvQV6zbSkP-k+^=Ug(p6+j>&vx(w+r1>9tYcrio@XE3U9qYxb zpEKt*QzcQs#Gr4$9}j5-J%7wPz0g}OeXQ!u`_Y5}mc&q24=tVAfEfFI-L;a+?g5TP zl0W3m!|tIGPPAyu?r4U9OoYDtTHRTA+x@n{eQ}kD@pXUjqeH}h28l4y|4KDlEIEc# zpvJyg=DtGXT*ETsr=8~Q62pSnbu&I`<>YcyPp%6$|N zuSWNVBrrQdc9Eki>$zF*?Y)aVSoxTz@Q~W&-UxBMWz#oK)ZFXjHf=}B+6^Lcl67gn!6)G{ooG9`FQ+)3@ zlGBz(v`@N%_0Si~-#FuY=vA_^be{h|Kzy1ypZ>DspU>{W80Mz4(nG$d2OQEmwBoBsi7)nhpY!D<(pD^laR7in}ZA1k|=f$Ar~y6>T( zWpbD{8$+GTFB@sKKuF~H+C{tCs_? zec+ruDSt>(TeSVMkIpRVz?eb)?K$!!jQOPq~Z`HxxK>+FDVI5LWs^}JudGxFZf+$r|D$V5SH zw%EBT9B{+uV9=)dV2rTUAAx48;+@-Pdf04->>1j&hYnNcE?i^B>Rb3L zABH?$w=ns*248SN@QJzk5Zav>Kk@F7iUjd8H_Lw@%9#hBbWQ7cp!YxAU zz011Im93))b4E*@;^k5~RyINei9l+|){kf{{bIExdd<%YO$k!*ecX88n$T>?ysii5 z-Nz67RE>D&qLdV7j$0R5S)OtN@z z5>;>G)}kna$+=xdrvu{5D%fkgvcxPUN%A}6M0rdjxkYbH#oP7rrVXd+>Qxox8w5*R zRTZYnJ8VC3PKqYv!h9ROzSRsUE|epFF!x}A!JZPvaAP}43wHw^Uz;tO9NBEQ_2N=D z{*VP{&$wNV*mUG+qwABPznyG?+u0y3#)K@U;Ml9ez<-whE`~~EIH#KAJqR6^$n51z z#&SZwI23sk@V8p`UJ6*g-5uB|=(!T;E@78l-ULd87#d`QT(A?C{mVb0UT`zuOYlWn zLb;=epyFydE_ljHZ$d*J*+w99N{ZywCMlGY5O3mnE z?ZGn;D+?CwrT;No#=Tk;3GZtquUMahS#0}x%%5k=6-c%g4daIqF5=;Y%Xhu?JW1fG zhphBQ{+__JxwX@3&K98LVnUc~9MK-_0nV|G+&xt3Hkv<&o&L;%06tX(17E;26UzGo7P5 zt7d$cuhR!^`$WzVSrf_6u%HxLbA*$Uwwy|-+d-SJINBlm5A4evK24Z>-j9|Q9jcbd z=Q63_31*q;P!AoE$?=2LB{+>rCVlc^+rAgg9y*xg%j^klk$qEbc`YgUfuhMHDaH=5 zSQzsJ9uS1Pyf!fDf&Zwd4Xrk8#kY^xPj8%utuk!9Uu~VO+?Vid{gK@fttVm8+wBj! zli+;=3HPsax|=1Y_>%FN{OZs>m;|LsBqS2OIXP2?jVMzoS}hscH!K*Y3?)`qcUIzd4W1ob~Kf1D2JbfGR)>d0i1 z@~;)LGhEy{jQLhM{Ab?(Z7`qezW<=OdpQ(qfg0B2@DJryTZdY*CWx!r}r zXNG+1>eVKC=_faC%=`DhhzX9h3i(c;Rb_bv3ljW^^kKY*RQn&Gc`^f}JSf=c-L6HI z(Io3orV;whA=*(Ya}dBZ0BJF_Q?~I>_JlwT=iFktaZlO#Qe&w))t3+akNi!Jm$dFq zD_F(Y&ybl(&AWoAbp7+%Ocbt$riLWjTtyG@S_$u^unO4t_yhha2fZT1?=X#j0$^ZK zy4s93+J#z?+5u;|F&)M0#p z{6B0;*Vdx1;Wm>2HVzKaD&JecoO@jF=i-;{0a|L~ZYXX}oPqWLn@d;MpVEzLh{S?1 za4L?_p}p0tQwIypK3!`5`+i!KVLzODOJ<8c`8_7c$)dMDaMGOE&^)uhOT3eys`#># zcjUM3kixBzb#B8ab~`1f!C60N_s_kt!cM>bXI~~b9mD13+m3Ve0q%vNd;|Uqke1mw8tT)v*Rs1 zc*^syYMH%Pdj@ERWZnVppU|wCcUX4HjMe2_%b4L~-|Tfq_y+FvigO*e{12ek&P619 z@4=|v4fHEgv%S>kb*36n!l`X8*v(94dsQjl2&e}=?W0q@el6t>m+}qVWzHRgSMtp| zOQCn@lsNIVN7qjrp8(FI{0+>@!^7!kZL5n?=^O4L1^pBS0a;xBaJ~JjK}xBi(P00l z;`&TJ#V&_p9JSIvJXC>mLusL(B-=eQ^Y39F*v@}uJN?%Yisb(^HvN|~H#Bt1PYJRV zyW0!U(JkwfNe}CL(z+b<`T87egP-X|c);Z0Z0v&@;LqE~_W&oIT^pHme@=PSo3L*&cEVyz ze%A!!!XLV}h*dRhi_M#{&5k>eH_?*~{#Hj5#3jeQ|Hnh$4&+p(y+C=@pwFMH`1#y! z_ksU1S`t(~NPBH`W6~pD#hI#FolLZrFwIcL^l>JSC$TJU;2d%U|}-huI0nuz9t?P$~X3N%!B#=sX=E*hVdlo0U6axSkHjs_sPE80vy6jIE@?tcI7iGwpjEaF#(?svaswW6 zN5>n`n{hAndV4n%rwHtH`10JS300tY!wSzDBGGlZt1JC0>i{^}=ftH&b>G6`r(U;} z+d*)~6GYSG5#f>oIx#%1swp~g*qq@YFF$ANcm~`sJfEv-Sb&rv@^osh-8_e}DZVF= zZ|6HDcExjMyUV*94|E$BZEi`bvo?jRU8lS|g4KBJGVuRwck5vAakt70w%b*QkFqvT zE3#>(f=Nmb@A)U{QxH8A%jd%70hlu6Tpch8_FkexN$QEo3?!X$@)f$@SNOopSHhRC z4EmlB$cOsry9Gk5ZhFK_soI8yzYF=xd&4tr z)IZP^=qAVA#OOx%1ZA$^Sd^ak^uQeL`)T~z8eM3n#dW?}B;h8;*H7O`I%)fy!q0r9 z;2-EAg|Nh^bu@N+!+S9jHH@~rdX_xi63>Z%dUGn*anJ{**Ok^DKA3{J4#|i6Y;Jjj z$pP=_q91<;lCK+;c1Lf=NF}xot!pgg{CINIq6~+uV~`1u#ZMU0zRsJ?vNT`?_4(GpM1WjG|prT+|325f8|@w~kb zHT+b|#m~o^mOZ$L@ggYh-Pg)byRT7Dl(}#z@V;qt+le^ywzE==xvIpK{fc31zdM>f z=oOOx;B3&Gk2K>TXqlVclwJm$TmFG43aGYb0bnmL6vfMWpb8BNnwv9S!y_9+qjI-uE+b(cxe5 zcyd~eKw&g5A8uM->r8*98K*_Q*xoYSPvTZ%#0nZ_iLsr*CBpK1ac!u8c*kJ z^sqctb8%VC_DZ^qtuc*3-<^B!DF0KX6lsmKMU^^d1EJV=1KID8nmH|-wODKZy@B+Ub&AIcrvC{UmW8WSmbD_|CSO05vG}7mV5LVy z`P3_hOKjSfrIqrY)Ze7lj8=W>!L#0=Dq>s-pGbk0*z)%E*{i3W*>U(3*+Kd>U*13d-WW&+<2uv0TS-NiFjnL*YJr~($n_j?EFqMmr0asg5G ziZHy;vt?pSy#X7Cq=HpP2-WK+A+k37N1aYy1(L&rbS5ELt>@{)VVMiW_NK1|acGLT z>_KejWVgSc*ECgK6`(?26&9A;_P~u$#d9@j47P*WZ{XkPP$UHMx+c*HFOlCdl!`f7 zN#lEWdH?v;{>>vVL=J16xLmJWx!oqG9ML|S8e@qpX3>B?w%cuALOsAOk$SKy26$9f zru3Uf(~7{=_>`}^`zDP2)LrR$qf{b$GEEt8{FUI+P!Xa(R{vT&%d-;X$(A>3YD+8Z zew}3PO*gtXRQh2|`tJC(PbjwPVGc6vv8kbdr5?)ZF|&pi>L1A5)hCROYpLk?$FY%v zbH=_w#IE%Xs9vn(srk2U7>wS~KA`k2k4jBQ&%SX$7MiPijks$PlKpkX&<1NiQBH0- zx@|yeu0XY_=$9xdr$kjn$P#vR{hebRR1x7 zdjFk|MTeS)v0}nL)oV5A(;P9cWIJQg7O7vYVqc6dtz3f5=PNG>C|fU|=V$Zh@M+?g zHB#HSQ23hEZNn&&;ccWdy`%=dr${BF^U`RcmM;~_2fGtl)U;tWXoAl#?UPew)>^7M zv-2Shr4$bR9|Mh0M;S_D5`d!g^-G(=c0oV>*{zF(%0BNyRUG1aQ#{!XxDEk^^IM-R z$MKN$VBxCdq)L(51vSAOmsFBGfYztBf+<&kUu#tvL2vh<4w(tCTvX_hpV z-_oH?QA^M119!!6voH;?GyNn5sFhluq6_^VoF~b++=L|XoNOW1{ z$NIC=Sj5cq!lB~ObgczCDPg;oh&6$p9~`+MjXu}$tbi~fk~cR0c*YuUtBX_z?x$`H z8zUx8n|CjGD*oGM*0o3$HvK#eviR@o)#zWf1p~25CFi2u&pw{L;V*MYVqI(Q%b&0H zRXg!qhjY(RtHGNl?}36RSMc(RQ~6~8!l})8ZOuuwIdkq3%|FZkYmn~BFG@;~tD0il z7uk*EAe27LF^#mar+Bi&`UztJI}cJ)X!`1T z?pgZZjO<6!uLLE01?bnHj()>4-`9w(sylXm9{1_w#UZP9Y%vi9;4H?n270cHEF1S$ z;p_BZu07gorJh5;R(>b{T~A)RI!%_t+%VBxSI-*trmA+>V_f)!JWAHdA{Y%c=Vl2fzh z%@cHR8-dS$eqoK3lnUm&NvxngF7wxSq}KyDPJxIB*s~Gb5{va-QLY*CQD*&e8eZSO z7PE50U#@Z3G0722`b463=$ifqQa_lixcK&>@oPE9b4ih*X|B3NoUWA$ga7^`&7$1K zP{g8Gt|*mp`w9dtgkNjSX2#88Dqm&2HmA88@0V zu^!4EExhPF9ADG~`s>g={9XE$uDw#RodsDBkdXMY( z6h#8tJyjZ;!&{Y4#iz}=nL%B*&7E9+aw@Byi_>P86^jbTW)wA2W zY%dsHO#ztcSGP}HW4dGOYN5q#(4xSF#QCrys7Iiv9R!*Vo^!mnt|Isp-iMx#T{-)d zB#7En71H=#9wzEIFIS6(dCgtA>{{O4v3v1}p1-CG{%h4KI_kxWsAut-oAfY=K5HH zePhg4sox@2AD}8%TJPlxULW3fBjzX~sxZwgVi6|pV`T0Uk-4gUsarHM@ose;yze6q z2Gf-@6(7C2uE;N9IeCA~K}{!paTQze_!_At{BkDQ;|(P%biOZXtg7i$pZM^S@-v*E zQY}~{l$M%!+O&qnmg4d*<{%f7&6YOtWUo+4V~x%TEZvTp zdL)y^X727@O>_`8GOD7(O_6pfuPCBHOL*D;t=9a+e1{6as`lAY={IE`$WYFNMfZW)k~G+k`|-KmYKT{}esJv^m6C2m1rGh9&Nwfk>^ zAfmVD+lcR+1h{yfy002|vTdg`h7L76jbs6ONyBEbh7o1kLmShwGdeTpmqS3?xR3kqI7?LF zuPH!{_PW!OO&*LI9dA1N=uy!P33iL}CaIwH@L9I}ytlWwoVws&1B%053dO+8O8D#? z)%O3`+dCFO9gj~xTrBwctW^sVyg%@MkmHrbL2s3UM~j&^uP^zTrzIQamU5V?XGoG1 zJ;>mSq`>}8J@!BST40qB2;yT-f8;FyYRF)w&2naOwcbu6vMLHTWg7H)M6O9!7Hlc9i)roIz>6Q7hXS*+=wk{|OJmD9DX^$in$pDN{2ZSt6GzC0$wWJ1(4FFu(1 zzIpd(&HP!WwryYEuHy{=pRrf=@ROnK7AjrA$}G}Bb9R*Qm}%z#o(Hb;H@_&4I3~8c zO4kdDE+^i2+nR=(;lWk5-_^JMmimf(_7W-SRZ@Qcod|BB6I(LsR)I0Yi1CToa=da^ z)2}`&JUsAgko8MA-5MG%Y|}&Dwbw;IUw5y=?I-Fa7@SxD+#KnZfqhaXKH-r5zWq&+ zM%Ew+S9@PDHBE6!3vCM08{}i8@=^^?7IZ6Qfh;zdW|g zzju3nR*5GxM^!9II^G2UBX``BX$`o&qKvnurzH(1fH znlCUdY4FTU+YI>EqidY;hwcE(o*(U9KHb*HgmyUzmM*A?+_9O>!MgWU@l5Ud2Ky^y zVYmF`kDgxI+1tHC$_6bmYYJA|Hyg@)R`;IK>{_sAaij+}8f+ZZe&zdyV0OBvY;Tm;e=*B75 zAQ}d@uIo@Kq#aO{v#6Mal_8){LtM9sQ4&LQlo^JaXru!BtLuUFC| zzr|$Vk@OQ zx{X|X^;c0o`lq%m?zv}Jo3nuF{z42zX3~qRuWdu_JwKxg$X)bZiE$M&dNj60ynxxA z)Sfk9DhjCF1BpqUsz>-($tmaA*B7H_7uye4PHeBdyhlOvy~BAH_-_{wX^G3a5;O^R zNuy*mn(R-ZpTN+y>lYh@_JjNog{gXa#Nd4h1k>PlH`Y~MNC zYcoQ<){;hGv{huyOzBJ>;KU?01*2%5@iEs>ZMJlBtT5six9R!CM`zCS{evPKn1b>T zDsq@^^Tp?XrX&W@yQJ~yDX6|@c?mnK+zZTQc)p9iL3@USI#XpMqdwwCJ1+`=84HH zD>2nzE!L|!Q|2{SdXBv=H=pNLxL)0XdzXfw)J(ZAL!~q6Q_?7+A?r_uL^7C*PR9EC z5G)PjyD}X_%;SwW<%3}G5w~lXInPJ-A5VekUbRib2c;9Pe^qQSt8og}i5T|w z_>9u^m)FH9W*~n96eEzaO-k3r-F^*9)X{t&dh2&M0BZWcyk2$g{@d4mH}OoD;^!7K z66CELpbR>=&VL2Mg<qF!RNjFEDjo>$9#P%wTz*ASVLu45K&0!eb@&WaE4ggr`&N#t9d?}(+7o_f0OnAX^mZQqe4Pu z_I=wbzqxl_LhLmx<0{lWm#=}W)|+(579kTdVc+Kc@PNc&j{e=zqJdWU82%)F6*HaL zbRWKkymKlY+fb}HqVTA#=tmn=u3FKH>iv>SC9b&-U)xx)+qH4I|A(x#7noN5YPMTW z@9AJ&y)KLCLB7%1b*9}2BU`X646oRJc=YpCNhOOGt6D|!L&-Hv;k<6FjMSPF88`y0 zZ)0o~UYReU>mM_Qg4niJLTf0S-<-PE1v|3wC%ebM2 z^x^l=UE3WR?VE!tv?ZbcF@6Rki?C|C%A5-e>Mprfw(V0ftdz(uMQerU%X8TS{W$|I zPm1mK-QkC@q=LC+v2ZNqXMaT#+Rwj+OR0Mg)ugQl=snA&^L9#^WW)~jPXSjSgZhE& zzT#4I?OsFYbY|G&8T;(it`BWHiXLvvG`K%l-4d+x6qnPi3zf%oFM@bbb>{sS@l>+Bs$?M+0wv4|?9W!(E_)o}o#y9mQx7L$q=EQL^f3`Rox|NscU>JUJX6Pq;mk9UP8fTC zuexdt(KiD0NP&*~oI&EFcdOuijXYIm=7tL;2pjmbU! z%i7|rl}EhBQ7z)|Y>~~2G%}ejT!)7WqR3DSCvZB{o|7ys)x*xR*TLNkavJFd)HbwT(fkmyq3!Q=S`K`m`ZW&t8T>`2#uDwTJzhHxX_v^BTSZVJDS}?Ca8wB$dr=C= zA{FPrtXRq#dTxk3qAP`4$Do_9*@x%CZwZ?PvSvGG*&LLJkywbNHg_r~i~j?;#eoNv zF4^c@-H?f=y0k|Q19Y6kKSLjARtmebyBSfn=;KK<$E;=O^%wF`CN_%rq+WTY-gRQ3 z8Of^iBFRrfeJl1%nQu*weNkKB&I|9|cX|Yp>hAUCWIOii;LYe=)YD zeHH@>Cbi3#6Nt`k;9Dfz{Qwkx=2_^})5~H*)8hT~7Sx>UFeujv0B?AV%##DQ5ykd} zBloKomkaLYII-Q&#dA2D4?<}nmJ4a#q(3#^dXqnt{b@4tk@$vubkYN+R(8U+UfnUW zPSxNk=j&hD00gEj14O!#yr;8AW>v#6dzu{hOPocK=w@2Ea1)_l>FoHOf-}?m@Ig#M(Iqd7U$svjBj?`XL2u{9_cNpi zL>LL^gJ1Dml(T+07+s`Gr<^C%eWP1f(*R`jvl<_~n@ng^pr?HPA8h31LAyMTt^A1Lu3h$^4DA?Hi` zSoF$McuX@v+R)Yq?rx=Mm!e8);@$a+&;mLhwT0M(zGX#vZ!O&hVW-{FlCjm~dDR4g zcelRezL=B_ohgaj>2230wmHvTngu-em&;QN=aX%3lR&O)^LjkKJJCY!TTIW-%Ew}5 z>t-%qo`d&&hw1{u&9~*N&BS%#MupI79bf;-4D^X^H2AR2U5$Z2EZIRII2h7*K5DbN zP17ZPlUn-fB9=4#LTxYCjxaYCv(R+-NQm5DK#lrt5YFqj9}UJy-;!s zHgdHsi{Cy0(@b%w@F0&(!8Qe4=5m76jD6fZ_|VPFqY0}p)U-!7d6GQK+jKIF@G1Q3 zM()qHGN~W*l6Vj-*jmr_Q}Ge4*Po9B<2x9H2b&tZ8XV(d?Cff<={VimsdhhPdE&tMwi z!kU&I!6;6n4C=znB$h&RLNtZc>|?_EtC7H8JNRF^dV>H)==Fx1*xRy`t?AUuNhu8en6WBn=MAi z%Zyl`cEJ;zOwC7@{(+bZPBVv!J+A|u4XFs!%JrR4$NY}0s-M|D8}(?!ia0c~0~DFe zi>7(iUtHEcG-=8-YIhHAupALCHd4$s#%qtUABUleP6ZsVPP~W>pg|>ytN*EKaAkPW z>>h!MGneB6yp#>25A#^~J2wMsPMaVt#h!JygEZa@-e_g!THWDc+v(}nSXF4LApQ`a&C#+8lCcEeaKlKkJDELBJqGz z?Z?Ux^hLQp*h;)L_-fZH7o{0Ec4#8I{m!HBhI&xrSZEYLZ*}3DpD)NuRF!MLk-rk? z-Rr)|;Yg}L1x`Z;a?dhV#X?}EnLoo@Xr5jo^TVAo%U2WyzB4W9hGO!L0;b!kIb zD)}LzF@jHCV_wtEY8mD8AQ$zmP{r+}%!t=pO|Alc6t)-Dxo7F^rT!UO!4g_#^}=-R zVm{Zju}*GOEyd`=Y?<}srTw89@AL8lLbRkA%3Zk4Ayb%Z)VegMly@IGj6N){9bmef z%>t3R=uOg$YJXGIh00SA)DOKN4QT2kA!pgXaC~ju(m)@lFI$lyEWlrO>`#K2;0xm? zN%#4KVX5|vmhjv#r=pFlj~$M6w76`6JP|3Ctta~sXkco@f zVdQDQyqAiz2c+;Q3RM+pKyWMMAHmFW?;ra81PV~dSm1+BAA@ANYE=$XSegcW=DmlX zP?tq5F|(c1BNIBk(X3_u685&Y+Cmz+iZ*(#F9TnO(y6cslGEVymBwZF!}y^EyLVv^ z2_=Nb{o4gHicPG43wry}kGFQk+BX*iN*oO|H1%elSL-)654HD^OE1d((vtOX@*MSEvh)g7}<$Lj|06 zF?_PxeQNOs9cU8lzKRDN?0z#%kEdw^wii-~HH2vIPaS>951kE@se@m26ls3(Z0zXD zKJ1ncB;F`(HOu8?v`SZmr)5^Ag)J3X#OKjFV-*B6x~Ek15<>hqb8XI8E1HA~dFnR- z_L%f*Y%Yn^tVhfp0wZqoY*}PVDn9-qQBmb{Ero&;V!2sHu@K$|U>+T=N-G-TqMm$7`r(qMDG&qD^r z1of~9#}b>$!r1p8?g`-gMx#4XZdi@7{-SS%k>D9vv%l!fxfuO=mLI4j9eTGv+C8d0vDbdqv7?w{>|m6klDFUH@^Z>uO;l($ z)E0<}_pk8(kpO#7reCLm<|$s?-(dTL*i?HaOO}fXghh6O4N-Z}z%6WU?h3n$kc?fq*r5l$`JC_KN+Ri{h+?r09o`K2hU(djAwF~r zjAJ`~OVG*Onu+g{N-|wNTwGxugx*eUk>lMiKvbS5lEhVoO-_C?;_a$pz;S1xt!udjeaW)X-@`;s;#otU z>tHSCY7h@ke}Z-B%^ZxiwE_F%a3$;`7Qsm-#6&co7$FkjZ}Dl`s<9uu zm%l=#$@bgD3m6igteU{=H0>9X$%XfFO8E^U8uS7(eKmDbtSm;xj$_5J11!p$?gx%1 zziT6hT2nv6ry8&ajg!l%_AIGFTA$|yJUbb_4o}Zg;(L=!(Y_GH$>wW@NgqhGeVmJ3 zmAjAZM|ywW1`uZDK7N&99Iw>0)kG7a?k5cg?(jCn zJ5lHcF}!tW?e&$8r&WV}Ddo<*hqvcOa|XC`l5Kkx%*$UUMgmhX+(9$LG$a=-h~(xl zRee+yD^uV2=Tg>fT+lm)f3RpYwb(4r2e;urXXmtxwa8i-;0z~ytOe&jxxUOS`UhEK z6iF^VIHoo)Tt73(<8?ALicNHuM5cMV?abGcid|q)%Atslt{Onru`&y<@8WkbXZx;6 z**Cn?oXdsJKad&qb@z}ftE+6QL7s~-1&@OL&M!)poOPk#H%JC0P>6}w2Lj+n5BhD= zwuSB_FW@K@JK$FYn{M>#5jBsPTl4D2oCUlb=96pBzSPFuq=R1htI-3BZC|LCe11*I znEk75!%8-B&{bW!y7~P2#Wl9;gMToE+@Qpm&^tZ778kTkCbha10Zo4(zqqb+zlono za0hI?IVCo#{#0GVz2kuRx+JYy@2U;?D?Dp%Yj_8+%j}}W};jH zDN3xaJY(u<%hKmQHbN{E>)fQIh+YEHX$X{*T(6J$T3EJ~K=L=h-0`DVdgWuU2N&1{ zcE*($CdgdrghrvMm;hC#d{DE!nMhvOn1Werx~*aK zqi4v9O(QNFGwHNQ4Zh^&57xZDQZ@eTWcH3{lY8@Z`(iCn*IZDtNWv=cp|hY)e9dLQ zwU<~mkpy@i?`%kJ+$}2lxMKDMMQ}(!aWnfx-np12_*W1v0eh?$3%q;Imh_n=hgvOQ7^rOG^O!|#VEn?NZ9jj;DE+Pvz4Bk;LCAH^ zjHD4wxEs>Ya`-T&cFgY&VxDAP$lcSilvQk0Dj4UWp_PEKR-8TXi}rgOA8Jy$vBWIq z3D}<*Gx3t!vqh1e2~XZUvb6rd@+5jjO>J)SP12bUsYz~rhYTzM=rTu0CvrM=z05ez z9O!{=26%gfb;IrGt(73kojxPJk4f^R_NkuQ6x7}0Tnz*H9yinwJ7alxJOfR<;L}KLkO!0JG*8LYkcsIwwaf4 z3+(g>u?gxBqnC)Tta94f+9?^|-{dsu6T>$}_S1us<$JrH#EH8~bpaOonDNMQ<4K&E zeW0T`zBzM^pDQtrYFdr?K&^|JQ%2X9E=BJpI{*BY-a?QPZ3EZ$cF>)j7&>+KCVp0{ zqvTB>-hQdW!j3D1IsVh+t?N+8AT6I?vD2tq^=_caDIFgr&x*(pkWbOOdNE7#Bo7?D z=iLX_dxS^Yz%O)yh*d$I$8Qr#&>OSgFJIK5NX69Mbsb^4!t?khieT)c;$6c9x$^|CMIzu zaW_+5%4-V=S*?)DFZ{!7Bx=TSPt>+&Q2ZaR@o{sH5?hC)1^6nl`eB+*ZQni;I1(%> zV0`7|n_BwMTPed9zq^`yF2y4s1-iE(J-bPoLJ%=OKiHnMp7vu~@4AI~z#yR5@a>G6 z9OM>xhsQgTxJSz3s)K!e3MV^q3vya8) zp~4+AppQH?SE+VoT&}2&jyL@;NM`%_+bLI3M#EbsYpgM>1*e=H!Vbw{GSviu zjfUvO%4JHgL&h4=LTSZ4c{pquKDwo)GKr-VUJZtywfO#7Ynj@(?6dc4>Gut9c={xB z_UwJ|rv$o-VV?ec7L-cK=Q-u8qFvPexCLI=M%6|kRsq0+wifc9`~!tCYim4eW&-;a zO{}7&VPQ$b30*!ol9+}Hc^~~4)9@ERm^-ZPt^VamOWwC_d2o&2xpeJ|b(|dUGqo9* zsJP5E>g>B^EJl)nmScZyz0a|M52Jk_Ti!>t0FnLRFtg21qO)j{ z7loY8pmQY)GX3VUyC&xW`AvZcuXdvU(+`MvqJ1rk=nJ8vL(j4Q=j}MRe`TIwHg2_X zs*`f=CH}Ww^YU z``9qHL12#A)%y^$%IcB3c{|fj)+Q_=&5r1~-F?UM-ZXJ>6+8upax3*+u)M15 zjAiv1Q1Bk@uSPni4s3Ei&_I%*08Llrjy9eSY zrpu_z(~9rdf7lh{Jx8P-P0t;?Bz7YftJ+e`DWX^0gdaa+0r#OMN0gCos#cTuq#` ztESe@Ur?UL2|1o09o*skOyIiHfcXdFVg}w$`}~ZKntCBRN~9}O%!@t-s#TEhn;!v% zsEk4lcXyA6yNSO6R_d?T#ZNPL8OG9sR?4Ub-Gkd!z=AJ!e6p0pp}rZpiM>M<nc_jvw2(fNeA}LEYvG!94RWEpm zPpIp<4<)4&LxrZ0e!`lzl|Xx+&H-6npo?;4z4wwx3|B9M6jqK;PjY|UNe$Wle*kvt z{TP#)X7vq=rRyY#s z?x~31;C76Y3QpqskMU>Kip$l+gY#`OKzWEZKe>!gGaTjSmv<7YMTBb(ZSWwXb>wh z`hZIIP|MtrFW~MB0gsQ~#$A8+ak3vW+3`dR!=86*X~0ON`h zlB(DIXB0gT8fuz}hqpjieznS`35DGF^?_Va*!zKPt;(rphFBIO>*%4lcc4`cELwvR zLW(MgMNH=HM|&pQ+Q#iRzKNz-`^mt$|iFtx4%93i8rX+R|4- z2D2NZ5sTkTQ4aT5F{0CnaoK^x$)%3(bmlmxYR02vis(HSTOH4shq>ki_!<$rHA1i$ zyoD^iSc>i|+pD zl6Fy6eRN0?LT`O18_O%K8w>fcMYodGmpUk&x!-zdfos&7U3EjHzr;VHoUT#W?w~iJ z$u_Qrj79VRj*+3{wBP2+@iET3dC=t*+sW5E#I)P&e%Nd$_(Lx-R+OGq$O*Ti;ttQi z3@sr``7ff1fsr$=s<>`xbg98L?BTvu#CNS)+FRAbVsbOTO4>PKQw4PozL=cRt?6L& z+CTm{9B|bw{#?LmAJYbfIy@FoN#c{yhZ?LFm+yJ9#zuxX4rTN{D*H+nC@k`2YtW+x)P3 zQGpL=@{`%Qphb`*sQn3~-Ht_Q;#167j>)bE_Q@Yb&p$viFh68c6nx#7biItICHV`4}!a)IW1QzW4w=Y^Z3>nw9U57OEC!L zTt=Qnx;nl%_d#X(ABg>pKhh^QGw77d5Iax|+~O+dql;^pClcgSnuop*uRDu9tsQJcvv#%-(xC5aN7I2I;r-zmuBm8 z{zACj7a0WP^e0LVYHo!Qz&?%lQ#CWeFg1O|*G@$y`p@v=j4yZho+*ZuQ$cl6LIME!X^_e%|`wG?S2AFVF9<9kH$tU4&J# zwC|w6?Zur$)8GF<=?YwXjq7js#{x?Q9YhiDLl@rnuOH0 zVI-3&Jj3R_Nxv7V|34r*a^H^5=;SLZTZlA1qT^{%9`84dLW{NZ$}r_BaQecs^*e@3 z8MV?6G%eCsh8Tw~#j5w+HKqKAPfd@}5rKT`$@iO+c}5?a=3$j@#T84fsYh!!D_B&@6HTq@_xR%hj z!s(;`f4hJ%5?rcY4JZmIO_1Th!iWM0{eh> zFf(-1$87L`Hk>pOiL?v!8i1zySBC2N3G~RPt25pNZ)G&%_Um_Y>;Pw(rZz;V``NF@ zfXhcb9a-X8m2mHo5)R3tWHNbI6Z4$Yp41xeZk0iCZHUqMv8`Z2Y*Q|_I##S>w{L*8 zxmfP1@$Wk8lR4_26w6&W)sYh|V!;E);l_tH6Trg!Bc;Ar8yf=LwV!$2%4 zbhD3bX^yE!74L;_oripJ0R?c6x^Ha%!CU!qR_n8%VH=BPa)hl){ML~hZ>5Q3( z#R&}L7%pNUfg`04Lnu=+bP|42`NV(Lp!hL|ajQ-m3pvvUkAK^Q10lVuXpuQ!|LEoX zUYnPSzt^v@SG71%7{|6Ec0GiXu@~hyK;r#6+Yxv8L zsj*TQb1&8YQ#eP9pbkYfw3d=HahR3}^z_Ws3(#Unzs5T;%sn0i{f}~@K;eg7K2E?+ zC1qydAa1XImV2=a2m!n<=RoerCvaa0qhG7O$E^w}g?bL#rE$5{e~KTUpj<8y5)H9j zx0JxVFPz2UN<8;;v)wXKrhUdjby~)`q;jK^DzfvdYS=`&acw+ z_TEf*SelR#t$u#lM2F+ z@R{TNO2T^h1O1KfWp(~#Ue4ul9SRP6X%TWoT4#BzWw!T5Wzv(&6zSh*HsUp<52ov^ zeBRikjyl*@a^f>ms!rHTL1^x}=V>&@$NmJgt&Z5`i{{lL5w zO@0$`5@_?2t!RRqW2~>@DAn4SwQ+FmHqh>yjvu&C-A78}So zST5=$zhfyjz%;-Pm9_dzB^LL^)H=q8?%sRPc6>M6&w2~=E2f)VLbXXldl$Pf3cVJa z1+gkrjvXJB-|Vo%Y%*b9#LQUV*rLDYTMkoS-&2hhBt5F+3k8C5AYX0 z_U^dUs%8nDs5NjW^{&QI#Qnm){S}h)j(UX|{I|ukWlC5Y!ml58X7Lbx`CrRYOL69M zmpg2erOfuT9%7quLua07%Q{d~iYx6C^OQhPYw{0WU42btUYUU`9^0 zPLz=-5i$$ed!8BPtdPAaBcU@+_Esp)I^&8%b!3z6th3h{S=rk;^Ki!5-{1ZI10Hwx z`Mlrn*X#9sy_Kh?>VPhv^v|`;BUB~G{Q#@6rI}l2;dr2SaM9udXYLib9J1GUSnX{@ zNrXj(U7%8!benP8YwO4<59@tLp2O*w<#4}9yV=DNqA4SW@za}w=X{VuIA}9SYI!Y= z==&4t&dYz7ejapurO<0ojUzm!Tnn&Q>m4LrKJMj|^KwmXSiD;K+Ru@f^MiARRgXjr z^(u5cby)duQ_=f5Ew|?)iT9Pg03R9GgAw(b^ovjRjVITXcp%U~SsbiJ&S6r|t}spt zZZ7N_`MsNSu5wJaxU~tK9;yE^tdQH3G8Vz$Sm%@2yr$Zjs7f39{#GAX@0IE^O+HT> zEP3cEi5=aUnX8o_&QAboWWJb*naoGI%Oh3&SDcMU%IVY%jK`nV$fJ2JxRQ&ecL!MC zb2Wk%oAK18DeM1{)V^?S$ZOeK8gYR0{A7{8tOkXwrca^2hpv+;CC-QZ!1uC&DO6C= zu16P>ADg8}m*GD}6tIlk_HKzF zfvQ8+n4kDu2@B=aq{)CZP&*ec`57x1D_?25p@NnP(4h)64e3C1ajz1Krm~SSs)E3n zkhibP$+g(k*G9gA8EBR(90@RiYOMPNHWmKx_s#kHIh1hT)cL-vB{HliV};{!X6IzK zu%_6-YCfIwzPdy%>Nb^FHEWMmXpsgUstvk3(BljRXbu*7aAin6mfaf-RD(-No(F%g z8bs}hVjfq=)jrF=Jq0!NzadCLLg$XGBwRn#ylQOF@pTa^8!ytYI&;__FVY)NSpS_* zIZ(|GAh;peY^ zL?C{w$yC)sH~tY#>Q?9@ahMbs@`QEZChXWL@0xcXe5Lq6!Wa^v#R}F2^bT6Kg01&K zJqlukVrcDb_=DlO>PG#!R?ooxlzO)1H`ww8AD{tv6kLw>j@QY96&8Fj1eCk@04EzW*QoeU8;CQDkO$Z3uW1xxgJ zdCxokN5amySH1=cO&@>}V(%D3j-r|cW+`|e_f?F?e~cU)64bpH3S6!|_~dXUwqiTs zI|o|Hw_4#iQu%iNJ9i}$@{$JuSj>gVk#a?aPk>CReFyHGcZ4(cO7Xhzs#J%qk5OFB z)akrB;%;CND})4bl4Wf_KNLj`ef%S;Lz2jLcl; z6zB9q=EB$MmKsR)?W>fH+;+MT`Bayh6~Z9S7;XKKM9G^3)N)4n9kog67Nd>+F*zt} zE+Cz^E^%&^-|~-Ck}(iyds{M&*e$S{baovMJ6;p$p*7_cstH_^;~yHnLc=Ofey)5o zTfD0n^4VfF?wN*gm6M0YV!Z6%uCQJBN|iaQPyJQy;Ldo)lZle}1Q#Ql`p*LDKC!|! z3;g;uydy(6fdTr{WI|xtPkyl_A9JHgR$>RvtRDs@x)%(qZ^Sa5I=Y|)CfxP7#>*L^ zB)LCGyhkKIO8=hnpj8d&cfu7tbNyFISi{mJJ;s_sHTjJatpXv2cJo7hvDao&>KGV;YVi7~V>39@NLuzF2hO@dJZ{tv^Xuk^Y zw74+E=u31PdMusbC2T`?mS(PDr$*qpf`>8f-j6iDtpk!;J`cL;!*8a91%uQ1`U@1I z(!#|2bOc2o?%V{=rbA{yC%A0yhc84DFhix4l{7m%50#vC*EVd6TjaSn*xhf^ylPjz zcD_B7E*R2%KsofW*_lynYCSyS`-Y`C&#;eD0h8LwA=Az} z{jZ0zK0RVJ6{q68vwW@u4RkQAOjJdHM9hex`>7&9cs`46I{&!mYMNQ*CF-4leQbKT zfAM_?XCtN1CpZU1!O)Syr@0+XnYpQqk&%l^LD6k=#ul!u0C8z&{bg|avVn$43Cc>I zLNEYuv2jGZ7WN!g)2EeAqF^^Hfe+*;3ie#@f%p-zy zT#0IZBMufp6Ad%_PQ8QYrmdV}NAn)mT#3(xa2YUy1VN&($d>_aNU)DKVe4;3nHnM9`x>V<&i`d^UI3m_Ru0Mo) zB%x-%#3%I26gScOw6O(8NTeiQxhP+3e4EG*MOCQo7*g0Nu2e=wZr$wL+%R|ubyl-! zv5*0j!1Eu4fj|Y1BEl8werxeg*8Y7mxRdu3(Kh-9O2NaCtK%_cdqD-f2C^lk!6S*Y z^??DQMNdMm%9^VU(EI8ZEeQ+z3pTL)UN>p}WZe<1)F@cFZ!5`Tf{c*+hP$DU9q@*3 zN?9x4H`tdVw28LEg@PiPR$|+y4=ddR5AiXuy5+HD|52VzaBU%w zn1Ni5>}4qmF7dozz#*Mb6=&XHI*Qyv)`$^u4lt#RY?@i(n$^OB52!qAlg)QKP$Y&K zO+z9XTBsk|dSENEU#F03A*NkmIfJyui5HgtoxsiriRf?B?>k2`WS)d!(>A(ba7pbXSzVyYL^fYqXqBgZgV*A27JE zo4ekNgeOZrH!_DqBuLh#&WfD}>do)g{esR_G@U0I69P!+zg_-_l1MIqN_^VsG%Q;> z;mn;O#!})oJY=CpN!LwG9`M#M$6-l^m6$uS>qi;q)?6O)AA&+qA{y&ca^X88>Zvub zCRU*8LFoQQcJwflRi@3x@4fu98K342G;4VccuX*IDb zBClikI){Y{WQIa`E=xjTV!j2q-wTA67P{#xiXOA}v-}QX9Lm+KiyvHg2RrJzL|<-`fC)>?WV`^{ z)W;i^Wxo{|UZ}}QR2o(;8wmflw6|B5O)Ry)E)@NACu(HPC8=5Q4Fj}tEA0Lhu2~2% zCnV+QWaW|M{x}7n!i1itySRO!y6lR%p$@RrfwRk4bGJD-<@555Kz`CV+qr6L@+pj^ zhGh_UrOzQjgT?P!MZNz$t@bL>WqJH?w3E=F!0;!XN$AEZtvJwj>-W;r!ePKBsXQ|m z4axH!`6r=xK*f~Dc*qjf*|D)JFS~hm7bkyv@9jud7)HsXjU3cNtE?xBgjW9*o%QzA zxPGtvoM_4DTc_8W4{ReV*SgC5Wiv1plnLC^1}YPKe>hCKK*icU{v4!j!<5@tA z2~T&~1==w}I6F5?H92MHF0;|plW~*NQ&J?i-PzStR~)U7G$+#0H*WL5OKZcDh$=F1 zuGAu7>3`$>_X5Ip)%j~J5^ii>bxiB7%ybskw~F9$ChBTslY!hq(@?}b;rL6vdrRD? z4&J8NcKixdv9s{f@s{Q*FlGBf_IwgpTvJ(f+0?3}4o9b1SGDK4MWl(0<@s`@_9!?e zQvz7nGRv;|p|$(L$2Z@GeG3h#kA3_|-0LyF_AGura0De5K{?k6SK}6NlII6~Cp2x0vZ}pRL21A1! zA{fIQ0+f=Qy~5yxjU=PBN#4?UFUCHxChptbwLqWIsvr;rk4xfYwC;|xvzYO(#Hw0T z0iE0y=5mwu2~(KVOt@6b)XW5dGbT(R^zo?x*P2X5mS zKzw^T0)kokkCyhrADQ_Oey!*{a79r!+8!&r_zcD|s=$F)cEZzNv~NV@tv2 z73`^6Ag0}=Ww14nd&AEcd%h-f;J}!zZSrGVA8&@SADp*w}*r~Lmu>&$}AHgz)#Nl9}J&ZQHIGs+dj*o=MsYj-oPX)yWm`_BodKqwBtn5hvQ z&|Ffe-b~8$!H7KA;)TGw`Cd1r6hZT>m;-|y3ndU>CCyP@8{~@46#K6GefRpjX~vRB zHU~9y1$>Pm_O+LnKj|LGbL>~q9Wak=QvLs)oi@?3m(_@=QvJ>OdFlSs!=+9->a$;C ztLm9KUkjGF6FMF2tTlx+`I4Up8ZJ!EfYn}d3!?2e#F(8W`+Nq+`Mcx{7&9CM$Kq<% za6lhoeNEVi1z;x}Y#0JfIsTsU@SZulE|WSutms<@BeW4FrUW| zRd03rn{l{}aoWR{St!9MZllR+LFP1{&VMD2ko06y=1#^(zf>P7#Jxomcg$A=@dYNK z@|K#UPkoLcZhLYn|4K3%(5<1t^B+m3{wbJPKP?uo531SlRym@JNf6W@H8j*$DjWGe z@Q+|uIeXD>XJ=jsbM?pcRfBi;Yn71Pf(Jh+HomLFgnMk3=@W9#-;LO&yZUH!%dm^> zYi!AlXPE0O;x4qU_bfKE<@inF>MIRa*S&SXqv-S_&3f5Uzl}4bf#yL^u|o^%0i(8L zzgXt$Jqt+u)1E9lSrcbcZ3ibzgUr$Nm2|osv$FlnX!i`#Zft5H>}W#=ojHJyQ*lvf zEB@xn-?=y|s8oNJ@A3#UG*s#w7+hK1TBkxp9YiginHg||w=1{uGlQ&xE2wuk?jC0U z6v9@iq<|mcR+MJglgqLf{#o4lAn{d2{rSz$3p#HaynSBoZH1BP(BWt%MuMA+|tbX zx-vNQ?S_?bOlRu;yvAiE`YphR9v zx+Qo(C@cFYG}ET_`ev#LJ!@pBY~WOBWpmr1Dqj0BfPP)=G55>6Fefrs(r>;Z$mXGL zKl8q$j(j&!yJKEu<0L7R)J&KP9s=U91$@8EefBhlf{D4mr($x6kJsLj(nm8Z(;Jf{ zq$6pt1m1u`AxH=By1Jv#KV%;+5tc6yztkNb{Bd^ifBl#X>-x^2(_lSJE_L zcTzeIZq1w(Dn*pXr(bYpt?)aj)~q68LyjFL)?^;rBtz1s6od4|Ln{9nXC^h5?}lZE zbz4C-R_|J?|2;Q1Y8L&CArG_p@UMDa$>1{34?S zavq40MetimtzY+^S>_MDUDb638V>XLMJV)h{}Soc^r1JX(rjx?^01U60;u;Ah+h}^ zCMFu7saY1GzFx`?n{kLj@*Km2YYCxeM3AAgNl7mwbvnw2dK@-$s&izR3G3wV z8Cj`m*|Hi?*}5262?pvtR<8UNU0)69VXLHp{C$e}vj~D5Ru%9F&SBS0%q!M~2f$qp z?h}T-KlRN$J?wlLQq3``^+fKDP-v0$v5j0!K3Yddh7o(}xOh5R5xpmBi_E*80rK4~ zf37z<0XXW9*%kWp)zqR_ejw$as^GKRYKiJr;>#G5iw1$&Yyq)_l3xF^R3pqnzG8p4 zxpAZWBN;#GZ)HNLy?`3Q#M&zOaOjmAO};1j z-(yz3+f(rUd}ADF90Lv|VIh77Yu7&u0y-XKT$OklsA5#RN?)aRnZrHN0>ipl!2rMU z1HpvOh81HH#~(I$KRl_@<)oam59@%!2gL>(C-|*9vbpgksh&S&~o;gxeNkXe{=NdQ;*v1 zCV0mB8bep+q~!w5u=kQ6f`#notil_={ppoHWUGZ=FPh3MlU|r+4Q$ zZp^)*GdILioa@GfG7WT|NVN<}oxm8V%eN7J+~#^f#HwJK=Y|8g6A%D2kdWnDOtIBFx@T;7JNzW z2CeM;0@0xLc$T>#KEhoJlP&ucZPwxq zshW2#i%%Cbx{e~y)Z%a?V2!fVaySobzEq4I;t#`tYXH3aCf*^H*PpX1_e~)+u2ud} z)w;f}=bhL3&yxFovf03iyz~w{mkQ1_6_2&3qS=4kQ ze{)U=rDpyLEN$7$=ZvjrzTOcL89c6<;X{J}NfhiEK$H9s8J)@Xu@a_!4lCEoBX7u0 z{*Lt7kk%_K^RUq+UAj9J8F82*+8uOod9tHGXnfpu&~eL`yfBY~dR zqaWXdG^P!1HobN8*jfLmFx8|?zqLj4t~1!TEM*gDEmz3OUC?ObzcQ%%}(p=lFU z{vXLto#D~?=4(~-2@kI|bg0Iwh4!Tju8vjcvlGc$iBYwch6ljP&O#B6Ju-9^`{hdC;*Df@Yx ztD)Na@HcA|oasz`N0}j=3`5_vqY+Rt>yrgP)f4R{=M2i6wl51S}ja{ zY8FoG4R%)9!tSJ}qF_>Cr%MaZAM!DOh@6S&e2@a|jHb+1A)t+gz?D7l0{#xTy~=5N zM#*9-YGA#HDYLDIWnuo;Q|EfAhnVPdm3P7>G&KK_2!7S(8Fv#Dx?%gr;9~X*VqRDD zEF&pU)sI@pzv4LW!`6jOy<}058mCQsL9M-q_ z&zEdD%2nSPjg2POw;Z>O1oI6@FmM0O7Z%=jKfvpl5f$qyzxV>qAoHTb7tVnih#fj2 zH=IVycc0!ugWOol&XHgD{r5Os)>*WWjyhd!>D%UR5w6=~V&9dz&98jA^hJJVU`(-Q z-bsS>C{bHZY13K)+fu_GG3}GP5CR{)$vCKwayVihxA+GBXLE#L(alsL$XGh?kz*80 z-jG+M&K?LREO}2 z|B=MssCXxxo_gB~zetUT3uDml@jCvd%4h9IK%>~EAr{@2xsBn7X6|%jv}7j3rtWub z6<1H(fRV>gkLXz1PqYhjM?z7rU7+qs1<+H#%2S+6>!38+0gw8~jj?+AnNB**%#t-- z(C-R;_0z7*$}2vB?%bbs^3ywxQzu-g2` zqYxN(nj_Wa=%vlD&${=Sqk#SD(MBhKUOwd42GRz;hh@agt?al4F9e!hJU`lD$k3#v z6gE;~?qGC@c-xf(^>;P|OX~J!&#<}1XUq2}#S^^2C^Y~79g+KF=WoV3` z$uis;QytDE*9izs#~l-pVa&g4>hJ+gonG6SqKJawFAfvOUzgMVd?mb47);pEeu#N3 zoP@{qDTf^_{I>s^WBcu`goRaksn>Y40oZ09UY<=<1@00-q^j}a79 zECWJUIJHcpHAh2aiByK9BkSv*(iY9ChrO#e32gT~GX1+enXEO*R9@Mc)dsMzojbbH zurc=bg&C|=TqGS#aT-e!u{%-T^$q>TM192``-k-h6N~DwN*{ofB2k?bpR{=iqk~|43DW@7DdZqhlTc&TBz{^`95^*QR+X^*eBTksxdmbldyKT zK@y8GQ!1y9G4lWn??-QYkhxlYlK6#!uv?R<}h-1Q}`KZp+Lo2?69{Yq=b;e~# zq6O)A#d6SpB!?#B2Jb|iXH>fsIB3Tx03SGfa>ETSx3iBMWZeHF$t99xpc>5Y+PQo? zIllGDv#cNYUQt)4t^dljhUwf-`;jkd9(qAP-Y9SjMoLi=$kQh>~ zdvQ}E+cg@)5mE^)-eU=}lOr}$U$2&n-yvf==~+q5(f65(F3ZyO1M{4Wt<=Bo(O0et ziqItENPCvqc-wt@mtWt6%^%BkmsNH9U^Ahe3VarPogyDkUvie`No@@Zm? zE!h7DgP*_I5zlNPm1FOZg(#rrTgxMWD}#!~EWVnh=Fz}9J3K-we%DLp=Ov_0z2AHlpc7us$WL6t9l z8u0D`Y^ApKkwL`)3n@4IwY+juMhnl*O_;h5u5)ueCtlno`;=yrOy$hd^OurZSl*Z+UbF;|=@$PeLje~S>D!8mYY_+hayU?dfi}mx6L^)}XTTsd#6Y+kw zy;7{5&}yzh6LMUa%E(O=&Kp#bA$h4#q-dYDr>PN8?i&14q^44KhMWIVjY?45JGs5} z;IcjKq-`Tj5crGmE)R8!FQ!Z*-|BPW!2G{VXruYYm^OH)LI`4qLhoxYy$f;b8i;$o zNUuSfmBtHkD&*#ikoq*DQEd7Yi|hAM-9cT6hgzYkHxgKM;KDWWOHIw8BVR-8_H%m2 zP*s|-zyF0Po-tC7tj}$WcuS}BaJ;0hx^>?FAVO)?qWmwDJJ=mx!E(g>CPZnKst71q zrkNp;S`(_;;*aYQSo&Vxi$iHbN*KQok1K*bko*^PW=yGsz|j2n>W?;v5d3;e%~dbe zN&DrzU-Ke4nit~M&rRmI1U?w`M@c_O=)GnKJ|{0LpAf2XyzxFrThnDtDEQJDEMT04 z82+hK>_)$yPo)7=s)S?_a;5iL&VQ_3SFf598|X_;i#4;4e6AZBbpbd&80jw zD<(2mIV)}H?`pLQk5LMj|B@w!lb-Y1RNpGazwsbv#WvTauM?G2J= zsWC5`uOFa44mC6yd$>VxF1?;3R=lma$$Tkr!J$dN8e!6WA%D&)YV!i^1yN1=J|Xu* z##EKA9EdYHrG1j{NXDJ~71V=G=VaM^q3)FVGu=VI4+)pG-=@7t=>^NzovhH&#YXwj zT@wY5jmkcCta?}1t4dEOpZ5=iNPS-6un5lCJJ098EI6jULtoMz@~ZeCjfBZuglnAvGZQA*5Mg#8P(Bi|L#%IE@MT|D`MaW1#B;BcWcd~?=(ayFTLpN33lQzu=_sp!4zOQ{jGNi3az&P2fLb%)`@K3+Ve5sFT6bLwHCLBcO(R>n(W2~t^dvwCHo|CJ|Zu} zc9_v8p?6Nnr^gDWu$kaUHEANB!uax^R0_OMB1 zw^&oBBB6lxKB4i$9~1|7q>}yC?+jC}1ihA?)$?a7)~Dp7h-&+|Nk#1OF%%FnUbtu5 zWJ%9OGfl0AEn4;-21`VgES+rW?1@-GW#Y}D>wbDC#B*IN9?Cv4KM!8ba z7GO=-65&^x3&5v<89y{2(Rz61|1tNG!EZZ@`Hua^C6a(de|eyyI0HZ5k7TX^kCCCH z`%3fg^mLhCJkarmz+sZj^ewgf9`NRoMK|=vierEntLebuH1z~geNoY#ttr6Ot+4iH zoI)})<2F9GjuY=aoDY1h<-Ujv03SU!T#s6ae9J?RSm7Cj26l*dQfq#1`5tC+b9ddOXmZX z#GE$6>tH5l--{NWGj7oD!EN&Ne5HN3Bm%`G*^9?)aPs_jdt^Hy$yM}j79J#N|WHI52(ny;&M7t($Tl>5sMOWMH4 z^TRZU1khsClV*Z)YaVGgylK+?}M`i(Rqyrm_b+;BKcDb~Zcg=?CA7^C z507P_h2+kHkN++Yz**Kr!@uN#g&!aywR#x_dEAN*6uw0@4#Ji_bN?3);Kd$E|t%xf8ZTk=ty z+Ck_@MZt|yb@%LCT|F|l!f{sU)p~(bdRHHCgLV&*_)`nj#Ay`2dcG6QJR92xd1v5*q7^K)K)DF=2z6VU6SMG9zV#E4G~-Qzk~ILyDFi? ze_>Rd!-F$9cC)h)gTMDCmsb4kb4}1Kb$l!l>!)b(pI;F2!3p{@g+n^&+p~9bS5h~u zbTd_*h$$J7U|r+^uD0yVZ&%XBHK^<+{bSX$v9aj|G(FN>4?R#qd*+}xb*+qvSweVl&=P60E z=Fl_glh1>p%O8hHJ3cr>>szxkuXxSl!%ip5alp*2tKP`>va<$@&Bpo?AtNwED|F{D zDCL%H1eoOuZvO4p5$?h@;zOV5a$>LSUmOqesAr5&Af~7hn*EWOoyTAt^A1iB+Fo~G zG}1)jplEu2OCyn9GJ23$L!uhn8(f8=L>G`@?=if(ZgFp^i4Wv=20Fuqy4-a>sg$o5 zc)Re5uZd{3^@^)mp>-EhsInnKBhQ_&tX(HUn`L7I0T>4z>l%A!^E&f)_ar0(t0J*l zl>=qbYd-uQx7OCZ@Fju=X-txEB=VZ@JJV9+>Fj7rnl&zL=KFa23sSrEKoyG~6GW^r zf@RncCB3GAVq0VB?h&*px2fDPij%)qxaIlQ`vG{-U6Z>TB(%%V6ry$iLv)%1`E76s zzWBg=uG=K8Q%@mIWdx@0+9TI8?_65Jvs()jyfjB1u-I{k_r8XUkCg#{dB_49WozI+ zY*i8;Pa1MfhIy#4Lr0?7;IIA6_bIJI+V}uoc>n2_6^Ez6U~<@(Dw~=fflS-6=VZO# z2BZSN4B$FYSxROGEE#KC{5_-b&`E=pPi{)he+`KzK_Puf-3-H;2iKk}Aw|pX%R=(2 zLI(F+($X2JC8M%6R9%Ut7a4{M{$XOlRd?{!wtb^&UT$or!cusLa!CiYul`ZpJ%E;J zI+lv2U?hEAGQ)yH&g9*P+75YVD0|6`^`WewMZkueK}qkmQ9VP>$3^=@9jC<00}=gwg2ZjI zV(|-uZu!}M>)OKH*pT9a>d$2#c(#Fur`|V~eEXqgw#b44$#5EHUgi#oslOg>CS}Cq ziJKz6$I~FP@DjE`^aCm{`G31AAg=ml?|H-DDZem!|3^f07lh$S!>>$!z$JH}AG}Mr znQ;a&e~@dfm)W`dGw)mQ^QxcJCDsf0ZV z^!R+#);m_=&a?ZjoQRx~liVk?T%M~+%CfM3c^&qnfeorpxt8RHP!w|YL?2(>mfxg0 zHyF^@UVqr%-*Y$YV=XHAS$S=v?!_f{pEA z&zxM=U#S}A{p1sZ9Gg1Ukd2d93`+F^F8-#K6}*)TwB<=Zwaclvy8NQP{wXptax(EQ z8x5X9e(&6v!oBGOXYjUETfaO&2S=_b4)}xZS-xDK}>NoD=|mhhE~fJOZ$#DZLM@I`Qz3szA*3p6LsJoKX$>*y1 z`%+k>4oEg=fd-B}qye!UW%Ig!k_d<$$#^Ypm@0H6t26?VU!*>5EfNh61efrGXNX@> zCOLe!YC$6XXQW$0k)ZcRtP(f1-x)$Q%(q`G+=WHJkB~obE}X71A`yehcl6~8+l7FdJ4UTq{8+`Y$d%3vV zB>CJSVaG1t>YWs=BZoKurSap3O{{5zfYad80(Au0?vdfarZw?^&8Lp zSRjD!@leXyHcAsj?fd9DKt(x2Rx%w0fjg&xF1IPKC#s6mJNjeL?88ff6@AL)U(#5; zb#et0vQP?UQ;S4BzhB6A51)n~@GV5S3)U8yfU!x^%4yr(ML_xjg+H+~X&watAMn83 z%T-@Sj`#86<&GlX=4~EgzWU338zAegWmwUdx?XLl2&TE7F|f2eY4*o#EiC!7;!n?# zhK`)|O&w$N`3)10SXW@)b+?L#E51hwo&n>ralr5oOTgDyea8Cm&hYZ!XcHFFujf&3 znnGq2W5TSC-!f7R!0c6b#urueYXkpz`#wV=9fxq;{+Pz-3|MnklAL%KkI;|V7hbw# z>FpHY`*#3+e8fVJC4MBrC7FfrmK(!Nc++JLJT-%l28%{T%HuotdnhY1&MC?Ob@G)AyVbPeDj)(qR z;FK$w!f`-)*EP(RYUuAvN7vsWmCP$zsBr=luXBE>*2IcN`$e29m3&X0C$m8Ls3$Nd z(Q1F@;pG0xLxxJ!y_R?1^^oss zN%bo0W-<9ww5r5%YQ|iINwo*H1!;Q^ZP;NEsJ}vDV3S<7RdivR z{6Q~wJ=zrgyKI}k^Os>^CakGq#1r+8C-%&54Pe`eapu)NrU1uWMXvso+qbowx~ZL- zIusaSSWchM7qu>!Lf0N&g^Bc14x8+Peuy#-%Ttyc&?po!la(*4yc22w*UM>#+aKsg z3qozSh~rv$-28%5%Tni}?rNGIt2K+L1;h1*AI30B0$`k!#SAK77WUqFw$O_ycbkqT zpU;RdnYtkU)y{njaw4ISU=yG=;bs7Y(dkX*;}G>E9n3Fg(@G;3UWH>)WrHUpHN+ zsJ=Tq-4on!mtSZ7kr~Kcoxo_#WX+r6^5x!Pu7Wu&El;wLuA@?ifspd zvpGsYXAvuD15K+XIC7XDl;E4TuJhaAcVEzH-ZL{P^5GM}`w;7$UY}Nlt)F8NHbXC9 z9u|v6H|ebp&+O>#odxv_@IR8h|MIt%nLNVm=h%rV!}n%A z`1p{}+O}C&uod3T`!w|vgnM5sJU2U7+m(?QEhvetZys5iRCNRjDpeNft8D9-*LOF+ zTWy&vp2~SWW&e?YcEPV$q={Pk2}n2!1}@z5g6s@Zb3{2GHM;xlxr8~& zbrFENz!=VNx&hmfec>6B4kk0KIOjVeoy_N!uR{hWfH{xl2gc$|5di~_)@zV~D`HVP zhL9U&F%YkBNv@xU#tZraQ~t(}6S-o!Ex`?Q6~YzO@vx3xE@wf#ds0H&j$W=(Y46hR zGi$y4Qk;O=zt^3G7VU~*jFD`S?;bT-<7E`MIf9uFAUsS(-|r0_&i*rs6&c?is#NJo zjlYz&cT=iZN&A?VHSXe+KEYj+xNkL%h?yG{Wc)Qw;O?v2I?_~`G!U8dLib$#5oEZgw*x{yU4%SYXq$ zy2;*(S^JH*m&SJOMPXyAZ2M20-+P1!ot-)*&wuq_>tgCqY7F_Y%MQFco|nq}kED=z zk}Nc!T5*Y;4lHIy`%#<$z9-izp zUaGVZ+4W)EW@FktMy5|UvYJJ%appsTON-_=+x0DjnyKx>bWe~J>o(%=xXB|7-bmF? zA+#+ks)-N3$f&5yFoKLO+Im*DzB{b-w9c^U=HRn984V*`=&k%pjGE&_IWSO_FeLQ* z#AZNcvnB1vb??wHDt8yffAs#?VDF==A_a2zxx{ z-SV;7;Q}HL=u?j1D))|JzQ)O~QwQa>?579_JX_Cgay|_VufQzfnbjz`9;S|hgCTf{ zPa{hH#rh)rRWe2(ViWYHoN_}O8QUK|z}<#pz>cYNn0wULY4~djc6n|9_9v_N#8JDO z-tY2LhO9|@wJzu!9I8bI)#?P16|Ir^>Ol2?f_>m7551Pw@Tv2A?I&a;j*-NOAO*yU zB*?d5u<=F3$#odd-Be;R}-mvwzRyI{HKNu#qb91}qmKFs^Y$0}zgtp6N zTL36qz4dnc*F?>W=d;>ePR?IgV-%y*_D0-5N16-Un(HKBdG_GT+;72bMyc8s1$l^p z(*6UjJ|&t*%4+Ko21*ZhdJBU3=4R?r4P8BlP&ec#%dnS4xB7A%wd-W=;a9#_u>wrD zARZU5x8+q#@1l?8@}nVJjnE>rzKYG*IT4-k-K037i;Y$`bqUbp^Ve}a5w-iT9$Mx3 zy*j(*w%aPe=kF%5p31Nu+v{zsDM~G=07z9K0Az zY_nDMo;2)W;HF@DJa$&bKL9ohz`iSSFE5@cehyOcq+ z;^R|qniJjp{Pl|=PPO9!=S_gixeqrZA9d!)ts~Hq5jrs>53jgj>$ghaM7P+mHu`&c zte(bgZ9U@+AH$9M7G~8d#L&-K;M%pafx~!F}6p;0YX#dBbOU%%rmYNrtil6iuNA$ zpC(@WH>UY6t?c3c+!344`CKjq^}kmJ4^uLBll2RI#l81z!gH`G7&VnkG=|Lmu9_D9 zS0WAO^3J*2#ZV6$EA_#f9kS}Af0PC)o zL^U0{9?XO!1iz26YW_0F#+fDrlscm6iB8^oqtv#by(^SaI#-V1$-HS&-Oz?=a3b@ub%GE-+P&E;w|tqk|o#b4V0c_FXq7s@S=`23Qu&Jce0JUm{W_4H~< zhH=w4{Za0$E!$c_s0^yW&U(`&qQ|@-;qy;b5aoc~?i$dQ*mmp8a)bLvfMY$Zb=;w0 zhZRANPA*U}VJ*w`r)xv>8|I7UHnA2uYC) z*p6%DhzBvvbS1HE-dFU7wbzHGO6D5=e5PHR83 zn9@&O3Py--9+*kCe_eSkxF%wSoytCg%1&?0yn1F#t}AIK zuf!lh0dimem3~`Kj(YJxRXVHX0&wX&DkCh-Mw6yKLW)MUF3qOsAH3cs10m44n3%Nm zkCv%A&cOI$d~>Md#NAs&IMk+5zWAdHmAZEUBF%-vDh>{-hsM=Qv#Id%u?F{Es9!y4 z5(*7|{5|#}lprFAd{Xgj7BhKB+)iEJ-Ge!?ydt90k+!;1(7fMRUICw@v1p+objrB* zMz%$8^VNyqP|;EFpE#mJ7NPXAbLnn0tSQ{l;QgGbz8t}s)0b#a$q-f9brF)&g(p12al@0r3uBQXFp7d7G1D@_A_X$h$E9z z+~I;r{la9$W%MMw=aGhMHX~k0z;68UjiRBjeuV`_G?l1lOa=oK_XR{;-Bg!jz5s_V zJ~hYJHViB_ofxBQyLNL>w(<=`MX6PgLnv7}0%0@>)7G8ALRJOdKeqruT zvSSRzlnM=*N^v(6SY?~|woLtF#;^R3o1z#^sR06WTszpuTyV*|JP<}2R#aBtDFZJ| ziuVu?ZFT0C=eB%Xnsz7iz#}t;Rt>})yk8OYwuaSa>EnP5t74MkG`Hj%tIU=v9dUne zd`HX-HKzo*3D$D-AtLwK+-@1-B95WaNs}Op#|WB|^$5!4TX0IJ=_s~E)~u<{<(a}y zU8@dj8!VP3ZZC@t+x_tvItw1wmN4snS@Gphrq_8)zS9$XhyDmWOhal#zhd=bs~JfU z=6~av(L|F1LnViip)|WE!DRvI`Tmmxb5fDCz)ulnho)Gd$3$a@&7O`%X<+#9TL`rV zb&GG3V;tAazDzgMCvno(q47WYFC(AsFkGulSh*C-=Ai~#_hTwy{??PEb20MBBD8Ks z=C4{x)Jw&3uz}C15=M4pEoSc(X_>iOFN1?#82!L$z_DKXTOZ$-t7~r5Rc^e`u10yz zuNA|ohX>F6xtkO@utSjF=)6ctq}NUPwd+Gnb%s!8(M}@cKlskL zn0Ur#-C~bc(y*6;1&MVCaw1|(2cbUJ6XkAKVl%vd!QK-1mwu*Nd`$}B+_ubms zMZT_~10y-Q7#bWva>^DI1xY9ET4xwvjh2!~s!))h$@o zmH?fyYK+b-PT!y^{>yb$T=LENoJ{9dYI8Nj>xfqiexKbcbQ55{$*4n3pF7#tMwt7;*vI;xiW8zFeup}RUzd{f@{OV9N& z@?c`nyD*<9ic;D1;h|}&4WmPQs+_aihAD;UlGm=IYk051fqbmz{aP~Axf^^60L$h@ zw1N>rKvuc$kS4$%ING{lRU>eGI(2*jw?a+&`==nI?~cFwt>GO{y@~Lpif=X}bHPqxo`JntSkNJeGkbjMI z6{I(DWyhC~5%er=*C>)HfF)HY%w@mJ_sPCQQvE`wlaluEIDs#BBf;@PF!BjvU!IZ< zwU$lIvUa?ws_l7__4)2Oc7A9##*6CPsxT~2ew93dDiMp?vNnPUdjDo-yTSb-{2GH) z9bzN8*BS;o=Xam)nz8q;UpD}@I%;dTeG0}rN}g2Z$YzHY<+4?MmlFT_?1o4oGKqOG z9@b_Oyjv#qK;!4O+QdbiOqDxeQ6^7KE&IpUjO{8H^K`%Z_2=n9kWc69Cp#MgL@+p? z&9Rrnv)5LSYFuPr; zhMAR}+BUbG94BPOX)hNaf@u`XmQYM+Cb96)M$`zhI=w!-zT|em_yRsF(oM3ThRboa z_k|(g)(w9%9nrniX!qRv!caOnL1waHX4wA(ZxG_+39JQ6{dGc3bp3oWA-9Li_`QCr z%-BR4@=2IoL#`#m-;Aj89Cvh+*^r&UQ-Is8ZBkt4(PoU^d~X0#`7=j_S7;b})}?fEP5=kYj6!Q_d5{_P!MH$( zX8Pf>1Ve^v#)I{k2I}WF4)b$ZGd_`oqvwAeJH>nUbMEhFKPh?Y(`u3?MGwB`b1Gz& zxv-I$-Xc)y^d0563!1ycD7vz0{kGBMiV*DL?q>S9V^LGlga6u>8bdRe*2{UZwtAj` zLo@N_-E5akkha@{we>(u0+h}9&sk-{Y=8rs1!ecJE~rZfhyzhPUpP##>b{kBNjx?7 zYtd$ZRJt4OTOY66>})e@abIo0K}xXrrB}*hhM>sMVlFq&M1o!=Zl+Lo1f}#>445J6 zeeKhbOHOaVUHn=6t~@9|h8bGHIs--J9<0YRB%L4-3ip_;+kQK>ayh}gD#S@U3br(m ze)}@+p#~$8CUfKi8RNgW5+>~b&^)+wR{PzT8O5@lhU3!`{^law_js^@2TXS%pvo<8 z_abwF7`IoolD+WxfzgMOy@w{|t8SeGPhOB}wXS^Ws|v#KU5}O&F$sy?Yd0~_Dn^BY)m1p)ITSRB|-j77r;Woclk3~>!E{p!)bkn&VzP0#S{yfxKeyJ`tRYEZIce+fVWjxoyeiiq&KLq-M-WxHDWuCT+9{7Vj%?epPvmLEkW8pKF5vpq3B zcLkRg!l)ueTTKMV>l>{D6n&;1^uwst^1p(64fX4MNDZ@EY2fDjAUaj6>vvx7&(83E z&iZ5DO)k@~7LK)%pSVm!qC*q6ndu;t!Vf%_OmqW-Ce$?|3y^a^YcfX&7-yGSQ&>v} zZ^G|7j++O}f4U(C@$APzxt2(QLs1(pIe0M5gi+PrzNp2I?5{FeU2FGd)m^1^y*;0F zCd~^=Q8SsxCGajko^c3Je`VFr!4F}@+u1S)jTJsE@@JbiwD*hn*_$9fXErJgobi@!7K}biE>KLK=KyS zI9%f7tK#^_LSj+@>Bc&#BGti z8O(rFmdHT2R>6$Lgn?NISaC}D{-#kH(y|4Yb8ibLw(|0Mo}ocrtlomYSu!GzzhO38 zaR|`(?3w#|NOt@=)1a#b`;sRMJ7p(4w{U59Lq{*h^H_$>PTu_?&n;~J<5|At`}F0r zL2NS1bG}SgMG@kY6t4S1Dv6oR#PA~70{X%8)vtywB`(>Mh&&+nuc2^8%1kFiP;h8C z$hQA!^V=K~o$S~M-*GO!N5*LWYSv~mPk)_-NLGA9s-u7cq3!JZjF#WqHT_RDD;5qs z=`707G`sL6`$2|ytyV#-!GzIRKc3o-53IL{c)C3ZIJi1|Cvi5%{z@_)md?t~rl(;7 z?sENeXcic;(4r@E`Tv6HlTelaD6Wg_yValWd_K_G+5faFEd9mL&lpjz{yWs<`&Rny zV?;WSZ_RiLCA}E49v0esalbNQr|jVwglTQF=dNvF5GbT#y)3fR09|}$RI&pHGA}(j zSXOR8tt6I8dE4#s$Rs;Hc{LdD4B;&zsv6IP?Md?h?-9MLVLh3?-&AaQk)YpDv)Hh6 z%FsTVM`pqE5RXCN98=v5-~Ee-y5s%@=z6nTqXjCnx6f z2h}HKw@kf!nn;T?u*-`%Y&~@T?;BVTDml`@$*Ws~3d3SIOj+CHyU8@o4nC@rT}?E0 z^5SZc4ZiveC-*$#o}RG~Ptok;DmeUE2dz65AGVeD9(N-A#3h85PLu7RgN~`fB#gN6 zA@S{%;MJ6rG?1<4d|%%h{O&&khZ@sc>QG(9=!1x4)mz=-s-kMBq~BL&F}MUv3hMwq zD(7Jq5ZkNsM!GNgGo~$uDSB4G&=&gs!>_=tPS`hxV0#Wrk&-^}%wsFmt82sqB*lB` zHV}sjYs)>tOLq&=9ae>B|L#ywoh4BEZw>_?doF)dW1qV{PsN$g8jnfYlK)02sLG`f zG+WC}ck_{+nl1&e@`+S(5NG_2U^cmG3g*>ojcQlR41r$+^9&Pt{^lMC>D zDseT)VjWB^vGoUcI5Wi+H+MyS5Dcr`C0%d3h&gT!r_ZD~NEv=Ues@UokqSo%<-eU^ zzQ`lf`b2ACWzYTd4^EO-Rf5}P9O8`gdYNF>9P0Qmr>8xF629{g9a}3RAcqKhHkOH6 z^@Y^T?9Ib}dWq31+GFD4@6CdR=GRk&1p51ps@QTN5|IvjIP{VRTo-U{E1^L#Uf&Ov_5HE3^q64M+e8%!wQOA2zy|uhQG<{$%YLOAlk8T zzuDI4v|k=f4Mwxs=Y2u|+g*s2+?%299dnuJCQ|OMsCFUf$sDw~v)R2v=c%Uq2B&6n z;HwvKPQe$3AT-ruI;Iys_eo#sx?R)f5L|ut*YncpVPzH< zuVoyCA&)h3R0MOX(99Z!5vS59QvP@tN3dZkdaxg=_3CDM&o9BAhd(r8`CD~h26^#s zKfloJl>KY_az~=SLNew}Y0!AOoOBrxZjA+~~oeYCUEY~34E_rA;TTtGzJL{UYZzSCQ}LVwRN`_1hPCtsQ$a; zVqE;GV1DLv%Gzfgof*Z^^;)SZ+<`J&A@4)GV_=z+Mi$7}I9(yqkx9Bt#qkyh)&)EF zPZzQ-={Ha`Gc;j%pf1Sf@hQoNZDiw#R`$!im;s|o1i_}bAIT9A)$-(X=#XqnAg1Z<{qv@uSTi)34`Mg6kd<5vR z>UD_bk6!t$&R}~#?%C$>D#zkr%|5X+$@5!RV64%UakJoTjj3A^Rl6Pc+qga;Jjm^! zYGQome-s^IZ}u_L8HhPFchiE-p}*_*3IHT-v(!BDnwhrLlt)zDq}f{Veg2)Un8!L^ zupl5+Y|_N#$MleO*}vIZR}a6D4&xFPr|7Dm|4|@k=g;y4bdr^@VSFsMmQS?ZcB%dE z$PPb!q0gAC{p!6NUjTCGN}sU9CD({rqZrcwTGSla($E!kHoNxG`^UngE)CDj`6_J6 znl^e*=0SBno{wh$Kgdw2F|Wmr6`Xt2fbOqjX)lGyU*j$ND$;BNV7XE8SubWY*1ba) zE@O$4)^j6g>trT)rUZ? zj3Jsfcynyi7KD~lJgq_v4i$cl3#_<|7$V*dfepa-Kc}lS41@Htk;;1hJ{$PV&tyq_ z=3igHm0PPdjhvogxTDE=#o|{0SU>973a3{9hZOa>$@{>Sn$B^iJ8wIPJc6!-R^TIbzZ&jYv>mI|IU)^lnqNUnk?K=4MWe%8k-c z)xs_|*^ytaU${Qe`V`?u*6ykMc)Bs(#jC~gzMY;~lEcjsv-wvuEd1$US!Q7tvZTCs zq#$cPWp_MCS!)=nVQY37yG&2#b=K%7-_H0AJEor{^gM}QVB(}|`GIncYU1tMBue5C5&V+>p@lmq{eFkkE6x~9T*5n%7>H*1G=q%!!9stWvT|F z@S2MckXu2U{NzlxF@LX9+y32AmGU~X2!8wlf=AaVP9CP2!RWYGOk6~EOXV^9yv15O z_8n+ui=B)u$+Zj7-=3LOOdHATqJ0I@mQ!b=>|>6H3whTtR9U6gr>UEm1YC^4Zy&Tg z(2-A*F&?mwL6+Sl8lx}*It!yH$D2Cyu+;pEA!lt{IZXoS%?)OGHO9?CNFG2gX;am- zur#d73o|DJOH}KpRdLvahNBSk)w`vA_oZpJu`6M;j}fq+aqNSmAJbEZ&Iz|qGxyIO zwcEc(J+0c($V|sZw{C18?)W9LHGs=2`4b~k+>&2y1O=`lJ_tuPcsx!|W1w%GSeoh(E7rSvzsRIe zUhQ_r^mu6I(47r`L=KtFUuHmzLh2 zwm4B!4xD&Ha_|(sBJ9)tU7`~%#pLLCc`)cJ7&asqE%6%UzWXDD-2%4F?rfElL`DJ5 z)Tik(-}8gN+_L)%sWezG^Z>%zwr$Wr3VXBrll=Vbj2FlB*WZe^Ye?kIeMo1}`itnF zMLp$bc+o#cM{f3Fc1J&S@2`3+==~#4hL9%!WQHlmdi-wW-3qa_brOWdH1vn6Fszq< zjx%Gwys7b#r{W8WSvQMk(KHQ3buUZHO^mFeg4#Vxoo~= z4xSM9czu6GRAE*41T_y1+I9Z&dX-OSy8REr(WTI;si4G<9*-Yk>l>QtUHyOntRe4P z??@pW?75Vv$}oPrvl^i$@ z)XV0qVET9Rv!<>4ECn_lTe<*O$3G7_Ad{l|>5@Hn^y9!S?bBAr?Jfpg?pn3TAoRdu z2c86chLhQNuI$$3kIR`f5LH$UmasRJi1(VM{JPa|u;GFaboIV&ow%A5pFc?Vrjz*4 zlt9J8Nf9{zo=*97>ndALiQMk?{zV7A>09yy)DxFJ4-IsL+_<`SmHOIy*+P!M-R)sR zc!N=CDf!OHgpCeC+ZC7*&p-Ubor3bX)j)9@ySA+PGB%7@WFs7Ya|3yW7E{}zF(WZRNx zU-(E~o_n<>sE0E9j3w7cNHo&Vx&c^v?xaeZeaHA@_!UDpxiDVk$_uG58SVF zi&L#Da-_evnqu<-5>dYk4(a?3R`7&3I=_NE+g$t*uJ?*UewD)#WJ!MQzi$2Q8S`qP z+fgs&5lC^&Yy#waOUA?f-oqYj+xGCI5HI?Ey-i*2n%mO;4x3UKW}`ZLX6CJ+9+tJk zEnTOl&f9+$kU@qpJmMYx@Uq_hccRvcitwtl5>52bGu98?u>U8`cj>P(j;9eAizniE zw5^hqN65Bt*K-wzh&Pg~$&x;G^rcr=@Nv$=Mc#kfx@6oz(FBSJ)R8=2{5PK|kp#R6 ziw{)CTzE`xg@;w`_8eQ3K}0WS3Tl-r`&e)nLJm_$(>t*?J7aMBr@(OMKZolYNGN#(;bcMRip$Fq)P%bxm)@b^p;Jux#|z%OO~9YOgCw`v+i{FUK4 ziVf!8C767gdE6*C$C*mNMFZB4%T$2dN#ROw;1~rW`Z0JpT60R| z_r4Xi0w1;9omAW21C!kcjVTt>rr;hlS8AdRh_sW`TAy>h2N0-hee@;ujKy z=v;U(ywzE6W*Qdo)LD@Y#b?Wa;H|9&jm_~F+>c6Ah=2&ni6@Trp`LZ|yE z5gs^ty^9-_7-fg?^hQtH$hRh+BT0FDm;8s$ju&_y+#Z;?*S}&OtF<8h?fX3z-GNv} z`pi9AyL9@*f#+8n;r`zN!i*FI{2#>tkhV8)_%bF@&y*Zw;HZxpr`0-jrRkpzmp zbYVPeha<1m*w2mR&ByUF0f~DiaUJ)sGg4Gs30K6*56L2uQizlCMdP_(qtrQjCa2S5 z%XdErC-t){3Kb|iuDh}E_oJ9ivn)c&5qT%6enw|*xqP_6pIpNeT@O51-3+?_qj<~U zkh|zgbM<9Xex%l7Xi&M9zVBQQ2VgE6i%mrv$o~ie8*cJ8EoAQrrnTH|X~J!;7Hlq? z&}2_aHNywPa<}$Bs@#cRdij&Ag+*i6q!M!@ zNM5~XLq1%xbK-sn+bfrahJs}>^13=2bD)%(sZ+~!=U}nV8Gx4#7)WLPMtN1D4aV?D zpj+zg8KPThvt)7Tx$!SY;} zA5{1;owL|X1#8?pLZ~ zpG+9k-#Cw7UDU#5as2Fq>N~I>+q?WiGz$oJq%8ne-p%k)({WhK3v=ZN+ddF(e%Rz* z+UECBlT4$cCC3b6)xBTL5t`2c9=Epr&NRtqYS$!N$=-8{z7CgIm+el*2`^!`B zLcu>u8}p&xm@DPsupr0FJHE)J{GHNX)iFKR05b`T_F_+^qwr9BQkVEoiXWSL6W_woLoBlVBM$u#9kK3 z61LA#t-XYJ!N&r+IvE+MKmWDtahKqQZ1tS5fe4w0Oaew7uU#~N1RZ|v)V#M?h~a1G z!>}Ety?})?b6mO0RVKqxLY($ojE9*EN3vp~+K(O^TSdB2K!f$2P#ppwPDz*G_!HeJ6Vj8dIO&3}d@!1C z-fz3cTC<+D*8tjS>S4T?Qug$7t`+t~FM6~`v8qzN*WS9a$|(pyf_s=bh`%{boG;2$ zo}?OKe5a(9I4&Ak&kf@*eA7E$Jo~Fkaks6#kkaefZqSy3iOo?>i|m_;*?Jgs8Suc- z*PAEcuSfLe$AiV5`TuI0yRtbJudGY~4U$ zo-Gr5kzK+eC2n{F&y7HRh(P7+p3iN7W^1zhWUBxk=eDhXMk-cWz*pxVTr8&Uhn8E! zFBHB%nuX^*WvSO!X6|cojUE^wZ3Xi1zuAA|b%#EdV$(Ph)^iU&+axz5y7);rT9#Bx z%FICs+Y4Ux;bl#u2%#mmbXk--%mWs#(*U`mLY2FecoJsG!%;c^ABC^et1Ck{ zmk#<7h~&Ce5kl9k`KF0{rx1+Od6UY?GGn}?Uf2z-OSXMnZ?`4}2Qdh67h%!Xn6lj_ zEC7|#8d?kZU(ig>t6?_Z2pcImFYj&}=Fgh_Wh+}4n?Hj5N3lQeM;N!K)0S6&EaXun z!02{!tS@Uyv1Z;fA<{>&3IFHprO+-L-)@eqHE7*n>E3Hf)_ggpTSLC*hpYLnA^zOX zdz^n*^wP5zs0(EXFh26X$EvrL-{zj1w6Eb`gKx!l3s> zl=|H_hAW_F-tU)X6V2#{(Lx1Bv5lXREBUCbywQ`!mdtd3mU?+|p-tGhUlG*sJnqli zKMbXj;z`=f9qw;v^we&vYlWEC`M{Ty{)M(Y50&LL2RF|q8SCZe?dmF&xKEMz8XZf% zOQ3qYe&zX8I$aTW7-I4-o4*dDSn|n0vuhEdI-<2Be&;VY#9WOsGOUkz1VReMVz(A? zICiKXY;(_#Tdm?1h4?cz*v|{)S8Gvo4G;$AEtaB-^jVrh#ona z`1?DXH`Q;nMEV%IP*Ia!+fh08Pv>t**Wy-BY|u+b)BGP!2HAAJn;qFc8|zv8>S~4= z7i$;ApApzRs{D&>_%}DpMs~ja=9r=mm}C6<5X+r{*EAI?ctx}Y%V(0&hL_=cS$o!6 z5%`cY*X>WOZ@y&6e*sH&jH6`3RuTB!#gsH5vt4!3bePKIQ%3s_1LX!7y&0pzy>_d^ zt{x=V4DtFq$=@^katB|jSY}i!)#pd;|JZctcIOi&(u~(nP|~f7c*#-0a@|paqp;Cp z`?xPsV3S4JHv5?1h|vY%-!@w{>xwv?NGG2F7viKyg!p&1dNuG|!qWm4($^AjZY@*2 zIlB8$n{F+3+m$I9WXu2T&D-A$H`H*VbBQduvqPiRM@+u}NFau}X9cAoGsx%eS!Rr_ z9s&RJc{r9@BB(eD5h6TK0iZcy2J0J!aai<$PnnSX=|AL8v$Wk2Pf}{MA$b~&7`!vr zZT&Pn>W>}v+GF!V4!P(;MI{rKy2ag5>xxUO5|Wvm=rFQ@S;LQyT~mfd$HQchxe$hf zm<%9E#*Vw^qEnSG!tOUEPa4-a`xo6|q>yxX3QNH zWkv>LM<$hvq|tH*I!@oW&t-s}JX8IkIkwJ``9kY(CF#lQQuvoY}@4D?Bx?!W4o5x3pgV%(U|fTu%jRbY8XAw6;co zhv>`}Tcv2G)J`5 zOwW!FCJLtngvL~K7_NT~F9{riGycr$bZK%^B8iztreI3a2O)pL)oq)k@`BV}MS2#`*8@rR9N& zG(HxSo_ohd$cKP(FF%nr-jq+8u};isqE-jgfs0-9oWjK`iURJBN|Ao<5%mX*KW|KZ zEwPjw<4Z4(#s<)8yXPTkkqRJwm?e@+cVKtKv z_Rh<9@+*tigrnBO?p%KyK=?F;=h$dLRP$K+9`p&8X6e1NgpG!tCjsc>qwT$r(=*_} z)ATylHbQ^OV=hWcE7ecnlL9=Asf<{M9Bz9Sh*)~QS;s${I&Cl{E z$NPmB<@49!t&bI2K7sF@4}OjWt+F}fsT+k74H0wIqxuNDLAgPGODhdY*Ts0u*p!R3 zbHBJZvT3#$Jc%F6`HBr04Ma*r&?RpC*6}Eo{xL;?#XzX@hX+d9R=^Rm1Xqc^_GIZ_??%>J-{ zvhpd#+=oNniC$>=euq>^N?=sSSw9oka7<^2mZkMBlYoYafKMHH#CkvSs3JXcHb$bL z{BD<>>nNOXr;u6|1R~4nWNX94u*1$5UoG^E&M(6h1E21-!WkRwmW#*lT08$6Jg#~# z??tq<#<{&=)wym;JiSh!D-Mq4mD>{9s^^XVL9t084gxfIewy%_2X2dn>NF90hddKD_k+CRb0ihaNilgQc7$j*r9%-ngh-iW0Q3YGSmJ4DHoqN z{-p5__qx)3!}wYqpf<%{3x?mmZQG}C)qleB1U~g+RH2l4?On%dAn4H<`P-|LBB^bQuHiXN&;E0He9avlXWd@TQoyH;r25+dzd3R$4 z3s~&aZCe5W5lyyM73XdkG0QEdPeJv^KK|&c!GsT=M+@d${%$Sp&23aLow)deG*Zy< zoB*Gnx5&eB7|^62Mj#%c>7cYv9inJ%1g@vn2Y<6}KC(2d-`=V@B(nU8sEwy?9ll24 zkS)2;a&DpzAgsbTI62pryysr6{oqoF2dT&@9xJ_NN~x?Hi`SIrq$SEzDXz+c*e~9) zRv-QGxB~oX&j6joEVBy!$DN({KgwA*KtmF>939VY$_sj<_!U=~H?y03G*%}pKKD?v z>lyv_&i=~He*eR*xn0mwjox7R4e{1{JuRWXuU^$|Wm#HfZv7kB`&S9x{$6BOb7SzK z1BJ!&+ijpVcaV}cN5Hx3(`0>&fM59UzwL%5<JArN4{3?w&I%KpNi{Jg$RT-o|9%SyONnbZz5>>-aGZfc#STg0TZOF;83fg!fG!NZT3iiQK) z5>@wD%i{~@wrTa3>?Su=&2S4GIoWi7K3#4Fcv&MI)v{DRrx{EwZ3Ot#Y8>1X!EOu$ zWl+EItQ2+!Y;qC>jlA=vOQ=>%KrH>rX!0`sAUGC8!dqE>L7EO<^#u>m#p z<`|gpk9WvXYnbpj5BAXSU@R7`VF&Q*7v3AHR-U99PY1d-;=qT= zdB-zIWe|jYD0K%5vcmzAYKoz5w*dm{JS36Q2nipW(~FE7OFOi$4Rn9uR`PI8P*tIH zU6K=l5R|{WkJ!=;s@@_?m3zF6<2LCf;dzAIom?Ib1Hd5eV$7JI z)0Drl+w82lnCiYiBe5P|UXwg#&0=H76Q@`==a#ja`0dp-o?r2P$;qxU6L3k=*zc)==XiiEPbWZsGI22I3cZTKbzhr68 z5zbTg3}y<#hK-)O1wDxKpsa;DeeUy%S2Ot?Wg^ULxMmHpcRb`a6Zyo_*k$IvnMPI& zPl;kOGz>^S-XXpF<8v-i-Snr_0#>Xuf1a7(4Gyf1%A+y;KD8G%0EDOR+5Yq*S`R6X z;R{dfcZr%gJ;#*lswv#I4lX14eQsz~f8vaE6zU6(n!f+e)qKKw^DOP!TzZ43W^saY zL#XxSX?6VhuxCX=yHu>Sz;8rm7P}*hs!2SDhqHYDU5vnx@%kJ=&^k4DFQhD6Q+}h4 zxjP`V!^=%JfL(HWxYTtt0djIqpOD;uoTvsw_L#AMzrF}dde=EnUJ5e|4=YKk(A@jm z%tVT7P}>bVnXJ`23(LArnS|te50j(#h7fn8L|vOUD0UMO;svNQ_kQJSK zDJk1$h!NZ#2nu7>MKco4XnbmcmOYT}qHW{bmi~SaC|6_8Z1CHWt2?Vs2oMxifJ|ku zk$izFpYtkj9D4Dw-#kCCw^yG9l0SV(4SI zZ%BQ}C9Le{cXl2YqIsKd*v6+%yJp6)ro`5C>-)x@bANuyNZv_k`iHGm@$oX%ZfP6& znSS3n^q|0yIMNpKwpdN_Y)jb!Hl&wfbsBa(Lo)f6MSoqQVlqMzlHBOg29=)~1ol;9 zdnM{Lt_F<F!N+Gk zH8(8GLQT}P>fw6TctP29XU#NTk>PL*RGj}U?snUVq5iMl4+UBl@!aiwobEqv(vU!E z)$@AFn70JpoFEONrFx%7bwWK}#414}f&M{jwLsA!hT16gl4JfbB>D7B?jT5@`_M%e z&7!eqj+=LOUkbsP5D8q=LfXtCZ29G%mcQun_21IOcg{wHZXY7@u#6@vGy=^oy9fA? z9-TwY^gX~uS}>){MJslt-!ST_@na2=B5l=k703GKBWv^{v0?UA^)qOZ z&XboS3j+2tU1NGl-)5Lzo26WTIjZeDz*3X^3A=c!PHcGftoAx{y~lSH&&UKAI*94= zFt;2bL;95uUy>DTJ2L*b{OZ)1?kU%JbtZuHii}=>LEq@;=|sBFA_2DePbETLhze<>b2|nB6|Icqat6;r42)2iK;pz{ z-dpmoHS3_TZLaJiPx{tLq6@Fpc9d0F@5t39D7-AJ^w@C!TDGPLKsL7R zxt9&|oA4ec{Nz%D=6^xegAZZN<(gYnzw{HZ5U^nWyFUwTjcIYDCs=!C*rsQ&0Y0^f zpjVk@?o2`1;FgbYip zRgk7u_q_;wm1#}#RN8&A4P>s=1KNb~69^ezur5Ef_jH;(pA5D+QnKxy5C8f3;hH-& zcT!_(kpeGunq(PADoZrgt&7t)Jp*#L1XEJIh(FiTcjpRyU_=4ehmF5a(JU6{`li1R zBxHbXf1kIfvEK0qdU>ag0XWyKBgh>CS)}DHZ{CNJi;rRDiCm8-JtZ0|sOBAcg66N< zwFFrdReD7QO?mrab4|T4IQfF_dBgH;LmsxLK)emB5BTLFTb^aDpo@X!tc`8FV)H4= z0oy!)9%yP`kNU2R_D^v$|GaGY=B+xVS5@2iLq+widnJi;5fYzT&=_d5~Rd zW0=nLcxsNYAUV;GuWygP-*&I*dhuz{;mc8GVZ}lLkkx`0Si7GrGbo^RTHVa^wwr+4 zgwy{un3?4@VVacwlG|&*KTibc|b+tLrvi?`DZ0^o7^GK@ox18OJHQ<0X=`fCS zRkPjTs(RcD{Pct13`0^DW~Dp8_y)%U514PRe_Nem<9}&?;BJ_w5s%*nTbgdwmn+u)^I7CWF*{;pLlV%lt4 zJO6Jp_fly**;z)}xqq;4;k5aD9!?TFr^f0yt+)5GQpR76!jIwp(ybf9=-@YgAPG~c z`l%qBRhMKq)BFjzU$M+=N)y$D5D*o@SYZIY0NCRi*SvZ zZ(ni{?_5b}LT=rp@>z?%g#e&c^wuAMjDlN$(l~W|de=AgNl8FiS^6<%g^~fw^NHeG zD+R}wC4n6sr}sgOe0!m?k1iI2Hpig5xSgZpnayNc!Zjex?&p`bYn*ZOPwh*UJvK5v z`>6O?&}BeGilIZM)r(#3B8O?;p8cU)VvMHr?iQb8^PLGE9i0g^!M8Lo!M45T?~%~9d#QYhGj>) zhq+*OK4gl=a_FR<_~3eF)yCWFde122O?&Jbj$Q7PsTWT4v~S8^?vsLAjowdF6_UaX zURv^!kndBndLp`SdVtu%z0drv;qym>#my=VK8PVD?uY6Eg#H^B7Zq12IHA2V)`e(UHh@*}mq>-4%g29HmSm;8 z3JY2-)q9EjXJmK^D(U~D3mZ<75rtOeG!QSFMXp?`b^IU~1@p7kNBquay(C=7I9(|zZOsXltJAPNXJT{U z=fbZ&nr>S{(fX))2olH@R1ZynEjJhu)890K!!%Llwa7W^=rjf8^R)4p`Knr74;^fD zC(NC9*3heT5D&1Do6|Q|oIqpHB09AU4ckbAEq)?j(BkXA$PVH!tN(M`s-_)c$3_C)xX>4^mxSP$g zw6e^{o!^TB_`k6$UH!Vx1E&j`&EObaJx?C=^XwAsP=kn#wKUxFMl2rX$b6cP6|q0K z9qYU-IecrM+Kb0nYiJCs_>)fSIj3UyHM`)+!6JWHe1i1dX4Jdd{DI{&7lEKL3JgJs`?nJFn&|vQOCYu7WK67uozM zEwzEc>RFkgRb8xprgxN#P+h_GH2NOp!ZO* z;BNB@lSzc~O7)r3XKTHvUdgTI?t1egZ*O2>6$KDY&r1A;S#A19@zukdi#N`kII_(! zipJJnfrX$Uy3rh7V(R0Y#4f!ge(odwPm^XN)VuKAoEYixYC7Xj4`>3asA~vvmn>QD_kBpLtN z2l1dw?C4rdMcK~I{U_3!V#OMfBw-RST81ZZEcT3HV-k{bmWS)V*js=`onkH-;$)}% z4YgNe)sxoZ44*yu*!xiHz3Hq+k@g#vCqHIreq9>&Z-JT9vfvA#eyN0-U>({zDk305KQm-@DNETz8$sRof^M@v`4t2X$+RNK&W03{p_=kT2yBXI> zxxLu6Z4md5j`>W~@KUcF?Z(aH(_8>JumrV&o;~PzWY+$jl!p;p879PdO#+o>0>NdI zJ4u%V@DwI!WnSHha}T>7`ex$(>-A@L#_8Y$wor_dJ@H@jt@?ul*62btUp%dbAJT3E ztb8m-Jz2UDICK}E!z0hH+MPeIGj5AJHG+;!TTcl0L>!1{rqf$pF@-<}FG`X}r?Le? zewV0xDsF@5IUmBme9+FjZZV*}hD@@H=I!8gOl4j*`bANyam(q=37K4c88u$mcc>xg zajM$~?3XqlRl}L;eG{ft24-LL*FK!czK^mO4OF|6vYyZ+Py7**1Q9hr;yL^ekOk4n zUC&j=WtH_=o@)**NEtv{m!yZry`G`U+WXE6JQ{z&b8{}?q&}KY5W%V|uu=}#XEI-qh5pRK22xVNs z+FXQt*9Vt7yV#pXyxT|(c zjQxp zq&JCRL^zH4_^v60dC;|Y(xJZqz)~or@pbhSa`E3~%fR8LO-m9y;DSnMf$cq)a;CtRZO8yAw29`G`(-?VSqSs#+oi5F03~i`v{J97` zx>%cfn~mlBKp+x0TsB%YnuTw1JlM$0-yIH}Y*~jj7@bye zs2|n<#el+x-tGtZ*Ish8=N)`G>1Qt1*i0zy0=n+{RHXr9(C{>2Wj>$^ed5SbRpR%3 zY+2}pL+<)}`8H1Y9rkb62&eCgjgRpzJ-jo1mo58Zhm3T8c4P|$=e@@s=@}q6nha0s z7w|&7^~G@L$*I`cd)o5e*RXursKs-xE1K3E=K)Gv*zc1C?lx7m=PxKXiskyHst8=n z*Rt0b8UwzMn5K27r)H660nMQUF4rmGIQzTO0bk2cdo?bC6*iY09NKcWT~&QrMdyeM zaajN$U_phU)*a8*Pz)5@4)I@?$`ze%ld5?~O|3o&RgF3e{c9l}{}r=NR@R4HY3tk7 zws!E6*fa7?uRmrh8GRZItQdjEGI6@Rm@6)z-R})V7*b+bmFGb&3TWPRu;)^TdgT3>KG!afm(6Tc=`PL*%4W-fpCK zi_f`mX^?rdkaU0hXAY*}(sQUIfZ^)yQgC^8W{5~v+^5p3bt%Px1A$A zbQ!2sbmfwf6PkRiKIG=Z;CE=u@nX9Di{^CQiK94;2eV4(i=X?wPb@yB3Ft4=#<13r zf|m|Yi(@!qFtM$xUeynFw~bH^Ww`uw8~;6^I?ujTjsG7-=l#$2+l6tuRIAh~YPCg; z7_~}jwOS(-wQCo(YsHM&fwo3NB-E~=w$v6xjG8fO*NT~_84^Tle4jl3z~}Y3e>wNL z&$+JmRSsWANjqvsw{@IqdS1-YF+zzM?QNU;cKYL z18;!-`?K$OW?^Vl;m6EHBJueWeGEvv8 zdt{TKRS}x8K6hK^lbYR;uxLt$2U1nw3cSj^rDT4H6 z_>mUv&6_}p{M(B=&iJQ&rLcgdoTO)*r;yDTl-{yi#QPLSpkP{r{RHk*+r;F)G`aIj zx9o|wue3#)n=xPFHSyHJxjM#+U-C0-Bd=K5jU$xJvh*IIr>g6Gi>P&r+f8S=FPqRF zIF?!PfLuMbXctXe%K;+LO7Tz`1qkZ-BJ=Slogi;-zyq!y51i$0rS2%*`sw*thaKSU zdOHT#f3pAmUQ)T8)ej52W~FY?N!H2KIE)D;5{0&I^i8|95a2Z=v}ANFKHZV!8;_x{ z|C+ggZ~mZ#`QZ2YS;<46x9w(+TCor2Q_?L?J`tPV=8a;sm>-pQ;O;Gn?r^y4p~a2&H=0Rh%}(vS3PD}5%s1;feFY@x1D9zUa-Yn-Lc6V)%n&eueVLxy|}@9_yn8Dn|! zw%HT#@94h8W0wiZDoN?xZRu67@HyVB1pTJh7R;#~qAB;tY|z8eKAi}EhXdBQUnakP z)0TDSW?d_H8OPHp!l?AwbIarK;$!_xm#>Khf=L7Ze?sDV@%3fD%ZecSxrt}+@2Gri z;j*}0_;_oE)?4Mio+}rn!MalQ@j<3_&c82LE=zfHmD7-c4tqu-vqwg_FF8>%Ajqjr zbRh9m>L})AUZ9unrCb|2wrAkYrBaZK>vB#by}%?%+ql*Nm~|o!1Spx55q7+SMzuAT zDb$L^R_J7?fO3gutXBV_waMm2a{wXnD0_1x%@kZW;X&$6T~3!znYUG+v&j&S6^>KR z8K?_xe2~(pe6z+WbTCDmnIY{)?T>EnP23GJ8E ztJr@&_lr;NOQ3D#Dr1Uo*VM+|{=G)23tVTm>NI>{1p7@9+3m647!PH2)labe)XP_U zUF_HIPu&BL>@;h1+XC|YKMsqT{hYfEcqF~hW^}X35aB*SKs<^XvtH=vg;`h!2NMYR zC~}<(QmLR*pPgH~L4d>2q)xn~NmKQdGG$=spHx_2t~px1Yb^tl({PD)#jx;HZtID; zEW5i_hm817tdzj13^V0xiR-=Ql?!c~G(mXCx7+izthy6kGoMP?;J z3JQ0Nicq$1XwSVU>$dXi9Xe_INn!z=F;wbuzku&Mz2S;w!H`^Id;|6 z6@QxMt)esU;AQVHFE?P^Wtv%JsHj$dfUvjRwMoy-2734Jwt3@sJ59YZbvAagjVo84 z3p?{wYqNnalx9rY7N=7b*{W7vBaW)FS_oa7RaVwBOw^gA}5^ z>{vbO=hdn_0OaIx z@QXg-U@DjL0hmv(WB>kzR{Xa4qlsb>K#zg8-=sD+SAQ`Py{IdTsz<+5Z@fMBmE-*8X2*@r8**PX4!iZ#8q!pB>tN zUo(`lDsMw;Ah$}Aav6brK)Sae{xGJuGiUAxe5l6Yh!O1i&v|LCYao7*FT7ec&qrHh zf%(FPVziRa$&^)Y*>&(>qUd3;Vxst7Gz5#UL;3A14MR+u+`^ zOVTr_F2$~`mtJ}w_5vVM^V5IA`4S8)pLjs?J##RbCI+g16i$5oVWgVp8v|IE&N*~$ z93^2$!<@Fe(+%qkWmA?8L@zn3ee$IHdn)_Jr#?&hvx<4^^mAC{ZEx=iZ6cgVeS7Jj z^d>pLGycn!I@r_{twSWyO75qBQ7oOUuF>zm|0wN|GmV(-(R)a_k8&AebU>7YFnHAA z>xVFpsiWlNqgovfu;{?zUGlxmndfiv3CUTu)D9ub&o6d5Nag#~6`{}N7T-N9UgNn! z1c~Babxx>r2656zmK!ne&!6X*&89Hvx-@|*flN=1)sd^G4++o~uAyD>@QbwcbO2Q0 zx#is=SEoz9^6!o`2l}eDc-{+fi#pDNfAPsjEjcCsQ=wzgbN>Of&=$U|! z=}gteWgj0jq`S)ci|ud%RAYCUH=t8KkpmTyZ3&=cHp(kXihNSm640;x^;OFv7`Ai! zISTcGQjypyk@n!$u;!o_l$~cTqb;;Z+)E}19NrAp!{+$R+KwhVT?*S}PdHw)Gw&+5;9al9md-gBcWv5B+qprrCZ~ zl0*RBTp`(@?uvac*CIR$*n50yE`SaQQ z37cFReTetf5r>*rrDe*Vaxk9()giT2!C(^JxV3NrWvXv)Nz@X=0vAFOhN|JE13n=z zy{H4C8bnCILyP7s>mHhnxQ5fQy!X(D50pWA=yY$r% zY~7Y66JLkFU*FJLJJ#<}?sf7n`jL%bs{b<@2H>xV@`>UgUdBxtGGLVJ7dYX9EsH^o z(P-!qi*9g1Ss~><;Y2$BcO8dwMUJvL4h8cI!3<7nC zS?_!-LLn86srtX)2n*L$^bX+iNp zF8YY^DfV}Rg1Tr^<*G&z}^;JcGRnAM|e>9rV4LAig&L|-l|7{*-ygbLLb5O z6!Q(U@%=Z%N_!MNG;M1W^RJS~orTLHGEs8=aG}s&2RTodPHI2hp6u?M9o6QL^bWcP ze~CXaxliK=WC&$Y>YQ$l)FX}}s<@I?3MAr@yScmPl-jgLC?F?mEdeg%j?L1qvN?;i zzu8fi(s`n^LpA$0U6UwkGHOq*+&5UntsDEE&wox5Y(I1=k#zpzbj$4(#uMWF`8C|| zRW2)Dr|tUN8gGcPxr5INVo~O%2*-RmN?QuKhKE<6AO%t`#3xN;F+EF5camd=!m2fb z**qrOX}w4yz|?TAUym0e^Fl;Cv<~|t&G4&JVS}vwprTm7 zR#CafQ0`-M5vaqQvI;=yG`q}HhgM>ra8HJk?-fTnP?9&4$J zFX(=SR8BNEuFtH0M%apSTJ^}qk7-JO0>XSSi#)fvPjb23^3QTn3X0cExXi3?z9a$(I}dw{~lU(9^VF+gN)aUjmb1& z{+cZk7BwXYKdUGZ*H%hhBj72J?WovehW07z8x;meE)9Wig?pa2R&%Bfc||MG+U&AH z;h9(s7pK8C&-inX74;fxeVU($k!Q9z2OAn_LLXSHxR!n;ocgGX(h4KsG4>Wj;c)GQ zVu;`OoYHHTjoYC&gf*|ksILfU+eGY``~onE8Ka_f*p-Y2Dy?BL_wWp2y}38A!(;Km zCqC0_ErgVHXIa*Gd^{mLkQikY2R1%-CQ8{lBfG1hP1UvJLWAm(m%~#jX)hKfPHSEK zUex&ZZ2OR#HO$DxCd|e~*Y+vaFu2*Wvi2~^MFFy`Qpu^x|z+nVP$FJ5IF*z7)pt zxww9>;d4Nc-)JwN1q~k}@svF&TbkMCF3HB@)oX*fImO;Dm4~|KJ|7U5`?+q2u!P~x zR@JS@BN?D3l(>FgT13q|5|Cd~J2GRmYs>_`X|xhW>>eVGr)v#iUsEAQ)Yw=-}RSJW9qyj1SGP)vcp|;|9)frojTZ^bq%-bI6kI5*De_zjqTp;oxL>V zbw73gmHXZ?FC%&r%V&NEsaKlayrVctuX_+>Qb zXfjwUHl7(w_*mUBTFOo8p&;HoO~eB=<_AUz8hK3FAFvVBCvQRh11ZU1MtwD3jxQ_a3+m zrT_584*yhe$+V+KUm)a)sRszqi1ft}rwDAm3-M>O>13c)TMfRojVHX>;XD5KtKkRo z1F-f(NAeZNmTz=Q%Yr9n%{!RoKNc`+Yg(B^M-}@N>VH}>jvfy8|ckzpN>lpwT&WV{OioTLB|pFmm0e_7VHyIW=AvRZi$AUM{1Kmm$G+<=>^02uP}40`#v4d zyp1=Gyv^wF5{pUiK1x4!k}nXy>$|3!D`hTTi{(W=$YBZFPn+gHD2-(+S{Z5&q=w^A-H z^$NwV7*nH!io}NCm+9L@d3u3DVg(@*?(aRU(yh(#_x~1i9|fPF3NT3HmkcjJrtgxO zmnYup@!9gBqKwD+_@s5#XG_H#!apjY*xGV_G0FE0181)U z^!2Tm{#aQ!TSB*q6n<_5&{gOyu{0L|jl1@==iM02W@8HL^&OrDF5fS>zk#)jT%@%x zD+U}z!kw7iKTGB8^*?Rsl$7uA?Qa>2i9gNMH$RJVosbwn1aVKGC6eq_#AQ^XcPhPF zxIxS|XBFAmJB~1VNo7H(iaW?kYVxyhT0v@BwfB~cfhw(6Rj0H_J0zsxOWNEd{o*&} zLSC=!DEBO9BZjqs)N){pmd=X*ImYxmlqd=$mpv${pjo3D8%)o4|Dzl7h%6Q1^)+$E z*(vRIs6gmz(=PEZ%7ng(%6M%I;So(}0RKoz3VqeSF6T&FPv{EIly zpv&;KJ&~l^W13B$Gk?2$&aT3>w7_WcP>{RV4NYT;M#S}A#CU+)K*huWP_(vS z4Z}9ociG{_MrKUI&8G@!$&eq)(h-9I&Hf7p!jc@&hoIY!x#emKlI;@yqx*WU7@DfO zs?fdMRxeKbSRbmuEy}CK!3E0={yR>9o8l?a<19CnRj#Mvf!0YPx07Qc|ENqP3XPbi zU|%nsZK{sviHf$;+~OzcCkpPj{sm*y2K8WSY0yY<)}2I-@RyPi_}Q1%ZkKMk)H+vLbBFpy$zH*ZRa-}ETeIp+&YZP!)!$swXvyC zxetk}1E_!Gs*t{-(C+>q4b5|Adr-(euhyqGLp}K(jJ5{64=KEbK}?+w;**+HV*@lY zTjjP-Mek#1ma{`n}fYY!g5?ZFiVEEKj(rn|O@*)0c zG*BjFnLt1t7o2$960Ggr3I6&jC4%#;h{xQ4VsKvd3cYrFrP&62l~B`Xu9Rm>$u3RlEpT_=&>TSnEl zqC-qIyv2J0_YhRvJs)uDTFeB>sf`=ExYf5dEkz^y!^)jTV_^Lh4hg`sBn@}a%w0Ke zA=P{;oHhO<$7a<_DPG);)?qC^sbNE^Zu3nU34h4%nOd(Kp%kN5QR!~4=VOj?@!n_| z!L{{R&>IibGGD8D77fPH;DUkWUZaY=5}^uwBR1*BNZvs{p0%t|5-s2HPt@M zCR2das0Aq5ewyWQb(QZCuYuEg!xE9%cI|m+iGE0_r zunJQNP;zH_a_0*V=o0&QvWjdE12?tQ{zUq{KRyrOo4$Qg10A7BzwqY{pHi=xU2z+J z%rpN~BKfO^7&V}8wX`U>aHqP}j88~>h^&8VkqI?GRbbMWrxsre9Xj=j1ecftU+4>1 z(XaE-FO&{U)i_M&jqGs(N*ZtBku99uXtk{>kD!Ca;nM-D>)hm=r8b*V+giTE{#hL( zP2CaObpd-X>miw~e+P;cW#J-XSV{;b&xR}$Hg)VkqM~1G<#K29x9_e7xFwt2;xQ&a zR5z|`0RJiX`ZrE`upUuqy<0G)pKi5NdDL1IwA&yWdOn8V+;ZmP*)eqroyLq{&j`e>w-8VJ`>Vp1E3xE<_&bPdGwoAY}3 zJRt_WcY%*Tj3dyY*aTy3pfHvBA=M8Lra0G(MlWgXUC9nyTS|^{>=*&|8e;4vitcAU z>(?IHK3!?Q_%7RR`p$oJj7xON+}t$d;l#>e@UfnLGX=R2^`7L%3!JB0$cd#l=XZz9m|MDN^uBK3}9v>=3wp`uLBF;#`c!MSscEab#jI_wQcl?;(3c zsBa}^XP%pL1vUp*FYs!77d#e{*%3bHnj-AouT*Xv-yKX|-sP~Vqj=wF1=ph1KOvzQ>ipZoPaxV=z5Q|epUvUqA}s{UFOsH zAn96!Ok!4>U=RaL04X@VrlM5#@>kJJI76G0v)Sr#hi@f*h@b;r}rD!Q=6@{)}@hkUJYMX!1)F8)rvu&ha zX|U|NWs#U6hn=T!&9}9pqx6=&Q&rqnA{D}CsdR6&A!(z+=;!D_&ZC6wPIl?*{0SP-wFi{&Y&ihv~Z_<->E7TqC4xIh4 zv{uX))AO%)pOFbRJvIx+$*<=dqx2W>GXo|+b3n%C!kf(=_C9*qz(rL!k_9}SogU>* z+mAt;!#;ipI+(0nj$4h+uHk;ou8;w}%Q?>jB_=;kXwBKFrpaOjSbEnX0UeX@B}|AH z?%{Mae%5x88JoF(0zepNmfub-R>4WwA4F1VFk8ZL0R*Hd7$ys*^5(IhigP8j33!FQ z?yDO6)8~}-DqqO$ZMTq+veRhKCF!Tt7yB1mLed-4W5}5q8aH268&k}$rT8MeWTG}6 zen)TSQUE6oH|ldvHxKp>*FSYyrXB_5D}$sxe8crTZ=uggHBv-&R{(`k+_9mp5?WTEu%Z#8+h%J>B7A0*~)M**!plxPNpUm08j9 z=7VDi05Sxr~ zCTgofX9jGM3jwX@1s77(6{EZQuRmaz%2)>FZ9fw#TI)3F#qQg%;pV;=w}*1 z0KImmXRj+EA>*j|P-}zndku#OEN9l>GuC#HRRgu6&E}%aKs>#VKWY-tG4y>BsOV!q zUx~9RCzVFabdR5^_HOW9H}R=g7Lf?e2+)}g*X__ws?>m{rzw>c7U;=gTJaEY?gx3^ za^6bPD_-Cq9e`}yQ{k%Wh%sHIKC#nB}hz zMj=1_NB5@PSz-bTNE7f{L>CLVVNa%s6Kk*!iBy=$nDJctZ*{KO-tf9!g*V>Mm5dbb zvkPgjT<1l6ejUAF3#XavMOX`sPli5WE}i!r%XWg3ryQmp!t%*v!-P81#lvA3jyLw1{e^@IS z-=9L4rdbhZS9`&EKKSR;rrq`6k)Hi}u6iW5N#KIgkRov+$sstvC(J1AW?swH&TO~K zeG{+07urh~6FQw)aKO>oRS2O-Ve~HHb&DA^}?^3 zg!5$me?GthBI?(cVO<~*hsGB%S&608@)rYRi-7{j2m6km@HeQy$HJq?|Lr5ALu)LuC@z}(Ok%s2#O&ee_FeyOdcebc;)w6mUC<H2aH3wQj4{8%jUn-=ezm@f(hlSw1c{PC$vqm8T#4_);d^gz@iyYfN#lm+6jED~SCs9+ zGjs1j40qtFB#6-8Xj~!8`c6n&OH$t|1B_8wc}dzYbRDVZ#4hA7_+XW9>41AlAkT1O zdnere;V#_)lg{ruZ=TWcEV}-<70G@e$h1`S>)48HZEP}46%w!ll1Kx)*ff^y zVPkk(|G`mNbx)D#Vaqy1f8fS|u|Xy8 zdTN4Aa5RgId`&!59*;Wn`1(8MZ&_#wvTPyTx@|ly&~f)z_a2%2yGOi_Glx@$ zd@6L+10G#|xhfmc;+ACfiK!!^uV=Asa&?tZKDaDwXm*eU={MHjIVV+Ro$!l{^q8IxC(-rW&riOIv89OQJ>hD z3M&`{zgMd&4yAe>sy>TE&`6J$0kpZj;A~!ZAnI&-x5_8-Hr|cg<6!J0`zN!e*t+mL za`^jJZ+3+mU&Oa|4k@Jgrh8R?SYigWut6j!`re;tRsVTQgJ>Xk!qJk8(W-EzTreVIui30UEa1M zdI>+-WagLa{7KB`MCtDPFprbrMeKRF*J;6on?|5dA040X4N`J3fAHGrAC5w*O~_xF z&-GZMe*Hgc)YJE{Fp|pUWQL$StuM`iz@??76hwYgi%KBr zv6q7{N+cK^)h?%Z^?k37U9E4Jy9kg6G5ITWs^xduz*X|ym4su9=%YqhpFM5Bd97##iH+?rNXnqgj<%KSpU&iALhZi~8S z9=o0d`}&b5g+NnvMghP*UWP7ePX8CJL9}#mv?j6E1*;??G5IZB7=M{tOC}*#Zo za?y{&*NsfN1MtrU2&drpPKKs~x%Xj;_{sNIDfhSIskUA5<@JCGJf0|m9U@AhQ0&IR zG_od=NSev5lq_elkTQ+6GJ$sYD;WSH^FHR`2+&zVBr!-ZXb;)7<-+>;-aBI^1Jw8s z+tos)^vlkqJ*LFz=N;`k!^V0Gri38wid=U%NypDqJY3+8 z9Azf4pi@>8|FuM?bQy*3Ra8{l!VafKT_pc<-qr5ndo4P`rV3!K*3Z}#cJa{G662f& z*T#mfI9!`yUt?-BMrM%w*(rN@u;^;b+~ERT{=eWWLPPlu(`vpE;3~j-qRmm{45nJ=~RkKgg6qT)pN;f$Azm$C^!&h zRxlJW)(TuEd{KCM^-}eq%Y`OVC!p~8I6L8zdDqQnFfhvXb#&ffH7t(^1IN0FbqU4(!+ouX>$~+4Mp@+*n@JR{Ph?3O}3Af1dT{ zC+-^Od^_7E$zhcbY2G6(A*mKwX3Id$AGfk|q^+>2h?AFOJ=1K764Ro-qoaVtZ}V=y zskVj^N(fJwZ@LZmq-~2ZtG*e5BW6RK>W(7;I(r8-{nxaUnl0}lI11+;a<4%LgCt_K zXO_f!xF`h#gT0@rMTRuqHCYdwxG_R8KdV6T7prL6j;5}i&8y)+WJ9szieBXy@nLh( zLXC_n8{B@d1(=c!iB@WH&b(%id5?1ssC4@!%1D%sYEBqi7Huy z=ZG~&NvB8YWH#)`)0k4kIkbz`7}iLd{gG7lJLXGEd~ooJMl{!ykWZ)l*quep zMurLEq49j?%*w0JR}&;Aa_?0IX?Q7LrFE;U1M^v;)VB|5(D*9I@3kO0 zy2rvhW=nXpw_*Ih-t{jy=r?w?wvov_ML|3u@W~V*OeS{``;!(KN)K|8F!SM|6UTox zG3+_{BUIvW6wB69KfOiWHG$u5NyK~mhG5`$w2v`Li1+QKWW9Bs%ZMwy zK&-?XDf-$&Bj2r+gH2Y@tRb_+e{=&!JH?ibO5F{mwyuwo{VDIdyj2X9uJo@hrHt79 zDf~g>6WmU8p3Xeqh3OaPR*x?ndmlyrDo(AtCG1B3S*pDk=)(v|CDKS6!5;(bK)$KR$fr zyS%o>_VkM8N97LwFPwgIq5sjfc_=k3%1jjVY6N&VoHU#}h%}#=+~kYnp$+a>ciQ=a z)}$}9QX;p)3r~>R^R^M^X9^^1MIU2y-?mL&#w3bC2uOwQrA!0PW~;KmnE&gp-ruhb zp;3F0gJCHn%0OBotp3ej;Kd($hub)Wl$vz&4e$)D#A6HVXcDaoCd+THW|mlC^um0C zTJ6sBN89f4zJV)>XcP)IYwr+tSbKsVyH}XabkKWIt$8h&;RCJ|1UTYEpclh%w&mor zM>p=Q$ue+XqSMw(EL}QS$2ih7sUj$8VtPiPCTr6xx6)qQ9MncHRZ)*<)6}*V(FpJ*^GD_nMS$$y`s$G=B>l5 zu>a08So@UQdH(tN=RN(BH;s1B3@cD-?Dhw(<>uioCSM8IB0|f4@6>MIcF$fZXu{_Rm_sdck=fYOJ;pRwGWK{Gt4xj=A zEH)i3t;yb@<=d>sb!?E#b*twf+Un+x;iCJ&!Jod}yH$ zfEl4Qy3aSfM7W4ICp^v83s*rp#k1+dW6>)XA%~id@Q3&m!|f$NwFLJUMxl50ago+p z_2UMLY_<|&!zLyKj1nMWqgcIRM+`M0TN!q?6q2pg zu8E@~^ZrT|@8_eB#RsPi1z46G#YdFW*u#rBL;dsx+R2&)a_zM2!6gOSg>aOp7+E7> ziKY@9qM_hWZv96F`l0sWzO~vFlzXPk6o~UP(8UjRu1|F7lR` z%S%;5yAQuQlN3;V78~7LyIWYUx>snNJ6LUGhj>9%;pJ@wvM23aFSEK9^F$>AK2Vki z3x=tp>YlZPyl!8J*O@@5((+kDY_Zks(`!BVYl$yAgGl;XlI%{mxS^P24 z|Icli>$k}tLL$a!(n%AO7hY+6*wk6{UGcdYovcjv)Bost9-U^>|C-j5J(7SSR+TXx zCP~~q#%o1b$Z*6$frxTj^;zV*U*|mgcP)Xprt<H>?*m&oXGEQLpLL0nBb>?(ESCysJP9i`-QK06)Pk>Fc?*_M84;_KpQUFTnkL85 z-@X-@-tDjq2s|%-TWpgF$b9jy%`tt2O5^!`?{qJ6!Jys2c?3IJ04nc5W&Pbh1?$%m zZX-mdEM|jq{S0Yxp@_VH7Yg$vU_W-L)S~t1+Fc~gjyUrlow97L8LGtM7a80Mm2@O( zs&7jLXW{d#z*swJ%lOC?<=K#(zVvW5e(u;m`TqD=NnYUa^0W`Ys*_}RzH1*s`Ucs6r-to==OBj3-$?`&B%z!m>IKuRlXXZQyH@EhPtv zxeL<)U}KQT?x{m~V%^5MOx?6+Oo2&`g!CaNwOIXSfVJ(oXEp|nR8mhuX{o8LWk0+7 zxKcSt`Ngwb8{Mn@nxykxgIE-AGfR3dr@F8Eobih-+~P4aS|#dAQ{RiY+u5e&j75Wp zqU|DSZwRD#7bJQgPjpzQ*)+XV&Q<~8=XhYR3F8{1Yml@2!N_m8i5n_fq+ODL(~*a^ zKQqJ0(&-2?K+sOFQJ#@2ZsG|v0$@EWZB)| zl-Vta^J%r?M7$e zFL#o3mkvq^7S;>F3T7^0+0{YWz{unBAUvhM)mi+cIxTD9nYQXf_I2KXQ%Tg)CyxMg_Z!a-tEe{q=T_lJTBs(X`&HQ=-lJvRR~O&w3UND+ zOt9y)v?b~7NA5}_C%Rpwg`Cd*v)|P}LAOQGteyw=oa7+FV9di^dLCXB9klh)9@mCJ zfcu0`%7|#W-oDYv$bWSA$)v-Z2RtLHf&FS1Qa|*~HId}gfQ5)z%byA>-{+$u+KBGt zKw57f%RtAPtjmzN?%$ziQ#_3b?MYo(e{GSA!oqdR}*alSvVd}CTo`-$kq zhDh}t8-t$d36MhuR)=}KWUBx|Pl*Nq9abwuh^dg+Y?Nej-2R9@Kj~q{Og)&`GK;4W8(Ne$qI;h{U!~Uv49Rj|lS?hufzgoP zc?#ciTWiw#x5^TXYyU>FoJdCKHy!)$n`*UM;p4AowK#qvxcI8yXJloTzWGgJr0L>s zKWrDvV5|MIo~m&t_o+$&&qM(uk<-Vb>b$EBbAz^95Ntf-ZyHt=?^O_U0yH_wCS;}N zC=b-xT2pNB$9&o7VV{>LHA&DN=OxST69<7%-mcs``t_MB-VcX-5kF8SM7i=_$x?-v z?-}Aa_;4lq62r}b=cHlvQ{SQ80SA_uBdW}=W;4r_2FjT4C9s&*%E$}q z>ku)V&9^qM5aIGS{+t4xet(A@|zdBX9dy5|_xz{azPvZft+1Cfc8AL3WNX=`3Wcku7^aEULhs$VSuK#3y*))b4WSMa3s9sjrp~A&WH>H9(VLT3 zk9DghVsU{i#bDg@TTunVlQm#zDh$4Bq6y*yOD5g>`Qny1(>vJ=SLkj*P2&WCTMwAV zRw%?dBC^}Bz7IC=5;!L+%_KJZ+m_|%7#LoQ8k0+!>;w zg#H^IEOdL(H13)vrYTn2)@W1yinHPC3K!sulC%#`WbX;^fN^y_;Z~7#O)(Fy#SmEmE2jq8KWFX(`1J-LVX@{u`asRHEc}US+Gi_q zr6}`VJ&S*sYfjbN#1f0d@(QP#grnc(0xsK*JI+KChnH)TsDw8hM*P`Nv8svz6YLu*^1z(VVUix^Ubu3az(}fS|0;dLJt;UiSmCJ zFO+?fd9&uEI`Th?&c&a}|9|63g%Tw~L_*Hz^C3#1&Btj@IhXSx$AvJakaEnhg`r|O zCFk?`G;AT~oHnO98zzUf&G)z8{(v<^}k012)+|!OeNcrLZq0Hai ztkq<<9&+2A8GF~dBHSRcloz8^K-}Xo2t_WljHmU{{%CB;g@gN_j;gkKE$tYv{Ut{& zPKJ|_(W8Ijf1aM!Wi6#1^@mntQHDbLZe7+cU!)rBG@hm=HB}|Q{P63ILFm9$$RBh( z@VU*niL?{Rvd{~=2nvdSAgL?zQ9Fqqti z{l(7qFwTy#<->*ghWemaead$6#aSX(!g)nf*CTC3Gy<8O+(eN69#(uEc7Fr^`m{Y% zZvsb}Jnt4Sby9?kC5K1zsaK%*fNFk`1GpKpfAtzvr9!D52RLL5lnB8X2ctm_cyB?i zGfHbgA|v>&!3gpmt?H2_hWE_~`YX6LC@4RZ4Xdx!nCK{Own-g&SY>220fE zo&N%sJ-L?8I^WeeY{#2=Ra*+FQg_d{3>?Oe!ZM~e&WiuWEj4yW3w!)=fBbUOwV*yu zZrJ~Iaded2=;)|df3Sps>c=GpHUQ6yU!gH?(0q*isZZFN1^b-~)xIa5>Rxw%heeZk zSQd-~mKt!a^cJq#lOD>5rQf4!`Y3X5mZ>$dWFR8-W-2HJx3(_0N(+_)P^;t6BC zh0yOSi-TX~R3N7@_|H2%fC6T)K{vc9({tK*-<8>R9T^=#qk^F2byamX@h%rnb%WfE zxJor9QFVZNg_VX}y}0G6Cw=;ut3;_>``~Vs$vlwDe>iYM^}lubb%0QS!o`KXte3_( zr{B}0`;ZT6KrhUM}H zD;p7ELpZ<)9}7n8)1OcKJ((}X4gh#uPr~c>0AX9ll%ugK@gMU-{1@Om98!ZbH~XiIGWaqtMFtt$Cd zoneEm@=aRGG560UJktmE1rWenE&#QLGn+=TYQ?TrwW4a`Xn>@j3ud zpyFwB$a}1fs3@vHy3RcNpS8e^UNcYy$S$}?XU-=uGh}^j0#CPugnRN(W{^(QPDQHz zWJ=%Q2y75r@8&H3^4kqVPT#uLQYqd)%$HSL!z06Hwy6qnma8g!`jHFmE94@=xa{yx z|1H!g9RPfQ)A?1RVq*Sv_zp*=pTzh^vM}+neQtVGzKQ#RGwdN*H$gLUJ9yj1evSOn zJv&q{<$j4QX-yF`mTMb!8C2e);&J}4W9HV1YutObBqJP*Fb%4W5cLg)_#$v1gmjLx zXYMLh3w8X<$vw3aWVvNYNTydYv6Y{qBu1CYB|#|lNF9Shji1kZNb6~zA&;skqUS4p z;Xg^?0g4KOTHnoBcs?|c-5*&#y0_K5vwaqDqkMVN(y~1#vBk88d9Hvf7MpplKV`;D=pA23}bTWYAcPC6U@zDd>)D zVmr}-bXnA$8`F$9ZQMV1RN>~&m}G2z zKfAX<;In%FoVc^85A-M5{1%yN2!c-2@YD-ou42gt01)@RpnQg&Pgwf)V?4^bLOvj8 z+`CxpTyUG#dl?{{xyw9oAx&lzAb^~58h&v6B5!TpP9NIqoE6qM(z`;K6n8O_EV;_k z^@lTt8*#0bQmp=CZI4&=ADuR}RiQ2hy4_|;aBCq_Y@KNIj`MSO3L}O2ji1~Ku1b4| zznuT)p}u4WtMnaRRaLLO&et{BT3_jAvRw{GPav6A_xGyp(z^L6`nvRfv7 z4hNu}cE4gP(*7bg4-w|JRuaR&x`RVA<0689m!5fCJE9pFwy~ZtV1uJmAcapomuKSc z`Uwu#KQFpzuR6hb^T(@0V8e>qn?FC^DBT0`mj|TJAY9KQf^m9$S}JJeS%g%!JlGqAn4^7QYDzdY!3A73sDV(P zrkZK>`>z1*PVs^3fAn6xef_Je^@f{$_TAn$H%3HO76PyWz6Ky`qjS9J%6co<*TfrQ zof+wgI6rm@Eq;t&3O#cjKVKtY4}jBfl2MMrMD=eyE>iZ>B;h8|pmu#+0SXA0|0T8Oa))eyvICYXRSfb)FwN zmfFv^i52mhvj7C-B)Miqs(Ut*_>@gB{h^QK$A}(oLB5SX3{wXhBWiF9AAqsizW9+N z9_JWdgzwn%6!4}0h5YYi$@-WT8x*;k`|%jkEk>w)U)rFoSBK4T6z%6j4Zppl_yCEU zL(D9)0s`+Rm}V-^gjdrM3B0a?Pp zC|_2)jaqF!k+J*JO0G8CyP`vQ3?fr>Emxciu60?>uKTj*^QJdmeT0eEJgIj1Sk3xb%MGsQ-et=o_bxa4+_l<%r1C?SM^>S^ z{)j&~&fCOvg%C#w03+aGXYHo}k#IxI6dG8br!O(-Yf{rnIIG~1bxxEVYe7gRv@~aL zMc+BVE^79bO0{9iQ)=%?y2&24ND-ySZ;KYX7$O=8i`A`Fnc|b>l9oOgS@VhAVgdhX z+hF>Kgf`LnTTz(oeh4uM%Qs}_wF)**QG?dDx6c}wNI;|z@SsNeWi+Q%M+;IVLQ}Qo z2iuyM5JKTDFGM6Q*>nBxhNfjMMKVrCh4P7~)x#gOgb2MZ9yI}KiI-26^H9_~{Jk^` zP4valf$N0x*DJ(_$v&pn6H51_OtT}?-2a8|96kI_G*;?`Cx3c-^JCcMN6)0wWBR21 zQRmj9JeXu^Vd6eI@{WoatF{mDb+oJ#fV2gTre``OPhGjh^#^dUb%X@@`yHNzom;$? zkP*7F?iU_Rw?{Zr!f-x^)CpR(uJ7mtD(ivZ2dd2q{-&MRoJZ12u=c1*f77QjK}B^T zy)KoVkBTL17cAOT!WXo9s83epZoW`|5?^KUOGz5@Euq;6804>An^`Dm3*Kj{Stq2^ z)Ry-dULKrNG$G&G{XI4?*#{vWDm?>6Cq{27eD52;dHj#zOF&^jOtacs zhgh+6j_d;(9$5b|<-4`w} zG6qvSA3`7f_)n*%#2J^kZt9dX`_BNM=1QKnbr0BW_6T}cVWPB_6SN)(Lda;8W3+!~ z(nj8haY@OAWj`Huy9ax6naP_0%43n&`_8S);t$&%Rb}eU&h6u^Xgp!wVki)45obX# zg&T!IBgUYt6~%dD_*d5%L3)_TGXLYi?i| z=i6;YHo7g=BL$xB{jnT49K3bXK=zgSyF=d+|B+Pu5`Ssc|LR&=rV_Z$Z}AhfnVeG0 z=j=Ef?qir0seU3#KM~e;7W%?LvZ3XR9UHPHS2rfpZD|JRWlK*&t+orkDeR?f4>n;4ZV_k7x zM)d)6Ts)uFLM9DwIJ11-xs>4G_GxzR52MJ^8Y}_^H8}acn6(!qb4=4+j=gjv;(+P& z*%E8WT1=G0gNnxXP}RLM#4# z*X*MPsGu)4VH^y6!R#VOY2WD}Z~G1@b@VAoIijR)0XI&6t*ddE=g!R5vps_S$R1?= z;ukb}xoLI(dZ(<9oalqfB9lL50+_tzVNK-1I4DioSx!!_JvxmJ9Vhr3T;c{xLGL#{|9P3X=C;Jvl`l~lv8UVn z`62SF$I_lB4Nvri(qYrrzk2!eBin2jirt=gkz*K?UIZ%*7{^Z6KpLSQ(Us1+ulG!f zY_ve7difoH?@^8-Q%!T6_5ognL}EgBKvRR@OQ9H^w6#&5xqQ zBe^r^HeTsJo!g+&fPme(b%H~SZd7o&{!wt#;{5J#u#&A`{|s@}@af#e)_B(HqLO5s z?`p({O!@Oi&;_pqLD_}wwzkIS564P=D+v{Rox$MK?00japR9nOQn*Y8qlMKV3(( zGyZe#F=g}dl)9j1%5BI_#QYGuW0uKRpt5BUL@~-=Sood%k_%J$3;Nu-)^L|@nO`zx z`9nSlV13VL@bY?{fPG83V$IV}C7vO^mEv$HY{htl#(s9Zg7~1)l%R~ZIjJeX8Y1Hj zpjFmNXaLQo^r37RGvJu+m?#zpe6h#Swm3vf0ZzwI#7=Eo9j zg}~Am0KJwb>Tx9_3PvyqAV-?6nk+myBZaov3w;xhYSP=gaatEAHmoLEcv4jfltUU>8i^|*^mHd<` z#IqeJsG-3bn^DD^iMZjlB06@d(*`(*Zq0PEr5j1`Yo>FxN!*}FH>mA63gnO%$_Rrw+lX0Zwtt1oO)Su3a(+?}jN>qIR^7hb>invKW zBBi}R+4Y(|?o>79IBO%4LRpXLYIgY4Bs*`FZFX~Lo2%*7$$j1bYF{skUMngvRii;| zv_pW~g|VUEX*(jzeE(xmK@~cko-+npW=Lt3epLv)d4@2uwYsB50iB|gg6+&Oiw>@1UV8wm0`~6RH6w=h{5hm{JM11Z_%7<3jm660{ z+c5M8y+XAXhUk`Azp=n;;_f!nJgM6?3pEWEicu~QcI z%(oPuQZe}n82seoA7+4--rLkgDA({C)N9&h@zHDvgV3}$*b2g3U0Nj_zryJm%Dk1z z7Qt~vo<(y4&wBo0@!{_A?kZHrPX=GD zSS4-SJczbp7`!&a(=F7HF`)5-+LEVG$}O_3WBvEkrG4-C^z~W&(WyWEHi^B_pSB=L;apDdehay{}`ByDhDrIsIB`EX(_Kh z|6YS>!{I1Zi!IR>S6IJN(HY$-3>Xz07^bGWCwm{nk;Zoh1=*ZQ8urtoB$x=zPVqT0NHVfj^R#S8O}K~~ zn!}C9*kDG9LG9NorA~8D=XG}-Yr+FsPFCCU>A>MpV`lEB7#6-*<T|l6{^&HR-MD z-Kzo>fW>+JfWE*?P{y>C=@9hs2rBlT_K;TW}SMjpkNcg(rs%$xSmx?}oo19k^+{NDY zkCja;tY|&}By*XsRL6^a`@VFlBT)WAlK-Cz4)L$PY9m|z4)KMtw|Mz%^&cM}(=>?z z`qRbc!0XX_U|(@)tZzBhp(PT#lGgk6!T4ItqfK^(Pgi)3*Vwv(=J!2dozfxHDjYf6yYsrM0)Ph=R|o@Gf=U5gi|&t#W@)U$n9B&Ivs+KlC#6 z-P4@=R)s?8wJC8KsfIJfv|}svvg#}is^Zu`ZiDv!WFoA#jP+1zZ#oGPso{it&m6;W zu`t$gE%)p+S-_I({)<43Ra#ML50X=u%jAaL)3QH_Q#&Rd_sdJ|ikeXpKvD)2_dka5 z=ur|vnpoV>)R@npGsb%8@U+_^5Uy&$bI~M@pY?@j_>Z#jc)JkqsdIk1Uz#dAl-DF3 zD#w!8JJTb|>LgI1S(Tf(4hE$?sEKb3wU-Iqh8p4zOmyc2v}hdIUYoG@FZ^6&KOO;C z_ctDcFC==nKTv(IHYg)3jkpQRDd>U?myJ77*bdFgIF|&y(*Bym?~Rb1S*1*@e6+7-4#9 z-`zrM_^Q#6vj*@hv0Z!)yk{tW;PBPRJ3Yg0!iTRr=lxLh|{Y?oJn#k9F4e_0H+m{_s0# z7Z&r{;z65Wv*yckN{4sdRV1c^Pmj+Ey?tnVsFnmZEUqKE6xHXM{W8(uu{5l|-s9=B zwdd;(ZWMyiFP@_}{>(Zk_O&LxUQ&Qrt`tjI66*KaYf!vkXVauy->pXN3ZC_4NiOoL z%AFeX1m#tpA+*kZ+g?%SK19(QOKvC7O&%;N9!9UL@;+<-$M>%6+=z!$<3dA>hX=1< zZ&212DLS(Mvt$5gHG7V-8;Y0Iv+qqQ@Ngm#(%MhpH1g3MP-UEnX%0$@gwM4)l+#ry zUthDC27M&cC-lpyXAe4WL|=S^uxx1b4ydEaMj3GTYP@q))$d>nEf0U2?w?6?I6ug% zpz2OJ>vd>C6jq|0<8w$glf=){})$n)&-@t^q4o-7XsFF<&L#&E??ei}xD|!Z)MC zqPfmbKv~PTEB0j?oKLpt$3df%Zl8m(oU2oX#ACE2VMyiBm)l!;v3MV1M6R3vy!g8S zn{y8^1g@ws6WB`wv`Jf=F17+n|&vLm&!XS!IW~U{UV9fgn6jDw_g`!coopo zF1EWpodP(DY={%AC7f=ETHiW#AiE!+=qY~*-UBN#N$kLx`+NaQ zSA%>>-Nm@fW;&be@5Zn?ICv^^8v{0r4a!7`q&+>m8|hno1{>Kb%F~B`^#$LMOk#!E z%dWs=$H#fOvUxffrL`v5>W>8Oz1&_2ZqvV12r<^6H#yf4k<_{L=M~=^u+^x7?hKOi9DlxJ=K{;o3B5v3)FjCds*~=bUKQ_NFO$zTys)W;;Eef<>%035= zWu(}SoTLp5|NWgTELpd~E#BYAB&M$CP;*+yr9qkdo2e0nSB(&h!_IG4)xsYKH32c; z<}l5w$G3kOessIU`cA|-lRt<25!0?Yj-<27jr&O?J*DL4uX4fsmCz77)%CV{Blzsb z4G?y_q}zDR1~@&lY7@NfFmsxLkRl6Dh0NcdVa7d&v`p#2LW(1ZJL4cF^l&N%+y_b9oJ={M zBaQ_pWwiL|51|!-x*l@{_s=>Gw(Q!tQJ)PtL72@C_pd*!yX7R6Wvf_Lvv+-MS7zP+ z>J_f`gJKcIgYIWl(EK4_Yw=^tGzS@rzQkwwb0SqP|r-uzmZ zd5^rd>K%C+XpXlIK4;GksM|9#DNqdOaQsuaOh`4XZ)&Z_CAwaI?)XIck40BHPNfSM zsf00NPyPBKeyymzxYhj-eJc@XlP0`|$53Ys9ee=YPUgi}aRXyhcwjtT10O{!63(LN zsad!Jq?kmXW-k|=-I9CXA+*(bOLFqY5xfy%v9 z8E|tCyz+QvQ+S16$%(f=Fkg%V;~$^*$QB zP;*OzmnnYjR-DL^d+lx=6}OgnVMLzkLQPa4y^p}+y?N@q_k;YAC1JNUR@fE2lews% z7x}%q z{)*!VGxw;+U+Z?yt)5I(Bz}o{jwWE#RhuC3nny&(eJx&lv;ir~GDXe-9m+ zGG@Q1uCCa1Pbg&p2Ok}uHY5B^eD^nrQ3~HNh-pu59>tz&X590+-9cxpk>RxmRsvq& zR^c#syfbF$+$QP!rcLWRSX>dg*)G0fc(k$a+qpnKss32ElGK7#?9xo{$0(Gt*-Bv8 z0+IZF%)S!hmaxo>q-04uMY`a-W?$9#sgOQf7aU z^QDfV%^c8jvS8NfR2tDnezhuhI0VMSRn6+pDdMHT4uKShhrs6>2?&vPj72fsmSqx1 z+gEfL0TTI>3UZDT(~5j#E~AQ(H5l#ctI{V&^8=bse{{Baw!)RXHNq`egyyuf<_53% zksTyUKUD562utA(b27gXJio1hHr@d!V>7s!oH3mOE|s`m>`lq-Jb)n#RHz>5bp$cF ziKL+mvEH4bk~cG(g*wqVt*IB`g$S%)kA(K9dOzW#Xt)(zBuUpTc)Mt=wHSLN5OYi^ zU|ZUj^uG!mha($1TfWhD<_og?uwGbO5@qZowQ@zk+W;x9F;*&9-V=nFmI76bN`UnQ zFqPWHcUsjXYryZT(qzb{J~ZU(Y!ydg`zFDTX3+0l(*66Q4VFk_ktA7RucDMj7}MYv z$+&18_I`dh`RBh{GAm3F{f7_3X*hd(rw~#1$Rmhpj;gNl!8I1?UWoy#JQnLdbaBo4 z+IQr`l*#4-ZSuybfGug_baj}g{>{@v_LP=@KPt^GZ07O5J~t@!tSG=gVTIxwxS_hb z5<`sPn3@^f!EFhbK+X+J`=(sfgUS;>@5muTIF6(%dAM^~T2?Vm)GnwDC86mb2>_tM z(c8tt5*UZ-H0jmb8S#a`-q?0Oyh;eYxYu;Cv_AFG`I$(x)j#gG{G>(QJdHxtwX8yS zuC`7DcH`(m9h0?~5WUgya)LS`#v*po4K`_DvPCcHSyx`g>V|{MRf;-C7pYM@GCD#< zA-q;2eETmH7?NX5UqA(Y_}VJxDc^mD8;7w0l*qsMe}Da%S2g(AzIciS@{I5t7k6xi z+B7=17Sr>`uzwuMa*r&D?)WK9iAU^?z1NW$UCxLKvEko8?M1!nP{Y&O4TK4+VpZx4 zGs!Vfm~Z}F;Kf*an2f&HE_fMhE+Z_}*nt1ClnV>WbXhw^^o~W&Y?0ccy=YVPoErFf z#b5cZjbGNP9cDM@(WAG9p^W-1wta7*kqYX`Wwg?p=iBAb0%rjA$yd#+m)y6T_kR>f zSI}|1>4fNQyT-Dl%#f_r^KVi7mI9`4V-ejZ7R4YAB&VNbb$$+7H76MrVKzS2-t5x( z1)7kAZIzJZ;$%WeLh6h^t5r2Qc^uV_Py-x@PwW!{6|DXqMNU>jwU*_g3?ZX6nWC8vgXLrvYD88;7GN8D>cOOe9R3=R#fGCmagjb} zjsG>a2e_irWGUgg9=A)S9G4Pb{4x&%1nwU}vesT!|17e(A0mwPKTYfP_C9D>omn)a z(`_QAL~n1RZ-$5#CMGw_u*k*YlFnR*vE2W_JTk9bFNF3n3pn_S_*-GZ!`Sree#F3Y z2)5PlkHoHafK&~?mmAno#_fhkbrpwCR@2mG-{)!E-yb`0L+n!jzZ%sw{~v1(S>J-VMUEX2}Ha>n9vXL+8c9ym(53bD;dmZaWY5uv3i($7+? zfPdQ<#kw6YiIj;1mschsGQM;4833l;UPxUAGb>TGFwaIEI9f-u3kznexS^# zkrCSSh-{Damm;bAAjyTeEiAEc_5Ji0{=2?eAdjzR>CyB9vHJkVA?DswYNc@~mX_1@z^r zb)j>n3lwXcPBl5rw&h{D4=e8pIp$`yv4twceIhXDRE+5mrB*3-q+ajU95SsM?BK(f zsay-V_h@-i>s{cD79uFw7C{iXBGc##86J&E0pi=*q>OUpPm6U!!9mGksg;X%l(IsC zS^4Fwo}(_+@~F6=49l&4u)U*h`?v!Z{*QDd<#cE`4`tF3NXow7)EX-l7tSKlJPP|k zNR8lfDkf43)Frb{$Rg-jY{R*6)uSzSBamJY8Jf6GBdy+qjG5n9A zrY(~ET{Tr8xBKNP4;s0u6QZx-j6f93=|xaXH;^6TWz~etZ_&J&gfrymEnWZ+<)F8| zbLbsFy&T!FO$TE|tDfTu4$Rr(3TnmTR8k_*PU6*7aAr4(OriYLiWNn^z5C1_zKL+Lf&@N3n{5xUd36=&GO zM%xJbbxbOozPDCWRE=Nu+W!gCLMpxuE7M=k%5f~YSZbz-T11jMiMnH>o5MZ%m))w6 z5>FIYs1DG%>e^yn6P?}4t4coGd#xDi=(BRcK_{Ik5hcN!?iTUt2H+v8RxgST=-gDE zM*q=oP(>RF7S1h&DgpH>#D2pgq=wBASHpkIpE#Lxg}^DZS_W%fJlaYT;<^(ZJ4q(o zv8T?Y9Rl&(lT=o2F^4hB*huPBQ|;JWq)SPn=Xd9-8%wnh=H~5)A&Jjc+Vn%*m>~sX z5!H_04P3tdQRq&)(BWZsbTC#ddF(6F{Ecw^?*2YF3Zu)G)M-@kBzLCLkSVt3Xml1R zUm*~sA;$&~r<5IYD{a7k-aKNk-evSGIHx4u}kS=DQN&)090eej*dW2+0lP_j3s+o3`+8D9ryD za^jCu)^l|;Lij(K7_0^4T{`IGTM>QyLN6WpdWqW8`1NC95^B$D(n<&#p&40oWb};c z_>a;-r1HWYQ!xtc*HU5&t&OrZz@!nS9bU|EsSJVIvEK($r?>S5KC?c*VVSoo=KpAL z@LUewFjYTK?L_=L)}A%YK1Rs(k+c5d?e{xqPcMA9dqtt?_N5oFW+|ljrO2q=N}lhl zSYG>56PY2fnygJN-MBprd8kc$rS*MD2Ne9s<}#o6&O426UNm$O72@^}y4EcjM6ibZ zq#Swu3q3>R70nnnX^`ca@9jy``6;tkcpBt`d7B3Ls^{XG3j%haJ2NE!?9=Z^x6T8> zB$JubpEGJLXw_@{q|ho|`OBu4(bR2M!&enF2;p3ApOt5jmoa&XafE5{;afBj zI$J&^>K+Q*DNO35(<<42cAhb>6kZ6N9Z>JSzG ze1x}SM)?e?->ew=DB|rdyT7S!)`PjAUG&t%1depmke7G!v4|&QC>=%q)@+WR`E|?s zzVnzJyOXc}&~#%oqG-QNDqHN^Z;Kf9OE3I)y4Ki=@gV~5Oy(A>mXNEIq7bGpBagS4 zbdD8m?5^*9$Il%9Zum45-0w=Rx+Z8=-YEKU@U9_r<%h$nF=hTCTcV}Uio>Mvo`%(4 zF|GZ73;~hfh8k~v=TT%YNFQR7bY@~AT%&i)f>Q9xh+dj3YRVX`Ja_u7*{S-h#c2ja z=yVKtLpBJtzG5T+z>on<2t4uU7@kH)U!|skzW6ZI#ihAPBum zcFVfackg>EsZwdeQWRt-UccJ=eSt}~nE#B^P% z>e*`gVAP7f@H-PTY8NY)Mapnq{pfL7Y15=bRpNR8=KlkHj(;OJBREMv?iy^5`B+Kn z*aekp=y?9BSR|=$X0D3=MYKmdcJ4-^{tRC_C~NkF-Am-MzPI0?_L-O8u~sFQ0>Q(79Xe!5nbp*gB${n@cc4 zc3W0W&J<x4D@IDS zR5Gww=d5O(n;h^hVrTKgkW?>QxjOizk0?-aBW}B=$TNI|V*{xnie(R*HGv>gwJVpm zWT5KaJ0BtTu)NB`P89Mpo5fE$i;});f7p1 zWKRq6<$1MNc|Ucj=s%^vxD~@|BCw*EXQuGp;A%;?l;;gyHb<#4hk`Q83tZtd6<1SJ z7HPBg`t(_^Y#@6j!d%0zd+U9bE)8ED0JTnNH&Z_o(osep>G(nEMh<-;9V69~H#5@Ler;UMt|Vm)uyY4F z7=3mTH?NSKL^gBR_`p8He_RjL>(OX^eUiF?>IG zU@kqXh~hTQwt&%#l$FDCorihtmuI)6iudQn2*Z-v4>hNdGqv#ajka&aYFOfv+{K+k zdLM80I`m=)?|z$*%CFof+nVi^_t;<78c)NITtmqo?hAw@4!n>1%k?;qf1Nj~{vMF0 zGy^+jZ>NZ!*z^w9nx9#xTLTx8;D?>E;rxaC9hpM@K3QS{&z+RHNww$FZ}23c-m*z$(e!D zHc-kJK>u)+wYvPPfJo2)KOt8PVQmoMM+Re_%jfE=Lgsd)tDs zSj)`;CS5;GNMf)FQc&7m!q}&vZG~PuM(jm6ulkE5sDiUl0{(XNCssSwJ7Rv(M`!2M zy_$Le?e;jH`u#r!7xsBc8wn0PRsD|FLIO7B7@8u;puBa{T2Hx066@hu^ss+eXLAQ@EKUJ9b}BAL+iR#0s(>u{xBM3@{>A z#Uy~l16%f6{s^f|&*Kl^V51!4N@42G@dxeftiJgb1X#rHe)t%A9#TzuHoq#>bMxI3 zPw$1P^PLwy;O>44LZ)E5l#UI4#mIS`Ql}f!6w6jJQw-vweHZu!p=)U6bnRa%86}~I zztji|J8do&W^sN&S=YV+WD>b8D7hvih}(JB3nzE%g^|E2#cFB@GM<{29Y;e(&B2m_ zHynQ24=k^r(wPBosX?1YLQgepSa}Wf)ZGYHRcEhY{NS#EPF#t3X8X)t7fR$Dq(M_M zQW9*E(dNgiWwd}$4!~;AbBbm#y8%D zRzC2QOv{JG)umRSuWU3*7e@N|1&B5(oxLY+5S-NbS*x!WLCSvc#26@bpUYA~_d^7g zk+0kT;cqJHhbCGxS+NW&`fA$c5BE zdtQ22KeWu+{-L4CUU1V9+LRn#p!(1EFzP(H!75bp?a{@qizKOydmUX#a6!ofg;)WT zg=w2yzs90Ay6S5DDr^q<(paPn;CnclzrWHbZM8~3p~hu)ggwm08A+i}0QgrXjb*K;~g3t9Snr#(juR=jA_M{ZqUxX>?n1plY#d z$@5(pa%q)Gt9c$*p(W}&|Brm0Zx9lNM54^mpsc!NvcoG>TcxN}WMz)i(ccW1>y6+q zuHO8lF4h>-tf_YXvz@K!xQdFu=}811pCEuf)ffm$o5kloJAx+Vj*Q>2|26Q7(Bgkd z9>ZYpo1IaoUBSkq@>?Qe_Wof>;XY8-+1H?bvcj*@7h9=jPfOP^{T%Nf&oIIp$mrh_ zBUtF!z+GsTTVrD#eR@o7XF=Q#c7S`ssLR|PBd=&eG$3AiBP=2iAJug6 zJ#qfNV!MXwLIt&QF|od~t*yiEl?E8epj5Z~c=w7acAMEhs33RW0_F|vVlF8)27|@7 z_5lyc;qaZA#ou1MPHT`tUUjk9v`(1DoV>!&dXXsCV8xZcX=)_Ay)M0jH~gtoU0Id2 z7_wZJrTZE(P~PTK&^ui<6m9-%Q(0IXZ9`y!G{0yv!Z$~2W!(laF=@L_dIqR#N8vg; zflWuYvi5~iJ8v3?xr-Xe|6@>VC#TtXJRke$rl*&%Y^iX0BFxMbqcoQ!Lh#ivTKCzu z%#@%XyeYb&+PGcUMzwPzxg_GI+Ph%Rvh!D5pvX zQgYu2!k(hvgxvENxw7!cNi#Y2oT$d%Fg|U%W~05fo@Xdd)j2K}G}@;p>(%Bc%`QyZ zp7&y&F$KB~EDAnJjjUP8O|s9%nQQ^-=}5Drwe!()Bl=Jo{9(!UclyA8tS@BQB36S= zc>-3-l4?mp#UA5?wB<#p^P4{dTA@q)?=BD@^E|8xLf$D=@pn7F>FujdhMXUtwcdUv zLR5cYsrX*x%7#yqN5JO{v;wkVSt~`qg3lg~r+=4B%H$pM5FPb_Y-jt*TG?{Ai9=gk zLox^JyNK8_3Pbk%F0(i|k90c9j01&cqH)bZ@_b8c#_R3muaN9jB{0O>2)AyBUrFw`8$qXK>$VnVHDq;8X(wsC*J7>a z^lj>?SDq1m_Zk|mjybU~k%DQDN7fg&3hzDyZiUzztM%Q^=vlRFd?#@sUqZ~NujVx% zdm=c4@RTUZ%X+e60QWfVVg=B#UzS4$-UP@r&cMLaM0yYG>T} z{qcR7RbStB)$PS3CBXgFU!Tb03>OVxqSxLv@y)(jY@lk6D)6%NtTp`uWoe9;ZSX|4 zmE&tq1BQVtLmiH;!;ztg(WNTfT&g?5q-bTwJa=3k@rM9eSitRz&xaa8r*w2ZI^sv8&`hgcLJk_e5)mw$MvTFF-$OB@w7a` z-5FBy0!*Slzx0{{?eBT@L?8bn(Va7N5@(|f;w*QSi49r~iR$}vHRyT7>%$O~$;~!D zCUX+$NlqwgU%y8JGj{4m@EGCyFAMadzvo5erR#Bs2YQ>y@xSl+VKZVICxkZ@f`Vg{ zUq;fc*iH^D06Kt-J#KJk0+keRJ7XzoVw18;U3@tEWFgV%wEa+=RJcf$zbD7t!ERiVk4`^aJVC3TXDcC$Yar(KI0G|G7xt&+NB- zEK4jZcXtdlO&8*XSd11O{(Pj^usOOj1GOs`f|J8-r>UApuc(ieA1LwPdImv%+>>+l zO>+JGOKVN`(?{+AGgT;GN4JyOt)>~Q#3X1VkG`Ke>T$@xXX^*!#yg{ZDb+y3_U=RY zHT9o`fR_iPaxRVDKQ7C1p2OUd!5JsN6Oqk#>k?00H6Vt^`V?M+7I^OR!(cV*Ai)zz zMuCJGYFBINzHPL(%xY6jlf@l$YhO~DggN;9>DjzoxhwcpM^I2)QL*3az>L;Yt3oxF z9*2=&c*Yq@E{w91z#qf|RBLGf`Z00?IqP2<$HN;0xf_@;W*j?t~;{`Q6&f zvuaRv(ts<~XZ@Ebwr(bxFXI<}P{zZDhLgjepr(t9#}CI=Suff5IbP zFH*Qd(Q3~g;p^gEO4B+WnzA*6@+Htb;f8s}vd`!a1(j#uV30#@2^dr7DHkfK+nelP z+-XoDmy``~hCA&*5<#8)atS#OZ8Hcdgz7-OgFUVMai=v|INh}g^wh}#8(5K6yYE+> z_qL|&zkDR;Vn3*$w%2i}+Xd;qCkM1d)SDxe3pJfE;ACY;%}JTjLRdAq;tsA?rF%s7 zC@E8CY85jxfGww}X10&6Cr;zpAx4+KU#rE!+)2;(>`{uH#G4)f7w3ZA;iHTuoxgq` zm;{Y_Kj&nWg1$d6G0R-FwyArt#}=Yasi|{TZL5wGoCAd#?p7B{e)fT+<#2$2q|93p zT81zvlbXu6&YpRPUx&K!I>NVhoMb1cQ;K#w5m@x#raOrkQr^157(Y5E9LblAejEDv z+|xLzDk|ZQd-TBdj1^aQ&#Rf@RKWaVA+zZOE}>IQ?jxnP?WZqds#sl9-KRE91Xflo z0cf@x&kPtAu))&7C>$+q;jUs5kOI1?K;w){5N$e(M_)mswekX}!N$HG zxi-R0;nwmWv)mrsztjZTQ=xE=8TCm7+I$S>FL!yE>YRuSJT4@nl`J~j)hi>$kcGrK z$aGt1u#RBA|Lxu&#N`c$E)}pESTAf~^nVnci$Bxa<7)E3LKEHq9^VmLn?0q?}bDjq|_j!wZ zB15qlZ*>!&eGE;{-31~hSDPk%-6BFfZvV*H?Y~68TznP+yOnQz3a7TFsv{NGt|-yN zp8U}+m*%Z6V-hyC^N&gJSPqE4kkoQ?q`z4lWXsm&iv^W;8$Cvfx4KcB=~YpUQ3xYy zX1c8Q_SsWpHol! za<*Iw@|&oi|N8_SyK~Os?Wq~nwOdj9`-7~1X9Ka$wrZkU*SBai#+Q4G@bf!wId&uY z&I`qb-4gZk`^zjr<2ge9F=>gtz&y_yzVlj$yv#i#*Wddn{SRZ136ql0W^GP4orJCvNn>%&Vd|?k2|BWwm}=`yX9VHI8<>>es5e3 zCxBSGx>V14hNc(Ca zn8Fmw#Pb^@mHw`uyQ@#+Oo72R{iia#@pu@&&+=?B0D3_%0rnYZO8uaVdW#Wy+i}lY zqDivX57akjldf^oakCmXHhS_OFJ{B=Lg+;T>}n^=f$5s5N#Q<~(SfjPT&q2lv6e5I zH4R`bxXSytLQlA z#Ml95{(+(l$qGVubam`jxp6l5PhKtriDh-NY4R-SUz|O|ciOm?v$nd5qiA&9N=D3O zS2)e^v5PZ7OsW|tH1`tZpFAk1xzFcm@ZN5ww?HL(4ui}ZH3g(Fsr=0j(7@Nj+~8$N zyOYhf8S{g=tTFqM#5lMtDH$uOWei|1n(vsr*>4^legUlX4+dwmJmU%GjbF(o=ueWKEQJDb+wf{4qytQ1xMp zgM(WxM;-&HWwvMQ<5M}Bt#d6ngO{=6M1hvk{ZILi&&nUwYHsR;+Ie_!NMuNRne=x_ zv>LvxET0{WONjFij1<8_X z%r5gXi16768h|R(wxk%9ta0lNgh8}reOq6!TD}oc>x2ZpC_5K~MWuIivklU#(N+y{ zle2S-TZkew&?TnRaESY})D)vQGga&L2=&60@MNx_>eU=*Sx3c{=53KPfAPo#;U+T3 zku$$Ur>C4>QWkGCLSNub4LGIsve*2jWt5anQT3iL)r&?D-bUZyermWPgQt3ke+Tu7 zeC1;;xk5}d!;btG)2nhkvdRl#IQjqiAl7?^iN%-DiXQAyU{YWB#}rn^H{P#Em+A+V z#U=G0#dQH{Nb|lVhp3RNBu6>Z4d%;%<0xqmW1(b!Dx~Q!?GC3zX>odo5248tf8x7i za{{Q@@qW(wbzXWecB`K?NW)uK34(|c$fK?^2-grzr>Bz6__~a^q4kUfwo>Vv4)5BX zQ{aV$<&BtJyJmW8Cc+g@rh-EcZ5gN&-ayp!jY~th<(Hl=DrrX;nL$=ZWz$H*+93ce zHRyBEqH1r}J4UW1*QbjzdpIcoYP%#Vwd1)xaJx~iPUFeU8+)&_12!thdqzv`&dp+kSerC=?TWc=4r-2F{+|wMjx!5l+p=~JlH4phF3^@8ZdFONXdmPt9Nqxci z%aGS8PQ0cM1~KEPJ4PYi`kIp&zYe1jn20dv8;xrog@hTSm%6UZ<#(Tc9b)IV0tw$| zuEhMR==s4iZTWyI^K-Q7f>`iGbxYJ_s|&zrUTU8t)LM!|n}obUs@Ol9uBs;mjua2H ziaM#i&~t56`4#Cwh$!c@2SPzX?mx+{6@zP++?#v{n7?uv=Cw|GppBrGx3{~DnE`2sIjiac-zS!WV(%1@IK>o>HvG?I&QXRXjBCxVImCRlsqJQO#|9g6>-Y2+k zKTf&TT1ILz>u-sGdf65i_Lg<)Xlp4q(c!p4%5lKNd65vAP0GlZ*WZ9r`!2EwS1M>c))bk)ndM?K?6s)*N$)s1+8*djO@Ty8T&_S!8BiP)qxpX z+-Q28Nt8~{Jo6P}dk|4ruDG1}D(MV9=OOQhGtZd6$vV{5eKkq;I;j1@GWQ!-iG_Vs z6T_JyM5KLUK1216y^RVr`KmO!%ym?jSxy#e`+p`GYzbkjo;S6GO+u|Rl;JBTRDmKV z_L`=V`tO3zU3hgZr0?QOp4H0ykewaTH!%5_r}UTqbZ`J7Q1#bD@Fb5u(3J|iyU4|} zB@-D$^Ote+(x6vZ>7+NOUbmOSHF$_X$`0#W>Zr7smD1Qs6Sg%f<1!m?kb`csZJICU zWn5fWsR_?m7I?Gi_i4K~u?l_Ry^s5=!EnmZ@caAn6B=0qgn^{QkWbL7g*Iw{h z?xid}x1P8@5Pn^xx_s5Ps#H5N^Kd(yhh7oFck}OeuLsRW3;=;zPR}u6y|$f~=oJW5 zm#ITT5R>*f1WA22Cz#7x{}o2nE1ewse+L|1t4J zTkL3&>q5c;g(f4t`|o<$dDnCr8(&Xys)RrAt$NvucP96~ioL#Vo!F|A+^4D|R`#-3 zSGn8@KQkFaf@sqYU1RM({Vn`PlsO#3ImxWn|M9TtP3R9G|8i)_z`iQJ_`9udH)xnn zr4o(>ENTgeoLy_fL7#i>AUWooq1inyb z%+%EQb=98uQ{txX1J^kG=ew!tK^d)aZ4bvR-8Z*LyJXd}SX({4d4n$v&PoDOjKIS* z3VcS{` zeiEE-iW9n)^3^l(=4I!|IBO{FXcgl>uys&cH|69~WU5sB<>!wP^^f1)W?hf(WRa8j zse_-oeLSz^FCOr@l(~L%R;WG zYx_{`9NGp=e5_-p?LAUE~j2Z^DEEHp?E8-DHjntRj%0aZetWz&-qvhBE*ES@2 z$GQJUJLf;9KKe|-WK4m@lK6XnEor;vNO9N(7>d+sU*-u?*{*a3J4a~y`MlFo80O*O zUVhP)4(eYy?jUCz_+X6Y-8YZwQU3QZMMrH?_|-k=NH2Zz2}gd1?8+YVx9a;d4>}j_ zjjH`)icHhVj#>FUGuV@>Ol!r4@_o6;8=u+GbtV#h8wSMF&zAq`n;jG?{Fd{26bfdC z#3vgI0eD7+z*g{0mA4Pfvf!Oh1Q32R=g(_D0c&afEm%`|D{9i_QgV#(Yhn~;C-apb z1(Y_${}R6_@ye`=iG4_J)U@={){i}5y@m*bY4kRJE0{z=I=>>)+I~G{QE^pcstmZ# z$4ORotkzfGF`ryU%FpoA9HsnI39}|@)un%aKFY$WE}*tA@LlByIkGObs+jt1l-hbN z7KkRUcQA|x43p3DoxdN(>AS2Z#388wD{~4;fux4D(_`i*le!wjAqcG!v1UNy8OtN4 z!Y79pV`A^U;!h5Remet8$QqCTmhR+qzZ%pqU(5s^Z}NrkqC>9fAj^D;o$1n1Nm?KpGB-Fdc-|rkWg06bCz4VEZ?rc=$!9gun_C#Qj z=A;&f*`$@0mpa3!XK;h&Enxc8SzeOU?YnRH8mQPA7Q6uCd$j=DTR&pH-eTJP@}VD4 zt_2J16e-#%*emt3hA!m!*h?UvpuQzp%H3g-tbDs+;Sun}U^_>(i#{J&ldq(5gH(F3 zdz?PNjWH{O@DFK^j*vp@mv^EDtkdTg_XT^d56xw?!RKlO3xeQKQvu>Jm;PixQ*+Y;vb|Glj(X%!~$XUS(gs zgi3yIe<$?l4b{WjIxEGzzS!jRfL$Y6Oo?%W!WjjMw%0D$Ik2_sDerDq$t`gW!7E+F zT_?3S+@V+^+75wwaB&pZcTr#s*qaTe%@ZR6paz8_cj<=XjMk1^_m|*s=!KI4OxXE zwFsT{c_A^nhbSG`q$EY>bFXyy91O<;3F$#oo2*9-K$VrfU&bI@5o0(!__e$4e$oA1 ze@oBTRQvv5B3JG)m)1_xr5CTHn2sbMuc%xp8unI$!7O1U9|OeqZYfs_>E%GLy=Dc53-*Umse6 zO^t23^eU&jm2jvbc*@$FA-nSs*9!J!uIX9Y`@GSUYYwxV$M8qs$dA_;TeBHbOZz&m zi|y>Tj?5MtO``o>-;IfoChX0cM6C((*1^)ry25_1;WoK&u}z+co8fl34|2PhDfzsH zD|}h9%hIAU31U`as~nA$IJzwG8V&otBr#N6r4Gq0A1J-l9m~i{a^4-Q1U1s^aMxD2L??1S``<~!nWM^Cb z@_usQjQvVi6?9XlzVfCon$WKgwI|?#I(9Psc%H?<^ncN}D0OHiYSFq@Sb z^_Etse6Xv-2S8TYQrb;Uh6;T(!8XRMR-gcmI{EuTDR*69YVWfAs76w^U*{*x* ztzjAr`}_4rOnOPI9#VV}mS}P>(G;X_7H6Jmku|VgFAUKh%gT97DpLc+%~sAQ3Zb3~ zyt+X`PV0OaeyJ`B403vg+3dK#L5UUK*NY^W;ujBuDD+nB>$RHxqc?<%gUapLh^aEl z&)^;Hu{^^b;-@OF8Rf&-`0V9j5q@iJM=q-Ko93x^JIY#Ay5SR-&-xJ3#8`Z5%(Q2z zs?``FW5!;<($3+F_Kk_%z*U<$dlIKJ>z#0YGlay|<(HX-?*g>F>8%A7>CWldj}$8( zaN=b^z;Q&azd9eH3>H^*|W;q@sW|d=a&BW zzwM~tJ9eM0xbC1fWJ!ruZ1Tlw55aE3TLGiUwo8~GssZuMUoK9)pWBrw-s(dLS&X(g z)b0f17U3@=8Ote>2W_Swv=&M{t~owsdgp!W^*i&;x_J6XbB%brD^9bMAH*asUoj^` zMAPmfBCf#zv~ZAAYa@1dzPbrO;b_Z+@ZT%Wwp34X7)cymg_RJ-9YLS_ccr8o5@W`j zS|!+hyJ&)(Va%2jDje>&uhUR98Qgv1ZGj2aV!MQ1%a94ay{{=HRc7i+r8maiE(w=S z)3EbRGBVg5BW2H|C86wJ`YQKgpXl$<%qi@zL{P4)&x0%0AWdy?sm_1??;SmO@!Kl7 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

WjFNWt_E#6l|AWpMeei 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

&C1fiC9`_Z4k$Ohbb8nHbVvCcrWE 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

!nw>PCdOBMzWFb`Tmy|m*cwABbP8-9{%pg6o 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 literal 742500 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 ew}Qjl^(TV4FvxH5^Y6SqEag} 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

e~A*nDeA7 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�lYHV{SoB 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

i<-ie_W8>To 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 qD@zlgKsnN#_>cqoH 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

AT!=j<6ke^k`i^0ibx4`@1L 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

pXyKs-MJVt|UO+IaLOgTbn`YEO8Z{;_--F=G zH4v7&^E21Me$XFrF(Q8z)r4vn2~s`TiJB@PY9x{n`!a2MN#1C0LT4a;;Q8Kd%Zgx7 zXI)-R{|}N?N@^-Co8l2*=<^qud*+;D4yO1x&GKIL47o_4B?Srkm5md8l~vfpgqmU> z=uHkgY-na#69mgY6;k-U82~Q|HPA~OFaqzJb4l`La6Jljqnuf`d0NJ19u82-2FEOO z0b}o$9_^sl&9vc-U}cP^P(8vh025*we5Angi!IX!>x5xrFg^KR0075 z&1udlk8!WI+dne$#<*43HdOIxskPuF)e&Ieq~;r{b1 z&bPrc1uLcGkpLYxu&7@T?|fv1@|UlbeMNq$*b`GJp-ya~03qjv5HRStk{YXFv%j7? z%lazt+)6-TK}w4RKq}t@#xw7BaftAzDcxD6G=C8jG;mP;9;JL(WHl4$gFPo}_Vkhg zaTyPGKU5k(Qw-q|5T2Tu#Zq{1!jhFA_csnU7#<=`{}h zgC8N_!9XA8!vqIJ>w+Oand9jfh0E47o2!n{ad~~t0Yhl7%=d;${TCKXHMMzFbqyTg zUfQ<>l7>F5ubU*5S{G%+L>W=P4?PqoEEi4GWwpw%w}p$MPp-IBe+m9!4!tPkaR zMD>_4b!dSV#%|gV8`DIuH&I#x{|(`izL(CN7{Ybrk{Ux6cpT2w(ouqJXKQ5YmdYbH ziO0r$fK3nFI&=$FZ0?|5?6?|y=dv%ox3DR#ONe_gsYJvhwAiZ)`A_`&45<__>klcu zb&ZaW?t%O)6XZm;F1N9^K_|TJ0feIHYAD@ezaTmk9&32AT>t}En7ZpzQ^4o)e0C5t z7$W0rrf?Hq8h+{k%H7frL6VYU*Qnu%aPXKRG`905KaL63#NK(Wfp6(&co6tIc_+1x zp}s3!H&!x6H5a^YUub$onGlJVa$$&pBlqMyJyEo>_X zBz8t|PKN*fhS9wY!ML1}QryV9^wsb!`Zk)!!`1FHeqkYTT-jx+M?@?>^Ty~b-v+^V zrh1SfDLnU1*j4&hKX29nQQ*a)6!I3}*w&t&5gs4_&~Z5!I;kttLeH6~yK^KcLoUlkWz0?Sn;;jrdB%rTM#&;jr{sKFbp7nicLNbR1QrS>B4tHGRt z=4Z}LcVBz>*2t&BFs$%)yA_~iaLmn7BckVYBf8&=#-jZ zh4%h;|LR9Cm{&qFD9hzC_KmpdcC}2n527>_nrH4mdL`{6mD>|MHq%Zarhfp+os@tn zgI7|_iarF3E9bh!`N_!0xX7Tj{PYlBgZkC|u#Jz*z;-?o^ z&jZy`)jQN5OB{oIliUH-fLXoUF~L?Jh0;EmlI8AP-N zm+yCPwAA^P1P!=QQ`Jtxx10O z!mZrVlHUu3g2BPw%HGZ{gpw*KZRhVC)ZnpX&-{hKU6EQa=QI3L%mGqV|1XHA4ZB8>SAvn!1mO>zm8JF^UF9AKyB=Ku7LTt_Y^VEf z`Pj))0r*N2?W6KQJ#b-$=d>^O_P4sP9iKX+@s;?fnRZ|AmYVm`XM+gkC8&B~fN}g) zfq1T_L|;F?3ltu8O$P?eB1r>qyK!kz*Kp z)yT0!JV^0~orw|*<$U7hI=%gSv7bfN;}4}9aS@S_X!Xg=9&q{6B5iELHHnJ8M0cl} zGX7amYuHWSQ>*f2&0T@ap^#W-!Q#XO)C$!XDL6en&C1HchRgL92|SW<;ZQUp=NjG< zsd|(>w(e{Wm8WXRi-!FCsoE zfHPkm$Dgrw8Yc}2qbUrD!v`hoJ72EEkiCguxPfzj%x~~ax9T>j$gAq@ko=lbiAJ?J zj7psYe8JdNU6-dsaT7z~@FepX?o(s$DJZv`^jdDBy=Q#_W*!-AIG2avP<*>z?X-Op zMg*Gad;-`Eu^Ao&6Q?Z_Jp!jj&ppK!SkI}^Z_OR9wBMVXm7=PURDX-f^zKc0&;@|! z^TWf#vom`e2i(V|zc^eMDngXjlGB0Mz~G++l{b(f6qG>!D+kfl+s0eNLc_v>5L0tq z)j&-r#G&LfjuGU&?_{<_yK*B0_F2)B2?&+x4V@Y>jbN*zjF3G>Y)k4Ymqww*#iJ>( zwyp@I{?;2s1Dqw>+~?;`owxxjeGdutu|)WH-hN+Sq&{Kmi>CFer{T|Ew3Y|-vQ|4+b6?li*3QoK zZD&p8eYFrY@!+Cw<(TiJXg`5*Z0$arBiYv)7&zp_EX*wjJJ5dpXfu#enCll;`lqt6 z6Y4*E`P-#xsAgt(S$nzEJsln!NE*+x6E&4qPDdT!H@rmW$fZ|iIK*H>*2Pks9 zKlcCHeEUIy@CE`}_;rvqzIWlm_0Zq%IxS15^=>J}=besJ&m!qh<^|d$>De1o)YI#! zj((D;mvAv&7+LCD?Pc#h5Gl)jjgOD--84E9Sk1yl@P+wy!a5VsSF={xY$RZd*-YI< z6506+cPTOUS3c)*fuaa&!c)RfvUabwA39d=RTr>jTV3U)F? zR-Z*HYfVXSNfog~Ssf50H5|>BQ`0(qwn+*=rUpw$ClgOi_2kb4=O^e`-Bc?)*fWAn z{o5`aC)#nJd?FI6C+U7Cv$-|+KCWRAS=910yM}PvjqXlWqBH-Mo)jP4FWga;)K6lg zli8l1!?$SqAsaUZO^NCb>_bFEgun{63p4?-*iRR|y&^tBmT1nv00!)R<@+0q2>74r z?IpxVQiMNY@?c0w@E3#io~a&ex09n&YkM0+HC)%vD2b|Q|FvsjRIv4C7k%8E`JF~C!Wia980-XZv?oH3iR+-zlQ$?>1wTI(}h!~XW)CCxv+5HpL^$gp~SYisqxwS zZ*=7bh%;vXxp+)8SM#%unYcH1?(*{T*RNl7;dQ-v9~AxH424bmHZBYc|GS;V$qihe zH$l#8T|q3Hg0lk5P>3w8Z2Gx!{TNiiVvEGjq6v+S90clWI%+C9+xQ%#N$S59JF)s( zvEk_m_~#ZxdN!bORI7TccATO=Y9kpOcKZ5$H7})FPn-N*fdjtACUj2pb8#-DUpjW@ zOaGFXU|{@(uD*x17MjohbyAv&FeS%IMms7nv?egS3+HRdTsy zcL`{Jj|IN?>7iYp7H(}; z4az_qWdY@Fs;1vzU5;Wq*slk!rWaOHdG&G{EMD{@K zx_*u^DfH_e(WmO_vb$;T$#b#puEwm9U$awqOiCol(NEer2Q+SBZwF(x_HasE8MD}U z;TVvgE-o%*bL;?{urO9NYqX`c*Y5>%HUI}HE1+A2<3Ez1c(hJ(Rth6aQ=)E$G;F1} zfw>(#OgNqVssfA>aWT>`o0&2$$ru^yi>>ujd)LOLUz>@Sbxwezttq-eP+}qDuPE{Z zUmjqdd3N@j@q?S0ouPql1(U08?P?6-3i|qHU#PD5&&TZCKibeil~&fgcbe=&B4Z<0P-n2;j*55nD=upTJD#9&oqRk8$ujuHPPz^5>IfYj{f87g8VUSdRP-)fpukOCzqzYbY~bx$SMnK~Zac)ZxYWgGwEz3RWP00${K;LWh0Fk=<%p+jj+RYO%>h`PtO1Uu)&=AXTBXDLtOfu|>k@3t-4FVE|y z>m)LVR|LA=l~g6!^1jxwY6{5%20;$}sSL`~6Hupiba3Sa=3cY0)+`g=x}st6`+p$59cnMdh- ze7_l@Qb7vZI*;9Idf)LTEBH>=FZ6=Wgrc+`h#o{rnvev?$H!~_9aU9=J`dR6u-4Gh zq1=&?k=NH~P*97IIpNEHrzt9d{yeE-Oc%uIVX-`y1i~~;f ziqji^j<9_;X&#?BIp9df4C0o}>gl#O*GI>|G`dgT#m~f_ z_k@vDM}{4lq8l3mNWoHu@_7W05MR1wMh>bu!w@XSf~KMHV@S|Xg|la>l?ScV!O+{5 z-x9F5SAec15fnFkZjdjV9JR|E3Q)vkZ??MY|Dds$p0Qb4q!{nbsCuIM^{m4mgg`N} zU%(SzL`zo_fGN`pVIeCZ`BIa6ROw*<&#&4!IEZ0F_Xr8Hl;P2Pgb=l2GgOdGLk%u* z3$f5QXp^&1wt63xEzF_Vq<{kobmDH0%SG&Gvlq78r@y6WNqk&qy0W^RzJhK)crZ(a zI}^U+!+A8OhpOHqor|1ZX>C3rj($2BQPh=v@ay^)sxq8)XDtz$)#{ldsG0RlaH@r=%y{cqKxGNtvwNmBWC4 z;qw^_@AGAP!e&ncHy5|Nn;QVVjmEfmE!r(o(-|Ed?E$#bIPdKDoKbJM*`>!VJd$21 zFH9&v-*`FrInX>om!L6O1r)&W&5kMVL+BaTp~=3~9o7!S9$F0g{@Uf|!}AXcgB&Uy zguV**5WYx2`{^JezJGjAaoo%Wj zOkKAgkNT+8J?yL{#BnTIE`%U>);xF(UG7V^b6%fH_w~7EREpO4&>!ZYDiVfxMfhlg z4-C^wJsS}BoJh@Iz#v?ioxT0p`MI#y4Kk6Ybcx74Nz;1)4+;}QYira(DTl)=cE6aI zSoX!weC$#g?x^1?F>0x?>(iv=#$`9#`P%p$Kh!#$-gwv>PEu%P0x?jsP{}Wln|^SA z5E!0{>F>?&pimMl4f4vsE+_lSipB#_T$Dq4Mvg%}0-Z5<%7-<`NPq&wJ66z}ZO?%} zl6<9!Ufou#{X42eV}Ctrj3asCK;!{lEoEAD6{|nSC?}20s%T8w?!|O54rW2S0-L^p z{RFovZw zi0r@9bFzabhmeiNG@Y!ipe`&oPxj6ZO3U-zcI}7IEn&inD>IvN{;kOf>0h9nBOHs2 zJyf`0qKA8lK8v4kw&xaZF%79zMo#K@rx8!AnrhWI-oBK=otAtvhgsyaFl)^7u-oR* z6ntQ0;~5chbc6oG;axtMKX7*ox5y{(K*R^qe?Ub4#a`S8^W($i_Uv#hIT##=c!*?` z2Jh|dU5h?*h(saj6}-2fs-eEH@FzDf=wO&;Xoz;W#G*Lw5t44iX%|1uX`87{10a5< z1LY#P-hazLHK$$t!@Ves>^yik+W-%kpz&lFEzaO7!pKig&(BUo&ih(7al}16z)2hZ zKV1(jNgh!7EF^~t`FWA%2H-yq|8tjFf*VBDqPYRwt!*sI0kV0Mew;_~?}XkBX5Y5D zi>lU@<}>)b1MUNn#S&oq1+T%p7Y+e|fs@Vtqh&96NaiDZL7~1wXTEty2LQ3wa-i z>!$>B>w|Xiu9e-ubFjq3#M#-|f&vpFa1Yo|XnB2D;pLZ3zXuo&9?^Wy9FI9WJ0m+Q zha~5}63^NsI0r;Sc;G9*7=4oKf@o2QOG1SAJUk5f?G@B*5po3F1WV3 zrl+Ynu)DF7%o=?UT{?Ptx|_g+pOdyWv$jUu5wesd;XWpXGpcpK-oj!~w2`SWwwDIV z$|~xxy$z=ktvd+^_1la!XyPQJIq>u@-~BpbxTgeuZ-bw#O~5@_Y!~Nn(7?&+e4QYJ zaPhY>CIx1N=jvOEN9ls3f0T34khfGsJ5s8q7w)n;qGBmi##;R#UCRdh;dL>^X3(@l zUWhT(-$L(ERWDSR%Mx^;8)p-o$AryN`u5kM8v*t1y`c6w1rQS(OAo)mm3LQYyE)z; ziuLcayGOW3Taq^*J2BDEo)!Yplx1cqN~NGwmy-aw69OZz&(CSpp9b)zKNSCt-tf+o zBnBu1XqbZ%?9SPm5Z6I!q;1iMoq zakloi39tyWwX$=%9Z>pVC}H*@-V>jBjlrj|qmcO4V=;Xs_Oia4riqx+X|2nwUkJy0 zmotU}tAu|jFvRx1&-(8bZ`bT?sYpLvjj8Kl-d(TyzOPAyY4}}()#-%uPh~xJSLZPi z>pMWyz~K!d%#)p8JEXg-@~KAJAcy*+=KH?~rDX*Dvdg_Rt9ntI={akn9WE4nymmcJ zyW0xPg%qG{0Z(U7PftfjctO&_?+Q@Rfhc=OU2ee1$*HZKL%>r1*q{yOkLfJ|ObLKV zOk}tTi-N8YZu)%ouiY!LwZR_me@@w%yVM6aaZ(&AZps`DI#|sUlPr_+lNA1j7~8*9 zEwOI41VmuZNJu=4q~uSF4+kwqR;okXvX}9jN^}~XdYx>M2OPP?D=Uk#4$cQoch*>u z;m0K6yZZYBB$wWTA(+?nxL7}LQKyg9wxz4|Jjoa{q|d40dJN#8Z)oT{&s#M>Pt^&z zJEgLB+Apa=+9`iyiP=%z^I=uQNG1()!h2}3x0W_LyZAh>^L7gJk2Y!Puk z=)PgrrPlJYce8hMejc9+c%=dZM@V5f&s#0e&(A#lSy`*!yjs_;ckfS&X01*z zk?E}wiI{4bYN`WXFaSn)U;r~1OMZ-fr`S>7hhsD3Eeey5wNOb45CtZGRenyZf*tzz2XhgY zZnkp5hQK}fN30$p$B({rdR|56gy!EH&HiJ@kilSL(y3sWwq^WCSW5SYVG3_0zhmy9 zdq(o|7!>!ZrMiWV_SV7_*{fgUWJm)TIxWgSqILW52^f)Ksp&Axg*PdMY<$~JWV;}` zE1BUJ2t%3_s8#w6y6`)j{WEI;XT0dad=S+5dE7^Sq2=b28Tqgh=^taAoBWDIL)g#|BAp*~)_0Jjqa#!SvP8yeRmY+D`oSid`z?tBt;Jm2o^o(>FW)@*hPw08O-`&g7tWDT^+bA33 zUy)XCSPSo=_u!N(#qmj2*%-Oan4Z9N1HxdFW3wS$dPiP@2NK*ybY$@sG@gCN}H z`^j7Hrzc$%^a2kvTzZ(!?i=cO!vsw!t#TV>umC#LTSOrvA)y7=*X>VOZM5`+)SeM+ z=M4k4j{s4spB=RW=*F2`@429?0cvtd_pnIVzxj%x^P)?VL98DU3Np>jIS6zcE7Idg zX0d604)hj@LWK3)Gck0aFOtJd)B$5l1lMkkvZW9cbOC0T895Yf#Q8oygj+G2P*OuS z50mZ3Yr-1+&iwbz&Tyhg&!Jy#9xhGzzVtTE-b4qYlII9~Pe$*Oqeflf|2Z-jeuFBc zJ1C4x2-uwiS+4{iGu-M-WeC_cX809hWf7)um7+b2*d8^<-y3qyCl!& zNZPrvSq6?GHv%5D5uIsFg1jg*2C_wa76ipZ6riCzI0>Wg`i4;7F6|6o%w#NwGELcL z_a5Vq5us^pt{+5Uze{GzSDZ#0?E*iKy;vJT5crO4D9%!q9MbcU@o6R7_f#X!W=fCW z{sTTBIxlvKeEb^+^CsbmVv;`p!*QV|@@D(_^!Nr~BnDzSQr-txx zO_2}|5phf?Mpy9LFBJ}h%nWe!L?Ewn0tA5)AP|8$&jEl8ql`_44VJowh%6gR-dl(7 zGvSMXpdivL!nk0&pPQEx13wRJ0|avX1`i0VczqqW2&mhX`0htITVbV%tjS|&P5qhg z)AH=(84l_@$msr(f`~;rc!!JJ-dJ)kvp7Yayz=Z+$m{ZD@b4c7R#p}#;}-1et0uA0 z-ZHp=9xC*N(^Em)*dRz=eQiHw7ir4N%>X)QMK5S?{&s5^QZtgeSGnrAyZE$2SC=93 z(HAOrNObja`%hl{yVhl<{v<2X)1y~2>Qo%KlMd%@>FDqEXkhl=L1Mq9fZT)XIS&iz zH=6&{;!XrEC4dnE&B3MqBe)@lkCoCUr?mEWr_U4vA_jki7J#WdCXa?rS-gxIQoaeg zMlG-FOMbGjk7F&FY1wJuUZ$~th+I8rl7&$hJDH)VzJJ%4c#2NkHT&9`Td$A@Lm5hG{%)GjfCH z@#ezeucg1-{=LT!2cHx{$r!;%32u@8d^gL*E&nsMIWXVj|5cz)SE-wCIC!zHRJA8{+sgm zlt{YU*2@tZDE;DJEj{X08&0Anv;$q)QNDbnx-k6yU`XT;*w!(^#PLY_cq|YWA&Z9t zid8x2-A+ZNGT}~kw&JKKb|h6K`|9sY_N`6IgyLsdbFMiy_lD!u!_I2EyTe*XJS%eW z>*~0>N6ibeE!YGv*u&2gli%ar4$@GU;bqM(by_z7Fhg%$du%Tyi8u*lJyANktHwhFcz@3vB6jK9SL`LXhaNfv6^pbRE-KbH z%OangpLcJ2VMPT027M#~pkIO~MPM73e}SG~;Q)}YfekoVf*dLX>U)<(R(Sr^yKb7j zkCQ*LgD@<#Ou0fGXxE6wq#PK6MmbnFtN*S8dyD)WTg`Mnp

my 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%0D>wQ0uWm5{dSjaL9NO^k#uJR zV_8*zroX7QdT@+8_Cm{fO!~c((t^bisk!NtD!cv~l9gqI2^k9+Cwut*`7cEZia(D^ zI*J)||DCqQ#s_z$=Jqb1lsp7nWV9rW?GKh8c;#bs}h2X-<+)-1YSWyQ{= zu9bnII)Q_bT##dPF#yQJ^|(XXi_h^HGi1!V?#ms`n3#l#R!cYY+f0aAx((U+zjbRr z5&LAHg%J_*n!B;#u|2#Ht?LRIQCk1&Rc2;&ow zV?uyBVq*yaDh4~QzAFG%4;m8B9f*81;W2_;^UHjtn~vl>crVNqdcxmVV*vBPqs@1( zw*Rxj;6HRal8Pj1D|e1L5lwA`iM`HKUR;H*Yc zD`|%9{_xeNbpWicx(F%u7Ps z?NUo~S5`2%qTnV>Vdu^Ol?@z3xAXFiQ%FzZxJ3gzXjJU|j=TRZ6LUPfVXTftAgTd7 z3H}Rce>BC3fA`xJfERwfA~*IoN%H}1Eop79#A3nFnzG+KsGtkzn#KsObHT2WBN zW^LI4;-)L8x~b{_S-(EG0@E%fqUu=!m&+9%_lN%cV#~ee+)P;1_{5TPOC>->`YkK) ze!naJuqfp=DJQ|YfS`Y`wqeQ5M?$V~$2-^qI)$%6LgNEeZ@)&YNsy==$OCh)+sUKC z)DQwgTFW0rLVk#ckdGOb7RSE${m+x1o^%UCNAW`o!00aoXgg#u`z8ej?e<4Rj0H>CJ*C?v?M#lH%VB{t| zc|c&OO)ZBAT;-u#)J#-5wWbKNQOwLX?en>4{MNQ_kZT4`6-d{C(f^^{Xu_SZRU7Lh zdkXpScwC7e(dqU zBDO@=Cf>=O-L`F;Sam68i3tHyc2wJ~lsf~{DlMg&XeNCat-2#gVcIr9;|)_-a+CR1 z3MQ0G1HCL5bHDB0{^v_}5YRjb)i7NFNDC4r0UC=S*4wsw3T|{j8WWihEg@RZZ=03` zs53DD17k~ICRVY{Wo?ICZ&1=W>z)`>-Ht8BfYsF0h5osjcYt;j#FE&IYC#4B@Zg(f z!-REja6R7l-NyrSX0ooJ8K1U79{j7o?D@;th6`IR->8RayqNwy_Ks-y0H)n9pz;u= zow|QKlg^Z!96;P+_xpYj00u75VO^j$)qP#n`&tcrTvRlo;iM^3PBkA@;=1Ebg( zgQJhShmz`UIk5m^h6SuDwAr=|ZnvAe!H7=XdW*x7wzoa0Wnc^Iq^WelFw^RR$7b`I@B`0H&53qH=A3-dF=T=(Gm4M$Q0AS5sK+ZJrCb)^O_4kKAYMd0mg>(@o~ zSKL6Ejzy#5V!j|z??cNBM8d0(yc87a^+U)|&4{$L$SmeCuBq$q7>P`a!>(o%vc0e52s_!=_Oce_bo{12Yr*3rfKYYy~BfBoGMZ+e?9c-n^y4@7KAf{A!Dy zxtXJon_buroI4wLbY*6H4VX}qlnG#Mht2R1U*C#pBXCN}?pxf}%oLdwt8`Sg2M~$d z+D#&`sQ{`dhhAEQ&n+c;OI`OhPQOUmT?F5Te~#JugYO zDKV+*K;^~r!#*R@opA-uFt?9v0)7YxIKFsm7ia%%9_ZfE57fl&0Yo@W9K!JZTL>iq zllaNkswu7!aGEF$trHo|773}Pv+ABXFWDW1to6@fwG}%TM1-W~8&*IPB=@{4TWK`q zlweij5bHtZO0ey_#!G`lYiZFbYDPk8eU=7vm0+tx7FwQj4gmykW1d91jN#xgV2|rLCXo?3pBH{FG1o#ER?G#=Gls z8!2eEKA#r~e2EkA!#aR?`0e#Yu|nUvi|3D9YFjwQ6K{g}MzlEh=JD3qj!u+xGA-p_BsmyQmC>0k{vuC^b|;fXdk2?h!;X5RbVI)Nc$cZu3+G$cV6; zM?aEx0M>H5vyMq&3j=0ZqnSn8C0}F=&=$I?j9cEP#fxcLk|yQoJxvveB+SM99le;T z0#BMPGsdi~9Zx8Q%qZdUdglHHr?>(RtiMbd3K5Ljd_n@Ocp%txeE)$VINy%7xuE+T z;Y{XxR#@f$;&(3quX_FYJDvKfXJHMM>%jmdR>ZS!6WeaF`7RQ`kObxSwqHM3D@+s~ za9bOhr4$l2hZjwDwOh#!o>)YykxkMC6g&KQ2yW{vX1 z5y+dlnRGno1dzi1n!$~MTfwO0e0`tQF}II}dxs&rg$lRooH+GzO5H7c#vf#$O7JKT z7X?Mf-S`2fB<-OAja10D0i_lwo3!vTp3EY)SohaJBJ+)hj0k(t~d!5p(khtd$)Dh>1HLsJ2s!)588nMWy=s*{jf)d})M>CyH9BBCer0 z9^%(;?vMEX{nQR%ECPpIK|b3Ji~@#U#1d_^8;AuCI3Y@#%NnfVbWIjrx{nMYTFd}S zi}bcVa^WI6euTigufaoq33ER~4#;%Q%`1SIU`?xAi0@?=?!wwkD2zH>)F4A_u^%ev zk?((h+~Iz^JN>xUJ%E_@Fr&YIW&Npv~Hz+}dQ*Sun7AAn0qUjrN;Cx(ra< zMqZWbI2U%mD^&zFCkyv<$ZL(xwAp@ajvsnkg$o?>w5PxN& zpyXl$Ko}a^x}euN0+Dg40<<1ZMWZrpa^|I^A%1gdvFx% z%u=vsF<&1Y4SpFS&?{76x8-^PG{nePABu!M6k^?6j~Z$OcYEc^!u*TXI7^$E$fBZ^ zTY$p*HVZ2tP|x}5uDg-(CwlR87+b_`IJxh?9d<7wnjUP1v?(Q6mj!YbIsG)ybW!FE zjD!M`5kpP2lf_asHlYNOCR-~aJ9XP^(EPzvd-g&_qs+3e<%mcM2B6543(IH*r3*AQ z2Pe6*jl;oS^xN7`xDMuA<<9i z0AfbKv+6aANE)3@`2<}vv*WQw>d5xKva&ohhTC03s z=?HRBk@c$u#Mq&d7Q84uTbz87b|(J022|bXz)j%OSd6T8Z}#z%Zla=1{(Ic|wmxl# z*)#^vXuxp{82|Su-E8bOk~t+a;&VF`BO zz|f`d97YWuKCl1|T23D#N=r%Xj=i{~j-427$RUB7ix}E$<{wNfD=_N_l*O2n#9V>F*DfJPT7NBC+-AsVOomco-YpE>Vp4y7{D2~{{Wh#V-Yy}cg-$|^ri}j z*A;L_Kr(6xVsWw?z>`~{-42pVs4BQhe&hPi-&%YNsc=p>ySJd*T&cYj6FYH;i2)W} z$0Z9sZOTDRLihDmWhKZ&aDUw4aewIi+%^C*zO?8wA;6Hfv?i_zlvr#QS_X{S&skV* zR?|CBRl^QyxsP5XWzdlB0vpy~1vIwW1zP(Lf$1TT*LBs%k)|n!^+ocj>I} ze-Fk)YJggFjYoR;JBskh+RdT?l_*BGQss&Cw{z=F9r5&;+b@6J2JaUK0i9^|ULl}! zKf$mLu!CkdBXDF%wM3qN9fs2nweuSY48AU<1>2g)tia+LZ}c>S{=0f>d>d8d_8b$hZkvD%Qr33$3_QTmxatU5YeZ1qjr`pnXo}#uO8Z^(Pbo z7u80{x9$zvHYe`wS#!1oh*pp^a6qhOCvUR{|9@l!{s$tDeGk)N*j2#ioPh41Vh91n z#zpzs4Us8gjrmv*KuqT zw;_g_D`3UmyD*8jpLGJ!AOE;g`@iH#SZ%4%k9SqqDJ3iWT+UScqBoLzkNUoBsyW z^D#HUQRVj4#2)^=I)HeP7(bpP#H?$wY2{^L*YeA4ZiXFa?_FFGMhw6`+dEhiohfI8 z83XtbC-!GHs_1QRbY%A%;Hueur4^)F0GG9OELE6ncCZ_p4fLRD0no#>@5N=YO{&U( zi}~tRZToB6c?aD*nFLyaKfx^|D0HtPi8ZBM)VY(n8z**8#8Qi_U5!CaRr&KN?C-58 zklS-d;|_bD&zPk(5V%a>g*smB8nPN~onrfeI5^ZVx#odQ_#;r zLxSO(&E2p&PR2?5|E<`6KZOW{Pnv>ms$Gl z>A@q-NCKgMpyaUP(V@s?wMr4Awu-avLNpWAi=0q^5hzuleFqMRyBVEC1RQ|?D9dPp>|GC% z+NP245TaGK>kC4#YusE|k?l<|!`v_K_uGKj8B$Niu>z&8KjURG zrdTnb-^$Ns`2Lwr&fI)8i08K~0NzgFtAC$5bI+(~>uv`O3_~+ljNs2$WQI!JRq5~{ z*LZ6Vpkl}5Vst^0^XEzDX`Ri*Qas-1Aw~?9-_F#v^+pt8MsNG~vO9m?DZJP^AJm_l zwavG}Wok4xHw|x$v-$#~vT_B|0_5ztN}V#282#oK;^yjdSpd+`atd~P!6K+J({|g?QhR6pRumObr z^JIiV1@fL@&8x2mV^UM2OS8KMn=;T3NDb0q>WhHg0?!yA6EB$l%(Abht&=;WtT)~OKReUk=@R{|3&08d7eJEE4P~Yj3=(lX z@kpN{u6k0M7kl!u8-o`+bXq$WpEpN`-EbQ?Maf`=}D^4l|wCa0Mn`D-Uow?t-1fHJE zvg~h96{{~tqORyz5oqhV77WWlH92Ad^7GYBS!o*=Fdj!`s0uDNQ&5@$x5qUew_881 zu*s}B0$_~IO?X}i(l@UJzcmK%v;`V4fGOfRR&n3bJ!e&U6(1s%Slg60Tnv{WM=?Iuq={# zFp_|{x$?TanH$jQSO5s8-)PBPg;P%!)vf%7k(oCFW>NUV0sXf^Q$W_9G!$4!t&rMB z9D`q*IcZ!s%06!7W7v7~6(3+{=sK=$N~d$V<`ZR>Z=5} zR3W+~NCH|i02}C2892+~ua#U2P^rzY*8WG3tWb%ebUyD!X|yF4b83g*UuRV&B2({Q zSOv2vRd4|BID%NGy9p`G#JX-QRl-)0Wh6?tv?3F3{=~_@zl{OW4jwTp(MbSKd(UHt zsIO=BmTsV<-1?QOyuJ!^JRoxY2|8S$8!J!9IlYbmbXYXn14kh{!TGZF#i7wivLp!Zn(Q5QtBnDaMQv%UO#K*`d}0m&fNC>rBwIli!@mS01>dQ5%qz0V@^o21xVz85}D1Fai?kk2GuR+LKnv!OyyQf z1xLho23**9VSp$@Rm*!kDiIa1q^V4~0(0^XV6=yipB*L?5|M3a zAbGYV^TgaG_4eH`G6uuyIBtnrr#Rg5uO9w!Tpj!Zj((TlXaE1>*MO(;-(b!NP1bYf zujW!s2k08-dL}RGOg=+Zj{wu?;yW6W%v_2PLy}8aDay^W_{7*4fdHn~NBf%Cx&TY6 zAtJX4i;-t0n~kB9wyjuU^^lXuou{g4JBSYGb=?s|4+0t;IrnKxQMT(_1qIT`R-;uM zwZX=W)ZQ0k4;o3x#sg$*Jem`WIKzWtQ9NcAH2XEI;j?nW&(J;U#n2`B4qaf^>2MnZ z+VgM>3H=tg^uKlu_|YF46Q2Iv{_j(_LW#2ASywTg@xt~X`r<#^0e4bheXxwP?!p>v zwLL9n^ekY83eA|)Og_AA50c$jpq#s}uElMYWoS9+7NDp|NjdO#>jEqGAmSe<_*e#B zNJ9446V`+-bdvN9m+{)6GUVUbhbE2g-g_&W$Oj>CW68mzk|J(&d=}=r{gZp{7yPyS+}r;{U*u)nB>Di%+N>F}I`RQ#ubsoq z9i_mKz-hmZIVz#Y4xAheH5OHH%`MB-W!P_Hs=6v{Ew4CGQM=uNAakCu=q!wqLNX6D zkdfmqzgdC_wpM{LL)EUu{S1PI7N!hP15-{x&xFa5aRl_0ryb;qw(^s-9s#!!6#}c1k1`TOhIC;*+)F z7%yfc3xtCj3rGAFS(@>%dWfuzAF*%*6=uvdczRXO)_wHCwr{Wl|J7Q7<;R?Vc6#os zxZu~X~++l z#cav4U%p-zU4T0V#YEjRbJDSJC+L%khtC((&fM^Ts1ukz8^h+Pvjz_U>vUE85wH$_ zJfQd6f`DgT!z)w&j2-ptzdv;Np|!4&g_y>}9>_%YK*_u<78*0NRF}@`4DGEwiL5!^ z_&hwAv5?5F-FWN6$YcZ~<4f?+(sHi>u$$TlMTTL-*I_{(UB_j&BlTZDsx!MN>^P~p z9X9)hgaHm9+-YIAP|?ZA*6r#!I!f`u3NGRaXZX)YZuj5e@c;M%@Ty-RPxiFXlyeCJ ze}53^j33-g%+Uz+y_w@Ib1)K&%_;MQ&3UuwSx3Z9-Rynb8 z9oOxo84py{SZJczr}F^9%x+G|6j6C*sLZf1LZt$j*TcBv?mUo=V-&Xl4RPPD-D|XN z#Ee#&TJIcZzKR*I%BZav2 zYxM|5&pOSxHRdNif$!p7e+s~p(MXLI`P>TdN30*8?QJ8S*Jf{9`*mId`eBP3&2g@7 zn)M(pRhMGm=0P9Vb0bJO127{s+Dtwyg(iY#9$f}O&a3lyyrqF)SPxdfDtQPz9&|NJ zwMZ-nFhc|z3hL<`f+@H@n1nb@ndsft8oMOkeib-&5uWtx6+0M&1betR&OCcg-b=sY z-|6)Ki~=x(CmmLEBjf8?)x`-pvA6e%DkoLA zp^gsz?f0AIWyd%3y(udFF_d55#1_&6_ zT4!zFD|6rTmXSYn^FIR?A>{W+^EU+me$^4+G=T95Iq2KYU-%s5?eyDi?KZz5dLrOxr) zVTr*d;-kjF6s!~Hp6&pfTbhZDplK2gm*bgh^T9K-??z@|ZR`j~ZGpvsjq>dg1fCVr zbh2uibzLtZ{r`fwzq{mq*V%qXDg9>0ALqp<3SZ((dZsPlVMZO-T!*xpK_t`tT!T*C zGYx_RPz1mZY)BfuW^@IH9(@-t0h$7lotTG)=q#AL2jkB;{GBnTE!w4b9m2qqID7x% zpHGVnPCC%xS&HE3({=H0e)xY|5Rg9ks2?1(hcm1BdO*)#*>VbfDI`5njZq zgWayIYmHH&%{ufOxV!zL;i)tJl6?<6r253Yy@zw+`#;Oqc5?*JJH6gHm{0%ww21tJ zR{q~oDE<_H5BzenPL!2$Uj({{a=_^=KhBkBDz-Bq67ms!W^XjK#g8ecJ=SaL69iB#OZtZT~V}nk8BToK&_F0$1l z{{K1<@MmBR-E2Pm`Qd>W1TyV^!>Q}=CyIVJan(=Fz zZsFb606nf?fa93MaMS`E8HR^K2j`AWOK^kRB=BN=G;)^;PFw&qcL9}fl15Al1~%zK6Q zwOjqQlR3404?2PW(&7Kp0lYK+yZR3X6A5a}Hox@(@_t~GantaBgen@d?t#y5b6J(a z!MtM}0iNBs-EFQeNA4;#b5b5|_V_bDbIi5(=eU^CUML2} zfE$%;u{hY@6Sf{605_f(UySqrX#MrVr~K(D>yv?2Al=x$l$Zp)=Z-x4wmHtPN~kshxXXncZOx?egEwJ z9Sd2v&;QOTyX|{FC;R-HSA%~Fz&pTE_htoR$#@fH# zUUIGpAXry4BAEG3hh)Z}(Ot>kHwo?Sis0-(J?8@av-bYIG2?0X@E@2A{uF>$9)t<_ zbT-ExT4Tm(>;I2m8^z)=EFzwKpU5=yp@dJ0!*FQ3Z9&9IFu;?OuEOQAfpHi4`r|0@ o3J~~Diolpp_+LHz0093#0Dryk^32RvbN~PV07*qoM6N<$f}B*gzyJUM diff --git a/examples/img/smokeparticle.png b/examples/img/smokeparticle.png index 7bad8c685f636179ff1ce401869188bae2d2225a..ef3f987af56b6ddecf7216f6ee4254ae9004490f 100644 GIT binary patch literal 29640 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%0D&^%KQ=?An= zw0+86*&|h_s!iUk@u(eIi`*d42<1#sJ*T0LUR_&OMXty#$;eH~xkb7{I$L;x^cU%m z!v7ZjME*W|Q~o*%nBd{!?0JQ=@}}oc&W_C*|8U%c@cd9}P+33`k>XzjCMd#|VoNcI zIv{{W6b4Fy#i3#_fB;UQhAFHWoZ0O8j3vw!^fk2`_+S9xF6my;0p8!z({PPllO}Of z1zDm3QL(y0SEFpu@pTfTN~=?vRd$_Q*u-z;ba1=tds%(Lr;`ZW*)L{6Y67_O!W0VIHM5@#xB zX8oMnh0LY(D{I%*Y~*|=`a$@MWS{5|_n7F6=#uoN;;!@oD~D6WFBMgZnNp5cq?M~Q za-+tobjiKa7IC|vo8QClt9v3Elne=;t6!>z)vt`NwQsZ|;t}Or^IPLv^*if33;d*e zYaCIJ=-*gh>s~2_tzc6P`7MLJ&Qs#t*QCSgr zVdUWaKnjsWDDcY%6Xav_FbJW)kiY{2@I$y^oJd}@Foqk)nG8S|_9b?k3h z-*bNw>=ymO`%7?wcb0R7ohZF0$>ikoD8h0c1I8a;BT=YydWBi#PQb+(vxNsbIeBDIO zWbSnNEbe^X65a~V8uo^oExa9)pIN`L4hoLS6J!?!H$=(u2g)2(k-Ah`&8y>aWn!5^ zq?4FMc7aC-!%qhN7xZzT3J1B*Brl}UebpQFi1aP{9p^p&y?j(Ms`#LSQhYFcFn_R( z8b;;srSE0$#BaqTVxT}Wtau@OCLWYNRrE=EWL=^*R&$M~)?Q(z>8cdvVhXpoF0YzY zN+~MJDR@wvOuj+6n46GwH0xmgZ+SmI*pa^F{)T&Nl2+VXk}?0@tkmhZC*Pi!JpSIe zyWy#!_k(i+a*5gg*?xJrhyNp>p2!a52TMW)5yB|(1h@jH@MZ{ROBU39!TYjyE$187 zRya0)5$xk1k{p-(Bf2cSB~1}$DDpHE8BM|vuvmPt6eOURT0~B+SJWcy;B<2yv-?E@ z^+TK&ykX%h=^N>Y;4K&6*N+N6h(Aa^NIyzGsy?be+CQ2;n#QOQj>_K4-$~!{M?`NV zuY^E>5^Nyp7d_^7vpZ^9YP?m>5=)7`TvaYD=2KV&3@R;`Ldh%6prjPuD!!ckPv-Ib zLz(;1f64se&epVV?ybH49tObRzF?`tKRPrv8|+EoI~FuWzrsv-IA= zdvk8hxHTntQsRW9sJjvAp_#$Cfe(qfKtL)!4VQsM)Dap$0jyviY=MF(S&U$kd@6sY zWDaj(!_wNX>c3`u%iPBNiM_kQw*#CMp5tHTC&^PaSt^pOL|n;c@;N+_P{G!6OniH- zr@FbJy`j4S{NFIZ8DhO)57)nHcvJtj?p^(R_GtZwI)E?wDE%b;r1&KJWc}p%Wc#H0 zq=wHVA7mf+qx|=Rcfz;aH@sK8Vet$0P{Tk&e@$)WW2KtNG{BPd@l7?T?h*=|81xyZ`N-uamw?TzY?D%AA`sZ%(~8DLLj& z)QyPSVRwU515=0@gnND&_;eg7fKT8Od4a4D9?Sq?v?NA2NikJ6Q#6+YGl2dTeI0#M z&G+=3b^m4UXB}xc#Xetiz5Wh2O_nVyl)?zCt7CFG;szy4S7&BB=-$c}dIz(+_A&1X zdyxLD>IHMS=5_rD`z`BT-Fwcc-~%6eFZ?710;Hd1pEaMIpADaMpX8rJA7vk9AGkmO z>m3hlz!orgzX=%Dlyna&raTU8Ul3F0GDQMJ+8ZEY2=S%e|9* zJ@b6Zsgxu4_NV_hZRfr3Q#PfoyZ2S{vU`he&b>AB_SE~65@T*h-;BH(mKc&0c#n9O zknWd`Pr=>7BE$q~fGCI^A_ls|Kr{G9Fhvs_m?7r8QPL%Pcf~m8x1&%qyxdsV0{d73Jq-KFCVGe?9d=;^{ko zCm%@Klf3ix_B)#s*C(#Jx9lzua5w%Q%z>nst3bfTuuCCVf|3Gm5|aIr@QJvqScHrq z50C_jL&Ra~NO`m(MiM8PCWse~4MFazIv9e??etxYz10UBj@BpCUaYxMn@oSukXui# zD`V1`^-O+^l%=XSlv`=8vc`(m($12e%09-^%Au;~)j$C4O~u=acl7s+QRWBESobBL z6ra@q-TYY(r34*lKoRiyN5KcyC@AG!-CM>R=BwJ5)z9fe6;By`)jf<(W@}9&!&POa z8Ol{uDUDxPPofu=6_B%YGajTRr`))E@kYY!qc;yG?oHlxdwcTcJL_+)y16`Y@$Gr{ zum%Z&I3a>CX{0n-9V?F$OydIq z?8V&W+||7G^_y#V)b3*LtvN_P%1oeNWZb0Rtw^uQtt8jbY8WM~N`95JM$ItLti`U9 zrt-GRE^<#rzmEXgi}K;B*A*ibZ|U!9M{7T@p#Ke@xMTfSeU|;J{@3uY>R%m@A^ofX z0@xpUA6Xxmqjm2XZ|Nhn*NkDt3&v2{)9QX8po`u{Z>k0YsthzWO-kXHz#J%~k;v(} zsp)s`Cf>YxF*zaW=$(T%_a^STv*YgOTkCJFzP3A(;%`m66?ZZAdi1r(f5Og& zTnoAY1YGgIg};WofJJbD0DcfRgcZ(*Jx~!V1qHBYae#n^<$~3`4eTw99qgaEdutCe zj#egAT&lWByIYoCl}jVjX_X8Li!7kYD%DlSDjUsBZK`aebWwWC`fCO%hDu+Q4VS;J z9I1LsdtW_T0|c->vOjS?3jwg|U**3tc=Z2j{#Ab#eU^M~_|))`@v-hh2R*XLcEb$Qx_xPM|VMW2s67k(k+a?quKD}?j@SMg_Y z|6mafV~embL>exL6h%v8`LG9aXYuAWEUsP7Ud@3+h`odPGjA{NU@a)1>{9Vf>fPdW zYF;s=ghpoMvkC+h8C6X)7TYN9vL;$vIS^3NUolWVM1DaTE`CiLp}sADUj-AO{v!vx zF8Iuc68@YaXvDEfQt9EZG0J@B_F((hzaDG*S{RiWSDO zr}_RC$Qe_BXoF;nU`zoG2iZsI3FVhcZCUKfv)ysdx*i1&f_kq;5bhi-E}^ZykB0g`{Ez5@81|5E_-L)|C~ z2%wKtzor2Jl|vN+w0?RoqpPf~q>1LHfdWd^BpFFi$SNAMKwfTU`h&X}Hy>QOop9^u zRmgzbK)?+k;KJ%N%g--9H}Ar%lhaPbor}E?eGU|GD&%a?sesdj6aHuM7kmof5JYeZ z00Ch<7=yxCaU6ddE1m}-C|J%~Em+UlTn8Dz0RrldRwNW(EWcTKmkb1yl1pe*2AM_S z7fOrN6hpq1>MCj~ZY%97?kVl3JuMz0y(k#Ye@z~tKn8F|*&jgQ9|e#Btj~3y>wyB+ zzg&PX{Or>N!2eYBvFc;R2QbUKvbW_Ul|VrCi<%+YQ)+)%PgPfW8?~v-MYB>21?oa+ z9={M2kW0%W=jLXl=iGgGGv#7p!u6w<4qo1SZP(Qump5Npe{uCc%M%u#o|h1RY}%o? zqp|-$2>uh65OOZ)WWZ6vX;8pFxCAUhL=Xo^gXAHyFn**sS_)G@G>scy4;jE)-mr?d zp0&Ald+n}zm;$v&%M-{K%Wlw;D;|{QR*=ifO6Udk6h2j2swy%R!xW%47PJ<07Wd@$ z6+R^mtO{9Wl=m>sWbUNWCoLkQCP%6dvVNv%bVg|1R-fuT^9D=p%a>&f)IvO*xB0H#3d zjiiey2{(>j0Rk@Wy14!N=Bw*3tU9y&=;CAZPR9Q|?MU2TF~_3ML|zU%7jhaDaEx%; zF98TR<(mTX05K>)7AA%a;Ks1yxYO$68|E?>v6k^x)dKAUig@;8;Q%3qei9#H@oRK zQD;GGeq*tdYAMu{RN0bj9;u#ET?l(XPEPiN^yGWj?_NkdefRHc2d?c&*m-&T+07T% zA77QQ?9igabC1LynRYnt@0h=%Pr@RU5ON$8aDwo+-)a0w+;QI~C?*O5#Uau#IVeC7 zQ#Xk@wPq$079sYsy07ZjF*k9(XYb_xw{AcENcpMK^X1p8?$Fb!vWp8#N-0&PbtPP~ zxKK&a6`S)N1>T|-Qb$gA?&JI?xr0T|@?Yc(Q(u>l(7^=N5QKHG3ei87f2#5o5KseV zpu^7RSp#Aa$7fqWoFuVDXcp$JB0e2e~EJo9iH%i*zJqfjFC+ zQ%9~UEG;a|&(2Cqy_0eM;rY~4iAQelzw+O6J1=~HcGJmqN5A@e*)bsC@XVuAk54)s za~d+>JdD9(fk%j^2uJ-+;g9<)AS4Kg+(34)FiaT1j%tYEOkx26wR7qhGM3hSRrPhv zxBP82Kh^K9`-Axx{UqgF`PJ&Aiqx{KN>W8hab+2^gi|ESSLADpO}X|wPhoRmdwzFT zFR8z1Aa^M5#lzvkS4FT2RlO^JUjYO(e5n3d{;}c{?NiyO>Q6o@K>FbR%8$h#N`Zii z_q2BfZ_C~kzoHHoy`T_PpjiPrg0J^iZ3lC=g|HNX(qd+!8X}0(q%9 zN%>c^&fPzG_phWsZtOn)(?8ozetYWcgs=WydT8O1IfrH*ntEu`iI{|_(-G&wP6eL| zOdy^iobWr2KkAzT9Dg=kgZ07nq4g2mDE0)-B;PlJ{5f?CtCv=-to*uaBWGLfkMv(_ zes4HjcY=1d{7PA3$-U~#vi!>8stQ^SnVlnq!$4DPB-=vy=07WV zSukAqx)he7ns>Eh+h8q(VdY24$HI?gA4`D@+D9M!k`G1T|DyL)@PE-r(d&}o(wBwL z$b%J6i~5Rs3Oh+{g-u1STw9Lup(b0FEzD(S*F3DqE-uM0%q+N<57%JM*@q|658wGc z>DOC7{eLOTp&@FA~rCpYr<$pMX1t zMKJyAh}D7gU=|QSj{%Z1ZOm$zz@At=g*ihoo3o(q3;LH;YZ>1#wpRSW_@!N+=Xs8KZ!e${FZoTl$nYBm1 zJo?4{1&3$HUMU6Ao}$13c z;v9wVPXtBwA`huKyDhJ)peMKQ;nRY_f@ireazO*dZ%RhW-$J~-FMeM(N*yJCp!g&Y z(8(W);dj#e!uPrF3ITrU8!Ggl_M+q&Ww79BaUZ#-psS!Q9}JLbPd7i*6(|bCdEC6Z z-0H$oQc+1x`GeBr;v0n*(-R&XeQ+@4x744LcU<3cal@H4f3Ns^$^Q9=W*wYL>N)cIR~Dw2~V0T$$E1V}>SOmLp7OXVpHe%%T>Os9B`c;-sQ$ zx#zP_-8+(WAazgT&YRn>Y(BsKgd7e!6mW=e z%KtF_cibP?zc2`ze-!}~5L6RV7giTp9bFaU`%;txgRp85ZCUA8W$WnQGQO|)iLtxp zkE*{)PE?(xUnx&4zE_l)pI<~ND$i!*v9kGjk~~$3zRXN^P(3Bhb04_;d;o&ozaRbM=;v)p4fd(-)<^(FTs$362+`>B0zV`JaGvFcX47B{AhBbt7d$iQ7E3(OLPm+Uw1G9sBH4;c?%o{AluQ{uuUw6U&Z!duRP<{o2-@&4(K=?7Xsz z2;py!-aG#A+iXKt4HepitPpW zL(3h@wbdi*&X)VYvSn~7?elAsM)^vgR;Xbwbj&o*)=rl974_u`G6a`ixz;`VniNe<(Q`+#5fb-BX-subEGsC!4$bhi7}YcJA*!+J9;9)#En~AD_H? z^8WruhkrVNHt;-ge(nCw{)79+-Jd`U{_gze)<2y;yZ^QKFG%?R91t$#`q#$4_I}=k zzpej$^Ka`vZT<)z;=9eStxv398b7oA$@!7%edoKYkIiqmzyf(5x$iq~na)=CZJQqF zp4q9jDD<0`z7J(*()9#O}DB^P&h|s4!R<(Cf#iaVP?x zZW5hHC$!=_aj1u++dj7_cd2)L?*&{7x_0hH__I;BVjo_(b?JKQN!CgJQOQ~5Vf|6- z5o4$OSai_8KXN#=yST5~F&^6vJv+M_$J^I8pV@r4`NH}u`>*f4wf&o|-yMIj|MBK0 zhu{gfp18iYeY^4f-j92Kh2;Le^AGnwJpbJNdFSWtpY1<;AnZRoes=tG;~!i9aQ)r$ zH`iY`f3$sX`*!nd&lAU=4WDa2F@3E6!1TM--&o%=y>5HO{KDEp$1~RJmSfAV$>Xx^ z8Qm(|qG8Ga4WJV#yA_Npt#kD=m6Ihy`LZlQD*qDqf-tr_swbR(jvvGc5c+mgyC|JL zd{P&&1JA@Wai~Ychd%eo4?qTQ`(F#X6>=l&e&n5)+ws>f-b%ThaW(gP(Y1=>+N;f{ z9mni_;g)nqeh4ek`ie)lwYKL(Sm-=+-rBsk@yPYk)~|Mcz4O1@?`;2m=fnMv4?fxd zeDlxlC!1eyf4lYl`VRoYPcYp6hP1;b0I~iLkN4H}kM+N=|84VcPN@CX4;$ZGzjc4@ zdSd5sQL_=V4JnW+mRd$Y>v97?MrU8d({an z^z1s0Y}dB$Y(DTj@BGEytGi%|58pX>Z~MbzV8Qn1yI&qX+5XGkH|yVReZTvI>qpmL zw}0{=4e>YE-|TRC{^t0}{?isz-u{F2d;52eZ`S_eeq#C3_PON~!^cY>D&Et-qkg>d zhVoU-FZ9ow9_a5FuB{!}cGo->+uEvKZCSES8%OOh0d%~1);xW@akP4@Oj;n#7Nv`m zdlLn5!f0WHBvcg43FP>3Xk03X%qDdZI|xnq7F-(^^#bt`=~~>-DsVse{<-I% z3GRXyxN+%f>g}vs`8P^#RG!uEv}||oarSz)`!?k6N#~q-#inzuxtz{T&%XWCeZz6r z{p|J&n=kLacKqh)j#J-_*b`+LWCwr?C?yPr6}GJk3P%>0QNss4NVclD1IZ?3$y{IcQ&<+Fyn z+8c&b>%Mi<;app@>s%}DIrpSPZt64iXgG?_sg|+&;mVNc@QgX8JxeyV)o8a`-Ii?-gR8b%8~5zbIbL+Uvi3i4rmhW8O zS-y3BWBS_m7cC@j|H1;&XZcw3q5eI^yPC(VZ|PoFyrO6ZDb;ZV1|>egGe zMw{BcWS=&V=?8QYC4Z@FvVFX1sAjmlzetcP&FD=LU6jNNVq}rRFmZ?|NZ{Y?+eW2R zm_9606QKnJumRVMMcpLaAwK8*hWM86ng7ke8!!rQMVy_#5qCB5DETz)F#D|Fuyns_ zzkaWEo3YQ`2M+AYH-Q80Ww+L9Hab?+kI! ztbOGCqvMnH&m3R4z65XZ#POHauXSG=zcGHZ_Kp4|fizHvh%+#PXHtOZ6A} z&rF}#|7iQj{DJQGns+phwQp%(SN>A-lJe2geZ_6VHO;YU*SM~CsLTefad~adI=L#> z^eKB5xK|hxt;6+WRb!=t1tRc(f@FSTPh2-l08wa9FgFlU06Mje%<^f2`qS|YTsyWN zi@HO&OMHg(9QhvQD(wUe@d-?VqwuRyC$Yx~$4S>xu4W$R9v1DF@7EqT9kriy?eMoH zy93Tq$CP!!qOuvR78|s|*1qk;dEIr#{=oIT^CjfJ2|3t8e{gUDNVFt`6mkfD@GSZ;{vh!z`Fi^G?Bjxi(zB|Q`oq>k#s+6gxGr5EGL0K&%uB0k zlhJ0iyWLx^1J|kbhV72+f$fpyMe8f>*IaMd-?sh6_O9){)elzx0DAsM!zbELRiCLo z*L|V;!tjOhOZ}Hxc&GeA_qp~n!>5{0mj1Z#@$w&3A86jwy{rF?@onWB>erO7=wDPn z(mv4M(cjRVst?p#TDQh(G#b=~CEbi=Tr;#RRS0J|a)!LMzkal;ue85FlHHd+00JnC z?}-*fvcfna>_CP;*Oy6UP?~%iNUb1%4fr}-9kvaFx{H5?@PK%mbc1}KdWUxEw;!+{ zd>nc;{P_H7?EZzrq{Gx}nLEIN?efE#ou*Ct4r`OQDR#;%!>f~PbGqd(+Dw$S1&zoco(?^=dY9`7Diw1H@b1v= zU`_zfk4NKE`Q%no6V$&J1h5g;f^Em39^&s4p7A~-<^kmrz**3ZkegvQBTu7` z;tvydk`L3jv-b-2OZF?bky+5O!`>9QdTj%iQR9?$!MLK+8O&z80U)p+I8U87EO*TJ zUC+5+@chF3OVev>Z>+toe7yAA#dmeTSH8FK!Tg5{e}MRC;Un$G3m?yXH2;y}4-g+N zf3Wi2?C(e49r^9l<7ue9^0kFu&i-Qlg_Y+t_vh}+-IzaJI#6#LJS+BPvqq;{(JknK z{;LD3UX5UmJ<&1KGF3lSIb0%z`b*P=$>PMmcwux;WKS4Bq$fxi!1EQ-1mFP~q-J8h zcLdgBn-B)v!XXgcBHr}5M?Ql|aO!_G@M`c;=t0Ek`Tf|V3p+`BDIVZ}r)aNyuV$-p zyUosYa?L%fQp=EeTs^H{)T*?4tJ&sot=o6j4(z9<>+ai|_Z-hUo?m;(@QU?S=;AkL z-(GpF{*B@t#k(`VTLvH$?=QZ;^8W1mGw&(%sVr`8G1bV_Vk<6uP?ni z_saZBv(HaIJ9BUP_RRJ9Q^mo`j&fb&P@7eHg=%hbae8@NJEW3odX~9U%-Ocd#@QM< z)PFd4C{viiOOjj=$MVl}Be>uIxPbzHzOMi*kkE%k?1c1Nam}CrZJ0(3>K^VHXo6>m zw_qu{?fq=%cEF9GEuh0H!@s)*_rvGR9xw!{3cc*SmT$?{x zI9T3ZgzBrz3cX4-votd^Juxp=$QDGiV1Jg{=bNw8Ua6QW8OdcZw%tJ!iepQ|hX+)tg(^I*e=^-y$~l8-~>rtFziAqsjs-ShcTu zR<~C7?8lC)<{PVb*6wK^svqfJ(7d$pvhtS;ug<={@ay?EX5O5C3+nv##M|R<&%QnX z_S9QrZ%)23{_Dxt<*yF^QvULlm*!rWel+oL^xpWLsT<>0uN;r>O>AB9%-HA5Q~E2a zD@zlzqZ6aU6a5q7DgF$54(LBuf2C@=bhL0HXDCCSB1z&W@M4h_NC^Gk9Vi3`z@c`N zna}_nLKnUh7*LOG#x`IoFeu~^iMR1L30H|{q%-m{<(RhPw;OO8bT#DI%K>McJ#qcg zR_a!!GtX1xF85SB8Z51Aokq^8KqXQ3>qm@}Du6((GU)YYlTG7RZyI;k4mGFRYx^CNKJohW>yxj^UmJUM_*bL99DaG| z7t$9;{%7pb$iu07W6zA=lwTV=oj9D>o!*>ukJ?7e!}?LxmHsiwlwguG z(>c>R-Y{7`U4Er#IBzU-FjaPmpU8>hMfXDeIU(F20SrJPjScnhBr(APb6^Q>#?@jg zF;$ofH0mn$6n71Ojc`OfC7t@5kWZ+Gz6bvMfqTK5=QhH(qFgcVc;`je<&AV(wkO|K zY^t!->Kj+vRvBuJMxf}`4QNKxlj>Rh(yCIU)0lKtty8_O+E(rxj#kc;*HyQachvW0 z9?U#D_h{nz(HACP9C)e!7yT~}ygc&q_{(E255Fw`#n4M*FAlySdw$@N=-I&s{r5)i zjNcl*e&uZZXlQ?OdwhMwIc^;=4eMmep{3DT+2p{;=)h?2m|%)C&bZPx+&Er4Tp=$W z$?wk|N|#=iT;#{|V+61P^3JiL|JnW=Up^Jm2MY{4;L{}t96$r698-=)onen~*Kk+y zyM$fjxe??O$|>#Gch7$_Xe(qdbSuJr-WltBm|E_N zP~EE@&^aKKP!7q z`e^8R`SX3x4@2}nKlEt$xuIvJ5Bnf>$upAM;+y@~2G1srCl2I0qnl&y5xaCvW|V1r zS9%u*XJix7VL7BP7mjkrnR77w25Y62gC)HMy+Hq=6d8;^L9F1sAc7sr0sZd+|Hq&) zC@eCQLJ_F1 ztHL?uS>9Ca%yk^_MA$OMEk=#uy%T+PKkBUB-M-6y~{%jvgzK5q2ZDK(cU4UoO^{iL7!=s z*U7;A_7@K2_QCWYx+F{NixWMSKk$E?0G1z<#-z5ATYWmf05y9Buo>Hqtpx!rM;D<{ zN0@y8U=O!}JUxQAL-P1+P`0TXzT5sAfxE#wp{{UOlr_c?Z%H&Ko71eBYq^F(eVM*W zRi|&(&<#u_S0z}HsAOuna%_2Oer|ecNja~bHIA7_ZIjL=&*Y|jXJT*aVEjmSGITa_ zb?o}^jiDRTo1&YNTm82NZ%S`UZ*<@2zTSPc_e^pkKH?vA@Ad46H>I8d=a5ZmmKufH z9;IwaIyX4gJJutY$VMd-f-&we^9p^cd8}@@YPf8;a4c7rIgmD(EK3}S?~Cb!{f`U& zzdNwopXJM(g2JC>%m{v?ZC_o7swSn2i?qGLtF8m&T8z9*5*&}aL zoHV-5NPU^&01iAma`&Q6fg8m4K0k0 zPhOcBTbNoNQp*OPN;t? zrWsR@u0$83QR|pZj2r91ZsB$TfF0r%X~$=a?4&w;oqqNJN09lPHOvyJKW~gRT`(oB zUS3IG$y)J3psiY|(=@B;TE+@n$)6Klk&X>a4iAqHP7TftERL;=sjuk9j1%TDOP{^Z z+3Oar%Qj?N(rww!$nNlN-`?O}-=1`jzsuk4+F@-ow%Ru6>r6Mx$+L4TUFJ4phmNi0 zt?(8_bD}B!c<*rEfKVzCN%@0p8Do?_+B{J=TQyxaRWzD6ku{t?e0eZQdSL)DzmdE! zk@o{It{>O8gUTSc`Ov`tw*dW_V1HV%bW9tj22+hLM^~Xy9?TZTg>?e}>$pAq7D(Yb zX_vfCSqBK#{au01VB0xExFK>adNpqKf;MS6MVqe9*5(B%T^`k9!sxHU>7?@t{%6{GveuAm#z1&^VT^Y zo`>ybySkk1cDjvW;h0&g96eLZQgtk|7g=-MY4!wrR5&D*NhBg6zq_ZauT$PO*d(u; ztePwvE}G68%N|UZr3@wwUKoh$0rM*e7oOvR`gi(w_%dMsZzVU9+K7#WHctX}b_?qP9oQr60R%ff8)O^BL38_g{M~_$V0)-Fd@X7jk4vu zex6h)67ajZY?i1))+%k3*7jG9m5mpT%-oYGz6z<_RaoZq;dqiX!Y>+po9+(D> zfVCh?$Xci=Tpy*2F~;jIXfLT!R?`hxmOO3Ya;dsxO0%?PK&!+jG2 zBXa3z-$ehEY(_pmuqaauf>H|9BCSx@qZb?GhJK^O$TM<{Tm#?0({ptKZI_y%Vyv(f z9gAJ_9W$&c{seQhOHLo?=;Mf)!Y&?{-O1p#3tFTNf*MI>Klr}kypgPt^obPtCD{dO zyf8)@)f+B^;l~ML1Tdld+o>(&CZAT2zc!G+c3cb0|0YZm=zkNs4qX9JghFkj_kjZl z04LsQ;DLd-P248!`fO4hRFAL6&lzA1GKZK#tr6BJeT+KZaKQjtu$FGhGUw_FRV7Om z%hjrSZIil9)3MB&;f(X-JtLB_zR`i9p@9+Un0#_zN{;qw7OhBE`jtIO zF$51T(TZRNgl>tw*bY_a%uuncP(my7f zkX-4V;!lfa#IxeL-g)u70In{Gp1JN>-VA@bd#d9~>jZaMr9I^9uO6;>_W+zRRPK{$Si_OmCDpf*0Bgt4~)zmw%VH``gIP zQ2l!7ein>B4z>f^g+UBZExHyO0I7dI(gH~A!7SLsY-8QtX9-#eR-%h!_i>Xw6dQHb zSL3e>SPEJWSq{}iXrfdx$~ZkhU`#foYBCJjru>znrP7s(mFl^=#YRQT0)3%#k~Pkm z9A~QU|?uaE*lY#^2R_bCm<%pliW$pBzuBC!5J5h2}Zj|y5yZhtO1^k zDQ%Z9MC}3&kIP}OIy+nF?Je9!ejTftS-~u26?NzHvLzX^RB>`&lI+4rTz||kq~8ie$b0{DGc9$&g^EZ%77z z;KDo65PPs|fY&dSv81eCmRQik6Eb)VZX3Ie*$tI%ZS8Dg)N^VWm7Qf>#q0uBE-#Cp zE==u7mR^)3^v4ZF%cBM&`a^k;zA!-OFZ5;7x?%M}KK^bbwi8Zh9~TjXs+9Rmz0YY<@QlroO zRlIU$3A2!$-<8A7Gw!2B>k z{J{HTSr{fTpcMdUKokG~DD`RpY6l?LK)cay%sK{mfOTLUI5Xafw-SuRRnn@Dk*uaD zXiL6IV8KGr5;VdJ_yYBLeXKbiaR#bnMXDlwDQh`bk*_aOmn@b~R?gPQ>joS8o29LT zAmfrwAyeEn!0zGna{1l8JRV=n@8JstVgaAe<-?7~?&fm4Ib61|i@{`ec6PMWn_F9( znGIca^qSVn*7CNJj-sx7PHuNrcRD+jo!p%yydaJj#mdePMh=A!LHfNxQg8J|Gy#PT z&acyJeH*;quNB({>fa9a?}X$VKmqDdCI26Q4b&cL1HBCp?4s8J0vABAhBf1icst%i z&=NHyy%z#KP3x=kUk+Fa(uQb4bzz1`<9Tz8B~G89y|{d7;qpS-N`@j^ldH^MESe~p zC>yUFsUD~m*Gn3QntEFVZDP8pUD_#SNSQ*WfW>F=yZBu_UEN(`mWah+a+v}Kzq6~o zi_UCoZ|Q96Xl$x)t)*8pDqG81OXx){`AxYU*^CTU8uK#e68mC%LU)`fMsgnc)=v!S zi-Y5^avv z#49f>CCw!-q%5T^XDnwg=T7BM7mgHFMbg^SCTJ7U zyXg!F7M)2Kv~{(0wenj!o0(1Bjf@6*T}y3SbysC)d0S~maYrFNzd5%pyFP=SMo(!= zrYEs4G{rZ>wng)zgc03fdU?U!L0oYCB3~g*MCl^4VDIaM(Fe81*Wnrg0Du6hUyE)A z_XiDtYC_cl02Qcm2-FrZU>9|SK1A;U3q0sGj1?eoW7lyWSdfq>Oql=zqt6O?g`%XY ze3$*y0j5B6urI`>BI)MkPamoZm;(XF9fH0f3kTI1tmou3+S|Bg#E9oyCESFS> ztHjl^8cD6VPFOE$;5G0Y7>%8c^hP!$%x>sz5Z3eR7`3dLu4-mgTLr6}S=v#;F6t~` z{|x0}kP@X1`CZW4pY zBrxzT_!?Y2t`6ITg~^X;0qR$J$6pns-he__(15B!p>|MbsAITxfB^>pfYU36$aVlq zfV1FNfdv|(inQdjNY+qPR6T9kPw#ICv<7)X%;y|oYY}Tv`t$QK%W*3S%ZW=#OUZL7 z^Jxp|fdWxsU$L~Lw^UpvD<7y3R`M(PRs5>%s;=seYIYS1-tj8ow-xMi zdRYe~&O)kQ(4N;0q;Jh^O>a!AO{q<8NUBV%PH2v6h@qcvj;e`h3~N8v8PXBd0iK`f z$EGo;-4q6pzn#Q^^yzrygO7S#4Ym=BEWWLv{>?D{D$tdXbOWjpIM4_{)T2=J zs3X)q>KHh%{d6dTCqR_Ih%@5Ucnw}bP!g3Sg^vm#Fi^ELC5%N=fD3rA7GeoChpQqM zqh_O*V-;~r2@8oUNwb$`FVCe;rO7j-nLXJ(Ig(sazNkP_C@tzQ5)}(e1SOmjZYj5v zQ_3!7mvohMmT-%iMVumfVOv2*J~Nk|!^&>Y>;Tf&r#4@1zEqu5mspcf9#s7fKK52yPB+3ZVP9`*za0sB8+8+~Kvo?Su}fK0^L#Y%R7P$WMpl8@=LJ1D#(F zS0mKF7NQA-Izin45Ke#vdnkkhh%Itq>=0{MD^`co;8gf!yqcgU>PTvm8U#^GU87li zZGIMibD$+i7ot6<4qFIUM{2+yARs6b7B0+PoJkr<9=be`I*=wx@5zv5^=1pR`*VhJ z`FZ@j?tE50BcGGchC2+le0ClukCV&H>Bw%%Zp~`VXie`-Ye}uWT$Nm&RC}@JLPbJZ zTzPC+bahmHWOaB=Slzj*kousez()UizdGMWS}Ux)i0Nr2wR*qyL`GjDXn(DD@u~IF zzaDY_Q2jFK`)V%?_3%?Y0>BwuSK)pL?Xc_Rz&aXv#<&Gz!5XnDtP-cetMGb)foLKc zK@Ch~E5%MV)9k)${&vsXTU6#?C$l_cQd?7+FE?GPNvgb9l31Bg z5}y~F6H^qOA5{=p9$p?+c&;R*GPpLdF`&u6(YKaXPpzU1cA18U8;-tE0Yrun5e@lQdP!+5RnLoD@wh}%UF&{N?{z~+fn1MKHd~bs6 z!a$<*qBu!(Nt7&27G372uv5BH*r|-vmQ-dcJ+&jXJ*6|HIi>D$Lvnp`>!tdnri*Qf z4Hs%4^@6yHn9}H+^Z8Mk5qaSSVWsCPL&}270}BI+{LB5Ce4A*E)Ot!axf)g;#Prk> z5Z$lCHDMW$ejT{}dJIDSI!GVs{4z+t)(b)*q>m_pw*{_)0wDEAcyNN+25)FXThSJ@ z4z0#$F-D9Ls{igJg_QRsWzI^*8w1C0+d0E!Al{F=Vn4D5D+4# zqlV8*qopyuv9dT(JU^lPf+VpApb%c{PU1i?lNv8IU1~{cPHIYOOKQH@bg?qAEV1%J zbwXo&V_Z{gbxeMA9;99vSqRBzh31{h4#^9y45|z$_0RJw^ev^;!nRijwXY}Dl3IZJ z4bb@w;QAW9!qtPlkoe#+$0~4-!Awb5W12~{Z zYtSmR60?F)V^jcv9w0E{jot_EIf!nO)5lJBk)5zIJ85QLou3XCriH+jperGh=O#nv z!p6ggB4m+$QKIwW^P*@$3_n&HD~#)j?}=x{a}wwYoe6ab)d>v=RdBD0ua7T}uZ$~- zEs8CTsfw;RUjeD-MCM22gy)Clho+y)3`q^j49p3r@-Kzt3uqH`%^8~#@copsk z@bfmxi8cTP$cZD!fg4JU9;?A>aeABuOtP6^CAf)Bk_A9;kS(AGt5gdtOhy1Te zDrhYDO32u`p-@?vI7|{Qj_8i;jub=*&-2a;qB+sbXhuwH3_YePrZ%P~rV{RD(Phz< z(Iw|A&zD7&MV3WYMwEqThh>Fb4oy9m7LpO15tJR65|H7a?^ohmOv|PgQ41+0|x4ZMK^ze%tF6U-zxtVhNM91$x!z^{{sI)zZ~BzS`M|8QcNi$m-&>FN=QY-5<(%N z9AAnr!4>05u?5&NYz6XhH>M8AUkVTuqKjeU%L4$)q24v97H{?I;9V(1C87Zc09#P^ z6KI5|?+;-?av*1of)bbj05iBl1MmR!00hyFbK)F057^{2@Q5x@1iN=KfK{d_s4KKZ zUxn|q->m;cfGnUVP!c2zk_K}_m?0hK=;xY4J3~7{JHy(;>cgtTs=QGgRuWbUG%tX( zbI%o=%L^$A$qLR1$^goz1|W6MMM&?PPb;S8QSyNJ6_9)>sf1Vt>F44L@Wr@%TsAHb zn~N>PaqCBM7dliRdLCV<>c|pZNxq*d&1p!$Bss5Mz zll_u?(|l8C>C^&h2_>JLN6zypCRLNlh!sSrJfQ$zgwMwnK=L_|em*82lZPpV+LxmX zfc%Ks=Yif=0079|SNC59DEICG6<$fKK^U-&@_0FL{9gs|AV;hM2b=(a8D&7P0TZmq zAsoO0v-cDV3qW86J+Q&jYy(BGdO=W=Q~<&Zd5Us{GE0?H2Wf-8y}klJo*&1b=ilMq z8PE{W7*HKp9#|Dv8dwro0k0*2MS(eiS%JAg^z49~fCB#<|1AGhzf8YNzR8gKCF(_L z5+#$8OD-js`jmNTUrwwhR1gXwd8GEaxGZcsHUpCl$!BA-(K(QM3CLe5B#Lx@A*5Ul z?-A8+@cMtG0cyP?unGPGDX&A)I{?FxSN?XO0k+_7gC?**=)I>-n$dQEzzjUlfvNotH_AKGQz)6w9))}m zTJ6;VWD-<7WxyUJe*o7JyxWBOZy|HQd*bLS%JB5;VYCBDADEy4K~!TjUU#6u8h{5D z@8YZjueeN@BTf?+NmHb8pFy8~A2GR`ETo7jLJE({q0*_1v|3s|tzyLnrs@DQP6+lD|*S+=M@oE4P$T_6Q;mbDU z_-!u>ENJ9l9u0u72ATjy8H=z%hg0HaapU-D{49QsFiGeo^bk2j9+3|)a7f)Go)6on z#Roh)Tvg;+atXPNTm<)gh(e!YpB$eIpFHGF${?kX(nzVq%fuvN93h^NNVts8z{7>h zfaEV=ld$pFL~IHqo&%8uX(QB6f_oAw8Pd;y)YBnyQCV_ zMsd@)5xg8P#`EwZ0)xOO2nj-BH?f1rBsLKnNlm0WQa!1XR7T1p6_auyir~tF$RZX( zq$5GdARtx0gipXn<74shxJ$S=NIni53(3b}VleTTM4){J^m{To5w0{yKMj?NN&yH` zfB{*+fIJ8UfNXENMZkkvuL2vZ#V<9y5a-#SUWS*b&?yZUEPZ6XQ8}7G8iC;=2jmgmwaK zYOt>)_}>k%#JdO~R;bGB2pfje-eaO8z!8xmjl${}+2x)tQm01aV4DZC)40fH6u5NjI%;~4n7y35BCzdpwn@w z(C2YT>QM0u-qa%@Y2=E+#9<=QQRoPCBtUQp>3c{#4FE_3@+1A93$F+Rav}X(sB@`z z>Q}&PnK$uLuOdACNCX&g8&u#X0B{x3M!4{_4G=$o%!8+65jlt4>6JvI_i#?+d^!zE zgGP>Mn+Fh(YYshu8N*CqhT%Sn8N&8qrPyAq0L#QOamd%w?YKrlG?hfO@ literal 15427 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 diff --git a/examples/img/smokeparticle_2.png b/examples/img/smokeparticle_2.png new file mode 100644 index 0000000000000000000000000000000000000000..4688a2231c0841b228fe086177a74c81488130d6 GIT binary patch literal 29640 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%0D&^%KQ=?An= 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 DDYIpI delta 7873 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 diff --git a/examples/img/sprite-3x3.jpg b/examples/img/sprite-3x3.jpg index ec23489d5f45d85a79e863366462b30e16a551e4..c71c9c9fef47b38434a8a8873508a717a92e0a7c 100644 GIT binary patch literal 63863 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 Mf0Gp({^!{L0kPJy+yDRo literal 39125 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∋*)iyNiq$(-=W9%p#+WTjTJe7*|-9uwYv2 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 Dfr1=2 diff --git a/examples/img/sprite-4x1.jpg b/examples/img/sprite-4x1.jpg index c30b196b8f0eedcd00585870056c177eb4bff3a5..cce5954d9d150682f7fdcec7a125047a346c1e19 100644 GIT binary patch literal 22438 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 delta 8940 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 RAS9({hAe7JH*&h3{twx-R}ugK diff --git a/examples/img/sprite-explosion.png b/examples/img/sprite-explosion.png index 8533509f7b06a7d5926f886a9ef5391e1ca41b87..7c7e1be1c2d1b7b79af63320bb9a6b6320597bb7 100644 GIT binary patch delta 35 qcmeBKF4D7HWP&ccm>P>sL(h#ylU5VPRuiUH6XsSEmaQhN5yAk|Hwv!+ delta 35 qcmeBKF4D7HWP&ccsJaOwi*Zh)NvjECs|i!933ICn%T^QC2w?!Y1PNmR diff --git a/examples/img/sprite-explosion2.png b/examples/img/sprite-explosion2.png index ea16cae52ca6835e897b204f865fb43c0fd133d2..6e98d8d3b7f8b79207a40a3b810385e77635952e 100644 GIT binary patch literal 429274 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

`%aZqNA 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%0DDhcWeULxW$a?*(FF1_IeMpZR0boDvAIOb6aA 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%0D;wmA7{Wl-IX~l>c54ke{7lm!6sG5T2Rg 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%0A7TPM+N_0x+(xq+H9Umy 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ఝV)I2Zv!F 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


w5Gmu`c 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 literal 190868 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


-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

AGv2;} z+=OZ6;&?8KHts)Yh{VTS61HI#GZXH}@X&Om$h7R{%nDJ+heI}_=12$e(zLA3`Uy{h zIy`{_JxZ&cokb_T!5go3{>`lRU08R3k6R1ma{oV~l?mq4szTO$_n&bx?En|oV2M7! zpf0J^3RAU-3>ds2CW04fk-AJs3LI$)p6ei2CjjM=4*8Q1Z;b4(^mPwykyY;GopEvW zDF=XfCZ+~LEDJ{UAC84(blH>M@Li9Uru8kXBVABg>l3K_J(e)_c&R$ zP7SW-kJC^WgwsHCu5re4O8Dt)lwEYsA2`^J{JGh(y8@3-<3I!JGiSzMh(SU6$E8=j z-*gjr_1Hq3GeY)@tl?9CA@=@3(bi2g2D-Kg30N5sAL{U&#p4#4Q%DV^8bo!CI?LI&M`^#K2| z&@RAhsV%SrCs-5u536G;N6ikgz85E8EQRITkx@va+xTDp)cG52W-hFA@?!nIRs%S> z3Cf#q?l3(5to|q_YpYLwKa0*O!gA$>Apg0`+*f7VyC{w4&PMa}>##f??Z{s!sa|pl zB5NYjXTBG2|r z4}yAw#pLNj#;z`O>%#OuT)KrFlq!5lYMjs*^G1^0(P}hbh zz86~sV$qx$@=aqK9m%Ift=;u_H`1*ILe{wnhP>Lo(X6XN*3<=PGugDqI2q1!um9A9 zs@2}__~=|otB&#|@;t#QdMlclUTlBLIKSsfJ>wwovx@9jEVo?jSgXPd*pc_t%FSLG z^LSpY6bTyPDUW3bbN0{nXXwcV}kvlj+MwGWpqw(5*y4Nz#)a|40&voWO(AV z$SLL39Liu3{@nKG5@S=%K!(W+Sg<$GSvDaV#J@;6X;q*I_`UQGWH$@B;5*!P2w<<7 z@Io3dmiIDoKg~uGFzV#;^YG=@v9#KsTG;!=Cgp1$siOqR8s|8`3HEl3JeK!l8i><~ zTeiR+X`orRQSMBzZPSLO%zf1YVK{-&Rh-|v@lqvlB)@`AmVs18OXRa%R)UUZ8*Q&q zJ=C0_H&${u5$-`as^d`Kejs89s-)Cq6CDT^A%Vy2IV=sofl(#|&T(~abh zPpV@7!Na#mR96r902v|kwc3g;NJxW93C)UObP9L@Q!je(fE4oH={A9Z+lIKC;;<@~ zfG`0nLy<9U^#6pA#mFXA|N8w`(6W%^fyk>Xs*`!`E13;GPjCv`CmGxGGciUEyjPgc zt5US~xaf!UdjKSGzMKA7p(y2cZB20hK_`cjvH4gf3gDyCH`Xo655q=#A;YmgFDi|@ z%gXC&w=P0Qh{?K_pNtmcZeJ`_E@@@%!ajh@K)YZKUg7&DZ1Q8Cf$f{$h*!g7EDwDZ z0S$Kixtyh4m%>B2q&saq775r%IH3jdu?&Czo(Is`smYusRWmbDz}rgqJg09Z^#E5) zN+v|d&CL@6w0X^6OfOz9>g3rXVU4R7o!Quo&kO|3Kw`h@O#@M`V~ zg~}{C!avcnZ>5IQe`sGmIC@L9c12@L`e#GF#5@;zJ=l#QgmMJ@+ zFMShLn$VdUP%EcH&fi5zL$xB)(54t+r-ML$P_Gwv#C#B<11GtysPQrge`KPGledN* zfjAskd$)G313x@a_3G{mph&BtYOCa!+yk4%4X?}N@@x!j{J{5LecIIw#35$tx!n+a|iAA44p&s(iuCh=u-8+M`Wa

J6$!5sQY7MtUkVnX`j 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
kb|?#XHSs^9$Mx|4(vTRye&HY!D+1(}uS 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⁢=PI*050<_?XT?>d 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

Dvrao_n#l15k@rFqc?wA^m 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 z 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 { + loadedTextures[url] = textureLoader.load( + url, + checkAllLoaded, + (xhr) => console.log(`${url}: ${(xhr.loaded / xhr.total) * 100}% loaded`), + (error) => { + hasError = true; + console.error(`Error loading texture ${url}:`, error); + } + ); + }); + } catch (error) { + hasError = true; + console.error("Texture loading failed:", error); + } +}; + +/* +let safeLoad = function (textureUrlArray, callback) { + const textureLoader = new THREE.TextureLoader(); + let loadedCount = 0; //textureUrlArray.length; + let loadedTextures = {}; + + function checkAllLoaded() { + loadedCount++; + if (loadedCount === textureUrlArray.length) { + callback(loadedTextures); + } + } + + try { + textureUrlArray.forEach((url) => { + loadedTextures[url] = textureLoader.load( + url, + checkAllLoaded, + (xhr) => console.log(`Texture 1: ${(xhr.loaded / xhr.total) * 100}% loaded`), + (error) => console.error("Error loading texture 1:", error) + ); + }); + } catch (error) { + console.error("Texture loading failed:", error); + } +}; +*/ diff --git a/examples/js/three_r115/three.min.js b/examples/js/three_r115/three.min.js new file mode 100644 index 0000000..e339408 --- /dev/null +++ b/examples/js/three_r115/three.min.js @@ -0,0 +1,1037 @@ +// threejs.org/license +(function(k,Ea){"object"===typeof exports&&"undefined"!==typeof module?Ea(exports):"function"===typeof define&&define.amd?define(["exports"],Ea):(k=k||self,Ea(k.THREE={}))})(this,function(k){function Ea(){}function t(a,b){this.x=a||0;this.y=b||0}function wa(){this.elements=[1,0,0,0,1,0,0,0,1];0h)return!1}return!0}function pb(a,b){this.center=void 0!==a?a:new n;this.radius=void 0!==b?b:0}function Vb(a,b){this.origin=void 0!==a?a:new n;this.direction=void 0!==b?b:new n(0,0,-1)}function Ta(a,b){this.normal=void 0!==a?a:new n(1, +0,0);this.constant=void 0!==b?b:0}function oa(a,b,c){this.a=void 0!==a?a:new n;this.b=void 0!==b?b:new n;this.c=void 0!==c?c:new n}function A(a,b,c){return void 0===b&&void 0===c?this.set(a):this.setRGB(a,b,c)}function ag(a,b,c){0>c&&(c+=1);1c?b:c<2/3?a+6*(b-a)*(2/3-c):a}function bg(a){return.04045>a?.0773993808*a:Math.pow(.9478672986*a+.0521327014,2.4)}function cg(a){return.0031308>a?12.92*a:1.055*Math.pow(a,.41666)-.055}function Bc(a,b,c,d,e,f){this.a=a;this.b= +b;this.c=c;this.normal=d&&d.isVector3?d:new n;this.vertexNormals=Array.isArray(d)?d:[];this.color=e&&e.isColor?e:new A;this.vertexColors=Array.isArray(e)?e:[];this.materialIndex=void 0!==f?f:0}function K(){Object.defineProperty(this,"id",{value:rj++});this.uuid=L.generateUUID();this.name="";this.type="Material";this.fog=!0;this.blending=1;this.side=0;this.vertexColors=this.flatShading=!1;this.opacity=1;this.transparent=!1;this.blendSrc=204;this.blendDst=205;this.blendEquation=100;this.blendEquationAlpha= +this.blendDstAlpha=this.blendSrcAlpha=null;this.depthFunc=3;this.depthWrite=this.depthTest=!0;this.stencilWriteMask=255;this.stencilFunc=519;this.stencilRef=0;this.stencilFuncMask=255;this.stencilZPass=this.stencilZFail=this.stencilFail=7680;this.stencilWrite=!1;this.clippingPlanes=null;this.clipShadows=this.clipIntersection=!1;this.shadowSide=null;this.colorWrite=!0;this.precision=null;this.polygonOffset=!1;this.polygonOffsetUnits=this.polygonOffsetFactor=0;this.dithering=!1;this.alphaTest=0;this.premultipliedAlpha= +!1;this.toneMapped=this.visible=!0;this.userData={};this.version=0}function Oa(a){K.call(this);this.type="MeshBasicMaterial";this.color=new A(16777215);this.lightMap=this.map=null;this.lightMapIntensity=1;this.aoMap=null;this.aoMapIntensity=1;this.envMap=this.alphaMap=this.specularMap=null;this.combine=0;this.reflectivity=1;this.refractionRatio=.98;this.wireframe=!1;this.wireframeLinewidth=1;this.wireframeLinejoin=this.wireframeLinecap="round";this.morphTargets=this.skinning=!1;this.setValues(a)} +function M(a,b,c){if(Array.isArray(a))throw new TypeError("THREE.BufferAttribute: array should be a Typed Array.");this.name="";this.array=a;this.itemSize=b;this.count=void 0!==a?a.length/b:0;this.normalized=!0===c;this.usage=35044;this.updateRange={offset:0,count:-1};this.version=0}function Bd(a,b,c){M.call(this,new Int8Array(a),b,c)}function Cd(a,b,c){M.call(this,new Uint8Array(a),b,c)}function Dd(a,b,c){M.call(this,new Uint8ClampedArray(a),b,c)}function Ed(a,b,c){M.call(this,new Int16Array(a), +b,c)}function Wb(a,b,c){M.call(this,new Uint16Array(a),b,c)}function Fd(a,b,c){M.call(this,new Int32Array(a),b,c)}function Xb(a,b,c){M.call(this,new Uint32Array(a),b,c)}function y(a,b,c){M.call(this,new Float32Array(a),b,c)}function Gd(a,b,c){M.call(this,new Float64Array(a),b,c)}function xh(){this.vertices=[];this.normals=[];this.colors=[];this.uvs=[];this.uvs2=[];this.groups=[];this.morphTargets={};this.skinWeights=[];this.skinIndices=[];this.boundingSphere=this.boundingBox=null;this.groupsNeedUpdate= +this.uvsNeedUpdate=this.colorsNeedUpdate=this.normalsNeedUpdate=this.verticesNeedUpdate=!1}function yh(a){if(0===a.length)return-Infinity;for(var b=a[0],c=1,d=a.length;cb&&(b=a[c]);return b}function C(){Object.defineProperty(this,"id",{value:sj+=2});this.uuid=L.generateUUID();this.name="";this.type="BufferGeometry";this.index=null;this.attributes={};this.morphAttributes={};this.morphTargetsRelative=!1;this.groups=[];this.boundingSphere=this.boundingBox=null;this.drawRange={start:0,count:Infinity}; +this.userData={}}function S(a,b){F.call(this);this.type="Mesh";this.geometry=void 0!==a?a:new C;this.material=void 0!==b?b:new Oa;this.updateMorphTargets()}function zh(a,b,c,d,e,f,g,h){if(null===(1===b.side?d.intersectTriangle(g,f,e,!0,h):d.intersectTriangle(e,f,g,2!==b.side,h)))return null;Ie.copy(h);Ie.applyMatrix4(a.matrixWorld);b=c.ray.origin.distanceTo(Ie);return bc.far?null:{distance:b,point:Ie.clone(),object:a}}function Je(a,b,c,d,e,f,g,h,l,m,u,p){Yb.fromBufferAttribute(e,m);Zb.fromBufferAttribute(e, +u);$b.fromBufferAttribute(e,p);e=a.morphTargetInfluences;if(b.morphTargets&&f&&e){Ke.set(0,0,0);Le.set(0,0,0);Me.set(0,0,0);for(var x=0,r=f.length;xg;g++)a.setRenderTarget(f, +g),a.clear(b,c,d);a.setRenderTarget(e)}}function Db(a,b,c){Number.isInteger(b)&&(console.warn("THREE.WebGLCubeRenderTarget: constructor signature is now WebGLCubeRenderTarget( size, options )"),b=c);Ha.call(this,a,a,b)}function ac(a,b,c,d,e,f,g,h,l,m,u,p){V.call(this,null,f,g,h,l,m,d,e,u,p);this.image={data:a||null,width:b||1,height:c||1};this.magFilter=void 0!==l?l:1003;this.minFilter=void 0!==m?m:1003;this.flipY=this.generateMipmaps=!1;this.unpackAlignment=1;this.needsUpdate=!0}function Hc(a,b, +c,d,e,f){this.planes=[void 0!==a?a:new Ta,void 0!==b?b:new Ta,void 0!==c?c:new Ta,void 0!==d?d:new Ta,void 0!==e?e:new Ta,void 0!==f?f:new Ta]}function Ah(){function a(e,f){!1!==c&&(d(e,f),b.requestAnimationFrame(a))}var b=null,c=!1,d=null;return{start:function(){!0!==c&&null!==d&&(b.requestAnimationFrame(a),c=!0)},stop:function(){c=!1},setAnimationLoop:function(a){d=a},setContext:function(a){b=a}}}function uj(a,b){function c(b,c){var d=b.array,e=b.usage,f=a.createBuffer();a.bindBuffer(c,f);a.bufferData(c, +d,e);b.onUploadCallback();c=5126;d instanceof Float32Array?c=5126:d instanceof Float64Array?console.warn("THREE.WebGLAttributes: Unsupported data buffer format: Float64Array."):d instanceof Uint16Array?c=5123:d instanceof Int16Array?c=5122:d instanceof Uint32Array?c=5125:d instanceof Int32Array?c=5124:d instanceof Int8Array?c=5120:d instanceof Uint8Array&&(c=5121);return{buffer:f,type:c,bytesPerElement:d.BYTES_PER_ELEMENT,version:b.version}}var d=b.isWebGL2,e=new WeakMap;return{get:function(a){a.isInterleavedBufferAttribute&& +(a=a.data);return e.get(a)},remove:function(b){b.isInterleavedBufferAttribute&&(b=b.data);var c=e.get(b);c&&(a.deleteBuffer(c.buffer),e.delete(b))},update:function(b,g){b.isInterleavedBufferAttribute&&(b=b.data);var f=e.get(b);if(void 0===f)e.set(b,c(b,g));else if(f.versionm;m++){if(p=d[m])if(l=p[0],p=p[1]){u&&e.setAttribute("morphTarget"+m,u[l]);f&&e.setAttribute("morphNormal"+m,f[l]);c[m]=p;h+=p;continue}c[m]=0}e=e.morphTargetsRelative?1: +1-h;g.getUniforms().setValue(a,"morphTargetBaseInfluence",e);g.getUniforms().setValue(a,"morphTargetInfluences",c)}}}function Fj(a,b,c,d){var e=new WeakMap;return{update:function(a){var f=d.render.frame,h=a.geometry,l=b.get(a,h);e.get(l)!==f&&(h.isGeometry&&l.updateFromObject(a),b.update(l),e.set(l,f));a.isInstancedMesh&&c.update(a.instanceMatrix,34962);return l},dispose:function(){e=new WeakMap}}}function qb(a,b,c,d,e,f,g,h,l,m){a=void 0!==a?a:[];V.call(this,a,void 0!==b?b:301,c,d,e,f,void 0!==g? +g:1022,h,l,m);this.flipY=!1}function Ic(a,b,c,d){V.call(this,null);this.image={data:a||null,width:b||1,height:c||1,depth:d||1};this.minFilter=this.magFilter=1003;this.wrapR=1001;this.flipY=this.generateMipmaps=!1;this.needsUpdate=!0}function Jc(a,b,c,d){V.call(this,null);this.image={data:a||null,width:b||1,height:c||1,depth:d||1};this.minFilter=this.magFilter=1003;this.wrapR=1001;this.flipY=this.generateMipmaps=!1;this.needsUpdate=!0}function Kc(a,b,c){var d=a[0];if(0>=d||0");return a.replace(ig,hg)}function Qh(a,b,c,d){console.warn("WebGLProgram: #pragma unroll_loop shader syntax is deprecated. Please use #pragma unroll_loop_start syntax instead.");return jg(a,b,c,d)}function jg(a,b,c,d){a="";for(b=parseInt(b);bd;d++)c.probe.push(new n);var e=new n,f=new P,g=new P;return{setup:function(d,l,m){for(var h=0,p=0,k=0,r=0;9>r;r++)c.probe[r].set(0,0,0);var q=l=0,v=0,n=0,w=0,z=0,ha=0,U=0;m=m.matrixWorldInverse;d.sort(Ek);r=0;for(var ca=d.length;rJa;Ja++)c.probe[Ja].addScaledVector(B.sh.coefficients[Ja],ia);else if(B.isDirectionalLight){var H=a.get(B);H.color.copy(B.color).multiplyScalar(B.intensity);H.direction.setFromMatrixPosition(B.matrixWorld);e.setFromMatrixPosition(B.target.matrixWorld);H.direction.sub(e);H.direction.transformDirection(m);B.castShadow&&(ia=B.shadow,t=b.get(B),t.shadowBias=ia.bias,t.shadowRadius=ia.radius,t.shadowMapSize=ia.mapSize, +c.directionalShadow[l]=t,c.directionalShadowMap[l]=Ja,c.directionalShadowMatrix[l]=B.shadow.matrix,z++);c.directional[l]=H;l++}else B.isSpotLight?(H=a.get(B),H.position.setFromMatrixPosition(B.matrixWorld),H.position.applyMatrix4(m),H.color.copy(t).multiplyScalar(ia),H.distance=Ca,H.direction.setFromMatrixPosition(B.matrixWorld),e.setFromMatrixPosition(B.target.matrixWorld),H.direction.sub(e),H.direction.transformDirection(m),H.coneCos=Math.cos(B.angle),H.penumbraCos=Math.cos(B.angle*(1-B.penumbra)), +H.decay=B.decay,B.castShadow&&(ia=B.shadow,t=b.get(B),t.shadowBias=ia.bias,t.shadowRadius=ia.radius,t.shadowMapSize=ia.mapSize,c.spotShadow[v]=t,c.spotShadowMap[v]=Ja,c.spotShadowMatrix[v]=B.shadow.matrix,U++),c.spot[v]=H,v++):B.isRectAreaLight?(H=a.get(B),H.color.copy(t).multiplyScalar(ia),H.position.setFromMatrixPosition(B.matrixWorld),H.position.applyMatrix4(m),g.identity(),f.copy(B.matrixWorld),f.premultiply(m),g.extractRotation(f),H.halfWidth.set(.5*B.width,0,0),H.halfHeight.set(0,.5*B.height, +0),H.halfWidth.applyMatrix4(g),H.halfHeight.applyMatrix4(g),c.rectArea[n]=H,n++):B.isPointLight?(H=a.get(B),H.position.setFromMatrixPosition(B.matrixWorld),H.position.applyMatrix4(m),H.color.copy(B.color).multiplyScalar(B.intensity),H.distance=B.distance,H.decay=B.decay,B.castShadow&&(ia=B.shadow,t=b.get(B),t.shadowBias=ia.bias,t.shadowRadius=ia.radius,t.shadowMapSize=ia.mapSize,t.shadowCameraNear=ia.camera.near,t.shadowCameraFar=ia.camera.far,c.pointShadow[q]=t,c.pointShadowMap[q]=Ja,c.pointShadowMatrix[q]= +B.shadow.matrix,ha++),c.point[q]=H,q++):B.isHemisphereLight&&(H=a.get(B),H.direction.setFromMatrixPosition(B.matrixWorld),H.direction.transformDirection(m),H.direction.normalize(),H.skyColor.copy(B.color).multiplyScalar(ia),H.groundColor.copy(B.groundColor).multiplyScalar(ia),c.hemi[w]=H,w++)}c.ambient[0]=h;c.ambient[1]=p;c.ambient[2]=k;d=c.hash;if(d.directionalLength!==l||d.pointLength!==q||d.spotLength!==v||d.rectAreaLength!==n||d.hemiLength!==w||d.numDirectionalShadows!==z||d.numPointShadows!== +ha||d.numSpotShadows!==U)c.directional.length=l,c.spot.length=v,c.rectArea.length=n,c.point.length=q,c.hemi.length=w,c.directionalShadow.length=z,c.directionalShadowMap.length=z,c.pointShadow.length=ha,c.pointShadowMap.length=ha,c.spotShadow.length=U,c.spotShadowMap.length=U,c.directionalShadowMatrix.length=z,c.pointShadowMatrix.length=ha,c.spotShadowMatrix.length=U,d.directionalLength=l,d.pointLength=q,d.spotLength=v,d.rectAreaLength=n,d.hemiLength=w,d.numDirectionalShadows=z,d.numPointShadows=ha, +d.numSpotShadows=U,c.version=Gk++},state:c}}function Wh(){var a=new Fk,b=[],c=[];return{init:function(){b.length=0;c.length=0},state:{lightsArray:b,shadowsArray:c,lights:a},setupLights:function(d){a.setup(b,c,d)},pushLight:function(a){b.push(a)},pushShadow:function(a){c.push(a)}}}function Hk(){function a(c){c=c.target;c.removeEventListener("dispose",a);b.delete(c)}var b=new WeakMap;return{get:function(c,d){if(!1===b.has(c)){var e=new Wh;b.set(c,new WeakMap);b.get(c).set(d,e);c.addEventListener("dispose", +a)}else!1===b.get(c).has(d)?(e=new Wh,b.get(c).set(d,e)):e=b.get(c).get(d);return e},dispose:function(){b=new WeakMap}}}function Fb(a){K.call(this);this.type="MeshDepthMaterial";this.depthPacking=3200;this.morphTargets=this.skinning=!1;this.displacementMap=this.alphaMap=this.map=null;this.displacementScale=1;this.displacementBias=0;this.wireframe=!1;this.wireframeLinewidth=1;this.fog=!1;this.setValues(a)}function Gb(a){K.call(this);this.type="MeshDistanceMaterial";this.referencePosition=new n;this.nearDistance= +1;this.farDistance=1E3;this.morphTargets=this.skinning=!1;this.displacementMap=this.alphaMap=this.map=null;this.displacementScale=1;this.displacementBias=0;this.fog=!1;this.setValues(a)}function Xh(a,b,c){function d(a,b,c){c=a<<0|b<<1|c<<2;var d=p[c];void 0===d&&(d=new Fb({depthPacking:3201,morphTargets:a,skinning:b}),p[c]=d);return d}function e(a,b,c){c=a<<0|b<<1|c<<2;var d=x[c];void 0===d&&(d=new Gb({morphTargets:a,skinning:b}),x[c]=d);return d}function f(b,c,f,g,h,l){var m=b.geometry,p=d,k=b.customDepthMaterial; +!0===f.isPointLight&&(p=e,k=b.customDistanceMaterial);void 0===k?(k=!1,!0===c.morphTargets&&(!0===m.isBufferGeometry?k=m.morphAttributes&&m.morphAttributes.position&&0\nvoid main() {\n float mean = 0.0;\n float squared_mean = 0.0;\n\tfloat depth = unpackRGBAToDepth( texture2D( shadow_pass, ( gl_FragCoord.xy ) / resolution ) );\n for ( float i = -1.0; i < 1.0 ; i += SAMPLE_RATE) {\n #ifdef HORIZONAL_PASS\n vec2 distribution = unpackRGBATo2Half( texture2D( shadow_pass, ( gl_FragCoord.xy + vec2( i, 0.0 ) * radius ) / resolution ) );\n mean += distribution.x;\n squared_mean += distribution.y * distribution.y + distribution.x * distribution.x;\n #else\n float depth = unpackRGBAToDepth( texture2D( shadow_pass, ( gl_FragCoord.xy + vec2( 0.0, i ) * radius ) / resolution ) );\n mean += depth;\n squared_mean += depth * depth;\n #endif\n }\n mean = mean * HALF_SAMPLE_RATE;\n squared_mean = squared_mean * HALF_SAMPLE_RATE;\n float std_dev = sqrt( squared_mean - mean * mean );\n gl_FragColor = pack2HalfToRGBA( vec2( mean, std_dev ) );\n}"}), +n=v.clone();n.defines.HORIZONAL_PASS=1;var w=new C;w.setAttribute("position",new M(new Float32Array([-1,-1,.5,3,-1,.5,-1,3,.5]),3));var z=new S(w,v),ha=this;this.enabled=!1;this.autoUpdate=!0;this.needsUpdate=!1;this.type=1;this.render=function(d,e,f){if(!1!==ha.enabled&&(!1!==ha.autoUpdate||!1!==ha.needsUpdate)&&0!==d.length){var p=a.getRenderTarget(),u=a.getActiveCubeFace(),x=a.getActiveMipmapLevel(),q=a.state;q.setBlending(0);q.buffers.color.setClear(1,1,1,1);q.buffers.depth.setTest(!0);q.setScissorTest(!1); +for(var r=0,E=d.length;rc||l.y>c)console.warn("THREE.WebGLShadowMap:",w,"has shadow exceeding max texture size, reducing"),l.x>c&&(m.x=Math.floor(c/t.x),l.x=m.x*t.x,B.mapSize.x=m.x),l.y>c&&(m.y=Math.floor(c/t.y),l.y=m.y*t.y,B.mapSize.y=m.y);null!==B.map||B.isPointLightShadow||3!==this.type||(t={minFilter:1006,magFilter:1006, +format:1023},B.map=new Ha(l.x,l.y,t),B.map.texture.name=w.name+".shadowMap",B.mapPass=new Ha(l.x,l.y,t),B.camera.updateProjectionMatrix());null===B.map&&(t={minFilter:1003,magFilter:1003,format:1023},B.map=new Ha(l.x,l.y,t),B.map.texture.name=w.name+".shadowMap",B.camera.updateProjectionMatrix());a.setRenderTarget(B.map);a.clear();t=B.getViewportCount();for(var ca=0;cad||a.height>d)e=d/Math.max(a.width,a.height);if(1>e||!0===b){if("undefined"!==typeof HTMLImageElement&&a instanceof HTMLImageElement||"undefined"!==typeof HTMLCanvasElement&&a instanceof HTMLCanvasElement||"undefined"!==typeof ImageBitmap&&a instanceof ImageBitmap)return d=b?L.floorPowerOfTwo:Math.floor,b=d(e*a.width),e=d(e*a.height),void 0=== +G&&(G=h(b,e)),c=c?h(b,e):G,c.width=b,c.height=e,c.getContext("2d").drawImage(a,0,0,b,e),console.warn("THREE.WebGLRenderer: Texture has been resized from ("+a.width+"x"+a.height+") to ("+b+"x"+e+")."),c;"data"in a&&console.warn("THREE.WebGLRenderer: Image in DataTexture is too big ("+a.width+"x"+a.height+").")}return a}function m(a){return L.isPowerOfTwo(a.width)&&L.isPowerOfTwo(a.height)}function k(a,b){return a.generateMipmaps&&b&&1003!==a.minFilter&&1006!==a.minFilter}function p(b,c,e,f){a.generateMipmap(b); +d.get(c).__maxMipLevel=Math.log(Math.max(e,f))*Math.LOG2E}function x(c,d,e){if(!1===Ca)return d;if(null!==c){if(void 0!==a[c])return a[c];console.warn("THREE.WebGLRenderer: Attempt to use non-existing WebGL internal format '"+c+"'")}c=d;6403===d&&(5126===e&&(c=33326),5131===e&&(c=33325),5121===e&&(c=33321));6407===d&&(5126===e&&(c=34837),5131===e&&(c=34843),5121===e&&(c=32849));6408===d&&(5126===e&&(c=34836),5131===e&&(c=34842),5121===e&&(c=32856));33325!==c&&33326!==c&&34842!==c&&34836!==c||b.get("EXT_color_buffer_float"); +return c}function r(a){return 1003===a||1004===a||1005===a?9728:9729}function q(b){b=b.target;b.removeEventListener("dispose",q);var c=d.get(b);void 0!==c.__webglInit&&(a.deleteTexture(c.__webglTexture),d.remove(b));b.isVideoTexture&&C.delete(b);g.memory.textures--}function v(b){b=b.target;b.removeEventListener("dispose",v);var c=d.get(b),e=d.get(b.texture);if(b){void 0!==e.__webglTexture&&a.deleteTexture(e.__webglTexture);b.depthTexture&&b.depthTexture.dispose();if(b.isWebGLCubeRenderTarget)for(e= +0;6>e;e++)a.deleteFramebuffer(c.__webglFramebuffer[e]),c.__webglDepthbuffer&&a.deleteRenderbuffer(c.__webglDepthbuffer[e]);else a.deleteFramebuffer(c.__webglFramebuffer),c.__webglDepthbuffer&&a.deleteRenderbuffer(c.__webglDepthbuffer),c.__webglMultisampledFramebuffer&&a.deleteFramebuffer(c.__webglMultisampledFramebuffer),c.__webglColorRenderbuffer&&a.deleteRenderbuffer(c.__webglColorRenderbuffer),c.__webglDepthRenderbuffer&&a.deleteRenderbuffer(c.__webglDepthRenderbuffer);d.remove(b.texture);d.remove(b)}g.memory.textures--} +function n(a,b){var e=d.get(a);if(a.isVideoTexture){var f=g.render.frame;C.get(a)!==f&&(C.set(a,f),a.update())}if(0q;q++)u[q]=h||e?e?b.image[q].image:b.image[q]:l(b.image[q],!1,!0,H);var r=u[0],v=m(r)||Ca,n=f.convert(b.format),w=f.convert(b.type),E=x(b.internalFormat,n,w);t(34067,b,v);if(h){for(q=0;6>q;q++){var Z=u[q].mipmaps;for(h=0;hq;q++)if(e)for(c.texImage2D(34069+q,0,E,u[q].width,u[q].height,0,n,w,u[q].data),h=0;h=D&&console.warn("THREE.WebGLTextures: Trying to use "+a+" texture units while this GPU supports only "+D);M+=1;return a};this.resetTextureUnits=function(){M=0};this.setTexture2D= +n;this.setTexture2DArray=function(a,b){var e=d.get(a);0u;u++)e.__webglFramebuffer[u]=a.createFramebuffer();else if(e.__webglFramebuffer=a.createFramebuffer(),u)if(Ca){e.__webglMultisampledFramebuffer= +a.createFramebuffer();e.__webglColorRenderbuffer=a.createRenderbuffer();a.bindRenderbuffer(36161,e.__webglColorRenderbuffer);u=f.convert(b.texture.format);var r=f.convert(b.texture.type);u=x(b.texture.internalFormat,u,r);r=ia(b);a.renderbufferStorageMultisample(36161,r,u,b.width,b.height);a.bindFramebuffer(36160,e.__webglMultisampledFramebuffer);a.framebufferRenderbuffer(36160,36064,36161,e.__webglColorRenderbuffer);a.bindRenderbuffer(36161,null);b.depthBuffer&&(e.__webglDepthRenderbuffer=a.createRenderbuffer(), +y(e.__webglDepthRenderbuffer,b,!0));a.bindFramebuffer(36160,null)}else console.warn("THREE.WebGLRenderer: WebGLMultisampleRenderTarget can only be used with WebGL2.");if(l){c.bindTexture(34067,h.__webglTexture);t(34067,b.texture,q);for(u=0;6>u;u++)B(e.__webglFramebuffer[u],b,36064,34069+u);k(b.texture,q)&&p(34067,b.texture,b.width,b.height);c.bindTexture(34067,null)}else c.bindTexture(3553,h.__webglTexture),t(3553,b.texture,q),B(e.__webglFramebuffer,b,36064,3553),k(b.texture,q)&&p(3553,b.texture, +b.width,b.height),c.bindTexture(3553,null);if(b.depthBuffer){e=d.get(b);h=!0===b.isWebGLCubeRenderTarget;if(b.depthTexture){if(h)throw Error("target.depthTexture not supported in Cube render targets");if(b&&b.isWebGLCubeRenderTarget)throw Error("Depth Texture with cube render targets is not supported");a.bindFramebuffer(36160,e.__webglFramebuffer);if(!b.depthTexture||!b.depthTexture.isDepthTexture)throw Error("renderTarget.depthTexture must be an instance of THREE.DepthTexture");d.get(b.depthTexture).__webglTexture&& +b.depthTexture.image.width===b.width&&b.depthTexture.image.height===b.height||(b.depthTexture.image.width=b.width,b.depthTexture.image.height=b.height,b.depthTexture.needsUpdate=!0);n(b.depthTexture,0);e=d.get(b.depthTexture).__webglTexture;if(1026===b.depthTexture.format)a.framebufferTexture2D(36160,36096,3553,e,0);else if(1027===b.depthTexture.format)a.framebufferTexture2D(36160,33306,3553,e,0);else throw Error("Unknown depthTexture format");}else if(h)for(e.__webglDepthbuffer=[],h=0;6>h;h++)a.bindFramebuffer(36160, +e.__webglFramebuffer[h]),e.__webglDepthbuffer[h]=a.createRenderbuffer(),y(e.__webglDepthbuffer[h],b,!1);else a.bindFramebuffer(36160,e.__webglFramebuffer),e.__webglDepthbuffer=a.createRenderbuffer(),y(e.__webglDepthbuffer,b,!1);a.bindFramebuffer(36160,null)}};this.updateRenderTargetMipmap=function(a){var b=a.texture,e=m(a)||Ca;if(k(b,e)){e=a.isWebGLCubeRenderTarget?34067:3553;var f=d.get(b).__webglTexture;c.bindTexture(e,f);p(e,b,a.width,a.height);c.bindTexture(e,null)}};this.updateMultisampleRenderTarget= +function(b){if(b.isWebGLMultisampleRenderTarget)if(Ca){var c=d.get(b);a.bindFramebuffer(36008,c.__webglMultisampledFramebuffer);a.bindFramebuffer(36009,c.__webglFramebuffer);var e=b.width,f=b.height,g=16384;b.depthBuffer&&(g|=256);b.stencilBuffer&&(g|=1024);a.blitFramebuffer(0,0,e,f,0,0,e,f,g,9728);a.bindFramebuffer(36160,c.__webglMultisampledFramebuffer)}else console.warn("THREE.WebGLRenderer: WebGLMultisampleRenderTarget can only be used with WebGL2.")};this.safeSetTexture2D=function(a,b){a&&a.isWebGLRenderTarget&& +(!1===P&&(console.warn("THREE.WebGLTextures.safeSetTexture2D: don't use render targets as textures. Use their .texture property instead."),P=!0),a=a.texture);n(a,b)};this.safeSetTextureCube=function(a,b){a&&a.isWebGLCubeRenderTarget&&(!1===O&&(console.warn("THREE.WebGLTextures.safeSetTextureCube: don't use cube render targets as textures. Use their .texture property instead."),O=!0),a=a.texture);a&&a.isCubeTexture||Array.isArray(a.image)&&6===a.image.length?w(a,b):z(a,b)}}function Zh(a,b,c){var d= +c.isWebGL2;return{convert:function(a){if(1009===a)return 5121;if(1017===a)return 32819;if(1018===a)return 32820;if(1019===a)return 33635;if(1010===a)return 5120;if(1011===a)return 5122;if(1012===a)return 5123;if(1013===a)return 5124;if(1014===a)return 5125;if(1015===a)return 5126;if(1016===a){if(d)return 5131;var c=b.get("OES_texture_half_float");return null!==c?c.HALF_FLOAT_OES:null}if(1021===a)return 6406;if(1022===a)return 6407;if(1023===a)return 6408;if(1024===a)return 6409;if(1025===a)return 6410; +if(1026===a)return 6402;if(1027===a)return 34041;if(1028===a)return 6403;if(1029===a)return 36244;if(1030===a)return 33319;if(1031===a)return 33320;if(1032===a)return 36248;if(1033===a)return 36249;if(33776===a||33777===a||33778===a||33779===a)if(c=b.get("WEBGL_compressed_texture_s3tc"),null!==c){if(33776===a)return c.COMPRESSED_RGB_S3TC_DXT1_EXT;if(33777===a)return c.COMPRESSED_RGBA_S3TC_DXT1_EXT;if(33778===a)return c.COMPRESSED_RGBA_S3TC_DXT3_EXT;if(33779===a)return c.COMPRESSED_RGBA_S3TC_DXT5_EXT}else return null; +if(35840===a||35841===a||35842===a||35843===a)if(c=b.get("WEBGL_compressed_texture_pvrtc"),null!==c){if(35840===a)return c.COMPRESSED_RGB_PVRTC_4BPPV1_IMG;if(35841===a)return c.COMPRESSED_RGB_PVRTC_2BPPV1_IMG;if(35842===a)return c.COMPRESSED_RGBA_PVRTC_4BPPV1_IMG;if(35843===a)return c.COMPRESSED_RGBA_PVRTC_2BPPV1_IMG}else return null;if(36196===a)return c=b.get("WEBGL_compressed_texture_etc1"),null!==c?c.COMPRESSED_RGB_ETC1_WEBGL:null;if(37492===a||37496===a)if(c=b.get("WEBGL_compressed_texture_etc"), +null!==c){if(37492===a)return c.COMPRESSED_RGB8_ETC2;if(37496===a)return c.COMPRESSED_RGBA8_ETC2_EAC}if(37808===a||37809===a||37810===a||37811===a||37812===a||37813===a||37814===a||37815===a||37816===a||37817===a||37818===a||37819===a||37820===a||37821===a||37840===a||37841===a||37842===a||37843===a||37844===a||37845===a||37846===a||37847===a||37848===a||37849===a||37850===a||37851===a||37852===a||37853===a)return c=b.get("WEBGL_compressed_texture_astc"),null!==c?a:null;if(36492===a)return c=b.get("EXT_texture_compression_bptc"), +null!==c?a:null;if(1020===a){if(d)return 34042;c=b.get("WEBGL_depth_texture");return null!==c?c.UNSIGNED_INT_24_8_WEBGL:null}}}}function Pe(a){aa.call(this);this.cameras=a||[]}function Mc(){F.call(this);this.type="Group"}function $h(a,b){function c(a){var b=q.get(a.inputSource);b&&(b.targetRay&&b.targetRay.dispatchEvent({type:a.type}),b.grip&&b.grip.dispatchEvent({type:a.type}))}function d(){q.forEach(function(a,b){a.targetRay&&(a.targetRay.dispatchEvent({type:"disconnected",data:b}),a.targetRay.visible= +!1);a.grip&&(a.grip.dispatchEvent({type:"disconnected",data:b}),a.grip.visible=!1)});q.clear();a.setFramebuffer(null);a.setRenderTarget(a.getRenderTarget());y.stop();h.isPresenting=!1;h.dispatchEvent({type:"sessionend"})}function e(a){k=a;y.setContext(l);y.start();h.isPresenting=!0;h.dispatchEvent({type:"sessionstart"})}function f(a){for(var b=l.inputSources,c=0;cf.matrixWorld.determinant(),l=x(a,c,e,f);Y.setMaterial(e,h);var m=!1;if(b!==d.id||fa!==l.id||Oe!==(!0===e.wireframe))b=d.id,fa=l.id,Oe=!0===e.wireframe,m=!0;if(e.morphTargets||e.morphNormals)ya.update(f,d,e,l),m=!0;a=d.index;c=d.attributes.position;if(null===a){if(void 0===c||0===c.count)return}else if(0=== +a.count)return;var u=1;!0===e.wireframe&&(a=xa.getWireframeAttribute(d),u=2);h=Aa;if(null!==a){var p=oa.get(a);h=Ba;h.setIndex(p)}if(m){if(!1!==Fa.isWebGL2||!f.isInstancedMesh&&!d.isInstancedBufferGeometry||null!==ra.get("ANGLE_instanced_arrays")){Y.initAttributes();m=d.attributes;l=l.getAttributes();var k=e.defaultAttributeValues;for(ha in l){var q=l[ha];if(0<=q){var r=m[ha];if(void 0!==r){var n=r.normalized,v=r.itemSize,w=oa.get(r);if(void 0!==w){var E=w.buffer,z=w.type;w=w.bytesPerElement;if(r.isInterleavedBufferAttribute){var B= +r.data,t=B.stride;r=r.offset;B&&B.isInstancedInterleavedBuffer?(Y.enableAttributeAndDivisor(q,B.meshPerAttribute),void 0===d.maxInstancedCount&&(d.maxInstancedCount=B.meshPerAttribute*B.count)):Y.enableAttribute(q);I.bindBuffer(34962,E);I.vertexAttribPointer(q,v,z,n,t*w,r*w)}else r.isInstancedBufferAttribute?(Y.enableAttributeAndDivisor(q,r.meshPerAttribute),void 0===d.maxInstancedCount&&(d.maxInstancedCount=r.meshPerAttribute*r.count)):Y.enableAttribute(q),I.bindBuffer(34962,E),I.vertexAttribPointer(q, +v,z,n,0,0)}}else if("instanceMatrix"===ha)w=oa.get(f.instanceMatrix),void 0!==w&&(E=w.buffer,z=w.type,Y.enableAttributeAndDivisor(q+0,1),Y.enableAttributeAndDivisor(q+1,1),Y.enableAttributeAndDivisor(q+2,1),Y.enableAttributeAndDivisor(q+3,1),I.bindBuffer(34962,E),I.vertexAttribPointer(q+0,4,z,!1,64,0),I.vertexAttribPointer(q+1,4,z,!1,64,16),I.vertexAttribPointer(q+2,4,z,!1,64,32),I.vertexAttribPointer(q+3,4,z,!1,64,48));else if(void 0!==k&&(n=k[ha],void 0!==n))switch(n.length){case 2:I.vertexAttrib2fv(q, +n);break;case 3:I.vertexAttrib3fv(q,n);break;case 4:I.vertexAttrib4fv(q,n);break;default:I.vertexAttrib1fv(q,n)}}}Y.disableUnusedAttributes()}null!==a&&I.bindBuffer(34963,p.buffer)}var ha=d.drawRange.start*u;m=null!==g?g.start*u:0;p=Math.max(ha,m);g=Math.max(0,Math.min(null!==a?a.count:c.count,ha+d.drawRange.count*u,m+(null!==g?g.count*u:Infinity))-1-p+1);0!==g&&(f.isMesh?!0===e.wireframe?(Y.setLineWidth(e.wireframeLinewidth*(null===O?Q:1)),h.setMode(1)):h.setMode(4):f.isLine?(e=e.linewidth,void 0=== +e&&(e=1),Y.setLineWidth(e*(null===O?Q:1)),f.isLineSegments?h.setMode(1):f.isLineLoop?h.setMode(2):h.setMode(3)):f.isPoints?h.setMode(0):f.isSprite&&h.setMode(4),f.isInstancedMesh?h.renderInstances(d,p,g,f.count):d.isInstancedBufferGeometry?h.renderInstances(d,p,g,d.maxInstancedCount):h.render(p,g))};this.compile=function(a,b){A=va.get(a,b);A.init();a.traverse(function(a){a.isLight&&(A.pushLight(a),a.castShadow&&A.pushShadow(a))});A.setupLights(b);var c={};a.traverse(function(b){if(b.material)if(Array.isArray(b.material))for(var d= +0;de.far||f.push({distance:a,distanceToRay:Math.sqrt(h),point:c,index:b,face:null,object:g}))}function sg(a,b,c,d,e, +f,g,h,l){V.call(this,a,b,c,d,e,f,g,h,l);this.format=void 0!==g?g:1022;this.minFilter=void 0!==f?f:1006;this.magFilter=void 0!==e?e:1006;this.generateMipmaps=!1}function Qc(a,b,c,d,e,f,g,h,l,m,u,p){V.call(this,null,f,g,h,l,m,d,e,u,p);this.image={width:b,height:c};this.mipmaps=a;this.generateMipmaps=this.flipY=!1}function Sd(a,b,c,d,e,f,g,h,l){V.call(this,a,b,c,d,e,f,g,h,l);this.needsUpdate=!0}function Td(a,b,c,d,e,f,g,h,l,m){m=void 0!==m?m:1026;if(1026!==m&&1027!==m)throw Error("DepthTexture format must be either THREE.DepthFormat or THREE.DepthStencilFormat"); +void 0===c&&1026===m&&(c=1012);void 0===c&&1027===m&&(c=1020);V.call(this,null,d,e,f,g,h,m,c,l);this.image={width:a,height:b};this.magFilter=void 0!==g?g:1003;this.minFilter=void 0!==h?h:1003;this.generateMipmaps=this.flipY=!1}function Rc(a){C.call(this);this.type="WireframeGeometry";var b=[],c,d,e,f=[0,0],g={},h=["a","b","c"];if(a&&a.isGeometry){var l=a.faces;var m=0;for(d=l.length;mc;c++){var p=u[h[c]];var k=u[h[(c+1)%3]];f[0]=Math.min(p,k);f[1]=Math.max(p,k);p=f[0]+ +","+f[1];void 0===g[p]&&(g[p]={index1:f[0],index2:f[1]})}}for(p in g)m=g[p],h=a.vertices[m.index1],b.push(h.x,h.y,h.z),h=a.vertices[m.index2],b.push(h.x,h.y,h.z)}else if(a&&a.isBufferGeometry)if(h=new n,null!==a.index){l=a.attributes.position;u=a.index;var r=a.groups;0===r.length&&(r=[{start:0,count:u.count,materialIndex:0}]);a=0;for(e=r.length;ac;c++)p=u.getX(m+c),k=u.getX(m+(c+1)%3),f[0]=Math.min(p,k),f[1]=Math.max(p,k),p=f[0]+","+ +f[1],void 0===g[p]&&(g[p]={index1:f[0],index2:f[1]});for(p in g)m=g[p],h.fromBufferAttribute(l,m.index1),b.push(h.x,h.y,h.z),h.fromBufferAttribute(l,m.index2),b.push(h.x,h.y,h.z)}else for(l=a.attributes.position,m=0,d=l.count/3;mc;c++)g=3*m+c,h.fromBufferAttribute(l,g),b.push(h.x,h.y,h.z),g=3*m+(c+1)%3,h.fromBufferAttribute(l,g),b.push(h.x,h.y,h.z);this.setAttribute("position",new y(b,3))}function Ud(a,b,c){N.call(this);this.type="ParametricGeometry";this.parameters={func:a,slices:b, +stacks:c};this.fromBufferGeometry(new Sc(a,b,c));this.mergeVertices()}function Sc(a,b,c){C.call(this);this.type="ParametricBufferGeometry";this.parameters={func:a,slices:b,stacks:c};var d=[],e=[],f=[],g=[],h=new n,l=new n,m=new n,u=new n,p=new n,k,r;3>a.length&&console.error("THREE.ParametricGeometry: Function must now modify a Vector3 as third parameter.");var q=b+1;for(k=0;k<=c;k++){var v=k/c;for(r=0;r<=b;r++){var E=r/b;a(E,v,l);e.push(l.x,l.y,l.z);0<=E-1E-5?(a(E-1E-5,v,m),u.subVectors(l,m)):(a(E+ +1E-5,v,m),u.subVectors(m,l));0<=v-1E-5?(a(E,v-1E-5,m),p.subVectors(l,m)):(a(E,v+1E-5,m),p.subVectors(m,l));h.crossVectors(u,p).normalize();f.push(h.x,h.y,h.z);g.push(E,v)}}for(k=0;kd&&1===a.x&&(l[b]=a.x-1);0===c.x&&0===c.z&&(l[b]=d/2/Math.PI+.5)}C.call(this);this.type="PolyhedronBufferGeometry";this.parameters={vertices:a,indices:b,radius:c,detail:d};c=c||1;d=d||0;var h=[],l=[];(function(a){for(var c=new n,d=new n,g=new n,h=0;he&&(.2>b&&(l[a+0]+=1),.2>c&&(l[a+2]+=1),.2>d&&(l[a+4]+=1))})();this.setAttribute("position",new y(h,3));this.setAttribute("normal",new y(h.slice(),3));this.setAttribute("uv",new y(l,2));0===d?this.computeVertexNormals():this.normalizeNormals()}function Wd(a,b){N.call(this);this.type="TetrahedronGeometry";this.parameters={radius:a,detail:b};this.fromBufferGeometry(new Tc(a,b));this.mergeVertices()} +function Tc(a,b){Ga.call(this,[1,1,1,-1,-1,1,-1,1,-1,1,-1,-1],[2,1,0,0,3,2,1,3,0,2,3,1],a,b);this.type="TetrahedronBufferGeometry";this.parameters={radius:a,detail:b}}function Xd(a,b){N.call(this);this.type="OctahedronGeometry";this.parameters={radius:a,detail:b};this.fromBufferGeometry(new cc(a,b));this.mergeVertices()}function cc(a,b){Ga.call(this,[1,0,0,-1,0,0,0,1,0,0,-1,0,0,0,1,0,0,-1],[0,2,4,0,4,3,0,3,5,0,5,2,1,2,5,1,5,3,1,3,4,1,4,2],a,b);this.type="OctahedronBufferGeometry";this.parameters= +{radius:a,detail:b}}function Yd(a,b){N.call(this);this.type="IcosahedronGeometry";this.parameters={radius:a,detail:b};this.fromBufferGeometry(new Uc(a,b));this.mergeVertices()}function Uc(a,b){var c=(1+Math.sqrt(5))/2;Ga.call(this,[-1,c,0,1,c,0,-1,-c,0,1,-c,0,0,-1,c,0,1,c,0,-1,-c,0,1,-c,c,0,-1,c,0,1,-c,0,-1,-c,0,1],[0,11,5,0,5,1,0,1,7,0,7,10,0,10,11,1,5,9,5,11,4,11,10,2,10,7,6,7,1,8,3,9,4,3,4,2,3,2,6,3,6,8,3,8,9,4,9,5,2,4,11,6,2,10,8,6,7,9,8,1],a,b);this.type="IcosahedronBufferGeometry";this.parameters= +{radius:a,detail:b}}function Zd(a,b){N.call(this);this.type="DodecahedronGeometry";this.parameters={radius:a,detail:b};this.fromBufferGeometry(new Vc(a,b));this.mergeVertices()}function Vc(a,b){var c=(1+Math.sqrt(5))/2,d=1/c;Ga.call(this,[-1,-1,-1,-1,-1,1,-1,1,-1,-1,1,1,1,-1,-1,1,-1,1,1,1,-1,1,1,1,0,-d,-c,0,-d,c,0,d,-c,0,d,c,-d,-c,0,-d,c,0,d,-c,0,d,c,0,-c,0,-d,c,0,-d,-c,0,d,c,0,d],[3,11,7,3,7,15,3,15,13,7,19,17,7,17,6,7,6,15,17,4,8,17,8,10,17,10,6,8,0,16,8,16,2,8,2,10,0,12,1,0,1,18,0,18,16,6,10,2, +6,2,13,6,13,15,2,16,18,2,18,3,2,3,13,18,1,9,18,9,11,18,11,3,4,14,12,4,12,0,4,0,8,11,9,5,11,5,19,11,19,7,19,5,14,19,14,4,19,4,17,1,12,14,1,14,5,1,5,9],a,b);this.type="DodecahedronBufferGeometry";this.parameters={radius:a,detail:b}}function $d(a,b,c,d,e,f){N.call(this);this.type="TubeGeometry";this.parameters={path:a,tubularSegments:b,radius:c,radialSegments:d,closed:e};void 0!==f&&console.warn("THREE.TubeGeometry: taper has been removed.");a=new dc(a,b,c,d,e);this.tangents=a.tangents;this.normals= +a.normals;this.binormals=a.binormals;this.fromBufferGeometry(a);this.mergeVertices()}function dc(a,b,c,d,e){function f(e){u=a.getPointAt(e/b,u);var f=g.normals[e];e=g.binormals[e];for(x=0;x<=d;x++){var m=x/d*Math.PI*2,k=Math.sin(m);m=-Math.cos(m);l.x=m*f.x+k*e.x;l.y=m*f.y+k*e.y;l.z=m*f.z+k*e.z;l.normalize();q.push(l.x,l.y,l.z);h.x=u.x+c*l.x;h.y=u.y+c*l.y;h.z=u.z+c*l.z;r.push(h.x,h.y,h.z)}}C.call(this);this.type="TubeBufferGeometry";this.parameters={path:a,tubularSegments:b,radius:c,radialSegments:d, +closed:e};b=b||64;c=c||1;d=d||8;e=e||!1;var g=a.computeFrenetFrames(b,e);this.tangents=g.tangents;this.normals=g.normals;this.binormals=g.binormals;var h=new n,l=new n,m=new t,u=new n,k,x,r=[],q=[],v=[],E=[];for(k=0;k=b;e-=d)f=di(e,a[e],a[e+1],f);f&&ec(f,f.next)&&(ce(f),f=f.next);return f}function de(a,b){if(!a)return a;b||(b=a);do{var c=!1;if(a.steiner||!ec(a,a.next)&&0!==xa(a.prev,a,a.next))a=a.next;else{ce(a);a=b=a.prev;if(a===a.next)break;c=!0}}while(c||a!==b);return b}function ee(a,b,c,d,e,f,g){if(a){if(!g&&f){var h=a,l=h;do null===l.z&&(l.z=tg(l.x,l.y,d,e,f)),l.prevZ=l.prev,l=l.nextZ= +l.next;while(l!==h);l.prevZ.nextZ=null;l.prevZ=null;h=l;var m,k,p,x,r=1;do{l=h;var q=h=null;for(k=0;l;){k++;var n=l;for(m=p=0;mn!==q.next.y>n&&q.next.y!==q.y&&p<(q.next.x-q.x)*(n-q.y)/(q.next.y-q.y)+q.x&&(k=!k),q=q.next;while(q!==l);q=k}l=q}if(l){a=fi(g,h);g=de(g,g.next);a=de(a,a.next);ee(g,b,c,d,e,f);ee(a,b,c,d,e,f);break a}h=h.next}g=g.next}while(g!==a)}break}}}}function Kk(a,b,c,d){var e=a.prev,f=a.next;if(0<=xa(e,a,f))return!1;var g=e.x>a.x? +e.x>f.x?e.x:f.x:a.x>f.x?a.x:f.x,h=e.y>a.y?e.y>f.y?e.y:f.y:a.y>f.y?a.y:f.y,l=tg(e.x=l&&d&&d.z<=b;){if(c!==a.prev&&c!==a.next&&Yc(e.x,e.y,a.x,a.y,f.x,f.y,c.x,c.y)&&0<=xa(c.prev,c,c.next))return!1;c=c.prevZ;if(d!==a.prev&&d!==a.next&&Yc(e.x,e.y,a.x,a.y,f.x,f.y,d.x,d.y)&&0<=xa(d.prev,d,d.next))return!1;d=d.nextZ}for(;c&&c.z>=l;){if(c!==a.prev&&c!==a.next&&Yc(e.x,e.y,a.x,a.y, +f.x,f.y,c.x,c.y)&&0<=xa(c.prev,c,c.next))return!1;c=c.prevZ}for(;d&&d.z<=b;){if(d!==a.prev&&d!==a.next&&Yc(e.x,e.y,a.x,a.y,f.x,f.y,d.x,d.y)&&0<=xa(d.prev,d,d.next))return!1;d=d.nextZ}return!0}function Lk(a,b){return a.x-b.x}function Mk(a,b){var c=b,d=a.x,e=a.y,f=-Infinity;do{if(e<=c.y&&e>=c.next.y&&c.next.y!==c.y){var g=c.x+(e-c.y)*(c.next.x-c.x)/(c.next.y-c.y);if(g<=d&&g>f){f=g;if(g===d){if(e===c.y)return c;if(e===c.next.y)return c.next}var h=c.x=c.x&&c.x>=g&&d!==c.x&&Yc(eh.x)&&fe(c,a)&&(h=c,m=k)}c=c.next}return h}function tg(a,b,c,d,e){a=32767*(a-c)*e;b=32767*(b-d)*e;a=(a|a<<8)&16711935;a=(a|a<<4)&252645135;a=(a|a<<2)&858993459;b=(b|b<<8)&16711935;b=(b|b<<4)&252645135;b=(b|b<<2)&858993459;return(a|a<<1)&1431655765|((b|b<<1)&1431655765)<<1}function Nk(a){var b=a,c=a;do{if(b.xxa(a.prev,a,a.next)?0<=xa(a,b,a.next)&&0<=xa(a,a.prev,b):0>xa(a,b,a.prev)|| +0>xa(a,a.next,b)}function fi(a,b){var c=new ug(a.i,a.x,a.y),d=new ug(b.i,b.x,b.y),e=a.next,f=b.prev;a.next=b;b.prev=a;c.next=e;e.prev=c;d.next=c;c.prev=d;f.next=d;d.prev=f;return d}function di(a,b,c,d){a=new ug(a,b,c);d?(a.next=d.next,a.prev=d,d.next.prev=a,d.next=a):(a.prev=a,a.next=a);return a}function ce(a){a.next.prev=a.prev;a.prev.next=a.next;a.prevZ&&(a.prevZ.nextZ=a.nextZ);a.nextZ&&(a.nextZ.prevZ=a.prevZ)}function ug(a,b,c){this.i=a;this.x=b;this.y=c;this.nextZ=this.prevZ=this.z=this.next= +this.prev=null;this.steiner=!1}function gi(a){var b=a.length;2Number.EPSILON){var l=Math.sqrt(h),m=Math.sqrt(f*f+g*g);h=b.x-e/l;b=b.y+d/l;g=((c.x-g/m-h)*g-(c.y+f/m-b)*f)/(d*g-e*f);f=h+d*g-a.x;d=b+e*g-a.y;e=f*f+d*d;if(2>=e)return new t(f,d);e=Math.sqrt(e/2)}else a=!1,d>Number.EPSILON?f>Number.EPSILON&&(a=!0):d<-Number.EPSILON?f<-Number.EPSILON&&(a=!0):Math.sign(e)===Math.sign(g)&&(a=!0),a?(f=-e,e=Math.sqrt(h)):(f=d,d=e,e=Math.sqrt(h/2));return new t(f/e,d/e)}function h(a,b){for(J=a.length;0<= +--J;){var c=J;var f=J-1;0>f&&(f=a.length-1);var g,h=z+2*y;for(g=0;gk;k++){var p=m[f[k]];var n=m[f[(k+1)%3]];d[0]=Math.min(p,n);d[1]=Math.max(p,n);p=d[0]+","+d[1];void 0===e[p]?e[p]={index1:d[0],index2:d[1],face1:h,face2:void 0}:e[p].face2=h}for(p in e)if(d=e[p],void 0===d.face2||g[d.face1].normal.dot(g[d.face2].normal)<=b)f=a[d.index1],c.push(f.x,f.y,f.z),f=a[d.index2],c.push(f.x,f.y,f.z);this.setAttribute("position",new y(c,3))}function jc(a,b,c,d,e,f,g,h){N.call(this);this.type="CylinderGeometry";this.parameters={radiusTop:a,radiusBottom:b,height:c,radialSegments:d, +heightSegments:e,openEnded:f,thetaStart:g,thetaLength:h};this.fromBufferGeometry(new tb(a,b,c,d,e,f,g,h));this.mergeVertices()}function tb(a,b,c,d,e,f,g,h){function l(c){var e,f=new t,l=new n,u=0,v=!0===c?a:b,z=!0===c?1:-1;var A=q;for(e=1;e<=d;e++)p.push(0,E*z,0),x.push(0,z,0),r.push(.5,.5),q++;var y=q;for(e=0;e<=d;e++){var C=e/d*h+g,D=Math.cos(C);C=Math.sin(C);l.x=v*C;l.y=E*z;l.z=v*D;p.push(l.x,l.y,l.z);x.push(0,z,0);f.x=.5*D+.5;f.y=.5*C*z+.5;r.push(f.x,f.y);q++}for(e=0;ethis.duration&&this.resetDuration()}function Pk(a){switch(a.toLowerCase()){case "scalar":case "double":case "float":case "number":case "integer":return dd; +case "vector":case "vector2":case "vector3":case "vector4":return ed;case "color":return $e;case "quaternion":return oe;case "bool":case "boolean":return Ze;case "string":return bf}throw Error("THREE.KeyframeTrack: Unsupported typeName: "+a);}function Qk(a){if(void 0===a.type)throw Error("THREE.KeyframeTrack: track type undefined, can not parse");var b=Pk(a.type);if(void 0===a.times){var c=[],d=[];R.flattenJSON(a.keys,c,d,"value");a.times=c;a.values=d}return void 0!==b.parse?b.parse(a):new b(a.name, +a.times,a.values,a.interpolation)}function vg(a,b,c){var d=this,e=!1,f=0,g=0,h=void 0,l=[];this.onStart=void 0;this.onLoad=a;this.onProgress=b;this.onError=c;this.itemStart=function(a){g++;if(!1===e&&void 0!==d.onStart)d.onStart(a,f,g);e=!0};this.itemEnd=function(a){f++;if(void 0!==d.onProgress)d.onProgress(a,f,g);if(f===g&&(e=!1,void 0!==d.onLoad))d.onLoad()};this.itemError=function(a){if(void 0!==d.onError)d.onError(a)};this.resolveURL=function(a){return h?h(a):a};this.setURLModifier=function(a){h= +a;return this};this.addHandler=function(a,b){l.push(a,b);return this};this.removeHandler=function(a){a=l.indexOf(a);-1!==a&&l.splice(a,2);return this};this.getHandler=function(a){for(var b=0,c=l.length;ba;a++)this.coefficients.push(new n)}function ab(a,b){da.call(this,void 0,b);this.sh=void 0!==a?a:new uf}function Eg(a,b,c){ab.call(this, +void 0,c);a=(new A).set(a);c=(new A).set(b);b=new n(a.r,a.g,a.b);a=new n(c.r,c.g,c.b);c=Math.sqrt(Math.PI);var d=c*Math.sqrt(.75);this.sh.coefficients[0].copy(b).add(a).multiplyScalar(c);this.sh.coefficients[1].copy(b).sub(a).multiplyScalar(d)}function Fg(a,b){ab.call(this,void 0,b);a=(new A).set(a);this.sh.coefficients[0].set(a.r,a.g,a.b).multiplyScalar(2*Math.sqrt(Math.PI))}function mi(){this.type="StereoCamera";this.aspect=1;this.eyeSep=.064;this.cameraL=new aa;this.cameraL.layers.enable(1);this.cameraL.matrixAutoUpdate= +!1;this.cameraR=new aa;this.cameraR.layers.enable(2);this.cameraR.matrixAutoUpdate=!1;this._cache={focus:null,fov:null,aspect:null,near:null,far:null,zoom:null,eyeSep:null}}function Gg(a){this.autoStart=void 0!==a?a:!0;this.elapsedTime=this.oldTime=this.startTime=0;this.running=!1}function Hg(){F.call(this);this.type="AudioListener";this.context=Ig.getContext();this.gain=this.context.createGain();this.gain.connect(this.context.destination);this.filter=null;this.timeDelta=0;this._clock=new Gg}function id(a){F.call(this); +this.type="Audio";this.listener=a;this.context=a.context;this.gain=this.context.createGain();this.gain.connect(a.getInput());this.autoplay=!1;this.buffer=null;this.detune=0;this.loop=!1;this.offset=this.loopEnd=this.loopStart=0;this.duration=void 0;this.playbackRate=1;this.isPlaying=!1;this.hasPlaybackControl=!0;this.sourceType="empty";this._pausedAt=this._startedAt=0;this.filters=[]}function Jg(a){id.call(this,a);this.panner=this.context.createPanner();this.panner.panningModel="HRTF";this.panner.connect(this.gain)} +function Kg(a,b){this.analyser=a.context.createAnalyser();this.analyser.fftSize=void 0!==b?b:2048;this.data=new Uint8Array(this.analyser.frequencyBinCount);a.getOutput().connect(this.analyser)}function Lg(a,b,c){this.binding=a;this.valueSize=c;a=Float64Array;switch(b){case "quaternion":b=this._slerp;break;case "string":case "bool":a=Array;b=this._select;break;default:b=this._lerp}this.buffer=new a(4*c);this._mixBufferRegion=b;this.referenceCount=this.useCount=this.cumulativeWeight=0}function ni(a, +b,c){c=c||ya.parseTrackName(b);this._targetGroup=a;this._bindings=a.subscribe_(b,c)}function ya(a,b,c){this.path=b;this.parsedPath=c||ya.parseTrackName(b);this.node=ya.findNode(a,this.parsedPath.nodeName)||a;this.rootNode=a}function oi(){this.uuid=L.generateUUID();this._objects=Array.prototype.slice.call(arguments);this.nCachedObjects_=0;var a={};this._indicesByUUID=a;for(var b=0,c=arguments.length;b!==c;++b)a[arguments[b].uuid]=b;this._paths=[];this._parsedPaths=[];this._bindings=[];this._bindingsIndicesByPath= +{};var d=this;this.stats={objects:{get total(){return d._objects.length},get inUse(){return this.total-d.nCachedObjects_}},get bindingsPerObject(){return d._bindings.length}}}function pi(a,b,c){this._mixer=a;this._clip=b;this._localRoot=c||null;a=b.tracks;b=a.length;c=Array(b);for(var d={endingStart:2400,endingEnd:2400},e=0;e!==b;++e){var f=a[e].createInterpolant(null);c[e]=f;f.settings=d}this._interpolantSettings=d;this._interpolants=c;this._propertyBindings=Array(b);this._weightInterpolant=this._timeScaleInterpolant= +this._byClipCacheIndex=this._cacheIndex=null;this.loop=2201;this._loopCount=-1;this._startTime=null;this.time=0;this._effectiveWeight=this.weight=this._effectiveTimeScale=this.timeScale=1;this.repetitions=Infinity;this.paused=!1;this.enabled=!0;this.clampWhenFinished=!1;this.zeroSlopeAtEnd=this.zeroSlopeAtStart=!0}function Mg(a){this._root=a;this._initMemoryManager();this.time=this._accuIndex=0;this.timeScale=1}function vf(a,b){"string"===typeof a&&(console.warn("THREE.Uniform: Type parameter is no longer needed."), +a=b);this.value=a}function Ng(a,b,c){rb.call(this,a,b);this.meshPerAttribute=c||1}function Og(a,b,c,d){this.ray=new Vb(a,b);this.near=c||0;this.far=d||Infinity;this.camera=null;this.layers=new He;this.params={Mesh:{},Line:{threshold:1},LOD:{},Points:{threshold:1},Sprite:{}};Object.defineProperties(this.params,{PointCloud:{get:function(){console.warn("THREE.Raycaster: params.PointCloud has been renamed to params.Points.");return this.Points}}})}function qi(a,b){return a.distance-b.distance}function Pg(a, +b,c,d){a.layers.test(b.layers)&&a.raycast(b,c);if(!0===d){a=a.children;d=0;for(var e=a.length;dc;c++,d++){var e=c/32*Math.PI*2,f=d/32*Math.PI*2;b.push(Math.cos(e),Math.sin(e),1,Math.cos(f),Math.sin(f),1)}a.setAttribute("position",new y(b,3));b=new la({fog:!1,toneMapped:!1});this.cone= +new ma(a,b);this.add(this.cone);this.update()}function ti(a){var b=[];a&&a.isBone&&b.push(a);for(var c=0;cr;++r){var q=r/k;q=Math.exp(-q*q/2);e.push(q);0==r?n+=q:r\n\nvec4 inputTexelToLinear(vec4 value){\n\tif(inputEncoding == 0){\n\t\treturn value;\n\t}else if(inputEncoding == 1){\n\t\treturn sRGBToLinear(value);\n\t}else if(inputEncoding == 2){\n\t\treturn RGBEToLinear(value);\n\t}else if(inputEncoding == 3){\n\t\treturn RGBMToLinear(value, 7.0);\n\t}else if(inputEncoding == 4){\n\t\treturn RGBMToLinear(value, 16.0);\n\t}else if(inputEncoding == 5){\n\t\treturn RGBDToLinear(value, 256.0);\n\t}else{\n\t\treturn GammaToLinear(value, 2.2);\n\t}\n}\n\nvec4 linearToOutputTexel(vec4 value){\n\tif(outputEncoding == 0){\n\t\treturn value;\n\t}else if(outputEncoding == 1){\n\t\treturn LinearTosRGB(value);\n\t}else if(outputEncoding == 2){\n\t\treturn LinearToRGBE(value);\n\t}else if(outputEncoding == 3){\n\t\treturn LinearToRGBM(value, 7.0);\n\t}else if(outputEncoding == 4){\n\t\treturn LinearToRGBM(value, 16.0);\n\t}else if(outputEncoding == 5){\n\t\treturn LinearToRGBD(value, 256.0);\n\t}else{\n\t\treturn LinearToGamma(value, 2.2);\n\t}\n}\n\nvec4 envMapTexelToLinear(vec4 color) {\n\treturn inputTexelToLinear(color);\n}\n\t"} +function Fi(a){console.warn("THREE.ClosedSplineCurve3 has been deprecated. Use THREE.CatmullRomCurve3 instead.");pa.call(this,a);this.type="catmullrom";this.closed=!0}function Gi(a){console.warn("THREE.SplineCurve3 has been deprecated. Use THREE.CatmullRomCurve3 instead.");pa.call(this,a);this.type="catmullrom"}function $g(a){console.warn("THREE.Spline has been removed. Use THREE.CatmullRomCurve3 instead.");pa.call(this,a);this.type="catmullrom"}void 0===Number.EPSILON&&(Number.EPSILON=Math.pow(2, +-52));void 0===Number.isInteger&&(Number.isInteger=function(a){return"number"===typeof a&&isFinite(a)&&Math.floor(a)===a});void 0===Math.sign&&(Math.sign=function(a){return 0>a?-1:0xe;xe++)ta[xe]=(16>xe?"0":"")+xe.toString(16);var L={DEG2RAD:Math.PI/180,RAD2DEG:180/Math.PI,generateUUID:function(){var a=4294967295*Math.random()|0,b=4294967295*Math.random()|0,c=4294967295*Math.random()| +0,d=4294967295*Math.random()|0;return(ta[a&255]+ta[a>>8&255]+ta[a>>16&255]+ta[a>>24&255]+"-"+ta[b&255]+ta[b>>8&255]+"-"+ta[b>>16&15|64]+ta[b>>24&255]+"-"+ta[c&63|128]+ta[c>>8&255]+"-"+ta[c>>16&255]+ta[c>>24&255]+ta[d&255]+ta[d>>8&255]+ta[d>>16&255]+ta[d>>24&255]).toUpperCase()},clamp:function(a,b,c){return Math.max(b,Math.min(c,a))},euclideanModulo:function(a,b){return(a%b+b)%b},mapLinear:function(a,b,c,d,e){return d+(a-b)*(e-d)/(c-b)},lerp:function(a,b,c){return(1-c)*a+c*b},smoothstep:function(a, +b,c){if(a<=b)return 0;if(a>=c)return 1;a=(a-b)/(c-b);return a*a*(3-2*a)},smootherstep:function(a,b,c){if(a<=b)return 0;if(a>=c)return 1;a=(a-b)/(c-b);return a*a*a*(a*(6*a-15)+10)},randInt:function(a,b){return a+Math.floor(Math.random()*(b-a+1))},randFloat:function(a,b){return a+Math.random()*(b-a)},randFloatSpread:function(a){return a*(.5-Math.random())},degToRad:function(a){return a*L.DEG2RAD},radToDeg:function(a){return a*L.RAD2DEG},isPowerOfTwo:function(a){return 0===(a&a-1)&&0!==a},ceilPowerOfTwo:function(a){return Math.pow(2, +Math.ceil(Math.log(a)/Math.LN2))},floorPowerOfTwo:function(a){return Math.pow(2,Math.floor(Math.log(a)/Math.LN2))},setQuaternionFromProperEuler:function(a,b,c,d,e){var f=Math.cos,g=Math.sin,h=f(c/2);c=g(c/2);var l=f((b+d)/2),m=g((b+d)/2),k=f((b-d)/2),p=g((b-d)/2);f=f((d-b)/2);b=g((d-b)/2);"XYX"===e?a.set(h*m,c*k,c*p,h*l):"YZY"===e?a.set(c*p,h*m,c*k,h*l):"ZXZ"===e?a.set(c*k,c*p,h*m,h*l):"XZX"===e?a.set(h*m,c*b,c*f,h*l):"YXY"===e?a.set(c*f,h*m,c*b,h*l):"ZYZ"===e?a.set(c*b,c*f,h*m,h*l):console.warn("THREE.MathUtils: .setQuaternionFromProperEuler() encountered an unknown order.")}}; +Object.defineProperties(t.prototype,{width:{get:function(){return this.x},set:function(a){this.x=a}},height:{get:function(){return this.y},set:function(a){this.y=a}}});Object.assign(t.prototype,{isVector2:!0,set:function(a,b){this.x=a;this.y=b;return this},setScalar:function(a){this.y=this.x=a;return this},setX:function(a){this.x=a;return this},setY:function(a){this.y=a;return this},setComponent:function(a,b){switch(a){case 0:this.x=b;break;case 1:this.y=b;break;default:throw Error("index is out of range: "+ +a);}return this},getComponent:function(a){switch(a){case 0:return this.x;case 1:return this.y;default:throw Error("index is out of range: "+a);}},clone:function(){return new this.constructor(this.x,this.y)},copy:function(a){this.x=a.x;this.y=a.y;return this},add:function(a,b){if(void 0!==b)return console.warn("THREE.Vector2: .add() now only accepts one argument. Use .addVectors( a, b ) instead."),this.addVectors(a,b);this.x+=a.x;this.y+=a.y;return this},addScalar:function(a){this.x+=a;this.y+=a;return this}, +addVectors:function(a,b){this.x=a.x+b.x;this.y=a.y+b.y;return this},addScaledVector:function(a,b){this.x+=a.x*b;this.y+=a.y*b;return this},sub:function(a,b){if(void 0!==b)return console.warn("THREE.Vector2: .sub() now only accepts one argument. Use .subVectors( a, b ) instead."),this.subVectors(a,b);this.x-=a.x;this.y-=a.y;return this},subScalar:function(a){this.x-=a;this.y-=a;return this},subVectors:function(a,b){this.x=a.x-b.x;this.y=a.y-b.y;return this},multiply:function(a){this.x*=a.x;this.y*= +a.y;return this},multiplyScalar:function(a){this.x*=a;this.y*=a;return this},divide:function(a){this.x/=a.x;this.y/=a.y;return this},divideScalar:function(a){return this.multiplyScalar(1/a)},applyMatrix3:function(a){var b=this.x,c=this.y;a=a.elements;this.x=a[0]*b+a[3]*c+a[6];this.y=a[1]*b+a[4]*c+a[7];return this},min:function(a){this.x=Math.min(this.x,a.x);this.y=Math.min(this.y,a.y);return this},max:function(a){this.x=Math.max(this.x,a.x);this.y=Math.max(this.y,a.y);return this},clamp:function(a, +b){this.x=Math.max(a.x,Math.min(b.x,this.x));this.y=Math.max(a.y,Math.min(b.y,this.y));return this},clampScalar:function(a,b){this.x=Math.max(a,Math.min(b,this.x));this.y=Math.max(a,Math.min(b,this.y));return this},clampLength:function(a,b){var c=this.length();return this.divideScalar(c||1).multiplyScalar(Math.max(a,Math.min(b,c)))},floor:function(){this.x=Math.floor(this.x);this.y=Math.floor(this.y);return this},ceil:function(){this.x=Math.ceil(this.x);this.y=Math.ceil(this.y);return this},round:function(){this.x= +Math.round(this.x);this.y=Math.round(this.y);return this},roundToZero:function(){this.x=0>this.x?Math.ceil(this.x):Math.floor(this.x);this.y=0>this.y?Math.ceil(this.y):Math.floor(this.y);return this},negate:function(){this.x=-this.x;this.y=-this.y;return this},dot:function(a){return this.x*a.x+this.y*a.y},cross:function(a){return this.x*a.y-this.y*a.x},lengthSq:function(){return this.x*this.x+this.y*this.y},length:function(){return Math.sqrt(this.x*this.x+this.y*this.y)},manhattanLength:function(){return Math.abs(this.x)+ +Math.abs(this.y)},normalize:function(){return this.divideScalar(this.length()||1)},angle:function(){return Math.atan2(-this.y,-this.x)+Math.PI},distanceTo:function(a){return Math.sqrt(this.distanceToSquared(a))},distanceToSquared:function(a){var b=this.x-a.x;a=this.y-a.y;return b*b+a*a},manhattanDistanceTo:function(a){return Math.abs(this.x-a.x)+Math.abs(this.y-a.y)},setLength:function(a){return this.normalize().multiplyScalar(a)},lerp:function(a,b){this.x+=(a.x-this.x)*b;this.y+=(a.y-this.y)*b;return this}, +lerpVectors:function(a,b,c){return this.subVectors(b,a).multiplyScalar(c).add(a)},equals:function(a){return a.x===this.x&&a.y===this.y},fromArray:function(a,b){void 0===b&&(b=0);this.x=a[b];this.y=a[b+1];return this},toArray:function(a,b){void 0===a&&(a=[]);void 0===b&&(b=0);a[b]=this.x;a[b+1]=this.y;return a},fromBufferAttribute:function(a,b,c){void 0!==c&&console.warn("THREE.Vector2: offset has been removed from .fromBufferAttribute().");this.x=a.getX(b);this.y=a.getY(b);return this},rotateAround:function(a, +b){var c=Math.cos(b);b=Math.sin(b);var d=this.x-a.x,e=this.y-a.y;this.x=d*c-e*b+a.x;this.y=d*b+e*c+a.y;return this}});Object.assign(wa.prototype,{isMatrix3:!0,set:function(a,b,c,d,e,f,g,h,l){var m=this.elements;m[0]=a;m[1]=d;m[2]=g;m[3]=b;m[4]=e;m[5]=h;m[6]=c;m[7]=f;m[8]=l;return this},identity:function(){this.set(1,0,0,0,1,0,0,0,1);return this},clone:function(){return(new this.constructor).fromArray(this.elements)},copy:function(a){var b=this.elements;a=a.elements;b[0]=a[0];b[1]=a[1];b[2]=a[2];b[3]= +a[3];b[4]=a[4];b[5]=a[5];b[6]=a[6];b[7]=a[7];b[8]=a[8];return this},extractBasis:function(a,b,c){a.setFromMatrix3Column(this,0);b.setFromMatrix3Column(this,1);c.setFromMatrix3Column(this,2);return this},setFromMatrix4:function(a){a=a.elements;this.set(a[0],a[4],a[8],a[1],a[5],a[9],a[2],a[6],a[10]);return this},multiply:function(a){return this.multiplyMatrices(this,a)},premultiply:function(a){return this.multiplyMatrices(a,this)},multiplyMatrices:function(a,b){var c=a.elements,d=b.elements;b=this.elements; +a=c[0];var e=c[3],f=c[6],g=c[1],h=c[4],l=c[7],m=c[2],k=c[5];c=c[8];var p=d[0],n=d[3],r=d[6],q=d[1],v=d[4],E=d[7],w=d[2],t=d[5];d=d[8];b[0]=a*p+e*q+f*w;b[3]=a*n+e*v+f*t;b[6]=a*r+e*E+f*d;b[1]=g*p+h*q+l*w;b[4]=g*n+h*v+l*t;b[7]=g*r+h*E+l*d;b[2]=m*p+k*q+c*w;b[5]=m*n+k*v+c*t;b[8]=m*r+k*E+c*d;return this},multiplyScalar:function(a){var b=this.elements;b[0]*=a;b[3]*=a;b[6]*=a;b[1]*=a;b[4]*=a;b[7]*=a;b[2]*=a;b[5]*=a;b[8]*=a;return this},determinant:function(){var a=this.elements,b=a[0],c=a[1],d=a[2],e=a[3], +f=a[4],g=a[5],h=a[6],l=a[7];a=a[8];return b*f*a-b*g*l-c*e*a+c*g*h+d*e*l-d*f*h},getInverse:function(a,b){void 0!==b&&console.warn("THREE.Matrix3: .getInverse() can no longer be configured to throw on degenerate.");var c=a.elements;a=this.elements;b=c[0];var d=c[1],e=c[2],f=c[3],g=c[4],h=c[5],l=c[6],m=c[7];c=c[8];var k=c*g-h*m,p=h*l-c*f,n=m*f-g*l,r=b*k+d*p+e*n;if(0===r)return this.set(0,0,0,0,0,0,0,0,0);r=1/r;a[0]=k*r;a[1]=(e*m-c*d)*r;a[2]=(h*d-e*g)*r;a[3]=p*r;a[4]=(c*b-e*l)*r;a[5]=(e*f-h*b)*r;a[6]= +n*r;a[7]=(d*l-m*b)*r;a[8]=(g*b-d*f)*r;return this},transpose:function(){var a=this.elements;var b=a[1];a[1]=a[3];a[3]=b;b=a[2];a[2]=a[6];a[6]=b;b=a[5];a[5]=a[7];a[7]=b;return this},getNormalMatrix:function(a){return this.setFromMatrix4(a).getInverse(this).transpose()},transposeIntoArray:function(a){var b=this.elements;a[0]=b[0];a[1]=b[3];a[2]=b[6];a[3]=b[1];a[4]=b[4];a[5]=b[7];a[6]=b[2];a[7]=b[5];a[8]=b[8];return this},setUvTransform:function(a,b,c,d,e,f,g){var h=Math.cos(e);e=Math.sin(e);this.set(c* +h,c*e,-c*(h*f+e*g)+f+a,-d*e,d*h,-d*(-e*f+h*g)+g+b,0,0,1)},scale:function(a,b){var c=this.elements;c[0]*=a;c[3]*=a;c[6]*=a;c[1]*=b;c[4]*=b;c[7]*=b;return this},rotate:function(a){var b=Math.cos(a);a=Math.sin(a);var c=this.elements,d=c[0],e=c[3],f=c[6],g=c[1],h=c[4],l=c[7];c[0]=b*d+a*g;c[3]=b*e+a*h;c[6]=b*f+a*l;c[1]=-a*d+b*g;c[4]=-a*e+b*h;c[7]=-a*f+b*l;return this},translate:function(a,b){var c=this.elements;c[0]+=a*c[2];c[3]+=a*c[5];c[6]+=a*c[8];c[1]+=b*c[2];c[4]+=b*c[5];c[7]+=b*c[8];return this}, +equals:function(a){var b=this.elements;a=a.elements;for(var c=0;9>c;c++)if(b[c]!==a[c])return!1;return!0},fromArray:function(a,b){void 0===b&&(b=0);for(var c=0;9>c;c++)this.elements[c]=a[c+b];return this},toArray:function(a,b){void 0===a&&(a=[]);void 0===b&&(b=0);var c=this.elements;a[b]=c[0];a[b+1]=c[1];a[b+2]=c[2];a[b+3]=c[3];a[b+4]=c[4];a[b+5]=c[5];a[b+6]=c[6];a[b+7]=c[7];a[b+8]=c[8];return a}});var nd,Lb={getDataURL:function(a){if("undefined"==typeof HTMLCanvasElement)return a.src;if(!(a instanceof +HTMLCanvasElement)){void 0===nd&&(nd=document.createElementNS("http://www.w3.org/1999/xhtml","canvas"));nd.width=a.width;nd.height=a.height;var b=nd.getContext("2d");a instanceof ImageData?b.putImageData(a,0,0):b.drawImage(a,0,0,a.width,a.height);a=nd}return 2048a.x||1a.x?0:1;break;case 1002:a.x=1===Math.abs(Math.floor(a.x)% +2)?Math.ceil(a.x)-a.x:a.x-Math.floor(a.x)}if(0>a.y||1a.y?0:1;break;case 1002:a.y=1===Math.abs(Math.floor(a.y)%2)?Math.ceil(a.y)-a.y:a.y-Math.floor(a.y)}this.flipY&&(a.y=1-a.y);return a}});Object.defineProperty(V.prototype,"needsUpdate",{set:function(a){!0===a&&this.version++}});Object.defineProperties(ka.prototype,{width:{get:function(){return this.z},set:function(a){this.z=a}},height:{get:function(){return this.w},set:function(a){this.w= +a}}});Object.assign(ka.prototype,{isVector4:!0,set:function(a,b,c,d){this.x=a;this.y=b;this.z=c;this.w=d;return this},setScalar:function(a){this.w=this.z=this.y=this.x=a;return this},setX:function(a){this.x=a;return this},setY:function(a){this.y=a;return this},setZ:function(a){this.z=a;return this},setW:function(a){this.w=a;return this},setComponent:function(a,b){switch(a){case 0:this.x=b;break;case 1:this.y=b;break;case 2:this.z=b;break;case 3:this.w=b;break;default:throw Error("index is out of range: "+ +a);}return this},getComponent:function(a){switch(a){case 0:return this.x;case 1:return this.y;case 2:return this.z;case 3:return this.w;default:throw Error("index is out of range: "+a);}},clone:function(){return new this.constructor(this.x,this.y,this.z,this.w)},copy:function(a){this.x=a.x;this.y=a.y;this.z=a.z;this.w=void 0!==a.w?a.w:1;return this},add:function(a,b){if(void 0!==b)return console.warn("THREE.Vector4: .add() now only accepts one argument. Use .addVectors( a, b ) instead."),this.addVectors(a, +b);this.x+=a.x;this.y+=a.y;this.z+=a.z;this.w+=a.w;return this},addScalar:function(a){this.x+=a;this.y+=a;this.z+=a;this.w+=a;return this},addVectors:function(a,b){this.x=a.x+b.x;this.y=a.y+b.y;this.z=a.z+b.z;this.w=a.w+b.w;return this},addScaledVector:function(a,b){this.x+=a.x*b;this.y+=a.y*b;this.z+=a.z*b;this.w+=a.w*b;return this},sub:function(a,b){if(void 0!==b)return console.warn("THREE.Vector4: .sub() now only accepts one argument. Use .subVectors( a, b ) instead."),this.subVectors(a,b);this.x-= +a.x;this.y-=a.y;this.z-=a.z;this.w-=a.w;return this},subScalar:function(a){this.x-=a;this.y-=a;this.z-=a;this.w-=a;return this},subVectors:function(a,b){this.x=a.x-b.x;this.y=a.y-b.y;this.z=a.z-b.z;this.w=a.w-b.w;return this},multiplyScalar:function(a){this.x*=a;this.y*=a;this.z*=a;this.w*=a;return this},applyMatrix4:function(a){var b=this.x,c=this.y,d=this.z,e=this.w;a=a.elements;this.x=a[0]*b+a[4]*c+a[8]*d+a[12]*e;this.y=a[1]*b+a[5]*c+a[9]*d+a[13]*e;this.z=a[2]*b+a[6]*c+a[10]*d+a[14]*e;this.w=a[3]* +b+a[7]*c+a[11]*d+a[15]*e;return this},divideScalar:function(a){return this.multiplyScalar(1/a)},setAxisAngleFromQuaternion:function(a){this.w=2*Math.acos(a.w);var b=Math.sqrt(1-a.w*a.w);1E-4>b?(this.x=1,this.z=this.y=0):(this.x=a.x/b,this.y=a.y/b,this.z=a.z/b);return this},setAxisAngleFromRotationMatrix:function(a){a=a.elements;var b=a[0];var c=a[4];var d=a[8],e=a[1],f=a[5],g=a[9];var h=a[2];var l=a[6];var m=a[10];if(.01>Math.abs(c-e)&&.01>Math.abs(d-h)&&.01>Math.abs(g-l)){if(.1>Math.abs(c+e)&&.1> +Math.abs(d+h)&&.1>Math.abs(g+l)&&.1>Math.abs(b+f+m-3))return this.set(1,0,0,0),this;a=Math.PI;b=(b+1)/2;f=(f+1)/2;m=(m+1)/2;c=(c+e)/4;d=(d+h)/4;g=(g+l)/4;b>f&&b>m?.01>b?(l=0,c=h=.707106781):(l=Math.sqrt(b),h=c/l,c=d/l):f>m?.01>f?(l=.707106781,h=0,c=.707106781):(h=Math.sqrt(f),l=c/h,c=g/h):.01>m?(h=l=.707106781,c=0):(c=Math.sqrt(m),l=d/c,h=g/c);this.set(l,h,c,a);return this}a=Math.sqrt((l-g)*(l-g)+(d-h)*(d-h)+(e-c)*(e-c));.001>Math.abs(a)&&(a=1);this.x=(l-g)/a;this.y=(d-h)/a;this.z=(e-c)/a;this.w= +Math.acos((b+f+m-1)/2);return this},min:function(a){this.x=Math.min(this.x,a.x);this.y=Math.min(this.y,a.y);this.z=Math.min(this.z,a.z);this.w=Math.min(this.w,a.w);return this},max:function(a){this.x=Math.max(this.x,a.x);this.y=Math.max(this.y,a.y);this.z=Math.max(this.z,a.z);this.w=Math.max(this.w,a.w);return this},clamp:function(a,b){this.x=Math.max(a.x,Math.min(b.x,this.x));this.y=Math.max(a.y,Math.min(b.y,this.y));this.z=Math.max(a.z,Math.min(b.z,this.z));this.w=Math.max(a.w,Math.min(b.w,this.w)); +return this},clampScalar:function(a,b){this.x=Math.max(a,Math.min(b,this.x));this.y=Math.max(a,Math.min(b,this.y));this.z=Math.max(a,Math.min(b,this.z));this.w=Math.max(a,Math.min(b,this.w));return this},clampLength:function(a,b){var c=this.length();return this.divideScalar(c||1).multiplyScalar(Math.max(a,Math.min(b,c)))},floor:function(){this.x=Math.floor(this.x);this.y=Math.floor(this.y);this.z=Math.floor(this.z);this.w=Math.floor(this.w);return this},ceil:function(){this.x=Math.ceil(this.x);this.y= +Math.ceil(this.y);this.z=Math.ceil(this.z);this.w=Math.ceil(this.w);return this},round:function(){this.x=Math.round(this.x);this.y=Math.round(this.y);this.z=Math.round(this.z);this.w=Math.round(this.w);return this},roundToZero:function(){this.x=0>this.x?Math.ceil(this.x):Math.floor(this.x);this.y=0>this.y?Math.ceil(this.y):Math.floor(this.y);this.z=0>this.z?Math.ceil(this.z):Math.floor(this.z);this.w=0>this.w?Math.ceil(this.w):Math.floor(this.w);return this},negate:function(){this.x=-this.x;this.y= +-this.y;this.z=-this.z;this.w=-this.w;return this},dot:function(a){return this.x*a.x+this.y*a.y+this.z*a.z+this.w*a.w},lengthSq:function(){return this.x*this.x+this.y*this.y+this.z*this.z+this.w*this.w},length:function(){return Math.sqrt(this.x*this.x+this.y*this.y+this.z*this.z+this.w*this.w)},manhattanLength:function(){return Math.abs(this.x)+Math.abs(this.y)+Math.abs(this.z)+Math.abs(this.w)},normalize:function(){return this.divideScalar(this.length()||1)},setLength:function(a){return this.normalize().multiplyScalar(a)}, +lerp:function(a,b){this.x+=(a.x-this.x)*b;this.y+=(a.y-this.y)*b;this.z+=(a.z-this.z)*b;this.w+=(a.w-this.w)*b;return this},lerpVectors:function(a,b,c){return this.subVectors(b,a).multiplyScalar(c).add(a)},equals:function(a){return a.x===this.x&&a.y===this.y&&a.z===this.z&&a.w===this.w},fromArray:function(a,b){void 0===b&&(b=0);this.x=a[b];this.y=a[b+1];this.z=a[b+2];this.w=a[b+3];return this},toArray:function(a,b){void 0===a&&(a=[]);void 0===b&&(b=0);a[b]=this.x;a[b+1]=this.y;a[b+2]=this.z;a[b+3]= +this.w;return a},fromBufferAttribute:function(a,b,c){void 0!==c&&console.warn("THREE.Vector4: offset has been removed from .fromBufferAttribute().");this.x=a.getX(b);this.y=a.getY(b);this.z=a.getZ(b);this.w=a.getW(b);return this}});Ha.prototype=Object.assign(Object.create(Ea.prototype),{constructor:Ha,isWebGLRenderTarget:!0,setSize:function(a,b){if(this.width!==a||this.height!==b)this.width=a,this.height=b,this.texture.image.width=a,this.texture.image.height=b,this.dispose();this.viewport.set(0,0, +a,b);this.scissor.set(0,0,a,b)},clone:function(){return(new this.constructor).copy(this)},copy:function(a){this.width=a.width;this.height=a.height;this.viewport.copy(a.viewport);this.texture=a.texture.clone();this.depthBuffer=a.depthBuffer;this.stencilBuffer=a.stencilBuffer;this.depthTexture=a.depthTexture;return this},dispose:function(){this.dispatchEvent({type:"dispose"})}});Zf.prototype=Object.assign(Object.create(Ha.prototype),{constructor:Zf,isWebGLMultisampleRenderTarget:!0,copy:function(a){Ha.prototype.copy.call(this, +a);this.samples=a.samples;return this}});Object.assign(Aa,{slerp:function(a,b,c,d){return c.copy(a).slerp(b,d)},slerpFlat:function(a,b,c,d,e,f,g){var h=c[d+0],l=c[d+1],m=c[d+2];c=c[d+3];d=e[f+0];var k=e[f+1],p=e[f+2];e=e[f+3];if(c!==e||h!==d||l!==k||m!==p){f=1-g;var n=h*d+l*k+m*p+c*e,r=0<=n?1:-1,q=1-n*n;q>Number.EPSILON&&(q=Math.sqrt(q),n=Math.atan2(q,n*r),f=Math.sin(f*n)/q,g=Math.sin(g*n)/q);r*=g;h=h*f+d*r;l=l*f+k*r;m=m*f+p*r;c=c*f+e*r;f===1-g&&(g=1/Math.sqrt(h*h+l*l+m*m+c*c),h*=g,l*=g,m*=g,c*=g)}a[b]= +h;a[b+1]=l;a[b+2]=m;a[b+3]=c}});Object.defineProperties(Aa.prototype,{x:{get:function(){return this._x},set:function(a){this._x=a;this._onChangeCallback()}},y:{get:function(){return this._y},set:function(a){this._y=a;this._onChangeCallback()}},z:{get:function(){return this._z},set:function(a){this._z=a;this._onChangeCallback()}},w:{get:function(){return this._w},set:function(a){this._w=a;this._onChangeCallback()}}});Object.assign(Aa.prototype,{isQuaternion:!0,set:function(a,b,c,d){this._x=a;this._y= +b;this._z=c;this._w=d;this._onChangeCallback();return this},clone:function(){return new this.constructor(this._x,this._y,this._z,this._w)},copy:function(a){this._x=a.x;this._y=a.y;this._z=a.z;this._w=a.w;this._onChangeCallback();return this},setFromEuler:function(a,b){if(!a||!a.isEuler)throw Error("THREE.Quaternion: .setFromEuler() now expects an Euler rotation rather than a Vector3 and order.");var c=a._x,d=a._y,e=a._z;a=a.order;var f=Math.cos,g=Math.sin,h=f(c/2),l=f(d/2);f=f(e/2);c=g(c/2);d=g(d/ +2);e=g(e/2);"XYZ"===a?(this._x=c*l*f+h*d*e,this._y=h*d*f-c*l*e,this._z=h*l*e+c*d*f,this._w=h*l*f-c*d*e):"YXZ"===a?(this._x=c*l*f+h*d*e,this._y=h*d*f-c*l*e,this._z=h*l*e-c*d*f,this._w=h*l*f+c*d*e):"ZXY"===a?(this._x=c*l*f-h*d*e,this._y=h*d*f+c*l*e,this._z=h*l*e+c*d*f,this._w=h*l*f-c*d*e):"ZYX"===a?(this._x=c*l*f-h*d*e,this._y=h*d*f+c*l*e,this._z=h*l*e-c*d*f,this._w=h*l*f+c*d*e):"YZX"===a?(this._x=c*l*f+h*d*e,this._y=h*d*f+c*l*e,this._z=h*l*e-c*d*f,this._w=h*l*f-c*d*e):"XZY"===a&&(this._x=c*l*f-h*d* +e,this._y=h*d*f-c*l*e,this._z=h*l*e+c*d*f,this._w=h*l*f+c*d*e);!1!==b&&this._onChangeCallback();return this},setFromAxisAngle:function(a,b){b/=2;var c=Math.sin(b);this._x=a.x*c;this._y=a.y*c;this._z=a.z*c;this._w=Math.cos(b);this._onChangeCallback();return this},setFromRotationMatrix:function(a){var b=a.elements,c=b[0];a=b[4];var d=b[8],e=b[1],f=b[5],g=b[9],h=b[2],l=b[6];b=b[10];var m=c+f+b;0f&&c>b?(c=2*Math.sqrt(1+ +c-f-b),this._w=(l-g)/c,this._x=.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=.25*c,this._z=(g+l)/c):(c=2*Math.sqrt(1+b-c-f),this._w=(e-a)/c,this._x=(d+h)/c,this._y=(g+l)/c,this._z=.25*c);this._onChangeCallback();return this},setFromUnitVectors:function(a,b){var c=a.dot(b)+1;1E-6>c?(c=0,Math.abs(a.x)>Math.abs(a.z)?(this._x=-a.y,this._y=a.x,this._z=0):(this._x=0,this._y=-a.z,this._z=a.y)):(this._x=a.y*b.z-a.z*b.y,this._y=a.z*b.x-a.x*b.z,this._z= +a.x*b.y-a.y*b.x);this._w=c;return this.normalize()},angleTo:function(a){return 2*Math.acos(Math.abs(L.clamp(this.dot(a),-1,1)))},rotateTowards:function(a,b){var c=this.angleTo(a);if(0===c)return this;this.slerp(a,Math.min(1,b/c));return this},inverse:function(){return this.conjugate()},conjugate:function(){this._x*=-1;this._y*=-1;this._z*=-1;this._onChangeCallback();return this},dot:function(a){return this._x*a._x+this._y*a._y+this._z*a._z+this._w*a._w},lengthSq:function(){return this._x*this._x+ +this._y*this._y+this._z*this._z+this._w*this._w},length:function(){return Math.sqrt(this._x*this._x+this._y*this._y+this._z*this._z+this._w*this._w)},normalize:function(){var a=this.length();0===a?(this._z=this._y=this._x=0,this._w=1):(a=1/a,this._x*=a,this._y*=a,this._z*=a,this._w*=a);this._onChangeCallback();return this},multiply:function(a,b){return void 0!==b?(console.warn("THREE.Quaternion: .multiply() now only accepts one argument. Use .multiplyQuaternions( a, b ) instead."),this.multiplyQuaternions(a, +b)):this.multiplyQuaternions(this,a)},premultiply:function(a){return this.multiplyQuaternions(a,this)},multiplyQuaternions:function(a,b){var c=a._x,d=a._y,e=a._z;a=a._w;var f=b._x,g=b._y,h=b._z;b=b._w;this._x=c*b+a*f+d*h-e*g;this._y=d*b+a*g+e*f-c*h;this._z=e*b+a*h+c*g-d*f;this._w=a*b-c*f-d*g-e*h;this._onChangeCallback();return this},slerp:function(a,b){if(0===b)return this;if(1===b)return this.copy(a);var c=this._x,d=this._y,e=this._z,f=this._w,g=f*a._w+c*a._x+d*a._y+e*a._z;0>g?(this._w=-a._w,this._x= +-a._x,this._y=-a._y,this._z=-a._z,g=-g):this.copy(a);if(1<=g)return this._w=f,this._x=c,this._y=d,this._z=e,this;a=1-g*g;if(a<=Number.EPSILON)return g=1-b,this._w=g*f+b*this._w,this._x=g*c+b*this._x,this._y=g*d+b*this._y,this._z=g*e+b*this._z,this.normalize(),this._onChangeCallback(),this;a=Math.sqrt(a);var h=Math.atan2(a,g);g=Math.sin((1-b)*h)/a;b=Math.sin(b*h)/a;this._w=f*g+this._w*b;this._x=c*g+this._x*b;this._y=d*g+this._y*b;this._z=e*g+this._z*b;this._onChangeCallback();return this},equals:function(a){return a._x=== +this._x&&a._y===this._y&&a._z===this._z&&a._w===this._w},fromArray:function(a,b){void 0===b&&(b=0);this._x=a[b];this._y=a[b+1];this._z=a[b+2];this._w=a[b+3];this._onChangeCallback();return this},toArray:function(a,b){void 0===a&&(a=[]);void 0===b&&(b=0);a[b]=this._x;a[b+1]=this._y;a[b+2]=this._z;a[b+3]=this._w;return a},fromBufferAttribute:function(a,b){this._x=a.getX(b);this._y=a.getY(b);this._z=a.getZ(b);this._w=a.getW(b);return this},_onChange:function(a){this._onChangeCallback=a;return this}, +_onChangeCallback:function(){}});var ah=new n,Hi=new Aa;Object.assign(n.prototype,{isVector3:!0,set:function(a,b,c){this.x=a;this.y=b;this.z=c;return this},setScalar:function(a){this.z=this.y=this.x=a;return this},setX:function(a){this.x=a;return this},setY:function(a){this.y=a;return this},setZ:function(a){this.z=a;return this},setComponent:function(a,b){switch(a){case 0:this.x=b;break;case 1:this.y=b;break;case 2:this.z=b;break;default:throw Error("index is out of range: "+a);}return this},getComponent:function(a){switch(a){case 0:return this.x; +case 1:return this.y;case 2:return this.z;default:throw Error("index is out of range: "+a);}},clone:function(){return new this.constructor(this.x,this.y,this.z)},copy:function(a){this.x=a.x;this.y=a.y;this.z=a.z;return this},add:function(a,b){if(void 0!==b)return console.warn("THREE.Vector3: .add() now only accepts one argument. Use .addVectors( a, b ) instead."),this.addVectors(a,b);this.x+=a.x;this.y+=a.y;this.z+=a.z;return this},addScalar:function(a){this.x+=a;this.y+=a;this.z+=a;return this}, +addVectors:function(a,b){this.x=a.x+b.x;this.y=a.y+b.y;this.z=a.z+b.z;return this},addScaledVector:function(a,b){this.x+=a.x*b;this.y+=a.y*b;this.z+=a.z*b;return this},sub:function(a,b){if(void 0!==b)return console.warn("THREE.Vector3: .sub() now only accepts one argument. Use .subVectors( a, b ) instead."),this.subVectors(a,b);this.x-=a.x;this.y-=a.y;this.z-=a.z;return this},subScalar:function(a){this.x-=a;this.y-=a;this.z-=a;return this},subVectors:function(a,b){this.x=a.x-b.x;this.y=a.y-b.y;this.z= +a.z-b.z;return this},multiply:function(a,b){if(void 0!==b)return console.warn("THREE.Vector3: .multiply() now only accepts one argument. Use .multiplyVectors( a, b ) instead."),this.multiplyVectors(a,b);this.x*=a.x;this.y*=a.y;this.z*=a.z;return this},multiplyScalar:function(a){this.x*=a;this.y*=a;this.z*=a;return this},multiplyVectors:function(a,b){this.x=a.x*b.x;this.y=a.y*b.y;this.z=a.z*b.z;return this},applyEuler:function(a){a&&a.isEuler||console.error("THREE.Vector3: .applyEuler() now expects an Euler rotation rather than a Vector3 and order."); +return this.applyQuaternion(Hi.setFromEuler(a))},applyAxisAngle:function(a,b){return this.applyQuaternion(Hi.setFromAxisAngle(a,b))},applyMatrix3:function(a){var b=this.x,c=this.y,d=this.z;a=a.elements;this.x=a[0]*b+a[3]*c+a[6]*d;this.y=a[1]*b+a[4]*c+a[7]*d;this.z=a[2]*b+a[5]*c+a[8]*d;return this},applyNormalMatrix:function(a){return this.applyMatrix3(a).normalize()},applyMatrix4:function(a){var b=this.x,c=this.y,d=this.z;a=a.elements;var e=1/(a[3]*b+a[7]*c+a[11]*d+a[15]);this.x=(a[0]*b+a[4]*c+a[8]* +d+a[12])*e;this.y=(a[1]*b+a[5]*c+a[9]*d+a[13])*e;this.z=(a[2]*b+a[6]*c+a[10]*d+a[14])*e;return this},applyQuaternion:function(a){var b=this.x,c=this.y,d=this.z,e=a.x,f=a.y,g=a.z;a=a.w;var h=a*b+f*d-g*c,l=a*c+g*b-e*d,m=a*d+e*c-f*b;b=-e*b-f*c-g*d;this.x=h*a+b*-e+l*-g-m*-f;this.y=l*a+b*-f+m*-e-h*-g;this.z=m*a+b*-g+h*-f-l*-e;return this},project:function(a){return this.applyMatrix4(a.matrixWorldInverse).applyMatrix4(a.projectionMatrix)},unproject:function(a){return this.applyMatrix4(a.projectionMatrixInverse).applyMatrix4(a.matrixWorld)}, +transformDirection:function(a){var b=this.x,c=this.y,d=this.z;a=a.elements;this.x=a[0]*b+a[4]*c+a[8]*d;this.y=a[1]*b+a[5]*c+a[9]*d;this.z=a[2]*b+a[6]*c+a[10]*d;return this.normalize()},divide:function(a){this.x/=a.x;this.y/=a.y;this.z/=a.z;return this},divideScalar:function(a){return this.multiplyScalar(1/a)},min:function(a){this.x=Math.min(this.x,a.x);this.y=Math.min(this.y,a.y);this.z=Math.min(this.z,a.z);return this},max:function(a){this.x=Math.max(this.x,a.x);this.y=Math.max(this.y,a.y);this.z= +Math.max(this.z,a.z);return this},clamp:function(a,b){this.x=Math.max(a.x,Math.min(b.x,this.x));this.y=Math.max(a.y,Math.min(b.y,this.y));this.z=Math.max(a.z,Math.min(b.z,this.z));return this},clampScalar:function(a,b){this.x=Math.max(a,Math.min(b,this.x));this.y=Math.max(a,Math.min(b,this.y));this.z=Math.max(a,Math.min(b,this.z));return this},clampLength:function(a,b){var c=this.length();return this.divideScalar(c||1).multiplyScalar(Math.max(a,Math.min(b,c)))},floor:function(){this.x=Math.floor(this.x); +this.y=Math.floor(this.y);this.z=Math.floor(this.z);return this},ceil:function(){this.x=Math.ceil(this.x);this.y=Math.ceil(this.y);this.z=Math.ceil(this.z);return this},round:function(){this.x=Math.round(this.x);this.y=Math.round(this.y);this.z=Math.round(this.z);return this},roundToZero:function(){this.x=0>this.x?Math.ceil(this.x):Math.floor(this.x);this.y=0>this.y?Math.ceil(this.y):Math.floor(this.y);this.z=0>this.z?Math.ceil(this.z):Math.floor(this.z);return this},negate:function(){this.x=-this.x; +this.y=-this.y;this.z=-this.z;return this},dot:function(a){return this.x*a.x+this.y*a.y+this.z*a.z},lengthSq:function(){return this.x*this.x+this.y*this.y+this.z*this.z},length:function(){return Math.sqrt(this.x*this.x+this.y*this.y+this.z*this.z)},manhattanLength:function(){return Math.abs(this.x)+Math.abs(this.y)+Math.abs(this.z)},normalize:function(){return this.divideScalar(this.length()||1)},setLength:function(a){return this.normalize().multiplyScalar(a)},lerp:function(a,b){this.x+=(a.x-this.x)* +b;this.y+=(a.y-this.y)*b;this.z+=(a.z-this.z)*b;return this},lerpVectors:function(a,b,c){return this.subVectors(b,a).multiplyScalar(c).add(a)},cross:function(a,b){return void 0!==b?(console.warn("THREE.Vector3: .cross() now only accepts one argument. Use .crossVectors( a, b ) instead."),this.crossVectors(a,b)):this.crossVectors(this,a)},crossVectors:function(a,b){var c=a.x,d=a.y;a=a.z;var e=b.x,f=b.y;b=b.z;this.x=d*b-a*f;this.y=a*e-c*b;this.z=c*f-d*e;return this},projectOnVector:function(a){var b= +a.lengthSq();if(0===b)return this.set(0,0,0);b=a.dot(this)/b;return this.copy(a).multiplyScalar(b)},projectOnPlane:function(a){ah.copy(this).projectOnVector(a);return this.sub(ah)},reflect:function(a){return this.sub(ah.copy(a).multiplyScalar(2*this.dot(a)))},angleTo:function(a){var b=Math.sqrt(this.lengthSq()*a.lengthSq());if(0===b)return Math.PI/2;a=this.dot(a)/b;return Math.acos(L.clamp(a,-1,1))},distanceTo:function(a){return Math.sqrt(this.distanceToSquared(a))},distanceToSquared:function(a){var b= +this.x-a.x,c=this.y-a.y;a=this.z-a.z;return b*b+c*c+a*a},manhattanDistanceTo:function(a){return Math.abs(this.x-a.x)+Math.abs(this.y-a.y)+Math.abs(this.z-a.z)},setFromSpherical:function(a){return this.setFromSphericalCoords(a.radius,a.phi,a.theta)},setFromSphericalCoords:function(a,b,c){var d=Math.sin(b)*a;this.x=d*Math.sin(c);this.y=Math.cos(b)*a;this.z=d*Math.cos(c);return this},setFromCylindrical:function(a){return this.setFromCylindricalCoords(a.radius,a.theta,a.y)},setFromCylindricalCoords:function(a, +b,c){this.x=a*Math.sin(b);this.y=c;this.z=a*Math.cos(b);return this},setFromMatrixPosition:function(a){a=a.elements;this.x=a[12];this.y=a[13];this.z=a[14];return this},setFromMatrixScale:function(a){var b=this.setFromMatrixColumn(a,0).length(),c=this.setFromMatrixColumn(a,1).length();a=this.setFromMatrixColumn(a,2).length();this.x=b;this.y=c;this.z=a;return this},setFromMatrixColumn:function(a,b){return this.fromArray(a.elements,4*b)},setFromMatrix3Column:function(a,b){return this.fromArray(a.elements, +3*b)},equals:function(a){return a.x===this.x&&a.y===this.y&&a.z===this.z},fromArray:function(a,b){void 0===b&&(b=0);this.x=a[b];this.y=a[b+1];this.z=a[b+2];return this},toArray:function(a,b){void 0===a&&(a=[]);void 0===b&&(b=0);a[b]=this.x;a[b+1]=this.y;a[b+2]=this.z;return a},fromBufferAttribute:function(a,b,c){void 0!==c&&console.warn("THREE.Vector3: offset has been removed from .fromBufferAttribute().");this.x=a.getX(b);this.y=a.getY(b);this.z=a.getZ(b);return this}});var od=new n,X=new P,Rk=new n(0, +0,0),Sk=new n(1,1,1),Mb=new n,Df=new n,qa=new n;Object.assign(P.prototype,{isMatrix4:!0,set:function(a,b,c,d,e,f,g,h,l,m,k,p,n,r,q,v){var u=this.elements;u[0]=a;u[4]=b;u[8]=c;u[12]=d;u[1]=e;u[5]=f;u[9]=g;u[13]=h;u[2]=l;u[6]=m;u[10]=k;u[14]=p;u[3]=n;u[7]=r;u[11]=q;u[15]=v;return this},identity:function(){this.set(1,0,0,0,0,1,0,0,0,0,1,0,0,0,0,1);return this},clone:function(){return(new P).fromArray(this.elements)},copy:function(a){var b=this.elements;a=a.elements;b[0]=a[0];b[1]=a[1];b[2]=a[2];b[3]= +a[3];b[4]=a[4];b[5]=a[5];b[6]=a[6];b[7]=a[7];b[8]=a[8];b[9]=a[9];b[10]=a[10];b[11]=a[11];b[12]=a[12];b[13]=a[13];b[14]=a[14];b[15]=a[15];return this},copyPosition:function(a){var b=this.elements;a=a.elements;b[12]=a[12];b[13]=a[13];b[14]=a[14];return this},extractBasis:function(a,b,c){a.setFromMatrixColumn(this,0);b.setFromMatrixColumn(this,1);c.setFromMatrixColumn(this,2);return this},makeBasis:function(a,b,c){this.set(a.x,b.x,c.x,0,a.y,b.y,c.y,0,a.z,b.z,c.z,0,0,0,0,1);return this},extractRotation:function(a){var b= +this.elements,c=a.elements,d=1/od.setFromMatrixColumn(a,0).length(),e=1/od.setFromMatrixColumn(a,1).length();a=1/od.setFromMatrixColumn(a,2).length();b[0]=c[0]*d;b[1]=c[1]*d;b[2]=c[2]*d;b[3]=0;b[4]=c[4]*e;b[5]=c[5]*e;b[6]=c[6]*e;b[7]=0;b[8]=c[8]*a;b[9]=c[9]*a;b[10]=c[10]*a;b[11]=0;b[12]=0;b[13]=0;b[14]=0;b[15]=1;return this},makeRotationFromEuler:function(a){a&&a.isEuler||console.error("THREE.Matrix4: .makeRotationFromEuler() now expects a Euler rotation rather than a Vector3 and order.");var b=this.elements, +c=a.x,d=a.y,e=a.z,f=Math.cos(c);c=Math.sin(c);var g=Math.cos(d);d=Math.sin(d);var h=Math.cos(e);e=Math.sin(e);if("XYZ"===a.order){a=f*h;var l=f*e,m=c*h,k=c*e;b[0]=g*h;b[4]=-g*e;b[8]=d;b[1]=l+m*d;b[5]=a-k*d;b[9]=-c*g;b[2]=k-a*d;b[6]=m+l*d;b[10]=f*g}else"YXZ"===a.order?(a=g*h,l=g*e,m=d*h,k=d*e,b[0]=a+k*c,b[4]=m*c-l,b[8]=f*d,b[1]=f*e,b[5]=f*h,b[9]=-c,b[2]=l*c-m,b[6]=k+a*c,b[10]=f*g):"ZXY"===a.order?(a=g*h,l=g*e,m=d*h,k=d*e,b[0]=a-k*c,b[4]=-f*e,b[8]=m+l*c,b[1]=l+m*c,b[5]=f*h,b[9]=k-a*c,b[2]=-f*d,b[6]= +c,b[10]=f*g):"ZYX"===a.order?(a=f*h,l=f*e,m=c*h,k=c*e,b[0]=g*h,b[4]=m*d-l,b[8]=a*d+k,b[1]=g*e,b[5]=k*d+a,b[9]=l*d-m,b[2]=-d,b[6]=c*g,b[10]=f*g):"YZX"===a.order?(a=f*g,l=f*d,m=c*g,k=c*d,b[0]=g*h,b[4]=k-a*e,b[8]=m*e+l,b[1]=e,b[5]=f*h,b[9]=-c*h,b[2]=-d*h,b[6]=l*e+m,b[10]=a-k*e):"XZY"===a.order&&(a=f*g,l=f*d,m=c*g,k=c*d,b[0]=g*h,b[4]=-e,b[8]=d*h,b[1]=a*e+k,b[5]=f*h,b[9]=l*e-m,b[2]=m*e-l,b[6]=c*h,b[10]=k*e+a);b[3]=0;b[7]=0;b[11]=0;b[12]=0;b[13]=0;b[14]=0;b[15]=1;return this},makeRotationFromQuaternion:function(a){return this.compose(Rk, +a,Sk)},lookAt:function(a,b,c){var d=this.elements;qa.subVectors(a,b);0===qa.lengthSq()&&(qa.z=1);qa.normalize();Mb.crossVectors(c,qa);0===Mb.lengthSq()&&(1===Math.abs(c.z)?qa.x+=1E-4:qa.z+=1E-4,qa.normalize(),Mb.crossVectors(c,qa));Mb.normalize();Df.crossVectors(qa,Mb);d[0]=Mb.x;d[4]=Df.x;d[8]=qa.x;d[1]=Mb.y;d[5]=Df.y;d[9]=qa.y;d[2]=Mb.z;d[6]=Df.z;d[10]=qa.z;return this},multiply:function(a,b){return void 0!==b?(console.warn("THREE.Matrix4: .multiply() now only accepts one argument. Use .multiplyMatrices( a, b ) instead."), +this.multiplyMatrices(a,b)):this.multiplyMatrices(this,a)},premultiply:function(a){return this.multiplyMatrices(a,this)},multiplyMatrices:function(a,b){var c=a.elements,d=b.elements;b=this.elements;a=c[0];var e=c[4],f=c[8],g=c[12],h=c[1],l=c[5],m=c[9],k=c[13],p=c[2],n=c[6],r=c[10],q=c[14],v=c[3],t=c[7],w=c[11];c=c[15];var z=d[0],A=d[4],C=d[8],y=d[12],B=d[1],D=d[5],F=d[9],G=d[13],K=d[2],H=d[6],L=d[10],M=d[14],N=d[3],O=d[7],P=d[11];d=d[15];b[0]=a*z+e*B+f*K+g*N;b[4]=a*A+e*D+f*H+g*O;b[8]=a*C+e*F+f*L+ +g*P;b[12]=a*y+e*G+f*M+g*d;b[1]=h*z+l*B+m*K+k*N;b[5]=h*A+l*D+m*H+k*O;b[9]=h*C+l*F+m*L+k*P;b[13]=h*y+l*G+m*M+k*d;b[2]=p*z+n*B+r*K+q*N;b[6]=p*A+n*D+r*H+q*O;b[10]=p*C+n*F+r*L+q*P;b[14]=p*y+n*G+r*M+q*d;b[3]=v*z+t*B+w*K+c*N;b[7]=v*A+t*D+w*H+c*O;b[11]=v*C+t*F+w*L+c*P;b[15]=v*y+t*G+w*M+c*d;return this},multiplyScalar:function(a){var b=this.elements;b[0]*=a;b[4]*=a;b[8]*=a;b[12]*=a;b[1]*=a;b[5]*=a;b[9]*=a;b[13]*=a;b[2]*=a;b[6]*=a;b[10]*=a;b[14]*=a;b[3]*=a;b[7]*=a;b[11]*=a;b[15]*=a;return this},determinant:function(){var a= +this.elements,b=a[0],c=a[4],d=a[8],e=a[12],f=a[1],g=a[5],h=a[9],l=a[13],m=a[2],k=a[6],p=a[10],n=a[14];return a[3]*(+e*h*k-d*l*k-e*g*p+c*l*p+d*g*n-c*h*n)+a[7]*(+b*h*n-b*l*p+e*f*p-d*f*n+d*l*m-e*h*m)+a[11]*(+b*l*k-b*g*n-e*f*k+c*f*n+e*g*m-c*l*m)+a[15]*(-d*g*m-b*h*k+b*g*p+d*f*k-c*f*p+c*h*m)},transpose:function(){var a=this.elements;var b=a[1];a[1]=a[4];a[4]=b;b=a[2];a[2]=a[8];a[8]=b;b=a[6];a[6]=a[9];a[9]=b;b=a[3];a[3]=a[12];a[12]=b;b=a[7];a[7]=a[13];a[13]=b;b=a[11];a[11]=a[14];a[14]=b;return this},setPosition:function(a, +b,c){var d=this.elements;a.isVector3?(d[12]=a.x,d[13]=a.y,d[14]=a.z):(d[12]=a,d[13]=b,d[14]=c);return this},getInverse:function(a,b){void 0!==b&&console.warn("THREE.Matrix4: .getInverse() can no longer be configured to throw on degenerate.");b=this.elements;var c=a.elements;a=c[0];var d=c[1],e=c[2],f=c[3],g=c[4],h=c[5],l=c[6],m=c[7],k=c[8],p=c[9],n=c[10],r=c[11],q=c[12],v=c[13],t=c[14];c=c[15];var w=p*t*m-v*n*m+v*l*r-h*t*r-p*l*c+h*n*c,z=q*n*m-k*t*m-q*l*r+g*t*r+k*l*c-g*n*c,A=k*v*m-q*p*m+q*h*r-g*v* +r-k*h*c+g*p*c,C=q*p*l-k*v*l-q*h*n+g*v*n+k*h*t-g*p*t,y=a*w+d*z+e*A+f*C;if(0===y)return this.set(0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0);y=1/y;b[0]=w*y;b[1]=(v*n*f-p*t*f-v*e*r+d*t*r+p*e*c-d*n*c)*y;b[2]=(h*t*f-v*l*f+v*e*m-d*t*m-h*e*c+d*l*c)*y;b[3]=(p*l*f-h*n*f-p*e*m+d*n*m+h*e*r-d*l*r)*y;b[4]=z*y;b[5]=(k*t*f-q*n*f+q*e*r-a*t*r-k*e*c+a*n*c)*y;b[6]=(q*l*f-g*t*f-q*e*m+a*t*m+g*e*c-a*l*c)*y;b[7]=(g*n*f-k*l*f+k*e*m-a*n*m-g*e*r+a*l*r)*y;b[8]=A*y;b[9]=(q*p*f-k*v*f-q*d*r+a*v*r+k*d*c-a*p*c)*y;b[10]=(g*v*f-q*h*f+q*d*m- +a*v*m-g*d*c+a*h*c)*y;b[11]=(k*h*f-g*p*f-k*d*m+a*p*m+g*d*r-a*h*r)*y;b[12]=C*y;b[13]=(k*v*e-q*p*e+q*d*n-a*v*n-k*d*t+a*p*t)*y;b[14]=(q*h*e-g*v*e-q*d*l+a*v*l+g*d*t-a*h*t)*y;b[15]=(g*p*e-k*h*e+k*d*l-a*p*l-g*d*n+a*h*n)*y;return this},scale:function(a){var b=this.elements,c=a.x,d=a.y;a=a.z;b[0]*=c;b[4]*=d;b[8]*=a;b[1]*=c;b[5]*=d;b[9]*=a;b[2]*=c;b[6]*=d;b[10]*=a;b[3]*=c;b[7]*=d;b[11]*=a;return this},getMaxScaleOnAxis:function(){var a=this.elements;return Math.sqrt(Math.max(a[0]*a[0]+a[1]*a[1]+a[2]*a[2],a[4]* +a[4]+a[5]*a[5]+a[6]*a[6],a[8]*a[8]+a[9]*a[9]+a[10]*a[10]))},makeTranslation:function(a,b,c){this.set(1,0,0,a,0,1,0,b,0,0,1,c,0,0,0,1);return this},makeRotationX:function(a){var b=Math.cos(a);a=Math.sin(a);this.set(1,0,0,0,0,b,-a,0,0,a,b,0,0,0,0,1);return this},makeRotationY:function(a){var b=Math.cos(a);a=Math.sin(a);this.set(b,0,a,0,0,1,0,0,-a,0,b,0,0,0,0,1);return this},makeRotationZ:function(a){var b=Math.cos(a);a=Math.sin(a);this.set(b,-a,0,0,a,b,0,0,0,0,1,0,0,0,0,1);return this},makeRotationAxis:function(a, +b){var c=Math.cos(b);b=Math.sin(b);var d=1-c,e=a.x,f=a.y;a=a.z;var g=d*e,h=d*f;this.set(g*e+c,g*f-b*a,g*a+b*f,0,g*f+b*a,h*f+c,h*a-b*e,0,g*a-b*f,h*a+b*e,d*a*a+c,0,0,0,0,1);return this},makeScale:function(a,b,c){this.set(a,0,0,0,0,b,0,0,0,0,c,0,0,0,0,1);return this},makeShear:function(a,b,c){this.set(1,b,c,0,a,1,c,0,a,b,1,0,0,0,0,1);return this},compose:function(a,b,c){var d=this.elements,e=b._x,f=b._y,g=b._z,h=b._w,l=e+e,m=f+f,k=g+g;b=e*l;var p=e*m;e*=k;var n=f*m;f*=k;g*=k;l*=h;m*=h;h*=k;k=c.x;var r= +c.y;c=c.z;d[0]=(1-(n+g))*k;d[1]=(p+h)*k;d[2]=(e-m)*k;d[3]=0;d[4]=(p-h)*r;d[5]=(1-(b+g))*r;d[6]=(f+l)*r;d[7]=0;d[8]=(e+m)*c;d[9]=(f-l)*c;d[10]=(1-(b+n))*c;d[11]=0;d[12]=a.x;d[13]=a.y;d[14]=a.z;d[15]=1;return this},decompose:function(a,b,c){var d=this.elements,e=od.set(d[0],d[1],d[2]).length(),f=od.set(d[4],d[5],d[6]).length(),g=od.set(d[8],d[9],d[10]).length();0>this.determinant()&&(e=-e);a.x=d[12];a.y=d[13];a.z=d[14];X.copy(this);a=1/e;d=1/f;var h=1/g;X.elements[0]*=a;X.elements[1]*=a;X.elements[2]*= +a;X.elements[4]*=d;X.elements[5]*=d;X.elements[6]*=d;X.elements[8]*=h;X.elements[9]*=h;X.elements[10]*=h;b.setFromRotationMatrix(X);c.x=e;c.y=f;c.z=g;return this},makePerspective:function(a,b,c,d,e,f){void 0===f&&console.warn("THREE.Matrix4: .makePerspective() has been redefined and has a new signature. Please check the docs.");var g=this.elements;g[0]=2*e/(b-a);g[4]=0;g[8]=(b+a)/(b-a);g[12]=0;g[1]=0;g[5]=2*e/(c-d);g[9]=(c+d)/(c-d);g[13]=0;g[2]=0;g[6]=0;g[10]=-(f+e)/(f-e);g[14]=-2*f*e/(f-e);g[3]= +0;g[7]=0;g[11]=-1;g[15]=0;return this},makeOrthographic:function(a,b,c,d,e,f){var g=this.elements,h=1/(b-a),l=1/(c-d),m=1/(f-e);g[0]=2*h;g[4]=0;g[8]=0;g[12]=-((b+a)*h);g[1]=0;g[5]=2*l;g[9]=0;g[13]=-((c+d)*l);g[2]=0;g[6]=0;g[10]=-2*m;g[14]=-((f+e)*m);g[3]=0;g[7]=0;g[11]=0;g[15]=1;return this},equals:function(a){var b=this.elements;a=a.elements;for(var c=0;16>c;c++)if(b[c]!==a[c])return!1;return!0},fromArray:function(a,b){void 0===b&&(b=0);for(var c=0;16>c;c++)this.elements[c]=a[c+b];return this},toArray:function(a, +b){void 0===a&&(a=[]);void 0===b&&(b=0);var c=this.elements;a[b]=c[0];a[b+1]=c[1];a[b+2]=c[2];a[b+3]=c[3];a[b+4]=c[4];a[b+5]=c[5];a[b+6]=c[6];a[b+7]=c[7];a[b+8]=c[8];a[b+9]=c[9];a[b+10]=c[10];a[b+11]=c[11];a[b+12]=c[12];a[b+13]=c[13];a[b+14]=c[14];a[b+15]=c[15];return a}});var Ii=new P,Ji=new Aa;Tb.RotationOrders="XYZ YZX ZXY XZY YXZ ZYX".split(" ");Tb.DefaultOrder="XYZ";Object.defineProperties(Tb.prototype,{x:{get:function(){return this._x},set:function(a){this._x=a;this._onChangeCallback()}},y:{get:function(){return this._y}, +set:function(a){this._y=a;this._onChangeCallback()}},z:{get:function(){return this._z},set:function(a){this._z=a;this._onChangeCallback()}},order:{get:function(){return this._order},set:function(a){this._order=a;this._onChangeCallback()}}});Object.assign(Tb.prototype,{isEuler:!0,set:function(a,b,c,d){this._x=a;this._y=b;this._z=c;this._order=d||this._order;this._onChangeCallback();return this},clone:function(){return new this.constructor(this._x,this._y,this._z,this._order)},copy:function(a){this._x= +a._x;this._y=a._y;this._z=a._z;this._order=a._order;this._onChangeCallback();return this},setFromRotationMatrix:function(a,b,c){var d=L.clamp,e=a.elements;a=e[0];var f=e[4],g=e[8],h=e[1],l=e[5],m=e[9],k=e[2],p=e[6];e=e[10];b=b||this._order;"XYZ"===b?(this._y=Math.asin(d(g,-1,1)),.9999999>Math.abs(g)?(this._x=Math.atan2(-m,e),this._z=Math.atan2(-f,a)):(this._x=Math.atan2(p,l),this._z=0)):"YXZ"===b?(this._x=Math.asin(-d(m,-1,1)),.9999999>Math.abs(m)?(this._y=Math.atan2(g,e),this._z=Math.atan2(h,l)): +(this._y=Math.atan2(-k,a),this._z=0)):"ZXY"===b?(this._x=Math.asin(d(p,-1,1)),.9999999>Math.abs(p)?(this._y=Math.atan2(-k,e),this._z=Math.atan2(-f,l)):(this._y=0,this._z=Math.atan2(h,a))):"ZYX"===b?(this._y=Math.asin(-d(k,-1,1)),.9999999>Math.abs(k)?(this._x=Math.atan2(p,e),this._z=Math.atan2(h,a)):(this._x=0,this._z=Math.atan2(-f,l))):"YZX"===b?(this._z=Math.asin(d(h,-1,1)),.9999999>Math.abs(h)?(this._x=Math.atan2(-m,l),this._y=Math.atan2(-k,a)):(this._x=0,this._y=Math.atan2(g,e))):"XZY"===b?(this._z= +Math.asin(-d(f,-1,1)),.9999999>Math.abs(f)?(this._x=Math.atan2(p,l),this._y=Math.atan2(g,a)):(this._x=Math.atan2(-m,e),this._y=0)):console.warn("THREE.Euler: .setFromRotationMatrix() given unsupported order: "+b);this._order=b;!1!==c&&this._onChangeCallback();return this},setFromQuaternion:function(a,b,c){Ii.makeRotationFromQuaternion(a);return this.setFromRotationMatrix(Ii,b,c)},setFromVector3:function(a,b){return this.set(a.x,a.y,a.z,b||this._order)},reorder:function(a){Ji.setFromEuler(this);return this.setFromQuaternion(Ji, +a)},equals:function(a){return a._x===this._x&&a._y===this._y&&a._z===this._z&&a._order===this._order},fromArray:function(a){this._x=a[0];this._y=a[1];this._z=a[2];void 0!==a[3]&&(this._order=a[3]);this._onChangeCallback();return this},toArray:function(a,b){void 0===a&&(a=[]);void 0===b&&(b=0);a[b]=this._x;a[b+1]=this._y;a[b+2]=this._z;a[b+3]=this._order;return a},toVector3:function(a){return a?a.set(this._x,this._y,this._z):new n(this._x,this._y,this._z)},_onChange:function(a){this._onChangeCallback= +a;return this},_onChangeCallback:function(){}});Object.assign(He.prototype,{set:function(a){this.mask=1<e&&(e=m);k>f&&(f=k);p>g&&(g=p)}this.min.set(b,c,d);this.max.set(e,f,g);return this},setFromBufferAttribute:function(a){for(var b=Infinity,c=Infinity,d=Infinity,e=-Infinity,f=-Infinity,g=-Infinity,h=0,l=a.count;he&&(e=m);k>f&&(f=k);p>g&&(g=p)}this.min.set(b,c,d);this.max.set(e,f,g);return this},setFromPoints:function(a){this.makeEmpty();for(var b=0,c=a.length;bthis.max.x||a.ythis.max.y||a.zthis.max.z?!1:!0},containsBox:function(a){return this.min.x<=a.min.x&&a.max.x<=this.max.x&&this.min.y<=a.min.y&&a.max.y<=this.max.y&&this.min.z<=a.min.z&&a.max.z<=this.max.z},getParameter:function(a,b){void 0===b&&(console.warn("THREE.Box3: .getParameter() target is now required"),b=new n);return b.set((a.x-this.min.x)/(this.max.x-this.min.x),(a.y-this.min.y)/(this.max.y-this.min.y),(a.z-this.min.z)/(this.max.z-this.min.z))},intersectsBox:function(a){return a.max.xthis.max.x|| +a.max.ythis.max.y||a.max.zthis.max.z?!1:!0},intersectsSphere:function(a){this.clampPoint(a.center,ze);return ze.distanceToSquared(a.center)<=a.radius*a.radius},intersectsPlane:function(a){if(0=-a.constant},intersectsTriangle:function(a){if(this.isEmpty())return!1;this.getCenter(Ae);Ff.subVectors(this.max,Ae);qd.subVectors(a.a,Ae);rd.subVectors(a.b,Ae);sd.subVectors(a.c,Ae);Nb.subVectors(rd,qd);Ob.subVectors(sd,rd);sc.subVectors(qd,sd);a=[0,-Nb.z,Nb.y,0,-Ob.z,Ob.y,0,-sc.z,sc.y,Nb.z,0,-Nb.x,Ob.z,0,-Ob.x,sc.z,0,-sc.x,-Nb.y,Nb.x,0,-Ob.y,Ob.x,0,-sc.y,sc.x,0];if(!$f(a,qd,rd,sd,Ff))return!1; +a=[1,0,0,0,1,0,0,0,1];if(!$f(a,qd,rd,sd,Ff))return!1;Gf.crossVectors(Nb,Ob);a=[Gf.x,Gf.y,Gf.z];return $f(a,qd,rd,sd,Ff)},clampPoint:function(a,b){void 0===b&&(console.warn("THREE.Box3: .clampPoint() target is now required"),b=new n);return b.copy(a).clamp(this.min,this.max)},distanceToPoint:function(a){return ze.copy(a).clamp(this.min,this.max).sub(a).length()},getBoundingSphere:function(a){void 0===a&&console.error("THREE.Box3: .getBoundingSphere() target is now required");this.getCenter(a.center); +a.radius=.5*this.getSize(ze).length();return a},intersect:function(a){this.min.max(a.min);this.max.min(a.max);this.isEmpty()&&this.makeEmpty();return this},union:function(a){this.min.min(a.min);this.max.max(a.max);return this},applyMatrix4:function(a){if(this.isEmpty())return this;zb[0].set(this.min.x,this.min.y,this.min.z).applyMatrix4(a);zb[1].set(this.min.x,this.min.y,this.max.z).applyMatrix4(a);zb[2].set(this.min.x,this.max.y,this.min.z).applyMatrix4(a);zb[3].set(this.min.x,this.max.y,this.max.z).applyMatrix4(a); +zb[4].set(this.max.x,this.min.y,this.min.z).applyMatrix4(a);zb[5].set(this.max.x,this.min.y,this.max.z).applyMatrix4(a);zb[6].set(this.max.x,this.max.y,this.min.z).applyMatrix4(a);zb[7].set(this.max.x,this.max.y,this.max.z).applyMatrix4(a);this.setFromPoints(zb);return this},translate:function(a){this.min.add(a);this.max.add(a);return this},equals:function(a){return a.min.equals(this.min)&&a.max.equals(this.max)}});var Xk=new Sa;Object.assign(pb.prototype,{set:function(a,b){this.center.copy(a);this.radius= +b;return this},setFromPoints:function(a,b){var c=this.center;void 0!==b?c.copy(b):Xk.setFromPoints(a).getCenter(c);for(var d=b=0,e=a.length;d=this.radius},containsPoint:function(a){return a.distanceToSquared(this.center)<=this.radius*this.radius},distanceToPoint:function(a){return a.distanceTo(this.center)- +this.radius},intersectsSphere:function(a){var b=this.radius+a.radius;return a.center.distanceToSquared(this.center)<=b*b},intersectsBox:function(a){return a.intersectsSphere(this)},intersectsPlane:function(a){return Math.abs(a.distanceToPoint(this.center))<=this.radius},clampPoint:function(a,b){var c=this.center.distanceToSquared(a);void 0===b&&(console.warn("THREE.Sphere: .clampPoint() target is now required"),b=new n);b.copy(a);c>this.radius*this.radius&&(b.sub(this.center).normalize(),b.multiplyScalar(this.radius).add(this.center)); +return b},getBoundingBox:function(a){void 0===a&&(console.warn("THREE.Sphere: .getBoundingBox() target is now required"),a=new Sa);a.set(this.center,this.center);a.expandByScalar(this.radius);return a},applyMatrix4:function(a){this.center.applyMatrix4(a);this.radius*=a.getMaxScaleOnAxis();return this},translate:function(a){this.center.add(a);return this},equals:function(a){return a.center.equals(this.center)&&a.radius===this.radius}});var Ab=new n,ch=new n,Hf=new n,Pb=new n,dh=new n,If=new n,eh=new n; +Object.assign(Vb.prototype,{set:function(a,b){this.origin.copy(a);this.direction.copy(b);return this},clone:function(){return(new this.constructor).copy(this)},copy:function(a){this.origin.copy(a.origin);this.direction.copy(a.direction);return this},at:function(a,b){void 0===b&&(console.warn("THREE.Ray: .at() target is now required"),b=new n);return b.copy(this.direction).multiplyScalar(a).add(this.origin)},lookAt:function(a){this.direction.copy(a).sub(this.origin).normalize();return this},recast:function(a){this.origin.copy(this.at(a, +Ab));return this},closestPointToPoint:function(a,b){void 0===b&&(console.warn("THREE.Ray: .closestPointToPoint() target is now required"),b=new n);b.subVectors(a,this.origin);a=b.dot(this.direction);return 0>a?b.copy(this.origin):b.copy(this.direction).multiplyScalar(a).add(this.origin)},distanceToPoint:function(a){return Math.sqrt(this.distanceSqToPoint(a))},distanceSqToPoint:function(a){var b=Ab.subVectors(a,this.origin).dot(this.direction);if(0>b)return this.origin.distanceToSquared(a);Ab.copy(this.direction).multiplyScalar(b).add(this.origin); +return Ab.distanceToSquared(a)},distanceSqToSegment:function(a,b,c,d){ch.copy(a).add(b).multiplyScalar(.5);Hf.copy(b).sub(a).normalize();Pb.copy(this.origin).sub(ch);var e=.5*a.distanceTo(b),f=-this.direction.dot(Hf),g=Pb.dot(this.direction),h=-Pb.dot(Hf),l=Pb.lengthSq(),m=Math.abs(1-f*f);if(0=-k?b<=k?(e=1/m,a*=e,b*=e,f=a*(a+f*b+2*g)+b*(f*a+b+2*h)+l):(b=e,a=Math.max(0,-(f*b+g)),f=-a*a+b*(b+2*h)+l):(b=-e,a=Math.max(0,-(f*b+g)),f=-a*a+b*(b+2*h)+l):b<=-k?(a=Math.max(0, +-(-f*e+g)),b=0a)return null;a=Math.sqrt(a-d);d=c-a;c+=a;return 0>d&&0>c?null:0>d?this.at(c,b):this.at(d,b)},intersectsSphere:function(a){return this.distanceSqToPoint(a.center)<=a.radius*a.radius},distanceToPlane:function(a){var b=a.normal.dot(this.direction);if(0===b)return 0===a.distanceToPoint(this.origin)?0:null;a=-(this.origin.dot(a.normal)+a.constant)/b;return 0<=a?a:null},intersectPlane:function(a,b){a=this.distanceToPlane(a);return null===a?null:this.at(a,b)},intersectsPlane:function(a){var b=a.distanceToPoint(this.origin); +return 0===b||0>a.normal.dot(this.direction)*b?!0:!1},intersectBox:function(a,b){var c=1/this.direction.x;var d=1/this.direction.y;var e=1/this.direction.z,f=this.origin;if(0<=c){var g=(a.min.x-f.x)*c;c*=a.max.x-f.x}else g=(a.max.x-f.x)*c,c*=a.min.x-f.x;if(0<=d){var h=(a.min.y-f.y)*d;d*=a.max.y-f.y}else h=(a.max.y-f.y)*d,d*=a.min.y-f.y;if(g>d||h>c)return null;if(h>g||g!==g)g=h;if(da||h>c)return null; +if(h>g||g!==g)g=h;if(ac?null:this.at(0<=g?g:c,b)},intersectsBox:function(a){return null!==this.intersectBox(a,Ab)},intersectTriangle:function(a,b,c,d,e){dh.subVectors(b,a);If.subVectors(c,a);eh.crossVectors(dh,If);b=this.direction.dot(eh);if(0b)d=-1,b=-b;else return null;Pb.subVectors(this.origin,a);a=d*this.direction.dot(If.crossVectors(Pb,If));if(0>a)return null;c=d*this.direction.dot(dh.cross(Pb));if(0>c||a+c>b)return null;a=-d*Pb.dot(eh); +return 0>a?null:this.at(a/b,e)},applyMatrix4:function(a){this.origin.applyMatrix4(a);this.direction.transformDirection(a);return this},equals:function(a){return a.origin.equals(this.origin)&&a.direction.equals(this.direction)}});var fh=new n,Yk=new n,Zk=new wa;Object.assign(Ta.prototype,{isPlane:!0,set:function(a,b){this.normal.copy(a);this.constant=b;return this},setComponents:function(a,b,c,d){this.normal.set(a,b,c);this.constant=d;return this},setFromNormalAndCoplanarPoint:function(a,b){this.normal.copy(a); +this.constant=-b.dot(this.normal);return this},setFromCoplanarPoints:function(a,b,c){b=fh.subVectors(c,b).cross(Yk.subVectors(a,b)).normalize();this.setFromNormalAndCoplanarPoint(b,a);return this},clone:function(){return(new this.constructor).copy(this)},copy:function(a){this.normal.copy(a.normal);this.constant=a.constant;return this},normalize:function(){var a=1/this.normal.length();this.normal.multiplyScalar(a);this.constant*=a;return this},negate:function(){this.constant*=-1;this.normal.negate(); +return this},distanceToPoint:function(a){return this.normal.dot(a)+this.constant},distanceToSphere:function(a){return this.distanceToPoint(a.center)-a.radius},projectPoint:function(a,b){void 0===b&&(console.warn("THREE.Plane: .projectPoint() target is now required"),b=new n);return b.copy(this.normal).multiplyScalar(-this.distanceToPoint(a)).add(a)},intersectLine:function(a,b){void 0===b&&(console.warn("THREE.Plane: .intersectLine() target is now required"),b=new n);var c=a.delta(fh),d=this.normal.dot(c); +if(0===d){if(0===this.distanceToPoint(a.start))return b.copy(a.start)}else if(d=-(a.start.dot(this.normal)+this.constant)/d,!(0>d||1b&&0a&&0=Cb.x+Cb.y},getUV:function(a,b,c,d,e,f,g,h){this.getBarycoord(a,b,c,d,Cb);h.set(0,0);h.addScaledVector(e,Cb.x);h.addScaledVector(f,Cb.y);h.addScaledVector(g,Cb.z);return h},isFrontFacing:function(a,b,c,d){bb.subVectors(c,b);Bb.subVectors(a,b);return 0>bb.cross(Bb).dot(d)?!0:!1}});Object.assign(oa.prototype,{set:function(a, +b,c){this.a.copy(a);this.b.copy(b);this.c.copy(c);return this},setFromPointsAndIndices:function(a,b,c,d){this.a.copy(a[b]);this.b.copy(a[c]);this.c.copy(a[d]);return this},clone:function(){return(new this.constructor).copy(this)},copy:function(a){this.a.copy(a.a);this.b.copy(a.b);this.c.copy(a.c);return this},getArea:function(){bb.subVectors(this.c,this.b);Bb.subVectors(this.a,this.b);return.5*bb.cross(Bb).length()},getMidpoint:function(a){void 0===a&&(console.warn("THREE.Triangle: .getMidpoint() target is now required"), +a=new n);return a.addVectors(this.a,this.b).add(this.c).multiplyScalar(1/3)},getNormal:function(a){return oa.getNormal(this.a,this.b,this.c,a)},getPlane:function(a){void 0===a&&(console.warn("THREE.Triangle: .getPlane() target is now required"),a=new Ta);return a.setFromCoplanarPoints(this.a,this.b,this.c)},getBarycoord:function(a,b){return oa.getBarycoord(a,this.a,this.b,this.c,b)},getUV:function(a,b,c,d,e){return oa.getUV(a,this.a,this.b,this.c,b,c,d,e)},containsPoint:function(a){return oa.containsPoint(a, +this.a,this.b,this.c)},isFrontFacing:function(a){return oa.isFrontFacing(this.a,this.b,this.c,a)},intersectsBox:function(a){return a.intersectsTriangle(this)},closestPointToPoint:function(a,b){void 0===b&&(console.warn("THREE.Triangle: .closestPointToPoint() target is now required"),b=new n);var c=this.a,d=this.b,e=this.c;td.subVectors(d,c);ud.subVectors(e,c);hh.subVectors(a,c);var f=td.dot(hh),g=ud.dot(hh);if(0>=f&&0>=g)return b.copy(c);ih.subVectors(a,d);var h=td.dot(ih),l=ud.dot(ih);if(0<=h&&l<= +h)return b.copy(d);var m=f*l-h*g;if(0>=m&&0<=f&&0>=h)return d=f/(f-h),b.copy(c).addScaledVector(td,d);jh.subVectors(a,e);a=td.dot(jh);var k=ud.dot(jh);if(0<=k&&a<=k)return b.copy(e);f=a*g-f*k;if(0>=f&&0<=g&&0>=k)return m=g/(g-k),b.copy(c).addScaledVector(ud,m);g=h*k-a*l;if(0>=g&&0<=l-h&&0<=a-k)return Oi.subVectors(e,d),m=(l-h)/(l-h+(a-k)),b.copy(d).addScaledVector(Oi,m);e=1/(g+f+m);d=f*e;m*=e;return b.copy(c).addScaledVector(td,d).addScaledVector(ud,m)},equals:function(a){return a.a.equals(this.a)&& +a.b.equals(this.b)&&a.c.equals(this.c)}});var Pi={aliceblue:15792383,antiquewhite:16444375,aqua:65535,aquamarine:8388564,azure:15794175,beige:16119260,bisque:16770244,black:0,blanchedalmond:16772045,blue:255,blueviolet:9055202,brown:10824234,burlywood:14596231,cadetblue:6266528,chartreuse:8388352,chocolate:13789470,coral:16744272,cornflowerblue:6591981,cornsilk:16775388,crimson:14423100,cyan:65535,darkblue:139,darkcyan:35723,darkgoldenrod:12092939,darkgray:11119017,darkgreen:25600,darkgrey:11119017, +darkkhaki:12433259,darkmagenta:9109643,darkolivegreen:5597999,darkorange:16747520,darkorchid:10040012,darkred:9109504,darksalmon:15308410,darkseagreen:9419919,darkslateblue:4734347,darkslategray:3100495,darkslategrey:3100495,darkturquoise:52945,darkviolet:9699539,deeppink:16716947,deepskyblue:49151,dimgray:6908265,dimgrey:6908265,dodgerblue:2003199,firebrick:11674146,floralwhite:16775920,forestgreen:2263842,fuchsia:16711935,gainsboro:14474460,ghostwhite:16316671,gold:16766720,goldenrod:14329120,gray:8421504, +green:32768,greenyellow:11403055,grey:8421504,honeydew:15794160,hotpink:16738740,indianred:13458524,indigo:4915330,ivory:16777200,khaki:15787660,lavender:15132410,lavenderblush:16773365,lawngreen:8190976,lemonchiffon:16775885,lightblue:11393254,lightcoral:15761536,lightcyan:14745599,lightgoldenrodyellow:16448210,lightgray:13882323,lightgreen:9498256,lightgrey:13882323,lightpink:16758465,lightsalmon:16752762,lightseagreen:2142890,lightskyblue:8900346,lightslategray:7833753,lightslategrey:7833753,lightsteelblue:11584734, +lightyellow:16777184,lime:65280,limegreen:3329330,linen:16445670,magenta:16711935,maroon:8388608,mediumaquamarine:6737322,mediumblue:205,mediumorchid:12211667,mediumpurple:9662683,mediumseagreen:3978097,mediumslateblue:8087790,mediumspringgreen:64154,mediumturquoise:4772300,mediumvioletred:13047173,midnightblue:1644912,mintcream:16121850,mistyrose:16770273,moccasin:16770229,navajowhite:16768685,navy:128,oldlace:16643558,olive:8421376,olivedrab:7048739,orange:16753920,orangered:16729344,orchid:14315734, +palegoldenrod:15657130,palegreen:10025880,paleturquoise:11529966,palevioletred:14381203,papayawhip:16773077,peachpuff:16767673,peru:13468991,pink:16761035,plum:14524637,powderblue:11591910,purple:8388736,rebeccapurple:6697881,red:16711680,rosybrown:12357519,royalblue:4286945,saddlebrown:9127187,salmon:16416882,sandybrown:16032864,seagreen:3050327,seashell:16774638,sienna:10506797,silver:12632256,skyblue:8900331,slateblue:6970061,slategray:7372944,slategrey:7372944,snow:16775930,springgreen:65407, +steelblue:4620980,tan:13808780,teal:32896,thistle:14204888,tomato:16737095,turquoise:4251856,violet:15631086,wheat:16113331,white:16777215,whitesmoke:16119285,yellow:16776960,yellowgreen:10145074},za={h:0,s:0,l:0},Jf={h:0,s:0,l:0};Object.assign(A.prototype,{isColor:!0,r:1,g:1,b:1,set:function(a){a&&a.isColor?this.copy(a):"number"===typeof a?this.setHex(a):"string"===typeof a&&this.setStyle(a);return this},setScalar:function(a){this.b=this.g=this.r=a;return this},setHex:function(a){a=Math.floor(a); +this.r=(a>>16&255)/255;this.g=(a>>8&255)/255;this.b=(a&255)/255;return this},setRGB:function(a,b,c){this.r=a;this.g=b;this.b=c;return this},setHSL:function(a,b,c){a=L.euclideanModulo(a,1);b=L.clamp(b,0,1);c=L.clamp(c,0,1);0===b?this.r=this.g=this.b=c:(b=.5>=c?c*(1+b):c+b-c*b,c=2*c-b,this.r=ag(c,b,a+1/3),this.g=ag(c,b,a),this.b=ag(c,b,a-1/3));return this},setStyle:function(a){function b(b){void 0!==b&&1>parseFloat(b)&&console.warn("THREE.Color: Alpha component of "+a+" will be ignored.")}var c;if(c= +/^((?:rgb|hsl)a?)\(\s*([^\)]*)\)/.exec(a)){var d=c[2];switch(c[1]){case "rgb":case "rgba":if(c=/^(\d+)\s*,\s*(\d+)\s*,\s*(\d+)\s*(,\s*([0-9]*\.?[0-9]+)\s*)?$/.exec(d))return this.r=Math.min(255,parseInt(c[1],10))/255,this.g=Math.min(255,parseInt(c[2],10))/255,this.b=Math.min(255,parseInt(c[3],10))/255,b(c[5]),this;if(c=/^(\d+)%\s*,\s*(\d+)%\s*,\s*(\d+)%\s*(,\s*([0-9]*\.?[0-9]+)\s*)?$/.exec(d))return this.r=Math.min(100,parseInt(c[1],10))/100,this.g=Math.min(100,parseInt(c[2],10))/100,this.b=Math.min(100, +parseInt(c[3],10))/100,b(c[5]),this;break;case "hsl":case "hsla":if(c=/^([0-9]*\.?[0-9]+)\s*,\s*(\d+)%\s*,\s*(\d+)%\s*(,\s*([0-9]*\.?[0-9]+)\s*)?$/.exec(d)){d=parseFloat(c[1])/360;var e=parseInt(c[2],10)/100,f=parseInt(c[3],10)/100;b(c[5]);return this.setHSL(d,e,f)}}}else if(c=/^#([A-Fa-f0-9]+)$/.exec(a)){c=c[1];d=c.length;if(3===d)return this.r=parseInt(c.charAt(0)+c.charAt(0),16)/255,this.g=parseInt(c.charAt(1)+c.charAt(1),16)/255,this.b=parseInt(c.charAt(2)+c.charAt(2),16)/255,this;if(6===d)return this.r= +parseInt(c.charAt(0)+c.charAt(1),16)/255,this.g=parseInt(c.charAt(2)+c.charAt(3),16)/255,this.b=parseInt(c.charAt(4)+c.charAt(5),16)/255,this}return a&&0=h?l/(e+f):l/(2-e-f);switch(e){case b:g=(c-d)/l+(cthis.opacity&&(d.opacity=this.opacity);!0===this.transparent&&(d.transparent=this.transparent);d.depthFunc=this.depthFunc;d.depthTest=this.depthTest;d.depthWrite=this.depthWrite;d.stencilWrite=this.stencilWrite;d.stencilWriteMask=this.stencilWriteMask;d.stencilFunc=this.stencilFunc;d.stencilRef=this.stencilRef;d.stencilFuncMask=this.stencilFuncMask;d.stencilFail= +this.stencilFail;d.stencilZFail=this.stencilZFail;d.stencilZPass=this.stencilZPass;this.rotation&&0!==this.rotation&&(d.rotation=this.rotation);!0===this.polygonOffset&&(d.polygonOffset=!0);0!==this.polygonOffsetFactor&&(d.polygonOffsetFactor=this.polygonOffsetFactor);0!==this.polygonOffsetUnits&&(d.polygonOffsetUnits=this.polygonOffsetUnits);this.linewidth&&1!==this.linewidth&&(d.linewidth=this.linewidth);void 0!==this.dashSize&&(d.dashSize=this.dashSize);void 0!==this.gapSize&&(d.gapSize=this.gapSize); +void 0!==this.scale&&(d.scale=this.scale);!0===this.dithering&&(d.dithering=!0);0g;g++)if(d[g]===d[(g+1)%3]){a.push(f);break}for(f=a.length-1;0<=f;f--)for(d=a[f],this.faces.splice(d,1),c=0,e=this.faceVertexUvs.length;c\n\t#include \n}",fragmentShader:"uniform sampler2D tEquirect;\nvarying vec3 vWorldDirection;\n#define RECIPROCAL_PI 0.31830988618\n#define RECIPROCAL_PI2 0.15915494\nvoid main() {\n\tvec3 direction = normalize( vWorldDirection );\n\tvec2 sampleUV;\n\tsampleUV.y = asin( clamp( direction.y, - 1.0, 1.0 ) ) * RECIPROCAL_PI + 0.5;\n\tsampleUV.x = atan( direction.z, direction.x ) * RECIPROCAL_PI2 + 0.5;\n\tgl_FragColor = texture2D( tEquirect, sampleUV );\n}", +side:1,blending:0});d.uniforms.tEquirect.value=b;b=new S(new Jd(5,5,5),d);c.add(b);d=new Gc(1,10,1);d.renderTarget=this;d.renderTarget.texture.name="CubeCameraTexture";d.update(a,c);b.geometry.dispose();b.material.dispose();return this};ac.prototype=Object.create(V.prototype);ac.prototype.constructor=ac;ac.prototype.isDataTexture=!0;var wd=new pb,Lf=new n;Object.assign(Hc.prototype,{set:function(a,b,c,d,e,f){var g=this.planes;g[0].copy(a);g[1].copy(b);g[2].copy(c);g[3].copy(d);g[4].copy(e);g[5].copy(f); +return this},clone:function(){return(new this.constructor).copy(this)},copy:function(a){for(var b=this.planes,c=0;6>c;c++)b[c].copy(a.planes[c]);return this},setFromProjectionMatrix:function(a){var b=this.planes,c=a.elements;a=c[0];var d=c[1],e=c[2],f=c[3],g=c[4],h=c[5],l=c[6],m=c[7],k=c[8],p=c[9],n=c[10],r=c[11],q=c[12],v=c[13],t=c[14];c=c[15];b[0].setComponents(f-a,m-g,r-k,c-q).normalize();b[1].setComponents(f+a,m+g,r+k,c+q).normalize();b[2].setComponents(f+d,m+h,r+p,c+v).normalize();b[3].setComponents(f- +d,m-h,r-p,c-v).normalize();b[4].setComponents(f-e,m-l,r-n,c-t).normalize();b[5].setComponents(f+e,m+l,r+n,c+t).normalize();return this},intersectsObject:function(a){var b=a.geometry;null===b.boundingSphere&&b.computeBoundingSphere();wd.copy(b.boundingSphere).applyMatrix4(a.matrixWorld);return this.intersectsSphere(wd)},intersectsSprite:function(a){wd.center.set(0,0,0);wd.radius=.7071067811865476;wd.applyMatrix4(a.matrixWorld);return this.intersectsSphere(wd)},intersectsSphere:function(a){var b=this.planes, +c=a.center;a=-a.radius;for(var d=0;6>d;d++)if(b[d].distanceToPoint(c)c;c++){var d=b[c];Lf.x=0d.distanceToPoint(Lf))return!1}return!0},containsPoint:function(a){for(var b=this.planes,c=0;6>c;c++)if(0>b[c].distanceToPoint(a))return!1;return!0}});var D={common:{diffuse:{value:new A(15658734)},opacity:{value:1},map:{value:null}, +uvTransform:{value:new wa},uv2Transform:{value:new wa},alphaMap:{value:null}},specularmap:{specularMap:{value:null}},envmap:{envMap:{value:null},flipEnvMap:{value:-1},reflectivity:{value:1},refractionRatio:{value:.98},maxMipLevel:{value:0}},aomap:{aoMap:{value:null},aoMapIntensity:{value:1}},lightmap:{lightMap:{value:null},lightMapIntensity:{value:1}},emissivemap:{emissiveMap:{value:null}},bumpmap:{bumpMap:{value:null},bumpScale:{value:1}},normalmap:{normalMap:{value:null},normalScale:{value:new t(1, +1)}},displacementmap:{displacementMap:{value:null},displacementScale:{value:1},displacementBias:{value:0}},roughnessmap:{roughnessMap:{value:null}},metalnessmap:{metalnessMap:{value:null}},gradientmap:{gradientMap:{value:null}},fog:{fogDensity:{value:2.5E-4},fogNear:{value:1},fogFar:{value:2E3},fogColor:{value:new A(16777215)}},lights:{ambientLightColor:{value:[]},lightProbe:{value:[]},directionalLights:{value:[],properties:{direction:{},color:{}}},directionalLightShadows:{value:[],properties:{shadowBias:{}, +shadowRadius:{},shadowMapSize:{}}},directionalShadowMap:{value:[]},directionalShadowMatrix:{value:[]},spotLights:{value:[],properties:{color:{},position:{},direction:{},distance:{},coneCos:{},penumbraCos:{},decay:{}}},spotLightShadows:{value:[],properties:{shadowBias:{},shadowRadius:{},shadowMapSize:{}}},spotShadowMap:{value:[]},spotShadowMatrix:{value:[]},pointLights:{value:[],properties:{color:{},position:{},decay:{},distance:{}}},pointLightShadows:{value:[],properties:{shadowBias:{},shadowRadius:{}, +shadowMapSize:{},shadowCameraNear:{},shadowCameraFar:{}}},pointShadowMap:{value:[]},pointShadowMatrix:{value:[]},hemisphereLights:{value:[],properties:{direction:{},skyColor:{},groundColor:{}}},rectAreaLights:{value:[],properties:{color:{},position:{},width:{},height:{}}}},points:{diffuse:{value:new A(15658734)},opacity:{value:1},size:{value:1},scale:{value:1},map:{value:null},alphaMap:{value:null},uvTransform:{value:new wa}},sprite:{diffuse:{value:new A(15658734)},opacity:{value:1},center:{value:new t(.5, +.5)},rotation:{value:0},map:{value:null},alphaMap:{value:null},uvTransform:{value:new wa}}};Id.prototype=Object.create(N.prototype);Id.prototype.constructor=Id;bc.prototype=Object.create(C.prototype);bc.prototype.constructor=bc;var O={alphamap_fragment:"#ifdef USE_ALPHAMAP\n\tdiffuseColor.a *= texture2D( alphaMap, vUv ).g;\n#endif",alphamap_pars_fragment:"#ifdef USE_ALPHAMAP\n\tuniform sampler2D alphaMap;\n#endif",alphatest_fragment:"#ifdef ALPHATEST\n\tif ( diffuseColor.a < ALPHATEST ) discard;\n#endif", +aomap_fragment:"#ifdef USE_AOMAP\n\tfloat ambientOcclusion = ( texture2D( aoMap, vUv2 ).r - 1.0 ) * aoMapIntensity + 1.0;\n\treflectedLight.indirectDiffuse *= ambientOcclusion;\n\t#if defined( USE_ENVMAP ) && defined( STANDARD )\n\t\tfloat dotNV = saturate( dot( geometry.normal, geometry.viewDir ) );\n\t\treflectedLight.indirectSpecular *= computeSpecularOcclusion( dotNV, ambientOcclusion, material.specularRoughness );\n\t#endif\n#endif",aomap_pars_fragment:"#ifdef USE_AOMAP\n\tuniform sampler2D aoMap;\n\tuniform float aoMapIntensity;\n#endif", +begin_vertex:"vec3 transformed = vec3( position );",beginnormal_vertex:"vec3 objectNormal = vec3( normal );\n#ifdef USE_TANGENT\n\tvec3 objectTangent = vec3( tangent.xyz );\n#endif",bsdfs:"vec2 integrateSpecularBRDF( const in float dotNV, const in float roughness ) {\n\tconst vec4 c0 = vec4( - 1, - 0.0275, - 0.572, 0.022 );\n\tconst vec4 c1 = vec4( 1, 0.0425, 1.04, - 0.04 );\n\tvec4 r = roughness * c0 + c1;\n\tfloat a004 = min( r.x * r.x, exp2( - 9.28 * dotNV ) ) * r.x + r.y;\n\treturn vec2( -1.04, 1.04 ) * a004 + r.zw;\n}\nfloat punctualLightIntensityToIrradianceFactor( const in float lightDistance, const in float cutoffDistance, const in float decayExponent ) {\n#if defined ( PHYSICALLY_CORRECT_LIGHTS )\n\tfloat distanceFalloff = 1.0 / max( pow( lightDistance, decayExponent ), 0.01 );\n\tif( cutoffDistance > 0.0 ) {\n\t\tdistanceFalloff *= pow2( saturate( 1.0 - pow4( lightDistance / cutoffDistance ) ) );\n\t}\n\treturn distanceFalloff;\n#else\n\tif( cutoffDistance > 0.0 && decayExponent > 0.0 ) {\n\t\treturn pow( saturate( -lightDistance / cutoffDistance + 1.0 ), decayExponent );\n\t}\n\treturn 1.0;\n#endif\n}\nvec3 BRDF_Diffuse_Lambert( const in vec3 diffuseColor ) {\n\treturn RECIPROCAL_PI * diffuseColor;\n}\nvec3 F_Schlick( const in vec3 specularColor, const in float dotLH ) {\n\tfloat fresnel = exp2( ( -5.55473 * dotLH - 6.98316 ) * dotLH );\n\treturn ( 1.0 - specularColor ) * fresnel + specularColor;\n}\nvec3 F_Schlick_RoughnessDependent( const in vec3 F0, const in float dotNV, const in float roughness ) {\n\tfloat fresnel = exp2( ( -5.55473 * dotNV - 6.98316 ) * dotNV );\n\tvec3 Fr = max( vec3( 1.0 - roughness ), F0 ) - F0;\n\treturn Fr * fresnel + F0;\n}\nfloat G_GGX_Smith( const in float alpha, const in float dotNL, const in float dotNV ) {\n\tfloat a2 = pow2( alpha );\n\tfloat gl = dotNL + sqrt( a2 + ( 1.0 - a2 ) * pow2( dotNL ) );\n\tfloat gv = dotNV + sqrt( a2 + ( 1.0 - a2 ) * pow2( dotNV ) );\n\treturn 1.0 / ( gl * gv );\n}\nfloat G_GGX_SmithCorrelated( const in float alpha, const in float dotNL, const in float dotNV ) {\n\tfloat a2 = pow2( alpha );\n\tfloat gv = dotNL * sqrt( a2 + ( 1.0 - a2 ) * pow2( dotNV ) );\n\tfloat gl = dotNV * sqrt( a2 + ( 1.0 - a2 ) * pow2( dotNL ) );\n\treturn 0.5 / max( gv + gl, EPSILON );\n}\nfloat D_GGX( const in float alpha, const in float dotNH ) {\n\tfloat a2 = pow2( alpha );\n\tfloat denom = pow2( dotNH ) * ( a2 - 1.0 ) + 1.0;\n\treturn RECIPROCAL_PI * a2 / pow2( denom );\n}\nvec3 BRDF_Specular_GGX( const in IncidentLight incidentLight, const in vec3 viewDir, const in vec3 normal, const in vec3 specularColor, const in float roughness ) {\n\tfloat alpha = pow2( roughness );\n\tvec3 halfDir = normalize( incidentLight.direction + viewDir );\n\tfloat dotNL = saturate( dot( normal, incidentLight.direction ) );\n\tfloat dotNV = saturate( dot( normal, viewDir ) );\n\tfloat dotNH = saturate( dot( normal, halfDir ) );\n\tfloat dotLH = saturate( dot( incidentLight.direction, halfDir ) );\n\tvec3 F = F_Schlick( specularColor, dotLH );\n\tfloat G = G_GGX_SmithCorrelated( alpha, dotNL, dotNV );\n\tfloat D = D_GGX( alpha, dotNH );\n\treturn F * ( G * D );\n}\nvec2 LTC_Uv( const in vec3 N, const in vec3 V, const in float roughness ) {\n\tconst float LUT_SIZE = 64.0;\n\tconst float LUT_SCALE = ( LUT_SIZE - 1.0 ) / LUT_SIZE;\n\tconst float LUT_BIAS = 0.5 / LUT_SIZE;\n\tfloat dotNV = saturate( dot( N, V ) );\n\tvec2 uv = vec2( roughness, sqrt( 1.0 - dotNV ) );\n\tuv = uv * LUT_SCALE + LUT_BIAS;\n\treturn uv;\n}\nfloat LTC_ClippedSphereFormFactor( const in vec3 f ) {\n\tfloat l = length( f );\n\treturn max( ( l * l + f.z ) / ( l + 1.0 ), 0.0 );\n}\nvec3 LTC_EdgeVectorFormFactor( const in vec3 v1, const in vec3 v2 ) {\n\tfloat x = dot( v1, v2 );\n\tfloat y = abs( x );\n\tfloat a = 0.8543985 + ( 0.4965155 + 0.0145206 * y ) * y;\n\tfloat b = 3.4175940 + ( 4.1616724 + y ) * y;\n\tfloat v = a / b;\n\tfloat theta_sintheta = ( x > 0.0 ) ? v : 0.5 * inversesqrt( max( 1.0 - x * x, 1e-7 ) ) - v;\n\treturn cross( v1, v2 ) * theta_sintheta;\n}\nvec3 LTC_Evaluate( const in vec3 N, const in vec3 V, const in vec3 P, const in mat3 mInv, const in vec3 rectCoords[ 4 ] ) {\n\tvec3 v1 = rectCoords[ 1 ] - rectCoords[ 0 ];\n\tvec3 v2 = rectCoords[ 3 ] - rectCoords[ 0 ];\n\tvec3 lightNormal = cross( v1, v2 );\n\tif( dot( lightNormal, P - rectCoords[ 0 ] ) < 0.0 ) return vec3( 0.0 );\n\tvec3 T1, T2;\n\tT1 = normalize( V - N * dot( V, N ) );\n\tT2 = - cross( N, T1 );\n\tmat3 mat = mInv * transposeMat3( mat3( T1, T2, N ) );\n\tvec3 coords[ 4 ];\n\tcoords[ 0 ] = mat * ( rectCoords[ 0 ] - P );\n\tcoords[ 1 ] = mat * ( rectCoords[ 1 ] - P );\n\tcoords[ 2 ] = mat * ( rectCoords[ 2 ] - P );\n\tcoords[ 3 ] = mat * ( rectCoords[ 3 ] - P );\n\tcoords[ 0 ] = normalize( coords[ 0 ] );\n\tcoords[ 1 ] = normalize( coords[ 1 ] );\n\tcoords[ 2 ] = normalize( coords[ 2 ] );\n\tcoords[ 3 ] = normalize( coords[ 3 ] );\n\tvec3 vectorFormFactor = vec3( 0.0 );\n\tvectorFormFactor += LTC_EdgeVectorFormFactor( coords[ 0 ], coords[ 1 ] );\n\tvectorFormFactor += LTC_EdgeVectorFormFactor( coords[ 1 ], coords[ 2 ] );\n\tvectorFormFactor += LTC_EdgeVectorFormFactor( coords[ 2 ], coords[ 3 ] );\n\tvectorFormFactor += LTC_EdgeVectorFormFactor( coords[ 3 ], coords[ 0 ] );\n\tfloat result = LTC_ClippedSphereFormFactor( vectorFormFactor );\n\treturn vec3( result );\n}\nvec3 BRDF_Specular_GGX_Environment( const in vec3 viewDir, const in vec3 normal, const in vec3 specularColor, const in float roughness ) {\n\tfloat dotNV = saturate( dot( normal, viewDir ) );\n\tvec2 brdf = integrateSpecularBRDF( dotNV, roughness );\n\treturn specularColor * brdf.x + brdf.y;\n}\nvoid BRDF_Specular_Multiscattering_Environment( const in GeometricContext geometry, const in vec3 specularColor, const in float roughness, inout vec3 singleScatter, inout vec3 multiScatter ) {\n\tfloat dotNV = saturate( dot( geometry.normal, geometry.viewDir ) );\n\tvec3 F = F_Schlick_RoughnessDependent( specularColor, dotNV, roughness );\n\tvec2 brdf = integrateSpecularBRDF( dotNV, roughness );\n\tvec3 FssEss = F * brdf.x + brdf.y;\n\tfloat Ess = brdf.x + brdf.y;\n\tfloat Ems = 1.0 - Ess;\n\tvec3 Favg = specularColor + ( 1.0 - specularColor ) * 0.047619;\tvec3 Fms = FssEss * Favg / ( 1.0 - Ems * Favg );\n\tsingleScatter += FssEss;\n\tmultiScatter += Fms * Ems;\n}\nfloat G_BlinnPhong_Implicit( ) {\n\treturn 0.25;\n}\nfloat D_BlinnPhong( const in float shininess, const in float dotNH ) {\n\treturn RECIPROCAL_PI * ( shininess * 0.5 + 1.0 ) * pow( dotNH, shininess );\n}\nvec3 BRDF_Specular_BlinnPhong( const in IncidentLight incidentLight, const in GeometricContext geometry, const in vec3 specularColor, const in float shininess ) {\n\tvec3 halfDir = normalize( incidentLight.direction + geometry.viewDir );\n\tfloat dotNH = saturate( dot( geometry.normal, halfDir ) );\n\tfloat dotLH = saturate( dot( incidentLight.direction, halfDir ) );\n\tvec3 F = F_Schlick( specularColor, dotLH );\n\tfloat G = G_BlinnPhong_Implicit( );\n\tfloat D = D_BlinnPhong( shininess, dotNH );\n\treturn F * ( G * D );\n}\nfloat GGXRoughnessToBlinnExponent( const in float ggxRoughness ) {\n\treturn ( 2.0 / pow2( ggxRoughness + 0.0001 ) - 2.0 );\n}\nfloat BlinnExponentToGGXRoughness( const in float blinnExponent ) {\n\treturn sqrt( 2.0 / ( blinnExponent + 2.0 ) );\n}\n#if defined( USE_SHEEN )\nfloat D_Charlie(float roughness, float NoH) {\n\tfloat invAlpha = 1.0 / roughness;\n\tfloat cos2h = NoH * NoH;\n\tfloat sin2h = max(1.0 - cos2h, 0.0078125);\treturn (2.0 + invAlpha) * pow(sin2h, invAlpha * 0.5) / (2.0 * PI);\n}\nfloat V_Neubelt(float NoV, float NoL) {\n\treturn saturate(1.0 / (4.0 * (NoL + NoV - NoL * NoV)));\n}\nvec3 BRDF_Specular_Sheen( const in float roughness, const in vec3 L, const in GeometricContext geometry, vec3 specularColor ) {\n\tvec3 N = geometry.normal;\n\tvec3 V = geometry.viewDir;\n\tvec3 H = normalize( V + L );\n\tfloat dotNH = saturate( dot( N, H ) );\n\treturn specularColor * D_Charlie( roughness, dotNH ) * V_Neubelt( dot(N, V), dot(N, L) );\n}\n#endif", +bumpmap_pars_fragment:"#ifdef USE_BUMPMAP\n\tuniform sampler2D bumpMap;\n\tuniform float bumpScale;\n\tvec2 dHdxy_fwd() {\n\t\tvec2 dSTdx = dFdx( vUv );\n\t\tvec2 dSTdy = dFdy( vUv );\n\t\tfloat Hll = bumpScale * texture2D( bumpMap, vUv ).x;\n\t\tfloat dBx = bumpScale * texture2D( bumpMap, vUv + dSTdx ).x - Hll;\n\t\tfloat dBy = bumpScale * texture2D( bumpMap, vUv + dSTdy ).x - Hll;\n\t\treturn vec2( dBx, dBy );\n\t}\n\tvec3 perturbNormalArb( vec3 surf_pos, vec3 surf_norm, vec2 dHdxy ) {\n\t\tvec3 vSigmaX = vec3( dFdx( surf_pos.x ), dFdx( surf_pos.y ), dFdx( surf_pos.z ) );\n\t\tvec3 vSigmaY = vec3( dFdy( surf_pos.x ), dFdy( surf_pos.y ), dFdy( surf_pos.z ) );\n\t\tvec3 vN = surf_norm;\n\t\tvec3 R1 = cross( vSigmaY, vN );\n\t\tvec3 R2 = cross( vN, vSigmaX );\n\t\tfloat fDet = dot( vSigmaX, R1 );\n\t\tfDet *= ( float( gl_FrontFacing ) * 2.0 - 1.0 );\n\t\tvec3 vGrad = sign( fDet ) * ( dHdxy.x * R1 + dHdxy.y * R2 );\n\t\treturn normalize( abs( fDet ) * surf_norm - vGrad );\n\t}\n#endif", +clipping_planes_fragment:"#if NUM_CLIPPING_PLANES > 0\n\tvec4 plane;\n\t#pragma unroll_loop_start\n\tfor ( int i = 0; i < UNION_CLIPPING_PLANES; i ++ ) {\n\t\tplane = clippingPlanes[ i ];\n\t\tif ( dot( vClipPosition, plane.xyz ) > plane.w ) discard;\n\t}\n\t#pragma unroll_loop_end\n\t#if UNION_CLIPPING_PLANES < NUM_CLIPPING_PLANES\n\t\tbool clipped = true;\n\t\t#pragma unroll_loop_start\n\t\tfor ( int i = UNION_CLIPPING_PLANES; i < NUM_CLIPPING_PLANES; i ++ ) {\n\t\t\tplane = clippingPlanes[ i ];\n\t\t\tclipped = ( dot( vClipPosition, plane.xyz ) > plane.w ) && clipped;\n\t\t}\n\t\t#pragma unroll_loop_end\n\t\tif ( clipped ) discard;\n\t#endif\n#endif", +clipping_planes_pars_fragment:"#if NUM_CLIPPING_PLANES > 0\n\tvarying vec3 vClipPosition;\n\tuniform vec4 clippingPlanes[ NUM_CLIPPING_PLANES ];\n#endif",clipping_planes_pars_vertex:"#if NUM_CLIPPING_PLANES > 0\n\tvarying vec3 vClipPosition;\n#endif",clipping_planes_vertex:"#if NUM_CLIPPING_PLANES > 0\n\tvClipPosition = - mvPosition.xyz;\n#endif",color_fragment:"#ifdef USE_COLOR\n\tdiffuseColor.rgb *= vColor;\n#endif",color_pars_fragment:"#ifdef USE_COLOR\n\tvarying vec3 vColor;\n#endif",color_pars_vertex:"#ifdef USE_COLOR\n\tvarying vec3 vColor;\n#endif", +color_vertex:"#ifdef USE_COLOR\n\tvColor.xyz = color.xyz;\n#endif",common:"#define PI 3.14159265359\n#define PI2 6.28318530718\n#define PI_HALF 1.5707963267949\n#define RECIPROCAL_PI 0.31830988618\n#define RECIPROCAL_PI2 0.15915494\n#define LOG2 1.442695\n#define EPSILON 1e-6\n#ifndef saturate\n#define saturate(a) clamp( a, 0.0, 1.0 )\n#endif\n#define whiteComplement(a) ( 1.0 - saturate( a ) )\nfloat pow2( const in float x ) { return x*x; }\nfloat pow3( const in float x ) { return x*x*x; }\nfloat pow4( const in float x ) { float x2 = x*x; return x2*x2; }\nfloat average( const in vec3 color ) { return dot( color, vec3( 0.3333 ) ); }\nhighp float rand( const in vec2 uv ) {\n\tconst highp float a = 12.9898, b = 78.233, c = 43758.5453;\n\thighp float dt = dot( uv.xy, vec2( a,b ) ), sn = mod( dt, PI );\n\treturn fract(sin(sn) * c);\n}\n#ifdef HIGH_PRECISION\n\tfloat precisionSafeLength( vec3 v ) { return length( v ); }\n#else\n\tfloat max3( vec3 v ) { return max( max( v.x, v.y ), v.z ); }\n\tfloat precisionSafeLength( vec3 v ) {\n\t\tfloat maxComponent = max3( abs( v ) );\n\t\treturn length( v / maxComponent ) * maxComponent;\n\t}\n#endif\nstruct IncidentLight {\n\tvec3 color;\n\tvec3 direction;\n\tbool visible;\n};\nstruct ReflectedLight {\n\tvec3 directDiffuse;\n\tvec3 directSpecular;\n\tvec3 indirectDiffuse;\n\tvec3 indirectSpecular;\n};\nstruct GeometricContext {\n\tvec3 position;\n\tvec3 normal;\n\tvec3 viewDir;\n#ifdef CLEARCOAT\n\tvec3 clearcoatNormal;\n#endif\n};\nvec3 transformDirection( in vec3 dir, in mat4 matrix ) {\n\treturn normalize( ( matrix * vec4( dir, 0.0 ) ).xyz );\n}\nvec3 inverseTransformDirection( in vec3 dir, in mat4 matrix ) {\n\treturn normalize( ( vec4( dir, 0.0 ) * matrix ).xyz );\n}\nvec3 projectOnPlane(in vec3 point, in vec3 pointOnPlane, in vec3 planeNormal ) {\n\tfloat distance = dot( planeNormal, point - pointOnPlane );\n\treturn - distance * planeNormal + point;\n}\nfloat sideOfPlane( in vec3 point, in vec3 pointOnPlane, in vec3 planeNormal ) {\n\treturn sign( dot( point - pointOnPlane, planeNormal ) );\n}\nvec3 linePlaneIntersect( in vec3 pointOnLine, in vec3 lineDirection, in vec3 pointOnPlane, in vec3 planeNormal ) {\n\treturn lineDirection * ( dot( planeNormal, pointOnPlane - pointOnLine ) / dot( planeNormal, lineDirection ) ) + pointOnLine;\n}\nmat3 transposeMat3( const in mat3 m ) {\n\tmat3 tmp;\n\ttmp[ 0 ] = vec3( m[ 0 ].x, m[ 1 ].x, m[ 2 ].x );\n\ttmp[ 1 ] = vec3( m[ 0 ].y, m[ 1 ].y, m[ 2 ].y );\n\ttmp[ 2 ] = vec3( m[ 0 ].z, m[ 1 ].z, m[ 2 ].z );\n\treturn tmp;\n}\nfloat linearToRelativeLuminance( const in vec3 color ) {\n\tvec3 weights = vec3( 0.2126, 0.7152, 0.0722 );\n\treturn dot( weights, color.rgb );\n}\nbool isPerspectiveMatrix( mat4 m ) {\n return m[ 2 ][ 3 ] == - 1.0;\n}", +cube_uv_reflection_fragment:"#ifdef ENVMAP_TYPE_CUBE_UV\n#define cubeUV_maxMipLevel 8.0\n#define cubeUV_minMipLevel 4.0\n#define cubeUV_maxTileSize 256.0\n#define cubeUV_minTileSize 16.0\nfloat getFace(vec3 direction) {\n vec3 absDirection = abs(direction);\n float face = -1.0;\n if (absDirection.x > absDirection.z) {\n if (absDirection.x > absDirection.y)\n face = direction.x > 0.0 ? 0.0 : 3.0;\n else\n face = direction.y > 0.0 ? 1.0 : 4.0;\n } else {\n if (absDirection.z > absDirection.y)\n face = direction.z > 0.0 ? 2.0 : 5.0;\n else\n face = direction.y > 0.0 ? 1.0 : 4.0;\n }\n return face;\n}\nvec2 getUV(vec3 direction, float face) {\n vec2 uv;\n if (face == 0.0) {\n uv = vec2(-direction.z, direction.y) / abs(direction.x);\n } else if (face == 1.0) {\n uv = vec2(direction.x, -direction.z) / abs(direction.y);\n } else if (face == 2.0) {\n uv = direction.xy / abs(direction.z);\n } else if (face == 3.0) {\n uv = vec2(direction.z, direction.y) / abs(direction.x);\n } else if (face == 4.0) {\n uv = direction.xz / abs(direction.y);\n } else {\n uv = vec2(-direction.x, direction.y) / abs(direction.z);\n }\n return 0.5 * (uv + 1.0);\n}\nvec3 bilinearCubeUV(sampler2D envMap, vec3 direction, float mipInt) {\n float face = getFace(direction);\n float filterInt = max(cubeUV_minMipLevel - mipInt, 0.0);\n mipInt = max(mipInt, cubeUV_minMipLevel);\n float faceSize = exp2(mipInt);\n float texelSize = 1.0 / (3.0 * cubeUV_maxTileSize);\n vec2 uv = getUV(direction, face) * (faceSize - 1.0);\n vec2 f = fract(uv);\n uv += 0.5 - f;\n if (face > 2.0) {\n uv.y += faceSize;\n face -= 3.0;\n }\n uv.x += face * faceSize;\n if(mipInt < cubeUV_maxMipLevel){\n uv.y += 2.0 * cubeUV_maxTileSize;\n }\n uv.y += filterInt * 2.0 * cubeUV_minTileSize;\n uv.x += 3.0 * max(0.0, cubeUV_maxTileSize - 2.0 * faceSize);\n uv *= texelSize;\n vec3 tl = envMapTexelToLinear(texture2D(envMap, uv)).rgb;\n uv.x += texelSize;\n vec3 tr = envMapTexelToLinear(texture2D(envMap, uv)).rgb;\n uv.y += texelSize;\n vec3 br = envMapTexelToLinear(texture2D(envMap, uv)).rgb;\n uv.x -= texelSize;\n vec3 bl = envMapTexelToLinear(texture2D(envMap, uv)).rgb;\n vec3 tm = mix(tl, tr, f.x);\n vec3 bm = mix(bl, br, f.x);\n return mix(tm, bm, f.y);\n}\n#define r0 1.0\n#define v0 0.339\n#define m0 -2.0\n#define r1 0.8\n#define v1 0.276\n#define m1 -1.0\n#define r4 0.4\n#define v4 0.046\n#define m4 2.0\n#define r5 0.305\n#define v5 0.016\n#define m5 3.0\n#define r6 0.21\n#define v6 0.0038\n#define m6 4.0\nfloat roughnessToMip(float roughness) {\n float mip = 0.0;\n if (roughness >= r1) {\n mip = (r0 - roughness) * (m1 - m0) / (r0 - r1) + m0;\n } else if (roughness >= r4) {\n mip = (r1 - roughness) * (m4 - m1) / (r1 - r4) + m1;\n } else if (roughness >= r5) {\n mip = (r4 - roughness) * (m5 - m4) / (r4 - r5) + m4;\n } else if (roughness >= r6) {\n mip = (r5 - roughness) * (m6 - m5) / (r5 - r6) + m5;\n } else {\n mip = -2.0 * log2(1.16 * roughness); }\n return mip;\n}\nvec4 textureCubeUV(sampler2D envMap, vec3 sampleDir, float roughness) {\n float mip = clamp(roughnessToMip(roughness), m0, cubeUV_maxMipLevel);\n float mipF = fract(mip);\n float mipInt = floor(mip);\n vec3 color0 = bilinearCubeUV(envMap, sampleDir, mipInt);\n if (mipF == 0.0) {\n return vec4(color0, 1.0);\n } else {\n vec3 color1 = bilinearCubeUV(envMap, sampleDir, mipInt + 1.0);\n return vec4(mix(color0, color1, mipF), 1.0);\n }\n}\n#endif", +defaultnormal_vertex:"vec3 transformedNormal = objectNormal;\n#ifdef USE_INSTANCING\n\tmat3 m = mat3( instanceMatrix );\n\ttransformedNormal /= vec3( dot( m[ 0 ], m[ 0 ] ), dot( m[ 1 ], m[ 1 ] ), dot( m[ 2 ], m[ 2 ] ) );\n\ttransformedNormal = m * transformedNormal;\n#endif\ntransformedNormal = normalMatrix * transformedNormal;\n#ifdef FLIP_SIDED\n\ttransformedNormal = - transformedNormal;\n#endif\n#ifdef USE_TANGENT\n\tvec3 transformedTangent = ( modelViewMatrix * vec4( objectTangent, 0.0 ) ).xyz;\n\t#ifdef FLIP_SIDED\n\t\ttransformedTangent = - transformedTangent;\n\t#endif\n#endif", +displacementmap_pars_vertex:"#ifdef USE_DISPLACEMENTMAP\n\tuniform sampler2D displacementMap;\n\tuniform float displacementScale;\n\tuniform float displacementBias;\n#endif",displacementmap_vertex:"#ifdef USE_DISPLACEMENTMAP\n\ttransformed += normalize( objectNormal ) * ( texture2D( displacementMap, vUv ).x * displacementScale + displacementBias );\n#endif",emissivemap_fragment:"#ifdef USE_EMISSIVEMAP\n\tvec4 emissiveColor = texture2D( emissiveMap, vUv );\n\temissiveColor.rgb = emissiveMapTexelToLinear( emissiveColor ).rgb;\n\ttotalEmissiveRadiance *= emissiveColor.rgb;\n#endif", +emissivemap_pars_fragment:"#ifdef USE_EMISSIVEMAP\n\tuniform sampler2D emissiveMap;\n#endif",encodings_fragment:"gl_FragColor = linearToOutputTexel( gl_FragColor );",encodings_pars_fragment:"\nvec4 LinearToLinear( in vec4 value ) {\n\treturn value;\n}\nvec4 GammaToLinear( in vec4 value, in float gammaFactor ) {\n\treturn vec4( pow( value.rgb, vec3( gammaFactor ) ), value.a );\n}\nvec4 LinearToGamma( in vec4 value, in float gammaFactor ) {\n\treturn vec4( pow( value.rgb, vec3( 1.0 / gammaFactor ) ), value.a );\n}\nvec4 sRGBToLinear( in vec4 value ) {\n\treturn vec4( mix( pow( value.rgb * 0.9478672986 + vec3( 0.0521327014 ), vec3( 2.4 ) ), value.rgb * 0.0773993808, vec3( lessThanEqual( value.rgb, vec3( 0.04045 ) ) ) ), value.a );\n}\nvec4 LinearTosRGB( in vec4 value ) {\n\treturn vec4( mix( pow( value.rgb, vec3( 0.41666 ) ) * 1.055 - vec3( 0.055 ), value.rgb * 12.92, vec3( lessThanEqual( value.rgb, vec3( 0.0031308 ) ) ) ), value.a );\n}\nvec4 RGBEToLinear( in vec4 value ) {\n\treturn vec4( value.rgb * exp2( value.a * 255.0 - 128.0 ), 1.0 );\n}\nvec4 LinearToRGBE( in vec4 value ) {\n\tfloat maxComponent = max( max( value.r, value.g ), value.b );\n\tfloat fExp = clamp( ceil( log2( maxComponent ) ), -128.0, 127.0 );\n\treturn vec4( value.rgb / exp2( fExp ), ( fExp + 128.0 ) / 255.0 );\n}\nvec4 RGBMToLinear( in vec4 value, in float maxRange ) {\n\treturn vec4( value.rgb * value.a * maxRange, 1.0 );\n}\nvec4 LinearToRGBM( in vec4 value, in float maxRange ) {\n\tfloat maxRGB = max( value.r, max( value.g, value.b ) );\n\tfloat M = clamp( maxRGB / maxRange, 0.0, 1.0 );\n\tM = ceil( M * 255.0 ) / 255.0;\n\treturn vec4( value.rgb / ( M * maxRange ), M );\n}\nvec4 RGBDToLinear( in vec4 value, in float maxRange ) {\n\treturn vec4( value.rgb * ( ( maxRange / 255.0 ) / value.a ), 1.0 );\n}\nvec4 LinearToRGBD( in vec4 value, in float maxRange ) {\n\tfloat maxRGB = max( value.r, max( value.g, value.b ) );\n\tfloat D = max( maxRange / maxRGB, 1.0 );\n\tD = clamp( floor( D ) / 255.0, 0.0, 1.0 );\n\treturn vec4( value.rgb * ( D * ( 255.0 / maxRange ) ), D );\n}\nconst mat3 cLogLuvM = mat3( 0.2209, 0.3390, 0.4184, 0.1138, 0.6780, 0.7319, 0.0102, 0.1130, 0.2969 );\nvec4 LinearToLogLuv( in vec4 value ) {\n\tvec3 Xp_Y_XYZp = cLogLuvM * value.rgb;\n\tXp_Y_XYZp = max( Xp_Y_XYZp, vec3( 1e-6, 1e-6, 1e-6 ) );\n\tvec4 vResult;\n\tvResult.xy = Xp_Y_XYZp.xy / Xp_Y_XYZp.z;\n\tfloat Le = 2.0 * log2(Xp_Y_XYZp.y) + 127.0;\n\tvResult.w = fract( Le );\n\tvResult.z = ( Le - ( floor( vResult.w * 255.0 ) ) / 255.0 ) / 255.0;\n\treturn vResult;\n}\nconst mat3 cLogLuvInverseM = mat3( 6.0014, -2.7008, -1.7996, -1.3320, 3.1029, -5.7721, 0.3008, -1.0882, 5.6268 );\nvec4 LogLuvToLinear( in vec4 value ) {\n\tfloat Le = value.z * 255.0 + value.w;\n\tvec3 Xp_Y_XYZp;\n\tXp_Y_XYZp.y = exp2( ( Le - 127.0 ) / 2.0 );\n\tXp_Y_XYZp.z = Xp_Y_XYZp.y / value.y;\n\tXp_Y_XYZp.x = value.x * Xp_Y_XYZp.z;\n\tvec3 vRGB = cLogLuvInverseM * Xp_Y_XYZp.rgb;\n\treturn vec4( max( vRGB, 0.0 ), 1.0 );\n}", +envmap_fragment:"#ifdef USE_ENVMAP\n\t#ifdef ENV_WORLDPOS\n\t\tvec3 cameraToFrag;\n\t\t\n\t\tif ( isOrthographic ) {\n\t\t\tcameraToFrag = normalize( vec3( - viewMatrix[ 0 ][ 2 ], - viewMatrix[ 1 ][ 2 ], - viewMatrix[ 2 ][ 2 ] ) );\n\t\t} else {\n\t\t\tcameraToFrag = normalize( vWorldPosition - cameraPosition );\n\t\t}\n\t\tvec3 worldNormal = inverseTransformDirection( normal, viewMatrix );\n\t\t#ifdef ENVMAP_MODE_REFLECTION\n\t\t\tvec3 reflectVec = reflect( cameraToFrag, worldNormal );\n\t\t#else\n\t\t\tvec3 reflectVec = refract( cameraToFrag, worldNormal, refractionRatio );\n\t\t#endif\n\t#else\n\t\tvec3 reflectVec = vReflect;\n\t#endif\n\t#ifdef ENVMAP_TYPE_CUBE\n\t\tvec4 envColor = textureCube( envMap, vec3( flipEnvMap * reflectVec.x, reflectVec.yz ) );\n\t#elif defined( ENVMAP_TYPE_CUBE_UV )\n\t\tvec4 envColor = textureCubeUV( envMap, reflectVec, 0.0 );\n\t#elif defined( ENVMAP_TYPE_EQUIREC )\n\t\tvec2 sampleUV;\n\t\treflectVec = normalize( reflectVec );\n\t\tsampleUV.y = asin( clamp( reflectVec.y, - 1.0, 1.0 ) ) * RECIPROCAL_PI + 0.5;\n\t\tsampleUV.x = atan( reflectVec.z, reflectVec.x ) * RECIPROCAL_PI2 + 0.5;\n\t\tvec4 envColor = texture2D( envMap, sampleUV );\n\t#elif defined( ENVMAP_TYPE_SPHERE )\n\t\treflectVec = normalize( reflectVec );\n\t\tvec3 reflectView = normalize( ( viewMatrix * vec4( reflectVec, 0.0 ) ).xyz + vec3( 0.0, 0.0, 1.0 ) );\n\t\tvec4 envColor = texture2D( envMap, reflectView.xy * 0.5 + 0.5 );\n\t#else\n\t\tvec4 envColor = vec4( 0.0 );\n\t#endif\n\t#ifndef ENVMAP_TYPE_CUBE_UV\n\t\tenvColor = envMapTexelToLinear( envColor );\n\t#endif\n\t#ifdef ENVMAP_BLENDING_MULTIPLY\n\t\toutgoingLight = mix( outgoingLight, outgoingLight * envColor.xyz, specularStrength * reflectivity );\n\t#elif defined( ENVMAP_BLENDING_MIX )\n\t\toutgoingLight = mix( outgoingLight, envColor.xyz, specularStrength * reflectivity );\n\t#elif defined( ENVMAP_BLENDING_ADD )\n\t\toutgoingLight += envColor.xyz * specularStrength * reflectivity;\n\t#endif\n#endif", +envmap_common_pars_fragment:"#ifdef USE_ENVMAP\n\tuniform float envMapIntensity;\n\tuniform float flipEnvMap;\n\tuniform int maxMipLevel;\n\t#ifdef ENVMAP_TYPE_CUBE\n\t\tuniform samplerCube envMap;\n\t#else\n\t\tuniform sampler2D envMap;\n\t#endif\n\t\n#endif",envmap_pars_fragment:"#ifdef USE_ENVMAP\n\tuniform float reflectivity;\n\t#if defined( USE_BUMPMAP ) || defined( USE_NORMALMAP ) || defined( PHONG )\n\t\t#define ENV_WORLDPOS\n\t#endif\n\t#ifdef ENV_WORLDPOS\n\t\tvarying vec3 vWorldPosition;\n\t\tuniform float refractionRatio;\n\t#else\n\t\tvarying vec3 vReflect;\n\t#endif\n#endif", +envmap_pars_vertex:"#ifdef USE_ENVMAP\n\t#if defined( USE_BUMPMAP ) || defined( USE_NORMALMAP ) ||defined( PHONG )\n\t\t#define ENV_WORLDPOS\n\t#endif\n\t#ifdef ENV_WORLDPOS\n\t\t\n\t\tvarying vec3 vWorldPosition;\n\t#else\n\t\tvarying vec3 vReflect;\n\t\tuniform float refractionRatio;\n\t#endif\n#endif",envmap_physical_pars_fragment:"#if defined( USE_ENVMAP )\n\t#ifdef ENVMAP_MODE_REFRACTION\n\t\tuniform float refractionRatio;\n\t#endif\n\tvec3 getLightProbeIndirectIrradiance( const in GeometricContext geometry, const in int maxMIPLevel ) {\n\t\tvec3 worldNormal = inverseTransformDirection( geometry.normal, viewMatrix );\n\t\t#ifdef ENVMAP_TYPE_CUBE\n\t\t\tvec3 queryVec = vec3( flipEnvMap * worldNormal.x, worldNormal.yz );\n\t\t\t#ifdef TEXTURE_LOD_EXT\n\t\t\t\tvec4 envMapColor = textureCubeLodEXT( envMap, queryVec, float( maxMIPLevel ) );\n\t\t\t#else\n\t\t\t\tvec4 envMapColor = textureCube( envMap, queryVec, float( maxMIPLevel ) );\n\t\t\t#endif\n\t\t\tenvMapColor.rgb = envMapTexelToLinear( envMapColor ).rgb;\n\t\t#elif defined( ENVMAP_TYPE_CUBE_UV )\n\t\t\tvec4 envMapColor = textureCubeUV( envMap, worldNormal, 1.0 );\n\t\t#else\n\t\t\tvec4 envMapColor = vec4( 0.0 );\n\t\t#endif\n\t\treturn PI * envMapColor.rgb * envMapIntensity;\n\t}\n\tfloat getSpecularMIPLevel( const in float roughness, const in int maxMIPLevel ) {\n\t\tfloat maxMIPLevelScalar = float( maxMIPLevel );\n\t\tfloat sigma = PI * roughness * roughness / ( 1.0 + roughness );\n\t\tfloat desiredMIPLevel = maxMIPLevelScalar + log2( sigma );\n\t\treturn clamp( desiredMIPLevel, 0.0, maxMIPLevelScalar );\n\t}\n\tvec3 getLightProbeIndirectRadiance( const in vec3 viewDir, const in vec3 normal, const in float roughness, const in int maxMIPLevel ) {\n\t\t#ifdef ENVMAP_MODE_REFLECTION\n\t\t vec3 reflectVec = reflect( -viewDir, normal );\n\t\t reflectVec = normalize( mix( reflectVec, normal, roughness * roughness) );\n\t\t#else\n\t\t vec3 reflectVec = refract( -viewDir, normal, refractionRatio );\n\t\t#endif\n\t\treflectVec = inverseTransformDirection( reflectVec, viewMatrix );\n\t\tfloat specularMIPLevel = getSpecularMIPLevel( roughness, maxMIPLevel );\n\t\t#ifdef ENVMAP_TYPE_CUBE\n\t\t\tvec3 queryReflectVec = vec3( flipEnvMap * reflectVec.x, reflectVec.yz );\n\t\t\t#ifdef TEXTURE_LOD_EXT\n\t\t\t\tvec4 envMapColor = textureCubeLodEXT( envMap, queryReflectVec, specularMIPLevel );\n\t\t\t#else\n\t\t\t\tvec4 envMapColor = textureCube( envMap, queryReflectVec, specularMIPLevel );\n\t\t\t#endif\n\t\t\tenvMapColor.rgb = envMapTexelToLinear( envMapColor ).rgb;\n\t\t#elif defined( ENVMAP_TYPE_CUBE_UV )\n\t\t\tvec4 envMapColor = textureCubeUV( envMap, reflectVec, roughness );\n\t\t#elif defined( ENVMAP_TYPE_EQUIREC )\n\t\t\tvec2 sampleUV;\n\t\t\tsampleUV.y = asin( clamp( reflectVec.y, - 1.0, 1.0 ) ) * RECIPROCAL_PI + 0.5;\n\t\t\tsampleUV.x = atan( reflectVec.z, reflectVec.x ) * RECIPROCAL_PI2 + 0.5;\n\t\t\t#ifdef TEXTURE_LOD_EXT\n\t\t\t\tvec4 envMapColor = texture2DLodEXT( envMap, sampleUV, specularMIPLevel );\n\t\t\t#else\n\t\t\t\tvec4 envMapColor = texture2D( envMap, sampleUV, specularMIPLevel );\n\t\t\t#endif\n\t\t\tenvMapColor.rgb = envMapTexelToLinear( envMapColor ).rgb;\n\t\t#elif defined( ENVMAP_TYPE_SPHERE )\n\t\t\tvec3 reflectView = normalize( ( viewMatrix * vec4( reflectVec, 0.0 ) ).xyz + vec3( 0.0,0.0,1.0 ) );\n\t\t\t#ifdef TEXTURE_LOD_EXT\n\t\t\t\tvec4 envMapColor = texture2DLodEXT( envMap, reflectView.xy * 0.5 + 0.5, specularMIPLevel );\n\t\t\t#else\n\t\t\t\tvec4 envMapColor = texture2D( envMap, reflectView.xy * 0.5 + 0.5, specularMIPLevel );\n\t\t\t#endif\n\t\t\tenvMapColor.rgb = envMapTexelToLinear( envMapColor ).rgb;\n\t\t#endif\n\t\treturn envMapColor.rgb * envMapIntensity;\n\t}\n#endif", +envmap_vertex:"#ifdef USE_ENVMAP\n\t#ifdef ENV_WORLDPOS\n\t\tvWorldPosition = worldPosition.xyz;\n\t#else\n\t\tvec3 cameraToVertex;\n\t\tif ( isOrthographic ) { \n\t\t\tcameraToVertex = normalize( vec3( - viewMatrix[ 0 ][ 2 ], - viewMatrix[ 1 ][ 2 ], - viewMatrix[ 2 ][ 2 ] ) );\n\t\t} else {\n\t\t\tcameraToVertex = normalize( worldPosition.xyz - cameraPosition );\n\t\t}\n\t\tvec3 worldNormal = inverseTransformDirection( transformedNormal, viewMatrix );\n\t\t#ifdef ENVMAP_MODE_REFLECTION\n\t\t\tvReflect = reflect( cameraToVertex, worldNormal );\n\t\t#else\n\t\t\tvReflect = refract( cameraToVertex, worldNormal, refractionRatio );\n\t\t#endif\n\t#endif\n#endif", +fog_vertex:"#ifdef USE_FOG\n\tfogDepth = -mvPosition.z;\n#endif",fog_pars_vertex:"#ifdef USE_FOG\n\tvarying float fogDepth;\n#endif",fog_fragment:"#ifdef USE_FOG\n\t#ifdef FOG_EXP2\n\t\tfloat fogFactor = 1.0 - exp( - fogDensity * fogDensity * fogDepth * fogDepth );\n\t#else\n\t\tfloat fogFactor = smoothstep( fogNear, fogFar, fogDepth );\n\t#endif\n\tgl_FragColor.rgb = mix( gl_FragColor.rgb, fogColor, fogFactor );\n#endif",fog_pars_fragment:"#ifdef USE_FOG\n\tuniform vec3 fogColor;\n\tvarying float fogDepth;\n\t#ifdef FOG_EXP2\n\t\tuniform float fogDensity;\n\t#else\n\t\tuniform float fogNear;\n\t\tuniform float fogFar;\n\t#endif\n#endif", +gradientmap_pars_fragment:"#ifdef USE_GRADIENTMAP\n\tuniform sampler2D gradientMap;\n#endif\nvec3 getGradientIrradiance( vec3 normal, vec3 lightDirection ) {\n\tfloat dotNL = dot( normal, lightDirection );\n\tvec2 coord = vec2( dotNL * 0.5 + 0.5, 0.0 );\n\t#ifdef USE_GRADIENTMAP\n\t\treturn texture2D( gradientMap, coord ).rgb;\n\t#else\n\t\treturn ( coord.x < 0.7 ) ? vec3( 0.7 ) : vec3( 1.0 );\n\t#endif\n}",lightmap_fragment:"#ifdef USE_LIGHTMAP\n\tvec4 lightMapTexel= texture2D( lightMap, vUv2 );\n\treflectedLight.indirectDiffuse += PI * lightMapTexelToLinear( lightMapTexel ).rgb * lightMapIntensity;\n#endif", +lightmap_pars_fragment:"#ifdef USE_LIGHTMAP\n\tuniform sampler2D lightMap;\n\tuniform float lightMapIntensity;\n#endif",lights_lambert_vertex:"vec3 diffuse = vec3( 1.0 );\nGeometricContext geometry;\ngeometry.position = mvPosition.xyz;\ngeometry.normal = normalize( transformedNormal );\ngeometry.viewDir = ( isOrthographic ) ? vec3( 0, 0, 1 ) : normalize( -mvPosition.xyz );\nGeometricContext backGeometry;\nbackGeometry.position = geometry.position;\nbackGeometry.normal = -geometry.normal;\nbackGeometry.viewDir = geometry.viewDir;\nvLightFront = vec3( 0.0 );\nvIndirectFront = vec3( 0.0 );\n#ifdef DOUBLE_SIDED\n\tvLightBack = vec3( 0.0 );\n\tvIndirectBack = vec3( 0.0 );\n#endif\nIncidentLight directLight;\nfloat dotNL;\nvec3 directLightColor_Diffuse;\n#if NUM_POINT_LIGHTS > 0\n\t#pragma unroll_loop_start\n\tfor ( int i = 0; i < NUM_POINT_LIGHTS; i ++ ) {\n\t\tgetPointDirectLightIrradiance( pointLights[ i ], geometry, directLight );\n\t\tdotNL = dot( geometry.normal, directLight.direction );\n\t\tdirectLightColor_Diffuse = PI * directLight.color;\n\t\tvLightFront += saturate( dotNL ) * directLightColor_Diffuse;\n\t\t#ifdef DOUBLE_SIDED\n\t\t\tvLightBack += saturate( -dotNL ) * directLightColor_Diffuse;\n\t\t#endif\n\t}\n\t#pragma unroll_loop_end\n#endif\n#if NUM_SPOT_LIGHTS > 0\n\t#pragma unroll_loop_start\n\tfor ( int i = 0; i < NUM_SPOT_LIGHTS; i ++ ) {\n\t\tgetSpotDirectLightIrradiance( spotLights[ i ], geometry, directLight );\n\t\tdotNL = dot( geometry.normal, directLight.direction );\n\t\tdirectLightColor_Diffuse = PI * directLight.color;\n\t\tvLightFront += saturate( dotNL ) * directLightColor_Diffuse;\n\t\t#ifdef DOUBLE_SIDED\n\t\t\tvLightBack += saturate( -dotNL ) * directLightColor_Diffuse;\n\t\t#endif\n\t}\n\t#pragma unroll_loop_end\n#endif\n#if NUM_DIR_LIGHTS > 0\n\t#pragma unroll_loop_start\n\tfor ( int i = 0; i < NUM_DIR_LIGHTS; i ++ ) {\n\t\tgetDirectionalDirectLightIrradiance( directionalLights[ i ], geometry, directLight );\n\t\tdotNL = dot( geometry.normal, directLight.direction );\n\t\tdirectLightColor_Diffuse = PI * directLight.color;\n\t\tvLightFront += saturate( dotNL ) * directLightColor_Diffuse;\n\t\t#ifdef DOUBLE_SIDED\n\t\t\tvLightBack += saturate( -dotNL ) * directLightColor_Diffuse;\n\t\t#endif\n\t}\n\t#pragma unroll_loop_end\n#endif\n#if NUM_HEMI_LIGHTS > 0\n\t#pragma unroll_loop_start\n\tfor ( int i = 0; i < NUM_HEMI_LIGHTS; i ++ ) {\n\t\tvIndirectFront += getHemisphereLightIrradiance( hemisphereLights[ i ], geometry );\n\t\t#ifdef DOUBLE_SIDED\n\t\t\tvIndirectBack += getHemisphereLightIrradiance( hemisphereLights[ i ], backGeometry );\n\t\t#endif\n\t}\n\t#pragma unroll_loop_end\n#endif", +lights_pars_begin:"uniform bool receiveShadow;\nuniform vec3 ambientLightColor;\nuniform vec3 lightProbe[ 9 ];\nvec3 shGetIrradianceAt( in vec3 normal, in vec3 shCoefficients[ 9 ] ) {\n\tfloat x = normal.x, y = normal.y, z = normal.z;\n\tvec3 result = shCoefficients[ 0 ] * 0.886227;\n\tresult += shCoefficients[ 1 ] * 2.0 * 0.511664 * y;\n\tresult += shCoefficients[ 2 ] * 2.0 * 0.511664 * z;\n\tresult += shCoefficients[ 3 ] * 2.0 * 0.511664 * x;\n\tresult += shCoefficients[ 4 ] * 2.0 * 0.429043 * x * y;\n\tresult += shCoefficients[ 5 ] * 2.0 * 0.429043 * y * z;\n\tresult += shCoefficients[ 6 ] * ( 0.743125 * z * z - 0.247708 );\n\tresult += shCoefficients[ 7 ] * 2.0 * 0.429043 * x * z;\n\tresult += shCoefficients[ 8 ] * 0.429043 * ( x * x - y * y );\n\treturn result;\n}\nvec3 getLightProbeIrradiance( const in vec3 lightProbe[ 9 ], const in GeometricContext geometry ) {\n\tvec3 worldNormal = inverseTransformDirection( geometry.normal, viewMatrix );\n\tvec3 irradiance = shGetIrradianceAt( worldNormal, lightProbe );\n\treturn irradiance;\n}\nvec3 getAmbientLightIrradiance( const in vec3 ambientLightColor ) {\n\tvec3 irradiance = ambientLightColor;\n\t#ifndef PHYSICALLY_CORRECT_LIGHTS\n\t\tirradiance *= PI;\n\t#endif\n\treturn irradiance;\n}\n#if NUM_DIR_LIGHTS > 0\n\tstruct DirectionalLight {\n\t\tvec3 direction;\n\t\tvec3 color;\n\t};\n\tuniform DirectionalLight directionalLights[ NUM_DIR_LIGHTS ];\n\t#if defined( USE_SHADOWMAP ) && NUM_DIR_LIGHT_SHADOWS > 0\n\t\tstruct DirectionalLightShadow {\n\t\t\tfloat shadowBias;\n\t\t\tfloat shadowRadius;\n\t\t\tvec2 shadowMapSize;\n\t\t};\n\t\tuniform DirectionalLightShadow directionalLightShadows[ NUM_DIR_LIGHT_SHADOWS ];\n\t#endif\n\tvoid getDirectionalDirectLightIrradiance( const in DirectionalLight directionalLight, const in GeometricContext geometry, out IncidentLight directLight ) {\n\t\tdirectLight.color = directionalLight.color;\n\t\tdirectLight.direction = directionalLight.direction;\n\t\tdirectLight.visible = true;\n\t}\n#endif\n#if NUM_POINT_LIGHTS > 0\n\tstruct PointLight {\n\t\tvec3 position;\n\t\tvec3 color;\n\t\tfloat distance;\n\t\tfloat decay;\n\t};\n\tuniform PointLight pointLights[ NUM_POINT_LIGHTS ];\n\t#if defined( USE_SHADOWMAP ) && NUM_POINT_LIGHT_SHADOWS > 0\n\t\tstruct PointLightShadow {\n\t\t\tfloat shadowBias;\n\t\t\tfloat shadowRadius;\n\t\t\tvec2 shadowMapSize;\n\t\t\tfloat shadowCameraNear;\n\t\t\tfloat shadowCameraFar;\n\t\t};\n\t\tuniform PointLightShadow pointLightShadows[ NUM_POINT_LIGHT_SHADOWS ];\n\t#endif\n\tvoid getPointDirectLightIrradiance( const in PointLight pointLight, const in GeometricContext geometry, out IncidentLight directLight ) {\n\t\tvec3 lVector = pointLight.position - geometry.position;\n\t\tdirectLight.direction = normalize( lVector );\n\t\tfloat lightDistance = length( lVector );\n\t\tdirectLight.color = pointLight.color;\n\t\tdirectLight.color *= punctualLightIntensityToIrradianceFactor( lightDistance, pointLight.distance, pointLight.decay );\n\t\tdirectLight.visible = ( directLight.color != vec3( 0.0 ) );\n\t}\n#endif\n#if NUM_SPOT_LIGHTS > 0\n\tstruct SpotLight {\n\t\tvec3 position;\n\t\tvec3 direction;\n\t\tvec3 color;\n\t\tfloat distance;\n\t\tfloat decay;\n\t\tfloat coneCos;\n\t\tfloat penumbraCos;\n\t};\n\tuniform SpotLight spotLights[ NUM_SPOT_LIGHTS ];\n\t#if defined( USE_SHADOWMAP ) && NUM_SPOT_LIGHT_SHADOWS > 0\n\t\tstruct SpotLightShadow {\n\t\t\tfloat shadowBias;\n\t\t\tfloat shadowRadius;\n\t\t\tvec2 shadowMapSize;\n\t\t};\n\t\tuniform SpotLightShadow spotLightShadows[ NUM_SPOT_LIGHT_SHADOWS ];\n\t#endif\n\tvoid getSpotDirectLightIrradiance( const in SpotLight spotLight, const in GeometricContext geometry, out IncidentLight directLight ) {\n\t\tvec3 lVector = spotLight.position - geometry.position;\n\t\tdirectLight.direction = normalize( lVector );\n\t\tfloat lightDistance = length( lVector );\n\t\tfloat angleCos = dot( directLight.direction, spotLight.direction );\n\t\tif ( angleCos > spotLight.coneCos ) {\n\t\t\tfloat spotEffect = smoothstep( spotLight.coneCos, spotLight.penumbraCos, angleCos );\n\t\t\tdirectLight.color = spotLight.color;\n\t\t\tdirectLight.color *= spotEffect * punctualLightIntensityToIrradianceFactor( lightDistance, spotLight.distance, spotLight.decay );\n\t\t\tdirectLight.visible = true;\n\t\t} else {\n\t\t\tdirectLight.color = vec3( 0.0 );\n\t\t\tdirectLight.visible = false;\n\t\t}\n\t}\n#endif\n#if NUM_RECT_AREA_LIGHTS > 0\n\tstruct RectAreaLight {\n\t\tvec3 color;\n\t\tvec3 position;\n\t\tvec3 halfWidth;\n\t\tvec3 halfHeight;\n\t};\n\tuniform sampler2D ltc_1;\tuniform sampler2D ltc_2;\n\tuniform RectAreaLight rectAreaLights[ NUM_RECT_AREA_LIGHTS ];\n#endif\n#if NUM_HEMI_LIGHTS > 0\n\tstruct HemisphereLight {\n\t\tvec3 direction;\n\t\tvec3 skyColor;\n\t\tvec3 groundColor;\n\t};\n\tuniform HemisphereLight hemisphereLights[ NUM_HEMI_LIGHTS ];\n\tvec3 getHemisphereLightIrradiance( const in HemisphereLight hemiLight, const in GeometricContext geometry ) {\n\t\tfloat dotNL = dot( geometry.normal, hemiLight.direction );\n\t\tfloat hemiDiffuseWeight = 0.5 * dotNL + 0.5;\n\t\tvec3 irradiance = mix( hemiLight.groundColor, hemiLight.skyColor, hemiDiffuseWeight );\n\t\t#ifndef PHYSICALLY_CORRECT_LIGHTS\n\t\t\tirradiance *= PI;\n\t\t#endif\n\t\treturn irradiance;\n\t}\n#endif", +lights_toon_fragment:"ToonMaterial material;\nmaterial.diffuseColor = diffuseColor.rgb;\nmaterial.specularColor = specular;\nmaterial.specularShininess = shininess;\nmaterial.specularStrength = specularStrength;",lights_toon_pars_fragment:"varying vec3 vViewPosition;\n#ifndef FLAT_SHADED\n\tvarying vec3 vNormal;\n#endif\nstruct ToonMaterial {\n\tvec3\tdiffuseColor;\n\tvec3\tspecularColor;\n\tfloat\tspecularShininess;\n\tfloat\tspecularStrength;\n};\nvoid RE_Direct_Toon( const in IncidentLight directLight, const in GeometricContext geometry, const in ToonMaterial material, inout ReflectedLight reflectedLight ) {\n\tvec3 irradiance = getGradientIrradiance( geometry.normal, directLight.direction ) * directLight.color;\n\t#ifndef PHYSICALLY_CORRECT_LIGHTS\n\t\tirradiance *= PI;\n\t#endif\n\treflectedLight.directDiffuse += irradiance * BRDF_Diffuse_Lambert( material.diffuseColor );\n\treflectedLight.directSpecular += irradiance * BRDF_Specular_BlinnPhong( directLight, geometry, material.specularColor, material.specularShininess ) * material.specularStrength;\n}\nvoid RE_IndirectDiffuse_Toon( const in vec3 irradiance, const in GeometricContext geometry, const in ToonMaterial material, inout ReflectedLight reflectedLight ) {\n\treflectedLight.indirectDiffuse += irradiance * BRDF_Diffuse_Lambert( material.diffuseColor );\n}\n#define RE_Direct\t\t\t\tRE_Direct_Toon\n#define RE_IndirectDiffuse\t\tRE_IndirectDiffuse_Toon\n#define Material_LightProbeLOD( material )\t(0)", +lights_phong_fragment:"BlinnPhongMaterial material;\nmaterial.diffuseColor = diffuseColor.rgb;\nmaterial.specularColor = specular;\nmaterial.specularShininess = shininess;\nmaterial.specularStrength = specularStrength;",lights_phong_pars_fragment:"varying vec3 vViewPosition;\n#ifndef FLAT_SHADED\n\tvarying vec3 vNormal;\n#endif\nstruct BlinnPhongMaterial {\n\tvec3\tdiffuseColor;\n\tvec3\tspecularColor;\n\tfloat\tspecularShininess;\n\tfloat\tspecularStrength;\n};\nvoid RE_Direct_BlinnPhong( const in IncidentLight directLight, const in GeometricContext geometry, const in BlinnPhongMaterial material, inout ReflectedLight reflectedLight ) {\n\tfloat dotNL = saturate( dot( geometry.normal, directLight.direction ) );\n\tvec3 irradiance = dotNL * directLight.color;\n\t#ifndef PHYSICALLY_CORRECT_LIGHTS\n\t\tirradiance *= PI;\n\t#endif\n\treflectedLight.directDiffuse += irradiance * BRDF_Diffuse_Lambert( material.diffuseColor );\n\treflectedLight.directSpecular += irradiance * BRDF_Specular_BlinnPhong( directLight, geometry, material.specularColor, material.specularShininess ) * material.specularStrength;\n}\nvoid RE_IndirectDiffuse_BlinnPhong( const in vec3 irradiance, const in GeometricContext geometry, const in BlinnPhongMaterial material, inout ReflectedLight reflectedLight ) {\n\treflectedLight.indirectDiffuse += irradiance * BRDF_Diffuse_Lambert( material.diffuseColor );\n}\n#define RE_Direct\t\t\t\tRE_Direct_BlinnPhong\n#define RE_IndirectDiffuse\t\tRE_IndirectDiffuse_BlinnPhong\n#define Material_LightProbeLOD( material )\t(0)", +lights_physical_fragment:"PhysicalMaterial material;\nmaterial.diffuseColor = diffuseColor.rgb * ( 1.0 - metalnessFactor );\nvec3 dxy = max( abs( dFdx( geometryNormal ) ), abs( dFdy( geometryNormal ) ) );\nfloat geometryRoughness = max( max( dxy.x, dxy.y ), dxy.z );\nmaterial.specularRoughness = max( roughnessFactor, 0.0525 );material.specularRoughness += geometryRoughness;\nmaterial.specularRoughness = min( material.specularRoughness, 1.0 );\n#ifdef REFLECTIVITY\n\tmaterial.specularColor = mix( vec3( MAXIMUM_SPECULAR_COEFFICIENT * pow2( reflectivity ) ), diffuseColor.rgb, metalnessFactor );\n#else\n\tmaterial.specularColor = mix( vec3( DEFAULT_SPECULAR_COEFFICIENT ), diffuseColor.rgb, metalnessFactor );\n#endif\n#ifdef CLEARCOAT\n\tmaterial.clearcoat = clearcoat;\n\tmaterial.clearcoatRoughness = clearcoatRoughness;\n\t#ifdef USE_CLEARCOATMAP\n\t\tmaterial.clearcoat *= texture2D( clearcoatMap, vUv ).x;\n\t#endif\n\t#ifdef USE_CLEARCOAT_ROUGHNESSMAP\n\t\tmaterial.clearcoatRoughness *= texture2D( clearcoatRoughnessMap, vUv ).y;\n\t#endif\n\tmaterial.clearcoat = saturate( material.clearcoat );\tmaterial.clearcoatRoughness = max( material.clearcoatRoughness, 0.0525 );\n\tmaterial.clearcoatRoughness += geometryRoughness;\n\tmaterial.clearcoatRoughness = min( material.clearcoatRoughness, 1.0 );\n#endif\n#ifdef USE_SHEEN\n\tmaterial.sheenColor = sheen;\n#endif", +lights_physical_pars_fragment:"struct PhysicalMaterial {\n\tvec3\tdiffuseColor;\n\tfloat\tspecularRoughness;\n\tvec3\tspecularColor;\n#ifdef CLEARCOAT\n\tfloat clearcoat;\n\tfloat clearcoatRoughness;\n#endif\n#ifdef USE_SHEEN\n\tvec3 sheenColor;\n#endif\n};\n#define MAXIMUM_SPECULAR_COEFFICIENT 0.16\n#define DEFAULT_SPECULAR_COEFFICIENT 0.04\nfloat clearcoatDHRApprox( const in float roughness, const in float dotNL ) {\n\treturn DEFAULT_SPECULAR_COEFFICIENT + ( 1.0 - DEFAULT_SPECULAR_COEFFICIENT ) * ( pow( 1.0 - dotNL, 5.0 ) * pow( 1.0 - roughness, 2.0 ) );\n}\n#if NUM_RECT_AREA_LIGHTS > 0\n\tvoid RE_Direct_RectArea_Physical( const in RectAreaLight rectAreaLight, const in GeometricContext geometry, const in PhysicalMaterial material, inout ReflectedLight reflectedLight ) {\n\t\tvec3 normal = geometry.normal;\n\t\tvec3 viewDir = geometry.viewDir;\n\t\tvec3 position = geometry.position;\n\t\tvec3 lightPos = rectAreaLight.position;\n\t\tvec3 halfWidth = rectAreaLight.halfWidth;\n\t\tvec3 halfHeight = rectAreaLight.halfHeight;\n\t\tvec3 lightColor = rectAreaLight.color;\n\t\tfloat roughness = material.specularRoughness;\n\t\tvec3 rectCoords[ 4 ];\n\t\trectCoords[ 0 ] = lightPos + halfWidth - halfHeight;\t\trectCoords[ 1 ] = lightPos - halfWidth - halfHeight;\n\t\trectCoords[ 2 ] = lightPos - halfWidth + halfHeight;\n\t\trectCoords[ 3 ] = lightPos + halfWidth + halfHeight;\n\t\tvec2 uv = LTC_Uv( normal, viewDir, roughness );\n\t\tvec4 t1 = texture2D( ltc_1, uv );\n\t\tvec4 t2 = texture2D( ltc_2, uv );\n\t\tmat3 mInv = mat3(\n\t\t\tvec3( t1.x, 0, t1.y ),\n\t\t\tvec3( 0, 1, 0 ),\n\t\t\tvec3( t1.z, 0, t1.w )\n\t\t);\n\t\tvec3 fresnel = ( material.specularColor * t2.x + ( vec3( 1.0 ) - material.specularColor ) * t2.y );\n\t\treflectedLight.directSpecular += lightColor * fresnel * LTC_Evaluate( normal, viewDir, position, mInv, rectCoords );\n\t\treflectedLight.directDiffuse += lightColor * material.diffuseColor * LTC_Evaluate( normal, viewDir, position, mat3( 1.0 ), rectCoords );\n\t}\n#endif\nvoid RE_Direct_Physical( const in IncidentLight directLight, const in GeometricContext geometry, const in PhysicalMaterial material, inout ReflectedLight reflectedLight ) {\n\tfloat dotNL = saturate( dot( geometry.normal, directLight.direction ) );\n\tvec3 irradiance = dotNL * directLight.color;\n\t#ifndef PHYSICALLY_CORRECT_LIGHTS\n\t\tirradiance *= PI;\n\t#endif\n\t#ifdef CLEARCOAT\n\t\tfloat ccDotNL = saturate( dot( geometry.clearcoatNormal, directLight.direction ) );\n\t\tvec3 ccIrradiance = ccDotNL * directLight.color;\n\t\t#ifndef PHYSICALLY_CORRECT_LIGHTS\n\t\t\tccIrradiance *= PI;\n\t\t#endif\n\t\tfloat clearcoatDHR = material.clearcoat * clearcoatDHRApprox( material.clearcoatRoughness, ccDotNL );\n\t\treflectedLight.directSpecular += ccIrradiance * material.clearcoat * BRDF_Specular_GGX( directLight, geometry.viewDir, geometry.clearcoatNormal, vec3( DEFAULT_SPECULAR_COEFFICIENT ), material.clearcoatRoughness );\n\t#else\n\t\tfloat clearcoatDHR = 0.0;\n\t#endif\n\t#ifdef USE_SHEEN\n\t\treflectedLight.directSpecular += ( 1.0 - clearcoatDHR ) * irradiance * BRDF_Specular_Sheen(\n\t\t\tmaterial.specularRoughness,\n\t\t\tdirectLight.direction,\n\t\t\tgeometry,\n\t\t\tmaterial.sheenColor\n\t\t);\n\t#else\n\t\treflectedLight.directSpecular += ( 1.0 - clearcoatDHR ) * irradiance * BRDF_Specular_GGX( directLight, geometry.viewDir, geometry.normal, material.specularColor, material.specularRoughness);\n\t#endif\n\treflectedLight.directDiffuse += ( 1.0 - clearcoatDHR ) * irradiance * BRDF_Diffuse_Lambert( material.diffuseColor );\n}\nvoid RE_IndirectDiffuse_Physical( const in vec3 irradiance, const in GeometricContext geometry, const in PhysicalMaterial material, inout ReflectedLight reflectedLight ) {\n\treflectedLight.indirectDiffuse += irradiance * BRDF_Diffuse_Lambert( material.diffuseColor );\n}\nvoid RE_IndirectSpecular_Physical( const in vec3 radiance, const in vec3 irradiance, const in vec3 clearcoatRadiance, const in GeometricContext geometry, const in PhysicalMaterial material, inout ReflectedLight reflectedLight) {\n\t#ifdef CLEARCOAT\n\t\tfloat ccDotNV = saturate( dot( geometry.clearcoatNormal, geometry.viewDir ) );\n\t\treflectedLight.indirectSpecular += clearcoatRadiance * material.clearcoat * BRDF_Specular_GGX_Environment( geometry.viewDir, geometry.clearcoatNormal, vec3( DEFAULT_SPECULAR_COEFFICIENT ), material.clearcoatRoughness );\n\t\tfloat ccDotNL = ccDotNV;\n\t\tfloat clearcoatDHR = material.clearcoat * clearcoatDHRApprox( material.clearcoatRoughness, ccDotNL );\n\t#else\n\t\tfloat clearcoatDHR = 0.0;\n\t#endif\n\tfloat clearcoatInv = 1.0 - clearcoatDHR;\n\tvec3 singleScattering = vec3( 0.0 );\n\tvec3 multiScattering = vec3( 0.0 );\n\tvec3 cosineWeightedIrradiance = irradiance * RECIPROCAL_PI;\n\tBRDF_Specular_Multiscattering_Environment( geometry, material.specularColor, material.specularRoughness, singleScattering, multiScattering );\n\tvec3 diffuse = material.diffuseColor * ( 1.0 - ( singleScattering + multiScattering ) );\n\treflectedLight.indirectSpecular += clearcoatInv * radiance * singleScattering;\n\treflectedLight.indirectSpecular += multiScattering * cosineWeightedIrradiance;\n\treflectedLight.indirectDiffuse += diffuse * cosineWeightedIrradiance;\n}\n#define RE_Direct\t\t\t\tRE_Direct_Physical\n#define RE_Direct_RectArea\t\tRE_Direct_RectArea_Physical\n#define RE_IndirectDiffuse\t\tRE_IndirectDiffuse_Physical\n#define RE_IndirectSpecular\t\tRE_IndirectSpecular_Physical\nfloat computeSpecularOcclusion( const in float dotNV, const in float ambientOcclusion, const in float roughness ) {\n\treturn saturate( pow( dotNV + ambientOcclusion, exp2( - 16.0 * roughness - 1.0 ) ) - 1.0 + ambientOcclusion );\n}", +lights_fragment_begin:"\nGeometricContext geometry;\ngeometry.position = - vViewPosition;\ngeometry.normal = normal;\ngeometry.viewDir = ( isOrthographic ) ? vec3( 0, 0, 1 ) : normalize( vViewPosition );\n#ifdef CLEARCOAT\n\tgeometry.clearcoatNormal = clearcoatNormal;\n#endif\nIncidentLight directLight;\n#if ( NUM_POINT_LIGHTS > 0 ) && defined( RE_Direct )\n\tPointLight pointLight;\n\t#if defined( USE_SHADOWMAP ) && NUM_POINT_LIGHT_SHADOWS > 0\n\tPointLightShadow pointLightShadow;\n\t#endif\n\t#pragma unroll_loop_start\n\tfor ( int i = 0; i < NUM_POINT_LIGHTS; i ++ ) {\n\t\tpointLight = pointLights[ i ];\n\t\tgetPointDirectLightIrradiance( pointLight, geometry, directLight );\n\t\t#if defined( USE_SHADOWMAP ) && ( UNROLLED_LOOP_INDEX < NUM_POINT_LIGHT_SHADOWS )\n\t\tpointLightShadow = pointLightShadows[ i ];\n\t\tdirectLight.color *= all( bvec2( directLight.visible, receiveShadow ) ) ? getPointShadow( pointShadowMap[ i ], pointLightShadow.shadowMapSize, pointLightShadow.shadowBias, pointLightShadow.shadowRadius, vPointShadowCoord[ i ], pointLightShadow.shadowCameraNear, pointLightShadow.shadowCameraFar ) : 1.0;\n\t\t#endif\n\t\tRE_Direct( directLight, geometry, material, reflectedLight );\n\t}\n\t#pragma unroll_loop_end\n#endif\n#if ( NUM_SPOT_LIGHTS > 0 ) && defined( RE_Direct )\n\tSpotLight spotLight;\n\t#if defined( USE_SHADOWMAP ) && NUM_SPOT_LIGHT_SHADOWS > 0\n\tSpotLightShadow spotLightShadow;\n\t#endif\n\t#pragma unroll_loop_start\n\tfor ( int i = 0; i < NUM_SPOT_LIGHTS; i ++ ) {\n\t\tspotLight = spotLights[ i ];\n\t\tgetSpotDirectLightIrradiance( spotLight, geometry, directLight );\n\t\t#if defined( USE_SHADOWMAP ) && ( UNROLLED_LOOP_INDEX < NUM_SPOT_LIGHT_SHADOWS )\n\t\tspotLightShadow = spotLightShadows[ i ];\n\t\tdirectLight.color *= all( bvec2( directLight.visible, receiveShadow ) ) ? getShadow( spotShadowMap[ i ], spotLightShadow.shadowMapSize, spotLightShadow.shadowBias, spotLightShadow.shadowRadius, vSpotShadowCoord[ i ] ) : 1.0;\n\t\t#endif\n\t\tRE_Direct( directLight, geometry, material, reflectedLight );\n\t}\n\t#pragma unroll_loop_end\n#endif\n#if ( NUM_DIR_LIGHTS > 0 ) && defined( RE_Direct )\n\tDirectionalLight directionalLight;\n\t#if defined( USE_SHADOWMAP ) && NUM_DIR_LIGHT_SHADOWS > 0\n\tDirectionalLightShadow directionalLightShadow;\n\t#endif\n\t#pragma unroll_loop_start\n\tfor ( int i = 0; i < NUM_DIR_LIGHTS; i ++ ) {\n\t\tdirectionalLight = directionalLights[ i ];\n\t\tgetDirectionalDirectLightIrradiance( directionalLight, geometry, directLight );\n\t\t#if defined( USE_SHADOWMAP ) && ( UNROLLED_LOOP_INDEX < NUM_DIR_LIGHT_SHADOWS )\n\t\tdirectionalLightShadow = directionalLightShadows[ i ];\n\t\tdirectLight.color *= all( bvec2( directLight.visible, receiveShadow ) ) ? getShadow( directionalShadowMap[ i ], directionalLightShadow.shadowMapSize, directionalLightShadow.shadowBias, directionalLightShadow.shadowRadius, vDirectionalShadowCoord[ i ] ) : 1.0;\n\t\t#endif\n\t\tRE_Direct( directLight, geometry, material, reflectedLight );\n\t}\n\t#pragma unroll_loop_end\n#endif\n#if ( NUM_RECT_AREA_LIGHTS > 0 ) && defined( RE_Direct_RectArea )\n\tRectAreaLight rectAreaLight;\n\t#pragma unroll_loop_start\n\tfor ( int i = 0; i < NUM_RECT_AREA_LIGHTS; i ++ ) {\n\t\trectAreaLight = rectAreaLights[ i ];\n\t\tRE_Direct_RectArea( rectAreaLight, geometry, material, reflectedLight );\n\t}\n\t#pragma unroll_loop_end\n#endif\n#if defined( RE_IndirectDiffuse )\n\tvec3 iblIrradiance = vec3( 0.0 );\n\tvec3 irradiance = getAmbientLightIrradiance( ambientLightColor );\n\tirradiance += getLightProbeIrradiance( lightProbe, geometry );\n\t#if ( NUM_HEMI_LIGHTS > 0 )\n\t\t#pragma unroll_loop_start\n\t\tfor ( int i = 0; i < NUM_HEMI_LIGHTS; i ++ ) {\n\t\t\tirradiance += getHemisphereLightIrradiance( hemisphereLights[ i ], geometry );\n\t\t}\n\t\t#pragma unroll_loop_end\n\t#endif\n#endif\n#if defined( RE_IndirectSpecular )\n\tvec3 radiance = vec3( 0.0 );\n\tvec3 clearcoatRadiance = vec3( 0.0 );\n#endif", +lights_fragment_maps:"#if defined( RE_IndirectDiffuse )\n\t#ifdef USE_LIGHTMAP\n\t\tvec4 lightMapTexel= texture2D( lightMap, vUv2 );\n\t\tvec3 lightMapIrradiance = lightMapTexelToLinear( lightMapTexel ).rgb * lightMapIntensity;\n\t\t#ifndef PHYSICALLY_CORRECT_LIGHTS\n\t\t\tlightMapIrradiance *= PI;\n\t\t#endif\n\t\tirradiance += lightMapIrradiance;\n\t#endif\n\t#if defined( USE_ENVMAP ) && defined( STANDARD ) && defined( ENVMAP_TYPE_CUBE_UV )\n\t\tiblIrradiance += getLightProbeIndirectIrradiance( geometry, maxMipLevel );\n\t#endif\n#endif\n#if defined( USE_ENVMAP ) && defined( RE_IndirectSpecular )\n\tradiance += getLightProbeIndirectRadiance( geometry.viewDir, geometry.normal, material.specularRoughness, maxMipLevel );\n\t#ifdef CLEARCOAT\n\t\tclearcoatRadiance += getLightProbeIndirectRadiance( geometry.viewDir, geometry.clearcoatNormal, material.clearcoatRoughness, maxMipLevel );\n\t#endif\n#endif", +lights_fragment_end:"#if defined( RE_IndirectDiffuse )\n\tRE_IndirectDiffuse( irradiance, geometry, material, reflectedLight );\n#endif\n#if defined( RE_IndirectSpecular )\n\tRE_IndirectSpecular( radiance, iblIrradiance, clearcoatRadiance, geometry, material, reflectedLight );\n#endif",logdepthbuf_fragment:"#if defined( USE_LOGDEPTHBUF ) && defined( USE_LOGDEPTHBUF_EXT )\n\tgl_FragDepthEXT = vIsPerspective == 0.0 ? gl_FragCoord.z : log2( vFragDepth ) * logDepthBufFC * 0.5;\n#endif",logdepthbuf_pars_fragment:"#if defined( USE_LOGDEPTHBUF ) && defined( USE_LOGDEPTHBUF_EXT )\n\tuniform float logDepthBufFC;\n\tvarying float vFragDepth;\n\tvarying float vIsPerspective;\n#endif", +logdepthbuf_pars_vertex:"#ifdef USE_LOGDEPTHBUF\n\t#ifdef USE_LOGDEPTHBUF_EXT\n\t\tvarying float vFragDepth;\n\t\tvarying float vIsPerspective;\n\t#else\n\t\tuniform float logDepthBufFC;\n\t#endif\n#endif",logdepthbuf_vertex:"#ifdef USE_LOGDEPTHBUF\n\t#ifdef USE_LOGDEPTHBUF_EXT\n\t\tvFragDepth = 1.0 + gl_Position.w;\n\t\tvIsPerspective = float( isPerspectiveMatrix( projectionMatrix ) );\n\t#else\n\t\tif ( isPerspectiveMatrix( projectionMatrix ) ) {\n\t\t\tgl_Position.z = log2( max( EPSILON, gl_Position.w + 1.0 ) ) * logDepthBufFC - 1.0;\n\t\t\tgl_Position.z *= gl_Position.w;\n\t\t}\n\t#endif\n#endif", +map_fragment:"#ifdef USE_MAP\n\tvec4 texelColor = texture2D( map, vUv );\n\ttexelColor = mapTexelToLinear( texelColor );\n\tdiffuseColor *= texelColor;\n#endif",map_pars_fragment:"#ifdef USE_MAP\n\tuniform sampler2D map;\n#endif",map_particle_fragment:"#if defined( USE_MAP ) || defined( USE_ALPHAMAP )\n\tvec2 uv = ( uvTransform * vec3( gl_PointCoord.x, 1.0 - gl_PointCoord.y, 1 ) ).xy;\n#endif\n#ifdef USE_MAP\n\tvec4 mapTexel = texture2D( map, uv );\n\tdiffuseColor *= mapTexelToLinear( mapTexel );\n#endif\n#ifdef USE_ALPHAMAP\n\tdiffuseColor.a *= texture2D( alphaMap, uv ).g;\n#endif", +map_particle_pars_fragment:"#if defined( USE_MAP ) || defined( USE_ALPHAMAP )\n\tuniform mat3 uvTransform;\n#endif\n#ifdef USE_MAP\n\tuniform sampler2D map;\n#endif\n#ifdef USE_ALPHAMAP\n\tuniform sampler2D alphaMap;\n#endif",metalnessmap_fragment:"float metalnessFactor = metalness;\n#ifdef USE_METALNESSMAP\n\tvec4 texelMetalness = texture2D( metalnessMap, vUv );\n\tmetalnessFactor *= texelMetalness.b;\n#endif",metalnessmap_pars_fragment:"#ifdef USE_METALNESSMAP\n\tuniform sampler2D metalnessMap;\n#endif", +morphnormal_vertex:"#ifdef USE_MORPHNORMALS\n\tobjectNormal *= morphTargetBaseInfluence;\n\tobjectNormal += morphNormal0 * morphTargetInfluences[ 0 ];\n\tobjectNormal += morphNormal1 * morphTargetInfluences[ 1 ];\n\tobjectNormal += morphNormal2 * morphTargetInfluences[ 2 ];\n\tobjectNormal += morphNormal3 * morphTargetInfluences[ 3 ];\n#endif",morphtarget_pars_vertex:"#ifdef USE_MORPHTARGETS\n\tuniform float morphTargetBaseInfluence;\n\t#ifndef USE_MORPHNORMALS\n\tuniform float morphTargetInfluences[ 8 ];\n\t#else\n\tuniform float morphTargetInfluences[ 4 ];\n\t#endif\n#endif", +morphtarget_vertex:"#ifdef USE_MORPHTARGETS\n\ttransformed *= morphTargetBaseInfluence;\n\ttransformed += morphTarget0 * morphTargetInfluences[ 0 ];\n\ttransformed += morphTarget1 * morphTargetInfluences[ 1 ];\n\ttransformed += morphTarget2 * morphTargetInfluences[ 2 ];\n\ttransformed += morphTarget3 * morphTargetInfluences[ 3 ];\n\t#ifndef USE_MORPHNORMALS\n\ttransformed += morphTarget4 * morphTargetInfluences[ 4 ];\n\ttransformed += morphTarget5 * morphTargetInfluences[ 5 ];\n\ttransformed += morphTarget6 * morphTargetInfluences[ 6 ];\n\ttransformed += morphTarget7 * morphTargetInfluences[ 7 ];\n\t#endif\n#endif", +normal_fragment_begin:"#ifdef FLAT_SHADED\n\tvec3 fdx = vec3( dFdx( vViewPosition.x ), dFdx( vViewPosition.y ), dFdx( vViewPosition.z ) );\n\tvec3 fdy = vec3( dFdy( vViewPosition.x ), dFdy( vViewPosition.y ), dFdy( vViewPosition.z ) );\n\tvec3 normal = normalize( cross( fdx, fdy ) );\n#else\n\tvec3 normal = normalize( vNormal );\n\t#ifdef DOUBLE_SIDED\n\t\tnormal = normal * ( float( gl_FrontFacing ) * 2.0 - 1.0 );\n\t#endif\n\t#ifdef USE_TANGENT\n\t\tvec3 tangent = normalize( vTangent );\n\t\tvec3 bitangent = normalize( vBitangent );\n\t\t#ifdef DOUBLE_SIDED\n\t\t\ttangent = tangent * ( float( gl_FrontFacing ) * 2.0 - 1.0 );\n\t\t\tbitangent = bitangent * ( float( gl_FrontFacing ) * 2.0 - 1.0 );\n\t\t#endif\n\t\t#if defined( TANGENTSPACE_NORMALMAP ) || defined( USE_CLEARCOAT_NORMALMAP )\n\t\t\tmat3 vTBN = mat3( tangent, bitangent, normal );\n\t\t#endif\n\t#endif\n#endif\nvec3 geometryNormal = normal;", +normal_fragment_maps:"#ifdef OBJECTSPACE_NORMALMAP\n\tnormal = texture2D( normalMap, vUv ).xyz * 2.0 - 1.0;\n\t#ifdef FLIP_SIDED\n\t\tnormal = - normal;\n\t#endif\n\t#ifdef DOUBLE_SIDED\n\t\tnormal = normal * ( float( gl_FrontFacing ) * 2.0 - 1.0 );\n\t#endif\n\tnormal = normalize( normalMatrix * normal );\n#elif defined( TANGENTSPACE_NORMALMAP )\n\tvec3 mapN = texture2D( normalMap, vUv ).xyz * 2.0 - 1.0;\n\tmapN.xy *= normalScale;\n\t#ifdef USE_TANGENT\n\t\tnormal = normalize( vTBN * mapN );\n\t#else\n\t\tnormal = perturbNormal2Arb( -vViewPosition, normal, mapN );\n\t#endif\n#elif defined( USE_BUMPMAP )\n\tnormal = perturbNormalArb( -vViewPosition, normal, dHdxy_fwd() );\n#endif", +normalmap_pars_fragment:"#ifdef USE_NORMALMAP\n\tuniform sampler2D normalMap;\n\tuniform vec2 normalScale;\n#endif\n#ifdef OBJECTSPACE_NORMALMAP\n\tuniform mat3 normalMatrix;\n#endif\n#if ! defined ( USE_TANGENT ) && ( defined ( TANGENTSPACE_NORMALMAP ) || defined ( USE_CLEARCOAT_NORMALMAP ) )\n\tvec3 perturbNormal2Arb( vec3 eye_pos, vec3 surf_norm, vec3 mapN ) {\n\t\tvec3 q0 = vec3( dFdx( eye_pos.x ), dFdx( eye_pos.y ), dFdx( eye_pos.z ) );\n\t\tvec3 q1 = vec3( dFdy( eye_pos.x ), dFdy( eye_pos.y ), dFdy( eye_pos.z ) );\n\t\tvec2 st0 = dFdx( vUv.st );\n\t\tvec2 st1 = dFdy( vUv.st );\n\t\tfloat scale = sign( st1.t * st0.s - st0.t * st1.s );\n\t\tvec3 S = normalize( ( q0 * st1.t - q1 * st0.t ) * scale );\n\t\tvec3 T = normalize( ( - q0 * st1.s + q1 * st0.s ) * scale );\n\t\tvec3 N = normalize( surf_norm );\n\t\tmat3 tsn = mat3( S, T, N );\n\t\tmapN.xy *= ( float( gl_FrontFacing ) * 2.0 - 1.0 );\n\t\treturn normalize( tsn * mapN );\n\t}\n#endif", +clearcoat_normal_fragment_begin:"#ifdef CLEARCOAT\n\tvec3 clearcoatNormal = geometryNormal;\n#endif",clearcoat_normal_fragment_maps:"#ifdef USE_CLEARCOAT_NORMALMAP\n\tvec3 clearcoatMapN = texture2D( clearcoatNormalMap, vUv ).xyz * 2.0 - 1.0;\n\tclearcoatMapN.xy *= clearcoatNormalScale;\n\t#ifdef USE_TANGENT\n\t\tclearcoatNormal = normalize( vTBN * clearcoatMapN );\n\t#else\n\t\tclearcoatNormal = perturbNormal2Arb( - vViewPosition, clearcoatNormal, clearcoatMapN );\n\t#endif\n#endif",clearcoat_pars_fragment:"#ifdef USE_CLEARCOATMAP\n\tuniform sampler2D clearcoatMap;\n#endif\n#ifdef USE_CLEARCOAT_ROUGHNESSMAP\n\tuniform sampler2D clearcoatRoughnessMap;\n#endif\n#ifdef USE_CLEARCOAT_NORMALMAP\n\tuniform sampler2D clearcoatNormalMap;\n\tuniform vec2 clearcoatNormalScale;\n#endif", +packing:"vec3 packNormalToRGB( const in vec3 normal ) {\n\treturn normalize( normal ) * 0.5 + 0.5;\n}\nvec3 unpackRGBToNormal( const in vec3 rgb ) {\n\treturn 2.0 * rgb.xyz - 1.0;\n}\nconst float PackUpscale = 256. / 255.;const float UnpackDownscale = 255. / 256.;\nconst vec3 PackFactors = vec3( 256. * 256. * 256., 256. * 256., 256. );\nconst vec4 UnpackFactors = UnpackDownscale / vec4( PackFactors, 1. );\nconst float ShiftRight8 = 1. / 256.;\nvec4 packDepthToRGBA( const in float v ) {\n\tvec4 r = vec4( fract( v * PackFactors ), v );\n\tr.yzw -= r.xyz * ShiftRight8;\treturn r * PackUpscale;\n}\nfloat unpackRGBAToDepth( const in vec4 v ) {\n\treturn dot( v, UnpackFactors );\n}\nvec4 pack2HalfToRGBA( vec2 v ) {\n\tvec4 r = vec4( v.x, fract( v.x * 255.0 ), v.y, fract( v.y * 255.0 ));\n\treturn vec4( r.x - r.y / 255.0, r.y, r.z - r.w / 255.0, r.w);\n}\nvec2 unpackRGBATo2Half( vec4 v ) {\n\treturn vec2( v.x + ( v.y / 255.0 ), v.z + ( v.w / 255.0 ) );\n}\nfloat viewZToOrthographicDepth( const in float viewZ, const in float near, const in float far ) {\n\treturn ( viewZ + near ) / ( near - far );\n}\nfloat orthographicDepthToViewZ( const in float linearClipZ, const in float near, const in float far ) {\n\treturn linearClipZ * ( near - far ) - near;\n}\nfloat viewZToPerspectiveDepth( const in float viewZ, const in float near, const in float far ) {\n\treturn (( near + viewZ ) * far ) / (( far - near ) * viewZ );\n}\nfloat perspectiveDepthToViewZ( const in float invClipZ, const in float near, const in float far ) {\n\treturn ( near * far ) / ( ( far - near ) * invClipZ - far );\n}", +premultiplied_alpha_fragment:"#ifdef PREMULTIPLIED_ALPHA\n\tgl_FragColor.rgb *= gl_FragColor.a;\n#endif",project_vertex:"vec4 mvPosition = vec4( transformed, 1.0 );\n#ifdef USE_INSTANCING\n\tmvPosition = instanceMatrix * mvPosition;\n#endif\nmvPosition = modelViewMatrix * mvPosition;\ngl_Position = projectionMatrix * mvPosition;",dithering_fragment:"#ifdef DITHERING\n\tgl_FragColor.rgb = dithering( gl_FragColor.rgb );\n#endif",dithering_pars_fragment:"#ifdef DITHERING\n\tvec3 dithering( vec3 color ) {\n\t\tfloat grid_position = rand( gl_FragCoord.xy );\n\t\tvec3 dither_shift_RGB = vec3( 0.25 / 255.0, -0.25 / 255.0, 0.25 / 255.0 );\n\t\tdither_shift_RGB = mix( 2.0 * dither_shift_RGB, -2.0 * dither_shift_RGB, grid_position );\n\t\treturn color + dither_shift_RGB;\n\t}\n#endif", +roughnessmap_fragment:"float roughnessFactor = roughness;\n#ifdef USE_ROUGHNESSMAP\n\tvec4 texelRoughness = texture2D( roughnessMap, vUv );\n\troughnessFactor *= texelRoughness.g;\n#endif",roughnessmap_pars_fragment:"#ifdef USE_ROUGHNESSMAP\n\tuniform sampler2D roughnessMap;\n#endif",shadowmap_pars_fragment:"#ifdef USE_SHADOWMAP\n\t#if NUM_DIR_LIGHT_SHADOWS > 0\n\t\tuniform sampler2D directionalShadowMap[ NUM_DIR_LIGHT_SHADOWS ];\n\t\tvarying vec4 vDirectionalShadowCoord[ NUM_DIR_LIGHT_SHADOWS ];\n\t#endif\n\t#if NUM_SPOT_LIGHT_SHADOWS > 0\n\t\tuniform sampler2D spotShadowMap[ NUM_SPOT_LIGHT_SHADOWS ];\n\t\tvarying vec4 vSpotShadowCoord[ NUM_SPOT_LIGHT_SHADOWS ];\n\t#endif\n\t#if NUM_POINT_LIGHT_SHADOWS > 0\n\t\tuniform sampler2D pointShadowMap[ NUM_POINT_LIGHT_SHADOWS ];\n\t\tvarying vec4 vPointShadowCoord[ NUM_POINT_LIGHT_SHADOWS ];\n\t#endif\n\tfloat texture2DCompare( sampler2D depths, vec2 uv, float compare ) {\n\t\treturn step( compare, unpackRGBAToDepth( texture2D( depths, uv ) ) );\n\t}\n\tvec2 texture2DDistribution( sampler2D shadow, vec2 uv ) {\n\t\treturn unpackRGBATo2Half( texture2D( shadow, uv ) );\n\t}\n\tfloat VSMShadow (sampler2D shadow, vec2 uv, float compare ){\n\t\tfloat occlusion = 1.0;\n\t\tvec2 distribution = texture2DDistribution( shadow, uv );\n\t\tfloat hard_shadow = step( compare , distribution.x );\n\t\tif (hard_shadow != 1.0 ) {\n\t\t\tfloat distance = compare - distribution.x ;\n\t\t\tfloat variance = max( 0.00000, distribution.y * distribution.y );\n\t\t\tfloat softness_probability = variance / (variance + distance * distance );\t\t\tsoftness_probability = clamp( ( softness_probability - 0.3 ) / ( 0.95 - 0.3 ), 0.0, 1.0 );\t\t\tocclusion = clamp( max( hard_shadow, softness_probability ), 0.0, 1.0 );\n\t\t}\n\t\treturn occlusion;\n\t}\n\tfloat getShadow( sampler2D shadowMap, vec2 shadowMapSize, float shadowBias, float shadowRadius, vec4 shadowCoord ) {\n\t\tfloat shadow = 1.0;\n\t\tshadowCoord.xyz /= shadowCoord.w;\n\t\tshadowCoord.z += shadowBias;\n\t\tbvec4 inFrustumVec = bvec4 ( shadowCoord.x >= 0.0, shadowCoord.x <= 1.0, shadowCoord.y >= 0.0, shadowCoord.y <= 1.0 );\n\t\tbool inFrustum = all( inFrustumVec );\n\t\tbvec2 frustumTestVec = bvec2( inFrustum, shadowCoord.z <= 1.0 );\n\t\tbool frustumTest = all( frustumTestVec );\n\t\tif ( frustumTest ) {\n\t\t#if defined( SHADOWMAP_TYPE_PCF )\n\t\t\tvec2 texelSize = vec2( 1.0 ) / shadowMapSize;\n\t\t\tfloat dx0 = - texelSize.x * shadowRadius;\n\t\t\tfloat dy0 = - texelSize.y * shadowRadius;\n\t\t\tfloat dx1 = + texelSize.x * shadowRadius;\n\t\t\tfloat dy1 = + texelSize.y * shadowRadius;\n\t\t\tfloat dx2 = dx0 / 2.0;\n\t\t\tfloat dy2 = dy0 / 2.0;\n\t\t\tfloat dx3 = dx1 / 2.0;\n\t\t\tfloat dy3 = dy1 / 2.0;\n\t\t\tshadow = (\n\t\t\t\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( dx0, dy0 ), shadowCoord.z ) +\n\t\t\t\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( 0.0, dy0 ), shadowCoord.z ) +\n\t\t\t\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( dx1, dy0 ), shadowCoord.z ) +\n\t\t\t\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( dx2, dy2 ), shadowCoord.z ) +\n\t\t\t\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( 0.0, dy2 ), shadowCoord.z ) +\n\t\t\t\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( dx3, dy2 ), shadowCoord.z ) +\n\t\t\t\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( dx0, 0.0 ), shadowCoord.z ) +\n\t\t\t\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( dx2, 0.0 ), shadowCoord.z ) +\n\t\t\t\ttexture2DCompare( shadowMap, shadowCoord.xy, shadowCoord.z ) +\n\t\t\t\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( dx3, 0.0 ), shadowCoord.z ) +\n\t\t\t\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( dx1, 0.0 ), shadowCoord.z ) +\n\t\t\t\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( dx2, dy3 ), shadowCoord.z ) +\n\t\t\t\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( 0.0, dy3 ), shadowCoord.z ) +\n\t\t\t\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( dx3, dy3 ), shadowCoord.z ) +\n\t\t\t\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( dx0, dy1 ), shadowCoord.z ) +\n\t\t\t\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( 0.0, dy1 ), shadowCoord.z ) +\n\t\t\t\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( dx1, dy1 ), shadowCoord.z )\n\t\t\t) * ( 1.0 / 17.0 );\n\t\t#elif defined( SHADOWMAP_TYPE_PCF_SOFT )\n\t\t\tvec2 texelSize = vec2( 1.0 ) / shadowMapSize;\n\t\t\tfloat dx = texelSize.x;\n\t\t\tfloat dy = texelSize.y;\n\t\t\tvec2 uv = shadowCoord.xy;\n\t\t\tvec2 f = fract( uv * shadowMapSize + 0.5 );\n\t\t\tuv -= f * texelSize;\n\t\t\tshadow = (\n\t\t\t\ttexture2DCompare( shadowMap, uv, shadowCoord.z ) +\n\t\t\t\ttexture2DCompare( shadowMap, uv + vec2( dx, 0.0 ), shadowCoord.z ) +\n\t\t\t\ttexture2DCompare( shadowMap, uv + vec2( 0.0, dy ), shadowCoord.z ) +\n\t\t\t\ttexture2DCompare( shadowMap, uv + texelSize, shadowCoord.z ) +\n\t\t\t\tmix( texture2DCompare( shadowMap, uv + vec2( -dx, 0.0 ), shadowCoord.z ), \n\t\t\t\t\t texture2DCompare( shadowMap, uv + vec2( 2.0 * dx, 0.0 ), shadowCoord.z ),\n\t\t\t\t\t f.x ) +\n\t\t\t\tmix( texture2DCompare( shadowMap, uv + vec2( -dx, dy ), shadowCoord.z ), \n\t\t\t\t\t texture2DCompare( shadowMap, uv + vec2( 2.0 * dx, dy ), shadowCoord.z ),\n\t\t\t\t\t f.x ) +\n\t\t\t\tmix( texture2DCompare( shadowMap, uv + vec2( 0.0, -dy ), shadowCoord.z ), \n\t\t\t\t\t texture2DCompare( shadowMap, uv + vec2( 0.0, 2.0 * dy ), shadowCoord.z ),\n\t\t\t\t\t f.y ) +\n\t\t\t\tmix( texture2DCompare( shadowMap, uv + vec2( dx, -dy ), shadowCoord.z ), \n\t\t\t\t\t texture2DCompare( shadowMap, uv + vec2( dx, 2.0 * dy ), shadowCoord.z ),\n\t\t\t\t\t f.y ) +\n\t\t\t\tmix( mix( texture2DCompare( shadowMap, uv + vec2( -dx, -dy ), shadowCoord.z ), \n\t\t\t\t\t\t texture2DCompare( shadowMap, uv + vec2( 2.0 * dx, -dy ), shadowCoord.z ),\n\t\t\t\t\t\t f.x ),\n\t\t\t\t\t mix( texture2DCompare( shadowMap, uv + vec2( -dx, 2.0 * dy ), shadowCoord.z ), \n\t\t\t\t\t\t texture2DCompare( shadowMap, uv + vec2( 2.0 * dx, 2.0 * dy ), shadowCoord.z ),\n\t\t\t\t\t\t f.x ),\n\t\t\t\t\t f.y )\n\t\t\t) * ( 1.0 / 9.0 );\n\t\t#elif defined( SHADOWMAP_TYPE_VSM )\n\t\t\tshadow = VSMShadow( shadowMap, shadowCoord.xy, shadowCoord.z );\n\t\t#else\n\t\t\tshadow = texture2DCompare( shadowMap, shadowCoord.xy, shadowCoord.z );\n\t\t#endif\n\t\t}\n\t\treturn shadow;\n\t}\n\tvec2 cubeToUV( vec3 v, float texelSizeY ) {\n\t\tvec3 absV = abs( v );\n\t\tfloat scaleToCube = 1.0 / max( absV.x, max( absV.y, absV.z ) );\n\t\tabsV *= scaleToCube;\n\t\tv *= scaleToCube * ( 1.0 - 2.0 * texelSizeY );\n\t\tvec2 planar = v.xy;\n\t\tfloat almostATexel = 1.5 * texelSizeY;\n\t\tfloat almostOne = 1.0 - almostATexel;\n\t\tif ( absV.z >= almostOne ) {\n\t\t\tif ( v.z > 0.0 )\n\t\t\t\tplanar.x = 4.0 - v.x;\n\t\t} else if ( absV.x >= almostOne ) {\n\t\t\tfloat signX = sign( v.x );\n\t\t\tplanar.x = v.z * signX + 2.0 * signX;\n\t\t} else if ( absV.y >= almostOne ) {\n\t\t\tfloat signY = sign( v.y );\n\t\t\tplanar.x = v.x + 2.0 * signY + 2.0;\n\t\t\tplanar.y = v.z * signY - 2.0;\n\t\t}\n\t\treturn vec2( 0.125, 0.25 ) * planar + vec2( 0.375, 0.75 );\n\t}\n\tfloat getPointShadow( sampler2D shadowMap, vec2 shadowMapSize, float shadowBias, float shadowRadius, vec4 shadowCoord, float shadowCameraNear, float shadowCameraFar ) {\n\t\tvec2 texelSize = vec2( 1.0 ) / ( shadowMapSize * vec2( 4.0, 2.0 ) );\n\t\tvec3 lightToPosition = shadowCoord.xyz;\n\t\tfloat dp = ( length( lightToPosition ) - shadowCameraNear ) / ( shadowCameraFar - shadowCameraNear );\t\tdp += shadowBias;\n\t\tvec3 bd3D = normalize( lightToPosition );\n\t\t#if defined( SHADOWMAP_TYPE_PCF ) || defined( SHADOWMAP_TYPE_PCF_SOFT ) || defined( SHADOWMAP_TYPE_VSM )\n\t\t\tvec2 offset = vec2( - 1, 1 ) * shadowRadius * texelSize.y;\n\t\t\treturn (\n\t\t\t\ttexture2DCompare( shadowMap, cubeToUV( bd3D + offset.xyy, texelSize.y ), dp ) +\n\t\t\t\ttexture2DCompare( shadowMap, cubeToUV( bd3D + offset.yyy, texelSize.y ), dp ) +\n\t\t\t\ttexture2DCompare( shadowMap, cubeToUV( bd3D + offset.xyx, texelSize.y ), dp ) +\n\t\t\t\ttexture2DCompare( shadowMap, cubeToUV( bd3D + offset.yyx, texelSize.y ), dp ) +\n\t\t\t\ttexture2DCompare( shadowMap, cubeToUV( bd3D, texelSize.y ), dp ) +\n\t\t\t\ttexture2DCompare( shadowMap, cubeToUV( bd3D + offset.xxy, texelSize.y ), dp ) +\n\t\t\t\ttexture2DCompare( shadowMap, cubeToUV( bd3D + offset.yxy, texelSize.y ), dp ) +\n\t\t\t\ttexture2DCompare( shadowMap, cubeToUV( bd3D + offset.xxx, texelSize.y ), dp ) +\n\t\t\t\ttexture2DCompare( shadowMap, cubeToUV( bd3D + offset.yxx, texelSize.y ), dp )\n\t\t\t) * ( 1.0 / 9.0 );\n\t\t#else\n\t\t\treturn texture2DCompare( shadowMap, cubeToUV( bd3D, texelSize.y ), dp );\n\t\t#endif\n\t}\n#endif", +shadowmap_pars_vertex:"#ifdef USE_SHADOWMAP\n\t#if NUM_DIR_LIGHT_SHADOWS > 0\n\t\tuniform mat4 directionalShadowMatrix[ NUM_DIR_LIGHT_SHADOWS ];\n\t\tvarying vec4 vDirectionalShadowCoord[ NUM_DIR_LIGHT_SHADOWS ];\n\t#endif\n\t#if NUM_SPOT_LIGHT_SHADOWS > 0\n\t\tuniform mat4 spotShadowMatrix[ NUM_SPOT_LIGHT_SHADOWS ];\n\t\tvarying vec4 vSpotShadowCoord[ NUM_SPOT_LIGHT_SHADOWS ];\n\t#endif\n\t#if NUM_POINT_LIGHT_SHADOWS > 0\n\t\tuniform mat4 pointShadowMatrix[ NUM_POINT_LIGHT_SHADOWS ];\n\t\tvarying vec4 vPointShadowCoord[ NUM_POINT_LIGHT_SHADOWS ];\n\t#endif\n#endif", +shadowmap_vertex:"#ifdef USE_SHADOWMAP\n\t#if NUM_DIR_LIGHT_SHADOWS > 0\n\t#pragma unroll_loop_start\n\tfor ( int i = 0; i < NUM_DIR_LIGHT_SHADOWS; i ++ ) {\n\t\tvDirectionalShadowCoord[ i ] = directionalShadowMatrix[ i ] * worldPosition;\n\t}\n\t#pragma unroll_loop_end\n\t#endif\n\t#if NUM_SPOT_LIGHT_SHADOWS > 0\n\t#pragma unroll_loop_start\n\tfor ( int i = 0; i < NUM_SPOT_LIGHT_SHADOWS; i ++ ) {\n\t\tvSpotShadowCoord[ i ] = spotShadowMatrix[ i ] * worldPosition;\n\t}\n\t#pragma unroll_loop_end\n\t#endif\n\t#if NUM_POINT_LIGHT_SHADOWS > 0\n\t#pragma unroll_loop_start\n\tfor ( int i = 0; i < NUM_POINT_LIGHT_SHADOWS; i ++ ) {\n\t\tvPointShadowCoord[ i ] = pointShadowMatrix[ i ] * worldPosition;\n\t}\n\t#pragma unroll_loop_end\n\t#endif\n#endif", +shadowmask_pars_fragment:"float getShadowMask() {\n\tfloat shadow = 1.0;\n\t#ifdef USE_SHADOWMAP\n\t#if NUM_DIR_LIGHT_SHADOWS > 0\n\tDirectionalLightShadow directionalLight;\n\t#pragma unroll_loop_start\n\tfor ( int i = 0; i < NUM_DIR_LIGHT_SHADOWS; i ++ ) {\n\t\tdirectionalLight = directionalLightShadows[ i ];\n\t\tshadow *= receiveShadow ? getShadow( directionalShadowMap[ i ], directionalLight.shadowMapSize, directionalLight.shadowBias, directionalLight.shadowRadius, vDirectionalShadowCoord[ i ] ) : 1.0;\n\t}\n\t#pragma unroll_loop_end\n\t#endif\n\t#if NUM_SPOT_LIGHT_SHADOWS > 0\n\tSpotLightShadow spotLight;\n\t#pragma unroll_loop_start\n\tfor ( int i = 0; i < NUM_SPOT_LIGHT_SHADOWS; i ++ ) {\n\t\tspotLight = spotLightShadows[ i ];\n\t\tshadow *= receiveShadow ? getShadow( spotShadowMap[ i ], spotLight.shadowMapSize, spotLight.shadowBias, spotLight.shadowRadius, vSpotShadowCoord[ i ] ) : 1.0;\n\t}\n\t#pragma unroll_loop_end\n\t#endif\n\t#if NUM_POINT_LIGHT_SHADOWS > 0\n\tPointLightShadow pointLight;\n\t#pragma unroll_loop_start\n\tfor ( int i = 0; i < NUM_POINT_LIGHT_SHADOWS; i ++ ) {\n\t\tpointLight = pointLightShadows[ i ];\n\t\tshadow *= receiveShadow ? getPointShadow( pointShadowMap[ i ], pointLight.shadowMapSize, pointLight.shadowBias, pointLight.shadowRadius, vPointShadowCoord[ i ], pointLight.shadowCameraNear, pointLight.shadowCameraFar ) : 1.0;\n\t}\n\t#pragma unroll_loop_end\n\t#endif\n\t#endif\n\treturn shadow;\n}", +skinbase_vertex:"#ifdef USE_SKINNING\n\tmat4 boneMatX = getBoneMatrix( skinIndex.x );\n\tmat4 boneMatY = getBoneMatrix( skinIndex.y );\n\tmat4 boneMatZ = getBoneMatrix( skinIndex.z );\n\tmat4 boneMatW = getBoneMatrix( skinIndex.w );\n#endif",skinning_pars_vertex:"#ifdef USE_SKINNING\n\tuniform mat4 bindMatrix;\n\tuniform mat4 bindMatrixInverse;\n\t#ifdef BONE_TEXTURE\n\t\tuniform highp sampler2D boneTexture;\n\t\tuniform int boneTextureSize;\n\t\tmat4 getBoneMatrix( const in float i ) {\n\t\t\tfloat j = i * 4.0;\n\t\t\tfloat x = mod( j, float( boneTextureSize ) );\n\t\t\tfloat y = floor( j / float( boneTextureSize ) );\n\t\t\tfloat dx = 1.0 / float( boneTextureSize );\n\t\t\tfloat dy = 1.0 / float( boneTextureSize );\n\t\t\ty = dy * ( y + 0.5 );\n\t\t\tvec4 v1 = texture2D( boneTexture, vec2( dx * ( x + 0.5 ), y ) );\n\t\t\tvec4 v2 = texture2D( boneTexture, vec2( dx * ( x + 1.5 ), y ) );\n\t\t\tvec4 v3 = texture2D( boneTexture, vec2( dx * ( x + 2.5 ), y ) );\n\t\t\tvec4 v4 = texture2D( boneTexture, vec2( dx * ( x + 3.5 ), y ) );\n\t\t\tmat4 bone = mat4( v1, v2, v3, v4 );\n\t\t\treturn bone;\n\t\t}\n\t#else\n\t\tuniform mat4 boneMatrices[ MAX_BONES ];\n\t\tmat4 getBoneMatrix( const in float i ) {\n\t\t\tmat4 bone = boneMatrices[ int(i) ];\n\t\t\treturn bone;\n\t\t}\n\t#endif\n#endif", +skinning_vertex:"#ifdef USE_SKINNING\n\tvec4 skinVertex = bindMatrix * vec4( transformed, 1.0 );\n\tvec4 skinned = vec4( 0.0 );\n\tskinned += boneMatX * skinVertex * skinWeight.x;\n\tskinned += boneMatY * skinVertex * skinWeight.y;\n\tskinned += boneMatZ * skinVertex * skinWeight.z;\n\tskinned += boneMatW * skinVertex * skinWeight.w;\n\ttransformed = ( bindMatrixInverse * skinned ).xyz;\n#endif",skinnormal_vertex:"#ifdef USE_SKINNING\n\tmat4 skinMatrix = mat4( 0.0 );\n\tskinMatrix += skinWeight.x * boneMatX;\n\tskinMatrix += skinWeight.y * boneMatY;\n\tskinMatrix += skinWeight.z * boneMatZ;\n\tskinMatrix += skinWeight.w * boneMatW;\n\tskinMatrix = bindMatrixInverse * skinMatrix * bindMatrix;\n\tobjectNormal = vec4( skinMatrix * vec4( objectNormal, 0.0 ) ).xyz;\n\t#ifdef USE_TANGENT\n\t\tobjectTangent = vec4( skinMatrix * vec4( objectTangent, 0.0 ) ).xyz;\n\t#endif\n#endif", +specularmap_fragment:"float specularStrength;\n#ifdef USE_SPECULARMAP\n\tvec4 texelSpecular = texture2D( specularMap, vUv );\n\tspecularStrength = texelSpecular.r;\n#else\n\tspecularStrength = 1.0;\n#endif",specularmap_pars_fragment:"#ifdef USE_SPECULARMAP\n\tuniform sampler2D specularMap;\n#endif",tonemapping_fragment:"#if defined( TONE_MAPPING )\n\tgl_FragColor.rgb = toneMapping( gl_FragColor.rgb );\n#endif",tonemapping_pars_fragment:"#ifndef saturate\n#define saturate(a) clamp( a, 0.0, 1.0 )\n#endif\nuniform float toneMappingExposure;\nuniform float toneMappingWhitePoint;\nvec3 LinearToneMapping( vec3 color ) {\n\treturn toneMappingExposure * color;\n}\nvec3 ReinhardToneMapping( vec3 color ) {\n\tcolor *= toneMappingExposure;\n\treturn saturate( color / ( vec3( 1.0 ) + color ) );\n}\n#define Uncharted2Helper( x ) max( ( ( x * ( 0.15 * x + 0.10 * 0.50 ) + 0.20 * 0.02 ) / ( x * ( 0.15 * x + 0.50 ) + 0.20 * 0.30 ) ) - 0.02 / 0.30, vec3( 0.0 ) )\nvec3 Uncharted2ToneMapping( vec3 color ) {\n\tcolor *= toneMappingExposure;\n\treturn saturate( Uncharted2Helper( color ) / Uncharted2Helper( vec3( toneMappingWhitePoint ) ) );\n}\nvec3 OptimizedCineonToneMapping( vec3 color ) {\n\tcolor *= toneMappingExposure;\n\tcolor = max( vec3( 0.0 ), color - 0.004 );\n\treturn pow( ( color * ( 6.2 * color + 0.5 ) ) / ( color * ( 6.2 * color + 1.7 ) + 0.06 ), vec3( 2.2 ) );\n}\nvec3 ACESFilmicToneMapping( vec3 color ) {\n\tcolor *= toneMappingExposure;\n\treturn saturate( ( color * ( 2.51 * color + 0.03 ) ) / ( color * ( 2.43 * color + 0.59 ) + 0.14 ) );\n}", +uv_pars_fragment:"#if ( defined( USE_UV ) && ! defined( UVS_VERTEX_ONLY ) )\n\tvarying vec2 vUv;\n#endif",uv_pars_vertex:"#ifdef USE_UV\n\t#ifdef UVS_VERTEX_ONLY\n\t\tvec2 vUv;\n\t#else\n\t\tvarying vec2 vUv;\n\t#endif\n\tuniform mat3 uvTransform;\n#endif",uv_vertex:"#ifdef USE_UV\n\tvUv = ( uvTransform * vec3( uv, 1 ) ).xy;\n#endif",uv2_pars_fragment:"#if defined( USE_LIGHTMAP ) || defined( USE_AOMAP )\n\tvarying vec2 vUv2;\n#endif",uv2_pars_vertex:"#if defined( USE_LIGHTMAP ) || defined( USE_AOMAP )\n\tattribute vec2 uv2;\n\tvarying vec2 vUv2;\n\tuniform mat3 uv2Transform;\n#endif", +uv2_vertex:"#if defined( USE_LIGHTMAP ) || defined( USE_AOMAP )\n\tvUv2 = ( uv2Transform * vec3( uv2, 1 ) ).xy;\n#endif",worldpos_vertex:"#if defined( USE_ENVMAP ) || defined( DISTANCE ) || defined ( USE_SHADOWMAP )\n\tvec4 worldPosition = vec4( transformed, 1.0 );\n\t#ifdef USE_INSTANCING\n\t\tworldPosition = instanceMatrix * worldPosition;\n\t#endif\n\tworldPosition = modelMatrix * worldPosition;\n#endif",background_frag:"uniform sampler2D t2D;\nvarying vec2 vUv;\nvoid main() {\n\tvec4 texColor = texture2D( t2D, vUv );\n\tgl_FragColor = mapTexelToLinear( texColor );\n\t#include \n\t#include \n}", +background_vert:"varying vec2 vUv;\nuniform mat3 uvTransform;\nvoid main() {\n\tvUv = ( uvTransform * vec3( uv, 1 ) ).xy;\n\tgl_Position = vec4( position.xy, 1.0, 1.0 );\n}",cube_frag:"#include \nuniform float opacity;\nvarying vec3 vWorldDirection;\n#include \nvoid main() {\n\tvec3 vReflect = vWorldDirection;\n\t#include \n\tgl_FragColor = envColor;\n\tgl_FragColor.a *= opacity;\n\t#include \n\t#include \n}", +cube_vert:"varying vec3 vWorldDirection;\n#include \nvoid main() {\n\tvWorldDirection = transformDirection( position, modelMatrix );\n\t#include \n\t#include \n\tgl_Position.z = gl_Position.w;\n}",depth_frag:"#if DEPTH_PACKING == 3200\n\tuniform float opacity;\n#endif\n#include \n#include \n#include \n#include \n#include \n#include \n#include \nvarying vec2 vHighPrecisionZW;\nvoid main() {\n\t#include \n\tvec4 diffuseColor = vec4( 1.0 );\n\t#if DEPTH_PACKING == 3200\n\t\tdiffuseColor.a = opacity;\n\t#endif\n\t#include \n\t#include \n\t#include \n\t#include \n\tfloat fragCoordZ = 0.5 * vHighPrecisionZW[0] / vHighPrecisionZW[1] + 0.5;\n\t#if DEPTH_PACKING == 3200\n\t\tgl_FragColor = vec4( vec3( 1.0 - fragCoordZ ), opacity );\n\t#elif DEPTH_PACKING == 3201\n\t\tgl_FragColor = packDepthToRGBA( fragCoordZ );\n\t#endif\n}", +depth_vert:"#include \n#include \n#include \n#include \n#include \n#include \n#include \nvarying vec2 vHighPrecisionZW;\nvoid main() {\n\t#include \n\t#include \n\t#ifdef USE_DISPLACEMENTMAP\n\t\t#include \n\t\t#include \n\t\t#include \n\t#endif\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\tvHighPrecisionZW = gl_Position.zw;\n}", +distanceRGBA_frag:"#define DISTANCE\nuniform vec3 referencePosition;\nuniform float nearDistance;\nuniform float farDistance;\nvarying vec3 vWorldPosition;\n#include \n#include \n#include \n#include \n#include \n#include \nvoid main () {\n\t#include \n\tvec4 diffuseColor = vec4( 1.0 );\n\t#include \n\t#include \n\t#include \n\tfloat dist = length( vWorldPosition - referencePosition );\n\tdist = ( dist - nearDistance ) / ( farDistance - nearDistance );\n\tdist = saturate( dist );\n\tgl_FragColor = packDepthToRGBA( dist );\n}", +distanceRGBA_vert:"#define DISTANCE\nvarying vec3 vWorldPosition;\n#include \n#include \n#include \n#include \n#include \n#include \nvoid main() {\n\t#include \n\t#include \n\t#ifdef USE_DISPLACEMENTMAP\n\t\t#include \n\t\t#include \n\t\t#include \n\t#endif\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\tvWorldPosition = worldPosition.xyz;\n}", +equirect_frag:"uniform sampler2D tEquirect;\nvarying vec3 vWorldDirection;\n#include \nvoid main() {\n\tvec3 direction = normalize( vWorldDirection );\n\tvec2 sampleUV;\n\tsampleUV.y = asin( clamp( direction.y, - 1.0, 1.0 ) ) * RECIPROCAL_PI + 0.5;\n\tsampleUV.x = atan( direction.z, direction.x ) * RECIPROCAL_PI2 + 0.5;\n\tvec4 texColor = texture2D( tEquirect, sampleUV );\n\tgl_FragColor = mapTexelToLinear( texColor );\n\t#include \n\t#include \n}", +equirect_vert:"varying vec3 vWorldDirection;\n#include \nvoid main() {\n\tvWorldDirection = transformDirection( position, modelMatrix );\n\t#include \n\t#include \n}",linedashed_frag:"uniform vec3 diffuse;\nuniform float opacity;\nuniform float dashSize;\nuniform float totalSize;\nvarying float vLineDistance;\n#include \n#include \n#include \n#include \n#include \nvoid main() {\n\t#include \n\tif ( mod( vLineDistance, totalSize ) > dashSize ) {\n\t\tdiscard;\n\t}\n\tvec3 outgoingLight = vec3( 0.0 );\n\tvec4 diffuseColor = vec4( diffuse, opacity );\n\t#include \n\t#include \n\toutgoingLight = diffuseColor.rgb;\n\tgl_FragColor = vec4( outgoingLight, diffuseColor.a );\n\t#include \n\t#include \n\t#include \n\t#include \n}", +linedashed_vert:"uniform float scale;\nattribute float lineDistance;\nvarying float vLineDistance;\n#include \n#include \n#include \n#include \n#include \nvoid main() {\n\tvLineDistance = scale * lineDistance;\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n}",meshbasic_frag:"uniform vec3 diffuse;\nuniform float opacity;\n#ifndef FLAT_SHADED\n\tvarying vec3 vNormal;\n#endif\n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \nvoid main() {\n\t#include \n\tvec4 diffuseColor = vec4( diffuse, opacity );\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\tReflectedLight reflectedLight = ReflectedLight( vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ) );\n\t#ifdef USE_LIGHTMAP\n\t\n\t\tvec4 lightMapTexel= texture2D( lightMap, vUv2 );\n\t\treflectedLight.indirectDiffuse += lightMapTexelToLinear( lightMapTexel ).rgb * lightMapIntensity;\n\t#else\n\t\treflectedLight.indirectDiffuse += vec3( 1.0 );\n\t#endif\n\t#include \n\treflectedLight.indirectDiffuse *= diffuseColor.rgb;\n\tvec3 outgoingLight = reflectedLight.indirectDiffuse;\n\t#include \n\tgl_FragColor = vec4( outgoingLight, diffuseColor.a );\n\t#include \n\t#include \n\t#include \n\t#include \n}", +meshbasic_vert:"#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \nvoid main() {\n\t#include \n\t#include \n\t#include \n\t#include \n\t#ifdef USE_ENVMAP\n\t#include \n\t#include \n\t#include \n\t#include \n\t#endif\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n}", +meshlambert_frag:"uniform vec3 diffuse;\nuniform vec3 emissive;\nuniform float opacity;\nvarying vec3 vLightFront;\nvarying vec3 vIndirectFront;\n#ifdef DOUBLE_SIDED\n\tvarying vec3 vLightBack;\n\tvarying vec3 vIndirectBack;\n#endif\n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \nvoid main() {\n\t#include \n\tvec4 diffuseColor = vec4( diffuse, opacity );\n\tReflectedLight reflectedLight = ReflectedLight( vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ) );\n\tvec3 totalEmissiveRadiance = emissive;\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\treflectedLight.indirectDiffuse = getAmbientLightIrradiance( ambientLightColor );\n\t#ifdef DOUBLE_SIDED\n\t\treflectedLight.indirectDiffuse += ( gl_FrontFacing ) ? vIndirectFront : vIndirectBack;\n\t#else\n\t\treflectedLight.indirectDiffuse += vIndirectFront;\n\t#endif\n\t#include \n\treflectedLight.indirectDiffuse *= BRDF_Diffuse_Lambert( diffuseColor.rgb );\n\t#ifdef DOUBLE_SIDED\n\t\treflectedLight.directDiffuse = ( gl_FrontFacing ) ? vLightFront : vLightBack;\n\t#else\n\t\treflectedLight.directDiffuse = vLightFront;\n\t#endif\n\treflectedLight.directDiffuse *= BRDF_Diffuse_Lambert( diffuseColor.rgb ) * getShadowMask();\n\t#include \n\tvec3 outgoingLight = reflectedLight.directDiffuse + reflectedLight.indirectDiffuse + totalEmissiveRadiance;\n\t#include \n\tgl_FragColor = vec4( outgoingLight, diffuseColor.a );\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n}", +meshlambert_vert:"#define LAMBERT\nvarying vec3 vLightFront;\nvarying vec3 vIndirectFront;\n#ifdef DOUBLE_SIDED\n\tvarying vec3 vLightBack;\n\tvarying vec3 vIndirectBack;\n#endif\n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \nvoid main() {\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n}", +meshmatcap_frag:"#define MATCAP\nuniform vec3 diffuse;\nuniform float opacity;\nuniform sampler2D matcap;\nvarying vec3 vViewPosition;\n#ifndef FLAT_SHADED\n\tvarying vec3 vNormal;\n#endif\n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \nvoid main() {\n\t#include \n\tvec4 diffuseColor = vec4( diffuse, opacity );\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\tvec3 viewDir = normalize( vViewPosition );\n\tvec3 x = normalize( vec3( viewDir.z, 0.0, - viewDir.x ) );\n\tvec3 y = cross( viewDir, x );\n\tvec2 uv = vec2( dot( x, normal ), dot( y, normal ) ) * 0.495 + 0.5;\n\t#ifdef USE_MATCAP\n\t\tvec4 matcapColor = texture2D( matcap, uv );\n\t\tmatcapColor = matcapTexelToLinear( matcapColor );\n\t#else\n\t\tvec4 matcapColor = vec4( 1.0 );\n\t#endif\n\tvec3 outgoingLight = diffuseColor.rgb * matcapColor.rgb;\n\tgl_FragColor = vec4( outgoingLight, diffuseColor.a );\n\t#include \n\t#include \n\t#include \n\t#include \n}", +meshmatcap_vert:"#define MATCAP\nvarying vec3 vViewPosition;\n#ifndef FLAT_SHADED\n\tvarying vec3 vNormal;\n#endif\n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \nvoid main() {\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#ifndef FLAT_SHADED\n\t\tvNormal = normalize( transformedNormal );\n\t#endif\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\tvViewPosition = - mvPosition.xyz;\n}", +meshtoon_frag:"#define TOON\nuniform vec3 diffuse;\nuniform vec3 emissive;\nuniform vec3 specular;\nuniform float shininess;\nuniform float opacity;\n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \nvoid main() {\n\t#include \n\tvec4 diffuseColor = vec4( diffuse, opacity );\n\tReflectedLight reflectedLight = ReflectedLight( vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ) );\n\tvec3 totalEmissiveRadiance = emissive;\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\tvec3 outgoingLight = reflectedLight.directDiffuse + reflectedLight.indirectDiffuse + reflectedLight.directSpecular + reflectedLight.indirectSpecular + totalEmissiveRadiance;\n\tgl_FragColor = vec4( outgoingLight, diffuseColor.a );\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n}", +meshtoon_vert:"#define TOON\nvarying vec3 vViewPosition;\n#ifndef FLAT_SHADED\n\tvarying vec3 vNormal;\n#endif\n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \nvoid main() {\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n#ifndef FLAT_SHADED\n\tvNormal = normalize( transformedNormal );\n#endif\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\tvViewPosition = - mvPosition.xyz;\n\t#include \n\t#include \n\t#include \n}", +meshphong_frag:"#define PHONG\nuniform vec3 diffuse;\nuniform vec3 emissive;\nuniform vec3 specular;\nuniform float shininess;\nuniform float opacity;\n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \nvoid main() {\n\t#include \n\tvec4 diffuseColor = vec4( diffuse, opacity );\n\tReflectedLight reflectedLight = ReflectedLight( vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ) );\n\tvec3 totalEmissiveRadiance = emissive;\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\tvec3 outgoingLight = reflectedLight.directDiffuse + reflectedLight.indirectDiffuse + reflectedLight.directSpecular + reflectedLight.indirectSpecular + totalEmissiveRadiance;\n\t#include \n\tgl_FragColor = vec4( outgoingLight, diffuseColor.a );\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n}", +meshphong_vert:"#define PHONG\nvarying vec3 vViewPosition;\n#ifndef FLAT_SHADED\n\tvarying vec3 vNormal;\n#endif\n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \nvoid main() {\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n#ifndef FLAT_SHADED\n\tvNormal = normalize( transformedNormal );\n#endif\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\tvViewPosition = - mvPosition.xyz;\n\t#include \n\t#include \n\t#include \n\t#include \n}", +meshphysical_frag:"#define STANDARD\n#ifdef PHYSICAL\n\t#define REFLECTIVITY\n\t#define CLEARCOAT\n\t#define TRANSPARENCY\n#endif\nuniform vec3 diffuse;\nuniform vec3 emissive;\nuniform float roughness;\nuniform float metalness;\nuniform float opacity;\n#ifdef TRANSPARENCY\n\tuniform float transparency;\n#endif\n#ifdef REFLECTIVITY\n\tuniform float reflectivity;\n#endif\n#ifdef CLEARCOAT\n\tuniform float clearcoat;\n\tuniform float clearcoatRoughness;\n#endif\n#ifdef USE_SHEEN\n\tuniform vec3 sheen;\n#endif\nvarying vec3 vViewPosition;\n#ifndef FLAT_SHADED\n\tvarying vec3 vNormal;\n\t#ifdef USE_TANGENT\n\t\tvarying vec3 vTangent;\n\t\tvarying vec3 vBitangent;\n\t#endif\n#endif\n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \nvoid main() {\n\t#include \n\tvec4 diffuseColor = vec4( diffuse, opacity );\n\tReflectedLight reflectedLight = ReflectedLight( vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ) );\n\tvec3 totalEmissiveRadiance = emissive;\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\tvec3 outgoingLight = reflectedLight.directDiffuse + reflectedLight.indirectDiffuse + reflectedLight.directSpecular + reflectedLight.indirectSpecular + totalEmissiveRadiance;\n\t#ifdef TRANSPARENCY\n\t\tdiffuseColor.a *= saturate( 1. - transparency + linearToRelativeLuminance( reflectedLight.directSpecular + reflectedLight.indirectSpecular ) );\n\t#endif\n\tgl_FragColor = vec4( outgoingLight, diffuseColor.a );\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n}", +meshphysical_vert:"#define STANDARD\nvarying vec3 vViewPosition;\n#ifndef FLAT_SHADED\n\tvarying vec3 vNormal;\n\t#ifdef USE_TANGENT\n\t\tvarying vec3 vTangent;\n\t\tvarying vec3 vBitangent;\n\t#endif\n#endif\n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \nvoid main() {\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n#ifndef FLAT_SHADED\n\tvNormal = normalize( transformedNormal );\n\t#ifdef USE_TANGENT\n\t\tvTangent = normalize( transformedTangent );\n\t\tvBitangent = normalize( cross( vNormal, vTangent ) * tangent.w );\n\t#endif\n#endif\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\tvViewPosition = - mvPosition.xyz;\n\t#include \n\t#include \n\t#include \n}", +normal_frag:"#define NORMAL\nuniform float opacity;\n#if defined( FLAT_SHADED ) || defined( USE_BUMPMAP ) || defined( TANGENTSPACE_NORMALMAP )\n\tvarying vec3 vViewPosition;\n#endif\n#ifndef FLAT_SHADED\n\tvarying vec3 vNormal;\n\t#ifdef USE_TANGENT\n\t\tvarying vec3 vTangent;\n\t\tvarying vec3 vBitangent;\n\t#endif\n#endif\n#include \n#include \n#include \n#include \n#include \n#include \nvoid main() {\n\t#include \n\t#include \n\t#include \n\t#include \n\tgl_FragColor = vec4( packNormalToRGB( normal ), opacity );\n}", +normal_vert:"#define NORMAL\n#if defined( FLAT_SHADED ) || defined( USE_BUMPMAP ) || defined( TANGENTSPACE_NORMALMAP )\n\tvarying vec3 vViewPosition;\n#endif\n#ifndef FLAT_SHADED\n\tvarying vec3 vNormal;\n\t#ifdef USE_TANGENT\n\t\tvarying vec3 vTangent;\n\t\tvarying vec3 vBitangent;\n\t#endif\n#endif\n#include \n#include \n#include \n#include \n#include \n#include \n#include \nvoid main() {\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n#ifndef FLAT_SHADED\n\tvNormal = normalize( transformedNormal );\n\t#ifdef USE_TANGENT\n\t\tvTangent = normalize( transformedTangent );\n\t\tvBitangent = normalize( cross( vNormal, vTangent ) * tangent.w );\n\t#endif\n#endif\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n#if defined( FLAT_SHADED ) || defined( USE_BUMPMAP ) || defined( TANGENTSPACE_NORMALMAP )\n\tvViewPosition = - mvPosition.xyz;\n#endif\n}", +points_frag:"uniform vec3 diffuse;\nuniform float opacity;\n#include \n#include \n#include \n#include \n#include \n#include \nvoid main() {\n\t#include \n\tvec3 outgoingLight = vec3( 0.0 );\n\tvec4 diffuseColor = vec4( diffuse, opacity );\n\t#include \n\t#include \n\t#include \n\t#include \n\toutgoingLight = diffuseColor.rgb;\n\tgl_FragColor = vec4( outgoingLight, diffuseColor.a );\n\t#include \n\t#include \n\t#include \n\t#include \n}", +points_vert:"uniform float size;\nuniform float scale;\n#include \n#include \n#include \n#include \n#include \n#include \nvoid main() {\n\t#include \n\t#include \n\t#include \n\t#include \n\tgl_PointSize = size;\n\t#ifdef USE_SIZEATTENUATION\n\t\tbool isPerspective = isPerspectiveMatrix( projectionMatrix );\n\t\tif ( isPerspective ) gl_PointSize *= ( scale / - mvPosition.z );\n\t#endif\n\t#include \n\t#include \n\t#include \n\t#include \n}", +shadow_frag:"uniform vec3 color;\nuniform float opacity;\n#include \n#include \n#include \n#include \n#include \n#include \n#include \nvoid main() {\n\tgl_FragColor = vec4( color, opacity * ( 1.0 - getShadowMask() ) );\n\t#include \n\t#include \n\t#include \n}",shadow_vert:"#include \n#include \nvoid main() {\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n}", +sprite_frag:"uniform vec3 diffuse;\nuniform float opacity;\n#include \n#include \n#include \n#include \n#include \n#include \n#include \nvoid main() {\n\t#include \n\tvec3 outgoingLight = vec3( 0.0 );\n\tvec4 diffuseColor = vec4( diffuse, opacity );\n\t#include \n\t#include \n\t#include \n\t#include \n\toutgoingLight = diffuseColor.rgb;\n\tgl_FragColor = vec4( outgoingLight, diffuseColor.a );\n\t#include \n\t#include \n\t#include \n}", +sprite_vert:"uniform float rotation;\nuniform vec2 center;\n#include \n#include \n#include \n#include \n#include \nvoid main() {\n\t#include \n\tvec4 mvPosition = modelViewMatrix * vec4( 0.0, 0.0, 0.0, 1.0 );\n\tvec2 scale;\n\tscale.x = length( vec3( modelMatrix[ 0 ].x, modelMatrix[ 0 ].y, modelMatrix[ 0 ].z ) );\n\tscale.y = length( vec3( modelMatrix[ 1 ].x, modelMatrix[ 1 ].y, modelMatrix[ 1 ].z ) );\n\t#ifndef USE_SIZEATTENUATION\n\t\tbool isPerspective = isPerspectiveMatrix( projectionMatrix );\n\t\tif ( isPerspective ) scale *= - mvPosition.z;\n\t#endif\n\tvec2 alignedPosition = ( position.xy - ( center - vec2( 0.5 ) ) ) * scale;\n\tvec2 rotatedPosition;\n\trotatedPosition.x = cos( rotation ) * alignedPosition.x - sin( rotation ) * alignedPosition.y;\n\trotatedPosition.y = sin( rotation ) * alignedPosition.x + cos( rotation ) * alignedPosition.y;\n\tmvPosition.xy += rotatedPosition;\n\tgl_Position = projectionMatrix * mvPosition;\n\t#include \n\t#include \n\t#include \n}"}, +eb={basic:{uniforms:va([D.common,D.specularmap,D.envmap,D.aomap,D.lightmap,D.fog]),vertexShader:O.meshbasic_vert,fragmentShader:O.meshbasic_frag},lambert:{uniforms:va([D.common,D.specularmap,D.envmap,D.aomap,D.lightmap,D.emissivemap,D.fog,D.lights,{emissive:{value:new A(0)}}]),vertexShader:O.meshlambert_vert,fragmentShader:O.meshlambert_frag},phong:{uniforms:va([D.common,D.specularmap,D.envmap,D.aomap,D.lightmap,D.emissivemap,D.bumpmap,D.normalmap,D.displacementmap,D.fog,D.lights,{emissive:{value:new A(0)}, +specular:{value:new A(1118481)},shininess:{value:30}}]),vertexShader:O.meshphong_vert,fragmentShader:O.meshphong_frag},standard:{uniforms:va([D.common,D.envmap,D.aomap,D.lightmap,D.emissivemap,D.bumpmap,D.normalmap,D.displacementmap,D.roughnessmap,D.metalnessmap,D.fog,D.lights,{emissive:{value:new A(0)},roughness:{value:.5},metalness:{value:.5},envMapIntensity:{value:1}}]),vertexShader:O.meshphysical_vert,fragmentShader:O.meshphysical_frag},toon:{uniforms:va([D.common,D.specularmap,D.aomap,D.lightmap, +D.emissivemap,D.bumpmap,D.normalmap,D.displacementmap,D.gradientmap,D.fog,D.lights,{emissive:{value:new A(0)},specular:{value:new A(1118481)},shininess:{value:30}}]),vertexShader:O.meshtoon_vert,fragmentShader:O.meshtoon_frag},matcap:{uniforms:va([D.common,D.bumpmap,D.normalmap,D.displacementmap,D.fog,{matcap:{value:null}}]),vertexShader:O.meshmatcap_vert,fragmentShader:O.meshmatcap_frag},points:{uniforms:va([D.points,D.fog]),vertexShader:O.points_vert,fragmentShader:O.points_frag},dashed:{uniforms:va([D.common, +D.fog,{scale:{value:1},dashSize:{value:1},totalSize:{value:2}}]),vertexShader:O.linedashed_vert,fragmentShader:O.linedashed_frag},depth:{uniforms:va([D.common,D.displacementmap]),vertexShader:O.depth_vert,fragmentShader:O.depth_frag},normal:{uniforms:va([D.common,D.bumpmap,D.normalmap,D.displacementmap,{opacity:{value:1}}]),vertexShader:O.normal_vert,fragmentShader:O.normal_frag},sprite:{uniforms:va([D.sprite,D.fog]),vertexShader:O.sprite_vert,fragmentShader:O.sprite_frag},background:{uniforms:{uvTransform:{value:new wa}, +t2D:{value:null}},vertexShader:O.background_vert,fragmentShader:O.background_frag},cube:{uniforms:va([D.envmap,{opacity:{value:1}}]),vertexShader:O.cube_vert,fragmentShader:O.cube_frag},equirect:{uniforms:{tEquirect:{value:null}},vertexShader:O.equirect_vert,fragmentShader:O.equirect_frag},distanceRGBA:{uniforms:va([D.common,D.displacementmap,{referencePosition:{value:new n},nearDistance:{value:1},farDistance:{value:1E3}}]),vertexShader:O.distanceRGBA_vert,fragmentShader:O.distanceRGBA_frag},shadow:{uniforms:va([D.lights, +D.fog,{color:{value:new A(0)},opacity:{value:1}}]),vertexShader:O.shadow_vert,fragmentShader:O.shadow_frag}};eb.physical={uniforms:va([eb.standard.uniforms,{clearcoat:{value:0},clearcoatMap:{value:null},clearcoatRoughness:{value:0},clearcoatRoughnessMap:{value:null},clearcoatNormalScale:{value:new t(1,1)},clearcoatNormalMap:{value:null},sheen:{value:new A(0)},transparency:{value:0}}]),vertexShader:O.meshphysical_vert,fragmentShader:O.meshphysical_frag};qb.prototype=Object.create(V.prototype);qb.prototype.constructor= +qb;qb.prototype.isCubeTexture=!0;Object.defineProperty(qb.prototype,"images",{get:function(){return this.image},set:function(a){this.image=a}});Ic.prototype=Object.create(V.prototype);Ic.prototype.constructor=Ic;Ic.prototype.isDataTexture2DArray=!0;Jc.prototype=Object.create(V.prototype);Jc.prototype.constructor=Jc;Jc.prototype.isDataTexture3D=!0;var Hh=new V,Pj=new Ic,Rj=new Jc,Ih=new qb,Bh=[],Dh=[],Gh=new Float32Array(16),Fh=new Float32Array(9),Eh=new Float32Array(4);Jh.prototype.updateCache=function(a){var b= +this.cache;a instanceof Float32Array&&b.length!==a.length&&(this.cache=new Float32Array(a.length));Ia(b,a)};Kh.prototype.setValue=function(a,b,c){for(var d=this.seq,e=0,f=d.length;e!==f;++e){var g=d[e];g.setValue(a,b[g.id],c)}};var gg=/([\w\d_]+)(\])?(\[|\.)?/g;Eb.prototype.setValue=function(a,b,c,d){b=this.map[b];void 0!==b&&b.setValue(a,c,d)};Eb.prototype.setOptional=function(a,b,c){b=b[c];void 0!==b&&this.setValue(a,c,b)};Eb.upload=function(a,b,c,d){for(var e=0,f=b.length;e!==f;++e){var g=b[e], +h=c[g.id];!1!==h.needsUpdate&&g.setValue(a,h.value,d)}};Eb.seqWithValue=function(a,b){for(var c=[],d=0,e=a.length;d!==e;++d){var f=a[d];f.id in b&&c.push(f)}return c};var wk=0,ig=/^[ \t]*#include +<([\w\d./]+)>/gm,Th=/#pragma unroll_loop[\s]+?for \( int i = (\d+); i < (\d+); i \+\+ \) \{([\s\S]+?)(?=\})\}/g,Sh=/#pragma unroll_loop_start[\s]+?for \( int i = (\d+); i < (\d+); i \+\+ \) \{([\s\S]+?)(?=\})\}[\s]+?#pragma unroll_loop_end/g,Gk=0;Fb.prototype=Object.create(K.prototype);Fb.prototype.constructor= +Fb;Fb.prototype.isMeshDepthMaterial=!0;Fb.prototype.copy=function(a){K.prototype.copy.call(this,a);this.depthPacking=a.depthPacking;this.skinning=a.skinning;this.morphTargets=a.morphTargets;this.map=a.map;this.alphaMap=a.alphaMap;this.displacementMap=a.displacementMap;this.displacementScale=a.displacementScale;this.displacementBias=a.displacementBias;this.wireframe=a.wireframe;this.wireframeLinewidth=a.wireframeLinewidth;return this};Gb.prototype=Object.create(K.prototype);Gb.prototype.constructor= +Gb;Gb.prototype.isMeshDistanceMaterial=!0;Gb.prototype.copy=function(a){K.prototype.copy.call(this,a);this.referencePosition.copy(a.referencePosition);this.nearDistance=a.nearDistance;this.farDistance=a.farDistance;this.skinning=a.skinning;this.morphTargets=a.morphTargets;this.map=a.map;this.alphaMap=a.alphaMap;this.displacementMap=a.displacementMap;this.displacementScale=a.displacementScale;this.displacementBias=a.displacementBias;return this};Pe.prototype=Object.assign(Object.create(aa.prototype), +{constructor:Pe,isArrayCamera:!0});Mc.prototype=Object.assign(Object.create(F.prototype),{constructor:Mc,isGroup:!0});Object.assign($h.prototype,Ea.prototype);Object.assign(Qe.prototype,{isFogExp2:!0,clone:function(){return new Qe(this.color,this.density)},toJSON:function(){return{type:"FogExp2",color:this.color.getHex(),density:this.density}}});Object.assign(Re.prototype,{isFog:!0,clone:function(){return new Re(this.color,this.near,this.far)},toJSON:function(){return{type:"Fog",color:this.color.getHex(), +near:this.near,far:this.far}}});Object.defineProperty(rb.prototype,"needsUpdate",{set:function(a){!0===a&&this.version++}});Object.assign(rb.prototype,{isInterleavedBuffer:!0,onUploadCallback:function(){},setUsage:function(a){this.usage=a;return this},copy:function(a){this.array=new a.array.constructor(a.array);this.count=a.count;this.stride=a.stride;this.usage=a.usage;return this},copyAt:function(a,b,c){a*=this.stride;c*=b.stride;for(var d=0,e=this.stride;da.far||b.push({distance:e,point:Ce.clone(),uv:oa.getUV(Ce,Mf,De,Nf,Ri,oh, +Si,new t),face:null,object:this})},clone:function(){return(new this.constructor(this.material)).copy(this)},copy:function(a){F.prototype.copy.call(this,a);void 0!==a.center&&this.center.copy(a.center);return this}});var Of=new n,Ti=new n;Rd.prototype=Object.assign(Object.create(F.prototype),{constructor:Rd,isLOD:!0,copy:function(a){F.prototype.copy.call(this,a,!1);for(var b=a.levels,c=0,d=b.length;c=b[c].distance)b[c-1].object.visible=!1,b[c].object.visible=!0;else break;for(this._currentLevel=c-1;cd||(h.applyMatrix4(this.matrixWorld),x=a.ray.origin.distanceTo(h),xa.far||b.push({distance:x,point:e.clone().applyMatrix4(this.matrixWorld), +index:c,face:null,faceIndex:null,object:this}))}}else for(c=0,p=u.length/3-1;cd||(h.applyMatrix4(this.matrixWorld),x=a.ray.origin.distanceTo(h),xa.far||b.push({distance:x,point:e.clone().applyMatrix4(this.matrixWorld),index:c,face:null,faceIndex:null,object:this}))}else if(c.isGeometry)for(f=c.vertices,g=f.length,c=0;cd||(h.applyMatrix4(this.matrixWorld), +x=a.ray.origin.distanceTo(h),xa.far||b.push({distance:x,point:e.clone().applyMatrix4(this.matrixWorld),index:c,face:null,faceIndex:null,object:this}))}},clone:function(){return(new this.constructor(this.geometry,this.material)).copy(this)}});var Qf=new n,Rf=new n;ma.prototype=Object.assign(Object.create(Ka.prototype),{constructor:ma,isLineSegments:!0,computeLineDistances:function(){var a=this.geometry;if(a.isBufferGeometry)if(null===a.index){for(var b=a.attributes.position,c=[],d=0,e=b.count;d< +e;d+=2)Qf.fromBufferAttribute(b,d),Rf.fromBufferAttribute(b,d+1),c[d]=0===d?0:c[d-1],c[d+1]=c[d]+Qf.distanceTo(Rf);a.setAttribute("lineDistance",new y(c,1))}else console.warn("THREE.LineSegments.computeLineDistances(): Computation only possible with non-indexed BufferGeometry.");else if(a.isGeometry)for(b=a.vertices,c=a.lineDistances,d=0,e=b.length;d=a.HAVE_CURRENT_DATA&&(this.needsUpdate=!0)}});Qc.prototype=Object.create(V.prototype);Qc.prototype.constructor=Qc;Qc.prototype.isCompressedTexture= +!0;Sd.prototype=Object.create(V.prototype);Sd.prototype.constructor=Sd;Sd.prototype.isCanvasTexture=!0;Td.prototype=Object.create(V.prototype);Td.prototype.constructor=Td;Td.prototype.isDepthTexture=!0;Rc.prototype=Object.create(C.prototype);Rc.prototype.constructor=Rc;Ud.prototype=Object.create(N.prototype);Ud.prototype.constructor=Ud;Sc.prototype=Object.create(C.prototype);Sc.prototype.constructor=Sc;Vd.prototype=Object.create(N.prototype);Vd.prototype.constructor=Vd;Ga.prototype=Object.create(C.prototype); +Ga.prototype.constructor=Ga;Wd.prototype=Object.create(N.prototype);Wd.prototype.constructor=Wd;Tc.prototype=Object.create(Ga.prototype);Tc.prototype.constructor=Tc;Xd.prototype=Object.create(N.prototype);Xd.prototype.constructor=Xd;cc.prototype=Object.create(Ga.prototype);cc.prototype.constructor=cc;Yd.prototype=Object.create(N.prototype);Yd.prototype.constructor=Yd;Uc.prototype=Object.create(Ga.prototype);Uc.prototype.constructor=Uc;Zd.prototype=Object.create(N.prototype);Zd.prototype.constructor= +Zd;Vc.prototype=Object.create(Ga.prototype);Vc.prototype.constructor=Vc;$d.prototype=Object.create(N.prototype);$d.prototype.constructor=$d;dc.prototype=Object.create(C.prototype);dc.prototype.constructor=dc;dc.prototype.toJSON=function(){var a=C.prototype.toJSON.call(this);a.path=this.parameters.path.toJSON();return a};ae.prototype=Object.create(N.prototype);ae.prototype.constructor=ae;Wc.prototype=Object.create(C.prototype);Wc.prototype.constructor=Wc;be.prototype=Object.create(N.prototype);be.prototype.constructor= +be;Xc.prototype=Object.create(C.prototype);Xc.prototype.constructor=Xc;var al={triangulate:function(a,b,c){c=c||2;var d=b&&b.length,e=d?b[0]*c:a.length,f=ci(a,0,e,c,!0),g=[];if(!f||f.next===f.prev)return g;var h;if(d){var l=c;d=[];var k;var n=0;for(k=b.length;n80*c){var r=h=a[0];var q= +d=a[1];for(l=c;lh&&(h=n),b>d&&(d=b);h=Math.max(h-r,d-q);h=0!==h?1/h:0}ee(f,g,c,r,q,h);return g}},sb={area:function(a){for(var b=a.length,c=0,d=b-1,e=0;esb.area(a)},triangulateShape:function(a,b){var c=[],d=[],e=[];gi(a);hi(c,a);var f=a.length;b.forEach(gi);for(a=0;aMath.abs(g-l)?[new t(a,1-c),new t(h,1-d),new t(k,1-e),new t(p,1-b)]:[new t(g,1-c),new t(l,1-d),new t(n,1-e),new t(x,1-b)]}};ge.prototype=Object.create(N.prototype);ge.prototype.constructor=ge;Zc.prototype=Object.create(fb.prototype);Zc.prototype.constructor=Zc;he.prototype= +Object.create(N.prototype);he.prototype.constructor=he;gc.prototype=Object.create(C.prototype);gc.prototype.constructor=gc;ie.prototype=Object.create(N.prototype);ie.prototype.constructor=ie;$c.prototype=Object.create(C.prototype);$c.prototype.constructor=$c;je.prototype=Object.create(N.prototype);je.prototype.constructor=je;ad.prototype=Object.create(C.prototype);ad.prototype.constructor=ad;hc.prototype=Object.create(N.prototype);hc.prototype.constructor=hc;hc.prototype.toJSON=function(){var a=N.prototype.toJSON.call(this); +return ji(this.parameters.shapes,a)};ic.prototype=Object.create(C.prototype);ic.prototype.constructor=ic;ic.prototype.toJSON=function(){var a=C.prototype.toJSON.call(this);return ji(this.parameters.shapes,a)};bd.prototype=Object.create(C.prototype);bd.prototype.constructor=bd;jc.prototype=Object.create(N.prototype);jc.prototype.constructor=jc;tb.prototype=Object.create(C.prototype);tb.prototype.constructor=tb;ke.prototype=Object.create(jc.prototype);ke.prototype.constructor=ke;le.prototype=Object.create(tb.prototype); +le.prototype.constructor=le;me.prototype=Object.create(N.prototype);me.prototype.constructor=me;cd.prototype=Object.create(C.prototype);cd.prototype.constructor=cd;var ua=Object.freeze({__proto__:null,WireframeGeometry:Rc,ParametricGeometry:Ud,ParametricBufferGeometry:Sc,TetrahedronGeometry:Wd,TetrahedronBufferGeometry:Tc,OctahedronGeometry:Xd,OctahedronBufferGeometry:cc,IcosahedronGeometry:Yd,IcosahedronBufferGeometry:Uc,DodecahedronGeometry:Zd,DodecahedronBufferGeometry:Vc,PolyhedronGeometry:Vd, +PolyhedronBufferGeometry:Ga,TubeGeometry:$d,TubeBufferGeometry:dc,TorusKnotGeometry:ae,TorusKnotBufferGeometry:Wc,TorusGeometry:be,TorusBufferGeometry:Xc,TextGeometry:ge,TextBufferGeometry:Zc,SphereGeometry:he,SphereBufferGeometry:gc,RingGeometry:ie,RingBufferGeometry:$c,PlaneGeometry:Id,PlaneBufferGeometry:bc,LatheGeometry:je,LatheBufferGeometry:ad,ShapeGeometry:hc,ShapeBufferGeometry:ic,ExtrudeGeometry:fc,ExtrudeBufferGeometry:fb,EdgesGeometry:bd,ConeGeometry:ke,ConeBufferGeometry:le,CylinderGeometry:jc, +CylinderBufferGeometry:tb,CircleGeometry:me,CircleBufferGeometry:cd,BoxGeometry:nh,BoxBufferGeometry:Jd});kc.prototype=Object.create(K.prototype);kc.prototype.constructor=kc;kc.prototype.isShadowMaterial=!0;kc.prototype.copy=function(a){K.prototype.copy.call(this,a);this.color.copy(a.color);return this};ub.prototype=Object.create(Ba.prototype);ub.prototype.constructor=ub;ub.prototype.isRawShaderMaterial=!0;gb.prototype=Object.create(K.prototype);gb.prototype.constructor=gb;gb.prototype.isMeshStandardMaterial= +!0;gb.prototype.copy=function(a){K.prototype.copy.call(this,a);this.defines={STANDARD:""};this.color.copy(a.color);this.roughness=a.roughness;this.metalness=a.metalness;this.map=a.map;this.lightMap=a.lightMap;this.lightMapIntensity=a.lightMapIntensity;this.aoMap=a.aoMap;this.aoMapIntensity=a.aoMapIntensity;this.emissive.copy(a.emissive);this.emissiveMap=a.emissiveMap;this.emissiveIntensity=a.emissiveIntensity;this.bumpMap=a.bumpMap;this.bumpScale=a.bumpScale;this.normalMap=a.normalMap;this.normalMapType= +a.normalMapType;this.normalScale.copy(a.normalScale);this.displacementMap=a.displacementMap;this.displacementScale=a.displacementScale;this.displacementBias=a.displacementBias;this.roughnessMap=a.roughnessMap;this.metalnessMap=a.metalnessMap;this.alphaMap=a.alphaMap;this.envMap=a.envMap;this.envMapIntensity=a.envMapIntensity;this.refractionRatio=a.refractionRatio;this.wireframe=a.wireframe;this.wireframeLinewidth=a.wireframeLinewidth;this.wireframeLinecap=a.wireframeLinecap;this.wireframeLinejoin= +a.wireframeLinejoin;this.skinning=a.skinning;this.morphTargets=a.morphTargets;this.morphNormals=a.morphNormals;this.vertexTangents=a.vertexTangents;return this};lc.prototype=Object.create(gb.prototype);lc.prototype.constructor=lc;lc.prototype.isMeshPhysicalMaterial=!0;lc.prototype.copy=function(a){gb.prototype.copy.call(this,a);this.defines={STANDARD:"",PHYSICAL:""};this.clearcoat=a.clearcoat;this.clearcoatMap=a.clearcoatMap;this.clearcoatRoughness=a.clearcoatRoughness;this.clearcoatRoughnessMap= +a.clearcoatRoughnessMap;this.clearcoatNormalMap=a.clearcoatNormalMap;this.clearcoatNormalScale.copy(a.clearcoatNormalScale);this.reflectivity=a.reflectivity;this.sheen=a.sheen?(this.sheen||new A).copy(a.sheen):null;this.transparency=a.transparency;return this};Jb.prototype=Object.create(K.prototype);Jb.prototype.constructor=Jb;Jb.prototype.isMeshPhongMaterial=!0;Jb.prototype.copy=function(a){K.prototype.copy.call(this,a);this.color.copy(a.color);this.specular.copy(a.specular);this.shininess=a.shininess; +this.map=a.map;this.lightMap=a.lightMap;this.lightMapIntensity=a.lightMapIntensity;this.aoMap=a.aoMap;this.aoMapIntensity=a.aoMapIntensity;this.emissive.copy(a.emissive);this.emissiveMap=a.emissiveMap;this.emissiveIntensity=a.emissiveIntensity;this.bumpMap=a.bumpMap;this.bumpScale=a.bumpScale;this.normalMap=a.normalMap;this.normalMapType=a.normalMapType;this.normalScale.copy(a.normalScale);this.displacementMap=a.displacementMap;this.displacementScale=a.displacementScale;this.displacementBias=a.displacementBias; +this.specularMap=a.specularMap;this.alphaMap=a.alphaMap;this.envMap=a.envMap;this.combine=a.combine;this.reflectivity=a.reflectivity;this.refractionRatio=a.refractionRatio;this.wireframe=a.wireframe;this.wireframeLinewidth=a.wireframeLinewidth;this.wireframeLinecap=a.wireframeLinecap;this.wireframeLinejoin=a.wireframeLinejoin;this.skinning=a.skinning;this.morphTargets=a.morphTargets;this.morphNormals=a.morphNormals;return this};mc.prototype=Object.create(K.prototype);mc.prototype.constructor=mc;mc.prototype.isMeshToonMaterial= +!0;mc.prototype.copy=function(a){K.prototype.copy.call(this,a);this.color.copy(a.color);this.specular.copy(a.specular);this.shininess=a.shininess;this.map=a.map;this.gradientMap=a.gradientMap;this.lightMap=a.lightMap;this.lightMapIntensity=a.lightMapIntensity;this.aoMap=a.aoMap;this.aoMapIntensity=a.aoMapIntensity;this.emissive.copy(a.emissive);this.emissiveMap=a.emissiveMap;this.emissiveIntensity=a.emissiveIntensity;this.bumpMap=a.bumpMap;this.bumpScale=a.bumpScale;this.normalMap=a.normalMap;this.normalMapType= +a.normalMapType;this.normalScale.copy(a.normalScale);this.displacementMap=a.displacementMap;this.displacementScale=a.displacementScale;this.displacementBias=a.displacementBias;this.specularMap=a.specularMap;this.alphaMap=a.alphaMap;this.wireframe=a.wireframe;this.wireframeLinewidth=a.wireframeLinewidth;this.wireframeLinecap=a.wireframeLinecap;this.wireframeLinejoin=a.wireframeLinejoin;this.skinning=a.skinning;this.morphTargets=a.morphTargets;this.morphNormals=a.morphNormals;return this};nc.prototype= +Object.create(K.prototype);nc.prototype.constructor=nc;nc.prototype.isMeshNormalMaterial=!0;nc.prototype.copy=function(a){K.prototype.copy.call(this,a);this.bumpMap=a.bumpMap;this.bumpScale=a.bumpScale;this.normalMap=a.normalMap;this.normalMapType=a.normalMapType;this.normalScale.copy(a.normalScale);this.displacementMap=a.displacementMap;this.displacementScale=a.displacementScale;this.displacementBias=a.displacementBias;this.wireframe=a.wireframe;this.wireframeLinewidth=a.wireframeLinewidth;this.skinning= +a.skinning;this.morphTargets=a.morphTargets;this.morphNormals=a.morphNormals;return this};oc.prototype=Object.create(K.prototype);oc.prototype.constructor=oc;oc.prototype.isMeshLambertMaterial=!0;oc.prototype.copy=function(a){K.prototype.copy.call(this,a);this.color.copy(a.color);this.map=a.map;this.lightMap=a.lightMap;this.lightMapIntensity=a.lightMapIntensity;this.aoMap=a.aoMap;this.aoMapIntensity=a.aoMapIntensity;this.emissive.copy(a.emissive);this.emissiveMap=a.emissiveMap;this.emissiveIntensity= +a.emissiveIntensity;this.specularMap=a.specularMap;this.alphaMap=a.alphaMap;this.envMap=a.envMap;this.combine=a.combine;this.reflectivity=a.reflectivity;this.refractionRatio=a.refractionRatio;this.wireframe=a.wireframe;this.wireframeLinewidth=a.wireframeLinewidth;this.wireframeLinecap=a.wireframeLinecap;this.wireframeLinejoin=a.wireframeLinejoin;this.skinning=a.skinning;this.morphTargets=a.morphTargets;this.morphNormals=a.morphNormals;return this};pc.prototype=Object.create(K.prototype);pc.prototype.constructor= +pc;pc.prototype.isMeshMatcapMaterial=!0;pc.prototype.copy=function(a){K.prototype.copy.call(this,a);this.defines={MATCAP:""};this.color.copy(a.color);this.matcap=a.matcap;this.map=a.map;this.bumpMap=a.bumpMap;this.bumpScale=a.bumpScale;this.normalMap=a.normalMap;this.normalMapType=a.normalMapType;this.normalScale.copy(a.normalScale);this.displacementMap=a.displacementMap;this.displacementScale=a.displacementScale;this.displacementBias=a.displacementBias;this.alphaMap=a.alphaMap;this.skinning=a.skinning; +this.morphTargets=a.morphTargets;this.morphNormals=a.morphNormals;return this};qc.prototype=Object.create(la.prototype);qc.prototype.constructor=qc;qc.prototype.isLineDashedMaterial=!0;qc.prototype.copy=function(a){la.prototype.copy.call(this,a);this.scale=a.scale;this.dashSize=a.dashSize;this.gapSize=a.gapSize;return this};var bl=Object.freeze({__proto__:null,ShadowMaterial:kc,SpriteMaterial:Ib,RawShaderMaterial:ub,ShaderMaterial:Ba,PointsMaterial:Va,MeshPhysicalMaterial:lc,MeshStandardMaterial:gb, +MeshPhongMaterial:Jb,MeshToonMaterial:mc,MeshNormalMaterial:nc,MeshLambertMaterial:oc,MeshDepthMaterial:Fb,MeshDistanceMaterial:Gb,MeshBasicMaterial:Oa,MeshMatcapMaterial:pc,LineDashedMaterial:qc,LineBasicMaterial:la,Material:K}),R={arraySlice:function(a,b,c){return R.isTypedArray(a)?new a.constructor(a.subarray(b,void 0!==c?c:a.length)):a.slice(b,c)},convertArray:function(a,b,c){return!a||!c&&a.constructor===b?a:"number"===typeof b.BYTES_PER_ELEMENT?new b(a):Array.prototype.slice.call(a)},isTypedArray:function(a){return ArrayBuffer.isView(a)&& +!(a instanceof DataView)},getKeyframeOrder:function(a){for(var b=a.length,c=Array(b),d=0;d!==b;++d)c[d]=d;c.sort(function(b,c){return a[b]-a[c]});return c},sortedArray:function(a,b,c){for(var d=a.length,e=new a.constructor(d),f=0,g=0;g!==d;++f)for(var h=c[f]*b,l=0;l!==b;++l)e[g++]=a[h+l];return e},flattenJSON:function(a,b,c,d){for(var e=1,f=a[0];void 0!==f&&void 0===f[d];)f=a[e++];if(void 0!==f){var g=f[d];if(void 0!==g)if(Array.isArray(g)){do g=f[d],void 0!==g&&(b.push(f.time),c.push.apply(c,g)), +f=a[e++];while(void 0!==f)}else if(void 0!==g.toArray){do g=f[d],void 0!==g&&(b.push(f.time),g.toArray(c,c.length)),f=a[e++];while(void 0!==f)}else{do g=f[d],void 0!==g&&(b.push(f.time),c.push(g)),f=a[e++];while(void 0!==f)}}},subclip:function(a,b,c,d,e){e=e||30;a=a.clone();a.name=b;var f=[];for(b=0;b=d))for(l.push(g.times[n]),p=0;pa.tracks[b].times[0]&&(c=a.tracks[b].times[0]);for(b=0;b=e)break a;else{f=b[1];a=e)break b}d=c;c=0}}for(;c>>1,ab;)--f;++f;if(0!==e||f!==d)e>=f&&(f=Math.max(f,1),e=f-1),a=this.getValueSize(),this.times=R.arraySlice(c,e,f),this.values=R.arraySlice(this.values,e*a,f*a);return this},validate:function(){var a=!0,b=this.getValueSize();0!==b-Math.floor(b)&&(console.error("THREE.KeyframeTrack: Invalid value size in track.",this),a=!1);var c=this.times;b=this.values;var d=c.length;0===d&&(console.error("THREE.KeyframeTrack: Track is empty.", +this),a=!1);for(var e=null,f=0;f!==d;f++){var g=c[f];if("number"===typeof g&&isNaN(g)){console.error("THREE.KeyframeTrack: Time is not a valid number.",this,f,g);a=!1;break}if(null!==e&&e>g){console.error("THREE.KeyframeTrack: Out of order keys.",this,f,g,e);a=!1;break}e=g}if(void 0!==b&&R.isTypedArray(b))for(f=0,c=b.length;f!==c;++f)if(d=b[f],isNaN(d)){console.error("THREE.KeyframeTrack: Value is not a valid number.",this,f,d);a=!1;break}return a},optimize:function(){for(var a=R.arraySlice(this.times), +b=R.arraySlice(this.values),c=this.getValueSize(),d=2302===this.getInterpolation(),e=1,f=a.length-1,g=1;gg)e=a+1;else if(0b&&(b=0);1Number.EPSILON&&(g.normalize(),c=Math.acos(L.clamp(d[l-1].dot(d[l]),-1,1)),e[l].applyMatrix4(h.makeRotationAxis(g,c))),f[l].crossVectors(d[l],e[l]);if(!0===b)for(c=Math.acos(L.clamp(e[0].dot(e[a]),-1,1)),c/=a,0d;)d+=c;for(;d>c;)d-=c;de&&(e=1);1E-4>d&&(d=e);1E-4>l&&(l=e);ph.initNonuniformCatmullRom(f.x,g.x,h.x,c.x,d,e,l);qh.initNonuniformCatmullRom(f.y,g.y,h.y,c.y,d,e,l);rh.initNonuniformCatmullRom(f.z,g.z,h.z,c.z,d,e,l)}else"catmullrom"===this.curveType&&(ph.initCatmullRom(f.x,g.x,h.x,c.x,this.tension),qh.initCatmullRom(f.y,g.y,h.y,c.y,this.tension),rh.initCatmullRom(f.z,g.z,h.z,c.z,this.tension));b.set(ph.calc(a),qh.calc(a),rh.calc(a));return b};pa.prototype.copy=function(a){G.prototype.copy.call(this, +a);this.points=[];for(var b=0,c=a.points.length;bc.length-2?c.length-1:a+1];c=c[a>c.length-3?c.length-1:a+2];b.set(li(d,e.x,f.x,g.x,c.x),li(d,e.y,f.y,g.y,c.y));return b};Za.prototype.copy=function(a){G.prototype.copy.call(this,a);this.points=[];for(var b=0,c=a.points.length;b=b)return b=c[a]-b,a=this.curves[a],c=a.getLength(),a.getPointAt(0===c?0:1-b/c);a++}return null},getLength:function(){var a=this.getCurveLengths();return a[a.length-1]},updateArcLengths:function(){this.needsUpdate=!0;this.cacheLengths=null;this.getCurveLengths()}, +getCurveLengths:function(){if(this.cacheLengths&&this.cacheLengths.length===this.curves.length)return this.cacheLengths;for(var a=[],b=0,c=0,d=this.curves.length;cNumber.EPSILON){if(0>l&&(g=b[f],k=-k,h=b[e],l=-l),!(a.yh.y))if(a.y===g.y){if(a.x===g.x)return!0}else{e=l*(a.x-g.x)- +k*(a.y-g.y);if(0===e)return!0;0>e||(d=!d)}}else if(a.y===g.y&&(h.x<=a.x&&a.x<=g.x||g.x<=a.x&&a.x<=h.x))return!0}return d}var e=sb.isClockWise,f=this.subPaths;if(0===f.length)return[];if(!0===b)return c(f);b=[];if(1===f.length){var g=f[0];var h=new Kb;h.curves=g.curves;b.push(h);return b}var l=!e(f[0].getPoints());l=a?!l:l;h=[];var k=[],n=[],p=0;k[p]=void 0;n[p]=[];for(var t=0,r=f.length;tb;b++)this.coefficients[b].copy(a[b]);return this},zero:function(){for(var a=0;9> +a;a++)this.coefficients[a].set(0,0,0);return this},getAt:function(a,b){var c=a.x,d=a.y;a=a.z;var e=this.coefficients;b.copy(e[0]).multiplyScalar(.282095);b.addScaledVector(e[1],.488603*d);b.addScaledVector(e[2],.488603*a);b.addScaledVector(e[3],.488603*c);b.addScaledVector(e[4],1.092548*c*d);b.addScaledVector(e[5],1.092548*d*a);b.addScaledVector(e[6],.315392*(3*a*a-1));b.addScaledVector(e[7],1.092548*c*a);b.addScaledVector(e[8],.546274*(c*c-d*d));return b},getIrradianceAt:function(a,b){var c=a.x, +d=a.y;a=a.z;var e=this.coefficients;b.copy(e[0]).multiplyScalar(.886227);b.addScaledVector(e[1],1.023328*d);b.addScaledVector(e[2],1.023328*a);b.addScaledVector(e[3],1.023328*c);b.addScaledVector(e[4],.858086*c*d);b.addScaledVector(e[5],.858086*d*a);b.addScaledVector(e[6],.743125*a*a-.247708);b.addScaledVector(e[7],.858086*c*a);b.addScaledVector(e[8],.429043*(c*c-d*d));return b},add:function(a){for(var b=0;9>b;b++)this.coefficients[b].add(a.coefficients[b]);return this},addScaledSH:function(a,b){for(var c= +0;9>c;c++)this.coefficients[c].addScaledVector(a.coefficients[c],b);return this},scale:function(a){for(var b=0;9>b;b++)this.coefficients[b].multiplyScalar(a);return this},lerp:function(a,b){for(var c=0;9>c;c++)this.coefficients[c].lerp(a.coefficients[c],b);return this},equals:function(a){for(var b=0;9>b;b++)if(!this.coefficients[b].equals(a.coefficients[b]))return!1;return!0},copy:function(a){return this.set(a.coefficients)},clone:function(){return(new this.constructor).copy(this)},fromArray:function(a, +b){void 0===b&&(b=0);for(var c=this.coefficients,d=0;9>d;d++)c[d].fromArray(a,b+3*d);return this},toArray:function(a,b){void 0===a&&(a=[]);void 0===b&&(b=0);for(var c=this.coefficients,d=0;9>d;d++)c[d].toArray(a,b+3*d);return a}});Object.assign(uf,{getBasisAt:function(a,b){var c=a.x,d=a.y;a=a.z;b[0]=.282095;b[1]=.488603*d;b[2]=.488603*a;b[3]=.488603*c;b[4]=1.092548*c*d;b[5]=1.092548*d*a;b[6]=.315392*(3*a*a-1);b[7]=1.092548*c*a;b[8]=.546274*(c*c-d*d)}});ab.prototype=Object.assign(Object.create(da.prototype), +{constructor:ab,isLightProbe:!0,copy:function(a){da.prototype.copy.call(this,a);this.sh.copy(a.sh);this.intensity=a.intensity;return this},toJSON:function(a){return da.prototype.toJSON.call(this,a)}});Eg.prototype=Object.assign(Object.create(ab.prototype),{constructor:Eg,isHemisphereLightProbe:!0,copy:function(a){ab.prototype.copy.call(this,a);return this},toJSON:function(a){return ab.prototype.toJSON.call(this,a)}});Fg.prototype=Object.assign(Object.create(ab.prototype),{constructor:Fg,isAmbientLightProbe:!0, +copy:function(a){ab.prototype.copy.call(this,a);return this},toJSON:function(a){return ab.prototype.toJSON.call(this,a)}});var cj=new P,dj=new P;Object.assign(mi.prototype,{update:function(a){var b=this._cache;if(b.focus!==a.focus||b.fov!==a.fov||b.aspect!==a.aspect*this.aspect||b.near!==a.near||b.far!==a.far||b.zoom!==a.zoom||b.eyeSep!==this.eyeSep){b.focus=a.focus;b.fov=a.fov;b.aspect=a.aspect*this.aspect;b.near=a.near;b.far=a.far;b.zoom=a.zoom;b.eyeSep=this.eyeSep;var c=a.projectionMatrix.clone(), +d=b.eyeSep/2,e=d*b.near/b.focus,f=b.near*Math.tan(L.DEG2RAD*b.fov*.5)/b.zoom;dj.elements[12]=-d;cj.elements[12]=d;d=-f*b.aspect+e;var g=f*b.aspect+e;c.elements[0]=2*b.near/(g-d);c.elements[8]=(g+d)/(g-d);this.cameraL.projectionMatrix.copy(c);d=-f*b.aspect-e;g=f*b.aspect-e;c.elements[0]=2*b.near/(g-d);c.elements[8]=(g+d)/(g-d);this.cameraR.projectionMatrix.copy(c)}this.cameraL.matrixWorld.copy(a.matrixWorld).multiply(dj);this.cameraR.matrixWorld.copy(a.matrixWorld).multiply(cj)}});Object.assign(Gg.prototype, +{start:function(){this.oldTime=this.startTime=("undefined"===typeof performance?Date:performance).now();this.elapsedTime=0;this.running=!0},stop:function(){this.getElapsedTime();this.autoStart=this.running=!1},getElapsedTime:function(){this.getDelta();return this.elapsedTime},getDelta:function(){var a=0;if(this.autoStart&&!this.running)return this.start(),0;if(this.running){var b=("undefined"===typeof performance?Date:performance).now();a=(b-this.oldTime)/1E3;this.oldTime=b;this.elapsedTime+=a}return a}}); +var wc=new n,ej=new Aa,dl=new n,xc=new n;Hg.prototype=Object.assign(Object.create(F.prototype),{constructor:Hg,getInput:function(){return this.gain},removeFilter:function(){null!==this.filter&&(this.gain.disconnect(this.filter),this.filter.disconnect(this.context.destination),this.gain.connect(this.context.destination),this.filter=null);return this},getFilter:function(){return this.filter},setFilter:function(a){null!==this.filter?(this.gain.disconnect(this.filter),this.filter.disconnect(this.context.destination)): +this.gain.disconnect(this.context.destination);this.filter=a;this.gain.connect(this.filter);this.filter.connect(this.context.destination);return this},getMasterVolume:function(){return this.gain.gain.value},setMasterVolume:function(a){this.gain.gain.setTargetAtTime(a,this.context.currentTime,.01);return this},updateMatrixWorld:function(a){F.prototype.updateMatrixWorld.call(this,a);a=this.context.listener;var b=this.up;this.timeDelta=this._clock.getDelta();this.matrixWorld.decompose(wc,ej,dl);xc.set(0, +0,-1).applyQuaternion(ej);if(a.positionX){var c=this.context.currentTime+this.timeDelta;a.positionX.linearRampToValueAtTime(wc.x,c);a.positionY.linearRampToValueAtTime(wc.y,c);a.positionZ.linearRampToValueAtTime(wc.z,c);a.forwardX.linearRampToValueAtTime(xc.x,c);a.forwardY.linearRampToValueAtTime(xc.y,c);a.forwardZ.linearRampToValueAtTime(xc.z,c);a.upX.linearRampToValueAtTime(b.x,c);a.upY.linearRampToValueAtTime(b.y,c);a.upZ.linearRampToValueAtTime(b.z,c)}else a.setPosition(wc.x,wc.y,wc.z),a.setOrientation(xc.x, +xc.y,xc.z,b.x,b.y,b.z)}});id.prototype=Object.assign(Object.create(F.prototype),{constructor:id,getOutput:function(){return this.gain},setNodeSource:function(a){this.hasPlaybackControl=!1;this.sourceType="audioNode";this.source=a;this.connect();return this},setMediaElementSource:function(a){this.hasPlaybackControl=!1;this.sourceType="mediaNode";this.source=this.context.createMediaElementSource(a);this.connect();return this},setMediaStreamSource:function(a){this.hasPlaybackControl=!1;this.sourceType= +"mediaStreamNode";this.source=this.context.createMediaStreamSource(a);this.connect();return this},setBuffer:function(a){this.buffer=a;this.sourceType="buffer";this.autoplay&&this.play();return this},play:function(a){void 0===a&&(a=0);if(!0===this.isPlaying)console.warn("THREE.Audio: Audio is already playing.");else if(!1===this.hasPlaybackControl)console.warn("THREE.Audio: this Audio has no playback control.");else return this._startedAt=this.context.currentTime+a,a=this.context.createBufferSource(), +a.buffer=this.buffer,a.loop=this.loop,a.loopStart=this.loopStart,a.loopEnd=this.loopEnd,a.onended=this.onEnded.bind(this),a.start(this._startedAt,this._pausedAt+this.offset,this.duration),this.isPlaying=!0,this.source=a,this.setDetune(this.detune),this.setPlaybackRate(this.playbackRate),this.connect()},pause:function(){if(!1===this.hasPlaybackControl)console.warn("THREE.Audio: this Audio has no playback control.");else return!0===this.isPlaying&&(this._pausedAt+=Math.max(this.context.currentTime- +this._startedAt,0)*this.playbackRate,this.source.stop(),this.source.onended=null,this.isPlaying=!1),this},stop:function(){if(!1===this.hasPlaybackControl)console.warn("THREE.Audio: this Audio has no playback control.");else return this._pausedAt=0,this.source.stop(),this.source.onended=null,this.isPlaying=!1,this},connect:function(){if(0d&&this._mixBufferRegion(c,a,3*b,1-d,b);d=b;for(var f=b+b;d!==f;++d)if(c[d]!==c[d+b]){e.setValue(c,a);break}},saveOriginalState:function(){var a=this.buffer,b=this.valueSize,c=3*b;this.binding.getValue(a,c);for(var d=b;d!==c;++d)a[d]= +a[c+d%b];this.cumulativeWeight=0},restoreOriginalState:function(){this.binding.setValue(this.buffer,3*this.valueSize)},_select:function(a,b,c,d,e){if(.5<=d)for(d=0;d!==e;++d)a[b+d]=a[c+d]},_slerp:function(a,b,c,d){Aa.slerpFlat(a,b,a,b,a,c,d)},_lerp:function(a,b,c,d,e){for(var f=1-d,g=0;g!==e;++g){var h=b+g;a[h]=a[h]*f+a[c+g]*d}}});var fl=/[\[\]\.:\/]/g,gl="[^"+"\\[\\]\\.:\\/".replace("\\.","")+"]",hl=/((?:WC+[\/:])*)/.source.replace("WC","[^\\[\\]\\.:\\/]"),il=/(WCOD+)?/.source.replace("WCOD",gl), +jl=/(?:\.(WC+)(?:\[(.+)\])?)?/.source.replace("WC","[^\\[\\]\\.:\\/]"),kl=/\.(WC+)(?:\[(.+)\])?/.source.replace("WC","[^\\[\\]\\.:\\/]"),ll=new RegExp("^"+hl+il+jl+kl+"$"),ml=["material","materials","bones"];Object.assign(ni.prototype,{getValue:function(a,b){this.bind();var c=this._bindings[this._targetGroup.nCachedObjects_];void 0!==c&&c.getValue(a,b)},setValue:function(a,b){for(var c=this._bindings,d=this._targetGroup.nCachedObjects_,e=c.length;d!==e;++d)c[d].setValue(a,b)},bind:function(){for(var a= +this._bindings,b=this._targetGroup.nCachedObjects_,c=a.length;b!==c;++b)a[b].bind()},unbind:function(){for(var a=this._bindings,b=this._targetGroup.nCachedObjects_,c=a.length;b!==c;++b)a[b].unbind()}});Object.assign(ya,{Composite:ni,create:function(a,b,c){return a&&a.isAnimationObjectGroup?new ya.Composite(a,b,c):new ya(a,b,c)},sanitizeNodeName:function(a){return a.replace(/\s/g,"_").replace(fl,"")},parseTrackName:function(a){var b=ll.exec(a);if(!b)throw Error("PropertyBinding: Cannot parse trackName: "+ +a);b={nodeName:b[2],objectName:b[3],objectIndex:b[4],propertyName:b[5],propertyIndex:b[6]};var c=b.nodeName&&b.nodeName.lastIndexOf(".");if(void 0!==c&&-1!==c){var d=b.nodeName.substring(c+1);-1!==ml.indexOf(d)&&(b.nodeName=b.nodeName.substring(0,c),b.objectName=d)}if(null===b.propertyName||0===b.propertyName.length)throw Error("PropertyBinding: can not parse propertyName from trackName: "+a);return b},findNode:function(a,b){if(!b||""===b||"."===b||-1===b||b===a.name||b===a.uuid)return a;if(a.skeleton){var c= +a.skeleton.getBoneByName(b);if(void 0!==c)return c}if(a.children){var d=function(a){for(var c=0;c=b){var n=b++,p=a[n];c[p.uuid]=m;a[m]=p;c[k]=n;a[n]=h;h=0;for(k=e;h!==k;++h){p=d[h];var t=p[m];p[m]=p[n];p[n]=t}}}this.nCachedObjects_=b},uncache:function(){for(var a=this._objects,b=a.length,c=this.nCachedObjects_,d=this._indicesByUUID,e=this._bindings,f=e.length,g=0,h=arguments.length;g!==h;++g){var k= +arguments[g].uuid,m=d[k];if(void 0!==m)if(delete d[k],mb||0===c)return;this._startTime=null;b*=c}b*=this._updateTimeScale(a);c=this._updateTime(b);a=this._updateWeight(a);if(0c.parameterPositions[1]&&(this.stopFading(),0===d&&(this.enabled=!1))}}return this._effectiveWeight=b},_updateTimeScale:function(a){var b=0;if(!this.paused){b=this.timeScale;var c=this._timeScaleInterpolant;if(null!==c){var d=c.evaluate(a)[0];b*=d;a>c.parameterPositions[1]&&(this.stopWarping(),0===b?this.paused=!0:this.timeScale=b)}}return this._effectiveTimeScale=b},_updateTime:function(a){var b=this.time+a,c=this._clip.duration,d=this.loop,e=this._loopCount,f=2202===d;if(0===a)return-1=== +e?b:f&&1===(e&1)?c-b:b;if(2200===d)a:{if(-1===e&&(this._loopCount=0,this._setEndings(!0,!0,!1)),b>=c)b=c;else if(0>b)b=0;else{this.time=b;break a}this.clampWhenFinished?this.paused=!0:this.enabled=!1;this.time=b;this._mixer.dispatchEvent({type:"finished",action:this,direction:0>a?-1:1})}else{-1===e&&(0<=a?(e=0,this._setEndings(!0,0===this.repetitions,f)):this._setEndings(0===this.repetitions,!0,f));if(b>=c||0>b){d=Math.floor(b/c);b-=c*d;e+=Math.abs(d);var g=this.repetitions-e;0>=g?(this.clampWhenFinished? +this.paused=!0:this.enabled=!1,this.time=b=0a,this._setEndings(a,!a,f)):this._setEndings(!1,!1,f),this._loopCount=e,this.time=b,this._mixer.dispatchEvent({type:"loop",action:this,loopDelta:d}))}else this.time=b;if(f&&1===(e&1))return c-b}return b},_setEndings:function(a,b,c){var d=this._interpolantSettings;c?(d.endingStart=2401,d.endingEnd=2401):(d.endingStart=a?this.zeroSlopeAtStart?2401:2400:2402,d.endingEnd= +b?this.zeroSlopeAtEnd?2401:2400:2402)},_scheduleFading:function(a,b,c){var d=this._mixer,e=d.time,f=this._weightInterpolant;null===f&&(this._weightInterpolant=f=d._lendControlInterpolant());d=f.parameterPositions;f=f.sampleValues;d[0]=e;f[0]=b;d[1]=e+a;f[1]=c;return this}});Mg.prototype=Object.assign(Object.create(Ea.prototype),{constructor:Mg,_bindAction:function(a,b){var c=a._localRoot||this._root,d=a._clip.tracks,e=d.length,f=a._propertyBindings;a=a._interpolants;var g=c.uuid,h=this._bindingsByRootAndName, +k=h[g];void 0===k&&(k={},h[g]=k);for(h=0;h!==e;++h){var m=d[h],n=m.name,p=k[n];if(void 0===p){p=f[h];if(void 0!==p){null===p._cacheIndex&&(++p.referenceCount,this._addInactiveBinding(p,g,n));continue}p=new Lg(ya.create(c,n,b&&b._propertyBindings[h].binding.parsedPath),m.ValueTypeName,m.getValueSize());++p.referenceCount;this._addInactiveBinding(p,g,n)}f[h]=p;a[h].resultBuffer=p.buffer}},_activateAction:function(a){if(!this._isActiveAction(a)){if(null===a._cacheIndex){var b=(a._localRoot||this._root).uuid, +c=a._clip.uuid,d=this._actionsByClip[c];this._bindAction(a,d&&d.knownActions[0]);this._addInactiveAction(a,c,b)}b=a._propertyBindings;c=0;for(d=b.length;c!==d;++c){var e=b[c];0===e.useCount++&&(this._lendBinding(e),e.saveOriginalState())}this._lendAction(a)}},_deactivateAction:function(a){if(this._isActiveAction(a)){for(var b=a._propertyBindings,c=0,d=b.length;c!==d;++c){var e=b[c];0===--e.useCount&&(e.restoreOriginalState(),this._takeBackBinding(e))}this._takeBackAction(a)}},_initMemoryManager:function(){this._actions= +[];this._nActiveActions=0;this._actionsByClip={};this._bindings=[];this._nActiveBindings=0;this._bindingsByRootAndName={};this._controlInterpolants=[];this._nActiveControlInterpolants=0;var a=this;this.stats={actions:{get total(){return a._actions.length},get inUse(){return a._nActiveActions}},bindings:{get total(){return a._bindings.length},get inUse(){return a._nActiveBindings}},controlInterpolants:{get total(){return a._controlInterpolants.length},get inUse(){return a._nActiveControlInterpolants}}}}, +_isActiveAction:function(a){a=a._cacheIndex;return null!==a&&athis.max.x||a.ythis.max.y?!1:!0},containsBox:function(a){return this.min.x<=a.min.x&&a.max.x<=this.max.x&&this.min.y<=a.min.y&&a.max.y<=this.max.y},getParameter:function(a,b){void 0===b&&(console.warn("THREE.Box2: .getParameter() target is now required"),b=new t);return b.set((a.x-this.min.x)/(this.max.x-this.min.x),(a.y-this.min.y)/(this.max.y-this.min.y))},intersectsBox:function(a){return a.max.x< +this.min.x||a.min.x>this.max.x||a.max.ythis.max.y?!1:!0},clampPoint:function(a,b){void 0===b&&(console.warn("THREE.Box2: .clampPoint() target is now required"),b=new t);return b.copy(a).clamp(this.min,this.max)},distanceToPoint:function(a){return gj.copy(a).clamp(this.min,this.max).sub(a).length()},intersect:function(a){this.min.max(a.min);this.max.min(a.max);return this},union:function(a){this.min.min(a.min);this.max.max(a.max);return this},translate:function(a){this.min.add(a); +this.max.add(a);return this},equals:function(a){return a.min.equals(this.min)&&a.max.equals(this.max)}});var hj=new n,Vf=new n;Object.assign(Rg.prototype,{set:function(a,b){this.start.copy(a);this.end.copy(b);return this},clone:function(){return(new this.constructor).copy(this)},copy:function(a){this.start.copy(a.start);this.end.copy(a.end);return this},getCenter:function(a){void 0===a&&(console.warn("THREE.Line3: .getCenter() target is now required"),a=new n);return a.addVectors(this.start,this.end).multiplyScalar(.5)}, +delta:function(a){void 0===a&&(console.warn("THREE.Line3: .delta() target is now required"),a=new n);return a.subVectors(this.end,this.start)},distanceSq:function(){return this.start.distanceToSquared(this.end)},distance:function(){return this.start.distanceTo(this.end)},at:function(a,b){void 0===b&&(console.warn("THREE.Line3: .at() target is now required"),b=new n);return this.delta(b).multiplyScalar(a).add(this.start)},closestPointToPointParameter:function(a,b){hj.subVectors(a,this.start);Vf.subVectors(this.end, +this.start);a=Vf.dot(Vf);a=Vf.dot(hj)/a;b&&(a=L.clamp(a,0,1));return a},closestPointToPoint:function(a,b,c){a=this.closestPointToPointParameter(a,b);void 0===c&&(console.warn("THREE.Line3: .closestPointToPoint() target is now required"),c=new n);return this.delta(c).multiplyScalar(a).add(this.start)},applyMatrix4:function(a){this.start.applyMatrix4(a);this.end.applyMatrix4(a);return this},equals:function(a){return a.start.equals(this.start)&&a.end.equals(this.end)}});re.prototype=Object.create(F.prototype); +re.prototype.constructor=re;re.prototype.isImmediateRenderObject=!0;var ij=new n;jd.prototype=Object.create(F.prototype);jd.prototype.constructor=jd;jd.prototype.dispose=function(){this.cone.geometry.dispose();this.cone.material.dispose()};jd.prototype.update=function(){this.light.updateMatrixWorld();var a=this.light.distance?this.light.distance:1E3,b=a*Math.tan(this.light.angle);this.cone.scale.set(b,b,a);ij.setFromMatrixPosition(this.light.target.matrixWorld);this.cone.lookAt(ij);void 0!==this.color? +this.cone.material.color.set(this.color):this.cone.material.color.copy(this.light.color)};var Qb=new n,Wf=new P,vh=new P;rc.prototype=Object.create(ma.prototype);rc.prototype.constructor=rc;rc.prototype.isSkeletonHelper=!0;rc.prototype.updateMatrixWorld=function(a){var b=this.bones,c=this.geometry,d=c.getAttribute("position");vh.getInverse(this.root.matrixWorld);for(var e=0,f=0;eMath.abs(b)&&(b=1E-8);this.scale.set(.5*this.size,.5*this.size,b);this.children[0].material.side=0>b?1:0;this.lookAt(this.plane.normal);F.prototype.updateMatrixWorld.call(this,a)};var nj=new n,zf,Sg;xb.prototype=Object.create(F.prototype);xb.prototype.constructor=xb;xb.prototype.setDirection=function(a){.99999a.y?this.quaternion.set(1,0,0,0):(nj.set(a.z, +0,-a.x).normalize(),this.quaternion.setFromAxisAngle(nj,Math.acos(a.y)))};xb.prototype.setLength=function(a,b,c){void 0===b&&(b=.2*a);void 0===c&&(c=.2*b);this.line.scale.set(1,Math.max(1E-4,a-b),1);this.line.updateMatrix();this.cone.scale.set(c,b,c);this.cone.position.y=a;this.cone.updateMatrix()};xb.prototype.setColor=function(a){this.line.material.color.set(a);this.cone.material.color.set(a)};xb.prototype.copy=function(a){F.prototype.copy.call(this,a,!1);this.line.copy(a.line);this.cone.copy(a.cone); +return this};xb.prototype.clone=function(){return(new this.constructor).copy(this)};ve.prototype=Object.create(ma.prototype);ve.prototype.constructor=ve;var kb=Math.pow(2,8),oj=[.125,.215,.35,.446,.526,.582],yi=5+oj.length,lb={3E3:0,3001:1,3002:2,3004:3,3005:4,3006:5,3007:6},Wg=new hd,Af=function(a){var b=new Float32Array(a),c=new n(0,1,0);a=new ub({defines:{n:a},uniforms:{envMap:{value:null},samples:{value:1},weights:{value:b},latitudinal:{value:!1},dTheta:{value:0},mipInt:{value:0},poleAxis:{value:c}, +inputEncoding:{value:lb[3E3]},outputEncoding:{value:lb[3E3]}},vertexShader:Yg(),fragmentShader:"\nprecision mediump float;\nprecision mediump int;\nvarying vec3 vOutputDirection;\nuniform sampler2D envMap;\nuniform int samples;\nuniform float weights[n];\nuniform bool latitudinal;\nuniform float dTheta;\nuniform float mipInt;\nuniform vec3 poleAxis;\n\n"+Zg()+"\n\n#define ENVMAP_TYPE_CUBE_UV\n#include \n\nvec3 getSample(float theta, vec3 axis) {\n\tfloat cosTheta = cos(theta);\n\t// Rodrigues' axis-angle rotation\n\tvec3 sampleDirection = vOutputDirection * cosTheta\n\t\t+ cross(axis, vOutputDirection) * sin(theta)\n\t\t+ axis * dot(axis, vOutputDirection) * (1.0 - cosTheta);\n\treturn bilinearCubeUV(envMap, sampleDirection, mipInt);\n}\n\nvoid main() {\n\tvec3 axis = latitudinal ? poleAxis : cross(poleAxis, vOutputDirection);\n\tif (all(equal(axis, vec3(0.0))))\n\t\taxis = vec3(vOutputDirection.z, 0.0, - vOutputDirection.x);\n\taxis = normalize(axis);\n\tgl_FragColor = vec4(0.0);\n\tgl_FragColor.rgb += weights[0] * getSample(0.0, axis);\n\tfor (int i = 1; i < n; i++) {\n\t\tif (i >= samples)\n\t\t\tbreak;\n\t\tfloat theta = dTheta * float(i);\n\t\tgl_FragColor.rgb += weights[i] * getSample(-1.0 * theta, axis);\n\t\tgl_FragColor.rgb += weights[i] * getSample(theta, axis);\n\t}\n\tgl_FragColor = linearToOutputTexel(gl_FragColor);\n}\n\t\t", +blending:0,depthTest:!1,depthWrite:!1});a.type="SphericalGaussianBlur";return a}(20),Rb=null,Sb=null,wh=function(){for(var a=[],b=[],c=[],d=8,e=0;em;m++){var n=m%3*2/3-1,p=2p;p++)t=p%3,0==t?(c.up.set(0,d[p],0),c.lookAt(f[p],0,0)):1==t?(c.up.set(0,0,d[p]),c.lookAt(0,f[p],0)):(c.up.set(0,d[p],0),c.lookAt(0,0,f[p])),Xg(e,t*kb,2h)return!1}return!0}function cb(a,b){this.center=void 0!==a?a:new n;this.radius=void 0!==b?b:-1}function Wb(a,b){this.origin=void 0!==a?a:new n;this.direction=void 0!==b?b:new n(0,0,-1)}function Ta(a,b){this.normal=void 0!==a?a:new n(1, +0,0);this.constant=void 0!==b?b:0}function wa(a,b,c){this.a=void 0!==a?a:new n;this.b=void 0!==b?b:new n;this.c=void 0!==c?c:new n}function A(a,b,c){return void 0===b&&void 0===c?this.set(a):this.setRGB(a,b,c)}function Zf(a,b,c){0>c&&(c+=1);1c?b:c<2/3?a+6*(b-a)*(2/3-c):a}function $f(a){return.04045>a?.0773993808*a:Math.pow(.9478672986*a+.0521327014,2.4)}function ag(a){return.0031308>a?12.92*a:1.055*Math.pow(a,.41666)-.055}function yc(a,b,c,d,e,f){this.a=a;this.b= +b;this.c=c;this.normal=d&&d.isVector3?d:new n;this.vertexNormals=Array.isArray(d)?d:[];this.color=e&&e.isColor?e:new A;this.vertexColors=Array.isArray(e)?e:[];this.materialIndex=void 0!==f?f:0}function J(){Object.defineProperty(this,"id",{value:jj++});this.uuid=M.generateUUID();this.name="";this.type="Material";this.fog=!0;this.blending=1;this.side=0;this.vertexColors=this.flatShading=!1;this.opacity=1;this.transparent=!1;this.blendSrc=204;this.blendDst=205;this.blendEquation=100;this.blendEquationAlpha= +this.blendDstAlpha=this.blendSrcAlpha=null;this.depthFunc=3;this.depthWrite=this.depthTest=!0;this.stencilWriteMask=255;this.stencilFunc=519;this.stencilRef=0;this.stencilFuncMask=255;this.stencilZPass=this.stencilZFail=this.stencilFail=7680;this.stencilWrite=!1;this.clippingPlanes=null;this.clipShadows=this.clipIntersection=!1;this.shadowSide=null;this.colorWrite=!0;this.precision=null;this.polygonOffset=!1;this.polygonOffsetUnits=this.polygonOffsetFactor=0;this.dithering=!1;this.alphaTest=0;this.premultipliedAlpha= +!1;this.toneMapped=this.visible=!0;this.userData={};this.version=0}function Na(a){J.call(this);this.type="MeshBasicMaterial";this.color=new A(16777215);this.lightMap=this.map=null;this.lightMapIntensity=1;this.aoMap=null;this.aoMapIntensity=1;this.envMap=this.alphaMap=this.specularMap=null;this.combine=0;this.reflectivity=1;this.refractionRatio=.98;this.wireframe=!1;this.wireframeLinewidth=1;this.wireframeLinejoin=this.wireframeLinecap="round";this.morphTargets=this.skinning=!1;this.setValues(a)} +function N(a,b,c){if(Array.isArray(a))throw new TypeError("THREE.BufferAttribute: array should be a Typed Array.");this.name="";this.array=a;this.itemSize=b;this.count=void 0!==a?a.length/b:0;this.normalized=!0===c;this.usage=35044;this.updateRange={offset:0,count:-1};this.version=0}function xd(a,b,c){N.call(this,new Int8Array(a),b,c)}function yd(a,b,c){N.call(this,new Uint8Array(a),b,c)}function zd(a,b,c){N.call(this,new Uint8ClampedArray(a),b,c)}function Ad(a,b,c){N.call(this,new Int16Array(a), +b,c)}function Xb(a,b,c){N.call(this,new Uint16Array(a),b,c)}function Bd(a,b,c){N.call(this,new Int32Array(a),b,c)}function Yb(a,b,c){N.call(this,new Uint32Array(a),b,c)}function y(a,b,c){N.call(this,new Float32Array(a),b,c)}function Cd(a,b,c){N.call(this,new Float64Array(a),b,c)}function uh(){this.vertices=[];this.normals=[];this.colors=[];this.uvs=[];this.uvs2=[];this.groups=[];this.morphTargets={};this.skinWeights=[];this.skinIndices=[];this.boundingSphere=this.boundingBox=null;this.groupsNeedUpdate= +this.uvsNeedUpdate=this.colorsNeedUpdate=this.normalsNeedUpdate=this.verticesNeedUpdate=!1}function vh(a){if(0===a.length)return-Infinity;for(var b=a[0],c=1,d=a.length;cb&&(b=a[c]);return b}function B(){Object.defineProperty(this,"id",{value:kj+=2});this.uuid=M.generateUUID();this.name="";this.type="BufferGeometry";this.index=null;this.attributes={};this.morphAttributes={};this.morphTargetsRelative=!1;this.groups=[];this.boundingSphere=this.boundingBox=null;this.drawRange={start:0,count:Infinity}; +this.userData={}}function ja(a,b){E.call(this);this.type="Mesh";this.geometry=void 0!==a?a:new B;this.material=void 0!==b?b:new Na;this.updateMorphTargets()}function wh(a,b,c,d,e,f,g,h){if(null===(1===b.side?d.intersectTriangle(g,f,e,!0,h):d.intersectTriangle(e,f,g,2!==b.side,h)))return null;De.copy(h);De.applyMatrix4(a.matrixWorld);b=c.ray.origin.distanceTo(De);return bc.far?null:{distance:b,point:De.clone(),object:a}}function Ee(a,b,c,d,e,f,g,h,k,m,z,p){Cb.fromBufferAttribute(e,m);Db.fromBufferAttribute(e, +z);Eb.fromBufferAttribute(e,p);e=a.morphTargetInfluences;if(b.morphTargets&&f&&e){Fe.set(0,0,0);Ge.set(0,0,0);He.set(0,0,0);for(var u=0,r=f.length;ug;g++)a.setRenderTarget(f,g),a.clear(b,c,d);a.setRenderTarget(e)}}function Fb(a,b,c){Number.isInteger(b)&&(console.warn("THREE.WebGLCubeRenderTarget: constructor signature is now WebGLCubeRenderTarget( size, options )"),b=c);za.call(this,a,a,b)}function Zb(a,b,c,d,e,f,g,h,k,m,z,p){V.call(this,null,f,g,h,k,m,d,e,z,p);this.image={data:a||null,width:b||1,height:c||1};this.magFilter=void 0!==k?k:1003;this.minFilter=void 0!==m?m:1003;this.flipY=this.generateMipmaps=!1;this.unpackAlignment= +1;this.needsUpdate=!0}function Ec(a,b,c,d,e,f){this.planes=[void 0!==a?a:new Ta,void 0!==b?b:new Ta,void 0!==c?c:new Ta,void 0!==d?d:new Ta,void 0!==e?e:new Ta,void 0!==f?f:new Ta]}function xh(){function a(e,f){!1!==c&&(d(e,f),b.requestAnimationFrame(a))}var b=null,c=!1,d=null;return{start:function(){!0!==c&&null!==d&&(b.requestAnimationFrame(a),c=!0)},stop:function(){c=!1},setAnimationLoop:function(a){d=a},setContext:function(a){b=a}}}function mj(a,b){function c(b,c){var d=b.array,e=b.usage,f=a.createBuffer(); +a.bindBuffer(c,f);a.bufferData(c,d,e);b.onUploadCallback();c=5126;d instanceof Float32Array?c=5126:d instanceof Float64Array?console.warn("THREE.WebGLAttributes: Unsupported data buffer format: Float64Array."):d instanceof Uint16Array?c=5123:d instanceof Int16Array?c=5122:d instanceof Uint32Array?c=5125:d instanceof Int32Array?c=5124:d instanceof Int8Array?c=5120:d instanceof Uint8Array&&(c=5121);return{buffer:f,type:c,bytesPerElement:d.BYTES_PER_ELEMENT,version:b.version}}var d=b.isWebGL2,e=new WeakMap; +return{get:function(a){a.isInterleavedBufferAttribute&&(a=a.data);return e.get(a)},remove:function(b){b.isInterleavedBufferAttribute&&(b=b.data);var c=e.get(b);c&&(a.deleteBuffer(c.buffer),e.delete(b))},update:function(b,g){b.isInterleavedBufferAttribute&&(b=b.data);var f=e.get(b);if(void 0===f)e.set(b,c(b,g));else if(f.versionm;m++){if(p=d[m])if(k=p[0],p=p[1]){z&&e.setAttribute("morphTarget"+m,z[k]); +f&&e.setAttribute("morphNormal"+m,f[k]);c[m]=p;h+=p;continue}c[m]=0}e=e.morphTargetsRelative?1:1-h;g.getUniforms().setValue(a,"morphTargetBaseInfluence",e);g.getUniforms().setValue(a,"morphTargetInfluences",c)}}}function xj(a,b,c,d){var e=new WeakMap;return{update:function(a){var f=d.render.frame,h=a.geometry,k=b.get(a,h);e.get(k)!==f&&(h.isGeometry&&k.updateFromObject(a),b.update(k),e.set(k,f));a.isInstancedMesh&&c.update(a.instanceMatrix,34962);return k},dispose:function(){e=new WeakMap}}}function pb(a, +b,c,d,e,f,g,h,k,m){a=void 0!==a?a:[];V.call(this,a,void 0!==b?b:301,c,d,e,f,void 0!==g?g:1022,h,k,m);this.flipY=!1}function Fc(a,b,c,d){V.call(this,null);this.image={data:a||null,width:b||1,height:c||1,depth:d||1};this.minFilter=this.magFilter=1003;this.wrapR=1001;this.flipY=this.generateMipmaps=!1;this.needsUpdate=!0}function Gc(a,b,c,d){V.call(this,null);this.image={data:a||null,width:b||1,height:c||1,depth:d||1};this.minFilter=this.magFilter=1003;this.wrapR=1001;this.flipY=this.generateMipmaps= +!1;this.needsUpdate=!0}function Hc(a,b,c){var d=a[0];if(0>=d||0");return a.replace(gg,fg)}function Nh(a,b,c,d){console.warn("WebGLProgram: #pragma unroll_loop shader syntax is deprecated. Please use #pragma unroll_loop_start syntax instead.");return hg(a,b,c,d)}function hg(a,b,c,d){a="";for(b=parseInt(b);bd;d++)c.probe.push(new n);var e=new n,f=new P,g=new P;return{setup:function(d,k,m){for(var h=0,p=0,l=0,r=0;9>r;r++)c.probe[r].set(0,0,0);var q=k=0,t=0,n=0,x=0,w=0,ha=0,U=0;m=m.matrixWorldInverse;d.sort(wk);r=0;for(var Z=d.length;rFa;Fa++)c.probe[Fa].addScaledVector(C.sh.coefficients[Fa],ma);else if(C.isDirectionalLight){var I=a.get(C);I.color.copy(C.color).multiplyScalar(C.intensity);I.direction.setFromMatrixPosition(C.matrixWorld);e.setFromMatrixPosition(C.target.matrixWorld);I.direction.sub(e);I.direction.transformDirection(m);C.castShadow&&(ma=C.shadow,v=b.get(C),v.shadowBias=ma.bias,v.shadowRadius=ma.radius,v.shadowMapSize=ma.mapSize, +c.directionalShadow[k]=v,c.directionalShadowMap[k]=Fa,c.directionalShadowMatrix[k]=C.shadow.matrix,w++);c.directional[k]=I;k++}else C.isSpotLight?(I=a.get(C),I.position.setFromMatrixPosition(C.matrixWorld),I.position.applyMatrix4(m),I.color.copy(v).multiplyScalar(ma),I.distance=Ba,I.direction.setFromMatrixPosition(C.matrixWorld),e.setFromMatrixPosition(C.target.matrixWorld),I.direction.sub(e),I.direction.transformDirection(m),I.coneCos=Math.cos(C.angle),I.penumbraCos=Math.cos(C.angle*(1-C.penumbra)), +I.decay=C.decay,C.castShadow&&(ma=C.shadow,v=b.get(C),v.shadowBias=ma.bias,v.shadowRadius=ma.radius,v.shadowMapSize=ma.mapSize,c.spotShadow[t]=v,c.spotShadowMap[t]=Fa,c.spotShadowMatrix[t]=C.shadow.matrix,U++),c.spot[t]=I,t++):C.isRectAreaLight?(I=a.get(C),I.color.copy(v).multiplyScalar(ma),I.position.setFromMatrixPosition(C.matrixWorld),I.position.applyMatrix4(m),g.identity(),f.copy(C.matrixWorld),f.premultiply(m),g.extractRotation(f),I.halfWidth.set(.5*C.width,0,0),I.halfHeight.set(0,.5*C.height, +0),I.halfWidth.applyMatrix4(g),I.halfHeight.applyMatrix4(g),c.rectArea[n]=I,n++):C.isPointLight?(I=a.get(C),I.position.setFromMatrixPosition(C.matrixWorld),I.position.applyMatrix4(m),I.color.copy(C.color).multiplyScalar(C.intensity),I.distance=C.distance,I.decay=C.decay,C.castShadow&&(ma=C.shadow,v=b.get(C),v.shadowBias=ma.bias,v.shadowRadius=ma.radius,v.shadowMapSize=ma.mapSize,v.shadowCameraNear=ma.camera.near,v.shadowCameraFar=ma.camera.far,c.pointShadow[q]=v,c.pointShadowMap[q]=Fa,c.pointShadowMatrix[q]= +C.shadow.matrix,ha++),c.point[q]=I,q++):C.isHemisphereLight&&(I=a.get(C),I.direction.setFromMatrixPosition(C.matrixWorld),I.direction.transformDirection(m),I.direction.normalize(),I.skyColor.copy(C.color).multiplyScalar(ma),I.groundColor.copy(C.groundColor).multiplyScalar(ma),c.hemi[x]=I,x++)}c.ambient[0]=h;c.ambient[1]=p;c.ambient[2]=l;d=c.hash;if(d.directionalLength!==k||d.pointLength!==q||d.spotLength!==t||d.rectAreaLength!==n||d.hemiLength!==x||d.numDirectionalShadows!==w||d.numPointShadows!== +ha||d.numSpotShadows!==U)c.directional.length=k,c.spot.length=t,c.rectArea.length=n,c.point.length=q,c.hemi.length=x,c.directionalShadow.length=w,c.directionalShadowMap.length=w,c.pointShadow.length=ha,c.pointShadowMap.length=ha,c.spotShadow.length=U,c.spotShadowMap.length=U,c.directionalShadowMatrix.length=w,c.pointShadowMatrix.length=ha,c.spotShadowMatrix.length=U,d.directionalLength=k,d.pointLength=q,d.spotLength=t,d.rectAreaLength=n,d.hemiLength=x,d.numDirectionalShadows=w,d.numPointShadows=ha, +d.numSpotShadows=U,c.version=yk++},state:c}}function Th(){var a=new xk,b=[],c=[];return{init:function(){b.length=0;c.length=0},state:{lightsArray:b,shadowsArray:c,lights:a},setupLights:function(d){a.setup(b,c,d)},pushLight:function(a){b.push(a)},pushShadow:function(a){c.push(a)}}}function zk(){function a(c){c=c.target;c.removeEventListener("dispose",a);b.delete(c)}var b=new WeakMap;return{get:function(c,d){if(!1===b.has(c)){var e=new Th;b.set(c,new WeakMap);b.get(c).set(d,e);c.addEventListener("dispose", +a)}else!1===b.get(c).has(d)?(e=new Th,b.get(c).set(d,e)):e=b.get(c).get(d);return e},dispose:function(){b=new WeakMap}}}function Hb(a){J.call(this);this.type="MeshDepthMaterial";this.depthPacking=3200;this.morphTargets=this.skinning=!1;this.displacementMap=this.alphaMap=this.map=null;this.displacementScale=1;this.displacementBias=0;this.wireframe=!1;this.wireframeLinewidth=1;this.fog=!1;this.setValues(a)}function Ib(a){J.call(this);this.type="MeshDistanceMaterial";this.referencePosition=new n;this.nearDistance= +1;this.farDistance=1E3;this.morphTargets=this.skinning=!1;this.displacementMap=this.alphaMap=this.map=null;this.displacementScale=1;this.displacementBias=0;this.fog=!1;this.setValues(a)}function Uh(a,b,c){function d(a,b,c){c=a<<0|b<<1|c<<2;var d=p[c];void 0===d&&(d=new Hb({depthPacking:3201,morphTargets:a,skinning:b}),p[c]=d);return d}function e(a,b,c){c=a<<0|b<<1|c<<2;var d=l[c];void 0===d&&(d=new Ib({morphTargets:a,skinning:b}),l[c]=d);return d}function f(b,c,f,g,h,k,m){var p=d,l=b.customDepthMaterial; +!0===g.isPointLight&&(p=e,l=b.customDistanceMaterial);void 0===l?(l=!1,!0===f.morphTargets&&(l=c.morphAttributes&&c.morphAttributes.position&&0\nvoid main() {\n float mean = 0.0;\n float squared_mean = 0.0;\n\tfloat depth = unpackRGBAToDepth( texture2D( shadow_pass, ( gl_FragCoord.xy ) / resolution ) );\n for ( float i = -1.0; i < 1.0 ; i += SAMPLE_RATE) {\n #ifdef HORIZONAL_PASS\n vec2 distribution = unpackRGBATo2Half( texture2D( shadow_pass, ( gl_FragCoord.xy + vec2( i, 0.0 ) * radius ) / resolution ) );\n mean += distribution.x;\n squared_mean += distribution.y * distribution.y + distribution.x * distribution.x;\n #else\n float depth = unpackRGBAToDepth( texture2D( shadow_pass, ( gl_FragCoord.xy + vec2( 0.0, i ) * radius ) / resolution ) );\n mean += depth;\n squared_mean += depth * depth;\n #endif\n }\n mean = mean * HALF_SAMPLE_RATE;\n squared_mean = squared_mean * HALF_SAMPLE_RATE;\n float std_dev = sqrt( squared_mean - mean * mean );\n gl_FragColor = pack2HalfToRGBA( vec2( mean, std_dev ) );\n}"}), +n=t.clone();n.defines.HORIZONAL_PASS=1;var x=new B;x.setAttribute("position",new N(new Float32Array([-1,-1,.5,3,-1,.5,-1,3,.5]),3));var w=new ja(x,t),ha=this;this.enabled=!1;this.autoUpdate=!0;this.needsUpdate=!1;this.type=1;this.render=function(d,e,f){if(!1!==ha.enabled&&(!1!==ha.autoUpdate||!1!==ha.needsUpdate)&&0!==d.length){var p=a.getRenderTarget(),l=a.getActiveCubeFace(),u=a.getActiveMipmapLevel(),q=a.state;q.setBlending(0);q.buffers.color.setClear(1,1,1,1);q.buffers.depth.setTest(!0);q.setScissorTest(!1); +for(var r=0,F=d.length;rc||k.y>c)k.x>c&&(m.x=Math.floor(c/v.x),k.x=m.x*v.x,C.mapSize.x=m.x),k.y>c&&(m.y=Math.floor(c/v.y),k.y=m.y*v.y,C.mapSize.y=m.y);null!==C.map||C.isPointLightShadow||3!==this.type||(v={minFilter:1006,magFilter:1006,format:1023},C.map=new za(k.x,k.y,v),C.map.texture.name=x.name+".shadowMap", +C.mapPass=new za(k.x,k.y,v),C.camera.updateProjectionMatrix());null===C.map&&(v={minFilter:1003,magFilter:1003,format:1023},C.map=new za(k.x,k.y,v),C.map.texture.name=x.name+".shadowMap",C.camera.updateProjectionMatrix());a.setRenderTarget(C.map);a.clear();v=C.getViewportCount();for(var Z=0;Zd||a.height>d)e=d/Math.max(a.width,a.height);if(1>e||!0===b){if("undefined"!==typeof HTMLImageElement&&a instanceof HTMLImageElement||"undefined"!==typeof HTMLCanvasElement&&a instanceof HTMLCanvasElement||"undefined"!==typeof ImageBitmap&&a instanceof ImageBitmap)return d=b?M.floorPowerOfTwo:Math.floor,b=d(e*a.width),e=d(e*a.height),void 0===G&&(G=h(b,e)),c=c?h(b,e):G,c.width=b,c.height=e, +c.getContext("2d").drawImage(a,0,0,b,e),console.warn("THREE.WebGLRenderer: Texture has been resized from ("+a.width+"x"+a.height+") to ("+b+"x"+e+")."),c;"data"in a&&console.warn("THREE.WebGLRenderer: Image in DataTexture is too big ("+a.width+"x"+a.height+").")}return a}function m(a){return M.isPowerOfTwo(a.width)&&M.isPowerOfTwo(a.height)}function l(a,b){return a.generateMipmaps&&b&&1003!==a.minFilter&&1006!==a.minFilter}function p(b,c,e,f){a.generateMipmap(b);d.get(c).__maxMipLevel=Math.log(Math.max(e, +f))*Math.LOG2E}function u(c,d,e){if(!1===Ba)return d;if(null!==c){if(void 0!==a[c])return a[c];console.warn("THREE.WebGLRenderer: Attempt to use non-existing WebGL internal format '"+c+"'")}c=d;6403===d&&(5126===e&&(c=33326),5131===e&&(c=33325),5121===e&&(c=33321));6407===d&&(5126===e&&(c=34837),5131===e&&(c=34843),5121===e&&(c=32849));6408===d&&(5126===e&&(c=34836),5131===e&&(c=34842),5121===e&&(c=32856));33325!==c&&33326!==c&&34842!==c&&34836!==c||b.get("EXT_color_buffer_float");return c}function r(a){return 1003=== +a||1004===a||1005===a?9728:9729}function q(b){b=b.target;b.removeEventListener("dispose",q);var c=d.get(b);void 0!==c.__webglInit&&(a.deleteTexture(c.__webglTexture),d.remove(b));b.isVideoTexture&&B.delete(b);g.memory.textures--}function t(b){b=b.target;b.removeEventListener("dispose",t);var c=d.get(b),e=d.get(b.texture);if(b){void 0!==e.__webglTexture&&a.deleteTexture(e.__webglTexture);b.depthTexture&&b.depthTexture.dispose();if(b.isWebGLCubeRenderTarget)for(e=0;6>e;e++)a.deleteFramebuffer(c.__webglFramebuffer[e]), +c.__webglDepthbuffer&&a.deleteRenderbuffer(c.__webglDepthbuffer[e]);else a.deleteFramebuffer(c.__webglFramebuffer),c.__webglDepthbuffer&&a.deleteRenderbuffer(c.__webglDepthbuffer),c.__webglMultisampledFramebuffer&&a.deleteFramebuffer(c.__webglMultisampledFramebuffer),c.__webglColorRenderbuffer&&a.deleteRenderbuffer(c.__webglColorRenderbuffer),c.__webglDepthRenderbuffer&&a.deleteRenderbuffer(c.__webglDepthRenderbuffer);d.remove(b.texture);d.remove(b)}g.memory.textures--}function n(a,b){var e=d.get(a); +if(a.isVideoTexture){var f=g.render.frame;B.get(a)!==f&&(B.set(a,f),a.update())}if(0q;q++)z[q]=h||e?e?b.image[q].image:b.image[q]:k(b.image[q],!1,!0,I);var r=z[0],t=m(r)||Ba,n=f.convert(b.format),F=f.convert(b.type),w=u(b.internalFormat,n,F);v(34067,b,t);if(h){for(q=0;6>q;q++){var x=z[q].mipmaps;for(h=0;hq;q++)if(e)for(c.texImage2D(34069+q,0,w,z[q].width,z[q].height,0,n,F,z[q].data),h=0;h=Fa&&console.warn("THREE.WebGLTextures: Trying to use "+a+" texture units while this GPU supports only "+Fa);N+=1;return a};this.resetTextureUnits=function(){N=0};this.setTexture2D=n;this.setTexture2DArray=function(a,b){var e=d.get(a);0z;z++)e.__webglFramebuffer[z]=a.createFramebuffer();else if(e.__webglFramebuffer=a.createFramebuffer(),z)if(Ba){e.__webglMultisampledFramebuffer=a.createFramebuffer();e.__webglColorRenderbuffer=a.createRenderbuffer();a.bindRenderbuffer(36161, +e.__webglColorRenderbuffer);z=f.convert(b.texture.format);var r=f.convert(b.texture.type);z=u(b.texture.internalFormat,z,r);r=D(b);a.renderbufferStorageMultisample(36161,r,z,b.width,b.height);a.bindFramebuffer(36160,e.__webglMultisampledFramebuffer);a.framebufferRenderbuffer(36160,36064,36161,e.__webglColorRenderbuffer);a.bindRenderbuffer(36161,null);b.depthBuffer&&(e.__webglDepthRenderbuffer=a.createRenderbuffer(),y(e.__webglDepthRenderbuffer,b,!0));a.bindFramebuffer(36160,null)}else console.warn("THREE.WebGLRenderer: WebGLMultisampleRenderTarget can only be used with WebGL2."); +if(k){c.bindTexture(34067,h.__webglTexture);v(34067,b.texture,q);for(z=0;6>z;z++)C(e.__webglFramebuffer[z],b,36064,34069+z);l(b.texture,q)&&p(34067,b.texture,b.width,b.height);c.bindTexture(34067,null)}else c.bindTexture(3553,h.__webglTexture),v(3553,b.texture,q),C(e.__webglFramebuffer,b,36064,3553),l(b.texture,q)&&p(3553,b.texture,b.width,b.height),c.bindTexture(3553,null);if(b.depthBuffer){e=d.get(b);h=!0===b.isWebGLCubeRenderTarget;if(b.depthTexture){if(h)throw Error("target.depthTexture not supported in Cube render targets"); +if(b&&b.isWebGLCubeRenderTarget)throw Error("Depth Texture with cube render targets is not supported");a.bindFramebuffer(36160,e.__webglFramebuffer);if(!b.depthTexture||!b.depthTexture.isDepthTexture)throw Error("renderTarget.depthTexture must be an instance of THREE.DepthTexture");d.get(b.depthTexture).__webglTexture&&b.depthTexture.image.width===b.width&&b.depthTexture.image.height===b.height||(b.depthTexture.image.width=b.width,b.depthTexture.image.height=b.height,b.depthTexture.needsUpdate=!0); +n(b.depthTexture,0);e=d.get(b.depthTexture).__webglTexture;if(1026===b.depthTexture.format)a.framebufferTexture2D(36160,36096,3553,e,0);else if(1027===b.depthTexture.format)a.framebufferTexture2D(36160,33306,3553,e,0);else throw Error("Unknown depthTexture format");}else if(h)for(e.__webglDepthbuffer=[],h=0;6>h;h++)a.bindFramebuffer(36160,e.__webglFramebuffer[h]),e.__webglDepthbuffer[h]=a.createRenderbuffer(),y(e.__webglDepthbuffer[h],b,!1);else a.bindFramebuffer(36160,e.__webglFramebuffer),e.__webglDepthbuffer= +a.createRenderbuffer(),y(e.__webglDepthbuffer,b,!1);a.bindFramebuffer(36160,null)}};this.updateRenderTargetMipmap=function(a){var b=a.texture,e=m(a)||Ba;if(l(b,e)){e=a.isWebGLCubeRenderTarget?34067:3553;var f=d.get(b).__webglTexture;c.bindTexture(e,f);p(e,b,a.width,a.height);c.bindTexture(e,null)}};this.updateMultisampleRenderTarget=function(b){if(b.isWebGLMultisampleRenderTarget)if(Ba){var c=d.get(b);a.bindFramebuffer(36008,c.__webglMultisampledFramebuffer);a.bindFramebuffer(36009,c.__webglFramebuffer); +var e=b.width,f=b.height,g=16384;b.depthBuffer&&(g|=256);b.stencilBuffer&&(g|=1024);a.blitFramebuffer(0,0,e,f,0,0,e,f,g,9728);a.bindFramebuffer(36160,c.__webglMultisampledFramebuffer)}else console.warn("THREE.WebGLRenderer: WebGLMultisampleRenderTarget can only be used with WebGL2.")};this.safeSetTexture2D=function(a,b){a&&a.isWebGLRenderTarget&&(!1===P&&(console.warn("THREE.WebGLTextures.safeSetTexture2D: don't use render targets as textures. Use their .texture property instead."),P=!0),a=a.texture); +n(a,b)};this.safeSetTextureCube=function(a,b){a&&a.isWebGLCubeRenderTarget&&(!1===L&&(console.warn("THREE.WebGLTextures.safeSetTextureCube: don't use cube render targets as textures. Use their .texture property instead."),L=!0),a=a.texture);a&&a.isCubeTexture||Array.isArray(a.image)&&6===a.image.length?x(a,b):w(a,b)}}function Wh(a,b,c){var d=c.isWebGL2;return{convert:function(a){if(1009===a)return 5121;if(1017===a)return 32819;if(1018===a)return 32820;if(1019===a)return 33635;if(1010===a)return 5120; +if(1011===a)return 5122;if(1012===a)return 5123;if(1013===a)return 5124;if(1014===a)return 5125;if(1015===a)return 5126;if(1016===a){if(d)return 5131;var c=b.get("OES_texture_half_float");return null!==c?c.HALF_FLOAT_OES:null}if(1021===a)return 6406;if(1022===a)return 6407;if(1023===a)return 6408;if(1024===a)return 6409;if(1025===a)return 6410;if(1026===a)return 6402;if(1027===a)return 34041;if(1028===a)return 6403;if(1029===a)return 36244;if(1030===a)return 33319;if(1031===a)return 33320;if(1032=== +a)return 36248;if(1033===a)return 36249;if(33776===a||33777===a||33778===a||33779===a)if(c=b.get("WEBGL_compressed_texture_s3tc"),null!==c){if(33776===a)return c.COMPRESSED_RGB_S3TC_DXT1_EXT;if(33777===a)return c.COMPRESSED_RGBA_S3TC_DXT1_EXT;if(33778===a)return c.COMPRESSED_RGBA_S3TC_DXT3_EXT;if(33779===a)return c.COMPRESSED_RGBA_S3TC_DXT5_EXT}else return null;if(35840===a||35841===a||35842===a||35843===a)if(c=b.get("WEBGL_compressed_texture_pvrtc"),null!==c){if(35840===a)return c.COMPRESSED_RGB_PVRTC_4BPPV1_IMG; +if(35841===a)return c.COMPRESSED_RGB_PVRTC_2BPPV1_IMG;if(35842===a)return c.COMPRESSED_RGBA_PVRTC_4BPPV1_IMG;if(35843===a)return c.COMPRESSED_RGBA_PVRTC_2BPPV1_IMG}else return null;if(36196===a)return c=b.get("WEBGL_compressed_texture_etc1"),null!==c?c.COMPRESSED_RGB_ETC1_WEBGL:null;if(37492===a||37496===a)if(c=b.get("WEBGL_compressed_texture_etc"),null!==c){if(37492===a)return c.COMPRESSED_RGB8_ETC2;if(37496===a)return c.COMPRESSED_RGBA8_ETC2_EAC}if(37808===a||37809===a||37810===a||37811===a||37812=== +a||37813===a||37814===a||37815===a||37816===a||37817===a||37818===a||37819===a||37820===a||37821===a||37840===a||37841===a||37842===a||37843===a||37844===a||37845===a||37846===a||37847===a||37848===a||37849===a||37850===a||37851===a||37852===a||37853===a)return c=b.get("WEBGL_compressed_texture_astc"),null!==c?a:null;if(36492===a)return c=b.get("EXT_texture_compression_bptc"),null!==c?a:null;if(1020===a){if(d)return 34042;c=b.get("WEBGL_depth_texture");return null!==c?c.UNSIGNED_INT_24_8_WEBGL:null}}}} +function Ke(a){ba.call(this);this.cameras=a||[]}function Jc(){E.call(this);this.type="Group"}function Le(){this._grip=this._targetRay=null}function Xh(a,b){function c(a){var b=q.get(a.inputSource);b&&b.dispatchEvent({type:a.type})}function d(){q.forEach(function(a,b){a.disconnect(b)});q.clear();a.setFramebuffer(null);a.setRenderTarget(a.getRenderTarget());D.stop();h.isPresenting=!1;h.dispatchEvent({type:"sessionend"})}function e(a){l=a;D.setContext(k);D.start();h.isPresenting=!0;h.dispatchEvent({type:"sessionstart"})} +function f(a){for(var b=k.inputSources,c=0;cf.matrixWorld.determinant(),k=u(a,c,e,f);Y.setMaterial(e,h);var m=!1;if(b!==d.id||fa!==k.id||Je!==(!0===e.wireframe))b=d.id,fa=k.id,Je=!0===e.wireframe,m=!0;if(e.morphTargets||e.morphNormals)ya.update(f,d,e,k),m=!0;!0===f.isInstancedMesh&&(m=!0);a=d.index;c=d.attributes.position;if(null===a){if(void 0===c||0===c.count)return}else if(0===a.count)return;var p=1;!0===e.wireframe&&(a=wa.getWireframeAttribute(d), +p=2);h=Aa;if(null!==a){var l=la.get(a);h=Ca;h.setIndex(l)}if(m){if(!1!==Ga.isWebGL2||!f.isInstancedMesh&&!d.isInstancedBufferGeometry||null!==ra.get("ANGLE_instanced_arrays")){Y.initAttributes();m=d.attributes;k=k.getAttributes();var z=e.defaultAttributeValues;for(ha in k){var q=k[ha];if(0<=q){var r=m[ha];if(void 0!==r){var t=r.normalized,n=r.itemSize,w=la.get(r);if(void 0!==w){var F=w.buffer,x=w.type;w=w.bytesPerElement;if(r.isInterleavedBufferAttribute){var v=r.data,C=v.stride;r=r.offset;v&&v.isInstancedInterleavedBuffer? +(Y.enableAttributeAndDivisor(q,v.meshPerAttribute),void 0===d.maxInstancedCount&&(d.maxInstancedCount=v.meshPerAttribute*v.count)):Y.enableAttribute(q);H.bindBuffer(34962,F);Y.vertexAttribPointer(q,n,x,t,C*w,r*w)}else r.isInstancedBufferAttribute?(Y.enableAttributeAndDivisor(q,r.meshPerAttribute),void 0===d.maxInstancedCount&&(d.maxInstancedCount=r.meshPerAttribute*r.count)):Y.enableAttribute(q),H.bindBuffer(34962,F),Y.vertexAttribPointer(q,n,x,t,0,0)}}else if("instanceMatrix"===ha)w=la.get(f.instanceMatrix), +void 0!==w&&(F=w.buffer,x=w.type,Y.enableAttributeAndDivisor(q+0,1),Y.enableAttributeAndDivisor(q+1,1),Y.enableAttributeAndDivisor(q+2,1),Y.enableAttributeAndDivisor(q+3,1),H.bindBuffer(34962,F),H.vertexAttribPointer(q+0,4,x,!1,64,0),H.vertexAttribPointer(q+1,4,x,!1,64,16),H.vertexAttribPointer(q+2,4,x,!1,64,32),H.vertexAttribPointer(q+3,4,x,!1,64,48));else if(void 0!==z&&(t=z[ha],void 0!==t))switch(t.length){case 2:H.vertexAttrib2fv(q,t);break;case 3:H.vertexAttrib3fv(q,t);break;case 4:H.vertexAttrib4fv(q, +t);break;default:H.vertexAttrib1fv(q,t)}}}Y.disableUnusedAttributes()}null!==a&&H.bindBuffer(34963,l.buffer)}var ha=d.drawRange.start*p;m=null!==g?g.start*p:0;l=Math.max(ha,m);g=Math.max(0,Math.min(null!==a?a.count:c.count,ha+d.drawRange.count*p,m+(null!==g?g.count*p:Infinity))-1-l+1);0!==g&&(f.isMesh?!0===e.wireframe?(Y.setLineWidth(e.wireframeLinewidth*(null===L?R:1)),h.setMode(1)):h.setMode(4):f.isLine?(e=e.linewidth,void 0===e&&(e=1),Y.setLineWidth(e*(null===L?R:1)),f.isLineSegments?h.setMode(1): +f.isLineLoop?h.setMode(2):h.setMode(3)):f.isPoints?h.setMode(0):f.isSprite&&h.setMode(4),f.isInstancedMesh?h.renderInstances(d,l,g,f.count):d.isInstancedBufferGeometry?h.renderInstances(d,l,g,d.maxInstancedCount):h.render(l,g))};this.compile=function(a,b){A=va.get(a,b);A.init();a.traverse(function(a){a.isLight&&(A.pushLight(a),a.castShadow&&A.pushShadow(a))});A.setupLights(b);var c={};a.traverse(function(b){if(b.material)if(Array.isArray(b.material))for(var d=0;de.far||f.push({distance:a,distanceToRay:Math.sqrt(h),point:c,index:b,face:null,object:g}))}function qg(a,b,c,d,e,f,g,h,k){V.call(this,a,b,c,d,e,f,g,h,k);this.format=void 0!==g?g:1022;this.minFilter=void 0!==f?f:1006;this.magFilter=void 0!==e?e:1006;this.generateMipmaps=!1}function Nc(a,b,c,d,e,f,g,h,k,m,l,p){V.call(this,null,f,g,h,k,m,d,e,l,p);this.image={width:b,height:c};this.mipmaps=a;this.generateMipmaps=this.flipY=!1}function Od(a,b,c,d,e,f,g,h,k){V.call(this, +a,b,c,d,e,f,g,h,k);this.needsUpdate=!0}function Pd(a,b,c,d,e,f,g,h,k,m){m=void 0!==m?m:1026;if(1026!==m&&1027!==m)throw Error("DepthTexture format must be either THREE.DepthFormat or THREE.DepthStencilFormat");void 0===c&&1026===m&&(c=1012);void 0===c&&1027===m&&(c=1020);V.call(this,null,d,e,f,g,h,m,c,k);this.image={width:a,height:b};this.magFilter=void 0!==g?g:1003;this.minFilter=void 0!==h?h:1003;this.generateMipmaps=this.flipY=!1}function Oc(a){B.call(this);this.type="WireframeGeometry";var b= +[],c,d,e,f=[0,0],g={},h=["a","b","c"];if(a&&a.isGeometry){var k=a.faces;var m=0;for(d=k.length;mc;c++){var p=l[h[c]];var u=l[h[(c+1)%3]];f[0]=Math.min(p,u);f[1]=Math.max(p,u);p=f[0]+","+f[1];void 0===g[p]&&(g[p]={index1:f[0],index2:f[1]})}}for(p in g)m=g[p],h=a.vertices[m.index1],b.push(h.x,h.y,h.z),h=a.vertices[m.index2],b.push(h.x,h.y,h.z)}else if(a&&a.isBufferGeometry)if(h=new n,null!==a.index){k=a.attributes.position;l=a.index;var r=a.groups;0===r.length&&(r=[{start:0, +count:l.count,materialIndex:0}]);a=0;for(e=r.length;ac;c++)p=l.getX(m+c),u=l.getX(m+(c+1)%3),f[0]=Math.min(p,u),f[1]=Math.max(p,u),p=f[0]+","+f[1],void 0===g[p]&&(g[p]={index1:f[0],index2:f[1]});for(p in g)m=g[p],h.fromBufferAttribute(k,m.index1),b.push(h.x,h.y,h.z),h.fromBufferAttribute(k,m.index2),b.push(h.x,h.y,h.z)}else for(k=a.attributes.position,m=0,d=k.count/3;mc;c++)g=3*m+c,h.fromBufferAttribute(k,g),b.push(h.x, +h.y,h.z),g=3*m+(c+1)%3,h.fromBufferAttribute(k,g),b.push(h.x,h.y,h.z);this.setAttribute("position",new y(b,3))}function Qd(a,b,c){O.call(this);this.type="ParametricGeometry";this.parameters={func:a,slices:b,stacks:c};this.fromBufferGeometry(new Pc(a,b,c));this.mergeVertices()}function Pc(a,b,c){B.call(this);this.type="ParametricBufferGeometry";this.parameters={func:a,slices:b,stacks:c};var d=[],e=[],f=[],g=[],h=new n,k=new n,m=new n,l=new n,p=new n,u,r;3>a.length&&console.error("THREE.ParametricGeometry: Function must now modify a Vector3 as third parameter."); +var q=b+1;for(u=0;u<=c;u++){var t=u/c;for(r=0;r<=b;r++){var F=r/b;a(F,t,k);e.push(k.x,k.y,k.z);0<=F-1E-5?(a(F-1E-5,t,m),l.subVectors(k,m)):(a(F+1E-5,t,m),l.subVectors(m,k));0<=t-1E-5?(a(F,t-1E-5,m),p.subVectors(k,m)):(a(F,t+1E-5,m),p.subVectors(m,k));h.crossVectors(l,p).normalize();f.push(h.x,h.y,h.z);g.push(F,t)}}for(u=0;ud&&1===a.x&&(k[b]=a.x-1);0===c.x&&0===c.z&&(k[b]=d/2/Math.PI+.5)}B.call(this);this.type="PolyhedronBufferGeometry";this.parameters={vertices:a, +indices:b,radius:c,detail:d};c=c||1;d=d||0;var h=[],k=[];(function(a){for(var c=new n,d=new n,g=new n,h=0;he&&(.2>b&&(k[a+0]+=1),.2>c&&(k[a+2]+=1),.2>d&&(k[a+4]+=1))})();this.setAttribute("position",new y(h,3));this.setAttribute("normal",new y(h.slice(),3));this.setAttribute("uv",new y(k,2));0===d?this.computeVertexNormals():this.normalizeNormals()}function Sd(a, +b){O.call(this);this.type="TetrahedronGeometry";this.parameters={radius:a,detail:b};this.fromBufferGeometry(new Qc(a,b));this.mergeVertices()}function Qc(a,b){Ea.call(this,[1,1,1,-1,-1,1,-1,1,-1,1,-1,-1],[2,1,0,0,3,2,1,3,0,2,3,1],a,b);this.type="TetrahedronBufferGeometry";this.parameters={radius:a,detail:b}}function Td(a,b){O.call(this);this.type="OctahedronGeometry";this.parameters={radius:a,detail:b};this.fromBufferGeometry(new ac(a,b));this.mergeVertices()}function ac(a,b){Ea.call(this,[1,0,0, +-1,0,0,0,1,0,0,-1,0,0,0,1,0,0,-1],[0,2,4,0,4,3,0,3,5,0,5,2,1,2,5,1,5,3,1,3,4,1,4,2],a,b);this.type="OctahedronBufferGeometry";this.parameters={radius:a,detail:b}}function Ud(a,b){O.call(this);this.type="IcosahedronGeometry";this.parameters={radius:a,detail:b};this.fromBufferGeometry(new Rc(a,b));this.mergeVertices()}function Rc(a,b){var c=(1+Math.sqrt(5))/2;Ea.call(this,[-1,c,0,1,c,0,-1,-c,0,1,-c,0,0,-1,c,0,1,c,0,-1,-c,0,1,-c,c,0,-1,c,0,1,-c,0,-1,-c,0,1],[0,11,5,0,5,1,0,1,7,0,7,10,0,10,11,1,5,9,5, +11,4,11,10,2,10,7,6,7,1,8,3,9,4,3,4,2,3,2,6,3,6,8,3,8,9,4,9,5,2,4,11,6,2,10,8,6,7,9,8,1],a,b);this.type="IcosahedronBufferGeometry";this.parameters={radius:a,detail:b}}function Vd(a,b){O.call(this);this.type="DodecahedronGeometry";this.parameters={radius:a,detail:b};this.fromBufferGeometry(new Sc(a,b));this.mergeVertices()}function Sc(a,b){var c=(1+Math.sqrt(5))/2,d=1/c;Ea.call(this,[-1,-1,-1,-1,-1,1,-1,1,-1,-1,1,1,1,-1,-1,1,-1,1,1,1,-1,1,1,1,0,-d,-c,0,-d,c,0,d,-c,0,d,c,-d,-c,0,-d,c,0,d,-c,0,d,c, +0,-c,0,-d,c,0,-d,-c,0,d,c,0,d],[3,11,7,3,7,15,3,15,13,7,19,17,7,17,6,7,6,15,17,4,8,17,8,10,17,10,6,8,0,16,8,16,2,8,2,10,0,12,1,0,1,18,0,18,16,6,10,2,6,2,13,6,13,15,2,16,18,2,18,3,2,3,13,18,1,9,18,9,11,18,11,3,4,14,12,4,12,0,4,0,8,11,9,5,11,5,19,11,19,7,19,5,14,19,14,4,19,4,17,1,12,14,1,14,5,1,5,9],a,b);this.type="DodecahedronBufferGeometry";this.parameters={radius:a,detail:b}}function Wd(a,b,c,d,e,f){O.call(this);this.type="TubeGeometry";this.parameters={path:a,tubularSegments:b,radius:c,radialSegments:d, +closed:e};void 0!==f&&console.warn("THREE.TubeGeometry: taper has been removed.");a=new bc(a,b,c,d,e);this.tangents=a.tangents;this.normals=a.normals;this.binormals=a.binormals;this.fromBufferGeometry(a);this.mergeVertices()}function bc(a,b,c,d,e){function f(e){l=a.getPointAt(e/b,l);var f=g.normals[e];e=g.binormals[e];for(u=0;u<=d;u++){var m=u/d*Math.PI*2,p=Math.sin(m);m=-Math.cos(m);k.x=m*f.x+p*e.x;k.y=m*f.y+p*e.y;k.z=m*f.z+p*e.z;k.normalize();q.push(k.x,k.y,k.z);h.x=l.x+c*k.x;h.y=l.y+c*k.y;h.z= +l.z+c*k.z;r.push(h.x,h.y,h.z)}}B.call(this);this.type="TubeBufferGeometry";this.parameters={path:a,tubularSegments:b,radius:c,radialSegments:d,closed:e};b=b||64;c=c||1;d=d||8;e=e||!1;var g=a.computeFrenetFrames(b,e);this.tangents=g.tangents;this.normals=g.normals;this.binormals=g.binormals;var h=new n,k=new n,m=new v,l=new n,p,u,r=[],q=[],t=[],F=[];for(p=0;p=b;e-=d)f=ai(e,a[e],a[e+1],f);f&&Te(f,f.next)&&(Zd(f),f=f.next);return f}function Lb(a,b){if(!a)return a;b||(b=a);do{var c=!1;if(a.steiner||!Te(a,a.next)&&0!==Q(a.prev,a,a.next))a=a.next;else{Zd(a);a=b=a.prev;if(a===a.next)break;c=!0}}while(c||a!==b);return b} +function $d(a,b,c,d,e,f,g){if(a){if(!g&&f){var h=a,k=h;do null===k.z&&(k.z=rg(k.x,k.y,d,e,f)),k.prevZ=k.prev,k=k.nextZ=k.next;while(k!==h);k.prevZ.nextZ=null;k.prevZ=null;h=k;var m,l,p,u,r=1;do{k=h;var q=h=null;for(l=0;k;){l++;var n=k;for(m=p=0;mr!==q.next.y>r&&q.next.y!==q.y&&p<(q.next.x-q.x)*(r-q.y)/(q.next.y-q.y)+q.x&&(l=!l),q=q.next;while(q!==k);q=l}q=q&&(Q(k.prev,k,n.prev)||Q(k,n.prev,n))||Te(k,n)&&0a.x?e.x>f.x?e.x:f.x:a.x>f.x?a.x:f.x,h=e.y>a.y?e.y>f.y?e.y:f.y:a.y>f.y?a.y:f.y,k=rg(e.x=k&&d&&d.z<=b;){if(c!==a.prev&&c!==a.next&&Vc(e.x,e.y,a.x,a.y,f.x,f.y, +c.x,c.y)&&0<=Q(c.prev,c,c.next))return!1;c=c.prevZ;if(d!==a.prev&&d!==a.next&&Vc(e.x,e.y,a.x,a.y,f.x,f.y,d.x,d.y)&&0<=Q(d.prev,d,d.next))return!1;d=d.nextZ}for(;c&&c.z>=k;){if(c!==a.prev&&c!==a.next&&Vc(e.x,e.y,a.x,a.y,f.x,f.y,c.x,c.y)&&0<=Q(c.prev,c,c.next))return!1;c=c.prevZ}for(;d&&d.z<=b;){if(d!==a.prev&&d!==a.next&&Vc(e.x,e.y,a.x,a.y,f.x,f.y,d.x,d.y)&&0<=Q(d.prev,d,d.next))return!1;d=d.nextZ}return!0}function Dk(a,b){return a.x-b.x}function Ek(a,b){var c=b,d=a.x,e=a.y,f=-Infinity;do{if(e<=c.y&& +e>=c.next.y&&c.next.y!==c.y){var g=c.x+(e-c.y)*(c.next.x-c.x)/(c.next.y-c.y);if(g<=d&&g>f){f=g;if(g===d){if(e===c.y)return c;if(e===c.next.y)return c.next}var h=c.x=c.x&&c.x>=g&&d!==c.x&&Vc(eh.x)&&(p=c.x===h.x)){p=h;var u=c;p=0>Q(p.prev,p,u.prev)&&0>Q(u.next,p,p.next)}p&& +(h=c,m=l)}c=c.next}while(c!==b);return h}function rg(a,b,c,d,e){a=32767*(a-c)*e;b=32767*(b-d)*e;a=(a|a<<8)&16711935;a=(a|a<<4)&252645135;a=(a|a<<2)&858993459;b=(b|b<<8)&16711935;b=(b|b<<4)&252645135;b=(b|b<<2)&858993459;return(a|a<<1)&1431655765|((b|b<<1)&1431655765)<<1}function Fk(a){var b=a,c=a;do{if(b.x=Math.min(a.x,c.x)&&b.y<=Math.max(a.y,c.y)&&b.y>=Math.min(a.y,c.y)}function Ue(a){return 0a?-1:0}function ae(a,b){return 0>Q(a.prev,a,a.next)?0<=Q(a,b,a.next)&&0<= +Q(a,a.prev,b):0>Q(a,b,a.prev)||0>Q(a,a.next,b)}function ci(a,b){var c=new sg(a.i,a.x,a.y),d=new sg(b.i,b.x,b.y),e=a.next,f=b.prev;a.next=b;b.prev=a;c.next=e;e.prev=c;d.next=c;c.prev=d;f.next=d;d.prev=f;return d}function ai(a,b,c,d){a=new sg(a,b,c);d?(a.next=d.next,a.prev=d,d.next.prev=a,d.next=a):(a.prev=a,a.next=a);return a}function Zd(a){a.next.prev=a.prev;a.prev.next=a.next;a.prevZ&&(a.prevZ.nextZ=a.nextZ);a.nextZ&&(a.nextZ.prevZ=a.prevZ)}function sg(a,b,c){this.i=a;this.x=b;this.y=c;this.nextZ= +this.prevZ=this.z=this.next=this.prev=null;this.steiner=!1}function di(a){var b=a.length;2Number.EPSILON){var k=Math.sqrt(h),m=Math.sqrt(f*f+g*g);h=b.x-e/k;b=b.y+d/k;g=((c.x-g/m-h)*g-(c.y+f/m-b)*f)/(d*g-e*f);f=h+d*g-a.x;d=b+e*g-a.y;e=f*f+d*d;if(2>=e)return new v(f,d);e=Math.sqrt(e/2)}else a=!1,d>Number.EPSILON?f>Number.EPSILON&&(a=!0):d<-Number.EPSILON?f<-Number.EPSILON&&(a=!0):Math.sign(e)===Math.sign(g)&&(a=!0),a?(f=-e,e=Math.sqrt(h)):(f=d,d=e,e=Math.sqrt(h/2));return new v(f/e,d/ +e)}function h(a,b){for(K=a.length;0<=--K;){var c=K;var f=K-1;0>f&&(f=a.length-1);var g,h=w+2*y;for(g=0;gl;l++){var p=m[f[l]];var u=m[f[(l+1)%3]];d[0]=Math.min(p,u);d[1]=Math.max(p,u);p=d[0]+","+d[1];void 0===e[p]?e[p]={index1:d[0],index2:d[1],face1:h,face2:void 0}:e[p].face2=h}for(p in e)if(d=e[p],void 0===d.face2||g[d.face1].normal.dot(g[d.face2].normal)<=b)f=a[d.index1],c.push(f.x,f.y,f.z),f=a[d.index2],c.push(f.x,f.y,f.z);this.setAttribute("position",new y(c,3))}function gc(a,b,c,d,e,f,g,h){O.call(this);this.type="CylinderGeometry";this.parameters={radiusTop:a,radiusBottom:b,height:c,radialSegments:d, +heightSegments:e,openEnded:f,thetaStart:g,thetaLength:h};this.fromBufferGeometry(new sb(a,b,c,d,e,f,g,h));this.mergeVertices()}function sb(a,b,c,d,e,f,g,h){function k(c){var e,f=new v,k=new n,z=0,t=!0===c?a:b,w=!0===c?1:-1;var A=q;for(e=1;e<=d;e++)p.push(0,F*w,0),u.push(0,w,0),r.push(.5,.5),q++;var y=q;for(e=0;e<=d;e++){var B=e/d*h+g,D=Math.cos(B);B=Math.sin(B);k.x=t*B;k.y=F*w;k.z=t*D;p.push(k.x,k.y,k.z);u.push(0,w,0);f.x=.5*D+.5;f.y=.5*B*w+.5;r.push(f.x,f.y);q++}for(e=0;ethis.duration&&this.resetDuration()}function Hk(a){switch(a.toLowerCase()){case "scalar":case "double":case "float":case "number":case "integer":return ad; +case "vector":case "vector2":case "vector3":case "vector4":return bd;case "color":return Ze;case "quaternion":return je;case "bool":case "boolean":return Ye;case "string":return af}throw Error("THREE.KeyframeTrack: Unsupported typeName: "+a);}function Ik(a){if(void 0===a.type)throw Error("THREE.KeyframeTrack: track type undefined, can not parse");var b=Hk(a.type);if(void 0===a.times){var c=[],d=[];ka.flattenJSON(a.keys,c,d,"value");a.times=c;a.values=d}return void 0!==b.parse?b.parse(a):new b(a.name, +a.times,a.values,a.interpolation)}function tg(a,b,c){var d=this,e=!1,f=0,g=0,h=void 0,k=[];this.onStart=void 0;this.onLoad=a;this.onProgress=b;this.onError=c;this.itemStart=function(a){g++;if(!1===e&&void 0!==d.onStart)d.onStart(a,f,g);e=!0};this.itemEnd=function(a){f++;if(void 0!==d.onProgress)d.onProgress(a,f,g);if(f===g&&(e=!1,void 0!==d.onLoad))d.onLoad()};this.itemError=function(a){if(void 0!==d.onError)d.onError(a)};this.resolveURL=function(a){return h?h(a):a};this.setURLModifier=function(a){h= +a;return this};this.addHandler=function(a,b){k.push(a,b);return this};this.removeHandler=function(a){a=k.indexOf(a);-1!==a&&k.splice(a,2);return this};this.getHandler=function(a){for(var b=0,c=k.length;ba;a++)this.coefficients.push(new n)}function Ra(a,b){S.call(this,void 0,b);this.type="LightProbe";this.sh=void 0!==a?a:new nf}function of(a){X.call(this,a);this.textures={}}function pf(){B.call(this);this.type="InstancedBufferGeometry";this.maxInstancedCount=void 0}function qf(a,b,c,d){"number"===typeof c&&(d=c,c=!1,console.error("THREE.InstancedBufferAttribute: The constructor now expects normalized as the third argument."));N.call(this,a,b,c);this.meshPerAttribute=d||1}function rf(a){X.call(this, +a)}function sf(a){X.call(this,a)}function yg(a){"undefined"===typeof createImageBitmap&&console.warn("THREE.ImageBitmapLoader: createImageBitmap() not supported.");"undefined"===typeof fetch&&console.warn("THREE.ImageBitmapLoader: fetch() not supported.");X.call(this,a);this.options=void 0}function zg(){this.type="ShapePath";this.color=new A;this.subPaths=[];this.currentPath=null}function Ag(a){this.type="Font";this.data=a}function Bg(a){X.call(this,a)}function tf(a){X.call(this,a)}function Cg(a, +b,c){Ra.call(this,void 0,c);a=(new A).set(a);c=(new A).set(b);b=new n(a.r,a.g,a.b);a=new n(c.r,c.g,c.b);c=Math.sqrt(Math.PI);var d=c*Math.sqrt(.75);this.sh.coefficients[0].copy(b).add(a).multiplyScalar(c);this.sh.coefficients[1].copy(b).sub(a).multiplyScalar(d)}function Dg(a,b){Ra.call(this,void 0,b);a=(new A).set(a);this.sh.coefficients[0].set(a.r,a.g,a.b).multiplyScalar(2*Math.sqrt(Math.PI))}function ji(){this.type="StereoCamera";this.aspect=1;this.eyeSep=.064;this.cameraL=new ba;this.cameraL.layers.enable(1); +this.cameraL.matrixAutoUpdate=!1;this.cameraR=new ba;this.cameraR.layers.enable(2);this.cameraR.matrixAutoUpdate=!1;this._cache={focus:null,fov:null,aspect:null,near:null,far:null,zoom:null,eyeSep:null}}function Eg(a){this.autoStart=void 0!==a?a:!0;this.elapsedTime=this.oldTime=this.startTime=0;this.running=!1}function Fg(){E.call(this);this.type="AudioListener";this.context=Gg.getContext();this.gain=this.context.createGain();this.gain.connect(this.context.destination);this.filter=null;this.timeDelta= +0;this._clock=new Eg}function fd(a){E.call(this);this.type="Audio";this.listener=a;this.context=a.context;this.gain=this.context.createGain();this.gain.connect(a.getInput());this.autoplay=!1;this.buffer=null;this.detune=0;this.loop=!1;this.offset=this.loopEnd=this.loopStart=0;this.duration=void 0;this.playbackRate=1;this.isPlaying=!1;this.hasPlaybackControl=!0;this.sourceType="empty";this._progress=this._startedAt=0;this.filters=[]}function Hg(a){fd.call(this,a);this.panner=this.context.createPanner(); +this.panner.panningModel="HRTF";this.panner.connect(this.gain)}function Ig(a,b){this.analyser=a.context.createAnalyser();this.analyser.fftSize=void 0!==b?b:2048;this.data=new Uint8Array(this.analyser.frequencyBinCount);a.getOutput().connect(this.analyser)}function Jg(a,b,c){this.binding=a;this.valueSize=c;switch(b){case "quaternion":a=this._slerp;b=this._slerpAdditive;var d=this._setAdditiveIdentityQuaternion;this.buffer=new Float64Array(6*c);this._workIndex=5;break;case "string":case "bool":b=a= +this._select;d=this._setAdditiveIdentityOther;this.buffer=Array(5*c);break;default:a=this._lerp,b=this._lerpAdditive,d=this._setAdditiveIdentityNumeric,this.buffer=new Float64Array(5*c)}this._mixBufferRegion=a;this._mixBufferRegionAdditive=b;this._setIdentity=d;this._origIndex=3;this._addIndex=4;this.referenceCount=this.useCount=this.cumulativeWeightAdditive=this.cumulativeWeight=0}function ki(a,b,c){c=c||ya.parseTrackName(b);this._targetGroup=a;this._bindings=a.subscribe_(b,c)}function ya(a,b,c){this.path= +b;this.parsedPath=c||ya.parseTrackName(b);this.node=ya.findNode(a,this.parsedPath.nodeName)||a;this.rootNode=a}function li(){this.uuid=M.generateUUID();this._objects=Array.prototype.slice.call(arguments);this.nCachedObjects_=0;var a={};this._indicesByUUID=a;for(var b=0,c=arguments.length;b!==c;++b)a[arguments[b].uuid]=b;this._paths=[];this._parsedPaths=[];this._bindings=[];this._bindingsIndicesByPath={};var d=this;this.stats={objects:{get total(){return d._objects.length},get inUse(){return this.total- +d.nCachedObjects_}},get bindingsPerObject(){return d._bindings.length}}}function mi(a,b,c,d){this._mixer=a;this._clip=b;this._localRoot=c||null;this.blendMode=d||b.blendMode;a=b.tracks;b=a.length;c=Array(b);d={endingStart:2400,endingEnd:2400};for(var e=0;e!==b;++e){var f=a[e].createInterpolant(null);c[e]=f;f.settings=d}this._interpolantSettings=d;this._interpolants=c;this._propertyBindings=Array(b);this._weightInterpolant=this._timeScaleInterpolant=this._byClipCacheIndex=this._cacheIndex=null;this.loop= +2201;this._loopCount=-1;this._startTime=null;this.time=0;this._effectiveWeight=this.weight=this._effectiveTimeScale=this.timeScale=1;this.repetitions=Infinity;this.paused=!1;this.enabled=!0;this.clampWhenFinished=!1;this.zeroSlopeAtEnd=this.zeroSlopeAtStart=!0}function Kg(a){this._root=a;this._initMemoryManager();this.time=this._accuIndex=0;this.timeScale=1}function uf(a,b){"string"===typeof a&&(console.warn("THREE.Uniform: Type parameter is no longer needed."),a=b);this.value=a}function Lg(a,b,c){qb.call(this, +a,b);this.meshPerAttribute=c||1}function Mg(a,b,c,d){this.ray=new Wb(a,b);this.near=c||0;this.far=d||Infinity;this.camera=null;this.layers=new Ce;this.params={Mesh:{},Line:{threshold:1},LOD:{},Points:{threshold:1},Sprite:{}};Object.defineProperties(this.params,{PointCloud:{get:function(){console.warn("THREE.Raycaster: params.PointCloud has been renamed to params.Points.");return this.Points}}})}function ni(a,b){return a.distance-b.distance}function Ng(a,b,c,d){a.layers.test(b.layers)&&a.raycast(b, +c);if(!0===d){a=a.children;d=0;for(var e=a.length;dc;c++,d++){var e=c/32*Math.PI*2,f=d/32*Math.PI*2;b.push(Math.cos(e),Math.sin(e),1,Math.cos(f),Math.sin(f),1)}a.setAttribute("position",new y(b,3));b=new da({fog:!1,toneMapped:!1});this.cone=new na(a,b);this.add(this.cone);this.update()} +function qi(a){var b=[];a&&a.isBone&&b.push(a);for(var c=0;c\n\nvec3 getSample(float theta, vec3 axis) {\n\tfloat cosTheta = cos(theta);\n\t// Rodrigues' axis-angle rotation\n\tvec3 sampleDirection = vOutputDirection * cosTheta\n\t\t+ cross(axis, vOutputDirection) * sin(theta)\n\t\t+ axis * dot(axis, vOutputDirection) * (1.0 - cosTheta);\n\treturn bilinearCubeUV(envMap, sampleDirection, mipInt);\n}\n\nvoid main() {\n\tvec3 axis = latitudinal ? poleAxis : cross(poleAxis, vOutputDirection);\n\tif (all(equal(axis, vec3(0.0))))\n\t\taxis = vec3(vOutputDirection.z, 0.0, - vOutputDirection.x);\n\taxis = normalize(axis);\n\tgl_FragColor = vec4(0.0);\n\tgl_FragColor.rgb += weights[0] * getSample(0.0, axis);\n\tfor (int i = 1; i < n; i++) {\n\t\tif (i >= samples)\n\t\t\tbreak;\n\t\tfloat theta = dTheta * float(i);\n\t\tgl_FragColor.rgb += weights[i] * getSample(-1.0 * theta, axis);\n\t\tgl_FragColor.rgb += weights[i] * getSample(theta, axis);\n\t}\n\tgl_FragColor = linearToOutputTexel(gl_FragColor);\n}\n\t\t", +blending:0,depthTest:!1,depthWrite:!1});a.type="SphericalGaussianBlur";this._blurMaterial=a;this._cubemapShader=this._equirectShader=null;this._compileMaterial(this._blurMaterial)}function ri(a){a=new za(3*lb,3*lb,a);a.texture.mapping=306;a.texture.name="PMREM.cubeUv";a.scissorTest=!0;return a}function Ug(a,b,c,d,e){a.viewport.set(b,c,d,e);a.scissor.set(b,c,d,e)}function si(){var a=new v(1,1);a=new tb({uniforms:{envMap:{value:null},texelSize:{value:a},inputEncoding:{value:kb[3E3]},outputEncoding:{value:kb[3E3]}}, +vertexShader:Sg(),fragmentShader:"\nprecision mediump float;\nprecision mediump int;\nvarying vec3 vOutputDirection;\nuniform sampler2D envMap;\nuniform vec2 texelSize;\n\n"+Tg()+"\n\n#define RECIPROCAL_PI 0.31830988618\n#define RECIPROCAL_PI2 0.15915494\n\nvoid main() {\n\tgl_FragColor = vec4(0.0);\n\tvec3 outputDirection = normalize(vOutputDirection);\n\tvec2 uv;\n\tuv.y = asin(clamp(outputDirection.y, -1.0, 1.0)) * RECIPROCAL_PI + 0.5;\n\tuv.x = atan(outputDirection.z, outputDirection.x) * RECIPROCAL_PI2 + 0.5;\n\tvec2 f = fract(uv / texelSize - 0.5);\n\tuv -= f * texelSize;\n\tvec3 tl = envMapTexelToLinear(texture2D(envMap, uv)).rgb;\n\tuv.x += texelSize.x;\n\tvec3 tr = envMapTexelToLinear(texture2D(envMap, uv)).rgb;\n\tuv.y += texelSize.y;\n\tvec3 br = envMapTexelToLinear(texture2D(envMap, uv)).rgb;\n\tuv.x -= texelSize.x;\n\tvec3 bl = envMapTexelToLinear(texture2D(envMap, uv)).rgb;\n\tvec3 tm = mix(tl, tr, f.x);\n\tvec3 bm = mix(bl, br, f.x);\n\tgl_FragColor.rgb = mix(tm, bm, f.y);\n\tgl_FragColor = linearToOutputTexel(gl_FragColor);\n}\n\t\t", +blending:0,depthTest:!1,depthWrite:!1});a.type="EquirectangularToCubeUV";return a}function ti(){var a=new tb({uniforms:{envMap:{value:null},inputEncoding:{value:kb[3E3]},outputEncoding:{value:kb[3E3]}},vertexShader:Sg(),fragmentShader:"\nprecision mediump float;\nprecision mediump int;\nvarying vec3 vOutputDirection;\nuniform samplerCube envMap;\n\n"+Tg()+"\n\nvoid main() {\n\tgl_FragColor = vec4(0.0);\n\tgl_FragColor.rgb = envMapTexelToLinear(textureCube(envMap, vec3( - vOutputDirection.x, vOutputDirection.yz ))).rgb;\n\tgl_FragColor = linearToOutputTexel(gl_FragColor);\n}\n\t\t", +blending:0,depthTest:!1,depthWrite:!1});a.type="CubemapToCubeUV";return a}function Sg(){return"\nprecision mediump float;\nprecision mediump int;\nattribute vec3 position;\nattribute vec2 uv;\nattribute float faceIndex;\nvarying vec3 vOutputDirection;\nvec3 getDirection(vec2 uv, float face) {\n\tuv = 2.0 * uv - 1.0;\n\tvec3 direction = vec3(uv, 1.0);\n\tif (face == 0.0) {\n\t\tdirection = direction.zyx;\n\t\tdirection.z *= -1.0;\n\t} else if (face == 1.0) {\n\t\tdirection = direction.xzy;\n\t\tdirection.z *= -1.0;\n\t} else if (face == 3.0) {\n\t\tdirection = direction.zyx;\n\t\tdirection.x *= -1.0;\n\t} else if (face == 4.0) {\n\t\tdirection = direction.xzy;\n\t\tdirection.y *= -1.0;\n\t} else if (face == 5.0) {\n\t\tdirection.xz *= -1.0;\n\t}\n\treturn direction;\n}\nvoid main() {\n\tvOutputDirection = getDirection(uv, faceIndex);\n\tgl_Position = vec4( position, 1.0 );\n}\n\t"} +function Tg(){return"\nuniform int inputEncoding;\nuniform int outputEncoding;\n\n#include \n\nvec4 inputTexelToLinear(vec4 value){\n\tif(inputEncoding == 0){\n\t\treturn value;\n\t}else if(inputEncoding == 1){\n\t\treturn sRGBToLinear(value);\n\t}else if(inputEncoding == 2){\n\t\treturn RGBEToLinear(value);\n\t}else if(inputEncoding == 3){\n\t\treturn RGBMToLinear(value, 7.0);\n\t}else if(inputEncoding == 4){\n\t\treturn RGBMToLinear(value, 16.0);\n\t}else if(inputEncoding == 5){\n\t\treturn RGBDToLinear(value, 256.0);\n\t}else{\n\t\treturn GammaToLinear(value, 2.2);\n\t}\n}\n\nvec4 linearToOutputTexel(vec4 value){\n\tif(outputEncoding == 0){\n\t\treturn value;\n\t}else if(outputEncoding == 1){\n\t\treturn LinearTosRGB(value);\n\t}else if(outputEncoding == 2){\n\t\treturn LinearToRGBE(value);\n\t}else if(outputEncoding == 3){\n\t\treturn LinearToRGBM(value, 7.0);\n\t}else if(outputEncoding == 4){\n\t\treturn LinearToRGBM(value, 16.0);\n\t}else if(outputEncoding == 5){\n\t\treturn LinearToRGBD(value, 256.0);\n\t}else{\n\t\treturn LinearToGamma(value, 2.2);\n\t}\n}\n\nvec4 envMapTexelToLinear(vec4 color) {\n\treturn inputTexelToLinear(color);\n}\n\t"} +function ui(a){console.warn("THREE.ClosedSplineCurve3 has been deprecated. Use THREE.CatmullRomCurve3 instead.");pa.call(this,a);this.type="catmullrom";this.closed=!0}function vi(a){console.warn("THREE.SplineCurve3 has been deprecated. Use THREE.CatmullRomCurve3 instead.");pa.call(this,a);this.type="catmullrom"}function Vg(a){console.warn("THREE.Spline has been removed. Use THREE.CatmullRomCurve3 instead.");pa.call(this,a);this.type="catmullrom"}void 0===Number.EPSILON&&(Number.EPSILON=Math.pow(2, +-52));void 0===Number.isInteger&&(Number.isInteger=function(a){return"number"===typeof a&&isFinite(a)&&Math.floor(a)===a});void 0===Math.sign&&(Math.sign=function(a){return 0>a?-1:0re;re++)ta[re]=(16>re?"0":"")+re.toString(16);var M={DEG2RAD:Math.PI/180,RAD2DEG:180/Math.PI,generateUUID:function(){var a=4294967295*Math.random()|0,b=4294967295*Math.random()|0,c=4294967295*Math.random()| +0,d=4294967295*Math.random()|0;return(ta[a&255]+ta[a>>8&255]+ta[a>>16&255]+ta[a>>24&255]+"-"+ta[b&255]+ta[b>>8&255]+"-"+ta[b>>16&15|64]+ta[b>>24&255]+"-"+ta[c&63|128]+ta[c>>8&255]+"-"+ta[c>>16&255]+ta[c>>24&255]+ta[d&255]+ta[d>>8&255]+ta[d>>16&255]+ta[d>>24&255]).toUpperCase()},clamp:function(a,b,c){return Math.max(b,Math.min(c,a))},euclideanModulo:function(a,b){return(a%b+b)%b},mapLinear:function(a,b,c,d,e){return d+(a-b)*(e-d)/(c-b)},lerp:function(a,b,c){return(1-c)*a+c*b},smoothstep:function(a, +b,c){if(a<=b)return 0;if(a>=c)return 1;a=(a-b)/(c-b);return a*a*(3-2*a)},smootherstep:function(a,b,c){if(a<=b)return 0;if(a>=c)return 1;a=(a-b)/(c-b);return a*a*a*(a*(6*a-15)+10)},randInt:function(a,b){return a+Math.floor(Math.random()*(b-a+1))},randFloat:function(a,b){return a+Math.random()*(b-a)},randFloatSpread:function(a){return a*(.5-Math.random())},degToRad:function(a){return a*M.DEG2RAD},radToDeg:function(a){return a*M.RAD2DEG},isPowerOfTwo:function(a){return 0===(a&a-1)&&0!==a},ceilPowerOfTwo:function(a){return Math.pow(2, +Math.ceil(Math.log(a)/Math.LN2))},floorPowerOfTwo:function(a){return Math.pow(2,Math.floor(Math.log(a)/Math.LN2))},setQuaternionFromProperEuler:function(a,b,c,d,e){var f=Math.cos,g=Math.sin,h=f(c/2);c=g(c/2);var k=f((b+d)/2),m=g((b+d)/2),l=f((b-d)/2),p=g((b-d)/2);f=f((d-b)/2);b=g((d-b)/2);switch(e){case "XYX":a.set(h*m,c*l,c*p,h*k);break;case "YZY":a.set(c*p,h*m,c*l,h*k);break;case "ZXZ":a.set(c*l,c*p,h*m,h*k);break;case "XZX":a.set(h*m,c*b,c*f,h*k);break;case "YXY":a.set(c*f,h*m,c*b,h*k);break;case "ZYZ":a.set(c* +b,c*f,h*m,h*k);break;default:console.warn("THREE.MathUtils: .setQuaternionFromProperEuler() encountered an unknown order: "+e)}}};Object.defineProperties(v.prototype,{width:{get:function(){return this.x},set:function(a){this.x=a}},height:{get:function(){return this.y},set:function(a){this.y=a}}});Object.assign(v.prototype,{isVector2:!0,set:function(a,b){this.x=a;this.y=b;return this},setScalar:function(a){this.y=this.x=a;return this},setX:function(a){this.x=a;return this},setY:function(a){this.y= +a;return this},setComponent:function(a,b){switch(a){case 0:this.x=b;break;case 1:this.y=b;break;default:throw Error("index is out of range: "+a);}return this},getComponent:function(a){switch(a){case 0:return this.x;case 1:return this.y;default:throw Error("index is out of range: "+a);}},clone:function(){return new this.constructor(this.x,this.y)},copy:function(a){this.x=a.x;this.y=a.y;return this},add:function(a,b){if(void 0!==b)return console.warn("THREE.Vector2: .add() now only accepts one argument. Use .addVectors( a, b ) instead."), +this.addVectors(a,b);this.x+=a.x;this.y+=a.y;return this},addScalar:function(a){this.x+=a;this.y+=a;return this},addVectors:function(a,b){this.x=a.x+b.x;this.y=a.y+b.y;return this},addScaledVector:function(a,b){this.x+=a.x*b;this.y+=a.y*b;return this},sub:function(a,b){if(void 0!==b)return console.warn("THREE.Vector2: .sub() now only accepts one argument. Use .subVectors( a, b ) instead."),this.subVectors(a,b);this.x-=a.x;this.y-=a.y;return this},subScalar:function(a){this.x-=a;this.y-=a;return this}, +subVectors:function(a,b){this.x=a.x-b.x;this.y=a.y-b.y;return this},multiply:function(a){this.x*=a.x;this.y*=a.y;return this},multiplyScalar:function(a){this.x*=a;this.y*=a;return this},divide:function(a){this.x/=a.x;this.y/=a.y;return this},divideScalar:function(a){return this.multiplyScalar(1/a)},applyMatrix3:function(a){var b=this.x,c=this.y;a=a.elements;this.x=a[0]*b+a[3]*c+a[6];this.y=a[1]*b+a[4]*c+a[7];return this},min:function(a){this.x=Math.min(this.x,a.x);this.y=Math.min(this.y,a.y);return this}, +max:function(a){this.x=Math.max(this.x,a.x);this.y=Math.max(this.y,a.y);return this},clamp:function(a,b){this.x=Math.max(a.x,Math.min(b.x,this.x));this.y=Math.max(a.y,Math.min(b.y,this.y));return this},clampScalar:function(a,b){this.x=Math.max(a,Math.min(b,this.x));this.y=Math.max(a,Math.min(b,this.y));return this},clampLength:function(a,b){var c=this.length();return this.divideScalar(c||1).multiplyScalar(Math.max(a,Math.min(b,c)))},floor:function(){this.x=Math.floor(this.x);this.y=Math.floor(this.y); +return this},ceil:function(){this.x=Math.ceil(this.x);this.y=Math.ceil(this.y);return this},round:function(){this.x=Math.round(this.x);this.y=Math.round(this.y);return this},roundToZero:function(){this.x=0>this.x?Math.ceil(this.x):Math.floor(this.x);this.y=0>this.y?Math.ceil(this.y):Math.floor(this.y);return this},negate:function(){this.x=-this.x;this.y=-this.y;return this},dot:function(a){return this.x*a.x+this.y*a.y},cross:function(a){return this.x*a.y-this.y*a.x},lengthSq:function(){return this.x* +this.x+this.y*this.y},length:function(){return Math.sqrt(this.x*this.x+this.y*this.y)},manhattanLength:function(){return Math.abs(this.x)+Math.abs(this.y)},normalize:function(){return this.divideScalar(this.length()||1)},angle:function(){return Math.atan2(-this.y,-this.x)+Math.PI},distanceTo:function(a){return Math.sqrt(this.distanceToSquared(a))},distanceToSquared:function(a){var b=this.x-a.x;a=this.y-a.y;return b*b+a*a},manhattanDistanceTo:function(a){return Math.abs(this.x-a.x)+Math.abs(this.y- +a.y)},setLength:function(a){return this.normalize().multiplyScalar(a)},lerp:function(a,b){this.x+=(a.x-this.x)*b;this.y+=(a.y-this.y)*b;return this},lerpVectors:function(a,b,c){return this.subVectors(b,a).multiplyScalar(c).add(a)},equals:function(a){return a.x===this.x&&a.y===this.y},fromArray:function(a,b){void 0===b&&(b=0);this.x=a[b];this.y=a[b+1];return this},toArray:function(a,b){void 0===a&&(a=[]);void 0===b&&(b=0);a[b]=this.x;a[b+1]=this.y;return a},fromBufferAttribute:function(a,b,c){void 0!== +c&&console.warn("THREE.Vector2: offset has been removed from .fromBufferAttribute().");this.x=a.getX(b);this.y=a.getY(b);return this},rotateAround:function(a,b){var c=Math.cos(b);b=Math.sin(b);var d=this.x-a.x,e=this.y-a.y;this.x=d*c-e*b+a.x;this.y=d*b+e*c+a.y;return this},random:function(){this.x=Math.random();this.y=Math.random();return this}});Object.assign(xa.prototype,{isMatrix3:!0,set:function(a,b,c,d,e,f,g,h,k){var m=this.elements;m[0]=a;m[1]=d;m[2]=g;m[3]=b;m[4]=e;m[5]=h;m[6]=c;m[7]=f;m[8]= +k;return this},identity:function(){this.set(1,0,0,0,1,0,0,0,1);return this},clone:function(){return(new this.constructor).fromArray(this.elements)},copy:function(a){var b=this.elements;a=a.elements;b[0]=a[0];b[1]=a[1];b[2]=a[2];b[3]=a[3];b[4]=a[4];b[5]=a[5];b[6]=a[6];b[7]=a[7];b[8]=a[8];return this},extractBasis:function(a,b,c){a.setFromMatrix3Column(this,0);b.setFromMatrix3Column(this,1);c.setFromMatrix3Column(this,2);return this},setFromMatrix4:function(a){a=a.elements;this.set(a[0],a[4],a[8],a[1], +a[5],a[9],a[2],a[6],a[10]);return this},multiply:function(a){return this.multiplyMatrices(this,a)},premultiply:function(a){return this.multiplyMatrices(a,this)},multiplyMatrices:function(a,b){var c=a.elements,d=b.elements;b=this.elements;a=c[0];var e=c[3],f=c[6],g=c[1],h=c[4],k=c[7],m=c[2],l=c[5];c=c[8];var p=d[0],n=d[3],r=d[6],q=d[1],t=d[4],v=d[7],x=d[2],w=d[5];d=d[8];b[0]=a*p+e*q+f*x;b[3]=a*n+e*t+f*w;b[6]=a*r+e*v+f*d;b[1]=g*p+h*q+k*x;b[4]=g*n+h*t+k*w;b[7]=g*r+h*v+k*d;b[2]=m*p+l*q+c*x;b[5]=m*n+l* +t+c*w;b[8]=m*r+l*v+c*d;return this},multiplyScalar:function(a){var b=this.elements;b[0]*=a;b[3]*=a;b[6]*=a;b[1]*=a;b[4]*=a;b[7]*=a;b[2]*=a;b[5]*=a;b[8]*=a;return this},determinant:function(){var a=this.elements,b=a[0],c=a[1],d=a[2],e=a[3],f=a[4],g=a[5],h=a[6],k=a[7];a=a[8];return b*f*a-b*g*k-c*e*a+c*g*h+d*e*k-d*f*h},getInverse:function(a,b){void 0!==b&&console.warn("THREE.Matrix3: .getInverse() can no longer be configured to throw on degenerate.");var c=a.elements;a=this.elements;b=c[0];var d=c[1], +e=c[2],f=c[3],g=c[4],h=c[5],k=c[6],m=c[7];c=c[8];var l=c*g-h*m,p=h*k-c*f,n=m*f-g*k,r=b*l+d*p+e*n;if(0===r)return this.set(0,0,0,0,0,0,0,0,0);r=1/r;a[0]=l*r;a[1]=(e*m-c*d)*r;a[2]=(h*d-e*g)*r;a[3]=p*r;a[4]=(c*b-e*k)*r;a[5]=(e*f-h*b)*r;a[6]=n*r;a[7]=(d*k-m*b)*r;a[8]=(g*b-d*f)*r;return this},transpose:function(){var a=this.elements;var b=a[1];a[1]=a[3];a[3]=b;b=a[2];a[2]=a[6];a[6]=b;b=a[5];a[5]=a[7];a[7]=b;return this},getNormalMatrix:function(a){return this.setFromMatrix4(a).getInverse(this).transpose()}, +transposeIntoArray:function(a){var b=this.elements;a[0]=b[0];a[1]=b[3];a[2]=b[6];a[3]=b[1];a[4]=b[4];a[5]=b[7];a[6]=b[2];a[7]=b[5];a[8]=b[8];return this},setUvTransform:function(a,b,c,d,e,f,g){var h=Math.cos(e);e=Math.sin(e);this.set(c*h,c*e,-c*(h*f+e*g)+f+a,-d*e,d*h,-d*(-e*f+h*g)+g+b,0,0,1)},scale:function(a,b){var c=this.elements;c[0]*=a;c[3]*=a;c[6]*=a;c[1]*=b;c[4]*=b;c[7]*=b;return this},rotate:function(a){var b=Math.cos(a);a=Math.sin(a);var c=this.elements,d=c[0],e=c[3],f=c[6],g=c[1],h=c[4], +k=c[7];c[0]=b*d+a*g;c[3]=b*e+a*h;c[6]=b*f+a*k;c[1]=-a*d+b*g;c[4]=-a*e+b*h;c[7]=-a*f+b*k;return this},translate:function(a,b){var c=this.elements;c[0]+=a*c[2];c[3]+=a*c[5];c[6]+=a*c[8];c[1]+=b*c[2];c[4]+=b*c[5];c[7]+=b*c[8];return this},equals:function(a){var b=this.elements;a=a.elements;for(var c=0;9>c;c++)if(b[c]!==a[c])return!1;return!0},fromArray:function(a,b){void 0===b&&(b=0);for(var c=0;9>c;c++)this.elements[c]=a[c+b];return this},toArray:function(a,b){void 0===a&&(a=[]);void 0===b&&(b=0);var c= +this.elements;a[b]=c[0];a[b+1]=c[1];a[b+2]=c[2];a[b+3]=c[3];a[b+4]=c[4];a[b+5]=c[5];a[b+6]=c[6];a[b+7]=c[7];a[b+8]=c[8];return a}});var kd,Ob={getDataURL:function(a){if("undefined"==typeof HTMLCanvasElement)return a.src;if(!(a instanceof HTMLCanvasElement)){void 0===kd&&(kd=document.createElementNS("http://www.w3.org/1999/xhtml","canvas"));kd.width=a.width;kd.height=a.height;var b=kd.getContext("2d");a instanceof ImageData?b.putImageData(a,0,0):b.drawImage(a,0,0,a.width,a.height);a=kd}return 2048< +a.width||2048a.x||1a.x?0:1;break;case 1002:a.x=1===Math.abs(Math.floor(a.x)%2)?Math.ceil(a.x)-a.x:a.x-Math.floor(a.x)}if(0>a.y||1a.y?0:1;break;case 1002:a.y=1===Math.abs(Math.floor(a.y)%2)?Math.ceil(a.y)-a.y:a.y-Math.floor(a.y)}this.flipY&&(a.y=1-a.y);return a}});Object.defineProperty(V.prototype, +"needsUpdate",{set:function(a){!0===a&&this.version++}});Object.defineProperties(ca.prototype,{width:{get:function(){return this.z},set:function(a){this.z=a}},height:{get:function(){return this.w},set:function(a){this.w=a}}});Object.assign(ca.prototype,{isVector4:!0,set:function(a,b,c,d){this.x=a;this.y=b;this.z=c;this.w=d;return this},setScalar:function(a){this.w=this.z=this.y=this.x=a;return this},setX:function(a){this.x=a;return this},setY:function(a){this.y=a;return this},setZ:function(a){this.z= +a;return this},setW:function(a){this.w=a;return this},setComponent:function(a,b){switch(a){case 0:this.x=b;break;case 1:this.y=b;break;case 2:this.z=b;break;case 3:this.w=b;break;default:throw Error("index is out of range: "+a);}return this},getComponent:function(a){switch(a){case 0:return this.x;case 1:return this.y;case 2:return this.z;case 3:return this.w;default:throw Error("index is out of range: "+a);}},clone:function(){return new this.constructor(this.x,this.y,this.z,this.w)},copy:function(a){this.x= +a.x;this.y=a.y;this.z=a.z;this.w=void 0!==a.w?a.w:1;return this},add:function(a,b){if(void 0!==b)return console.warn("THREE.Vector4: .add() now only accepts one argument. Use .addVectors( a, b ) instead."),this.addVectors(a,b);this.x+=a.x;this.y+=a.y;this.z+=a.z;this.w+=a.w;return this},addScalar:function(a){this.x+=a;this.y+=a;this.z+=a;this.w+=a;return this},addVectors:function(a,b){this.x=a.x+b.x;this.y=a.y+b.y;this.z=a.z+b.z;this.w=a.w+b.w;return this},addScaledVector:function(a,b){this.x+=a.x* +b;this.y+=a.y*b;this.z+=a.z*b;this.w+=a.w*b;return this},sub:function(a,b){if(void 0!==b)return console.warn("THREE.Vector4: .sub() now only accepts one argument. Use .subVectors( a, b ) instead."),this.subVectors(a,b);this.x-=a.x;this.y-=a.y;this.z-=a.z;this.w-=a.w;return this},subScalar:function(a){this.x-=a;this.y-=a;this.z-=a;this.w-=a;return this},subVectors:function(a,b){this.x=a.x-b.x;this.y=a.y-b.y;this.z=a.z-b.z;this.w=a.w-b.w;return this},multiplyScalar:function(a){this.x*=a;this.y*=a;this.z*= +a;this.w*=a;return this},applyMatrix4:function(a){var b=this.x,c=this.y,d=this.z,e=this.w;a=a.elements;this.x=a[0]*b+a[4]*c+a[8]*d+a[12]*e;this.y=a[1]*b+a[5]*c+a[9]*d+a[13]*e;this.z=a[2]*b+a[6]*c+a[10]*d+a[14]*e;this.w=a[3]*b+a[7]*c+a[11]*d+a[15]*e;return this},divideScalar:function(a){return this.multiplyScalar(1/a)},setAxisAngleFromQuaternion:function(a){this.w=2*Math.acos(a.w);var b=Math.sqrt(1-a.w*a.w);1E-4>b?(this.x=1,this.z=this.y=0):(this.x=a.x/b,this.y=a.y/b,this.z=a.z/b);return this},setAxisAngleFromRotationMatrix:function(a){a= +a.elements;var b=a[0];var c=a[4];var d=a[8],e=a[1],f=a[5],g=a[9];var h=a[2];var k=a[6];var m=a[10];if(.01>Math.abs(c-e)&&.01>Math.abs(d-h)&&.01>Math.abs(g-k)){if(.1>Math.abs(c+e)&&.1>Math.abs(d+h)&&.1>Math.abs(g+k)&&.1>Math.abs(b+f+m-3))return this.set(1,0,0,0),this;a=Math.PI;b=(b+1)/2;f=(f+1)/2;m=(m+1)/2;c=(c+e)/4;d=(d+h)/4;g=(g+k)/4;b>f&&b>m?.01>b?(k=0,c=h=.707106781):(k=Math.sqrt(b),h=c/k,c=d/k):f>m?.01>f?(k=.707106781,h=0,c=.707106781):(h=Math.sqrt(f),k=c/h,c=g/h):.01>m?(h=k=.707106781,c=0):(c= +Math.sqrt(m),k=d/c,h=g/c);this.set(k,h,c,a);return this}a=Math.sqrt((k-g)*(k-g)+(d-h)*(d-h)+(e-c)*(e-c));.001>Math.abs(a)&&(a=1);this.x=(k-g)/a;this.y=(d-h)/a;this.z=(e-c)/a;this.w=Math.acos((b+f+m-1)/2);return this},min:function(a){this.x=Math.min(this.x,a.x);this.y=Math.min(this.y,a.y);this.z=Math.min(this.z,a.z);this.w=Math.min(this.w,a.w);return this},max:function(a){this.x=Math.max(this.x,a.x);this.y=Math.max(this.y,a.y);this.z=Math.max(this.z,a.z);this.w=Math.max(this.w,a.w);return this},clamp:function(a, +b){this.x=Math.max(a.x,Math.min(b.x,this.x));this.y=Math.max(a.y,Math.min(b.y,this.y));this.z=Math.max(a.z,Math.min(b.z,this.z));this.w=Math.max(a.w,Math.min(b.w,this.w));return this},clampScalar:function(a,b){this.x=Math.max(a,Math.min(b,this.x));this.y=Math.max(a,Math.min(b,this.y));this.z=Math.max(a,Math.min(b,this.z));this.w=Math.max(a,Math.min(b,this.w));return this},clampLength:function(a,b){var c=this.length();return this.divideScalar(c||1).multiplyScalar(Math.max(a,Math.min(b,c)))},floor:function(){this.x= +Math.floor(this.x);this.y=Math.floor(this.y);this.z=Math.floor(this.z);this.w=Math.floor(this.w);return this},ceil:function(){this.x=Math.ceil(this.x);this.y=Math.ceil(this.y);this.z=Math.ceil(this.z);this.w=Math.ceil(this.w);return this},round:function(){this.x=Math.round(this.x);this.y=Math.round(this.y);this.z=Math.round(this.z);this.w=Math.round(this.w);return this},roundToZero:function(){this.x=0>this.x?Math.ceil(this.x):Math.floor(this.x);this.y=0>this.y?Math.ceil(this.y):Math.floor(this.y); +this.z=0>this.z?Math.ceil(this.z):Math.floor(this.z);this.w=0>this.w?Math.ceil(this.w):Math.floor(this.w);return this},negate:function(){this.x=-this.x;this.y=-this.y;this.z=-this.z;this.w=-this.w;return this},dot:function(a){return this.x*a.x+this.y*a.y+this.z*a.z+this.w*a.w},lengthSq:function(){return this.x*this.x+this.y*this.y+this.z*this.z+this.w*this.w},length:function(){return Math.sqrt(this.x*this.x+this.y*this.y+this.z*this.z+this.w*this.w)},manhattanLength:function(){return Math.abs(this.x)+ +Math.abs(this.y)+Math.abs(this.z)+Math.abs(this.w)},normalize:function(){return this.divideScalar(this.length()||1)},setLength:function(a){return this.normalize().multiplyScalar(a)},lerp:function(a,b){this.x+=(a.x-this.x)*b;this.y+=(a.y-this.y)*b;this.z+=(a.z-this.z)*b;this.w+=(a.w-this.w)*b;return this},lerpVectors:function(a,b,c){return this.subVectors(b,a).multiplyScalar(c).add(a)},equals:function(a){return a.x===this.x&&a.y===this.y&&a.z===this.z&&a.w===this.w},fromArray:function(a,b){void 0=== +b&&(b=0);this.x=a[b];this.y=a[b+1];this.z=a[b+2];this.w=a[b+3];return this},toArray:function(a,b){void 0===a&&(a=[]);void 0===b&&(b=0);a[b]=this.x;a[b+1]=this.y;a[b+2]=this.z;a[b+3]=this.w;return a},fromBufferAttribute:function(a,b,c){void 0!==c&&console.warn("THREE.Vector4: offset has been removed from .fromBufferAttribute().");this.x=a.getX(b);this.y=a.getY(b);this.z=a.getZ(b);this.w=a.getW(b);return this},random:function(){this.x=Math.random();this.y=Math.random();this.z=Math.random();this.w=Math.random(); +return this}});za.prototype=Object.assign(Object.create(ua.prototype),{constructor:za,isWebGLRenderTarget:!0,setSize:function(a,b){if(this.width!==a||this.height!==b)this.width=a,this.height=b,this.texture.image.width=a,this.texture.image.height=b,this.dispose();this.viewport.set(0,0,a,b);this.scissor.set(0,0,a,b)},clone:function(){return(new this.constructor).copy(this)},copy:function(a){this.width=a.width;this.height=a.height;this.viewport.copy(a.viewport);this.texture=a.texture.clone();this.depthBuffer= +a.depthBuffer;this.stencilBuffer=a.stencilBuffer;this.depthTexture=a.depthTexture;return this},dispose:function(){this.dispatchEvent({type:"dispose"})}});Xf.prototype=Object.assign(Object.create(za.prototype),{constructor:Xf,isWebGLMultisampleRenderTarget:!0,copy:function(a){za.prototype.copy.call(this,a);this.samples=a.samples;return this}});Object.assign(la,{slerp:function(a,b,c,d){return c.copy(a).slerp(b,d)},slerpFlat:function(a,b,c,d,e,f,g){var h=c[d+0],k=c[d+1],m=c[d+2];c=c[d+3];d=e[f+0];var l= +e[f+1],p=e[f+2];e=e[f+3];if(c!==e||h!==d||k!==l||m!==p){f=1-g;var n=h*d+k*l+m*p+c*e,r=0<=n?1:-1,q=1-n*n;q>Number.EPSILON&&(q=Math.sqrt(q),n=Math.atan2(q,n*r),f=Math.sin(f*n)/q,g=Math.sin(g*n)/q);r*=g;h=h*f+d*r;k=k*f+l*r;m=m*f+p*r;c=c*f+e*r;f===1-g&&(g=1/Math.sqrt(h*h+k*k+m*m+c*c),h*=g,k*=g,m*=g,c*=g)}a[b]=h;a[b+1]=k;a[b+2]=m;a[b+3]=c},multiplyQuaternionsFlat:function(a,b,c,d,e,f){var g=c[d],h=c[d+1],k=c[d+2];c=c[d+3];d=e[f];var m=e[f+1],l=e[f+2];e=e[f+3];a[b]=g*e+c*d+h*l-k*m;a[b+1]=h*e+c*m+k*d-g* +l;a[b+2]=k*e+c*l+g*m-h*d;a[b+3]=c*e-g*d-h*m-k*l;return a}});Object.defineProperties(la.prototype,{x:{get:function(){return this._x},set:function(a){this._x=a;this._onChangeCallback()}},y:{get:function(){return this._y},set:function(a){this._y=a;this._onChangeCallback()}},z:{get:function(){return this._z},set:function(a){this._z=a;this._onChangeCallback()}},w:{get:function(){return this._w},set:function(a){this._w=a;this._onChangeCallback()}}});Object.assign(la.prototype,{isQuaternion:!0,set:function(a, +b,c,d){this._x=a;this._y=b;this._z=c;this._w=d;this._onChangeCallback();return this},clone:function(){return new this.constructor(this._x,this._y,this._z,this._w)},copy:function(a){this._x=a.x;this._y=a.y;this._z=a.z;this._w=a.w;this._onChangeCallback();return this},setFromEuler:function(a,b){if(!a||!a.isEuler)throw Error("THREE.Quaternion: .setFromEuler() now expects an Euler rotation rather than a Vector3 and order.");var c=a._x,d=a._y,e=a._z;a=a.order;var f=Math.cos,g=Math.sin,h=f(c/2),k=f(d/2); +f=f(e/2);c=g(c/2);d=g(d/2);e=g(e/2);switch(a){case "XYZ":this._x=c*k*f+h*d*e;this._y=h*d*f-c*k*e;this._z=h*k*e+c*d*f;this._w=h*k*f-c*d*e;break;case "YXZ":this._x=c*k*f+h*d*e;this._y=h*d*f-c*k*e;this._z=h*k*e-c*d*f;this._w=h*k*f+c*d*e;break;case "ZXY":this._x=c*k*f-h*d*e;this._y=h*d*f+c*k*e;this._z=h*k*e+c*d*f;this._w=h*k*f-c*d*e;break;case "ZYX":this._x=c*k*f-h*d*e;this._y=h*d*f+c*k*e;this._z=h*k*e-c*d*f;this._w=h*k*f+c*d*e;break;case "YZX":this._x=c*k*f+h*d*e;this._y=h*d*f+c*k*e;this._z=h*k*e-c* +d*f;this._w=h*k*f-c*d*e;break;case "XZY":this._x=c*k*f-h*d*e;this._y=h*d*f-c*k*e;this._z=h*k*e+c*d*f;this._w=h*k*f+c*d*e;break;default:console.warn("THREE.Quaternion: .setFromEuler() encountered an unknown order: "+a)}!1!==b&&this._onChangeCallback();return this},setFromAxisAngle:function(a,b){b/=2;var c=Math.sin(b);this._x=a.x*c;this._y=a.y*c;this._z=a.z*c;this._w=Math.cos(b);this._onChangeCallback();return this},setFromRotationMatrix:function(a){var b=a.elements,c=b[0];a=b[4];var d=b[8],e=b[1], +f=b[5],g=b[9],h=b[2],k=b[6];b=b[10];var m=c+f+b;0f&&c>b?(c=2*Math.sqrt(1+c-f-b),this._w=(k-g)/c,this._x=.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=.25*c,this._z=(g+k)/c):(c=2*Math.sqrt(1+b-c-f),this._w=(e-a)/c,this._x=(d+h)/c,this._y=(g+k)/c,this._z=.25*c);this._onChangeCallback();return this},setFromUnitVectors:function(a,b){var c=a.dot(b)+1;1E-6> +c?(c=0,Math.abs(a.x)>Math.abs(a.z)?(this._x=-a.y,this._y=a.x,this._z=0):(this._x=0,this._y=-a.z,this._z=a.y)):(this._x=a.y*b.z-a.z*b.y,this._y=a.z*b.x-a.x*b.z,this._z=a.x*b.y-a.y*b.x);this._w=c;return this.normalize()},angleTo:function(a){return 2*Math.acos(Math.abs(M.clamp(this.dot(a),-1,1)))},rotateTowards:function(a,b){var c=this.angleTo(a);if(0===c)return this;this.slerp(a,Math.min(1,b/c));return this},inverse:function(){return this.conjugate()},conjugate:function(){this._x*=-1;this._y*=-1;this._z*= +-1;this._onChangeCallback();return this},dot:function(a){return this._x*a._x+this._y*a._y+this._z*a._z+this._w*a._w},lengthSq:function(){return this._x*this._x+this._y*this._y+this._z*this._z+this._w*this._w},length:function(){return Math.sqrt(this._x*this._x+this._y*this._y+this._z*this._z+this._w*this._w)},normalize:function(){var a=this.length();0===a?(this._z=this._y=this._x=0,this._w=1):(a=1/a,this._x*=a,this._y*=a,this._z*=a,this._w*=a);this._onChangeCallback();return this},multiply:function(a, +b){return void 0!==b?(console.warn("THREE.Quaternion: .multiply() now only accepts one argument. Use .multiplyQuaternions( a, b ) instead."),this.multiplyQuaternions(a,b)):this.multiplyQuaternions(this,a)},premultiply:function(a){return this.multiplyQuaternions(a,this)},multiplyQuaternions:function(a,b){var c=a._x,d=a._y,e=a._z;a=a._w;var f=b._x,g=b._y,h=b._z;b=b._w;this._x=c*b+a*f+d*h-e*g;this._y=d*b+a*g+e*f-c*h;this._z=e*b+a*h+c*g-d*f;this._w=a*b-c*f-d*g-e*h;this._onChangeCallback();return this}, +slerp:function(a,b){if(0===b)return this;if(1===b)return this.copy(a);var c=this._x,d=this._y,e=this._z,f=this._w,g=f*a._w+c*a._x+d*a._y+e*a._z;0>g?(this._w=-a._w,this._x=-a._x,this._y=-a._y,this._z=-a._z,g=-g):this.copy(a);if(1<=g)return this._w=f,this._x=c,this._y=d,this._z=e,this;a=1-g*g;if(a<=Number.EPSILON)return g=1-b,this._w=g*f+b*this._w,this._x=g*c+b*this._x,this._y=g*d+b*this._y,this._z=g*e+b*this._z,this.normalize(),this._onChangeCallback(),this;a=Math.sqrt(a);var h=Math.atan2(a,g);g=Math.sin((1- +b)*h)/a;b=Math.sin(b*h)/a;this._w=f*g+this._w*b;this._x=c*g+this._x*b;this._y=d*g+this._y*b;this._z=e*g+this._z*b;this._onChangeCallback();return this},equals:function(a){return a._x===this._x&&a._y===this._y&&a._z===this._z&&a._w===this._w},fromArray:function(a,b){void 0===b&&(b=0);this._x=a[b];this._y=a[b+1];this._z=a[b+2];this._w=a[b+3];this._onChangeCallback();return this},toArray:function(a,b){void 0===a&&(a=[]);void 0===b&&(b=0);a[b]=this._x;a[b+1]=this._y;a[b+2]=this._z;a[b+3]=this._w;return a}, +fromBufferAttribute:function(a,b){this._x=a.getX(b);this._y=a.getY(b);this._z=a.getZ(b);this._w=a.getW(b);return this},_onChange:function(a){this._onChangeCallback=a;return this},_onChangeCallback:function(){}});var Wg=new n,wi=new la;Object.assign(n.prototype,{isVector3:!0,set:function(a,b,c){this.x=a;this.y=b;this.z=c;return this},setScalar:function(a){this.z=this.y=this.x=a;return this},setX:function(a){this.x=a;return this},setY:function(a){this.y=a;return this},setZ:function(a){this.z=a;return this}, +setComponent:function(a,b){switch(a){case 0:this.x=b;break;case 1:this.y=b;break;case 2:this.z=b;break;default:throw Error("index is out of range: "+a);}return this},getComponent:function(a){switch(a){case 0:return this.x;case 1:return this.y;case 2:return this.z;default:throw Error("index is out of range: "+a);}},clone:function(){return new this.constructor(this.x,this.y,this.z)},copy:function(a){this.x=a.x;this.y=a.y;this.z=a.z;return this},add:function(a,b){if(void 0!==b)return console.warn("THREE.Vector3: .add() now only accepts one argument. Use .addVectors( a, b ) instead."), +this.addVectors(a,b);this.x+=a.x;this.y+=a.y;this.z+=a.z;return this},addScalar:function(a){this.x+=a;this.y+=a;this.z+=a;return this},addVectors:function(a,b){this.x=a.x+b.x;this.y=a.y+b.y;this.z=a.z+b.z;return this},addScaledVector:function(a,b){this.x+=a.x*b;this.y+=a.y*b;this.z+=a.z*b;return this},sub:function(a,b){if(void 0!==b)return console.warn("THREE.Vector3: .sub() now only accepts one argument. Use .subVectors( a, b ) instead."),this.subVectors(a,b);this.x-=a.x;this.y-=a.y;this.z-=a.z; +return this},subScalar:function(a){this.x-=a;this.y-=a;this.z-=a;return this},subVectors:function(a,b){this.x=a.x-b.x;this.y=a.y-b.y;this.z=a.z-b.z;return this},multiply:function(a,b){if(void 0!==b)return console.warn("THREE.Vector3: .multiply() now only accepts one argument. Use .multiplyVectors( a, b ) instead."),this.multiplyVectors(a,b);this.x*=a.x;this.y*=a.y;this.z*=a.z;return this},multiplyScalar:function(a){this.x*=a;this.y*=a;this.z*=a;return this},multiplyVectors:function(a,b){this.x=a.x* +b.x;this.y=a.y*b.y;this.z=a.z*b.z;return this},applyEuler:function(a){a&&a.isEuler||console.error("THREE.Vector3: .applyEuler() now expects an Euler rotation rather than a Vector3 and order.");return this.applyQuaternion(wi.setFromEuler(a))},applyAxisAngle:function(a,b){return this.applyQuaternion(wi.setFromAxisAngle(a,b))},applyMatrix3:function(a){var b=this.x,c=this.y,d=this.z;a=a.elements;this.x=a[0]*b+a[3]*c+a[6]*d;this.y=a[1]*b+a[4]*c+a[7]*d;this.z=a[2]*b+a[5]*c+a[8]*d;return this},applyNormalMatrix:function(a){return this.applyMatrix3(a).normalize()}, +applyMatrix4:function(a){var b=this.x,c=this.y,d=this.z;a=a.elements;var e=1/(a[3]*b+a[7]*c+a[11]*d+a[15]);this.x=(a[0]*b+a[4]*c+a[8]*d+a[12])*e;this.y=(a[1]*b+a[5]*c+a[9]*d+a[13])*e;this.z=(a[2]*b+a[6]*c+a[10]*d+a[14])*e;return this},applyQuaternion:function(a){var b=this.x,c=this.y,d=this.z,e=a.x,f=a.y,g=a.z;a=a.w;var h=a*b+f*d-g*c,k=a*c+g*b-e*d,m=a*d+e*c-f*b;b=-e*b-f*c-g*d;this.x=h*a+b*-e+k*-g-m*-f;this.y=k*a+b*-f+m*-e-h*-g;this.z=m*a+b*-g+h*-f-k*-e;return this},project:function(a){return this.applyMatrix4(a.matrixWorldInverse).applyMatrix4(a.projectionMatrix)}, +unproject:function(a){return this.applyMatrix4(a.projectionMatrixInverse).applyMatrix4(a.matrixWorld)},transformDirection:function(a){var b=this.x,c=this.y,d=this.z;a=a.elements;this.x=a[0]*b+a[4]*c+a[8]*d;this.y=a[1]*b+a[5]*c+a[9]*d;this.z=a[2]*b+a[6]*c+a[10]*d;return this.normalize()},divide:function(a){this.x/=a.x;this.y/=a.y;this.z/=a.z;return this},divideScalar:function(a){return this.multiplyScalar(1/a)},min:function(a){this.x=Math.min(this.x,a.x);this.y=Math.min(this.y,a.y);this.z=Math.min(this.z, +a.z);return this},max:function(a){this.x=Math.max(this.x,a.x);this.y=Math.max(this.y,a.y);this.z=Math.max(this.z,a.z);return this},clamp:function(a,b){this.x=Math.max(a.x,Math.min(b.x,this.x));this.y=Math.max(a.y,Math.min(b.y,this.y));this.z=Math.max(a.z,Math.min(b.z,this.z));return this},clampScalar:function(a,b){this.x=Math.max(a,Math.min(b,this.x));this.y=Math.max(a,Math.min(b,this.y));this.z=Math.max(a,Math.min(b,this.z));return this},clampLength:function(a,b){var c=this.length();return this.divideScalar(c|| +1).multiplyScalar(Math.max(a,Math.min(b,c)))},floor:function(){this.x=Math.floor(this.x);this.y=Math.floor(this.y);this.z=Math.floor(this.z);return this},ceil:function(){this.x=Math.ceil(this.x);this.y=Math.ceil(this.y);this.z=Math.ceil(this.z);return this},round:function(){this.x=Math.round(this.x);this.y=Math.round(this.y);this.z=Math.round(this.z);return this},roundToZero:function(){this.x=0>this.x?Math.ceil(this.x):Math.floor(this.x);this.y=0>this.y?Math.ceil(this.y):Math.floor(this.y);this.z= +0>this.z?Math.ceil(this.z):Math.floor(this.z);return this},negate:function(){this.x=-this.x;this.y=-this.y;this.z=-this.z;return this},dot:function(a){return this.x*a.x+this.y*a.y+this.z*a.z},lengthSq:function(){return this.x*this.x+this.y*this.y+this.z*this.z},length:function(){return Math.sqrt(this.x*this.x+this.y*this.y+this.z*this.z)},manhattanLength:function(){return Math.abs(this.x)+Math.abs(this.y)+Math.abs(this.z)},normalize:function(){return this.divideScalar(this.length()||1)},setLength:function(a){return this.normalize().multiplyScalar(a)}, +lerp:function(a,b){this.x+=(a.x-this.x)*b;this.y+=(a.y-this.y)*b;this.z+=(a.z-this.z)*b;return this},lerpVectors:function(a,b,c){return this.subVectors(b,a).multiplyScalar(c).add(a)},cross:function(a,b){return void 0!==b?(console.warn("THREE.Vector3: .cross() now only accepts one argument. Use .crossVectors( a, b ) instead."),this.crossVectors(a,b)):this.crossVectors(this,a)},crossVectors:function(a,b){var c=a.x,d=a.y;a=a.z;var e=b.x,f=b.y;b=b.z;this.x=d*b-a*f;this.y=a*e-c*b;this.z=c*f-d*e;return this}, +projectOnVector:function(a){var b=a.lengthSq();if(0===b)return this.set(0,0,0);b=a.dot(this)/b;return this.copy(a).multiplyScalar(b)},projectOnPlane:function(a){Wg.copy(this).projectOnVector(a);return this.sub(Wg)},reflect:function(a){return this.sub(Wg.copy(a).multiplyScalar(2*this.dot(a)))},angleTo:function(a){var b=Math.sqrt(this.lengthSq()*a.lengthSq());if(0===b)return Math.PI/2;a=this.dot(a)/b;return Math.acos(M.clamp(a,-1,1))},distanceTo:function(a){return Math.sqrt(this.distanceToSquared(a))}, +distanceToSquared:function(a){var b=this.x-a.x,c=this.y-a.y;a=this.z-a.z;return b*b+c*c+a*a},manhattanDistanceTo:function(a){return Math.abs(this.x-a.x)+Math.abs(this.y-a.y)+Math.abs(this.z-a.z)},setFromSpherical:function(a){return this.setFromSphericalCoords(a.radius,a.phi,a.theta)},setFromSphericalCoords:function(a,b,c){var d=Math.sin(b)*a;this.x=d*Math.sin(c);this.y=Math.cos(b)*a;this.z=d*Math.cos(c);return this},setFromCylindrical:function(a){return this.setFromCylindricalCoords(a.radius,a.theta, +a.y)},setFromCylindricalCoords:function(a,b,c){this.x=a*Math.sin(b);this.y=c;this.z=a*Math.cos(b);return this},setFromMatrixPosition:function(a){a=a.elements;this.x=a[12];this.y=a[13];this.z=a[14];return this},setFromMatrixScale:function(a){var b=this.setFromMatrixColumn(a,0).length(),c=this.setFromMatrixColumn(a,1).length();a=this.setFromMatrixColumn(a,2).length();this.x=b;this.y=c;this.z=a;return this},setFromMatrixColumn:function(a,b){return this.fromArray(a.elements,4*b)},setFromMatrix3Column:function(a, +b){return this.fromArray(a.elements,3*b)},equals:function(a){return a.x===this.x&&a.y===this.y&&a.z===this.z},fromArray:function(a,b){void 0===b&&(b=0);this.x=a[b];this.y=a[b+1];this.z=a[b+2];return this},toArray:function(a,b){void 0===a&&(a=[]);void 0===b&&(b=0);a[b]=this.x;a[b+1]=this.y;a[b+2]=this.z;return a},fromBufferAttribute:function(a,b,c){void 0!==c&&console.warn("THREE.Vector3: offset has been removed from .fromBufferAttribute().");this.x=a.getX(b);this.y=a.getY(b);this.z=a.getZ(b);return this}, +random:function(){this.x=Math.random();this.y=Math.random();this.z=Math.random();return this}});var ld=new n,aa=new P,Jk=new n(0,0,0),Kk=new n(1,1,1),Pb=new n,zf=new n,Ca=new n;Object.assign(P.prototype,{isMatrix4:!0,set:function(a,b,c,d,e,f,g,h,k,m,l,p,n,r,q,t){var z=this.elements;z[0]=a;z[4]=b;z[8]=c;z[12]=d;z[1]=e;z[5]=f;z[9]=g;z[13]=h;z[2]=k;z[6]=m;z[10]=l;z[14]=p;z[3]=n;z[7]=r;z[11]=q;z[15]=t;return this},identity:function(){this.set(1,0,0,0,0,1,0,0,0,0,1,0,0,0,0,1);return this},clone:function(){return(new P).fromArray(this.elements)}, +copy:function(a){var b=this.elements;a=a.elements;b[0]=a[0];b[1]=a[1];b[2]=a[2];b[3]=a[3];b[4]=a[4];b[5]=a[5];b[6]=a[6];b[7]=a[7];b[8]=a[8];b[9]=a[9];b[10]=a[10];b[11]=a[11];b[12]=a[12];b[13]=a[13];b[14]=a[14];b[15]=a[15];return this},copyPosition:function(a){var b=this.elements;a=a.elements;b[12]=a[12];b[13]=a[13];b[14]=a[14];return this},extractBasis:function(a,b,c){a.setFromMatrixColumn(this,0);b.setFromMatrixColumn(this,1);c.setFromMatrixColumn(this,2);return this},makeBasis:function(a,b,c){this.set(a.x, +b.x,c.x,0,a.y,b.y,c.y,0,a.z,b.z,c.z,0,0,0,0,1);return this},extractRotation:function(a){var b=this.elements,c=a.elements,d=1/ld.setFromMatrixColumn(a,0).length(),e=1/ld.setFromMatrixColumn(a,1).length();a=1/ld.setFromMatrixColumn(a,2).length();b[0]=c[0]*d;b[1]=c[1]*d;b[2]=c[2]*d;b[3]=0;b[4]=c[4]*e;b[5]=c[5]*e;b[6]=c[6]*e;b[7]=0;b[8]=c[8]*a;b[9]=c[9]*a;b[10]=c[10]*a;b[11]=0;b[12]=0;b[13]=0;b[14]=0;b[15]=1;return this},makeRotationFromEuler:function(a){a&&a.isEuler||console.error("THREE.Matrix4: .makeRotationFromEuler() now expects a Euler rotation rather than a Vector3 and order."); +var b=this.elements,c=a.x,d=a.y,e=a.z,f=Math.cos(c);c=Math.sin(c);var g=Math.cos(d);d=Math.sin(d);var h=Math.cos(e);e=Math.sin(e);if("XYZ"===a.order){a=f*h;var k=f*e,m=c*h,l=c*e;b[0]=g*h;b[4]=-g*e;b[8]=d;b[1]=k+m*d;b[5]=a-l*d;b[9]=-c*g;b[2]=l-a*d;b[6]=m+k*d;b[10]=f*g}else"YXZ"===a.order?(a=g*h,k=g*e,m=d*h,l=d*e,b[0]=a+l*c,b[4]=m*c-k,b[8]=f*d,b[1]=f*e,b[5]=f*h,b[9]=-c,b[2]=k*c-m,b[6]=l+a*c,b[10]=f*g):"ZXY"===a.order?(a=g*h,k=g*e,m=d*h,l=d*e,b[0]=a-l*c,b[4]=-f*e,b[8]=m+k*c,b[1]=k+m*c,b[5]=f*h,b[9]= +l-a*c,b[2]=-f*d,b[6]=c,b[10]=f*g):"ZYX"===a.order?(a=f*h,k=f*e,m=c*h,l=c*e,b[0]=g*h,b[4]=m*d-k,b[8]=a*d+l,b[1]=g*e,b[5]=l*d+a,b[9]=k*d-m,b[2]=-d,b[6]=c*g,b[10]=f*g):"YZX"===a.order?(a=f*g,k=f*d,m=c*g,l=c*d,b[0]=g*h,b[4]=l-a*e,b[8]=m*e+k,b[1]=e,b[5]=f*h,b[9]=-c*h,b[2]=-d*h,b[6]=k*e+m,b[10]=a-l*e):"XZY"===a.order&&(a=f*g,k=f*d,m=c*g,l=c*d,b[0]=g*h,b[4]=-e,b[8]=d*h,b[1]=a*e+l,b[5]=f*h,b[9]=k*e-m,b[2]=m*e-k,b[6]=c*h,b[10]=l*e+a);b[3]=0;b[7]=0;b[11]=0;b[12]=0;b[13]=0;b[14]=0;b[15]=1;return this},makeRotationFromQuaternion:function(a){return this.compose(Jk, +a,Kk)},lookAt:function(a,b,c){var d=this.elements;Ca.subVectors(a,b);0===Ca.lengthSq()&&(Ca.z=1);Ca.normalize();Pb.crossVectors(c,Ca);0===Pb.lengthSq()&&(1===Math.abs(c.z)?Ca.x+=1E-4:Ca.z+=1E-4,Ca.normalize(),Pb.crossVectors(c,Ca));Pb.normalize();zf.crossVectors(Ca,Pb);d[0]=Pb.x;d[4]=zf.x;d[8]=Ca.x;d[1]=Pb.y;d[5]=zf.y;d[9]=Ca.y;d[2]=Pb.z;d[6]=zf.z;d[10]=Ca.z;return this},multiply:function(a,b){return void 0!==b?(console.warn("THREE.Matrix4: .multiply() now only accepts one argument. Use .multiplyMatrices( a, b ) instead."), +this.multiplyMatrices(a,b)):this.multiplyMatrices(this,a)},premultiply:function(a){return this.multiplyMatrices(a,this)},multiplyMatrices:function(a,b){var c=a.elements,d=b.elements;b=this.elements;a=c[0];var e=c[4],f=c[8],g=c[12],h=c[1],k=c[5],m=c[9],l=c[13],p=c[2],n=c[6],r=c[10],q=c[14],t=c[3],v=c[7],x=c[11];c=c[15];var w=d[0],A=d[4],B=d[8],Z=d[12],C=d[1],y=d[5],D=d[9],E=d[13],G=d[2],I=d[6],J=d[10],L=d[14],M=d[3],N=d[7],O=d[11];d=d[15];b[0]=a*w+e*C+f*G+g*M;b[4]=a*A+e*y+f*I+g*N;b[8]=a*B+e*D+f*J+ +g*O;b[12]=a*Z+e*E+f*L+g*d;b[1]=h*w+k*C+m*G+l*M;b[5]=h*A+k*y+m*I+l*N;b[9]=h*B+k*D+m*J+l*O;b[13]=h*Z+k*E+m*L+l*d;b[2]=p*w+n*C+r*G+q*M;b[6]=p*A+n*y+r*I+q*N;b[10]=p*B+n*D+r*J+q*O;b[14]=p*Z+n*E+r*L+q*d;b[3]=t*w+v*C+x*G+c*M;b[7]=t*A+v*y+x*I+c*N;b[11]=t*B+v*D+x*J+c*O;b[15]=t*Z+v*E+x*L+c*d;return this},multiplyScalar:function(a){var b=this.elements;b[0]*=a;b[4]*=a;b[8]*=a;b[12]*=a;b[1]*=a;b[5]*=a;b[9]*=a;b[13]*=a;b[2]*=a;b[6]*=a;b[10]*=a;b[14]*=a;b[3]*=a;b[7]*=a;b[11]*=a;b[15]*=a;return this},determinant:function(){var a= +this.elements,b=a[0],c=a[4],d=a[8],e=a[12],f=a[1],g=a[5],h=a[9],k=a[13],m=a[2],l=a[6],p=a[10],n=a[14];return a[3]*(+e*h*l-d*k*l-e*g*p+c*k*p+d*g*n-c*h*n)+a[7]*(+b*h*n-b*k*p+e*f*p-d*f*n+d*k*m-e*h*m)+a[11]*(+b*k*l-b*g*n-e*f*l+c*f*n+e*g*m-c*k*m)+a[15]*(-d*g*m-b*h*l+b*g*p+d*f*l-c*f*p+c*h*m)},transpose:function(){var a=this.elements;var b=a[1];a[1]=a[4];a[4]=b;b=a[2];a[2]=a[8];a[8]=b;b=a[6];a[6]=a[9];a[9]=b;b=a[3];a[3]=a[12];a[12]=b;b=a[7];a[7]=a[13];a[13]=b;b=a[11];a[11]=a[14];a[14]=b;return this},setPosition:function(a, +b,c){var d=this.elements;a.isVector3?(d[12]=a.x,d[13]=a.y,d[14]=a.z):(d[12]=a,d[13]=b,d[14]=c);return this},getInverse:function(a,b){void 0!==b&&console.warn("THREE.Matrix4: .getInverse() can no longer be configured to throw on degenerate.");b=this.elements;var c=a.elements;a=c[0];var d=c[1],e=c[2],f=c[3],g=c[4],h=c[5],k=c[6],m=c[7],l=c[8],p=c[9],n=c[10],r=c[11],q=c[12],t=c[13],v=c[14];c=c[15];var x=p*v*m-t*n*m+t*k*r-h*v*r-p*k*c+h*n*c,w=q*n*m-l*v*m-q*k*r+g*v*r+l*k*c-g*n*c,A=l*t*m-q*p*m+q*h*r-g*t* +r-l*h*c+g*p*c,B=q*p*k-l*t*k-q*h*n+g*t*n+l*h*v-g*p*v,y=a*x+d*w+e*A+f*B;if(0===y)return this.set(0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0);y=1/y;b[0]=x*y;b[1]=(t*n*f-p*v*f-t*e*r+d*v*r+p*e*c-d*n*c)*y;b[2]=(h*v*f-t*k*f+t*e*m-d*v*m-h*e*c+d*k*c)*y;b[3]=(p*k*f-h*n*f-p*e*m+d*n*m+h*e*r-d*k*r)*y;b[4]=w*y;b[5]=(l*v*f-q*n*f+q*e*r-a*v*r-l*e*c+a*n*c)*y;b[6]=(q*k*f-g*v*f-q*e*m+a*v*m+g*e*c-a*k*c)*y;b[7]=(g*n*f-l*k*f+l*e*m-a*n*m-g*e*r+a*k*r)*y;b[8]=A*y;b[9]=(q*p*f-l*t*f-q*d*r+a*t*r+l*d*c-a*p*c)*y;b[10]=(g*t*f-q*h*f+q*d*m- +a*t*m-g*d*c+a*h*c)*y;b[11]=(l*h*f-g*p*f-l*d*m+a*p*m+g*d*r-a*h*r)*y;b[12]=B*y;b[13]=(l*t*e-q*p*e+q*d*n-a*t*n-l*d*v+a*p*v)*y;b[14]=(q*h*e-g*t*e-q*d*k+a*t*k+g*d*v-a*h*v)*y;b[15]=(g*p*e-l*h*e+l*d*k-a*p*k-g*d*n+a*h*n)*y;return this},scale:function(a){var b=this.elements,c=a.x,d=a.y;a=a.z;b[0]*=c;b[4]*=d;b[8]*=a;b[1]*=c;b[5]*=d;b[9]*=a;b[2]*=c;b[6]*=d;b[10]*=a;b[3]*=c;b[7]*=d;b[11]*=a;return this},getMaxScaleOnAxis:function(){var a=this.elements;return Math.sqrt(Math.max(a[0]*a[0]+a[1]*a[1]+a[2]*a[2],a[4]* +a[4]+a[5]*a[5]+a[6]*a[6],a[8]*a[8]+a[9]*a[9]+a[10]*a[10]))},makeTranslation:function(a,b,c){this.set(1,0,0,a,0,1,0,b,0,0,1,c,0,0,0,1);return this},makeRotationX:function(a){var b=Math.cos(a);a=Math.sin(a);this.set(1,0,0,0,0,b,-a,0,0,a,b,0,0,0,0,1);return this},makeRotationY:function(a){var b=Math.cos(a);a=Math.sin(a);this.set(b,0,a,0,0,1,0,0,-a,0,b,0,0,0,0,1);return this},makeRotationZ:function(a){var b=Math.cos(a);a=Math.sin(a);this.set(b,-a,0,0,a,b,0,0,0,0,1,0,0,0,0,1);return this},makeRotationAxis:function(a, +b){var c=Math.cos(b);b=Math.sin(b);var d=1-c,e=a.x,f=a.y;a=a.z;var g=d*e,h=d*f;this.set(g*e+c,g*f-b*a,g*a+b*f,0,g*f+b*a,h*f+c,h*a-b*e,0,g*a-b*f,h*a+b*e,d*a*a+c,0,0,0,0,1);return this},makeScale:function(a,b,c){this.set(a,0,0,0,0,b,0,0,0,0,c,0,0,0,0,1);return this},makeShear:function(a,b,c){this.set(1,b,c,0,a,1,c,0,a,b,1,0,0,0,0,1);return this},compose:function(a,b,c){var d=this.elements,e=b._x,f=b._y,g=b._z,h=b._w,k=e+e,m=f+f,l=g+g;b=e*k;var p=e*m;e*=l;var n=f*m;f*=l;g*=l;k*=h;m*=h;h*=l;l=c.x;var r= +c.y;c=c.z;d[0]=(1-(n+g))*l;d[1]=(p+h)*l;d[2]=(e-m)*l;d[3]=0;d[4]=(p-h)*r;d[5]=(1-(b+g))*r;d[6]=(f+k)*r;d[7]=0;d[8]=(e+m)*c;d[9]=(f-k)*c;d[10]=(1-(b+n))*c;d[11]=0;d[12]=a.x;d[13]=a.y;d[14]=a.z;d[15]=1;return this},decompose:function(a,b,c){var d=this.elements,e=ld.set(d[0],d[1],d[2]).length(),f=ld.set(d[4],d[5],d[6]).length(),g=ld.set(d[8],d[9],d[10]).length();0>this.determinant()&&(e=-e);a.x=d[12];a.y=d[13];a.z=d[14];aa.copy(this);a=1/e;d=1/f;var h=1/g;aa.elements[0]*=a;aa.elements[1]*=a;aa.elements[2]*= +a;aa.elements[4]*=d;aa.elements[5]*=d;aa.elements[6]*=d;aa.elements[8]*=h;aa.elements[9]*=h;aa.elements[10]*=h;b.setFromRotationMatrix(aa);c.x=e;c.y=f;c.z=g;return this},makePerspective:function(a,b,c,d,e,f){void 0===f&&console.warn("THREE.Matrix4: .makePerspective() has been redefined and has a new signature. Please check the docs.");var g=this.elements;g[0]=2*e/(b-a);g[4]=0;g[8]=(b+a)/(b-a);g[12]=0;g[1]=0;g[5]=2*e/(c-d);g[9]=(c+d)/(c-d);g[13]=0;g[2]=0;g[6]=0;g[10]=-(f+e)/(f-e);g[14]=-2*f*e/(f-e); +g[3]=0;g[7]=0;g[11]=-1;g[15]=0;return this},makeOrthographic:function(a,b,c,d,e,f){var g=this.elements,h=1/(b-a),k=1/(c-d),m=1/(f-e);g[0]=2*h;g[4]=0;g[8]=0;g[12]=-((b+a)*h);g[1]=0;g[5]=2*k;g[9]=0;g[13]=-((c+d)*k);g[2]=0;g[6]=0;g[10]=-2*m;g[14]=-((f+e)*m);g[3]=0;g[7]=0;g[11]=0;g[15]=1;return this},equals:function(a){var b=this.elements;a=a.elements;for(var c=0;16>c;c++)if(b[c]!==a[c])return!1;return!0},fromArray:function(a,b){void 0===b&&(b=0);for(var c=0;16>c;c++)this.elements[c]=a[c+b];return this}, +toArray:function(a,b){void 0===a&&(a=[]);void 0===b&&(b=0);var c=this.elements;a[b]=c[0];a[b+1]=c[1];a[b+2]=c[2];a[b+3]=c[3];a[b+4]=c[4];a[b+5]=c[5];a[b+6]=c[6];a[b+7]=c[7];a[b+8]=c[8];a[b+9]=c[9];a[b+10]=c[10];a[b+11]=c[11];a[b+12]=c[12];a[b+13]=c[13];a[b+14]=c[14];a[b+15]=c[15];return a}});var xi=new P,yi=new la;Ub.RotationOrders="XYZ YZX ZXY XZY YXZ ZYX".split(" ");Ub.DefaultOrder="XYZ";Object.defineProperties(Ub.prototype,{x:{get:function(){return this._x},set:function(a){this._x=a;this._onChangeCallback()}}, +y:{get:function(){return this._y},set:function(a){this._y=a;this._onChangeCallback()}},z:{get:function(){return this._z},set:function(a){this._z=a;this._onChangeCallback()}},order:{get:function(){return this._order},set:function(a){this._order=a;this._onChangeCallback()}}});Object.assign(Ub.prototype,{isEuler:!0,set:function(a,b,c,d){this._x=a;this._y=b;this._z=c;this._order=d||this._order;this._onChangeCallback();return this},clone:function(){return new this.constructor(this._x,this._y,this._z,this._order)}, +copy:function(a){this._x=a._x;this._y=a._y;this._z=a._z;this._order=a._order;this._onChangeCallback();return this},setFromRotationMatrix:function(a,b,c){var d=M.clamp,e=a.elements;a=e[0];var f=e[4],g=e[8],h=e[1],k=e[5],m=e[9],l=e[2],p=e[6];e=e[10];b=b||this._order;switch(b){case "XYZ":this._y=Math.asin(d(g,-1,1));.9999999>Math.abs(g)?(this._x=Math.atan2(-m,e),this._z=Math.atan2(-f,a)):(this._x=Math.atan2(p,k),this._z=0);break;case "YXZ":this._x=Math.asin(-d(m,-1,1));.9999999>Math.abs(m)?(this._y= +Math.atan2(g,e),this._z=Math.atan2(h,k)):(this._y=Math.atan2(-l,a),this._z=0);break;case "ZXY":this._x=Math.asin(d(p,-1,1));.9999999>Math.abs(p)?(this._y=Math.atan2(-l,e),this._z=Math.atan2(-f,k)):(this._y=0,this._z=Math.atan2(h,a));break;case "ZYX":this._y=Math.asin(-d(l,-1,1));.9999999>Math.abs(l)?(this._x=Math.atan2(p,e),this._z=Math.atan2(h,a)):(this._x=0,this._z=Math.atan2(-f,k));break;case "YZX":this._z=Math.asin(d(h,-1,1));.9999999>Math.abs(h)?(this._x=Math.atan2(-m,k),this._y=Math.atan2(-l, +a)):(this._x=0,this._y=Math.atan2(g,e));break;case "XZY":this._z=Math.asin(-d(f,-1,1));.9999999>Math.abs(f)?(this._x=Math.atan2(p,k),this._y=Math.atan2(g,a)):(this._x=Math.atan2(-m,e),this._y=0);break;default:console.warn("THREE.Euler: .setFromRotationMatrix() encountered an unknown order: "+b)}this._order=b;!1!==c&&this._onChangeCallback();return this},setFromQuaternion:function(a,b,c){xi.makeRotationFromQuaternion(a);return this.setFromRotationMatrix(xi,b,c)},setFromVector3:function(a,b){return this.set(a.x, +a.y,a.z,b||this._order)},reorder:function(a){yi.setFromEuler(this);return this.setFromQuaternion(yi,a)},equals:function(a){return a._x===this._x&&a._y===this._y&&a._z===this._z&&a._order===this._order},fromArray:function(a){this._x=a[0];this._y=a[1];this._z=a[2];void 0!==a[3]&&(this._order=a[3]);this._onChangeCallback();return this},toArray:function(a,b){void 0===a&&(a=[]);void 0===b&&(b=0);a[b]=this._x;a[b+1]=this._y;a[b+2]=this._z;a[b+3]=this._order;return a},toVector3:function(a){return a?a.set(this._x, +this._y,this._z):new n(this._x,this._y,this._z)},_onChange:function(a){this._onChangeCallback=a;return this},_onChangeCallback:function(){}});Object.assign(Ce.prototype,{set:function(a){this.mask=1<e&&(e=m);l>f&&(f=l);p>g&&(g=p)}this.min.set(b,c,d);this.max.set(e,f,g);return this},setFromBufferAttribute:function(a){for(var b=Infinity,c=Infinity,d=Infinity,e=-Infinity,f=-Infinity,g=-Infinity,h=0,k=a.count;he&&(e=m);l>f&&(f=l);p>g&&(g=p)}this.min.set(b,c,d);this.max.set(e,f,g);return this},setFromPoints:function(a){this.makeEmpty();for(var b=0,c=a.length;bthis.max.x||a.ythis.max.y||a.zthis.max.z?!1:!0},containsBox:function(a){return this.min.x<=a.min.x&&a.max.x<=this.max.x&&this.min.y<=a.min.y&&a.max.y<=this.max.y&&this.min.z<=a.min.z&&a.max.z<=this.max.z},getParameter:function(a,b){void 0===b&&(console.warn("THREE.Box3: .getParameter() target is now required"),b=new n);return b.set((a.x-this.min.x)/(this.max.x-this.min.x),(a.y-this.min.y)/(this.max.y-this.min.y),(a.z-this.min.z)/(this.max.z-this.min.z))},intersectsBox:function(a){return a.max.xthis.max.x|| +a.max.ythis.max.y||a.max.zthis.max.z?!1:!0},intersectsSphere:function(a){this.clampPoint(a.center,te);return te.distanceToSquared(a.center)<=a.radius*a.radius},intersectsPlane:function(a){if(0=-a.constant},intersectsTriangle:function(a){if(this.isEmpty())return!1;this.getCenter(ue);Bf.subVectors(this.max,ue);nd.subVectors(a.a,ue);od.subVectors(a.b,ue);pd.subVectors(a.c,ue);Qb.subVectors(od,nd);Rb.subVectors(pd,od);pc.subVectors(nd,pd);a=[0,-Qb.z,Qb.y,0,-Rb.z,Rb.y,0,-pc.z,pc.y,Qb.z,0,-Qb.x,Rb.z,0,-Rb.x,pc.z,0,-pc.x,-Qb.y,Qb.x,0,-Rb.y,Rb.x,0,-pc.y,pc.x,0];if(!Yf(a,nd,od,pd,Bf))return!1; +a=[1,0,0,0,1,0,0,0,1];if(!Yf(a,nd,od,pd,Bf))return!1;Cf.crossVectors(Qb,Rb);a=[Cf.x,Cf.y,Cf.z];return Yf(a,nd,od,pd,Bf)},clampPoint:function(a,b){void 0===b&&(console.warn("THREE.Box3: .clampPoint() target is now required"),b=new n);return b.copy(a).clamp(this.min,this.max)},distanceToPoint:function(a){return te.copy(a).clamp(this.min,this.max).sub(a).length()},getBoundingSphere:function(a){void 0===a&&console.error("THREE.Box3: .getBoundingSphere() target is now required");this.getCenter(a.center); +a.radius=.5*this.getSize(te).length();return a},intersect:function(a){this.min.max(a.min);this.max.min(a.max);this.isEmpty()&&this.makeEmpty();return this},union:function(a){this.min.min(a.min);this.max.max(a.max);return this},applyMatrix4:function(a){if(this.isEmpty())return this;yb[0].set(this.min.x,this.min.y,this.min.z).applyMatrix4(a);yb[1].set(this.min.x,this.min.y,this.max.z).applyMatrix4(a);yb[2].set(this.min.x,this.max.y,this.min.z).applyMatrix4(a);yb[3].set(this.min.x,this.max.y,this.max.z).applyMatrix4(a); +yb[4].set(this.max.x,this.min.y,this.min.z).applyMatrix4(a);yb[5].set(this.max.x,this.min.y,this.max.z).applyMatrix4(a);yb[6].set(this.max.x,this.max.y,this.min.z).applyMatrix4(a);yb[7].set(this.max.x,this.max.y,this.max.z).applyMatrix4(a);this.setFromPoints(yb);return this},translate:function(a){this.min.add(a);this.max.add(a);return this},equals:function(a){return a.min.equals(this.min)&&a.max.equals(this.max)}});var Pk=new Sa;Object.assign(cb.prototype,{set:function(a,b){this.center.copy(a);this.radius= +b;return this},setFromPoints:function(a,b){var c=this.center;void 0!==b?c.copy(b):Pk.setFromPoints(a).getCenter(c);for(var d=b=0,e=a.length;dthis.radius},makeEmpty:function(){this.center.set(0,0,0);this.radius=-1;return this},containsPoint:function(a){return a.distanceToSquared(this.center)<= +this.radius*this.radius},distanceToPoint:function(a){return a.distanceTo(this.center)-this.radius},intersectsSphere:function(a){var b=this.radius+a.radius;return a.center.distanceToSquared(this.center)<=b*b},intersectsBox:function(a){return a.intersectsSphere(this)},intersectsPlane:function(a){return Math.abs(a.distanceToPoint(this.center))<=this.radius},clampPoint:function(a,b){var c=this.center.distanceToSquared(a);void 0===b&&(console.warn("THREE.Sphere: .clampPoint() target is now required"), +b=new n);b.copy(a);c>this.radius*this.radius&&(b.sub(this.center).normalize(),b.multiplyScalar(this.radius).add(this.center));return b},getBoundingBox:function(a){void 0===a&&(console.warn("THREE.Sphere: .getBoundingBox() target is now required"),a=new Sa);if(this.isEmpty())return a.makeEmpty(),a;a.set(this.center,this.center);a.expandByScalar(this.radius);return a},applyMatrix4:function(a){this.center.applyMatrix4(a);this.radius*=a.getMaxScaleOnAxis();return this},translate:function(a){this.center.add(a); +return this},equals:function(a){return a.center.equals(this.center)&&a.radius===this.radius}});var zb=new n,Yg=new n,Df=new n,Sb=new n,Zg=new n,Ef=new n,$g=new n;Object.assign(Wb.prototype,{set:function(a,b){this.origin.copy(a);this.direction.copy(b);return this},clone:function(){return(new this.constructor).copy(this)},copy:function(a){this.origin.copy(a.origin);this.direction.copy(a.direction);return this},at:function(a,b){void 0===b&&(console.warn("THREE.Ray: .at() target is now required"),b=new n); +return b.copy(this.direction).multiplyScalar(a).add(this.origin)},lookAt:function(a){this.direction.copy(a).sub(this.origin).normalize();return this},recast:function(a){this.origin.copy(this.at(a,zb));return this},closestPointToPoint:function(a,b){void 0===b&&(console.warn("THREE.Ray: .closestPointToPoint() target is now required"),b=new n);b.subVectors(a,this.origin);a=b.dot(this.direction);return 0>a?b.copy(this.origin):b.copy(this.direction).multiplyScalar(a).add(this.origin)},distanceToPoint:function(a){return Math.sqrt(this.distanceSqToPoint(a))}, +distanceSqToPoint:function(a){var b=zb.subVectors(a,this.origin).dot(this.direction);if(0>b)return this.origin.distanceToSquared(a);zb.copy(this.direction).multiplyScalar(b).add(this.origin);return zb.distanceToSquared(a)},distanceSqToSegment:function(a,b,c,d){Yg.copy(a).add(b).multiplyScalar(.5);Df.copy(b).sub(a).normalize();Sb.copy(this.origin).sub(Yg);var e=.5*a.distanceTo(b),f=-this.direction.dot(Df),g=Sb.dot(this.direction),h=-Sb.dot(Df),k=Sb.lengthSq(),m=Math.abs(1-f*f);if(0=-l?b<=l?(e=1/m,a*=e,b*=e,f=a*(a+f*b+2*g)+b*(f*a+b+2*h)+k):(b=e,a=Math.max(0,-(f*b+g)),f=-a*a+b*(b+2*h)+k):(b=-e,a=Math.max(0,-(f*b+g)),f=-a*a+b*(b+2*h)+k):b<=-l?(a=Math.max(0,-(-f*e+g)),b=0a)return null;a=Math.sqrt(a-d);d=c-a;c+=a;return 0>d&&0>c?null:0>d?this.at(c,b):this.at(d,b)},intersectsSphere:function(a){return this.distanceSqToPoint(a.center)<=a.radius*a.radius},distanceToPlane:function(a){var b=a.normal.dot(this.direction);if(0===b)return 0===a.distanceToPoint(this.origin)?0:null;a=-(this.origin.dot(a.normal)+ +a.constant)/b;return 0<=a?a:null},intersectPlane:function(a,b){a=this.distanceToPlane(a);return null===a?null:this.at(a,b)},intersectsPlane:function(a){var b=a.distanceToPoint(this.origin);return 0===b||0>a.normal.dot(this.direction)*b?!0:!1},intersectBox:function(a,b){var c=1/this.direction.x;var d=1/this.direction.y;var e=1/this.direction.z,f=this.origin;if(0<=c){var g=(a.min.x-f.x)*c;c*=a.max.x-f.x}else g=(a.max.x-f.x)*c,c*=a.min.x-f.x;if(0<=d){var h=(a.min.y-f.y)*d;d*=a.max.y-f.y}else h=(a.max.y- +f.y)*d,d*=a.min.y-f.y;if(g>d||h>c)return null;if(h>g||g!==g)g=h;if(da||h>c)return null;if(h>g||g!==g)g=h;if(ac?null:this.at(0<=g?g:c,b)},intersectsBox:function(a){return null!==this.intersectBox(a,zb)},intersectTriangle:function(a,b,c,d,e){Zg.subVectors(b,a);Ef.subVectors(c,a);$g.crossVectors(Zg,Ef);b=this.direction.dot($g);if(0b)d=-1,b=-b;else return null; +Sb.subVectors(this.origin,a);a=d*this.direction.dot(Ef.crossVectors(Sb,Ef));if(0>a)return null;c=d*this.direction.dot(Zg.cross(Sb));if(0>c||a+c>b)return null;a=-d*Sb.dot($g);return 0>a?null:this.at(a/b,e)},applyMatrix4:function(a){this.origin.applyMatrix4(a);this.direction.transformDirection(a);return this},equals:function(a){return a.origin.equals(this.origin)&&a.direction.equals(this.direction)}});var ah=new n,Qk=new n,Rk=new xa;Object.assign(Ta.prototype,{isPlane:!0,set:function(a,b){this.normal.copy(a); +this.constant=b;return this},setComponents:function(a,b,c,d){this.normal.set(a,b,c);this.constant=d;return this},setFromNormalAndCoplanarPoint:function(a,b){this.normal.copy(a);this.constant=-b.dot(this.normal);return this},setFromCoplanarPoints:function(a,b,c){b=ah.subVectors(c,b).cross(Qk.subVectors(a,b)).normalize();this.setFromNormalAndCoplanarPoint(b,a);return this},clone:function(){return(new this.constructor).copy(this)},copy:function(a){this.normal.copy(a.normal);this.constant=a.constant; +return this},normalize:function(){var a=1/this.normal.length();this.normal.multiplyScalar(a);this.constant*=a;return this},negate:function(){this.constant*=-1;this.normal.negate();return this},distanceToPoint:function(a){return this.normal.dot(a)+this.constant},distanceToSphere:function(a){return this.distanceToPoint(a.center)-a.radius},projectPoint:function(a,b){void 0===b&&(console.warn("THREE.Plane: .projectPoint() target is now required"),b=new n);return b.copy(this.normal).multiplyScalar(-this.distanceToPoint(a)).add(a)}, +intersectLine:function(a,b){void 0===b&&(console.warn("THREE.Plane: .intersectLine() target is now required"),b=new n);var c=a.delta(ah),d=this.normal.dot(c);if(0===d){if(0===this.distanceToPoint(a.start))return b.copy(a.start)}else if(d=-(a.start.dot(this.normal)+this.constant)/d,!(0>d||1b&&0a&&0=Bb.x+Bb.y},getUV:function(a,b,c,d,e,f,g,h){this.getBarycoord(a,b,c,d,Bb);h.set(0,0);h.addScaledVector(e,Bb.x);h.addScaledVector(f,Bb.y);h.addScaledVector(g,Bb.z);return h},isFrontFacing:function(a, +b,c,d){ab.subVectors(c,b);Ab.subVectors(a,b);return 0>ab.cross(Ab).dot(d)?!0:!1}});Object.assign(wa.prototype,{set:function(a,b,c){this.a.copy(a);this.b.copy(b);this.c.copy(c);return this},setFromPointsAndIndices:function(a,b,c,d){this.a.copy(a[b]);this.b.copy(a[c]);this.c.copy(a[d]);return this},clone:function(){return(new this.constructor).copy(this)},copy:function(a){this.a.copy(a.a);this.b.copy(a.b);this.c.copy(a.c);return this},getArea:function(){ab.subVectors(this.c,this.b);Ab.subVectors(this.a, +this.b);return.5*ab.cross(Ab).length()},getMidpoint:function(a){void 0===a&&(console.warn("THREE.Triangle: .getMidpoint() target is now required"),a=new n);return a.addVectors(this.a,this.b).add(this.c).multiplyScalar(1/3)},getNormal:function(a){return wa.getNormal(this.a,this.b,this.c,a)},getPlane:function(a){void 0===a&&(console.warn("THREE.Triangle: .getPlane() target is now required"),a=new Ta);return a.setFromCoplanarPoints(this.a,this.b,this.c)},getBarycoord:function(a,b){return wa.getBarycoord(a, +this.a,this.b,this.c,b)},getUV:function(a,b,c,d,e){return wa.getUV(a,this.a,this.b,this.c,b,c,d,e)},containsPoint:function(a){return wa.containsPoint(a,this.a,this.b,this.c)},isFrontFacing:function(a){return wa.isFrontFacing(this.a,this.b,this.c,a)},intersectsBox:function(a){return a.intersectsTriangle(this)},closestPointToPoint:function(a,b){void 0===b&&(console.warn("THREE.Triangle: .closestPointToPoint() target is now required"),b=new n);var c=this.a,d=this.b,e=this.c;qd.subVectors(d,c);rd.subVectors(e, +c);ch.subVectors(a,c);var f=qd.dot(ch),g=rd.dot(ch);if(0>=f&&0>=g)return b.copy(c);dh.subVectors(a,d);var h=qd.dot(dh),k=rd.dot(dh);if(0<=h&&k<=h)return b.copy(d);var m=f*k-h*g;if(0>=m&&0<=f&&0>=h)return d=f/(f-h),b.copy(c).addScaledVector(qd,d);eh.subVectors(a,e);a=qd.dot(eh);var l=rd.dot(eh);if(0<=l&&a<=l)return b.copy(e);f=a*g-f*l;if(0>=f&&0<=g&&0>=l)return m=g/(g-l),b.copy(c).addScaledVector(rd,m);g=h*l-a*k;if(0>=g&&0<=k-h&&0<=a-l)return Di.subVectors(e,d),m=(k-h)/(k-h+(a-l)),b.copy(d).addScaledVector(Di, +m);e=1/(g+f+m);d=f*e;m*=e;return b.copy(c).addScaledVector(qd,d).addScaledVector(rd,m)},equals:function(a){return a.a.equals(this.a)&&a.b.equals(this.b)&&a.c.equals(this.c)}});var Ei={aliceblue:15792383,antiquewhite:16444375,aqua:65535,aquamarine:8388564,azure:15794175,beige:16119260,bisque:16770244,black:0,blanchedalmond:16772045,blue:255,blueviolet:9055202,brown:10824234,burlywood:14596231,cadetblue:6266528,chartreuse:8388352,chocolate:13789470,coral:16744272,cornflowerblue:6591981,cornsilk:16775388, +crimson:14423100,cyan:65535,darkblue:139,darkcyan:35723,darkgoldenrod:12092939,darkgray:11119017,darkgreen:25600,darkgrey:11119017,darkkhaki:12433259,darkmagenta:9109643,darkolivegreen:5597999,darkorange:16747520,darkorchid:10040012,darkred:9109504,darksalmon:15308410,darkseagreen:9419919,darkslateblue:4734347,darkslategray:3100495,darkslategrey:3100495,darkturquoise:52945,darkviolet:9699539,deeppink:16716947,deepskyblue:49151,dimgray:6908265,dimgrey:6908265,dodgerblue:2003199,firebrick:11674146, +floralwhite:16775920,forestgreen:2263842,fuchsia:16711935,gainsboro:14474460,ghostwhite:16316671,gold:16766720,goldenrod:14329120,gray:8421504,green:32768,greenyellow:11403055,grey:8421504,honeydew:15794160,hotpink:16738740,indianred:13458524,indigo:4915330,ivory:16777200,khaki:15787660,lavender:15132410,lavenderblush:16773365,lawngreen:8190976,lemonchiffon:16775885,lightblue:11393254,lightcoral:15761536,lightcyan:14745599,lightgoldenrodyellow:16448210,lightgray:13882323,lightgreen:9498256,lightgrey:13882323, +lightpink:16758465,lightsalmon:16752762,lightseagreen:2142890,lightskyblue:8900346,lightslategray:7833753,lightslategrey:7833753,lightsteelblue:11584734,lightyellow:16777184,lime:65280,limegreen:3329330,linen:16445670,magenta:16711935,maroon:8388608,mediumaquamarine:6737322,mediumblue:205,mediumorchid:12211667,mediumpurple:9662683,mediumseagreen:3978097,mediumslateblue:8087790,mediumspringgreen:64154,mediumturquoise:4772300,mediumvioletred:13047173,midnightblue:1644912,mintcream:16121850,mistyrose:16770273, +moccasin:16770229,navajowhite:16768685,navy:128,oldlace:16643558,olive:8421376,olivedrab:7048739,orange:16753920,orangered:16729344,orchid:14315734,palegoldenrod:15657130,palegreen:10025880,paleturquoise:11529966,palevioletred:14381203,papayawhip:16773077,peachpuff:16767673,peru:13468991,pink:16761035,plum:14524637,powderblue:11591910,purple:8388736,rebeccapurple:6697881,red:16711680,rosybrown:12357519,royalblue:4286945,saddlebrown:9127187,salmon:16416882,sandybrown:16032864,seagreen:3050327,seashell:16774638, +sienna:10506797,silver:12632256,skyblue:8900331,slateblue:6970061,slategray:7372944,slategrey:7372944,snow:16775930,springgreen:65407,steelblue:4620980,tan:13808780,teal:32896,thistle:14204888,tomato:16737095,turquoise:4251856,violet:15631086,wheat:16113331,white:16777215,whitesmoke:16119285,yellow:16776960,yellowgreen:10145074},Da={h:0,s:0,l:0},Ff={h:0,s:0,l:0};Object.assign(A.prototype,{isColor:!0,r:1,g:1,b:1,set:function(a){a&&a.isColor?this.copy(a):"number"===typeof a?this.setHex(a):"string"=== +typeof a&&this.setStyle(a);return this},setScalar:function(a){this.b=this.g=this.r=a;return this},setHex:function(a){a=Math.floor(a);this.r=(a>>16&255)/255;this.g=(a>>8&255)/255;this.b=(a&255)/255;return this},setRGB:function(a,b,c){this.r=a;this.g=b;this.b=c;return this},setHSL:function(a,b,c){a=M.euclideanModulo(a,1);b=M.clamp(b,0,1);c=M.clamp(c,0,1);0===b?this.r=this.g=this.b=c:(b=.5>=c?c*(1+b):c+b-c*b,c=2*c-b,this.r=Zf(c,b,a+1/3),this.g=Zf(c,b,a),this.b=Zf(c,b,a-1/3));return this},setStyle:function(a){function b(b){void 0!== +b&&1>parseFloat(b)&&console.warn("THREE.Color: Alpha component of "+a+" will be ignored.")}var c;if(c=/^((?:rgb|hsl)a?)\(\s*([^\)]*)\)/.exec(a)){var d=c[2];switch(c[1]){case "rgb":case "rgba":if(c=/^(\d+)\s*,\s*(\d+)\s*,\s*(\d+)\s*(,\s*([0-9]*\.?[0-9]+)\s*)?$/.exec(d))return this.r=Math.min(255,parseInt(c[1],10))/255,this.g=Math.min(255,parseInt(c[2],10))/255,this.b=Math.min(255,parseInt(c[3],10))/255,b(c[5]),this;if(c=/^(\d+)%\s*,\s*(\d+)%\s*,\s*(\d+)%\s*(,\s*([0-9]*\.?[0-9]+)\s*)?$/.exec(d))return this.r= +Math.min(100,parseInt(c[1],10))/100,this.g=Math.min(100,parseInt(c[2],10))/100,this.b=Math.min(100,parseInt(c[3],10))/100,b(c[5]),this;break;case "hsl":case "hsla":if(c=/^([0-9]*\.?[0-9]+)\s*,\s*(\d+)%\s*,\s*(\d+)%\s*(,\s*([0-9]*\.?[0-9]+)\s*)?$/.exec(d)){d=parseFloat(c[1])/360;var e=parseInt(c[2],10)/100,f=parseInt(c[3],10)/100;b(c[5]);return this.setHSL(d,e,f)}}}else if(c=/^#([A-Fa-f0-9]+)$/.exec(a)){c=c[1];d=c.length;if(3===d)return this.r=parseInt(c.charAt(0)+c.charAt(0),16)/255,this.g=parseInt(c.charAt(1)+ +c.charAt(1),16)/255,this.b=parseInt(c.charAt(2)+c.charAt(2),16)/255,this;if(6===d)return this.r=parseInt(c.charAt(0)+c.charAt(1),16)/255,this.g=parseInt(c.charAt(2)+c.charAt(3),16)/255,this.b=parseInt(c.charAt(4)+c.charAt(5),16)/255,this}return a&&0=h?k/(e+f):k/(2-e-f);switch(e){case b:g=(c-d)/k+(cthis.opacity&&(d.opacity=this.opacity);!0===this.transparent&&(d.transparent=this.transparent);d.depthFunc=this.depthFunc;d.depthTest=this.depthTest;d.depthWrite=this.depthWrite;d.stencilWrite=this.stencilWrite;d.stencilWriteMask=this.stencilWriteMask; +d.stencilFunc=this.stencilFunc;d.stencilRef=this.stencilRef;d.stencilFuncMask=this.stencilFuncMask;d.stencilFail=this.stencilFail;d.stencilZFail=this.stencilZFail;d.stencilZPass=this.stencilZPass;this.rotation&&0!==this.rotation&&(d.rotation=this.rotation);!0===this.polygonOffset&&(d.polygonOffset=!0);0!==this.polygonOffsetFactor&&(d.polygonOffsetFactor=this.polygonOffsetFactor);0!==this.polygonOffsetUnits&&(d.polygonOffsetUnits=this.polygonOffsetUnits);this.linewidth&&1!==this.linewidth&&(d.linewidth= +this.linewidth);void 0!==this.dashSize&&(d.dashSize=this.dashSize);void 0!==this.gapSize&&(d.gapSize=this.gapSize);void 0!==this.scale&&(d.scale=this.scale);!0===this.dithering&&(d.dithering=!0);0g;g++)if(d[g]===d[(g+1)%3]){a.push(f);break}for(f=a.length-1;0<=f;f--)for(d=a[f],this.faces.splice(d,1),c=0,e=this.faceVertexUvs.length;c\n\t#include \n}",fragmentShader:"uniform sampler2D tEquirect;\nvarying vec3 vWorldDirection;\n#define RECIPROCAL_PI 0.31830988618\n#define RECIPROCAL_PI2 0.15915494\nvoid main() {\n\tvec3 direction = normalize( vWorldDirection );\n\tvec2 sampleUV;\n\tsampleUV.y = asin( clamp( direction.y, - 1.0, 1.0 ) ) * RECIPROCAL_PI + 0.5;\n\tsampleUV.x = atan( direction.z, direction.x ) * RECIPROCAL_PI2 + 0.5;\n\tgl_FragColor = texture2D( tEquirect, sampleUV );\n}", +side:1,blending:0});d.uniforms.tEquirect.value=b;b=new ja(new Fd(5,5,5),d);c.add(b);d=new Dc(1,10,1);d.renderTarget=this;d.renderTarget.texture.name="CubeCameraTexture";d.update(a,c);b.geometry.dispose();b.material.dispose();return this};Zb.prototype=Object.create(V.prototype);Zb.prototype.constructor=Zb;Zb.prototype.isDataTexture=!0;var td=new cb,Hf=new n;Object.assign(Ec.prototype,{set:function(a,b,c,d,e,f){var g=this.planes;g[0].copy(a);g[1].copy(b);g[2].copy(c);g[3].copy(d);g[4].copy(e);g[5].copy(f); +return this},clone:function(){return(new this.constructor).copy(this)},copy:function(a){for(var b=this.planes,c=0;6>c;c++)b[c].copy(a.planes[c]);return this},setFromProjectionMatrix:function(a){var b=this.planes,c=a.elements;a=c[0];var d=c[1],e=c[2],f=c[3],g=c[4],h=c[5],k=c[6],m=c[7],l=c[8],p=c[9],n=c[10],r=c[11],q=c[12],t=c[13],v=c[14];c=c[15];b[0].setComponents(f-a,m-g,r-l,c-q).normalize();b[1].setComponents(f+a,m+g,r+l,c+q).normalize();b[2].setComponents(f+d,m+h,r+p,c+t).normalize();b[3].setComponents(f- +d,m-h,r-p,c-t).normalize();b[4].setComponents(f-e,m-k,r-n,c-v).normalize();b[5].setComponents(f+e,m+k,r+n,c+v).normalize();return this},intersectsObject:function(a){var b=a.geometry;null===b.boundingSphere&&b.computeBoundingSphere();td.copy(b.boundingSphere).applyMatrix4(a.matrixWorld);return this.intersectsSphere(td)},intersectsSprite:function(a){td.center.set(0,0,0);td.radius=.7071067811865476;td.applyMatrix4(a.matrixWorld);return this.intersectsSphere(td)},intersectsSphere:function(a){var b=this.planes, +c=a.center;a=-a.radius;for(var d=0;6>d;d++)if(b[d].distanceToPoint(c)c;c++){var d=b[c];Hf.x=0d.distanceToPoint(Hf))return!1}return!0},containsPoint:function(a){for(var b=this.planes,c=0;6>c;c++)if(0>b[c].distanceToPoint(a))return!1;return!0}});var D={common:{diffuse:{value:new A(15658734)},opacity:{value:1},map:{value:null}, +uvTransform:{value:new xa},uv2Transform:{value:new xa},alphaMap:{value:null}},specularmap:{specularMap:{value:null}},envmap:{envMap:{value:null},flipEnvMap:{value:-1},reflectivity:{value:1},refractionRatio:{value:.98},maxMipLevel:{value:0}},aomap:{aoMap:{value:null},aoMapIntensity:{value:1}},lightmap:{lightMap:{value:null},lightMapIntensity:{value:1}},emissivemap:{emissiveMap:{value:null}},bumpmap:{bumpMap:{value:null},bumpScale:{value:1}},normalmap:{normalMap:{value:null},normalScale:{value:new v(1, +1)}},displacementmap:{displacementMap:{value:null},displacementScale:{value:1},displacementBias:{value:0}},roughnessmap:{roughnessMap:{value:null}},metalnessmap:{metalnessMap:{value:null}},gradientmap:{gradientMap:{value:null}},fog:{fogDensity:{value:2.5E-4},fogNear:{value:1},fogFar:{value:2E3},fogColor:{value:new A(16777215)}},lights:{ambientLightColor:{value:[]},lightProbe:{value:[]},directionalLights:{value:[],properties:{direction:{},color:{}}},directionalLightShadows:{value:[],properties:{shadowBias:{}, +shadowRadius:{},shadowMapSize:{}}},directionalShadowMap:{value:[]},directionalShadowMatrix:{value:[]},spotLights:{value:[],properties:{color:{},position:{},direction:{},distance:{},coneCos:{},penumbraCos:{},decay:{}}},spotLightShadows:{value:[],properties:{shadowBias:{},shadowRadius:{},shadowMapSize:{}}},spotShadowMap:{value:[]},spotShadowMatrix:{value:[]},pointLights:{value:[],properties:{color:{},position:{},decay:{},distance:{}}},pointLightShadows:{value:[],properties:{shadowBias:{},shadowRadius:{}, +shadowMapSize:{},shadowCameraNear:{},shadowCameraFar:{}}},pointShadowMap:{value:[]},pointShadowMatrix:{value:[]},hemisphereLights:{value:[],properties:{direction:{},skyColor:{},groundColor:{}}},rectAreaLights:{value:[],properties:{color:{},position:{},width:{},height:{}}}},points:{diffuse:{value:new A(15658734)},opacity:{value:1},size:{value:1},scale:{value:1},map:{value:null},alphaMap:{value:null},uvTransform:{value:new xa}},sprite:{diffuse:{value:new A(15658734)},opacity:{value:1},center:{value:new v(.5, +.5)},rotation:{value:0},map:{value:null},alphaMap:{value:null},uvTransform:{value:new xa}}};Ed.prototype=Object.create(O.prototype);Ed.prototype.constructor=Ed;$b.prototype=Object.create(B.prototype);$b.prototype.constructor=$b;var L={alphamap_fragment:"#ifdef USE_ALPHAMAP\n\tdiffuseColor.a *= texture2D( alphaMap, vUv ).g;\n#endif",alphamap_pars_fragment:"#ifdef USE_ALPHAMAP\n\tuniform sampler2D alphaMap;\n#endif",alphatest_fragment:"#ifdef ALPHATEST\n\tif ( diffuseColor.a < ALPHATEST ) discard;\n#endif", +aomap_fragment:"#ifdef USE_AOMAP\n\tfloat ambientOcclusion = ( texture2D( aoMap, vUv2 ).r - 1.0 ) * aoMapIntensity + 1.0;\n\treflectedLight.indirectDiffuse *= ambientOcclusion;\n\t#if defined( USE_ENVMAP ) && defined( STANDARD )\n\t\tfloat dotNV = saturate( dot( geometry.normal, geometry.viewDir ) );\n\t\treflectedLight.indirectSpecular *= computeSpecularOcclusion( dotNV, ambientOcclusion, material.specularRoughness );\n\t#endif\n#endif",aomap_pars_fragment:"#ifdef USE_AOMAP\n\tuniform sampler2D aoMap;\n\tuniform float aoMapIntensity;\n#endif", +begin_vertex:"vec3 transformed = vec3( position );",beginnormal_vertex:"vec3 objectNormal = vec3( normal );\n#ifdef USE_TANGENT\n\tvec3 objectTangent = vec3( tangent.xyz );\n#endif",bsdfs:"vec2 integrateSpecularBRDF( const in float dotNV, const in float roughness ) {\n\tconst vec4 c0 = vec4( - 1, - 0.0275, - 0.572, 0.022 );\n\tconst vec4 c1 = vec4( 1, 0.0425, 1.04, - 0.04 );\n\tvec4 r = roughness * c0 + c1;\n\tfloat a004 = min( r.x * r.x, exp2( - 9.28 * dotNV ) ) * r.x + r.y;\n\treturn vec2( -1.04, 1.04 ) * a004 + r.zw;\n}\nfloat punctualLightIntensityToIrradianceFactor( const in float lightDistance, const in float cutoffDistance, const in float decayExponent ) {\n#if defined ( PHYSICALLY_CORRECT_LIGHTS )\n\tfloat distanceFalloff = 1.0 / max( pow( lightDistance, decayExponent ), 0.01 );\n\tif( cutoffDistance > 0.0 ) {\n\t\tdistanceFalloff *= pow2( saturate( 1.0 - pow4( lightDistance / cutoffDistance ) ) );\n\t}\n\treturn distanceFalloff;\n#else\n\tif( cutoffDistance > 0.0 && decayExponent > 0.0 ) {\n\t\treturn pow( saturate( -lightDistance / cutoffDistance + 1.0 ), decayExponent );\n\t}\n\treturn 1.0;\n#endif\n}\nvec3 BRDF_Diffuse_Lambert( const in vec3 diffuseColor ) {\n\treturn RECIPROCAL_PI * diffuseColor;\n}\nvec3 F_Schlick( const in vec3 specularColor, const in float dotLH ) {\n\tfloat fresnel = exp2( ( -5.55473 * dotLH - 6.98316 ) * dotLH );\n\treturn ( 1.0 - specularColor ) * fresnel + specularColor;\n}\nvec3 F_Schlick_RoughnessDependent( const in vec3 F0, const in float dotNV, const in float roughness ) {\n\tfloat fresnel = exp2( ( -5.55473 * dotNV - 6.98316 ) * dotNV );\n\tvec3 Fr = max( vec3( 1.0 - roughness ), F0 ) - F0;\n\treturn Fr * fresnel + F0;\n}\nfloat G_GGX_Smith( const in float alpha, const in float dotNL, const in float dotNV ) {\n\tfloat a2 = pow2( alpha );\n\tfloat gl = dotNL + sqrt( a2 + ( 1.0 - a2 ) * pow2( dotNL ) );\n\tfloat gv = dotNV + sqrt( a2 + ( 1.0 - a2 ) * pow2( dotNV ) );\n\treturn 1.0 / ( gl * gv );\n}\nfloat G_GGX_SmithCorrelated( const in float alpha, const in float dotNL, const in float dotNV ) {\n\tfloat a2 = pow2( alpha );\n\tfloat gv = dotNL * sqrt( a2 + ( 1.0 - a2 ) * pow2( dotNV ) );\n\tfloat gl = dotNV * sqrt( a2 + ( 1.0 - a2 ) * pow2( dotNL ) );\n\treturn 0.5 / max( gv + gl, EPSILON );\n}\nfloat D_GGX( const in float alpha, const in float dotNH ) {\n\tfloat a2 = pow2( alpha );\n\tfloat denom = pow2( dotNH ) * ( a2 - 1.0 ) + 1.0;\n\treturn RECIPROCAL_PI * a2 / pow2( denom );\n}\nvec3 BRDF_Specular_GGX( const in IncidentLight incidentLight, const in vec3 viewDir, const in vec3 normal, const in vec3 specularColor, const in float roughness ) {\n\tfloat alpha = pow2( roughness );\n\tvec3 halfDir = normalize( incidentLight.direction + viewDir );\n\tfloat dotNL = saturate( dot( normal, incidentLight.direction ) );\n\tfloat dotNV = saturate( dot( normal, viewDir ) );\n\tfloat dotNH = saturate( dot( normal, halfDir ) );\n\tfloat dotLH = saturate( dot( incidentLight.direction, halfDir ) );\n\tvec3 F = F_Schlick( specularColor, dotLH );\n\tfloat G = G_GGX_SmithCorrelated( alpha, dotNL, dotNV );\n\tfloat D = D_GGX( alpha, dotNH );\n\treturn F * ( G * D );\n}\nvec2 LTC_Uv( const in vec3 N, const in vec3 V, const in float roughness ) {\n\tconst float LUT_SIZE = 64.0;\n\tconst float LUT_SCALE = ( LUT_SIZE - 1.0 ) / LUT_SIZE;\n\tconst float LUT_BIAS = 0.5 / LUT_SIZE;\n\tfloat dotNV = saturate( dot( N, V ) );\n\tvec2 uv = vec2( roughness, sqrt( 1.0 - dotNV ) );\n\tuv = uv * LUT_SCALE + LUT_BIAS;\n\treturn uv;\n}\nfloat LTC_ClippedSphereFormFactor( const in vec3 f ) {\n\tfloat l = length( f );\n\treturn max( ( l * l + f.z ) / ( l + 1.0 ), 0.0 );\n}\nvec3 LTC_EdgeVectorFormFactor( const in vec3 v1, const in vec3 v2 ) {\n\tfloat x = dot( v1, v2 );\n\tfloat y = abs( x );\n\tfloat a = 0.8543985 + ( 0.4965155 + 0.0145206 * y ) * y;\n\tfloat b = 3.4175940 + ( 4.1616724 + y ) * y;\n\tfloat v = a / b;\n\tfloat theta_sintheta = ( x > 0.0 ) ? v : 0.5 * inversesqrt( max( 1.0 - x * x, 1e-7 ) ) - v;\n\treturn cross( v1, v2 ) * theta_sintheta;\n}\nvec3 LTC_Evaluate( const in vec3 N, const in vec3 V, const in vec3 P, const in mat3 mInv, const in vec3 rectCoords[ 4 ] ) {\n\tvec3 v1 = rectCoords[ 1 ] - rectCoords[ 0 ];\n\tvec3 v2 = rectCoords[ 3 ] - rectCoords[ 0 ];\n\tvec3 lightNormal = cross( v1, v2 );\n\tif( dot( lightNormal, P - rectCoords[ 0 ] ) < 0.0 ) return vec3( 0.0 );\n\tvec3 T1, T2;\n\tT1 = normalize( V - N * dot( V, N ) );\n\tT2 = - cross( N, T1 );\n\tmat3 mat = mInv * transposeMat3( mat3( T1, T2, N ) );\n\tvec3 coords[ 4 ];\n\tcoords[ 0 ] = mat * ( rectCoords[ 0 ] - P );\n\tcoords[ 1 ] = mat * ( rectCoords[ 1 ] - P );\n\tcoords[ 2 ] = mat * ( rectCoords[ 2 ] - P );\n\tcoords[ 3 ] = mat * ( rectCoords[ 3 ] - P );\n\tcoords[ 0 ] = normalize( coords[ 0 ] );\n\tcoords[ 1 ] = normalize( coords[ 1 ] );\n\tcoords[ 2 ] = normalize( coords[ 2 ] );\n\tcoords[ 3 ] = normalize( coords[ 3 ] );\n\tvec3 vectorFormFactor = vec3( 0.0 );\n\tvectorFormFactor += LTC_EdgeVectorFormFactor( coords[ 0 ], coords[ 1 ] );\n\tvectorFormFactor += LTC_EdgeVectorFormFactor( coords[ 1 ], coords[ 2 ] );\n\tvectorFormFactor += LTC_EdgeVectorFormFactor( coords[ 2 ], coords[ 3 ] );\n\tvectorFormFactor += LTC_EdgeVectorFormFactor( coords[ 3 ], coords[ 0 ] );\n\tfloat result = LTC_ClippedSphereFormFactor( vectorFormFactor );\n\treturn vec3( result );\n}\nvec3 BRDF_Specular_GGX_Environment( const in vec3 viewDir, const in vec3 normal, const in vec3 specularColor, const in float roughness ) {\n\tfloat dotNV = saturate( dot( normal, viewDir ) );\n\tvec2 brdf = integrateSpecularBRDF( dotNV, roughness );\n\treturn specularColor * brdf.x + brdf.y;\n}\nvoid BRDF_Specular_Multiscattering_Environment( const in GeometricContext geometry, const in vec3 specularColor, const in float roughness, inout vec3 singleScatter, inout vec3 multiScatter ) {\n\tfloat dotNV = saturate( dot( geometry.normal, geometry.viewDir ) );\n\tvec3 F = F_Schlick_RoughnessDependent( specularColor, dotNV, roughness );\n\tvec2 brdf = integrateSpecularBRDF( dotNV, roughness );\n\tvec3 FssEss = F * brdf.x + brdf.y;\n\tfloat Ess = brdf.x + brdf.y;\n\tfloat Ems = 1.0 - Ess;\n\tvec3 Favg = specularColor + ( 1.0 - specularColor ) * 0.047619;\tvec3 Fms = FssEss * Favg / ( 1.0 - Ems * Favg );\n\tsingleScatter += FssEss;\n\tmultiScatter += Fms * Ems;\n}\nfloat G_BlinnPhong_Implicit( ) {\n\treturn 0.25;\n}\nfloat D_BlinnPhong( const in float shininess, const in float dotNH ) {\n\treturn RECIPROCAL_PI * ( shininess * 0.5 + 1.0 ) * pow( dotNH, shininess );\n}\nvec3 BRDF_Specular_BlinnPhong( const in IncidentLight incidentLight, const in GeometricContext geometry, const in vec3 specularColor, const in float shininess ) {\n\tvec3 halfDir = normalize( incidentLight.direction + geometry.viewDir );\n\tfloat dotNH = saturate( dot( geometry.normal, halfDir ) );\n\tfloat dotLH = saturate( dot( incidentLight.direction, halfDir ) );\n\tvec3 F = F_Schlick( specularColor, dotLH );\n\tfloat G = G_BlinnPhong_Implicit( );\n\tfloat D = D_BlinnPhong( shininess, dotNH );\n\treturn F * ( G * D );\n}\nfloat GGXRoughnessToBlinnExponent( const in float ggxRoughness ) {\n\treturn ( 2.0 / pow2( ggxRoughness + 0.0001 ) - 2.0 );\n}\nfloat BlinnExponentToGGXRoughness( const in float blinnExponent ) {\n\treturn sqrt( 2.0 / ( blinnExponent + 2.0 ) );\n}\n#if defined( USE_SHEEN )\nfloat D_Charlie(float roughness, float NoH) {\n\tfloat invAlpha = 1.0 / roughness;\n\tfloat cos2h = NoH * NoH;\n\tfloat sin2h = max(1.0 - cos2h, 0.0078125);\treturn (2.0 + invAlpha) * pow(sin2h, invAlpha * 0.5) / (2.0 * PI);\n}\nfloat V_Neubelt(float NoV, float NoL) {\n\treturn saturate(1.0 / (4.0 * (NoL + NoV - NoL * NoV)));\n}\nvec3 BRDF_Specular_Sheen( const in float roughness, const in vec3 L, const in GeometricContext geometry, vec3 specularColor ) {\n\tvec3 N = geometry.normal;\n\tvec3 V = geometry.viewDir;\n\tvec3 H = normalize( V + L );\n\tfloat dotNH = saturate( dot( N, H ) );\n\treturn specularColor * D_Charlie( roughness, dotNH ) * V_Neubelt( dot(N, V), dot(N, L) );\n}\n#endif", +bumpmap_pars_fragment:"#ifdef USE_BUMPMAP\n\tuniform sampler2D bumpMap;\n\tuniform float bumpScale;\n\tvec2 dHdxy_fwd() {\n\t\tvec2 dSTdx = dFdx( vUv );\n\t\tvec2 dSTdy = dFdy( vUv );\n\t\tfloat Hll = bumpScale * texture2D( bumpMap, vUv ).x;\n\t\tfloat dBx = bumpScale * texture2D( bumpMap, vUv + dSTdx ).x - Hll;\n\t\tfloat dBy = bumpScale * texture2D( bumpMap, vUv + dSTdy ).x - Hll;\n\t\treturn vec2( dBx, dBy );\n\t}\n\tvec3 perturbNormalArb( vec3 surf_pos, vec3 surf_norm, vec2 dHdxy ) {\n\t\tvec3 vSigmaX = vec3( dFdx( surf_pos.x ), dFdx( surf_pos.y ), dFdx( surf_pos.z ) );\n\t\tvec3 vSigmaY = vec3( dFdy( surf_pos.x ), dFdy( surf_pos.y ), dFdy( surf_pos.z ) );\n\t\tvec3 vN = surf_norm;\n\t\tvec3 R1 = cross( vSigmaY, vN );\n\t\tvec3 R2 = cross( vN, vSigmaX );\n\t\tfloat fDet = dot( vSigmaX, R1 );\n\t\tfDet *= ( float( gl_FrontFacing ) * 2.0 - 1.0 );\n\t\tvec3 vGrad = sign( fDet ) * ( dHdxy.x * R1 + dHdxy.y * R2 );\n\t\treturn normalize( abs( fDet ) * surf_norm - vGrad );\n\t}\n#endif", +clipping_planes_fragment:"#if NUM_CLIPPING_PLANES > 0\n\tvec4 plane;\n\t#pragma unroll_loop_start\n\tfor ( int i = 0; i < UNION_CLIPPING_PLANES; i ++ ) {\n\t\tplane = clippingPlanes[ i ];\n\t\tif ( dot( vClipPosition, plane.xyz ) > plane.w ) discard;\n\t}\n\t#pragma unroll_loop_end\n\t#if UNION_CLIPPING_PLANES < NUM_CLIPPING_PLANES\n\t\tbool clipped = true;\n\t\t#pragma unroll_loop_start\n\t\tfor ( int i = UNION_CLIPPING_PLANES; i < NUM_CLIPPING_PLANES; i ++ ) {\n\t\t\tplane = clippingPlanes[ i ];\n\t\t\tclipped = ( dot( vClipPosition, plane.xyz ) > plane.w ) && clipped;\n\t\t}\n\t\t#pragma unroll_loop_end\n\t\tif ( clipped ) discard;\n\t#endif\n#endif", +clipping_planes_pars_fragment:"#if NUM_CLIPPING_PLANES > 0\n\tvarying vec3 vClipPosition;\n\tuniform vec4 clippingPlanes[ NUM_CLIPPING_PLANES ];\n#endif",clipping_planes_pars_vertex:"#if NUM_CLIPPING_PLANES > 0\n\tvarying vec3 vClipPosition;\n#endif",clipping_planes_vertex:"#if NUM_CLIPPING_PLANES > 0\n\tvClipPosition = - mvPosition.xyz;\n#endif",color_fragment:"#ifdef USE_COLOR\n\tdiffuseColor.rgb *= vColor;\n#endif",color_pars_fragment:"#ifdef USE_COLOR\n\tvarying vec3 vColor;\n#endif",color_pars_vertex:"#ifdef USE_COLOR\n\tvarying vec3 vColor;\n#endif", +color_vertex:"#ifdef USE_COLOR\n\tvColor.xyz = color.xyz;\n#endif",common:"#define PI 3.14159265359\n#define PI2 6.28318530718\n#define PI_HALF 1.5707963267949\n#define RECIPROCAL_PI 0.31830988618\n#define RECIPROCAL_PI2 0.15915494\n#define LOG2 1.442695\n#define EPSILON 1e-6\n#ifndef saturate\n#define saturate(a) clamp( a, 0.0, 1.0 )\n#endif\n#define whiteComplement(a) ( 1.0 - saturate( a ) )\nfloat pow2( const in float x ) { return x*x; }\nfloat pow3( const in float x ) { return x*x*x; }\nfloat pow4( const in float x ) { float x2 = x*x; return x2*x2; }\nfloat average( const in vec3 color ) { return dot( color, vec3( 0.3333 ) ); }\nhighp float rand( const in vec2 uv ) {\n\tconst highp float a = 12.9898, b = 78.233, c = 43758.5453;\n\thighp float dt = dot( uv.xy, vec2( a,b ) ), sn = mod( dt, PI );\n\treturn fract(sin(sn) * c);\n}\n#ifdef HIGH_PRECISION\n\tfloat precisionSafeLength( vec3 v ) { return length( v ); }\n#else\n\tfloat max3( vec3 v ) { return max( max( v.x, v.y ), v.z ); }\n\tfloat precisionSafeLength( vec3 v ) {\n\t\tfloat maxComponent = max3( abs( v ) );\n\t\treturn length( v / maxComponent ) * maxComponent;\n\t}\n#endif\nstruct IncidentLight {\n\tvec3 color;\n\tvec3 direction;\n\tbool visible;\n};\nstruct ReflectedLight {\n\tvec3 directDiffuse;\n\tvec3 directSpecular;\n\tvec3 indirectDiffuse;\n\tvec3 indirectSpecular;\n};\nstruct GeometricContext {\n\tvec3 position;\n\tvec3 normal;\n\tvec3 viewDir;\n#ifdef CLEARCOAT\n\tvec3 clearcoatNormal;\n#endif\n};\nvec3 transformDirection( in vec3 dir, in mat4 matrix ) {\n\treturn normalize( ( matrix * vec4( dir, 0.0 ) ).xyz );\n}\nvec3 inverseTransformDirection( in vec3 dir, in mat4 matrix ) {\n\treturn normalize( ( vec4( dir, 0.0 ) * matrix ).xyz );\n}\nvec3 projectOnPlane(in vec3 point, in vec3 pointOnPlane, in vec3 planeNormal ) {\n\tfloat distance = dot( planeNormal, point - pointOnPlane );\n\treturn - distance * planeNormal + point;\n}\nfloat sideOfPlane( in vec3 point, in vec3 pointOnPlane, in vec3 planeNormal ) {\n\treturn sign( dot( point - pointOnPlane, planeNormal ) );\n}\nvec3 linePlaneIntersect( in vec3 pointOnLine, in vec3 lineDirection, in vec3 pointOnPlane, in vec3 planeNormal ) {\n\treturn lineDirection * ( dot( planeNormal, pointOnPlane - pointOnLine ) / dot( planeNormal, lineDirection ) ) + pointOnLine;\n}\nmat3 transposeMat3( const in mat3 m ) {\n\tmat3 tmp;\n\ttmp[ 0 ] = vec3( m[ 0 ].x, m[ 1 ].x, m[ 2 ].x );\n\ttmp[ 1 ] = vec3( m[ 0 ].y, m[ 1 ].y, m[ 2 ].y );\n\ttmp[ 2 ] = vec3( m[ 0 ].z, m[ 1 ].z, m[ 2 ].z );\n\treturn tmp;\n}\nfloat linearToRelativeLuminance( const in vec3 color ) {\n\tvec3 weights = vec3( 0.2126, 0.7152, 0.0722 );\n\treturn dot( weights, color.rgb );\n}\nbool isPerspectiveMatrix( mat4 m ) {\n return m[ 2 ][ 3 ] == - 1.0;\n}", +cube_uv_reflection_fragment:"#ifdef ENVMAP_TYPE_CUBE_UV\n#define cubeUV_maxMipLevel 8.0\n#define cubeUV_minMipLevel 4.0\n#define cubeUV_maxTileSize 256.0\n#define cubeUV_minTileSize 16.0\nfloat getFace(vec3 direction) {\n vec3 absDirection = abs(direction);\n float face = -1.0;\n if (absDirection.x > absDirection.z) {\n if (absDirection.x > absDirection.y)\n face = direction.x > 0.0 ? 0.0 : 3.0;\n else\n face = direction.y > 0.0 ? 1.0 : 4.0;\n } else {\n if (absDirection.z > absDirection.y)\n face = direction.z > 0.0 ? 2.0 : 5.0;\n else\n face = direction.y > 0.0 ? 1.0 : 4.0;\n }\n return face;\n}\nvec2 getUV(vec3 direction, float face) {\n vec2 uv;\n if (face == 0.0) {\n uv = vec2(-direction.z, direction.y) / abs(direction.x);\n } else if (face == 1.0) {\n uv = vec2(direction.x, -direction.z) / abs(direction.y);\n } else if (face == 2.0) {\n uv = direction.xy / abs(direction.z);\n } else if (face == 3.0) {\n uv = vec2(direction.z, direction.y) / abs(direction.x);\n } else if (face == 4.0) {\n uv = direction.xz / abs(direction.y);\n } else {\n uv = vec2(-direction.x, direction.y) / abs(direction.z);\n }\n return 0.5 * (uv + 1.0);\n}\nvec3 bilinearCubeUV(sampler2D envMap, vec3 direction, float mipInt) {\n float face = getFace(direction);\n float filterInt = max(cubeUV_minMipLevel - mipInt, 0.0);\n mipInt = max(mipInt, cubeUV_minMipLevel);\n float faceSize = exp2(mipInt);\n float texelSize = 1.0 / (3.0 * cubeUV_maxTileSize);\n vec2 uv = getUV(direction, face) * (faceSize - 1.0);\n vec2 f = fract(uv);\n uv += 0.5 - f;\n if (face > 2.0) {\n uv.y += faceSize;\n face -= 3.0;\n }\n uv.x += face * faceSize;\n if(mipInt < cubeUV_maxMipLevel){\n uv.y += 2.0 * cubeUV_maxTileSize;\n }\n uv.y += filterInt * 2.0 * cubeUV_minTileSize;\n uv.x += 3.0 * max(0.0, cubeUV_maxTileSize - 2.0 * faceSize);\n uv *= texelSize;\n vec3 tl = envMapTexelToLinear(texture2D(envMap, uv)).rgb;\n uv.x += texelSize;\n vec3 tr = envMapTexelToLinear(texture2D(envMap, uv)).rgb;\n uv.y += texelSize;\n vec3 br = envMapTexelToLinear(texture2D(envMap, uv)).rgb;\n uv.x -= texelSize;\n vec3 bl = envMapTexelToLinear(texture2D(envMap, uv)).rgb;\n vec3 tm = mix(tl, tr, f.x);\n vec3 bm = mix(bl, br, f.x);\n return mix(tm, bm, f.y);\n}\n#define r0 1.0\n#define v0 0.339\n#define m0 -2.0\n#define r1 0.8\n#define v1 0.276\n#define m1 -1.0\n#define r4 0.4\n#define v4 0.046\n#define m4 2.0\n#define r5 0.305\n#define v5 0.016\n#define m5 3.0\n#define r6 0.21\n#define v6 0.0038\n#define m6 4.0\nfloat roughnessToMip(float roughness) {\n float mip = 0.0;\n if (roughness >= r1) {\n mip = (r0 - roughness) * (m1 - m0) / (r0 - r1) + m0;\n } else if (roughness >= r4) {\n mip = (r1 - roughness) * (m4 - m1) / (r1 - r4) + m1;\n } else if (roughness >= r5) {\n mip = (r4 - roughness) * (m5 - m4) / (r4 - r5) + m4;\n } else if (roughness >= r6) {\n mip = (r5 - roughness) * (m6 - m5) / (r5 - r6) + m5;\n } else {\n mip = -2.0 * log2(1.16 * roughness); }\n return mip;\n}\nvec4 textureCubeUV(sampler2D envMap, vec3 sampleDir, float roughness) {\n float mip = clamp(roughnessToMip(roughness), m0, cubeUV_maxMipLevel);\n float mipF = fract(mip);\n float mipInt = floor(mip);\n vec3 color0 = bilinearCubeUV(envMap, sampleDir, mipInt);\n if (mipF == 0.0) {\n return vec4(color0, 1.0);\n } else {\n vec3 color1 = bilinearCubeUV(envMap, sampleDir, mipInt + 1.0);\n return vec4(mix(color0, color1, mipF), 1.0);\n }\n}\n#endif", +defaultnormal_vertex:"vec3 transformedNormal = objectNormal;\n#ifdef USE_INSTANCING\n\tmat3 m = mat3( instanceMatrix );\n\ttransformedNormal /= vec3( dot( m[ 0 ], m[ 0 ] ), dot( m[ 1 ], m[ 1 ] ), dot( m[ 2 ], m[ 2 ] ) );\n\ttransformedNormal = m * transformedNormal;\n#endif\ntransformedNormal = normalMatrix * transformedNormal;\n#ifdef FLIP_SIDED\n\ttransformedNormal = - transformedNormal;\n#endif\n#ifdef USE_TANGENT\n\tvec3 transformedTangent = ( modelViewMatrix * vec4( objectTangent, 0.0 ) ).xyz;\n\t#ifdef FLIP_SIDED\n\t\ttransformedTangent = - transformedTangent;\n\t#endif\n#endif", +displacementmap_pars_vertex:"#ifdef USE_DISPLACEMENTMAP\n\tuniform sampler2D displacementMap;\n\tuniform float displacementScale;\n\tuniform float displacementBias;\n#endif",displacementmap_vertex:"#ifdef USE_DISPLACEMENTMAP\n\ttransformed += normalize( objectNormal ) * ( texture2D( displacementMap, vUv ).x * displacementScale + displacementBias );\n#endif",emissivemap_fragment:"#ifdef USE_EMISSIVEMAP\n\tvec4 emissiveColor = texture2D( emissiveMap, vUv );\n\temissiveColor.rgb = emissiveMapTexelToLinear( emissiveColor ).rgb;\n\ttotalEmissiveRadiance *= emissiveColor.rgb;\n#endif", +emissivemap_pars_fragment:"#ifdef USE_EMISSIVEMAP\n\tuniform sampler2D emissiveMap;\n#endif",encodings_fragment:"gl_FragColor = linearToOutputTexel( gl_FragColor );",encodings_pars_fragment:"\nvec4 LinearToLinear( in vec4 value ) {\n\treturn value;\n}\nvec4 GammaToLinear( in vec4 value, in float gammaFactor ) {\n\treturn vec4( pow( value.rgb, vec3( gammaFactor ) ), value.a );\n}\nvec4 LinearToGamma( in vec4 value, in float gammaFactor ) {\n\treturn vec4( pow( value.rgb, vec3( 1.0 / gammaFactor ) ), value.a );\n}\nvec4 sRGBToLinear( in vec4 value ) {\n\treturn vec4( mix( pow( value.rgb * 0.9478672986 + vec3( 0.0521327014 ), vec3( 2.4 ) ), value.rgb * 0.0773993808, vec3( lessThanEqual( value.rgb, vec3( 0.04045 ) ) ) ), value.a );\n}\nvec4 LinearTosRGB( in vec4 value ) {\n\treturn vec4( mix( pow( value.rgb, vec3( 0.41666 ) ) * 1.055 - vec3( 0.055 ), value.rgb * 12.92, vec3( lessThanEqual( value.rgb, vec3( 0.0031308 ) ) ) ), value.a );\n}\nvec4 RGBEToLinear( in vec4 value ) {\n\treturn vec4( value.rgb * exp2( value.a * 255.0 - 128.0 ), 1.0 );\n}\nvec4 LinearToRGBE( in vec4 value ) {\n\tfloat maxComponent = max( max( value.r, value.g ), value.b );\n\tfloat fExp = clamp( ceil( log2( maxComponent ) ), -128.0, 127.0 );\n\treturn vec4( value.rgb / exp2( fExp ), ( fExp + 128.0 ) / 255.0 );\n}\nvec4 RGBMToLinear( in vec4 value, in float maxRange ) {\n\treturn vec4( value.rgb * value.a * maxRange, 1.0 );\n}\nvec4 LinearToRGBM( in vec4 value, in float maxRange ) {\n\tfloat maxRGB = max( value.r, max( value.g, value.b ) );\n\tfloat M = clamp( maxRGB / maxRange, 0.0, 1.0 );\n\tM = ceil( M * 255.0 ) / 255.0;\n\treturn vec4( value.rgb / ( M * maxRange ), M );\n}\nvec4 RGBDToLinear( in vec4 value, in float maxRange ) {\n\treturn vec4( value.rgb * ( ( maxRange / 255.0 ) / value.a ), 1.0 );\n}\nvec4 LinearToRGBD( in vec4 value, in float maxRange ) {\n\tfloat maxRGB = max( value.r, max( value.g, value.b ) );\n\tfloat D = max( maxRange / maxRGB, 1.0 );\n\tD = clamp( floor( D ) / 255.0, 0.0, 1.0 );\n\treturn vec4( value.rgb * ( D * ( 255.0 / maxRange ) ), D );\n}\nconst mat3 cLogLuvM = mat3( 0.2209, 0.3390, 0.4184, 0.1138, 0.6780, 0.7319, 0.0102, 0.1130, 0.2969 );\nvec4 LinearToLogLuv( in vec4 value ) {\n\tvec3 Xp_Y_XYZp = cLogLuvM * value.rgb;\n\tXp_Y_XYZp = max( Xp_Y_XYZp, vec3( 1e-6, 1e-6, 1e-6 ) );\n\tvec4 vResult;\n\tvResult.xy = Xp_Y_XYZp.xy / Xp_Y_XYZp.z;\n\tfloat Le = 2.0 * log2(Xp_Y_XYZp.y) + 127.0;\n\tvResult.w = fract( Le );\n\tvResult.z = ( Le - ( floor( vResult.w * 255.0 ) ) / 255.0 ) / 255.0;\n\treturn vResult;\n}\nconst mat3 cLogLuvInverseM = mat3( 6.0014, -2.7008, -1.7996, -1.3320, 3.1029, -5.7721, 0.3008, -1.0882, 5.6268 );\nvec4 LogLuvToLinear( in vec4 value ) {\n\tfloat Le = value.z * 255.0 + value.w;\n\tvec3 Xp_Y_XYZp;\n\tXp_Y_XYZp.y = exp2( ( Le - 127.0 ) / 2.0 );\n\tXp_Y_XYZp.z = Xp_Y_XYZp.y / value.y;\n\tXp_Y_XYZp.x = value.x * Xp_Y_XYZp.z;\n\tvec3 vRGB = cLogLuvInverseM * Xp_Y_XYZp.rgb;\n\treturn vec4( max( vRGB, 0.0 ), 1.0 );\n}", +envmap_fragment:"#ifdef USE_ENVMAP\n\t#ifdef ENV_WORLDPOS\n\t\tvec3 cameraToFrag;\n\t\t\n\t\tif ( isOrthographic ) {\n\t\t\tcameraToFrag = normalize( vec3( - viewMatrix[ 0 ][ 2 ], - viewMatrix[ 1 ][ 2 ], - viewMatrix[ 2 ][ 2 ] ) );\n\t\t} else {\n\t\t\tcameraToFrag = normalize( vWorldPosition - cameraPosition );\n\t\t}\n\t\tvec3 worldNormal = inverseTransformDirection( normal, viewMatrix );\n\t\t#ifdef ENVMAP_MODE_REFLECTION\n\t\t\tvec3 reflectVec = reflect( cameraToFrag, worldNormal );\n\t\t#else\n\t\t\tvec3 reflectVec = refract( cameraToFrag, worldNormal, refractionRatio );\n\t\t#endif\n\t#else\n\t\tvec3 reflectVec = vReflect;\n\t#endif\n\t#ifdef ENVMAP_TYPE_CUBE\n\t\tvec4 envColor = textureCube( envMap, vec3( flipEnvMap * reflectVec.x, reflectVec.yz ) );\n\t#elif defined( ENVMAP_TYPE_CUBE_UV )\n\t\tvec4 envColor = textureCubeUV( envMap, reflectVec, 0.0 );\n\t#elif defined( ENVMAP_TYPE_EQUIREC )\n\t\tvec2 sampleUV;\n\t\treflectVec = normalize( reflectVec );\n\t\tsampleUV.y = asin( clamp( reflectVec.y, - 1.0, 1.0 ) ) * RECIPROCAL_PI + 0.5;\n\t\tsampleUV.x = atan( reflectVec.z, reflectVec.x ) * RECIPROCAL_PI2 + 0.5;\n\t\tvec4 envColor = texture2D( envMap, sampleUV );\n\t#elif defined( ENVMAP_TYPE_SPHERE )\n\t\treflectVec = normalize( reflectVec );\n\t\tvec3 reflectView = normalize( ( viewMatrix * vec4( reflectVec, 0.0 ) ).xyz + vec3( 0.0, 0.0, 1.0 ) );\n\t\tvec4 envColor = texture2D( envMap, reflectView.xy * 0.5 + 0.5 );\n\t#else\n\t\tvec4 envColor = vec4( 0.0 );\n\t#endif\n\t#ifndef ENVMAP_TYPE_CUBE_UV\n\t\tenvColor = envMapTexelToLinear( envColor );\n\t#endif\n\t#ifdef ENVMAP_BLENDING_MULTIPLY\n\t\toutgoingLight = mix( outgoingLight, outgoingLight * envColor.xyz, specularStrength * reflectivity );\n\t#elif defined( ENVMAP_BLENDING_MIX )\n\t\toutgoingLight = mix( outgoingLight, envColor.xyz, specularStrength * reflectivity );\n\t#elif defined( ENVMAP_BLENDING_ADD )\n\t\toutgoingLight += envColor.xyz * specularStrength * reflectivity;\n\t#endif\n#endif", +envmap_common_pars_fragment:"#ifdef USE_ENVMAP\n\tuniform float envMapIntensity;\n\tuniform float flipEnvMap;\n\tuniform int maxMipLevel;\n\t#ifdef ENVMAP_TYPE_CUBE\n\t\tuniform samplerCube envMap;\n\t#else\n\t\tuniform sampler2D envMap;\n\t#endif\n\t\n#endif",envmap_pars_fragment:"#ifdef USE_ENVMAP\n\tuniform float reflectivity;\n\t#if defined( USE_BUMPMAP ) || defined( USE_NORMALMAP ) || defined( PHONG )\n\t\t#define ENV_WORLDPOS\n\t#endif\n\t#ifdef ENV_WORLDPOS\n\t\tvarying vec3 vWorldPosition;\n\t\tuniform float refractionRatio;\n\t#else\n\t\tvarying vec3 vReflect;\n\t#endif\n#endif", +envmap_pars_vertex:"#ifdef USE_ENVMAP\n\t#if defined( USE_BUMPMAP ) || defined( USE_NORMALMAP ) ||defined( PHONG )\n\t\t#define ENV_WORLDPOS\n\t#endif\n\t#ifdef ENV_WORLDPOS\n\t\t\n\t\tvarying vec3 vWorldPosition;\n\t#else\n\t\tvarying vec3 vReflect;\n\t\tuniform float refractionRatio;\n\t#endif\n#endif",envmap_physical_pars_fragment:"#if defined( USE_ENVMAP )\n\t#ifdef ENVMAP_MODE_REFRACTION\n\t\tuniform float refractionRatio;\n\t#endif\n\tvec3 getLightProbeIndirectIrradiance( const in GeometricContext geometry, const in int maxMIPLevel ) {\n\t\tvec3 worldNormal = inverseTransformDirection( geometry.normal, viewMatrix );\n\t\t#ifdef ENVMAP_TYPE_CUBE\n\t\t\tvec3 queryVec = vec3( flipEnvMap * worldNormal.x, worldNormal.yz );\n\t\t\t#ifdef TEXTURE_LOD_EXT\n\t\t\t\tvec4 envMapColor = textureCubeLodEXT( envMap, queryVec, float( maxMIPLevel ) );\n\t\t\t#else\n\t\t\t\tvec4 envMapColor = textureCube( envMap, queryVec, float( maxMIPLevel ) );\n\t\t\t#endif\n\t\t\tenvMapColor.rgb = envMapTexelToLinear( envMapColor ).rgb;\n\t\t#elif defined( ENVMAP_TYPE_CUBE_UV )\n\t\t\tvec4 envMapColor = textureCubeUV( envMap, worldNormal, 1.0 );\n\t\t#else\n\t\t\tvec4 envMapColor = vec4( 0.0 );\n\t\t#endif\n\t\treturn PI * envMapColor.rgb * envMapIntensity;\n\t}\n\tfloat getSpecularMIPLevel( const in float roughness, const in int maxMIPLevel ) {\n\t\tfloat maxMIPLevelScalar = float( maxMIPLevel );\n\t\tfloat sigma = PI * roughness * roughness / ( 1.0 + roughness );\n\t\tfloat desiredMIPLevel = maxMIPLevelScalar + log2( sigma );\n\t\treturn clamp( desiredMIPLevel, 0.0, maxMIPLevelScalar );\n\t}\n\tvec3 getLightProbeIndirectRadiance( const in vec3 viewDir, const in vec3 normal, const in float roughness, const in int maxMIPLevel ) {\n\t\t#ifdef ENVMAP_MODE_REFLECTION\n\t\t vec3 reflectVec = reflect( -viewDir, normal );\n\t\t reflectVec = normalize( mix( reflectVec, normal, roughness * roughness) );\n\t\t#else\n\t\t vec3 reflectVec = refract( -viewDir, normal, refractionRatio );\n\t\t#endif\n\t\treflectVec = inverseTransformDirection( reflectVec, viewMatrix );\n\t\tfloat specularMIPLevel = getSpecularMIPLevel( roughness, maxMIPLevel );\n\t\t#ifdef ENVMAP_TYPE_CUBE\n\t\t\tvec3 queryReflectVec = vec3( flipEnvMap * reflectVec.x, reflectVec.yz );\n\t\t\t#ifdef TEXTURE_LOD_EXT\n\t\t\t\tvec4 envMapColor = textureCubeLodEXT( envMap, queryReflectVec, specularMIPLevel );\n\t\t\t#else\n\t\t\t\tvec4 envMapColor = textureCube( envMap, queryReflectVec, specularMIPLevel );\n\t\t\t#endif\n\t\t\tenvMapColor.rgb = envMapTexelToLinear( envMapColor ).rgb;\n\t\t#elif defined( ENVMAP_TYPE_CUBE_UV )\n\t\t\tvec4 envMapColor = textureCubeUV( envMap, reflectVec, roughness );\n\t\t#elif defined( ENVMAP_TYPE_EQUIREC )\n\t\t\tvec2 sampleUV;\n\t\t\tsampleUV.y = asin( clamp( reflectVec.y, - 1.0, 1.0 ) ) * RECIPROCAL_PI + 0.5;\n\t\t\tsampleUV.x = atan( reflectVec.z, reflectVec.x ) * RECIPROCAL_PI2 + 0.5;\n\t\t\t#ifdef TEXTURE_LOD_EXT\n\t\t\t\tvec4 envMapColor = texture2DLodEXT( envMap, sampleUV, specularMIPLevel );\n\t\t\t#else\n\t\t\t\tvec4 envMapColor = texture2D( envMap, sampleUV, specularMIPLevel );\n\t\t\t#endif\n\t\t\tenvMapColor.rgb = envMapTexelToLinear( envMapColor ).rgb;\n\t\t#elif defined( ENVMAP_TYPE_SPHERE )\n\t\t\tvec3 reflectView = normalize( ( viewMatrix * vec4( reflectVec, 0.0 ) ).xyz + vec3( 0.0,0.0,1.0 ) );\n\t\t\t#ifdef TEXTURE_LOD_EXT\n\t\t\t\tvec4 envMapColor = texture2DLodEXT( envMap, reflectView.xy * 0.5 + 0.5, specularMIPLevel );\n\t\t\t#else\n\t\t\t\tvec4 envMapColor = texture2D( envMap, reflectView.xy * 0.5 + 0.5, specularMIPLevel );\n\t\t\t#endif\n\t\t\tenvMapColor.rgb = envMapTexelToLinear( envMapColor ).rgb;\n\t\t#endif\n\t\treturn envMapColor.rgb * envMapIntensity;\n\t}\n#endif", +envmap_vertex:"#ifdef USE_ENVMAP\n\t#ifdef ENV_WORLDPOS\n\t\tvWorldPosition = worldPosition.xyz;\n\t#else\n\t\tvec3 cameraToVertex;\n\t\tif ( isOrthographic ) { \n\t\t\tcameraToVertex = normalize( vec3( - viewMatrix[ 0 ][ 2 ], - viewMatrix[ 1 ][ 2 ], - viewMatrix[ 2 ][ 2 ] ) );\n\t\t} else {\n\t\t\tcameraToVertex = normalize( worldPosition.xyz - cameraPosition );\n\t\t}\n\t\tvec3 worldNormal = inverseTransformDirection( transformedNormal, viewMatrix );\n\t\t#ifdef ENVMAP_MODE_REFLECTION\n\t\t\tvReflect = reflect( cameraToVertex, worldNormal );\n\t\t#else\n\t\t\tvReflect = refract( cameraToVertex, worldNormal, refractionRatio );\n\t\t#endif\n\t#endif\n#endif", +fog_vertex:"#ifdef USE_FOG\n\tfogDepth = -mvPosition.z;\n#endif",fog_pars_vertex:"#ifdef USE_FOG\n\tvarying float fogDepth;\n#endif",fog_fragment:"#ifdef USE_FOG\n\t#ifdef FOG_EXP2\n\t\tfloat fogFactor = 1.0 - exp( - fogDensity * fogDensity * fogDepth * fogDepth );\n\t#else\n\t\tfloat fogFactor = smoothstep( fogNear, fogFar, fogDepth );\n\t#endif\n\tgl_FragColor.rgb = mix( gl_FragColor.rgb, fogColor, fogFactor );\n#endif",fog_pars_fragment:"#ifdef USE_FOG\n\tuniform vec3 fogColor;\n\tvarying float fogDepth;\n\t#ifdef FOG_EXP2\n\t\tuniform float fogDensity;\n\t#else\n\t\tuniform float fogNear;\n\t\tuniform float fogFar;\n\t#endif\n#endif", +gradientmap_pars_fragment:"#ifdef USE_GRADIENTMAP\n\tuniform sampler2D gradientMap;\n#endif\nvec3 getGradientIrradiance( vec3 normal, vec3 lightDirection ) {\n\tfloat dotNL = dot( normal, lightDirection );\n\tvec2 coord = vec2( dotNL * 0.5 + 0.5, 0.0 );\n\t#ifdef USE_GRADIENTMAP\n\t\treturn texture2D( gradientMap, coord ).rgb;\n\t#else\n\t\treturn ( coord.x < 0.7 ) ? vec3( 0.7 ) : vec3( 1.0 );\n\t#endif\n}",lightmap_fragment:"#ifdef USE_LIGHTMAP\n\tvec4 lightMapTexel= texture2D( lightMap, vUv2 );\n\treflectedLight.indirectDiffuse += PI * lightMapTexelToLinear( lightMapTexel ).rgb * lightMapIntensity;\n#endif", +lightmap_pars_fragment:"#ifdef USE_LIGHTMAP\n\tuniform sampler2D lightMap;\n\tuniform float lightMapIntensity;\n#endif",lights_lambert_vertex:"vec3 diffuse = vec3( 1.0 );\nGeometricContext geometry;\ngeometry.position = mvPosition.xyz;\ngeometry.normal = normalize( transformedNormal );\ngeometry.viewDir = ( isOrthographic ) ? vec3( 0, 0, 1 ) : normalize( -mvPosition.xyz );\nGeometricContext backGeometry;\nbackGeometry.position = geometry.position;\nbackGeometry.normal = -geometry.normal;\nbackGeometry.viewDir = geometry.viewDir;\nvLightFront = vec3( 0.0 );\nvIndirectFront = vec3( 0.0 );\n#ifdef DOUBLE_SIDED\n\tvLightBack = vec3( 0.0 );\n\tvIndirectBack = vec3( 0.0 );\n#endif\nIncidentLight directLight;\nfloat dotNL;\nvec3 directLightColor_Diffuse;\nvIndirectFront += getAmbientLightIrradiance( ambientLightColor );\nvIndirectFront += getLightProbeIrradiance( lightProbe, geometry );\n#ifdef DOUBLE_SIDED\n\tvIndirectBack += getAmbientLightIrradiance( ambientLightColor );\n\tvIndirectBack += getLightProbeIrradiance( lightProbe, backGeometry );\n#endif\n#if NUM_POINT_LIGHTS > 0\n\t#pragma unroll_loop_start\n\tfor ( int i = 0; i < NUM_POINT_LIGHTS; i ++ ) {\n\t\tgetPointDirectLightIrradiance( pointLights[ i ], geometry, directLight );\n\t\tdotNL = dot( geometry.normal, directLight.direction );\n\t\tdirectLightColor_Diffuse = PI * directLight.color;\n\t\tvLightFront += saturate( dotNL ) * directLightColor_Diffuse;\n\t\t#ifdef DOUBLE_SIDED\n\t\t\tvLightBack += saturate( -dotNL ) * directLightColor_Diffuse;\n\t\t#endif\n\t}\n\t#pragma unroll_loop_end\n#endif\n#if NUM_SPOT_LIGHTS > 0\n\t#pragma unroll_loop_start\n\tfor ( int i = 0; i < NUM_SPOT_LIGHTS; i ++ ) {\n\t\tgetSpotDirectLightIrradiance( spotLights[ i ], geometry, directLight );\n\t\tdotNL = dot( geometry.normal, directLight.direction );\n\t\tdirectLightColor_Diffuse = PI * directLight.color;\n\t\tvLightFront += saturate( dotNL ) * directLightColor_Diffuse;\n\t\t#ifdef DOUBLE_SIDED\n\t\t\tvLightBack += saturate( -dotNL ) * directLightColor_Diffuse;\n\t\t#endif\n\t}\n\t#pragma unroll_loop_end\n#endif\n#if NUM_DIR_LIGHTS > 0\n\t#pragma unroll_loop_start\n\tfor ( int i = 0; i < NUM_DIR_LIGHTS; i ++ ) {\n\t\tgetDirectionalDirectLightIrradiance( directionalLights[ i ], geometry, directLight );\n\t\tdotNL = dot( geometry.normal, directLight.direction );\n\t\tdirectLightColor_Diffuse = PI * directLight.color;\n\t\tvLightFront += saturate( dotNL ) * directLightColor_Diffuse;\n\t\t#ifdef DOUBLE_SIDED\n\t\t\tvLightBack += saturate( -dotNL ) * directLightColor_Diffuse;\n\t\t#endif\n\t}\n\t#pragma unroll_loop_end\n#endif\n#if NUM_HEMI_LIGHTS > 0\n\t#pragma unroll_loop_start\n\tfor ( int i = 0; i < NUM_HEMI_LIGHTS; i ++ ) {\n\t\tvIndirectFront += getHemisphereLightIrradiance( hemisphereLights[ i ], geometry );\n\t\t#ifdef DOUBLE_SIDED\n\t\t\tvIndirectBack += getHemisphereLightIrradiance( hemisphereLights[ i ], backGeometry );\n\t\t#endif\n\t}\n\t#pragma unroll_loop_end\n#endif", +lights_pars_begin:"uniform bool receiveShadow;\nuniform vec3 ambientLightColor;\nuniform vec3 lightProbe[ 9 ];\nvec3 shGetIrradianceAt( in vec3 normal, in vec3 shCoefficients[ 9 ] ) {\n\tfloat x = normal.x, y = normal.y, z = normal.z;\n\tvec3 result = shCoefficients[ 0 ] * 0.886227;\n\tresult += shCoefficients[ 1 ] * 2.0 * 0.511664 * y;\n\tresult += shCoefficients[ 2 ] * 2.0 * 0.511664 * z;\n\tresult += shCoefficients[ 3 ] * 2.0 * 0.511664 * x;\n\tresult += shCoefficients[ 4 ] * 2.0 * 0.429043 * x * y;\n\tresult += shCoefficients[ 5 ] * 2.0 * 0.429043 * y * z;\n\tresult += shCoefficients[ 6 ] * ( 0.743125 * z * z - 0.247708 );\n\tresult += shCoefficients[ 7 ] * 2.0 * 0.429043 * x * z;\n\tresult += shCoefficients[ 8 ] * 0.429043 * ( x * x - y * y );\n\treturn result;\n}\nvec3 getLightProbeIrradiance( const in vec3 lightProbe[ 9 ], const in GeometricContext geometry ) {\n\tvec3 worldNormal = inverseTransformDirection( geometry.normal, viewMatrix );\n\tvec3 irradiance = shGetIrradianceAt( worldNormal, lightProbe );\n\treturn irradiance;\n}\nvec3 getAmbientLightIrradiance( const in vec3 ambientLightColor ) {\n\tvec3 irradiance = ambientLightColor;\n\t#ifndef PHYSICALLY_CORRECT_LIGHTS\n\t\tirradiance *= PI;\n\t#endif\n\treturn irradiance;\n}\n#if NUM_DIR_LIGHTS > 0\n\tstruct DirectionalLight {\n\t\tvec3 direction;\n\t\tvec3 color;\n\t};\n\tuniform DirectionalLight directionalLights[ NUM_DIR_LIGHTS ];\n\t#if defined( USE_SHADOWMAP ) && NUM_DIR_LIGHT_SHADOWS > 0\n\t\tstruct DirectionalLightShadow {\n\t\t\tfloat shadowBias;\n\t\t\tfloat shadowRadius;\n\t\t\tvec2 shadowMapSize;\n\t\t};\n\t\tuniform DirectionalLightShadow directionalLightShadows[ NUM_DIR_LIGHT_SHADOWS ];\n\t#endif\n\tvoid getDirectionalDirectLightIrradiance( const in DirectionalLight directionalLight, const in GeometricContext geometry, out IncidentLight directLight ) {\n\t\tdirectLight.color = directionalLight.color;\n\t\tdirectLight.direction = directionalLight.direction;\n\t\tdirectLight.visible = true;\n\t}\n#endif\n#if NUM_POINT_LIGHTS > 0\n\tstruct PointLight {\n\t\tvec3 position;\n\t\tvec3 color;\n\t\tfloat distance;\n\t\tfloat decay;\n\t};\n\tuniform PointLight pointLights[ NUM_POINT_LIGHTS ];\n\t#if defined( USE_SHADOWMAP ) && NUM_POINT_LIGHT_SHADOWS > 0\n\t\tstruct PointLightShadow {\n\t\t\tfloat shadowBias;\n\t\t\tfloat shadowRadius;\n\t\t\tvec2 shadowMapSize;\n\t\t\tfloat shadowCameraNear;\n\t\t\tfloat shadowCameraFar;\n\t\t};\n\t\tuniform PointLightShadow pointLightShadows[ NUM_POINT_LIGHT_SHADOWS ];\n\t#endif\n\tvoid getPointDirectLightIrradiance( const in PointLight pointLight, const in GeometricContext geometry, out IncidentLight directLight ) {\n\t\tvec3 lVector = pointLight.position - geometry.position;\n\t\tdirectLight.direction = normalize( lVector );\n\t\tfloat lightDistance = length( lVector );\n\t\tdirectLight.color = pointLight.color;\n\t\tdirectLight.color *= punctualLightIntensityToIrradianceFactor( lightDistance, pointLight.distance, pointLight.decay );\n\t\tdirectLight.visible = ( directLight.color != vec3( 0.0 ) );\n\t}\n#endif\n#if NUM_SPOT_LIGHTS > 0\n\tstruct SpotLight {\n\t\tvec3 position;\n\t\tvec3 direction;\n\t\tvec3 color;\n\t\tfloat distance;\n\t\tfloat decay;\n\t\tfloat coneCos;\n\t\tfloat penumbraCos;\n\t};\n\tuniform SpotLight spotLights[ NUM_SPOT_LIGHTS ];\n\t#if defined( USE_SHADOWMAP ) && NUM_SPOT_LIGHT_SHADOWS > 0\n\t\tstruct SpotLightShadow {\n\t\t\tfloat shadowBias;\n\t\t\tfloat shadowRadius;\n\t\t\tvec2 shadowMapSize;\n\t\t};\n\t\tuniform SpotLightShadow spotLightShadows[ NUM_SPOT_LIGHT_SHADOWS ];\n\t#endif\n\tvoid getSpotDirectLightIrradiance( const in SpotLight spotLight, const in GeometricContext geometry, out IncidentLight directLight ) {\n\t\tvec3 lVector = spotLight.position - geometry.position;\n\t\tdirectLight.direction = normalize( lVector );\n\t\tfloat lightDistance = length( lVector );\n\t\tfloat angleCos = dot( directLight.direction, spotLight.direction );\n\t\tif ( angleCos > spotLight.coneCos ) {\n\t\t\tfloat spotEffect = smoothstep( spotLight.coneCos, spotLight.penumbraCos, angleCos );\n\t\t\tdirectLight.color = spotLight.color;\n\t\t\tdirectLight.color *= spotEffect * punctualLightIntensityToIrradianceFactor( lightDistance, spotLight.distance, spotLight.decay );\n\t\t\tdirectLight.visible = true;\n\t\t} else {\n\t\t\tdirectLight.color = vec3( 0.0 );\n\t\t\tdirectLight.visible = false;\n\t\t}\n\t}\n#endif\n#if NUM_RECT_AREA_LIGHTS > 0\n\tstruct RectAreaLight {\n\t\tvec3 color;\n\t\tvec3 position;\n\t\tvec3 halfWidth;\n\t\tvec3 halfHeight;\n\t};\n\tuniform sampler2D ltc_1;\tuniform sampler2D ltc_2;\n\tuniform RectAreaLight rectAreaLights[ NUM_RECT_AREA_LIGHTS ];\n#endif\n#if NUM_HEMI_LIGHTS > 0\n\tstruct HemisphereLight {\n\t\tvec3 direction;\n\t\tvec3 skyColor;\n\t\tvec3 groundColor;\n\t};\n\tuniform HemisphereLight hemisphereLights[ NUM_HEMI_LIGHTS ];\n\tvec3 getHemisphereLightIrradiance( const in HemisphereLight hemiLight, const in GeometricContext geometry ) {\n\t\tfloat dotNL = dot( geometry.normal, hemiLight.direction );\n\t\tfloat hemiDiffuseWeight = 0.5 * dotNL + 0.5;\n\t\tvec3 irradiance = mix( hemiLight.groundColor, hemiLight.skyColor, hemiDiffuseWeight );\n\t\t#ifndef PHYSICALLY_CORRECT_LIGHTS\n\t\t\tirradiance *= PI;\n\t\t#endif\n\t\treturn irradiance;\n\t}\n#endif", +lights_toon_fragment:"ToonMaterial material;\nmaterial.diffuseColor = diffuseColor.rgb;\nmaterial.specularColor = specular;\nmaterial.specularShininess = shininess;\nmaterial.specularStrength = specularStrength;",lights_toon_pars_fragment:"varying vec3 vViewPosition;\n#ifndef FLAT_SHADED\n\tvarying vec3 vNormal;\n#endif\nstruct ToonMaterial {\n\tvec3\tdiffuseColor;\n\tvec3\tspecularColor;\n\tfloat\tspecularShininess;\n\tfloat\tspecularStrength;\n};\nvoid RE_Direct_Toon( const in IncidentLight directLight, const in GeometricContext geometry, const in ToonMaterial material, inout ReflectedLight reflectedLight ) {\n\tvec3 irradiance = getGradientIrradiance( geometry.normal, directLight.direction ) * directLight.color;\n\t#ifndef PHYSICALLY_CORRECT_LIGHTS\n\t\tirradiance *= PI;\n\t#endif\n\treflectedLight.directDiffuse += irradiance * BRDF_Diffuse_Lambert( material.diffuseColor );\n\treflectedLight.directSpecular += irradiance * BRDF_Specular_BlinnPhong( directLight, geometry, material.specularColor, material.specularShininess ) * material.specularStrength;\n}\nvoid RE_IndirectDiffuse_Toon( const in vec3 irradiance, const in GeometricContext geometry, const in ToonMaterial material, inout ReflectedLight reflectedLight ) {\n\treflectedLight.indirectDiffuse += irradiance * BRDF_Diffuse_Lambert( material.diffuseColor );\n}\n#define RE_Direct\t\t\t\tRE_Direct_Toon\n#define RE_IndirectDiffuse\t\tRE_IndirectDiffuse_Toon\n#define Material_LightProbeLOD( material )\t(0)", +lights_phong_fragment:"BlinnPhongMaterial material;\nmaterial.diffuseColor = diffuseColor.rgb;\nmaterial.specularColor = specular;\nmaterial.specularShininess = shininess;\nmaterial.specularStrength = specularStrength;",lights_phong_pars_fragment:"varying vec3 vViewPosition;\n#ifndef FLAT_SHADED\n\tvarying vec3 vNormal;\n#endif\nstruct BlinnPhongMaterial {\n\tvec3\tdiffuseColor;\n\tvec3\tspecularColor;\n\tfloat\tspecularShininess;\n\tfloat\tspecularStrength;\n};\nvoid RE_Direct_BlinnPhong( const in IncidentLight directLight, const in GeometricContext geometry, const in BlinnPhongMaterial material, inout ReflectedLight reflectedLight ) {\n\tfloat dotNL = saturate( dot( geometry.normal, directLight.direction ) );\n\tvec3 irradiance = dotNL * directLight.color;\n\t#ifndef PHYSICALLY_CORRECT_LIGHTS\n\t\tirradiance *= PI;\n\t#endif\n\treflectedLight.directDiffuse += irradiance * BRDF_Diffuse_Lambert( material.diffuseColor );\n\treflectedLight.directSpecular += irradiance * BRDF_Specular_BlinnPhong( directLight, geometry, material.specularColor, material.specularShininess ) * material.specularStrength;\n}\nvoid RE_IndirectDiffuse_BlinnPhong( const in vec3 irradiance, const in GeometricContext geometry, const in BlinnPhongMaterial material, inout ReflectedLight reflectedLight ) {\n\treflectedLight.indirectDiffuse += irradiance * BRDF_Diffuse_Lambert( material.diffuseColor );\n}\n#define RE_Direct\t\t\t\tRE_Direct_BlinnPhong\n#define RE_IndirectDiffuse\t\tRE_IndirectDiffuse_BlinnPhong\n#define Material_LightProbeLOD( material )\t(0)", +lights_physical_fragment:"PhysicalMaterial material;\nmaterial.diffuseColor = diffuseColor.rgb * ( 1.0 - metalnessFactor );\nvec3 dxy = max( abs( dFdx( geometryNormal ) ), abs( dFdy( geometryNormal ) ) );\nfloat geometryRoughness = max( max( dxy.x, dxy.y ), dxy.z );\nmaterial.specularRoughness = max( roughnessFactor, 0.0525 );material.specularRoughness += geometryRoughness;\nmaterial.specularRoughness = min( material.specularRoughness, 1.0 );\n#ifdef REFLECTIVITY\n\tmaterial.specularColor = mix( vec3( MAXIMUM_SPECULAR_COEFFICIENT * pow2( reflectivity ) ), diffuseColor.rgb, metalnessFactor );\n#else\n\tmaterial.specularColor = mix( vec3( DEFAULT_SPECULAR_COEFFICIENT ), diffuseColor.rgb, metalnessFactor );\n#endif\n#ifdef CLEARCOAT\n\tmaterial.clearcoat = clearcoat;\n\tmaterial.clearcoatRoughness = clearcoatRoughness;\n\t#ifdef USE_CLEARCOATMAP\n\t\tmaterial.clearcoat *= texture2D( clearcoatMap, vUv ).x;\n\t#endif\n\t#ifdef USE_CLEARCOAT_ROUGHNESSMAP\n\t\tmaterial.clearcoatRoughness *= texture2D( clearcoatRoughnessMap, vUv ).y;\n\t#endif\n\tmaterial.clearcoat = saturate( material.clearcoat );\tmaterial.clearcoatRoughness = max( material.clearcoatRoughness, 0.0525 );\n\tmaterial.clearcoatRoughness += geometryRoughness;\n\tmaterial.clearcoatRoughness = min( material.clearcoatRoughness, 1.0 );\n#endif\n#ifdef USE_SHEEN\n\tmaterial.sheenColor = sheen;\n#endif", +lights_physical_pars_fragment:"struct PhysicalMaterial {\n\tvec3\tdiffuseColor;\n\tfloat\tspecularRoughness;\n\tvec3\tspecularColor;\n#ifdef CLEARCOAT\n\tfloat clearcoat;\n\tfloat clearcoatRoughness;\n#endif\n#ifdef USE_SHEEN\n\tvec3 sheenColor;\n#endif\n};\n#define MAXIMUM_SPECULAR_COEFFICIENT 0.16\n#define DEFAULT_SPECULAR_COEFFICIENT 0.04\nfloat clearcoatDHRApprox( const in float roughness, const in float dotNL ) {\n\treturn DEFAULT_SPECULAR_COEFFICIENT + ( 1.0 - DEFAULT_SPECULAR_COEFFICIENT ) * ( pow( 1.0 - dotNL, 5.0 ) * pow( 1.0 - roughness, 2.0 ) );\n}\n#if NUM_RECT_AREA_LIGHTS > 0\n\tvoid RE_Direct_RectArea_Physical( const in RectAreaLight rectAreaLight, const in GeometricContext geometry, const in PhysicalMaterial material, inout ReflectedLight reflectedLight ) {\n\t\tvec3 normal = geometry.normal;\n\t\tvec3 viewDir = geometry.viewDir;\n\t\tvec3 position = geometry.position;\n\t\tvec3 lightPos = rectAreaLight.position;\n\t\tvec3 halfWidth = rectAreaLight.halfWidth;\n\t\tvec3 halfHeight = rectAreaLight.halfHeight;\n\t\tvec3 lightColor = rectAreaLight.color;\n\t\tfloat roughness = material.specularRoughness;\n\t\tvec3 rectCoords[ 4 ];\n\t\trectCoords[ 0 ] = lightPos + halfWidth - halfHeight;\t\trectCoords[ 1 ] = lightPos - halfWidth - halfHeight;\n\t\trectCoords[ 2 ] = lightPos - halfWidth + halfHeight;\n\t\trectCoords[ 3 ] = lightPos + halfWidth + halfHeight;\n\t\tvec2 uv = LTC_Uv( normal, viewDir, roughness );\n\t\tvec4 t1 = texture2D( ltc_1, uv );\n\t\tvec4 t2 = texture2D( ltc_2, uv );\n\t\tmat3 mInv = mat3(\n\t\t\tvec3( t1.x, 0, t1.y ),\n\t\t\tvec3( 0, 1, 0 ),\n\t\t\tvec3( t1.z, 0, t1.w )\n\t\t);\n\t\tvec3 fresnel = ( material.specularColor * t2.x + ( vec3( 1.0 ) - material.specularColor ) * t2.y );\n\t\treflectedLight.directSpecular += lightColor * fresnel * LTC_Evaluate( normal, viewDir, position, mInv, rectCoords );\n\t\treflectedLight.directDiffuse += lightColor * material.diffuseColor * LTC_Evaluate( normal, viewDir, position, mat3( 1.0 ), rectCoords );\n\t}\n#endif\nvoid RE_Direct_Physical( const in IncidentLight directLight, const in GeometricContext geometry, const in PhysicalMaterial material, inout ReflectedLight reflectedLight ) {\n\tfloat dotNL = saturate( dot( geometry.normal, directLight.direction ) );\n\tvec3 irradiance = dotNL * directLight.color;\n\t#ifndef PHYSICALLY_CORRECT_LIGHTS\n\t\tirradiance *= PI;\n\t#endif\n\t#ifdef CLEARCOAT\n\t\tfloat ccDotNL = saturate( dot( geometry.clearcoatNormal, directLight.direction ) );\n\t\tvec3 ccIrradiance = ccDotNL * directLight.color;\n\t\t#ifndef PHYSICALLY_CORRECT_LIGHTS\n\t\t\tccIrradiance *= PI;\n\t\t#endif\n\t\tfloat clearcoatDHR = material.clearcoat * clearcoatDHRApprox( material.clearcoatRoughness, ccDotNL );\n\t\treflectedLight.directSpecular += ccIrradiance * material.clearcoat * BRDF_Specular_GGX( directLight, geometry.viewDir, geometry.clearcoatNormal, vec3( DEFAULT_SPECULAR_COEFFICIENT ), material.clearcoatRoughness );\n\t#else\n\t\tfloat clearcoatDHR = 0.0;\n\t#endif\n\t#ifdef USE_SHEEN\n\t\treflectedLight.directSpecular += ( 1.0 - clearcoatDHR ) * irradiance * BRDF_Specular_Sheen(\n\t\t\tmaterial.specularRoughness,\n\t\t\tdirectLight.direction,\n\t\t\tgeometry,\n\t\t\tmaterial.sheenColor\n\t\t);\n\t#else\n\t\treflectedLight.directSpecular += ( 1.0 - clearcoatDHR ) * irradiance * BRDF_Specular_GGX( directLight, geometry.viewDir, geometry.normal, material.specularColor, material.specularRoughness);\n\t#endif\n\treflectedLight.directDiffuse += ( 1.0 - clearcoatDHR ) * irradiance * BRDF_Diffuse_Lambert( material.diffuseColor );\n}\nvoid RE_IndirectDiffuse_Physical( const in vec3 irradiance, const in GeometricContext geometry, const in PhysicalMaterial material, inout ReflectedLight reflectedLight ) {\n\treflectedLight.indirectDiffuse += irradiance * BRDF_Diffuse_Lambert( material.diffuseColor );\n}\nvoid RE_IndirectSpecular_Physical( const in vec3 radiance, const in vec3 irradiance, const in vec3 clearcoatRadiance, const in GeometricContext geometry, const in PhysicalMaterial material, inout ReflectedLight reflectedLight) {\n\t#ifdef CLEARCOAT\n\t\tfloat ccDotNV = saturate( dot( geometry.clearcoatNormal, geometry.viewDir ) );\n\t\treflectedLight.indirectSpecular += clearcoatRadiance * material.clearcoat * BRDF_Specular_GGX_Environment( geometry.viewDir, geometry.clearcoatNormal, vec3( DEFAULT_SPECULAR_COEFFICIENT ), material.clearcoatRoughness );\n\t\tfloat ccDotNL = ccDotNV;\n\t\tfloat clearcoatDHR = material.clearcoat * clearcoatDHRApprox( material.clearcoatRoughness, ccDotNL );\n\t#else\n\t\tfloat clearcoatDHR = 0.0;\n\t#endif\n\tfloat clearcoatInv = 1.0 - clearcoatDHR;\n\tvec3 singleScattering = vec3( 0.0 );\n\tvec3 multiScattering = vec3( 0.0 );\n\tvec3 cosineWeightedIrradiance = irradiance * RECIPROCAL_PI;\n\tBRDF_Specular_Multiscattering_Environment( geometry, material.specularColor, material.specularRoughness, singleScattering, multiScattering );\n\tvec3 diffuse = material.diffuseColor * ( 1.0 - ( singleScattering + multiScattering ) );\n\treflectedLight.indirectSpecular += clearcoatInv * radiance * singleScattering;\n\treflectedLight.indirectSpecular += multiScattering * cosineWeightedIrradiance;\n\treflectedLight.indirectDiffuse += diffuse * cosineWeightedIrradiance;\n}\n#define RE_Direct\t\t\t\tRE_Direct_Physical\n#define RE_Direct_RectArea\t\tRE_Direct_RectArea_Physical\n#define RE_IndirectDiffuse\t\tRE_IndirectDiffuse_Physical\n#define RE_IndirectSpecular\t\tRE_IndirectSpecular_Physical\nfloat computeSpecularOcclusion( const in float dotNV, const in float ambientOcclusion, const in float roughness ) {\n\treturn saturate( pow( dotNV + ambientOcclusion, exp2( - 16.0 * roughness - 1.0 ) ) - 1.0 + ambientOcclusion );\n}", +lights_fragment_begin:"\nGeometricContext geometry;\ngeometry.position = - vViewPosition;\ngeometry.normal = normal;\ngeometry.viewDir = ( isOrthographic ) ? vec3( 0, 0, 1 ) : normalize( vViewPosition );\n#ifdef CLEARCOAT\n\tgeometry.clearcoatNormal = clearcoatNormal;\n#endif\nIncidentLight directLight;\n#if ( NUM_POINT_LIGHTS > 0 ) && defined( RE_Direct )\n\tPointLight pointLight;\n\t#if defined( USE_SHADOWMAP ) && NUM_POINT_LIGHT_SHADOWS > 0\n\tPointLightShadow pointLightShadow;\n\t#endif\n\t#pragma unroll_loop_start\n\tfor ( int i = 0; i < NUM_POINT_LIGHTS; i ++ ) {\n\t\tpointLight = pointLights[ i ];\n\t\tgetPointDirectLightIrradiance( pointLight, geometry, directLight );\n\t\t#if defined( USE_SHADOWMAP ) && ( UNROLLED_LOOP_INDEX < NUM_POINT_LIGHT_SHADOWS )\n\t\tpointLightShadow = pointLightShadows[ i ];\n\t\tdirectLight.color *= all( bvec2( directLight.visible, receiveShadow ) ) ? getPointShadow( pointShadowMap[ i ], pointLightShadow.shadowMapSize, pointLightShadow.shadowBias, pointLightShadow.shadowRadius, vPointShadowCoord[ i ], pointLightShadow.shadowCameraNear, pointLightShadow.shadowCameraFar ) : 1.0;\n\t\t#endif\n\t\tRE_Direct( directLight, geometry, material, reflectedLight );\n\t}\n\t#pragma unroll_loop_end\n#endif\n#if ( NUM_SPOT_LIGHTS > 0 ) && defined( RE_Direct )\n\tSpotLight spotLight;\n\t#if defined( USE_SHADOWMAP ) && NUM_SPOT_LIGHT_SHADOWS > 0\n\tSpotLightShadow spotLightShadow;\n\t#endif\n\t#pragma unroll_loop_start\n\tfor ( int i = 0; i < NUM_SPOT_LIGHTS; i ++ ) {\n\t\tspotLight = spotLights[ i ];\n\t\tgetSpotDirectLightIrradiance( spotLight, geometry, directLight );\n\t\t#if defined( USE_SHADOWMAP ) && ( UNROLLED_LOOP_INDEX < NUM_SPOT_LIGHT_SHADOWS )\n\t\tspotLightShadow = spotLightShadows[ i ];\n\t\tdirectLight.color *= all( bvec2( directLight.visible, receiveShadow ) ) ? getShadow( spotShadowMap[ i ], spotLightShadow.shadowMapSize, spotLightShadow.shadowBias, spotLightShadow.shadowRadius, vSpotShadowCoord[ i ] ) : 1.0;\n\t\t#endif\n\t\tRE_Direct( directLight, geometry, material, reflectedLight );\n\t}\n\t#pragma unroll_loop_end\n#endif\n#if ( NUM_DIR_LIGHTS > 0 ) && defined( RE_Direct )\n\tDirectionalLight directionalLight;\n\t#if defined( USE_SHADOWMAP ) && NUM_DIR_LIGHT_SHADOWS > 0\n\tDirectionalLightShadow directionalLightShadow;\n\t#endif\n\t#pragma unroll_loop_start\n\tfor ( int i = 0; i < NUM_DIR_LIGHTS; i ++ ) {\n\t\tdirectionalLight = directionalLights[ i ];\n\t\tgetDirectionalDirectLightIrradiance( directionalLight, geometry, directLight );\n\t\t#if defined( USE_SHADOWMAP ) && ( UNROLLED_LOOP_INDEX < NUM_DIR_LIGHT_SHADOWS )\n\t\tdirectionalLightShadow = directionalLightShadows[ i ];\n\t\tdirectLight.color *= all( bvec2( directLight.visible, receiveShadow ) ) ? getShadow( directionalShadowMap[ i ], directionalLightShadow.shadowMapSize, directionalLightShadow.shadowBias, directionalLightShadow.shadowRadius, vDirectionalShadowCoord[ i ] ) : 1.0;\n\t\t#endif\n\t\tRE_Direct( directLight, geometry, material, reflectedLight );\n\t}\n\t#pragma unroll_loop_end\n#endif\n#if ( NUM_RECT_AREA_LIGHTS > 0 ) && defined( RE_Direct_RectArea )\n\tRectAreaLight rectAreaLight;\n\t#pragma unroll_loop_start\n\tfor ( int i = 0; i < NUM_RECT_AREA_LIGHTS; i ++ ) {\n\t\trectAreaLight = rectAreaLights[ i ];\n\t\tRE_Direct_RectArea( rectAreaLight, geometry, material, reflectedLight );\n\t}\n\t#pragma unroll_loop_end\n#endif\n#if defined( RE_IndirectDiffuse )\n\tvec3 iblIrradiance = vec3( 0.0 );\n\tvec3 irradiance = getAmbientLightIrradiance( ambientLightColor );\n\tirradiance += getLightProbeIrradiance( lightProbe, geometry );\n\t#if ( NUM_HEMI_LIGHTS > 0 )\n\t\t#pragma unroll_loop_start\n\t\tfor ( int i = 0; i < NUM_HEMI_LIGHTS; i ++ ) {\n\t\t\tirradiance += getHemisphereLightIrradiance( hemisphereLights[ i ], geometry );\n\t\t}\n\t\t#pragma unroll_loop_end\n\t#endif\n#endif\n#if defined( RE_IndirectSpecular )\n\tvec3 radiance = vec3( 0.0 );\n\tvec3 clearcoatRadiance = vec3( 0.0 );\n#endif", +lights_fragment_maps:"#if defined( RE_IndirectDiffuse )\n\t#ifdef USE_LIGHTMAP\n\t\tvec4 lightMapTexel= texture2D( lightMap, vUv2 );\n\t\tvec3 lightMapIrradiance = lightMapTexelToLinear( lightMapTexel ).rgb * lightMapIntensity;\n\t\t#ifndef PHYSICALLY_CORRECT_LIGHTS\n\t\t\tlightMapIrradiance *= PI;\n\t\t#endif\n\t\tirradiance += lightMapIrradiance;\n\t#endif\n\t#if defined( USE_ENVMAP ) && defined( STANDARD ) && defined( ENVMAP_TYPE_CUBE_UV )\n\t\tiblIrradiance += getLightProbeIndirectIrradiance( geometry, maxMipLevel );\n\t#endif\n#endif\n#if defined( USE_ENVMAP ) && defined( RE_IndirectSpecular )\n\tradiance += getLightProbeIndirectRadiance( geometry.viewDir, geometry.normal, material.specularRoughness, maxMipLevel );\n\t#ifdef CLEARCOAT\n\t\tclearcoatRadiance += getLightProbeIndirectRadiance( geometry.viewDir, geometry.clearcoatNormal, material.clearcoatRoughness, maxMipLevel );\n\t#endif\n#endif", +lights_fragment_end:"#if defined( RE_IndirectDiffuse )\n\tRE_IndirectDiffuse( irradiance, geometry, material, reflectedLight );\n#endif\n#if defined( RE_IndirectSpecular )\n\tRE_IndirectSpecular( radiance, iblIrradiance, clearcoatRadiance, geometry, material, reflectedLight );\n#endif",logdepthbuf_fragment:"#if defined( USE_LOGDEPTHBUF ) && defined( USE_LOGDEPTHBUF_EXT )\n\tgl_FragDepthEXT = vIsPerspective == 0.0 ? gl_FragCoord.z : log2( vFragDepth ) * logDepthBufFC * 0.5;\n#endif",logdepthbuf_pars_fragment:"#if defined( USE_LOGDEPTHBUF ) && defined( USE_LOGDEPTHBUF_EXT )\n\tuniform float logDepthBufFC;\n\tvarying float vFragDepth;\n\tvarying float vIsPerspective;\n#endif", +logdepthbuf_pars_vertex:"#ifdef USE_LOGDEPTHBUF\n\t#ifdef USE_LOGDEPTHBUF_EXT\n\t\tvarying float vFragDepth;\n\t\tvarying float vIsPerspective;\n\t#else\n\t\tuniform float logDepthBufFC;\n\t#endif\n#endif",logdepthbuf_vertex:"#ifdef USE_LOGDEPTHBUF\n\t#ifdef USE_LOGDEPTHBUF_EXT\n\t\tvFragDepth = 1.0 + gl_Position.w;\n\t\tvIsPerspective = float( isPerspectiveMatrix( projectionMatrix ) );\n\t#else\n\t\tif ( isPerspectiveMatrix( projectionMatrix ) ) {\n\t\t\tgl_Position.z = log2( max( EPSILON, gl_Position.w + 1.0 ) ) * logDepthBufFC - 1.0;\n\t\t\tgl_Position.z *= gl_Position.w;\n\t\t}\n\t#endif\n#endif", +map_fragment:"#ifdef USE_MAP\n\tvec4 texelColor = texture2D( map, vUv );\n\ttexelColor = mapTexelToLinear( texelColor );\n\tdiffuseColor *= texelColor;\n#endif",map_pars_fragment:"#ifdef USE_MAP\n\tuniform sampler2D map;\n#endif",map_particle_fragment:"#if defined( USE_MAP ) || defined( USE_ALPHAMAP )\n\tvec2 uv = ( uvTransform * vec3( gl_PointCoord.x, 1.0 - gl_PointCoord.y, 1 ) ).xy;\n#endif\n#ifdef USE_MAP\n\tvec4 mapTexel = texture2D( map, uv );\n\tdiffuseColor *= mapTexelToLinear( mapTexel );\n#endif\n#ifdef USE_ALPHAMAP\n\tdiffuseColor.a *= texture2D( alphaMap, uv ).g;\n#endif", +map_particle_pars_fragment:"#if defined( USE_MAP ) || defined( USE_ALPHAMAP )\n\tuniform mat3 uvTransform;\n#endif\n#ifdef USE_MAP\n\tuniform sampler2D map;\n#endif\n#ifdef USE_ALPHAMAP\n\tuniform sampler2D alphaMap;\n#endif",metalnessmap_fragment:"float metalnessFactor = metalness;\n#ifdef USE_METALNESSMAP\n\tvec4 texelMetalness = texture2D( metalnessMap, vUv );\n\tmetalnessFactor *= texelMetalness.b;\n#endif",metalnessmap_pars_fragment:"#ifdef USE_METALNESSMAP\n\tuniform sampler2D metalnessMap;\n#endif", +morphnormal_vertex:"#ifdef USE_MORPHNORMALS\n\tobjectNormal *= morphTargetBaseInfluence;\n\tobjectNormal += morphNormal0 * morphTargetInfluences[ 0 ];\n\tobjectNormal += morphNormal1 * morphTargetInfluences[ 1 ];\n\tobjectNormal += morphNormal2 * morphTargetInfluences[ 2 ];\n\tobjectNormal += morphNormal3 * morphTargetInfluences[ 3 ];\n#endif",morphtarget_pars_vertex:"#ifdef USE_MORPHTARGETS\n\tuniform float morphTargetBaseInfluence;\n\t#ifndef USE_MORPHNORMALS\n\tuniform float morphTargetInfluences[ 8 ];\n\t#else\n\tuniform float morphTargetInfluences[ 4 ];\n\t#endif\n#endif", +morphtarget_vertex:"#ifdef USE_MORPHTARGETS\n\ttransformed *= morphTargetBaseInfluence;\n\ttransformed += morphTarget0 * morphTargetInfluences[ 0 ];\n\ttransformed += morphTarget1 * morphTargetInfluences[ 1 ];\n\ttransformed += morphTarget2 * morphTargetInfluences[ 2 ];\n\ttransformed += morphTarget3 * morphTargetInfluences[ 3 ];\n\t#ifndef USE_MORPHNORMALS\n\ttransformed += morphTarget4 * morphTargetInfluences[ 4 ];\n\ttransformed += morphTarget5 * morphTargetInfluences[ 5 ];\n\ttransformed += morphTarget6 * morphTargetInfluences[ 6 ];\n\ttransformed += morphTarget7 * morphTargetInfluences[ 7 ];\n\t#endif\n#endif", +normal_fragment_begin:"#ifdef FLAT_SHADED\n\tvec3 fdx = vec3( dFdx( vViewPosition.x ), dFdx( vViewPosition.y ), dFdx( vViewPosition.z ) );\n\tvec3 fdy = vec3( dFdy( vViewPosition.x ), dFdy( vViewPosition.y ), dFdy( vViewPosition.z ) );\n\tvec3 normal = normalize( cross( fdx, fdy ) );\n#else\n\tvec3 normal = normalize( vNormal );\n\t#ifdef DOUBLE_SIDED\n\t\tnormal = normal * ( float( gl_FrontFacing ) * 2.0 - 1.0 );\n\t#endif\n\t#ifdef USE_TANGENT\n\t\tvec3 tangent = normalize( vTangent );\n\t\tvec3 bitangent = normalize( vBitangent );\n\t\t#ifdef DOUBLE_SIDED\n\t\t\ttangent = tangent * ( float( gl_FrontFacing ) * 2.0 - 1.0 );\n\t\t\tbitangent = bitangent * ( float( gl_FrontFacing ) * 2.0 - 1.0 );\n\t\t#endif\n\t\t#if defined( TANGENTSPACE_NORMALMAP ) || defined( USE_CLEARCOAT_NORMALMAP )\n\t\t\tmat3 vTBN = mat3( tangent, bitangent, normal );\n\t\t#endif\n\t#endif\n#endif\nvec3 geometryNormal = normal;", +normal_fragment_maps:"#ifdef OBJECTSPACE_NORMALMAP\n\tnormal = texture2D( normalMap, vUv ).xyz * 2.0 - 1.0;\n\t#ifdef FLIP_SIDED\n\t\tnormal = - normal;\n\t#endif\n\t#ifdef DOUBLE_SIDED\n\t\tnormal = normal * ( float( gl_FrontFacing ) * 2.0 - 1.0 );\n\t#endif\n\tnormal = normalize( normalMatrix * normal );\n#elif defined( TANGENTSPACE_NORMALMAP )\n\tvec3 mapN = texture2D( normalMap, vUv ).xyz * 2.0 - 1.0;\n\tmapN.xy *= normalScale;\n\t#ifdef USE_TANGENT\n\t\tnormal = normalize( vTBN * mapN );\n\t#else\n\t\tnormal = perturbNormal2Arb( -vViewPosition, normal, mapN );\n\t#endif\n#elif defined( USE_BUMPMAP )\n\tnormal = perturbNormalArb( -vViewPosition, normal, dHdxy_fwd() );\n#endif", +normalmap_pars_fragment:"#ifdef USE_NORMALMAP\n\tuniform sampler2D normalMap;\n\tuniform vec2 normalScale;\n#endif\n#ifdef OBJECTSPACE_NORMALMAP\n\tuniform mat3 normalMatrix;\n#endif\n#if ! defined ( USE_TANGENT ) && ( defined ( TANGENTSPACE_NORMALMAP ) || defined ( USE_CLEARCOAT_NORMALMAP ) )\n\tvec3 perturbNormal2Arb( vec3 eye_pos, vec3 surf_norm, vec3 mapN ) {\n\t\tvec3 q0 = vec3( dFdx( eye_pos.x ), dFdx( eye_pos.y ), dFdx( eye_pos.z ) );\n\t\tvec3 q1 = vec3( dFdy( eye_pos.x ), dFdy( eye_pos.y ), dFdy( eye_pos.z ) );\n\t\tvec2 st0 = dFdx( vUv.st );\n\t\tvec2 st1 = dFdy( vUv.st );\n\t\tfloat scale = sign( st1.t * st0.s - st0.t * st1.s );\n\t\tvec3 S = normalize( ( q0 * st1.t - q1 * st0.t ) * scale );\n\t\tvec3 T = normalize( ( - q0 * st1.s + q1 * st0.s ) * scale );\n\t\tvec3 N = normalize( surf_norm );\n\t\tmat3 tsn = mat3( S, T, N );\n\t\tmapN.xy *= ( float( gl_FrontFacing ) * 2.0 - 1.0 );\n\t\treturn normalize( tsn * mapN );\n\t}\n#endif", +clearcoat_normal_fragment_begin:"#ifdef CLEARCOAT\n\tvec3 clearcoatNormal = geometryNormal;\n#endif",clearcoat_normal_fragment_maps:"#ifdef USE_CLEARCOAT_NORMALMAP\n\tvec3 clearcoatMapN = texture2D( clearcoatNormalMap, vUv ).xyz * 2.0 - 1.0;\n\tclearcoatMapN.xy *= clearcoatNormalScale;\n\t#ifdef USE_TANGENT\n\t\tclearcoatNormal = normalize( vTBN * clearcoatMapN );\n\t#else\n\t\tclearcoatNormal = perturbNormal2Arb( - vViewPosition, clearcoatNormal, clearcoatMapN );\n\t#endif\n#endif",clearcoat_pars_fragment:"#ifdef USE_CLEARCOATMAP\n\tuniform sampler2D clearcoatMap;\n#endif\n#ifdef USE_CLEARCOAT_ROUGHNESSMAP\n\tuniform sampler2D clearcoatRoughnessMap;\n#endif\n#ifdef USE_CLEARCOAT_NORMALMAP\n\tuniform sampler2D clearcoatNormalMap;\n\tuniform vec2 clearcoatNormalScale;\n#endif", +packing:"vec3 packNormalToRGB( const in vec3 normal ) {\n\treturn normalize( normal ) * 0.5 + 0.5;\n}\nvec3 unpackRGBToNormal( const in vec3 rgb ) {\n\treturn 2.0 * rgb.xyz - 1.0;\n}\nconst float PackUpscale = 256. / 255.;const float UnpackDownscale = 255. / 256.;\nconst vec3 PackFactors = vec3( 256. * 256. * 256., 256. * 256., 256. );\nconst vec4 UnpackFactors = UnpackDownscale / vec4( PackFactors, 1. );\nconst float ShiftRight8 = 1. / 256.;\nvec4 packDepthToRGBA( const in float v ) {\n\tvec4 r = vec4( fract( v * PackFactors ), v );\n\tr.yzw -= r.xyz * ShiftRight8;\treturn r * PackUpscale;\n}\nfloat unpackRGBAToDepth( const in vec4 v ) {\n\treturn dot( v, UnpackFactors );\n}\nvec4 pack2HalfToRGBA( vec2 v ) {\n\tvec4 r = vec4( v.x, fract( v.x * 255.0 ), v.y, fract( v.y * 255.0 ));\n\treturn vec4( r.x - r.y / 255.0, r.y, r.z - r.w / 255.0, r.w);\n}\nvec2 unpackRGBATo2Half( vec4 v ) {\n\treturn vec2( v.x + ( v.y / 255.0 ), v.z + ( v.w / 255.0 ) );\n}\nfloat viewZToOrthographicDepth( const in float viewZ, const in float near, const in float far ) {\n\treturn ( viewZ + near ) / ( near - far );\n}\nfloat orthographicDepthToViewZ( const in float linearClipZ, const in float near, const in float far ) {\n\treturn linearClipZ * ( near - far ) - near;\n}\nfloat viewZToPerspectiveDepth( const in float viewZ, const in float near, const in float far ) {\n\treturn (( near + viewZ ) * far ) / (( far - near ) * viewZ );\n}\nfloat perspectiveDepthToViewZ( const in float invClipZ, const in float near, const in float far ) {\n\treturn ( near * far ) / ( ( far - near ) * invClipZ - far );\n}", +premultiplied_alpha_fragment:"#ifdef PREMULTIPLIED_ALPHA\n\tgl_FragColor.rgb *= gl_FragColor.a;\n#endif",project_vertex:"vec4 mvPosition = vec4( transformed, 1.0 );\n#ifdef USE_INSTANCING\n\tmvPosition = instanceMatrix * mvPosition;\n#endif\nmvPosition = modelViewMatrix * mvPosition;\ngl_Position = projectionMatrix * mvPosition;",dithering_fragment:"#ifdef DITHERING\n\tgl_FragColor.rgb = dithering( gl_FragColor.rgb );\n#endif",dithering_pars_fragment:"#ifdef DITHERING\n\tvec3 dithering( vec3 color ) {\n\t\tfloat grid_position = rand( gl_FragCoord.xy );\n\t\tvec3 dither_shift_RGB = vec3( 0.25 / 255.0, -0.25 / 255.0, 0.25 / 255.0 );\n\t\tdither_shift_RGB = mix( 2.0 * dither_shift_RGB, -2.0 * dither_shift_RGB, grid_position );\n\t\treturn color + dither_shift_RGB;\n\t}\n#endif", +roughnessmap_fragment:"float roughnessFactor = roughness;\n#ifdef USE_ROUGHNESSMAP\n\tvec4 texelRoughness = texture2D( roughnessMap, vUv );\n\troughnessFactor *= texelRoughness.g;\n#endif",roughnessmap_pars_fragment:"#ifdef USE_ROUGHNESSMAP\n\tuniform sampler2D roughnessMap;\n#endif",shadowmap_pars_fragment:"#ifdef USE_SHADOWMAP\n\t#if NUM_DIR_LIGHT_SHADOWS > 0\n\t\tuniform sampler2D directionalShadowMap[ NUM_DIR_LIGHT_SHADOWS ];\n\t\tvarying vec4 vDirectionalShadowCoord[ NUM_DIR_LIGHT_SHADOWS ];\n\t#endif\n\t#if NUM_SPOT_LIGHT_SHADOWS > 0\n\t\tuniform sampler2D spotShadowMap[ NUM_SPOT_LIGHT_SHADOWS ];\n\t\tvarying vec4 vSpotShadowCoord[ NUM_SPOT_LIGHT_SHADOWS ];\n\t#endif\n\t#if NUM_POINT_LIGHT_SHADOWS > 0\n\t\tuniform sampler2D pointShadowMap[ NUM_POINT_LIGHT_SHADOWS ];\n\t\tvarying vec4 vPointShadowCoord[ NUM_POINT_LIGHT_SHADOWS ];\n\t#endif\n\tfloat texture2DCompare( sampler2D depths, vec2 uv, float compare ) {\n\t\treturn step( compare, unpackRGBAToDepth( texture2D( depths, uv ) ) );\n\t}\n\tvec2 texture2DDistribution( sampler2D shadow, vec2 uv ) {\n\t\treturn unpackRGBATo2Half( texture2D( shadow, uv ) );\n\t}\n\tfloat VSMShadow (sampler2D shadow, vec2 uv, float compare ){\n\t\tfloat occlusion = 1.0;\n\t\tvec2 distribution = texture2DDistribution( shadow, uv );\n\t\tfloat hard_shadow = step( compare , distribution.x );\n\t\tif (hard_shadow != 1.0 ) {\n\t\t\tfloat distance = compare - distribution.x ;\n\t\t\tfloat variance = max( 0.00000, distribution.y * distribution.y );\n\t\t\tfloat softness_probability = variance / (variance + distance * distance );\t\t\tsoftness_probability = clamp( ( softness_probability - 0.3 ) / ( 0.95 - 0.3 ), 0.0, 1.0 );\t\t\tocclusion = clamp( max( hard_shadow, softness_probability ), 0.0, 1.0 );\n\t\t}\n\t\treturn occlusion;\n\t}\n\tfloat getShadow( sampler2D shadowMap, vec2 shadowMapSize, float shadowBias, float shadowRadius, vec4 shadowCoord ) {\n\t\tfloat shadow = 1.0;\n\t\tshadowCoord.xyz /= shadowCoord.w;\n\t\tshadowCoord.z += shadowBias;\n\t\tbvec4 inFrustumVec = bvec4 ( shadowCoord.x >= 0.0, shadowCoord.x <= 1.0, shadowCoord.y >= 0.0, shadowCoord.y <= 1.0 );\n\t\tbool inFrustum = all( inFrustumVec );\n\t\tbvec2 frustumTestVec = bvec2( inFrustum, shadowCoord.z <= 1.0 );\n\t\tbool frustumTest = all( frustumTestVec );\n\t\tif ( frustumTest ) {\n\t\t#if defined( SHADOWMAP_TYPE_PCF )\n\t\t\tvec2 texelSize = vec2( 1.0 ) / shadowMapSize;\n\t\t\tfloat dx0 = - texelSize.x * shadowRadius;\n\t\t\tfloat dy0 = - texelSize.y * shadowRadius;\n\t\t\tfloat dx1 = + texelSize.x * shadowRadius;\n\t\t\tfloat dy1 = + texelSize.y * shadowRadius;\n\t\t\tfloat dx2 = dx0 / 2.0;\n\t\t\tfloat dy2 = dy0 / 2.0;\n\t\t\tfloat dx3 = dx1 / 2.0;\n\t\t\tfloat dy3 = dy1 / 2.0;\n\t\t\tshadow = (\n\t\t\t\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( dx0, dy0 ), shadowCoord.z ) +\n\t\t\t\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( 0.0, dy0 ), shadowCoord.z ) +\n\t\t\t\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( dx1, dy0 ), shadowCoord.z ) +\n\t\t\t\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( dx2, dy2 ), shadowCoord.z ) +\n\t\t\t\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( 0.0, dy2 ), shadowCoord.z ) +\n\t\t\t\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( dx3, dy2 ), shadowCoord.z ) +\n\t\t\t\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( dx0, 0.0 ), shadowCoord.z ) +\n\t\t\t\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( dx2, 0.0 ), shadowCoord.z ) +\n\t\t\t\ttexture2DCompare( shadowMap, shadowCoord.xy, shadowCoord.z ) +\n\t\t\t\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( dx3, 0.0 ), shadowCoord.z ) +\n\t\t\t\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( dx1, 0.0 ), shadowCoord.z ) +\n\t\t\t\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( dx2, dy3 ), shadowCoord.z ) +\n\t\t\t\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( 0.0, dy3 ), shadowCoord.z ) +\n\t\t\t\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( dx3, dy3 ), shadowCoord.z ) +\n\t\t\t\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( dx0, dy1 ), shadowCoord.z ) +\n\t\t\t\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( 0.0, dy1 ), shadowCoord.z ) +\n\t\t\t\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( dx1, dy1 ), shadowCoord.z )\n\t\t\t) * ( 1.0 / 17.0 );\n\t\t#elif defined( SHADOWMAP_TYPE_PCF_SOFT )\n\t\t\tvec2 texelSize = vec2( 1.0 ) / shadowMapSize;\n\t\t\tfloat dx = texelSize.x;\n\t\t\tfloat dy = texelSize.y;\n\t\t\tvec2 uv = shadowCoord.xy;\n\t\t\tvec2 f = fract( uv * shadowMapSize + 0.5 );\n\t\t\tuv -= f * texelSize;\n\t\t\tshadow = (\n\t\t\t\ttexture2DCompare( shadowMap, uv, shadowCoord.z ) +\n\t\t\t\ttexture2DCompare( shadowMap, uv + vec2( dx, 0.0 ), shadowCoord.z ) +\n\t\t\t\ttexture2DCompare( shadowMap, uv + vec2( 0.0, dy ), shadowCoord.z ) +\n\t\t\t\ttexture2DCompare( shadowMap, uv + texelSize, shadowCoord.z ) +\n\t\t\t\tmix( texture2DCompare( shadowMap, uv + vec2( -dx, 0.0 ), shadowCoord.z ), \n\t\t\t\t\t texture2DCompare( shadowMap, uv + vec2( 2.0 * dx, 0.0 ), shadowCoord.z ),\n\t\t\t\t\t f.x ) +\n\t\t\t\tmix( texture2DCompare( shadowMap, uv + vec2( -dx, dy ), shadowCoord.z ), \n\t\t\t\t\t texture2DCompare( shadowMap, uv + vec2( 2.0 * dx, dy ), shadowCoord.z ),\n\t\t\t\t\t f.x ) +\n\t\t\t\tmix( texture2DCompare( shadowMap, uv + vec2( 0.0, -dy ), shadowCoord.z ), \n\t\t\t\t\t texture2DCompare( shadowMap, uv + vec2( 0.0, 2.0 * dy ), shadowCoord.z ),\n\t\t\t\t\t f.y ) +\n\t\t\t\tmix( texture2DCompare( shadowMap, uv + vec2( dx, -dy ), shadowCoord.z ), \n\t\t\t\t\t texture2DCompare( shadowMap, uv + vec2( dx, 2.0 * dy ), shadowCoord.z ),\n\t\t\t\t\t f.y ) +\n\t\t\t\tmix( mix( texture2DCompare( shadowMap, uv + vec2( -dx, -dy ), shadowCoord.z ), \n\t\t\t\t\t\t texture2DCompare( shadowMap, uv + vec2( 2.0 * dx, -dy ), shadowCoord.z ),\n\t\t\t\t\t\t f.x ),\n\t\t\t\t\t mix( texture2DCompare( shadowMap, uv + vec2( -dx, 2.0 * dy ), shadowCoord.z ), \n\t\t\t\t\t\t texture2DCompare( shadowMap, uv + vec2( 2.0 * dx, 2.0 * dy ), shadowCoord.z ),\n\t\t\t\t\t\t f.x ),\n\t\t\t\t\t f.y )\n\t\t\t) * ( 1.0 / 9.0 );\n\t\t#elif defined( SHADOWMAP_TYPE_VSM )\n\t\t\tshadow = VSMShadow( shadowMap, shadowCoord.xy, shadowCoord.z );\n\t\t#else\n\t\t\tshadow = texture2DCompare( shadowMap, shadowCoord.xy, shadowCoord.z );\n\t\t#endif\n\t\t}\n\t\treturn shadow;\n\t}\n\tvec2 cubeToUV( vec3 v, float texelSizeY ) {\n\t\tvec3 absV = abs( v );\n\t\tfloat scaleToCube = 1.0 / max( absV.x, max( absV.y, absV.z ) );\n\t\tabsV *= scaleToCube;\n\t\tv *= scaleToCube * ( 1.0 - 2.0 * texelSizeY );\n\t\tvec2 planar = v.xy;\n\t\tfloat almostATexel = 1.5 * texelSizeY;\n\t\tfloat almostOne = 1.0 - almostATexel;\n\t\tif ( absV.z >= almostOne ) {\n\t\t\tif ( v.z > 0.0 )\n\t\t\t\tplanar.x = 4.0 - v.x;\n\t\t} else if ( absV.x >= almostOne ) {\n\t\t\tfloat signX = sign( v.x );\n\t\t\tplanar.x = v.z * signX + 2.0 * signX;\n\t\t} else if ( absV.y >= almostOne ) {\n\t\t\tfloat signY = sign( v.y );\n\t\t\tplanar.x = v.x + 2.0 * signY + 2.0;\n\t\t\tplanar.y = v.z * signY - 2.0;\n\t\t}\n\t\treturn vec2( 0.125, 0.25 ) * planar + vec2( 0.375, 0.75 );\n\t}\n\tfloat getPointShadow( sampler2D shadowMap, vec2 shadowMapSize, float shadowBias, float shadowRadius, vec4 shadowCoord, float shadowCameraNear, float shadowCameraFar ) {\n\t\tvec2 texelSize = vec2( 1.0 ) / ( shadowMapSize * vec2( 4.0, 2.0 ) );\n\t\tvec3 lightToPosition = shadowCoord.xyz;\n\t\tfloat dp = ( length( lightToPosition ) - shadowCameraNear ) / ( shadowCameraFar - shadowCameraNear );\t\tdp += shadowBias;\n\t\tvec3 bd3D = normalize( lightToPosition );\n\t\t#if defined( SHADOWMAP_TYPE_PCF ) || defined( SHADOWMAP_TYPE_PCF_SOFT ) || defined( SHADOWMAP_TYPE_VSM )\n\t\t\tvec2 offset = vec2( - 1, 1 ) * shadowRadius * texelSize.y;\n\t\t\treturn (\n\t\t\t\ttexture2DCompare( shadowMap, cubeToUV( bd3D + offset.xyy, texelSize.y ), dp ) +\n\t\t\t\ttexture2DCompare( shadowMap, cubeToUV( bd3D + offset.yyy, texelSize.y ), dp ) +\n\t\t\t\ttexture2DCompare( shadowMap, cubeToUV( bd3D + offset.xyx, texelSize.y ), dp ) +\n\t\t\t\ttexture2DCompare( shadowMap, cubeToUV( bd3D + offset.yyx, texelSize.y ), dp ) +\n\t\t\t\ttexture2DCompare( shadowMap, cubeToUV( bd3D, texelSize.y ), dp ) +\n\t\t\t\ttexture2DCompare( shadowMap, cubeToUV( bd3D + offset.xxy, texelSize.y ), dp ) +\n\t\t\t\ttexture2DCompare( shadowMap, cubeToUV( bd3D + offset.yxy, texelSize.y ), dp ) +\n\t\t\t\ttexture2DCompare( shadowMap, cubeToUV( bd3D + offset.xxx, texelSize.y ), dp ) +\n\t\t\t\ttexture2DCompare( shadowMap, cubeToUV( bd3D + offset.yxx, texelSize.y ), dp )\n\t\t\t) * ( 1.0 / 9.0 );\n\t\t#else\n\t\t\treturn texture2DCompare( shadowMap, cubeToUV( bd3D, texelSize.y ), dp );\n\t\t#endif\n\t}\n#endif", +shadowmap_pars_vertex:"#ifdef USE_SHADOWMAP\n\t#if NUM_DIR_LIGHT_SHADOWS > 0\n\t\tuniform mat4 directionalShadowMatrix[ NUM_DIR_LIGHT_SHADOWS ];\n\t\tvarying vec4 vDirectionalShadowCoord[ NUM_DIR_LIGHT_SHADOWS ];\n\t#endif\n\t#if NUM_SPOT_LIGHT_SHADOWS > 0\n\t\tuniform mat4 spotShadowMatrix[ NUM_SPOT_LIGHT_SHADOWS ];\n\t\tvarying vec4 vSpotShadowCoord[ NUM_SPOT_LIGHT_SHADOWS ];\n\t#endif\n\t#if NUM_POINT_LIGHT_SHADOWS > 0\n\t\tuniform mat4 pointShadowMatrix[ NUM_POINT_LIGHT_SHADOWS ];\n\t\tvarying vec4 vPointShadowCoord[ NUM_POINT_LIGHT_SHADOWS ];\n\t#endif\n#endif", +shadowmap_vertex:"#ifdef USE_SHADOWMAP\n\t#if NUM_DIR_LIGHT_SHADOWS > 0\n\t#pragma unroll_loop_start\n\tfor ( int i = 0; i < NUM_DIR_LIGHT_SHADOWS; i ++ ) {\n\t\tvDirectionalShadowCoord[ i ] = directionalShadowMatrix[ i ] * worldPosition;\n\t}\n\t#pragma unroll_loop_end\n\t#endif\n\t#if NUM_SPOT_LIGHT_SHADOWS > 0\n\t#pragma unroll_loop_start\n\tfor ( int i = 0; i < NUM_SPOT_LIGHT_SHADOWS; i ++ ) {\n\t\tvSpotShadowCoord[ i ] = spotShadowMatrix[ i ] * worldPosition;\n\t}\n\t#pragma unroll_loop_end\n\t#endif\n\t#if NUM_POINT_LIGHT_SHADOWS > 0\n\t#pragma unroll_loop_start\n\tfor ( int i = 0; i < NUM_POINT_LIGHT_SHADOWS; i ++ ) {\n\t\tvPointShadowCoord[ i ] = pointShadowMatrix[ i ] * worldPosition;\n\t}\n\t#pragma unroll_loop_end\n\t#endif\n#endif", +shadowmask_pars_fragment:"float getShadowMask() {\n\tfloat shadow = 1.0;\n\t#ifdef USE_SHADOWMAP\n\t#if NUM_DIR_LIGHT_SHADOWS > 0\n\tDirectionalLightShadow directionalLight;\n\t#pragma unroll_loop_start\n\tfor ( int i = 0; i < NUM_DIR_LIGHT_SHADOWS; i ++ ) {\n\t\tdirectionalLight = directionalLightShadows[ i ];\n\t\tshadow *= receiveShadow ? getShadow( directionalShadowMap[ i ], directionalLight.shadowMapSize, directionalLight.shadowBias, directionalLight.shadowRadius, vDirectionalShadowCoord[ i ] ) : 1.0;\n\t}\n\t#pragma unroll_loop_end\n\t#endif\n\t#if NUM_SPOT_LIGHT_SHADOWS > 0\n\tSpotLightShadow spotLight;\n\t#pragma unroll_loop_start\n\tfor ( int i = 0; i < NUM_SPOT_LIGHT_SHADOWS; i ++ ) {\n\t\tspotLight = spotLightShadows[ i ];\n\t\tshadow *= receiveShadow ? getShadow( spotShadowMap[ i ], spotLight.shadowMapSize, spotLight.shadowBias, spotLight.shadowRadius, vSpotShadowCoord[ i ] ) : 1.0;\n\t}\n\t#pragma unroll_loop_end\n\t#endif\n\t#if NUM_POINT_LIGHT_SHADOWS > 0\n\tPointLightShadow pointLight;\n\t#pragma unroll_loop_start\n\tfor ( int i = 0; i < NUM_POINT_LIGHT_SHADOWS; i ++ ) {\n\t\tpointLight = pointLightShadows[ i ];\n\t\tshadow *= receiveShadow ? getPointShadow( pointShadowMap[ i ], pointLight.shadowMapSize, pointLight.shadowBias, pointLight.shadowRadius, vPointShadowCoord[ i ], pointLight.shadowCameraNear, pointLight.shadowCameraFar ) : 1.0;\n\t}\n\t#pragma unroll_loop_end\n\t#endif\n\t#endif\n\treturn shadow;\n}", +skinbase_vertex:"#ifdef USE_SKINNING\n\tmat4 boneMatX = getBoneMatrix( skinIndex.x );\n\tmat4 boneMatY = getBoneMatrix( skinIndex.y );\n\tmat4 boneMatZ = getBoneMatrix( skinIndex.z );\n\tmat4 boneMatW = getBoneMatrix( skinIndex.w );\n#endif",skinning_pars_vertex:"#ifdef USE_SKINNING\n\tuniform mat4 bindMatrix;\n\tuniform mat4 bindMatrixInverse;\n\t#ifdef BONE_TEXTURE\n\t\tuniform highp sampler2D boneTexture;\n\t\tuniform int boneTextureSize;\n\t\tmat4 getBoneMatrix( const in float i ) {\n\t\t\tfloat j = i * 4.0;\n\t\t\tfloat x = mod( j, float( boneTextureSize ) );\n\t\t\tfloat y = floor( j / float( boneTextureSize ) );\n\t\t\tfloat dx = 1.0 / float( boneTextureSize );\n\t\t\tfloat dy = 1.0 / float( boneTextureSize );\n\t\t\ty = dy * ( y + 0.5 );\n\t\t\tvec4 v1 = texture2D( boneTexture, vec2( dx * ( x + 0.5 ), y ) );\n\t\t\tvec4 v2 = texture2D( boneTexture, vec2( dx * ( x + 1.5 ), y ) );\n\t\t\tvec4 v3 = texture2D( boneTexture, vec2( dx * ( x + 2.5 ), y ) );\n\t\t\tvec4 v4 = texture2D( boneTexture, vec2( dx * ( x + 3.5 ), y ) );\n\t\t\tmat4 bone = mat4( v1, v2, v3, v4 );\n\t\t\treturn bone;\n\t\t}\n\t#else\n\t\tuniform mat4 boneMatrices[ MAX_BONES ];\n\t\tmat4 getBoneMatrix( const in float i ) {\n\t\t\tmat4 bone = boneMatrices[ int(i) ];\n\t\t\treturn bone;\n\t\t}\n\t#endif\n#endif", +skinning_vertex:"#ifdef USE_SKINNING\n\tvec4 skinVertex = bindMatrix * vec4( transformed, 1.0 );\n\tvec4 skinned = vec4( 0.0 );\n\tskinned += boneMatX * skinVertex * skinWeight.x;\n\tskinned += boneMatY * skinVertex * skinWeight.y;\n\tskinned += boneMatZ * skinVertex * skinWeight.z;\n\tskinned += boneMatW * skinVertex * skinWeight.w;\n\ttransformed = ( bindMatrixInverse * skinned ).xyz;\n#endif",skinnormal_vertex:"#ifdef USE_SKINNING\n\tmat4 skinMatrix = mat4( 0.0 );\n\tskinMatrix += skinWeight.x * boneMatX;\n\tskinMatrix += skinWeight.y * boneMatY;\n\tskinMatrix += skinWeight.z * boneMatZ;\n\tskinMatrix += skinWeight.w * boneMatW;\n\tskinMatrix = bindMatrixInverse * skinMatrix * bindMatrix;\n\tobjectNormal = vec4( skinMatrix * vec4( objectNormal, 0.0 ) ).xyz;\n\t#ifdef USE_TANGENT\n\t\tobjectTangent = vec4( skinMatrix * vec4( objectTangent, 0.0 ) ).xyz;\n\t#endif\n#endif", +specularmap_fragment:"float specularStrength;\n#ifdef USE_SPECULARMAP\n\tvec4 texelSpecular = texture2D( specularMap, vUv );\n\tspecularStrength = texelSpecular.r;\n#else\n\tspecularStrength = 1.0;\n#endif",specularmap_pars_fragment:"#ifdef USE_SPECULARMAP\n\tuniform sampler2D specularMap;\n#endif",tonemapping_fragment:"#if defined( TONE_MAPPING )\n\tgl_FragColor.rgb = toneMapping( gl_FragColor.rgb );\n#endif",tonemapping_pars_fragment:"#ifndef saturate\n#define saturate(a) clamp( a, 0.0, 1.0 )\n#endif\nuniform float toneMappingExposure;\nuniform float toneMappingWhitePoint;\nvec3 LinearToneMapping( vec3 color ) {\n\treturn toneMappingExposure * color;\n}\nvec3 ReinhardToneMapping( vec3 color ) {\n\tcolor *= toneMappingExposure;\n\treturn saturate( color / ( vec3( 1.0 ) + color ) );\n}\n#define Uncharted2Helper( x ) max( ( ( x * ( 0.15 * x + 0.10 * 0.50 ) + 0.20 * 0.02 ) / ( x * ( 0.15 * x + 0.50 ) + 0.20 * 0.30 ) ) - 0.02 / 0.30, vec3( 0.0 ) )\nvec3 Uncharted2ToneMapping( vec3 color ) {\n\tcolor *= toneMappingExposure;\n\treturn saturate( Uncharted2Helper( color ) / Uncharted2Helper( vec3( toneMappingWhitePoint ) ) );\n}\nvec3 OptimizedCineonToneMapping( vec3 color ) {\n\tcolor *= toneMappingExposure;\n\tcolor = max( vec3( 0.0 ), color - 0.004 );\n\treturn pow( ( color * ( 6.2 * color + 0.5 ) ) / ( color * ( 6.2 * color + 1.7 ) + 0.06 ), vec3( 2.2 ) );\n}\nvec3 ACESFilmicToneMapping( vec3 color ) {\n\tcolor *= toneMappingExposure;\n\treturn saturate( ( color * ( 2.51 * color + 0.03 ) ) / ( color * ( 2.43 * color + 0.59 ) + 0.14 ) );\n}", +uv_pars_fragment:"#if ( defined( USE_UV ) && ! defined( UVS_VERTEX_ONLY ) )\n\tvarying vec2 vUv;\n#endif",uv_pars_vertex:"#ifdef USE_UV\n\t#ifdef UVS_VERTEX_ONLY\n\t\tvec2 vUv;\n\t#else\n\t\tvarying vec2 vUv;\n\t#endif\n\tuniform mat3 uvTransform;\n#endif",uv_vertex:"#ifdef USE_UV\n\tvUv = ( uvTransform * vec3( uv, 1 ) ).xy;\n#endif",uv2_pars_fragment:"#if defined( USE_LIGHTMAP ) || defined( USE_AOMAP )\n\tvarying vec2 vUv2;\n#endif",uv2_pars_vertex:"#if defined( USE_LIGHTMAP ) || defined( USE_AOMAP )\n\tattribute vec2 uv2;\n\tvarying vec2 vUv2;\n\tuniform mat3 uv2Transform;\n#endif", +uv2_vertex:"#if defined( USE_LIGHTMAP ) || defined( USE_AOMAP )\n\tvUv2 = ( uv2Transform * vec3( uv2, 1 ) ).xy;\n#endif",worldpos_vertex:"#if defined( USE_ENVMAP ) || defined( DISTANCE ) || defined ( USE_SHADOWMAP )\n\tvec4 worldPosition = vec4( transformed, 1.0 );\n\t#ifdef USE_INSTANCING\n\t\tworldPosition = instanceMatrix * worldPosition;\n\t#endif\n\tworldPosition = modelMatrix * worldPosition;\n#endif",background_frag:"uniform sampler2D t2D;\nvarying vec2 vUv;\nvoid main() {\n\tvec4 texColor = texture2D( t2D, vUv );\n\tgl_FragColor = mapTexelToLinear( texColor );\n\t#include \n\t#include \n}", +background_vert:"varying vec2 vUv;\nuniform mat3 uvTransform;\nvoid main() {\n\tvUv = ( uvTransform * vec3( uv, 1 ) ).xy;\n\tgl_Position = vec4( position.xy, 1.0, 1.0 );\n}",cube_frag:"#include \nuniform float opacity;\nvarying vec3 vWorldDirection;\n#include \nvoid main() {\n\tvec3 vReflect = vWorldDirection;\n\t#include \n\tgl_FragColor = envColor;\n\tgl_FragColor.a *= opacity;\n\t#include \n\t#include \n}", +cube_vert:"varying vec3 vWorldDirection;\n#include \nvoid main() {\n\tvWorldDirection = transformDirection( position, modelMatrix );\n\t#include \n\t#include \n\tgl_Position.z = gl_Position.w;\n}",depth_frag:"#if DEPTH_PACKING == 3200\n\tuniform float opacity;\n#endif\n#include \n#include \n#include \n#include \n#include \n#include \n#include \nvarying vec2 vHighPrecisionZW;\nvoid main() {\n\t#include \n\tvec4 diffuseColor = vec4( 1.0 );\n\t#if DEPTH_PACKING == 3200\n\t\tdiffuseColor.a = opacity;\n\t#endif\n\t#include \n\t#include \n\t#include \n\t#include \n\tfloat fragCoordZ = 0.5 * vHighPrecisionZW[0] / vHighPrecisionZW[1] + 0.5;\n\t#if DEPTH_PACKING == 3200\n\t\tgl_FragColor = vec4( vec3( 1.0 - fragCoordZ ), opacity );\n\t#elif DEPTH_PACKING == 3201\n\t\tgl_FragColor = packDepthToRGBA( fragCoordZ );\n\t#endif\n}", +depth_vert:"#include \n#include \n#include \n#include \n#include \n#include \n#include \nvarying vec2 vHighPrecisionZW;\nvoid main() {\n\t#include \n\t#include \n\t#ifdef USE_DISPLACEMENTMAP\n\t\t#include \n\t\t#include \n\t\t#include \n\t#endif\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\tvHighPrecisionZW = gl_Position.zw;\n}", +distanceRGBA_frag:"#define DISTANCE\nuniform vec3 referencePosition;\nuniform float nearDistance;\nuniform float farDistance;\nvarying vec3 vWorldPosition;\n#include \n#include \n#include \n#include \n#include \n#include \nvoid main () {\n\t#include \n\tvec4 diffuseColor = vec4( 1.0 );\n\t#include \n\t#include \n\t#include \n\tfloat dist = length( vWorldPosition - referencePosition );\n\tdist = ( dist - nearDistance ) / ( farDistance - nearDistance );\n\tdist = saturate( dist );\n\tgl_FragColor = packDepthToRGBA( dist );\n}", +distanceRGBA_vert:"#define DISTANCE\nvarying vec3 vWorldPosition;\n#include \n#include \n#include \n#include \n#include \n#include \nvoid main() {\n\t#include \n\t#include \n\t#ifdef USE_DISPLACEMENTMAP\n\t\t#include \n\t\t#include \n\t\t#include \n\t#endif\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\tvWorldPosition = worldPosition.xyz;\n}", +equirect_frag:"uniform sampler2D tEquirect;\nvarying vec3 vWorldDirection;\n#include \nvoid main() {\n\tvec3 direction = normalize( vWorldDirection );\n\tvec2 sampleUV;\n\tsampleUV.y = asin( clamp( direction.y, - 1.0, 1.0 ) ) * RECIPROCAL_PI + 0.5;\n\tsampleUV.x = atan( direction.z, direction.x ) * RECIPROCAL_PI2 + 0.5;\n\tvec4 texColor = texture2D( tEquirect, sampleUV );\n\tgl_FragColor = mapTexelToLinear( texColor );\n\t#include \n\t#include \n}", +equirect_vert:"varying vec3 vWorldDirection;\n#include \nvoid main() {\n\tvWorldDirection = transformDirection( position, modelMatrix );\n\t#include \n\t#include \n}",linedashed_frag:"uniform vec3 diffuse;\nuniform float opacity;\nuniform float dashSize;\nuniform float totalSize;\nvarying float vLineDistance;\n#include \n#include \n#include \n#include \n#include \nvoid main() {\n\t#include \n\tif ( mod( vLineDistance, totalSize ) > dashSize ) {\n\t\tdiscard;\n\t}\n\tvec3 outgoingLight = vec3( 0.0 );\n\tvec4 diffuseColor = vec4( diffuse, opacity );\n\t#include \n\t#include \n\toutgoingLight = diffuseColor.rgb;\n\tgl_FragColor = vec4( outgoingLight, diffuseColor.a );\n\t#include \n\t#include \n\t#include \n\t#include \n}", +linedashed_vert:"uniform float scale;\nattribute float lineDistance;\nvarying float vLineDistance;\n#include \n#include \n#include \n#include \n#include \nvoid main() {\n\tvLineDistance = scale * lineDistance;\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n}",meshbasic_frag:"uniform vec3 diffuse;\nuniform float opacity;\n#ifndef FLAT_SHADED\n\tvarying vec3 vNormal;\n#endif\n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \nvoid main() {\n\t#include \n\tvec4 diffuseColor = vec4( diffuse, opacity );\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\tReflectedLight reflectedLight = ReflectedLight( vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ) );\n\t#ifdef USE_LIGHTMAP\n\t\n\t\tvec4 lightMapTexel= texture2D( lightMap, vUv2 );\n\t\treflectedLight.indirectDiffuse += lightMapTexelToLinear( lightMapTexel ).rgb * lightMapIntensity;\n\t#else\n\t\treflectedLight.indirectDiffuse += vec3( 1.0 );\n\t#endif\n\t#include \n\treflectedLight.indirectDiffuse *= diffuseColor.rgb;\n\tvec3 outgoingLight = reflectedLight.indirectDiffuse;\n\t#include \n\tgl_FragColor = vec4( outgoingLight, diffuseColor.a );\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n}", +meshbasic_vert:"#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \nvoid main() {\n\t#include \n\t#include \n\t#include \n\t#include \n\t#ifdef USE_ENVMAP\n\t#include \n\t#include \n\t#include \n\t#include \n\t#endif\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n}", +meshlambert_frag:"uniform vec3 diffuse;\nuniform vec3 emissive;\nuniform float opacity;\nvarying vec3 vLightFront;\nvarying vec3 vIndirectFront;\n#ifdef DOUBLE_SIDED\n\tvarying vec3 vLightBack;\n\tvarying vec3 vIndirectBack;\n#endif\n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \nvoid main() {\n\t#include \n\tvec4 diffuseColor = vec4( diffuse, opacity );\n\tReflectedLight reflectedLight = ReflectedLight( vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ) );\n\tvec3 totalEmissiveRadiance = emissive;\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#ifdef DOUBLE_SIDED\n\t\treflectedLight.indirectDiffuse += ( gl_FrontFacing ) ? vIndirectFront : vIndirectBack;\n\t#else\n\t\treflectedLight.indirectDiffuse += vIndirectFront;\n\t#endif\n\t#include \n\treflectedLight.indirectDiffuse *= BRDF_Diffuse_Lambert( diffuseColor.rgb );\n\t#ifdef DOUBLE_SIDED\n\t\treflectedLight.directDiffuse = ( gl_FrontFacing ) ? vLightFront : vLightBack;\n\t#else\n\t\treflectedLight.directDiffuse = vLightFront;\n\t#endif\n\treflectedLight.directDiffuse *= BRDF_Diffuse_Lambert( diffuseColor.rgb ) * getShadowMask();\n\t#include \n\tvec3 outgoingLight = reflectedLight.directDiffuse + reflectedLight.indirectDiffuse + totalEmissiveRadiance;\n\t#include \n\tgl_FragColor = vec4( outgoingLight, diffuseColor.a );\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n}", +meshlambert_vert:"#define LAMBERT\nvarying vec3 vLightFront;\nvarying vec3 vIndirectFront;\n#ifdef DOUBLE_SIDED\n\tvarying vec3 vLightBack;\n\tvarying vec3 vIndirectBack;\n#endif\n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \nvoid main() {\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n}", +meshmatcap_frag:"#define MATCAP\nuniform vec3 diffuse;\nuniform float opacity;\nuniform sampler2D matcap;\nvarying vec3 vViewPosition;\n#ifndef FLAT_SHADED\n\tvarying vec3 vNormal;\n#endif\n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \nvoid main() {\n\t#include \n\tvec4 diffuseColor = vec4( diffuse, opacity );\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\tvec3 viewDir = normalize( vViewPosition );\n\tvec3 x = normalize( vec3( viewDir.z, 0.0, - viewDir.x ) );\n\tvec3 y = cross( viewDir, x );\n\tvec2 uv = vec2( dot( x, normal ), dot( y, normal ) ) * 0.495 + 0.5;\n\t#ifdef USE_MATCAP\n\t\tvec4 matcapColor = texture2D( matcap, uv );\n\t\tmatcapColor = matcapTexelToLinear( matcapColor );\n\t#else\n\t\tvec4 matcapColor = vec4( 1.0 );\n\t#endif\n\tvec3 outgoingLight = diffuseColor.rgb * matcapColor.rgb;\n\tgl_FragColor = vec4( outgoingLight, diffuseColor.a );\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n}", +meshmatcap_vert:"#define MATCAP\nvarying vec3 vViewPosition;\n#ifndef FLAT_SHADED\n\tvarying vec3 vNormal;\n#endif\n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \nvoid main() {\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#ifndef FLAT_SHADED\n\t\tvNormal = normalize( transformedNormal );\n\t#endif\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\tvViewPosition = - mvPosition.xyz;\n}", +meshtoon_frag:"#define TOON\nuniform vec3 diffuse;\nuniform vec3 emissive;\nuniform vec3 specular;\nuniform float shininess;\nuniform float opacity;\n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \nvoid main() {\n\t#include \n\tvec4 diffuseColor = vec4( diffuse, opacity );\n\tReflectedLight reflectedLight = ReflectedLight( vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ) );\n\tvec3 totalEmissiveRadiance = emissive;\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\tvec3 outgoingLight = reflectedLight.directDiffuse + reflectedLight.indirectDiffuse + reflectedLight.directSpecular + reflectedLight.indirectSpecular + totalEmissiveRadiance;\n\tgl_FragColor = vec4( outgoingLight, diffuseColor.a );\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n}", +meshtoon_vert:"#define TOON\nvarying vec3 vViewPosition;\n#ifndef FLAT_SHADED\n\tvarying vec3 vNormal;\n#endif\n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \nvoid main() {\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n#ifndef FLAT_SHADED\n\tvNormal = normalize( transformedNormal );\n#endif\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\tvViewPosition = - mvPosition.xyz;\n\t#include \n\t#include \n\t#include \n}", +meshphong_frag:"#define PHONG\nuniform vec3 diffuse;\nuniform vec3 emissive;\nuniform vec3 specular;\nuniform float shininess;\nuniform float opacity;\n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \nvoid main() {\n\t#include \n\tvec4 diffuseColor = vec4( diffuse, opacity );\n\tReflectedLight reflectedLight = ReflectedLight( vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ) );\n\tvec3 totalEmissiveRadiance = emissive;\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\tvec3 outgoingLight = reflectedLight.directDiffuse + reflectedLight.indirectDiffuse + reflectedLight.directSpecular + reflectedLight.indirectSpecular + totalEmissiveRadiance;\n\t#include \n\tgl_FragColor = vec4( outgoingLight, diffuseColor.a );\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n}", +meshphong_vert:"#define PHONG\nvarying vec3 vViewPosition;\n#ifndef FLAT_SHADED\n\tvarying vec3 vNormal;\n#endif\n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \nvoid main() {\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n#ifndef FLAT_SHADED\n\tvNormal = normalize( transformedNormal );\n#endif\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\tvViewPosition = - mvPosition.xyz;\n\t#include \n\t#include \n\t#include \n\t#include \n}", +meshphysical_frag:"#define STANDARD\n#ifdef PHYSICAL\n\t#define REFLECTIVITY\n\t#define CLEARCOAT\n\t#define TRANSPARENCY\n#endif\nuniform vec3 diffuse;\nuniform vec3 emissive;\nuniform float roughness;\nuniform float metalness;\nuniform float opacity;\n#ifdef TRANSPARENCY\n\tuniform float transparency;\n#endif\n#ifdef REFLECTIVITY\n\tuniform float reflectivity;\n#endif\n#ifdef CLEARCOAT\n\tuniform float clearcoat;\n\tuniform float clearcoatRoughness;\n#endif\n#ifdef USE_SHEEN\n\tuniform vec3 sheen;\n#endif\nvarying vec3 vViewPosition;\n#ifndef FLAT_SHADED\n\tvarying vec3 vNormal;\n\t#ifdef USE_TANGENT\n\t\tvarying vec3 vTangent;\n\t\tvarying vec3 vBitangent;\n\t#endif\n#endif\n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \nvoid main() {\n\t#include \n\tvec4 diffuseColor = vec4( diffuse, opacity );\n\tReflectedLight reflectedLight = ReflectedLight( vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ) );\n\tvec3 totalEmissiveRadiance = emissive;\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\tvec3 outgoingLight = reflectedLight.directDiffuse + reflectedLight.indirectDiffuse + reflectedLight.directSpecular + reflectedLight.indirectSpecular + totalEmissiveRadiance;\n\t#ifdef TRANSPARENCY\n\t\tdiffuseColor.a *= saturate( 1. - transparency + linearToRelativeLuminance( reflectedLight.directSpecular + reflectedLight.indirectSpecular ) );\n\t#endif\n\tgl_FragColor = vec4( outgoingLight, diffuseColor.a );\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n}", +meshphysical_vert:"#define STANDARD\nvarying vec3 vViewPosition;\n#ifndef FLAT_SHADED\n\tvarying vec3 vNormal;\n\t#ifdef USE_TANGENT\n\t\tvarying vec3 vTangent;\n\t\tvarying vec3 vBitangent;\n\t#endif\n#endif\n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \nvoid main() {\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n#ifndef FLAT_SHADED\n\tvNormal = normalize( transformedNormal );\n\t#ifdef USE_TANGENT\n\t\tvTangent = normalize( transformedTangent );\n\t\tvBitangent = normalize( cross( vNormal, vTangent ) * tangent.w );\n\t#endif\n#endif\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\tvViewPosition = - mvPosition.xyz;\n\t#include \n\t#include \n\t#include \n}", +normal_frag:"#define NORMAL\nuniform float opacity;\n#if defined( FLAT_SHADED ) || defined( USE_BUMPMAP ) || defined( TANGENTSPACE_NORMALMAP )\n\tvarying vec3 vViewPosition;\n#endif\n#ifndef FLAT_SHADED\n\tvarying vec3 vNormal;\n\t#ifdef USE_TANGENT\n\t\tvarying vec3 vTangent;\n\t\tvarying vec3 vBitangent;\n\t#endif\n#endif\n#include \n#include \n#include \n#include \n#include \n#include \nvoid main() {\n\t#include \n\t#include \n\t#include \n\t#include \n\tgl_FragColor = vec4( packNormalToRGB( normal ), opacity );\n}", +normal_vert:"#define NORMAL\n#if defined( FLAT_SHADED ) || defined( USE_BUMPMAP ) || defined( TANGENTSPACE_NORMALMAP )\n\tvarying vec3 vViewPosition;\n#endif\n#ifndef FLAT_SHADED\n\tvarying vec3 vNormal;\n\t#ifdef USE_TANGENT\n\t\tvarying vec3 vTangent;\n\t\tvarying vec3 vBitangent;\n\t#endif\n#endif\n#include \n#include \n#include \n#include \n#include \n#include \n#include \nvoid main() {\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n#ifndef FLAT_SHADED\n\tvNormal = normalize( transformedNormal );\n\t#ifdef USE_TANGENT\n\t\tvTangent = normalize( transformedTangent );\n\t\tvBitangent = normalize( cross( vNormal, vTangent ) * tangent.w );\n\t#endif\n#endif\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n#if defined( FLAT_SHADED ) || defined( USE_BUMPMAP ) || defined( TANGENTSPACE_NORMALMAP )\n\tvViewPosition = - mvPosition.xyz;\n#endif\n}", +points_frag:"uniform vec3 diffuse;\nuniform float opacity;\n#include \n#include \n#include \n#include \n#include \n#include \nvoid main() {\n\t#include \n\tvec3 outgoingLight = vec3( 0.0 );\n\tvec4 diffuseColor = vec4( diffuse, opacity );\n\t#include \n\t#include \n\t#include \n\t#include \n\toutgoingLight = diffuseColor.rgb;\n\tgl_FragColor = vec4( outgoingLight, diffuseColor.a );\n\t#include \n\t#include \n\t#include \n\t#include \n}", +points_vert:"uniform float size;\nuniform float scale;\n#include \n#include \n#include \n#include \n#include \n#include \nvoid main() {\n\t#include \n\t#include \n\t#include \n\t#include \n\tgl_PointSize = size;\n\t#ifdef USE_SIZEATTENUATION\n\t\tbool isPerspective = isPerspectiveMatrix( projectionMatrix );\n\t\tif ( isPerspective ) gl_PointSize *= ( scale / - mvPosition.z );\n\t#endif\n\t#include \n\t#include \n\t#include \n\t#include \n}", +shadow_frag:"uniform vec3 color;\nuniform float opacity;\n#include \n#include \n#include \n#include \n#include \n#include \n#include \nvoid main() {\n\tgl_FragColor = vec4( color, opacity * ( 1.0 - getShadowMask() ) );\n\t#include \n\t#include \n\t#include \n}",shadow_vert:"#include \n#include \nvoid main() {\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n}", +sprite_frag:"uniform vec3 diffuse;\nuniform float opacity;\n#include \n#include \n#include \n#include \n#include \n#include \n#include \nvoid main() {\n\t#include \n\tvec3 outgoingLight = vec3( 0.0 );\n\tvec4 diffuseColor = vec4( diffuse, opacity );\n\t#include \n\t#include \n\t#include \n\t#include \n\toutgoingLight = diffuseColor.rgb;\n\tgl_FragColor = vec4( outgoingLight, diffuseColor.a );\n\t#include \n\t#include \n\t#include \n}", +sprite_vert:"uniform float rotation;\nuniform vec2 center;\n#include \n#include \n#include \n#include \n#include \nvoid main() {\n\t#include \n\tvec4 mvPosition = modelViewMatrix * vec4( 0.0, 0.0, 0.0, 1.0 );\n\tvec2 scale;\n\tscale.x = length( vec3( modelMatrix[ 0 ].x, modelMatrix[ 0 ].y, modelMatrix[ 0 ].z ) );\n\tscale.y = length( vec3( modelMatrix[ 1 ].x, modelMatrix[ 1 ].y, modelMatrix[ 1 ].z ) );\n\t#ifndef USE_SIZEATTENUATION\n\t\tbool isPerspective = isPerspectiveMatrix( projectionMatrix );\n\t\tif ( isPerspective ) scale *= - mvPosition.z;\n\t#endif\n\tvec2 alignedPosition = ( position.xy - ( center - vec2( 0.5 ) ) ) * scale;\n\tvec2 rotatedPosition;\n\trotatedPosition.x = cos( rotation ) * alignedPosition.x - sin( rotation ) * alignedPosition.y;\n\trotatedPosition.y = sin( rotation ) * alignedPosition.x + cos( rotation ) * alignedPosition.y;\n\tmvPosition.xy += rotatedPosition;\n\tgl_Position = projectionMatrix * mvPosition;\n\t#include \n\t#include \n\t#include \n}"}, +eb={basic:{uniforms:va([D.common,D.specularmap,D.envmap,D.aomap,D.lightmap,D.fog]),vertexShader:L.meshbasic_vert,fragmentShader:L.meshbasic_frag},lambert:{uniforms:va([D.common,D.specularmap,D.envmap,D.aomap,D.lightmap,D.emissivemap,D.fog,D.lights,{emissive:{value:new A(0)}}]),vertexShader:L.meshlambert_vert,fragmentShader:L.meshlambert_frag},phong:{uniforms:va([D.common,D.specularmap,D.envmap,D.aomap,D.lightmap,D.emissivemap,D.bumpmap,D.normalmap,D.displacementmap,D.fog,D.lights,{emissive:{value:new A(0)}, +specular:{value:new A(1118481)},shininess:{value:30}}]),vertexShader:L.meshphong_vert,fragmentShader:L.meshphong_frag},standard:{uniforms:va([D.common,D.envmap,D.aomap,D.lightmap,D.emissivemap,D.bumpmap,D.normalmap,D.displacementmap,D.roughnessmap,D.metalnessmap,D.fog,D.lights,{emissive:{value:new A(0)},roughness:{value:1},metalness:{value:0},envMapIntensity:{value:1}}]),vertexShader:L.meshphysical_vert,fragmentShader:L.meshphysical_frag},toon:{uniforms:va([D.common,D.specularmap,D.aomap,D.lightmap, +D.emissivemap,D.bumpmap,D.normalmap,D.displacementmap,D.gradientmap,D.fog,D.lights,{emissive:{value:new A(0)},specular:{value:new A(1118481)},shininess:{value:30}}]),vertexShader:L.meshtoon_vert,fragmentShader:L.meshtoon_frag},matcap:{uniforms:va([D.common,D.bumpmap,D.normalmap,D.displacementmap,D.fog,{matcap:{value:null}}]),vertexShader:L.meshmatcap_vert,fragmentShader:L.meshmatcap_frag},points:{uniforms:va([D.points,D.fog]),vertexShader:L.points_vert,fragmentShader:L.points_frag},dashed:{uniforms:va([D.common, +D.fog,{scale:{value:1},dashSize:{value:1},totalSize:{value:2}}]),vertexShader:L.linedashed_vert,fragmentShader:L.linedashed_frag},depth:{uniforms:va([D.common,D.displacementmap]),vertexShader:L.depth_vert,fragmentShader:L.depth_frag},normal:{uniforms:va([D.common,D.bumpmap,D.normalmap,D.displacementmap,{opacity:{value:1}}]),vertexShader:L.normal_vert,fragmentShader:L.normal_frag},sprite:{uniforms:va([D.sprite,D.fog]),vertexShader:L.sprite_vert,fragmentShader:L.sprite_frag},background:{uniforms:{uvTransform:{value:new xa}, +t2D:{value:null}},vertexShader:L.background_vert,fragmentShader:L.background_frag},cube:{uniforms:va([D.envmap,{opacity:{value:1}}]),vertexShader:L.cube_vert,fragmentShader:L.cube_frag},equirect:{uniforms:{tEquirect:{value:null}},vertexShader:L.equirect_vert,fragmentShader:L.equirect_frag},distanceRGBA:{uniforms:va([D.common,D.displacementmap,{referencePosition:{value:new n},nearDistance:{value:1},farDistance:{value:1E3}}]),vertexShader:L.distanceRGBA_vert,fragmentShader:L.distanceRGBA_frag},shadow:{uniforms:va([D.lights, +D.fog,{color:{value:new A(0)},opacity:{value:1}}]),vertexShader:L.shadow_vert,fragmentShader:L.shadow_frag}};eb.physical={uniforms:va([eb.standard.uniforms,{clearcoat:{value:0},clearcoatMap:{value:null},clearcoatRoughness:{value:0},clearcoatRoughnessMap:{value:null},clearcoatNormalScale:{value:new v(1,1)},clearcoatNormalMap:{value:null},sheen:{value:new A(0)},transparency:{value:0}}]),vertexShader:L.meshphysical_vert,fragmentShader:L.meshphysical_frag};pb.prototype=Object.create(V.prototype);pb.prototype.constructor= +pb;pb.prototype.isCubeTexture=!0;Object.defineProperty(pb.prototype,"images",{get:function(){return this.image},set:function(a){this.image=a}});Fc.prototype=Object.create(V.prototype);Fc.prototype.constructor=Fc;Fc.prototype.isDataTexture2DArray=!0;Gc.prototype=Object.create(V.prototype);Gc.prototype.constructor=Gc;Gc.prototype.isDataTexture3D=!0;var Eh=new V,Hj=new Fc,Jj=new Gc,Fh=new pb,yh=[],Ah=[],Dh=new Float32Array(16),Ch=new Float32Array(9),Bh=new Float32Array(4);Gh.prototype.updateCache=function(a){var b= +this.cache;a instanceof Float32Array&&b.length!==a.length&&(this.cache=new Float32Array(a.length));Ia(b,a)};Hh.prototype.setValue=function(a,b,c){for(var d=this.seq,e=0,f=d.length;e!==f;++e){var g=d[e];g.setValue(a,b[g.id],c)}};var eg=/([\w\d_]+)(\])?(\[|\.)?/g;Gb.prototype.setValue=function(a,b,c,d){b=this.map[b];void 0!==b&&b.setValue(a,c,d)};Gb.prototype.setOptional=function(a,b,c){b=b[c];void 0!==b&&this.setValue(a,c,b)};Gb.upload=function(a,b,c,d){for(var e=0,f=b.length;e!==f;++e){var g=b[e], +h=c[g.id];!1!==h.needsUpdate&&g.setValue(a,h.value,d)}};Gb.seqWithValue=function(a,b){for(var c=[],d=0,e=a.length;d!==e;++d){var f=a[d];f.id in b&&c.push(f)}return c};var ok=0,gg=/^[ \t]*#include +<([\w\d./]+)>/gm,Qh=/#pragma unroll_loop[\s]+?for \( int i = (\d+); i < (\d+); i \+\+ \) \{([\s\S]+?)(?=\})\}/g,Ph=/#pragma unroll_loop_start[\s]+?for \( int i = (\d+); i < (\d+); i \+\+ \) \{([\s\S]+?)(?=\})\}[\s]+?#pragma unroll_loop_end/g,yk=0;Hb.prototype=Object.create(J.prototype);Hb.prototype.constructor= +Hb;Hb.prototype.isMeshDepthMaterial=!0;Hb.prototype.copy=function(a){J.prototype.copy.call(this,a);this.depthPacking=a.depthPacking;this.skinning=a.skinning;this.morphTargets=a.morphTargets;this.map=a.map;this.alphaMap=a.alphaMap;this.displacementMap=a.displacementMap;this.displacementScale=a.displacementScale;this.displacementBias=a.displacementBias;this.wireframe=a.wireframe;this.wireframeLinewidth=a.wireframeLinewidth;return this};Ib.prototype=Object.create(J.prototype);Ib.prototype.constructor= +Ib;Ib.prototype.isMeshDistanceMaterial=!0;Ib.prototype.copy=function(a){J.prototype.copy.call(this,a);this.referencePosition.copy(a.referencePosition);this.nearDistance=a.nearDistance;this.farDistance=a.farDistance;this.skinning=a.skinning;this.morphTargets=a.morphTargets;this.map=a.map;this.alphaMap=a.alphaMap;this.displacementMap=a.displacementMap;this.displacementScale=a.displacementScale;this.displacementBias=a.displacementBias;return this};Ke.prototype=Object.assign(Object.create(ba.prototype), +{constructor:Ke,isArrayCamera:!0});Jc.prototype=Object.assign(Object.create(E.prototype),{constructor:Jc,isGroup:!0});Object.assign(Le.prototype,{constructor:Le,getTargetRaySpace:function(){null===this._targetRay&&(this._targetRay=new Jc,this._targetRay.matrixAutoUpdate=!1,this._targetRay.visible=!1);return this._targetRay},getGripSpace:function(){null===this._grip&&(this._grip=new Jc,this._grip.matrixAutoUpdate=!1,this._grip.visible=!1);return this._grip},dispatchEvent:function(a){null!==this._targetRay&& +this._targetRay.dispatchEvent(a);null!==this._grip&&this._grip.dispatchEvent(a);return this},disconnect:function(a){this.dispatchEvent({type:"disconnected",data:a});null!==this._targetRay&&(this._targetRay.visible=!1);null!==this._grip&&(this._grip.visible=!1);return this},update:function(a,b,c){var d=null,e=null,f=this._targetRay,g=this._grip;a&&(null!==f&&(d=b.getPose(a.targetRaySpace,c),null!==d&&(f.matrix.fromArray(d.transform.matrix),f.matrix.decompose(f.position,f.rotation,f.scale))),null!== +g&&a.gripSpace&&(e=b.getPose(a.gripSpace,c),null!==e&&(g.matrix.fromArray(e.transform.matrix),g.matrix.decompose(g.position,g.rotation,g.scale))));null!==f&&(f.visible=null!==d);null!==g&&(g.visible=null!==e);return this}});Object.assign(Xh.prototype,ua.prototype);Object.assign(Me.prototype,{isFogExp2:!0,clone:function(){return new Me(this.color,this.density)},toJSON:function(){return{type:"FogExp2",color:this.color.getHex(),density:this.density}}});Object.assign(Ne.prototype,{isFog:!0,clone:function(){return new Ne(this.color, +this.near,this.far)},toJSON:function(){return{type:"Fog",color:this.color.getHex(),near:this.near,far:this.far}}});Object.defineProperty(qb.prototype,"needsUpdate",{set:function(a){!0===a&&this.version++}});Object.assign(qb.prototype,{isInterleavedBuffer:!0,onUploadCallback:function(){},setUsage:function(a){this.usage=a;return this},copy:function(a){this.array=new a.array.constructor(a.array);this.count=a.count;this.stride=a.stride;this.usage=a.usage;return this},copyAt:function(a,b,c){a*=this.stride; +c*=b.stride;for(var d=0,e=this.stride;da.far||b.push({distance:e,point:we.clone(),uv:wa.getUV(we,If,xe,Jf,Gi,jh,Hi,new v),face:null,object:this})},clone:function(){return(new this.constructor(this.material)).copy(this)},copy:function(a){E.prototype.copy.call(this,a);void 0!==a.center&&this.center.copy(a.center);return this}});var Kf=new n,Ii=new n;Nd.prototype=Object.assign(Object.create(E.prototype),{constructor:Nd,isLOD:!0,copy:function(a){E.prototype.copy.call(this,a,!1);for(var b=a.levels,c=0,d=b.length;c=b[c].distance)b[c-1].object.visible=!1,b[c].object.visible=!0;else break;for(this._currentLevel=c-1;cf;f++)if(k=c.getComponent(f), +0!==k){var m=b.getComponent(f);e.multiplyMatrices(h.bones[m].matrixWorld,h.boneInverses[m]);g.addScaledVector(d.copy(a).applyMatrix4(e),k)}return g.applyMatrix4(this.bindMatrixInverse)}}()});var Ji=new P,Sk=new P;Object.assign(Qe.prototype,{calculateInverses:function(){this.boneInverses=[];for(var a=0,b=this.bones.length;ad||(h.applyMatrix4(this.matrixWorld),u=a.ray.origin.distanceTo(h),ua.far||b.push({distance:u,point:e.clone().applyMatrix4(this.matrixWorld),index:c,face:null,faceIndex:null,object:this}))}}else for(c=0,p=l.length/3-1;cd||(h.applyMatrix4(this.matrixWorld),u=a.ray.origin.distanceTo(h),ua.far||b.push({distance:u,point:e.clone().applyMatrix4(this.matrixWorld),index:c, +face:null,faceIndex:null,object:this}))}else if(c.isGeometry)for(f=c.vertices,g=f.length,c=0;cd||(h.applyMatrix4(this.matrixWorld),u=a.ray.origin.distanceTo(h),ua.far||b.push({distance:u,point:e.clone().applyMatrix4(this.matrixWorld),index:c,face:null,faceIndex:null,object:this}))}},clone:function(){return(new this.constructor(this.geometry,this.material)).copy(this)}});var Nf=new n,Of=new n;na.prototype=Object.assign(Object.create(Ja.prototype), +{constructor:na,isLineSegments:!0,computeLineDistances:function(){var a=this.geometry;if(a.isBufferGeometry)if(null===a.index){for(var b=a.attributes.position,c=[],d=0,e=b.count;d= +a.HAVE_CURRENT_DATA&&(this.needsUpdate=!0)}});Nc.prototype=Object.create(V.prototype);Nc.prototype.constructor=Nc;Nc.prototype.isCompressedTexture=!0;Od.prototype=Object.create(V.prototype);Od.prototype.constructor=Od;Od.prototype.isCanvasTexture=!0;Pd.prototype=Object.create(V.prototype);Pd.prototype.constructor=Pd;Pd.prototype.isDepthTexture=!0;Oc.prototype=Object.create(B.prototype);Oc.prototype.constructor=Oc;Qd.prototype=Object.create(O.prototype);Qd.prototype.constructor=Qd;Pc.prototype=Object.create(B.prototype); +Pc.prototype.constructor=Pc;Rd.prototype=Object.create(O.prototype);Rd.prototype.constructor=Rd;Ea.prototype=Object.create(B.prototype);Ea.prototype.constructor=Ea;Sd.prototype=Object.create(O.prototype);Sd.prototype.constructor=Sd;Qc.prototype=Object.create(Ea.prototype);Qc.prototype.constructor=Qc;Td.prototype=Object.create(O.prototype);Td.prototype.constructor=Td;ac.prototype=Object.create(Ea.prototype);ac.prototype.constructor=ac;Ud.prototype=Object.create(O.prototype);Ud.prototype.constructor= +Ud;Rc.prototype=Object.create(Ea.prototype);Rc.prototype.constructor=Rc;Vd.prototype=Object.create(O.prototype);Vd.prototype.constructor=Vd;Sc.prototype=Object.create(Ea.prototype);Sc.prototype.constructor=Sc;Wd.prototype=Object.create(O.prototype);Wd.prototype.constructor=Wd;bc.prototype=Object.create(B.prototype);bc.prototype.constructor=bc;bc.prototype.toJSON=function(){var a=B.prototype.toJSON.call(this);a.path=this.parameters.path.toJSON();return a};Xd.prototype=Object.create(O.prototype);Xd.prototype.constructor= +Xd;Tc.prototype=Object.create(B.prototype);Tc.prototype.constructor=Tc;Yd.prototype=Object.create(O.prototype);Yd.prototype.constructor=Yd;Uc.prototype=Object.create(B.prototype);Uc.prototype.constructor=Uc;var Tk={triangulate:function(a,b,c){c=c||2;var d=b&&b.length,e=d?b[0]*c:a.length,f=$h(a,0,e,c,!0),g=[];if(!f||f.next===f.prev)return g;var h;if(d){var k=c;d=[];var m;var l=0;for(m=b.length;l80*c){var r=h=a[0];var q=d=a[1];for(k=c;kh&&(h=l),b>d&&(d=b);h=Math.max(h-r,d-q);h=0!==h?1/h:0}$d(f,g,c,r,q,h);return g}},rb={area:function(a){for(var b=a.length,c=0,d=b-1,e=0;erb.area(a)},triangulateShape:function(a,b){var c=[],d=[],e=[];di(a);ei(c,a);var f= +a.length;b.forEach(di);for(a=0;aMath.abs(g-k)?[new v(a,1-c),new v(h,1-d),new v(l,1-e),new v(p,1-b)]:[new v(g,1-c),new v(k,1-d),new v(n,1-e),new v(u,1-b)]}};be.prototype=Object.create(O.prototype); +be.prototype.constructor=be;Wc.prototype=Object.create(fb.prototype);Wc.prototype.constructor=Wc;ce.prototype=Object.create(O.prototype);ce.prototype.constructor=ce;dc.prototype=Object.create(B.prototype);dc.prototype.constructor=dc;de.prototype=Object.create(O.prototype);de.prototype.constructor=de;Xc.prototype=Object.create(B.prototype);Xc.prototype.constructor=Xc;ee.prototype=Object.create(O.prototype);ee.prototype.constructor=ee;Yc.prototype=Object.create(B.prototype);Yc.prototype.constructor= +Yc;ec.prototype=Object.create(O.prototype);ec.prototype.constructor=ec;ec.prototype.toJSON=function(){var a=O.prototype.toJSON.call(this);return gi(this.parameters.shapes,a)};fc.prototype=Object.create(B.prototype);fc.prototype.constructor=fc;fc.prototype.toJSON=function(){var a=B.prototype.toJSON.call(this);return gi(this.parameters.shapes,a)};Zc.prototype=Object.create(B.prototype);Zc.prototype.constructor=Zc;gc.prototype=Object.create(O.prototype);gc.prototype.constructor=gc;sb.prototype=Object.create(B.prototype); +sb.prototype.constructor=sb;fe.prototype=Object.create(gc.prototype);fe.prototype.constructor=fe;ge.prototype=Object.create(sb.prototype);ge.prototype.constructor=ge;he.prototype=Object.create(O.prototype);he.prototype.constructor=he;$c.prototype=Object.create(B.prototype);$c.prototype.constructor=$c;var qa=Object.freeze({__proto__:null,WireframeGeometry:Oc,ParametricGeometry:Qd,ParametricBufferGeometry:Pc,TetrahedronGeometry:Sd,TetrahedronBufferGeometry:Qc,OctahedronGeometry:Td,OctahedronBufferGeometry:ac, +IcosahedronGeometry:Ud,IcosahedronBufferGeometry:Rc,DodecahedronGeometry:Vd,DodecahedronBufferGeometry:Sc,PolyhedronGeometry:Rd,PolyhedronBufferGeometry:Ea,TubeGeometry:Wd,TubeBufferGeometry:bc,TorusKnotGeometry:Xd,TorusKnotBufferGeometry:Tc,TorusGeometry:Yd,TorusBufferGeometry:Uc,TextGeometry:be,TextBufferGeometry:Wc,SphereGeometry:ce,SphereBufferGeometry:dc,RingGeometry:de,RingBufferGeometry:Xc,PlaneGeometry:Ed,PlaneBufferGeometry:$b,LatheGeometry:ee,LatheBufferGeometry:Yc,ShapeGeometry:ec,ShapeBufferGeometry:fc, +ExtrudeGeometry:cc,ExtrudeBufferGeometry:fb,EdgesGeometry:Zc,ConeGeometry:fe,ConeBufferGeometry:ge,CylinderGeometry:gc,CylinderBufferGeometry:sb,CircleGeometry:he,CircleBufferGeometry:$c,BoxGeometry:ih,BoxBufferGeometry:Fd});hc.prototype=Object.create(J.prototype);hc.prototype.constructor=hc;hc.prototype.isShadowMaterial=!0;hc.prototype.copy=function(a){J.prototype.copy.call(this,a);this.color.copy(a.color);return this};tb.prototype=Object.create(Aa.prototype);tb.prototype.constructor=tb;tb.prototype.isRawShaderMaterial= +!0;gb.prototype=Object.create(J.prototype);gb.prototype.constructor=gb;gb.prototype.isMeshStandardMaterial=!0;gb.prototype.copy=function(a){J.prototype.copy.call(this,a);this.defines={STANDARD:""};this.color.copy(a.color);this.roughness=a.roughness;this.metalness=a.metalness;this.map=a.map;this.lightMap=a.lightMap;this.lightMapIntensity=a.lightMapIntensity;this.aoMap=a.aoMap;this.aoMapIntensity=a.aoMapIntensity;this.emissive.copy(a.emissive);this.emissiveMap=a.emissiveMap;this.emissiveIntensity=a.emissiveIntensity; +this.bumpMap=a.bumpMap;this.bumpScale=a.bumpScale;this.normalMap=a.normalMap;this.normalMapType=a.normalMapType;this.normalScale.copy(a.normalScale);this.displacementMap=a.displacementMap;this.displacementScale=a.displacementScale;this.displacementBias=a.displacementBias;this.roughnessMap=a.roughnessMap;this.metalnessMap=a.metalnessMap;this.alphaMap=a.alphaMap;this.envMap=a.envMap;this.envMapIntensity=a.envMapIntensity;this.refractionRatio=a.refractionRatio;this.wireframe=a.wireframe;this.wireframeLinewidth= +a.wireframeLinewidth;this.wireframeLinecap=a.wireframeLinecap;this.wireframeLinejoin=a.wireframeLinejoin;this.skinning=a.skinning;this.morphTargets=a.morphTargets;this.morphNormals=a.morphNormals;this.vertexTangents=a.vertexTangents;return this};ic.prototype=Object.create(gb.prototype);ic.prototype.constructor=ic;ic.prototype.isMeshPhysicalMaterial=!0;ic.prototype.copy=function(a){gb.prototype.copy.call(this,a);this.defines={STANDARD:"",PHYSICAL:""};this.clearcoat=a.clearcoat;this.clearcoatMap=a.clearcoatMap; +this.clearcoatRoughness=a.clearcoatRoughness;this.clearcoatRoughnessMap=a.clearcoatRoughnessMap;this.clearcoatNormalMap=a.clearcoatNormalMap;this.clearcoatNormalScale.copy(a.clearcoatNormalScale);this.reflectivity=a.reflectivity;this.sheen=a.sheen?(this.sheen||new A).copy(a.sheen):null;this.transparency=a.transparency;return this};Mb.prototype=Object.create(J.prototype);Mb.prototype.constructor=Mb;Mb.prototype.isMeshPhongMaterial=!0;Mb.prototype.copy=function(a){J.prototype.copy.call(this,a);this.color.copy(a.color); +this.specular.copy(a.specular);this.shininess=a.shininess;this.map=a.map;this.lightMap=a.lightMap;this.lightMapIntensity=a.lightMapIntensity;this.aoMap=a.aoMap;this.aoMapIntensity=a.aoMapIntensity;this.emissive.copy(a.emissive);this.emissiveMap=a.emissiveMap;this.emissiveIntensity=a.emissiveIntensity;this.bumpMap=a.bumpMap;this.bumpScale=a.bumpScale;this.normalMap=a.normalMap;this.normalMapType=a.normalMapType;this.normalScale.copy(a.normalScale);this.displacementMap=a.displacementMap;this.displacementScale= +a.displacementScale;this.displacementBias=a.displacementBias;this.specularMap=a.specularMap;this.alphaMap=a.alphaMap;this.envMap=a.envMap;this.combine=a.combine;this.reflectivity=a.reflectivity;this.refractionRatio=a.refractionRatio;this.wireframe=a.wireframe;this.wireframeLinewidth=a.wireframeLinewidth;this.wireframeLinecap=a.wireframeLinecap;this.wireframeLinejoin=a.wireframeLinejoin;this.skinning=a.skinning;this.morphTargets=a.morphTargets;this.morphNormals=a.morphNormals;return this};jc.prototype= +Object.create(J.prototype);jc.prototype.constructor=jc;jc.prototype.isMeshToonMaterial=!0;jc.prototype.copy=function(a){J.prototype.copy.call(this,a);this.color.copy(a.color);this.specular.copy(a.specular);this.shininess=a.shininess;this.map=a.map;this.gradientMap=a.gradientMap;this.lightMap=a.lightMap;this.lightMapIntensity=a.lightMapIntensity;this.aoMap=a.aoMap;this.aoMapIntensity=a.aoMapIntensity;this.emissive.copy(a.emissive);this.emissiveMap=a.emissiveMap;this.emissiveIntensity=a.emissiveIntensity; +this.bumpMap=a.bumpMap;this.bumpScale=a.bumpScale;this.normalMap=a.normalMap;this.normalMapType=a.normalMapType;this.normalScale.copy(a.normalScale);this.displacementMap=a.displacementMap;this.displacementScale=a.displacementScale;this.displacementBias=a.displacementBias;this.specularMap=a.specularMap;this.alphaMap=a.alphaMap;this.wireframe=a.wireframe;this.wireframeLinewidth=a.wireframeLinewidth;this.wireframeLinecap=a.wireframeLinecap;this.wireframeLinejoin=a.wireframeLinejoin;this.skinning=a.skinning; +this.morphTargets=a.morphTargets;this.morphNormals=a.morphNormals;return this};kc.prototype=Object.create(J.prototype);kc.prototype.constructor=kc;kc.prototype.isMeshNormalMaterial=!0;kc.prototype.copy=function(a){J.prototype.copy.call(this,a);this.bumpMap=a.bumpMap;this.bumpScale=a.bumpScale;this.normalMap=a.normalMap;this.normalMapType=a.normalMapType;this.normalScale.copy(a.normalScale);this.displacementMap=a.displacementMap;this.displacementScale=a.displacementScale;this.displacementBias=a.displacementBias; +this.wireframe=a.wireframe;this.wireframeLinewidth=a.wireframeLinewidth;this.skinning=a.skinning;this.morphTargets=a.morphTargets;this.morphNormals=a.morphNormals;return this};lc.prototype=Object.create(J.prototype);lc.prototype.constructor=lc;lc.prototype.isMeshLambertMaterial=!0;lc.prototype.copy=function(a){J.prototype.copy.call(this,a);this.color.copy(a.color);this.map=a.map;this.lightMap=a.lightMap;this.lightMapIntensity=a.lightMapIntensity;this.aoMap=a.aoMap;this.aoMapIntensity=a.aoMapIntensity; +this.emissive.copy(a.emissive);this.emissiveMap=a.emissiveMap;this.emissiveIntensity=a.emissiveIntensity;this.specularMap=a.specularMap;this.alphaMap=a.alphaMap;this.envMap=a.envMap;this.combine=a.combine;this.reflectivity=a.reflectivity;this.refractionRatio=a.refractionRatio;this.wireframe=a.wireframe;this.wireframeLinewidth=a.wireframeLinewidth;this.wireframeLinecap=a.wireframeLinecap;this.wireframeLinejoin=a.wireframeLinejoin;this.skinning=a.skinning;this.morphTargets=a.morphTargets;this.morphNormals= +a.morphNormals;return this};mc.prototype=Object.create(J.prototype);mc.prototype.constructor=mc;mc.prototype.isMeshMatcapMaterial=!0;mc.prototype.copy=function(a){J.prototype.copy.call(this,a);this.defines={MATCAP:""};this.color.copy(a.color);this.matcap=a.matcap;this.map=a.map;this.bumpMap=a.bumpMap;this.bumpScale=a.bumpScale;this.normalMap=a.normalMap;this.normalMapType=a.normalMapType;this.normalScale.copy(a.normalScale);this.displacementMap=a.displacementMap;this.displacementScale=a.displacementScale; +this.displacementBias=a.displacementBias;this.alphaMap=a.alphaMap;this.skinning=a.skinning;this.morphTargets=a.morphTargets;this.morphNormals=a.morphNormals;return this};nc.prototype=Object.create(da.prototype);nc.prototype.constructor=nc;nc.prototype.isLineDashedMaterial=!0;nc.prototype.copy=function(a){da.prototype.copy.call(this,a);this.scale=a.scale;this.dashSize=a.dashSize;this.gapSize=a.gapSize;return this};var Uk=Object.freeze({__proto__:null,ShadowMaterial:hc,SpriteMaterial:Kb,RawShaderMaterial:tb, +ShaderMaterial:Aa,PointsMaterial:Va,MeshPhysicalMaterial:ic,MeshStandardMaterial:gb,MeshPhongMaterial:Mb,MeshToonMaterial:jc,MeshNormalMaterial:kc,MeshLambertMaterial:lc,MeshDepthMaterial:Hb,MeshDistanceMaterial:Ib,MeshBasicMaterial:Na,MeshMatcapMaterial:mc,LineDashedMaterial:nc,LineBasicMaterial:da,Material:J}),ka={arraySlice:function(a,b,c){return ka.isTypedArray(a)?new a.constructor(a.subarray(b,void 0!==c?c:a.length)):a.slice(b,c)},convertArray:function(a,b,c){return!a||!c&&a.constructor===b? +a:"number"===typeof b.BYTES_PER_ELEMENT?new b(a):Array.prototype.slice.call(a)},isTypedArray:function(a){return ArrayBuffer.isView(a)&&!(a instanceof DataView)},getKeyframeOrder:function(a){for(var b=a.length,c=Array(b),d=0;d!==b;++d)c[d]=d;c.sort(function(b,c){return a[b]-a[c]});return c},sortedArray:function(a,b,c){for(var d=a.length,e=new a.constructor(d),f=0,g=0;g!==d;++f)for(var h=c[f]*b,k=0;k!==b;++k)e[g++]=a[h+k];return e},flattenJSON:function(a,b,c,d){for(var e=1,f=a[0];void 0!==f&&void 0=== +f[d];)f=a[e++];if(void 0!==f){var g=f[d];if(void 0!==g)if(Array.isArray(g)){do g=f[d],void 0!==g&&(b.push(f.time),c.push.apply(c,g)),f=a[e++];while(void 0!==f)}else if(void 0!==g.toArray){do g=f[d],void 0!==g&&(b.push(f.time),g.toArray(c,c.length)),f=a[e++];while(void 0!==f)}else{do g=f[d],void 0!==g&&(b.push(f.time),c.push(g)),f=a[e++];while(void 0!==f)}}},subclip:function(a,b,c,d,e){e=e||30;a=a.clone();a.name=b;var f=[];for(b=0;b=d))for(k.push(g.times[n]),p=0;pa.tracks[b].times[0]&&(c=a.tracks[b].times[0]);for(b=0;b=d)d=30;var e=a.tracks.length;b/=d;for(d=0;d=f.times[l]?l=ka.arraySlice(f.values,l*k):(l=f.createInterpolant(),l.evaluate(b),l=l.resultBuffer);"quaternion"===g&&(new la(l[0],l[1],l[2],l[3])).normalize().conjugate().toArray(l); +for(var n=h.times.length,p=0;p= +e)break a;else{f=b[1];a=e)break b}d=c;c=0}}for(;c>>1,ab;)--f;++f;if(0!==e||f!==d)e>=f&&(f=Math.max(f, +1),e=f-1),a=this.getValueSize(),this.times=ka.arraySlice(c,e,f),this.values=ka.arraySlice(this.values,e*a,f*a);return this},validate:function(){var a=!0,b=this.getValueSize();0!==b-Math.floor(b)&&(console.error("THREE.KeyframeTrack: Invalid value size in track.",this),a=!1);var c=this.times;b=this.values;var d=c.length;0===d&&(console.error("THREE.KeyframeTrack: Track is empty.",this),a=!1);for(var e=null,f=0;f!==d;f++){var g=c[f];if("number"===typeof g&&isNaN(g)){console.error("THREE.KeyframeTrack: Time is not a valid number.", +this,f,g);a=!1;break}if(null!==e&&e>g){console.error("THREE.KeyframeTrack: Out of order keys.",this,f,g,e);a=!1;break}e=g}if(void 0!==b&&ka.isTypedArray(b))for(f=0,c=b.length;f!==c;++f)if(d=b[f],isNaN(d)){console.error("THREE.KeyframeTrack: Value is not a valid number.",this,f,d);a=!1;break}return a},optimize:function(){for(var a=ka.arraySlice(this.times),b=ka.arraySlice(this.values),c=this.getValueSize(),d=2302===this.getInterpolation(),e=1,f=a.length-1,g=1;gg)e=a+1;else if(0c&&(c=0);1Number.EPSILON&&(g.normalize(),c=Math.acos(M.clamp(d[k-1].dot(d[k]),-1,1)),e[k].applyMatrix4(h.makeRotationAxis(g,c))),f[k].crossVectors(d[k],e[k]);if(!0===b)for(c=Math.acos(M.clamp(e[0].dot(e[a]),-1,1)),c/=a,0d;)d+=c;for(;d>c;)d-=c;de&&(e=1);1E-4>d&&(d=e);1E-4>k&&(k=e);kh.initNonuniformCatmullRom(f.x,g.x,h.x,c.x,d,e,k);lh.initNonuniformCatmullRom(f.y,g.y,h.y,c.y,d,e,k);mh.initNonuniformCatmullRom(f.z,g.z,h.z,c.z,d,e,k)}else"catmullrom"===this.curveType&&(kh.initCatmullRom(f.x,g.x,h.x,c.x,this.tension),lh.initCatmullRom(f.y,g.y,h.y,c.y,this.tension),mh.initCatmullRom(f.z,g.z,h.z,c.z,this.tension));b.set(kh.calc(a), +lh.calc(a),mh.calc(a));return b};pa.prototype.copy=function(a){G.prototype.copy.call(this,a);this.points=[];for(var b=0,c=a.points.length;bc.length-2?c.length-1:a+1];c=c[a>c.length-3?c.length-1:a+2];b.set(ii(d,e.x,f.x,g.x,c.x),ii(d,e.y,f.y,g.y,c.y));return b};Za.prototype.copy=function(a){G.prototype.copy.call(this,a);this.points=[];for(var b=0,c=a.points.length;b=b)return b=c[a]-b,a=this.curves[a],c=a.getLength(),a.getPointAt(0=== +c?0:1-b/c);a++}return null},getLength:function(){var a=this.getCurveLengths();return a[a.length-1]},updateArcLengths:function(){this.needsUpdate=!0;this.cacheLengths=null;this.getCurveLengths()},getCurveLengths:function(){if(this.cacheLengths&&this.cacheLengths.length===this.curves.length)return this.cacheLengths;for(var a=[],b=0,c=0,d=this.curves.length;cb;b++)this.coefficients[b].copy(a[b]);return this},zero:function(){for(var a=0;9>a;a++)this.coefficients[a].set(0,0,0);return this},getAt:function(a,b){var c=a.x,d=a.y;a=a.z;var e=this.coefficients;b.copy(e[0]).multiplyScalar(.282095);b.addScaledVector(e[1],.488603*d);b.addScaledVector(e[2],.488603*a);b.addScaledVector(e[3], +.488603*c);b.addScaledVector(e[4],1.092548*c*d);b.addScaledVector(e[5],1.092548*d*a);b.addScaledVector(e[6],.315392*(3*a*a-1));b.addScaledVector(e[7],1.092548*c*a);b.addScaledVector(e[8],.546274*(c*c-d*d));return b},getIrradianceAt:function(a,b){var c=a.x,d=a.y;a=a.z;var e=this.coefficients;b.copy(e[0]).multiplyScalar(.886227);b.addScaledVector(e[1],1.023328*d);b.addScaledVector(e[2],1.023328*a);b.addScaledVector(e[3],1.023328*c);b.addScaledVector(e[4],.858086*c*d);b.addScaledVector(e[5],.858086* +d*a);b.addScaledVector(e[6],.743125*a*a-.247708);b.addScaledVector(e[7],.858086*c*a);b.addScaledVector(e[8],.429043*(c*c-d*d));return b},add:function(a){for(var b=0;9>b;b++)this.coefficients[b].add(a.coefficients[b]);return this},addScaledSH:function(a,b){for(var c=0;9>c;c++)this.coefficients[c].addScaledVector(a.coefficients[c],b);return this},scale:function(a){for(var b=0;9>b;b++)this.coefficients[b].multiplyScalar(a);return this},lerp:function(a,b){for(var c=0;9>c;c++)this.coefficients[c].lerp(a.coefficients[c], +b);return this},equals:function(a){for(var b=0;9>b;b++)if(!this.coefficients[b].equals(a.coefficients[b]))return!1;return!0},copy:function(a){return this.set(a.coefficients)},clone:function(){return(new this.constructor).copy(this)},fromArray:function(a,b){void 0===b&&(b=0);for(var c=this.coefficients,d=0;9>d;d++)c[d].fromArray(a,b+3*d);return this},toArray:function(a,b){void 0===a&&(a=[]);void 0===b&&(b=0);for(var c=this.coefficients,d=0;9>d;d++)c[d].toArray(a,b+3*d);return a}});Object.assign(nf, +{getBasisAt:function(a,b){var c=a.x,d=a.y;a=a.z;b[0]=.282095;b[1]=.488603*d;b[2]=.488603*a;b[3]=.488603*c;b[4]=1.092548*c*d;b[5]=1.092548*d*a;b[6]=.315392*(3*a*a-1);b[7]=1.092548*c*a;b[8]=.546274*(c*c-d*d)}});Ra.prototype=Object.assign(Object.create(S.prototype),{constructor:Ra,isLightProbe:!0,copy:function(a){S.prototype.copy.call(this,a);this.sh.copy(a.sh);return this},fromJSON:function(a){this.intensity=a.intensity;this.sh.fromArray(a.sh);return this},toJSON:function(a){a=S.prototype.toJSON.call(this, +a);a.object.sh=this.sh.toArray();return a}});of.prototype=Object.assign(Object.create(X.prototype),{constructor:of,load:function(a,b,c,d){var e=this,f=new Qa(e.manager);f.setPath(e.path);f.load(a,function(a){b(e.parse(JSON.parse(a)))},c,d)},parse:function(a){function b(a){void 0===c[a]&&console.warn("THREE.MaterialLoader: Undefined texture",a);return c[a]}var c=this.textures,d=new Uk[a.type];void 0!==a.uuid&&(d.uuid=a.uuid);void 0!==a.name&&(d.name=a.name);void 0!==a.color&&d.color.setHex(a.color); +void 0!==a.roughness&&(d.roughness=a.roughness);void 0!==a.metalness&&(d.metalness=a.metalness);void 0!==a.sheen&&(d.sheen=(new A).setHex(a.sheen));void 0!==a.emissive&&d.emissive.setHex(a.emissive);void 0!==a.specular&&d.specular.setHex(a.specular);void 0!==a.shininess&&(d.shininess=a.shininess);void 0!==a.clearcoat&&(d.clearcoat=a.clearcoat);void 0!==a.clearcoatRoughness&&(d.clearcoatRoughness=a.clearcoatRoughness);void 0!==a.fog&&(d.fog=a.fog);void 0!==a.flatShading&&(d.flatShading=a.flatShading); +void 0!==a.blending&&(d.blending=a.blending);void 0!==a.combine&&(d.combine=a.combine);void 0!==a.side&&(d.side=a.side);void 0!==a.opacity&&(d.opacity=a.opacity);void 0!==a.transparent&&(d.transparent=a.transparent);void 0!==a.alphaTest&&(d.alphaTest=a.alphaTest);void 0!==a.depthTest&&(d.depthTest=a.depthTest);void 0!==a.depthWrite&&(d.depthWrite=a.depthWrite);void 0!==a.colorWrite&&(d.colorWrite=a.colorWrite);void 0!==a.stencilWrite&&(d.stencilWrite=a.stencilWrite);void 0!==a.stencilWriteMask&&(d.stencilWriteMask= +a.stencilWriteMask);void 0!==a.stencilFunc&&(d.stencilFunc=a.stencilFunc);void 0!==a.stencilRef&&(d.stencilRef=a.stencilRef);void 0!==a.stencilFuncMask&&(d.stencilFuncMask=a.stencilFuncMask);void 0!==a.stencilFail&&(d.stencilFail=a.stencilFail);void 0!==a.stencilZFail&&(d.stencilZFail=a.stencilZFail);void 0!==a.stencilZPass&&(d.stencilZPass=a.stencilZPass);void 0!==a.wireframe&&(d.wireframe=a.wireframe);void 0!==a.wireframeLinewidth&&(d.wireframeLinewidth=a.wireframeLinewidth);void 0!==a.wireframeLinecap&& +(d.wireframeLinecap=a.wireframeLinecap);void 0!==a.wireframeLinejoin&&(d.wireframeLinejoin=a.wireframeLinejoin);void 0!==a.rotation&&(d.rotation=a.rotation);1!==a.linewidth&&(d.linewidth=a.linewidth);void 0!==a.dashSize&&(d.dashSize=a.dashSize);void 0!==a.gapSize&&(d.gapSize=a.gapSize);void 0!==a.scale&&(d.scale=a.scale);void 0!==a.polygonOffset&&(d.polygonOffset=a.polygonOffset);void 0!==a.polygonOffsetFactor&&(d.polygonOffsetFactor=a.polygonOffsetFactor);void 0!==a.polygonOffsetUnits&&(d.polygonOffsetUnits= +a.polygonOffsetUnits);void 0!==a.skinning&&(d.skinning=a.skinning);void 0!==a.morphTargets&&(d.morphTargets=a.morphTargets);void 0!==a.morphNormals&&(d.morphNormals=a.morphNormals);void 0!==a.dithering&&(d.dithering=a.dithering);void 0!==a.vertexTangents&&(d.vertexTangents=a.vertexTangents);void 0!==a.visible&&(d.visible=a.visible);void 0!==a.toneMapped&&(d.toneMapped=a.toneMapped);void 0!==a.userData&&(d.userData=a.userData);void 0!==a.vertexColors&&(d.vertexColors="number"===typeof a.vertexColors? +0Number.EPSILON){if(0>l&&(g=b[f],k=-k,h=b[e],l=-l),!(a.yh.y))if(a.y=== +g.y){if(a.x===g.x)return!0}else{e=l*(a.x-g.x)-k*(a.y-g.y);if(0===e)return!0;0>e||(d=!d)}}else if(a.y===g.y&&(h.x<=a.x&&a.x<=g.x||g.x<=a.x&&a.x<=h.x))return!0}return d}var e=rb.isClockWise,f=this.subPaths;if(0===f.length)return[];if(!0===b)return c(f);b=[];if(1===f.length){var g=f[0];var h=new Nb;h.curves=g.curves;b.push(h);return b}var k=!e(f[0].getPoints());k=a?!k:k;h=[];var l=[],n=[],p=0;l[p]=void 0;n[p]=[];for(var u=0,r=f.length;ud&&this._mixBufferRegion(c,a,b*this._origIndex,1-d,b);0=b){var n=b++,p=a[n];c[p.uuid]=l;a[l]=p;c[k]=n;a[n]=h;h=0;for(k=e;h!==k;++h){p=d[h];var u=p[l];p[l]=p[n];p[n]=u}}}this.nCachedObjects_=b},uncache:function(){for(var a=this._objects,b=a.length,c=this.nCachedObjects_,d=this._indicesByUUID,e=this._bindings,f=e.length,g=0,h=arguments.length;g!==h;++g){var k= +arguments[g].uuid,l=d[k];if(void 0!==l)if(delete d[k],lb||0===c)return;this._startTime=null;b*=c}b*=this._updateTimeScale(a);c=this._updateTime(b);a=this._updateWeight(a);if(0c.parameterPositions[1]&&(this.stopFading(),0===d&&(this.enabled=!1))}}return this._effectiveWeight=b},_updateTimeScale:function(a){var b=0;if(!this.paused){b=this.timeScale;var c=this._timeScaleInterpolant;if(null!==c){var d=c.evaluate(a)[0];b*=d;a>c.parameterPositions[1]&&(this.stopWarping(),0===b?this.paused=!0:this.timeScale=b)}}return this._effectiveTimeScale= +b},_updateTime:function(a){var b=this.time+a,c=this._clip.duration,d=this.loop,e=this._loopCount,f=2202===d;if(0===a)return-1===e?b:f&&1===(e&1)?c-b:b;if(2200===d)a:{if(-1===e&&(this._loopCount=0,this._setEndings(!0,!0,!1)),b>=c)b=c;else if(0>b)b=0;else{this.time=b;break a}this.clampWhenFinished?this.paused=!0:this.enabled=!1;this.time=b;this._mixer.dispatchEvent({type:"finished",action:this,direction:0>a?-1:1})}else{-1===e&&(0<=a?(e=0,this._setEndings(!0,0===this.repetitions,f)):this._setEndings(0=== +this.repetitions,!0,f));if(b>=c||0>b){d=Math.floor(b/c);b-=c*d;e+=Math.abs(d);var g=this.repetitions-e;0>=g?(this.clampWhenFinished?this.paused=!0:this.enabled=!1,this.time=b=0a,this._setEndings(a,!a,f)):this._setEndings(!1,!1,f),this._loopCount=e,this.time=b,this._mixer.dispatchEvent({type:"loop",action:this,loopDelta:d}))}else this.time=b;if(f&&1===(e&1))return c-b}return b},_setEndings:function(a,b, +c){var d=this._interpolantSettings;c?(d.endingStart=2401,d.endingEnd=2401):(d.endingStart=a?this.zeroSlopeAtStart?2401:2400:2402,d.endingEnd=b?this.zeroSlopeAtEnd?2401:2400:2402)},_scheduleFading:function(a,b,c){var d=this._mixer,e=d.time,f=this._weightInterpolant;null===f&&(this._weightInterpolant=f=d._lendControlInterpolant());d=f.parameterPositions;f=f.sampleValues;d[0]=e;f[0]=b;d[1]=e+a;f[1]=c;return this}});Kg.prototype=Object.assign(Object.create(ua.prototype),{constructor:Kg,_bindAction:function(a, +b){var c=a._localRoot||this._root,d=a._clip.tracks,e=d.length,f=a._propertyBindings;a=a._interpolants;var g=c.uuid,h=this._bindingsByRootAndName,k=h[g];void 0===k&&(k={},h[g]=k);for(h=0;h!==e;++h){var l=d[h],n=l.name,p=k[n];if(void 0===p){p=f[h];if(void 0!==p){null===p._cacheIndex&&(++p.referenceCount,this._addInactiveBinding(p,g,n));continue}p=new Jg(ya.create(c,n,b&&b._propertyBindings[h].binding.parsedPath),l.ValueTypeName,l.getValueSize());++p.referenceCount;this._addInactiveBinding(p,g,n)}f[h]= +p;a[h].resultBuffer=p.buffer}},_activateAction:function(a){if(!this._isActiveAction(a)){if(null===a._cacheIndex){var b=(a._localRoot||this._root).uuid,c=a._clip.uuid,d=this._actionsByClip[c];this._bindAction(a,d&&d.knownActions[0]);this._addInactiveAction(a,c,b)}b=a._propertyBindings;c=0;for(d=b.length;c!==d;++c){var e=b[c];0===e.useCount++&&(this._lendBinding(e),e.saveOriginalState())}this._lendAction(a)}},_deactivateAction:function(a){if(this._isActiveAction(a)){for(var b=a._propertyBindings,c= +0,d=b.length;c!==d;++c){var e=b[c];0===--e.useCount&&(e.restoreOriginalState(),this._takeBackBinding(e))}this._takeBackAction(a)}},_initMemoryManager:function(){this._actions=[];this._nActiveActions=0;this._actionsByClip={};this._bindings=[];this._nActiveBindings=0;this._bindingsByRootAndName={};this._controlInterpolants=[];this._nActiveControlInterpolants=0;var a=this;this.stats={actions:{get total(){return a._actions.length},get inUse(){return a._nActiveActions}},bindings:{get total(){return a._bindings.length}, +get inUse(){return a._nActiveBindings}},controlInterpolants:{get total(){return a._controlInterpolants.length},get inUse(){return a._nActiveControlInterpolants}}}},_isActiveAction:function(a){a=a._cacheIndex;return null!==a&&athis.max.x||a.ythis.max.y?!1:!0},containsBox:function(a){return this.min.x<=a.min.x&&a.max.x<=this.max.x&&this.min.y<=a.min.y&&a.max.y<=this.max.y},getParameter:function(a, +b){void 0===b&&(console.warn("THREE.Box2: .getParameter() target is now required"),b=new v);return b.set((a.x-this.min.x)/(this.max.x-this.min.x),(a.y-this.min.y)/(this.max.y-this.min.y))},intersectsBox:function(a){return a.max.xthis.max.x||a.max.ythis.max.y?!1:!0},clampPoint:function(a,b){void 0===b&&(console.warn("THREE.Box2: .clampPoint() target is now required"),b=new v);return b.copy(a).clamp(this.min,this.max)},distanceToPoint:function(a){return Wi.copy(a).clamp(this.min, +this.max).sub(a).length()},intersect:function(a){this.min.max(a.min);this.max.min(a.max);return this},union:function(a){this.min.min(a.min);this.max.max(a.max);return this},translate:function(a){this.min.add(a);this.max.add(a);return this},equals:function(a){return a.min.equals(this.min)&&a.max.equals(this.max)}});var Xi=new n,Sf=new n;Object.assign(Pg.prototype,{set:function(a,b){this.start.copy(a);this.end.copy(b);return this},clone:function(){return(new this.constructor).copy(this)},copy:function(a){this.start.copy(a.start); +this.end.copy(a.end);return this},getCenter:function(a){void 0===a&&(console.warn("THREE.Line3: .getCenter() target is now required"),a=new n);return a.addVectors(this.start,this.end).multiplyScalar(.5)},delta:function(a){void 0===a&&(console.warn("THREE.Line3: .delta() target is now required"),a=new n);return a.subVectors(this.end,this.start)},distanceSq:function(){return this.start.distanceToSquared(this.end)},distance:function(){return this.start.distanceTo(this.end)},at:function(a,b){void 0=== +b&&(console.warn("THREE.Line3: .at() target is now required"),b=new n);return this.delta(b).multiplyScalar(a).add(this.start)},closestPointToPointParameter:function(a,b){Xi.subVectors(a,this.start);Sf.subVectors(this.end,this.start);a=Sf.dot(Sf);a=Sf.dot(Xi)/a;b&&(a=M.clamp(a,0,1));return a},closestPointToPoint:function(a,b,c){a=this.closestPointToPointParameter(a,b);void 0===c&&(console.warn("THREE.Line3: .closestPointToPoint() target is now required"),c=new n);return this.delta(c).multiplyScalar(a).add(this.start)}, +applyMatrix4:function(a){this.start.applyMatrix4(a);this.end.applyMatrix4(a);return this},equals:function(a){return a.start.equals(this.start)&&a.end.equals(this.end)}});me.prototype=Object.create(E.prototype);me.prototype.constructor=me;me.prototype.isImmediateRenderObject=!0;var Yi=new n;gd.prototype=Object.create(E.prototype);gd.prototype.constructor=gd;gd.prototype.dispose=function(){this.cone.geometry.dispose();this.cone.material.dispose()};gd.prototype.update=function(){this.light.updateMatrixWorld(); +var a=this.light.distance?this.light.distance:1E3,b=a*Math.tan(this.light.angle);this.cone.scale.set(b,b,a);Yi.setFromMatrixPosition(this.light.target.matrixWorld);this.cone.lookAt(Yi);void 0!==this.color?this.cone.material.color.set(this.color):this.cone.material.color.copy(this.light.color)};var Tb=new n,Tf=new P,qh=new P;oc.prototype=Object.create(na.prototype);oc.prototype.constructor=oc;oc.prototype.isSkeletonHelper=!0;oc.prototype.updateMatrixWorld=function(a){var b=this.bones,c=this.geometry, +d=c.getAttribute("position");qh.getInverse(this.root.matrixWorld);for(var e=0,f=0;eMath.abs(b)&&(b=1E-8);this.scale.set(.5*this.size,.5*this.size,b);this.children[0].material.side=0>b?1:0;this.lookAt(this.plane.normal);E.prototype.updateMatrixWorld.call(this,a)};var cj=new n,yf,Qg;wb.prototype=Object.create(E.prototype); +wb.prototype.constructor=wb;wb.prototype.setDirection=function(a){.99999a.y?this.quaternion.set(1,0,0,0):(cj.set(a.z,0,-a.x).normalize(),this.quaternion.setFromAxisAngle(cj,Math.acos(a.y)))};wb.prototype.setLength=function(a,b,c){void 0===b&&(b=.2*a);void 0===c&&(c=.2*b);this.line.scale.set(1,Math.max(1E-4,a-b),1);this.line.updateMatrix();this.cone.scale.set(c,b,c);this.cone.position.y=a;this.cone.updateMatrix()};wb.prototype.setColor=function(a){this.line.material.color.set(a); +this.cone.material.color.set(a)};wb.prototype.copy=function(a){E.prototype.copy.call(this,a,!1);this.line.copy(a.line);this.cone.copy(a.cone);return this};wb.prototype.clone=function(){return(new this.constructor).copy(this)};qe.prototype=Object.create(na.prototype);qe.prototype.constructor=qe;var lb=Math.pow(2,8),dj=[.125,.215,.35,.446,.526,.582],ej=5+dj.length,kb={3E3:0,3001:1,3002:2,3004:3,3005:4,3006:5,3007:6},rh=new ed,sh=function(){for(var a=[],b=[],c=[],d=8,e=0;el;l++){var n=l%3*2/3-1,p=2p;p++)u=p%3,0==u?(b.up.set(0,c[p],0),b.lookAt(e[p],0,0)):1==u?(b.up.set(0,0,c[p]),b.lookAt(0,e[p],0)):(b.up.set(0,c[p],0),b.lookAt(0,0,e[p])),Ug(d,u*lb,2< +p?lb:0,lb,lb),f.setRenderTarget(d),f.render(a,b);f.toneMapping=h;f.toneMappingExposure=k;f.outputEncoding=g;f.setClearColor(l,n);a.scale.z*=-1},_textureToCubeUV:function(a,b){var c=new ob,d=this._renderer;a.isCubeTexture?null==this._cubemapShader&&(this._cubemapShader=ti()):null==this._equirectShader&&(this._equirectShader=si());var e=a.isCubeTexture?this._cubemapShader:this._equirectShader;c.add(new ja(Be[0],e));e=e.uniforms;e.envMap.value=a;a.isCubeTexture||e.texelSize.value.set(1/a.image.width, +1/a.image.height);e.inputEncoding.value=kb[a.encoding];e.outputEncoding.value=kb[b.texture.encoding];Ug(b,0,0,3*lb,2*lb);d.setRenderTarget(b);d.render(c,rh)},_applyPMREM:function(a){var b=this._renderer,c=b.autoClear;b.autoClear=!1;for(var d=1;dq;++q){var t=q/p;t=Math.exp(-t* +t/2);e.push(t);0==q?r+=t:qh)return!1}return!0}function eb(a,b){this.center=void 0!==a?a:new p;this.radius=void 0!==b?b:-1}function Wb(a,b){this.origin=void 0!==a?a:new p;this.direction=void 0!==b?b:new p(0,0,-1)}function Wa(a,b){this.normal=void 0!==a?a:new p(1, +0,0);this.constant=void 0!==b?b:0}function pa(a,b,c){this.a=void 0!==a?a:new p;this.b=void 0!==b?b:new p;this.c=void 0!==c?c:new p}function D(a,b,c){return void 0===b&&void 0===c?this.set(a):this.setRGB(a,b,c)}function Zf(a,b,c){0>c&&(c+=1);1c?b:c<2/3?a+6*(b-a)*(2/3-c):a}function $f(a){return.04045>a?.0773993808*a:Math.pow(.9478672986*a+.0521327014,2.4)}function ag(a){return.0031308>a?12.92*a:1.055*Math.pow(a,.41666)-.055}function Ac(a,b,c,d,e,f){this.a=a;this.b= +b;this.c=c;this.normal=d&&d.isVector3?d:new p;this.vertexNormals=Array.isArray(d)?d:[];this.color=e&&e.isColor?e:new D;this.vertexColors=Array.isArray(e)?e:[];this.materialIndex=void 0!==f?f:0}function K(){Object.defineProperty(this,"id",{value:gj++});this.uuid=O.generateUUID();this.name="";this.type="Material";this.fog=!0;this.blending=1;this.side=0;this.vertexColors=this.flatShading=!1;this.opacity=1;this.transparent=!1;this.blendSrc=204;this.blendDst=205;this.blendEquation=100;this.blendEquationAlpha= +this.blendDstAlpha=this.blendSrcAlpha=null;this.depthFunc=3;this.depthWrite=this.depthTest=!0;this.stencilWriteMask=255;this.stencilFunc=519;this.stencilRef=0;this.stencilFuncMask=255;this.stencilZPass=this.stencilZFail=this.stencilFail=7680;this.stencilWrite=!1;this.clippingPlanes=null;this.clipShadows=this.clipIntersection=!1;this.shadowSide=null;this.colorWrite=!0;this.precision=null;this.polygonOffset=!1;this.polygonOffsetUnits=this.polygonOffsetFactor=0;this.dithering=!1;this.alphaTest=0;this.premultipliedAlpha= +!1;this.toneMapped=this.visible=!0;this.userData={};this.version=0}function Pa(a){K.call(this);this.type="MeshBasicMaterial";this.color=new D(16777215);this.lightMap=this.map=null;this.lightMapIntensity=1;this.aoMap=null;this.aoMapIntensity=1;this.envMap=this.alphaMap=this.specularMap=null;this.combine=0;this.reflectivity=1;this.refractionRatio=.98;this.wireframe=!1;this.wireframeLinewidth=1;this.wireframeLinejoin=this.wireframeLinecap="round";this.morphTargets=this.skinning=!1;this.setValues(a)} +function G(a,b,c){if(Array.isArray(a))throw new TypeError("THREE.BufferAttribute: array should be a Typed Array.");this.name="";this.array=a;this.itemSize=b;this.count=void 0!==a?a.length/b:0;this.normalized=!0===c;this.usage=35044;this.updateRange={offset:0,count:-1};this.version=0}function yd(a,b,c){G.call(this,new Int8Array(a),b,c)}function zd(a,b,c){G.call(this,new Uint8Array(a),b,c)}function Ad(a,b,c){G.call(this,new Uint8ClampedArray(a),b,c)}function Bd(a,b,c){G.call(this,new Int16Array(a), +b,c)}function Xb(a,b,c){G.call(this,new Uint16Array(a),b,c)}function Cd(a,b,c){G.call(this,new Int32Array(a),b,c)}function Yb(a,b,c){G.call(this,new Uint32Array(a),b,c)}function B(a,b,c){G.call(this,new Float32Array(a),b,c)}function Dd(a,b,c){G.call(this,new Float64Array(a),b,c)}function rh(){this.vertices=[];this.normals=[];this.colors=[];this.uvs=[];this.uvs2=[];this.groups=[];this.morphTargets={};this.skinWeights=[];this.skinIndices=[];this.boundingSphere=this.boundingBox=null;this.groupsNeedUpdate= +this.uvsNeedUpdate=this.colorsNeedUpdate=this.normalsNeedUpdate=this.verticesNeedUpdate=!1}function sh(a){if(0===a.length)return-Infinity;for(var b=a[0],c=1,d=a.length;cb&&(b=a[c]);return b}function F(){Object.defineProperty(this,"id",{value:hj+=2});this.uuid=O.generateUUID();this.name="";this.type="BufferGeometry";this.index=null;this.attributes={};this.morphAttributes={};this.morphTargetsRelative=!1;this.groups=[];this.boundingSphere=this.boundingBox=null;this.drawRange={start:0,count:Infinity}; +this.userData={}}function ea(a,b){y.call(this);this.type="Mesh";this.geometry=void 0!==a?a:new F;this.material=void 0!==b?b:new Pa;this.updateMorphTargets()}function th(a,b,c,d,e,f,g,h){if(null===(1===b.side?d.intersectTriangle(g,f,e,!0,h):d.intersectTriangle(e,f,g,2!==b.side,h)))return null;Ee.copy(h);Ee.applyMatrix4(a.matrixWorld);b=c.ray.origin.distanceTo(Ee);return bc.far?null:{distance:b,point:Ee.clone(),object:a}}function Fe(a,b,c,d,e,f,g,h,l,m,z,n){Db.fromBufferAttribute(e,m);Eb.fromBufferAttribute(e, +z);Fb.fromBufferAttribute(e,n);e=a.morphTargetInfluences;if(b.morphTargets&&f&&e){Ge.set(0,0,0);He.set(0,0,0);Ie.set(0,0,0);for(var t=0,r=f.length;tg;g++)a.setRenderTarget(c,g),a.clear(b,d,e);a.setRenderTarget(f)}}}function Zb(a,b,c){Number.isInteger(b)&&(console.warn("THREE.WebGLCubeRenderTarget: constructor signature is now WebGLCubeRenderTarget( size, options )"),b=c);Ba.call(this,a,a,b)}function $b(a,b,c,d,e,f,g,h,l,m,z,n){W.call(this,null,f,g,h,l,m,d,e,z,n);this.image={data:a||null,width:b||1,height:c||1};this.magFilter= +void 0!==l?l:1003;this.minFilter=void 0!==m?m:1003;this.flipY=this.generateMipmaps=!1;this.unpackAlignment=1;this.needsUpdate=!0}function Gc(a,b,c,d,e,f){this.planes=[void 0!==a?a:new Wa,void 0!==b?b:new Wa,void 0!==c?c:new Wa,void 0!==d?d:new Wa,void 0!==e?e:new Wa,void 0!==f?f:new Wa]}function uh(){function a(e,f){!1!==c&&(d(e,f),b.requestAnimationFrame(a))}var b=null,c=!1,d=null;return{start:function(){!0!==c&&null!==d&&(b.requestAnimationFrame(a),c=!0)},stop:function(){c=!1},setAnimationLoop:function(a){d= +a},setContext:function(a){b=a}}}function jj(a,b){function c(b,c){var d=b.array,e=b.usage,f=a.createBuffer();a.bindBuffer(c,f);a.bufferData(c,d,e);b.onUploadCallback();c=5126;d instanceof Float32Array?c=5126:d instanceof Float64Array?console.warn("THREE.WebGLAttributes: Unsupported data buffer format: Float64Array."):d instanceof Uint16Array?c=5123:d instanceof Int16Array?c=5122:d instanceof Uint32Array?c=5125:d instanceof Int32Array?c=5124:d instanceof Int8Array?c=5120:d instanceof Uint8Array&&(c= +5121);return{buffer:f,type:c,bytesPerElement:d.BYTES_PER_ELEMENT,version:b.version}}var d=b.isWebGL2,e=new WeakMap;return{get:function(a){a.isInterleavedBufferAttribute&&(a=a.data);return e.get(a)},remove:function(b){b.isInterleavedBufferAttribute&&(b=b.data);var c=e.get(b);c&&(a.deleteBuffer(c.buffer),e.delete(b))},update:function(b,g){b.isInterleavedBufferAttribute&&(b=b.data);var f=e.get(b);if(void 0===f)e.set(b,c(b,g));else if(f.versionm;m++){if(n=d[m])if(l=n[0],n=n[1]){z&&e.setAttribute("morphTarget"+m,z[l]);f&&e.setAttribute("morphNormal"+m,f[l]);c[m]=n;h+=n;continue}c[m]=0}e=e.morphTargetsRelative?1:1-h;g.getUniforms().setValue(a,"morphTargetBaseInfluence",e);g.getUniforms().setValue(a,"morphTargetInfluences",c)}}}function uj(a,b,c,d){var e=new WeakMap;return{update:function(a){var f=d.render.frame,h=a.geometry,l=b.get(a,h);e.get(l)!==f&&(h.isGeometry&&l.updateFromObject(a),b.update(l),e.set(l, +f));a.isInstancedMesh&&c.update(a.instanceMatrix,34962);return l},dispose:function(){e=new WeakMap}}}function qb(a,b,c,d,e,f,g,h,l,m){a=void 0!==a?a:[];W.call(this,a,void 0!==b?b:301,c,d,e,f,void 0!==g?g:1022,h,l,m);this.flipY=!1}function Hc(a,b,c,d){W.call(this,null);this.image={data:a||null,width:b||1,height:c||1,depth:d||1};this.minFilter=this.magFilter=1003;this.wrapR=1001;this.flipY=this.generateMipmaps=!1;this.needsUpdate=!0}function Ic(a,b,c,d){W.call(this,null);this.image={data:a||null,width:b|| +1,height:c||1,depth:d||1};this.minFilter=this.magFilter=1003;this.wrapR=1001;this.flipY=this.generateMipmaps=!1;this.needsUpdate=!0}function Jc(a,b,c){var d=a[0];if(0>=d||0");return a.replace(gg,fg)}function Kh(a,b,c,d){console.warn("WebGLProgram: #pragma unroll_loop shader syntax is deprecated. Please use #pragma unroll_loop_start syntax instead.");return hg(a,b,c,d)}function hg(a,b,c,d){a="";for(b=parseInt(b);b< +parseInt(c);b++)a+=d.replace(/\[ i \]/g,"[ "+b+" ]").replace(/UNROLLED_LOOP_INDEX/g,b);return a}function Lh(a){var b="precision "+a.precision+" float;\nprecision "+a.precision+" int;";"highp"===a.precision?b+="\n#define HIGH_PRECISION":"mediump"===a.precision?b+="\n#define MEDIUM_PRECISION":"lowp"===a.precision&&(b+="\n#define LOW_PRECISION");return b}function gk(a){var b="SHADOWMAP_TYPE_BASIC";1===a.shadowMapType?b="SHADOWMAP_TYPE_PCF":2===a.shadowMapType?b="SHADOWMAP_TYPE_PCF_SOFT":3===a.shadowMapType&& +(b="SHADOWMAP_TYPE_VSM");return b}function hk(a){var b="ENVMAP_TYPE_CUBE";if(a.envMap)switch(a.envMapMode){case 301:case 302:b="ENVMAP_TYPE_CUBE";break;case 306:case 307:b="ENVMAP_TYPE_CUBE_UV";break;case 303:case 304:b="ENVMAP_TYPE_EQUIREC";break;case 305:b="ENVMAP_TYPE_SPHERE"}return b}function ik(a){var b="ENVMAP_MODE_REFLECTION";if(a.envMap)switch(a.envMapMode){case 302:case 304:b="ENVMAP_MODE_REFRACTION"}return b}function jk(a){var b="ENVMAP_BLENDING_NONE";if(a.envMap)switch(a.combine){case 0:b= +"ENVMAP_BLENDING_MULTIPLY";break;case 1:b="ENVMAP_BLENDING_MIX";break;case 2:b="ENVMAP_BLENDING_ADD"}return b}function kk(a,b,c){var d=a.getContext(),e=c.defines,f=c.vertexShader,g=c.fragmentShader,h=gk(c),l=hk(c),m=ik(c),z=jk(c),n=0d;d++)c.probe.push(new p);var e=new p,f=new N,g=new N;return{setup:function(d,l,m){for(var h=0,n=0,k=0,r=0;9>r;r++)c.probe[r].set(0,0,0);var q=l=0,u=0,p=0,x=0,w=0,ja=0,T=0;m=m.matrixWorldInverse;d.sort(tk);r=0;for(var Z=d.length;rKa;Ka++)c.probe[Ka].addScaledVector(C.sh.coefficients[Ka],Q);else if(C.isDirectionalLight){var U=a.get(C);U.color.copy(C.color).multiplyScalar(C.intensity);U.direction.setFromMatrixPosition(C.matrixWorld);e.setFromMatrixPosition(C.target.matrixWorld);U.direction.sub(e);U.direction.transformDirection(m);C.castShadow&&(Q=C.shadow,v=b.get(C),v.shadowBias=Q.bias,v.shadowRadius=Q.radius,v.shadowMapSize=Q.mapSize,c.directionalShadow[l]= +v,c.directionalShadowMap[l]=Ka,c.directionalShadowMatrix[l]=C.shadow.matrix,w++);c.directional[l]=U;l++}else C.isSpotLight?(U=a.get(C),U.position.setFromMatrixPosition(C.matrixWorld),U.position.applyMatrix4(m),U.color.copy(v).multiplyScalar(Q),U.distance=Da,U.direction.setFromMatrixPosition(C.matrixWorld),e.setFromMatrixPosition(C.target.matrixWorld),U.direction.sub(e),U.direction.transformDirection(m),U.coneCos=Math.cos(C.angle),U.penumbraCos=Math.cos(C.angle*(1-C.penumbra)),U.decay=C.decay,C.castShadow&& +(Q=C.shadow,v=b.get(C),v.shadowBias=Q.bias,v.shadowRadius=Q.radius,v.shadowMapSize=Q.mapSize,c.spotShadow[u]=v,c.spotShadowMap[u]=Ka,c.spotShadowMatrix[u]=C.shadow.matrix,T++),c.spot[u]=U,u++):C.isRectAreaLight?(U=a.get(C),U.color.copy(v).multiplyScalar(Q),U.position.setFromMatrixPosition(C.matrixWorld),U.position.applyMatrix4(m),g.identity(),f.copy(C.matrixWorld),f.premultiply(m),g.extractRotation(f),U.halfWidth.set(.5*C.width,0,0),U.halfHeight.set(0,.5*C.height,0),U.halfWidth.applyMatrix4(g),U.halfHeight.applyMatrix4(g), +c.rectArea[p]=U,p++):C.isPointLight?(U=a.get(C),U.position.setFromMatrixPosition(C.matrixWorld),U.position.applyMatrix4(m),U.color.copy(C.color).multiplyScalar(C.intensity),U.distance=C.distance,U.decay=C.decay,C.castShadow&&(Q=C.shadow,v=b.get(C),v.shadowBias=Q.bias,v.shadowRadius=Q.radius,v.shadowMapSize=Q.mapSize,v.shadowCameraNear=Q.camera.near,v.shadowCameraFar=Q.camera.far,c.pointShadow[q]=v,c.pointShadowMap[q]=Ka,c.pointShadowMatrix[q]=C.shadow.matrix,ja++),c.point[q]=U,q++):C.isHemisphereLight&& +(U=a.get(C),U.direction.setFromMatrixPosition(C.matrixWorld),U.direction.transformDirection(m),U.direction.normalize(),U.skyColor.copy(C.color).multiplyScalar(Q),U.groundColor.copy(C.groundColor).multiplyScalar(Q),c.hemi[x]=U,x++)}c.ambient[0]=h;c.ambient[1]=n;c.ambient[2]=k;d=c.hash;if(d.directionalLength!==l||d.pointLength!==q||d.spotLength!==u||d.rectAreaLength!==p||d.hemiLength!==x||d.numDirectionalShadows!==w||d.numPointShadows!==ja||d.numSpotShadows!==T)c.directional.length=l,c.spot.length= +u,c.rectArea.length=p,c.point.length=q,c.hemi.length=x,c.directionalShadow.length=w,c.directionalShadowMap.length=w,c.pointShadow.length=ja,c.pointShadowMap.length=ja,c.spotShadow.length=T,c.spotShadowMap.length=T,c.directionalShadowMatrix.length=w,c.pointShadowMatrix.length=ja,c.spotShadowMatrix.length=T,d.directionalLength=l,d.pointLength=q,d.spotLength=u,d.rectAreaLength=p,d.hemiLength=x,d.numDirectionalShadows=w,d.numPointShadows=ja,d.numSpotShadows=T,c.version=vk++},state:c}}function Qh(){var a= +new uk,b=[],c=[];return{init:function(){b.length=0;c.length=0},state:{lightsArray:b,shadowsArray:c,lights:a},setupLights:function(d){a.setup(b,c,d)},pushLight:function(a){b.push(a)},pushShadow:function(a){c.push(a)}}}function wk(){function a(c){c=c.target;c.removeEventListener("dispose",a);b.delete(c)}var b=new WeakMap;return{get:function(c,d){if(!1===b.has(c)){var e=new Qh;b.set(c,new WeakMap);b.get(c).set(d,e);c.addEventListener("dispose",a)}else!1===b.get(c).has(d)?(e=new Qh,b.get(c).set(d,e)): +e=b.get(c).get(d);return e},dispose:function(){b=new WeakMap}}}function Hb(a){K.call(this);this.type="MeshDepthMaterial";this.depthPacking=3200;this.morphTargets=this.skinning=!1;this.displacementMap=this.alphaMap=this.map=null;this.displacementScale=1;this.displacementBias=0;this.wireframe=!1;this.wireframeLinewidth=1;this.fog=!1;this.setValues(a)}function Ib(a){K.call(this);this.type="MeshDistanceMaterial";this.referencePosition=new p;this.nearDistance=1;this.farDistance=1E3;this.morphTargets=this.skinning= +!1;this.displacementMap=this.alphaMap=this.map=null;this.displacementScale=1;this.displacementBias=0;this.fog=!1;this.setValues(a)}function Rh(a,b,c){function d(a,b,c){c=a<<0|b<<1|c<<2;var d=n[c];void 0===d&&(d=new Hb({depthPacking:3201,morphTargets:a,skinning:b}),n[c]=d);return d}function e(a,b,c){c=a<<0|b<<1|c<<2;var d=k[c];void 0===d&&(d=new Ib({morphTargets:a,skinning:b}),k[c]=d);return d}function f(b,c,f,g,h,l,m){var n=d,k=b.customDepthMaterial;!0===g.isPointLight&&(n=e,k=b.customDistanceMaterial); +void 0===k?(k=!1,!0===f.morphTargets&&(k=c.morphAttributes&&c.morphAttributes.position&&0\nvoid main() {\n float mean = 0.0;\n float squared_mean = 0.0;\n\tfloat depth = unpackRGBAToDepth( texture2D( shadow_pass, ( gl_FragCoord.xy ) / resolution ) );\n for ( float i = -1.0; i < 1.0 ; i += SAMPLE_RATE) {\n #ifdef HORIZONAL_PASS\n vec2 distribution = unpackRGBATo2Half( texture2D( shadow_pass, ( gl_FragCoord.xy + vec2( i, 0.0 ) * radius ) / resolution ) );\n mean += distribution.x;\n squared_mean += distribution.y * distribution.y + distribution.x * distribution.x;\n #else\n float depth = unpackRGBAToDepth( texture2D( shadow_pass, ( gl_FragCoord.xy + vec2( 0.0, i ) * radius ) / resolution ) );\n mean += depth;\n squared_mean += depth * depth;\n #endif\n }\n mean = mean * HALF_SAMPLE_RATE;\n squared_mean = squared_mean * HALF_SAMPLE_RATE;\n float std_dev = sqrt( squared_mean - mean * mean );\n gl_FragColor = pack2HalfToRGBA( vec2( mean, std_dev ) );\n}"}), +p=u.clone();p.defines.HORIZONAL_PASS=1;var x=new F;x.setAttribute("position",new G(new Float32Array([-1,-1,.5,3,-1,.5,-1,3,.5]),3));var w=new ea(x,u),ja=this;this.enabled=!1;this.autoUpdate=!0;this.needsUpdate=!1;this.type=1;this.render=function(d,e,f){if(!1!==ja.enabled&&(!1!==ja.autoUpdate||!1!==ja.needsUpdate)&&0!==d.length){var n=a.getRenderTarget(),k=a.getActiveCubeFace(),t=a.getActiveMipmapLevel(),q=a.state;q.setBlending(0);q.buffers.color.setClear(1,1,1,1);q.buffers.depth.setTest(!0);q.setScissorTest(!1); +for(var r=0,E=d.length;rc||l.y>c)l.x>c&&(m.x=Math.floor(c/v.x),l.x=m.x*v.x,C.mapSize.x=m.x),l.y>c&&(m.y=Math.floor(c/v.y),l.y=m.y*v.y,C.mapSize.y=m.y);null!==C.map||C.isPointLightShadow||3!==this.type||(v={minFilter:1006,magFilter:1006,format:1023},C.map=new Ba(l.x,l.y,v),C.map.texture.name=x.name+".shadowMap", +C.mapPass=new Ba(l.x,l.y,v),C.camera.updateProjectionMatrix());null===C.map&&(v={minFilter:1003,magFilter:1003,format:1023},C.map=new Ba(l.x,l.y,v),C.map.texture.name=x.name+".shadowMap",C.camera.updateProjectionMatrix());a.setRenderTarget(C.map);a.clear();v=C.getViewportCount();for(var Z=0;Zd||a.height>d)e=d/Math.max(a.width,a.height);if(1>e||!0===b){if("undefined"!==typeof HTMLImageElement&&a instanceof HTMLImageElement||"undefined"!==typeof HTMLCanvasElement&&a instanceof HTMLCanvasElement||"undefined"!==typeof ImageBitmap&&a instanceof ImageBitmap)return d=b?O.floorPowerOfTwo:Math.floor,b=d(e*a.width),e=d(e*a.height),void 0===H&&(H=h(b,e)),c=c?h(b,e):H,c.width=b,c.height=e, +c.getContext("2d").drawImage(a,0,0,b,e),console.warn("THREE.WebGLRenderer: Texture has been resized from ("+a.width+"x"+a.height+") to ("+b+"x"+e+")."),c;"data"in a&&console.warn("THREE.WebGLRenderer: Image in DataTexture is too big ("+a.width+"x"+a.height+").")}return a}function m(a){return O.isPowerOfTwo(a.width)&&O.isPowerOfTwo(a.height)}function k(a,b){return a.generateMipmaps&&b&&1003!==a.minFilter&&1006!==a.minFilter}function n(b,c,e,f){a.generateMipmap(b);d.get(c).__maxMipLevel=Math.log(Math.max(e, +f))*Math.LOG2E}function t(c,d,e){if(!1===Da)return d;if(null!==c){if(void 0!==a[c])return a[c];console.warn("THREE.WebGLRenderer: Attempt to use non-existing WebGL internal format '"+c+"'")}c=d;6403===d&&(5126===e&&(c=33326),5131===e&&(c=33325),5121===e&&(c=33321));6407===d&&(5126===e&&(c=34837),5131===e&&(c=34843),5121===e&&(c=32849));6408===d&&(5126===e&&(c=34836),5131===e&&(c=34842),5121===e&&(c=32856));33325!==c&&33326!==c&&34842!==c&&34836!==c||b.get("EXT_color_buffer_float");return c}function r(a){return 1003=== +a||1004===a||1005===a?9728:9729}function q(b){b=b.target;b.removeEventListener("dispose",q);var c=d.get(b);void 0!==c.__webglInit&&(a.deleteTexture(c.__webglTexture),d.remove(b));b.isVideoTexture&&F.delete(b);g.memory.textures--}function u(b){b=b.target;b.removeEventListener("dispose",u);var c=d.get(b),e=d.get(b.texture);if(b){void 0!==e.__webglTexture&&a.deleteTexture(e.__webglTexture);b.depthTexture&&b.depthTexture.dispose();if(b.isWebGLCubeRenderTarget)for(e=0;6>e;e++)a.deleteFramebuffer(c.__webglFramebuffer[e]), +c.__webglDepthbuffer&&a.deleteRenderbuffer(c.__webglDepthbuffer[e]);else a.deleteFramebuffer(c.__webglFramebuffer),c.__webglDepthbuffer&&a.deleteRenderbuffer(c.__webglDepthbuffer),c.__webglMultisampledFramebuffer&&a.deleteFramebuffer(c.__webglMultisampledFramebuffer),c.__webglColorRenderbuffer&&a.deleteRenderbuffer(c.__webglColorRenderbuffer),c.__webglDepthRenderbuffer&&a.deleteRenderbuffer(c.__webglDepthRenderbuffer);d.remove(b.texture);d.remove(b)}g.memory.textures--}function p(a,b){var e=d.get(a); +if(a.isVideoTexture){var f=g.render.frame;F.get(a)!==f&&(F.set(a,f),a.update())}if(0q;q++)z[q]=h||e?e?b.image[q].image:b.image[q]:l(b.image[q],!1,!0,U);var r=z[0],u=m(r)||Da,p=f.convert(b.format),E=f.convert(b.type),w=t(b.internalFormat,p,E);v(34067,b,u);if(h){for(q=0;6>q;q++){var x=z[q].mipmaps;for(h=0;hq;q++)if(e)for(c.texImage2D(34069+q,0,w,z[q].width,z[q].height,0,p,E,z[q].data),h=0;h=A&&console.warn("THREE.WebGLTextures: Trying to use "+a+" texture units while this GPU supports only "+A);K+=1;return a};this.resetTextureUnits=function(){K=0};this.setTexture2D=p;this.setTexture2DArray=function(a,b){var e=d.get(a);0z;z++)e.__webglFramebuffer[z]=a.createFramebuffer();else if(e.__webglFramebuffer=a.createFramebuffer(),z)if(Da){e.__webglMultisampledFramebuffer=a.createFramebuffer();e.__webglColorRenderbuffer=a.createRenderbuffer();a.bindRenderbuffer(36161,e.__webglColorRenderbuffer); +z=f.convert(b.texture.format);var r=f.convert(b.texture.type);z=t(b.texture.internalFormat,z,r);r=Q(b);a.renderbufferStorageMultisample(36161,r,z,b.width,b.height);a.bindFramebuffer(36160,e.__webglMultisampledFramebuffer);a.framebufferRenderbuffer(36160,36064,36161,e.__webglColorRenderbuffer);a.bindRenderbuffer(36161,null);b.depthBuffer&&(e.__webglDepthRenderbuffer=a.createRenderbuffer(),B(e.__webglDepthRenderbuffer,b,!0));a.bindFramebuffer(36160,null)}else console.warn("THREE.WebGLRenderer: WebGLMultisampleRenderTarget can only be used with WebGL2."); +if(l){c.bindTexture(34067,h.__webglTexture);v(34067,b.texture,q);for(z=0;6>z;z++)C(e.__webglFramebuffer[z],b,36064,34069+z);k(b.texture,q)&&n(34067,b.texture,b.width,b.height);c.bindTexture(34067,null)}else c.bindTexture(3553,h.__webglTexture),v(3553,b.texture,q),C(e.__webglFramebuffer,b,36064,3553),k(b.texture,q)&&n(3553,b.texture,b.width,b.height),c.bindTexture(3553,null);if(b.depthBuffer){e=d.get(b);h=!0===b.isWebGLCubeRenderTarget;if(b.depthTexture){if(h)throw Error("target.depthTexture not supported in Cube render targets"); +if(b&&b.isWebGLCubeRenderTarget)throw Error("Depth Texture with cube render targets is not supported");a.bindFramebuffer(36160,e.__webglFramebuffer);if(!b.depthTexture||!b.depthTexture.isDepthTexture)throw Error("renderTarget.depthTexture must be an instance of THREE.DepthTexture");d.get(b.depthTexture).__webglTexture&&b.depthTexture.image.width===b.width&&b.depthTexture.image.height===b.height||(b.depthTexture.image.width=b.width,b.depthTexture.image.height=b.height,b.depthTexture.needsUpdate=!0); +p(b.depthTexture,0);e=d.get(b.depthTexture).__webglTexture;if(1026===b.depthTexture.format)a.framebufferTexture2D(36160,36096,3553,e,0);else if(1027===b.depthTexture.format)a.framebufferTexture2D(36160,33306,3553,e,0);else throw Error("Unknown depthTexture format");}else if(h)for(e.__webglDepthbuffer=[],h=0;6>h;h++)a.bindFramebuffer(36160,e.__webglFramebuffer[h]),e.__webglDepthbuffer[h]=a.createRenderbuffer(),B(e.__webglDepthbuffer[h],b,!1);else a.bindFramebuffer(36160,e.__webglFramebuffer),e.__webglDepthbuffer= +a.createRenderbuffer(),B(e.__webglDepthbuffer,b,!1);a.bindFramebuffer(36160,null)}};this.updateRenderTargetMipmap=function(a){var b=a.texture,e=m(a)||Da;if(k(b,e)){e=a.isWebGLCubeRenderTarget?34067:3553;var f=d.get(b).__webglTexture;c.bindTexture(e,f);n(e,b,a.width,a.height);c.bindTexture(e,null)}};this.updateMultisampleRenderTarget=function(b){if(b.isWebGLMultisampleRenderTarget)if(Da){var c=d.get(b);a.bindFramebuffer(36008,c.__webglMultisampledFramebuffer);a.bindFramebuffer(36009,c.__webglFramebuffer); +var e=b.width,f=b.height,g=16384;b.depthBuffer&&(g|=256);b.stencilBuffer&&(g|=1024);a.blitFramebuffer(0,0,e,f,0,0,e,f,g,9728);a.bindFramebuffer(36160,c.__webglMultisampledFramebuffer)}else console.warn("THREE.WebGLRenderer: WebGLMultisampleRenderTarget can only be used with WebGL2.")};this.safeSetTexture2D=function(a,b){a&&a.isWebGLRenderTarget&&(!1===M&&(console.warn("THREE.WebGLTextures.safeSetTexture2D: don't use render targets as textures. Use their .texture property instead."),M=!0),a=a.texture); +p(a,b)};this.safeSetTextureCube=function(a,b){a&&a.isWebGLCubeRenderTarget&&(!1===R&&(console.warn("THREE.WebGLTextures.safeSetTextureCube: don't use cube render targets as textures. Use their .texture property instead."),R=!0),a=a.texture);a&&a.isCubeTexture||Array.isArray(a.image)&&6===a.image.length?x(a,b):w(a,b)}}function Th(a,b,c){var d=c.isWebGL2;return{convert:function(a){if(1009===a)return 5121;if(1017===a)return 32819;if(1018===a)return 32820;if(1019===a)return 33635;if(1010===a)return 5120; +if(1011===a)return 5122;if(1012===a)return 5123;if(1013===a)return 5124;if(1014===a)return 5125;if(1015===a)return 5126;if(1016===a){if(d)return 5131;var c=b.get("OES_texture_half_float");return null!==c?c.HALF_FLOAT_OES:null}if(1021===a)return 6406;if(1022===a)return 6407;if(1023===a)return 6408;if(1024===a)return 6409;if(1025===a)return 6410;if(1026===a)return 6402;if(1027===a)return 34041;if(1028===a)return 6403;if(1029===a)return 36244;if(1030===a)return 33319;if(1031===a)return 33320;if(1032=== +a)return 36248;if(1033===a)return 36249;if(33776===a||33777===a||33778===a||33779===a)if(c=b.get("WEBGL_compressed_texture_s3tc"),null!==c){if(33776===a)return c.COMPRESSED_RGB_S3TC_DXT1_EXT;if(33777===a)return c.COMPRESSED_RGBA_S3TC_DXT1_EXT;if(33778===a)return c.COMPRESSED_RGBA_S3TC_DXT3_EXT;if(33779===a)return c.COMPRESSED_RGBA_S3TC_DXT5_EXT}else return null;if(35840===a||35841===a||35842===a||35843===a)if(c=b.get("WEBGL_compressed_texture_pvrtc"),null!==c){if(35840===a)return c.COMPRESSED_RGB_PVRTC_4BPPV1_IMG; +if(35841===a)return c.COMPRESSED_RGB_PVRTC_2BPPV1_IMG;if(35842===a)return c.COMPRESSED_RGBA_PVRTC_4BPPV1_IMG;if(35843===a)return c.COMPRESSED_RGBA_PVRTC_2BPPV1_IMG}else return null;if(36196===a)return c=b.get("WEBGL_compressed_texture_etc1"),null!==c?c.COMPRESSED_RGB_ETC1_WEBGL:null;if(37492===a||37496===a)if(c=b.get("WEBGL_compressed_texture_etc"),null!==c){if(37492===a)return c.COMPRESSED_RGB8_ETC2;if(37496===a)return c.COMPRESSED_RGBA8_ETC2_EAC}if(37808===a||37809===a||37810===a||37811===a||37812=== +a||37813===a||37814===a||37815===a||37816===a||37817===a||37818===a||37819===a||37820===a||37821===a||37840===a||37841===a||37842===a||37843===a||37844===a||37845===a||37846===a||37847===a||37848===a||37849===a||37850===a||37851===a||37852===a||37853===a)return c=b.get("WEBGL_compressed_texture_astc"),null!==c?a:null;if(36492===a)return c=b.get("EXT_texture_compression_bptc"),null!==c?a:null;if(1020===a){if(d)return 34042;c=b.get("WEBGL_depth_texture");return null!==c?c.UNSIGNED_INT_24_8_WEBGL:null}}}} +function Le(a){P.call(this);this.cameras=a||[]}function Kc(){y.call(this);this.type="Group"}function Me(){this._grip=this._targetRay=null}function Uh(a,b){function c(a){var b=q.get(a.inputSource);b&&b.dispatchEvent({type:a.type})}function d(){q.forEach(function(a,b){a.disconnect(b)});q.clear();a.setFramebuffer(null);a.setRenderTarget(a.getRenderTarget());Q.stop();h.isPresenting=!1;h.dispatchEvent({type:"sessionend"})}function e(a){k=a;Q.setContext(l);Q.start();h.isPresenting=!0;h.dispatchEvent({type:"sessionstart"})} +function f(a){for(var b=l.inputSources,c=0;cf.matrixWorld.determinant(),l=t(a,c,e,f);X.setMaterial(e,h);var m=!1;if(b!==d.id||V!==l.id||Ke!==(!0===e.wireframe))b=d.id,V=l.id,Ke=!0===e.wireframe,m=!0;if(e.morphTargets||e.morphNormals)Aa.update(f,d,e,l),m=!0;!0===f.isInstancedMesh&&(m=!0);a=d.index;c=d.attributes.position;if(null===a){if(void 0===c||0===c.count)return}else if(0===a.count)return;var n=1;!0===e.wireframe&&(a=va.getWireframeAttribute(d),n=2);h=Ca;if(null!==a){var k=oa.get(a); +h=Ea;h.setIndex(k)}if(m){if(!1!==Ha.isWebGL2||!f.isInstancedMesh&&!d.isInstancedBufferGeometry||null!==sa.get("ANGLE_instanced_arrays")){X.initAttributes();m=d.attributes;l=l.getAttributes();var z=e.defaultAttributeValues;for(ja in l){var q=l[ja];if(0<=q){var r=m[ja];if(void 0!==r){var u=r.normalized,p=r.itemSize,w=oa.get(r);if(void 0!==w){var E=w.buffer,x=w.type;w=w.bytesPerElement;if(r.isInterleavedBufferAttribute){var v=r.data,C=v.stride;r=r.offset;v&&v.isInstancedInterleavedBuffer?(X.enableAttributeAndDivisor(q, +v.meshPerAttribute),void 0===d._maxInstanceCount&&(d._maxInstanceCount=v.meshPerAttribute*v.count)):X.enableAttribute(q);I.bindBuffer(34962,E);X.vertexAttribPointer(q,p,x,u,C*w,r*w)}else r.isInstancedBufferAttribute?(X.enableAttributeAndDivisor(q,r.meshPerAttribute),void 0===d._maxInstanceCount&&(d._maxInstanceCount=r.meshPerAttribute*r.count)):X.enableAttribute(q),I.bindBuffer(34962,E),X.vertexAttribPointer(q,p,x,u,0,0)}}else if("instanceMatrix"===ja)w=oa.get(f.instanceMatrix),void 0!==w&&(E=w.buffer, +x=w.type,X.enableAttributeAndDivisor(q+0,1),X.enableAttributeAndDivisor(q+1,1),X.enableAttributeAndDivisor(q+2,1),X.enableAttributeAndDivisor(q+3,1),I.bindBuffer(34962,E),I.vertexAttribPointer(q+0,4,x,!1,64,0),I.vertexAttribPointer(q+1,4,x,!1,64,16),I.vertexAttribPointer(q+2,4,x,!1,64,32),I.vertexAttribPointer(q+3,4,x,!1,64,48));else if(void 0!==z&&(u=z[ja],void 0!==u))switch(u.length){case 2:I.vertexAttrib2fv(q,u);break;case 3:I.vertexAttrib3fv(q,u);break;case 4:I.vertexAttrib4fv(q,u);break;default:I.vertexAttrib1fv(q, +u)}}}X.disableUnusedAttributes()}null!==a&&I.bindBuffer(34963,k.buffer)}var ja=d.drawRange.start*n;m=null!==g?g.start*n:0;k=Math.max(ja,m);g=Math.max(0,Math.min(null!==a?a.count:c.count,ja+d.drawRange.count*n,m+(null!==g?g.count*n:Infinity))-1-k+1);0!==g&&(f.isMesh?!0===e.wireframe?(X.setLineWidth(e.wireframeLinewidth*(null===G?xa:1)),h.setMode(1)):h.setMode(4):f.isLine?(e=e.linewidth,void 0===e&&(e=1),X.setLineWidth(e*(null===G?xa:1)),f.isLineSegments?h.setMode(1):f.isLineLoop?h.setMode(2):h.setMode(3)): +f.isPoints?h.setMode(0):f.isSprite&&h.setMode(4),f.isInstancedMesh?h.renderInstances(d,k,g,f.count):d.isInstancedBufferGeometry?h.renderInstances(d,k,g,Math.min(d.instanceCount,d._maxInstanceCount)):h.render(k,g))};this.compile=function(a,b){Q=wa.get(a,b);Q.init();a.traverse(function(a){a.isLight&&(Q.pushLight(a),a.castShadow&&Q.pushShadow(a))});Q.setupLights(b);var c={};a.traverse(function(b){var d=b.material;if(d)if(Array.isArray(d))for(var e=0;ee.far|| +f.push({distance:a,distanceToRay:Math.sqrt(h),point:c,index:b,face:null,object:g}))}function ng(a,b,c,d,e,f,g,h,l){W.call(this,a,b,c,d,e,f,g,h,l);this.format=void 0!==g?g:1022;this.minFilter=void 0!==f?f:1006;this.magFilter=void 0!==e?e:1006;this.generateMipmaps=!1}function Oc(a,b,c,d,e,f,g,h,l,m,k,n){W.call(this,null,f,g,h,l,m,d,e,k,n);this.image={width:b,height:c};this.mipmaps=a;this.generateMipmaps=this.flipY=!1}function Od(a,b,c,d,e,f,g,h,l){W.call(this,a,b,c,d,e,f,g,h,l);this.needsUpdate=!0} +function Pd(a,b,c,d,e,f,g,h,l,m){m=void 0!==m?m:1026;if(1026!==m&&1027!==m)throw Error("DepthTexture format must be either THREE.DepthFormat or THREE.DepthStencilFormat");void 0===c&&1026===m&&(c=1012);void 0===c&&1027===m&&(c=1020);W.call(this,null,d,e,f,g,h,m,c,l);this.image={width:a,height:b};this.magFilter=void 0!==g?g:1003;this.minFilter=void 0!==h?h:1003;this.generateMipmaps=this.flipY=!1}function Pc(a){F.call(this);this.type="WireframeGeometry";var b=[],c,d,e,f=[0,0],g={},h=["a","b","c"];if(a&& +a.isGeometry){var l=a.faces;var m=0;for(d=l.length;mc;c++){var n=k[h[c]];var t=k[h[(c+1)%3]];f[0]=Math.min(n,t);f[1]=Math.max(n,t);n=f[0]+","+f[1];void 0===g[n]&&(g[n]={index1:f[0],index2:f[1]})}}for(n in g)m=g[n],h=a.vertices[m.index1],b.push(h.x,h.y,h.z),h=a.vertices[m.index2],b.push(h.x,h.y,h.z)}else if(a&&a.isBufferGeometry)if(h=new p,null!==a.index){l=a.attributes.position;k=a.index;var r=a.groups;0===r.length&&(r=[{start:0,count:k.count,materialIndex:0}]);a=0;for(e= +r.length;ac;c++)n=k.getX(m+c),t=k.getX(m+(c+1)%3),f[0]=Math.min(n,t),f[1]=Math.max(n,t),n=f[0]+","+f[1],void 0===g[n]&&(g[n]={index1:f[0],index2:f[1]});for(n in g)m=g[n],h.fromBufferAttribute(l,m.index1),b.push(h.x,h.y,h.z),h.fromBufferAttribute(l,m.index2),b.push(h.x,h.y,h.z)}else for(l=a.attributes.position,m=0,d=l.count/3;mc;c++)g=3*m+c,h.fromBufferAttribute(l,g),b.push(h.x,h.y,h.z),g=3*m+(c+1)%3,h.fromBufferAttribute(l, +g),b.push(h.x,h.y,h.z);this.setAttribute("position",new B(b,3))}function Qd(a,b,c){L.call(this);this.type="ParametricGeometry";this.parameters={func:a,slices:b,stacks:c};this.fromBufferGeometry(new Qc(a,b,c));this.mergeVertices()}function Qc(a,b,c){F.call(this);this.type="ParametricBufferGeometry";this.parameters={func:a,slices:b,stacks:c};var d=[],e=[],f=[],g=[],h=new p,l=new p,m=new p,k=new p,n=new p,t,r;3>a.length&&console.error("THREE.ParametricGeometry: Function must now modify a Vector3 as third parameter."); +var q=b+1;for(t=0;t<=c;t++){var u=t/c;for(r=0;r<=b;r++){var E=r/b;a(E,u,l);e.push(l.x,l.y,l.z);0<=E-1E-5?(a(E-1E-5,u,m),k.subVectors(l,m)):(a(E+1E-5,u,m),k.subVectors(m,l));0<=u-1E-5?(a(E,u-1E-5,m),n.subVectors(l,m)):(a(E,u+1E-5,m),n.subVectors(m,l));h.crossVectors(k,n).normalize();f.push(h.x,h.y,h.z);g.push(E,u)}}for(t=0;td&&1===a.x&&(l[b]=a.x-1);0===c.x&&0===c.z&&(l[b]=d/2/Math.PI+.5)}F.call(this);this.type="PolyhedronBufferGeometry";this.parameters={vertices:a, +indices:b,radius:c,detail:d};c=c||1;d=d||0;var h=[],l=[];(function(a){for(var c=new p,d=new p,g=new p,h=0;he&&(.2>b&&(l[a+0]+=1),.2>c&&(l[a+2]+=1),.2>d&&(l[a+4]+=1))})();this.setAttribute("position",new B(h,3));this.setAttribute("normal",new B(h.slice(),3));this.setAttribute("uv",new B(l,2));0===d?this.computeVertexNormals():this.normalizeNormals()}function Sd(a, +b){L.call(this);this.type="TetrahedronGeometry";this.parameters={radius:a,detail:b};this.fromBufferGeometry(new Rc(a,b));this.mergeVertices()}function Rc(a,b){Ga.call(this,[1,1,1,-1,-1,1,-1,1,-1,1,-1,-1],[2,1,0,0,3,2,1,3,0,2,3,1],a,b);this.type="TetrahedronBufferGeometry";this.parameters={radius:a,detail:b}}function Td(a,b){L.call(this);this.type="OctahedronGeometry";this.parameters={radius:a,detail:b};this.fromBufferGeometry(new bc(a,b));this.mergeVertices()}function bc(a,b){Ga.call(this,[1,0,0, +-1,0,0,0,1,0,0,-1,0,0,0,1,0,0,-1],[0,2,4,0,4,3,0,3,5,0,5,2,1,2,5,1,5,3,1,3,4,1,4,2],a,b);this.type="OctahedronBufferGeometry";this.parameters={radius:a,detail:b}}function Ud(a,b){L.call(this);this.type="IcosahedronGeometry";this.parameters={radius:a,detail:b};this.fromBufferGeometry(new Sc(a,b));this.mergeVertices()}function Sc(a,b){var c=(1+Math.sqrt(5))/2;Ga.call(this,[-1,c,0,1,c,0,-1,-c,0,1,-c,0,0,-1,c,0,1,c,0,-1,-c,0,1,-c,c,0,-1,c,0,1,-c,0,-1,-c,0,1],[0,11,5,0,5,1,0,1,7,0,7,10,0,10,11,1,5,9,5, +11,4,11,10,2,10,7,6,7,1,8,3,9,4,3,4,2,3,2,6,3,6,8,3,8,9,4,9,5,2,4,11,6,2,10,8,6,7,9,8,1],a,b);this.type="IcosahedronBufferGeometry";this.parameters={radius:a,detail:b}}function Vd(a,b){L.call(this);this.type="DodecahedronGeometry";this.parameters={radius:a,detail:b};this.fromBufferGeometry(new Tc(a,b));this.mergeVertices()}function Tc(a,b){var c=(1+Math.sqrt(5))/2,d=1/c;Ga.call(this,[-1,-1,-1,-1,-1,1,-1,1,-1,-1,1,1,1,-1,-1,1,-1,1,1,1,-1,1,1,1,0,-d,-c,0,-d,c,0,d,-c,0,d,c,-d,-c,0,-d,c,0,d,-c,0,d,c, +0,-c,0,-d,c,0,-d,-c,0,d,c,0,d],[3,11,7,3,7,15,3,15,13,7,19,17,7,17,6,7,6,15,17,4,8,17,8,10,17,10,6,8,0,16,8,16,2,8,2,10,0,12,1,0,1,18,0,18,16,6,10,2,6,2,13,6,13,15,2,16,18,2,18,3,2,3,13,18,1,9,18,9,11,18,11,3,4,14,12,4,12,0,4,0,8,11,9,5,11,5,19,11,19,7,19,5,14,19,14,4,19,4,17,1,12,14,1,14,5,1,5,9],a,b);this.type="DodecahedronBufferGeometry";this.parameters={radius:a,detail:b}}function Wd(a,b,c,d,e,f){L.call(this);this.type="TubeGeometry";this.parameters={path:a,tubularSegments:b,radius:c,radialSegments:d, +closed:e};void 0!==f&&console.warn("THREE.TubeGeometry: taper has been removed.");a=new cc(a,b,c,d,e);this.tangents=a.tangents;this.normals=a.normals;this.binormals=a.binormals;this.fromBufferGeometry(a);this.mergeVertices()}function cc(a,b,c,d,e){function f(e){k=a.getPointAt(e/b,k);var f=g.normals[e];e=g.binormals[e];for(t=0;t<=d;t++){var m=t/d*Math.PI*2,n=Math.sin(m);m=-Math.cos(m);l.x=m*f.x+n*e.x;l.y=m*f.y+n*e.y;l.z=m*f.z+n*e.z;l.normalize();q.push(l.x,l.y,l.z);h.x=k.x+c*l.x;h.y=k.y+c*l.y;h.z= +k.z+c*l.z;r.push(h.x,h.y,h.z)}}F.call(this);this.type="TubeBufferGeometry";this.parameters={path:a,tubularSegments:b,radius:c,radialSegments:d,closed:e};b=b||64;c=c||1;d=d||8;e=e||!1;var g=a.computeFrenetFrames(b,e);this.tangents=g.tangents;this.normals=g.normals;this.binormals=g.binormals;var h=new p,l=new p,m=new v,k=new p,n,t,r=[],q=[],u=[],E=[];for(n=0;n=b;e-=d)f=Yh(e,a[e],a[e+1],f);f&&Ue(f,f.next)&&(Zd(f),f=f.next);return f}function Lb(a,b){if(!a)return a;b||(b=a);do{var c=!1;if(a.steiner||!Ue(a,a.next)&&0!==na(a.prev,a,a.next))a=a.next;else{Zd(a);a=b=a.prev;if(a===a.next)break;c=!0}}while(c||a!==b);return b} +function $d(a,b,c,d,e,f,g){if(a){if(!g&&f){var h=a,l=h;do null===l.z&&(l.z=og(l.x,l.y,d,e,f)),l.prevZ=l.prev,l=l.nextZ=l.next;while(l!==h);l.prevZ.nextZ=null;l.prevZ=null;h=l;var m,k,n,t,r=1;do{l=h;var q=h=null;for(k=0;l;){k++;var p=l;for(m=n=0;mr!==q.next.y>r&&q.next.y!==q.y&&n<(q.next.x-q.x)*(r-q.y)/(q.next.y-q.y)+q.x&&(k=!k),q=q.next;while(q!==l);q=k}q=q&&(na(l.prev,l,p.prev)||na(l,p.prev,p))||Ue(l,p)&&0a.x?e.x>f.x?e.x:f.x:a.x>f.x?a.x:f.x,h=e.y>a.y?e.y>f.y?e.y:f.y:a.y>f.y?a.y:f.y,l=og(e.x=l&&d&&d.z<=b;){if(c!==a.prev&&c!==a.next&&Wc(e.x,e.y,a.x,a.y,f.x, +f.y,c.x,c.y)&&0<=na(c.prev,c,c.next))return!1;c=c.prevZ;if(d!==a.prev&&d!==a.next&&Wc(e.x,e.y,a.x,a.y,f.x,f.y,d.x,d.y)&&0<=na(d.prev,d,d.next))return!1;d=d.nextZ}for(;c&&c.z>=l;){if(c!==a.prev&&c!==a.next&&Wc(e.x,e.y,a.x,a.y,f.x,f.y,c.x,c.y)&&0<=na(c.prev,c,c.next))return!1;c=c.prevZ}for(;d&&d.z<=b;){if(d!==a.prev&&d!==a.next&&Wc(e.x,e.y,a.x,a.y,f.x,f.y,d.x,d.y)&&0<=na(d.prev,d,d.next))return!1;d=d.nextZ}return!0}function Bk(a,b){return a.x-b.x}function Ck(a,b){var c=b,d=a.x,e=a.y,f=-Infinity;do{if(e<= +c.y&&e>=c.next.y&&c.next.y!==c.y){var g=c.x+(e-c.y)*(c.next.x-c.x)/(c.next.y-c.y);if(g<=d&&g>f){f=g;if(g===d){if(e===c.y)return c;if(e===c.next.y)return c.next}var h=c.x=c.x&&c.x>=g&&d!==c.x&&Wc(eh.x)&&(n=c.x===h.x)){n=h;var t=c;n=0>na(n.prev,n,t.prev)&&0>na(t.next, +n,n.next)}n&&(h=c,m=k)}c=c.next}while(c!==b);return h}function og(a,b,c,d,e){a=32767*(a-c)*e;b=32767*(b-d)*e;a=(a|a<<8)&16711935;a=(a|a<<4)&252645135;a=(a|a<<2)&858993459;b=(b|b<<8)&16711935;b=(b|b<<4)&252645135;b=(b|b<<2)&858993459;return(a|a<<1)&1431655765|((b|b<<1)&1431655765)<<1}function Dk(a){var b=a,c=a;do{if(b.x=Math.min(a.x,c.x)&&b.y<=Math.max(a.y,c.y)&&b.y>=Math.min(a.y,c.y)}function Ve(a){return 0a?-1:0}function ae(a,b){return 0>na(a.prev,a,a.next)?0<=na(a,b,a.next)&& +0<=na(a,a.prev,b):0>na(a,b,a.prev)||0>na(a,a.next,b)}function $h(a,b){var c=new pg(a.i,a.x,a.y),d=new pg(b.i,b.x,b.y),e=a.next,f=b.prev;a.next=b;b.prev=a;c.next=e;e.prev=c;d.next=c;c.prev=d;f.next=d;d.prev=f;return d}function Yh(a,b,c,d){a=new pg(a,b,c);d?(a.next=d.next,a.prev=d,d.next.prev=a,d.next=a):(a.prev=a,a.next=a);return a}function Zd(a){a.next.prev=a.prev;a.prev.next=a.next;a.prevZ&&(a.prevZ.nextZ=a.nextZ);a.nextZ&&(a.nextZ.prevZ=a.prevZ)}function pg(a,b,c){this.i=a;this.x=b;this.y=c;this.nextZ= +this.prevZ=this.z=this.next=this.prev=null;this.steiner=!1}function ai(a){var b=a.length;2Number.EPSILON){var l=Math.sqrt(h),m=Math.sqrt(f*f+g*g);h=b.x-e/l;b=b.y+d/l;g=((c.x-g/m-h)*g-(c.y+f/m-b)*f)/(d*g-e*f);f=h+d*g-a.x;d=b+e*g-a.y;e=f*f+d*d;if(2>=e)return new v(f,d);e=Math.sqrt(e/2)}else a=!1,d>Number.EPSILON?f>Number.EPSILON&&(a=!0):d<-Number.EPSILON?f<-Number.EPSILON&&(a=!0):Math.sign(e)===Math.sign(g)&&(a=!0),a?(f=-e,e=Math.sqrt(h)):(f=d,d=e,e=Math.sqrt(h/2));return new v(f/e,d/ +e)}function h(a,b){for(J=a.length;0<=--J;){var c=J;var f=J-1;0>f&&(f=a.length-1);var g,h=w+2*B;for(g=0;gk;k++){var n=m[f[k]];var t=m[f[(k+1)%3]];d[0]=Math.min(n,t);d[1]=Math.max(n,t);n=d[0]+","+d[1];void 0===e[n]?e[n]={index1:d[0],index2:d[1],face1:h,face2:void 0}:e[n].face2=h}for(n in e)if(d=e[n],void 0===d.face2||g[d.face1].normal.dot(g[d.face2].normal)<=b)f=a[d.index1],c.push(f.x,f.y,f.z),f=a[d.index2],c.push(f.x,f.y,f.z);this.setAttribute("position",new B(c,3))}function hc(a,b,c,d,e,f,g,h){L.call(this);this.type="CylinderGeometry";this.parameters={radiusTop:a, +radiusBottom:b,height:c,radialSegments:d,heightSegments:e,openEnded:f,thetaStart:g,thetaLength:h};this.fromBufferGeometry(new tb(a,b,c,d,e,f,g,h));this.mergeVertices()}function tb(a,b,c,d,e,f,g,h){function l(c){var e,f=new v,l=new p,z=0,u=!0===c?a:b,w=!0===c?1:-1;var y=q;for(e=1;e<=d;e++)n.push(0,E*w,0),t.push(0,w,0),r.push(.5,.5),q++;var B=q;for(e=0;e<=d;e++){var A=e/d*h+g,D=Math.cos(A);A=Math.sin(A);l.x=u*A;l.y=E*w;l.z=u*D;n.push(l.x,l.y,l.z);t.push(0,w,0);f.x=.5*D+.5;f.y=.5*A*w+.5;r.push(f.x,f.y); +q++}for(e=0;ethis.duration&&this.resetDuration()}function Fk(a){switch(a.toLowerCase()){case "scalar":case "double":case "float":case "number":case "integer":return bd; +case "vector":case "vector2":case "vector3":case "vector4":return cd;case "color":return $e;case "quaternion":return je;case "bool":case "boolean":return Ze;case "string":return bf}throw Error("THREE.KeyframeTrack: Unsupported typeName: "+a);}function Gk(a){if(void 0===a.type)throw Error("THREE.KeyframeTrack: track type undefined, can not parse");var b=Fk(a.type);if(void 0===a.times){var c=[],d=[];ka.flattenJSON(a.keys,c,d,"value");a.times=c;a.values=d}return void 0!==b.parse?b.parse(a):new b(a.name, +a.times,a.values,a.interpolation)}function qg(a,b,c){var d=this,e=!1,f=0,g=0,h=void 0,l=[];this.onStart=void 0;this.onLoad=a;this.onProgress=b;this.onError=c;this.itemStart=function(a){g++;if(!1===e&&void 0!==d.onStart)d.onStart(a,f,g);e=!0};this.itemEnd=function(a){f++;if(void 0!==d.onProgress)d.onProgress(a,f,g);if(f===g&&(e=!1,void 0!==d.onLoad))d.onLoad()};this.itemError=function(a){if(void 0!==d.onError)d.onError(a)};this.resolveURL=function(a){return h?h(a):a};this.setURLModifier=function(a){h= +a;return this};this.addHandler=function(a,b){l.push(a,b);return this};this.removeHandler=function(a){a=l.indexOf(a);-1!==a&&l.splice(a,2);return this};this.getHandler=function(a){for(var b=0,c=l.length;ba;a++)this.coefficients.push(new p)}function Ua(a,b){S.call(this,void 0,b);this.type="LightProbe";this.sh=void 0!==a?a:new of}function pf(a){V.call(this,a);this.textures={}}function me(){F.call(this);this.type="InstancedBufferGeometry";this.instanceCount=Infinity}function qf(a,b,c,d){"number"===typeof c&&(d=c,c=!1,console.error("THREE.InstancedBufferAttribute: The constructor now expects normalized as the third argument."));G.call(this,a,b,c);this.meshPerAttribute= +d||1}function rf(a){V.call(this,a)}function sf(a){V.call(this,a)}function vg(a){"undefined"===typeof createImageBitmap&&console.warn("THREE.ImageBitmapLoader: createImageBitmap() not supported.");"undefined"===typeof fetch&&console.warn("THREE.ImageBitmapLoader: fetch() not supported.");V.call(this,a);this.options=void 0}function wg(){this.type="ShapePath";this.color=new D;this.subPaths=[];this.currentPath=null}function xg(a){this.type="Font";this.data=a}function yg(a){V.call(this,a)}function tf(a){V.call(this, +a)}function zg(a,b,c){Ua.call(this,void 0,c);a=(new D).set(a);c=(new D).set(b);b=new p(a.r,a.g,a.b);a=new p(c.r,c.g,c.b);c=Math.sqrt(Math.PI);var d=c*Math.sqrt(.75);this.sh.coefficients[0].copy(b).add(a).multiplyScalar(c);this.sh.coefficients[1].copy(b).sub(a).multiplyScalar(d)}function Ag(a,b){Ua.call(this,void 0,b);a=(new D).set(a);this.sh.coefficients[0].set(a.r,a.g,a.b).multiplyScalar(2*Math.sqrt(Math.PI))}function gi(){this.type="StereoCamera";this.aspect=1;this.eyeSep=.064;this.cameraL=new P; +this.cameraL.layers.enable(1);this.cameraL.matrixAutoUpdate=!1;this.cameraR=new P;this.cameraR.layers.enable(2);this.cameraR.matrixAutoUpdate=!1;this._cache={focus:null,fov:null,aspect:null,near:null,far:null,zoom:null,eyeSep:null}}function Bg(a){this.autoStart=void 0!==a?a:!0;this.elapsedTime=this.oldTime=this.startTime=0;this.running=!1}function Cg(){y.call(this);this.type="AudioListener";this.context=Dg.getContext();this.gain=this.context.createGain();this.gain.connect(this.context.destination); +this.filter=null;this.timeDelta=0;this._clock=new Bg}function gd(a){y.call(this);this.type="Audio";this.listener=a;this.context=a.context;this.gain=this.context.createGain();this.gain.connect(a.getInput());this.autoplay=!1;this.buffer=null;this.detune=0;this.loop=!1;this.offset=this.loopEnd=this.loopStart=0;this.duration=void 0;this.playbackRate=1;this.isPlaying=!1;this.hasPlaybackControl=!0;this.sourceType="empty";this._progress=this._startedAt=0;this.filters=[]}function Eg(a){gd.call(this,a);this.panner= +this.context.createPanner();this.panner.panningModel="HRTF";this.panner.connect(this.gain)}function Fg(a,b){this.analyser=a.context.createAnalyser();this.analyser.fftSize=void 0!==b?b:2048;this.data=new Uint8Array(this.analyser.frequencyBinCount);a.getOutput().connect(this.analyser)}function Gg(a,b,c){this.binding=a;this.valueSize=c;switch(b){case "quaternion":a=this._slerp;b=this._slerpAdditive;var d=this._setAdditiveIdentityQuaternion;this.buffer=new Float64Array(6*c);this._workIndex=5;break;case "string":case "bool":b= +a=this._select;d=this._setAdditiveIdentityOther;this.buffer=Array(5*c);break;default:a=this._lerp,b=this._lerpAdditive,d=this._setAdditiveIdentityNumeric,this.buffer=new Float64Array(5*c)}this._mixBufferRegion=a;this._mixBufferRegionAdditive=b;this._setIdentity=d;this._origIndex=3;this._addIndex=4;this.referenceCount=this.useCount=this.cumulativeWeightAdditive=this.cumulativeWeight=0}function hi(a,b,c){c=c||Aa.parseTrackName(b);this._targetGroup=a;this._bindings=a.subscribe_(b,c)}function Aa(a,b, +c){this.path=b;this.parsedPath=c||Aa.parseTrackName(b);this.node=Aa.findNode(a,this.parsedPath.nodeName)||a;this.rootNode=a}function ii(){this.uuid=O.generateUUID();this._objects=Array.prototype.slice.call(arguments);this.nCachedObjects_=0;var a={};this._indicesByUUID=a;for(var b=0,c=arguments.length;b!==c;++b)a[arguments[b].uuid]=b;this._paths=[];this._parsedPaths=[];this._bindings=[];this._bindingsIndicesByPath={};var d=this;this.stats={objects:{get total(){return d._objects.length},get inUse(){return this.total- +d.nCachedObjects_}},get bindingsPerObject(){return d._bindings.length}}}function ji(a,b,c,d){this._mixer=a;this._clip=b;this._localRoot=c||null;this.blendMode=d||b.blendMode;a=b.tracks;b=a.length;c=Array(b);d={endingStart:2400,endingEnd:2400};for(var e=0;e!==b;++e){var f=a[e].createInterpolant(null);c[e]=f;f.settings=d}this._interpolantSettings=d;this._interpolants=c;this._propertyBindings=Array(b);this._weightInterpolant=this._timeScaleInterpolant=this._byClipCacheIndex=this._cacheIndex=null;this.loop= +2201;this._loopCount=-1;this._startTime=null;this.time=0;this._effectiveWeight=this.weight=this._effectiveTimeScale=this.timeScale=1;this.repetitions=Infinity;this.paused=!1;this.enabled=!0;this.clampWhenFinished=!1;this.zeroSlopeAtEnd=this.zeroSlopeAtStart=!0}function Hg(a){this._root=a;this._initMemoryManager();this.time=this._accuIndex=0;this.timeScale=1}function uf(a,b){"string"===typeof a&&(console.warn("THREE.Uniform: Type parameter is no longer needed."),a=b);this.value=a}function Ig(a,b,c){rb.call(this, +a,b);this.meshPerAttribute=c||1}function Jg(a,b,c,d){this.ray=new Wb(a,b);this.near=c||0;this.far=d||Infinity;this.camera=null;this.layers=new De;this.params={Mesh:{},Line:{threshold:1},LOD:{},Points:{threshold:1},Sprite:{}};Object.defineProperties(this.params,{PointCloud:{get:function(){console.warn("THREE.Raycaster: params.PointCloud has been renamed to params.Points.");return this.Points}}})}function ki(a,b){return a.distance-b.distance}function Kg(a,b,c,d){a.layers.test(b.layers)&&a.raycast(b, +c);if(!0===d){a=a.children;d=0;for(var e=a.length;dc;c++,d++){var e=c/32*Math.PI*2,f=d/32*Math.PI*2;b.push(Math.cos(e),Math.sin(e),1, +Math.cos(f),Math.sin(f),1)}a.setAttribute("position",new B(b,3));b=new da({fog:!1,toneMapped:!1});this.cone=new ma(a,b);this.add(this.cone);this.update()}function ni(a){var b=[];a&&a.isBone&&b.push(a);for(var c=0;c\n\nvec3 getSample(float theta, vec3 axis) {\n\tfloat cosTheta = cos(theta);\n\t// Rodrigues' axis-angle rotation\n\tvec3 sampleDirection = vOutputDirection * cosTheta\n\t\t+ cross(axis, vOutputDirection) * sin(theta)\n\t\t+ axis * dot(axis, vOutputDirection) * (1.0 - cosTheta);\n\treturn bilinearCubeUV(envMap, sampleDirection, mipInt);\n}\n\nvoid main() {\n\tvec3 axis = latitudinal ? poleAxis : cross(poleAxis, vOutputDirection);\n\tif (all(equal(axis, vec3(0.0))))\n\t\taxis = vec3(vOutputDirection.z, 0.0, - vOutputDirection.x);\n\taxis = normalize(axis);\n\tgl_FragColor = vec4(0.0);\n\tgl_FragColor.rgb += weights[0] * getSample(0.0, axis);\n\tfor (int i = 1; i < n; i++) {\n\t\tif (i >= samples)\n\t\t\tbreak;\n\t\tfloat theta = dTheta * float(i);\n\t\tgl_FragColor.rgb += weights[i] * getSample(-1.0 * theta, axis);\n\t\tgl_FragColor.rgb += weights[i] * getSample(theta, axis);\n\t}\n\tgl_FragColor = linearToOutputTexel(gl_FragColor);\n}\n\t\t", +blending:0,depthTest:!1,depthWrite:!1});a.type="SphericalGaussianBlur";this._blurMaterial=a;this._cubemapShader=this._equirectShader=null;this._compileMaterial(this._blurMaterial)}function oi(a){a=new Ba(3*nb,3*nb,a);a.texture.mapping=306;a.texture.name="PMREM.cubeUv";a.scissorTest=!0;return a}function Rg(a,b,c,d,e){a.viewport.set(b,c,d,e);a.scissor.set(b,c,d,e)}function pi(){var a=new v(1,1);a=new ub({uniforms:{envMap:{value:null},texelSize:{value:a},inputEncoding:{value:mb[3E3]},outputEncoding:{value:mb[3E3]}}, +vertexShader:Pg(),fragmentShader:"\nprecision mediump float;\nprecision mediump int;\nvarying vec3 vOutputDirection;\nuniform sampler2D envMap;\nuniform vec2 texelSize;\n\n"+Qg()+"\n\n#include \n\nvoid main() {\n\tgl_FragColor = vec4(0.0);\n\tvec3 outputDirection = normalize(vOutputDirection);\n\tvec2 uv = equirectUv( outputDirection );\n\tvec2 f = fract(uv / texelSize - 0.5);\n\tuv -= f * texelSize;\n\tvec3 tl = envMapTexelToLinear(texture2D(envMap, uv)).rgb;\n\tuv.x += texelSize.x;\n\tvec3 tr = envMapTexelToLinear(texture2D(envMap, uv)).rgb;\n\tuv.y += texelSize.y;\n\tvec3 br = envMapTexelToLinear(texture2D(envMap, uv)).rgb;\n\tuv.x -= texelSize.x;\n\tvec3 bl = envMapTexelToLinear(texture2D(envMap, uv)).rgb;\n\tvec3 tm = mix(tl, tr, f.x);\n\tvec3 bm = mix(bl, br, f.x);\n\tgl_FragColor.rgb = mix(tm, bm, f.y);\n\tgl_FragColor = linearToOutputTexel(gl_FragColor);\n}\n\t\t", +blending:0,depthTest:!1,depthWrite:!1});a.type="EquirectangularToCubeUV";return a}function qi(){var a=new ub({uniforms:{envMap:{value:null},inputEncoding:{value:mb[3E3]},outputEncoding:{value:mb[3E3]}},vertexShader:Pg(),fragmentShader:"\nprecision mediump float;\nprecision mediump int;\nvarying vec3 vOutputDirection;\nuniform samplerCube envMap;\n\n"+Qg()+"\n\nvoid main() {\n\tgl_FragColor = vec4(0.0);\n\tgl_FragColor.rgb = envMapTexelToLinear(textureCube(envMap, vec3( - vOutputDirection.x, vOutputDirection.yz ))).rgb;\n\tgl_FragColor = linearToOutputTexel(gl_FragColor);\n}\n\t\t", +blending:0,depthTest:!1,depthWrite:!1});a.type="CubemapToCubeUV";return a}function Pg(){return"\nprecision mediump float;\nprecision mediump int;\nattribute vec3 position;\nattribute vec2 uv;\nattribute float faceIndex;\nvarying vec3 vOutputDirection;\n\n// RH coordinate system; PMREM face-indexing convention\nvec3 getDirection(vec2 uv, float face) {\n\tuv = 2.0 * uv - 1.0;\n\tvec3 direction = vec3(uv, 1.0);\n\tif (face == 0.0) {\n\t\tdirection = direction.zyx; // ( 1, v, u ) pos x\n\t} else if (face == 1.0) {\n\t\tdirection = direction.xzy;\n\t\tdirection.xz *= -1.0; // ( -u, 1, -v ) pos y\n\t} else if (face == 2.0) {\n\t\tdirection.x *= -1.0; // ( -u, v, 1 ) pos z\n\t} else if (face == 3.0) {\n\t\tdirection = direction.zyx;\n\t\tdirection.xz *= -1.0; // ( -1, v, -u ) neg x\n\t} else if (face == 4.0) {\n\t\tdirection = direction.xzy;\n\t\tdirection.xy *= -1.0; // ( -u, -1, v ) neg y\n\t} else if (face == 5.0) {\n\t\tdirection.z *= -1.0; // ( u, v, -1 ) neg z\n\t}\n\treturn direction;\n}\n\nvoid main() {\n\tvOutputDirection = getDirection(uv, faceIndex);\n\tgl_Position = vec4( position, 1.0 );\n}\n\t"} +function Qg(){return"\nuniform int inputEncoding;\nuniform int outputEncoding;\n\n#include \n\nvec4 inputTexelToLinear(vec4 value){\n\tif(inputEncoding == 0){\n\t\treturn value;\n\t}else if(inputEncoding == 1){\n\t\treturn sRGBToLinear(value);\n\t}else if(inputEncoding == 2){\n\t\treturn RGBEToLinear(value);\n\t}else if(inputEncoding == 3){\n\t\treturn RGBMToLinear(value, 7.0);\n\t}else if(inputEncoding == 4){\n\t\treturn RGBMToLinear(value, 16.0);\n\t}else if(inputEncoding == 5){\n\t\treturn RGBDToLinear(value, 256.0);\n\t}else{\n\t\treturn GammaToLinear(value, 2.2);\n\t}\n}\n\nvec4 linearToOutputTexel(vec4 value){\n\tif(outputEncoding == 0){\n\t\treturn value;\n\t}else if(outputEncoding == 1){\n\t\treturn LinearTosRGB(value);\n\t}else if(outputEncoding == 2){\n\t\treturn LinearToRGBE(value);\n\t}else if(outputEncoding == 3){\n\t\treturn LinearToRGBM(value, 7.0);\n\t}else if(outputEncoding == 4){\n\t\treturn LinearToRGBM(value, 16.0);\n\t}else if(outputEncoding == 5){\n\t\treturn LinearToRGBD(value, 256.0);\n\t}else{\n\t\treturn LinearToGamma(value, 2.2);\n\t}\n}\n\nvec4 envMapTexelToLinear(vec4 color) {\n\treturn inputTexelToLinear(color);\n}\n\t"} +function ri(a){console.warn("THREE.ClosedSplineCurve3 has been deprecated. Use THREE.CatmullRomCurve3 instead.");qa.call(this,a);this.type="catmullrom";this.closed=!0}function si(a){console.warn("THREE.SplineCurve3 has been deprecated. Use THREE.CatmullRomCurve3 instead.");qa.call(this,a);this.type="catmullrom"}function Sg(a){console.warn("THREE.Spline has been removed. Use THREE.CatmullRomCurve3 instead.");qa.call(this,a);this.type="catmullrom"}void 0===Number.EPSILON&&(Number.EPSILON=Math.pow(2, +-52));void 0===Number.isInteger&&(Number.isInteger=function(a){return"number"===typeof a&&isFinite(a)&&Math.floor(a)===a});void 0===Math.sign&&(Math.sign=function(a){return 0>a?-1:0se;se++)za[se]=(16>se?"0":"")+se.toString(16);var O={DEG2RAD:Math.PI/180,RAD2DEG:180/Math.PI,generateUUID:function(){var a=4294967295*Math.random()|0,b=4294967295*Math.random()|0,c=4294967295*Math.random()| +0,d=4294967295*Math.random()|0;return(za[a&255]+za[a>>8&255]+za[a>>16&255]+za[a>>24&255]+"-"+za[b&255]+za[b>>8&255]+"-"+za[b>>16&15|64]+za[b>>24&255]+"-"+za[c&63|128]+za[c>>8&255]+"-"+za[c>>16&255]+za[c>>24&255]+za[d&255]+za[d>>8&255]+za[d>>16&255]+za[d>>24&255]).toUpperCase()},clamp:function(a,b,c){return Math.max(b,Math.min(c,a))},euclideanModulo:function(a,b){return(a%b+b)%b},mapLinear:function(a,b,c,d,e){return d+(a-b)*(e-d)/(c-b)},lerp:function(a,b,c){return(1-c)*a+c*b},smoothstep:function(a, +b,c){if(a<=b)return 0;if(a>=c)return 1;a=(a-b)/(c-b);return a*a*(3-2*a)},smootherstep:function(a,b,c){if(a<=b)return 0;if(a>=c)return 1;a=(a-b)/(c-b);return a*a*a*(a*(6*a-15)+10)},randInt:function(a,b){return a+Math.floor(Math.random()*(b-a+1))},randFloat:function(a,b){return a+Math.random()*(b-a)},randFloatSpread:function(a){return a*(.5-Math.random())},degToRad:function(a){return a*O.DEG2RAD},radToDeg:function(a){return a*O.RAD2DEG},isPowerOfTwo:function(a){return 0===(a&a-1)&&0!==a},ceilPowerOfTwo:function(a){return Math.pow(2, +Math.ceil(Math.log(a)/Math.LN2))},floorPowerOfTwo:function(a){return Math.pow(2,Math.floor(Math.log(a)/Math.LN2))},setQuaternionFromProperEuler:function(a,b,c,d,e){var f=Math.cos,g=Math.sin,h=f(c/2);c=g(c/2);var l=f((b+d)/2),m=g((b+d)/2),k=f((b-d)/2),n=g((b-d)/2);f=f((d-b)/2);b=g((d-b)/2);switch(e){case "XYX":a.set(h*m,c*k,c*n,h*l);break;case "YZY":a.set(c*n,h*m,c*k,h*l);break;case "ZXZ":a.set(c*k,c*n,h*m,h*l);break;case "XZX":a.set(h*m,c*b,c*f,h*l);break;case "YXY":a.set(c*f,h*m,c*b,h*l);break;case "ZYZ":a.set(c* +b,c*f,h*m,h*l);break;default:console.warn("THREE.MathUtils: .setQuaternionFromProperEuler() encountered an unknown order: "+e)}}};Object.defineProperties(v.prototype,{width:{get:function(){return this.x},set:function(a){this.x=a}},height:{get:function(){return this.y},set:function(a){this.y=a}}});Object.assign(v.prototype,{isVector2:!0,set:function(a,b){this.x=a;this.y=b;return this},setScalar:function(a){this.y=this.x=a;return this},setX:function(a){this.x=a;return this},setY:function(a){this.y= +a;return this},setComponent:function(a,b){switch(a){case 0:this.x=b;break;case 1:this.y=b;break;default:throw Error("index is out of range: "+a);}return this},getComponent:function(a){switch(a){case 0:return this.x;case 1:return this.y;default:throw Error("index is out of range: "+a);}},clone:function(){return new this.constructor(this.x,this.y)},copy:function(a){this.x=a.x;this.y=a.y;return this},add:function(a,b){if(void 0!==b)return console.warn("THREE.Vector2: .add() now only accepts one argument. Use .addVectors( a, b ) instead."), +this.addVectors(a,b);this.x+=a.x;this.y+=a.y;return this},addScalar:function(a){this.x+=a;this.y+=a;return this},addVectors:function(a,b){this.x=a.x+b.x;this.y=a.y+b.y;return this},addScaledVector:function(a,b){this.x+=a.x*b;this.y+=a.y*b;return this},sub:function(a,b){if(void 0!==b)return console.warn("THREE.Vector2: .sub() now only accepts one argument. Use .subVectors( a, b ) instead."),this.subVectors(a,b);this.x-=a.x;this.y-=a.y;return this},subScalar:function(a){this.x-=a;this.y-=a;return this}, +subVectors:function(a,b){this.x=a.x-b.x;this.y=a.y-b.y;return this},multiply:function(a){this.x*=a.x;this.y*=a.y;return this},multiplyScalar:function(a){this.x*=a;this.y*=a;return this},divide:function(a){this.x/=a.x;this.y/=a.y;return this},divideScalar:function(a){return this.multiplyScalar(1/a)},applyMatrix3:function(a){var b=this.x,c=this.y;a=a.elements;this.x=a[0]*b+a[3]*c+a[6];this.y=a[1]*b+a[4]*c+a[7];return this},min:function(a){this.x=Math.min(this.x,a.x);this.y=Math.min(this.y,a.y);return this}, +max:function(a){this.x=Math.max(this.x,a.x);this.y=Math.max(this.y,a.y);return this},clamp:function(a,b){this.x=Math.max(a.x,Math.min(b.x,this.x));this.y=Math.max(a.y,Math.min(b.y,this.y));return this},clampScalar:function(a,b){this.x=Math.max(a,Math.min(b,this.x));this.y=Math.max(a,Math.min(b,this.y));return this},clampLength:function(a,b){var c=this.length();return this.divideScalar(c||1).multiplyScalar(Math.max(a,Math.min(b,c)))},floor:function(){this.x=Math.floor(this.x);this.y=Math.floor(this.y); +return this},ceil:function(){this.x=Math.ceil(this.x);this.y=Math.ceil(this.y);return this},round:function(){this.x=Math.round(this.x);this.y=Math.round(this.y);return this},roundToZero:function(){this.x=0>this.x?Math.ceil(this.x):Math.floor(this.x);this.y=0>this.y?Math.ceil(this.y):Math.floor(this.y);return this},negate:function(){this.x=-this.x;this.y=-this.y;return this},dot:function(a){return this.x*a.x+this.y*a.y},cross:function(a){return this.x*a.y-this.y*a.x},lengthSq:function(){return this.x* +this.x+this.y*this.y},length:function(){return Math.sqrt(this.x*this.x+this.y*this.y)},manhattanLength:function(){return Math.abs(this.x)+Math.abs(this.y)},normalize:function(){return this.divideScalar(this.length()||1)},angle:function(){return Math.atan2(-this.y,-this.x)+Math.PI},distanceTo:function(a){return Math.sqrt(this.distanceToSquared(a))},distanceToSquared:function(a){var b=this.x-a.x;a=this.y-a.y;return b*b+a*a},manhattanDistanceTo:function(a){return Math.abs(this.x-a.x)+Math.abs(this.y- +a.y)},setLength:function(a){return this.normalize().multiplyScalar(a)},lerp:function(a,b){this.x+=(a.x-this.x)*b;this.y+=(a.y-this.y)*b;return this},lerpVectors:function(a,b,c){this.x=a.x+(b.x-a.x)*c;this.y=a.y+(b.y-a.y)*c;return this},equals:function(a){return a.x===this.x&&a.y===this.y},fromArray:function(a,b){void 0===b&&(b=0);this.x=a[b];this.y=a[b+1];return this},toArray:function(a,b){void 0===a&&(a=[]);void 0===b&&(b=0);a[b]=this.x;a[b+1]=this.y;return a},fromBufferAttribute:function(a,b,c){void 0!== +c&&console.warn("THREE.Vector2: offset has been removed from .fromBufferAttribute().");this.x=a.getX(b);this.y=a.getY(b);return this},rotateAround:function(a,b){var c=Math.cos(b);b=Math.sin(b);var d=this.x-a.x,e=this.y-a.y;this.x=d*c-e*b+a.x;this.y=d*b+e*c+a.y;return this},random:function(){this.x=Math.random();this.y=Math.random();return this}});Object.assign(ya.prototype,{isMatrix3:!0,set:function(a,b,c,d,e,f,g,h,l){var m=this.elements;m[0]=a;m[1]=d;m[2]=g;m[3]=b;m[4]=e;m[5]=h;m[6]=c;m[7]=f;m[8]= +l;return this},identity:function(){this.set(1,0,0,0,1,0,0,0,1);return this},clone:function(){return(new this.constructor).fromArray(this.elements)},copy:function(a){var b=this.elements;a=a.elements;b[0]=a[0];b[1]=a[1];b[2]=a[2];b[3]=a[3];b[4]=a[4];b[5]=a[5];b[6]=a[6];b[7]=a[7];b[8]=a[8];return this},extractBasis:function(a,b,c){a.setFromMatrix3Column(this,0);b.setFromMatrix3Column(this,1);c.setFromMatrix3Column(this,2);return this},setFromMatrix4:function(a){a=a.elements;this.set(a[0],a[4],a[8],a[1], +a[5],a[9],a[2],a[6],a[10]);return this},multiply:function(a){return this.multiplyMatrices(this,a)},premultiply:function(a){return this.multiplyMatrices(a,this)},multiplyMatrices:function(a,b){var c=a.elements,d=b.elements;b=this.elements;a=c[0];var e=c[3],f=c[6],g=c[1],h=c[4],l=c[7],m=c[2],k=c[5];c=c[8];var n=d[0],t=d[3],p=d[6],q=d[1],u=d[4],v=d[7],x=d[2],w=d[5];d=d[8];b[0]=a*n+e*q+f*x;b[3]=a*t+e*u+f*w;b[6]=a*p+e*v+f*d;b[1]=g*n+h*q+l*x;b[4]=g*t+h*u+l*w;b[7]=g*p+h*v+l*d;b[2]=m*n+k*q+c*x;b[5]=m*t+k* +u+c*w;b[8]=m*p+k*v+c*d;return this},multiplyScalar:function(a){var b=this.elements;b[0]*=a;b[3]*=a;b[6]*=a;b[1]*=a;b[4]*=a;b[7]*=a;b[2]*=a;b[5]*=a;b[8]*=a;return this},determinant:function(){var a=this.elements,b=a[0],c=a[1],d=a[2],e=a[3],f=a[4],g=a[5],h=a[6],l=a[7];a=a[8];return b*f*a-b*g*l-c*e*a+c*g*h+d*e*l-d*f*h},getInverse:function(a,b){void 0!==b&&console.warn("THREE.Matrix3: .getInverse() can no longer be configured to throw on degenerate.");var c=a.elements;a=this.elements;b=c[0];var d=c[1], +e=c[2],f=c[3],g=c[4],h=c[5],l=c[6],m=c[7];c=c[8];var k=c*g-h*m,n=h*l-c*f,p=m*f-g*l,r=b*k+d*n+e*p;if(0===r)return this.set(0,0,0,0,0,0,0,0,0);r=1/r;a[0]=k*r;a[1]=(e*m-c*d)*r;a[2]=(h*d-e*g)*r;a[3]=n*r;a[4]=(c*b-e*l)*r;a[5]=(e*f-h*b)*r;a[6]=p*r;a[7]=(d*l-m*b)*r;a[8]=(g*b-d*f)*r;return this},transpose:function(){var a=this.elements;var b=a[1];a[1]=a[3];a[3]=b;b=a[2];a[2]=a[6];a[6]=b;b=a[5];a[5]=a[7];a[7]=b;return this},getNormalMatrix:function(a){return this.setFromMatrix4(a).getInverse(this).transpose()}, +transposeIntoArray:function(a){var b=this.elements;a[0]=b[0];a[1]=b[3];a[2]=b[6];a[3]=b[1];a[4]=b[4];a[5]=b[7];a[6]=b[2];a[7]=b[5];a[8]=b[8];return this},setUvTransform:function(a,b,c,d,e,f,g){var h=Math.cos(e);e=Math.sin(e);this.set(c*h,c*e,-c*(h*f+e*g)+f+a,-d*e,d*h,-d*(-e*f+h*g)+g+b,0,0,1)},scale:function(a,b){var c=this.elements;c[0]*=a;c[3]*=a;c[6]*=a;c[1]*=b;c[4]*=b;c[7]*=b;return this},rotate:function(a){var b=Math.cos(a);a=Math.sin(a);var c=this.elements,d=c[0],e=c[3],f=c[6],g=c[1],h=c[4], +l=c[7];c[0]=b*d+a*g;c[3]=b*e+a*h;c[6]=b*f+a*l;c[1]=-a*d+b*g;c[4]=-a*e+b*h;c[7]=-a*f+b*l;return this},translate:function(a,b){var c=this.elements;c[0]+=a*c[2];c[3]+=a*c[5];c[6]+=a*c[8];c[1]+=b*c[2];c[4]+=b*c[5];c[7]+=b*c[8];return this},equals:function(a){var b=this.elements;a=a.elements;for(var c=0;9>c;c++)if(b[c]!==a[c])return!1;return!0},fromArray:function(a,b){void 0===b&&(b=0);for(var c=0;9>c;c++)this.elements[c]=a[c+b];return this},toArray:function(a,b){void 0===a&&(a=[]);void 0===b&&(b=0);var c= +this.elements;a[b]=c[0];a[b+1]=c[1];a[b+2]=c[2];a[b+3]=c[3];a[b+4]=c[4];a[b+5]=c[5];a[b+6]=c[6];a[b+7]=c[7];a[b+8]=c[8];return a}});var ld,Ob={getDataURL:function(a){if("undefined"==typeof HTMLCanvasElement)return a.src;if(!(a instanceof HTMLCanvasElement)){void 0===ld&&(ld=document.createElementNS("http://www.w3.org/1999/xhtml","canvas"));ld.width=a.width;ld.height=a.height;var b=ld.getContext("2d");a instanceof ImageData?b.putImageData(a,0,0):b.drawImage(a,0,0,a.width,a.height);a=ld}return 2048< +a.width||2048a.x||1a.x?0:1;break;case 1002:a.x=1===Math.abs(Math.floor(a.x)%2)?Math.ceil(a.x)-a.x:a.x-Math.floor(a.x)}if(0>a.y||1a.y?0:1;break;case 1002:a.y=1===Math.abs(Math.floor(a.y)%2)?Math.ceil(a.y)-a.y:a.y-Math.floor(a.y)}this.flipY&&(a.y=1-a.y);return a}});Object.defineProperty(W.prototype, +"needsUpdate",{set:function(a){!0===a&&this.version++}});Object.defineProperties(R.prototype,{width:{get:function(){return this.z},set:function(a){this.z=a}},height:{get:function(){return this.w},set:function(a){this.w=a}}});Object.assign(R.prototype,{isVector4:!0,set:function(a,b,c,d){this.x=a;this.y=b;this.z=c;this.w=d;return this},setScalar:function(a){this.w=this.z=this.y=this.x=a;return this},setX:function(a){this.x=a;return this},setY:function(a){this.y=a;return this},setZ:function(a){this.z= +a;return this},setW:function(a){this.w=a;return this},setComponent:function(a,b){switch(a){case 0:this.x=b;break;case 1:this.y=b;break;case 2:this.z=b;break;case 3:this.w=b;break;default:throw Error("index is out of range: "+a);}return this},getComponent:function(a){switch(a){case 0:return this.x;case 1:return this.y;case 2:return this.z;case 3:return this.w;default:throw Error("index is out of range: "+a);}},clone:function(){return new this.constructor(this.x,this.y,this.z,this.w)},copy:function(a){this.x= +a.x;this.y=a.y;this.z=a.z;this.w=void 0!==a.w?a.w:1;return this},add:function(a,b){if(void 0!==b)return console.warn("THREE.Vector4: .add() now only accepts one argument. Use .addVectors( a, b ) instead."),this.addVectors(a,b);this.x+=a.x;this.y+=a.y;this.z+=a.z;this.w+=a.w;return this},addScalar:function(a){this.x+=a;this.y+=a;this.z+=a;this.w+=a;return this},addVectors:function(a,b){this.x=a.x+b.x;this.y=a.y+b.y;this.z=a.z+b.z;this.w=a.w+b.w;return this},addScaledVector:function(a,b){this.x+=a.x* +b;this.y+=a.y*b;this.z+=a.z*b;this.w+=a.w*b;return this},sub:function(a,b){if(void 0!==b)return console.warn("THREE.Vector4: .sub() now only accepts one argument. Use .subVectors( a, b ) instead."),this.subVectors(a,b);this.x-=a.x;this.y-=a.y;this.z-=a.z;this.w-=a.w;return this},subScalar:function(a){this.x-=a;this.y-=a;this.z-=a;this.w-=a;return this},subVectors:function(a,b){this.x=a.x-b.x;this.y=a.y-b.y;this.z=a.z-b.z;this.w=a.w-b.w;return this},multiplyScalar:function(a){this.x*=a;this.y*=a;this.z*= +a;this.w*=a;return this},applyMatrix4:function(a){var b=this.x,c=this.y,d=this.z,e=this.w;a=a.elements;this.x=a[0]*b+a[4]*c+a[8]*d+a[12]*e;this.y=a[1]*b+a[5]*c+a[9]*d+a[13]*e;this.z=a[2]*b+a[6]*c+a[10]*d+a[14]*e;this.w=a[3]*b+a[7]*c+a[11]*d+a[15]*e;return this},divideScalar:function(a){return this.multiplyScalar(1/a)},setAxisAngleFromQuaternion:function(a){this.w=2*Math.acos(a.w);var b=Math.sqrt(1-a.w*a.w);1E-4>b?(this.x=1,this.z=this.y=0):(this.x=a.x/b,this.y=a.y/b,this.z=a.z/b);return this},setAxisAngleFromRotationMatrix:function(a){a= +a.elements;var b=a[0];var c=a[4];var d=a[8],e=a[1],f=a[5],g=a[9];var h=a[2];var l=a[6];var m=a[10];if(.01>Math.abs(c-e)&&.01>Math.abs(d-h)&&.01>Math.abs(g-l)){if(.1>Math.abs(c+e)&&.1>Math.abs(d+h)&&.1>Math.abs(g+l)&&.1>Math.abs(b+f+m-3))return this.set(1,0,0,0),this;a=Math.PI;b=(b+1)/2;f=(f+1)/2;m=(m+1)/2;c=(c+e)/4;d=(d+h)/4;g=(g+l)/4;b>f&&b>m?.01>b?(l=0,c=h=.707106781):(l=Math.sqrt(b),h=c/l,c=d/l):f>m?.01>f?(l=.707106781,h=0,c=.707106781):(h=Math.sqrt(f),l=c/h,c=g/h):.01>m?(h=l=.707106781,c=0):(c= +Math.sqrt(m),l=d/c,h=g/c);this.set(l,h,c,a);return this}a=Math.sqrt((l-g)*(l-g)+(d-h)*(d-h)+(e-c)*(e-c));.001>Math.abs(a)&&(a=1);this.x=(l-g)/a;this.y=(d-h)/a;this.z=(e-c)/a;this.w=Math.acos((b+f+m-1)/2);return this},min:function(a){this.x=Math.min(this.x,a.x);this.y=Math.min(this.y,a.y);this.z=Math.min(this.z,a.z);this.w=Math.min(this.w,a.w);return this},max:function(a){this.x=Math.max(this.x,a.x);this.y=Math.max(this.y,a.y);this.z=Math.max(this.z,a.z);this.w=Math.max(this.w,a.w);return this},clamp:function(a, +b){this.x=Math.max(a.x,Math.min(b.x,this.x));this.y=Math.max(a.y,Math.min(b.y,this.y));this.z=Math.max(a.z,Math.min(b.z,this.z));this.w=Math.max(a.w,Math.min(b.w,this.w));return this},clampScalar:function(a,b){this.x=Math.max(a,Math.min(b,this.x));this.y=Math.max(a,Math.min(b,this.y));this.z=Math.max(a,Math.min(b,this.z));this.w=Math.max(a,Math.min(b,this.w));return this},clampLength:function(a,b){var c=this.length();return this.divideScalar(c||1).multiplyScalar(Math.max(a,Math.min(b,c)))},floor:function(){this.x= +Math.floor(this.x);this.y=Math.floor(this.y);this.z=Math.floor(this.z);this.w=Math.floor(this.w);return this},ceil:function(){this.x=Math.ceil(this.x);this.y=Math.ceil(this.y);this.z=Math.ceil(this.z);this.w=Math.ceil(this.w);return this},round:function(){this.x=Math.round(this.x);this.y=Math.round(this.y);this.z=Math.round(this.z);this.w=Math.round(this.w);return this},roundToZero:function(){this.x=0>this.x?Math.ceil(this.x):Math.floor(this.x);this.y=0>this.y?Math.ceil(this.y):Math.floor(this.y); +this.z=0>this.z?Math.ceil(this.z):Math.floor(this.z);this.w=0>this.w?Math.ceil(this.w):Math.floor(this.w);return this},negate:function(){this.x=-this.x;this.y=-this.y;this.z=-this.z;this.w=-this.w;return this},dot:function(a){return this.x*a.x+this.y*a.y+this.z*a.z+this.w*a.w},lengthSq:function(){return this.x*this.x+this.y*this.y+this.z*this.z+this.w*this.w},length:function(){return Math.sqrt(this.x*this.x+this.y*this.y+this.z*this.z+this.w*this.w)},manhattanLength:function(){return Math.abs(this.x)+ +Math.abs(this.y)+Math.abs(this.z)+Math.abs(this.w)},normalize:function(){return this.divideScalar(this.length()||1)},setLength:function(a){return this.normalize().multiplyScalar(a)},lerp:function(a,b){this.x+=(a.x-this.x)*b;this.y+=(a.y-this.y)*b;this.z+=(a.z-this.z)*b;this.w+=(a.w-this.w)*b;return this},lerpVectors:function(a,b,c){this.x=a.x+(b.x-a.x)*c;this.y=a.y+(b.y-a.y)*c;this.z=a.z+(b.z-a.z)*c;this.w=a.w+(b.w-a.w)*c;return this},equals:function(a){return a.x===this.x&&a.y===this.y&&a.z===this.z&& +a.w===this.w},fromArray:function(a,b){void 0===b&&(b=0);this.x=a[b];this.y=a[b+1];this.z=a[b+2];this.w=a[b+3];return this},toArray:function(a,b){void 0===a&&(a=[]);void 0===b&&(b=0);a[b]=this.x;a[b+1]=this.y;a[b+2]=this.z;a[b+3]=this.w;return a},fromBufferAttribute:function(a,b,c){void 0!==c&&console.warn("THREE.Vector4: offset has been removed from .fromBufferAttribute().");this.x=a.getX(b);this.y=a.getY(b);this.z=a.getZ(b);this.w=a.getW(b);return this},random:function(){this.x=Math.random();this.y= +Math.random();this.z=Math.random();this.w=Math.random();return this}});Ba.prototype=Object.assign(Object.create(ua.prototype),{constructor:Ba,isWebGLRenderTarget:!0,setSize:function(a,b){if(this.width!==a||this.height!==b)this.width=a,this.height=b,this.texture.image.width=a,this.texture.image.height=b,this.dispose();this.viewport.set(0,0,a,b);this.scissor.set(0,0,a,b)},clone:function(){return(new this.constructor).copy(this)},copy:function(a){this.width=a.width;this.height=a.height;this.viewport.copy(a.viewport); +this.texture=a.texture.clone();this.depthBuffer=a.depthBuffer;this.stencilBuffer=a.stencilBuffer;this.depthTexture=a.depthTexture;return this},dispose:function(){this.dispatchEvent({type:"dispose"})}});Xf.prototype=Object.assign(Object.create(Ba.prototype),{constructor:Xf,isWebGLMultisampleRenderTarget:!0,copy:function(a){Ba.prototype.copy.call(this,a);this.samples=a.samples;return this}});Object.assign(va,{slerp:function(a,b,c,d){return c.copy(a).slerp(b,d)},slerpFlat:function(a,b,c,d,e,f,g){var h= +c[d+0],l=c[d+1],m=c[d+2];c=c[d+3];d=e[f+0];var k=e[f+1],n=e[f+2];e=e[f+3];if(c!==e||h!==d||l!==k||m!==n){f=1-g;var p=h*d+l*k+m*n+c*e,r=0<=p?1:-1,q=1-p*p;q>Number.EPSILON&&(q=Math.sqrt(q),p=Math.atan2(q,p*r),f=Math.sin(f*p)/q,g=Math.sin(g*p)/q);r*=g;h=h*f+d*r;l=l*f+k*r;m=m*f+n*r;c=c*f+e*r;f===1-g&&(g=1/Math.sqrt(h*h+l*l+m*m+c*c),h*=g,l*=g,m*=g,c*=g)}a[b]=h;a[b+1]=l;a[b+2]=m;a[b+3]=c},multiplyQuaternionsFlat:function(a,b,c,d,e,f){var g=c[d],h=c[d+1],l=c[d+2];c=c[d+3];d=e[f];var m=e[f+1],k=e[f+2];e= +e[f+3];a[b]=g*e+c*d+h*k-l*m;a[b+1]=h*e+c*m+l*d-g*k;a[b+2]=l*e+c*k+g*m-h*d;a[b+3]=c*e-g*d-h*m-l*k;return a}});Object.defineProperties(va.prototype,{x:{get:function(){return this._x},set:function(a){this._x=a;this._onChangeCallback()}},y:{get:function(){return this._y},set:function(a){this._y=a;this._onChangeCallback()}},z:{get:function(){return this._z},set:function(a){this._z=a;this._onChangeCallback()}},w:{get:function(){return this._w},set:function(a){this._w=a;this._onChangeCallback()}}});Object.assign(va.prototype, +{isQuaternion:!0,set:function(a,b,c,d){this._x=a;this._y=b;this._z=c;this._w=d;this._onChangeCallback();return this},clone:function(){return new this.constructor(this._x,this._y,this._z,this._w)},copy:function(a){this._x=a.x;this._y=a.y;this._z=a.z;this._w=a.w;this._onChangeCallback();return this},setFromEuler:function(a,b){if(!a||!a.isEuler)throw Error("THREE.Quaternion: .setFromEuler() now expects an Euler rotation rather than a Vector3 and order.");var c=a._x,d=a._y,e=a._z;a=a.order;var f=Math.cos, +g=Math.sin,h=f(c/2),l=f(d/2);f=f(e/2);c=g(c/2);d=g(d/2);e=g(e/2);switch(a){case "XYZ":this._x=c*l*f+h*d*e;this._y=h*d*f-c*l*e;this._z=h*l*e+c*d*f;this._w=h*l*f-c*d*e;break;case "YXZ":this._x=c*l*f+h*d*e;this._y=h*d*f-c*l*e;this._z=h*l*e-c*d*f;this._w=h*l*f+c*d*e;break;case "ZXY":this._x=c*l*f-h*d*e;this._y=h*d*f+c*l*e;this._z=h*l*e+c*d*f;this._w=h*l*f-c*d*e;break;case "ZYX":this._x=c*l*f-h*d*e;this._y=h*d*f+c*l*e;this._z=h*l*e-c*d*f;this._w=h*l*f+c*d*e;break;case "YZX":this._x=c*l*f+h*d*e;this._y= +h*d*f+c*l*e;this._z=h*l*e-c*d*f;this._w=h*l*f-c*d*e;break;case "XZY":this._x=c*l*f-h*d*e;this._y=h*d*f-c*l*e;this._z=h*l*e+c*d*f;this._w=h*l*f+c*d*e;break;default:console.warn("THREE.Quaternion: .setFromEuler() encountered an unknown order: "+a)}!1!==b&&this._onChangeCallback();return this},setFromAxisAngle:function(a,b){b/=2;var c=Math.sin(b);this._x=a.x*c;this._y=a.y*c;this._z=a.z*c;this._w=Math.cos(b);this._onChangeCallback();return this},setFromRotationMatrix:function(a){var b=a.elements,c=b[0]; +a=b[4];var d=b[8],e=b[1],f=b[5],g=b[9],h=b[2],l=b[6];b=b[10];var m=c+f+b;0f&&c>b?(c=2*Math.sqrt(1+c-f-b),this._w=(l-g)/c,this._x=.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=.25*c,this._z=(g+l)/c):(c=2*Math.sqrt(1+b-c-f),this._w=(e-a)/c,this._x=(d+h)/c,this._y=(g+l)/c,this._z=.25*c);this._onChangeCallback();return this},setFromUnitVectors:function(a, +b){var c=a.dot(b)+1;1E-6>c?(c=0,Math.abs(a.x)>Math.abs(a.z)?(this._x=-a.y,this._y=a.x,this._z=0):(this._x=0,this._y=-a.z,this._z=a.y)):(this._x=a.y*b.z-a.z*b.y,this._y=a.z*b.x-a.x*b.z,this._z=a.x*b.y-a.y*b.x);this._w=c;return this.normalize()},angleTo:function(a){return 2*Math.acos(Math.abs(O.clamp(this.dot(a),-1,1)))},rotateTowards:function(a,b){var c=this.angleTo(a);if(0===c)return this;this.slerp(a,Math.min(1,b/c));return this},inverse:function(){return this.conjugate()},conjugate:function(){this._x*= +-1;this._y*=-1;this._z*=-1;this._onChangeCallback();return this},dot:function(a){return this._x*a._x+this._y*a._y+this._z*a._z+this._w*a._w},lengthSq:function(){return this._x*this._x+this._y*this._y+this._z*this._z+this._w*this._w},length:function(){return Math.sqrt(this._x*this._x+this._y*this._y+this._z*this._z+this._w*this._w)},normalize:function(){var a=this.length();0===a?(this._z=this._y=this._x=0,this._w=1):(a=1/a,this._x*=a,this._y*=a,this._z*=a,this._w*=a);this._onChangeCallback();return this}, +multiply:function(a,b){return void 0!==b?(console.warn("THREE.Quaternion: .multiply() now only accepts one argument. Use .multiplyQuaternions( a, b ) instead."),this.multiplyQuaternions(a,b)):this.multiplyQuaternions(this,a)},premultiply:function(a){return this.multiplyQuaternions(a,this)},multiplyQuaternions:function(a,b){var c=a._x,d=a._y,e=a._z;a=a._w;var f=b._x,g=b._y,h=b._z;b=b._w;this._x=c*b+a*f+d*h-e*g;this._y=d*b+a*g+e*f-c*h;this._z=e*b+a*h+c*g-d*f;this._w=a*b-c*f-d*g-e*h;this._onChangeCallback(); +return this},slerp:function(a,b){if(0===b)return this;if(1===b)return this.copy(a);var c=this._x,d=this._y,e=this._z,f=this._w,g=f*a._w+c*a._x+d*a._y+e*a._z;0>g?(this._w=-a._w,this._x=-a._x,this._y=-a._y,this._z=-a._z,g=-g):this.copy(a);if(1<=g)return this._w=f,this._x=c,this._y=d,this._z=e,this;a=1-g*g;if(a<=Number.EPSILON)return g=1-b,this._w=g*f+b*this._w,this._x=g*c+b*this._x,this._y=g*d+b*this._y,this._z=g*e+b*this._z,this.normalize(),this._onChangeCallback(),this;a=Math.sqrt(a);var h=Math.atan2(a, +g);g=Math.sin((1-b)*h)/a;b=Math.sin(b*h)/a;this._w=f*g+this._w*b;this._x=c*g+this._x*b;this._y=d*g+this._y*b;this._z=e*g+this._z*b;this._onChangeCallback();return this},equals:function(a){return a._x===this._x&&a._y===this._y&&a._z===this._z&&a._w===this._w},fromArray:function(a,b){void 0===b&&(b=0);this._x=a[b];this._y=a[b+1];this._z=a[b+2];this._w=a[b+3];this._onChangeCallback();return this},toArray:function(a,b){void 0===a&&(a=[]);void 0===b&&(b=0);a[b]=this._x;a[b+1]=this._y;a[b+2]=this._z;a[b+ +3]=this._w;return a},fromBufferAttribute:function(a,b){this._x=a.getX(b);this._y=a.getY(b);this._z=a.getZ(b);this._w=a.getW(b);return this},_onChange:function(a){this._onChangeCallback=a;return this},_onChangeCallback:function(){}});var Tg=new p,ti=new va;Object.assign(p.prototype,{isVector3:!0,set:function(a,b,c){this.x=a;this.y=b;this.z=c;return this},setScalar:function(a){this.z=this.y=this.x=a;return this},setX:function(a){this.x=a;return this},setY:function(a){this.y=a;return this},setZ:function(a){this.z= +a;return this},setComponent:function(a,b){switch(a){case 0:this.x=b;break;case 1:this.y=b;break;case 2:this.z=b;break;default:throw Error("index is out of range: "+a);}return this},getComponent:function(a){switch(a){case 0:return this.x;case 1:return this.y;case 2:return this.z;default:throw Error("index is out of range: "+a);}},clone:function(){return new this.constructor(this.x,this.y,this.z)},copy:function(a){this.x=a.x;this.y=a.y;this.z=a.z;return this},add:function(a,b){if(void 0!==b)return console.warn("THREE.Vector3: .add() now only accepts one argument. Use .addVectors( a, b ) instead."), +this.addVectors(a,b);this.x+=a.x;this.y+=a.y;this.z+=a.z;return this},addScalar:function(a){this.x+=a;this.y+=a;this.z+=a;return this},addVectors:function(a,b){this.x=a.x+b.x;this.y=a.y+b.y;this.z=a.z+b.z;return this},addScaledVector:function(a,b){this.x+=a.x*b;this.y+=a.y*b;this.z+=a.z*b;return this},sub:function(a,b){if(void 0!==b)return console.warn("THREE.Vector3: .sub() now only accepts one argument. Use .subVectors( a, b ) instead."),this.subVectors(a,b);this.x-=a.x;this.y-=a.y;this.z-=a.z; +return this},subScalar:function(a){this.x-=a;this.y-=a;this.z-=a;return this},subVectors:function(a,b){this.x=a.x-b.x;this.y=a.y-b.y;this.z=a.z-b.z;return this},multiply:function(a,b){if(void 0!==b)return console.warn("THREE.Vector3: .multiply() now only accepts one argument. Use .multiplyVectors( a, b ) instead."),this.multiplyVectors(a,b);this.x*=a.x;this.y*=a.y;this.z*=a.z;return this},multiplyScalar:function(a){this.x*=a;this.y*=a;this.z*=a;return this},multiplyVectors:function(a,b){this.x=a.x* +b.x;this.y=a.y*b.y;this.z=a.z*b.z;return this},applyEuler:function(a){a&&a.isEuler||console.error("THREE.Vector3: .applyEuler() now expects an Euler rotation rather than a Vector3 and order.");return this.applyQuaternion(ti.setFromEuler(a))},applyAxisAngle:function(a,b){return this.applyQuaternion(ti.setFromAxisAngle(a,b))},applyMatrix3:function(a){var b=this.x,c=this.y,d=this.z;a=a.elements;this.x=a[0]*b+a[3]*c+a[6]*d;this.y=a[1]*b+a[4]*c+a[7]*d;this.z=a[2]*b+a[5]*c+a[8]*d;return this},applyNormalMatrix:function(a){return this.applyMatrix3(a).normalize()}, +applyMatrix4:function(a){var b=this.x,c=this.y,d=this.z;a=a.elements;var e=1/(a[3]*b+a[7]*c+a[11]*d+a[15]);this.x=(a[0]*b+a[4]*c+a[8]*d+a[12])*e;this.y=(a[1]*b+a[5]*c+a[9]*d+a[13])*e;this.z=(a[2]*b+a[6]*c+a[10]*d+a[14])*e;return this},applyQuaternion:function(a){var b=this.x,c=this.y,d=this.z,e=a.x,f=a.y,g=a.z;a=a.w;var h=a*b+f*d-g*c,l=a*c+g*b-e*d,m=a*d+e*c-f*b;b=-e*b-f*c-g*d;this.x=h*a+b*-e+l*-g-m*-f;this.y=l*a+b*-f+m*-e-h*-g;this.z=m*a+b*-g+h*-f-l*-e;return this},project:function(a){return this.applyMatrix4(a.matrixWorldInverse).applyMatrix4(a.projectionMatrix)}, +unproject:function(a){return this.applyMatrix4(a.projectionMatrixInverse).applyMatrix4(a.matrixWorld)},transformDirection:function(a){var b=this.x,c=this.y,d=this.z;a=a.elements;this.x=a[0]*b+a[4]*c+a[8]*d;this.y=a[1]*b+a[5]*c+a[9]*d;this.z=a[2]*b+a[6]*c+a[10]*d;return this.normalize()},divide:function(a){this.x/=a.x;this.y/=a.y;this.z/=a.z;return this},divideScalar:function(a){return this.multiplyScalar(1/a)},min:function(a){this.x=Math.min(this.x,a.x);this.y=Math.min(this.y,a.y);this.z=Math.min(this.z, +a.z);return this},max:function(a){this.x=Math.max(this.x,a.x);this.y=Math.max(this.y,a.y);this.z=Math.max(this.z,a.z);return this},clamp:function(a,b){this.x=Math.max(a.x,Math.min(b.x,this.x));this.y=Math.max(a.y,Math.min(b.y,this.y));this.z=Math.max(a.z,Math.min(b.z,this.z));return this},clampScalar:function(a,b){this.x=Math.max(a,Math.min(b,this.x));this.y=Math.max(a,Math.min(b,this.y));this.z=Math.max(a,Math.min(b,this.z));return this},clampLength:function(a,b){var c=this.length();return this.divideScalar(c|| +1).multiplyScalar(Math.max(a,Math.min(b,c)))},floor:function(){this.x=Math.floor(this.x);this.y=Math.floor(this.y);this.z=Math.floor(this.z);return this},ceil:function(){this.x=Math.ceil(this.x);this.y=Math.ceil(this.y);this.z=Math.ceil(this.z);return this},round:function(){this.x=Math.round(this.x);this.y=Math.round(this.y);this.z=Math.round(this.z);return this},roundToZero:function(){this.x=0>this.x?Math.ceil(this.x):Math.floor(this.x);this.y=0>this.y?Math.ceil(this.y):Math.floor(this.y);this.z= +0>this.z?Math.ceil(this.z):Math.floor(this.z);return this},negate:function(){this.x=-this.x;this.y=-this.y;this.z=-this.z;return this},dot:function(a){return this.x*a.x+this.y*a.y+this.z*a.z},lengthSq:function(){return this.x*this.x+this.y*this.y+this.z*this.z},length:function(){return Math.sqrt(this.x*this.x+this.y*this.y+this.z*this.z)},manhattanLength:function(){return Math.abs(this.x)+Math.abs(this.y)+Math.abs(this.z)},normalize:function(){return this.divideScalar(this.length()||1)},setLength:function(a){return this.normalize().multiplyScalar(a)}, +lerp:function(a,b){this.x+=(a.x-this.x)*b;this.y+=(a.y-this.y)*b;this.z+=(a.z-this.z)*b;return this},lerpVectors:function(a,b,c){this.x=a.x+(b.x-a.x)*c;this.y=a.y+(b.y-a.y)*c;this.z=a.z+(b.z-a.z)*c;return this},cross:function(a,b){return void 0!==b?(console.warn("THREE.Vector3: .cross() now only accepts one argument. Use .crossVectors( a, b ) instead."),this.crossVectors(a,b)):this.crossVectors(this,a)},crossVectors:function(a,b){var c=a.x,d=a.y;a=a.z;var e=b.x,f=b.y;b=b.z;this.x=d*b-a*f;this.y=a* +e-c*b;this.z=c*f-d*e;return this},projectOnVector:function(a){var b=a.lengthSq();if(0===b)return this.set(0,0,0);b=a.dot(this)/b;return this.copy(a).multiplyScalar(b)},projectOnPlane:function(a){Tg.copy(this).projectOnVector(a);return this.sub(Tg)},reflect:function(a){return this.sub(Tg.copy(a).multiplyScalar(2*this.dot(a)))},angleTo:function(a){var b=Math.sqrt(this.lengthSq()*a.lengthSq());if(0===b)return Math.PI/2;a=this.dot(a)/b;return Math.acos(O.clamp(a,-1,1))},distanceTo:function(a){return Math.sqrt(this.distanceToSquared(a))}, +distanceToSquared:function(a){var b=this.x-a.x,c=this.y-a.y;a=this.z-a.z;return b*b+c*c+a*a},manhattanDistanceTo:function(a){return Math.abs(this.x-a.x)+Math.abs(this.y-a.y)+Math.abs(this.z-a.z)},setFromSpherical:function(a){return this.setFromSphericalCoords(a.radius,a.phi,a.theta)},setFromSphericalCoords:function(a,b,c){var d=Math.sin(b)*a;this.x=d*Math.sin(c);this.y=Math.cos(b)*a;this.z=d*Math.cos(c);return this},setFromCylindrical:function(a){return this.setFromCylindricalCoords(a.radius,a.theta, +a.y)},setFromCylindricalCoords:function(a,b,c){this.x=a*Math.sin(b);this.y=c;this.z=a*Math.cos(b);return this},setFromMatrixPosition:function(a){a=a.elements;this.x=a[12];this.y=a[13];this.z=a[14];return this},setFromMatrixScale:function(a){var b=this.setFromMatrixColumn(a,0).length(),c=this.setFromMatrixColumn(a,1).length();a=this.setFromMatrixColumn(a,2).length();this.x=b;this.y=c;this.z=a;return this},setFromMatrixColumn:function(a,b){return this.fromArray(a.elements,4*b)},setFromMatrix3Column:function(a, +b){return this.fromArray(a.elements,3*b)},equals:function(a){return a.x===this.x&&a.y===this.y&&a.z===this.z},fromArray:function(a,b){void 0===b&&(b=0);this.x=a[b];this.y=a[b+1];this.z=a[b+2];return this},toArray:function(a,b){void 0===a&&(a=[]);void 0===b&&(b=0);a[b]=this.x;a[b+1]=this.y;a[b+2]=this.z;return a},fromBufferAttribute:function(a,b,c){void 0!==c&&console.warn("THREE.Vector3: offset has been removed from .fromBufferAttribute().");this.x=a.getX(b);this.y=a.getY(b);this.z=a.getZ(b);return this}, +random:function(){this.x=Math.random();this.y=Math.random();this.z=Math.random();return this}});var md=new p,ba=new N,Hk=new p(0,0,0),Ik=new p(1,1,1),Pb=new p,zf=new p,Ea=new p;Object.assign(N.prototype,{isMatrix4:!0,set:function(a,b,c,d,e,f,g,h,l,m,k,n,p,r,q,u){var z=this.elements;z[0]=a;z[4]=b;z[8]=c;z[12]=d;z[1]=e;z[5]=f;z[9]=g;z[13]=h;z[2]=l;z[6]=m;z[10]=k;z[14]=n;z[3]=p;z[7]=r;z[11]=q;z[15]=u;return this},identity:function(){this.set(1,0,0,0,0,1,0,0,0,0,1,0,0,0,0,1);return this},clone:function(){return(new N).fromArray(this.elements)}, +copy:function(a){var b=this.elements;a=a.elements;b[0]=a[0];b[1]=a[1];b[2]=a[2];b[3]=a[3];b[4]=a[4];b[5]=a[5];b[6]=a[6];b[7]=a[7];b[8]=a[8];b[9]=a[9];b[10]=a[10];b[11]=a[11];b[12]=a[12];b[13]=a[13];b[14]=a[14];b[15]=a[15];return this},copyPosition:function(a){var b=this.elements;a=a.elements;b[12]=a[12];b[13]=a[13];b[14]=a[14];return this},extractBasis:function(a,b,c){a.setFromMatrixColumn(this,0);b.setFromMatrixColumn(this,1);c.setFromMatrixColumn(this,2);return this},makeBasis:function(a,b,c){this.set(a.x, +b.x,c.x,0,a.y,b.y,c.y,0,a.z,b.z,c.z,0,0,0,0,1);return this},extractRotation:function(a){var b=this.elements,c=a.elements,d=1/md.setFromMatrixColumn(a,0).length(),e=1/md.setFromMatrixColumn(a,1).length();a=1/md.setFromMatrixColumn(a,2).length();b[0]=c[0]*d;b[1]=c[1]*d;b[2]=c[2]*d;b[3]=0;b[4]=c[4]*e;b[5]=c[5]*e;b[6]=c[6]*e;b[7]=0;b[8]=c[8]*a;b[9]=c[9]*a;b[10]=c[10]*a;b[11]=0;b[12]=0;b[13]=0;b[14]=0;b[15]=1;return this},makeRotationFromEuler:function(a){a&&a.isEuler||console.error("THREE.Matrix4: .makeRotationFromEuler() now expects a Euler rotation rather than a Vector3 and order."); +var b=this.elements,c=a.x,d=a.y,e=a.z,f=Math.cos(c);c=Math.sin(c);var g=Math.cos(d);d=Math.sin(d);var h=Math.cos(e);e=Math.sin(e);if("XYZ"===a.order){a=f*h;var l=f*e,m=c*h,k=c*e;b[0]=g*h;b[4]=-g*e;b[8]=d;b[1]=l+m*d;b[5]=a-k*d;b[9]=-c*g;b[2]=k-a*d;b[6]=m+l*d;b[10]=f*g}else"YXZ"===a.order?(a=g*h,l=g*e,m=d*h,k=d*e,b[0]=a+k*c,b[4]=m*c-l,b[8]=f*d,b[1]=f*e,b[5]=f*h,b[9]=-c,b[2]=l*c-m,b[6]=k+a*c,b[10]=f*g):"ZXY"===a.order?(a=g*h,l=g*e,m=d*h,k=d*e,b[0]=a-k*c,b[4]=-f*e,b[8]=m+l*c,b[1]=l+m*c,b[5]=f*h,b[9]= +k-a*c,b[2]=-f*d,b[6]=c,b[10]=f*g):"ZYX"===a.order?(a=f*h,l=f*e,m=c*h,k=c*e,b[0]=g*h,b[4]=m*d-l,b[8]=a*d+k,b[1]=g*e,b[5]=k*d+a,b[9]=l*d-m,b[2]=-d,b[6]=c*g,b[10]=f*g):"YZX"===a.order?(a=f*g,l=f*d,m=c*g,k=c*d,b[0]=g*h,b[4]=k-a*e,b[8]=m*e+l,b[1]=e,b[5]=f*h,b[9]=-c*h,b[2]=-d*h,b[6]=l*e+m,b[10]=a-k*e):"XZY"===a.order&&(a=f*g,l=f*d,m=c*g,k=c*d,b[0]=g*h,b[4]=-e,b[8]=d*h,b[1]=a*e+k,b[5]=f*h,b[9]=l*e-m,b[2]=m*e-l,b[6]=c*h,b[10]=k*e+a);b[3]=0;b[7]=0;b[11]=0;b[12]=0;b[13]=0;b[14]=0;b[15]=1;return this},makeRotationFromQuaternion:function(a){return this.compose(Hk, +a,Ik)},lookAt:function(a,b,c){var d=this.elements;Ea.subVectors(a,b);0===Ea.lengthSq()&&(Ea.z=1);Ea.normalize();Pb.crossVectors(c,Ea);0===Pb.lengthSq()&&(1===Math.abs(c.z)?Ea.x+=1E-4:Ea.z+=1E-4,Ea.normalize(),Pb.crossVectors(c,Ea));Pb.normalize();zf.crossVectors(Ea,Pb);d[0]=Pb.x;d[4]=zf.x;d[8]=Ea.x;d[1]=Pb.y;d[5]=zf.y;d[9]=Ea.y;d[2]=Pb.z;d[6]=zf.z;d[10]=Ea.z;return this},multiply:function(a,b){return void 0!==b?(console.warn("THREE.Matrix4: .multiply() now only accepts one argument. Use .multiplyMatrices( a, b ) instead."), +this.multiplyMatrices(a,b)):this.multiplyMatrices(this,a)},premultiply:function(a){return this.multiplyMatrices(a,this)},multiplyMatrices:function(a,b){var c=a.elements,d=b.elements;b=this.elements;a=c[0];var e=c[4],f=c[8],g=c[12],h=c[1],l=c[5],m=c[9],k=c[13],n=c[2],p=c[6],r=c[10],q=c[14],u=c[3],v=c[7],x=c[11];c=c[15];var w=d[0],y=d[4],B=d[8],Z=d[12],C=d[1],A=d[5],D=d[9],F=d[13],G=d[2],H=d[6],K=d[10],L=d[14],M=d[3],N=d[7],O=d[11];d=d[15];b[0]=a*w+e*C+f*G+g*M;b[4]=a*y+e*A+f*H+g*N;b[8]=a*B+e*D+f*K+ +g*O;b[12]=a*Z+e*F+f*L+g*d;b[1]=h*w+l*C+m*G+k*M;b[5]=h*y+l*A+m*H+k*N;b[9]=h*B+l*D+m*K+k*O;b[13]=h*Z+l*F+m*L+k*d;b[2]=n*w+p*C+r*G+q*M;b[6]=n*y+p*A+r*H+q*N;b[10]=n*B+p*D+r*K+q*O;b[14]=n*Z+p*F+r*L+q*d;b[3]=u*w+v*C+x*G+c*M;b[7]=u*y+v*A+x*H+c*N;b[11]=u*B+v*D+x*K+c*O;b[15]=u*Z+v*F+x*L+c*d;return this},multiplyScalar:function(a){var b=this.elements;b[0]*=a;b[4]*=a;b[8]*=a;b[12]*=a;b[1]*=a;b[5]*=a;b[9]*=a;b[13]*=a;b[2]*=a;b[6]*=a;b[10]*=a;b[14]*=a;b[3]*=a;b[7]*=a;b[11]*=a;b[15]*=a;return this},determinant:function(){var a= +this.elements,b=a[0],c=a[4],d=a[8],e=a[12],f=a[1],g=a[5],h=a[9],l=a[13],m=a[2],k=a[6],n=a[10],p=a[14];return a[3]*(+e*h*k-d*l*k-e*g*n+c*l*n+d*g*p-c*h*p)+a[7]*(+b*h*p-b*l*n+e*f*n-d*f*p+d*l*m-e*h*m)+a[11]*(+b*l*k-b*g*p-e*f*k+c*f*p+e*g*m-c*l*m)+a[15]*(-d*g*m-b*h*k+b*g*n+d*f*k-c*f*n+c*h*m)},transpose:function(){var a=this.elements;var b=a[1];a[1]=a[4];a[4]=b;b=a[2];a[2]=a[8];a[8]=b;b=a[6];a[6]=a[9];a[9]=b;b=a[3];a[3]=a[12];a[12]=b;b=a[7];a[7]=a[13];a[13]=b;b=a[11];a[11]=a[14];a[14]=b;return this},setPosition:function(a, +b,c){var d=this.elements;a.isVector3?(d[12]=a.x,d[13]=a.y,d[14]=a.z):(d[12]=a,d[13]=b,d[14]=c);return this},getInverse:function(a,b){void 0!==b&&console.warn("THREE.Matrix4: .getInverse() can no longer be configured to throw on degenerate.");b=this.elements;var c=a.elements;a=c[0];var d=c[1],e=c[2],f=c[3],g=c[4],h=c[5],l=c[6],m=c[7],k=c[8],n=c[9],p=c[10],r=c[11],q=c[12],u=c[13],v=c[14];c=c[15];var x=n*v*m-u*p*m+u*l*r-h*v*r-n*l*c+h*p*c,w=q*p*m-k*v*m-q*l*r+g*v*r+k*l*c-g*p*c,y=k*u*m-q*n*m+q*h*r-g*u* +r-k*h*c+g*n*c,B=q*n*l-k*u*l-q*h*p+g*u*p+k*h*v-g*n*v,A=a*x+d*w+e*y+f*B;if(0===A)return this.set(0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0);A=1/A;b[0]=x*A;b[1]=(u*p*f-n*v*f-u*e*r+d*v*r+n*e*c-d*p*c)*A;b[2]=(h*v*f-u*l*f+u*e*m-d*v*m-h*e*c+d*l*c)*A;b[3]=(n*l*f-h*p*f-n*e*m+d*p*m+h*e*r-d*l*r)*A;b[4]=w*A;b[5]=(k*v*f-q*p*f+q*e*r-a*v*r-k*e*c+a*p*c)*A;b[6]=(q*l*f-g*v*f-q*e*m+a*v*m+g*e*c-a*l*c)*A;b[7]=(g*p*f-k*l*f+k*e*m-a*p*m-g*e*r+a*l*r)*A;b[8]=y*A;b[9]=(q*n*f-k*u*f-q*d*r+a*u*r+k*d*c-a*n*c)*A;b[10]=(g*u*f-q*h*f+q*d*m- +a*u*m-g*d*c+a*h*c)*A;b[11]=(k*h*f-g*n*f-k*d*m+a*n*m+g*d*r-a*h*r)*A;b[12]=B*A;b[13]=(k*u*e-q*n*e+q*d*p-a*u*p-k*d*v+a*n*v)*A;b[14]=(q*h*e-g*u*e-q*d*l+a*u*l+g*d*v-a*h*v)*A;b[15]=(g*n*e-k*h*e+k*d*l-a*n*l-g*d*p+a*h*p)*A;return this},scale:function(a){var b=this.elements,c=a.x,d=a.y;a=a.z;b[0]*=c;b[4]*=d;b[8]*=a;b[1]*=c;b[5]*=d;b[9]*=a;b[2]*=c;b[6]*=d;b[10]*=a;b[3]*=c;b[7]*=d;b[11]*=a;return this},getMaxScaleOnAxis:function(){var a=this.elements;return Math.sqrt(Math.max(a[0]*a[0]+a[1]*a[1]+a[2]*a[2],a[4]* +a[4]+a[5]*a[5]+a[6]*a[6],a[8]*a[8]+a[9]*a[9]+a[10]*a[10]))},makeTranslation:function(a,b,c){this.set(1,0,0,a,0,1,0,b,0,0,1,c,0,0,0,1);return this},makeRotationX:function(a){var b=Math.cos(a);a=Math.sin(a);this.set(1,0,0,0,0,b,-a,0,0,a,b,0,0,0,0,1);return this},makeRotationY:function(a){var b=Math.cos(a);a=Math.sin(a);this.set(b,0,a,0,0,1,0,0,-a,0,b,0,0,0,0,1);return this},makeRotationZ:function(a){var b=Math.cos(a);a=Math.sin(a);this.set(b,-a,0,0,a,b,0,0,0,0,1,0,0,0,0,1);return this},makeRotationAxis:function(a, +b){var c=Math.cos(b);b=Math.sin(b);var d=1-c,e=a.x,f=a.y;a=a.z;var g=d*e,h=d*f;this.set(g*e+c,g*f-b*a,g*a+b*f,0,g*f+b*a,h*f+c,h*a-b*e,0,g*a-b*f,h*a+b*e,d*a*a+c,0,0,0,0,1);return this},makeScale:function(a,b,c){this.set(a,0,0,0,0,b,0,0,0,0,c,0,0,0,0,1);return this},makeShear:function(a,b,c){this.set(1,b,c,0,a,1,c,0,a,b,1,0,0,0,0,1);return this},compose:function(a,b,c){var d=this.elements,e=b._x,f=b._y,g=b._z,h=b._w,l=e+e,m=f+f,k=g+g;b=e*l;var n=e*m;e*=k;var p=f*m;f*=k;g*=k;l*=h;m*=h;h*=k;k=c.x;var r= +c.y;c=c.z;d[0]=(1-(p+g))*k;d[1]=(n+h)*k;d[2]=(e-m)*k;d[3]=0;d[4]=(n-h)*r;d[5]=(1-(b+g))*r;d[6]=(f+l)*r;d[7]=0;d[8]=(e+m)*c;d[9]=(f-l)*c;d[10]=(1-(b+p))*c;d[11]=0;d[12]=a.x;d[13]=a.y;d[14]=a.z;d[15]=1;return this},decompose:function(a,b,c){var d=this.elements,e=md.set(d[0],d[1],d[2]).length(),f=md.set(d[4],d[5],d[6]).length(),g=md.set(d[8],d[9],d[10]).length();0>this.determinant()&&(e=-e);a.x=d[12];a.y=d[13];a.z=d[14];ba.copy(this);a=1/e;d=1/f;var h=1/g;ba.elements[0]*=a;ba.elements[1]*=a;ba.elements[2]*= +a;ba.elements[4]*=d;ba.elements[5]*=d;ba.elements[6]*=d;ba.elements[8]*=h;ba.elements[9]*=h;ba.elements[10]*=h;b.setFromRotationMatrix(ba);c.x=e;c.y=f;c.z=g;return this},makePerspective:function(a,b,c,d,e,f){void 0===f&&console.warn("THREE.Matrix4: .makePerspective() has been redefined and has a new signature. Please check the docs.");var g=this.elements;g[0]=2*e/(b-a);g[4]=0;g[8]=(b+a)/(b-a);g[12]=0;g[1]=0;g[5]=2*e/(c-d);g[9]=(c+d)/(c-d);g[13]=0;g[2]=0;g[6]=0;g[10]=-(f+e)/(f-e);g[14]=-2*f*e/(f-e); +g[3]=0;g[7]=0;g[11]=-1;g[15]=0;return this},makeOrthographic:function(a,b,c,d,e,f){var g=this.elements,h=1/(b-a),l=1/(c-d),m=1/(f-e);g[0]=2*h;g[4]=0;g[8]=0;g[12]=-((b+a)*h);g[1]=0;g[5]=2*l;g[9]=0;g[13]=-((c+d)*l);g[2]=0;g[6]=0;g[10]=-2*m;g[14]=-((f+e)*m);g[3]=0;g[7]=0;g[11]=0;g[15]=1;return this},equals:function(a){var b=this.elements;a=a.elements;for(var c=0;16>c;c++)if(b[c]!==a[c])return!1;return!0},fromArray:function(a,b){void 0===b&&(b=0);for(var c=0;16>c;c++)this.elements[c]=a[c+b];return this}, +toArray:function(a,b){void 0===a&&(a=[]);void 0===b&&(b=0);var c=this.elements;a[b]=c[0];a[b+1]=c[1];a[b+2]=c[2];a[b+3]=c[3];a[b+4]=c[4];a[b+5]=c[5];a[b+6]=c[6];a[b+7]=c[7];a[b+8]=c[8];a[b+9]=c[9];a[b+10]=c[10];a[b+11]=c[11];a[b+12]=c[12];a[b+13]=c[13];a[b+14]=c[14];a[b+15]=c[15];return a}});var ui=new N,vi=new va;Ub.RotationOrders="XYZ YZX ZXY XZY YXZ ZYX".split(" ");Ub.DefaultOrder="XYZ";Object.defineProperties(Ub.prototype,{x:{get:function(){return this._x},set:function(a){this._x=a;this._onChangeCallback()}}, +y:{get:function(){return this._y},set:function(a){this._y=a;this._onChangeCallback()}},z:{get:function(){return this._z},set:function(a){this._z=a;this._onChangeCallback()}},order:{get:function(){return this._order},set:function(a){this._order=a;this._onChangeCallback()}}});Object.assign(Ub.prototype,{isEuler:!0,set:function(a,b,c,d){this._x=a;this._y=b;this._z=c;this._order=d||this._order;this._onChangeCallback();return this},clone:function(){return new this.constructor(this._x,this._y,this._z,this._order)}, +copy:function(a){this._x=a._x;this._y=a._y;this._z=a._z;this._order=a._order;this._onChangeCallback();return this},setFromRotationMatrix:function(a,b,c){var d=O.clamp,e=a.elements;a=e[0];var f=e[4],g=e[8],h=e[1],l=e[5],m=e[9],k=e[2],n=e[6];e=e[10];b=b||this._order;switch(b){case "XYZ":this._y=Math.asin(d(g,-1,1));.9999999>Math.abs(g)?(this._x=Math.atan2(-m,e),this._z=Math.atan2(-f,a)):(this._x=Math.atan2(n,l),this._z=0);break;case "YXZ":this._x=Math.asin(-d(m,-1,1));.9999999>Math.abs(m)?(this._y= +Math.atan2(g,e),this._z=Math.atan2(h,l)):(this._y=Math.atan2(-k,a),this._z=0);break;case "ZXY":this._x=Math.asin(d(n,-1,1));.9999999>Math.abs(n)?(this._y=Math.atan2(-k,e),this._z=Math.atan2(-f,l)):(this._y=0,this._z=Math.atan2(h,a));break;case "ZYX":this._y=Math.asin(-d(k,-1,1));.9999999>Math.abs(k)?(this._x=Math.atan2(n,e),this._z=Math.atan2(h,a)):(this._x=0,this._z=Math.atan2(-f,l));break;case "YZX":this._z=Math.asin(d(h,-1,1));.9999999>Math.abs(h)?(this._x=Math.atan2(-m,l),this._y=Math.atan2(-k, +a)):(this._x=0,this._y=Math.atan2(g,e));break;case "XZY":this._z=Math.asin(-d(f,-1,1));.9999999>Math.abs(f)?(this._x=Math.atan2(n,l),this._y=Math.atan2(g,a)):(this._x=Math.atan2(-m,e),this._y=0);break;default:console.warn("THREE.Euler: .setFromRotationMatrix() encountered an unknown order: "+b)}this._order=b;!1!==c&&this._onChangeCallback();return this},setFromQuaternion:function(a,b,c){ui.makeRotationFromQuaternion(a);return this.setFromRotationMatrix(ui,b,c)},setFromVector3:function(a,b){return this.set(a.x, +a.y,a.z,b||this._order)},reorder:function(a){vi.setFromEuler(this);return this.setFromQuaternion(vi,a)},equals:function(a){return a._x===this._x&&a._y===this._y&&a._z===this._z&&a._order===this._order},fromArray:function(a){this._x=a[0];this._y=a[1];this._z=a[2];void 0!==a[3]&&(this._order=a[3]);this._onChangeCallback();return this},toArray:function(a,b){void 0===a&&(a=[]);void 0===b&&(b=0);a[b]=this._x;a[b+1]=this._y;a[b+2]=this._z;a[b+3]=this._order;return a},toVector3:function(a){return a?a.set(this._x, +this._y,this._z):new p(this._x,this._y,this._z)},_onChange:function(a){this._onChangeCallback=a;return this},_onChangeCallback:function(){}});Object.assign(De.prototype,{set:function(a){this.mask=1<e&&(e=m);k>f&&(f=k);n>g&&(g=n)}this.min.set(b,c,d);this.max.set(e,f,g);return this},setFromBufferAttribute:function(a){for(var b=Infinity,c=Infinity,d=Infinity,e=-Infinity,f=-Infinity,g=-Infinity,h=0,l=a.count;he&&(e=m);k>f&&(f=k);n>g&&(g=n)}this.min.set(b,c,d);this.max.set(e,f,g);return this},setFromPoints:function(a){this.makeEmpty();for(var b=0,c=a.length;bthis.max.x||a.ythis.max.y||a.zthis.max.z?!1:!0},containsBox:function(a){return this.min.x<=a.min.x&&a.max.x<=this.max.x&&this.min.y<=a.min.y&&a.max.y<=this.max.y&&this.min.z<=a.min.z&&a.max.z<=this.max.z},getParameter:function(a,b){void 0===b&&(console.warn("THREE.Box3: .getParameter() target is now required"),b=new p);return b.set((a.x-this.min.x)/(this.max.x-this.min.x),(a.y-this.min.y)/(this.max.y-this.min.y),(a.z-this.min.z)/(this.max.z-this.min.z))},intersectsBox:function(a){return a.max.xthis.max.x|| +a.max.ythis.max.y||a.max.zthis.max.z?!1:!0},intersectsSphere:function(a){this.clampPoint(a.center,ue);return ue.distanceToSquared(a.center)<=a.radius*a.radius},intersectsPlane:function(a){if(0=-a.constant},intersectsTriangle:function(a){if(this.isEmpty())return!1;this.getCenter(ve);Bf.subVectors(this.max,ve);od.subVectors(a.a,ve);pd.subVectors(a.b,ve);qd.subVectors(a.c,ve);Qb.subVectors(pd,od);Rb.subVectors(qd,pd);qc.subVectors(od,qd);a=[0,-Qb.z,Qb.y,0,-Rb.z,Rb.y,0,-qc.z,qc.y,Qb.z,0,-Qb.x,Rb.z,0,-Rb.x,qc.z,0,-qc.x,-Qb.y,Qb.x,0,-Rb.y,Rb.x,0,-qc.y,qc.x,0];if(!Yf(a,od,pd,qd,Bf))return!1; +a=[1,0,0,0,1,0,0,0,1];if(!Yf(a,od,pd,qd,Bf))return!1;Cf.crossVectors(Qb,Rb);a=[Cf.x,Cf.y,Cf.z];return Yf(a,od,pd,qd,Bf)},clampPoint:function(a,b){void 0===b&&(console.warn("THREE.Box3: .clampPoint() target is now required"),b=new p);return b.copy(a).clamp(this.min,this.max)},distanceToPoint:function(a){return ue.copy(a).clamp(this.min,this.max).sub(a).length()},getBoundingSphere:function(a){void 0===a&&console.error("THREE.Box3: .getBoundingSphere() target is now required");this.getCenter(a.center); +a.radius=.5*this.getSize(ue).length();return a},intersect:function(a){this.min.max(a.min);this.max.min(a.max);this.isEmpty()&&this.makeEmpty();return this},union:function(a){this.min.min(a.min);this.max.max(a.max);return this},applyMatrix4:function(a){if(this.isEmpty())return this;zb[0].set(this.min.x,this.min.y,this.min.z).applyMatrix4(a);zb[1].set(this.min.x,this.min.y,this.max.z).applyMatrix4(a);zb[2].set(this.min.x,this.max.y,this.min.z).applyMatrix4(a);zb[3].set(this.min.x,this.max.y,this.max.z).applyMatrix4(a); +zb[4].set(this.max.x,this.min.y,this.min.z).applyMatrix4(a);zb[5].set(this.max.x,this.min.y,this.max.z).applyMatrix4(a);zb[6].set(this.max.x,this.max.y,this.min.z).applyMatrix4(a);zb[7].set(this.max.x,this.max.y,this.max.z).applyMatrix4(a);this.setFromPoints(zb);return this},translate:function(a){this.min.add(a);this.max.add(a);return this},equals:function(a){return a.min.equals(this.min)&&a.max.equals(this.max)}});var Nk=new Va;Object.assign(eb.prototype,{set:function(a,b){this.center.copy(a);this.radius= +b;return this},setFromPoints:function(a,b){var c=this.center;void 0!==b?c.copy(b):Nk.setFromPoints(a).getCenter(c);for(var d=b=0,e=a.length;dthis.radius},makeEmpty:function(){this.center.set(0,0,0);this.radius=-1;return this},containsPoint:function(a){return a.distanceToSquared(this.center)<= +this.radius*this.radius},distanceToPoint:function(a){return a.distanceTo(this.center)-this.radius},intersectsSphere:function(a){var b=this.radius+a.radius;return a.center.distanceToSquared(this.center)<=b*b},intersectsBox:function(a){return a.intersectsSphere(this)},intersectsPlane:function(a){return Math.abs(a.distanceToPoint(this.center))<=this.radius},clampPoint:function(a,b){var c=this.center.distanceToSquared(a);void 0===b&&(console.warn("THREE.Sphere: .clampPoint() target is now required"), +b=new p);b.copy(a);c>this.radius*this.radius&&(b.sub(this.center).normalize(),b.multiplyScalar(this.radius).add(this.center));return b},getBoundingBox:function(a){void 0===a&&(console.warn("THREE.Sphere: .getBoundingBox() target is now required"),a=new Va);if(this.isEmpty())return a.makeEmpty(),a;a.set(this.center,this.center);a.expandByScalar(this.radius);return a},applyMatrix4:function(a){this.center.applyMatrix4(a);this.radius*=a.getMaxScaleOnAxis();return this},translate:function(a){this.center.add(a); +return this},equals:function(a){return a.center.equals(this.center)&&a.radius===this.radius}});var Ab=new p,Vg=new p,Df=new p,Sb=new p,Wg=new p,Ef=new p,Xg=new p;Object.assign(Wb.prototype,{set:function(a,b){this.origin.copy(a);this.direction.copy(b);return this},clone:function(){return(new this.constructor).copy(this)},copy:function(a){this.origin.copy(a.origin);this.direction.copy(a.direction);return this},at:function(a,b){void 0===b&&(console.warn("THREE.Ray: .at() target is now required"),b=new p); +return b.copy(this.direction).multiplyScalar(a).add(this.origin)},lookAt:function(a){this.direction.copy(a).sub(this.origin).normalize();return this},recast:function(a){this.origin.copy(this.at(a,Ab));return this},closestPointToPoint:function(a,b){void 0===b&&(console.warn("THREE.Ray: .closestPointToPoint() target is now required"),b=new p);b.subVectors(a,this.origin);a=b.dot(this.direction);return 0>a?b.copy(this.origin):b.copy(this.direction).multiplyScalar(a).add(this.origin)},distanceToPoint:function(a){return Math.sqrt(this.distanceSqToPoint(a))}, +distanceSqToPoint:function(a){var b=Ab.subVectors(a,this.origin).dot(this.direction);if(0>b)return this.origin.distanceToSquared(a);Ab.copy(this.direction).multiplyScalar(b).add(this.origin);return Ab.distanceToSquared(a)},distanceSqToSegment:function(a,b,c,d){Vg.copy(a).add(b).multiplyScalar(.5);Df.copy(b).sub(a).normalize();Sb.copy(this.origin).sub(Vg);var e=.5*a.distanceTo(b),f=-this.direction.dot(Df),g=Sb.dot(this.direction),h=-Sb.dot(Df),l=Sb.lengthSq(),m=Math.abs(1-f*f);if(0=-k?b<=k?(e=1/m,a*=e,b*=e,f=a*(a+f*b+2*g)+b*(f*a+b+2*h)+l):(b=e,a=Math.max(0,-(f*b+g)),f=-a*a+b*(b+2*h)+l):(b=-e,a=Math.max(0,-(f*b+g)),f=-a*a+b*(b+2*h)+l):b<=-k?(a=Math.max(0,-(-f*e+g)),b=0a)return null;a=Math.sqrt(a-d);d=c-a;c+=a;return 0>d&&0>c?null:0>d?this.at(c,b):this.at(d,b)},intersectsSphere:function(a){return this.distanceSqToPoint(a.center)<=a.radius*a.radius},distanceToPlane:function(a){var b=a.normal.dot(this.direction);if(0===b)return 0===a.distanceToPoint(this.origin)?0:null;a=-(this.origin.dot(a.normal)+ +a.constant)/b;return 0<=a?a:null},intersectPlane:function(a,b){a=this.distanceToPlane(a);return null===a?null:this.at(a,b)},intersectsPlane:function(a){var b=a.distanceToPoint(this.origin);return 0===b||0>a.normal.dot(this.direction)*b?!0:!1},intersectBox:function(a,b){var c=1/this.direction.x;var d=1/this.direction.y;var e=1/this.direction.z,f=this.origin;if(0<=c){var g=(a.min.x-f.x)*c;c*=a.max.x-f.x}else g=(a.max.x-f.x)*c,c*=a.min.x-f.x;if(0<=d){var h=(a.min.y-f.y)*d;d*=a.max.y-f.y}else h=(a.max.y- +f.y)*d,d*=a.min.y-f.y;if(g>d||h>c)return null;if(h>g||g!==g)g=h;if(da||h>c)return null;if(h>g||g!==g)g=h;if(ac?null:this.at(0<=g?g:c,b)},intersectsBox:function(a){return null!==this.intersectBox(a,Ab)},intersectTriangle:function(a,b,c,d,e){Wg.subVectors(b,a);Ef.subVectors(c,a);Xg.crossVectors(Wg,Ef);b=this.direction.dot(Xg);if(0b)d=-1,b=-b;else return null; +Sb.subVectors(this.origin,a);a=d*this.direction.dot(Ef.crossVectors(Sb,Ef));if(0>a)return null;c=d*this.direction.dot(Wg.cross(Sb));if(0>c||a+c>b)return null;a=-d*Sb.dot(Xg);return 0>a?null:this.at(a/b,e)},applyMatrix4:function(a){this.origin.applyMatrix4(a);this.direction.transformDirection(a);return this},equals:function(a){return a.origin.equals(this.origin)&&a.direction.equals(this.direction)}});var Yg=new p,Ok=new p,Pk=new ya;Object.assign(Wa.prototype,{isPlane:!0,set:function(a,b){this.normal.copy(a); +this.constant=b;return this},setComponents:function(a,b,c,d){this.normal.set(a,b,c);this.constant=d;return this},setFromNormalAndCoplanarPoint:function(a,b){this.normal.copy(a);this.constant=-b.dot(this.normal);return this},setFromCoplanarPoints:function(a,b,c){b=Yg.subVectors(c,b).cross(Ok.subVectors(a,b)).normalize();this.setFromNormalAndCoplanarPoint(b,a);return this},clone:function(){return(new this.constructor).copy(this)},copy:function(a){this.normal.copy(a.normal);this.constant=a.constant; +return this},normalize:function(){var a=1/this.normal.length();this.normal.multiplyScalar(a);this.constant*=a;return this},negate:function(){this.constant*=-1;this.normal.negate();return this},distanceToPoint:function(a){return this.normal.dot(a)+this.constant},distanceToSphere:function(a){return this.distanceToPoint(a.center)-a.radius},projectPoint:function(a,b){void 0===b&&(console.warn("THREE.Plane: .projectPoint() target is now required"),b=new p);return b.copy(this.normal).multiplyScalar(-this.distanceToPoint(a)).add(a)}, +intersectLine:function(a,b){void 0===b&&(console.warn("THREE.Plane: .intersectLine() target is now required"),b=new p);var c=a.delta(Yg),d=this.normal.dot(c);if(0===d){if(0===this.distanceToPoint(a.start))return b.copy(a.start)}else if(d=-(a.start.dot(this.normal)+this.constant)/d,!(0>d||1b&&0a&&0=Cb.x+Cb.y},getUV:function(a,b,c,d,e,f,g,h){this.getBarycoord(a,b,c,d,Cb);h.set(0,0);h.addScaledVector(e,Cb.x);h.addScaledVector(f,Cb.y);h.addScaledVector(g,Cb.z);return h},isFrontFacing:function(a, +b,c,d){cb.subVectors(c,b);Bb.subVectors(a,b);return 0>cb.cross(Bb).dot(d)?!0:!1}});Object.assign(pa.prototype,{set:function(a,b,c){this.a.copy(a);this.b.copy(b);this.c.copy(c);return this},setFromPointsAndIndices:function(a,b,c,d){this.a.copy(a[b]);this.b.copy(a[c]);this.c.copy(a[d]);return this},clone:function(){return(new this.constructor).copy(this)},copy:function(a){this.a.copy(a.a);this.b.copy(a.b);this.c.copy(a.c);return this},getArea:function(){cb.subVectors(this.c,this.b);Bb.subVectors(this.a, +this.b);return.5*cb.cross(Bb).length()},getMidpoint:function(a){void 0===a&&(console.warn("THREE.Triangle: .getMidpoint() target is now required"),a=new p);return a.addVectors(this.a,this.b).add(this.c).multiplyScalar(1/3)},getNormal:function(a){return pa.getNormal(this.a,this.b,this.c,a)},getPlane:function(a){void 0===a&&(console.warn("THREE.Triangle: .getPlane() target is now required"),a=new Wa);return a.setFromCoplanarPoints(this.a,this.b,this.c)},getBarycoord:function(a,b){return pa.getBarycoord(a, +this.a,this.b,this.c,b)},getUV:function(a,b,c,d,e){return pa.getUV(a,this.a,this.b,this.c,b,c,d,e)},containsPoint:function(a){return pa.containsPoint(a,this.a,this.b,this.c)},isFrontFacing:function(a){return pa.isFrontFacing(this.a,this.b,this.c,a)},intersectsBox:function(a){return a.intersectsTriangle(this)},closestPointToPoint:function(a,b){void 0===b&&(console.warn("THREE.Triangle: .closestPointToPoint() target is now required"),b=new p);var c=this.a,d=this.b,e=this.c;rd.subVectors(d,c);sd.subVectors(e, +c);$g.subVectors(a,c);var f=rd.dot($g),g=sd.dot($g);if(0>=f&&0>=g)return b.copy(c);ah.subVectors(a,d);var h=rd.dot(ah),l=sd.dot(ah);if(0<=h&&l<=h)return b.copy(d);var m=f*l-h*g;if(0>=m&&0<=f&&0>=h)return d=f/(f-h),b.copy(c).addScaledVector(rd,d);bh.subVectors(a,e);a=rd.dot(bh);var k=sd.dot(bh);if(0<=k&&a<=k)return b.copy(e);f=a*g-f*k;if(0>=f&&0<=g&&0>=k)return m=g/(g-k),b.copy(c).addScaledVector(sd,m);g=h*k-a*l;if(0>=g&&0<=l-h&&0<=a-k)return Ai.subVectors(e,d),m=(l-h)/(l-h+(a-k)),b.copy(d).addScaledVector(Ai, +m);e=1/(g+f+m);d=f*e;m*=e;return b.copy(c).addScaledVector(rd,d).addScaledVector(sd,m)},equals:function(a){return a.a.equals(this.a)&&a.b.equals(this.b)&&a.c.equals(this.c)}});var Bi={aliceblue:15792383,antiquewhite:16444375,aqua:65535,aquamarine:8388564,azure:15794175,beige:16119260,bisque:16770244,black:0,blanchedalmond:16772045,blue:255,blueviolet:9055202,brown:10824234,burlywood:14596231,cadetblue:6266528,chartreuse:8388352,chocolate:13789470,coral:16744272,cornflowerblue:6591981,cornsilk:16775388, +crimson:14423100,cyan:65535,darkblue:139,darkcyan:35723,darkgoldenrod:12092939,darkgray:11119017,darkgreen:25600,darkgrey:11119017,darkkhaki:12433259,darkmagenta:9109643,darkolivegreen:5597999,darkorange:16747520,darkorchid:10040012,darkred:9109504,darksalmon:15308410,darkseagreen:9419919,darkslateblue:4734347,darkslategray:3100495,darkslategrey:3100495,darkturquoise:52945,darkviolet:9699539,deeppink:16716947,deepskyblue:49151,dimgray:6908265,dimgrey:6908265,dodgerblue:2003199,firebrick:11674146, +floralwhite:16775920,forestgreen:2263842,fuchsia:16711935,gainsboro:14474460,ghostwhite:16316671,gold:16766720,goldenrod:14329120,gray:8421504,green:32768,greenyellow:11403055,grey:8421504,honeydew:15794160,hotpink:16738740,indianred:13458524,indigo:4915330,ivory:16777200,khaki:15787660,lavender:15132410,lavenderblush:16773365,lawngreen:8190976,lemonchiffon:16775885,lightblue:11393254,lightcoral:15761536,lightcyan:14745599,lightgoldenrodyellow:16448210,lightgray:13882323,lightgreen:9498256,lightgrey:13882323, +lightpink:16758465,lightsalmon:16752762,lightseagreen:2142890,lightskyblue:8900346,lightslategray:7833753,lightslategrey:7833753,lightsteelblue:11584734,lightyellow:16777184,lime:65280,limegreen:3329330,linen:16445670,magenta:16711935,maroon:8388608,mediumaquamarine:6737322,mediumblue:205,mediumorchid:12211667,mediumpurple:9662683,mediumseagreen:3978097,mediumslateblue:8087790,mediumspringgreen:64154,mediumturquoise:4772300,mediumvioletred:13047173,midnightblue:1644912,mintcream:16121850,mistyrose:16770273, +moccasin:16770229,navajowhite:16768685,navy:128,oldlace:16643558,olive:8421376,olivedrab:7048739,orange:16753920,orangered:16729344,orchid:14315734,palegoldenrod:15657130,palegreen:10025880,paleturquoise:11529966,palevioletred:14381203,papayawhip:16773077,peachpuff:16767673,peru:13468991,pink:16761035,plum:14524637,powderblue:11591910,purple:8388736,rebeccapurple:6697881,red:16711680,rosybrown:12357519,royalblue:4286945,saddlebrown:9127187,salmon:16416882,sandybrown:16032864,seagreen:3050327,seashell:16774638, +sienna:10506797,silver:12632256,skyblue:8900331,slateblue:6970061,slategray:7372944,slategrey:7372944,snow:16775930,springgreen:65407,steelblue:4620980,tan:13808780,teal:32896,thistle:14204888,tomato:16737095,turquoise:4251856,violet:15631086,wheat:16113331,white:16777215,whitesmoke:16119285,yellow:16776960,yellowgreen:10145074},Fa={h:0,s:0,l:0},Ff={h:0,s:0,l:0};Object.assign(D.prototype,{isColor:!0,r:1,g:1,b:1,set:function(a){a&&a.isColor?this.copy(a):"number"===typeof a?this.setHex(a):"string"=== +typeof a&&this.setStyle(a);return this},setScalar:function(a){this.b=this.g=this.r=a;return this},setHex:function(a){a=Math.floor(a);this.r=(a>>16&255)/255;this.g=(a>>8&255)/255;this.b=(a&255)/255;return this},setRGB:function(a,b,c){this.r=a;this.g=b;this.b=c;return this},setHSL:function(a,b,c){a=O.euclideanModulo(a,1);b=O.clamp(b,0,1);c=O.clamp(c,0,1);0===b?this.r=this.g=this.b=c:(b=.5>=c?c*(1+b):c+b-c*b,c=2*c-b,this.r=Zf(c,b,a+1/3),this.g=Zf(c,b,a),this.b=Zf(c,b,a-1/3));return this},setStyle:function(a){function b(b){void 0!== +b&&1>parseFloat(b)&&console.warn("THREE.Color: Alpha component of "+a+" will be ignored.")}var c;if(c=/^((?:rgb|hsl)a?)\(\s*([^\)]*)\)/.exec(a)){var d=c[2];switch(c[1]){case "rgb":case "rgba":if(c=/^(\d+)\s*,\s*(\d+)\s*,\s*(\d+)\s*(,\s*([0-9]*\.?[0-9]+)\s*)?$/.exec(d))return this.r=Math.min(255,parseInt(c[1],10))/255,this.g=Math.min(255,parseInt(c[2],10))/255,this.b=Math.min(255,parseInt(c[3],10))/255,b(c[5]),this;if(c=/^(\d+)%\s*,\s*(\d+)%\s*,\s*(\d+)%\s*(,\s*([0-9]*\.?[0-9]+)\s*)?$/.exec(d))return this.r= +Math.min(100,parseInt(c[1],10))/100,this.g=Math.min(100,parseInt(c[2],10))/100,this.b=Math.min(100,parseInt(c[3],10))/100,b(c[5]),this;break;case "hsl":case "hsla":if(c=/^([0-9]*\.?[0-9]+)\s*,\s*(\d+)%\s*,\s*(\d+)%\s*(,\s*([0-9]*\.?[0-9]+)\s*)?$/.exec(d)){d=parseFloat(c[1])/360;var e=parseInt(c[2],10)/100,f=parseInt(c[3],10)/100;b(c[5]);return this.setHSL(d,e,f)}}}else if(c=/^#([A-Fa-f0-9]+)$/.exec(a)){c=c[1];d=c.length;if(3===d)return this.r=parseInt(c.charAt(0)+c.charAt(0),16)/255,this.g=parseInt(c.charAt(1)+ +c.charAt(1),16)/255,this.b=parseInt(c.charAt(2)+c.charAt(2),16)/255,this;if(6===d)return this.r=parseInt(c.charAt(0)+c.charAt(1),16)/255,this.g=parseInt(c.charAt(2)+c.charAt(3),16)/255,this.b=parseInt(c.charAt(4)+c.charAt(5),16)/255,this}return a&&0=h?l/(e+f):l/(2-e-f);switch(e){case b:g=(c-d)/l+(cthis.opacity&&(d.opacity=this.opacity);!0===this.transparent&&(d.transparent=this.transparent);d.depthFunc=this.depthFunc;d.depthTest=this.depthTest;d.depthWrite=this.depthWrite;d.stencilWrite=this.stencilWrite;d.stencilWriteMask=this.stencilWriteMask; +d.stencilFunc=this.stencilFunc;d.stencilRef=this.stencilRef;d.stencilFuncMask=this.stencilFuncMask;d.stencilFail=this.stencilFail;d.stencilZFail=this.stencilZFail;d.stencilZPass=this.stencilZPass;this.rotation&&0!==this.rotation&&(d.rotation=this.rotation);!0===this.polygonOffset&&(d.polygonOffset=!0);0!==this.polygonOffsetFactor&&(d.polygonOffsetFactor=this.polygonOffsetFactor);0!==this.polygonOffsetUnits&&(d.polygonOffsetUnits=this.polygonOffsetUnits);this.linewidth&&1!==this.linewidth&&(d.linewidth= +this.linewidth);void 0!==this.dashSize&&(d.dashSize=this.dashSize);void 0!==this.gapSize&&(d.gapSize=this.gapSize);void 0!==this.scale&&(d.scale=this.scale);!0===this.dithering&&(d.dithering=!0);0g;g++)if(d[g]===d[(g+1)%3]){a.push(f);break}for(f=a.length-1;0<=f;f--)for(d=a[f],this.faces.splice(d,1),c=0,e= +this.faceVertexUvs.length;c\n\t#include \n}", +fragmentShader:"uniform sampler2D tEquirect;\nvarying vec3 vWorldDirection;\n#include \nvoid main() {\n\tvec3 direction = normalize( vWorldDirection );\n\tvec2 sampleUV = equirectUv( direction );\n\tgl_FragColor = texture2D( tEquirect, sampleUV );\n}",side:1,blending:0});d.uniforms.tEquirect.value=b;b=new ea(new Gd(5,5,5),d);c.add(b);(new Fc(1,10,this)).update(a,c);b.geometry.dispose();b.material.dispose();return this};$b.prototype=Object.create(W.prototype);$b.prototype.constructor=$b;$b.prototype.isDataTexture= +!0;var ud=new eb,Hf=new p;Object.assign(Gc.prototype,{set:function(a,b,c,d,e,f){var g=this.planes;g[0].copy(a);g[1].copy(b);g[2].copy(c);g[3].copy(d);g[4].copy(e);g[5].copy(f);return this},clone:function(){return(new this.constructor).copy(this)},copy:function(a){for(var b=this.planes,c=0;6>c;c++)b[c].copy(a.planes[c]);return this},setFromProjectionMatrix:function(a){var b=this.planes,c=a.elements;a=c[0];var d=c[1],e=c[2],f=c[3],g=c[4],h=c[5],l=c[6],m=c[7],k=c[8],n=c[9],p=c[10],r=c[11],q=c[12],u= +c[13],v=c[14];c=c[15];b[0].setComponents(f-a,m-g,r-k,c-q).normalize();b[1].setComponents(f+a,m+g,r+k,c+q).normalize();b[2].setComponents(f+d,m+h,r+n,c+u).normalize();b[3].setComponents(f-d,m-h,r-n,c-u).normalize();b[4].setComponents(f-e,m-l,r-p,c-v).normalize();b[5].setComponents(f+e,m+l,r+p,c+v).normalize();return this},intersectsObject:function(a){var b=a.geometry;null===b.boundingSphere&&b.computeBoundingSphere();ud.copy(b.boundingSphere).applyMatrix4(a.matrixWorld);return this.intersectsSphere(ud)}, +intersectsSprite:function(a){ud.center.set(0,0,0);ud.radius=.7071067811865476;ud.applyMatrix4(a.matrixWorld);return this.intersectsSphere(ud)},intersectsSphere:function(a){var b=this.planes,c=a.center;a=-a.radius;for(var d=0;6>d;d++)if(b[d].distanceToPoint(c)c;c++){var d=b[c];Hf.x=0d.distanceToPoint(Hf))return!1}return!0}, +containsPoint:function(a){for(var b=this.planes,c=0;6>c;c++)if(0>b[c].distanceToPoint(a))return!1;return!0}});var A={common:{diffuse:{value:new D(15658734)},opacity:{value:1},map:{value:null},uvTransform:{value:new ya},uv2Transform:{value:new ya},alphaMap:{value:null}},specularmap:{specularMap:{value:null}},envmap:{envMap:{value:null},flipEnvMap:{value:-1},reflectivity:{value:1},refractionRatio:{value:.98},maxMipLevel:{value:0}},aomap:{aoMap:{value:null},aoMapIntensity:{value:1}},lightmap:{lightMap:{value:null}, +lightMapIntensity:{value:1}},emissivemap:{emissiveMap:{value:null}},bumpmap:{bumpMap:{value:null},bumpScale:{value:1}},normalmap:{normalMap:{value:null},normalScale:{value:new v(1,1)}},displacementmap:{displacementMap:{value:null},displacementScale:{value:1},displacementBias:{value:0}},roughnessmap:{roughnessMap:{value:null}},metalnessmap:{metalnessMap:{value:null}},gradientmap:{gradientMap:{value:null}},fog:{fogDensity:{value:2.5E-4},fogNear:{value:1},fogFar:{value:2E3},fogColor:{value:new D(16777215)}}, +lights:{ambientLightColor:{value:[]},lightProbe:{value:[]},directionalLights:{value:[],properties:{direction:{},color:{}}},directionalLightShadows:{value:[],properties:{shadowBias:{},shadowRadius:{},shadowMapSize:{}}},directionalShadowMap:{value:[]},directionalShadowMatrix:{value:[]},spotLights:{value:[],properties:{color:{},position:{},direction:{},distance:{},coneCos:{},penumbraCos:{},decay:{}}},spotLightShadows:{value:[],properties:{shadowBias:{},shadowRadius:{},shadowMapSize:{}}},spotShadowMap:{value:[]}, +spotShadowMatrix:{value:[]},pointLights:{value:[],properties:{color:{},position:{},decay:{},distance:{}}},pointLightShadows:{value:[],properties:{shadowBias:{},shadowRadius:{},shadowMapSize:{},shadowCameraNear:{},shadowCameraFar:{}}},pointShadowMap:{value:[]},pointShadowMatrix:{value:[]},hemisphereLights:{value:[],properties:{direction:{},skyColor:{},groundColor:{}}},rectAreaLights:{value:[],properties:{color:{},position:{},width:{},height:{}}}},points:{diffuse:{value:new D(15658734)},opacity:{value:1}, +size:{value:1},scale:{value:1},map:{value:null},alphaMap:{value:null},uvTransform:{value:new ya}},sprite:{diffuse:{value:new D(15658734)},opacity:{value:1},center:{value:new v(.5,.5)},rotation:{value:0},map:{value:null},alphaMap:{value:null},uvTransform:{value:new ya}}};Fd.prototype=Object.create(L.prototype);Fd.prototype.constructor=Fd;ac.prototype=Object.create(F.prototype);ac.prototype.constructor=ac;var M={alphamap_fragment:"#ifdef USE_ALPHAMAP\n\tdiffuseColor.a *= texture2D( alphaMap, vUv ).g;\n#endif", +alphamap_pars_fragment:"#ifdef USE_ALPHAMAP\n\tuniform sampler2D alphaMap;\n#endif",alphatest_fragment:"#ifdef ALPHATEST\n\tif ( diffuseColor.a < ALPHATEST ) discard;\n#endif",aomap_fragment:"#ifdef USE_AOMAP\n\tfloat ambientOcclusion = ( texture2D( aoMap, vUv2 ).r - 1.0 ) * aoMapIntensity + 1.0;\n\treflectedLight.indirectDiffuse *= ambientOcclusion;\n\t#if defined( USE_ENVMAP ) && defined( STANDARD )\n\t\tfloat dotNV = saturate( dot( geometry.normal, geometry.viewDir ) );\n\t\treflectedLight.indirectSpecular *= computeSpecularOcclusion( dotNV, ambientOcclusion, material.specularRoughness );\n\t#endif\n#endif", +aomap_pars_fragment:"#ifdef USE_AOMAP\n\tuniform sampler2D aoMap;\n\tuniform float aoMapIntensity;\n#endif",begin_vertex:"vec3 transformed = vec3( position );",beginnormal_vertex:"vec3 objectNormal = vec3( normal );\n#ifdef USE_TANGENT\n\tvec3 objectTangent = vec3( tangent.xyz );\n#endif",bsdfs:"vec2 integrateSpecularBRDF( const in float dotNV, const in float roughness ) {\n\tconst vec4 c0 = vec4( - 1, - 0.0275, - 0.572, 0.022 );\n\tconst vec4 c1 = vec4( 1, 0.0425, 1.04, - 0.04 );\n\tvec4 r = roughness * c0 + c1;\n\tfloat a004 = min( r.x * r.x, exp2( - 9.28 * dotNV ) ) * r.x + r.y;\n\treturn vec2( -1.04, 1.04 ) * a004 + r.zw;\n}\nfloat punctualLightIntensityToIrradianceFactor( const in float lightDistance, const in float cutoffDistance, const in float decayExponent ) {\n#if defined ( PHYSICALLY_CORRECT_LIGHTS )\n\tfloat distanceFalloff = 1.0 / max( pow( lightDistance, decayExponent ), 0.01 );\n\tif( cutoffDistance > 0.0 ) {\n\t\tdistanceFalloff *= pow2( saturate( 1.0 - pow4( lightDistance / cutoffDistance ) ) );\n\t}\n\treturn distanceFalloff;\n#else\n\tif( cutoffDistance > 0.0 && decayExponent > 0.0 ) {\n\t\treturn pow( saturate( -lightDistance / cutoffDistance + 1.0 ), decayExponent );\n\t}\n\treturn 1.0;\n#endif\n}\nvec3 BRDF_Diffuse_Lambert( const in vec3 diffuseColor ) {\n\treturn RECIPROCAL_PI * diffuseColor;\n}\nvec3 F_Schlick( const in vec3 specularColor, const in float dotLH ) {\n\tfloat fresnel = exp2( ( -5.55473 * dotLH - 6.98316 ) * dotLH );\n\treturn ( 1.0 - specularColor ) * fresnel + specularColor;\n}\nvec3 F_Schlick_RoughnessDependent( const in vec3 F0, const in float dotNV, const in float roughness ) {\n\tfloat fresnel = exp2( ( -5.55473 * dotNV - 6.98316 ) * dotNV );\n\tvec3 Fr = max( vec3( 1.0 - roughness ), F0 ) - F0;\n\treturn Fr * fresnel + F0;\n}\nfloat G_GGX_Smith( const in float alpha, const in float dotNL, const in float dotNV ) {\n\tfloat a2 = pow2( alpha );\n\tfloat gl = dotNL + sqrt( a2 + ( 1.0 - a2 ) * pow2( dotNL ) );\n\tfloat gv = dotNV + sqrt( a2 + ( 1.0 - a2 ) * pow2( dotNV ) );\n\treturn 1.0 / ( gl * gv );\n}\nfloat G_GGX_SmithCorrelated( const in float alpha, const in float dotNL, const in float dotNV ) {\n\tfloat a2 = pow2( alpha );\n\tfloat gv = dotNL * sqrt( a2 + ( 1.0 - a2 ) * pow2( dotNV ) );\n\tfloat gl = dotNV * sqrt( a2 + ( 1.0 - a2 ) * pow2( dotNL ) );\n\treturn 0.5 / max( gv + gl, EPSILON );\n}\nfloat D_GGX( const in float alpha, const in float dotNH ) {\n\tfloat a2 = pow2( alpha );\n\tfloat denom = pow2( dotNH ) * ( a2 - 1.0 ) + 1.0;\n\treturn RECIPROCAL_PI * a2 / pow2( denom );\n}\nvec3 BRDF_Specular_GGX( const in IncidentLight incidentLight, const in vec3 viewDir, const in vec3 normal, const in vec3 specularColor, const in float roughness ) {\n\tfloat alpha = pow2( roughness );\n\tvec3 halfDir = normalize( incidentLight.direction + viewDir );\n\tfloat dotNL = saturate( dot( normal, incidentLight.direction ) );\n\tfloat dotNV = saturate( dot( normal, viewDir ) );\n\tfloat dotNH = saturate( dot( normal, halfDir ) );\n\tfloat dotLH = saturate( dot( incidentLight.direction, halfDir ) );\n\tvec3 F = F_Schlick( specularColor, dotLH );\n\tfloat G = G_GGX_SmithCorrelated( alpha, dotNL, dotNV );\n\tfloat D = D_GGX( alpha, dotNH );\n\treturn F * ( G * D );\n}\nvec2 LTC_Uv( const in vec3 N, const in vec3 V, const in float roughness ) {\n\tconst float LUT_SIZE = 64.0;\n\tconst float LUT_SCALE = ( LUT_SIZE - 1.0 ) / LUT_SIZE;\n\tconst float LUT_BIAS = 0.5 / LUT_SIZE;\n\tfloat dotNV = saturate( dot( N, V ) );\n\tvec2 uv = vec2( roughness, sqrt( 1.0 - dotNV ) );\n\tuv = uv * LUT_SCALE + LUT_BIAS;\n\treturn uv;\n}\nfloat LTC_ClippedSphereFormFactor( const in vec3 f ) {\n\tfloat l = length( f );\n\treturn max( ( l * l + f.z ) / ( l + 1.0 ), 0.0 );\n}\nvec3 LTC_EdgeVectorFormFactor( const in vec3 v1, const in vec3 v2 ) {\n\tfloat x = dot( v1, v2 );\n\tfloat y = abs( x );\n\tfloat a = 0.8543985 + ( 0.4965155 + 0.0145206 * y ) * y;\n\tfloat b = 3.4175940 + ( 4.1616724 + y ) * y;\n\tfloat v = a / b;\n\tfloat theta_sintheta = ( x > 0.0 ) ? v : 0.5 * inversesqrt( max( 1.0 - x * x, 1e-7 ) ) - v;\n\treturn cross( v1, v2 ) * theta_sintheta;\n}\nvec3 LTC_Evaluate( const in vec3 N, const in vec3 V, const in vec3 P, const in mat3 mInv, const in vec3 rectCoords[ 4 ] ) {\n\tvec3 v1 = rectCoords[ 1 ] - rectCoords[ 0 ];\n\tvec3 v2 = rectCoords[ 3 ] - rectCoords[ 0 ];\n\tvec3 lightNormal = cross( v1, v2 );\n\tif( dot( lightNormal, P - rectCoords[ 0 ] ) < 0.0 ) return vec3( 0.0 );\n\tvec3 T1, T2;\n\tT1 = normalize( V - N * dot( V, N ) );\n\tT2 = - cross( N, T1 );\n\tmat3 mat = mInv * transposeMat3( mat3( T1, T2, N ) );\n\tvec3 coords[ 4 ];\n\tcoords[ 0 ] = mat * ( rectCoords[ 0 ] - P );\n\tcoords[ 1 ] = mat * ( rectCoords[ 1 ] - P );\n\tcoords[ 2 ] = mat * ( rectCoords[ 2 ] - P );\n\tcoords[ 3 ] = mat * ( rectCoords[ 3 ] - P );\n\tcoords[ 0 ] = normalize( coords[ 0 ] );\n\tcoords[ 1 ] = normalize( coords[ 1 ] );\n\tcoords[ 2 ] = normalize( coords[ 2 ] );\n\tcoords[ 3 ] = normalize( coords[ 3 ] );\n\tvec3 vectorFormFactor = vec3( 0.0 );\n\tvectorFormFactor += LTC_EdgeVectorFormFactor( coords[ 0 ], coords[ 1 ] );\n\tvectorFormFactor += LTC_EdgeVectorFormFactor( coords[ 1 ], coords[ 2 ] );\n\tvectorFormFactor += LTC_EdgeVectorFormFactor( coords[ 2 ], coords[ 3 ] );\n\tvectorFormFactor += LTC_EdgeVectorFormFactor( coords[ 3 ], coords[ 0 ] );\n\tfloat result = LTC_ClippedSphereFormFactor( vectorFormFactor );\n\treturn vec3( result );\n}\nvec3 BRDF_Specular_GGX_Environment( const in vec3 viewDir, const in vec3 normal, const in vec3 specularColor, const in float roughness ) {\n\tfloat dotNV = saturate( dot( normal, viewDir ) );\n\tvec2 brdf = integrateSpecularBRDF( dotNV, roughness );\n\treturn specularColor * brdf.x + brdf.y;\n}\nvoid BRDF_Specular_Multiscattering_Environment( const in GeometricContext geometry, const in vec3 specularColor, const in float roughness, inout vec3 singleScatter, inout vec3 multiScatter ) {\n\tfloat dotNV = saturate( dot( geometry.normal, geometry.viewDir ) );\n\tvec3 F = F_Schlick_RoughnessDependent( specularColor, dotNV, roughness );\n\tvec2 brdf = integrateSpecularBRDF( dotNV, roughness );\n\tvec3 FssEss = F * brdf.x + brdf.y;\n\tfloat Ess = brdf.x + brdf.y;\n\tfloat Ems = 1.0 - Ess;\n\tvec3 Favg = specularColor + ( 1.0 - specularColor ) * 0.047619;\tvec3 Fms = FssEss * Favg / ( 1.0 - Ems * Favg );\n\tsingleScatter += FssEss;\n\tmultiScatter += Fms * Ems;\n}\nfloat G_BlinnPhong_Implicit( ) {\n\treturn 0.25;\n}\nfloat D_BlinnPhong( const in float shininess, const in float dotNH ) {\n\treturn RECIPROCAL_PI * ( shininess * 0.5 + 1.0 ) * pow( dotNH, shininess );\n}\nvec3 BRDF_Specular_BlinnPhong( const in IncidentLight incidentLight, const in GeometricContext geometry, const in vec3 specularColor, const in float shininess ) {\n\tvec3 halfDir = normalize( incidentLight.direction + geometry.viewDir );\n\tfloat dotNH = saturate( dot( geometry.normal, halfDir ) );\n\tfloat dotLH = saturate( dot( incidentLight.direction, halfDir ) );\n\tvec3 F = F_Schlick( specularColor, dotLH );\n\tfloat G = G_BlinnPhong_Implicit( );\n\tfloat D = D_BlinnPhong( shininess, dotNH );\n\treturn F * ( G * D );\n}\nfloat GGXRoughnessToBlinnExponent( const in float ggxRoughness ) {\n\treturn ( 2.0 / pow2( ggxRoughness + 0.0001 ) - 2.0 );\n}\nfloat BlinnExponentToGGXRoughness( const in float blinnExponent ) {\n\treturn sqrt( 2.0 / ( blinnExponent + 2.0 ) );\n}\n#if defined( USE_SHEEN )\nfloat D_Charlie(float roughness, float NoH) {\n\tfloat invAlpha = 1.0 / roughness;\n\tfloat cos2h = NoH * NoH;\n\tfloat sin2h = max(1.0 - cos2h, 0.0078125);\treturn (2.0 + invAlpha) * pow(sin2h, invAlpha * 0.5) / (2.0 * PI);\n}\nfloat V_Neubelt(float NoV, float NoL) {\n\treturn saturate(1.0 / (4.0 * (NoL + NoV - NoL * NoV)));\n}\nvec3 BRDF_Specular_Sheen( const in float roughness, const in vec3 L, const in GeometricContext geometry, vec3 specularColor ) {\n\tvec3 N = geometry.normal;\n\tvec3 V = geometry.viewDir;\n\tvec3 H = normalize( V + L );\n\tfloat dotNH = saturate( dot( N, H ) );\n\treturn specularColor * D_Charlie( roughness, dotNH ) * V_Neubelt( dot(N, V), dot(N, L) );\n}\n#endif", +bumpmap_pars_fragment:"#ifdef USE_BUMPMAP\n\tuniform sampler2D bumpMap;\n\tuniform float bumpScale;\n\tvec2 dHdxy_fwd() {\n\t\tvec2 dSTdx = dFdx( vUv );\n\t\tvec2 dSTdy = dFdy( vUv );\n\t\tfloat Hll = bumpScale * texture2D( bumpMap, vUv ).x;\n\t\tfloat dBx = bumpScale * texture2D( bumpMap, vUv + dSTdx ).x - Hll;\n\t\tfloat dBy = bumpScale * texture2D( bumpMap, vUv + dSTdy ).x - Hll;\n\t\treturn vec2( dBx, dBy );\n\t}\n\tvec3 perturbNormalArb( vec3 surf_pos, vec3 surf_norm, vec2 dHdxy ) {\n\t\tvec3 vSigmaX = vec3( dFdx( surf_pos.x ), dFdx( surf_pos.y ), dFdx( surf_pos.z ) );\n\t\tvec3 vSigmaY = vec3( dFdy( surf_pos.x ), dFdy( surf_pos.y ), dFdy( surf_pos.z ) );\n\t\tvec3 vN = surf_norm;\n\t\tvec3 R1 = cross( vSigmaY, vN );\n\t\tvec3 R2 = cross( vN, vSigmaX );\n\t\tfloat fDet = dot( vSigmaX, R1 );\n\t\tfDet *= ( float( gl_FrontFacing ) * 2.0 - 1.0 );\n\t\tvec3 vGrad = sign( fDet ) * ( dHdxy.x * R1 + dHdxy.y * R2 );\n\t\treturn normalize( abs( fDet ) * surf_norm - vGrad );\n\t}\n#endif", +clipping_planes_fragment:"#if NUM_CLIPPING_PLANES > 0\n\tvec4 plane;\n\t#pragma unroll_loop_start\n\tfor ( int i = 0; i < UNION_CLIPPING_PLANES; i ++ ) {\n\t\tplane = clippingPlanes[ i ];\n\t\tif ( dot( vClipPosition, plane.xyz ) > plane.w ) discard;\n\t}\n\t#pragma unroll_loop_end\n\t#if UNION_CLIPPING_PLANES < NUM_CLIPPING_PLANES\n\t\tbool clipped = true;\n\t\t#pragma unroll_loop_start\n\t\tfor ( int i = UNION_CLIPPING_PLANES; i < NUM_CLIPPING_PLANES; i ++ ) {\n\t\t\tplane = clippingPlanes[ i ];\n\t\t\tclipped = ( dot( vClipPosition, plane.xyz ) > plane.w ) && clipped;\n\t\t}\n\t\t#pragma unroll_loop_end\n\t\tif ( clipped ) discard;\n\t#endif\n#endif", +clipping_planes_pars_fragment:"#if NUM_CLIPPING_PLANES > 0\n\tvarying vec3 vClipPosition;\n\tuniform vec4 clippingPlanes[ NUM_CLIPPING_PLANES ];\n#endif",clipping_planes_pars_vertex:"#if NUM_CLIPPING_PLANES > 0\n\tvarying vec3 vClipPosition;\n#endif",clipping_planes_vertex:"#if NUM_CLIPPING_PLANES > 0\n\tvClipPosition = - mvPosition.xyz;\n#endif",color_fragment:"#ifdef USE_COLOR\n\tdiffuseColor.rgb *= vColor;\n#endif",color_pars_fragment:"#ifdef USE_COLOR\n\tvarying vec3 vColor;\n#endif",color_pars_vertex:"#ifdef USE_COLOR\n\tvarying vec3 vColor;\n#endif", +color_vertex:"#ifdef USE_COLOR\n\tvColor.xyz = color.xyz;\n#endif",common:"#define PI 3.14159265359\n#define PI2 6.28318530718\n#define PI_HALF 1.5707963267949\n#define RECIPROCAL_PI 0.31830988618\n#define RECIPROCAL_PI2 0.15915494\n#define LOG2 1.442695\n#define EPSILON 1e-6\n#ifndef saturate\n#define saturate(a) clamp( a, 0.0, 1.0 )\n#endif\n#define whiteComplement(a) ( 1.0 - saturate( a ) )\nfloat pow2( const in float x ) { return x*x; }\nfloat pow3( const in float x ) { return x*x*x; }\nfloat pow4( const in float x ) { float x2 = x*x; return x2*x2; }\nfloat average( const in vec3 color ) { return dot( color, vec3( 0.3333 ) ); }\nhighp float rand( const in vec2 uv ) {\n\tconst highp float a = 12.9898, b = 78.233, c = 43758.5453;\n\thighp float dt = dot( uv.xy, vec2( a,b ) ), sn = mod( dt, PI );\n\treturn fract(sin(sn) * c);\n}\n#ifdef HIGH_PRECISION\n\tfloat precisionSafeLength( vec3 v ) { return length( v ); }\n#else\n\tfloat max3( vec3 v ) { return max( max( v.x, v.y ), v.z ); }\n\tfloat precisionSafeLength( vec3 v ) {\n\t\tfloat maxComponent = max3( abs( v ) );\n\t\treturn length( v / maxComponent ) * maxComponent;\n\t}\n#endif\nstruct IncidentLight {\n\tvec3 color;\n\tvec3 direction;\n\tbool visible;\n};\nstruct ReflectedLight {\n\tvec3 directDiffuse;\n\tvec3 directSpecular;\n\tvec3 indirectDiffuse;\n\tvec3 indirectSpecular;\n};\nstruct GeometricContext {\n\tvec3 position;\n\tvec3 normal;\n\tvec3 viewDir;\n#ifdef CLEARCOAT\n\tvec3 clearcoatNormal;\n#endif\n};\nvec3 transformDirection( in vec3 dir, in mat4 matrix ) {\n\treturn normalize( ( matrix * vec4( dir, 0.0 ) ).xyz );\n}\nvec3 inverseTransformDirection( in vec3 dir, in mat4 matrix ) {\n\treturn normalize( ( vec4( dir, 0.0 ) * matrix ).xyz );\n}\nvec3 projectOnPlane(in vec3 point, in vec3 pointOnPlane, in vec3 planeNormal ) {\n\tfloat distance = dot( planeNormal, point - pointOnPlane );\n\treturn - distance * planeNormal + point;\n}\nfloat sideOfPlane( in vec3 point, in vec3 pointOnPlane, in vec3 planeNormal ) {\n\treturn sign( dot( point - pointOnPlane, planeNormal ) );\n}\nvec3 linePlaneIntersect( in vec3 pointOnLine, in vec3 lineDirection, in vec3 pointOnPlane, in vec3 planeNormal ) {\n\treturn lineDirection * ( dot( planeNormal, pointOnPlane - pointOnLine ) / dot( planeNormal, lineDirection ) ) + pointOnLine;\n}\nmat3 transposeMat3( const in mat3 m ) {\n\tmat3 tmp;\n\ttmp[ 0 ] = vec3( m[ 0 ].x, m[ 1 ].x, m[ 2 ].x );\n\ttmp[ 1 ] = vec3( m[ 0 ].y, m[ 1 ].y, m[ 2 ].y );\n\ttmp[ 2 ] = vec3( m[ 0 ].z, m[ 1 ].z, m[ 2 ].z );\n\treturn tmp;\n}\nfloat linearToRelativeLuminance( const in vec3 color ) {\n\tvec3 weights = vec3( 0.2126, 0.7152, 0.0722 );\n\treturn dot( weights, color.rgb );\n}\nbool isPerspectiveMatrix( mat4 m ) {\n return m[ 2 ][ 3 ] == - 1.0;\n}\nvec2 equirectUv( in vec3 dir ) {\n\tfloat u = atan( dir.z, dir.x ) * RECIPROCAL_PI2 + 0.5;\n\tfloat v = asin( clamp( dir.y, - 1.0, 1.0 ) ) * RECIPROCAL_PI + 0.5;\n\treturn vec2( u, v );\n}", +cube_uv_reflection_fragment:"#ifdef ENVMAP_TYPE_CUBE_UV\n#define cubeUV_maxMipLevel 8.0\n#define cubeUV_minMipLevel 4.0\n#define cubeUV_maxTileSize 256.0\n#define cubeUV_minTileSize 16.0\nfloat getFace(vec3 direction) {\n vec3 absDirection = abs(direction);\n float face = -1.0;\n if (absDirection.x > absDirection.z) {\n if (absDirection.x > absDirection.y)\n face = direction.x > 0.0 ? 0.0 : 3.0;\n else\n face = direction.y > 0.0 ? 1.0 : 4.0;\n } else {\n if (absDirection.z > absDirection.y)\n face = direction.z > 0.0 ? 2.0 : 5.0;\n else\n face = direction.y > 0.0 ? 1.0 : 4.0;\n }\n return face;\n}\nvec2 getUV(vec3 direction, float face) {\n vec2 uv;\n if (face == 0.0) {\n uv = vec2(direction.z, direction.y) / abs(direction.x); } else if (face == 1.0) {\n uv = vec2(-direction.x, -direction.z) / abs(direction.y); } else if (face == 2.0) {\n uv = vec2(-direction.x, direction.y) / abs(direction.z); } else if (face == 3.0) {\n uv = vec2(-direction.z, direction.y) / abs(direction.x); } else if (face == 4.0) {\n uv = vec2(-direction.x, direction.z) / abs(direction.y); } else {\n uv = vec2(direction.x, direction.y) / abs(direction.z); }\n return 0.5 * (uv + 1.0);\n}\nvec3 bilinearCubeUV(sampler2D envMap, vec3 direction, float mipInt) {\n float face = getFace(direction);\n float filterInt = max(cubeUV_minMipLevel - mipInt, 0.0);\n mipInt = max(mipInt, cubeUV_minMipLevel);\n float faceSize = exp2(mipInt);\n float texelSize = 1.0 / (3.0 * cubeUV_maxTileSize);\n vec2 uv = getUV(direction, face) * (faceSize - 1.0);\n vec2 f = fract(uv);\n uv += 0.5 - f;\n if (face > 2.0) {\n uv.y += faceSize;\n face -= 3.0;\n }\n uv.x += face * faceSize;\n if(mipInt < cubeUV_maxMipLevel){\n uv.y += 2.0 * cubeUV_maxTileSize;\n }\n uv.y += filterInt * 2.0 * cubeUV_minTileSize;\n uv.x += 3.0 * max(0.0, cubeUV_maxTileSize - 2.0 * faceSize);\n uv *= texelSize;\n vec3 tl = envMapTexelToLinear(texture2D(envMap, uv)).rgb;\n uv.x += texelSize;\n vec3 tr = envMapTexelToLinear(texture2D(envMap, uv)).rgb;\n uv.y += texelSize;\n vec3 br = envMapTexelToLinear(texture2D(envMap, uv)).rgb;\n uv.x -= texelSize;\n vec3 bl = envMapTexelToLinear(texture2D(envMap, uv)).rgb;\n vec3 tm = mix(tl, tr, f.x);\n vec3 bm = mix(bl, br, f.x);\n return mix(tm, bm, f.y);\n}\n#define r0 1.0\n#define v0 0.339\n#define m0 -2.0\n#define r1 0.8\n#define v1 0.276\n#define m1 -1.0\n#define r4 0.4\n#define v4 0.046\n#define m4 2.0\n#define r5 0.305\n#define v5 0.016\n#define m5 3.0\n#define r6 0.21\n#define v6 0.0038\n#define m6 4.0\nfloat roughnessToMip(float roughness) {\n float mip = 0.0;\n if (roughness >= r1) {\n mip = (r0 - roughness) * (m1 - m0) / (r0 - r1) + m0;\n } else if (roughness >= r4) {\n mip = (r1 - roughness) * (m4 - m1) / (r1 - r4) + m1;\n } else if (roughness >= r5) {\n mip = (r4 - roughness) * (m5 - m4) / (r4 - r5) + m4;\n } else if (roughness >= r6) {\n mip = (r5 - roughness) * (m6 - m5) / (r5 - r6) + m5;\n } else {\n mip = -2.0 * log2(1.16 * roughness); }\n return mip;\n}\nvec4 textureCubeUV(sampler2D envMap, vec3 sampleDir, float roughness) {\n float mip = clamp(roughnessToMip(roughness), m0, cubeUV_maxMipLevel);\n float mipF = fract(mip);\n float mipInt = floor(mip);\n vec3 color0 = bilinearCubeUV(envMap, sampleDir, mipInt);\n if (mipF == 0.0) {\n return vec4(color0, 1.0);\n } else {\n vec3 color1 = bilinearCubeUV(envMap, sampleDir, mipInt + 1.0);\n return vec4(mix(color0, color1, mipF), 1.0);\n }\n}\n#endif", +defaultnormal_vertex:"vec3 transformedNormal = objectNormal;\n#ifdef USE_INSTANCING\n\tmat3 m = mat3( instanceMatrix );\n\ttransformedNormal /= vec3( dot( m[ 0 ], m[ 0 ] ), dot( m[ 1 ], m[ 1 ] ), dot( m[ 2 ], m[ 2 ] ) );\n\ttransformedNormal = m * transformedNormal;\n#endif\ntransformedNormal = normalMatrix * transformedNormal;\n#ifdef FLIP_SIDED\n\ttransformedNormal = - transformedNormal;\n#endif\n#ifdef USE_TANGENT\n\tvec3 transformedTangent = ( modelViewMatrix * vec4( objectTangent, 0.0 ) ).xyz;\n\t#ifdef FLIP_SIDED\n\t\ttransformedTangent = - transformedTangent;\n\t#endif\n#endif", +displacementmap_pars_vertex:"#ifdef USE_DISPLACEMENTMAP\n\tuniform sampler2D displacementMap;\n\tuniform float displacementScale;\n\tuniform float displacementBias;\n#endif",displacementmap_vertex:"#ifdef USE_DISPLACEMENTMAP\n\ttransformed += normalize( objectNormal ) * ( texture2D( displacementMap, vUv ).x * displacementScale + displacementBias );\n#endif",emissivemap_fragment:"#ifdef USE_EMISSIVEMAP\n\tvec4 emissiveColor = texture2D( emissiveMap, vUv );\n\temissiveColor.rgb = emissiveMapTexelToLinear( emissiveColor ).rgb;\n\ttotalEmissiveRadiance *= emissiveColor.rgb;\n#endif", +emissivemap_pars_fragment:"#ifdef USE_EMISSIVEMAP\n\tuniform sampler2D emissiveMap;\n#endif",encodings_fragment:"gl_FragColor = linearToOutputTexel( gl_FragColor );",encodings_pars_fragment:"\nvec4 LinearToLinear( in vec4 value ) {\n\treturn value;\n}\nvec4 GammaToLinear( in vec4 value, in float gammaFactor ) {\n\treturn vec4( pow( value.rgb, vec3( gammaFactor ) ), value.a );\n}\nvec4 LinearToGamma( in vec4 value, in float gammaFactor ) {\n\treturn vec4( pow( value.rgb, vec3( 1.0 / gammaFactor ) ), value.a );\n}\nvec4 sRGBToLinear( in vec4 value ) {\n\treturn vec4( mix( pow( value.rgb * 0.9478672986 + vec3( 0.0521327014 ), vec3( 2.4 ) ), value.rgb * 0.0773993808, vec3( lessThanEqual( value.rgb, vec3( 0.04045 ) ) ) ), value.a );\n}\nvec4 LinearTosRGB( in vec4 value ) {\n\treturn vec4( mix( pow( value.rgb, vec3( 0.41666 ) ) * 1.055 - vec3( 0.055 ), value.rgb * 12.92, vec3( lessThanEqual( value.rgb, vec3( 0.0031308 ) ) ) ), value.a );\n}\nvec4 RGBEToLinear( in vec4 value ) {\n\treturn vec4( value.rgb * exp2( value.a * 255.0 - 128.0 ), 1.0 );\n}\nvec4 LinearToRGBE( in vec4 value ) {\n\tfloat maxComponent = max( max( value.r, value.g ), value.b );\n\tfloat fExp = clamp( ceil( log2( maxComponent ) ), -128.0, 127.0 );\n\treturn vec4( value.rgb / exp2( fExp ), ( fExp + 128.0 ) / 255.0 );\n}\nvec4 RGBMToLinear( in vec4 value, in float maxRange ) {\n\treturn vec4( value.rgb * value.a * maxRange, 1.0 );\n}\nvec4 LinearToRGBM( in vec4 value, in float maxRange ) {\n\tfloat maxRGB = max( value.r, max( value.g, value.b ) );\n\tfloat M = clamp( maxRGB / maxRange, 0.0, 1.0 );\n\tM = ceil( M * 255.0 ) / 255.0;\n\treturn vec4( value.rgb / ( M * maxRange ), M );\n}\nvec4 RGBDToLinear( in vec4 value, in float maxRange ) {\n\treturn vec4( value.rgb * ( ( maxRange / 255.0 ) / value.a ), 1.0 );\n}\nvec4 LinearToRGBD( in vec4 value, in float maxRange ) {\n\tfloat maxRGB = max( value.r, max( value.g, value.b ) );\n\tfloat D = max( maxRange / maxRGB, 1.0 );\n\tD = clamp( floor( D ) / 255.0, 0.0, 1.0 );\n\treturn vec4( value.rgb * ( D * ( 255.0 / maxRange ) ), D );\n}\nconst mat3 cLogLuvM = mat3( 0.2209, 0.3390, 0.4184, 0.1138, 0.6780, 0.7319, 0.0102, 0.1130, 0.2969 );\nvec4 LinearToLogLuv( in vec4 value ) {\n\tvec3 Xp_Y_XYZp = cLogLuvM * value.rgb;\n\tXp_Y_XYZp = max( Xp_Y_XYZp, vec3( 1e-6, 1e-6, 1e-6 ) );\n\tvec4 vResult;\n\tvResult.xy = Xp_Y_XYZp.xy / Xp_Y_XYZp.z;\n\tfloat Le = 2.0 * log2(Xp_Y_XYZp.y) + 127.0;\n\tvResult.w = fract( Le );\n\tvResult.z = ( Le - ( floor( vResult.w * 255.0 ) ) / 255.0 ) / 255.0;\n\treturn vResult;\n}\nconst mat3 cLogLuvInverseM = mat3( 6.0014, -2.7008, -1.7996, -1.3320, 3.1029, -5.7721, 0.3008, -1.0882, 5.6268 );\nvec4 LogLuvToLinear( in vec4 value ) {\n\tfloat Le = value.z * 255.0 + value.w;\n\tvec3 Xp_Y_XYZp;\n\tXp_Y_XYZp.y = exp2( ( Le - 127.0 ) / 2.0 );\n\tXp_Y_XYZp.z = Xp_Y_XYZp.y / value.y;\n\tXp_Y_XYZp.x = value.x * Xp_Y_XYZp.z;\n\tvec3 vRGB = cLogLuvInverseM * Xp_Y_XYZp.rgb;\n\treturn vec4( max( vRGB, 0.0 ), 1.0 );\n}", +envmap_fragment:"#ifdef USE_ENVMAP\n\t#ifdef ENV_WORLDPOS\n\t\tvec3 cameraToFrag;\n\t\t\n\t\tif ( isOrthographic ) {\n\t\t\tcameraToFrag = normalize( vec3( - viewMatrix[ 0 ][ 2 ], - viewMatrix[ 1 ][ 2 ], - viewMatrix[ 2 ][ 2 ] ) );\n\t\t} else {\n\t\t\tcameraToFrag = normalize( vWorldPosition - cameraPosition );\n\t\t}\n\t\tvec3 worldNormal = inverseTransformDirection( normal, viewMatrix );\n\t\t#ifdef ENVMAP_MODE_REFLECTION\n\t\t\tvec3 reflectVec = reflect( cameraToFrag, worldNormal );\n\t\t#else\n\t\t\tvec3 reflectVec = refract( cameraToFrag, worldNormal, refractionRatio );\n\t\t#endif\n\t#else\n\t\tvec3 reflectVec = vReflect;\n\t#endif\n\t#ifdef ENVMAP_TYPE_CUBE\n\t\tvec4 envColor = textureCube( envMap, vec3( flipEnvMap * reflectVec.x, reflectVec.yz ) );\n\t#elif defined( ENVMAP_TYPE_CUBE_UV )\n\t\tvec4 envColor = textureCubeUV( envMap, reflectVec, 0.0 );\n\t#elif defined( ENVMAP_TYPE_EQUIREC )\n\t\treflectVec = normalize( reflectVec );\n\t\tvec2 sampleUV = equirectUv( reflectVec );\n\t\tvec4 envColor = texture2D( envMap, sampleUV );\n\t#elif defined( ENVMAP_TYPE_SPHERE )\n\t\treflectVec = normalize( reflectVec );\n\t\tvec3 reflectView = normalize( ( viewMatrix * vec4( reflectVec, 0.0 ) ).xyz + vec3( 0.0, 0.0, 1.0 ) );\n\t\tvec4 envColor = texture2D( envMap, reflectView.xy * 0.5 + 0.5 );\n\t#else\n\t\tvec4 envColor = vec4( 0.0 );\n\t#endif\n\t#ifndef ENVMAP_TYPE_CUBE_UV\n\t\tenvColor = envMapTexelToLinear( envColor );\n\t#endif\n\t#ifdef ENVMAP_BLENDING_MULTIPLY\n\t\toutgoingLight = mix( outgoingLight, outgoingLight * envColor.xyz, specularStrength * reflectivity );\n\t#elif defined( ENVMAP_BLENDING_MIX )\n\t\toutgoingLight = mix( outgoingLight, envColor.xyz, specularStrength * reflectivity );\n\t#elif defined( ENVMAP_BLENDING_ADD )\n\t\toutgoingLight += envColor.xyz * specularStrength * reflectivity;\n\t#endif\n#endif", +envmap_common_pars_fragment:"#ifdef USE_ENVMAP\n\tuniform float envMapIntensity;\n\tuniform float flipEnvMap;\n\tuniform int maxMipLevel;\n\t#ifdef ENVMAP_TYPE_CUBE\n\t\tuniform samplerCube envMap;\n\t#else\n\t\tuniform sampler2D envMap;\n\t#endif\n\t\n#endif",envmap_pars_fragment:"#ifdef USE_ENVMAP\n\tuniform float reflectivity;\n\t#if defined( USE_BUMPMAP ) || defined( USE_NORMALMAP ) || defined( PHONG )\n\t\t#define ENV_WORLDPOS\n\t#endif\n\t#ifdef ENV_WORLDPOS\n\t\tvarying vec3 vWorldPosition;\n\t\tuniform float refractionRatio;\n\t#else\n\t\tvarying vec3 vReflect;\n\t#endif\n#endif", +envmap_pars_vertex:"#ifdef USE_ENVMAP\n\t#if defined( USE_BUMPMAP ) || defined( USE_NORMALMAP ) ||defined( PHONG )\n\t\t#define ENV_WORLDPOS\n\t#endif\n\t#ifdef ENV_WORLDPOS\n\t\t\n\t\tvarying vec3 vWorldPosition;\n\t#else\n\t\tvarying vec3 vReflect;\n\t\tuniform float refractionRatio;\n\t#endif\n#endif",envmap_physical_pars_fragment:"#if defined( USE_ENVMAP )\n\t#ifdef ENVMAP_MODE_REFRACTION\n\t\tuniform float refractionRatio;\n\t#endif\n\tvec3 getLightProbeIndirectIrradiance( const in GeometricContext geometry, const in int maxMIPLevel ) {\n\t\tvec3 worldNormal = inverseTransformDirection( geometry.normal, viewMatrix );\n\t\t#ifdef ENVMAP_TYPE_CUBE\n\t\t\tvec3 queryVec = vec3( flipEnvMap * worldNormal.x, worldNormal.yz );\n\t\t\t#ifdef TEXTURE_LOD_EXT\n\t\t\t\tvec4 envMapColor = textureCubeLodEXT( envMap, queryVec, float( maxMIPLevel ) );\n\t\t\t#else\n\t\t\t\tvec4 envMapColor = textureCube( envMap, queryVec, float( maxMIPLevel ) );\n\t\t\t#endif\n\t\t\tenvMapColor.rgb = envMapTexelToLinear( envMapColor ).rgb;\n\t\t#elif defined( ENVMAP_TYPE_CUBE_UV )\n\t\t\tvec4 envMapColor = textureCubeUV( envMap, worldNormal, 1.0 );\n\t\t#else\n\t\t\tvec4 envMapColor = vec4( 0.0 );\n\t\t#endif\n\t\treturn PI * envMapColor.rgb * envMapIntensity;\n\t}\n\tfloat getSpecularMIPLevel( const in float roughness, const in int maxMIPLevel ) {\n\t\tfloat maxMIPLevelScalar = float( maxMIPLevel );\n\t\tfloat sigma = PI * roughness * roughness / ( 1.0 + roughness );\n\t\tfloat desiredMIPLevel = maxMIPLevelScalar + log2( sigma );\n\t\treturn clamp( desiredMIPLevel, 0.0, maxMIPLevelScalar );\n\t}\n\tvec3 getLightProbeIndirectRadiance( const in vec3 viewDir, const in vec3 normal, const in float roughness, const in int maxMIPLevel ) {\n\t\t#ifdef ENVMAP_MODE_REFLECTION\n\t\t vec3 reflectVec = reflect( -viewDir, normal );\n\t\t reflectVec = normalize( mix( reflectVec, normal, roughness * roughness) );\n\t\t#else\n\t\t vec3 reflectVec = refract( -viewDir, normal, refractionRatio );\n\t\t#endif\n\t\treflectVec = inverseTransformDirection( reflectVec, viewMatrix );\n\t\tfloat specularMIPLevel = getSpecularMIPLevel( roughness, maxMIPLevel );\n\t\t#ifdef ENVMAP_TYPE_CUBE\n\t\t\tvec3 queryReflectVec = vec3( flipEnvMap * reflectVec.x, reflectVec.yz );\n\t\t\t#ifdef TEXTURE_LOD_EXT\n\t\t\t\tvec4 envMapColor = textureCubeLodEXT( envMap, queryReflectVec, specularMIPLevel );\n\t\t\t#else\n\t\t\t\tvec4 envMapColor = textureCube( envMap, queryReflectVec, specularMIPLevel );\n\t\t\t#endif\n\t\t\tenvMapColor.rgb = envMapTexelToLinear( envMapColor ).rgb;\n\t\t#elif defined( ENVMAP_TYPE_CUBE_UV )\n\t\t\tvec4 envMapColor = textureCubeUV( envMap, reflectVec, roughness );\n\t\t#elif defined( ENVMAP_TYPE_EQUIREC )\n\t\t\tvec2 sampleUV = equirectUv( reflectVec );\n\t\t\t#ifdef TEXTURE_LOD_EXT\n\t\t\t\tvec4 envMapColor = texture2DLodEXT( envMap, sampleUV, specularMIPLevel );\n\t\t\t#else\n\t\t\t\tvec4 envMapColor = texture2D( envMap, sampleUV, specularMIPLevel );\n\t\t\t#endif\n\t\t\tenvMapColor.rgb = envMapTexelToLinear( envMapColor ).rgb;\n\t\t#elif defined( ENVMAP_TYPE_SPHERE )\n\t\t\tvec3 reflectView = normalize( ( viewMatrix * vec4( reflectVec, 0.0 ) ).xyz + vec3( 0.0,0.0,1.0 ) );\n\t\t\t#ifdef TEXTURE_LOD_EXT\n\t\t\t\tvec4 envMapColor = texture2DLodEXT( envMap, reflectView.xy * 0.5 + 0.5, specularMIPLevel );\n\t\t\t#else\n\t\t\t\tvec4 envMapColor = texture2D( envMap, reflectView.xy * 0.5 + 0.5, specularMIPLevel );\n\t\t\t#endif\n\t\t\tenvMapColor.rgb = envMapTexelToLinear( envMapColor ).rgb;\n\t\t#endif\n\t\treturn envMapColor.rgb * envMapIntensity;\n\t}\n#endif", +envmap_vertex:"#ifdef USE_ENVMAP\n\t#ifdef ENV_WORLDPOS\n\t\tvWorldPosition = worldPosition.xyz;\n\t#else\n\t\tvec3 cameraToVertex;\n\t\tif ( isOrthographic ) { \n\t\t\tcameraToVertex = normalize( vec3( - viewMatrix[ 0 ][ 2 ], - viewMatrix[ 1 ][ 2 ], - viewMatrix[ 2 ][ 2 ] ) );\n\t\t} else {\n\t\t\tcameraToVertex = normalize( worldPosition.xyz - cameraPosition );\n\t\t}\n\t\tvec3 worldNormal = inverseTransformDirection( transformedNormal, viewMatrix );\n\t\t#ifdef ENVMAP_MODE_REFLECTION\n\t\t\tvReflect = reflect( cameraToVertex, worldNormal );\n\t\t#else\n\t\t\tvReflect = refract( cameraToVertex, worldNormal, refractionRatio );\n\t\t#endif\n\t#endif\n#endif", +fog_vertex:"#ifdef USE_FOG\n\tfogDepth = -mvPosition.z;\n#endif",fog_pars_vertex:"#ifdef USE_FOG\n\tvarying float fogDepth;\n#endif",fog_fragment:"#ifdef USE_FOG\n\t#ifdef FOG_EXP2\n\t\tfloat fogFactor = 1.0 - exp( - fogDensity * fogDensity * fogDepth * fogDepth );\n\t#else\n\t\tfloat fogFactor = smoothstep( fogNear, fogFar, fogDepth );\n\t#endif\n\tgl_FragColor.rgb = mix( gl_FragColor.rgb, fogColor, fogFactor );\n#endif",fog_pars_fragment:"#ifdef USE_FOG\n\tuniform vec3 fogColor;\n\tvarying float fogDepth;\n\t#ifdef FOG_EXP2\n\t\tuniform float fogDensity;\n\t#else\n\t\tuniform float fogNear;\n\t\tuniform float fogFar;\n\t#endif\n#endif", +gradientmap_pars_fragment:"#ifdef USE_GRADIENTMAP\n\tuniform sampler2D gradientMap;\n#endif\nvec3 getGradientIrradiance( vec3 normal, vec3 lightDirection ) {\n\tfloat dotNL = dot( normal, lightDirection );\n\tvec2 coord = vec2( dotNL * 0.5 + 0.5, 0.0 );\n\t#ifdef USE_GRADIENTMAP\n\t\treturn texture2D( gradientMap, coord ).rgb;\n\t#else\n\t\treturn ( coord.x < 0.7 ) ? vec3( 0.7 ) : vec3( 1.0 );\n\t#endif\n}",lightmap_fragment:"#ifdef USE_LIGHTMAP\n\tvec4 lightMapTexel= texture2D( lightMap, vUv2 );\n\treflectedLight.indirectDiffuse += PI * lightMapTexelToLinear( lightMapTexel ).rgb * lightMapIntensity;\n#endif", +lightmap_pars_fragment:"#ifdef USE_LIGHTMAP\n\tuniform sampler2D lightMap;\n\tuniform float lightMapIntensity;\n#endif",lights_lambert_vertex:"vec3 diffuse = vec3( 1.0 );\nGeometricContext geometry;\ngeometry.position = mvPosition.xyz;\ngeometry.normal = normalize( transformedNormal );\ngeometry.viewDir = ( isOrthographic ) ? vec3( 0, 0, 1 ) : normalize( -mvPosition.xyz );\nGeometricContext backGeometry;\nbackGeometry.position = geometry.position;\nbackGeometry.normal = -geometry.normal;\nbackGeometry.viewDir = geometry.viewDir;\nvLightFront = vec3( 0.0 );\nvIndirectFront = vec3( 0.0 );\n#ifdef DOUBLE_SIDED\n\tvLightBack = vec3( 0.0 );\n\tvIndirectBack = vec3( 0.0 );\n#endif\nIncidentLight directLight;\nfloat dotNL;\nvec3 directLightColor_Diffuse;\nvIndirectFront += getAmbientLightIrradiance( ambientLightColor );\nvIndirectFront += getLightProbeIrradiance( lightProbe, geometry );\n#ifdef DOUBLE_SIDED\n\tvIndirectBack += getAmbientLightIrradiance( ambientLightColor );\n\tvIndirectBack += getLightProbeIrradiance( lightProbe, backGeometry );\n#endif\n#if NUM_POINT_LIGHTS > 0\n\t#pragma unroll_loop_start\n\tfor ( int i = 0; i < NUM_POINT_LIGHTS; i ++ ) {\n\t\tgetPointDirectLightIrradiance( pointLights[ i ], geometry, directLight );\n\t\tdotNL = dot( geometry.normal, directLight.direction );\n\t\tdirectLightColor_Diffuse = PI * directLight.color;\n\t\tvLightFront += saturate( dotNL ) * directLightColor_Diffuse;\n\t\t#ifdef DOUBLE_SIDED\n\t\t\tvLightBack += saturate( -dotNL ) * directLightColor_Diffuse;\n\t\t#endif\n\t}\n\t#pragma unroll_loop_end\n#endif\n#if NUM_SPOT_LIGHTS > 0\n\t#pragma unroll_loop_start\n\tfor ( int i = 0; i < NUM_SPOT_LIGHTS; i ++ ) {\n\t\tgetSpotDirectLightIrradiance( spotLights[ i ], geometry, directLight );\n\t\tdotNL = dot( geometry.normal, directLight.direction );\n\t\tdirectLightColor_Diffuse = PI * directLight.color;\n\t\tvLightFront += saturate( dotNL ) * directLightColor_Diffuse;\n\t\t#ifdef DOUBLE_SIDED\n\t\t\tvLightBack += saturate( -dotNL ) * directLightColor_Diffuse;\n\t\t#endif\n\t}\n\t#pragma unroll_loop_end\n#endif\n#if NUM_DIR_LIGHTS > 0\n\t#pragma unroll_loop_start\n\tfor ( int i = 0; i < NUM_DIR_LIGHTS; i ++ ) {\n\t\tgetDirectionalDirectLightIrradiance( directionalLights[ i ], geometry, directLight );\n\t\tdotNL = dot( geometry.normal, directLight.direction );\n\t\tdirectLightColor_Diffuse = PI * directLight.color;\n\t\tvLightFront += saturate( dotNL ) * directLightColor_Diffuse;\n\t\t#ifdef DOUBLE_SIDED\n\t\t\tvLightBack += saturate( -dotNL ) * directLightColor_Diffuse;\n\t\t#endif\n\t}\n\t#pragma unroll_loop_end\n#endif\n#if NUM_HEMI_LIGHTS > 0\n\t#pragma unroll_loop_start\n\tfor ( int i = 0; i < NUM_HEMI_LIGHTS; i ++ ) {\n\t\tvIndirectFront += getHemisphereLightIrradiance( hemisphereLights[ i ], geometry );\n\t\t#ifdef DOUBLE_SIDED\n\t\t\tvIndirectBack += getHemisphereLightIrradiance( hemisphereLights[ i ], backGeometry );\n\t\t#endif\n\t}\n\t#pragma unroll_loop_end\n#endif", +lights_pars_begin:"uniform bool receiveShadow;\nuniform vec3 ambientLightColor;\nuniform vec3 lightProbe[ 9 ];\nvec3 shGetIrradianceAt( in vec3 normal, in vec3 shCoefficients[ 9 ] ) {\n\tfloat x = normal.x, y = normal.y, z = normal.z;\n\tvec3 result = shCoefficients[ 0 ] * 0.886227;\n\tresult += shCoefficients[ 1 ] * 2.0 * 0.511664 * y;\n\tresult += shCoefficients[ 2 ] * 2.0 * 0.511664 * z;\n\tresult += shCoefficients[ 3 ] * 2.0 * 0.511664 * x;\n\tresult += shCoefficients[ 4 ] * 2.0 * 0.429043 * x * y;\n\tresult += shCoefficients[ 5 ] * 2.0 * 0.429043 * y * z;\n\tresult += shCoefficients[ 6 ] * ( 0.743125 * z * z - 0.247708 );\n\tresult += shCoefficients[ 7 ] * 2.0 * 0.429043 * x * z;\n\tresult += shCoefficients[ 8 ] * 0.429043 * ( x * x - y * y );\n\treturn result;\n}\nvec3 getLightProbeIrradiance( const in vec3 lightProbe[ 9 ], const in GeometricContext geometry ) {\n\tvec3 worldNormal = inverseTransformDirection( geometry.normal, viewMatrix );\n\tvec3 irradiance = shGetIrradianceAt( worldNormal, lightProbe );\n\treturn irradiance;\n}\nvec3 getAmbientLightIrradiance( const in vec3 ambientLightColor ) {\n\tvec3 irradiance = ambientLightColor;\n\t#ifndef PHYSICALLY_CORRECT_LIGHTS\n\t\tirradiance *= PI;\n\t#endif\n\treturn irradiance;\n}\n#if NUM_DIR_LIGHTS > 0\n\tstruct DirectionalLight {\n\t\tvec3 direction;\n\t\tvec3 color;\n\t};\n\tuniform DirectionalLight directionalLights[ NUM_DIR_LIGHTS ];\n\t#if defined( USE_SHADOWMAP ) && NUM_DIR_LIGHT_SHADOWS > 0\n\t\tstruct DirectionalLightShadow {\n\t\t\tfloat shadowBias;\n\t\t\tfloat shadowRadius;\n\t\t\tvec2 shadowMapSize;\n\t\t};\n\t\tuniform DirectionalLightShadow directionalLightShadows[ NUM_DIR_LIGHT_SHADOWS ];\n\t#endif\n\tvoid getDirectionalDirectLightIrradiance( const in DirectionalLight directionalLight, const in GeometricContext geometry, out IncidentLight directLight ) {\n\t\tdirectLight.color = directionalLight.color;\n\t\tdirectLight.direction = directionalLight.direction;\n\t\tdirectLight.visible = true;\n\t}\n#endif\n#if NUM_POINT_LIGHTS > 0\n\tstruct PointLight {\n\t\tvec3 position;\n\t\tvec3 color;\n\t\tfloat distance;\n\t\tfloat decay;\n\t};\n\tuniform PointLight pointLights[ NUM_POINT_LIGHTS ];\n\t#if defined( USE_SHADOWMAP ) && NUM_POINT_LIGHT_SHADOWS > 0\n\t\tstruct PointLightShadow {\n\t\t\tfloat shadowBias;\n\t\t\tfloat shadowRadius;\n\t\t\tvec2 shadowMapSize;\n\t\t\tfloat shadowCameraNear;\n\t\t\tfloat shadowCameraFar;\n\t\t};\n\t\tuniform PointLightShadow pointLightShadows[ NUM_POINT_LIGHT_SHADOWS ];\n\t#endif\n\tvoid getPointDirectLightIrradiance( const in PointLight pointLight, const in GeometricContext geometry, out IncidentLight directLight ) {\n\t\tvec3 lVector = pointLight.position - geometry.position;\n\t\tdirectLight.direction = normalize( lVector );\n\t\tfloat lightDistance = length( lVector );\n\t\tdirectLight.color = pointLight.color;\n\t\tdirectLight.color *= punctualLightIntensityToIrradianceFactor( lightDistance, pointLight.distance, pointLight.decay );\n\t\tdirectLight.visible = ( directLight.color != vec3( 0.0 ) );\n\t}\n#endif\n#if NUM_SPOT_LIGHTS > 0\n\tstruct SpotLight {\n\t\tvec3 position;\n\t\tvec3 direction;\n\t\tvec3 color;\n\t\tfloat distance;\n\t\tfloat decay;\n\t\tfloat coneCos;\n\t\tfloat penumbraCos;\n\t};\n\tuniform SpotLight spotLights[ NUM_SPOT_LIGHTS ];\n\t#if defined( USE_SHADOWMAP ) && NUM_SPOT_LIGHT_SHADOWS > 0\n\t\tstruct SpotLightShadow {\n\t\t\tfloat shadowBias;\n\t\t\tfloat shadowRadius;\n\t\t\tvec2 shadowMapSize;\n\t\t};\n\t\tuniform SpotLightShadow spotLightShadows[ NUM_SPOT_LIGHT_SHADOWS ];\n\t#endif\n\tvoid getSpotDirectLightIrradiance( const in SpotLight spotLight, const in GeometricContext geometry, out IncidentLight directLight ) {\n\t\tvec3 lVector = spotLight.position - geometry.position;\n\t\tdirectLight.direction = normalize( lVector );\n\t\tfloat lightDistance = length( lVector );\n\t\tfloat angleCos = dot( directLight.direction, spotLight.direction );\n\t\tif ( angleCos > spotLight.coneCos ) {\n\t\t\tfloat spotEffect = smoothstep( spotLight.coneCos, spotLight.penumbraCos, angleCos );\n\t\t\tdirectLight.color = spotLight.color;\n\t\t\tdirectLight.color *= spotEffect * punctualLightIntensityToIrradianceFactor( lightDistance, spotLight.distance, spotLight.decay );\n\t\t\tdirectLight.visible = true;\n\t\t} else {\n\t\t\tdirectLight.color = vec3( 0.0 );\n\t\t\tdirectLight.visible = false;\n\t\t}\n\t}\n#endif\n#if NUM_RECT_AREA_LIGHTS > 0\n\tstruct RectAreaLight {\n\t\tvec3 color;\n\t\tvec3 position;\n\t\tvec3 halfWidth;\n\t\tvec3 halfHeight;\n\t};\n\tuniform sampler2D ltc_1;\tuniform sampler2D ltc_2;\n\tuniform RectAreaLight rectAreaLights[ NUM_RECT_AREA_LIGHTS ];\n#endif\n#if NUM_HEMI_LIGHTS > 0\n\tstruct HemisphereLight {\n\t\tvec3 direction;\n\t\tvec3 skyColor;\n\t\tvec3 groundColor;\n\t};\n\tuniform HemisphereLight hemisphereLights[ NUM_HEMI_LIGHTS ];\n\tvec3 getHemisphereLightIrradiance( const in HemisphereLight hemiLight, const in GeometricContext geometry ) {\n\t\tfloat dotNL = dot( geometry.normal, hemiLight.direction );\n\t\tfloat hemiDiffuseWeight = 0.5 * dotNL + 0.5;\n\t\tvec3 irradiance = mix( hemiLight.groundColor, hemiLight.skyColor, hemiDiffuseWeight );\n\t\t#ifndef PHYSICALLY_CORRECT_LIGHTS\n\t\t\tirradiance *= PI;\n\t\t#endif\n\t\treturn irradiance;\n\t}\n#endif", +lights_toon_fragment:"ToonMaterial material;\nmaterial.diffuseColor = diffuseColor.rgb;\nmaterial.specularColor = specular;\nmaterial.specularShininess = shininess;\nmaterial.specularStrength = specularStrength;",lights_toon_pars_fragment:"varying vec3 vViewPosition;\n#ifndef FLAT_SHADED\n\tvarying vec3 vNormal;\n#endif\nstruct ToonMaterial {\n\tvec3\tdiffuseColor;\n\tvec3\tspecularColor;\n\tfloat\tspecularShininess;\n\tfloat\tspecularStrength;\n};\nvoid RE_Direct_Toon( const in IncidentLight directLight, const in GeometricContext geometry, const in ToonMaterial material, inout ReflectedLight reflectedLight ) {\n\tvec3 irradiance = getGradientIrradiance( geometry.normal, directLight.direction ) * directLight.color;\n\t#ifndef PHYSICALLY_CORRECT_LIGHTS\n\t\tirradiance *= PI;\n\t#endif\n\treflectedLight.directDiffuse += irradiance * BRDF_Diffuse_Lambert( material.diffuseColor );\n\treflectedLight.directSpecular += irradiance * BRDF_Specular_BlinnPhong( directLight, geometry, material.specularColor, material.specularShininess ) * material.specularStrength;\n}\nvoid RE_IndirectDiffuse_Toon( const in vec3 irradiance, const in GeometricContext geometry, const in ToonMaterial material, inout ReflectedLight reflectedLight ) {\n\treflectedLight.indirectDiffuse += irradiance * BRDF_Diffuse_Lambert( material.diffuseColor );\n}\n#define RE_Direct\t\t\t\tRE_Direct_Toon\n#define RE_IndirectDiffuse\t\tRE_IndirectDiffuse_Toon\n#define Material_LightProbeLOD( material )\t(0)", +lights_phong_fragment:"BlinnPhongMaterial material;\nmaterial.diffuseColor = diffuseColor.rgb;\nmaterial.specularColor = specular;\nmaterial.specularShininess = shininess;\nmaterial.specularStrength = specularStrength;",lights_phong_pars_fragment:"varying vec3 vViewPosition;\n#ifndef FLAT_SHADED\n\tvarying vec3 vNormal;\n#endif\nstruct BlinnPhongMaterial {\n\tvec3\tdiffuseColor;\n\tvec3\tspecularColor;\n\tfloat\tspecularShininess;\n\tfloat\tspecularStrength;\n};\nvoid RE_Direct_BlinnPhong( const in IncidentLight directLight, const in GeometricContext geometry, const in BlinnPhongMaterial material, inout ReflectedLight reflectedLight ) {\n\tfloat dotNL = saturate( dot( geometry.normal, directLight.direction ) );\n\tvec3 irradiance = dotNL * directLight.color;\n\t#ifndef PHYSICALLY_CORRECT_LIGHTS\n\t\tirradiance *= PI;\n\t#endif\n\treflectedLight.directDiffuse += irradiance * BRDF_Diffuse_Lambert( material.diffuseColor );\n\treflectedLight.directSpecular += irradiance * BRDF_Specular_BlinnPhong( directLight, geometry, material.specularColor, material.specularShininess ) * material.specularStrength;\n}\nvoid RE_IndirectDiffuse_BlinnPhong( const in vec3 irradiance, const in GeometricContext geometry, const in BlinnPhongMaterial material, inout ReflectedLight reflectedLight ) {\n\treflectedLight.indirectDiffuse += irradiance * BRDF_Diffuse_Lambert( material.diffuseColor );\n}\n#define RE_Direct\t\t\t\tRE_Direct_BlinnPhong\n#define RE_IndirectDiffuse\t\tRE_IndirectDiffuse_BlinnPhong\n#define Material_LightProbeLOD( material )\t(0)", +lights_physical_fragment:"PhysicalMaterial material;\nmaterial.diffuseColor = diffuseColor.rgb * ( 1.0 - metalnessFactor );\nvec3 dxy = max( abs( dFdx( geometryNormal ) ), abs( dFdy( geometryNormal ) ) );\nfloat geometryRoughness = max( max( dxy.x, dxy.y ), dxy.z );\nmaterial.specularRoughness = max( roughnessFactor, 0.0525 );material.specularRoughness += geometryRoughness;\nmaterial.specularRoughness = min( material.specularRoughness, 1.0 );\n#ifdef REFLECTIVITY\n\tmaterial.specularColor = mix( vec3( MAXIMUM_SPECULAR_COEFFICIENT * pow2( reflectivity ) ), diffuseColor.rgb, metalnessFactor );\n#else\n\tmaterial.specularColor = mix( vec3( DEFAULT_SPECULAR_COEFFICIENT ), diffuseColor.rgb, metalnessFactor );\n#endif\n#ifdef CLEARCOAT\n\tmaterial.clearcoat = clearcoat;\n\tmaterial.clearcoatRoughness = clearcoatRoughness;\n\t#ifdef USE_CLEARCOATMAP\n\t\tmaterial.clearcoat *= texture2D( clearcoatMap, vUv ).x;\n\t#endif\n\t#ifdef USE_CLEARCOAT_ROUGHNESSMAP\n\t\tmaterial.clearcoatRoughness *= texture2D( clearcoatRoughnessMap, vUv ).y;\n\t#endif\n\tmaterial.clearcoat = saturate( material.clearcoat );\tmaterial.clearcoatRoughness = max( material.clearcoatRoughness, 0.0525 );\n\tmaterial.clearcoatRoughness += geometryRoughness;\n\tmaterial.clearcoatRoughness = min( material.clearcoatRoughness, 1.0 );\n#endif\n#ifdef USE_SHEEN\n\tmaterial.sheenColor = sheen;\n#endif", +lights_physical_pars_fragment:"struct PhysicalMaterial {\n\tvec3\tdiffuseColor;\n\tfloat\tspecularRoughness;\n\tvec3\tspecularColor;\n#ifdef CLEARCOAT\n\tfloat clearcoat;\n\tfloat clearcoatRoughness;\n#endif\n#ifdef USE_SHEEN\n\tvec3 sheenColor;\n#endif\n};\n#define MAXIMUM_SPECULAR_COEFFICIENT 0.16\n#define DEFAULT_SPECULAR_COEFFICIENT 0.04\nfloat clearcoatDHRApprox( const in float roughness, const in float dotNL ) {\n\treturn DEFAULT_SPECULAR_COEFFICIENT + ( 1.0 - DEFAULT_SPECULAR_COEFFICIENT ) * ( pow( 1.0 - dotNL, 5.0 ) * pow( 1.0 - roughness, 2.0 ) );\n}\n#if NUM_RECT_AREA_LIGHTS > 0\n\tvoid RE_Direct_RectArea_Physical( const in RectAreaLight rectAreaLight, const in GeometricContext geometry, const in PhysicalMaterial material, inout ReflectedLight reflectedLight ) {\n\t\tvec3 normal = geometry.normal;\n\t\tvec3 viewDir = geometry.viewDir;\n\t\tvec3 position = geometry.position;\n\t\tvec3 lightPos = rectAreaLight.position;\n\t\tvec3 halfWidth = rectAreaLight.halfWidth;\n\t\tvec3 halfHeight = rectAreaLight.halfHeight;\n\t\tvec3 lightColor = rectAreaLight.color;\n\t\tfloat roughness = material.specularRoughness;\n\t\tvec3 rectCoords[ 4 ];\n\t\trectCoords[ 0 ] = lightPos + halfWidth - halfHeight;\t\trectCoords[ 1 ] = lightPos - halfWidth - halfHeight;\n\t\trectCoords[ 2 ] = lightPos - halfWidth + halfHeight;\n\t\trectCoords[ 3 ] = lightPos + halfWidth + halfHeight;\n\t\tvec2 uv = LTC_Uv( normal, viewDir, roughness );\n\t\tvec4 t1 = texture2D( ltc_1, uv );\n\t\tvec4 t2 = texture2D( ltc_2, uv );\n\t\tmat3 mInv = mat3(\n\t\t\tvec3( t1.x, 0, t1.y ),\n\t\t\tvec3( 0, 1, 0 ),\n\t\t\tvec3( t1.z, 0, t1.w )\n\t\t);\n\t\tvec3 fresnel = ( material.specularColor * t2.x + ( vec3( 1.0 ) - material.specularColor ) * t2.y );\n\t\treflectedLight.directSpecular += lightColor * fresnel * LTC_Evaluate( normal, viewDir, position, mInv, rectCoords );\n\t\treflectedLight.directDiffuse += lightColor * material.diffuseColor * LTC_Evaluate( normal, viewDir, position, mat3( 1.0 ), rectCoords );\n\t}\n#endif\nvoid RE_Direct_Physical( const in IncidentLight directLight, const in GeometricContext geometry, const in PhysicalMaterial material, inout ReflectedLight reflectedLight ) {\n\tfloat dotNL = saturate( dot( geometry.normal, directLight.direction ) );\n\tvec3 irradiance = dotNL * directLight.color;\n\t#ifndef PHYSICALLY_CORRECT_LIGHTS\n\t\tirradiance *= PI;\n\t#endif\n\t#ifdef CLEARCOAT\n\t\tfloat ccDotNL = saturate( dot( geometry.clearcoatNormal, directLight.direction ) );\n\t\tvec3 ccIrradiance = ccDotNL * directLight.color;\n\t\t#ifndef PHYSICALLY_CORRECT_LIGHTS\n\t\t\tccIrradiance *= PI;\n\t\t#endif\n\t\tfloat clearcoatDHR = material.clearcoat * clearcoatDHRApprox( material.clearcoatRoughness, ccDotNL );\n\t\treflectedLight.directSpecular += ccIrradiance * material.clearcoat * BRDF_Specular_GGX( directLight, geometry.viewDir, geometry.clearcoatNormal, vec3( DEFAULT_SPECULAR_COEFFICIENT ), material.clearcoatRoughness );\n\t#else\n\t\tfloat clearcoatDHR = 0.0;\n\t#endif\n\t#ifdef USE_SHEEN\n\t\treflectedLight.directSpecular += ( 1.0 - clearcoatDHR ) * irradiance * BRDF_Specular_Sheen(\n\t\t\tmaterial.specularRoughness,\n\t\t\tdirectLight.direction,\n\t\t\tgeometry,\n\t\t\tmaterial.sheenColor\n\t\t);\n\t#else\n\t\treflectedLight.directSpecular += ( 1.0 - clearcoatDHR ) * irradiance * BRDF_Specular_GGX( directLight, geometry.viewDir, geometry.normal, material.specularColor, material.specularRoughness);\n\t#endif\n\treflectedLight.directDiffuse += ( 1.0 - clearcoatDHR ) * irradiance * BRDF_Diffuse_Lambert( material.diffuseColor );\n}\nvoid RE_IndirectDiffuse_Physical( const in vec3 irradiance, const in GeometricContext geometry, const in PhysicalMaterial material, inout ReflectedLight reflectedLight ) {\n\treflectedLight.indirectDiffuse += irradiance * BRDF_Diffuse_Lambert( material.diffuseColor );\n}\nvoid RE_IndirectSpecular_Physical( const in vec3 radiance, const in vec3 irradiance, const in vec3 clearcoatRadiance, const in GeometricContext geometry, const in PhysicalMaterial material, inout ReflectedLight reflectedLight) {\n\t#ifdef CLEARCOAT\n\t\tfloat ccDotNV = saturate( dot( geometry.clearcoatNormal, geometry.viewDir ) );\n\t\treflectedLight.indirectSpecular += clearcoatRadiance * material.clearcoat * BRDF_Specular_GGX_Environment( geometry.viewDir, geometry.clearcoatNormal, vec3( DEFAULT_SPECULAR_COEFFICIENT ), material.clearcoatRoughness );\n\t\tfloat ccDotNL = ccDotNV;\n\t\tfloat clearcoatDHR = material.clearcoat * clearcoatDHRApprox( material.clearcoatRoughness, ccDotNL );\n\t#else\n\t\tfloat clearcoatDHR = 0.0;\n\t#endif\n\tfloat clearcoatInv = 1.0 - clearcoatDHR;\n\tvec3 singleScattering = vec3( 0.0 );\n\tvec3 multiScattering = vec3( 0.0 );\n\tvec3 cosineWeightedIrradiance = irradiance * RECIPROCAL_PI;\n\tBRDF_Specular_Multiscattering_Environment( geometry, material.specularColor, material.specularRoughness, singleScattering, multiScattering );\n\tvec3 diffuse = material.diffuseColor * ( 1.0 - ( singleScattering + multiScattering ) );\n\treflectedLight.indirectSpecular += clearcoatInv * radiance * singleScattering;\n\treflectedLight.indirectSpecular += multiScattering * cosineWeightedIrradiance;\n\treflectedLight.indirectDiffuse += diffuse * cosineWeightedIrradiance;\n}\n#define RE_Direct\t\t\t\tRE_Direct_Physical\n#define RE_Direct_RectArea\t\tRE_Direct_RectArea_Physical\n#define RE_IndirectDiffuse\t\tRE_IndirectDiffuse_Physical\n#define RE_IndirectSpecular\t\tRE_IndirectSpecular_Physical\nfloat computeSpecularOcclusion( const in float dotNV, const in float ambientOcclusion, const in float roughness ) {\n\treturn saturate( pow( dotNV + ambientOcclusion, exp2( - 16.0 * roughness - 1.0 ) ) - 1.0 + ambientOcclusion );\n}", +lights_fragment_begin:"\nGeometricContext geometry;\ngeometry.position = - vViewPosition;\ngeometry.normal = normal;\ngeometry.viewDir = ( isOrthographic ) ? vec3( 0, 0, 1 ) : normalize( vViewPosition );\n#ifdef CLEARCOAT\n\tgeometry.clearcoatNormal = clearcoatNormal;\n#endif\nIncidentLight directLight;\n#if ( NUM_POINT_LIGHTS > 0 ) && defined( RE_Direct )\n\tPointLight pointLight;\n\t#if defined( USE_SHADOWMAP ) && NUM_POINT_LIGHT_SHADOWS > 0\n\tPointLightShadow pointLightShadow;\n\t#endif\n\t#pragma unroll_loop_start\n\tfor ( int i = 0; i < NUM_POINT_LIGHTS; i ++ ) {\n\t\tpointLight = pointLights[ i ];\n\t\tgetPointDirectLightIrradiance( pointLight, geometry, directLight );\n\t\t#if defined( USE_SHADOWMAP ) && ( UNROLLED_LOOP_INDEX < NUM_POINT_LIGHT_SHADOWS )\n\t\tpointLightShadow = pointLightShadows[ i ];\n\t\tdirectLight.color *= all( bvec2( directLight.visible, receiveShadow ) ) ? getPointShadow( pointShadowMap[ i ], pointLightShadow.shadowMapSize, pointLightShadow.shadowBias, pointLightShadow.shadowRadius, vPointShadowCoord[ i ], pointLightShadow.shadowCameraNear, pointLightShadow.shadowCameraFar ) : 1.0;\n\t\t#endif\n\t\tRE_Direct( directLight, geometry, material, reflectedLight );\n\t}\n\t#pragma unroll_loop_end\n#endif\n#if ( NUM_SPOT_LIGHTS > 0 ) && defined( RE_Direct )\n\tSpotLight spotLight;\n\t#if defined( USE_SHADOWMAP ) && NUM_SPOT_LIGHT_SHADOWS > 0\n\tSpotLightShadow spotLightShadow;\n\t#endif\n\t#pragma unroll_loop_start\n\tfor ( int i = 0; i < NUM_SPOT_LIGHTS; i ++ ) {\n\t\tspotLight = spotLights[ i ];\n\t\tgetSpotDirectLightIrradiance( spotLight, geometry, directLight );\n\t\t#if defined( USE_SHADOWMAP ) && ( UNROLLED_LOOP_INDEX < NUM_SPOT_LIGHT_SHADOWS )\n\t\tspotLightShadow = spotLightShadows[ i ];\n\t\tdirectLight.color *= all( bvec2( directLight.visible, receiveShadow ) ) ? getShadow( spotShadowMap[ i ], spotLightShadow.shadowMapSize, spotLightShadow.shadowBias, spotLightShadow.shadowRadius, vSpotShadowCoord[ i ] ) : 1.0;\n\t\t#endif\n\t\tRE_Direct( directLight, geometry, material, reflectedLight );\n\t}\n\t#pragma unroll_loop_end\n#endif\n#if ( NUM_DIR_LIGHTS > 0 ) && defined( RE_Direct )\n\tDirectionalLight directionalLight;\n\t#if defined( USE_SHADOWMAP ) && NUM_DIR_LIGHT_SHADOWS > 0\n\tDirectionalLightShadow directionalLightShadow;\n\t#endif\n\t#pragma unroll_loop_start\n\tfor ( int i = 0; i < NUM_DIR_LIGHTS; i ++ ) {\n\t\tdirectionalLight = directionalLights[ i ];\n\t\tgetDirectionalDirectLightIrradiance( directionalLight, geometry, directLight );\n\t\t#if defined( USE_SHADOWMAP ) && ( UNROLLED_LOOP_INDEX < NUM_DIR_LIGHT_SHADOWS )\n\t\tdirectionalLightShadow = directionalLightShadows[ i ];\n\t\tdirectLight.color *= all( bvec2( directLight.visible, receiveShadow ) ) ? getShadow( directionalShadowMap[ i ], directionalLightShadow.shadowMapSize, directionalLightShadow.shadowBias, directionalLightShadow.shadowRadius, vDirectionalShadowCoord[ i ] ) : 1.0;\n\t\t#endif\n\t\tRE_Direct( directLight, geometry, material, reflectedLight );\n\t}\n\t#pragma unroll_loop_end\n#endif\n#if ( NUM_RECT_AREA_LIGHTS > 0 ) && defined( RE_Direct_RectArea )\n\tRectAreaLight rectAreaLight;\n\t#pragma unroll_loop_start\n\tfor ( int i = 0; i < NUM_RECT_AREA_LIGHTS; i ++ ) {\n\t\trectAreaLight = rectAreaLights[ i ];\n\t\tRE_Direct_RectArea( rectAreaLight, geometry, material, reflectedLight );\n\t}\n\t#pragma unroll_loop_end\n#endif\n#if defined( RE_IndirectDiffuse )\n\tvec3 iblIrradiance = vec3( 0.0 );\n\tvec3 irradiance = getAmbientLightIrradiance( ambientLightColor );\n\tirradiance += getLightProbeIrradiance( lightProbe, geometry );\n\t#if ( NUM_HEMI_LIGHTS > 0 )\n\t\t#pragma unroll_loop_start\n\t\tfor ( int i = 0; i < NUM_HEMI_LIGHTS; i ++ ) {\n\t\t\tirradiance += getHemisphereLightIrradiance( hemisphereLights[ i ], geometry );\n\t\t}\n\t\t#pragma unroll_loop_end\n\t#endif\n#endif\n#if defined( RE_IndirectSpecular )\n\tvec3 radiance = vec3( 0.0 );\n\tvec3 clearcoatRadiance = vec3( 0.0 );\n#endif", +lights_fragment_maps:"#if defined( RE_IndirectDiffuse )\n\t#ifdef USE_LIGHTMAP\n\t\tvec4 lightMapTexel= texture2D( lightMap, vUv2 );\n\t\tvec3 lightMapIrradiance = lightMapTexelToLinear( lightMapTexel ).rgb * lightMapIntensity;\n\t\t#ifndef PHYSICALLY_CORRECT_LIGHTS\n\t\t\tlightMapIrradiance *= PI;\n\t\t#endif\n\t\tirradiance += lightMapIrradiance;\n\t#endif\n\t#if defined( USE_ENVMAP ) && defined( STANDARD ) && defined( ENVMAP_TYPE_CUBE_UV )\n\t\tiblIrradiance += getLightProbeIndirectIrradiance( geometry, maxMipLevel );\n\t#endif\n#endif\n#if defined( USE_ENVMAP ) && defined( RE_IndirectSpecular )\n\tradiance += getLightProbeIndirectRadiance( geometry.viewDir, geometry.normal, material.specularRoughness, maxMipLevel );\n\t#ifdef CLEARCOAT\n\t\tclearcoatRadiance += getLightProbeIndirectRadiance( geometry.viewDir, geometry.clearcoatNormal, material.clearcoatRoughness, maxMipLevel );\n\t#endif\n#endif", +lights_fragment_end:"#if defined( RE_IndirectDiffuse )\n\tRE_IndirectDiffuse( irradiance, geometry, material, reflectedLight );\n#endif\n#if defined( RE_IndirectSpecular )\n\tRE_IndirectSpecular( radiance, iblIrradiance, clearcoatRadiance, geometry, material, reflectedLight );\n#endif",logdepthbuf_fragment:"#if defined( USE_LOGDEPTHBUF ) && defined( USE_LOGDEPTHBUF_EXT )\n\tgl_FragDepthEXT = vIsPerspective == 0.0 ? gl_FragCoord.z : log2( vFragDepth ) * logDepthBufFC * 0.5;\n#endif",logdepthbuf_pars_fragment:"#if defined( USE_LOGDEPTHBUF ) && defined( USE_LOGDEPTHBUF_EXT )\n\tuniform float logDepthBufFC;\n\tvarying float vFragDepth;\n\tvarying float vIsPerspective;\n#endif", +logdepthbuf_pars_vertex:"#ifdef USE_LOGDEPTHBUF\n\t#ifdef USE_LOGDEPTHBUF_EXT\n\t\tvarying float vFragDepth;\n\t\tvarying float vIsPerspective;\n\t#else\n\t\tuniform float logDepthBufFC;\n\t#endif\n#endif",logdepthbuf_vertex:"#ifdef USE_LOGDEPTHBUF\n\t#ifdef USE_LOGDEPTHBUF_EXT\n\t\tvFragDepth = 1.0 + gl_Position.w;\n\t\tvIsPerspective = float( isPerspectiveMatrix( projectionMatrix ) );\n\t#else\n\t\tif ( isPerspectiveMatrix( projectionMatrix ) ) {\n\t\t\tgl_Position.z = log2( max( EPSILON, gl_Position.w + 1.0 ) ) * logDepthBufFC - 1.0;\n\t\t\tgl_Position.z *= gl_Position.w;\n\t\t}\n\t#endif\n#endif", +map_fragment:"#ifdef USE_MAP\n\tvec4 texelColor = texture2D( map, vUv );\n\ttexelColor = mapTexelToLinear( texelColor );\n\tdiffuseColor *= texelColor;\n#endif",map_pars_fragment:"#ifdef USE_MAP\n\tuniform sampler2D map;\n#endif",map_particle_fragment:"#if defined( USE_MAP ) || defined( USE_ALPHAMAP )\n\tvec2 uv = ( uvTransform * vec3( gl_PointCoord.x, 1.0 - gl_PointCoord.y, 1 ) ).xy;\n#endif\n#ifdef USE_MAP\n\tvec4 mapTexel = texture2D( map, uv );\n\tdiffuseColor *= mapTexelToLinear( mapTexel );\n#endif\n#ifdef USE_ALPHAMAP\n\tdiffuseColor.a *= texture2D( alphaMap, uv ).g;\n#endif", +map_particle_pars_fragment:"#if defined( USE_MAP ) || defined( USE_ALPHAMAP )\n\tuniform mat3 uvTransform;\n#endif\n#ifdef USE_MAP\n\tuniform sampler2D map;\n#endif\n#ifdef USE_ALPHAMAP\n\tuniform sampler2D alphaMap;\n#endif",metalnessmap_fragment:"float metalnessFactor = metalness;\n#ifdef USE_METALNESSMAP\n\tvec4 texelMetalness = texture2D( metalnessMap, vUv );\n\tmetalnessFactor *= texelMetalness.b;\n#endif",metalnessmap_pars_fragment:"#ifdef USE_METALNESSMAP\n\tuniform sampler2D metalnessMap;\n#endif", +morphnormal_vertex:"#ifdef USE_MORPHNORMALS\n\tobjectNormal *= morphTargetBaseInfluence;\n\tobjectNormal += morphNormal0 * morphTargetInfluences[ 0 ];\n\tobjectNormal += morphNormal1 * morphTargetInfluences[ 1 ];\n\tobjectNormal += morphNormal2 * morphTargetInfluences[ 2 ];\n\tobjectNormal += morphNormal3 * morphTargetInfluences[ 3 ];\n#endif",morphtarget_pars_vertex:"#ifdef USE_MORPHTARGETS\n\tuniform float morphTargetBaseInfluence;\n\t#ifndef USE_MORPHNORMALS\n\tuniform float morphTargetInfluences[ 8 ];\n\t#else\n\tuniform float morphTargetInfluences[ 4 ];\n\t#endif\n#endif", +morphtarget_vertex:"#ifdef USE_MORPHTARGETS\n\ttransformed *= morphTargetBaseInfluence;\n\ttransformed += morphTarget0 * morphTargetInfluences[ 0 ];\n\ttransformed += morphTarget1 * morphTargetInfluences[ 1 ];\n\ttransformed += morphTarget2 * morphTargetInfluences[ 2 ];\n\ttransformed += morphTarget3 * morphTargetInfluences[ 3 ];\n\t#ifndef USE_MORPHNORMALS\n\ttransformed += morphTarget4 * morphTargetInfluences[ 4 ];\n\ttransformed += morphTarget5 * morphTargetInfluences[ 5 ];\n\ttransformed += morphTarget6 * morphTargetInfluences[ 6 ];\n\ttransformed += morphTarget7 * morphTargetInfluences[ 7 ];\n\t#endif\n#endif", +normal_fragment_begin:"#ifdef FLAT_SHADED\n\tvec3 fdx = vec3( dFdx( vViewPosition.x ), dFdx( vViewPosition.y ), dFdx( vViewPosition.z ) );\n\tvec3 fdy = vec3( dFdy( vViewPosition.x ), dFdy( vViewPosition.y ), dFdy( vViewPosition.z ) );\n\tvec3 normal = normalize( cross( fdx, fdy ) );\n#else\n\tvec3 normal = normalize( vNormal );\n\t#ifdef DOUBLE_SIDED\n\t\tnormal = normal * ( float( gl_FrontFacing ) * 2.0 - 1.0 );\n\t#endif\n\t#ifdef USE_TANGENT\n\t\tvec3 tangent = normalize( vTangent );\n\t\tvec3 bitangent = normalize( vBitangent );\n\t\t#ifdef DOUBLE_SIDED\n\t\t\ttangent = tangent * ( float( gl_FrontFacing ) * 2.0 - 1.0 );\n\t\t\tbitangent = bitangent * ( float( gl_FrontFacing ) * 2.0 - 1.0 );\n\t\t#endif\n\t\t#if defined( TANGENTSPACE_NORMALMAP ) || defined( USE_CLEARCOAT_NORMALMAP )\n\t\t\tmat3 vTBN = mat3( tangent, bitangent, normal );\n\t\t#endif\n\t#endif\n#endif\nvec3 geometryNormal = normal;", +normal_fragment_maps:"#ifdef OBJECTSPACE_NORMALMAP\n\tnormal = texture2D( normalMap, vUv ).xyz * 2.0 - 1.0;\n\t#ifdef FLIP_SIDED\n\t\tnormal = - normal;\n\t#endif\n\t#ifdef DOUBLE_SIDED\n\t\tnormal = normal * ( float( gl_FrontFacing ) * 2.0 - 1.0 );\n\t#endif\n\tnormal = normalize( normalMatrix * normal );\n#elif defined( TANGENTSPACE_NORMALMAP )\n\tvec3 mapN = texture2D( normalMap, vUv ).xyz * 2.0 - 1.0;\n\tmapN.xy *= normalScale;\n\t#ifdef USE_TANGENT\n\t\tnormal = normalize( vTBN * mapN );\n\t#else\n\t\tnormal = perturbNormal2Arb( -vViewPosition, normal, mapN );\n\t#endif\n#elif defined( USE_BUMPMAP )\n\tnormal = perturbNormalArb( -vViewPosition, normal, dHdxy_fwd() );\n#endif", +normalmap_pars_fragment:"#ifdef USE_NORMALMAP\n\tuniform sampler2D normalMap;\n\tuniform vec2 normalScale;\n#endif\n#ifdef OBJECTSPACE_NORMALMAP\n\tuniform mat3 normalMatrix;\n#endif\n#if ! defined ( USE_TANGENT ) && ( defined ( TANGENTSPACE_NORMALMAP ) || defined ( USE_CLEARCOAT_NORMALMAP ) )\n\tvec3 perturbNormal2Arb( vec3 eye_pos, vec3 surf_norm, vec3 mapN ) {\n\t\tvec3 q0 = vec3( dFdx( eye_pos.x ), dFdx( eye_pos.y ), dFdx( eye_pos.z ) );\n\t\tvec3 q1 = vec3( dFdy( eye_pos.x ), dFdy( eye_pos.y ), dFdy( eye_pos.z ) );\n\t\tvec2 st0 = dFdx( vUv.st );\n\t\tvec2 st1 = dFdy( vUv.st );\n\t\tfloat scale = sign( st1.t * st0.s - st0.t * st1.s );\n\t\tvec3 S = normalize( ( q0 * st1.t - q1 * st0.t ) * scale );\n\t\tvec3 T = normalize( ( - q0 * st1.s + q1 * st0.s ) * scale );\n\t\tvec3 N = normalize( surf_norm );\n\t\tmat3 tsn = mat3( S, T, N );\n\t\tmapN.xy *= ( float( gl_FrontFacing ) * 2.0 - 1.0 );\n\t\treturn normalize( tsn * mapN );\n\t}\n#endif", +clearcoat_normal_fragment_begin:"#ifdef CLEARCOAT\n\tvec3 clearcoatNormal = geometryNormal;\n#endif",clearcoat_normal_fragment_maps:"#ifdef USE_CLEARCOAT_NORMALMAP\n\tvec3 clearcoatMapN = texture2D( clearcoatNormalMap, vUv ).xyz * 2.0 - 1.0;\n\tclearcoatMapN.xy *= clearcoatNormalScale;\n\t#ifdef USE_TANGENT\n\t\tclearcoatNormal = normalize( vTBN * clearcoatMapN );\n\t#else\n\t\tclearcoatNormal = perturbNormal2Arb( - vViewPosition, clearcoatNormal, clearcoatMapN );\n\t#endif\n#endif",clearcoat_pars_fragment:"#ifdef USE_CLEARCOATMAP\n\tuniform sampler2D clearcoatMap;\n#endif\n#ifdef USE_CLEARCOAT_ROUGHNESSMAP\n\tuniform sampler2D clearcoatRoughnessMap;\n#endif\n#ifdef USE_CLEARCOAT_NORMALMAP\n\tuniform sampler2D clearcoatNormalMap;\n\tuniform vec2 clearcoatNormalScale;\n#endif", +packing:"vec3 packNormalToRGB( const in vec3 normal ) {\n\treturn normalize( normal ) * 0.5 + 0.5;\n}\nvec3 unpackRGBToNormal( const in vec3 rgb ) {\n\treturn 2.0 * rgb.xyz - 1.0;\n}\nconst float PackUpscale = 256. / 255.;const float UnpackDownscale = 255. / 256.;\nconst vec3 PackFactors = vec3( 256. * 256. * 256., 256. * 256., 256. );\nconst vec4 UnpackFactors = UnpackDownscale / vec4( PackFactors, 1. );\nconst float ShiftRight8 = 1. / 256.;\nvec4 packDepthToRGBA( const in float v ) {\n\tvec4 r = vec4( fract( v * PackFactors ), v );\n\tr.yzw -= r.xyz * ShiftRight8;\treturn r * PackUpscale;\n}\nfloat unpackRGBAToDepth( const in vec4 v ) {\n\treturn dot( v, UnpackFactors );\n}\nvec4 pack2HalfToRGBA( vec2 v ) {\n\tvec4 r = vec4( v.x, fract( v.x * 255.0 ), v.y, fract( v.y * 255.0 ));\n\treturn vec4( r.x - r.y / 255.0, r.y, r.z - r.w / 255.0, r.w);\n}\nvec2 unpackRGBATo2Half( vec4 v ) {\n\treturn vec2( v.x + ( v.y / 255.0 ), v.z + ( v.w / 255.0 ) );\n}\nfloat viewZToOrthographicDepth( const in float viewZ, const in float near, const in float far ) {\n\treturn ( viewZ + near ) / ( near - far );\n}\nfloat orthographicDepthToViewZ( const in float linearClipZ, const in float near, const in float far ) {\n\treturn linearClipZ * ( near - far ) - near;\n}\nfloat viewZToPerspectiveDepth( const in float viewZ, const in float near, const in float far ) {\n\treturn (( near + viewZ ) * far ) / (( far - near ) * viewZ );\n}\nfloat perspectiveDepthToViewZ( const in float invClipZ, const in float near, const in float far ) {\n\treturn ( near * far ) / ( ( far - near ) * invClipZ - far );\n}", +premultiplied_alpha_fragment:"#ifdef PREMULTIPLIED_ALPHA\n\tgl_FragColor.rgb *= gl_FragColor.a;\n#endif",project_vertex:"vec4 mvPosition = vec4( transformed, 1.0 );\n#ifdef USE_INSTANCING\n\tmvPosition = instanceMatrix * mvPosition;\n#endif\nmvPosition = modelViewMatrix * mvPosition;\ngl_Position = projectionMatrix * mvPosition;",dithering_fragment:"#ifdef DITHERING\n\tgl_FragColor.rgb = dithering( gl_FragColor.rgb );\n#endif",dithering_pars_fragment:"#ifdef DITHERING\n\tvec3 dithering( vec3 color ) {\n\t\tfloat grid_position = rand( gl_FragCoord.xy );\n\t\tvec3 dither_shift_RGB = vec3( 0.25 / 255.0, -0.25 / 255.0, 0.25 / 255.0 );\n\t\tdither_shift_RGB = mix( 2.0 * dither_shift_RGB, -2.0 * dither_shift_RGB, grid_position );\n\t\treturn color + dither_shift_RGB;\n\t}\n#endif", +roughnessmap_fragment:"float roughnessFactor = roughness;\n#ifdef USE_ROUGHNESSMAP\n\tvec4 texelRoughness = texture2D( roughnessMap, vUv );\n\troughnessFactor *= texelRoughness.g;\n#endif",roughnessmap_pars_fragment:"#ifdef USE_ROUGHNESSMAP\n\tuniform sampler2D roughnessMap;\n#endif",shadowmap_pars_fragment:"#ifdef USE_SHADOWMAP\n\t#if NUM_DIR_LIGHT_SHADOWS > 0\n\t\tuniform sampler2D directionalShadowMap[ NUM_DIR_LIGHT_SHADOWS ];\n\t\tvarying vec4 vDirectionalShadowCoord[ NUM_DIR_LIGHT_SHADOWS ];\n\t#endif\n\t#if NUM_SPOT_LIGHT_SHADOWS > 0\n\t\tuniform sampler2D spotShadowMap[ NUM_SPOT_LIGHT_SHADOWS ];\n\t\tvarying vec4 vSpotShadowCoord[ NUM_SPOT_LIGHT_SHADOWS ];\n\t#endif\n\t#if NUM_POINT_LIGHT_SHADOWS > 0\n\t\tuniform sampler2D pointShadowMap[ NUM_POINT_LIGHT_SHADOWS ];\n\t\tvarying vec4 vPointShadowCoord[ NUM_POINT_LIGHT_SHADOWS ];\n\t#endif\n\tfloat texture2DCompare( sampler2D depths, vec2 uv, float compare ) {\n\t\treturn step( compare, unpackRGBAToDepth( texture2D( depths, uv ) ) );\n\t}\n\tvec2 texture2DDistribution( sampler2D shadow, vec2 uv ) {\n\t\treturn unpackRGBATo2Half( texture2D( shadow, uv ) );\n\t}\n\tfloat VSMShadow (sampler2D shadow, vec2 uv, float compare ){\n\t\tfloat occlusion = 1.0;\n\t\tvec2 distribution = texture2DDistribution( shadow, uv );\n\t\tfloat hard_shadow = step( compare , distribution.x );\n\t\tif (hard_shadow != 1.0 ) {\n\t\t\tfloat distance = compare - distribution.x ;\n\t\t\tfloat variance = max( 0.00000, distribution.y * distribution.y );\n\t\t\tfloat softness_probability = variance / (variance + distance * distance );\t\t\tsoftness_probability = clamp( ( softness_probability - 0.3 ) / ( 0.95 - 0.3 ), 0.0, 1.0 );\t\t\tocclusion = clamp( max( hard_shadow, softness_probability ), 0.0, 1.0 );\n\t\t}\n\t\treturn occlusion;\n\t}\n\tfloat getShadow( sampler2D shadowMap, vec2 shadowMapSize, float shadowBias, float shadowRadius, vec4 shadowCoord ) {\n\t\tfloat shadow = 1.0;\n\t\tshadowCoord.xyz /= shadowCoord.w;\n\t\tshadowCoord.z += shadowBias;\n\t\tbvec4 inFrustumVec = bvec4 ( shadowCoord.x >= 0.0, shadowCoord.x <= 1.0, shadowCoord.y >= 0.0, shadowCoord.y <= 1.0 );\n\t\tbool inFrustum = all( inFrustumVec );\n\t\tbvec2 frustumTestVec = bvec2( inFrustum, shadowCoord.z <= 1.0 );\n\t\tbool frustumTest = all( frustumTestVec );\n\t\tif ( frustumTest ) {\n\t\t#if defined( SHADOWMAP_TYPE_PCF )\n\t\t\tvec2 texelSize = vec2( 1.0 ) / shadowMapSize;\n\t\t\tfloat dx0 = - texelSize.x * shadowRadius;\n\t\t\tfloat dy0 = - texelSize.y * shadowRadius;\n\t\t\tfloat dx1 = + texelSize.x * shadowRadius;\n\t\t\tfloat dy1 = + texelSize.y * shadowRadius;\n\t\t\tfloat dx2 = dx0 / 2.0;\n\t\t\tfloat dy2 = dy0 / 2.0;\n\t\t\tfloat dx3 = dx1 / 2.0;\n\t\t\tfloat dy3 = dy1 / 2.0;\n\t\t\tshadow = (\n\t\t\t\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( dx0, dy0 ), shadowCoord.z ) +\n\t\t\t\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( 0.0, dy0 ), shadowCoord.z ) +\n\t\t\t\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( dx1, dy0 ), shadowCoord.z ) +\n\t\t\t\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( dx2, dy2 ), shadowCoord.z ) +\n\t\t\t\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( 0.0, dy2 ), shadowCoord.z ) +\n\t\t\t\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( dx3, dy2 ), shadowCoord.z ) +\n\t\t\t\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( dx0, 0.0 ), shadowCoord.z ) +\n\t\t\t\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( dx2, 0.0 ), shadowCoord.z ) +\n\t\t\t\ttexture2DCompare( shadowMap, shadowCoord.xy, shadowCoord.z ) +\n\t\t\t\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( dx3, 0.0 ), shadowCoord.z ) +\n\t\t\t\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( dx1, 0.0 ), shadowCoord.z ) +\n\t\t\t\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( dx2, dy3 ), shadowCoord.z ) +\n\t\t\t\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( 0.0, dy3 ), shadowCoord.z ) +\n\t\t\t\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( dx3, dy3 ), shadowCoord.z ) +\n\t\t\t\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( dx0, dy1 ), shadowCoord.z ) +\n\t\t\t\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( 0.0, dy1 ), shadowCoord.z ) +\n\t\t\t\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( dx1, dy1 ), shadowCoord.z )\n\t\t\t) * ( 1.0 / 17.0 );\n\t\t#elif defined( SHADOWMAP_TYPE_PCF_SOFT )\n\t\t\tvec2 texelSize = vec2( 1.0 ) / shadowMapSize;\n\t\t\tfloat dx = texelSize.x;\n\t\t\tfloat dy = texelSize.y;\n\t\t\tvec2 uv = shadowCoord.xy;\n\t\t\tvec2 f = fract( uv * shadowMapSize + 0.5 );\n\t\t\tuv -= f * texelSize;\n\t\t\tshadow = (\n\t\t\t\ttexture2DCompare( shadowMap, uv, shadowCoord.z ) +\n\t\t\t\ttexture2DCompare( shadowMap, uv + vec2( dx, 0.0 ), shadowCoord.z ) +\n\t\t\t\ttexture2DCompare( shadowMap, uv + vec2( 0.0, dy ), shadowCoord.z ) +\n\t\t\t\ttexture2DCompare( shadowMap, uv + texelSize, shadowCoord.z ) +\n\t\t\t\tmix( texture2DCompare( shadowMap, uv + vec2( -dx, 0.0 ), shadowCoord.z ), \n\t\t\t\t\t texture2DCompare( shadowMap, uv + vec2( 2.0 * dx, 0.0 ), shadowCoord.z ),\n\t\t\t\t\t f.x ) +\n\t\t\t\tmix( texture2DCompare( shadowMap, uv + vec2( -dx, dy ), shadowCoord.z ), \n\t\t\t\t\t texture2DCompare( shadowMap, uv + vec2( 2.0 * dx, dy ), shadowCoord.z ),\n\t\t\t\t\t f.x ) +\n\t\t\t\tmix( texture2DCompare( shadowMap, uv + vec2( 0.0, -dy ), shadowCoord.z ), \n\t\t\t\t\t texture2DCompare( shadowMap, uv + vec2( 0.0, 2.0 * dy ), shadowCoord.z ),\n\t\t\t\t\t f.y ) +\n\t\t\t\tmix( texture2DCompare( shadowMap, uv + vec2( dx, -dy ), shadowCoord.z ), \n\t\t\t\t\t texture2DCompare( shadowMap, uv + vec2( dx, 2.0 * dy ), shadowCoord.z ),\n\t\t\t\t\t f.y ) +\n\t\t\t\tmix( mix( texture2DCompare( shadowMap, uv + vec2( -dx, -dy ), shadowCoord.z ), \n\t\t\t\t\t\t texture2DCompare( shadowMap, uv + vec2( 2.0 * dx, -dy ), shadowCoord.z ),\n\t\t\t\t\t\t f.x ),\n\t\t\t\t\t mix( texture2DCompare( shadowMap, uv + vec2( -dx, 2.0 * dy ), shadowCoord.z ), \n\t\t\t\t\t\t texture2DCompare( shadowMap, uv + vec2( 2.0 * dx, 2.0 * dy ), shadowCoord.z ),\n\t\t\t\t\t\t f.x ),\n\t\t\t\t\t f.y )\n\t\t\t) * ( 1.0 / 9.0 );\n\t\t#elif defined( SHADOWMAP_TYPE_VSM )\n\t\t\tshadow = VSMShadow( shadowMap, shadowCoord.xy, shadowCoord.z );\n\t\t#else\n\t\t\tshadow = texture2DCompare( shadowMap, shadowCoord.xy, shadowCoord.z );\n\t\t#endif\n\t\t}\n\t\treturn shadow;\n\t}\n\tvec2 cubeToUV( vec3 v, float texelSizeY ) {\n\t\tvec3 absV = abs( v );\n\t\tfloat scaleToCube = 1.0 / max( absV.x, max( absV.y, absV.z ) );\n\t\tabsV *= scaleToCube;\n\t\tv *= scaleToCube * ( 1.0 - 2.0 * texelSizeY );\n\t\tvec2 planar = v.xy;\n\t\tfloat almostATexel = 1.5 * texelSizeY;\n\t\tfloat almostOne = 1.0 - almostATexel;\n\t\tif ( absV.z >= almostOne ) {\n\t\t\tif ( v.z > 0.0 )\n\t\t\t\tplanar.x = 4.0 - v.x;\n\t\t} else if ( absV.x >= almostOne ) {\n\t\t\tfloat signX = sign( v.x );\n\t\t\tplanar.x = v.z * signX + 2.0 * signX;\n\t\t} else if ( absV.y >= almostOne ) {\n\t\t\tfloat signY = sign( v.y );\n\t\t\tplanar.x = v.x + 2.0 * signY + 2.0;\n\t\t\tplanar.y = v.z * signY - 2.0;\n\t\t}\n\t\treturn vec2( 0.125, 0.25 ) * planar + vec2( 0.375, 0.75 );\n\t}\n\tfloat getPointShadow( sampler2D shadowMap, vec2 shadowMapSize, float shadowBias, float shadowRadius, vec4 shadowCoord, float shadowCameraNear, float shadowCameraFar ) {\n\t\tvec2 texelSize = vec2( 1.0 ) / ( shadowMapSize * vec2( 4.0, 2.0 ) );\n\t\tvec3 lightToPosition = shadowCoord.xyz;\n\t\tfloat dp = ( length( lightToPosition ) - shadowCameraNear ) / ( shadowCameraFar - shadowCameraNear );\t\tdp += shadowBias;\n\t\tvec3 bd3D = normalize( lightToPosition );\n\t\t#if defined( SHADOWMAP_TYPE_PCF ) || defined( SHADOWMAP_TYPE_PCF_SOFT ) || defined( SHADOWMAP_TYPE_VSM )\n\t\t\tvec2 offset = vec2( - 1, 1 ) * shadowRadius * texelSize.y;\n\t\t\treturn (\n\t\t\t\ttexture2DCompare( shadowMap, cubeToUV( bd3D + offset.xyy, texelSize.y ), dp ) +\n\t\t\t\ttexture2DCompare( shadowMap, cubeToUV( bd3D + offset.yyy, texelSize.y ), dp ) +\n\t\t\t\ttexture2DCompare( shadowMap, cubeToUV( bd3D + offset.xyx, texelSize.y ), dp ) +\n\t\t\t\ttexture2DCompare( shadowMap, cubeToUV( bd3D + offset.yyx, texelSize.y ), dp ) +\n\t\t\t\ttexture2DCompare( shadowMap, cubeToUV( bd3D, texelSize.y ), dp ) +\n\t\t\t\ttexture2DCompare( shadowMap, cubeToUV( bd3D + offset.xxy, texelSize.y ), dp ) +\n\t\t\t\ttexture2DCompare( shadowMap, cubeToUV( bd3D + offset.yxy, texelSize.y ), dp ) +\n\t\t\t\ttexture2DCompare( shadowMap, cubeToUV( bd3D + offset.xxx, texelSize.y ), dp ) +\n\t\t\t\ttexture2DCompare( shadowMap, cubeToUV( bd3D + offset.yxx, texelSize.y ), dp )\n\t\t\t) * ( 1.0 / 9.0 );\n\t\t#else\n\t\t\treturn texture2DCompare( shadowMap, cubeToUV( bd3D, texelSize.y ), dp );\n\t\t#endif\n\t}\n#endif", +shadowmap_pars_vertex:"#ifdef USE_SHADOWMAP\n\t#if NUM_DIR_LIGHT_SHADOWS > 0\n\t\tuniform mat4 directionalShadowMatrix[ NUM_DIR_LIGHT_SHADOWS ];\n\t\tvarying vec4 vDirectionalShadowCoord[ NUM_DIR_LIGHT_SHADOWS ];\n\t#endif\n\t#if NUM_SPOT_LIGHT_SHADOWS > 0\n\t\tuniform mat4 spotShadowMatrix[ NUM_SPOT_LIGHT_SHADOWS ];\n\t\tvarying vec4 vSpotShadowCoord[ NUM_SPOT_LIGHT_SHADOWS ];\n\t#endif\n\t#if NUM_POINT_LIGHT_SHADOWS > 0\n\t\tuniform mat4 pointShadowMatrix[ NUM_POINT_LIGHT_SHADOWS ];\n\t\tvarying vec4 vPointShadowCoord[ NUM_POINT_LIGHT_SHADOWS ];\n\t#endif\n#endif", +shadowmap_vertex:"#ifdef USE_SHADOWMAP\n\t#if NUM_DIR_LIGHT_SHADOWS > 0\n\t#pragma unroll_loop_start\n\tfor ( int i = 0; i < NUM_DIR_LIGHT_SHADOWS; i ++ ) {\n\t\tvDirectionalShadowCoord[ i ] = directionalShadowMatrix[ i ] * worldPosition;\n\t}\n\t#pragma unroll_loop_end\n\t#endif\n\t#if NUM_SPOT_LIGHT_SHADOWS > 0\n\t#pragma unroll_loop_start\n\tfor ( int i = 0; i < NUM_SPOT_LIGHT_SHADOWS; i ++ ) {\n\t\tvSpotShadowCoord[ i ] = spotShadowMatrix[ i ] * worldPosition;\n\t}\n\t#pragma unroll_loop_end\n\t#endif\n\t#if NUM_POINT_LIGHT_SHADOWS > 0\n\t#pragma unroll_loop_start\n\tfor ( int i = 0; i < NUM_POINT_LIGHT_SHADOWS; i ++ ) {\n\t\tvPointShadowCoord[ i ] = pointShadowMatrix[ i ] * worldPosition;\n\t}\n\t#pragma unroll_loop_end\n\t#endif\n#endif", +shadowmask_pars_fragment:"float getShadowMask() {\n\tfloat shadow = 1.0;\n\t#ifdef USE_SHADOWMAP\n\t#if NUM_DIR_LIGHT_SHADOWS > 0\n\tDirectionalLightShadow directionalLight;\n\t#pragma unroll_loop_start\n\tfor ( int i = 0; i < NUM_DIR_LIGHT_SHADOWS; i ++ ) {\n\t\tdirectionalLight = directionalLightShadows[ i ];\n\t\tshadow *= receiveShadow ? getShadow( directionalShadowMap[ i ], directionalLight.shadowMapSize, directionalLight.shadowBias, directionalLight.shadowRadius, vDirectionalShadowCoord[ i ] ) : 1.0;\n\t}\n\t#pragma unroll_loop_end\n\t#endif\n\t#if NUM_SPOT_LIGHT_SHADOWS > 0\n\tSpotLightShadow spotLight;\n\t#pragma unroll_loop_start\n\tfor ( int i = 0; i < NUM_SPOT_LIGHT_SHADOWS; i ++ ) {\n\t\tspotLight = spotLightShadows[ i ];\n\t\tshadow *= receiveShadow ? getShadow( spotShadowMap[ i ], spotLight.shadowMapSize, spotLight.shadowBias, spotLight.shadowRadius, vSpotShadowCoord[ i ] ) : 1.0;\n\t}\n\t#pragma unroll_loop_end\n\t#endif\n\t#if NUM_POINT_LIGHT_SHADOWS > 0\n\tPointLightShadow pointLight;\n\t#pragma unroll_loop_start\n\tfor ( int i = 0; i < NUM_POINT_LIGHT_SHADOWS; i ++ ) {\n\t\tpointLight = pointLightShadows[ i ];\n\t\tshadow *= receiveShadow ? getPointShadow( pointShadowMap[ i ], pointLight.shadowMapSize, pointLight.shadowBias, pointLight.shadowRadius, vPointShadowCoord[ i ], pointLight.shadowCameraNear, pointLight.shadowCameraFar ) : 1.0;\n\t}\n\t#pragma unroll_loop_end\n\t#endif\n\t#endif\n\treturn shadow;\n}", +skinbase_vertex:"#ifdef USE_SKINNING\n\tmat4 boneMatX = getBoneMatrix( skinIndex.x );\n\tmat4 boneMatY = getBoneMatrix( skinIndex.y );\n\tmat4 boneMatZ = getBoneMatrix( skinIndex.z );\n\tmat4 boneMatW = getBoneMatrix( skinIndex.w );\n#endif",skinning_pars_vertex:"#ifdef USE_SKINNING\n\tuniform mat4 bindMatrix;\n\tuniform mat4 bindMatrixInverse;\n\t#ifdef BONE_TEXTURE\n\t\tuniform highp sampler2D boneTexture;\n\t\tuniform int boneTextureSize;\n\t\tmat4 getBoneMatrix( const in float i ) {\n\t\t\tfloat j = i * 4.0;\n\t\t\tfloat x = mod( j, float( boneTextureSize ) );\n\t\t\tfloat y = floor( j / float( boneTextureSize ) );\n\t\t\tfloat dx = 1.0 / float( boneTextureSize );\n\t\t\tfloat dy = 1.0 / float( boneTextureSize );\n\t\t\ty = dy * ( y + 0.5 );\n\t\t\tvec4 v1 = texture2D( boneTexture, vec2( dx * ( x + 0.5 ), y ) );\n\t\t\tvec4 v2 = texture2D( boneTexture, vec2( dx * ( x + 1.5 ), y ) );\n\t\t\tvec4 v3 = texture2D( boneTexture, vec2( dx * ( x + 2.5 ), y ) );\n\t\t\tvec4 v4 = texture2D( boneTexture, vec2( dx * ( x + 3.5 ), y ) );\n\t\t\tmat4 bone = mat4( v1, v2, v3, v4 );\n\t\t\treturn bone;\n\t\t}\n\t#else\n\t\tuniform mat4 boneMatrices[ MAX_BONES ];\n\t\tmat4 getBoneMatrix( const in float i ) {\n\t\t\tmat4 bone = boneMatrices[ int(i) ];\n\t\t\treturn bone;\n\t\t}\n\t#endif\n#endif", +skinning_vertex:"#ifdef USE_SKINNING\n\tvec4 skinVertex = bindMatrix * vec4( transformed, 1.0 );\n\tvec4 skinned = vec4( 0.0 );\n\tskinned += boneMatX * skinVertex * skinWeight.x;\n\tskinned += boneMatY * skinVertex * skinWeight.y;\n\tskinned += boneMatZ * skinVertex * skinWeight.z;\n\tskinned += boneMatW * skinVertex * skinWeight.w;\n\ttransformed = ( bindMatrixInverse * skinned ).xyz;\n#endif",skinnormal_vertex:"#ifdef USE_SKINNING\n\tmat4 skinMatrix = mat4( 0.0 );\n\tskinMatrix += skinWeight.x * boneMatX;\n\tskinMatrix += skinWeight.y * boneMatY;\n\tskinMatrix += skinWeight.z * boneMatZ;\n\tskinMatrix += skinWeight.w * boneMatW;\n\tskinMatrix = bindMatrixInverse * skinMatrix * bindMatrix;\n\tobjectNormal = vec4( skinMatrix * vec4( objectNormal, 0.0 ) ).xyz;\n\t#ifdef USE_TANGENT\n\t\tobjectTangent = vec4( skinMatrix * vec4( objectTangent, 0.0 ) ).xyz;\n\t#endif\n#endif", +specularmap_fragment:"float specularStrength;\n#ifdef USE_SPECULARMAP\n\tvec4 texelSpecular = texture2D( specularMap, vUv );\n\tspecularStrength = texelSpecular.r;\n#else\n\tspecularStrength = 1.0;\n#endif",specularmap_pars_fragment:"#ifdef USE_SPECULARMAP\n\tuniform sampler2D specularMap;\n#endif",tonemapping_fragment:"#if defined( TONE_MAPPING )\n\tgl_FragColor.rgb = toneMapping( gl_FragColor.rgb );\n#endif",tonemapping_pars_fragment:"#ifndef saturate\n#define saturate(a) clamp( a, 0.0, 1.0 )\n#endif\nuniform float toneMappingExposure;\nuniform float toneMappingWhitePoint;\nvec3 LinearToneMapping( vec3 color ) {\n\treturn toneMappingExposure * color;\n}\nvec3 ReinhardToneMapping( vec3 color ) {\n\tcolor *= toneMappingExposure;\n\treturn saturate( color / ( vec3( 1.0 ) + color ) );\n}\n#define Uncharted2Helper( x ) max( ( ( x * ( 0.15 * x + 0.10 * 0.50 ) + 0.20 * 0.02 ) / ( x * ( 0.15 * x + 0.50 ) + 0.20 * 0.30 ) ) - 0.02 / 0.30, vec3( 0.0 ) )\nvec3 Uncharted2ToneMapping( vec3 color ) {\n\tcolor *= toneMappingExposure;\n\treturn saturate( Uncharted2Helper( color ) / Uncharted2Helper( vec3( toneMappingWhitePoint ) ) );\n}\nvec3 OptimizedCineonToneMapping( vec3 color ) {\n\tcolor *= toneMappingExposure;\n\tcolor = max( vec3( 0.0 ), color - 0.004 );\n\treturn pow( ( color * ( 6.2 * color + 0.5 ) ) / ( color * ( 6.2 * color + 1.7 ) + 0.06 ), vec3( 2.2 ) );\n}\nvec3 ACESFilmicToneMapping( vec3 color ) {\n\tcolor *= toneMappingExposure;\n\treturn saturate( ( color * ( 2.51 * color + 0.03 ) ) / ( color * ( 2.43 * color + 0.59 ) + 0.14 ) );\n}", +uv_pars_fragment:"#if ( defined( USE_UV ) && ! defined( UVS_VERTEX_ONLY ) )\n\tvarying vec2 vUv;\n#endif",uv_pars_vertex:"#ifdef USE_UV\n\t#ifdef UVS_VERTEX_ONLY\n\t\tvec2 vUv;\n\t#else\n\t\tvarying vec2 vUv;\n\t#endif\n\tuniform mat3 uvTransform;\n#endif",uv_vertex:"#ifdef USE_UV\n\tvUv = ( uvTransform * vec3( uv, 1 ) ).xy;\n#endif",uv2_pars_fragment:"#if defined( USE_LIGHTMAP ) || defined( USE_AOMAP )\n\tvarying vec2 vUv2;\n#endif",uv2_pars_vertex:"#if defined( USE_LIGHTMAP ) || defined( USE_AOMAP )\n\tattribute vec2 uv2;\n\tvarying vec2 vUv2;\n\tuniform mat3 uv2Transform;\n#endif", +uv2_vertex:"#if defined( USE_LIGHTMAP ) || defined( USE_AOMAP )\n\tvUv2 = ( uv2Transform * vec3( uv2, 1 ) ).xy;\n#endif",worldpos_vertex:"#if defined( USE_ENVMAP ) || defined( DISTANCE ) || defined ( USE_SHADOWMAP )\n\tvec4 worldPosition = vec4( transformed, 1.0 );\n\t#ifdef USE_INSTANCING\n\t\tworldPosition = instanceMatrix * worldPosition;\n\t#endif\n\tworldPosition = modelMatrix * worldPosition;\n#endif",background_frag:"uniform sampler2D t2D;\nvarying vec2 vUv;\nvoid main() {\n\tvec4 texColor = texture2D( t2D, vUv );\n\tgl_FragColor = mapTexelToLinear( texColor );\n\t#include \n\t#include \n}", +background_vert:"varying vec2 vUv;\nuniform mat3 uvTransform;\nvoid main() {\n\tvUv = ( uvTransform * vec3( uv, 1 ) ).xy;\n\tgl_Position = vec4( position.xy, 1.0, 1.0 );\n}",cube_frag:"#include \nuniform float opacity;\nvarying vec3 vWorldDirection;\n#include \nvoid main() {\n\tvec3 vReflect = vWorldDirection;\n\t#include \n\tgl_FragColor = envColor;\n\tgl_FragColor.a *= opacity;\n\t#include \n\t#include \n}", +cube_vert:"varying vec3 vWorldDirection;\n#include \nvoid main() {\n\tvWorldDirection = transformDirection( position, modelMatrix );\n\t#include \n\t#include \n\tgl_Position.z = gl_Position.w;\n}",depth_frag:"#if DEPTH_PACKING == 3200\n\tuniform float opacity;\n#endif\n#include \n#include \n#include \n#include \n#include \n#include \n#include \nvarying vec2 vHighPrecisionZW;\nvoid main() {\n\t#include \n\tvec4 diffuseColor = vec4( 1.0 );\n\t#if DEPTH_PACKING == 3200\n\t\tdiffuseColor.a = opacity;\n\t#endif\n\t#include \n\t#include \n\t#include \n\t#include \n\tfloat fragCoordZ = 0.5 * vHighPrecisionZW[0] / vHighPrecisionZW[1] + 0.5;\n\t#if DEPTH_PACKING == 3200\n\t\tgl_FragColor = vec4( vec3( 1.0 - fragCoordZ ), opacity );\n\t#elif DEPTH_PACKING == 3201\n\t\tgl_FragColor = packDepthToRGBA( fragCoordZ );\n\t#endif\n}", +depth_vert:"#include \n#include \n#include \n#include \n#include \n#include \n#include \nvarying vec2 vHighPrecisionZW;\nvoid main() {\n\t#include \n\t#include \n\t#ifdef USE_DISPLACEMENTMAP\n\t\t#include \n\t\t#include \n\t\t#include \n\t#endif\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\tvHighPrecisionZW = gl_Position.zw;\n}", +distanceRGBA_frag:"#define DISTANCE\nuniform vec3 referencePosition;\nuniform float nearDistance;\nuniform float farDistance;\nvarying vec3 vWorldPosition;\n#include \n#include \n#include \n#include \n#include \n#include \nvoid main () {\n\t#include \n\tvec4 diffuseColor = vec4( 1.0 );\n\t#include \n\t#include \n\t#include \n\tfloat dist = length( vWorldPosition - referencePosition );\n\tdist = ( dist - nearDistance ) / ( farDistance - nearDistance );\n\tdist = saturate( dist );\n\tgl_FragColor = packDepthToRGBA( dist );\n}", +distanceRGBA_vert:"#define DISTANCE\nvarying vec3 vWorldPosition;\n#include \n#include \n#include \n#include \n#include \n#include \nvoid main() {\n\t#include \n\t#include \n\t#ifdef USE_DISPLACEMENTMAP\n\t\t#include \n\t\t#include \n\t\t#include \n\t#endif\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\tvWorldPosition = worldPosition.xyz;\n}", +equirect_frag:"uniform sampler2D tEquirect;\nvarying vec3 vWorldDirection;\n#include \nvoid main() {\n\tvec3 direction = normalize( vWorldDirection );\n\tvec2 sampleUV = equirectUv( direction );\n\tvec4 texColor = texture2D( tEquirect, sampleUV );\n\tgl_FragColor = mapTexelToLinear( texColor );\n\t#include \n\t#include \n}",equirect_vert:"varying vec3 vWorldDirection;\n#include \nvoid main() {\n\tvWorldDirection = transformDirection( position, modelMatrix );\n\t#include \n\t#include \n}", +linedashed_frag:"uniform vec3 diffuse;\nuniform float opacity;\nuniform float dashSize;\nuniform float totalSize;\nvarying float vLineDistance;\n#include \n#include \n#include \n#include \n#include \nvoid main() {\n\t#include \n\tif ( mod( vLineDistance, totalSize ) > dashSize ) {\n\t\tdiscard;\n\t}\n\tvec3 outgoingLight = vec3( 0.0 );\n\tvec4 diffuseColor = vec4( diffuse, opacity );\n\t#include \n\t#include \n\toutgoingLight = diffuseColor.rgb;\n\tgl_FragColor = vec4( outgoingLight, diffuseColor.a );\n\t#include \n\t#include \n\t#include \n\t#include \n}", +linedashed_vert:"uniform float scale;\nattribute float lineDistance;\nvarying float vLineDistance;\n#include \n#include \n#include \n#include \n#include \n#include \nvoid main() {\n\tvLineDistance = scale * lineDistance;\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n}", +meshbasic_frag:"uniform vec3 diffuse;\nuniform float opacity;\n#ifndef FLAT_SHADED\n\tvarying vec3 vNormal;\n#endif\n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \nvoid main() {\n\t#include \n\tvec4 diffuseColor = vec4( diffuse, opacity );\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\tReflectedLight reflectedLight = ReflectedLight( vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ) );\n\t#ifdef USE_LIGHTMAP\n\t\n\t\tvec4 lightMapTexel= texture2D( lightMap, vUv2 );\n\t\treflectedLight.indirectDiffuse += lightMapTexelToLinear( lightMapTexel ).rgb * lightMapIntensity;\n\t#else\n\t\treflectedLight.indirectDiffuse += vec3( 1.0 );\n\t#endif\n\t#include \n\treflectedLight.indirectDiffuse *= diffuseColor.rgb;\n\tvec3 outgoingLight = reflectedLight.indirectDiffuse;\n\t#include \n\tgl_FragColor = vec4( outgoingLight, diffuseColor.a );\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n}", +meshbasic_vert:"#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \nvoid main() {\n\t#include \n\t#include \n\t#include \n\t#include \n\t#ifdef USE_ENVMAP\n\t#include \n\t#include \n\t#include \n\t#include \n\t#endif\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n}", +meshlambert_frag:"uniform vec3 diffuse;\nuniform vec3 emissive;\nuniform float opacity;\nvarying vec3 vLightFront;\nvarying vec3 vIndirectFront;\n#ifdef DOUBLE_SIDED\n\tvarying vec3 vLightBack;\n\tvarying vec3 vIndirectBack;\n#endif\n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \nvoid main() {\n\t#include \n\tvec4 diffuseColor = vec4( diffuse, opacity );\n\tReflectedLight reflectedLight = ReflectedLight( vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ) );\n\tvec3 totalEmissiveRadiance = emissive;\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#ifdef DOUBLE_SIDED\n\t\treflectedLight.indirectDiffuse += ( gl_FrontFacing ) ? vIndirectFront : vIndirectBack;\n\t#else\n\t\treflectedLight.indirectDiffuse += vIndirectFront;\n\t#endif\n\t#include \n\treflectedLight.indirectDiffuse *= BRDF_Diffuse_Lambert( diffuseColor.rgb );\n\t#ifdef DOUBLE_SIDED\n\t\treflectedLight.directDiffuse = ( gl_FrontFacing ) ? vLightFront : vLightBack;\n\t#else\n\t\treflectedLight.directDiffuse = vLightFront;\n\t#endif\n\treflectedLight.directDiffuse *= BRDF_Diffuse_Lambert( diffuseColor.rgb ) * getShadowMask();\n\t#include \n\tvec3 outgoingLight = reflectedLight.directDiffuse + reflectedLight.indirectDiffuse + totalEmissiveRadiance;\n\t#include \n\tgl_FragColor = vec4( outgoingLight, diffuseColor.a );\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n}", +meshlambert_vert:"#define LAMBERT\nvarying vec3 vLightFront;\nvarying vec3 vIndirectFront;\n#ifdef DOUBLE_SIDED\n\tvarying vec3 vLightBack;\n\tvarying vec3 vIndirectBack;\n#endif\n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \nvoid main() {\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n}", +meshmatcap_frag:"#define MATCAP\nuniform vec3 diffuse;\nuniform float opacity;\nuniform sampler2D matcap;\nvarying vec3 vViewPosition;\n#ifndef FLAT_SHADED\n\tvarying vec3 vNormal;\n#endif\n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \nvoid main() {\n\t#include \n\tvec4 diffuseColor = vec4( diffuse, opacity );\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\tvec3 viewDir = normalize( vViewPosition );\n\tvec3 x = normalize( vec3( viewDir.z, 0.0, - viewDir.x ) );\n\tvec3 y = cross( viewDir, x );\n\tvec2 uv = vec2( dot( x, normal ), dot( y, normal ) ) * 0.495 + 0.5;\n\t#ifdef USE_MATCAP\n\t\tvec4 matcapColor = texture2D( matcap, uv );\n\t\tmatcapColor = matcapTexelToLinear( matcapColor );\n\t#else\n\t\tvec4 matcapColor = vec4( 1.0 );\n\t#endif\n\tvec3 outgoingLight = diffuseColor.rgb * matcapColor.rgb;\n\tgl_FragColor = vec4( outgoingLight, diffuseColor.a );\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n}", +meshmatcap_vert:"#define MATCAP\nvarying vec3 vViewPosition;\n#ifndef FLAT_SHADED\n\tvarying vec3 vNormal;\n#endif\n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \nvoid main() {\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#ifndef FLAT_SHADED\n\t\tvNormal = normalize( transformedNormal );\n\t#endif\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\tvViewPosition = - mvPosition.xyz;\n}", +meshtoon_frag:"#define TOON\nuniform vec3 diffuse;\nuniform vec3 emissive;\nuniform vec3 specular;\nuniform float shininess;\nuniform float opacity;\n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \nvoid main() {\n\t#include \n\tvec4 diffuseColor = vec4( diffuse, opacity );\n\tReflectedLight reflectedLight = ReflectedLight( vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ) );\n\tvec3 totalEmissiveRadiance = emissive;\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\tvec3 outgoingLight = reflectedLight.directDiffuse + reflectedLight.indirectDiffuse + reflectedLight.directSpecular + reflectedLight.indirectSpecular + totalEmissiveRadiance;\n\tgl_FragColor = vec4( outgoingLight, diffuseColor.a );\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n}", +meshtoon_vert:"#define TOON\nvarying vec3 vViewPosition;\n#ifndef FLAT_SHADED\n\tvarying vec3 vNormal;\n#endif\n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \nvoid main() {\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n#ifndef FLAT_SHADED\n\tvNormal = normalize( transformedNormal );\n#endif\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\tvViewPosition = - mvPosition.xyz;\n\t#include \n\t#include \n\t#include \n}", +meshphong_frag:"#define PHONG\nuniform vec3 diffuse;\nuniform vec3 emissive;\nuniform vec3 specular;\nuniform float shininess;\nuniform float opacity;\n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \nvoid main() {\n\t#include \n\tvec4 diffuseColor = vec4( diffuse, opacity );\n\tReflectedLight reflectedLight = ReflectedLight( vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ) );\n\tvec3 totalEmissiveRadiance = emissive;\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\tvec3 outgoingLight = reflectedLight.directDiffuse + reflectedLight.indirectDiffuse + reflectedLight.directSpecular + reflectedLight.indirectSpecular + totalEmissiveRadiance;\n\t#include \n\tgl_FragColor = vec4( outgoingLight, diffuseColor.a );\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n}", +meshphong_vert:"#define PHONG\nvarying vec3 vViewPosition;\n#ifndef FLAT_SHADED\n\tvarying vec3 vNormal;\n#endif\n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \nvoid main() {\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n#ifndef FLAT_SHADED\n\tvNormal = normalize( transformedNormal );\n#endif\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\tvViewPosition = - mvPosition.xyz;\n\t#include \n\t#include \n\t#include \n\t#include \n}", +meshphysical_frag:"#define STANDARD\n#ifdef PHYSICAL\n\t#define REFLECTIVITY\n\t#define CLEARCOAT\n\t#define TRANSPARENCY\n#endif\nuniform vec3 diffuse;\nuniform vec3 emissive;\nuniform float roughness;\nuniform float metalness;\nuniform float opacity;\n#ifdef TRANSPARENCY\n\tuniform float transparency;\n#endif\n#ifdef REFLECTIVITY\n\tuniform float reflectivity;\n#endif\n#ifdef CLEARCOAT\n\tuniform float clearcoat;\n\tuniform float clearcoatRoughness;\n#endif\n#ifdef USE_SHEEN\n\tuniform vec3 sheen;\n#endif\nvarying vec3 vViewPosition;\n#ifndef FLAT_SHADED\n\tvarying vec3 vNormal;\n\t#ifdef USE_TANGENT\n\t\tvarying vec3 vTangent;\n\t\tvarying vec3 vBitangent;\n\t#endif\n#endif\n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \nvoid main() {\n\t#include \n\tvec4 diffuseColor = vec4( diffuse, opacity );\n\tReflectedLight reflectedLight = ReflectedLight( vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ) );\n\tvec3 totalEmissiveRadiance = emissive;\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\tvec3 outgoingLight = reflectedLight.directDiffuse + reflectedLight.indirectDiffuse + reflectedLight.directSpecular + reflectedLight.indirectSpecular + totalEmissiveRadiance;\n\t#ifdef TRANSPARENCY\n\t\tdiffuseColor.a *= saturate( 1. - transparency + linearToRelativeLuminance( reflectedLight.directSpecular + reflectedLight.indirectSpecular ) );\n\t#endif\n\tgl_FragColor = vec4( outgoingLight, diffuseColor.a );\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n}", +meshphysical_vert:"#define STANDARD\nvarying vec3 vViewPosition;\n#ifndef FLAT_SHADED\n\tvarying vec3 vNormal;\n\t#ifdef USE_TANGENT\n\t\tvarying vec3 vTangent;\n\t\tvarying vec3 vBitangent;\n\t#endif\n#endif\n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \nvoid main() {\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n#ifndef FLAT_SHADED\n\tvNormal = normalize( transformedNormal );\n\t#ifdef USE_TANGENT\n\t\tvTangent = normalize( transformedTangent );\n\t\tvBitangent = normalize( cross( vNormal, vTangent ) * tangent.w );\n\t#endif\n#endif\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\tvViewPosition = - mvPosition.xyz;\n\t#include \n\t#include \n\t#include \n}", +normal_frag:"#define NORMAL\nuniform float opacity;\n#if defined( FLAT_SHADED ) || defined( USE_BUMPMAP ) || defined( TANGENTSPACE_NORMALMAP )\n\tvarying vec3 vViewPosition;\n#endif\n#ifndef FLAT_SHADED\n\tvarying vec3 vNormal;\n\t#ifdef USE_TANGENT\n\t\tvarying vec3 vTangent;\n\t\tvarying vec3 vBitangent;\n\t#endif\n#endif\n#include \n#include \n#include \n#include \n#include \n#include \nvoid main() {\n\t#include \n\t#include \n\t#include \n\t#include \n\tgl_FragColor = vec4( packNormalToRGB( normal ), opacity );\n}", +normal_vert:"#define NORMAL\n#if defined( FLAT_SHADED ) || defined( USE_BUMPMAP ) || defined( TANGENTSPACE_NORMALMAP )\n\tvarying vec3 vViewPosition;\n#endif\n#ifndef FLAT_SHADED\n\tvarying vec3 vNormal;\n\t#ifdef USE_TANGENT\n\t\tvarying vec3 vTangent;\n\t\tvarying vec3 vBitangent;\n\t#endif\n#endif\n#include \n#include \n#include \n#include \n#include \n#include \n#include \nvoid main() {\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n#ifndef FLAT_SHADED\n\tvNormal = normalize( transformedNormal );\n\t#ifdef USE_TANGENT\n\t\tvTangent = normalize( transformedTangent );\n\t\tvBitangent = normalize( cross( vNormal, vTangent ) * tangent.w );\n\t#endif\n#endif\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n#if defined( FLAT_SHADED ) || defined( USE_BUMPMAP ) || defined( TANGENTSPACE_NORMALMAP )\n\tvViewPosition = - mvPosition.xyz;\n#endif\n}", +points_frag:"uniform vec3 diffuse;\nuniform float opacity;\n#include \n#include \n#include \n#include \n#include \n#include \nvoid main() {\n\t#include \n\tvec3 outgoingLight = vec3( 0.0 );\n\tvec4 diffuseColor = vec4( diffuse, opacity );\n\t#include \n\t#include \n\t#include \n\t#include \n\toutgoingLight = diffuseColor.rgb;\n\tgl_FragColor = vec4( outgoingLight, diffuseColor.a );\n\t#include \n\t#include \n\t#include \n\t#include \n}", +points_vert:"uniform float size;\nuniform float scale;\n#include \n#include \n#include \n#include \n#include \n#include \nvoid main() {\n\t#include \n\t#include \n\t#include \n\t#include \n\tgl_PointSize = size;\n\t#ifdef USE_SIZEATTENUATION\n\t\tbool isPerspective = isPerspectiveMatrix( projectionMatrix );\n\t\tif ( isPerspective ) gl_PointSize *= ( scale / - mvPosition.z );\n\t#endif\n\t#include \n\t#include \n\t#include \n\t#include \n}", +shadow_frag:"uniform vec3 color;\nuniform float opacity;\n#include \n#include \n#include \n#include \n#include \n#include \n#include \nvoid main() {\n\tgl_FragColor = vec4( color, opacity * ( 1.0 - getShadowMask() ) );\n\t#include \n\t#include \n\t#include \n}",shadow_vert:"#include \n#include \nvoid main() {\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n}", +sprite_frag:"uniform vec3 diffuse;\nuniform float opacity;\n#include \n#include \n#include \n#include \n#include \n#include \n#include \nvoid main() {\n\t#include \n\tvec3 outgoingLight = vec3( 0.0 );\n\tvec4 diffuseColor = vec4( diffuse, opacity );\n\t#include \n\t#include \n\t#include \n\t#include \n\toutgoingLight = diffuseColor.rgb;\n\tgl_FragColor = vec4( outgoingLight, diffuseColor.a );\n\t#include \n\t#include \n\t#include \n}", +sprite_vert:"uniform float rotation;\nuniform vec2 center;\n#include \n#include \n#include \n#include \n#include \nvoid main() {\n\t#include \n\tvec4 mvPosition = modelViewMatrix * vec4( 0.0, 0.0, 0.0, 1.0 );\n\tvec2 scale;\n\tscale.x = length( vec3( modelMatrix[ 0 ].x, modelMatrix[ 0 ].y, modelMatrix[ 0 ].z ) );\n\tscale.y = length( vec3( modelMatrix[ 1 ].x, modelMatrix[ 1 ].y, modelMatrix[ 1 ].z ) );\n\t#ifndef USE_SIZEATTENUATION\n\t\tbool isPerspective = isPerspectiveMatrix( projectionMatrix );\n\t\tif ( isPerspective ) scale *= - mvPosition.z;\n\t#endif\n\tvec2 alignedPosition = ( position.xy - ( center - vec2( 0.5 ) ) ) * scale;\n\tvec2 rotatedPosition;\n\trotatedPosition.x = cos( rotation ) * alignedPosition.x - sin( rotation ) * alignedPosition.y;\n\trotatedPosition.y = sin( rotation ) * alignedPosition.x + cos( rotation ) * alignedPosition.y;\n\tmvPosition.xy += rotatedPosition;\n\tgl_Position = projectionMatrix * mvPosition;\n\t#include \n\t#include \n\t#include \n}"}, +gb={basic:{uniforms:wa([A.common,A.specularmap,A.envmap,A.aomap,A.lightmap,A.fog]),vertexShader:M.meshbasic_vert,fragmentShader:M.meshbasic_frag},lambert:{uniforms:wa([A.common,A.specularmap,A.envmap,A.aomap,A.lightmap,A.emissivemap,A.fog,A.lights,{emissive:{value:new D(0)}}]),vertexShader:M.meshlambert_vert,fragmentShader:M.meshlambert_frag},phong:{uniforms:wa([A.common,A.specularmap,A.envmap,A.aomap,A.lightmap,A.emissivemap,A.bumpmap,A.normalmap,A.displacementmap,A.fog,A.lights,{emissive:{value:new D(0)}, +specular:{value:new D(1118481)},shininess:{value:30}}]),vertexShader:M.meshphong_vert,fragmentShader:M.meshphong_frag},standard:{uniforms:wa([A.common,A.envmap,A.aomap,A.lightmap,A.emissivemap,A.bumpmap,A.normalmap,A.displacementmap,A.roughnessmap,A.metalnessmap,A.fog,A.lights,{emissive:{value:new D(0)},roughness:{value:1},metalness:{value:0},envMapIntensity:{value:1}}]),vertexShader:M.meshphysical_vert,fragmentShader:M.meshphysical_frag},toon:{uniforms:wa([A.common,A.specularmap,A.aomap,A.lightmap, +A.emissivemap,A.bumpmap,A.normalmap,A.displacementmap,A.gradientmap,A.fog,A.lights,{emissive:{value:new D(0)},specular:{value:new D(1118481)},shininess:{value:30}}]),vertexShader:M.meshtoon_vert,fragmentShader:M.meshtoon_frag},matcap:{uniforms:wa([A.common,A.bumpmap,A.normalmap,A.displacementmap,A.fog,{matcap:{value:null}}]),vertexShader:M.meshmatcap_vert,fragmentShader:M.meshmatcap_frag},points:{uniforms:wa([A.points,A.fog]),vertexShader:M.points_vert,fragmentShader:M.points_frag},dashed:{uniforms:wa([A.common, +A.fog,{scale:{value:1},dashSize:{value:1},totalSize:{value:2}}]),vertexShader:M.linedashed_vert,fragmentShader:M.linedashed_frag},depth:{uniforms:wa([A.common,A.displacementmap]),vertexShader:M.depth_vert,fragmentShader:M.depth_frag},normal:{uniforms:wa([A.common,A.bumpmap,A.normalmap,A.displacementmap,{opacity:{value:1}}]),vertexShader:M.normal_vert,fragmentShader:M.normal_frag},sprite:{uniforms:wa([A.sprite,A.fog]),vertexShader:M.sprite_vert,fragmentShader:M.sprite_frag},background:{uniforms:{uvTransform:{value:new ya}, +t2D:{value:null}},vertexShader:M.background_vert,fragmentShader:M.background_frag},cube:{uniforms:wa([A.envmap,{opacity:{value:1}}]),vertexShader:M.cube_vert,fragmentShader:M.cube_frag},equirect:{uniforms:{tEquirect:{value:null}},vertexShader:M.equirect_vert,fragmentShader:M.equirect_frag},distanceRGBA:{uniforms:wa([A.common,A.displacementmap,{referencePosition:{value:new p},nearDistance:{value:1},farDistance:{value:1E3}}]),vertexShader:M.distanceRGBA_vert,fragmentShader:M.distanceRGBA_frag},shadow:{uniforms:wa([A.lights, +A.fog,{color:{value:new D(0)},opacity:{value:1}}]),vertexShader:M.shadow_vert,fragmentShader:M.shadow_frag}};gb.physical={uniforms:wa([gb.standard.uniforms,{clearcoat:{value:0},clearcoatMap:{value:null},clearcoatRoughness:{value:0},clearcoatRoughnessMap:{value:null},clearcoatNormalScale:{value:new v(1,1)},clearcoatNormalMap:{value:null},sheen:{value:new D(0)},transparency:{value:0}}]),vertexShader:M.meshphysical_vert,fragmentShader:M.meshphysical_frag};qb.prototype=Object.create(W.prototype);qb.prototype.constructor= +qb;qb.prototype.isCubeTexture=!0;Object.defineProperty(qb.prototype,"images",{get:function(){return this.image},set:function(a){this.image=a}});Hc.prototype=Object.create(W.prototype);Hc.prototype.constructor=Hc;Hc.prototype.isDataTexture2DArray=!0;Ic.prototype=Object.create(W.prototype);Ic.prototype.constructor=Ic;Ic.prototype.isDataTexture3D=!0;var Bh=new W,Ej=new Hc,Gj=new Ic,Ch=new qb,vh=[],xh=[],Ah=new Float32Array(16),zh=new Float32Array(9),yh=new Float32Array(4);Dh.prototype.updateCache=function(a){var b= +this.cache;a instanceof Float32Array&&b.length!==a.length&&(this.cache=new Float32Array(a.length));Ja(b,a)};Eh.prototype.setValue=function(a,b,c){for(var d=this.seq,e=0,f=d.length;e!==f;++e){var g=d[e];g.setValue(a,b[g.id],c)}};var eg=/([\w\d_]+)(\])?(\[|\.)?/g;Gb.prototype.setValue=function(a,b,c,d){b=this.map[b];void 0!==b&&b.setValue(a,c,d)};Gb.prototype.setOptional=function(a,b,c){b=b[c];void 0!==b&&this.setValue(a,c,b)};Gb.upload=function(a,b,c,d){for(var e=0,f=b.length;e!==f;++e){var g=b[e], +h=c[g.id];!1!==h.needsUpdate&&g.setValue(a,h.value,d)}};Gb.seqWithValue=function(a,b){for(var c=[],d=0,e=a.length;d!==e;++d){var f=a[d];f.id in b&&c.push(f)}return c};var lk=0,gg=/^[ \t]*#include +<([\w\d./]+)>/gm,Nh=/#pragma unroll_loop[\s]+?for \( int i = (\d+); i < (\d+); i \+\+ \) \{([\s\S]+?)(?=\})\}/g,Mh=/#pragma unroll_loop_start[\s]+?for \( int i = (\d+); i < (\d+); i \+\+ \) \{([\s\S]+?)(?=\})\}[\s]+?#pragma unroll_loop_end/g,vk=0;Hb.prototype=Object.create(K.prototype);Hb.prototype.constructor= +Hb;Hb.prototype.isMeshDepthMaterial=!0;Hb.prototype.copy=function(a){K.prototype.copy.call(this,a);this.depthPacking=a.depthPacking;this.skinning=a.skinning;this.morphTargets=a.morphTargets;this.map=a.map;this.alphaMap=a.alphaMap;this.displacementMap=a.displacementMap;this.displacementScale=a.displacementScale;this.displacementBias=a.displacementBias;this.wireframe=a.wireframe;this.wireframeLinewidth=a.wireframeLinewidth;return this};Ib.prototype=Object.create(K.prototype);Ib.prototype.constructor= +Ib;Ib.prototype.isMeshDistanceMaterial=!0;Ib.prototype.copy=function(a){K.prototype.copy.call(this,a);this.referencePosition.copy(a.referencePosition);this.nearDistance=a.nearDistance;this.farDistance=a.farDistance;this.skinning=a.skinning;this.morphTargets=a.morphTargets;this.map=a.map;this.alphaMap=a.alphaMap;this.displacementMap=a.displacementMap;this.displacementScale=a.displacementScale;this.displacementBias=a.displacementBias;return this};Le.prototype=Object.assign(Object.create(P.prototype), +{constructor:Le,isArrayCamera:!0});Kc.prototype=Object.assign(Object.create(y.prototype),{constructor:Kc,isGroup:!0});Object.assign(Me.prototype,{constructor:Me,getTargetRaySpace:function(){null===this._targetRay&&(this._targetRay=new Kc,this._targetRay.matrixAutoUpdate=!1,this._targetRay.visible=!1);return this._targetRay},getGripSpace:function(){null===this._grip&&(this._grip=new Kc,this._grip.matrixAutoUpdate=!1,this._grip.visible=!1);return this._grip},dispatchEvent:function(a){null!==this._targetRay&& +this._targetRay.dispatchEvent(a);null!==this._grip&&this._grip.dispatchEvent(a);return this},disconnect:function(a){this.dispatchEvent({type:"disconnected",data:a});null!==this._targetRay&&(this._targetRay.visible=!1);null!==this._grip&&(this._grip.visible=!1);return this},update:function(a,b,c){var d=null,e=null,f=this._targetRay,g=this._grip;a&&(null!==f&&(d=b.getPose(a.targetRaySpace,c),null!==d&&(f.matrix.fromArray(d.transform.matrix),f.matrix.decompose(f.position,f.rotation,f.scale))),null!== +g&&a.gripSpace&&(e=b.getPose(a.gripSpace,c),null!==e&&(g.matrix.fromArray(e.transform.matrix),g.matrix.decompose(g.position,g.rotation,g.scale))));null!==f&&(f.visible=null!==d);null!==g&&(g.visible=null!==e);return this}});Object.assign(Uh.prototype,ua.prototype);Object.assign(Ne.prototype,{isFogExp2:!0,clone:function(){return new Ne(this.color,this.density)},toJSON:function(){return{type:"FogExp2",color:this.color.getHex(),density:this.density}}});Object.assign(Oe.prototype,{isFog:!0,clone:function(){return new Oe(this.color, +this.near,this.far)},toJSON:function(){return{type:"Fog",color:this.color.getHex(),near:this.near,far:this.far}}});Object.defineProperty(rb.prototype,"needsUpdate",{set:function(a){!0===a&&this.version++}});Object.assign(rb.prototype,{isInterleavedBuffer:!0,onUploadCallback:function(){},setUsage:function(a){this.usage=a;return this},copy:function(a){this.array=new a.array.constructor(a.array);this.count=a.count;this.stride=a.stride;this.usage=a.usage;return this},copyAt:function(a,b,c){a*=this.stride; +c*=b.stride;for(var d=0,e=this.stride;da.far||b.push({distance:e,point:xe.clone(),uv:pa.getUV(xe,If,ye,Jf,Di,gh,Ei,new v),face:null,object:this})},clone:function(){return(new this.constructor(this.material)).copy(this)},copy:function(a){y.prototype.copy.call(this,a);void 0!==a.center&&this.center.copy(a.center);return this}});var Kf=new p,Fi=new p;Nd.prototype=Object.assign(Object.create(y.prototype), +{constructor:Nd,isLOD:!0,copy:function(a){y.prototype.copy.call(this,a,!1);for(var b=a.levels,c=0,d=b.length;c=b[c].distance)b[c- +1].object.visible=!1,b[c].object.visible=!0;else break;for(this._currentLevel=c-1;cf;f++)if(l=c.getComponent(f),0!==l){var m=b.getComponent(f);e.multiplyMatrices(h.bones[m].matrixWorld,h.boneInverses[m]);g.addScaledVector(d.copy(a).applyMatrix4(e),l)}return g.applyMatrix4(this.bindMatrixInverse)}}()});var Gi=new N,Qk=new N;Object.assign(Re.prototype,{calculateInverses:function(){this.boneInverses=[];for(var a=0,b=this.bones.length;ad||(h.applyMatrix4(this.matrixWorld),t=a.ray.origin.distanceTo(h),ta.far||b.push({distance:t,point:e.clone().applyMatrix4(this.matrixWorld),index:c,face:null,faceIndex:null,object:this}))}}else for(c=0,n=k.length/3-1;cd||(h.applyMatrix4(this.matrixWorld),t=a.ray.origin.distanceTo(h), +ta.far||b.push({distance:t,point:e.clone().applyMatrix4(this.matrixWorld),index:c,face:null,faceIndex:null,object:this}))}else if(c.isGeometry)for(f=c.vertices,g=f.length,c=0;cd||(h.applyMatrix4(this.matrixWorld),t=a.ray.origin.distanceTo(h),ta.far||b.push({distance:t,point:e.clone().applyMatrix4(this.matrixWorld),index:c,face:null,faceIndex:null,object:this}))}},updateMorphTargets:function(){var a=this.geometry;if(a.isBufferGeometry){a= +a.morphAttributes;var b=Object.keys(a);if(0=a.HAVE_CURRENT_DATA&&(this.needsUpdate=!0)}});Oc.prototype=Object.create(W.prototype);Oc.prototype.constructor=Oc;Oc.prototype.isCompressedTexture=!0;Od.prototype=Object.create(W.prototype);Od.prototype.constructor=Od;Od.prototype.isCanvasTexture=!0;Pd.prototype=Object.create(W.prototype);Pd.prototype.constructor=Pd;Pd.prototype.isDepthTexture=!0;Pc.prototype=Object.create(F.prototype);Pc.prototype.constructor=Pc;Qd.prototype=Object.create(L.prototype); +Qd.prototype.constructor=Qd;Qc.prototype=Object.create(F.prototype);Qc.prototype.constructor=Qc;Rd.prototype=Object.create(L.prototype);Rd.prototype.constructor=Rd;Ga.prototype=Object.create(F.prototype);Ga.prototype.constructor=Ga;Sd.prototype=Object.create(L.prototype);Sd.prototype.constructor=Sd;Rc.prototype=Object.create(Ga.prototype);Rc.prototype.constructor=Rc;Td.prototype=Object.create(L.prototype);Td.prototype.constructor=Td;bc.prototype=Object.create(Ga.prototype);bc.prototype.constructor= +bc;Ud.prototype=Object.create(L.prototype);Ud.prototype.constructor=Ud;Sc.prototype=Object.create(Ga.prototype);Sc.prototype.constructor=Sc;Vd.prototype=Object.create(L.prototype);Vd.prototype.constructor=Vd;Tc.prototype=Object.create(Ga.prototype);Tc.prototype.constructor=Tc;Wd.prototype=Object.create(L.prototype);Wd.prototype.constructor=Wd;cc.prototype=Object.create(F.prototype);cc.prototype.constructor=cc;cc.prototype.toJSON=function(){var a=F.prototype.toJSON.call(this);a.path=this.parameters.path.toJSON(); +return a};Xd.prototype=Object.create(L.prototype);Xd.prototype.constructor=Xd;Uc.prototype=Object.create(F.prototype);Uc.prototype.constructor=Uc;Yd.prototype=Object.create(L.prototype);Yd.prototype.constructor=Yd;Vc.prototype=Object.create(F.prototype);Vc.prototype.constructor=Vc;var Rk={triangulate:function(a,b,c){c=c||2;var d=b&&b.length,e=d?b[0]*c:a.length,f=Xh(a,0,e,c,!0),g=[];if(!f||f.next===f.prev)return g;var h;if(d){var l=c;d=[];var m;var k=0;for(m=b.length;k80*c){var r=h=a[0];var q=d=a[1];for(l=c;lh&&(h=k),b>d&&(d=b);h=Math.max(h-r,d-q);h=0!==h?1/h:0}$d(f,g,c,r,q,h);return g}},sb={area:function(a){for(var b=a.length,c=0,d=b-1,e=0;e +sb.area(a)},triangulateShape:function(a,b){var c=[],d=[],e=[];ai(a);bi(c,a);var f=a.length;b.forEach(ai);for(a=0;aMath.abs(g-l)?[new v(a,1-c),new v(h,1-d), +new v(k,1-e),new v(n,1-b)]:[new v(g,1-c),new v(l,1-d),new v(p,1-e),new v(t,1-b)]}};be.prototype=Object.create(L.prototype);be.prototype.constructor=be;Xc.prototype=Object.create(hb.prototype);Xc.prototype.constructor=Xc;ce.prototype=Object.create(L.prototype);ce.prototype.constructor=ce;ec.prototype=Object.create(F.prototype);ec.prototype.constructor=ec;de.prototype=Object.create(L.prototype);de.prototype.constructor=de;Yc.prototype=Object.create(F.prototype);Yc.prototype.constructor=Yc;ee.prototype= +Object.create(L.prototype);ee.prototype.constructor=ee;Zc.prototype=Object.create(F.prototype);Zc.prototype.constructor=Zc;fc.prototype=Object.create(L.prototype);fc.prototype.constructor=fc;fc.prototype.toJSON=function(){var a=L.prototype.toJSON.call(this);return di(this.parameters.shapes,a)};gc.prototype=Object.create(F.prototype);gc.prototype.constructor=gc;gc.prototype.toJSON=function(){var a=F.prototype.toJSON.call(this);return di(this.parameters.shapes,a)};$c.prototype=Object.create(F.prototype); +$c.prototype.constructor=$c;hc.prototype=Object.create(L.prototype);hc.prototype.constructor=hc;tb.prototype=Object.create(F.prototype);tb.prototype.constructor=tb;fe.prototype=Object.create(hc.prototype);fe.prototype.constructor=fe;ge.prototype=Object.create(tb.prototype);ge.prototype.constructor=ge;he.prototype=Object.create(L.prototype);he.prototype.constructor=he;ad.prototype=Object.create(F.prototype);ad.prototype.constructor=ad;var ra=Object.freeze({__proto__:null,WireframeGeometry:Pc,ParametricGeometry:Qd, +ParametricBufferGeometry:Qc,TetrahedronGeometry:Sd,TetrahedronBufferGeometry:Rc,OctahedronGeometry:Td,OctahedronBufferGeometry:bc,IcosahedronGeometry:Ud,IcosahedronBufferGeometry:Sc,DodecahedronGeometry:Vd,DodecahedronBufferGeometry:Tc,PolyhedronGeometry:Rd,PolyhedronBufferGeometry:Ga,TubeGeometry:Wd,TubeBufferGeometry:cc,TorusKnotGeometry:Xd,TorusKnotBufferGeometry:Uc,TorusGeometry:Yd,TorusBufferGeometry:Vc,TextGeometry:be,TextBufferGeometry:Xc,SphereGeometry:ce,SphereBufferGeometry:ec,RingGeometry:de, +RingBufferGeometry:Yc,PlaneGeometry:Fd,PlaneBufferGeometry:ac,LatheGeometry:ee,LatheBufferGeometry:Zc,ShapeGeometry:fc,ShapeBufferGeometry:gc,ExtrudeGeometry:dc,ExtrudeBufferGeometry:hb,EdgesGeometry:$c,ConeGeometry:fe,ConeBufferGeometry:ge,CylinderGeometry:hc,CylinderBufferGeometry:tb,CircleGeometry:he,CircleBufferGeometry:ad,BoxGeometry:fh,BoxBufferGeometry:Gd});ic.prototype=Object.create(K.prototype);ic.prototype.constructor=ic;ic.prototype.isShadowMaterial=!0;ic.prototype.copy=function(a){K.prototype.copy.call(this, +a);this.color.copy(a.color);return this};ub.prototype=Object.create(Ca.prototype);ub.prototype.constructor=ub;ub.prototype.isRawShaderMaterial=!0;ib.prototype=Object.create(K.prototype);ib.prototype.constructor=ib;ib.prototype.isMeshStandardMaterial=!0;ib.prototype.copy=function(a){K.prototype.copy.call(this,a);this.defines={STANDARD:""};this.color.copy(a.color);this.roughness=a.roughness;this.metalness=a.metalness;this.map=a.map;this.lightMap=a.lightMap;this.lightMapIntensity=a.lightMapIntensity; +this.aoMap=a.aoMap;this.aoMapIntensity=a.aoMapIntensity;this.emissive.copy(a.emissive);this.emissiveMap=a.emissiveMap;this.emissiveIntensity=a.emissiveIntensity;this.bumpMap=a.bumpMap;this.bumpScale=a.bumpScale;this.normalMap=a.normalMap;this.normalMapType=a.normalMapType;this.normalScale.copy(a.normalScale);this.displacementMap=a.displacementMap;this.displacementScale=a.displacementScale;this.displacementBias=a.displacementBias;this.roughnessMap=a.roughnessMap;this.metalnessMap=a.metalnessMap;this.alphaMap= +a.alphaMap;this.envMap=a.envMap;this.envMapIntensity=a.envMapIntensity;this.refractionRatio=a.refractionRatio;this.wireframe=a.wireframe;this.wireframeLinewidth=a.wireframeLinewidth;this.wireframeLinecap=a.wireframeLinecap;this.wireframeLinejoin=a.wireframeLinejoin;this.skinning=a.skinning;this.morphTargets=a.morphTargets;this.morphNormals=a.morphNormals;this.vertexTangents=a.vertexTangents;return this};jc.prototype=Object.create(ib.prototype);jc.prototype.constructor=jc;jc.prototype.isMeshPhysicalMaterial= +!0;jc.prototype.copy=function(a){ib.prototype.copy.call(this,a);this.defines={STANDARD:"",PHYSICAL:""};this.clearcoat=a.clearcoat;this.clearcoatMap=a.clearcoatMap;this.clearcoatRoughness=a.clearcoatRoughness;this.clearcoatRoughnessMap=a.clearcoatRoughnessMap;this.clearcoatNormalMap=a.clearcoatNormalMap;this.clearcoatNormalScale.copy(a.clearcoatNormalScale);this.reflectivity=a.reflectivity;this.sheen=a.sheen?(this.sheen||new D).copy(a.sheen):null;this.transparency=a.transparency;return this};Mb.prototype= +Object.create(K.prototype);Mb.prototype.constructor=Mb;Mb.prototype.isMeshPhongMaterial=!0;Mb.prototype.copy=function(a){K.prototype.copy.call(this,a);this.color.copy(a.color);this.specular.copy(a.specular);this.shininess=a.shininess;this.map=a.map;this.lightMap=a.lightMap;this.lightMapIntensity=a.lightMapIntensity;this.aoMap=a.aoMap;this.aoMapIntensity=a.aoMapIntensity;this.emissive.copy(a.emissive);this.emissiveMap=a.emissiveMap;this.emissiveIntensity=a.emissiveIntensity;this.bumpMap=a.bumpMap; +this.bumpScale=a.bumpScale;this.normalMap=a.normalMap;this.normalMapType=a.normalMapType;this.normalScale.copy(a.normalScale);this.displacementMap=a.displacementMap;this.displacementScale=a.displacementScale;this.displacementBias=a.displacementBias;this.specularMap=a.specularMap;this.alphaMap=a.alphaMap;this.envMap=a.envMap;this.combine=a.combine;this.reflectivity=a.reflectivity;this.refractionRatio=a.refractionRatio;this.wireframe=a.wireframe;this.wireframeLinewidth=a.wireframeLinewidth;this.wireframeLinecap= +a.wireframeLinecap;this.wireframeLinejoin=a.wireframeLinejoin;this.skinning=a.skinning;this.morphTargets=a.morphTargets;this.morphNormals=a.morphNormals;return this};kc.prototype=Object.create(K.prototype);kc.prototype.constructor=kc;kc.prototype.isMeshToonMaterial=!0;kc.prototype.copy=function(a){K.prototype.copy.call(this,a);this.color.copy(a.color);this.specular.copy(a.specular);this.shininess=a.shininess;this.map=a.map;this.gradientMap=a.gradientMap;this.lightMap=a.lightMap;this.lightMapIntensity= +a.lightMapIntensity;this.aoMap=a.aoMap;this.aoMapIntensity=a.aoMapIntensity;this.emissive.copy(a.emissive);this.emissiveMap=a.emissiveMap;this.emissiveIntensity=a.emissiveIntensity;this.bumpMap=a.bumpMap;this.bumpScale=a.bumpScale;this.normalMap=a.normalMap;this.normalMapType=a.normalMapType;this.normalScale.copy(a.normalScale);this.displacementMap=a.displacementMap;this.displacementScale=a.displacementScale;this.displacementBias=a.displacementBias;this.specularMap=a.specularMap;this.alphaMap=a.alphaMap; +this.wireframe=a.wireframe;this.wireframeLinewidth=a.wireframeLinewidth;this.wireframeLinecap=a.wireframeLinecap;this.wireframeLinejoin=a.wireframeLinejoin;this.skinning=a.skinning;this.morphTargets=a.morphTargets;this.morphNormals=a.morphNormals;return this};lc.prototype=Object.create(K.prototype);lc.prototype.constructor=lc;lc.prototype.isMeshNormalMaterial=!0;lc.prototype.copy=function(a){K.prototype.copy.call(this,a);this.bumpMap=a.bumpMap;this.bumpScale=a.bumpScale;this.normalMap=a.normalMap; +this.normalMapType=a.normalMapType;this.normalScale.copy(a.normalScale);this.displacementMap=a.displacementMap;this.displacementScale=a.displacementScale;this.displacementBias=a.displacementBias;this.wireframe=a.wireframe;this.wireframeLinewidth=a.wireframeLinewidth;this.skinning=a.skinning;this.morphTargets=a.morphTargets;this.morphNormals=a.morphNormals;return this};mc.prototype=Object.create(K.prototype);mc.prototype.constructor=mc;mc.prototype.isMeshLambertMaterial=!0;mc.prototype.copy=function(a){K.prototype.copy.call(this, +a);this.color.copy(a.color);this.map=a.map;this.lightMap=a.lightMap;this.lightMapIntensity=a.lightMapIntensity;this.aoMap=a.aoMap;this.aoMapIntensity=a.aoMapIntensity;this.emissive.copy(a.emissive);this.emissiveMap=a.emissiveMap;this.emissiveIntensity=a.emissiveIntensity;this.specularMap=a.specularMap;this.alphaMap=a.alphaMap;this.envMap=a.envMap;this.combine=a.combine;this.reflectivity=a.reflectivity;this.refractionRatio=a.refractionRatio;this.wireframe=a.wireframe;this.wireframeLinewidth=a.wireframeLinewidth; +this.wireframeLinecap=a.wireframeLinecap;this.wireframeLinejoin=a.wireframeLinejoin;this.skinning=a.skinning;this.morphTargets=a.morphTargets;this.morphNormals=a.morphNormals;return this};nc.prototype=Object.create(K.prototype);nc.prototype.constructor=nc;nc.prototype.isMeshMatcapMaterial=!0;nc.prototype.copy=function(a){K.prototype.copy.call(this,a);this.defines={MATCAP:""};this.color.copy(a.color);this.matcap=a.matcap;this.map=a.map;this.bumpMap=a.bumpMap;this.bumpScale=a.bumpScale;this.normalMap= +a.normalMap;this.normalMapType=a.normalMapType;this.normalScale.copy(a.normalScale);this.displacementMap=a.displacementMap;this.displacementScale=a.displacementScale;this.displacementBias=a.displacementBias;this.alphaMap=a.alphaMap;this.skinning=a.skinning;this.morphTargets=a.morphTargets;this.morphNormals=a.morphNormals;return this};oc.prototype=Object.create(da.prototype);oc.prototype.constructor=oc;oc.prototype.isLineDashedMaterial=!0;oc.prototype.copy=function(a){da.prototype.copy.call(this,a); +this.scale=a.scale;this.dashSize=a.dashSize;this.gapSize=a.gapSize;return this};var Sk=Object.freeze({__proto__:null,ShadowMaterial:ic,SpriteMaterial:Kb,RawShaderMaterial:ub,ShaderMaterial:Ca,PointsMaterial:Xa,MeshPhysicalMaterial:jc,MeshStandardMaterial:ib,MeshPhongMaterial:Mb,MeshToonMaterial:kc,MeshNormalMaterial:lc,MeshLambertMaterial:mc,MeshDepthMaterial:Hb,MeshDistanceMaterial:Ib,MeshBasicMaterial:Pa,MeshMatcapMaterial:nc,LineDashedMaterial:oc,LineBasicMaterial:da,Material:K}),ka={arraySlice:function(a, +b,c){return ka.isTypedArray(a)?new a.constructor(a.subarray(b,void 0!==c?c:a.length)):a.slice(b,c)},convertArray:function(a,b,c){return!a||!c&&a.constructor===b?a:"number"===typeof b.BYTES_PER_ELEMENT?new b(a):Array.prototype.slice.call(a)},isTypedArray:function(a){return ArrayBuffer.isView(a)&&!(a instanceof DataView)},getKeyframeOrder:function(a){for(var b=a.length,c=Array(b),d=0;d!==b;++d)c[d]=d;c.sort(function(b,c){return a[b]-a[c]});return c},sortedArray:function(a,b,c){for(var d=a.length,e= +new a.constructor(d),f=0,g=0;g!==d;++f)for(var h=c[f]*b,l=0;l!==b;++l)e[g++]=a[h+l];return e},flattenJSON:function(a,b,c,d){for(var e=1,f=a[0];void 0!==f&&void 0===f[d];)f=a[e++];if(void 0!==f){var g=f[d];if(void 0!==g)if(Array.isArray(g)){do g=f[d],void 0!==g&&(b.push(f.time),c.push.apply(c,g)),f=a[e++];while(void 0!==f)}else if(void 0!==g.toArray){do g=f[d],void 0!==g&&(b.push(f.time),g.toArray(c,c.length)),f=a[e++];while(void 0!==f)}else{do g=f[d],void 0!==g&&(b.push(f.time),c.push(g)),f=a[e++]; +while(void 0!==f)}}},subclip:function(a,b,c,d,e){e=e||30;a=a.clone();a.name=b;var f=[];for(b=0;b=d))for(l.push(g.times[p]),n=0;na.tracks[b].times[0]&&(c=a.tracks[b].times[0]); +for(b=0;b=d)d=30;var e=a.tracks.length;b/=d;for(d=0;d=f.times[k]?k=ka.arraySlice(f.values, +k*l):(k=f.createInterpolant(),k.evaluate(b),k=k.resultBuffer);"quaternion"===g&&(new va(k[0],k[1],k[2],k[3])).normalize().conjugate().toArray(k);for(var p=h.times.length,n=0;n=e)break a;else{f=b[1];a=e)break b}d=c;c=0}}for(;c>>1,ab;)--f;++f;if(0!==e||f!==d)e>=f&&(f=Math.max(f,1),e=f-1),a=this.getValueSize(),this.times=ka.arraySlice(c,e,f),this.values=ka.arraySlice(this.values,e*a,f*a);return this},validate:function(){var a=!0,b=this.getValueSize();0!==b-Math.floor(b)&&(console.error("THREE.KeyframeTrack: Invalid value size in track.",this),a=!1);var c=this.times; +b=this.values;var d=c.length;0===d&&(console.error("THREE.KeyframeTrack: Track is empty.",this),a=!1);for(var e=null,f=0;f!==d;f++){var g=c[f];if("number"===typeof g&&isNaN(g)){console.error("THREE.KeyframeTrack: Time is not a valid number.",this,f,g);a=!1;break}if(null!==e&&e>g){console.error("THREE.KeyframeTrack: Out of order keys.",this,f,g,e);a=!1;break}e=g}if(void 0!==b&&ka.isTypedArray(b))for(f=0,c=b.length;f!==c;++f)if(d=b[f],isNaN(d)){console.error("THREE.KeyframeTrack: Value is not a valid number.", +this,f,d);a=!1;break}return a},optimize:function(){for(var a=ka.arraySlice(this.times),b=ka.arraySlice(this.values),c=this.getValueSize(),d=2302===this.getInterpolation(),e=1,f=a.length-1,g=1;gg)e=a+1;else if(0c&&(c=0);1Number.EPSILON&&(g.normalize(),c=Math.acos(O.clamp(d[l-1].dot(d[l]),-1,1)),e[l].applyMatrix4(h.makeRotationAxis(g,c))),f[l].crossVectors(d[l],e[l]);if(!0===b)for(c=Math.acos(O.clamp(e[0].dot(e[a]),-1,1)),c/=a,0 +d;)d+=c;for(;d>c;)d-=c;de&&(e=1);1E-4>d&&(d=e);1E-4>l&&(l=e);hh.initNonuniformCatmullRom(f.x, +g.x,h.x,c.x,d,e,l);ih.initNonuniformCatmullRom(f.y,g.y,h.y,c.y,d,e,l);jh.initNonuniformCatmullRom(f.z,g.z,h.z,c.z,d,e,l)}else"catmullrom"===this.curveType&&(hh.initCatmullRom(f.x,g.x,h.x,c.x,this.tension),ih.initCatmullRom(f.y,g.y,h.y,c.y,this.tension),jh.initCatmullRom(f.z,g.z,h.z,c.z,this.tension));b.set(hh.calc(a),ih.calc(a),jh.calc(a));return b};qa.prototype.copy=function(a){H.prototype.copy.call(this,a);this.points=[];for(var b=0,c=a.points.length;bc.length- +2?c.length-1:a+1];c=c[a>c.length-3?c.length-1:a+2];b.set(fi(d,e.x,f.x,g.x,c.x),fi(d,e.y,f.y,g.y,c.y));return b};ab.prototype.copy=function(a){H.prototype.copy.call(this,a);this.points=[];for(var b=0,c=a.points.length;b=b)return b=c[a]-b,a=this.curves[a],c=a.getLength(),a.getPointAt(0===c?0:1-b/c);a++}return null},getLength:function(){var a=this.getCurveLengths();return a[a.length-1]},updateArcLengths:function(){this.needsUpdate=!0;this.cacheLengths=null;this.getCurveLengths()},getCurveLengths:function(){if(this.cacheLengths&& +this.cacheLengths.length===this.curves.length)return this.cacheLengths;for(var a=[],b=0,c=0,d=this.curves.length;cb;b++)this.coefficients[b].copy(a[b]);return this},zero:function(){for(var a=0;9>a;a++)this.coefficients[a].set(0,0,0);return this},getAt:function(a,b){var c=a.x,d=a.y;a=a.z;var e=this.coefficients;b.copy(e[0]).multiplyScalar(.282095);b.addScaledVector(e[1],.488603*d);b.addScaledVector(e[2],.488603*a);b.addScaledVector(e[3],.488603*c);b.addScaledVector(e[4],1.092548*c*d);b.addScaledVector(e[5],1.092548*d*a);b.addScaledVector(e[6],.315392*(3*a*a-1));b.addScaledVector(e[7], +1.092548*c*a);b.addScaledVector(e[8],.546274*(c*c-d*d));return b},getIrradianceAt:function(a,b){var c=a.x,d=a.y;a=a.z;var e=this.coefficients;b.copy(e[0]).multiplyScalar(.886227);b.addScaledVector(e[1],1.023328*d);b.addScaledVector(e[2],1.023328*a);b.addScaledVector(e[3],1.023328*c);b.addScaledVector(e[4],.858086*c*d);b.addScaledVector(e[5],.858086*d*a);b.addScaledVector(e[6],.743125*a*a-.247708);b.addScaledVector(e[7],.858086*c*a);b.addScaledVector(e[8],.429043*(c*c-d*d));return b},add:function(a){for(var b= +0;9>b;b++)this.coefficients[b].add(a.coefficients[b]);return this},addScaledSH:function(a,b){for(var c=0;9>c;c++)this.coefficients[c].addScaledVector(a.coefficients[c],b);return this},scale:function(a){for(var b=0;9>b;b++)this.coefficients[b].multiplyScalar(a);return this},lerp:function(a,b){for(var c=0;9>c;c++)this.coefficients[c].lerp(a.coefficients[c],b);return this},equals:function(a){for(var b=0;9>b;b++)if(!this.coefficients[b].equals(a.coefficients[b]))return!1;return!0},copy:function(a){return this.set(a.coefficients)}, +clone:function(){return(new this.constructor).copy(this)},fromArray:function(a,b){void 0===b&&(b=0);for(var c=this.coefficients,d=0;9>d;d++)c[d].fromArray(a,b+3*d);return this},toArray:function(a,b){void 0===a&&(a=[]);void 0===b&&(b=0);for(var c=this.coefficients,d=0;9>d;d++)c[d].toArray(a,b+3*d);return a}});Object.assign(of,{getBasisAt:function(a,b){var c=a.x,d=a.y;a=a.z;b[0]=.282095;b[1]=.488603*d;b[2]=.488603*a;b[3]=.488603*c;b[4]=1.092548*c*d;b[5]=1.092548*d*a;b[6]=.315392*(3*a*a-1);b[7]=1.092548* +c*a;b[8]=.546274*(c*c-d*d)}});Ua.prototype=Object.assign(Object.create(S.prototype),{constructor:Ua,isLightProbe:!0,copy:function(a){S.prototype.copy.call(this,a);this.sh.copy(a.sh);return this},fromJSON:function(a){this.intensity=a.intensity;this.sh.fromArray(a.sh);return this},toJSON:function(a){a=S.prototype.toJSON.call(this,a);a.object.sh=this.sh.toArray();return a}});pf.prototype=Object.assign(Object.create(V.prototype),{constructor:pf,load:function(a,b,c,d){var e=this,f=new Ta(e.manager);f.setPath(e.path); +f.load(a,function(c){try{b(e.parse(JSON.parse(c)))}catch(h){d?d(h):console.error(h),e.manager.itemError(a)}},c,d)},parse:function(a){function b(a){void 0===c[a]&&console.warn("THREE.MaterialLoader: Undefined texture",a);return c[a]}var c=this.textures,d=new Sk[a.type];void 0!==a.uuid&&(d.uuid=a.uuid);void 0!==a.name&&(d.name=a.name);void 0!==a.color&&d.color.setHex(a.color);void 0!==a.roughness&&(d.roughness=a.roughness);void 0!==a.metalness&&(d.metalness=a.metalness);void 0!==a.sheen&&(d.sheen=(new D).setHex(a.sheen)); +void 0!==a.emissive&&d.emissive.setHex(a.emissive);void 0!==a.specular&&d.specular.setHex(a.specular);void 0!==a.shininess&&(d.shininess=a.shininess);void 0!==a.clearcoat&&(d.clearcoat=a.clearcoat);void 0!==a.clearcoatRoughness&&(d.clearcoatRoughness=a.clearcoatRoughness);void 0!==a.fog&&(d.fog=a.fog);void 0!==a.flatShading&&(d.flatShading=a.flatShading);void 0!==a.blending&&(d.blending=a.blending);void 0!==a.combine&&(d.combine=a.combine);void 0!==a.side&&(d.side=a.side);void 0!==a.opacity&&(d.opacity= +a.opacity);void 0!==a.transparent&&(d.transparent=a.transparent);void 0!==a.alphaTest&&(d.alphaTest=a.alphaTest);void 0!==a.depthTest&&(d.depthTest=a.depthTest);void 0!==a.depthWrite&&(d.depthWrite=a.depthWrite);void 0!==a.colorWrite&&(d.colorWrite=a.colorWrite);void 0!==a.stencilWrite&&(d.stencilWrite=a.stencilWrite);void 0!==a.stencilWriteMask&&(d.stencilWriteMask=a.stencilWriteMask);void 0!==a.stencilFunc&&(d.stencilFunc=a.stencilFunc);void 0!==a.stencilRef&&(d.stencilRef=a.stencilRef);void 0!== +a.stencilFuncMask&&(d.stencilFuncMask=a.stencilFuncMask);void 0!==a.stencilFail&&(d.stencilFail=a.stencilFail);void 0!==a.stencilZFail&&(d.stencilZFail=a.stencilZFail);void 0!==a.stencilZPass&&(d.stencilZPass=a.stencilZPass);void 0!==a.wireframe&&(d.wireframe=a.wireframe);void 0!==a.wireframeLinewidth&&(d.wireframeLinewidth=a.wireframeLinewidth);void 0!==a.wireframeLinecap&&(d.wireframeLinecap=a.wireframeLinecap);void 0!==a.wireframeLinejoin&&(d.wireframeLinejoin=a.wireframeLinejoin);void 0!==a.rotation&& +(d.rotation=a.rotation);1!==a.linewidth&&(d.linewidth=a.linewidth);void 0!==a.dashSize&&(d.dashSize=a.dashSize);void 0!==a.gapSize&&(d.gapSize=a.gapSize);void 0!==a.scale&&(d.scale=a.scale);void 0!==a.polygonOffset&&(d.polygonOffset=a.polygonOffset);void 0!==a.polygonOffsetFactor&&(d.polygonOffsetFactor=a.polygonOffsetFactor);void 0!==a.polygonOffsetUnits&&(d.polygonOffsetUnits=a.polygonOffsetUnits);void 0!==a.skinning&&(d.skinning=a.skinning);void 0!==a.morphTargets&&(d.morphTargets=a.morphTargets); +void 0!==a.morphNormals&&(d.morphNormals=a.morphNormals);void 0!==a.dithering&&(d.dithering=a.dithering);void 0!==a.vertexTangents&&(d.vertexTangents=a.vertexTangents);void 0!==a.visible&&(d.visible=a.visible);void 0!==a.toneMapped&&(d.toneMapped=a.toneMapped);void 0!==a.userData&&(d.userData=a.userData);void 0!==a.vertexColors&&(d.vertexColors="number"===typeof a.vertexColors?0Number.EPSILON){if(0>k&&(g=b[f],l=-l,h=b[e],k=-k),!(a.yh.y))if(a.y===g.y){if(a.x===g.x)return!0}else{e=k*(a.x-g.x)-l*(a.y-g.y);if(0===e)return!0;0>e||(d=!d)}}else if(a.y===g.y&&(h.x<=a.x&&a.x<=g.x||g.x<=a.x&&a.x<=h.x))return!0}return d} +var e=sb.isClockWise,f=this.subPaths;if(0===f.length)return[];if(!0===b)return c(f);b=[];if(1===f.length){var g=f[0];var h=new Nb;h.curves=g.curves;b.push(h);return b}var l=!e(f[0].getPoints());l=a?!l:l;h=[];var k=[],p=[],n=0;k[n]=void 0;p[n]=[];for(var t=0,r=f.length;td&&this._mixBufferRegion(c,a,b*this._origIndex,1-d,b);0=b){var p=b++,n=a[p];c[n.uuid]=m;a[m]=n;c[k]=p;a[p]=h;h=0;for(k=e;h!==k;++h){n=d[h];var t=n[m];n[m]=n[p];n[p]=t}}}this.nCachedObjects_=b},uncache:function(){for(var a=this._objects,b=a.length,c=this.nCachedObjects_,d=this._indicesByUUID,e=this._bindings,f=e.length,g=0,h=arguments.length;g!==h;++g){var k=arguments[g].uuid,m=d[k];if(void 0!==m)if(delete d[k],mb||0===c)return;this._startTime= +null;b*=c}b*=this._updateTimeScale(a);c=this._updateTime(b);a=this._updateWeight(a);if(0c.parameterPositions[1]&& +(this.stopFading(),0===d&&(this.enabled=!1))}}return this._effectiveWeight=b},_updateTimeScale:function(a){var b=0;if(!this.paused){b=this.timeScale;var c=this._timeScaleInterpolant;if(null!==c){var d=c.evaluate(a)[0];b*=d;a>c.parameterPositions[1]&&(this.stopWarping(),0===b?this.paused=!0:this.timeScale=b)}}return this._effectiveTimeScale=b},_updateTime:function(a){var b=this.time+a,c=this._clip.duration,d=this.loop,e=this._loopCount,f=2202===d;if(0===a)return-1===e?b:f&&1===(e&1)?c-b:b;if(2200=== +d)a:{if(-1===e&&(this._loopCount=0,this._setEndings(!0,!0,!1)),b>=c)b=c;else if(0>b)b=0;else{this.time=b;break a}this.clampWhenFinished?this.paused=!0:this.enabled=!1;this.time=b;this._mixer.dispatchEvent({type:"finished",action:this,direction:0>a?-1:1})}else{-1===e&&(0<=a?(e=0,this._setEndings(!0,0===this.repetitions,f)):this._setEndings(0===this.repetitions,!0,f));if(b>=c||0>b){d=Math.floor(b/c);b-=c*d;e+=Math.abs(d);var g=this.repetitions-e;0>=g?(this.clampWhenFinished?this.paused=!0:this.enabled= +!1,this.time=b=0a,this._setEndings(a,!a,f)):this._setEndings(!1,!1,f),this._loopCount=e,this.time=b,this._mixer.dispatchEvent({type:"loop",action:this,loopDelta:d}))}else this.time=b;if(f&&1===(e&1))return c-b}return b},_setEndings:function(a,b,c){var d=this._interpolantSettings;c?(d.endingStart=2401,d.endingEnd=2401):(d.endingStart=a?this.zeroSlopeAtStart?2401:2400:2402,d.endingEnd=b?this.zeroSlopeAtEnd? +2401:2400:2402)},_scheduleFading:function(a,b,c){var d=this._mixer,e=d.time,f=this._weightInterpolant;null===f&&(this._weightInterpolant=f=d._lendControlInterpolant());d=f.parameterPositions;f=f.sampleValues;d[0]=e;f[0]=b;d[1]=e+a;f[1]=c;return this}});Hg.prototype=Object.assign(Object.create(ua.prototype),{constructor:Hg,_bindAction:function(a,b){var c=a._localRoot||this._root,d=a._clip.tracks,e=d.length,f=a._propertyBindings;a=a._interpolants;var g=c.uuid,h=this._bindingsByRootAndName,k=h[g];void 0=== +k&&(k={},h[g]=k);for(h=0;h!==e;++h){var m=d[h],p=m.name,n=k[p];if(void 0===n){n=f[h];if(void 0!==n){null===n._cacheIndex&&(++n.referenceCount,this._addInactiveBinding(n,g,p));continue}n=new Gg(Aa.create(c,p,b&&b._propertyBindings[h].binding.parsedPath),m.ValueTypeName,m.getValueSize());++n.referenceCount;this._addInactiveBinding(n,g,p)}f[h]=n;a[h].resultBuffer=n.buffer}},_activateAction:function(a){if(!this._isActiveAction(a)){if(null===a._cacheIndex){var b=(a._localRoot||this._root).uuid,c=a._clip.uuid, +d=this._actionsByClip[c];this._bindAction(a,d&&d.knownActions[0]);this._addInactiveAction(a,c,b)}b=a._propertyBindings;c=0;for(d=b.length;c!==d;++c){var e=b[c];0===e.useCount++&&(this._lendBinding(e),e.saveOriginalState())}this._lendAction(a)}},_deactivateAction:function(a){if(this._isActiveAction(a)){for(var b=a._propertyBindings,c=0,d=b.length;c!==d;++c){var e=b[c];0===--e.useCount&&(e.restoreOriginalState(),this._takeBackBinding(e))}this._takeBackAction(a)}},_initMemoryManager:function(){this._actions= +[];this._nActiveActions=0;this._actionsByClip={};this._bindings=[];this._nActiveBindings=0;this._bindingsByRootAndName={};this._controlInterpolants=[];this._nActiveControlInterpolants=0;var a=this;this.stats={actions:{get total(){return a._actions.length},get inUse(){return a._nActiveActions}},bindings:{get total(){return a._bindings.length},get inUse(){return a._nActiveBindings}},controlInterpolants:{get total(){return a._controlInterpolants.length},get inUse(){return a._nActiveControlInterpolants}}}}, +_isActiveAction:function(a){a=a._cacheIndex;return null!==a&&athis.max.x||a.ythis.max.y?!1:!0},containsBox:function(a){return this.min.x<=a.min.x&&a.max.x<=this.max.x&&this.min.y<=a.min.y&&a.max.y<=this.max.y},getParameter:function(a,b){void 0===b&&(console.warn("THREE.Box2: .getParameter() target is now required"),b=new v);return b.set((a.x-this.min.x)/(this.max.x-this.min.x),(a.y-this.min.y)/(this.max.y-this.min.y))},intersectsBox:function(a){return a.max.x< +this.min.x||a.min.x>this.max.x||a.max.ythis.max.y?!1:!0},clampPoint:function(a,b){void 0===b&&(console.warn("THREE.Box2: .clampPoint() target is now required"),b=new v);return b.copy(a).clamp(this.min,this.max)},distanceToPoint:function(a){return Ti.copy(a).clamp(this.min,this.max).sub(a).length()},intersect:function(a){this.min.max(a.min);this.max.min(a.max);return this},union:function(a){this.min.min(a.min);this.max.max(a.max);return this},translate:function(a){this.min.add(a); +this.max.add(a);return this},equals:function(a){return a.min.equals(this.min)&&a.max.equals(this.max)}});var Ui=new p,Sf=new p;Object.assign(Mg.prototype,{set:function(a,b){this.start.copy(a);this.end.copy(b);return this},clone:function(){return(new this.constructor).copy(this)},copy:function(a){this.start.copy(a.start);this.end.copy(a.end);return this},getCenter:function(a){void 0===a&&(console.warn("THREE.Line3: .getCenter() target is now required"),a=new p);return a.addVectors(this.start,this.end).multiplyScalar(.5)}, +delta:function(a){void 0===a&&(console.warn("THREE.Line3: .delta() target is now required"),a=new p);return a.subVectors(this.end,this.start)},distanceSq:function(){return this.start.distanceToSquared(this.end)},distance:function(){return this.start.distanceTo(this.end)},at:function(a,b){void 0===b&&(console.warn("THREE.Line3: .at() target is now required"),b=new p);return this.delta(b).multiplyScalar(a).add(this.start)},closestPointToPointParameter:function(a,b){Ui.subVectors(a,this.start);Sf.subVectors(this.end, +this.start);a=Sf.dot(Sf);a=Sf.dot(Ui)/a;b&&(a=O.clamp(a,0,1));return a},closestPointToPoint:function(a,b,c){a=this.closestPointToPointParameter(a,b);void 0===c&&(console.warn("THREE.Line3: .closestPointToPoint() target is now required"),c=new p);return this.delta(c).multiplyScalar(a).add(this.start)},applyMatrix4:function(a){this.start.applyMatrix4(a);this.end.applyMatrix4(a);return this},equals:function(a){return a.start.equals(this.start)&&a.end.equals(this.end)}});ne.prototype=Object.create(y.prototype); +ne.prototype.constructor=ne;ne.prototype.isImmediateRenderObject=!0;var Vi=new p;hd.prototype=Object.create(y.prototype);hd.prototype.constructor=hd;hd.prototype.dispose=function(){this.cone.geometry.dispose();this.cone.material.dispose()};hd.prototype.update=function(){this.light.updateMatrixWorld();var a=this.light.distance?this.light.distance:1E3,b=a*Math.tan(this.light.angle);this.cone.scale.set(b,b,a);Vi.setFromMatrixPosition(this.light.target.matrixWorld);this.cone.lookAt(Vi);void 0!==this.color? +this.cone.material.color.set(this.color):this.cone.material.color.copy(this.light.color)};var Tb=new p,Tf=new N,nh=new N;pc.prototype=Object.create(ma.prototype);pc.prototype.constructor=pc;pc.prototype.isSkeletonHelper=!0;pc.prototype.updateMatrixWorld=function(a){var b=this.bones,c=this.geometry,d=c.getAttribute("position");nh.getInverse(this.root.matrixWorld);for(var e=0,f=0;eMath.abs(b)&&(b=1E-8);this.scale.set(.5*this.size,.5*this.size,b);this.children[0].material.side=0>b?1:0;this.lookAt(this.plane.normal);y.prototype.updateMatrixWorld.call(this,a)};var $i=new p,yf,Ng;xb.prototype=Object.create(y.prototype);xb.prototype.constructor=xb;xb.prototype.setDirection=function(a){.99999a.y?this.quaternion.set(1,0,0,0):($i.set(a.z, +0,-a.x).normalize(),this.quaternion.setFromAxisAngle($i,Math.acos(a.y)))};xb.prototype.setLength=function(a,b,c){void 0===b&&(b=.2*a);void 0===c&&(c=.2*b);this.line.scale.set(1,Math.max(1E-4,a-b),1);this.line.updateMatrix();this.cone.scale.set(c,b,c);this.cone.position.y=a;this.cone.updateMatrix()};xb.prototype.setColor=function(a){this.line.material.color.set(a);this.cone.material.color.set(a)};xb.prototype.copy=function(a){y.prototype.copy.call(this,a,!1);this.line.copy(a.line);this.cone.copy(a.cone); +return this};xb.prototype.clone=function(){return(new this.constructor).copy(this)};re.prototype=Object.create(ma.prototype);re.prototype.constructor=re;var nb=Math.pow(2,8),aj=[.125,.215,.35,.446,.526,.582],bj=5+aj.length,mb={3E3:0,3001:1,3002:2,3004:3,3005:4,3006:5,3007:6},oh=new fd,ph=function(){for(var a=[],b=[],c=[],d=8,e=0;em;m++){var p=m%3*2/3-1,n=2n;n++)t=n%3,0==t?(b.up.set(0,c[n],0),b.lookAt(e[n],0,0)):1==t?(b.up.set(0,0,c[n]),b.lookAt(0,e[n],0)):(b.up.set(0,c[n],0),b.lookAt(0,0,e[n])),Rg(d,t*nb,2q;++q){var u=q/n;u=Math.exp(-u*u/2);e.push(u);0==q?r+=u:qh)return!1}return!0}function cb(a,b){this.center=void 0!==a?a:new n;this.radius=void 0!==b?b:-1}function Ub(a,b){this.origin=void 0!==a?a:new n;this.direction=void 0!==b?b:new n(0,0,-1)}function Ua(a,b){this.normal=void 0!==a?a:new n(1,0,0);this.constant=void 0!==b?b:0}function ra(a,b,c){this.a=void 0!==a?a:new n;this.b=void 0!==b?b:new n;this.c=void 0!==c?c:new n}function E(a,b,c){return void 0===b&&void 0===c?this.set(a):this.setRGB(a,b,c)}function bg(a,b,c){0>c&&(c+=1);1< +c&&--c;return c<1/6?a+6*(b-a)*c:.5>c?b:c<2/3?a+6*(b-a)*(2/3-c):a}function cg(a){return.04045>a?.0773993808*a:Math.pow(.9478672986*a+.0521327014,2.4)}function dg(a){return.0031308>a?12.92*a:1.055*Math.pow(a,.41666)-.055}function zc(a,b,c,d,e,f){this.a=a;this.b=b;this.c=c;this.normal=d&&d.isVector3?d:new n;this.vertexNormals=Array.isArray(d)?d:[];this.color=e&&e.isColor?e:new E;this.vertexColors=Array.isArray(e)?e:[];this.materialIndex=void 0!==f?f:0}function K(){Object.defineProperty(this,"id",{value:hj++}); +this.uuid=O.generateUUID();this.name="";this.type="Material";this.fog=!0;this.blending=1;this.side=0;this.vertexColors=this.flatShading=!1;this.opacity=1;this.transparent=!1;this.blendSrc=204;this.blendDst=205;this.blendEquation=100;this.blendEquationAlpha=this.blendDstAlpha=this.blendSrcAlpha=null;this.depthFunc=3;this.depthWrite=this.depthTest=!0;this.stencilWriteMask=255;this.stencilFunc=519;this.stencilRef=0;this.stencilFuncMask=255;this.stencilZPass=this.stencilZFail=this.stencilFail=7680;this.stencilWrite= +!1;this.clippingPlanes=null;this.clipShadows=this.clipIntersection=!1;this.shadowSide=null;this.colorWrite=!0;this.precision=null;this.polygonOffset=!1;this.polygonOffsetUnits=this.polygonOffsetFactor=0;this.dithering=!1;this.alphaTest=0;this.premultipliedAlpha=!1;this.toneMapped=this.visible=!0;this.userData={};this.version=0}function Na(a){K.call(this);this.type="MeshBasicMaterial";this.color=new E(16777215);this.lightMap=this.map=null;this.lightMapIntensity=1;this.aoMap=null;this.aoMapIntensity= +1;this.envMap=this.alphaMap=this.specularMap=null;this.combine=0;this.reflectivity=1;this.refractionRatio=.98;this.wireframe=!1;this.wireframeLinewidth=1;this.wireframeLinejoin=this.wireframeLinecap="round";this.morphTargets=this.skinning=!1;this.setValues(a)}function G(a,b,c){if(Array.isArray(a))throw new TypeError("THREE.BufferAttribute: array should be a Typed Array.");this.name="";this.array=a;this.itemSize=b;this.count=void 0!==a?a.length/b:0;this.normalized=!0===c;this.usage=35044;this.updateRange= +{offset:0,count:-1};this.version=0}function yd(a,b,c){G.call(this,new Int8Array(a),b,c)}function zd(a,b,c){G.call(this,new Uint8Array(a),b,c)}function Ad(a,b,c){G.call(this,new Uint8ClampedArray(a),b,c)}function Bd(a,b,c){G.call(this,new Int16Array(a),b,c)}function Vb(a,b,c){G.call(this,new Uint16Array(a),b,c)}function Cd(a,b,c){G.call(this,new Int32Array(a),b,c)}function Wb(a,b,c){G.call(this,new Uint32Array(a),b,c)}function C(a,b,c){G.call(this,new Float32Array(a),b,c)}function Dd(a,b,c){G.call(this, +new Float64Array(a),b,c)}function th(){this.vertices=[];this.normals=[];this.colors=[];this.uvs=[];this.uvs2=[];this.groups=[];this.morphTargets={};this.skinWeights=[];this.skinIndices=[];this.boundingSphere=this.boundingBox=null;this.groupsNeedUpdate=this.uvsNeedUpdate=this.colorsNeedUpdate=this.normalsNeedUpdate=this.verticesNeedUpdate=!1}function uh(a){if(0===a.length)return-Infinity;for(var b=a[0],c=1,d=a.length;cb&&(b=a[c]);return b}function H(){Object.defineProperty(this,"id",{value:ij+= +2});this.uuid=O.generateUUID();this.name="";this.type="BufferGeometry";this.index=null;this.attributes={};this.morphAttributes={};this.morphTargetsRelative=!1;this.groups=[];this.boundingSphere=this.boundingBox=null;this.drawRange={start:0,count:Infinity};this.userData={}}function Z(a,b){x.call(this);this.type="Mesh";this.geometry=void 0!==a?a:new H;this.material=void 0!==b?b:new Na;this.updateMorphTargets()}function vh(a,b,c,d,e,f,g,h){if(null===(1===b.side?d.intersectTriangle(g,f,e,!0,h):d.intersectTriangle(e, +f,g,2!==b.side,h)))return null;Ee.copy(h);Ee.applyMatrix4(a.matrixWorld);b=c.ray.origin.distanceTo(Ee);return bc.far?null:{distance:b,point:Ee.clone(),object:a}}function Fe(a,b,c,d,e,f,g,h,l,m,q,p){Ab.fromBufferAttribute(e,m);Bb.fromBufferAttribute(e,q);Cb.fromBufferAttribute(e,p);e=a.morphTargetInfluences;if(b.morphTargets&&f&&e){Ge.set(0,0,0);He.set(0,0,0);Ie.set(0,0,0);for(var A=0,k=f.length;Ag;g++)a.setRenderTarget(c, +g),a.clear(b,d,e);a.setRenderTarget(f)}}}function Xb(a,b,c){Number.isInteger(b)&&(console.warn("THREE.WebGLCubeRenderTarget: constructor signature is now WebGLCubeRenderTarget( size, options )"),b=c);Ea.call(this,a,a,b)}function Yb(a,b,c,d,e,f,g,h,l,m,q,p){W.call(this,null,f,g,h,l,m,d,e,q,p);this.image={data:a||null,width:b||1,height:c||1};this.magFilter=void 0!==l?l:1003;this.minFilter=void 0!==m?m:1003;this.flipY=this.generateMipmaps=!1;this.unpackAlignment=1;this.needsUpdate=!0}function Fc(a,b, +c,d,e,f){this.planes=[void 0!==a?a:new Ua,void 0!==b?b:new Ua,void 0!==c?c:new Ua,void 0!==d?d:new Ua,void 0!==e?e:new Ua,void 0!==f?f:new Ua]}function wh(){function a(c,g){d(c,g);e=b.requestAnimationFrame(a)}var b=null,c=!1,d=null,e=null;return{start:function(){!0!==c&&null!==d&&(e=b.requestAnimationFrame(a),c=!0)},stop:function(){b.cancelAnimationFrame(e);c=!1},setAnimationLoop:function(a){d=a},setContext:function(a){b=a}}}function kj(a,b){function c(b,c){var d=b.array,e=b.usage,f=a.createBuffer(); +a.bindBuffer(c,f);a.bufferData(c,d,e);b.onUploadCallback();c=5126;d instanceof Float32Array?c=5126:d instanceof Float64Array?console.warn("THREE.WebGLAttributes: Unsupported data buffer format: Float64Array."):d instanceof Uint16Array?c=5123:d instanceof Int16Array?c=5122:d instanceof Uint32Array?c=5125:d instanceof Int32Array?c=5124:d instanceof Int8Array?c=5120:d instanceof Uint8Array&&(c=5121);return{buffer:f,type:c,bytesPerElement:d.BYTES_PER_ELEMENT,version:b.version}}var d=b.isWebGL2,e=new WeakMap; +return{get:function(a){a.isInterleavedBufferAttribute&&(a=a.data);return e.get(a)},remove:function(b){b.isInterleavedBufferAttribute&&(b=b.data);var c=e.get(b);c&&(a.deleteBuffer(c.buffer),e.delete(b))},update:function(b,g){b.isInterleavedBufferAttribute&&(b=b.data);var f=e.get(b);if(void 0===f)e.set(b,c(b,g));else if(f.versione;e++)d[e]=[e,0];return{update:function(e,g,h,l){var f=e.morphTargetInfluences;e=void 0===f?0:f.length;var q=b[g.id];if(void 0===q){q=[];for(var p=0;pf;f++)ff;f++)k=d[f],p=k[0],k=k[1],p!==Number.MAX_SAFE_INTEGER&&k?(e&&g.getAttribute("morphTarget"+f)!==e[p]&&g.setAttribute("morphTarget"+f,e[p]),h&&g.getAttribute("morphNormal"+f)!==h[p]&&g.setAttribute("morphNormal"+f,h[p]),c[f]=k,q+=k):(e&&void 0!==g.getAttribute("morphTarget"+f)&&g.deleteAttribute("morphTarget"+f),h&&void 0!==g.getAttribute("morphNormal"+f)&&g.deleteAttribute("morphNormal"+f),c[f]=0); +g=g.morphTargetsRelative?1:1-q;l.getUniforms().setValue(a,"morphTargetBaseInfluence",g);l.getUniforms().setValue(a,"morphTargetInfluences",c)}}}function xj(a,b,c,d){var e=new WeakMap;return{update:function(a){var f=d.render.frame,h=a.geometry,l=b.get(a,h);e.get(l)!==f&&(h.isGeometry&&l.updateFromObject(a),b.update(l),e.set(l,f));a.isInstancedMesh&&c.update(a.instanceMatrix,34962);return l},dispose:function(){e=new WeakMap}}}function ob(a,b,c,d,e,f,g,h,l,m){a=void 0!==a?a:[];W.call(this,a,void 0!== +b?b:301,c,d,e,f,void 0!==g?g:1022,h,l,m);this.flipY=!1}function Gc(a,b,c,d){W.call(this,null);this.image={data:a||null,width:b||1,height:c||1,depth:d||1};this.minFilter=this.magFilter=1003;this.wrapR=1001;this.flipY=this.generateMipmaps=!1;this.needsUpdate=!0}function Hc(a,b,c,d){W.call(this,null);this.image={data:a||null,width:b||1,height:c||1,depth:d||1};this.minFilter=this.magFilter=1003;this.wrapR=1001;this.flipY=this.generateMipmaps=!1;this.needsUpdate=!0}function Ic(a,b,c){var d=a[0];if(0>= +d||0");return a.replace(jg,ig)}function Mh(a,b,c,d){console.warn("WebGLProgram: #pragma unroll_loop shader syntax is deprecated. Please use #pragma unroll_loop_start syntax instead.");return kg(a,b,c,d)}function kg(a,b,c,d){a="";for(b=parseInt(b);bd;d++)c.probe.push(new n);var e=new n,f=new U,g=new U;return{setup:function(d,l,m){for(var h=l=0,p=0,k=0;9>k;k++)c.probe[k].set(0,0,0);var r=k=0,t=0,v=0,n=0,B=0,w=0,ca=0;m=m.matrixWorldInverse;d.sort(wk);for(var F=0,N=d.length;Fha;ha++)c.probe[ha].addScaledVector(z.sh.coefficients[ha],u);else if(z.isDirectionalLight){u=a.get(z);u.color.copy(z.color).multiplyScalar(z.intensity);u.direction.setFromMatrixPosition(z.matrixWorld);e.setFromMatrixPosition(z.target.matrixWorld);u.direction.sub(e);u.direction.transformDirection(m);if(z.castShadow){var ua=z.shadow;P=b.get(z); +P.shadowBias=ua.bias;P.shadowNormalBias=ua.normalBias;P.shadowRadius=ua.radius;P.shadowMapSize=ua.mapSize;c.directionalShadow[k]=P;c.directionalShadowMap[k]=ha;c.directionalShadowMatrix[k]=z.shadow.matrix;B++}c.directional[k]=u;k++}else z.isSpotLight?(ua=a.get(z),ua.position.setFromMatrixPosition(z.matrixWorld),ua.position.applyMatrix4(m),ua.color.copy(P).multiplyScalar(u),ua.distance=Q,ua.direction.setFromMatrixPosition(z.matrixWorld),e.setFromMatrixPosition(z.target.matrixWorld),ua.direction.sub(e), +ua.direction.transformDirection(m),ua.coneCos=Math.cos(z.angle),ua.penumbraCos=Math.cos(z.angle*(1-z.penumbra)),ua.decay=z.decay,z.castShadow&&(u=z.shadow,P=b.get(z),P.shadowBias=u.bias,P.shadowNormalBias=u.normalBias,P.shadowRadius=u.radius,P.shadowMapSize=u.mapSize,c.spotShadow[t]=P,c.spotShadowMap[t]=ha,c.spotShadowMatrix[t]=z.shadow.matrix,ca++),c.spot[t]=ua,t++):z.isRectAreaLight?(ha=a.get(z),ha.color.copy(P).multiplyScalar(u),ha.position.setFromMatrixPosition(z.matrixWorld),ha.position.applyMatrix4(m), +g.identity(),f.copy(z.matrixWorld),f.premultiply(m),g.extractRotation(f),ha.halfWidth.set(.5*z.width,0,0),ha.halfHeight.set(0,.5*z.height,0),ha.halfWidth.applyMatrix4(g),ha.halfHeight.applyMatrix4(g),c.rectArea[v]=ha,v++):z.isPointLight?(u=a.get(z),u.position.setFromMatrixPosition(z.matrixWorld),u.position.applyMatrix4(m),u.color.copy(z.color).multiplyScalar(z.intensity),u.distance=z.distance,u.decay=z.decay,z.castShadow&&(ua=z.shadow,P=b.get(z),P.shadowBias=ua.bias,P.shadowNormalBias=ua.normalBias, +P.shadowRadius=ua.radius,P.shadowMapSize=ua.mapSize,P.shadowCameraNear=ua.camera.near,P.shadowCameraFar=ua.camera.far,c.pointShadow[r]=P,c.pointShadowMap[r]=ha,c.pointShadowMatrix[r]=z.shadow.matrix,w++),c.point[r]=u,r++):z.isHemisphereLight&&(ha=a.get(z),ha.direction.setFromMatrixPosition(z.matrixWorld),ha.direction.transformDirection(m),ha.direction.normalize(),ha.skyColor.copy(z.color).multiplyScalar(u),ha.groundColor.copy(z.groundColor).multiplyScalar(u),c.hemi[n]=ha,n++)}c.ambient[0]=l;c.ambient[1]= +h;c.ambient[2]=p;d=c.hash;if(d.directionalLength!==k||d.pointLength!==r||d.spotLength!==t||d.rectAreaLength!==v||d.hemiLength!==n||d.numDirectionalShadows!==B||d.numPointShadows!==w||d.numSpotShadows!==ca)c.directional.length=k,c.spot.length=t,c.rectArea.length=v,c.point.length=r,c.hemi.length=n,c.directionalShadow.length=B,c.directionalShadowMap.length=B,c.pointShadow.length=w,c.pointShadowMap.length=w,c.spotShadow.length=ca,c.spotShadowMap.length=ca,c.directionalShadowMatrix.length=B,c.pointShadowMatrix.length= +w,c.spotShadowMatrix.length=ca,d.directionalLength=k,d.pointLength=r,d.spotLength=t,d.rectAreaLength=v,d.hemiLength=n,d.numDirectionalShadows=B,d.numPointShadows=w,d.numSpotShadows=ca,c.version=yk++},state:c}}function Sh(){var a=new xk,b=[],c=[];return{init:function(){b.length=0;c.length=0},state:{lightsArray:b,shadowsArray:c,lights:a},setupLights:function(d){a.setup(b,c,d)},pushLight:function(a){b.push(a)},pushShadow:function(a){c.push(a)}}}function zk(){function a(c){c=c.target;c.removeEventListener("dispose", +a);b.delete(c)}var b=new WeakMap;return{get:function(c,d){if(!1===b.has(c)){var e=new Sh;b.set(c,new WeakMap);b.get(c).set(d,e);c.addEventListener("dispose",a)}else!1===b.get(c).has(d)?(e=new Sh,b.get(c).set(d,e)):e=b.get(c).get(d);return e},dispose:function(){b=new WeakMap}}}function Eb(a){K.call(this);this.type="MeshDepthMaterial";this.depthPacking=3200;this.morphTargets=this.skinning=!1;this.displacementMap=this.alphaMap=this.map=null;this.displacementScale=1;this.displacementBias=0;this.wireframe= +!1;this.wireframeLinewidth=1;this.fog=!1;this.setValues(a)}function Fb(a){K.call(this);this.type="MeshDistanceMaterial";this.referencePosition=new n;this.nearDistance=1;this.farDistance=1E3;this.morphTargets=this.skinning=!1;this.displacementMap=this.alphaMap=this.map=null;this.displacementScale=1;this.displacementBias=0;this.fog=!1;this.setValues(a)}function Th(a,b,c){function d(a,b,c){c=a<<0|b<<1|c<<2;var d=p[c];void 0===d&&(d=new Eb({depthPacking:3201,morphTargets:a,skinning:b}),p[c]=d);return d} +function e(a,b,c){c=a<<0|b<<1|c<<2;var d=k[c];void 0===d&&(d=new Fb({morphTargets:a,skinning:b}),k[c]=d);return d}function f(b,c,f,g,h,l,m){var q=d,p=b.customDepthMaterial;!0===g.isPointLight&&(q=e,p=b.customDistanceMaterial);void 0===p?(p=!1,!0===f.morphTargets&&(p=c.morphAttributes&&c.morphAttributes.position&&0\nvoid main() {\n float mean = 0.0;\n float squared_mean = 0.0;\n\tfloat depth = unpackRGBAToDepth( texture2D( shadow_pass, ( gl_FragCoord.xy ) / resolution ) );\n for ( float i = -1.0; i < 1.0 ; i += SAMPLE_RATE) {\n #ifdef HORIZONAL_PASS\n vec2 distribution = unpackRGBATo2Half( texture2D( shadow_pass, ( gl_FragCoord.xy + vec2( i, 0.0 ) * radius ) / resolution ) );\n mean += distribution.x;\n squared_mean += distribution.y * distribution.y + distribution.x * distribution.x;\n #else\n float depth = unpackRGBAToDepth( texture2D( shadow_pass, ( gl_FragCoord.xy + vec2( 0.0, i ) * radius ) / resolution ) );\n mean += depth;\n squared_mean += depth * depth;\n #endif\n }\n mean = mean * HALF_SAMPLE_RATE;\n squared_mean = squared_mean * HALF_SAMPLE_RATE;\n float std_dev = sqrt( squared_mean - mean * mean );\n gl_FragColor = pack2HalfToRGBA( vec2( mean, std_dev ) );\n}"}), +n=v.clone();n.defines.HORIZONAL_PASS=1;var B=new H;B.setAttribute("position",new G(new Float32Array([-1,-1,.5,3,-1,.5,-1,3,.5]),3));var w=new Z(B,v),ca=this;this.enabled=!1;this.autoUpdate=!0;this.needsUpdate=!1;this.type=1;this.render=function(d,e,f){if(!1!==ca.enabled&&(!1!==ca.autoUpdate||!1!==ca.needsUpdate)&&0!==d.length){var p=a.getRenderTarget(),k=a.getActiveCubeFace(),A=a.getActiveMipmapLevel(),r=a.state;r.setBlending(0);r.buffers.color.setClear(1,1,1,1);r.buffers.depth.setTest(!0);r.setScissorTest(!1); +for(var t=0,y=d.length;tc||l.y>c)l.x>c&&(m.x=Math.floor(c/u.x),l.x=m.x*u.x,z.mapSize.x=m.x),l.y>c&&(m.y=Math.floor(c/u.y),l.y=m.y*u.y,z.mapSize.y=m.y);null!==z.map||z.isPointLightShadow||3!==this.type||(u={minFilter:1006,magFilter:1006,format:1023},z.map=new Ea(l.x,l.y,u), +z.map.texture.name=B.name+".shadowMap",z.mapPass=new Ea(l.x,l.y,u),z.camera.updateProjectionMatrix());null===z.map&&(z.map=new Ea(l.x,l.y,{minFilter:1003,magFilter:1003,format:1023}),z.map.texture.name=B.name+".shadowMap",z.camera.updateProjectionMatrix());a.setRenderTarget(z.map);a.clear();u=z.getViewportCount();for(var F=0;Fd||a.height>d)e=d/Math.max(a.width,a.height);if(1>e||!0===b){if("undefined"!==typeof HTMLImageElement&&a instanceof HTMLImageElement||"undefined"!==typeof HTMLCanvasElement&&a instanceof HTMLCanvasElement||"undefined"!==typeof ImageBitmap&&a instanceof ImageBitmap)return d=b?O.floorPowerOfTwo:Math.floor,b=d(e*a.width),e=d(e*a.height),void 0===J&&(J=h(b,e)),c=c?h(b,e):J,c.width=b,c.height=e,c.getContext("2d").drawImage(a,0,0,b,e),console.warn("THREE.WebGLRenderer: Texture has been resized from ("+ +a.width+"x"+a.height+") to ("+b+"x"+e+")."),c;"data"in a&&console.warn("THREE.WebGLRenderer: Image in DataTexture is too big ("+a.width+"x"+a.height+").")}return a}function m(a){return O.isPowerOfTwo(a.width)&&O.isPowerOfTwo(a.height)}function q(a,b){return a.generateMipmaps&&b&&1003!==a.minFilter&&1006!==a.minFilter}function p(b,c,e,f){a.generateMipmap(b);d.get(c).__maxMipLevel=Math.log(Math.max(e,f))*Math.LOG2E}function k(c,d,e){if(!1===Q)return d;if(null!==c){if(void 0!==a[c])return a[c];console.warn("THREE.WebGLRenderer: Attempt to use non-existing WebGL internal format '"+ +c+"'")}c=d;6403===d&&(5126===e&&(c=33326),5131===e&&(c=33325),5121===e&&(c=33321));6407===d&&(5126===e&&(c=34837),5131===e&&(c=34843),5121===e&&(c=32849));6408===d&&(5126===e&&(c=34836),5131===e&&(c=34842),5121===e&&(c=32856));33325!==c&&33326!==c&&34842!==c&&34836!==c||b.get("EXT_color_buffer_float");return c}function r(a){return 1003===a||1004===a||1005===a?9728:9729}function t(b){b=b.target;b.removeEventListener("dispose",t);var c=d.get(b);void 0!==c.__webglInit&&(a.deleteTexture(c.__webglTexture), +d.remove(b));b.isVideoTexture&&E.delete(b);g.memory.textures--}function v(b){b=b.target;b.removeEventListener("dispose",v);var c=d.get(b),e=d.get(b.texture);if(b){void 0!==e.__webglTexture&&a.deleteTexture(e.__webglTexture);b.depthTexture&&b.depthTexture.dispose();if(b.isWebGLCubeRenderTarget)for(e=0;6>e;e++)a.deleteFramebuffer(c.__webglFramebuffer[e]),c.__webglDepthbuffer&&a.deleteRenderbuffer(c.__webglDepthbuffer[e]);else a.deleteFramebuffer(c.__webglFramebuffer),c.__webglDepthbuffer&&a.deleteRenderbuffer(c.__webglDepthbuffer), +c.__webglMultisampledFramebuffer&&a.deleteFramebuffer(c.__webglMultisampledFramebuffer),c.__webglColorRenderbuffer&&a.deleteRenderbuffer(c.__webglColorRenderbuffer),c.__webglDepthRenderbuffer&&a.deleteRenderbuffer(c.__webglDepthRenderbuffer);d.remove(b.texture);d.remove(b)}g.memory.textures--}function n(a,b){var e=d.get(a);if(a.isVideoTexture){var f=g.render.frame;E.get(a)!==f&&(E.set(a,f),a.update())}if(0r;r++)e[r]=h||A?A?b.image[r].image:b.image[r]:l(b.image[r],!1,!0,C);r=e[0];var t=m(r)||Q,v=f.convert(b.format),n=f.convert(b.type),y=k(b.internalFormat,v,n);u(34067,b,t);if(h){for(A=0;6>A;A++){var w=e[A].mipmaps;for(h=0;hh;h++)if(A)for(c.texImage2D(34069+h,0,y,e[h].width,e[h].height,0,v,n,e[h].data),z=0;z=ha&&console.warn("THREE.WebGLTextures: Trying to use "+a+" texture units while this GPU supports only "+ha);G+=1;return a};this.resetTextureUnits=function(){G=0};this.setTexture2D=n;this.setTexture2DArray=function(a,b){var e=d.get(a);0A;A++)e.__webglFramebuffer[A]=a.createFramebuffer();else if(e.__webglFramebuffer=a.createFramebuffer(),A)if(Q){e.__webglMultisampledFramebuffer=a.createFramebuffer();e.__webglColorRenderbuffer=a.createRenderbuffer();a.bindRenderbuffer(36161,e.__webglColorRenderbuffer);A=f.convert(b.texture.format);var t=f.convert(b.texture.type);A=k(b.texture.internalFormat,A,t);t=x(b);a.renderbufferStorageMultisample(36161,t,A,b.width,b.height);a.bindFramebuffer(36160,e.__webglMultisampledFramebuffer); +a.framebufferRenderbuffer(36160,36064,36161,e.__webglColorRenderbuffer);a.bindRenderbuffer(36161,null);b.depthBuffer&&(e.__webglDepthRenderbuffer=a.createRenderbuffer(),P(e.__webglDepthRenderbuffer,b,!0));a.bindFramebuffer(36160,null)}else console.warn("THREE.WebGLRenderer: WebGLMultisampleRenderTarget can only be used with WebGL2.");if(l){c.bindTexture(34067,h.__webglTexture);u(34067,b.texture,r);for(h=0;6>h;h++)z(e.__webglFramebuffer[h],b,36064,34069+h);q(b.texture,r)&&p(34067,b.texture,b.width, +b.height);c.bindTexture(34067,null)}else c.bindTexture(3553,h.__webglTexture),u(3553,b.texture,r),z(e.__webglFramebuffer,b,36064,3553),q(b.texture,r)&&p(3553,b.texture,b.width,b.height),c.bindTexture(3553,null);if(b.depthBuffer){e=d.get(b);r=!0===b.isWebGLCubeRenderTarget;if(b.depthTexture){if(r)throw Error("target.depthTexture not supported in Cube render targets");if(b&&b.isWebGLCubeRenderTarget)throw Error("Depth Texture with cube render targets is not supported");a.bindFramebuffer(36160,e.__webglFramebuffer); +if(!b.depthTexture||!b.depthTexture.isDepthTexture)throw Error("renderTarget.depthTexture must be an instance of THREE.DepthTexture");d.get(b.depthTexture).__webglTexture&&b.depthTexture.image.width===b.width&&b.depthTexture.image.height===b.height||(b.depthTexture.image.width=b.width,b.depthTexture.image.height=b.height,b.depthTexture.needsUpdate=!0);n(b.depthTexture,0);e=d.get(b.depthTexture).__webglTexture;if(1026===b.depthTexture.format)a.framebufferTexture2D(36160,36096,3553,e,0);else if(1027=== +b.depthTexture.format)a.framebufferTexture2D(36160,33306,3553,e,0);else throw Error("Unknown depthTexture format");}else if(r)for(e.__webglDepthbuffer=[],r=0;6>r;r++)a.bindFramebuffer(36160,e.__webglFramebuffer[r]),e.__webglDepthbuffer[r]=a.createRenderbuffer(),P(e.__webglDepthbuffer[r],b,!1);else a.bindFramebuffer(36160,e.__webglFramebuffer),e.__webglDepthbuffer=a.createRenderbuffer(),P(e.__webglDepthbuffer,b,!1);a.bindFramebuffer(36160,null)}};this.updateRenderTargetMipmap=function(a){var b=a.texture, +e=m(a)||Q;if(q(b,e)){e=a.isWebGLCubeRenderTarget?34067:3553;var f=d.get(b).__webglTexture;c.bindTexture(e,f);p(e,b,a.width,a.height);c.bindTexture(e,null)}};this.updateMultisampleRenderTarget=function(b){if(b.isWebGLMultisampleRenderTarget)if(Q){var c=d.get(b);a.bindFramebuffer(36008,c.__webglMultisampledFramebuffer);a.bindFramebuffer(36009,c.__webglFramebuffer);var e=b.width,f=b.height,g=16384;b.depthBuffer&&(g|=256);b.stencilBuffer&&(g|=1024);a.blitFramebuffer(0,0,e,f,0,0,e,f,g,9728);a.bindFramebuffer(36160, +c.__webglMultisampledFramebuffer)}else console.warn("THREE.WebGLRenderer: WebGLMultisampleRenderTarget can only be used with WebGL2.")};this.safeSetTexture2D=function(a,b){a&&a.isWebGLRenderTarget&&(!1===U&&(console.warn("THREE.WebGLTextures.safeSetTexture2D: don't use render targets as textures. Use their .texture property instead."),U=!0),a=a.texture);n(a,b)};this.safeSetTextureCube=function(a,b){a&&a.isWebGLCubeRenderTarget&&(!1===M&&(console.warn("THREE.WebGLTextures.safeSetTextureCube: don't use cube render targets as textures. Use their .texture property instead."), +M=!0),a=a.texture);a&&a.isCubeTexture||Array.isArray(a.image)&&6===a.image.length?B(a,b):w(a,b)}}function Uh(a,b,c){var d=c.isWebGL2;return{convert:function(a){if(1009===a)return 5121;if(1017===a)return 32819;if(1018===a)return 32820;if(1019===a)return 33635;if(1010===a)return 5120;if(1011===a)return 5122;if(1012===a)return 5123;if(1013===a)return 5124;if(1014===a)return 5125;if(1015===a)return 5126;if(1016===a){if(d)return 5131;var c=b.get("OES_texture_half_float");return null!==c?c.HALF_FLOAT_OES: +null}if(1021===a)return 6406;if(1022===a)return 6407;if(1023===a)return 6408;if(1024===a)return 6409;if(1025===a)return 6410;if(1026===a)return 6402;if(1027===a)return 34041;if(1028===a)return 6403;if(1029===a)return 36244;if(1030===a)return 33319;if(1031===a)return 33320;if(1032===a)return 36248;if(1033===a)return 36249;if(33776===a||33777===a||33778===a||33779===a)if(c=b.get("WEBGL_compressed_texture_s3tc"),null!==c){if(33776===a)return c.COMPRESSED_RGB_S3TC_DXT1_EXT;if(33777===a)return c.COMPRESSED_RGBA_S3TC_DXT1_EXT; +if(33778===a)return c.COMPRESSED_RGBA_S3TC_DXT3_EXT;if(33779===a)return c.COMPRESSED_RGBA_S3TC_DXT5_EXT}else return null;if(35840===a||35841===a||35842===a||35843===a)if(c=b.get("WEBGL_compressed_texture_pvrtc"),null!==c){if(35840===a)return c.COMPRESSED_RGB_PVRTC_4BPPV1_IMG;if(35841===a)return c.COMPRESSED_RGB_PVRTC_2BPPV1_IMG;if(35842===a)return c.COMPRESSED_RGBA_PVRTC_4BPPV1_IMG;if(35843===a)return c.COMPRESSED_RGBA_PVRTC_2BPPV1_IMG}else return null;if(36196===a)return c=b.get("WEBGL_compressed_texture_etc1"), +null!==c?c.COMPRESSED_RGB_ETC1_WEBGL:null;if(37492===a||37496===a)if(c=b.get("WEBGL_compressed_texture_etc"),null!==c){if(37492===a)return c.COMPRESSED_RGB8_ETC2;if(37496===a)return c.COMPRESSED_RGBA8_ETC2_EAC}if(37808===a||37809===a||37810===a||37811===a||37812===a||37813===a||37814===a||37815===a||37816===a||37817===a||37818===a||37819===a||37820===a||37821===a||37840===a||37841===a||37842===a||37843===a||37844===a||37845===a||37846===a||37847===a||37848===a||37849===a||37850===a||37851===a||37852=== +a||37853===a)return c=b.get("WEBGL_compressed_texture_astc"),null!==c?a:null;if(36492===a)return c=b.get("EXT_texture_compression_bptc"),null!==c?a:null;if(1020===a){if(d)return 34042;c=b.get("WEBGL_depth_texture");return null!==c?c.UNSIGNED_INT_24_8_WEBGL:null}}}}function Le(a){ma.call(this);this.cameras=a||[]}function Jc(){x.call(this);this.type="Group"}function Me(){this._grip=this._targetRay=null}function Vh(a,b){function c(a){var b=t.get(a.inputSource);b&&b.dispatchEvent({type:a.type})}function d(){t.forEach(function(a, +b){a.disconnect(b)});t.clear();a.setFramebuffer(null);a.setRenderTarget(a.getRenderTarget());x.stop();h.isPresenting=!1;h.dispatchEvent({type:"sessionend"})}function e(a){q=a;x.setContext(l);x.start();h.isPresenting=!0;h.dispatchEvent({type:"sessionstart"})}function f(a){for(var b=l.inputSources,c=0;ce.matrixWorld.determinant();a=k(a,b,d,e);oa.setMaterial(d, +g);g=c.index;b=c.attributes.position;if(null===g){if(void 0===b||0===b.count)return}else if(0===g.count)return;var h=1;!0===d.wireframe&&(g=xa.getWireframeAttribute(c),h=2);(d.morphTargets||d.morphNormals)&&Ba.update(e,c,d,a);ia.setup(e,d,a,c,g);a=Ca;if(null!==g){var l=ra.get(g);a=Da;a.setIndex(l)}var m=c.drawRange.start*h,q=null!==f?f.start*h:0;l=Math.max(m,q);f=Math.max(0,Math.min(null!==g?g.count:b.count,m+c.drawRange.count*h,q+(null!==f?f.count*h:Infinity))-1-l+1);0!==f&&(e.isMesh?!0===d.wireframe? +(oa.setLineWidth(d.wireframeLinewidth*(null===G?R:1)),a.setMode(1)):a.setMode(4):e.isLine?(d=d.linewidth,void 0===d&&(d=1),oa.setLineWidth(d*(null===G?R:1)),e.isLineSegments?a.setMode(1):e.isLineLoop?a.setMode(2):a.setMode(3)):e.isPoints?a.setMode(0):e.isSprite&&a.setMode(4),e.isInstancedMesh?a.renderInstances(c,l,f,e.count):c.isInstancedBufferGeometry?a.renderInstances(c,l,f,Math.min(c.instanceCount,c._maxInstanceCount)):a.render(l,f))};this.compile=function(a,b){x=va.get(a,b);x.init();a.traverse(function(a){a.isLight&& +(x.pushLight(a),a.castShadow&&x.pushShadow(a))});x.setupLights(b);var c=new WeakMap;a.traverse(function(b){var d=b.material;if(d)if(Array.isArray(d))for(var e=0;ee.far||f.push({distance:a,distanceToRay:Math.sqrt(h),point:c,index:b,face:null,object:g}))}function rg(a,b,c,d,e,f,g,h,l){W.call(this,a,b,c,d,e,f,g,h,l);this.format=void 0!==g?g:1022;this.minFilter=void 0!==f?f:1006;this.magFilter=void 0!==e?e:1006;this.generateMipmaps=!1}function Nc(a,b,c,d,e,f,g,h,l,m,q,p){W.call(this,null,f,g,h,l,m,d,e,q,p);this.image={width:b,height:c};this.mipmaps=a;this.generateMipmaps=this.flipY=!1}function Od(a,b,c,d,e,f,g,h,l){W.call(this, +a,b,c,d,e,f,g,h,l);this.needsUpdate=!0}function Pd(a,b,c,d,e,f,g,h,l,m){m=void 0!==m?m:1026;if(1026!==m&&1027!==m)throw Error("DepthTexture format must be either THREE.DepthFormat or THREE.DepthStencilFormat");void 0===c&&1026===m&&(c=1012);void 0===c&&1027===m&&(c=1020);W.call(this,null,d,e,f,g,h,m,c,l);this.image={width:a,height:b};this.magFilter=void 0!==g?g:1003;this.minFilter=void 0!==h?h:1003;this.generateMipmaps=this.flipY=!1}function Oc(a){H.call(this);this.type="WireframeGeometry";var b= +[],c=[0,0],d={},e=["a","b","c"];if(a&&a.isGeometry){for(var f=a.faces,g=0,h=f.length;gm;m++){var q=l[e[m]],p=l[e[(m+1)%3]];c[0]=Math.min(q,p);c[1]=Math.max(q,p);q=c[0]+","+c[1];void 0===d[q]&&(d[q]={index1:c[0],index2:c[1]})}for(var k in d)c=d[k],f=a.vertices[c.index1],b.push(f.x,f.y,f.z),f=a.vertices[c.index2],b.push(f.x,f.y,f.z)}else if(a&&a.isBufferGeometry)if(k=new n,null!==a.index){e=a.attributes.position;g=a.index;a=a.groups;0===a.length&&(a=[{start:0,count:g.count, +materialIndex:0}]);h=0;for(l=a.length;hp;p++){var r=g.getX(m+p),t=g.getX(m+(p+1)%3);c[0]=Math.min(r,t);c[1]=Math.max(r,t);r=c[0]+","+c[1];void 0===d[r]&&(d[r]={index1:c[0],index2:c[1]})}for(f in d)c=d[f],k.fromBufferAttribute(e,c.index1),b.push(k.x,k.y,k.z),k.fromBufferAttribute(e,c.index2),b.push(k.x,k.y,k.z)}else for(d=a.attributes.position,c=0,f=d.count/3;ca;a++)k.fromBufferAttribute(d,3*c+a),b.push(k.x,k.y,k.z),k.fromBufferAttribute(d, +3*c+(a+1)%3),b.push(k.x,k.y,k.z);this.setAttribute("position",new C(b,3))}function Qd(a,b,c){I.call(this);this.type="ParametricGeometry";this.parameters={func:a,slices:b,stacks:c};this.fromBufferGeometry(new Pc(a,b,c));this.mergeVertices()}function Pc(a,b,c){H.call(this);this.type="ParametricBufferGeometry";this.parameters={func:a,slices:b,stacks:c};var d=[],e=[],f=[],g=[],h=new n,l=new n,m=new n,q=new n,k=new n;3>a.length&&console.error("THREE.ParametricGeometry: Function must now modify a Vector3 as third parameter."); +for(var A=b+1,r=0;r<=c;r++)for(var t=r/c,v=0;v<=b;v++){var y=v/b;a(y,t,l);e.push(l.x,l.y,l.z);0<=y-1E-5?(a(y-1E-5,t,m),q.subVectors(l,m)):(a(y+1E-5,t,m),q.subVectors(m,l));0<=t-1E-5?(a(y,t-1E-5,m),k.subVectors(l,m)):(a(y,t+1E-5,m),k.subVectors(m,l));h.crossVectors(q,k).normalize();f.push(h.x,h.y,h.z);g.push(y,t)}for(a=0;ad&&1===a.x&&(l[b]=a.x-1);0===c.x&&0===c.z&&(l[b]=d/2/Math.PI+.5)}H.call(this);this.type="PolyhedronBufferGeometry";this.parameters={vertices:a,indices:b, +radius:c,detail:d};c=c||1;d=d||0;var h=[],l=[];(function(a){for(var c=new n,d=new n,g=new n,h=0;he&&(.2>b&&(l[a+0]+=1),.2>c&&(l[a+2]+=1),.2>d&&(l[a+4]+=1))})();this.setAttribute("position",new C(h,3));this.setAttribute("normal",new C(h.slice(),3));this.setAttribute("uv",new C(l,2));0===d?this.computeVertexNormals():this.normalizeNormals()}function Sd(a, +b){I.call(this);this.type="TetrahedronGeometry";this.parameters={radius:a,detail:b};this.fromBufferGeometry(new Qc(a,b));this.mergeVertices()}function Qc(a,b){ia.call(this,[1,1,1,-1,-1,1,-1,1,-1,1,-1,-1],[2,1,0,0,3,2,1,3,0,2,3,1],a,b);this.type="TetrahedronBufferGeometry";this.parameters={radius:a,detail:b}}function Td(a,b){I.call(this);this.type="OctahedronGeometry";this.parameters={radius:a,detail:b};this.fromBufferGeometry(new bc(a,b));this.mergeVertices()}function bc(a,b){ia.call(this,[1,0,0, +-1,0,0,0,1,0,0,-1,0,0,0,1,0,0,-1],[0,2,4,0,4,3,0,3,5,0,5,2,1,2,5,1,5,3,1,3,4,1,4,2],a,b);this.type="OctahedronBufferGeometry";this.parameters={radius:a,detail:b}}function Ud(a,b){I.call(this);this.type="IcosahedronGeometry";this.parameters={radius:a,detail:b};this.fromBufferGeometry(new Rc(a,b));this.mergeVertices()}function Rc(a,b){var c=(1+Math.sqrt(5))/2;ia.call(this,[-1,c,0,1,c,0,-1,-c,0,1,-c,0,0,-1,c,0,1,c,0,-1,-c,0,1,-c,c,0,-1,c,0,1,-c,0,-1,-c,0,1],[0,11,5,0,5,1,0,1,7,0,7,10,0,10,11,1,5,9,5, +11,4,11,10,2,10,7,6,7,1,8,3,9,4,3,4,2,3,2,6,3,6,8,3,8,9,4,9,5,2,4,11,6,2,10,8,6,7,9,8,1],a,b);this.type="IcosahedronBufferGeometry";this.parameters={radius:a,detail:b}}function Vd(a,b){I.call(this);this.type="DodecahedronGeometry";this.parameters={radius:a,detail:b};this.fromBufferGeometry(new Sc(a,b));this.mergeVertices()}function Sc(a,b){var c=(1+Math.sqrt(5))/2,d=1/c;ia.call(this,[-1,-1,-1,-1,-1,1,-1,1,-1,-1,1,1,1,-1,-1,1,-1,1,1,1,-1,1,1,1,0,-d,-c,0,-d,c,0,d,-c,0,d,c,-d,-c,0,-d,c,0,d,-c,0,d,c, +0,-c,0,-d,c,0,-d,-c,0,d,c,0,d],[3,11,7,3,7,15,3,15,13,7,19,17,7,17,6,7,6,15,17,4,8,17,8,10,17,10,6,8,0,16,8,16,2,8,2,10,0,12,1,0,1,18,0,18,16,6,10,2,6,2,13,6,13,15,2,16,18,2,18,3,2,3,13,18,1,9,18,9,11,18,11,3,4,14,12,4,12,0,4,0,8,11,9,5,11,5,19,11,19,7,19,5,14,19,14,4,19,4,17,1,12,14,1,14,5,1,5,9],a,b);this.type="DodecahedronBufferGeometry";this.parameters={radius:a,detail:b}}function Wd(a,b,c,d,e,f){I.call(this);this.type="TubeGeometry";this.parameters={path:a,tubularSegments:b,radius:c,radialSegments:d, +closed:e};void 0!==f&&console.warn("THREE.TubeGeometry: taper has been removed.");a=new cc(a,b,c,d,e);this.tangents=a.tangents;this.normals=a.normals;this.binormals=a.binormals;this.fromBufferGeometry(a);this.mergeVertices()}function cc(a,b,c,d,e){function f(e){q=a.getPointAt(e/b,q);var f=g.normals[e];e=g.binormals[e];for(var m=0;m<=d;m++){var p=m/d*Math.PI*2,r=Math.sin(p);p=-Math.cos(p);l.x=p*f.x+r*e.x;l.y=p*f.y+r*e.y;l.z=p*f.z+r*e.z;l.normalize();A.push(l.x,l.y,l.z);h.x=q.x+c*l.x;h.y=q.y+c*l.y; +h.z=q.z+c*l.z;k.push(h.x,h.y,h.z)}}H.call(this);this.type="TubeBufferGeometry";this.parameters={path:a,tubularSegments:b,radius:c,radialSegments:d,closed:e};b=b||64;c=c||1;d=d||8;e=e||!1;var g=a.computeFrenetFrames(b,e);this.tangents=g.tangents;this.normals=g.normals;this.binormals=g.binormals;var h=new n,l=new n,m=new u,q=new n,k=[],A=[],r=[],t=[];(function(){for(var a=0;a=b;e-=d)f=Zh(e,a[e],a[e+1],f);f&&Ue(f,f.next)&&(Zd(f),f=f.next);return f}function Jb(a,b){if(!a)return a;b||(b=a);do{var c=!1;if(a.steiner||!Ue(a,a.next)&&0!==ka(a.prev,a,a.next))a=a.next;else{Zd(a);a=b=a.prev;if(a===a.next)break;c=!0}}while(c||a!==b);return b} +function $d(a,b,c,d,e,f,g){if(a){if(!g&&f){var h=a,l=h;do null===l.z&&(l.z=sg(l.x,l.y,d,e,f)),l.prevZ=l.prev,l=l.nextZ=l.next;while(l!==h);l.prevZ.nextZ=null;l.prevZ=null;h=l;var m,q,k,A,r=1;do{l=h;var t=h=null;for(q=0;l;){q++;var n=l;for(m=k=0;mr!==t.next.y>r&&t.next.y!==t.y&&k<(t.next.x-t.x)*(r-t.y)/(t.next.y-t.y)+t.x&&(q=!q),t=t.next;while(t!==l);t=q}t=t&&(ka(l.prev,l,n.prev)||ka(l,n.prev,n))||Ue(l,n)&&0a.x?e.x>f.x?e.x:f.x:a.x>f.x?a.x:f.x,h=e.y>a.y?e.y>f.y?e.y:f.y:a.y>f.y?a.y:f.y,l=sg(e.x=l&&d&&d.z<=b;){if(c!==a.prev&&c!==a.next&&Vc(e.x,e.y,a.x,a.y,f.x, +f.y,c.x,c.y)&&0<=ka(c.prev,c,c.next))return!1;c=c.prevZ;if(d!==a.prev&&d!==a.next&&Vc(e.x,e.y,a.x,a.y,f.x,f.y,d.x,d.y)&&0<=ka(d.prev,d,d.next))return!1;d=d.nextZ}for(;c&&c.z>=l;){if(c!==a.prev&&c!==a.next&&Vc(e.x,e.y,a.x,a.y,f.x,f.y,c.x,c.y)&&0<=ka(c.prev,c,c.next))return!1;c=c.prevZ}for(;d&&d.z<=b;){if(d!==a.prev&&d!==a.next&&Vc(e.x,e.y,a.x,a.y,f.x,f.y,d.x,d.y)&&0<=ka(d.prev,d,d.next))return!1;d=d.nextZ}return!0}function Ek(a,b){return a.x-b.x}function Fk(a,b){var c=b,d=a.x,e=a.y,f=-Infinity;do{if(e<= +c.y&&e>=c.next.y&&c.next.y!==c.y){var g=c.x+(e-c.y)*(c.next.x-c.x)/(c.next.y-c.y);if(g<=d&&g>f){f=g;if(g===d){if(e===c.y)return c;if(e===c.next.y)return c.next}var h=c.x=c.x&&c.x>=g&&d!==c.x&&Vc(eh.x)&&(p=c.x===h.x)){p=h;var A=c;p=0>ka(p.prev,p,A.prev)&&0>ka(A.next, +p,p.next)}p&&(h=c,m=k)}c=c.next}while(c!==b);return h}function sg(a,b,c,d,e){a=32767*(a-c)*e;b=32767*(b-d)*e;a=(a|a<<8)&16711935;a=(a|a<<4)&252645135;a=(a|a<<2)&858993459;b=(b|b<<8)&16711935;b=(b|b<<4)&252645135;b=(b|b<<2)&858993459;return(a|a<<1)&1431655765|((b|b<<1)&1431655765)<<1}function Gk(a){var b=a,c=a;do{if(b.x=Math.min(a.x,c.x)&&b.y<=Math.max(a.y,c.y)&&b.y>=Math.min(a.y,c.y)}function Ve(a){return 0a?-1:0}function ae(a,b){return 0>ka(a.prev,a,a.next)?0<=ka(a,b,a.next)&& +0<=ka(a,a.prev,b):0>ka(a,b,a.prev)||0>ka(a,a.next,b)}function ai(a,b){var c=new tg(a.i,a.x,a.y),d=new tg(b.i,b.x,b.y),e=a.next,f=b.prev;a.next=b;b.prev=a;c.next=e;e.prev=c;d.next=c;c.prev=d;f.next=d;d.prev=f;return d}function Zh(a,b,c,d){a=new tg(a,b,c);d?(a.next=d.next,a.prev=d,d.next.prev=a,d.next=a):(a.prev=a,a.next=a);return a}function Zd(a){a.next.prev=a.prev;a.prev.next=a.next;a.prevZ&&(a.prevZ.nextZ=a.nextZ);a.nextZ&&(a.nextZ.prevZ=a.prevZ)}function tg(a,b,c){this.i=a;this.x=b;this.y=c;this.nextZ= +this.prevZ=this.z=this.next=this.prev=null;this.steiner=!1}function bi(a){var b=a.length;2Number.EPSILON){var l=Math.sqrt(h),m=Math.sqrt(f*f+g*g);h=b.x-e/l;b=b.y+d/l;g=((c.x-g/m-h)*g-(c.y+f/m-b)*f)/(d*g-e*f);f=h+d*g-a.x;d=b+e*g-a.y;e=f*f+d*d;if(2>=e)return new u(f,d);e=Math.sqrt(e/2)}else a=!1,d>Number.EPSILON?f>Number.EPSILON&&(a=!0):d<-Number.EPSILON?f<-Number.EPSILON&&(a=!0):Math.sign(e)===Math.sign(g)&&(a=!0),a?(f=-e,e=Math.sqrt(h)):(f=d,d=e,e=Math.sqrt(h/2));return new u(f/e,d/ +e)}function h(a,b){for(var c=a.length;0<=--c;){var f=c,g=c-1;0>g&&(g=a.length-1);for(var h=0,l=w+2*C;hk;k++){var p=m[f[k]];var n=m[f[(k+1)%3]];d[0]=Math.min(p,n);d[1]=Math.max(p,n);p=d[0]+","+d[1];void 0=== +e[p]?e[p]={index1:d[0],index2:d[1],face1:h,face2:void 0}:e[p].face2=h}for(p in e)if(d=e[p],void 0===d.face2||g[d.face1].normal.dot(g[d.face2].normal)<=b)f=a[d.index1],c.push(f.x,f.y,f.z),f=a[d.index2],c.push(f.x,f.y,f.z);this.setAttribute("position",new C(c,3))}function hc(a,b,c,d,e,f,g,h){I.call(this);this.type="CylinderGeometry";this.parameters={radiusTop:a,radiusBottom:b,height:c,radialSegments:d,heightSegments:e,openEnded:f,thetaStart:g,thetaLength:h};this.fromBufferGeometry(new qb(a,b,c,d,e, +f,g,h));this.mergeVertices()}function qb(a,b,c,d,e,f,g,h){function l(c){var e,f=new u,l=new n,q=0,v=!0===c?a:b,w=!0===c?1:-1;var x=t;for(e=1;e<=d;e++)p.push(0,y*w,0),A.push(0,w,0),r.push(.5,.5),t++;e=t;for(var C=0;C<=d;C++){var D=C/d*h+g,E=Math.cos(D);D=Math.sin(D);l.x=v*D;l.y=y*w;l.z=v*E;p.push(l.x,l.y,l.z);A.push(0,w,0);f.x=.5*E+.5;f.y=.5*D*w+.5;r.push(f.x,f.y);t++}for(f=0;fthis.duration&&this.resetDuration()}function Ik(a){switch(a.toLowerCase()){case "scalar":case "double":case "float":case "number":case "integer":return ad;case "vector":case "vector2":case "vector3":case "vector4":return bd;case "color":return $e;case "quaternion":return je;case "bool":case "boolean":return Ze; +case "string":return bf}throw Error("THREE.KeyframeTrack: Unsupported typeName: "+a);}function Jk(a){if(void 0===a.type)throw Error("THREE.KeyframeTrack: track type undefined, can not parse");var b=Ik(a.type);if(void 0===a.times){var c=[],d=[];X.flattenJSON(a.keys,c,d,"value");a.times=c;a.values=d}return void 0!==b.parse?b.parse(a):new b(a.name,a.times,a.values,a.interpolation)}function ug(a,b,c){var d=this,e=!1,f=0,g=0,h=void 0,l=[];this.onStart=void 0;this.onLoad=a;this.onProgress=b;this.onError= +c;this.itemStart=function(a){g++;if(!1===e&&void 0!==d.onStart)d.onStart(a,f,g);e=!0};this.itemEnd=function(a){f++;if(void 0!==d.onProgress)d.onProgress(a,f,g);if(f===g&&(e=!1,void 0!==d.onLoad))d.onLoad()};this.itemError=function(a){if(void 0!==d.onError)d.onError(a)};this.resolveURL=function(a){return h?h(a):a};this.setURLModifier=function(a){h=a;return this};this.addHandler=function(a,b){l.push(a,b);return this};this.removeHandler=function(a){a=l.indexOf(a);-1!==a&&l.splice(a,2);return this};this.getHandler= +function(a){for(var b=0,c=l.length;ba;a++)this.coefficients.push(new n)}function Sa(a, +b){aa.call(this,void 0,b);this.type="LightProbe";this.sh=void 0!==a?a:new of}function pf(a){V.call(this,a);this.textures={}}function me(){H.call(this);this.type="InstancedBufferGeometry";this.instanceCount=Infinity}function qf(a,b,c,d){"number"===typeof c&&(d=c,c=!1,console.error("THREE.InstancedBufferAttribute: The constructor now expects normalized as the third argument."));G.call(this,a,b,c);this.meshPerAttribute=d||1}function rf(a){V.call(this,a)}function sf(a){V.call(this,a)}function zg(a){"undefined"=== +typeof createImageBitmap&&console.warn("THREE.ImageBitmapLoader: createImageBitmap() not supported.");"undefined"===typeof fetch&&console.warn("THREE.ImageBitmapLoader: fetch() not supported.");V.call(this,a);this.options={premultiplyAlpha:"none"}}function Ag(){this.type="ShapePath";this.color=new E;this.subPaths=[];this.currentPath=null}function Bg(a){this.type="Font";this.data=a}function Cg(a){V.call(this,a)}function tf(a){V.call(this,a)}function Dg(a,b,c){Sa.call(this,void 0,c);a=(new E).set(a); +c=(new E).set(b);b=new n(a.r,a.g,a.b);a=new n(c.r,c.g,c.b);c=Math.sqrt(Math.PI);var d=c*Math.sqrt(.75);this.sh.coefficients[0].copy(b).add(a).multiplyScalar(c);this.sh.coefficients[1].copy(b).sub(a).multiplyScalar(d)}function Eg(a,b){Sa.call(this,void 0,b);a=(new E).set(a);this.sh.coefficients[0].set(a.r,a.g,a.b).multiplyScalar(2*Math.sqrt(Math.PI))}function hi(){this.type="StereoCamera";this.aspect=1;this.eyeSep=.064;this.cameraL=new ma;this.cameraL.layers.enable(1);this.cameraL.matrixAutoUpdate= +!1;this.cameraR=new ma;this.cameraR.layers.enable(2);this.cameraR.matrixAutoUpdate=!1;this._cache={focus:null,fov:null,aspect:null,near:null,far:null,zoom:null,eyeSep:null}}function Fg(a){this.autoStart=void 0!==a?a:!0;this.elapsedTime=this.oldTime=this.startTime=0;this.running=!1}function Gg(){x.call(this);this.type="AudioListener";this.context=Hg.getContext();this.gain=this.context.createGain();this.gain.connect(this.context.destination);this.filter=null;this.timeDelta=0;this._clock=new Fg}function fd(a){x.call(this); +this.type="Audio";this.listener=a;this.context=a.context;this.gain=this.context.createGain();this.gain.connect(a.getInput());this.autoplay=!1;this.buffer=null;this.detune=0;this.loop=!1;this.offset=this.loopEnd=this.loopStart=0;this.duration=void 0;this.playbackRate=1;this.isPlaying=!1;this.hasPlaybackControl=!0;this.sourceType="empty";this._progress=this._startedAt=0;this.filters=[]}function Ig(a){fd.call(this,a);this.panner=this.context.createPanner();this.panner.panningModel="HRTF";this.panner.connect(this.gain)} +function Jg(a,b){this.analyser=a.context.createAnalyser();this.analyser.fftSize=void 0!==b?b:2048;this.data=new Uint8Array(this.analyser.frequencyBinCount);a.getOutput().connect(this.analyser)}function Kg(a,b,c){this.binding=a;this.valueSize=c;switch(b){case "quaternion":a=this._slerp;b=this._slerpAdditive;var d=this._setAdditiveIdentityQuaternion;this.buffer=new Float64Array(6*c);this._workIndex=5;break;case "string":case "bool":b=a=this._select;d=this._setAdditiveIdentityOther;this.buffer=Array(5* +c);break;default:a=this._lerp,b=this._lerpAdditive,d=this._setAdditiveIdentityNumeric,this.buffer=new Float64Array(5*c)}this._mixBufferRegion=a;this._mixBufferRegionAdditive=b;this._setIdentity=d;this._origIndex=3;this._addIndex=4;this.referenceCount=this.useCount=this.cumulativeWeightAdditive=this.cumulativeWeight=0}function ii(a,b,c){c=c||pa.parseTrackName(b);this._targetGroup=a;this._bindings=a.subscribe_(b,c)}function pa(a,b,c){this.path=b;this.parsedPath=c||pa.parseTrackName(b);this.node=pa.findNode(a, +this.parsedPath.nodeName)||a;this.rootNode=a}function ji(){this.uuid=O.generateUUID();this._objects=Array.prototype.slice.call(arguments);this.nCachedObjects_=0;var a={};this._indicesByUUID=a;for(var b=0,c=arguments.length;b!==c;++b)a[arguments[b].uuid]=b;this._paths=[];this._parsedPaths=[];this._bindings=[];this._bindingsIndicesByPath={};var d=this;this.stats={objects:{get total(){return d._objects.length},get inUse(){return this.total-d.nCachedObjects_}},get bindingsPerObject(){return d._bindings.length}}} +function ki(a,b,c,d){this._mixer=a;this._clip=b;this._localRoot=c||null;this.blendMode=d||b.blendMode;a=b.tracks;b=a.length;c=Array(b);d={endingStart:2400,endingEnd:2400};for(var e=0;e!==b;++e){var f=a[e].createInterpolant(null);c[e]=f;f.settings=d}this._interpolantSettings=d;this._interpolants=c;this._propertyBindings=Array(b);this._weightInterpolant=this._timeScaleInterpolant=this._byClipCacheIndex=this._cacheIndex=null;this.loop=2201;this._loopCount=-1;this._startTime=null;this.time=0;this._effectiveWeight= +this.weight=this._effectiveTimeScale=this.timeScale=1;this.repetitions=Infinity;this.paused=!1;this.enabled=!0;this.clampWhenFinished=!1;this.zeroSlopeAtEnd=this.zeroSlopeAtStart=!0}function Lg(a){this._root=a;this._initMemoryManager();this.time=this._accuIndex=0;this.timeScale=1}function uf(a,b){"string"===typeof a&&(console.warn("THREE.Uniform: Type parameter is no longer needed."),a=b);this.value=a}function Mg(a,b,c){Ia.call(this,a,b);this.meshPerAttribute=c||1}function Ng(a,b,c,d){this.ray=new Ub(a, +b);this.near=c||0;this.far=d||Infinity;this.camera=null;this.layers=new De;this.params={Mesh:{},Line:{threshold:1},LOD:{},Points:{threshold:1},Sprite:{}};Object.defineProperties(this.params,{PointCloud:{get:function(){console.warn("THREE.Raycaster: params.PointCloud has been renamed to params.Points.");return this.Points}}})}function li(a,b){return a.distance-b.distance}function Og(a,b,c,d){a.layers.test(b.layers)&&a.raycast(b,c);if(!0===d){a=a.children;d=0;for(var e=a.length;dc;c++,d++){var e=c/32*Math.PI*2,f=d/32*Math.PI*2;b.push(Math.cos(e),Math.sin(e),1,Math.cos(f),Math.sin(f),1)}a.setAttribute("position",new C(b,3));b=new ja({fog:!1, +toneMapped:!1});this.cone=new ea(a,b);this.add(this.cone);this.update()}function oi(a){var b=[];a&&a.isBone&&b.push(a);for(var c=0;c\n\nvec3 getSample(float theta, vec3 axis) {\n\tfloat cosTheta = cos(theta);\n\t// Rodrigues' axis-angle rotation\n\tvec3 sampleDirection = vOutputDirection * cosTheta\n\t\t+ cross(axis, vOutputDirection) * sin(theta)\n\t\t+ axis * dot(axis, vOutputDirection) * (1.0 - cosTheta);\n\treturn bilinearCubeUV(envMap, sampleDirection, mipInt);\n}\n\nvoid main() {\n\tvec3 axis = latitudinal ? poleAxis : cross(poleAxis, vOutputDirection);\n\tif (all(equal(axis, vec3(0.0))))\n\t\taxis = vec3(vOutputDirection.z, 0.0, - vOutputDirection.x);\n\taxis = normalize(axis);\n\tgl_FragColor = vec4(0.0);\n\tgl_FragColor.rgb += weights[0] * getSample(0.0, axis);\n\tfor (int i = 1; i < n; i++) {\n\t\tif (i >= samples)\n\t\t\tbreak;\n\t\tfloat theta = dTheta * float(i);\n\t\tgl_FragColor.rgb += weights[i] * getSample(-1.0 * theta, axis);\n\t\tgl_FragColor.rgb += weights[i] * getSample(theta, axis);\n\t}\n\tgl_FragColor = linearToOutputTexel(gl_FragColor);\n}\n\t\t", +blending:0,depthTest:!1,depthWrite:!1});this._cubemapShader=this._equirectShader=null;this._compileMaterial(this._blurMaterial)}function pi(a){a=new Ea(3*lb,3*lb,a);a.texture.mapping=306;a.texture.name="PMREM.cubeUv";a.scissorTest=!0;return a}function zf(a,b,c,d,e){a.viewport.set(b,c,d,e);a.scissor.set(b,c,d,e)}function qi(){var a=new u(1,1);return new rb({name:"EquirectangularToCubeUV",uniforms:{envMap:{value:null},texelSize:{value:a},inputEncoding:{value:kb[3E3]},outputEncoding:{value:kb[3E3]}}, +vertexShader:Tg(),fragmentShader:"\nprecision mediump float;\nprecision mediump int;\nvarying vec3 vOutputDirection;\nuniform sampler2D envMap;\nuniform vec2 texelSize;\n\n"+Ug()+"\n\n#include \n\nvoid main() {\n\tgl_FragColor = vec4(0.0);\n\tvec3 outputDirection = normalize(vOutputDirection);\n\tvec2 uv = equirectUv( outputDirection );\n\tvec2 f = fract(uv / texelSize - 0.5);\n\tuv -= f * texelSize;\n\tvec3 tl = envMapTexelToLinear(texture2D(envMap, uv)).rgb;\n\tuv.x += texelSize.x;\n\tvec3 tr = envMapTexelToLinear(texture2D(envMap, uv)).rgb;\n\tuv.y += texelSize.y;\n\tvec3 br = envMapTexelToLinear(texture2D(envMap, uv)).rgb;\n\tuv.x -= texelSize.x;\n\tvec3 bl = envMapTexelToLinear(texture2D(envMap, uv)).rgb;\n\tvec3 tm = mix(tl, tr, f.x);\n\tvec3 bm = mix(bl, br, f.x);\n\tgl_FragColor.rgb = mix(tm, bm, f.y);\n\tgl_FragColor = linearToOutputTexel(gl_FragColor);\n}\n\t\t", +blending:0,depthTest:!1,depthWrite:!1})}function ri(){return new rb({name:"CubemapToCubeUV",uniforms:{envMap:{value:null},inputEncoding:{value:kb[3E3]},outputEncoding:{value:kb[3E3]}},vertexShader:Tg(),fragmentShader:"\nprecision mediump float;\nprecision mediump int;\nvarying vec3 vOutputDirection;\nuniform samplerCube envMap;\n\n"+Ug()+"\n\nvoid main() {\n\tgl_FragColor = vec4(0.0);\n\tgl_FragColor.rgb = envMapTexelToLinear(textureCube(envMap, vec3( - vOutputDirection.x, vOutputDirection.yz ))).rgb;\n\tgl_FragColor = linearToOutputTexel(gl_FragColor);\n}\n\t\t", +blending:0,depthTest:!1,depthWrite:!1})}function Tg(){return"\nprecision mediump float;\nprecision mediump int;\nattribute vec3 position;\nattribute vec2 uv;\nattribute float faceIndex;\nvarying vec3 vOutputDirection;\n\n// RH coordinate system; PMREM face-indexing convention\nvec3 getDirection(vec2 uv, float face) {\n\tuv = 2.0 * uv - 1.0;\n\tvec3 direction = vec3(uv, 1.0);\n\tif (face == 0.0) {\n\t\tdirection = direction.zyx; // ( 1, v, u ) pos x\n\t} else if (face == 1.0) {\n\t\tdirection = direction.xzy;\n\t\tdirection.xz *= -1.0; // ( -u, 1, -v ) pos y\n\t} else if (face == 2.0) {\n\t\tdirection.x *= -1.0; // ( -u, v, 1 ) pos z\n\t} else if (face == 3.0) {\n\t\tdirection = direction.zyx;\n\t\tdirection.xz *= -1.0; // ( -1, v, -u ) neg x\n\t} else if (face == 4.0) {\n\t\tdirection = direction.xzy;\n\t\tdirection.xy *= -1.0; // ( -u, -1, v ) neg y\n\t} else if (face == 5.0) {\n\t\tdirection.z *= -1.0; // ( u, v, -1 ) neg z\n\t}\n\treturn direction;\n}\n\nvoid main() {\n\tvOutputDirection = getDirection(uv, faceIndex);\n\tgl_Position = vec4( position, 1.0 );\n}\n\t"} +function Ug(){return"\nuniform int inputEncoding;\nuniform int outputEncoding;\n\n#include \n\nvec4 inputTexelToLinear(vec4 value){\n\tif(inputEncoding == 0){\n\t\treturn value;\n\t}else if(inputEncoding == 1){\n\t\treturn sRGBToLinear(value);\n\t}else if(inputEncoding == 2){\n\t\treturn RGBEToLinear(value);\n\t}else if(inputEncoding == 3){\n\t\treturn RGBMToLinear(value, 7.0);\n\t}else if(inputEncoding == 4){\n\t\treturn RGBMToLinear(value, 16.0);\n\t}else if(inputEncoding == 5){\n\t\treturn RGBDToLinear(value, 256.0);\n\t}else{\n\t\treturn GammaToLinear(value, 2.2);\n\t}\n}\n\nvec4 linearToOutputTexel(vec4 value){\n\tif(outputEncoding == 0){\n\t\treturn value;\n\t}else if(outputEncoding == 1){\n\t\treturn LinearTosRGB(value);\n\t}else if(outputEncoding == 2){\n\t\treturn LinearToRGBE(value);\n\t}else if(outputEncoding == 3){\n\t\treturn LinearToRGBM(value, 7.0);\n\t}else if(outputEncoding == 4){\n\t\treturn LinearToRGBM(value, 16.0);\n\t}else if(outputEncoding == 5){\n\t\treturn LinearToRGBD(value, 256.0);\n\t}else{\n\t\treturn LinearToGamma(value, 2.2);\n\t}\n}\n\nvec4 envMapTexelToLinear(vec4 color) {\n\treturn inputTexelToLinear(color);\n}\n\t"} +function si(a){console.warn("THREE.ClosedSplineCurve3 has been deprecated. Use THREE.CatmullRomCurve3 instead.");va.call(this,a);this.type="catmullrom";this.closed=!0}function ti(a){console.warn("THREE.SplineCurve3 has been deprecated. Use THREE.CatmullRomCurve3 instead.");va.call(this,a);this.type="catmullrom"}function Vg(a){console.warn("THREE.Spline has been removed. Use THREE.CatmullRomCurve3 instead.");va.call(this,a);this.type="catmullrom"}void 0===Number.EPSILON&&(Number.EPSILON=Math.pow(2, +-52));void 0===Number.isInteger&&(Number.isInteger=function(a){return"number"===typeof a&&isFinite(a)&&Math.floor(a)===a});void 0===Math.sign&&(Math.sign=function(a){return 0>a?-1:0se;se++)ta[se]=(16>se?"0":"")+se.toString(16);var O={DEG2RAD:Math.PI/180,RAD2DEG:180/Math.PI,generateUUID:function(){var a=4294967295*Math.random()|0,b=4294967295*Math.random()|0,c=4294967295*Math.random()| +0,d=4294967295*Math.random()|0;return(ta[a&255]+ta[a>>8&255]+ta[a>>16&255]+ta[a>>24&255]+"-"+ta[b&255]+ta[b>>8&255]+"-"+ta[b>>16&15|64]+ta[b>>24&255]+"-"+ta[c&63|128]+ta[c>>8&255]+"-"+ta[c>>16&255]+ta[c>>24&255]+ta[d&255]+ta[d>>8&255]+ta[d>>16&255]+ta[d>>24&255]).toUpperCase()},clamp:function(a,b,c){return Math.max(b,Math.min(c,a))},euclideanModulo:function(a,b){return(a%b+b)%b},mapLinear:function(a,b,c,d,e){return d+(a-b)*(e-d)/(c-b)},lerp:function(a,b,c){return(1-c)*a+c*b},smoothstep:function(a, +b,c){if(a<=b)return 0;if(a>=c)return 1;a=(a-b)/(c-b);return a*a*(3-2*a)},smootherstep:function(a,b,c){if(a<=b)return 0;if(a>=c)return 1;a=(a-b)/(c-b);return a*a*a*(a*(6*a-15)+10)},randInt:function(a,b){return a+Math.floor(Math.random()*(b-a+1))},randFloat:function(a,b){return a+Math.random()*(b-a)},randFloatSpread:function(a){return a*(.5-Math.random())},degToRad:function(a){return a*O.DEG2RAD},radToDeg:function(a){return a*O.RAD2DEG},isPowerOfTwo:function(a){return 0===(a&a-1)&&0!==a},ceilPowerOfTwo:function(a){return Math.pow(2, +Math.ceil(Math.log(a)/Math.LN2))},floorPowerOfTwo:function(a){return Math.pow(2,Math.floor(Math.log(a)/Math.LN2))},setQuaternionFromProperEuler:function(a,b,c,d,e){var f=Math.cos,g=Math.sin,h=f(c/2);c=g(c/2);var l=f((b+d)/2),m=g((b+d)/2),k=f((b-d)/2),p=g((b-d)/2);f=f((d-b)/2);b=g((d-b)/2);switch(e){case "XYX":a.set(h*m,c*k,c*p,h*l);break;case "YZY":a.set(c*p,h*m,c*k,h*l);break;case "ZXZ":a.set(c*k,c*p,h*m,h*l);break;case "XZX":a.set(h*m,c*b,c*f,h*l);break;case "YXY":a.set(c*f,h*m,c*b,h*l);break;case "ZYZ":a.set(c* +b,c*f,h*m,h*l);break;default:console.warn("THREE.MathUtils: .setQuaternionFromProperEuler() encountered an unknown order: "+e)}}};Object.defineProperties(u.prototype,{width:{get:function(){return this.x},set:function(a){this.x=a}},height:{get:function(){return this.y},set:function(a){this.y=a}}});Object.assign(u.prototype,{isVector2:!0,set:function(a,b){this.x=a;this.y=b;return this},setScalar:function(a){this.y=this.x=a;return this},setX:function(a){this.x=a;return this},setY:function(a){this.y= +a;return this},setComponent:function(a,b){switch(a){case 0:this.x=b;break;case 1:this.y=b;break;default:throw Error("index is out of range: "+a);}return this},getComponent:function(a){switch(a){case 0:return this.x;case 1:return this.y;default:throw Error("index is out of range: "+a);}},clone:function(){return new this.constructor(this.x,this.y)},copy:function(a){this.x=a.x;this.y=a.y;return this},add:function(a,b){if(void 0!==b)return console.warn("THREE.Vector2: .add() now only accepts one argument. Use .addVectors( a, b ) instead."), +this.addVectors(a,b);this.x+=a.x;this.y+=a.y;return this},addScalar:function(a){this.x+=a;this.y+=a;return this},addVectors:function(a,b){this.x=a.x+b.x;this.y=a.y+b.y;return this},addScaledVector:function(a,b){this.x+=a.x*b;this.y+=a.y*b;return this},sub:function(a,b){if(void 0!==b)return console.warn("THREE.Vector2: .sub() now only accepts one argument. Use .subVectors( a, b ) instead."),this.subVectors(a,b);this.x-=a.x;this.y-=a.y;return this},subScalar:function(a){this.x-=a;this.y-=a;return this}, +subVectors:function(a,b){this.x=a.x-b.x;this.y=a.y-b.y;return this},multiply:function(a){this.x*=a.x;this.y*=a.y;return this},multiplyScalar:function(a){this.x*=a;this.y*=a;return this},divide:function(a){this.x/=a.x;this.y/=a.y;return this},divideScalar:function(a){return this.multiplyScalar(1/a)},applyMatrix3:function(a){var b=this.x,c=this.y;a=a.elements;this.x=a[0]*b+a[3]*c+a[6];this.y=a[1]*b+a[4]*c+a[7];return this},min:function(a){this.x=Math.min(this.x,a.x);this.y=Math.min(this.y,a.y);return this}, +max:function(a){this.x=Math.max(this.x,a.x);this.y=Math.max(this.y,a.y);return this},clamp:function(a,b){this.x=Math.max(a.x,Math.min(b.x,this.x));this.y=Math.max(a.y,Math.min(b.y,this.y));return this},clampScalar:function(a,b){this.x=Math.max(a,Math.min(b,this.x));this.y=Math.max(a,Math.min(b,this.y));return this},clampLength:function(a,b){var c=this.length();return this.divideScalar(c||1).multiplyScalar(Math.max(a,Math.min(b,c)))},floor:function(){this.x=Math.floor(this.x);this.y=Math.floor(this.y); +return this},ceil:function(){this.x=Math.ceil(this.x);this.y=Math.ceil(this.y);return this},round:function(){this.x=Math.round(this.x);this.y=Math.round(this.y);return this},roundToZero:function(){this.x=0>this.x?Math.ceil(this.x):Math.floor(this.x);this.y=0>this.y?Math.ceil(this.y):Math.floor(this.y);return this},negate:function(){this.x=-this.x;this.y=-this.y;return this},dot:function(a){return this.x*a.x+this.y*a.y},cross:function(a){return this.x*a.y-this.y*a.x},lengthSq:function(){return this.x* +this.x+this.y*this.y},length:function(){return Math.sqrt(this.x*this.x+this.y*this.y)},manhattanLength:function(){return Math.abs(this.x)+Math.abs(this.y)},normalize:function(){return this.divideScalar(this.length()||1)},angle:function(){return Math.atan2(-this.y,-this.x)+Math.PI},distanceTo:function(a){return Math.sqrt(this.distanceToSquared(a))},distanceToSquared:function(a){var b=this.x-a.x;a=this.y-a.y;return b*b+a*a},manhattanDistanceTo:function(a){return Math.abs(this.x-a.x)+Math.abs(this.y- +a.y)},setLength:function(a){return this.normalize().multiplyScalar(a)},lerp:function(a,b){this.x+=(a.x-this.x)*b;this.y+=(a.y-this.y)*b;return this},lerpVectors:function(a,b,c){this.x=a.x+(b.x-a.x)*c;this.y=a.y+(b.y-a.y)*c;return this},equals:function(a){return a.x===this.x&&a.y===this.y},fromArray:function(a,b){void 0===b&&(b=0);this.x=a[b];this.y=a[b+1];return this},toArray:function(a,b){void 0===a&&(a=[]);void 0===b&&(b=0);a[b]=this.x;a[b+1]=this.y;return a},fromBufferAttribute:function(a,b,c){void 0!== +c&&console.warn("THREE.Vector2: offset has been removed from .fromBufferAttribute().");this.x=a.getX(b);this.y=a.getY(b);return this},rotateAround:function(a,b){var c=Math.cos(b);b=Math.sin(b);var d=this.x-a.x,e=this.y-a.y;this.x=d*c-e*b+a.x;this.y=d*b+e*c+a.y;return this},random:function(){this.x=Math.random();this.y=Math.random();return this}});Object.assign(za.prototype,{isMatrix3:!0,set:function(a,b,c,d,e,f,g,h,l){var m=this.elements;m[0]=a;m[1]=d;m[2]=g;m[3]=b;m[4]=e;m[5]=h;m[6]=c;m[7]=f;m[8]= +l;return this},identity:function(){this.set(1,0,0,0,1,0,0,0,1);return this},clone:function(){return(new this.constructor).fromArray(this.elements)},copy:function(a){var b=this.elements;a=a.elements;b[0]=a[0];b[1]=a[1];b[2]=a[2];b[3]=a[3];b[4]=a[4];b[5]=a[5];b[6]=a[6];b[7]=a[7];b[8]=a[8];return this},extractBasis:function(a,b,c){a.setFromMatrix3Column(this,0);b.setFromMatrix3Column(this,1);c.setFromMatrix3Column(this,2);return this},setFromMatrix4:function(a){a=a.elements;this.set(a[0],a[4],a[8],a[1], +a[5],a[9],a[2],a[6],a[10]);return this},multiply:function(a){return this.multiplyMatrices(this,a)},premultiply:function(a){return this.multiplyMatrices(a,this)},multiplyMatrices:function(a,b){var c=a.elements,d=b.elements;b=this.elements;a=c[0];var e=c[3],f=c[6],g=c[1],h=c[4],l=c[7],m=c[2],k=c[5];c=c[8];var p=d[0],n=d[3],r=d[6],t=d[1],v=d[4],y=d[7],u=d[2],w=d[5];d=d[8];b[0]=a*p+e*t+f*u;b[3]=a*n+e*v+f*w;b[6]=a*r+e*y+f*d;b[1]=g*p+h*t+l*u;b[4]=g*n+h*v+l*w;b[7]=g*r+h*y+l*d;b[2]=m*p+k*t+c*u;b[5]=m*n+k* +v+c*w;b[8]=m*r+k*y+c*d;return this},multiplyScalar:function(a){var b=this.elements;b[0]*=a;b[3]*=a;b[6]*=a;b[1]*=a;b[4]*=a;b[7]*=a;b[2]*=a;b[5]*=a;b[8]*=a;return this},determinant:function(){var a=this.elements,b=a[0],c=a[1],d=a[2],e=a[3],f=a[4],g=a[5],h=a[6],l=a[7];a=a[8];return b*f*a-b*g*l-c*e*a+c*g*h+d*e*l-d*f*h},getInverse:function(a,b){void 0!==b&&console.warn("THREE.Matrix3: .getInverse() can no longer be configured to throw on degenerate.");var c=a.elements;a=this.elements;b=c[0];var d=c[1], +e=c[2],f=c[3],g=c[4],h=c[5],l=c[6],m=c[7];c=c[8];var k=c*g-h*m,p=h*l-c*f,n=m*f-g*l,r=b*k+d*p+e*n;if(0===r)return this.set(0,0,0,0,0,0,0,0,0);r=1/r;a[0]=k*r;a[1]=(e*m-c*d)*r;a[2]=(h*d-e*g)*r;a[3]=p*r;a[4]=(c*b-e*l)*r;a[5]=(e*f-h*b)*r;a[6]=n*r;a[7]=(d*l-m*b)*r;a[8]=(g*b-d*f)*r;return this},transpose:function(){var a=this.elements;var b=a[1];a[1]=a[3];a[3]=b;b=a[2];a[2]=a[6];a[6]=b;b=a[5];a[5]=a[7];a[7]=b;return this},getNormalMatrix:function(a){return this.setFromMatrix4(a).getInverse(this).transpose()}, +transposeIntoArray:function(a){var b=this.elements;a[0]=b[0];a[1]=b[3];a[2]=b[6];a[3]=b[1];a[4]=b[4];a[5]=b[7];a[6]=b[2];a[7]=b[5];a[8]=b[8];return this},setUvTransform:function(a,b,c,d,e,f,g){var h=Math.cos(e);e=Math.sin(e);this.set(c*h,c*e,-c*(h*f+e*g)+f+a,-d*e,d*h,-d*(-e*f+h*g)+g+b,0,0,1)},scale:function(a,b){var c=this.elements;c[0]*=a;c[3]*=a;c[6]*=a;c[1]*=b;c[4]*=b;c[7]*=b;return this},rotate:function(a){var b=Math.cos(a);a=Math.sin(a);var c=this.elements,d=c[0],e=c[3],f=c[6],g=c[1],h=c[4], +l=c[7];c[0]=b*d+a*g;c[3]=b*e+a*h;c[6]=b*f+a*l;c[1]=-a*d+b*g;c[4]=-a*e+b*h;c[7]=-a*f+b*l;return this},translate:function(a,b){var c=this.elements;c[0]+=a*c[2];c[3]+=a*c[5];c[6]+=a*c[8];c[1]+=b*c[2];c[4]+=b*c[5];c[7]+=b*c[8];return this},equals:function(a){var b=this.elements;a=a.elements;for(var c=0;9>c;c++)if(b[c]!==a[c])return!1;return!0},fromArray:function(a,b){void 0===b&&(b=0);for(var c=0;9>c;c++)this.elements[c]=a[c+b];return this},toArray:function(a,b){void 0===a&&(a=[]);void 0===b&&(b=0);var c= +this.elements;a[b]=c[0];a[b+1]=c[1];a[b+2]=c[2];a[b+3]=c[3];a[b+4]=c[4];a[b+5]=c[5];a[b+6]=c[6];a[b+7]=c[7];a[b+8]=c[8];return a}});var kd,Mb={getDataURL:function(a){if(/^data:/i.test(a.src)||"undefined"==typeof HTMLCanvasElement)return a.src;if(!(a instanceof HTMLCanvasElement)){void 0===kd&&(kd=document.createElementNS("http://www.w3.org/1999/xhtml","canvas"));kd.width=a.width;kd.height=a.height;var b=kd.getContext("2d");a instanceof ImageData?b.putImageData(a,0,0):b.drawImage(a,0,0,a.width,a.height); +a=kd}return 2048a.x||1a.x?0:1;break;case 1002:a.x=1===Math.abs(Math.floor(a.x)%2)?Math.ceil(a.x)-a.x:a.x-Math.floor(a.x)}if(0>a.y||1a.y?0:1;break;case 1002:a.y=1===Math.abs(Math.floor(a.y)%2)?Math.ceil(a.y)- +a.y:a.y-Math.floor(a.y)}this.flipY&&(a.y=1-a.y);return a}});Object.defineProperty(W.prototype,"needsUpdate",{set:function(a){!0===a&&this.version++}});Object.defineProperties(ba.prototype,{width:{get:function(){return this.z},set:function(a){this.z=a}},height:{get:function(){return this.w},set:function(a){this.w=a}}});Object.assign(ba.prototype,{isVector4:!0,set:function(a,b,c,d){this.x=a;this.y=b;this.z=c;this.w=d;return this},setScalar:function(a){this.w=this.z=this.y=this.x=a;return this},setX:function(a){this.x= +a;return this},setY:function(a){this.y=a;return this},setZ:function(a){this.z=a;return this},setW:function(a){this.w=a;return this},setComponent:function(a,b){switch(a){case 0:this.x=b;break;case 1:this.y=b;break;case 2:this.z=b;break;case 3:this.w=b;break;default:throw Error("index is out of range: "+a);}return this},getComponent:function(a){switch(a){case 0:return this.x;case 1:return this.y;case 2:return this.z;case 3:return this.w;default:throw Error("index is out of range: "+a);}},clone:function(){return new this.constructor(this.x, +this.y,this.z,this.w)},copy:function(a){this.x=a.x;this.y=a.y;this.z=a.z;this.w=void 0!==a.w?a.w:1;return this},add:function(a,b){if(void 0!==b)return console.warn("THREE.Vector4: .add() now only accepts one argument. Use .addVectors( a, b ) instead."),this.addVectors(a,b);this.x+=a.x;this.y+=a.y;this.z+=a.z;this.w+=a.w;return this},addScalar:function(a){this.x+=a;this.y+=a;this.z+=a;this.w+=a;return this},addVectors:function(a,b){this.x=a.x+b.x;this.y=a.y+b.y;this.z=a.z+b.z;this.w=a.w+b.w;return this}, +addScaledVector:function(a,b){this.x+=a.x*b;this.y+=a.y*b;this.z+=a.z*b;this.w+=a.w*b;return this},sub:function(a,b){if(void 0!==b)return console.warn("THREE.Vector4: .sub() now only accepts one argument. Use .subVectors( a, b ) instead."),this.subVectors(a,b);this.x-=a.x;this.y-=a.y;this.z-=a.z;this.w-=a.w;return this},subScalar:function(a){this.x-=a;this.y-=a;this.z-=a;this.w-=a;return this},subVectors:function(a,b){this.x=a.x-b.x;this.y=a.y-b.y;this.z=a.z-b.z;this.w=a.w-b.w;return this},multiplyScalar:function(a){this.x*= +a;this.y*=a;this.z*=a;this.w*=a;return this},applyMatrix4:function(a){var b=this.x,c=this.y,d=this.z,e=this.w;a=a.elements;this.x=a[0]*b+a[4]*c+a[8]*d+a[12]*e;this.y=a[1]*b+a[5]*c+a[9]*d+a[13]*e;this.z=a[2]*b+a[6]*c+a[10]*d+a[14]*e;this.w=a[3]*b+a[7]*c+a[11]*d+a[15]*e;return this},divideScalar:function(a){return this.multiplyScalar(1/a)},setAxisAngleFromQuaternion:function(a){this.w=2*Math.acos(a.w);var b=Math.sqrt(1-a.w*a.w);1E-4>b?(this.x=1,this.z=this.y=0):(this.x=a.x/b,this.y=a.y/b,this.z=a.z/ +b);return this},setAxisAngleFromRotationMatrix:function(a){a=a.elements;var b=a[0];var c=a[4];var d=a[8],e=a[1],f=a[5],g=a[9];var h=a[2];var l=a[6];var m=a[10];if(.01>Math.abs(c-e)&&.01>Math.abs(d-h)&&.01>Math.abs(g-l)){if(.1>Math.abs(c+e)&&.1>Math.abs(d+h)&&.1>Math.abs(g+l)&&.1>Math.abs(b+f+m-3))return this.set(1,0,0,0),this;a=Math.PI;b=(b+1)/2;f=(f+1)/2;m=(m+1)/2;c=(c+e)/4;d=(d+h)/4;g=(g+l)/4;b>f&&b>m?.01>b?(l=0,c=h=.707106781):(l=Math.sqrt(b),h=c/l,c=d/l):f>m?.01>f?(l=.707106781,h=0,c=.707106781): +(h=Math.sqrt(f),l=c/h,c=g/h):.01>m?(h=l=.707106781,c=0):(c=Math.sqrt(m),l=d/c,h=g/c);this.set(l,h,c,a);return this}a=Math.sqrt((l-g)*(l-g)+(d-h)*(d-h)+(e-c)*(e-c));.001>Math.abs(a)&&(a=1);this.x=(l-g)/a;this.y=(d-h)/a;this.z=(e-c)/a;this.w=Math.acos((b+f+m-1)/2);return this},min:function(a){this.x=Math.min(this.x,a.x);this.y=Math.min(this.y,a.y);this.z=Math.min(this.z,a.z);this.w=Math.min(this.w,a.w);return this},max:function(a){this.x=Math.max(this.x,a.x);this.y=Math.max(this.y,a.y);this.z=Math.max(this.z, +a.z);this.w=Math.max(this.w,a.w);return this},clamp:function(a,b){this.x=Math.max(a.x,Math.min(b.x,this.x));this.y=Math.max(a.y,Math.min(b.y,this.y));this.z=Math.max(a.z,Math.min(b.z,this.z));this.w=Math.max(a.w,Math.min(b.w,this.w));return this},clampScalar:function(a,b){this.x=Math.max(a,Math.min(b,this.x));this.y=Math.max(a,Math.min(b,this.y));this.z=Math.max(a,Math.min(b,this.z));this.w=Math.max(a,Math.min(b,this.w));return this},clampLength:function(a,b){var c=this.length();return this.divideScalar(c|| +1).multiplyScalar(Math.max(a,Math.min(b,c)))},floor:function(){this.x=Math.floor(this.x);this.y=Math.floor(this.y);this.z=Math.floor(this.z);this.w=Math.floor(this.w);return this},ceil:function(){this.x=Math.ceil(this.x);this.y=Math.ceil(this.y);this.z=Math.ceil(this.z);this.w=Math.ceil(this.w);return this},round:function(){this.x=Math.round(this.x);this.y=Math.round(this.y);this.z=Math.round(this.z);this.w=Math.round(this.w);return this},roundToZero:function(){this.x=0>this.x?Math.ceil(this.x):Math.floor(this.x); +this.y=0>this.y?Math.ceil(this.y):Math.floor(this.y);this.z=0>this.z?Math.ceil(this.z):Math.floor(this.z);this.w=0>this.w?Math.ceil(this.w):Math.floor(this.w);return this},negate:function(){this.x=-this.x;this.y=-this.y;this.z=-this.z;this.w=-this.w;return this},dot:function(a){return this.x*a.x+this.y*a.y+this.z*a.z+this.w*a.w},lengthSq:function(){return this.x*this.x+this.y*this.y+this.z*this.z+this.w*this.w},length:function(){return Math.sqrt(this.x*this.x+this.y*this.y+this.z*this.z+this.w*this.w)}, +manhattanLength:function(){return Math.abs(this.x)+Math.abs(this.y)+Math.abs(this.z)+Math.abs(this.w)},normalize:function(){return this.divideScalar(this.length()||1)},setLength:function(a){return this.normalize().multiplyScalar(a)},lerp:function(a,b){this.x+=(a.x-this.x)*b;this.y+=(a.y-this.y)*b;this.z+=(a.z-this.z)*b;this.w+=(a.w-this.w)*b;return this},lerpVectors:function(a,b,c){this.x=a.x+(b.x-a.x)*c;this.y=a.y+(b.y-a.y)*c;this.z=a.z+(b.z-a.z)*c;this.w=a.w+(b.w-a.w)*c;return this},equals:function(a){return a.x=== +this.x&&a.y===this.y&&a.z===this.z&&a.w===this.w},fromArray:function(a,b){void 0===b&&(b=0);this.x=a[b];this.y=a[b+1];this.z=a[b+2];this.w=a[b+3];return this},toArray:function(a,b){void 0===a&&(a=[]);void 0===b&&(b=0);a[b]=this.x;a[b+1]=this.y;a[b+2]=this.z;a[b+3]=this.w;return a},fromBufferAttribute:function(a,b,c){void 0!==c&&console.warn("THREE.Vector4: offset has been removed from .fromBufferAttribute().");this.x=a.getX(b);this.y=a.getY(b);this.z=a.getZ(b);this.w=a.getW(b);return this},random:function(){this.x= +Math.random();this.y=Math.random();this.z=Math.random();this.w=Math.random();return this}});Ea.prototype=Object.assign(Object.create(qa.prototype),{constructor:Ea,isWebGLRenderTarget:!0,setSize:function(a,b){if(this.width!==a||this.height!==b)this.width=a,this.height=b,this.texture.image.width=a,this.texture.image.height=b,this.dispose();this.viewport.set(0,0,a,b);this.scissor.set(0,0,a,b)},clone:function(){return(new this.constructor).copy(this)},copy:function(a){this.width=a.width;this.height=a.height; +this.viewport.copy(a.viewport);this.texture=a.texture.clone();this.depthBuffer=a.depthBuffer;this.stencilBuffer=a.stencilBuffer;this.depthTexture=a.depthTexture;return this},dispose:function(){this.dispatchEvent({type:"dispose"})}});$f.prototype=Object.assign(Object.create(Ea.prototype),{constructor:$f,isWebGLMultisampleRenderTarget:!0,copy:function(a){Ea.prototype.copy.call(this,a);this.samples=a.samples;return this}});Object.assign(T,{slerp:function(a,b,c,d){return c.copy(a).slerp(b,d)},slerpFlat:function(a, +b,c,d,e,f,g){var h=c[d+0],l=c[d+1],m=c[d+2];c=c[d+3];d=e[f+0];var k=e[f+1],p=e[f+2];e=e[f+3];if(c!==e||h!==d||l!==k||m!==p){f=1-g;var n=h*d+l*k+m*p+c*e,r=0<=n?1:-1,t=1-n*n;t>Number.EPSILON&&(t=Math.sqrt(t),n=Math.atan2(t,n*r),f=Math.sin(f*n)/t,g=Math.sin(g*n)/t);r*=g;h=h*f+d*r;l=l*f+k*r;m=m*f+p*r;c=c*f+e*r;f===1-g&&(g=1/Math.sqrt(h*h+l*l+m*m+c*c),h*=g,l*=g,m*=g,c*=g)}a[b]=h;a[b+1]=l;a[b+2]=m;a[b+3]=c},multiplyQuaternionsFlat:function(a,b,c,d,e,f){var g=c[d],h=c[d+1],l=c[d+2];c=c[d+3];d=e[f];var m= +e[f+1],k=e[f+2];e=e[f+3];a[b]=g*e+c*d+h*k-l*m;a[b+1]=h*e+c*m+l*d-g*k;a[b+2]=l*e+c*k+g*m-h*d;a[b+3]=c*e-g*d-h*m-l*k;return a}});Object.defineProperties(T.prototype,{x:{get:function(){return this._x},set:function(a){this._x=a;this._onChangeCallback()}},y:{get:function(){return this._y},set:function(a){this._y=a;this._onChangeCallback()}},z:{get:function(){return this._z},set:function(a){this._z=a;this._onChangeCallback()}},w:{get:function(){return this._w},set:function(a){this._w=a;this._onChangeCallback()}}}); +Object.assign(T.prototype,{isQuaternion:!0,set:function(a,b,c,d){this._x=a;this._y=b;this._z=c;this._w=d;this._onChangeCallback();return this},clone:function(){return new this.constructor(this._x,this._y,this._z,this._w)},copy:function(a){this._x=a.x;this._y=a.y;this._z=a.z;this._w=a.w;this._onChangeCallback();return this},setFromEuler:function(a,b){if(!a||!a.isEuler)throw Error("THREE.Quaternion: .setFromEuler() now expects an Euler rotation rather than a Vector3 and order.");var c=a._x,d=a._y,e= +a._z;a=a.order;var f=Math.cos,g=Math.sin,h=f(c/2),l=f(d/2);f=f(e/2);c=g(c/2);d=g(d/2);e=g(e/2);switch(a){case "XYZ":this._x=c*l*f+h*d*e;this._y=h*d*f-c*l*e;this._z=h*l*e+c*d*f;this._w=h*l*f-c*d*e;break;case "YXZ":this._x=c*l*f+h*d*e;this._y=h*d*f-c*l*e;this._z=h*l*e-c*d*f;this._w=h*l*f+c*d*e;break;case "ZXY":this._x=c*l*f-h*d*e;this._y=h*d*f+c*l*e;this._z=h*l*e+c*d*f;this._w=h*l*f-c*d*e;break;case "ZYX":this._x=c*l*f-h*d*e;this._y=h*d*f+c*l*e;this._z=h*l*e-c*d*f;this._w=h*l*f+c*d*e;break;case "YZX":this._x= +c*l*f+h*d*e;this._y=h*d*f+c*l*e;this._z=h*l*e-c*d*f;this._w=h*l*f-c*d*e;break;case "XZY":this._x=c*l*f-h*d*e;this._y=h*d*f-c*l*e;this._z=h*l*e+c*d*f;this._w=h*l*f+c*d*e;break;default:console.warn("THREE.Quaternion: .setFromEuler() encountered an unknown order: "+a)}!1!==b&&this._onChangeCallback();return this},setFromAxisAngle:function(a,b){b/=2;var c=Math.sin(b);this._x=a.x*c;this._y=a.y*c;this._z=a.z*c;this._w=Math.cos(b);this._onChangeCallback();return this},setFromRotationMatrix:function(a){var b= +a.elements,c=b[0];a=b[4];var d=b[8],e=b[1],f=b[5],g=b[9],h=b[2],l=b[6];b=b[10];var m=c+f+b;0f&&c>b?(c=2*Math.sqrt(1+c-f-b),this._w=(l-g)/c,this._x=.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=.25*c,this._z=(g+l)/c):(c=2*Math.sqrt(1+b-c-f),this._w=(e-a)/c,this._x=(d+h)/c,this._y=(g+l)/c,this._z=.25*c);this._onChangeCallback();return this},setFromUnitVectors:function(a, +b){var c=a.dot(b)+1;1E-6>c?(c=0,Math.abs(a.x)>Math.abs(a.z)?(this._x=-a.y,this._y=a.x,this._z=0):(this._x=0,this._y=-a.z,this._z=a.y)):(this._x=a.y*b.z-a.z*b.y,this._y=a.z*b.x-a.x*b.z,this._z=a.x*b.y-a.y*b.x);this._w=c;return this.normalize()},angleTo:function(a){return 2*Math.acos(Math.abs(O.clamp(this.dot(a),-1,1)))},rotateTowards:function(a,b){var c=this.angleTo(a);if(0===c)return this;this.slerp(a,Math.min(1,b/c));return this},inverse:function(){return this.conjugate()},conjugate:function(){this._x*= +-1;this._y*=-1;this._z*=-1;this._onChangeCallback();return this},dot:function(a){return this._x*a._x+this._y*a._y+this._z*a._z+this._w*a._w},lengthSq:function(){return this._x*this._x+this._y*this._y+this._z*this._z+this._w*this._w},length:function(){return Math.sqrt(this._x*this._x+this._y*this._y+this._z*this._z+this._w*this._w)},normalize:function(){var a=this.length();0===a?(this._z=this._y=this._x=0,this._w=1):(a=1/a,this._x*=a,this._y*=a,this._z*=a,this._w*=a);this._onChangeCallback();return this}, +multiply:function(a,b){return void 0!==b?(console.warn("THREE.Quaternion: .multiply() now only accepts one argument. Use .multiplyQuaternions( a, b ) instead."),this.multiplyQuaternions(a,b)):this.multiplyQuaternions(this,a)},premultiply:function(a){return this.multiplyQuaternions(a,this)},multiplyQuaternions:function(a,b){var c=a._x,d=a._y,e=a._z;a=a._w;var f=b._x,g=b._y,h=b._z;b=b._w;this._x=c*b+a*f+d*h-e*g;this._y=d*b+a*g+e*f-c*h;this._z=e*b+a*h+c*g-d*f;this._w=a*b-c*f-d*g-e*h;this._onChangeCallback(); +return this},slerp:function(a,b){if(0===b)return this;if(1===b)return this.copy(a);var c=this._x,d=this._y,e=this._z,f=this._w,g=f*a._w+c*a._x+d*a._y+e*a._z;0>g?(this._w=-a._w,this._x=-a._x,this._y=-a._y,this._z=-a._z,g=-g):this.copy(a);if(1<=g)return this._w=f,this._x=c,this._y=d,this._z=e,this;a=1-g*g;if(a<=Number.EPSILON)return g=1-b,this._w=g*f+b*this._w,this._x=g*c+b*this._x,this._y=g*d+b*this._y,this._z=g*e+b*this._z,this.normalize(),this._onChangeCallback(),this;a=Math.sqrt(a);var h=Math.atan2(a, +g);g=Math.sin((1-b)*h)/a;b=Math.sin(b*h)/a;this._w=f*g+this._w*b;this._x=c*g+this._x*b;this._y=d*g+this._y*b;this._z=e*g+this._z*b;this._onChangeCallback();return this},equals:function(a){return a._x===this._x&&a._y===this._y&&a._z===this._z&&a._w===this._w},fromArray:function(a,b){void 0===b&&(b=0);this._x=a[b];this._y=a[b+1];this._z=a[b+2];this._w=a[b+3];this._onChangeCallback();return this},toArray:function(a,b){void 0===a&&(a=[]);void 0===b&&(b=0);a[b]=this._x;a[b+1]=this._y;a[b+2]=this._z;a[b+ +3]=this._w;return a},fromBufferAttribute:function(a,b){this._x=a.getX(b);this._y=a.getY(b);this._z=a.getZ(b);this._w=a.getW(b);return this},_onChange:function(a){this._onChangeCallback=a;return this},_onChangeCallback:function(){}});var Wg=new n,ui=new T;Object.assign(n.prototype,{isVector3:!0,set:function(a,b,c){this.x=a;this.y=b;this.z=c;return this},setScalar:function(a){this.z=this.y=this.x=a;return this},setX:function(a){this.x=a;return this},setY:function(a){this.y=a;return this},setZ:function(a){this.z= +a;return this},setComponent:function(a,b){switch(a){case 0:this.x=b;break;case 1:this.y=b;break;case 2:this.z=b;break;default:throw Error("index is out of range: "+a);}return this},getComponent:function(a){switch(a){case 0:return this.x;case 1:return this.y;case 2:return this.z;default:throw Error("index is out of range: "+a);}},clone:function(){return new this.constructor(this.x,this.y,this.z)},copy:function(a){this.x=a.x;this.y=a.y;this.z=a.z;return this},add:function(a,b){if(void 0!==b)return console.warn("THREE.Vector3: .add() now only accepts one argument. Use .addVectors( a, b ) instead."), +this.addVectors(a,b);this.x+=a.x;this.y+=a.y;this.z+=a.z;return this},addScalar:function(a){this.x+=a;this.y+=a;this.z+=a;return this},addVectors:function(a,b){this.x=a.x+b.x;this.y=a.y+b.y;this.z=a.z+b.z;return this},addScaledVector:function(a,b){this.x+=a.x*b;this.y+=a.y*b;this.z+=a.z*b;return this},sub:function(a,b){if(void 0!==b)return console.warn("THREE.Vector3: .sub() now only accepts one argument. Use .subVectors( a, b ) instead."),this.subVectors(a,b);this.x-=a.x;this.y-=a.y;this.z-=a.z; +return this},subScalar:function(a){this.x-=a;this.y-=a;this.z-=a;return this},subVectors:function(a,b){this.x=a.x-b.x;this.y=a.y-b.y;this.z=a.z-b.z;return this},multiply:function(a,b){if(void 0!==b)return console.warn("THREE.Vector3: .multiply() now only accepts one argument. Use .multiplyVectors( a, b ) instead."),this.multiplyVectors(a,b);this.x*=a.x;this.y*=a.y;this.z*=a.z;return this},multiplyScalar:function(a){this.x*=a;this.y*=a;this.z*=a;return this},multiplyVectors:function(a,b){this.x=a.x* +b.x;this.y=a.y*b.y;this.z=a.z*b.z;return this},applyEuler:function(a){a&&a.isEuler||console.error("THREE.Vector3: .applyEuler() now expects an Euler rotation rather than a Vector3 and order.");return this.applyQuaternion(ui.setFromEuler(a))},applyAxisAngle:function(a,b){return this.applyQuaternion(ui.setFromAxisAngle(a,b))},applyMatrix3:function(a){var b=this.x,c=this.y,d=this.z;a=a.elements;this.x=a[0]*b+a[3]*c+a[6]*d;this.y=a[1]*b+a[4]*c+a[7]*d;this.z=a[2]*b+a[5]*c+a[8]*d;return this},applyNormalMatrix:function(a){return this.applyMatrix3(a).normalize()}, +applyMatrix4:function(a){var b=this.x,c=this.y,d=this.z;a=a.elements;var e=1/(a[3]*b+a[7]*c+a[11]*d+a[15]);this.x=(a[0]*b+a[4]*c+a[8]*d+a[12])*e;this.y=(a[1]*b+a[5]*c+a[9]*d+a[13])*e;this.z=(a[2]*b+a[6]*c+a[10]*d+a[14])*e;return this},applyQuaternion:function(a){var b=this.x,c=this.y,d=this.z,e=a.x,f=a.y,g=a.z;a=a.w;var h=a*b+f*d-g*c,l=a*c+g*b-e*d,m=a*d+e*c-f*b;b=-e*b-f*c-g*d;this.x=h*a+b*-e+l*-g-m*-f;this.y=l*a+b*-f+m*-e-h*-g;this.z=m*a+b*-g+h*-f-l*-e;return this},project:function(a){return this.applyMatrix4(a.matrixWorldInverse).applyMatrix4(a.projectionMatrix)}, +unproject:function(a){return this.applyMatrix4(a.projectionMatrixInverse).applyMatrix4(a.matrixWorld)},transformDirection:function(a){var b=this.x,c=this.y,d=this.z;a=a.elements;this.x=a[0]*b+a[4]*c+a[8]*d;this.y=a[1]*b+a[5]*c+a[9]*d;this.z=a[2]*b+a[6]*c+a[10]*d;return this.normalize()},divide:function(a){this.x/=a.x;this.y/=a.y;this.z/=a.z;return this},divideScalar:function(a){return this.multiplyScalar(1/a)},min:function(a){this.x=Math.min(this.x,a.x);this.y=Math.min(this.y,a.y);this.z=Math.min(this.z, +a.z);return this},max:function(a){this.x=Math.max(this.x,a.x);this.y=Math.max(this.y,a.y);this.z=Math.max(this.z,a.z);return this},clamp:function(a,b){this.x=Math.max(a.x,Math.min(b.x,this.x));this.y=Math.max(a.y,Math.min(b.y,this.y));this.z=Math.max(a.z,Math.min(b.z,this.z));return this},clampScalar:function(a,b){this.x=Math.max(a,Math.min(b,this.x));this.y=Math.max(a,Math.min(b,this.y));this.z=Math.max(a,Math.min(b,this.z));return this},clampLength:function(a,b){var c=this.length();return this.divideScalar(c|| +1).multiplyScalar(Math.max(a,Math.min(b,c)))},floor:function(){this.x=Math.floor(this.x);this.y=Math.floor(this.y);this.z=Math.floor(this.z);return this},ceil:function(){this.x=Math.ceil(this.x);this.y=Math.ceil(this.y);this.z=Math.ceil(this.z);return this},round:function(){this.x=Math.round(this.x);this.y=Math.round(this.y);this.z=Math.round(this.z);return this},roundToZero:function(){this.x=0>this.x?Math.ceil(this.x):Math.floor(this.x);this.y=0>this.y?Math.ceil(this.y):Math.floor(this.y);this.z= +0>this.z?Math.ceil(this.z):Math.floor(this.z);return this},negate:function(){this.x=-this.x;this.y=-this.y;this.z=-this.z;return this},dot:function(a){return this.x*a.x+this.y*a.y+this.z*a.z},lengthSq:function(){return this.x*this.x+this.y*this.y+this.z*this.z},length:function(){return Math.sqrt(this.x*this.x+this.y*this.y+this.z*this.z)},manhattanLength:function(){return Math.abs(this.x)+Math.abs(this.y)+Math.abs(this.z)},normalize:function(){return this.divideScalar(this.length()||1)},setLength:function(a){return this.normalize().multiplyScalar(a)}, +lerp:function(a,b){this.x+=(a.x-this.x)*b;this.y+=(a.y-this.y)*b;this.z+=(a.z-this.z)*b;return this},lerpVectors:function(a,b,c){this.x=a.x+(b.x-a.x)*c;this.y=a.y+(b.y-a.y)*c;this.z=a.z+(b.z-a.z)*c;return this},cross:function(a,b){return void 0!==b?(console.warn("THREE.Vector3: .cross() now only accepts one argument. Use .crossVectors( a, b ) instead."),this.crossVectors(a,b)):this.crossVectors(this,a)},crossVectors:function(a,b){var c=a.x,d=a.y;a=a.z;var e=b.x,f=b.y;b=b.z;this.x=d*b-a*f;this.y=a* +e-c*b;this.z=c*f-d*e;return this},projectOnVector:function(a){var b=a.lengthSq();if(0===b)return this.set(0,0,0);b=a.dot(this)/b;return this.copy(a).multiplyScalar(b)},projectOnPlane:function(a){Wg.copy(this).projectOnVector(a);return this.sub(Wg)},reflect:function(a){return this.sub(Wg.copy(a).multiplyScalar(2*this.dot(a)))},angleTo:function(a){var b=Math.sqrt(this.lengthSq()*a.lengthSq());if(0===b)return Math.PI/2;a=this.dot(a)/b;return Math.acos(O.clamp(a,-1,1))},distanceTo:function(a){return Math.sqrt(this.distanceToSquared(a))}, +distanceToSquared:function(a){var b=this.x-a.x,c=this.y-a.y;a=this.z-a.z;return b*b+c*c+a*a},manhattanDistanceTo:function(a){return Math.abs(this.x-a.x)+Math.abs(this.y-a.y)+Math.abs(this.z-a.z)},setFromSpherical:function(a){return this.setFromSphericalCoords(a.radius,a.phi,a.theta)},setFromSphericalCoords:function(a,b,c){var d=Math.sin(b)*a;this.x=d*Math.sin(c);this.y=Math.cos(b)*a;this.z=d*Math.cos(c);return this},setFromCylindrical:function(a){return this.setFromCylindricalCoords(a.radius,a.theta, +a.y)},setFromCylindricalCoords:function(a,b,c){this.x=a*Math.sin(b);this.y=c;this.z=a*Math.cos(b);return this},setFromMatrixPosition:function(a){a=a.elements;this.x=a[12];this.y=a[13];this.z=a[14];return this},setFromMatrixScale:function(a){var b=this.setFromMatrixColumn(a,0).length(),c=this.setFromMatrixColumn(a,1).length();a=this.setFromMatrixColumn(a,2).length();this.x=b;this.y=c;this.z=a;return this},setFromMatrixColumn:function(a,b){return this.fromArray(a.elements,4*b)},setFromMatrix3Column:function(a, +b){return this.fromArray(a.elements,3*b)},equals:function(a){return a.x===this.x&&a.y===this.y&&a.z===this.z},fromArray:function(a,b){void 0===b&&(b=0);this.x=a[b];this.y=a[b+1];this.z=a[b+2];return this},toArray:function(a,b){void 0===a&&(a=[]);void 0===b&&(b=0);a[b]=this.x;a[b+1]=this.y;a[b+2]=this.z;return a},fromBufferAttribute:function(a,b,c){void 0!==c&&console.warn("THREE.Vector3: offset has been removed from .fromBufferAttribute().");this.x=a.getX(b);this.y=a.getY(b);this.z=a.getZ(b);return this}, +random:function(){this.x=Math.random();this.y=Math.random();this.z=Math.random();return this}});var ld=new n,Y=new U,Kk=new n(0,0,0),Lk=new n(1,1,1),Nb=new n,Af=new n,Ca=new n;Object.assign(U.prototype,{isMatrix4:!0,set:function(a,b,c,d,e,f,g,h,l,m,k,p,n,r,t,v){var q=this.elements;q[0]=a;q[4]=b;q[8]=c;q[12]=d;q[1]=e;q[5]=f;q[9]=g;q[13]=h;q[2]=l;q[6]=m;q[10]=k;q[14]=p;q[3]=n;q[7]=r;q[11]=t;q[15]=v;return this},identity:function(){this.set(1,0,0,0,0,1,0,0,0,0,1,0,0,0,0,1);return this},clone:function(){return(new U).fromArray(this.elements)}, +copy:function(a){var b=this.elements;a=a.elements;b[0]=a[0];b[1]=a[1];b[2]=a[2];b[3]=a[3];b[4]=a[4];b[5]=a[5];b[6]=a[6];b[7]=a[7];b[8]=a[8];b[9]=a[9];b[10]=a[10];b[11]=a[11];b[12]=a[12];b[13]=a[13];b[14]=a[14];b[15]=a[15];return this},copyPosition:function(a){var b=this.elements;a=a.elements;b[12]=a[12];b[13]=a[13];b[14]=a[14];return this},extractBasis:function(a,b,c){a.setFromMatrixColumn(this,0);b.setFromMatrixColumn(this,1);c.setFromMatrixColumn(this,2);return this},makeBasis:function(a,b,c){this.set(a.x, +b.x,c.x,0,a.y,b.y,c.y,0,a.z,b.z,c.z,0,0,0,0,1);return this},extractRotation:function(a){var b=this.elements,c=a.elements,d=1/ld.setFromMatrixColumn(a,0).length(),e=1/ld.setFromMatrixColumn(a,1).length();a=1/ld.setFromMatrixColumn(a,2).length();b[0]=c[0]*d;b[1]=c[1]*d;b[2]=c[2]*d;b[3]=0;b[4]=c[4]*e;b[5]=c[5]*e;b[6]=c[6]*e;b[7]=0;b[8]=c[8]*a;b[9]=c[9]*a;b[10]=c[10]*a;b[11]=0;b[12]=0;b[13]=0;b[14]=0;b[15]=1;return this},makeRotationFromEuler:function(a){a&&a.isEuler||console.error("THREE.Matrix4: .makeRotationFromEuler() now expects a Euler rotation rather than a Vector3 and order."); +var b=this.elements,c=a.x,d=a.y,e=a.z,f=Math.cos(c);c=Math.sin(c);var g=Math.cos(d);d=Math.sin(d);var h=Math.cos(e);e=Math.sin(e);if("XYZ"===a.order){a=f*h;var l=f*e,m=c*h,k=c*e;b[0]=g*h;b[4]=-g*e;b[8]=d;b[1]=l+m*d;b[5]=a-k*d;b[9]=-c*g;b[2]=k-a*d;b[6]=m+l*d;b[10]=f*g}else"YXZ"===a.order?(a=g*h,l=g*e,m=d*h,k=d*e,b[0]=a+k*c,b[4]=m*c-l,b[8]=f*d,b[1]=f*e,b[5]=f*h,b[9]=-c,b[2]=l*c-m,b[6]=k+a*c,b[10]=f*g):"ZXY"===a.order?(a=g*h,l=g*e,m=d*h,k=d*e,b[0]=a-k*c,b[4]=-f*e,b[8]=m+l*c,b[1]=l+m*c,b[5]=f*h,b[9]= +k-a*c,b[2]=-f*d,b[6]=c,b[10]=f*g):"ZYX"===a.order?(a=f*h,l=f*e,m=c*h,k=c*e,b[0]=g*h,b[4]=m*d-l,b[8]=a*d+k,b[1]=g*e,b[5]=k*d+a,b[9]=l*d-m,b[2]=-d,b[6]=c*g,b[10]=f*g):"YZX"===a.order?(a=f*g,l=f*d,m=c*g,k=c*d,b[0]=g*h,b[4]=k-a*e,b[8]=m*e+l,b[1]=e,b[5]=f*h,b[9]=-c*h,b[2]=-d*h,b[6]=l*e+m,b[10]=a-k*e):"XZY"===a.order&&(a=f*g,l=f*d,m=c*g,k=c*d,b[0]=g*h,b[4]=-e,b[8]=d*h,b[1]=a*e+k,b[5]=f*h,b[9]=l*e-m,b[2]=m*e-l,b[6]=c*h,b[10]=k*e+a);b[3]=0;b[7]=0;b[11]=0;b[12]=0;b[13]=0;b[14]=0;b[15]=1;return this},makeRotationFromQuaternion:function(a){return this.compose(Kk, +a,Lk)},lookAt:function(a,b,c){var d=this.elements;Ca.subVectors(a,b);0===Ca.lengthSq()&&(Ca.z=1);Ca.normalize();Nb.crossVectors(c,Ca);0===Nb.lengthSq()&&(1===Math.abs(c.z)?Ca.x+=1E-4:Ca.z+=1E-4,Ca.normalize(),Nb.crossVectors(c,Ca));Nb.normalize();Af.crossVectors(Ca,Nb);d[0]=Nb.x;d[4]=Af.x;d[8]=Ca.x;d[1]=Nb.y;d[5]=Af.y;d[9]=Ca.y;d[2]=Nb.z;d[6]=Af.z;d[10]=Ca.z;return this},multiply:function(a,b){return void 0!==b?(console.warn("THREE.Matrix4: .multiply() now only accepts one argument. Use .multiplyMatrices( a, b ) instead."), +this.multiplyMatrices(a,b)):this.multiplyMatrices(this,a)},premultiply:function(a){return this.multiplyMatrices(a,this)},multiplyMatrices:function(a,b){var c=a.elements,d=b.elements;b=this.elements;a=c[0];var e=c[4],f=c[8],g=c[12],h=c[1],l=c[5],m=c[9],k=c[13],p=c[2],n=c[6],r=c[10],t=c[14],v=c[3],y=c[7],u=c[11];c=c[15];var w=d[0],x=d[4],F=d[8],N=d[12],z=d[1],C=d[5],D=d[9],E=d[13],H=d[2],G=d[6],I=d[10],J=d[14],K=d[3],M=d[7],O=d[11];d=d[15];b[0]=a*w+e*z+f*H+g*K;b[4]=a*x+e*C+f*G+g*M;b[8]=a*F+e*D+f*I+ +g*O;b[12]=a*N+e*E+f*J+g*d;b[1]=h*w+l*z+m*H+k*K;b[5]=h*x+l*C+m*G+k*M;b[9]=h*F+l*D+m*I+k*O;b[13]=h*N+l*E+m*J+k*d;b[2]=p*w+n*z+r*H+t*K;b[6]=p*x+n*C+r*G+t*M;b[10]=p*F+n*D+r*I+t*O;b[14]=p*N+n*E+r*J+t*d;b[3]=v*w+y*z+u*H+c*K;b[7]=v*x+y*C+u*G+c*M;b[11]=v*F+y*D+u*I+c*O;b[15]=v*N+y*E+u*J+c*d;return this},multiplyScalar:function(a){var b=this.elements;b[0]*=a;b[4]*=a;b[8]*=a;b[12]*=a;b[1]*=a;b[5]*=a;b[9]*=a;b[13]*=a;b[2]*=a;b[6]*=a;b[10]*=a;b[14]*=a;b[3]*=a;b[7]*=a;b[11]*=a;b[15]*=a;return this},determinant:function(){var a= +this.elements,b=a[0],c=a[4],d=a[8],e=a[12],f=a[1],g=a[5],h=a[9],l=a[13],m=a[2],k=a[6],p=a[10],n=a[14];return a[3]*(+e*h*k-d*l*k-e*g*p+c*l*p+d*g*n-c*h*n)+a[7]*(+b*h*n-b*l*p+e*f*p-d*f*n+d*l*m-e*h*m)+a[11]*(+b*l*k-b*g*n-e*f*k+c*f*n+e*g*m-c*l*m)+a[15]*(-d*g*m-b*h*k+b*g*p+d*f*k-c*f*p+c*h*m)},transpose:function(){var a=this.elements;var b=a[1];a[1]=a[4];a[4]=b;b=a[2];a[2]=a[8];a[8]=b;b=a[6];a[6]=a[9];a[9]=b;b=a[3];a[3]=a[12];a[12]=b;b=a[7];a[7]=a[13];a[13]=b;b=a[11];a[11]=a[14];a[14]=b;return this},setPosition:function(a, +b,c){var d=this.elements;a.isVector3?(d[12]=a.x,d[13]=a.y,d[14]=a.z):(d[12]=a,d[13]=b,d[14]=c);return this},getInverse:function(a,b){void 0!==b&&console.warn("THREE.Matrix4: .getInverse() can no longer be configured to throw on degenerate.");b=this.elements;var c=a.elements;a=c[0];var d=c[1],e=c[2],f=c[3],g=c[4],h=c[5],l=c[6],k=c[7],q=c[8],p=c[9],n=c[10],r=c[11],t=c[12],v=c[13],y=c[14];c=c[15];var u=p*y*k-v*n*k+v*l*r-h*y*r-p*l*c+h*n*c,w=t*n*k-q*y*k-t*l*r+g*y*r+q*l*c-g*n*c,x=q*v*k-t*p*k+t*h*r-g*v* +r-q*h*c+g*p*c,F=t*p*l-q*v*l-t*h*n+g*v*n+q*h*y-g*p*y,N=a*u+d*w+e*x+f*F;if(0===N)return this.set(0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0);N=1/N;b[0]=u*N;b[1]=(v*n*f-p*y*f-v*e*r+d*y*r+p*e*c-d*n*c)*N;b[2]=(h*y*f-v*l*f+v*e*k-d*y*k-h*e*c+d*l*c)*N;b[3]=(p*l*f-h*n*f-p*e*k+d*n*k+h*e*r-d*l*r)*N;b[4]=w*N;b[5]=(q*y*f-t*n*f+t*e*r-a*y*r-q*e*c+a*n*c)*N;b[6]=(t*l*f-g*y*f-t*e*k+a*y*k+g*e*c-a*l*c)*N;b[7]=(g*n*f-q*l*f+q*e*k-a*n*k-g*e*r+a*l*r)*N;b[8]=x*N;b[9]=(t*p*f-q*v*f-t*d*r+a*v*r+q*d*c-a*p*c)*N;b[10]=(g*v*f-t*h*f+t*d*k- +a*v*k-g*d*c+a*h*c)*N;b[11]=(q*h*f-g*p*f-q*d*k+a*p*k+g*d*r-a*h*r)*N;b[12]=F*N;b[13]=(q*v*e-t*p*e+t*d*n-a*v*n-q*d*y+a*p*y)*N;b[14]=(t*h*e-g*v*e-t*d*l+a*v*l+g*d*y-a*h*y)*N;b[15]=(g*p*e-q*h*e+q*d*l-a*p*l-g*d*n+a*h*n)*N;return this},scale:function(a){var b=this.elements,c=a.x,d=a.y;a=a.z;b[0]*=c;b[4]*=d;b[8]*=a;b[1]*=c;b[5]*=d;b[9]*=a;b[2]*=c;b[6]*=d;b[10]*=a;b[3]*=c;b[7]*=d;b[11]*=a;return this},getMaxScaleOnAxis:function(){var a=this.elements;return Math.sqrt(Math.max(a[0]*a[0]+a[1]*a[1]+a[2]*a[2],a[4]* +a[4]+a[5]*a[5]+a[6]*a[6],a[8]*a[8]+a[9]*a[9]+a[10]*a[10]))},makeTranslation:function(a,b,c){this.set(1,0,0,a,0,1,0,b,0,0,1,c,0,0,0,1);return this},makeRotationX:function(a){var b=Math.cos(a);a=Math.sin(a);this.set(1,0,0,0,0,b,-a,0,0,a,b,0,0,0,0,1);return this},makeRotationY:function(a){var b=Math.cos(a);a=Math.sin(a);this.set(b,0,a,0,0,1,0,0,-a,0,b,0,0,0,0,1);return this},makeRotationZ:function(a){var b=Math.cos(a);a=Math.sin(a);this.set(b,-a,0,0,a,b,0,0,0,0,1,0,0,0,0,1);return this},makeRotationAxis:function(a, +b){var c=Math.cos(b);b=Math.sin(b);var d=1-c,e=a.x,f=a.y;a=a.z;var g=d*e,h=d*f;this.set(g*e+c,g*f-b*a,g*a+b*f,0,g*f+b*a,h*f+c,h*a-b*e,0,g*a-b*f,h*a+b*e,d*a*a+c,0,0,0,0,1);return this},makeScale:function(a,b,c){this.set(a,0,0,0,0,b,0,0,0,0,c,0,0,0,0,1);return this},makeShear:function(a,b,c){this.set(1,b,c,0,a,1,c,0,a,b,1,0,0,0,0,1);return this},compose:function(a,b,c){var d=this.elements,e=b._x,f=b._y,g=b._z,h=b._w,l=e+e,k=f+f,q=g+g;b=e*l;var p=e*k;e*=q;var n=f*k;f*=q;g*=q;l*=h;k*=h;h*=q;q=c.x;var r= +c.y;c=c.z;d[0]=(1-(n+g))*q;d[1]=(p+h)*q;d[2]=(e-k)*q;d[3]=0;d[4]=(p-h)*r;d[5]=(1-(b+g))*r;d[6]=(f+l)*r;d[7]=0;d[8]=(e+k)*c;d[9]=(f-l)*c;d[10]=(1-(b+n))*c;d[11]=0;d[12]=a.x;d[13]=a.y;d[14]=a.z;d[15]=1;return this},decompose:function(a,b,c){var d=this.elements,e=ld.set(d[0],d[1],d[2]).length(),f=ld.set(d[4],d[5],d[6]).length(),g=ld.set(d[8],d[9],d[10]).length();0>this.determinant()&&(e=-e);a.x=d[12];a.y=d[13];a.z=d[14];Y.copy(this);a=1/e;d=1/f;var h=1/g;Y.elements[0]*=a;Y.elements[1]*=a;Y.elements[2]*= +a;Y.elements[4]*=d;Y.elements[5]*=d;Y.elements[6]*=d;Y.elements[8]*=h;Y.elements[9]*=h;Y.elements[10]*=h;b.setFromRotationMatrix(Y);c.x=e;c.y=f;c.z=g;return this},makePerspective:function(a,b,c,d,e,f){void 0===f&&console.warn("THREE.Matrix4: .makePerspective() has been redefined and has a new signature. Please check the docs.");var g=this.elements;g[0]=2*e/(b-a);g[4]=0;g[8]=(b+a)/(b-a);g[12]=0;g[1]=0;g[5]=2*e/(c-d);g[9]=(c+d)/(c-d);g[13]=0;g[2]=0;g[6]=0;g[10]=-(f+e)/(f-e);g[14]=-2*f*e/(f-e);g[3]= +0;g[7]=0;g[11]=-1;g[15]=0;return this},makeOrthographic:function(a,b,c,d,e,f){var g=this.elements,h=1/(b-a),l=1/(c-d),k=1/(f-e);g[0]=2*h;g[4]=0;g[8]=0;g[12]=-((b+a)*h);g[1]=0;g[5]=2*l;g[9]=0;g[13]=-((c+d)*l);g[2]=0;g[6]=0;g[10]=-2*k;g[14]=-((f+e)*k);g[3]=0;g[7]=0;g[11]=0;g[15]=1;return this},equals:function(a){var b=this.elements;a=a.elements;for(var c=0;16>c;c++)if(b[c]!==a[c])return!1;return!0},fromArray:function(a,b){void 0===b&&(b=0);for(var c=0;16>c;c++)this.elements[c]=a[c+b];return this},toArray:function(a, +b){void 0===a&&(a=[]);void 0===b&&(b=0);var c=this.elements;a[b]=c[0];a[b+1]=c[1];a[b+2]=c[2];a[b+3]=c[3];a[b+4]=c[4];a[b+5]=c[5];a[b+6]=c[6];a[b+7]=c[7];a[b+8]=c[8];a[b+9]=c[9];a[b+10]=c[10];a[b+11]=c[11];a[b+12]=c[12];a[b+13]=c[13];a[b+14]=c[14];a[b+15]=c[15];return a}});var vi=new U,wi=new T;Sb.RotationOrders="XYZ YZX ZXY XZY YXZ ZYX".split(" ");Sb.DefaultOrder="XYZ";Object.defineProperties(Sb.prototype,{x:{get:function(){return this._x},set:function(a){this._x=a;this._onChangeCallback()}},y:{get:function(){return this._y}, +set:function(a){this._y=a;this._onChangeCallback()}},z:{get:function(){return this._z},set:function(a){this._z=a;this._onChangeCallback()}},order:{get:function(){return this._order},set:function(a){this._order=a;this._onChangeCallback()}}});Object.assign(Sb.prototype,{isEuler:!0,set:function(a,b,c,d){this._x=a;this._y=b;this._z=c;this._order=d||this._order;this._onChangeCallback();return this},clone:function(){return new this.constructor(this._x,this._y,this._z,this._order)},copy:function(a){this._x= +a._x;this._y=a._y;this._z=a._z;this._order=a._order;this._onChangeCallback();return this},setFromRotationMatrix:function(a,b,c){var d=O.clamp,e=a.elements;a=e[0];var f=e[4],g=e[8],h=e[1],l=e[5],k=e[9],q=e[2],p=e[6];e=e[10];b=b||this._order;switch(b){case "XYZ":this._y=Math.asin(d(g,-1,1));.9999999>Math.abs(g)?(this._x=Math.atan2(-k,e),this._z=Math.atan2(-f,a)):(this._x=Math.atan2(p,l),this._z=0);break;case "YXZ":this._x=Math.asin(-d(k,-1,1));.9999999>Math.abs(k)?(this._y=Math.atan2(g,e),this._z=Math.atan2(h, +l)):(this._y=Math.atan2(-q,a),this._z=0);break;case "ZXY":this._x=Math.asin(d(p,-1,1));.9999999>Math.abs(p)?(this._y=Math.atan2(-q,e),this._z=Math.atan2(-f,l)):(this._y=0,this._z=Math.atan2(h,a));break;case "ZYX":this._y=Math.asin(-d(q,-1,1));.9999999>Math.abs(q)?(this._x=Math.atan2(p,e),this._z=Math.atan2(h,a)):(this._x=0,this._z=Math.atan2(-f,l));break;case "YZX":this._z=Math.asin(d(h,-1,1));.9999999>Math.abs(h)?(this._x=Math.atan2(-k,l),this._y=Math.atan2(-q,a)):(this._x=0,this._y=Math.atan2(g, +e));break;case "XZY":this._z=Math.asin(-d(f,-1,1));.9999999>Math.abs(f)?(this._x=Math.atan2(p,l),this._y=Math.atan2(g,a)):(this._x=Math.atan2(-k,e),this._y=0);break;default:console.warn("THREE.Euler: .setFromRotationMatrix() encountered an unknown order: "+b)}this._order=b;!1!==c&&this._onChangeCallback();return this},setFromQuaternion:function(a,b,c){vi.makeRotationFromQuaternion(a);return this.setFromRotationMatrix(vi,b,c)},setFromVector3:function(a,b){return this.set(a.x,a.y,a.z,b||this._order)}, +reorder:function(a){wi.setFromEuler(this);return this.setFromQuaternion(wi,a)},equals:function(a){return a._x===this._x&&a._y===this._y&&a._z===this._z&&a._order===this._order},fromArray:function(a){this._x=a[0];this._y=a[1];this._z=a[2];void 0!==a[3]&&(this._order=a[3]);this._onChangeCallback();return this},toArray:function(a,b){void 0===a&&(a=[]);void 0===b&&(b=0);a[b]=this._x;a[b+1]=this._y;a[b+2]=this._z;a[b+3]=this._order;return a},toVector3:function(a){return a?a.set(this._x,this._y,this._z): +new n(this._x,this._y,this._z)},_onChange:function(a){this._onChangeCallback=a;return this},_onChangeCallback:function(){}});Object.assign(De.prototype,{set:function(a){this.mask=1<e&&(e=k);q>f&&(f=q);p>g&&(g=p)}this.min.set(b,c,d);this.max.set(e,f,g);return this},setFromBufferAttribute:function(a){for(var b=Infinity,c=Infinity,d=Infinity,e=-Infinity,f=-Infinity,g=-Infinity,h=0,l=a.count;he&&(e=k);q>f&&(f=q);p>g&&(g=p)}this.min.set(b,c,d);this.max.set(e,f,g);return this},setFromPoints:function(a){this.makeEmpty();for(var b=0,c=a.length;bthis.max.x||a.ythis.max.y||a.zthis.max.z?!1:!0},containsBox:function(a){return this.min.x<=a.min.x&&a.max.x<=this.max.x&&this.min.y<=a.min.y&&a.max.y<=this.max.y&&this.min.z<=a.min.z&&a.max.z<=this.max.z},getParameter:function(a,b){void 0===b&&(console.warn("THREE.Box3: .getParameter() target is now required"),b=new n);return b.set((a.x-this.min.x)/(this.max.x-this.min.x),(a.y-this.min.y)/(this.max.y-this.min.y),(a.z-this.min.z)/(this.max.z-this.min.z))},intersectsBox:function(a){return a.max.xthis.max.x|| +a.max.ythis.max.y||a.max.zthis.max.z?!1:!0},intersectsSphere:function(a){this.clampPoint(a.center,ue);return ue.distanceToSquared(a.center)<=a.radius*a.radius},intersectsPlane:function(a){if(0=-a.constant},intersectsTriangle:function(a){if(this.isEmpty())return!1;this.getCenter(ve);Cf.subVectors(this.max,ve);nd.subVectors(a.a,ve);od.subVectors(a.b,ve);pd.subVectors(a.c,ve);Ob.subVectors(od,nd);Pb.subVectors(pd,od);qc.subVectors(nd,pd);a=[0,-Ob.z,Ob.y,0,-Pb.z,Pb.y,0,-qc.z,qc.y,Ob.z,0,-Ob.x,Pb.z,0,-Pb.x,qc.z,0,-qc.x,-Ob.y,Ob.x,0,-Pb.y,Pb.x,0,-qc.y,qc.x,0];if(!ag(a,nd,od,pd,Cf))return!1; +a=[1,0,0,0,1,0,0,0,1];if(!ag(a,nd,od,pd,Cf))return!1;Df.crossVectors(Ob,Pb);a=[Df.x,Df.y,Df.z];return ag(a,nd,od,pd,Cf)},clampPoint:function(a,b){void 0===b&&(console.warn("THREE.Box3: .clampPoint() target is now required"),b=new n);return b.copy(a).clamp(this.min,this.max)},distanceToPoint:function(a){return ue.copy(a).clamp(this.min,this.max).sub(a).length()},getBoundingSphere:function(a){void 0===a&&console.error("THREE.Box3: .getBoundingSphere() target is now required");this.getCenter(a.center); +a.radius=.5*this.getSize(ue).length();return a},intersect:function(a){this.min.max(a.min);this.max.min(a.max);this.isEmpty()&&this.makeEmpty();return this},union:function(a){this.min.min(a.min);this.max.max(a.max);return this},applyMatrix4:function(a){if(this.isEmpty())return this;wb[0].set(this.min.x,this.min.y,this.min.z).applyMatrix4(a);wb[1].set(this.min.x,this.min.y,this.max.z).applyMatrix4(a);wb[2].set(this.min.x,this.max.y,this.min.z).applyMatrix4(a);wb[3].set(this.min.x,this.max.y,this.max.z).applyMatrix4(a); +wb[4].set(this.max.x,this.min.y,this.min.z).applyMatrix4(a);wb[5].set(this.max.x,this.min.y,this.max.z).applyMatrix4(a);wb[6].set(this.max.x,this.max.y,this.min.z).applyMatrix4(a);wb[7].set(this.max.x,this.max.y,this.max.z).applyMatrix4(a);this.setFromPoints(wb);return this},translate:function(a){this.min.add(a);this.max.add(a);return this},equals:function(a){return a.min.equals(this.min)&&a.max.equals(this.max)}});var Qk=new Ta;Object.assign(cb.prototype,{set:function(a,b){this.center.copy(a);this.radius= +b;return this},setFromPoints:function(a,b){var c=this.center;void 0!==b?c.copy(b):Qk.setFromPoints(a).getCenter(c);for(var d=b=0,e=a.length;dthis.radius},makeEmpty:function(){this.center.set(0,0,0);this.radius=-1;return this},containsPoint:function(a){return a.distanceToSquared(this.center)<= +this.radius*this.radius},distanceToPoint:function(a){return a.distanceTo(this.center)-this.radius},intersectsSphere:function(a){var b=this.radius+a.radius;return a.center.distanceToSquared(this.center)<=b*b},intersectsBox:function(a){return a.intersectsSphere(this)},intersectsPlane:function(a){return Math.abs(a.distanceToPoint(this.center))<=this.radius},clampPoint:function(a,b){var c=this.center.distanceToSquared(a);void 0===b&&(console.warn("THREE.Sphere: .clampPoint() target is now required"), +b=new n);b.copy(a);c>this.radius*this.radius&&(b.sub(this.center).normalize(),b.multiplyScalar(this.radius).add(this.center));return b},getBoundingBox:function(a){void 0===a&&(console.warn("THREE.Sphere: .getBoundingBox() target is now required"),a=new Ta);if(this.isEmpty())return a.makeEmpty(),a;a.set(this.center,this.center);a.expandByScalar(this.radius);return a},applyMatrix4:function(a){this.center.applyMatrix4(a);this.radius*=a.getMaxScaleOnAxis();return this},translate:function(a){this.center.add(a); +return this},equals:function(a){return a.center.equals(this.center)&&a.radius===this.radius}});var xb=new n,Yg=new n,Ef=new n,Qb=new n,Zg=new n,Ff=new n,$g=new n;Object.assign(Ub.prototype,{set:function(a,b){this.origin.copy(a);this.direction.copy(b);return this},clone:function(){return(new this.constructor).copy(this)},copy:function(a){this.origin.copy(a.origin);this.direction.copy(a.direction);return this},at:function(a,b){void 0===b&&(console.warn("THREE.Ray: .at() target is now required"),b=new n); +return b.copy(this.direction).multiplyScalar(a).add(this.origin)},lookAt:function(a){this.direction.copy(a).sub(this.origin).normalize();return this},recast:function(a){this.origin.copy(this.at(a,xb));return this},closestPointToPoint:function(a,b){void 0===b&&(console.warn("THREE.Ray: .closestPointToPoint() target is now required"),b=new n);b.subVectors(a,this.origin);a=b.dot(this.direction);return 0>a?b.copy(this.origin):b.copy(this.direction).multiplyScalar(a).add(this.origin)},distanceToPoint:function(a){return Math.sqrt(this.distanceSqToPoint(a))}, +distanceSqToPoint:function(a){var b=xb.subVectors(a,this.origin).dot(this.direction);if(0>b)return this.origin.distanceToSquared(a);xb.copy(this.direction).multiplyScalar(b).add(this.origin);return xb.distanceToSquared(a)},distanceSqToSegment:function(a,b,c,d){Yg.copy(a).add(b).multiplyScalar(.5);Ef.copy(b).sub(a).normalize();Qb.copy(this.origin).sub(Yg);var e=.5*a.distanceTo(b),f=-this.direction.dot(Ef),g=Qb.dot(this.direction),h=-Qb.dot(Ef),l=Qb.lengthSq(),k=Math.abs(1-f*f);if(0=-q?b<=q?(e=1/k,a*=e,b*=e,f=a*(a+f*b+2*g)+b*(f*a+b+2*h)+l):(b=e,a=Math.max(0,-(f*b+g)),f=-a*a+b*(b+2*h)+l):(b=-e,a=Math.max(0,-(f*b+g)),f=-a*a+b*(b+2*h)+l):b<=-q?(a=Math.max(0,-(-f*e+g)),b=0a)return null;a=Math.sqrt(a-d);d=c-a;c+=a;return 0>d&&0>c?null:0>d?this.at(c,b):this.at(d,b)},intersectsSphere:function(a){return this.distanceSqToPoint(a.center)<=a.radius*a.radius},distanceToPlane:function(a){var b=a.normal.dot(this.direction);if(0===b)return 0===a.distanceToPoint(this.origin)?0:null;a=-(this.origin.dot(a.normal)+ +a.constant)/b;return 0<=a?a:null},intersectPlane:function(a,b){a=this.distanceToPlane(a);return null===a?null:this.at(a,b)},intersectsPlane:function(a){var b=a.distanceToPoint(this.origin);return 0===b||0>a.normal.dot(this.direction)*b?!0:!1},intersectBox:function(a,b){var c=1/this.direction.x;var d=1/this.direction.y;var e=1/this.direction.z,f=this.origin;if(0<=c){var g=(a.min.x-f.x)*c;c*=a.max.x-f.x}else g=(a.max.x-f.x)*c,c*=a.min.x-f.x;if(0<=d){var h=(a.min.y-f.y)*d;d*=a.max.y-f.y}else h=(a.max.y- +f.y)*d,d*=a.min.y-f.y;if(g>d||h>c)return null;if(h>g||g!==g)g=h;if(da||h>c)return null;if(h>g||g!==g)g=h;if(ac?null:this.at(0<=g?g:c,b)},intersectsBox:function(a){return null!==this.intersectBox(a,xb)},intersectTriangle:function(a,b,c,d,e){Zg.subVectors(b,a);Ff.subVectors(c,a);$g.crossVectors(Zg,Ff);b=this.direction.dot($g);if(0b)d=-1,b=-b;else return null; +Qb.subVectors(this.origin,a);a=d*this.direction.dot(Ff.crossVectors(Qb,Ff));if(0>a)return null;c=d*this.direction.dot(Zg.cross(Qb));if(0>c||a+c>b)return null;a=-d*Qb.dot($g);return 0>a?null:this.at(a/b,e)},applyMatrix4:function(a){this.origin.applyMatrix4(a);this.direction.transformDirection(a);return this},equals:function(a){return a.origin.equals(this.origin)&&a.direction.equals(this.direction)}});var ah=new n,Rk=new n,Sk=new za;Object.assign(Ua.prototype,{isPlane:!0,set:function(a,b){this.normal.copy(a); +this.constant=b;return this},setComponents:function(a,b,c,d){this.normal.set(a,b,c);this.constant=d;return this},setFromNormalAndCoplanarPoint:function(a,b){this.normal.copy(a);this.constant=-b.dot(this.normal);return this},setFromCoplanarPoints:function(a,b,c){b=ah.subVectors(c,b).cross(Rk.subVectors(a,b)).normalize();this.setFromNormalAndCoplanarPoint(b,a);return this},clone:function(){return(new this.constructor).copy(this)},copy:function(a){this.normal.copy(a.normal);this.constant=a.constant; +return this},normalize:function(){var a=1/this.normal.length();this.normal.multiplyScalar(a);this.constant*=a;return this},negate:function(){this.constant*=-1;this.normal.negate();return this},distanceToPoint:function(a){return this.normal.dot(a)+this.constant},distanceToSphere:function(a){return this.distanceToPoint(a.center)-a.radius},projectPoint:function(a,b){void 0===b&&(console.warn("THREE.Plane: .projectPoint() target is now required"),b=new n);return b.copy(this.normal).multiplyScalar(-this.distanceToPoint(a)).add(a)}, +intersectLine:function(a,b){void 0===b&&(console.warn("THREE.Plane: .intersectLine() target is now required"),b=new n);var c=a.delta(ah),d=this.normal.dot(c);if(0===d){if(0===this.distanceToPoint(a.start))return b.copy(a.start)}else if(d=-(a.start.dot(this.normal)+this.constant)/d,!(0>d||1b&&0a&&0=zb.x+zb.y},getUV:function(a,b,c,d,e,f,g,h){this.getBarycoord(a,b,c,d,zb);h.set(0,0);h.addScaledVector(e,zb.x);h.addScaledVector(f,zb.y);h.addScaledVector(g,zb.z);return h},isFrontFacing:function(a, +b,c,d){ab.subVectors(c,b);yb.subVectors(a,b);return 0>ab.cross(yb).dot(d)?!0:!1}});Object.assign(ra.prototype,{set:function(a,b,c){this.a.copy(a);this.b.copy(b);this.c.copy(c);return this},setFromPointsAndIndices:function(a,b,c,d){this.a.copy(a[b]);this.b.copy(a[c]);this.c.copy(a[d]);return this},clone:function(){return(new this.constructor).copy(this)},copy:function(a){this.a.copy(a.a);this.b.copy(a.b);this.c.copy(a.c);return this},getArea:function(){ab.subVectors(this.c,this.b);yb.subVectors(this.a, +this.b);return.5*ab.cross(yb).length()},getMidpoint:function(a){void 0===a&&(console.warn("THREE.Triangle: .getMidpoint() target is now required"),a=new n);return a.addVectors(this.a,this.b).add(this.c).multiplyScalar(1/3)},getNormal:function(a){return ra.getNormal(this.a,this.b,this.c,a)},getPlane:function(a){void 0===a&&(console.warn("THREE.Triangle: .getPlane() target is now required"),a=new Ua);return a.setFromCoplanarPoints(this.a,this.b,this.c)},getBarycoord:function(a,b){return ra.getBarycoord(a, +this.a,this.b,this.c,b)},getUV:function(a,b,c,d,e){return ra.getUV(a,this.a,this.b,this.c,b,c,d,e)},containsPoint:function(a){return ra.containsPoint(a,this.a,this.b,this.c)},isFrontFacing:function(a){return ra.isFrontFacing(this.a,this.b,this.c,a)},intersectsBox:function(a){return a.intersectsTriangle(this)},closestPointToPoint:function(a,b){void 0===b&&(console.warn("THREE.Triangle: .closestPointToPoint() target is now required"),b=new n);var c=this.a,d=this.b,e=this.c;qd.subVectors(d,c);rd.subVectors(e, +c);ch.subVectors(a,c);var f=qd.dot(ch),g=rd.dot(ch);if(0>=f&&0>=g)return b.copy(c);dh.subVectors(a,d);var h=qd.dot(dh),l=rd.dot(dh);if(0<=h&&l<=h)return b.copy(d);var k=f*l-h*g;if(0>=k&&0<=f&&0>=h)return d=f/(f-h),b.copy(c).addScaledVector(qd,d);eh.subVectors(a,e);a=qd.dot(eh);var q=rd.dot(eh);if(0<=q&&a<=q)return b.copy(e);f=a*g-f*q;if(0>=f&&0<=g&&0>=q)return k=g/(g-q),b.copy(c).addScaledVector(rd,k);g=h*q-a*l;if(0>=g&&0<=l-h&&0<=a-q)return Bi.subVectors(e,d),k=(l-h)/(l-h+(a-q)),b.copy(d).addScaledVector(Bi, +k);e=1/(g+f+k);d=f*e;k*=e;return b.copy(c).addScaledVector(qd,d).addScaledVector(rd,k)},equals:function(a){return a.a.equals(this.a)&&a.b.equals(this.b)&&a.c.equals(this.c)}});var Ci={aliceblue:15792383,antiquewhite:16444375,aqua:65535,aquamarine:8388564,azure:15794175,beige:16119260,bisque:16770244,black:0,blanchedalmond:16772045,blue:255,blueviolet:9055202,brown:10824234,burlywood:14596231,cadetblue:6266528,chartreuse:8388352,chocolate:13789470,coral:16744272,cornflowerblue:6591981,cornsilk:16775388, +crimson:14423100,cyan:65535,darkblue:139,darkcyan:35723,darkgoldenrod:12092939,darkgray:11119017,darkgreen:25600,darkgrey:11119017,darkkhaki:12433259,darkmagenta:9109643,darkolivegreen:5597999,darkorange:16747520,darkorchid:10040012,darkred:9109504,darksalmon:15308410,darkseagreen:9419919,darkslateblue:4734347,darkslategray:3100495,darkslategrey:3100495,darkturquoise:52945,darkviolet:9699539,deeppink:16716947,deepskyblue:49151,dimgray:6908265,dimgrey:6908265,dodgerblue:2003199,firebrick:11674146, +floralwhite:16775920,forestgreen:2263842,fuchsia:16711935,gainsboro:14474460,ghostwhite:16316671,gold:16766720,goldenrod:14329120,gray:8421504,green:32768,greenyellow:11403055,grey:8421504,honeydew:15794160,hotpink:16738740,indianred:13458524,indigo:4915330,ivory:16777200,khaki:15787660,lavender:15132410,lavenderblush:16773365,lawngreen:8190976,lemonchiffon:16775885,lightblue:11393254,lightcoral:15761536,lightcyan:14745599,lightgoldenrodyellow:16448210,lightgray:13882323,lightgreen:9498256,lightgrey:13882323, +lightpink:16758465,lightsalmon:16752762,lightseagreen:2142890,lightskyblue:8900346,lightslategray:7833753,lightslategrey:7833753,lightsteelblue:11584734,lightyellow:16777184,lime:65280,limegreen:3329330,linen:16445670,magenta:16711935,maroon:8388608,mediumaquamarine:6737322,mediumblue:205,mediumorchid:12211667,mediumpurple:9662683,mediumseagreen:3978097,mediumslateblue:8087790,mediumspringgreen:64154,mediumturquoise:4772300,mediumvioletred:13047173,midnightblue:1644912,mintcream:16121850,mistyrose:16770273, +moccasin:16770229,navajowhite:16768685,navy:128,oldlace:16643558,olive:8421376,olivedrab:7048739,orange:16753920,orangered:16729344,orchid:14315734,palegoldenrod:15657130,palegreen:10025880,paleturquoise:11529966,palevioletred:14381203,papayawhip:16773077,peachpuff:16767673,peru:13468991,pink:16761035,plum:14524637,powderblue:11591910,purple:8388736,rebeccapurple:6697881,red:16711680,rosybrown:12357519,royalblue:4286945,saddlebrown:9127187,salmon:16416882,sandybrown:16032864,seagreen:3050327,seashell:16774638, +sienna:10506797,silver:12632256,skyblue:8900331,slateblue:6970061,slategray:7372944,slategrey:7372944,snow:16775930,springgreen:65407,steelblue:4620980,tan:13808780,teal:32896,thistle:14204888,tomato:16737095,turquoise:4251856,violet:15631086,wheat:16113331,white:16777215,whitesmoke:16119285,yellow:16776960,yellowgreen:10145074},Fa={h:0,s:0,l:0},Gf={h:0,s:0,l:0};Object.assign(E.prototype,{isColor:!0,r:1,g:1,b:1,set:function(a){a&&a.isColor?this.copy(a):"number"===typeof a?this.setHex(a):"string"=== +typeof a&&this.setStyle(a);return this},setScalar:function(a){this.b=this.g=this.r=a;return this},setHex:function(a){a=Math.floor(a);this.r=(a>>16&255)/255;this.g=(a>>8&255)/255;this.b=(a&255)/255;return this},setRGB:function(a,b,c){this.r=a;this.g=b;this.b=c;return this},setHSL:function(a,b,c){a=O.euclideanModulo(a,1);b=O.clamp(b,0,1);c=O.clamp(c,0,1);0===b?this.r=this.g=this.b=c:(b=.5>=c?c*(1+b):c+b-c*b,c=2*c-b,this.r=bg(c,b,a+1/3),this.g=bg(c,b,a),this.b=bg(c,b,a-1/3));return this},setStyle:function(a){function b(b){void 0!== +b&&1>parseFloat(b)&&console.warn("THREE.Color: Alpha component of "+a+" will be ignored.")}var c;if(c=/^((?:rgb|hsl)a?)\(\s*([^\)]*)\)/.exec(a)){var d=c[2];switch(c[1]){case "rgb":case "rgba":if(c=/^(\d+)\s*,\s*(\d+)\s*,\s*(\d+)\s*(,\s*([0-9]*\.?[0-9]+)\s*)?$/.exec(d))return this.r=Math.min(255,parseInt(c[1],10))/255,this.g=Math.min(255,parseInt(c[2],10))/255,this.b=Math.min(255,parseInt(c[3],10))/255,b(c[5]),this;if(c=/^(\d+)%\s*,\s*(\d+)%\s*,\s*(\d+)%\s*(,\s*([0-9]*\.?[0-9]+)\s*)?$/.exec(d))return this.r= +Math.min(100,parseInt(c[1],10))/100,this.g=Math.min(100,parseInt(c[2],10))/100,this.b=Math.min(100,parseInt(c[3],10))/100,b(c[5]),this;break;case "hsl":case "hsla":if(c=/^([0-9]*\.?[0-9]+)\s*,\s*(\d+)%\s*,\s*(\d+)%\s*(,\s*([0-9]*\.?[0-9]+)\s*)?$/.exec(d)){d=parseFloat(c[1])/360;var e=parseInt(c[2],10)/100,f=parseInt(c[3],10)/100;b(c[5]);return this.setHSL(d,e,f)}}}else if(c=/^#([A-Fa-f0-9]+)$/.exec(a)){c=c[1];d=c.length;if(3===d)return this.r=parseInt(c.charAt(0)+c.charAt(0),16)/255,this.g=parseInt(c.charAt(1)+ +c.charAt(1),16)/255,this.b=parseInt(c.charAt(2)+c.charAt(2),16)/255,this;if(6===d)return this.r=parseInt(c.charAt(0)+c.charAt(1),16)/255,this.g=parseInt(c.charAt(2)+c.charAt(3),16)/255,this.b=parseInt(c.charAt(4)+c.charAt(5),16)/255,this}return a&&0=h?l/(e+f):l/(2-e-f);switch(e){case b:g=(c-d)/l+(cthis.opacity&&(d.opacity= +this.opacity);!0===this.transparent&&(d.transparent=this.transparent);d.depthFunc=this.depthFunc;d.depthTest=this.depthTest;d.depthWrite=this.depthWrite;d.stencilWrite=this.stencilWrite;d.stencilWriteMask=this.stencilWriteMask;d.stencilFunc=this.stencilFunc;d.stencilRef=this.stencilRef;d.stencilFuncMask=this.stencilFuncMask;d.stencilFail=this.stencilFail;d.stencilZFail=this.stencilZFail;d.stencilZPass=this.stencilZPass;this.rotation&&0!==this.rotation&&(d.rotation=this.rotation);!0===this.polygonOffset&& +(d.polygonOffset=!0);0!==this.polygonOffsetFactor&&(d.polygonOffsetFactor=this.polygonOffsetFactor);0!==this.polygonOffsetUnits&&(d.polygonOffsetUnits=this.polygonOffsetUnits);this.linewidth&&1!==this.linewidth&&(d.linewidth=this.linewidth);void 0!==this.dashSize&&(d.dashSize=this.dashSize);void 0!==this.gapSize&&(d.gapSize=this.gapSize);void 0!==this.scale&&(d.scale=this.scale);!0===this.dithering&&(d.dithering=!0);0g;g++)if(f[g]===f[(g+1)%3]){a.push(d);break}for(c=a.length-1;0<=c;c--)for(d=a[c],this.faces.splice(d,1),e=0,f=this.faceVertexUvs.length;e\n\t#include \n}", +fragmentShader:"uniform sampler2D tEquirect;\nvarying vec3 vWorldDirection;\n#include \nvoid main() {\n\tvec3 direction = normalize( vWorldDirection );\n\tvec2 sampleUV = equirectUv( direction );\n\tgl_FragColor = texture2D( tEquirect, sampleUV );\n}",side:1,blending:0});d.uniforms.tEquirect.value=b;b=new Z(new Gd(5,5,5),d);c.add(b);(new Ec(1,10,this)).update(a,c);b.geometry.dispose();b.material.dispose();return this};Yb.prototype=Object.create(W.prototype);Yb.prototype.constructor=Yb;Yb.prototype.isDataTexture= +!0;var td=new cb,Jf=new n;Object.assign(Fc.prototype,{set:function(a,b,c,d,e,f){var g=this.planes;g[0].copy(a);g[1].copy(b);g[2].copy(c);g[3].copy(d);g[4].copy(e);g[5].copy(f);return this},clone:function(){return(new this.constructor).copy(this)},copy:function(a){for(var b=this.planes,c=0;6>c;c++)b[c].copy(a.planes[c]);return this},setFromProjectionMatrix:function(a){var b=this.planes,c=a.elements;a=c[0];var d=c[1],e=c[2],f=c[3],g=c[4],h=c[5],l=c[6],k=c[7],q=c[8],p=c[9],n=c[10],r=c[11],t=c[12],v= +c[13],u=c[14];c=c[15];b[0].setComponents(f-a,k-g,r-q,c-t).normalize();b[1].setComponents(f+a,k+g,r+q,c+t).normalize();b[2].setComponents(f+d,k+h,r+p,c+v).normalize();b[3].setComponents(f-d,k-h,r-p,c-v).normalize();b[4].setComponents(f-e,k-l,r-n,c-u).normalize();b[5].setComponents(f+e,k+l,r+n,c+u).normalize();return this},intersectsObject:function(a){var b=a.geometry;null===b.boundingSphere&&b.computeBoundingSphere();td.copy(b.boundingSphere).applyMatrix4(a.matrixWorld);return this.intersectsSphere(td)}, +intersectsSprite:function(a){td.center.set(0,0,0);td.radius=.7071067811865476;td.applyMatrix4(a.matrixWorld);return this.intersectsSphere(td)},intersectsSphere:function(a){var b=this.planes,c=a.center;a=-a.radius;for(var d=0;6>d;d++)if(b[d].distanceToPoint(c)c;c++){var d=b[c];Jf.x=0d.distanceToPoint(Jf))return!1}return!0}, +containsPoint:function(a){for(var b=this.planes,c=0;6>c;c++)if(0>b[c].distanceToPoint(a))return!1;return!0}});var D={common:{diffuse:{value:new E(15658734)},opacity:{value:1},map:{value:null},uvTransform:{value:new za},uv2Transform:{value:new za},alphaMap:{value:null}},specularmap:{specularMap:{value:null}},envmap:{envMap:{value:null},flipEnvMap:{value:-1},reflectivity:{value:1},refractionRatio:{value:.98},maxMipLevel:{value:0}},aomap:{aoMap:{value:null},aoMapIntensity:{value:1}},lightmap:{lightMap:{value:null}, +lightMapIntensity:{value:1}},emissivemap:{emissiveMap:{value:null}},bumpmap:{bumpMap:{value:null},bumpScale:{value:1}},normalmap:{normalMap:{value:null},normalScale:{value:new u(1,1)}},displacementmap:{displacementMap:{value:null},displacementScale:{value:1},displacementBias:{value:0}},roughnessmap:{roughnessMap:{value:null}},metalnessmap:{metalnessMap:{value:null}},gradientmap:{gradientMap:{value:null}},fog:{fogDensity:{value:2.5E-4},fogNear:{value:1},fogFar:{value:2E3},fogColor:{value:new E(16777215)}}, +lights:{ambientLightColor:{value:[]},lightProbe:{value:[]},directionalLights:{value:[],properties:{direction:{},color:{}}},directionalLightShadows:{value:[],properties:{shadowBias:{},shadowNormalBias:{},shadowRadius:{},shadowMapSize:{}}},directionalShadowMap:{value:[]},directionalShadowMatrix:{value:[]},spotLights:{value:[],properties:{color:{},position:{},direction:{},distance:{},coneCos:{},penumbraCos:{},decay:{}}},spotLightShadows:{value:[],properties:{shadowBias:{},shadowNormalBias:{},shadowRadius:{}, +shadowMapSize:{}}},spotShadowMap:{value:[]},spotShadowMatrix:{value:[]},pointLights:{value:[],properties:{color:{},position:{},decay:{},distance:{}}},pointLightShadows:{value:[],properties:{shadowBias:{},shadowNormalBias:{},shadowRadius:{},shadowMapSize:{},shadowCameraNear:{},shadowCameraFar:{}}},pointShadowMap:{value:[]},pointShadowMatrix:{value:[]},hemisphereLights:{value:[],properties:{direction:{},skyColor:{},groundColor:{}}},rectAreaLights:{value:[],properties:{color:{},position:{},width:{}, +height:{}}}},points:{diffuse:{value:new E(15658734)},opacity:{value:1},size:{value:1},scale:{value:1},map:{value:null},alphaMap:{value:null},uvTransform:{value:new za}},sprite:{diffuse:{value:new E(15658734)},opacity:{value:1},center:{value:new u(.5,.5)},rotation:{value:0},map:{value:null},alphaMap:{value:null},uvTransform:{value:new za}}};Fd.prototype=Object.create(I.prototype);Fd.prototype.constructor=Fd;Zb.prototype=Object.create(H.prototype);Zb.prototype.constructor=Zb;var M={alphamap_fragment:"#ifdef USE_ALPHAMAP\n\tdiffuseColor.a *= texture2D( alphaMap, vUv ).g;\n#endif", +alphamap_pars_fragment:"#ifdef USE_ALPHAMAP\n\tuniform sampler2D alphaMap;\n#endif",alphatest_fragment:"#ifdef ALPHATEST\n\tif ( diffuseColor.a < ALPHATEST ) discard;\n#endif",aomap_fragment:"#ifdef USE_AOMAP\n\tfloat ambientOcclusion = ( texture2D( aoMap, vUv2 ).r - 1.0 ) * aoMapIntensity + 1.0;\n\treflectedLight.indirectDiffuse *= ambientOcclusion;\n\t#if defined( USE_ENVMAP ) && defined( STANDARD )\n\t\tfloat dotNV = saturate( dot( geometry.normal, geometry.viewDir ) );\n\t\treflectedLight.indirectSpecular *= computeSpecularOcclusion( dotNV, ambientOcclusion, material.specularRoughness );\n\t#endif\n#endif", +aomap_pars_fragment:"#ifdef USE_AOMAP\n\tuniform sampler2D aoMap;\n\tuniform float aoMapIntensity;\n#endif",begin_vertex:"vec3 transformed = vec3( position );",beginnormal_vertex:"vec3 objectNormal = vec3( normal );\n#ifdef USE_TANGENT\n\tvec3 objectTangent = vec3( tangent.xyz );\n#endif",bsdfs:"vec2 integrateSpecularBRDF( const in float dotNV, const in float roughness ) {\n\tconst vec4 c0 = vec4( - 1, - 0.0275, - 0.572, 0.022 );\n\tconst vec4 c1 = vec4( 1, 0.0425, 1.04, - 0.04 );\n\tvec4 r = roughness * c0 + c1;\n\tfloat a004 = min( r.x * r.x, exp2( - 9.28 * dotNV ) ) * r.x + r.y;\n\treturn vec2( -1.04, 1.04 ) * a004 + r.zw;\n}\nfloat punctualLightIntensityToIrradianceFactor( const in float lightDistance, const in float cutoffDistance, const in float decayExponent ) {\n#if defined ( PHYSICALLY_CORRECT_LIGHTS )\n\tfloat distanceFalloff = 1.0 / max( pow( lightDistance, decayExponent ), 0.01 );\n\tif( cutoffDistance > 0.0 ) {\n\t\tdistanceFalloff *= pow2( saturate( 1.0 - pow4( lightDistance / cutoffDistance ) ) );\n\t}\n\treturn distanceFalloff;\n#else\n\tif( cutoffDistance > 0.0 && decayExponent > 0.0 ) {\n\t\treturn pow( saturate( -lightDistance / cutoffDistance + 1.0 ), decayExponent );\n\t}\n\treturn 1.0;\n#endif\n}\nvec3 BRDF_Diffuse_Lambert( const in vec3 diffuseColor ) {\n\treturn RECIPROCAL_PI * diffuseColor;\n}\nvec3 F_Schlick( const in vec3 specularColor, const in float dotLH ) {\n\tfloat fresnel = exp2( ( -5.55473 * dotLH - 6.98316 ) * dotLH );\n\treturn ( 1.0 - specularColor ) * fresnel + specularColor;\n}\nvec3 F_Schlick_RoughnessDependent( const in vec3 F0, const in float dotNV, const in float roughness ) {\n\tfloat fresnel = exp2( ( -5.55473 * dotNV - 6.98316 ) * dotNV );\n\tvec3 Fr = max( vec3( 1.0 - roughness ), F0 ) - F0;\n\treturn Fr * fresnel + F0;\n}\nfloat G_GGX_Smith( const in float alpha, const in float dotNL, const in float dotNV ) {\n\tfloat a2 = pow2( alpha );\n\tfloat gl = dotNL + sqrt( a2 + ( 1.0 - a2 ) * pow2( dotNL ) );\n\tfloat gv = dotNV + sqrt( a2 + ( 1.0 - a2 ) * pow2( dotNV ) );\n\treturn 1.0 / ( gl * gv );\n}\nfloat G_GGX_SmithCorrelated( const in float alpha, const in float dotNL, const in float dotNV ) {\n\tfloat a2 = pow2( alpha );\n\tfloat gv = dotNL * sqrt( a2 + ( 1.0 - a2 ) * pow2( dotNV ) );\n\tfloat gl = dotNV * sqrt( a2 + ( 1.0 - a2 ) * pow2( dotNL ) );\n\treturn 0.5 / max( gv + gl, EPSILON );\n}\nfloat D_GGX( const in float alpha, const in float dotNH ) {\n\tfloat a2 = pow2( alpha );\n\tfloat denom = pow2( dotNH ) * ( a2 - 1.0 ) + 1.0;\n\treturn RECIPROCAL_PI * a2 / pow2( denom );\n}\nvec3 BRDF_Specular_GGX( const in IncidentLight incidentLight, const in vec3 viewDir, const in vec3 normal, const in vec3 specularColor, const in float roughness ) {\n\tfloat alpha = pow2( roughness );\n\tvec3 halfDir = normalize( incidentLight.direction + viewDir );\n\tfloat dotNL = saturate( dot( normal, incidentLight.direction ) );\n\tfloat dotNV = saturate( dot( normal, viewDir ) );\n\tfloat dotNH = saturate( dot( normal, halfDir ) );\n\tfloat dotLH = saturate( dot( incidentLight.direction, halfDir ) );\n\tvec3 F = F_Schlick( specularColor, dotLH );\n\tfloat G = G_GGX_SmithCorrelated( alpha, dotNL, dotNV );\n\tfloat D = D_GGX( alpha, dotNH );\n\treturn F * ( G * D );\n}\nvec2 LTC_Uv( const in vec3 N, const in vec3 V, const in float roughness ) {\n\tconst float LUT_SIZE = 64.0;\n\tconst float LUT_SCALE = ( LUT_SIZE - 1.0 ) / LUT_SIZE;\n\tconst float LUT_BIAS = 0.5 / LUT_SIZE;\n\tfloat dotNV = saturate( dot( N, V ) );\n\tvec2 uv = vec2( roughness, sqrt( 1.0 - dotNV ) );\n\tuv = uv * LUT_SCALE + LUT_BIAS;\n\treturn uv;\n}\nfloat LTC_ClippedSphereFormFactor( const in vec3 f ) {\n\tfloat l = length( f );\n\treturn max( ( l * l + f.z ) / ( l + 1.0 ), 0.0 );\n}\nvec3 LTC_EdgeVectorFormFactor( const in vec3 v1, const in vec3 v2 ) {\n\tfloat x = dot( v1, v2 );\n\tfloat y = abs( x );\n\tfloat a = 0.8543985 + ( 0.4965155 + 0.0145206 * y ) * y;\n\tfloat b = 3.4175940 + ( 4.1616724 + y ) * y;\n\tfloat v = a / b;\n\tfloat theta_sintheta = ( x > 0.0 ) ? v : 0.5 * inversesqrt( max( 1.0 - x * x, 1e-7 ) ) - v;\n\treturn cross( v1, v2 ) * theta_sintheta;\n}\nvec3 LTC_Evaluate( const in vec3 N, const in vec3 V, const in vec3 P, const in mat3 mInv, const in vec3 rectCoords[ 4 ] ) {\n\tvec3 v1 = rectCoords[ 1 ] - rectCoords[ 0 ];\n\tvec3 v2 = rectCoords[ 3 ] - rectCoords[ 0 ];\n\tvec3 lightNormal = cross( v1, v2 );\n\tif( dot( lightNormal, P - rectCoords[ 0 ] ) < 0.0 ) return vec3( 0.0 );\n\tvec3 T1, T2;\n\tT1 = normalize( V - N * dot( V, N ) );\n\tT2 = - cross( N, T1 );\n\tmat3 mat = mInv * transposeMat3( mat3( T1, T2, N ) );\n\tvec3 coords[ 4 ];\n\tcoords[ 0 ] = mat * ( rectCoords[ 0 ] - P );\n\tcoords[ 1 ] = mat * ( rectCoords[ 1 ] - P );\n\tcoords[ 2 ] = mat * ( rectCoords[ 2 ] - P );\n\tcoords[ 3 ] = mat * ( rectCoords[ 3 ] - P );\n\tcoords[ 0 ] = normalize( coords[ 0 ] );\n\tcoords[ 1 ] = normalize( coords[ 1 ] );\n\tcoords[ 2 ] = normalize( coords[ 2 ] );\n\tcoords[ 3 ] = normalize( coords[ 3 ] );\n\tvec3 vectorFormFactor = vec3( 0.0 );\n\tvectorFormFactor += LTC_EdgeVectorFormFactor( coords[ 0 ], coords[ 1 ] );\n\tvectorFormFactor += LTC_EdgeVectorFormFactor( coords[ 1 ], coords[ 2 ] );\n\tvectorFormFactor += LTC_EdgeVectorFormFactor( coords[ 2 ], coords[ 3 ] );\n\tvectorFormFactor += LTC_EdgeVectorFormFactor( coords[ 3 ], coords[ 0 ] );\n\tfloat result = LTC_ClippedSphereFormFactor( vectorFormFactor );\n\treturn vec3( result );\n}\nvec3 BRDF_Specular_GGX_Environment( const in vec3 viewDir, const in vec3 normal, const in vec3 specularColor, const in float roughness ) {\n\tfloat dotNV = saturate( dot( normal, viewDir ) );\n\tvec2 brdf = integrateSpecularBRDF( dotNV, roughness );\n\treturn specularColor * brdf.x + brdf.y;\n}\nvoid BRDF_Specular_Multiscattering_Environment( const in GeometricContext geometry, const in vec3 specularColor, const in float roughness, inout vec3 singleScatter, inout vec3 multiScatter ) {\n\tfloat dotNV = saturate( dot( geometry.normal, geometry.viewDir ) );\n\tvec3 F = F_Schlick_RoughnessDependent( specularColor, dotNV, roughness );\n\tvec2 brdf = integrateSpecularBRDF( dotNV, roughness );\n\tvec3 FssEss = F * brdf.x + brdf.y;\n\tfloat Ess = brdf.x + brdf.y;\n\tfloat Ems = 1.0 - Ess;\n\tvec3 Favg = specularColor + ( 1.0 - specularColor ) * 0.047619;\tvec3 Fms = FssEss * Favg / ( 1.0 - Ems * Favg );\n\tsingleScatter += FssEss;\n\tmultiScatter += Fms * Ems;\n}\nfloat G_BlinnPhong_Implicit( ) {\n\treturn 0.25;\n}\nfloat D_BlinnPhong( const in float shininess, const in float dotNH ) {\n\treturn RECIPROCAL_PI * ( shininess * 0.5 + 1.0 ) * pow( dotNH, shininess );\n}\nvec3 BRDF_Specular_BlinnPhong( const in IncidentLight incidentLight, const in GeometricContext geometry, const in vec3 specularColor, const in float shininess ) {\n\tvec3 halfDir = normalize( incidentLight.direction + geometry.viewDir );\n\tfloat dotNH = saturate( dot( geometry.normal, halfDir ) );\n\tfloat dotLH = saturate( dot( incidentLight.direction, halfDir ) );\n\tvec3 F = F_Schlick( specularColor, dotLH );\n\tfloat G = G_BlinnPhong_Implicit( );\n\tfloat D = D_BlinnPhong( shininess, dotNH );\n\treturn F * ( G * D );\n}\nfloat GGXRoughnessToBlinnExponent( const in float ggxRoughness ) {\n\treturn ( 2.0 / pow2( ggxRoughness + 0.0001 ) - 2.0 );\n}\nfloat BlinnExponentToGGXRoughness( const in float blinnExponent ) {\n\treturn sqrt( 2.0 / ( blinnExponent + 2.0 ) );\n}\n#if defined( USE_SHEEN )\nfloat D_Charlie(float roughness, float NoH) {\n\tfloat invAlpha = 1.0 / roughness;\n\tfloat cos2h = NoH * NoH;\n\tfloat sin2h = max(1.0 - cos2h, 0.0078125);\treturn (2.0 + invAlpha) * pow(sin2h, invAlpha * 0.5) / (2.0 * PI);\n}\nfloat V_Neubelt(float NoV, float NoL) {\n\treturn saturate(1.0 / (4.0 * (NoL + NoV - NoL * NoV)));\n}\nvec3 BRDF_Specular_Sheen( const in float roughness, const in vec3 L, const in GeometricContext geometry, vec3 specularColor ) {\n\tvec3 N = geometry.normal;\n\tvec3 V = geometry.viewDir;\n\tvec3 H = normalize( V + L );\n\tfloat dotNH = saturate( dot( N, H ) );\n\treturn specularColor * D_Charlie( roughness, dotNH ) * V_Neubelt( dot(N, V), dot(N, L) );\n}\n#endif", +bumpmap_pars_fragment:"#ifdef USE_BUMPMAP\n\tuniform sampler2D bumpMap;\n\tuniform float bumpScale;\n\tvec2 dHdxy_fwd() {\n\t\tvec2 dSTdx = dFdx( vUv );\n\t\tvec2 dSTdy = dFdy( vUv );\n\t\tfloat Hll = bumpScale * texture2D( bumpMap, vUv ).x;\n\t\tfloat dBx = bumpScale * texture2D( bumpMap, vUv + dSTdx ).x - Hll;\n\t\tfloat dBy = bumpScale * texture2D( bumpMap, vUv + dSTdy ).x - Hll;\n\t\treturn vec2( dBx, dBy );\n\t}\n\tvec3 perturbNormalArb( vec3 surf_pos, vec3 surf_norm, vec2 dHdxy ) {\n\t\tvec3 vSigmaX = vec3( dFdx( surf_pos.x ), dFdx( surf_pos.y ), dFdx( surf_pos.z ) );\n\t\tvec3 vSigmaY = vec3( dFdy( surf_pos.x ), dFdy( surf_pos.y ), dFdy( surf_pos.z ) );\n\t\tvec3 vN = surf_norm;\n\t\tvec3 R1 = cross( vSigmaY, vN );\n\t\tvec3 R2 = cross( vN, vSigmaX );\n\t\tfloat fDet = dot( vSigmaX, R1 );\n\t\tfDet *= ( float( gl_FrontFacing ) * 2.0 - 1.0 );\n\t\tvec3 vGrad = sign( fDet ) * ( dHdxy.x * R1 + dHdxy.y * R2 );\n\t\treturn normalize( abs( fDet ) * surf_norm - vGrad );\n\t}\n#endif", +clipping_planes_fragment:"#if NUM_CLIPPING_PLANES > 0\n\tvec4 plane;\n\t#pragma unroll_loop_start\n\tfor ( int i = 0; i < UNION_CLIPPING_PLANES; i ++ ) {\n\t\tplane = clippingPlanes[ i ];\n\t\tif ( dot( vClipPosition, plane.xyz ) > plane.w ) discard;\n\t}\n\t#pragma unroll_loop_end\n\t#if UNION_CLIPPING_PLANES < NUM_CLIPPING_PLANES\n\t\tbool clipped = true;\n\t\t#pragma unroll_loop_start\n\t\tfor ( int i = UNION_CLIPPING_PLANES; i < NUM_CLIPPING_PLANES; i ++ ) {\n\t\t\tplane = clippingPlanes[ i ];\n\t\t\tclipped = ( dot( vClipPosition, plane.xyz ) > plane.w ) && clipped;\n\t\t}\n\t\t#pragma unroll_loop_end\n\t\tif ( clipped ) discard;\n\t#endif\n#endif", +clipping_planes_pars_fragment:"#if NUM_CLIPPING_PLANES > 0\n\tvarying vec3 vClipPosition;\n\tuniform vec4 clippingPlanes[ NUM_CLIPPING_PLANES ];\n#endif",clipping_planes_pars_vertex:"#if NUM_CLIPPING_PLANES > 0\n\tvarying vec3 vClipPosition;\n#endif",clipping_planes_vertex:"#if NUM_CLIPPING_PLANES > 0\n\tvClipPosition = - mvPosition.xyz;\n#endif",color_fragment:"#ifdef USE_COLOR\n\tdiffuseColor.rgb *= vColor;\n#endif",color_pars_fragment:"#ifdef USE_COLOR\n\tvarying vec3 vColor;\n#endif",color_pars_vertex:"#ifdef USE_COLOR\n\tvarying vec3 vColor;\n#endif", +color_vertex:"#ifdef USE_COLOR\n\tvColor.xyz = color.xyz;\n#endif",common:"#define PI 3.141592653589793\n#define PI2 6.283185307179586\n#define PI_HALF 1.5707963267948966\n#define RECIPROCAL_PI 0.3183098861837907\n#define RECIPROCAL_PI2 0.15915494309189535\n#define EPSILON 1e-6\n#ifndef saturate\n#define saturate(a) clamp( a, 0.0, 1.0 )\n#endif\n#define whiteComplement(a) ( 1.0 - saturate( a ) )\nfloat pow2( const in float x ) { return x*x; }\nfloat pow3( const in float x ) { return x*x*x; }\nfloat pow4( const in float x ) { float x2 = x*x; return x2*x2; }\nfloat average( const in vec3 color ) { return dot( color, vec3( 0.3333 ) ); }\nhighp float rand( const in vec2 uv ) {\n\tconst highp float a = 12.9898, b = 78.233, c = 43758.5453;\n\thighp float dt = dot( uv.xy, vec2( a,b ) ), sn = mod( dt, PI );\n\treturn fract(sin(sn) * c);\n}\n#ifdef HIGH_PRECISION\n\tfloat precisionSafeLength( vec3 v ) { return length( v ); }\n#else\n\tfloat max3( vec3 v ) { return max( max( v.x, v.y ), v.z ); }\n\tfloat precisionSafeLength( vec3 v ) {\n\t\tfloat maxComponent = max3( abs( v ) );\n\t\treturn length( v / maxComponent ) * maxComponent;\n\t}\n#endif\nstruct IncidentLight {\n\tvec3 color;\n\tvec3 direction;\n\tbool visible;\n};\nstruct ReflectedLight {\n\tvec3 directDiffuse;\n\tvec3 directSpecular;\n\tvec3 indirectDiffuse;\n\tvec3 indirectSpecular;\n};\nstruct GeometricContext {\n\tvec3 position;\n\tvec3 normal;\n\tvec3 viewDir;\n#ifdef CLEARCOAT\n\tvec3 clearcoatNormal;\n#endif\n};\nvec3 transformDirection( in vec3 dir, in mat4 matrix ) {\n\treturn normalize( ( matrix * vec4( dir, 0.0 ) ).xyz );\n}\nvec3 inverseTransformDirection( in vec3 dir, in mat4 matrix ) {\n\treturn normalize( ( vec4( dir, 0.0 ) * matrix ).xyz );\n}\nvec3 projectOnPlane(in vec3 point, in vec3 pointOnPlane, in vec3 planeNormal ) {\n\tfloat distance = dot( planeNormal, point - pointOnPlane );\n\treturn - distance * planeNormal + point;\n}\nfloat sideOfPlane( in vec3 point, in vec3 pointOnPlane, in vec3 planeNormal ) {\n\treturn sign( dot( point - pointOnPlane, planeNormal ) );\n}\nvec3 linePlaneIntersect( in vec3 pointOnLine, in vec3 lineDirection, in vec3 pointOnPlane, in vec3 planeNormal ) {\n\treturn lineDirection * ( dot( planeNormal, pointOnPlane - pointOnLine ) / dot( planeNormal, lineDirection ) ) + pointOnLine;\n}\nmat3 transposeMat3( const in mat3 m ) {\n\tmat3 tmp;\n\ttmp[ 0 ] = vec3( m[ 0 ].x, m[ 1 ].x, m[ 2 ].x );\n\ttmp[ 1 ] = vec3( m[ 0 ].y, m[ 1 ].y, m[ 2 ].y );\n\ttmp[ 2 ] = vec3( m[ 0 ].z, m[ 1 ].z, m[ 2 ].z );\n\treturn tmp;\n}\nfloat linearToRelativeLuminance( const in vec3 color ) {\n\tvec3 weights = vec3( 0.2126, 0.7152, 0.0722 );\n\treturn dot( weights, color.rgb );\n}\nbool isPerspectiveMatrix( mat4 m ) {\n return m[ 2 ][ 3 ] == - 1.0;\n}\nvec2 equirectUv( in vec3 dir ) {\n\tfloat u = atan( dir.z, dir.x ) * RECIPROCAL_PI2 + 0.5;\n\tfloat v = asin( clamp( dir.y, - 1.0, 1.0 ) ) * RECIPROCAL_PI + 0.5;\n\treturn vec2( u, v );\n}", +cube_uv_reflection_fragment:"#ifdef ENVMAP_TYPE_CUBE_UV\n#define cubeUV_maxMipLevel 8.0\n#define cubeUV_minMipLevel 4.0\n#define cubeUV_maxTileSize 256.0\n#define cubeUV_minTileSize 16.0\nfloat getFace(vec3 direction) {\n vec3 absDirection = abs(direction);\n float face = -1.0;\n if (absDirection.x > absDirection.z) {\n if (absDirection.x > absDirection.y)\n face = direction.x > 0.0 ? 0.0 : 3.0;\n else\n face = direction.y > 0.0 ? 1.0 : 4.0;\n } else {\n if (absDirection.z > absDirection.y)\n face = direction.z > 0.0 ? 2.0 : 5.0;\n else\n face = direction.y > 0.0 ? 1.0 : 4.0;\n }\n return face;\n}\nvec2 getUV(vec3 direction, float face) {\n vec2 uv;\n if (face == 0.0) {\n uv = vec2(direction.z, direction.y) / abs(direction.x); } else if (face == 1.0) {\n uv = vec2(-direction.x, -direction.z) / abs(direction.y); } else if (face == 2.0) {\n uv = vec2(-direction.x, direction.y) / abs(direction.z); } else if (face == 3.0) {\n uv = vec2(-direction.z, direction.y) / abs(direction.x); } else if (face == 4.0) {\n uv = vec2(-direction.x, direction.z) / abs(direction.y); } else {\n uv = vec2(direction.x, direction.y) / abs(direction.z); }\n return 0.5 * (uv + 1.0);\n}\nvec3 bilinearCubeUV(sampler2D envMap, vec3 direction, float mipInt) {\n float face = getFace(direction);\n float filterInt = max(cubeUV_minMipLevel - mipInt, 0.0);\n mipInt = max(mipInt, cubeUV_minMipLevel);\n float faceSize = exp2(mipInt);\n float texelSize = 1.0 / (3.0 * cubeUV_maxTileSize);\n vec2 uv = getUV(direction, face) * (faceSize - 1.0);\n vec2 f = fract(uv);\n uv += 0.5 - f;\n if (face > 2.0) {\n uv.y += faceSize;\n face -= 3.0;\n }\n uv.x += face * faceSize;\n if(mipInt < cubeUV_maxMipLevel){\n uv.y += 2.0 * cubeUV_maxTileSize;\n }\n uv.y += filterInt * 2.0 * cubeUV_minTileSize;\n uv.x += 3.0 * max(0.0, cubeUV_maxTileSize - 2.0 * faceSize);\n uv *= texelSize;\n vec3 tl = envMapTexelToLinear(texture2D(envMap, uv)).rgb;\n uv.x += texelSize;\n vec3 tr = envMapTexelToLinear(texture2D(envMap, uv)).rgb;\n uv.y += texelSize;\n vec3 br = envMapTexelToLinear(texture2D(envMap, uv)).rgb;\n uv.x -= texelSize;\n vec3 bl = envMapTexelToLinear(texture2D(envMap, uv)).rgb;\n vec3 tm = mix(tl, tr, f.x);\n vec3 bm = mix(bl, br, f.x);\n return mix(tm, bm, f.y);\n}\n#define r0 1.0\n#define v0 0.339\n#define m0 -2.0\n#define r1 0.8\n#define v1 0.276\n#define m1 -1.0\n#define r4 0.4\n#define v4 0.046\n#define m4 2.0\n#define r5 0.305\n#define v5 0.016\n#define m5 3.0\n#define r6 0.21\n#define v6 0.0038\n#define m6 4.0\nfloat roughnessToMip(float roughness) {\n float mip = 0.0;\n if (roughness >= r1) {\n mip = (r0 - roughness) * (m1 - m0) / (r0 - r1) + m0;\n } else if (roughness >= r4) {\n mip = (r1 - roughness) * (m4 - m1) / (r1 - r4) + m1;\n } else if (roughness >= r5) {\n mip = (r4 - roughness) * (m5 - m4) / (r4 - r5) + m4;\n } else if (roughness >= r6) {\n mip = (r5 - roughness) * (m6 - m5) / (r5 - r6) + m5;\n } else {\n mip = -2.0 * log2(1.16 * roughness); }\n return mip;\n}\nvec4 textureCubeUV(sampler2D envMap, vec3 sampleDir, float roughness) {\n float mip = clamp(roughnessToMip(roughness), m0, cubeUV_maxMipLevel);\n float mipF = fract(mip);\n float mipInt = floor(mip);\n vec3 color0 = bilinearCubeUV(envMap, sampleDir, mipInt);\n if (mipF == 0.0) {\n return vec4(color0, 1.0);\n } else {\n vec3 color1 = bilinearCubeUV(envMap, sampleDir, mipInt + 1.0);\n return vec4(mix(color0, color1, mipF), 1.0);\n }\n}\n#endif", +defaultnormal_vertex:"vec3 transformedNormal = objectNormal;\n#ifdef USE_INSTANCING\n\tmat3 m = mat3( instanceMatrix );\n\ttransformedNormal /= vec3( dot( m[ 0 ], m[ 0 ] ), dot( m[ 1 ], m[ 1 ] ), dot( m[ 2 ], m[ 2 ] ) );\n\ttransformedNormal = m * transformedNormal;\n#endif\ntransformedNormal = normalMatrix * transformedNormal;\n#ifdef FLIP_SIDED\n\ttransformedNormal = - transformedNormal;\n#endif\n#ifdef USE_TANGENT\n\tvec3 transformedTangent = ( modelViewMatrix * vec4( objectTangent, 0.0 ) ).xyz;\n\t#ifdef FLIP_SIDED\n\t\ttransformedTangent = - transformedTangent;\n\t#endif\n#endif", +displacementmap_pars_vertex:"#ifdef USE_DISPLACEMENTMAP\n\tuniform sampler2D displacementMap;\n\tuniform float displacementScale;\n\tuniform float displacementBias;\n#endif",displacementmap_vertex:"#ifdef USE_DISPLACEMENTMAP\n\ttransformed += normalize( objectNormal ) * ( texture2D( displacementMap, vUv ).x * displacementScale + displacementBias );\n#endif",emissivemap_fragment:"#ifdef USE_EMISSIVEMAP\n\tvec4 emissiveColor = texture2D( emissiveMap, vUv );\n\temissiveColor.rgb = emissiveMapTexelToLinear( emissiveColor ).rgb;\n\ttotalEmissiveRadiance *= emissiveColor.rgb;\n#endif", +emissivemap_pars_fragment:"#ifdef USE_EMISSIVEMAP\n\tuniform sampler2D emissiveMap;\n#endif",encodings_fragment:"gl_FragColor = linearToOutputTexel( gl_FragColor );",encodings_pars_fragment:"\nvec4 LinearToLinear( in vec4 value ) {\n\treturn value;\n}\nvec4 GammaToLinear( in vec4 value, in float gammaFactor ) {\n\treturn vec4( pow( value.rgb, vec3( gammaFactor ) ), value.a );\n}\nvec4 LinearToGamma( in vec4 value, in float gammaFactor ) {\n\treturn vec4( pow( value.rgb, vec3( 1.0 / gammaFactor ) ), value.a );\n}\nvec4 sRGBToLinear( in vec4 value ) {\n\treturn vec4( mix( pow( value.rgb * 0.9478672986 + vec3( 0.0521327014 ), vec3( 2.4 ) ), value.rgb * 0.0773993808, vec3( lessThanEqual( value.rgb, vec3( 0.04045 ) ) ) ), value.a );\n}\nvec4 LinearTosRGB( in vec4 value ) {\n\treturn vec4( mix( pow( value.rgb, vec3( 0.41666 ) ) * 1.055 - vec3( 0.055 ), value.rgb * 12.92, vec3( lessThanEqual( value.rgb, vec3( 0.0031308 ) ) ) ), value.a );\n}\nvec4 RGBEToLinear( in vec4 value ) {\n\treturn vec4( value.rgb * exp2( value.a * 255.0 - 128.0 ), 1.0 );\n}\nvec4 LinearToRGBE( in vec4 value ) {\n\tfloat maxComponent = max( max( value.r, value.g ), value.b );\n\tfloat fExp = clamp( ceil( log2( maxComponent ) ), -128.0, 127.0 );\n\treturn vec4( value.rgb / exp2( fExp ), ( fExp + 128.0 ) / 255.0 );\n}\nvec4 RGBMToLinear( in vec4 value, in float maxRange ) {\n\treturn vec4( value.rgb * value.a * maxRange, 1.0 );\n}\nvec4 LinearToRGBM( in vec4 value, in float maxRange ) {\n\tfloat maxRGB = max( value.r, max( value.g, value.b ) );\n\tfloat M = clamp( maxRGB / maxRange, 0.0, 1.0 );\n\tM = ceil( M * 255.0 ) / 255.0;\n\treturn vec4( value.rgb / ( M * maxRange ), M );\n}\nvec4 RGBDToLinear( in vec4 value, in float maxRange ) {\n\treturn vec4( value.rgb * ( ( maxRange / 255.0 ) / value.a ), 1.0 );\n}\nvec4 LinearToRGBD( in vec4 value, in float maxRange ) {\n\tfloat maxRGB = max( value.r, max( value.g, value.b ) );\n\tfloat D = max( maxRange / maxRGB, 1.0 );\n\tD = clamp( floor( D ) / 255.0, 0.0, 1.0 );\n\treturn vec4( value.rgb * ( D * ( 255.0 / maxRange ) ), D );\n}\nconst mat3 cLogLuvM = mat3( 0.2209, 0.3390, 0.4184, 0.1138, 0.6780, 0.7319, 0.0102, 0.1130, 0.2969 );\nvec4 LinearToLogLuv( in vec4 value ) {\n\tvec3 Xp_Y_XYZp = cLogLuvM * value.rgb;\n\tXp_Y_XYZp = max( Xp_Y_XYZp, vec3( 1e-6, 1e-6, 1e-6 ) );\n\tvec4 vResult;\n\tvResult.xy = Xp_Y_XYZp.xy / Xp_Y_XYZp.z;\n\tfloat Le = 2.0 * log2(Xp_Y_XYZp.y) + 127.0;\n\tvResult.w = fract( Le );\n\tvResult.z = ( Le - ( floor( vResult.w * 255.0 ) ) / 255.0 ) / 255.0;\n\treturn vResult;\n}\nconst mat3 cLogLuvInverseM = mat3( 6.0014, -2.7008, -1.7996, -1.3320, 3.1029, -5.7721, 0.3008, -1.0882, 5.6268 );\nvec4 LogLuvToLinear( in vec4 value ) {\n\tfloat Le = value.z * 255.0 + value.w;\n\tvec3 Xp_Y_XYZp;\n\tXp_Y_XYZp.y = exp2( ( Le - 127.0 ) / 2.0 );\n\tXp_Y_XYZp.z = Xp_Y_XYZp.y / value.y;\n\tXp_Y_XYZp.x = value.x * Xp_Y_XYZp.z;\n\tvec3 vRGB = cLogLuvInverseM * Xp_Y_XYZp.rgb;\n\treturn vec4( max( vRGB, 0.0 ), 1.0 );\n}", +envmap_fragment:"#ifdef USE_ENVMAP\n\t#ifdef ENV_WORLDPOS\n\t\tvec3 cameraToFrag;\n\t\t\n\t\tif ( isOrthographic ) {\n\t\t\tcameraToFrag = normalize( vec3( - viewMatrix[ 0 ][ 2 ], - viewMatrix[ 1 ][ 2 ], - viewMatrix[ 2 ][ 2 ] ) );\n\t\t} else {\n\t\t\tcameraToFrag = normalize( vWorldPosition - cameraPosition );\n\t\t}\n\t\tvec3 worldNormal = inverseTransformDirection( normal, viewMatrix );\n\t\t#ifdef ENVMAP_MODE_REFLECTION\n\t\t\tvec3 reflectVec = reflect( cameraToFrag, worldNormal );\n\t\t#else\n\t\t\tvec3 reflectVec = refract( cameraToFrag, worldNormal, refractionRatio );\n\t\t#endif\n\t#else\n\t\tvec3 reflectVec = vReflect;\n\t#endif\n\t#ifdef ENVMAP_TYPE_CUBE\n\t\tvec4 envColor = textureCube( envMap, vec3( flipEnvMap * reflectVec.x, reflectVec.yz ) );\n\t#elif defined( ENVMAP_TYPE_CUBE_UV )\n\t\tvec4 envColor = textureCubeUV( envMap, reflectVec, 0.0 );\n\t#elif defined( ENVMAP_TYPE_EQUIREC )\n\t\treflectVec = normalize( reflectVec );\n\t\tvec2 sampleUV = equirectUv( reflectVec );\n\t\tvec4 envColor = texture2D( envMap, sampleUV );\n\t#else\n\t\tvec4 envColor = vec4( 0.0 );\n\t#endif\n\t#ifndef ENVMAP_TYPE_CUBE_UV\n\t\tenvColor = envMapTexelToLinear( envColor );\n\t#endif\n\t#ifdef ENVMAP_BLENDING_MULTIPLY\n\t\toutgoingLight = mix( outgoingLight, outgoingLight * envColor.xyz, specularStrength * reflectivity );\n\t#elif defined( ENVMAP_BLENDING_MIX )\n\t\toutgoingLight = mix( outgoingLight, envColor.xyz, specularStrength * reflectivity );\n\t#elif defined( ENVMAP_BLENDING_ADD )\n\t\toutgoingLight += envColor.xyz * specularStrength * reflectivity;\n\t#endif\n#endif", +envmap_common_pars_fragment:"#ifdef USE_ENVMAP\n\tuniform float envMapIntensity;\n\tuniform float flipEnvMap;\n\tuniform int maxMipLevel;\n\t#ifdef ENVMAP_TYPE_CUBE\n\t\tuniform samplerCube envMap;\n\t#else\n\t\tuniform sampler2D envMap;\n\t#endif\n\t\n#endif",envmap_pars_fragment:"#ifdef USE_ENVMAP\n\tuniform float reflectivity;\n\t#if defined( USE_BUMPMAP ) || defined( USE_NORMALMAP ) || defined( PHONG )\n\t\t#define ENV_WORLDPOS\n\t#endif\n\t#ifdef ENV_WORLDPOS\n\t\tvarying vec3 vWorldPosition;\n\t\tuniform float refractionRatio;\n\t#else\n\t\tvarying vec3 vReflect;\n\t#endif\n#endif", +envmap_pars_vertex:"#ifdef USE_ENVMAP\n\t#if defined( USE_BUMPMAP ) || defined( USE_NORMALMAP ) ||defined( PHONG )\n\t\t#define ENV_WORLDPOS\n\t#endif\n\t#ifdef ENV_WORLDPOS\n\t\t\n\t\tvarying vec3 vWorldPosition;\n\t#else\n\t\tvarying vec3 vReflect;\n\t\tuniform float refractionRatio;\n\t#endif\n#endif",envmap_physical_pars_fragment:"#if defined( USE_ENVMAP )\n\t#ifdef ENVMAP_MODE_REFRACTION\n\t\tuniform float refractionRatio;\n\t#endif\n\tvec3 getLightProbeIndirectIrradiance( const in GeometricContext geometry, const in int maxMIPLevel ) {\n\t\tvec3 worldNormal = inverseTransformDirection( geometry.normal, viewMatrix );\n\t\t#ifdef ENVMAP_TYPE_CUBE\n\t\t\tvec3 queryVec = vec3( flipEnvMap * worldNormal.x, worldNormal.yz );\n\t\t\t#ifdef TEXTURE_LOD_EXT\n\t\t\t\tvec4 envMapColor = textureCubeLodEXT( envMap, queryVec, float( maxMIPLevel ) );\n\t\t\t#else\n\t\t\t\tvec4 envMapColor = textureCube( envMap, queryVec, float( maxMIPLevel ) );\n\t\t\t#endif\n\t\t\tenvMapColor.rgb = envMapTexelToLinear( envMapColor ).rgb;\n\t\t#elif defined( ENVMAP_TYPE_CUBE_UV )\n\t\t\tvec4 envMapColor = textureCubeUV( envMap, worldNormal, 1.0 );\n\t\t#else\n\t\t\tvec4 envMapColor = vec4( 0.0 );\n\t\t#endif\n\t\treturn PI * envMapColor.rgb * envMapIntensity;\n\t}\n\tfloat getSpecularMIPLevel( const in float roughness, const in int maxMIPLevel ) {\n\t\tfloat maxMIPLevelScalar = float( maxMIPLevel );\n\t\tfloat sigma = PI * roughness * roughness / ( 1.0 + roughness );\n\t\tfloat desiredMIPLevel = maxMIPLevelScalar + log2( sigma );\n\t\treturn clamp( desiredMIPLevel, 0.0, maxMIPLevelScalar );\n\t}\n\tvec3 getLightProbeIndirectRadiance( const in vec3 viewDir, const in vec3 normal, const in float roughness, const in int maxMIPLevel ) {\n\t\t#ifdef ENVMAP_MODE_REFLECTION\n\t\t vec3 reflectVec = reflect( -viewDir, normal );\n\t\t reflectVec = normalize( mix( reflectVec, normal, roughness * roughness) );\n\t\t#else\n\t\t vec3 reflectVec = refract( -viewDir, normal, refractionRatio );\n\t\t#endif\n\t\treflectVec = inverseTransformDirection( reflectVec, viewMatrix );\n\t\tfloat specularMIPLevel = getSpecularMIPLevel( roughness, maxMIPLevel );\n\t\t#ifdef ENVMAP_TYPE_CUBE\n\t\t\tvec3 queryReflectVec = vec3( flipEnvMap * reflectVec.x, reflectVec.yz );\n\t\t\t#ifdef TEXTURE_LOD_EXT\n\t\t\t\tvec4 envMapColor = textureCubeLodEXT( envMap, queryReflectVec, specularMIPLevel );\n\t\t\t#else\n\t\t\t\tvec4 envMapColor = textureCube( envMap, queryReflectVec, specularMIPLevel );\n\t\t\t#endif\n\t\t\tenvMapColor.rgb = envMapTexelToLinear( envMapColor ).rgb;\n\t\t#elif defined( ENVMAP_TYPE_CUBE_UV )\n\t\t\tvec4 envMapColor = textureCubeUV( envMap, reflectVec, roughness );\n\t\t#elif defined( ENVMAP_TYPE_EQUIREC )\n\t\t\tvec2 sampleUV = equirectUv( reflectVec );\n\t\t\t#ifdef TEXTURE_LOD_EXT\n\t\t\t\tvec4 envMapColor = texture2DLodEXT( envMap, sampleUV, specularMIPLevel );\n\t\t\t#else\n\t\t\t\tvec4 envMapColor = texture2D( envMap, sampleUV, specularMIPLevel );\n\t\t\t#endif\n\t\t\tenvMapColor.rgb = envMapTexelToLinear( envMapColor ).rgb;\n\t\t#endif\n\t\treturn envMapColor.rgb * envMapIntensity;\n\t}\n#endif", +envmap_vertex:"#ifdef USE_ENVMAP\n\t#ifdef ENV_WORLDPOS\n\t\tvWorldPosition = worldPosition.xyz;\n\t#else\n\t\tvec3 cameraToVertex;\n\t\tif ( isOrthographic ) { \n\t\t\tcameraToVertex = normalize( vec3( - viewMatrix[ 0 ][ 2 ], - viewMatrix[ 1 ][ 2 ], - viewMatrix[ 2 ][ 2 ] ) );\n\t\t} else {\n\t\t\tcameraToVertex = normalize( worldPosition.xyz - cameraPosition );\n\t\t}\n\t\tvec3 worldNormal = inverseTransformDirection( transformedNormal, viewMatrix );\n\t\t#ifdef ENVMAP_MODE_REFLECTION\n\t\t\tvReflect = reflect( cameraToVertex, worldNormal );\n\t\t#else\n\t\t\tvReflect = refract( cameraToVertex, worldNormal, refractionRatio );\n\t\t#endif\n\t#endif\n#endif", +fog_vertex:"#ifdef USE_FOG\n\tfogDepth = -mvPosition.z;\n#endif",fog_pars_vertex:"#ifdef USE_FOG\n\tvarying float fogDepth;\n#endif",fog_fragment:"#ifdef USE_FOG\n\t#ifdef FOG_EXP2\n\t\tfloat fogFactor = 1.0 - exp( - fogDensity * fogDensity * fogDepth * fogDepth );\n\t#else\n\t\tfloat fogFactor = smoothstep( fogNear, fogFar, fogDepth );\n\t#endif\n\tgl_FragColor.rgb = mix( gl_FragColor.rgb, fogColor, fogFactor );\n#endif",fog_pars_fragment:"#ifdef USE_FOG\n\tuniform vec3 fogColor;\n\tvarying float fogDepth;\n\t#ifdef FOG_EXP2\n\t\tuniform float fogDensity;\n\t#else\n\t\tuniform float fogNear;\n\t\tuniform float fogFar;\n\t#endif\n#endif", +gradientmap_pars_fragment:"#ifdef USE_GRADIENTMAP\n\tuniform sampler2D gradientMap;\n#endif\nvec3 getGradientIrradiance( vec3 normal, vec3 lightDirection ) {\n\tfloat dotNL = dot( normal, lightDirection );\n\tvec2 coord = vec2( dotNL * 0.5 + 0.5, 0.0 );\n\t#ifdef USE_GRADIENTMAP\n\t\treturn texture2D( gradientMap, coord ).rgb;\n\t#else\n\t\treturn ( coord.x < 0.7 ) ? vec3( 0.7 ) : vec3( 1.0 );\n\t#endif\n}",lightmap_fragment:"#ifdef USE_LIGHTMAP\n\tvec4 lightMapTexel= texture2D( lightMap, vUv2 );\n\treflectedLight.indirectDiffuse += PI * lightMapTexelToLinear( lightMapTexel ).rgb * lightMapIntensity;\n#endif", +lightmap_pars_fragment:"#ifdef USE_LIGHTMAP\n\tuniform sampler2D lightMap;\n\tuniform float lightMapIntensity;\n#endif",lights_lambert_vertex:"vec3 diffuse = vec3( 1.0 );\nGeometricContext geometry;\ngeometry.position = mvPosition.xyz;\ngeometry.normal = normalize( transformedNormal );\ngeometry.viewDir = ( isOrthographic ) ? vec3( 0, 0, 1 ) : normalize( -mvPosition.xyz );\nGeometricContext backGeometry;\nbackGeometry.position = geometry.position;\nbackGeometry.normal = -geometry.normal;\nbackGeometry.viewDir = geometry.viewDir;\nvLightFront = vec3( 0.0 );\nvIndirectFront = vec3( 0.0 );\n#ifdef DOUBLE_SIDED\n\tvLightBack = vec3( 0.0 );\n\tvIndirectBack = vec3( 0.0 );\n#endif\nIncidentLight directLight;\nfloat dotNL;\nvec3 directLightColor_Diffuse;\nvIndirectFront += getAmbientLightIrradiance( ambientLightColor );\nvIndirectFront += getLightProbeIrradiance( lightProbe, geometry );\n#ifdef DOUBLE_SIDED\n\tvIndirectBack += getAmbientLightIrradiance( ambientLightColor );\n\tvIndirectBack += getLightProbeIrradiance( lightProbe, backGeometry );\n#endif\n#if NUM_POINT_LIGHTS > 0\n\t#pragma unroll_loop_start\n\tfor ( int i = 0; i < NUM_POINT_LIGHTS; i ++ ) {\n\t\tgetPointDirectLightIrradiance( pointLights[ i ], geometry, directLight );\n\t\tdotNL = dot( geometry.normal, directLight.direction );\n\t\tdirectLightColor_Diffuse = PI * directLight.color;\n\t\tvLightFront += saturate( dotNL ) * directLightColor_Diffuse;\n\t\t#ifdef DOUBLE_SIDED\n\t\t\tvLightBack += saturate( -dotNL ) * directLightColor_Diffuse;\n\t\t#endif\n\t}\n\t#pragma unroll_loop_end\n#endif\n#if NUM_SPOT_LIGHTS > 0\n\t#pragma unroll_loop_start\n\tfor ( int i = 0; i < NUM_SPOT_LIGHTS; i ++ ) {\n\t\tgetSpotDirectLightIrradiance( spotLights[ i ], geometry, directLight );\n\t\tdotNL = dot( geometry.normal, directLight.direction );\n\t\tdirectLightColor_Diffuse = PI * directLight.color;\n\t\tvLightFront += saturate( dotNL ) * directLightColor_Diffuse;\n\t\t#ifdef DOUBLE_SIDED\n\t\t\tvLightBack += saturate( -dotNL ) * directLightColor_Diffuse;\n\t\t#endif\n\t}\n\t#pragma unroll_loop_end\n#endif\n#if NUM_DIR_LIGHTS > 0\n\t#pragma unroll_loop_start\n\tfor ( int i = 0; i < NUM_DIR_LIGHTS; i ++ ) {\n\t\tgetDirectionalDirectLightIrradiance( directionalLights[ i ], geometry, directLight );\n\t\tdotNL = dot( geometry.normal, directLight.direction );\n\t\tdirectLightColor_Diffuse = PI * directLight.color;\n\t\tvLightFront += saturate( dotNL ) * directLightColor_Diffuse;\n\t\t#ifdef DOUBLE_SIDED\n\t\t\tvLightBack += saturate( -dotNL ) * directLightColor_Diffuse;\n\t\t#endif\n\t}\n\t#pragma unroll_loop_end\n#endif\n#if NUM_HEMI_LIGHTS > 0\n\t#pragma unroll_loop_start\n\tfor ( int i = 0; i < NUM_HEMI_LIGHTS; i ++ ) {\n\t\tvIndirectFront += getHemisphereLightIrradiance( hemisphereLights[ i ], geometry );\n\t\t#ifdef DOUBLE_SIDED\n\t\t\tvIndirectBack += getHemisphereLightIrradiance( hemisphereLights[ i ], backGeometry );\n\t\t#endif\n\t}\n\t#pragma unroll_loop_end\n#endif", +lights_pars_begin:"uniform bool receiveShadow;\nuniform vec3 ambientLightColor;\nuniform vec3 lightProbe[ 9 ];\nvec3 shGetIrradianceAt( in vec3 normal, in vec3 shCoefficients[ 9 ] ) {\n\tfloat x = normal.x, y = normal.y, z = normal.z;\n\tvec3 result = shCoefficients[ 0 ] * 0.886227;\n\tresult += shCoefficients[ 1 ] * 2.0 * 0.511664 * y;\n\tresult += shCoefficients[ 2 ] * 2.0 * 0.511664 * z;\n\tresult += shCoefficients[ 3 ] * 2.0 * 0.511664 * x;\n\tresult += shCoefficients[ 4 ] * 2.0 * 0.429043 * x * y;\n\tresult += shCoefficients[ 5 ] * 2.0 * 0.429043 * y * z;\n\tresult += shCoefficients[ 6 ] * ( 0.743125 * z * z - 0.247708 );\n\tresult += shCoefficients[ 7 ] * 2.0 * 0.429043 * x * z;\n\tresult += shCoefficients[ 8 ] * 0.429043 * ( x * x - y * y );\n\treturn result;\n}\nvec3 getLightProbeIrradiance( const in vec3 lightProbe[ 9 ], const in GeometricContext geometry ) {\n\tvec3 worldNormal = inverseTransformDirection( geometry.normal, viewMatrix );\n\tvec3 irradiance = shGetIrradianceAt( worldNormal, lightProbe );\n\treturn irradiance;\n}\nvec3 getAmbientLightIrradiance( const in vec3 ambientLightColor ) {\n\tvec3 irradiance = ambientLightColor;\n\t#ifndef PHYSICALLY_CORRECT_LIGHTS\n\t\tirradiance *= PI;\n\t#endif\n\treturn irradiance;\n}\n#if NUM_DIR_LIGHTS > 0\n\tstruct DirectionalLight {\n\t\tvec3 direction;\n\t\tvec3 color;\n\t};\n\tuniform DirectionalLight directionalLights[ NUM_DIR_LIGHTS ];\n\tvoid getDirectionalDirectLightIrradiance( const in DirectionalLight directionalLight, const in GeometricContext geometry, out IncidentLight directLight ) {\n\t\tdirectLight.color = directionalLight.color;\n\t\tdirectLight.direction = directionalLight.direction;\n\t\tdirectLight.visible = true;\n\t}\n#endif\n#if NUM_POINT_LIGHTS > 0\n\tstruct PointLight {\n\t\tvec3 position;\n\t\tvec3 color;\n\t\tfloat distance;\n\t\tfloat decay;\n\t};\n\tuniform PointLight pointLights[ NUM_POINT_LIGHTS ];\n\tvoid getPointDirectLightIrradiance( const in PointLight pointLight, const in GeometricContext geometry, out IncidentLight directLight ) {\n\t\tvec3 lVector = pointLight.position - geometry.position;\n\t\tdirectLight.direction = normalize( lVector );\n\t\tfloat lightDistance = length( lVector );\n\t\tdirectLight.color = pointLight.color;\n\t\tdirectLight.color *= punctualLightIntensityToIrradianceFactor( lightDistance, pointLight.distance, pointLight.decay );\n\t\tdirectLight.visible = ( directLight.color != vec3( 0.0 ) );\n\t}\n#endif\n#if NUM_SPOT_LIGHTS > 0\n\tstruct SpotLight {\n\t\tvec3 position;\n\t\tvec3 direction;\n\t\tvec3 color;\n\t\tfloat distance;\n\t\tfloat decay;\n\t\tfloat coneCos;\n\t\tfloat penumbraCos;\n\t};\n\tuniform SpotLight spotLights[ NUM_SPOT_LIGHTS ];\n\tvoid getSpotDirectLightIrradiance( const in SpotLight spotLight, const in GeometricContext geometry, out IncidentLight directLight ) {\n\t\tvec3 lVector = spotLight.position - geometry.position;\n\t\tdirectLight.direction = normalize( lVector );\n\t\tfloat lightDistance = length( lVector );\n\t\tfloat angleCos = dot( directLight.direction, spotLight.direction );\n\t\tif ( angleCos > spotLight.coneCos ) {\n\t\t\tfloat spotEffect = smoothstep( spotLight.coneCos, spotLight.penumbraCos, angleCos );\n\t\t\tdirectLight.color = spotLight.color;\n\t\t\tdirectLight.color *= spotEffect * punctualLightIntensityToIrradianceFactor( lightDistance, spotLight.distance, spotLight.decay );\n\t\t\tdirectLight.visible = true;\n\t\t} else {\n\t\t\tdirectLight.color = vec3( 0.0 );\n\t\t\tdirectLight.visible = false;\n\t\t}\n\t}\n#endif\n#if NUM_RECT_AREA_LIGHTS > 0\n\tstruct RectAreaLight {\n\t\tvec3 color;\n\t\tvec3 position;\n\t\tvec3 halfWidth;\n\t\tvec3 halfHeight;\n\t};\n\tuniform sampler2D ltc_1;\tuniform sampler2D ltc_2;\n\tuniform RectAreaLight rectAreaLights[ NUM_RECT_AREA_LIGHTS ];\n#endif\n#if NUM_HEMI_LIGHTS > 0\n\tstruct HemisphereLight {\n\t\tvec3 direction;\n\t\tvec3 skyColor;\n\t\tvec3 groundColor;\n\t};\n\tuniform HemisphereLight hemisphereLights[ NUM_HEMI_LIGHTS ];\n\tvec3 getHemisphereLightIrradiance( const in HemisphereLight hemiLight, const in GeometricContext geometry ) {\n\t\tfloat dotNL = dot( geometry.normal, hemiLight.direction );\n\t\tfloat hemiDiffuseWeight = 0.5 * dotNL + 0.5;\n\t\tvec3 irradiance = mix( hemiLight.groundColor, hemiLight.skyColor, hemiDiffuseWeight );\n\t\t#ifndef PHYSICALLY_CORRECT_LIGHTS\n\t\t\tirradiance *= PI;\n\t\t#endif\n\t\treturn irradiance;\n\t}\n#endif", +lights_toon_fragment:"ToonMaterial material;\nmaterial.diffuseColor = diffuseColor.rgb;",lights_toon_pars_fragment:"varying vec3 vViewPosition;\n#ifndef FLAT_SHADED\n\tvarying vec3 vNormal;\n#endif\nstruct ToonMaterial {\n\tvec3\tdiffuseColor;\n};\nvoid RE_Direct_Toon( const in IncidentLight directLight, const in GeometricContext geometry, const in ToonMaterial material, inout ReflectedLight reflectedLight ) {\n\tvec3 irradiance = getGradientIrradiance( geometry.normal, directLight.direction ) * directLight.color;\n\t#ifndef PHYSICALLY_CORRECT_LIGHTS\n\t\tirradiance *= PI;\n\t#endif\n\treflectedLight.directDiffuse += irradiance * BRDF_Diffuse_Lambert( material.diffuseColor );\n}\nvoid RE_IndirectDiffuse_Toon( const in vec3 irradiance, const in GeometricContext geometry, const in ToonMaterial material, inout ReflectedLight reflectedLight ) {\n\treflectedLight.indirectDiffuse += irradiance * BRDF_Diffuse_Lambert( material.diffuseColor );\n}\n#define RE_Direct\t\t\t\tRE_Direct_Toon\n#define RE_IndirectDiffuse\t\tRE_IndirectDiffuse_Toon\n#define Material_LightProbeLOD( material )\t(0)", +lights_phong_fragment:"BlinnPhongMaterial material;\nmaterial.diffuseColor = diffuseColor.rgb;\nmaterial.specularColor = specular;\nmaterial.specularShininess = shininess;\nmaterial.specularStrength = specularStrength;",lights_phong_pars_fragment:"varying vec3 vViewPosition;\n#ifndef FLAT_SHADED\n\tvarying vec3 vNormal;\n#endif\nstruct BlinnPhongMaterial {\n\tvec3\tdiffuseColor;\n\tvec3\tspecularColor;\n\tfloat\tspecularShininess;\n\tfloat\tspecularStrength;\n};\nvoid RE_Direct_BlinnPhong( const in IncidentLight directLight, const in GeometricContext geometry, const in BlinnPhongMaterial material, inout ReflectedLight reflectedLight ) {\n\tfloat dotNL = saturate( dot( geometry.normal, directLight.direction ) );\n\tvec3 irradiance = dotNL * directLight.color;\n\t#ifndef PHYSICALLY_CORRECT_LIGHTS\n\t\tirradiance *= PI;\n\t#endif\n\treflectedLight.directDiffuse += irradiance * BRDF_Diffuse_Lambert( material.diffuseColor );\n\treflectedLight.directSpecular += irradiance * BRDF_Specular_BlinnPhong( directLight, geometry, material.specularColor, material.specularShininess ) * material.specularStrength;\n}\nvoid RE_IndirectDiffuse_BlinnPhong( const in vec3 irradiance, const in GeometricContext geometry, const in BlinnPhongMaterial material, inout ReflectedLight reflectedLight ) {\n\treflectedLight.indirectDiffuse += irradiance * BRDF_Diffuse_Lambert( material.diffuseColor );\n}\n#define RE_Direct\t\t\t\tRE_Direct_BlinnPhong\n#define RE_IndirectDiffuse\t\tRE_IndirectDiffuse_BlinnPhong\n#define Material_LightProbeLOD( material )\t(0)", +lights_physical_fragment:"PhysicalMaterial material;\nmaterial.diffuseColor = diffuseColor.rgb * ( 1.0 - metalnessFactor );\nvec3 dxy = max( abs( dFdx( geometryNormal ) ), abs( dFdy( geometryNormal ) ) );\nfloat geometryRoughness = max( max( dxy.x, dxy.y ), dxy.z );\nmaterial.specularRoughness = max( roughnessFactor, 0.0525 );material.specularRoughness += geometryRoughness;\nmaterial.specularRoughness = min( material.specularRoughness, 1.0 );\n#ifdef REFLECTIVITY\n\tmaterial.specularColor = mix( vec3( MAXIMUM_SPECULAR_COEFFICIENT * pow2( reflectivity ) ), diffuseColor.rgb, metalnessFactor );\n#else\n\tmaterial.specularColor = mix( vec3( DEFAULT_SPECULAR_COEFFICIENT ), diffuseColor.rgb, metalnessFactor );\n#endif\n#ifdef CLEARCOAT\n\tmaterial.clearcoat = clearcoat;\n\tmaterial.clearcoatRoughness = clearcoatRoughness;\n\t#ifdef USE_CLEARCOATMAP\n\t\tmaterial.clearcoat *= texture2D( clearcoatMap, vUv ).x;\n\t#endif\n\t#ifdef USE_CLEARCOAT_ROUGHNESSMAP\n\t\tmaterial.clearcoatRoughness *= texture2D( clearcoatRoughnessMap, vUv ).y;\n\t#endif\n\tmaterial.clearcoat = saturate( material.clearcoat );\tmaterial.clearcoatRoughness = max( material.clearcoatRoughness, 0.0525 );\n\tmaterial.clearcoatRoughness += geometryRoughness;\n\tmaterial.clearcoatRoughness = min( material.clearcoatRoughness, 1.0 );\n#endif\n#ifdef USE_SHEEN\n\tmaterial.sheenColor = sheen;\n#endif", +lights_physical_pars_fragment:"struct PhysicalMaterial {\n\tvec3\tdiffuseColor;\n\tfloat\tspecularRoughness;\n\tvec3\tspecularColor;\n#ifdef CLEARCOAT\n\tfloat clearcoat;\n\tfloat clearcoatRoughness;\n#endif\n#ifdef USE_SHEEN\n\tvec3 sheenColor;\n#endif\n};\n#define MAXIMUM_SPECULAR_COEFFICIENT 0.16\n#define DEFAULT_SPECULAR_COEFFICIENT 0.04\nfloat clearcoatDHRApprox( const in float roughness, const in float dotNL ) {\n\treturn DEFAULT_SPECULAR_COEFFICIENT + ( 1.0 - DEFAULT_SPECULAR_COEFFICIENT ) * ( pow( 1.0 - dotNL, 5.0 ) * pow( 1.0 - roughness, 2.0 ) );\n}\n#if NUM_RECT_AREA_LIGHTS > 0\n\tvoid RE_Direct_RectArea_Physical( const in RectAreaLight rectAreaLight, const in GeometricContext geometry, const in PhysicalMaterial material, inout ReflectedLight reflectedLight ) {\n\t\tvec3 normal = geometry.normal;\n\t\tvec3 viewDir = geometry.viewDir;\n\t\tvec3 position = geometry.position;\n\t\tvec3 lightPos = rectAreaLight.position;\n\t\tvec3 halfWidth = rectAreaLight.halfWidth;\n\t\tvec3 halfHeight = rectAreaLight.halfHeight;\n\t\tvec3 lightColor = rectAreaLight.color;\n\t\tfloat roughness = material.specularRoughness;\n\t\tvec3 rectCoords[ 4 ];\n\t\trectCoords[ 0 ] = lightPos + halfWidth - halfHeight;\t\trectCoords[ 1 ] = lightPos - halfWidth - halfHeight;\n\t\trectCoords[ 2 ] = lightPos - halfWidth + halfHeight;\n\t\trectCoords[ 3 ] = lightPos + halfWidth + halfHeight;\n\t\tvec2 uv = LTC_Uv( normal, viewDir, roughness );\n\t\tvec4 t1 = texture2D( ltc_1, uv );\n\t\tvec4 t2 = texture2D( ltc_2, uv );\n\t\tmat3 mInv = mat3(\n\t\t\tvec3( t1.x, 0, t1.y ),\n\t\t\tvec3( 0, 1, 0 ),\n\t\t\tvec3( t1.z, 0, t1.w )\n\t\t);\n\t\tvec3 fresnel = ( material.specularColor * t2.x + ( vec3( 1.0 ) - material.specularColor ) * t2.y );\n\t\treflectedLight.directSpecular += lightColor * fresnel * LTC_Evaluate( normal, viewDir, position, mInv, rectCoords );\n\t\treflectedLight.directDiffuse += lightColor * material.diffuseColor * LTC_Evaluate( normal, viewDir, position, mat3( 1.0 ), rectCoords );\n\t}\n#endif\nvoid RE_Direct_Physical( const in IncidentLight directLight, const in GeometricContext geometry, const in PhysicalMaterial material, inout ReflectedLight reflectedLight ) {\n\tfloat dotNL = saturate( dot( geometry.normal, directLight.direction ) );\n\tvec3 irradiance = dotNL * directLight.color;\n\t#ifndef PHYSICALLY_CORRECT_LIGHTS\n\t\tirradiance *= PI;\n\t#endif\n\t#ifdef CLEARCOAT\n\t\tfloat ccDotNL = saturate( dot( geometry.clearcoatNormal, directLight.direction ) );\n\t\tvec3 ccIrradiance = ccDotNL * directLight.color;\n\t\t#ifndef PHYSICALLY_CORRECT_LIGHTS\n\t\t\tccIrradiance *= PI;\n\t\t#endif\n\t\tfloat clearcoatDHR = material.clearcoat * clearcoatDHRApprox( material.clearcoatRoughness, ccDotNL );\n\t\treflectedLight.directSpecular += ccIrradiance * material.clearcoat * BRDF_Specular_GGX( directLight, geometry.viewDir, geometry.clearcoatNormal, vec3( DEFAULT_SPECULAR_COEFFICIENT ), material.clearcoatRoughness );\n\t#else\n\t\tfloat clearcoatDHR = 0.0;\n\t#endif\n\t#ifdef USE_SHEEN\n\t\treflectedLight.directSpecular += ( 1.0 - clearcoatDHR ) * irradiance * BRDF_Specular_Sheen(\n\t\t\tmaterial.specularRoughness,\n\t\t\tdirectLight.direction,\n\t\t\tgeometry,\n\t\t\tmaterial.sheenColor\n\t\t);\n\t#else\n\t\treflectedLight.directSpecular += ( 1.0 - clearcoatDHR ) * irradiance * BRDF_Specular_GGX( directLight, geometry.viewDir, geometry.normal, material.specularColor, material.specularRoughness);\n\t#endif\n\treflectedLight.directDiffuse += ( 1.0 - clearcoatDHR ) * irradiance * BRDF_Diffuse_Lambert( material.diffuseColor );\n}\nvoid RE_IndirectDiffuse_Physical( const in vec3 irradiance, const in GeometricContext geometry, const in PhysicalMaterial material, inout ReflectedLight reflectedLight ) {\n\treflectedLight.indirectDiffuse += irradiance * BRDF_Diffuse_Lambert( material.diffuseColor );\n}\nvoid RE_IndirectSpecular_Physical( const in vec3 radiance, const in vec3 irradiance, const in vec3 clearcoatRadiance, const in GeometricContext geometry, const in PhysicalMaterial material, inout ReflectedLight reflectedLight) {\n\t#ifdef CLEARCOAT\n\t\tfloat ccDotNV = saturate( dot( geometry.clearcoatNormal, geometry.viewDir ) );\n\t\treflectedLight.indirectSpecular += clearcoatRadiance * material.clearcoat * BRDF_Specular_GGX_Environment( geometry.viewDir, geometry.clearcoatNormal, vec3( DEFAULT_SPECULAR_COEFFICIENT ), material.clearcoatRoughness );\n\t\tfloat ccDotNL = ccDotNV;\n\t\tfloat clearcoatDHR = material.clearcoat * clearcoatDHRApprox( material.clearcoatRoughness, ccDotNL );\n\t#else\n\t\tfloat clearcoatDHR = 0.0;\n\t#endif\n\tfloat clearcoatInv = 1.0 - clearcoatDHR;\n\tvec3 singleScattering = vec3( 0.0 );\n\tvec3 multiScattering = vec3( 0.0 );\n\tvec3 cosineWeightedIrradiance = irradiance * RECIPROCAL_PI;\n\tBRDF_Specular_Multiscattering_Environment( geometry, material.specularColor, material.specularRoughness, singleScattering, multiScattering );\n\tvec3 diffuse = material.diffuseColor * ( 1.0 - ( singleScattering + multiScattering ) );\n\treflectedLight.indirectSpecular += clearcoatInv * radiance * singleScattering;\n\treflectedLight.indirectSpecular += multiScattering * cosineWeightedIrradiance;\n\treflectedLight.indirectDiffuse += diffuse * cosineWeightedIrradiance;\n}\n#define RE_Direct\t\t\t\tRE_Direct_Physical\n#define RE_Direct_RectArea\t\tRE_Direct_RectArea_Physical\n#define RE_IndirectDiffuse\t\tRE_IndirectDiffuse_Physical\n#define RE_IndirectSpecular\t\tRE_IndirectSpecular_Physical\nfloat computeSpecularOcclusion( const in float dotNV, const in float ambientOcclusion, const in float roughness ) {\n\treturn saturate( pow( dotNV + ambientOcclusion, exp2( - 16.0 * roughness - 1.0 ) ) - 1.0 + ambientOcclusion );\n}", +lights_fragment_begin:"\nGeometricContext geometry;\ngeometry.position = - vViewPosition;\ngeometry.normal = normal;\ngeometry.viewDir = ( isOrthographic ) ? vec3( 0, 0, 1 ) : normalize( vViewPosition );\n#ifdef CLEARCOAT\n\tgeometry.clearcoatNormal = clearcoatNormal;\n#endif\nIncidentLight directLight;\n#if ( NUM_POINT_LIGHTS > 0 ) && defined( RE_Direct )\n\tPointLight pointLight;\n\t#if defined( USE_SHADOWMAP ) && NUM_POINT_LIGHT_SHADOWS > 0\n\tPointLightShadow pointLightShadow;\n\t#endif\n\t#pragma unroll_loop_start\n\tfor ( int i = 0; i < NUM_POINT_LIGHTS; i ++ ) {\n\t\tpointLight = pointLights[ i ];\n\t\tgetPointDirectLightIrradiance( pointLight, geometry, directLight );\n\t\t#if defined( USE_SHADOWMAP ) && ( UNROLLED_LOOP_INDEX < NUM_POINT_LIGHT_SHADOWS )\n\t\tpointLightShadow = pointLightShadows[ i ];\n\t\tdirectLight.color *= all( bvec2( directLight.visible, receiveShadow ) ) ? getPointShadow( pointShadowMap[ i ], pointLightShadow.shadowMapSize, pointLightShadow.shadowBias, pointLightShadow.shadowRadius, vPointShadowCoord[ i ], pointLightShadow.shadowCameraNear, pointLightShadow.shadowCameraFar ) : 1.0;\n\t\t#endif\n\t\tRE_Direct( directLight, geometry, material, reflectedLight );\n\t}\n\t#pragma unroll_loop_end\n#endif\n#if ( NUM_SPOT_LIGHTS > 0 ) && defined( RE_Direct )\n\tSpotLight spotLight;\n\t#if defined( USE_SHADOWMAP ) && NUM_SPOT_LIGHT_SHADOWS > 0\n\tSpotLightShadow spotLightShadow;\n\t#endif\n\t#pragma unroll_loop_start\n\tfor ( int i = 0; i < NUM_SPOT_LIGHTS; i ++ ) {\n\t\tspotLight = spotLights[ i ];\n\t\tgetSpotDirectLightIrradiance( spotLight, geometry, directLight );\n\t\t#if defined( USE_SHADOWMAP ) && ( UNROLLED_LOOP_INDEX < NUM_SPOT_LIGHT_SHADOWS )\n\t\tspotLightShadow = spotLightShadows[ i ];\n\t\tdirectLight.color *= all( bvec2( directLight.visible, receiveShadow ) ) ? getShadow( spotShadowMap[ i ], spotLightShadow.shadowMapSize, spotLightShadow.shadowBias, spotLightShadow.shadowRadius, vSpotShadowCoord[ i ] ) : 1.0;\n\t\t#endif\n\t\tRE_Direct( directLight, geometry, material, reflectedLight );\n\t}\n\t#pragma unroll_loop_end\n#endif\n#if ( NUM_DIR_LIGHTS > 0 ) && defined( RE_Direct )\n\tDirectionalLight directionalLight;\n\t#if defined( USE_SHADOWMAP ) && NUM_DIR_LIGHT_SHADOWS > 0\n\tDirectionalLightShadow directionalLightShadow;\n\t#endif\n\t#pragma unroll_loop_start\n\tfor ( int i = 0; i < NUM_DIR_LIGHTS; i ++ ) {\n\t\tdirectionalLight = directionalLights[ i ];\n\t\tgetDirectionalDirectLightIrradiance( directionalLight, geometry, directLight );\n\t\t#if defined( USE_SHADOWMAP ) && ( UNROLLED_LOOP_INDEX < NUM_DIR_LIGHT_SHADOWS )\n\t\tdirectionalLightShadow = directionalLightShadows[ i ];\n\t\tdirectLight.color *= all( bvec2( directLight.visible, receiveShadow ) ) ? getShadow( directionalShadowMap[ i ], directionalLightShadow.shadowMapSize, directionalLightShadow.shadowBias, directionalLightShadow.shadowRadius, vDirectionalShadowCoord[ i ] ) : 1.0;\n\t\t#endif\n\t\tRE_Direct( directLight, geometry, material, reflectedLight );\n\t}\n\t#pragma unroll_loop_end\n#endif\n#if ( NUM_RECT_AREA_LIGHTS > 0 ) && defined( RE_Direct_RectArea )\n\tRectAreaLight rectAreaLight;\n\t#pragma unroll_loop_start\n\tfor ( int i = 0; i < NUM_RECT_AREA_LIGHTS; i ++ ) {\n\t\trectAreaLight = rectAreaLights[ i ];\n\t\tRE_Direct_RectArea( rectAreaLight, geometry, material, reflectedLight );\n\t}\n\t#pragma unroll_loop_end\n#endif\n#if defined( RE_IndirectDiffuse )\n\tvec3 iblIrradiance = vec3( 0.0 );\n\tvec3 irradiance = getAmbientLightIrradiance( ambientLightColor );\n\tirradiance += getLightProbeIrradiance( lightProbe, geometry );\n\t#if ( NUM_HEMI_LIGHTS > 0 )\n\t\t#pragma unroll_loop_start\n\t\tfor ( int i = 0; i < NUM_HEMI_LIGHTS; i ++ ) {\n\t\t\tirradiance += getHemisphereLightIrradiance( hemisphereLights[ i ], geometry );\n\t\t}\n\t\t#pragma unroll_loop_end\n\t#endif\n#endif\n#if defined( RE_IndirectSpecular )\n\tvec3 radiance = vec3( 0.0 );\n\tvec3 clearcoatRadiance = vec3( 0.0 );\n#endif", +lights_fragment_maps:"#if defined( RE_IndirectDiffuse )\n\t#ifdef USE_LIGHTMAP\n\t\tvec4 lightMapTexel= texture2D( lightMap, vUv2 );\n\t\tvec3 lightMapIrradiance = lightMapTexelToLinear( lightMapTexel ).rgb * lightMapIntensity;\n\t\t#ifndef PHYSICALLY_CORRECT_LIGHTS\n\t\t\tlightMapIrradiance *= PI;\n\t\t#endif\n\t\tirradiance += lightMapIrradiance;\n\t#endif\n\t#if defined( USE_ENVMAP ) && defined( STANDARD ) && defined( ENVMAP_TYPE_CUBE_UV )\n\t\tiblIrradiance += getLightProbeIndirectIrradiance( geometry, maxMipLevel );\n\t#endif\n#endif\n#if defined( USE_ENVMAP ) && defined( RE_IndirectSpecular )\n\tradiance += getLightProbeIndirectRadiance( geometry.viewDir, geometry.normal, material.specularRoughness, maxMipLevel );\n\t#ifdef CLEARCOAT\n\t\tclearcoatRadiance += getLightProbeIndirectRadiance( geometry.viewDir, geometry.clearcoatNormal, material.clearcoatRoughness, maxMipLevel );\n\t#endif\n#endif", +lights_fragment_end:"#if defined( RE_IndirectDiffuse )\n\tRE_IndirectDiffuse( irradiance, geometry, material, reflectedLight );\n#endif\n#if defined( RE_IndirectSpecular )\n\tRE_IndirectSpecular( radiance, iblIrradiance, clearcoatRadiance, geometry, material, reflectedLight );\n#endif",logdepthbuf_fragment:"#if defined( USE_LOGDEPTHBUF ) && defined( USE_LOGDEPTHBUF_EXT )\n\tgl_FragDepthEXT = vIsPerspective == 0.0 ? gl_FragCoord.z : log2( vFragDepth ) * logDepthBufFC * 0.5;\n#endif",logdepthbuf_pars_fragment:"#if defined( USE_LOGDEPTHBUF ) && defined( USE_LOGDEPTHBUF_EXT )\n\tuniform float logDepthBufFC;\n\tvarying float vFragDepth;\n\tvarying float vIsPerspective;\n#endif", +logdepthbuf_pars_vertex:"#ifdef USE_LOGDEPTHBUF\n\t#ifdef USE_LOGDEPTHBUF_EXT\n\t\tvarying float vFragDepth;\n\t\tvarying float vIsPerspective;\n\t#else\n\t\tuniform float logDepthBufFC;\n\t#endif\n#endif",logdepthbuf_vertex:"#ifdef USE_LOGDEPTHBUF\n\t#ifdef USE_LOGDEPTHBUF_EXT\n\t\tvFragDepth = 1.0 + gl_Position.w;\n\t\tvIsPerspective = float( isPerspectiveMatrix( projectionMatrix ) );\n\t#else\n\t\tif ( isPerspectiveMatrix( projectionMatrix ) ) {\n\t\t\tgl_Position.z = log2( max( EPSILON, gl_Position.w + 1.0 ) ) * logDepthBufFC - 1.0;\n\t\t\tgl_Position.z *= gl_Position.w;\n\t\t}\n\t#endif\n#endif", +map_fragment:"#ifdef USE_MAP\n\tvec4 texelColor = texture2D( map, vUv );\n\ttexelColor = mapTexelToLinear( texelColor );\n\tdiffuseColor *= texelColor;\n#endif",map_pars_fragment:"#ifdef USE_MAP\n\tuniform sampler2D map;\n#endif",map_particle_fragment:"#if defined( USE_MAP ) || defined( USE_ALPHAMAP )\n\tvec2 uv = ( uvTransform * vec3( gl_PointCoord.x, 1.0 - gl_PointCoord.y, 1 ) ).xy;\n#endif\n#ifdef USE_MAP\n\tvec4 mapTexel = texture2D( map, uv );\n\tdiffuseColor *= mapTexelToLinear( mapTexel );\n#endif\n#ifdef USE_ALPHAMAP\n\tdiffuseColor.a *= texture2D( alphaMap, uv ).g;\n#endif", +map_particle_pars_fragment:"#if defined( USE_MAP ) || defined( USE_ALPHAMAP )\n\tuniform mat3 uvTransform;\n#endif\n#ifdef USE_MAP\n\tuniform sampler2D map;\n#endif\n#ifdef USE_ALPHAMAP\n\tuniform sampler2D alphaMap;\n#endif",metalnessmap_fragment:"float metalnessFactor = metalness;\n#ifdef USE_METALNESSMAP\n\tvec4 texelMetalness = texture2D( metalnessMap, vUv );\n\tmetalnessFactor *= texelMetalness.b;\n#endif",metalnessmap_pars_fragment:"#ifdef USE_METALNESSMAP\n\tuniform sampler2D metalnessMap;\n#endif", +morphnormal_vertex:"#ifdef USE_MORPHNORMALS\n\tobjectNormal *= morphTargetBaseInfluence;\n\tobjectNormal += morphNormal0 * morphTargetInfluences[ 0 ];\n\tobjectNormal += morphNormal1 * morphTargetInfluences[ 1 ];\n\tobjectNormal += morphNormal2 * morphTargetInfluences[ 2 ];\n\tobjectNormal += morphNormal3 * morphTargetInfluences[ 3 ];\n#endif",morphtarget_pars_vertex:"#ifdef USE_MORPHTARGETS\n\tuniform float morphTargetBaseInfluence;\n\t#ifndef USE_MORPHNORMALS\n\tuniform float morphTargetInfluences[ 8 ];\n\t#else\n\tuniform float morphTargetInfluences[ 4 ];\n\t#endif\n#endif", +morphtarget_vertex:"#ifdef USE_MORPHTARGETS\n\ttransformed *= morphTargetBaseInfluence;\n\ttransformed += morphTarget0 * morphTargetInfluences[ 0 ];\n\ttransformed += morphTarget1 * morphTargetInfluences[ 1 ];\n\ttransformed += morphTarget2 * morphTargetInfluences[ 2 ];\n\ttransformed += morphTarget3 * morphTargetInfluences[ 3 ];\n\t#ifndef USE_MORPHNORMALS\n\ttransformed += morphTarget4 * morphTargetInfluences[ 4 ];\n\ttransformed += morphTarget5 * morphTargetInfluences[ 5 ];\n\ttransformed += morphTarget6 * morphTargetInfluences[ 6 ];\n\ttransformed += morphTarget7 * morphTargetInfluences[ 7 ];\n\t#endif\n#endif", +normal_fragment_begin:"#ifdef FLAT_SHADED\n\tvec3 fdx = vec3( dFdx( vViewPosition.x ), dFdx( vViewPosition.y ), dFdx( vViewPosition.z ) );\n\tvec3 fdy = vec3( dFdy( vViewPosition.x ), dFdy( vViewPosition.y ), dFdy( vViewPosition.z ) );\n\tvec3 normal = normalize( cross( fdx, fdy ) );\n#else\n\tvec3 normal = normalize( vNormal );\n\t#ifdef DOUBLE_SIDED\n\t\tnormal = normal * ( float( gl_FrontFacing ) * 2.0 - 1.0 );\n\t#endif\n\t#ifdef USE_TANGENT\n\t\tvec3 tangent = normalize( vTangent );\n\t\tvec3 bitangent = normalize( vBitangent );\n\t\t#ifdef DOUBLE_SIDED\n\t\t\ttangent = tangent * ( float( gl_FrontFacing ) * 2.0 - 1.0 );\n\t\t\tbitangent = bitangent * ( float( gl_FrontFacing ) * 2.0 - 1.0 );\n\t\t#endif\n\t\t#if defined( TANGENTSPACE_NORMALMAP ) || defined( USE_CLEARCOAT_NORMALMAP )\n\t\t\tmat3 vTBN = mat3( tangent, bitangent, normal );\n\t\t#endif\n\t#endif\n#endif\nvec3 geometryNormal = normal;", +normal_fragment_maps:"#ifdef OBJECTSPACE_NORMALMAP\n\tnormal = texture2D( normalMap, vUv ).xyz * 2.0 - 1.0;\n\t#ifdef FLIP_SIDED\n\t\tnormal = - normal;\n\t#endif\n\t#ifdef DOUBLE_SIDED\n\t\tnormal = normal * ( float( gl_FrontFacing ) * 2.0 - 1.0 );\n\t#endif\n\tnormal = normalize( normalMatrix * normal );\n#elif defined( TANGENTSPACE_NORMALMAP )\n\tvec3 mapN = texture2D( normalMap, vUv ).xyz * 2.0 - 1.0;\n\tmapN.xy *= normalScale;\n\t#ifdef USE_TANGENT\n\t\tnormal = normalize( vTBN * mapN );\n\t#else\n\t\tnormal = perturbNormal2Arb( -vViewPosition, normal, mapN );\n\t#endif\n#elif defined( USE_BUMPMAP )\n\tnormal = perturbNormalArb( -vViewPosition, normal, dHdxy_fwd() );\n#endif", +normalmap_pars_fragment:"#ifdef USE_NORMALMAP\n\tuniform sampler2D normalMap;\n\tuniform vec2 normalScale;\n#endif\n#ifdef OBJECTSPACE_NORMALMAP\n\tuniform mat3 normalMatrix;\n#endif\n#if ! defined ( USE_TANGENT ) && ( defined ( TANGENTSPACE_NORMALMAP ) || defined ( USE_CLEARCOAT_NORMALMAP ) )\n\tvec3 perturbNormal2Arb( vec3 eye_pos, vec3 surf_norm, vec3 mapN ) {\n\t\tvec3 q0 = vec3( dFdx( eye_pos.x ), dFdx( eye_pos.y ), dFdx( eye_pos.z ) );\n\t\tvec3 q1 = vec3( dFdy( eye_pos.x ), dFdy( eye_pos.y ), dFdy( eye_pos.z ) );\n\t\tvec2 st0 = dFdx( vUv.st );\n\t\tvec2 st1 = dFdy( vUv.st );\n\t\tfloat scale = sign( st1.t * st0.s - st0.t * st1.s );\n\t\tvec3 S = normalize( ( q0 * st1.t - q1 * st0.t ) * scale );\n\t\tvec3 T = normalize( ( - q0 * st1.s + q1 * st0.s ) * scale );\n\t\tvec3 N = normalize( surf_norm );\n\t\tmat3 tsn = mat3( S, T, N );\n\t\tmapN.xy *= ( float( gl_FrontFacing ) * 2.0 - 1.0 );\n\t\treturn normalize( tsn * mapN );\n\t}\n#endif", +clearcoat_normal_fragment_begin:"#ifdef CLEARCOAT\n\tvec3 clearcoatNormal = geometryNormal;\n#endif",clearcoat_normal_fragment_maps:"#ifdef USE_CLEARCOAT_NORMALMAP\n\tvec3 clearcoatMapN = texture2D( clearcoatNormalMap, vUv ).xyz * 2.0 - 1.0;\n\tclearcoatMapN.xy *= clearcoatNormalScale;\n\t#ifdef USE_TANGENT\n\t\tclearcoatNormal = normalize( vTBN * clearcoatMapN );\n\t#else\n\t\tclearcoatNormal = perturbNormal2Arb( - vViewPosition, clearcoatNormal, clearcoatMapN );\n\t#endif\n#endif",clearcoat_pars_fragment:"#ifdef USE_CLEARCOATMAP\n\tuniform sampler2D clearcoatMap;\n#endif\n#ifdef USE_CLEARCOAT_ROUGHNESSMAP\n\tuniform sampler2D clearcoatRoughnessMap;\n#endif\n#ifdef USE_CLEARCOAT_NORMALMAP\n\tuniform sampler2D clearcoatNormalMap;\n\tuniform vec2 clearcoatNormalScale;\n#endif", +packing:"vec3 packNormalToRGB( const in vec3 normal ) {\n\treturn normalize( normal ) * 0.5 + 0.5;\n}\nvec3 unpackRGBToNormal( const in vec3 rgb ) {\n\treturn 2.0 * rgb.xyz - 1.0;\n}\nconst float PackUpscale = 256. / 255.;const float UnpackDownscale = 255. / 256.;\nconst vec3 PackFactors = vec3( 256. * 256. * 256., 256. * 256., 256. );\nconst vec4 UnpackFactors = UnpackDownscale / vec4( PackFactors, 1. );\nconst float ShiftRight8 = 1. / 256.;\nvec4 packDepthToRGBA( const in float v ) {\n\tvec4 r = vec4( fract( v * PackFactors ), v );\n\tr.yzw -= r.xyz * ShiftRight8;\treturn r * PackUpscale;\n}\nfloat unpackRGBAToDepth( const in vec4 v ) {\n\treturn dot( v, UnpackFactors );\n}\nvec4 pack2HalfToRGBA( vec2 v ) {\n\tvec4 r = vec4( v.x, fract( v.x * 255.0 ), v.y, fract( v.y * 255.0 ));\n\treturn vec4( r.x - r.y / 255.0, r.y, r.z - r.w / 255.0, r.w);\n}\nvec2 unpackRGBATo2Half( vec4 v ) {\n\treturn vec2( v.x + ( v.y / 255.0 ), v.z + ( v.w / 255.0 ) );\n}\nfloat viewZToOrthographicDepth( const in float viewZ, const in float near, const in float far ) {\n\treturn ( viewZ + near ) / ( near - far );\n}\nfloat orthographicDepthToViewZ( const in float linearClipZ, const in float near, const in float far ) {\n\treturn linearClipZ * ( near - far ) - near;\n}\nfloat viewZToPerspectiveDepth( const in float viewZ, const in float near, const in float far ) {\n\treturn (( near + viewZ ) * far ) / (( far - near ) * viewZ );\n}\nfloat perspectiveDepthToViewZ( const in float invClipZ, const in float near, const in float far ) {\n\treturn ( near * far ) / ( ( far - near ) * invClipZ - far );\n}", +premultiplied_alpha_fragment:"#ifdef PREMULTIPLIED_ALPHA\n\tgl_FragColor.rgb *= gl_FragColor.a;\n#endif",project_vertex:"vec4 mvPosition = vec4( transformed, 1.0 );\n#ifdef USE_INSTANCING\n\tmvPosition = instanceMatrix * mvPosition;\n#endif\nmvPosition = modelViewMatrix * mvPosition;\ngl_Position = projectionMatrix * mvPosition;",dithering_fragment:"#ifdef DITHERING\n\tgl_FragColor.rgb = dithering( gl_FragColor.rgb );\n#endif",dithering_pars_fragment:"#ifdef DITHERING\n\tvec3 dithering( vec3 color ) {\n\t\tfloat grid_position = rand( gl_FragCoord.xy );\n\t\tvec3 dither_shift_RGB = vec3( 0.25 / 255.0, -0.25 / 255.0, 0.25 / 255.0 );\n\t\tdither_shift_RGB = mix( 2.0 * dither_shift_RGB, -2.0 * dither_shift_RGB, grid_position );\n\t\treturn color + dither_shift_RGB;\n\t}\n#endif", +roughnessmap_fragment:"float roughnessFactor = roughness;\n#ifdef USE_ROUGHNESSMAP\n\tvec4 texelRoughness = texture2D( roughnessMap, vUv );\n\troughnessFactor *= texelRoughness.g;\n#endif",roughnessmap_pars_fragment:"#ifdef USE_ROUGHNESSMAP\n\tuniform sampler2D roughnessMap;\n#endif",shadowmap_pars_fragment:"#ifdef USE_SHADOWMAP\n\t#if NUM_DIR_LIGHT_SHADOWS > 0\n\t\tuniform sampler2D directionalShadowMap[ NUM_DIR_LIGHT_SHADOWS ];\n\t\tvarying vec4 vDirectionalShadowCoord[ NUM_DIR_LIGHT_SHADOWS ];\n\t\tstruct DirectionalLightShadow {\n\t\t\tfloat shadowBias;\n\t\t\tfloat shadowNormalBias;\n\t\t\tfloat shadowRadius;\n\t\t\tvec2 shadowMapSize;\n\t\t};\n\t\tuniform DirectionalLightShadow directionalLightShadows[ NUM_DIR_LIGHT_SHADOWS ];\n\t#endif\n\t#if NUM_SPOT_LIGHT_SHADOWS > 0\n\t\tuniform sampler2D spotShadowMap[ NUM_SPOT_LIGHT_SHADOWS ];\n\t\tvarying vec4 vSpotShadowCoord[ NUM_SPOT_LIGHT_SHADOWS ];\n\t\tstruct SpotLightShadow {\n\t\t\tfloat shadowBias;\n\t\t\tfloat shadowNormalBias;\n\t\t\tfloat shadowRadius;\n\t\t\tvec2 shadowMapSize;\n\t\t};\n\t\tuniform SpotLightShadow spotLightShadows[ NUM_SPOT_LIGHT_SHADOWS ];\n\t#endif\n\t#if NUM_POINT_LIGHT_SHADOWS > 0\n\t\tuniform sampler2D pointShadowMap[ NUM_POINT_LIGHT_SHADOWS ];\n\t\tvarying vec4 vPointShadowCoord[ NUM_POINT_LIGHT_SHADOWS ];\n\t\tstruct PointLightShadow {\n\t\t\tfloat shadowBias;\n\t\t\tfloat shadowNormalBias;\n\t\t\tfloat shadowRadius;\n\t\t\tvec2 shadowMapSize;\n\t\t\tfloat shadowCameraNear;\n\t\t\tfloat shadowCameraFar;\n\t\t};\n\t\tuniform PointLightShadow pointLightShadows[ NUM_POINT_LIGHT_SHADOWS ];\n\t#endif\n\tfloat texture2DCompare( sampler2D depths, vec2 uv, float compare ) {\n\t\treturn step( compare, unpackRGBAToDepth( texture2D( depths, uv ) ) );\n\t}\n\tvec2 texture2DDistribution( sampler2D shadow, vec2 uv ) {\n\t\treturn unpackRGBATo2Half( texture2D( shadow, uv ) );\n\t}\n\tfloat VSMShadow (sampler2D shadow, vec2 uv, float compare ){\n\t\tfloat occlusion = 1.0;\n\t\tvec2 distribution = texture2DDistribution( shadow, uv );\n\t\tfloat hard_shadow = step( compare , distribution.x );\n\t\tif (hard_shadow != 1.0 ) {\n\t\t\tfloat distance = compare - distribution.x ;\n\t\t\tfloat variance = max( 0.00000, distribution.y * distribution.y );\n\t\t\tfloat softness_probability = variance / (variance + distance * distance );\t\t\tsoftness_probability = clamp( ( softness_probability - 0.3 ) / ( 0.95 - 0.3 ), 0.0, 1.0 );\t\t\tocclusion = clamp( max( hard_shadow, softness_probability ), 0.0, 1.0 );\n\t\t}\n\t\treturn occlusion;\n\t}\n\tfloat getShadow( sampler2D shadowMap, vec2 shadowMapSize, float shadowBias, float shadowRadius, vec4 shadowCoord ) {\n\t\tfloat shadow = 1.0;\n\t\tshadowCoord.xyz /= shadowCoord.w;\n\t\tshadowCoord.z += shadowBias;\n\t\tbvec4 inFrustumVec = bvec4 ( shadowCoord.x >= 0.0, shadowCoord.x <= 1.0, shadowCoord.y >= 0.0, shadowCoord.y <= 1.0 );\n\t\tbool inFrustum = all( inFrustumVec );\n\t\tbvec2 frustumTestVec = bvec2( inFrustum, shadowCoord.z <= 1.0 );\n\t\tbool frustumTest = all( frustumTestVec );\n\t\tif ( frustumTest ) {\n\t\t#if defined( SHADOWMAP_TYPE_PCF )\n\t\t\tvec2 texelSize = vec2( 1.0 ) / shadowMapSize;\n\t\t\tfloat dx0 = - texelSize.x * shadowRadius;\n\t\t\tfloat dy0 = - texelSize.y * shadowRadius;\n\t\t\tfloat dx1 = + texelSize.x * shadowRadius;\n\t\t\tfloat dy1 = + texelSize.y * shadowRadius;\n\t\t\tfloat dx2 = dx0 / 2.0;\n\t\t\tfloat dy2 = dy0 / 2.0;\n\t\t\tfloat dx3 = dx1 / 2.0;\n\t\t\tfloat dy3 = dy1 / 2.0;\n\t\t\tshadow = (\n\t\t\t\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( dx0, dy0 ), shadowCoord.z ) +\n\t\t\t\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( 0.0, dy0 ), shadowCoord.z ) +\n\t\t\t\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( dx1, dy0 ), shadowCoord.z ) +\n\t\t\t\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( dx2, dy2 ), shadowCoord.z ) +\n\t\t\t\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( 0.0, dy2 ), shadowCoord.z ) +\n\t\t\t\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( dx3, dy2 ), shadowCoord.z ) +\n\t\t\t\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( dx0, 0.0 ), shadowCoord.z ) +\n\t\t\t\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( dx2, 0.0 ), shadowCoord.z ) +\n\t\t\t\ttexture2DCompare( shadowMap, shadowCoord.xy, shadowCoord.z ) +\n\t\t\t\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( dx3, 0.0 ), shadowCoord.z ) +\n\t\t\t\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( dx1, 0.0 ), shadowCoord.z ) +\n\t\t\t\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( dx2, dy3 ), shadowCoord.z ) +\n\t\t\t\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( 0.0, dy3 ), shadowCoord.z ) +\n\t\t\t\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( dx3, dy3 ), shadowCoord.z ) +\n\t\t\t\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( dx0, dy1 ), shadowCoord.z ) +\n\t\t\t\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( 0.0, dy1 ), shadowCoord.z ) +\n\t\t\t\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( dx1, dy1 ), shadowCoord.z )\n\t\t\t) * ( 1.0 / 17.0 );\n\t\t#elif defined( SHADOWMAP_TYPE_PCF_SOFT )\n\t\t\tvec2 texelSize = vec2( 1.0 ) / shadowMapSize;\n\t\t\tfloat dx = texelSize.x;\n\t\t\tfloat dy = texelSize.y;\n\t\t\tvec2 uv = shadowCoord.xy;\n\t\t\tvec2 f = fract( uv * shadowMapSize + 0.5 );\n\t\t\tuv -= f * texelSize;\n\t\t\tshadow = (\n\t\t\t\ttexture2DCompare( shadowMap, uv, shadowCoord.z ) +\n\t\t\t\ttexture2DCompare( shadowMap, uv + vec2( dx, 0.0 ), shadowCoord.z ) +\n\t\t\t\ttexture2DCompare( shadowMap, uv + vec2( 0.0, dy ), shadowCoord.z ) +\n\t\t\t\ttexture2DCompare( shadowMap, uv + texelSize, shadowCoord.z ) +\n\t\t\t\tmix( texture2DCompare( shadowMap, uv + vec2( -dx, 0.0 ), shadowCoord.z ), \n\t\t\t\t\t texture2DCompare( shadowMap, uv + vec2( 2.0 * dx, 0.0 ), shadowCoord.z ),\n\t\t\t\t\t f.x ) +\n\t\t\t\tmix( texture2DCompare( shadowMap, uv + vec2( -dx, dy ), shadowCoord.z ), \n\t\t\t\t\t texture2DCompare( shadowMap, uv + vec2( 2.0 * dx, dy ), shadowCoord.z ),\n\t\t\t\t\t f.x ) +\n\t\t\t\tmix( texture2DCompare( shadowMap, uv + vec2( 0.0, -dy ), shadowCoord.z ), \n\t\t\t\t\t texture2DCompare( shadowMap, uv + vec2( 0.0, 2.0 * dy ), shadowCoord.z ),\n\t\t\t\t\t f.y ) +\n\t\t\t\tmix( texture2DCompare( shadowMap, uv + vec2( dx, -dy ), shadowCoord.z ), \n\t\t\t\t\t texture2DCompare( shadowMap, uv + vec2( dx, 2.0 * dy ), shadowCoord.z ),\n\t\t\t\t\t f.y ) +\n\t\t\t\tmix( mix( texture2DCompare( shadowMap, uv + vec2( -dx, -dy ), shadowCoord.z ), \n\t\t\t\t\t\t texture2DCompare( shadowMap, uv + vec2( 2.0 * dx, -dy ), shadowCoord.z ),\n\t\t\t\t\t\t f.x ),\n\t\t\t\t\t mix( texture2DCompare( shadowMap, uv + vec2( -dx, 2.0 * dy ), shadowCoord.z ), \n\t\t\t\t\t\t texture2DCompare( shadowMap, uv + vec2( 2.0 * dx, 2.0 * dy ), shadowCoord.z ),\n\t\t\t\t\t\t f.x ),\n\t\t\t\t\t f.y )\n\t\t\t) * ( 1.0 / 9.0 );\n\t\t#elif defined( SHADOWMAP_TYPE_VSM )\n\t\t\tshadow = VSMShadow( shadowMap, shadowCoord.xy, shadowCoord.z );\n\t\t#else\n\t\t\tshadow = texture2DCompare( shadowMap, shadowCoord.xy, shadowCoord.z );\n\t\t#endif\n\t\t}\n\t\treturn shadow;\n\t}\n\tvec2 cubeToUV( vec3 v, float texelSizeY ) {\n\t\tvec3 absV = abs( v );\n\t\tfloat scaleToCube = 1.0 / max( absV.x, max( absV.y, absV.z ) );\n\t\tabsV *= scaleToCube;\n\t\tv *= scaleToCube * ( 1.0 - 2.0 * texelSizeY );\n\t\tvec2 planar = v.xy;\n\t\tfloat almostATexel = 1.5 * texelSizeY;\n\t\tfloat almostOne = 1.0 - almostATexel;\n\t\tif ( absV.z >= almostOne ) {\n\t\t\tif ( v.z > 0.0 )\n\t\t\t\tplanar.x = 4.0 - v.x;\n\t\t} else if ( absV.x >= almostOne ) {\n\t\t\tfloat signX = sign( v.x );\n\t\t\tplanar.x = v.z * signX + 2.0 * signX;\n\t\t} else if ( absV.y >= almostOne ) {\n\t\t\tfloat signY = sign( v.y );\n\t\t\tplanar.x = v.x + 2.0 * signY + 2.0;\n\t\t\tplanar.y = v.z * signY - 2.0;\n\t\t}\n\t\treturn vec2( 0.125, 0.25 ) * planar + vec2( 0.375, 0.75 );\n\t}\n\tfloat getPointShadow( sampler2D shadowMap, vec2 shadowMapSize, float shadowBias, float shadowRadius, vec4 shadowCoord, float shadowCameraNear, float shadowCameraFar ) {\n\t\tvec2 texelSize = vec2( 1.0 ) / ( shadowMapSize * vec2( 4.0, 2.0 ) );\n\t\tvec3 lightToPosition = shadowCoord.xyz;\n\t\tfloat dp = ( length( lightToPosition ) - shadowCameraNear ) / ( shadowCameraFar - shadowCameraNear );\t\tdp += shadowBias;\n\t\tvec3 bd3D = normalize( lightToPosition );\n\t\t#if defined( SHADOWMAP_TYPE_PCF ) || defined( SHADOWMAP_TYPE_PCF_SOFT ) || defined( SHADOWMAP_TYPE_VSM )\n\t\t\tvec2 offset = vec2( - 1, 1 ) * shadowRadius * texelSize.y;\n\t\t\treturn (\n\t\t\t\ttexture2DCompare( shadowMap, cubeToUV( bd3D + offset.xyy, texelSize.y ), dp ) +\n\t\t\t\ttexture2DCompare( shadowMap, cubeToUV( bd3D + offset.yyy, texelSize.y ), dp ) +\n\t\t\t\ttexture2DCompare( shadowMap, cubeToUV( bd3D + offset.xyx, texelSize.y ), dp ) +\n\t\t\t\ttexture2DCompare( shadowMap, cubeToUV( bd3D + offset.yyx, texelSize.y ), dp ) +\n\t\t\t\ttexture2DCompare( shadowMap, cubeToUV( bd3D, texelSize.y ), dp ) +\n\t\t\t\ttexture2DCompare( shadowMap, cubeToUV( bd3D + offset.xxy, texelSize.y ), dp ) +\n\t\t\t\ttexture2DCompare( shadowMap, cubeToUV( bd3D + offset.yxy, texelSize.y ), dp ) +\n\t\t\t\ttexture2DCompare( shadowMap, cubeToUV( bd3D + offset.xxx, texelSize.y ), dp ) +\n\t\t\t\ttexture2DCompare( shadowMap, cubeToUV( bd3D + offset.yxx, texelSize.y ), dp )\n\t\t\t) * ( 1.0 / 9.0 );\n\t\t#else\n\t\t\treturn texture2DCompare( shadowMap, cubeToUV( bd3D, texelSize.y ), dp );\n\t\t#endif\n\t}\n#endif", +shadowmap_pars_vertex:"#ifdef USE_SHADOWMAP\n\t#if NUM_DIR_LIGHT_SHADOWS > 0\n\t\tuniform mat4 directionalShadowMatrix[ NUM_DIR_LIGHT_SHADOWS ];\n\t\tvarying vec4 vDirectionalShadowCoord[ NUM_DIR_LIGHT_SHADOWS ];\n\t\tstruct DirectionalLightShadow {\n\t\t\tfloat shadowBias;\n\t\t\tfloat shadowNormalBias;\n\t\t\tfloat shadowRadius;\n\t\t\tvec2 shadowMapSize;\n\t\t};\n\t\tuniform DirectionalLightShadow directionalLightShadows[ NUM_DIR_LIGHT_SHADOWS ];\n\t#endif\n\t#if NUM_SPOT_LIGHT_SHADOWS > 0\n\t\tuniform mat4 spotShadowMatrix[ NUM_SPOT_LIGHT_SHADOWS ];\n\t\tvarying vec4 vSpotShadowCoord[ NUM_SPOT_LIGHT_SHADOWS ];\n\t\tstruct SpotLightShadow {\n\t\t\tfloat shadowBias;\n\t\t\tfloat shadowNormalBias;\n\t\t\tfloat shadowRadius;\n\t\t\tvec2 shadowMapSize;\n\t\t};\n\t\tuniform SpotLightShadow spotLightShadows[ NUM_SPOT_LIGHT_SHADOWS ];\n\t#endif\n\t#if NUM_POINT_LIGHT_SHADOWS > 0\n\t\tuniform mat4 pointShadowMatrix[ NUM_POINT_LIGHT_SHADOWS ];\n\t\tvarying vec4 vPointShadowCoord[ NUM_POINT_LIGHT_SHADOWS ];\n\t\tstruct PointLightShadow {\n\t\t\tfloat shadowBias;\n\t\t\tfloat shadowNormalBias;\n\t\t\tfloat shadowRadius;\n\t\t\tvec2 shadowMapSize;\n\t\t\tfloat shadowCameraNear;\n\t\t\tfloat shadowCameraFar;\n\t\t};\n\t\tuniform PointLightShadow pointLightShadows[ NUM_POINT_LIGHT_SHADOWS ];\n\t#endif\n#endif", +shadowmap_vertex:"#ifdef USE_SHADOWMAP\n\t#if NUM_DIR_LIGHT_SHADOWS > 0 || NUM_SPOT_LIGHT_SHADOWS > 0 || NUM_POINT_LIGHT_SHADOWS > 0\n\t\tvec3 shadowWorldNormal = inverseTransformDirection( transformedNormal, viewMatrix );\n\t\tvec4 shadowWorldPosition;\n\t#endif\n\t#if NUM_DIR_LIGHT_SHADOWS > 0\n\t#pragma unroll_loop_start\n\tfor ( int i = 0; i < NUM_DIR_LIGHT_SHADOWS; i ++ ) {\n\t\tshadowWorldPosition = worldPosition + vec4( shadowWorldNormal * directionalLightShadows[ i ].shadowNormalBias, 0 );\n\t\tvDirectionalShadowCoord[ i ] = directionalShadowMatrix[ i ] * shadowWorldPosition;\n\t}\n\t#pragma unroll_loop_end\n\t#endif\n\t#if NUM_SPOT_LIGHT_SHADOWS > 0\n\t#pragma unroll_loop_start\n\tfor ( int i = 0; i < NUM_SPOT_LIGHT_SHADOWS; i ++ ) {\n\t\tshadowWorldPosition = worldPosition + vec4( shadowWorldNormal * spotLightShadows[ i ].shadowNormalBias, 0 );\n\t\tvSpotShadowCoord[ i ] = spotShadowMatrix[ i ] * shadowWorldPosition;\n\t}\n\t#pragma unroll_loop_end\n\t#endif\n\t#if NUM_POINT_LIGHT_SHADOWS > 0\n\t#pragma unroll_loop_start\n\tfor ( int i = 0; i < NUM_POINT_LIGHT_SHADOWS; i ++ ) {\n\t\tshadowWorldPosition = worldPosition + vec4( shadowWorldNormal * pointLightShadows[ i ].shadowNormalBias, 0 );\n\t\tvPointShadowCoord[ i ] = pointShadowMatrix[ i ] * shadowWorldPosition;\n\t}\n\t#pragma unroll_loop_end\n\t#endif\n#endif", +shadowmask_pars_fragment:"float getShadowMask() {\n\tfloat shadow = 1.0;\n\t#ifdef USE_SHADOWMAP\n\t#if NUM_DIR_LIGHT_SHADOWS > 0\n\tDirectionalLightShadow directionalLight;\n\t#pragma unroll_loop_start\n\tfor ( int i = 0; i < NUM_DIR_LIGHT_SHADOWS; i ++ ) {\n\t\tdirectionalLight = directionalLightShadows[ i ];\n\t\tshadow *= receiveShadow ? getShadow( directionalShadowMap[ i ], directionalLight.shadowMapSize, directionalLight.shadowBias, directionalLight.shadowRadius, vDirectionalShadowCoord[ i ] ) : 1.0;\n\t}\n\t#pragma unroll_loop_end\n\t#endif\n\t#if NUM_SPOT_LIGHT_SHADOWS > 0\n\tSpotLightShadow spotLight;\n\t#pragma unroll_loop_start\n\tfor ( int i = 0; i < NUM_SPOT_LIGHT_SHADOWS; i ++ ) {\n\t\tspotLight = spotLightShadows[ i ];\n\t\tshadow *= receiveShadow ? getShadow( spotShadowMap[ i ], spotLight.shadowMapSize, spotLight.shadowBias, spotLight.shadowRadius, vSpotShadowCoord[ i ] ) : 1.0;\n\t}\n\t#pragma unroll_loop_end\n\t#endif\n\t#if NUM_POINT_LIGHT_SHADOWS > 0\n\tPointLightShadow pointLight;\n\t#pragma unroll_loop_start\n\tfor ( int i = 0; i < NUM_POINT_LIGHT_SHADOWS; i ++ ) {\n\t\tpointLight = pointLightShadows[ i ];\n\t\tshadow *= receiveShadow ? getPointShadow( pointShadowMap[ i ], pointLight.shadowMapSize, pointLight.shadowBias, pointLight.shadowRadius, vPointShadowCoord[ i ], pointLight.shadowCameraNear, pointLight.shadowCameraFar ) : 1.0;\n\t}\n\t#pragma unroll_loop_end\n\t#endif\n\t#endif\n\treturn shadow;\n}", +skinbase_vertex:"#ifdef USE_SKINNING\n\tmat4 boneMatX = getBoneMatrix( skinIndex.x );\n\tmat4 boneMatY = getBoneMatrix( skinIndex.y );\n\tmat4 boneMatZ = getBoneMatrix( skinIndex.z );\n\tmat4 boneMatW = getBoneMatrix( skinIndex.w );\n#endif",skinning_pars_vertex:"#ifdef USE_SKINNING\n\tuniform mat4 bindMatrix;\n\tuniform mat4 bindMatrixInverse;\n\t#ifdef BONE_TEXTURE\n\t\tuniform highp sampler2D boneTexture;\n\t\tuniform int boneTextureSize;\n\t\tmat4 getBoneMatrix( const in float i ) {\n\t\t\tfloat j = i * 4.0;\n\t\t\tfloat x = mod( j, float( boneTextureSize ) );\n\t\t\tfloat y = floor( j / float( boneTextureSize ) );\n\t\t\tfloat dx = 1.0 / float( boneTextureSize );\n\t\t\tfloat dy = 1.0 / float( boneTextureSize );\n\t\t\ty = dy * ( y + 0.5 );\n\t\t\tvec4 v1 = texture2D( boneTexture, vec2( dx * ( x + 0.5 ), y ) );\n\t\t\tvec4 v2 = texture2D( boneTexture, vec2( dx * ( x + 1.5 ), y ) );\n\t\t\tvec4 v3 = texture2D( boneTexture, vec2( dx * ( x + 2.5 ), y ) );\n\t\t\tvec4 v4 = texture2D( boneTexture, vec2( dx * ( x + 3.5 ), y ) );\n\t\t\tmat4 bone = mat4( v1, v2, v3, v4 );\n\t\t\treturn bone;\n\t\t}\n\t#else\n\t\tuniform mat4 boneMatrices[ MAX_BONES ];\n\t\tmat4 getBoneMatrix( const in float i ) {\n\t\t\tmat4 bone = boneMatrices[ int(i) ];\n\t\t\treturn bone;\n\t\t}\n\t#endif\n#endif", +skinning_vertex:"#ifdef USE_SKINNING\n\tvec4 skinVertex = bindMatrix * vec4( transformed, 1.0 );\n\tvec4 skinned = vec4( 0.0 );\n\tskinned += boneMatX * skinVertex * skinWeight.x;\n\tskinned += boneMatY * skinVertex * skinWeight.y;\n\tskinned += boneMatZ * skinVertex * skinWeight.z;\n\tskinned += boneMatW * skinVertex * skinWeight.w;\n\ttransformed = ( bindMatrixInverse * skinned ).xyz;\n#endif",skinnormal_vertex:"#ifdef USE_SKINNING\n\tmat4 skinMatrix = mat4( 0.0 );\n\tskinMatrix += skinWeight.x * boneMatX;\n\tskinMatrix += skinWeight.y * boneMatY;\n\tskinMatrix += skinWeight.z * boneMatZ;\n\tskinMatrix += skinWeight.w * boneMatW;\n\tskinMatrix = bindMatrixInverse * skinMatrix * bindMatrix;\n\tobjectNormal = vec4( skinMatrix * vec4( objectNormal, 0.0 ) ).xyz;\n\t#ifdef USE_TANGENT\n\t\tobjectTangent = vec4( skinMatrix * vec4( objectTangent, 0.0 ) ).xyz;\n\t#endif\n#endif", +specularmap_fragment:"float specularStrength;\n#ifdef USE_SPECULARMAP\n\tvec4 texelSpecular = texture2D( specularMap, vUv );\n\tspecularStrength = texelSpecular.r;\n#else\n\tspecularStrength = 1.0;\n#endif",specularmap_pars_fragment:"#ifdef USE_SPECULARMAP\n\tuniform sampler2D specularMap;\n#endif",tonemapping_fragment:"#if defined( TONE_MAPPING )\n\tgl_FragColor.rgb = toneMapping( gl_FragColor.rgb );\n#endif",tonemapping_pars_fragment:"#ifndef saturate\n#define saturate(a) clamp( a, 0.0, 1.0 )\n#endif\nuniform float toneMappingExposure;\nvec3 LinearToneMapping( vec3 color ) {\n\treturn toneMappingExposure * color;\n}\nvec3 ReinhardToneMapping( vec3 color ) {\n\tcolor *= toneMappingExposure;\n\treturn saturate( color / ( vec3( 1.0 ) + color ) );\n}\nvec3 OptimizedCineonToneMapping( vec3 color ) {\n\tcolor *= toneMappingExposure;\n\tcolor = max( vec3( 0.0 ), color - 0.004 );\n\treturn pow( ( color * ( 6.2 * color + 0.5 ) ) / ( color * ( 6.2 * color + 1.7 ) + 0.06 ), vec3( 2.2 ) );\n}\nvec3 RRTAndODTFit( vec3 v ) {\n\tvec3 a = v * ( v + 0.0245786 ) - 0.000090537;\n\tvec3 b = v * ( 0.983729 * v + 0.4329510 ) + 0.238081;\n\treturn a / b;\n}\nvec3 ACESFilmicToneMapping( vec3 color ) {\n\tconst mat3 ACESInputMat = mat3(\n\t\tvec3( 0.59719, 0.07600, 0.02840 ),\t\tvec3( 0.35458, 0.90834, 0.13383 ),\n\t\tvec3( 0.04823, 0.01566, 0.83777 )\n\t);\n\tconst mat3 ACESOutputMat = mat3(\n\t\tvec3( 1.60475, -0.10208, -0.00327 ),\t\tvec3( -0.53108, 1.10813, -0.07276 ),\n\t\tvec3( -0.07367, -0.00605, 1.07602 )\n\t);\n\tcolor *= toneMappingExposure / 0.6;\n\tcolor = ACESInputMat * color;\n\tcolor = RRTAndODTFit( color );\n\tcolor = ACESOutputMat * color;\n\treturn saturate( color );\n}\nvec3 CustomToneMapping( vec3 color ) { return color; }", +uv_pars_fragment:"#if ( defined( USE_UV ) && ! defined( UVS_VERTEX_ONLY ) )\n\tvarying vec2 vUv;\n#endif",uv_pars_vertex:"#ifdef USE_UV\n\t#ifdef UVS_VERTEX_ONLY\n\t\tvec2 vUv;\n\t#else\n\t\tvarying vec2 vUv;\n\t#endif\n\tuniform mat3 uvTransform;\n#endif",uv_vertex:"#ifdef USE_UV\n\tvUv = ( uvTransform * vec3( uv, 1 ) ).xy;\n#endif",uv2_pars_fragment:"#if defined( USE_LIGHTMAP ) || defined( USE_AOMAP )\n\tvarying vec2 vUv2;\n#endif",uv2_pars_vertex:"#if defined( USE_LIGHTMAP ) || defined( USE_AOMAP )\n\tattribute vec2 uv2;\n\tvarying vec2 vUv2;\n\tuniform mat3 uv2Transform;\n#endif", +uv2_vertex:"#if defined( USE_LIGHTMAP ) || defined( USE_AOMAP )\n\tvUv2 = ( uv2Transform * vec3( uv2, 1 ) ).xy;\n#endif",worldpos_vertex:"#if defined( USE_ENVMAP ) || defined( DISTANCE ) || defined ( USE_SHADOWMAP )\n\tvec4 worldPosition = vec4( transformed, 1.0 );\n\t#ifdef USE_INSTANCING\n\t\tworldPosition = instanceMatrix * worldPosition;\n\t#endif\n\tworldPosition = modelMatrix * worldPosition;\n#endif",background_frag:"uniform sampler2D t2D;\nvarying vec2 vUv;\nvoid main() {\n\tvec4 texColor = texture2D( t2D, vUv );\n\tgl_FragColor = mapTexelToLinear( texColor );\n\t#include \n\t#include \n}", +background_vert:"varying vec2 vUv;\nuniform mat3 uvTransform;\nvoid main() {\n\tvUv = ( uvTransform * vec3( uv, 1 ) ).xy;\n\tgl_Position = vec4( position.xy, 1.0, 1.0 );\n}",cube_frag:"#include \nuniform float opacity;\nvarying vec3 vWorldDirection;\n#include \nvoid main() {\n\tvec3 vReflect = vWorldDirection;\n\t#include \n\tgl_FragColor = envColor;\n\tgl_FragColor.a *= opacity;\n\t#include \n\t#include \n}", +cube_vert:"varying vec3 vWorldDirection;\n#include \nvoid main() {\n\tvWorldDirection = transformDirection( position, modelMatrix );\n\t#include \n\t#include \n\tgl_Position.z = gl_Position.w;\n}",depth_frag:"#if DEPTH_PACKING == 3200\n\tuniform float opacity;\n#endif\n#include \n#include \n#include \n#include \n#include \n#include \n#include \nvarying vec2 vHighPrecisionZW;\nvoid main() {\n\t#include \n\tvec4 diffuseColor = vec4( 1.0 );\n\t#if DEPTH_PACKING == 3200\n\t\tdiffuseColor.a = opacity;\n\t#endif\n\t#include \n\t#include \n\t#include \n\t#include \n\tfloat fragCoordZ = 0.5 * vHighPrecisionZW[0] / vHighPrecisionZW[1] + 0.5;\n\t#if DEPTH_PACKING == 3200\n\t\tgl_FragColor = vec4( vec3( 1.0 - fragCoordZ ), opacity );\n\t#elif DEPTH_PACKING == 3201\n\t\tgl_FragColor = packDepthToRGBA( fragCoordZ );\n\t#endif\n}", +depth_vert:"#include \n#include \n#include \n#include \n#include \n#include \n#include \nvarying vec2 vHighPrecisionZW;\nvoid main() {\n\t#include \n\t#include \n\t#ifdef USE_DISPLACEMENTMAP\n\t\t#include \n\t\t#include \n\t\t#include \n\t#endif\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\tvHighPrecisionZW = gl_Position.zw;\n}", +distanceRGBA_frag:"#define DISTANCE\nuniform vec3 referencePosition;\nuniform float nearDistance;\nuniform float farDistance;\nvarying vec3 vWorldPosition;\n#include \n#include \n#include \n#include \n#include \n#include \nvoid main () {\n\t#include \n\tvec4 diffuseColor = vec4( 1.0 );\n\t#include \n\t#include \n\t#include \n\tfloat dist = length( vWorldPosition - referencePosition );\n\tdist = ( dist - nearDistance ) / ( farDistance - nearDistance );\n\tdist = saturate( dist );\n\tgl_FragColor = packDepthToRGBA( dist );\n}", +distanceRGBA_vert:"#define DISTANCE\nvarying vec3 vWorldPosition;\n#include \n#include \n#include \n#include \n#include \n#include \nvoid main() {\n\t#include \n\t#include \n\t#ifdef USE_DISPLACEMENTMAP\n\t\t#include \n\t\t#include \n\t\t#include \n\t#endif\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\tvWorldPosition = worldPosition.xyz;\n}", +equirect_frag:"uniform sampler2D tEquirect;\nvarying vec3 vWorldDirection;\n#include \nvoid main() {\n\tvec3 direction = normalize( vWorldDirection );\n\tvec2 sampleUV = equirectUv( direction );\n\tvec4 texColor = texture2D( tEquirect, sampleUV );\n\tgl_FragColor = mapTexelToLinear( texColor );\n\t#include \n\t#include \n}",equirect_vert:"varying vec3 vWorldDirection;\n#include \nvoid main() {\n\tvWorldDirection = transformDirection( position, modelMatrix );\n\t#include \n\t#include \n}", +linedashed_frag:"uniform vec3 diffuse;\nuniform float opacity;\nuniform float dashSize;\nuniform float totalSize;\nvarying float vLineDistance;\n#include \n#include \n#include \n#include \n#include \nvoid main() {\n\t#include \n\tif ( mod( vLineDistance, totalSize ) > dashSize ) {\n\t\tdiscard;\n\t}\n\tvec3 outgoingLight = vec3( 0.0 );\n\tvec4 diffuseColor = vec4( diffuse, opacity );\n\t#include \n\t#include \n\toutgoingLight = diffuseColor.rgb;\n\tgl_FragColor = vec4( outgoingLight, diffuseColor.a );\n\t#include \n\t#include \n\t#include \n\t#include \n}", +linedashed_vert:"uniform float scale;\nattribute float lineDistance;\nvarying float vLineDistance;\n#include \n#include \n#include \n#include \n#include \n#include \nvoid main() {\n\tvLineDistance = scale * lineDistance;\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n}", +meshbasic_frag:"uniform vec3 diffuse;\nuniform float opacity;\n#ifndef FLAT_SHADED\n\tvarying vec3 vNormal;\n#endif\n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \nvoid main() {\n\t#include \n\tvec4 diffuseColor = vec4( diffuse, opacity );\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\tReflectedLight reflectedLight = ReflectedLight( vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ) );\n\t#ifdef USE_LIGHTMAP\n\t\n\t\tvec4 lightMapTexel= texture2D( lightMap, vUv2 );\n\t\treflectedLight.indirectDiffuse += lightMapTexelToLinear( lightMapTexel ).rgb * lightMapIntensity;\n\t#else\n\t\treflectedLight.indirectDiffuse += vec3( 1.0 );\n\t#endif\n\t#include \n\treflectedLight.indirectDiffuse *= diffuseColor.rgb;\n\tvec3 outgoingLight = reflectedLight.indirectDiffuse;\n\t#include \n\tgl_FragColor = vec4( outgoingLight, diffuseColor.a );\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n}", +meshbasic_vert:"#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \nvoid main() {\n\t#include \n\t#include \n\t#include \n\t#include \n\t#ifdef USE_ENVMAP\n\t#include \n\t#include \n\t#include \n\t#include \n\t#endif\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n}", +meshlambert_frag:"uniform vec3 diffuse;\nuniform vec3 emissive;\nuniform float opacity;\nvarying vec3 vLightFront;\nvarying vec3 vIndirectFront;\n#ifdef DOUBLE_SIDED\n\tvarying vec3 vLightBack;\n\tvarying vec3 vIndirectBack;\n#endif\n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \nvoid main() {\n\t#include \n\tvec4 diffuseColor = vec4( diffuse, opacity );\n\tReflectedLight reflectedLight = ReflectedLight( vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ) );\n\tvec3 totalEmissiveRadiance = emissive;\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#ifdef DOUBLE_SIDED\n\t\treflectedLight.indirectDiffuse += ( gl_FrontFacing ) ? vIndirectFront : vIndirectBack;\n\t#else\n\t\treflectedLight.indirectDiffuse += vIndirectFront;\n\t#endif\n\t#include \n\treflectedLight.indirectDiffuse *= BRDF_Diffuse_Lambert( diffuseColor.rgb );\n\t#ifdef DOUBLE_SIDED\n\t\treflectedLight.directDiffuse = ( gl_FrontFacing ) ? vLightFront : vLightBack;\n\t#else\n\t\treflectedLight.directDiffuse = vLightFront;\n\t#endif\n\treflectedLight.directDiffuse *= BRDF_Diffuse_Lambert( diffuseColor.rgb ) * getShadowMask();\n\t#include \n\tvec3 outgoingLight = reflectedLight.directDiffuse + reflectedLight.indirectDiffuse + totalEmissiveRadiance;\n\t#include \n\tgl_FragColor = vec4( outgoingLight, diffuseColor.a );\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n}", +meshlambert_vert:"#define LAMBERT\nvarying vec3 vLightFront;\nvarying vec3 vIndirectFront;\n#ifdef DOUBLE_SIDED\n\tvarying vec3 vLightBack;\n\tvarying vec3 vIndirectBack;\n#endif\n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \nvoid main() {\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n}", +meshmatcap_frag:"#define MATCAP\nuniform vec3 diffuse;\nuniform float opacity;\nuniform sampler2D matcap;\nvarying vec3 vViewPosition;\n#ifndef FLAT_SHADED\n\tvarying vec3 vNormal;\n#endif\n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \nvoid main() {\n\t#include \n\tvec4 diffuseColor = vec4( diffuse, opacity );\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\tvec3 viewDir = normalize( vViewPosition );\n\tvec3 x = normalize( vec3( viewDir.z, 0.0, - viewDir.x ) );\n\tvec3 y = cross( viewDir, x );\n\tvec2 uv = vec2( dot( x, normal ), dot( y, normal ) ) * 0.495 + 0.5;\n\t#ifdef USE_MATCAP\n\t\tvec4 matcapColor = texture2D( matcap, uv );\n\t\tmatcapColor = matcapTexelToLinear( matcapColor );\n\t#else\n\t\tvec4 matcapColor = vec4( 1.0 );\n\t#endif\n\tvec3 outgoingLight = diffuseColor.rgb * matcapColor.rgb;\n\tgl_FragColor = vec4( outgoingLight, diffuseColor.a );\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n}", +meshmatcap_vert:"#define MATCAP\nvarying vec3 vViewPosition;\n#ifndef FLAT_SHADED\n\tvarying vec3 vNormal;\n#endif\n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \nvoid main() {\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#ifndef FLAT_SHADED\n\t\tvNormal = normalize( transformedNormal );\n\t#endif\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\tvViewPosition = - mvPosition.xyz;\n}", +meshtoon_frag:"#define TOON\nuniform vec3 diffuse;\nuniform vec3 emissive;\nuniform float opacity;\n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \nvoid main() {\n\t#include \n\tvec4 diffuseColor = vec4( diffuse, opacity );\n\tReflectedLight reflectedLight = ReflectedLight( vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ) );\n\tvec3 totalEmissiveRadiance = emissive;\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\tvec3 outgoingLight = reflectedLight.directDiffuse + reflectedLight.indirectDiffuse + totalEmissiveRadiance;\n\tgl_FragColor = vec4( outgoingLight, diffuseColor.a );\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n}", +meshtoon_vert:"#define TOON\nvarying vec3 vViewPosition;\n#ifndef FLAT_SHADED\n\tvarying vec3 vNormal;\n#endif\n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \nvoid main() {\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n#ifndef FLAT_SHADED\n\tvNormal = normalize( transformedNormal );\n#endif\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\tvViewPosition = - mvPosition.xyz;\n\t#include \n\t#include \n\t#include \n}", +meshphong_frag:"#define PHONG\nuniform vec3 diffuse;\nuniform vec3 emissive;\nuniform vec3 specular;\nuniform float shininess;\nuniform float opacity;\n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \nvoid main() {\n\t#include \n\tvec4 diffuseColor = vec4( diffuse, opacity );\n\tReflectedLight reflectedLight = ReflectedLight( vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ) );\n\tvec3 totalEmissiveRadiance = emissive;\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\tvec3 outgoingLight = reflectedLight.directDiffuse + reflectedLight.indirectDiffuse + reflectedLight.directSpecular + reflectedLight.indirectSpecular + totalEmissiveRadiance;\n\t#include \n\tgl_FragColor = vec4( outgoingLight, diffuseColor.a );\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n}", +meshphong_vert:"#define PHONG\nvarying vec3 vViewPosition;\n#ifndef FLAT_SHADED\n\tvarying vec3 vNormal;\n#endif\n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \nvoid main() {\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n#ifndef FLAT_SHADED\n\tvNormal = normalize( transformedNormal );\n#endif\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\tvViewPosition = - mvPosition.xyz;\n\t#include \n\t#include \n\t#include \n\t#include \n}", +meshphysical_frag:"#define STANDARD\n#ifdef PHYSICAL\n\t#define REFLECTIVITY\n\t#define CLEARCOAT\n\t#define TRANSPARENCY\n#endif\nuniform vec3 diffuse;\nuniform vec3 emissive;\nuniform float roughness;\nuniform float metalness;\nuniform float opacity;\n#ifdef TRANSPARENCY\n\tuniform float transparency;\n#endif\n#ifdef REFLECTIVITY\n\tuniform float reflectivity;\n#endif\n#ifdef CLEARCOAT\n\tuniform float clearcoat;\n\tuniform float clearcoatRoughness;\n#endif\n#ifdef USE_SHEEN\n\tuniform vec3 sheen;\n#endif\nvarying vec3 vViewPosition;\n#ifndef FLAT_SHADED\n\tvarying vec3 vNormal;\n\t#ifdef USE_TANGENT\n\t\tvarying vec3 vTangent;\n\t\tvarying vec3 vBitangent;\n\t#endif\n#endif\n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \nvoid main() {\n\t#include \n\tvec4 diffuseColor = vec4( diffuse, opacity );\n\tReflectedLight reflectedLight = ReflectedLight( vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ) );\n\tvec3 totalEmissiveRadiance = emissive;\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\tvec3 outgoingLight = reflectedLight.directDiffuse + reflectedLight.indirectDiffuse + reflectedLight.directSpecular + reflectedLight.indirectSpecular + totalEmissiveRadiance;\n\t#ifdef TRANSPARENCY\n\t\tdiffuseColor.a *= saturate( 1. - transparency + linearToRelativeLuminance( reflectedLight.directSpecular + reflectedLight.indirectSpecular ) );\n\t#endif\n\tgl_FragColor = vec4( outgoingLight, diffuseColor.a );\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n}", +meshphysical_vert:"#define STANDARD\nvarying vec3 vViewPosition;\n#ifndef FLAT_SHADED\n\tvarying vec3 vNormal;\n\t#ifdef USE_TANGENT\n\t\tvarying vec3 vTangent;\n\t\tvarying vec3 vBitangent;\n\t#endif\n#endif\n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \nvoid main() {\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n#ifndef FLAT_SHADED\n\tvNormal = normalize( transformedNormal );\n\t#ifdef USE_TANGENT\n\t\tvTangent = normalize( transformedTangent );\n\t\tvBitangent = normalize( cross( vNormal, vTangent ) * tangent.w );\n\t#endif\n#endif\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\tvViewPosition = - mvPosition.xyz;\n\t#include \n\t#include \n\t#include \n}", +normal_frag:"#define NORMAL\nuniform float opacity;\n#if defined( FLAT_SHADED ) || defined( USE_BUMPMAP ) || defined( TANGENTSPACE_NORMALMAP )\n\tvarying vec3 vViewPosition;\n#endif\n#ifndef FLAT_SHADED\n\tvarying vec3 vNormal;\n\t#ifdef USE_TANGENT\n\t\tvarying vec3 vTangent;\n\t\tvarying vec3 vBitangent;\n\t#endif\n#endif\n#include \n#include \n#include \n#include \n#include \n#include \nvoid main() {\n\t#include \n\t#include \n\t#include \n\t#include \n\tgl_FragColor = vec4( packNormalToRGB( normal ), opacity );\n}", +normal_vert:"#define NORMAL\n#if defined( FLAT_SHADED ) || defined( USE_BUMPMAP ) || defined( TANGENTSPACE_NORMALMAP )\n\tvarying vec3 vViewPosition;\n#endif\n#ifndef FLAT_SHADED\n\tvarying vec3 vNormal;\n\t#ifdef USE_TANGENT\n\t\tvarying vec3 vTangent;\n\t\tvarying vec3 vBitangent;\n\t#endif\n#endif\n#include \n#include \n#include \n#include \n#include \n#include \n#include \nvoid main() {\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n#ifndef FLAT_SHADED\n\tvNormal = normalize( transformedNormal );\n\t#ifdef USE_TANGENT\n\t\tvTangent = normalize( transformedTangent );\n\t\tvBitangent = normalize( cross( vNormal, vTangent ) * tangent.w );\n\t#endif\n#endif\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n#if defined( FLAT_SHADED ) || defined( USE_BUMPMAP ) || defined( TANGENTSPACE_NORMALMAP )\n\tvViewPosition = - mvPosition.xyz;\n#endif\n}", +points_frag:"uniform vec3 diffuse;\nuniform float opacity;\n#include \n#include \n#include \n#include \n#include \n#include \nvoid main() {\n\t#include \n\tvec3 outgoingLight = vec3( 0.0 );\n\tvec4 diffuseColor = vec4( diffuse, opacity );\n\t#include \n\t#include \n\t#include \n\t#include \n\toutgoingLight = diffuseColor.rgb;\n\tgl_FragColor = vec4( outgoingLight, diffuseColor.a );\n\t#include \n\t#include \n\t#include \n\t#include \n}", +points_vert:"uniform float size;\nuniform float scale;\n#include \n#include \n#include \n#include \n#include \n#include \nvoid main() {\n\t#include \n\t#include \n\t#include \n\t#include \n\tgl_PointSize = size;\n\t#ifdef USE_SIZEATTENUATION\n\t\tbool isPerspective = isPerspectiveMatrix( projectionMatrix );\n\t\tif ( isPerspective ) gl_PointSize *= ( scale / - mvPosition.z );\n\t#endif\n\t#include \n\t#include \n\t#include \n\t#include \n}", +shadow_frag:"uniform vec3 color;\nuniform float opacity;\n#include \n#include \n#include \n#include \n#include \n#include \n#include \nvoid main() {\n\tgl_FragColor = vec4( color, opacity * ( 1.0 - getShadowMask() ) );\n\t#include \n\t#include \n\t#include \n}",shadow_vert:"#include \n#include \n#include \nvoid main() {\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n}", +sprite_frag:"uniform vec3 diffuse;\nuniform float opacity;\n#include \n#include \n#include \n#include \n#include \n#include \n#include \nvoid main() {\n\t#include \n\tvec3 outgoingLight = vec3( 0.0 );\n\tvec4 diffuseColor = vec4( diffuse, opacity );\n\t#include \n\t#include \n\t#include \n\t#include \n\toutgoingLight = diffuseColor.rgb;\n\tgl_FragColor = vec4( outgoingLight, diffuseColor.a );\n\t#include \n\t#include \n\t#include \n}", +sprite_vert:"uniform float rotation;\nuniform vec2 center;\n#include \n#include \n#include \n#include \n#include \nvoid main() {\n\t#include \n\tvec4 mvPosition = modelViewMatrix * vec4( 0.0, 0.0, 0.0, 1.0 );\n\tvec2 scale;\n\tscale.x = length( vec3( modelMatrix[ 0 ].x, modelMatrix[ 0 ].y, modelMatrix[ 0 ].z ) );\n\tscale.y = length( vec3( modelMatrix[ 1 ].x, modelMatrix[ 1 ].y, modelMatrix[ 1 ].z ) );\n\t#ifndef USE_SIZEATTENUATION\n\t\tbool isPerspective = isPerspectiveMatrix( projectionMatrix );\n\t\tif ( isPerspective ) scale *= - mvPosition.z;\n\t#endif\n\tvec2 alignedPosition = ( position.xy - ( center - vec2( 0.5 ) ) ) * scale;\n\tvec2 rotatedPosition;\n\trotatedPosition.x = cos( rotation ) * alignedPosition.x - sin( rotation ) * alignedPosition.y;\n\trotatedPosition.y = sin( rotation ) * alignedPosition.x + cos( rotation ) * alignedPosition.y;\n\tmvPosition.xy += rotatedPosition;\n\tgl_Position = projectionMatrix * mvPosition;\n\t#include \n\t#include \n\t#include \n}"}, +eb={basic:{uniforms:ya([D.common,D.specularmap,D.envmap,D.aomap,D.lightmap,D.fog]),vertexShader:M.meshbasic_vert,fragmentShader:M.meshbasic_frag},lambert:{uniforms:ya([D.common,D.specularmap,D.envmap,D.aomap,D.lightmap,D.emissivemap,D.fog,D.lights,{emissive:{value:new E(0)}}]),vertexShader:M.meshlambert_vert,fragmentShader:M.meshlambert_frag},phong:{uniforms:ya([D.common,D.specularmap,D.envmap,D.aomap,D.lightmap,D.emissivemap,D.bumpmap,D.normalmap,D.displacementmap,D.fog,D.lights,{emissive:{value:new E(0)}, +specular:{value:new E(1118481)},shininess:{value:30}}]),vertexShader:M.meshphong_vert,fragmentShader:M.meshphong_frag},standard:{uniforms:ya([D.common,D.envmap,D.aomap,D.lightmap,D.emissivemap,D.bumpmap,D.normalmap,D.displacementmap,D.roughnessmap,D.metalnessmap,D.fog,D.lights,{emissive:{value:new E(0)},roughness:{value:1},metalness:{value:0},envMapIntensity:{value:1}}]),vertexShader:M.meshphysical_vert,fragmentShader:M.meshphysical_frag},toon:{uniforms:ya([D.common,D.aomap,D.lightmap,D.emissivemap, +D.bumpmap,D.normalmap,D.displacementmap,D.gradientmap,D.fog,D.lights,{emissive:{value:new E(0)}}]),vertexShader:M.meshtoon_vert,fragmentShader:M.meshtoon_frag},matcap:{uniforms:ya([D.common,D.bumpmap,D.normalmap,D.displacementmap,D.fog,{matcap:{value:null}}]),vertexShader:M.meshmatcap_vert,fragmentShader:M.meshmatcap_frag},points:{uniforms:ya([D.points,D.fog]),vertexShader:M.points_vert,fragmentShader:M.points_frag},dashed:{uniforms:ya([D.common,D.fog,{scale:{value:1},dashSize:{value:1},totalSize:{value:2}}]), +vertexShader:M.linedashed_vert,fragmentShader:M.linedashed_frag},depth:{uniforms:ya([D.common,D.displacementmap]),vertexShader:M.depth_vert,fragmentShader:M.depth_frag},normal:{uniforms:ya([D.common,D.bumpmap,D.normalmap,D.displacementmap,{opacity:{value:1}}]),vertexShader:M.normal_vert,fragmentShader:M.normal_frag},sprite:{uniforms:ya([D.sprite,D.fog]),vertexShader:M.sprite_vert,fragmentShader:M.sprite_frag},background:{uniforms:{uvTransform:{value:new za},t2D:{value:null}},vertexShader:M.background_vert, +fragmentShader:M.background_frag},cube:{uniforms:ya([D.envmap,{opacity:{value:1}}]),vertexShader:M.cube_vert,fragmentShader:M.cube_frag},equirect:{uniforms:{tEquirect:{value:null}},vertexShader:M.equirect_vert,fragmentShader:M.equirect_frag},distanceRGBA:{uniforms:ya([D.common,D.displacementmap,{referencePosition:{value:new n},nearDistance:{value:1},farDistance:{value:1E3}}]),vertexShader:M.distanceRGBA_vert,fragmentShader:M.distanceRGBA_frag},shadow:{uniforms:ya([D.lights,D.fog,{color:{value:new E(0)}, +opacity:{value:1}}]),vertexShader:M.shadow_vert,fragmentShader:M.shadow_frag}};eb.physical={uniforms:ya([eb.standard.uniforms,{clearcoat:{value:0},clearcoatMap:{value:null},clearcoatRoughness:{value:0},clearcoatRoughnessMap:{value:null},clearcoatNormalScale:{value:new u(1,1)},clearcoatNormalMap:{value:null},sheen:{value:new E(0)},transparency:{value:0}}]),vertexShader:M.meshphysical_vert,fragmentShader:M.meshphysical_frag};ob.prototype=Object.create(W.prototype);ob.prototype.constructor=ob;ob.prototype.isCubeTexture= +!0;Object.defineProperty(ob.prototype,"images",{get:function(){return this.image},set:function(a){this.image=a}});Gc.prototype=Object.create(W.prototype);Gc.prototype.constructor=Gc;Gc.prototype.isDataTexture2DArray=!0;Hc.prototype=Object.create(W.prototype);Hc.prototype.constructor=Hc;Hc.prototype.isDataTexture3D=!0;var Dh=new W,Hj=new Gc,Jj=new Hc,Eh=new ob,xh=[],zh=[],Ch=new Float32Array(16),Bh=new Float32Array(9),Ah=new Float32Array(4);Fh.prototype.updateCache=function(a){var b=this.cache;a instanceof +Float32Array&&b.length!==a.length&&(this.cache=new Float32Array(a.length));Aa(b,a)};Gh.prototype.setValue=function(a,b,c){for(var d=this.seq,e=0,f=d.length;e!==f;++e){var g=d[e];g.setValue(a,b[g.id],c)}};var hg=/([\w\d_]+)(\])?(\[|\.)?/g;Db.prototype.setValue=function(a,b,c,d){b=this.map[b];void 0!==b&&b.setValue(a,c,d)};Db.prototype.setOptional=function(a,b,c){b=b[c];void 0!==b&&this.setValue(a,c,b)};Db.upload=function(a,b,c,d){for(var e=0,f=b.length;e!==f;++e){var g=b[e],h=c[g.id];!1!==h.needsUpdate&& +g.setValue(a,h.value,d)}};Db.seqWithValue=function(a,b){for(var c=[],d=0,e=a.length;d!==e;++d){var f=a[d];f.id in b&&c.push(f)}return c};var ok=0,jg=/^[ \t]*#include +<([\w\d./]+)>/gm,Ph=/#pragma unroll_loop[\s]+?for \( int i = (\d+); i < (\d+); i \+\+ \) \{([\s\S]+?)(?=\})\}/g,Oh=/#pragma unroll_loop_start[\s]+?for \( int i = (\d+); i < (\d+); i \+\+ \) \{([\s\S]+?)(?=\})\}[\s]+?#pragma unroll_loop_end/g,yk=0;Eb.prototype=Object.create(K.prototype);Eb.prototype.constructor=Eb;Eb.prototype.isMeshDepthMaterial= +!0;Eb.prototype.copy=function(a){K.prototype.copy.call(this,a);this.depthPacking=a.depthPacking;this.skinning=a.skinning;this.morphTargets=a.morphTargets;this.map=a.map;this.alphaMap=a.alphaMap;this.displacementMap=a.displacementMap;this.displacementScale=a.displacementScale;this.displacementBias=a.displacementBias;this.wireframe=a.wireframe;this.wireframeLinewidth=a.wireframeLinewidth;return this};Fb.prototype=Object.create(K.prototype);Fb.prototype.constructor=Fb;Fb.prototype.isMeshDistanceMaterial= +!0;Fb.prototype.copy=function(a){K.prototype.copy.call(this,a);this.referencePosition.copy(a.referencePosition);this.nearDistance=a.nearDistance;this.farDistance=a.farDistance;this.skinning=a.skinning;this.morphTargets=a.morphTargets;this.map=a.map;this.alphaMap=a.alphaMap;this.displacementMap=a.displacementMap;this.displacementScale=a.displacementScale;this.displacementBias=a.displacementBias;return this};Le.prototype=Object.assign(Object.create(ma.prototype),{constructor:Le,isArrayCamera:!0});Jc.prototype= +Object.assign(Object.create(x.prototype),{constructor:Jc,isGroup:!0});Object.assign(Me.prototype,{constructor:Me,getTargetRaySpace:function(){null===this._targetRay&&(this._targetRay=new Jc,this._targetRay.matrixAutoUpdate=!1,this._targetRay.visible=!1);return this._targetRay},getGripSpace:function(){null===this._grip&&(this._grip=new Jc,this._grip.matrixAutoUpdate=!1,this._grip.visible=!1);return this._grip},dispatchEvent:function(a){null!==this._targetRay&&this._targetRay.dispatchEvent(a);null!== +this._grip&&this._grip.dispatchEvent(a);return this},disconnect:function(a){this.dispatchEvent({type:"disconnected",data:a});null!==this._targetRay&&(this._targetRay.visible=!1);null!==this._grip&&(this._grip.visible=!1);return this},update:function(a,b,c){var d=null,e=null,f=this._targetRay,g=this._grip;a&&(null!==f&&(d=b.getPose(a.targetRaySpace,c),null!==d&&(f.matrix.fromArray(d.transform.matrix),f.matrix.decompose(f.position,f.rotation,f.scale))),null!==g&&a.gripSpace&&(e=b.getPose(a.gripSpace, +c),null!==e&&(g.matrix.fromArray(e.transform.matrix),g.matrix.decompose(g.position,g.rotation,g.scale))));null!==f&&(f.visible=null!==d);null!==g&&(g.visible=null!==e);return this}});Object.assign(Vh.prototype,qa.prototype);ng.prototype=Object.assign(Object.create(Kd.prototype),{constructor:ng,isWebGL1Renderer:!0});Object.assign(Ne.prototype,{isFogExp2:!0,clone:function(){return new Ne(this.color,this.density)},toJSON:function(){return{type:"FogExp2",color:this.color.getHex(),density:this.density}}}); +Object.assign(Oe.prototype,{isFog:!0,clone:function(){return new Oe(this.color,this.near,this.far)},toJSON:function(){return{type:"Fog",color:this.color.getHex(),near:this.near,far:this.far}}});Object.defineProperty(Ia.prototype,"needsUpdate",{set:function(a){!0===a&&this.version++}});Object.assign(Ia.prototype,{isInterleavedBuffer:!0,onUploadCallback:function(){},setUsage:function(a){this.usage=a;return this},copy:function(a){this.array=new a.array.constructor(a.array);this.count=a.count;this.stride= +a.stride;this.usage=a.usage;return this},copyAt:function(a,b,c){a*=this.stride;c*=b.stride;for(var d=0,e=this.stride;da.far||b.push({distance:e,point:xe.clone(),uv:ra.getUV(xe,Kf,ye,Lf,Ei,jh,Fi,new u),face:null,object:this})},copy:function(a){x.prototype.copy.call(this,a);void 0!== +a.center&&this.center.copy(a.center);this.material=a.material;return this}});var Mf=new n,Gi=new n;Nd.prototype=Object.assign(Object.create(x.prototype),{constructor:Nd,isLOD:!0,copy:function(a){x.prototype.copy.call(this,a,!1);for(var b=a.levels,c=0,d=b.length;c=b[d].distance)b[d-1].object.visible=!1,b[d].object.visible=!0;else break;for(this._currentLevel=d-1;df;f++)if(l=c.getComponent(f),0!==l){var k=b.getComponent(f);e.multiplyMatrices(h.bones[k].matrixWorld, +h.boneInverses[k]);g.addScaledVector(d.copy(a).applyMatrix4(e),l)}return g.applyMatrix4(this.bindMatrixInverse)}}()});var Hi=new U,Tk=new U;Object.assign(Re.prototype,{calculateInverses:function(){this.boneInverses=[];for(var a=0,b=this.bones.length;ad||(h.applyMatrix4(this.matrixWorld),A=a.ray.origin.distanceTo(h),Aa.far||b.push({distance:A,point:e.clone().applyMatrix4(this.matrixWorld),index:q,face:null,faceIndex:null,object:this}))}}else for(k=0,q=c.length/3-1;kd||(h.applyMatrix4(this.matrixWorld), +p=a.ray.origin.distanceTo(h),pa.far||b.push({distance:p,point:e.clone().applyMatrix4(this.matrixWorld),index:k,face:null,faceIndex:null,object:this}))}else if(c.isGeometry)for(f=c.vertices,g=f.length,c=0;cd||(h.applyMatrix4(this.matrixWorld),k=a.ray.origin.distanceTo(h),ka.far||b.push({distance:k,point:e.clone().applyMatrix4(this.matrixWorld),index:c,face:null,faceIndex:null,object:this}))}},updateMorphTargets:function(){var a= +this.geometry;if(a.isBufferGeometry){a=a.morphAttributes;var b=Object.keys(a);if(0=a.HAVE_CURRENT_DATA&&(this.needsUpdate=!0)}});Nc.prototype=Object.create(W.prototype);Nc.prototype.constructor=Nc;Nc.prototype.isCompressedTexture=!0;Od.prototype=Object.create(W.prototype);Od.prototype.constructor=Od;Od.prototype.isCanvasTexture=!0;Pd.prototype=Object.create(W.prototype);Pd.prototype.constructor=Pd;Pd.prototype.isDepthTexture=!0;Oc.prototype=Object.create(H.prototype);Oc.prototype.constructor=Oc;Qd.prototype= +Object.create(I.prototype);Qd.prototype.constructor=Qd;Pc.prototype=Object.create(H.prototype);Pc.prototype.constructor=Pc;Rd.prototype=Object.create(I.prototype);Rd.prototype.constructor=Rd;ia.prototype=Object.create(H.prototype);ia.prototype.constructor=ia;Sd.prototype=Object.create(I.prototype);Sd.prototype.constructor=Sd;Qc.prototype=Object.create(ia.prototype);Qc.prototype.constructor=Qc;Td.prototype=Object.create(I.prototype);Td.prototype.constructor=Td;bc.prototype=Object.create(ia.prototype); +bc.prototype.constructor=bc;Ud.prototype=Object.create(I.prototype);Ud.prototype.constructor=Ud;Rc.prototype=Object.create(ia.prototype);Rc.prototype.constructor=Rc;Vd.prototype=Object.create(I.prototype);Vd.prototype.constructor=Vd;Sc.prototype=Object.create(ia.prototype);Sc.prototype.constructor=Sc;Wd.prototype=Object.create(I.prototype);Wd.prototype.constructor=Wd;cc.prototype=Object.create(H.prototype);cc.prototype.constructor=cc;cc.prototype.toJSON=function(){var a=H.prototype.toJSON.call(this); +a.path=this.parameters.path.toJSON();return a};Xd.prototype=Object.create(I.prototype);Xd.prototype.constructor=Xd;Tc.prototype=Object.create(H.prototype);Tc.prototype.constructor=Tc;Yd.prototype=Object.create(I.prototype);Yd.prototype.constructor=Yd;Uc.prototype=Object.create(H.prototype);Uc.prototype.constructor=Uc;var Uk={triangulate:function(a,b,c){c=c||2;var d=b&&b.length,e=d?b[0]*c:a.length,f=Yh(a,0,e,c,!0),g=[];if(!f||f.next===f.prev)return g;var h;if(d){var l=c;d=[];var k;var q=0;for(k=b.length;q< +k;q++){var p=b[q]*l;var n=q80*c){var r=h=a[0];var t=d=a[1];for(l=c;lh&&(h=q),b>d&&(d=b);h=Math.max(h-r,d-t);h=0!==h?1/h:0}$d(f,g,c,r,t,h);return g}},pb={area:function(a){for(var b=a.length,c=0,d=b-1,e=0;epb.area(a)},triangulateShape:function(a,b){var c=[],d=[],e=[];bi(a);ci(c,a);a=a.length;b.forEach(bi);for(var f=0;fMath.abs(g-l)? +[new u(a,1-c),new u(h,1-d),new u(k,1-e),new u(p,1-b)]:[new u(g,1-c),new u(l,1-d),new u(q,1-e),new u(n,1-b)]}};be.prototype=Object.create(I.prototype);be.prototype.constructor=be;Wc.prototype=Object.create(fb.prototype);Wc.prototype.constructor=Wc;ce.prototype=Object.create(I.prototype);ce.prototype.constructor=ce;ec.prototype=Object.create(H.prototype);ec.prototype.constructor=ec;de.prototype=Object.create(I.prototype);de.prototype.constructor=de;Xc.prototype=Object.create(H.prototype);Xc.prototype.constructor= +Xc;ee.prototype=Object.create(I.prototype);ee.prototype.constructor=ee;Yc.prototype=Object.create(H.prototype);Yc.prototype.constructor=Yc;fc.prototype=Object.create(I.prototype);fc.prototype.constructor=fc;fc.prototype.toJSON=function(){var a=I.prototype.toJSON.call(this);return ei(this.parameters.shapes,a)};gc.prototype=Object.create(H.prototype);gc.prototype.constructor=gc;gc.prototype.toJSON=function(){var a=H.prototype.toJSON.call(this);return ei(this.parameters.shapes,a)};Zc.prototype=Object.create(H.prototype); +Zc.prototype.constructor=Zc;hc.prototype=Object.create(I.prototype);hc.prototype.constructor=hc;qb.prototype=Object.create(H.prototype);qb.prototype.constructor=qb;fe.prototype=Object.create(hc.prototype);fe.prototype.constructor=fe;ge.prototype=Object.create(qb.prototype);ge.prototype.constructor=ge;he.prototype=Object.create(I.prototype);he.prototype.constructor=he;$c.prototype=Object.create(H.prototype);$c.prototype.constructor=$c;var Da=Object.freeze({__proto__:null,WireframeGeometry:Oc,ParametricGeometry:Qd, +ParametricBufferGeometry:Pc,TetrahedronGeometry:Sd,TetrahedronBufferGeometry:Qc,OctahedronGeometry:Td,OctahedronBufferGeometry:bc,IcosahedronGeometry:Ud,IcosahedronBufferGeometry:Rc,DodecahedronGeometry:Vd,DodecahedronBufferGeometry:Sc,PolyhedronGeometry:Rd,PolyhedronBufferGeometry:ia,TubeGeometry:Wd,TubeBufferGeometry:cc,TorusKnotGeometry:Xd,TorusKnotBufferGeometry:Tc,TorusGeometry:Yd,TorusBufferGeometry:Uc,TextGeometry:be,TextBufferGeometry:Wc,SphereGeometry:ce,SphereBufferGeometry:ec,RingGeometry:de, +RingBufferGeometry:Xc,PlaneGeometry:Fd,PlaneBufferGeometry:Zb,LatheGeometry:ee,LatheBufferGeometry:Yc,ShapeGeometry:fc,ShapeBufferGeometry:gc,ExtrudeGeometry:dc,ExtrudeBufferGeometry:fb,EdgesGeometry:Zc,ConeGeometry:fe,ConeBufferGeometry:ge,CylinderGeometry:hc,CylinderBufferGeometry:qb,CircleGeometry:he,CircleBufferGeometry:$c,BoxGeometry:ih,BoxBufferGeometry:Gd});ic.prototype=Object.create(K.prototype);ic.prototype.constructor=ic;ic.prototype.isShadowMaterial=!0;ic.prototype.copy=function(a){K.prototype.copy.call(this, +a);this.color.copy(a.color);return this};rb.prototype=Object.create(Ba.prototype);rb.prototype.constructor=rb;rb.prototype.isRawShaderMaterial=!0;gb.prototype=Object.create(K.prototype);gb.prototype.constructor=gb;gb.prototype.isMeshStandardMaterial=!0;gb.prototype.copy=function(a){K.prototype.copy.call(this,a);this.defines={STANDARD:""};this.color.copy(a.color);this.roughness=a.roughness;this.metalness=a.metalness;this.map=a.map;this.lightMap=a.lightMap;this.lightMapIntensity=a.lightMapIntensity; +this.aoMap=a.aoMap;this.aoMapIntensity=a.aoMapIntensity;this.emissive.copy(a.emissive);this.emissiveMap=a.emissiveMap;this.emissiveIntensity=a.emissiveIntensity;this.bumpMap=a.bumpMap;this.bumpScale=a.bumpScale;this.normalMap=a.normalMap;this.normalMapType=a.normalMapType;this.normalScale.copy(a.normalScale);this.displacementMap=a.displacementMap;this.displacementScale=a.displacementScale;this.displacementBias=a.displacementBias;this.roughnessMap=a.roughnessMap;this.metalnessMap=a.metalnessMap;this.alphaMap= +a.alphaMap;this.envMap=a.envMap;this.envMapIntensity=a.envMapIntensity;this.refractionRatio=a.refractionRatio;this.wireframe=a.wireframe;this.wireframeLinewidth=a.wireframeLinewidth;this.wireframeLinecap=a.wireframeLinecap;this.wireframeLinejoin=a.wireframeLinejoin;this.skinning=a.skinning;this.morphTargets=a.morphTargets;this.morphNormals=a.morphNormals;this.vertexTangents=a.vertexTangents;return this};jc.prototype=Object.create(gb.prototype);jc.prototype.constructor=jc;jc.prototype.isMeshPhysicalMaterial= +!0;jc.prototype.copy=function(a){gb.prototype.copy.call(this,a);this.defines={STANDARD:"",PHYSICAL:""};this.clearcoat=a.clearcoat;this.clearcoatMap=a.clearcoatMap;this.clearcoatRoughness=a.clearcoatRoughness;this.clearcoatRoughnessMap=a.clearcoatRoughnessMap;this.clearcoatNormalMap=a.clearcoatNormalMap;this.clearcoatNormalScale.copy(a.clearcoatNormalScale);this.reflectivity=a.reflectivity;this.sheen=a.sheen?(this.sheen||new E).copy(a.sheen):null;this.transparency=a.transparency;return this};Kb.prototype= +Object.create(K.prototype);Kb.prototype.constructor=Kb;Kb.prototype.isMeshPhongMaterial=!0;Kb.prototype.copy=function(a){K.prototype.copy.call(this,a);this.color.copy(a.color);this.specular.copy(a.specular);this.shininess=a.shininess;this.map=a.map;this.lightMap=a.lightMap;this.lightMapIntensity=a.lightMapIntensity;this.aoMap=a.aoMap;this.aoMapIntensity=a.aoMapIntensity;this.emissive.copy(a.emissive);this.emissiveMap=a.emissiveMap;this.emissiveIntensity=a.emissiveIntensity;this.bumpMap=a.bumpMap; +this.bumpScale=a.bumpScale;this.normalMap=a.normalMap;this.normalMapType=a.normalMapType;this.normalScale.copy(a.normalScale);this.displacementMap=a.displacementMap;this.displacementScale=a.displacementScale;this.displacementBias=a.displacementBias;this.specularMap=a.specularMap;this.alphaMap=a.alphaMap;this.envMap=a.envMap;this.combine=a.combine;this.reflectivity=a.reflectivity;this.refractionRatio=a.refractionRatio;this.wireframe=a.wireframe;this.wireframeLinewidth=a.wireframeLinewidth;this.wireframeLinecap= +a.wireframeLinecap;this.wireframeLinejoin=a.wireframeLinejoin;this.skinning=a.skinning;this.morphTargets=a.morphTargets;this.morphNormals=a.morphNormals;return this};kc.prototype=Object.create(K.prototype);kc.prototype.constructor=kc;kc.prototype.isMeshToonMaterial=!0;kc.prototype.copy=function(a){K.prototype.copy.call(this,a);this.color.copy(a.color);this.map=a.map;this.gradientMap=a.gradientMap;this.lightMap=a.lightMap;this.lightMapIntensity=a.lightMapIntensity;this.aoMap=a.aoMap;this.aoMapIntensity= +a.aoMapIntensity;this.emissive.copy(a.emissive);this.emissiveMap=a.emissiveMap;this.emissiveIntensity=a.emissiveIntensity;this.bumpMap=a.bumpMap;this.bumpScale=a.bumpScale;this.normalMap=a.normalMap;this.normalMapType=a.normalMapType;this.normalScale.copy(a.normalScale);this.displacementMap=a.displacementMap;this.displacementScale=a.displacementScale;this.displacementBias=a.displacementBias;this.alphaMap=a.alphaMap;this.wireframe=a.wireframe;this.wireframeLinewidth=a.wireframeLinewidth;this.wireframeLinecap= +a.wireframeLinecap;this.wireframeLinejoin=a.wireframeLinejoin;this.skinning=a.skinning;this.morphTargets=a.morphTargets;this.morphNormals=a.morphNormals;return this};lc.prototype=Object.create(K.prototype);lc.prototype.constructor=lc;lc.prototype.isMeshNormalMaterial=!0;lc.prototype.copy=function(a){K.prototype.copy.call(this,a);this.bumpMap=a.bumpMap;this.bumpScale=a.bumpScale;this.normalMap=a.normalMap;this.normalMapType=a.normalMapType;this.normalScale.copy(a.normalScale);this.displacementMap= +a.displacementMap;this.displacementScale=a.displacementScale;this.displacementBias=a.displacementBias;this.wireframe=a.wireframe;this.wireframeLinewidth=a.wireframeLinewidth;this.skinning=a.skinning;this.morphTargets=a.morphTargets;this.morphNormals=a.morphNormals;return this};mc.prototype=Object.create(K.prototype);mc.prototype.constructor=mc;mc.prototype.isMeshLambertMaterial=!0;mc.prototype.copy=function(a){K.prototype.copy.call(this,a);this.color.copy(a.color);this.map=a.map;this.lightMap=a.lightMap; +this.lightMapIntensity=a.lightMapIntensity;this.aoMap=a.aoMap;this.aoMapIntensity=a.aoMapIntensity;this.emissive.copy(a.emissive);this.emissiveMap=a.emissiveMap;this.emissiveIntensity=a.emissiveIntensity;this.specularMap=a.specularMap;this.alphaMap=a.alphaMap;this.envMap=a.envMap;this.combine=a.combine;this.reflectivity=a.reflectivity;this.refractionRatio=a.refractionRatio;this.wireframe=a.wireframe;this.wireframeLinewidth=a.wireframeLinewidth;this.wireframeLinecap=a.wireframeLinecap;this.wireframeLinejoin= +a.wireframeLinejoin;this.skinning=a.skinning;this.morphTargets=a.morphTargets;this.morphNormals=a.morphNormals;return this};nc.prototype=Object.create(K.prototype);nc.prototype.constructor=nc;nc.prototype.isMeshMatcapMaterial=!0;nc.prototype.copy=function(a){K.prototype.copy.call(this,a);this.defines={MATCAP:""};this.color.copy(a.color);this.matcap=a.matcap;this.map=a.map;this.bumpMap=a.bumpMap;this.bumpScale=a.bumpScale;this.normalMap=a.normalMap;this.normalMapType=a.normalMapType;this.normalScale.copy(a.normalScale); +this.displacementMap=a.displacementMap;this.displacementScale=a.displacementScale;this.displacementBias=a.displacementBias;this.alphaMap=a.alphaMap;this.skinning=a.skinning;this.morphTargets=a.morphTargets;this.morphNormals=a.morphNormals;return this};oc.prototype=Object.create(ja.prototype);oc.prototype.constructor=oc;oc.prototype.isLineDashedMaterial=!0;oc.prototype.copy=function(a){ja.prototype.copy.call(this,a);this.scale=a.scale;this.dashSize=a.dashSize;this.gapSize=a.gapSize;return this};var Vk= +Object.freeze({__proto__:null,ShadowMaterial:ic,SpriteMaterial:Ib,RawShaderMaterial:rb,ShaderMaterial:Ba,PointsMaterial:Va,MeshPhysicalMaterial:jc,MeshStandardMaterial:gb,MeshPhongMaterial:Kb,MeshToonMaterial:kc,MeshNormalMaterial:lc,MeshLambertMaterial:mc,MeshDepthMaterial:Eb,MeshDistanceMaterial:Fb,MeshBasicMaterial:Na,MeshMatcapMaterial:nc,LineDashedMaterial:oc,LineBasicMaterial:ja,Material:K}),X={arraySlice:function(a,b,c){return X.isTypedArray(a)?new a.constructor(a.subarray(b,void 0!==c?c:a.length)): +a.slice(b,c)},convertArray:function(a,b,c){return!a||!c&&a.constructor===b?a:"number"===typeof b.BYTES_PER_ELEMENT?new b(a):Array.prototype.slice.call(a)},isTypedArray:function(a){return ArrayBuffer.isView(a)&&!(a instanceof DataView)},getKeyframeOrder:function(a){for(var b=a.length,c=Array(b),d=0;d!==b;++d)c[d]=d;c.sort(function(b,c){return a[b]-a[c]});return c},sortedArray:function(a,b,c){for(var d=a.length,e=new a.constructor(d),f=0,g=0;g!==d;++f)for(var h=c[f]*b,l=0;l!==b;++l)e[g++]=a[h+l];return e}, +flattenJSON:function(a,b,c,d){for(var e=1,f=a[0];void 0!==f&&void 0===f[d];)f=a[e++];if(void 0!==f){var g=f[d];if(void 0!==g)if(Array.isArray(g)){do g=f[d],void 0!==g&&(b.push(f.time),c.push.apply(c,g)),f=a[e++];while(void 0!==f)}else if(void 0!==g.toArray){do g=f[d],void 0!==g&&(b.push(f.time),g.toArray(c,c.length)),f=a[e++];while(void 0!==f)}else{do g=f[d],void 0!==g&&(b.push(f.time),c.push(g)),f=a[e++];while(void 0!==f)}}},subclip:function(a,b,c,d,e){e=e||30;a=a.clone();a.name=b;b=[];for(var f= +0;f=d))for(l.push(g.times[q]),p=0;pa.tracks[d].times[0]&&(c=a.tracks[d].times[0]);for(d=0;d=d)d=30;var e=a.tracks.length,f=b/d;b=function(b){var d=c.tracks[b],e=d.ValueTypeName;if("bool"!==e&&"string"!==e&&(b=a.tracks.find(function(a){return a.name===d.name&&a.ValueTypeName===e}),void 0!==b)){var g=d.getValueSize(),k=d.times.length-1,p=void 0;f<=d.times[0]?p=X.arraySlice(d.values,0,d.valueSize):f>=d.times[k]?p=X.arraySlice(d.values,k*g):(p=d.createInterpolant(),p.evaluate(f),p=p.resultBuffer);"quaternion"===e&&(new T(p[0],p[1], +p[2],p[3])).normalize().conjugate().toArray(p);k=b.times.length;for(var n=0;n=e)break a;else{f=b[1];a=e)break b}d=c;c=0}}for(;c>>1,ab;)--f;++f;if(0!==e||f!==d)e>=f&&(f=Math.max(f,1),e=f-1),a=this.getValueSize(),this.times=X.arraySlice(c,e,f),this.values=X.arraySlice(this.values,e*a,f*a);return this},validate:function(){var a=!0,b=this.getValueSize();0!==b-Math.floor(b)&&(console.error("THREE.KeyframeTrack: Invalid value size in track.",this),a=!1);var c=this.times;b=this.values;var d=c.length;0===d&&(console.error("THREE.KeyframeTrack: Track is empty.", +this),a=!1);for(var e=null,f=0;f!==d;f++){var g=c[f];if("number"===typeof g&&isNaN(g)){console.error("THREE.KeyframeTrack: Time is not a valid number.",this,f,g);a=!1;break}if(null!==e&&e>g){console.error("THREE.KeyframeTrack: Out of order keys.",this,f,g,e);a=!1;break}e=g}if(void 0!==b&&X.isTypedArray(b))for(c=0,d=b.length;c!==d;++c)if(e=b[c],isNaN(e)){console.error("THREE.KeyframeTrack: Value is not a valid number.",this,c,e);a=!1;break}return a},optimize:function(){for(var a=X.arraySlice(this.times), +b=X.arraySlice(this.values),c=this.getValueSize(),d=2302===this.getInterpolation(),e=a.length-1,f=1,g=1;gg)e=a+1;else if(0c&&(c=0);1Number.EPSILON&&(g.normalize(),k=Math.acos(O.clamp(d[c-1].dot(d[c]),-1,1)),e[c].applyMatrix4(h.makeRotationAxis(g, +k))),f[c].crossVectors(d[c],e[c]);if(!0===b)for(b=Math.acos(O.clamp(e[0].dot(e[a]),-1,1)),b/=a,0d;)d+=c;for(;d>c;)d-=c;de&&(e=1);1E-4>d&&(d=e);1E-4>k&&(k=e);kh.initNonuniformCatmullRom(f.x,g.x,h.x,c.x,d,e,k);lh.initNonuniformCatmullRom(f.y,g.y,h.y,c.y,d,e,k);mh.initNonuniformCatmullRom(f.z, +g.z,h.z,c.z,d,e,k)}else"catmullrom"===this.curveType&&(kh.initCatmullRom(f.x,g.x,h.x,c.x,this.tension),lh.initCatmullRom(f.y,g.y,h.y,c.y,this.tension),mh.initCatmullRom(f.z,g.z,h.z,c.z,this.tension));b.set(kh.calc(a),lh.calc(a),mh.calc(a));return b};va.prototype.copy=function(a){J.prototype.copy.call(this,a);this.points=[];for(var b=0,c=a.points.length;bc.length-2?c.length-1:a+1];c=c[a>c.length-3?c.length-1:a+2];b.set(gi(d,e.x,f.x,g.x, +c.x),gi(d,e.y,f.y,g.y,c.y));return b};Za.prototype.copy=function(a){J.prototype.copy.call(this,a);this.points=[];for(var b=0,c=a.points.length;b=b)return b=c[a]-b,a=this.curves[a],c=a.getLength(),a.getPointAt(0===c?0:1-b/c);a++}return null},getLength:function(){var a=this.getCurveLengths();return a[a.length-1]},updateArcLengths:function(){this.needsUpdate=!0;this.cacheLengths=null;this.getCurveLengths()},getCurveLengths:function(){if(this.cacheLengths&&this.cacheLengths.length===this.curves.length)return this.cacheLengths;for(var a=[], +b=0,c=0,d=this.curves.length;cb;b++)this.coefficients[b].copy(a[b]);return this},zero:function(){for(var a=0;9>a;a++)this.coefficients[a].set(0,0,0);return this},getAt:function(a,b){var c=a.x,d=a.y;a=a.z;var e=this.coefficients;b.copy(e[0]).multiplyScalar(.282095);b.addScaledVector(e[1],.488603*d);b.addScaledVector(e[2],.488603*a);b.addScaledVector(e[3],.488603*c);b.addScaledVector(e[4],1.092548*c*d);b.addScaledVector(e[5],1.092548*d*a);b.addScaledVector(e[6],.315392*(3*a*a-1));b.addScaledVector(e[7], +1.092548*c*a);b.addScaledVector(e[8],.546274*(c*c-d*d));return b},getIrradianceAt:function(a,b){var c=a.x,d=a.y;a=a.z;var e=this.coefficients;b.copy(e[0]).multiplyScalar(.886227);b.addScaledVector(e[1],1.023328*d);b.addScaledVector(e[2],1.023328*a);b.addScaledVector(e[3],1.023328*c);b.addScaledVector(e[4],.858086*c*d);b.addScaledVector(e[5],.858086*d*a);b.addScaledVector(e[6],.743125*a*a-.247708);b.addScaledVector(e[7],.858086*c*a);b.addScaledVector(e[8],.429043*(c*c-d*d));return b},add:function(a){for(var b= +0;9>b;b++)this.coefficients[b].add(a.coefficients[b]);return this},addScaledSH:function(a,b){for(var c=0;9>c;c++)this.coefficients[c].addScaledVector(a.coefficients[c],b);return this},scale:function(a){for(var b=0;9>b;b++)this.coefficients[b].multiplyScalar(a);return this},lerp:function(a,b){for(var c=0;9>c;c++)this.coefficients[c].lerp(a.coefficients[c],b);return this},equals:function(a){for(var b=0;9>b;b++)if(!this.coefficients[b].equals(a.coefficients[b]))return!1;return!0},copy:function(a){return this.set(a.coefficients)}, +clone:function(){return(new this.constructor).copy(this)},fromArray:function(a,b){void 0===b&&(b=0);for(var c=this.coefficients,d=0;9>d;d++)c[d].fromArray(a,b+3*d);return this},toArray:function(a,b){void 0===a&&(a=[]);void 0===b&&(b=0);for(var c=this.coefficients,d=0;9>d;d++)c[d].toArray(a,b+3*d);return a}});Object.assign(of,{getBasisAt:function(a,b){var c=a.x,d=a.y;a=a.z;b[0]=.282095;b[1]=.488603*d;b[2]=.488603*a;b[3]=.488603*c;b[4]=1.092548*c*d;b[5]=1.092548*d*a;b[6]=.315392*(3*a*a-1);b[7]=1.092548* +c*a;b[8]=.546274*(c*c-d*d)}});Sa.prototype=Object.assign(Object.create(aa.prototype),{constructor:Sa,isLightProbe:!0,copy:function(a){aa.prototype.copy.call(this,a);this.sh.copy(a.sh);return this},fromJSON:function(a){this.intensity=a.intensity;this.sh.fromArray(a.sh);return this},toJSON:function(a){a=aa.prototype.toJSON.call(this,a);a.object.sh=this.sh.toArray();return a}});pf.prototype=Object.assign(Object.create(V.prototype),{constructor:pf,load:function(a,b,c,d){var e=this,f=new Ra(e.manager); +f.setPath(e.path);f.load(a,function(c){try{b(e.parse(JSON.parse(c)))}catch(h){d?d(h):console.error(h),e.manager.itemError(a)}},c,d)},parse:function(a){function b(a){void 0===c[a]&&console.warn("THREE.MaterialLoader: Undefined texture",a);return c[a]}var c=this.textures,d=new Vk[a.type];void 0!==a.uuid&&(d.uuid=a.uuid);void 0!==a.name&&(d.name=a.name);void 0!==a.color&&d.color.setHex(a.color);void 0!==a.roughness&&(d.roughness=a.roughness);void 0!==a.metalness&&(d.metalness=a.metalness);void 0!==a.sheen&& +(d.sheen=(new E).setHex(a.sheen));void 0!==a.emissive&&d.emissive.setHex(a.emissive);void 0!==a.specular&&d.specular.setHex(a.specular);void 0!==a.shininess&&(d.shininess=a.shininess);void 0!==a.clearcoat&&(d.clearcoat=a.clearcoat);void 0!==a.clearcoatRoughness&&(d.clearcoatRoughness=a.clearcoatRoughness);void 0!==a.fog&&(d.fog=a.fog);void 0!==a.flatShading&&(d.flatShading=a.flatShading);void 0!==a.blending&&(d.blending=a.blending);void 0!==a.combine&&(d.combine=a.combine);void 0!==a.side&&(d.side= +a.side);void 0!==a.opacity&&(d.opacity=a.opacity);void 0!==a.transparent&&(d.transparent=a.transparent);void 0!==a.alphaTest&&(d.alphaTest=a.alphaTest);void 0!==a.depthTest&&(d.depthTest=a.depthTest);void 0!==a.depthWrite&&(d.depthWrite=a.depthWrite);void 0!==a.colorWrite&&(d.colorWrite=a.colorWrite);void 0!==a.stencilWrite&&(d.stencilWrite=a.stencilWrite);void 0!==a.stencilWriteMask&&(d.stencilWriteMask=a.stencilWriteMask);void 0!==a.stencilFunc&&(d.stencilFunc=a.stencilFunc);void 0!==a.stencilRef&& +(d.stencilRef=a.stencilRef);void 0!==a.stencilFuncMask&&(d.stencilFuncMask=a.stencilFuncMask);void 0!==a.stencilFail&&(d.stencilFail=a.stencilFail);void 0!==a.stencilZFail&&(d.stencilZFail=a.stencilZFail);void 0!==a.stencilZPass&&(d.stencilZPass=a.stencilZPass);void 0!==a.wireframe&&(d.wireframe=a.wireframe);void 0!==a.wireframeLinewidth&&(d.wireframeLinewidth=a.wireframeLinewidth);void 0!==a.wireframeLinecap&&(d.wireframeLinecap=a.wireframeLinecap);void 0!==a.wireframeLinejoin&&(d.wireframeLinejoin= +a.wireframeLinejoin);void 0!==a.rotation&&(d.rotation=a.rotation);1!==a.linewidth&&(d.linewidth=a.linewidth);void 0!==a.dashSize&&(d.dashSize=a.dashSize);void 0!==a.gapSize&&(d.gapSize=a.gapSize);void 0!==a.scale&&(d.scale=a.scale);void 0!==a.polygonOffset&&(d.polygonOffset=a.polygonOffset);void 0!==a.polygonOffsetFactor&&(d.polygonOffsetFactor=a.polygonOffsetFactor);void 0!==a.polygonOffsetUnits&&(d.polygonOffsetUnits=a.polygonOffsetUnits);void 0!==a.skinning&&(d.skinning=a.skinning);void 0!==a.morphTargets&& +(d.morphTargets=a.morphTargets);void 0!==a.morphNormals&&(d.morphNormals=a.morphNormals);void 0!==a.dithering&&(d.dithering=a.dithering);void 0!==a.vertexTangents&&(d.vertexTangents=a.vertexTangents);void 0!==a.visible&&(d.visible=a.visible);void 0!==a.toneMapped&&(d.toneMapped=a.toneMapped);void 0!==a.userData&&(d.userData=a.userData);void 0!==a.vertexColors&&(d.vertexColors="number"===typeof a.vertexColors?0Number.EPSILON){if(0>l&&(g=b[f],k=-k,h=b[e],l=-l),!(a.yh.y))if(a.y===g.y){if(a.x===g.x)return!0}else{e=l*(a.x-g.x)-k*(a.y-g.y);if(0===e)return!0;0>e||(d=!d)}}else if(a.y===g.y&&(h.x<=a.x&&a.x<=g.x||g.x<=a.x&&a.x<=h.x))return!0}return d} +var e=pb.isClockWise,f=this.subPaths;if(0===f.length)return[];if(!0===b)return c(f);b=[];if(1===f.length){var g=f[0];var h=new Lb;h.curves=g.curves;b.push(h);return b}var k=!e(f[0].getPoints());k=a?!k:k;h=[];var m=[],q=[],p=0;m[p]=void 0;q[p]=[];for(var n=0,r=f.length;nd&&this._mixBufferRegion(c,a,b*this._origIndex,1-d,b);0=e){var n=e++,p=a[n];b[p.uuid]=m;a[m]=p;b[k]=n;a[n]=h;h=0;for(k=d;h!==k;++h){p=c[h];var u=p[m];p[m]=p[n];p[n]=u}}}this.nCachedObjects_=e},uncache:function(){for(var a=this._objects,b=this._indicesByUUID,c=this._bindings,d=c.length,e=this.nCachedObjects_,f=a.length,g=0,h=arguments.length;g!==h;++g){var k=arguments[g].uuid,m=b[k];if(void 0!==m)if(delete b[k],mb||0===c)return;this._startTime= +null;b*=c}b*=this._updateTimeScale(a);c=this._updateTime(b);a=this._updateWeight(a);if(0c.parameterPositions[1]&& +(this.stopFading(),0===d&&(this.enabled=!1))}}return this._effectiveWeight=b},_updateTimeScale:function(a){var b=0;if(!this.paused){b=this.timeScale;var c=this._timeScaleInterpolant;if(null!==c){var d=c.evaluate(a)[0];b*=d;a>c.parameterPositions[1]&&(this.stopWarping(),0===b?this.paused=!0:this.timeScale=b)}}return this._effectiveTimeScale=b},_updateTime:function(a){var b=this._clip.duration,c=this.loop,d=this.time+a,e=this._loopCount,f=2202===c;if(0===a)return-1===e?d:f&&1===(e&1)?b-d:d;if(2200=== +c)a:{if(-1===e&&(this._loopCount=0,this._setEndings(!0,!0,!1)),d>=b)d=b;else if(0>d)d=0;else{this.time=d;break a}this.clampWhenFinished?this.paused=!0:this.enabled=!1;this.time=d;this._mixer.dispatchEvent({type:"finished",action:this,direction:0>a?-1:1})}else{-1===e&&(0<=a?(e=0,this._setEndings(!0,0===this.repetitions,f)):this._setEndings(0===this.repetitions,!0,f));if(d>=b||0>d){c=Math.floor(d/b);d-=b*c;e+=Math.abs(c);var g=this.repetitions-e;0>=g?(this.clampWhenFinished?this.paused=!0:this.enabled= +!1,this.time=d=0a,this._setEndings(a,!a,f)):this._setEndings(!1,!1,f),this._loopCount=e,this.time=d,this._mixer.dispatchEvent({type:"loop",action:this,loopDelta:c}))}else this.time=d;if(f&&1===(e&1))return b-d}return d},_setEndings:function(a,b,c){var d=this._interpolantSettings;c?(d.endingStart=2401,d.endingEnd=2401):(d.endingStart=a?this.zeroSlopeAtStart?2401:2400:2402,d.endingEnd=b?this.zeroSlopeAtEnd? +2401:2400:2402)},_scheduleFading:function(a,b,c){var d=this._mixer,e=d.time,f=this._weightInterpolant;null===f&&(this._weightInterpolant=f=d._lendControlInterpolant());d=f.parameterPositions;f=f.sampleValues;d[0]=e;f[0]=b;d[1]=e+a;f[1]=c;return this}});Lg.prototype=Object.assign(Object.create(qa.prototype),{constructor:Lg,_bindAction:function(a,b){var c=a._localRoot||this._root,d=a._clip.tracks,e=d.length,f=a._propertyBindings;a=a._interpolants;var g=c.uuid,h=this._bindingsByRootAndName,k=h[g];void 0=== +k&&(k={},h[g]=k);for(h=0;h!==e;++h){var m=d[h],n=m.name,p=k[n];if(void 0===p){p=f[h];if(void 0!==p){null===p._cacheIndex&&(++p.referenceCount,this._addInactiveBinding(p,g,n));continue}p=new Kg(pa.create(c,n,b&&b._propertyBindings[h].binding.parsedPath),m.ValueTypeName,m.getValueSize());++p.referenceCount;this._addInactiveBinding(p,g,n)}f[h]=p;a[h].resultBuffer=p.buffer}},_activateAction:function(a){if(!this._isActiveAction(a)){if(null===a._cacheIndex){var b=(a._localRoot||this._root).uuid,c=a._clip.uuid, +d=this._actionsByClip[c];this._bindAction(a,d&&d.knownActions[0]);this._addInactiveAction(a,c,b)}b=a._propertyBindings;c=0;for(d=b.length;c!==d;++c){var e=b[c];0===e.useCount++&&(this._lendBinding(e),e.saveOriginalState())}this._lendAction(a)}},_deactivateAction:function(a){if(this._isActiveAction(a)){for(var b=a._propertyBindings,c=0,d=b.length;c!==d;++c){var e=b[c];0===--e.useCount&&(e.restoreOriginalState(),this._takeBackBinding(e))}this._takeBackAction(a)}},_initMemoryManager:function(){this._actions= +[];this._nActiveActions=0;this._actionsByClip={};this._bindings=[];this._nActiveBindings=0;this._bindingsByRootAndName={};this._controlInterpolants=[];this._nActiveControlInterpolants=0;var a=this;this.stats={actions:{get total(){return a._actions.length},get inUse(){return a._nActiveActions}},bindings:{get total(){return a._bindings.length},get inUse(){return a._nActiveBindings}},controlInterpolants:{get total(){return a._controlInterpolants.length},get inUse(){return a._nActiveControlInterpolants}}}}, +_isActiveAction:function(a){a=a._cacheIndex;return null!==a&&athis.max.x||a.ythis.max.y?!1:!0},containsBox:function(a){return this.min.x<=a.min.x&&a.max.x<=this.max.x&&this.min.y<=a.min.y&&a.max.y<=this.max.y},getParameter:function(a, +b){void 0===b&&(console.warn("THREE.Box2: .getParameter() target is now required"),b=new u);return b.set((a.x-this.min.x)/(this.max.x-this.min.x),(a.y-this.min.y)/(this.max.y-this.min.y))},intersectsBox:function(a){return a.max.xthis.max.x||a.max.ythis.max.y?!1:!0},clampPoint:function(a,b){void 0===b&&(console.warn("THREE.Box2: .clampPoint() target is now required"),b=new u);return b.copy(a).clamp(this.min,this.max)},distanceToPoint:function(a){return Ui.copy(a).clamp(this.min, +this.max).sub(a).length()},intersect:function(a){this.min.max(a.min);this.max.min(a.max);return this},union:function(a){this.min.min(a.min);this.max.max(a.max);return this},translate:function(a){this.min.add(a);this.max.add(a);return this},equals:function(a){return a.min.equals(this.min)&&a.max.equals(this.max)}});var Vi=new n,Vf=new n;Object.assign(Qg.prototype,{set:function(a,b){this.start.copy(a);this.end.copy(b);return this},clone:function(){return(new this.constructor).copy(this)},copy:function(a){this.start.copy(a.start); +this.end.copy(a.end);return this},getCenter:function(a){void 0===a&&(console.warn("THREE.Line3: .getCenter() target is now required"),a=new n);return a.addVectors(this.start,this.end).multiplyScalar(.5)},delta:function(a){void 0===a&&(console.warn("THREE.Line3: .delta() target is now required"),a=new n);return a.subVectors(this.end,this.start)},distanceSq:function(){return this.start.distanceToSquared(this.end)},distance:function(){return this.start.distanceTo(this.end)},at:function(a,b){void 0=== +b&&(console.warn("THREE.Line3: .at() target is now required"),b=new n);return this.delta(b).multiplyScalar(a).add(this.start)},closestPointToPointParameter:function(a,b){Vi.subVectors(a,this.start);Vf.subVectors(this.end,this.start);a=Vf.dot(Vf);a=Vf.dot(Vi)/a;b&&(a=O.clamp(a,0,1));return a},closestPointToPoint:function(a,b,c){a=this.closestPointToPointParameter(a,b);void 0===c&&(console.warn("THREE.Line3: .closestPointToPoint() target is now required"),c=new n);return this.delta(c).multiplyScalar(a).add(this.start)}, +applyMatrix4:function(a){this.start.applyMatrix4(a);this.end.applyMatrix4(a);return this},equals:function(a){return a.start.equals(this.start)&&a.end.equals(this.end)}});ne.prototype=Object.create(x.prototype);ne.prototype.constructor=ne;ne.prototype.isImmediateRenderObject=!0;var Wi=new n;gd.prototype=Object.create(x.prototype);gd.prototype.constructor=gd;gd.prototype.dispose=function(){this.cone.geometry.dispose();this.cone.material.dispose()};gd.prototype.update=function(){this.light.updateMatrixWorld(); +var a=this.light.distance?this.light.distance:1E3,b=a*Math.tan(this.light.angle);this.cone.scale.set(b,b,a);Wi.setFromMatrixPosition(this.light.target.matrixWorld);this.cone.lookAt(Wi);void 0!==this.color?this.cone.material.color.set(this.color):this.cone.material.color.copy(this.light.color)};var Rb=new n,Wf=new U,ph=new U;pc.prototype=Object.create(ea.prototype);pc.prototype.constructor=pc;pc.prototype.isSkeletonHelper=!0;pc.prototype.updateMatrixWorld=function(a){var b=this.bones,c=this.geometry, +d=c.getAttribute("position");ph.getInverse(this.root.matrixWorld);for(var e=0,f=0;eMath.abs(b)&&(b=1E-8);this.scale.set(.5*this.size,.5*this.size,b);this.children[0].material.side=0>b?1:0;this.lookAt(this.plane.normal);x.prototype.updateMatrixWorld.call(this,a)};var aj=new n,yf,Rg;ub.prototype=Object.create(x.prototype); +ub.prototype.constructor=ub;ub.prototype.setDirection=function(a){.99999a.y?this.quaternion.set(1,0,0,0):(aj.set(a.z,0,-a.x).normalize(),this.quaternion.setFromAxisAngle(aj,Math.acos(a.y)))};ub.prototype.setLength=function(a,b,c){void 0===b&&(b=.2*a);void 0===c&&(c=.2*b);this.line.scale.set(1,Math.max(1E-4,a-b),1);this.line.updateMatrix();this.cone.scale.set(c,b,c);this.cone.position.y=a;this.cone.updateMatrix()};ub.prototype.setColor=function(a){this.line.material.color.set(a); +this.cone.material.color.set(a)};ub.prototype.copy=function(a){x.prototype.copy.call(this,a,!1);this.line.copy(a.line);this.cone.copy(a.cone);return this};ub.prototype.clone=function(){return(new this.constructor).copy(this)};re.prototype=Object.create(ea.prototype);re.prototype.constructor=re;var lb=Math.pow(2,8),bj=[.125,.215,.35,.446,.526,.582],cj=5+bj.length,kb={3E3:0,3001:1,3002:2,3004:3,3005:4,3006:5,3007:6},qh=new ed,rh=function(){for(var a=[],b=[],c=[],d=8,e=0;em;m++){var n=m%3*2/3-1,p=2n;n++)p=n%3,0==p?(b.up.set(0,c[n],0),b.lookAt(e[n],0,0)):1==p?(b.up.set(0,0,c[n]),b.lookAt(0,e[n],0)):(b.up.set(0,c[n],0),b.lookAt(0,0,e[n])),zf(d,p*lb,2t;++t){var v=t/p;v=Math.exp(-v*v/2);e.push(v);0==t?r+=v:th)return!1}return!0}function cb(a,b){this.center=void 0!==a?a:new m;this.radius=void 0!==b?b:-1}function Xb(a,b){this.origin=void 0!==a?a:new m;this.direction=void 0!==b?b:new m(0,0,-1)}function Ta(a,b){this.normal=void 0!==a?a:new m(1,0,0);this.constant=void 0!==b?b:0}function ba(a,b,c){this.a=void 0!==a?a:new m;this.b=void 0!==b?b:new m;this.c=void 0!==c?c:new m}function H(a,b,c){return void 0===b&&void 0===c?this.set(a):this.setRGB(a,b,c)}function cg(a,b,c){0>c&&(c+=1);1< +c&&--c;return c<1/6?a+6*(b-a)*c:.5>c?b:c<2/3?a+6*(b-a)*(2/3-c):a}function dg(a){return.04045>a?.0773993808*a:Math.pow(.9478672986*a+.0521327014,2.4)}function eg(a){return.0031308>a?12.92*a:1.055*Math.pow(a,.41666)-.055}function Cc(a,b,c,d,e,f){this.a=a;this.b=b;this.c=c;this.normal=d&&d.isVector3?d:new m;this.vertexNormals=Array.isArray(d)?d:[];this.color=e&&e.isColor?e:new H;this.vertexColors=Array.isArray(e)?e:[];this.materialIndex=void 0!==f?f:0}function L(){Object.defineProperty(this,"id",{value:gj++}); +this.uuid=P.generateUUID();this.name="";this.type="Material";this.fog=!0;this.blending=1;this.side=0;this.vertexColors=this.flatShading=!1;this.opacity=1;this.transparent=!1;this.blendSrc=204;this.blendDst=205;this.blendEquation=100;this.blendEquationAlpha=this.blendDstAlpha=this.blendSrcAlpha=null;this.depthFunc=3;this.depthWrite=this.depthTest=!0;this.stencilWriteMask=255;this.stencilFunc=519;this.stencilRef=0;this.stencilFuncMask=255;this.stencilZPass=this.stencilZFail=this.stencilFail=7680;this.stencilWrite= +!1;this.clippingPlanes=null;this.clipShadows=this.clipIntersection=!1;this.shadowSide=null;this.colorWrite=!0;this.precision=null;this.polygonOffset=!1;this.polygonOffsetUnits=this.polygonOffsetFactor=0;this.dithering=!1;this.alphaTest=0;this.premultipliedAlpha=!1;this.toneMapped=this.visible=!0;this.userData={};this.version=0}function Na(a){L.call(this);this.type="MeshBasicMaterial";this.color=new H(16777215);this.lightMap=this.map=null;this.lightMapIntensity=1;this.aoMap=null;this.aoMapIntensity= +1;this.envMap=this.alphaMap=this.specularMap=null;this.combine=0;this.reflectivity=1;this.refractionRatio=.98;this.wireframe=!1;this.wireframeLinewidth=1;this.wireframeLinejoin=this.wireframeLinecap="round";this.morphTargets=this.skinning=!1;this.setValues(a)}function J(a,b,c){if(Array.isArray(a))throw new TypeError("THREE.BufferAttribute: array should be a Typed Array.");this.name="";this.array=a;this.itemSize=b;this.count=void 0!==a?a.length/b:0;this.normalized=!0===c;this.usage=35044;this.updateRange= +{offset:0,count:-1};this.version=0}function Bd(a,b,c){J.call(this,new Int8Array(a),b,c)}function Cd(a,b,c){J.call(this,new Uint8Array(a),b,c)}function Dd(a,b,c){J.call(this,new Uint8ClampedArray(a),b,c)}function Ed(a,b,c){J.call(this,new Int16Array(a),b,c)}function Yb(a,b,c){J.call(this,new Uint16Array(a),b,c)}function Fd(a,b,c){J.call(this,new Int32Array(a),b,c)}function Zb(a,b,c){J.call(this,new Uint32Array(a),b,c)}function A(a,b,c){J.call(this,new Float32Array(a),b,c)}function Gd(a,b,c){J.call(this, +new Float64Array(a),b,c)}function th(){this.vertices=[];this.normals=[];this.colors=[];this.uvs=[];this.uvs2=[];this.groups=[];this.morphTargets={};this.skinWeights=[];this.skinIndices=[];this.boundingSphere=this.boundingBox=null;this.groupsNeedUpdate=this.uvsNeedUpdate=this.colorsNeedUpdate=this.normalsNeedUpdate=this.verticesNeedUpdate=!1}function uh(a){if(0===a.length)return-Infinity;for(var b=a[0],c=1,d=a.length;cb&&(b=a[c]);return b}function E(){Object.defineProperty(this,"id",{value:hj+= +2});this.uuid=P.generateUUID();this.name="";this.type="BufferGeometry";this.index=null;this.attributes={};this.morphAttributes={};this.morphTargetsRelative=!1;this.groups=[];this.boundingSphere=this.boundingBox=null;this.drawRange={start:0,count:Infinity};this.userData={}}function T(a,b){C.call(this);this.type="Mesh";this.geometry=void 0!==a?a:new E;this.material=void 0!==b?b:new Na;this.updateMorphTargets()}function vh(a,b,c,d,e,f,g,h){if(null===(1===b.side?d.intersectTriangle(g,f,e,!0,h):d.intersectTriangle(e, +f,g,2!==b.side,h)))return null;Ie.copy(h);Ie.applyMatrix4(a.matrixWorld);b=c.ray.origin.distanceTo(Ie);return bc.far?null:{distance:b,point:Ie.clone(),object:a}}function Je(a,b,c,d,e,f,g,h,l,n,q,p){yb.fromBufferAttribute(e,n);zb.fromBufferAttribute(e,q);Ab.fromBufferAttribute(e,p);e=a.morphTargetInfluences;if(b.morphTargets&&f&&e){Ke.set(0,0,0);Le.set(0,0,0);Me.set(0,0,0);for(var z=0,k=f.length;zg;g++)a.setRenderTarget(c,g),a.clear(b,d,e);a.setRenderTarget(f)}}}function ac(a,b,c){Number.isInteger(b)&&(console.warn("THREE.WebGLCubeRenderTarget: constructor signature is now WebGLCubeRenderTarget( size, options )"),b=c);Ga.call(this,a,a,b)}function bc(a,b,c,d,e,f,g,h,l,n,q,p){V.call(this,null,f,g,h,l,n,d,e,q,p);this.image={data:a||null,width:b||1,height:c||1};this.magFilter= +void 0!==l?l:1003;this.minFilter=void 0!==n?n:1003;this.flipY=this.generateMipmaps=!1;this.unpackAlignment=1;this.needsUpdate=!0}function Jc(a,b,c,d,e,f){this.planes=[void 0!==a?a:new Ta,void 0!==b?b:new Ta,void 0!==c?c:new Ta,void 0!==d?d:new Ta,void 0!==e?e:new Ta,void 0!==f?f:new Ta]}function wh(){function a(c,g){d(c,g);e=b.requestAnimationFrame(a)}var b=null,c=!1,d=null,e=null;return{start:function(){!0!==c&&null!==d&&(e=b.requestAnimationFrame(a),c=!0)},stop:function(){b.cancelAnimationFrame(e); +c=!1},setAnimationLoop:function(a){d=a},setContext:function(a){b=a}}}function kj(a,b){function c(b,c){var d=b.array,e=b.usage,f=a.createBuffer();a.bindBuffer(c,f);a.bufferData(c,d,e);b.onUploadCallback();c=5126;d instanceof Float32Array?c=5126:d instanceof Float64Array?console.warn("THREE.WebGLAttributes: Unsupported data buffer format: Float64Array."):d instanceof Uint16Array?c=5123:d instanceof Int16Array?c=5122:d instanceof Uint32Array?c=5125:d instanceof Int32Array?c=5124:d instanceof Int8Array? +c=5120:d instanceof Uint8Array&&(c=5121);return{buffer:f,type:c,bytesPerElement:d.BYTES_PER_ELEMENT,version:b.version}}var d=b.isWebGL2,e=new WeakMap;return{get:function(a){a.isInterleavedBufferAttribute&&(a=a.data);return e.get(a)},remove:function(b){b.isInterleavedBufferAttribute&&(b=b.data);var c=e.get(b);c&&(a.deleteBuffer(c.buffer),e.delete(b))},update:function(b,g){b.isInterleavedBufferAttribute&&(b=b.data);var f=e.get(b);if(void 0===f)e.set(b,c(b,g));else if(f.versione;e++)d[e]=[e,0];return{update:function(e,g,h,l){var f=e.morphTargetInfluences;e=void 0===f?0:f.length;var q=b[g.id];if(void 0===q){q=[];for(var p=0;pf;f++)ff;f++)k=d[f],p=k[0],k=k[1],p!==Number.MAX_SAFE_INTEGER&&k?(e&&g.getAttribute("morphTarget"+f)!==e[p]&&g.setAttribute("morphTarget"+f,e[p]),h&&g.getAttribute("morphNormal"+f)!==h[p]&&g.setAttribute("morphNormal"+f,h[p]),c[f]=k,q+=k):(e&&void 0!==g.getAttribute("morphTarget"+f)&&g.deleteAttribute("morphTarget"+f),h&&void 0!==g.getAttribute("morphNormal"+f)&&g.deleteAttribute("morphNormal"+f),c[f]=0);g=g.morphTargetsRelative? +1:1-q;l.getUniforms().setValue(a,"morphTargetBaseInfluence",g);l.getUniforms().setValue(a,"morphTargetInfluences",c)}}}function xj(a,b,c,d){var e=new WeakMap;return{update:function(a){var f=d.render.frame,h=a.geometry,l=b.get(a,h);e.get(l)!==f&&(h.isGeometry&&l.updateFromObject(a),b.update(l),e.set(l,f));a.isInstancedMesh&&c.update(a.instanceMatrix,34962);return l},dispose:function(){e=new WeakMap}}}function ob(a,b,c,d,e,f,g,h,l,n){a=void 0!==a?a:[];V.call(this,a,void 0!==b?b:301,c,d,e,f,void 0!== +g?g:1022,h,l,n);this.flipY=!1}function Kc(a,b,c,d){V.call(this,null);this.image={data:a||null,width:b||1,height:c||1,depth:d||1};this.minFilter=this.magFilter=1003;this.wrapR=1001;this.flipY=this.generateMipmaps=!1;this.needsUpdate=!0}function Lc(a,b,c,d){V.call(this,null);this.image={data:a||null,width:b||1,height:c||1,depth:d||1};this.minFilter=this.magFilter=1003;this.wrapR=1001;this.flipY=this.generateMipmaps=!1;this.needsUpdate=!0}function Mc(a,b,c){var d=a[0];if(0>=d||0");return a.replace(kg,jg)}function Mh(a,b,c,d){console.warn("WebGLProgram: #pragma unroll_loop shader syntax is deprecated. Please use #pragma unroll_loop_start syntax instead.");return lg(a,b,c,d)}function lg(a,b,c,d){a="";for(b=parseInt(b);bd;d++)c.probe.push(new m);var e=new m,f=new U,g=new U;return{setup:function(d,l,n){for(var h=l=0,p=0,k=0;9>k;k++)c.probe[k].set(0,0,0);var r=k=0,t=0,v=0,m=0,B=0,w=0,ca=0;n=n.matrixWorldInverse;d.sort(wk);for(var Q=0,N=d.length;Qha;ha++)c.probe[ha].addScaledVector(y.sh.coefficients[ha],u);else if(y.isDirectionalLight){u=a.get(y);u.color.copy(y.color).multiplyScalar(y.intensity);u.direction.setFromMatrixPosition(y.matrixWorld);e.setFromMatrixPosition(y.target.matrixWorld);u.direction.sub(e);u.direction.transformDirection(n);if(y.castShadow){var va=y.shadow;I=b.get(y);I.shadowBias=va.bias;I.shadowNormalBias=va.normalBias;I.shadowRadius=va.radius; +I.shadowMapSize=va.mapSize;c.directionalShadow[k]=I;c.directionalShadowMap[k]=ha;c.directionalShadowMatrix[k]=y.shadow.matrix;B++}c.directional[k]=u;k++}else y.isSpotLight?(va=a.get(y),va.position.setFromMatrixPosition(y.matrixWorld),va.position.applyMatrix4(n),va.color.copy(I).multiplyScalar(u),va.distance=D,va.direction.setFromMatrixPosition(y.matrixWorld),e.setFromMatrixPosition(y.target.matrixWorld),va.direction.sub(e),va.direction.transformDirection(n),va.coneCos=Math.cos(y.angle),va.penumbraCos= +Math.cos(y.angle*(1-y.penumbra)),va.decay=y.decay,y.castShadow&&(u=y.shadow,I=b.get(y),I.shadowBias=u.bias,I.shadowNormalBias=u.normalBias,I.shadowRadius=u.radius,I.shadowMapSize=u.mapSize,c.spotShadow[t]=I,c.spotShadowMap[t]=ha,c.spotShadowMatrix[t]=y.shadow.matrix,ca++),c.spot[t]=va,t++):y.isRectAreaLight?(ha=a.get(y),ha.color.copy(I).multiplyScalar(u),ha.position.setFromMatrixPosition(y.matrixWorld),ha.position.applyMatrix4(n),g.identity(),f.copy(y.matrixWorld),f.premultiply(n),g.extractRotation(f), +ha.halfWidth.set(.5*y.width,0,0),ha.halfHeight.set(0,.5*y.height,0),ha.halfWidth.applyMatrix4(g),ha.halfHeight.applyMatrix4(g),c.rectArea[v]=ha,v++):y.isPointLight?(u=a.get(y),u.position.setFromMatrixPosition(y.matrixWorld),u.position.applyMatrix4(n),u.color.copy(y.color).multiplyScalar(y.intensity),u.distance=y.distance,u.decay=y.decay,y.castShadow&&(va=y.shadow,I=b.get(y),I.shadowBias=va.bias,I.shadowNormalBias=va.normalBias,I.shadowRadius=va.radius,I.shadowMapSize=va.mapSize,I.shadowCameraNear= +va.camera.near,I.shadowCameraFar=va.camera.far,c.pointShadow[r]=I,c.pointShadowMap[r]=ha,c.pointShadowMatrix[r]=y.shadow.matrix,w++),c.point[r]=u,r++):y.isHemisphereLight&&(ha=a.get(y),ha.direction.setFromMatrixPosition(y.matrixWorld),ha.direction.transformDirection(n),ha.direction.normalize(),ha.skyColor.copy(y.color).multiplyScalar(u),ha.groundColor.copy(y.groundColor).multiplyScalar(u),c.hemi[m]=ha,m++)}c.ambient[0]=l;c.ambient[1]=h;c.ambient[2]=p;d=c.hash;if(d.directionalLength!==k||d.pointLength!== +r||d.spotLength!==t||d.rectAreaLength!==v||d.hemiLength!==m||d.numDirectionalShadows!==B||d.numPointShadows!==w||d.numSpotShadows!==ca)c.directional.length=k,c.spot.length=t,c.rectArea.length=v,c.point.length=r,c.hemi.length=m,c.directionalShadow.length=B,c.directionalShadowMap.length=B,c.pointShadow.length=w,c.pointShadowMap.length=w,c.spotShadow.length=ca,c.spotShadowMap.length=ca,c.directionalShadowMatrix.length=B,c.pointShadowMatrix.length=w,c.spotShadowMatrix.length=ca,d.directionalLength=k, +d.pointLength=r,d.spotLength=t,d.rectAreaLength=v,d.hemiLength=m,d.numDirectionalShadows=B,d.numPointShadows=w,d.numSpotShadows=ca,c.version=yk++},state:c}}function Sh(){var a=new xk,b=[],c=[];return{init:function(){b.length=0;c.length=0},state:{lightsArray:b,shadowsArray:c,lights:a},setupLights:function(d){a.setup(b,c,d)},pushLight:function(a){b.push(a)},pushShadow:function(a){c.push(a)}}}function zk(){function a(c){c=c.target;c.removeEventListener("dispose",a);b.delete(c)}var b=new WeakMap;return{get:function(c, +d){if(!1===b.has(c)){var e=new Sh;b.set(c,new WeakMap);b.get(c).set(d,e);c.addEventListener("dispose",a)}else!1===b.get(c).has(d)?(e=new Sh,b.get(c).set(d,e)):e=b.get(c).get(d);return e},dispose:function(){b=new WeakMap}}}function Db(a){L.call(this);this.type="MeshDepthMaterial";this.depthPacking=3200;this.morphTargets=this.skinning=!1;this.displacementMap=this.alphaMap=this.map=null;this.displacementScale=1;this.displacementBias=0;this.wireframe=!1;this.wireframeLinewidth=1;this.fog=!1;this.setValues(a)} +function Eb(a){L.call(this);this.type="MeshDistanceMaterial";this.referencePosition=new m;this.nearDistance=1;this.farDistance=1E3;this.morphTargets=this.skinning=!1;this.displacementMap=this.alphaMap=this.map=null;this.displacementScale=1;this.displacementBias=0;this.fog=!1;this.setValues(a)}function Th(a,b,c){function d(a,b,c){c=a<<0|b<<1|c<<2;var d=p[c];void 0===d&&(d=new Db({depthPacking:3201,morphTargets:a,skinning:b}),p[c]=d);return d}function e(a,b,c){c=a<<0|b<<1|c<<2;var d=k[c];void 0===d&& +(d=new Eb({morphTargets:a,skinning:b}),k[c]=d);return d}function f(b,c,f,g,h,l,n){var q=d,p=b.customDepthMaterial;!0===g.isPointLight&&(q=e,p=b.customDistanceMaterial);void 0===p?(p=!1,!0===f.morphTargets&&(p=c.morphAttributes&&c.morphAttributes.position&&0\nvoid main() {\n float mean = 0.0;\n float squared_mean = 0.0;\n\tfloat depth = unpackRGBAToDepth( texture2D( shadow_pass, ( gl_FragCoord.xy ) / resolution ) );\n for ( float i = -1.0; i < 1.0 ; i += SAMPLE_RATE) {\n #ifdef HORIZONAL_PASS\n vec2 distribution = unpackRGBATo2Half( texture2D( shadow_pass, ( gl_FragCoord.xy + vec2( i, 0.0 ) * radius ) / resolution ) );\n mean += distribution.x;\n squared_mean += distribution.y * distribution.y + distribution.x * distribution.x;\n #else\n float depth = unpackRGBAToDepth( texture2D( shadow_pass, ( gl_FragCoord.xy + vec2( 0.0, i ) * radius ) / resolution ) );\n mean += depth;\n squared_mean += depth * depth;\n #endif\n }\n mean = mean * HALF_SAMPLE_RATE;\n squared_mean = squared_mean * HALF_SAMPLE_RATE;\n float std_dev = sqrt( squared_mean - mean * mean );\n gl_FragColor = pack2HalfToRGBA( vec2( mean, std_dev ) );\n}"}), +x=m.clone();x.defines.HORIZONAL_PASS=1;var B=new E;B.setAttribute("position",new J(new Float32Array([-1,-1,.5,3,-1,.5,-1,3,.5]),3));var w=new T(B,m),ca=this;this.enabled=!1;this.autoUpdate=!0;this.needsUpdate=!1;this.type=1;this.render=function(d,e,f){if(!1!==ca.enabled&&(!1!==ca.autoUpdate||!1!==ca.needsUpdate)&&0!==d.length){var p=a.getRenderTarget(),k=a.getActiveCubeFace(),z=a.getActiveMipmapLevel(),r=a.state;r.setBlending(0);r.buffers.color.setClear(1,1,1,1);r.buffers.depth.setTest(!0);r.setScissorTest(!1); +for(var t=0,v=d.length;tc||l.y>c)l.x>c&&(n.x=Math.floor(c/u.x),l.x=n.x*u.x,y.mapSize.x=n.x),l.y>c&&(n.y=Math.floor(c/u.y),l.y=n.y*u.y,y.mapSize.y=n.y);null!==y.map||y.isPointLightShadow||3!==this.type||(u={minFilter:1006,magFilter:1006,format:1023,stencilBuffer:!1},y.map= +new Ga(l.x,l.y,u),y.map.texture.name=B.name+".shadowMap",y.mapPass=new Ga(l.x,l.y,u),y.camera.updateProjectionMatrix());null===y.map&&(y.map=new Ga(l.x,l.y,{minFilter:1003,magFilter:1003,format:1023,stencilBuffer:!1}),y.map.texture.name=B.name+".shadowMap",y.camera.updateProjectionMatrix());a.setRenderTarget(y.map);a.clear();u=y.getViewportCount();for(var N=0;Nd||a.height>d)e=d/Math.max(a.width,a.height);if(1>e||!0===b){if("undefined"!==typeof HTMLImageElement&&a instanceof HTMLImageElement||"undefined"!==typeof HTMLCanvasElement&&a instanceof HTMLCanvasElement||"undefined"!==typeof ImageBitmap&&a instanceof ImageBitmap)return d=b?P.floorPowerOfTwo:Math.floor,b=d(e*a.width),e=d(e*a.height),void 0===K&&(K=h(b,e)),c=c?h(b,e):K,c.width=b,c.height=e,c.getContext("2d").drawImage(a,0,0,b,e),console.warn("THREE.WebGLRenderer: Texture has been resized from ("+ +a.width+"x"+a.height+") to ("+b+"x"+e+")."),c;"data"in a&&console.warn("THREE.WebGLRenderer: Image in DataTexture is too big ("+a.width+"x"+a.height+").")}return a}function n(a){return P.isPowerOfTwo(a.width)&&P.isPowerOfTwo(a.height)}function q(a,b){return a.generateMipmaps&&b&&1003!==a.minFilter&&1006!==a.minFilter}function p(b,c,e,f){a.generateMipmap(b);d.get(c).__maxMipLevel=Math.log(Math.max(e,f))*Math.LOG2E}function k(c,d,e){if(!1===D)return d;if(null!==c){if(void 0!==a[c])return a[c];console.warn("THREE.WebGLRenderer: Attempt to use non-existing WebGL internal format '"+ +c+"'")}c=d;6403===d&&(5126===e&&(c=33326),5131===e&&(c=33325),5121===e&&(c=33321));6407===d&&(5126===e&&(c=34837),5131===e&&(c=34843),5121===e&&(c=32849));6408===d&&(5126===e&&(c=34836),5131===e&&(c=34842),5121===e&&(c=32856));33325!==c&&33326!==c&&34842!==c&&34836!==c||b.get("EXT_color_buffer_float");return c}function r(a){return 1003===a||1004===a||1005===a?9728:9729}function t(b){b=b.target;b.removeEventListener("dispose",t);var c=d.get(b);void 0!==c.__webglInit&&(a.deleteTexture(c.__webglTexture), +d.remove(b));b.isVideoTexture&&H.delete(b);g.memory.textures--}function m(b){b=b.target;b.removeEventListener("dispose",m);var c=d.get(b),e=d.get(b.texture);if(b){void 0!==e.__webglTexture&&a.deleteTexture(e.__webglTexture);b.depthTexture&&b.depthTexture.dispose();if(b.isWebGLCubeRenderTarget)for(e=0;6>e;e++)a.deleteFramebuffer(c.__webglFramebuffer[e]),c.__webglDepthbuffer&&a.deleteRenderbuffer(c.__webglDepthbuffer[e]);else a.deleteFramebuffer(c.__webglFramebuffer),c.__webglDepthbuffer&&a.deleteRenderbuffer(c.__webglDepthbuffer), +c.__webglMultisampledFramebuffer&&a.deleteFramebuffer(c.__webglMultisampledFramebuffer),c.__webglColorRenderbuffer&&a.deleteRenderbuffer(c.__webglColorRenderbuffer),c.__webglDepthRenderbuffer&&a.deleteRenderbuffer(c.__webglDepthRenderbuffer);d.remove(b.texture);d.remove(b)}g.memory.textures--}function x(a,b){var e=d.get(a);if(a.isVideoTexture){var f=g.render.frame;H.get(a)!==f&&(H.set(a,f),a.update())}if(0r;r++)e[r]=h||z?z?b.image[r].image:b.image[r]:l(b.image[r],!1,!0,C);r=e[0];var t=n(r)||D,m=f.convert(b.format),v=f.convert(b.type),x=k(b.internalFormat,m,v);u(34067,b,t);if(h){for(z=0;6>z;z++){var w=e[z].mipmaps;for(h=0;hh;h++)if(z)for(c.texImage2D(34069+h,0,x,e[h].width,e[h].height,0,m,v,e[h].data),y=0;y=ha&&console.warn("THREE.WebGLTextures: Trying to use "+a+" texture units while this GPU supports only "+ha);L+=1;return a};this.resetTextureUnits=function(){L=0};this.setTexture2D=x;this.setTexture2DArray=function(a,b){var e=d.get(a);0z;z++)e.__webglFramebuffer[z]=a.createFramebuffer();else if(e.__webglFramebuffer=a.createFramebuffer(),z)if(D){e.__webglMultisampledFramebuffer=a.createFramebuffer();e.__webglColorRenderbuffer=a.createRenderbuffer();a.bindRenderbuffer(36161,e.__webglColorRenderbuffer);z=f.convert(b.texture.format);var t=f.convert(b.texture.type);z=k(b.texture.internalFormat,z,t);t=A(b);a.renderbufferStorageMultisample(36161,t,z,b.width,b.height);a.bindFramebuffer(36160,e.__webglMultisampledFramebuffer); +a.framebufferRenderbuffer(36160,36064,36161,e.__webglColorRenderbuffer);a.bindRenderbuffer(36161,null);b.depthBuffer&&(e.__webglDepthRenderbuffer=a.createRenderbuffer(),I(e.__webglDepthRenderbuffer,b,!0));a.bindFramebuffer(36160,null)}else console.warn("THREE.WebGLRenderer: WebGLMultisampleRenderTarget can only be used with WebGL2.");if(l){c.bindTexture(34067,h.__webglTexture);u(34067,b.texture,r);for(h=0;6>h;h++)y(e.__webglFramebuffer[h],b,36064,34069+h);q(b.texture,r)&&p(34067,b.texture,b.width, +b.height);c.bindTexture(34067,null)}else c.bindTexture(3553,h.__webglTexture),u(3553,b.texture,r),y(e.__webglFramebuffer,b,36064,3553),q(b.texture,r)&&p(3553,b.texture,b.width,b.height),c.bindTexture(3553,null);if(b.depthBuffer){e=d.get(b);r=!0===b.isWebGLCubeRenderTarget;if(b.depthTexture){if(r)throw Error("target.depthTexture not supported in Cube render targets");if(b&&b.isWebGLCubeRenderTarget)throw Error("Depth Texture with cube render targets is not supported");a.bindFramebuffer(36160,e.__webglFramebuffer); +if(!b.depthTexture||!b.depthTexture.isDepthTexture)throw Error("renderTarget.depthTexture must be an instance of THREE.DepthTexture");d.get(b.depthTexture).__webglTexture&&b.depthTexture.image.width===b.width&&b.depthTexture.image.height===b.height||(b.depthTexture.image.width=b.width,b.depthTexture.image.height=b.height,b.depthTexture.needsUpdate=!0);x(b.depthTexture,0);e=d.get(b.depthTexture).__webglTexture;if(1026===b.depthTexture.format)a.framebufferTexture2D(36160,36096,3553,e,0);else if(1027=== +b.depthTexture.format)a.framebufferTexture2D(36160,33306,3553,e,0);else throw Error("Unknown depthTexture format");}else if(r)for(e.__webglDepthbuffer=[],r=0;6>r;r++)a.bindFramebuffer(36160,e.__webglFramebuffer[r]),e.__webglDepthbuffer[r]=a.createRenderbuffer(),I(e.__webglDepthbuffer[r],b,!1);else a.bindFramebuffer(36160,e.__webglFramebuffer),e.__webglDepthbuffer=a.createRenderbuffer(),I(e.__webglDepthbuffer,b,!1);a.bindFramebuffer(36160,null)}};this.updateRenderTargetMipmap=function(a){var b=a.texture, +e=n(a)||D;if(q(b,e)){e=a.isWebGLCubeRenderTarget?34067:3553;var f=d.get(b).__webglTexture;c.bindTexture(e,f);p(e,b,a.width,a.height);c.bindTexture(e,null)}};this.updateMultisampleRenderTarget=function(b){if(b.isWebGLMultisampleRenderTarget)if(D){var c=d.get(b);a.bindFramebuffer(36008,c.__webglMultisampledFramebuffer);a.bindFramebuffer(36009,c.__webglFramebuffer);var e=b.width,f=b.height,g=16384;b.depthBuffer&&(g|=256);b.stencilBuffer&&(g|=1024);a.blitFramebuffer(0,0,e,f,0,0,e,f,g,9728);a.bindFramebuffer(36160, +c.__webglMultisampledFramebuffer)}else console.warn("THREE.WebGLRenderer: WebGLMultisampleRenderTarget can only be used with WebGL2.")};this.safeSetTexture2D=function(a,b){a&&a.isWebGLRenderTarget&&(!1===O&&(console.warn("THREE.WebGLTextures.safeSetTexture2D: don't use render targets as textures. Use their .texture property instead."),O=!0),a=a.texture);x(a,b)};this.safeSetTextureCube=function(a,b){a&&a.isWebGLCubeRenderTarget&&(!1===S&&(console.warn("THREE.WebGLTextures.safeSetTextureCube: don't use cube render targets as textures. Use their .texture property instead."), +S=!0),a=a.texture);a&&a.isCubeTexture||Array.isArray(a.image)&&6===a.image.length?B(a,b):w(a,b)}}function Uh(a,b,c){var d=c.isWebGL2;return{convert:function(a){if(1009===a)return 5121;if(1017===a)return 32819;if(1018===a)return 32820;if(1019===a)return 33635;if(1010===a)return 5120;if(1011===a)return 5122;if(1012===a)return 5123;if(1013===a)return 5124;if(1014===a)return 5125;if(1015===a)return 5126;if(1016===a){if(d)return 5131;var c=b.get("OES_texture_half_float");return null!==c?c.HALF_FLOAT_OES: +null}if(1021===a)return 6406;if(1022===a)return 6407;if(1023===a)return 6408;if(1024===a)return 6409;if(1025===a)return 6410;if(1026===a)return 6402;if(1027===a)return 34041;if(1028===a)return 6403;if(1029===a)return 36244;if(1030===a)return 33319;if(1031===a)return 33320;if(1032===a)return 36248;if(1033===a)return 36249;if(33776===a||33777===a||33778===a||33779===a)if(c=b.get("WEBGL_compressed_texture_s3tc"),null!==c){if(33776===a)return c.COMPRESSED_RGB_S3TC_DXT1_EXT;if(33777===a)return c.COMPRESSED_RGBA_S3TC_DXT1_EXT; +if(33778===a)return c.COMPRESSED_RGBA_S3TC_DXT3_EXT;if(33779===a)return c.COMPRESSED_RGBA_S3TC_DXT5_EXT}else return null;if(35840===a||35841===a||35842===a||35843===a)if(c=b.get("WEBGL_compressed_texture_pvrtc"),null!==c){if(35840===a)return c.COMPRESSED_RGB_PVRTC_4BPPV1_IMG;if(35841===a)return c.COMPRESSED_RGB_PVRTC_2BPPV1_IMG;if(35842===a)return c.COMPRESSED_RGBA_PVRTC_4BPPV1_IMG;if(35843===a)return c.COMPRESSED_RGBA_PVRTC_2BPPV1_IMG}else return null;if(36196===a)return c=b.get("WEBGL_compressed_texture_etc1"), +null!==c?c.COMPRESSED_RGB_ETC1_WEBGL:null;if(37492===a||37496===a)if(c=b.get("WEBGL_compressed_texture_etc"),null!==c){if(37492===a)return c.COMPRESSED_RGB8_ETC2;if(37496===a)return c.COMPRESSED_RGBA8_ETC2_EAC}if(37808===a||37809===a||37810===a||37811===a||37812===a||37813===a||37814===a||37815===a||37816===a||37817===a||37818===a||37819===a||37820===a||37821===a||37840===a||37841===a||37842===a||37843===a||37844===a||37845===a||37846===a||37847===a||37848===a||37849===a||37850===a||37851===a||37852=== +a||37853===a)return c=b.get("WEBGL_compressed_texture_astc"),null!==c?a:null;if(36492===a)return c=b.get("EXT_texture_compression_bptc"),null!==c?a:null;if(1020===a){if(d)return 34042;c=b.get("WEBGL_depth_texture");return null!==c?c.UNSIGNED_INT_24_8_WEBGL:null}}}}function Ne(a){W.call(this);this.cameras=a||[]}function Gb(){C.call(this);this.type="Group"}function Md(){this._hand=this._grip=this._targetRay=null}function Vh(a,b){function c(a){var b=t.get(a.inputSource);b&&b.dispatchEvent({type:a.type})} +function d(){t.forEach(function(a,b){a.disconnect(b)});t.clear();a.setFramebuffer(null);a.setRenderTarget(a.getRenderTarget());A.stop();h.isPresenting=!1;h.dispatchEvent({type:"sessionend"})}function e(a){q=a;A.setContext(l);A.start();h.isPresenting=!0;h.dispatchEvent({type:"sessionstart"})}function f(a){for(var b=l.inputSources,c=0;ce.matrixWorld.determinant();a=k(a,b,d,e);na.setMaterial(d,g);g=c.index;b=c.attributes.position;if(null===g){if(void 0===b||0===b.count)return}else if(0===g.count)return;var h=1;!0===d.wireframe&&(g=ya.getWireframeAttribute(c),h=2);(d.morphTargets||d.morphNormals)&&Ca.update(e,c,d,a);ia.setup(e,d,a,c,g);a=Da;if(null!==g){var l=ua.get(g);a=Ea;a.setIndex(l)}var n=c.drawRange.start*h,q=null!==f?f.start* +h:0;l=Math.max(n,q);f=Math.max(0,Math.min(null!==g?g.count:b.count,n+c.drawRange.count*h,q+(null!==f?f.count*h:Infinity))-1-l+1);0!==f&&(e.isMesh?!0===d.wireframe?(na.setLineWidth(d.wireframeLinewidth*(null===J?R:1)),a.setMode(1)):a.setMode(4):e.isLine?(d=d.linewidth,void 0===d&&(d=1),na.setLineWidth(d*(null===J?R:1)),e.isLineSegments?a.setMode(1):e.isLineLoop?a.setMode(2):a.setMode(3)):e.isPoints?a.setMode(0):e.isSprite&&a.setMode(4),e.isInstancedMesh?a.renderInstances(l,f,e.count):c.isInstancedBufferGeometry? +a.renderInstances(l,f,Math.min(c.instanceCount,c._maxInstanceCount)):a.render(l,f))};this.compile=function(a,b){A=wa.get(a,b);A.init();a.traverse(function(a){a.isLight&&(A.pushLight(a),a.castShadow&&A.pushShadow(a))});A.setupLights(b);var c=new WeakMap;a.traverse(function(b){var d=b.material;if(d)if(Array.isArray(d))for(var e=0;ee.far||f.push({distance:a,distanceToRay:Math.sqrt(h),point:c,index:b,face:null,object:g}))}function sg(a,b,c,d,e,f,g,h,l){function n(){q.needsUpdate=!0;a.requestVideoFrameCallback(n)}V.call(this,a,b,c,d,e,f,g,h,l);this.format=void 0!==g?g:1022;this.minFilter=void 0!==f?f:1006;this.magFilter=void 0!==e?e:1006;this.generateMipmaps=!1;var q=this;"requestVideoFrameCallback"in +a&&a.requestVideoFrameCallback(n)}function Qc(a,b,c,d,e,f,g,h,l,n,q,p){V.call(this,null,f,g,h,l,n,d,e,q,p);this.image={width:b,height:c};this.mipmaps=a;this.generateMipmaps=this.flipY=!1}function Rd(a,b,c,d,e,f,g,h,l){V.call(this,a,b,c,d,e,f,g,h,l);this.needsUpdate=!0}function Sd(a,b,c,d,e,f,g,h,l,n){n=void 0!==n?n:1026;if(1026!==n&&1027!==n)throw Error("DepthTexture format must be either THREE.DepthFormat or THREE.DepthStencilFormat");void 0===c&&1026===n&&(c=1012);void 0===c&&1027===n&&(c=1020); +V.call(this,null,d,e,f,g,h,n,c,l);this.image={width:a,height:b};this.magFilter=void 0!==g?g:1003;this.minFilter=void 0!==h?h:1003;this.generateMipmaps=this.flipY=!1}function Rc(a){E.call(this);this.type="WireframeGeometry";var b=[],c=[0,0],d={},e=["a","b","c"];if(a&&a.isGeometry){for(var f=a.faces,g=0,h=f.length;gn;n++){var q=l[e[n]],p=l[e[(n+1)%3]];c[0]=Math.min(q,p);c[1]=Math.max(q,p);q=c[0]+","+c[1];void 0===d[q]&&(d[q]={index1:c[0],index2:c[1]})}for(var k in d)c=d[k], +f=a.vertices[c.index1],b.push(f.x,f.y,f.z),f=a.vertices[c.index2],b.push(f.x,f.y,f.z)}else if(a&&a.isBufferGeometry)if(k=new m,null!==a.index){e=a.attributes.position;g=a.index;a=a.groups;0===a.length&&(a=[{start:0,count:g.count,materialIndex:0}]);h=0;for(l=a.length;hp;p++){var r=g.getX(n+p),t=g.getX(n+(p+1)%3);c[0]=Math.min(r,t);c[1]=Math.max(r,t);r=c[0]+","+c[1];void 0===d[r]&&(d[r]={index1:c[0],index2:c[1]})}for(f in d)c=d[f],k.fromBufferAttribute(e, +c.index1),b.push(k.x,k.y,k.z),k.fromBufferAttribute(e,c.index2),b.push(k.x,k.y,k.z)}else for(d=a.attributes.position,c=0,f=d.count/3;ca;a++)k.fromBufferAttribute(d,3*c+a),b.push(k.x,k.y,k.z),k.fromBufferAttribute(d,3*c+(a+1)%3),b.push(k.x,k.y,k.z);this.setAttribute("position",new A(b,3))}function Td(a,b,c){F.call(this);this.type="ParametricGeometry";this.parameters={func:a,slices:b,stacks:c};this.fromBufferGeometry(new Sc(a,b,c));this.mergeVertices()}function Sc(a,b,c){E.call(this); +this.type="ParametricBufferGeometry";this.parameters={func:a,slices:b,stacks:c};var d=[],e=[],f=[],g=[],h=new m,l=new m,n=new m,q=new m,k=new m;3>a.length&&console.error("THREE.ParametricGeometry: Function must now modify a Vector3 as third parameter.");for(var z=b+1,r=0;r<=c;r++)for(var t=r/c,v=0;v<=b;v++){var x=v/b;a(x,t,l);e.push(l.x,l.y,l.z);0<=x-1E-5?(a(x-1E-5,t,n),q.subVectors(l,n)):(a(x+1E-5,t,n),q.subVectors(n,l));0<=t-1E-5?(a(x,t-1E-5,n),k.subVectors(l,n)):(a(x,t+1E-5,n),k.subVectors(n,l)); +h.crossVectors(q,k).normalize();f.push(h.x,h.y,h.z);g.push(x,t)}for(a=0;ad&&1===a.x&&(l[b]=a.x-1);0===c.x&&0===c.z&&(l[b]=d/2/Math.PI+.5)}E.call(this);this.type="PolyhedronBufferGeometry";this.parameters={vertices:a,indices:b,radius:c,detail:d};c=c||1;d=d||0;var h=[],l=[];(function(a){for(var c=new m,d=new m,g=new m,h=0;he&&(.2>b&&(l[a+0]+=1), +.2>c&&(l[a+2]+=1),.2>d&&(l[a+4]+=1))})();this.setAttribute("position",new A(h,3));this.setAttribute("normal",new A(h.slice(),3));this.setAttribute("uv",new A(l,2));0===d?this.computeVertexNormals():this.normalizeNormals()}function Vd(a,b){F.call(this);this.type="TetrahedronGeometry";this.parameters={radius:a,detail:b};this.fromBufferGeometry(new Tc(a,b));this.mergeVertices()}function Tc(a,b){sa.call(this,[1,1,1,-1,-1,1,-1,1,-1,1,-1,-1],[2,1,0,0,3,2,1,3,0,2,3,1],a,b);this.type="TetrahedronBufferGeometry"; +this.parameters={radius:a,detail:b}}function Wd(a,b){F.call(this);this.type="OctahedronGeometry";this.parameters={radius:a,detail:b};this.fromBufferGeometry(new ec(a,b));this.mergeVertices()}function ec(a,b){sa.call(this,[1,0,0,-1,0,0,0,1,0,0,-1,0,0,0,1,0,0,-1],[0,2,4,0,4,3,0,3,5,0,5,2,1,2,5,1,5,3,1,3,4,1,4,2],a,b);this.type="OctahedronBufferGeometry";this.parameters={radius:a,detail:b}}function Xd(a,b){F.call(this);this.type="IcosahedronGeometry";this.parameters={radius:a,detail:b};this.fromBufferGeometry(new Uc(a, +b));this.mergeVertices()}function Uc(a,b){var c=(1+Math.sqrt(5))/2;sa.call(this,[-1,c,0,1,c,0,-1,-c,0,1,-c,0,0,-1,c,0,1,c,0,-1,-c,0,1,-c,c,0,-1,c,0,1,-c,0,-1,-c,0,1],[0,11,5,0,5,1,0,1,7,0,7,10,0,10,11,1,5,9,5,11,4,11,10,2,10,7,6,7,1,8,3,9,4,3,4,2,3,2,6,3,6,8,3,8,9,4,9,5,2,4,11,6,2,10,8,6,7,9,8,1],a,b);this.type="IcosahedronBufferGeometry";this.parameters={radius:a,detail:b}}function Yd(a,b){F.call(this);this.type="DodecahedronGeometry";this.parameters={radius:a,detail:b};this.fromBufferGeometry(new Vc(a, +b));this.mergeVertices()}function Vc(a,b){var c=(1+Math.sqrt(5))/2,d=1/c;sa.call(this,[-1,-1,-1,-1,-1,1,-1,1,-1,-1,1,1,1,-1,-1,1,-1,1,1,1,-1,1,1,1,0,-d,-c,0,-d,c,0,d,-c,0,d,c,-d,-c,0,-d,c,0,d,-c,0,d,c,0,-c,0,-d,c,0,-d,-c,0,d,c,0,d],[3,11,7,3,7,15,3,15,13,7,19,17,7,17,6,7,6,15,17,4,8,17,8,10,17,10,6,8,0,16,8,16,2,8,2,10,0,12,1,0,1,18,0,18,16,6,10,2,6,2,13,6,13,15,2,16,18,2,18,3,2,3,13,18,1,9,18,9,11,18,11,3,4,14,12,4,12,0,4,0,8,11,9,5,11,5,19,11,19,7,19,5,14,19,14,4,19,4,17,1,12,14,1,14,5,1,5,9],a, +b);this.type="DodecahedronBufferGeometry";this.parameters={radius:a,detail:b}}function Zd(a,b,c,d,e,f){F.call(this);this.type="TubeGeometry";this.parameters={path:a,tubularSegments:b,radius:c,radialSegments:d,closed:e};void 0!==f&&console.warn("THREE.TubeGeometry: taper has been removed.");a=new fc(a,b,c,d,e);this.tangents=a.tangents;this.normals=a.normals;this.binormals=a.binormals;this.fromBufferGeometry(a);this.mergeVertices()}function fc(a,b,c,d,e){function f(e){q=a.getPointAt(e/b,q);var f=g.normals[e]; +e=g.binormals[e];for(var n=0;n<=d;n++){var p=n/d*Math.PI*2,r=Math.sin(p);p=-Math.cos(p);l.x=p*f.x+r*e.x;l.y=p*f.y+r*e.y;l.z=p*f.z+r*e.z;l.normalize();z.push(l.x,l.y,l.z);h.x=q.x+c*l.x;h.y=q.y+c*l.y;h.z=q.z+c*l.z;k.push(h.x,h.y,h.z)}}E.call(this);this.type="TubeBufferGeometry";this.parameters={path:a,tubularSegments:b,radius:c,radialSegments:d,closed:e};b=b||64;c=c||1;d=d||8;e=e||!1;var g=a.computeFrenetFrames(b,e);this.tangents=g.tangents;this.normals=g.normals;this.binormals=g.binormals;var h=new m, +l=new m,n=new u,q=new m,k=[],z=[],r=[],t=[];(function(){for(var a=0;a=b;e-=d)f=Zh(e,a[e],a[e+1],f);f&&Ve(f,f.next)&&(be(f),f=f.next); +return f}function Jb(a,b){if(!a)return a;b||(b=a);do{var c=!1;if(a.steiner||!Ve(a,a.next)&&0!==Z(a.prev,a,a.next))a=a.next;else{be(a);a=b=a.prev;if(a===a.next)break;c=!0}}while(c||a!==b);return b}function ce(a,b,c,d,e,f,g){if(a){if(!g&&f){var h=a,l=h;do null===l.z&&(l.z=tg(l.x,l.y,d,e,f)),l.prevZ=l.prev,l=l.nextZ=l.next;while(l!==h);l.prevZ.nextZ=null;l.prevZ=null;h=l;var n,k,p,z,r=1;do{l=h;var t=h=null;for(k=0;l;){k++;var m=l;for(n=p=0;nr!==t.next.y>r&&t.next.y!==t.y&&p<(t.next.x-t.x)*(r-t.y)/(t.next.y-t.y)+t.x&&(k=!k),t=t.next;while(t!==l);t=k}t=t&&(Z(l.prev,l,m.prev)||Z(l,m.prev,m))||Ve(l,m)&&0a.x?e.x>f.x?e.x:f.x:a.x>f.x?a.x:f.x,h=e.y>a.y?e.y>f.y?e.y:f.y:a.y>f.y?a.y:f.y,l=tg(e.x< +a.x?e.x=l&&d&&d.z<=b;){if(c!==a.prev&&c!==a.next&&Yc(e.x,e.y,a.x,a.y,f.x,f.y,c.x,c.y)&&0<=Z(c.prev,c,c.next))return!1;c=c.prevZ;if(d!==a.prev&&d!==a.next&&Yc(e.x,e.y,a.x,a.y,f.x,f.y,d.x,d.y)&&0<=Z(d.prev,d,d.next))return!1;d=d.nextZ}for(;c&&c.z>=l;){if(c!==a.prev&&c!==a.next&&Yc(e.x,e.y,a.x,a.y,f.x,f.y,c.x,c.y)&&0<=Z(c.prev,c,c.next))return!1;c=c.prevZ}for(;d&&d.z<=b;){if(d!== +a.prev&&d!==a.next&&Yc(e.x,e.y,a.x,a.y,f.x,f.y,d.x,d.y)&&0<=Z(d.prev,d,d.next))return!1;d=d.nextZ}return!0}function Ek(a,b){return a.x-b.x}function Fk(a,b){var c=b,d=a.x,e=a.y,f=-Infinity;do{if(e<=c.y&&e>=c.next.y&&c.next.y!==c.y){var g=c.x+(e-c.y)*(c.next.x-c.x)/(c.next.y-c.y);if(g<=d&&g>f){f=g;if(g===d){if(e===c.y)return c;if(e===c.next.y)return c.next}var h=c.x=c.x&&c.x>=g&& +d!==c.x&&Yc(eh.x)&&(p=c.x===h.x)){p=h;var m=c;p=0>Z(p.prev,p,m.prev)&&0>Z(m.next,p,p.next)}p&&(h=c,n=k)}c=c.next}while(c!==b);return h}function tg(a,b,c,d,e){a=32767*(a-c)*e;b=32767*(b-d)*e;a=(a|a<<8)&16711935;a=(a|a<<4)&252645135;a=(a|a<<2)&858993459;b=(b|b<<8)&16711935;b=(b|b<<4)&252645135;b=(b|b<<2)&858993459;return(a|a<<1)&1431655765|((b|b<<1)&1431655765)<<1}function Gk(a){var b=a, +c=a;do{if(b.x=Math.min(a.x,c.x)&&b.y<=Math.max(a.y,c.y)&&b.y>=Math.min(a.y,c.y)}function We(a){return 0a?-1:0}function de(a,b){return 0>Z(a.prev,a,a.next)?0<=Z(a,b,a.next)&&0<=Z(a,a.prev,b):0>Z(a,b,a.prev)||0>Z(a,a.next,b)}function ai(a,b){var c=new ug(a.i,a.x,a.y),d=new ug(b.i,b.x,b.y),e=a.next,f=b.prev;a.next=b;b.prev=a;c.next=e;e.prev=c;d.next=c;c.prev=d;f.next=d;d.prev=f;return d}function Zh(a,b,c,d){a=new ug(a,b,c);d?(a.next=d.next,a.prev=d,d.next.prev=a,d.next=a):(a.prev=a, +a.next=a);return a}function be(a){a.next.prev=a.prev;a.prev.next=a.next;a.prevZ&&(a.prevZ.nextZ=a.nextZ);a.nextZ&&(a.nextZ.prevZ=a.prevZ)}function ug(a,b,c){this.i=a;this.x=b;this.y=c;this.nextZ=this.prevZ=this.z=this.next=this.prev=null;this.steiner=!1}function bi(a){var b=a.length;2Number.EPSILON){var l=Math.sqrt(h),n=Math.sqrt(f*f+g*g);h=b.x-e/l;b=b.y+d/l;g=((c.x-g/n-h)*g-(c.y+f/n-b)*f)/(d*g-e*f);f=h+d*g-a.x;d=b+e*g-a.y;e=f*f+d*d;if(2>=e)return new u(f,d);e=Math.sqrt(e/2)}else a=!1,d>Number.EPSILON? +f>Number.EPSILON&&(a=!0):d<-Number.EPSILON?f<-Number.EPSILON&&(a=!0):Math.sign(e)===Math.sign(g)&&(a=!0),a?(f=-e,e=Math.sqrt(h)):(f=d,d=e,e=Math.sqrt(h/2));return new u(f/e,d/e)}function h(a,b){for(var c=a.length;0<=--c;){var f=c,g=c-1;0>g&&(g=a.length-1);for(var h=0,l=w+2*C;hk;k++){var p=n[f[k]];var m=n[f[(k+1)%3]];d[0]=Math.min(p,m);d[1]=Math.max(p,m);p=d[0]+","+d[1];void 0===e[p]?e[p]={index1:d[0],index2:d[1],face1:h,face2:void 0}:e[p].face2=h}for(p in e)if(d=e[p],void 0===d.face2||g[d.face1].normal.dot(g[d.face2].normal)<=b)f=a[d.index1],c.push(f.x,f.y,f.z),f=a[d.index2],c.push(f.x,f.y,f.z);this.setAttribute("position",new A(c,3))}function kc(a, +b,c,d,e,f,g,h){F.call(this);this.type="CylinderGeometry";this.parameters={radiusTop:a,radiusBottom:b,height:c,radialSegments:d,heightSegments:e,openEnded:f,thetaStart:g,thetaLength:h};this.fromBufferGeometry(new qb(a,b,c,d,e,f,g,h));this.mergeVertices()}function qb(a,b,c,d,e,f,g,h){function l(c){var e,f=new u,l=new m,q=0,v=!0===c?a:b,w=!0===c?1:-1;var A=t;for(e=1;e<=d;e++)p.push(0,x*w,0),z.push(0,w,0),r.push(.5,.5),t++;e=t;for(var C=0;C<=d;C++){var E=C/d*h+g,F=Math.cos(E);E=Math.sin(E);l.x=v*E;l.y= +x*w;l.z=v*F;p.push(l.x,l.y,l.z);z.push(0,w,0);f.x=.5*F+.5;f.y=.5*E*w+.5;r.push(f.x,f.y);t++}for(f=0;fthis.duration&& +this.resetDuration()}function Ik(a){switch(a.toLowerCase()){case "scalar":case "double":case "float":case "number":case "integer":return dd;case "vector":case "vector2":case "vector3":case "vector4":return ed;case "color":return af;case "quaternion":return me;case "bool":case "boolean":return $e;case "string":return cf}throw Error("THREE.KeyframeTrack: Unsupported typeName: "+a);}function Jk(a){if(void 0===a.type)throw Error("THREE.KeyframeTrack: track type undefined, can not parse");var b=Ik(a.type); +if(void 0===a.times){var c=[],d=[];ka.flattenJSON(a.keys,c,d,"value");a.times=c;a.values=d}return void 0!==b.parse?b.parse(a):new b(a.name,a.times,a.values,a.interpolation)}function vg(a,b,c){var d=this,e=!1,f=0,g=0,h=void 0,l=[];this.onStart=void 0;this.onLoad=a;this.onProgress=b;this.onError=c;this.itemStart=function(a){g++;if(!1===e&&void 0!==d.onStart)d.onStart(a,f,g);e=!0};this.itemEnd=function(a){f++;if(void 0!==d.onProgress)d.onProgress(a,f,g);if(f===g&&(e=!1,void 0!==d.onLoad))d.onLoad()}; +this.itemError=function(a){if(void 0!==d.onError)d.onError(a)};this.resolveURL=function(a){return h?h(a):a};this.setURLModifier=function(a){h=a;return this};this.addHandler=function(a,b){l.push(a,b);return this};this.removeHandler=function(a){a=l.indexOf(a);-1!==a&&l.splice(a,2);return this};this.getHandler=function(a){for(var b=0,c=l.length;ba;a++)this.coefficients.push(new m)}function Ra(a,b){fa.call(this,void 0,b);this.type="LightProbe";this.sh=void 0!==a?a:new pf}function qf(a){X.call(this,a);this.textures={}}function pe(){E.call(this);this.type="InstancedBufferGeometry";this.instanceCount= +Infinity}function rf(a,b,c,d){"number"===typeof c&&(d=c,c=!1,console.error("THREE.InstancedBufferAttribute: The constructor now expects normalized as the third argument."));J.call(this,a,b,c);this.meshPerAttribute=d||1}function sf(a){X.call(this,a)}function tf(a){X.call(this,a)}function Ag(a){"undefined"===typeof createImageBitmap&&console.warn("THREE.ImageBitmapLoader: createImageBitmap() not supported.");"undefined"===typeof fetch&&console.warn("THREE.ImageBitmapLoader: fetch() not supported."); +X.call(this,a);this.options={premultiplyAlpha:"none"}}function Bg(){this.type="ShapePath";this.color=new H;this.subPaths=[];this.currentPath=null}function Cg(a){this.type="Font";this.data=a}function Dg(a){X.call(this,a)}function uf(a){X.call(this,a)}function Eg(a,b,c){Ra.call(this,void 0,c);a=(new H).set(a);c=(new H).set(b);b=new m(a.r,a.g,a.b);a=new m(c.r,c.g,c.b);c=Math.sqrt(Math.PI);var d=c*Math.sqrt(.75);this.sh.coefficients[0].copy(b).add(a).multiplyScalar(c);this.sh.coefficients[1].copy(b).sub(a).multiplyScalar(d)} +function Fg(a,b){Ra.call(this,void 0,b);a=(new H).set(a);this.sh.coefficients[0].set(a.r,a.g,a.b).multiplyScalar(2*Math.sqrt(Math.PI))}function hi(){this.type="StereoCamera";this.aspect=1;this.eyeSep=.064;this.cameraL=new W;this.cameraL.layers.enable(1);this.cameraL.matrixAutoUpdate=!1;this.cameraR=new W;this.cameraR.layers.enable(2);this.cameraR.matrixAutoUpdate=!1;this._cache={focus:null,fov:null,aspect:null,near:null,far:null,zoom:null,eyeSep:null}}function Gg(a){this.autoStart=void 0!==a?a:!0; +this.elapsedTime=this.oldTime=this.startTime=0;this.running=!1}function Hg(){C.call(this);this.type="AudioListener";this.context=Ig.getContext();this.gain=this.context.createGain();this.gain.connect(this.context.destination);this.filter=null;this.timeDelta=0;this._clock=new Gg}function id(a){C.call(this);this.type="Audio";this.listener=a;this.context=a.context;this.gain=this.context.createGain();this.gain.connect(a.getInput());this.autoplay=!1;this.buffer=null;this.detune=0;this.loop=!1;this.offset= +this.loopEnd=this.loopStart=0;this.duration=void 0;this.playbackRate=1;this.isPlaying=!1;this.hasPlaybackControl=!0;this.sourceType="empty";this._progress=this._startedAt=0;this.filters=[]}function Jg(a){id.call(this,a);this.panner=this.context.createPanner();this.panner.panningModel="HRTF";this.panner.connect(this.gain)}function Kg(a,b){this.analyser=a.context.createAnalyser();this.analyser.fftSize=void 0!==b?b:2048;this.data=new Uint8Array(this.analyser.frequencyBinCount);a.getOutput().connect(this.analyser)} +function Lg(a,b,c){this.binding=a;this.valueSize=c;switch(b){case "quaternion":a=this._slerp;b=this._slerpAdditive;var d=this._setAdditiveIdentityQuaternion;this.buffer=new Float64Array(6*c);this._workIndex=5;break;case "string":case "bool":b=a=this._select;d=this._setAdditiveIdentityOther;this.buffer=Array(5*c);break;default:a=this._lerp,b=this._lerpAdditive,d=this._setAdditiveIdentityNumeric,this.buffer=new Float64Array(5*c)}this._mixBufferRegion=a;this._mixBufferRegionAdditive=b;this._setIdentity= +d;this._origIndex=3;this._addIndex=4;this.referenceCount=this.useCount=this.cumulativeWeightAdditive=this.cumulativeWeight=0}function ii(a,b,c){c=c||wa.parseTrackName(b);this._targetGroup=a;this._bindings=a.subscribe_(b,c)}function wa(a,b,c){this.path=b;this.parsedPath=c||wa.parseTrackName(b);this.node=wa.findNode(a,this.parsedPath.nodeName)||a;this.rootNode=a}function ji(){this.uuid=P.generateUUID();this._objects=Array.prototype.slice.call(arguments);this.nCachedObjects_=0;var a={};this._indicesByUUID= +a;for(var b=0,c=arguments.length;b!==c;++b)a[arguments[b].uuid]=b;this._paths=[];this._parsedPaths=[];this._bindings=[];this._bindingsIndicesByPath={};var d=this;this.stats={objects:{get total(){return d._objects.length},get inUse(){return this.total-d.nCachedObjects_}},get bindingsPerObject(){return d._bindings.length}}}function ki(a,b,c,d){this._mixer=a;this._clip=b;this._localRoot=c||null;this.blendMode=d||b.blendMode;a=b.tracks;b=a.length;c=Array(b);d={endingStart:2400,endingEnd:2400};for(var e= +0;e!==b;++e){var f=a[e].createInterpolant(null);c[e]=f;f.settings=d}this._interpolantSettings=d;this._interpolants=c;this._propertyBindings=Array(b);this._weightInterpolant=this._timeScaleInterpolant=this._byClipCacheIndex=this._cacheIndex=null;this.loop=2201;this._loopCount=-1;this._startTime=null;this.time=0;this._effectiveWeight=this.weight=this._effectiveTimeScale=this.timeScale=1;this.repetitions=Infinity;this.paused=!1;this.enabled=!0;this.clampWhenFinished=!1;this.zeroSlopeAtEnd=this.zeroSlopeAtStart= +!0}function Mg(a){this._root=a;this._initMemoryManager();this.time=this._accuIndex=0;this.timeScale=1}function vf(a,b){"string"===typeof a&&(console.warn("THREE.Uniform: Type parameter is no longer needed."),a=b);this.value=a}function Ng(a,b,c){Ba.call(this,a,b);this.meshPerAttribute=c||1}function Og(a,b,c,d){this.ray=new Xb(a,b);this.near=c||0;this.far=d||Infinity;this.camera=null;this.layers=new He;this.params={Mesh:{},Line:{threshold:1},LOD:{},Points:{threshold:1},Sprite:{}};Object.defineProperties(this.params, +{PointCloud:{get:function(){console.warn("THREE.Raycaster: params.PointCloud has been renamed to params.Points.");return this.Points}}})}function li(a,b){return a.distance-b.distance}function Pg(a,b,c,d){a.layers.test(b.layers)&&a.raycast(b,c);if(!0===d){a=a.children;d=0;for(var e=a.length;dc;c++,d++){var e=c/32*Math.PI*2,f=d/32*Math.PI*2;b.push(Math.cos(e),Math.sin(e),1,Math.cos(f),Math.sin(f),1)}a.setAttribute("position",new A(b,3));b=new ja({fog:!1,toneMapped:!1});this.cone=new ea(a,b);this.add(this.cone);this.update()}function ni(a){var b=[];a&&a.isBone&&b.push(a);for(var c=0;c\n\n\t\t\tvec3 getSample( float theta, vec3 axis ) {\n\n\t\t\t\tfloat cosTheta = cos( theta );\n\t\t\t\t// Rodrigues' axis-angle rotation\n\t\t\t\tvec3 sampleDirection = vOutputDirection * cosTheta\n\t\t\t\t\t+ cross( axis, vOutputDirection ) * sin( theta )\n\t\t\t\t\t+ axis * dot( axis, vOutputDirection ) * ( 1.0 - cosTheta );\n\n\t\t\t\treturn bilinearCubeUV( envMap, sampleDirection, mipInt );\n\n\t\t\t}\n\n\t\t\tvoid main() {\n\n\t\t\t\tvec3 axis = latitudinal ? poleAxis : cross( poleAxis, vOutputDirection );\n\n\t\t\t\tif ( all( equal( axis, vec3( 0.0 ) ) ) ) {\n\n\t\t\t\t\taxis = vec3( vOutputDirection.z, 0.0, - vOutputDirection.x );\n\n\t\t\t\t}\n\n\t\t\t\taxis = normalize( axis );\n\n\t\t\t\tgl_FragColor = vec4( 0.0, 0.0, 0.0, 1.0 );\n\t\t\t\tgl_FragColor.rgb += weights[ 0 ] * getSample( 0.0, axis );\n\n\t\t\t\tfor ( int i = 1; i < n; i++ ) {\n\n\t\t\t\t\tif ( i >= samples ) {\n\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\t}\n\n\t\t\t\t\tfloat theta = dTheta * float( i );\n\t\t\t\t\tgl_FragColor.rgb += weights[ i ] * getSample( -1.0 * theta, axis );\n\t\t\t\t\tgl_FragColor.rgb += weights[ i ] * getSample( theta, axis );\n\n\t\t\t\t}\n\n\t\t\t\tgl_FragColor = linearToOutputTexel( gl_FragColor );\n\n\t\t\t}\n\t\t", +blending:0,depthTest:!1,depthWrite:!1});this._cubemapShader=this._equirectShader=null;this._compileMaterial(this._blurMaterial)}function oi(a){a=new Ga(3*kb,3*kb,a);a.texture.mapping=306;a.texture.name="PMREM.cubeUv";a.scissorTest=!0;return a}function zf(a,b,c,d,e){a.viewport.set(b,c,d,e);a.scissor.set(b,c,d,e)}function pi(){var a=new u(1,1);return new rb({name:"EquirectangularToCubeUV",uniforms:{envMap:{value:null},texelSize:{value:a},inputEncoding:{value:jb[3E3]},outputEncoding:{value:jb[3E3]}}, +vertexShader:Ug(),fragmentShader:"\n\n\t\t\tprecision mediump float;\n\t\t\tprecision mediump int;\n\n\t\t\tvarying vec3 vOutputDirection;\n\n\t\t\tuniform sampler2D envMap;\n\t\t\tuniform vec2 texelSize;\n\n\t\t\t"+Vg()+"\n\n\t\t\t#include \n\n\t\t\tvoid main() {\n\n\t\t\t\tgl_FragColor = vec4( 0.0, 0.0, 0.0, 1.0 );\n\n\t\t\t\tvec3 outputDirection = normalize( vOutputDirection );\n\t\t\t\tvec2 uv = equirectUv( outputDirection );\n\n\t\t\t\tvec2 f = fract( uv / texelSize - 0.5 );\n\t\t\t\tuv -= f * texelSize;\n\t\t\t\tvec3 tl = envMapTexelToLinear( texture2D ( envMap, uv ) ).rgb;\n\t\t\t\tuv.x += texelSize.x;\n\t\t\t\tvec3 tr = envMapTexelToLinear( texture2D ( envMap, uv ) ).rgb;\n\t\t\t\tuv.y += texelSize.y;\n\t\t\t\tvec3 br = envMapTexelToLinear( texture2D ( envMap, uv ) ).rgb;\n\t\t\t\tuv.x -= texelSize.x;\n\t\t\t\tvec3 bl = envMapTexelToLinear( texture2D ( envMap, uv ) ).rgb;\n\n\t\t\t\tvec3 tm = mix( tl, tr, f.x );\n\t\t\t\tvec3 bm = mix( bl, br, f.x );\n\t\t\t\tgl_FragColor.rgb = mix( tm, bm, f.y );\n\n\t\t\t\tgl_FragColor = linearToOutputTexel( gl_FragColor );\n\n\t\t\t}\n\t\t", +blending:0,depthTest:!1,depthWrite:!1})}function qi(){return new rb({name:"CubemapToCubeUV",uniforms:{envMap:{value:null},inputEncoding:{value:jb[3E3]},outputEncoding:{value:jb[3E3]}},vertexShader:Ug(),fragmentShader:"\n\n\t\t\tprecision mediump float;\n\t\t\tprecision mediump int;\n\n\t\t\tvarying vec3 vOutputDirection;\n\n\t\t\tuniform samplerCube envMap;\n\n\t\t\t"+Vg()+"\n\n\t\t\tvoid main() {\n\n\t\t\t\tgl_FragColor = vec4( 0.0, 0.0, 0.0, 1.0 );\n\t\t\t\tgl_FragColor.rgb = envMapTexelToLinear( textureCube( envMap, vec3( - vOutputDirection.x, vOutputDirection.yz ) ) ).rgb;\n\t\t\t\tgl_FragColor = linearToOutputTexel( gl_FragColor );\n\n\t\t\t}\n\t\t", +blending:0,depthTest:!1,depthWrite:!1})}function Ug(){return"\n\n\t\tprecision mediump float;\n\t\tprecision mediump int;\n\n\t\tattribute vec3 position;\n\t\tattribute vec2 uv;\n\t\tattribute float faceIndex;\n\n\t\tvarying vec3 vOutputDirection;\n\n\t\t// RH coordinate system; PMREM face-indexing convention\n\t\tvec3 getDirection( vec2 uv, float face ) {\n\n\t\t\tuv = 2.0 * uv - 1.0;\n\n\t\t\tvec3 direction = vec3( uv, 1.0 );\n\n\t\t\tif ( face == 0.0 ) {\n\n\t\t\t\tdirection = direction.zyx; // ( 1, v, u ) pos x\n\n\t\t\t} else if ( face == 1.0 ) {\n\n\t\t\t\tdirection = direction.xzy;\n\t\t\t\tdirection.xz *= -1.0; // ( -u, 1, -v ) pos y\n\n\t\t\t} else if ( face == 2.0 ) {\n\n\t\t\t\tdirection.x *= -1.0; // ( -u, v, 1 ) pos z\n\n\t\t\t} else if ( face == 3.0 ) {\n\n\t\t\t\tdirection = direction.zyx;\n\t\t\t\tdirection.xz *= -1.0; // ( -1, v, -u ) neg x\n\n\t\t\t} else if ( face == 4.0 ) {\n\n\t\t\t\tdirection = direction.xzy;\n\t\t\t\tdirection.xy *= -1.0; // ( -u, -1, v ) neg y\n\n\t\t\t} else if ( face == 5.0 ) {\n\n\t\t\t\tdirection.z *= -1.0; // ( u, v, -1 ) neg z\n\n\t\t\t}\n\n\t\t\treturn direction;\n\n\t\t}\n\n\t\tvoid main() {\n\n\t\t\tvOutputDirection = getDirection( uv, faceIndex );\n\t\t\tgl_Position = vec4( position, 1.0 );\n\n\t\t}\n\t"} +function Vg(){return"\n\n\t\tuniform int inputEncoding;\n\t\tuniform int outputEncoding;\n\n\t\t#include \n\n\t\tvec4 inputTexelToLinear( vec4 value ) {\n\n\t\t\tif ( inputEncoding == 0 ) {\n\n\t\t\t\treturn value;\n\n\t\t\t} else if ( inputEncoding == 1 ) {\n\n\t\t\t\treturn sRGBToLinear( value );\n\n\t\t\t} else if ( inputEncoding == 2 ) {\n\n\t\t\t\treturn RGBEToLinear( value );\n\n\t\t\t} else if ( inputEncoding == 3 ) {\n\n\t\t\t\treturn RGBMToLinear( value, 7.0 );\n\n\t\t\t} else if ( inputEncoding == 4 ) {\n\n\t\t\t\treturn RGBMToLinear( value, 16.0 );\n\n\t\t\t} else if ( inputEncoding == 5 ) {\n\n\t\t\t\treturn RGBDToLinear( value, 256.0 );\n\n\t\t\t} else {\n\n\t\t\t\treturn GammaToLinear( value, 2.2 );\n\n\t\t\t}\n\n\t\t}\n\n\t\tvec4 linearToOutputTexel( vec4 value ) {\n\n\t\t\tif ( outputEncoding == 0 ) {\n\n\t\t\t\treturn value;\n\n\t\t\t} else if ( outputEncoding == 1 ) {\n\n\t\t\t\treturn LinearTosRGB( value );\n\n\t\t\t} else if ( outputEncoding == 2 ) {\n\n\t\t\t\treturn LinearToRGBE( value );\n\n\t\t\t} else if ( outputEncoding == 3 ) {\n\n\t\t\t\treturn LinearToRGBM( value, 7.0 );\n\n\t\t\t} else if ( outputEncoding == 4 ) {\n\n\t\t\t\treturn LinearToRGBM( value, 16.0 );\n\n\t\t\t} else if ( outputEncoding == 5 ) {\n\n\t\t\t\treturn LinearToRGBD( value, 256.0 );\n\n\t\t\t} else {\n\n\t\t\t\treturn LinearToGamma( value, 2.2 );\n\n\t\t\t}\n\n\t\t}\n\n\t\tvec4 envMapTexelToLinear( vec4 color ) {\n\n\t\t\treturn inputTexelToLinear( color );\n\n\t\t}\n\t"} +function ri(a){console.warn("THREE.ClosedSplineCurve3 has been deprecated. Use THREE.CatmullRomCurve3 instead.");za.call(this,a);this.type="catmullrom";this.closed=!0}function si(a){console.warn("THREE.SplineCurve3 has been deprecated. Use THREE.CatmullRomCurve3 instead.");za.call(this,a);this.type="catmullrom"}function Wg(a){console.warn("THREE.Spline has been removed. Use THREE.CatmullRomCurve3 instead.");za.call(this,a);this.type="catmullrom"}void 0===Number.EPSILON&&(Number.EPSILON=Math.pow(2, +-52));void 0===Number.isInteger&&(Number.isInteger=function(a){return"number"===typeof a&&isFinite(a)&&Math.floor(a)===a});void 0===Math.sign&&(Math.sign=function(a){return 0>a?-1:0we;we++)ta[we]=(16>we?"0":"")+we.toString(16);var Af=1234567,P={DEG2RAD:Math.PI/180,RAD2DEG:180/Math.PI,generateUUID:function(){var a=4294967295*Math.random()|0,b=4294967295*Math.random()|0,c=4294967295* +Math.random()|0,d=4294967295*Math.random()|0;return(ta[a&255]+ta[a>>8&255]+ta[a>>16&255]+ta[a>>24&255]+"-"+ta[b&255]+ta[b>>8&255]+"-"+ta[b>>16&15|64]+ta[b>>24&255]+"-"+ta[c&63|128]+ta[c>>8&255]+"-"+ta[c>>16&255]+ta[c>>24&255]+ta[d&255]+ta[d>>8&255]+ta[d>>16&255]+ta[d>>24&255]).toUpperCase()},clamp:function(a,b,c){return Math.max(b,Math.min(c,a))},euclideanModulo:function(a,b){return(a%b+b)%b},mapLinear:function(a,b,c,d,e){return d+(a-b)*(e-d)/(c-b)},lerp:function(a,b,c){return(1-c)*a+c*b},smoothstep:function(a, +b,c){if(a<=b)return 0;if(a>=c)return 1;a=(a-b)/(c-b);return a*a*(3-2*a)},smootherstep:function(a,b,c){if(a<=b)return 0;if(a>=c)return 1;a=(a-b)/(c-b);return a*a*a*(a*(6*a-15)+10)},randInt:function(a,b){return a+Math.floor(Math.random()*(b-a+1))},randFloat:function(a,b){return a+Math.random()*(b-a)},randFloatSpread:function(a){return a*(.5-Math.random())},seededRandom:function(a){void 0!==a&&(Af=a%2147483647);Af=16807*Af%2147483647;return(Af-1)/2147483646},degToRad:function(a){return a*P.DEG2RAD}, +radToDeg:function(a){return a*P.RAD2DEG},isPowerOfTwo:function(a){return 0===(a&a-1)&&0!==a},ceilPowerOfTwo:function(a){return Math.pow(2,Math.ceil(Math.log(a)/Math.LN2))},floorPowerOfTwo:function(a){return Math.pow(2,Math.floor(Math.log(a)/Math.LN2))},setQuaternionFromProperEuler:function(a,b,c,d,e){var f=Math.cos,g=Math.sin,h=f(c/2);c=g(c/2);var l=f((b+d)/2),n=g((b+d)/2),k=f((b-d)/2),p=g((b-d)/2);f=f((d-b)/2);b=g((d-b)/2);switch(e){case "XYX":a.set(h*n,c*k,c*p,h*l);break;case "YZY":a.set(c*p,h* +n,c*k,h*l);break;case "ZXZ":a.set(c*k,c*p,h*n,h*l);break;case "XZX":a.set(h*n,c*b,c*f,h*l);break;case "YXY":a.set(c*f,h*n,c*b,h*l);break;case "ZYZ":a.set(c*b,c*f,h*n,h*l);break;default:console.warn("THREE.MathUtils: .setQuaternionFromProperEuler() encountered an unknown order: "+e)}}};Object.defineProperties(u.prototype,{width:{get:function(){return this.x},set:function(a){this.x=a}},height:{get:function(){return this.y},set:function(a){this.y=a}}});Object.assign(u.prototype,{isVector2:!0,set:function(a, +b){this.x=a;this.y=b;return this},setScalar:function(a){this.y=this.x=a;return this},setX:function(a){this.x=a;return this},setY:function(a){this.y=a;return this},setComponent:function(a,b){switch(a){case 0:this.x=b;break;case 1:this.y=b;break;default:throw Error("index is out of range: "+a);}return this},getComponent:function(a){switch(a){case 0:return this.x;case 1:return this.y;default:throw Error("index is out of range: "+a);}},clone:function(){return new this.constructor(this.x,this.y)},copy:function(a){this.x= +a.x;this.y=a.y;return this},add:function(a,b){if(void 0!==b)return console.warn("THREE.Vector2: .add() now only accepts one argument. Use .addVectors( a, b ) instead."),this.addVectors(a,b);this.x+=a.x;this.y+=a.y;return this},addScalar:function(a){this.x+=a;this.y+=a;return this},addVectors:function(a,b){this.x=a.x+b.x;this.y=a.y+b.y;return this},addScaledVector:function(a,b){this.x+=a.x*b;this.y+=a.y*b;return this},sub:function(a,b){if(void 0!==b)return console.warn("THREE.Vector2: .sub() now only accepts one argument. Use .subVectors( a, b ) instead."), +this.subVectors(a,b);this.x-=a.x;this.y-=a.y;return this},subScalar:function(a){this.x-=a;this.y-=a;return this},subVectors:function(a,b){this.x=a.x-b.x;this.y=a.y-b.y;return this},multiply:function(a){this.x*=a.x;this.y*=a.y;return this},multiplyScalar:function(a){this.x*=a;this.y*=a;return this},divide:function(a){this.x/=a.x;this.y/=a.y;return this},divideScalar:function(a){return this.multiplyScalar(1/a)},applyMatrix3:function(a){var b=this.x,c=this.y;a=a.elements;this.x=a[0]*b+a[3]*c+a[6];this.y= +a[1]*b+a[4]*c+a[7];return this},min:function(a){this.x=Math.min(this.x,a.x);this.y=Math.min(this.y,a.y);return this},max:function(a){this.x=Math.max(this.x,a.x);this.y=Math.max(this.y,a.y);return this},clamp:function(a,b){this.x=Math.max(a.x,Math.min(b.x,this.x));this.y=Math.max(a.y,Math.min(b.y,this.y));return this},clampScalar:function(a,b){this.x=Math.max(a,Math.min(b,this.x));this.y=Math.max(a,Math.min(b,this.y));return this},clampLength:function(a,b){var c=this.length();return this.divideScalar(c|| +1).multiplyScalar(Math.max(a,Math.min(b,c)))},floor:function(){this.x=Math.floor(this.x);this.y=Math.floor(this.y);return this},ceil:function(){this.x=Math.ceil(this.x);this.y=Math.ceil(this.y);return this},round:function(){this.x=Math.round(this.x);this.y=Math.round(this.y);return this},roundToZero:function(){this.x=0>this.x?Math.ceil(this.x):Math.floor(this.x);this.y=0>this.y?Math.ceil(this.y):Math.floor(this.y);return this},negate:function(){this.x=-this.x;this.y=-this.y;return this},dot:function(a){return this.x* +a.x+this.y*a.y},cross:function(a){return this.x*a.y-this.y*a.x},lengthSq:function(){return this.x*this.x+this.y*this.y},length:function(){return Math.sqrt(this.x*this.x+this.y*this.y)},manhattanLength:function(){return Math.abs(this.x)+Math.abs(this.y)},normalize:function(){return this.divideScalar(this.length()||1)},angle:function(){return Math.atan2(-this.y,-this.x)+Math.PI},distanceTo:function(a){return Math.sqrt(this.distanceToSquared(a))},distanceToSquared:function(a){var b=this.x-a.x;a=this.y- +a.y;return b*b+a*a},manhattanDistanceTo:function(a){return Math.abs(this.x-a.x)+Math.abs(this.y-a.y)},setLength:function(a){return this.normalize().multiplyScalar(a)},lerp:function(a,b){this.x+=(a.x-this.x)*b;this.y+=(a.y-this.y)*b;return this},lerpVectors:function(a,b,c){this.x=a.x+(b.x-a.x)*c;this.y=a.y+(b.y-a.y)*c;return this},equals:function(a){return a.x===this.x&&a.y===this.y},fromArray:function(a,b){void 0===b&&(b=0);this.x=a[b];this.y=a[b+1];return this},toArray:function(a,b){void 0===a&& +(a=[]);void 0===b&&(b=0);a[b]=this.x;a[b+1]=this.y;return a},fromBufferAttribute:function(a,b,c){void 0!==c&&console.warn("THREE.Vector2: offset has been removed from .fromBufferAttribute().");this.x=a.getX(b);this.y=a.getY(b);return this},rotateAround:function(a,b){var c=Math.cos(b);b=Math.sin(b);var d=this.x-a.x,e=this.y-a.y;this.x=d*c-e*b+a.x;this.y=d*b+e*c+a.y;return this},random:function(){this.x=Math.random();this.y=Math.random();return this}});Object.assign(qa.prototype,{isMatrix3:!0,set:function(a, +b,c,d,e,f,g,h,l){var n=this.elements;n[0]=a;n[1]=d;n[2]=g;n[3]=b;n[4]=e;n[5]=h;n[6]=c;n[7]=f;n[8]=l;return this},identity:function(){this.set(1,0,0,0,1,0,0,0,1);return this},clone:function(){return(new this.constructor).fromArray(this.elements)},copy:function(a){var b=this.elements;a=a.elements;b[0]=a[0];b[1]=a[1];b[2]=a[2];b[3]=a[3];b[4]=a[4];b[5]=a[5];b[6]=a[6];b[7]=a[7];b[8]=a[8];return this},extractBasis:function(a,b,c){a.setFromMatrix3Column(this,0);b.setFromMatrix3Column(this,1);c.setFromMatrix3Column(this, +2);return this},setFromMatrix4:function(a){a=a.elements;this.set(a[0],a[4],a[8],a[1],a[5],a[9],a[2],a[6],a[10]);return this},multiply:function(a){return this.multiplyMatrices(this,a)},premultiply:function(a){return this.multiplyMatrices(a,this)},multiplyMatrices:function(a,b){var c=a.elements,d=b.elements;b=this.elements;a=c[0];var e=c[3],f=c[6],g=c[1],h=c[4],l=c[7],n=c[2],k=c[5];c=c[8];var p=d[0],m=d[3],r=d[6],t=d[1],v=d[4],x=d[7],u=d[2],w=d[5];d=d[8];b[0]=a*p+e*t+f*u;b[3]=a*m+e*v+f*w;b[6]=a*r+e* +x+f*d;b[1]=g*p+h*t+l*u;b[4]=g*m+h*v+l*w;b[7]=g*r+h*x+l*d;b[2]=n*p+k*t+c*u;b[5]=n*m+k*v+c*w;b[8]=n*r+k*x+c*d;return this},multiplyScalar:function(a){var b=this.elements;b[0]*=a;b[3]*=a;b[6]*=a;b[1]*=a;b[4]*=a;b[7]*=a;b[2]*=a;b[5]*=a;b[8]*=a;return this},determinant:function(){var a=this.elements,b=a[0],c=a[1],d=a[2],e=a[3],f=a[4],g=a[5],h=a[6],l=a[7];a=a[8];return b*f*a-b*g*l-c*e*a+c*g*h+d*e*l-d*f*h},getInverse:function(a,b){void 0!==b&&console.warn("THREE.Matrix3: .getInverse() can no longer be configured to throw on degenerate."); +var c=a.elements;a=this.elements;b=c[0];var d=c[1],e=c[2],f=c[3],g=c[4],h=c[5],l=c[6],n=c[7];c=c[8];var k=c*g-h*n,p=h*l-c*f,m=n*f-g*l,r=b*k+d*p+e*m;if(0===r)return this.set(0,0,0,0,0,0,0,0,0);r=1/r;a[0]=k*r;a[1]=(e*n-c*d)*r;a[2]=(h*d-e*g)*r;a[3]=p*r;a[4]=(c*b-e*l)*r;a[5]=(e*f-h*b)*r;a[6]=m*r;a[7]=(d*l-n*b)*r;a[8]=(g*b-d*f)*r;return this},transpose:function(){var a=this.elements;var b=a[1];a[1]=a[3];a[3]=b;b=a[2];a[2]=a[6];a[6]=b;b=a[5];a[5]=a[7];a[7]=b;return this},getNormalMatrix:function(a){return this.setFromMatrix4(a).getInverse(this).transpose()}, +transposeIntoArray:function(a){var b=this.elements;a[0]=b[0];a[1]=b[3];a[2]=b[6];a[3]=b[1];a[4]=b[4];a[5]=b[7];a[6]=b[2];a[7]=b[5];a[8]=b[8];return this},setUvTransform:function(a,b,c,d,e,f,g){var h=Math.cos(e);e=Math.sin(e);this.set(c*h,c*e,-c*(h*f+e*g)+f+a,-d*e,d*h,-d*(-e*f+h*g)+g+b,0,0,1)},scale:function(a,b){var c=this.elements;c[0]*=a;c[3]*=a;c[6]*=a;c[1]*=b;c[4]*=b;c[7]*=b;return this},rotate:function(a){var b=Math.cos(a);a=Math.sin(a);var c=this.elements,d=c[0],e=c[3],f=c[6],g=c[1],h=c[4], +l=c[7];c[0]=b*d+a*g;c[3]=b*e+a*h;c[6]=b*f+a*l;c[1]=-a*d+b*g;c[4]=-a*e+b*h;c[7]=-a*f+b*l;return this},translate:function(a,b){var c=this.elements;c[0]+=a*c[2];c[3]+=a*c[5];c[6]+=a*c[8];c[1]+=b*c[2];c[4]+=b*c[5];c[7]+=b*c[8];return this},equals:function(a){var b=this.elements;a=a.elements;for(var c=0;9>c;c++)if(b[c]!==a[c])return!1;return!0},fromArray:function(a,b){void 0===b&&(b=0);for(var c=0;9>c;c++)this.elements[c]=a[c+b];return this},toArray:function(a,b){void 0===a&&(a=[]);void 0===b&&(b=0);var c= +this.elements;a[b]=c[0];a[b+1]=c[1];a[b+2]=c[2];a[b+3]=c[3];a[b+4]=c[4];a[b+5]=c[5];a[b+6]=c[6];a[b+7]=c[7];a[b+8]=c[8];return a}});var nd,Pb={getDataURL:function(a){if(/^data:/i.test(a.src)||"undefined"==typeof HTMLCanvasElement)return a.src;if(!(a instanceof HTMLCanvasElement)){void 0===nd&&(nd=document.createElementNS("http://www.w3.org/1999/xhtml","canvas"));nd.width=a.width;nd.height=a.height;var b=nd.getContext("2d");a instanceof ImageData?b.putImageData(a,0,0):b.drawImage(a,0,0,a.width,a.height); +a=nd}return 2048a.x||1a.x?0:1;break;case 1002:a.x=1===Math.abs(Math.floor(a.x)%2)?Math.ceil(a.x)-a.x:a.x-Math.floor(a.x)}if(0>a.y||1a.y?0:1;break;case 1002:a.y=1===Math.abs(Math.floor(a.y)%2)?Math.ceil(a.y)- +a.y:a.y-Math.floor(a.y)}this.flipY&&(a.y=1-a.y);return a}});Object.defineProperty(V.prototype,"needsUpdate",{set:function(a){!0===a&&this.version++}});Object.defineProperties(S.prototype,{width:{get:function(){return this.z},set:function(a){this.z=a}},height:{get:function(){return this.w},set:function(a){this.w=a}}});Object.assign(S.prototype,{isVector4:!0,set:function(a,b,c,d){this.x=a;this.y=b;this.z=c;this.w=d;return this},setScalar:function(a){this.w=this.z=this.y=this.x=a;return this},setX:function(a){this.x= +a;return this},setY:function(a){this.y=a;return this},setZ:function(a){this.z=a;return this},setW:function(a){this.w=a;return this},setComponent:function(a,b){switch(a){case 0:this.x=b;break;case 1:this.y=b;break;case 2:this.z=b;break;case 3:this.w=b;break;default:throw Error("index is out of range: "+a);}return this},getComponent:function(a){switch(a){case 0:return this.x;case 1:return this.y;case 2:return this.z;case 3:return this.w;default:throw Error("index is out of range: "+a);}},clone:function(){return new this.constructor(this.x, +this.y,this.z,this.w)},copy:function(a){this.x=a.x;this.y=a.y;this.z=a.z;this.w=void 0!==a.w?a.w:1;return this},add:function(a,b){if(void 0!==b)return console.warn("THREE.Vector4: .add() now only accepts one argument. Use .addVectors( a, b ) instead."),this.addVectors(a,b);this.x+=a.x;this.y+=a.y;this.z+=a.z;this.w+=a.w;return this},addScalar:function(a){this.x+=a;this.y+=a;this.z+=a;this.w+=a;return this},addVectors:function(a,b){this.x=a.x+b.x;this.y=a.y+b.y;this.z=a.z+b.z;this.w=a.w+b.w;return this}, +addScaledVector:function(a,b){this.x+=a.x*b;this.y+=a.y*b;this.z+=a.z*b;this.w+=a.w*b;return this},sub:function(a,b){if(void 0!==b)return console.warn("THREE.Vector4: .sub() now only accepts one argument. Use .subVectors( a, b ) instead."),this.subVectors(a,b);this.x-=a.x;this.y-=a.y;this.z-=a.z;this.w-=a.w;return this},subScalar:function(a){this.x-=a;this.y-=a;this.z-=a;this.w-=a;return this},subVectors:function(a,b){this.x=a.x-b.x;this.y=a.y-b.y;this.z=a.z-b.z;this.w=a.w-b.w;return this},multiplyScalar:function(a){this.x*= +a;this.y*=a;this.z*=a;this.w*=a;return this},applyMatrix4:function(a){var b=this.x,c=this.y,d=this.z,e=this.w;a=a.elements;this.x=a[0]*b+a[4]*c+a[8]*d+a[12]*e;this.y=a[1]*b+a[5]*c+a[9]*d+a[13]*e;this.z=a[2]*b+a[6]*c+a[10]*d+a[14]*e;this.w=a[3]*b+a[7]*c+a[11]*d+a[15]*e;return this},divideScalar:function(a){return this.multiplyScalar(1/a)},setAxisAngleFromQuaternion:function(a){this.w=2*Math.acos(a.w);var b=Math.sqrt(1-a.w*a.w);1E-4>b?(this.x=1,this.z=this.y=0):(this.x=a.x/b,this.y=a.y/b,this.z=a.z/ +b);return this},setAxisAngleFromRotationMatrix:function(a){a=a.elements;var b=a[0];var c=a[4];var d=a[8],e=a[1],f=a[5],g=a[9];var h=a[2];var l=a[6];var n=a[10];if(.01>Math.abs(c-e)&&.01>Math.abs(d-h)&&.01>Math.abs(g-l)){if(.1>Math.abs(c+e)&&.1>Math.abs(d+h)&&.1>Math.abs(g+l)&&.1>Math.abs(b+f+n-3))return this.set(1,0,0,0),this;a=Math.PI;b=(b+1)/2;f=(f+1)/2;n=(n+1)/2;c=(c+e)/4;d=(d+h)/4;g=(g+l)/4;b>f&&b>n?.01>b?(l=0,c=h=.707106781):(l=Math.sqrt(b),h=c/l,c=d/l):f>n?.01>f?(l=.707106781,h=0,c=.707106781): +(h=Math.sqrt(f),l=c/h,c=g/h):.01>n?(h=l=.707106781,c=0):(c=Math.sqrt(n),l=d/c,h=g/c);this.set(l,h,c,a);return this}a=Math.sqrt((l-g)*(l-g)+(d-h)*(d-h)+(e-c)*(e-c));.001>Math.abs(a)&&(a=1);this.x=(l-g)/a;this.y=(d-h)/a;this.z=(e-c)/a;this.w=Math.acos((b+f+n-1)/2);return this},min:function(a){this.x=Math.min(this.x,a.x);this.y=Math.min(this.y,a.y);this.z=Math.min(this.z,a.z);this.w=Math.min(this.w,a.w);return this},max:function(a){this.x=Math.max(this.x,a.x);this.y=Math.max(this.y,a.y);this.z=Math.max(this.z, +a.z);this.w=Math.max(this.w,a.w);return this},clamp:function(a,b){this.x=Math.max(a.x,Math.min(b.x,this.x));this.y=Math.max(a.y,Math.min(b.y,this.y));this.z=Math.max(a.z,Math.min(b.z,this.z));this.w=Math.max(a.w,Math.min(b.w,this.w));return this},clampScalar:function(a,b){this.x=Math.max(a,Math.min(b,this.x));this.y=Math.max(a,Math.min(b,this.y));this.z=Math.max(a,Math.min(b,this.z));this.w=Math.max(a,Math.min(b,this.w));return this},clampLength:function(a,b){var c=this.length();return this.divideScalar(c|| +1).multiplyScalar(Math.max(a,Math.min(b,c)))},floor:function(){this.x=Math.floor(this.x);this.y=Math.floor(this.y);this.z=Math.floor(this.z);this.w=Math.floor(this.w);return this},ceil:function(){this.x=Math.ceil(this.x);this.y=Math.ceil(this.y);this.z=Math.ceil(this.z);this.w=Math.ceil(this.w);return this},round:function(){this.x=Math.round(this.x);this.y=Math.round(this.y);this.z=Math.round(this.z);this.w=Math.round(this.w);return this},roundToZero:function(){this.x=0>this.x?Math.ceil(this.x):Math.floor(this.x); +this.y=0>this.y?Math.ceil(this.y):Math.floor(this.y);this.z=0>this.z?Math.ceil(this.z):Math.floor(this.z);this.w=0>this.w?Math.ceil(this.w):Math.floor(this.w);return this},negate:function(){this.x=-this.x;this.y=-this.y;this.z=-this.z;this.w=-this.w;return this},dot:function(a){return this.x*a.x+this.y*a.y+this.z*a.z+this.w*a.w},lengthSq:function(){return this.x*this.x+this.y*this.y+this.z*this.z+this.w*this.w},length:function(){return Math.sqrt(this.x*this.x+this.y*this.y+this.z*this.z+this.w*this.w)}, +manhattanLength:function(){return Math.abs(this.x)+Math.abs(this.y)+Math.abs(this.z)+Math.abs(this.w)},normalize:function(){return this.divideScalar(this.length()||1)},setLength:function(a){return this.normalize().multiplyScalar(a)},lerp:function(a,b){this.x+=(a.x-this.x)*b;this.y+=(a.y-this.y)*b;this.z+=(a.z-this.z)*b;this.w+=(a.w-this.w)*b;return this},lerpVectors:function(a,b,c){this.x=a.x+(b.x-a.x)*c;this.y=a.y+(b.y-a.y)*c;this.z=a.z+(b.z-a.z)*c;this.w=a.w+(b.w-a.w)*c;return this},equals:function(a){return a.x=== +this.x&&a.y===this.y&&a.z===this.z&&a.w===this.w},fromArray:function(a,b){void 0===b&&(b=0);this.x=a[b];this.y=a[b+1];this.z=a[b+2];this.w=a[b+3];return this},toArray:function(a,b){void 0===a&&(a=[]);void 0===b&&(b=0);a[b]=this.x;a[b+1]=this.y;a[b+2]=this.z;a[b+3]=this.w;return a},fromBufferAttribute:function(a,b,c){void 0!==c&&console.warn("THREE.Vector4: offset has been removed from .fromBufferAttribute().");this.x=a.getX(b);this.y=a.getY(b);this.z=a.getZ(b);this.w=a.getW(b);return this},random:function(){this.x= +Math.random();this.y=Math.random();this.z=Math.random();this.w=Math.random();return this}});Ga.prototype=Object.assign(Object.create(Ea.prototype),{constructor:Ga,isWebGLRenderTarget:!0,setSize:function(a,b){if(this.width!==a||this.height!==b)this.width=a,this.height=b,this.texture.image.width=a,this.texture.image.height=b,this.dispose();this.viewport.set(0,0,a,b);this.scissor.set(0,0,a,b)},clone:function(){return(new this.constructor).copy(this)},copy:function(a){this.width=a.width;this.height=a.height; +this.viewport.copy(a.viewport);this.texture=a.texture.clone();this.depthBuffer=a.depthBuffer;this.stencilBuffer=a.stencilBuffer;this.depthTexture=a.depthTexture;return this},dispose:function(){this.dispatchEvent({type:"dispose"})}});ag.prototype=Object.assign(Object.create(Ga.prototype),{constructor:ag,isWebGLMultisampleRenderTarget:!0,copy:function(a){Ga.prototype.copy.call(this,a);this.samples=a.samples;return this}});Object.assign(Y,{slerp:function(a,b,c,d){return c.copy(a).slerp(b,d)},slerpFlat:function(a, +b,c,d,e,f,g){var h=c[d+0],l=c[d+1],n=c[d+2];c=c[d+3];d=e[f+0];var k=e[f+1],p=e[f+2];e=e[f+3];if(c!==e||h!==d||l!==k||n!==p){f=1-g;var m=h*d+l*k+n*p+c*e,r=0<=m?1:-1,t=1-m*m;t>Number.EPSILON&&(t=Math.sqrt(t),m=Math.atan2(t,m*r),f=Math.sin(f*m)/t,g=Math.sin(g*m)/t);r*=g;h=h*f+d*r;l=l*f+k*r;n=n*f+p*r;c=c*f+e*r;f===1-g&&(g=1/Math.sqrt(h*h+l*l+n*n+c*c),h*=g,l*=g,n*=g,c*=g)}a[b]=h;a[b+1]=l;a[b+2]=n;a[b+3]=c},multiplyQuaternionsFlat:function(a,b,c,d,e,f){var g=c[d],h=c[d+1],l=c[d+2];c=c[d+3];d=e[f];var n= +e[f+1],k=e[f+2];e=e[f+3];a[b]=g*e+c*d+h*k-l*n;a[b+1]=h*e+c*n+l*d-g*k;a[b+2]=l*e+c*k+g*n-h*d;a[b+3]=c*e-g*d-h*n-l*k;return a}});Object.defineProperties(Y.prototype,{x:{get:function(){return this._x},set:function(a){this._x=a;this._onChangeCallback()}},y:{get:function(){return this._y},set:function(a){this._y=a;this._onChangeCallback()}},z:{get:function(){return this._z},set:function(a){this._z=a;this._onChangeCallback()}},w:{get:function(){return this._w},set:function(a){this._w=a;this._onChangeCallback()}}}); +Object.assign(Y.prototype,{isQuaternion:!0,set:function(a,b,c,d){this._x=a;this._y=b;this._z=c;this._w=d;this._onChangeCallback();return this},clone:function(){return new this.constructor(this._x,this._y,this._z,this._w)},copy:function(a){this._x=a.x;this._y=a.y;this._z=a.z;this._w=a.w;this._onChangeCallback();return this},setFromEuler:function(a,b){if(!a||!a.isEuler)throw Error("THREE.Quaternion: .setFromEuler() now expects an Euler rotation rather than a Vector3 and order.");var c=a._x,d=a._y,e= +a._z;a=a.order;var f=Math.cos,g=Math.sin,h=f(c/2),l=f(d/2);f=f(e/2);c=g(c/2);d=g(d/2);e=g(e/2);switch(a){case "XYZ":this._x=c*l*f+h*d*e;this._y=h*d*f-c*l*e;this._z=h*l*e+c*d*f;this._w=h*l*f-c*d*e;break;case "YXZ":this._x=c*l*f+h*d*e;this._y=h*d*f-c*l*e;this._z=h*l*e-c*d*f;this._w=h*l*f+c*d*e;break;case "ZXY":this._x=c*l*f-h*d*e;this._y=h*d*f+c*l*e;this._z=h*l*e+c*d*f;this._w=h*l*f-c*d*e;break;case "ZYX":this._x=c*l*f-h*d*e;this._y=h*d*f+c*l*e;this._z=h*l*e-c*d*f;this._w=h*l*f+c*d*e;break;case "YZX":this._x= +c*l*f+h*d*e;this._y=h*d*f+c*l*e;this._z=h*l*e-c*d*f;this._w=h*l*f-c*d*e;break;case "XZY":this._x=c*l*f-h*d*e;this._y=h*d*f-c*l*e;this._z=h*l*e+c*d*f;this._w=h*l*f+c*d*e;break;default:console.warn("THREE.Quaternion: .setFromEuler() encountered an unknown order: "+a)}!1!==b&&this._onChangeCallback();return this},setFromAxisAngle:function(a,b){b/=2;var c=Math.sin(b);this._x=a.x*c;this._y=a.y*c;this._z=a.z*c;this._w=Math.cos(b);this._onChangeCallback();return this},setFromRotationMatrix:function(a){var b= +a.elements,c=b[0];a=b[4];var d=b[8],e=b[1],f=b[5],g=b[9],h=b[2],l=b[6];b=b[10];var n=c+f+b;0f&&c>b?(c=2*Math.sqrt(1+c-f-b),this._w=(l-g)/c,this._x=.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=.25*c,this._z=(g+l)/c):(c=2*Math.sqrt(1+b-c-f),this._w=(e-a)/c,this._x=(d+h)/c,this._y=(g+l)/c,this._z=.25*c);this._onChangeCallback();return this},setFromUnitVectors:function(a, +b){var c=a.dot(b)+1;1E-6>c?(c=0,Math.abs(a.x)>Math.abs(a.z)?(this._x=-a.y,this._y=a.x,this._z=0):(this._x=0,this._y=-a.z,this._z=a.y)):(this._x=a.y*b.z-a.z*b.y,this._y=a.z*b.x-a.x*b.z,this._z=a.x*b.y-a.y*b.x);this._w=c;return this.normalize()},angleTo:function(a){return 2*Math.acos(Math.abs(P.clamp(this.dot(a),-1,1)))},rotateTowards:function(a,b){var c=this.angleTo(a);if(0===c)return this;this.slerp(a,Math.min(1,b/c));return this},identity:function(){return this.set(0,0,0,1)},inverse:function(){return this.conjugate()}, +conjugate:function(){this._x*=-1;this._y*=-1;this._z*=-1;this._onChangeCallback();return this},dot:function(a){return this._x*a._x+this._y*a._y+this._z*a._z+this._w*a._w},lengthSq:function(){return this._x*this._x+this._y*this._y+this._z*this._z+this._w*this._w},length:function(){return Math.sqrt(this._x*this._x+this._y*this._y+this._z*this._z+this._w*this._w)},normalize:function(){var a=this.length();0===a?(this._z=this._y=this._x=0,this._w=1):(a=1/a,this._x*=a,this._y*=a,this._z*=a,this._w*=a); +this._onChangeCallback();return this},multiply:function(a,b){return void 0!==b?(console.warn("THREE.Quaternion: .multiply() now only accepts one argument. Use .multiplyQuaternions( a, b ) instead."),this.multiplyQuaternions(a,b)):this.multiplyQuaternions(this,a)},premultiply:function(a){return this.multiplyQuaternions(a,this)},multiplyQuaternions:function(a,b){var c=a._x,d=a._y,e=a._z;a=a._w;var f=b._x,g=b._y,h=b._z;b=b._w;this._x=c*b+a*f+d*h-e*g;this._y=d*b+a*g+e*f-c*h;this._z=e*b+a*h+c*g-d*f;this._w= +a*b-c*f-d*g-e*h;this._onChangeCallback();return this},slerp:function(a,b){if(0===b)return this;if(1===b)return this.copy(a);var c=this._x,d=this._y,e=this._z,f=this._w,g=f*a._w+c*a._x+d*a._y+e*a._z;0>g?(this._w=-a._w,this._x=-a._x,this._y=-a._y,this._z=-a._z,g=-g):this.copy(a);if(1<=g)return this._w=f,this._x=c,this._y=d,this._z=e,this;a=1-g*g;if(a<=Number.EPSILON)return g=1-b,this._w=g*f+b*this._w,this._x=g*c+b*this._x,this._y=g*d+b*this._y,this._z=g*e+b*this._z,this.normalize(),this._onChangeCallback(), +this;a=Math.sqrt(a);var h=Math.atan2(a,g);g=Math.sin((1-b)*h)/a;b=Math.sin(b*h)/a;this._w=f*g+this._w*b;this._x=c*g+this._x*b;this._y=d*g+this._y*b;this._z=e*g+this._z*b;this._onChangeCallback();return this},equals:function(a){return a._x===this._x&&a._y===this._y&&a._z===this._z&&a._w===this._w},fromArray:function(a,b){void 0===b&&(b=0);this._x=a[b];this._y=a[b+1];this._z=a[b+2];this._w=a[b+3];this._onChangeCallback();return this},toArray:function(a,b){void 0===a&&(a=[]);void 0===b&&(b=0);a[b]=this._x; +a[b+1]=this._y;a[b+2]=this._z;a[b+3]=this._w;return a},fromBufferAttribute:function(a,b){this._x=a.getX(b);this._y=a.getY(b);this._z=a.getZ(b);this._w=a.getW(b);return this},_onChange:function(a){this._onChangeCallback=a;return this},_onChangeCallback:function(){}});var Xg=new m,ti=new Y;Object.assign(m.prototype,{isVector3:!0,set:function(a,b,c){void 0===c&&(c=this.z);this.x=a;this.y=b;this.z=c;return this},setScalar:function(a){this.z=this.y=this.x=a;return this},setX:function(a){this.x=a;return this}, +setY:function(a){this.y=a;return this},setZ:function(a){this.z=a;return this},setComponent:function(a,b){switch(a){case 0:this.x=b;break;case 1:this.y=b;break;case 2:this.z=b;break;default:throw Error("index is out of range: "+a);}return this},getComponent:function(a){switch(a){case 0:return this.x;case 1:return this.y;case 2:return this.z;default:throw Error("index is out of range: "+a);}},clone:function(){return new this.constructor(this.x,this.y,this.z)},copy:function(a){this.x=a.x;this.y=a.y; +this.z=a.z;return this},add:function(a,b){if(void 0!==b)return console.warn("THREE.Vector3: .add() now only accepts one argument. Use .addVectors( a, b ) instead."),this.addVectors(a,b);this.x+=a.x;this.y+=a.y;this.z+=a.z;return this},addScalar:function(a){this.x+=a;this.y+=a;this.z+=a;return this},addVectors:function(a,b){this.x=a.x+b.x;this.y=a.y+b.y;this.z=a.z+b.z;return this},addScaledVector:function(a,b){this.x+=a.x*b;this.y+=a.y*b;this.z+=a.z*b;return this},sub:function(a,b){if(void 0!==b)return console.warn("THREE.Vector3: .sub() now only accepts one argument. Use .subVectors( a, b ) instead."), +this.subVectors(a,b);this.x-=a.x;this.y-=a.y;this.z-=a.z;return this},subScalar:function(a){this.x-=a;this.y-=a;this.z-=a;return this},subVectors:function(a,b){this.x=a.x-b.x;this.y=a.y-b.y;this.z=a.z-b.z;return this},multiply:function(a,b){if(void 0!==b)return console.warn("THREE.Vector3: .multiply() now only accepts one argument. Use .multiplyVectors( a, b ) instead."),this.multiplyVectors(a,b);this.x*=a.x;this.y*=a.y;this.z*=a.z;return this},multiplyScalar:function(a){this.x*=a;this.y*=a;this.z*= +a;return this},multiplyVectors:function(a,b){this.x=a.x*b.x;this.y=a.y*b.y;this.z=a.z*b.z;return this},applyEuler:function(a){a&&a.isEuler||console.error("THREE.Vector3: .applyEuler() now expects an Euler rotation rather than a Vector3 and order.");return this.applyQuaternion(ti.setFromEuler(a))},applyAxisAngle:function(a,b){return this.applyQuaternion(ti.setFromAxisAngle(a,b))},applyMatrix3:function(a){var b=this.x,c=this.y,d=this.z;a=a.elements;this.x=a[0]*b+a[3]*c+a[6]*d;this.y=a[1]*b+a[4]*c+a[7]* +d;this.z=a[2]*b+a[5]*c+a[8]*d;return this},applyNormalMatrix:function(a){return this.applyMatrix3(a).normalize()},applyMatrix4:function(a){var b=this.x,c=this.y,d=this.z;a=a.elements;var e=1/(a[3]*b+a[7]*c+a[11]*d+a[15]);this.x=(a[0]*b+a[4]*c+a[8]*d+a[12])*e;this.y=(a[1]*b+a[5]*c+a[9]*d+a[13])*e;this.z=(a[2]*b+a[6]*c+a[10]*d+a[14])*e;return this},applyQuaternion:function(a){var b=this.x,c=this.y,d=this.z,e=a.x,f=a.y,g=a.z;a=a.w;var h=a*b+f*d-g*c,l=a*c+g*b-e*d,n=a*d+e*c-f*b;b=-e*b-f*c-g*d;this.x=h* +a+b*-e+l*-g-n*-f;this.y=l*a+b*-f+n*-e-h*-g;this.z=n*a+b*-g+h*-f-l*-e;return this},project:function(a){return this.applyMatrix4(a.matrixWorldInverse).applyMatrix4(a.projectionMatrix)},unproject:function(a){return this.applyMatrix4(a.projectionMatrixInverse).applyMatrix4(a.matrixWorld)},transformDirection:function(a){var b=this.x,c=this.y,d=this.z;a=a.elements;this.x=a[0]*b+a[4]*c+a[8]*d;this.y=a[1]*b+a[5]*c+a[9]*d;this.z=a[2]*b+a[6]*c+a[10]*d;return this.normalize()},divide:function(a){this.x/=a.x; +this.y/=a.y;this.z/=a.z;return this},divideScalar:function(a){return this.multiplyScalar(1/a)},min:function(a){this.x=Math.min(this.x,a.x);this.y=Math.min(this.y,a.y);this.z=Math.min(this.z,a.z);return this},max:function(a){this.x=Math.max(this.x,a.x);this.y=Math.max(this.y,a.y);this.z=Math.max(this.z,a.z);return this},clamp:function(a,b){this.x=Math.max(a.x,Math.min(b.x,this.x));this.y=Math.max(a.y,Math.min(b.y,this.y));this.z=Math.max(a.z,Math.min(b.z,this.z));return this},clampScalar:function(a, +b){this.x=Math.max(a,Math.min(b,this.x));this.y=Math.max(a,Math.min(b,this.y));this.z=Math.max(a,Math.min(b,this.z));return this},clampLength:function(a,b){var c=this.length();return this.divideScalar(c||1).multiplyScalar(Math.max(a,Math.min(b,c)))},floor:function(){this.x=Math.floor(this.x);this.y=Math.floor(this.y);this.z=Math.floor(this.z);return this},ceil:function(){this.x=Math.ceil(this.x);this.y=Math.ceil(this.y);this.z=Math.ceil(this.z);return this},round:function(){this.x=Math.round(this.x); +this.y=Math.round(this.y);this.z=Math.round(this.z);return this},roundToZero:function(){this.x=0>this.x?Math.ceil(this.x):Math.floor(this.x);this.y=0>this.y?Math.ceil(this.y):Math.floor(this.y);this.z=0>this.z?Math.ceil(this.z):Math.floor(this.z);return this},negate:function(){this.x=-this.x;this.y=-this.y;this.z=-this.z;return this},dot:function(a){return this.x*a.x+this.y*a.y+this.z*a.z},lengthSq:function(){return this.x*this.x+this.y*this.y+this.z*this.z},length:function(){return Math.sqrt(this.x* +this.x+this.y*this.y+this.z*this.z)},manhattanLength:function(){return Math.abs(this.x)+Math.abs(this.y)+Math.abs(this.z)},normalize:function(){return this.divideScalar(this.length()||1)},setLength:function(a){return this.normalize().multiplyScalar(a)},lerp:function(a,b){this.x+=(a.x-this.x)*b;this.y+=(a.y-this.y)*b;this.z+=(a.z-this.z)*b;return this},lerpVectors:function(a,b,c){this.x=a.x+(b.x-a.x)*c;this.y=a.y+(b.y-a.y)*c;this.z=a.z+(b.z-a.z)*c;return this},cross:function(a,b){return void 0!==b? +(console.warn("THREE.Vector3: .cross() now only accepts one argument. Use .crossVectors( a, b ) instead."),this.crossVectors(a,b)):this.crossVectors(this,a)},crossVectors:function(a,b){var c=a.x,d=a.y;a=a.z;var e=b.x,f=b.y;b=b.z;this.x=d*b-a*f;this.y=a*e-c*b;this.z=c*f-d*e;return this},projectOnVector:function(a){var b=a.lengthSq();if(0===b)return this.set(0,0,0);b=a.dot(this)/b;return this.copy(a).multiplyScalar(b)},projectOnPlane:function(a){Xg.copy(this).projectOnVector(a);return this.sub(Xg)}, +reflect:function(a){return this.sub(Xg.copy(a).multiplyScalar(2*this.dot(a)))},angleTo:function(a){var b=Math.sqrt(this.lengthSq()*a.lengthSq());if(0===b)return Math.PI/2;a=this.dot(a)/b;return Math.acos(P.clamp(a,-1,1))},distanceTo:function(a){return Math.sqrt(this.distanceToSquared(a))},distanceToSquared:function(a){var b=this.x-a.x,c=this.y-a.y;a=this.z-a.z;return b*b+c*c+a*a},manhattanDistanceTo:function(a){return Math.abs(this.x-a.x)+Math.abs(this.y-a.y)+Math.abs(this.z-a.z)},setFromSpherical:function(a){return this.setFromSphericalCoords(a.radius, +a.phi,a.theta)},setFromSphericalCoords:function(a,b,c){var d=Math.sin(b)*a;this.x=d*Math.sin(c);this.y=Math.cos(b)*a;this.z=d*Math.cos(c);return this},setFromCylindrical:function(a){return this.setFromCylindricalCoords(a.radius,a.theta,a.y)},setFromCylindricalCoords:function(a,b,c){this.x=a*Math.sin(b);this.y=c;this.z=a*Math.cos(b);return this},setFromMatrixPosition:function(a){a=a.elements;this.x=a[12];this.y=a[13];this.z=a[14];return this},setFromMatrixScale:function(a){var b=this.setFromMatrixColumn(a, +0).length(),c=this.setFromMatrixColumn(a,1).length();a=this.setFromMatrixColumn(a,2).length();this.x=b;this.y=c;this.z=a;return this},setFromMatrixColumn:function(a,b){return this.fromArray(a.elements,4*b)},setFromMatrix3Column:function(a,b){return this.fromArray(a.elements,3*b)},equals:function(a){return a.x===this.x&&a.y===this.y&&a.z===this.z},fromArray:function(a,b){void 0===b&&(b=0);this.x=a[b];this.y=a[b+1];this.z=a[b+2];return this},toArray:function(a,b){void 0===a&&(a=[]);void 0===b&&(b=0); +a[b]=this.x;a[b+1]=this.y;a[b+2]=this.z;return a},fromBufferAttribute:function(a,b,c){void 0!==c&&console.warn("THREE.Vector3: offset has been removed from .fromBufferAttribute().");this.x=a.getX(b);this.y=a.getY(b);this.z=a.getZ(b);return this},random:function(){this.x=Math.random();this.y=Math.random();this.z=Math.random();return this}});var od=new m,pa=new U,Kk=new m(0,0,0),Lk=new m(1,1,1),Qb=new m,Bf=new m,Ca=new m;Object.assign(U.prototype,{isMatrix4:!0,set:function(a,b,c,d,e,f,g,h,l,n,k,p,m, +r,t,v){var q=this.elements;q[0]=a;q[4]=b;q[8]=c;q[12]=d;q[1]=e;q[5]=f;q[9]=g;q[13]=h;q[2]=l;q[6]=n;q[10]=k;q[14]=p;q[3]=m;q[7]=r;q[11]=t;q[15]=v;return this},identity:function(){this.set(1,0,0,0,0,1,0,0,0,0,1,0,0,0,0,1);return this},clone:function(){return(new U).fromArray(this.elements)},copy:function(a){var b=this.elements;a=a.elements;b[0]=a[0];b[1]=a[1];b[2]=a[2];b[3]=a[3];b[4]=a[4];b[5]=a[5];b[6]=a[6];b[7]=a[7];b[8]=a[8];b[9]=a[9];b[10]=a[10];b[11]=a[11];b[12]=a[12];b[13]=a[13];b[14]=a[14];b[15]= +a[15];return this},copyPosition:function(a){var b=this.elements;a=a.elements;b[12]=a[12];b[13]=a[13];b[14]=a[14];return this},extractBasis:function(a,b,c){a.setFromMatrixColumn(this,0);b.setFromMatrixColumn(this,1);c.setFromMatrixColumn(this,2);return this},makeBasis:function(a,b,c){this.set(a.x,b.x,c.x,0,a.y,b.y,c.y,0,a.z,b.z,c.z,0,0,0,0,1);return this},extractRotation:function(a){var b=this.elements,c=a.elements,d=1/od.setFromMatrixColumn(a,0).length(),e=1/od.setFromMatrixColumn(a,1).length();a= +1/od.setFromMatrixColumn(a,2).length();b[0]=c[0]*d;b[1]=c[1]*d;b[2]=c[2]*d;b[3]=0;b[4]=c[4]*e;b[5]=c[5]*e;b[6]=c[6]*e;b[7]=0;b[8]=c[8]*a;b[9]=c[9]*a;b[10]=c[10]*a;b[11]=0;b[12]=0;b[13]=0;b[14]=0;b[15]=1;return this},makeRotationFromEuler:function(a){a&&a.isEuler||console.error("THREE.Matrix4: .makeRotationFromEuler() now expects a Euler rotation rather than a Vector3 and order.");var b=this.elements,c=a.x,d=a.y,e=a.z,f=Math.cos(c);c=Math.sin(c);var g=Math.cos(d);d=Math.sin(d);var h=Math.cos(e);e= +Math.sin(e);if("XYZ"===a.order){a=f*h;var l=f*e,n=c*h,k=c*e;b[0]=g*h;b[4]=-g*e;b[8]=d;b[1]=l+n*d;b[5]=a-k*d;b[9]=-c*g;b[2]=k-a*d;b[6]=n+l*d;b[10]=f*g}else"YXZ"===a.order?(a=g*h,l=g*e,n=d*h,k=d*e,b[0]=a+k*c,b[4]=n*c-l,b[8]=f*d,b[1]=f*e,b[5]=f*h,b[9]=-c,b[2]=l*c-n,b[6]=k+a*c,b[10]=f*g):"ZXY"===a.order?(a=g*h,l=g*e,n=d*h,k=d*e,b[0]=a-k*c,b[4]=-f*e,b[8]=n+l*c,b[1]=l+n*c,b[5]=f*h,b[9]=k-a*c,b[2]=-f*d,b[6]=c,b[10]=f*g):"ZYX"===a.order?(a=f*h,l=f*e,n=c*h,k=c*e,b[0]=g*h,b[4]=n*d-l,b[8]=a*d+k,b[1]=g*e,b[5]= +k*d+a,b[9]=l*d-n,b[2]=-d,b[6]=c*g,b[10]=f*g):"YZX"===a.order?(a=f*g,l=f*d,n=c*g,k=c*d,b[0]=g*h,b[4]=k-a*e,b[8]=n*e+l,b[1]=e,b[5]=f*h,b[9]=-c*h,b[2]=-d*h,b[6]=l*e+n,b[10]=a-k*e):"XZY"===a.order&&(a=f*g,l=f*d,n=c*g,k=c*d,b[0]=g*h,b[4]=-e,b[8]=d*h,b[1]=a*e+k,b[5]=f*h,b[9]=l*e-n,b[2]=n*e-l,b[6]=c*h,b[10]=k*e+a);b[3]=0;b[7]=0;b[11]=0;b[12]=0;b[13]=0;b[14]=0;b[15]=1;return this},makeRotationFromQuaternion:function(a){return this.compose(Kk,a,Lk)},lookAt:function(a,b,c){var d=this.elements;Ca.subVectors(a, +b);0===Ca.lengthSq()&&(Ca.z=1);Ca.normalize();Qb.crossVectors(c,Ca);0===Qb.lengthSq()&&(1===Math.abs(c.z)?Ca.x+=1E-4:Ca.z+=1E-4,Ca.normalize(),Qb.crossVectors(c,Ca));Qb.normalize();Bf.crossVectors(Ca,Qb);d[0]=Qb.x;d[4]=Bf.x;d[8]=Ca.x;d[1]=Qb.y;d[5]=Bf.y;d[9]=Ca.y;d[2]=Qb.z;d[6]=Bf.z;d[10]=Ca.z;return this},multiply:function(a,b){return void 0!==b?(console.warn("THREE.Matrix4: .multiply() now only accepts one argument. Use .multiplyMatrices( a, b ) instead."),this.multiplyMatrices(a,b)):this.multiplyMatrices(this, +a)},premultiply:function(a){return this.multiplyMatrices(a,this)},multiplyMatrices:function(a,b){var c=a.elements,d=b.elements;b=this.elements;a=c[0];var e=c[4],f=c[8],g=c[12],h=c[1],l=c[5],k=c[9],q=c[13],p=c[2],m=c[6],r=c[10],t=c[14],v=c[3],x=c[7],u=c[11];c=c[15];var w=d[0],A=d[4],C=d[8],N=d[12],y=d[1],I=d[5],E=d[9],D=d[13],F=d[2],G=d[6],H=d[10],J=d[14],K=d[3],L=d[7],O=d[11];d=d[15];b[0]=a*w+e*y+f*F+g*K;b[4]=a*A+e*I+f*G+g*L;b[8]=a*C+e*E+f*H+g*O;b[12]=a*N+e*D+f*J+g*d;b[1]=h*w+l*y+k*F+q*K;b[5]=h*A+ +l*I+k*G+q*L;b[9]=h*C+l*E+k*H+q*O;b[13]=h*N+l*D+k*J+q*d;b[2]=p*w+m*y+r*F+t*K;b[6]=p*A+m*I+r*G+t*L;b[10]=p*C+m*E+r*H+t*O;b[14]=p*N+m*D+r*J+t*d;b[3]=v*w+x*y+u*F+c*K;b[7]=v*A+x*I+u*G+c*L;b[11]=v*C+x*E+u*H+c*O;b[15]=v*N+x*D+u*J+c*d;return this},multiplyScalar:function(a){var b=this.elements;b[0]*=a;b[4]*=a;b[8]*=a;b[12]*=a;b[1]*=a;b[5]*=a;b[9]*=a;b[13]*=a;b[2]*=a;b[6]*=a;b[10]*=a;b[14]*=a;b[3]*=a;b[7]*=a;b[11]*=a;b[15]*=a;return this},determinant:function(){var a=this.elements,b=a[0],c=a[4],d=a[8],e=a[12], +f=a[1],g=a[5],h=a[9],l=a[13],k=a[2],q=a[6],p=a[10],m=a[14];return a[3]*(+e*h*q-d*l*q-e*g*p+c*l*p+d*g*m-c*h*m)+a[7]*(+b*h*m-b*l*p+e*f*p-d*f*m+d*l*k-e*h*k)+a[11]*(+b*l*q-b*g*m-e*f*q+c*f*m+e*g*k-c*l*k)+a[15]*(-d*g*k-b*h*q+b*g*p+d*f*q-c*f*p+c*h*k)},transpose:function(){var a=this.elements;var b=a[1];a[1]=a[4];a[4]=b;b=a[2];a[2]=a[8];a[8]=b;b=a[6];a[6]=a[9];a[9]=b;b=a[3];a[3]=a[12];a[12]=b;b=a[7];a[7]=a[13];a[13]=b;b=a[11];a[11]=a[14];a[14]=b;return this},setPosition:function(a,b,c){var d=this.elements; +a.isVector3?(d[12]=a.x,d[13]=a.y,d[14]=a.z):(d[12]=a,d[13]=b,d[14]=c);return this},getInverse:function(a,b){void 0!==b&&console.warn("THREE.Matrix4: .getInverse() can no longer be configured to throw on degenerate.");b=this.elements;var c=a.elements;a=c[0];var d=c[1],e=c[2],f=c[3],g=c[4],h=c[5],l=c[6],k=c[7],q=c[8],p=c[9],m=c[10],r=c[11],t=c[12],v=c[13],x=c[14];c=c[15];var u=p*x*k-v*m*k+v*l*r-h*x*r-p*l*c+h*m*c,w=t*m*k-q*x*k-t*l*r+g*x*r+q*l*c-g*m*c,A=q*v*k-t*p*k+t*h*r-g*v*r-q*h*c+g*p*c,C=t*p*l-q*v* +l-t*h*m+g*v*m+q*h*x-g*p*x,N=a*u+d*w+e*A+f*C;if(0===N)return this.set(0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0);N=1/N;b[0]=u*N;b[1]=(v*m*f-p*x*f-v*e*r+d*x*r+p*e*c-d*m*c)*N;b[2]=(h*x*f-v*l*f+v*e*k-d*x*k-h*e*c+d*l*c)*N;b[3]=(p*l*f-h*m*f-p*e*k+d*m*k+h*e*r-d*l*r)*N;b[4]=w*N;b[5]=(q*x*f-t*m*f+t*e*r-a*x*r-q*e*c+a*m*c)*N;b[6]=(t*l*f-g*x*f-t*e*k+a*x*k+g*e*c-a*l*c)*N;b[7]=(g*m*f-q*l*f+q*e*k-a*m*k-g*e*r+a*l*r)*N;b[8]=A*N;b[9]=(t*p*f-q*v*f-t*d*r+a*v*r+q*d*c-a*p*c)*N;b[10]=(g*v*f-t*h*f+t*d*k-a*v*k-g*d*c+a*h*c)*N;b[11]= +(q*h*f-g*p*f-q*d*k+a*p*k+g*d*r-a*h*r)*N;b[12]=C*N;b[13]=(q*v*e-t*p*e+t*d*m-a*v*m-q*d*x+a*p*x)*N;b[14]=(t*h*e-g*v*e-t*d*l+a*v*l+g*d*x-a*h*x)*N;b[15]=(g*p*e-q*h*e+q*d*l-a*p*l-g*d*m+a*h*m)*N;return this},scale:function(a){var b=this.elements,c=a.x,d=a.y;a=a.z;b[0]*=c;b[4]*=d;b[8]*=a;b[1]*=c;b[5]*=d;b[9]*=a;b[2]*=c;b[6]*=d;b[10]*=a;b[3]*=c;b[7]*=d;b[11]*=a;return this},getMaxScaleOnAxis:function(){var a=this.elements;return Math.sqrt(Math.max(a[0]*a[0]+a[1]*a[1]+a[2]*a[2],a[4]*a[4]+a[5]*a[5]+a[6]*a[6], +a[8]*a[8]+a[9]*a[9]+a[10]*a[10]))},makeTranslation:function(a,b,c){this.set(1,0,0,a,0,1,0,b,0,0,1,c,0,0,0,1);return this},makeRotationX:function(a){var b=Math.cos(a);a=Math.sin(a);this.set(1,0,0,0,0,b,-a,0,0,a,b,0,0,0,0,1);return this},makeRotationY:function(a){var b=Math.cos(a);a=Math.sin(a);this.set(b,0,a,0,0,1,0,0,-a,0,b,0,0,0,0,1);return this},makeRotationZ:function(a){var b=Math.cos(a);a=Math.sin(a);this.set(b,-a,0,0,a,b,0,0,0,0,1,0,0,0,0,1);return this},makeRotationAxis:function(a,b){var c= +Math.cos(b);b=Math.sin(b);var d=1-c,e=a.x,f=a.y;a=a.z;var g=d*e,h=d*f;this.set(g*e+c,g*f-b*a,g*a+b*f,0,g*f+b*a,h*f+c,h*a-b*e,0,g*a-b*f,h*a+b*e,d*a*a+c,0,0,0,0,1);return this},makeScale:function(a,b,c){this.set(a,0,0,0,0,b,0,0,0,0,c,0,0,0,0,1);return this},makeShear:function(a,b,c){this.set(1,b,c,0,a,1,c,0,a,b,1,0,0,0,0,1);return this},compose:function(a,b,c){var d=this.elements,e=b._x,f=b._y,g=b._z,h=b._w,l=e+e,k=f+f,q=g+g;b=e*l;var p=e*k;e*=q;var m=f*k;f*=q;g*=q;l*=h;k*=h;h*=q;q=c.x;var r=c.y;c= +c.z;d[0]=(1-(m+g))*q;d[1]=(p+h)*q;d[2]=(e-k)*q;d[3]=0;d[4]=(p-h)*r;d[5]=(1-(b+g))*r;d[6]=(f+l)*r;d[7]=0;d[8]=(e+k)*c;d[9]=(f-l)*c;d[10]=(1-(b+m))*c;d[11]=0;d[12]=a.x;d[13]=a.y;d[14]=a.z;d[15]=1;return this},decompose:function(a,b,c){var d=this.elements,e=od.set(d[0],d[1],d[2]).length(),f=od.set(d[4],d[5],d[6]).length(),g=od.set(d[8],d[9],d[10]).length();0>this.determinant()&&(e=-e);a.x=d[12];a.y=d[13];a.z=d[14];pa.copy(this);a=1/e;d=1/f;var h=1/g;pa.elements[0]*=a;pa.elements[1]*=a;pa.elements[2]*= +a;pa.elements[4]*=d;pa.elements[5]*=d;pa.elements[6]*=d;pa.elements[8]*=h;pa.elements[9]*=h;pa.elements[10]*=h;b.setFromRotationMatrix(pa);c.x=e;c.y=f;c.z=g;return this},makePerspective:function(a,b,c,d,e,f){void 0===f&&console.warn("THREE.Matrix4: .makePerspective() has been redefined and has a new signature. Please check the docs.");var g=this.elements;g[0]=2*e/(b-a);g[4]=0;g[8]=(b+a)/(b-a);g[12]=0;g[1]=0;g[5]=2*e/(c-d);g[9]=(c+d)/(c-d);g[13]=0;g[2]=0;g[6]=0;g[10]=-(f+e)/(f-e);g[14]=-2*f*e/(f-e); +g[3]=0;g[7]=0;g[11]=-1;g[15]=0;return this},makeOrthographic:function(a,b,c,d,e,f){var g=this.elements,h=1/(b-a),l=1/(c-d),k=1/(f-e);g[0]=2*h;g[4]=0;g[8]=0;g[12]=-((b+a)*h);g[1]=0;g[5]=2*l;g[9]=0;g[13]=-((c+d)*l);g[2]=0;g[6]=0;g[10]=-2*k;g[14]=-((f+e)*k);g[3]=0;g[7]=0;g[11]=0;g[15]=1;return this},equals:function(a){var b=this.elements;a=a.elements;for(var c=0;16>c;c++)if(b[c]!==a[c])return!1;return!0},fromArray:function(a,b){void 0===b&&(b=0);for(var c=0;16>c;c++)this.elements[c]=a[c+b];return this}, +toArray:function(a,b){void 0===a&&(a=[]);void 0===b&&(b=0);var c=this.elements;a[b]=c[0];a[b+1]=c[1];a[b+2]=c[2];a[b+3]=c[3];a[b+4]=c[4];a[b+5]=c[5];a[b+6]=c[6];a[b+7]=c[7];a[b+8]=c[8];a[b+9]=c[9];a[b+10]=c[10];a[b+11]=c[11];a[b+12]=c[12];a[b+13]=c[13];a[b+14]=c[14];a[b+15]=c[15];return a}});var ui=new U,vi=new Y;Vb.RotationOrders="XYZ YZX ZXY XZY YXZ ZYX".split(" ");Vb.DefaultOrder="XYZ";Object.defineProperties(Vb.prototype,{x:{get:function(){return this._x},set:function(a){this._x=a;this._onChangeCallback()}}, +y:{get:function(){return this._y},set:function(a){this._y=a;this._onChangeCallback()}},z:{get:function(){return this._z},set:function(a){this._z=a;this._onChangeCallback()}},order:{get:function(){return this._order},set:function(a){this._order=a;this._onChangeCallback()}}});Object.assign(Vb.prototype,{isEuler:!0,set:function(a,b,c,d){this._x=a;this._y=b;this._z=c;this._order=d||this._order;this._onChangeCallback();return this},clone:function(){return new this.constructor(this._x,this._y,this._z,this._order)}, +copy:function(a){this._x=a._x;this._y=a._y;this._z=a._z;this._order=a._order;this._onChangeCallback();return this},setFromRotationMatrix:function(a,b,c){var d=P.clamp,e=a.elements;a=e[0];var f=e[4],g=e[8],h=e[1],l=e[5],k=e[9],q=e[2],p=e[6];e=e[10];b=b||this._order;switch(b){case "XYZ":this._y=Math.asin(d(g,-1,1));.9999999>Math.abs(g)?(this._x=Math.atan2(-k,e),this._z=Math.atan2(-f,a)):(this._x=Math.atan2(p,l),this._z=0);break;case "YXZ":this._x=Math.asin(-d(k,-1,1));.9999999>Math.abs(k)?(this._y= +Math.atan2(g,e),this._z=Math.atan2(h,l)):(this._y=Math.atan2(-q,a),this._z=0);break;case "ZXY":this._x=Math.asin(d(p,-1,1));.9999999>Math.abs(p)?(this._y=Math.atan2(-q,e),this._z=Math.atan2(-f,l)):(this._y=0,this._z=Math.atan2(h,a));break;case "ZYX":this._y=Math.asin(-d(q,-1,1));.9999999>Math.abs(q)?(this._x=Math.atan2(p,e),this._z=Math.atan2(h,a)):(this._x=0,this._z=Math.atan2(-f,l));break;case "YZX":this._z=Math.asin(d(h,-1,1));.9999999>Math.abs(h)?(this._x=Math.atan2(-k,l),this._y=Math.atan2(-q, +a)):(this._x=0,this._y=Math.atan2(g,e));break;case "XZY":this._z=Math.asin(-d(f,-1,1));.9999999>Math.abs(f)?(this._x=Math.atan2(p,l),this._y=Math.atan2(g,a)):(this._x=Math.atan2(-k,e),this._y=0);break;default:console.warn("THREE.Euler: .setFromRotationMatrix() encountered an unknown order: "+b)}this._order=b;!1!==c&&this._onChangeCallback();return this},setFromQuaternion:function(a,b,c){ui.makeRotationFromQuaternion(a);return this.setFromRotationMatrix(ui,b,c)},setFromVector3:function(a,b){return this.set(a.x, +a.y,a.z,b||this._order)},reorder:function(a){vi.setFromEuler(this);return this.setFromQuaternion(vi,a)},equals:function(a){return a._x===this._x&&a._y===this._y&&a._z===this._z&&a._order===this._order},fromArray:function(a){this._x=a[0];this._y=a[1];this._z=a[2];void 0!==a[3]&&(this._order=a[3]);this._onChangeCallback();return this},toArray:function(a,b){void 0===a&&(a=[]);void 0===b&&(b=0);a[b]=this._x;a[b+1]=this._y;a[b+2]=this._z;a[b+3]=this._order;return a},toVector3:function(a){return a?a.set(this._x, +this._y,this._z):new m(this._x,this._y,this._z)},_onChange:function(a){this._onChangeCallback=a;return this},_onChangeCallback:function(){}});Object.assign(He.prototype,{set:function(a){this.mask=1<e&&(e=k);q>f&&(f=q);p>g&&(g=p)}this.min.set(b,c,d);this.max.set(e,f,g);return this},setFromBufferAttribute:function(a){for(var b=Infinity,c=Infinity,d=Infinity,e=-Infinity,f=-Infinity,g=-Infinity,h=0,l=a.count;he&&(e=k);q>f&&(f=q);p>g&&(g=p)}this.min.set(b,c,d);this.max.set(e,f,g);return this},setFromPoints:function(a){this.makeEmpty();for(var b= +0,c=a.length;bthis.max.x||a.ythis.max.y||a.zthis.max.z?!1:!0},containsBox:function(a){return this.min.x<=a.min.x&&a.max.x<=this.max.x&&this.min.y<=a.min.y&&a.max.y<=this.max.y&&this.min.z<=a.min.z&&a.max.z<=this.max.z},getParameter:function(a,b){void 0===b&&(console.warn("THREE.Box3: .getParameter() target is now required"),b=new m);return b.set((a.x-this.min.x)/(this.max.x-this.min.x),(a.y-this.min.y)/(this.max.y-this.min.y),(a.z-this.min.z)/(this.max.z-this.min.z))}, +intersectsBox:function(a){return a.max.xthis.max.x||a.max.ythis.max.y||a.max.zthis.max.z?!1:!0},intersectsSphere:function(a){this.clampPoint(a.center,ye);return ye.distanceToSquared(a.center)<=a.radius*a.radius},intersectsPlane:function(a){if(0=-a.constant},intersectsTriangle:function(a){if(this.isEmpty())return!1;this.getCenter(ze);Df.subVectors(this.max,ze);qd.subVectors(a.a,ze);rd.subVectors(a.b,ze);sd.subVectors(a.c,ze);Rb.subVectors(rd,qd);Sb.subVectors(sd,rd);sc.subVectors(qd,sd);a=[0,-Rb.z,Rb.y,0,-Sb.z,Sb.y,0,-sc.z,sc.y,Rb.z,0,-Rb.x,Sb.z,0,-Sb.x,sc.z,0, +-sc.x,-Rb.y,Rb.x,0,-Sb.y,Sb.x,0,-sc.y,sc.x,0];if(!bg(a,qd,rd,sd,Df))return!1;a=[1,0,0,0,1,0,0,0,1];if(!bg(a,qd,rd,sd,Df))return!1;Ef.crossVectors(Rb,Sb);a=[Ef.x,Ef.y,Ef.z];return bg(a,qd,rd,sd,Df)},clampPoint:function(a,b){void 0===b&&(console.warn("THREE.Box3: .clampPoint() target is now required"),b=new m);return b.copy(a).clamp(this.min,this.max)},distanceToPoint:function(a){return ye.copy(a).clamp(this.min,this.max).sub(a).length()},getBoundingSphere:function(a){void 0===a&&console.error("THREE.Box3: .getBoundingSphere() target is now required"); +this.getCenter(a.center);a.radius=.5*this.getSize(ye).length();return a},intersect:function(a){this.min.max(a.min);this.max.min(a.max);this.isEmpty()&&this.makeEmpty();return this},union:function(a){this.min.min(a.min);this.max.max(a.max);return this},applyMatrix4:function(a){if(this.isEmpty())return this;ub[0].set(this.min.x,this.min.y,this.min.z).applyMatrix4(a);ub[1].set(this.min.x,this.min.y,this.max.z).applyMatrix4(a);ub[2].set(this.min.x,this.max.y,this.min.z).applyMatrix4(a);ub[3].set(this.min.x, +this.max.y,this.max.z).applyMatrix4(a);ub[4].set(this.max.x,this.min.y,this.min.z).applyMatrix4(a);ub[5].set(this.max.x,this.min.y,this.max.z).applyMatrix4(a);ub[6].set(this.max.x,this.max.y,this.min.z).applyMatrix4(a);ub[7].set(this.max.x,this.max.y,this.max.z).applyMatrix4(a);this.setFromPoints(ub);return this},translate:function(a){this.min.add(a);this.max.add(a);return this},equals:function(a){return a.min.equals(this.min)&&a.max.equals(this.max)}});var Qk=new Sa;Object.assign(cb.prototype,{set:function(a, +b){this.center.copy(a);this.radius=b;return this},setFromPoints:function(a,b){var c=this.center;void 0!==b?c.copy(b):Qk.setFromPoints(a).getCenter(c);for(var d=b=0,e=a.length;dthis.radius},makeEmpty:function(){this.center.set(0,0,0);this.radius=-1;return this}, +containsPoint:function(a){return a.distanceToSquared(this.center)<=this.radius*this.radius},distanceToPoint:function(a){return a.distanceTo(this.center)-this.radius},intersectsSphere:function(a){var b=this.radius+a.radius;return a.center.distanceToSquared(this.center)<=b*b},intersectsBox:function(a){return a.intersectsSphere(this)},intersectsPlane:function(a){return Math.abs(a.distanceToPoint(this.center))<=this.radius},clampPoint:function(a,b){var c=this.center.distanceToSquared(a);void 0===b&&(console.warn("THREE.Sphere: .clampPoint() target is now required"), +b=new m);b.copy(a);c>this.radius*this.radius&&(b.sub(this.center).normalize(),b.multiplyScalar(this.radius).add(this.center));return b},getBoundingBox:function(a){void 0===a&&(console.warn("THREE.Sphere: .getBoundingBox() target is now required"),a=new Sa);if(this.isEmpty())return a.makeEmpty(),a;a.set(this.center,this.center);a.expandByScalar(this.radius);return a},applyMatrix4:function(a){this.center.applyMatrix4(a);this.radius*=a.getMaxScaleOnAxis();return this},translate:function(a){this.center.add(a); +return this},equals:function(a){return a.center.equals(this.center)&&a.radius===this.radius}});var vb=new m,Zg=new m,Ff=new m,Tb=new m,$g=new m,Gf=new m,ah=new m;Object.assign(Xb.prototype,{set:function(a,b){this.origin.copy(a);this.direction.copy(b);return this},clone:function(){return(new this.constructor).copy(this)},copy:function(a){this.origin.copy(a.origin);this.direction.copy(a.direction);return this},at:function(a,b){void 0===b&&(console.warn("THREE.Ray: .at() target is now required"),b=new m); +return b.copy(this.direction).multiplyScalar(a).add(this.origin)},lookAt:function(a){this.direction.copy(a).sub(this.origin).normalize();return this},recast:function(a){this.origin.copy(this.at(a,vb));return this},closestPointToPoint:function(a,b){void 0===b&&(console.warn("THREE.Ray: .closestPointToPoint() target is now required"),b=new m);b.subVectors(a,this.origin);a=b.dot(this.direction);return 0>a?b.copy(this.origin):b.copy(this.direction).multiplyScalar(a).add(this.origin)},distanceToPoint:function(a){return Math.sqrt(this.distanceSqToPoint(a))}, +distanceSqToPoint:function(a){var b=vb.subVectors(a,this.origin).dot(this.direction);if(0>b)return this.origin.distanceToSquared(a);vb.copy(this.direction).multiplyScalar(b).add(this.origin);return vb.distanceToSquared(a)},distanceSqToSegment:function(a,b,c,d){Zg.copy(a).add(b).multiplyScalar(.5);Ff.copy(b).sub(a).normalize();Tb.copy(this.origin).sub(Zg);var e=.5*a.distanceTo(b),f=-this.direction.dot(Ff),g=Tb.dot(this.direction),h=-Tb.dot(Ff),l=Tb.lengthSq(),k=Math.abs(1-f*f);if(0=-q?b<=q?(e=1/k,a*=e,b*=e,f=a*(a+f*b+2*g)+b*(f*a+b+2*h)+l):(b=e,a=Math.max(0,-(f*b+g)),f=-a*a+b*(b+2*h)+l):(b=-e,a=Math.max(0,-(f*b+g)),f=-a*a+b*(b+2*h)+l):b<=-q?(a=Math.max(0,-(-f*e+g)),b=0a)return null;a=Math.sqrt(a-d);d=c-a;c+=a;return 0>d&&0>c?null:0>d?this.at(c,b):this.at(d,b)},intersectsSphere:function(a){return this.distanceSqToPoint(a.center)<=a.radius*a.radius},distanceToPlane:function(a){var b=a.normal.dot(this.direction);if(0===b)return 0===a.distanceToPoint(this.origin)?0:null;a=-(this.origin.dot(a.normal)+ +a.constant)/b;return 0<=a?a:null},intersectPlane:function(a,b){a=this.distanceToPlane(a);return null===a?null:this.at(a,b)},intersectsPlane:function(a){var b=a.distanceToPoint(this.origin);return 0===b||0>a.normal.dot(this.direction)*b?!0:!1},intersectBox:function(a,b){var c=1/this.direction.x;var d=1/this.direction.y;var e=1/this.direction.z,f=this.origin;if(0<=c){var g=(a.min.x-f.x)*c;c*=a.max.x-f.x}else g=(a.max.x-f.x)*c,c*=a.min.x-f.x;if(0<=d){var h=(a.min.y-f.y)*d;d*=a.max.y-f.y}else h=(a.max.y- +f.y)*d,d*=a.min.y-f.y;if(g>d||h>c)return null;if(h>g||g!==g)g=h;if(da||h>c)return null;if(h>g||g!==g)g=h;if(ac?null:this.at(0<=g?g:c,b)},intersectsBox:function(a){return null!==this.intersectBox(a,vb)},intersectTriangle:function(a,b,c,d,e){$g.subVectors(b,a);Gf.subVectors(c,a);ah.crossVectors($g,Gf);b=this.direction.dot(ah);if(0b)d=-1,b=-b;else return null; +Tb.subVectors(this.origin,a);a=d*this.direction.dot(Gf.crossVectors(Tb,Gf));if(0>a)return null;c=d*this.direction.dot($g.cross(Tb));if(0>c||a+c>b)return null;a=-d*Tb.dot(ah);return 0>a?null:this.at(a/b,e)},applyMatrix4:function(a){this.origin.applyMatrix4(a);this.direction.transformDirection(a);return this},equals:function(a){return a.origin.equals(this.origin)&&a.direction.equals(this.direction)}});var bh=new m,Rk=new m,Sk=new qa;Object.assign(Ta.prototype,{isPlane:!0,set:function(a,b){this.normal.copy(a); +this.constant=b;return this},setComponents:function(a,b,c,d){this.normal.set(a,b,c);this.constant=d;return this},setFromNormalAndCoplanarPoint:function(a,b){this.normal.copy(a);this.constant=-b.dot(this.normal);return this},setFromCoplanarPoints:function(a,b,c){b=bh.subVectors(c,b).cross(Rk.subVectors(a,b)).normalize();this.setFromNormalAndCoplanarPoint(b,a);return this},clone:function(){return(new this.constructor).copy(this)},copy:function(a){this.normal.copy(a.normal);this.constant=a.constant; +return this},normalize:function(){var a=1/this.normal.length();this.normal.multiplyScalar(a);this.constant*=a;return this},negate:function(){this.constant*=-1;this.normal.negate();return this},distanceToPoint:function(a){return this.normal.dot(a)+this.constant},distanceToSphere:function(a){return this.distanceToPoint(a.center)-a.radius},projectPoint:function(a,b){void 0===b&&(console.warn("THREE.Plane: .projectPoint() target is now required"),b=new m);return b.copy(this.normal).multiplyScalar(-this.distanceToPoint(a)).add(a)}, +intersectLine:function(a,b){void 0===b&&(console.warn("THREE.Plane: .intersectLine() target is now required"),b=new m);var c=a.delta(bh),d=this.normal.dot(c);if(0===d){if(0===this.distanceToPoint(a.start))return b.copy(a.start)}else if(d=-(a.start.dot(this.normal)+this.constant)/d,!(0>d||1b&&0a&&0=xb.x+xb.y},getUV:function(a,b,c,d,e,f,g,h){this.getBarycoord(a,b,c,d,xb);h.set(0,0);h.addScaledVector(e,xb.x);h.addScaledVector(f,xb.y);h.addScaledVector(g,xb.z);return h},isFrontFacing:function(a, +b,c,d){ab.subVectors(c,b);wb.subVectors(a,b);return 0>ab.cross(wb).dot(d)?!0:!1}});Object.assign(ba.prototype,{set:function(a,b,c){this.a.copy(a);this.b.copy(b);this.c.copy(c);return this},setFromPointsAndIndices:function(a,b,c,d){this.a.copy(a[b]);this.b.copy(a[c]);this.c.copy(a[d]);return this},clone:function(){return(new this.constructor).copy(this)},copy:function(a){this.a.copy(a.a);this.b.copy(a.b);this.c.copy(a.c);return this},getArea:function(){ab.subVectors(this.c,this.b);wb.subVectors(this.a, +this.b);return.5*ab.cross(wb).length()},getMidpoint:function(a){void 0===a&&(console.warn("THREE.Triangle: .getMidpoint() target is now required"),a=new m);return a.addVectors(this.a,this.b).add(this.c).multiplyScalar(1/3)},getNormal:function(a){return ba.getNormal(this.a,this.b,this.c,a)},getPlane:function(a){void 0===a&&(console.warn("THREE.Triangle: .getPlane() target is now required"),a=new Ta);return a.setFromCoplanarPoints(this.a,this.b,this.c)},getBarycoord:function(a,b){return ba.getBarycoord(a, +this.a,this.b,this.c,b)},getUV:function(a,b,c,d,e){return ba.getUV(a,this.a,this.b,this.c,b,c,d,e)},containsPoint:function(a){return ba.containsPoint(a,this.a,this.b,this.c)},isFrontFacing:function(a){return ba.isFrontFacing(this.a,this.b,this.c,a)},intersectsBox:function(a){return a.intersectsTriangle(this)},closestPointToPoint:function(a,b){void 0===b&&(console.warn("THREE.Triangle: .closestPointToPoint() target is now required"),b=new m);var c=this.a,d=this.b,e=this.c;td.subVectors(d,c);ud.subVectors(e, +c);dh.subVectors(a,c);var f=td.dot(dh),g=ud.dot(dh);if(0>=f&&0>=g)return b.copy(c);eh.subVectors(a,d);var h=td.dot(eh),l=ud.dot(eh);if(0<=h&&l<=h)return b.copy(d);var k=f*l-h*g;if(0>=k&&0<=f&&0>=h)return d=f/(f-h),b.copy(c).addScaledVector(td,d);fh.subVectors(a,e);a=td.dot(fh);var q=ud.dot(fh);if(0<=q&&a<=q)return b.copy(e);f=a*g-f*q;if(0>=f&&0<=g&&0>=q)return k=g/(g-q),b.copy(c).addScaledVector(ud,k);g=h*q-a*l;if(0>=g&&0<=l-h&&0<=a-q)return Ai.subVectors(e,d),k=(l-h)/(l-h+(a-q)),b.copy(d).addScaledVector(Ai, +k);e=1/(g+f+k);d=f*e;k*=e;return b.copy(c).addScaledVector(td,d).addScaledVector(ud,k)},equals:function(a){return a.a.equals(this.a)&&a.b.equals(this.b)&&a.c.equals(this.c)}});var Bi={aliceblue:15792383,antiquewhite:16444375,aqua:65535,aquamarine:8388564,azure:15794175,beige:16119260,bisque:16770244,black:0,blanchedalmond:16772045,blue:255,blueviolet:9055202,brown:10824234,burlywood:14596231,cadetblue:6266528,chartreuse:8388352,chocolate:13789470,coral:16744272,cornflowerblue:6591981,cornsilk:16775388, +crimson:14423100,cyan:65535,darkblue:139,darkcyan:35723,darkgoldenrod:12092939,darkgray:11119017,darkgreen:25600,darkgrey:11119017,darkkhaki:12433259,darkmagenta:9109643,darkolivegreen:5597999,darkorange:16747520,darkorchid:10040012,darkred:9109504,darksalmon:15308410,darkseagreen:9419919,darkslateblue:4734347,darkslategray:3100495,darkslategrey:3100495,darkturquoise:52945,darkviolet:9699539,deeppink:16716947,deepskyblue:49151,dimgray:6908265,dimgrey:6908265,dodgerblue:2003199,firebrick:11674146, +floralwhite:16775920,forestgreen:2263842,fuchsia:16711935,gainsboro:14474460,ghostwhite:16316671,gold:16766720,goldenrod:14329120,gray:8421504,green:32768,greenyellow:11403055,grey:8421504,honeydew:15794160,hotpink:16738740,indianred:13458524,indigo:4915330,ivory:16777200,khaki:15787660,lavender:15132410,lavenderblush:16773365,lawngreen:8190976,lemonchiffon:16775885,lightblue:11393254,lightcoral:15761536,lightcyan:14745599,lightgoldenrodyellow:16448210,lightgray:13882323,lightgreen:9498256,lightgrey:13882323, +lightpink:16758465,lightsalmon:16752762,lightseagreen:2142890,lightskyblue:8900346,lightslategray:7833753,lightslategrey:7833753,lightsteelblue:11584734,lightyellow:16777184,lime:65280,limegreen:3329330,linen:16445670,magenta:16711935,maroon:8388608,mediumaquamarine:6737322,mediumblue:205,mediumorchid:12211667,mediumpurple:9662683,mediumseagreen:3978097,mediumslateblue:8087790,mediumspringgreen:64154,mediumturquoise:4772300,mediumvioletred:13047173,midnightblue:1644912,mintcream:16121850,mistyrose:16770273, +moccasin:16770229,navajowhite:16768685,navy:128,oldlace:16643558,olive:8421376,olivedrab:7048739,orange:16753920,orangered:16729344,orchid:14315734,palegoldenrod:15657130,palegreen:10025880,paleturquoise:11529966,palevioletred:14381203,papayawhip:16773077,peachpuff:16767673,peru:13468991,pink:16761035,plum:14524637,powderblue:11591910,purple:8388736,rebeccapurple:6697881,red:16711680,rosybrown:12357519,royalblue:4286945,saddlebrown:9127187,salmon:16416882,sandybrown:16032864,seagreen:3050327,seashell:16774638, +sienna:10506797,silver:12632256,skyblue:8900331,slateblue:6970061,slategray:7372944,slategrey:7372944,snow:16775930,springgreen:65407,steelblue:4620980,tan:13808780,teal:32896,thistle:14204888,tomato:16737095,turquoise:4251856,violet:15631086,wheat:16113331,white:16777215,whitesmoke:16119285,yellow:16776960,yellowgreen:10145074},xa={h:0,s:0,l:0},Hf={h:0,s:0,l:0};Object.assign(H.prototype,{isColor:!0,r:1,g:1,b:1,set:function(a){a&&a.isColor?this.copy(a):"number"===typeof a?this.setHex(a):"string"=== +typeof a&&this.setStyle(a);return this},setScalar:function(a){this.b=this.g=this.r=a;return this},setHex:function(a){a=Math.floor(a);this.r=(a>>16&255)/255;this.g=(a>>8&255)/255;this.b=(a&255)/255;return this},setRGB:function(a,b,c){this.r=a;this.g=b;this.b=c;return this},setHSL:function(a,b,c){a=P.euclideanModulo(a,1);b=P.clamp(b,0,1);c=P.clamp(c,0,1);0===b?this.r=this.g=this.b=c:(b=.5>=c?c*(1+b):c+b-c*b,c=2*c-b,this.r=cg(c,b,a+1/3),this.g=cg(c,b,a),this.b=cg(c,b,a-1/3));return this},setStyle:function(a){function b(b){void 0!== +b&&1>parseFloat(b)&&console.warn("THREE.Color: Alpha component of "+a+" will be ignored.")}var c;if(c=/^((?:rgb|hsl)a?)\(\s*([^\)]*)\)/.exec(a)){var d=c[2];switch(c[1]){case "rgb":case "rgba":if(c=/^(\d+)\s*,\s*(\d+)\s*,\s*(\d+)\s*(,\s*([0-9]*\.?[0-9]+)\s*)?$/.exec(d))return this.r=Math.min(255,parseInt(c[1],10))/255,this.g=Math.min(255,parseInt(c[2],10))/255,this.b=Math.min(255,parseInt(c[3],10))/255,b(c[5]),this;if(c=/^(\d+)%\s*,\s*(\d+)%\s*,\s*(\d+)%\s*(,\s*([0-9]*\.?[0-9]+)\s*)?$/.exec(d))return this.r= +Math.min(100,parseInt(c[1],10))/100,this.g=Math.min(100,parseInt(c[2],10))/100,this.b=Math.min(100,parseInt(c[3],10))/100,b(c[5]),this;break;case "hsl":case "hsla":if(c=/^([0-9]*\.?[0-9]+)\s*,\s*(\d+)%\s*,\s*(\d+)%\s*(,\s*([0-9]*\.?[0-9]+)\s*)?$/.exec(d)){d=parseFloat(c[1])/360;var e=parseInt(c[2],10)/100,f=parseInt(c[3],10)/100;b(c[5]);return this.setHSL(d,e,f)}}}else if(c=/^#([A-Fa-f0-9]+)$/.exec(a)){c=c[1];d=c.length;if(3===d)return this.r=parseInt(c.charAt(0)+c.charAt(0),16)/255,this.g=parseInt(c.charAt(1)+ +c.charAt(1),16)/255,this.b=parseInt(c.charAt(2)+c.charAt(2),16)/255,this;if(6===d)return this.r=parseInt(c.charAt(0)+c.charAt(1),16)/255,this.g=parseInt(c.charAt(2)+c.charAt(3),16)/255,this.b=parseInt(c.charAt(4)+c.charAt(5),16)/255,this}return a&&0=h?l/(e+f):l/(2-e-f);switch(e){case b:g=(c-d)/l+(cthis.opacity&&(d.opacity= +this.opacity);!0===this.transparent&&(d.transparent=this.transparent);d.depthFunc=this.depthFunc;d.depthTest=this.depthTest;d.depthWrite=this.depthWrite;d.stencilWrite=this.stencilWrite;d.stencilWriteMask=this.stencilWriteMask;d.stencilFunc=this.stencilFunc;d.stencilRef=this.stencilRef;d.stencilFuncMask=this.stencilFuncMask;d.stencilFail=this.stencilFail;d.stencilZFail=this.stencilZFail;d.stencilZPass=this.stencilZPass;this.rotation&&0!==this.rotation&&(d.rotation=this.rotation);!0===this.polygonOffset&& +(d.polygonOffset=!0);0!==this.polygonOffsetFactor&&(d.polygonOffsetFactor=this.polygonOffsetFactor);0!==this.polygonOffsetUnits&&(d.polygonOffsetUnits=this.polygonOffsetUnits);this.linewidth&&1!==this.linewidth&&(d.linewidth=this.linewidth);void 0!==this.dashSize&&(d.dashSize=this.dashSize);void 0!==this.gapSize&&(d.gapSize=this.gapSize);void 0!==this.scale&&(d.scale=this.scale);!0===this.dithering&&(d.dithering=!0);0g;g++)if(f[g]===f[(g+1)%3]){a.push(d);break}for(c=a.length-1;0<=c;c--)for(d=a[c],this.faces.splice(d,1),e=0,f=this.faceVertexUvs.length;e\n\t\t\t\t#include \n\n\t\t\t}\n\t\t", +fragmentShader:"\n\n\t\t\tuniform sampler2D tEquirect;\n\n\t\t\tvarying vec3 vWorldDirection;\n\n\t\t\t#include \n\n\t\t\tvoid main() {\n\n\t\t\t\tvec3 direction = normalize( vWorldDirection );\n\n\t\t\t\tvec2 sampleUV = equirectUv( direction );\n\n\t\t\t\tgl_FragColor = texture2D( tEquirect, sampleUV );\n\n\t\t\t}\n\t\t",side:1,blending:0});d.uniforms.tEquirect.value=b;b=new T(new Bb(5,5,5),d);c.add(b);(new Ic(1,10,this)).update(a,c);b.geometry.dispose();b.material.dispose();return this}; +bc.prototype=Object.create(V.prototype);bc.prototype.constructor=bc;bc.prototype.isDataTexture=!0;var wd=new cb,Kf=new m;Object.assign(Jc.prototype,{set:function(a,b,c,d,e,f){var g=this.planes;g[0].copy(a);g[1].copy(b);g[2].copy(c);g[3].copy(d);g[4].copy(e);g[5].copy(f);return this},clone:function(){return(new this.constructor).copy(this)},copy:function(a){for(var b=this.planes,c=0;6>c;c++)b[c].copy(a.planes[c]);return this},setFromProjectionMatrix:function(a){var b=this.planes,c=a.elements;a=c[0]; +var d=c[1],e=c[2],f=c[3],g=c[4],h=c[5],l=c[6],k=c[7],q=c[8],p=c[9],m=c[10],r=c[11],t=c[12],v=c[13],x=c[14];c=c[15];b[0].setComponents(f-a,k-g,r-q,c-t).normalize();b[1].setComponents(f+a,k+g,r+q,c+t).normalize();b[2].setComponents(f+d,k+h,r+p,c+v).normalize();b[3].setComponents(f-d,k-h,r-p,c-v).normalize();b[4].setComponents(f-e,k-l,r-m,c-x).normalize();b[5].setComponents(f+e,k+l,r+m,c+x).normalize();return this},intersectsObject:function(a){var b=a.geometry;null===b.boundingSphere&&b.computeBoundingSphere(); +wd.copy(b.boundingSphere).applyMatrix4(a.matrixWorld);return this.intersectsSphere(wd)},intersectsSprite:function(a){wd.center.set(0,0,0);wd.radius=.7071067811865476;wd.applyMatrix4(a.matrixWorld);return this.intersectsSphere(wd)},intersectsSphere:function(a){var b=this.planes,c=a.center;a=-a.radius;for(var d=0;6>d;d++)if(b[d].distanceToPoint(c)c;c++){var d=b[c];Kf.x=0d.distanceToPoint(Kf))return!1}return!0},containsPoint:function(a){for(var b=this.planes,c=0;6>c;c++)if(0>b[c].distanceToPoint(a))return!1;return!0}});var G={common:{diffuse:{value:new H(15658734)},opacity:{value:1},map:{value:null},uvTransform:{value:new qa},uv2Transform:{value:new qa},alphaMap:{value:null}},specularmap:{specularMap:{value:null}},envmap:{envMap:{value:null},flipEnvMap:{value:-1},reflectivity:{value:1},refractionRatio:{value:.98},maxMipLevel:{value:0}}, +aomap:{aoMap:{value:null},aoMapIntensity:{value:1}},lightmap:{lightMap:{value:null},lightMapIntensity:{value:1}},emissivemap:{emissiveMap:{value:null}},bumpmap:{bumpMap:{value:null},bumpScale:{value:1}},normalmap:{normalMap:{value:null},normalScale:{value:new u(1,1)}},displacementmap:{displacementMap:{value:null},displacementScale:{value:1},displacementBias:{value:0}},roughnessmap:{roughnessMap:{value:null}},metalnessmap:{metalnessMap:{value:null}},gradientmap:{gradientMap:{value:null}},fog:{fogDensity:{value:2.5E-4}, +fogNear:{value:1},fogFar:{value:2E3},fogColor:{value:new H(16777215)}},lights:{ambientLightColor:{value:[]},lightProbe:{value:[]},directionalLights:{value:[],properties:{direction:{},color:{}}},directionalLightShadows:{value:[],properties:{shadowBias:{},shadowNormalBias:{},shadowRadius:{},shadowMapSize:{}}},directionalShadowMap:{value:[]},directionalShadowMatrix:{value:[]},spotLights:{value:[],properties:{color:{},position:{},direction:{},distance:{},coneCos:{},penumbraCos:{},decay:{}}},spotLightShadows:{value:[], +properties:{shadowBias:{},shadowNormalBias:{},shadowRadius:{},shadowMapSize:{}}},spotShadowMap:{value:[]},spotShadowMatrix:{value:[]},pointLights:{value:[],properties:{color:{},position:{},decay:{},distance:{}}},pointLightShadows:{value:[],properties:{shadowBias:{},shadowNormalBias:{},shadowRadius:{},shadowMapSize:{},shadowCameraNear:{},shadowCameraFar:{}}},pointShadowMap:{value:[]},pointShadowMatrix:{value:[]},hemisphereLights:{value:[],properties:{direction:{},skyColor:{},groundColor:{}}},rectAreaLights:{value:[], +properties:{color:{},position:{},width:{},height:{}}}},points:{diffuse:{value:new H(15658734)},opacity:{value:1},size:{value:1},scale:{value:1},map:{value:null},alphaMap:{value:null},uvTransform:{value:new qa}},sprite:{diffuse:{value:new H(15658734)},opacity:{value:1},center:{value:new u(.5,.5)},rotation:{value:0},map:{value:null},alphaMap:{value:null},uvTransform:{value:new qa}}};Id.prototype=Object.create(F.prototype);Id.prototype.constructor=Id;cc.prototype=Object.create(E.prototype);cc.prototype.constructor= +cc;var O={alphamap_fragment:"#ifdef USE_ALPHAMAP\n\tdiffuseColor.a *= texture2D( alphaMap, vUv ).g;\n#endif",alphamap_pars_fragment:"#ifdef USE_ALPHAMAP\n\tuniform sampler2D alphaMap;\n#endif",alphatest_fragment:"#ifdef ALPHATEST\n\tif ( diffuseColor.a < ALPHATEST ) discard;\n#endif",aomap_fragment:"#ifdef USE_AOMAP\n\tfloat ambientOcclusion = ( texture2D( aoMap, vUv2 ).r - 1.0 ) * aoMapIntensity + 1.0;\n\treflectedLight.indirectDiffuse *= ambientOcclusion;\n\t#if defined( USE_ENVMAP ) && defined( STANDARD )\n\t\tfloat dotNV = saturate( dot( geometry.normal, geometry.viewDir ) );\n\t\treflectedLight.indirectSpecular *= computeSpecularOcclusion( dotNV, ambientOcclusion, material.specularRoughness );\n\t#endif\n#endif", +aomap_pars_fragment:"#ifdef USE_AOMAP\n\tuniform sampler2D aoMap;\n\tuniform float aoMapIntensity;\n#endif",begin_vertex:"vec3 transformed = vec3( position );",beginnormal_vertex:"vec3 objectNormal = vec3( normal );\n#ifdef USE_TANGENT\n\tvec3 objectTangent = vec3( tangent.xyz );\n#endif",bsdfs:"vec2 integrateSpecularBRDF( const in float dotNV, const in float roughness ) {\n\tconst vec4 c0 = vec4( - 1, - 0.0275, - 0.572, 0.022 );\n\tconst vec4 c1 = vec4( 1, 0.0425, 1.04, - 0.04 );\n\tvec4 r = roughness * c0 + c1;\n\tfloat a004 = min( r.x * r.x, exp2( - 9.28 * dotNV ) ) * r.x + r.y;\n\treturn vec2( -1.04, 1.04 ) * a004 + r.zw;\n}\nfloat punctualLightIntensityToIrradianceFactor( const in float lightDistance, const in float cutoffDistance, const in float decayExponent ) {\n#if defined ( PHYSICALLY_CORRECT_LIGHTS )\n\tfloat distanceFalloff = 1.0 / max( pow( lightDistance, decayExponent ), 0.01 );\n\tif( cutoffDistance > 0.0 ) {\n\t\tdistanceFalloff *= pow2( saturate( 1.0 - pow4( lightDistance / cutoffDistance ) ) );\n\t}\n\treturn distanceFalloff;\n#else\n\tif( cutoffDistance > 0.0 && decayExponent > 0.0 ) {\n\t\treturn pow( saturate( -lightDistance / cutoffDistance + 1.0 ), decayExponent );\n\t}\n\treturn 1.0;\n#endif\n}\nvec3 BRDF_Diffuse_Lambert( const in vec3 diffuseColor ) {\n\treturn RECIPROCAL_PI * diffuseColor;\n}\nvec3 F_Schlick( const in vec3 specularColor, const in float dotLH ) {\n\tfloat fresnel = exp2( ( -5.55473 * dotLH - 6.98316 ) * dotLH );\n\treturn ( 1.0 - specularColor ) * fresnel + specularColor;\n}\nvec3 F_Schlick_RoughnessDependent( const in vec3 F0, const in float dotNV, const in float roughness ) {\n\tfloat fresnel = exp2( ( -5.55473 * dotNV - 6.98316 ) * dotNV );\n\tvec3 Fr = max( vec3( 1.0 - roughness ), F0 ) - F0;\n\treturn Fr * fresnel + F0;\n}\nfloat G_GGX_Smith( const in float alpha, const in float dotNL, const in float dotNV ) {\n\tfloat a2 = pow2( alpha );\n\tfloat gl = dotNL + sqrt( a2 + ( 1.0 - a2 ) * pow2( dotNL ) );\n\tfloat gv = dotNV + sqrt( a2 + ( 1.0 - a2 ) * pow2( dotNV ) );\n\treturn 1.0 / ( gl * gv );\n}\nfloat G_GGX_SmithCorrelated( const in float alpha, const in float dotNL, const in float dotNV ) {\n\tfloat a2 = pow2( alpha );\n\tfloat gv = dotNL * sqrt( a2 + ( 1.0 - a2 ) * pow2( dotNV ) );\n\tfloat gl = dotNV * sqrt( a2 + ( 1.0 - a2 ) * pow2( dotNL ) );\n\treturn 0.5 / max( gv + gl, EPSILON );\n}\nfloat D_GGX( const in float alpha, const in float dotNH ) {\n\tfloat a2 = pow2( alpha );\n\tfloat denom = pow2( dotNH ) * ( a2 - 1.0 ) + 1.0;\n\treturn RECIPROCAL_PI * a2 / pow2( denom );\n}\nvec3 BRDF_Specular_GGX( const in IncidentLight incidentLight, const in vec3 viewDir, const in vec3 normal, const in vec3 specularColor, const in float roughness ) {\n\tfloat alpha = pow2( roughness );\n\tvec3 halfDir = normalize( incidentLight.direction + viewDir );\n\tfloat dotNL = saturate( dot( normal, incidentLight.direction ) );\n\tfloat dotNV = saturate( dot( normal, viewDir ) );\n\tfloat dotNH = saturate( dot( normal, halfDir ) );\n\tfloat dotLH = saturate( dot( incidentLight.direction, halfDir ) );\n\tvec3 F = F_Schlick( specularColor, dotLH );\n\tfloat G = G_GGX_SmithCorrelated( alpha, dotNL, dotNV );\n\tfloat D = D_GGX( alpha, dotNH );\n\treturn F * ( G * D );\n}\nvec2 LTC_Uv( const in vec3 N, const in vec3 V, const in float roughness ) {\n\tconst float LUT_SIZE = 64.0;\n\tconst float LUT_SCALE = ( LUT_SIZE - 1.0 ) / LUT_SIZE;\n\tconst float LUT_BIAS = 0.5 / LUT_SIZE;\n\tfloat dotNV = saturate( dot( N, V ) );\n\tvec2 uv = vec2( roughness, sqrt( 1.0 - dotNV ) );\n\tuv = uv * LUT_SCALE + LUT_BIAS;\n\treturn uv;\n}\nfloat LTC_ClippedSphereFormFactor( const in vec3 f ) {\n\tfloat l = length( f );\n\treturn max( ( l * l + f.z ) / ( l + 1.0 ), 0.0 );\n}\nvec3 LTC_EdgeVectorFormFactor( const in vec3 v1, const in vec3 v2 ) {\n\tfloat x = dot( v1, v2 );\n\tfloat y = abs( x );\n\tfloat a = 0.8543985 + ( 0.4965155 + 0.0145206 * y ) * y;\n\tfloat b = 3.4175940 + ( 4.1616724 + y ) * y;\n\tfloat v = a / b;\n\tfloat theta_sintheta = ( x > 0.0 ) ? v : 0.5 * inversesqrt( max( 1.0 - x * x, 1e-7 ) ) - v;\n\treturn cross( v1, v2 ) * theta_sintheta;\n}\nvec3 LTC_Evaluate( const in vec3 N, const in vec3 V, const in vec3 P, const in mat3 mInv, const in vec3 rectCoords[ 4 ] ) {\n\tvec3 v1 = rectCoords[ 1 ] - rectCoords[ 0 ];\n\tvec3 v2 = rectCoords[ 3 ] - rectCoords[ 0 ];\n\tvec3 lightNormal = cross( v1, v2 );\n\tif( dot( lightNormal, P - rectCoords[ 0 ] ) < 0.0 ) return vec3( 0.0 );\n\tvec3 T1, T2;\n\tT1 = normalize( V - N * dot( V, N ) );\n\tT2 = - cross( N, T1 );\n\tmat3 mat = mInv * transposeMat3( mat3( T1, T2, N ) );\n\tvec3 coords[ 4 ];\n\tcoords[ 0 ] = mat * ( rectCoords[ 0 ] - P );\n\tcoords[ 1 ] = mat * ( rectCoords[ 1 ] - P );\n\tcoords[ 2 ] = mat * ( rectCoords[ 2 ] - P );\n\tcoords[ 3 ] = mat * ( rectCoords[ 3 ] - P );\n\tcoords[ 0 ] = normalize( coords[ 0 ] );\n\tcoords[ 1 ] = normalize( coords[ 1 ] );\n\tcoords[ 2 ] = normalize( coords[ 2 ] );\n\tcoords[ 3 ] = normalize( coords[ 3 ] );\n\tvec3 vectorFormFactor = vec3( 0.0 );\n\tvectorFormFactor += LTC_EdgeVectorFormFactor( coords[ 0 ], coords[ 1 ] );\n\tvectorFormFactor += LTC_EdgeVectorFormFactor( coords[ 1 ], coords[ 2 ] );\n\tvectorFormFactor += LTC_EdgeVectorFormFactor( coords[ 2 ], coords[ 3 ] );\n\tvectorFormFactor += LTC_EdgeVectorFormFactor( coords[ 3 ], coords[ 0 ] );\n\tfloat result = LTC_ClippedSphereFormFactor( vectorFormFactor );\n\treturn vec3( result );\n}\nvec3 BRDF_Specular_GGX_Environment( const in vec3 viewDir, const in vec3 normal, const in vec3 specularColor, const in float roughness ) {\n\tfloat dotNV = saturate( dot( normal, viewDir ) );\n\tvec2 brdf = integrateSpecularBRDF( dotNV, roughness );\n\treturn specularColor * brdf.x + brdf.y;\n}\nvoid BRDF_Specular_Multiscattering_Environment( const in GeometricContext geometry, const in vec3 specularColor, const in float roughness, inout vec3 singleScatter, inout vec3 multiScatter ) {\n\tfloat dotNV = saturate( dot( geometry.normal, geometry.viewDir ) );\n\tvec3 F = F_Schlick_RoughnessDependent( specularColor, dotNV, roughness );\n\tvec2 brdf = integrateSpecularBRDF( dotNV, roughness );\n\tvec3 FssEss = F * brdf.x + brdf.y;\n\tfloat Ess = brdf.x + brdf.y;\n\tfloat Ems = 1.0 - Ess;\n\tvec3 Favg = specularColor + ( 1.0 - specularColor ) * 0.047619;\tvec3 Fms = FssEss * Favg / ( 1.0 - Ems * Favg );\n\tsingleScatter += FssEss;\n\tmultiScatter += Fms * Ems;\n}\nfloat G_BlinnPhong_Implicit( ) {\n\treturn 0.25;\n}\nfloat D_BlinnPhong( const in float shininess, const in float dotNH ) {\n\treturn RECIPROCAL_PI * ( shininess * 0.5 + 1.0 ) * pow( dotNH, shininess );\n}\nvec3 BRDF_Specular_BlinnPhong( const in IncidentLight incidentLight, const in GeometricContext geometry, const in vec3 specularColor, const in float shininess ) {\n\tvec3 halfDir = normalize( incidentLight.direction + geometry.viewDir );\n\tfloat dotNH = saturate( dot( geometry.normal, halfDir ) );\n\tfloat dotLH = saturate( dot( incidentLight.direction, halfDir ) );\n\tvec3 F = F_Schlick( specularColor, dotLH );\n\tfloat G = G_BlinnPhong_Implicit( );\n\tfloat D = D_BlinnPhong( shininess, dotNH );\n\treturn F * ( G * D );\n}\nfloat GGXRoughnessToBlinnExponent( const in float ggxRoughness ) {\n\treturn ( 2.0 / pow2( ggxRoughness + 0.0001 ) - 2.0 );\n}\nfloat BlinnExponentToGGXRoughness( const in float blinnExponent ) {\n\treturn sqrt( 2.0 / ( blinnExponent + 2.0 ) );\n}\n#if defined( USE_SHEEN )\nfloat D_Charlie(float roughness, float NoH) {\n\tfloat invAlpha = 1.0 / roughness;\n\tfloat cos2h = NoH * NoH;\n\tfloat sin2h = max(1.0 - cos2h, 0.0078125);\treturn (2.0 + invAlpha) * pow(sin2h, invAlpha * 0.5) / (2.0 * PI);\n}\nfloat V_Neubelt(float NoV, float NoL) {\n\treturn saturate(1.0 / (4.0 * (NoL + NoV - NoL * NoV)));\n}\nvec3 BRDF_Specular_Sheen( const in float roughness, const in vec3 L, const in GeometricContext geometry, vec3 specularColor ) {\n\tvec3 N = geometry.normal;\n\tvec3 V = geometry.viewDir;\n\tvec3 H = normalize( V + L );\n\tfloat dotNH = saturate( dot( N, H ) );\n\treturn specularColor * D_Charlie( roughness, dotNH ) * V_Neubelt( dot(N, V), dot(N, L) );\n}\n#endif", +bumpmap_pars_fragment:"#ifdef USE_BUMPMAP\n\tuniform sampler2D bumpMap;\n\tuniform float bumpScale;\n\tvec2 dHdxy_fwd() {\n\t\tvec2 dSTdx = dFdx( vUv );\n\t\tvec2 dSTdy = dFdy( vUv );\n\t\tfloat Hll = bumpScale * texture2D( bumpMap, vUv ).x;\n\t\tfloat dBx = bumpScale * texture2D( bumpMap, vUv + dSTdx ).x - Hll;\n\t\tfloat dBy = bumpScale * texture2D( bumpMap, vUv + dSTdy ).x - Hll;\n\t\treturn vec2( dBx, dBy );\n\t}\n\tvec3 perturbNormalArb( vec3 surf_pos, vec3 surf_norm, vec2 dHdxy ) {\n\t\tvec3 vSigmaX = vec3( dFdx( surf_pos.x ), dFdx( surf_pos.y ), dFdx( surf_pos.z ) );\n\t\tvec3 vSigmaY = vec3( dFdy( surf_pos.x ), dFdy( surf_pos.y ), dFdy( surf_pos.z ) );\n\t\tvec3 vN = surf_norm;\n\t\tvec3 R1 = cross( vSigmaY, vN );\n\t\tvec3 R2 = cross( vN, vSigmaX );\n\t\tfloat fDet = dot( vSigmaX, R1 );\n\t\tfDet *= ( float( gl_FrontFacing ) * 2.0 - 1.0 );\n\t\tvec3 vGrad = sign( fDet ) * ( dHdxy.x * R1 + dHdxy.y * R2 );\n\t\treturn normalize( abs( fDet ) * surf_norm - vGrad );\n\t}\n#endif", +clipping_planes_fragment:"#if NUM_CLIPPING_PLANES > 0\n\tvec4 plane;\n\t#pragma unroll_loop_start\n\tfor ( int i = 0; i < UNION_CLIPPING_PLANES; i ++ ) {\n\t\tplane = clippingPlanes[ i ];\n\t\tif ( dot( vClipPosition, plane.xyz ) > plane.w ) discard;\n\t}\n\t#pragma unroll_loop_end\n\t#if UNION_CLIPPING_PLANES < NUM_CLIPPING_PLANES\n\t\tbool clipped = true;\n\t\t#pragma unroll_loop_start\n\t\tfor ( int i = UNION_CLIPPING_PLANES; i < NUM_CLIPPING_PLANES; i ++ ) {\n\t\t\tplane = clippingPlanes[ i ];\n\t\t\tclipped = ( dot( vClipPosition, plane.xyz ) > plane.w ) && clipped;\n\t\t}\n\t\t#pragma unroll_loop_end\n\t\tif ( clipped ) discard;\n\t#endif\n#endif", +clipping_planes_pars_fragment:"#if NUM_CLIPPING_PLANES > 0\n\tvarying vec3 vClipPosition;\n\tuniform vec4 clippingPlanes[ NUM_CLIPPING_PLANES ];\n#endif",clipping_planes_pars_vertex:"#if NUM_CLIPPING_PLANES > 0\n\tvarying vec3 vClipPosition;\n#endif",clipping_planes_vertex:"#if NUM_CLIPPING_PLANES > 0\n\tvClipPosition = - mvPosition.xyz;\n#endif",color_fragment:"#ifdef USE_COLOR\n\tdiffuseColor.rgb *= vColor;\n#endif",color_pars_fragment:"#ifdef USE_COLOR\n\tvarying vec3 vColor;\n#endif",color_pars_vertex:"#ifdef USE_COLOR\n\tvarying vec3 vColor;\n#endif", +color_vertex:"#ifdef USE_COLOR\n\tvColor.xyz = color.xyz;\n#endif",common:"#define PI 3.141592653589793\n#define PI2 6.283185307179586\n#define PI_HALF 1.5707963267948966\n#define RECIPROCAL_PI 0.3183098861837907\n#define RECIPROCAL_PI2 0.15915494309189535\n#define EPSILON 1e-6\n#ifndef saturate\n#define saturate(a) clamp( a, 0.0, 1.0 )\n#endif\n#define whiteComplement(a) ( 1.0 - saturate( a ) )\nfloat pow2( const in float x ) { return x*x; }\nfloat pow3( const in float x ) { return x*x*x; }\nfloat pow4( const in float x ) { float x2 = x*x; return x2*x2; }\nfloat average( const in vec3 color ) { return dot( color, vec3( 0.3333 ) ); }\nhighp float rand( const in vec2 uv ) {\n\tconst highp float a = 12.9898, b = 78.233, c = 43758.5453;\n\thighp float dt = dot( uv.xy, vec2( a,b ) ), sn = mod( dt, PI );\n\treturn fract(sin(sn) * c);\n}\n#ifdef HIGH_PRECISION\n\tfloat precisionSafeLength( vec3 v ) { return length( v ); }\n#else\n\tfloat max3( vec3 v ) { return max( max( v.x, v.y ), v.z ); }\n\tfloat precisionSafeLength( vec3 v ) {\n\t\tfloat maxComponent = max3( abs( v ) );\n\t\treturn length( v / maxComponent ) * maxComponent;\n\t}\n#endif\nstruct IncidentLight {\n\tvec3 color;\n\tvec3 direction;\n\tbool visible;\n};\nstruct ReflectedLight {\n\tvec3 directDiffuse;\n\tvec3 directSpecular;\n\tvec3 indirectDiffuse;\n\tvec3 indirectSpecular;\n};\nstruct GeometricContext {\n\tvec3 position;\n\tvec3 normal;\n\tvec3 viewDir;\n#ifdef CLEARCOAT\n\tvec3 clearcoatNormal;\n#endif\n};\nvec3 transformDirection( in vec3 dir, in mat4 matrix ) {\n\treturn normalize( ( matrix * vec4( dir, 0.0 ) ).xyz );\n}\nvec3 inverseTransformDirection( in vec3 dir, in mat4 matrix ) {\n\treturn normalize( ( vec4( dir, 0.0 ) * matrix ).xyz );\n}\nvec3 projectOnPlane(in vec3 point, in vec3 pointOnPlane, in vec3 planeNormal ) {\n\tfloat distance = dot( planeNormal, point - pointOnPlane );\n\treturn - distance * planeNormal + point;\n}\nfloat sideOfPlane( in vec3 point, in vec3 pointOnPlane, in vec3 planeNormal ) {\n\treturn sign( dot( point - pointOnPlane, planeNormal ) );\n}\nvec3 linePlaneIntersect( in vec3 pointOnLine, in vec3 lineDirection, in vec3 pointOnPlane, in vec3 planeNormal ) {\n\treturn lineDirection * ( dot( planeNormal, pointOnPlane - pointOnLine ) / dot( planeNormal, lineDirection ) ) + pointOnLine;\n}\nmat3 transposeMat3( const in mat3 m ) {\n\tmat3 tmp;\n\ttmp[ 0 ] = vec3( m[ 0 ].x, m[ 1 ].x, m[ 2 ].x );\n\ttmp[ 1 ] = vec3( m[ 0 ].y, m[ 1 ].y, m[ 2 ].y );\n\ttmp[ 2 ] = vec3( m[ 0 ].z, m[ 1 ].z, m[ 2 ].z );\n\treturn tmp;\n}\nfloat linearToRelativeLuminance( const in vec3 color ) {\n\tvec3 weights = vec3( 0.2126, 0.7152, 0.0722 );\n\treturn dot( weights, color.rgb );\n}\nbool isPerspectiveMatrix( mat4 m ) {\n\treturn m[ 2 ][ 3 ] == - 1.0;\n}\nvec2 equirectUv( in vec3 dir ) {\n\tfloat u = atan( dir.z, dir.x ) * RECIPROCAL_PI2 + 0.5;\n\tfloat v = asin( clamp( dir.y, - 1.0, 1.0 ) ) * RECIPROCAL_PI + 0.5;\n\treturn vec2( u, v );\n}", +cube_uv_reflection_fragment:"#ifdef ENVMAP_TYPE_CUBE_UV\n#define cubeUV_maxMipLevel 8.0\n#define cubeUV_minMipLevel 4.0\n#define cubeUV_maxTileSize 256.0\n#define cubeUV_minTileSize 16.0\nfloat getFace(vec3 direction) {\n vec3 absDirection = abs(direction);\n float face = -1.0;\n if (absDirection.x > absDirection.z) {\n if (absDirection.x > absDirection.y)\n face = direction.x > 0.0 ? 0.0 : 3.0;\n else\n face = direction.y > 0.0 ? 1.0 : 4.0;\n } else {\n if (absDirection.z > absDirection.y)\n face = direction.z > 0.0 ? 2.0 : 5.0;\n else\n face = direction.y > 0.0 ? 1.0 : 4.0;\n }\n return face;\n}\nvec2 getUV(vec3 direction, float face) {\n vec2 uv;\n if (face == 0.0) {\n uv = vec2(direction.z, direction.y) / abs(direction.x); } else if (face == 1.0) {\n uv = vec2(-direction.x, -direction.z) / abs(direction.y); } else if (face == 2.0) {\n uv = vec2(-direction.x, direction.y) / abs(direction.z); } else if (face == 3.0) {\n uv = vec2(-direction.z, direction.y) / abs(direction.x); } else if (face == 4.0) {\n uv = vec2(-direction.x, direction.z) / abs(direction.y); } else {\n uv = vec2(direction.x, direction.y) / abs(direction.z); }\n return 0.5 * (uv + 1.0);\n}\nvec3 bilinearCubeUV(sampler2D envMap, vec3 direction, float mipInt) {\n float face = getFace(direction);\n float filterInt = max(cubeUV_minMipLevel - mipInt, 0.0);\n mipInt = max(mipInt, cubeUV_minMipLevel);\n float faceSize = exp2(mipInt);\n float texelSize = 1.0 / (3.0 * cubeUV_maxTileSize);\n vec2 uv = getUV(direction, face) * (faceSize - 1.0);\n vec2 f = fract(uv);\n uv += 0.5 - f;\n if (face > 2.0) {\n uv.y += faceSize;\n face -= 3.0;\n }\n uv.x += face * faceSize;\n if(mipInt < cubeUV_maxMipLevel){\n uv.y += 2.0 * cubeUV_maxTileSize;\n }\n uv.y += filterInt * 2.0 * cubeUV_minTileSize;\n uv.x += 3.0 * max(0.0, cubeUV_maxTileSize - 2.0 * faceSize);\n uv *= texelSize;\n vec3 tl = envMapTexelToLinear(texture2D(envMap, uv)).rgb;\n uv.x += texelSize;\n vec3 tr = envMapTexelToLinear(texture2D(envMap, uv)).rgb;\n uv.y += texelSize;\n vec3 br = envMapTexelToLinear(texture2D(envMap, uv)).rgb;\n uv.x -= texelSize;\n vec3 bl = envMapTexelToLinear(texture2D(envMap, uv)).rgb;\n vec3 tm = mix(tl, tr, f.x);\n vec3 bm = mix(bl, br, f.x);\n return mix(tm, bm, f.y);\n}\n#define r0 1.0\n#define v0 0.339\n#define m0 -2.0\n#define r1 0.8\n#define v1 0.276\n#define m1 -1.0\n#define r4 0.4\n#define v4 0.046\n#define m4 2.0\n#define r5 0.305\n#define v5 0.016\n#define m5 3.0\n#define r6 0.21\n#define v6 0.0038\n#define m6 4.0\nfloat roughnessToMip(float roughness) {\n float mip = 0.0;\n if (roughness >= r1) {\n mip = (r0 - roughness) * (m1 - m0) / (r0 - r1) + m0;\n } else if (roughness >= r4) {\n mip = (r1 - roughness) * (m4 - m1) / (r1 - r4) + m1;\n } else if (roughness >= r5) {\n mip = (r4 - roughness) * (m5 - m4) / (r4 - r5) + m4;\n } else if (roughness >= r6) {\n mip = (r5 - roughness) * (m6 - m5) / (r5 - r6) + m5;\n } else {\n mip = -2.0 * log2(1.16 * roughness); }\n return mip;\n}\nvec4 textureCubeUV(sampler2D envMap, vec3 sampleDir, float roughness) {\n float mip = clamp(roughnessToMip(roughness), m0, cubeUV_maxMipLevel);\n float mipF = fract(mip);\n float mipInt = floor(mip);\n vec3 color0 = bilinearCubeUV(envMap, sampleDir, mipInt);\n if (mipF == 0.0) {\n return vec4(color0, 1.0);\n } else {\n vec3 color1 = bilinearCubeUV(envMap, sampleDir, mipInt + 1.0);\n return vec4(mix(color0, color1, mipF), 1.0);\n }\n}\n#endif", +defaultnormal_vertex:"vec3 transformedNormal = objectNormal;\n#ifdef USE_INSTANCING\n\tmat3 m = mat3( instanceMatrix );\n\ttransformedNormal /= vec3( dot( m[ 0 ], m[ 0 ] ), dot( m[ 1 ], m[ 1 ] ), dot( m[ 2 ], m[ 2 ] ) );\n\ttransformedNormal = m * transformedNormal;\n#endif\ntransformedNormal = normalMatrix * transformedNormal;\n#ifdef FLIP_SIDED\n\ttransformedNormal = - transformedNormal;\n#endif\n#ifdef USE_TANGENT\n\tvec3 transformedTangent = ( modelViewMatrix * vec4( objectTangent, 0.0 ) ).xyz;\n\t#ifdef FLIP_SIDED\n\t\ttransformedTangent = - transformedTangent;\n\t#endif\n#endif", +displacementmap_pars_vertex:"#ifdef USE_DISPLACEMENTMAP\n\tuniform sampler2D displacementMap;\n\tuniform float displacementScale;\n\tuniform float displacementBias;\n#endif",displacementmap_vertex:"#ifdef USE_DISPLACEMENTMAP\n\ttransformed += normalize( objectNormal ) * ( texture2D( displacementMap, vUv ).x * displacementScale + displacementBias );\n#endif",emissivemap_fragment:"#ifdef USE_EMISSIVEMAP\n\tvec4 emissiveColor = texture2D( emissiveMap, vUv );\n\temissiveColor.rgb = emissiveMapTexelToLinear( emissiveColor ).rgb;\n\ttotalEmissiveRadiance *= emissiveColor.rgb;\n#endif", +emissivemap_pars_fragment:"#ifdef USE_EMISSIVEMAP\n\tuniform sampler2D emissiveMap;\n#endif",encodings_fragment:"gl_FragColor = linearToOutputTexel( gl_FragColor );",encodings_pars_fragment:"\nvec4 LinearToLinear( in vec4 value ) {\n\treturn value;\n}\nvec4 GammaToLinear( in vec4 value, in float gammaFactor ) {\n\treturn vec4( pow( value.rgb, vec3( gammaFactor ) ), value.a );\n}\nvec4 LinearToGamma( in vec4 value, in float gammaFactor ) {\n\treturn vec4( pow( value.rgb, vec3( 1.0 / gammaFactor ) ), value.a );\n}\nvec4 sRGBToLinear( in vec4 value ) {\n\treturn vec4( mix( pow( value.rgb * 0.9478672986 + vec3( 0.0521327014 ), vec3( 2.4 ) ), value.rgb * 0.0773993808, vec3( lessThanEqual( value.rgb, vec3( 0.04045 ) ) ) ), value.a );\n}\nvec4 LinearTosRGB( in vec4 value ) {\n\treturn vec4( mix( pow( value.rgb, vec3( 0.41666 ) ) * 1.055 - vec3( 0.055 ), value.rgb * 12.92, vec3( lessThanEqual( value.rgb, vec3( 0.0031308 ) ) ) ), value.a );\n}\nvec4 RGBEToLinear( in vec4 value ) {\n\treturn vec4( value.rgb * exp2( value.a * 255.0 - 128.0 ), 1.0 );\n}\nvec4 LinearToRGBE( in vec4 value ) {\n\tfloat maxComponent = max( max( value.r, value.g ), value.b );\n\tfloat fExp = clamp( ceil( log2( maxComponent ) ), -128.0, 127.0 );\n\treturn vec4( value.rgb / exp2( fExp ), ( fExp + 128.0 ) / 255.0 );\n}\nvec4 RGBMToLinear( in vec4 value, in float maxRange ) {\n\treturn vec4( value.rgb * value.a * maxRange, 1.0 );\n}\nvec4 LinearToRGBM( in vec4 value, in float maxRange ) {\n\tfloat maxRGB = max( value.r, max( value.g, value.b ) );\n\tfloat M = clamp( maxRGB / maxRange, 0.0, 1.0 );\n\tM = ceil( M * 255.0 ) / 255.0;\n\treturn vec4( value.rgb / ( M * maxRange ), M );\n}\nvec4 RGBDToLinear( in vec4 value, in float maxRange ) {\n\treturn vec4( value.rgb * ( ( maxRange / 255.0 ) / value.a ), 1.0 );\n}\nvec4 LinearToRGBD( in vec4 value, in float maxRange ) {\n\tfloat maxRGB = max( value.r, max( value.g, value.b ) );\n\tfloat D = max( maxRange / maxRGB, 1.0 );\n\tD = clamp( floor( D ) / 255.0, 0.0, 1.0 );\n\treturn vec4( value.rgb * ( D * ( 255.0 / maxRange ) ), D );\n}\nconst mat3 cLogLuvM = mat3( 0.2209, 0.3390, 0.4184, 0.1138, 0.6780, 0.7319, 0.0102, 0.1130, 0.2969 );\nvec4 LinearToLogLuv( in vec4 value ) {\n\tvec3 Xp_Y_XYZp = cLogLuvM * value.rgb;\n\tXp_Y_XYZp = max( Xp_Y_XYZp, vec3( 1e-6, 1e-6, 1e-6 ) );\n\tvec4 vResult;\n\tvResult.xy = Xp_Y_XYZp.xy / Xp_Y_XYZp.z;\n\tfloat Le = 2.0 * log2(Xp_Y_XYZp.y) + 127.0;\n\tvResult.w = fract( Le );\n\tvResult.z = ( Le - ( floor( vResult.w * 255.0 ) ) / 255.0 ) / 255.0;\n\treturn vResult;\n}\nconst mat3 cLogLuvInverseM = mat3( 6.0014, -2.7008, -1.7996, -1.3320, 3.1029, -5.7721, 0.3008, -1.0882, 5.6268 );\nvec4 LogLuvToLinear( in vec4 value ) {\n\tfloat Le = value.z * 255.0 + value.w;\n\tvec3 Xp_Y_XYZp;\n\tXp_Y_XYZp.y = exp2( ( Le - 127.0 ) / 2.0 );\n\tXp_Y_XYZp.z = Xp_Y_XYZp.y / value.y;\n\tXp_Y_XYZp.x = value.x * Xp_Y_XYZp.z;\n\tvec3 vRGB = cLogLuvInverseM * Xp_Y_XYZp.rgb;\n\treturn vec4( max( vRGB, 0.0 ), 1.0 );\n}", +envmap_fragment:"#ifdef USE_ENVMAP\n\t#ifdef ENV_WORLDPOS\n\t\tvec3 cameraToFrag;\n\t\t\n\t\tif ( isOrthographic ) {\n\t\t\tcameraToFrag = normalize( vec3( - viewMatrix[ 0 ][ 2 ], - viewMatrix[ 1 ][ 2 ], - viewMatrix[ 2 ][ 2 ] ) );\n\t\t} else {\n\t\t\tcameraToFrag = normalize( vWorldPosition - cameraPosition );\n\t\t}\n\t\tvec3 worldNormal = inverseTransformDirection( normal, viewMatrix );\n\t\t#ifdef ENVMAP_MODE_REFLECTION\n\t\t\tvec3 reflectVec = reflect( cameraToFrag, worldNormal );\n\t\t#else\n\t\t\tvec3 reflectVec = refract( cameraToFrag, worldNormal, refractionRatio );\n\t\t#endif\n\t#else\n\t\tvec3 reflectVec = vReflect;\n\t#endif\n\t#ifdef ENVMAP_TYPE_CUBE\n\t\tvec4 envColor = textureCube( envMap, vec3( flipEnvMap * reflectVec.x, reflectVec.yz ) );\n\t#elif defined( ENVMAP_TYPE_CUBE_UV )\n\t\tvec4 envColor = textureCubeUV( envMap, reflectVec, 0.0 );\n\t#elif defined( ENVMAP_TYPE_EQUIREC )\n\t\treflectVec = normalize( reflectVec );\n\t\tvec2 sampleUV = equirectUv( reflectVec );\n\t\tvec4 envColor = texture2D( envMap, sampleUV );\n\t#else\n\t\tvec4 envColor = vec4( 0.0 );\n\t#endif\n\t#ifndef ENVMAP_TYPE_CUBE_UV\n\t\tenvColor = envMapTexelToLinear( envColor );\n\t#endif\n\t#ifdef ENVMAP_BLENDING_MULTIPLY\n\t\toutgoingLight = mix( outgoingLight, outgoingLight * envColor.xyz, specularStrength * reflectivity );\n\t#elif defined( ENVMAP_BLENDING_MIX )\n\t\toutgoingLight = mix( outgoingLight, envColor.xyz, specularStrength * reflectivity );\n\t#elif defined( ENVMAP_BLENDING_ADD )\n\t\toutgoingLight += envColor.xyz * specularStrength * reflectivity;\n\t#endif\n#endif", +envmap_common_pars_fragment:"#ifdef USE_ENVMAP\n\tuniform float envMapIntensity;\n\tuniform float flipEnvMap;\n\tuniform int maxMipLevel;\n\t#ifdef ENVMAP_TYPE_CUBE\n\t\tuniform samplerCube envMap;\n\t#else\n\t\tuniform sampler2D envMap;\n\t#endif\n\t\n#endif",envmap_pars_fragment:"#ifdef USE_ENVMAP\n\tuniform float reflectivity;\n\t#if defined( USE_BUMPMAP ) || defined( USE_NORMALMAP ) || defined( PHONG )\n\t\t#define ENV_WORLDPOS\n\t#endif\n\t#ifdef ENV_WORLDPOS\n\t\tvarying vec3 vWorldPosition;\n\t\tuniform float refractionRatio;\n\t#else\n\t\tvarying vec3 vReflect;\n\t#endif\n#endif", +envmap_pars_vertex:"#ifdef USE_ENVMAP\n\t#if defined( USE_BUMPMAP ) || defined( USE_NORMALMAP ) ||defined( PHONG )\n\t\t#define ENV_WORLDPOS\n\t#endif\n\t#ifdef ENV_WORLDPOS\n\t\t\n\t\tvarying vec3 vWorldPosition;\n\t#else\n\t\tvarying vec3 vReflect;\n\t\tuniform float refractionRatio;\n\t#endif\n#endif",envmap_physical_pars_fragment:"#if defined( USE_ENVMAP )\n\t#ifdef ENVMAP_MODE_REFRACTION\n\t\tuniform float refractionRatio;\n\t#endif\n\tvec3 getLightProbeIndirectIrradiance( const in GeometricContext geometry, const in int maxMIPLevel ) {\n\t\tvec3 worldNormal = inverseTransformDirection( geometry.normal, viewMatrix );\n\t\t#ifdef ENVMAP_TYPE_CUBE\n\t\t\tvec3 queryVec = vec3( flipEnvMap * worldNormal.x, worldNormal.yz );\n\t\t\t#ifdef TEXTURE_LOD_EXT\n\t\t\t\tvec4 envMapColor = textureCubeLodEXT( envMap, queryVec, float( maxMIPLevel ) );\n\t\t\t#else\n\t\t\t\tvec4 envMapColor = textureCube( envMap, queryVec, float( maxMIPLevel ) );\n\t\t\t#endif\n\t\t\tenvMapColor.rgb = envMapTexelToLinear( envMapColor ).rgb;\n\t\t#elif defined( ENVMAP_TYPE_CUBE_UV )\n\t\t\tvec4 envMapColor = textureCubeUV( envMap, worldNormal, 1.0 );\n\t\t#else\n\t\t\tvec4 envMapColor = vec4( 0.0 );\n\t\t#endif\n\t\treturn PI * envMapColor.rgb * envMapIntensity;\n\t}\n\tfloat getSpecularMIPLevel( const in float roughness, const in int maxMIPLevel ) {\n\t\tfloat maxMIPLevelScalar = float( maxMIPLevel );\n\t\tfloat sigma = PI * roughness * roughness / ( 1.0 + roughness );\n\t\tfloat desiredMIPLevel = maxMIPLevelScalar + log2( sigma );\n\t\treturn clamp( desiredMIPLevel, 0.0, maxMIPLevelScalar );\n\t}\n\tvec3 getLightProbeIndirectRadiance( const in vec3 viewDir, const in vec3 normal, const in float roughness, const in int maxMIPLevel ) {\n\t\t#ifdef ENVMAP_MODE_REFLECTION\n\t\t vec3 reflectVec = reflect( -viewDir, normal );\n\t\t reflectVec = normalize( mix( reflectVec, normal, roughness * roughness) );\n\t\t#else\n\t\t vec3 reflectVec = refract( -viewDir, normal, refractionRatio );\n\t\t#endif\n\t\treflectVec = inverseTransformDirection( reflectVec, viewMatrix );\n\t\tfloat specularMIPLevel = getSpecularMIPLevel( roughness, maxMIPLevel );\n\t\t#ifdef ENVMAP_TYPE_CUBE\n\t\t\tvec3 queryReflectVec = vec3( flipEnvMap * reflectVec.x, reflectVec.yz );\n\t\t\t#ifdef TEXTURE_LOD_EXT\n\t\t\t\tvec4 envMapColor = textureCubeLodEXT( envMap, queryReflectVec, specularMIPLevel );\n\t\t\t#else\n\t\t\t\tvec4 envMapColor = textureCube( envMap, queryReflectVec, specularMIPLevel );\n\t\t\t#endif\n\t\t\tenvMapColor.rgb = envMapTexelToLinear( envMapColor ).rgb;\n\t\t#elif defined( ENVMAP_TYPE_CUBE_UV )\n\t\t\tvec4 envMapColor = textureCubeUV( envMap, reflectVec, roughness );\n\t\t#elif defined( ENVMAP_TYPE_EQUIREC )\n\t\t\tvec2 sampleUV = equirectUv( reflectVec );\n\t\t\t#ifdef TEXTURE_LOD_EXT\n\t\t\t\tvec4 envMapColor = texture2DLodEXT( envMap, sampleUV, specularMIPLevel );\n\t\t\t#else\n\t\t\t\tvec4 envMapColor = texture2D( envMap, sampleUV, specularMIPLevel );\n\t\t\t#endif\n\t\t\tenvMapColor.rgb = envMapTexelToLinear( envMapColor ).rgb;\n\t\t#endif\n\t\treturn envMapColor.rgb * envMapIntensity;\n\t}\n#endif", +envmap_vertex:"#ifdef USE_ENVMAP\n\t#ifdef ENV_WORLDPOS\n\t\tvWorldPosition = worldPosition.xyz;\n\t#else\n\t\tvec3 cameraToVertex;\n\t\tif ( isOrthographic ) {\n\t\t\tcameraToVertex = normalize( vec3( - viewMatrix[ 0 ][ 2 ], - viewMatrix[ 1 ][ 2 ], - viewMatrix[ 2 ][ 2 ] ) );\n\t\t} else {\n\t\t\tcameraToVertex = normalize( worldPosition.xyz - cameraPosition );\n\t\t}\n\t\tvec3 worldNormal = inverseTransformDirection( transformedNormal, viewMatrix );\n\t\t#ifdef ENVMAP_MODE_REFLECTION\n\t\t\tvReflect = reflect( cameraToVertex, worldNormal );\n\t\t#else\n\t\t\tvReflect = refract( cameraToVertex, worldNormal, refractionRatio );\n\t\t#endif\n\t#endif\n#endif", +fog_vertex:"#ifdef USE_FOG\n\tfogDepth = - mvPosition.z;\n#endif",fog_pars_vertex:"#ifdef USE_FOG\n\tvarying float fogDepth;\n#endif",fog_fragment:"#ifdef USE_FOG\n\t#ifdef FOG_EXP2\n\t\tfloat fogFactor = 1.0 - exp( - fogDensity * fogDensity * fogDepth * fogDepth );\n\t#else\n\t\tfloat fogFactor = smoothstep( fogNear, fogFar, fogDepth );\n\t#endif\n\tgl_FragColor.rgb = mix( gl_FragColor.rgb, fogColor, fogFactor );\n#endif",fog_pars_fragment:"#ifdef USE_FOG\n\tuniform vec3 fogColor;\n\tvarying float fogDepth;\n\t#ifdef FOG_EXP2\n\t\tuniform float fogDensity;\n\t#else\n\t\tuniform float fogNear;\n\t\tuniform float fogFar;\n\t#endif\n#endif", +gradientmap_pars_fragment:"#ifdef USE_GRADIENTMAP\n\tuniform sampler2D gradientMap;\n#endif\nvec3 getGradientIrradiance( vec3 normal, vec3 lightDirection ) {\n\tfloat dotNL = dot( normal, lightDirection );\n\tvec2 coord = vec2( dotNL * 0.5 + 0.5, 0.0 );\n\t#ifdef USE_GRADIENTMAP\n\t\treturn texture2D( gradientMap, coord ).rgb;\n\t#else\n\t\treturn ( coord.x < 0.7 ) ? vec3( 0.7 ) : vec3( 1.0 );\n\t#endif\n}",lightmap_fragment:"#ifdef USE_LIGHTMAP\n\tvec4 lightMapTexel= texture2D( lightMap, vUv2 );\n\treflectedLight.indirectDiffuse += PI * lightMapTexelToLinear( lightMapTexel ).rgb * lightMapIntensity;\n#endif", +lightmap_pars_fragment:"#ifdef USE_LIGHTMAP\n\tuniform sampler2D lightMap;\n\tuniform float lightMapIntensity;\n#endif",lights_lambert_vertex:"vec3 diffuse = vec3( 1.0 );\nGeometricContext geometry;\ngeometry.position = mvPosition.xyz;\ngeometry.normal = normalize( transformedNormal );\ngeometry.viewDir = ( isOrthographic ) ? vec3( 0, 0, 1 ) : normalize( -mvPosition.xyz );\nGeometricContext backGeometry;\nbackGeometry.position = geometry.position;\nbackGeometry.normal = -geometry.normal;\nbackGeometry.viewDir = geometry.viewDir;\nvLightFront = vec3( 0.0 );\nvIndirectFront = vec3( 0.0 );\n#ifdef DOUBLE_SIDED\n\tvLightBack = vec3( 0.0 );\n\tvIndirectBack = vec3( 0.0 );\n#endif\nIncidentLight directLight;\nfloat dotNL;\nvec3 directLightColor_Diffuse;\nvIndirectFront += getAmbientLightIrradiance( ambientLightColor );\nvIndirectFront += getLightProbeIrradiance( lightProbe, geometry );\n#ifdef DOUBLE_SIDED\n\tvIndirectBack += getAmbientLightIrradiance( ambientLightColor );\n\tvIndirectBack += getLightProbeIrradiance( lightProbe, backGeometry );\n#endif\n#if NUM_POINT_LIGHTS > 0\n\t#pragma unroll_loop_start\n\tfor ( int i = 0; i < NUM_POINT_LIGHTS; i ++ ) {\n\t\tgetPointDirectLightIrradiance( pointLights[ i ], geometry, directLight );\n\t\tdotNL = dot( geometry.normal, directLight.direction );\n\t\tdirectLightColor_Diffuse = PI * directLight.color;\n\t\tvLightFront += saturate( dotNL ) * directLightColor_Diffuse;\n\t\t#ifdef DOUBLE_SIDED\n\t\t\tvLightBack += saturate( -dotNL ) * directLightColor_Diffuse;\n\t\t#endif\n\t}\n\t#pragma unroll_loop_end\n#endif\n#if NUM_SPOT_LIGHTS > 0\n\t#pragma unroll_loop_start\n\tfor ( int i = 0; i < NUM_SPOT_LIGHTS; i ++ ) {\n\t\tgetSpotDirectLightIrradiance( spotLights[ i ], geometry, directLight );\n\t\tdotNL = dot( geometry.normal, directLight.direction );\n\t\tdirectLightColor_Diffuse = PI * directLight.color;\n\t\tvLightFront += saturate( dotNL ) * directLightColor_Diffuse;\n\t\t#ifdef DOUBLE_SIDED\n\t\t\tvLightBack += saturate( -dotNL ) * directLightColor_Diffuse;\n\t\t#endif\n\t}\n\t#pragma unroll_loop_end\n#endif\n#if NUM_DIR_LIGHTS > 0\n\t#pragma unroll_loop_start\n\tfor ( int i = 0; i < NUM_DIR_LIGHTS; i ++ ) {\n\t\tgetDirectionalDirectLightIrradiance( directionalLights[ i ], geometry, directLight );\n\t\tdotNL = dot( geometry.normal, directLight.direction );\n\t\tdirectLightColor_Diffuse = PI * directLight.color;\n\t\tvLightFront += saturate( dotNL ) * directLightColor_Diffuse;\n\t\t#ifdef DOUBLE_SIDED\n\t\t\tvLightBack += saturate( -dotNL ) * directLightColor_Diffuse;\n\t\t#endif\n\t}\n\t#pragma unroll_loop_end\n#endif\n#if NUM_HEMI_LIGHTS > 0\n\t#pragma unroll_loop_start\n\tfor ( int i = 0; i < NUM_HEMI_LIGHTS; i ++ ) {\n\t\tvIndirectFront += getHemisphereLightIrradiance( hemisphereLights[ i ], geometry );\n\t\t#ifdef DOUBLE_SIDED\n\t\t\tvIndirectBack += getHemisphereLightIrradiance( hemisphereLights[ i ], backGeometry );\n\t\t#endif\n\t}\n\t#pragma unroll_loop_end\n#endif", +lights_pars_begin:"uniform bool receiveShadow;\nuniform vec3 ambientLightColor;\nuniform vec3 lightProbe[ 9 ];\nvec3 shGetIrradianceAt( in vec3 normal, in vec3 shCoefficients[ 9 ] ) {\n\tfloat x = normal.x, y = normal.y, z = normal.z;\n\tvec3 result = shCoefficients[ 0 ] * 0.886227;\n\tresult += shCoefficients[ 1 ] * 2.0 * 0.511664 * y;\n\tresult += shCoefficients[ 2 ] * 2.0 * 0.511664 * z;\n\tresult += shCoefficients[ 3 ] * 2.0 * 0.511664 * x;\n\tresult += shCoefficients[ 4 ] * 2.0 * 0.429043 * x * y;\n\tresult += shCoefficients[ 5 ] * 2.0 * 0.429043 * y * z;\n\tresult += shCoefficients[ 6 ] * ( 0.743125 * z * z - 0.247708 );\n\tresult += shCoefficients[ 7 ] * 2.0 * 0.429043 * x * z;\n\tresult += shCoefficients[ 8 ] * 0.429043 * ( x * x - y * y );\n\treturn result;\n}\nvec3 getLightProbeIrradiance( const in vec3 lightProbe[ 9 ], const in GeometricContext geometry ) {\n\tvec3 worldNormal = inverseTransformDirection( geometry.normal, viewMatrix );\n\tvec3 irradiance = shGetIrradianceAt( worldNormal, lightProbe );\n\treturn irradiance;\n}\nvec3 getAmbientLightIrradiance( const in vec3 ambientLightColor ) {\n\tvec3 irradiance = ambientLightColor;\n\t#ifndef PHYSICALLY_CORRECT_LIGHTS\n\t\tirradiance *= PI;\n\t#endif\n\treturn irradiance;\n}\n#if NUM_DIR_LIGHTS > 0\n\tstruct DirectionalLight {\n\t\tvec3 direction;\n\t\tvec3 color;\n\t};\n\tuniform DirectionalLight directionalLights[ NUM_DIR_LIGHTS ];\n\tvoid getDirectionalDirectLightIrradiance( const in DirectionalLight directionalLight, const in GeometricContext geometry, out IncidentLight directLight ) {\n\t\tdirectLight.color = directionalLight.color;\n\t\tdirectLight.direction = directionalLight.direction;\n\t\tdirectLight.visible = true;\n\t}\n#endif\n#if NUM_POINT_LIGHTS > 0\n\tstruct PointLight {\n\t\tvec3 position;\n\t\tvec3 color;\n\t\tfloat distance;\n\t\tfloat decay;\n\t};\n\tuniform PointLight pointLights[ NUM_POINT_LIGHTS ];\n\tvoid getPointDirectLightIrradiance( const in PointLight pointLight, const in GeometricContext geometry, out IncidentLight directLight ) {\n\t\tvec3 lVector = pointLight.position - geometry.position;\n\t\tdirectLight.direction = normalize( lVector );\n\t\tfloat lightDistance = length( lVector );\n\t\tdirectLight.color = pointLight.color;\n\t\tdirectLight.color *= punctualLightIntensityToIrradianceFactor( lightDistance, pointLight.distance, pointLight.decay );\n\t\tdirectLight.visible = ( directLight.color != vec3( 0.0 ) );\n\t}\n#endif\n#if NUM_SPOT_LIGHTS > 0\n\tstruct SpotLight {\n\t\tvec3 position;\n\t\tvec3 direction;\n\t\tvec3 color;\n\t\tfloat distance;\n\t\tfloat decay;\n\t\tfloat coneCos;\n\t\tfloat penumbraCos;\n\t};\n\tuniform SpotLight spotLights[ NUM_SPOT_LIGHTS ];\n\tvoid getSpotDirectLightIrradiance( const in SpotLight spotLight, const in GeometricContext geometry, out IncidentLight directLight ) {\n\t\tvec3 lVector = spotLight.position - geometry.position;\n\t\tdirectLight.direction = normalize( lVector );\n\t\tfloat lightDistance = length( lVector );\n\t\tfloat angleCos = dot( directLight.direction, spotLight.direction );\n\t\tif ( angleCos > spotLight.coneCos ) {\n\t\t\tfloat spotEffect = smoothstep( spotLight.coneCos, spotLight.penumbraCos, angleCos );\n\t\t\tdirectLight.color = spotLight.color;\n\t\t\tdirectLight.color *= spotEffect * punctualLightIntensityToIrradianceFactor( lightDistance, spotLight.distance, spotLight.decay );\n\t\t\tdirectLight.visible = true;\n\t\t} else {\n\t\t\tdirectLight.color = vec3( 0.0 );\n\t\t\tdirectLight.visible = false;\n\t\t}\n\t}\n#endif\n#if NUM_RECT_AREA_LIGHTS > 0\n\tstruct RectAreaLight {\n\t\tvec3 color;\n\t\tvec3 position;\n\t\tvec3 halfWidth;\n\t\tvec3 halfHeight;\n\t};\n\tuniform sampler2D ltc_1;\tuniform sampler2D ltc_2;\n\tuniform RectAreaLight rectAreaLights[ NUM_RECT_AREA_LIGHTS ];\n#endif\n#if NUM_HEMI_LIGHTS > 0\n\tstruct HemisphereLight {\n\t\tvec3 direction;\n\t\tvec3 skyColor;\n\t\tvec3 groundColor;\n\t};\n\tuniform HemisphereLight hemisphereLights[ NUM_HEMI_LIGHTS ];\n\tvec3 getHemisphereLightIrradiance( const in HemisphereLight hemiLight, const in GeometricContext geometry ) {\n\t\tfloat dotNL = dot( geometry.normal, hemiLight.direction );\n\t\tfloat hemiDiffuseWeight = 0.5 * dotNL + 0.5;\n\t\tvec3 irradiance = mix( hemiLight.groundColor, hemiLight.skyColor, hemiDiffuseWeight );\n\t\t#ifndef PHYSICALLY_CORRECT_LIGHTS\n\t\t\tirradiance *= PI;\n\t\t#endif\n\t\treturn irradiance;\n\t}\n#endif", +lights_toon_fragment:"ToonMaterial material;\nmaterial.diffuseColor = diffuseColor.rgb;",lights_toon_pars_fragment:"varying vec3 vViewPosition;\n#ifndef FLAT_SHADED\n\tvarying vec3 vNormal;\n#endif\nstruct ToonMaterial {\n\tvec3 diffuseColor;\n};\nvoid RE_Direct_Toon( const in IncidentLight directLight, const in GeometricContext geometry, const in ToonMaterial material, inout ReflectedLight reflectedLight ) {\n\tvec3 irradiance = getGradientIrradiance( geometry.normal, directLight.direction ) * directLight.color;\n\t#ifndef PHYSICALLY_CORRECT_LIGHTS\n\t\tirradiance *= PI;\n\t#endif\n\treflectedLight.directDiffuse += irradiance * BRDF_Diffuse_Lambert( material.diffuseColor );\n}\nvoid RE_IndirectDiffuse_Toon( const in vec3 irradiance, const in GeometricContext geometry, const in ToonMaterial material, inout ReflectedLight reflectedLight ) {\n\treflectedLight.indirectDiffuse += irradiance * BRDF_Diffuse_Lambert( material.diffuseColor );\n}\n#define RE_Direct\t\t\t\tRE_Direct_Toon\n#define RE_IndirectDiffuse\t\tRE_IndirectDiffuse_Toon\n#define Material_LightProbeLOD( material )\t(0)", +lights_phong_fragment:"BlinnPhongMaterial material;\nmaterial.diffuseColor = diffuseColor.rgb;\nmaterial.specularColor = specular;\nmaterial.specularShininess = shininess;\nmaterial.specularStrength = specularStrength;",lights_phong_pars_fragment:"varying vec3 vViewPosition;\n#ifndef FLAT_SHADED\n\tvarying vec3 vNormal;\n#endif\nstruct BlinnPhongMaterial {\n\tvec3 diffuseColor;\n\tvec3 specularColor;\n\tfloat specularShininess;\n\tfloat specularStrength;\n};\nvoid RE_Direct_BlinnPhong( const in IncidentLight directLight, const in GeometricContext geometry, const in BlinnPhongMaterial material, inout ReflectedLight reflectedLight ) {\n\tfloat dotNL = saturate( dot( geometry.normal, directLight.direction ) );\n\tvec3 irradiance = dotNL * directLight.color;\n\t#ifndef PHYSICALLY_CORRECT_LIGHTS\n\t\tirradiance *= PI;\n\t#endif\n\treflectedLight.directDiffuse += irradiance * BRDF_Diffuse_Lambert( material.diffuseColor );\n\treflectedLight.directSpecular += irradiance * BRDF_Specular_BlinnPhong( directLight, geometry, material.specularColor, material.specularShininess ) * material.specularStrength;\n}\nvoid RE_IndirectDiffuse_BlinnPhong( const in vec3 irradiance, const in GeometricContext geometry, const in BlinnPhongMaterial material, inout ReflectedLight reflectedLight ) {\n\treflectedLight.indirectDiffuse += irradiance * BRDF_Diffuse_Lambert( material.diffuseColor );\n}\n#define RE_Direct\t\t\t\tRE_Direct_BlinnPhong\n#define RE_IndirectDiffuse\t\tRE_IndirectDiffuse_BlinnPhong\n#define Material_LightProbeLOD( material )\t(0)", +lights_physical_fragment:"PhysicalMaterial material;\nmaterial.diffuseColor = diffuseColor.rgb * ( 1.0 - metalnessFactor );\nvec3 dxy = max( abs( dFdx( geometryNormal ) ), abs( dFdy( geometryNormal ) ) );\nfloat geometryRoughness = max( max( dxy.x, dxy.y ), dxy.z );\nmaterial.specularRoughness = max( roughnessFactor, 0.0525 );material.specularRoughness += geometryRoughness;\nmaterial.specularRoughness = min( material.specularRoughness, 1.0 );\n#ifdef REFLECTIVITY\n\tmaterial.specularColor = mix( vec3( MAXIMUM_SPECULAR_COEFFICIENT * pow2( reflectivity ) ), diffuseColor.rgb, metalnessFactor );\n#else\n\tmaterial.specularColor = mix( vec3( DEFAULT_SPECULAR_COEFFICIENT ), diffuseColor.rgb, metalnessFactor );\n#endif\n#ifdef CLEARCOAT\n\tmaterial.clearcoat = clearcoat;\n\tmaterial.clearcoatRoughness = clearcoatRoughness;\n\t#ifdef USE_CLEARCOATMAP\n\t\tmaterial.clearcoat *= texture2D( clearcoatMap, vUv ).x;\n\t#endif\n\t#ifdef USE_CLEARCOAT_ROUGHNESSMAP\n\t\tmaterial.clearcoatRoughness *= texture2D( clearcoatRoughnessMap, vUv ).y;\n\t#endif\n\tmaterial.clearcoat = saturate( material.clearcoat );\tmaterial.clearcoatRoughness = max( material.clearcoatRoughness, 0.0525 );\n\tmaterial.clearcoatRoughness += geometryRoughness;\n\tmaterial.clearcoatRoughness = min( material.clearcoatRoughness, 1.0 );\n#endif\n#ifdef USE_SHEEN\n\tmaterial.sheenColor = sheen;\n#endif", +lights_physical_pars_fragment:"struct PhysicalMaterial {\n\tvec3 diffuseColor;\n\tfloat specularRoughness;\n\tvec3 specularColor;\n#ifdef CLEARCOAT\n\tfloat clearcoat;\n\tfloat clearcoatRoughness;\n#endif\n#ifdef USE_SHEEN\n\tvec3 sheenColor;\n#endif\n};\n#define MAXIMUM_SPECULAR_COEFFICIENT 0.16\n#define DEFAULT_SPECULAR_COEFFICIENT 0.04\nfloat clearcoatDHRApprox( const in float roughness, const in float dotNL ) {\n\treturn DEFAULT_SPECULAR_COEFFICIENT + ( 1.0 - DEFAULT_SPECULAR_COEFFICIENT ) * ( pow( 1.0 - dotNL, 5.0 ) * pow( 1.0 - roughness, 2.0 ) );\n}\n#if NUM_RECT_AREA_LIGHTS > 0\n\tvoid RE_Direct_RectArea_Physical( const in RectAreaLight rectAreaLight, const in GeometricContext geometry, const in PhysicalMaterial material, inout ReflectedLight reflectedLight ) {\n\t\tvec3 normal = geometry.normal;\n\t\tvec3 viewDir = geometry.viewDir;\n\t\tvec3 position = geometry.position;\n\t\tvec3 lightPos = rectAreaLight.position;\n\t\tvec3 halfWidth = rectAreaLight.halfWidth;\n\t\tvec3 halfHeight = rectAreaLight.halfHeight;\n\t\tvec3 lightColor = rectAreaLight.color;\n\t\tfloat roughness = material.specularRoughness;\n\t\tvec3 rectCoords[ 4 ];\n\t\trectCoords[ 0 ] = lightPos + halfWidth - halfHeight;\t\trectCoords[ 1 ] = lightPos - halfWidth - halfHeight;\n\t\trectCoords[ 2 ] = lightPos - halfWidth + halfHeight;\n\t\trectCoords[ 3 ] = lightPos + halfWidth + halfHeight;\n\t\tvec2 uv = LTC_Uv( normal, viewDir, roughness );\n\t\tvec4 t1 = texture2D( ltc_1, uv );\n\t\tvec4 t2 = texture2D( ltc_2, uv );\n\t\tmat3 mInv = mat3(\n\t\t\tvec3( t1.x, 0, t1.y ),\n\t\t\tvec3( 0, 1, 0 ),\n\t\t\tvec3( t1.z, 0, t1.w )\n\t\t);\n\t\tvec3 fresnel = ( material.specularColor * t2.x + ( vec3( 1.0 ) - material.specularColor ) * t2.y );\n\t\treflectedLight.directSpecular += lightColor * fresnel * LTC_Evaluate( normal, viewDir, position, mInv, rectCoords );\n\t\treflectedLight.directDiffuse += lightColor * material.diffuseColor * LTC_Evaluate( normal, viewDir, position, mat3( 1.0 ), rectCoords );\n\t}\n#endif\nvoid RE_Direct_Physical( const in IncidentLight directLight, const in GeometricContext geometry, const in PhysicalMaterial material, inout ReflectedLight reflectedLight ) {\n\tfloat dotNL = saturate( dot( geometry.normal, directLight.direction ) );\n\tvec3 irradiance = dotNL * directLight.color;\n\t#ifndef PHYSICALLY_CORRECT_LIGHTS\n\t\tirradiance *= PI;\n\t#endif\n\t#ifdef CLEARCOAT\n\t\tfloat ccDotNL = saturate( dot( geometry.clearcoatNormal, directLight.direction ) );\n\t\tvec3 ccIrradiance = ccDotNL * directLight.color;\n\t\t#ifndef PHYSICALLY_CORRECT_LIGHTS\n\t\t\tccIrradiance *= PI;\n\t\t#endif\n\t\tfloat clearcoatDHR = material.clearcoat * clearcoatDHRApprox( material.clearcoatRoughness, ccDotNL );\n\t\treflectedLight.directSpecular += ccIrradiance * material.clearcoat * BRDF_Specular_GGX( directLight, geometry.viewDir, geometry.clearcoatNormal, vec3( DEFAULT_SPECULAR_COEFFICIENT ), material.clearcoatRoughness );\n\t#else\n\t\tfloat clearcoatDHR = 0.0;\n\t#endif\n\t#ifdef USE_SHEEN\n\t\treflectedLight.directSpecular += ( 1.0 - clearcoatDHR ) * irradiance * BRDF_Specular_Sheen(\n\t\t\tmaterial.specularRoughness,\n\t\t\tdirectLight.direction,\n\t\t\tgeometry,\n\t\t\tmaterial.sheenColor\n\t\t);\n\t#else\n\t\treflectedLight.directSpecular += ( 1.0 - clearcoatDHR ) * irradiance * BRDF_Specular_GGX( directLight, geometry.viewDir, geometry.normal, material.specularColor, material.specularRoughness);\n\t#endif\n\treflectedLight.directDiffuse += ( 1.0 - clearcoatDHR ) * irradiance * BRDF_Diffuse_Lambert( material.diffuseColor );\n}\nvoid RE_IndirectDiffuse_Physical( const in vec3 irradiance, const in GeometricContext geometry, const in PhysicalMaterial material, inout ReflectedLight reflectedLight ) {\n\treflectedLight.indirectDiffuse += irradiance * BRDF_Diffuse_Lambert( material.diffuseColor );\n}\nvoid RE_IndirectSpecular_Physical( const in vec3 radiance, const in vec3 irradiance, const in vec3 clearcoatRadiance, const in GeometricContext geometry, const in PhysicalMaterial material, inout ReflectedLight reflectedLight) {\n\t#ifdef CLEARCOAT\n\t\tfloat ccDotNV = saturate( dot( geometry.clearcoatNormal, geometry.viewDir ) );\n\t\treflectedLight.indirectSpecular += clearcoatRadiance * material.clearcoat * BRDF_Specular_GGX_Environment( geometry.viewDir, geometry.clearcoatNormal, vec3( DEFAULT_SPECULAR_COEFFICIENT ), material.clearcoatRoughness );\n\t\tfloat ccDotNL = ccDotNV;\n\t\tfloat clearcoatDHR = material.clearcoat * clearcoatDHRApprox( material.clearcoatRoughness, ccDotNL );\n\t#else\n\t\tfloat clearcoatDHR = 0.0;\n\t#endif\n\tfloat clearcoatInv = 1.0 - clearcoatDHR;\n\tvec3 singleScattering = vec3( 0.0 );\n\tvec3 multiScattering = vec3( 0.0 );\n\tvec3 cosineWeightedIrradiance = irradiance * RECIPROCAL_PI;\n\tBRDF_Specular_Multiscattering_Environment( geometry, material.specularColor, material.specularRoughness, singleScattering, multiScattering );\n\tvec3 diffuse = material.diffuseColor * ( 1.0 - ( singleScattering + multiScattering ) );\n\treflectedLight.indirectSpecular += clearcoatInv * radiance * singleScattering;\n\treflectedLight.indirectSpecular += multiScattering * cosineWeightedIrradiance;\n\treflectedLight.indirectDiffuse += diffuse * cosineWeightedIrradiance;\n}\n#define RE_Direct\t\t\t\tRE_Direct_Physical\n#define RE_Direct_RectArea\t\tRE_Direct_RectArea_Physical\n#define RE_IndirectDiffuse\t\tRE_IndirectDiffuse_Physical\n#define RE_IndirectSpecular\t\tRE_IndirectSpecular_Physical\nfloat computeSpecularOcclusion( const in float dotNV, const in float ambientOcclusion, const in float roughness ) {\n\treturn saturate( pow( dotNV + ambientOcclusion, exp2( - 16.0 * roughness - 1.0 ) ) - 1.0 + ambientOcclusion );\n}", +lights_fragment_begin:"\nGeometricContext geometry;\ngeometry.position = - vViewPosition;\ngeometry.normal = normal;\ngeometry.viewDir = ( isOrthographic ) ? vec3( 0, 0, 1 ) : normalize( vViewPosition );\n#ifdef CLEARCOAT\n\tgeometry.clearcoatNormal = clearcoatNormal;\n#endif\nIncidentLight directLight;\n#if ( NUM_POINT_LIGHTS > 0 ) && defined( RE_Direct )\n\tPointLight pointLight;\n\t#if defined( USE_SHADOWMAP ) && NUM_POINT_LIGHT_SHADOWS > 0\n\tPointLightShadow pointLightShadow;\n\t#endif\n\t#pragma unroll_loop_start\n\tfor ( int i = 0; i < NUM_POINT_LIGHTS; i ++ ) {\n\t\tpointLight = pointLights[ i ];\n\t\tgetPointDirectLightIrradiance( pointLight, geometry, directLight );\n\t\t#if defined( USE_SHADOWMAP ) && ( UNROLLED_LOOP_INDEX < NUM_POINT_LIGHT_SHADOWS )\n\t\tpointLightShadow = pointLightShadows[ i ];\n\t\tdirectLight.color *= all( bvec2( directLight.visible, receiveShadow ) ) ? getPointShadow( pointShadowMap[ i ], pointLightShadow.shadowMapSize, pointLightShadow.shadowBias, pointLightShadow.shadowRadius, vPointShadowCoord[ i ], pointLightShadow.shadowCameraNear, pointLightShadow.shadowCameraFar ) : 1.0;\n\t\t#endif\n\t\tRE_Direct( directLight, geometry, material, reflectedLight );\n\t}\n\t#pragma unroll_loop_end\n#endif\n#if ( NUM_SPOT_LIGHTS > 0 ) && defined( RE_Direct )\n\tSpotLight spotLight;\n\t#if defined( USE_SHADOWMAP ) && NUM_SPOT_LIGHT_SHADOWS > 0\n\tSpotLightShadow spotLightShadow;\n\t#endif\n\t#pragma unroll_loop_start\n\tfor ( int i = 0; i < NUM_SPOT_LIGHTS; i ++ ) {\n\t\tspotLight = spotLights[ i ];\n\t\tgetSpotDirectLightIrradiance( spotLight, geometry, directLight );\n\t\t#if defined( USE_SHADOWMAP ) && ( UNROLLED_LOOP_INDEX < NUM_SPOT_LIGHT_SHADOWS )\n\t\tspotLightShadow = spotLightShadows[ i ];\n\t\tdirectLight.color *= all( bvec2( directLight.visible, receiveShadow ) ) ? getShadow( spotShadowMap[ i ], spotLightShadow.shadowMapSize, spotLightShadow.shadowBias, spotLightShadow.shadowRadius, vSpotShadowCoord[ i ] ) : 1.0;\n\t\t#endif\n\t\tRE_Direct( directLight, geometry, material, reflectedLight );\n\t}\n\t#pragma unroll_loop_end\n#endif\n#if ( NUM_DIR_LIGHTS > 0 ) && defined( RE_Direct )\n\tDirectionalLight directionalLight;\n\t#if defined( USE_SHADOWMAP ) && NUM_DIR_LIGHT_SHADOWS > 0\n\tDirectionalLightShadow directionalLightShadow;\n\t#endif\n\t#pragma unroll_loop_start\n\tfor ( int i = 0; i < NUM_DIR_LIGHTS; i ++ ) {\n\t\tdirectionalLight = directionalLights[ i ];\n\t\tgetDirectionalDirectLightIrradiance( directionalLight, geometry, directLight );\n\t\t#if defined( USE_SHADOWMAP ) && ( UNROLLED_LOOP_INDEX < NUM_DIR_LIGHT_SHADOWS )\n\t\tdirectionalLightShadow = directionalLightShadows[ i ];\n\t\tdirectLight.color *= all( bvec2( directLight.visible, receiveShadow ) ) ? getShadow( directionalShadowMap[ i ], directionalLightShadow.shadowMapSize, directionalLightShadow.shadowBias, directionalLightShadow.shadowRadius, vDirectionalShadowCoord[ i ] ) : 1.0;\n\t\t#endif\n\t\tRE_Direct( directLight, geometry, material, reflectedLight );\n\t}\n\t#pragma unroll_loop_end\n#endif\n#if ( NUM_RECT_AREA_LIGHTS > 0 ) && defined( RE_Direct_RectArea )\n\tRectAreaLight rectAreaLight;\n\t#pragma unroll_loop_start\n\tfor ( int i = 0; i < NUM_RECT_AREA_LIGHTS; i ++ ) {\n\t\trectAreaLight = rectAreaLights[ i ];\n\t\tRE_Direct_RectArea( rectAreaLight, geometry, material, reflectedLight );\n\t}\n\t#pragma unroll_loop_end\n#endif\n#if defined( RE_IndirectDiffuse )\n\tvec3 iblIrradiance = vec3( 0.0 );\n\tvec3 irradiance = getAmbientLightIrradiance( ambientLightColor );\n\tirradiance += getLightProbeIrradiance( lightProbe, geometry );\n\t#if ( NUM_HEMI_LIGHTS > 0 )\n\t\t#pragma unroll_loop_start\n\t\tfor ( int i = 0; i < NUM_HEMI_LIGHTS; i ++ ) {\n\t\t\tirradiance += getHemisphereLightIrradiance( hemisphereLights[ i ], geometry );\n\t\t}\n\t\t#pragma unroll_loop_end\n\t#endif\n#endif\n#if defined( RE_IndirectSpecular )\n\tvec3 radiance = vec3( 0.0 );\n\tvec3 clearcoatRadiance = vec3( 0.0 );\n#endif", +lights_fragment_maps:"#if defined( RE_IndirectDiffuse )\n\t#ifdef USE_LIGHTMAP\n\t\tvec4 lightMapTexel= texture2D( lightMap, vUv2 );\n\t\tvec3 lightMapIrradiance = lightMapTexelToLinear( lightMapTexel ).rgb * lightMapIntensity;\n\t\t#ifndef PHYSICALLY_CORRECT_LIGHTS\n\t\t\tlightMapIrradiance *= PI;\n\t\t#endif\n\t\tirradiance += lightMapIrradiance;\n\t#endif\n\t#if defined( USE_ENVMAP ) && defined( STANDARD ) && defined( ENVMAP_TYPE_CUBE_UV )\n\t\tiblIrradiance += getLightProbeIndirectIrradiance( geometry, maxMipLevel );\n\t#endif\n#endif\n#if defined( USE_ENVMAP ) && defined( RE_IndirectSpecular )\n\tradiance += getLightProbeIndirectRadiance( geometry.viewDir, geometry.normal, material.specularRoughness, maxMipLevel );\n\t#ifdef CLEARCOAT\n\t\tclearcoatRadiance += getLightProbeIndirectRadiance( geometry.viewDir, geometry.clearcoatNormal, material.clearcoatRoughness, maxMipLevel );\n\t#endif\n#endif", +lights_fragment_end:"#if defined( RE_IndirectDiffuse )\n\tRE_IndirectDiffuse( irradiance, geometry, material, reflectedLight );\n#endif\n#if defined( RE_IndirectSpecular )\n\tRE_IndirectSpecular( radiance, iblIrradiance, clearcoatRadiance, geometry, material, reflectedLight );\n#endif",logdepthbuf_fragment:"#if defined( USE_LOGDEPTHBUF ) && defined( USE_LOGDEPTHBUF_EXT )\n\tgl_FragDepthEXT = vIsPerspective == 0.0 ? gl_FragCoord.z : log2( vFragDepth ) * logDepthBufFC * 0.5;\n#endif",logdepthbuf_pars_fragment:"#if defined( USE_LOGDEPTHBUF ) && defined( USE_LOGDEPTHBUF_EXT )\n\tuniform float logDepthBufFC;\n\tvarying float vFragDepth;\n\tvarying float vIsPerspective;\n#endif", +logdepthbuf_pars_vertex:"#ifdef USE_LOGDEPTHBUF\n\t#ifdef USE_LOGDEPTHBUF_EXT\n\t\tvarying float vFragDepth;\n\t\tvarying float vIsPerspective;\n\t#else\n\t\tuniform float logDepthBufFC;\n\t#endif\n#endif",logdepthbuf_vertex:"#ifdef USE_LOGDEPTHBUF\n\t#ifdef USE_LOGDEPTHBUF_EXT\n\t\tvFragDepth = 1.0 + gl_Position.w;\n\t\tvIsPerspective = float( isPerspectiveMatrix( projectionMatrix ) );\n\t#else\n\t\tif ( isPerspectiveMatrix( projectionMatrix ) ) {\n\t\t\tgl_Position.z = log2( max( EPSILON, gl_Position.w + 1.0 ) ) * logDepthBufFC - 1.0;\n\t\t\tgl_Position.z *= gl_Position.w;\n\t\t}\n\t#endif\n#endif", +map_fragment:"#ifdef USE_MAP\n\tvec4 texelColor = texture2D( map, vUv );\n\ttexelColor = mapTexelToLinear( texelColor );\n\tdiffuseColor *= texelColor;\n#endif",map_pars_fragment:"#ifdef USE_MAP\n\tuniform sampler2D map;\n#endif",map_particle_fragment:"#if defined( USE_MAP ) || defined( USE_ALPHAMAP )\n\tvec2 uv = ( uvTransform * vec3( gl_PointCoord.x, 1.0 - gl_PointCoord.y, 1 ) ).xy;\n#endif\n#ifdef USE_MAP\n\tvec4 mapTexel = texture2D( map, uv );\n\tdiffuseColor *= mapTexelToLinear( mapTexel );\n#endif\n#ifdef USE_ALPHAMAP\n\tdiffuseColor.a *= texture2D( alphaMap, uv ).g;\n#endif", +map_particle_pars_fragment:"#if defined( USE_MAP ) || defined( USE_ALPHAMAP )\n\tuniform mat3 uvTransform;\n#endif\n#ifdef USE_MAP\n\tuniform sampler2D map;\n#endif\n#ifdef USE_ALPHAMAP\n\tuniform sampler2D alphaMap;\n#endif",metalnessmap_fragment:"float metalnessFactor = metalness;\n#ifdef USE_METALNESSMAP\n\tvec4 texelMetalness = texture2D( metalnessMap, vUv );\n\tmetalnessFactor *= texelMetalness.b;\n#endif",metalnessmap_pars_fragment:"#ifdef USE_METALNESSMAP\n\tuniform sampler2D metalnessMap;\n#endif", +morphnormal_vertex:"#ifdef USE_MORPHNORMALS\n\tobjectNormal *= morphTargetBaseInfluence;\n\tobjectNormal += morphNormal0 * morphTargetInfluences[ 0 ];\n\tobjectNormal += morphNormal1 * morphTargetInfluences[ 1 ];\n\tobjectNormal += morphNormal2 * morphTargetInfluences[ 2 ];\n\tobjectNormal += morphNormal3 * morphTargetInfluences[ 3 ];\n#endif",morphtarget_pars_vertex:"#ifdef USE_MORPHTARGETS\n\tuniform float morphTargetBaseInfluence;\n\t#ifndef USE_MORPHNORMALS\n\t\tuniform float morphTargetInfluences[ 8 ];\n\t#else\n\t\tuniform float morphTargetInfluences[ 4 ];\n\t#endif\n#endif", +morphtarget_vertex:"#ifdef USE_MORPHTARGETS\n\ttransformed *= morphTargetBaseInfluence;\n\ttransformed += morphTarget0 * morphTargetInfluences[ 0 ];\n\ttransformed += morphTarget1 * morphTargetInfluences[ 1 ];\n\ttransformed += morphTarget2 * morphTargetInfluences[ 2 ];\n\ttransformed += morphTarget3 * morphTargetInfluences[ 3 ];\n\t#ifndef USE_MORPHNORMALS\n\t\ttransformed += morphTarget4 * morphTargetInfluences[ 4 ];\n\t\ttransformed += morphTarget5 * morphTargetInfluences[ 5 ];\n\t\ttransformed += morphTarget6 * morphTargetInfluences[ 6 ];\n\t\ttransformed += morphTarget7 * morphTargetInfluences[ 7 ];\n\t#endif\n#endif", +normal_fragment_begin:"#ifdef FLAT_SHADED\n\tvec3 fdx = vec3( dFdx( vViewPosition.x ), dFdx( vViewPosition.y ), dFdx( vViewPosition.z ) );\n\tvec3 fdy = vec3( dFdy( vViewPosition.x ), dFdy( vViewPosition.y ), dFdy( vViewPosition.z ) );\n\tvec3 normal = normalize( cross( fdx, fdy ) );\n#else\n\tvec3 normal = normalize( vNormal );\n\t#ifdef DOUBLE_SIDED\n\t\tnormal = normal * ( float( gl_FrontFacing ) * 2.0 - 1.0 );\n\t#endif\n\t#ifdef USE_TANGENT\n\t\tvec3 tangent = normalize( vTangent );\n\t\tvec3 bitangent = normalize( vBitangent );\n\t\t#ifdef DOUBLE_SIDED\n\t\t\ttangent = tangent * ( float( gl_FrontFacing ) * 2.0 - 1.0 );\n\t\t\tbitangent = bitangent * ( float( gl_FrontFacing ) * 2.0 - 1.0 );\n\t\t#endif\n\t\t#if defined( TANGENTSPACE_NORMALMAP ) || defined( USE_CLEARCOAT_NORMALMAP )\n\t\t\tmat3 vTBN = mat3( tangent, bitangent, normal );\n\t\t#endif\n\t#endif\n#endif\nvec3 geometryNormal = normal;", +normal_fragment_maps:"#ifdef OBJECTSPACE_NORMALMAP\n\tnormal = texture2D( normalMap, vUv ).xyz * 2.0 - 1.0;\n\t#ifdef FLIP_SIDED\n\t\tnormal = - normal;\n\t#endif\n\t#ifdef DOUBLE_SIDED\n\t\tnormal = normal * ( float( gl_FrontFacing ) * 2.0 - 1.0 );\n\t#endif\n\tnormal = normalize( normalMatrix * normal );\n#elif defined( TANGENTSPACE_NORMALMAP )\n\tvec3 mapN = texture2D( normalMap, vUv ).xyz * 2.0 - 1.0;\n\tmapN.xy *= normalScale;\n\t#ifdef USE_TANGENT\n\t\tnormal = normalize( vTBN * mapN );\n\t#else\n\t\tnormal = perturbNormal2Arb( -vViewPosition, normal, mapN );\n\t#endif\n#elif defined( USE_BUMPMAP )\n\tnormal = perturbNormalArb( -vViewPosition, normal, dHdxy_fwd() );\n#endif", +normalmap_pars_fragment:"#ifdef USE_NORMALMAP\n\tuniform sampler2D normalMap;\n\tuniform vec2 normalScale;\n#endif\n#ifdef OBJECTSPACE_NORMALMAP\n\tuniform mat3 normalMatrix;\n#endif\n#if ! defined ( USE_TANGENT ) && ( defined ( TANGENTSPACE_NORMALMAP ) || defined ( USE_CLEARCOAT_NORMALMAP ) )\n\tvec3 perturbNormal2Arb( vec3 eye_pos, vec3 surf_norm, vec3 mapN ) {\n\t\tvec3 q0 = vec3( dFdx( eye_pos.x ), dFdx( eye_pos.y ), dFdx( eye_pos.z ) );\n\t\tvec3 q1 = vec3( dFdy( eye_pos.x ), dFdy( eye_pos.y ), dFdy( eye_pos.z ) );\n\t\tvec2 st0 = dFdx( vUv.st );\n\t\tvec2 st1 = dFdy( vUv.st );\n\t\tfloat scale = sign( st1.t * st0.s - st0.t * st1.s );\n\t\tvec3 S = normalize( ( q0 * st1.t - q1 * st0.t ) * scale );\n\t\tvec3 T = normalize( ( - q0 * st1.s + q1 * st0.s ) * scale );\n\t\tvec3 N = normalize( surf_norm );\n\t\tmat3 tsn = mat3( S, T, N );\n\t\tmapN.xy *= ( float( gl_FrontFacing ) * 2.0 - 1.0 );\n\t\treturn normalize( tsn * mapN );\n\t}\n#endif", +clearcoat_normal_fragment_begin:"#ifdef CLEARCOAT\n\tvec3 clearcoatNormal = geometryNormal;\n#endif",clearcoat_normal_fragment_maps:"#ifdef USE_CLEARCOAT_NORMALMAP\n\tvec3 clearcoatMapN = texture2D( clearcoatNormalMap, vUv ).xyz * 2.0 - 1.0;\n\tclearcoatMapN.xy *= clearcoatNormalScale;\n\t#ifdef USE_TANGENT\n\t\tclearcoatNormal = normalize( vTBN * clearcoatMapN );\n\t#else\n\t\tclearcoatNormal = perturbNormal2Arb( - vViewPosition, clearcoatNormal, clearcoatMapN );\n\t#endif\n#endif",clearcoat_pars_fragment:"#ifdef USE_CLEARCOATMAP\n\tuniform sampler2D clearcoatMap;\n#endif\n#ifdef USE_CLEARCOAT_ROUGHNESSMAP\n\tuniform sampler2D clearcoatRoughnessMap;\n#endif\n#ifdef USE_CLEARCOAT_NORMALMAP\n\tuniform sampler2D clearcoatNormalMap;\n\tuniform vec2 clearcoatNormalScale;\n#endif", +packing:"vec3 packNormalToRGB( const in vec3 normal ) {\n\treturn normalize( normal ) * 0.5 + 0.5;\n}\nvec3 unpackRGBToNormal( const in vec3 rgb ) {\n\treturn 2.0 * rgb.xyz - 1.0;\n}\nconst float PackUpscale = 256. / 255.;const float UnpackDownscale = 255. / 256.;\nconst vec3 PackFactors = vec3( 256. * 256. * 256., 256. * 256., 256. );\nconst vec4 UnpackFactors = UnpackDownscale / vec4( PackFactors, 1. );\nconst float ShiftRight8 = 1. / 256.;\nvec4 packDepthToRGBA( const in float v ) {\n\tvec4 r = vec4( fract( v * PackFactors ), v );\n\tr.yzw -= r.xyz * ShiftRight8;\treturn r * PackUpscale;\n}\nfloat unpackRGBAToDepth( const in vec4 v ) {\n\treturn dot( v, UnpackFactors );\n}\nvec4 pack2HalfToRGBA( vec2 v ) {\n\tvec4 r = vec4( v.x, fract( v.x * 255.0 ), v.y, fract( v.y * 255.0 ));\n\treturn vec4( r.x - r.y / 255.0, r.y, r.z - r.w / 255.0, r.w);\n}\nvec2 unpackRGBATo2Half( vec4 v ) {\n\treturn vec2( v.x + ( v.y / 255.0 ), v.z + ( v.w / 255.0 ) );\n}\nfloat viewZToOrthographicDepth( const in float viewZ, const in float near, const in float far ) {\n\treturn ( viewZ + near ) / ( near - far );\n}\nfloat orthographicDepthToViewZ( const in float linearClipZ, const in float near, const in float far ) {\n\treturn linearClipZ * ( near - far ) - near;\n}\nfloat viewZToPerspectiveDepth( const in float viewZ, const in float near, const in float far ) {\n\treturn (( near + viewZ ) * far ) / (( far - near ) * viewZ );\n}\nfloat perspectiveDepthToViewZ( const in float invClipZ, const in float near, const in float far ) {\n\treturn ( near * far ) / ( ( far - near ) * invClipZ - far );\n}", +premultiplied_alpha_fragment:"#ifdef PREMULTIPLIED_ALPHA\n\tgl_FragColor.rgb *= gl_FragColor.a;\n#endif",project_vertex:"vec4 mvPosition = vec4( transformed, 1.0 );\n#ifdef USE_INSTANCING\n\tmvPosition = instanceMatrix * mvPosition;\n#endif\nmvPosition = modelViewMatrix * mvPosition;\ngl_Position = projectionMatrix * mvPosition;",dithering_fragment:"#ifdef DITHERING\n\tgl_FragColor.rgb = dithering( gl_FragColor.rgb );\n#endif",dithering_pars_fragment:"#ifdef DITHERING\n\tvec3 dithering( vec3 color ) {\n\t\tfloat grid_position = rand( gl_FragCoord.xy );\n\t\tvec3 dither_shift_RGB = vec3( 0.25 / 255.0, -0.25 / 255.0, 0.25 / 255.0 );\n\t\tdither_shift_RGB = mix( 2.0 * dither_shift_RGB, -2.0 * dither_shift_RGB, grid_position );\n\t\treturn color + dither_shift_RGB;\n\t}\n#endif", +roughnessmap_fragment:"float roughnessFactor = roughness;\n#ifdef USE_ROUGHNESSMAP\n\tvec4 texelRoughness = texture2D( roughnessMap, vUv );\n\troughnessFactor *= texelRoughness.g;\n#endif",roughnessmap_pars_fragment:"#ifdef USE_ROUGHNESSMAP\n\tuniform sampler2D roughnessMap;\n#endif",shadowmap_pars_fragment:"#ifdef USE_SHADOWMAP\n\t#if NUM_DIR_LIGHT_SHADOWS > 0\n\t\tuniform sampler2D directionalShadowMap[ NUM_DIR_LIGHT_SHADOWS ];\n\t\tvarying vec4 vDirectionalShadowCoord[ NUM_DIR_LIGHT_SHADOWS ];\n\t\tstruct DirectionalLightShadow {\n\t\t\tfloat shadowBias;\n\t\t\tfloat shadowNormalBias;\n\t\t\tfloat shadowRadius;\n\t\t\tvec2 shadowMapSize;\n\t\t};\n\t\tuniform DirectionalLightShadow directionalLightShadows[ NUM_DIR_LIGHT_SHADOWS ];\n\t#endif\n\t#if NUM_SPOT_LIGHT_SHADOWS > 0\n\t\tuniform sampler2D spotShadowMap[ NUM_SPOT_LIGHT_SHADOWS ];\n\t\tvarying vec4 vSpotShadowCoord[ NUM_SPOT_LIGHT_SHADOWS ];\n\t\tstruct SpotLightShadow {\n\t\t\tfloat shadowBias;\n\t\t\tfloat shadowNormalBias;\n\t\t\tfloat shadowRadius;\n\t\t\tvec2 shadowMapSize;\n\t\t};\n\t\tuniform SpotLightShadow spotLightShadows[ NUM_SPOT_LIGHT_SHADOWS ];\n\t#endif\n\t#if NUM_POINT_LIGHT_SHADOWS > 0\n\t\tuniform sampler2D pointShadowMap[ NUM_POINT_LIGHT_SHADOWS ];\n\t\tvarying vec4 vPointShadowCoord[ NUM_POINT_LIGHT_SHADOWS ];\n\t\tstruct PointLightShadow {\n\t\t\tfloat shadowBias;\n\t\t\tfloat shadowNormalBias;\n\t\t\tfloat shadowRadius;\n\t\t\tvec2 shadowMapSize;\n\t\t\tfloat shadowCameraNear;\n\t\t\tfloat shadowCameraFar;\n\t\t};\n\t\tuniform PointLightShadow pointLightShadows[ NUM_POINT_LIGHT_SHADOWS ];\n\t#endif\n\tfloat texture2DCompare( sampler2D depths, vec2 uv, float compare ) {\n\t\treturn step( compare, unpackRGBAToDepth( texture2D( depths, uv ) ) );\n\t}\n\tvec2 texture2DDistribution( sampler2D shadow, vec2 uv ) {\n\t\treturn unpackRGBATo2Half( texture2D( shadow, uv ) );\n\t}\n\tfloat VSMShadow (sampler2D shadow, vec2 uv, float compare ){\n\t\tfloat occlusion = 1.0;\n\t\tvec2 distribution = texture2DDistribution( shadow, uv );\n\t\tfloat hard_shadow = step( compare , distribution.x );\n\t\tif (hard_shadow != 1.0 ) {\n\t\t\tfloat distance = compare - distribution.x ;\n\t\t\tfloat variance = max( 0.00000, distribution.y * distribution.y );\n\t\t\tfloat softness_probability = variance / (variance + distance * distance );\t\t\tsoftness_probability = clamp( ( softness_probability - 0.3 ) / ( 0.95 - 0.3 ), 0.0, 1.0 );\t\t\tocclusion = clamp( max( hard_shadow, softness_probability ), 0.0, 1.0 );\n\t\t}\n\t\treturn occlusion;\n\t}\n\tfloat getShadow( sampler2D shadowMap, vec2 shadowMapSize, float shadowBias, float shadowRadius, vec4 shadowCoord ) {\n\t\tfloat shadow = 1.0;\n\t\tshadowCoord.xyz /= shadowCoord.w;\n\t\tshadowCoord.z += shadowBias;\n\t\tbvec4 inFrustumVec = bvec4 ( shadowCoord.x >= 0.0, shadowCoord.x <= 1.0, shadowCoord.y >= 0.0, shadowCoord.y <= 1.0 );\n\t\tbool inFrustum = all( inFrustumVec );\n\t\tbvec2 frustumTestVec = bvec2( inFrustum, shadowCoord.z <= 1.0 );\n\t\tbool frustumTest = all( frustumTestVec );\n\t\tif ( frustumTest ) {\n\t\t#if defined( SHADOWMAP_TYPE_PCF )\n\t\t\tvec2 texelSize = vec2( 1.0 ) / shadowMapSize;\n\t\t\tfloat dx0 = - texelSize.x * shadowRadius;\n\t\t\tfloat dy0 = - texelSize.y * shadowRadius;\n\t\t\tfloat dx1 = + texelSize.x * shadowRadius;\n\t\t\tfloat dy1 = + texelSize.y * shadowRadius;\n\t\t\tfloat dx2 = dx0 / 2.0;\n\t\t\tfloat dy2 = dy0 / 2.0;\n\t\t\tfloat dx3 = dx1 / 2.0;\n\t\t\tfloat dy3 = dy1 / 2.0;\n\t\t\tshadow = (\n\t\t\t\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( dx0, dy0 ), shadowCoord.z ) +\n\t\t\t\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( 0.0, dy0 ), shadowCoord.z ) +\n\t\t\t\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( dx1, dy0 ), shadowCoord.z ) +\n\t\t\t\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( dx2, dy2 ), shadowCoord.z ) +\n\t\t\t\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( 0.0, dy2 ), shadowCoord.z ) +\n\t\t\t\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( dx3, dy2 ), shadowCoord.z ) +\n\t\t\t\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( dx0, 0.0 ), shadowCoord.z ) +\n\t\t\t\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( dx2, 0.0 ), shadowCoord.z ) +\n\t\t\t\ttexture2DCompare( shadowMap, shadowCoord.xy, shadowCoord.z ) +\n\t\t\t\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( dx3, 0.0 ), shadowCoord.z ) +\n\t\t\t\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( dx1, 0.0 ), shadowCoord.z ) +\n\t\t\t\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( dx2, dy3 ), shadowCoord.z ) +\n\t\t\t\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( 0.0, dy3 ), shadowCoord.z ) +\n\t\t\t\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( dx3, dy3 ), shadowCoord.z ) +\n\t\t\t\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( dx0, dy1 ), shadowCoord.z ) +\n\t\t\t\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( 0.0, dy1 ), shadowCoord.z ) +\n\t\t\t\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( dx1, dy1 ), shadowCoord.z )\n\t\t\t) * ( 1.0 / 17.0 );\n\t\t#elif defined( SHADOWMAP_TYPE_PCF_SOFT )\n\t\t\tvec2 texelSize = vec2( 1.0 ) / shadowMapSize;\n\t\t\tfloat dx = texelSize.x;\n\t\t\tfloat dy = texelSize.y;\n\t\t\tvec2 uv = shadowCoord.xy;\n\t\t\tvec2 f = fract( uv * shadowMapSize + 0.5 );\n\t\t\tuv -= f * texelSize;\n\t\t\tshadow = (\n\t\t\t\ttexture2DCompare( shadowMap, uv, shadowCoord.z ) +\n\t\t\t\ttexture2DCompare( shadowMap, uv + vec2( dx, 0.0 ), shadowCoord.z ) +\n\t\t\t\ttexture2DCompare( shadowMap, uv + vec2( 0.0, dy ), shadowCoord.z ) +\n\t\t\t\ttexture2DCompare( shadowMap, uv + texelSize, shadowCoord.z ) +\n\t\t\t\tmix( texture2DCompare( shadowMap, uv + vec2( -dx, 0.0 ), shadowCoord.z ), \n\t\t\t\t\t texture2DCompare( shadowMap, uv + vec2( 2.0 * dx, 0.0 ), shadowCoord.z ),\n\t\t\t\t\t f.x ) +\n\t\t\t\tmix( texture2DCompare( shadowMap, uv + vec2( -dx, dy ), shadowCoord.z ), \n\t\t\t\t\t texture2DCompare( shadowMap, uv + vec2( 2.0 * dx, dy ), shadowCoord.z ),\n\t\t\t\t\t f.x ) +\n\t\t\t\tmix( texture2DCompare( shadowMap, uv + vec2( 0.0, -dy ), shadowCoord.z ), \n\t\t\t\t\t texture2DCompare( shadowMap, uv + vec2( 0.0, 2.0 * dy ), shadowCoord.z ),\n\t\t\t\t\t f.y ) +\n\t\t\t\tmix( texture2DCompare( shadowMap, uv + vec2( dx, -dy ), shadowCoord.z ), \n\t\t\t\t\t texture2DCompare( shadowMap, uv + vec2( dx, 2.0 * dy ), shadowCoord.z ),\n\t\t\t\t\t f.y ) +\n\t\t\t\tmix( mix( texture2DCompare( shadowMap, uv + vec2( -dx, -dy ), shadowCoord.z ), \n\t\t\t\t\t\t texture2DCompare( shadowMap, uv + vec2( 2.0 * dx, -dy ), shadowCoord.z ),\n\t\t\t\t\t\t f.x ),\n\t\t\t\t\t mix( texture2DCompare( shadowMap, uv + vec2( -dx, 2.0 * dy ), shadowCoord.z ), \n\t\t\t\t\t\t texture2DCompare( shadowMap, uv + vec2( 2.0 * dx, 2.0 * dy ), shadowCoord.z ),\n\t\t\t\t\t\t f.x ),\n\t\t\t\t\t f.y )\n\t\t\t) * ( 1.0 / 9.0 );\n\t\t#elif defined( SHADOWMAP_TYPE_VSM )\n\t\t\tshadow = VSMShadow( shadowMap, shadowCoord.xy, shadowCoord.z );\n\t\t#else\n\t\t\tshadow = texture2DCompare( shadowMap, shadowCoord.xy, shadowCoord.z );\n\t\t#endif\n\t\t}\n\t\treturn shadow;\n\t}\n\tvec2 cubeToUV( vec3 v, float texelSizeY ) {\n\t\tvec3 absV = abs( v );\n\t\tfloat scaleToCube = 1.0 / max( absV.x, max( absV.y, absV.z ) );\n\t\tabsV *= scaleToCube;\n\t\tv *= scaleToCube * ( 1.0 - 2.0 * texelSizeY );\n\t\tvec2 planar = v.xy;\n\t\tfloat almostATexel = 1.5 * texelSizeY;\n\t\tfloat almostOne = 1.0 - almostATexel;\n\t\tif ( absV.z >= almostOne ) {\n\t\t\tif ( v.z > 0.0 )\n\t\t\t\tplanar.x = 4.0 - v.x;\n\t\t} else if ( absV.x >= almostOne ) {\n\t\t\tfloat signX = sign( v.x );\n\t\t\tplanar.x = v.z * signX + 2.0 * signX;\n\t\t} else if ( absV.y >= almostOne ) {\n\t\t\tfloat signY = sign( v.y );\n\t\t\tplanar.x = v.x + 2.0 * signY + 2.0;\n\t\t\tplanar.y = v.z * signY - 2.0;\n\t\t}\n\t\treturn vec2( 0.125, 0.25 ) * planar + vec2( 0.375, 0.75 );\n\t}\n\tfloat getPointShadow( sampler2D shadowMap, vec2 shadowMapSize, float shadowBias, float shadowRadius, vec4 shadowCoord, float shadowCameraNear, float shadowCameraFar ) {\n\t\tvec2 texelSize = vec2( 1.0 ) / ( shadowMapSize * vec2( 4.0, 2.0 ) );\n\t\tvec3 lightToPosition = shadowCoord.xyz;\n\t\tfloat dp = ( length( lightToPosition ) - shadowCameraNear ) / ( shadowCameraFar - shadowCameraNear );\t\tdp += shadowBias;\n\t\tvec3 bd3D = normalize( lightToPosition );\n\t\t#if defined( SHADOWMAP_TYPE_PCF ) || defined( SHADOWMAP_TYPE_PCF_SOFT ) || defined( SHADOWMAP_TYPE_VSM )\n\t\t\tvec2 offset = vec2( - 1, 1 ) * shadowRadius * texelSize.y;\n\t\t\treturn (\n\t\t\t\ttexture2DCompare( shadowMap, cubeToUV( bd3D + offset.xyy, texelSize.y ), dp ) +\n\t\t\t\ttexture2DCompare( shadowMap, cubeToUV( bd3D + offset.yyy, texelSize.y ), dp ) +\n\t\t\t\ttexture2DCompare( shadowMap, cubeToUV( bd3D + offset.xyx, texelSize.y ), dp ) +\n\t\t\t\ttexture2DCompare( shadowMap, cubeToUV( bd3D + offset.yyx, texelSize.y ), dp ) +\n\t\t\t\ttexture2DCompare( shadowMap, cubeToUV( bd3D, texelSize.y ), dp ) +\n\t\t\t\ttexture2DCompare( shadowMap, cubeToUV( bd3D + offset.xxy, texelSize.y ), dp ) +\n\t\t\t\ttexture2DCompare( shadowMap, cubeToUV( bd3D + offset.yxy, texelSize.y ), dp ) +\n\t\t\t\ttexture2DCompare( shadowMap, cubeToUV( bd3D + offset.xxx, texelSize.y ), dp ) +\n\t\t\t\ttexture2DCompare( shadowMap, cubeToUV( bd3D + offset.yxx, texelSize.y ), dp )\n\t\t\t) * ( 1.0 / 9.0 );\n\t\t#else\n\t\t\treturn texture2DCompare( shadowMap, cubeToUV( bd3D, texelSize.y ), dp );\n\t\t#endif\n\t}\n#endif", +shadowmap_pars_vertex:"#ifdef USE_SHADOWMAP\n\t#if NUM_DIR_LIGHT_SHADOWS > 0\n\t\tuniform mat4 directionalShadowMatrix[ NUM_DIR_LIGHT_SHADOWS ];\n\t\tvarying vec4 vDirectionalShadowCoord[ NUM_DIR_LIGHT_SHADOWS ];\n\t\tstruct DirectionalLightShadow {\n\t\t\tfloat shadowBias;\n\t\t\tfloat shadowNormalBias;\n\t\t\tfloat shadowRadius;\n\t\t\tvec2 shadowMapSize;\n\t\t};\n\t\tuniform DirectionalLightShadow directionalLightShadows[ NUM_DIR_LIGHT_SHADOWS ];\n\t#endif\n\t#if NUM_SPOT_LIGHT_SHADOWS > 0\n\t\tuniform mat4 spotShadowMatrix[ NUM_SPOT_LIGHT_SHADOWS ];\n\t\tvarying vec4 vSpotShadowCoord[ NUM_SPOT_LIGHT_SHADOWS ];\n\t\tstruct SpotLightShadow {\n\t\t\tfloat shadowBias;\n\t\t\tfloat shadowNormalBias;\n\t\t\tfloat shadowRadius;\n\t\t\tvec2 shadowMapSize;\n\t\t};\n\t\tuniform SpotLightShadow spotLightShadows[ NUM_SPOT_LIGHT_SHADOWS ];\n\t#endif\n\t#if NUM_POINT_LIGHT_SHADOWS > 0\n\t\tuniform mat4 pointShadowMatrix[ NUM_POINT_LIGHT_SHADOWS ];\n\t\tvarying vec4 vPointShadowCoord[ NUM_POINT_LIGHT_SHADOWS ];\n\t\tstruct PointLightShadow {\n\t\t\tfloat shadowBias;\n\t\t\tfloat shadowNormalBias;\n\t\t\tfloat shadowRadius;\n\t\t\tvec2 shadowMapSize;\n\t\t\tfloat shadowCameraNear;\n\t\t\tfloat shadowCameraFar;\n\t\t};\n\t\tuniform PointLightShadow pointLightShadows[ NUM_POINT_LIGHT_SHADOWS ];\n\t#endif\n#endif", +shadowmap_vertex:"#ifdef USE_SHADOWMAP\n\t#if NUM_DIR_LIGHT_SHADOWS > 0 || NUM_SPOT_LIGHT_SHADOWS > 0 || NUM_POINT_LIGHT_SHADOWS > 0\n\t\tvec3 shadowWorldNormal = inverseTransformDirection( transformedNormal, viewMatrix );\n\t\tvec4 shadowWorldPosition;\n\t#endif\n\t#if NUM_DIR_LIGHT_SHADOWS > 0\n\t#pragma unroll_loop_start\n\tfor ( int i = 0; i < NUM_DIR_LIGHT_SHADOWS; i ++ ) {\n\t\tshadowWorldPosition = worldPosition + vec4( shadowWorldNormal * directionalLightShadows[ i ].shadowNormalBias, 0 );\n\t\tvDirectionalShadowCoord[ i ] = directionalShadowMatrix[ i ] * shadowWorldPosition;\n\t}\n\t#pragma unroll_loop_end\n\t#endif\n\t#if NUM_SPOT_LIGHT_SHADOWS > 0\n\t#pragma unroll_loop_start\n\tfor ( int i = 0; i < NUM_SPOT_LIGHT_SHADOWS; i ++ ) {\n\t\tshadowWorldPosition = worldPosition + vec4( shadowWorldNormal * spotLightShadows[ i ].shadowNormalBias, 0 );\n\t\tvSpotShadowCoord[ i ] = spotShadowMatrix[ i ] * shadowWorldPosition;\n\t}\n\t#pragma unroll_loop_end\n\t#endif\n\t#if NUM_POINT_LIGHT_SHADOWS > 0\n\t#pragma unroll_loop_start\n\tfor ( int i = 0; i < NUM_POINT_LIGHT_SHADOWS; i ++ ) {\n\t\tshadowWorldPosition = worldPosition + vec4( shadowWorldNormal * pointLightShadows[ i ].shadowNormalBias, 0 );\n\t\tvPointShadowCoord[ i ] = pointShadowMatrix[ i ] * shadowWorldPosition;\n\t}\n\t#pragma unroll_loop_end\n\t#endif\n#endif", +shadowmask_pars_fragment:"float getShadowMask() {\n\tfloat shadow = 1.0;\n\t#ifdef USE_SHADOWMAP\n\t#if NUM_DIR_LIGHT_SHADOWS > 0\n\tDirectionalLightShadow directionalLight;\n\t#pragma unroll_loop_start\n\tfor ( int i = 0; i < NUM_DIR_LIGHT_SHADOWS; i ++ ) {\n\t\tdirectionalLight = directionalLightShadows[ i ];\n\t\tshadow *= receiveShadow ? getShadow( directionalShadowMap[ i ], directionalLight.shadowMapSize, directionalLight.shadowBias, directionalLight.shadowRadius, vDirectionalShadowCoord[ i ] ) : 1.0;\n\t}\n\t#pragma unroll_loop_end\n\t#endif\n\t#if NUM_SPOT_LIGHT_SHADOWS > 0\n\tSpotLightShadow spotLight;\n\t#pragma unroll_loop_start\n\tfor ( int i = 0; i < NUM_SPOT_LIGHT_SHADOWS; i ++ ) {\n\t\tspotLight = spotLightShadows[ i ];\n\t\tshadow *= receiveShadow ? getShadow( spotShadowMap[ i ], spotLight.shadowMapSize, spotLight.shadowBias, spotLight.shadowRadius, vSpotShadowCoord[ i ] ) : 1.0;\n\t}\n\t#pragma unroll_loop_end\n\t#endif\n\t#if NUM_POINT_LIGHT_SHADOWS > 0\n\tPointLightShadow pointLight;\n\t#pragma unroll_loop_start\n\tfor ( int i = 0; i < NUM_POINT_LIGHT_SHADOWS; i ++ ) {\n\t\tpointLight = pointLightShadows[ i ];\n\t\tshadow *= receiveShadow ? getPointShadow( pointShadowMap[ i ], pointLight.shadowMapSize, pointLight.shadowBias, pointLight.shadowRadius, vPointShadowCoord[ i ], pointLight.shadowCameraNear, pointLight.shadowCameraFar ) : 1.0;\n\t}\n\t#pragma unroll_loop_end\n\t#endif\n\t#endif\n\treturn shadow;\n}", +skinbase_vertex:"#ifdef USE_SKINNING\n\tmat4 boneMatX = getBoneMatrix( skinIndex.x );\n\tmat4 boneMatY = getBoneMatrix( skinIndex.y );\n\tmat4 boneMatZ = getBoneMatrix( skinIndex.z );\n\tmat4 boneMatW = getBoneMatrix( skinIndex.w );\n#endif",skinning_pars_vertex:"#ifdef USE_SKINNING\n\tuniform mat4 bindMatrix;\n\tuniform mat4 bindMatrixInverse;\n\t#ifdef BONE_TEXTURE\n\t\tuniform highp sampler2D boneTexture;\n\t\tuniform int boneTextureSize;\n\t\tmat4 getBoneMatrix( const in float i ) {\n\t\t\tfloat j = i * 4.0;\n\t\t\tfloat x = mod( j, float( boneTextureSize ) );\n\t\t\tfloat y = floor( j / float( boneTextureSize ) );\n\t\t\tfloat dx = 1.0 / float( boneTextureSize );\n\t\t\tfloat dy = 1.0 / float( boneTextureSize );\n\t\t\ty = dy * ( y + 0.5 );\n\t\t\tvec4 v1 = texture2D( boneTexture, vec2( dx * ( x + 0.5 ), y ) );\n\t\t\tvec4 v2 = texture2D( boneTexture, vec2( dx * ( x + 1.5 ), y ) );\n\t\t\tvec4 v3 = texture2D( boneTexture, vec2( dx * ( x + 2.5 ), y ) );\n\t\t\tvec4 v4 = texture2D( boneTexture, vec2( dx * ( x + 3.5 ), y ) );\n\t\t\tmat4 bone = mat4( v1, v2, v3, v4 );\n\t\t\treturn bone;\n\t\t}\n\t#else\n\t\tuniform mat4 boneMatrices[ MAX_BONES ];\n\t\tmat4 getBoneMatrix( const in float i ) {\n\t\t\tmat4 bone = boneMatrices[ int(i) ];\n\t\t\treturn bone;\n\t\t}\n\t#endif\n#endif", +skinning_vertex:"#ifdef USE_SKINNING\n\tvec4 skinVertex = bindMatrix * vec4( transformed, 1.0 );\n\tvec4 skinned = vec4( 0.0 );\n\tskinned += boneMatX * skinVertex * skinWeight.x;\n\tskinned += boneMatY * skinVertex * skinWeight.y;\n\tskinned += boneMatZ * skinVertex * skinWeight.z;\n\tskinned += boneMatW * skinVertex * skinWeight.w;\n\ttransformed = ( bindMatrixInverse * skinned ).xyz;\n#endif",skinnormal_vertex:"#ifdef USE_SKINNING\n\tmat4 skinMatrix = mat4( 0.0 );\n\tskinMatrix += skinWeight.x * boneMatX;\n\tskinMatrix += skinWeight.y * boneMatY;\n\tskinMatrix += skinWeight.z * boneMatZ;\n\tskinMatrix += skinWeight.w * boneMatW;\n\tskinMatrix = bindMatrixInverse * skinMatrix * bindMatrix;\n\tobjectNormal = vec4( skinMatrix * vec4( objectNormal, 0.0 ) ).xyz;\n\t#ifdef USE_TANGENT\n\t\tobjectTangent = vec4( skinMatrix * vec4( objectTangent, 0.0 ) ).xyz;\n\t#endif\n#endif", +specularmap_fragment:"float specularStrength;\n#ifdef USE_SPECULARMAP\n\tvec4 texelSpecular = texture2D( specularMap, vUv );\n\tspecularStrength = texelSpecular.r;\n#else\n\tspecularStrength = 1.0;\n#endif",specularmap_pars_fragment:"#ifdef USE_SPECULARMAP\n\tuniform sampler2D specularMap;\n#endif",tonemapping_fragment:"#if defined( TONE_MAPPING )\n\tgl_FragColor.rgb = toneMapping( gl_FragColor.rgb );\n#endif",tonemapping_pars_fragment:"#ifndef saturate\n#define saturate(a) clamp( a, 0.0, 1.0 )\n#endif\nuniform float toneMappingExposure;\nvec3 LinearToneMapping( vec3 color ) {\n\treturn toneMappingExposure * color;\n}\nvec3 ReinhardToneMapping( vec3 color ) {\n\tcolor *= toneMappingExposure;\n\treturn saturate( color / ( vec3( 1.0 ) + color ) );\n}\nvec3 OptimizedCineonToneMapping( vec3 color ) {\n\tcolor *= toneMappingExposure;\n\tcolor = max( vec3( 0.0 ), color - 0.004 );\n\treturn pow( ( color * ( 6.2 * color + 0.5 ) ) / ( color * ( 6.2 * color + 1.7 ) + 0.06 ), vec3( 2.2 ) );\n}\nvec3 RRTAndODTFit( vec3 v ) {\n\tvec3 a = v * ( v + 0.0245786 ) - 0.000090537;\n\tvec3 b = v * ( 0.983729 * v + 0.4329510 ) + 0.238081;\n\treturn a / b;\n}\nvec3 ACESFilmicToneMapping( vec3 color ) {\n\tconst mat3 ACESInputMat = mat3(\n\t\tvec3( 0.59719, 0.07600, 0.02840 ),\t\tvec3( 0.35458, 0.90834, 0.13383 ),\n\t\tvec3( 0.04823, 0.01566, 0.83777 )\n\t);\n\tconst mat3 ACESOutputMat = mat3(\n\t\tvec3( 1.60475, -0.10208, -0.00327 ),\t\tvec3( -0.53108, 1.10813, -0.07276 ),\n\t\tvec3( -0.07367, -0.00605, 1.07602 )\n\t);\n\tcolor *= toneMappingExposure / 0.6;\n\tcolor = ACESInputMat * color;\n\tcolor = RRTAndODTFit( color );\n\tcolor = ACESOutputMat * color;\n\treturn saturate( color );\n}\nvec3 CustomToneMapping( vec3 color ) { return color; }", +transmissionmap_fragment:"#ifdef USE_TRANSMISSIONMAP\n\ttotalTransmission *= texture2D( transmissionMap, vUv ).r;\n#endif",transmissionmap_pars_fragment:"#ifdef USE_TRANSMISSIONMAP\n\tuniform sampler2D transmissionMap;\n#endif",uv_pars_fragment:"#if ( defined( USE_UV ) && ! defined( UVS_VERTEX_ONLY ) )\n\tvarying vec2 vUv;\n#endif",uv_pars_vertex:"#ifdef USE_UV\n\t#ifdef UVS_VERTEX_ONLY\n\t\tvec2 vUv;\n\t#else\n\t\tvarying vec2 vUv;\n\t#endif\n\tuniform mat3 uvTransform;\n#endif",uv_vertex:"#ifdef USE_UV\n\tvUv = ( uvTransform * vec3( uv, 1 ) ).xy;\n#endif", +uv2_pars_fragment:"#if defined( USE_LIGHTMAP ) || defined( USE_AOMAP )\n\tvarying vec2 vUv2;\n#endif",uv2_pars_vertex:"#if defined( USE_LIGHTMAP ) || defined( USE_AOMAP )\n\tattribute vec2 uv2;\n\tvarying vec2 vUv2;\n\tuniform mat3 uv2Transform;\n#endif",uv2_vertex:"#if defined( USE_LIGHTMAP ) || defined( USE_AOMAP )\n\tvUv2 = ( uv2Transform * vec3( uv2, 1 ) ).xy;\n#endif",worldpos_vertex:"#if defined( USE_ENVMAP ) || defined( DISTANCE ) || defined ( USE_SHADOWMAP )\n\tvec4 worldPosition = vec4( transformed, 1.0 );\n\t#ifdef USE_INSTANCING\n\t\tworldPosition = instanceMatrix * worldPosition;\n\t#endif\n\tworldPosition = modelMatrix * worldPosition;\n#endif", +background_frag:"uniform sampler2D t2D;\nvarying vec2 vUv;\nvoid main() {\n\tvec4 texColor = texture2D( t2D, vUv );\n\tgl_FragColor = mapTexelToLinear( texColor );\n\t#include \n\t#include \n}",background_vert:"varying vec2 vUv;\nuniform mat3 uvTransform;\nvoid main() {\n\tvUv = ( uvTransform * vec3( uv, 1 ) ).xy;\n\tgl_Position = vec4( position.xy, 1.0, 1.0 );\n}",cube_frag:"#include \nuniform float opacity;\nvarying vec3 vWorldDirection;\n#include \nvoid main() {\n\tvec3 vReflect = vWorldDirection;\n\t#include \n\tgl_FragColor = envColor;\n\tgl_FragColor.a *= opacity;\n\t#include \n\t#include \n}", +cube_vert:"varying vec3 vWorldDirection;\n#include \nvoid main() {\n\tvWorldDirection = transformDirection( position, modelMatrix );\n\t#include \n\t#include \n\tgl_Position.z = gl_Position.w;\n}",depth_frag:"#if DEPTH_PACKING == 3200\n\tuniform float opacity;\n#endif\n#include \n#include \n#include \n#include \n#include \n#include \n#include \nvarying vec2 vHighPrecisionZW;\nvoid main() {\n\t#include \n\tvec4 diffuseColor = vec4( 1.0 );\n\t#if DEPTH_PACKING == 3200\n\t\tdiffuseColor.a = opacity;\n\t#endif\n\t#include \n\t#include \n\t#include \n\t#include \n\tfloat fragCoordZ = 0.5 * vHighPrecisionZW[0] / vHighPrecisionZW[1] + 0.5;\n\t#if DEPTH_PACKING == 3200\n\t\tgl_FragColor = vec4( vec3( 1.0 - fragCoordZ ), opacity );\n\t#elif DEPTH_PACKING == 3201\n\t\tgl_FragColor = packDepthToRGBA( fragCoordZ );\n\t#endif\n}", +depth_vert:"#include \n#include \n#include \n#include \n#include \n#include \n#include \nvarying vec2 vHighPrecisionZW;\nvoid main() {\n\t#include \n\t#include \n\t#ifdef USE_DISPLACEMENTMAP\n\t\t#include \n\t\t#include \n\t\t#include \n\t#endif\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\tvHighPrecisionZW = gl_Position.zw;\n}", +distanceRGBA_frag:"#define DISTANCE\nuniform vec3 referencePosition;\nuniform float nearDistance;\nuniform float farDistance;\nvarying vec3 vWorldPosition;\n#include \n#include \n#include \n#include \n#include \n#include \nvoid main () {\n\t#include \n\tvec4 diffuseColor = vec4( 1.0 );\n\t#include \n\t#include \n\t#include \n\tfloat dist = length( vWorldPosition - referencePosition );\n\tdist = ( dist - nearDistance ) / ( farDistance - nearDistance );\n\tdist = saturate( dist );\n\tgl_FragColor = packDepthToRGBA( dist );\n}", +distanceRGBA_vert:"#define DISTANCE\nvarying vec3 vWorldPosition;\n#include \n#include \n#include \n#include \n#include \n#include \nvoid main() {\n\t#include \n\t#include \n\t#ifdef USE_DISPLACEMENTMAP\n\t\t#include \n\t\t#include \n\t\t#include \n\t#endif\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\tvWorldPosition = worldPosition.xyz;\n}", +equirect_frag:"uniform sampler2D tEquirect;\nvarying vec3 vWorldDirection;\n#include \nvoid main() {\n\tvec3 direction = normalize( vWorldDirection );\n\tvec2 sampleUV = equirectUv( direction );\n\tvec4 texColor = texture2D( tEquirect, sampleUV );\n\tgl_FragColor = mapTexelToLinear( texColor );\n\t#include \n\t#include \n}",equirect_vert:"varying vec3 vWorldDirection;\n#include \nvoid main() {\n\tvWorldDirection = transformDirection( position, modelMatrix );\n\t#include \n\t#include \n}", +linedashed_frag:"uniform vec3 diffuse;\nuniform float opacity;\nuniform float dashSize;\nuniform float totalSize;\nvarying float vLineDistance;\n#include \n#include \n#include \n#include \n#include \nvoid main() {\n\t#include \n\tif ( mod( vLineDistance, totalSize ) > dashSize ) {\n\t\tdiscard;\n\t}\n\tvec3 outgoingLight = vec3( 0.0 );\n\tvec4 diffuseColor = vec4( diffuse, opacity );\n\t#include \n\t#include \n\toutgoingLight = diffuseColor.rgb;\n\tgl_FragColor = vec4( outgoingLight, diffuseColor.a );\n\t#include \n\t#include \n\t#include \n\t#include \n}", +linedashed_vert:"uniform float scale;\nattribute float lineDistance;\nvarying float vLineDistance;\n#include \n#include \n#include \n#include \n#include \n#include \nvoid main() {\n\tvLineDistance = scale * lineDistance;\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n}", +meshbasic_frag:"uniform vec3 diffuse;\nuniform float opacity;\n#ifndef FLAT_SHADED\n\tvarying vec3 vNormal;\n#endif\n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \nvoid main() {\n\t#include \n\tvec4 diffuseColor = vec4( diffuse, opacity );\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\tReflectedLight reflectedLight = ReflectedLight( vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ) );\n\t#ifdef USE_LIGHTMAP\n\t\n\t\tvec4 lightMapTexel= texture2D( lightMap, vUv2 );\n\t\treflectedLight.indirectDiffuse += lightMapTexelToLinear( lightMapTexel ).rgb * lightMapIntensity;\n\t#else\n\t\treflectedLight.indirectDiffuse += vec3( 1.0 );\n\t#endif\n\t#include \n\treflectedLight.indirectDiffuse *= diffuseColor.rgb;\n\tvec3 outgoingLight = reflectedLight.indirectDiffuse;\n\t#include \n\tgl_FragColor = vec4( outgoingLight, diffuseColor.a );\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n}", +meshbasic_vert:"#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \nvoid main() {\n\t#include \n\t#include \n\t#include \n\t#include \n\t#ifdef USE_ENVMAP\n\t#include \n\t#include \n\t#include \n\t#include \n\t#endif\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n}", +meshlambert_frag:"uniform vec3 diffuse;\nuniform vec3 emissive;\nuniform float opacity;\nvarying vec3 vLightFront;\nvarying vec3 vIndirectFront;\n#ifdef DOUBLE_SIDED\n\tvarying vec3 vLightBack;\n\tvarying vec3 vIndirectBack;\n#endif\n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \nvoid main() {\n\t#include \n\tvec4 diffuseColor = vec4( diffuse, opacity );\n\tReflectedLight reflectedLight = ReflectedLight( vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ) );\n\tvec3 totalEmissiveRadiance = emissive;\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#ifdef DOUBLE_SIDED\n\t\treflectedLight.indirectDiffuse += ( gl_FrontFacing ) ? vIndirectFront : vIndirectBack;\n\t#else\n\t\treflectedLight.indirectDiffuse += vIndirectFront;\n\t#endif\n\t#include \n\treflectedLight.indirectDiffuse *= BRDF_Diffuse_Lambert( diffuseColor.rgb );\n\t#ifdef DOUBLE_SIDED\n\t\treflectedLight.directDiffuse = ( gl_FrontFacing ) ? vLightFront : vLightBack;\n\t#else\n\t\treflectedLight.directDiffuse = vLightFront;\n\t#endif\n\treflectedLight.directDiffuse *= BRDF_Diffuse_Lambert( diffuseColor.rgb ) * getShadowMask();\n\t#include \n\tvec3 outgoingLight = reflectedLight.directDiffuse + reflectedLight.indirectDiffuse + totalEmissiveRadiance;\n\t#include \n\tgl_FragColor = vec4( outgoingLight, diffuseColor.a );\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n}", +meshlambert_vert:"#define LAMBERT\nvarying vec3 vLightFront;\nvarying vec3 vIndirectFront;\n#ifdef DOUBLE_SIDED\n\tvarying vec3 vLightBack;\n\tvarying vec3 vIndirectBack;\n#endif\n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \nvoid main() {\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n}", +meshmatcap_frag:"#define MATCAP\nuniform vec3 diffuse;\nuniform float opacity;\nuniform sampler2D matcap;\nvarying vec3 vViewPosition;\n#ifndef FLAT_SHADED\n\tvarying vec3 vNormal;\n#endif\n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \nvoid main() {\n\t#include \n\tvec4 diffuseColor = vec4( diffuse, opacity );\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\tvec3 viewDir = normalize( vViewPosition );\n\tvec3 x = normalize( vec3( viewDir.z, 0.0, - viewDir.x ) );\n\tvec3 y = cross( viewDir, x );\n\tvec2 uv = vec2( dot( x, normal ), dot( y, normal ) ) * 0.495 + 0.5;\n\t#ifdef USE_MATCAP\n\t\tvec4 matcapColor = texture2D( matcap, uv );\n\t\tmatcapColor = matcapTexelToLinear( matcapColor );\n\t#else\n\t\tvec4 matcapColor = vec4( 1.0 );\n\t#endif\n\tvec3 outgoingLight = diffuseColor.rgb * matcapColor.rgb;\n\tgl_FragColor = vec4( outgoingLight, diffuseColor.a );\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n}", +meshmatcap_vert:"#define MATCAP\nvarying vec3 vViewPosition;\n#ifndef FLAT_SHADED\n\tvarying vec3 vNormal;\n#endif\n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \nvoid main() {\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#ifndef FLAT_SHADED\n\t\tvNormal = normalize( transformedNormal );\n\t#endif\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\tvViewPosition = - mvPosition.xyz;\n}", +meshtoon_frag:"#define TOON\nuniform vec3 diffuse;\nuniform vec3 emissive;\nuniform float opacity;\n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \nvoid main() {\n\t#include \n\tvec4 diffuseColor = vec4( diffuse, opacity );\n\tReflectedLight reflectedLight = ReflectedLight( vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ) );\n\tvec3 totalEmissiveRadiance = emissive;\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\tvec3 outgoingLight = reflectedLight.directDiffuse + reflectedLight.indirectDiffuse + totalEmissiveRadiance;\n\tgl_FragColor = vec4( outgoingLight, diffuseColor.a );\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n}", +meshtoon_vert:"#define TOON\nvarying vec3 vViewPosition;\n#ifndef FLAT_SHADED\n\tvarying vec3 vNormal;\n#endif\n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \nvoid main() {\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n#ifndef FLAT_SHADED\n\tvNormal = normalize( transformedNormal );\n#endif\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\tvViewPosition = - mvPosition.xyz;\n\t#include \n\t#include \n\t#include \n}", +meshphong_frag:"#define PHONG\nuniform vec3 diffuse;\nuniform vec3 emissive;\nuniform vec3 specular;\nuniform float shininess;\nuniform float opacity;\n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \nvoid main() {\n\t#include \n\tvec4 diffuseColor = vec4( diffuse, opacity );\n\tReflectedLight reflectedLight = ReflectedLight( vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ) );\n\tvec3 totalEmissiveRadiance = emissive;\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\tvec3 outgoingLight = reflectedLight.directDiffuse + reflectedLight.indirectDiffuse + reflectedLight.directSpecular + reflectedLight.indirectSpecular + totalEmissiveRadiance;\n\t#include \n\tgl_FragColor = vec4( outgoingLight, diffuseColor.a );\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n}", +meshphong_vert:"#define PHONG\nvarying vec3 vViewPosition;\n#ifndef FLAT_SHADED\n\tvarying vec3 vNormal;\n#endif\n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \nvoid main() {\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n#ifndef FLAT_SHADED\n\tvNormal = normalize( transformedNormal );\n#endif\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\tvViewPosition = - mvPosition.xyz;\n\t#include \n\t#include \n\t#include \n\t#include \n}", +meshphysical_frag:"#define STANDARD\n#ifdef PHYSICAL\n\t#define REFLECTIVITY\n\t#define CLEARCOAT\n\t#define TRANSMISSION\n#endif\nuniform vec3 diffuse;\nuniform vec3 emissive;\nuniform float roughness;\nuniform float metalness;\nuniform float opacity;\n#ifdef TRANSMISSION\n\tuniform float transmission;\n#endif\n#ifdef REFLECTIVITY\n\tuniform float reflectivity;\n#endif\n#ifdef CLEARCOAT\n\tuniform float clearcoat;\n\tuniform float clearcoatRoughness;\n#endif\n#ifdef USE_SHEEN\n\tuniform vec3 sheen;\n#endif\nvarying vec3 vViewPosition;\n#ifndef FLAT_SHADED\n\tvarying vec3 vNormal;\n\t#ifdef USE_TANGENT\n\t\tvarying vec3 vTangent;\n\t\tvarying vec3 vBitangent;\n\t#endif\n#endif\n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \nvoid main() {\n\t#include \n\tvec4 diffuseColor = vec4( diffuse, opacity );\n\tReflectedLight reflectedLight = ReflectedLight( vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ) );\n\tvec3 totalEmissiveRadiance = emissive;\n\t#ifdef TRANSMISSION\n\t\tfloat totalTransmission = transmission;\n\t#endif\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\tvec3 outgoingLight = reflectedLight.directDiffuse + reflectedLight.indirectDiffuse + reflectedLight.directSpecular + reflectedLight.indirectSpecular + totalEmissiveRadiance;\n\t#ifdef TRANSMISSION\n\t\tdiffuseColor.a *= saturate( 1. - totalTransmission + linearToRelativeLuminance( reflectedLight.directSpecular + reflectedLight.indirectSpecular ) );\n\t#endif\n\tgl_FragColor = vec4( outgoingLight, diffuseColor.a );\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n}", +meshphysical_vert:"#define STANDARD\nvarying vec3 vViewPosition;\n#ifndef FLAT_SHADED\n\tvarying vec3 vNormal;\n\t#ifdef USE_TANGENT\n\t\tvarying vec3 vTangent;\n\t\tvarying vec3 vBitangent;\n\t#endif\n#endif\n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \nvoid main() {\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n#ifndef FLAT_SHADED\n\tvNormal = normalize( transformedNormal );\n\t#ifdef USE_TANGENT\n\t\tvTangent = normalize( transformedTangent );\n\t\tvBitangent = normalize( cross( vNormal, vTangent ) * tangent.w );\n\t#endif\n#endif\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\tvViewPosition = - mvPosition.xyz;\n\t#include \n\t#include \n\t#include \n}", +normal_frag:"#define NORMAL\nuniform float opacity;\n#if defined( FLAT_SHADED ) || defined( USE_BUMPMAP ) || defined( TANGENTSPACE_NORMALMAP )\n\tvarying vec3 vViewPosition;\n#endif\n#ifndef FLAT_SHADED\n\tvarying vec3 vNormal;\n\t#ifdef USE_TANGENT\n\t\tvarying vec3 vTangent;\n\t\tvarying vec3 vBitangent;\n\t#endif\n#endif\n#include \n#include \n#include \n#include \n#include \n#include \nvoid main() {\n\t#include \n\t#include \n\t#include \n\t#include \n\tgl_FragColor = vec4( packNormalToRGB( normal ), opacity );\n}", +normal_vert:"#define NORMAL\n#if defined( FLAT_SHADED ) || defined( USE_BUMPMAP ) || defined( TANGENTSPACE_NORMALMAP )\n\tvarying vec3 vViewPosition;\n#endif\n#ifndef FLAT_SHADED\n\tvarying vec3 vNormal;\n\t#ifdef USE_TANGENT\n\t\tvarying vec3 vTangent;\n\t\tvarying vec3 vBitangent;\n\t#endif\n#endif\n#include \n#include \n#include \n#include \n#include \n#include \n#include \nvoid main() {\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n#ifndef FLAT_SHADED\n\tvNormal = normalize( transformedNormal );\n\t#ifdef USE_TANGENT\n\t\tvTangent = normalize( transformedTangent );\n\t\tvBitangent = normalize( cross( vNormal, vTangent ) * tangent.w );\n\t#endif\n#endif\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n#if defined( FLAT_SHADED ) || defined( USE_BUMPMAP ) || defined( TANGENTSPACE_NORMALMAP )\n\tvViewPosition = - mvPosition.xyz;\n#endif\n}", +points_frag:"uniform vec3 diffuse;\nuniform float opacity;\n#include \n#include \n#include \n#include \n#include \n#include \nvoid main() {\n\t#include \n\tvec3 outgoingLight = vec3( 0.0 );\n\tvec4 diffuseColor = vec4( diffuse, opacity );\n\t#include \n\t#include \n\t#include \n\t#include \n\toutgoingLight = diffuseColor.rgb;\n\tgl_FragColor = vec4( outgoingLight, diffuseColor.a );\n\t#include \n\t#include \n\t#include \n\t#include \n}", +points_vert:"uniform float size;\nuniform float scale;\n#include \n#include \n#include \n#include \n#include \n#include \nvoid main() {\n\t#include \n\t#include \n\t#include \n\t#include \n\tgl_PointSize = size;\n\t#ifdef USE_SIZEATTENUATION\n\t\tbool isPerspective = isPerspectiveMatrix( projectionMatrix );\n\t\tif ( isPerspective ) gl_PointSize *= ( scale / - mvPosition.z );\n\t#endif\n\t#include \n\t#include \n\t#include \n\t#include \n}", +shadow_frag:"uniform vec3 color;\nuniform float opacity;\n#include \n#include \n#include \n#include \n#include \n#include \n#include \nvoid main() {\n\tgl_FragColor = vec4( color, opacity * ( 1.0 - getShadowMask() ) );\n\t#include \n\t#include \n\t#include \n}",shadow_vert:"#include \n#include \n#include \nvoid main() {\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n}", +sprite_frag:"uniform vec3 diffuse;\nuniform float opacity;\n#include \n#include \n#include \n#include \n#include \n#include \n#include \nvoid main() {\n\t#include \n\tvec3 outgoingLight = vec3( 0.0 );\n\tvec4 diffuseColor = vec4( diffuse, opacity );\n\t#include \n\t#include \n\t#include \n\t#include \n\toutgoingLight = diffuseColor.rgb;\n\tgl_FragColor = vec4( outgoingLight, diffuseColor.a );\n\t#include \n\t#include \n\t#include \n}", +sprite_vert:"uniform float rotation;\nuniform vec2 center;\n#include \n#include \n#include \n#include \n#include \nvoid main() {\n\t#include \n\tvec4 mvPosition = modelViewMatrix * vec4( 0.0, 0.0, 0.0, 1.0 );\n\tvec2 scale;\n\tscale.x = length( vec3( modelMatrix[ 0 ].x, modelMatrix[ 0 ].y, modelMatrix[ 0 ].z ) );\n\tscale.y = length( vec3( modelMatrix[ 1 ].x, modelMatrix[ 1 ].y, modelMatrix[ 1 ].z ) );\n\t#ifndef USE_SIZEATTENUATION\n\t\tbool isPerspective = isPerspectiveMatrix( projectionMatrix );\n\t\tif ( isPerspective ) scale *= - mvPosition.z;\n\t#endif\n\tvec2 alignedPosition = ( position.xy - ( center - vec2( 0.5 ) ) ) * scale;\n\tvec2 rotatedPosition;\n\trotatedPosition.x = cos( rotation ) * alignedPosition.x - sin( rotation ) * alignedPosition.y;\n\trotatedPosition.y = sin( rotation ) * alignedPosition.x + cos( rotation ) * alignedPosition.y;\n\tmvPosition.xy += rotatedPosition;\n\tgl_Position = projectionMatrix * mvPosition;\n\t#include \n\t#include \n\t#include \n}"}, +Ua={basic:{uniforms:Aa([G.common,G.specularmap,G.envmap,G.aomap,G.lightmap,G.fog]),vertexShader:O.meshbasic_vert,fragmentShader:O.meshbasic_frag},lambert:{uniforms:Aa([G.common,G.specularmap,G.envmap,G.aomap,G.lightmap,G.emissivemap,G.fog,G.lights,{emissive:{value:new H(0)}}]),vertexShader:O.meshlambert_vert,fragmentShader:O.meshlambert_frag},phong:{uniforms:Aa([G.common,G.specularmap,G.envmap,G.aomap,G.lightmap,G.emissivemap,G.bumpmap,G.normalmap,G.displacementmap,G.fog,G.lights,{emissive:{value:new H(0)}, +specular:{value:new H(1118481)},shininess:{value:30}}]),vertexShader:O.meshphong_vert,fragmentShader:O.meshphong_frag},standard:{uniforms:Aa([G.common,G.envmap,G.aomap,G.lightmap,G.emissivemap,G.bumpmap,G.normalmap,G.displacementmap,G.roughnessmap,G.metalnessmap,G.fog,G.lights,{emissive:{value:new H(0)},roughness:{value:1},metalness:{value:0},envMapIntensity:{value:1}}]),vertexShader:O.meshphysical_vert,fragmentShader:O.meshphysical_frag},toon:{uniforms:Aa([G.common,G.aomap,G.lightmap,G.emissivemap, +G.bumpmap,G.normalmap,G.displacementmap,G.gradientmap,G.fog,G.lights,{emissive:{value:new H(0)}}]),vertexShader:O.meshtoon_vert,fragmentShader:O.meshtoon_frag},matcap:{uniforms:Aa([G.common,G.bumpmap,G.normalmap,G.displacementmap,G.fog,{matcap:{value:null}}]),vertexShader:O.meshmatcap_vert,fragmentShader:O.meshmatcap_frag},points:{uniforms:Aa([G.points,G.fog]),vertexShader:O.points_vert,fragmentShader:O.points_frag},dashed:{uniforms:Aa([G.common,G.fog,{scale:{value:1},dashSize:{value:1},totalSize:{value:2}}]), +vertexShader:O.linedashed_vert,fragmentShader:O.linedashed_frag},depth:{uniforms:Aa([G.common,G.displacementmap]),vertexShader:O.depth_vert,fragmentShader:O.depth_frag},normal:{uniforms:Aa([G.common,G.bumpmap,G.normalmap,G.displacementmap,{opacity:{value:1}}]),vertexShader:O.normal_vert,fragmentShader:O.normal_frag},sprite:{uniforms:Aa([G.sprite,G.fog]),vertexShader:O.sprite_vert,fragmentShader:O.sprite_frag},background:{uniforms:{uvTransform:{value:new qa},t2D:{value:null}},vertexShader:O.background_vert, +fragmentShader:O.background_frag},cube:{uniforms:Aa([G.envmap,{opacity:{value:1}}]),vertexShader:O.cube_vert,fragmentShader:O.cube_frag},equirect:{uniforms:{tEquirect:{value:null}},vertexShader:O.equirect_vert,fragmentShader:O.equirect_frag},distanceRGBA:{uniforms:Aa([G.common,G.displacementmap,{referencePosition:{value:new m},nearDistance:{value:1},farDistance:{value:1E3}}]),vertexShader:O.distanceRGBA_vert,fragmentShader:O.distanceRGBA_frag},shadow:{uniforms:Aa([G.lights,G.fog,{color:{value:new H(0)}, +opacity:{value:1}}]),vertexShader:O.shadow_vert,fragmentShader:O.shadow_frag}};Ua.physical={uniforms:Aa([Ua.standard.uniforms,{clearcoat:{value:0},clearcoatMap:{value:null},clearcoatRoughness:{value:0},clearcoatRoughnessMap:{value:null},clearcoatNormalScale:{value:new u(1,1)},clearcoatNormalMap:{value:null},sheen:{value:new H(0)},transmission:{value:0},transmissionMap:{value:null}}]),vertexShader:O.meshphysical_vert,fragmentShader:O.meshphysical_frag};ob.prototype=Object.create(V.prototype);ob.prototype.constructor= +ob;ob.prototype.isCubeTexture=!0;Object.defineProperty(ob.prototype,"images",{get:function(){return this.image},set:function(a){this.image=a}});Kc.prototype=Object.create(V.prototype);Kc.prototype.constructor=Kc;Kc.prototype.isDataTexture2DArray=!0;Lc.prototype=Object.create(V.prototype);Lc.prototype.constructor=Lc;Lc.prototype.isDataTexture3D=!0;var Dh=new V,Hj=new Kc,Jj=new Lc,Eh=new ob,xh=[],zh=[],Ch=new Float32Array(16),Bh=new Float32Array(9),Ah=new Float32Array(4);Fh.prototype.updateCache=function(a){var b= +this.cache;a instanceof Float32Array&&b.length!==a.length&&(this.cache=new Float32Array(a.length));Fa(b,a)};Gh.prototype.setValue=function(a,b,c){for(var d=this.seq,e=0,f=d.length;e!==f;++e){var g=d[e];g.setValue(a,b[g.id],c)}};var ig=/([\w\d_]+)(\])?(\[|\.)?/g;Cb.prototype.setValue=function(a,b,c,d){b=this.map[b];void 0!==b&&b.setValue(a,c,d)};Cb.prototype.setOptional=function(a,b,c){b=b[c];void 0!==b&&this.setValue(a,c,b)};Cb.upload=function(a,b,c,d){for(var e=0,f=b.length;e!==f;++e){var g=b[e], +h=c[g.id];!1!==h.needsUpdate&&g.setValue(a,h.value,d)}};Cb.seqWithValue=function(a,b){for(var c=[],d=0,e=a.length;d!==e;++d){var f=a[d];f.id in b&&c.push(f)}return c};var ok=0,kg=/^[ \t]*#include +<([\w\d./]+)>/gm,Ph=/#pragma unroll_loop[\s]+?for \( int i = (\d+); i < (\d+); i \+\+ \) \{([\s\S]+?)(?=\})\}/g,Oh=/#pragma unroll_loop_start[\s]+?for \( int i = (\d+); i < (\d+); i \+\+ \) \{([\s\S]+?)(?=\})\}[\s]+?#pragma unroll_loop_end/g,yk=0;Db.prototype=Object.create(L.prototype);Db.prototype.constructor= +Db;Db.prototype.isMeshDepthMaterial=!0;Db.prototype.copy=function(a){L.prototype.copy.call(this,a);this.depthPacking=a.depthPacking;this.skinning=a.skinning;this.morphTargets=a.morphTargets;this.map=a.map;this.alphaMap=a.alphaMap;this.displacementMap=a.displacementMap;this.displacementScale=a.displacementScale;this.displacementBias=a.displacementBias;this.wireframe=a.wireframe;this.wireframeLinewidth=a.wireframeLinewidth;return this};Eb.prototype=Object.create(L.prototype);Eb.prototype.constructor= +Eb;Eb.prototype.isMeshDistanceMaterial=!0;Eb.prototype.copy=function(a){L.prototype.copy.call(this,a);this.referencePosition.copy(a.referencePosition);this.nearDistance=a.nearDistance;this.farDistance=a.farDistance;this.skinning=a.skinning;this.morphTargets=a.morphTargets;this.map=a.map;this.alphaMap=a.alphaMap;this.displacementMap=a.displacementMap;this.displacementScale=a.displacementScale;this.displacementBias=a.displacementBias;return this};Ne.prototype=Object.assign(Object.create(W.prototype), +{constructor:Ne,isArrayCamera:!0});Gb.prototype=Object.assign(Object.create(C.prototype),{constructor:Gb,isGroup:!0});Object.assign(Md.prototype,{constructor:Md,getHandSpace:function(){if(null===this._hand&&(this._hand=new Gb,this._hand.matrixAutoUpdate=!1,this._hand.visible=!1,this._hand.joints=[],this._hand.inputState={pinching:!1},window.XRHand))for(var a=0;a<=window.XRHand.LITTLE_PHALANX_TIP;a++){var b=new Gb;b.matrixAutoUpdate=!1;b.visible=!1;this._hand.joints.push(b);this._hand.add(b)}return this._hand}, +getTargetRaySpace:function(){null===this._targetRay&&(this._targetRay=new Gb,this._targetRay.matrixAutoUpdate=!1,this._targetRay.visible=!1);return this._targetRay},getGripSpace:function(){null===this._grip&&(this._grip=new Gb,this._grip.matrixAutoUpdate=!1,this._grip.visible=!1);return this._grip},dispatchEvent:function(a){null!==this._targetRay&&this._targetRay.dispatchEvent(a);null!==this._grip&&this._grip.dispatchEvent(a);null!==this._hand&&this._hand.dispatchEvent(a);return this},disconnect:function(a){this.dispatchEvent({type:"disconnected", +data:a});null!==this._targetRay&&(this._targetRay.visible=!1);null!==this._grip&&(this._grip.visible=!1);null!==this._hand&&(this._hand.visible=!1);return this},update:function(a,b,c){var d=null,e=null,f=null,g=this._targetRay,h=this._grip,l=this._hand;if(a)if(a.hand){f=!0;for(var k=0;k<=window.XRHand.LITTLE_PHALANX_TIP;k++)if(a.hand[k]){var q=b.getJointPose(a.hand[k],c),p=l.joints[k];null!==q&&(p.matrix.fromArray(q.transform.matrix),p.matrix.decompose(p.position,p.rotation,p.scale),p.jointRadius= +q.radius);p.visible=null!==q;q=l.joints[window.XRHand.INDEX_PHALANX_TIP].position.distanceTo(l.joints[window.XRHand.THUMB_PHALANX_TIP].position);l.inputState.pinching&&.025=q&&(l.inputState.pinching=!0,this.dispatchEvent({type:"pinchstart",handedness:a.handedness,target:this}))}}else null!==g&&(d=b.getPose(a.targetRaySpace,c),null!==d&&(g.matrix.fromArray(d.transform.matrix), +g.matrix.decompose(g.position,g.rotation,g.scale))),null!==h&&a.gripSpace&&(e=b.getPose(a.gripSpace,c),null!==e&&(h.matrix.fromArray(e.transform.matrix),h.matrix.decompose(h.position,h.rotation,h.scale)));null!==g&&(g.visible=null!==d);null!==h&&(h.visible=null!==e);null!==l&&(l.visible=null!==f);return this}});Object.assign(Vh.prototype,Ea.prototype);og.prototype=Object.assign(Object.create(Nd.prototype),{constructor:og,isWebGL1Renderer:!0});Object.assign(Oe.prototype,{isFogExp2:!0,clone:function(){return new Oe(this.color, +this.density)},toJSON:function(){return{type:"FogExp2",color:this.color.getHex(),density:this.density}}});Object.assign(Pe.prototype,{isFog:!0,clone:function(){return new Pe(this.color,this.near,this.far)},toJSON:function(){return{type:"Fog",color:this.color.getHex(),near:this.near,far:this.far}}});Object.defineProperty(Ba.prototype,"needsUpdate",{set:function(a){!0===a&&this.version++}});Object.assign(Ba.prototype,{isInterleavedBuffer:!0,onUploadCallback:function(){},setUsage:function(a){this.usage= +a;return this},copy:function(a){this.array=new a.array.constructor(a.array);this.count=a.count;this.stride=a.stride;this.usage=a.usage;return this},copyAt:function(a,b,c){a*=this.stride;c*=b.stride;for(var d=0,e=this.stride;da.far||b.push({distance:e,point:Be.clone(),uv:ba.getUV(Be,Lf,Ce,Mf,Di,jh,Ei,new u),face:null,object:this})},copy:function(a){C.prototype.copy.call(this,a);void 0!==a.center&&this.center.copy(a.center);this.material=a.material;return this}});var Nf=new m,Fi=new m;Qd.prototype=Object.assign(Object.create(C.prototype),{constructor:Qd, +isLOD:!0,copy:function(a){C.prototype.copy.call(this,a,!1);for(var b=a.levels,c=0,d=b.length;c=b[d].distance)b[d-1].object.visible= +!1,b[d].object.visible=!0;else break;for(this._currentLevel=d-1;df;f++)if(l=c.getComponent(f),0!==l){var k=b.getComponent(f);e.multiplyMatrices(h.bones[k].matrixWorld,h.boneInverses[k]);g.addScaledVector(d.copy(a).applyMatrix4(e),l)}return g.applyMatrix4(this.bindMatrixInverse)}}()});var Gi=new U,Tk=new U;Object.assign(Se.prototype, +{calculateInverses:function(){this.boneInverses=[];for(var a=0,b=this.bones.length;ad||(h.applyMatrix4(this.matrixWorld),z=a.ray.origin.distanceTo(h),za.far||b.push({distance:z,point:e.clone().applyMatrix4(this.matrixWorld),index:q,face:null,faceIndex:null,object:this}))}}else for(k=0,q=c.length/3-1;kd||(h.applyMatrix4(this.matrixWorld),p=a.ray.origin.distanceTo(h),pa.far||b.push({distance:p,point:e.clone().applyMatrix4(this.matrixWorld),index:k,face:null,faceIndex:null,object:this}))}else if(c.isGeometry)for(f= +c.vertices,g=f.length,c=0;cd||(h.applyMatrix4(this.matrixWorld),k=a.ray.origin.distanceTo(h),ka.far||b.push({distance:k,point:e.clone().applyMatrix4(this.matrixWorld),index:c,face:null,faceIndex:null,object:this}))}},updateMorphTargets:function(){var a=this.geometry;if(a.isBufferGeometry){a=a.morphAttributes;var b=Object.keys(a);if(0=a.HAVE_CURRENT_DATA&&(this.needsUpdate=!0)}});Qc.prototype=Object.create(V.prototype);Qc.prototype.constructor=Qc;Qc.prototype.isCompressedTexture= +!0;Rd.prototype=Object.create(V.prototype);Rd.prototype.constructor=Rd;Rd.prototype.isCanvasTexture=!0;Sd.prototype=Object.create(V.prototype);Sd.prototype.constructor=Sd;Sd.prototype.isDepthTexture=!0;Rc.prototype=Object.create(E.prototype);Rc.prototype.constructor=Rc;Td.prototype=Object.create(F.prototype);Td.prototype.constructor=Td;Sc.prototype=Object.create(E.prototype);Sc.prototype.constructor=Sc;Ud.prototype=Object.create(F.prototype);Ud.prototype.constructor=Ud;sa.prototype=Object.create(E.prototype); +sa.prototype.constructor=sa;Vd.prototype=Object.create(F.prototype);Vd.prototype.constructor=Vd;Tc.prototype=Object.create(sa.prototype);Tc.prototype.constructor=Tc;Wd.prototype=Object.create(F.prototype);Wd.prototype.constructor=Wd;ec.prototype=Object.create(sa.prototype);ec.prototype.constructor=ec;Xd.prototype=Object.create(F.prototype);Xd.prototype.constructor=Xd;Uc.prototype=Object.create(sa.prototype);Uc.prototype.constructor=Uc;Yd.prototype=Object.create(F.prototype);Yd.prototype.constructor= +Yd;Vc.prototype=Object.create(sa.prototype);Vc.prototype.constructor=Vc;Zd.prototype=Object.create(F.prototype);Zd.prototype.constructor=Zd;fc.prototype=Object.create(E.prototype);fc.prototype.constructor=fc;fc.prototype.toJSON=function(){var a=E.prototype.toJSON.call(this);a.path=this.parameters.path.toJSON();return a};$d.prototype=Object.create(F.prototype);$d.prototype.constructor=$d;Wc.prototype=Object.create(E.prototype);Wc.prototype.constructor=Wc;ae.prototype=Object.create(F.prototype);ae.prototype.constructor= +ae;Xc.prototype=Object.create(E.prototype);Xc.prototype.constructor=Xc;var Uk={triangulate:function(a,b,c){c=c||2;var d=b&&b.length,e=d?b[0]*c:a.length,f=Yh(a,0,e,c,!0),g=[];if(!f||f.next===f.prev)return g;var h;if(d){var l=c;d=[];var k;var q=0;for(k=b.length;q80*c){var r= +h=a[0];var t=d=a[1];for(l=c;lh&&(h=q),b>d&&(d=b);h=Math.max(h-r,d-t);h=0!==h?1/h:0}ce(f,g,c,r,t,h);return g}},pb={area:function(a){for(var b=a.length,c=0,d=b-1,e=0;epb.area(a)},triangulateShape:function(a,b){var c=[],d=[],e=[];bi(a);ci(c,a);a=a.length;b.forEach(bi);for(var f=0;fMath.abs(g-l)?[new u(a,1-c),new u(h,1-d),new u(k,1-e),new u(p,1-b)]:[new u(g,1-c),new u(l,1-d),new u(q,1-e),new u(m,1-b)]}};ee.prototype=Object.create(F.prototype);ee.prototype.constructor=ee;Zc.prototype=Object.create(eb.prototype);Zc.prototype.constructor= +Zc;fe.prototype=Object.create(F.prototype);fe.prototype.constructor=fe;hc.prototype=Object.create(E.prototype);hc.prototype.constructor=hc;ge.prototype=Object.create(F.prototype);ge.prototype.constructor=ge;$c.prototype=Object.create(E.prototype);$c.prototype.constructor=$c;he.prototype=Object.create(F.prototype);he.prototype.constructor=he;ad.prototype=Object.create(E.prototype);ad.prototype.constructor=ad;ic.prototype=Object.create(F.prototype);ic.prototype.constructor=ic;ic.prototype.toJSON=function(){var a= +F.prototype.toJSON.call(this);return ei(this.parameters.shapes,a)};jc.prototype=Object.create(E.prototype);jc.prototype.constructor=jc;jc.prototype.toJSON=function(){var a=E.prototype.toJSON.call(this);return ei(this.parameters.shapes,a)};bd.prototype=Object.create(E.prototype);bd.prototype.constructor=bd;kc.prototype=Object.create(F.prototype);kc.prototype.constructor=kc;qb.prototype=Object.create(E.prototype);qb.prototype.constructor=qb;ie.prototype=Object.create(kc.prototype);ie.prototype.constructor= +ie;je.prototype=Object.create(qb.prototype);je.prototype.constructor=je;ke.prototype=Object.create(F.prototype);ke.prototype.constructor=ke;cd.prototype=Object.create(E.prototype);cd.prototype.constructor=cd;var Da=Object.freeze({__proto__:null,WireframeGeometry:Rc,ParametricGeometry:Td,ParametricBufferGeometry:Sc,TetrahedronGeometry:Vd,TetrahedronBufferGeometry:Tc,OctahedronGeometry:Wd,OctahedronBufferGeometry:ec,IcosahedronGeometry:Xd,IcosahedronBufferGeometry:Uc,DodecahedronGeometry:Yd,DodecahedronBufferGeometry:Vc, +PolyhedronGeometry:Ud,PolyhedronBufferGeometry:sa,TubeGeometry:Zd,TubeBufferGeometry:fc,TorusKnotGeometry:$d,TorusKnotBufferGeometry:Wc,TorusGeometry:ae,TorusBufferGeometry:Xc,TextGeometry:ee,TextBufferGeometry:Zc,SphereGeometry:fe,SphereBufferGeometry:hc,RingGeometry:ge,RingBufferGeometry:$c,PlaneGeometry:Id,PlaneBufferGeometry:cc,LatheGeometry:he,LatheBufferGeometry:ad,ShapeGeometry:ic,ShapeBufferGeometry:jc,ExtrudeGeometry:gc,ExtrudeBufferGeometry:eb,EdgesGeometry:bd,ConeGeometry:ie,ConeBufferGeometry:je, +CylinderGeometry:kc,CylinderBufferGeometry:qb,CircleGeometry:ke,CircleBufferGeometry:cd,BoxGeometry:Gc,BoxBufferGeometry:Bb});lc.prototype=Object.create(L.prototype);lc.prototype.constructor=lc;lc.prototype.isShadowMaterial=!0;lc.prototype.copy=function(a){L.prototype.copy.call(this,a);this.color.copy(a.color);return this};rb.prototype=Object.create(ra.prototype);rb.prototype.constructor=rb;rb.prototype.isRawShaderMaterial=!0;fb.prototype=Object.create(L.prototype);fb.prototype.constructor=fb;fb.prototype.isMeshStandardMaterial= +!0;fb.prototype.copy=function(a){L.prototype.copy.call(this,a);this.defines={STANDARD:""};this.color.copy(a.color);this.roughness=a.roughness;this.metalness=a.metalness;this.map=a.map;this.lightMap=a.lightMap;this.lightMapIntensity=a.lightMapIntensity;this.aoMap=a.aoMap;this.aoMapIntensity=a.aoMapIntensity;this.emissive.copy(a.emissive);this.emissiveMap=a.emissiveMap;this.emissiveIntensity=a.emissiveIntensity;this.bumpMap=a.bumpMap;this.bumpScale=a.bumpScale;this.normalMap=a.normalMap;this.normalMapType= +a.normalMapType;this.normalScale.copy(a.normalScale);this.displacementMap=a.displacementMap;this.displacementScale=a.displacementScale;this.displacementBias=a.displacementBias;this.roughnessMap=a.roughnessMap;this.metalnessMap=a.metalnessMap;this.alphaMap=a.alphaMap;this.envMap=a.envMap;this.envMapIntensity=a.envMapIntensity;this.refractionRatio=a.refractionRatio;this.wireframe=a.wireframe;this.wireframeLinewidth=a.wireframeLinewidth;this.wireframeLinecap=a.wireframeLinecap;this.wireframeLinejoin= +a.wireframeLinejoin;this.skinning=a.skinning;this.morphTargets=a.morphTargets;this.morphNormals=a.morphNormals;this.vertexTangents=a.vertexTangents;return this};Kb.prototype=Object.create(fb.prototype);Kb.prototype.constructor=Kb;Kb.prototype.isMeshPhysicalMaterial=!0;Kb.prototype.copy=function(a){fb.prototype.copy.call(this,a);this.defines={STANDARD:"",PHYSICAL:""};this.clearcoat=a.clearcoat;this.clearcoatMap=a.clearcoatMap;this.clearcoatRoughness=a.clearcoatRoughness;this.clearcoatRoughnessMap= +a.clearcoatRoughnessMap;this.clearcoatNormalMap=a.clearcoatNormalMap;this.clearcoatNormalScale.copy(a.clearcoatNormalScale);this.reflectivity=a.reflectivity;this.sheen=a.sheen?(this.sheen||new H).copy(a.sheen):null;this.transmission=a.transmission;this.transmissionMap=a.transmissionMap;return this};Lb.prototype=Object.create(L.prototype);Lb.prototype.constructor=Lb;Lb.prototype.isMeshPhongMaterial=!0;Lb.prototype.copy=function(a){L.prototype.copy.call(this,a);this.color.copy(a.color);this.specular.copy(a.specular); +this.shininess=a.shininess;this.map=a.map;this.lightMap=a.lightMap;this.lightMapIntensity=a.lightMapIntensity;this.aoMap=a.aoMap;this.aoMapIntensity=a.aoMapIntensity;this.emissive.copy(a.emissive);this.emissiveMap=a.emissiveMap;this.emissiveIntensity=a.emissiveIntensity;this.bumpMap=a.bumpMap;this.bumpScale=a.bumpScale;this.normalMap=a.normalMap;this.normalMapType=a.normalMapType;this.normalScale.copy(a.normalScale);this.displacementMap=a.displacementMap;this.displacementScale=a.displacementScale; +this.displacementBias=a.displacementBias;this.specularMap=a.specularMap;this.alphaMap=a.alphaMap;this.envMap=a.envMap;this.combine=a.combine;this.reflectivity=a.reflectivity;this.refractionRatio=a.refractionRatio;this.wireframe=a.wireframe;this.wireframeLinewidth=a.wireframeLinewidth;this.wireframeLinecap=a.wireframeLinecap;this.wireframeLinejoin=a.wireframeLinejoin;this.skinning=a.skinning;this.morphTargets=a.morphTargets;this.morphNormals=a.morphNormals;return this};mc.prototype=Object.create(L.prototype); +mc.prototype.constructor=mc;mc.prototype.isMeshToonMaterial=!0;mc.prototype.copy=function(a){L.prototype.copy.call(this,a);this.color.copy(a.color);this.map=a.map;this.gradientMap=a.gradientMap;this.lightMap=a.lightMap;this.lightMapIntensity=a.lightMapIntensity;this.aoMap=a.aoMap;this.aoMapIntensity=a.aoMapIntensity;this.emissive.copy(a.emissive);this.emissiveMap=a.emissiveMap;this.emissiveIntensity=a.emissiveIntensity;this.bumpMap=a.bumpMap;this.bumpScale=a.bumpScale;this.normalMap=a.normalMap;this.normalMapType= +a.normalMapType;this.normalScale.copy(a.normalScale);this.displacementMap=a.displacementMap;this.displacementScale=a.displacementScale;this.displacementBias=a.displacementBias;this.alphaMap=a.alphaMap;this.wireframe=a.wireframe;this.wireframeLinewidth=a.wireframeLinewidth;this.wireframeLinecap=a.wireframeLinecap;this.wireframeLinejoin=a.wireframeLinejoin;this.skinning=a.skinning;this.morphTargets=a.morphTargets;this.morphNormals=a.morphNormals;return this};nc.prototype=Object.create(L.prototype); +nc.prototype.constructor=nc;nc.prototype.isMeshNormalMaterial=!0;nc.prototype.copy=function(a){L.prototype.copy.call(this,a);this.bumpMap=a.bumpMap;this.bumpScale=a.bumpScale;this.normalMap=a.normalMap;this.normalMapType=a.normalMapType;this.normalScale.copy(a.normalScale);this.displacementMap=a.displacementMap;this.displacementScale=a.displacementScale;this.displacementBias=a.displacementBias;this.wireframe=a.wireframe;this.wireframeLinewidth=a.wireframeLinewidth;this.skinning=a.skinning;this.morphTargets= +a.morphTargets;this.morphNormals=a.morphNormals;return this};oc.prototype=Object.create(L.prototype);oc.prototype.constructor=oc;oc.prototype.isMeshLambertMaterial=!0;oc.prototype.copy=function(a){L.prototype.copy.call(this,a);this.color.copy(a.color);this.map=a.map;this.lightMap=a.lightMap;this.lightMapIntensity=a.lightMapIntensity;this.aoMap=a.aoMap;this.aoMapIntensity=a.aoMapIntensity;this.emissive.copy(a.emissive);this.emissiveMap=a.emissiveMap;this.emissiveIntensity=a.emissiveIntensity;this.specularMap= +a.specularMap;this.alphaMap=a.alphaMap;this.envMap=a.envMap;this.combine=a.combine;this.reflectivity=a.reflectivity;this.refractionRatio=a.refractionRatio;this.wireframe=a.wireframe;this.wireframeLinewidth=a.wireframeLinewidth;this.wireframeLinecap=a.wireframeLinecap;this.wireframeLinejoin=a.wireframeLinejoin;this.skinning=a.skinning;this.morphTargets=a.morphTargets;this.morphNormals=a.morphNormals;return this};pc.prototype=Object.create(L.prototype);pc.prototype.constructor=pc;pc.prototype.isMeshMatcapMaterial= +!0;pc.prototype.copy=function(a){L.prototype.copy.call(this,a);this.defines={MATCAP:""};this.color.copy(a.color);this.matcap=a.matcap;this.map=a.map;this.bumpMap=a.bumpMap;this.bumpScale=a.bumpScale;this.normalMap=a.normalMap;this.normalMapType=a.normalMapType;this.normalScale.copy(a.normalScale);this.displacementMap=a.displacementMap;this.displacementScale=a.displacementScale;this.displacementBias=a.displacementBias;this.alphaMap=a.alphaMap;this.skinning=a.skinning;this.morphTargets=a.morphTargets; +this.morphNormals=a.morphNormals;return this};qc.prototype=Object.create(ja.prototype);qc.prototype.constructor=qc;qc.prototype.isLineDashedMaterial=!0;qc.prototype.copy=function(a){ja.prototype.copy.call(this,a);this.scale=a.scale;this.dashSize=a.dashSize;this.gapSize=a.gapSize;return this};var Vk=Object.freeze({__proto__:null,ShadowMaterial:lc,SpriteMaterial:Ib,RawShaderMaterial:rb,ShaderMaterial:ra,PointsMaterial:Va,MeshPhysicalMaterial:Kb,MeshStandardMaterial:fb,MeshPhongMaterial:Lb,MeshToonMaterial:mc, +MeshNormalMaterial:nc,MeshLambertMaterial:oc,MeshDepthMaterial:Db,MeshDistanceMaterial:Eb,MeshBasicMaterial:Na,MeshMatcapMaterial:pc,LineDashedMaterial:qc,LineBasicMaterial:ja,Material:L}),ka={arraySlice:function(a,b,c){return ka.isTypedArray(a)?new a.constructor(a.subarray(b,void 0!==c?c:a.length)):a.slice(b,c)},convertArray:function(a,b,c){return!a||!c&&a.constructor===b?a:"number"===typeof b.BYTES_PER_ELEMENT?new b(a):Array.prototype.slice.call(a)},isTypedArray:function(a){return ArrayBuffer.isView(a)&& +!(a instanceof DataView)},getKeyframeOrder:function(a){for(var b=a.length,c=Array(b),d=0;d!==b;++d)c[d]=d;c.sort(function(b,c){return a[b]-a[c]});return c},sortedArray:function(a,b,c){for(var d=a.length,e=new a.constructor(d),f=0,g=0;g!==d;++f)for(var h=c[f]*b,l=0;l!==b;++l)e[g++]=a[h+l];return e},flattenJSON:function(a,b,c,d){for(var e=1,f=a[0];void 0!==f&&void 0===f[d];)f=a[e++];if(void 0!==f){var g=f[d];if(void 0!==g)if(Array.isArray(g)){do g=f[d],void 0!==g&&(b.push(f.time),c.push.apply(c,g)), +f=a[e++];while(void 0!==f)}else if(void 0!==g.toArray){do g=f[d],void 0!==g&&(b.push(f.time),g.toArray(c,c.length)),f=a[e++];while(void 0!==f)}else{do g=f[d],void 0!==g&&(b.push(f.time),c.push(g)),f=a[e++];while(void 0!==f)}}},subclip:function(a,b,c,d,e){e=e||30;a=a.clone();a.name=b;b=[];for(var f=0;f=d))for(l.push(g.times[q]),p=0;pa.tracks[d].times[0]&&(c=a.tracks[d].times[0]);for(d=0;d=d)d=30;var e=a.tracks.length,f=b/d;b=function(b){var d=c.tracks[b],e=d.ValueTypeName;if("bool"!==e&&"string"!==e&&(b=a.tracks.find(function(a){return a.name=== +d.name&&a.ValueTypeName===e}),void 0!==b)){var g=d.getValueSize(),k=d.times.length-1,p=void 0;f<=d.times[0]?p=ka.arraySlice(d.values,0,d.valueSize):f>=d.times[k]?p=ka.arraySlice(d.values,k*g):(p=d.createInterpolant(),p.evaluate(f),p=p.resultBuffer);"quaternion"===e&&(new Y(p[0],p[1],p[2],p[3])).normalize().conjugate().toArray(p);k=b.times.length;for(var m=0;m=e)break a;else{f=b[1];a=e)break b}d=c;c=0}}for(;c>>1,ab;)--f;++f;if(0!==e||f!==d)e>=f&&(f=Math.max(f,1),e=f-1),a=this.getValueSize(),this.times=ka.arraySlice(c,e,f),this.values=ka.arraySlice(this.values,e*a,f*a);return this},validate:function(){var a= +!0,b=this.getValueSize();0!==b-Math.floor(b)&&(console.error("THREE.KeyframeTrack: Invalid value size in track.",this),a=!1);var c=this.times;b=this.values;var d=c.length;0===d&&(console.error("THREE.KeyframeTrack: Track is empty.",this),a=!1);for(var e=null,f=0;f!==d;f++){var g=c[f];if("number"===typeof g&&isNaN(g)){console.error("THREE.KeyframeTrack: Time is not a valid number.",this,f,g);a=!1;break}if(null!==e&&e>g){console.error("THREE.KeyframeTrack: Out of order keys.",this,f,g,e);a=!1;break}e= +g}if(void 0!==b&&ka.isTypedArray(b))for(c=0,d=b.length;c!==d;++c)if(e=b[c],isNaN(e)){console.error("THREE.KeyframeTrack: Value is not a valid number.",this,c,e);a=!1;break}return a},optimize:function(){for(var a=ka.arraySlice(this.times),b=ka.arraySlice(this.values),c=this.getValueSize(),d=2302===this.getInterpolation(),e=a.length-1,f=1,g=1;gg)e=a+1;else if(0c&&(c=0);1Number.EPSILON&&(g.normalize(),k=Math.acos(P.clamp(d[c-1].dot(d[c]),-1,1)),e[c].applyMatrix4(h.makeRotationAxis(g,k))),f[c].crossVectors(d[c],e[c]);if(!0===b)for(b=Math.acos(P.clamp(e[0].dot(e[a]),-1,1)),b/=a,0d;)d+=c;for(;d>c;)d-=c;de&&(e=1);1E-4>d&&(d=e);1E-4>k&&(k=e);kh.initNonuniformCatmullRom(f.x,g.x,h.x,c.x,d,e,k);lh.initNonuniformCatmullRom(f.y,g.y,h.y,c.y,d,e,k);mh.initNonuniformCatmullRom(f.z,g.z,h.z,c.z,d,e,k)}else"catmullrom"===this.curveType&&(kh.initCatmullRom(f.x,g.x,h.x,c.x,this.tension),lh.initCatmullRom(f.y,g.y,h.y,c.y,this.tension),mh.initCatmullRom(f.z,g.z,h.z,c.z,this.tension));b.set(kh.calc(a), +lh.calc(a),mh.calc(a));return b};za.prototype.copy=function(a){K.prototype.copy.call(this,a);this.points=[];for(var b=0,c=a.points.length;bc.length-2?c.length-1:a+1];c=c[a>c.length-3?c.length-1:a+2];b.set(gi(d,e.x,f.x,g.x,c.x),gi(d,e.y,f.y,g.y,c.y));return b};Za.prototype.copy=function(a){K.prototype.copy.call(this,a);this.points=[];for(var b=0,c=a.points.length;b=b)return b=c[a]-b,a=this.curves[a],c=a.getLength(),a.getPointAt(0=== +c?0:1-b/c);a++}return null},getLength:function(){var a=this.getCurveLengths();return a[a.length-1]},updateArcLengths:function(){this.needsUpdate=!0;this.cacheLengths=null;this.getCurveLengths()},getCurveLengths:function(){if(this.cacheLengths&&this.cacheLengths.length===this.curves.length)return this.cacheLengths;for(var a=[],b=0,c=0,d=this.curves.length;cb;b++)this.coefficients[b].copy(a[b]);return this},zero:function(){for(var a=0;9>a;a++)this.coefficients[a].set(0,0,0);return this},getAt:function(a,b){var c=a.x,d=a.y;a=a.z;var e=this.coefficients; +b.copy(e[0]).multiplyScalar(.282095);b.addScaledVector(e[1],.488603*d);b.addScaledVector(e[2],.488603*a);b.addScaledVector(e[3],.488603*c);b.addScaledVector(e[4],1.092548*c*d);b.addScaledVector(e[5],1.092548*d*a);b.addScaledVector(e[6],.315392*(3*a*a-1));b.addScaledVector(e[7],1.092548*c*a);b.addScaledVector(e[8],.546274*(c*c-d*d));return b},getIrradianceAt:function(a,b){var c=a.x,d=a.y;a=a.z;var e=this.coefficients;b.copy(e[0]).multiplyScalar(.886227);b.addScaledVector(e[1],1.023328*d);b.addScaledVector(e[2], +1.023328*a);b.addScaledVector(e[3],1.023328*c);b.addScaledVector(e[4],.858086*c*d);b.addScaledVector(e[5],.858086*d*a);b.addScaledVector(e[6],.743125*a*a-.247708);b.addScaledVector(e[7],.858086*c*a);b.addScaledVector(e[8],.429043*(c*c-d*d));return b},add:function(a){for(var b=0;9>b;b++)this.coefficients[b].add(a.coefficients[b]);return this},addScaledSH:function(a,b){for(var c=0;9>c;c++)this.coefficients[c].addScaledVector(a.coefficients[c],b);return this},scale:function(a){for(var b=0;9>b;b++)this.coefficients[b].multiplyScalar(a); +return this},lerp:function(a,b){for(var c=0;9>c;c++)this.coefficients[c].lerp(a.coefficients[c],b);return this},equals:function(a){for(var b=0;9>b;b++)if(!this.coefficients[b].equals(a.coefficients[b]))return!1;return!0},copy:function(a){return this.set(a.coefficients)},clone:function(){return(new this.constructor).copy(this)},fromArray:function(a,b){void 0===b&&(b=0);for(var c=this.coefficients,d=0;9>d;d++)c[d].fromArray(a,b+3*d);return this},toArray:function(a,b){void 0===a&&(a=[]);void 0===b&& +(b=0);for(var c=this.coefficients,d=0;9>d;d++)c[d].toArray(a,b+3*d);return a}});Object.assign(pf,{getBasisAt:function(a,b){var c=a.x,d=a.y;a=a.z;b[0]=.282095;b[1]=.488603*d;b[2]=.488603*a;b[3]=.488603*c;b[4]=1.092548*c*d;b[5]=1.092548*d*a;b[6]=.315392*(3*a*a-1);b[7]=1.092548*c*a;b[8]=.546274*(c*c-d*d)}});Ra.prototype=Object.assign(Object.create(fa.prototype),{constructor:Ra,isLightProbe:!0,copy:function(a){fa.prototype.copy.call(this,a);this.sh.copy(a.sh);return this},fromJSON:function(a){this.intensity= +a.intensity;this.sh.fromArray(a.sh);return this},toJSON:function(a){a=fa.prototype.toJSON.call(this,a);a.object.sh=this.sh.toArray();return a}});qf.prototype=Object.assign(Object.create(X.prototype),{constructor:qf,load:function(a,b,c,d){var e=this,f=new Qa(e.manager);f.setPath(e.path);f.setRequestHeader(e.requestHeader);f.load(a,function(c){try{b(e.parse(JSON.parse(c)))}catch(h){d?d(h):console.error(h),e.manager.itemError(a)}},c,d)},parse:function(a){function b(a){void 0===c[a]&&console.warn("THREE.MaterialLoader: Undefined texture", +a);return c[a]}var c=this.textures,d=new Vk[a.type];void 0!==a.uuid&&(d.uuid=a.uuid);void 0!==a.name&&(d.name=a.name);void 0!==a.color&&d.color.setHex(a.color);void 0!==a.roughness&&(d.roughness=a.roughness);void 0!==a.metalness&&(d.metalness=a.metalness);void 0!==a.sheen&&(d.sheen=(new H).setHex(a.sheen));void 0!==a.emissive&&d.emissive.setHex(a.emissive);void 0!==a.specular&&d.specular.setHex(a.specular);void 0!==a.shininess&&(d.shininess=a.shininess);void 0!==a.clearcoat&&(d.clearcoat=a.clearcoat); +void 0!==a.clearcoatRoughness&&(d.clearcoatRoughness=a.clearcoatRoughness);void 0!==a.fog&&(d.fog=a.fog);void 0!==a.flatShading&&(d.flatShading=a.flatShading);void 0!==a.blending&&(d.blending=a.blending);void 0!==a.combine&&(d.combine=a.combine);void 0!==a.side&&(d.side=a.side);void 0!==a.opacity&&(d.opacity=a.opacity);void 0!==a.transparent&&(d.transparent=a.transparent);void 0!==a.alphaTest&&(d.alphaTest=a.alphaTest);void 0!==a.depthTest&&(d.depthTest=a.depthTest);void 0!==a.depthWrite&&(d.depthWrite= +a.depthWrite);void 0!==a.colorWrite&&(d.colorWrite=a.colorWrite);void 0!==a.stencilWrite&&(d.stencilWrite=a.stencilWrite);void 0!==a.stencilWriteMask&&(d.stencilWriteMask=a.stencilWriteMask);void 0!==a.stencilFunc&&(d.stencilFunc=a.stencilFunc);void 0!==a.stencilRef&&(d.stencilRef=a.stencilRef);void 0!==a.stencilFuncMask&&(d.stencilFuncMask=a.stencilFuncMask);void 0!==a.stencilFail&&(d.stencilFail=a.stencilFail);void 0!==a.stencilZFail&&(d.stencilZFail=a.stencilZFail);void 0!==a.stencilZPass&&(d.stencilZPass= +a.stencilZPass);void 0!==a.wireframe&&(d.wireframe=a.wireframe);void 0!==a.wireframeLinewidth&&(d.wireframeLinewidth=a.wireframeLinewidth);void 0!==a.wireframeLinecap&&(d.wireframeLinecap=a.wireframeLinecap);void 0!==a.wireframeLinejoin&&(d.wireframeLinejoin=a.wireframeLinejoin);void 0!==a.rotation&&(d.rotation=a.rotation);1!==a.linewidth&&(d.linewidth=a.linewidth);void 0!==a.dashSize&&(d.dashSize=a.dashSize);void 0!==a.gapSize&&(d.gapSize=a.gapSize);void 0!==a.scale&&(d.scale=a.scale);void 0!==a.polygonOffset&& +(d.polygonOffset=a.polygonOffset);void 0!==a.polygonOffsetFactor&&(d.polygonOffsetFactor=a.polygonOffsetFactor);void 0!==a.polygonOffsetUnits&&(d.polygonOffsetUnits=a.polygonOffsetUnits);void 0!==a.skinning&&(d.skinning=a.skinning);void 0!==a.morphTargets&&(d.morphTargets=a.morphTargets);void 0!==a.morphNormals&&(d.morphNormals=a.morphNormals);void 0!==a.dithering&&(d.dithering=a.dithering);void 0!==a.vertexTangents&&(d.vertexTangents=a.vertexTangents);void 0!==a.visible&&(d.visible=a.visible);void 0!== +a.toneMapped&&(d.toneMapped=a.toneMapped);void 0!==a.userData&&(d.userData=a.userData);void 0!==a.vertexColors&&(d.vertexColors="number"===typeof a.vertexColors?0Number.EPSILON){if(0>l&&(g=b[f],k=-k,h=b[e],l=-l),!(a.yh.y))if(a.y===g.y){if(a.x===g.x)return!0}else{e=l*(a.x-g.x)-k*(a.y-g.y);if(0===e)return!0;0>e||(d=!d)}}else if(a.y===g.y&&(h.x<=a.x&&a.x<=g.x||g.x<=a.x&&a.x<=h.x))return!0}return d}var e=pb.isClockWise,f=this.subPaths;if(0===f.length)return[]; +if(!0===b)return c(f);b=[];if(1===f.length){var g=f[0];var h=new Mb;h.curves=g.curves;b.push(h);return b}var k=!e(f[0].getPoints());k=a?!k:k;h=[];var n=[],m=[],p=0;n[p]=void 0;m[p]=[];for(var u=0,r=f.length;ud&&this._mixBufferRegion(c,a,b*this._origIndex,1-d,b);0=e){var m=e++,p=a[m];b[p.uuid]=n;a[n]=p;b[k]=m;a[m]=h;h=0;for(k=d;h!==k;++h){p=c[h];var u=p[n];p[n]=p[m];p[m]=u}}}this.nCachedObjects_=e},uncache:function(){for(var a=this._objects,b=this._indicesByUUID,c=this._bindings,d=c.length,e=this.nCachedObjects_,f=a.length,g=0,h=arguments.length;g!==h;++g){var k=arguments[g].uuid,n=b[k];if(void 0!==n)if(delete b[k],nb||0===c)return;this._startTime= +null;b*=c}b*=this._updateTimeScale(a);c=this._updateTime(b);a=this._updateWeight(a);if(0c.parameterPositions[1]&& +(this.stopFading(),0===d&&(this.enabled=!1))}}return this._effectiveWeight=b},_updateTimeScale:function(a){var b=0;if(!this.paused){b=this.timeScale;var c=this._timeScaleInterpolant;if(null!==c){var d=c.evaluate(a)[0];b*=d;a>c.parameterPositions[1]&&(this.stopWarping(),0===b?this.paused=!0:this.timeScale=b)}}return this._effectiveTimeScale=b},_updateTime:function(a){var b=this._clip.duration,c=this.loop,d=this.time+a,e=this._loopCount,f=2202===c;if(0===a)return-1===e?d:f&&1===(e&1)?b-d:d;if(2200=== +c)a:{if(-1===e&&(this._loopCount=0,this._setEndings(!0,!0,!1)),d>=b)d=b;else if(0>d)d=0;else{this.time=d;break a}this.clampWhenFinished?this.paused=!0:this.enabled=!1;this.time=d;this._mixer.dispatchEvent({type:"finished",action:this,direction:0>a?-1:1})}else{-1===e&&(0<=a?(e=0,this._setEndings(!0,0===this.repetitions,f)):this._setEndings(0===this.repetitions,!0,f));if(d>=b||0>d){c=Math.floor(d/b);d-=b*c;e+=Math.abs(c);var g=this.repetitions-e;0>=g?(this.clampWhenFinished?this.paused=!0:this.enabled= +!1,this.time=d=0a,this._setEndings(a,!a,f)):this._setEndings(!1,!1,f),this._loopCount=e,this.time=d,this._mixer.dispatchEvent({type:"loop",action:this,loopDelta:c}))}else this.time=d;if(f&&1===(e&1))return b-d}return d},_setEndings:function(a,b,c){var d=this._interpolantSettings;c?(d.endingStart=2401,d.endingEnd=2401):(d.endingStart=a?this.zeroSlopeAtStart?2401:2400:2402,d.endingEnd=b?this.zeroSlopeAtEnd? +2401:2400:2402)},_scheduleFading:function(a,b,c){var d=this._mixer,e=d.time,f=this._weightInterpolant;null===f&&(this._weightInterpolant=f=d._lendControlInterpolant());d=f.parameterPositions;f=f.sampleValues;d[0]=e;f[0]=b;d[1]=e+a;f[1]=c;return this}});Mg.prototype=Object.assign(Object.create(Ea.prototype),{constructor:Mg,_bindAction:function(a,b){var c=a._localRoot||this._root,d=a._clip.tracks,e=d.length,f=a._propertyBindings;a=a._interpolants;var g=c.uuid,h=this._bindingsByRootAndName,k=h[g];void 0=== +k&&(k={},h[g]=k);for(h=0;h!==e;++h){var n=d[h],m=n.name,p=k[m];if(void 0===p){p=f[h];if(void 0!==p){null===p._cacheIndex&&(++p.referenceCount,this._addInactiveBinding(p,g,m));continue}p=new Lg(wa.create(c,m,b&&b._propertyBindings[h].binding.parsedPath),n.ValueTypeName,n.getValueSize());++p.referenceCount;this._addInactiveBinding(p,g,m)}f[h]=p;a[h].resultBuffer=p.buffer}},_activateAction:function(a){if(!this._isActiveAction(a)){if(null===a._cacheIndex){var b=(a._localRoot||this._root).uuid,c=a._clip.uuid, +d=this._actionsByClip[c];this._bindAction(a,d&&d.knownActions[0]);this._addInactiveAction(a,c,b)}b=a._propertyBindings;c=0;for(d=b.length;c!==d;++c){var e=b[c];0===e.useCount++&&(this._lendBinding(e),e.saveOriginalState())}this._lendAction(a)}},_deactivateAction:function(a){if(this._isActiveAction(a)){for(var b=a._propertyBindings,c=0,d=b.length;c!==d;++c){var e=b[c];0===--e.useCount&&(e.restoreOriginalState(),this._takeBackBinding(e))}this._takeBackAction(a)}},_initMemoryManager:function(){this._actions= +[];this._nActiveActions=0;this._actionsByClip={};this._bindings=[];this._nActiveBindings=0;this._bindingsByRootAndName={};this._controlInterpolants=[];this._nActiveControlInterpolants=0;var a=this;this.stats={actions:{get total(){return a._actions.length},get inUse(){return a._nActiveActions}},bindings:{get total(){return a._bindings.length},get inUse(){return a._nActiveBindings}},controlInterpolants:{get total(){return a._controlInterpolants.length},get inUse(){return a._nActiveControlInterpolants}}}}, +_isActiveAction:function(a){a=a._cacheIndex;return null!==a&&athis.max.x||a.ythis.max.y?!1:!0},containsBox:function(a){return this.min.x<=a.min.x&&a.max.x<=this.max.x&&this.min.y<=a.min.y&&a.max.y<=this.max.y},getParameter:function(a,b){void 0===b&&(console.warn("THREE.Box2: .getParameter() target is now required"),b=new u);return b.set((a.x-this.min.x)/(this.max.x-this.min.x),(a.y-this.min.y)/(this.max.y-this.min.y))},intersectsBox:function(a){return a.max.xthis.max.x||a.max.ythis.max.y?!1:!0}, +clampPoint:function(a,b){void 0===b&&(console.warn("THREE.Box2: .clampPoint() target is now required"),b=new u);return b.copy(a).clamp(this.min,this.max)},distanceToPoint:function(a){return Ti.copy(a).clamp(this.min,this.max).sub(a).length()},intersect:function(a){this.min.max(a.min);this.max.min(a.max);return this},union:function(a){this.min.min(a.min);this.max.max(a.max);return this},translate:function(a){this.min.add(a);this.max.add(a);return this},equals:function(a){return a.min.equals(this.min)&& +a.max.equals(this.max)}});var Ui=new m,Wf=new m;Object.assign(Rg.prototype,{set:function(a,b){this.start.copy(a);this.end.copy(b);return this},clone:function(){return(new this.constructor).copy(this)},copy:function(a){this.start.copy(a.start);this.end.copy(a.end);return this},getCenter:function(a){void 0===a&&(console.warn("THREE.Line3: .getCenter() target is now required"),a=new m);return a.addVectors(this.start,this.end).multiplyScalar(.5)},delta:function(a){void 0===a&&(console.warn("THREE.Line3: .delta() target is now required"), +a=new m);return a.subVectors(this.end,this.start)},distanceSq:function(){return this.start.distanceToSquared(this.end)},distance:function(){return this.start.distanceTo(this.end)},at:function(a,b){void 0===b&&(console.warn("THREE.Line3: .at() target is now required"),b=new m);return this.delta(b).multiplyScalar(a).add(this.start)},closestPointToPointParameter:function(a,b){Ui.subVectors(a,this.start);Wf.subVectors(this.end,this.start);a=Wf.dot(Wf);a=Wf.dot(Ui)/a;b&&(a=P.clamp(a,0,1));return a},closestPointToPoint:function(a, +b,c){a=this.closestPointToPointParameter(a,b);void 0===c&&(console.warn("THREE.Line3: .closestPointToPoint() target is now required"),c=new m);return this.delta(c).multiplyScalar(a).add(this.start)},applyMatrix4:function(a){this.start.applyMatrix4(a);this.end.applyMatrix4(a);return this},equals:function(a){return a.start.equals(this.start)&&a.end.equals(this.end)}});qe.prototype=Object.create(C.prototype);qe.prototype.constructor=qe;qe.prototype.isImmediateRenderObject=!0;var Vi=new m;jd.prototype= +Object.create(C.prototype);jd.prototype.constructor=jd;jd.prototype.dispose=function(){this.cone.geometry.dispose();this.cone.material.dispose()};jd.prototype.update=function(){this.light.updateMatrixWorld();var a=this.light.distance?this.light.distance:1E3,b=a*Math.tan(this.light.angle);this.cone.scale.set(b,b,a);Vi.setFromMatrixPosition(this.light.target.matrixWorld);this.cone.lookAt(Vi);void 0!==this.color?this.cone.material.color.set(this.color):this.cone.material.color.copy(this.light.color)}; +var Ub=new m,Xf=new U,ph=new U;rc.prototype=Object.create(ea.prototype);rc.prototype.constructor=rc;rc.prototype.isSkeletonHelper=!0;rc.prototype.updateMatrixWorld=function(a){var b=this.bones,c=this.geometry,d=c.getAttribute("position");ph.getInverse(this.root.matrixWorld);for(var e=0,f=0;eMath.abs(b)&&(b=1E-8);this.scale.set(.5*this.size,.5*this.size,b);this.children[0].material.side=0>b?1:0;this.lookAt(this.plane.normal);C.prototype.updateMatrixWorld.call(this,a)};var $i=new m,yf,Sg;Ob.prototype=Object.create(C.prototype);Ob.prototype.constructor=Ob;Ob.prototype.setDirection=function(a){.99999< +a.y?this.quaternion.set(0,0,0,1):-.99999>a.y?this.quaternion.set(1,0,0,0):($i.set(a.z,0,-a.x).normalize(),this.quaternion.setFromAxisAngle($i,Math.acos(a.y)))};Ob.prototype.setLength=function(a,b,c){void 0===b&&(b=.2*a);void 0===c&&(c=.2*b);this.line.scale.set(1,Math.max(1E-4,a-b),1);this.line.updateMatrix();this.cone.scale.set(c,b,c);this.cone.position.y=a;this.cone.updateMatrix()};Ob.prototype.setColor=function(a){this.line.material.color.set(a);this.cone.material.color.set(a)};Ob.prototype.copy= +function(a){C.prototype.copy.call(this,a,!1);this.line.copy(a.line);this.cone.copy(a.cone);return this};ve.prototype=Object.create(ea.prototype);ve.prototype.constructor=ve;var kb=Math.pow(2,8),aj=[.125,.215,.35,.446,.526,.582],bj=5+aj.length,jb={3E3:0,3001:1,3002:2,3004:3,3005:4,3006:5,3007:6},qh=new hd,rh=function(){for(var a=[],b=[],c=[],d=8,e=0;en;n++){var m=n%3*2/3-1,p=2q;q++)p=q%3,0==p?(b.up.set(0,c[q],0),b.lookAt(e[q],0,0)):1==p?(b.up.set(0,0,c[q]),b.lookAt(0,e[q],0)):(b.up.set(0,c[q],0),b.lookAt(0,0,e[q])),zf(d,p*kb,2t;++t){var v=t/p;v=Math.exp(-v*v/2);e.push(v);0==t?r+=v:tExamples

distributions explosion fog + mouseFollow multipleEmitters orbit pool @@ -23,7 +24,7 @@

Examples

runtimeChanging - + diff --git a/examples/multipleEmitters.html b/examples/multipleEmitters.html index 8ca5757..cd84708 100644 --- a/examples/multipleEmitters.html +++ b/examples/multipleEmitters.html @@ -17,13 +17,14 @@

Examples

explosion fog mouseFollow + multipleEmitters orbit pool rotation runtimeChanging - + @@ -71,7 +72,7 @@

Examples

texture: { value: new THREE.TextureLoader().load('./img/smokeparticle.png'), }, - maxParticleCount: 3000 + maxParticleCount: 20000 }); for( var i = 0; i < numEmitters; ++i ) { diff --git a/examples/orbit.html b/examples/orbit.html index 1dec495..0ef6478 100644 --- a/examples/orbit.html +++ b/examples/orbit.html @@ -16,12 +16,13 @@

Examples

fog mouseFollow multipleEmitters + orbit pool rotation runtimeChanging - + diff --git a/examples/pool.html b/examples/pool.html index 8694663..8a929b1 100644 --- a/examples/pool.html +++ b/examples/pool.html @@ -19,11 +19,12 @@

Examples

mouseFollow multipleEmitters orbit + pool rotation runtimeChanging - + diff --git a/examples/rotation.html b/examples/rotation.html index c924152..61f5bdc 100644 --- a/examples/rotation.html +++ b/examples/rotation.html @@ -18,10 +18,11 @@

Examples

multipleEmitters orbit pool + rotation runtimeChanging - + @@ -58,7 +59,7 @@

Examples

texture: { value: new THREE.TextureLoader().load('./img/smokeparticle.png') }, - maxParticleCount: 3000 + maxParticleCount: 8000 }); // General distributions. diff --git a/examples/runtimeChanging.html b/examples/runtimeChanging.html index 3d9adf3..1f9cd03 100644 --- a/examples/runtimeChanging.html +++ b/examples/runtimeChanging.html @@ -32,10 +32,11 @@

Examples

orbit pool rotation + runtimeChanging - + @@ -54,7 +55,7 @@

Examples

// frameCount: 8, loop: 2 }, - + maxParticleCount: 8000, depthTest: true, scale: window.innerHeight / 2.0 } ), diff --git a/notes.txt b/notes.txt new file mode 100644 index 0000000..14bd76c --- /dev/null +++ b/notes.txt @@ -0,0 +1,13 @@ +three.min.js:92 THREE.WebGLProgram: gl.getProgramInfoLog() C:\fakepath(87,1-6): warning X4000: use of potentially uninitialized variable (dyn_index_vec4_float4_int) + + +Moving from r84 to r120 of Three.js is quite a jump - that's good that you've only encountered minor issues so far. The main attribute change you probably hit was the switch from `.attributes` to `.getAttribute()`, which was one of the bigger breaking changes in that period. + +Since you're doing such a significant version upgrade, you might want to watch out for a few other potential issues that could come up, particularly with shaders: + +1. Shader precision defaults changed +2. Some uniform naming conventions were updated +3. The WebGLRenderer parameters changed somewhat +4. Material property naming evolved in some cases + +Would you like me to keep an eye out for any other version-specific changes as we discuss your Three.js implementation? I can flag anything that might need attention during the upgrade process. \ No newline at end of file From 72d3347c99ac5825ad63168ab7d65a0e9436fff7 Mon Sep 17 00:00:00 2001 From: KellyCode Date: Sat, 22 Feb 2025 09:43:25 -0600 Subject: [PATCH 05/25] cleaned SPE code --- Gruntfile.js | 9 - build/SPE.js | 2136 +- build/SPE.min.js | 2 +- examples/activeMultiplier.html | 23 +- examples/basic.html | 15 +- examples/clock.html | 15 +- examples/clouds.html | 268 +- examples/distributions.html | 514 +- examples/explosion.html | 472 +- examples/fog.html | 275 +- examples/js/spector.bundle.js | 82 + examples/js/three_r120/three.js | 51086 ++++++++++++++++++++++++++ examples/mouseFollow.html | 316 +- examples/multipleEmitters.html | 370 +- examples/orbit.html | 279 +- examples/pool.html | 316 +- examples/rotation.html | 563 +- examples/runtimeChanging.html | 560 +- notes.txt | 36 +- package-lock.json | 324 +- package.json | 3 +- src/core/SPE.Emitter.js | 761 +- src/core/SPE.Group.js | 506 +- src/core/SPE.utils.js | 444 +- src/helpers/SPE.ShaderAttribute.js | 277 +- src/helpers/SPE.TypedArrayHelper.js | 181 +- 26 files changed, 55376 insertions(+), 4457 deletions(-) create mode 100644 examples/js/spector.bundle.js create mode 100644 examples/js/three_r120/three.js diff --git a/Gruntfile.js b/Gruntfile.js index 0f9a49b..dbb6749 100644 --- a/Gruntfile.js +++ b/Gruntfile.js @@ -63,15 +63,6 @@ module.exports = function( grunt ) { }, }, - jsdoc: { - dist: { - src: 'src/**/*.js', - options: { - destination: 'docs/api' - } - } - }, - } ); grunt.loadNpmTasks( 'grunt-contrib-concat' ); diff --git a/build/SPE.js b/build/SPE.js index 661dceb..1686024 100644 --- a/build/SPE.js +++ b/build/SPE.js @@ -110,13 +110,13 @@ else if ( typeof exports !== 'undefined' && typeof module !== 'undefined' ) { * @param {Number} componentSize The number of components per-value (ie. 3 for a vec3, 9 for a Mat3, etc.) * @param {Number} indexOffset The index in the array from which to start assigning values. Default `0` if none provided */ -SPE.TypedArrayHelper = function( TypedArrayConstructor, size, componentSize, indexOffset ) { - 'use strict'; +SPE.TypedArrayHelper = function (TypedArrayConstructor, size, componentSize, indexOffset) { + "use strict"; this.componentSize = componentSize || 1; - this.size = ( size || 1 ); + this.size = size || 1; this.TypedArrayConstructor = TypedArrayConstructor || Float32Array; - this.array = new TypedArrayConstructor( size * this.componentSize ); + this.array = new TypedArrayConstructor(size * this.componentSize); this.indexOffset = indexOffset || 0; }; @@ -132,23 +132,21 @@ SPE.TypedArrayHelper.constructor = SPE.TypedArrayHelper; * * @param {Number} size The new size of the array. */ -SPE.TypedArrayHelper.prototype.setSize = function( size, noComponentMultiply ) { - 'use strict'; +SPE.TypedArrayHelper.prototype.setSize = function (size, noComponentMultiply) { + "use strict"; - var currentArraySize = this.array.length; + let currentArraySize = this.array.length; - if ( !noComponentMultiply ) { + if (!noComponentMultiply) { size = size * this.componentSize; } - if ( size < currentArraySize ) { - return this.shrink( size ); - } - else if ( size > currentArraySize ) { - return this.grow( size ); - } - else { - console.info( 'TypedArray is already of size:', size + '.', 'Will not resize.' ); + if (size < currentArraySize) { + return this.shrink(size); + } else if (size > currentArraySize) { + return this.grow(size); + } else { + console.info("TypedArray is already of size:", size + ".", "Will not resize."); } }; @@ -158,10 +156,10 @@ SPE.TypedArrayHelper.prototype.setSize = function( size, noComponentMultiply ) { * @param {Number} size The new size of the typed array. Must be smaller than `this.array.length`. * @return {SPE.TypedArrayHelper} Instance of this class. */ -SPE.TypedArrayHelper.prototype.shrink = function( size ) { - 'use strict'; +SPE.TypedArrayHelper.prototype.shrink = function (size) { + "use strict"; - this.array = this.array.subarray( 0, size ); + this.array = this.array.subarray(0, size); this.size = size; return this; }; @@ -171,48 +169,46 @@ SPE.TypedArrayHelper.prototype.shrink = function( size ) { * @param {Number} size The new size of the typed array. Must be larger than `this.array.length`. * @return {SPE.TypedArrayHelper} Instance of this class. */ -SPE.TypedArrayHelper.prototype.grow = function( size ) { - 'use strict'; +SPE.TypedArrayHelper.prototype.grow = function (size) { + "use strict"; - var existingArray = this.array, - newArray = new this.TypedArrayConstructor( size ); + let existingArray = this.array; + let newArray = new this.TypedArrayConstructor(size); - newArray.set( existingArray ); + newArray.set(existingArray); this.array = newArray; this.size = size; return this; }; - /** * Perform a splice operation on this array's buffer. * @param {Number} start The start index of the splice. Will be multiplied by the number of components for this attribute. * @param {Number} end The end index of the splice. Will be multiplied by the number of components for this attribute. * @returns {Object} The SPE.TypedArrayHelper instance. */ -SPE.TypedArrayHelper.prototype.splice = function( start, end ) { - 'use strict'; +SPE.TypedArrayHelper.prototype.splice = function (start, end) { + "use strict"; start *= this.componentSize; end *= this.componentSize; - var data = [], - array = this.array, - size = array.length; + let data = []; + let array = this.array; + let size = array.length; - for ( var i = 0; i < size; ++i ) { - if ( i < start || i >= end ) { - data.push( array[ i ] ); + for (let i = 0; i < size; ++i) { + if (i < start || i >= end) { + data.push(array[i]); } // array[ i ] = 0; } - this.setFromArray( 0, data ); + this.setFromArray(0, data); return this; }; - /** * Copies from the given TypedArray into this one, using the index argument * as the start position. Alias for `TypedArray.set`. Will automatically resize @@ -222,20 +218,19 @@ SPE.TypedArrayHelper.prototype.splice = function( start, end ) { * @param {TypedArray} array The array from which to copy; the source array. * @return {SPE.TypedArrayHelper} Instance of this class. */ -SPE.TypedArrayHelper.prototype.setFromArray = function( index, array ) { - 'use strict'; +SPE.TypedArrayHelper.prototype.setFromArray = function (index, array) { + "use strict"; - var sourceArraySize = array.length, + let sourceArraySize = array.length, newSize = index + sourceArraySize; - if ( newSize > this.array.length ) { - this.grow( newSize ); - } - else if ( newSize < this.array.length ) { - this.shrink( newSize ); + if (newSize > this.array.length) { + this.grow(newSize); + } else if (newSize < this.array.length) { + this.shrink(newSize); } - this.array.set( array, this.indexOffset + index ); + this.array.set(array, this.indexOffset + index); return this; }; @@ -247,10 +242,10 @@ SPE.TypedArrayHelper.prototype.setFromArray = function( index, array ) { * @param {Vector2} vec2 Any object that has `x` and `y` properties. * @return {SPE.TypedArrayHelper} Instance of this class. */ -SPE.TypedArrayHelper.prototype.setVec2 = function( index, vec2 ) { - 'use strict'; +SPE.TypedArrayHelper.prototype.setVec2 = function (index, vec2) { + "use strict"; - return this.setVec2Components( index, vec2.x, vec2.y ); + return this.setVec2Components(index, vec2.x, vec2.y); }; /** @@ -261,14 +256,14 @@ SPE.TypedArrayHelper.prototype.setVec2 = function( index, vec2 ) { * @param {Number} y The Vec2's `y` component. * @return {SPE.TypedArrayHelper} Instance of this class. */ -SPE.TypedArrayHelper.prototype.setVec2Components = function( index, x, y ) { - 'use strict'; +SPE.TypedArrayHelper.prototype.setVec2Components = function (index, x, y) { + "use strict"; - var array = this.array, - i = this.indexOffset + ( index * this.componentSize ); + let array = this.array; + let i = this.indexOffset + index * this.componentSize; - array[ i ] = x; - array[ i + 1 ] = y; + array[i] = x; + array[i + 1] = y; return this; }; @@ -279,10 +274,10 @@ SPE.TypedArrayHelper.prototype.setVec2Components = function( index, x, y ) { * @param {Vector3} vec2 Any object that has `x`, `y`, and `z` properties. * @return {SPE.TypedArrayHelper} Instance of this class. */ -SPE.TypedArrayHelper.prototype.setVec3 = function( index, vec3 ) { - 'use strict'; +SPE.TypedArrayHelper.prototype.setVec3 = function (index, vec3) { + "use strict"; - return this.setVec3Components( index, vec3.x, vec3.y, vec3.z ); + return this.setVec3Components(index, vec3.x, vec3.y, vec3.z); }; /** @@ -294,15 +289,15 @@ SPE.TypedArrayHelper.prototype.setVec3 = function( index, vec3 ) { * @param {Number} z The Vec3's `z` component. * @return {SPE.TypedArrayHelper} Instance of this class. */ -SPE.TypedArrayHelper.prototype.setVec3Components = function( index, x, y, z ) { - 'use strict'; +SPE.TypedArrayHelper.prototype.setVec3Components = function (index, x, y, z) { + "use strict"; - var array = this.array, - i = this.indexOffset + ( index * this.componentSize ); + let array = this.array; + let i = this.indexOffset + index * this.componentSize; - array[ i ] = x; - array[ i + 1 ] = y; - array[ i + 2 ] = z; + array[i] = x; + array[i + 1] = y; + array[i + 2] = z; return this; }; @@ -313,10 +308,10 @@ SPE.TypedArrayHelper.prototype.setVec3Components = function( index, x, y, z ) { * @param {Vector4} vec2 Any object that has `x`, `y`, `z`, and `w` properties. * @return {SPE.TypedArrayHelper} Instance of this class. */ -SPE.TypedArrayHelper.prototype.setVec4 = function( index, vec4 ) { - 'use strict'; +SPE.TypedArrayHelper.prototype.setVec4 = function (index, vec4) { + "use strict"; - return this.setVec4Components( index, vec4.x, vec4.y, vec4.z, vec4.w ); + return this.setVec4Components(index, vec4.x, vec4.y, vec4.z, vec4.w); }; /** @@ -329,16 +324,16 @@ SPE.TypedArrayHelper.prototype.setVec4 = function( index, vec4 ) { * @param {Number} w The Vec4's `w` component. * @return {SPE.TypedArrayHelper} Instance of this class. */ -SPE.TypedArrayHelper.prototype.setVec4Components = function( index, x, y, z, w ) { - 'use strict'; +SPE.TypedArrayHelper.prototype.setVec4Components = function (index, x, y, z, w) { + "use strict"; - var array = this.array, - i = this.indexOffset + ( index * this.componentSize ); + let array = this.array; + let i = this.indexOffset + index * this.componentSize; - array[ i ] = x; - array[ i + 1 ] = y; - array[ i + 2 ] = z; - array[ i + 3 ] = w; + array[i] = x; + array[i + 1] = y; + array[i + 2] = z; + array[i + 3] = w; return this; }; @@ -349,10 +344,10 @@ SPE.TypedArrayHelper.prototype.setVec4Components = function( index, x, y, z, w ) * @param {Matrix3} mat3 The 3x3 matrix to set from. Must have a TypedArray property named `elements` to copy from. * @return {SPE.TypedArrayHelper} Instance of this class. */ -SPE.TypedArrayHelper.prototype.setMat3 = function( index, mat3 ) { - 'use strict'; +SPE.TypedArrayHelper.prototype.setMat3 = function (index, mat3) { + "use strict"; - return this.setFromArray( this.indexOffset + ( index * this.componentSize ), mat3.elements ); + return this.setFromArray(this.indexOffset + index * this.componentSize, mat3.elements); }; /** @@ -362,10 +357,10 @@ SPE.TypedArrayHelper.prototype.setMat3 = function( index, mat3 ) { * @param {Matrix4} mat3 The 4x4 matrix to set from. Must have a TypedArray property named `elements` to copy from. * @return {SPE.TypedArrayHelper} Instance of this class. */ -SPE.TypedArrayHelper.prototype.setMat4 = function( index, mat4 ) { - 'use strict'; +SPE.TypedArrayHelper.prototype.setMat4 = function (index, mat4) { + "use strict"; - return this.setFromArray( this.indexOffset + ( index * this.componentSize ), mat4.elements ); + return this.setFromArray(this.indexOffset + index * this.componentSize, mat4.elements); }; /** @@ -375,10 +370,10 @@ SPE.TypedArrayHelper.prototype.setMat4 = function( index, mat4 ) { * @param {Color} color Any object that has `r`, `g`, and `b` properties. * @return {SPE.TypedArrayHelper} Instance of this class. */ -SPE.TypedArrayHelper.prototype.setColor = function( index, color ) { - 'use strict'; +SPE.TypedArrayHelper.prototype.setColor = function (index, color) { + "use strict"; - return this.setVec3Components( index, color.r, color.g, color.b ); + return this.setVec3Components(index, color.r, color.g, color.b); }; /** @@ -388,10 +383,10 @@ SPE.TypedArrayHelper.prototype.setColor = function( index, color ) { * @param {Number} numericValue The number to assign to this index in the array. * @return {SPE.TypedArrayHelper} Instance of this class. */ -SPE.TypedArrayHelper.prototype.setNumber = function( index, numericValue ) { - 'use strict'; +SPE.TypedArrayHelper.prototype.setNumber = function (index, numericValue) { + "use strict"; - this.array[ this.indexOffset + ( index * this.componentSize ) ] = numericValue; + this.array[this.indexOffset + index * this.componentSize] = numericValue; return this; }; @@ -405,10 +400,10 @@ SPE.TypedArrayHelper.prototype.setNumber = function( index, numericValue ) { * @param {Number} index The index in the array to fetch. * @return {Number} The value at the given index. */ -SPE.TypedArrayHelper.prototype.getValueAtIndex = function( index ) { - 'use strict'; +SPE.TypedArrayHelper.prototype.getValueAtIndex = function (index) { + "use strict"; - return this.array[ this.indexOffset + index ]; + return this.array[this.indexOffset + index]; }; /** @@ -421,12 +416,13 @@ SPE.TypedArrayHelper.prototype.getValueAtIndex = function( index ) { * @param {Number} index The index in the array to fetch. * @return {TypedArray} The component value at the given index. */ -SPE.TypedArrayHelper.prototype.getComponentValueAtIndex = function( index ) { - 'use strict'; +SPE.TypedArrayHelper.prototype.getComponentValueAtIndex = function (index) { + "use strict"; - return this.array.subarray( this.indexOffset + ( index * this.componentSize ) ); + return this.array.subarray(this.indexOffset + index * this.componentSize); }; + /** * A helper to handle creating and updating a THREE.BufferAttribute instance. * @@ -436,20 +432,20 @@ SPE.TypedArrayHelper.prototype.getComponentValueAtIndex = function( index ) { * @param {Boolean=} dynamicBuffer Whether this buffer attribute should be marked as dynamic or not. * @param {Function=} arrayType A reference to a TypedArray constructor. Defaults to Float32Array if none provided. */ -SPE.ShaderAttribute = function( type, dynamicBuffer, arrayType ) { - 'use strict'; +SPE.ShaderAttribute = function (type, dynamicBuffer, arrayType) { + "use strict"; - var typeMap = SPE.ShaderAttribute.typeSizeMap; + let typeMap = SPE.ShaderAttribute.typeSizeMap; - this.type = typeof type === 'string' && typeMap.hasOwnProperty( type ) ? type : 'f'; - this.componentSize = typeMap[ this.type ]; - this.arrayType = arrayType || Float32Array; - this.typedArray = null; - this.bufferAttribute = null; - this.dynamicBuffer = !!dynamicBuffer; + this.type = typeof type === "string" && typeMap.hasOwnProperty(type) ? type : "f"; + this.componentSize = typeMap[this.type]; + this.arrayType = arrayType || Float32Array; + this.typedArray = null; + this.bufferAttribute = null; + this.dynamicBuffer = !!dynamicBuffer; - this.updateMin = 0; - this.updateMax = 0; + this.updateMin = 0; + this.updateMax = 0; }; SPE.ShaderAttribute.constructor = SPE.ShaderAttribute; @@ -459,47 +455,47 @@ SPE.ShaderAttribute.constructor = SPE.ShaderAttribute; * @enum {Number} */ SPE.ShaderAttribute.typeSizeMap = { - /** - * Float - * @type {Number} - */ - f: 1, - - /** - * Vec2 - * @type {Number} - */ - v2: 2, - - /** - * Vec3 - * @type {Number} - */ - v3: 3, - - /** - * Vec4 - * @type {Number} - */ - v4: 4, - - /** - * Color - * @type {Number} - */ - c: 3, - - /** - * Mat3 - * @type {Number} - */ - m3: 9, - - /** - * Mat4 - * @type {Number} - */ - m4: 16 + /** + * Float + * @type {Number} + */ + f: 1, + + /** + * Vec2 + * @type {Number} + */ + v2: 2, + + /** + * Vec3 + * @type {Number} + */ + v3: 3, + + /** + * Vec4 + * @type {Number} + */ + v4: 4, + + /** + * Color + * @type {Number} + */ + c: 3, + + /** + * Mat3 + * @type {Number} + */ + m3: 9, + + /** + * Mat4 + * @type {Number} + */ + m4: 16, }; /** @@ -509,45 +505,41 @@ SPE.ShaderAttribute.typeSizeMap = { * @param {Number} min The start of the range to mark as needing an update. * @param {Number} max The end of the range to mark as needing an update. */ -SPE.ShaderAttribute.prototype.setUpdateRange = function( min, max ) { - 'use strict'; +SPE.ShaderAttribute.prototype.setUpdateRange = function (min, max) { + "use strict"; - this.updateMin = Math.min( min * this.componentSize, this.updateMin * this.componentSize ); - this.updateMax = Math.max( max * this.componentSize, this.updateMax * this.componentSize ); + this.updateMin = Math.min(min * this.componentSize, this.updateMin * this.componentSize); + this.updateMax = Math.max(max * this.componentSize, this.updateMax * this.componentSize); }; /** * Calculate the number of indices that this attribute should mark as needing * updating. Also marks the attribute as needing an update. */ -SPE.ShaderAttribute.prototype.flagUpdate = function() { - 'use strict'; +SPE.ShaderAttribute.prototype.flagUpdate = function () { + "use strict"; - var attr = this.bufferAttribute, - range = attr.updateRange; + let attr = this.bufferAttribute; + let range = attr.updateRange; - range.offset = this.updateMin; - range.count = Math.min( ( this.updateMax - this.updateMin ) + this.componentSize, this.typedArray.array.length ); - attr.needsUpdate = true; + range.offset = this.updateMin; + range.count = Math.min(this.updateMax - this.updateMin + this.componentSize, this.typedArray.array.length); + attr.needsUpdate = true; }; - - /** * Reset the index update counts for this attribute */ -SPE.ShaderAttribute.prototype.resetUpdateRange = function() { - 'use strict'; +SPE.ShaderAttribute.prototype.resetUpdateRange = function () { + "use strict"; - this.updateMin = 0; - this.updateMax = 0; + this.updateMin = 0; + this.updateMax = 0; }; -SPE.ShaderAttribute.prototype.resetDynamic = function() { - 'use strict'; - this.bufferAttribute.usage = this.dynamicBuffer ? - THREE.DynamicDrawUsage : - THREE.StaticDrawUsage; +SPE.ShaderAttribute.prototype.resetDynamic = function () { + "use strict"; + this.bufferAttribute.usage = this.dynamicBuffer ? THREE.DynamicDrawUsage : THREE.StaticDrawUsage; }; /** @@ -555,25 +547,25 @@ SPE.ShaderAttribute.prototype.resetDynamic = function() { * @param {Number} start The start index of the splice. Will be multiplied by the number of components for this attribute. * @param {Number} end The end index of the splice. Will be multiplied by the number of components for this attribute. */ -SPE.ShaderAttribute.prototype.splice = function( start, end ) { - 'use strict'; +SPE.ShaderAttribute.prototype.splice = function (start, end) { + "use strict"; - this.typedArray.splice( start, end ); + this.typedArray.splice(start, end); - // Reset the reference to the attribute's typed array - // since it has probably changed. - this.forceUpdateAll(); + // Reset the reference to the attribute's typed array + // since it has probably changed. + this.forceUpdateAll(); }; -SPE.ShaderAttribute.prototype.forceUpdateAll = function() { - 'use strict'; +SPE.ShaderAttribute.prototype.forceUpdateAll = function () { + "use strict"; - this.bufferAttribute.array = this.typedArray.array; - this.bufferAttribute.updateRange.offset = 0; - this.bufferAttribute.updateRange.count = -1; + this.bufferAttribute.array = this.typedArray.array; + this.bufferAttribute.updateRange.offset = 0; + this.bufferAttribute.updateRange.count = -1; - this.bufferAttribute.usage = THREE.StaticDrawUsage; - this.bufferAttribute.needsUpdate = true; + this.bufferAttribute.usage = THREE.StaticDrawUsage; + this.bufferAttribute.needsUpdate = true; }; /** @@ -585,27 +577,26 @@ SPE.ShaderAttribute.prototype.forceUpdateAll = function() { * * @param {Number} size The size of the typed array to create or update to. */ -SPE.ShaderAttribute.prototype._ensureTypedArray = function( size ) { - 'use strict'; +SPE.ShaderAttribute.prototype._ensureTypedArray = function (size) { + "use strict"; - // Condition that's most likely to be true at the top: no change. - if ( this.typedArray !== null && this.typedArray.size === size * this.componentSize ) { - return; - } + // Condition that's most likely to be true at the top: no change. + if (this.typedArray !== null && this.typedArray.size === size * this.componentSize) { + return; + } - // Resize the array if we need to, telling the TypedArrayHelper to - // ignore it's component size when evaluating size. - else if ( this.typedArray !== null && this.typedArray.size !== size ) { - this.typedArray.setSize( size ); - } + // Resize the array if we need to, telling the TypedArrayHelper to + // ignore it's component size when evaluating size. + else if (this.typedArray !== null && this.typedArray.size !== size) { + this.typedArray.setSize(size); + } - // This condition should only occur once in an attribute's lifecycle. - else if ( this.typedArray === null ) { - this.typedArray = new SPE.TypedArrayHelper( this.arrayType, size, this.componentSize ); - } + // This condition should only occur once in an attribute's lifecycle. + else if (this.typedArray === null) { + this.typedArray = new SPE.TypedArrayHelper(this.arrayType, size, this.componentSize); + } }; - /** * Creates a THREE.BufferAttribute instance if one doesn't exist already. * @@ -615,50 +606,48 @@ SPE.ShaderAttribute.prototype._ensureTypedArray = function( size ) { * * @param {Number} size The size of the typed array to create if one doesn't exist, or resize existing array to. */ -SPE.ShaderAttribute.prototype._createBufferAttribute = function( size ) { - 'use strict'; +SPE.ShaderAttribute.prototype._createBufferAttribute = function (size) { + "use strict"; - // Make sure the typedArray is present and correct. - this._ensureTypedArray( size ); + // Make sure the typedArray is present and correct. + this._ensureTypedArray(size); - // Don't create it if it already exists, but do - // flag that it needs updating on the next render - // cycle. - if ( this.bufferAttribute !== null ) { - this.bufferAttribute.array = this.typedArray.array; + // Don't create it if it already exists, but do + // flag that it needs updating on the next render + // cycle. + if (this.bufferAttribute !== null) { + this.bufferAttribute.array = this.typedArray.array; - // Since THREE.js version 81, dynamic count calculation was removed - // so I need to do it manually here. - // - // In the next minor release, I may well remove this check and force - // dependency on THREE r81+. - if ( parseFloat( THREE.REVISION ) >= 81 ) { - this.bufferAttribute.count = this.bufferAttribute.array.length / this.bufferAttribute.itemSize; - } + // Since THREE.js version 81, dynamic count calculation was removed + // so I need to do it manually here. + // + // In the next minor release, I may well remove this check and force + // dependency on THREE r81+. + if (parseFloat(THREE.REVISION) >= 81) { + this.bufferAttribute.count = this.bufferAttribute.array.length / this.bufferAttribute.itemSize; + } - this.bufferAttribute.needsUpdate = true; - return; - } + this.bufferAttribute.needsUpdate = true; + return; + } - this.bufferAttribute = new THREE.BufferAttribute( this.typedArray.array, this.componentSize ); + this.bufferAttribute = new THREE.BufferAttribute(this.typedArray.array, this.componentSize); - this.bufferAttribute.usage = this.dynamicBuffer ? - THREE.DynamicDrawUsage : - THREE.StaticDrawUsage; + this.bufferAttribute.usage = this.dynamicBuffer ? THREE.DynamicDrawUsage : THREE.StaticDrawUsage; }; /** * Returns the length of the typed array associated with this attribute. * @return {Number} The length of the typed array. Will be 0 if no typed array has been created yet. */ -SPE.ShaderAttribute.prototype.getLength = function() { - 'use strict'; +SPE.ShaderAttribute.prototype.getLength = function () { + "use strict"; - if ( this.typedArray === null ) { - return 0; - } + if (this.typedArray === null) { + return 0; + } - return this.typedArray.array.length; + return this.typedArray.array.length; }; @@ -1118,25 +1107,25 @@ SPE.utils = { * Boolean type. * @type {String} */ - BOOLEAN: 'boolean', + BOOLEAN: "boolean", /** * String type. * @type {String} */ - STRING: 'string', + STRING: "string", /** * Number type. * @type {String} */ - NUMBER: 'number', + NUMBER: "number", /** * Object type. * @type {String} */ - OBJECT: 'object' + OBJECT: "object", }, /** @@ -1149,13 +1138,12 @@ SPE.utils = { * @param {(boolean|string|number|object)} defaultValue A default value to fallback on if the type check fails. * @return {(boolean|string|number|object)} The given value if type check passes, or the default value if it fails. */ - ensureTypedArg: function( arg, type, defaultValue ) { - 'use strict'; + ensureTypedArg: function (arg, type, defaultValue) { + "use strict"; - if ( typeof arg === type ) { + if (typeof arg === type) { return arg; - } - else { + } else { return defaultValue; } }, @@ -1172,15 +1160,15 @@ SPE.utils = { * @param {(boolean|string|number|object)} defaultValue A default fallback value. * @return {(boolean|string|number|object)} The given value if type check passes, or the default value if it fails. */ - ensureArrayTypedArg: function( arg, type, defaultValue ) { - 'use strict'; + ensureArrayTypedArg: function (arg, type, defaultValue) { + "use strict"; // If the argument being checked is an array, loop through // it and ensure all the values are of the correct type, // falling back to the defaultValue if any aren't. - if ( Array.isArray( arg ) ) { - for ( var i = arg.length - 1; i >= 0; --i ) { - if ( typeof arg[ i ] !== type ) { + if (Array.isArray(arg)) { + for (let i = arg.length - 1; i >= 0; --i) { + if (typeof arg[i] !== type) { return defaultValue; } } @@ -1190,7 +1178,7 @@ SPE.utils = { // If the arg isn't an array then just fallback to // checking the type. - return this.ensureTypedArg( arg, type, defaultValue ); + return this.ensureTypedArg(arg, type, defaultValue); }, /** @@ -1201,13 +1189,12 @@ SPE.utils = { * @param {Object} defaultValue A default fallback value if instance check fails * @return {Object} The given value if type check passes, or the default value if it fails. */ - ensureInstanceOf: function( arg, instance, defaultValue ) { - 'use strict'; + ensureInstanceOf: function (arg, instance, defaultValue) { + "use strict"; - if ( instance !== undefined && arg instanceof instance ) { + if (instance !== undefined && arg instanceof instance) { return arg; - } - else { + } else { return defaultValue; } }, @@ -1224,15 +1211,15 @@ SPE.utils = { * @param {Object} defaultValue A default fallback value if instance check fails * @return {Object} The given value if type check passes, or the default value if it fails. */ - ensureArrayInstanceOf: function( arg, instance, defaultValue ) { - 'use strict'; + ensureArrayInstanceOf: function (arg, instance, defaultValue) { + "use strict"; // If the argument being checked is an array, loop through // it and ensure all the values are of the correct type, // falling back to the defaultValue if any aren't. - if ( Array.isArray( arg ) ) { - for ( var i = arg.length - 1; i >= 0; --i ) { - if ( instance !== undefined && arg[ i ] instanceof instance === false ) { + if (Array.isArray(arg)) { + for (let i = arg.length - 1; i >= 0; --i) { + if (instance !== undefined && arg[i] instanceof instance === false) { return defaultValue; } } @@ -1242,7 +1229,7 @@ SPE.utils = { // If the arg isn't an array then just fallback to // checking the type. - return this.ensureInstanceOf( arg, instance, defaultValue ); + return this.ensureInstanceOf(arg, instance, defaultValue); }, /** @@ -1257,31 +1244,31 @@ SPE.utils = { * @param {Number} minLength The minimum length of the array to create. * @param {Number} maxLength The maximum length of the array to create. */ - ensureValueOverLifetimeCompliance: function( property, minLength, maxLength ) { - 'use strict'; + ensureValueOverLifetimeCompliance: function (property, minLength, maxLength) { + "use strict"; minLength = minLength || 3; maxLength = maxLength || 3; // First, ensure both properties are arrays. - if ( Array.isArray( property._value ) === false ) { - property._value = [ property._value ]; + if (Array.isArray(property._value) === false) { + property._value = [property._value]; } - if ( Array.isArray( property._spread ) === false ) { - property._spread = [ property._spread ]; + if (Array.isArray(property._spread) === false) { + property._spread = [property._spread]; } - var valueLength = this.clamp( property._value.length, minLength, maxLength ), - spreadLength = this.clamp( property._spread.length, minLength, maxLength ), - desiredLength = Math.max( valueLength, spreadLength ); + let valueLength = this.clamp(property._value.length, minLength, maxLength); + let spreadLength = this.clamp(property._spread.length, minLength, maxLength); + let desiredLength = Math.max(valueLength, spreadLength); - if ( property._value.length !== desiredLength ) { - property._value = this.interpolateArray( property._value, desiredLength ); + if (property._value.length !== desiredLength) { + property._value = this.interpolateArray(property._value, desiredLength); } - if ( property._spread.length !== desiredLength ) { - property._spread = this.interpolateArray( property._spread, desiredLength ); + if (property._spread.length !== desiredLength) { + property._spread = this.interpolateArray(property._spread, desiredLength); } }, @@ -1297,27 +1284,26 @@ SPE.utils = { * @param {Number} newLength The length the array should be interpolated to. * @return {Array} The interpolated array. */ - interpolateArray: function( srcArray, newLength ) { - 'use strict'; - - var sourceLength = srcArray.length, - newArray = [ typeof srcArray[ 0 ].clone === 'function' ? srcArray[ 0 ].clone() : srcArray[ 0 ] ], - factor = ( sourceLength - 1 ) / ( newLength - 1 ); + interpolateArray: function (srcArray, newLength) { + "use strict"; + let sourceLength = srcArray.length; + let newArray = [typeof srcArray[0].clone === "function" ? srcArray[0].clone() : srcArray[0]]; + let factor = (sourceLength - 1) / (newLength - 1); - for ( var i = 1; i < newLength - 1; ++i ) { - var f = i * factor, - before = Math.floor( f ), - after = Math.ceil( f ), - delta = f - before; + for (let i = 1; i < newLength - 1; ++i) { + let f = i * factor; + let before = Math.floor(f); + let after = Math.ceil(f); + let delta = f - before; - newArray[ i ] = this.lerpTypeAgnostic( srcArray[ before ], srcArray[ after ], delta ); + newArray[i] = this.lerpTypeAgnostic(srcArray[before], srcArray[after], delta); } newArray.push( - typeof srcArray[ sourceLength - 1 ].clone === 'function' ? - srcArray[ sourceLength - 1 ].clone() : - srcArray[ sourceLength - 1 ] + typeof srcArray[sourceLength - 1].clone === "function" + ? srcArray[sourceLength - 1].clone() + : srcArray[sourceLength - 1] ); return newArray; @@ -1330,10 +1316,10 @@ SPE.utils = { * @param {Number} max The maximum value. * @return {Number} The clamped number. */ - clamp: function( value, min, max ) { - 'use strict'; + clamp: function (value, min, max) { + "use strict"; - return Math.max( min, Math.min( value, max ) ); + return Math.max(min, Math.min(value, max)); }, /** @@ -1345,15 +1331,15 @@ SPE.utils = { * @param {Boolean} randomise Whether the value should be randomised. * @return {Number} The result of the operation. */ - zeroToEpsilon: function( value, randomise ) { - 'use strict'; + zeroToEpsilon: function (value, randomise) { + "use strict"; - var epsilon = 0.00001, - result = value; + let epsilon = 0.00001; + let result = value; result = randomise ? Math.random() * epsilon * 10 : epsilon; - if ( value < 0 && value > -epsilon ) { + if (value < 0 && value > -epsilon) { result = -result; } @@ -1380,45 +1366,40 @@ SPE.utils = { * the start and end arguments aren't a supported type, or * if their types do not match. */ - lerpTypeAgnostic: function( start, end, delta ) { - 'use strict'; + lerpTypeAgnostic: function (start, end, delta) { + "use strict"; - var types = this.types, - out; + let types = this.types; + let out; - if ( typeof start === types.NUMBER && typeof end === types.NUMBER ) { - return start + ( ( end - start ) * delta ); - } - else if ( start instanceof THREE.Vector2 && end instanceof THREE.Vector2 ) { + if (typeof start === types.NUMBER && typeof end === types.NUMBER) { + return start + (end - start) * delta; + } else if (start instanceof THREE.Vector2 && end instanceof THREE.Vector2) { out = start.clone(); - out.x = this.lerp( start.x, end.x, delta ); - out.y = this.lerp( start.y, end.y, delta ); + out.x = this.lerp(start.x, end.x, delta); + out.y = this.lerp(start.y, end.y, delta); return out; - } - else if ( start instanceof THREE.Vector3 && end instanceof THREE.Vector3 ) { + } else if (start instanceof THREE.Vector3 && end instanceof THREE.Vector3) { out = start.clone(); - out.x = this.lerp( start.x, end.x, delta ); - out.y = this.lerp( start.y, end.y, delta ); - out.z = this.lerp( start.z, end.z, delta ); + out.x = this.lerp(start.x, end.x, delta); + out.y = this.lerp(start.y, end.y, delta); + out.z = this.lerp(start.z, end.z, delta); return out; - } - else if ( start instanceof THREE.Vector4 && end instanceof THREE.Vector4 ) { + } else if (start instanceof THREE.Vector4 && end instanceof THREE.Vector4) { out = start.clone(); - out.x = this.lerp( start.x, end.x, delta ); - out.y = this.lerp( start.y, end.y, delta ); - out.z = this.lerp( start.z, end.z, delta ); - out.w = this.lerp( start.w, end.w, delta ); + out.x = this.lerp(start.x, end.x, delta); + out.y = this.lerp(start.y, end.y, delta); + out.z = this.lerp(start.z, end.z, delta); + out.w = this.lerp(start.w, end.w, delta); return out; - } - else if ( start instanceof THREE.Color && end instanceof THREE.Color ) { + } else if (start instanceof THREE.Color && end instanceof THREE.Color) { out = start.clone(); - out.r = this.lerp( start.r, end.r, delta ); - out.g = this.lerp( start.g, end.g, delta ); - out.b = this.lerp( start.b, end.b, delta ); + out.r = this.lerp(start.r, end.r, delta); + out.g = this.lerp(start.g, end.g, delta); + out.b = this.lerp(start.b, end.b, delta); return out; - } - else { - console.warn( 'Invalid argument types, or argument types do not match:', start, end ); + } else { + console.warn("Invalid argument types, or argument types do not match:", start, end); } }, @@ -1429,9 +1410,9 @@ SPE.utils = { * @param {Number} delta The position to interpolate to. * @return {Number} The result of the lerp operation. */ - lerp: function( start, end, delta ) { - 'use strict'; - return start + ( ( end - start ) * delta ); + lerp: function (start, end, delta) { + "use strict"; + return start + (end - start) * delta; }, /** @@ -1441,23 +1422,23 @@ SPE.utils = { * @param {Number} multiple The multiple to round to. * @return {Number} The result of the round operation. */ - roundToNearestMultiple: function( n, multiple ) { - 'use strict'; + roundToNearestMultiple: function (n, multiple) { + "use strict"; - var remainder = 0; + let remainder = 0; - if ( multiple === 0 ) { + if (multiple === 0) { return n; } - remainder = Math.abs( n ) % multiple; + remainder = Math.abs(n) % multiple; - if ( remainder === 0 ) { + if (remainder === 0) { return n; } - if ( n < 0 ) { - return -( Math.abs( n ) - remainder ); + if (n < 0) { + return -(Math.abs(n) - remainder); } return n + multiple - remainder; @@ -1469,11 +1450,11 @@ SPE.utils = { * @param {Array} array The array of values to check equality of. * @return {Boolean} Whether the array's values are all equal or not. */ - arrayValuesAreEqual: function( array ) { - 'use strict'; + arrayValuesAreEqual: function (array) { + "use strict"; - for ( var i = 0; i < array.length - 1; ++i ) { - if ( array[ i ] !== array[ i + 1 ] ) { + for (let i = 0; i < array.length - 1; ++i) { + if (array[i] !== array[i + 1]) { return false; } } @@ -1482,10 +1463,10 @@ SPE.utils = { }, // colorsAreEqual: function() { - // var colors = Array.prototype.slice.call( arguments ), + // let colors = Array.prototype.slice.call( arguments ), // numColors = colors.length; - // for ( var i = 0, color1, color2; i < numColors - 1; ++i ) { + // for ( let i = 0, color1, color2; i < numColors - 1; ++i ) { // color1 = colors[ i ]; // color2 = colors[ i + 1 ]; @@ -1501,7 +1482,6 @@ SPE.utils = { // return true; // }, - /** * Given a start value and a spread value, create and return a random * number. @@ -1509,13 +1489,11 @@ SPE.utils = { * @param {Number} spread The size of the random variance to apply. * @return {Number} A randomised number. */ - randomFloat: function( base, spread ) { - 'use strict'; - return base + spread * ( Math.random() - 0.5 ); + randomFloat: function (base, spread) { + "use strict"; + return base + spread * (Math.random() - 0.5); }, - - /** * Given an SPE.ShaderAttribute instance, and various other settings, * assign values to the attribute's array in a `vec3` format. @@ -1526,24 +1504,24 @@ SPE.utils = { * @param {Object} spread THREE.Vector3 instance describing the random variance to apply to the start value. * @param {Object} spreadClamp THREE.Vector3 instance describing the multiples to clamp the randomness to. */ - randomVector3: function( attribute, index, base, spread, spreadClamp ) { - 'use strict'; + randomVector3: function (attribute, index, base, spread, spreadClamp) { + "use strict"; - var x = base.x + ( Math.random() * spread.x - ( spread.x * 0.5 ) ), - y = base.y + ( Math.random() * spread.y - ( spread.y * 0.5 ) ), - z = base.z + ( Math.random() * spread.z - ( spread.z * 0.5 ) ); + let x = base.x + (Math.random() * spread.x - spread.x * 0.5); + let y = base.y + (Math.random() * spread.y - spread.y * 0.5); + let z = base.z + (Math.random() * spread.z - spread.z * 0.5); - // var x = this.randomFloat( base.x, spread.x ), + // let x = this.randomFloat( base.x, spread.x ), // y = this.randomFloat( base.y, spread.y ), // z = this.randomFloat( base.z, spread.z ); - if ( spreadClamp ) { - x = -spreadClamp.x * 0.5 + this.roundToNearestMultiple( x, spreadClamp.x ); - y = -spreadClamp.y * 0.5 + this.roundToNearestMultiple( y, spreadClamp.y ); - z = -spreadClamp.z * 0.5 + this.roundToNearestMultiple( z, spreadClamp.z ); + if (spreadClamp) { + x = -spreadClamp.x * 0.5 + this.roundToNearestMultiple(x, spreadClamp.x); + y = -spreadClamp.y * 0.5 + this.roundToNearestMultiple(y, spreadClamp.y); + z = -spreadClamp.z * 0.5 + this.roundToNearestMultiple(z, spreadClamp.z); } - attribute.typedArray.setVec3Components( index, x, y, z ); + attribute.typedArray.setVec3Components(index, x, y, z); }, /** @@ -1554,26 +1532,24 @@ SPE.utils = { * @param {Object} base THREE.Color instance describing the start color. * @param {Object} spread THREE.Vector3 instance describing the random variance to apply to the start color. */ - randomColor: function( attribute, index, base, spread ) { - 'use strict'; - - var r = base.r + ( Math.random() * spread.x ), - g = base.g + ( Math.random() * spread.y ), - b = base.b + ( Math.random() * spread.z ); + randomColor: function (attribute, index, base, spread) { + "use strict"; - r = this.clamp( r, 0, 1 ); - g = this.clamp( g, 0, 1 ); - b = this.clamp( b, 0, 1 ); + let r = base.r + Math.random() * spread.x; + let g = base.g + Math.random() * spread.y; + let b = base.b + Math.random() * spread.z; + r = this.clamp(r, 0, 1); + g = this.clamp(g, 0, 1); + b = this.clamp(b, 0, 1); - attribute.typedArray.setVec3Components( index, r, g, b ); + attribute.typedArray.setVec3Components(index, r, g, b); }, + randomColorAsHex: (function () { + "use strict"; - randomColorAsHex: ( function() { - 'use strict'; - - var workingColor = new THREE.Color(); + let workingColor = new THREE.Color(); /** * Assigns a random color value, encoded as a hex value in decimal @@ -1583,29 +1559,29 @@ SPE.utils = { * @param {Object} base THREE.Color instance describing the start color. * @param {Object} spread THREE.Vector3 instance describing the random variance to apply to the start color. */ - return function( attribute, index, base, spread ) { - var numItems = base.length, - colors = []; + return function (attribute, index, base, spread) { + let numItems = base.length; + let colors = []; - for ( var i = 0; i < numItems; ++i ) { - var spreadVector = spread[ i ]; + for (let i = 0; i < numItems; ++i) { + let spreadVector = spread[i]; - workingColor.copy( base[ i ] ); + workingColor.copy(base[i]); - workingColor.r += ( Math.random() * spreadVector.x ) - ( spreadVector.x * 0.5 ); - workingColor.g += ( Math.random() * spreadVector.y ) - ( spreadVector.y * 0.5 ); - workingColor.b += ( Math.random() * spreadVector.z ) - ( spreadVector.z * 0.5 ); + workingColor.r += Math.random() * spreadVector.x - spreadVector.x * 0.5; + workingColor.g += Math.random() * spreadVector.y - spreadVector.y * 0.5; + workingColor.b += Math.random() * spreadVector.z - spreadVector.z * 0.5; - workingColor.r = this.clamp( workingColor.r, 0, 1 ); - workingColor.g = this.clamp( workingColor.g, 0, 1 ); - workingColor.b = this.clamp( workingColor.b, 0, 1 ); + workingColor.r = this.clamp(workingColor.r, 0, 1); + workingColor.g = this.clamp(workingColor.g, 0, 1); + workingColor.b = this.clamp(workingColor.b, 0, 1); - colors.push( workingColor.getHex() ); + colors.push(workingColor.getHex()); } - attribute.typedArray.setVec4Components( index, colors[ 0 ], colors[ 1 ], colors[ 2 ], colors[ 3 ] ); + attribute.typedArray.setVec4Components(index, colors[0], colors[1], colors[2], colors[3]); }; - }() ), + })(), /** * Given an SPE.ShaderAttribute instance, and various other settings, @@ -1616,13 +1592,13 @@ SPE.utils = { * @param {Object} start THREE.Vector3 instance describing the start line position. * @param {Object} end THREE.Vector3 instance describing the end line position. */ - randomVector3OnLine: function( attribute, index, start, end ) { - 'use strict'; - var pos = start.clone(); + randomVector3OnLine: function (attribute, index, start, end) { + "use strict"; + let pos = start.clone(); - pos.lerp( end, Math.random() ); + pos.lerp(end, Math.random()); - attribute.typedArray.setVec3Components( index, pos.x, pos.y, pos.z ); + attribute.typedArray.setVec3Components(index, pos.x, pos.y, pos.z); }, /** @@ -1646,29 +1622,33 @@ SPE.utils = { * @param {Object} radiusScale THREE.Vector3 instance describing the scale of each axis of the sphere. * @param {Number} radiusSpreadClamp What numeric multiple the projected value should be clamped to. */ - randomVector3OnSphere: function( - attribute, index, base, radius, radiusSpread, radiusScale, radiusSpreadClamp, distributionClamp + randomVector3OnSphere: function ( + attribute, + index, + base, + radius, + radiusSpread, + radiusScale, + radiusSpreadClamp, + distributionClamp ) { - 'use strict'; - - var depth = 2 * Math.random() - 1, - t = 6.2832 * Math.random(), - r = Math.sqrt( 1 - depth * depth ), - rand = this.randomFloat( radius, radiusSpread ), - x = 0, - y = 0, - z = 0; - - - if ( radiusSpreadClamp ) { - rand = Math.round( rand / radiusSpreadClamp ) * radiusSpreadClamp; + "use strict"; + + let depth = 2 * Math.random() - 1; + let t = 6.2832 * Math.random(); + let r = Math.sqrt(1 - depth * depth); + let rand = this.randomFloat(radius, radiusSpread); + let x = 0; + let y = 0; + let z = 0; + + if (radiusSpreadClamp) { + rand = Math.round(rand / radiusSpreadClamp) * radiusSpreadClamp; } - - // Set position on sphere - x = r * Math.cos( t ) * rand; - y = r * Math.sin( t ) * rand; + x = r * Math.cos(t) * rand; + y = r * Math.sin(t) * rand; z = depth * rand; // Apply radius scale to this position @@ -1682,16 +1662,14 @@ SPE.utils = { z += base.z; // Set the values in the typed array. - attribute.typedArray.setVec3Components( index, x, y, z ); + attribute.typedArray.setVec3Components(index, x, y, z); }, - seededRandom: function( seed ) { - var x = Math.sin( seed ) * 10000; - return x - ( x | 0 ); + seededRandom: function (seed) { + let x = Math.sin(seed) * 10000; + return x - (x | 0); }, - - /** * Assigns a random vector 3 value to an SPE.ShaderAttribute instance, projecting the * given values onto a 2d-disc. @@ -1704,22 +1682,22 @@ SPE.utils = { * @param {Object} radiusScale THREE.Vector3 instance describing the scale of each axis of the disc. The z-component is ignored. * @param {Number} radiusSpreadClamp What numeric multiple the projected value should be clamped to. */ - randomVector3OnDisc: function( attribute, index, base, radius, radiusSpread, radiusScale, radiusSpreadClamp ) { - 'use strict'; + randomVector3OnDisc: function (attribute, index, base, radius, radiusSpread, radiusScale, radiusSpreadClamp) { + "use strict"; - var t = 6.2832 * Math.random(), - rand = Math.abs( this.randomFloat( radius, radiusSpread ) ), - x = 0, - y = 0, - z = 0; + let t = 6.2832 * Math.random(); + let rand = Math.abs(this.randomFloat(radius, radiusSpread)); + let x = 0; + let y = 0; + let z = 0; - if ( radiusSpreadClamp ) { - rand = Math.round( rand / radiusSpreadClamp ) * radiusSpreadClamp; + if (radiusSpreadClamp) { + rand = Math.round(rand / radiusSpreadClamp) * radiusSpreadClamp; } // Set position on sphere - x = Math.cos( t ) * rand; - y = Math.sin( t ) * rand; + x = Math.cos(t) * rand; + y = Math.sin(t) * rand; // Apply radius scale to this position x *= radiusScale.x; @@ -1731,13 +1709,13 @@ SPE.utils = { z += base.z; // Set the values in the typed array. - attribute.typedArray.setVec3Components( index, x, y, z ); + attribute.typedArray.setVec3Components(index, x, y, z); }, - randomDirectionVector3OnSphere: ( function() { - 'use strict'; + randomDirectionVector3OnSphere: (function () { + "use strict"; - var v = new THREE.Vector3(); + let v = new THREE.Vector3(); /** * Given an SPE.ShaderAttribute instance, create a direction vector from the given @@ -1752,24 +1730,23 @@ SPE.utils = { * @param {Number} speed The magnitude to apply to the vector. * @param {Number} speedSpread The amount of randomness to apply to the magnitude. */ - return function( attribute, index, posX, posY, posZ, emitterPosition, speed, speedSpread ) { - v.copy( emitterPosition ); + return function (attribute, index, posX, posY, posZ, emitterPosition, speed, speedSpread) { + v.copy(emitterPosition); v.x -= posX; v.y -= posY; v.z -= posZ; - v.normalize().multiplyScalar( -this.randomFloat( speed, speedSpread ) ); + v.normalize().multiplyScalar(-this.randomFloat(speed, speedSpread)); - attribute.typedArray.setVec3Components( index, v.x, v.y, v.z ); + attribute.typedArray.setVec3Components(index, v.x, v.y, v.z); }; - }() ), - + })(), - randomDirectionVector3OnDisc: ( function() { - 'use strict'; + randomDirectionVector3OnDisc: (function () { + "use strict"; - var v = new THREE.Vector3(); + let v = new THREE.Vector3(); /** * Given an SPE.ShaderAttribute instance, create a direction vector from the given @@ -1784,26 +1761,26 @@ SPE.utils = { * @param {Number} speed The magnitude to apply to the vector. * @param {Number} speedSpread The amount of randomness to apply to the magnitude. */ - return function( attribute, index, posX, posY, posZ, emitterPosition, speed, speedSpread ) { - v.copy( emitterPosition ); + return function (attribute, index, posX, posY, posZ, emitterPosition, speed, speedSpread) { + v.copy(emitterPosition); v.x -= posX; v.y -= posY; v.z -= posZ; - v.normalize().multiplyScalar( -this.randomFloat( speed, speedSpread ) ); + v.normalize().multiplyScalar(-this.randomFloat(speed, speedSpread)); - attribute.typedArray.setVec3Components( index, v.x, v.y, 0 ); + attribute.typedArray.setVec3Components(index, v.x, v.y, 0); }; - }() ), + })(), - getPackedRotationAxis: ( function() { - 'use strict'; + getPackedRotationAxis: (function () { + "use strict"; - var v = new THREE.Vector3(), - vSpread = new THREE.Vector3(), - c = new THREE.Color(), - addOne = new THREE.Vector3( 1, 1, 1 ); + let v = new THREE.Vector3(); + let vSpread = new THREE.Vector3(); + let c = new THREE.Color(); + let addOne = new THREE.Vector3(1, 1, 1); /** * Given a rotation axis, and a rotation axis spread vector, @@ -1813,25 +1790,25 @@ SPE.utils = { * @param {Object} axisSpread THREE.Vector3 instance describing the amount of randomness to apply to the rotation axis. * @return {Number} The packed rotation axis, with randomness. */ - return function( axis, axisSpread ) { - v.copy( axis ).normalize(); - vSpread.copy( axisSpread ).normalize(); + return function (axis, axisSpread) { + v.copy(axis).normalize(); + vSpread.copy(axisSpread).normalize(); - v.x += ( -axisSpread.x * 0.5 ) + ( Math.random() * axisSpread.x ); - v.y += ( -axisSpread.y * 0.5 ) + ( Math.random() * axisSpread.y ); - v.z += ( -axisSpread.z * 0.5 ) + ( Math.random() * axisSpread.z ); + v.x += -axisSpread.x * 0.5 + Math.random() * axisSpread.x; + v.y += -axisSpread.y * 0.5 + Math.random() * axisSpread.y; + v.z += -axisSpread.z * 0.5 + Math.random() * axisSpread.z; // v.x = Math.abs( v.x ); // v.y = Math.abs( v.y ); // v.z = Math.abs( v.z ); - v.normalize().add( addOne ).multiplyScalar( 0.5 ); + v.normalize().add(addOne).multiplyScalar(0.5); - c.setRGB( v.x, v.y, v.z ); + c.setRGB(v.x, v.y, v.z); return c.getHex(); }; - }() ) + })(), }; @@ -1887,52 +1864,54 @@ SPE.utils = { * setting particle sizes to be relative to renderer size. */ - /** * The SPE.Group class. Creates a new group, containing a material, geometry, and mesh. * * @constructor * @param {GroupOptions} options A map of options to configure the group instance. */ -SPE.Group = function( options ) { - 'use strict'; +SPE.Group = function (options) { + "use strict"; - var utils = SPE.utils, - types = utils.types; + let utils = SPE.utils; + let types = utils.types; // Ensure we have a map of options to play with - options = utils.ensureTypedArg( options, types.OBJECT, {} ); - options.texture = utils.ensureTypedArg( options.texture, types.OBJECT, {} ); + options = utils.ensureTypedArg(options, types.OBJECT, {}); + options.texture = utils.ensureTypedArg(options.texture, types.OBJECT, {}); // Assign a UUID to this instance this.uuid = THREE.Math.generateUUID(); // If no `deltaTime` value is passed to the `SPE.Group.tick` function, // the value of this property will be used to advance the simulation. - this.fixedTimeStep = utils.ensureTypedArg( options.fixedTimeStep, types.NUMBER, 0.016 ); + this.fixedTimeStep = utils.ensureTypedArg(options.fixedTimeStep, types.NUMBER, 0.016); // Set properties used in the uniforms map, starting with the // texture stuff. - this.texture = utils.ensureInstanceOf( options.texture.value, THREE.Texture, null ); - this.textureFrames = utils.ensureInstanceOf( options.texture.frames, THREE.Vector2, new THREE.Vector2( 1, 1 ) ); - this.textureFrameCount = utils.ensureTypedArg( options.texture.frameCount, types.NUMBER, this.textureFrames.x * this.textureFrames.y ); - this.textureLoop = utils.ensureTypedArg( options.texture.loop, types.NUMBER, 1 ); - this.textureFrames.max( new THREE.Vector2( 1, 1 ) ); - - this.hasPerspective = utils.ensureTypedArg( options.hasPerspective, types.BOOLEAN, true ); - this.colorize = utils.ensureTypedArg( options.colorize, types.BOOLEAN, true ); + this.texture = utils.ensureInstanceOf(options.texture.value, THREE.Texture, null); + this.textureFrames = utils.ensureInstanceOf(options.texture.frames, THREE.Vector2, new THREE.Vector2(1, 1)); + this.textureFrameCount = utils.ensureTypedArg( + options.texture.frameCount, + types.NUMBER, + this.textureFrames.x * this.textureFrames.y + ); + this.textureLoop = utils.ensureTypedArg(options.texture.loop, types.NUMBER, 1); + this.textureFrames.max(new THREE.Vector2(1, 1)); - this.maxParticleCount = utils.ensureTypedArg( options.maxParticleCount, types.NUMBER, null ); + this.hasPerspective = utils.ensureTypedArg(options.hasPerspective, types.BOOLEAN, true); + this.colorize = utils.ensureTypedArg(options.colorize, types.BOOLEAN, true); + this.maxParticleCount = utils.ensureTypedArg(options.maxParticleCount, types.NUMBER, null); // Set properties used to define the ShaderMaterial's appearance. - this.blending = utils.ensureTypedArg( options.blending, types.NUMBER, THREE.AdditiveBlending ); - this.transparent = utils.ensureTypedArg( options.transparent, types.BOOLEAN, true ); - this.alphaTest = parseFloat( utils.ensureTypedArg( options.alphaTest, types.NUMBER, 0.0 ) ); - this.depthWrite = utils.ensureTypedArg( options.depthWrite, types.BOOLEAN, false ); - this.depthTest = utils.ensureTypedArg( options.depthTest, types.BOOLEAN, true ); - this.fog = utils.ensureTypedArg( options.fog, types.BOOLEAN, true ); - this.scale = utils.ensureTypedArg( options.scale, types.NUMBER, 300 ); + this.blending = utils.ensureTypedArg(options.blending, types.NUMBER, THREE.AdditiveBlending); + this.transparent = utils.ensureTypedArg(options.transparent, types.BOOLEAN, true); + this.alphaTest = parseFloat(utils.ensureTypedArg(options.alphaTest, types.NUMBER, 0.0)); + this.depthWrite = utils.ensureTypedArg(options.depthWrite, types.BOOLEAN, false); + this.depthTest = utils.ensureTypedArg(options.depthTest, types.BOOLEAN, true); + this.fog = utils.ensureTypedArg(options.fog, types.BOOLEAN, true); + this.scale = utils.ensureTypedArg(options.scale, types.NUMBER, 300); // Where emitter's go to curl up in a warm blanket and live // out their days. @@ -1953,50 +1932,49 @@ SPE.Group = function( options ) { this.particleCount = 0; - // Map of uniforms to be applied to the ShaderMaterial instance. this.uniforms = { tex: { - type: 't', - value: this.texture + type: "t", + value: this.texture, }, textureAnimation: { - type: 'v4', + type: "v4", value: new THREE.Vector4( this.textureFrames.x, this.textureFrames.y, this.textureFrameCount, - Math.max( Math.abs( this.textureLoop ), 1.0 ) - ) + Math.max(Math.abs(this.textureLoop), 1.0) + ), }, fogColor: { - type: 'c', - value: this.fog ? new THREE.Color() : null + type: "c", + value: this.fog ? new THREE.Color() : null, }, fogNear: { - type: 'f', - value: 10 + type: "f", + value: 10, }, fogFar: { - type: 'f', - value: 200 + type: "f", + value: 200, }, fogDensity: { - type: 'f', - value: 0.5 + type: "f", + value: 0.5, }, deltaTime: { - type: 'f', - value: 0 + type: "f", + value: 0, }, runTime: { - type: 'f', - value: 0 + type: "f", + value: 0, }, scale: { - type: 'f', - value: this.scale - } + type: "f", + value: this.scale, + }, }; // Add some defines into the mix... @@ -2009,31 +1987,31 @@ SPE.Group = function( options ) { SHOULD_ROTATE_PARTICLES: false, SHOULD_WIGGLE_PARTICLES: false, - SHOULD_CALCULATE_SPRITE: this.textureFrames.x > 1 || this.textureFrames.y > 1 + SHOULD_CALCULATE_SPRITE: this.textureFrames.x > 1 || this.textureFrames.y > 1, }; // Map of all attributes to be applied to the particles. // // See SPE.ShaderAttribute for a bit more info on this bit. this.attributes = { - position: new SPE.ShaderAttribute( 'v3', true ), - acceleration: new SPE.ShaderAttribute( 'v4', true ), // w component is drag - velocity: new SPE.ShaderAttribute( 'v3', true ), - rotation: new SPE.ShaderAttribute( 'v4', true ), - rotationCenter: new SPE.ShaderAttribute( 'v3', true ), - params: new SPE.ShaderAttribute( 'v4', true ), // Holds (alive, age, delay, wiggle) - size: new SPE.ShaderAttribute( 'v4', true ), - angle: new SPE.ShaderAttribute( 'v4', true ), - color: new SPE.ShaderAttribute( 'v4', true ), - opacity: new SPE.ShaderAttribute( 'v4', true ) + position: new SPE.ShaderAttribute("v3", true), + acceleration: new SPE.ShaderAttribute("v4", true), // w component is drag + velocity: new SPE.ShaderAttribute("v3", true), + rotation: new SPE.ShaderAttribute("v4", true), + rotationCenter: new SPE.ShaderAttribute("v3", true), + params: new SPE.ShaderAttribute("v4", true), // Holds (alive, age, delay, wiggle) + size: new SPE.ShaderAttribute("v4", true), + angle: new SPE.ShaderAttribute("v4", true), + color: new SPE.ShaderAttribute("v4", true), + opacity: new SPE.ShaderAttribute("v4", true), }; - this.attributeKeys = Object.keys( this.attributes ); + this.attributeKeys = Object.keys(this.attributes); this.attributeCount = this.attributeKeys.length; // Create the ShaderMaterial instance that'll help render the // particles. - this.material = new THREE.ShaderMaterial( { + this.material = new THREE.ShaderMaterial({ uniforms: this.uniforms, vertexShader: SPE.shaders.vertex, fragmentShader: SPE.shaders.fragment, @@ -2043,85 +2021,81 @@ SPE.Group = function( options ) { depthWrite: this.depthWrite, depthTest: this.depthTest, defines: this.defines, - fog: this.fog - } ); + fog: this.fog, + }); // Create the BufferGeometry and Points instances, ensuring // the geometry and material are given to the latter. this.geometry = new THREE.BufferGeometry(); - this.mesh = new THREE.Points( this.geometry, this.material ); + this.mesh = new THREE.Points(this.geometry, this.material); - if ( this.maxParticleCount === null ) { - console.warn( 'SPE.Group: No maxParticleCount specified. Adding emitters after rendering will probably cause errors.' ); + if (this.maxParticleCount === null) { + console.warn( + "SPE.Group: No maxParticleCount specified. Adding emitters after rendering will probably cause errors." + ); } }; SPE.Group.constructor = SPE.Group; +SPE.Group.prototype._updateDefines = function () { + "use strict"; -SPE.Group.prototype._updateDefines = function() { - 'use strict'; + let emitters = this.emitters; + let i = emitters.length - 1; + let emitter; + let defines = this.defines; - var emitters = this.emitters, - i = emitters.length - 1, - emitter, - defines = this.defines; - - for ( i; i >= 0; --i ) { - emitter = emitters[ i ]; + for (i; i >= 0; --i) { + emitter = emitters[i]; // Only do angle calculation if there's no spritesheet defined. // // Saves calculations being done and then overwritten in the shaders. - if ( !defines.SHOULD_CALCULATE_SPRITE ) { - defines.SHOULD_ROTATE_TEXTURE = defines.SHOULD_ROTATE_TEXTURE || !!Math.max( - Math.max.apply( null, emitter.angle.value ), - Math.max.apply( null, emitter.angle.spread ) - ); + if (!defines.SHOULD_CALCULATE_SPRITE) { + defines.SHOULD_ROTATE_TEXTURE = + defines.SHOULD_ROTATE_TEXTURE || + !!Math.max(Math.max.apply(null, emitter.angle.value), Math.max.apply(null, emitter.angle.spread)); } - defines.SHOULD_ROTATE_PARTICLES = defines.SHOULD_ROTATE_PARTICLES || !!Math.max( - emitter.rotation.angle, - emitter.rotation.angleSpread - ); + defines.SHOULD_ROTATE_PARTICLES = + defines.SHOULD_ROTATE_PARTICLES || !!Math.max(emitter.rotation.angle, emitter.rotation.angleSpread); - defines.SHOULD_WIGGLE_PARTICLES = defines.SHOULD_WIGGLE_PARTICLES || !!Math.max( - emitter.wiggle.value, - emitter.wiggle.spread - ); + defines.SHOULD_WIGGLE_PARTICLES = + defines.SHOULD_WIGGLE_PARTICLES || !!Math.max(emitter.wiggle.value, emitter.wiggle.spread); } this.material.needsUpdate = true; }; -SPE.Group.prototype._applyAttributesToGeometry = function() { - 'use strict'; +SPE.Group.prototype._applyAttributesToGeometry = function () { + "use strict"; - var attributes = this.attributes, - geometry = this.geometry, - geometryAttributes = geometry.attributes, - attribute, - geometryAttribute; + let attributes = this.attributes; + let geometry = this.geometry; + let geometryAttributes = geometry.attributes; + let attribute; + let geometryAttribute; // Loop through all the shader attributes and assign (or re-assign) // typed array buffers to each one. - for ( var attr in attributes ) { - if ( attributes.hasOwnProperty( attr ) ) { - attribute = attributes[ attr ]; - geometryAttribute = geometryAttributes[ attr ]; + for (let attr in attributes) { + if (attributes.hasOwnProperty(attr)) { + attribute = attributes[attr]; + geometryAttribute = geometryAttributes[attr]; // Update the array if this attribute exists on the geometry. // // This needs to be done because the attribute's typed array might have // been resized and reinstantiated, and might now be looking at a // different ArrayBuffer, so reference needs updating. - if ( geometryAttribute ) { + if (geometryAttribute) { geometryAttribute.array = attribute.typedArray.array; } // // Add the attribute to the geometry if it doesn't already exist. else { - geometry.setAttribute( attr, attribute.bufferAttribute ); + geometry.setAttribute(attr, attribute.bufferAttribute); } // Mark the attribute as needing an update the next time a frame is rendered. @@ -2133,7 +2107,7 @@ SPE.Group.prototype._applyAttributesToGeometry = function() { // only the values in the attribute buffers that are // associated with a particle will be used in THREE's // render cycle. - this.geometry.setDrawRange( 0, this.particleCount ); + this.geometry.setDrawRange(0, this.particleCount); }; /** @@ -2142,54 +2116,58 @@ SPE.Group.prototype._applyAttributesToGeometry = function() { * * @param {Emitter} emitter The emitter to add to this group. */ -SPE.Group.prototype.addEmitter = function( emitter ) { - 'use strict'; +SPE.Group.prototype.addEmitter = function (emitter) { + "use strict"; // Ensure an actual emitter instance is passed here. // // Decided not to throw here, just in case a scene's // rendering would be paused. Logging an error instead // of stopping execution if exceptions aren't caught. - if ( emitter instanceof SPE.Emitter === false ) { - console.error( '`emitter` argument must be instance of SPE.Emitter. Was provided with:', emitter ); + if (emitter instanceof SPE.Emitter === false) { + console.error("`emitter` argument must be instance of SPE.Emitter. Was provided with:", emitter); return; } // If the emitter already exists as a member of this group, then // stop here, we don't want to add it again. - else if ( this.emitterIDs.indexOf( emitter.uuid ) > -1 ) { - console.error( 'Emitter already exists in this group. Will not add again.' ); + else if (this.emitterIDs.indexOf(emitter.uuid) > -1) { + console.error("Emitter already exists in this group. Will not add again."); return; } // And finally, if the emitter is a member of another group, // don't add it to this group. - else if ( emitter.group !== null ) { - console.error( 'Emitter already belongs to another group. Will not add to requested group.' ); + else if (emitter.group !== null) { + console.error("Emitter already belongs to another group. Will not add to requested group."); return; } - var attributes = this.attributes, - start = this.particleCount, - end = start + emitter.particleCount; + let attributes = this.attributes; + let start = this.particleCount; + let end = start + emitter.particleCount; // Update this group's particle count. this.particleCount = end; // Emit a warning if the emitter being added will exceed the buffer sizes specified. - if ( this.maxParticleCount !== null && this.particleCount > this.maxParticleCount ) { - console.warn( 'SPE.Group: maxParticleCount exceeded. Requesting', this.particleCount, 'particles, can support only', this.maxParticleCount ); + if (this.maxParticleCount !== null && this.particleCount > this.maxParticleCount) { + console.warn( + "SPE.Group: maxParticleCount exceeded. Requesting", + this.particleCount, + "particles, can support only", + this.maxParticleCount + ); } - // Set the `particlesPerSecond` value (PPS) on the emitter. // It's used to determine how many particles to release // on a per-frame basis. - emitter._calculatePPSValue( emitter.maxAge._value + emitter.maxAge._spread ); - emitter._setBufferUpdateRanges( this.attributeKeys ); + emitter._calculatePPSValue(emitter.maxAge._value + emitter.maxAge._spread); + emitter._setBufferUpdateRanges(this.attributeKeys); // Store the offset value in the TypedArray attributes for this emitter. - emitter._setAttributeOffset( start ); + emitter._setAttributeOffset(start); // Save a reference to this group on the emitter so it knows // where it belongs. @@ -2199,34 +2177,30 @@ SPE.Group.prototype.addEmitter = function( emitter ) { // easier access during the emitter's tick function. emitter.attributes = this.attributes; - - // Ensure the attributes and their BufferAttributes exist, and their // TypedArrays are of the correct size. - for ( var attr in attributes ) { - if ( attributes.hasOwnProperty( attr ) ) { + for (let attr in attributes) { + if (attributes.hasOwnProperty(attr)) { // When creating a buffer, pass through the maxParticle count // if one is specified. - attributes[ attr ]._createBufferAttribute( - this.maxParticleCount !== null ? - this.maxParticleCount : - this.particleCount + attributes[attr]._createBufferAttribute( + this.maxParticleCount !== null ? this.maxParticleCount : this.particleCount ); } } // Loop through each particle this emitter wants to have, and create the attributes values, // storing them in the TypedArrays that each attribute holds. - for ( var i = start; i < end; ++i ) { - emitter._assignPositionValue( i ); - emitter._assignForceValue( i, 'velocity' ); - emitter._assignForceValue( i, 'acceleration' ); - emitter._assignAbsLifetimeValue( i, 'opacity' ); - emitter._assignAbsLifetimeValue( i, 'size' ); - emitter._assignAngleValue( i ); - emitter._assignRotationValue( i ); - emitter._assignParamsValue( i ); - emitter._assignColorValue( i ); + for (let i = start; i < end; ++i) { + emitter._assignPositionValue(i); + emitter._assignForceValue(i, "velocity"); + emitter._assignForceValue(i, "acceleration"); + emitter._assignAbsLifetimeValue(i, "opacity"); + emitter._assignAbsLifetimeValue(i, "size"); + emitter._assignAngleValue(i); + emitter._assignRotationValue(i); + emitter._assignParamsValue(i); + emitter._assignColorValue(i); } // Update the geometry and make sure the attributes are referencing @@ -2234,11 +2208,11 @@ SPE.Group.prototype.addEmitter = function( emitter ) { this._applyAttributesToGeometry(); // Store this emitter in this group's emitter's store. - this.emitters.push( emitter ); - this.emitterIDs.push( emitter.uuid ); + this.emitters.push(emitter); + this.emitterIDs.push(emitter.uuid); // Update certain flags to enable shader calculations only if they're necessary. - this._updateDefines( emitter ); + this._updateDefines(emitter); // Update the material since defines might have changed this.material.needsUpdate = true; @@ -2256,49 +2230,49 @@ SPE.Group.prototype.addEmitter = function( emitter ) { * * @param {Emitter} emitter The emitter to add to this group. */ -SPE.Group.prototype.removeEmitter = function( emitter ) { - 'use strict'; +SPE.Group.prototype.removeEmitter = function (emitter) { + "use strict"; - var emitterIndex = this.emitterIDs.indexOf( emitter.uuid ); + let emitterIndex = this.emitterIDs.indexOf(emitter.uuid); // Ensure an actual emitter instance is passed here. // // Decided not to throw here, just in case a scene's // rendering would be paused. Logging an error instead // of stopping execution if exceptions aren't caught. - if ( emitter instanceof SPE.Emitter === false ) { - console.error( '`emitter` argument must be instance of SPE.Emitter. Was provided with:', emitter ); + if (emitter instanceof SPE.Emitter === false) { + console.error("`emitter` argument must be instance of SPE.Emitter. Was provided with:", emitter); return; } // Issue an error if the emitter isn't a member of this group. - else if ( emitterIndex === -1 ) { - console.error( 'Emitter does not exist in this group. Will not remove.' ); + else if (emitterIndex === -1) { + console.error("Emitter does not exist in this group. Will not remove."); return; } // Kill all particles by marking them as dead // and their age as 0. - var start = emitter.attributeOffset, - end = start + emitter.particleCount, - params = this.attributes.params.typedArray; + let start = emitter.attributeOffset; + let end = start + emitter.particleCount; + let params = this.attributes.params.typedArray; // Set alive and age to zero. - for ( var i = start; i < end; ++i ) { - params.array[ i * 4 ] = 0.0; - params.array[ i * 4 + 1 ] = 0.0; + for (let i = start; i < end; ++i) { + params.array[i * 4] = 0.0; + params.array[i * 4 + 1] = 0.0; } // Remove the emitter from this group's "store". - this.emitters.splice( emitterIndex, 1 ); - this.emitterIDs.splice( emitterIndex, 1 ); + this.emitters.splice(emitterIndex, 1); + this.emitterIDs.splice(emitterIndex, 1); // Remove this emitter's attribute values from all shader attributes. // The `.splice()` call here also marks each attribute's buffer // as needing to update it's entire contents. - for ( var attr in this.attributes ) { - if ( this.attributes.hasOwnProperty( attr ) ) { - this.attributes[ attr ].splice( start, end ); + for (let attr in this.attributes) { + if (this.attributes.hasOwnProperty(attr)) { + this.attributes[attr].splice(start, end); } } @@ -2313,7 +2287,6 @@ SPE.Group.prototype.removeEmitter = function( emitter ) { this._attributesNeedRefresh = true; }; - /** * Fetch a single emitter instance from the pool. * If there are no objects in the pool, a new emitter will be @@ -2321,19 +2294,18 @@ SPE.Group.prototype.removeEmitter = function( emitter ) { * * @return {Emitter|null} */ -SPE.Group.prototype.getFromPool = function() { - 'use strict'; +SPE.Group.prototype.getFromPool = function () { + "use strict"; - var pool = this._pool, - createNew = this._createNewWhenPoolEmpty; + let pool = this._pool; + let createNew = this._createNewWhenPoolEmpty; - if ( pool.length ) { + if (pool.length) { return pool.pop(); - } - else if ( createNew ) { - var emitter = new SPE.Emitter( this._poolCreationSettings ); + } else if (createNew) { + let emitter = new SPE.Emitter(this._poolCreationSettings); - this.addEmitter( emitter ); + this.addEmitter(emitter); return emitter; } @@ -2341,39 +2313,36 @@ SPE.Group.prototype.getFromPool = function() { return null; }; - /** * Release an emitter into the pool. * * @param {ShaderParticleEmitter} emitter * @return {Group} This group instance. */ -SPE.Group.prototype.releaseIntoPool = function( emitter ) { - 'use strict'; +SPE.Group.prototype.releaseIntoPool = function (emitter) { + "use strict"; - if ( emitter instanceof SPE.Emitter === false ) { - console.error( 'Argument is not instanceof SPE.Emitter:', emitter ); + if (emitter instanceof SPE.Emitter === false) { + console.error("Argument is not instanceof SPE.Emitter:", emitter); return; } emitter.reset(); - this._pool.unshift( emitter ); + this._pool.unshift(emitter); return this; }; - /** * Get the pool array * * @return {Array} */ -SPE.Group.prototype.getPool = function() { - 'use strict'; +SPE.Group.prototype.getPool = function () { + "use strict"; return this._pool; }; - /** * Add a pool of emitters to this particle group * @@ -2382,47 +2351,44 @@ SPE.Group.prototype.getPool = function() { * @param {Boolean} createNew Should a new emitter be created if the pool runs out? * @return {Group} This group instance. */ -SPE.Group.prototype.addPool = function( numEmitters, emitterOptions, createNew ) { - 'use strict'; +SPE.Group.prototype.addPool = function (numEmitters, emitterOptions, createNew) { + "use strict"; - var emitter; + let emitter; // Save relevant settings and flags. this._poolCreationSettings = emitterOptions; this._createNewWhenPoolEmpty = !!createNew; // Create the emitters, add them to this group and the pool. - for ( var i = 0; i < numEmitters; ++i ) { - if ( Array.isArray( emitterOptions ) ) { - emitter = new SPE.Emitter( emitterOptions[ i ] ); - } - else { - emitter = new SPE.Emitter( emitterOptions ); + for (let i = 0; i < numEmitters; ++i) { + if (Array.isArray(emitterOptions)) { + emitter = new SPE.Emitter(emitterOptions[i]); + } else { + emitter = new SPE.Emitter(emitterOptions); } - this.addEmitter( emitter ); - this.releaseIntoPool( emitter ); + this.addEmitter(emitter); + this.releaseIntoPool(emitter); } return this; }; +SPE.Group.prototype._triggerSingleEmitter = function (pos) { + "use strict"; - -SPE.Group.prototype._triggerSingleEmitter = function( pos ) { - 'use strict'; - - var emitter = this.getFromPool(), + let emitter = this.getFromPool(), self = this; - if ( emitter === null ) { - console.log( 'SPE.Group pool ran out.' ); + if (emitter === null) { + console.log("SPE.Group pool ran out."); return; } // TODO: // - Make sure buffers are update with thus new position. - if ( pos instanceof THREE.Vector3 ) { - emitter.position.value.copy( pos ); + if (pos instanceof THREE.Vector3) { + emitter.position.value.copy(pos); // Trigger the setter for this property to force an // update to the emitter's position attribute. @@ -2431,15 +2397,14 @@ SPE.Group.prototype._triggerSingleEmitter = function( pos ) { emitter.enable(); - setTimeout( function() { + setTimeout(function () { emitter.disable(); - self.releaseIntoPool( emitter ); - }, ( Math.max( emitter.duration, ( emitter.maxAge.value + emitter.maxAge.spread ) ) ) * 1000 ); + self.releaseIntoPool(emitter); + }, Math.max(emitter.duration, emitter.maxAge.value + emitter.maxAge.spread) * 1000); return this; }; - /** * Set a given number of emitters as alive, with an optional position * vector3 to move them to. @@ -2448,113 +2413,101 @@ SPE.Group.prototype._triggerSingleEmitter = function( pos ) { * @param {Object} [position=undefined] A THREE.Vector3 instance describing the position to activate the emitter(s) at. * @return {Group} This group instance. */ -SPE.Group.prototype.triggerPoolEmitter = function( numEmitters, position ) { - 'use strict'; +SPE.Group.prototype.triggerPoolEmitter = function (numEmitters, position) { + "use strict"; - if ( typeof numEmitters === 'number' && numEmitters > 1 ) { - for ( var i = 0; i < numEmitters; ++i ) { - this._triggerSingleEmitter( position ); + if (typeof numEmitters === "number" && numEmitters > 1) { + for (let i = 0; i < numEmitters; ++i) { + this._triggerSingleEmitter(position); } - } - else { - this._triggerSingleEmitter( position ); + } else { + this._triggerSingleEmitter(position); } return this; }; - - -SPE.Group.prototype._updateUniforms = function( dt ) { - 'use strict'; +SPE.Group.prototype._updateUniforms = function (dt) { + "use strict"; this.uniforms.runTime.value += dt; this.uniforms.deltaTime.value = dt; }; -SPE.Group.prototype._resetBufferRanges = function() { - 'use strict'; +SPE.Group.prototype._resetBufferRanges = function () { + "use strict"; - var keys = this.attributeKeys, - i = this.attributeCount - 1, - attrs = this.attributes; + let keys = this.attributeKeys; + let i = this.attributeCount - 1; + let attrs = this.attributes; - for ( i; i >= 0; --i ) { - attrs[ keys[ i ] ].resetUpdateRange(); + for (i; i >= 0; --i) { + attrs[keys[i]].resetUpdateRange(); } }; +SPE.Group.prototype._updateBuffers = function (emitter) { + "use strict"; -SPE.Group.prototype._updateBuffers = function( emitter ) { - 'use strict'; + let keys = this.attributeKeys; + let attrs = this.attributes; + let emitterRanges = emitter.bufferUpdateRanges; + let key; + let emitterAttr; + let attr; - var keys = this.attributeKeys, - i = this.attributeCount - 1, - attrs = this.attributes, - emitterRanges = emitter.bufferUpdateRanges, - key, - emitterAttr, - attr; - - for ( i; i >= 0; --i ) { - key = keys[ i ]; - emitterAttr = emitterRanges[ key ]; - attr = attrs[ key ]; - attr.setUpdateRange( emitterAttr.min, emitterAttr.max ); + for (let i = this.attributeCount - 1; i >= 0; --i) { + key = keys[i]; + emitterAttr = emitterRanges[key]; + attr = attrs[key]; + attr.setUpdateRange(emitterAttr.min, emitterAttr.max); attr.flagUpdate(); } }; - /** * Simulate all the emitter's belonging to this group, updating * attribute values along the way. * @param {Number} [dt=Group's `fixedTimeStep` value] The number of seconds to simulate the group's emitters for (deltaTime) */ -SPE.Group.prototype.tick = function( dt ) { - 'use strict'; +SPE.Group.prototype.tick = function (dt) { + "use strict"; - var emitters = this.emitters, - numEmitters = emitters.length, - deltaTime = dt || this.fixedTimeStep, - keys = this.attributeKeys, - i, - attrs = this.attributes; + let emitters = this.emitters; + let numEmitters = emitters.length; + let deltaTime = dt || this.fixedTimeStep; + let keys = this.attributeKeys; + let i; + let attrs = this.attributes; // Update uniform values. - this._updateUniforms( deltaTime ); + this._updateUniforms(deltaTime); // Reset buffer update ranges on the shader attributes. this._resetBufferRanges(); - // If nothing needs updating, then stop here. - if ( - numEmitters === 0 && - this._attributesNeedRefresh === false && - this._attributesNeedDynamicReset === false - ) { + if (numEmitters === 0 && this._attributesNeedRefresh === false && this._attributesNeedDynamicReset === false) { return; } // Loop through each emitter in this group and // simulate it, then update the shader attribute // buffers. - for ( var i = 0, emitter; i < numEmitters; ++i ) { - emitter = emitters[ i ]; - emitter.tick( deltaTime ); - this._updateBuffers( emitter ); + for (let i = 0, emitter; i < numEmitters; ++i) { + emitter = emitters[i]; + emitter.tick(deltaTime); + this._updateBuffers(emitter); } // If the shader attributes have been refreshed, // then the dynamic properties of each buffer // attribute will need to be reset back to // what they should be. - if ( this._attributesNeedDynamicReset === true ) { - i = this.attributeCount - 1; + if (this._attributesNeedDynamicReset === true) { - for ( i; i >= 0; --i ) { - attrs[ keys[ i ] ].resetDynamic(); + for (let i = this.attributeCount - 1; i >= 0; --i) { + attrs[keys[i]].resetDynamic(); } this._attributesNeedDynamicReset = false; @@ -2563,11 +2516,10 @@ SPE.Group.prototype.tick = function( dt ) { // If this group's shader attributes need a full refresh // then mark each attribute's buffer attribute as // needing so. - if ( this._attributesNeedRefresh === true ) { - i = this.attributeCount - 1; + if (this._attributesNeedRefresh === true) { - for ( i; i >= 0; --i ) { - attrs[ keys[ i ] ].forceUpdateAll(); + for (let i = this.attributeCount - 1; i >= 0; --i) { + attrs[keys[i]].forceUpdateAll(); } this._attributesNeedRefresh = false; @@ -2575,14 +2527,13 @@ SPE.Group.prototype.tick = function( dt ) { } }; - /** * Dipose the geometry and material for the group. * * @return {Group} Group instance. */ -SPE.Group.prototype.dispose = function() { - 'use strict'; +SPE.Group.prototype.dispose = function () { + "use strict"; this.geometry.dispose(); this.material.dispose(); return this; @@ -2740,132 +2691,127 @@ SPE.Group.prototype.dispose = function() { * * @param {EmitterOptions} options A map of options to configure the emitter. */ -SPE.Emitter = function( options ) { - 'use strict'; +SPE.Emitter = function (options) { + "use strict"; - var utils = SPE.utils, - types = utils.types, - lifetimeLength = SPE.valueOverLifetimeLength; + let utils = SPE.utils; + let types = utils.types; + let lifetimeLength = SPE.valueOverLifetimeLength; // Ensure we have a map of options to play with, // and that each option is in the correct format. - options = utils.ensureTypedArg( options, types.OBJECT, {} ); - options.position = utils.ensureTypedArg( options.position, types.OBJECT, {} ); - options.velocity = utils.ensureTypedArg( options.velocity, types.OBJECT, {} ); - options.acceleration = utils.ensureTypedArg( options.acceleration, types.OBJECT, {} ); - options.radius = utils.ensureTypedArg( options.radius, types.OBJECT, {} ); - options.drag = utils.ensureTypedArg( options.drag, types.OBJECT, {} ); - options.rotation = utils.ensureTypedArg( options.rotation, types.OBJECT, {} ); - options.color = utils.ensureTypedArg( options.color, types.OBJECT, {} ); - options.opacity = utils.ensureTypedArg( options.opacity, types.OBJECT, {} ); - options.size = utils.ensureTypedArg( options.size, types.OBJECT, {} ); - options.angle = utils.ensureTypedArg( options.angle, types.OBJECT, {} ); - options.wiggle = utils.ensureTypedArg( options.wiggle, types.OBJECT, {} ); - options.maxAge = utils.ensureTypedArg( options.maxAge, types.OBJECT, {} ); - - if ( options.onParticleSpawn ) { - console.warn( 'onParticleSpawn has been removed. Please set properties directly to alter values at runtime.' ); + options = utils.ensureTypedArg(options, types.OBJECT, {}); + options.position = utils.ensureTypedArg(options.position, types.OBJECT, {}); + options.velocity = utils.ensureTypedArg(options.velocity, types.OBJECT, {}); + options.acceleration = utils.ensureTypedArg(options.acceleration, types.OBJECT, {}); + options.radius = utils.ensureTypedArg(options.radius, types.OBJECT, {}); + options.drag = utils.ensureTypedArg(options.drag, types.OBJECT, {}); + options.rotation = utils.ensureTypedArg(options.rotation, types.OBJECT, {}); + options.color = utils.ensureTypedArg(options.color, types.OBJECT, {}); + options.opacity = utils.ensureTypedArg(options.opacity, types.OBJECT, {}); + options.size = utils.ensureTypedArg(options.size, types.OBJECT, {}); + options.angle = utils.ensureTypedArg(options.angle, types.OBJECT, {}); + options.wiggle = utils.ensureTypedArg(options.wiggle, types.OBJECT, {}); + options.maxAge = utils.ensureTypedArg(options.maxAge, types.OBJECT, {}); + + if (options.onParticleSpawn) { + console.warn("onParticleSpawn has been removed. Please set properties directly to alter values at runtime."); } this.uuid = THREE.Math.generateUUID(); - this.type = utils.ensureTypedArg( options.type, types.NUMBER, SPE.distributions.BOX ); + this.type = utils.ensureTypedArg(options.type, types.NUMBER, SPE.distributions.BOX); // Start assigning properties...kicking it off with props that DON'T support values over // lifetimes. // // Btw, values over lifetimes are just the new way of referring to *Start, *Middle, and *End. this.position = { - _value: utils.ensureInstanceOf( options.position.value, THREE.Vector3, new THREE.Vector3() ), - _spread: utils.ensureInstanceOf( options.position.spread, THREE.Vector3, new THREE.Vector3() ), - _spreadClamp: utils.ensureInstanceOf( options.position.spreadClamp, THREE.Vector3, new THREE.Vector3() ), - _distribution: utils.ensureTypedArg( options.position.distribution, types.NUMBER, this.type ), - _randomise: utils.ensureTypedArg( options.position.randomise, types.BOOLEAN, false ), - _radius: utils.ensureTypedArg( options.position.radius, types.NUMBER, 10 ), - _radiusScale: utils.ensureInstanceOf( options.position.radiusScale, THREE.Vector3, new THREE.Vector3( 1, 1, 1 ) ), - _distributionClamp: utils.ensureTypedArg( options.position.distributionClamp, types.NUMBER, 0 ), + _value: utils.ensureInstanceOf(options.position.value, THREE.Vector3, new THREE.Vector3()), + _spread: utils.ensureInstanceOf(options.position.spread, THREE.Vector3, new THREE.Vector3()), + _spreadClamp: utils.ensureInstanceOf(options.position.spreadClamp, THREE.Vector3, new THREE.Vector3()), + _distribution: utils.ensureTypedArg(options.position.distribution, types.NUMBER, this.type), + _randomise: utils.ensureTypedArg(options.position.randomise, types.BOOLEAN, false), + _radius: utils.ensureTypedArg(options.position.radius, types.NUMBER, 10), + _radiusScale: utils.ensureInstanceOf(options.position.radiusScale, THREE.Vector3, new THREE.Vector3(1, 1, 1)), + _distributionClamp: utils.ensureTypedArg(options.position.distributionClamp, types.NUMBER, 0), }; this.velocity = { - _value: utils.ensureInstanceOf( options.velocity.value, THREE.Vector3, new THREE.Vector3() ), - _spread: utils.ensureInstanceOf( options.velocity.spread, THREE.Vector3, new THREE.Vector3() ), - _distribution: utils.ensureTypedArg( options.velocity.distribution, types.NUMBER, this.type ), - _randomise: utils.ensureTypedArg( options.position.randomise, types.BOOLEAN, false ) + _value: utils.ensureInstanceOf(options.velocity.value, THREE.Vector3, new THREE.Vector3()), + _spread: utils.ensureInstanceOf(options.velocity.spread, THREE.Vector3, new THREE.Vector3()), + _distribution: utils.ensureTypedArg(options.velocity.distribution, types.NUMBER, this.type), + _randomise: utils.ensureTypedArg(options.position.randomise, types.BOOLEAN, false), }; this.acceleration = { - _value: utils.ensureInstanceOf( options.acceleration.value, THREE.Vector3, new THREE.Vector3() ), - _spread: utils.ensureInstanceOf( options.acceleration.spread, THREE.Vector3, new THREE.Vector3() ), - _distribution: utils.ensureTypedArg( options.acceleration.distribution, types.NUMBER, this.type ), - _randomise: utils.ensureTypedArg( options.position.randomise, types.BOOLEAN, false ) + _value: utils.ensureInstanceOf(options.acceleration.value, THREE.Vector3, new THREE.Vector3()), + _spread: utils.ensureInstanceOf(options.acceleration.spread, THREE.Vector3, new THREE.Vector3()), + _distribution: utils.ensureTypedArg(options.acceleration.distribution, types.NUMBER, this.type), + _randomise: utils.ensureTypedArg(options.position.randomise, types.BOOLEAN, false), }; this.drag = { - _value: utils.ensureTypedArg( options.drag.value, types.NUMBER, 0 ), - _spread: utils.ensureTypedArg( options.drag.spread, types.NUMBER, 0 ), - _randomise: utils.ensureTypedArg( options.position.randomise, types.BOOLEAN, false ) + _value: utils.ensureTypedArg(options.drag.value, types.NUMBER, 0), + _spread: utils.ensureTypedArg(options.drag.spread, types.NUMBER, 0), + _randomise: utils.ensureTypedArg(options.position.randomise, types.BOOLEAN, false), }; this.wiggle = { - _value: utils.ensureTypedArg( options.wiggle.value, types.NUMBER, 0 ), - _spread: utils.ensureTypedArg( options.wiggle.spread, types.NUMBER, 0 ) + _value: utils.ensureTypedArg(options.wiggle.value, types.NUMBER, 0), + _spread: utils.ensureTypedArg(options.wiggle.spread, types.NUMBER, 0), }; this.rotation = { - _axis: utils.ensureInstanceOf( options.rotation.axis, THREE.Vector3, new THREE.Vector3( 0.0, 1.0, 0.0 ) ), - _axisSpread: utils.ensureInstanceOf( options.rotation.axisSpread, THREE.Vector3, new THREE.Vector3() ), - _angle: utils.ensureTypedArg( options.rotation.angle, types.NUMBER, 0 ), - _angleSpread: utils.ensureTypedArg( options.rotation.angleSpread, types.NUMBER, 0 ), - _static: utils.ensureTypedArg( options.rotation.static, types.BOOLEAN, false ), - _center: utils.ensureInstanceOf( options.rotation.center, THREE.Vector3, this.position._value.clone() ), - _randomise: utils.ensureTypedArg( options.position.randomise, types.BOOLEAN, false ) + _axis: utils.ensureInstanceOf(options.rotation.axis, THREE.Vector3, new THREE.Vector3(0.0, 1.0, 0.0)), + _axisSpread: utils.ensureInstanceOf(options.rotation.axisSpread, THREE.Vector3, new THREE.Vector3()), + _angle: utils.ensureTypedArg(options.rotation.angle, types.NUMBER, 0), + _angleSpread: utils.ensureTypedArg(options.rotation.angleSpread, types.NUMBER, 0), + _static: utils.ensureTypedArg(options.rotation.static, types.BOOLEAN, false), + _center: utils.ensureInstanceOf(options.rotation.center, THREE.Vector3, this.position._value.clone()), + _randomise: utils.ensureTypedArg(options.position.randomise, types.BOOLEAN, false), }; - this.maxAge = { - _value: utils.ensureTypedArg( options.maxAge.value, types.NUMBER, 2 ), - _spread: utils.ensureTypedArg( options.maxAge.spread, types.NUMBER, 0 ) + _value: utils.ensureTypedArg(options.maxAge.value, types.NUMBER, 2), + _spread: utils.ensureTypedArg(options.maxAge.spread, types.NUMBER, 0), }; - - // The following properties can support either single values, or an array of values that change // the property over a particle's lifetime (value over lifetime). this.color = { - _value: utils.ensureArrayInstanceOf( options.color.value, THREE.Color, new THREE.Color() ), - _spread: utils.ensureArrayInstanceOf( options.color.spread, THREE.Vector3, new THREE.Vector3() ), - _randomise: utils.ensureTypedArg( options.position.randomise, types.BOOLEAN, false ) + _value: utils.ensureArrayInstanceOf(options.color.value, THREE.Color, new THREE.Color()), + _spread: utils.ensureArrayInstanceOf(options.color.spread, THREE.Vector3, new THREE.Vector3()), + _randomise: utils.ensureTypedArg(options.position.randomise, types.BOOLEAN, false), }; this.opacity = { - _value: utils.ensureArrayTypedArg( options.opacity.value, types.NUMBER, 1 ), - _spread: utils.ensureArrayTypedArg( options.opacity.spread, types.NUMBER, 0 ), - _randomise: utils.ensureTypedArg( options.position.randomise, types.BOOLEAN, false ) + _value: utils.ensureArrayTypedArg(options.opacity.value, types.NUMBER, 1), + _spread: utils.ensureArrayTypedArg(options.opacity.spread, types.NUMBER, 0), + _randomise: utils.ensureTypedArg(options.position.randomise, types.BOOLEAN, false), }; this.size = { - _value: utils.ensureArrayTypedArg( options.size.value, types.NUMBER, 1 ), - _spread: utils.ensureArrayTypedArg( options.size.spread, types.NUMBER, 0 ), - _randomise: utils.ensureTypedArg( options.position.randomise, types.BOOLEAN, false ) + _value: utils.ensureArrayTypedArg(options.size.value, types.NUMBER, 1), + _spread: utils.ensureArrayTypedArg(options.size.spread, types.NUMBER, 0), + _randomise: utils.ensureTypedArg(options.position.randomise, types.BOOLEAN, false), }; this.angle = { - _value: utils.ensureArrayTypedArg( options.angle.value, types.NUMBER, 0 ), - _spread: utils.ensureArrayTypedArg( options.angle.spread, types.NUMBER, 0 ), - _randomise: utils.ensureTypedArg( options.position.randomise, types.BOOLEAN, false ) + _value: utils.ensureArrayTypedArg(options.angle.value, types.NUMBER, 0), + _spread: utils.ensureArrayTypedArg(options.angle.spread, types.NUMBER, 0), + _randomise: utils.ensureTypedArg(options.position.randomise, types.BOOLEAN, false), }; - // Assign renaining option values. - this.particleCount = utils.ensureTypedArg( options.particleCount, types.NUMBER, 100 ); - this.duration = utils.ensureTypedArg( options.duration, types.NUMBER, null ); - this.isStatic = utils.ensureTypedArg( options.isStatic, types.BOOLEAN, false ); - this.activeMultiplier = utils.ensureTypedArg( options.activeMultiplier, types.NUMBER, 1 ); - this.direction = utils.ensureTypedArg( options.direction, types.NUMBER, 1 ); + this.particleCount = utils.ensureTypedArg(options.particleCount, types.NUMBER, 100); + this.duration = utils.ensureTypedArg(options.duration, types.NUMBER, null); + this.isStatic = utils.ensureTypedArg(options.isStatic, types.BOOLEAN, false); + this.activeMultiplier = utils.ensureTypedArg(options.activeMultiplier, types.NUMBER, 1); + this.direction = utils.ensureTypedArg(options.direction, types.NUMBER, 1); // Whether this emitter is alive or not. - this.alive = utils.ensureTypedArg( options.alive, types.BOOLEAN, true ); - + this.alive = utils.ensureTypedArg(options.alive, types.BOOLEAN, true); // The following properties are set internally and are not // user-controllable. @@ -2882,8 +2828,6 @@ SPE.Emitter = function( options ) { // The end of the range in the attribute buffers this.attributeEnd = 0; - - // Holds the time the emitter has been alive for. this.age = 0.0; @@ -2917,17 +2861,19 @@ SPE.Emitter = function( options ) { this.resetFlags = { // params: utils.ensureTypedArg( options.maxAge.randomise, types.BOOLEAN, !!options.maxAge.spread ) || // utils.ensureTypedArg( options.wiggle.randomise, types.BOOLEAN, !!options.wiggle.spread ), - position: utils.ensureTypedArg( options.position.randomise, types.BOOLEAN, false ) || - utils.ensureTypedArg( options.radius.randomise, types.BOOLEAN, false ), - velocity: utils.ensureTypedArg( options.velocity.randomise, types.BOOLEAN, false ), - acceleration: utils.ensureTypedArg( options.acceleration.randomise, types.BOOLEAN, false ) || - utils.ensureTypedArg( options.drag.randomise, types.BOOLEAN, false ), - rotation: utils.ensureTypedArg( options.rotation.randomise, types.BOOLEAN, false ), - rotationCenter: utils.ensureTypedArg( options.rotation.randomise, types.BOOLEAN, false ), - size: utils.ensureTypedArg( options.size.randomise, types.BOOLEAN, false ), - color: utils.ensureTypedArg( options.color.randomise, types.BOOLEAN, false ), - opacity: utils.ensureTypedArg( options.opacity.randomise, types.BOOLEAN, false ), - angle: utils.ensureTypedArg( options.angle.randomise, types.BOOLEAN, false ) + position: + utils.ensureTypedArg(options.position.randomise, types.BOOLEAN, false) || + utils.ensureTypedArg(options.radius.randomise, types.BOOLEAN, false), + velocity: utils.ensureTypedArg(options.velocity.randomise, types.BOOLEAN, false), + acceleration: + utils.ensureTypedArg(options.acceleration.randomise, types.BOOLEAN, false) || + utils.ensureTypedArg(options.drag.randomise, types.BOOLEAN, false), + rotation: utils.ensureTypedArg(options.rotation.randomise, types.BOOLEAN, false), + rotationCenter: utils.ensureTypedArg(options.rotation.randomise, types.BOOLEAN, false), + size: utils.ensureTypedArg(options.size.randomise, types.BOOLEAN, false), + color: utils.ensureTypedArg(options.color.randomise, types.BOOLEAN, false), + opacity: utils.ensureTypedArg(options.opacity.randomise, types.BOOLEAN, false), + angle: utils.ensureTypedArg(options.angle.randomise, types.BOOLEAN, false), }; this.updateFlags = {}; @@ -2936,24 +2882,24 @@ SPE.Emitter = function( options ) { // A map to indicate which emitter parameters should update // which attribute. this.updateMap = { - maxAge: 'params', - position: 'position', - velocity: 'velocity', - acceleration: 'acceleration', - drag: 'acceleration', - wiggle: 'params', - rotation: 'rotation', - size: 'size', - color: 'color', - opacity: 'opacity', - angle: 'angle' + maxAge: "params", + position: "position", + velocity: "velocity", + acceleration: "acceleration", + drag: "acceleration", + wiggle: "params", + rotation: "rotation", + size: "size", + color: "color", + opacity: "opacity", + angle: "angle", }; - for ( var i in this.updateMap ) { - if ( this.updateMap.hasOwnProperty( i ) ) { - this.updateCounts[ this.updateMap[ i ] ] = 0.0; - this.updateFlags[ this.updateMap[ i ] ] = false; - this._createGetterSetters( this[ i ], i ); + for (let i in this.updateMap) { + if (this.updateMap.hasOwnProperty(i)) { + this.updateCounts[this.updateMap[i]] = 0.0; + this.updateFlags[this.updateMap[i]] = false; + this._createGetterSetters(this[i], i); } } @@ -2961,148 +2907,141 @@ SPE.Emitter = function( options ) { this.attributeKeys = null; this.attributeCount = 0; - // Ensure that the value-over-lifetime property objects above // have value and spread properties that are of the same length. // // Also, for now, make sure they have a length of 3 (min/max arguments here). - utils.ensureValueOverLifetimeCompliance( this.color, lifetimeLength, lifetimeLength ); - utils.ensureValueOverLifetimeCompliance( this.opacity, lifetimeLength, lifetimeLength ); - utils.ensureValueOverLifetimeCompliance( this.size, lifetimeLength, lifetimeLength ); - utils.ensureValueOverLifetimeCompliance( this.angle, lifetimeLength, lifetimeLength ); + utils.ensureValueOverLifetimeCompliance(this.color, lifetimeLength, lifetimeLength); + utils.ensureValueOverLifetimeCompliance(this.opacity, lifetimeLength, lifetimeLength); + utils.ensureValueOverLifetimeCompliance(this.size, lifetimeLength, lifetimeLength); + utils.ensureValueOverLifetimeCompliance(this.angle, lifetimeLength, lifetimeLength); }; SPE.Emitter.constructor = SPE.Emitter; -SPE.Emitter.prototype._createGetterSetters = function( propObj, propName ) { - 'use strict'; +SPE.Emitter.prototype._createGetterSetters = function (propObj, propName) { + "use strict"; - var self = this; + let self = this; - for ( var i in propObj ) { - if ( propObj.hasOwnProperty( i ) ) { + for (let i in propObj) { + if (propObj.hasOwnProperty(i)) { + let name = i.replace("_", ""); - var name = i.replace( '_', '' ); - - Object.defineProperty( propObj, name, { - get: ( function( prop ) { - return function() { - return this[ prop ]; + Object.defineProperty(propObj, name, { + get: (function (prop) { + return function () { + return this[prop]; }; - }( i ) ), + })(i), - set: ( function( prop ) { - return function( value ) { - var mapName = self.updateMap[ propName ], - prevValue = this[ prop ], + set: (function (prop) { + return function (value) { + let mapName = self.updateMap[propName], + prevValue = this[prop], length = SPE.valueOverLifetimeLength; - if ( prop === '_rotationCenter' ) { + if (prop === "_rotationCenter") { self.updateFlags.rotationCenter = true; self.updateCounts.rotationCenter = 0.0; - } - else if ( prop === '_randomise' ) { - self.resetFlags[ mapName ] = value; - } - else { - self.updateFlags[ mapName ] = true; - self.updateCounts[ mapName ] = 0.0; + } else if (prop === "_randomise") { + self.resetFlags[mapName] = value; + } else { + self.updateFlags[mapName] = true; + self.updateCounts[mapName] = 0.0; } self.group._updateDefines(); - this[ prop ] = value; + this[prop] = value; // If the previous value was an array, then make // sure the provided value is interpolated correctly. - if ( Array.isArray( prevValue ) ) { - SPE.utils.ensureValueOverLifetimeCompliance( self[ propName ], length, length ); + if (Array.isArray(prevValue)) { + SPE.utils.ensureValueOverLifetimeCompliance(self[propName], length, length); } }; - }( i ) ) - } ); + })(i), + }); } } }; -SPE.Emitter.prototype._setBufferUpdateRanges = function( keys ) { - 'use strict'; +SPE.Emitter.prototype._setBufferUpdateRanges = function (keys) { + "use strict"; this.attributeKeys = keys; this.attributeCount = keys.length; - for ( var i = this.attributeCount - 1; i >= 0; --i ) { - this.bufferUpdateRanges[ keys[ i ] ] = { + for (let i = this.attributeCount - 1; i >= 0; --i) { + this.bufferUpdateRanges[keys[i]] = { min: Number.POSITIVE_INFINITY, - max: Number.NEGATIVE_INFINITY + max: Number.NEGATIVE_INFINITY, }; } }; -SPE.Emitter.prototype._calculatePPSValue = function( groupMaxAge ) { - 'use strict'; - - var particleCount = this.particleCount; +SPE.Emitter.prototype._calculatePPSValue = function (groupMaxAge) { + "use strict"; + let particleCount = this.particleCount; // Calculate the `particlesPerSecond` value for this emitter. It's used // when determining which particles should die and which should live to // see another day. Or be born, for that matter. The "God" property. - if ( this.duration ) { - this.particlesPerSecond = particleCount / ( groupMaxAge < this.duration ? groupMaxAge : this.duration ); - } - else { + if (this.duration) { + this.particlesPerSecond = particleCount / (groupMaxAge < this.duration ? groupMaxAge : this.duration); + } else { this.particlesPerSecond = particleCount / groupMaxAge; } }; -SPE.Emitter.prototype._setAttributeOffset = function( startIndex ) { +SPE.Emitter.prototype._setAttributeOffset = function (startIndex) { this.attributeOffset = startIndex; this.activationIndex = startIndex; this.activationEnd = startIndex + this.particleCount; }; +SPE.Emitter.prototype._assignValue = function (prop, index) { + "use strict"; -SPE.Emitter.prototype._assignValue = function( prop, index ) { - 'use strict'; - - switch ( prop ) { - case 'position': - this._assignPositionValue( index ); + switch (prop) { + case "position": + this._assignPositionValue(index); break; - case 'velocity': - case 'acceleration': - this._assignForceValue( index, prop ); + case "velocity": + case "acceleration": + this._assignForceValue(index, prop); break; - case 'size': - case 'opacity': - this._assignAbsLifetimeValue( index, prop ); + case "size": + case "opacity": + this._assignAbsLifetimeValue(index, prop); break; - case 'angle': - this._assignAngleValue( index ); + case "angle": + this._assignAngleValue(index); break; - case 'params': - this._assignParamsValue( index ); + case "params": + this._assignParamsValue(index); break; - case 'rotation': - this._assignRotationValue( index ); + case "rotation": + this._assignRotationValue(index); break; - case 'color': - this._assignColorValue( index ); + case "color": + this._assignColorValue(index); break; } }; -SPE.Emitter.prototype._assignPositionValue = function( index ) { - 'use strict'; +SPE.Emitter.prototype._assignPositionValue = function (index) { + "use strict"; - var distributions = SPE.distributions, + let distributions = SPE.distributions, utils = SPE.utils, prop = this.position, attr = this.attributes.position, @@ -3110,43 +3049,60 @@ SPE.Emitter.prototype._assignPositionValue = function( index ) { spread = prop._spread, distribution = prop._distribution; - switch ( distribution ) { + switch (distribution) { case distributions.BOX: - utils.randomVector3( attr, index, value, spread, prop._spreadClamp ); + utils.randomVector3(attr, index, value, spread, prop._spreadClamp); break; case distributions.SPHERE: - utils.randomVector3OnSphere( attr, index, value, prop._radius, prop._spread.x, prop._radiusScale, prop._spreadClamp.x, prop._distributionClamp || this.particleCount ); + utils.randomVector3OnSphere( + attr, + index, + value, + prop._radius, + prop._spread.x, + prop._radiusScale, + prop._spreadClamp.x, + prop._distributionClamp || this.particleCount + ); break; case distributions.DISC: - utils.randomVector3OnDisc( attr, index, value, prop._radius, prop._spread.x, prop._radiusScale, prop._spreadClamp.x ); + utils.randomVector3OnDisc( + attr, + index, + value, + prop._radius, + prop._spread.x, + prop._radiusScale, + prop._spreadClamp.x + ); break; case distributions.LINE: - utils.randomVector3OnLine( attr, index, value, spread ); + utils.randomVector3OnLine(attr, index, value, spread); break; } }; -SPE.Emitter.prototype._assignForceValue = function( index, attrName ) { - 'use strict'; +SPE.Emitter.prototype._assignForceValue = function (index, attrName) { + "use strict"; - var distributions = SPE.distributions, - utils = SPE.utils, - prop = this[ attrName ], - value = prop._value, - spread = prop._spread, - distribution = prop._distribution, - pos, - positionX, - positionY, - positionZ, - i; - - switch ( distribution ) { + let distributions = SPE.distributions; + let utils = SPE.utils; + let prop = this[attrName]; + let value = prop._value; + let spread = prop._spread; + let distribution = prop._distribution; + let pos; + let positionX; + let positionY; + let positionZ; + let i; + + switch (distribution) { case distributions.BOX: - utils.randomVector3( this.attributes[ attrName ], index, value, spread ); + utils.randomVector3(this.attributes[attrName], index, value, spread); break; case distributions.SPHERE: @@ -3158,13 +3114,16 @@ SPE.Emitter.prototype._assignForceValue = function( index, attrName ) { // positionX = utils.zeroToEpsilon( pos[ i ], true ); // positionY = utils.zeroToEpsilon( pos[ i + 1 ], true ); // positionZ = utils.zeroToEpsilon( pos[ i + 2 ], true ); - positionX = pos[ i ]; - positionY = pos[ i + 1 ]; - positionZ = pos[ i + 2 ]; + positionX = pos[i]; + positionY = pos[i + 1]; + positionZ = pos[i + 2]; utils.randomDirectionVector3OnSphere( - this.attributes[ attrName ], index, - positionX, positionY, positionZ, + this.attributes[attrName], + index, + positionX, + positionY, + positionZ, this.position._value, prop._value.x, prop._spread.x @@ -3180,13 +3139,16 @@ SPE.Emitter.prototype._assignForceValue = function( index, attrName ) { // positionX = utils.zeroToEpsilon( pos[ i ], true ); // positionY = utils.zeroToEpsilon( pos[ i + 1 ], true ); // positionZ = utils.zeroToEpsilon( pos[ i + 2 ], true ); - positionX = pos[ i ]; - positionY = pos[ i + 1 ]; - positionZ = pos[ i + 2 ]; + positionX = pos[i]; + positionY = pos[i + 1]; + positionZ = pos[i + 2]; utils.randomDirectionVector3OnDisc( - this.attributes[ attrName ], index, - positionX, positionY, positionZ, + this.attributes[attrName], + index, + positionX, + positionY, + positionZ, this.position._value, prop._value.x, prop._spread.x @@ -3194,143 +3156,144 @@ SPE.Emitter.prototype._assignForceValue = function( index, attrName ) { break; case distributions.LINE: - utils.randomVector3OnLine( this.attributes[ attrName ], index, value, spread ); + utils.randomVector3OnLine(this.attributes[attrName], index, value, spread); break; } - if ( attrName === 'acceleration' ) { - var drag = utils.clamp( utils.randomFloat( this.drag._value, this.drag._spread ), 0, 1 ); - this.attributes.acceleration.typedArray.array[ index * 4 + 3 ] = drag; + if (attrName === "acceleration") { + let drag = utils.clamp(utils.randomFloat(this.drag._value, this.drag._spread), 0, 1); + this.attributes.acceleration.typedArray.array[index * 4 + 3] = drag; } }; -SPE.Emitter.prototype._assignAbsLifetimeValue = function( index, propName ) { - 'use strict'; - - var array = this.attributes[ propName ].typedArray, - prop = this[ propName ], - utils = SPE.utils, - value; - - if ( utils.arrayValuesAreEqual( prop._value ) && utils.arrayValuesAreEqual( prop._spread ) ) { - value = Math.abs( utils.randomFloat( prop._value[ 0 ], prop._spread[ 0 ] ) ); - array.setVec4Components( index, value, value, value, value ); - } - else { - array.setVec4Components( index, - Math.abs( utils.randomFloat( prop._value[ 0 ], prop._spread[ 0 ] ) ), - Math.abs( utils.randomFloat( prop._value[ 1 ], prop._spread[ 1 ] ) ), - Math.abs( utils.randomFloat( prop._value[ 2 ], prop._spread[ 2 ] ) ), - Math.abs( utils.randomFloat( prop._value[ 3 ], prop._spread[ 3 ] ) ) +SPE.Emitter.prototype._assignAbsLifetimeValue = function (index, propName) { + "use strict"; + + let array = this.attributes[propName].typedArray; + let prop = this[propName]; + let utils = SPE.utils; + let value; + + if (utils.arrayValuesAreEqual(prop._value) && utils.arrayValuesAreEqual(prop._spread)) { + value = Math.abs(utils.randomFloat(prop._value[0], prop._spread[0])); + array.setVec4Components(index, value, value, value, value); + } else { + array.setVec4Components( + index, + Math.abs(utils.randomFloat(prop._value[0], prop._spread[0])), + Math.abs(utils.randomFloat(prop._value[1], prop._spread[1])), + Math.abs(utils.randomFloat(prop._value[2], prop._spread[2])), + Math.abs(utils.randomFloat(prop._value[3], prop._spread[3])) ); } }; -SPE.Emitter.prototype._assignAngleValue = function( index ) { - 'use strict'; - - var array = this.attributes.angle.typedArray, - prop = this.angle, - utils = SPE.utils, - value; - - if ( utils.arrayValuesAreEqual( prop._value ) && utils.arrayValuesAreEqual( prop._spread ) ) { - value = utils.randomFloat( prop._value[ 0 ], prop._spread[ 0 ] ); - array.setVec4Components( index, value, value, value, value ); - } - else { - array.setVec4Components( index, - utils.randomFloat( prop._value[ 0 ], prop._spread[ 0 ] ), - utils.randomFloat( prop._value[ 1 ], prop._spread[ 1 ] ), - utils.randomFloat( prop._value[ 2 ], prop._spread[ 2 ] ), - utils.randomFloat( prop._value[ 3 ], prop._spread[ 3 ] ) +SPE.Emitter.prototype._assignAngleValue = function (index) { + "use strict"; + + let array = this.attributes.angle.typedArray; + let prop = this.angle; + let utils = SPE.utils; + let value; + + if (utils.arrayValuesAreEqual(prop._value) && utils.arrayValuesAreEqual(prop._spread)) { + value = utils.randomFloat(prop._value[0], prop._spread[0]); + array.setVec4Components(index, value, value, value, value); + } else { + array.setVec4Components( + index, + utils.randomFloat(prop._value[0], prop._spread[0]), + utils.randomFloat(prop._value[1], prop._spread[1]), + utils.randomFloat(prop._value[2], prop._spread[2]), + utils.randomFloat(prop._value[3], prop._spread[3]) ); } }; -SPE.Emitter.prototype._assignParamsValue = function( index ) { - 'use strict'; +SPE.Emitter.prototype._assignParamsValue = function (index) { + "use strict"; - this.attributes.params.typedArray.setVec4Components( index, + this.attributes.params.typedArray.setVec4Components( + index, this.isStatic ? 1 : 0, 0.0, - Math.abs( SPE.utils.randomFloat( this.maxAge._value, this.maxAge._spread ) ), - SPE.utils.randomFloat( this.wiggle._value, this.wiggle._spread ) + Math.abs(SPE.utils.randomFloat(this.maxAge._value, this.maxAge._spread)), + SPE.utils.randomFloat(this.wiggle._value, this.wiggle._spread) ); }; -SPE.Emitter.prototype._assignRotationValue = function( index ) { - 'use strict'; +SPE.Emitter.prototype._assignRotationValue = function (index) { + "use strict"; - this.attributes.rotation.typedArray.setVec3Components( index, - SPE.utils.getPackedRotationAxis( this.rotation._axis, this.rotation._axisSpread ), - SPE.utils.randomFloat( this.rotation._angle, this.rotation._angleSpread ), + this.attributes.rotation.typedArray.setVec3Components( + index, + SPE.utils.getPackedRotationAxis(this.rotation._axis, this.rotation._axisSpread), + SPE.utils.randomFloat(this.rotation._angle, this.rotation._angleSpread), this.rotation._static ? 0 : 1 ); - this.attributes.rotationCenter.typedArray.setVec3( index, this.rotation._center ); + this.attributes.rotationCenter.typedArray.setVec3(index, this.rotation._center); }; -SPE.Emitter.prototype._assignColorValue = function( index ) { - 'use strict'; - SPE.utils.randomColorAsHex( this.attributes.color, index, this.color._value, this.color._spread ); +SPE.Emitter.prototype._assignColorValue = function (index) { + "use strict"; + SPE.utils.randomColorAsHex(this.attributes.color, index, this.color._value, this.color._spread); }; -SPE.Emitter.prototype._resetParticle = function( index ) { - 'use strict'; +SPE.Emitter.prototype._resetParticle = function (index) { + "use strict"; - var resetFlags = this.resetFlags, - updateFlags = this.updateFlags, - updateCounts = this.updateCounts, - keys = this.attributeKeys, - key, - updateFlag; + let resetFlags = this.resetFlags; + let updateFlags = this.updateFlags; + let updateCounts = this.updateCounts; + let keys = this.attributeKeys; + let key; + let updateFlag; - for ( var i = this.attributeCount - 1; i >= 0; --i ) { - key = keys[ i ]; - updateFlag = updateFlags[ key ]; + for (let i = this.attributeCount - 1; i >= 0; --i) { + key = keys[i]; + updateFlag = updateFlags[key]; - if ( resetFlags[ key ] === true || updateFlag === true ) { - this._assignValue( key, index ); - this._updateAttributeUpdateRange( key, index ); + if (resetFlags[key] === true || updateFlag === true) { + this._assignValue(key, index); + this._updateAttributeUpdateRange(key, index); - if ( updateFlag === true && updateCounts[ key ] === this.particleCount ) { - updateFlags[ key ] = false; - updateCounts[ key ] = 0.0; - } - else if ( updateFlag == true ) { - ++updateCounts[ key ]; + if (updateFlag === true && updateCounts[key] === this.particleCount) { + updateFlags[key] = false; + updateCounts[key] = 0.0; + } else if (updateFlag == true) { + ++updateCounts[key]; } } } }; -SPE.Emitter.prototype._updateAttributeUpdateRange = function( attr, i ) { - 'use strict'; +SPE.Emitter.prototype._updateAttributeUpdateRange = function (attr, i) { + "use strict"; - var ranges = this.bufferUpdateRanges[ attr ]; + let ranges = this.bufferUpdateRanges[attr]; - ranges.min = Math.min( i, ranges.min ); - ranges.max = Math.max( i, ranges.max ); + ranges.min = Math.min(i, ranges.min); + ranges.max = Math.max(i, ranges.max); }; -SPE.Emitter.prototype._resetBufferRanges = function() { - 'use strict'; +SPE.Emitter.prototype._resetBufferRanges = function () { + "use strict"; - var ranges = this.bufferUpdateRanges, - keys = this.bufferUpdateKeys, - i = this.bufferUpdateCount - 1, - key; + let ranges = this.bufferUpdateRanges; + let keys = this.bufferUpdateKeys; + let i = this.bufferUpdateCount - 1; + let key; - for ( i; i >= 0; --i ) { - key = keys[ i ]; - ranges[ key ].min = Number.POSITIVE_INFINITY; - ranges[ key ].max = Number.NEGATIVE_INFINITY; + for (let i; i >= 0; --i) { + key = keys[i]; + ranges[key].min = Number.POSITIVE_INFINITY; + ranges[key].max = Number.NEGATIVE_INFINITY; } }; -SPE.Emitter.prototype._onRemove = function() { - 'use strict'; +SPE.Emitter.prototype._onRemove = function () { + "use strict"; // Reset any properties of the emitter that were set by // a group when it was added. this.particlesPerSecond = 0; @@ -3343,68 +3306,75 @@ SPE.Emitter.prototype._onRemove = function() { this.age = 0.0; }; -SPE.Emitter.prototype._decrementParticleCount = function() { - 'use strict'; +SPE.Emitter.prototype._decrementParticleCount = function () { + "use strict"; --this.activeParticleCount; // TODO: // - Trigger event if count === 0. }; -SPE.Emitter.prototype._incrementParticleCount = function() { - 'use strict'; +SPE.Emitter.prototype._incrementParticleCount = function () { + "use strict"; ++this.activeParticleCount; // TODO: // - Trigger event if count === this.particleCount. }; -SPE.Emitter.prototype._checkParticleAges = function( start, end, params, dt ) { - 'use strict'; - for ( var i = end - 1, index, maxAge, age, alive; i >= start; --i ) { +SPE.Emitter.prototype._checkParticleAges = function (start, end, params, dt) { + "use strict"; + + let index; + let maxAge; + let age; + let alive; + + for (let i = end - 1; i >= start; --i) { index = i * 4; - alive = params[ index ]; + alive = params[index]; - if ( alive === 0.0 ) { + if (alive === 0.0) { continue; } // Increment age - age = params[ index + 1 ]; - maxAge = params[ index + 2 ]; + age = params[index + 1]; + maxAge = params[index + 2]; - if ( this.direction === 1 ) { + if (this.direction === 1) { age += dt; - if ( age >= maxAge ) { + if (age >= maxAge) { age = 0.0; alive = 0.0; this._decrementParticleCount(); } - } - else { + } else { age -= dt; - if ( age <= 0.0 ) { + if (age <= 0.0) { age = maxAge; alive = 0.0; this._decrementParticleCount(); } } - params[ index ] = alive; - params[ index + 1 ] = age; + params[index] = alive; + params[index + 1] = age; - this._updateAttributeUpdateRange( 'params', i ); + this._updateAttributeUpdateRange("params", i); } }; -SPE.Emitter.prototype._activateParticles = function( activationStart, activationEnd, params, dtPerParticle ) { - 'use strict'; - var direction = this.direction; +SPE.Emitter.prototype._activateParticles = function (activationStart, activationEnd, params, dtPerParticle) { + "use strict"; + let direction = this.direction; + let index; + let dtValue; - for ( var i = activationStart, index, dtValue; i < activationEnd; ++i ) { + for (let i = activationStart; i < activationEnd; ++i) { index = i * 4; // Don't re-activate particles that aren't dead yet. @@ -3412,7 +3382,7 @@ SPE.Emitter.prototype._activateParticles = function( activationStart, activation // continue; // } - if ( params[ index ] != 0.0 && this.particleCount !== 1 ) { + if (params[index] != 0.0 && this.particleCount !== 1) { continue; } @@ -3420,10 +3390,10 @@ SPE.Emitter.prototype._activateParticles = function( activationStart, activation this._incrementParticleCount(); // Mark the particle as alive. - params[ index ] = 1.0; + params[index] = 1.0; // Reset the particle - this._resetParticle( i ); + this._resetParticle(i); // Move each particle being activated to // it's actual position in time. @@ -3431,10 +3401,10 @@ SPE.Emitter.prototype._activateParticles = function( activationStart, activation // This stops particles being 'clumped' together // when frame rates are on the lower side of 60fps // or not constant (a very real possibility!) - dtValue = dtPerParticle * ( i - activationStart ) - params[ index + 1 ] = direction === -1 ? params[ index + 2 ] - dtValue : dtValue; + dtValue = dtPerParticle * (i - activationStart); + params[index + 1] = direction === -1 ? params[index + 2] - dtValue : dtValue; - this._updateAttributeUpdateRange( 'params', i ); + this._updateAttributeUpdateRange("params", i); } }; @@ -3447,61 +3417,59 @@ SPE.Emitter.prototype._activateParticles = function( activationStart, activation * * @param {Number} dt The number of seconds to simulate (deltaTime) */ -SPE.Emitter.prototype.tick = function( dt ) { - 'use strict'; +SPE.Emitter.prototype.tick = function (dt) { + "use strict"; - if ( this.isStatic ) { + if (this.isStatic) { return; } - if ( this.paramsArray === null ) { + if (this.paramsArray === null) { this.paramsArray = this.attributes.params.typedArray.array; } - var start = this.attributeOffset, - end = start + this.particleCount, - params = this.paramsArray, // vec3( alive, age, maxAge, wiggle ) - ppsDt = this.particlesPerSecond * this.activeMultiplier * dt, - activationIndex = this.activationIndex; + let start = this.attributeOffset; + let end = start + this.particleCount; + let params = this.paramsArray; + let ppsDt = this.particlesPerSecond * this.activeMultiplier * dt; + let activationIndex = this.activationIndex; // Reset the buffer update indices. this._resetBufferRanges(); // Increment age for those particles that are alive, // and kill off any particles whose age is over the limit. - this._checkParticleAges( start, end, params, dt ); + this._checkParticleAges(start, end, params, dt); // If the emitter is dead, reset the age of the emitter to zero, // ready to go again if required - if ( this.alive === false ) { + if (this.alive === false) { this.age = 0.0; return; } // If the emitter has a specified lifetime and we've exceeded it, // mark the emitter as dead. - if ( this.duration !== null && this.age > this.duration ) { + if (this.duration !== null && this.age > this.duration) { this.alive = false; this.age = 0.0; return; } + let activationStart = this.particleCount === 1 ? activationIndex : activationIndex | 0; + let activationEnd = Math.min(activationStart + ppsDt, this.activationEnd); + let activationCount = (activationEnd - this.activationIndex) | 0; + let dtPerParticle = activationCount > 0 ? dt / activationCount : 0; - var activationStart = this.particleCount === 1 ? activationIndex : ( activationIndex | 0 ), - activationEnd = Math.min( activationStart + ppsDt, this.activationEnd ), - activationCount = activationEnd - this.activationIndex | 0, - dtPerParticle = activationCount > 0 ? dt / activationCount : 0; - - this._activateParticles( activationStart, activationEnd, params, dtPerParticle ); + this._activateParticles(activationStart, activationEnd, params, dtPerParticle); // Move the activation window forward, soldier. this.activationIndex += ppsDt; - if ( this.activationIndex > end ) { + if (this.activationIndex > end) { this.activationIndex = start; } - // Increment the age of the emitter. this.age += dt; }; @@ -3514,23 +3482,24 @@ SPE.Emitter.prototype.tick = function( dt ) { * @param {Boolean} [force=undefined] If true, all particles will be marked as dead instantly. * @return {Emitter} This emitter instance. */ -SPE.Emitter.prototype.reset = function( force ) { - 'use strict'; +SPE.Emitter.prototype.reset = function (force) { + "use strict"; this.age = 0.0; this.alive = false; - if ( force === true ) { - var start = this.attributeOffset, - end = start + this.particleCount, - array = this.paramsArray, - attr = this.attributes.params.bufferAttribute; + if (force === true) { + let start = this.attributeOffset; + let end = start + this.particleCount; + let array = this.paramsArray; + let attr = this.attributes.params.bufferAttribute; + let index; - for ( var i = end - 1, index; i >= start; --i ) { + for (let i = end - 1; i >= start; --i) { index = i * 4; - array[ index ] = 0.0; - array[ index + 1 ] = 0.0; + array[index] = 0.0; + array[index + 1] = 0.0; } attr.updateRange.offset = 0; @@ -3547,8 +3516,8 @@ SPE.Emitter.prototype.reset = function( force ) { * * @return {Emitter} This emitter instance. */ -SPE.Emitter.prototype.enable = function() { - 'use strict'; +SPE.Emitter.prototype.enable = function () { + "use strict"; this.alive = true; return this; }; @@ -3561,8 +3530,8 @@ SPE.Emitter.prototype.enable = function() { * * @return {Emitter} This emitter instance. */ -SPE.Emitter.prototype.disable = function() { - 'use strict'; +SPE.Emitter.prototype.disable = function () { + "use strict"; this.alive = false; return this; @@ -3579,13 +3548,12 @@ SPE.Emitter.prototype.disable = function() { * * @see SPE.Group.prototype.removeEmitter */ -SPE.Emitter.prototype.remove = function() { - 'use strict'; - if ( this.group !== null ) { - this.group.removeEmitter( this ); - } - else { - console.error( 'Emitter does not belong to a group, cannot remove.' ); +SPE.Emitter.prototype.remove = function () { + "use strict"; + if (this.group !== null) { + this.group.removeEmitter(this); + } else { + console.error("Emitter does not belong to a group, cannot remove."); } return this; diff --git a/build/SPE.min.js b/build/SPE.min.js index ec42574..0efb6cf 100644 --- a/build/SPE.min.js +++ b/build/SPE.min.js @@ -5,4 +5,4 @@ * * shader-particle-engine may be freely distributed under the MIT license (See LICENSE at root of this repository.) */ -var SPE={distributions:{BOX:1,SPHERE:2,DISC:3,LINE:4},valueOverLifetimeLength:4};"function"==typeof define&&define.amd?define("spe",SPE):"undefined"!=typeof exports&&"undefined"!=typeof module&&(module.exports=SPE),SPE.TypedArrayHelper=function(e,t,r,i){this.componentSize=r||1,this.size=t||1,this.TypedArrayConstructor=e||Float32Array,this.array=new e(t*this.componentSize),this.indexOffset=i||0},SPE.TypedArrayHelper.constructor=SPE.TypedArrayHelper,SPE.TypedArrayHelper.prototype.setSize=function(e,t){var r=this.array.length;return t||(e*=this.componentSize),ethis.array.length?this.grow(r):r{var u=new THREE.Color;return function(e,t,r,i){for(var a=r.length,o=[],n=0;n{var u=new THREE.Vector3;return function(e,t,r,i,a,o,n,s){u.copy(o),u.x-=r,u.y-=i,u.z-=a,u.normalize().multiplyScalar(-this.randomFloat(n,s)),e.typedArray.setVec3Components(t,u.x,u.y,u.z)}})(),randomDirectionVector3OnDisc:(()=>{var u=new THREE.Vector3;return function(e,t,r,i,a,o,n,s){u.copy(o),u.x-=r,u.y-=i,u.z-=a,u.normalize().multiplyScalar(-this.randomFloat(n,s)),e.typedArray.setVec3Components(t,u.x,u.y,0)}})(),getPackedRotationAxis:(()=>{var r=new THREE.Vector3,i=new THREE.Vector3,a=new THREE.Color,o=new THREE.Vector3(1,1,1);return function(e,t){return r.copy(e).normalize(),i.copy(t).normalize(),r.x+=.5*-t.x+Math.random()*t.x,r.y+=.5*-t.y+Math.random()*t.y,r.z+=.5*-t.z+Math.random()*t.z,r.normalize().add(o).multiplyScalar(.5),a.setRGB(r.x,r.y,r.z),a.getHex()}})()},SPE.Group=function(e){var t=SPE.utils,r=t.types;(e=t.ensureTypedArg(e,r.OBJECT,{})).texture=t.ensureTypedArg(e.texture,r.OBJECT,{}),this.uuid=THREE.Math.generateUUID(),this.fixedTimeStep=t.ensureTypedArg(e.fixedTimeStep,r.NUMBER,.016),this.texture=t.ensureInstanceOf(e.texture.value,THREE.Texture,null),this.textureFrames=t.ensureInstanceOf(e.texture.frames,THREE.Vector2,new THREE.Vector2(1,1)),this.textureFrameCount=t.ensureTypedArg(e.texture.frameCount,r.NUMBER,this.textureFrames.x*this.textureFrames.y),this.textureLoop=t.ensureTypedArg(e.texture.loop,r.NUMBER,1),this.textureFrames.max(new THREE.Vector2(1,1)),this.hasPerspective=t.ensureTypedArg(e.hasPerspective,r.BOOLEAN,!0),this.colorize=t.ensureTypedArg(e.colorize,r.BOOLEAN,!0),this.maxParticleCount=t.ensureTypedArg(e.maxParticleCount,r.NUMBER,null),this.blending=t.ensureTypedArg(e.blending,r.NUMBER,THREE.AdditiveBlending),this.transparent=t.ensureTypedArg(e.transparent,r.BOOLEAN,!0),this.alphaTest=parseFloat(t.ensureTypedArg(e.alphaTest,r.NUMBER,0)),this.depthWrite=t.ensureTypedArg(e.depthWrite,r.BOOLEAN,!1),this.depthTest=t.ensureTypedArg(e.depthTest,r.BOOLEAN,!0),this.fog=t.ensureTypedArg(e.fog,r.BOOLEAN,!0),this.scale=t.ensureTypedArg(e.scale,r.NUMBER,300),this.emitters=[],this.emitterIDs=[],this._pool=[],this._poolCreationSettings=null,this._createNewWhenPoolEmpty=0,this._attributesNeedRefresh=!1,this._attributesNeedDynamicReset=!1,this.particleCount=0,this.uniforms={tex:{type:"t",value:this.texture},textureAnimation:{type:"v4",value:new THREE.Vector4(this.textureFrames.x,this.textureFrames.y,this.textureFrameCount,Math.max(Math.abs(this.textureLoop),1))},fogColor:{type:"c",value:this.fog?new THREE.Color:null},fogNear:{type:"f",value:10},fogFar:{type:"f",value:200},fogDensity:{type:"f",value:.5},deltaTime:{type:"f",value:0},runTime:{type:"f",value:0},scale:{type:"f",value:this.scale}},this.defines={HAS_PERSPECTIVE:this.hasPerspective,COLORIZE:this.colorize,VALUE_OVER_LIFETIME_LENGTH:SPE.valueOverLifetimeLength,SHOULD_ROTATE_TEXTURE:!1,SHOULD_ROTATE_PARTICLES:!1,SHOULD_WIGGLE_PARTICLES:!1,SHOULD_CALCULATE_SPRITE:1this.maxParticleCount&&console.warn("SPE.Group: maxParticleCount exceeded. Requesting",this.particleCount,"particles, can support only",this.maxParticleCount),e._calculatePPSValue(e.maxAge._value+e.maxAge._spread),e._setBufferUpdateRanges(this.attributeKeys),e._setAttributeOffset(i),e.group=this,e.attributes=this.attributes,r)r.hasOwnProperty(t)&&r[t]._createBufferAttribute(null!==this.maxParticleCount?this.maxParticleCount:this.particleCount);for(var o=i;ofunction(){return this[e]})(t),set:(a=>function(e){var t=n.updateMap[o],r=this[a],i=SPE.valueOverLifetimeLength;"_rotationCenter"===a?(n.updateFlags.rotationCenter=!0,n.updateCounts.rotationCenter=0):"_randomise"===a?n.resetFlags[t]=e:(n.updateFlags[t]=!0,n.updateCounts[t]=0),n.group._updateDefines(),this[a]=e,Array.isArray(r)&&SPE.utils.ensureValueOverLifetimeCompliance(n[o],i,i)})(t)}))},SPE.Emitter.prototype._setBufferUpdateRanges=function(e){this.attributeKeys=e,this.attributeCount=e.length;for(var t=this.attributeCount-1;0<=t;--t)this.bufferUpdateRanges[e[t]]={min:Number.POSITIVE_INFINITY,max:Number.NEGATIVE_INFINITY}},SPE.Emitter.prototype._calculatePPSValue=function(e){var t=this.particleCount;this.duration?this.particlesPerSecond=t/(ethis.duration?(this.alive=!1,this.age=0):(o=1===this.particleCount?o:0|o,s=(n=Math.min(o+a,this.activationEnd))-this.activationIndex|0,this._activateParticles(o,n,i,0r&&(this.activationIndex=t),this.age+=e))},SPE.Emitter.prototype.reset=function(e){if(this.age=0,!(this.alive=!1)===e){for(var t,r=this.attributeOffset,e=r+this.particleCount,i=this.paramsArray,a=this.attributes.params.bufferAttribute,o=e-1;r<=o;--o)i[t=4*o]=0,i[1+t]=0;a.updateRange.offset=0,a.updateRange.count=-1,a.needsUpdate=!0}return this},SPE.Emitter.prototype.enable=function(){return this.alive=!0,this},SPE.Emitter.prototype.disable=function(){return this.alive=!1,this},SPE.Emitter.prototype.remove=function(){return null!==this.group?this.group.removeEmitter(this):console.error("Emitter does not belong to a group, cannot remove."),this}; \ No newline at end of file +var SPE={distributions:{BOX:1,SPHERE:2,DISC:3,LINE:4},valueOverLifetimeLength:4};"function"==typeof define&&define.amd?define("spe",SPE):"undefined"!=typeof exports&&"undefined"!=typeof module&&(module.exports=SPE),SPE.TypedArrayHelper=function(e,t,r,i){this.componentSize=r||1,this.size=t||1,this.TypedArrayConstructor=e||Float32Array,this.array=new e(t*this.componentSize),this.indexOffset=i||0},SPE.TypedArrayHelper.constructor=SPE.TypedArrayHelper,SPE.TypedArrayHelper.prototype.setSize=function(e,t){var r=this.array.length;return t||(e*=this.componentSize),e=r)&&i.push(a[e]);return this.setFromArray(0,i),this},SPE.TypedArrayHelper.prototype.setFromArray=function(e,t){var r=e+t.length;return r>this.array.length?this.grow(r):r{let s=new THREE.Color;return function(e,t,r,i){var a=r.length,o=[];for(let e=0;e{let u=new THREE.Vector3;return function(e,t,r,i,a,o,n,s){u.copy(o),u.x-=r,u.y-=i,u.z-=a,u.normalize().multiplyScalar(-this.randomFloat(n,s)),e.typedArray.setVec3Components(t,u.x,u.y,u.z)}})(),randomDirectionVector3OnDisc:(()=>{let u=new THREE.Vector3;return function(e,t,r,i,a,o,n,s){u.copy(o),u.x-=r,u.y-=i,u.z-=a,u.normalize().multiplyScalar(-this.randomFloat(n,s)),e.typedArray.setVec3Components(t,u.x,u.y,0)}})(),getPackedRotationAxis:(()=>{let r=new THREE.Vector3,i=new THREE.Vector3,a=new THREE.Color,o=new THREE.Vector3(1,1,1);return function(e,t){return r.copy(e).normalize(),i.copy(t).normalize(),r.x+=.5*-t.x+Math.random()*t.x,r.y+=.5*-t.y+Math.random()*t.y,r.z+=.5*-t.z+Math.random()*t.z,r.normalize().add(o).multiplyScalar(.5),a.setRGB(r.x,r.y,r.z),a.getHex()}})()},SPE.Group=function(e){var t=SPE.utils,r=t.types;(e=t.ensureTypedArg(e,r.OBJECT,{})).texture=t.ensureTypedArg(e.texture,r.OBJECT,{}),this.uuid=THREE.Math.generateUUID(),this.fixedTimeStep=t.ensureTypedArg(e.fixedTimeStep,r.NUMBER,.016),this.texture=t.ensureInstanceOf(e.texture.value,THREE.Texture,null),this.textureFrames=t.ensureInstanceOf(e.texture.frames,THREE.Vector2,new THREE.Vector2(1,1)),this.textureFrameCount=t.ensureTypedArg(e.texture.frameCount,r.NUMBER,this.textureFrames.x*this.textureFrames.y),this.textureLoop=t.ensureTypedArg(e.texture.loop,r.NUMBER,1),this.textureFrames.max(new THREE.Vector2(1,1)),this.hasPerspective=t.ensureTypedArg(e.hasPerspective,r.BOOLEAN,!0),this.colorize=t.ensureTypedArg(e.colorize,r.BOOLEAN,!0),this.maxParticleCount=t.ensureTypedArg(e.maxParticleCount,r.NUMBER,null),this.blending=t.ensureTypedArg(e.blending,r.NUMBER,THREE.AdditiveBlending),this.transparent=t.ensureTypedArg(e.transparent,r.BOOLEAN,!0),this.alphaTest=parseFloat(t.ensureTypedArg(e.alphaTest,r.NUMBER,0)),this.depthWrite=t.ensureTypedArg(e.depthWrite,r.BOOLEAN,!1),this.depthTest=t.ensureTypedArg(e.depthTest,r.BOOLEAN,!0),this.fog=t.ensureTypedArg(e.fog,r.BOOLEAN,!0),this.scale=t.ensureTypedArg(e.scale,r.NUMBER,300),this.emitters=[],this.emitterIDs=[],this._pool=[],this._poolCreationSettings=null,this._createNewWhenPoolEmpty=0,this._attributesNeedRefresh=!1,this._attributesNeedDynamicReset=!1,this.particleCount=0,this.uniforms={tex:{type:"t",value:this.texture},textureAnimation:{type:"v4",value:new THREE.Vector4(this.textureFrames.x,this.textureFrames.y,this.textureFrameCount,Math.max(Math.abs(this.textureLoop),1))},fogColor:{type:"c",value:this.fog?new THREE.Color:null},fogNear:{type:"f",value:10},fogFar:{type:"f",value:200},fogDensity:{type:"f",value:.5},deltaTime:{type:"f",value:0},runTime:{type:"f",value:0},scale:{type:"f",value:this.scale}},this.defines={HAS_PERSPECTIVE:this.hasPerspective,COLORIZE:this.colorize,VALUE_OVER_LIFETIME_LENGTH:SPE.valueOverLifetimeLength,SHOULD_ROTATE_TEXTURE:!1,SHOULD_ROTATE_PARTICLES:!1,SHOULD_WIGGLE_PARTICLES:!1,SHOULD_CALCULATE_SPRITE:1this.maxParticleCount&&console.warn("SPE.Group: maxParticleCount exceeded. Requesting",this.particleCount,"particles, can support only",this.maxParticleCount),t._calculatePPSValue(t.maxAge._value+t.maxAge._spread),t._setBufferUpdateRanges(this.attributeKeys),t._setAttributeOffset(i),t.group=this,t.attributes=this.attributes,r)r.hasOwnProperty(e)&&r[e]._createBufferAttribute(null!==this.maxParticleCount?this.maxParticleCount:this.particleCount);for(let e=i;efunction(){return this[e]})(t),set:(a=>function(e){var t=n.updateMap[o],r=this[a],i=SPE.valueOverLifetimeLength;"_rotationCenter"===a?(n.updateFlags.rotationCenter=!0,n.updateCounts.rotationCenter=0):"_randomise"===a?n.resetFlags[t]=e:(n.updateFlags[t]=!0,n.updateCounts[t]=0),n.group._updateDefines(),this[a]=e,Array.isArray(r)&&SPE.utils.ensureValueOverLifetimeCompliance(n[o],i,i)})(t)}))}},SPE.Emitter.prototype._setBufferUpdateRanges=function(t){this.attributeKeys=t,this.attributeCount=t.length;for(let e=this.attributeCount-1;0<=e;--e)this.bufferUpdateRanges[t[e]]={min:Number.POSITIVE_INFINITY,max:Number.NEGATIVE_INFINITY}},SPE.Emitter.prototype._calculatePPSValue=function(e){var t=this.particleCount;this.duration?this.particlesPerSecond=t/(e=t;--e)o=4*e,0!==(u=i[o])&&(s=i[1+o],n=i[2+o],1===this.direction?(s+=a)>=n&&(s=0,u=0,this._decrementParticleCount()):(s-=a)<=0&&(s=n,u=0,this._decrementParticleCount()),i[o]=u,i[1+o]=s,this._updateAttributeUpdateRange("params",e))},SPE.Emitter.prototype._activateParticles=function(t,r,i,a){var o,n,s=this.direction;for(let e=t;ethis.duration?(this.alive=!1,this.age=0):(o=1===this.particleCount?o:0|o,s=(n=Math.min(o+a,this.activationEnd))-this.activationIndex|0,this._activateParticles(o,n,i,0r&&(this.activationIndex=t),this.age+=e))},SPE.Emitter.prototype.reset=function(t){if(this.age=0,!(this.alive=!1)===t){var r,i=this.attributeOffset,t=i+this.particleCount,a=this.paramsArray,e=this.attributes.params.bufferAttribute;for(let e=t-1;e>=i;--e)a[r=4*e]=0,a[1+r]=0;e.updateRange.offset=0,e.updateRange.count=-1,e.needsUpdate=!0}return this},SPE.Emitter.prototype.enable=function(){return this.alive=!0,this},SPE.Emitter.prototype.disable=function(){return this.alive=!1,this},SPE.Emitter.prototype.remove=function(){return null!==this.group?this.group.removeEmitter(this):console.error("Emitter does not belong to a group, cannot remove."),this}; \ No newline at end of file diff --git a/examples/activeMultiplier.html b/examples/activeMultiplier.html index 567293a..ec95e2b 100644 --- a/examples/activeMultiplier.html +++ b/examples/activeMultiplier.html @@ -30,24 +30,26 @@

Examples

runtimeChanging - - - - + + + + + diff --git a/examples/basic.html b/examples/basic.html index 8041bd5..aa87267 100644 --- a/examples/basic.html +++ b/examples/basic.html @@ -23,10 +23,10 @@

Examples

runtimeChanging - - - - + + + + diff --git a/examples/clock.html b/examples/clock.html index cd2821f..1ce15f4 100644 --- a/examples/clock.html +++ b/examples/clock.html @@ -23,22 +23,22 @@

Examples

runtimeChanging - - - - - + + + + + diff --git a/examples/clouds.html b/examples/clouds.html index 45cb6b9..9d77605 100644 --- a/examples/clouds.html +++ b/examples/clouds.html @@ -1,142 +1,148 @@ - - SPE: Clouds - - - - -

- - - - - - - - - + + + + + + + init(); + initParticles(); - + animate(); + //setTimeout(animate, 0); + } + + diff --git a/examples/distributions.html b/examples/distributions.html index 1894b97..6bf6331 100644 --- a/examples/distributions.html +++ b/examples/distributions.html @@ -1,261 +1,265 @@ - - SPE: Distribution types - - - - - - - - - - - + + + + + - - + + diff --git a/examples/explosion.html b/examples/explosion.html index 1e205e1..d5ffa1b 100644 --- a/examples/explosion.html +++ b/examples/explosion.html @@ -1,239 +1,239 @@ - - SPE: Explosion - - - - - - - - - - - - + + SPE: Explosion + + + + + + + + + + + + + diff --git a/examples/fog.html b/examples/fog.html index 77fc3b9..a190eea 100644 --- a/examples/fog.html +++ b/examples/fog.html @@ -1,137 +1,142 @@ - - SPE: Fog support - - - - -

- - - - - - - - - - - + + SPE: Fog support + + + + +

+ + + + + + + + + + diff --git a/examples/js/spector.bundle.js b/examples/js/spector.bundle.js new file mode 100644 index 0000000..23a2d55 --- /dev/null +++ b/examples/js/spector.bundle.js @@ -0,0 +1,82 @@ +!function(e,t){"object"==typeof exports&&"object"==typeof module?module.exports=t():"function"==typeof define&&define.amd?define("SPECTOR",[],t):"object"==typeof exports?exports.SPECTOR=t():e.SPECTOR=t()}(self,(()=>(()=>{var e={874:(e,t)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0})},327:(e,t)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.makeEveryOtherGenerator=t.makeGenerator=void 0,t.makeGenerator=function(e){var t=function(n){return"string"==typeof n?n:null==n?"":Array.isArray(n)?n.map(t).join(""):n.type in e?e[n.type](n):"NO GENERATOR FOR ".concat(n.type)+n};return t},t.makeEveryOtherGenerator=function(e){return function(t,n){return t.reduce((function(i,r,s){return i+e(r)+(s===t.length-1?"":e(n[s]))}),"")}}},83:function(e,t,n){"use strict";var i=this&&this.__createBinding||(Object.create?function(e,t,n,i){void 0===i&&(i=n);var r=Object.getOwnPropertyDescriptor(t,n);r&&!("get"in r?!t.__esModule:r.writable||r.configurable)||(r={enumerable:!0,get:function(){return t[n]}}),Object.defineProperty(e,i,r)}:function(e,t,n,i){void 0===i&&(i=n),e[i]=t[n]}),r=this&&this.__exportStar||function(e,t){for(var n in e)"default"===n||Object.prototype.hasOwnProperty.call(t,n)||i(t,e,n)};Object.defineProperty(t,"__esModule",{value:!0}),r(n(327),t),r(n(416),t),r(n(874),t)},416:(e,t)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.visit=void 0,t.visit=function(e,t){var n=function(e,i,r,s,o){var a,l=t[e.type],c=function(e,t,n,i,r){return{node:e,parent:t,parentPath:n,key:i,index:r,skip:function(){this.skipped=!0},remove:function(){this.removed=!0},replaceWith:function(e){this.replaced=e},findParent:function(e){return n?e(n)?n:n.findParent(e):n}}}(e,i,r,s,o),u=i;if(null==l?void 0:l.enter){if(l.enter(c),c.removed){if(!s||!i)throw new Error("Asked to remove ".concat(e," but no parent key was present in ").concat(i));return"number"==typeof o?u[s].splice(o,1):u[s]=null,c}if(c.replaced){if(!s||!i)throw new Error("Asked to remove ".concat(e," but no parent key was present in ").concat(i));"number"==typeof o?u[s].splice(o,1,c.replaced):u[s]=c.replaced}if(c.skipped)return c}Object.entries(e).filter((function(e){return e[0],function(e){return function(e){return!!(null==e?void 0:e.type)}(e)||Array.isArray(e)}(e[1])})).forEach((function(t){var i=t[0],r=t[1];if(Array.isArray(r))for(var s=0,o=0;s-o{"use strict";Object.defineProperty(t,"__esModule",{value:!0});var i=(0,n(83).makeGenerator)({program:function(e){return i(e.program)+i(e.wsEnd)},segment:function(e){return i(e.blocks)},text:function(e){return i(e.text)},literal:function(e){return i(e.wsStart)+i(e.literal)+i(e.wsEnd)},identifier:function(e){return i(e.identifier)+i(e.wsEnd)},binary:function(e){return i(e.left)+i(e.operator)+i(e.right)},group:function(e){return i(e.lp)+i(e.expression)+i(e.rp)},unary:function(e){return i(e.operator)+i(e.expression)},unary_defined:function(e){return i(e.operator)+i(e.lp)+i(e.identifier)+i(e.rp)},int_constant:function(e){return i(e.token)+i(e.wsEnd)},elseif:function(e){return i(e.token)+i(e.expression)+i(e.wsEnd)+i(e.body)},if:function(e){return i(e.token)+i(e.expression)+i(e.wsEnd)+i(e.body)},ifdef:function(e){return i(e.token)+i(e.identifier)+i(e.wsEnd)},ifndef:function(e){return i(e.token)+i(e.identifier)+i(e.wsEnd)},else:function(e){return i(e.token)+i(e.body)+i(e.wsEnd)},error:function(e){return i(e.error)+i(e.message)+i(e.wsEnd)},undef:function(e){return i(e.undef)+i(e.identifier)+i(e.wsEnd)},define:function(e){return i(e.wsStart)+i(e.define)+i(e.identifier)+i(e.body)+i(e.wsEnd)},define_arguments:function(e){return i(e.wsStart)+i(e.define)+i(e.identifier)+i(e.lp)+i(e.args)+i(e.rp)+i(e.body)+i(e.wsEnd)},conditional:function(e){return i(e.wsStart)+i(e.ifPart)+i(e.elseIfParts)+i(e.elsePart)+i(e.endif)+i(e.wsEnd)},version:function(e){return i(e.version)+i(e.value)+i(e.profile)+i(e.wsEnd)},pragma:function(e){return i(e.pragma)+i(e.body)+i(e.wsEnd)},line:function(e){return i(e.line)+i(e.value)+i(e.wsEnd)},extension:function(e){return i(e.extension)+i(e.name)+i(e.colon)+i(e.behavior)+i(e.wsEnd)}});t.default=i},29:function(e,t,n){"use strict";var i=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0}),t.parser=t.preprocess=t.generate=t.preprocessComments=t.preprocessAst=void 0;var r=i(n(851));t.generate=r.default;var s=n(168);Object.defineProperty(t,"preprocessAst",{enumerable:!0,get:function(){return s.preprocessAst}}),Object.defineProperty(t,"preprocessComments",{enumerable:!0,get:function(){return s.preprocessComments}});var o=i(n(180));t.parser=o.default;var a=function(e,t){return(0,r.default)((0,s.preprocessAst)(o.default.parse(t.preserveComments?e:(0,s.preprocessComments)(e)),t))};t.preprocess=a,t.default=a},180:e=>{"use strict";function t(e,n,i,r){var s=Error.call(this,e);return Object.setPrototypeOf&&Object.setPrototypeOf(s,t.prototype),s.expected=n,s.found=i,s.location=r,s.name="SyntaxError",s}function n(e,t,n){return n=n||" ",e.length>t?e:(t-=e.length,e+(n+=n.repeat(t)).slice(0,t))}!function(e,t){function n(){this.constructor=e}n.prototype=t.prototype,e.prototype=new n}(t,Error),t.prototype.format=function(e){var t="Error: "+this.message;if(this.location){var i,r=null;for(i=0;i0){for(t=1,n=1;t>",!1),B=dt("<=",!1),$=dt(">=",!1),P=dt("==",!1),k=dt("!=",!1),D=dt("&&",!1),U=dt("||",!1),G=dt("(",!1),W=dt(")",!1),V=dt(",",!1),H=dt("!",!1),X=dt("-",!1),z=dt("~",!1),K=dt("+",!1),j=dt("*",!1),Y=dt("/",!1),q=dt("%",!1),Z=dt("<",!1),Q=dt(">",!1),J=dt("|",!1),ee=dt("^",!1),te=dt("&",!1),ne=dt(":",!1),ie=dt("#define",!1),re=(dt("#include",!1),dt("#line",!1)),se=dt("#undef",!1),oe=dt("#error",!1),ae=dt("#pragma",!1),le=dt("defined",!1),ce=dt("#if",!1),ue=dt("#ifdef",!1),he=dt("#ifndef",!1),de=dt("#elif",!1),me=dt("#else",!1),pe=dt("#endif",!1),ge=dt("#version",!1),fe=dt("#extension",!1),Ee=mt([["A","Z"],["a","z"],"_"],!1,!1),ve=mt([["A","Z"],["a","z"],"_",["0","9"]],!1,!1),_e=pt("number"),Ce=mt(["u","U"],!1,!1),Ae=mt([["1","9"]],!1,!1),Re=dt("0",!1),Se=mt([["0","7"]],!1,!1),Te=mt(["x","X"],!1,!1),be=mt([["0","9"],["a","f"],["A","F"]],!1,!1),we=mt([["0","9"]],!1,!1),xe=pt("control line"),ye=mt(["\n"],!1,!1),Le=pt("token string"),Ie=mt(["\n"],!0,!1),Fe=pt("text"),Ne=dt("#",!1),Me=pt("if"),Oe=pt("primary expression"),Be=pt("unary expression"),$e=pt("multiplicative expression"),Pe=pt("additive expression"),ke=pt("shift expression"),De=pt("relational expression"),Ue=pt("equality expression"),Ge=pt("and expression"),We=pt("exclusive or expression"),Ve=pt("inclusive or expression"),He=pt("logical and expression"),Xe=pt("logical or expression"),ze=pt("constant expression"),Ke=pt("whitespace or comment"),je=dt("//",!1),Ye=dt("/*",!1),qe=dt("*/",!1),Ze={type:"any"},Qe=pt("whitespace"),Je=mt([" ","\t"],!1,!1),et=function(e,t){return dn("literal",{literal:e,wsEnd:t})},tt=function(e,t,n){return dn("literal",{literal:t,wsStart:e,wsEnd:n})},nt=function(e){return dn("text",{text:e.join("")})},it=function(e,t,n,i,r){return dn("elseif",{token:t,expression:n,wsEnd:i,body:r})},rt=function(e,t){return gn(e,t)},st=function(e,t,n){return mn(t,n)},ot=0,at=[{line:1,column:1}],lt=0,ct=[],ut=0,ht={};if("startRule"in n){if(!(n.startRule in o))throw new Error("Can't start parsing from rule \""+n.startRule+'".');a=o[n.startRule]}function dt(e,t){return{type:"literal",text:e,ignoreCase:t}}function mt(e,t,n){return{type:"class",parts:e,inverted:t,ignoreCase:n}}function pt(e){return{type:"other",description:e}}function gt(t){var n,i=at[t];if(i)return i;for(n=t-1;!at[n];)n--;for(i={line:(i=at[n]).line,column:i.column};nlt&&(lt=ot,ct=[]),ct.push(e))}function vt(){var e,t=74*ot+0,n=ht[t];return n?(ot=n.nextPos,n.result):(e=function(){var e,t,n,i=74*ot+1,s=ht[i];return s?(ot=s.nextPos,s.result):(e=ot,(t=zt())!==r?(n=cn(),e=dn("program",{program:t.blocks,wsEnd:n})):(ot=e,e=r),ht[i]={nextPos:ot,result:e},e)}(),ht[t]={nextPos:ot,result:e},e)}function _t(){var t,n,i,s=74*ot+3,o=ht[s];return o?(ot=o.nextPos,o.result):(t=ot,"<<"===e.substr(ot,2)?(n="<<",ot+=2):(n=r,0===ut&&Et(M)),n!==r?(i=cn(),t=et(n,i)):(ot=t,t=r),ht[s]={nextPos:ot,result:t},t)}function Ct(){var t,n,i,s=74*ot+4,o=ht[s];return o?(ot=o.nextPos,o.result):(t=ot,">>"===e.substr(ot,2)?(n=">>",ot+=2):(n=r,0===ut&&Et(O)),n!==r?(i=cn(),t=et(n,i)):(ot=t,t=r),ht[s]={nextPos:ot,result:t},t)}function At(){var t,n,i,s=74*ot+5,o=ht[s];return o?(ot=o.nextPos,o.result):(t=ot,"<="===e.substr(ot,2)?(n="<=",ot+=2):(n=r,0===ut&&Et(B)),n!==r?(i=cn(),t=et(n,i)):(ot=t,t=r),ht[s]={nextPos:ot,result:t},t)}function Rt(){var t,n,i,s=74*ot+6,o=ht[s];return o?(ot=o.nextPos,o.result):(t=ot,">="===e.substr(ot,2)?(n=">=",ot+=2):(n=r,0===ut&&Et($)),n!==r?(i=cn(),t=et(n,i)):(ot=t,t=r),ht[s]={nextPos:ot,result:t},t)}function St(){var t,n,i,s=74*ot+7,o=ht[s];return o?(ot=o.nextPos,o.result):(t=ot,"=="===e.substr(ot,2)?(n="==",ot+=2):(n=r,0===ut&&Et(P)),n!==r?(i=cn(),t=et(n,i)):(ot=t,t=r),ht[s]={nextPos:ot,result:t},t)}function Tt(){var t,n,i,s=74*ot+8,o=ht[s];return o?(ot=o.nextPos,o.result):(t=ot,"!="===e.substr(ot,2)?(n="!=",ot+=2):(n=r,0===ut&&Et(k)),n!==r?(i=cn(),t=et(n,i)):(ot=t,t=r),ht[s]={nextPos:ot,result:t},t)}function bt(){var t,n,i,s=74*ot+9,o=ht[s];return o?(ot=o.nextPos,o.result):(t=ot,"&&"===e.substr(ot,2)?(n="&&",ot+=2):(n=r,0===ut&&Et(D)),n!==r?(i=cn(),t=et(n,i)):(ot=t,t=r),ht[s]={nextPos:ot,result:t},t)}function wt(){var t,n,i,s=74*ot+10,o=ht[s];return o?(ot=o.nextPos,o.result):(t=ot,"||"===e.substr(ot,2)?(n="||",ot+=2):(n=r,0===ut&&Et(U)),n!==r?(i=cn(),t=et(n,i)):(ot=t,t=r),ht[s]={nextPos:ot,result:t},t)}function xt(){var t,n,i,s=74*ot+11,o=ht[s];return o?(ot=o.nextPos,o.result):(t=ot,40===e.charCodeAt(ot)?(n="(",ot++):(n=r,0===ut&&Et(G)),n!==r?(i=cn(),t=et(n,i)):(ot=t,t=r),ht[s]={nextPos:ot,result:t},t)}function yt(){var t,n,i,s=74*ot+12,o=ht[s];return o?(ot=o.nextPos,o.result):(t=ot,41===e.charCodeAt(ot)?(n=")",ot++):(n=r,0===ut&&Et(W)),n!==r?(i=cn(),t=et(n,i)):(ot=t,t=r),ht[s]={nextPos:ot,result:t},t)}function Lt(){var t,n,i,s=74*ot+13,o=ht[s];return o?(ot=o.nextPos,o.result):(t=ot,44===e.charCodeAt(ot)?(n=",",ot++):(n=r,0===ut&&Et(V)),n!==r?(i=cn(),t=et(n,i)):(ot=t,t=r),ht[s]={nextPos:ot,result:t},t)}function It(){var t,n,i,s=74*ot+15,o=ht[s];return o?(ot=o.nextPos,o.result):(t=ot,45===e.charCodeAt(ot)?(n="-",ot++):(n=r,0===ut&&Et(X)),n!==r?(i=cn(),t=et(n,i)):(ot=t,t=r),ht[s]={nextPos:ot,result:t},t)}function Ft(){var t,n,i,s=74*ot+17,o=ht[s];return o?(ot=o.nextPos,o.result):(t=ot,43===e.charCodeAt(ot)?(n="+",ot++):(n=r,0===ut&&Et(K)),n!==r?(i=cn(),t=et(n,i)):(ot=t,t=r),ht[s]={nextPos:ot,result:t},t)}function Nt(){var t,n,i,s=74*ot+18,o=ht[s];return o?(ot=o.nextPos,o.result):(t=ot,42===e.charCodeAt(ot)?(n="*",ot++):(n=r,0===ut&&Et(j)),n!==r?(i=cn(),t=et(n,i)):(ot=t,t=r),ht[s]={nextPos:ot,result:t},t)}function Mt(){var t,n,i,s=74*ot+19,o=ht[s];return o?(ot=o.nextPos,o.result):(t=ot,47===e.charCodeAt(ot)?(n="/",ot++):(n=r,0===ut&&Et(Y)),n!==r?(i=cn(),t=et(n,i)):(ot=t,t=r),ht[s]={nextPos:ot,result:t},t)}function Ot(){var t,n,i,s=74*ot+20,o=ht[s];return o?(ot=o.nextPos,o.result):(t=ot,37===e.charCodeAt(ot)?(n="%",ot++):(n=r,0===ut&&Et(q)),n!==r?(i=cn(),t=et(n,i)):(ot=t,t=r),ht[s]={nextPos:ot,result:t},t)}function Bt(){var t,n,i,s=74*ot+21,o=ht[s];return o?(ot=o.nextPos,o.result):(t=ot,60===e.charCodeAt(ot)?(n="<",ot++):(n=r,0===ut&&Et(Z)),n!==r?(i=cn(),t=et(n,i)):(ot=t,t=r),ht[s]={nextPos:ot,result:t},t)}function $t(){var t,n,i,s=74*ot+22,o=ht[s];return o?(ot=o.nextPos,o.result):(t=ot,62===e.charCodeAt(ot)?(n=">",ot++):(n=r,0===ut&&Et(Q)),n!==r?(i=cn(),t=et(n,i)):(ot=t,t=r),ht[s]={nextPos:ot,result:t},t)}function Pt(){var t,n,i,s=74*ot+23,o=ht[s];return o?(ot=o.nextPos,o.result):(t=ot,124===e.charCodeAt(ot)?(n="|",ot++):(n=r,0===ut&&Et(J)),n!==r?(i=cn(),t=et(n,i)):(ot=t,t=r),ht[s]={nextPos:ot,result:t},t)}function kt(){var t,n,i,s=74*ot+24,o=ht[s];return o?(ot=o.nextPos,o.result):(t=ot,94===e.charCodeAt(ot)?(n="^",ot++):(n=r,0===ut&&Et(ee)),n!==r?(i=cn(),t=et(n,i)):(ot=t,t=r),ht[s]={nextPos:ot,result:t},t)}function Dt(){var t,n,i,s=74*ot+25,o=ht[s];return o?(ot=o.nextPos,o.result):(t=ot,38===e.charCodeAt(ot)?(n="&",ot++):(n=r,0===ut&&Et(te)),n!==r?(i=cn(),t=et(n,i)):(ot=t,t=r),ht[s]={nextPos:ot,result:t},t)}function Ut(){var t,n,i,s,o=74*ot+27,a=ht[o];return a?(ot=a.nextPos,a.result):(t=ot,n=cn(),e.substr(ot,7)===l?(i=l,ot+=7):(i=r,0===ut&&Et(ie)),i!==r?(s=cn(),t=tt(n,i,s)):(ot=t,t=r),ht[o]={nextPos:ot,result:t},t)}function Gt(){var t,n,i,s,o=74*ot+37,a=ht[o];return a?(ot=a.nextPos,a.result):(t=ot,n=cn(),e.substr(ot,5)===f?(i=f,ot+=5):(i=r,0===ut&&Et(de)),i!==r?(s=cn(),t=tt(n,i,s)):(ot=t,t=r),ht[o]={nextPos:ot,result:t},t)}function Wt(){var t,n,i,s,o,a,l=74*ot+42,c=ht[l];if(c)return ot=c.nextPos,c.result;if(t=ot,n=ot,i=ot,R.test(e.charAt(ot))?(s=e.charAt(ot),ot++):(s=r,0===ut&&Et(Ee)),s!==r){for(o=[],S.test(e.charAt(ot))?(a=e.charAt(ot),ot++):(a=r,0===ut&&Et(ve));a!==r;)o.push(a),S.test(e.charAt(ot))?(a=e.charAt(ot),ot++):(a=r,0===ut&&Et(ve));i=s=[s,o]}else ot=i,i=r;return(n=i!==r?e.substring(n,ot):i)!==r?(i=cn(),t=dn("identifier",{identifier:n,wsEnd:i})):(ot=t,t=r),ht[l]={nextPos:ot,result:t},t}function Vt(){var t,n,i,s,o=74*ot+44,a=ht[o];return a?(ot=a.nextPos,a.result):(ut++,t=ot,n=ot,i=function(){var t,n,i,s,o,a=74*ot+46,l=ht[a];if(l)return ot=l.nextPos,l.result;if(t=ot,n=ot,b.test(e.charAt(ot))?(i=e.charAt(ot),ot++):(i=r,0===ut&&Et(Ae)),i!==r){for(s=[],o=Xt();o!==r;)s.push(o),o=Xt();n=i=[i,s]}else ot=n,n=r;return t=n!==r?e.substring(t,ot):n,ht[a]={nextPos:ot,result:t},t}(),i!==r?((s=Ht())===r&&(s=null),n=i=[i,s]):(ot=n,n=r),(t=n!==r?e.substring(t,ot):n)===r&&(t=ot,n=ot,i=function(){var t,n,i,s,o=74*ot+47,a=ht[o];if(a)return ot=a.nextPos,a.result;if(t=ot,48===e.charCodeAt(ot)?(n="0",ot++):(n=r,0===ut&&Et(Re)),n!==r){for(i=[],w.test(e.charAt(ot))?(s=e.charAt(ot),ot++):(s=r,0===ut&&Et(Se));s!==r;)i.push(s),w.test(e.charAt(ot))?(s=e.charAt(ot),ot++):(s=r,0===ut&&Et(Se));t=n=[n,i]}else ot=t,t=r;return ht[o]={nextPos:ot,result:t},t}(),i!==r?((s=Ht())===r&&(s=null),n=i=[i,s]):(ot=n,n=r),(t=n!==r?e.substring(t,ot):n)===r&&(t=ot,n=ot,i=function(){var t,n,i,s,o,a=74*ot+48,l=ht[a];if(l)return ot=l.nextPos,l.result;if(t=ot,48===e.charCodeAt(ot)?(n="0",ot++):(n=r,0===ut&&Et(Re)),n!==r)if(x.test(e.charAt(ot))?(i=e.charAt(ot),ot++):(i=r,0===ut&&Et(Te)),i!==r){for(s=[],y.test(e.charAt(ot))?(o=e.charAt(ot),ot++):(o=r,0===ut&&Et(be));o!==r;)s.push(o),y.test(e.charAt(ot))?(o=e.charAt(ot),ot++):(o=r,0===ut&&Et(be));t=n=[n,i,s]}else ot=t,t=r;else ot=t,t=r;return ht[a]={nextPos:ot,result:t},t}(),i!==r?((s=Ht())===r&&(s=null),n=i=[i,s]):(ot=n,n=r),t=n!==r?e.substring(t,ot):n)),ut--,t===r&&(n=r,0===ut&&Et(_e)),ht[o]={nextPos:ot,result:t},t)}function Ht(){var t,n=74*ot+45,i=ht[n];return i?(ot=i.nextPos,i.result):(T.test(e.charAt(ot))?(t=e.charAt(ot),ot++):(t=r,0===ut&&Et(Ce)),ht[n]={nextPos:ot,result:t},t)}function Xt(){var t,n=74*ot+49,i=ht[n];return i?(ot=i.nextPos,i.result):(L.test(e.charAt(ot))?(t=e.charAt(ot),ot++):(t=r,0===ut&&Et(we)),ht[n]={nextPos:ot,result:t},t)}function zt(){var e,t,n,i,s,o=74*ot+50,a=ht[o];if(a)return ot=a.nextPos,a.result;if(e=ot,t=[],(n=Kt())===r){if(n=ot,i=[],(s=Yt())!==r)for(;s!==r;)i.push(s),s=Yt();else i=r;i!==r&&(i=nt(i)),n=i}if(n!==r){for(;n!==r;)if(t.push(n),(n=Kt())===r){if(n=ot,i=[],(s=Yt())!==r)for(;s!==r;)i.push(s),s=Yt();else i=r;i!==r&&(i=nt(i)),n=i}}else t=r;return t!==r&&(t=dn("segment",{blocks:t})),e=t,ht[o]={nextPos:ot,result:e},e}function Kt(){var t,n,i,s,o,a,l,m,f,A,T,b,w,x=74*ot+51,y=ht[x];if(y)return ot=y.nextPos,y.result;if(ut++,t=function(){var t,n,i,s,o,a,l,c,u,h,d,m=74*ot+54,f=ht[m];if(f)return ot=f.nextPos,f.result;if(t=ot,n=ot,i=function(){var t,n,i,s=74*ot+55,o=ht[s];return o?(ot=o.nextPos,o.result):(ut++,t=ot,n=function(){var t,n,i,s,o=74*ot+35,a=ht[o];return a?(ot=a.nextPos,a.result):(t=ot,n=cn(),e.substr(ot,6)===p?(i=p,ot+=6):(i=r,0===ut&&Et(ue)),i!==r?(s=cn(),t=tt(n,i,s)):(ot=t,t=r),ht[o]={nextPos:ot,result:t},t)}(),n!==r&&(i=Wt())!==r?t=dn("ifdef",{token:n,identifier:i}):(ot=t,t=r),t===r&&(t=ot,n=function(){var t,n,i,s,o=74*ot+36,a=ht[o];return a?(ot=a.nextPos,a.result):(t=ot,n=cn(),e.substr(ot,7)===g?(i=g,ot+=7):(i=r,0===ut&&Et(he)),i!==r?(s=cn(),t=tt(n,i,s)):(ot=t,t=r),ht[o]={nextPos:ot,result:t},t)}(),n!==r&&(i=Wt())!==r?t=dn("ifndef",{token:n,identifier:i}):(ot=t,t=r),t===r&&(t=ot,n=function(){var t,n,i,s,o=74*ot+34,a=ht[o];return a?(ot=a.nextPos,a.result):(t=ot,n=cn(),"#if"===e.substr(ot,3)?(i="#if",ot+=3):(i=r,0===ut&&Et(ce)),i!==r?(s=cn(),t=tt(n,i,s)):(ot=t,t=r),ht[o]={nextPos:ot,result:t},t)}(),n!==r?((i=ln())===r&&(i=null),t=function(e,t){return dn("if",{token:e,expression:t})}(n,i)):(ot=t,t=r))),ut--,t===r&&(n=r,0===ut&&Et(Me)),ht[s]={nextPos:ot,result:t},t)}(),i!==r?(I.test(e.charAt(ot))?(s=e.charAt(ot),ot++):(s=r,0===ut&&Et(ye)),s!==r?((o=zt())===r&&(o=null),u=i,h=s,d=o,n={...u,body:d,wsEnd:h}):(ot=n,n=r)):(ot=n,n=r),n!==r){for(i=[],s=ot,(o=Gt())!==r&&(a=ln())!==r?(I.test(e.charAt(ot))?(l=e.charAt(ot),ot++):(l=r,0===ut&&Et(ye)),l!==r?((c=zt())===r&&(c=null),s=it(0,o,a,l,c)):(ot=s,s=r)):(ot=s,s=r);s!==r;)i.push(s),s=ot,(o=Gt())!==r&&(a=ln())!==r?(I.test(e.charAt(ot))?(l=e.charAt(ot),ot++):(l=r,0===ut&&Et(ye)),l!==r?((c=zt())===r&&(c=null),s=it(0,o,a,l,c)):(ot=s,s=r)):(ot=s,s=r);s=ot,o=function(){var t,n,i,s,o=74*ot+38,a=ht[o];return a?(ot=a.nextPos,a.result):(t=ot,n=cn(),e.substr(ot,5)===E?(i=E,ot+=5):(i=r,0===ut&&Et(me)),i!==r?(s=cn(),t=tt(n,i,s)):(ot=t,t=r),ht[o]={nextPos:ot,result:t},t)}(),o!==r?(I.test(e.charAt(ot))?(a=e.charAt(ot),ot++):(a=r,0===ut&&Et(ye)),a!==r?((l=zt())===r&&(l=null),s=function(e,t,n,i,r){return dn("else",{token:n,wsEnd:i,body:r})}(0,0,o,a,l)):(ot=s,s=r)):(ot=s,s=r),s===r&&(s=null),o=function(){var t,n,i,s,o=74*ot+39,a=ht[o];return a?(ot=a.nextPos,a.result):(t=ot,n=cn(),e.substr(ot,6)===v?(i=v,ot+=6):(i=r,0===ut&&Et(pe)),i!==r?(s=cn(),t=tt(n,i,s)):(ot=t,t=r),ht[o]={nextPos:ot,result:t},t)}(),o!==r?(I.test(e.charAt(ot))?(a=e.charAt(ot),ot++):(a=r,0===ut&&Et(ye)),a===r&&(a=null),t=function(e,t,n,i,r){return dn("conditional",{ifPart:e,elseIfParts:t,elsePart:n,endif:i,wsEnd:r})}(n,i,s,o,a)):(ot=t,t=r)}else ot=t,t=r;return ht[m]={nextPos:ot,result:t},t}(),t===r){if(t=ot,n=ot,(i=Ut())!==r)if((s=function(){var t,n,i,s,o,a,l=74*ot+43,c=ht[l];if(c)return ot=c.nextPos,c.result;if(t=ot,n=ot,i=ot,R.test(e.charAt(ot))?(s=e.charAt(ot),ot++):(s=r,0===ut&&Et(Ee)),s!==r){for(o=[],S.test(e.charAt(ot))?(a=e.charAt(ot),ot++):(a=r,0===ut&&Et(ve));a!==r;)o.push(a),S.test(e.charAt(ot))?(a=e.charAt(ot),ot++):(a=r,0===ut&&Et(ve));i=s=[s,o]}else ot=i,i=r;return(n=i!==r?e.substring(n,ot):i)!==r&&(n=dn("identifier",{identifier:n})),t=n,ht[l]={nextPos:ot,result:t},t}())!==r)if((o=xt())!==r){if(a=ot,(l=Wt())!==r){for(m=[],f=ot,(A=Lt())!==r&&(T=Wt())!==r?f=A=[A,T]:(ot=f,f=r);f!==r;)m.push(f),f=ot,(A=Lt())!==r&&(T=Wt())!==r?f=A=[A,T]:(ot=f,f=r);a=[l,...m.flat()]}else ot=a,a=r;a===r&&(a=null),(l=yt())!==r?((m=jt())===r&&(m=null),n=function(e,t,n,i,r,s){return dn("define_arguments",{define:e,identifier:t,lp:n,args:i||[],rp:r,body:s})}(i,s,o,a,l,m)):(ot=n,n=r)}else ot=n,n=r;else ot=n,n=r;else ot=n,n=r;if(n===r&&(n=ot,(i=Ut())!==r&&(s=Wt())!==r?((o=jt())===r&&(o=null),n=function(e,t,n){return dn("define",{define:e,identifier:t,body:n})}(i,s,o)):(ot=n,n=r),n===r)){if(n=ot,i=function(){var t,n,i,s,o=74*ot+29,a=ht[o];return a?(ot=a.nextPos,a.result):(t=ot,n=cn(),e.substr(ot,5)===c?(i=c,ot+=5):(i=r,0===ut&&Et(re)),i!==r?(s=cn(),t=tt(n,i,s)):(ot=t,t=r),ht[o]={nextPos:ot,result:t},t)}(),i!==r){if(s=ot,o=[],(a=Xt())!==r)for(;a!==r;)o.push(a),a=Xt();else o=r;(s=o!==r?e.substring(s,ot):o)!==r?n=dn("line",{line:i,value:s}):(ot=n,n=r)}else ot=n,n=r;n===r&&(n=ot,i=function(){var t,n,i,s,o=74*ot+30,a=ht[o];return a?(ot=a.nextPos,a.result):(t=ot,n=cn(),e.substr(ot,6)===u?(i=u,ot+=6):(i=r,0===ut&&Et(se)),i!==r?(s=cn(),t=tt(n,i,s)):(ot=t,t=r),ht[o]={nextPos:ot,result:t},t)}(),i!==r&&(s=Wt())!==r?n=dn("undef",{undef:i,identifier:s}):(ot=n,n=r),n===r&&(n=ot,i=function(){var t,n,i,s,o=74*ot+31,a=ht[o];return a?(ot=a.nextPos,a.result):(t=ot,n=cn(),e.substr(ot,6)===h?(i=h,ot+=6):(i=r,0===ut&&Et(oe)),i!==r?(s=cn(),t=tt(n,i,s)):(ot=t,t=r),ht[o]={nextPos:ot,result:t},t)}(),i!==r&&(s=jt())!==r?n=dn("error",{error:i,message:s}):(ot=n,n=r),n===r&&(n=ot,i=function(){var t,n,i,s,o=74*ot+32,a=ht[o];return a?(ot=a.nextPos,a.result):(t=ot,n=cn(),e.substr(ot,7)===d?(i=d,ot+=7):(i=r,0===ut&&Et(ae)),i!==r?(s=cn(),t=tt(n,i,s)):(ot=t,t=r),ht[o]={nextPos:ot,result:t},t)}(),i!==r&&(s=jt())!==r?n=dn("pragma",{pragma:i,body:s}):(ot=n,n=r),n===r&&(n=ot,i=function(){var t,n,i,s,o=74*ot+40,a=ht[o];return a?(ot=a.nextPos,a.result):(t=ot,n=cn(),e.substr(ot,8)===_?(i=_,ot+=8):(i=r,0===ut&&Et(ge)),i!==r?(s=cn(),t=tt(n,i,s)):(ot=t,t=r),ht[o]={nextPos:ot,result:t},t)}(),i!==r&&(s=Vt())!==r?((o=jt())===r&&(o=null),n=dn("version",{version:i,value:s,profile:o})):(ot=n,n=r),n===r&&(n=ot,i=function(){var t,n,i,s,o=74*ot+41,a=ht[o];return a?(ot=a.nextPos,a.result):(t=ot,n=cn(),e.substr(ot,10)===C?(i=C,ot+=10):(i=r,0===ut&&Et(fe)),i!==r?(s=cn(),t=tt(n,i,s)):(ot=t,t=r),ht[o]={nextPos:ot,result:t},t)}(),i!==r&&(s=Wt())!==r?(o=function(){var t,n,i,s=74*ot+26,o=ht[s];return o?(ot=o.nextPos,o.result):(t=ot,58===e.charCodeAt(ot)?(n=":",ot++):(n=r,0===ut&&Et(ne)),n!==r?(i=cn(),t=et(n,i)):(ot=t,t=r),ht[s]={nextPos:ot,result:t},t)}(),o!==r&&(a=jt())!==r?n=dn("extension",{extension:i,name:s,colon:o,behavior:a}):(ot=n,n=r)):(ot=n,n=r))))))}n!==r?(I.test(e.charAt(ot))?(i=e.charAt(ot),ot++):(i=r,0===ut&&Et(ye)),i===r&&(i=null),b=n,w=i,t={...b,wsEnd:w}):(ot=t,t=r)}return ut--,t===r&&(n=r,0===ut&&Et(xe)),ht[x]={nextPos:ot,result:t},t}function jt(){var t,n,i,s=74*ot+52,o=ht[s];if(o)return ot=o.nextPos,o.result;if(ut++,t=ot,n=[],F.test(e.charAt(ot))?(i=e.charAt(ot),ot++):(i=r,0===ut&&Et(Ie)),i!==r)for(;i!==r;)n.push(i),F.test(e.charAt(ot))?(i=e.charAt(ot),ot++):(i=r,0===ut&&Et(Ie));else n=r;return t=n!==r?e.substring(t,ot):n,ut--,t===r&&(n=r,0===ut&&Et(Le)),ht[s]={nextPos:ot,result:t},t}function Yt(){var t,n,i,s,o,a,l=74*ot+53,c=ht[l];if(c)return ot=c.nextPos,c.result;if(ut++,t=ot,n=ot,i=ot,ut++,s=ot,(o=hn())===r&&(o=null),35===e.charCodeAt(ot)?(a="#",ot++):(a=r,0===ut&&Et(Ne)),a!==r?s=o=[o,a]:(ot=s,s=r),ut--,s===r?i=void 0:(ot=i,i=r),i!==r){if(s=[],F.test(e.charAt(ot))?(o=e.charAt(ot),ot++):(o=r,0===ut&&Et(Ie)),o!==r)for(;o!==r;)s.push(o),F.test(e.charAt(ot))?(o=e.charAt(ot),ot++):(o=r,0===ut&&Et(Ie));else s=r;s!==r?(I.test(e.charAt(ot))?(o=e.charAt(ot),ot++):(o=r,0===ut&&Et(ye)),o===r&&(o=null),n=i=[i,s,o]):(ot=n,n=r)}else ot=n,n=r;return n===r&&(I.test(e.charAt(ot))?(n=e.charAt(ot),ot++):(n=r,0===ut&&Et(ye))),t=n!==r?e.substring(t,ot):n,ut--,t===r&&(n=r,0===ut&&Et(Fe)),ht[l]={nextPos:ot,result:t},t}function qt(){var e,t,n,i,s=74*ot+56,o=ht[s];return o?(ot=o.nextPos,o.result):(ut++,(e=function(){var e,t,n,i=74*ot+2,s=ht[i];return s?(ot=s.nextPos,s.result):(e=ot,(t=Vt())!==r?(n=cn(),e=dn("int_constant",{token:t,wsEnd:n})):(ot=e,e=r),ht[i]={nextPos:ot,result:e},e)}())===r&&(e=ot,(t=xt())!==r&&(n=ln())!==r&&(i=yt())!==r?e=dn("group",{lp:t,expression:n,rp:i}):(ot=e,e=r),e===r&&(e=Wt())),ut--,e===r&&(t=r,0===ut&&Et(Oe)),ht[s]={nextPos:ot,result:e},e)}function Zt(){var t,n,i,s,o,a=74*ot+57,l=ht[a];return l?(ot=l.nextPos,l.result):(ut++,t=ot,n=function(){var t,n,i,s,o=74*ot+33,a=ht[o];return a?(ot=a.nextPos,a.result):(t=ot,n=cn(),e.substr(ot,7)===m?(i=m,ot+=7):(i=r,0===ut&&Et(le)),i!==r?(s=cn(),t=tt(n,i,s)):(ot=t,t=r),ht[o]={nextPos:ot,result:t},t)}(),n!==r&&(i=xt())!==r&&(s=Wt())!==r&&(o=yt())!==r?t=dn("unary_defined",{operator:n,lp:i,identifier:s,rp:o}):(ot=t,t=r),t===r&&(t=ot,(n=Ft())===r&&(n=It())===r&&(n=function(){var t,n,i,s=74*ot+14,o=ht[s];return o?(ot=o.nextPos,o.result):(t=ot,33===e.charCodeAt(ot)?(n="!",ot++):(n=r,0===ut&&Et(H)),n!==r?(i=cn(),t=et(n,i)):(ot=t,t=r),ht[s]={nextPos:ot,result:t},t)}(),n===r&&(n=function(){var t,n,i,s=74*ot+16,o=ht[s];return o?(ot=o.nextPos,o.result):(t=ot,126===e.charCodeAt(ot)?(n="~",ot++):(n=r,0===ut&&Et(z)),n!==r?(i=cn(),t=et(n,i)):(ot=t,t=r),ht[s]={nextPos:ot,result:t},t)}())),n!==r&&(i=Zt())!==r?t=dn("unary",{operator:n,expression:i}):(ot=t,t=r),t===r&&(t=qt())),ut--,t===r&&(n=r,0===ut&&Et(Be)),ht[a]={nextPos:ot,result:t},t)}function Qt(){var e,t,n,i,s,o,a=74*ot+58,l=ht[a];if(l)return ot=l.nextPos,l.result;if(ut++,e=ot,(t=Zt())!==r){for(n=[],i=ot,(s=Nt())===r&&(s=Mt())===r&&(s=Ot()),s!==r&&(o=Zt())!==r?i=s=[s,o]:(ot=i,i=r);i!==r;)n.push(i),i=ot,(s=Nt())===r&&(s=Mt())===r&&(s=Ot()),s!==r&&(o=Zt())!==r?i=s=[s,o]:(ot=i,i=r);e=rt(t,n)}else ot=e,e=r;return ut--,e===r&&(t=r,0===ut&&Et($e)),ht[a]={nextPos:ot,result:e},e}function Jt(){var e,t,n,i,s,o,a=74*ot+59,l=ht[a];if(l)return ot=l.nextPos,l.result;if(ut++,e=ot,(t=Qt())!==r){for(n=[],i=ot,(s=Ft())===r&&(s=It()),s!==r&&(o=Qt())!==r?i=s=[s,o]:(ot=i,i=r);i!==r;)n.push(i),i=ot,(s=Ft())===r&&(s=It()),s!==r&&(o=Qt())!==r?i=s=[s,o]:(ot=i,i=r);e=rt(t,n)}else ot=e,e=r;return ut--,e===r&&(t=r,0===ut&&Et(Pe)),ht[a]={nextPos:ot,result:e},e}function en(){var e,t,n,i,s,o,a=74*ot+60,l=ht[a];if(l)return ot=l.nextPos,l.result;if(ut++,e=ot,(t=Jt())!==r){for(n=[],i=ot,(s=Ct())===r&&(s=_t()),s!==r&&(o=Jt())!==r?i=s=[s,o]:(ot=i,i=r);i!==r;)n.push(i),i=ot,(s=Ct())===r&&(s=_t()),s!==r&&(o=Jt())!==r?i=s=[s,o]:(ot=i,i=r);e=rt(t,n)}else ot=e,e=r;return ut--,e===r&&(t=r,0===ut&&Et(ke)),ht[a]={nextPos:ot,result:e},e}function tn(){var e,t,n,i,s,o,a=74*ot+61,l=ht[a];if(l)return ot=l.nextPos,l.result;if(ut++,e=ot,(t=en())!==r){for(n=[],i=ot,(s=At())===r&&(s=Rt())===r&&(s=Bt())===r&&(s=$t()),s!==r&&(o=en())!==r?i=s=[s,o]:(ot=i,i=r);i!==r;)n.push(i),i=ot,(s=At())===r&&(s=Rt())===r&&(s=Bt())===r&&(s=$t()),s!==r&&(o=en())!==r?i=s=[s,o]:(ot=i,i=r);e=rt(t,n)}else ot=e,e=r;return ut--,e===r&&(t=r,0===ut&&Et(De)),ht[a]={nextPos:ot,result:e},e}function nn(){var e,t,n,i,s,o,a=74*ot+62,l=ht[a];if(l)return ot=l.nextPos,l.result;if(ut++,e=ot,(t=tn())!==r){for(n=[],i=ot,(s=St())===r&&(s=Tt()),s!==r&&(o=tn())!==r?i=s=[s,o]:(ot=i,i=r);i!==r;)n.push(i),i=ot,(s=St())===r&&(s=Tt()),s!==r&&(o=tn())!==r?i=s=[s,o]:(ot=i,i=r);e=rt(t,n)}else ot=e,e=r;return ut--,e===r&&(t=r,0===ut&&Et(Ue)),ht[a]={nextPos:ot,result:e},e}function rn(){var e,t,n,i,s,o,a=74*ot+63,l=ht[a];if(l)return ot=l.nextPos,l.result;if(ut++,e=ot,(t=nn())!==r){for(n=[],i=ot,(s=Dt())!==r&&(o=nn())!==r?i=s=[s,o]:(ot=i,i=r);i!==r;)n.push(i),i=ot,(s=Dt())!==r&&(o=nn())!==r?i=s=[s,o]:(ot=i,i=r);e=rt(t,n)}else ot=e,e=r;return ut--,e===r&&(t=r,0===ut&&Et(Ge)),ht[a]={nextPos:ot,result:e},e}function sn(){var e,t,n,i,s,o,a=74*ot+64,l=ht[a];if(l)return ot=l.nextPos,l.result;if(ut++,e=ot,(t=rn())!==r){for(n=[],i=ot,(s=kt())!==r&&(o=rn())!==r?i=s=[s,o]:(ot=i,i=r);i!==r;)n.push(i),i=ot,(s=kt())!==r&&(o=rn())!==r?i=s=[s,o]:(ot=i,i=r);e=rt(t,n)}else ot=e,e=r;return ut--,e===r&&(t=r,0===ut&&Et(We)),ht[a]={nextPos:ot,result:e},e}function on(){var e,t,n,i,s,o,a=74*ot+65,l=ht[a];if(l)return ot=l.nextPos,l.result;if(ut++,e=ot,(t=sn())!==r){for(n=[],i=ot,(s=Pt())!==r&&(o=sn())!==r?i=s=[s,o]:(ot=i,i=r);i!==r;)n.push(i),i=ot,(s=Pt())!==r&&(o=sn())!==r?i=s=[s,o]:(ot=i,i=r);e=rt(t,n)}else ot=e,e=r;return ut--,e===r&&(t=r,0===ut&&Et(Ve)),ht[a]={nextPos:ot,result:e},e}function an(){var e,t,n,i,s,o,a=74*ot+66,l=ht[a];if(l)return ot=l.nextPos,l.result;if(ut++,e=ot,(t=on())!==r){for(n=[],i=ot,(s=bt())!==r&&(o=on())!==r?i=s=[s,o]:(ot=i,i=r);i!==r;)n.push(i),i=ot,(s=bt())!==r&&(o=on())!==r?i=s=[s,o]:(ot=i,i=r);e=rt(t,n)}else ot=e,e=r;return ut--,e===r&&(t=r,0===ut&&Et(He)),ht[a]={nextPos:ot,result:e},e}function ln(){var e,t=74*ot+68,n=ht[t];return n?(ot=n.nextPos,n.result):(ut++,e=function(){var e,t,n,i,s,o,a=74*ot+67,l=ht[a];if(l)return ot=l.nextPos,l.result;if(ut++,e=ot,(t=an())!==r){for(n=[],i=ot,(s=wt())!==r&&(o=an())!==r?i=s=[s,o]:(ot=i,i=r);i!==r;)n.push(i),i=ot,(s=wt())!==r&&(o=an())!==r?i=s=[s,o]:(ot=i,i=r);e=rt(t,n)}else ot=e,e=r;return ut--,e===r&&(t=r,0===ut&&Et(Xe)),ht[a]={nextPos:ot,result:e},e}(),ut--,e===r&&0===ut&&Et(ze),ht[t]={nextPos:ot,result:e},e)}function cn(){var e,t,n,i,s,o,a=74*ot+69,l=ht[a];if(l)return ot=l.nextPos,l.result;for(ut++,e=ot,(t=hn())===r&&(t=null),n=[],i=ot,(s=un())!==r?((o=hn())===r&&(o=null),i=s=[s,o]):(ot=i,i=r);i!==r;)n.push(i),i=ot,(s=un())!==r?((o=hn())===r&&(o=null),i=s=[s,o]):(ot=i,i=r);return e=pn(t,n),ut--,t=r,0===ut&&Et(Ke),ht[a]={nextPos:ot,result:e},e}function un(){var t,n,i,s,o,a,l=74*ot+70,c=ht[l];if(c)return ot=c.nextPos,c.result;if(t=function(){var t,n,i,s,o,a=74*ot+71,l=ht[a];if(l)return ot=l.nextPos,l.result;if(t=ot,n=ot,"//"===e.substr(ot,2)?(i="//",ot+=2):(i=r,0===ut&&Et(je)),i!==r){for(s=[],F.test(e.charAt(ot))?(o=e.charAt(ot),ot++):(o=r,0===ut&&Et(Ie));o!==r;)s.push(o),F.test(e.charAt(ot))?(o=e.charAt(ot),ot++):(o=r,0===ut&&Et(Ie));n=i=[i,s]}else ot=n,n=r;return t=n!==r?e.substring(t,ot):n,ht[a]={nextPos:ot,result:t},t}(),t===r)if(t=ot,n=function(){var t,n,i,s,o,a,l,c=74*ot+72,u=ht[c];if(u)return ot=u.nextPos,u.result;if(t=ot,n=ot,"/*"===e.substr(ot,2)?(i="/*",ot+=2):(i=r,0===ut&&Et(Ye)),i!==r){for(s=[],o=ot,a=ot,ut++,e.substr(ot,2)===A?(l=A,ot+=2):(l=r,0===ut&&Et(qe)),ut--,l===r?a=void 0:(ot=a,a=r),a!==r?(e.length>ot?(l=e.charAt(ot),ot++):(l=r,0===ut&&Et(Ze)),l!==r?o=l:(ot=o,o=r)):(ot=o,o=r);o!==r;)s.push(o),o=ot,a=ot,ut++,e.substr(ot,2)===A?(l=A,ot+=2):(l=r,0===ut&&Et(qe)),ut--,l===r?a=void 0:(ot=a,a=r),a!==r?(e.length>ot?(l=e.charAt(ot),ot++):(l=r,0===ut&&Et(Ze)),l!==r?o=l:(ot=o,o=r)):(ot=o,o=r);e.substr(ot,2)===A?(o=A,ot+=2):(o=r,0===ut&&Et(qe)),o!==r?n=i=[i,s,o]:(ot=n,n=r)}else ot=n,n=r;return t=n!==r?e.substring(t,ot):n,ht[c]={nextPos:ot,result:t},t}(),n!==r){for(i=[],s=ot,(o=hn())!==r&&(a=un())!==r?s=st(0,o,a):(ot=s,s=r);s!==r;)i.push(s),s=ot,(o=hn())!==r&&(a=un())!==r?s=st(0,o,a):(ot=s,s=r);t=mn(n,i.flat())}else ot=t,t=r;return ht[l]={nextPos:ot,result:t},t}function hn(){var t,n,i,s=74*ot+73,o=ht[s];if(o)return ot=o.nextPos,o.result;if(ut++,t=ot,n=[],N.test(e.charAt(ot))?(i=e.charAt(ot),ot++):(i=r,0===ut&&Et(Je)),i!==r)for(;i!==r;)n.push(i),N.test(e.charAt(ot))?(i=e.charAt(ot),ot++):(i=r,0===ut&&Et(Je));else n=r;return t=n!==r?e.substring(t,ot):n,ut--,t===r&&(n=r,0===ut&&Et(Qe)),ht[s]={nextPos:ot,result:t},t}const dn=(e,t)=>({type:e,...t}),mn=(...e)=>e.flat().filter((e=>null!=e&&""!==e&&0!==e.length)),pn=(...e)=>{return(t=mn(e)).length>1?t:t[0];var t},gn=(...e)=>e.flat().reduce(((e,[t,n])=>({type:"binary",operator:t,left:e,right:n})));if((i=a())!==r&&ot===e.length)return i;throw i!==r&&ots.length)throw new Error("'".concat(t,"': Too many arguments for macro"));if(d.length>":return t(n)>>t(i);case"<":return t(n)":return t(n)>t(i);case"<=":return t(n)<=t(i);case">=":return t(n)>=t(i);case"==":return t(n)==t(i);case"!=":return t(n)!=t(i);case"&":return t(n)&t(i);case"^":return t(n)^t(i);case"|":return t(n)|t(i);case"&&":return t(n)&&t(i);case"||":return t(n)||t(i);default:throw new Error("Preprocessing error: Unknown binary operator ".concat(r))}},unary:function(e,t){switch(e.operator.literal){case"+":return t(e.expression);case"-":return-1*t(e.expression);case"!":return!t(e.expression);case"~":return~t(e.expression);default:throw new Error("Preprocessing error: Unknown unary operator ".concat(e.operator.literal))}}},i=function(e){var t=n[e.type];if(!t)throw new Error("No evaluate() evaluator for ".concat(e.type));return t(e,i)},i(e);var n,i},d=s.visit;t.preprocessAst=function(e,t){void 0===t&&(t={});var n,s=Object.entries(t.defines||{}).reduce((function(e,t){var n,r=t[0],s=t[1];return i(i({},e),((n={})[r]={body:s},n))}),{}),o=(void 0===(n=t.preserve)&&(n={}),function(e){var t=null==n?void 0:n[e.node.type];return"function"==typeof t?t(e):t});return d(e,{conditional:{enter:function(e){var t=e,n=t.node;o(t)||(u.apply(void 0,r([s],r([n.ifPart.expression],n.elseIfParts.map((function(e){return e.expression})),!0).filter(c),!1)),function(e,t){return"if"===t.type?h(t.expression,e):"ifdef"===t.type?t.identifier.identifier in e:"ifndef"===t.type?!(t.identifier.identifier in e):void 0}(s,n.ifPart)?t.replaceWith(n.ifPart.body):n.elseIfParts.reduce((function(e,n){return e||h(n.expression,s)&&(t.replaceWith(n.body),!0)}),!1)||(n.elsePart?t.replaceWith(n.elsePart.body):t.remove()))}},text:{enter:function(e){var t=e;t.node.text=l(t.node.text,s)}},define_arguments:{enter:function(e){var t=e,n=t.node,i=n.identifier.identifier,r=n.body,a=n.args;s[i]={args:a,body:r},!o(t)&&t.remove()}},define:{enter:function(e){var t=e,n=t.node,i=n.identifier.identifier,r=n.body;s[i]={body:r},!o(t)&&t.remove()}},undef:{enter:function(e){var t=e;delete s[t.node.identifier.identifier],!o(t)&&t.remove()}},error:{enter:function(e){var n=e;if(t.stopOnError)throw new Error(n.node.message);!o(n)&&n.remove()}},pragma:{enter:function(e){var t=e;!o(t)&&t.remove()}},version:{enter:function(e){var t=e;!o(t)&&t.remove()}},extension:{enter:function(e){var t=e;!o(t)&&t.remove()}},line:{enter:function(e){var t=e;!o(t)&&t.remove()}}}),e}},866:(e,t,n)=>{"use strict";n.d(t,{Z:()=>a});var i=n(81),r=n.n(i),s=n(645),o=n.n(s)()(r());o.push([e.id,"@import url(https://fonts.googleapis.com/css?family=Montserrat:300,400);"]),o.push([e.id,'.captureMenuComponent{position:absolute;padding:7px;z-index:99999;top:10px;left:50%;margin-left:-209px;height:40px;width:400px;border:2px solid #222;background-color:#2c2c2c;visibility:hidden;display:none;color:#f9f9f9;font-family:Consolas,monaco,monospace;font-size:14px;font-weight:500}.captureMenuComponent.active{visibility:visible;display:block}.captureMenuComponent,.captureMenuComponent:after,.captureMenuComponent:before{box-sizing:content-box}.captureMenuLogComponent{position:absolute;padding:7px;z-index:80000;top:66px;left:50%;margin-left:-209px;height:40px;width:400px;border:2px solid #222;background-color:#2c2c2c;visibility:hidden;display:none;color:#f9f9f9;font-family:Consolas,monaco,monospace;font-size:14px;font-weight:500}.captureMenuLogComponent.active{visibility:visible;display:block}.captureMenuLogComponent,.captureMenuLogComponent:after,.captureMenuLogComponent:before{box-sizing:content-box}.captureMenuLogComponent span.error{color:red}.canvasListComponent{float:left;width:50%;height:100%}.canvasListComponent [commandName=onCanvasSelection]{vertical-align:center;line-height:40px;white-space:nowrap;text-overflow:ellipsis;width:190px;display:inline-block;overflow:hidden;margin:0px 5px}.canvasListComponent [commandName=onCanvasSelection]:hover{color:#c9c9c9;cursor:pointer;transition:color .3s;-webkit-transition:color .3s;-moz-transition:color .3s}.canvasListComponent ul{margin:0px;padding:7px;list-style:none;position:absolute;top:54px;left:-2px;width:400px;border:2px solid #222;background-color:#2c2c2c}.canvasListComponent ul li{margin:5px}.canvasListComponent ul li:hover{color:#c9c9c9;cursor:pointer;transition:color .3s;-webkit-transition:color .3s;-moz-transition:color .3s}.captureMenuActionsComponent{float:left;width:30%;height:100%;margin-top:7.5px}.captureMenuActionsComponent div{float:left}.captureMenuActionsComponent [commandName=onCaptureRequested]{border-radius:50%;background:#2c2c2c;border:2px solid red;width:21px;height:21px}.captureMenuActionsComponent [commandName=onCaptureRequested]:hover{background:red;cursor:pointer;transition:background .3s;-webkit-transition:background .3s;-moz-transition:background .3s}.captureMenuActionsComponent [commandName=onPlayRequested],.captureMenuActionsComponent [commandName=onPlayNextFrameRequested]{width:21px;height:21px;border:2px solid #f9f9f9;border-radius:50%;margin-left:9px}.captureMenuActionsComponent [commandName=onPlayRequested]:before,.captureMenuActionsComponent [commandName=onPlayNextFrameRequested]:before{content:"";position:absolute;display:inline-block;margin-top:6px;margin-left:4px;width:7px;height:7px;border-top:2px solid #f9f9f9;border-right:2px solid #f9f9f9;background-color:#f9f9f9;-moz-transform:rotate(45deg);-webkit-transform:rotate(45deg);transform:rotate(45deg);z-index:-20}.captureMenuActionsComponent [commandName=onPlayRequested]:after,.captureMenuActionsComponent [commandName=onPlayNextFrameRequested]:after{content:"";position:absolute;display:inline-block;width:8px;height:20px;background-color:#2c2c2c;z-index:-10}.captureMenuActionsComponent [commandName=onPlayRequested]:hover,.captureMenuActionsComponent [commandName=onPlayNextFrameRequested]:hover{cursor:pointer;border:2px solid #c9c9c9;transition:border .3s;-webkit-transition:border .3s;-moz-transition:border .3s}.captureMenuActionsComponent [commandName=onPauseRequested]{width:21px;height:21px;border:2px solid #f9f9f9;border-radius:50%;margin-left:9px}.captureMenuActionsComponent [commandName=onPauseRequested]:before{content:"";position:absolute;display:inline-block;width:2px;height:13px;margin-left:12px;margin-top:4px;background-color:#f9f9f9}.captureMenuActionsComponent [commandName=onPauseRequested]:after{content:"";position:absolute;display:inline-block;width:2px;height:13px;margin-left:7px;margin-top:4px;background-color:#f9f9f9}.captureMenuActionsComponent [commandName=onPauseRequested]:hover{cursor:pointer;border:2px solid #c9c9c9;transition:border .3s;-webkit-transition:border .3s;-moz-transition:border .3s}.captureMenuActionsComponent [commandName=onPlayNextFrameRequested]:before{background-color:#2c2c2c}.fpsCounterComponent{float:left;width:20%;vertical-align:center;line-height:40px;white-space:nowrap}',""]);const a=o},625:(e,t,n)=>{"use strict";n.d(t,{Z:()=>a});var i=n(81),r=n.n(i),s=n(645),o=n.n(s)()(r());o.push([e.id,"@import url(https://fonts.googleapis.com/css?family=Montserrat:300,400);"]),o.push([e.id,'.resultViewComponent{position:absolute;z-index:99999;border:1px solid #000;top:0;left:0;bottom:0;right:0;background-color:#222;opacity:1;visibility:hidden;display:none;color:#f9f9f9;font-family:Consolas,monaco,monospace;font-size:14px;font-weight:500}.resultViewComponent.active{visibility:visible;display:block}.resultViewComponent,.resultViewComponent:after,.resultViewComponent:before{box-sizing:content-box}.resultViewMenuComponent{font-family:"Montserrat",sans-serif;font-size:13px;font-weight:300;line-height:40px;flex:1 100%;display:flex;flex-flow:row wrap;height:42px;outline:0 none;border-bottom:2px solid #222;box-sizing:border-box;list-style:none;margin:0;background:#2c2c2c;display:-webkit-box;display:-moz-box;display:-ms-flexbox;display:-webkit-flex;display:flex;-webkit-flex-flow:row wrap;flex-flow:row wrap;justify-content:flex-end}.resultViewMenuComponent .resultViewMenuOpen{display:none;visibility:hidden}.resultViewMenuComponent a{outline:0 none;text-decoration:none;display:block;padding:0 20px 0 20px;color:#ccc;background:#2c2c2c;box-sizing:border-box;height:100%}.resultViewMenuComponent a.active{background:#222;color:#fff;font-weight:400;border-bottom:2px solid #f0640d}.resultViewMenuComponent a:hover{background:#222;color:#c9c9c9;cursor:pointer;transition:color .3s;-webkit-transition:color .3s;-moz-transition:color .3s}.resultViewMenuComponent a:hover.active{color:#f0640d;transition:color 0;-webkit-transition:color 0;-moz-transition:color 0}.resultViewMenuComponent a.clearSearch{padding:0px;margin-left:-30px;margin-right:20px;z-index:9000;color:#f9f9f9}.resultViewMenuComponent a.clearSearch:hover{background:#2c2c2c;color:#f0640d}@media all and (max-width: 1024px){.resultViewMenuComponent{padding:0px;position:absolute;overflow-y:visible;top:0px;left:0px;right:0px;bottom:0px;z-index:999999;display:block}.resultViewMenuComponent .resultViewMenuOpen{display:block;visibility:visible}.resultViewMenuComponent li:not(.resultViewMenuSmall){display:none;visibility:hidden}.resultViewMenuComponent li{background:#2c2c2c}.resultViewMenuComponent li.searchContainer{background:#464646}.resultViewMenuComponent a.active{background:#2c2c2c}}.resultViewMenuComponent input{border:0;font-family:"Montserrat",sans-serif;font-weight:300;padding:0 20px 0 20px;background:#464646;color:#f9f9f9;height:40px;position:relative;top:-1px;box-sizing:border-box}.resultViewMenuComponent input:focus{border:0;outline:0 none}.resultViewMenuComponent .clearSearch{position:relative;background:rgba(0,0,0,0);display:inline;padding:0px;margin-left:-30px;z-index:9000;color:#f0640d}.resultViewMenuComponent .clearSearch:hover{background:rgba(0,0,0,0) !important}.resultViewMenuComponent ::-webkit-input-placeholder{color:#ccc}.resultViewMenuComponent :-moz-placeholder{color:#ccc}.resultViewMenuComponent ::-moz-placeholder{color:#ccc}.resultViewMenuComponent :-ms-input-placeholder{color:#ccc}.resultViewContentComponent{position:absolute;top:40px;left:0;bottom:0;right:0}.informationColumnLeftComponent{position:absolute;top:0;left:0;bottom:0;right:50%;overflow:auto;overflow-x:hidden;overflow-y:visible}.informationColumnRightComponent{position:absolute;top:0;left:50%;bottom:0;right:0;overflow:auto;overflow-x:hidden;overflow-y:visible}.captureListComponent{position:absolute;top:40px;left:0;bottom:0;right:0;background:#222;z-index:9000;display:none;visibility:hidden;overflow-y:visible;overflow-x:hidden}.captureListComponent.active{display:block;visibility:visible}.captureListComponent .openCaptureFile{border:1px dashed #f9f9f9;display:block;margin:5px;padding:5px;text-align:center;font-style:italic}.captureListComponent .openCaptureFile span{line-height:100%;vertical-align:middle}.captureListComponent ul{margin:0px;padding:0px;list-style:none;display:-webkit-box;display:-moz-box;display:-ms-flexbox;display:-webkit-flex;display:flex;-webkit-flex-flow:row wrap;flex-flow:row wrap;justify-content:flex-start}.captureListComponent ul li{margin:5px;border:1px solid #606060}.captureListComponent ul li img{width:295px;background-image:-webkit-gradient(linear, 0 100%, 100% 0, color-stop(0.25, #c9c9c9), color-stop(0.25, transparent)),-webkit-gradient(linear, 0 0, 100% 100%, color-stop(0.25, #c9c9c9), color-stop(0.25, transparent)),-webkit-gradient(linear, 0 100%, 100% 0, color-stop(0.75, transparent), color-stop(0.75, #c9c9c9)),-webkit-gradient(linear, 0 0, 100% 100%, color-stop(0.75, transparent), color-stop(0.75, #c9c9c9));background-image:-moz-linear-gradient(45deg, #d9d9d9 25%, transparent 25%),-moz-linear-gradient(-45deg, #d9d9d9 25%, transparent 25%),-moz-linear-gradient(45deg, transparent 75%, #d9d9d9 75%),-moz-linear-gradient(-45deg, transparent 75%, #d9d9d9 75%);-webkit-background-size:50px 51px;-moz-background-size:50px 50px;background-size:50px 50px;background-position:0 0,25px 0,25px -25px,0px 25px;display:block}.captureListComponent ul li span{display:block;text-align:center;border:5px solid #222}.captureListComponent ul li span .captureListItemSave{color:#f9f9f9;font-size:16px;margin-left:10px;position:relative;padding:3px 8px 3px 32px}.captureListComponent ul li span .captureListItemSave:before,.captureListComponent ul li span .captureListItemSave:after{box-sizing:border-box;content:"";position:absolute}.captureListComponent ul li span .captureListItemSave:before{background:#d9d9d9;border-color:#f9f9f9;border-style:solid;border-width:7px 2px 1px;border-radius:1px;height:16px;left:8px;top:5px;width:16px}.captureListComponent ul li span .captureListItemSave:after{background:#f9f9f9;border-color:#d9d9d9;border-style:solid;border-width:1px 1px 1px 4px;height:5px;left:13px;top:5px;width:7px}.captureListComponent ul li:hover{cursor:pointer}.captureListComponent ul li.active span{background:#f0640d;border:5px solid #f0640d}.captureListComponent ul li.active span .captureListItemSave:before{background:#f0640d}.captureListComponent ul li.active span .captureListItemSave:after{border-color:#f0640d}.visualStateListComponent{position:absolute;top:0;left:0;bottom:0;padding:5px;right:80%;overflow-y:visible;overflow-x:hidden}.visualStateListComponent ul{margin:0px;padding:0px;list-style:none}.visualStateListComponent ul li{margin:20px 15px 0px 15px;border:1px solid #606060}.visualStateListComponent ul li img{display:block;padding:0px;box-sizing:border-box;max-height:600px;width:100%;margin:0 auto;background-image:-webkit-gradient(linear, 0 100%, 100% 0, color-stop(0.25, #c9c9c9), color-stop(0.25, transparent)),-webkit-gradient(linear, 0 0, 100% 100%, color-stop(0.25, #c9c9c9), color-stop(0.25, transparent)),-webkit-gradient(linear, 0 100%, 100% 0, color-stop(0.75, transparent), color-stop(0.75, #c9c9c9)),-webkit-gradient(linear, 0 0, 100% 100%, color-stop(0.75, transparent), color-stop(0.75, #c9c9c9));background-image:-moz-linear-gradient(45deg, #d9d9d9 25%, transparent 25%),-moz-linear-gradient(-45deg, #d9d9d9 25%, transparent 25%),-moz-linear-gradient(45deg, transparent 75%, #d9d9d9 75%),-moz-linear-gradient(-45deg, transparent 75%, #d9d9d9 75%);-webkit-background-size:50px 51px;-moz-background-size:50px 50px;background-size:50px 50px;background-position:0 0,25px 0,25px -25px,0px 25px}.visualStateListComponent ul li:hover{cursor:pointer}.visualStateListComponent ul li span{border:5px solid #222;background:#222;box-sizing:border-box;display:inline-block;width:100%;margin:0px;padding:5px;word-wrap:break-word}.visualStateListComponent ul li.active{border:2px solid #f0640d}.commandListComponent{position:absolute;top:0;left:20%;right:40%;bottom:0;color:#d3d3d3}.commandListComponent ul{margin:0px;padding:0px;list-style:none;overflow-y:visible;overflow-x:hidden;height:100%}.commandListComponent ul li{padding:8px}.commandListComponent ul li span{word-wrap:break-word;line-height:22px}.commandListComponent ul li:hover{color:#f9f9f9;cursor:pointer;transition:color .3s;-webkit-transition:color .3s;-moz-transition:color .3s}.commandListComponent ul li:nth-child(even){background:#2c2c2c}.commandListComponent ul li:nth-child(odd){background:#222}.commandListComponent ul li .important{font-weight:800}.commandListComponent ul li .important.deprecated{color:red}.commandListComponent ul li .important.unused{color:#ff0}.commandListComponent ul li .important.disabled{color:gray}.commandListComponent ul li .important.redundant{color:orange}.commandListComponent ul li .important.valid{color:#adff2f}.commandListComponent ul li .marker{font-size:16px;font-weight:900;color:#adff2f}.commandListComponent ul li.active{background:#f37628;color:#222}.commandListComponent ul li.drawCall{background:#5db0d7;color:#222}.commandListComponent ul li a{margin-left:5px;margin-right:5px;color:#5db0d7;background:#222;padding:5px;font-weight:900;display:inline-block}.commandDetailComponent{position:absolute;top:0;left:60%;right:0;bottom:0;overflow-y:visible;overflow-x:hidden}.jsonGroupComponent{display:block;margin:10px;padding:10px;padding-bottom:5px}.jsonGroupComponent .jsonGroupComponentTitle{display:block;font-size:16px;color:#5db0d7;border-bottom:1px solid #5db0d7;padding-bottom:5px;margin-bottom:5px;text-transform:capitalize}.jsonGroupComponent ul{margin:0px;padding:0px;list-style:none}.jsonGroupComponent ul li:nth-child(even){background:#222}.jsonGroupComponent ul li:nth-child(odd){background:#222}.jsonItemComponentKey{color:#f0640d}.jsonItemComponentValue{white-space:pre-wrap}.jsonItemImageHolder{width:50%;margin:auto}.jsonItemImageHolder .jsonItemImage{margin:5px;display:block;border:1px solid #606060;width:100%}.jsonItemImageHolder .jsonItemImage img{width:100%;display:block;margin:auto;max-width:256px;background-image:-webkit-gradient(linear, 0 100%, 100% 0, color-stop(0.25, #c9c9c9), color-stop(0.25, transparent)),-webkit-gradient(linear, 0 0, 100% 100%, color-stop(0.25, #c9c9c9), color-stop(0.25, transparent)),-webkit-gradient(linear, 0 100%, 100% 0, color-stop(0.75, transparent), color-stop(0.75, #c9c9c9)),-webkit-gradient(linear, 0 0, 100% 100%, color-stop(0.75, transparent), color-stop(0.75, #c9c9c9));background-image:-moz-linear-gradient(45deg, #d9d9d9 25%, transparent 25%),-moz-linear-gradient(-45deg, #d9d9d9 25%, transparent 25%),-moz-linear-gradient(45deg, transparent 75%, #d9d9d9 75%),-moz-linear-gradient(-45deg, transparent 75%, #d9d9d9 75%);-webkit-background-size:50px 51px;-moz-background-size:50px 50px;background-size:50px 50px;background-position:0 0,25px 0,25px -25px,0px 25px}.jsonItemImageHolder .jsonItemImage span{margin:0px;padding:5px;word-wrap:break-word;display:inline-block;width:100%;box-sizing:border-box}[commandName=onOpenSourceClicked]:hover{color:#f9f9f9;cursor:pointer;transition:color .3s;-webkit-transition:color .3s;-moz-transition:color .3s}.jsonVisualStateItemComponent{text-align:center;padding:10px}.jsonVisualStateItemComponent img{background-image:-webkit-gradient(linear, 0 100%, 100% 0, color-stop(0.25, #c9c9c9), color-stop(0.25, transparent)),-webkit-gradient(linear, 0 0, 100% 100%, color-stop(0.25, #c9c9c9), color-stop(0.25, transparent)),-webkit-gradient(linear, 0 100%, 100% 0, color-stop(0.75, transparent), color-stop(0.75, #c9c9c9)),-webkit-gradient(linear, 0 0, 100% 100%, color-stop(0.75, transparent), color-stop(0.75, #c9c9c9));background-image:-moz-linear-gradient(45deg, #d9d9d9 25%, transparent 25%),-moz-linear-gradient(-45deg, #d9d9d9 25%, transparent 25%),-moz-linear-gradient(45deg, transparent 75%, #d9d9d9 75%),-moz-linear-gradient(-45deg, transparent 75%, #d9d9d9 75%);-webkit-background-size:50px 51px;-moz-background-size:50px 50px;background-size:50px 50px;background-position:0 0,25px 0,25px -25px,0px 25px;border:1px solid #606060;margin:5px;width:100%;max-width:512px;max-height:800px}.jsonVisualStateItemComponent span{display:block}.jsonContentComponent{position:absolute;top:0;left:0;right:0;bottom:0;padding:10px;overflow-y:visible;overflow-x:hidden}.jsonItemComponentValue{word-break:break-all;white-space:normal}.jsonSourceItemComponentOpen{font-weight:bold;color:#5db0d7;text-decoration:underline}.sourceCodeMenuComponentContainer{position:absolute;left:0;top:0;bottom:48px;right:40%}.sourceCodeMenuComponentFooter{position:absolute;left:0;right:40%;bottom:0;padding:0 15px}.sourceCodeMenuComponent{font-family:"Montserrat",sans-serif;font-size:13px;font-weight:300;line-height:40px;flex:1 100%;display:flex;flex-flow:row wrap;height:42px;outline:0 none;border-bottom:2px solid #222;box-sizing:border-box;list-style:none;margin:0;background:#2c2c2c;display:-webkit-box;display:-moz-box;display:-ms-flexbox;display:-webkit-flex;display:flex;-webkit-flex-flow:row wrap;flex-flow:row wrap;justify-content:flex-end}.sourceCodeMenuComponent .resultViewMenuOpen{display:none;visibility:hidden}.sourceCodeMenuComponent a{outline:0 none;text-decoration:none;display:block;padding:0 20px 0 20px;color:#ccc;background:#2c2c2c;box-sizing:border-box;height:100%}.sourceCodeMenuComponent a.active{background:#222;color:#fff;font-weight:400;border-bottom:2px solid #f0640d}.sourceCodeMenuComponent a:hover{background:#222;color:#c9c9c9;cursor:pointer;transition:color .3s;-webkit-transition:color .3s;-moz-transition:color .3s}.sourceCodeMenuComponent a:hover.active{color:#f0640d;transition:color 0;-webkit-transition:color 0;-moz-transition:color 0}.sourceCodeMenuComponent a.clearSearch{display:inline-block;padding:0px;margin-left:-30px;margin-right:20px;z-index:9000;color:#f9f9f9}.sourceCodeMenuComponent a.clearSearch:hover{background:#2c2c2c;color:#f0640d}.sourceCodeMenuComponent input{border:0;font-family:"Montserrat",sans-serif;font-weight:300;padding:0 20px 0 20px;background:#464646;color:#f9f9f9;height:100%;position:relative;top:-1px;box-sizing:border-box}.sourceCodeMenuComponent input:focus{border:0;outline:0 none}.sourceCodeMenuComponent .clearSearch{position:relative;background:rgba(0,0,0,0);display:inline;padding:0px;margin-left:-30px;z-index:9000;color:#f0640d}.sourceCodeMenuComponent .clearSearch:hover{background:rgba(0,0,0,0) !important}.sourceCodeMenuComponent ::-webkit-input-placeholder{color:#ccc}.sourceCodeMenuComponent :-moz-placeholder{color:#ccc}.sourceCodeMenuComponent ::-moz-placeholder{color:#ccc}.sourceCodeMenuComponent :-ms-input-placeholder{color:#ccc}.sourceCodeComponent{position:absolute;top:42px;left:0;bottom:48px;right:40%;background:#222;z-index:9000;overflow-x:visible;overflow:auto}.sourceCodeComponent .sourceCodeComponentTitle{font-size:16px;font-weight:800;line-height:50px;color:#f0640d;padding:1em;margin:.5em 0}',""]);const a=o},827:(e,t,n)=>{"use strict";n.d(t,{Z:()=>a});var i=n(81),r=n.n(i),s=n(645),o=n.n(s)()(r());o.push([e.id,".ace-monokai {\r\n color: #f9f9f9;\r\n font-size: 14px;\r\n}\r\n\r\n.ace-monokai .ace_entity.ace_name.ace_tag,\r\n.ace-monokai .ace_keyword,\r\n.ace-monokai .ace_meta.ace_tag,\r\n.ace-monokai .ace_storage {\r\n color: #F0640D\r\n}\r\n\r\n.ace-monokai .ace_constant.ace_character,\r\n.ace-monokai .ace_constant.ace_other {\r\n color: #5db0d7;\r\n}\r\n\r\n.ace-monokai .ace_marker-layer .ace_selection {\r\n background: #a6e22e\r\n}\r\n\r\n.ace-monokai .ace_marker-layer .ace_bracket {\r\n margin: -1px 0 0 -1px;\r\n border: 1px solid #a6e22e;\r\n}\r\n\r\n.ace-monokai .ace_marker-layer .ace_active-line {\r\n background: #2c2c2c\r\n}\r\n.ace-monokai .ace_gutter-active-line {\r\n background-color: #2c2c2c\r\n}\r\n.ace-monokai .ace_marker-layer .ace_selected-word {\r\n border: 1px solid #a6e22e\r\n}\r\n\r\n.ace-monokai .ace_constant.ace_language {\r\n color: #e6db74\r\n}\r\n.ace-monokai .ace_constant.ace_numeric {\r\n color: #ae81ff\r\n}\r\n\r\n.ace-monokai .ace_gutter {\r\n background: #222;\r\n color: #8F908A;\r\n}",""]);const a=o},645:e=>{"use strict";e.exports=function(e){var t=[];return t.toString=function(){return this.map((function(t){var n="",i=void 0!==t[5];return t[4]&&(n+="@supports (".concat(t[4],") {")),t[2]&&(n+="@media ".concat(t[2]," {")),i&&(n+="@layer".concat(t[5].length>0?" ".concat(t[5]):""," {")),n+=e(t),i&&(n+="}"),t[2]&&(n+="}"),t[4]&&(n+="}"),n})).join("")},t.i=function(e,n,i,r,s){"string"==typeof e&&(e=[[null,e,void 0]]);var o={};if(i)for(var a=0;a0?" ".concat(u[5]):""," {").concat(u[1],"}")),u[5]=s),n&&(u[2]?(u[1]="@media ".concat(u[2]," {").concat(u[1],"}"),u[2]=n):u[2]=n),r&&(u[4]?(u[1]="@supports (".concat(u[4],") {").concat(u[1],"}"),u[4]=r):u[4]="".concat(r)),t.push(u))}},t}},81:e=>{"use strict";e.exports=function(e){return e[1]}},819:(e,t,n)=>{e=n.nmd(e),function(){var e=function(){return this}();e||"undefined"==typeof window||(e=window);var t=function(e,n,i){"string"==typeof e?(2==arguments.length&&(i=n),t.modules[e]||(t.payloads[e]=i,t.modules[e]=null)):t.original?t.original.apply(this,arguments):(console.error("dropping module because define wasn't a string."),console.trace())};t.modules={},t.payloads={};var n,i=function(e,t,n){if("string"==typeof t){var i=o(e,t);if(null!=i)return n&&n(),i}else if("[object Array]"===Object.prototype.toString.call(t)){for(var s=[],a=0,l=t.length;a1&&l(i,"")>-1&&(n=RegExp(this.source,r.replace.call(a(this),"g","")),r.replace.call(e.slice(i.index),n,(function(){for(var e=1;ei.index&&this.lastIndex--}return i},o||(RegExp.prototype.test=function(e){var t=r.exec.call(this,e);return t&&this.global&&!t[0].length&&this.lastIndex>t.index&&this.lastIndex--,!!t}))})),ace.define("ace/lib/es5-shim",["require","exports","module"],(function(e,t,n){function i(){}Function.prototype.bind||(Function.prototype.bind=function(e){var t=this;if("function"!=typeof t)throw new TypeError("Function.prototype.bind called on incompatible "+t);var n=d.call(arguments,1),r=function(){if(this instanceof r){var i=t.apply(this,n.concat(d.call(arguments)));return Object(i)===i?i:this}return t.apply(e,n.concat(d.call(arguments)))};return t.prototype&&(i.prototype=t.prototype,r.prototype=new i,i.prototype=null),r});var r,s,o,a,l,c=Function.prototype.call,u=Array.prototype,h=Object.prototype,d=u.slice,m=c.bind(h.toString),p=c.bind(h.hasOwnProperty);if((l=p(h,"__defineGetter__"))&&(r=c.bind(h.__defineGetter__),s=c.bind(h.__defineSetter__),o=c.bind(h.__lookupGetter__),a=c.bind(h.__lookupSetter__)),2!=[1,2].splice(0).length)if(function(){function e(e){var t=new Array(e+2);return t[0]=t[1]=0,t}var t,n=[];if(n.splice.apply(n,e(20)),n.splice.apply(n,e(26)),t=n.length,n.splice(5,0,"XXX"),n.length,t+1==n.length)return!0}()){var g=Array.prototype.splice;Array.prototype.splice=function(e,t){return arguments.length?g.apply(this,[void 0===e?0:e,void 0===t?this.length-e:t].concat(d.call(arguments,2))):[]}}else Array.prototype.splice=function(e,t){var n=this.length;e>0?e>n&&(e=n):null==e?e=0:e<0&&(e=Math.max(n+e,0)),e+ta)for(h=c;h--;)this[l+h]=this[a+h];if(s&&e===u)this.length=u,this.push.apply(this,r);else for(this.length=u+s,h=0;h>>0;if("[object Function]"!=m(e))throw new TypeError;for(;++r>>0,r=Array(i),s=arguments[1];if("[object Function]"!=m(e))throw new TypeError(e+" is not a function");for(var o=0;o>>0,s=[],o=arguments[1];if("[object Function]"!=m(e))throw new TypeError(e+" is not a function");for(var a=0;a>>0,r=arguments[1];if("[object Function]"!=m(e))throw new TypeError(e+" is not a function");for(var s=0;s>>0,r=arguments[1];if("[object Function]"!=m(e))throw new TypeError(e+" is not a function");for(var s=0;s>>0;if("[object Function]"!=m(e))throw new TypeError(e+" is not a function");if(!i&&1==arguments.length)throw new TypeError("reduce of empty array with no initial value");var r,s=0;if(arguments.length>=2)r=arguments[1];else for(;;){if(s in n){r=n[s++];break}if(++s>=i)throw new TypeError("reduce of empty array with no initial value")}for(;s>>0;if("[object Function]"!=m(e))throw new TypeError(e+" is not a function");if(!i&&1==arguments.length)throw new TypeError("reduceRight of empty array with no initial value");var r,s=i-1;if(arguments.length>=2)r=arguments[1];else for(;;){if(s in n){r=n[s--];break}if(--s<0)throw new TypeError("reduceRight of empty array with no initial value")}do{s in this&&(r=e.call(void 0,r,n[s],s,t))}while(s--);return r}),Array.prototype.indexOf&&-1==[0,1].indexOf(1,2)||(Array.prototype.indexOf=function(e){var t=_&&"[object String]"==m(this)?this.split(""):N(this),n=t.length>>>0;if(!n)return-1;var i=0;for(arguments.length>1&&(i=F(arguments[1])),i=i>=0?i:Math.max(0,n+i);i>>0;if(!n)return-1;var i=n-1;for(arguments.length>1&&(i=Math.min(i,F(arguments[1]))),i=i>=0?i:n-Math.abs(i);i>=0;i--)if(i in t&&e===t[i])return i;return-1}),Object.getPrototypeOf||(Object.getPrototypeOf=function(e){return e.__proto__||(e.constructor?e.constructor.prototype:h)}),Object.getOwnPropertyDescriptor||(Object.getOwnPropertyDescriptor=function(e,t){if("object"!=typeof e&&"function"!=typeof e||null===e)throw new TypeError("Object.getOwnPropertyDescriptor called on a non-object: "+e);if(p(e,t)){var n;if(n={enumerable:!0,configurable:!0},l){var i=e.__proto__;e.__proto__=h;var r=o(e,t),s=a(e,t);if(e.__proto__=i,r||s)return r&&(n.get=r),s&&(n.set=s),n}return n.value=e[t],n}}),Object.getOwnPropertyNames||(Object.getOwnPropertyNames=function(e){return Object.keys(e)}),Object.create||(f=null===Object.prototype.__proto__?function(){return{__proto__:null}}:function(){var e={};for(var t in e)e[t]=null;return e.constructor=e.hasOwnProperty=e.propertyIsEnumerable=e.isPrototypeOf=e.toLocaleString=e.toString=e.valueOf=e.__proto__=null,e},Object.create=function(e,t){var n;if(null===e)n=f();else{if("object"!=typeof e)throw new TypeError("typeof prototype["+typeof e+"] != 'object'");var i=function(){};i.prototype=e,(n=new i).__proto__=e}return void 0!==t&&Object.defineProperties(n,t),n}),Object.defineProperty){var A=C({}),R="undefined"==typeof document||C(document.createElement("div"));if(!A||!R)var S=Object.defineProperty}Object.defineProperty&&!S||(Object.defineProperty=function(e,t,n){if("object"!=typeof e&&"function"!=typeof e||null===e)throw new TypeError("Object.defineProperty called on non-object: "+e);if("object"!=typeof n&&"function"!=typeof n||null===n)throw new TypeError("Property description must be an object: "+n);if(S)try{return S.call(Object,e,t,n)}catch(e){}if(p(n,"value"))if(l&&(o(e,t)||a(e,t))){var i=e.__proto__;e.__proto__=h,delete e[t],e[t]=n.value,e.__proto__=i}else e[t]=n.value;else{if(!l)throw new TypeError("getters & setters can not be defined on this javascript engine");p(n,"get")&&r(e,t,n.get),p(n,"set")&&s(e,t,n.set)}return e}),Object.defineProperties||(Object.defineProperties=function(e,t){for(var n in t)p(t,n)&&Object.defineProperty(e,n,t[n]);return e}),Object.seal||(Object.seal=function(e){return e}),Object.freeze||(Object.freeze=function(e){return e});try{Object.freeze((function(){}))}catch(e){Object.freeze=(E=Object.freeze,function(e){return"function"==typeof e?e:E(e)})}if(Object.preventExtensions||(Object.preventExtensions=function(e){return e}),Object.isSealed||(Object.isSealed=function(e){return!1}),Object.isFrozen||(Object.isFrozen=function(e){return!1}),Object.isExtensible||(Object.isExtensible=function(e){if(Object(e)===e)throw new TypeError;for(var t="";p(e,t);)t+="?";e[t]=!0;var n=p(e,t);return delete e[t],n}),!Object.keys){var T=!0,b=["toString","toLocaleString","valueOf","hasOwnProperty","isPrototypeOf","propertyIsEnumerable","constructor"],w=b.length;for(var x in{toString:null})T=!1;Object.keys=function(e){if("object"!=typeof e&&"function"!=typeof e||null===e)throw new TypeError("Object.keys called on a non-object");var t=[];for(var n in e)p(e,n)&&t.push(n);if(T)for(var i=0,r=w;i0||-1)*Math.floor(Math.abs(e))),e}var N=function(e){if(null==e)throw new TypeError("can't convert "+e+" to object");return Object(e)}})),ace.define("ace/lib/fixoldbrowsers",["require","exports","module","ace/lib/regexp","ace/lib/es5-shim"],(function(e,t,n){"use strict";e("./regexp"),e("./es5-shim"),"undefined"==typeof Element||Element.prototype.remove||Object.defineProperty(Element.prototype,"remove",{enumerable:!1,writable:!0,configurable:!0,value:function(){this.parentNode&&this.parentNode.removeChild(this)}})})),ace.define("ace/lib/useragent",["require","exports","module"],(function(e,t,n){"use strict";t.OS={LINUX:"LINUX",MAC:"MAC",WINDOWS:"WINDOWS"},t.getOS=function(){return t.isMac?t.OS.MAC:t.isLinux?t.OS.LINUX:t.OS.WINDOWS};var i="object"==typeof navigator?navigator:{},r=(/mac|win|linux/i.exec(i.platform)||["other"])[0].toLowerCase(),s=i.userAgent||"",o=i.appName||"";t.isWin="win"==r,t.isMac="mac"==r,t.isLinux="linux"==r,t.isIE="Microsoft Internet Explorer"==o||o.indexOf("MSAppHost")>=0?parseFloat((s.match(/(?:MSIE |Trident\/[0-9]+[\.0-9]+;.*rv:)([0-9]+[\.0-9]+)/)||[])[1]):parseFloat((s.match(/(?:Trident\/[0-9]+[\.0-9]+;.*rv:)([0-9]+[\.0-9]+)/)||[])[1]),t.isOldIE=t.isIE&&t.isIE<9,t.isGecko=t.isMozilla=s.match(/ Gecko\/\d+/),t.isOpera="object"==typeof opera&&"[object Opera]"==Object.prototype.toString.call(window.opera),t.isWebKit=parseFloat(s.split("WebKit/")[1])||void 0,t.isChrome=parseFloat(s.split(" Chrome/")[1])||void 0,t.isEdge=parseFloat(s.split(" Edge/")[1])||void 0,t.isAIR=s.indexOf("AdobeAIR")>=0,t.isAndroid=s.indexOf("Android")>=0,t.isChromeOS=s.indexOf(" CrOS ")>=0,t.isIOS=/iPad|iPhone|iPod/.test(s)&&!window.MSStream,t.isIOS&&(t.isMac=!0),t.isMobile=t.isIOS||t.isAndroid})),ace.define("ace/lib/dom",["require","exports","module","ace/lib/useragent"],(function(e,t,n){"use strict";var i=e("./useragent");if(t.buildDom=function e(t,n,i){if("string"==typeof t&&t){var r=document.createTextNode(t);return n&&n.appendChild(r),r}if(!Array.isArray(t))return t;if("string"!=typeof t[0]||!t[0]){for(var s=[],o=0;o=1.5,"undefined"!=typeof document){var r=document.createElement("div");t.HI_DPI&&void 0!==r.style.transform&&(t.HAS_CSS_TRANSFORMS=!0),i.isEdge||void 0===r.style.animationName||(t.HAS_CSS_ANIMATION=!0),r=null}t.HAS_CSS_TRANSFORMS?t.translate=function(e,t,n){e.style.transform="translate("+Math.round(t)+"px, "+Math.round(n)+"px)"}:t.translate=function(e,t,n){e.style.top=Math.round(n)+"px",e.style.left=Math.round(t)+"px"}})),ace.define("ace/lib/oop",["require","exports","module"],(function(e,t,n){"use strict";t.inherits=function(e,t){e.super_=t,e.prototype=Object.create(t.prototype,{constructor:{value:e,enumerable:!1,writable:!0,configurable:!0}})},t.mixin=function(e,t){for(var n in t)e[n]=t[n];return e},t.implement=function(e,n){t.mixin(e,n)}})),ace.define("ace/lib/keys",["require","exports","module","ace/lib/oop"],(function(e,t,n){"use strict";var i=e("./oop"),r=function(){var e,t,n={MODIFIER_KEYS:{16:"Shift",17:"Ctrl",18:"Alt",224:"Meta",91:"MetaLeft",92:"MetaRight",93:"ContextMenu"},KEY_MODS:{ctrl:1,alt:2,option:2,shift:4,super:8,meta:8,command:8,cmd:8},FUNCTION_KEYS:{8:"Backspace",9:"Tab",13:"Return",19:"Pause",27:"Esc",32:"Space",33:"PageUp",34:"PageDown",35:"End",36:"Home",37:"Left",38:"Up",39:"Right",40:"Down",44:"Print",45:"Insert",46:"Delete",96:"Numpad0",97:"Numpad1",98:"Numpad2",99:"Numpad3",100:"Numpad4",101:"Numpad5",102:"Numpad6",103:"Numpad7",104:"Numpad8",105:"Numpad9","-13":"NumpadEnter",112:"F1",113:"F2",114:"F3",115:"F4",116:"F5",117:"F6",118:"F7",119:"F8",120:"F9",121:"F10",122:"F11",123:"F12",144:"Numlock",145:"Scrolllock"},PRINTABLE_KEYS:{32:" ",48:"0",49:"1",50:"2",51:"3",52:"4",53:"5",54:"6",55:"7",56:"8",57:"9",59:";",61:"=",65:"a",66:"b",67:"c",68:"d",69:"e",70:"f",71:"g",72:"h",73:"i",74:"j",75:"k",76:"l",77:"m",78:"n",79:"o",80:"p",81:"q",82:"r",83:"s",84:"t",85:"u",86:"v",87:"w",88:"x",89:"y",90:"z",107:"+",109:"-",110:".",186:";",187:"=",188:",",189:"-",190:".",191:"/",192:"`",219:"[",220:"\\",221:"]",222:"'",111:"/",106:"*"}};for(t in n.FUNCTION_KEYS)e=n.FUNCTION_KEYS[t].toLowerCase(),n[e]=parseInt(t,10);for(t in n.PRINTABLE_KEYS)e=n.PRINTABLE_KEYS[t].toLowerCase(),n[e]=parseInt(t,10);return i.mixin(n,n.MODIFIER_KEYS),i.mixin(n,n.PRINTABLE_KEYS),i.mixin(n,n.FUNCTION_KEYS),n.enter=n.return,n.escape=n.esc,n.del=n.delete,n[173]="-",function(){for(var e=["cmd","ctrl","alt","shift"],t=Math.pow(2,e.length);t--;)n.KEY_MODS[t]=e.filter((function(e){return t&n.KEY_MODS[e]})).join("-")+"-"}(),n.KEY_MODS[0]="",n.KEY_MODS[-1]="input-",n}();i.mixin(t,r),t.keyCodeToString=function(e){var t=r[e];return"string"!=typeof t&&(t=String.fromCharCode(e)),t.toLowerCase()}})),ace.define("ace/lib/event",["require","exports","module","ace/lib/keys","ace/lib/useragent"],(function(e,t,n){"use strict";var i=e("./keys"),r=e("./useragent"),s=null,o=0;t.addListener=function(e,t,n){if(e.addEventListener)return e.addEventListener(t,n,!1);if(e.attachEvent){var i=function(){n.call(e,window.event)};n._wrapper=i,e.attachEvent("on"+t,i)}},t.removeListener=function(e,t,n){if(e.removeEventListener)return e.removeEventListener(t,n,!1);e.detachEvent&&e.detachEvent("on"+t,n._wrapper||n)},t.stopEvent=function(e){return t.stopPropagation(e),t.preventDefault(e),!1},t.stopPropagation=function(e){e.stopPropagation?e.stopPropagation():e.cancelBubble=!0},t.preventDefault=function(e){e.preventDefault?e.preventDefault():e.returnValue=!1},t.getButton=function(e){return"dblclick"==e.type?0:"contextmenu"==e.type||r.isMac&&e.ctrlKey&&!e.altKey&&!e.shiftKey?2:e.preventDefault?e.button:{1:0,2:2,4:1}[e.button]},t.capture=function(e,n,i){function r(e){n&&n(e),i&&i(e),t.removeListener(document,"mousemove",n,!0),t.removeListener(document,"mouseup",r,!0),t.removeListener(document,"dragstart",r,!0)}return t.addListener(document,"mousemove",n,!0),t.addListener(document,"mouseup",r,!0),t.addListener(document,"dragstart",r,!0),r},t.addMouseWheelListener=function(e,n){"onmousewheel"in e?t.addListener(e,"mousewheel",(function(e){void 0!==e.wheelDeltaX?(e.wheelX=-e.wheelDeltaX/8,e.wheelY=-e.wheelDeltaY/8):(e.wheelX=0,e.wheelY=-e.wheelDelta/8),n(e)})):"onwheel"in e?t.addListener(e,"wheel",(function(e){switch(e.deltaMode){case e.DOM_DELTA_PIXEL:e.wheelX=.35*e.deltaX||0,e.wheelY=.35*e.deltaY||0;break;case e.DOM_DELTA_LINE:case e.DOM_DELTA_PAGE:e.wheelX=5*(e.deltaX||0),e.wheelY=5*(e.deltaY||0)}n(e)})):t.addListener(e,"DOMMouseScroll",(function(e){e.axis&&e.axis==e.HORIZONTAL_AXIS?(e.wheelX=5*(e.detail||0),e.wheelY=0):(e.wheelX=0,e.wheelY=5*(e.detail||0)),n(e)}))},t.addMultiMouseDownListener=function(e,n,i,s){var o,a,l,c=0,u={2:"dblclick",3:"tripleclick",4:"quadclick"};function h(e){if(0!==t.getButton(e)?c=0:e.detail>1?++c>4&&(c=1):c=1,r.isIE){var h=Math.abs(e.clientX-o)>5||Math.abs(e.clientY-a)>5;l&&!h||(c=1),l&&clearTimeout(l),l=setTimeout((function(){l=null}),n[c-1]||600),1==c&&(o=e.clientX,a=e.clientY)}if(e._clicks=c,i[s]("mousedown",e),c>4)c=0;else if(c>1)return i[s](u[c],e)}function d(e){c=2,l&&clearTimeout(l),l=setTimeout((function(){l=null}),n[c-1]||600),i[s]("mousedown",e),i[s](u[c],e)}Array.isArray(e)||(e=[e]),e.forEach((function(e){t.addListener(e,"mousedown",h),r.isOldIE&&t.addListener(e,"dblclick",d)}))};var a=r.isMac&&r.isOpera&&!("KeyboardEvent"in window)?function(e){return 0|(e.metaKey?1:0)|(e.altKey?2:0)|(e.shiftKey?4:0)|(e.ctrlKey?8:0)}:function(e){return 0|(e.ctrlKey?1:0)|(e.altKey?2:0)|(e.shiftKey?4:0)|(e.metaKey?8:0)};function l(e,t,n){var l=a(t);if(!r.isMac&&s){if(t.getModifierState&&(t.getModifierState("OS")||t.getModifierState("Win"))&&(l|=8),s.altGr){if(3==(3&l))return;s.altGr=0}if(18===n||17===n){var c="location"in t?t.location:t.keyLocation;17===n&&1===c?1==s[n]&&(o=t.timeStamp):18===n&&3===l&&2===c&&t.timeStamp-o<50&&(s.altGr=!0)}}if(n in i.MODIFIER_KEYS&&(n=-1),l||13!==n||3!==(c="location"in t?t.location:t.keyLocation)||(e(t,l,-n),!t.defaultPrevented)){if(r.isChromeOS&&8&l){if(e(t,l,n),t.defaultPrevented)return;l&=-9}return!!(l||n in i.FUNCTION_KEYS||n in i.PRINTABLE_KEYS)&&e(t,l,n)}}function c(){s=Object.create(null)}if(t.getModifierString=function(e){return i.KEY_MODS[a(e)]},t.addCommandKeyListener=function(e,n){var i=t.addListener;if(r.isOldGecko||r.isOpera&&!("KeyboardEvent"in window)){var o=null;i(e,"keydown",(function(e){o=e.keyCode})),i(e,"keypress",(function(e){return l(n,e,o)}))}else{var a=null;i(e,"keydown",(function(e){s[e.keyCode]=(s[e.keyCode]||0)+1;var t=l(n,e,e.keyCode);return a=e.defaultPrevented,t})),i(e,"keypress",(function(e){a&&(e.ctrlKey||e.altKey||e.shiftKey||e.metaKey)&&(t.stopEvent(e),a=null)})),i(e,"keyup",(function(e){s[e.keyCode]=null})),s||(c(),i(window,"focus",c))}},"object"==typeof window&&window.postMessage&&!r.isOldIE){var u=1;t.nextTick=function(e,n){n=n||window;var i="zero-timeout-message-"+u++,r=function(s){s.data==i&&(t.stopPropagation(s),t.removeListener(n,"message",r),e())};t.addListener(n,"message",r),n.postMessage(i,"*")}}t.$idleBlocked=!1,t.onIdle=function(e,n){return setTimeout((function n(){t.$idleBlocked?setTimeout(n,100):e()}),n)},t.$idleBlockId=null,t.blockIdle=function(e){t.$idleBlockId&&clearTimeout(t.$idleBlockId),t.$idleBlocked=!0,t.$idleBlockId=setTimeout((function(){t.$idleBlocked=!1}),e||100)},t.nextFrame="object"==typeof window&&(window.requestAnimationFrame||window.mozRequestAnimationFrame||window.webkitRequestAnimationFrame||window.msRequestAnimationFrame||window.oRequestAnimationFrame),t.nextFrame?t.nextFrame=t.nextFrame.bind(window):t.nextFrame=function(e){setTimeout(e,17)}})),ace.define("ace/range",["require","exports","module"],(function(e,t,n){"use strict";var i=function(e,t,n,i){this.start={row:e,column:t},this.end={row:n,column:i}};(function(){this.isEqual=function(e){return this.start.row===e.start.row&&this.end.row===e.end.row&&this.start.column===e.start.column&&this.end.column===e.end.column},this.toString=function(){return"Range: ["+this.start.row+"/"+this.start.column+"] -> ["+this.end.row+"/"+this.end.column+"]"},this.contains=function(e,t){return 0==this.compare(e,t)},this.compareRange=function(e){var t,n=e.end,i=e.start;return 1==(t=this.compare(n.row,n.column))?1==(t=this.compare(i.row,i.column))?2:0==t?1:0:-1==t?-2:-1==(t=this.compare(i.row,i.column))?-1:1==t?42:0},this.comparePoint=function(e){return this.compare(e.row,e.column)},this.containsRange=function(e){return 0==this.comparePoint(e.start)&&0==this.comparePoint(e.end)},this.intersects=function(e){var t=this.compareRange(e);return-1==t||0==t||1==t},this.isEnd=function(e,t){return this.end.row==e&&this.end.column==t},this.isStart=function(e,t){return this.start.row==e&&this.start.column==t},this.setStart=function(e,t){"object"==typeof e?(this.start.column=e.column,this.start.row=e.row):(this.start.row=e,this.start.column=t)},this.setEnd=function(e,t){"object"==typeof e?(this.end.column=e.column,this.end.row=e.row):(this.end.row=e,this.end.column=t)},this.inside=function(e,t){return 0==this.compare(e,t)&&!this.isEnd(e,t)&&!this.isStart(e,t)},this.insideStart=function(e,t){return 0==this.compare(e,t)&&!this.isEnd(e,t)},this.insideEnd=function(e,t){return 0==this.compare(e,t)&&!this.isStart(e,t)},this.compare=function(e,t){return this.isMultiLine()||e!==this.start.row?ethis.end.row?1:this.start.row===e?t>=this.start.column?0:-1:this.end.row===e?t<=this.end.column?0:1:0:tthis.end.column?1:0},this.compareStart=function(e,t){return this.start.row==e&&this.start.column==t?-1:this.compare(e,t)},this.compareEnd=function(e,t){return this.end.row==e&&this.end.column==t?1:this.compare(e,t)},this.compareInside=function(e,t){return this.end.row==e&&this.end.column==t?1:this.start.row==e&&this.start.column==t?-1:this.compare(e,t)},this.clipRows=function(e,t){if(this.end.row>t)var n={row:t+1,column:0};else this.end.rowt)var r={row:t+1,column:0};else this.start.row0;)1&t&&(n+=e),(t>>=1)&&(e+=e);return n};var i=/^\s\s*/,r=/\s\s*$/;t.stringTrimLeft=function(e){return e.replace(i,"")},t.stringTrimRight=function(e){return e.replace(r,"")},t.copyObject=function(e){var t={};for(var n in e)t[n]=e[n];return t},t.copyArray=function(e){for(var t=[],n=0,i=e.length;nDate.now()-50)||(i=!1)},cancel:function(){i=Date.now()}}})),ace.define("ace/keyboard/textinput",["require","exports","module","ace/lib/event","ace/lib/useragent","ace/lib/dom","ace/lib/lang","ace/clipboard","ace/lib/keys"],(function(e,t,n){"use strict";var i=e("../lib/event"),r=e("../lib/useragent"),s=e("../lib/dom"),o=e("../lib/lang"),a=e("../clipboard"),l=r.isChrome<18,c=r.isIE,u=r.isChrome>63,h=400,d=e("../lib/keys"),m=d.KEY_MODS,p=r.isIOS,g=p?/\s/:/\n/;t.TextInput=function(e,t){var n=s.createElement("textarea");n.className="ace_text-input",n.setAttribute("wrap","off"),n.setAttribute("autocorrect","off"),n.setAttribute("autocapitalize","off"),n.setAttribute("spellcheck",!1),n.style.opacity="0",e.insertBefore(n,e.firstChild);var f=!1,E=!1,v=!1,_=!1,C="";r.isMobile||(n.style.fontSize="1px");var A=!1,R=!1,S="",T=0,b=0,w=0;try{var x=document.activeElement===n}catch(e){}i.addListener(n,"blur",(function(e){R||(t.onBlur(e),x=!1)})),i.addListener(n,"focus",(function(e){if(!R){if(x=!0,r.isEdge)try{if(!document.hasFocus())return}catch(e){}t.onFocus(e),r.isEdge?setTimeout(y):y()}})),this.$focusScroll=!1,this.focus=function(){if(C||u||"browser"==this.$focusScroll)return n.focus({preventScroll:!0});var e=n.style.top;n.style.position="fixed",n.style.top="0px";try{var t=0!=n.getBoundingClientRect().top}catch(e){return}var i=[];if(t)for(var r=n.parentElement;r&&1==r.nodeType;)i.push(r),r.setAttribute("ace_nocontext",!0),r=!r.parentElement&&r.getRootNode?r.getRootNode().host:r.parentElement;n.focus({preventScroll:!0}),t&&i.forEach((function(e){e.removeAttribute("ace_nocontext")})),setTimeout((function(){n.style.position="","0px"==n.style.top&&(n.style.top=e)}),0)},this.blur=function(){n.blur()},this.isFocused=function(){return x},t.on("beforeEndOperation",(function(){t.curOp&&"insertstring"==t.curOp.command.name||(v&&(S=n.value="",D()),y())}));var y=p?function(e){if(x&&(!f||e)&&!_){e||(e="");var i="\n ab"+e+"cde fg\n";i!=n.value&&(n.value=S=i);var r=4+(e.length||(t.selection.isEmpty()?0:1));4==T&&b==r||n.setSelectionRange(4,r),T=4,b=r}}:function(){if(!v&&!_&&(x||I)){v=!0;var e=t.selection,i=e.getRange(),r=e.cursor.row,s=i.start.column,o=i.end.column,a=t.session.getLine(r);if(i.start.row!=r){var l=t.session.getLine(r-1);s=i.start.rowr+1?c.length:o,o+=a.length+1,a=a+"\n"+c}a.length>h&&(s0&&S[h]==e[h];)h++,o--;for(l=l.slice(h),h=1;a>0&&S.length-h>T-1&&S[S.length-h]==e[e.length-h];)h++,a--;c-=h-1,u-=h-1;var d=l.length-h+1;return d<0&&(o=-d,d=0),l=l.slice(0,d),i||l||c||o||a||u?(_=!0,l&&!o&&!a&&!c&&!u||A?t.onTextInput(l):t.onTextInput(l,{extendLeft:o,extendRight:a,restoreStart:c,restoreEnd:u}),_=!1,S=e,T=r,b=s,w=u,l):""},N=function(e){if(v)return k();if(e&&e.inputType){if("historyUndo"==e.inputType)return t.execCommand("undo");if("historyRedo"==e.inputType)return t.execCommand("redo")}var i=n.value,r=F(i,!0);(i.length>500||g.test(r))&&y()},M=function(e,t,n){var i=e.clipboardData||window.clipboardData;if(i&&!l){var r=c||n?"Text":"text/plain";try{return t?!1!==i.setData(r,t):i.getData(r)}catch(e){if(!n)return M(e,t,!0)}}},O=function(e,r){var s=t.getCopyText();if(!s)return i.preventDefault(e);M(e,s)?(p&&(y(s),f=s,setTimeout((function(){f=!1}),10)),r?t.onCut():t.onCopy(),i.preventDefault(e)):(f=!0,n.value=s,n.select(),setTimeout((function(){f=!1,y(),r?t.onCut():t.onCopy()})))},B=function(e){O(e,!0)},$=function(e){O(e,!1)},P=function(e){var s=M(e);a.pasteCancelled()||("string"==typeof s?(s&&t.onPaste(s,e),r.isIE&&setTimeout(y),i.preventDefault(e)):(n.value="",E=!0))};i.addCommandKeyListener(n,t.onCommandKey.bind(t)),i.addListener(n,"select",(function(e){v||(f?f=!1:function(e){return 0===e.selectionStart&&e.selectionEnd>=S.length&&e.value===S&&S&&e.selectionEnd!==b}(n)&&(t.selectAll(),y()))})),i.addListener(n,"input",N),i.addListener(n,"cut",B),i.addListener(n,"copy",$),i.addListener(n,"paste",P),"oncut"in n&&"oncopy"in n&&"onpaste"in n||i.addListener(e,"keydown",(function(e){if((!r.isMac||e.metaKey)&&e.ctrlKey)switch(e.keyCode){case 67:$(e);break;case 86:P(e);break;case 88:B(e)}}));var k=function(){if(v&&t.onCompositionUpdate&&!t.$readOnly){if(A)return U();if(v.useTextareaForIME)t.onCompositionUpdate(n.value);else{var e=n.value;F(e),v.markerRange&&(v.context&&(v.markerRange.start.column=v.selectionStart=v.context.compositionStartOffset),v.markerRange.end.column=v.markerRange.start.column+b-v.selectionStart+w)}}},D=function(e){t.onCompositionEnd&&!t.$readOnly&&(v=!1,t.onCompositionEnd(),t.off("mousedown",U),e&&N())};function U(){R=!0,n.blur(),n.focus(),R=!1}var G,W=o.delayedCall(k,50).schedule.bind(null,null);function V(){clearTimeout(G),G=setTimeout((function(){C&&(n.style.cssText=C,C=""),t.renderer.$isMousePressed=!1,t.renderer.$keepTextAreaAtCursor&&t.renderer.$moveTextAreaToCursor()}),0)}i.addListener(n,"compositionstart",(function(e){if(!v&&t.onCompositionStart&&!t.$readOnly&&(v={},!A)){setTimeout(k,0),t.on("mousedown",U);var i=t.getSelectionRange();i.end.row=i.start.row,i.end.column=i.start.column,v.markerRange=i,v.selectionStart=T,t.onCompositionStart(v),v.useTextareaForIME?(n.value="",S="",T=0,b=0):(n.msGetInputContext&&(v.context=n.msGetInputContext()),n.getInputContext&&(v.context=n.getInputContext()))}})),i.addListener(n,"compositionupdate",k),i.addListener(n,"keyup",(function(e){27==e.keyCode&&n.value.lengthb&&"\n"==S[s]?o=d.end:ib&&S.slice(0,s).split("\n").length>2?o=d.down:s>b&&" "==S[s-1]?(o=d.right,a=m.option):(s>b||s==b&&b!=T&&i==s)&&(o=d.right),i!==s&&(a|=m.shift),o){if(!t.onCommandKey({},a,o)&&t.commands){o=d.keyCodeToString(o);var l=t.commands.findKeyCommand(a,o);l&&t.execCommand(l)}T=i,b=s,y("")}}};document.addEventListener("selectionchange",s),t.on("destroy",(function(){document.removeEventListener("selectionchange",s)}))}(0,t,n)}})),ace.define("ace/mouse/default_handlers",["require","exports","module","ace/lib/useragent"],(function(e,t,n){"use strict";var i=e("../lib/useragent");function r(e){e.$clickSelection=null;var t=e.editor;t.setDefaultHandler("mousedown",this.onMouseDown.bind(e)),t.setDefaultHandler("dblclick",this.onDoubleClick.bind(e)),t.setDefaultHandler("tripleclick",this.onTripleClick.bind(e)),t.setDefaultHandler("quadclick",this.onQuadClick.bind(e)),t.setDefaultHandler("mousewheel",this.onMouseWheel.bind(e)),["select","startSelect","selectEnd","selectAllEnd","selectByWordsEnd","selectByLinesEnd","dragWait","dragWaitEnd","focusWait"].forEach((function(t){e[t]=this[t]}),this),e.selectByLines=this.extendSelectionBy.bind(e,"getLineRange"),e.selectByWords=this.extendSelectionBy.bind(e,"getWordRange")}function s(e,t){if(e.start.row==e.end.row)var n=2*t.column-e.start.column-e.end.column;else if(e.start.row!=e.end.row-1||e.start.column||e.end.column)n=2*t.row-e.start.row-e.end.row;else n=t.column-4;return n<0?{cursor:e.start,anchor:e.end}:{cursor:e.end,anchor:e.start}}(function(){this.onMouseDown=function(e){var t=e.inSelection(),n=e.getDocumentPosition();this.mousedownEvent=e;var r=this.editor,s=e.getButton();return 0!==s?((r.getSelectionRange().isEmpty()||1==s)&&r.selection.moveToPosition(n),void(2==s&&(r.textInput.onContextMenu(e.domEvent),i.isMozilla||e.preventDefault()))):(this.mousedownEvent.time=Date.now(),!t||r.isFocused()||(r.focus(),!this.$focusTimeout||this.$clickSelection||r.inMultiSelectMode)?(this.captureMouse(e),this.startSelect(n,e.domEvent._clicks>1),e.preventDefault()):(this.setState("focusWait"),void this.captureMouse(e)))},this.startSelect=function(e,t){e=e||this.editor.renderer.screenToTextCoordinates(this.x,this.y);var n=this.editor;this.mousedownEvent&&(this.mousedownEvent.getShiftKey()?n.selection.selectToPosition(e):t||n.selection.moveToPosition(e),t||this.select(),n.renderer.scroller.setCapture&&n.renderer.scroller.setCapture(),n.setStyle("ace_selecting"),this.setState("select"))},this.select=function(){var e,t=this.editor,n=t.renderer.screenToTextCoordinates(this.x,this.y);if(this.$clickSelection){var i=this.$clickSelection.comparePoint(n);if(-1==i)e=this.$clickSelection.end;else if(1==i)e=this.$clickSelection.start;else{var r=s(this.$clickSelection,n);n=r.cursor,e=r.anchor}t.selection.setSelectionAnchor(e.row,e.column)}t.selection.selectToPosition(n),t.renderer.scrollCursorIntoView()},this.extendSelectionBy=function(e){var t,n=this.editor,i=n.renderer.screenToTextCoordinates(this.x,this.y),r=n.selection[e](i.row,i.column);if(this.$clickSelection){var o=this.$clickSelection.comparePoint(r.start),a=this.$clickSelection.comparePoint(r.end);if(-1==o&&a<=0)t=this.$clickSelection.end,r.end.row==i.row&&r.end.column==i.column||(i=r.start);else if(1==a&&o>=0)t=this.$clickSelection.start,r.start.row==i.row&&r.start.column==i.column||(i=r.end);else if(-1==o&&1==a)i=r.end,t=r.start;else{var l=s(this.$clickSelection,i);i=l.cursor,t=l.anchor}n.selection.setSelectionAnchor(t.row,t.column)}n.selection.selectToPosition(i),n.renderer.scrollCursorIntoView()},this.selectEnd=this.selectAllEnd=this.selectByWordsEnd=this.selectByLinesEnd=function(){this.$clickSelection=null,this.editor.unsetStyle("ace_selecting"),this.editor.renderer.scroller.releaseCapture&&this.editor.renderer.scroller.releaseCapture()},this.focusWait=function(){var e,t,n,i,r=(e=this.mousedownEvent.x,t=this.mousedownEvent.y,n=this.x,i=this.y,Math.sqrt(Math.pow(n-e,2)+Math.pow(i-t,2))),s=Date.now();(r>0||s-this.mousedownEvent.time>this.$focusTimeout)&&this.startSelect(this.mousedownEvent.getDocumentPosition())},this.onDoubleClick=function(e){var t=e.getDocumentPosition(),n=this.editor,i=n.session.getBracketRange(t);i?(i.isEmpty()&&(i.start.column--,i.end.column++),this.setState("select")):(i=n.selection.getWordRange(t.row,t.column),this.setState("selectByWords")),this.$clickSelection=i,this.select()},this.onTripleClick=function(e){var t=e.getDocumentPosition(),n=this.editor;this.setState("selectByLines");var i=n.getSelectionRange();i.isMultiLine()&&i.contains(t.row,t.column)?(this.$clickSelection=n.selection.getLineRange(i.start.row),this.$clickSelection.end=n.selection.getLineRange(i.end.row).end):this.$clickSelection=n.selection.getLineRange(t.row),this.select()},this.onQuadClick=function(e){var t=this.editor;t.selectAll(),this.$clickSelection=t.getSelectionRange(),this.setState("selectAll")},this.onMouseWheel=function(e){if(!e.getAccelKey()){e.getShiftKey()&&e.wheelY&&!e.wheelX&&(e.wheelX=e.wheelY,e.wheelY=0);var t=this.editor;this.$lastScroll||(this.$lastScroll={t:0,vx:0,vy:0,allowed:0});var n=this.$lastScroll,i=e.domEvent.timeStamp,r=i-n.t,s=r?e.wheelX/r:n.vx,o=r?e.wheelY/r:n.vy;r<550&&(s=(s+n.vx)/2,o=(o+n.vy)/2);var a=Math.abs(s/o),l=!1;return a>=1&&t.renderer.isScrollableBy(e.wheelX*e.speed,0)&&(l=!0),a<=1&&t.renderer.isScrollableBy(0,e.wheelY*e.speed)&&(l=!0),l?n.allowed=i:i-n.allowed<550&&(Math.abs(s)<=1.5*Math.abs(n.vx)&&Math.abs(o)<=1.5*Math.abs(n.vy)?(l=!0,n.allowed=i):n.allowed=0),n.t=i,n.vx=s,n.vy=o,l?(t.renderer.scrollBy(e.wheelX*e.speed,e.wheelY*e.speed),e.stop()):void 0}}}).call(r.prototype),t.DefaultHandlers=r})),ace.define("ace/tooltip",["require","exports","module","ace/lib/oop","ace/lib/dom"],(function(e,t,n){"use strict";e("./lib/oop");var i=e("./lib/dom");function r(e){this.isOpen=!1,this.$element=null,this.$parentNode=e}(function(){this.$init=function(){return this.$element=i.createElement("div"),this.$element.className="ace_tooltip",this.$element.style.display="none",this.$parentNode.appendChild(this.$element),this.$element},this.getElement=function(){return this.$element||this.$init()},this.setText=function(e){this.getElement().textContent=e},this.setHtml=function(e){this.getElement().innerHTML=e},this.setPosition=function(e,t){this.getElement().style.left=e+"px",this.getElement().style.top=t+"px"},this.setClassName=function(e){i.addCssClass(this.getElement(),e)},this.show=function(e,t,n){null!=e&&this.setText(e),null!=t&&null!=n&&this.setPosition(t,n),this.isOpen||(this.getElement().style.display="block",this.isOpen=!0)},this.hide=function(){this.isOpen&&(this.getElement().style.display="none",this.isOpen=!1)},this.getHeight=function(){return this.getElement().offsetHeight},this.getWidth=function(){return this.getElement().offsetWidth},this.destroy=function(){this.isOpen=!1,this.$element&&this.$element.parentNode&&this.$element.parentNode.removeChild(this.$element)}}).call(r.prototype),t.Tooltip=r})),ace.define("ace/mouse/default_gutter_handler",["require","exports","module","ace/lib/dom","ace/lib/oop","ace/lib/event","ace/tooltip"],(function(e,t,n){"use strict";var i=e("../lib/dom"),r=e("../lib/oop"),s=e("../lib/event"),o=e("../tooltip").Tooltip;function a(e){o.call(this,e)}r.inherits(a,o),function(){this.setPosition=function(e,t){var n=window.innerWidth||document.documentElement.clientWidth,i=window.innerHeight||document.documentElement.clientHeight,r=this.getWidth(),s=this.getHeight();(e+=15)+r>n&&(e-=e+r-n),(t+=15)+s>i&&(t-=20+s),o.prototype.setPosition.call(this,e,t)}}.call(a.prototype),t.GutterHandler=function(e){var t,n,r,o=e.editor,l=o.renderer.$gutterLayer,c=new a(o.container);function u(){t&&(t=clearTimeout(t)),r&&(c.hide(),r=null,o._signal("hideGutterTooltip",c),o.removeEventListener("mousewheel",u))}function h(e){c.setPosition(e.x,e.y)}e.editor.setDefaultHandler("guttermousedown",(function(t){if(o.isFocused()&&0==t.getButton()&&"foldWidgets"!=l.getRegion(t)){var n=t.getDocumentPosition().row,i=o.session.selection;if(t.getShiftKey())i.selectTo(n,0);else{if(2==t.domEvent.detail)return o.selectAll(),t.preventDefault();e.$clickSelection=o.selection.getLineRange(n)}return e.setState("selectByLines"),e.captureMouse(t),t.preventDefault()}})),e.editor.setDefaultHandler("guttermousemove",(function(s){var a=s.domEvent.target||s.domEvent.srcElement;if(i.hasCssClass(a,"ace_fold-widget"))return u();r&&e.$tooltipFollowsMouse&&h(s),n=s,t||(t=setTimeout((function(){t=null,n&&!e.isMousePressed?function(){var t=n.getDocumentPosition().row,i=l.$annotations[t];if(!i)return u();if(t==o.session.getLength()){var s=o.renderer.pixelToScreenCoordinates(0,n.y).row,a=n.$pos;if(s>o.session.documentToScreenRow(a.row,a.column))return u()}if(r!=i)if(r=i.text.join("
"),c.setHtml(r),c.show(),o._signal("showGutterTooltip",c),o.on("mousewheel",u),e.$tooltipFollowsMouse)h(n);else{var d=n.domEvent.target.getBoundingClientRect(),m=c.getElement().style;m.left=d.right+"px",m.top=d.bottom+"px"}}():u()}),50))})),s.addListener(o.renderer.$gutter,"mouseout",(function(e){n=null,r&&!t&&(t=setTimeout((function(){t=null,u()}),50))})),o.on("changeSession",u)}})),ace.define("ace/mouse/mouse_event",["require","exports","module","ace/lib/event","ace/lib/useragent"],(function(e,t,n){"use strict";var i=e("../lib/event"),r=e("../lib/useragent"),s=t.MouseEvent=function(e,t){this.domEvent=e,this.editor=t,this.x=this.clientX=e.clientX,this.y=this.clientY=e.clientY,this.$pos=null,this.$inSelection=null,this.propagationStopped=!1,this.defaultPrevented=!1};(function(){this.stopPropagation=function(){i.stopPropagation(this.domEvent),this.propagationStopped=!0},this.preventDefault=function(){i.preventDefault(this.domEvent),this.defaultPrevented=!0},this.stop=function(){this.stopPropagation(),this.preventDefault()},this.getDocumentPosition=function(){return this.$pos||(this.$pos=this.editor.renderer.screenToTextCoordinates(this.clientX,this.clientY)),this.$pos},this.inSelection=function(){if(null!==this.$inSelection)return this.$inSelection;var e=this.editor.getSelectionRange();if(e.isEmpty())this.$inSelection=!1;else{var t=this.getDocumentPosition();this.$inSelection=e.contains(t.row,t.column)}return this.$inSelection},this.getButton=function(){return i.getButton(this.domEvent)},this.getShiftKey=function(){return this.domEvent.shiftKey},this.getAccelKey=r.isMac?function(){return this.domEvent.metaKey}:function(){return this.domEvent.ctrlKey}}).call(s.prototype)})),ace.define("ace/mouse/dragdrop_handler",["require","exports","module","ace/lib/dom","ace/lib/event","ace/lib/useragent"],(function(e,t,n){"use strict";var i=e("../lib/dom"),r=e("../lib/event"),s=e("../lib/useragent");function o(e){var t=e.editor,n=i.createElement("img");n.src="data:image/gif;base64,R0lGODlhAQABAAAAACH5BAEKAAEALAAAAAABAAEAAAICTAEAOw==",s.isOpera&&(n.style.cssText="width:1px;height:1px;position:fixed;top:0;left:0;z-index:2147483647;opacity:0;"),["dragWait","dragWaitEnd","startDrag","dragReadyEnd","onMouseDrag"].forEach((function(t){e[t]=this[t]}),this),t.addEventListener("mousedown",this.onMouseDown.bind(e));var o,l,c,u,h,d,m,p,g,f,E,v=t.container,_=0;function C(){var e=d;(function(e,n){var i=Date.now(),r=!n||e.row!=n.row,s=!n||e.column!=n.column;!f||r||s?(t.moveCursorToPosition(e),f=i,E={x:l,y:c}):a(E.x,E.y,l,c)>5?f=null:i-f>=200&&(t.renderer.scrollCursorIntoView(),f=null)})(d=t.renderer.screenToTextCoordinates(l,c),e),function(e,n){var i=Date.now(),r=t.renderer.layerConfig.lineHeight,s=t.renderer.layerConfig.characterWidth,o=t.renderer.scroller.getBoundingClientRect(),a={x:{left:l-o.left,right:o.right-l},y:{top:c-o.top,bottom:o.bottom-c}},u=Math.min(a.x.left,a.x.right),h=Math.min(a.y.top,a.y.bottom),d={row:e.row,column:e.column};u/s<=2&&(d.column+=a.x.left=200&&t.renderer.scrollCursorIntoView(d):g=i:g=null}(d,e)}function A(){h=t.selection.toOrientedRange(),o=t.session.addMarker(h,"ace_selection",t.getSelectionStyle()),t.clearSelection(),t.isFocused()&&t.renderer.$cursorLayer.setBlinking(!1),clearInterval(u),C(),u=setInterval(C,20),_=0,r.addListener(document,"mousemove",T)}function R(){clearInterval(u),t.session.removeMarker(o),o=null,t.selection.fromOrientedRange(h),t.isFocused()&&!p&&t.$resetCursorStyle(),h=null,d=null,_=0,g=null,f=null,r.removeListener(document,"mousemove",T)}this.onDragStart=function(e){if(this.cancelDrag||!v.draggable){var i=this;return setTimeout((function(){i.startSelect(),i.captureMouse(e)}),0),e.preventDefault()}h=t.getSelectionRange();var r=e.dataTransfer;r.effectAllowed=t.getReadOnly()?"copy":"copyMove",s.isOpera&&(t.container.appendChild(n),n.scrollTop=0),r.setDragImage&&r.setDragImage(n,0,0),s.isOpera&&t.container.removeChild(n),r.clearData(),r.setData("Text",t.session.getTextRange()),p=!0,this.setState("drag")},this.onDragEnd=function(e){if(v.draggable=!1,p=!1,this.setState(null),!t.getReadOnly()){var n=e.dataTransfer.dropEffect;m||"move"!=n||t.session.remove(t.getSelectionRange()),t.$resetCursorStyle()}this.editor.unsetStyle("ace_dragging"),this.editor.renderer.setCursorStyle("")},this.onDragEnter=function(e){if(!t.getReadOnly()&&b(e.dataTransfer))return l=e.clientX,c=e.clientY,o||A(),_++,e.dataTransfer.dropEffect=m=w(e),r.preventDefault(e)},this.onDragOver=function(e){if(!t.getReadOnly()&&b(e.dataTransfer))return l=e.clientX,c=e.clientY,o||(A(),_++),null!==S&&(S=null),e.dataTransfer.dropEffect=m=w(e),r.preventDefault(e)},this.onDragLeave=function(e){if(--_<=0&&o)return R(),m=null,r.preventDefault(e)},this.onDrop=function(e){if(d){var n=e.dataTransfer;if(p)switch(m){case"move":h=h.contains(d.row,d.column)?{start:d,end:d}:t.moveText(h,d);break;case"copy":h=t.moveText(h,d,!0)}else{var i=n.getData("Text");h={start:d,end:t.session.insert(d,i)},t.focus(),m=null}return R(),r.preventDefault(e)}},r.addListener(v,"dragstart",this.onDragStart.bind(e)),r.addListener(v,"dragend",this.onDragEnd.bind(e)),r.addListener(v,"dragenter",this.onDragEnter.bind(e)),r.addListener(v,"dragover",this.onDragOver.bind(e)),r.addListener(v,"dragleave",this.onDragLeave.bind(e)),r.addListener(v,"drop",this.onDrop.bind(e));var S=null;function T(){null==S&&(S=setTimeout((function(){null!=S&&o&&R()}),20))}function b(e){var t=e.types;return!t||Array.prototype.some.call(t,(function(e){return"text/plain"==e||"Text"==e}))}function w(e){var t=["copy","copymove","all","uninitialized"],n=s.isMac?e.altKey:e.ctrlKey,i="uninitialized";try{i=e.dataTransfer.effectAllowed.toLowerCase()}catch(e){}var r="none";return n&&t.indexOf(i)>=0?r="copy":["move","copymove","linkmove","all","uninitialized"].indexOf(i)>=0?r="move":t.indexOf(i)>=0&&(r="copy"),r}}function a(e,t,n,i){return Math.sqrt(Math.pow(n-e,2)+Math.pow(i-t,2))}(function(){this.dragWait=function(){Date.now()-this.mousedownEvent.time>this.editor.getDragDelay()&&this.startDrag()},this.dragWaitEnd=function(){this.editor.container.draggable=!1,this.startSelect(this.mousedownEvent.getDocumentPosition()),this.selectEnd()},this.dragReadyEnd=function(e){this.editor.$resetCursorStyle(),this.editor.unsetStyle("ace_dragging"),this.editor.renderer.setCursorStyle(""),this.dragWaitEnd()},this.startDrag=function(){this.cancelDrag=!1;var e=this.editor;e.container.draggable=!0,e.renderer.$cursorLayer.setBlinking(!1),e.setStyle("ace_dragging");var t=s.isWin?"default":"move";e.renderer.setCursorStyle(t),this.setState("dragReady")},this.onMouseDrag=function(e){var t=this.editor.container;s.isIE&&"dragReady"==this.state&&a(this.mousedownEvent.x,this.mousedownEvent.y,this.x,this.y)>3&&t.dragDrop(),"dragWait"===this.state&&a(this.mousedownEvent.x,this.mousedownEvent.y,this.x,this.y)>0&&(t.draggable=!1,this.startSelect(this.mousedownEvent.getDocumentPosition()))},this.onMouseDown=function(e){if(this.$dragEnabled){this.mousedownEvent=e;var t=this.editor,n=e.inSelection(),i=e.getButton();if(1===(e.domEvent.detail||1)&&0===i&&n){if(e.editor.inMultiSelectMode&&(e.getAccelKey()||e.getShiftKey()))return;this.mousedownEvent.time=Date.now();var r=e.domEvent.target||e.domEvent.srcElement;"unselectable"in r&&(r.unselectable="on"),t.getDragDelay()?(s.isWebKit&&(this.cancelDrag=!0,t.container.draggable=!0),this.setState("dragWait")):this.startDrag(),this.captureMouse(e,this.onMouseDrag.bind(this)),e.defaultPrevented=!0}}}}).call(o.prototype),t.DragdropHandler=o})),ace.define("ace/mouse/touch_handler",["require","exports","module","ace/mouse/mouse_event","ace/lib/dom"],(function(e,t,n){"use strict";var i=e("./mouse_event").MouseEvent,r=e("../lib/dom");t.addTouchListeners=function(e,t){var n,s,o,a,l,c,u,h,d,m="scroll",p=0,g=0,f=0,E=0;function v(){var e,n,i;d||(e=window.navigator&&window.navigator.clipboard,n=!1,i=function(i){var s,o,a=i.target.getAttribute("action");if("more"==a||!n)return n=!n,s=t.getCopyText(),o=t.session.getUndoManager().hasUndo(),void d.replaceChild(r.buildDom(n?["span",!s&&["span",{class:"ace_mobile-button",action:"selectall"},"Select All"],s&&["span",{class:"ace_mobile-button",action:"copy"},"Copy"],s&&["span",{class:"ace_mobile-button",action:"cut"},"Cut"],e&&["span",{class:"ace_mobile-button",action:"paste"},"Paste"],o&&["span",{class:"ace_mobile-button",action:"undo"},"Undo"],["span",{class:"ace_mobile-button",action:"find"},"Find"],["span",{class:"ace_mobile-button",action:"openCommandPallete"},"Pallete"]]:["span"]),d.firstChild);"paste"==a?e.readText().then((function(e){t.execCommand(a,e)})):a&&("cut"!=a&&"copy"!=a||(e?e.writeText(t.getCopyText()):document.execCommand("copy")),t.execCommand(a)),d.firstChild.style.display="none",n=!1,"openCommandPallete"!=a&&t.focus()},d=r.buildDom(["div",{class:"ace_mobile-menu",ontouchstart:function(e){m="menu",e.stopPropagation(),e.preventDefault(),t.textInput.focus()},ontouchend:function(e){e.stopPropagation(),e.preventDefault(),i(e)},onclick:i},["span"],["span",{class:"ace_mobile-button",action:"more"},"..."]],t.container));var s=t.selection.cursor,o=t.renderer.textToScreenCoordinates(s.row,s.column),a=t.container.getBoundingClientRect();d.style.top=o.pageY-a.top-3+"px",d.style.right="10px",d.style.display="",d.firstChild.style.display="none",t.on("input",_)}function _(e){d&&(d.style.display="none"),t.off("input",_)}function C(){l=null,clearTimeout(l);var e=t.selection.getRange(),n=e.contains(u.row,u.column);!e.isEmpty()&&n||(t.selection.moveToPosition(u),t.selection.selectWord()),m="wait",v()}e.addEventListener("contextmenu",(function(e){h&&t.textInput.getElement().focus()})),e.addEventListener("touchstart",(function(e){var r=e.touches;if(l||r.length>1)return clearTimeout(l),l=null,o=-1,void(m="zoom");h=t.$mouseHandler.isMousePressed=!0;var c=t.renderer.layerConfig.lineHeight,d=t.renderer.layerConfig.lineHeight,v=e.timeStamp;a=v;var _=r[0],A=_.clientX,R=_.clientY;Math.abs(n-A)+Math.abs(s-R)>c&&(o=-1),n=e.clientX=A,s=e.clientY=R,f=E=0;var S=new i(e,t);if(u=S.getDocumentPosition(),v-o<500&&1==r.length&&!p)g++,e.preventDefault(),e.button=0,function(){l=null,clearTimeout(l),t.selection.moveToPosition(u);var e=g>=2?t.selection.getLineRange(u.row):t.session.getBracketRange(u);e&&!e.isEmpty()?t.selection.setRange(e):t.selection.selectWord(),m="wait"}();else{g=0;var T=t.selection.cursor,b=t.selection.isEmpty()?T:t.selection.anchor,w=t.renderer.$cursorLayer.getPixelPosition(T,!0),x=t.renderer.$cursorLayer.getPixelPosition(b,!0),y=t.renderer.scroller.getBoundingClientRect(),L=function(e,t){return(e/=d)*e+(t=t/c-.75)*t};if(e.clientXF?"cursor":"anchor"),m=F<3.5?"anchor":I<3.5?"cursor":"scroll",l=setTimeout(C,450)}o=v})),e.addEventListener("touchend",(function(e){h=t.$mouseHandler.isMousePressed=!1,c&&clearInterval(c),"zoom"==m?(m="",p=0):l?(t.selection.moveToPosition(u),p=0,v()):"scroll"==m?(p+=60,c=setInterval((function(){p--<=0&&(clearInterval(c),c=null),Math.abs(f)<.01&&(f=0),Math.abs(E)<.01&&(E=0),p<20&&(f*=.9),p<20&&(E*=.9);var e=t.session.getScrollTop();t.renderer.scrollBy(10*f,10*E),e==t.session.getScrollTop()&&(p=0)}),10),e.preventDefault(),_()):v(),clearTimeout(l),l=null})),e.addEventListener("touchmove",(function(e){l&&(clearTimeout(l),l=null);var r=e.touches;if(!(r.length>1||"zoom"==m)){var o=r[0],c=n-o.clientX,u=s-o.clientY;if("wait"==m){if(!(c*c+u*u>4))return e.preventDefault();m="cursor"}n=o.clientX,s=o.clientY,e.clientX=o.clientX,e.clientY=o.clientY;var h=e.timeStamp,d=h-a;if(a=h,"scroll"==m){var p=new i(e,t);p.speed=1,p.wheelX=c,p.wheelY=u,10*Math.abs(c)1&&(r=n[n.length-2]);var o=l[t+"Path"];return null==o?o=l.basePath:"/"==i&&(t=i=""),o&&"/"!=o.slice(-1)&&(o+="/"),o+t+i+r+this.get("suffix")},t.setModuleUrl=function(e,t){return l.$moduleUrls[e]=t},t.$loading={},t.loadModule=function(n,i){var r,o;Array.isArray(n)&&(o=n[0],n=n[1]);try{r=e(n)}catch(e){}if(r&&!t.$loading[n])return i&&i(r);if(t.$loading[n]||(t.$loading[n]=[]),t.$loading[n].push(i),!(t.$loading[n].length>1)){var a=function(){e([n],(function(e){t._emit("load.module",{name:n,module:e});var i=t.$loading[n];t.$loading[n]=null,i.forEach((function(t){t&&t(e)}))}))};if(!t.get("packaged"))return a();s.loadScript(t.moduleUrl(n,o),a),c()}};var c=function(){l.basePath||l.workerPath||l.modePath||l.themePath||Object.keys(l.$moduleUrls).length||(console.error("Unable to infer path to ace from script src,","use ace.config.set('basePath', 'path') to enable dynamic loading of modes and themes","or with webpack use ace/webpack-resolver"),c=function(){})};function u(r){if(a&&a.document){l.packaged=r||e.packaged||i.packaged||a.define&&n.amdD.packaged;for(var s,o={},c="",u=document.currentScript||document._currentScript,h=(u&&u.ownerDocument||document).getElementsByTagName("script"),d=0;d=e){for(s=h+1;s=e;)s++;for(a=h,l=s-1;a=t.length||2!=(l=n[r-1])&&3!=l||2!=(c=t[r+1])&&3!=c?4:(s&&(c=3),c==l?c:4);case 10:return 2==(l=r>0?n[r-1]:5)&&r+10&&2==n[r-1])return 2;if(s)return 4;for(m=r+1,d=t.length;m=1425&&g<=2303||64286==g;if(l=t[m],f&&(1==l||7==l))return 1}return r<1||5==(l=t[r-1])?4:n[r-1];case 5:return s=!1,o=!0,i;case 6:return a=!0,4;case 13:case 14:case 16:case 17:case 15:s=!1;case h:return 4}}function f(e){var t=e.charCodeAt(0),n=t>>8;return 0==n?t>191?0:d[t]:5==n?/[\u0591-\u05f4]/.test(e)?1:0:6==n?/[\u0610-\u061a\u064b-\u065f\u06d6-\u06e4\u06e7-\u06ed]/.test(e)?12:/[\u0660-\u0669\u066b-\u066c]/.test(e)?3:1642==t?u:/[\u06f0-\u06f9]/.test(e)?2:7:32==n&&t<=8287?m[255&t]:254==n&&t>=65136?7:4}t.L=0,t.R=1,t.EN=2,t.ON_R=3,t.AN=4,t.R_H=5,t.B=6,t.RLE=7,t.DOT="·",t.doBidiReorder=function(e,n,u){if(e.length<2)return{};var d=e.split(""),m=new Array(d.length),E=new Array(d.length),v=[];i=u?1:0,function(e,t,n,u){var h=i?c:l,d=null,m=null,p=null,E=0,v=null,_=-1,C=null,A=null,R=[];if(!u)for(C=0,u=[];C0)if(16==v){for(C=_;C-1){for(C=_;C=0&&8==u[S];S--)t[S]=i}}(d,v,d.length,n);for(var _=0;_7&&n[_]<13||4===n[_]||n[_]===h)?v[_]=t.ON_R:_>0&&"ل"===d[_-1]&&/\u0622|\u0623|\u0625|\u0627/.test(d[_])&&(v[_-1]=v[_]=t.R_H,_++);for(d[d.length-1]===t.DOT&&(v[d.length-1]=t.B),"‫"===d[0]&&(v[0]=t.RLE),_=0;_=0&&(e=this.session.$docRowCache[n])}return e},this.getSplitIndex=function(){var e=0,t=this.session.$screenRowCache;if(t.length)for(var n,i=this.session.$getRowCacheIndex(t,this.currentRow);this.currentRow-e>0&&(n=this.session.$getRowCacheIndex(t,this.currentRow-e-1))===i;)i=n,e++;else e=this.currentRow;return e},this.updateRowLine=function(e,t){void 0===e&&(e=this.getDocumentRow());var n=e===this.session.getLength()-1?this.EOF:this.EOL;if(this.wrapIndent=0,this.line=this.session.getLine(e),this.isRtlDir=this.$isRtl||this.line.charAt(0)===this.RLE,this.session.$useWrapMode){var s=this.session.$wrapData[e];s&&(void 0===t&&(t=this.getSplitIndex()),t>0&&s.length?(this.wrapIndent=s.indent,this.wrapOffset=this.wrapIndent*this.charWidths[i.L],this.line=tt?this.session.getOverwrite()?e:e-1:t,r=i.getVisualFromLogicalIdx(n,this.bidiMap),s=this.bidiMap.bidiLevels,o=0;!this.session.getOverwrite()&&e<=t&&s[r]%2!=0&&r++;for(var a=0;at&&s[r]%2==0&&(o+=this.charWidths[s[r]]),this.wrapIndent&&(o+=this.isRtlDir?-1*this.wrapOffset:this.wrapOffset),this.isRtlDir&&(o+=this.rtlLineOffset),o},this.getSelections=function(e,t){var n,i=this.bidiMap,r=i.bidiLevels,s=[],o=0,a=Math.min(e,t)-this.wrapIndent,l=Math.max(e,t)-this.wrapIndent,c=!1,u=!1,h=0;this.wrapIndent&&(o+=this.isRtlDir?-1*this.wrapOffset:this.wrapOffset);for(var d,m=0;m=a&&dn+s/2;){if(n+=s,i===r.length-1){s=0;break}s=this.charWidths[r[++i]]}return i>0&&r[i-1]%2!=0&&r[i]%2==0?(e0&&r[i-1]%2==0&&r[i]%2!=0?t=1+(e>n?this.bidiMap.logicalFromVisual[i]:this.bidiMap.logicalFromVisual[i-1]):this.isRtlDir&&i===r.length-1&&0===s&&r[i-1]%2==0||!this.isRtlDir&&0===i&&r[i]%2!=0?t=1+this.bidiMap.logicalFromVisual[i]:(i>0&&r[i-1]%2!=0&&0!==s&&i--,t=this.bidiMap.logicalFromVisual[i]),0===t&&this.isRtlDir&&t++,t+this.wrapIndent}}).call(o.prototype),t.BidiHandler=o})),ace.define("ace/selection",["require","exports","module","ace/lib/oop","ace/lib/lang","ace/lib/event_emitter","ace/range"],(function(e,t,n){"use strict";var i=e("./lib/oop"),r=e("./lib/lang"),s=e("./lib/event_emitter").EventEmitter,o=e("./range").Range,a=function(e){this.session=e,this.doc=e.getDocument(),this.clearSelection(),this.cursor=this.lead=this.doc.createAnchor(0,0),this.anchor=this.doc.createAnchor(0,0),this.$silent=!1;var t=this;this.cursor.on("change",(function(e){t.$cursorChanged=!0,t.$silent||t._emit("changeCursor"),t.$isEmpty||t.$silent||t._emit("changeSelection"),t.$keepDesiredColumnOnChange||e.old.column==e.value.column||(t.$desiredColumn=null)})),this.anchor.on("change",(function(){t.$anchorChanged=!0,t.$isEmpty||t.$silent||t._emit("changeSelection")}))};(function(){i.implement(this,s),this.isEmpty=function(){return this.$isEmpty||this.anchor.row==this.lead.row&&this.anchor.column==this.lead.column},this.isMultiLine=function(){return!this.$isEmpty&&this.anchor.row!=this.cursor.row},this.getCursor=function(){return this.lead.getPosition()},this.setSelectionAnchor=function(e,t){this.$isEmpty=!1,this.anchor.setPosition(e,t)},this.getAnchor=this.getSelectionAnchor=function(){return this.$isEmpty?this.getSelectionLead():this.anchor.getPosition()},this.getSelectionLead=function(){return this.lead.getPosition()},this.isBackwards=function(){var e=this.anchor,t=this.lead;return e.row>t.row||e.row==t.row&&e.column>t.column},this.getRange=function(){var e=this.anchor,t=this.lead;return this.$isEmpty?o.fromPoints(t,t):this.isBackwards()?o.fromPoints(t,e):o.fromPoints(e,t)},this.clearSelection=function(){this.$isEmpty||(this.$isEmpty=!0,this._emit("changeSelection"))},this.selectAll=function(){this.$setSelection(0,0,Number.MAX_VALUE,Number.MAX_VALUE)},this.setRange=this.setSelectionRange=function(e,t){var n=t?e.end:e.start,i=t?e.start:e.end;this.$setSelection(n.row,n.column,i.row,i.column)},this.$setSelection=function(e,t,n,i){var r=this.$isEmpty,s=this.inMultiSelectMode;this.$silent=!0,this.$cursorChanged=this.$anchorChanged=!1,this.anchor.setPosition(e,t),this.cursor.setPosition(n,i),this.$isEmpty=!o.comparePoints(this.anchor,this.cursor),this.$silent=!1,this.$cursorChanged&&this._emit("changeCursor"),(this.$cursorChanged||this.$anchorChanged||r!=this.$isEmpty||s)&&this._emit("changeSelection")},this.$moveSelection=function(e){var t=this.lead;this.$isEmpty&&this.setSelectionAnchor(t.row,t.column),e.call(this)},this.selectTo=function(e,t){this.$moveSelection((function(){this.moveCursorTo(e,t)}))},this.selectToPosition=function(e){this.$moveSelection((function(){this.moveCursorToPosition(e)}))},this.moveTo=function(e,t){this.clearSelection(),this.moveCursorTo(e,t)},this.moveToPosition=function(e){this.clearSelection(),this.moveCursorToPosition(e)},this.selectUp=function(){this.$moveSelection(this.moveCursorUp)},this.selectDown=function(){this.$moveSelection(this.moveCursorDown)},this.selectRight=function(){this.$moveSelection(this.moveCursorRight)},this.selectLeft=function(){this.$moveSelection(this.moveCursorLeft)},this.selectLineStart=function(){this.$moveSelection(this.moveCursorLineStart)},this.selectLineEnd=function(){this.$moveSelection(this.moveCursorLineEnd)},this.selectFileEnd=function(){this.$moveSelection(this.moveCursorFileEnd)},this.selectFileStart=function(){this.$moveSelection(this.moveCursorFileStart)},this.selectWordRight=function(){this.$moveSelection(this.moveCursorWordRight)},this.selectWordLeft=function(){this.$moveSelection(this.moveCursorWordLeft)},this.getWordRange=function(e,t){if(void 0===t){var n=e||this.lead;e=n.row,t=n.column}return this.session.getWordRange(e,t)},this.selectWord=function(){this.setSelectionRange(this.getWordRange())},this.selectAWord=function(){var e=this.getCursor(),t=this.session.getAWordRange(e.row,e.column);this.setSelectionRange(t)},this.getLineRange=function(e,t){var n,i="number"==typeof e?e:this.lead.row,r=this.session.getFoldLine(i);return r?(i=r.start.row,n=r.end.row):n=i,!0===t?new o(i,0,n,this.session.getLine(n).length):new o(i,0,n+1,0)},this.selectLine=function(){this.setSelectionRange(this.getLineRange())},this.moveCursorUp=function(){this.moveCursorBy(-1,0)},this.moveCursorDown=function(){this.moveCursorBy(1,0)},this.wouldMoveIntoSoftTab=function(e,t,n){var i=e.column,r=e.column+t;return n<0&&(i=e.column-t,r=e.column),this.session.isTabStop(e)&&this.doc.getLine(e.row).slice(i,r).split(" ").length-1==t},this.moveCursorLeft=function(){var e,t=this.lead.getPosition();if(e=this.session.getFoldAt(t.row,t.column,-1))this.moveCursorTo(e.start.row,e.start.column);else if(0===t.column)t.row>0&&this.moveCursorTo(t.row-1,this.doc.getLine(t.row-1).length);else{var n=this.session.getTabSize();this.wouldMoveIntoSoftTab(t,n,-1)&&!this.session.getNavigateWithinSoftTabs()?this.moveCursorBy(0,-n):this.moveCursorBy(0,-1)}},this.moveCursorRight=function(){var e,t=this.lead.getPosition();if(e=this.session.getFoldAt(t.row,t.column,1))this.moveCursorTo(e.end.row,e.end.column);else if(this.lead.column==this.doc.getLine(this.lead.row).length)this.lead.row0&&(t.column=i)}}this.moveCursorTo(t.row,t.column)},this.moveCursorFileEnd=function(){var e=this.doc.getLength()-1,t=this.doc.getLine(e).length;this.moveCursorTo(e,t)},this.moveCursorFileStart=function(){this.moveCursorTo(0,0)},this.moveCursorLongWordRight=function(){var e=this.lead.row,t=this.lead.column,n=this.doc.getLine(e),i=n.substring(t);this.session.nonTokenRe.lastIndex=0,this.session.tokenRe.lastIndex=0;var r=this.session.getFoldAt(e,t,1);if(r)this.moveCursorTo(r.end.row,r.end.column);else{if(this.session.nonTokenRe.exec(i)&&(t+=this.session.nonTokenRe.lastIndex,this.session.nonTokenRe.lastIndex=0,i=n.substring(t)),t>=n.length)return this.moveCursorTo(e,n.length),this.moveCursorRight(),void(e0&&this.moveCursorWordLeft());this.session.tokenRe.exec(s)&&(n-=this.session.tokenRe.lastIndex,this.session.tokenRe.lastIndex=0),this.moveCursorTo(t,n)}},this.$shortWordEndIndex=function(e){var t,n=0,i=/\s/,r=this.session.tokenRe;if(r.lastIndex=0,this.session.tokenRe.exec(e))n=this.session.tokenRe.lastIndex;else{for(;(t=e[n])&&i.test(t);)n++;if(n<1)for(r.lastIndex=0;(t=e[n])&&!r.test(t);)if(r.lastIndex=0,n++,i.test(t)){if(n>2){n--;break}for(;(t=e[n])&&i.test(t);)n++;if(n>2)break}}return r.lastIndex=0,n},this.moveCursorShortWordRight=function(){var e=this.lead.row,t=this.lead.column,n=this.doc.getLine(e),i=n.substring(t),r=this.session.getFoldAt(e,t,1);if(r)return this.moveCursorTo(r.end.row,r.end.column);if(t==n.length){var s=this.doc.getLength();do{e++,i=this.doc.getLine(e)}while(e0&&/^\s*$/.test(i));n=i.length,/\s+$/.test(i)||(i="")}var s=r.stringReverse(i),o=this.$shortWordEndIndex(s);return this.moveCursorTo(t,n-o)},this.moveCursorWordRight=function(){this.session.$selectLongWords?this.moveCursorLongWordRight():this.moveCursorShortWordRight()},this.moveCursorWordLeft=function(){this.session.$selectLongWords?this.moveCursorLongWordLeft():this.moveCursorShortWordLeft()},this.moveCursorBy=function(e,t){var n,i=this.session.documentToScreenPosition(this.lead.row,this.lead.column);0===t&&(0!==e&&(this.session.$bidiHandler.isBidiRow(i.row,this.lead.row)?(n=this.session.$bidiHandler.getPosLeft(i.column),i.column=Math.round(n/this.session.$bidiHandler.charWidths[0])):n=i.column*this.session.$bidiHandler.charWidths[0]),this.$desiredColumn?i.column=this.$desiredColumn:this.$desiredColumn=i.column);var r=this.session.screenToDocumentPosition(i.row+e,i.column,n);0!==e&&0===t&&r.row===this.lead.row&&r.column===this.lead.column&&this.session.lineWidgets&&this.session.lineWidgets[r.row]&&(r.row>0||e>0)&&r.row++,this.moveCursorTo(r.row,r.column+t,0===t)},this.moveCursorToPosition=function(e){this.moveCursorTo(e.row,e.column)},this.moveCursorTo=function(e,t,n){var i=this.session.getFoldAt(e,t,1);i&&(e=i.start.row,t=i.start.column),this.$keepDesiredColumnOnChange=!0;var r=this.session.getLine(e);/[\uDC00-\uDFFF]/.test(r.charAt(t))&&r.charAt(t-1)&&(this.lead.row==e&&this.lead.column==t+1?t-=1:t+=1),this.lead.setPosition(e,t),this.$keepDesiredColumnOnChange=!1,n||(this.$desiredColumn=null)},this.moveCursorToScreen=function(e,t,n){var i=this.session.screenToDocumentPosition(e,t);this.moveCursorTo(i.row,i.column,n)},this.detach=function(){this.lead.detach(),this.anchor.detach(),this.session=this.doc=null},this.fromOrientedRange=function(e){this.setSelectionRange(e,e.cursor==e.start),this.$desiredColumn=e.desiredColumn||this.$desiredColumn},this.toOrientedRange=function(e){var t=this.getRange();return e?(e.start.column=t.start.column,e.start.row=t.start.row,e.end.column=t.end.column,e.end.row=t.end.row):e=t,e.cursor=this.isBackwards()?e.start:e.end,e.desiredColumn=this.$desiredColumn,e},this.getRangeOfMovements=function(e){var t=this.getCursor();try{e(this);var n=this.getCursor();return o.fromPoints(t,n)}catch(e){return o.fromPoints(t,t)}finally{this.moveCursorToPosition(t)}},this.toJSON=function(){if(this.rangeCount)var e=this.ranges.map((function(e){var t=e.clone();return t.isBackwards=e.cursor==e.start,t}));else(e=this.getRange()).isBackwards=this.isBackwards();return e},this.fromJSON=function(e){if(null==e.start){if(this.rangeList&&e.length>1){this.toSingleRange(e[0]);for(var t=e.length;t--;){var n=o.fromPoints(e[t].start,e[t].end);e[t].isBackwards&&(n.cursor=n.start),this.addRange(n,!0)}return}e=e[0]}this.rangeList&&this.toSingleRange(e),this.setSelectionRange(e,e.isBackwards)},this.isEqual=function(e){if((e.length||this.rangeCount)&&e.length!=this.rangeCount)return!1;if(!e.length||!this.ranges)return this.getRange().isEqual(e);for(var t=this.ranges.length;t--;)if(!this.ranges[t].isEqual(e[t]))return!1;return!0}}).call(a.prototype),t.Selection=a})),ace.define("ace/tokenizer",["require","exports","module","ace/config"],(function(e,t,n){"use strict";var i=e("./config"),r=2e3,s=function(e){for(var t in this.states=e,this.regExps={},this.matchMappings={},this.states){for(var n=this.states[t],i=[],r=0,s=this.matchMappings[t]={defaultToken:"text"},o="g",a=[],l=0;l1?this.$applyToken:c.token),h>1&&(/\\\d/.test(c.regex)?u=c.regex.replace(/\\([0-9]+)/g,(function(e,t){return"\\"+(parseInt(t,10)+r+1)})):(h=1,u=this.removeCapturingGroups(c.regex)),c.splitRegex||"string"==typeof c.token||a.push(c)),s[r]=l,r+=h,i.push(u),c.onMatch||(c.onMatch=null)}}i.length||(s[0]=0,i.push("$")),a.forEach((function(e){e.splitRegex=this.createSplitterRegexp(e.regex,o)}),this),this.regExps[t]=new RegExp("("+i.join(")|(")+")|($)",o)}};(function(){this.$setMaxTokenCount=function(e){r=0|e},this.$applyToken=function(e){var t=this.splitRegex.exec(e).slice(1),n=this.token.apply(this,t);if("string"==typeof n)return[{type:n,value:e}];for(var i=[],r=0,s=n.length;ru){var E=e.substring(u,f-g.length);d.type==m?d.value+=E:(d.type&&c.push(d),d={type:m,value:E})}for(var v=0;vr){for(h>2*e.length&&this.reportError("infinite loop with in ace tokenizer",{startState:t,line:e});u1&&n[0]!==i&&n.unshift("#tmp",i),{tokens:c,state:n.length?n:i}},this.reportError=i.reportError}).call(s.prototype),t.Tokenizer=s})),ace.define("ace/mode/text_highlight_rules",["require","exports","module","ace/lib/lang"],(function(e,t,n){"use strict";var i=e("../lib/lang"),r=function(){this.$rules={start:[{token:"empty_line",regex:"^$"},{defaultToken:"text"}]}};(function(){this.addRules=function(e,t){if(t)for(var n in e){for(var i=e[n],r=0;r=this.$rowTokens.length;){if(this.$row+=1,e||(e=this.$session.getLength()),this.$row>=e)return this.$row=e-1,null;this.$rowTokens=this.$session.getTokens(this.$row),this.$tokenIndex=0}return this.$rowTokens[this.$tokenIndex]},this.getCurrentToken=function(){return this.$rowTokens[this.$tokenIndex]},this.getCurrentTokenRow=function(){return this.$row},this.getCurrentTokenColumn=function(){var e=this.$rowTokens,t=this.$tokenIndex,n=e[t].start;if(void 0!==n)return n;for(n=0;t>0;)n+=e[t-=1].value.length;return n},this.getCurrentTokenPosition=function(){return{row:this.$row,column:this.getCurrentTokenColumn()}},this.getCurrentTokenRange=function(){var e=this.$rowTokens[this.$tokenIndex],t=this.getCurrentTokenColumn();return new i(this.$row,t,this.$row,t+e.value.length)}}).call(r.prototype),t.TokenIterator=r})),ace.define("ace/mode/behaviour/cstyle",["require","exports","module","ace/lib/oop","ace/mode/behaviour","ace/token_iterator","ace/lib/lang"],(function(e,t,n){"use strict";var i,r=e("../../lib/oop"),s=e("../behaviour").Behaviour,o=e("../../token_iterator").TokenIterator,a=e("../../lib/lang"),l=["text","paren.rparen","rparen","paren","punctuation.operator"],c=["text","paren.rparen","rparen","paren","punctuation.operator","comment"],u={},h={'"':'"',"'":"'"},d=function(e){var t=-1;if(e.multiSelect&&(t=e.selection.index,u.rangeCount!=e.multiSelect.rangeCount&&(u={rangeCount:e.multiSelect.rangeCount})),u[t])return i=u[t];i=u[t]={autoInsertedBrackets:0,autoInsertedRow:-1,autoInsertedLineEnd:"",maybeInsertedBrackets:0,maybeInsertedRow:-1,maybeInsertedLineStart:"",maybeInsertedLineEnd:""}},m=function(e,t,n,i){var r=e.end.row-e.start.row;return{text:n+t+i,selection:[0,e.start.column+1,r,e.end.column+(r?0:1)]}},p=function(e){this.add("braces","insertion",(function(t,n,r,s,o){var l=r.getCursorPosition(),c=s.doc.getLine(l.row);if("{"==o){d(r);var u=r.getSelectionRange(),h=s.doc.getTextRange(u);if(""!==h&&"{"!==h&&r.getWrapBehavioursEnabled())return m(u,h,"{","}");if(p.isSaneInsertion(r,s))return/[\]\}\)]/.test(c[l.column])||r.inMultiSelectMode||e&&e.braces?(p.recordAutoInsert(r,s,"}"),{text:"{}",selection:[1,1]}):(p.recordMaybeInsert(r,s,"{"),{text:"{",selection:[1,1]})}else if("}"==o){if(d(r),"}"==c.substring(l.column,l.column+1)&&null!==s.$findOpeningBracket("}",{column:l.column+1,row:l.row})&&p.isAutoInsertedClosing(l,c,o))return p.popAutoInsertedClosing(),{text:"",selection:[1,1]}}else{if("\n"==o||"\r\n"==o){d(r);var g="";if(p.isMaybeInsertedClosing(l,c)&&(g=a.stringRepeat("}",i.maybeInsertedBrackets),p.clearMaybeInsertedClosing()),"}"===c.substring(l.column,l.column+1)){var f=s.findMatchingBracket({row:l.row,column:l.column+1},"}");if(!f)return null;var E=this.$getIndent(s.getLine(f.row))}else{if(!g)return void p.clearMaybeInsertedClosing();E=this.$getIndent(c)}var v=E+s.getTabString();return{text:"\n"+v+"\n"+E+g,selection:[1,v.length,1,v.length]}}p.clearMaybeInsertedClosing()}})),this.add("braces","deletion",(function(e,t,n,r,s){var o=r.doc.getTextRange(s);if(!s.isMultiLine()&&"{"==o){if(d(n),"}"==r.doc.getLine(s.start.row).substring(s.end.column,s.end.column+1))return s.end.column++,s;i.maybeInsertedBrackets--}})),this.add("parens","insertion",(function(e,t,n,i,r){if("("==r){d(n);var s=n.getSelectionRange(),o=i.doc.getTextRange(s);if(""!==o&&n.getWrapBehavioursEnabled())return m(s,o,"(",")");if(p.isSaneInsertion(n,i))return p.recordAutoInsert(n,i,")"),{text:"()",selection:[1,1]}}else if(")"==r){d(n);var a=n.getCursorPosition(),l=i.doc.getLine(a.row);if(")"==l.substring(a.column,a.column+1)&&null!==i.$findOpeningBracket(")",{column:a.column+1,row:a.row})&&p.isAutoInsertedClosing(a,l,r))return p.popAutoInsertedClosing(),{text:"",selection:[1,1]}}})),this.add("parens","deletion",(function(e,t,n,i,r){var s=i.doc.getTextRange(r);if(!r.isMultiLine()&&"("==s&&(d(n),")"==i.doc.getLine(r.start.row).substring(r.start.column+1,r.start.column+2)))return r.end.column++,r})),this.add("brackets","insertion",(function(e,t,n,i,r){if("["==r){d(n);var s=n.getSelectionRange(),o=i.doc.getTextRange(s);if(""!==o&&n.getWrapBehavioursEnabled())return m(s,o,"[","]");if(p.isSaneInsertion(n,i))return p.recordAutoInsert(n,i,"]"),{text:"[]",selection:[1,1]}}else if("]"==r){d(n);var a=n.getCursorPosition(),l=i.doc.getLine(a.row);if("]"==l.substring(a.column,a.column+1)&&null!==i.$findOpeningBracket("]",{column:a.column+1,row:a.row})&&p.isAutoInsertedClosing(a,l,r))return p.popAutoInsertedClosing(),{text:"",selection:[1,1]}}})),this.add("brackets","deletion",(function(e,t,n,i,r){var s=i.doc.getTextRange(r);if(!r.isMultiLine()&&"["==s&&(d(n),"]"==i.doc.getLine(r.start.row).substring(r.start.column+1,r.start.column+2)))return r.end.column++,r})),this.add("string_dquotes","insertion",(function(e,t,n,i,r){var s=i.$mode.$quotes||h;if(1==r.length&&s[r]){if(this.lineCommentStart&&-1!=this.lineCommentStart.indexOf(r))return;d(n);var o=r,a=n.getSelectionRange(),l=i.doc.getTextRange(a);if(!(""===l||1==l.length&&s[l])&&n.getWrapBehavioursEnabled())return m(a,l,o,o);if(!l){var c=n.getCursorPosition(),u=i.doc.getLine(c.row),p=u.substring(c.column-1,c.column),g=u.substring(c.column,c.column+1),f=i.getTokenAt(c.row,c.column),E=i.getTokenAt(c.row,c.column+1);if("\\"==p&&f&&/escape/.test(f.type))return null;var v,_=f&&/string|escape/.test(f.type),C=!E||/string|escape/.test(E.type);if(g==o)(v=_!==C)&&/string\.end/.test(E.type)&&(v=!1);else{if(_&&!C)return null;if(_&&C)return null;var A=i.$mode.tokenRe;A.lastIndex=0;var R=A.test(p);A.lastIndex=0;var S=A.test(p);if(R||S)return null;if(g&&!/[\s;,.})\]\\]/.test(g))return null;var T=u[c.column-2];if(p==o&&(T==o||A.test(T)))return null;v=!0}return{text:v?o+o:"",selection:[1,1]}}}})),this.add("string_dquotes","deletion",(function(e,t,n,i,r){var s=i.$mode.$quotes||h,o=i.doc.getTextRange(r);if(!r.isMultiLine()&&s.hasOwnProperty(o)&&(d(n),i.doc.getLine(r.start.row).substring(r.start.column+1,r.start.column+2)==o))return r.end.column++,r}))};p.isSaneInsertion=function(e,t){var n=e.getCursorPosition(),i=new o(t,n.row,n.column);if(!this.$matchTokenType(i.getCurrentToken()||"text",l)){if(/[)}\]]/.test(e.session.getLine(n.row)[n.column]))return!0;var r=new o(t,n.row,n.column+1);if(!this.$matchTokenType(r.getCurrentToken()||"text",l))return!1}return i.stepForward(),i.getCurrentTokenRow()!==n.row||this.$matchTokenType(i.getCurrentToken()||"text",c)},p.$matchTokenType=function(e,t){return t.indexOf(e.type||e)>-1},p.recordAutoInsert=function(e,t,n){var r=e.getCursorPosition(),s=t.doc.getLine(r.row);this.isAutoInsertedClosing(r,s,i.autoInsertedLineEnd[0])||(i.autoInsertedBrackets=0),i.autoInsertedRow=r.row,i.autoInsertedLineEnd=n+s.substr(r.column),i.autoInsertedBrackets++},p.recordMaybeInsert=function(e,t,n){var r=e.getCursorPosition(),s=t.doc.getLine(r.row);this.isMaybeInsertedClosing(r,s)||(i.maybeInsertedBrackets=0),i.maybeInsertedRow=r.row,i.maybeInsertedLineStart=s.substr(0,r.column)+n,i.maybeInsertedLineEnd=s.substr(r.column),i.maybeInsertedBrackets++},p.isAutoInsertedClosing=function(e,t,n){return i.autoInsertedBrackets>0&&e.row===i.autoInsertedRow&&n===i.autoInsertedLineEnd[0]&&t.substr(e.column)===i.autoInsertedLineEnd},p.isMaybeInsertedClosing=function(e,t){return i.maybeInsertedBrackets>0&&e.row===i.maybeInsertedRow&&t.substr(e.column)===i.maybeInsertedLineEnd&&t.substr(0,e.column)==i.maybeInsertedLineStart},p.popAutoInsertedClosing=function(){i.autoInsertedLineEnd=i.autoInsertedLineEnd.substr(1),i.autoInsertedBrackets--},p.clearMaybeInsertedClosing=function(){i&&(i.maybeInsertedBrackets=0,i.maybeInsertedRow=-1)},r.inherits(p,s),t.CstyleBehaviour=p})),ace.define("ace/unicode",["require","exports","module"],(function(e,t,n){"use strict";for(var i=[48,9,8,25,5,0,2,25,48,0,11,0,5,0,6,22,2,30,2,457,5,11,15,4,8,0,2,0,18,116,2,1,3,3,9,0,2,2,2,0,2,19,2,82,2,138,2,4,3,155,12,37,3,0,8,38,10,44,2,0,2,1,2,1,2,0,9,26,6,2,30,10,7,61,2,9,5,101,2,7,3,9,2,18,3,0,17,58,3,100,15,53,5,0,6,45,211,57,3,18,2,5,3,11,3,9,2,1,7,6,2,2,2,7,3,1,3,21,2,6,2,0,4,3,3,8,3,1,3,3,9,0,5,1,2,4,3,11,16,2,2,5,5,1,3,21,2,6,2,1,2,1,2,1,3,0,2,4,5,1,3,2,4,0,8,3,2,0,8,15,12,2,2,8,2,2,2,21,2,6,2,1,2,4,3,9,2,2,2,2,3,0,16,3,3,9,18,2,2,7,3,1,3,21,2,6,2,1,2,4,3,8,3,1,3,2,9,1,5,1,2,4,3,9,2,0,17,1,2,5,4,2,2,3,4,1,2,0,2,1,4,1,4,2,4,11,5,4,4,2,2,3,3,0,7,0,15,9,18,2,2,7,2,2,2,22,2,9,2,4,4,7,2,2,2,3,8,1,2,1,7,3,3,9,19,1,2,7,2,2,2,22,2,9,2,4,3,8,2,2,2,3,8,1,8,0,2,3,3,9,19,1,2,7,2,2,2,22,2,15,4,7,2,2,2,3,10,0,9,3,3,9,11,5,3,1,2,17,4,23,2,8,2,0,3,6,4,0,5,5,2,0,2,7,19,1,14,57,6,14,2,9,40,1,2,0,3,1,2,0,3,0,7,3,2,6,2,2,2,0,2,0,3,1,2,12,2,2,3,4,2,0,2,5,3,9,3,1,35,0,24,1,7,9,12,0,2,0,2,0,5,9,2,35,5,19,2,5,5,7,2,35,10,0,58,73,7,77,3,37,11,42,2,0,4,328,2,3,3,6,2,0,2,3,3,40,2,3,3,32,2,3,3,6,2,0,2,3,3,14,2,56,2,3,3,66,5,0,33,15,17,84,13,619,3,16,2,25,6,74,22,12,2,6,12,20,12,19,13,12,2,2,2,1,13,51,3,29,4,0,5,1,3,9,34,2,3,9,7,87,9,42,6,69,11,28,4,11,5,11,11,39,3,4,12,43,5,25,7,10,38,27,5,62,2,28,3,10,7,9,14,0,89,75,5,9,18,8,13,42,4,11,71,55,9,9,4,48,83,2,2,30,14,230,23,280,3,5,3,37,3,5,3,7,2,0,2,0,2,0,2,30,3,52,2,6,2,0,4,2,2,6,4,3,3,5,5,12,6,2,2,6,67,1,20,0,29,0,14,0,17,4,60,12,5,0,4,11,18,0,5,0,3,9,2,0,4,4,7,0,2,0,2,0,2,3,2,10,3,3,6,4,5,0,53,1,2684,46,2,46,2,132,7,6,15,37,11,53,10,0,17,22,10,6,2,6,2,6,2,6,2,6,2,6,2,6,2,6,2,31,48,0,470,1,36,5,2,4,6,1,5,85,3,1,3,2,2,89,2,3,6,40,4,93,18,23,57,15,513,6581,75,20939,53,1164,68,45,3,268,4,27,21,31,3,13,13,1,2,24,9,69,11,1,38,8,3,102,3,1,111,44,25,51,13,68,12,9,7,23,4,0,5,45,3,35,13,28,4,64,15,10,39,54,10,13,3,9,7,22,4,1,5,66,25,2,227,42,2,1,3,9,7,11171,13,22,5,48,8453,301,3,61,3,105,39,6,13,4,6,11,2,12,2,4,2,0,2,1,2,1,2,107,34,362,19,63,3,53,41,11,5,15,17,6,13,1,25,2,33,4,2,134,20,9,8,25,5,0,2,25,12,88,4,5,3,5,3,5,3,2],r=0,s=[],o=0;o2?i%c!=c-1:i%c==0})}else{if(!this.blockComment)return!1;var m=this.blockComment.start,p=this.blockComment.end,g=new RegExp("^(\\s*)(?:"+l.escapeRegExp(m)+")"),f=new RegExp("(?:"+l.escapeRegExp(p)+")\\s*$"),E=function(e,t){_(e,t)||s&&!/\S/.test(e)||(r.insertInLine({row:t,column:e.length},p),r.insertInLine({row:t,column:a},m))},v=function(e,t){var n;(n=e.match(f))&&r.removeInLine(t,e.length-n[0].length,e.length),(n=e.match(g))&&r.removeInLine(t,n[1].length,n[0].length)},_=function(e,n){if(g.test(e))return!0;for(var i=t.getTokens(n),r=0;re.length&&(A=e.length)})),a==1/0&&(a=A,s=!1,o=!1),u&&a%c!=0&&(a=Math.floor(a/c)*c),C(o?v:E)},this.toggleBlockComment=function(e,t,n,i){var r=this.blockComment;if(r){!r.start&&r[0]&&(r=r[0]);var s,o,a=(g=new c(t,i.row,i.column)).getCurrentToken(),l=(t.selection,t.selection.toOrientedRange());if(a&&/comment/.test(a.type)){for(var h,d;a&&/comment/.test(a.type);){if(-1!=(f=a.value.indexOf(r.start))){var m=g.getCurrentTokenRow(),p=g.getCurrentTokenColumn()+f;h=new u(m,p,m,p+r.start.length);break}a=g.stepBackward()}var g;for(a=(g=new c(t,i.row,i.column)).getCurrentToken();a&&/comment/.test(a.type);){var f;if(-1!=(f=a.value.indexOf(r.end))){m=g.getCurrentTokenRow(),p=g.getCurrentTokenColumn()+f,d=new u(m,p,m,p+r.end.length);break}a=g.stepForward()}d&&t.remove(d),h&&(t.remove(h),s=h.start.row,o=-r.start.length)}else o=r.start.length,s=n.start.row,t.insert(n.end,r.end),t.insert(n.start,r.start);l.start.row==s&&(l.start.column+=o),l.end.row==s&&(l.end.column+=o),t.selection.fromOrientedRange(l)}},this.getNextLineIndent=function(e,t,n){return this.$getIndent(t)},this.checkOutdent=function(e,t,n){return!1},this.autoOutdent=function(e,t,n){},this.$getIndent=function(e){return e.match(/^\s*/)[0]},this.createWorker=function(e){return null},this.createModeDelegates=function(e){for(var t in this.$embeds=[],this.$modes={},e)if(e[t]){var n=e[t],r=n.prototype.$id,s=i.$modes[r];s||(i.$modes[r]=s=new n),i.$modes[t]||(i.$modes[t]=s),this.$embeds.push(t),this.$modes[t]=s}var o=["toggleBlockComment","toggleCommentLines","getNextLineIndent","checkOutdent","autoOutdent","transformAction","getCompletions"];for(t=0;tthis.row)){var n=function(t,n,i){var r="insert"==t.action,s=(r?1:-1)*(t.end.row-t.start.row),o=(r?1:-1)*(t.end.column-t.start.column),a=t.start,l=r?a:t.end;return e(n,a,i)?{row:n.row,column:n.column}:e(l,n,!i)?{row:n.row+s,column:n.column+(n.row==l.row?o:0)}:{row:a.row,column:a.column}}(t,{row:this.row,column:this.column},this.$insertRight);this.setPosition(n.row,n.column,!0)}},this.setPosition=function(e,t,n){var i;if(i=n?{row:e,column:t}:this.$clipPositionToDocument(e,t),this.row!=i.row||this.column!=i.column){var r={row:this.row,column:this.column};this.row=i.row,this.column=i.column,this._signal("change",{old:r,value:i})}},this.detach=function(){this.document.removeEventListener("change",this.$onChange)},this.attach=function(e){this.document=e||this.document,this.document.on("change",this.$onChange)},this.$clipPositionToDocument=function(e,t){var n={};return e>=this.document.getLength()?(n.row=Math.max(0,this.document.getLength()-1),n.column=this.document.getLine(n.row).length):e<0?(n.row=0,n.column=0):(n.row=e,n.column=Math.min(this.document.getLine(n.row).length,Math.max(0,t))),t<0&&(n.column=0),n}}).call(s.prototype)})),ace.define("ace/document",["require","exports","module","ace/lib/oop","ace/apply_delta","ace/lib/event_emitter","ace/range","ace/anchor"],(function(e,t,n){"use strict";var i=e("./lib/oop"),r=e("./apply_delta").applyDelta,s=e("./lib/event_emitter").EventEmitter,o=e("./range").Range,a=e("./anchor").Anchor,l=function(e){this.$lines=[""],0===e.length?this.$lines=[""]:Array.isArray(e)?this.insertMergedLines({row:0,column:0},e):this.insert({row:0,column:0},e)};(function(){i.implement(this,s),this.setValue=function(e){var t=this.getLength()-1;this.remove(new o(0,0,t,this.getLine(t).length)),this.insert({row:0,column:0},e)},this.getValue=function(){return this.getAllLines().join(this.getNewLineCharacter())},this.createAnchor=function(e,t){return new a(this,e,t)},0==="aaa".split(/a/).length?this.$split=function(e){return e.replace(/\r\n|\r/g,"\n").split("\n")}:this.$split=function(e){return e.split(/\r\n|\r|\n/)},this.$detectNewLine=function(e){var t=e.match(/^.*?(\r\n|\r|\n)/m);this.$autoNewLine=t?t[1]:"\n",this._signal("changeNewLineMode")},this.getNewLineCharacter=function(){switch(this.$newLineMode){case"windows":return"\r\n";case"unix":return"\n";default:return this.$autoNewLine||"\n"}},this.$autoNewLine="",this.$newLineMode="auto",this.setNewLineMode=function(e){this.$newLineMode!==e&&(this.$newLineMode=e,this._signal("changeNewLineMode"))},this.getNewLineMode=function(){return this.$newLineMode},this.isNewLine=function(e){return"\r\n"==e||"\r"==e||"\n"==e},this.getLine=function(e){return this.$lines[e]||""},this.getLines=function(e,t){return this.$lines.slice(e,t+1)},this.getAllLines=function(){return this.getLines(0,this.getLength())},this.getLength=function(){return this.$lines.length},this.getTextRange=function(e){return this.getLinesForRange(e).join(this.getNewLineCharacter())},this.getLinesForRange=function(e){var t;if(e.start.row===e.end.row)t=[this.getLine(e.start.row).substring(e.start.column,e.end.column)];else{(t=this.getLines(e.start.row,e.end.row))[0]=(t[0]||"").substring(e.start.column);var n=t.length-1;e.end.row-e.start.row==n&&(t[n]=t[n].substring(0,e.end.column))}return t},this.insertLines=function(e,t){return console.warn("Use of document.insertLines is deprecated. Use the insertFullLines method instead."),this.insertFullLines(e,t)},this.removeLines=function(e,t){return console.warn("Use of document.removeLines is deprecated. Use the removeFullLines method instead."),this.removeFullLines(e,t)},this.insertNewLine=function(e){return console.warn("Use of document.insertNewLine is deprecated. Use insertMergedLines(position, ['', '']) instead."),this.insertMergedLines(e,["",""])},this.insert=function(e,t){return this.getLength()<=1&&this.$detectNewLine(t),this.insertMergedLines(e,this.$split(t))},this.insertInLine=function(e,t){var n=this.clippedPos(e.row,e.column),i=this.pos(e.row,e.column+t.length);return this.applyDelta({start:n,end:i,action:"insert",lines:[t]},!0),this.clonePos(i)},this.clippedPos=function(e,t){var n=this.getLength();void 0===e?e=n:e<0?e=0:e>=n&&(e=n-1,t=void 0);var i=this.getLine(e);return null==t&&(t=i.length),{row:e,column:t=Math.min(Math.max(t,0),i.length)}},this.clonePos=function(e){return{row:e.row,column:e.column}},this.pos=function(e,t){return{row:e,column:t}},this.$clipPosition=function(e){var t=this.getLength();return e.row>=t?(e.row=Math.max(0,t-1),e.column=this.getLine(t-1).length):(e.row=Math.max(0,e.row),e.column=Math.min(Math.max(e.column,0),this.getLine(e.row).length)),e},this.insertFullLines=function(e,t){var n=0;(e=Math.min(Math.max(e,0),this.getLength()))0,i=t=0&&this.applyDelta({start:this.pos(e,this.getLine(e).length),end:this.pos(e+1,0),action:"remove",lines:["",""]})},this.replace=function(e,t){return e instanceof o||(e=o.fromPoints(e.start,e.end)),0===t.length&&e.isEmpty()?e.start:t==this.getTextRange(e)?e.end:(this.remove(e),t?this.insert(e.start,t):e.start)},this.applyDeltas=function(e){for(var t=0;t=0;t--)this.revertDelta(e[t])},this.applyDelta=function(e,t){var n="insert"==e.action;(n?e.lines.length<=1&&!e.lines[0]:!o.comparePoints(e.start,e.end))||(n&&e.lines.length>2e4?this.$splitAndapplyLargeDelta(e,2e4):(r(this.$lines,e,t),this._signal("change",e)))},this.$splitAndapplyLargeDelta=function(e,t){for(var n=e.lines,i=n.length-t+1,r=e.start.row,s=e.start.column,o=0,a=0;o20){n.running=setTimeout(n.$worker,20);break}}n.currentLine=t,-1==i&&(i=t),s<=i&&n.fireUpdateEvent(s,i)}}};(function(){i.implement(this,r),this.setTokenizer=function(e){this.tokenizer=e,this.lines=[],this.states=[],this.start(0)},this.setDocument=function(e){this.doc=e,this.lines=[],this.states=[],this.stop()},this.fireUpdateEvent=function(e,t){var n={first:e,last:t};this._signal("update",{data:n})},this.start=function(e){this.currentLine=Math.min(e||0,this.currentLine,this.doc.getLength()),this.lines.splice(this.currentLine,this.lines.length),this.states.splice(this.currentLine,this.states.length),this.stop(),this.running=setTimeout(this.$worker,700)},this.scheduleStart=function(){this.running||(this.running=setTimeout(this.$worker,700))},this.$updateOnChange=function(e){var t=e.start.row,n=e.end.row-t;if(0===n)this.lines[t]=null;else if("remove"==e.action)this.lines.splice(t,n+1,null),this.states.splice(t,n+1,null);else{var i=Array(n+1);i.unshift(t,1),this.lines.splice.apply(this.lines,i),this.states.splice.apply(this.states,i)}this.currentLine=Math.min(t,this.currentLine,this.doc.getLength()),this.stop()},this.stop=function(){this.running&&clearTimeout(this.running),this.running=!1},this.getTokens=function(e){return this.lines[e]||this.$tokenizeRow(e)},this.getState=function(e){return this.currentLine==e&&this.$tokenizeRow(e),this.states[e]||"start"},this.$tokenizeRow=function(e){var t=this.doc.getLine(e),n=this.states[e-1],i=this.tokenizer.getLineTokens(t,n,e);return this.states[e]+""!=i.state+""?(this.states[e]=i.state,this.lines[e+1]=null,this.currentLine>e+1&&(this.currentLine=e+1)):this.currentLine==e&&(this.currentLine=e+1),this.lines[e]=i.tokens}}).call(s.prototype),t.BackgroundTokenizer=s})),ace.define("ace/search_highlight",["require","exports","module","ace/lib/lang","ace/lib/oop","ace/range"],(function(e,t,n){"use strict";var i=e("./lib/lang"),r=(e("./lib/oop"),e("./range").Range),s=function(e,t,n){this.setRegexp(e),this.clazz=t,this.type=n||"text"};(function(){this.MAX_RANGES=500,this.setRegexp=function(e){this.regExp+""!=e+""&&(this.regExp=e,this.cache=[])},this.update=function(e,t,n,s){if(this.regExp)for(var o=s.firstRow,a=s.lastRow,l=o;l<=a;l++){var c=this.cache[l];null==c&&((c=i.getMatchOffsets(n.getLine(l),this.regExp)).length>this.MAX_RANGES&&(c=c.slice(0,this.MAX_RANGES)),c=c.map((function(e){return new r(l,e.offset,l,e.offset+e.length)})),this.cache[l]=c.length?c:"");for(var u=c.length;u--;)t.drawSingleLineMarker(e,c[u].toScreenRange(n),this.clazz,s)}}}).call(s.prototype),t.SearchHighlight=s})),ace.define("ace/edit_session/fold_line",["require","exports","module","ace/range"],(function(e,t,n){"use strict";var i=e("../range").Range;function r(e,t){this.foldData=e,Array.isArray(t)?this.folds=t:t=this.folds=[t];var n=t[t.length-1];this.range=new i(t[0].start.row,t[0].start.column,n.end.row,n.end.column),this.start=this.range.start,this.end=this.range.end,this.folds.forEach((function(e){e.setFoldLine(this)}),this)}(function(){this.shiftRow=function(e){this.start.row+=e,this.end.row+=e,this.folds.forEach((function(t){t.start.row+=e,t.end.row+=e}))},this.addFold=function(e){if(e.sameRow){if(e.start.rowthis.endRow)throw new Error("Can't add a fold to this FoldLine as it has no connection");this.folds.push(e),this.folds.sort((function(e,t){return-e.range.compareEnd(t.start.row,t.start.column)})),this.range.compareEnd(e.start.row,e.start.column)>0?(this.end.row=e.end.row,this.end.column=e.end.column):this.range.compareStart(e.end.row,e.end.column)<0&&(this.start.row=e.start.row,this.start.column=e.start.column)}else if(e.start.row==this.end.row)this.folds.push(e),this.end.row=e.end.row,this.end.column=e.end.column;else{if(e.end.row!=this.start.row)throw new Error("Trying to add fold to FoldRow that doesn't have a matching row");this.folds.unshift(e),this.start.row=e.start.row,this.start.column=e.start.column}e.foldLine=this},this.containsRow=function(e){return e>=this.start.row&&e<=this.end.row},this.walk=function(e,t,n){var i,r,s=0,o=this.folds,a=!0;null==t&&(t=this.end.row,n=this.end.column);for(var l=0;l0)){var l=i(e,o.start);return 0===a?t&&0!==l?-s-2:s:l>0||0===l&&!t?s:-s-1}}return-s-1},this.add=function(e){var t=!e.isEmpty(),n=this.pointIndex(e.start,t);n<0&&(n=-n-1);var i=this.pointIndex(e.end,t,n);return i<0?i=-i-1:i++,this.ranges.splice(n,i-n,e)},this.addList=function(e){for(var t=[],n=e.length;n--;)t.push.apply(t,this.add(e[n]));return t},this.substractPoint=function(e){var t=this.pointIndex(e);if(t>=0)return this.ranges.splice(t,1)},this.merge=function(){for(var e,t=[],n=this.ranges,r=(n=n.sort((function(e,t){return i(e.start,t.start)})))[0],s=1;s=0},this.containsPoint=function(e){return this.pointIndex(e)>=0},this.rangeAtPoint=function(e){var t=this.pointIndex(e);if(t>=0)return this.ranges[t]},this.clipRows=function(e,t){var n=this.ranges;if(n[0].start.row>t||n[n.length-1].start.row=i);o++);if("insert"==e.action){for(var l=r-i,c=-t.column+n.column;oi);o++)if(u.start.row==i&&u.start.column>=t.column&&(u.start.column==t.column&&this.$bias<=0||(u.start.column+=c,u.start.row+=l)),u.end.row==i&&u.end.column>=t.column){if(u.end.column==t.column&&this.$bias<0)continue;u.end.column==t.column&&c>0&&ou.start.column&&u.end.column==s[o+1].start.column&&(u.end.column-=c),u.end.column+=c,u.end.row+=l}}else for(l=i-r,c=t.column-n.column;or);o++)u.end.rowt.column)&&(u.end.column=t.column,u.end.row=t.row):(u.end.column+=c,u.end.row+=l):u.end.row>r&&(u.end.row+=l),u.start.rowt.column)&&(u.start.column=t.column,u.start.row=t.row):(u.start.column+=c,u.start.row+=l):u.start.row>r&&(u.start.row+=l);if(0!=l&&o=e)return r;if(r.end.row>e)return null}return null},this.getNextFoldLine=function(e,t){var n=this.$foldData,i=0;for(t&&(i=n.indexOf(t)),-1==i&&(i=0);i=e)return r}return null},this.getFoldedRowCount=function(e,t){for(var n=this.$foldData,i=t-e+1,r=0;r=t){a=e?i-=t-a:i=0);break}o>=e&&(i-=a>=e?o-a:o-e+1)}return i},this.$addFoldLine=function(e){return this.$foldData.push(e),this.$foldData.sort((function(e,t){return e.start.row-t.start.row})),e},this.addFold=function(e,t){var n,i=this.$foldData,o=!1;e instanceof s?n=e:(n=new s(t,e)).collapseChildren=t.collapseChildren,this.$clipRangeToDocument(n.range);var a=n.start.row,l=n.start.column,c=n.end.row,u=n.end.column,h=this.getFoldAt(a,l,1),d=this.getFoldAt(c,u,-1);if(h&&d==h)return h.addSubFold(n);h&&!h.range.isStart(a,l)&&this.removeFold(h),d&&!d.range.isEnd(c,u)&&this.removeFold(d);var m=this.getFoldsInRange(n.range);m.length>0&&(this.removeFolds(m),m.forEach((function(e){n.addSubFold(e)})));for(var p=0;p0&&this.foldAll(e.start.row+1,e.end.row,e.collapseChildren-1),e.subFolds=[]},this.expandFolds=function(e){e.forEach((function(e){this.expandFold(e)}),this)},this.unfold=function(e,t){var n,r;if(null==e?(n=new i(0,0,this.getLength(),0),t=!0):n="number"==typeof e?new i(e,0,e,this.getLine(e).length):"row"in e?i.fromPoints(e,e):e,r=this.getFoldsInRangeList(n),t)this.removeFolds(r);else for(var s=r;s.length;)this.expandFolds(s),s=this.getFoldsInRangeList(n);if(r.length)return r},this.isRowFolded=function(e,t){return!!this.getFoldLine(e,t)},this.getRowFoldEnd=function(e,t){var n=this.getFoldLine(e,t);return n?n.end.row:e},this.getRowFoldStart=function(e,t){var n=this.getFoldLine(e,t);return n?n.start.row:e},this.getFoldDisplayLine=function(e,t,n,i,r){null==i&&(i=e.start.row),null==r&&(r=0),null==t&&(t=e.end.row),null==n&&(n=this.getLine(t).length);var s=this.doc,o="";return e.walk((function(e,t,n,a){if(!(tu)break}while(s&&l.test(s.type));s=r.stepBackward()}else s=r.getCurrentToken();return c.end.row=r.getCurrentTokenRow(),c.end.column=r.getCurrentTokenColumn()+s.value.length-2,c}},this.foldAll=function(e,t,n){null==n&&(n=1e5);var i=this.foldWidgets;if(i){t=t||this.getLength();for(var r=e=e||0;r=e){r=s.end.row;try{var o=this.addFold("...",s);o&&(o.collapseChildren=n)}catch(e){}}}}},this.$foldStyles={manual:1,markbegin:1,markbeginend:1},this.$foldStyle="markbegin",this.setFoldStyle=function(e){if(!this.$foldStyles[e])throw new Error("invalid fold style: "+e+"["+Object.keys(this.$foldStyles).join(", ")+"]");if(this.$foldStyle!=e){this.$foldStyle=e,"manual"==e&&this.unfold();var t=this.$foldMode;this.$setFolding(null),this.$setFolding(t)}},this.$setFolding=function(e){this.$foldMode!=e&&(this.$foldMode=e,this.off("change",this.$updateFoldWidgets),this.off("tokenizerUpdate",this.$tokenizerUpdateFoldWidgets),this._signal("changeAnnotation"),e&&"manual"!=this.$foldStyle?(this.foldWidgets=[],this.getFoldWidget=e.getFoldWidget.bind(e,this,this.$foldStyle),this.getFoldWidgetRange=e.getFoldWidgetRange.bind(e,this,this.$foldStyle),this.$updateFoldWidgets=this.updateFoldWidgets.bind(this),this.$tokenizerUpdateFoldWidgets=this.tokenizerUpdateFoldWidgets.bind(this),this.on("change",this.$updateFoldWidgets),this.on("tokenizerUpdate",this.$tokenizerUpdateFoldWidgets)):this.foldWidgets=null)},this.getParentFoldRangeData=function(e,t){var n=this.foldWidgets;if(!n||t&&n[e])return{};for(var i,r=e-1;r>=0;){var s=n[r];if(null==s&&(s=n[r]=this.getFoldWidget(r)),"start"==s){var o=this.getFoldWidgetRange(r);if(i||(i=o),o&&o.end.row>=e)break}r--}return{range:-1!==r&&o,firstRange:i}},this.onFoldWidgetClick=function(e,t){var n={children:(t=t.domEvent).shiftKey,all:t.ctrlKey||t.metaKey,siblings:t.altKey};if(!this.$toggleFoldWidget(e,n)){var i=t.target||t.srcElement;i&&/ace_fold-widget/.test(i.className)&&(i.className+=" ace_invalid")}},this.$toggleFoldWidget=function(e,t){if(this.getFoldWidget){var n=this.getFoldWidget(e),i=this.getLine(e),r="end"===n?-1:1,s=this.getFoldAt(e,-1===r?0:i.length,r);if(s)return t.children||t.all?this.removeFold(s):this.expandFold(s),s;var o=this.getFoldWidgetRange(e,!0);if(o&&!o.isMultiLine()&&(s=this.getFoldAt(o.start.row,o.start.column,1))&&o.isEqual(s.range))return this.removeFold(s),s;if(t.siblings){var a=this.getParentFoldRangeData(e);if(a.range)var l=a.range.start.row+1,c=a.range.end.row;this.foldAll(l,c,t.all?1e4:0)}else t.children?(c=o?o.end.row:this.getLength(),this.foldAll(e+1,c,t.all?1e4:0)):o&&(t.all&&(o.collapseChildren=1e4),this.addFold("...",o));return o}},this.toggleFoldWidget=function(e){var t=this.selection.getCursor().row;t=this.getRowFoldStart(t);var n=this.$toggleFoldWidget(t,{});if(!n){var i=this.getParentFoldRangeData(t,!0);if(n=i.range||i.firstRange){t=n.start.row;var r=this.getFoldAt(t,this.getLine(t).length,1);r?this.removeFold(r):this.addFold("...",n)}}},this.updateFoldWidgets=function(e){var t=e.start.row,n=e.end.row-t;if(0===n)this.foldWidgets[t]=null;else if("remove"==e.action)this.foldWidgets.splice(t,n+1,null);else{var i=Array(n+1);i.unshift(t,1),this.foldWidgets.splice.apply(this.foldWidgets,i)}},this.tokenizerUpdateFoldWidgets=function(e){var t=e.data;t.first!=t.last&&this.foldWidgets.length>t.first&&this.foldWidgets.splice(t.first,this.foldWidgets.length)}}})),ace.define("ace/edit_session/bracket_match",["require","exports","module","ace/token_iterator","ace/range"],(function(e,t,n){"use strict";var i=e("../token_iterator").TokenIterator,r=e("../range").Range;t.BracketMatch=function(){this.findMatchingBracket=function(e,t){if(0==e.column)return null;var n=t||this.getLine(e.row).charAt(e.column-1);if(""==n)return null;var i=n.match(/([\(\[\{])|([\)\]\}])/);return i?i[1]?this.$findClosingBracket(i[1],e):this.$findOpeningBracket(i[2],e):null},this.getBracketRange=function(e){var t,n=this.getLine(e.row),i=!0,s=n.charAt(e.column-1),o=s&&s.match(/([\(\[\{])|([\)\]\}])/);if(o||(s=n.charAt(e.column),e={row:e.row,column:e.column+1},o=s&&s.match(/([\(\[\{])|([\)\]\}])/),i=!1),!o)return null;if(o[1]){if(!(a=this.$findClosingBracket(o[1],e)))return null;t=r.fromPoints(e,a),i||(t.end.column++,t.start.column--),t.cursor=t.end}else{var a;if(!(a=this.$findOpeningBracket(o[2],e)))return null;t=r.fromPoints(a,e),i||(t.start.column++,t.end.column--),t.cursor=t.start}return t},this.$brackets={")":"(","(":")","]":"[","[":"]","{":"}","}":"{","<":">",">":"<"},this.$findOpeningBracket=function(e,t,n){var r=this.$brackets[e],s=1,o=new i(this,t.row,t.column),a=o.getCurrentToken();if(a||(a=o.stepForward()),a){n||(n=new RegExp("(\\.?"+a.type.replace(".","\\.").replace("rparen",".paren").replace(/\b(?:end)\b/,"(?:start|begin|end)")+")+"));for(var l=t.column-o.getCurrentTokenColumn()-2,c=a.value;;){for(;l>=0;){var u=c.charAt(l);if(u==r){if(0==(s-=1))return{row:o.getCurrentTokenRow(),column:l+o.getCurrentTokenColumn()}}else u==e&&(s+=1);l-=1}do{a=o.stepBackward()}while(a&&!n.test(a.type));if(null==a)break;l=(c=a.value).length-1}return null}},this.$findClosingBracket=function(e,t,n){var r=this.$brackets[e],s=1,o=new i(this,t.row,t.column),a=o.getCurrentToken();if(a||(a=o.stepForward()),a){n||(n=new RegExp("(\\.?"+a.type.replace(".","\\.").replace("lparen",".paren").replace(/\b(?:start|begin)\b/,"(?:start|begin|end)")+")+"));for(var l=t.column-o.getCurrentTokenColumn();;){for(var c=a.value,u=c.length;ln&&(this.$docRowCache.splice(n,t),this.$screenRowCache.splice(n,t))},this.$getRowCacheIndex=function(e,t){for(var n=0,i=e.length-1;n<=i;){var r=n+i>>1,s=e[r];if(t>s)n=r+1;else{if(!(t=t);s++);return(n=i[s])?(n.index=s,n.start=r-n.value.length,n):null},this.setUndoManager=function(e){if(this.$undoManager=e,this.$informUndoManager&&this.$informUndoManager.cancel(),e){var t=this;e.addSession(this),this.$syncInformUndoManager=function(){t.$informUndoManager.cancel(),t.mergeUndoDeltas=!1},this.$informUndoManager=r.delayedCall(this.$syncInformUndoManager)}else this.$syncInformUndoManager=function(){}},this.markUndoGroup=function(){this.$syncInformUndoManager&&this.$syncInformUndoManager()},this.$defaultUndoManager={undo:function(){},redo:function(){},hasUndo:function(){},hasRedo:function(){},reset:function(){},add:function(){},addSelection:function(){},startNewGroup:function(){},addSession:function(){}},this.getUndoManager=function(){return this.$undoManager||this.$defaultUndoManager},this.getTabString=function(){return this.getUseSoftTabs()?r.stringRepeat(" ",this.getTabSize()):"\t"},this.setUseSoftTabs=function(e){this.setOption("useSoftTabs",e)},this.getUseSoftTabs=function(){return this.$useSoftTabs&&!this.$mode.$indentWithTabs},this.setTabSize=function(e){this.setOption("tabSize",e)},this.getTabSize=function(){return this.$tabSize},this.isTabStop=function(e){return this.$useSoftTabs&&e.column%this.$tabSize==0},this.setNavigateWithinSoftTabs=function(e){this.setOption("navigateWithinSoftTabs",e)},this.getNavigateWithinSoftTabs=function(){return this.$navigateWithinSoftTabs},this.$overwrite=!1,this.setOverwrite=function(e){this.setOption("overwrite",e)},this.getOverwrite=function(){return this.$overwrite},this.toggleOverwrite=function(){this.setOverwrite(!this.$overwrite)},this.addGutterDecoration=function(e,t){this.$decorations[e]||(this.$decorations[e]=""),this.$decorations[e]+=" "+t,this._signal("changeBreakpoint",{})},this.removeGutterDecoration=function(e,t){this.$decorations[e]=(this.$decorations[e]||"").replace(" "+t,""),this._signal("changeBreakpoint",{})},this.getBreakpoints=function(){return this.$breakpoints},this.setBreakpoints=function(e){this.$breakpoints=[];for(var t=0;t0&&(i=!!n.charAt(t-1).match(this.tokenRe)),i||(i=!!n.charAt(t).match(this.tokenRe)),i)var r=this.tokenRe;else r=/^\s+$/.test(n.slice(t-1,t+1))?/\s/:this.nonTokenRe;var s=t;if(s>0){do{s--}while(s>=0&&n.charAt(s).match(r));s++}for(var o=t;oe&&(e=t.screenWidth)})),this.lineWidgetWidth=e},this.$computeWidth=function(e){if(this.$modified||e){if(this.$modified=!1,this.$useWrapMode)return this.screenWidth=this.$wrapLimit;for(var t=this.doc.getAllLines(),n=this.$rowLengthCache,i=0,r=0,s=this.$foldData[r],o=s?s.start.row:1/0,a=t.length,l=0;lo){if((l=s.end.row+1)>=a)break;o=(s=this.$foldData[r++])?s.start.row:1/0}null==n[l]&&(n[l]=this.$getStringScreenWidth(t[l])[0]),n[l]>i&&(i=n[l])}this.screenWidth=i}},this.getLine=function(e){return this.doc.getLine(e)},this.getLines=function(e,t){return this.doc.getLines(e,t)},this.getLength=function(){return this.doc.getLength()},this.getTextRange=function(e){return this.doc.getTextRange(e||this.selection.getRange())},this.insert=function(e,t){return this.doc.insert(e,t)},this.remove=function(e){return this.doc.remove(e)},this.removeFullLines=function(e,t){return this.doc.removeFullLines(e,t)},this.undoChanges=function(e,t){if(e.length){this.$fromUndo=!0;for(var n=e.length-1;-1!=n;n--){var i=e[n];"insert"==i.action||"remove"==i.action?this.doc.revertDelta(i):i.folds&&this.addFolds(i.folds)}!t&&this.$undoSelect&&(e.selectionBefore?this.selection.fromJSON(e.selectionBefore):this.selection.setRange(this.$getUndoSelection(e,!0))),this.$fromUndo=!1}},this.redoChanges=function(e,t){if(e.length){this.$fromUndo=!0;for(var n=0;ne.end.column&&(s.start.column+=c),s.end.row==e.end.row&&s.end.column>e.end.column&&(s.end.column+=c)),o&&s.start.row>=e.end.row&&(s.start.row+=o,s.end.row+=o)}if(s.end=this.insert(s.start,i),r.length){var a=e.start,l=s.start,c=(o=l.row-a.row,l.column-a.column);this.addFolds(r.map((function(e){return(e=e.clone()).start.row==a.row&&(e.start.column+=c),e.end.row==a.row&&(e.end.column+=c),e.start.row+=o,e.end.row+=o,e})))}return s},this.indentRows=function(e,t,n){n=n.replace(/\t/g,this.getTabString());for(var i=e;i<=t;i++)this.doc.insertInLine({row:i,column:0},n)},this.outdentRows=function(e){for(var t=e.collapseRows(),n=new u(0,0,0,0),i=this.getTabSize(),r=t.start.row;r<=t.end.row;++r){var s=this.getLine(r);n.start.row=r,n.end.row=r;for(var o=0;o0){var r;if((r=this.getRowFoldEnd(t+n))>this.doc.getLength()-1)return 0;i=r-t}else e=this.$clipRowToDocument(e),i=(t=this.$clipRowToDocument(t))-e+1;var s=new u(e,0,t,Number.MAX_VALUE),o=this.getFoldsInRange(s).map((function(e){return(e=e.clone()).start.row+=i,e.end.row+=i,e})),a=0==n?this.doc.getLines(e,t):this.doc.removeFullLines(e,t);return this.doc.insertFullLines(e+i,a),o.length&&this.addFolds(o),i},this.moveLinesUp=function(e,t){return this.$moveLines(e,t,-1)},this.moveLinesDown=function(e,t){return this.$moveLines(e,t,1)},this.duplicateLines=function(e,t){return this.$moveLines(e,t,0)},this.$clipRowToDocument=function(e){return Math.max(0,Math.min(e,this.doc.getLength()-1))},this.$clipColumnToRow=function(e,t){return t<0?0:Math.min(this.doc.getLine(e).length,t)},this.$clipPositionToDocument=function(e,t){if(t=Math.max(0,t),e<0)e=0,t=0;else{var n=this.doc.getLength();e>=n?(e=n-1,t=this.doc.getLine(n-1).length):t=Math.min(this.doc.getLine(e).length,t)}return{row:e,column:t}},this.$clipRangeToDocument=function(e){e.start.row<0?(e.start.row=0,e.start.column=0):e.start.column=this.$clipColumnToRow(e.start.row,e.start.column);var t=this.doc.getLength()-1;return e.end.row>t?(e.end.row=t,e.end.column=this.doc.getLine(t).length):e.end.column=this.$clipColumnToRow(e.end.row,e.end.column),e},this.$wrapLimit=80,this.$useWrapMode=!1,this.$wrapLimitRange={min:null,max:null},this.setUseWrapMode=function(e){if(e!=this.$useWrapMode){if(this.$useWrapMode=e,this.$modified=!0,this.$resetRowCache(0),e){var t=this.getLength();this.$wrapData=Array(t),this.$updateWrapData(0,t-1)}this._signal("changeWrapMode")}},this.getUseWrapMode=function(){return this.$useWrapMode},this.setWrapLimitRange=function(e,t){this.$wrapLimitRange.min===e&&this.$wrapLimitRange.max===t||(this.$wrapLimitRange={min:e,max:t},this.$modified=!0,this.$bidiHandler.markAsDirty(),this.$useWrapMode&&this._signal("changeWrapMode"))},this.adjustWrapLimit=function(e,t){var n=this.$wrapLimitRange;n.max<0&&(n={min:t,max:t});var i=this.$constrainWrapLimit(e,n.min,n.max);return i!=this.$wrapLimit&&i>1&&(this.$wrapLimit=i,this.$modified=!0,this.$useWrapMode&&(this.$updateWrapData(0,this.getLength()-1),this.$resetRowCache(0),this._signal("changeWrapLimit")),!0)},this.$constrainWrapLimit=function(e,t,n){return t&&(e=Math.max(t,e)),n&&(e=Math.min(n,e)),e},this.getWrapLimit=function(){return this.$wrapLimit},this.setWrapLimit=function(e){this.setWrapLimitRange(e,e)},this.getWrapLimitRange=function(){return{min:this.$wrapLimitRange.min,max:this.$wrapLimitRange.max}},this.$updateInternalDataOnChange=function(e){var t=this.$useWrapMode,n=e.action,i=e.start,r=e.end,s=i.row,o=r.row,a=o-s,l=null;if(this.$updating=!0,0!=a)if("remove"===n){this[t?"$wrapData":"$rowLengthCache"].splice(s,a);var c=this.$foldData;l=this.getFoldsInRange(e),this.removeFolds(l);var u=0;if(g=this.getFoldLine(r.row)){g.addRemoveChars(r.row,r.column,i.column-r.column),g.shiftRow(-a);var h=this.getFoldLine(s);h&&h!==g&&(h.merge(g),g=h),u=c.indexOf(g)+1}for(;u=r.row&&g.shiftRow(-a);o=s}else{var d=Array(a);d.unshift(s,0);var m=t?this.$wrapData:this.$rowLengthCache;if(m.splice.apply(m,d),c=this.$foldData,u=0,g=this.getFoldLine(s)){var p=g.range.compareInside(i.row,i.column);0==p?(g=g.split(i.row,i.column))&&(g.shiftRow(a),g.addRemoveChars(o,0,r.column-i.column)):-1==p&&(g.addRemoveChars(s,0,r.column-i.column),g.shiftRow(a)),u=c.indexOf(g)+1}for(;u=s&&g.shiftRow(a)}}else a=Math.abs(e.start.column-e.end.column),"remove"===n&&(l=this.getFoldsInRange(e),this.removeFolds(l),a=-a),(g=this.getFoldLine(s))&&g.addRemoveChars(s,i.column,a);return t&&this.$wrapData.length!=this.doc.getLength()&&console.error("doc.getLength() and $wrapData.length have to be the same!"),this.$updating=!1,t?this.$updateWrapData(s,o):this.$updateRowLengthCache(s,o),l},this.$updateRowLengthCache=function(e,t,n){this.$rowLengthCache[e]=null,this.$rowLengthCache[t]=null},this.$updateWrapData=function(n,i){var r,s,o=this.doc.getAllLines(),a=this.getTabSize(),l=this.$wrapData,c=this.$wrapLimit,u=n;for(i=Math.min(i,o.length-1);u<=i;)(s=this.getFoldLine(u,s))?(r=[],s.walk(function(n,i,s,a){var l;if(null!=n){(l=this.$getDisplayTokens(n,r.length))[0]=e;for(var c=1;c=4352&&e<=4447||e>=4515&&e<=4519||e>=4602&&e<=4607||e>=9001&&e<=9002||e>=11904&&e<=11929||e>=11931&&e<=12019||e>=12032&&e<=12245||e>=12272&&e<=12283||e>=12288&&e<=12350||e>=12353&&e<=12438||e>=12441&&e<=12543||e>=12549&&e<=12589||e>=12593&&e<=12686||e>=12688&&e<=12730||e>=12736&&e<=12771||e>=12784&&e<=12830||e>=12832&&e<=12871||e>=12880&&e<=13054||e>=13056&&e<=19903||e>=19968&&e<=42124||e>=42128&&e<=42182||e>=43360&&e<=43388||e>=44032&&e<=55203||e>=55216&&e<=55238||e>=55243&&e<=55291||e>=63744&&e<=64255||e>=65040&&e<=65049||e>=65072&&e<=65106||e>=65108&&e<=65126||e>=65128&&e<=65131||e>=65281&&e<=65376||e>=65504&&e<=65510)}this.$computeWrapSplits=function(n,i,r){if(0==n.length)return[];var s=[],o=n.length,a=0,l=0,c=this.$wrapAsCode,u=this.$indentedSoftWrap,h=i<=Math.max(2*r,8)||!1===u?0:Math.floor(i/2);function d(e){for(var t=e-a,i=a;ii-m;){var p=a+i-m;if(n[p-1]>=10&&n[p]>=10)d(p);else if(n[p]!=e&&n[p]!=t){for(var g=Math.max(p-(i-(i>>2)),a-1);p>g&&n[p]g&&n[p]g&&9==n[p];)p--}else for(;p>g&&n[p]<10;)p--;p>g?d(++p):(2==n[p=a+i]&&p--,d(p-m))}else{for(;p!=a-1&&n[p]!=e;p--);if(p>a){d(p);continue}for(p=a+i;p39&&o<48||o>57&&o<64?r.push(9):o>=4352&&n(o)?r.push(1,2):r.push(1)}return r},this.$getStringScreenWidth=function(e,t,i){if(0==t)return[0,0];var r,s;for(null==t&&(t=1/0),i=i||0,s=0;s=4352&&n(r)?i+=2:i+=1,!(i>t));s++);return[i,s]},this.lineWidgets=null,this.getRowLength=function(e){if(this.lineWidgets)var t=this.lineWidgets[e]&&this.lineWidgets[e].rowCount||0;else t=0;return this.$useWrapMode&&this.$wrapData[e]?this.$wrapData[e].length+1+t:1+t},this.getRowLineCount=function(e){return this.$useWrapMode&&this.$wrapData[e]?this.$wrapData[e].length+1:1},this.getRowWrapIndent=function(e){if(this.$useWrapMode){var t=this.screenToDocumentPosition(e,Number.MAX_VALUE),n=this.$wrapData[t.row];return n.length&&n[0]=0){a=c[u],s=this.$docRowCache[u];var d=e>c[h-1]}else d=!h;for(var m=this.getLength()-1,p=this.getNextFoldLine(s),g=p?p.start.row:1/0;a<=e&&!(a+(l=this.getRowLength(s))>e||s>=m);)a+=l,++s>g&&(s=p.end.row+1,g=(p=this.getNextFoldLine(s,p))?p.start.row:1/0),d&&(this.$docRowCache.push(s),this.$screenRowCache.push(a));if(p&&p.start.row<=s)i=this.getFoldDisplayLine(p),s=p.start.row;else{if(a+l<=e||s>m)return{row:m,column:this.getLine(m).length};i=this.getLine(s),p=null}var f=0,E=Math.floor(e-a);if(this.$useWrapMode){var v=this.$wrapData[s];v&&(r=v[E],E>0&&v.length&&(f=v.indent,o=v[E-1]||v[v.length-1],i=i.substring(o)))}return void 0!==n&&this.$bidiHandler.isBidiRow(a+E,s,E)&&(t=this.$bidiHandler.offsetToCol(n)),o+=this.$getStringScreenWidth(i,t-f)[1],this.$useWrapMode&&o>=r&&(o=r-1),p?p.idxToPosition(o):{row:s,column:o}},this.documentToScreenPosition=function(e,t){if(void 0===t)var n=this.$clipPositionToDocument(e.row,e.column);else n=this.$clipPositionToDocument(e,t);e=n.row,t=n.column;var i,r=0,s=null;(i=this.getFoldAt(e,t,1))&&(e=i.start.row,t=i.start.column);var o,a=0,l=this.$docRowCache,c=this.$getRowCacheIndex(l,e),u=l.length;if(u&&c>=0){a=l[c],r=this.$screenRowCache[c];var h=e>l[u-1]}else h=!u;for(var d=this.getNextFoldLine(a),m=d?d.start.row:1/0;a=m){if((o=d.end.row+1)>e)break;m=(d=this.getNextFoldLine(o,d))?d.start.row:1/0}else o=a+1;r+=this.getRowLength(a),a=o,h&&(this.$docRowCache.push(a),this.$screenRowCache.push(r))}var p="";d&&a>=m?(p=this.getFoldDisplayLine(d,e,t),s=d.start.row):(p=this.getLine(e).substring(0,t),s=e);var g=0;if(this.$useWrapMode){var f=this.$wrapData[s];if(f){for(var E=0;p.length>=f[E];)r++,E++;p=p.substring(f[E-1]||0,p.length),g=E>0?f.indent:0}}return{row:r,column:g+this.$getStringScreenWidth(p)[0]}},this.documentToScreenColumn=function(e,t){return this.documentToScreenPosition(e,t).column},this.documentToScreenRow=function(e,t){return this.documentToScreenPosition(e,t).row},this.getScreenLength=function(){var e=0,t=null;if(this.$useWrapMode)for(var n=this.$wrapData.length,i=0,r=(a=0,(t=this.$foldData[a++])?t.start.row:1/0);ir&&(i=t.end.row+1,r=(t=this.$foldData[a++])?t.start.row:1/0)}else{e=this.getLength();for(var o=this.$foldData,a=0;an);s++);return[i,s]})},this.destroy=function(){this.bgTokenizer&&(this.bgTokenizer.setDocument(null),this.bgTokenizer=null),this.$stopWorker()},this.isFullWidth=n}.call(p.prototype),e("./edit_session/folding").Folding.call(p.prototype),e("./edit_session/bracket_match").BracketMatch.call(p.prototype),o.defineOptions(p.prototype,"session",{wrap:{set:function(e){if(e&&"off"!=e?"free"==e?e=!0:"printMargin"==e?e=-1:"string"==typeof e&&(e=parseInt(e,10)||!1):e=!1,this.$wrap!=e)if(this.$wrap=e,e){var t="number"==typeof e?e:null;this.setWrapLimitRange(t,t),this.setUseWrapMode(!0)}else this.setUseWrapMode(!1)},get:function(){return this.getUseWrapMode()?-1==this.$wrap?"printMargin":this.getWrapLimitRange().min?this.$wrap:"free":"off"},handlesSet:!0},wrapMethod:{set:function(e){(e="auto"==e?"text"!=this.$mode.type:"text"!=e)!=this.$wrapAsCode&&(this.$wrapAsCode=e,this.$useWrapMode&&(this.$useWrapMode=!1,this.setUseWrapMode(!0)))},initialValue:"auto"},indentedSoftWrap:{set:function(){this.$useWrapMode&&(this.$useWrapMode=!1,this.setUseWrapMode(!0))},initialValue:!0},firstLineNumber:{set:function(){this._signal("changeBreakpoint")},initialValue:1},useWorker:{set:function(e){this.$useWorker=e,this.$stopWorker(),e&&this.$startWorker()},initialValue:!0},useSoftTabs:{initialValue:!0},tabSize:{set:function(e){(e=parseInt(e))>0&&this.$tabSize!==e&&(this.$modified=!0,this.$rowLengthCache=[],this.$tabSize=e,this._signal("changeTabSize"))},initialValue:4,handlesSet:!0},navigateWithinSoftTabs:{initialValue:!1},foldStyle:{set:function(e){this.setFoldStyle(e)},handlesSet:!0},overwrite:{set:function(e){this._signal("changeOverwrite")},initialValue:!1},newLineMode:{set:function(e){this.doc.setNewLineMode(e)},get:function(){return this.doc.getNewLineMode()},handlesSet:!0},mode:{set:function(e){this.setMode(e)},get:function(){return this.$modeId},handlesSet:!0}}),t.EditSession=p})),ace.define("ace/search",["require","exports","module","ace/lib/lang","ace/lib/oop","ace/range"],(function(e,t,n){"use strict";var i=e("./lib/lang"),r=e("./lib/oop"),s=e("./range").Range,o=function(){this.$options={}};(function(){this.set=function(e){return r.mixin(this.$options,e),this},this.getOptions=function(){return i.copyObject(this.$options)},this.setOptions=function(e){this.$options=e},this.find=function(e){var t=this.$options,n=this.$matchIterator(e,t);if(!n)return!1;var i=null;return n.forEach((function(e,n,r,o){return i=new s(e,n,r,o),!(n==o&&t.start&&t.start.start&&0!=t.skipCurrent&&i.isEqual(t.start)&&(i=null,1))})),i},this.findAll=function(e){var t=this.$options;if(!t.needle)return[];this.$assembleRegExp(t);var n=t.range,r=n?e.getLines(n.start.row,n.end.row):e.doc.getAllLines(),o=[],a=t.re;if(t.$isMultiLine){var l,c=a.length,u=r.length-c;e:for(var h=a.offset||0;h<=u;h++){for(var d=0;dg||(o.push(l=new s(h,g,h+c-1,f)),c>2&&(h=h+c-2))}}else for(var E=0;EA&&o[d].end.row==n.end.row;)d--;for(o=o.slice(E,d+1),E=0,d=o.length;E=a;n--)if(h(n,Number.MAX_VALUE,e))return;if(0!=t.wrap)for(n=l,a=o.row;n>=a;n--)if(h(n,Number.MAX_VALUE,e))return}};else c=function(e){var n=o.row;if(!h(n,o.column,e)){for(n+=1;n<=l;n++)if(h(n,0,e))return;if(0!=t.wrap)for(n=a,l=o.row;n<=l;n++)if(h(n,0,e))return}};if(t.$isMultiLine)var u=n.length,h=function(t,r,s){var o=i?t-u+1:t;if(!(o<0)){var a=e.getLine(o),l=a.search(n[0]);if(!(!i&&lr))return!!s(o,l,o+u-1,h)||void 0}}};else h=i?function(t,i,r){var s,o=e.getLine(t),a=[],l=0;for(n.lastIndex=0;s=n.exec(o);){var c=s[0].length;if(l=s.index,!c){if(l>=o.length)break;n.lastIndex=l+=1}if(s.index+c>i)break;a.push(s.index,c)}for(var u=a.length-1;u>=0;u-=2){var h=a[u-1];if(r(t,h,t,h+(c=a[u])))return!0}}:function(t,i,r){var s,o,a=e.getLine(t);for(n.lastIndex=i;o=n.exec(a);){var l=o[0].length;if(r(t,s=o.index,t,s+l))return!0;if(!l&&(n.lastIndex=s+=1,s>=a.length))return!1}};return{forEach:c}}}).call(o.prototype),t.Search=o})),ace.define("ace/keyboard/hash_handler",["require","exports","module","ace/lib/keys","ace/lib/useragent"],(function(e,t,n){"use strict";var i=e("../lib/keys"),r=e("../lib/useragent"),s=i.KEY_MODS;function o(e,t){this.platform=t||(r.isMac?"mac":"win"),this.commands={},this.commandKeyBinding={},this.addCommands(e),this.$singleCommand=!0}function a(e,t){o.call(this,e,t),this.$singleCommand=!1}a.prototype=o.prototype,function(){function e(e){return"object"==typeof e&&e.bindKey&&e.bindKey.position||(e.isDefault?-100:0)}this.addCommand=function(e){this.commands[e.name]&&this.removeCommand(e),this.commands[e.name]=e,e.bindKey&&this._buildKeyHash(e)},this.removeCommand=function(e,t){var n=e&&("string"==typeof e?e:e.name);e=this.commands[n],t||delete this.commands[n];var i=this.commandKeyBinding;for(var r in i){var s=i[r];if(s==e)delete i[r];else if(Array.isArray(s)){var o=s.indexOf(e);-1!=o&&(s.splice(o,1),1==s.length&&(i[r]=s[0]))}}},this.bindKey=function(e,t,n){if("object"==typeof e&&e&&(null==n&&(n=e.position),e=e[this.platform]),e)return"function"==typeof t?this.addCommand({exec:t,bindKey:e,name:t.name||e}):void e.split("|").forEach((function(e){var i="";if(-1!=e.indexOf(" ")){var r=e.split(/\s+/);e=r.pop(),r.forEach((function(e){var t=this.parseKeys(e),n=s[t.hashId]+t.key;i+=(i?" ":"")+n,this._addCommandToBinding(i,"chainKeys")}),this),i+=" "}var o=this.parseKeys(e),a=s[o.hashId]+o.key;this._addCommandToBinding(i+a,t,n)}),this)},this._addCommandToBinding=function(t,n,i){var r,s=this.commandKeyBinding;if(n)if(!s[t]||this.$singleCommand)s[t]=n;else{Array.isArray(s[t])?-1!=(r=s[t].indexOf(n))&&s[t].splice(r,1):s[t]=[s[t]],"number"!=typeof i&&(i=e(n));var o=s[t];for(r=0;ri);r++);o.splice(r,0,n)}else delete s[t]},this.addCommands=function(e){e&&Object.keys(e).forEach((function(t){var n=e[t];if(n){if("string"==typeof n)return this.bindKey(n,t);"function"==typeof n&&(n={exec:n}),"object"==typeof n&&(n.name||(n.name=t),this.addCommand(n))}}),this)},this.removeCommands=function(e){Object.keys(e).forEach((function(t){this.removeCommand(e[t])}),this)},this.bindKeys=function(e){Object.keys(e).forEach((function(t){this.bindKey(t,e[t])}),this)},this._buildKeyHash=function(e){this.bindKey(e.bindKey,e)},this.parseKeys=function(e){var t=e.toLowerCase().split(/[\-\+]([\-\+])?/).filter((function(e){return e})),n=t.pop(),r=i[n];if(i.FUNCTION_KEYS[r])n=i.FUNCTION_KEYS[r].toLowerCase();else{if(!t.length)return{key:n,hashId:-1};if(1==t.length&&"shift"==t[0])return{key:n.toUpperCase(),hashId:-1}}for(var s=0,o=t.length;o--;){var a=i.KEY_MODS[t[o]];if(null==a)return"undefined"!=typeof console&&console.error("invalid modifier "+t[o]+" in "+e),!1;s|=a}return{key:n,hashId:s}},this.findKeyCommand=function(e,t){var n=s[e]+t;return this.commandKeyBinding[n]},this.handleKeyboard=function(e,t,n,i){if(!(i<0)){var r=s[t]+n,o=this.commandKeyBinding[r];return e.$keyChain&&(e.$keyChain+=" "+r,o=this.commandKeyBinding[e.$keyChain]||o),!o||"chainKeys"!=o&&"chainKeys"!=o[o.length-1]?(e.$keyChain&&(t&&4!=t||1!=n.length?(-1==t||i>0)&&(e.$keyChain=""):e.$keyChain=e.$keyChain.slice(0,-r.length-1)),{command:o}):(e.$keyChain=e.$keyChain||r,{command:"null"})}},this.getStatusText=function(e,t){return t.$keyChain||""}}.call(o.prototype),t.HashHandler=o,t.MultiHashHandler=a})),ace.define("ace/commands/command_manager",["require","exports","module","ace/lib/oop","ace/keyboard/hash_handler","ace/lib/event_emitter"],(function(e,t,n){"use strict";var i=e("../lib/oop"),r=e("../keyboard/hash_handler").MultiHashHandler,s=e("../lib/event_emitter").EventEmitter,o=function(e,t){r.call(this,t,e),this.byName=this.commands,this.setDefaultHandler("exec",(function(e){return e.command.exec(e.editor,e.args||{})}))};i.inherits(o,r),function(){i.implement(this,s),this.exec=function(e,t,n){if(Array.isArray(e)){for(var i=e.length;i--;)if(this.exec(e[i],t,n))return!0;return!1}if("string"==typeof e&&(e=this.commands[e]),!e)return!1;if(t&&t.$readOnly&&!e.readOnly)return!1;if(0!=this.$checkCommandState&&e.isAvailable&&!e.isAvailable(t))return!1;var r={editor:t,command:e,args:n};return r.returnValue=this._emit("exec",r),this._signal("afterExec",r),!1!==r.returnValue},this.toggleRecording=function(e){if(!this.$inReplay)return e&&e._emit("changeStatus"),this.recording?(this.macro.pop(),this.removeEventListener("exec",this.$addCommandToMacro),this.macro.length||(this.macro=this.oldMacro),this.recording=!1):(this.$addCommandToMacro||(this.$addCommandToMacro=function(e){this.macro.push([e.command,e.args])}.bind(this)),this.oldMacro=this.macro,this.macro=[],this.on("exec",this.$addCommandToMacro),this.recording=!0)},this.replay=function(e){if(!this.$inReplay&&this.macro){if(this.recording)return this.toggleRecording(e);try{this.$inReplay=!0,this.macro.forEach((function(t){"string"==typeof t?this.exec(t,e):this.exec(t[0],e,t[1])}),this)}finally{this.$inReplay=!1}}},this.trimMacro=function(e){return e.map((function(e){return"string"!=typeof e[0]&&(e[0]=e[0].name),e[1]||(e=e[0]),e}))}}.call(o.prototype),t.CommandManager=o})),ace.define("ace/commands/default_commands",["require","exports","module","ace/lib/lang","ace/config","ace/range"],(function(e,t,n){"use strict";var i=e("../lib/lang"),r=e("../config"),s=e("../range").Range;function o(e,t){return{win:e,mac:t}}t.commands=[{name:"showSettingsMenu",bindKey:o("Ctrl-,","Command-,"),exec:function(e){r.loadModule("ace/ext/settings_menu",(function(t){t.init(e),e.showSettingsMenu()}))},readOnly:!0},{name:"goToNextError",bindKey:o("Alt-E","F4"),exec:function(e){r.loadModule("./ext/error_marker",(function(t){t.showErrorMarker(e,1)}))},scrollIntoView:"animate",readOnly:!0},{name:"goToPreviousError",bindKey:o("Alt-Shift-E","Shift-F4"),exec:function(e){r.loadModule("./ext/error_marker",(function(t){t.showErrorMarker(e,-1)}))},scrollIntoView:"animate",readOnly:!0},{name:"selectall",description:"Select all",bindKey:o("Ctrl-A","Command-A"),exec:function(e){e.selectAll()},readOnly:!0},{name:"centerselection",description:"Center selection",bindKey:o(null,"Ctrl-L"),exec:function(e){e.centerSelection()},readOnly:!0},{name:"gotoline",description:"Go to line...",bindKey:o("Ctrl-L","Command-L"),exec:function(e,t){"number"!=typeof t||isNaN(t)||e.gotoLine(t),e.prompt({$type:"gotoLine"})},readOnly:!0},{name:"fold",bindKey:o("Alt-L|Ctrl-F1","Command-Alt-L|Command-F1"),exec:function(e){e.session.toggleFold(!1)},multiSelectAction:"forEach",scrollIntoView:"center",readOnly:!0},{name:"unfold",bindKey:o("Alt-Shift-L|Ctrl-Shift-F1","Command-Alt-Shift-L|Command-Shift-F1"),exec:function(e){e.session.toggleFold(!0)},multiSelectAction:"forEach",scrollIntoView:"center",readOnly:!0},{name:"toggleFoldWidget",bindKey:o("F2","F2"),exec:function(e){e.session.toggleFoldWidget()},multiSelectAction:"forEach",scrollIntoView:"center",readOnly:!0},{name:"toggleParentFoldWidget",bindKey:o("Alt-F2","Alt-F2"),exec:function(e){e.session.toggleFoldWidget(!0)},multiSelectAction:"forEach",scrollIntoView:"center",readOnly:!0},{name:"foldall",description:"Fold all",bindKey:o(null,"Ctrl-Command-Option-0"),exec:function(e){e.session.foldAll()},scrollIntoView:"center",readOnly:!0},{name:"foldOther",description:"Fold other",bindKey:o("Alt-0","Command-Option-0"),exec:function(e){e.session.foldAll(),e.session.unfold(e.selection.getAllRanges())},scrollIntoView:"center",readOnly:!0},{name:"unfoldall",description:"Unfold all",bindKey:o("Alt-Shift-0","Command-Option-Shift-0"),exec:function(e){e.session.unfold()},scrollIntoView:"center",readOnly:!0},{name:"findnext",description:"Find next",bindKey:o("Ctrl-K","Command-G"),exec:function(e){e.findNext()},multiSelectAction:"forEach",scrollIntoView:"center",readOnly:!0},{name:"findprevious",description:"Find previous",bindKey:o("Ctrl-Shift-K","Command-Shift-G"),exec:function(e){e.findPrevious()},multiSelectAction:"forEach",scrollIntoView:"center",readOnly:!0},{name:"selectOrFindNext",description:"Select or find next",bindKey:o("Alt-K","Ctrl-G"),exec:function(e){e.selection.isEmpty()?e.selection.selectWord():e.findNext()},readOnly:!0},{name:"selectOrFindPrevious",description:"Select or find previous",bindKey:o("Alt-Shift-K","Ctrl-Shift-G"),exec:function(e){e.selection.isEmpty()?e.selection.selectWord():e.findPrevious()},readOnly:!0},{name:"find",description:"Find",bindKey:o("Ctrl-F","Command-F"),exec:function(e){r.loadModule("ace/ext/searchbox",(function(t){t.Search(e)}))},readOnly:!0},{name:"overwrite",description:"Overwrite",bindKey:"Insert",exec:function(e){e.toggleOverwrite()},readOnly:!0},{name:"selecttostart",description:"Select to start",bindKey:o("Ctrl-Shift-Home","Command-Shift-Home|Command-Shift-Up"),exec:function(e){e.getSelection().selectFileStart()},multiSelectAction:"forEach",readOnly:!0,scrollIntoView:"animate",aceCommandGroup:"fileJump"},{name:"gotostart",description:"Go to start",bindKey:o("Ctrl-Home","Command-Home|Command-Up"),exec:function(e){e.navigateFileStart()},multiSelectAction:"forEach",readOnly:!0,scrollIntoView:"animate",aceCommandGroup:"fileJump"},{name:"selectup",description:"Select up",bindKey:o("Shift-Up","Shift-Up|Ctrl-Shift-P"),exec:function(e){e.getSelection().selectUp()},multiSelectAction:"forEach",scrollIntoView:"cursor",readOnly:!0},{name:"golineup",description:"Go line up",bindKey:o("Up","Up|Ctrl-P"),exec:function(e,t){e.navigateUp(t.times)},multiSelectAction:"forEach",scrollIntoView:"cursor",readOnly:!0},{name:"selecttoend",description:"Select to end",bindKey:o("Ctrl-Shift-End","Command-Shift-End|Command-Shift-Down"),exec:function(e){e.getSelection().selectFileEnd()},multiSelectAction:"forEach",readOnly:!0,scrollIntoView:"animate",aceCommandGroup:"fileJump"},{name:"gotoend",description:"Go to end",bindKey:o("Ctrl-End","Command-End|Command-Down"),exec:function(e){e.navigateFileEnd()},multiSelectAction:"forEach",readOnly:!0,scrollIntoView:"animate",aceCommandGroup:"fileJump"},{name:"selectdown",description:"Select down",bindKey:o("Shift-Down","Shift-Down|Ctrl-Shift-N"),exec:function(e){e.getSelection().selectDown()},multiSelectAction:"forEach",scrollIntoView:"cursor",readOnly:!0},{name:"golinedown",description:"Go line down",bindKey:o("Down","Down|Ctrl-N"),exec:function(e,t){e.navigateDown(t.times)},multiSelectAction:"forEach",scrollIntoView:"cursor",readOnly:!0},{name:"selectwordleft",description:"Select word left",bindKey:o("Ctrl-Shift-Left","Option-Shift-Left"),exec:function(e){e.getSelection().selectWordLeft()},multiSelectAction:"forEach",scrollIntoView:"cursor",readOnly:!0},{name:"gotowordleft",description:"Go to word left",bindKey:o("Ctrl-Left","Option-Left"),exec:function(e){e.navigateWordLeft()},multiSelectAction:"forEach",scrollIntoView:"cursor",readOnly:!0},{name:"selecttolinestart",description:"Select to line start",bindKey:o("Alt-Shift-Left","Command-Shift-Left|Ctrl-Shift-A"),exec:function(e){e.getSelection().selectLineStart()},multiSelectAction:"forEach",scrollIntoView:"cursor",readOnly:!0},{name:"gotolinestart",description:"Go to line start",bindKey:o("Alt-Left|Home","Command-Left|Home|Ctrl-A"),exec:function(e){e.navigateLineStart()},multiSelectAction:"forEach",scrollIntoView:"cursor",readOnly:!0},{name:"selectleft",description:"Select left",bindKey:o("Shift-Left","Shift-Left|Ctrl-Shift-B"),exec:function(e){e.getSelection().selectLeft()},multiSelectAction:"forEach",scrollIntoView:"cursor",readOnly:!0},{name:"gotoleft",description:"Go to left",bindKey:o("Left","Left|Ctrl-B"),exec:function(e,t){e.navigateLeft(t.times)},multiSelectAction:"forEach",scrollIntoView:"cursor",readOnly:!0},{name:"selectwordright",description:"Select word right",bindKey:o("Ctrl-Shift-Right","Option-Shift-Right"),exec:function(e){e.getSelection().selectWordRight()},multiSelectAction:"forEach",scrollIntoView:"cursor",readOnly:!0},{name:"gotowordright",description:"Go to word right",bindKey:o("Ctrl-Right","Option-Right"),exec:function(e){e.navigateWordRight()},multiSelectAction:"forEach",scrollIntoView:"cursor",readOnly:!0},{name:"selecttolineend",description:"Select to line end",bindKey:o("Alt-Shift-Right","Command-Shift-Right|Shift-End|Ctrl-Shift-E"),exec:function(e){e.getSelection().selectLineEnd()},multiSelectAction:"forEach",scrollIntoView:"cursor",readOnly:!0},{name:"gotolineend",description:"Go to line end",bindKey:o("Alt-Right|End","Command-Right|End|Ctrl-E"),exec:function(e){e.navigateLineEnd()},multiSelectAction:"forEach",scrollIntoView:"cursor",readOnly:!0},{name:"selectright",description:"Select right",bindKey:o("Shift-Right","Shift-Right"),exec:function(e){e.getSelection().selectRight()},multiSelectAction:"forEach",scrollIntoView:"cursor",readOnly:!0},{name:"gotoright",description:"Go to right",bindKey:o("Right","Right|Ctrl-F"),exec:function(e,t){e.navigateRight(t.times)},multiSelectAction:"forEach",scrollIntoView:"cursor",readOnly:!0},{name:"selectpagedown",description:"Select page down",bindKey:"Shift-PageDown",exec:function(e){e.selectPageDown()},readOnly:!0},{name:"pagedown",description:"Page down",bindKey:o(null,"Option-PageDown"),exec:function(e){e.scrollPageDown()},readOnly:!0},{name:"gotopagedown",description:"Go to page down",bindKey:o("PageDown","PageDown|Ctrl-V"),exec:function(e){e.gotoPageDown()},readOnly:!0},{name:"selectpageup",description:"Select page up",bindKey:"Shift-PageUp",exec:function(e){e.selectPageUp()},readOnly:!0},{name:"pageup",description:"Page up",bindKey:o(null,"Option-PageUp"),exec:function(e){e.scrollPageUp()},readOnly:!0},{name:"gotopageup",description:"Go to page up",bindKey:"PageUp",exec:function(e){e.gotoPageUp()},readOnly:!0},{name:"scrollup",description:"Scroll up",bindKey:o("Ctrl-Up",null),exec:function(e){e.renderer.scrollBy(0,-2*e.renderer.layerConfig.lineHeight)},readOnly:!0},{name:"scrolldown",description:"Scroll down",bindKey:o("Ctrl-Down",null),exec:function(e){e.renderer.scrollBy(0,2*e.renderer.layerConfig.lineHeight)},readOnly:!0},{name:"selectlinestart",description:"Select line start",bindKey:"Shift-Home",exec:function(e){e.getSelection().selectLineStart()},multiSelectAction:"forEach",scrollIntoView:"cursor",readOnly:!0},{name:"selectlineend",description:"Select line end",bindKey:"Shift-End",exec:function(e){e.getSelection().selectLineEnd()},multiSelectAction:"forEach",scrollIntoView:"cursor",readOnly:!0},{name:"togglerecording",description:"Toggle recording",bindKey:o("Ctrl-Alt-E","Command-Option-E"),exec:function(e){e.commands.toggleRecording(e)},readOnly:!0},{name:"replaymacro",description:"Replay macro",bindKey:o("Ctrl-Shift-E","Command-Shift-E"),exec:function(e){e.commands.replay(e)},readOnly:!0},{name:"jumptomatching",description:"Jump to matching",bindKey:o("Ctrl-\\|Ctrl-P","Command-\\"),exec:function(e){e.jumpToMatching()},multiSelectAction:"forEach",scrollIntoView:"animate",readOnly:!0},{name:"selecttomatching",description:"Select to matching",bindKey:o("Ctrl-Shift-\\|Ctrl-Shift-P","Command-Shift-\\"),exec:function(e){e.jumpToMatching(!0)},multiSelectAction:"forEach",scrollIntoView:"animate",readOnly:!0},{name:"expandToMatching",description:"Expand to matching",bindKey:o("Ctrl-Shift-M","Ctrl-Shift-M"),exec:function(e){e.jumpToMatching(!0,!0)},multiSelectAction:"forEach",scrollIntoView:"animate",readOnly:!0},{name:"passKeysToBrowser",description:"Pass keys to browser",bindKey:o(null,null),exec:function(){},passEvent:!0,readOnly:!0},{name:"copy",description:"Copy",exec:function(e){},readOnly:!0},{name:"cut",description:"Cut",exec:function(e){var t=e.$copyWithEmptySelection&&e.selection.isEmpty()?e.selection.getLineRange():e.selection.getRange();e._emit("cut",t),t.isEmpty()||e.session.remove(t),e.clearSelection()},scrollIntoView:"cursor",multiSelectAction:"forEach"},{name:"paste",description:"Paste",exec:function(e,t){e.$handlePaste(t)},scrollIntoView:"cursor"},{name:"removeline",description:"Remove line",bindKey:o("Ctrl-D","Command-D"),exec:function(e){e.removeLines()},scrollIntoView:"cursor",multiSelectAction:"forEachLine"},{name:"duplicateSelection",description:"Duplicate selection",bindKey:o("Ctrl-Shift-D","Command-Shift-D"),exec:function(e){e.duplicateSelection()},scrollIntoView:"cursor",multiSelectAction:"forEach"},{name:"sortlines",description:"Sort lines",bindKey:o("Ctrl-Alt-S","Command-Alt-S"),exec:function(e){e.sortLines()},scrollIntoView:"selection",multiSelectAction:"forEachLine"},{name:"togglecomment",description:"Toggle comment",bindKey:o("Ctrl-/","Command-/"),exec:function(e){e.toggleCommentLines()},multiSelectAction:"forEachLine",scrollIntoView:"selectionPart"},{name:"toggleBlockComment",description:"Toggle block comment",bindKey:o("Ctrl-Shift-/","Command-Shift-/"),exec:function(e){e.toggleBlockComment()},multiSelectAction:"forEach",scrollIntoView:"selectionPart"},{name:"modifyNumberUp",description:"Modify number up",bindKey:o("Ctrl-Shift-Up","Alt-Shift-Up"),exec:function(e){e.modifyNumber(1)},scrollIntoView:"cursor",multiSelectAction:"forEach"},{name:"modifyNumberDown",description:"Modify number down",bindKey:o("Ctrl-Shift-Down","Alt-Shift-Down"),exec:function(e){e.modifyNumber(-1)},scrollIntoView:"cursor",multiSelectAction:"forEach"},{name:"replace",description:"Replace",bindKey:o("Ctrl-H","Command-Option-F"),exec:function(e){r.loadModule("ace/ext/searchbox",(function(t){t.Search(e,!0)}))}},{name:"undo",description:"Undo",bindKey:o("Ctrl-Z","Command-Z"),exec:function(e){e.undo()}},{name:"redo",description:"Redo",bindKey:o("Ctrl-Shift-Z|Ctrl-Y","Command-Shift-Z|Command-Y"),exec:function(e){e.redo()}},{name:"copylinesup",description:"Copy lines up",bindKey:o("Alt-Shift-Up","Command-Option-Up"),exec:function(e){e.copyLinesUp()},scrollIntoView:"cursor"},{name:"movelinesup",description:"Move lines up",bindKey:o("Alt-Up","Option-Up"),exec:function(e){e.moveLinesUp()},scrollIntoView:"cursor"},{name:"copylinesdown",description:"Copy lines down",bindKey:o("Alt-Shift-Down","Command-Option-Down"),exec:function(e){e.copyLinesDown()},scrollIntoView:"cursor"},{name:"movelinesdown",description:"Move lines down",bindKey:o("Alt-Down","Option-Down"),exec:function(e){e.moveLinesDown()},scrollIntoView:"cursor"},{name:"del",description:"Delete",bindKey:o("Delete","Delete|Ctrl-D|Shift-Delete"),exec:function(e){e.remove("right")},multiSelectAction:"forEach",scrollIntoView:"cursor"},{name:"backspace",description:"Backspace",bindKey:o("Shift-Backspace|Backspace","Ctrl-Backspace|Shift-Backspace|Backspace|Ctrl-H"),exec:function(e){e.remove("left")},multiSelectAction:"forEach",scrollIntoView:"cursor"},{name:"cut_or_delete",description:"Cut or delete",bindKey:o("Shift-Delete",null),exec:function(e){if(!e.selection.isEmpty())return!1;e.remove("left")},multiSelectAction:"forEach",scrollIntoView:"cursor"},{name:"removetolinestart",description:"Remove to line start",bindKey:o("Alt-Backspace","Command-Backspace"),exec:function(e){e.removeToLineStart()},multiSelectAction:"forEach",scrollIntoView:"cursor"},{name:"removetolineend",description:"Remove to line end",bindKey:o("Alt-Delete","Ctrl-K|Command-Delete"),exec:function(e){e.removeToLineEnd()},multiSelectAction:"forEach",scrollIntoView:"cursor"},{name:"removetolinestarthard",description:"Remove to line start hard",bindKey:o("Ctrl-Shift-Backspace",null),exec:function(e){var t=e.selection.getRange();t.start.column=0,e.session.remove(t)},multiSelectAction:"forEach",scrollIntoView:"cursor"},{name:"removetolineendhard",description:"Remove to line end hard",bindKey:o("Ctrl-Shift-Delete",null),exec:function(e){var t=e.selection.getRange();t.end.column=Number.MAX_VALUE,e.session.remove(t)},multiSelectAction:"forEach",scrollIntoView:"cursor"},{name:"removewordleft",description:"Remove word left",bindKey:o("Ctrl-Backspace","Alt-Backspace|Ctrl-Alt-Backspace"),exec:function(e){e.removeWordLeft()},multiSelectAction:"forEach",scrollIntoView:"cursor"},{name:"removewordright",description:"Remove word right",bindKey:o("Ctrl-Delete","Alt-Delete"),exec:function(e){e.removeWordRight()},multiSelectAction:"forEach",scrollIntoView:"cursor"},{name:"outdent",description:"Outdent",bindKey:o("Shift-Tab","Shift-Tab"),exec:function(e){e.blockOutdent()},multiSelectAction:"forEach",scrollIntoView:"selectionPart"},{name:"indent",description:"Indent",bindKey:o("Tab","Tab"),exec:function(e){e.indent()},multiSelectAction:"forEach",scrollIntoView:"selectionPart"},{name:"blockoutdent",description:"Block outdent",bindKey:o("Ctrl-[","Ctrl-["),exec:function(e){e.blockOutdent()},multiSelectAction:"forEachLine",scrollIntoView:"selectionPart"},{name:"blockindent",description:"Block indent",bindKey:o("Ctrl-]","Ctrl-]"),exec:function(e){e.blockIndent()},multiSelectAction:"forEachLine",scrollIntoView:"selectionPart"},{name:"insertstring",description:"Insert string",exec:function(e,t){e.insert(t)},multiSelectAction:"forEach",scrollIntoView:"cursor"},{name:"inserttext",description:"Insert text",exec:function(e,t){e.insert(i.stringRepeat(t.text||"",t.times||1))},multiSelectAction:"forEach",scrollIntoView:"cursor"},{name:"splitline",description:"Split line",bindKey:o(null,"Ctrl-O"),exec:function(e){e.splitLine()},multiSelectAction:"forEach",scrollIntoView:"cursor"},{name:"transposeletters",description:"Transpose letters",bindKey:o("Alt-Shift-X","Ctrl-T"),exec:function(e){e.transposeLetters()},multiSelectAction:function(e){e.transposeSelections(1)},scrollIntoView:"cursor"},{name:"touppercase",description:"To uppercase",bindKey:o("Ctrl-U","Ctrl-U"),exec:function(e){e.toUpperCase()},multiSelectAction:"forEach",scrollIntoView:"cursor"},{name:"tolowercase",description:"To lowercase",bindKey:o("Ctrl-Shift-U","Ctrl-Shift-U"),exec:function(e){e.toLowerCase()},multiSelectAction:"forEach",scrollIntoView:"cursor"},{name:"expandtoline",description:"Expand to line",bindKey:o("Ctrl-Shift-L","Command-Shift-L"),exec:function(e){var t=e.selection.getRange();t.start.column=t.end.column=0,t.end.row++,e.selection.setRange(t,!1)},multiSelectAction:"forEach",scrollIntoView:"cursor",readOnly:!0},{name:"joinlines",description:"Join lines",bindKey:o(null,null),exec:function(e){for(var t=e.selection.isBackwards(),n=t?e.selection.getSelectionLead():e.selection.getSelectionAnchor(),r=t?e.selection.getSelectionAnchor():e.selection.getSelectionLead(),o=e.session.doc.getLine(n.row).length,a=e.session.doc.getTextRange(e.selection.getRange()).replace(/\n\s*/," ").length,l=e.session.doc.getLine(n.row),c=n.row+1;c<=r.row+1;c++){var u=i.stringTrimLeft(i.stringTrimRight(e.session.doc.getLine(c)));0!==u.length&&(u=" "+u),l+=u}r.row+10?(e.selection.moveCursorTo(n.row,n.column),e.selection.selectTo(n.row,n.column+a)):(o=e.session.doc.getLine(n.row).length>o?o+1:o,e.selection.moveCursorTo(n.row,o))},multiSelectAction:"forEach",readOnly:!0},{name:"invertSelection",description:"Invert selection",bindKey:o(null,null),exec:function(e){var t=e.session.doc.getLength()-1,n=e.session.doc.getLine(t).length,i=e.selection.rangeList.ranges,r=[];i.length<1&&(i=[e.selection.getRange()]);for(var o=0;o=r.lastRow||i.end.row<=r.firstRow)&&this.renderer.scrollSelectionIntoView(this.selection.anchor,this.selection.lead)}"animate"==n&&this.renderer.animateScrolling(this.curOp.scrollTop)}var s=this.selection.toJSON();this.curOp.selectionAfter=s,this.$lastSel=this.selection.toJSON(),this.session.getUndoManager().addSelection(s),this.prevOp=this.curOp,this.curOp=null}},this.$mergeableCommands=["backspace","del","insertstring"],this.$historyTracker=function(e){if(this.$mergeUndoDeltas){var t=this.prevOp,n=this.$mergeableCommands,i=t.command&&e.command.name==t.command.name;if("insertstring"==e.command.name){var r=e.args;void 0===this.mergeNextCommand&&(this.mergeNextCommand=!0),i=i&&this.mergeNextCommand&&(!/\s/.test(r)||/\s/.test(t.args)),this.mergeNextCommand=!0}else i=i&&-1!==n.indexOf(e.command.name);"always"!=this.$mergeUndoDeltas&&Date.now()-this.sequenceStartTime>2e3&&(i=!1),i?this.session.mergeUndoDeltas=!0:-1!==n.indexOf(e.command.name)&&(this.sequenceStartTime=Date.now())}},this.setKeyboardHandler=function(e,t){if(e&&"string"==typeof e&&"ace"!=e){this.$keybindingId=e;var n=this;E.loadModule(["keybinding",e],(function(i){n.$keybindingId==e&&n.keyBinding.setKeyboardHandler(i&&i.handler),t&&t()}))}else this.$keybindingId=null,this.keyBinding.setKeyboardHandler(e),t&&t()},this.getKeyboardHandler=function(){return this.keyBinding.getKeyboardHandler()},this.setSession=function(e){if(this.session!=e){this.curOp&&this.endOperation(),this.curOp={};var t=this.session;if(t){this.session.off("change",this.$onDocumentChange),this.session.off("changeMode",this.$onChangeMode),this.session.off("tokenizerUpdate",this.$onTokenizerUpdate),this.session.off("changeTabSize",this.$onChangeTabSize),this.session.off("changeWrapLimit",this.$onChangeWrapLimit),this.session.off("changeWrapMode",this.$onChangeWrapMode),this.session.off("changeFold",this.$onChangeFold),this.session.off("changeFrontMarker",this.$onChangeFrontMarker),this.session.off("changeBackMarker",this.$onChangeBackMarker),this.session.off("changeBreakpoint",this.$onChangeBreakpoint),this.session.off("changeAnnotation",this.$onChangeAnnotation),this.session.off("changeOverwrite",this.$onCursorChange),this.session.off("changeScrollTop",this.$onScrollTopChange),this.session.off("changeScrollLeft",this.$onScrollLeftChange);var n=this.session.getSelection();n.off("changeCursor",this.$onCursorChange),n.off("changeSelection",this.$onSelectionChange)}this.session=e,e?(this.$onDocumentChange=this.onDocumentChange.bind(this),e.on("change",this.$onDocumentChange),this.renderer.setSession(e),this.$onChangeMode=this.onChangeMode.bind(this),e.on("changeMode",this.$onChangeMode),this.$onTokenizerUpdate=this.onTokenizerUpdate.bind(this),e.on("tokenizerUpdate",this.$onTokenizerUpdate),this.$onChangeTabSize=this.renderer.onChangeTabSize.bind(this.renderer),e.on("changeTabSize",this.$onChangeTabSize),this.$onChangeWrapLimit=this.onChangeWrapLimit.bind(this),e.on("changeWrapLimit",this.$onChangeWrapLimit),this.$onChangeWrapMode=this.onChangeWrapMode.bind(this),e.on("changeWrapMode",this.$onChangeWrapMode),this.$onChangeFold=this.onChangeFold.bind(this),e.on("changeFold",this.$onChangeFold),this.$onChangeFrontMarker=this.onChangeFrontMarker.bind(this),this.session.on("changeFrontMarker",this.$onChangeFrontMarker),this.$onChangeBackMarker=this.onChangeBackMarker.bind(this),this.session.on("changeBackMarker",this.$onChangeBackMarker),this.$onChangeBreakpoint=this.onChangeBreakpoint.bind(this),this.session.on("changeBreakpoint",this.$onChangeBreakpoint),this.$onChangeAnnotation=this.onChangeAnnotation.bind(this),this.session.on("changeAnnotation",this.$onChangeAnnotation),this.$onCursorChange=this.onCursorChange.bind(this),this.session.on("changeOverwrite",this.$onCursorChange),this.$onScrollTopChange=this.onScrollTopChange.bind(this),this.session.on("changeScrollTop",this.$onScrollTopChange),this.$onScrollLeftChange=this.onScrollLeftChange.bind(this),this.session.on("changeScrollLeft",this.$onScrollLeftChange),this.selection=e.getSelection(),this.selection.on("changeCursor",this.$onCursorChange),this.$onSelectionChange=this.onSelectionChange.bind(this),this.selection.on("changeSelection",this.$onSelectionChange),this.onChangeMode(),this.onCursorChange(),this.onScrollTopChange(),this.onScrollLeftChange(),this.onSelectionChange(),this.onChangeFrontMarker(),this.onChangeBackMarker(),this.onChangeBreakpoint(),this.onChangeAnnotation(),this.session.getUseWrapMode()&&this.renderer.adjustWrapLimit(),this.renderer.updateFull()):(this.selection=null,this.renderer.setSession(e)),this._signal("changeSession",{session:e,oldSession:t}),this.curOp=null,t&&t._signal("changeEditor",{oldEditor:this}),e&&e._signal("changeEditor",{editor:this}),e&&e.bgTokenizer&&e.bgTokenizer.scheduleStart()}},this.getSession=function(){return this.session},this.setValue=function(e,t){return this.session.doc.setValue(e),t?1==t?this.navigateFileEnd():-1==t&&this.navigateFileStart():this.selectAll(),e},this.getValue=function(){return this.session.getValue()},this.getSelection=function(){return this.selection},this.resize=function(e){this.renderer.onResize(e)},this.setTheme=function(e,t){this.renderer.setTheme(e,t)},this.getTheme=function(){return this.renderer.getTheme()},this.setStyle=function(e){this.renderer.setStyle(e)},this.unsetStyle=function(e){this.renderer.unsetStyle(e)},this.getFontSize=function(){return this.getOption("fontSize")||r.computedStyle(this.container).fontSize},this.setFontSize=function(e){this.setOption("fontSize",e)},this.$highlightBrackets=function(){if(this.session.$bracketHighlight&&(this.session.removeMarker(this.session.$bracketHighlight),this.session.$bracketHighlight=null),!this.$highlightPending){var e=this;this.$highlightPending=!0,setTimeout((function(){e.$highlightPending=!1;var t=e.session;if(t&&t.bgTokenizer){var n=t.findMatchingBracket(e.getCursorPosition());if(n)var i=new m(n.row,n.column,n.row,n.column+1);else t.$mode.getMatching&&(i=t.$mode.getMatching(e.session));i&&(t.$bracketHighlight=t.addMarker(i,"ace_bracket","text"))}}),50)}},this.$highlightTags=function(){if(!this.$highlightTagPending){var e=this;this.$highlightTagPending=!0,setTimeout((function(){e.$highlightTagPending=!1;var t=e.session;if(t&&t.bgTokenizer){var n=e.getCursorPosition(),i=new v(e.session,n.row,n.column),r=i.getCurrentToken();if(!r||!/\b(?:tag-open|tag-name)/.test(r.type))return t.removeMarker(t.$tagHighlight),void(t.$tagHighlight=null);if(-1==r.type.indexOf("tag-open")||(r=i.stepForward())){var s=r.value,o=0,a=i.stepBackward();if("<"==a.value)do{a=r,(r=i.stepForward())&&r.value===s&&-1!==r.type.indexOf("tag-name")&&("<"===a.value?o++:"=0);else{do{r=a,a=i.stepBackward(),r&&r.value===s&&-1!==r.type.indexOf("tag-name")&&("<"===a.value?o++:"1||(e=!1)),t.$highlightLineMarker&&!e)t.removeMarker(t.$highlightLineMarker.id),t.$highlightLineMarker=null;else if(!t.$highlightLineMarker&&e){var n=new m(e.row,e.column,e.row,1/0);n.id=t.addMarker(n,"ace_active-line","screenLine"),t.$highlightLineMarker=n}else e&&(t.$highlightLineMarker.start.row=e.row,t.$highlightLineMarker.end.row=e.row,t.$highlightLineMarker.start.column=e.column,t._signal("changeBackMarker"))},this.onSelectionChange=function(e){var t=this.session;if(t.$selectionMarker&&t.removeMarker(t.$selectionMarker),t.$selectionMarker=null,this.selection.isEmpty())this.$updateHighlightActiveLine();else{var n=this.selection.getRange(),i=this.getSelectionStyle();t.$selectionMarker=t.addMarker(n,"ace_selection",i)}var r=this.$highlightSelectedWord&&this.$getSelectionHighLightRegexp();this.session.highlight(r),this._signal("changeSelection")},this.$getSelectionHighLightRegexp=function(){var e=this.session,t=this.getSelectionRange();if(!t.isEmpty()&&!t.isMultiLine()){var n=t.start.column,i=t.end.column,r=e.getLine(t.start.row),s=r.substring(n,i);if(!(s.length>5e3)&&/[\w\d]/.test(s)){var o=this.$search.$assembleRegExp({wholeWord:!0,caseSensitive:!0,needle:s}),a=r.substring(n-1,i+1);if(o.test(a))return o}}},this.onChangeFrontMarker=function(){this.renderer.updateFrontMarkers()},this.onChangeBackMarker=function(){this.renderer.updateBackMarkers()},this.onChangeBreakpoint=function(){this.renderer.updateBreakpoints()},this.onChangeAnnotation=function(){this.renderer.setAnnotations(this.session.getAnnotations())},this.onChangeMode=function(e){this.renderer.updateText(),this._emit("changeMode",e)},this.onChangeWrapLimit=function(){this.renderer.updateFull()},this.onChangeWrapMode=function(){this.renderer.onResize(!0)},this.onChangeFold=function(){this.$updateHighlightActiveLine(),this.renderer.updateFull()},this.getSelectedText=function(){return this.session.getTextRange(this.getSelectionRange())},this.getCopyText=function(){var e=this.getSelectedText(),t=this.session.doc.getNewLineCharacter(),n=!1;if(!e&&this.$copyWithEmptySelection){n=!0;for(var i=this.selection.getAllRanges(),r=0;ra.search(/\S|$/)){var l=a.substr(r.column).search(/\S|$/);n.doc.removeInLine(r.row,r.column,r.column+l)}}this.clearSelection();var c=r.column,u=n.getState(r.row),h=(a=n.getLine(r.row),i.checkOutdent(u,a,e));if(n.insert(r,e),s&&s.selection&&(2==s.selection.length?this.selection.setSelectionRange(new m(r.row,c+s.selection[0],r.row,c+s.selection[1])):this.selection.setSelectionRange(new m(r.row+s.selection[0],s.selection[1],r.row+s.selection[2],s.selection[3]))),n.getDocument().isNewLine(e)){var d=i.getNextLineIndent(u,a.slice(0,r.column),n.getTabString());n.insert({row:r.row+1,column:0},d)}h&&i.autoOutdent(u,n,r.row)},this.onTextInput=function(e,t){if(!t)return this.keyBinding.onTextInput(e);this.startOperation({command:{name:"insertstring"}});var n=this.applyComposition.bind(this,e,t);this.selection.rangeCount?this.forEachSelection(n):n(),this.endOperation()},this.applyComposition=function(e,t){var n;(t.extendLeft||t.extendRight)&&((n=this.selection.getRange()).start.column-=t.extendLeft,n.end.column+=t.extendRight,this.selection.setRange(n),e||n.isEmpty()||this.remove()),!e&&this.selection.isEmpty()||this.insert(e,!0),(t.restoreStart||t.restoreEnd)&&((n=this.selection.getRange()).start.column-=t.restoreStart,n.end.column-=t.restoreEnd,this.selection.setRange(n))},this.onCommandKey=function(e,t,n){return this.keyBinding.onCommandKey(e,t,n)},this.setOverwrite=function(e){this.session.setOverwrite(e)},this.getOverwrite=function(){return this.session.getOverwrite()},this.toggleOverwrite=function(){this.session.toggleOverwrite()},this.setScrollSpeed=function(e){this.setOption("scrollSpeed",e)},this.getScrollSpeed=function(){return this.getOption("scrollSpeed")},this.setDragDelay=function(e){this.setOption("dragDelay",e)},this.getDragDelay=function(){return this.getOption("dragDelay")},this.setSelectionStyle=function(e){this.setOption("selectionStyle",e)},this.getSelectionStyle=function(){return this.getOption("selectionStyle")},this.setHighlightActiveLine=function(e){this.setOption("highlightActiveLine",e)},this.getHighlightActiveLine=function(){return this.getOption("highlightActiveLine")},this.setHighlightGutterLine=function(e){this.setOption("highlightGutterLine",e)},this.getHighlightGutterLine=function(){return this.getOption("highlightGutterLine")},this.setHighlightSelectedWord=function(e){this.setOption("highlightSelectedWord",e)},this.getHighlightSelectedWord=function(){return this.$highlightSelectedWord},this.setAnimatedScroll=function(e){this.renderer.setAnimatedScroll(e)},this.getAnimatedScroll=function(){return this.renderer.getAnimatedScroll()},this.setShowInvisibles=function(e){this.renderer.setShowInvisibles(e)},this.getShowInvisibles=function(){return this.renderer.getShowInvisibles()},this.setDisplayIndentGuides=function(e){this.renderer.setDisplayIndentGuides(e)},this.getDisplayIndentGuides=function(){return this.renderer.getDisplayIndentGuides()},this.setShowPrintMargin=function(e){this.renderer.setShowPrintMargin(e)},this.getShowPrintMargin=function(){return this.renderer.getShowPrintMargin()},this.setPrintMarginColumn=function(e){this.renderer.setPrintMarginColumn(e)},this.getPrintMarginColumn=function(){return this.renderer.getPrintMarginColumn()},this.setReadOnly=function(e){this.setOption("readOnly",e)},this.getReadOnly=function(){return this.getOption("readOnly")},this.setBehavioursEnabled=function(e){this.setOption("behavioursEnabled",e)},this.getBehavioursEnabled=function(){return this.getOption("behavioursEnabled")},this.setWrapBehavioursEnabled=function(e){this.setOption("wrapBehavioursEnabled",e)},this.getWrapBehavioursEnabled=function(){return this.getOption("wrapBehavioursEnabled")},this.setShowFoldWidgets=function(e){this.setOption("showFoldWidgets",e)},this.getShowFoldWidgets=function(){return this.getOption("showFoldWidgets")},this.setFadeFoldWidgets=function(e){this.setOption("fadeFoldWidgets",e)},this.getFadeFoldWidgets=function(){return this.getOption("fadeFoldWidgets")},this.remove=function(e){this.selection.isEmpty()&&("left"==e?this.selection.selectLeft():this.selection.selectRight());var t=this.getSelectionRange();if(this.getBehavioursEnabled()){var n=this.session,i=n.getState(t.start.row),r=n.getMode().transformAction(i,"deletion",this,n,t);if(0===t.end.column){var s=n.getTextRange(t);if("\n"==s[s.length-1]){var o=n.getLine(t.end.row);/^\s+$/.test(o)&&(t.end.column=o.length)}}r&&(t=r)}this.session.remove(t),this.clearSelection()},this.removeWordRight=function(){this.selection.isEmpty()&&this.selection.selectWordRight(),this.session.remove(this.getSelectionRange()),this.clearSelection()},this.removeWordLeft=function(){this.selection.isEmpty()&&this.selection.selectWordLeft(),this.session.remove(this.getSelectionRange()),this.clearSelection()},this.removeToLineStart=function(){this.selection.isEmpty()&&this.selection.selectLineStart(),this.selection.isEmpty()&&this.selection.selectLeft(),this.session.remove(this.getSelectionRange()),this.clearSelection()},this.removeToLineEnd=function(){this.selection.isEmpty()&&this.selection.selectLineEnd();var e=this.getSelectionRange();e.start.column==e.end.column&&e.start.row==e.end.row&&(e.end.column=0,e.end.row++),this.session.remove(e),this.clearSelection()},this.splitLine=function(){this.selection.isEmpty()||(this.session.remove(this.getSelectionRange()),this.clearSelection());var e=this.getCursorPosition();this.insert("\n"),this.moveCursorToPosition(e)},this.transposeLetters=function(){if(this.selection.isEmpty()){var e=this.getCursorPosition(),t=e.column;if(0!==t){var n,i,r=this.session.getLine(e.row);tt.toLowerCase()?1:0}));var r=new m(0,0,0,0);for(i=e.first;i<=e.last;i++){var s=t.getLine(i);r.start.row=i,r.end.row=i,r.end.column=s.length,t.replace(r,n[i-e.first])}},this.toggleCommentLines=function(){var e=this.session.getState(this.getCursorPosition().row),t=this.$getSelectedRows();this.session.getMode().toggleCommentLines(e,this.session,t.first,t.last)},this.toggleBlockComment=function(){var e=this.getCursorPosition(),t=this.session.getState(e.row),n=this.getSelectionRange();this.session.getMode().toggleBlockComment(t,this.session,n,e)},this.getNumberAt=function(e,t){var n=/[\-]?[0-9]+(?:\.[0-9]+)?/g;n.lastIndex=0;for(var i=this.session.getLine(e);n.lastIndex=t)return{value:r[0],start:r.index,end:r.index+r[0].length}}return null},this.modifyNumber=function(e){var t=this.selection.getCursor().row,n=this.selection.getCursor().column,i=new m(t,n-1,t,n),r=this.session.getTextRange(i);if(!isNaN(parseFloat(r))&&isFinite(r)){var s=this.getNumberAt(t,n);if(s){var o=s.value.indexOf(".")>=0?s.start+s.value.indexOf(".")+1:s.end,a=s.start+s.value.length-o,l=parseFloat(s.value);l*=Math.pow(10,a),o!==s.end&&n=a&&o<=l&&(n=t,c.selection.clearSelection(),c.moveCursorTo(e,a+i),c.selection.selectTo(e,l+i)),a=l}));for(var u,h=this.$toggleWordPairs,d=0;dm+1)break;m=p.last}for(u--,a=this.session.$moveLines(d,m,t?0:e),t&&-1==e&&(h=u+1);h<=u;)o[h].moveBy(a,0),h++;t||(a=0),l+=a}r.fromOrientedRange(r.ranges[0]),r.rangeList.attach(this.session),this.inVirtualSelectionMode=!1}},this.$getSelectedRows=function(e){return e=(e||this.getSelectionRange()).collapseRows(),{first:this.session.getRowFoldStart(e.start.row),last:this.session.getRowFoldEnd(e.end.row)}},this.onCompositionStart=function(e){this.renderer.showComposition(e)},this.onCompositionUpdate=function(e){this.renderer.setCompositionText(e)},this.onCompositionEnd=function(){this.renderer.hideComposition()},this.getFirstVisibleRow=function(){return this.renderer.getFirstVisibleRow()},this.getLastVisibleRow=function(){return this.renderer.getLastVisibleRow()},this.isRowVisible=function(e){return e>=this.getFirstVisibleRow()&&e<=this.getLastVisibleRow()},this.isRowFullyVisible=function(e){return e>=this.renderer.getFirstFullyVisibleRow()&&e<=this.renderer.getLastFullyVisibleRow()},this.$getVisibleRowCount=function(){return this.renderer.getScrollBottomRow()-this.renderer.getScrollTopRow()+1},this.$moveByPage=function(e,t){var n=this.renderer,i=this.renderer.layerConfig,r=e*Math.floor(i.height/i.lineHeight);!0===t?this.selection.$moveSelection((function(){this.moveCursorBy(r,0)})):!1===t&&(this.selection.moveCursorBy(r,0),this.selection.clearSelection());var s=n.scrollTop;n.scrollBy(0,r*i.lineHeight),null!=t&&n.scrollCursorIntoView(null,.5),n.animateScrolling(s)},this.selectPageDown=function(){this.$moveByPage(1,!0)},this.selectPageUp=function(){this.$moveByPage(-1,!0)},this.gotoPageDown=function(){this.$moveByPage(1,!1)},this.gotoPageUp=function(){this.$moveByPage(-1,!1)},this.scrollPageDown=function(){this.$moveByPage(1)},this.scrollPageUp=function(){this.$moveByPage(-1)},this.scrollToRow=function(e){this.renderer.scrollToRow(e)},this.scrollToLine=function(e,t,n,i){this.renderer.scrollToLine(e,t,n,i)},this.centerSelection=function(){var e=this.getSelectionRange(),t={row:Math.floor(e.start.row+(e.end.row-e.start.row)/2),column:Math.floor(e.start.column+(e.end.column-e.start.column)/2)};this.renderer.alignCursor(t,.5)},this.getCursorPosition=function(){return this.selection.getCursor()},this.getCursorPositionScreen=function(){return this.session.documentToScreenPosition(this.getCursorPosition())},this.getSelectionRange=function(){return this.selection.getRange()},this.selectAll=function(){this.selection.selectAll()},this.clearSelection=function(){this.selection.clearSelection()},this.moveCursorTo=function(e,t){this.selection.moveCursorTo(e,t)},this.moveCursorToPosition=function(e){this.selection.moveCursorToPosition(e)},this.jumpToMatching=function(e,t){var n=this.getCursorPosition(),i=new v(this.session,n.row,n.column),r=i.getCurrentToken(),s=r||i.stepForward();if(s){var o,a,l=!1,c={},u=n.column-s.start,h={")":"(","(":"(","]":"[","[":"[","{":"{","}":"{"};do{if(s.value.match(/[{}()\[\]]/g)){for(;u=0;--s)this.$tryReplace(n[s],e)&&i++;return this.selection.setSelectionRange(r),i},this.$tryReplace=function(e,t){var n=this.session.getTextRange(e);return null!==(t=this.$search.replace(n,t))?(e.end=this.session.replace(e,t),e):null},this.getLastSearchOptions=function(){return this.$search.getOptions()},this.find=function(e,t,n){t||(t={}),"string"==typeof e||e instanceof RegExp?t.needle=e:"object"==typeof e&&i.mixin(t,e);var r=this.selection.getRange();null==t.needle&&((e=this.session.getTextRange(r)||this.$search.$options.needle)||(r=this.session.getWordRange(r.start.row,r.start.column),e=this.session.getTextRange(r)),this.$search.set({needle:e})),this.$search.set(t),t.start||this.$search.set({start:r});var s=this.$search.find(this.session);return t.preventScroll?s:s?(this.revealRange(s,n),s):(t.backwards?r.start=r.end:r.end=r.start,void this.selection.setRange(r))},this.findNext=function(e,t){this.find({skipCurrent:!0,backwards:!1},e,t)},this.findPrevious=function(e,t){this.find(e,{skipCurrent:!0,backwards:!0},t)},this.revealRange=function(e,t){this.session.unfold(e),this.selection.setSelectionRange(e);var n=this.renderer.scrollTop;this.renderer.scrollSelectionIntoView(e.start,e.end,.5),!1!==t&&this.renderer.animateScrolling(n)},this.undo=function(){this.session.getUndoManager().undo(this.session),this.renderer.scrollCursorIntoView(null,.5)},this.redo=function(){this.session.getUndoManager().redo(this.session),this.renderer.scrollCursorIntoView(null,.5)},this.destroy=function(){this.renderer.destroy(),this._signal("destroy",this),this.session&&this.session.destroy()},this.setAutoScrollEditorIntoView=function(e){if(e){var t,n=this,i=!1;this.$scrollAnchor||(this.$scrollAnchor=document.createElement("div"));var r=this.$scrollAnchor;r.style.cssText="position:absolute",this.container.insertBefore(r,this.container.firstChild);var s=this.on("changeSelection",(function(){i=!0})),o=this.renderer.on("beforeRender",(function(){i&&(t=n.renderer.container.getBoundingClientRect())})),a=this.renderer.on("afterRender",(function(){if(i&&t&&(n.isFocused()||n.searchBox&&n.searchBox.isFocused())){var e=n.renderer,s=e.$cursorLayer.$pixelPos,o=e.layerConfig,a=s.top-o.offset;null!=(i=s.top>=0&&a+t.top<0||!(s.topwindow.innerHeight)&&null)&&(r.style.top=a+"px",r.style.left=s.left+"px",r.style.height=o.lineHeight+"px",r.scrollIntoView(i)),i=t=null}}));this.setAutoScrollEditorIntoView=function(e){e||(delete this.setAutoScrollEditorIntoView,this.off("changeSelection",s),this.renderer.off("afterRender",a),this.renderer.off("beforeRender",o))}}},this.$resetCursorStyle=function(){var e=this.$cursorStyle||"ace",t=this.renderer.$cursorLayer;t&&(t.setSmoothBlinking(/smooth/.test(e)),t.isBlinking=!this.$readOnly&&"wide"!=e,r.setCssClass(t.element,"ace_slim-cursors",/slim/.test(e)))},this.prompt=function(e,t,n){var i=this;E.loadModule("./ext/prompt",(function(r){r.prompt(i,e,t,n)}))}}.call(C.prototype),E.defineOptions(C.prototype,"editor",{selectionStyle:{set:function(e){this.onSelectionChange(),this._signal("changeSelectionStyle",{data:e})},initialValue:"line"},highlightActiveLine:{set:function(){this.$updateHighlightActiveLine()},initialValue:!0},highlightSelectedWord:{set:function(e){this.$onSelectionChange()},initialValue:!0},readOnly:{set:function(e){this.textInput.setReadOnly(e),this.$resetCursorStyle()},initialValue:!1},copyWithEmptySelection:{set:function(e){this.textInput.setCopyWithEmptySelection(e)},initialValue:!1},cursorStyle:{set:function(e){this.$resetCursorStyle()},values:["ace","slim","smooth","wide"],initialValue:"ace"},mergeUndoDeltas:{values:[!1,!0,"always"],initialValue:!0},behavioursEnabled:{initialValue:!0},wrapBehavioursEnabled:{initialValue:!0},autoScrollEditorIntoView:{set:function(e){this.setAutoScrollEditorIntoView(e)}},keyboardHandler:{set:function(e){this.setKeyboardHandler(e)},get:function(){return this.$keybindingId},handlesSet:!0},value:{set:function(e){this.session.setValue(e)},get:function(){return this.getValue()},handlesSet:!0,hidden:!0},session:{set:function(e){this.setSession(e)},get:function(){return this.session},handlesSet:!0,hidden:!0},showLineNumbers:{set:function(e){this.renderer.$gutterLayer.setShowLineNumbers(e),this.renderer.$loop.schedule(this.renderer.CHANGE_GUTTER),e&&this.$relativeLineNumbers?A.attach(this):A.detach(this)},initialValue:!0},relativeLineNumbers:{set:function(e){this.$showLineNumbers&&e?A.attach(this):A.detach(this)}},placeholder:{set:function(e){this.$updatePlaceholder||(this.$updatePlaceholder=function(){var e=this.renderer.$composition||this.getValue();if(e&&this.renderer.placeholderNode)this.renderer.off("afterRender",this.$updatePlaceholder),r.removeCssClass(this.container,"ace_hasPlaceholder"),this.renderer.placeholderNode.remove(),this.renderer.placeholderNode=null;else if(!e&&!this.renderer.placeholderNode){this.renderer.on("afterRender",this.$updatePlaceholder),r.addCssClass(this.container,"ace_hasPlaceholder");var t=r.createElement("div");t.className="ace_placeholder",t.textContent=this.$placeholder||"",this.renderer.placeholderNode=t,this.renderer.content.appendChild(this.renderer.placeholderNode)}}.bind(this),this.on("input",this.$updatePlaceholder)),this.$updatePlaceholder()}},hScrollBarAlwaysVisible:"renderer",vScrollBarAlwaysVisible:"renderer",highlightGutterLine:"renderer",animatedScroll:"renderer",showInvisibles:"renderer",showPrintMargin:"renderer",printMarginColumn:"renderer",printMargin:"renderer",fadeFoldWidgets:"renderer",showFoldWidgets:"renderer",displayIndentGuides:"renderer",showGutter:"renderer",fontSize:"renderer",fontFamily:"renderer",maxLines:"renderer",minLines:"renderer",scrollPastEnd:"renderer",fixedWidthGutter:"renderer",theme:"renderer",hasCssTransforms:"renderer",maxPixelHeight:"renderer",useTextareaForIME:"renderer",scrollSpeed:"$mouseHandler",dragDelay:"$mouseHandler",dragEnabled:"$mouseHandler",focusTimeout:"$mouseHandler",tooltipFollowsMouse:"$mouseHandler",firstLineNumber:"session",overwrite:"session",newLineMode:"session",useWorker:"session",useSoftTabs:"session",navigateWithinSoftTabs:"session",tabSize:"session",wrap:"session",indentedSoftWrap:"session",foldStyle:"session",mode:"session"});var A={getText:function(e,t){return(Math.abs(e.selection.lead.row-t)||t+1+(t<9?"·":""))+""},getWidth:function(e,t,n){return Math.max(t.toString().length,(n.lastRow+1).toString().length,2)*n.characterWidth},update:function(e,t){t.renderer.$loop.schedule(t.renderer.CHANGE_GUTTER)},attach:function(e){e.renderer.$gutterLayer.$renderer=this,e.on("changeSelection",this.update),this.update(null,e)},detach:function(e){e.renderer.$gutterLayer.$renderer==this&&(e.renderer.$gutterLayer.$renderer=null),e.off("changeSelection",this.update),this.update(null,e)}};t.Editor=C})),ace.define("ace/undomanager",["require","exports","module","ace/range"],(function(e,t,n){"use strict";var i=function(){this.$maxRev=0,this.$fromUndo=!1,this.reset()};(function(){this.addSession=function(e){this.$session=e},this.add=function(e,t,n){this.$fromUndo||e!=this.$lastDelta&&(!1!==t&&this.lastDeltas||(this.lastDeltas=[],this.$undoStack.push(this.lastDeltas),e.id=this.$rev=++this.$maxRev),"remove"!=e.action&&"insert"!=e.action||(this.$lastDelta=e),this.lastDeltas.push(e))},this.addSelection=function(e,t){this.selections.push({value:e,rev:t||this.$rev})},this.startNewGroup=function(){return this.lastDeltas=null,this.$rev},this.markIgnored=function(e,t){null==t&&(t=this.$rev+1);for(var n=this.$undoStack,i=n.length;i--;){var r=n[i][0];if(r.id<=e)break;r.id0},this.canRedo=function(){return this.$redoStack.length>0},this.bookmark=function(e){null==e&&(e=this.$rev),this.mark=e},this.isAtBookmark=function(){return this.$rev===this.mark},this.toJSON=function(){},this.fromJSON=function(){},this.hasUndo=this.canUndo,this.hasRedo=this.canRedo,this.isClean=this.isAtBookmark,this.markClean=this.bookmark,this.$prettyPrint=function(e){return e?a(e):a(this.$undoStack)+"\n---\n"+a(this.$redoStack)}}).call(i.prototype);var r=e("./range").Range,s=r.comparePoints;function o(e){return{row:e.row,column:e.column}}function a(e){if(e=e||this,Array.isArray(e))return e.map(a).join("\n");var t="";return e.action?(t="insert"==e.action?"+":"-",t+="["+e.lines+"]"):e.value&&(t=Array.isArray(e.value)?e.value.map(l).join("\n"):l(e.value)),e.start&&(t+=l(e)),(e.id||e.rev)&&(t+="\t("+(e.id||e.rev)+")"),t}function l(e){return e.start.row+":"+e.start.column+"=>"+e.end.row+":"+e.end.column}function c(e,t){var n="insert"==e.action,i="insert"==t.action;if(n&&i)if(s(t.start,e.end)>=0)d(t,e,-1);else{if(!(s(t.start,e.start)<=0))return null;d(e,t,1)}else if(n&&!i)if(s(t.start,e.end)>=0)d(t,e,-1);else{if(!(s(t.end,e.start)<=0))return null;d(e,t,-1)}else if(!n&&i)if(s(t.start,e.start)>=0)d(t,e,1);else{if(!(s(t.start,e.start)<=0))return null;d(e,t,1)}else if(!n&&!i)if(s(t.start,e.start)>=0)d(t,e,1);else{if(!(s(t.end,e.start)<=0))return null;d(e,t,-1)}return[t,e]}function u(e,t){for(var n=e.length;n--;)for(var i=0;i=0?d(e,t,-1):(s(e.start,t.start)<=0||d(e,r.fromPoints(t.start,e.start),-1),d(t,e,1));else if(!n&&i)s(t.start,e.end)>=0?d(t,e,-1):(s(t.start,e.start)<=0||d(t,r.fromPoints(e.start,t.start),-1),d(e,t,1));else if(!n&&!i)if(s(t.start,e.end)>=0)d(t,e,-1);else{var o,a;if(!(s(t.end,e.start)<=0))return s(e.start,t.start)<0&&(o=e,e=p(e,t.start)),s(e.end,t.end)>0&&(a=p(e,t.end)),m(t.end,e.start,e.end,-1),a&&!o&&(e.lines=a.lines,e.start=a.start,e.end=a.end,a=e),[t,o,a].filter(Boolean);d(e,t,-1)}return[t,e]}function d(e,t,n){m(e.start,t.start,t.end,n),m(e.end,t.start,t.end,n)}function m(e,t,n,i){e.row==(1==i?t:n).row&&(e.column+=i*(n.column-t.column)),e.row+=i*(n.row-t.row)}function p(e,t){var n=e.lines,i=e.end;e.end=o(t);var r=e.end.row-e.start.row,s=n.splice(r,n.length),a=r?t.column:t.column-e.start.column;return n.push(s[0].substring(0,a)),s[0]=s[0].substr(a),{start:o(t),end:i,lines:s,action:e.action}}function g(e,t){t=function(e){return{start:o(e.start),end:o(e.end),action:e.action,lines:e.lines.slice()}}(t);for(var n=e.length;n--;){for(var i=e[n],r=0;rs&&(l=r.end.row+1,s=(r=t.getNextFoldLine(l,r))?r.start.row:1/0),l>i){for(;this.$lines.getLength()>a+1;)this.$lines.pop();break}(o=this.$lines.get(++a))?o.row=l:(o=this.$lines.createCell(l,e,this.session,c),this.$lines.push(o)),this.$renderCell(o,e,r,l),l++}this._signal("afterRender"),this.$updateGutterWidth(e)},this.$updateGutterWidth=function(e){var t=this.session,n=t.gutterRenderer||this.$renderer,i=t.$firstLineNumber,r=this.$lines.last()?this.$lines.last().text:"";(this.$fixedWidth||t.$useWrapMode)&&(r=t.getLength()+i-1);var s=n?n.getWidth(t,r,e):r.toString().length*e.characterWidth,o=this.$padding||this.$computePadding();(s+=o.left+o.right)===this.gutterWidth||isNaN(s)||(this.gutterWidth=s,this.element.parentNode.style.width=this.element.style.width=Math.ceil(this.gutterWidth)+"px",this._signal("changeGutterWidth",s))},this.$updateCursorRow=function(){if(this.$highlightGutterLine){var e=this.session.selection.getCursor();this.$cursorRow!==e.row&&(this.$cursorRow=e.row)}},this.updateLineHighlight=function(){if(this.$highlightGutterLine){var e=this.session.selection.cursor.row;if(this.$cursorRow=e,!this.$cursorCell||this.$cursorCell.row!=e){this.$cursorCell&&(this.$cursorCell.element.className=this.$cursorCell.element.className.replace("ace_gutter-active-line ",""));var t=this.$lines.cells;this.$cursorCell=null;for(var n=0;n=this.$cursorRow){if(i.row>this.$cursorRow){var r=this.session.getFoldLine(this.$cursorRow);if(!(n>0&&r&&r.start.row==t[n-1].row))break;i=t[n-1]}i.element.className="ace_gutter-active-line "+i.element.className,this.$cursorCell=i;break}}}}},this.scrollLines=function(e){var t=this.config;if(this.config=e,this.$updateCursorRow(),this.$lines.pageChanged(t,e))return this.update(e);this.$lines.moveContainer(e);var n=Math.min(e.lastRow+e.gutterOffset,this.session.getLength()-1),i=this.oldLastRow;if(this.oldLastRow=n,!t||i0;r--)this.$lines.shift();if(i>n)for(r=this.session.getFoldedRowCount(n+1,i);r>0;r--)this.$lines.pop();e.firstRowi&&this.$lines.push(this.$renderLines(e,i+1,n)),this.updateLineHighlight(),this._signal("afterRender"),this.$updateGutterWidth(e)},this.$renderLines=function(e,t,n){for(var i=[],r=t,s=this.session.getNextFoldLine(r),o=s?s.start.row:1/0;r>o&&(r=s.end.row+1,o=(s=this.session.getNextFoldLine(r,s))?s.start.row:1/0),!(r>n);){var a=this.$lines.createCell(r,e,this.session,c);this.$renderCell(a,e,s,r),i.push(a),r++}return i},this.$renderCell=function(e,t,n,r){var s=e.element,o=this.session,a=s.childNodes[0],l=s.childNodes[1],c=o.$firstLineNumber,u=o.$breakpoints,h=o.$decorations,d=o.gutterRenderer||this.$renderer,m=this.$showFoldWidgets&&o.foldWidgets,p=n?n.start.row:Number.MAX_VALUE,g="ace_gutter-cell ";if(this.$highlightGutterLine&&(r==this.$cursorRow||n&&r=p&&this.$cursorRow<=n.end.row)&&(g+="ace_gutter-active-line ",this.$cursorCell!=e&&(this.$cursorCell&&(this.$cursorCell.element.className=this.$cursorCell.element.className.replace("ace_gutter-active-line ","")),this.$cursorCell=e)),u[r]&&(g+=u[r]),h[r]&&(g+=h[r]),this.$annotations[r]&&(g+=this.$annotations[r].className),s.className!=g&&(s.className=g),m){var f=m[r];null==f&&(f=m[r]=o.getFoldWidget(r))}if(f){g="ace_fold-widget ace_"+f,"start"==f&&r==p&&rn.right-t.right?"foldWidgets":void 0}}).call(l.prototype),t.Gutter=l})),ace.define("ace/layer/marker",["require","exports","module","ace/range","ace/lib/dom"],(function(e,t,n){"use strict";var i=e("../range").Range,r=e("../lib/dom"),s=function(e){this.element=r.createElement("div"),this.element.className="ace_layer ace_marker-layer",e.appendChild(this.element)};(function(){this.$padding=0,this.setPadding=function(e){this.$padding=e},this.setSession=function(e){this.session=e},this.setMarkers=function(e){this.markers=e},this.elt=function(e,t){var n=-1!=this.i&&this.element.childNodes[this.i];n?this.i++:(n=document.createElement("div"),this.element.appendChild(n),this.i=-1),n.style.cssText=t,n.className=e},this.update=function(e){if(e){var t;for(var n in this.config=e,this.i=0,this.markers){var i=this.markers[n];if(i.range){var r=i.range.clipRows(e.firstRow,e.lastRow);if(!r.isEmpty())if(r=r.toScreenRange(this.session),i.renderer){var s=this.$getTop(r.start.row,e),o=this.$padding+r.start.column*e.characterWidth;i.renderer(t,r,o,s,e)}else"fullLine"==i.type?this.drawFullLineMarker(t,r,i.clazz,e):"screenLine"==i.type?this.drawScreenLineMarker(t,r,i.clazz,e):r.isMultiLine()?"text"==i.type?this.drawTextMarker(t,r,i.clazz,e):this.drawMultiLineMarker(t,r,i.clazz,e):this.drawSingleLineMarker(t,r,i.clazz+" ace_start ace_br15",e)}else i.update(t,this,this.session,e)}if(-1!=this.i)for(;this.id?4:0)|(c==l?8:0)),r,c==l?0:1,s)},this.drawMultiLineMarker=function(e,t,n,i,r){var s=this.$padding,o=i.lineHeight,a=this.$getTop(t.start.row,i),l=s+t.start.column*i.characterWidth;if(r=r||"",this.session.$bidiHandler.isBidiRow(t.start.row)?((c=t.clone()).end.row=c.start.row,c.end.column=this.session.getLine(c.start.row).length,this.drawBidiSingleLineMarker(e,c,n+" ace_br1 ace_start",i,null,r)):this.elt(n+" ace_br1 ace_start","height:"+o+"px;right:0;top:"+a+"px;left:"+l+"px;"+(r||"")),this.session.$bidiHandler.isBidiRow(t.end.row)){var c;(c=t.clone()).start.row=c.end.row,c.start.column=0,this.drawBidiSingleLineMarker(e,c,n+" ace_br12",i,null,r)}else{a=this.$getTop(t.end.row,i);var u=t.end.column*i.characterWidth;this.elt(n+" ace_br12","height:"+o+"px;width:"+u+"px;top:"+a+"px;left:"+s+"px;"+(r||""))}if(!((o=(t.end.row-t.start.row-1)*i.lineHeight)<=0)){a=this.$getTop(t.start.row+1,i);var h=(t.start.column?1:0)|(t.end.column?0:8);this.elt(n+(h?" ace_br"+h:""),"height:"+o+"px;right:0;top:"+a+"px;left:"+s+"px;"+(r||""))}},this.drawSingleLineMarker=function(e,t,n,i,r,s){if(this.session.$bidiHandler.isBidiRow(t.start.row))return this.drawBidiSingleLineMarker(e,t,n,i,r,s);var o=i.lineHeight,a=(t.end.column+(r||0)-t.start.column)*i.characterWidth,l=this.$getTop(t.start.row,i),c=this.$padding+t.start.column*i.characterWidth;this.elt(n,"height:"+o+"px;width:"+a+"px;top:"+l+"px;left:"+c+"px;"+(s||""))},this.drawBidiSingleLineMarker=function(e,t,n,i,r,s){var o=i.lineHeight,a=this.$getTop(t.start.row,i),l=this.$padding;this.session.$bidiHandler.getSelections(t.start.column,t.end.column).forEach((function(e){this.elt(n,"height:"+o+"px;width:"+e.width+(r||0)+"px;top:"+a+"px;left:"+(l+e.left)+"px;"+(s||""))}),this)},this.drawFullLineMarker=function(e,t,n,i,r){var s=this.$getTop(t.start.row,i),o=i.lineHeight;t.start.row!=t.end.row&&(o+=this.$getTop(t.end.row,i)-s),this.elt(n,"height:"+o+"px;top:"+s+"px;left:0;right:0;"+(r||""))},this.drawScreenLineMarker=function(e,t,n,i,r){var s=this.$getTop(t.start.row,i),o=i.lineHeight;this.elt(n,"height:"+o+"px;top:"+s+"px;left:0;right:0;"+(r||""))}}).call(s.prototype),t.Marker=s})),ace.define("ace/layer/text",["require","exports","module","ace/lib/oop","ace/lib/dom","ace/lib/lang","ace/layer/lines","ace/lib/event_emitter"],(function(e,t,n){"use strict";var i=e("../lib/oop"),r=e("../lib/dom"),s=e("../lib/lang"),o=e("./lines").Lines,a=e("../lib/event_emitter").EventEmitter,l=function(e){this.dom=r,this.element=this.dom.createElement("div"),this.element.className="ace_layer ace_text-layer",e.appendChild(this.element),this.$updateEolChar=this.$updateEolChar.bind(this),this.$lines=new o(this.element)};(function(){i.implement(this,a),this.EOF_CHAR="¶",this.EOL_CHAR_LF="¬",this.EOL_CHAR_CRLF="¤",this.EOL_CHAR=this.EOL_CHAR_LF,this.TAB_CHAR="—",this.SPACE_CHAR="·",this.$padding=0,this.MAX_LINE_LENGTH=1e4,this.$updateEolChar=function(){var e=this.session.doc,t="\n"==e.getNewLineCharacter()&&"windows"!=e.getNewLineMode()?this.EOL_CHAR_LF:this.EOL_CHAR_CRLF;if(this.EOL_CHAR!=t)return this.EOL_CHAR=t,!0},this.setPadding=function(e){this.$padding=e,this.element.style.margin="0 "+e+"px"},this.getLineHeight=function(){return this.$fontMetrics.$characterSize.height||0},this.getCharacterWidth=function(){return this.$fontMetrics.$characterSize.width||0},this.$setFontMetrics=function(e){this.$fontMetrics=e,this.$fontMetrics.on("changeCharacterSize",function(e){this._signal("changeCharacterSize",e)}.bind(this)),this.$pollSizeChanges()},this.checkForSizeChanges=function(){this.$fontMetrics.checkForSizeChanges()},this.$pollSizeChanges=function(){return this.$pollSizeChangesTimer=this.$fontMetrics.$pollSizeChanges()},this.setSession=function(e){this.session=e,e&&this.$computeTabString()},this.showInvisibles=!1,this.setShowInvisibles=function(e){return this.showInvisibles!=e&&(this.showInvisibles=e,this.$computeTabString(),!0)},this.displayIndentGuides=!0,this.setDisplayIndentGuides=function(e){return this.displayIndentGuides!=e&&(this.displayIndentGuides=e,this.$computeTabString(),!0)},this.$tabStrings=[],this.onChangeTabSize=this.$computeTabString=function(){var e=this.session.getTabSize();this.tabSize=e;for(var t=this.$tabStrings=[0],n=1;nu&&(a=l.end.row+1,u=(l=this.session.getNextFoldLine(a,l))?l.start.row:1/0),!(a>r);){var h=s[o++];if(h){this.dom.removeChildren(h),this.$renderLine(h,a,a==u&&l),c&&(h.style.top=this.$lines.computeLineTop(a,e,this.session)+"px");var d=e.lineHeight*this.session.getRowLength(a)+"px";h.style.height!=d&&(c=!0,h.style.height=d)}a++}if(c)for(;o0;r--)this.$lines.shift();if(t.lastRow>e.lastRow)for(r=this.session.getFoldedRowCount(e.lastRow+1,t.lastRow);r>0;r--)this.$lines.pop();e.firstRowt.lastRow&&this.$lines.push(this.$renderLinesFragment(e,t.lastRow+1,e.lastRow))},this.$renderLinesFragment=function(e,t,n){for(var i=[],s=t,o=this.session.getNextFoldLine(s),a=o?o.start.row:1/0;s>a&&(s=o.end.row+1,a=(o=this.session.getNextFoldLine(s,o))?o.start.row:1/0),!(s>n);){var l=this.$lines.createCell(s,e,this.session),c=l.element;this.dom.removeChildren(c),r.setStyle(c.style,"height",this.$lines.computeLineHeight(s,e,this.session)+"px"),r.setStyle(c.style,"top",this.$lines.computeLineTop(s,e,this.session)+"px"),this.$renderLine(c,s,s==a&&o),this.$useLineGroups()?c.className="ace_line_group":c.className="ace_line",i.push(l),s++}return i},this.update=function(e){this.$lines.moveContainer(e),this.config=e;for(var t=e.firstRow,n=e.lastRow,i=this.$lines;i.getLength();)i.pop();i.push(this.$renderLinesFragment(e,t,n))},this.$textToken={text:!0,rparen:!0,lparen:!0},this.$renderToken=function(e,t,n,i){for(var r,o=this,a=/(\t)|( +)|([\x00-\x1f\x80-\xa0\xad\u1680\u180E\u2000-\u200f\u2028\u2029\u202F\u205F\uFEFF\uFFF9-\uFFFC]+)|(\u3000)|([\u1100-\u115F\u11A3-\u11A7\u11FA-\u11FF\u2329-\u232A\u2E80-\u2E99\u2E9B-\u2EF3\u2F00-\u2FD5\u2FF0-\u2FFB\u3001-\u303E\u3041-\u3096\u3099-\u30FF\u3105-\u312D\u3131-\u318E\u3190-\u31BA\u31C0-\u31E3\u31F0-\u321E\u3220-\u3247\u3250-\u32FE\u3300-\u4DBF\u4E00-\uA48C\uA490-\uA4C6\uA960-\uA97C\uAC00-\uD7A3\uD7B0-\uD7C6\uD7CB-\uD7FB\uF900-\uFAFF\uFE10-\uFE19\uFE30-\uFE52\uFE54-\uFE66\uFE68-\uFE6B\uFF01-\uFF60\uFFE0-\uFFE6]|[\uD800-\uDBFF][\uDC00-\uDFFF])/g,l=this.dom.createFragment(this.element),c=0;r=a.exec(i);){var u=r[1],h=r[2],d=r[3],m=r[4],p=r[5];if(o.showInvisibles||!h){var g=c!=r.index?i.slice(c,r.index):"";if(c=r.index+r[0].length,g&&l.appendChild(this.dom.createTextNode(g,this.element)),u){var f=o.session.getScreenTabSize(t+r.index);l.appendChild(o.$tabStrings[f].cloneNode(!0)),t+=f-1}else h?o.showInvisibles?((v=this.dom.createElement("span")).className="ace_invisible ace_invisible_space",v.textContent=s.stringRepeat(o.SPACE_CHAR,h.length),l.appendChild(v)):l.appendChild(this.com.createTextNode(h,this.element)):d?((v=this.dom.createElement("span")).className="ace_invisible ace_invisible_space ace_invalid",v.textContent=s.stringRepeat(o.SPACE_CHAR,d.length),l.appendChild(v)):m?(t+=1,(v=this.dom.createElement("span")).style.width=2*o.config.characterWidth+"px",v.className=o.showInvisibles?"ace_cjk ace_invisible ace_invisible_space":"ace_cjk",v.textContent=o.showInvisibles?o.SPACE_CHAR:m,l.appendChild(v)):p&&(t+=1,(v=this.dom.createElement("span")).style.width=2*o.config.characterWidth+"px",v.className="ace_cjk",v.textContent=p,l.appendChild(v))}}if(l.appendChild(this.dom.createTextNode(c?i.slice(c):i,this.element)),this.$textToken[n.type])e.appendChild(l);else{var E="ace_"+n.type.replace(/\./g," ace_"),v=this.dom.createElement("span");"fold"==n.type&&(v.style.width=n.value.length*this.config.characterWidth+"px"),v.className=E,v.appendChild(l),e.appendChild(v)}return t+i.length},this.renderIndentGuide=function(e,t,n){var i=t.search(this.$indentGuideRe);if(i<=0||i>=n)return t;if(" "==t[0]){for(var r=(i-=i%this.tabSize)/this.tabSize,s=0;s=o;)a=this.$renderToken(l,a,u,h.substring(0,o-i)),h=h.substring(o-i),i=o,l=this.$createLineElement(),e.appendChild(l),l.appendChild(this.dom.createTextNode(s.stringRepeat(" ",n.indent),this.element)),a=0,o=n[++r]||Number.MAX_VALUE;0!=h.length&&(i+=h.length,a=this.$renderToken(l,a,u,h))}}n[n.length-1]>this.MAX_LINE_LENGTH&&this.$renderOverflowMessage(l,a,null,"",!0)},this.$renderSimpleLine=function(e,t){var n=0,i=t[0],r=i.value;this.displayIndentGuides&&(r=this.renderIndentGuide(e,r)),r&&(n=this.$renderToken(e,n,i,r));for(var s=1;sthis.MAX_LINE_LENGTH)return this.$renderOverflowMessage(e,n,i,r);n=this.$renderToken(e,n,i,r)}},this.$renderOverflowMessage=function(e,t,n,i,r){n&&this.$renderToken(e,t,n,i.slice(0,this.MAX_LINE_LENGTH-t));var s=this.dom.createElement("span");s.className="ace_inline_button ace_keyword ace_toggle_wrap",s.textContent=r?"":"",e.appendChild(s)},this.$renderLine=function(e,t,n){if(n||0==n||(n=this.session.getFoldLine(t)),n)var i=this.$getFoldLineTokens(t,n);else i=this.session.getTokens(t);var r=e;if(i.length){var s=this.session.getRowSplitData(t);s&&s.length?(this.$renderWrappedLine(e,i,s),r=e.lastChild):(r=e,this.$useLineGroups()&&(r=this.$createLineElement(),e.appendChild(r)),this.$renderSimpleLine(r,i))}else this.$useLineGroups()&&(r=this.$createLineElement(),e.appendChild(r));if(this.showInvisibles&&r){n&&(t=n.end.row);var o=this.dom.createElement("span");o.className="ace_invisible ace_invisible_eol",o.textContent=t==this.session.getLength()-1?this.EOF_CHAR:this.EOL_CHAR,r.appendChild(o)}},this.$getFoldLineTokens=function(e,t){var n=this.session,i=[],r=n.getTokens(e);return t.walk((function(e,t,s,o,a){null!=e?i.push({type:"fold",value:e}):(a&&(r=n.getTokens(t)),r.length&&function(e,t,n){for(var r=0,s=0;s+e[r].value.lengthn-t&&(o=o.substring(0,n-t)),i.push({type:e[r].type,value:o}),s=t+o.length,r+=1);sn?i.push({type:e[r].type,value:o.substring(0,n-s)}):i.push(e[r]),s+=o.length,r+=1}}(r,o,s))}),t.end.row,this.session.getLine(t.end.row).length),i},this.$useLineGroups=function(){return this.session.getUseWrapMode()},this.destroy=function(){}}).call(l.prototype),t.Text=l})),ace.define("ace/layer/cursor",["require","exports","module","ace/lib/dom"],(function(e,t,n){"use strict";var i=e("../lib/dom"),r=function(e){this.element=i.createElement("div"),this.element.className="ace_layer ace_cursor-layer",e.appendChild(this.element),this.isVisible=!1,this.isBlinking=!0,this.blinkInterval=1e3,this.smoothBlinking=!1,this.cursors=[],this.cursor=this.addCursor(),i.addCssClass(this.element,"ace_hidden-cursors"),this.$updateCursors=this.$updateOpacity.bind(this)};(function(){this.$updateOpacity=function(e){for(var t=this.cursors,n=t.length;n--;)i.setStyle(t[n].style,"opacity",e?"":"0")},this.$startCssAnimation=function(){for(var e=this.cursors,t=e.length;t--;)e[t].style.animationDuration=this.blinkInterval+"ms";setTimeout(function(){i.addCssClass(this.element,"ace_animate-blinking")}.bind(this))},this.$stopCssAnimation=function(){i.removeCssClass(this.element,"ace_animate-blinking")},this.$padding=0,this.setPadding=function(e){this.$padding=e},this.setSession=function(e){this.session=e},this.setBlinking=function(e){e!=this.isBlinking&&(this.isBlinking=e,this.restartTimer())},this.setBlinkInterval=function(e){e!=this.blinkInterval&&(this.blinkInterval=e,this.restartTimer())},this.setSmoothBlinking=function(e){e!=this.smoothBlinking&&(this.smoothBlinking=e,i.setCssClass(this.element,"ace_smooth-blinking",e),this.$updateCursors(!0),this.restartTimer())},this.addCursor=function(){var e=i.createElement("div");return e.className="ace_cursor",this.element.appendChild(e),this.cursors.push(e),e},this.removeCursor=function(){if(this.cursors.length>1){var e=this.cursors.pop();return e.parentNode.removeChild(e),e}},this.hideCursor=function(){this.isVisible=!1,i.addCssClass(this.element,"ace_hidden-cursors"),this.restartTimer()},this.showCursor=function(){this.isVisible=!0,i.removeCssClass(this.element,"ace_hidden-cursors"),this.restartTimer()},this.restartTimer=function(){var e=this.$updateCursors;if(clearInterval(this.intervalId),clearTimeout(this.timeoutId),this.$stopCssAnimation(),this.smoothBlinking&&i.removeCssClass(this.element,"ace_smooth-blinking"),e(!0),this.isBlinking&&this.blinkInterval&&this.isVisible)if(this.smoothBlinking&&setTimeout(function(){i.addCssClass(this.element,"ace_smooth-blinking")}.bind(this)),i.HAS_CSS_ANIMATION)this.$startCssAnimation();else{var t=function(){this.timeoutId=setTimeout((function(){e(!1)}),.6*this.blinkInterval)}.bind(this);this.intervalId=setInterval((function(){e(!0),t()}),this.blinkInterval),t()}else this.$stopCssAnimation()},this.getPixelPosition=function(e,t){if(!this.config||!this.session)return{left:0,top:0};e||(e=this.session.selection.getCursor());var n=this.session.documentToScreenPosition(e);return{left:this.$padding+(this.session.$bidiHandler.isBidiRow(n.row,e.row)?this.session.$bidiHandler.getPosLeft(n.column):n.column*this.config.characterWidth),top:(n.row-(t?this.config.firstRowScreen:0))*this.config.lineHeight}},this.isCursorInView=function(e,t){return e.top>=0&&e.tope.height+e.offset||o.top<0)&&n>1)){var a=this.cursors[r++]||this.addCursor(),l=a.style;this.drawCursor?this.drawCursor(a,o,e,t[n],this.session):this.isCursorInView(o,e)?(i.setStyle(l,"display","block"),i.translate(a,o.left,o.top),i.setStyle(l,"width",Math.round(e.characterWidth)+"px"),i.setStyle(l,"height",e.lineHeight+"px")):i.setStyle(l,"display","none")}}for(;this.cursors.length>r;)this.removeCursor();var c=this.session.getOverwrite();this.$setOverwrite(c),this.$pixelPos=o,this.restartTimer()},this.drawCursor=null,this.$setOverwrite=function(e){e!=this.overwrite&&(this.overwrite=e,e?i.addCssClass(this.element,"ace_overwrite-cursors"):i.removeCssClass(this.element,"ace_overwrite-cursors"))},this.destroy=function(){clearInterval(this.intervalId),clearTimeout(this.timeoutId)}}).call(r.prototype),t.Cursor=r})),ace.define("ace/scrollbar",["require","exports","module","ace/lib/oop","ace/lib/dom","ace/lib/event","ace/lib/event_emitter"],(function(e,t,n){"use strict";var i=e("./lib/oop"),r=e("./lib/dom"),s=e("./lib/event"),o=e("./lib/event_emitter").EventEmitter,a=32768,l=function(e){this.element=r.createElement("div"),this.element.className="ace_scrollbar ace_scrollbar"+this.classSuffix,this.inner=r.createElement("div"),this.inner.className="ace_scrollbar-inner",this.inner.textContent=" ",this.element.appendChild(this.inner),e.appendChild(this.element),this.setVisible(!1),this.skipEvent=!1,s.addListener(this.element,"scroll",this.onScroll.bind(this)),s.addListener(this.element,"mousedown",s.preventDefault)};(function(){i.implement(this,o),this.setVisible=function(e){this.element.style.display=e?"":"none",this.isVisible=e,this.coeff=1}}).call(l.prototype);var c=function(e,t){l.call(this,e),this.scrollTop=0,this.scrollHeight=0,t.$scrollbarWidth=this.width=r.scrollbarWidth(e.ownerDocument),this.inner.style.width=this.element.style.width=(this.width||15)+5+"px",this.$minWidth=0};i.inherits(c,l),function(){this.classSuffix="-v",this.onScroll=function(){if(!this.skipEvent){if(this.scrollTop=this.element.scrollTop,1!=this.coeff){var e=this.element.clientHeight/this.scrollHeight;this.scrollTop=this.scrollTop*(1-e)/(this.coeff-e)}this._emit("scroll",{data:this.scrollTop})}this.skipEvent=!1},this.getWidth=function(){return Math.max(this.isVisible?this.width:0,this.$minWidth||0)},this.setHeight=function(e){this.element.style.height=e+"px"},this.setInnerHeight=this.setScrollHeight=function(e){this.scrollHeight=e,e>a?(this.coeff=a/e,e=a):1!=this.coeff&&(this.coeff=1),this.inner.style.height=e+"px"},this.setScrollTop=function(e){this.scrollTop!=e&&(this.skipEvent=!0,this.scrollTop=e,this.element.scrollTop=e*this.coeff)}}.call(c.prototype);var u=function(e,t){l.call(this,e),this.scrollLeft=0,this.height=t.$scrollbarWidth,this.inner.style.height=this.element.style.height=(this.height||15)+5+"px"};i.inherits(u,l),function(){this.classSuffix="-h",this.onScroll=function(){this.skipEvent||(this.scrollLeft=this.element.scrollLeft,this._emit("scroll",{data:this.scrollLeft})),this.skipEvent=!1},this.getHeight=function(){return this.isVisible?this.height:0},this.setWidth=function(e){this.element.style.width=e+"px"},this.setInnerWidth=function(e){this.inner.style.width=e+"px"},this.setScrollWidth=function(e){this.inner.style.width=e+"px"},this.setScrollLeft=function(e){this.scrollLeft!=e&&(this.skipEvent=!0,this.scrollLeft=this.element.scrollLeft=e)}}.call(u.prototype),t.ScrollBar=c,t.ScrollBarV=c,t.ScrollBarH=u,t.VScrollBar=c,t.HScrollBar=u})),ace.define("ace/renderloop",["require","exports","module","ace/lib/event"],(function(e,t,n){"use strict";var i=e("./lib/event"),r=function(e,t){this.onRender=e,this.pending=!1,this.changes=0,this.$recursionLimit=2,this.window=t||window;var n=this;this._flush=function(e){n.pending=!1;var t=n.changes;if(t&&(i.blockIdle(100),n.changes=0,n.onRender(t)),n.changes){if(n.$recursionLimit--<0)return;n.schedule()}else n.$recursionLimit=2}};(function(){this.schedule=function(e){this.changes=this.changes|e,this.changes&&!this.pending&&(i.nextFrame(this._flush),this.pending=!0)},this.clear=function(e){var t=this.changes;return this.changes=0,t}}).call(r.prototype),t.RenderLoop=r})),ace.define("ace/layer/font_metrics",["require","exports","module","ace/lib/oop","ace/lib/dom","ace/lib/lang","ace/lib/event","ace/lib/useragent","ace/lib/event_emitter"],(function(e,t,n){var i=e("../lib/oop"),r=e("../lib/dom"),s=e("../lib/lang"),o=e("../lib/event"),a=e("../lib/useragent"),l=e("../lib/event_emitter").EventEmitter,c=256,u="function"==typeof ResizeObserver,h=200,d=t.FontMetrics=function(e){this.el=r.createElement("div"),this.$setMeasureNodeStyles(this.el.style,!0),this.$main=r.createElement("div"),this.$setMeasureNodeStyles(this.$main.style),this.$measureNode=r.createElement("div"),this.$setMeasureNodeStyles(this.$measureNode.style),this.el.appendChild(this.$main),this.el.appendChild(this.$measureNode),e.appendChild(this.el),this.$measureNode.innerHTML=s.stringRepeat("X",c),this.$characterSize={width:0,height:0},u?this.$addObserver():this.checkForSizeChanges()};(function(){i.implement(this,l),this.$characterSize={width:0,height:0},this.$setMeasureNodeStyles=function(e,t){e.width=e.height="auto",e.left=e.top="0px",e.visibility="hidden",e.position="absolute",e.whiteSpace="pre",a.isIE<8?e["font-family"]="inherit":e.font="inherit",e.overflow=t?"hidden":"visible"},this.checkForSizeChanges=function(e){if(void 0===e&&(e=this.$measureSizes()),e&&(this.$characterSize.width!==e.width||this.$characterSize.height!==e.height)){this.$measureNode.style.fontWeight="bold";var t=this.$measureSizes();this.$measureNode.style.fontWeight="",this.$characterSize=e,this.charSizes=Object.create(null),this.allowBoldFonts=t&&t.width===e.width&&t.height===e.height,this._emit("changeCharacterSize",{data:e})}},this.$addObserver=function(){var e=this;this.$observer=new window.ResizeObserver((function(t){var n=t[0].contentRect;e.checkForSizeChanges({height:n.height,width:n.width/c})})),this.$observer.observe(this.$measureNode)},this.$pollSizeChanges=function(){if(this.$pollSizeChangesTimer||this.$observer)return this.$pollSizeChangesTimer;var e=this;return this.$pollSizeChangesTimer=o.onIdle((function t(){e.checkForSizeChanges(),o.onIdle(t,500)}),500)},this.setPolling=function(e){e?this.$pollSizeChanges():this.$pollSizeChangesTimer&&(clearInterval(this.$pollSizeChangesTimer),this.$pollSizeChangesTimer=0)},this.$measureSizes=function(e){var t={height:(e||this.$measureNode).clientHeight,width:(e||this.$measureNode).clientWidth/c};return 0===t.width||0===t.height?null:t},this.$measureCharWidth=function(e){return this.$main.innerHTML=s.stringRepeat(e,c),this.$main.getBoundingClientRect().width/c},this.getCharacterWidth=function(e){var t=this.charSizes[e];return void 0===t&&(t=this.charSizes[e]=this.$measureCharWidth(e)/this.$characterSize.width),t},this.destroy=function(){clearInterval(this.$pollSizeChangesTimer),this.$observer&&this.$observer.disconnect(),this.el&&this.el.parentNode&&this.el.parentNode.removeChild(this.el)},this.$getZoom=function e(t){return t?(window.getComputedStyle(t).zoom||1)*e(t.parentElement):1},this.$initTransformMeasureNodes=function(){var e=function(e,t){return["div",{style:"position: absolute;top:"+e+"px;left:"+t+"px;"}]};this.els=r.buildDom([e(0,0),e(h,0),e(0,h),e(h,h)],this.el)},this.transformCoordinates=function(e,t){function n(e,t,n){var i=e[1]*t[0]-e[0]*t[1];return[(-t[1]*n[0]+t[0]*n[1])/i,(+e[1]*n[0]-e[0]*n[1])/i]}function i(e,t){return[e[0]-t[0],e[1]-t[1]]}function r(e,t){return[e[0]+t[0],e[1]+t[1]]}function s(e,t){return[e*t[0],e*t[1]]}function o(e){var t=e.getBoundingClientRect();return[t.left,t.top]}e&&(e=s(1/this.$getZoom(this.el),e)),this.els||this.$initTransformMeasureNodes();var a=o(this.els[0]),l=o(this.els[1]),c=o(this.els[2]),u=o(this.els[3]),d=n(i(u,l),i(u,c),i(r(l,c),r(u,a))),m=s(1+d[0],i(l,a)),p=s(1+d[1],i(c,a));if(t){var g=t,f=d[0]*g[0]/h+d[1]*g[1]/h+1,E=r(s(g[0],m),s(g[1],p));return r(s(1/f/h,E),a)}var v=i(e,a),_=n(i(m,s(d[0],v)),i(p,s(d[1],v)),v);return s(h,_)}}).call(d.prototype)})),ace.define("ace/virtual_renderer",["require","exports","module","ace/lib/oop","ace/lib/dom","ace/config","ace/layer/gutter","ace/layer/marker","ace/layer/text","ace/layer/cursor","ace/scrollbar","ace/scrollbar","ace/renderloop","ace/layer/font_metrics","ace/lib/event_emitter","ace/lib/useragent"],(function(e,t,n){"use strict";var i=e("./lib/oop"),r=e("./lib/dom"),s=e("./config"),o=e("./layer/gutter").Gutter,a=e("./layer/marker").Marker,l=e("./layer/text").Text,c=e("./layer/cursor").Cursor,u=e("./scrollbar").HScrollBar,h=e("./scrollbar").VScrollBar,d=e("./renderloop").RenderLoop,m=e("./layer/font_metrics").FontMetrics,p=e("./lib/event_emitter").EventEmitter,g='.ace_br1 {border-top-left-radius : 3px;}.ace_br2 {border-top-right-radius : 3px;}.ace_br3 {border-top-left-radius : 3px; border-top-right-radius: 3px;}.ace_br4 {border-bottom-right-radius: 3px;}.ace_br5 {border-top-left-radius : 3px; border-bottom-right-radius: 3px;}.ace_br6 {border-top-right-radius : 3px; border-bottom-right-radius: 3px;}.ace_br7 {border-top-left-radius : 3px; border-top-right-radius: 3px; border-bottom-right-radius: 3px;}.ace_br8 {border-bottom-left-radius : 3px;}.ace_br9 {border-top-left-radius : 3px; border-bottom-left-radius: 3px;}.ace_br10{border-top-right-radius : 3px; border-bottom-left-radius: 3px;}.ace_br11{border-top-left-radius : 3px; border-top-right-radius: 3px; border-bottom-left-radius: 3px;}.ace_br12{border-bottom-right-radius: 3px; border-bottom-left-radius: 3px;}.ace_br13{border-top-left-radius : 3px; border-bottom-right-radius: 3px; border-bottom-left-radius: 3px;}.ace_br14{border-top-right-radius : 3px; border-bottom-right-radius: 3px; border-bottom-left-radius: 3px;}.ace_br15{border-top-left-radius : 3px; border-top-right-radius: 3px; border-bottom-right-radius: 3px; border-bottom-left-radius: 3px;}.ace_editor {position: relative;overflow: hidden;font: 12px/normal \'Monaco\', \'Menlo\', \'Ubuntu Mono\', \'Consolas\', \'source-code-pro\', monospace;direction: ltr;text-align: left;-webkit-tap-highlight-color: rgba(0, 0, 0, 0);}.ace_scroller {position: absolute;overflow: hidden;top: 0;bottom: 0;background-color: inherit;-ms-user-select: none;-moz-user-select: none;-webkit-user-select: none;user-select: none;cursor: text;}.ace_content {position: absolute;box-sizing: border-box;min-width: 100%;contain: style size layout;}.ace_dragging .ace_scroller:before{position: absolute;top: 0;left: 0;right: 0;bottom: 0;content: \'\';background: rgba(250, 250, 250, 0.01);z-index: 1000;}.ace_dragging.ace_dark .ace_scroller:before{background: rgba(0, 0, 0, 0.01);}.ace_selecting, .ace_selecting * {cursor: text !important;}.ace_gutter {position: absolute;overflow : hidden;width: auto;top: 0;bottom: 0;left: 0;cursor: default;z-index: 4;-ms-user-select: none;-moz-user-select: none;-webkit-user-select: none;user-select: none;contain: style size layout;}.ace_gutter-active-line {position: absolute;left: 0;right: 0;}.ace_scroller.ace_scroll-left {box-shadow: 17px 0 16px -16px rgba(0, 0, 0, 0.4) inset;}.ace_gutter-cell {position: absolute;top: 0;left: 0;right: 0;padding-left: 19px;padding-right: 6px;background-repeat: no-repeat;}.ace_gutter-cell.ace_error {background-image: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAMAAAAoLQ9TAAABOFBMVEX/////////QRswFAb/Ui4wFAYwFAYwFAaWGAfDRymzOSH/PxswFAb/SiUwFAYwFAbUPRvjQiDllog5HhHdRybsTi3/Tyv9Tir+Syj/UC3////XurebMBIwFAb/RSHbPx/gUzfdwL3kzMivKBAwFAbbvbnhPx66NhowFAYwFAaZJg8wFAaxKBDZurf/RB6mMxb/SCMwFAYwFAbxQB3+RB4wFAb/Qhy4Oh+4QifbNRcwFAYwFAYwFAb/QRzdNhgwFAYwFAbav7v/Uy7oaE68MBK5LxLewr/r2NXewLswFAaxJw4wFAbkPRy2PyYwFAaxKhLm1tMwFAazPiQwFAaUGAb/QBrfOx3bvrv/VC/maE4wFAbRPBq6MRO8Qynew8Dp2tjfwb0wFAbx6eju5+by6uns4uH9/f36+vr/GkHjAAAAYnRSTlMAGt+64rnWu/bo8eAA4InH3+DwoN7j4eLi4xP99Nfg4+b+/u9B/eDs1MD1mO7+4PHg2MXa347g7vDizMLN4eG+Pv7i5evs/v79yu7S3/DV7/498Yv24eH+4ufQ3Ozu/v7+y13sRqwAAADLSURBVHjaZc/XDsFgGIBhtDrshlitmk2IrbHFqL2pvXf/+78DPokj7+Fz9qpU/9UXJIlhmPaTaQ6QPaz0mm+5gwkgovcV6GZzd5JtCQwgsxoHOvJO15kleRLAnMgHFIESUEPmawB9ngmelTtipwwfASilxOLyiV5UVUyVAfbG0cCPHig+GBkzAENHS0AstVF6bacZIOzgLmxsHbt2OecNgJC83JERmePUYq8ARGkJx6XtFsdddBQgZE2nPR6CICZhawjA4Fb/chv+399kfR+MMMDGOQAAAABJRU5ErkJggg==");background-repeat: no-repeat;background-position: 2px center;}.ace_gutter-cell.ace_warning {background-image: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAMAAAAoLQ9TAAAAmVBMVEX///8AAAD///8AAAAAAABPSzb/5sAAAAB/blH/73z/ulkAAAAAAAD85pkAAAAAAAACAgP/vGz/rkDerGbGrV7/pkQICAf////e0IsAAAD/oED/qTvhrnUAAAD/yHD/njcAAADuv2r/nz//oTj/p064oGf/zHAAAAA9Nir/tFIAAAD/tlTiuWf/tkIAAACynXEAAAAAAAAtIRW7zBpBAAAAM3RSTlMAABR1m7RXO8Ln31Z36zT+neXe5OzooRDfn+TZ4p3h2hTf4t3k3ucyrN1K5+Xaks52Sfs9CXgrAAAAjklEQVR42o3PbQ+CIBQFYEwboPhSYgoYunIqqLn6/z8uYdH8Vmdnu9vz4WwXgN/xTPRD2+sgOcZjsge/whXZgUaYYvT8QnuJaUrjrHUQreGczuEafQCO/SJTufTbroWsPgsllVhq3wJEk2jUSzX3CUEDJC84707djRc5MTAQxoLgupWRwW6UB5fS++NV8AbOZgnsC7BpEAAAAABJRU5ErkJggg==");background-position: 2px center;}.ace_gutter-cell.ace_info {background-image: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAAAAAA6mKC9AAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAAJ0Uk5TAAB2k804AAAAPklEQVQY02NgIB68QuO3tiLznjAwpKTgNyDbMegwisCHZUETUZV0ZqOquBpXj2rtnpSJT1AEnnRmL2OgGgAAIKkRQap2htgAAAAASUVORK5CYII=");background-position: 2px center;}.ace_dark .ace_gutter-cell.ace_info {background-image: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQBAMAAADt3eJSAAAAJFBMVEUAAAChoaGAgIAqKiq+vr6tra1ZWVmUlJSbm5s8PDxubm56enrdgzg3AAAAAXRSTlMAQObYZgAAAClJREFUeNpjYMAPdsMYHegyJZFQBlsUlMFVCWUYKkAZMxZAGdxlDMQBAG+TBP4B6RyJAAAAAElFTkSuQmCC");}.ace_scrollbar {contain: strict;position: absolute;right: 0;bottom: 0;z-index: 6;}.ace_scrollbar-inner {position: absolute;cursor: text;left: 0;top: 0;}.ace_scrollbar-v{overflow-x: hidden;overflow-y: scroll;top: 0;}.ace_scrollbar-h {overflow-x: scroll;overflow-y: hidden;left: 0;}.ace_print-margin {position: absolute;height: 100%;}.ace_text-input {position: absolute;z-index: 0;width: 0.5em;height: 1em;opacity: 0;background: transparent;-moz-appearance: none;appearance: none;border: none;resize: none;outline: none;overflow: hidden;font: inherit;padding: 0 1px;margin: 0 -1px;contain: strict;-ms-user-select: text;-moz-user-select: text;-webkit-user-select: text;user-select: text;white-space: pre!important;}.ace_text-input.ace_composition {background: transparent;color: inherit;z-index: 1000;opacity: 1;}.ace_composition_placeholder { color: transparent }.ace_composition_marker { border-bottom: 1px solid;position: absolute;border-radius: 0;margin-top: 1px;}[ace_nocontext=true] {transform: none!important;filter: none!important;perspective: none!important;clip-path: none!important;mask : none!important;contain: none!important;perspective: none!important;mix-blend-mode: initial!important;z-index: auto;}.ace_layer {z-index: 1;position: absolute;overflow: hidden;word-wrap: normal;white-space: pre;height: 100%;width: 100%;box-sizing: border-box;pointer-events: none;}.ace_gutter-layer {position: relative;width: auto;text-align: right;pointer-events: auto;height: 1000000px;contain: style size layout;}.ace_text-layer {font: inherit !important;position: absolute;height: 1000000px;width: 1000000px;contain: style size layout;}.ace_text-layer > .ace_line, .ace_text-layer > .ace_line_group {contain: style size layout;position: absolute;top: 0;left: 0;right: 0;}.ace_hidpi .ace_text-layer,.ace_hidpi .ace_gutter-layer,.ace_hidpi .ace_content,.ace_hidpi .ace_gutter {contain: strict;will-change: transform;}.ace_hidpi .ace_text-layer > .ace_line, .ace_hidpi .ace_text-layer > .ace_line_group {contain: strict;}.ace_cjk {display: inline-block;text-align: center;}.ace_cursor-layer {z-index: 4;}.ace_cursor {z-index: 4;position: absolute;box-sizing: border-box;border-left: 2px solid;transform: translatez(0);}.ace_multiselect .ace_cursor {border-left-width: 1px;}.ace_slim-cursors .ace_cursor {border-left-width: 1px;}.ace_overwrite-cursors .ace_cursor {border-left-width: 0;border-bottom: 1px solid;}.ace_hidden-cursors .ace_cursor {opacity: 0.2;}.ace_hasPlaceholder .ace_hidden-cursors .ace_cursor {opacity: 0;}.ace_smooth-blinking .ace_cursor {transition: opacity 0.18s;}.ace_animate-blinking .ace_cursor {animation-duration: 1000ms;animation-timing-function: step-end;animation-name: blink-ace-animate;animation-iteration-count: infinite;}.ace_animate-blinking.ace_smooth-blinking .ace_cursor {animation-duration: 1000ms;animation-timing-function: ease-in-out;animation-name: blink-ace-animate-smooth;}@keyframes blink-ace-animate {from, to { opacity: 1; }60% { opacity: 0; }}@keyframes blink-ace-animate-smooth {from, to { opacity: 1; }45% { opacity: 1; }60% { opacity: 0; }85% { opacity: 0; }}.ace_marker-layer .ace_step, .ace_marker-layer .ace_stack {position: absolute;z-index: 3;}.ace_marker-layer .ace_selection {position: absolute;z-index: 5;}.ace_marker-layer .ace_bracket {position: absolute;z-index: 6;}.ace_marker-layer .ace_active-line {position: absolute;z-index: 2;}.ace_marker-layer .ace_selected-word {position: absolute;z-index: 4;box-sizing: border-box;}.ace_line .ace_fold {box-sizing: border-box;display: inline-block;height: 11px;margin-top: -2px;vertical-align: middle;background-image:url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABEAAAAJCAYAAADU6McMAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAJpJREFUeNpi/P//PwOlgAXGYGRklAVSokD8GmjwY1wasKljQpYACtpCFeADcHVQfQyMQAwzwAZI3wJKvCLkfKBaMSClBlR7BOQikCFGQEErIH0VqkabiGCAqwUadAzZJRxQr/0gwiXIal8zQQPnNVTgJ1TdawL0T5gBIP1MUJNhBv2HKoQHHjqNrA4WO4zY0glyNKLT2KIfIMAAQsdgGiXvgnYAAAAASUVORK5CYII="),url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAA3CAYAAADNNiA5AAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAACJJREFUeNpi+P//fxgTAwPDBxDxD078RSX+YeEyDFMCIMAAI3INmXiwf2YAAAAASUVORK5CYII=");background-repeat: no-repeat, repeat-x;background-position: center center, top left;color: transparent;border: 1px solid black;border-radius: 2px;cursor: pointer;pointer-events: auto;}.ace_dark .ace_fold {}.ace_fold:hover{background-image:url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABEAAAAJCAYAAADU6McMAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAJpJREFUeNpi/P//PwOlgAXGYGRklAVSokD8GmjwY1wasKljQpYACtpCFeADcHVQfQyMQAwzwAZI3wJKvCLkfKBaMSClBlR7BOQikCFGQEErIH0VqkabiGCAqwUadAzZJRxQr/0gwiXIal8zQQPnNVTgJ1TdawL0T5gBIP1MUJNhBv2HKoQHHjqNrA4WO4zY0glyNKLT2KIfIMAAQsdgGiXvgnYAAAAASUVORK5CYII="),url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAA3CAYAAADNNiA5AAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAACBJREFUeNpi+P//fz4TAwPDZxDxD5X4i5fLMEwJgAADAEPVDbjNw87ZAAAAAElFTkSuQmCC");}.ace_tooltip {background-color: #FFF;background-image: linear-gradient(to bottom, transparent, rgba(0, 0, 0, 0.1));border: 1px solid gray;border-radius: 1px;box-shadow: 0 1px 2px rgba(0, 0, 0, 0.3);color: black;max-width: 100%;padding: 3px 4px;position: fixed;z-index: 999999;box-sizing: border-box;cursor: default;white-space: pre;word-wrap: break-word;line-height: normal;font-style: normal;font-weight: normal;letter-spacing: normal;pointer-events: none;}.ace_folding-enabled > .ace_gutter-cell {padding-right: 13px;}.ace_fold-widget {box-sizing: border-box;margin: 0 -12px 0 1px;display: none;width: 11px;vertical-align: top;background-image: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAUAAAAFCAYAAACNbyblAAAANElEQVR42mWKsQ0AMAzC8ixLlrzQjzmBiEjp0A6WwBCSPgKAXoLkqSot7nN3yMwR7pZ32NzpKkVoDBUxKAAAAABJRU5ErkJggg==");background-repeat: no-repeat;background-position: center;border-radius: 3px;border: 1px solid transparent;cursor: pointer;}.ace_folding-enabled .ace_fold-widget {display: inline-block; }.ace_fold-widget.ace_end {background-image: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAUAAAAFCAYAAACNbyblAAAANElEQVR42m3HwQkAMAhD0YzsRchFKI7sAikeWkrxwScEB0nh5e7KTPWimZki4tYfVbX+MNl4pyZXejUO1QAAAABJRU5ErkJggg==");}.ace_fold-widget.ace_closed {background-image: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAMAAAAGCAYAAAAG5SQMAAAAOUlEQVR42jXKwQkAMAgDwKwqKD4EwQ26sSOkVWjgIIHAzPiCgaqiqnJHZnKICBERHN194O5b9vbLuAVRL+l0YWnZAAAAAElFTkSuQmCCXA==");}.ace_fold-widget:hover {border: 1px solid rgba(0, 0, 0, 0.3);background-color: rgba(255, 255, 255, 0.2);box-shadow: 0 1px 1px rgba(255, 255, 255, 0.7);}.ace_fold-widget:active {border: 1px solid rgba(0, 0, 0, 0.4);background-color: rgba(0, 0, 0, 0.05);box-shadow: 0 1px 1px rgba(255, 255, 255, 0.8);}.ace_dark .ace_fold-widget {background-image: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAUAAAAFCAYAAACNbyblAAAAHklEQVQIW2P4//8/AzoGEQ7oGCaLLAhWiSwB146BAQCSTPYocqT0AAAAAElFTkSuQmCC");}.ace_dark .ace_fold-widget.ace_end {background-image: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAUAAAAFCAYAAACNbyblAAAAH0lEQVQIW2P4//8/AxQ7wNjIAjDMgC4AxjCVKBirIAAF0kz2rlhxpAAAAABJRU5ErkJggg==");}.ace_dark .ace_fold-widget.ace_closed {background-image: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAMAAAAFCAYAAACAcVaiAAAAHElEQVQIW2P4//+/AxAzgDADlOOAznHAKgPWAwARji8UIDTfQQAAAABJRU5ErkJggg==");}.ace_dark .ace_fold-widget:hover {box-shadow: 0 1px 1px rgba(255, 255, 255, 0.2);background-color: rgba(255, 255, 255, 0.1);}.ace_dark .ace_fold-widget:active {box-shadow: 0 1px 1px rgba(255, 255, 255, 0.2);}.ace_inline_button {border: 1px solid lightgray;display: inline-block;margin: -1px 8px;padding: 0 5px;pointer-events: auto;cursor: pointer;}.ace_inline_button:hover {border-color: gray;background: rgba(200,200,200,0.2);display: inline-block;pointer-events: auto;}.ace_fold-widget.ace_invalid {background-color: #FFB4B4;border-color: #DE5555;}.ace_fade-fold-widgets .ace_fold-widget {transition: opacity 0.4s ease 0.05s;opacity: 0;}.ace_fade-fold-widgets:hover .ace_fold-widget {transition: opacity 0.05s ease 0.05s;opacity:1;}.ace_underline {text-decoration: underline;}.ace_bold {font-weight: bold;}.ace_nobold .ace_bold {font-weight: normal;}.ace_italic {font-style: italic;}.ace_error-marker {background-color: rgba(255, 0, 0,0.2);position: absolute;z-index: 9;}.ace_highlight-marker {background-color: rgba(255, 255, 0,0.2);position: absolute;z-index: 8;}.ace_mobile-menu {position: absolute;line-height: 1.5;border-radius: 4px;-ms-user-select: none;-moz-user-select: none;-webkit-user-select: none;user-select: none;background: white;box-shadow: 1px 3px 2px grey;border: 1px solid #dcdcdc;color: black;}.ace_dark > .ace_mobile-menu {background: #333;color: #ccc;box-shadow: 1px 3px 2px grey;border: 1px solid #444;}.ace_mobile-button {padding: 2px;cursor: pointer;overflow: hidden;}.ace_mobile-button:hover {background-color: #eee;opacity:1;}.ace_mobile-button:active {background-color: #ddd;}.ace_placeholder {font-family: arial;transform: scale(0.9);opacity: 0.7;transform-origin: left;text-indent: 10px;}',f=e("./lib/useragent"),E=f.isIE;r.importCssString(g,"ace_editor.css");var v=function(e,t){var n=this;this.container=e||r.createElement("div"),r.addCssClass(this.container,"ace_editor"),r.HI_DPI&&r.addCssClass(this.container,"ace_hidpi"),this.setTheme(t),this.$gutter=r.createElement("div"),this.$gutter.className="ace_gutter",this.container.appendChild(this.$gutter),this.$gutter.setAttribute("aria-hidden",!0),this.scroller=r.createElement("div"),this.scroller.className="ace_scroller",this.container.appendChild(this.scroller),this.content=r.createElement("div"),this.content.className="ace_content",this.scroller.appendChild(this.content),this.$gutterLayer=new o(this.$gutter),this.$gutterLayer.on("changeGutterWidth",this.onGutterResize.bind(this)),this.$markerBack=new a(this.content);var i=this.$textLayer=new l(this.content);this.canvas=i.element,this.$markerFront=new a(this.content),this.$cursorLayer=new c(this.content),this.$horizScroll=!1,this.$vScroll=!1,this.scrollBar=this.scrollBarV=new h(this.container,this),this.scrollBarH=new u(this.container,this),this.scrollBarV.addEventListener("scroll",(function(e){n.$scrollAnimation||n.session.setScrollTop(e.data-n.scrollMargin.top)})),this.scrollBarH.addEventListener("scroll",(function(e){n.$scrollAnimation||n.session.setScrollLeft(e.data-n.scrollMargin.left)})),this.scrollTop=0,this.scrollLeft=0,this.cursorPos={row:0,column:0},this.$fontMetrics=new m(this.container),this.$textLayer.$setFontMetrics(this.$fontMetrics),this.$textLayer.addEventListener("changeCharacterSize",(function(e){n.updateCharacterSize(),n.onResize(!0,n.gutterWidth,n.$size.width,n.$size.height),n._signal("changeCharacterSize",e)})),this.$size={width:0,height:0,scrollerHeight:0,scrollerWidth:0,$dirty:!0},this.layerConfig={width:1,padding:0,firstRow:0,firstRowScreen:0,lastRow:0,lineHeight:0,characterWidth:0,minHeight:1,maxHeight:1,offset:0,height:1,gutterOffset:1},this.scrollMargin={left:0,right:0,top:0,bottom:0,v:0,h:0},this.margin={left:0,right:0,top:0,bottom:0,v:0,h:0},this.$keepTextAreaAtCursor=!f.isIOS,this.$loop=new d(this.$renderChanges.bind(this),this.container.ownerDocument.defaultView),this.$loop.schedule(this.CHANGE_FULL),this.updateCharacterSize(),this.setPadding(4),s.resetOptions(this),s._signal("renderer",this)};(function(){this.CHANGE_CURSOR=1,this.CHANGE_MARKER=2,this.CHANGE_GUTTER=4,this.CHANGE_SCROLL=8,this.CHANGE_LINES=16,this.CHANGE_TEXT=32,this.CHANGE_SIZE=64,this.CHANGE_MARKER_BACK=128,this.CHANGE_MARKER_FRONT=256,this.CHANGE_FULL=512,this.CHANGE_H_SCROLL=1024,i.implement(this,p),this.updateCharacterSize=function(){this.$textLayer.allowBoldFonts!=this.$allowBoldFonts&&(this.$allowBoldFonts=this.$textLayer.allowBoldFonts,this.setStyle("ace_nobold",!this.$allowBoldFonts)),this.layerConfig.characterWidth=this.characterWidth=this.$textLayer.getCharacterWidth(),this.layerConfig.lineHeight=this.lineHeight=this.$textLayer.getLineHeight(),this.$updatePrintMargin(),r.setStyle(this.scroller.style,"line-height",this.lineHeight+"px")},this.setSession=function(e){this.session&&this.session.doc.off("changeNewLineMode",this.onChangeNewLineMode),this.session=e,e&&this.scrollMargin.top&&e.getScrollTop()<=0&&e.setScrollTop(-this.scrollMargin.top),this.$cursorLayer.setSession(e),this.$markerBack.setSession(e),this.$markerFront.setSession(e),this.$gutterLayer.setSession(e),this.$textLayer.setSession(e),e&&(this.$loop.schedule(this.CHANGE_FULL),this.session.$setFontMetrics(this.$fontMetrics),this.scrollBarH.scrollLeft=this.scrollBarV.scrollTop=null,this.onChangeNewLineMode=this.onChangeNewLineMode.bind(this),this.onChangeNewLineMode(),this.session.doc.on("changeNewLineMode",this.onChangeNewLineMode))},this.updateLines=function(e,t,n){if(void 0===t&&(t=1/0),this.$changedLines?(this.$changedLines.firstRow>e&&(this.$changedLines.firstRow=e),this.$changedLines.lastRowthis.layerConfig.lastRow||this.$loop.schedule(this.CHANGE_LINES)},this.onChangeNewLineMode=function(){this.$loop.schedule(this.CHANGE_TEXT),this.$textLayer.$updateEolChar(),this.session.$bidiHandler.setEolChar(this.$textLayer.EOL_CHAR)},this.onChangeTabSize=function(){this.$loop.schedule(this.CHANGE_TEXT|this.CHANGE_MARKER),this.$textLayer.onChangeTabSize()},this.updateText=function(){this.$loop.schedule(this.CHANGE_TEXT)},this.updateFull=function(e){e?this.$renderChanges(this.CHANGE_FULL,!0):this.$loop.schedule(this.CHANGE_FULL)},this.updateFontSize=function(){this.$textLayer.checkForSizeChanges()},this.$changes=0,this.$updateSizeAsync=function(){this.$loop.pending?this.$size.$dirty=!0:this.onResize()},this.onResize=function(e,t,n,i){if(!(this.resizing>2)){this.resizing>0?this.resizing++:this.resizing=e?1:0;var r=this.container;i||(i=r.clientHeight||r.scrollHeight),n||(n=r.clientWidth||r.scrollWidth);var s=this.$updateCachedSize(e,t,n,i);if(!this.$size.scrollerHeight||!n&&!i)return this.resizing=0;e&&(this.$gutterLayer.$padding=null),e?this.$renderChanges(s|this.$changes,!0):this.$loop.schedule(s|this.$changes),this.resizing&&(this.resizing=0),this.scrollBarV.scrollLeft=this.scrollBarV.scrollTop=null}},this.$updateCachedSize=function(e,t,n,i){i-=this.$extraHeight||0;var s=0,o=this.$size,a={width:o.width,height:o.height,scrollerHeight:o.scrollerHeight,scrollerWidth:o.scrollerWidth};if(i&&(e||o.height!=i)&&(o.height=i,s|=this.CHANGE_SIZE,o.scrollerHeight=o.height,this.$horizScroll&&(o.scrollerHeight-=this.scrollBarH.getHeight()),this.scrollBarV.element.style.bottom=this.scrollBarH.getHeight()+"px",s|=this.CHANGE_SCROLL),n&&(e||o.width!=n)){s|=this.CHANGE_SIZE,o.width=n,null==t&&(t=this.$showGutter?this.$gutter.offsetWidth:0),this.gutterWidth=t,r.setStyle(this.scrollBarH.element.style,"left",t+"px"),r.setStyle(this.scroller.style,"left",t+this.margin.left+"px"),o.scrollerWidth=Math.max(0,n-t-this.scrollBarV.getWidth()-this.margin.h),r.setStyle(this.$gutter.style,"left",this.margin.left+"px");var l=this.scrollBarV.getWidth()+"px";r.setStyle(this.scrollBarH.element.style,"right",l),r.setStyle(this.scroller.style,"right",l),r.setStyle(this.scroller.style,"bottom",this.scrollBarH.getHeight()),(this.session&&this.session.getUseWrapMode()&&this.adjustWrapLimit()||e)&&(s|=this.CHANGE_FULL)}return o.$dirty=!n||!i,s&&this._signal("resize",a),s},this.onGutterResize=function(e){var t=this.$showGutter?e:0;t!=this.gutterWidth&&(this.$changes|=this.$updateCachedSize(!0,t,this.$size.width,this.$size.height)),this.session.getUseWrapMode()&&this.adjustWrapLimit()||this.$size.$dirty?this.$loop.schedule(this.CHANGE_FULL):this.$computeLayerConfig()},this.adjustWrapLimit=function(){var e=this.$size.scrollerWidth-2*this.$padding,t=Math.floor(e/this.characterWidth);return this.session.adjustWrapLimit(t,this.$showPrintMargin&&this.$printMarginColumn)},this.setAnimatedScroll=function(e){this.setOption("animatedScroll",e)},this.getAnimatedScroll=function(){return this.$animatedScroll},this.setShowInvisibles=function(e){this.setOption("showInvisibles",e),this.session.$bidiHandler.setShowInvisibles(e)},this.getShowInvisibles=function(){return this.getOption("showInvisibles")},this.getDisplayIndentGuides=function(){return this.getOption("displayIndentGuides")},this.setDisplayIndentGuides=function(e){this.setOption("displayIndentGuides",e)},this.setShowPrintMargin=function(e){this.setOption("showPrintMargin",e)},this.getShowPrintMargin=function(){return this.getOption("showPrintMargin")},this.setPrintMarginColumn=function(e){this.setOption("printMarginColumn",e)},this.getPrintMarginColumn=function(){return this.getOption("printMarginColumn")},this.getShowGutter=function(){return this.getOption("showGutter")},this.setShowGutter=function(e){return this.setOption("showGutter",e)},this.getFadeFoldWidgets=function(){return this.getOption("fadeFoldWidgets")},this.setFadeFoldWidgets=function(e){this.setOption("fadeFoldWidgets",e)},this.setHighlightGutterLine=function(e){this.setOption("highlightGutterLine",e)},this.getHighlightGutterLine=function(){return this.getOption("highlightGutterLine")},this.$updatePrintMargin=function(){if(this.$showPrintMargin||this.$printMarginEl){if(!this.$printMarginEl){var e=r.createElement("div");e.className="ace_layer ace_print-margin-layer",this.$printMarginEl=r.createElement("div"),this.$printMarginEl.className="ace_print-margin",e.appendChild(this.$printMarginEl),this.content.insertBefore(e,this.content.firstChild)}var t=this.$printMarginEl.style;t.left=Math.round(this.characterWidth*this.$printMarginColumn+this.$padding)+"px",t.visibility=this.$showPrintMargin?"visible":"hidden",this.session&&-1==this.session.$wrap&&this.adjustWrapLimit()}},this.getContainerElement=function(){return this.container},this.getMouseEventTarget=function(){return this.scroller},this.getTextAreaContainer=function(){return this.container},this.$moveTextAreaToCursor=function(){if(!this.$isMousePressed){var e=this.textarea.style,t=this.$composition;if(this.$keepTextAreaAtCursor||t){var n=this.$cursorLayer.$pixelPos;if(n){t&&t.markerRange&&(n=this.$cursorLayer.getPixelPosition(t.markerRange.start,!0));var i=this.layerConfig,s=n.top,o=n.left;s-=i.offset;var a=t&&t.useTextareaForIME?this.lineHeight:E?0:1;if(s<0||s>i.height-a)r.translate(this.textarea,0,0);else{var l=1,c=this.$size.height-a;if(t)if(t.useTextareaForIME){var u=this.textarea.value;l=this.characterWidth*this.session.$getStringScreenWidth(u)[0]}else s+=this.lineHeight+2;else s+=this.lineHeight;(o-=this.scrollLeft)>this.$size.scrollerWidth-l&&(o=this.$size.scrollerWidth-l),o+=this.gutterWidth+this.margin.left,r.setStyle(e,"height",a+"px"),r.setStyle(e,"width",l+"px"),r.translate(this.textarea,Math.min(o,this.$size.scrollerWidth-l),Math.min(s,c))}}}else r.translate(this.textarea,-100,0)}},this.getFirstVisibleRow=function(){return this.layerConfig.firstRow},this.getFirstFullyVisibleRow=function(){return this.layerConfig.firstRow+(0===this.layerConfig.offset?0:1)},this.getLastFullyVisibleRow=function(){var e=this.layerConfig,t=e.lastRow;return this.session.documentToScreenRow(t,0)*e.lineHeight-this.session.getScrollTop()>e.height-e.lineHeight?t-1:t},this.getLastVisibleRow=function(){return this.layerConfig.lastRow},this.$padding=null,this.setPadding=function(e){this.$padding=e,this.$textLayer.setPadding(e),this.$cursorLayer.setPadding(e),this.$markerFront.setPadding(e),this.$markerBack.setPadding(e),this.$loop.schedule(this.CHANGE_FULL),this.$updatePrintMargin()},this.setScrollMargin=function(e,t,n,i){var r=this.scrollMargin;r.top=0|e,r.bottom=0|t,r.right=0|i,r.left=0|n,r.v=r.top+r.bottom,r.h=r.left+r.right,r.top&&this.scrollTop<=0&&this.session&&this.session.setScrollTop(-r.top),this.updateFull()},this.setMargin=function(e,t,n,i){var r=this.margin;r.top=0|e,r.bottom=0|t,r.right=0|i,r.left=0|n,r.v=r.top+r.bottom,r.h=r.left+r.right,this.$updateCachedSize(!0,this.gutterWidth,this.$size.width,this.$size.height),this.updateFull()},this.getHScrollBarAlwaysVisible=function(){return this.$hScrollBarAlwaysVisible},this.setHScrollBarAlwaysVisible=function(e){this.setOption("hScrollBarAlwaysVisible",e)},this.getVScrollBarAlwaysVisible=function(){return this.$vScrollBarAlwaysVisible},this.setVScrollBarAlwaysVisible=function(e){this.setOption("vScrollBarAlwaysVisible",e)},this.$updateScrollBarV=function(){var e=this.layerConfig.maxHeight,t=this.$size.scrollerHeight;!this.$maxLines&&this.$scrollPastEnd&&(e-=(t-this.lineHeight)*this.$scrollPastEnd,this.scrollTop>e-t&&(e=this.scrollTop+t,this.scrollBarV.scrollTop=null)),this.scrollBarV.setScrollHeight(e+this.scrollMargin.v),this.scrollBarV.setScrollTop(this.scrollTop+this.scrollMargin.top)},this.$updateScrollBarH=function(){this.scrollBarH.setScrollWidth(this.layerConfig.width+2*this.$padding+this.scrollMargin.h),this.scrollBarH.setScrollLeft(this.scrollLeft+this.scrollMargin.left)},this.$frozen=!1,this.freeze=function(){this.$frozen=!0},this.unfreeze=function(){this.$frozen=!1},this.$renderChanges=function(e,t){if(this.$changes&&(e|=this.$changes,this.$changes=0),this.session&&this.container.offsetWidth&&!this.$frozen&&(e||t)){if(this.$size.$dirty)return this.$changes|=e,this.onResize(!0);this.lineHeight||this.$textLayer.checkForSizeChanges(),this._signal("beforeRender"),this.session&&this.session.$bidiHandler&&this.session.$bidiHandler.updateCharacterWidths(this.$fontMetrics);var n=this.layerConfig;if(e&this.CHANGE_FULL||e&this.CHANGE_SIZE||e&this.CHANGE_TEXT||e&this.CHANGE_LINES||e&this.CHANGE_SCROLL||e&this.CHANGE_H_SCROLL){if(e|=this.$computeLayerConfig()|this.$loop.clear(),n.firstRow!=this.layerConfig.firstRow&&n.firstRowScreen==this.layerConfig.firstRowScreen){var i=this.scrollTop+(n.firstRow-this.layerConfig.firstRow)*this.lineHeight;i>0&&(this.scrollTop=i,e|=this.CHANGE_SCROLL,e|=this.$computeLayerConfig()|this.$loop.clear())}n=this.layerConfig,this.$updateScrollBarV(),e&this.CHANGE_H_SCROLL&&this.$updateScrollBarH(),r.translate(this.content,-this.scrollLeft,-n.offset);var s=n.width+2*this.$padding+"px",o=n.minHeight+"px";r.setStyle(this.content.style,"width",s),r.setStyle(this.content.style,"height",o)}if(e&this.CHANGE_H_SCROLL&&(r.translate(this.content,-this.scrollLeft,-n.offset),this.scroller.className=this.scrollLeft<=0?"ace_scroller":"ace_scroller ace_scroll-left"),e&this.CHANGE_FULL)return this.$changedLines=null,this.$textLayer.update(n),this.$showGutter&&this.$gutterLayer.update(n),this.$markerBack.update(n),this.$markerFront.update(n),this.$cursorLayer.update(n),this.$moveTextAreaToCursor(),void this._signal("afterRender");if(e&this.CHANGE_SCROLL)return this.$changedLines=null,e&this.CHANGE_TEXT||e&this.CHANGE_LINES?this.$textLayer.update(n):this.$textLayer.scrollLines(n),this.$showGutter&&(e&this.CHANGE_GUTTER||e&this.CHANGE_LINES?this.$gutterLayer.update(n):this.$gutterLayer.scrollLines(n)),this.$markerBack.update(n),this.$markerFront.update(n),this.$cursorLayer.update(n),this.$moveTextAreaToCursor(),void this._signal("afterRender");e&this.CHANGE_TEXT?(this.$changedLines=null,this.$textLayer.update(n),this.$showGutter&&this.$gutterLayer.update(n)):e&this.CHANGE_LINES?(this.$updateLines()||e&this.CHANGE_GUTTER&&this.$showGutter)&&this.$gutterLayer.update(n):e&this.CHANGE_TEXT||e&this.CHANGE_GUTTER?this.$showGutter&&this.$gutterLayer.update(n):e&this.CHANGE_CURSOR&&this.$highlightGutterLine&&this.$gutterLayer.updateLineHighlight(n),e&this.CHANGE_CURSOR&&(this.$cursorLayer.update(n),this.$moveTextAreaToCursor()),e&(this.CHANGE_MARKER|this.CHANGE_MARKER_FRONT)&&this.$markerFront.update(n),e&(this.CHANGE_MARKER|this.CHANGE_MARKER_BACK)&&this.$markerBack.update(n),this._signal("afterRender")}else this.$changes|=e},this.$autosize=function(){var e=this.session.getScreenLength()*this.lineHeight,t=this.$maxLines*this.lineHeight,n=Math.min(t,Math.max((this.$minLines||1)*this.lineHeight,e))+this.scrollMargin.v+(this.$extraHeight||0);this.$horizScroll&&(n+=this.scrollBarH.getHeight()),this.$maxPixelHeight&&n>this.$maxPixelHeight&&(n=this.$maxPixelHeight);var i=!(n<=2*this.lineHeight)&&e>t;if(n!=this.desiredHeight||this.$size.height!=this.desiredHeight||i!=this.$vScroll){i!=this.$vScroll&&(this.$vScroll=i,this.scrollBarV.setVisible(i));var r=this.container.clientWidth;this.container.style.height=n+"px",this.$updateCachedSize(!0,this.$gutterWidth,r,n),this.desiredHeight=n,this._signal("autosize")}},this.$computeLayerConfig=function(){var e=this.session,t=this.$size,n=t.height<=2*this.lineHeight,i=this.session.getScreenLength()*this.lineHeight,r=this.$getLongestLine(),s=!n&&(this.$hScrollBarAlwaysVisible||t.scrollerWidth-r-2*this.$padding<0),o=this.$horizScroll!==s;o&&(this.$horizScroll=s,this.scrollBarH.setVisible(s));var a=this.$vScroll;this.$maxLines&&this.lineHeight>1&&this.$autosize();var l=t.scrollerHeight+this.lineHeight,c=!this.$maxLines&&this.$scrollPastEnd?(t.scrollerHeight-this.lineHeight)*this.$scrollPastEnd:0;i+=c;var u=this.scrollMargin;this.session.setScrollTop(Math.max(-u.top,Math.min(this.scrollTop,i-t.scrollerHeight+u.bottom))),this.session.setScrollLeft(Math.max(-u.left,Math.min(this.scrollLeft,r+2*this.$padding-t.scrollerWidth+u.right)));var h=!n&&(this.$vScrollBarAlwaysVisible||t.scrollerHeight-i+c<0||this.scrollTop>u.top),d=a!==h;d&&(this.$vScroll=h,this.scrollBarV.setVisible(h));var m,p,g=this.scrollTop%this.lineHeight,f=Math.ceil(l/this.lineHeight)-1,E=Math.max(0,Math.round((this.scrollTop-g)/this.lineHeight)),v=E+f,_=this.lineHeight;E=e.screenToDocumentRow(E,0);var C=e.getFoldLine(E);C&&(E=C.start.row),m=e.documentToScreenRow(E,0),p=e.getRowLength(E)*_,v=Math.min(e.screenToDocumentRow(v,0),e.getLength()-1),l=t.scrollerHeight+e.getRowLength(v)*_+p,g=this.scrollTop-m*_;var A=0;return(this.layerConfig.width!=r||o)&&(A=this.CHANGE_H_SCROLL),(o||d)&&(A|=this.$updateCachedSize(!0,this.gutterWidth,t.width,t.height),this._signal("scrollbarVisibilityChanged"),d&&(r=this.$getLongestLine())),this.layerConfig={width:r,padding:this.$padding,firstRow:E,firstRowScreen:m,lastRow:v,lineHeight:_,characterWidth:this.characterWidth,minHeight:l,maxHeight:i,offset:g,gutterOffset:_?Math.max(0,Math.ceil((g+t.height-t.scrollerHeight)/_)):0,height:this.$size.scrollerHeight},this.session.$bidiHandler&&this.session.$bidiHandler.setContentWidth(r-this.$padding),A},this.$updateLines=function(){if(this.$changedLines){var e=this.$changedLines.firstRow,t=this.$changedLines.lastRow;this.$changedLines=null;var n=this.layerConfig;if(!(e>n.lastRow+1||tthis.$textLayer.MAX_LINE_LENGTH&&(e=this.$textLayer.MAX_LINE_LENGTH+30),Math.max(this.$size.scrollerWidth-2*this.$padding,Math.round(e*this.characterWidth))},this.updateFrontMarkers=function(){this.$markerFront.setMarkers(this.session.getMarkers(!0)),this.$loop.schedule(this.CHANGE_MARKER_FRONT)},this.updateBackMarkers=function(){this.$markerBack.setMarkers(this.session.getMarkers()),this.$loop.schedule(this.CHANGE_MARKER_BACK)},this.addGutterDecoration=function(e,t){this.$gutterLayer.addGutterDecoration(e,t)},this.removeGutterDecoration=function(e,t){this.$gutterLayer.removeGutterDecoration(e,t)},this.updateBreakpoints=function(e){this.$loop.schedule(this.CHANGE_GUTTER)},this.setAnnotations=function(e){this.$gutterLayer.setAnnotations(e),this.$loop.schedule(this.CHANGE_GUTTER)},this.updateCursor=function(){this.$loop.schedule(this.CHANGE_CURSOR)},this.hideCursor=function(){this.$cursorLayer.hideCursor()},this.showCursor=function(){this.$cursorLayer.showCursor()},this.scrollSelectionIntoView=function(e,t,n){this.scrollCursorIntoView(e,n),this.scrollCursorIntoView(t,n)},this.scrollCursorIntoView=function(e,t,n){if(0!==this.$size.scrollerHeight){var i=this.$cursorLayer.getPixelPosition(e),r=i.left,s=i.top,o=n&&n.top||0,a=n&&n.bottom||0,l=this.$scrollAnimation?this.session.getScrollTop():this.scrollTop;l+o>s?(t&&l+o>s+this.lineHeight&&(s-=t*this.$size.scrollerHeight),0===s&&(s=-this.scrollMargin.top),this.session.setScrollTop(s)):l+this.$size.scrollerHeight-ar?(r=1-this.scrollMargin.top||t>0&&this.session.getScrollTop()+this.$size.scrollerHeight-this.layerConfig.maxHeight<-1+this.scrollMargin.bottom||e<0&&this.session.getScrollLeft()>=1-this.scrollMargin.left||e>0&&this.session.getScrollLeft()+this.$size.scrollerWidth-this.layerConfig.width<-1+this.scrollMargin.right||void 0},this.pixelToScreenCoordinates=function(e,t){var n;if(this.$hasCssTransforms){n={top:0,left:0};var i=this.$fontMetrics.transformCoordinates([e,t]);e=i[1]-this.gutterWidth-this.margin.left,t=i[0]}else n=this.scroller.getBoundingClientRect();var r=e+this.scrollLeft-n.left-this.$padding,s=r/this.characterWidth,o=Math.floor((t+this.scrollTop-n.top)/this.lineHeight),a=this.$blockCursor?Math.floor(s):Math.round(s);return{row:o,column:a,side:s-a>0?1:-1,offsetX:r}},this.screenToTextCoordinates=function(e,t){var n;if(this.$hasCssTransforms){n={top:0,left:0};var i=this.$fontMetrics.transformCoordinates([e,t]);e=i[1]-this.gutterWidth-this.margin.left,t=i[0]}else n=this.scroller.getBoundingClientRect();var r=e+this.scrollLeft-n.left-this.$padding,s=r/this.characterWidth,o=this.$blockCursor?Math.floor(s):Math.round(s),a=Math.floor((t+this.scrollTop-n.top)/this.lineHeight);return this.session.screenToDocumentPosition(a,Math.max(o,0),r)},this.textToScreenCoordinates=function(e,t){var n=this.scroller.getBoundingClientRect(),i=this.session.documentToScreenPosition(e,t),r=this.$padding+(this.session.$bidiHandler.isBidiRow(i.row,e)?this.session.$bidiHandler.getPosLeft(i.column):Math.round(i.column*this.characterWidth)),s=i.row*this.lineHeight;return{pageX:n.left+r-this.scrollLeft,pageY:n.top+s-this.scrollTop}},this.visualizeFocus=function(){r.addCssClass(this.container,"ace_focus")},this.visualizeBlur=function(){r.removeCssClass(this.container,"ace_focus")},this.showComposition=function(e){this.$composition=e,e.cssText||(e.cssText=this.textarea.style.cssText),e.useTextareaForIME=this.$useTextareaForIME,this.$useTextareaForIME?(r.addCssClass(this.textarea,"ace_composition"),this.textarea.style.cssText="",this.$moveTextAreaToCursor(),this.$cursorLayer.element.style.display="none"):e.markerId=this.session.addMarker(e.markerRange,"ace_composition_marker","text")},this.setCompositionText=function(e){var t=this.session.selection.cursor;this.addToken(e,"composition_placeholder",t.row,t.column),this.$moveTextAreaToCursor()},this.hideComposition=function(){this.$composition&&(this.$composition.markerId&&this.session.removeMarker(this.$composition.markerId),r.removeCssClass(this.textarea,"ace_composition"),this.textarea.style.cssText=this.$composition.cssText,this.$composition=null,this.$cursorLayer.element.style.display="")},this.addToken=function(e,t,n,i){var r=this.session;r.bgTokenizer.lines[n]=null;var s={type:t,value:e},o=r.getTokens(n);if(null==i)o.push(s);else for(var a=0,l=0;l50&&e.length>this.$doc.getLength()>>1?this.call("setValue",[this.$doc.getValue()]):this.emit("change",{data:e}))}}).call(l.prototype),t.UIWorkerClient=function(e,t,n){var i=null,r=!1,a=Object.create(s),c=[],u=new l({messageBuffer:c,terminate:function(){},postMessage:function(e){c.push(e),i&&(r?setTimeout(h):h())}});u.setEmitSync=function(e){r=e};var h=function(){var e=c.shift();e.command?i[e.command].apply(i,e.args):e.event&&a._signal(e.event,e.data)};return a.postMessage=function(e){u.onMessage({data:e})},a.callback=function(e,t){this.postMessage({type:"call",id:t,data:e})},a.emit=function(e,t){this.postMessage({type:"event",name:e,data:t})},o.loadModule(["worker",t],(function(e){for(i=new e[n](a);c.length;)h()})),u},t.WorkerClient=l,t.createWorker=a})),ace.define("ace/placeholder",["require","exports","module","ace/range","ace/lib/event_emitter","ace/lib/oop"],(function(e,t,n){"use strict";var i=e("./range").Range,r=e("./lib/event_emitter").EventEmitter,s=e("./lib/oop"),o=function(e,t,n,i,r,s){var o=this;this.length=t,this.session=e,this.doc=e.getDocument(),this.mainClass=r,this.othersClass=s,this.$onUpdate=this.onUpdate.bind(this),this.doc.on("change",this.$onUpdate),this.$others=i,this.$onCursorChange=function(){setTimeout((function(){o.onCursorChange()}))},this.$pos=n;var a=e.getUndoManager().$undoStack||e.getUndoManager().$undostack||{length:-1};this.$undoStackDepth=a.length,this.setup(),e.selection.on("changeCursor",this.$onCursorChange)};(function(){s.implement(this,r),this.setup=function(){var e=this,t=this.doc,n=this.session;this.selectionBefore=n.selection.toJSON(),n.selection.inMultiSelectMode&&n.selection.toSingleRange(),this.pos=t.createAnchor(this.$pos.row,this.$pos.column);var r=this.pos;r.$insertRight=!0,r.detach(),r.markerId=n.addMarker(new i(r.row,r.column,r.row,r.column+this.length),this.mainClass,null,!1),this.others=[],this.$others.forEach((function(n){var i=t.createAnchor(n.row,n.column);i.$insertRight=!0,i.detach(),e.others.push(i)})),n.setUndoSelect(!1)},this.showOtherMarkers=function(){if(!this.othersActive){var e=this.session,t=this;this.othersActive=!0,this.others.forEach((function(n){n.markerId=e.addMarker(new i(n.row,n.column,n.row,n.column+t.length),t.othersClass,null,!1)}))}},this.hideOtherMarkers=function(){if(this.othersActive){this.othersActive=!1;for(var e=0;e=this.pos.column&&t.start.column<=this.pos.column+this.length+1,s=t.start.column-this.pos.column;if(this.updateAnchors(e),r&&(this.length+=n),r&&!this.session.$fromUndo)if("insert"===e.action)for(var o=this.others.length-1;o>=0;o--){var a={row:(l=this.others[o]).row,column:l.column+s};this.doc.insertMergedLines(a,e.lines)}else if("remove"===e.action)for(o=this.others.length-1;o>=0;o--){var l;a={row:(l=this.others[o]).row,column:l.column+s},this.doc.remove(new i(a.row,a.column,a.row,a.column-n))}this.$updating=!1,this.updateMarkers()}},this.updateAnchors=function(e){this.pos.onChange(e);for(var t=this.others.length;t--;)this.others[t].onChange(e);this.updateMarkers()},this.updateMarkers=function(){if(!this.$updating){var e=this,t=this.session,n=function(n,r){t.removeMarker(n.markerId),n.markerId=t.addMarker(new i(n.row,n.column,n.row,n.column+e.length),r,null,!1)};n(this.pos,this.mainClass);for(var r=this.others.length;r--;)n(this.others[r],this.othersClass)}},this.onCursorChange=function(e){if(!this.$updating&&this.session){var t=this.session.selection.getCursor();t.row===this.pos.row&&t.column>=this.pos.column&&t.column<=this.pos.column+this.length?(this.showOtherMarkers(),this._emit("cursorEnter",e)):(this.hideOtherMarkers(),this._emit("cursorLeave",e))}},this.detach=function(){this.session.removeMarker(this.pos&&this.pos.markerId),this.hideOtherMarkers(),this.doc.removeEventListener("change",this.$onUpdate),this.session.selection.removeEventListener("changeCursor",this.$onCursorChange),this.session.setUndoSelect(!0),this.session=null},this.cancel=function(){if(-1!==this.$undoStackDepth){for(var e=this.session.getUndoManager(),t=(e.$undoStack||e.$undostack).length-this.$undoStackDepth,n=0;n1&&!this.inMultiSelectMode&&(this._signal("multiSelect"),this.inMultiSelectMode=!0,this.session.$undoSelect=!1,this.rangeList.attach(this.session)),t||this.fromOrientedRange(e)}},this.toSingleRange=function(e){e=e||this.ranges[0];var t=this.rangeList.removeAll();t.length&&this.$onRemoveRange(t),e&&this.fromOrientedRange(e)},this.substractPoint=function(e){var t=this.rangeList.substractPoint(e);if(t)return this.$onRemoveRange(t),t[0]},this.mergeOverlappingRanges=function(){var e=this.rangeList.merge();e.length&&this.$onRemoveRange(e)},this.$onAddRange=function(e){this.rangeCount=this.rangeList.ranges.length,this.ranges.unshift(e),this._signal("addRange",{range:e})},this.$onRemoveRange=function(e){if(this.rangeCount=this.rangeList.ranges.length,1==this.rangeCount&&this.inMultiSelectMode){var t=this.rangeList.ranges.pop();e.push(t),this.rangeCount=0}for(var n=e.length;n--;){var i=this.ranges.indexOf(e[n]);this.ranges.splice(i,1)}this._signal("removeRange",{ranges:e}),0===this.rangeCount&&this.inMultiSelectMode&&(this.inMultiSelectMode=!1,this._signal("singleSelect"),this.session.$undoSelect=!0,this.rangeList.detach(this.session)),(t=t||this.ranges[0])&&!t.isEqual(this.getRange())&&this.fromOrientedRange(t)},this.$initRangeList=function(){this.rangeList||(this.rangeList=new i,this.ranges=[],this.rangeCount=0)},this.getAllRanges=function(){return this.rangeCount?this.rangeList.ranges.concat():[this.getRange()]},this.splitIntoLines=function(){if(this.rangeCount>1){var e=this.rangeList.ranges,t=e[e.length-1],n=r.fromPoints(e[0].start,t.end);this.toSingleRange(),this.setSelectionRange(n,t.cursor==t.start)}else{n=this.getRange();var i=this.isBackwards(),s=n.start.row,o=n.end.row;if(s==o){if(i)var a=n.end,l=n.start;else a=n.start,l=n.end;return this.addRange(r.fromPoints(l,l)),void this.addRange(r.fromPoints(a,a))}var c=[],u=this.getLineRange(s,!0);u.start.column=n.start.column,c.push(u);for(var h=s+1;h1){var e=this.rangeList.ranges,t=e[e.length-1],n=r.fromPoints(e[0].start,t.end);this.toSingleRange(),this.setSelectionRange(n,t.cursor==t.start)}else{var i=this.session.documentToScreenPosition(this.cursor),s=this.session.documentToScreenPosition(this.anchor);this.rectangularRangeBlock(i,s).forEach(this.addRange,this)}},this.rectangularRangeBlock=function(e,t,n){var i=[],s=e.column0;)v--;if(v>0)for(var _=0;i[_].isEmpty();)_++;for(var C=v;C>=_;C--)i[C].isEmpty()&&i.splice(C,1)}return i}}.call(s.prototype);var d=e("./editor").Editor;function m(e){e.$multiselectOnSessionChange||(e.$onAddRange=e.$onAddRange.bind(e),e.$onRemoveRange=e.$onRemoveRange.bind(e),e.$onMultiSelect=e.$onMultiSelect.bind(e),e.$onSingleSelect=e.$onSingleSelect.bind(e),e.$multiselectOnSessionChange=t.onSessionChange.bind(e),e.$checkMultiselectChange=e.$checkMultiselectChange.bind(e),e.$multiselectOnSessionChange(e),e.on("changeSession",e.$multiselectOnSessionChange),e.on("mousedown",o),e.commands.addCommands(c.defaultCommands),function(e){if(e.textInput){var t=e.textInput.getElement(),n=!1;a.addListener(t,"keydown",(function(t){var r=18==t.keyCode&&!(t.ctrlKey||t.shiftKey||t.metaKey);e.$blockSelectEnabled&&r?n||(e.renderer.setMouseCursor("crosshair"),n=!0):n&&i()})),a.addListener(t,"keyup",i),a.addListener(t,"blur",i)}function i(t){n&&(e.renderer.setMouseCursor(""),n=!1)}}(e))}(function(){this.updateSelectionMarkers=function(){this.renderer.updateCursor(),this.renderer.updateBackMarkers()},this.addSelectionMarker=function(e){e.cursor||(e.cursor=e.end);var t=this.getSelectionStyle();return e.marker=this.session.addMarker(e,"ace_selection",t),this.session.$selectionMarkers.push(e),this.session.selectionMarkerCount=this.session.$selectionMarkers.length,e},this.removeSelectionMarker=function(e){if(e.marker){this.session.removeMarker(e.marker);var t=this.session.$selectionMarkers.indexOf(e);-1!=t&&this.session.$selectionMarkers.splice(t,1),this.session.selectionMarkerCount=this.session.$selectionMarkers.length}},this.removeSelectionMarkers=function(e){for(var t=this.session.$selectionMarkers,n=e.length;n--;){var i=e[n];if(i.marker){this.session.removeMarker(i.marker);var r=t.indexOf(i);-1!=r&&t.splice(r,1)}}this.session.selectionMarkerCount=t.length},this.$onAddRange=function(e){this.addSelectionMarker(e.range),this.renderer.updateCursor(),this.renderer.updateBackMarkers()},this.$onRemoveRange=function(e){this.removeSelectionMarkers(e.ranges),this.renderer.updateCursor(),this.renderer.updateBackMarkers()},this.$onMultiSelect=function(e){this.inMultiSelectMode||(this.inMultiSelectMode=!0,this.setStyle("ace_multiselect"),this.keyBinding.addKeyboardHandler(c.keyboardHandler),this.commands.setDefaultHandler("exec",this.$onMultiSelectExec),this.renderer.updateCursor(),this.renderer.updateBackMarkers())},this.$onSingleSelect=function(e){this.session.multiSelect.inVirtualMode||(this.inMultiSelectMode=!1,this.unsetStyle("ace_multiselect"),this.keyBinding.removeKeyboardHandler(c.keyboardHandler),this.commands.removeDefaultHandler("exec",this.$onMultiSelectExec),this.renderer.updateCursor(),this.renderer.updateBackMarkers(),this._emit("changeSelection"))},this.$onMultiSelectExec=function(e){var t=e.command,n=e.editor;if(n.multiSelect){if(t.multiSelectAction)"forEach"==t.multiSelectAction?i=n.forEachSelection(t,e.args):"forEachLine"==t.multiSelectAction?i=n.forEachSelection(t,e.args,!0):"single"==t.multiSelectAction?(n.exitMultiSelectMode(),i=t.exec(n,e.args||{})):i=t.multiSelectAction(n,e.args||{});else{var i=t.exec(n,e.args||{});n.multiSelect.addRange(n.multiSelect.toOrientedRange()),n.multiSelect.mergeOverlappingRanges()}return i}},this.forEachSelection=function(e,t,n){if(!this.inVirtualSelectionMode){var i,r=n&&n.keepOrder,o=1==n||n&&n.$byLines,a=this.session,l=this.selection,c=l.rangeList,u=(r?l:c).ranges;if(!u.length)return e.exec?e.exec(this,t||{}):e(this,t||{});var h=l._eventRegistry;l._eventRegistry={};var d=new s(a);this.inVirtualSelectionMode=!0;for(var m=u.length;m--;){if(o)for(;m>0&&u[m].start.row==u[m-1].end.row;)m--;d.fromOrientedRange(u[m]),d.index=m,this.selection=a.selection=d;var p=e.exec?e.exec(this,t||{}):e(this,t||{});i||void 0===p||(i=p),d.toOrientedRange(u[m])}d.detach(),this.selection=a.selection=l,this.inVirtualSelectionMode=!1,l._eventRegistry=h,l.mergeOverlappingRanges(),l.ranges[0]&&l.fromOrientedRange(l.ranges[0]);var g=this.renderer.$scrollAnimation;return this.onCursorChange(),this.onSelectionChange(),g&&g.from==g.to&&this.renderer.animateScrolling(g.from),i}},this.exitMultiSelectMode=function(){this.inMultiSelectMode&&!this.inVirtualSelectionMode&&this.multiSelect.toSingleRange()},this.getSelectedText=function(){var e="";if(this.inMultiSelectMode&&!this.inVirtualSelectionMode){for(var t=this.multiSelect.rangeList.ranges,n=[],i=0;io&&(o=n.column),iu?e.insert(i,l.stringRepeat(" ",s-u)):e.remove(new r(i.row,i.column,i.row,i.column-s+u)),t.start.column=t.end.column=o,t.start.row=t.end.row=i.row,t.cursor=t.end})),t.fromOrientedRange(n[0]),this.renderer.updateCursor(),this.renderer.updateBackMarkers()}else{var u=this.selection.getRange(),h=u.start.row,d=u.end.row,m=h==d;if(m){var p,g=this.session.getLength();do{p=this.session.getLine(d)}while(/[=:]/.test(p)&&++d0);h<0&&(h=0),d>=g&&(d=g-1)}var f=this.session.removeFullLines(h,d);f=this.$reAlignText(f,m),this.session.insert({row:h,column:0},f.join("\n")+"\n"),m||(u.start.column=0,u.end.column=f[f.length-1].length),this.selection.setRange(u)}},this.$reAlignText=function(e,t){var n,i,r,s=!0,o=!0;return e.map((function(e){var t=e.match(/(\s*)(.*?)(\s*)([=:].*)/);return t?null==n?(n=t[1].length,i=t[2].length,r=t[3].length,t):(n+i+r!=t[1].length+t[2].length+t[3].length&&(o=!1),n!=t[1].length&&(s=!1),n>t[1].length&&(n=t[1].length),it[3].length&&(r=t[3].length),t):[e]})).map(t?c:s?o?function(e){return e[2]?a(n+i-e[2].length)+e[2]+a(r)+e[4].replace(/^([=:])\s+/,"$1 "):e[0]}:c:function(e){return e[2]?a(n)+e[2]+a(r)+e[4].replace(/^([=:])\s+/,"$1 "):e[0]});function a(e){return l.stringRepeat(" ",e)}function c(e){return e[2]?a(n)+e[2]+a(i-e[2].length+r)+e[4].replace(/^([=:])\s+/,"$1 "):e[0]}}}).call(d.prototype),t.onSessionChange=function(e){var t=e.session;t&&!t.multiSelect&&(t.$selectionMarkers=[],t.selection.$initRangeList(),t.multiSelect=t.selection),this.multiSelect=t&&t.multiSelect;var n=e.oldSession;n&&(n.multiSelect.off("addRange",this.$onAddRange),n.multiSelect.off("removeRange",this.$onRemoveRange),n.multiSelect.off("multiSelect",this.$onMultiSelect),n.multiSelect.off("singleSelect",this.$onSingleSelect),n.multiSelect.lead.off("change",this.$checkMultiselectChange),n.multiSelect.anchor.off("change",this.$checkMultiselectChange)),t&&(t.multiSelect.on("addRange",this.$onAddRange),t.multiSelect.on("removeRange",this.$onRemoveRange),t.multiSelect.on("multiSelect",this.$onMultiSelect),t.multiSelect.on("singleSelect",this.$onSingleSelect),t.multiSelect.lead.on("change",this.$checkMultiselectChange),t.multiSelect.anchor.on("change",this.$checkMultiselectChange)),t&&this.inMultiSelectMode!=t.selection.inMultiSelectMode&&(t.selection.inMultiSelectMode?this.$onMultiSelect():this.$onSingleSelect())},t.MultiSelect=m,e("./config").defineOptions(d.prototype,"editor",{enableMultiselect:{set:function(e){m(this),e?(this.on("changeSession",this.$multiselectOnSessionChange),this.on("mousedown",o)):(this.off("changeSession",this.$multiselectOnSessionChange),this.off("mousedown",o))},value:!0},enableBlockSelect:{set:function(e){this.$blockSelectEnabled=e},value:!0}})})),ace.define("ace/mode/folding/fold_mode",["require","exports","module","ace/range"],(function(e,t,n){"use strict";var i=e("../../range").Range,r=t.FoldMode=function(){};(function(){this.foldingStartMarker=null,this.foldingStopMarker=null,this.getFoldWidget=function(e,t,n){var i=e.getLine(n);return this.foldingStartMarker.test(i)?"start":"markbeginend"==t&&this.foldingStopMarker&&this.foldingStopMarker.test(i)?"end":""},this.getFoldWidgetRange=function(e,t,n){return null},this.indentationBlock=function(e,t,n){var r=/\S/,s=e.getLine(t),o=s.search(r);if(-1!=o){for(var a=n||s.length,l=e.getLength(),c=t,u=t;++tc){var m=e.getLine(u).length;return new i(c,a,u,m)}}},this.openingBracketBlock=function(e,t,n,r,s){var o={row:n,column:r+1},a=e.$findClosingBracket(t,o,s);if(a){var l=e.foldWidgets[a.row];return null==l&&(l=e.getFoldWidget(a.row)),"start"==l&&a.row>o.row&&(a.row--,a.column=e.getLine(a.row).length),i.fromPoints(o,a)}},this.closingBracketBlock=function(e,t,n,r,s){var o={row:n,column:r},a=e.$findOpeningBracket(t,o);if(a)return a.column++,o.column--,i.fromPoints(a,o)}}).call(r.prototype)})),ace.define("ace/theme/textmate",["require","exports","module","ace/lib/dom"],(function(e,t,n){"use strict";t.isDark=!1,t.cssClass="ace-tm",t.cssText='.ace-tm .ace_gutter {background: #f0f0f0;color: #333;}.ace-tm .ace_print-margin {width: 1px;background: #e8e8e8;}.ace-tm .ace_fold {background-color: #6B72E6;}.ace-tm {background-color: #FFFFFF;color: black;}.ace-tm .ace_cursor {color: black;}.ace-tm .ace_invisible {color: rgb(191, 191, 191);}.ace-tm .ace_storage,.ace-tm .ace_keyword {color: blue;}.ace-tm .ace_constant {color: rgb(197, 6, 11);}.ace-tm .ace_constant.ace_buildin {color: rgb(88, 72, 246);}.ace-tm .ace_constant.ace_language {color: rgb(88, 92, 246);}.ace-tm .ace_constant.ace_library {color: rgb(6, 150, 14);}.ace-tm .ace_invalid {background-color: rgba(255, 0, 0, 0.1);color: red;}.ace-tm .ace_support.ace_function {color: rgb(60, 76, 114);}.ace-tm .ace_support.ace_constant {color: rgb(6, 150, 14);}.ace-tm .ace_support.ace_type,.ace-tm .ace_support.ace_class {color: rgb(109, 121, 222);}.ace-tm .ace_keyword.ace_operator {color: rgb(104, 118, 135);}.ace-tm .ace_string {color: rgb(3, 106, 7);}.ace-tm .ace_comment {color: rgb(76, 136, 107);}.ace-tm .ace_comment.ace_doc {color: rgb(0, 102, 255);}.ace-tm .ace_comment.ace_doc.ace_tag {color: rgb(128, 159, 191);}.ace-tm .ace_constant.ace_numeric {color: rgb(0, 0, 205);}.ace-tm .ace_variable {color: rgb(49, 132, 149);}.ace-tm .ace_xml-pe {color: rgb(104, 104, 91);}.ace-tm .ace_entity.ace_name.ace_function {color: #0000A2;}.ace-tm .ace_heading {color: rgb(12, 7, 255);}.ace-tm .ace_list {color:rgb(185, 6, 144);}.ace-tm .ace_meta.ace_tag {color:rgb(0, 22, 142);}.ace-tm .ace_string.ace_regex {color: rgb(255, 0, 0)}.ace-tm .ace_marker-layer .ace_selection {background: rgb(181, 213, 255);}.ace-tm.ace_multiselect .ace_selection.ace_start {box-shadow: 0 0 3px 0px white;}.ace-tm .ace_marker-layer .ace_step {background: rgb(252, 255, 0);}.ace-tm .ace_marker-layer .ace_stack {background: rgb(164, 229, 101);}.ace-tm .ace_marker-layer .ace_bracket {margin: -1px 0 0 -1px;border: 1px solid rgb(192, 192, 192);}.ace-tm .ace_marker-layer .ace_active-line {background: rgba(0, 0, 0, 0.07);}.ace-tm .ace_gutter-active-line {background-color : #dcdcdc;}.ace-tm .ace_marker-layer .ace_selected-word {background: rgb(250, 250, 255);border: 1px solid rgb(200, 200, 250);}.ace-tm .ace_indent-guide {background: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAACCAYAAACZgbYnAAAAE0lEQVQImWP4////f4bLly//BwAmVgd1/w11/gAAAABJRU5ErkJggg==") right repeat-y;}',t.$id="ace/theme/textmate",e("../lib/dom").importCssString(t.cssText,t.cssClass)})),ace.define("ace/line_widgets",["require","exports","module","ace/lib/oop","ace/lib/dom","ace/range"],(function(e,t,n){"use strict";e("./lib/oop");var i=e("./lib/dom");function r(e){this.session=e,this.session.widgetManager=this,this.session.getRowLength=this.getRowLength,this.session.$getWidgetScreenLength=this.$getWidgetScreenLength,this.updateOnChange=this.updateOnChange.bind(this),this.renderWidgets=this.renderWidgets.bind(this),this.measureWidgets=this.measureWidgets.bind(this),this.session._changedWidgets=[],this.$onChangeEditor=this.$onChangeEditor.bind(this),this.session.on("change",this.updateOnChange),this.session.on("changeFold",this.updateOnFold),this.session.on("changeEditor",this.$onChangeEditor)}e("./range").Range,function(){this.getRowLength=function(e){var t;return t=this.lineWidgets&&this.lineWidgets[e]&&this.lineWidgets[e].rowCount||0,this.$useWrapMode&&this.$wrapData[e]?this.$wrapData[e].length+1+t:1+t},this.$getWidgetScreenLength=function(){var e=0;return this.lineWidgets.forEach((function(t){t&&t.rowCount&&!t.hidden&&(e+=t.rowCount)})),e},this.$onChangeEditor=function(e){this.attach(e.editor)},this.attach=function(e){e&&e.widgetManager&&e.widgetManager!=this&&e.widgetManager.detach(),this.editor!=e&&(this.detach(),this.editor=e,e&&(e.widgetManager=this,e.renderer.on("beforeRender",this.measureWidgets),e.renderer.on("afterRender",this.renderWidgets)))},this.detach=function(e){var t=this.editor;if(t){this.editor=null,t.widgetManager=null,t.renderer.off("beforeRender",this.measureWidgets),t.renderer.off("afterRender",this.renderWidgets);var n=this.session.lineWidgets;n&&n.forEach((function(e){e&&e.el&&e.el.parentNode&&(e._inDocument=!1,e.el.parentNode.removeChild(e.el))}))}},this.updateOnFold=function(e,t){var n=t.lineWidgets;if(n&&e.action){for(var i=e.data,r=i.start.row,s=i.end.row,o="add"==e.action,a=r+1;a0&&!i[r];)r--;this.firstRow=n.firstRow,this.lastRow=n.lastRow,t.$cursorLayer.config=n;for(var o=r;o<=s;o++){var a=i[o];if(a&&a.el)if(a.hidden)a.el.style.top=-100-(a.pixelHeight||0)+"px";else{a._inDocument||(a._inDocument=!0,t.container.appendChild(a.el));var l=t.$cursorLayer.getPixelPosition({row:o,column:0},!0).top;a.coverLine||(l+=n.lineHeight*this.session.getRowLineCount(a.row)),a.el.style.top=l-n.offset+"px";var c=a.coverGutter?0:t.gutterWidth;a.fixedWidth||(c-=t.scrollLeft),a.el.style.left=c+"px",a.fullWidth&&a.screenWidth&&(a.el.style.minWidth=n.width+2*n.padding+"px"),a.fixedWidth?a.el.style.right=t.scrollBar.getWidth()+"px":a.el.style.right=""}}}}}.call(r.prototype),t.LineWidgets=r})),ace.define("ace/ext/error_marker",["require","exports","module","ace/line_widgets","ace/lib/dom","ace/range"],(function(e,t,n){"use strict";var i=e("../line_widgets").LineWidgets,r=e("../lib/dom"),s=e("../range").Range;t.showErrorMarker=function(e,t){var n=e.session;n.widgetManager||(n.widgetManager=new i(n),n.widgetManager.attach(e));var o=e.getCursorPosition(),a=o.row,l=n.widgetManager.getWidgetsAtRow(a).filter((function(e){return"errorMarker"==e.type}))[0];l?l.destroy():a-=t;var c,u=function(e,t,n){var i=e.getAnnotations().sort(s.comparePoints);if(i.length){var r=function(e,t,n){for(var i=0,r=e.length-1;i<=r;){var s=i+r>>1,o=n(t,e[s]);if(o>0)i=s+1;else{if(!(o<0))return s;r=s-1}}return-(i+1)}(i,{row:t,column:-1},s.comparePoints);r<0&&(r=-r-1),r>=i.length?r=n>0?0:i.length-1:0===r&&n<0&&(r=i.length-1);var o=i[r];if(o&&n){if(o.row===t){do{o=i[r+=n]}while(o&&o.row===t);if(!o)return i.slice()}var a=[];t=o.row;do{a[n<0?"unshift":"push"](o),o=i[r+=n]}while(o&&o.row==t);return a.length&&a}}}(n,a,t);if(u){var h=u[0];o.column=(h.pos&&"number"!=typeof h.column?h.pos.sc:h.column)||0,o.row=h.row,c=e.renderer.$gutterLayer.$annotations[o.row]}else{if(l)return;c={text:["Looks good!"],className:"ace_ok"}}e.session.unfold(o.row),e.selection.moveToPosition(o);var d={row:o.row,fixedWidth:!0,coverGutter:!0,el:r.createElement("div"),type:"errorMarker"},m=d.el.appendChild(r.createElement("div")),p=d.el.appendChild(r.createElement("div"));p.className="error_widget_arrow "+c.className;var g=e.renderer.$cursorLayer.getPixelPosition(o).left;p.style.left=g+e.renderer.gutterWidth-5+"px",d.el.className="error_widget_wrapper",m.className="error_widget "+c.className,m.innerHTML=c.text.join("
"),m.appendChild(r.createElement("div"));var f=function(e,t,n){if(0===t&&("esc"===n||"return"===n))return d.destroy(),{command:"null"}};d.destroy=function(){e.$mouseHandler.isMousePressed||(e.keyBinding.removeKeyboardHandler(f),n.widgetManager.removeLineWidget(d),e.off("changeSelection",d.destroy),e.off("changeSession",d.destroy),e.off("mouseup",d.destroy),e.off("change",d.destroy))},e.keyBinding.addKeyboardHandler(f),e.on("changeSelection",d.destroy),e.on("changeSession",d.destroy),e.on("mouseup",d.destroy),e.on("change",d.destroy),e.session.widgetManager.addLineWidget(d),d.el.onmousedown=e.focus.bind(e),e.renderer.scrollCursorIntoView(null,.5,{bottom:d.el.offsetHeight})},r.importCssString(" .error_widget_wrapper { background: inherit; color: inherit; border:none } .error_widget { border-top: solid 2px; border-bottom: solid 2px; margin: 5px 0; padding: 10px 40px; white-space: pre-wrap; } .error_widget.ace_error, .error_widget_arrow.ace_error{ border-color: #ff5a5a } .error_widget.ace_warning, .error_widget_arrow.ace_warning{ border-color: #F1D817 } .error_widget.ace_info, .error_widget_arrow.ace_info{ border-color: #5a5a5a } .error_widget.ace_ok, .error_widget_arrow.ace_ok{ border-color: #5aaa5a } .error_widget_arrow { position: absolute; border: solid 5px; border-top-color: transparent!important; border-right-color: transparent!important; border-left-color: transparent!important; top: -5px; }","")})),ace.define("ace/ace",["require","exports","module","ace/lib/fixoldbrowsers","ace/lib/dom","ace/lib/event","ace/range","ace/editor","ace/edit_session","ace/undomanager","ace/virtual_renderer","ace/worker/worker_client","ace/keyboard/hash_handler","ace/placeholder","ace/multi_select","ace/mode/folding/fold_mode","ace/theme/textmate","ace/ext/error_marker","ace/config"],(function(e,t,i){"use strict";e("./lib/fixoldbrowsers");var r=e("./lib/dom"),s=e("./lib/event"),o=e("./range").Range,a=e("./editor").Editor,l=e("./edit_session").EditSession,c=e("./undomanager").UndoManager,u=e("./virtual_renderer").VirtualRenderer;e("./worker/worker_client"),e("./keyboard/hash_handler"),e("./placeholder"),e("./multi_select"),e("./mode/folding/fold_mode"),e("./theme/textmate"),e("./ext/error_marker"),t.config=e("./config"),t.require=e,t.define=n.amdD,t.edit=function(e,n){if("string"==typeof e){var i=e;if(!(e=document.getElementById(i)))throw new Error("ace.edit can't find div #"+i)}if(e&&e.env&&e.env.editor instanceof a)return e.env.editor;var o="";if(e&&/input|textarea/i.test(e.tagName)){var l=e;o=l.value,e=r.createElement("pre"),l.parentNode.replaceChild(e,l)}else e&&(o=e.textContent,e.innerHTML="");var c=t.createEditSession(o),h=new a(new u(e),c,n),d={document:c,editor:h,onResize:h.resize.bind(h,null)};return l&&(d.textarea=l),s.addListener(window,"resize",d.onResize),h.on("destroy",(function(){s.removeListener(window,"resize",d.onResize),d.editor.container.env=null})),h.container.env=h.env=d,h},t.createEditSession=function(e,t){var n=new l(e,t);return n.setUndoManager(new c),n},t.Range=o,t.Editor=a,t.EditSession=l,t.UndoManager=c,t.VirtualRenderer=u,t.version=t.config.version})),ace.require(["ace/ace"],(function(t){for(var n in t&&(t.config.init(!0),t.define=ace.define),window.ace||(window.ace=t),t)t.hasOwnProperty(n)&&(window.ace[n]=t[n]);window.ace.default=window.ace,e&&(e.exports=window.ace)})),e.exports={ace}},655:(e,t,n)=>{"use strict";var i=n(379),r=n.n(i),s=n(795),o=n.n(s),a=n(569),l=n.n(a),c=n(565),u=n.n(c),h=n(216),d=n.n(h),m=n(589),p=n.n(m),g=n(827),f={};f.styleTagTransform=p(),f.setAttributes=u(),f.insert=l().bind(null,"html"),f.domAPI=o(),f.insertStyleElement=d(),r()(g.Z,f),g.Z&&g.Z.locals&&g.Z.locals},379:e=>{"use strict";var t=[];function n(e){for(var n=-1,i=0;i{"use strict";var t={};e.exports=function(e,n){var i=function(e){if(void 0===t[e]){var n=document.querySelector(e);if(window.HTMLIFrameElement&&n instanceof window.HTMLIFrameElement)try{n=n.contentDocument.head}catch(e){n=null}t[e]=n}return t[e]}(e);if(!i)throw new Error("Couldn't find a style target. This probably means that the value for the 'insert' parameter is invalid.");i.appendChild(n)}},216:e=>{"use strict";e.exports=function(e){var t=document.createElement("style");return e.setAttributes(t,e.attributes),e.insert(t,e.options),t}},565:(e,t,n)=>{"use strict";e.exports=function(e){var t=n.nc;t&&e.setAttribute("nonce",t)}},795:e=>{"use strict";e.exports=function(e){var t=e.insertStyleElement(e);return{update:function(n){!function(e,t,n){var i="";n.supports&&(i+="@supports (".concat(n.supports,") {")),n.media&&(i+="@media ".concat(n.media," {"));var r=void 0!==n.layer;r&&(i+="@layer".concat(n.layer.length>0?" ".concat(n.layer):""," {")),i+=n.css,r&&(i+="}"),n.media&&(i+="}"),n.supports&&(i+="}");var s=n.sourceMap;s&&"undefined"!=typeof btoa&&(i+="\n/*# sourceMappingURL=data:application/json;base64,".concat(btoa(unescape(encodeURIComponent(JSON.stringify(s))))," */")),t.styleTagTransform(i,e,t.options)}(t,e,n)},remove:function(){!function(e){if(null===e.parentNode)return!1;e.parentNode.removeChild(e)}(t)}}}},589:e=>{"use strict";e.exports=function(e,t){if(t.styleSheet)t.styleSheet.cssText=e;else{for(;t.firstChild;)t.removeChild(t.firstChild);t.appendChild(document.createTextNode(e))}}},986:(e,t,n)=>{"use strict";n.r(t),n.d(t,{EmbeddedFrontend:()=>qt,Spector:()=>Zt});class i{static isBuildableProgram(e){return!!e&&!!e[this.rebuildProgramFunctionName]}static rebuildProgram(e,t,n,i,r){this.isBuildableProgram(e)&&e[this.rebuildProgramFunctionName](t,n,i,r)}}var r;i.rebuildProgramFunctionName="__SPECTOR_rebuildProgram",function(e){e[e.noLog=0]="noLog",e[e.error=1]="error",e[e.warning=2]="warning",e[e.info=3]="info"}(r||(r={}));class s{static error(e,...t){this.level>0&&console.error(e,t)}static warn(e,...t){this.level>1&&console.warn(e,t)}static info(e,...t){this.level>2&&console.log(e,t)}}s.level=r.warning;class o{constructor(){this.callbacks=[],this.counter=-1}add(e,t){return this.counter++,t&&(e=e.bind(t)),this.callbacks[this.counter]=e,this.counter}remove(e){delete this.callbacks[e]}clear(){this.callbacks={}}trigger(e){for(const t in this.callbacks)this.callbacks.hasOwnProperty(t)&&this.callbacks[t](e)}}class a{constructor(){if(window.performance&&window.performance.now)this.nowFunction=this.dateBasedPerformanceNow.bind(this);else{const e=new Date;this.nowFunction=e.getTime.bind(e)}}dateBasedPerformanceNow(){return performance.timing.navigationStart+performance.now()}static get now(){return a.instance.nowFunction()}}a.instance=new a;class l{constructor(e){this.options=e}appendAnalysis(e){e.analyses=e.analyses||[];const t=this.getAnalysis(e);e.analyses.push(t)}getAnalysis(e){const t={analyserName:this.analyserName};return this.appendToAnalysis(e,t),t}}class c extends l{get analyserName(){return c.analyserName}appendToAnalysis(e,t){if(!e.commands)return;const n={};for(const t of e.commands)n[t.name]=n[t.name]||0,n[t.name]++;const i=Object.keys(n).map((e=>[e,n[e]]));i.sort(((e,t)=>{const n=t[1]-e[1];return 0===n?e[0].localeCompare(t[0]):n}));for(const e of i)t[e[0]]=e[1]}}c.analyserName="Commands";const u=["drawArrays","drawElements","drawArraysInstanced","drawArraysInstancedANGLE","drawElementsInstanced","drawElementsInstancedANGLE","drawRangeElements","multiDrawArraysWEBGL","multiDrawElementsWEBGL","multiDrawArraysInstancedWEBGL","multiDrawElementsInstancedWEBGL","multiDrawArraysInstancedBaseInstanceWEBGL","multiDrawElementsInstancedBaseVertexBaseInstanceWEBGL","drawArraysInstancedBaseInstanceWEBGL","drawElementsInstancedBaseVertexBaseInstanceWEBGL"];class h extends l{get analyserName(){return h.analyserName}appendToAnalysis(e,t){if(e.commands){t.total=e.commands.length,t.draw=0,t.clear=0;for(const n of e.commands)"clear"===n.name?t.clear++:u.indexOf(n.name)>-1&&t.draw++}}}h.analyserName="CommandsSummary";class d{static isWebGlConstant(e){return null!==p[e]&&void 0!==p[e]}static stringifyWebGlConstant(e,t){if(null==e)return"";if(0===e){return this.zeroMeaningByCommand[t]||"0"}if(1===e){return this.oneMeaningByCommand[t]||"1"}const n=p[e];return n?n.name:e+""}}d.DEPTH_BUFFER_BIT={name:"DEPTH_BUFFER_BIT",value:256,description:"Passed to clear to clear the current depth buffer."},d.STENCIL_BUFFER_BIT={name:"STENCIL_BUFFER_BIT",value:1024,description:"Passed to clear to clear the current stencil buffer."},d.COLOR_BUFFER_BIT={name:"COLOR_BUFFER_BIT",value:16384,description:"Passed to clear to clear the current color buffer."},d.POINTS={name:"POINTS",value:0,description:"Passed to drawElements or drawArrays to draw single points."},d.LINES={name:"LINES",value:1,description:"Passed to drawElements or drawArrays to draw lines. Each vertex connects to the one after it."},d.LINE_LOOP={name:"LINE_LOOP",value:2,description:"Passed to drawElements or drawArrays to draw lines. Each set of two vertices is treated as a separate line segment."},d.LINE_STRIP={name:"LINE_STRIP",value:3,description:"Passed to drawElements or drawArrays to draw a connected group of line segments from the first vertex to the last."},d.TRIANGLES={name:"TRIANGLES",value:4,description:"Passed to drawElements or drawArrays to draw triangles. Each set of three vertices creates a separate triangle."},d.TRIANGLE_STRIP={name:"TRIANGLE_STRIP",value:5,description:"Passed to drawElements or drawArrays to draw a connected group of triangles."},d.TRIANGLE_FAN={name:"TRIANGLE_FAN",value:6,description:"Passed to drawElements or drawArrays to draw a connected group of triangles. Each vertex connects to the previous and the first vertex in the fan."},d.ZERO={name:"ZERO",value:0,description:"Passed to blendFunc or blendFuncSeparate to turn off a component."},d.ONE={name:"ONE",value:1,description:"Passed to blendFunc or blendFuncSeparate to turn on a component."},d.SRC_COLOR={name:"SRC_COLOR",value:768,description:"Passed to blendFunc or blendFuncSeparate to multiply a component by the source elements color."},d.ONE_MINUS_SRC_COLOR={name:"ONE_MINUS_SRC_COLOR",value:769,description:"Passed to blendFunc or blendFuncSeparate to multiply a component by one minus the source elements color."},d.SRC_ALPHA={name:"SRC_ALPHA",value:770,description:"Passed to blendFunc or blendFuncSeparate to multiply a component by the source's alpha."},d.ONE_MINUS_SRC_ALPHA={name:"ONE_MINUS_SRC_ALPHA",value:771,description:"Passed to blendFunc or blendFuncSeparate to multiply a component by one minus the source's alpha."},d.DST_ALPHA={name:"DST_ALPHA",value:772,description:"Passed to blendFunc or blendFuncSeparate to multiply a component by the destination's alpha."},d.ONE_MINUS_DST_ALPHA={name:"ONE_MINUS_DST_ALPHA",value:773,description:"Passed to blendFunc or blendFuncSeparate to multiply a component by one minus the destination's alpha."},d.DST_COLOR={name:"DST_COLOR",value:774,description:"Passed to blendFunc or blendFuncSeparate to multiply a component by the destination's color."},d.ONE_MINUS_DST_COLOR={name:"ONE_MINUS_DST_COLOR",value:775,description:"Passed to blendFunc or blendFuncSeparate to multiply a component by one minus the destination's color."},d.SRC_ALPHA_SATURATE={name:"SRC_ALPHA_SATURATE",value:776,description:"Passed to blendFunc or blendFuncSeparate to multiply a component by the minimum of source's alpha or one minus the destination's alpha."},d.CONSTANT_COLOR={name:"CONSTANT_COLOR",value:32769,description:"Passed to blendFunc or blendFuncSeparate to specify a constant color blend function."},d.ONE_MINUS_CONSTANT_COLOR={name:"ONE_MINUS_CONSTANT_COLOR",value:32770,description:"Passed to blendFunc or blendFuncSeparate to specify one minus a constant color blend function."},d.CONSTANT_ALPHA={name:"CONSTANT_ALPHA",value:32771,description:"Passed to blendFunc or blendFuncSeparate to specify a constant alpha blend function."},d.ONE_MINUS_CONSTANT_ALPHA={name:"ONE_MINUS_CONSTANT_ALPHA",value:32772,description:"Passed to blendFunc or blendFuncSeparate to specify one minus a constant alpha blend function."},d.FUNC_ADD={name:"FUNC_ADD",value:32774,description:"Passed to blendEquation or blendEquationSeparate to set an addition blend function."},d.FUNC_SUBSTRACT={name:"FUNC_SUBSTRACT",value:32778,description:"Passed to blendEquation or blendEquationSeparate to specify a subtraction blend function (source - destination)."},d.FUNC_REVERSE_SUBTRACT={name:"FUNC_REVERSE_SUBTRACT",value:32779,description:"Passed to blendEquation or blendEquationSeparate to specify a reverse subtraction blend function (destination - source)."},d.BLEND_EQUATION={name:"BLEND_EQUATION",value:32777,description:"Passed to getParameter to get the current RGB blend function."},d.BLEND_EQUATION_RGB={name:"BLEND_EQUATION_RGB",value:32777,description:"Passed to getParameter to get the current RGB blend function. Same as BLEND_EQUATION"},d.BLEND_EQUATION_ALPHA={name:"BLEND_EQUATION_ALPHA",value:34877,description:"Passed to getParameter to get the current alpha blend function. Same as BLEND_EQUATION"},d.BLEND_DST_RGB={name:"BLEND_DST_RGB",value:32968,description:"Passed to getParameter to get the current destination RGB blend function."},d.BLEND_SRC_RGB={name:"BLEND_SRC_RGB",value:32969,description:"Passed to getParameter to get the current destination RGB blend function."},d.BLEND_DST_ALPHA={name:"BLEND_DST_ALPHA",value:32970,description:"Passed to getParameter to get the current destination alpha blend function."},d.BLEND_SRC_ALPHA={name:"BLEND_SRC_ALPHA",value:32971,description:"Passed to getParameter to get the current source alpha blend function."},d.BLEND_COLOR={name:"BLEND_COLOR",value:32773,description:"Passed to getParameter to return a the current blend color."},d.ARRAY_BUFFER_BINDING={name:"ARRAY_BUFFER_BINDING",value:34964,description:"Passed to getParameter to get the array buffer binding."},d.ELEMENT_ARRAY_BUFFER_BINDING={name:"ELEMENT_ARRAY_BUFFER_BINDING",value:34965,description:"Passed to getParameter to get the current element array buffer."},d.LINE_WIDTH={name:"LINE_WIDTH",value:2849,description:"Passed to getParameter to get the current lineWidth (set by the lineWidth method)."},d.ALIASED_POINT_SIZE_RANGE={name:"ALIASED_POINT_SIZE_RANGE",value:33901,description:"Passed to getParameter to get the current size of a point drawn with gl.POINTS"},d.ALIASED_LINE_WIDTH_RANGE={name:"ALIASED_LINE_WIDTH_RANGE",value:33902,description:"Passed to getParameter to get the range of available widths for a line. Returns a length-2 array with the lo value at 0, and hight at 1."},d.CULL_FACE_MODE={name:"CULL_FACE_MODE",value:2885,description:"Passed to getParameter to get the current value of cullFace. Should return FRONT, BACK, or FRONT_AND_BACK"},d.FRONT_FACE={name:"FRONT_FACE",value:2886,description:"Passed to getParameter to determine the current value of frontFace. Should return CW or CCW."},d.DEPTH_RANGE={name:"DEPTH_RANGE",value:2928,description:"Passed to getParameter to return a length-2 array of floats giving the current depth range."},d.DEPTH_WRITEMASK={name:"DEPTH_WRITEMASK",value:2930,description:"Passed to getParameter to determine if the depth write mask is enabled."},d.DEPTH_CLEAR_VALUE={name:"DEPTH_CLEAR_VALUE",value:2931,description:"Passed to getParameter to determine the current depth clear value."},d.DEPTH_FUNC={name:"DEPTH_FUNC",value:2932,description:"Passed to getParameter to get the current depth function. Returns NEVER, ALWAYS, LESS, EQUAL, LEQUAL, GREATER, GEQUAL, or NOTEQUAL."},d.STENCIL_CLEAR_VALUE={name:"STENCIL_CLEAR_VALUE",value:2961,description:"Passed to getParameter to get the value the stencil will be cleared to."},d.STENCIL_FUNC={name:"STENCIL_FUNC",value:2962,description:"Passed to getParameter to get the current stencil function. Returns NEVER, ALWAYS, LESS, EQUAL, LEQUAL, GREATER, GEQUAL, or NOTEQUAL."},d.STENCIL_FAIL={name:"STENCIL_FAIL",value:2964,description:"Passed to getParameter to get the current stencil fail function. Should return KEEP, REPLACE, INCR, DECR, INVERT, INCR_WRAP, or DECR_WRAP."},d.STENCIL_PASS_DEPTH_FAIL={name:"STENCIL_PASS_DEPTH_FAIL",value:2965,description:"Passed to getParameter to get the current stencil fail function should the depth buffer test fail. Should return KEEP, REPLACE, INCR, DECR, INVERT, INCR_WRAP, or DECR_WRAP."},d.STENCIL_PASS_DEPTH_PASS={name:"STENCIL_PASS_DEPTH_PASS",value:2966,description:"Passed to getParameter to get the current stencil fail function should the depth buffer test pass. Should return KEEP, REPLACE, INCR, DECR, INVERT, INCR_WRAP, or DECR_WRAP."},d.STENCIL_REF={name:"STENCIL_REF",value:2967,description:"Passed to getParameter to get the reference value used for stencil tests."},d.STENCIL_VALUE_MASK={name:"STENCIL_VALUE_MASK",value:2963,description:" "},d.STENCIL_WRITEMASK={name:"STENCIL_WRITEMASK",value:2968,description:" "},d.STENCIL_BACK_FUNC={name:"STENCIL_BACK_FUNC",value:34816,description:" "},d.STENCIL_BACK_FAIL={name:"STENCIL_BACK_FAIL",value:34817,description:" "},d.STENCIL_BACK_PASS_DEPTH_FAIL={name:"STENCIL_BACK_PASS_DEPTH_FAIL",value:34818,description:" "},d.STENCIL_BACK_PASS_DEPTH_PASS={name:"STENCIL_BACK_PASS_DEPTH_PASS",value:34819,description:" "},d.STENCIL_BACK_REF={name:"STENCIL_BACK_REF",value:36003,description:" "},d.STENCIL_BACK_VALUE_MASK={name:"STENCIL_BACK_VALUE_MASK",value:36004,description:" "},d.STENCIL_BACK_WRITEMASK={name:"STENCIL_BACK_WRITEMASK",value:36005,description:" "},d.VIEWPORT={name:"VIEWPORT",value:2978,description:"Returns an Int32Array with four elements for the current viewport dimensions."},d.SCISSOR_BOX={name:"SCISSOR_BOX",value:3088,description:"Returns an Int32Array with four elements for the current scissor box dimensions."},d.COLOR_CLEAR_VALUE={name:"COLOR_CLEAR_VALUE",value:3106,description:" "},d.COLOR_WRITEMASK={name:"COLOR_WRITEMASK",value:3107,description:" "},d.UNPACK_ALIGNMENT={name:"UNPACK_ALIGNMENT",value:3317,description:" "},d.PACK_ALIGNMENT={name:"PACK_ALIGNMENT",value:3333,description:" "},d.MAX_TEXTURE_SIZE={name:"MAX_TEXTURE_SIZE",value:3379,description:" "},d.MAX_VIEWPORT_DIMS={name:"MAX_VIEWPORT_DIMS",value:3386,description:" "},d.SUBPIXEL_BITS={name:"SUBPIXEL_BITS",value:3408,description:" "},d.RED_BITS={name:"RED_BITS",value:3410,description:" "},d.GREEN_BITS={name:"GREEN_BITS",value:3411,description:" "},d.BLUE_BITS={name:"BLUE_BITS",value:3412,description:" "},d.ALPHA_BITS={name:"ALPHA_BITS",value:3413,description:" "},d.DEPTH_BITS={name:"DEPTH_BITS",value:3414,description:" "},d.STENCIL_BITS={name:"STENCIL_BITS",value:3415,description:" "},d.POLYGON_OFFSET_UNITS={name:"POLYGON_OFFSET_UNITS",value:10752,description:" "},d.POLYGON_OFFSET_FACTOR={name:"POLYGON_OFFSET_FACTOR",value:32824,description:" "},d.TEXTURE_BINDING_2D={name:"TEXTURE_BINDING_2D",value:32873,description:" "},d.SAMPLE_BUFFERS={name:"SAMPLE_BUFFERS",value:32936,description:" "},d.SAMPLES={name:"SAMPLES",value:32937,description:" "},d.SAMPLE_COVERAGE_VALUE={name:"SAMPLE_COVERAGE_VALUE",value:32938,description:" "},d.SAMPLE_COVERAGE_INVERT={name:"SAMPLE_COVERAGE_INVERT",value:32939,description:" "},d.COMPRESSED_TEXTURE_FORMATS={name:"COMPRESSED_TEXTURE_FORMATS",value:34467,description:" "},d.VENDOR={name:"VENDOR",value:7936,description:" "},d.RENDERER={name:"RENDERER",value:7937,description:" "},d.VERSION={name:"VERSION",value:7938,description:" "},d.IMPLEMENTATION_COLOR_READ_TYPE={name:"IMPLEMENTATION_COLOR_READ_TYPE",value:35738,description:" "},d.IMPLEMENTATION_COLOR_READ_FORMAT={name:"IMPLEMENTATION_COLOR_READ_FORMAT",value:35739,description:" "},d.BROWSER_DEFAULT_WEBGL={name:"BROWSER_DEFAULT_WEBGL",value:37444,description:" "},d.STATIC_DRAW={name:"STATIC_DRAW",value:35044,description:"Passed to bufferData as a hint about whether the contents of the buffer are likely to be used often and not change often."},d.STREAM_DRAW={name:"STREAM_DRAW",value:35040,description:"Passed to bufferData as a hint about whether the contents of the buffer are likely to not be used often."},d.DYNAMIC_DRAW={name:"DYNAMIC_DRAW",value:35048,description:"Passed to bufferData as a hint about whether the contents of the buffer are likely to be used often and change often."},d.ARRAY_BUFFER={name:"ARRAY_BUFFER",value:34962,description:"Passed to bindBuffer or bufferData to specify the type of buffer being used."},d.ELEMENT_ARRAY_BUFFER={name:"ELEMENT_ARRAY_BUFFER",value:34963,description:"Passed to bindBuffer or bufferData to specify the type of buffer being used."},d.BUFFER_SIZE={name:"BUFFER_SIZE",value:34660,description:"Passed to getBufferParameter to get a buffer's size."},d.BUFFER_USAGE={name:"BUFFER_USAGE",value:34661,description:"Passed to getBufferParameter to get the hint for the buffer passed in when it was created."},d.CURRENT_VERTEX_ATTRIB={name:"CURRENT_VERTEX_ATTRIB",value:34342,description:"Passed to getVertexAttrib to read back the current vertex attribute."},d.VERTEX_ATTRIB_ARRAY_ENABLED={name:"VERTEX_ATTRIB_ARRAY_ENABLED",value:34338,description:" "},d.VERTEX_ATTRIB_ARRAY_SIZE={name:"VERTEX_ATTRIB_ARRAY_SIZE",value:34339,description:" "},d.VERTEX_ATTRIB_ARRAY_STRIDE={name:"VERTEX_ATTRIB_ARRAY_STRIDE",value:34340,description:" "},d.VERTEX_ATTRIB_ARRAY_TYPE={name:"VERTEX_ATTRIB_ARRAY_TYPE",value:34341,description:" "},d.VERTEX_ATTRIB_ARRAY_NORMALIZED={name:"VERTEX_ATTRIB_ARRAY_NORMALIZED",value:34922,description:" "},d.VERTEX_ATTRIB_ARRAY_POINTER={name:"VERTEX_ATTRIB_ARRAY_POINTER",value:34373,description:" "},d.VERTEX_ATTRIB_ARRAY_BUFFER_BINDING={name:"VERTEX_ATTRIB_ARRAY_BUFFER_BINDING",value:34975,description:" "},d.CULL_FACE={name:"CULL_FACE",value:2884,description:"Passed to enable/disable to turn on/off culling. Can also be used with getParameter to find the current culling method."},d.FRONT={name:"FRONT",value:1028,description:"Passed to cullFace to specify that only front faces should be drawn."},d.BACK={name:"BACK",value:1029,description:"Passed to cullFace to specify that only back faces should be drawn."},d.FRONT_AND_BACK={name:"FRONT_AND_BACK",value:1032,description:"Passed to cullFace to specify that front and back faces should be drawn."},d.BLEND={name:"BLEND",value:3042,description:"Passed to enable/disable to turn on/off blending. Can also be used with getParameter to find the current blending method."},d.DEPTH_TEST={name:"DEPTH_TEST",value:2929,description:"Passed to enable/disable to turn on/off the depth test. Can also be used with getParameter to query the depth test."},d.DITHER={name:"DITHER",value:3024,description:"Passed to enable/disable to turn on/off dithering. Can also be used with getParameter to find the current dithering method."},d.POLYGON_OFFSET_FILL={name:"POLYGON_OFFSET_FILL",value:32823,description:"Passed to enable/disable to turn on/off the polygon offset. Useful for rendering hidden-line images, decals, and or solids with highlighted edges. Can also be used with getParameter to query the scissor test."},d.SAMPLE_ALPHA_TO_COVERAGE={name:"SAMPLE_ALPHA_TO_COVERAGE",value:32926,description:"Passed to enable/disable to turn on/off the alpha to coverage. Used in multi-sampling alpha channels."},d.SAMPLE_COVERAGE={name:"SAMPLE_COVERAGE",value:32928,description:"Passed to enable/disable to turn on/off the sample coverage. Used in multi-sampling."},d.SCISSOR_TEST={name:"SCISSOR_TEST",value:3089,description:"Passed to enable/disable to turn on/off the scissor test. Can also be used with getParameter to query the scissor test."},d.STENCIL_TEST={name:"STENCIL_TEST",value:2960,description:"Passed to enable/disable to turn on/off the stencil test. Can also be used with getParameter to query the stencil test."},d.NO_ERROR={name:"NO_ERROR",value:0,description:"Returned from getError."},d.INVALID_ENUM={name:"INVALID_ENUM",value:1280,description:"Returned from getError."},d.INVALID_VALUE={name:"INVALID_VALUE",value:1281,description:"Returned from getError."},d.INVALID_OPERATION={name:"INVALID_OPERATION",value:1282,description:"Returned from getError."},d.OUT_OF_MEMORY={name:"OUT_OF_MEMORY",value:1285,description:"Returned from getError."},d.CONTEXT_LOST_WEBGL={name:"CONTEXT_LOST_WEBGL",value:37442,description:"Returned from getError."},d.CW={name:"CW",value:2304,description:"Passed to frontFace to specify the front face of a polygon is drawn in the clockwise direction"},d.CCW={name:"CCW",value:2305,description:"Passed to frontFace to specify the front face of a polygon is drawn in the counter clockwise direction"},d.DONT_CARE={name:"DONT_CARE",value:4352,description:"There is no preference for this behavior."},d.FASTEST={name:"FASTEST",value:4353,description:"The most efficient behavior should be used."},d.NICEST={name:"NICEST",value:4354,description:"The most correct or the highest quality option should be used."},d.GENERATE_MIPMAP_HINT={name:"GENERATE_MIPMAP_HINT",value:33170,description:"Hint for the quality of filtering when generating mipmap images with WebGLRenderingContext.generateMipmap()."},d.BYTE={name:"BYTE",value:5120,description:" "},d.UNSIGNED_BYTE={name:"UNSIGNED_BYTE",value:5121,description:" "},d.SHORT={name:"SHORT",value:5122,description:" "},d.UNSIGNED_SHORT={name:"UNSIGNED_SHORT",value:5123,description:" "},d.INT={name:"INT",value:5124,description:" "},d.UNSIGNED_INT={name:"UNSIGNED_INT",value:5125,description:" "},d.FLOAT={name:"FLOAT",value:5126,description:" "},d.DEPTH_COMPONENT={name:"DEPTH_COMPONENT",value:6402,description:" "},d.ALPHA={name:"ALPHA",value:6406,description:" "},d.RGB={name:"RGB",value:6407,description:" "},d.RGBA={name:"RGBA",value:6408,description:" "},d.LUMINANCE={name:"LUMINANCE",value:6409,description:" "},d.LUMINANCE_ALPHA={name:"LUMINANCE_ALPHA",value:6410,description:" "},d.UNSIGNED_SHORT_4_4_4_4={name:"UNSIGNED_SHORT_4_4_4_4",value:32819,description:" "},d.UNSIGNED_SHORT_5_5_5_1={name:"UNSIGNED_SHORT_5_5_5_1",value:32820,description:" "},d.UNSIGNED_SHORT_5_6_5={name:"UNSIGNED_SHORT_5_6_5",value:33635,description:" "},d.FRAGMENT_SHADER={name:"FRAGMENT_SHADER",value:35632,description:"Passed to createShader to define a fragment shader."},d.VERTEX_SHADER={name:"VERTEX_SHADER",value:35633,description:"Passed to createShader to define a vertex shader"},d.COMPILE_STATUS={name:"COMPILE_STATUS",value:35713,description:"Passed to getShaderParamter to get the status of the compilation. Returns false if the shader was not compiled. You can then query getShaderInfoLog to find the exact error"},d.DELETE_STATUS={name:"DELETE_STATUS",value:35712,description:"Passed to getShaderParamter to determine if a shader was deleted via deleteShader. Returns true if it was, false otherwise."},d.LINK_STATUS={name:"LINK_STATUS",value:35714,description:"Passed to getProgramParameter after calling linkProgram to determine if a program was linked correctly. Returns false if there were errors. Use getProgramInfoLog to find the exact error."},d.VALIDATE_STATUS={name:"VALIDATE_STATUS",value:35715,description:"Passed to getProgramParameter after calling validateProgram to determine if it is valid. Returns false if errors were found."},d.ATTACHED_SHADERS={name:"ATTACHED_SHADERS",value:35717,description:"Passed to getProgramParameter after calling attachShader to determine if the shader was attached correctly. Returns false if errors occurred."},d.ACTIVE_ATTRIBUTES={name:"ACTIVE_ATTRIBUTES",value:35721,description:"Passed to getProgramParameter to get the number of attributes active in a program."},d.ACTIVE_UNIFORMS={name:"ACTIVE_UNIFORMS",value:35718,description:"Passed to getProgramParamter to get the number of uniforms active in a program."},d.MAX_VERTEX_ATTRIBS={name:"MAX_VERTEX_ATTRIBS",value:34921,description:" "},d.MAX_VERTEX_UNIFORM_VECTORS={name:"MAX_VERTEX_UNIFORM_VECTORS",value:36347,description:" "},d.MAX_VARYING_VECTORS={name:"MAX_VARYING_VECTORS",value:36348,description:" "},d.MAX_COMBINED_TEXTURE_IMAGE_UNITS={name:"MAX_COMBINED_TEXTURE_IMAGE_UNITS",value:35661,description:" "},d.MAX_VERTEX_TEXTURE_IMAGE_UNITS={name:"MAX_VERTEX_TEXTURE_IMAGE_UNITS",value:35660,description:" "},d.MAX_TEXTURE_IMAGE_UNITS={name:"MAX_TEXTURE_IMAGE_UNITS",value:34930,description:"Implementation dependent number of maximum texture units. At least 8."},d.MAX_FRAGMENT_UNIFORM_VECTORS={name:"MAX_FRAGMENT_UNIFORM_VECTORS",value:36349,description:" "},d.SHADER_TYPE={name:"SHADER_TYPE",value:35663,description:" "},d.SHADING_LANGUAGE_VERSION={name:"SHADING_LANGUAGE_VERSION",value:35724,description:" "},d.CURRENT_PROGRAM={name:"CURRENT_PROGRAM",value:35725,description:" "},d.NEVER={name:"NEVER",value:512,description:"Passed to depthFunction or stencilFunction to specify depth or stencil tests will never pass. i.e. Nothing will be drawn."},d.ALWAYS={name:"ALWAYS",value:519,description:"Passed to depthFunction or stencilFunction to specify depth or stencil tests will always pass. i.e. Pixels will be drawn in the order they are drawn."},d.LESS={name:"LESS",value:513,description:"Passed to depthFunction or stencilFunction to specify depth or stencil tests will pass if the new depth value is less than the stored value."},d.EQUAL={name:"EQUAL",value:514,description:"Passed to depthFunction or stencilFunction to specify depth or stencil tests will pass if the new depth value is equals to the stored value."},d.LEQUAL={name:"LEQUAL",value:515,description:"Passed to depthFunction or stencilFunction to specify depth or stencil tests will pass if the new depth value is less than or equal to the stored value."},d.GREATER={name:"GREATER",value:516,description:"Passed to depthFunction or stencilFunction to specify depth or stencil tests will pass if the new depth value is greater than the stored value."},d.GEQUAL={name:"GEQUAL",value:518,description:"Passed to depthFunction or stencilFunction to specify depth or stencil tests will pass if the new depth value is greater than or equal to the stored value."},d.NOTEQUAL={name:"NOTEQUAL",value:517,description:"Passed to depthFunction or stencilFunction to specify depth or stencil tests will pass if the new depth value is not equal to the stored value."},d.KEEP={name:"KEEP",value:7680,description:" "},d.REPLACE={name:"REPLACE",value:7681,description:" "},d.INCR={name:"INCR",value:7682,description:" "},d.DECR={name:"DECR",value:7683,description:" "},d.INVERT={name:"INVERT",value:5386,description:" "},d.INCR_WRAP={name:"INCR_WRAP",value:34055,description:" "},d.DECR_WRAP={name:"DECR_WRAP",value:34056,description:" "},d.NEAREST={name:"NEAREST",value:9728,description:" "},d.LINEAR={name:"LINEAR",value:9729,description:" "},d.NEAREST_MIPMAP_NEAREST={name:"NEAREST_MIPMAP_NEAREST",value:9984,description:" "},d.LINEAR_MIPMAP_NEAREST={name:"LINEAR_MIPMAP_NEAREST",value:9985,description:" "},d.NEAREST_MIPMAP_LINEAR={name:"NEAREST_MIPMAP_LINEAR",value:9986,description:" "},d.LINEAR_MIPMAP_LINEAR={name:"LINEAR_MIPMAP_LINEAR",value:9987,description:" "},d.TEXTURE_MAG_FILTER={name:"TEXTURE_MAG_FILTER",value:10240,description:" "},d.TEXTURE_MIN_FILTER={name:"TEXTURE_MIN_FILTER",value:10241,description:" "},d.TEXTURE_WRAP_S={name:"TEXTURE_WRAP_S",value:10242,description:" "},d.TEXTURE_WRAP_T={name:"TEXTURE_WRAP_T",value:10243,description:" "},d.TEXTURE_2D={name:"TEXTURE_2D",value:3553,description:" "},d.TEXTURE={name:"TEXTURE",value:5890,description:" "},d.TEXTURE_CUBE_MAP={name:"TEXTURE_CUBE_MAP",value:34067,description:" "},d.TEXTURE_BINDING_CUBE_MAP={name:"TEXTURE_BINDING_CUBE_MAP",value:34068,description:" "},d.TEXTURE_CUBE_MAP_POSITIVE_X={name:"TEXTURE_CUBE_MAP_POSITIVE_X",value:34069,description:" "},d.TEXTURE_CUBE_MAP_NEGATIVE_X={name:"TEXTURE_CUBE_MAP_NEGATIVE_X",value:34070,description:" "},d.TEXTURE_CUBE_MAP_POSITIVE_Y={name:"TEXTURE_CUBE_MAP_POSITIVE_Y",value:34071,description:" "},d.TEXTURE_CUBE_MAP_NEGATIVE_Y={name:"TEXTURE_CUBE_MAP_NEGATIVE_Y",value:34072,description:" "},d.TEXTURE_CUBE_MAP_POSITIVE_Z={name:"TEXTURE_CUBE_MAP_POSITIVE_Z",value:34073,description:" "},d.TEXTURE_CUBE_MAP_NEGATIVE_Z={name:"TEXTURE_CUBE_MAP_NEGATIVE_Z",value:34074,description:" "},d.MAX_CUBE_MAP_TEXTURE_SIZE={name:"MAX_CUBE_MAP_TEXTURE_SIZE",value:34076,description:" "},d.TEXTURE0={name:"TEXTURE0",value:33984,description:"A texture unit."},d.TEXTURE1={name:"TEXTURE1",value:33985,description:"A texture unit."},d.TEXTURE2={name:"TEXTURE2",value:33986,description:"A texture unit."},d.TEXTURE3={name:"TEXTURE3",value:33987,description:"A texture unit."},d.TEXTURE4={name:"TEXTURE4",value:33988,description:"A texture unit."},d.TEXTURE5={name:"TEXTURE5",value:33989,description:"A texture unit."},d.TEXTURE6={name:"TEXTURE6",value:33990,description:"A texture unit."},d.TEXTURE7={name:"TEXTURE7",value:33991,description:"A texture unit."},d.TEXTURE8={name:"TEXTURE8",value:33992,description:"A texture unit."},d.TEXTURE9={name:"TEXTURE9",value:33993,description:"A texture unit."},d.TEXTURE10={name:"TEXTURE10",value:33994,description:"A texture unit."},d.TEXTURE11={name:"TEXTURE11",value:33995,description:"A texture unit."},d.TEXTURE12={name:"TEXTURE12",value:33996,description:"A texture unit."},d.TEXTURE13={name:"TEXTURE13",value:33997,description:"A texture unit."},d.TEXTURE14={name:"TEXTURE14",value:33998,description:"A texture unit."},d.TEXTURE15={name:"TEXTURE15",value:33999,description:"A texture unit."},d.TEXTURE16={name:"TEXTURE16",value:34e3,description:"A texture unit."},d.TEXTURE17={name:"TEXTURE17",value:34001,description:"A texture unit."},d.TEXTURE18={name:"TEXTURE18",value:34002,description:"A texture unit."},d.TEXTURE19={name:"TEXTURE19",value:34003,description:"A texture unit."},d.TEXTURE20={name:"TEXTURE20",value:34004,description:"A texture unit."},d.TEXTURE21={name:"TEXTURE21",value:34005,description:"A texture unit."},d.TEXTURE22={name:"TEXTURE22",value:34006,description:"A texture unit."},d.TEXTURE23={name:"TEXTURE23",value:34007,description:"A texture unit."},d.TEXTURE24={name:"TEXTURE24",value:34008,description:"A texture unit."},d.TEXTURE25={name:"TEXTURE25",value:34009,description:"A texture unit."},d.TEXTURE26={name:"TEXTURE26",value:34010,description:"A texture unit."},d.TEXTURE27={name:"TEXTURE27",value:34011,description:"A texture unit."},d.TEXTURE28={name:"TEXTURE28",value:34012,description:"A texture unit."},d.TEXTURE29={name:"TEXTURE29",value:34013,description:"A texture unit."},d.TEXTURE30={name:"TEXTURE30",value:34014,description:"A texture unit."},d.TEXTURE31={name:"TEXTURE31",value:34015,description:"A texture unit."},d.ACTIVE_TEXTURE={name:"ACTIVE_TEXTURE",value:34016,description:"The current active texture unit."},d.REPEAT={name:"REPEAT",value:10497,description:" "},d.CLAMP_TO_EDGE={name:"CLAMP_TO_EDGE",value:33071,description:" "},d.MIRRORED_REPEAT={name:"MIRRORED_REPEAT",value:33648,description:" "},d.FLOAT_VEC2={name:"FLOAT_VEC2",value:35664,description:" "},d.FLOAT_VEC3={name:"FLOAT_VEC3",value:35665,description:" "},d.FLOAT_VEC4={name:"FLOAT_VEC4",value:35666,description:" "},d.INT_VEC2={name:"INT_VEC2",value:35667,description:" "},d.INT_VEC3={name:"INT_VEC3",value:35668,description:" "},d.INT_VEC4={name:"INT_VEC4",value:35669,description:" "},d.BOOL={name:"BOOL",value:35670,description:" "},d.BOOL_VEC2={name:"BOOL_VEC2",value:35671,description:" "},d.BOOL_VEC3={name:"BOOL_VEC3",value:35672,description:" "},d.BOOL_VEC4={name:"BOOL_VEC4",value:35673,description:" "},d.FLOAT_MAT2={name:"FLOAT_MAT2",value:35674,description:" "},d.FLOAT_MAT3={name:"FLOAT_MAT3",value:35675,description:" "},d.FLOAT_MAT4={name:"FLOAT_MAT4",value:35676,description:" "},d.SAMPLER_2D={name:"SAMPLER_2D",value:35678,description:" "},d.SAMPLER_CUBE={name:"SAMPLER_CUBE",value:35680,description:" "},d.LOW_FLOAT={name:"LOW_FLOAT",value:36336,description:" "},d.MEDIUM_FLOAT={name:"MEDIUM_FLOAT",value:36337,description:" "},d.HIGH_FLOAT={name:"HIGH_FLOAT",value:36338,description:" "},d.LOW_INT={name:"LOW_INT",value:36339,description:" "},d.MEDIUM_INT={name:"MEDIUM_INT",value:36340,description:" "},d.HIGH_INT={name:"HIGH_INT",value:36341,description:" "},d.FRAMEBUFFER={name:"FRAMEBUFFER",value:36160,description:" "},d.RENDERBUFFER={name:"RENDERBUFFER",value:36161,description:" "},d.RGBA4={name:"RGBA4",value:32854,description:" "},d.RGB5_A1={name:"RGB5_A1",value:32855,description:" "},d.RGB565={name:"RGB565",value:36194,description:" "},d.DEPTH_COMPONENT16={name:"DEPTH_COMPONENT16",value:33189,description:" "},d.STENCIL_INDEX={name:"STENCIL_INDEX",value:6401,description:" "},d.STENCIL_INDEX8={name:"STENCIL_INDEX8",value:36168,description:" "},d.DEPTH_STENCIL={name:"DEPTH_STENCIL",value:34041,description:" "},d.RENDERBUFFER_WIDTH={name:"RENDERBUFFER_WIDTH",value:36162,description:" "},d.RENDERBUFFER_HEIGHT={name:"RENDERBUFFER_HEIGHT",value:36163,description:" "},d.RENDERBUFFER_INTERNAL_FORMAT={name:"RENDERBUFFER_INTERNAL_FORMAT",value:36164,description:" "},d.RENDERBUFFER_RED_SIZE={name:"RENDERBUFFER_RED_SIZE",value:36176,description:" "},d.RENDERBUFFER_GREEN_SIZE={name:"RENDERBUFFER_GREEN_SIZE",value:36177,description:" "},d.RENDERBUFFER_BLUE_SIZE={name:"RENDERBUFFER_BLUE_SIZE",value:36178,description:" "},d.RENDERBUFFER_ALPHA_SIZE={name:"RENDERBUFFER_ALPHA_SIZE",value:36179,description:" "},d.RENDERBUFFER_DEPTH_SIZE={name:"RENDERBUFFER_DEPTH_SIZE",value:36180,description:" "},d.RENDERBUFFER_STENCIL_SIZE={name:"RENDERBUFFER_STENCIL_SIZE",value:36181,description:" "},d.FRAMEBUFFER_ATTACHMENT_OBJECT_TYPE={name:"FRAMEBUFFER_ATTACHMENT_OBJECT_TYPE",value:36048,description:" "},d.FRAMEBUFFER_ATTACHMENT_OBJECT_NAME={name:"FRAMEBUFFER_ATTACHMENT_OBJECT_NAME",value:36049,description:" "},d.FRAMEBUFFER_ATTACHMENT_TEXTURE_LEVEL={name:"FRAMEBUFFER_ATTACHMENT_TEXTURE_LEVEL",value:36050,description:" "},d.FRAMEBUFFER_ATTACHMENT_TEXTURE_CUBE_MAP_FACE={name:"FRAMEBUFFER_ATTACHMENT_TEXTURE_CUBE_MAP_FACE",value:36051,description:" "},d.COLOR_ATTACHMENT0={name:"COLOR_ATTACHMENT0",value:36064,description:" "},d.DEPTH_ATTACHMENT={name:"DEPTH_ATTACHMENT",value:36096,description:" "},d.STENCIL_ATTACHMENT={name:"STENCIL_ATTACHMENT",value:36128,description:" "},d.DEPTH_STENCIL_ATTACHMENT={name:"DEPTH_STENCIL_ATTACHMENT",value:33306,description:" "},d.NONE={name:"NONE",value:0,description:" "},d.FRAMEBUFFER_COMPLETE={name:"FRAMEBUFFER_COMPLETE",value:36053,description:" "},d.FRAMEBUFFER_INCOMPLETE_ATTACHMENT={name:"FRAMEBUFFER_INCOMPLETE_ATTACHMENT",value:36054,description:" "},d.FRAMEBUFFER_INCOMPLETE_MISSING_ATTACHMENT={name:"FRAMEBUFFER_INCOMPLETE_MISSING_ATTACHMENT",value:36055,description:" "},d.FRAMEBUFFER_INCOMPLETE_DIMENSIONS={name:"FRAMEBUFFER_INCOMPLETE_DIMENSIONS",value:36057,description:" "},d.FRAMEBUFFER_UNSUPPORTED={name:"FRAMEBUFFER_UNSUPPORTED",value:36061,description:" "},d.FRAMEBUFFER_BINDING={name:"FRAMEBUFFER_BINDING",value:36006,description:" "},d.RENDERBUFFER_BINDING={name:"RENDERBUFFER_BINDING",value:36007,description:" "},d.MAX_RENDERBUFFER_SIZE={name:"MAX_RENDERBUFFER_SIZE",value:34024,description:" "},d.INVALID_FRAMEBUFFER_OPERATION={name:"INVALID_FRAMEBUFFER_OPERATION",value:1286,description:" "},d.UNPACK_FLIP_Y_WEBGL={name:"UNPACK_FLIP_Y_WEBGL",value:37440,description:" "},d.UNPACK_PREMULTIPLY_ALPHA_WEBGL={name:"UNPACK_PREMULTIPLY_ALPHA_WEBGL",value:37441,description:" "},d.UNPACK_COLORSPACE_CONVERSION_WEBGL={name:"UNPACK_COLORSPACE_CONVERSION_WEBGL",value:37443,description:" "},d.READ_BUFFER={name:"READ_BUFFER",value:3074,description:" "},d.UNPACK_ROW_LENGTH={name:"UNPACK_ROW_LENGTH",value:3314,description:" "},d.UNPACK_SKIP_ROWS={name:"UNPACK_SKIP_ROWS",value:3315,description:" "},d.UNPACK_SKIP_PIXELS={name:"UNPACK_SKIP_PIXELS",value:3316,description:" "},d.PACK_ROW_LENGTH={name:"PACK_ROW_LENGTH",value:3330,description:" "},d.PACK_SKIP_ROWS={name:"PACK_SKIP_ROWS",value:3331,description:" "},d.PACK_SKIP_PIXELS={name:"PACK_SKIP_PIXELS",value:3332,description:" "},d.TEXTURE_BINDING_3D={name:"TEXTURE_BINDING_3D",value:32874,description:" "},d.UNPACK_SKIP_IMAGES={name:"UNPACK_SKIP_IMAGES",value:32877,description:" "},d.UNPACK_IMAGE_HEIGHT={name:"UNPACK_IMAGE_HEIGHT",value:32878,description:" "},d.MAX_3D_TEXTURE_SIZE={name:"MAX_3D_TEXTURE_SIZE",value:32883,description:" "},d.MAX_ELEMENTS_VERTICES={name:"MAX_ELEMENTS_VERTICES",value:33e3,description:" "},d.MAX_ELEMENTS_INDICES={name:"MAX_ELEMENTS_INDICES",value:33001,description:" "},d.MAX_TEXTURE_LOD_BIAS={name:"MAX_TEXTURE_LOD_BIAS",value:34045,description:" "},d.MAX_FRAGMENT_UNIFORM_COMPONENTS={name:"MAX_FRAGMENT_UNIFORM_COMPONENTS",value:35657,description:" "},d.MAX_VERTEX_UNIFORM_COMPONENTS={name:"MAX_VERTEX_UNIFORM_COMPONENTS",value:35658,description:" "},d.MAX_ARRAY_TEXTURE_LAYERS={name:"MAX_ARRAY_TEXTURE_LAYERS",value:35071,description:" "},d.MIN_PROGRAM_TEXEL_OFFSET={name:"MIN_PROGRAM_TEXEL_OFFSET",value:35076,description:" "},d.MAX_PROGRAM_TEXEL_OFFSET={name:"MAX_PROGRAM_TEXEL_OFFSET",value:35077,description:" "},d.MAX_VARYING_COMPONENTS={name:"MAX_VARYING_COMPONENTS",value:35659,description:" "},d.FRAGMENT_SHADER_DERIVATIVE_HINT={name:"FRAGMENT_SHADER_DERIVATIVE_HINT",value:35723,description:" "},d.RASTERIZER_DISCARD={name:"RASTERIZER_DISCARD",value:35977,description:" "},d.VERTEX_ARRAY_BINDING={name:"VERTEX_ARRAY_BINDING",value:34229,description:" "},d.MAX_VERTEX_OUTPUT_COMPONENTS={name:"MAX_VERTEX_OUTPUT_COMPONENTS",value:37154,description:" "},d.MAX_FRAGMENT_INPUT_COMPONENTS={name:"MAX_FRAGMENT_INPUT_COMPONENTS",value:37157,description:" "},d.MAX_SERVER_WAIT_TIMEOUT={name:"MAX_SERVER_WAIT_TIMEOUT",value:37137,description:" "},d.MAX_ELEMENT_INDEX={name:"MAX_ELEMENT_INDEX",value:36203,description:" "},d.RED={name:"RED",value:6403,description:" "},d.RGB8={name:"RGB8",value:32849,description:" "},d.RGBA8={name:"RGBA8",value:32856,description:" "},d.RGB10_A2={name:"RGB10_A2",value:32857,description:" "},d.TEXTURE_3D={name:"TEXTURE_3D",value:32879,description:" "},d.TEXTURE_WRAP_R={name:"TEXTURE_WRAP_R",value:32882,description:" "},d.TEXTURE_MIN_LOD={name:"TEXTURE_MIN_LOD",value:33082,description:" "},d.TEXTURE_MAX_LOD={name:"TEXTURE_MAX_LOD",value:33083,description:" "},d.TEXTURE_BASE_LEVEL={name:"TEXTURE_BASE_LEVEL",value:33084,description:" "},d.TEXTURE_MAX_LEVEL={name:"TEXTURE_MAX_LEVEL",value:33085,description:" "},d.TEXTURE_COMPARE_MODE={name:"TEXTURE_COMPARE_MODE",value:34892,description:" "},d.TEXTURE_COMPARE_FUNC={name:"TEXTURE_COMPARE_FUNC",value:34893,description:" "},d.SRGB={name:"SRGB",value:35904,description:" "},d.SRGB8={name:"SRGB8",value:35905,description:" "},d.SRGB8_ALPHA8={name:"SRGB8_ALPHA8",value:35907,description:" "},d.COMPARE_REF_TO_TEXTURE={name:"COMPARE_REF_TO_TEXTURE",value:34894,description:" "},d.RGBA32F={name:"RGBA32F",value:34836,description:" "},d.RGB32F={name:"RGB32F",value:34837,description:" "},d.RGBA16F={name:"RGBA16F",value:34842,description:" "},d.RGB16F={name:"RGB16F",value:34843,description:" "},d.TEXTURE_2D_ARRAY={name:"TEXTURE_2D_ARRAY",value:35866,description:" "},d.TEXTURE_BINDING_2D_ARRAY={name:"TEXTURE_BINDING_2D_ARRAY",value:35869,description:" "},d.R11F_G11F_B10F={name:"R11F_G11F_B10F",value:35898,description:" "},d.RGB9_E5={name:"RGB9_E5",value:35901,description:" "},d.RGBA32UI={name:"RGBA32UI",value:36208,description:" "},d.RGB32UI={name:"RGB32UI",value:36209,description:" "},d.RGBA16UI={name:"RGBA16UI",value:36214,description:" "},d.RGB16UI={name:"RGB16UI",value:36215,description:" "},d.RGBA8UI={name:"RGBA8UI",value:36220,description:" "},d.RGB8UI={name:"RGB8UI",value:36221,description:" "},d.RGBA32I={name:"RGBA32I",value:36226,description:" "},d.RGB32I={name:"RGB32I",value:36227,description:" "},d.RGBA16I={name:"RGBA16I",value:36232,description:" "},d.RGB16I={name:"RGB16I",value:36233,description:" "},d.RGBA8I={name:"RGBA8I",value:36238,description:" "},d.RGB8I={name:"RGB8I",value:36239,description:" "},d.RED_INTEGER={name:"RED_INTEGER",value:36244,description:" "},d.RGB_INTEGER={name:"RGB_INTEGER",value:36248,description:" "},d.RGBA_INTEGER={name:"RGBA_INTEGER",value:36249,description:" "},d.R8={name:"R8",value:33321,description:" "},d.RG8={name:"RG8",value:33323,description:" "},d.R16F={name:"R16F",value:33325,description:" "},d.R32F={name:"R32F",value:33326,description:" "},d.RG16F={name:"RG16F",value:33327,description:" "},d.RG32F={name:"RG32F",value:33328,description:" "},d.R8I={name:"R8I",value:33329,description:" "},d.R8UI={name:"R8UI",value:33330,description:" "},d.R16I={name:"R16I",value:33331,description:" "},d.R16UI={name:"R16UI",value:33332,description:" "},d.R32I={name:"R32I",value:33333,description:" "},d.R32UI={name:"R32UI",value:33334,description:" "},d.RG8I={name:"RG8I",value:33335,description:" "},d.RG8UI={name:"RG8UI",value:33336,description:" "},d.RG16I={name:"RG16I",value:33337,description:" "},d.RG16UI={name:"RG16UI",value:33338,description:" "},d.RG32I={name:"RG32I",value:33339,description:" "},d.RG32UI={name:"RG32UI",value:33340,description:" "},d.R8_SNORM={name:"R8_SNORM",value:36756,description:" "},d.RG8_SNORM={name:"RG8_SNORM",value:36757,description:" "},d.RGB8_SNORM={name:"RGB8_SNORM",value:36758,description:" "},d.RGBA8_SNORM={name:"RGBA8_SNORM",value:36759,description:" "},d.RGB10_A2UI={name:"RGB10_A2UI",value:36975,description:" "},d.TEXTURE_IMMUTABLE_FORMAT={name:"TEXTURE_IMMUTABLE_FORMAT",value:37167,description:" "},d.TEXTURE_IMMUTABLE_LEVELS={name:"TEXTURE_IMMUTABLE_LEVELS",value:33503,description:" "},d.UNSIGNED_INT_2_10_10_10_REV={name:"UNSIGNED_INT_2_10_10_10_REV",value:33640,description:" "},d.UNSIGNED_INT_10F_11F_11F_REV={name:"UNSIGNED_INT_10F_11F_11F_REV",value:35899,description:" "},d.UNSIGNED_INT_5_9_9_9_REV={name:"UNSIGNED_INT_5_9_9_9_REV",value:35902,description:" "},d.FLOAT_32_UNSIGNED_INT_24_8_REV={name:"FLOAT_32_UNSIGNED_INT_24_8_REV",value:36269,description:" "},d.UNSIGNED_INT_24_8={name:"UNSIGNED_INT_24_8",value:34042,description:" "},d.HALF_FLOAT={name:"HALF_FLOAT",value:5131,description:" "},d.RG={name:"RG",value:33319,description:" "},d.RG_INTEGER={name:"RG_INTEGER",value:33320,description:" "},d.INT_2_10_10_10_REV={name:"INT_2_10_10_10_REV",value:36255,description:" "},d.CURRENT_QUERY={name:"CURRENT_QUERY",value:34917,description:" "},d.QUERY_RESULT={name:"QUERY_RESULT",value:34918,description:" "},d.QUERY_RESULT_AVAILABLE={name:"QUERY_RESULT_AVAILABLE",value:34919,description:" "},d.ANY_SAMPLES_PASSED={name:"ANY_SAMPLES_PASSED",value:35887,description:" "},d.ANY_SAMPLES_PASSED_CONSERVATIVE={name:"ANY_SAMPLES_PASSED_CONSERVATIVE",value:36202,description:" "},d.MAX_DRAW_BUFFERS={name:"MAX_DRAW_BUFFERS",value:34852,description:" "},d.DRAW_BUFFER0={name:"DRAW_BUFFER0",value:34853,description:" "},d.DRAW_BUFFER1={name:"DRAW_BUFFER1",value:34854,description:" "},d.DRAW_BUFFER2={name:"DRAW_BUFFER2",value:34855,description:" "},d.DRAW_BUFFER3={name:"DRAW_BUFFER3",value:34856,description:" "},d.DRAW_BUFFER4={name:"DRAW_BUFFER4",value:34857,description:" "},d.DRAW_BUFFER5={name:"DRAW_BUFFER5",value:34858,description:" "},d.DRAW_BUFFER6={name:"DRAW_BUFFER6",value:34859,description:" "},d.DRAW_BUFFER7={name:"DRAW_BUFFER7",value:34860,description:" "},d.DRAW_BUFFER8={name:"DRAW_BUFFER8",value:34861,description:" "},d.DRAW_BUFFER9={name:"DRAW_BUFFER9",value:34862,description:" "},d.DRAW_BUFFER10={name:"DRAW_BUFFER10",value:34863,description:" "},d.DRAW_BUFFER11={name:"DRAW_BUFFER11",value:34864,description:" "},d.DRAW_BUFFER12={name:"DRAW_BUFFER12",value:34865,description:" "},d.DRAW_BUFFER13={name:"DRAW_BUFFER13",value:34866,description:" "},d.DRAW_BUFFER14={name:"DRAW_BUFFER14",value:34867,description:" "},d.DRAW_BUFFER15={name:"DRAW_BUFFER15",value:34868,description:" "},d.MAX_COLOR_ATTACHMENTS={name:"MAX_COLOR_ATTACHMENTS",value:36063,description:" "},d.COLOR_ATTACHMENT1={name:"COLOR_ATTACHMENT1",value:36065,description:" "},d.COLOR_ATTACHMENT2={name:"COLOR_ATTACHMENT2",value:36066,description:" "},d.COLOR_ATTACHMENT3={name:"COLOR_ATTACHMENT3",value:36067,description:" "},d.COLOR_ATTACHMENT4={name:"COLOR_ATTACHMENT4",value:36068,description:" "},d.COLOR_ATTACHMENT5={name:"COLOR_ATTACHMENT5",value:36069,description:" "},d.COLOR_ATTACHMENT6={name:"COLOR_ATTACHMENT6",value:36070,description:" "},d.COLOR_ATTACHMENT7={name:"COLOR_ATTACHMENT7",value:36071,description:" "},d.COLOR_ATTACHMENT8={name:"COLOR_ATTACHMENT8",value:36072,description:" "},d.COLOR_ATTACHMENT9={name:"COLOR_ATTACHMENT9",value:36073,description:" "},d.COLOR_ATTACHMENT10={name:"COLOR_ATTACHMENT10",value:36074,description:" "},d.COLOR_ATTACHMENT11={name:"COLOR_ATTACHMENT11",value:36075,description:" "},d.COLOR_ATTACHMENT12={name:"COLOR_ATTACHMENT12",value:36076,description:" "},d.COLOR_ATTACHMENT13={name:"COLOR_ATTACHMENT13",value:36077,description:" "},d.COLOR_ATTACHMENT14={name:"COLOR_ATTACHMENT14",value:36078,description:" "},d.COLOR_ATTACHMENT15={name:"COLOR_ATTACHMENT15",value:36079,description:" "},d.SAMPLER_3D={name:"SAMPLER_3D",value:35679,description:" "},d.SAMPLER_2D_SHADOW={name:"SAMPLER_2D_SHADOW",value:35682,description:" "},d.SAMPLER_2D_ARRAY={name:"SAMPLER_2D_ARRAY",value:36289,description:" "},d.SAMPLER_2D_ARRAY_SHADOW={name:"SAMPLER_2D_ARRAY_SHADOW",value:36292,description:" "},d.SAMPLER_CUBE_SHADOW={name:"SAMPLER_CUBE_SHADOW",value:36293,description:" "},d.INT_SAMPLER_2D={name:"INT_SAMPLER_2D",value:36298,description:" "},d.INT_SAMPLER_3D={name:"INT_SAMPLER_3D",value:36299,description:" "},d.INT_SAMPLER_CUBE={name:"INT_SAMPLER_CUBE",value:36300,description:" "},d.INT_SAMPLER_2D_ARRAY={name:"INT_SAMPLER_2D_ARRAY",value:36303,description:" "},d.UNSIGNED_INT_SAMPLER_2D={name:"UNSIGNED_INT_SAMPLER_2D",value:36306,description:" "},d.UNSIGNED_INT_SAMPLER_3D={name:"UNSIGNED_INT_SAMPLER_3D",value:36307,description:" "},d.UNSIGNED_INT_SAMPLER_CUBE={name:"UNSIGNED_INT_SAMPLER_CUBE",value:36308,description:" "},d.UNSIGNED_INT_SAMPLER_2D_ARRAY={name:"UNSIGNED_INT_SAMPLER_2D_ARRAY",value:36311,description:" "},d.MAX_SAMPLES={name:"MAX_SAMPLES",value:36183,description:" "},d.SAMPLER_BINDING={name:"SAMPLER_BINDING",value:35097,description:" "},d.PIXEL_PACK_BUFFER={name:"PIXEL_PACK_BUFFER",value:35051,description:" "},d.PIXEL_UNPACK_BUFFER={name:"PIXEL_UNPACK_BUFFER",value:35052,description:" "},d.PIXEL_PACK_BUFFER_BINDING={name:"PIXEL_PACK_BUFFER_BINDING",value:35053,description:" "},d.PIXEL_UNPACK_BUFFER_BINDING={name:"PIXEL_UNPACK_BUFFER_BINDING",value:35055,description:" "},d.COPY_READ_BUFFER={name:"COPY_READ_BUFFER",value:36662,description:" "},d.COPY_WRITE_BUFFER={name:"COPY_WRITE_BUFFER",value:36663,description:" "},d.COPY_READ_BUFFER_BINDING={name:"COPY_READ_BUFFER_BINDING",value:36662,description:" "},d.COPY_WRITE_BUFFER_BINDING={name:"COPY_WRITE_BUFFER_BINDING",value:36663,description:" "},d.FLOAT_MAT2x3={name:"FLOAT_MAT2x3",value:35685,description:" "},d.FLOAT_MAT2x4={name:"FLOAT_MAT2x4",value:35686,description:" "},d.FLOAT_MAT3x2={name:"FLOAT_MAT3x2",value:35687,description:" "},d.FLOAT_MAT3x4={name:"FLOAT_MAT3x4",value:35688,description:" "},d.FLOAT_MAT4x2={name:"FLOAT_MAT4x2",value:35689,description:" "},d.FLOAT_MAT4x3={name:"FLOAT_MAT4x3",value:35690,description:" "},d.UNSIGNED_INT_VEC2={name:"UNSIGNED_INT_VEC2",value:36294,description:" "},d.UNSIGNED_INT_VEC3={name:"UNSIGNED_INT_VEC3",value:36295,description:" "},d.UNSIGNED_INT_VEC4={name:"UNSIGNED_INT_VEC4",value:36296,description:" "},d.UNSIGNED_NORMALIZED={name:"UNSIGNED_NORMALIZED",value:35863,description:" "},d.SIGNED_NORMALIZED={name:"SIGNED_NORMALIZED",value:36764,description:" "},d.VERTEX_ATTRIB_ARRAY_INTEGER={name:"VERTEX_ATTRIB_ARRAY_INTEGER",value:35069,description:" "},d.VERTEX_ATTRIB_ARRAY_DIVISOR={name:"VERTEX_ATTRIB_ARRAY_DIVISOR",value:35070,description:" "},d.TRANSFORM_FEEDBACK_BUFFER_MODE={name:"TRANSFORM_FEEDBACK_BUFFER_MODE",value:35967,description:" "},d.MAX_TRANSFORM_FEEDBACK_SEPARATE_COMPONENTS={name:"MAX_TRANSFORM_FEEDBACK_SEPARATE_COMPONENTS",value:35968,description:" "},d.TRANSFORM_FEEDBACK_VARYINGS={name:"TRANSFORM_FEEDBACK_VARYINGS",value:35971,description:" "},d.TRANSFORM_FEEDBACK_BUFFER_START={name:"TRANSFORM_FEEDBACK_BUFFER_START",value:35972,description:" "},d.TRANSFORM_FEEDBACK_BUFFER_SIZE={name:"TRANSFORM_FEEDBACK_BUFFER_SIZE",value:35973,description:" "},d.TRANSFORM_FEEDBACK_PRIMITIVES_WRITTEN={name:"TRANSFORM_FEEDBACK_PRIMITIVES_WRITTEN",value:35976,description:" "},d.MAX_TRANSFORM_FEEDBACK_INTERLEAVED_COMPONENTS={name:"MAX_TRANSFORM_FEEDBACK_INTERLEAVED_COMPONENTS",value:35978,description:" "},d.MAX_TRANSFORM_FEEDBACK_SEPARATE_ATTRIBS={name:"MAX_TRANSFORM_FEEDBACK_SEPARATE_ATTRIBS",value:35979,description:" "},d.INTERLEAVED_ATTRIBS={name:"INTERLEAVED_ATTRIBS",value:35980,description:" "},d.SEPARATE_ATTRIBS={name:"SEPARATE_ATTRIBS",value:35981,description:" "},d.TRANSFORM_FEEDBACK_BUFFER={name:"TRANSFORM_FEEDBACK_BUFFER",value:35982,description:" "},d.TRANSFORM_FEEDBACK_BUFFER_BINDING={name:"TRANSFORM_FEEDBACK_BUFFER_BINDING",value:35983,description:" "},d.TRANSFORM_FEEDBACK={name:"TRANSFORM_FEEDBACK",value:36386,description:" "},d.TRANSFORM_FEEDBACK_PAUSED={name:"TRANSFORM_FEEDBACK_PAUSED",value:36387,description:" "},d.TRANSFORM_FEEDBACK_ACTIVE={name:"TRANSFORM_FEEDBACK_ACTIVE",value:36388,description:" "},d.TRANSFORM_FEEDBACK_BINDING={name:"TRANSFORM_FEEDBACK_BINDING",value:36389,description:" "},d.FRAMEBUFFER_ATTACHMENT_COLOR_ENCODING={name:"FRAMEBUFFER_ATTACHMENT_COLOR_ENCODING",value:33296,description:" "},d.FRAMEBUFFER_ATTACHMENT_COMPONENT_TYPE={name:"FRAMEBUFFER_ATTACHMENT_COMPONENT_TYPE",value:33297,description:" "},d.FRAMEBUFFER_ATTACHMENT_RED_SIZE={name:"FRAMEBUFFER_ATTACHMENT_RED_SIZE",value:33298,description:" "},d.FRAMEBUFFER_ATTACHMENT_GREEN_SIZE={name:"FRAMEBUFFER_ATTACHMENT_GREEN_SIZE",value:33299,description:" "},d.FRAMEBUFFER_ATTACHMENT_BLUE_SIZE={name:"FRAMEBUFFER_ATTACHMENT_BLUE_SIZE",value:33300,description:" "},d.FRAMEBUFFER_ATTACHMENT_ALPHA_SIZE={name:"FRAMEBUFFER_ATTACHMENT_ALPHA_SIZE",value:33301,description:" "},d.FRAMEBUFFER_ATTACHMENT_DEPTH_SIZE={name:"FRAMEBUFFER_ATTACHMENT_DEPTH_SIZE",value:33302,description:" "},d.FRAMEBUFFER_ATTACHMENT_STENCIL_SIZE={name:"FRAMEBUFFER_ATTACHMENT_STENCIL_SIZE",value:33303,description:" "},d.FRAMEBUFFER_DEFAULT={name:"FRAMEBUFFER_DEFAULT",value:33304,description:" "},d.DEPTH24_STENCIL8={name:"DEPTH24_STENCIL8",value:35056,description:" "},d.DRAW_FRAMEBUFFER_BINDING={name:"DRAW_FRAMEBUFFER_BINDING",value:36006,description:" "},d.READ_FRAMEBUFFER={name:"READ_FRAMEBUFFER",value:36008,description:" "},d.DRAW_FRAMEBUFFER={name:"DRAW_FRAMEBUFFER",value:36009,description:" "},d.READ_FRAMEBUFFER_BINDING={name:"READ_FRAMEBUFFER_BINDING",value:36010,description:" "},d.RENDERBUFFER_SAMPLES={name:"RENDERBUFFER_SAMPLES",value:36011,description:" "},d.FRAMEBUFFER_ATTACHMENT_TEXTURE_LAYER={name:"FRAMEBUFFER_ATTACHMENT_TEXTURE_LAYER",value:36052,description:" "},d.FRAMEBUFFER_INCOMPLETE_MULTISAMPLE={name:"FRAMEBUFFER_INCOMPLETE_MULTISAMPLE",value:36182,description:" "},d.UNIFORM_BUFFER={name:"UNIFORM_BUFFER",value:35345,description:" "},d.UNIFORM_BUFFER_BINDING={name:"UNIFORM_BUFFER_BINDING",value:35368,description:" "},d.UNIFORM_BUFFER_START={name:"UNIFORM_BUFFER_START",value:35369,description:" "},d.UNIFORM_BUFFER_SIZE={name:"UNIFORM_BUFFER_SIZE",value:35370,description:" "},d.MAX_VERTEX_UNIFORM_BLOCKS={name:"MAX_VERTEX_UNIFORM_BLOCKS",value:35371,description:" "},d.MAX_FRAGMENT_UNIFORM_BLOCKS={name:"MAX_FRAGMENT_UNIFORM_BLOCKS",value:35373,description:" "},d.MAX_COMBINED_UNIFORM_BLOCKS={name:"MAX_COMBINED_UNIFORM_BLOCKS",value:35374,description:" "},d.MAX_UNIFORM_BUFFER_BINDINGS={name:"MAX_UNIFORM_BUFFER_BINDINGS",value:35375,description:" "},d.MAX_UNIFORM_BLOCK_SIZE={name:"MAX_UNIFORM_BLOCK_SIZE",value:35376,description:" "},d.MAX_COMBINED_VERTEX_UNIFORM_COMPONENTS={name:"MAX_COMBINED_VERTEX_UNIFORM_COMPONENTS",value:35377,description:" "},d.MAX_COMBINED_FRAGMENT_UNIFORM_COMPONENTS={name:"MAX_COMBINED_FRAGMENT_UNIFORM_COMPONENTS",value:35379,description:" "},d.UNIFORM_BUFFER_OFFSET_ALIGNMENT={name:"UNIFORM_BUFFER_OFFSET_ALIGNMENT",value:35380,description:" "},d.ACTIVE_UNIFORM_BLOCKS={name:"ACTIVE_UNIFORM_BLOCKS",value:35382,description:" "},d.UNIFORM_TYPE={name:"UNIFORM_TYPE",value:35383,description:" "},d.UNIFORM_SIZE={name:"UNIFORM_SIZE",value:35384,description:" "},d.UNIFORM_BLOCK_INDEX={name:"UNIFORM_BLOCK_INDEX",value:35386,description:" "},d.UNIFORM_OFFSET={name:"UNIFORM_OFFSET",value:35387,description:" "},d.UNIFORM_ARRAY_STRIDE={name:"UNIFORM_ARRAY_STRIDE",value:35388,description:" "},d.UNIFORM_MATRIX_STRIDE={name:"UNIFORM_MATRIX_STRIDE",value:35389,description:" "},d.UNIFORM_IS_ROW_MAJOR={name:"UNIFORM_IS_ROW_MAJOR",value:35390,description:" "},d.UNIFORM_BLOCK_BINDING={name:"UNIFORM_BLOCK_BINDING",value:35391,description:" "},d.UNIFORM_BLOCK_DATA_SIZE={name:"UNIFORM_BLOCK_DATA_SIZE",value:35392,description:" "},d.UNIFORM_BLOCK_ACTIVE_UNIFORMS={name:"UNIFORM_BLOCK_ACTIVE_UNIFORMS",value:35394,description:" "},d.UNIFORM_BLOCK_ACTIVE_UNIFORM_INDICES={name:"UNIFORM_BLOCK_ACTIVE_UNIFORM_INDICES",value:35395,description:" "},d.UNIFORM_BLOCK_REFERENCED_BY_VERTEX_SHADER={name:"UNIFORM_BLOCK_REFERENCED_BY_VERTEX_SHADER",value:35396,description:" "},d.UNIFORM_BLOCK_REFERENCED_BY_FRAGMENT_SHADER={name:"UNIFORM_BLOCK_REFERENCED_BY_FRAGMENT_SHADER",value:35398,description:" "},d.OBJECT_TYPE={name:"OBJECT_TYPE",value:37138,description:" "},d.SYNC_CONDITION={name:"SYNC_CONDITION",value:37139,description:" "},d.SYNC_STATUS={name:"SYNC_STATUS",value:37140,description:" "},d.SYNC_FLAGS={name:"SYNC_FLAGS",value:37141,description:" "},d.SYNC_FENCE={name:"SYNC_FENCE",value:37142,description:" "},d.SYNC_GPU_COMMANDS_COMPLETE={name:"SYNC_GPU_COMMANDS_COMPLETE",value:37143,description:" "},d.UNSIGNALED={name:"UNSIGNALED",value:37144,description:" "},d.SIGNALED={name:"SIGNALED",value:37145,description:" "},d.ALREADY_SIGNALED={name:"ALREADY_SIGNALED",value:37146,description:" "},d.TIMEOUT_EXPIRED={name:"TIMEOUT_EXPIRED",value:37147,description:" "},d.CONDITION_SATISFIED={name:"CONDITION_SATISFIED",value:37148,description:" "},d.WAIT_FAILED={name:"WAIT_FAILED",value:37149,description:" "},d.SYNC_FLUSH_COMMANDS_BIT={name:"SYNC_FLUSH_COMMANDS_BIT",value:1,description:" "},d.COLOR={name:"COLOR",value:6144,description:" "},d.DEPTH={name:"DEPTH",value:6145,description:" "},d.STENCIL={name:"STENCIL",value:6146,description:" "},d.MIN={name:"MIN",value:32775,description:" "},d.MAX={name:"MAX",value:32776,description:" "},d.DEPTH_COMPONENT24={name:"DEPTH_COMPONENT24",value:33190,description:" "},d.STREAM_READ={name:"STREAM_READ",value:35041,description:" "},d.STREAM_COPY={name:"STREAM_COPY",value:35042,description:" "},d.STATIC_READ={name:"STATIC_READ",value:35045,description:" "},d.STATIC_COPY={name:"STATIC_COPY",value:35046,description:" "},d.DYNAMIC_READ={name:"DYNAMIC_READ",value:35049,description:" "},d.DYNAMIC_COPY={name:"DYNAMIC_COPY",value:35050,description:" "},d.DEPTH_COMPONENT32F={name:"DEPTH_COMPONENT32F",value:36012,description:" "},d.DEPTH32F_STENCIL8={name:"DEPTH32F_STENCIL8",value:36013,description:" "},d.INVALID_INDEX={name:"INVALID_INDEX",value:4294967295,description:" "},d.TIMEOUT_IGNORED={name:"TIMEOUT_IGNORED",value:-1,description:" "},d.MAX_CLIENT_WAIT_TIMEOUT_WEBGL={name:"MAX_CLIENT_WAIT_TIMEOUT_WEBGL",value:37447,description:" "},d.VERTEX_ATTRIB_ARRAY_DIVISOR_ANGLE={name:"VERTEX_ATTRIB_ARRAY_DIVISOR_ANGLE",value:35070,description:"Describes the frequency divisor used for instanced rendering.",extensionName:"ANGLE_instanced_arrays"},d.UNMASKED_VENDOR_WEBGL={name:"UNMASKED_VENDOR_WEBGL",value:37445,description:"Passed to getParameter to get the vendor string of the graphics driver.",extensionName:"ANGLE_instanced_arrays"},d.UNMASKED_RENDERER_WEBGL={name:"UNMASKED_RENDERER_WEBGL",value:37446,description:"Passed to getParameter to get the renderer string of the graphics driver.",extensionName:"WEBGL_debug_renderer_info"},d.MAX_TEXTURE_MAX_ANISOTROPY_EXT={name:"MAX_TEXTURE_MAX_ANISOTROPY_EXT",value:34047,description:"Returns the maximum available anisotropy.",extensionName:"EXT_texture_filter_anisotropic"},d.TEXTURE_MAX_ANISOTROPY_EXT={name:"TEXTURE_MAX_ANISOTROPY_EXT",value:34046,description:"Passed to texParameter to set the desired maximum anisotropy for a texture.",extensionName:"EXT_texture_filter_anisotropic"},d.COMPRESSED_RGB_S3TC_DXT1_EXT={name:"COMPRESSED_RGB_S3TC_DXT1_EXT",value:33776,description:"A DXT1-compressed image in an RGB image format.",extensionName:"WEBGL_compressed_texture_s3tc"},d.COMPRESSED_RGBA_S3TC_DXT1_EXT={name:"COMPRESSED_RGBA_S3TC_DXT1_EXT",value:33777,description:"A DXT1-compressed image in an RGB image format with a simple on/off alpha value.",extensionName:"WEBGL_compressed_texture_s3tc"},d.COMPRESSED_RGBA_S3TC_DXT3_EXT={name:"COMPRESSED_RGBA_S3TC_DXT3_EXT",value:33778,description:"A DXT3-compressed image in an RGBA image format. Compared to a 32-bit RGBA texture, it offers 4:1 compression.",extensionName:"WEBGL_compressed_texture_s3tc"},d.COMPRESSED_RGBA_S3TC_DXT5_EXT={name:"COMPRESSED_RGBA_S3TC_DXT5_EXT",value:33779,description:"A DXT5-compressed image in an RGBA image format. It also provides a 4:1 compression, but differs to the DXT3 compression in how the alpha compression is done.",extensionName:"WEBGL_compressed_texture_s3tc"},d.COMPRESSED_R11_EAC={name:"COMPRESSED_R11_EAC",value:37488,description:"One-channel (red) unsigned format compression.",extensionName:"WEBGL_compressed_texture_etc"},d.COMPRESSED_SIGNED_R11_EAC={name:"COMPRESSED_SIGNED_R11_EAC",value:37489,description:"One-channel (red) signed format compression.",extensionName:"WEBGL_compressed_texture_etc"},d.COMPRESSED_RG11_EAC={name:"COMPRESSED_RG11_EAC",value:37490,description:"Two-channel (red and green) unsigned format compression.",extensionName:"WEBGL_compressed_texture_etc"},d.COMPRESSED_SIGNED_RG11_EAC={name:"COMPRESSED_SIGNED_RG11_EAC",value:37491,description:"Two-channel (red and green) signed format compression.",extensionName:"WEBGL_compressed_texture_etc"},d.COMPRESSED_RGB8_ETC2={name:"COMPRESSED_RGB8_ETC2",value:37492,description:"Compresses RBG8 data with no alpha channel.",extensionName:"WEBGL_compressed_texture_etc"},d.COMPRESSED_RGBA8_ETC2_EAC={name:"COMPRESSED_RGBA8_ETC2_EAC",value:37493,description:"Compresses RGBA8 data. The RGB part is encoded the same as RGB_ETC2, but the alpha part is encoded separately.",extensionName:"WEBGL_compressed_texture_etc"},d.COMPRESSED_SRGB8_ETC2={name:"COMPRESSED_SRGB8_ETC2",value:37494,description:"Compresses sRBG8 data with no alpha channel.",extensionName:"WEBGL_compressed_texture_etc"},d.COMPRESSED_SRGB8_ALPHA8_ETC2_EAC={name:"COMPRESSED_SRGB8_ALPHA8_ETC2_EAC",value:37495,description:"Compresses sRGBA8 data. The sRGB part is encoded the same as SRGB_ETC2, but the alpha part is encoded separately.",extensionName:"WEBGL_compressed_texture_etc"},d.COMPRESSED_RGB8_PUNCHTHROUGH_ALPHA1_ETC2={name:"COMPRESSED_RGB8_PUNCHTHROUGH_ALPHA1_ETC2",value:37496,description:"Similar to RGB8_ETC, but with ability to punch through the alpha channel, which means to make it completely opaque or transparent.",extensionName:"WEBGL_compressed_texture_etc"},d.COMPRESSED_SRGB8_PUNCHTHROUGH_ALPHA1_ETC2={name:"COMPRESSED_SRGB8_PUNCHTHROUGH_ALPHA1_ETC2",value:37497,description:"Similar to SRGB8_ETC, but with ability to punch through the alpha channel, which means to make it completely opaque or transparent.",extensionName:"WEBGL_compressed_texture_etc"},d.COMPRESSED_RGB_PVRTC_4BPPV1_IMG={name:"COMPRESSED_RGB_PVRTC_4BPPV1_IMG",value:35840,description:"RGB compression in 4-bit mode. One block for each 4×4 pixels.",extensionName:"WEBGL_compressed_texture_pvrtc"},d.COMPRESSED_RGBA_PVRTC_4BPPV1_IMG={name:"COMPRESSED_RGBA_PVRTC_4BPPV1_IMG",value:35842,description:"RGBA compression in 4-bit mode. One block for each 4×4 pixels.",extensionName:"WEBGL_compressed_texture_pvrtc"},d.COMPRESSED_RGB_PVRTC_2BPPV1_IMG={name:"COMPRESSED_RGB_PVRTC_2BPPV1_IMG",value:35841,description:"RGB compression in 2-bit mode. One block for each 8×4 pixels.",extensionName:"WEBGL_compressed_texture_pvrtc"},d.COMPRESSED_RGBA_PVRTC_2BPPV1_IMG={name:"COMPRESSED_RGBA_PVRTC_2BPPV1_IMG",value:35843,description:"RGBA compression in 2-bit mode. One block for each 8×4 pixe",extensionName:"WEBGL_compressed_texture_pvrtc"},d.COMPRESSED_RGB_ETC1_WEBGL={name:"COMPRESSED_RGB_ETC1_WEBGL",value:36196,description:"Compresses 24-bit RGB data with no alpha channel.",extensionName:"WEBGL_compressed_texture_etc1"},d.COMPRESSED_RGB_ATC_WEBGL={name:"COMPRESSED_RGB_ATC_WEBGL",value:35986,description:"Compresses RGB textures with no alpha channel.",extensionName:"WEBGL_compressed_texture_atc"},d.COMPRESSED_RGBA_ATC_EXPLICIT_ALPHA_WEBGL={name:"COMPRESSED_RGBA_ATC_EXPLICIT_ALPHA_WEBGL",value:35986,description:"Compresses RGBA textures using explicit alpha encoding (useful when alpha transitions are sharp).",extensionName:"WEBGL_compressed_texture_atc"},d.COMPRESSED_RGBA_ATC_INTERPOLATED_ALPHA_WEBGL={name:"COMPRESSED_RGBA_ATC_INTERPOLATED_ALPHA_WEBGL",value:34798,description:"Compresses RGBA textures using interpolated alpha encoding (useful when alpha transitions are gradient).",extensionName:"WEBGL_compressed_texture_atc"},d.UNSIGNED_INT_24_8_WEBGL={name:"UNSIGNED_INT_24_8_WEBGL",value:34042,description:"Unsigned integer type for 24-bit depth texture data.",extensionName:"WEBGL_depth_texture"},d.HALF_FLOAT_OES={name:"HALF_FLOAT_OES",value:36193,description:"Half floating-point type (16-bit).",extensionName:"OES_texture_half_float"},d.FRAMEBUFFER_ATTACHMENT_COMPONENT_TYPE_EXT={name:"FRAMEBUFFER_ATTACHMENT_COMPONENT_TYPE_EXT",value:33297,description:" ",extensionName:"WEBGL_color_buffer_float"},d.UNSIGNED_NORMALIZED_EXT={name:"UNSIGNED_NORMALIZED_EXT",value:35863,description:" ",extensionName:"WEBGL_color_buffer_float"},d.MIN_EXT={name:"MIN_EXT",value:32775,description:"Produces the minimum color components of the source and destination colors.",extensionName:"EXT_blend_minmax"},d.MAX_EXT={name:"MAX_EXT",value:32776,description:"Produces the maximum color components of the source and destination colors.",extensionName:"EXT_blend_minmax"},d.SRGB_EXT={name:"SRGB_EXT",value:35904,description:"Unsized sRGB format that leaves the precision up to the driver.",extensionName:"EXT_sRGB"},d.SRGB_ALPHA_EXT={name:"SRGB_ALPHA_EXT",value:35906,description:"Unsized sRGB format with unsized alpha component.",extensionName:"EXT_sRGB"},d.SRGB8_ALPHA8_EXT={name:"SRGB8_ALPHA8_EXT",value:35907,description:"Sized (8-bit) sRGB and alpha formats.",extensionName:"EXT_sRGB"},d.FRAMEBUFFER_ATTACHMENT_COLOR_ENCODING_EXT={name:"FRAMEBUFFER_ATTACHMENT_COLOR_ENCODING_EXT",value:33296,description:"Returns the framebuffer color encoding.",extensionName:"EXT_sRGB"},d.FRAGMENT_SHADER_DERIVATIVE_HINT_OES={name:"FRAGMENT_SHADER_DERIVATIVE_HINT_OES",value:35723,description:"Indicates the accuracy of the derivative calculation for the GLSL built-in functions: dFdx, dFdy, and fwidth.",extensionName:"OES_standard_derivatives"},d.COLOR_ATTACHMENT0_WEBGL={name:"COLOR_ATTACHMENT0_WEBGL",value:36064,description:"Framebuffer color attachment point",extensionName:"WEBGL_draw_buffers"},d.COLOR_ATTACHMENT1_WEBGL={name:"COLOR_ATTACHMENT1_WEBGL",value:36065,description:"Framebuffer color attachment point",extensionName:"WEBGL_draw_buffers"},d.COLOR_ATTACHMENT2_WEBGL={name:"COLOR_ATTACHMENT2_WEBGL",value:36066,description:"Framebuffer color attachment point",extensionName:"WEBGL_draw_buffers"},d.COLOR_ATTACHMENT3_WEBGL={name:"COLOR_ATTACHMENT3_WEBGL",value:36067,description:"Framebuffer color attachment point",extensionName:"WEBGL_draw_buffers"},d.COLOR_ATTACHMENT4_WEBGL={name:"COLOR_ATTACHMENT4_WEBGL",value:36068,description:"Framebuffer color attachment point",extensionName:"WEBGL_draw_buffers"},d.COLOR_ATTACHMENT5_WEBGL={name:"COLOR_ATTACHMENT5_WEBGL",value:36069,description:"Framebuffer color attachment point",extensionName:"WEBGL_draw_buffers"},d.COLOR_ATTACHMENT6_WEBGL={name:"COLOR_ATTACHMENT6_WEBGL",value:36070,description:"Framebuffer color attachment point",extensionName:"WEBGL_draw_buffers"},d.COLOR_ATTACHMENT7_WEBGL={name:"COLOR_ATTACHMENT7_WEBGL",value:36071,description:"Framebuffer color attachment point",extensionName:"WEBGL_draw_buffers"},d.COLOR_ATTACHMENT8_WEBGL={name:"COLOR_ATTACHMENT8_WEBGL",value:36072,description:"Framebuffer color attachment point",extensionName:"WEBGL_draw_buffers"},d.COLOR_ATTACHMENT9_WEBGL={name:"COLOR_ATTACHMENT9_WEBGL",value:36073,description:"Framebuffer color attachment point",extensionName:"WEBGL_draw_buffers"},d.COLOR_ATTACHMENT10_WEBGL={name:"COLOR_ATTACHMENT10_WEBGL",value:36074,description:"Framebuffer color attachment point",extensionName:"WEBGL_draw_buffers"},d.COLOR_ATTACHMENT11_WEBGL={name:"COLOR_ATTACHMENT11_WEBGL",value:36075,description:"Framebuffer color attachment point",extensionName:"WEBGL_draw_buffers"},d.COLOR_ATTACHMENT12_WEBGL={name:"COLOR_ATTACHMENT12_WEBGL",value:36076,description:"Framebuffer color attachment point",extensionName:"WEBGL_draw_buffers"},d.COLOR_ATTACHMENT13_WEBGL={name:"COLOR_ATTACHMENT13_WEBGL",value:36077,description:"Framebuffer color attachment point",extensionName:"WEBGL_draw_buffers"},d.COLOR_ATTACHMENT14_WEBGL={name:"COLOR_ATTACHMENT14_WEBGL",value:36078,description:"Framebuffer color attachment point",extensionName:"WEBGL_draw_buffers"},d.COLOR_ATTACHMENT15_WEBGL={name:"COLOR_ATTACHMENT15_WEBGL",value:36079,description:"Framebuffer color attachment point",extensionName:"WEBGL_draw_buffers"},d.DRAW_BUFFER0_WEBGL={name:"DRAW_BUFFER0_WEBGL",value:34853,description:"Draw buffer",extensionName:"WEBGL_draw_buffers"},d.DRAW_BUFFER1_WEBGL={name:"DRAW_BUFFER1_WEBGL",value:34854,description:"Draw buffer",extensionName:"WEBGL_draw_buffers"},d.DRAW_BUFFER2_WEBGL={name:"DRAW_BUFFER2_WEBGL",value:34855,description:"Draw buffer",extensionName:"WEBGL_draw_buffers"},d.DRAW_BUFFER3_WEBGL={name:"DRAW_BUFFER3_WEBGL",value:34856,description:"Draw buffer",extensionName:"WEBGL_draw_buffers"},d.DRAW_BUFFER4_WEBGL={name:"DRAW_BUFFER4_WEBGL",value:34857,description:"Draw buffer",extensionName:"WEBGL_draw_buffers"},d.DRAW_BUFFER5_WEBGL={name:"DRAW_BUFFER5_WEBGL",value:34858,description:"Draw buffer",extensionName:"WEBGL_draw_buffers"},d.DRAW_BUFFER6_WEBGL={name:"DRAW_BUFFER6_WEBGL",value:34859,description:"Draw buffer",extensionName:"WEBGL_draw_buffers"},d.DRAW_BUFFER7_WEBGL={name:"DRAW_BUFFER7_WEBGL",value:34860,description:"Draw buffer",extensionName:"WEBGL_draw_buffers"},d.DRAW_BUFFER8_WEBGL={name:"DRAW_BUFFER8_WEBGL",value:34861,description:"Draw buffer",extensionName:"WEBGL_draw_buffers"},d.DRAW_BUFFER9_WEBGL={name:"DRAW_BUFFER9_WEBGL",value:34862,description:"Draw buffer",extensionName:"WEBGL_draw_buffers"},d.DRAW_BUFFER10_WEBGL={name:"DRAW_BUFFER10_WEBGL",value:34863,description:"Draw buffer",extensionName:"WEBGL_draw_buffers"},d.DRAW_BUFFER11_WEBGL={name:"DRAW_BUFFER11_WEBGL",value:34864,description:"Draw buffer",extensionName:"WEBGL_draw_buffers"},d.DRAW_BUFFER12_WEBGL={name:"DRAW_BUFFER12_WEBGL",value:34865,description:"Draw buffer",extensionName:"WEBGL_draw_buffers"},d.DRAW_BUFFER13_WEBGL={name:"DRAW_BUFFER13_WEBGL",value:34866,description:"Draw buffer",extensionName:"WEBGL_draw_buffers"},d.DRAW_BUFFER14_WEBGL={name:"DRAW_BUFFER14_WEBGL",value:34867,description:"Draw buffer",extensionName:"WEBGL_draw_buffers"},d.DRAW_BUFFER15_WEBGL={name:"DRAW_BUFFER15_WEBGL",value:34868,description:"Draw buffer",extensionName:"WEBGL_draw_buffers"},d.MAX_COLOR_ATTACHMENTS_WEBGL={name:"MAX_COLOR_ATTACHMENTS_WEBGL",value:36063,description:"Maximum number of framebuffer color attachment points",extensionName:"WEBGL_draw_buffers"},d.MAX_DRAW_BUFFERS_WEBGL={name:"MAX_DRAW_BUFFERS_WEBGL",value:34852,description:"Maximum number of draw buffers",extensionName:"WEBGL_draw_buffers"},d.VERTEX_ARRAY_BINDING_OES={name:"VERTEX_ARRAY_BINDING_OES",value:34229,description:"The bound vertex array object (VAO).",extensionName:"VERTEX_ARRAY_BINDING_OES"},d.QUERY_COUNTER_BITS_EXT={name:"QUERY_COUNTER_BITS_EXT",value:34916,description:"The number of bits used to hold the query result for the given target.",extensionName:"EXT_disjoint_timer_query"},d.CURRENT_QUERY_EXT={name:"CURRENT_QUERY_EXT",value:34917,description:"The currently active query.",extensionName:"EXT_disjoint_timer_query"},d.QUERY_RESULT_EXT={name:"QUERY_RESULT_EXT",value:34918,description:"The query result.",extensionName:"EXT_disjoint_timer_query"},d.QUERY_RESULT_AVAILABLE_EXT={name:"QUERY_RESULT_AVAILABLE_EXT",value:34919,description:"A Boolean indicating whether or not a query result is available.",extensionName:"EXT_disjoint_timer_query"},d.TIME_ELAPSED_EXT={name:"TIME_ELAPSED_EXT",value:35007,description:"Elapsed time (in nanoseconds).",extensionName:"EXT_disjoint_timer_query"},d.TIMESTAMP_EXT={name:"TIMESTAMP_EXT",value:36392,description:"The current time.",extensionName:"EXT_disjoint_timer_query"},d.GPU_DISJOINT_EXT={name:"GPU_DISJOINT_EXT",value:36795,description:"A Boolean indicating whether or not the GPU performed any disjoint operation.",extensionName:"EXT_disjoint_timer_query"},d.zeroMeaningByCommand={getError:"NO_ERROR",blendFunc:"ZERO",blendFuncSeparate:"ZERO",readBuffer:"NONE",getFramebufferAttachmentParameter:"NONE",texParameterf:"NONE",texParameteri:"NONE",drawArrays:"POINTS",drawElements:"POINTS",drawArraysInstanced:"POINTS",drawArraysInstancedAngle:"POINTS",drawBuffers:"POINTS",drawElementsInstanced:"POINTS",drawRangeElements:"POINTS"},d.oneMeaningByCommand={blendFunc:"ONE",blendFuncSeparate:"ONE",drawArrays:"LINES",drawElements:"LINES",drawArraysInstanced:"LINES",drawArraysInstancedAngle:"LINES",drawBuffers:"LINES",drawElementsInstanced:"LINES",drawRangeElements:"LINES"};const m={},p={};!function(){for(const e in d)if(d.hasOwnProperty(e)){const t=d[e];m[t.name]=t,p[t.value]=t}}();class g extends l{get analyserName(){return g.analyserName}appendToAnalysis(e,t){if(!e.commands)return;const n={total:0,totalTriangles:0,totalTriangleStrip:0,totalTriangleFan:0,totalLines:0,totalLineStrip:0,totalLineLoop:0,totalPoints:0};for(const t of e.commands)"drawArrays"===t.name&&t.commandArguments.length>=3||"drawArraysInstanced"===t.name&&t.commandArguments.length>=3||"drawArraysInstancedANGLE"===t.name&&t.commandArguments.length>=3?this.appendToPrimitives(n,t.commandArguments[0],t.commandArguments[2]):"drawElements"===t.name&&t.commandArguments.length>=2||"drawElementsInstanced"===t.name&&t.commandArguments.length>=2||"drawElementsInstancedANGLE"===t.name&&t.commandArguments.length>=2?this.appendToPrimitives(n,t.commandArguments[0],t.commandArguments[1]):"drawRangeElements"===t.name&&t.commandArguments.length>=4&&this.appendToPrimitives(n,t.commandArguments[0],t.commandArguments[3]);t.total=n.total,t.triangles=n.totalTriangles,t.triangleStrip=n.totalTriangleStrip,t.triangleFan=n.totalTriangleFan,t.lines=n.totalLines,t.lineStrip=n.totalLineStrip,t.lineLoop=n.totalLineLoop,t.points=n.totalPoints}appendToPrimitives(e,t,n){t===d.POINTS.value?e.totalPoints+=n:t===d.LINES.value?e.totalLines+=n:t===d.LINE_STRIP.value?e.totalLineStrip+=n:t===d.LINE_LOOP.value?e.totalLineLoop+=n:t===d.TRIANGLES.value?e.totalTriangles+=n:t===d.TRIANGLE_STRIP.value?e.totalTriangleStrip+=n:t===d.TRIANGLE_FAN.value&&(e.totalTriangleFan+=n),e.total+=n}}g.analyserName="Primitives";class f{constructor(e){this.contextInformation=e,this.analysers=[],this.initAnalysers()}appendAnalyses(e){for(const t in this.analysers)this.analysers.hasOwnProperty(t)&&this.analysers[t].appendAnalysis(e)}initAnalysers(){this.analysers.push(new c(this.contextInformation),new h(this.contextInformation),new g(this.contextInformation))}}class E{static getWebGlObjectTag(e){return e[E.SPECTOROBJECTTAGKEY]}static attachWebGlObjectTag(e,t){t.displayText=E.stringifyWebGlObjectTag(t),e[E.SPECTOROBJECTTAGKEY]=t}static stringifyWebGlObjectTag(e){return e?`${e.typeName} - ID: ${e.id}`:"No tag available."}}E.SPECTOROBJECTTAGKEY="__SPECTOR_Object_TAG";class v{constructor(){this.id=0}get type(){return window[this.typeName]||null}tagWebGlObject(e){if(!this.type)return;let t;if(!e)return t;if(t=E.getWebGlObjectTag(e),t)return t;if(e instanceof this.type){const n=this.getNextId();return t={typeName:this.typeName,id:n},E.attachWebGlObjectTag(e,t),t}return t}getNextId(){return this.id++}}class _{constructor(e){this.options=e}createCapture(e,t,n){const i=class{static getStackTrace(e=0,t=0){const n=[];try{throw new Error("Errorator.")}catch(e){if(e.stack){const t=e.stack.split("\n");for(let e=0,i=t.length;e0;t++)n.shift();for(let e=0;e0;e++)n.pop()}return n}}.getStackTrace(4,1),r=0===e.name.indexOf("uniform")?this.stringifyUniform(e.arguments):this.stringify(e.arguments,e.result),s={id:t,startTime:e.startTime,commandEndTime:e.endTime,endTime:0,name:e.name,commandArguments:e.arguments,result:e.result,stackTrace:i,status:0,marker:n,text:r};this.transformCapture(s);for(let e=0;e50&&(s.commandArguments[e]="Array Length: "+t.length)}if(s.commandArguments){const e=[];for(let t=0;t0&&(n+=": "+this.stringifyArgs(e).join(", ")),null!=t&&(n+=" -> "+this.stringifyResult(t)),n}stringifyUniform(e){let t=this.spiedCommandName;if(e&&e.length>0){const n=[];n.push(this.stringifyValue(e[0]));for(let t=1;t0&&"number"==typeof s)i.push(null!==(n=null===(t=e[r])||void 0===t?void 0:t.toFixed(0))&&void 0!==n?n:"0");else{const e=this.stringifyValue(s);i.push(e)}}return i}}C.commandName="bufferSubData";class A{static storeOriginFunction(e,t){if(!e)return;if(!e[t])return;const n=this.getOriginFunctionName(t);e[n]||(e[n]=e[t])}static resetOriginFunction(e,t){if(!e)return;if(!e[t])return;const n=this.getOriginFunctionName(t);e[n]&&(e[t]=e[n],delete e[n])}static storePrototypeOriginFunction(e,t){if(!e)return;if(!e.prototype[t])return;const n=this.getOriginFunctionName(t);e.prototype[n]||(e.prototype[n]=e.prototype[t])}static executePrototypeOriginFunction(e,t,n,i){if(!e)return;const r=this.getOriginFunctionName(n);return t.prototype[r]?(e[r]||(e[r]=t.prototype[r]),this.executeFunction(e,r,i)):void 0}static executeOriginFunction(e,t,n){if(!e)return;const i=this.getOriginFunctionName(t);return e[i]?this.executeFunction(e,i,n):void 0}static executeFunction(e,t,n){const i=n;if(void 0===i||0===i.length)return e[t]();switch(i.length){case 1:return e[t](i[0]);case 2:return e[t](i[0],i[1]);case 3:return e[t](i[0],i[1],i[2]);case 4:return e[t](i[0],i[1],i[2],i[3]);case 5:return e[t](i[0],i[1],i[2],i[3],i[4]);case 6:return e[t](i[0],i[1],i[2],i[3],i[4],i[5]);case 7:return e[t](i[0],i[1],i[2],i[3],i[4],i[5],i[6]);case 8:return e[t](i[0],i[1],i[2],i[3],i[4],i[5],i[6],i[7]);case 9:return e[t](i[0],i[1],i[2],i[3],i[4],i[5],i[6],i[7],i[8]);case 10:return e[t](i[0],i[1],i[2],i[3],i[4],i[5],i[6],i[7],i[8],i[9]);case 11:return e[t](i[0],i[1],i[2],i[3],i[4],i[5],i[6],i[7],i[8],i[9],i[10]);case 12:return e[t](i[0],i[1],i[2],i[3],i[4],i[5],i[6],i[7],i[8],i[9],i[10],i[11]);case 13:return e[t](i[0],i[1],i[2],i[3],i[4],i[5],i[6],i[7],i[8],i[9],i[10],i[11],i[12]);case 14:return e[t](i[0],i[1],i[2],i[3],i[4],i[5],i[6],i[7],i[8],i[9],i[10],i[11],i[12],i[13]);case 15:return e[t](i[0],i[1],i[2],i[3],i[4],i[5],i[6],i[7],i[8],i[9],i[10],i[11],i[12],i[13],i[14]);case 16:return e[t](i[0],i[1],i[2],i[3],i[4],i[5],i[6],i[7],i[8],i[9],i[10],i[11],i[12],i[13],i[14],i[15]);case 17:return e[t](i[0],i[1],i[2],i[3],i[4],i[5],i[6],i[7],i[8],i[9],i[10],i[11],i[12],i[13],i[14],i[15],i[16]);case 18:return e[t](i[0],i[1],i[2],i[3],i[4],i[5],i[6],i[7],i[8],i[9],i[10],i[11],i[12],i[13],i[14],i[15],i[16],i[17]);case 19:return e[t](i[0],i[1],i[2],i[3],i[4],i[5],i[6],i[7],i[8],i[9],i[10],i[11],i[12],i[13],i[14],i[15],i[16],i[17],i[18]);case 20:return e[t](i[0],i[1],i[2],i[3],i[4],i[5],i[6],i[7],i[8],i[9],i[10],i[11],i[12],i[13],i[14],i[15],i[16],i[17],i[18],i[19]);default:return e[t].apply(e,i)}}static getOriginFunctionName(e){return this.originFunctionPrefix+e}}A.originFunctionPrefix="__SPECTOR_Origin_";class R extends _{get spiedCommandName(){return R.commandName}stringifyArgs(e){const t=[];if(e.length>0){const n=e[0],i=this.stringifyValue(n);t.push(i)}if(e.length>1){const n=""+e[1];t.push(n)}return e.length>2&&t.push(e[2]),t}}R.commandName="bindAttribLocation";class S extends _{get spiedCommandName(){return S.commandName}stringifyArgs(e){const t=[],n=this.options.context.getParameter(d.READ_FRAMEBUFFER_BINDING.value),i=this.options.tagWebGlObject(n);t.push("READ FROM: "+this.stringifyValue(i));const r=this.options.context.getParameter(d.DRAW_FRAMEBUFFER_BINDING.value),s=this.options.tagWebGlObject(r);t.push("WRITE TO: "+this.stringifyValue(s));for(let n=0;n<8;n++)t.push(e[n]);return(e[8]&d.DEPTH_BUFFER_BIT.value)===d.DEPTH_BUFFER_BIT.value&&t.push(d.DEPTH_BUFFER_BIT.name),(e[8]&d.STENCIL_BUFFER_BIT.value)===d.STENCIL_BUFFER_BIT.value&&t.push(d.STENCIL_BUFFER_BIT.name),(e[8]&d.COLOR_BUFFER_BIT.value)===d.COLOR_BUFFER_BIT.value&&t.push(d.COLOR_BUFFER_BIT.name),t.push(d.stringifyWebGlConstant(e[9],"blitFrameBuffer")),t}}S.commandName="blitFrameBuffer";class T extends _{get spiedCommandName(){return T.commandName}stringifyArgs(e){const t=[];return(e[0]&d.DEPTH_BUFFER_BIT.value)===d.DEPTH_BUFFER_BIT.value&&t.push(d.DEPTH_BUFFER_BIT.name),(e[0]&d.STENCIL_BUFFER_BIT.value)===d.STENCIL_BUFFER_BIT.value&&t.push(d.STENCIL_BUFFER_BIT.name),(e[0]&d.COLOR_BUFFER_BIT.value)===d.COLOR_BUFFER_BIT.value&&t.push(d.COLOR_BUFFER_BIT.name),t}}T.commandName="clear";const b=["lineWidth"];class w extends _{constructor(e,t){super(e),this.internalSpiedCommandName=t,this.isDeprecated=b.indexOf(this.spiedCommandName)>-1}get spiedCommandName(){return this.internalSpiedCommandName}transformCapture(e){this.isDeprecated&&(e.status=50)}}class x extends _{get spiedCommandName(){return x.commandName}stringifyArgs(e){const t=[];return t.push(e[0]),t}}x.commandName="disableVertexAttribArray";class y extends _{get spiedCommandName(){return y.commandName}stringifyArgs(e){const t=[];return t.push(d.stringifyWebGlConstant(e[0],"drawArrays")),t.push(e[1]+" indices"),t.push(e[2]),t}}y.commandName="drawArrays";class L extends _{get spiedCommandName(){return L.commandName}stringifyArgs(e){const t=[];return t.push(d.stringifyWebGlConstant(e[0],"drawArraysInstanced")),t.push(e[1]),t.push(e[2]),t.push(e[3]),t}}L.commandName="drawArraysInstanced";class I extends _{get spiedCommandName(){return I.commandName}stringifyArgs(e){const t=[];return t.push(d.stringifyWebGlConstant(e[0],"drawArraysInstancedANGLE")),t.push(e[1]),t.push(e[2]),t.push(e[3]),t}}I.commandName="drawArraysInstancedANGLE";class F extends _{get spiedCommandName(){return F.commandName}stringifyArgs(e){const t=[];return t.push(d.stringifyWebGlConstant(e[0],"drawElements")),t.push(e[1]+" indices"),t.push(d.stringifyWebGlConstant(e[2],"drawElements")),t.push(e[3]),t}}F.commandName="drawElements";class N extends _{get spiedCommandName(){return N.commandName}stringifyArgs(e){const t=[];return t.push(d.stringifyWebGlConstant(e[0],"drawElementsInstancedANGLE")),t.push(e[1]+" indices"),t.push(d.stringifyWebGlConstant(e[2],"drawElementsInstancedANGLE")),t.push(e[3]),t.push(e[4]),t}}N.commandName="drawElementsInstancedANGLE";class M extends _{get spiedCommandName(){return M.commandName}stringifyArgs(e){const t=[];return t.push(d.stringifyWebGlConstant(e[0],"drawElementsInstanced")),t.push(e[1]+" indices"),t.push(d.stringifyWebGlConstant(e[2],"drawElementsInstanced")),t.push(e[3]),t.push(e[4]),t}}M.commandName="drawElementsInstanced";class O extends _{get spiedCommandName(){return O.commandName}stringifyArgs(e){const t=[];return t.push(d.stringifyWebGlConstant(e[0],"drawRangeElements")),t.push(e[1]),t.push(e[2]),t.push(e[3]),t.push(d.stringifyWebGlConstant(e[4],"drawRangeElements")),t.push(e[5]),t}}O.commandName="drawRangeElements";class B extends _{get spiedCommandName(){return B.commandName}stringifyResult(e){if(e)return`name: ${e.name}, size: ${e.size}, type: ${e.type}`}}B.commandName="getActiveAttrib";class $ extends _{get spiedCommandName(){return $.commandName}stringifyResult(e){if(e)return`name: ${e.name}, size: ${e.size}, type: ${e.type}`}}$.commandName="getActiveUniform";class P extends _{get spiedCommandName(){return P.commandName}stringifyResult(e){var t;if(null!=e)return null!==(t=null==e?void 0:e.toFixed(0))&&void 0!==t?t:"0"}}P.commandName="getAttribLocation";class k extends _{get spiedCommandName(){return k.commandName}stringifyResult(e){return e?"true":"false"}}k.commandName="getExtension";class D extends _{get spiedCommandName(){return D.commandName}stringifyResult(e){if(!e)return"null";const t=E.getWebGlObjectTag(e);return t?t.displayText:e}}D.commandName="getParameter";class U extends _{get spiedCommandName(){return U.commandName}stringifyResult(e){if(e)return`min: ${e.rangeMin}, max: ${e.rangeMax}, precision: ${e.precision}`}}U.commandName="getShaderPrecisionFormat";class G extends _{get spiedCommandName(){return G.commandName}stringifyResult(e){if(e)return`name: ${e.name}, size: ${e.size}, type: ${e.type}`}}G.commandName="getTransformFeedbackVarying";class W extends _{get spiedCommandName(){return W.commandName}stringifyArgs(e){const t=[];return t.push(d.stringifyWebGlConstant(e[0],"multiDrawArraysInstancedBaseInstanceWEBGL")),t.push(`drawCount=${e[9]}`),t.push(e[2]),t.push(e[4]),t.push(e[6]),t.push(e[8]),t}}W.commandName="multiDrawArraysInstancedBaseInstanceWEBGL";class V extends _{get spiedCommandName(){return V.commandName}stringifyArgs(e){const t=[];return t.push(d.stringifyWebGlConstant(e[0],"drawArrays")),t.push(`drawCount=${e[7]}`),t.push(e[2]),t.push(e[4]),t.push(e[6]),t}}V.commandName="multiDrawArraysInstancedWEBGL";class H extends _{get spiedCommandName(){return H.commandName}stringifyArgs(e){const t=[];return t.push(d.stringifyWebGlConstant(e[0],"drawArrays")),t.push(`drawCount=${e[5]}`),t.push(e[2]),t.push(e[4]),t}}H.commandName="multiDrawArraysWEBGL";class X extends _{get spiedCommandName(){return X.commandName}stringifyArgs(e){const t=[];return t.push(d.stringifyWebGlConstant(e[0],"drawArrays")),t.push(d.stringifyWebGlConstant(e[3],"drawArrays")),t.push(`drawCount=${e[11]}`),t.push(e[2]),t.push(e[4]),t.push(e[6]),t.push(e[8]),t.push(e[10]),t}}X.commandName="multiDrawElementsInstancedBaseVertexBaseInstanceWEBGL";class z extends _{get spiedCommandName(){return z.commandName}stringifyArgs(e){const t=[];return t.push(d.stringifyWebGlConstant(e[0],"drawArrays")),t.push(d.stringifyWebGlConstant(e[3],"drawArrays")),t.push(`drawCount=${e[8]}`),t.push(e[2]),t.push(e[5]),t.push(e[7]),t}}z.commandName="multiDrawElementsInstancedWEBGL";class K extends _{get spiedCommandName(){return K.commandName}stringifyArgs(e){const t=[];return t.push(d.stringifyWebGlConstant(e[0],"drawArrays")),t.push(d.stringifyWebGlConstant(e[3],"drawArrays")),t.push(`drawCount=${e[6]}`),t.push(e[2]),t.push(e[5]),t}}K.commandName="multiDrawElementsWEBGL";class j extends _{get spiedCommandName(){return j.commandName}stringifyArgs(e){const t=[];return t.push(d.stringifyWebGlConstant(e[0],"drawArraysInstanced")),t.push(e[1]),t.push(e[2]),t.push(e[3]),t.push(`baseInstance = ${e[4]}`),t}}j.commandName="drawArraysInstancedBaseInstanceWEBGL";class Y extends _{get spiedCommandName(){return Y.commandName}stringifyArgs(e){const t=[];return t.push(d.stringifyWebGlConstant(e[0],"drawElementsInstanced")),t.push(e[1]+" indices"),t.push(d.stringifyWebGlConstant(e[2],"drawElementsInstanced")),t.push(e[3]),t.push(e[4]),t.push(`baseVertex = ${e[5]}`),t.push(`baseInstance = ${e[6]}`),t}}Y.commandName="drawElementsInstancedBaseVertexBaseInstanceWEBGL";class q extends _{get spiedCommandName(){return q.commandName}stringifyArgs(e){var t,n;const i=[];for(let r=0;r<4;r++)i.push(null!==(n=null===(t=e[r])||void 0===t?void 0:t.toFixed(0))&&void 0!==n?n:"0");return i}}function Z(e){return null==e?"":`${e.toFixed(0)} (0b${(e>>>0).toString(2)})`}q.commandName="scissor";class Q extends _{get spiedCommandName(){return Q.commandName}stringifyArgs(e){const t=[];return t.push(Z(e[0])),t}}Q.commandName="stencilMask";class J extends _{get spiedCommandName(){return J.commandName}stringifyArgs(e){const t=[];return t.push(d.stringifyWebGlConstant(e[0],"stencilMaskSeparate")),t.push(Z(e[1])),t}}J.commandName="stencilMaskSeparate";class ee extends _{get spiedCommandName(){return ee.commandName}stringifyArgs(e){const t=[];return t.push(d.stringifyWebGlConstant(e[0],"stencilFunc")),t.push(Z(e[1])),t.push(Z(e[2])),t}}ee.commandName="stencilFunc";class te extends _{get spiedCommandName(){return te.commandName}stringifyArgs(e){const t=[];return t.push(d.stringifyWebGlConstant(e[0],"stencilFuncSeparate")),t.push(d.stringifyWebGlConstant(e[1],"stencilFuncSeparate")),t.push(Z(e[2])),t.push(Z(e[3])),t}}te.commandName="stencilFuncSeparate";class ne extends _{get spiedCommandName(){return ne.commandName}stringifyArgs(e){const t=[];return t.push(e[0]),t.push(e[1]),t.push(d.stringifyWebGlConstant(e[2],"vertexAttribPointer")),t.push(e[3]),t.push(e[4]),t.push(e[5]),t}}ne.commandName="vertexAttribPointer";class ie extends _{get spiedCommandName(){return ie.commandName}stringifyArgs(e){const t=[];for(let n=0;n<4;n++)t.push(e[n].toFixed(0));return t}}ie.commandName="viewport";class re extends _{get spiedCommandName(){return re.commandName}stringifyArgs(e){const t=[];return t.push(e[0]),t}}re.commandName="enableVertexAttribArray";class se{constructor(e){this.spiedCommandName=e.spiedCommandName,this.spiedCommandRunningContext=e.spiedCommandRunningContext,this.spiedCommand=this.spiedCommandRunningContext[this.spiedCommandName],A.storeOriginFunction(this.spiedCommandRunningContext,this.spiedCommandName),this.callback=e.callback,this.commandOptions={context:e.context,contextVersion:e.contextVersion,extensions:e.extensions,toggleCapture:e.toggleCapture},this.initCustomCommands(),this.initCommand()}spy(){this.spiedCommandRunningContext[this.spiedCommandName]=this.overloadedCommand}unSpy(){this.spiedCommandRunningContext[this.spiedCommandName]=this.spiedCommand}createCapture(e,t,n){return this.command.createCapture(e,t,n)}initCommand(){se.customCommandsConstructors[this.spiedCommandName]?this.command=se.customCommandsConstructors[this.spiedCommandName](this.commandOptions):this.command=new w(this.commandOptions,this.spiedCommandName),this.overloadedCommand=this.getSpy()}getSpy(){const e=this;return function(){const t=a.now,n=A.executeOriginFunction(e.spiedCommandRunningContext,e.spiedCommandName,arguments),i=a.now,r={name:e.spiedCommandName,arguments,result:n,startTime:t,endTime:i};return e.callback(e,r),n}}initCustomCommands(){se.customCommandsConstructors||(se.customCommandsConstructors={[R.commandName]:e=>new R(e),[S.commandName]:e=>new S(e),[C.commandName]:e=>new C(e),[T.commandName]:e=>new T(e),[x.commandName]:e=>new x(e),[y.commandName]:e=>new y(e),[L.commandName]:e=>new L(e),[I.commandName]:e=>new I(e),[F.commandName]:e=>new F(e),[M.commandName]:e=>new M(e),[N.commandName]:e=>new N(e),[O.commandName]:e=>new O(e),[B.commandName]:e=>new B(e),[$.commandName]:e=>new $(e),[P.commandName]:e=>new P(e),[k.commandName]:e=>new k(e),[D.commandName]:e=>new D(e),[U.commandName]:e=>new U(e),[G.commandName]:e=>new G(e),[W.commandName]:e=>new W(e),[V.commandName]:e=>new V(e),[H.commandName]:e=>new H(e),[X.commandName]:e=>new X(e),[z.commandName]:e=>new z(e),[K.commandName]:e=>new K(e),[j.commandName]:e=>new j(e),[Y.commandName]:e=>new Y(e),[q.commandName]:e=>new q(e),[Q.commandName]:e=>new Q(e),[J.commandName]:e=>new J(e),[ee.commandName]:e=>new ee(e),[te.commandName]:e=>new te(e),[ne.commandName]:e=>new ne(e),[ie.commandName]:e=>new ie(e),[re.commandName]:e=>new re(e)})}}class oe{constructor(e){this.options=e,this.context=e.context,this.contextVersion=e.contextVersion,this.extensions=e.extensions,this.toggleCapture=e.toggleCapture,this.consumeCommands=this.getConsumeCommands(),this.changeCommandsByState=this.getChangeCommandsByState(),this.commandNameToStates=this.getCommandNameToStates()}get requireStartAndStopStates(){return!0}startCapture(e,t,n){return this.quickCapture=t,this.fullCapture=n,this.capturedCommandsByState={},e&&this.requireStartAndStopStates&&(this.currentState={},this.readFromContextNoSideEffects()),this.copyCurrentStateToPrevious(),this.currentState={},this.previousState}stopCapture(){return this.requireStartAndStopStates&&this.readFromContextNoSideEffects(),this.analyse(void 0),this.currentState}registerCallbacks(e){for(const t in this.changeCommandsByState)if(this.changeCommandsByState.hasOwnProperty(t))for(const n of this.changeCommandsByState[t])e[n]=e[n]||[],e[n].push(this.onChangeCommand.bind(this));for(const t of this.consumeCommands)e[t]=e[t]||[],e[t].push(this.onConsumeCommand.bind(this))}getStateData(){return this.currentState}getConsumeCommands(){return[]}getChangeCommandsByState(){return{}}copyCurrentStateToPrevious(){this.currentState&&(this.previousState=this.currentState)}onChangeCommand(e){const t=this.commandNameToStates[e.name];for(const n of t){if(!this.isValidChangeCommand(e,n))return;this.capturedCommandsByState[n]=this.capturedCommandsByState[n]||[],this.capturedCommandsByState[n].push(e)}}isValidChangeCommand(e,t){return!0}onConsumeCommand(e){this.isValidConsumeCommand(e)&&(this.readFromContextNoSideEffects(),this.analyse(e),this.storeCommandIds(),e[this.stateName]=this.currentState,this.startCapture(!1,this.quickCapture,this.fullCapture))}isValidConsumeCommand(e){return this.lastCommandName=null==e?void 0:e.name,!0}analyse(e){for(const t in this.capturedCommandsByState)if(this.capturedCommandsByState.hasOwnProperty(t)){const n=this.capturedCommandsByState[t],i=n.length-1;if(i>=0)if(e){for(let t=0;t1&&this.parameters.push(this.getWebgl2Parameters());const e={};for(let t=1;t<=this.contextVersion&&!(t>this.parameters.length);t++)if(this.parameters[t-1])for(const n of this.parameters[t-1])if(n.changeCommands)for(const t of n.changeCommands)e[n.constant.name]=e[n.constant.name]||[],e[n.constant.name].push(t);return e}readFromContext(){for(let e=1;e<=this.contextVersion&&!(e>this.parameters.length);e++)for(const t of this.parameters[e-1]){const e=this.readParameterFromContext(t);if(null==e){const n=this.stringifyParameterValue(e,t);this.currentState[t.constant.name]=n;continue}const n=E.getWebGlObjectTag(e);if(n)this.currentState[t.constant.name]=n;else{const n=this.stringifyParameterValue(e,t);this.currentState[t.constant.name]=n}}}readParameterFromContext(e){return e.constant.extensionName&&!this.extensions[e.constant.extensionName]?`Extension ${e.constant.extensionName} is unavailable.`:this.context.getParameter(e.constant.value)}stringifyParameterValue(e,t){if(null===e)return"null";if(void 0===e)return"undefined";if(30===t.returnType)return Z(e);if("number"==typeof e&&d.isWebGlConstant(e)){if(20===t.returnType){const n=t.changeCommands&&t.changeCommands[0]||"";return d.stringifyWebGlConstant(e,n)}return e}if(e.length&&"string"!=typeof e){const t=[];for(let n=0;n1?i=this.context.getFramebufferAttachmentParameter(t,n,d.FRAMEBUFFER_ATTACHMENT_STENCIL_SIZE.value):this.context.getFramebufferAttachmentParameter(t,n,d.FRAMEBUFFER_ATTACHMENT_OBJECT_NAME.value)===d.RENDERBUFFER.value&&(i=e.getRenderbufferParameter(e.RENDERBUFFER,e.RENDERBUFFER_STENCIL_SIZE))):i=this.readParameterFromContext({constant:d.STENCIL_BITS}),this.currentState[d.STENCIL_BITS.name]=""+i}isValidChangeCommand(e,t){return"enable"===e.name||"disable"===e.name?e.commandArguments[0]===d.STENCIL_TEST.value:"stencilOp"===e.name||"stencilOpSeparate"===e.name?_e.stencilOpStates.indexOf(e.commandArguments[0])>0:"stencilFunc"===e.name||"stencilFuncSeparate"===e.name?_e.stencilFuncStates.indexOf(e.commandArguments[0])>0:"stencilMask"!==e.name&&"stencilMaskSeparate"!==e.name||_e.stencilMaskStates.indexOf(e.commandArguments[0])>0}getConsumeCommands(){return u}isStateEnable(e,t){return this.context.isEnabled(d.STENCIL_TEST.value)}}_e.stateName="StencilState",_e.stencilOpStates=[d.STENCIL_BACK_FAIL.value,d.STENCIL_BACK_PASS_DEPTH_FAIL.value,d.STENCIL_BACK_PASS_DEPTH_PASS.value,d.STENCIL_FAIL.value,d.STENCIL_PASS_DEPTH_FAIL.value,d.STENCIL_PASS_DEPTH_PASS.value],_e.stencilFuncStates=[d.STENCIL_BACK_FUNC.value,d.STENCIL_BACK_REF.value,d.STENCIL_BACK_VALUE_MASK.value,d.STENCIL_FUNC.value,d.STENCIL_REF.value,d.STENCIL_VALUE_MASK.value],_e.stencilMaskStates=[d.STENCIL_BACK_WRITEMASK.value,d.STENCIL_WRITEMASK.value];class Ce{static isSupportedCombination(e,t,n){return e=e||d.UNSIGNED_BYTE.value,((t=t||d.RGBA.value)===d.RGB.value||t===d.RGBA.value)&&(n===d.RGB.value||n===d.RGBA.value||n===d.RGBA8.value||n===d.RGBA16F.value||n===d.RGBA32F.value||n===d.RGB16F.value||n===d.RGB32F.value||n===d.R11F_G11F_B10F.value||n===d.SRGB8.value||n===d.SRGB8_ALPHA8.value)&&this.isSupportedComponentType(e)}static readPixels(e,t,n,i,r,s){e.getError(),s===d.UNSIGNED_NORMALIZED.value&&(s=d.UNSIGNED_BYTE.value);const o=i*r*4;let a;if(s===d.UNSIGNED_BYTE.value?a=new Uint8Array(o):(s=d.FLOAT.value,a=new Float32Array(o)),e.readPixels(t,n,i,r,e.RGBA,s,a),e.getError())return;if(s===d.UNSIGNED_BYTE.value)return a;const l=new Uint8Array(i*r*4);for(let e=0;e1){const e=this.context.getParameter(d.MAX_DRAW_BUFFERS.value);for(let n=0;n1?this.context.getFramebufferAttachmentParameter(a,n.value,d.FRAMEBUFFER_ATTACHMENT_COMPONENT_TYPE.value):d.UNSIGNED_BYTE.value;l===d.RENDERBUFFER.value?this.readFrameBufferAttachmentFromRenderBuffer(e,t,n,i,r,s,o,a,u,c):l===d.TEXTURE.value&&this.readFrameBufferAttachmentFromTexture(e,t,n,i,r,s,o,a,u,c)}readFrameBufferAttachmentFromRenderBuffer(e,t,n,i,r,s,o,a,l,c){let u=0,h=0;if(c.__SPECTOR_Object_CustomData){const e=c.__SPECTOR_Object_CustomData;if(s=e.width,o=e.height,u=e.samples,h=e.internalFormat,!u&&!Ce.isSupportedCombination(l,d.RGBA.value,h))return}else s+=i,o+=r;if(i=r=0,u){const a=e,c=e.createRenderbuffer(),u=e.getParameter(e.RENDERBUFFER_BINDING);e.bindRenderbuffer(e.RENDERBUFFER,c),e.renderbufferStorage(e.RENDERBUFFER,h,s,o),e.bindRenderbuffer(e.RENDERBUFFER,u),e.bindFramebuffer(d.FRAMEBUFFER.value,this.captureFrameBuffer),e.framebufferRenderbuffer(d.FRAMEBUFFER.value,d.COLOR_ATTACHMENT0.value,d.RENDERBUFFER.value,c);const m=a.getParameter(a.READ_FRAMEBUFFER_BINDING),p=a.getParameter(a.DRAW_FRAMEBUFFER_BINDING);a.bindFramebuffer(a.READ_FRAMEBUFFER,t),a.bindFramebuffer(a.DRAW_FRAMEBUFFER,this.captureFrameBuffer),a.blitFramebuffer(0,0,s,o,0,0,s,o,e.COLOR_BUFFER_BIT,e.NEAREST),a.bindFramebuffer(d.FRAMEBUFFER.value,this.captureFrameBuffer),a.bindFramebuffer(a.READ_FRAMEBUFFER,m),a.bindFramebuffer(a.DRAW_FRAMEBUFFER,p),this.context.checkFramebufferStatus(d.FRAMEBUFFER.value)===d.FRAMEBUFFER_COMPLETE.value&&this.getCapture(e,n.name,i,r,s,o,0,0,l),e.bindFramebuffer(d.FRAMEBUFFER.value,t),e.deleteRenderbuffer(c)}else e.bindFramebuffer(d.FRAMEBUFFER.value,this.captureFrameBuffer),e.framebufferRenderbuffer(d.FRAMEBUFFER.value,d.COLOR_ATTACHMENT0.value,d.RENDERBUFFER.value,c),this.context.checkFramebufferStatus(d.FRAMEBUFFER.value)===d.FRAMEBUFFER_COMPLETE.value&&this.getCapture(e,n.name,i,r,s,o,0,0,l),e.bindFramebuffer(d.FRAMEBUFFER.value,t)}readFrameBufferAttachmentFromTexture(e,t,n,i,r,s,o,a,l,c){let u=0;this.contextVersion>1&&(u=this.context.getFramebufferAttachmentParameter(a,n.value,d.FRAMEBUFFER_ATTACHMENT_TEXTURE_LAYER.value));const h=this.context.getFramebufferAttachmentParameter(a,n.value,d.FRAMEBUFFER_ATTACHMENT_TEXTURE_LEVEL.value),m=this.context.getFramebufferAttachmentParameter(a,n.value,d.FRAMEBUFFER_ATTACHMENT_TEXTURE_CUBE_MAP_FACE.value);m>0?p[m].name:d.TEXTURE_2D.name;let g=!1,f=l;if(c.__SPECTOR_Object_CustomData){const e=c.__SPECTOR_Object_CustomData;if(s=e.width,o=e.height,void 0!==e.type&&(f=e.type),g=e.target===d.TEXTURE_2D_ARRAY.name,!Ce.isSupportedCombination(e.type,e.format,e.internalFormat))return}else s+=i,o+=r;i=r=0,e.bindFramebuffer(d.FRAMEBUFFER.value,this.captureFrameBuffer),u>0||g?e.framebufferTextureLayer(d.FRAMEBUFFER.value,d.COLOR_ATTACHMENT0.value,c,h,u):e.framebufferTexture2D(d.FRAMEBUFFER.value,d.COLOR_ATTACHMENT0.value,m||d.TEXTURE_2D.value,c,h),this.context.checkFramebufferStatus(d.FRAMEBUFFER.value)===d.FRAMEBUFFER_COMPLETE.value&&this.getCapture(e,n.name,i,r,s,o,m,u,f),e.bindFramebuffer(d.FRAMEBUFFER.value,t)}getCapture(e,t,n,i,r,o,a,l,c){r=Math.floor(r),o=Math.floor(o);const u={attachmentName:t,src:null,textureCubeMapFace:a?p[a].name:null,textureLayer:l};if(!this.quickCapture)try{const t=Ce.readPixels(e,n,i,r,o,c);if(t){this.workingCanvas.width=r,this.workingCanvas.height=o;const e=this.workingContext2D.createImageData(r,o);if(e.data.set(t),this.workingContext2D.putImageData(e,0,0),this.fullCapture)this.captureCanvas.width=this.workingCanvas.width,this.captureCanvas.height=this.workingCanvas.height;else{const e=r/o;e<1?(this.captureCanvas.width=Ae.captureBaseSize*e,this.captureCanvas.height=Ae.captureBaseSize):e>1?(this.captureCanvas.width=Ae.captureBaseSize,this.captureCanvas.height=Ae.captureBaseSize/e):(this.captureCanvas.width=Ae.captureBaseSize,this.captureCanvas.height=Ae.captureBaseSize)}this.captureCanvas.width=Math.max(this.captureCanvas.width,1),this.captureCanvas.height=Math.max(this.captureCanvas.height,1),this.captureContext2D.globalCompositeOperation="copy",this.captureContext2D.scale(1,-1),this.captureContext2D.translate(0,-this.captureCanvas.height),this.captureContext2D.drawImage(this.workingCanvas,0,0,r,o,0,0,this.captureCanvas.width,this.captureCanvas.height),this.captureContext2D.setTransform(1,0,0,1,0,0),this.captureContext2D.globalCompositeOperation="source-over",u.src=this.captureCanvas.toDataURL()}}catch(e){s.warn("Spector can not capture the visual state: "+e)}this.currentState.Attachments.push(u)}analyse(e){}}Ae.stateName="VisualState",Ae.captureBaseSize=256;class Re{constructor(e){this.context=e.context,this.captureFrameBuffer=e.context.createFramebuffer(),this.workingCanvas=document.createElement("canvas"),this.workingContext2D=this.workingCanvas.getContext("2d"),this.captureCanvas=document.createElement("canvas"),this.captureContext2D=this.captureCanvas.getContext("2d"),this._setSmoothing(!0)}appendTextureState(e,t,n=null,i){if(!t)return;const r=t.__SPECTOR_Object_CustomData;if(r&&(this.fullCapture=i,r.type&&(e.textureType=this.getWebGlConstant(r.type)),r.format&&(e.format=this.getWebGlConstant(r.format)),r.internalFormat&&(e.internalFormat=this.getWebGlConstant(r.internalFormat)),e.width=r.width,e.height=r.height,r.depth&&(e.depth=r.depth),n)){const i="NEAREST"===e.samplerMagFilter||"NEAREST"===e.magFilter;e.visual=this.getTextureVisualState(n,t,r,i)}}getTextureVisualState(e,t,n,i){try{const r=this.context,s={};if(!Ce.isSupportedCombination(n.type,n.format,n.internalFormat))return s;const o=this.context.getParameter(d.FRAMEBUFFER_BINDING.value);r.bindFramebuffer(d.FRAMEBUFFER.value,this.captureFrameBuffer);try{const o=0,a=n.width,l=n.height;if(e===d.TEXTURE_3D&&n.depth){const e=r;for(let c=0;c2&&c2&&c1?(this.captureCanvas.width=Ae.captureBaseSize,this.captureCanvas.height=Ae.captureBaseSize/e):(this.captureCanvas.width=Ae.captureBaseSize,this.captureCanvas.height=Ae.captureBaseSize)}return this.captureCanvas.width=Math.max(this.captureCanvas.width,1),this.captureCanvas.height=Math.max(this.captureCanvas.height,1),this.captureContext2D.globalCompositeOperation="copy",this.captureContext2D.scale(1,-1),this.captureContext2D.translate(0,-this.captureCanvas.height),this._setSmoothing(!o),this.captureContext2D.drawImage(this.workingCanvas,0,0,i,r,0,0,this.captureCanvas.width,this.captureCanvas.height),this.captureContext2D.setTransform(1,0,0,1,0,0),this.captureContext2D.globalCompositeOperation="source-over",this.captureCanvas.toDataURL()}catch(e){}}getWebGlConstant(e){const t=p[e];return t?t.name:e+""}_setSmoothing(e){this.captureContext2D.imageSmoothingEnabled=e,this.captureContext2D.mozImageSmoothingEnabled=e,this.captureContext2D.oImageSmoothingEnabled=e,this.captureContext2D.webkitImageSmoothingEnabled=e,this.captureContext2D.msImageSmoothingEnabled=e}}Re.captureBaseSize=64,Re.cubeMapFaces=[d.TEXTURE_CUBE_MAP_POSITIVE_X,d.TEXTURE_CUBE_MAP_POSITIVE_Y,d.TEXTURE_CUBE_MAP_POSITIVE_Z,d.TEXTURE_CUBE_MAP_NEGATIVE_X,d.TEXTURE_CUBE_MAP_NEGATIVE_Y,d.TEXTURE_CUBE_MAP_NEGATIVE_Z];class Se{constructor(e){this.context=e.context}getUboValue(e,t,n,i){const r=Se.uboTypes[i];if(!r)return;const s=new r.arrayBufferView(n*r.lengthMultiplier),o=this.context,a=o.getIndexedParameter(d.UNIFORM_BUFFER_BINDING.value,e);if(a){const n=o.getIndexedParameter(d.UNIFORM_BUFFER_START.value,e),i=o.getParameter(d.UNIFORM_BUFFER_BINDING.value);try{o.bindBuffer(d.UNIFORM_BUFFER.value,a),o.getBufferSubData(d.UNIFORM_BUFFER.value,n+t,s)}catch(e){return}i&&o.bindBuffer(d.UNIFORM_BUFFER.value,i)}return Array.prototype.slice.call(s)}}Se.uboTypes={[d.BOOL.value]:{arrayBufferView:Uint8Array,lengthMultiplier:1},[d.BOOL_VEC2.value]:{arrayBufferView:Uint8Array,lengthMultiplier:2},[d.BOOL_VEC3.value]:{arrayBufferView:Uint8Array,lengthMultiplier:3},[d.BOOL_VEC4.value]:{arrayBufferView:Uint8Array,lengthMultiplier:4},[d.INT.value]:{arrayBufferView:Int32Array,lengthMultiplier:1},[d.INT_VEC2.value]:{arrayBufferView:Int32Array,lengthMultiplier:2},[d.INT_VEC3.value]:{arrayBufferView:Int32Array,lengthMultiplier:3},[d.INT_VEC4.value]:{arrayBufferView:Int32Array,lengthMultiplier:4},[d.UNSIGNED_INT.value]:{arrayBufferView:Uint32Array,lengthMultiplier:1},[d.UNSIGNED_INT_VEC2.value]:{arrayBufferView:Uint32Array,lengthMultiplier:2},[d.UNSIGNED_INT_VEC3.value]:{arrayBufferView:Uint32Array,lengthMultiplier:3},[d.UNSIGNED_INT_VEC4.value]:{arrayBufferView:Uint32Array,lengthMultiplier:4},[d.FLOAT.value]:{arrayBufferView:Float32Array,lengthMultiplier:1},[d.FLOAT_VEC2.value]:{arrayBufferView:Float32Array,lengthMultiplier:2},[d.FLOAT_VEC3.value]:{arrayBufferView:Float32Array,lengthMultiplier:3},[d.FLOAT_VEC4.value]:{arrayBufferView:Float32Array,lengthMultiplier:4},[d.FLOAT_MAT2.value]:{arrayBufferView:Float32Array,lengthMultiplier:4},[d.FLOAT_MAT2x3.value]:{arrayBufferView:Float32Array,lengthMultiplier:6},[d.FLOAT_MAT2x4.value]:{arrayBufferView:Float32Array,lengthMultiplier:8},[d.FLOAT_MAT3.value]:{arrayBufferView:Float32Array,lengthMultiplier:9},[d.FLOAT_MAT3x2.value]:{arrayBufferView:Float32Array,lengthMultiplier:6},[d.FLOAT_MAT3x4.value]:{arrayBufferView:Float32Array,lengthMultiplier:12},[d.FLOAT_MAT4.value]:{arrayBufferView:Float32Array,lengthMultiplier:16},[d.FLOAT_MAT4x2.value]:{arrayBufferView:Float32Array,lengthMultiplier:8},[d.FLOAT_MAT4x3.value]:{arrayBufferView:Float32Array,lengthMultiplier:12},[d.SAMPLER_2D.value]:{arrayBufferView:Uint8Array,lengthMultiplier:1},[d.SAMPLER_CUBE.value]:{arrayBufferView:Uint8Array,lengthMultiplier:1}};class Te extends v{get typeName(){return"WebGLBuffer"}}class be extends v{get typeName(){return"WebGLFramebuffer"}}class we extends v{get typeName(){return"WebGLProgram"}static saveInGlobalStore(e){const t=E.getWebGlObjectTag(e);t&&(this.store[t.id]=e)}static getFromGlobalStore(e){return this.store[e]}static updateInGlobalStore(e,t){if(!t)return;const n=this.getFromGlobalStore(e);if(!n)return;const i=E.getWebGlObjectTag(n);i&&(E.attachWebGlObjectTag(t,i),this.store[i.id]=t)}}we.store={};class xe extends v{get typeName(){return"WebGLQuery"}}class ye extends v{get typeName(){return"WebGLRenderbuffer"}}class Le extends v{get typeName(){return"WebGLSampler"}}class Ie extends v{get typeName(){return"WebGLShader"}}class Fe extends v{get typeName(){return"WebGLSync"}}class Ne extends v{get typeName(){return"WebGLTexture"}}class Me extends v{get typeName(){return"WebGLTransformFeedback"}}class Oe extends v{get typeName(){return"WebGLUniformLocation"}}class Be extends v{get typeName(){return"WebGLVertexArrayObject"}}class $e{static getProgramData(e,t){const n={LINK_STATUS:e.getProgramParameter(t,d.LINK_STATUS.value),VALIDATE_STATUS:e.getProgramParameter(t,d.VALIDATE_STATUS.value)},i=e.getAttachedShaders(t),r=new Array(2);let s=0;for(const t of i){const n=this.readShaderFromContext(e,t);s+=n.source.length,n.shaderType===d.FRAGMENT_SHADER.name?r[1]=n:r[0]=n}return{programStatus:n,shaders:r,length:s}}static readShaderFromContext(e,t){const n=e.getShaderSource(t),i=e.getExtension("WEBGL_debug_shaders"),r=i?i.getTranslatedShaderSource(t):null,s=e.getShaderParameter(t,d.SHADER_TYPE.value)===d.FRAGMENT_SHADER.value;let o=t&&t.__SPECTOR_Metadata&&t.__SPECTOR_Metadata.name?t.__SPECTOR_Metadata.name:this.readNameFromShaderSource(n);return o||(o=s?"Fragment":"Vertex"),{COMPILE_STATUS:e.getShaderParameter(t,d.COMPILE_STATUS.value),shaderType:s?d.FRAGMENT_SHADER.name:d.VERTEX_SHADER.name,name:o,source:n,translatedSource:r}}static readNameFromShaderSource(e){try{let t,n="";const i=/#define[\s]+SHADER_NAME[\s]+([\S]+)(\n|$)/gi;if(t=i.exec(e),null!==t&&(t.index===i.lastIndex&&i.lastIndex++,n=t[1]),""===n){const i=/#define[\s]+SHADER_NAME_B64[\s]+([\S]+)(\n|$)/gi;t=i.exec(e),null!==t&&(t.index===i.lastIndex&&i.lastIndex++,n=t[1]),n&&(n=decodeURIComponent(atob(n)))}return n}catch(e){return null}}}class Pe extends oe{constructor(e){super(e),this.drawCallTextureInputState=new Re(e),this.drawCallUboInputState=new Se(e)}get stateName(){return Pe.stateName}get requireStartAndStopStates(){return!1}getConsumeCommands(){return u}getChangeCommandsByState(){return{}}readFromContext(){var e,t;const n=this.context.getParameter(d.CURRENT_PROGRAM.value);if(!n)return;this.currentState.frameBuffer=this.readFrameBufferFromContext();const r=n.__SPECTOR_Object_CustomData?n.__SPECTOR_Object_CustomData:$e.getProgramData(this.context,n);if(this.currentState.programStatus=Object.assign({},r.programStatus),this.currentState.programStatus.program=this.getSpectorData(n),this.currentState.programStatus.RECOMPILABLE=i.isBuildableProgram(n),this.currentState.programStatus.RECOMPILABLE&&we.saveInGlobalStore(n),this.currentState.shaders=r.shaders,(null===(e=this.lastCommandName)||void 0===e?void 0:e.indexOf("Elements"))>=0){const e=this.context.getParameter(this.context.ELEMENT_ARRAY_BUFFER_BINDING);e&&(this.currentState.elementArray={},this.currentState.elementArray.arrayBuffer=this.getSpectorData(e))}const s=this.context.getProgramParameter(n,d.ACTIVE_ATTRIBUTES.value);this.currentState.attributes=[];for(let e=0;e1){const e=this.context.getProgramParameter(n,d.ACTIVE_UNIFORM_BLOCKS.value);this.currentState.uniformBlocks=[];for(let t=0;t1){const e=this.context;t.colorAttachments=[];const n=e.getParameter(d.MAX_DRAW_BUFFERS.value);for(let e=0;e1&&(i.alphaSize=this.context.getFramebufferAttachmentParameter(t,e,d.FRAMEBUFFER_ATTACHMENT_ALPHA_SIZE.value),i.blueSize=this.context.getFramebufferAttachmentParameter(t,e,d.FRAMEBUFFER_ATTACHMENT_BLUE_SIZE.value),i.encoding=this.getWebGlConstant(this.context.getFramebufferAttachmentParameter(t,e,d.FRAMEBUFFER_ATTACHMENT_COLOR_ENCODING.value)),i.componentType=this.getWebGlConstant(this.context.getFramebufferAttachmentParameter(t,e,d.FRAMEBUFFER_ATTACHMENT_COMPONENT_TYPE.value)),i.depthSize=this.context.getFramebufferAttachmentParameter(t,e,d.FRAMEBUFFER_ATTACHMENT_DEPTH_SIZE.value),i.greenSize=this.context.getFramebufferAttachmentParameter(t,e,d.FRAMEBUFFER_ATTACHMENT_GREEN_SIZE.value),i.redSize=this.context.getFramebufferAttachmentParameter(t,e,d.FRAMEBUFFER_ATTACHMENT_RED_SIZE.value),i.stencilSize=this.context.getFramebufferAttachmentParameter(t,e,d.FRAMEBUFFER_ATTACHMENT_STENCIL_SIZE.value),n===d.TEXTURE.value&&(i.textureLayer=this.context.getFramebufferAttachmentParameter(t,e,d.FRAMEBUFFER_ATTACHMENT_TEXTURE_LAYER.value))),i}readAttributeFromContext(e,t){const n=this.context.getActiveAttrib(e,t),i=this.context.getAttribLocation(e,n.name);if(-1===i)return{name:n.name,size:n.size,type:this.getWebGlConstant(n.type),location:-1};const r=this.context.getVertexAttrib(i,d.CURRENT_VERTEX_ATTRIB.value),s=this.context.getVertexAttrib(i,d.VERTEX_ATTRIB_ARRAY_BUFFER_BINDING.value),o={name:n.name,size:n.size,type:this.getWebGlConstant(n.type),location:i,offsetPointer:this.context.getVertexAttribOffset(i,d.VERTEX_ATTRIB_ARRAY_POINTER.value),bufferBinding:this.getSpectorData(s),enabled:this.context.getVertexAttrib(i,d.VERTEX_ATTRIB_ARRAY_ENABLED.value),arraySize:this.context.getVertexAttrib(i,d.VERTEX_ATTRIB_ARRAY_SIZE.value),stride:this.context.getVertexAttrib(i,d.VERTEX_ATTRIB_ARRAY_STRIDE.value),arrayType:this.getWebGlConstant(this.context.getVertexAttrib(i,d.VERTEX_ATTRIB_ARRAY_TYPE.value)),normalized:this.context.getVertexAttrib(i,d.VERTEX_ATTRIB_ARRAY_NORMALIZED.value),vertexAttrib:Array.prototype.slice.call(r)};return this.extensions[d.VERTEX_ATTRIB_ARRAY_DIVISOR_ANGLE.extensionName]?o.divisor=this.context.getVertexAttrib(i,d.VERTEX_ATTRIB_ARRAY_DIVISOR_ANGLE.value):this.contextVersion>1&&(o.integer=this.context.getVertexAttrib(i,d.VERTEX_ATTRIB_ARRAY_INTEGER.value),o.divisor=this.context.getVertexAttrib(i,d.VERTEX_ATTRIB_ARRAY_DIVISOR.value)),this.appendBufferCustomData(o,s),o}readUniformFromContext(e,t){const n=this.context.getActiveUniform(e,t),i=this.context.getUniformLocation(e,n.name);if(i){if(n.size>1&&n.name&&n.name.indexOf("[0]")===n.name.length-3){const t=[];for(let i=0;i1){i.baseLevel=this.context.getTexParameter(t.value,d.TEXTURE_BASE_LEVEL.value),i.immutable=this.context.getTexParameter(t.value,d.TEXTURE_IMMUTABLE_FORMAT.value),i.immutableLevels=this.context.getTexParameter(t.value,d.TEXTURE_IMMUTABLE_LEVELS.value),i.maxLevel=this.context.getTexParameter(t.value,d.TEXTURE_MAX_LEVEL.value);const e=this.context.getParameter(d.SAMPLER_BINDING.value);if(e){i.sampler=this.getSpectorData(e);const t=this.context;i.samplerMaxLod=t.getSamplerParameter(e,d.TEXTURE_MAX_LOD.value),i.samplerMinLod=t.getSamplerParameter(e,d.TEXTURE_MIN_LOD.value),i.samplerCompareFunc=this.getWebGlConstant(t.getSamplerParameter(e,d.TEXTURE_COMPARE_FUNC.value)),i.samplerCompareMode=this.getWebGlConstant(t.getSamplerParameter(e,d.TEXTURE_COMPARE_MODE.value)),i.samplerWrapS=this.getWebGlConstant(t.getSamplerParameter(e,d.TEXTURE_WRAP_S.value)),i.samplerWrapT=this.getWebGlConstant(t.getSamplerParameter(e,d.TEXTURE_WRAP_T.value)),i.samplerWrapR=this.getWebGlConstant(t.getSamplerParameter(e,d.TEXTURE_WRAP_R.value)),i.samplerMagFilter=this.getWebGlConstant(t.getSamplerParameter(e,d.TEXTURE_MAG_FILTER.value)),i.samplerMinFilter=this.getWebGlConstant(t.getSamplerParameter(e,d.TEXTURE_MIN_FILTER.value))}else i.maxLod=this.context.getTexParameter(t.value,d.TEXTURE_MAX_LOD.value),i.minLod=this.context.getTexParameter(t.value,d.TEXTURE_MIN_LOD.value),i.compareFunc=this.getWebGlConstant(this.context.getTexParameter(t.value,d.TEXTURE_COMPARE_FUNC.value)),i.compareMode=this.getWebGlConstant(this.context.getTexParameter(t.value,d.TEXTURE_COMPARE_MODE.value)),i.wrapR=this.getWebGlConstant(this.context.getTexParameter(t.value,d.TEXTURE_WRAP_R.value))}const r=this.getTextureStorage(t);if(r){const e=this.quickCapture?null:t;this.drawCallTextureInputState.appendTextureState(i,r,e,this.fullCapture)}return this.context.activeTexture(n),i}getTextureStorage(e){return e===d.TEXTURE_2D?this.context.getParameter(d.TEXTURE_BINDING_2D.value):e===d.TEXTURE_CUBE_MAP?this.context.getParameter(d.TEXTURE_BINDING_CUBE_MAP.value):e===d.TEXTURE_3D?this.context.getParameter(d.TEXTURE_BINDING_3D.value):e===d.TEXTURE_2D_ARRAY?this.context.getParameter(d.TEXTURE_BINDING_2D_ARRAY.value):void 0}readUniformsFromContextIntoState(e,t,n,i){const r=this.context,s=r.getActiveUniforms(e,t,d.UNIFORM_TYPE.value),o=r.getActiveUniforms(e,t,d.UNIFORM_SIZE.value),a=r.getActiveUniforms(e,t,d.UNIFORM_BLOCK_INDEX.value),l=r.getActiveUniforms(e,t,d.UNIFORM_OFFSET.value),c=r.getActiveUniforms(e,t,d.UNIFORM_ARRAY_STRIDE.value),u=r.getActiveUniforms(e,t,d.UNIFORM_MATRIX_STRIDE.value),h=r.getActiveUniforms(e,t,d.UNIFORM_IS_ROW_MAJOR.value);for(let d=0;d-1&&(t.blockName=r.getActiveUniformBlockName(e,t.blockIndice)),t.offset=l[d],t.arrayStride=c[d],t.matrixStride=u[d],t.rowMajor=h[d],t.blockIndice>-1){const e=i[a[d]].bindingPoint;t.value=this.drawCallUboInputState.getUboValue(e,t.offset,t.size,s[d])}}}readTransformFeedbackFromContext(e,t){const n=this.context,i=n.getTransformFeedbackVarying(e,t),r=n.getIndexedParameter(d.TRANSFORM_FEEDBACK_BUFFER_BINDING.value,t),s={name:i.name,size:i.size,type:this.getWebGlConstant(i.type),buffer:this.getSpectorData(r),bufferSize:n.getIndexedParameter(d.TRANSFORM_FEEDBACK_BUFFER_SIZE.value,t),bufferStart:n.getIndexedParameter(d.TRANSFORM_FEEDBACK_BUFFER_START.value,t)};return this.appendBufferCustomData(s,r),s}readUniformBlockFromContext(e,t){const n=this.context,i=n.getActiveUniformBlockParameter(e,t,d.UNIFORM_BLOCK_BINDING.value),r=n.getIndexedParameter(d.UNIFORM_BUFFER_BINDING.value,i),s={name:n.getActiveUniformBlockName(e,t),bindingPoint:i,size:n.getActiveUniformBlockParameter(e,t,d.UNIFORM_BLOCK_DATA_SIZE.value),activeUniformCount:n.getActiveUniformBlockParameter(e,t,d.UNIFORM_BLOCK_ACTIVE_UNIFORMS.value),vertex:n.getActiveUniformBlockParameter(e,t,d.UNIFORM_BLOCK_REFERENCED_BY_VERTEX_SHADER.value),fragment:n.getActiveUniformBlockParameter(e,t,d.UNIFORM_BLOCK_REFERENCED_BY_FRAGMENT_SHADER.value),buffer:this.getSpectorData(r)};return this.appendBufferCustomData(s,r),s}appendBufferCustomData(e,t){if(t){const n=t.__SPECTOR_Object_CustomData;n&&(n.usage&&(e.bufferUsage=this.getWebGlConstant(n.usage)),e.bufferLength=n.length,n.offset&&(e.bufferOffset=n.offset),n.sourceLength&&(e.bufferSourceLength=n.sourceLength))}}getWebGlConstant(e){const t=p[e];return t?t.name:e}}Pe.stateName="DrawCall",Pe.samplerTypes={[d.SAMPLER_2D.value]:d.TEXTURE_2D,[d.SAMPLER_CUBE.value]:d.TEXTURE_CUBE_MAP,[d.SAMPLER_3D.value]:d.TEXTURE_3D,[d.SAMPLER_2D_SHADOW.value]:d.TEXTURE_2D,[d.SAMPLER_2D_ARRAY.value]:d.TEXTURE_2D_ARRAY,[d.SAMPLER_2D_ARRAY_SHADOW.value]:d.TEXTURE_2D_ARRAY,[d.SAMPLER_CUBE_SHADOW.value]:d.TEXTURE_CUBE_MAP,[d.INT_SAMPLER_2D.value]:d.TEXTURE_2D,[d.INT_SAMPLER_3D.value]:d.TEXTURE_3D,[d.INT_SAMPLER_CUBE.value]:d.TEXTURE_CUBE_MAP,[d.INT_SAMPLER_2D_ARRAY.value]:d.TEXTURE_2D_ARRAY,[d.UNSIGNED_INT_SAMPLER_2D.value]:d.TEXTURE_2D,[d.UNSIGNED_INT_SAMPLER_3D.value]:d.TEXTURE_3D,[d.UNSIGNED_INT_SAMPLER_CUBE.value]:d.TEXTURE_CUBE_MAP,[d.UNSIGNED_INT_SAMPLER_2D_ARRAY.value]:d.TEXTURE_2D_ARRAY};class ke{constructor(e){this.contextInformation=e,this.stateTrackers=[],this.onCommandCapturedCallbacks={},this.initStateTrackers()}startCapture(e,t,n){for(const i of this.stateTrackers){const r=i.startCapture(!0,t,n);i.requireStartAndStopStates&&(e.initState[i.stateName]=r)}}stopCapture(e){for(const t of this.stateTrackers){const n=t.stopCapture();t.requireStartAndStopStates&&(e.endState[t.stateName]=n)}}captureState(e){const t=this.onCommandCapturedCallbacks[e.name];if(t)for(const n of t)n(e)}initStateTrackers(){this.stateTrackers.push(new le(this.contextInformation),new ce(this.contextInformation),new ue(this.contextInformation),new he(this.contextInformation),new de(this.contextInformation),new me(this.contextInformation),new pe(this.contextInformation),new ge(this.contextInformation),new fe(this.contextInformation),new Ee(this.contextInformation),new ve(this.contextInformation),new _e(this.contextInformation),new Ae(this.contextInformation),new Pe(this.contextInformation));for(const e of this.stateTrackers)e.registerCallbacks(this.onCommandCapturedCallbacks)}}class De{constructor(e){this.options=e,this.createCommandNames=this.getCreateCommandNames(),this.updateCommandNames=this.getUpdateCommandNames(),this.deleteCommandNames=this.getDeleteCommandNames(),this.startTime=a.now,this.memoryPerSecond={},this.totalMemory=0,this.frameMemory=0,this.capturing=!1,De.initializeByteSizeFormat()}static initializeByteSizeFormat(){this.byteSizePerInternalFormat||(this.byteSizePerInternalFormat={[d.R8.value]:1,[d.R16F.value]:2,[d.R32F.value]:4,[d.R8UI.value]:1,[d.RG8.value]:2,[d.RG16F.value]:4,[d.RG32F.value]:8,[d.ALPHA.value]:1,[d.RGB.value]:3,[d.RGBA.value]:4,[d.LUMINANCE.value]:1,[d.LUMINANCE_ALPHA.value]:2,[d.DEPTH_COMPONENT.value]:1,[d.DEPTH_STENCIL.value]:2,[d.SRGB_EXT.value]:3,[d.SRGB_ALPHA_EXT.value]:4,[d.RGB8.value]:3,[d.SRGB8.value]:3,[d.RGB565.value]:2,[d.R11F_G11F_B10F.value]:4,[d.RGB9_E5.value]:2,[d.RGB16F.value]:6,[d.RGB32F.value]:12,[d.RGB8UI.value]:3,[d.RGBA8.value]:4,[d.RGB5_A1.value]:2,[d.RGBA16F.value]:8,[d.RGBA32F.value]:16,[d.RGBA8UI.value]:4,[d.COMPRESSED_R11_EAC.value]:4,[d.COMPRESSED_SIGNED_R11_EAC.value]:4,[d.COMPRESSED_RG11_EAC.value]:4,[d.COMPRESSED_SIGNED_RG11_EAC.value]:4,[d.COMPRESSED_RGB8_ETC2.value]:4,[d.COMPRESSED_RGBA8_ETC2_EAC.value]:4,[d.COMPRESSED_SRGB8_ETC2.value]:4,[d.COMPRESSED_SRGB8_ALPHA8_ETC2_EAC.value]:4,[d.COMPRESSED_RGB8_PUNCHTHROUGH_ALPHA1_ETC2.value]:4,[d.COMPRESSED_SRGB8_PUNCHTHROUGH_ALPHA1_ETC2.value]:4,[d.COMPRESSED_RGB_S3TC_DXT1_EXT.value]:.5,[d.COMPRESSED_RGBA_S3TC_DXT3_EXT.value]:1,[d.COMPRESSED_RGBA_S3TC_DXT5_EXT.value]:1,[d.COMPRESSED_RGB_PVRTC_4BPPV1_IMG.value]:.5,[d.COMPRESSED_RGBA_PVRTC_4BPPV1_IMG.value]:.5,[d.COMPRESSED_RGB_PVRTC_2BPPV1_IMG.value]:.25,[d.COMPRESSED_RGBA_PVRTC_2BPPV1_IMG.value]:.25,[d.COMPRESSED_RGB_ETC1_WEBGL.value]:.5,[d.COMPRESSED_RGB_ATC_WEBGL.value]:.5,[d.COMPRESSED_RGBA_ATC_EXPLICIT_ALPHA_WEBGL.value]:1,[d.COMPRESSED_RGBA_ATC_INTERPOLATED_ALPHA_WEBGL.value]:1})}registerCallbacks(e){for(const t of this.createCommandNames)e[t]=e[t]||[],e[t].push(this.createWithoutSideEffects.bind(this));for(const t of this.updateCommandNames)e[t]=e[t]||[],e[t].push(this.updateWithoutSideEffects.bind(this));for(const t of this.deleteCommandNames)e[t]=e[t]||[],e[t].push(this.deleteWithoutSideEffects.bind(this))}startCapture(){this.frameMemory=0,this.capturing=!0}stopCapture(){this.frameMemory=0,this.capturing=!1}appendRecordedInformation(e){e.frameMemory[this.objectName]=this.frameMemory,e.memory[this.objectName]=this.memoryPerSecond}create(e){}createWithoutSideEffects(e){this.options.toggleCapture(!1),this.create(e),this.options.toggleCapture(!0)}updateWithoutSideEffects(e){if(!e||0===e.arguments.length)return;this.options.toggleCapture(!1);const t=e.arguments[0],n=this.getBoundInstance(t);if(!n)return void this.options.toggleCapture(!0);if(!E.getWebGlObjectTag(n))return void this.options.toggleCapture(!0);const i=this.getWebGlConstant(t),r=this.update(e,i,n);this.changeMemorySize(r),this.options.toggleCapture(!0)}deleteWithoutSideEffects(e){if(!e||!e.arguments||e.arguments.length<1)return;const t=e.arguments[0];if(!t)return;this.options.toggleCapture(!1);const n=this.delete(t);this.changeMemorySize(-n),this.options.toggleCapture(!0)}changeMemorySize(e){this.totalMemory+=e,this.capturing&&(this.frameMemory+=e);const t=a.now-this.startTime,n=Math.round(t/1e3);this.memoryPerSecond[n]=this.totalMemory}getWebGlConstant(e){const t=p[e];return t?t.name:e+""}getByteSizeForInternalFormat(e){return De.byteSizePerInternalFormat[e]||4}}class Ue extends De{get objectName(){return"Buffer"}getCreateCommandNames(){return["createBuffer"]}getUpdateCommandNames(){return["bufferData"]}getDeleteCommandNames(){return["deleteBuffer"]}getBoundInstance(e){const t=this.options.context;return e===d.ARRAY_BUFFER.value?t.getParameter(d.ARRAY_BUFFER_BINDING.value):e===d.ELEMENT_ARRAY_BUFFER.value?t.getParameter(d.ELEMENT_ARRAY_BUFFER_BINDING.value):e===d.COPY_READ_BUFFER.value?t.getParameter(d.COPY_READ_BUFFER_BINDING.value):e===d.COPY_WRITE_BUFFER.value?t.getParameter(d.COPY_WRITE_BUFFER_BINDING.value):e===d.TRANSFORM_FEEDBACK_BUFFER.value?t.getParameter(d.TRANSFORM_FEEDBACK_BUFFER_BINDING.value):e===d.UNIFORM_BUFFER.value?t.getParameter(d.UNIFORM_BUFFER_BINDING.value):e===d.PIXEL_PACK_BUFFER.value?t.getParameter(d.PIXEL_PACK_BUFFER_BINDING.value):e===d.PIXEL_UNPACK_BUFFER.value?t.getParameter(d.PIXEL_UNPACK_BUFFER_BINDING.value):void 0}delete(e){const t=e.__SPECTOR_Object_CustomData;return t?t.length:0}update(e,t,n){const i=this.getCustomData(t,e);if(!i)return 0;const r=n.__SPECTOR_Object_CustomData?n.__SPECTOR_Object_CustomData.length:0;return n.__SPECTOR_Object_CustomData=i,i.length-r}getCustomData(e,t){const n=this.getLength(t);return t.arguments.length>=4?{target:e,length:n,usage:t.arguments[2],offset:t.arguments[3],sourceLength:t.arguments[1]?t.arguments[1].length:-1}:3===t.arguments.length?{target:e,length:n,usage:t.arguments[2]}:void 0}getLength(e){let t=-1,n=0;return 5===e.arguments.length&&(t=e.arguments[4],n=e.arguments[3]),t<=0&&(t="number"==typeof e.arguments[1]?e.arguments[1]:e.arguments[1]&&(e.arguments[1].byteLength||e.arguments[1].length)||0),t-n}}class Ge extends De{get objectName(){return"Renderbuffer"}getCreateCommandNames(){return["createRenderbuffer"]}getUpdateCommandNames(){return["renderbufferStorage","renderbufferStorageMultisample"]}getDeleteCommandNames(){return["deleteRenderbuffer"]}getBoundInstance(e){const t=this.options.context;if(e===d.RENDERBUFFER.value)return t.getParameter(d.RENDERBUFFER_BINDING.value)}delete(e){const t=e.__SPECTOR_Object_CustomData;return t?t.length:0}update(e,t,n){const i=this.getCustomData(e,t);if(!i)return 0;const r=n.__SPECTOR_Object_CustomData?n.__SPECTOR_Object_CustomData.length:0;return i.length=i.width*i.height*this.getByteSizeForInternalFormat(i.internalFormat),n.__SPECTOR_Object_CustomData=i,i.length-r}getCustomData(e,t){return 4===e.arguments.length?{target:t,internalFormat:e.arguments[1],width:e.arguments[2],height:e.arguments[3],length:0,samples:0}:{target:t,internalFormat:e.arguments[2],width:e.arguments[3],height:e.arguments[4],length:0,samples:e.arguments[1]}}}class We extends De{get objectName(){return"Texture2d"}getCreateCommandNames(){return["createTexture"]}getUpdateCommandNames(){return["texImage2D","compressedTexImage2D","texStorage2D"]}getDeleteCommandNames(){return["deleteTexture"]}getBoundInstance(e){const t=this.options.context;return e===d.TEXTURE_2D.value?t.getParameter(d.TEXTURE_BINDING_2D.value):e===d.TEXTURE_CUBE_MAP_POSITIVE_X.value||e===d.TEXTURE_CUBE_MAP_POSITIVE_Y.value||e===d.TEXTURE_CUBE_MAP_POSITIVE_Z.value||e===d.TEXTURE_CUBE_MAP_NEGATIVE_X.value||e===d.TEXTURE_CUBE_MAP_NEGATIVE_Y.value||e===d.TEXTURE_CUBE_MAP_NEGATIVE_Z.value?t.getParameter(d.TEXTURE_BINDING_CUBE_MAP.value):void 0}delete(e){const t=e.__SPECTOR_Object_CustomData;return t?t.target===d.TEXTURE_2D_ARRAY.name||t.target===d.TEXTURE_3D.name?0:t.length:0}update(e,t,n){const i=this.getCustomData(e,t,n);if(!i)return 0;const r=n.__SPECTOR_Object_CustomData?n.__SPECTOR_Object_CustomData.length:0;if(i.isCompressed){if(e.arguments.length>=7){const t=e.arguments[6];i.length="number"==typeof t?t:null==t?void 0:t.byteLength}}else{const e="TEXTURE_2D"===t?1:6;let n=i.internalFormat;n===d.RGBA.value&&(i.type===d.FLOAT.value&&(n=d.RGBA32F.value),i.type===d.HALF_FLOAT_OES.value&&(n=d.RGBA16F.value)),i.length=i.width*i.height*e*this.getByteSizeForInternalFormat(n)}return i.length=0|i.length,n.__SPECTOR_Object_CustomData=i,i.length-r}getCustomData(e,t,n){return"texImage2D"===e.name?this.getTexImage2DCustomData(e,t,n):"compressedTexImage2D"===e.name?this.getCompressedTexImage2DCustomData(e,t,n):"texStorage2D"===e.name?this.getTexStorage2DCustomData(e,t,n):void 0}getTexStorage2DCustomData(e,t,n){let i;return 5===e.arguments.length&&(i={target:t,internalFormat:e.arguments[2],width:e.arguments[3],height:e.arguments[4],length:0,isCompressed:!1}),i}getCompressedTexImage2DCustomData(e,t,n){if(0!==e.arguments[1])return;let i;return e.arguments.length>=7&&(i={target:t,internalFormat:e.arguments[2],width:e.arguments[3],height:e.arguments[4],length:0,isCompressed:!0}),i}getTexImage2DCustomData(e,t,n){if(0!==e.arguments[1])return;let i;return e.arguments.length>=8?i={target:t,internalFormat:e.arguments[2],width:e.arguments[3],height:e.arguments[4],format:e.arguments[6],type:e.arguments[7],length:0,isCompressed:!1}:6===e.arguments.length&&(i={target:t,internalFormat:e.arguments[2],width:e.arguments[5].width,height:e.arguments[5].height,format:e.arguments[3],type:e.arguments[4],length:0,isCompressed:!1}),i}}class Ve extends De{get objectName(){return"Texture3d"}getCreateCommandNames(){return["createTexture"]}getUpdateCommandNames(){return["texImage3D","compressedTexImage3D","texStorage3D"]}getDeleteCommandNames(){return["deleteTexture"]}getBoundInstance(e){const t=this.options.context;return e===d.TEXTURE_2D_ARRAY.value?t.getParameter(d.TEXTURE_BINDING_2D_ARRAY.value):e===d.TEXTURE_3D.value?t.getParameter(d.TEXTURE_BINDING_3D.value):void 0}delete(e){const t=e.__SPECTOR_Object_CustomData;return t?t.target!==d.TEXTURE_2D_ARRAY.name&&t.target!==d.TEXTURE_3D.name?0:t.length:0}update(e,t,n){if(e.arguments.length>=2&&0!==e.arguments[1])return 0;const i=this.getCustomData(e,t,n);if(!i)return 0;const r=n.__SPECTOR_Object_CustomData?n.__SPECTOR_Object_CustomData.length:0;if(i.isCompressed){if(e.arguments.length>=7){const t=e.arguments[6];i.length="number"==typeof t?t:null==t?void 0:t.byteLength}}else i.length=i.width*i.height*i.depth*this.getByteSizeForInternalFormat(i.internalFormat);return i.length=0|i.length,n.__SPECTOR_Object_CustomData=i,i.length-r}getCustomData(e,t,n){return"texImage3D"===e.name?this.getTexImage3DCustomData(e,t,n):"compressedTexImage3D"===e.name?this.getCompressedTexImage3DCustomData(e,t,n):"texStorage3D"===e.name?this.getTexStorage3DCustomData(e,t,n):void 0}getTexStorage3DCustomData(e,t,n){let i;return 6===e.arguments.length&&(i={target:t,internalFormat:e.arguments[2],width:e.arguments[3],height:e.arguments[4],depth:e.arguments[5],length:0,isCompressed:!1}),i}getCompressedTexImage3DCustomData(e,t,n){if(0!==e.arguments[1])return;let i;return e.arguments.length>=8&&(i={target:t,internalFormat:e.arguments[2],width:e.arguments[3],height:e.arguments[4],depth:e.arguments[5],length:0,isCompressed:!0}),i}getTexImage3DCustomData(e,t,n){if(0!==e.arguments[1])return;let i;return e.arguments.length>=9&&(i={target:t,internalFormat:e.arguments[2],width:e.arguments[3],height:e.arguments[4],depth:e.arguments[5],format:e.arguments[7],type:e.arguments[8],length:0,isCompressed:!1}),i}}class He extends De{get objectName(){return"Program"}getCreateCommandNames(){return["createProgram"]}getUpdateCommandNames(){return["linkProgram"]}getDeleteCommandNames(){return["deleteProgram"]}getBoundInstance(e){return e}delete(e){const t=e.__SPECTOR_Object_CustomData;return t?t.length:0}update(e,t,n){if(e.arguments.length>=1&&!e.arguments[0])return 0;const i=this.getCustomData(n);if(!i)return 0;const r=n.__SPECTOR_Object_CustomData?n.__SPECTOR_Object_CustomData.length:0;return n.__SPECTOR_Object_CustomData=i,i.length-r}getCustomData(e){const t=this.options.context;return $e.getProgramData(t,e)}}class Xe{constructor(e){this.contextInformation=e,this.onCommandCallbacks={},this.recorders=[],this.initRecorders()}recordCommand(e){const t=this.onCommandCallbacks[e.name];if(t)for(const n of t)n(e)}startCapture(){for(const e of this.recorders)e.startCapture()}stopCapture(){for(const e of this.recorders)e.stopCapture()}appendRecordedInformation(e){for(const t of this.recorders)t.appendRecordedInformation(e)}initRecorders(){this.recorders.push(new Ue(this.contextInformation),new Ge(this.contextInformation),new We(this.contextInformation),new Ve(this.contextInformation),new He(this.contextInformation));for(const e of this.recorders)e.registerCallbacks(this.onCommandCallbacks)}}class ze{constructor(e){this.contextInformation=e,this.webGlObjects=[],this.initWebglObjects()}tagWebGlObjects(e){for(const t of this.webGlObjects){for(let n=0;n0&&this.currentCapture.commands.length===this.maxCommands&&this.onMaxCommand.trigger(this)}}spyContext(e){const t=[];for(const n in e)n&&t.push(n);for(let n=0;n{this.spyRequestAnimationFrame("requestAnimationFrame",e.display)}))}spyRequestAnimationFrame(e,t){const n=this;A.storeOriginFunction(t,e),t[e]=function(){const i=arguments[0],r=n.getCallback(n,i,(()=>{n.spiedScope[e](i)})),s=A.executeOriginFunction(t,e,[r]);return s}}spySetTimer(e){const t=this,n=this.spiedScope,i="setTimeout"===e;A.storeOriginFunction(n,e),n[e]=function(){const r=arguments[0],s=arguments[1],o=Array.prototype.slice.call(arguments);Ze.setTimerCommonValues.indexOf(s)>-1&&(o[0]=t.getCallback(t,r,i?()=>{n[e](r)}:null));const a=A.executeOriginFunction(n,e,o);return a}}getCallback(e,t,n=null){return function(){const i=a.now;if(e.lastFrame=++e.lastFrame%e.speedRatio,e.willPlayNextFrame||e.speedRatio&&!e.lastFrame){e.onFrameStart.trigger(e);try{t.apply(e.spiedScope,arguments)}catch(t){e.onError.trigger(t)}e.lastSixtyFramesCurrentIndex=(e.lastSixtyFramesCurrentIndex+1)%Ze.fpsWindowSize,e.lastSixtyFramesDuration[e.lastSixtyFramesCurrentIndex]=i-e.lastSixtyFramesPreviousStart,e.onFrameEnd.trigger(e),e.willPlayNextFrame=!1}else n&&n();e.lastSixtyFramesPreviousStart=i}}}Ze.requestAnimationFrameFunctions=["requestAnimationFrame","msRequestAnimationFrame","webkitRequestAnimationFrame","mozRequestAnimationFrame","oRequestAnimationFrame"],Ze.setTimerFunctions=["setTimeout","setInterval"],Ze.setTimerCommonValues=[0,15,16,33,32,40],Ze.fpsWindowSize=60;class Qe{constructor(e){this.canvas=e,this.onContextRequested=new o,this.init()}init(){const e=this,t=function(){const t=this instanceof HTMLCanvasElement?HTMLCanvasElement:OffscreenCanvas,n=e.canvas?A.executeOriginFunction(this,"getContext",arguments):A.executePrototypeOriginFunction(this,t,"getContext",arguments);if(arguments.length>0){const e=arguments[0];if("webgl"!==e&&"experimental-webgl"!==e&&"webgl2"!==e&&"experimental-webgl2"!==e)return n}if(n){const t=Array.prototype.slice.call(arguments),i="webgl2"===t[0]||"experimental-webgl2"===t[0]?2:1;e.onContextRequested.trigger({context:n,contextVersion:i})}return n};this.canvas?(A.storeOriginFunction(this.canvas,"getContext"),this.canvas.getContext=t):(A.storePrototypeOriginFunction(HTMLCanvasElement,"getContext"),HTMLCanvasElement.prototype.getContext=t,"undefined"!=typeof OffscreenCanvas&&(A.storePrototypeOriginFunction(OffscreenCanvas,"getContext"),OffscreenCanvas.prototype.getContext=t))}}var Je=n(379),et=n.n(Je),tt=n(795),nt=n.n(tt),it=n(569),rt=n.n(it),st=n(565),ot=n.n(st),at=n(216),lt=n.n(at),ct=n(589),ut=n.n(ct),ht=n(866),dt={};dt.styleTagTransform=ut(),dt.setAttributes=ot(),dt.insert=rt().bind(null,"html"),dt.domAPI=nt(),dt.insertStyleElement=lt(),et()(ht.Z,dt),ht.Z&&ht.Z.locals&&ht.Z.locals;class mt{constructor(e,t){this.placeHolder=e,this.stateStore=t}compose(e){const t=this.stateStore.getStatesToProcess();let n=!1;for(const e in t)if(t.hasOwnProperty(e)){const i=t[e],r=this.stateStore.getLastOperation(i),s=this.stateStore.getComponentInstance(i),o=this.stateStore.getData(i);s.render(o,i,r),n=!0}if(!n)return;const i=this.stateStore.getLastOperation(e);this.composeInContainer(this.placeHolder,Number.MAX_VALUE,e,i)}composeChildren(e,t){if(!t)return;const n=this.stateStore.getChildrenIds(e);let i=0;for(let e=0;e0}add(e,t){const n=this.getNewId();return this.pendingOperation[n]=n,this.store[n]={data:e,id:n,parent:null,children:[],componentInstance:t,lastOperation:20},n}update(e,t){this.store[e],this.pendingOperation[e]=e,this.store[e].data=t,this.store[e].lastOperation=40}addChild(e,t,n){const i=this.store[e],r=this.add(t,n);this.pendingOperation[r]=r;const s=this.store[r];return s.parent=i,i.children.push(s),r}insertChildAt(e,t,n,i){const r=this.store[e],s=this.add(n,i);this.pendingOperation[s]=s;const o=this.store[s];return o.parent=r,t>=r.children.length?r.children.push(o):t>=0?r.children.splice(t,0,o):r.children.unshift(o),s}removeChildById(e,t){const n=this.store[e];for(let i=n.children.length-1;i>=0;i--)if(n.children[i].id===t){this.removeChildAt(e,i);break}}removeChildAt(e,t){const n=this.store[e];let i;t>n.children.length-1?(i=n.children[n.children.length-1],n.children[n.children.length-1].parent=null,n.children.splice(n.children.length-1,1)):t>=0?(i=n.children[t],n.children[t].parent=null,n.children.splice(t,1)):(i=n.children[0],n.children[0].parent=null,n.children.splice(0,1)),i.parent=null,this.remove(i.id)}remove(e){const t=this.store[e];t.parent?(this.store[t.parent.id],this.removeChildById(t.parent.id,e)):(this.removeChildren(e),this.store[e].lastOperation=50,this.pendingOperation[e]=e)}removeChildren(e){const t=this.store[e];for(;t.children.length;)this.remove(t.children[0].id)}getStatesToProcess(){return this.pendingOperation}flushPendingOperations(){for(const e in this.pendingOperation)this.pendingOperation[e]&&(50===this.store[e].lastOperation?delete this.store[e]:this.store[e].lastOperation=0);this.pendingOperation={}}getNewId(){return++this.idGenerator}}class gt{constructor(e){this.component=e}render(e,t,n){0!==n&&(50!==n?this.domNode=this.component.render(e,t):this.removeNode())}composeInContainer(e,t,n){if(50===n)return this.removeNode(),null;const i=this.cachedCurrentChildrenContainer;if(0===n)return i;const r=this.domNode,s=r.getAttribute("childrencontainer")?r:r.querySelector("[childrenContainer]");if(s&&i){const e=i.children;for(;e.length>0;)s.appendChild(e[0])}if(this.cachedCurrentChildrenContainer=s,t>=e.children.length)e.appendChild(r),this.cachedCurrentDomNode&&40===n&&(this.cachedCurrentDomNode.remove?this.cachedCurrentDomNode.remove():this.cachedCurrentDomNode.parentNode&&this.cachedCurrentDomNode.parentNode.removeChild(this.cachedCurrentDomNode));else{const i=e.children[t];e.insertBefore(r,i),40===n&&e.removeChild(i)}return this.cachedCurrentDomNode=this.domNode,s}removeNode(){this.domNode&&this.domNode.parentElement&&(this.domNode.remove?this.domNode.remove():this.domNode.parentNode&&this.domNode.parentNode.removeChild(this.domNode)),this.cachedCurrentDomNode&&this.cachedCurrentDomNode.parentElement&&(this.cachedCurrentDomNode.remove?this.cachedCurrentDomNode.remove():this.cachedCurrentDomNode.parentNode&&this.cachedCurrentDomNode.parentNode.removeChild(this.cachedCurrentDomNode))}}gt.idGenerator=0;class ft{constructor(e){this.stateStore=new pt,this.compositor=new mt(e,this.stateStore),this.willRender=!1,this.rootStateId=-1}addRootState(e,t,n=!1){const i=new gt(t),r=this.stateStore.add(e,i);return this.rootStateId=r,this.setForRender(n),r}addChildState(e,t,n,i=!1){const r=this.insertChildState(e,t,Number.MAX_VALUE,n);return this.setForRender(i),r}insertChildState(e,t,n,i,r=!1){const s=new gt(i),o=this.stateStore.insertChildAt(e,n,t,s);return this.setForRender(r),o}updateState(e,t,n=!1){this.stateStore.update(e,t),this.setForRender(n)}removeState(e,t=!1){this.stateStore.remove(e),this.setForRender(t)}removeChildrenStates(e,t=!1){this.stateStore.removeChildren(e),this.setForRender(t)}getState(e){return this.stateStore.getData(e)}getGenericState(e){return this.getState(e)}getChildrenState(e){return this.stateStore.getChildrenIds(e).map((t=>this.stateStore.getData(e)))}getChildrenGenericState(e){return this.getChildrenState(e)}hasChildren(e){return this.stateStore.hasChildren(e)}updateAllChildrenState(e,t){const n=this.stateStore.getChildrenIds(e);for(const e of n){const n=this.getGenericState(e);t(n),this.updateState(e,n)}}updateAllChildrenGenericState(e,t){this.updateAllChildrenState(e,t)}setForRender(e){this.willRender||(this.willRender=!0,e?this.compose():setTimeout(this.compose.bind(this),ft.REFRESHRATEINMILLISECONDS))}compose(){this.willRender=!1,this.compositor.compose(this.rootStateId),this.stateStore.flushPendingOperations()}}ft.REFRESHRATEINMILLISECONDS=100;class Et extends class{constructor(){this.dummyTextGeneratorElement=document.createElement("div")}createFromHtml(e){const t=document.createElement("div");return t.innerHTML=e,t.firstElementChild}htmlTemplate(e,...t){const n=e.raw;let i="";return t.forEach(((e,t)=>{let r=n[t];Array.isArray(e)&&(e=e.join("")),r&&r.length>0&&"$"===r[r.length-1]?r=r.slice(0,-1):e=this.htmlEscape(e),i+=r,i+=e})),i+=n[n.length-1],i}htmlEscape(e){return null==e||0===e.length?e:(this.dummyTextGeneratorElement.innerText=e,this.dummyTextGeneratorElement.innerHTML)}}{constructor(){super(),this.events={}}addEventListener(e,t,n=null){return this.events[e]?this.events[e].add(t,n):-1}removeEventListener(e,t){this.events[e]&&this.events[e].remove(t)}renderElementFromTemplate(e,t,n){const i=this.createFromHtml(e);return this.bindCommands(i,t,n),i}bindCommands(e,t,n){e.getAttribute("commandname")&&this.bindCommand(e,t,n);const i=e.querySelectorAll("[commandName]");for(let e=0;e +
+
+
+ ${e.logText} +
+ `;return this.renderElementFromTemplate(n,e,t)}}class _t extends Et{constructor(){super(),this.onCanvasSelected=this.createEvent("onCanvasSelected")}render(e,t){const n=document.createElement("li"),i=document.createElement("span");return i.innerText=`Id: ${e.id} - Size: ${e.width}*${e.height}`,n.appendChild(i),this.mapEventListener(n,"click","onCanvasSelected",e,t),n}}class Ct extends Et{constructor(){super(),this.onCaptureRequested=this.createEvent("onCaptureRequested"),this.onPlayRequested=this.createEvent("onPlayRequested"),this.onPauseRequested=this.createEvent("onPauseRequested"),this.onPlayNextFrameRequested=this.createEvent("onPlayNextFrameRequested")}render(e,t){const n=this.htmlTemplate` +
+
+
+ $${e?'
\n
':'
\n
\n
\n
'} +
`;return this.renderElementFromTemplate(n,e,t)}}class At extends Et{constructor(){super(),this.onCanvasSelection=this.createEvent("onCanvasSelection")}render(e,t){const n=this.htmlTemplate` +
+ + ${e.currentCanvasInformation?`${e.currentCanvasInformation.id} (${e.currentCanvasInformation.width}*${e.currentCanvasInformation.height})`:"Choose Canvas..."} + +
    +
    `;return this.renderElementFromTemplate(n,e,t)}}class Rt extends Et{render(e,t){const n=document.createElement("span");return n.className="fpsCounterComponent",n.innerText=e.toFixed(2)+" Fps",n}}class St{constructor(e={}){this.options=e,this.rootPlaceHolder=e.rootPlaceHolder||document.body,this.mvx=new ft(this.rootPlaceHolder),this.isTrackingCanvas=!1,this.onCanvasSelected=new o,this.onCaptureRequested=new o,this.onPauseRequested=new o,this.onPlayRequested=new o,this.onPlayNextFrameRequested=new o,this.captureMenuComponent=new vt,this.canvasListComponent=new At,this.canvasListItemComponent=new _t,this.actionsComponent=new Ct,this.fpsCounterComponent=new Rt,this.rootStateId=this.mvx.addRootState({visible:!0,logLevel:r.info,logText:St.SelectCanvasHelpText,logVisible:!this.options.hideLog},this.captureMenuComponent),this.canvasListStateId=this.mvx.addChildState(this.rootStateId,{currentCanvasInformation:null,showList:!1},this.canvasListComponent),this.actionsStateId=this.mvx.addChildState(this.rootStateId,!0,this.actionsComponent),this.fpsStateId=this.mvx.addChildState(this.rootStateId,0,this.fpsCounterComponent),this.actionsComponent.onCaptureRequested.add((()=>{const e=this.getSelectedCanvasInformation();e&&this.updateMenuStateLog(r.info,St.PleaseWaitHelpText,!0),setTimeout((()=>{this.onCaptureRequested.trigger(e)}),200)})),this.actionsComponent.onPauseRequested.add((()=>{this.onPauseRequested.trigger(this.getSelectedCanvasInformation()),this.mvx.updateState(this.actionsStateId,!1)})),this.actionsComponent.onPlayRequested.add((()=>{this.onPlayRequested.trigger(this.getSelectedCanvasInformation()),this.mvx.updateState(this.actionsStateId,!0)})),this.actionsComponent.onPlayNextFrameRequested.add((()=>{this.onPlayNextFrameRequested.trigger(this.getSelectedCanvasInformation())})),this.canvasListComponent.onCanvasSelection.add((e=>{this.mvx.updateState(this.canvasListStateId,{currentCanvasInformation:null,showList:!e.state.showList}),this.updateMenuStateLog(r.info,St.SelectCanvasHelpText),this.onCanvasSelected.trigger(null),this.isTrackingCanvas&&this.trackPageCanvases(),e.state.showList?this.showMenuStateLog():this.hideMenuStateLog()})),this.canvasListItemComponent.onCanvasSelected.add((e=>{this.mvx.updateState(this.canvasListStateId,{currentCanvasInformation:e.state,showList:!1}),this.onCanvasSelected.trigger(e.state),this.updateMenuStateLog(r.info,St.ActionsHelpText),this.showMenuStateLog()}))}getSelectedCanvasInformation(){return this.mvx.getGenericState(this.canvasListStateId).currentCanvasInformation}trackPageCanvases(){if(this.isTrackingCanvas=!0,document.body){const e=document.body.querySelectorAll("canvas");this.updateCanvasesList(e)}}updateCanvasesList(e){this.updateCanvasesListInformationInternal(e,(e=>({id:e.id,width:e.width,height:e.height,ref:e})))}updateCanvasesListInformation(e){this.updateCanvasesListInformationInternal(e,(e=>({id:e.id,width:e.width,height:e.height,ref:e.ref})))}display(){this.updateMenuStateVisibility(!0)}hide(){this.updateMenuStateVisibility(!1)}captureComplete(e){e?this.updateMenuStateLog(r.error,e):this.updateMenuStateLog(r.info,St.ActionsHelpText)}setFPS(e){this.mvx.updateState(this.fpsStateId,e)}updateCanvasesListInformationInternal(e,t){this.mvx.removeChildrenStates(this.canvasListStateId);const n=[];for(let i=0;i +
    + Drag files here to open a previously saved capture. +
    +
      + `,i=this.renderElementFromTemplate(n,e,t),r=i.querySelector(".openCaptureFile");return r.addEventListener("dragenter",(e=>(this.drag(e),!1)),!1),r.addEventListener("dragover",(e=>(this.drag(e),!1)),!1),r.addEventListener("drop",(e=>{this.drop(e)}),!1),i}drag(e){e.stopPropagation(),e.preventDefault()}drop(e){e.stopPropagation(),e.preventDefault(),this.loadFiles(e)}loadFiles(e){let t=null;if(e&&e.dataTransfer&&e.dataTransfer.files&&(t=e.dataTransfer.files),e&&e.target&&e.target.files&&(t=e.target.files),t&&t.length>0)for(let e=0;e{s.error("Error while reading file: "+n.name+e)},i.onload=e=>{try{const t=JSON.parse(e.target.result);this.onCaptureLoaded.trigger(t)}catch(e){s.error("Error while reading file: "+n.name+e)}},i.readAsText(n)}}}}class xt extends Et{constructor(){super(),this.onCaptureSelected=this.createEvent("onCaptureSelected"),this.onSaveRequested=this.createEvent("onSaveRequested")}render(e,t){const n=document.createElement("li");if(e.active&&(n.className="active"),e.capture.endState.VisualState.Attachments)for(const t of e.capture.endState.VisualState.Attachments){const e=document.createElement("img");e.src=encodeURI(t.src),n.appendChild(e)}else{const t=document.createElement("span");t.innerText=e.capture.endState.VisualState.FrameBufferStatus,n.appendChild(t)}const i=document.createElement("span");i.innerText=new Date(e.capture.startTime).toTimeString().split(" ")[0],n.appendChild(i);const r=document.createElement("a");return r.href="#",r.className="captureListItemSave",this.mapEventListener(r,"click","onSaveRequested",e,t,!1,!0),i.appendChild(r),this.mapEventListener(n,"click","onCaptureSelected",e,t),n}}class yt extends Et{render(e,t){const n=this.htmlTemplate` +
      +
        +
        `;return this.renderElementFromTemplate(n,e,t)}}class Lt{static scrollIntoView(e){const t=e.getBoundingClientRect();let n=e.parentElement;for(;n&&n.clientHeight===n.offsetHeight;)n=n.parentElement;if(!n)return;const i=n.getBoundingClientRect();t.topi.bottom&&e.scrollIntoView(!1)}}class It extends Et{constructor(){super(),this.onVisualStateSelected=this.createEvent("onVisualStateSelected")}render(e,t){const n=document.createElement("li");if(e.active&&(n.className="active",setTimeout((()=>{Lt.scrollIntoView(n)}),1)),e.VisualState.Attachments)for(const t of e.VisualState.Attachments){if(!t.src)continue;const i=document.createElement("img");if(i.src=encodeURI(t.src),n.appendChild(i),e.VisualState.Attachments.length>1){const e=document.createElement("span");e.innerText=t.attachmentName,n.appendChild(e)}if(t.textureLayer){const e=document.createElement("span");e.innerText="Layer: "+t.textureLayer,n.appendChild(e)}if(t.textureCubeMapFace){const e=document.createElement("span");e.innerText=t.textureCubeMapFace,n.appendChild(e)}}else{const t=document.createElement("span");t.innerText=e.VisualState.FrameBufferStatus,n.appendChild(t)}const i=document.createElement("span");return i.innerText=e.VisualState.FrameBuffer?"Frame buffer: "+e.VisualState.FrameBuffer.__SPECTOR_Object_TAG.id:"Canvas frame buffer",n.appendChild(i),this.mapEventListener(n,"click","onVisualStateSelected",e,t),n}}class Ft extends Et{render(e,t){const n=this.htmlTemplate` +
        +
          +
          `;return this.renderElementFromTemplate(n,e,t)}}class Nt extends Et{constructor(){super(),this.onCommandSelected=this.createEvent("onCommandSelected"),this.onVertexSelected=this.createEvent("onVertexSelected"),this.onFragmentSelected=this.createEvent("onFragmentSelected")}render(e,t){const n=document.createElement("li");let i="unknown";switch(e.capture.status){case 50:i="deprecated";break;case 10:i="unused";break;case 20:i="disabled";break;case 30:i="redundant";break;case 40:i="valid"}if(e.capture.VisualState&&(n.className=" drawCall"),e.active&&(n.className=" active",setTimeout((()=>{Lt.scrollIntoView(n)}),1)),e.capture.marker){const t=document.createElement("span");t.className=i+" marker important",t.innerText=e.capture.marker+" ",t.style.fontWeight="1000",n.appendChild(t)}if("LOG"===e.capture.name){const t=document.createElement("span");t.className=i+" marker important",t.innerText=e.capture.text+" ",t.style.fontWeight="1000",n.appendChild(t)}else{const t=document.createElement("span");let r=e.capture.text;r=r.replace(e.capture.name,`${e.capture.name}`),t.innerHTML=r,n.appendChild(t)}if(e.capture.VisualState&&"clear"!==e.capture.name)try{const i=e.capture.DrawCall.shaders[0],r=e.capture.DrawCall.shaders[1],s=document.createElement("a");s.innerText=i.name,s.href="#",n.appendChild(s),this.mapEventListener(s,"click","onVertexSelected",e,t);const o=document.createElement("a");o.innerText=r.name,o.href="#",n.appendChild(o),this.mapEventListener(o,"click","onFragmentSelected",e,t)}catch(e){}return this.mapEventListener(n,"click","onCommandSelected",e,t),n}}class Mt extends Et{render(e,t){const n=this.htmlTemplate` +
          +
          `;return this.renderElementFromTemplate(n,e,t)}}class Ot extends Et{render(e,t){const n=this.htmlTemplate` +
          +
          `;return this.renderElementFromTemplate(n,e,t)}}class Bt extends Et{render(e,t){const n=this.htmlTemplate` +
          +
          ${e?e.replace(/([A-Z])/g," $1").trim():""}
          +
            +
            `;return this.renderElementFromTemplate(n,e,t)}}class $t extends Et{render(e,t){const n=this.htmlTemplate` +
          • ${e.key}: ${e.value}
          • `;return this.renderElementFromTemplate(n,e,t)}}class Pt extends Et{render(e,t){const n=this.htmlTemplate` +
          • ${e.key}
          • `;return this.renderElementFromTemplate(n,e,t)}}class kt extends Et{render(e,t){const n=this.htmlTemplate` +
          • ${e.key}: + ${e.value} (Open help page) + +
          • `;return this.renderElementFromTemplate(n,e,t)}}class Dt extends Et{render(e,t){const n=document.createElement("div");if(n.className="jsonVisualStateItemComponent",e.Attachments)for(const t of e.Attachments){if(!t.src)continue;const i=document.createElement("img");if(i.src=encodeURI(t.src),n.appendChild(i),e.Attachments.length>1){const e=document.createElement("span");e.innerText=t.attachmentName,n.appendChild(e)}}else{const t=document.createElement("span");t.innerText=e.FrameBufferStatus,n.appendChild(t)}const i=document.createElement("span");return i.innerText=e.FrameBuffer?e.FrameBuffer.__SPECTOR_Object_TAG.displayText:"Canvas frame buffer",n.appendChild(i),n}}class Ut extends Et{constructor(){super(),this.onCapturesClicked=this.createEvent("onCapturesClicked"),this.onCommandsClicked=this.createEvent("onCommandsClicked"),this.onInformationClicked=this.createEvent("onInformationClicked"),this.onInitStateClicked=this.createEvent("onInitStateClicked"),this.onEndStateClicked=this.createEvent("onEndStateClicked"),this.onCloseClicked=this.createEvent("onCloseClicked"),this.onSearchTextChanged=this.createEvent("onSearchTextChanged"),this.onSearchTextCleared=this.createEvent("onSearchTextCleared")}render(e,t){const n=this.htmlTemplate``,i=this.renderElementFromTemplate(n,e,t),r=i.querySelector(".resultViewMenuOpen"),s=i.querySelectorAll("li:not(.resultViewMenuSmall)");return r.addEventListener("click",(e=>{if("true"===r.getAttribute("open")){r.setAttribute("open","false");for(let e=0;e',e,t)}}class Wt extends Et{render(e,t){const n=this.htmlTemplate` +
            +
            `;return this.renderElementFromTemplate(n,e,t)}}var Vt=n(29),Ht=n.n(Vt);class Xt extends Et{constructor(){super(),this.onTranslatedVertexSourceClicked=this.createEvent("onTranslatedVertexSourceClicked"),this.onTranslatedFragmentSourceClicked=this.createEvent("onTranslatedFragmentSourceClicked"),this.onVertexSourceClicked=this.createEvent("onVertexSourceClicked"),this.onFragmentSourceClicked=this.createEvent("onFragmentSourceClicked"),this.onSourceCodeCloseClicked=this.createEvent("onSourceCodeCloseClicked"),this.onSourceCodeChanged=this.createEvent("onSourceCodeChanged"),this.onBeautifyChanged=this.createEvent("onBeautifyChanged"),this.onPreprocessChanged=this.createEvent("onPreprocessChanged")}showError(e){if(!this.editor)return;const t=[];if(e=e||""){const n=/^.*ERROR:\W([0-9]+):([0-9]+):(.*)$/gm;let i=n.exec(e);for(;null!=i;)t.push({row:+i[2]-1,column:i[1],text:i[3]||"Error",type:"error"}),i=n.exec(e)}this.editor.getSession().setAnnotations(t)}render(e,t){const n=e.fragment?e.sourceFragment:e.sourceVertex;let i,r=e.preprocessed;e.translated?(i=e.fragment?e.translatedSourceFragment:e.translatedSourceVertex,r=!1):i=null!=n?n:"";let o=i;if(r)try{o=Ht()(o,{preserveComments:!1,stopOnError:!0})}catch(e){s.error("shader preprocess failed",e)}e.beautify&&(o=this._indentIfdef(this._beautify(o)));const a=this.htmlTemplate` +
            +
            + +
            + $${this.htmlTemplate`
            ${o}
            `} +
            +

            + + +

            +
            +
            `,l=this.renderElementFromTemplate(a.replace(/
            /g,"\n"),e,t);this.editor=ace.edit(l.querySelector(".sourceCodeComponent")),this.editor.setTheme("ace/theme/monokai"),this.editor.getSession().setMode("ace/mode/glsl"),this.editor.setShowPrintMargin(!1);let c=-1;return this.editor.setReadOnly(!e.editable&&!e.translated),this.editor.getSession().on("change",(n=>{-1!==c&&clearTimeout(c),c=setTimeout((()=>{this._triggerCompilation(this.editor,e,l,t)}),1500)})),l}_triggerCompilation(e,t,n,i){t.fragment?t.sourceFragment=e.getValue():t.sourceVertex=e.getValue(),this.triggerEvent("onSourceCodeChanged",n,t,i)}_beautify(e,t=0){let n="";for(let e=0;ee.trim()+"\n"))).replace(/\s*([*+-/=><\s]*=)\s*/g,(e=>" "+e.trim()+" "))).replace(/\s*(,)\s*/g,(e=>e.trim()+" "))).replace(/\n[ \t]+/g,"\n")).replace(/\n/g,"\n"+n)).replace(/\s+$/g,"")).replace(/\n+$/g,"");else{const i=e.substr(0,s).trim(),r=e.substr(o+1,e.length).trim(),l=e.substr(s+1,o-s-1).trim();a=(""===i?n+"{":this._beautify(i,t)+" {\n")+this._beautify(l,t+1)+"\n"+n+"}\n"+this._beautify(r,t),a=a.replace(/\s*\n+\s*;/g,";")}return a=a.replace(Xt.semicolonReplacementKeyRegex,";"),a=a.replace(Xt.openCurlyReplacementKeyRegex,"{"),a=a.replace(Xt.closeCurlyReplacementKeyRegex,"}"),a}_adaptComments(e){let t=!1,n=!1;for(let i=0;i-1&&0===o?this._getBracket(e,n+1):{firstIteration:n,lastIteration:o}}_indentIfdef(e){let t=0;const n=e.split("\n");for(let e=0;e`;return this.renderElementFromTemplate(n,e,t)}}class Kt{static getMDNLink(e){const t=Kt.WebGL2Functions[e];if(t)return Kt.WebGL2RootUrl+t;const n=Kt.WebGLFunctions[e];if(n)return Kt.WebGLRootUrl+n;const i=Kt.AngleInstancedArraysExtFunctions[e];return i?Kt.AngleInstancedArraysExtRootUrl+i:Kt.WebGLRootUrl+e}}Kt.WebGL2RootUrl="https://developer.mozilla.org/en-US/docs/Web/API/WebGL2RenderingContext/",Kt.WebGLRootUrl="https://developer.mozilla.org/en-US/docs/Web/API/WebGLRenderingContext/",Kt.AngleInstancedArraysExtRootUrl="https://developer.mozilla.org/en-US/docs/Web/API/ANGLE_instanced_arrays/",Kt.WebGL2Functions={beginQuery:"beginQuery",beginTransformFeedback:"beginTransformFeedback",bindBufferBase:"bindBufferBase",bindBufferRange:"bindBufferRange",bindSampler:"bindSampler",bindTransformFeedback:"bindTransformFeedback",bindVertexArray:"bindVertexArray",blitFramebuffer:"blitFramebuffer",clearBufferfv:"clearBuffer",clearBufferiv:"clearBuffer",clearBufferuiv:"clearBuffer",clearBufferfi:"clearBuffer",clientWaitSync:"clientWaitSync",compressedTexImage3D:"compressedTexImage3D",compressedTexSubImage3D:"compressedTexSubImage3D",copyBufferSubData:"copyBufferSubData",copyTexSubImage3D:"copyTexSubImage3D",createQuery:"createQuery",createSampler:"createSampler",createTransformFeedback:"createTransformFeedback",createVertexArray:"createVertexArray",deleteQuery:"deleteQuery",deleteSampler:"deleteSampler",deleteSync:"deleteSync",deleteTransformFeedback:"deleteTransformFeedback",deleteVertexArray:"deleteVertexArray",drawArraysInstanced:"drawArraysInstanced",drawBuffers:"drawBuffers",drawElementsInstanced:"drawElementsInstanced",drawRangeElements:"drawRangeElements",endQuery:"endQuery",endTransformFeedback:"endTransformFeedback",fenceSync:"fenceSync",framebufferTextureLayer:"framebufferTextureLayer",getActiveUniformBlockName:"getActiveUniformBlockName",getActiveUniformBlockParameter:"getActiveUniformBlockParameter",getActiveUniforms:"getActiveUniforms",getBufferSubData:"getBufferSubData",getFragDataLocation:"getFragDataLocation",getIndexedParameter:"getIndexedParameter",getInternalformatParameter:"getInternalformatParameter",getQuery:"getQuery",getQueryParameter:"getQueryParameter",getSamplerParameter:"getSamplerParameter",getSyncParameter:"getSyncParameter",getTransformFeedbackVarying:"getTransformFeedbackVarying",getUniformBlockIndex:"getUniformBlockIndex",getUniformIndices:"getUniformIndices",invalidateFramebuffer:"invalidateFramebuffer",invalidateSubFramebuffer:"invalidateSubFramebuffer",isQuery:"isQuery",isSampler:"isSampler",isSync:"isSync",isTransformFeedback:"isTransformFeedback",isVertexArray:"isVertexArray",pauseTransformFeedback:"pauseTransformFeedback",readBuffer:"readBuffer",renderbufferStorageMultisample:"renderbufferStorageMultisample",resumeTransformFeedback:"resumeTransformFeedback",samplerParameteri:"samplerParameter",samplerParameterf:"samplerParameter",texImage3D:"texImage3D",texStorage2D:"texStorage2D",texStorage3D:"texStorage3D",texSubImage3D:"texSubImage3D",transformFeedbackVaryings:"transformFeedbackVaryings",uniform1ui:"uniform",uniform2ui:"uniform",uniform3ui:"uniform",uniform4ui:"uniform",uniform1fv:"uniform",uniform2fv:"uniform",uniform3fv:"uniform",uniform4fv:"uniform",uniform1iv:"uniform",uniform2iv:"uniform",uniform3iv:"uniform",uniform4iv:"uniform",uniform1uiv:"uniform",uniform2uiv:"uniform",uniform3uiv:"uniform",uniform4uiv:"uniform",uniformBlockBinding:"uniformBlockBinding",uniformMatrix2fv:"uniformMatrix",uniformMatrix3x2fv:"uniformMatrix",uniformMatrix4x2fv:"uniformMatrix",uniformMatrix2x3fv:"uniformMatrix",uniformMatrix3fv:"uniformMatrix",uniformMatrix4x3fv:"uniformMatrix",uniformMatrix2x4fv:"uniformMatrix",uniformMatrix3x4fv:"uniformMatrix",uniformMatrix4fv:"uniformMatrix",vertexAttribDivisor:"vertexAttribDivisor",vertexAttribI4i:"vertexAttribI",vertexAttribI4ui:"vertexAttribI",vertexAttribI4iv:"vertexAttribI",vertexAttribI4uiv:"vertexAttribI",vertexAttribIPointer:"vertexAttribIPointer",waitSync:"waitSync"},Kt.WebGLFunctions={uniform1f:"uniform",uniform1fv:"uniform",uniform1i:"uniform",uniform1iv:"uniform",uniform2f:"uniform",uniform2fv:"uniform",uniform2i:"uniform",uniform2iv:"uniform",uniform3f:"uniform",uniform3i:"uniform",uniform3iv:"uniform",uniform4f:"uniform",uniform4fv:"uniform",uniform4i:"uniform",uniform4iv:"uniform",uniformMatrix2fv:"uniformMatrix",uniformMatrix3fv:"uniformMatrix",uniformMatrix4fv:"uniformMatrix",vertexAttrib1f:"vertexAttrib",vertexAttrib2f:"vertexAttrib",vertexAttrib3f:"vertexAttrib",vertexAttrib4f:"vertexAttrib",vertexAttrib1fv:"vertexAttrib",vertexAttrib2fv:"vertexAttrib",vertexAttrib3fv:"vertexAttrib",vertexAttrib4fv:"vertexAttrib"},Kt.AngleInstancedArraysExtFunctions={drawArraysInstancedANGLE:"drawArraysInstancedANGLE",drawElementsInstancedANGLE:"drawElementsInstancedANGLE",vertexAttribDivisorANGLE:"vertexAttribDivisorANGLE"};class jt{constructor(e=null){this.rootPlaceHolder=e,this.onSourceCodeChanged=new o,this.rootPlaceHolder=this.rootPlaceHolder||document.body,this.mvx=new ft(this.rootPlaceHolder),this.searchText="",this.currentCommandId=-1,this.visible=!1,this.commandCount=0,this.commandListStateId=-1,this.commandDetailStateId=-1,this.currentCaptureStateId=-1,this.currentCommandStateId=-1,this.currentVisualStateId=-1,this.visualStateListStateId=-1,this.initVisualStateId=-1,this.sourceCodeComponentStateId=-1,this.captureListComponent=new wt,this.captureListItemComponent=new xt,this.visualStateListComponent=new yt,this.visualStateListItemComponent=new It,this.commandListComponent=new Ft,this.commandListItemComponent=new Nt,this.commandDetailComponent=new Mt,this.jsonContentComponent=new Ot,this.jsonGroupComponent=new Bt,this.jsonItemComponent=new $t,this.jsonImageItemComponent=new Pt,this.jsonHelpItemComponent=new kt,this.jsonVisualStateItemComponent=new Dt,this.resultViewMenuComponent=new Ut,this.resultViewContentComponent=new Gt,this.resultViewComponent=new Wt,this.sourceCodeComponent=new Xt,this.informationColumnComponent=new zt,this.rootStateId=this.mvx.addRootState(null,this.resultViewComponent),this.menuStateId=this.mvx.addChildState(this.rootStateId,null,this.resultViewMenuComponent),this.contentStateId=this.mvx.addChildState(this.rootStateId,null,this.resultViewContentComponent),this.captureListStateId=this.mvx.addChildState(this.rootStateId,!1,this.captureListComponent),this.initKeyboardEvents(),this.initMenuComponent(),this.captureListComponent.onCaptureLoaded.add((e=>{this.addCapture(e)})),this.captureListItemComponent.onCaptureSelected.add((e=>{this.selectCapture(e.stateId)})),this.captureListItemComponent.onSaveRequested.add((e=>{this.saveCapture(e.state.capture)})),this.visualStateListItemComponent.onVisualStateSelected.add((e=>{this.selectVisualState(e.stateId)})),this.commandListItemComponent.onCommandSelected.add((e=>{this.selectCommand(e.stateId)})),this.commandListItemComponent.onVertexSelected.add((e=>{this.selectCommand(e.stateId),this.openShader(!1)})),this.commandListItemComponent.onFragmentSelected.add((e=>{this.selectCommand(e.stateId),this.openShader(!0)})),this.sourceCodeComponent.onSourceCodeCloseClicked.add((()=>{this.displayCurrentCapture()})),this.sourceCodeComponent.onTranslatedVertexSourceClicked.add((e=>{const t=this.mvx.getGenericState(this.sourceCodeComponentStateId);t.fragment=!1,t.translated=!0,this.mvx.updateState(this.sourceCodeComponentStateId,t)})),this.sourceCodeComponent.onTranslatedFragmentSourceClicked.add((e=>{const t=this.mvx.getGenericState(this.sourceCodeComponentStateId);t.fragment=!0,t.translated=!0,this.mvx.updateState(this.sourceCodeComponentStateId,t)})),this.sourceCodeComponent.onVertexSourceClicked.add((e=>{const t=this.mvx.getGenericState(this.sourceCodeComponentStateId);t.fragment=!1,t.translated=!1,this.mvx.updateState(this.sourceCodeComponentStateId,t)})),this.sourceCodeComponent.onFragmentSourceClicked.add((e=>{const t=this.mvx.getGenericState(this.sourceCodeComponentStateId);t.fragment=!0,t.translated=!1,this.mvx.updateState(this.sourceCodeComponentStateId,t)})),this.sourceCodeComponent.onSourceCodeChanged.add((e=>{this.onSourceCodeChanged.trigger({programId:e.state.programId,sourceFragment:e.state.sourceFragment,sourceVertex:e.state.sourceVertex,translatedSourceFragment:e.state.translatedSourceFragment,translatedSourceVertex:e.state.translatedSourceVertex})})),this.sourceCodeComponent.onBeautifyChanged.add((e=>{const t=this.mvx.getGenericState(this.sourceCodeComponentStateId);t.beautify=e.sender.checked,this.mvx.updateState(this.sourceCodeComponentStateId,t)})),this.sourceCodeComponent.onPreprocessChanged.add((e=>{const t=this.mvx.getGenericState(this.sourceCodeComponentStateId);t.preprocessed=e.sender.checked,this.mvx.updateState(this.sourceCodeComponentStateId,t)})),this.updateViewState()}saveCapture(e){const t=JSON.stringify(e,null,4),n=new Blob([t],{type:"octet/stream"}),i="capture "+new Date(e.startTime).toTimeString().split(" ")[0]+".json";if(navigator.msSaveBlob)navigator.msSaveBlob(n,i);else{const e=document.createElement("a"),t=window.URL.createObjectURL(n);e.setAttribute("href",t),e.setAttribute("download",i),e.click()}}selectCapture(e){this.currentCommandId=-1,this.currentCaptureStateId=e,this.displayCurrentCapture()}selectCommand(e){this.currentCommandStateId=e,this.currentVisualStateId=this.displayCurrentCommand(),this.displayCurrentVisualState()}selectVisualState(e){this.currentVisualStateId=e,this.currentCommandStateId=this.displayCurrentVisualState(),this.displayCurrentCommand()}display(){this.visible=!0,this.updateViewState()}hide(){this.visible=!1,this.updateViewState()}addCapture(e){const t=this.mvx.insertChildState(this.captureListStateId,{capture:e,active:!1},0,this.captureListItemComponent);return this.selectCapture(t),t}showSourceCodeError(e){this.sourceCodeComponent.showError(e)}initKeyboardEvents(){this.rootPlaceHolder.addEventListener("keydown",(e=>{40===this.mvx.getGenericState(this.menuStateId).status&&(38===e.keyCode?(e.preventDefault(),e.stopPropagation(),this.selectPreviousCommand()):40===e.keyCode?(e.preventDefault(),e.stopPropagation(),this.selectNextCommand()):33===e.keyCode?(e.preventDefault(),e.stopPropagation(),this.selectPreviousVisualState()):34===e.keyCode&&(e.preventDefault(),e.stopPropagation(),this.selectNextVisualState()))}))}openShader(e){this.mvx.removeChildrenStates(this.contentStateId);const t=this.mvx.getGenericState(this.currentCommandStateId);this.sourceCodeComponentStateId=this.mvx.addChildState(this.contentStateId,{programId:t.capture.DrawCall.programStatus.program.__SPECTOR_Object_TAG.id,nameVertex:t.capture.DrawCall.shaders[0].name,nameFragment:t.capture.DrawCall.shaders[1].name,sourceVertex:t.capture.DrawCall.shaders[0].source,sourceFragment:t.capture.DrawCall.shaders[1].source,translatedSourceVertex:t.capture.DrawCall.shaders[0].translatedSource,translatedSourceFragment:t.capture.DrawCall.shaders[1].translatedSource,fragment:e,translated:!1,editable:t.capture.DrawCall.programStatus.RECOMPILABLE,beautify:!0},this.sourceCodeComponent),this.commandDetailStateId=this.mvx.addChildState(this.contentStateId,null,this.commandDetailComponent),this.displayCurrentCommandDetail(t)}selectPreviousCommand(){const e=this.mvx.getGenericState(this.currentCommandStateId);e.previousCommandStateId<0||this.selectCommand(e.previousCommandStateId)}selectNextCommand(){const e=this.mvx.getGenericState(this.currentCommandStateId);e.nextCommandStateId<0||this.selectCommand(e.nextCommandStateId)}selectPreviousVisualState(){const e=this.mvx.getGenericState(this.currentVisualStateId);e.previousVisualStateId<0||this.selectVisualState(e.previousVisualStateId)}selectNextVisualState(){const e=this.mvx.getGenericState(this.currentVisualStateId);e.nextVisualStateId<0||this.selectVisualState(e.nextVisualStateId)}initMenuComponent(){this.mvx.updateState(this.menuStateId,{status:0,searchText:this.searchText,commandCount:0}),this.resultViewMenuComponent.onCloseClicked.add((e=>{this.hide()})),this.resultViewMenuComponent.onCapturesClicked.add((e=>{this.displayCaptures()})),this.resultViewMenuComponent.onCommandsClicked.add((e=>{this.displayCurrentCapture()})),this.resultViewMenuComponent.onInformationClicked.add((e=>{this.displayInformation()})),this.resultViewMenuComponent.onInitStateClicked.add((e=>{this.displayInitState()})),this.resultViewMenuComponent.onEndStateClicked.add((e=>{this.displayEndState()})),this.resultViewMenuComponent.onSearchTextChanged.add((e=>{this.search(e.sender.value)})),this.resultViewMenuComponent.onSearchTextCleared.add((e=>{this.mvx.updateState(this.menuStateId,{status:e.state.status,searchText:"",commandCount:e.state.commandCount}),this.search("")}))}onCaptureRelatedAction(e){const t=this.mvx.getGenericState(this.currentCaptureStateId);return this.commandCount=t.capture.commands.length,this.mvx.removeChildrenStates(this.contentStateId),this.mvx.updateState(this.menuStateId,{status:e,searchText:this.searchText,commandCount:this.commandCount}),this.mvx.getGenericState(this.captureListStateId)&&this.mvx.updateState(this.captureListStateId,!1),t.capture}displayCaptures(){this.mvx.updateState(this.menuStateId,{status:0,searchText:this.searchText,commandCount:this.commandCount}),this.mvx.updateState(this.captureListStateId,!0)}displayInformation(){const e=this.onCaptureRelatedAction(10),t=this.mvx.addChildState(this.contentStateId,!0,this.informationColumnComponent),n=this.mvx.addChildState(this.contentStateId,!1,this.informationColumnComponent),i=this.mvx.addChildState(t,null,this.jsonContentComponent);this.displayJSONGroup(i,"Canvas",e.canvas),this.displayJSONGroup(i,"Context",e.context);const r=this.mvx.addChildState(n,null,this.jsonContentComponent);for(const t of e.analyses)"Primitives"===t.analyserName?this.displayJSONGroup(r,"Vertices count",t):this.displayJSONGroup(r,t.analyserName,t);this.displayJSONGroup(r,"Frame Memory Changes",e.frameMemory),this.displayJSONGroup(r,"Total Memory (seconds since application start: bytes)",e.memory)}displayJSON(e,t){t.VisualState&&this.mvx.addChildState(e,t.VisualState,this.jsonVisualStateItemComponent);for(const n in t){if("VisualState"===n||"analyserName"===n||"source"===n||"translatedSource"===n)continue;const i=t[n];if("visual"===n)for(const n in i)i.hasOwnProperty(n)&&i[n]&&this.mvx.addChildState(e,{key:n,value:i[n],pixelated:"NEAREST"===t.samplerMagFilter||"NEAREST"===t.magFilter},this.jsonImageItemComponent);else{const t=this.getJSONAsString(e,n,i);if(null==t)continue;if(this.toFilter(n)&&this.toFilter(i))continue;this.mvx.addChildState(e,{key:n,value:t},this.jsonItemComponent)}i&&i.__SPECTOR_Metadata&&this.displayJSONGroup(e,"Metadata",i.__SPECTOR_Metadata)}}getJSONAsString(e,t,n){if(null===n)return"null";if(void 0===n)return"undefined";if("number"==typeof n)return Math.floor(n)===n?n.toFixed(0):n.toFixed(4);if("string"==typeof n)return n;if("boolean"==typeof n)return n?"true":"false";if(0===n.length)return"Empty Array";if(n.length){const i=[];for(let r=0;r(e.active=!1,e))),this.mvx.updateState(this.currentCaptureStateId,{capture:e,active:!0}),this.createVisualStates(e),this.commandListStateId=this.mvx.addChildState(this.contentStateId,null,this.commandListComponent),this.commandDetailStateId=this.mvx.addChildState(this.contentStateId,null,this.commandDetailComponent),this.createCommands(e)}displayCurrentCommand(){if(40!==this.mvx.getGenericState(this.menuStateId).status)return-1;const e=this.mvx.getGenericState(this.currentCommandStateId),t=e.capture;return this.currentCommandId=t.id,this.mvx.updateAllChildrenGenericState(this.commandListStateId,(e=>(e.active=!1,e))),this.mvx.updateState(this.currentCommandStateId,{capture:t,visualStateId:e.visualStateId,previousCommandStateId:e.previousCommandStateId,nextCommandStateId:e.nextCommandStateId,active:!0}),this.displayCurrentCommandDetail(e)}displayCurrentCommandDetail(e){const t=e.capture;this.mvx.removeChildrenStates(this.commandDetailStateId);const n=this.mvx.getGenericState(e.visualStateId);this.mvx.addChildState(this.commandDetailStateId,n.VisualState,this.jsonVisualStateItemComponent);let i="Unknown";switch(t.status){case 50:i="Deprecated";break;case 10:i="Unused";break;case 20:i="Disabled";break;case 30:i="Redundant";break;case 40:i="Valid"}const r=Kt.getMDNLink(t.name);t.result?this.displayJSONGroup(this.commandDetailStateId,"Global",{name:{help:r,name:t.name},duration:t.commandEndTime-t.startTime,result:t.result,status:i}):"LOG"!==t.name&&this.displayJSONGroup(this.commandDetailStateId,"Global",{name:{help:r,name:t.name},duration:t.commandEndTime-t.startTime,status:i});for(const e in t)"VisualState"!==e&&"result"!==e&&"object"==typeof t[e]&&this.displayJSONGroup(this.commandDetailStateId,e,t[e]);return e.visualStateId}displayCurrentVisualState(){if(40!==this.mvx.getGenericState(this.menuStateId).status)return null;const e=this.mvx.getGenericState(this.currentVisualStateId);return e.commandStateId===Number.MIN_VALUE?this.displayInitState():e.commandStateId===Number.MAX_VALUE&&this.displayEndState(),this.mvx.updateAllChildrenGenericState(this.visualStateListStateId,(e=>(e.active=!1,e))),e.active=!0,this.mvx.updateState(this.currentVisualStateId,e),e.commandStateId}createVisualStates(e){this.visualStateListStateId=this.mvx.addChildState(this.contentStateId,null,this.visualStateListComponent),this.mvx.removeChildrenStates(this.visualStateListStateId),this.initVisualStateId=this.mvx.addChildState(this.visualStateListStateId,{VisualState:e.initState.VisualState,time:e.startTime,commandStateId:Number.MIN_VALUE,active:!1},this.visualStateListItemComponent)}createCommands(e){this.mvx.removeChildrenStates(this.commandListStateId);let t=this.initVisualStateId,n=!1,i=null,r=-1,s=null,o=-1;for(let a=0;a2&&-1===e.indexOf(this.searchText.toLowerCase()))}search(e){switch(this.searchText=e,this.mvx.getGenericState(this.menuStateId).status){case 0:case 40:this.displayCurrentCapture();break;case 30:this.displayEndState();break;case 10:this.displayInformation();break;case 20:this.displayInitState()}this.searchText=""}}class Yt{constructor(e){this.timeSpy=e,this.init()}spyXRSession(e){this.currentXRSession&&this.unspyXRSession();for(const e of Ze.getRequestAnimationFrameFunctionNames())A.resetOriginFunction(this.timeSpy.getSpiedScope(),e);this.timeSpy.spyRequestAnimationFrame("requestAnimationFrame",e),this.currentXRSession=e}unspyXRSession(){if(this.currentXRSession){A.resetOriginFunction(this.currentXRSession,"requestAnimationFrame"),this.currentXRSession=void 0;for(const e of Ze.getRequestAnimationFrameFunctionNames())this.timeSpy.spyRequestAnimationFrame(e,this.timeSpy.getSpiedScope())}}init(){if(!navigator.xr)return;class e extends XRWebGLLayer{constructor(e,t,n){super(e,t,n),this.glContext=t}getContext(){return this.glContext}}class t extends XRWebGLBinding{constructor(e,t){super(e,t),this.glContext=t}createProjectionLayer(e){const t=super.createProjectionLayer(e);return t.glContext=this.glContext,t}}window.XRWebGLLayer=e,window.XRWebGLBinding=t;const n=navigator.xr.requestSession;Object.defineProperty(navigator.xr,"requestSessionInternal",{writable:!0}),navigator.xr.requestSessionInternal=n,Object.defineProperty(navigator.xr,"requestSession",{writable:!0}),navigator.xr.requestSession=(e,t)=>((e,t)=>navigator.xr.requestSessionInternal(e,t).then((e=>{const t=e;return t._updateRenderState=e.updateRenderState,t.updateRenderState=e=>{return n=this,i=void 0,s=function*(){if(e.baseLayer){const n=e.baseLayer;t.glContext=n.getContext()}if(e.layers)for(const n of e.layers){const e=n;e.glContext&&(t.glContext=e.glContext)}return t._updateRenderState(e)},new((r=void 0)||(r=Promise))((function(e,t){function o(e){try{l(s.next(e))}catch(e){t(e)}}function a(e){try{l(s.throw(e))}catch(e){t(e)}}function l(t){var n;t.done?e(t.value):(n=t.value,n instanceof r?n:new r((function(e){e(n)}))).then(o,a)}l((s=s.apply(n,i||[])).next())}));var n,i,r,s},this.spyXRSession(t),e.addEventListener("end",(()=>{this.unspyXRSession()})),Promise.resolve(e)})))(e,t)}}const qt={CaptureMenu:St,ResultView:jt};class Zt{constructor(e={}){this.noFrameTimeout=-1,this.options=Object.assign({enableXRCapture:!1},e),this.captureNextFrames=0,this.captureNextCommands=0,this.quickCapture=!1,this.fullCapture=!1,this.retry=0,this.contexts=[],this.timeSpy=new Ze,this.onCaptureStarted=new o,this.onCapture=new o,this.onError=new o,this.timeSpy.onFrameStart.add(this.onFrameStart,this),this.timeSpy.onFrameEnd.add(this.onFrameEnd,this),this.timeSpy.onError.add(this.onErrorInternal,this),this.options.enableXRCapture&&(this.xrSpy=new Yt(this.timeSpy))}static getFirstAvailable3dContext(e){return this.tryGetContextFromHelperField(e)||this.tryGetContextFromCanvas(e,"webgl")||this.tryGetContextFromCanvas(e,"experimental-webgl")||this.tryGetContextFromCanvas(e,"webgl2")||this.tryGetContextFromCanvas(e,"experimental-webgl2")}static tryGetContextFromHelperField(e){const t=e instanceof HTMLCanvasElement?e.getAttribute("__spector_context_type"):e.__spector_context_type;if(t)return this.tryGetContextFromCanvas(e,t)}static tryGetContextFromCanvas(e,t){let n;try{n=e.getContext(t)}catch(e){}return n}displayUI(e=!1){this.captureMenu||(this.getCaptureUI(),this.captureMenu.onPauseRequested.add(this.pause,this),this.captureMenu.onPlayRequested.add(this.play,this),this.captureMenu.onPlayNextFrameRequested.add(this.playNextFrame,this),this.captureMenu.onCaptureRequested.add((e=>{e&&this.captureCanvas(e.ref)}),this),setInterval((()=>{this.captureMenu.setFPS(this.getFps())}),1e3),e||this.captureMenu.trackPageCanvases(),this.captureMenu.display()),this.resultView||(this.getResultUI(),this.onCapture.add((e=>{this.resultView.display(),this.resultView.addCapture(e)})))}getResultUI(){return this.resultView||(this.resultView=new jt,this.resultView.onSourceCodeChanged.add((e=>{this.rebuildProgramFromProgramId(e.programId,e.sourceVertex,e.sourceFragment,(t=>{this.referenceNewProgram(e.programId,t),this.resultView.showSourceCodeError(null)}),(e=>{this.resultView.showSourceCodeError(e)}))}))),this.resultView}getCaptureUI(){return this.captureMenu||(this.captureMenu=new St),this.captureMenu}rebuildProgramFromProgramId(e,t,n,i,r){const s=we.getFromGlobalStore(e);this.rebuildProgram(s,t,n,i,r)}rebuildProgram(e,t,n,r,s){i.rebuildProgram(e,t,n,r,s)}referenceNewProgram(e,t){we.updateInGlobalStore(e,t)}pause(){this.timeSpy.changeSpeedRatio(0)}play(){this.timeSpy.changeSpeedRatio(1)}playNextFrame(){this.timeSpy.playNextFrame()}drawOnlyEveryXFrame(e){this.timeSpy.changeSpeedRatio(e)}getFps(){return this.timeSpy.getFps()}spyCanvases(){this.canvasSpy?this.onErrorInternal("Already spying canvas."):(this.canvasSpy=new Qe,this.canvasSpy.onContextRequested.add(this.spyContext,this))}spyCanvas(e){this.canvasSpy?this.onErrorInternal("Already spying canvas."):(this.canvasSpy=new Qe(e),this.canvasSpy.onContextRequested.add(this.spyContext,this))}getAvailableContexts(){return this.getAvailableContexts()}captureCanvas(e,t=0,n=!1,i=!1){const r=this.getAvailableContextSpyByCanvas(e);if(r)this.captureContextSpy(r,t,n,i);else{const r=Zt.getFirstAvailable3dContext(e);r?this.captureContext(r,t,n,i):s.error("No webgl context available on the chosen canvas.")}}captureContext(e,t=0,n=!1,i=!1){let r=this.getAvailableContextSpyByCanvas(e.canvas);r||(r=e.getIndexedParameter?new qe({context:e,version:2,recordAlways:!1}):new qe({context:e,version:1,recordAlways:!1}),r.onMaxCommand.add(this.stopCapture,this),this.contexts.push({canvas:r.context.canvas,contextSpy:r})),r&&this.captureContextSpy(r,t,n,i)}captureXRContext(e=0,t=!1,n=!1){this.captureContext(this.getXRContext(),e,t,n)}captureContextSpy(e,t=0,n=!1,i=!1){this.quickCapture=n,this.fullCapture=i,this.capturingContext?this.onErrorInternal("Already capturing a context."):(this.retry=0,this.capturingContext=e,this.capturingContext.setMarker(this.marker),(t=Math.min(t,1e4))>0?this.captureCommands(t):this.captureFrames(1),this.noFrameTimeout=setTimeout((()=>{t>0?this.stopCapture():this.capturingContext&&this.retry>1?this.onErrorInternal("No frames with gl commands detected. Try moving the camera."):this.onErrorInternal("No frames detected. Try moving the camera or implementing requestAnimationFrame.")}),1e4))}captureNextFrame(e,t=!1,n=!1){e instanceof HTMLCanvasElement||self.OffscreenCanvas&&e instanceof OffscreenCanvas?this.captureCanvas(e,0,t,n):this.captureContext(e,0,t,n)}startCapture(e,t,n=!1,i=!1){e instanceof HTMLCanvasElement||self.OffscreenCanvas&&e instanceof OffscreenCanvas?this.captureCanvas(e,t,n,i):this.captureContext(e,t,n,i)}stopCapture(){if(this.capturingContext){const e=this.capturingContext.stopCapture();if(e.commands.length>0)return this.noFrameTimeout>-1&&clearTimeout(this.noFrameTimeout),this.triggerCapture(e),this.capturingContext=void 0,this.captureNextFrames=0,this.captureNextCommands=0,e;0===this.captureNextCommands&&(this.retry++,this.captureFrames(1))}}setMarker(e){this.marker=e,this.capturingContext&&this.capturingContext.setMarker(e)}clearMarker(){this.marker=null,this.capturingContext&&this.capturingContext.clearMarker()}addRequestAnimationFrameFunctionName(e){this.timeSpy.addRequestAnimationFrameFunctionName(e)}setSpiedScope(e){this.timeSpy.setSpiedScope(e)}log(e){this.capturingContext&&this.capturingContext.log(e)}captureFrames(e){this.captureNextFrames=e,this.captureNextCommands=0,this.playNextFrame()}captureCommands(e){this.captureNextFrames=0,this.captureNextCommands=e,this.play(),this.capturingContext?(this.onCaptureStarted.trigger(void 0),this.capturingContext.startCapture(e,this.quickCapture,this.fullCapture)):(this.onErrorInternal("No context to capture from."),this.captureNextCommands=0)}spyContext(e){let t=this.getAvailableContextSpyByCanvas(e.context.canvas);t||(t=new qe({context:e.context,version:e.contextVersion,recordAlways:!0}),t.onMaxCommand.add(this.stopCapture,this),this.contexts.push({canvas:t.context.canvas,contextSpy:t})),t.spy()}getAvailableContextSpyByCanvas(e){for(const t of this.contexts)if(t.canvas===e)return t.contextSpy}getXRContext(){return this.options.enableXRCapture||s.error("Cannot retrieve WebXR context if capturing WebXR is disabled."),this.xrSpy.currentXRSession||s.error("No currently active WebXR session."),this.xrSpy.currentXRSession.glContext}onFrameStart(){this.captureNextCommands>0||(this.captureNextFrames>0?(this.capturingContext&&(this.onCaptureStarted.trigger(void 0),this.capturingContext.startCapture(0,this.quickCapture,this.fullCapture)),this.captureNextFrames--):this.capturingContext=void 0)}onFrameEnd(){this.captureNextCommands>0||0===this.captureNextFrames&&this.stopCapture()}triggerCapture(e){this.captureMenu&&this.captureMenu.captureComplete(null),this.onCapture.trigger(e)}onErrorInternal(e){if(s.error(e),this.noFrameTimeout>-1&&clearTimeout(this.noFrameTimeout),!this.capturingContext)throw e;this.capturingContext=void 0,this.captureNextFrames=0,this.captureNextCommands=0,this.retry=0,this.captureMenu&&this.captureMenu.captureComplete(e),this.onError.trigger(e)}}},18:(e,t,n)=>{e=n.nmd(e),ace.define("ace/ext/searchbox",["require","exports","module","ace/lib/dom","ace/lib/lang","ace/lib/event","ace/keyboard/hash_handler","ace/lib/keys"],(function(e,t,n){"use strict";var i=e("../lib/dom"),r=e("../lib/lang"),s=e("../lib/event"),o='.ace_search {background-color: #ddd;color: #666;border: 1px solid #cbcbcb;border-top: 0 none;overflow: hidden;margin: 0;padding: 4px 6px 0 4px;position: absolute;top: 0;z-index: 99;white-space: normal;}.ace_search.left {border-left: 0 none;border-radius: 0px 0px 5px 0px;left: 0;}.ace_search.right {border-radius: 0px 0px 0px 5px;border-right: 0 none;right: 0;}.ace_search_form, .ace_replace_form {margin: 0 20px 4px 0;overflow: hidden;line-height: 1.9;}.ace_replace_form {margin-right: 0;}.ace_search_form.ace_nomatch {outline: 1px solid red;}.ace_search_field {border-radius: 3px 0 0 3px;background-color: white;color: black;border: 1px solid #cbcbcb;border-right: 0 none;outline: 0;padding: 0;font-size: inherit;margin: 0;line-height: inherit;padding: 0 6px;min-width: 17em;vertical-align: top;min-height: 1.8em;box-sizing: content-box;}.ace_searchbtn {border: 1px solid #cbcbcb;line-height: inherit;display: inline-block;padding: 0 6px;background: #fff;border-right: 0 none;border-left: 1px solid #dcdcdc;cursor: pointer;margin: 0;position: relative;color: #666;}.ace_searchbtn:last-child {border-radius: 0 3px 3px 0;border-right: 1px solid #cbcbcb;}.ace_searchbtn:disabled {background: none;cursor: default;}.ace_searchbtn:hover {background-color: #eef1f6;}.ace_searchbtn.prev, .ace_searchbtn.next {padding: 0px 0.7em}.ace_searchbtn.prev:after, .ace_searchbtn.next:after {content: "";border: solid 2px #888;width: 0.5em;height: 0.5em;border-width: 2px 0 0 2px;display:inline-block;transform: rotate(-45deg);}.ace_searchbtn.next:after {border-width: 0 2px 2px 0 ;}.ace_searchbtn_close {background: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAA4AAAAcCAYAAABRVo5BAAAAZ0lEQVR42u2SUQrAMAhDvazn8OjZBilCkYVVxiis8H4CT0VrAJb4WHT3C5xU2a2IQZXJjiQIRMdkEoJ5Q2yMqpfDIo+XY4k6h+YXOyKqTIj5REaxloNAd0xiKmAtsTHqW8sR2W5f7gCu5nWFUpVjZwAAAABJRU5ErkJggg==) no-repeat 50% 0;border-radius: 50%;border: 0 none;color: #656565;cursor: pointer;font: 16px/16px Arial;padding: 0;height: 14px;width: 14px;top: 9px;right: 7px;position: absolute;}.ace_searchbtn_close:hover {background-color: #656565;background-position: 50% 100%;color: white;}.ace_button {margin-left: 2px;cursor: pointer;-webkit-user-select: none;-moz-user-select: none;-o-user-select: none;-ms-user-select: none;user-select: none;overflow: hidden;opacity: 0.7;border: 1px solid rgba(100,100,100,0.23);padding: 1px;box-sizing: border-box!important;color: black;}.ace_button:hover {background-color: #eee;opacity:1;}.ace_button:active {background-color: #ddd;}.ace_button.checked {border-color: #3399ff;opacity:1;}.ace_search_options{margin-bottom: 3px;text-align: right;-webkit-user-select: none;-moz-user-select: none;-o-user-select: none;-ms-user-select: none;user-select: none;clear: both;}.ace_search_counter {float: left;font-family: arial;padding: 0 8px;}',a=e("../keyboard/hash_handler").HashHandler,l=e("../lib/keys");i.importCssString(o,"ace_searchbox");var c=function(e,t,n){var r=i.createElement("div");i.buildDom(["div",{class:"ace_search right"},["span",{action:"hide",class:"ace_searchbtn_close"}],["div",{class:"ace_search_form"},["input",{class:"ace_search_field",placeholder:"Search for",spellcheck:"false"}],["span",{action:"findPrev",class:"ace_searchbtn prev"},"​"],["span",{action:"findNext",class:"ace_searchbtn next"},"​"],["span",{action:"findAll",class:"ace_searchbtn",title:"Alt-Enter"},"All"]],["div",{class:"ace_replace_form"},["input",{class:"ace_search_field",placeholder:"Replace with",spellcheck:"false"}],["span",{action:"replaceAndFindNext",class:"ace_searchbtn"},"Replace"],["span",{action:"replaceAll",class:"ace_searchbtn"},"All"]],["div",{class:"ace_search_options"},["span",{action:"toggleReplace",class:"ace_button",title:"Toggle Replace mode",style:"float:left;margin-top:-2px;padding:0 5px;"},"+"],["span",{class:"ace_search_counter"}],["span",{action:"toggleRegexpMode",class:"ace_button",title:"RegExp Search"},".*"],["span",{action:"toggleCaseSensitive",class:"ace_button",title:"CaseSensitive Search"},"Aa"],["span",{action:"toggleWholeWords",class:"ace_button",title:"Whole Word Search"},"\\b"],["span",{action:"searchInSelection",class:"ace_button",title:"Search In Selection"},"S"]]],r),this.element=r.firstChild,this.setSession=this.setSession.bind(this),this.$init(),this.setEditor(e),i.importCssString(o,"ace_searchbox",e.container)};(function(){this.setEditor=function(e){e.searchBox=this,e.renderer.scroller.appendChild(this.element),this.editor=e},this.setSession=function(e){this.searchRange=null,this.$syncOptions(!0)},this.$initElements=function(e){this.searchBox=e.querySelector(".ace_search_form"),this.replaceBox=e.querySelector(".ace_replace_form"),this.searchOption=e.querySelector("[action=searchInSelection]"),this.replaceOption=e.querySelector("[action=toggleReplace]"),this.regExpOption=e.querySelector("[action=toggleRegexpMode]"),this.caseSensitiveOption=e.querySelector("[action=toggleCaseSensitive]"),this.wholeWordOption=e.querySelector("[action=toggleWholeWords]"),this.searchInput=this.searchBox.querySelector(".ace_search_field"),this.replaceInput=this.replaceBox.querySelector(".ace_search_field"),this.searchCounter=e.querySelector(".ace_search_counter")},this.$init=function(){var e=this.element;this.$initElements(e);var t=this;s.addListener(e,"mousedown",(function(e){setTimeout((function(){t.activeInput.focus()}),0),s.stopPropagation(e)})),s.addListener(e,"click",(function(e){var n=(e.target||e.srcElement).getAttribute("action");n&&t[n]?t[n]():t.$searchBarKb.commands[n]&&t.$searchBarKb.commands[n].exec(t),s.stopPropagation(e)})),s.addCommandKeyListener(e,(function(e,n,i){var r=l.keyCodeToString(i),o=t.$searchBarKb.findKeyCommand(n,r);o&&o.exec&&(o.exec(t),s.stopEvent(e))})),this.$onChange=r.delayedCall((function(){t.find(!1,!1)})),s.addListener(this.searchInput,"input",(function(){t.$onChange.schedule(20)})),s.addListener(this.searchInput,"focus",(function(){t.activeInput=t.searchInput,t.searchInput.value&&t.highlight()})),s.addListener(this.replaceInput,"focus",(function(){t.activeInput=t.replaceInput,t.searchInput.value&&t.highlight()}))},this.$closeSearchBarKb=new a([{bindKey:"Esc",name:"closeSearchBar",exec:function(e){e.searchBox.hide()}}]),this.$searchBarKb=new a,this.$searchBarKb.bindKeys({"Ctrl-f|Command-f":function(e){var t=e.isReplace=!e.isReplace;e.replaceBox.style.display=t?"":"none",e.replaceOption.checked=!1,e.$syncOptions(),e.searchInput.focus()},"Ctrl-H|Command-Option-F":function(e){e.editor.getReadOnly()||(e.replaceOption.checked=!0,e.$syncOptions(),e.replaceInput.focus())},"Ctrl-G|Command-G":function(e){e.findNext()},"Ctrl-Shift-G|Command-Shift-G":function(e){e.findPrev()},esc:function(e){setTimeout((function(){e.hide()}))},Return:function(e){e.activeInput==e.replaceInput&&e.replace(),e.findNext()},"Shift-Return":function(e){e.activeInput==e.replaceInput&&e.replace(),e.findPrev()},"Alt-Return":function(e){e.activeInput==e.replaceInput&&e.replaceAll(),e.findAll()},Tab:function(e){(e.activeInput==e.replaceInput?e.searchInput:e.replaceInput).focus()}}),this.$searchBarKb.addCommands([{name:"toggleRegexpMode",bindKey:{win:"Alt-R|Alt-/",mac:"Ctrl-Alt-R|Ctrl-Alt-/"},exec:function(e){e.regExpOption.checked=!e.regExpOption.checked,e.$syncOptions()}},{name:"toggleCaseSensitive",bindKey:{win:"Alt-C|Alt-I",mac:"Ctrl-Alt-R|Ctrl-Alt-I"},exec:function(e){e.caseSensitiveOption.checked=!e.caseSensitiveOption.checked,e.$syncOptions()}},{name:"toggleWholeWords",bindKey:{win:"Alt-B|Alt-W",mac:"Ctrl-Alt-B|Ctrl-Alt-W"},exec:function(e){e.wholeWordOption.checked=!e.wholeWordOption.checked,e.$syncOptions()}},{name:"toggleReplace",exec:function(e){e.replaceOption.checked=!e.replaceOption.checked,e.$syncOptions()}},{name:"searchInSelection",exec:function(e){e.searchOption.checked=!e.searchRange,e.setSearchRange(e.searchOption.checked&&e.editor.getSelectionRange()),e.$syncOptions()}}]),this.setSearchRange=function(e){this.searchRange=e,e?this.searchRangeMarker=this.editor.session.addMarker(e,"ace_active-line"):this.searchRangeMarker&&(this.editor.session.removeMarker(this.searchRangeMarker),this.searchRangeMarker=null)},this.$syncOptions=function(e){i.setCssClass(this.replaceOption,"checked",this.searchRange),i.setCssClass(this.searchOption,"checked",this.searchOption.checked),this.replaceOption.textContent=this.replaceOption.checked?"-":"+",i.setCssClass(this.regExpOption,"checked",this.regExpOption.checked),i.setCssClass(this.wholeWordOption,"checked",this.wholeWordOption.checked),i.setCssClass(this.caseSensitiveOption,"checked",this.caseSensitiveOption.checked);var t=this.editor.getReadOnly();this.replaceOption.style.display=t?"none":"",this.replaceBox.style.display=this.replaceOption.checked&&!t?"":"none",this.find(!1,!1,e)},this.highlight=function(e){this.editor.session.highlight(e||this.editor.$search.$options.re),this.editor.renderer.updateBackMarkers()},this.find=function(e,t,n){var r=!this.editor.find(this.searchInput.value,{skipCurrent:e,backwards:t,wrap:!0,regExp:this.regExpOption.checked,caseSensitive:this.caseSensitiveOption.checked,wholeWord:this.wholeWordOption.checked,preventScroll:n,range:this.searchRange})&&this.searchInput.value;i.setCssClass(this.searchBox,"ace_nomatch",r),this.editor._emit("findSearchBox",{match:!r}),this.highlight(),this.updateCounter()},this.updateCounter=function(){var e=this.editor,t=e.$search.$options.re,n=0,i=0;if(t){var r=this.searchRange?e.session.getTextRange(this.searchRange):e.getValue(),s=e.session.doc.positionToIndex(e.selection.anchor);this.searchRange&&(s-=e.session.doc.positionToIndex(this.searchRange.start));for(var o,a=t.lastIndex=0;(o=t.exec(r))&&(n++,(a=o.index)<=s&&i++,!(n>999))&&(o[0]||(t.lastIndex=a+=1,!(a>=r.length))););}this.searchCounter.textContent=i+" of "+(n>999?"999+":n)},this.findNext=function(){this.find(!0,!1)},this.findPrev=function(){this.find(!0,!0)},this.findAll=function(){var e=!this.editor.findAll(this.searchInput.value,{regExp:this.regExpOption.checked,caseSensitive:this.caseSensitiveOption.checked,wholeWord:this.wholeWordOption.checked})&&this.searchInput.value;i.setCssClass(this.searchBox,"ace_nomatch",e),this.editor._emit("findSearchBox",{match:!e}),this.highlight(),this.hide()},this.replace=function(){this.editor.getReadOnly()||this.editor.replace(this.replaceInput.value)},this.replaceAndFindNext=function(){this.editor.getReadOnly()||(this.editor.replace(this.replaceInput.value),this.findNext())},this.replaceAll=function(){this.editor.getReadOnly()||this.editor.replaceAll(this.replaceInput.value)},this.hide=function(){this.active=!1,this.setSearchRange(null),this.editor.off("changeSession",this.setSession),this.element.style.display="none",this.editor.keyBinding.removeKeyboardHandler(this.$closeSearchBarKb),this.editor.focus()},this.show=function(e,t){this.active=!0,this.editor.on("changeSession",this.setSession),this.element.style.display="",this.replaceOption.checked=t,e&&(this.searchInput.value=e),this.searchInput.focus(),this.searchInput.select(),this.editor.keyBinding.addKeyboardHandler(this.$closeSearchBarKb),this.$syncOptions(!0)},this.isFocused=function(){var e=document.activeElement;return e==this.searchInput||e==this.replaceInput}}).call(c.prototype),t.SearchBox=c,t.Search=function(e,t){(e.searchBox||new c(e)).show(e.session.getTextRange(),t)}})),ace.require(["ace/ext/searchbox"],(function(t){e&&(e.exports=t)}))},176:(e,t,n)=>{e=n.nmd(e),ace.define("ace/mode/doc_comment_highlight_rules",["require","exports","module","ace/lib/oop","ace/mode/text_highlight_rules"],(function(e,t,n){"use strict";var i=e("../lib/oop"),r=e("./text_highlight_rules").TextHighlightRules,s=function(){this.$rules={start:[{token:"comment.doc.tag",regex:"@[\\w\\d_]+"},s.getTagRule(),{defaultToken:"comment.doc",caseInsensitive:!0}]}};i.inherits(s,r),s.getTagRule=function(e){return{token:"comment.doc.tag.storage.type",regex:"\\b(?:TODO|FIXME|XXX|HACK)\\b"}},s.getStartRule=function(e){return{token:"comment.doc",regex:"\\/\\*(?=\\*)",next:e}},s.getEndRule=function(e){return{token:"comment.doc",regex:"\\*\\/",next:e}},t.DocCommentHighlightRules=s})),ace.define("ace/mode/c_cpp_highlight_rules",["require","exports","module","ace/lib/oop","ace/mode/doc_comment_highlight_rules","ace/mode/text_highlight_rules"],(function(e,t,n){"use strict";var i=e("../lib/oop"),r=e("./doc_comment_highlight_rules").DocCommentHighlightRules,s=e("./text_highlight_rules").TextHighlightRules,o=t.cFunctions="\\b(?:hypot(?:f|l)?|s(?:scanf|ystem|nprintf|ca(?:nf|lb(?:n(?:f|l)?|ln(?:f|l)?))|i(?:n(?:h(?:f|l)?|f|l)?|gn(?:al|bit))|tr(?:s(?:tr|pn)|nc(?:py|at|mp)|c(?:spn|hr|oll|py|at|mp)|to(?:imax|d|u(?:l(?:l)?|max)|k|f|l(?:d|l)?)|error|pbrk|ftime|len|rchr|xfrm)|printf|et(?:jmp|vbuf|locale|buf)|qrt(?:f|l)?|w(?:scanf|printf)|rand)|n(?:e(?:arbyint(?:f|l)?|xt(?:toward(?:f|l)?|after(?:f|l)?))|an(?:f|l)?)|c(?:s(?:in(?:h(?:f|l)?|f|l)?|qrt(?:f|l)?)|cos(?:h(?:f)?|f|l)?|imag(?:f|l)?|t(?:ime|an(?:h(?:f|l)?|f|l)?)|o(?:s(?:h(?:f|l)?|f|l)?|nj(?:f|l)?|pysign(?:f|l)?)|p(?:ow(?:f|l)?|roj(?:f|l)?)|e(?:il(?:f|l)?|xp(?:f|l)?)|l(?:o(?:ck|g(?:f|l)?)|earerr)|a(?:sin(?:h(?:f|l)?|f|l)?|cos(?:h(?:f|l)?|f|l)?|tan(?:h(?:f|l)?|f|l)?|lloc|rg(?:f|l)?|bs(?:f|l)?)|real(?:f|l)?|brt(?:f|l)?)|t(?:ime|o(?:upper|lower)|an(?:h(?:f|l)?|f|l)?|runc(?:f|l)?|gamma(?:f|l)?|mp(?:nam|file))|i(?:s(?:space|n(?:ormal|an)|cntrl|inf|digit|u(?:nordered|pper)|p(?:unct|rint)|finite|w(?:space|c(?:ntrl|type)|digit|upper|p(?:unct|rint)|lower|al(?:num|pha)|graph|xdigit|blank)|l(?:ower|ess(?:equal|greater)?)|al(?:num|pha)|gr(?:eater(?:equal)?|aph)|xdigit|blank)|logb(?:f|l)?|max(?:div|abs))|di(?:v|fftime)|_Exit|unget(?:c|wc)|p(?:ow(?:f|l)?|ut(?:s|c(?:har)?|wc(?:har)?)|error|rintf)|e(?:rf(?:c(?:f|l)?|f|l)?|x(?:it|p(?:2(?:f|l)?|f|l|m1(?:f|l)?)?))|v(?:s(?:scanf|nprintf|canf|printf|w(?:scanf|printf))|printf|f(?:scanf|printf|w(?:scanf|printf))|w(?:scanf|printf)|a_(?:start|copy|end|arg))|qsort|f(?:s(?:canf|e(?:tpos|ek))|close|tell|open|dim(?:f|l)?|p(?:classify|ut(?:s|c|w(?:s|c))|rintf)|e(?:holdexcept|set(?:e(?:nv|xceptflag)|round)|clearexcept|testexcept|of|updateenv|r(?:aiseexcept|ror)|get(?:e(?:nv|xceptflag)|round))|flush|w(?:scanf|ide|printf|rite)|loor(?:f|l)?|abs(?:f|l)?|get(?:s|c|pos|w(?:s|c))|re(?:open|e|ad|xp(?:f|l)?)|m(?:in(?:f|l)?|od(?:f|l)?|a(?:f|l|x(?:f|l)?)?))|l(?:d(?:iv|exp(?:f|l)?)|o(?:ngjmp|cal(?:time|econv)|g(?:1(?:p(?:f|l)?|0(?:f|l)?)|2(?:f|l)?|f|l|b(?:f|l)?)?)|abs|l(?:div|abs|r(?:int(?:f|l)?|ound(?:f|l)?))|r(?:int(?:f|l)?|ound(?:f|l)?)|gamma(?:f|l)?)|w(?:scanf|c(?:s(?:s(?:tr|pn)|nc(?:py|at|mp)|c(?:spn|hr|oll|py|at|mp)|to(?:imax|d|u(?:l(?:l)?|max)|k|f|l(?:d|l)?|mbs)|pbrk|ftime|len|r(?:chr|tombs)|xfrm)|to(?:b|mb)|rtomb)|printf|mem(?:set|c(?:hr|py|mp)|move))|a(?:s(?:sert|ctime|in(?:h(?:f|l)?|f|l)?)|cos(?:h(?:f|l)?|f|l)?|t(?:o(?:i|f|l(?:l)?)|exit|an(?:h(?:f|l)?|2(?:f|l)?|f|l)?)|b(?:s|ort))|g(?:et(?:s|c(?:har)?|env|wc(?:har)?)|mtime)|r(?:int(?:f|l)?|ound(?:f|l)?|e(?:name|alloc|wind|m(?:ove|quo(?:f|l)?|ainder(?:f|l)?))|a(?:nd|ise))|b(?:search|towc)|m(?:odf(?:f|l)?|em(?:set|c(?:hr|py|mp)|move)|ktime|alloc|b(?:s(?:init|towcs|rtowcs)|towc|len|r(?:towc|len))))\\b",a=function(){var e=this.$keywords=this.createKeywordMapper({"keyword.control":"break|case|continue|default|do|else|for|goto|if|_Pragma|return|switch|while|catch|operator|try|throw|using","storage.type":"asm|__asm__|auto|bool|_Bool|char|_Complex|double|enum|float|_Imaginary|int|long|short|signed|struct|typedef|union|unsigned|void|class|wchar_t|template|char16_t|char32_t","storage.modifier":"const|extern|register|restrict|static|volatile|inline|private|protected|public|friend|explicit|virtual|export|mutable|typename|constexpr|new|delete|alignas|alignof|decltype|noexcept|thread_local","keyword.operator":"and|and_eq|bitand|bitor|compl|not|not_eq|or|or_eq|typeid|xor|xor_eq|const_cast|dynamic_cast|reinterpret_cast|static_cast|sizeof|namespace","variable.language":"this","constant.language":"NULL|true|false|TRUE|FALSE|nullptr"},"identifier"),t=/\\(?:['"?\\abfnrtv]|[0-7]{1,3}|x[a-fA-F\d]{2}|u[a-fA-F\d]{4}U[a-fA-F\d]{8}|.)/.source,n="%"+/(\d+\$)?/.source+/[#0\- +']*/.source+/[,;:_]?/.source+/((-?\d+)|\*(-?\d+\$)?)?/.source+/(\.((-?\d+)|\*(-?\d+\$)?)?)?/.source+/(hh|h|ll|l|j|t|z|q|L|vh|vl|v|hv|hl)?/.source+/(\[[^"\]]+\]|[diouxXDOUeEfFgGaACcSspn%])/.source;this.$rules={start:[{token:"comment",regex:"//$",next:"start"},{token:"comment",regex:"//",next:"singleLineComment"},r.getStartRule("doc-start"),{token:"comment",regex:"\\/\\*",next:"comment"},{token:"string",regex:"'(?:"+t+"|.)?'"},{token:"string.start",regex:'"',stateName:"qqstring",next:[{token:"string",regex:/\\\s*$/,next:"qqstring"},{token:"constant.language.escape",regex:t},{token:"constant.language.escape",regex:n},{token:"string.end",regex:'"|$',next:"start"},{defaultToken:"string"}]},{token:"string.start",regex:'R"\\(',stateName:"rawString",next:[{token:"string.end",regex:'\\)"',next:"start"},{defaultToken:"string"}]},{token:"constant.numeric",regex:"0[xX][0-9a-fA-F]+(L|l|UL|ul|u|U|F|f|ll|LL|ull|ULL)?\\b"},{token:"constant.numeric",regex:"[+-]?\\d+(?:(?:\\.\\d*)?(?:[eE][+-]?\\d+)?)?(L|l|UL|ul|u|U|F|f|ll|LL|ull|ULL)?\\b"},{token:"keyword",regex:"#\\s*(?:include|import|pragma|line|define|undef|version)\\b",next:"directive"},{token:"keyword",regex:"#\\s*(?:endif|if|ifdef|else|elif|ifndef)\\b"},{token:"support.function.C99.c",regex:o},{token:e,regex:"[a-zA-Z_$][a-zA-Z0-9_$]*"},{token:"keyword.operator",regex:/--|\+\+|<<=|>>=|>>>=|<>|&&|\|\||\?:|[*%\/+\-&\^|~!<>=]=?/},{token:"punctuation.operator",regex:"\\?|\\:|\\,|\\;|\\."},{token:"paren.lparen",regex:"[[({]"},{token:"paren.rparen",regex:"[\\])}]"},{token:"text",regex:"\\s+"}],comment:[{token:"comment",regex:"\\*\\/",next:"start"},{defaultToken:"comment"}],singleLineComment:[{token:"comment",regex:/\\$/,next:"singleLineComment"},{token:"comment",regex:/$/,next:"start"},{defaultToken:"comment"}],directive:[{token:"constant.other.multiline",regex:/\\/},{token:"constant.other.multiline",regex:/.*\\/},{token:"constant.other",regex:"\\s*<.+?>",next:"start"},{token:"constant.other",regex:'\\s*["](?:(?:\\\\.)|(?:[^"\\\\]))*?["]',next:"start"},{token:"constant.other",regex:"\\s*['](?:(?:\\\\.)|(?:[^'\\\\]))*?[']",next:"start"},{token:"constant.other",regex:/[^\\\/]+/,next:"start"}]},this.embedRules(r,"doc-",[r.getEndRule("start")]),this.normalizeRules()};i.inherits(a,s),t.c_cppHighlightRules=a})),ace.define("ace/mode/matching_brace_outdent",["require","exports","module","ace/range"],(function(e,t,n){"use strict";var i=e("../range").Range,r=function(){};(function(){this.checkOutdent=function(e,t){return!!/^\s+$/.test(e)&&/^\s*\}/.test(t)},this.autoOutdent=function(e,t){var n=e.getLine(t).match(/^(\s*\})/);if(!n)return 0;var r=n[1].length,s=e.findMatchingBracket({row:t,column:r});if(!s||s.row==t)return 0;var o=this.$getIndent(e.getLine(s.row));e.replace(new i(t,0,t,r-1),o)},this.$getIndent=function(e){return e.match(/^\s*/)[0]}}).call(r.prototype),t.MatchingBraceOutdent=r})),ace.define("ace/mode/folding/cstyle",["require","exports","module","ace/lib/oop","ace/range","ace/mode/folding/fold_mode"],(function(e,t,n){"use strict";var i=e("../../lib/oop"),r=e("../../range").Range,s=e("./fold_mode").FoldMode,o=t.FoldMode=function(e){e&&(this.foldingStartMarker=new RegExp(this.foldingStartMarker.source.replace(/\|[^|]*?$/,"|"+e.start)),this.foldingStopMarker=new RegExp(this.foldingStopMarker.source.replace(/\|[^|]*?$/,"|"+e.end)))};i.inherits(o,s),function(){this.foldingStartMarker=/([\{\[\(])[^\}\]\)]*$|^\s*(\/\*)/,this.foldingStopMarker=/^[^\[\{\(]*([\}\]\)])|^[\s\*]*(\*\/)/,this.singleLineBlockCommentRe=/^\s*(\/\*).*\*\/\s*$/,this.tripleStarBlockCommentRe=/^\s*(\/\*\*\*).*\*\/\s*$/,this.startRegionRe=/^\s*(\/\*|\/\/)#?region\b/,this._getFoldWidgetBase=this.getFoldWidget,this.getFoldWidget=function(e,t,n){var i=e.getLine(n);if(this.singleLineBlockCommentRe.test(i)&&!this.startRegionRe.test(i)&&!this.tripleStarBlockCommentRe.test(i))return"";var r=this._getFoldWidgetBase(e,t,n);return!r&&this.startRegionRe.test(i)?"start":r},this.getFoldWidgetRange=function(e,t,n,i){var r,s=e.getLine(n);if(this.startRegionRe.test(s))return this.getCommentRegionBlock(e,s,n);if(r=s.match(this.foldingStartMarker)){var o=r.index;if(r[1])return this.openingBracketBlock(e,r[1],n,o);var a=e.getCommentFoldRange(n,o+r[0].length,1);return a&&!a.isMultiLine()&&(i?a=this.getSectionRange(e,n):"all"!=t&&(a=null)),a}return"markbegin"!==t&&(r=s.match(this.foldingStopMarker))?(o=r.index+r[0].length,r[1]?this.closingBracketBlock(e,r[1],n,o):e.getCommentFoldRange(n,o,-1)):void 0},this.getSectionRange=function(e,t){for(var n=e.getLine(t),i=n.search(/\S/),s=t,o=n.length,a=t+=1,l=e.getLength();++tc)break;var u=this.getFoldWidgetRange(e,"all",t);if(u){if(u.start.row<=s)break;if(u.isMultiLine())t=u.end.row;else if(i==c)break}a=t}}return new r(s,o,a,e.getLine(a).length)},this.getCommentRegionBlock=function(e,t,n){for(var i=t.search(/\s*$/),s=e.getLength(),o=n,a=/^\s*(?:\/\*|\/\/|--)#?(end)?region\b/,l=1;++no)return new r(o,i,n,t.length)}}.call(o.prototype)})),ace.define("ace/mode/c_cpp",["require","exports","module","ace/lib/oop","ace/mode/text","ace/mode/c_cpp_highlight_rules","ace/mode/matching_brace_outdent","ace/range","ace/mode/behaviour/cstyle","ace/mode/folding/cstyle"],(function(e,t,n){"use strict";var i=e("../lib/oop"),r=e("./text").Mode,s=e("./c_cpp_highlight_rules").c_cppHighlightRules,o=e("./matching_brace_outdent").MatchingBraceOutdent,a=(e("../range").Range,e("./behaviour/cstyle").CstyleBehaviour),l=e("./folding/cstyle").FoldMode,c=function(){this.HighlightRules=s,this.$outdent=new o,this.$behaviour=new a,this.foldingRules=new l};i.inherits(c,r),function(){this.lineCommentStart="//",this.blockComment={start:"/*",end:"*/"},this.getNextLineIndent=function(e,t,n){var i=this.$getIndent(t),r=this.getTokenizer().getLineTokens(t,e),s=r.tokens,o=r.state;if(s.length&&"comment"==s[s.length-1].type)return i;if("start"==e)(a=t.match(/^.*[\{\(\[]\s*$/))&&(i+=n);else if("doc-start"==e){if("start"==o)return"";var a;(a=t.match(/^\s*(\/?)\*/))&&(a[1]&&(i+=" "),i+="* ")}return i},this.checkOutdent=function(e,t,n){return this.$outdent.checkOutdent(t,n)},this.autoOutdent=function(e,t,n){this.$outdent.autoOutdent(t,n)},this.$id="ace/mode/c_cpp"}.call(c.prototype),t.Mode=c})),ace.define("ace/mode/glsl_highlight_rules",["require","exports","module","ace/lib/oop","ace/mode/c_cpp_highlight_rules"],(function(e,t,n){"use strict";var i=e("../lib/oop"),r=e("./c_cpp_highlight_rules").c_cppHighlightRules,s=function(){var e=this.createKeywordMapper({"variable.language":"this",keyword:"layout|attribute|const|uniform|varying|break|continue|do|for|while|if|else|in|out|inout|float|int|void|bool|true|false|lowp|mediump|highp|precision|invariant|discard|return|mat2|mat3|mat4|vec2|vec3|vec4|ivec2|ivec3|ivec4|bvec2|bvec3|bvec4|sampler2D|samplerCube|struct","constant.language":"radians|degrees|sin|cos|tan|asin|acos|atan|pow|exp|log|exp2|log2|sqrt|inversesqrt|abs|sign|floor|ceil|fract|mod|min|max|clamp|mix|step|smoothstep|length|distance|dot|cross|normalize|faceforward|reflect|refract|matrixCompMult|lessThan|lessThanEqual|greaterThan|greaterThanEqual|equal|notEqual|any|all|not|dFdx|dFdy|fwidth|texture2D|texture2DProj|texture2DLod|texture2DProjLod|textureCube|textureCubeLod|gl_MaxVertexAttribs|gl_MaxVertexUniformVectors|gl_MaxVaryingVectors|gl_MaxVertexTextureImageUnits|gl_MaxCombinedTextureImageUnits|gl_MaxTextureImageUnits|gl_MaxFragmentUniformVectors|gl_MaxDrawBuffers|gl_DepthRangeParameters|gl_DepthRange|gl_Position|gl_PointSize|gl_FragCoord|gl_FrontFacing|gl_PointCoord|gl_FragColor|gl_FragData"},"identifier");this.$rules=(new r).$rules,this.$rules.start.forEach((function(t){"function"==typeof t.token&&(t.token=e)}))};i.inherits(s,r),t.glslHighlightRules=s})),ace.define("ace/mode/glsl",["require","exports","module","ace/lib/oop","ace/mode/c_cpp","ace/mode/glsl_highlight_rules","ace/mode/matching_brace_outdent","ace/range","ace/mode/behaviour/cstyle","ace/mode/folding/cstyle"],(function(e,t,n){"use strict";var i=e("../lib/oop"),r=e("./c_cpp").Mode,s=e("./glsl_highlight_rules").glslHighlightRules,o=e("./matching_brace_outdent").MatchingBraceOutdent,a=(e("../range").Range,e("./behaviour/cstyle").CstyleBehaviour),l=e("./folding/cstyle").FoldMode,c=function(){this.HighlightRules=s,this.$outdent=new o,this.$behaviour=new a,this.foldingRules=new l};i.inherits(c,r),function(){this.$id="ace/mode/glsl"}.call(c.prototype),t.Mode=c})),ace.require(["ace/mode/glsl"],(function(t){e&&(e.exports=t)}))},793:(e,t,n)=>{e=n.nmd(e),ace.define("ace/theme/monokai",["require","exports","module","ace/lib/dom"],(function(e,t,n){t.isDark=!0,t.cssClass="ace-monokai",t.cssText=".ace-monokai .ace_gutter {background: #2F3129;color: #8F908A}.ace-monokai .ace_print-margin {width: 1px;background: #555651}.ace-monokai {background-color: #272822;color: #F8F8F2}.ace-monokai .ace_cursor {color: #F8F8F0}.ace-monokai .ace_marker-layer .ace_selection {background: #49483E}.ace-monokai.ace_multiselect .ace_selection.ace_start {box-shadow: 0 0 3px 0px #272822;}.ace-monokai .ace_marker-layer .ace_step {background: rgb(102, 82, 0)}.ace-monokai .ace_marker-layer .ace_bracket {margin: -1px 0 0 -1px;border: 1px solid #49483E}.ace-monokai .ace_marker-layer .ace_active-line {background: #202020}.ace-monokai .ace_gutter-active-line {background-color: #272727}.ace-monokai .ace_marker-layer .ace_selected-word {border: 1px solid #49483E}.ace-monokai .ace_invisible {color: #52524d}.ace-monokai .ace_entity.ace_name.ace_tag,.ace-monokai .ace_keyword,.ace-monokai .ace_meta.ace_tag,.ace-monokai .ace_storage {color: #F92672}.ace-monokai .ace_punctuation,.ace-monokai .ace_punctuation.ace_tag {color: #fff}.ace-monokai .ace_constant.ace_character,.ace-monokai .ace_constant.ace_language,.ace-monokai .ace_constant.ace_numeric,.ace-monokai .ace_constant.ace_other {color: #AE81FF}.ace-monokai .ace_invalid {color: #F8F8F0;background-color: #F92672}.ace-monokai .ace_invalid.ace_deprecated {color: #F8F8F0;background-color: #AE81FF}.ace-monokai .ace_support.ace_constant,.ace-monokai .ace_support.ace_function {color: #66D9EF}.ace-monokai .ace_fold {background-color: #A6E22E;border-color: #F8F8F2}.ace-monokai .ace_storage.ace_type,.ace-monokai .ace_support.ace_class,.ace-monokai .ace_support.ace_type {font-style: italic;color: #66D9EF}.ace-monokai .ace_entity.ace_name.ace_function,.ace-monokai .ace_entity.ace_other,.ace-monokai .ace_entity.ace_other.ace_attribute-name,.ace-monokai .ace_variable {color: #A6E22E}.ace-monokai .ace_variable.ace_parameter {font-style: italic;color: #FD971F}.ace-monokai .ace_string {color: #E6DB74}.ace-monokai .ace_comment {color: #75715E}.ace-monokai .ace_indent-guide {background: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAACCAYAAACZgbYnAAAAEklEQVQImWPQ0FD0ZXBzd/wPAAjVAoxeSgNeAAAAAElFTkSuQmCC) right repeat-y}",e("../lib/dom").importCssString(t.cssText,t.cssClass)})),ace.require(["ace/theme/monokai"],(function(t){e&&(e.exports=t)}))}},t={};function n(i){var r=t[i];if(void 0!==r)return r.exports;var s=t[i]={id:i,loaded:!1,exports:{}};return e[i].call(s.exports,s,s.exports,n),s.loaded=!0,s.exports}return n.amdD=function(){throw new Error("define cannot be used indirect")},n.n=e=>{var t=e&&e.__esModule?()=>e.default:()=>e;return n.d(t,{a:t}),t},n.d=(e,t)=>{for(var i in t)n.o(t,i)&&!n.o(e,i)&&Object.defineProperty(e,i,{enumerable:!0,get:t[i]})},n.o=(e,t)=>Object.prototype.hasOwnProperty.call(e,t),n.r=e=>{"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},n.nmd=e=>(e.paths=[],e.children||(e.children=[]),e),n.nc=void 0,n(819),n(176),n(793),n(655),n(18),n(986)})())); \ No newline at end of file diff --git a/examples/js/three_r120/three.js b/examples/js/three_r120/three.js new file mode 100644 index 0000000..28cb93a --- /dev/null +++ b/examples/js/three_r120/three.js @@ -0,0 +1,51086 @@ +(function (global, factory) { + typeof exports === 'object' && typeof module !== 'undefined' ? factory(exports) : + typeof define === 'function' && define.amd ? define(['exports'], factory) : + (global = typeof globalThis !== 'undefined' ? globalThis : global || self, factory(global.THREE = {})); +}(this, (function (exports) { 'use strict'; + + // Polyfills + + if ( Number.EPSILON === undefined ) { + + Number.EPSILON = Math.pow( 2, - 52 ); + + } + + if ( Number.isInteger === undefined ) { + + // Missing in IE + // https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Number/isInteger + + Number.isInteger = function ( value ) { + + return typeof value === 'number' && isFinite( value ) && Math.floor( value ) === value; + + }; + + } + + // + + if ( Math.sign === undefined ) { + + // https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Math/sign + + Math.sign = function ( x ) { + + return ( x < 0 ) ? - 1 : ( x > 0 ) ? 1 : + x; + + }; + + } + + if ( 'name' in Function.prototype === false ) { + + // Missing in IE + // https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Function/name + + Object.defineProperty( Function.prototype, 'name', { + + get: function () { + + return this.toString().match( /^\s*function\s*([^\(\s]*)/ )[ 1 ]; + + } + + } ); + + } + + if ( Object.assign === undefined ) { + + // Missing in IE + // https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/assign + + Object.assign = function ( target ) { + + if ( target === undefined || target === null ) { + + throw new TypeError( 'Cannot convert undefined or null to object' ); + + } + + var output = Object( target ); + + for ( var index = 1; index < arguments.length; index ++ ) { + + var source = arguments[ index ]; + + if ( source !== undefined && source !== null ) { + + for ( var nextKey in source ) { + + if ( Object.prototype.hasOwnProperty.call( source, nextKey ) ) { + + output[ nextKey ] = source[ nextKey ]; + + } + + } + + } + + } + + return output; + + }; + + } + + var REVISION = '120'; + var MOUSE = { LEFT: 0, MIDDLE: 1, RIGHT: 2, ROTATE: 0, DOLLY: 1, PAN: 2 }; + var TOUCH = { ROTATE: 0, PAN: 1, DOLLY_PAN: 2, DOLLY_ROTATE: 3 }; + var CullFaceNone = 0; + var CullFaceBack = 1; + var CullFaceFront = 2; + var CullFaceFrontBack = 3; + var BasicShadowMap = 0; + var PCFShadowMap = 1; + var PCFSoftShadowMap = 2; + var VSMShadowMap = 3; + var FrontSide = 0; + var BackSide = 1; + var DoubleSide = 2; + var FlatShading = 1; + var SmoothShading = 2; + var NoBlending = 0; + var NormalBlending = 1; + var AdditiveBlending = 2; + var SubtractiveBlending = 3; + var MultiplyBlending = 4; + var CustomBlending = 5; + var AddEquation = 100; + var SubtractEquation = 101; + var ReverseSubtractEquation = 102; + var MinEquation = 103; + var MaxEquation = 104; + var ZeroFactor = 200; + var OneFactor = 201; + var SrcColorFactor = 202; + var OneMinusSrcColorFactor = 203; + var SrcAlphaFactor = 204; + var OneMinusSrcAlphaFactor = 205; + var DstAlphaFactor = 206; + var OneMinusDstAlphaFactor = 207; + var DstColorFactor = 208; + var OneMinusDstColorFactor = 209; + var SrcAlphaSaturateFactor = 210; + var NeverDepth = 0; + var AlwaysDepth = 1; + var LessDepth = 2; + var LessEqualDepth = 3; + var EqualDepth = 4; + var GreaterEqualDepth = 5; + var GreaterDepth = 6; + var NotEqualDepth = 7; + var MultiplyOperation = 0; + var MixOperation = 1; + var AddOperation = 2; + var NoToneMapping = 0; + var LinearToneMapping = 1; + var ReinhardToneMapping = 2; + var CineonToneMapping = 3; + var ACESFilmicToneMapping = 4; + var CustomToneMapping = 5; + + var UVMapping = 300; + var CubeReflectionMapping = 301; + var CubeRefractionMapping = 302; + var EquirectangularReflectionMapping = 303; + var EquirectangularRefractionMapping = 304; + var CubeUVReflectionMapping = 306; + var CubeUVRefractionMapping = 307; + var RepeatWrapping = 1000; + var ClampToEdgeWrapping = 1001; + var MirroredRepeatWrapping = 1002; + var NearestFilter = 1003; + var NearestMipmapNearestFilter = 1004; + var NearestMipMapNearestFilter = 1004; + var NearestMipmapLinearFilter = 1005; + var NearestMipMapLinearFilter = 1005; + var LinearFilter = 1006; + var LinearMipmapNearestFilter = 1007; + var LinearMipMapNearestFilter = 1007; + var LinearMipmapLinearFilter = 1008; + var LinearMipMapLinearFilter = 1008; + var UnsignedByteType = 1009; + var ByteType = 1010; + var ShortType = 1011; + var UnsignedShortType = 1012; + var IntType = 1013; + var UnsignedIntType = 1014; + var FloatType = 1015; + var HalfFloatType = 1016; + var UnsignedShort4444Type = 1017; + var UnsignedShort5551Type = 1018; + var UnsignedShort565Type = 1019; + var UnsignedInt248Type = 1020; + var AlphaFormat = 1021; + var RGBFormat = 1022; + var RGBAFormat = 1023; + var LuminanceFormat = 1024; + var LuminanceAlphaFormat = 1025; + var RGBEFormat = RGBAFormat; + var DepthFormat = 1026; + var DepthStencilFormat = 1027; + var RedFormat = 1028; + var RedIntegerFormat = 1029; + var RGFormat = 1030; + var RGIntegerFormat = 1031; + var RGBIntegerFormat = 1032; + var RGBAIntegerFormat = 1033; + + var RGB_S3TC_DXT1_Format = 33776; + var RGBA_S3TC_DXT1_Format = 33777; + var RGBA_S3TC_DXT3_Format = 33778; + var RGBA_S3TC_DXT5_Format = 33779; + var RGB_PVRTC_4BPPV1_Format = 35840; + var RGB_PVRTC_2BPPV1_Format = 35841; + var RGBA_PVRTC_4BPPV1_Format = 35842; + var RGBA_PVRTC_2BPPV1_Format = 35843; + var RGB_ETC1_Format = 36196; + var RGB_ETC2_Format = 37492; + var RGBA_ETC2_EAC_Format = 37496; + var RGBA_ASTC_4x4_Format = 37808; + var RGBA_ASTC_5x4_Format = 37809; + var RGBA_ASTC_5x5_Format = 37810; + var RGBA_ASTC_6x5_Format = 37811; + var RGBA_ASTC_6x6_Format = 37812; + var RGBA_ASTC_8x5_Format = 37813; + var RGBA_ASTC_8x6_Format = 37814; + var RGBA_ASTC_8x8_Format = 37815; + var RGBA_ASTC_10x5_Format = 37816; + var RGBA_ASTC_10x6_Format = 37817; + var RGBA_ASTC_10x8_Format = 37818; + var RGBA_ASTC_10x10_Format = 37819; + var RGBA_ASTC_12x10_Format = 37820; + var RGBA_ASTC_12x12_Format = 37821; + var RGBA_BPTC_Format = 36492; + var SRGB8_ALPHA8_ASTC_4x4_Format = 37840; + var SRGB8_ALPHA8_ASTC_5x4_Format = 37841; + var SRGB8_ALPHA8_ASTC_5x5_Format = 37842; + var SRGB8_ALPHA8_ASTC_6x5_Format = 37843; + var SRGB8_ALPHA8_ASTC_6x6_Format = 37844; + var SRGB8_ALPHA8_ASTC_8x5_Format = 37845; + var SRGB8_ALPHA8_ASTC_8x6_Format = 37846; + var SRGB8_ALPHA8_ASTC_8x8_Format = 37847; + var SRGB8_ALPHA8_ASTC_10x5_Format = 37848; + var SRGB8_ALPHA8_ASTC_10x6_Format = 37849; + var SRGB8_ALPHA8_ASTC_10x8_Format = 37850; + var SRGB8_ALPHA8_ASTC_10x10_Format = 37851; + var SRGB8_ALPHA8_ASTC_12x10_Format = 37852; + var SRGB8_ALPHA8_ASTC_12x12_Format = 37853; + var LoopOnce = 2200; + var LoopRepeat = 2201; + var LoopPingPong = 2202; + var InterpolateDiscrete = 2300; + var InterpolateLinear = 2301; + var InterpolateSmooth = 2302; + var ZeroCurvatureEnding = 2400; + var ZeroSlopeEnding = 2401; + var WrapAroundEnding = 2402; + var NormalAnimationBlendMode = 2500; + var AdditiveAnimationBlendMode = 2501; + var TrianglesDrawMode = 0; + var TriangleStripDrawMode = 1; + var TriangleFanDrawMode = 2; + var LinearEncoding = 3000; + var sRGBEncoding = 3001; + var GammaEncoding = 3007; + var RGBEEncoding = 3002; + var LogLuvEncoding = 3003; + var RGBM7Encoding = 3004; + var RGBM16Encoding = 3005; + var RGBDEncoding = 3006; + var BasicDepthPacking = 3200; + var RGBADepthPacking = 3201; + var TangentSpaceNormalMap = 0; + var ObjectSpaceNormalMap = 1; + + var ZeroStencilOp = 0; + var KeepStencilOp = 7680; + var ReplaceStencilOp = 7681; + var IncrementStencilOp = 7682; + var DecrementStencilOp = 7683; + var IncrementWrapStencilOp = 34055; + var DecrementWrapStencilOp = 34056; + var InvertStencilOp = 5386; + + var NeverStencilFunc = 512; + var LessStencilFunc = 513; + var EqualStencilFunc = 514; + var LessEqualStencilFunc = 515; + var GreaterStencilFunc = 516; + var NotEqualStencilFunc = 517; + var GreaterEqualStencilFunc = 518; + var AlwaysStencilFunc = 519; + + var StaticDrawUsage = 35044; + var DynamicDrawUsage = 35048; + var StreamDrawUsage = 35040; + var StaticReadUsage = 35045; + var DynamicReadUsage = 35049; + var StreamReadUsage = 35041; + var StaticCopyUsage = 35046; + var DynamicCopyUsage = 35050; + var StreamCopyUsage = 35042; + + var GLSL1 = "100"; + var GLSL3 = "300 es"; + + /** + * https://github.com/mrdoob/eventdispatcher.js/ + */ + + function EventDispatcher() {} + + Object.assign( EventDispatcher.prototype, { + + addEventListener: function ( type, listener ) { + + if ( this._listeners === undefined ) { this._listeners = {}; } + + var listeners = this._listeners; + + if ( listeners[ type ] === undefined ) { + + listeners[ type ] = []; + + } + + if ( listeners[ type ].indexOf( listener ) === - 1 ) { + + listeners[ type ].push( listener ); + + } + + }, + + hasEventListener: function ( type, listener ) { + + if ( this._listeners === undefined ) { return false; } + + var listeners = this._listeners; + + return listeners[ type ] !== undefined && listeners[ type ].indexOf( listener ) !== - 1; + + }, + + removeEventListener: function ( type, listener ) { + + if ( this._listeners === undefined ) { return; } + + var listeners = this._listeners; + var listenerArray = listeners[ type ]; + + if ( listenerArray !== undefined ) { + + var index = listenerArray.indexOf( listener ); + + if ( index !== - 1 ) { + + listenerArray.splice( index, 1 ); + + } + + } + + }, + + dispatchEvent: function ( event ) { + + if ( this._listeners === undefined ) { return; } + + var listeners = this._listeners; + var listenerArray = listeners[ event.type ]; + + if ( listenerArray !== undefined ) { + + event.target = this; + + // Make a copy, in case listeners are removed while iterating. + var array = listenerArray.slice( 0 ); + + for ( var i = 0, l = array.length; i < l; i ++ ) { + + array[ i ].call( this, event ); + + } + + } + + } + + } ); + + var _lut = []; + + for ( var i = 0; i < 256; i ++ ) { + + _lut[ i ] = ( i < 16 ? '0' : '' ) + ( i ).toString( 16 ); + + } + + var _seed = 1234567; + + var MathUtils = { + + DEG2RAD: Math.PI / 180, + RAD2DEG: 180 / Math.PI, + + generateUUID: function () { + + // http://stackoverflow.com/questions/105034/how-to-create-a-guid-uuid-in-javascript/21963136#21963136 + + var d0 = Math.random() * 0xffffffff | 0; + var d1 = Math.random() * 0xffffffff | 0; + var d2 = Math.random() * 0xffffffff | 0; + var d3 = Math.random() * 0xffffffff | 0; + var uuid = _lut[ d0 & 0xff ] + _lut[ d0 >> 8 & 0xff ] + _lut[ d0 >> 16 & 0xff ] + _lut[ d0 >> 24 & 0xff ] + '-' + + _lut[ d1 & 0xff ] + _lut[ d1 >> 8 & 0xff ] + '-' + _lut[ d1 >> 16 & 0x0f | 0x40 ] + _lut[ d1 >> 24 & 0xff ] + '-' + + _lut[ d2 & 0x3f | 0x80 ] + _lut[ d2 >> 8 & 0xff ] + '-' + _lut[ d2 >> 16 & 0xff ] + _lut[ d2 >> 24 & 0xff ] + + _lut[ d3 & 0xff ] + _lut[ d3 >> 8 & 0xff ] + _lut[ d3 >> 16 & 0xff ] + _lut[ d3 >> 24 & 0xff ]; + + // .toUpperCase() here flattens concatenated strings to save heap memory space. + return uuid.toUpperCase(); + + }, + + clamp: function ( value, min, max ) { + + return Math.max( min, Math.min( max, value ) ); + + }, + + // compute euclidian modulo of m % n + // https://en.wikipedia.org/wiki/Modulo_operation + + euclideanModulo: function ( n, m ) { + + return ( ( n % m ) + m ) % m; + + }, + + // Linear mapping from range to range + + mapLinear: function ( x, a1, a2, b1, b2 ) { + + return b1 + ( x - a1 ) * ( b2 - b1 ) / ( a2 - a1 ); + + }, + + // https://en.wikipedia.org/wiki/Linear_interpolation + + lerp: function ( x, y, t ) { + + return ( 1 - t ) * x + t * y; + + }, + + // http://en.wikipedia.org/wiki/Smoothstep + + smoothstep: function ( x, min, max ) { + + if ( x <= min ) { return 0; } + if ( x >= max ) { return 1; } + + x = ( x - min ) / ( max - min ); + + return x * x * ( 3 - 2 * x ); + + }, + + smootherstep: function ( x, min, max ) { + + if ( x <= min ) { return 0; } + if ( x >= max ) { return 1; } + + x = ( x - min ) / ( max - min ); + + return x * x * x * ( x * ( x * 6 - 15 ) + 10 ); + + }, + + // Random integer from interval + + randInt: function ( low, high ) { + + return low + Math.floor( Math.random() * ( high - low + 1 ) ); + + }, + + // Random float from interval + + randFloat: function ( low, high ) { + + return low + Math.random() * ( high - low ); + + }, + + // Random float from <-range/2, range/2> interval + + randFloatSpread: function ( range ) { + + return range * ( 0.5 - Math.random() ); + + }, + + // Deterministic pseudo-random float in the interval [ 0, 1 ] + + seededRandom: function ( s ) { + + if ( s !== undefined ) { _seed = s % 2147483647; } + + // Park-Miller algorithm + + _seed = _seed * 16807 % 2147483647; + + return ( _seed - 1 ) / 2147483646; + + }, + + degToRad: function ( degrees ) { + + return degrees * MathUtils.DEG2RAD; + + }, + + radToDeg: function ( radians ) { + + return radians * MathUtils.RAD2DEG; + + }, + + isPowerOfTwo: function ( value ) { + + return ( value & ( value - 1 ) ) === 0 && value !== 0; + + }, + + ceilPowerOfTwo: function ( value ) { + + return Math.pow( 2, Math.ceil( Math.log( value ) / Math.LN2 ) ); + + }, + + floorPowerOfTwo: function ( value ) { + + return Math.pow( 2, Math.floor( Math.log( value ) / Math.LN2 ) ); + + }, + + setQuaternionFromProperEuler: function ( q, a, b, c, order ) { + + // Intrinsic Proper Euler Angles - see https://en.wikipedia.org/wiki/Euler_angles + + // rotations are applied to the axes in the order specified by 'order' + // rotation by angle 'a' is applied first, then by angle 'b', then by angle 'c' + // angles are in radians + + var cos = Math.cos; + var sin = Math.sin; + + var c2 = cos( b / 2 ); + var s2 = sin( b / 2 ); + + var c13 = cos( ( a + c ) / 2 ); + var s13 = sin( ( a + c ) / 2 ); + + var c1_3 = cos( ( a - c ) / 2 ); + var s1_3 = sin( ( a - c ) / 2 ); + + var c3_1 = cos( ( c - a ) / 2 ); + var s3_1 = sin( ( c - a ) / 2 ); + + switch ( order ) { + + case 'XYX': + q.set( c2 * s13, s2 * c1_3, s2 * s1_3, c2 * c13 ); + break; + + case 'YZY': + q.set( s2 * s1_3, c2 * s13, s2 * c1_3, c2 * c13 ); + break; + + case 'ZXZ': + q.set( s2 * c1_3, s2 * s1_3, c2 * s13, c2 * c13 ); + break; + + case 'XZX': + q.set( c2 * s13, s2 * s3_1, s2 * c3_1, c2 * c13 ); + break; + + case 'YXY': + q.set( s2 * c3_1, c2 * s13, s2 * s3_1, c2 * c13 ); + break; + + case 'ZYZ': + q.set( s2 * s3_1, s2 * c3_1, c2 * s13, c2 * c13 ); + break; + + default: + console.warn( 'THREE.MathUtils: .setQuaternionFromProperEuler() encountered an unknown order: ' + order ); + + } + + } + + }; + + var Vector2 = function Vector2( x, y ) { + if ( x === void 0 ) x = 0; + if ( y === void 0 ) y = 0; + + + Object.defineProperty( this, 'isVector2', { value: true } ); + + this.x = x; + this.y = y; + + }; + + var prototypeAccessors = { width: { configurable: true },height: { configurable: true } }; + + prototypeAccessors.width.get = function () { + + return this.x; + + }; + + prototypeAccessors.width.set = function ( value ) { + + this.x = value; + + }; + + prototypeAccessors.height.get = function () { + + return this.y; + + }; + + prototypeAccessors.height.set = function ( value ) { + + this.y = value; + + }; + + Vector2.prototype.set = function set ( x, y ) { + + this.x = x; + this.y = y; + + return this; + + }; + + Vector2.prototype.setScalar = function setScalar ( scalar ) { + + this.x = scalar; + this.y = scalar; + + return this; + + }; + + Vector2.prototype.setX = function setX ( x ) { + + this.x = x; + + return this; + + }; + + Vector2.prototype.setY = function setY ( y ) { + + this.y = y; + + return this; + + }; + + Vector2.prototype.setComponent = function setComponent ( index, value ) { + + switch ( index ) { + + case 0: this.x = value; break; + case 1: this.y = value; break; + default: throw new Error( 'index is out of range: ' + index ); + + } + + return this; + + }; + + Vector2.prototype.getComponent = function getComponent ( index ) { + + switch ( index ) { + + case 0: return this.x; + case 1: return this.y; + default: throw new Error( 'index is out of range: ' + index ); + + } + + }; + + Vector2.prototype.clone = function clone () { + + return new this.constructor( this.x, this.y ); + + }; + + Vector2.prototype.copy = function copy ( v ) { + + this.x = v.x; + this.y = v.y; + + return this; + + }; + + Vector2.prototype.add = function add ( v, w ) { + + if ( w !== undefined ) { + + console.warn( 'THREE.Vector2: .add() now only accepts one argument. Use .addVectors( a, b ) instead.' ); + return this.addVectors( v, w ); + + } + + this.x += v.x; + this.y += v.y; + + return this; + + }; + + Vector2.prototype.addScalar = function addScalar ( s ) { + + this.x += s; + this.y += s; + + return this; + + }; + + Vector2.prototype.addVectors = function addVectors ( a, b ) { + + this.x = a.x + b.x; + this.y = a.y + b.y; + + return this; + + }; + + Vector2.prototype.addScaledVector = function addScaledVector ( v, s ) { + + this.x += v.x * s; + this.y += v.y * s; + + return this; + + }; + + Vector2.prototype.sub = function sub ( v, w ) { + + if ( w !== undefined ) { + + console.warn( 'THREE.Vector2: .sub() now only accepts one argument. Use .subVectors( a, b ) instead.' ); + return this.subVectors( v, w ); + + } + + this.x -= v.x; + this.y -= v.y; + + return this; + + }; + + Vector2.prototype.subScalar = function subScalar ( s ) { + + this.x -= s; + this.y -= s; + + return this; + + }; + + Vector2.prototype.subVectors = function subVectors ( a, b ) { + + this.x = a.x - b.x; + this.y = a.y - b.y; + + return this; + + }; + + Vector2.prototype.multiply = function multiply ( v ) { + + this.x *= v.x; + this.y *= v.y; + + return this; + + }; + + Vector2.prototype.multiplyScalar = function multiplyScalar ( scalar ) { + + this.x *= scalar; + this.y *= scalar; + + return this; + + }; + + Vector2.prototype.divide = function divide ( v ) { + + this.x /= v.x; + this.y /= v.y; + + return this; + + }; + + Vector2.prototype.divideScalar = function divideScalar ( scalar ) { + + return this.multiplyScalar( 1 / scalar ); + + }; + + Vector2.prototype.applyMatrix3 = function applyMatrix3 ( m ) { + + var x = this.x, y = this.y; + var e = m.elements; + + this.x = e[ 0 ] * x + e[ 3 ] * y + e[ 6 ]; + this.y = e[ 1 ] * x + e[ 4 ] * y + e[ 7 ]; + + return this; + + }; + + Vector2.prototype.min = function min ( v ) { + + this.x = Math.min( this.x, v.x ); + this.y = Math.min( this.y, v.y ); + + return this; + + }; + + Vector2.prototype.max = function max ( v ) { + + this.x = Math.max( this.x, v.x ); + this.y = Math.max( this.y, v.y ); + + return this; + + }; + + Vector2.prototype.clamp = function clamp ( min, max ) { + + // assumes min < max, componentwise + + this.x = Math.max( min.x, Math.min( max.x, this.x ) ); + this.y = Math.max( min.y, Math.min( max.y, this.y ) ); + + return this; + + }; + + Vector2.prototype.clampScalar = function clampScalar ( minVal, maxVal ) { + + this.x = Math.max( minVal, Math.min( maxVal, this.x ) ); + this.y = Math.max( minVal, Math.min( maxVal, this.y ) ); + + return this; + + }; + + Vector2.prototype.clampLength = function clampLength ( min, max ) { + + var length = this.length(); + + return this.divideScalar( length || 1 ).multiplyScalar( Math.max( min, Math.min( max, length ) ) ); + + }; + + Vector2.prototype.floor = function floor () { + + this.x = Math.floor( this.x ); + this.y = Math.floor( this.y ); + + return this; + + }; + + Vector2.prototype.ceil = function ceil () { + + this.x = Math.ceil( this.x ); + this.y = Math.ceil( this.y ); + + return this; + + }; + + Vector2.prototype.round = function round () { + + this.x = Math.round( this.x ); + this.y = Math.round( this.y ); + + return this; + + }; + + Vector2.prototype.roundToZero = function roundToZero () { + + this.x = ( this.x < 0 ) ? Math.ceil( this.x ) : Math.floor( this.x ); + this.y = ( this.y < 0 ) ? Math.ceil( this.y ) : Math.floor( this.y ); + + return this; + + }; + + Vector2.prototype.negate = function negate () { + + this.x = - this.x; + this.y = - this.y; + + return this; + + }; + + Vector2.prototype.dot = function dot ( v ) { + + return this.x * v.x + this.y * v.y; + + }; + + Vector2.prototype.cross = function cross ( v ) { + + return this.x * v.y - this.y * v.x; + + }; + + Vector2.prototype.lengthSq = function lengthSq () { + + return this.x * this.x + this.y * this.y; + + }; + + Vector2.prototype.length = function length () { + + return Math.sqrt( this.x * this.x + this.y * this.y ); + + }; + + Vector2.prototype.manhattanLength = function manhattanLength () { + + return Math.abs( this.x ) + Math.abs( this.y ); + + }; + + Vector2.prototype.normalize = function normalize () { + + return this.divideScalar( this.length() || 1 ); + + }; + + Vector2.prototype.angle = function angle () { + + // computes the angle in radians with respect to the positive x-axis + + var angle = Math.atan2( - this.y, - this.x ) + Math.PI; + + return angle; + + }; + + Vector2.prototype.distanceTo = function distanceTo ( v ) { + + return Math.sqrt( this.distanceToSquared( v ) ); + + }; + + Vector2.prototype.distanceToSquared = function distanceToSquared ( v ) { + + var dx = this.x - v.x, dy = this.y - v.y; + return dx * dx + dy * dy; + + }; + + Vector2.prototype.manhattanDistanceTo = function manhattanDistanceTo ( v ) { + + return Math.abs( this.x - v.x ) + Math.abs( this.y - v.y ); + + }; + + Vector2.prototype.setLength = function setLength ( length ) { + + return this.normalize().multiplyScalar( length ); + + }; + + Vector2.prototype.lerp = function lerp ( v, alpha ) { + + this.x += ( v.x - this.x ) * alpha; + this.y += ( v.y - this.y ) * alpha; + + return this; + + }; + + Vector2.prototype.lerpVectors = function lerpVectors ( v1, v2, alpha ) { + + this.x = v1.x + ( v2.x - v1.x ) * alpha; + this.y = v1.y + ( v2.y - v1.y ) * alpha; + + return this; + + }; + + Vector2.prototype.equals = function equals ( v ) { + + return ( ( v.x === this.x ) && ( v.y === this.y ) ); + + }; + + Vector2.prototype.fromArray = function fromArray ( array, offset ) { + + if ( offset === undefined ) { offset = 0; } + + this.x = array[ offset ]; + this.y = array[ offset + 1 ]; + + return this; + + }; + + Vector2.prototype.toArray = function toArray ( array, offset ) { + + if ( array === undefined ) { array = []; } + if ( offset === undefined ) { offset = 0; } + + array[ offset ] = this.x; + array[ offset + 1 ] = this.y; + + return array; + + }; + + Vector2.prototype.fromBufferAttribute = function fromBufferAttribute ( attribute, index, offset ) { + + if ( offset !== undefined ) { + + console.warn( 'THREE.Vector2: offset has been removed from .fromBufferAttribute().' ); + + } + + this.x = attribute.getX( index ); + this.y = attribute.getY( index ); + + return this; + + }; + + Vector2.prototype.rotateAround = function rotateAround ( center, angle ) { + + var c = Math.cos( angle ), s = Math.sin( angle ); + + var x = this.x - center.x; + var y = this.y - center.y; + + this.x = x * c - y * s + center.x; + this.y = x * s + y * c + center.y; + + return this; + + }; + + Vector2.prototype.random = function random () { + + this.x = Math.random(); + this.y = Math.random(); + + return this; + + }; + + Object.defineProperties( Vector2.prototype, prototypeAccessors ); + + var Matrix3 = function Matrix3() { + + Object.defineProperty( this, 'isMatrix3', { value: true } ); + + this.elements = [ + + 1, 0, 0, + 0, 1, 0, + 0, 0, 1 + + ]; + + if ( arguments.length > 0 ) { + + console.error( 'THREE.Matrix3: the constructor no longer reads arguments. use .set() instead.' ); + + } + + }; + + Matrix3.prototype.set = function set ( n11, n12, n13, n21, n22, n23, n31, n32, n33 ) { + + var te = this.elements; + + te[ 0 ] = n11; te[ 1 ] = n21; te[ 2 ] = n31; + te[ 3 ] = n12; te[ 4 ] = n22; te[ 5 ] = n32; + te[ 6 ] = n13; te[ 7 ] = n23; te[ 8 ] = n33; + + return this; + + }; + + Matrix3.prototype.identity = function identity () { + + this.set( + + 1, 0, 0, + 0, 1, 0, + 0, 0, 1 + + ); + + return this; + + }; + + Matrix3.prototype.clone = function clone () { + + return new this.constructor().fromArray( this.elements ); + + }; + + Matrix3.prototype.copy = function copy ( m ) { + + var te = this.elements; + var me = m.elements; + + te[ 0 ] = me[ 0 ]; te[ 1 ] = me[ 1 ]; te[ 2 ] = me[ 2 ]; + te[ 3 ] = me[ 3 ]; te[ 4 ] = me[ 4 ]; te[ 5 ] = me[ 5 ]; + te[ 6 ] = me[ 6 ]; te[ 7 ] = me[ 7 ]; te[ 8 ] = me[ 8 ]; + + return this; + + }; + + Matrix3.prototype.extractBasis = function extractBasis ( xAxis, yAxis, zAxis ) { + + xAxis.setFromMatrix3Column( this, 0 ); + yAxis.setFromMatrix3Column( this, 1 ); + zAxis.setFromMatrix3Column( this, 2 ); + + return this; + + }; + + Matrix3.prototype.setFromMatrix4 = function setFromMatrix4 ( m ) { + + var me = m.elements; + + this.set( + + me[ 0 ], me[ 4 ], me[ 8 ], + me[ 1 ], me[ 5 ], me[ 9 ], + me[ 2 ], me[ 6 ], me[ 10 ] + + ); + + return this; + + }; + + Matrix3.prototype.multiply = function multiply ( m ) { + + return this.multiplyMatrices( this, m ); + + }; + + Matrix3.prototype.premultiply = function premultiply ( m ) { + + return this.multiplyMatrices( m, this ); + + }; + + Matrix3.prototype.multiplyMatrices = function multiplyMatrices ( a, b ) { + + var ae = a.elements; + var be = b.elements; + var te = this.elements; + + var a11 = ae[ 0 ], a12 = ae[ 3 ], a13 = ae[ 6 ]; + var a21 = ae[ 1 ], a22 = ae[ 4 ], a23 = ae[ 7 ]; + var a31 = ae[ 2 ], a32 = ae[ 5 ], a33 = ae[ 8 ]; + + var b11 = be[ 0 ], b12 = be[ 3 ], b13 = be[ 6 ]; + var b21 = be[ 1 ], b22 = be[ 4 ], b23 = be[ 7 ]; + var b31 = be[ 2 ], b32 = be[ 5 ], b33 = be[ 8 ]; + + te[ 0 ] = a11 * b11 + a12 * b21 + a13 * b31; + te[ 3 ] = a11 * b12 + a12 * b22 + a13 * b32; + te[ 6 ] = a11 * b13 + a12 * b23 + a13 * b33; + + te[ 1 ] = a21 * b11 + a22 * b21 + a23 * b31; + te[ 4 ] = a21 * b12 + a22 * b22 + a23 * b32; + te[ 7 ] = a21 * b13 + a22 * b23 + a23 * b33; + + te[ 2 ] = a31 * b11 + a32 * b21 + a33 * b31; + te[ 5 ] = a31 * b12 + a32 * b22 + a33 * b32; + te[ 8 ] = a31 * b13 + a32 * b23 + a33 * b33; + + return this; + + }; + + Matrix3.prototype.multiplyScalar = function multiplyScalar ( s ) { + + var te = this.elements; + + te[ 0 ] *= s; te[ 3 ] *= s; te[ 6 ] *= s; + te[ 1 ] *= s; te[ 4 ] *= s; te[ 7 ] *= s; + te[ 2 ] *= s; te[ 5 ] *= s; te[ 8 ] *= s; + + return this; + + }; + + Matrix3.prototype.determinant = function determinant () { + + var te = this.elements; + + var a = te[ 0 ], b = te[ 1 ], c = te[ 2 ], + d = te[ 3 ], e = te[ 4 ], f = te[ 5 ], + g = te[ 6 ], h = te[ 7 ], i = te[ 8 ]; + + return a * e * i - a * f * h - b * d * i + b * f * g + c * d * h - c * e * g; + + }; + + Matrix3.prototype.getInverse = function getInverse ( matrix, throwOnDegenerate ) { + + if ( throwOnDegenerate !== undefined ) { + + console.warn( "THREE.Matrix3: .getInverse() can no longer be configured to throw on degenerate." ); + + } + + var me = matrix.elements, + te = this.elements, + + n11 = me[ 0 ], n21 = me[ 1 ], n31 = me[ 2 ], + n12 = me[ 3 ], n22 = me[ 4 ], n32 = me[ 5 ], + n13 = me[ 6 ], n23 = me[ 7 ], n33 = me[ 8 ], + + t11 = n33 * n22 - n32 * n23, + t12 = n32 * n13 - n33 * n12, + t13 = n23 * n12 - n22 * n13, + + det = n11 * t11 + n21 * t12 + n31 * t13; + + if ( det === 0 ) { return this.set( 0, 0, 0, 0, 0, 0, 0, 0, 0 ); } + + var detInv = 1 / det; + + te[ 0 ] = t11 * detInv; + te[ 1 ] = ( n31 * n23 - n33 * n21 ) * detInv; + te[ 2 ] = ( n32 * n21 - n31 * n22 ) * detInv; + + te[ 3 ] = t12 * detInv; + te[ 4 ] = ( n33 * n11 - n31 * n13 ) * detInv; + te[ 5 ] = ( n31 * n12 - n32 * n11 ) * detInv; + + te[ 6 ] = t13 * detInv; + te[ 7 ] = ( n21 * n13 - n23 * n11 ) * detInv; + te[ 8 ] = ( n22 * n11 - n21 * n12 ) * detInv; + + return this; + + }; + + Matrix3.prototype.transpose = function transpose () { + + var tmp; + var m = this.elements; + + tmp = m[ 1 ]; m[ 1 ] = m[ 3 ]; m[ 3 ] = tmp; + tmp = m[ 2 ]; m[ 2 ] = m[ 6 ]; m[ 6 ] = tmp; + tmp = m[ 5 ]; m[ 5 ] = m[ 7 ]; m[ 7 ] = tmp; + + return this; + + }; + + Matrix3.prototype.getNormalMatrix = function getNormalMatrix ( matrix4 ) { + + return this.setFromMatrix4( matrix4 ).getInverse( this ).transpose(); + + }; + + Matrix3.prototype.transposeIntoArray = function transposeIntoArray ( r ) { + + var m = this.elements; + + r[ 0 ] = m[ 0 ]; + r[ 1 ] = m[ 3 ]; + r[ 2 ] = m[ 6 ]; + r[ 3 ] = m[ 1 ]; + r[ 4 ] = m[ 4 ]; + r[ 5 ] = m[ 7 ]; + r[ 6 ] = m[ 2 ]; + r[ 7 ] = m[ 5 ]; + r[ 8 ] = m[ 8 ]; + + return this; + + }; + + Matrix3.prototype.setUvTransform = function setUvTransform ( tx, ty, sx, sy, rotation, cx, cy ) { + + var c = Math.cos( rotation ); + var s = Math.sin( rotation ); + + this.set( + sx * c, sx * s, - sx * ( c * cx + s * cy ) + cx + tx, + - sy * s, sy * c, - sy * ( - s * cx + c * cy ) + cy + ty, + 0, 0, 1 + ); + + }; + + Matrix3.prototype.scale = function scale ( sx, sy ) { + + var te = this.elements; + + te[ 0 ] *= sx; te[ 3 ] *= sx; te[ 6 ] *= sx; + te[ 1 ] *= sy; te[ 4 ] *= sy; te[ 7 ] *= sy; + + return this; + + }; + + Matrix3.prototype.rotate = function rotate ( theta ) { + + var c = Math.cos( theta ); + var s = Math.sin( theta ); + + var te = this.elements; + + var a11 = te[ 0 ], a12 = te[ 3 ], a13 = te[ 6 ]; + var a21 = te[ 1 ], a22 = te[ 4 ], a23 = te[ 7 ]; + + te[ 0 ] = c * a11 + s * a21; + te[ 3 ] = c * a12 + s * a22; + te[ 6 ] = c * a13 + s * a23; + + te[ 1 ] = - s * a11 + c * a21; + te[ 4 ] = - s * a12 + c * a22; + te[ 7 ] = - s * a13 + c * a23; + + return this; + + }; + + Matrix3.prototype.translate = function translate ( tx, ty ) { + + var te = this.elements; + + te[ 0 ] += tx * te[ 2 ]; te[ 3 ] += tx * te[ 5 ]; te[ 6 ] += tx * te[ 8 ]; + te[ 1 ] += ty * te[ 2 ]; te[ 4 ] += ty * te[ 5 ]; te[ 7 ] += ty * te[ 8 ]; + + return this; + + }; + + Matrix3.prototype.equals = function equals ( matrix ) { + + var te = this.elements; + var me = matrix.elements; + + for ( var i = 0; i < 9; i ++ ) { + + if ( te[ i ] !== me[ i ] ) { return false; } + + } + + return true; + + }; + + Matrix3.prototype.fromArray = function fromArray ( array, offset ) { + + if ( offset === undefined ) { offset = 0; } + + for ( var i = 0; i < 9; i ++ ) { + + this.elements[ i ] = array[ i + offset ]; + + } + + return this; + + }; + + Matrix3.prototype.toArray = function toArray ( array, offset ) { + + if ( array === undefined ) { array = []; } + if ( offset === undefined ) { offset = 0; } + + var te = this.elements; + + array[ offset ] = te[ 0 ]; + array[ offset + 1 ] = te[ 1 ]; + array[ offset + 2 ] = te[ 2 ]; + + array[ offset + 3 ] = te[ 3 ]; + array[ offset + 4 ] = te[ 4 ]; + array[ offset + 5 ] = te[ 5 ]; + + array[ offset + 6 ] = te[ 6 ]; + array[ offset + 7 ] = te[ 7 ]; + array[ offset + 8 ] = te[ 8 ]; + + return array; + + }; + + var _canvas; + + var ImageUtils = { + + getDataURL: function ( image ) { + + if ( /^data:/i.test( image.src ) ) { + + return image.src; + + } + + if ( typeof HTMLCanvasElement == 'undefined' ) { + + return image.src; + + } + + var canvas; + + if ( image instanceof HTMLCanvasElement ) { + + canvas = image; + + } else { + + if ( _canvas === undefined ) { _canvas = document.createElementNS( 'http://www.w3.org/1999/xhtml', 'canvas' ); } + + _canvas.width = image.width; + _canvas.height = image.height; + + var context = _canvas.getContext( '2d' ); + + if ( image instanceof ImageData ) { + + context.putImageData( image, 0, 0 ); + + } else { + + context.drawImage( image, 0, 0, image.width, image.height ); + + } + + canvas = _canvas; + + } + + if ( canvas.width > 2048 || canvas.height > 2048 ) { + + return canvas.toDataURL( 'image/jpeg', 0.6 ); + + } else { + + return canvas.toDataURL( 'image/png' ); + + } + + } + + }; + + var textureId = 0; + + function Texture( image, mapping, wrapS, wrapT, magFilter, minFilter, format, type, anisotropy, encoding ) { + + Object.defineProperty( this, 'id', { value: textureId ++ } ); + + this.uuid = MathUtils.generateUUID(); + + this.name = ''; + + this.image = image !== undefined ? image : Texture.DEFAULT_IMAGE; + this.mipmaps = []; + + this.mapping = mapping !== undefined ? mapping : Texture.DEFAULT_MAPPING; + + this.wrapS = wrapS !== undefined ? wrapS : ClampToEdgeWrapping; + this.wrapT = wrapT !== undefined ? wrapT : ClampToEdgeWrapping; + + this.magFilter = magFilter !== undefined ? magFilter : LinearFilter; + this.minFilter = minFilter !== undefined ? minFilter : LinearMipmapLinearFilter; + + this.anisotropy = anisotropy !== undefined ? anisotropy : 1; + + this.format = format !== undefined ? format : RGBAFormat; + this.internalFormat = null; + this.type = type !== undefined ? type : UnsignedByteType; + + this.offset = new Vector2( 0, 0 ); + this.repeat = new Vector2( 1, 1 ); + this.center = new Vector2( 0, 0 ); + this.rotation = 0; + + this.matrixAutoUpdate = true; + this.matrix = new Matrix3(); + + this.generateMipmaps = true; + this.premultiplyAlpha = false; + this.flipY = true; + this.unpackAlignment = 4; // valid values: 1, 2, 4, 8 (see http://www.khronos.org/opengles/sdk/docs/man/xhtml/glPixelStorei.xml) + + // Values of encoding !== THREE.LinearEncoding only supported on map, envMap and emissiveMap. + // + // Also changing the encoding after already used by a Material will not automatically make the Material + // update. You need to explicitly call Material.needsUpdate to trigger it to recompile. + this.encoding = encoding !== undefined ? encoding : LinearEncoding; + + this.version = 0; + this.onUpdate = null; + + } + + Texture.DEFAULT_IMAGE = undefined; + Texture.DEFAULT_MAPPING = UVMapping; + + Texture.prototype = Object.assign( Object.create( EventDispatcher.prototype ), { + + constructor: Texture, + + isTexture: true, + + updateMatrix: function () { + + this.matrix.setUvTransform( this.offset.x, this.offset.y, this.repeat.x, this.repeat.y, this.rotation, this.center.x, this.center.y ); + + }, + + clone: function () { + + return new this.constructor().copy( this ); + + }, + + copy: function ( source ) { + + this.name = source.name; + + this.image = source.image; + this.mipmaps = source.mipmaps.slice( 0 ); + + this.mapping = source.mapping; + + this.wrapS = source.wrapS; + this.wrapT = source.wrapT; + + this.magFilter = source.magFilter; + this.minFilter = source.minFilter; + + this.anisotropy = source.anisotropy; + + this.format = source.format; + this.internalFormat = source.internalFormat; + this.type = source.type; + + this.offset.copy( source.offset ); + this.repeat.copy( source.repeat ); + this.center.copy( source.center ); + this.rotation = source.rotation; + + this.matrixAutoUpdate = source.matrixAutoUpdate; + this.matrix.copy( source.matrix ); + + this.generateMipmaps = source.generateMipmaps; + this.premultiplyAlpha = source.premultiplyAlpha; + this.flipY = source.flipY; + this.unpackAlignment = source.unpackAlignment; + this.encoding = source.encoding; + + return this; + + }, + + toJSON: function ( meta ) { + + var isRootObject = ( meta === undefined || typeof meta === 'string' ); + + if ( ! isRootObject && meta.textures[ this.uuid ] !== undefined ) { + + return meta.textures[ this.uuid ]; + + } + + var output = { + + metadata: { + version: 4.5, + type: 'Texture', + generator: 'Texture.toJSON' + }, + + uuid: this.uuid, + name: this.name, + + mapping: this.mapping, + + repeat: [ this.repeat.x, this.repeat.y ], + offset: [ this.offset.x, this.offset.y ], + center: [ this.center.x, this.center.y ], + rotation: this.rotation, + + wrap: [ this.wrapS, this.wrapT ], + + format: this.format, + type: this.type, + encoding: this.encoding, + + minFilter: this.minFilter, + magFilter: this.magFilter, + anisotropy: this.anisotropy, + + flipY: this.flipY, + + premultiplyAlpha: this.premultiplyAlpha, + unpackAlignment: this.unpackAlignment + + }; + + if ( this.image !== undefined ) { + + // TODO: Move to THREE.Image + + var image = this.image; + + if ( image.uuid === undefined ) { + + image.uuid = MathUtils.generateUUID(); // UGH + + } + + if ( ! isRootObject && meta.images[ image.uuid ] === undefined ) { + + var url; + + if ( Array.isArray( image ) ) { + + // process array of images e.g. CubeTexture + + url = []; + + for ( var i = 0, l = image.length; i < l; i ++ ) { + + url.push( ImageUtils.getDataURL( image[ i ] ) ); + + } + + } else { + + // process single image + + url = ImageUtils.getDataURL( image ); + + } + + meta.images[ image.uuid ] = { + uuid: image.uuid, + url: url + }; + + } + + output.image = image.uuid; + + } + + if ( ! isRootObject ) { + + meta.textures[ this.uuid ] = output; + + } + + return output; + + }, + + dispose: function () { + + this.dispatchEvent( { type: 'dispose' } ); + + }, + + transformUv: function ( uv ) { + + if ( this.mapping !== UVMapping ) { return uv; } + + uv.applyMatrix3( this.matrix ); + + if ( uv.x < 0 || uv.x > 1 ) { + + switch ( this.wrapS ) { + + case RepeatWrapping: + + uv.x = uv.x - Math.floor( uv.x ); + break; + + case ClampToEdgeWrapping: + + uv.x = uv.x < 0 ? 0 : 1; + break; + + case MirroredRepeatWrapping: + + if ( Math.abs( Math.floor( uv.x ) % 2 ) === 1 ) { + + uv.x = Math.ceil( uv.x ) - uv.x; + + } else { + + uv.x = uv.x - Math.floor( uv.x ); + + } + + break; + + } + + } + + if ( uv.y < 0 || uv.y > 1 ) { + + switch ( this.wrapT ) { + + case RepeatWrapping: + + uv.y = uv.y - Math.floor( uv.y ); + break; + + case ClampToEdgeWrapping: + + uv.y = uv.y < 0 ? 0 : 1; + break; + + case MirroredRepeatWrapping: + + if ( Math.abs( Math.floor( uv.y ) % 2 ) === 1 ) { + + uv.y = Math.ceil( uv.y ) - uv.y; + + } else { + + uv.y = uv.y - Math.floor( uv.y ); + + } + + break; + + } + + } + + if ( this.flipY ) { + + uv.y = 1 - uv.y; + + } + + return uv; + + } + + } ); + + Object.defineProperty( Texture.prototype, "needsUpdate", { + + set: function ( value ) { + + if ( value === true ) { this.version ++; } + + } + + } ); + + var Vector4 = function Vector4( x, y, z, w ) { + if ( x === void 0 ) x = 0; + if ( y === void 0 ) y = 0; + if ( z === void 0 ) z = 0; + if ( w === void 0 ) w = 1; + + + Object.defineProperty( this, 'isVector4', { value: true } ); + + this.x = x; + this.y = y; + this.z = z; + this.w = w; + + }; + + var prototypeAccessors$1 = { width: { configurable: true },height: { configurable: true } }; + + prototypeAccessors$1.width.get = function () { + + return this.z; + + }; + + prototypeAccessors$1.width.set = function ( value ) { + + this.z = value; + + }; + + prototypeAccessors$1.height.get = function () { + + return this.w; + + }; + + prototypeAccessors$1.height.set = function ( value ) { + + this.w = value; + + }; + + Vector4.prototype.set = function set ( x, y, z, w ) { + + this.x = x; + this.y = y; + this.z = z; + this.w = w; + + return this; + + }; + + Vector4.prototype.setScalar = function setScalar ( scalar ) { + + this.x = scalar; + this.y = scalar; + this.z = scalar; + this.w = scalar; + + return this; + + }; + + Vector4.prototype.setX = function setX ( x ) { + + this.x = x; + + return this; + + }; + + Vector4.prototype.setY = function setY ( y ) { + + this.y = y; + + return this; + + }; + + Vector4.prototype.setZ = function setZ ( z ) { + + this.z = z; + + return this; + + }; + + Vector4.prototype.setW = function setW ( w ) { + + this.w = w; + + return this; + + }; + + Vector4.prototype.setComponent = function setComponent ( index, value ) { + + switch ( index ) { + + case 0: this.x = value; break; + case 1: this.y = value; break; + case 2: this.z = value; break; + case 3: this.w = value; break; + default: throw new Error( 'index is out of range: ' + index ); + + } + + return this; + + }; + + Vector4.prototype.getComponent = function getComponent ( index ) { + + switch ( index ) { + + case 0: return this.x; + case 1: return this.y; + case 2: return this.z; + case 3: return this.w; + default: throw new Error( 'index is out of range: ' + index ); + + } + + }; + + Vector4.prototype.clone = function clone () { + + return new this.constructor( this.x, this.y, this.z, this.w ); + + }; + + Vector4.prototype.copy = function copy ( v ) { + + this.x = v.x; + this.y = v.y; + this.z = v.z; + this.w = ( v.w !== undefined ) ? v.w : 1; + + return this; + + }; + + Vector4.prototype.add = function add ( v, w ) { + + if ( w !== undefined ) { + + console.warn( 'THREE.Vector4: .add() now only accepts one argument. Use .addVectors( a, b ) instead.' ); + return this.addVectors( v, w ); + + } + + this.x += v.x; + this.y += v.y; + this.z += v.z; + this.w += v.w; + + return this; + + }; + + Vector4.prototype.addScalar = function addScalar ( s ) { + + this.x += s; + this.y += s; + this.z += s; + this.w += s; + + return this; + + }; + + Vector4.prototype.addVectors = function addVectors ( a, b ) { + + this.x = a.x + b.x; + this.y = a.y + b.y; + this.z = a.z + b.z; + this.w = a.w + b.w; + + return this; + + }; + + Vector4.prototype.addScaledVector = function addScaledVector ( v, s ) { + + this.x += v.x * s; + this.y += v.y * s; + this.z += v.z * s; + this.w += v.w * s; + + return this; + + }; + + Vector4.prototype.sub = function sub ( v, w ) { + + if ( w !== undefined ) { + + console.warn( 'THREE.Vector4: .sub() now only accepts one argument. Use .subVectors( a, b ) instead.' ); + return this.subVectors( v, w ); + + } + + this.x -= v.x; + this.y -= v.y; + this.z -= v.z; + this.w -= v.w; + + return this; + + }; + + Vector4.prototype.subScalar = function subScalar ( s ) { + + this.x -= s; + this.y -= s; + this.z -= s; + this.w -= s; + + return this; + + }; + + Vector4.prototype.subVectors = function subVectors ( a, b ) { + + this.x = a.x - b.x; + this.y = a.y - b.y; + this.z = a.z - b.z; + this.w = a.w - b.w; + + return this; + + }; + + Vector4.prototype.multiplyScalar = function multiplyScalar ( scalar ) { + + this.x *= scalar; + this.y *= scalar; + this.z *= scalar; + this.w *= scalar; + + return this; + + }; + + Vector4.prototype.applyMatrix4 = function applyMatrix4 ( m ) { + + var x = this.x, y = this.y, z = this.z, w = this.w; + var e = m.elements; + + this.x = e[ 0 ] * x + e[ 4 ] * y + e[ 8 ] * z + e[ 12 ] * w; + this.y = e[ 1 ] * x + e[ 5 ] * y + e[ 9 ] * z + e[ 13 ] * w; + this.z = e[ 2 ] * x + e[ 6 ] * y + e[ 10 ] * z + e[ 14 ] * w; + this.w = e[ 3 ] * x + e[ 7 ] * y + e[ 11 ] * z + e[ 15 ] * w; + + return this; + + }; + + Vector4.prototype.divideScalar = function divideScalar ( scalar ) { + + return this.multiplyScalar( 1 / scalar ); + + }; + + Vector4.prototype.setAxisAngleFromQuaternion = function setAxisAngleFromQuaternion ( q ) { + + // http://www.euclideanspace.com/maths/geometry/rotations/conversions/quaternionToAngle/index.htm + + // q is assumed to be normalized + + this.w = 2 * Math.acos( q.w ); + + var s = Math.sqrt( 1 - q.w * q.w ); + + if ( s < 0.0001 ) { + + this.x = 1; + this.y = 0; + this.z = 0; + + } else { + + this.x = q.x / s; + this.y = q.y / s; + this.z = q.z / s; + + } + + return this; + + }; + + Vector4.prototype.setAxisAngleFromRotationMatrix = function setAxisAngleFromRotationMatrix ( m ) { + + // http://www.euclideanspace.com/maths/geometry/rotations/conversions/matrixToAngle/index.htm + + // assumes the upper 3x3 of m is a pure rotation matrix (i.e, unscaled) + + var angle, x, y, z; // variables for result + var epsilon = 0.01, // margin to allow for rounding errors + epsilon2 = 0.1, // margin to distinguish between 0 and 180 degrees + + te = m.elements, + + m11 = te[ 0 ], m12 = te[ 4 ], m13 = te[ 8 ], + m21 = te[ 1 ], m22 = te[ 5 ], m23 = te[ 9 ], + m31 = te[ 2 ], m32 = te[ 6 ], m33 = te[ 10 ]; + + if ( ( Math.abs( m12 - m21 ) < epsilon ) && + ( Math.abs( m13 - m31 ) < epsilon ) && + ( Math.abs( m23 - m32 ) < epsilon ) ) { + + // singularity found + // first check for identity matrix which must have +1 for all terms + // in leading diagonal and zero in other terms + + if ( ( Math.abs( m12 + m21 ) < epsilon2 ) && + ( Math.abs( m13 + m31 ) < epsilon2 ) && + ( Math.abs( m23 + m32 ) < epsilon2 ) && + ( Math.abs( m11 + m22 + m33 - 3 ) < epsilon2 ) ) { + + // this singularity is identity matrix so angle = 0 + + this.set( 1, 0, 0, 0 ); + + return this; // zero angle, arbitrary axis + + } + + // otherwise this singularity is angle = 180 + + angle = Math.PI; + + var xx = ( m11 + 1 ) / 2; + var yy = ( m22 + 1 ) / 2; + var zz = ( m33 + 1 ) / 2; + var xy = ( m12 + m21 ) / 4; + var xz = ( m13 + m31 ) / 4; + var yz = ( m23 + m32 ) / 4; + + if ( ( xx > yy ) && ( xx > zz ) ) { + + // m11 is the largest diagonal term + + if ( xx < epsilon ) { + + x = 0; + y = 0.707106781; + z = 0.707106781; + + } else { + + x = Math.sqrt( xx ); + y = xy / x; + z = xz / x; + + } + + } else if ( yy > zz ) { + + // m22 is the largest diagonal term + + if ( yy < epsilon ) { + + x = 0.707106781; + y = 0; + z = 0.707106781; + + } else { + + y = Math.sqrt( yy ); + x = xy / y; + z = yz / y; + + } + + } else { + + // m33 is the largest diagonal term so base result on this + + if ( zz < epsilon ) { + + x = 0.707106781; + y = 0.707106781; + z = 0; + + } else { + + z = Math.sqrt( zz ); + x = xz / z; + y = yz / z; + + } + + } + + this.set( x, y, z, angle ); + + return this; // return 180 deg rotation + + } + + // as we have reached here there are no singularities so we can handle normally + + var s = Math.sqrt( ( m32 - m23 ) * ( m32 - m23 ) + + ( m13 - m31 ) * ( m13 - m31 ) + + ( m21 - m12 ) * ( m21 - m12 ) ); // used to normalize + + if ( Math.abs( s ) < 0.001 ) { s = 1; } + + // prevent divide by zero, should not happen if matrix is orthogonal and should be + // caught by singularity test above, but I've left it in just in case + + this.x = ( m32 - m23 ) / s; + this.y = ( m13 - m31 ) / s; + this.z = ( m21 - m12 ) / s; + this.w = Math.acos( ( m11 + m22 + m33 - 1 ) / 2 ); + + return this; + + }; + + Vector4.prototype.min = function min ( v ) { + + this.x = Math.min( this.x, v.x ); + this.y = Math.min( this.y, v.y ); + this.z = Math.min( this.z, v.z ); + this.w = Math.min( this.w, v.w ); + + return this; + + }; + + Vector4.prototype.max = function max ( v ) { + + this.x = Math.max( this.x, v.x ); + this.y = Math.max( this.y, v.y ); + this.z = Math.max( this.z, v.z ); + this.w = Math.max( this.w, v.w ); + + return this; + + }; + + Vector4.prototype.clamp = function clamp ( min, max ) { + + // assumes min < max, componentwise + + this.x = Math.max( min.x, Math.min( max.x, this.x ) ); + this.y = Math.max( min.y, Math.min( max.y, this.y ) ); + this.z = Math.max( min.z, Math.min( max.z, this.z ) ); + this.w = Math.max( min.w, Math.min( max.w, this.w ) ); + + return this; + + }; + + Vector4.prototype.clampScalar = function clampScalar ( minVal, maxVal ) { + + this.x = Math.max( minVal, Math.min( maxVal, this.x ) ); + this.y = Math.max( minVal, Math.min( maxVal, this.y ) ); + this.z = Math.max( minVal, Math.min( maxVal, this.z ) ); + this.w = Math.max( minVal, Math.min( maxVal, this.w ) ); + + return this; + + }; + + Vector4.prototype.clampLength = function clampLength ( min, max ) { + + var length = this.length(); + + return this.divideScalar( length || 1 ).multiplyScalar( Math.max( min, Math.min( max, length ) ) ); + + }; + + Vector4.prototype.floor = function floor () { + + this.x = Math.floor( this.x ); + this.y = Math.floor( this.y ); + this.z = Math.floor( this.z ); + this.w = Math.floor( this.w ); + + return this; + + }; + + Vector4.prototype.ceil = function ceil () { + + this.x = Math.ceil( this.x ); + this.y = Math.ceil( this.y ); + this.z = Math.ceil( this.z ); + this.w = Math.ceil( this.w ); + + return this; + + }; + + Vector4.prototype.round = function round () { + + this.x = Math.round( this.x ); + this.y = Math.round( this.y ); + this.z = Math.round( this.z ); + this.w = Math.round( this.w ); + + return this; + + }; + + Vector4.prototype.roundToZero = function roundToZero () { + + this.x = ( this.x < 0 ) ? Math.ceil( this.x ) : Math.floor( this.x ); + this.y = ( this.y < 0 ) ? Math.ceil( this.y ) : Math.floor( this.y ); + this.z = ( this.z < 0 ) ? Math.ceil( this.z ) : Math.floor( this.z ); + this.w = ( this.w < 0 ) ? Math.ceil( this.w ) : Math.floor( this.w ); + + return this; + + }; + + Vector4.prototype.negate = function negate () { + + this.x = - this.x; + this.y = - this.y; + this.z = - this.z; + this.w = - this.w; + + return this; + + }; + + Vector4.prototype.dot = function dot ( v ) { + + return this.x * v.x + this.y * v.y + this.z * v.z + this.w * v.w; + + }; + + Vector4.prototype.lengthSq = function lengthSq () { + + return this.x * this.x + this.y * this.y + this.z * this.z + this.w * this.w; + + }; + + Vector4.prototype.length = function length () { + + return Math.sqrt( this.x * this.x + this.y * this.y + this.z * this.z + this.w * this.w ); + + }; + + Vector4.prototype.manhattanLength = function manhattanLength () { + + return Math.abs( this.x ) + Math.abs( this.y ) + Math.abs( this.z ) + Math.abs( this.w ); + + }; + + Vector4.prototype.normalize = function normalize () { + + return this.divideScalar( this.length() || 1 ); + + }; + + Vector4.prototype.setLength = function setLength ( length ) { + + return this.normalize().multiplyScalar( length ); + + }; + + Vector4.prototype.lerp = function lerp ( v, alpha ) { + + this.x += ( v.x - this.x ) * alpha; + this.y += ( v.y - this.y ) * alpha; + this.z += ( v.z - this.z ) * alpha; + this.w += ( v.w - this.w ) * alpha; + + return this; + + }; + + Vector4.prototype.lerpVectors = function lerpVectors ( v1, v2, alpha ) { + + this.x = v1.x + ( v2.x - v1.x ) * alpha; + this.y = v1.y + ( v2.y - v1.y ) * alpha; + this.z = v1.z + ( v2.z - v1.z ) * alpha; + this.w = v1.w + ( v2.w - v1.w ) * alpha; + + return this; + + }; + + Vector4.prototype.equals = function equals ( v ) { + + return ( ( v.x === this.x ) && ( v.y === this.y ) && ( v.z === this.z ) && ( v.w === this.w ) ); + + }; + + Vector4.prototype.fromArray = function fromArray ( array, offset ) { + + if ( offset === undefined ) { offset = 0; } + + this.x = array[ offset ]; + this.y = array[ offset + 1 ]; + this.z = array[ offset + 2 ]; + this.w = array[ offset + 3 ]; + + return this; + + }; + + Vector4.prototype.toArray = function toArray ( array, offset ) { + + if ( array === undefined ) { array = []; } + if ( offset === undefined ) { offset = 0; } + + array[ offset ] = this.x; + array[ offset + 1 ] = this.y; + array[ offset + 2 ] = this.z; + array[ offset + 3 ] = this.w; + + return array; + + }; + + Vector4.prototype.fromBufferAttribute = function fromBufferAttribute ( attribute, index, offset ) { + + if ( offset !== undefined ) { + + console.warn( 'THREE.Vector4: offset has been removed from .fromBufferAttribute().' ); + + } + + this.x = attribute.getX( index ); + this.y = attribute.getY( index ); + this.z = attribute.getZ( index ); + this.w = attribute.getW( index ); + + return this; + + }; + + Vector4.prototype.random = function random () { + + this.x = Math.random(); + this.y = Math.random(); + this.z = Math.random(); + this.w = Math.random(); + + return this; + + }; + + Object.defineProperties( Vector4.prototype, prototypeAccessors$1 ); + + /* + In options, we can specify: + * Texture parameters for an auto-generated target texture + * depthBuffer/stencilBuffer: Booleans to indicate if we should generate these buffers + */ + function WebGLRenderTarget( width, height, options ) { + + this.width = width; + this.height = height; + + this.scissor = new Vector4( 0, 0, width, height ); + this.scissorTest = false; + + this.viewport = new Vector4( 0, 0, width, height ); + + options = options || {}; + + this.texture = new Texture( undefined, options.mapping, options.wrapS, options.wrapT, options.magFilter, options.minFilter, options.format, options.type, options.anisotropy, options.encoding ); + + this.texture.image = {}; + this.texture.image.width = width; + this.texture.image.height = height; + + this.texture.generateMipmaps = options.generateMipmaps !== undefined ? options.generateMipmaps : false; + this.texture.minFilter = options.minFilter !== undefined ? options.minFilter : LinearFilter; + + this.depthBuffer = options.depthBuffer !== undefined ? options.depthBuffer : true; + this.stencilBuffer = options.stencilBuffer !== undefined ? options.stencilBuffer : false; + this.depthTexture = options.depthTexture !== undefined ? options.depthTexture : null; + + } + + WebGLRenderTarget.prototype = Object.assign( Object.create( EventDispatcher.prototype ), { + + constructor: WebGLRenderTarget, + + isWebGLRenderTarget: true, + + setSize: function ( width, height ) { + + if ( this.width !== width || this.height !== height ) { + + this.width = width; + this.height = height; + + this.texture.image.width = width; + this.texture.image.height = height; + + this.dispose(); + + } + + this.viewport.set( 0, 0, width, height ); + this.scissor.set( 0, 0, width, height ); + + }, + + clone: function () { + + return new this.constructor().copy( this ); + + }, + + copy: function ( source ) { + + this.width = source.width; + this.height = source.height; + + this.viewport.copy( source.viewport ); + + this.texture = source.texture.clone(); + + this.depthBuffer = source.depthBuffer; + this.stencilBuffer = source.stencilBuffer; + this.depthTexture = source.depthTexture; + + return this; + + }, + + dispose: function () { + + this.dispatchEvent( { type: 'dispose' } ); + + } + + } ); + + function WebGLMultisampleRenderTarget( width, height, options ) { + + WebGLRenderTarget.call( this, width, height, options ); + + this.samples = 4; + + } + + WebGLMultisampleRenderTarget.prototype = Object.assign( Object.create( WebGLRenderTarget.prototype ), { + + constructor: WebGLMultisampleRenderTarget, + + isWebGLMultisampleRenderTarget: true, + + copy: function ( source ) { + + WebGLRenderTarget.prototype.copy.call( this, source ); + + this.samples = source.samples; + + return this; + + } + + } ); + + var Quaternion = function Quaternion( x, y, z, w ) { + if ( x === void 0 ) x = 0; + if ( y === void 0 ) y = 0; + if ( z === void 0 ) z = 0; + if ( w === void 0 ) w = 1; + + + Object.defineProperty( this, 'isQuaternion', { value: true } ); + + this._x = x; + this._y = y; + this._z = z; + this._w = w; + + }; + + var prototypeAccessors$2 = { x: { configurable: true },y: { configurable: true },z: { configurable: true },w: { configurable: true } }; + + Quaternion.slerp = function slerp ( qa, qb, qm, t ) { + + return qm.copy( qa ).slerp( qb, t ); + + }; + + Quaternion.slerpFlat = function slerpFlat ( dst, dstOffset, src0, srcOffset0, src1, srcOffset1, t ) { + + // fuzz-free, array-based Quaternion SLERP operation + + var x0 = src0[ srcOffset0 + 0 ], + y0 = src0[ srcOffset0 + 1 ], + z0 = src0[ srcOffset0 + 2 ], + w0 = src0[ srcOffset0 + 3 ]; + + var x1 = src1[ srcOffset1 + 0 ], + y1 = src1[ srcOffset1 + 1 ], + z1 = src1[ srcOffset1 + 2 ], + w1 = src1[ srcOffset1 + 3 ]; + + if ( w0 !== w1 || x0 !== x1 || y0 !== y1 || z0 !== z1 ) { + + var s = 1 - t; + var cos = x0 * x1 + y0 * y1 + z0 * z1 + w0 * w1, + dir = ( cos >= 0 ? 1 : - 1 ), + sqrSin = 1 - cos * cos; + + // Skip the Slerp for tiny steps to avoid numeric problems: + if ( sqrSin > Number.EPSILON ) { + + var sin = Math.sqrt( sqrSin ), + len = Math.atan2( sin, cos * dir ); + + s = Math.sin( s * len ) / sin; + t = Math.sin( t * len ) / sin; + + } + + var tDir = t * dir; + + x0 = x0 * s + x1 * tDir; + y0 = y0 * s + y1 * tDir; + z0 = z0 * s + z1 * tDir; + w0 = w0 * s + w1 * tDir; + + // Normalize in case we just did a lerp: + if ( s === 1 - t ) { + + var f = 1 / Math.sqrt( x0 * x0 + y0 * y0 + z0 * z0 + w0 * w0 ); + + x0 *= f; + y0 *= f; + z0 *= f; + w0 *= f; + + } + + } + + dst[ dstOffset ] = x0; + dst[ dstOffset + 1 ] = y0; + dst[ dstOffset + 2 ] = z0; + dst[ dstOffset + 3 ] = w0; + + }; + + Quaternion.multiplyQuaternionsFlat = function multiplyQuaternionsFlat ( dst, dstOffset, src0, srcOffset0, src1, srcOffset1 ) { + + var x0 = src0[ srcOffset0 ]; + var y0 = src0[ srcOffset0 + 1 ]; + var z0 = src0[ srcOffset0 + 2 ]; + var w0 = src0[ srcOffset0 + 3 ]; + + var x1 = src1[ srcOffset1 ]; + var y1 = src1[ srcOffset1 + 1 ]; + var z1 = src1[ srcOffset1 + 2 ]; + var w1 = src1[ srcOffset1 + 3 ]; + + dst[ dstOffset ] = x0 * w1 + w0 * x1 + y0 * z1 - z0 * y1; + dst[ dstOffset + 1 ] = y0 * w1 + w0 * y1 + z0 * x1 - x0 * z1; + dst[ dstOffset + 2 ] = z0 * w1 + w0 * z1 + x0 * y1 - y0 * x1; + dst[ dstOffset + 3 ] = w0 * w1 - x0 * x1 - y0 * y1 - z0 * z1; + + return dst; + + }; + + prototypeAccessors$2.x.get = function () { + + return this._x; + + }; + + prototypeAccessors$2.x.set = function ( value ) { + + this._x = value; + this._onChangeCallback(); + + }; + + prototypeAccessors$2.y.get = function () { + + return this._y; + + }; + + prototypeAccessors$2.y.set = function ( value ) { + + this._y = value; + this._onChangeCallback(); + + }; + + prototypeAccessors$2.z.get = function () { + + return this._z; + + }; + + prototypeAccessors$2.z.set = function ( value ) { + + this._z = value; + this._onChangeCallback(); + + }; + + prototypeAccessors$2.w.get = function () { + + return this._w; + + }; + + prototypeAccessors$2.w.set = function ( value ) { + + this._w = value; + this._onChangeCallback(); + + }; + + Quaternion.prototype.set = function set ( x, y, z, w ) { + + this._x = x; + this._y = y; + this._z = z; + this._w = w; + + this._onChangeCallback(); + + return this; + + }; + + Quaternion.prototype.clone = function clone () { + + return new this.constructor( this._x, this._y, this._z, this._w ); + + }; + + Quaternion.prototype.copy = function copy ( quaternion ) { + + this._x = quaternion.x; + this._y = quaternion.y; + this._z = quaternion.z; + this._w = quaternion.w; + + this._onChangeCallback(); + + return this; + + }; + + Quaternion.prototype.setFromEuler = function setFromEuler ( euler, update ) { + + if ( ! ( euler && euler.isEuler ) ) { + + throw new Error( 'THREE.Quaternion: .setFromEuler() now expects an Euler rotation rather than a Vector3 and order.' ); + + } + + var x = euler._x, y = euler._y, z = euler._z, order = euler._order; + + // http://www.mathworks.com/matlabcentral/fileexchange/ + // 20696-function-to-convert-between-dcm-euler-angles-quaternions-and-euler-vectors/ + //content/SpinCalc.m + + var cos = Math.cos; + var sin = Math.sin; + + var c1 = cos( x / 2 ); + var c2 = cos( y / 2 ); + var c3 = cos( z / 2 ); + + var s1 = sin( x / 2 ); + var s2 = sin( y / 2 ); + var s3 = sin( z / 2 ); + + switch ( order ) { + + case 'XYZ': + this._x = s1 * c2 * c3 + c1 * s2 * s3; + this._y = c1 * s2 * c3 - s1 * c2 * s3; + this._z = c1 * c2 * s3 + s1 * s2 * c3; + this._w = c1 * c2 * c3 - s1 * s2 * s3; + break; + + case 'YXZ': + this._x = s1 * c2 * c3 + c1 * s2 * s3; + this._y = c1 * s2 * c3 - s1 * c2 * s3; + this._z = c1 * c2 * s3 - s1 * s2 * c3; + this._w = c1 * c2 * c3 + s1 * s2 * s3; + break; + + case 'ZXY': + this._x = s1 * c2 * c3 - c1 * s2 * s3; + this._y = c1 * s2 * c3 + s1 * c2 * s3; + this._z = c1 * c2 * s3 + s1 * s2 * c3; + this._w = c1 * c2 * c3 - s1 * s2 * s3; + break; + + case 'ZYX': + this._x = s1 * c2 * c3 - c1 * s2 * s3; + this._y = c1 * s2 * c3 + s1 * c2 * s3; + this._z = c1 * c2 * s3 - s1 * s2 * c3; + this._w = c1 * c2 * c3 + s1 * s2 * s3; + break; + + case 'YZX': + this._x = s1 * c2 * c3 + c1 * s2 * s3; + this._y = c1 * s2 * c3 + s1 * c2 * s3; + this._z = c1 * c2 * s3 - s1 * s2 * c3; + this._w = c1 * c2 * c3 - s1 * s2 * s3; + break; + + case 'XZY': + this._x = s1 * c2 * c3 - c1 * s2 * s3; + this._y = c1 * s2 * c3 - s1 * c2 * s3; + this._z = c1 * c2 * s3 + s1 * s2 * c3; + this._w = c1 * c2 * c3 + s1 * s2 * s3; + break; + + default: + console.warn( 'THREE.Quaternion: .setFromEuler() encountered an unknown order: ' + order ); + + } + + if ( update !== false ) { this._onChangeCallback(); } + + return this; + + }; + + Quaternion.prototype.setFromAxisAngle = function setFromAxisAngle ( axis, angle ) { + + // http://www.euclideanspace.com/maths/geometry/rotations/conversions/angleToQuaternion/index.htm + + // assumes axis is normalized + + var halfAngle = angle / 2, s = Math.sin( halfAngle ); + + this._x = axis.x * s; + this._y = axis.y * s; + this._z = axis.z * s; + this._w = Math.cos( halfAngle ); + + this._onChangeCallback(); + + return this; + + }; + + Quaternion.prototype.setFromRotationMatrix = function setFromRotationMatrix ( m ) { + + // http://www.euclideanspace.com/maths/geometry/rotations/conversions/matrixToQuaternion/index.htm + + // assumes the upper 3x3 of m is a pure rotation matrix (i.e, unscaled) + + var te = m.elements, + + m11 = te[ 0 ], m12 = te[ 4 ], m13 = te[ 8 ], + m21 = te[ 1 ], m22 = te[ 5 ], m23 = te[ 9 ], + m31 = te[ 2 ], m32 = te[ 6 ], m33 = te[ 10 ], + + trace = m11 + m22 + m33; + + if ( trace > 0 ) { + + var s = 0.5 / Math.sqrt( trace + 1.0 ); + + this._w = 0.25 / s; + this._x = ( m32 - m23 ) * s; + this._y = ( m13 - m31 ) * s; + this._z = ( m21 - m12 ) * s; + + } else if ( m11 > m22 && m11 > m33 ) { + + var s$1 = 2.0 * Math.sqrt( 1.0 + m11 - m22 - m33 ); + + this._w = ( m32 - m23 ) / s$1; + this._x = 0.25 * s$1; + this._y = ( m12 + m21 ) / s$1; + this._z = ( m13 + m31 ) / s$1; + + } else if ( m22 > m33 ) { + + var s$2 = 2.0 * Math.sqrt( 1.0 + m22 - m11 - m33 ); + + this._w = ( m13 - m31 ) / s$2; + this._x = ( m12 + m21 ) / s$2; + this._y = 0.25 * s$2; + this._z = ( m23 + m32 ) / s$2; + + } else { + + var s$3 = 2.0 * Math.sqrt( 1.0 + m33 - m11 - m22 ); + + this._w = ( m21 - m12 ) / s$3; + this._x = ( m13 + m31 ) / s$3; + this._y = ( m23 + m32 ) / s$3; + this._z = 0.25 * s$3; + + } + + this._onChangeCallback(); + + return this; + + }; + + Quaternion.prototype.setFromUnitVectors = function setFromUnitVectors ( vFrom, vTo ) { + + // assumes direction vectors vFrom and vTo are normalized + + var EPS = 0.000001; + + var r = vFrom.dot( vTo ) + 1; + + if ( r < EPS ) { + + r = 0; + + if ( Math.abs( vFrom.x ) > Math.abs( vFrom.z ) ) { + + this._x = - vFrom.y; + this._y = vFrom.x; + this._z = 0; + this._w = r; + + } else { + + this._x = 0; + this._y = - vFrom.z; + this._z = vFrom.y; + this._w = r; + + } + + } else { + + // crossVectors( vFrom, vTo ); // inlined to avoid cyclic dependency on Vector3 + + this._x = vFrom.y * vTo.z - vFrom.z * vTo.y; + this._y = vFrom.z * vTo.x - vFrom.x * vTo.z; + this._z = vFrom.x * vTo.y - vFrom.y * vTo.x; + this._w = r; + + } + + return this.normalize(); + + }; + + Quaternion.prototype.angleTo = function angleTo ( q ) { + + return 2 * Math.acos( Math.abs( MathUtils.clamp( this.dot( q ), - 1, 1 ) ) ); + + }; + + Quaternion.prototype.rotateTowards = function rotateTowards ( q, step ) { + + var angle = this.angleTo( q ); + + if ( angle === 0 ) { return this; } + + var t = Math.min( 1, step / angle ); + + this.slerp( q, t ); + + return this; + + }; + + Quaternion.prototype.identity = function identity () { + + return this.set( 0, 0, 0, 1 ); + + }; + + Quaternion.prototype.inverse = function inverse () { + + // quaternion is assumed to have unit length + + return this.conjugate(); + + }; + + Quaternion.prototype.conjugate = function conjugate () { + + this._x *= - 1; + this._y *= - 1; + this._z *= - 1; + + this._onChangeCallback(); + + return this; + + }; + + Quaternion.prototype.dot = function dot ( v ) { + + return this._x * v._x + this._y * v._y + this._z * v._z + this._w * v._w; + + }; + + Quaternion.prototype.lengthSq = function lengthSq () { + + return this._x * this._x + this._y * this._y + this._z * this._z + this._w * this._w; + + }; + + Quaternion.prototype.length = function length () { + + return Math.sqrt( this._x * this._x + this._y * this._y + this._z * this._z + this._w * this._w ); + + }; + + Quaternion.prototype.normalize = function normalize () { + + var l = this.length(); + + if ( l === 0 ) { + + this._x = 0; + this._y = 0; + this._z = 0; + this._w = 1; + + } else { + + l = 1 / l; + + this._x = this._x * l; + this._y = this._y * l; + this._z = this._z * l; + this._w = this._w * l; + + } + + this._onChangeCallback(); + + return this; + + }; + + Quaternion.prototype.multiply = function multiply ( q, p ) { + + if ( p !== undefined ) { + + console.warn( 'THREE.Quaternion: .multiply() now only accepts one argument. Use .multiplyQuaternions( a, b ) instead.' ); + return this.multiplyQuaternions( q, p ); + + } + + return this.multiplyQuaternions( this, q ); + + }; + + Quaternion.prototype.premultiply = function premultiply ( q ) { + + return this.multiplyQuaternions( q, this ); + + }; + + Quaternion.prototype.multiplyQuaternions = function multiplyQuaternions ( a, b ) { + + // from http://www.euclideanspace.com/maths/algebra/realNormedAlgebra/quaternions/code/index.htm + + var qax = a._x, qay = a._y, qaz = a._z, qaw = a._w; + var qbx = b._x, qby = b._y, qbz = b._z, qbw = b._w; + + this._x = qax * qbw + qaw * qbx + qay * qbz - qaz * qby; + this._y = qay * qbw + qaw * qby + qaz * qbx - qax * qbz; + this._z = qaz * qbw + qaw * qbz + qax * qby - qay * qbx; + this._w = qaw * qbw - qax * qbx - qay * qby - qaz * qbz; + + this._onChangeCallback(); + + return this; + + }; + + Quaternion.prototype.slerp = function slerp ( qb, t ) { + + if ( t === 0 ) { return this; } + if ( t === 1 ) { return this.copy( qb ); } + + var x = this._x, y = this._y, z = this._z, w = this._w; + + // http://www.euclideanspace.com/maths/algebra/realNormedAlgebra/quaternions/slerp/ + + var cosHalfTheta = w * qb._w + x * qb._x + y * qb._y + z * qb._z; + + if ( cosHalfTheta < 0 ) { + + this._w = - qb._w; + this._x = - qb._x; + this._y = - qb._y; + this._z = - qb._z; + + cosHalfTheta = - cosHalfTheta; + + } else { + + this.copy( qb ); + + } + + if ( cosHalfTheta >= 1.0 ) { + + this._w = w; + this._x = x; + this._y = y; + this._z = z; + + return this; + + } + + var sqrSinHalfTheta = 1.0 - cosHalfTheta * cosHalfTheta; + + if ( sqrSinHalfTheta <= Number.EPSILON ) { + + var s = 1 - t; + this._w = s * w + t * this._w; + this._x = s * x + t * this._x; + this._y = s * y + t * this._y; + this._z = s * z + t * this._z; + + this.normalize(); + this._onChangeCallback(); + + return this; + + } + + var sinHalfTheta = Math.sqrt( sqrSinHalfTheta ); + var halfTheta = Math.atan2( sinHalfTheta, cosHalfTheta ); + var ratioA = Math.sin( ( 1 - t ) * halfTheta ) / sinHalfTheta, + ratioB = Math.sin( t * halfTheta ) / sinHalfTheta; + + this._w = ( w * ratioA + this._w * ratioB ); + this._x = ( x * ratioA + this._x * ratioB ); + this._y = ( y * ratioA + this._y * ratioB ); + this._z = ( z * ratioA + this._z * ratioB ); + + this._onChangeCallback(); + + return this; + + }; + + Quaternion.prototype.equals = function equals ( quaternion ) { + + return ( quaternion._x === this._x ) && ( quaternion._y === this._y ) && ( quaternion._z === this._z ) && ( quaternion._w === this._w ); + + }; + + Quaternion.prototype.fromArray = function fromArray ( array, offset ) { + + if ( offset === undefined ) { offset = 0; } + + this._x = array[ offset ]; + this._y = array[ offset + 1 ]; + this._z = array[ offset + 2 ]; + this._w = array[ offset + 3 ]; + + this._onChangeCallback(); + + return this; + + }; + + Quaternion.prototype.toArray = function toArray ( array, offset ) { + + if ( array === undefined ) { array = []; } + if ( offset === undefined ) { offset = 0; } + + array[ offset ] = this._x; + array[ offset + 1 ] = this._y; + array[ offset + 2 ] = this._z; + array[ offset + 3 ] = this._w; + + return array; + + }; + + Quaternion.prototype.fromBufferAttribute = function fromBufferAttribute ( attribute, index ) { + + this._x = attribute.getX( index ); + this._y = attribute.getY( index ); + this._z = attribute.getZ( index ); + this._w = attribute.getW( index ); + + return this; + + }; + + Quaternion.prototype._onChange = function _onChange ( callback ) { + + this._onChangeCallback = callback; + + return this; + + }; + + Quaternion.prototype._onChangeCallback = function _onChangeCallback () {}; + + Object.defineProperties( Quaternion.prototype, prototypeAccessors$2 ); + + var Vector3 = function Vector3( x, y, z ) { + if ( x === void 0 ) x = 0; + if ( y === void 0 ) y = 0; + if ( z === void 0 ) z = 0; + + + Object.defineProperty( this, 'isVector3', { value: true } ); + + this.x = x; + this.y = y; + this.z = z; + + }; + + Vector3.prototype.set = function set ( x, y, z ) { + + if ( z === undefined ) { z = this.z; } // sprite.scale.set(x,y) + + this.x = x; + this.y = y; + this.z = z; + + return this; + + }; + + Vector3.prototype.setScalar = function setScalar ( scalar ) { + + this.x = scalar; + this.y = scalar; + this.z = scalar; + + return this; + + }; + + Vector3.prototype.setX = function setX ( x ) { + + this.x = x; + + return this; + + }; + + Vector3.prototype.setY = function setY ( y ) { + + this.y = y; + + return this; + + }; + + Vector3.prototype.setZ = function setZ ( z ) { + + this.z = z; + + return this; + + }; + + Vector3.prototype.setComponent = function setComponent ( index, value ) { + + switch ( index ) { + + case 0: this.x = value; break; + case 1: this.y = value; break; + case 2: this.z = value; break; + default: throw new Error( 'index is out of range: ' + index ); + + } + + return this; + + }; + + Vector3.prototype.getComponent = function getComponent ( index ) { + + switch ( index ) { + + case 0: return this.x; + case 1: return this.y; + case 2: return this.z; + default: throw new Error( 'index is out of range: ' + index ); + + } + + }; + + Vector3.prototype.clone = function clone () { + + return new this.constructor( this.x, this.y, this.z ); + + }; + + Vector3.prototype.copy = function copy ( v ) { + + this.x = v.x; + this.y = v.y; + this.z = v.z; + + return this; + + }; + + Vector3.prototype.add = function add ( v, w ) { + + if ( w !== undefined ) { + + console.warn( 'THREE.Vector3: .add() now only accepts one argument. Use .addVectors( a, b ) instead.' ); + return this.addVectors( v, w ); + + } + + this.x += v.x; + this.y += v.y; + this.z += v.z; + + return this; + + }; + + Vector3.prototype.addScalar = function addScalar ( s ) { + + this.x += s; + this.y += s; + this.z += s; + + return this; + + }; + + Vector3.prototype.addVectors = function addVectors ( a, b ) { + + this.x = a.x + b.x; + this.y = a.y + b.y; + this.z = a.z + b.z; + + return this; + + }; + + Vector3.prototype.addScaledVector = function addScaledVector ( v, s ) { + + this.x += v.x * s; + this.y += v.y * s; + this.z += v.z * s; + + return this; + + }; + + Vector3.prototype.sub = function sub ( v, w ) { + + if ( w !== undefined ) { + + console.warn( 'THREE.Vector3: .sub() now only accepts one argument. Use .subVectors( a, b ) instead.' ); + return this.subVectors( v, w ); + + } + + this.x -= v.x; + this.y -= v.y; + this.z -= v.z; + + return this; + + }; + + Vector3.prototype.subScalar = function subScalar ( s ) { + + this.x -= s; + this.y -= s; + this.z -= s; + + return this; + + }; + + Vector3.prototype.subVectors = function subVectors ( a, b ) { + + this.x = a.x - b.x; + this.y = a.y - b.y; + this.z = a.z - b.z; + + return this; + + }; + + Vector3.prototype.multiply = function multiply ( v, w ) { + + if ( w !== undefined ) { + + console.warn( 'THREE.Vector3: .multiply() now only accepts one argument. Use .multiplyVectors( a, b ) instead.' ); + return this.multiplyVectors( v, w ); + + } + + this.x *= v.x; + this.y *= v.y; + this.z *= v.z; + + return this; + + }; + + Vector3.prototype.multiplyScalar = function multiplyScalar ( scalar ) { + + this.x *= scalar; + this.y *= scalar; + this.z *= scalar; + + return this; + + }; + + Vector3.prototype.multiplyVectors = function multiplyVectors ( a, b ) { + + this.x = a.x * b.x; + this.y = a.y * b.y; + this.z = a.z * b.z; + + return this; + + }; + + Vector3.prototype.applyEuler = function applyEuler ( euler ) { + + if ( ! ( euler && euler.isEuler ) ) { + + console.error( 'THREE.Vector3: .applyEuler() now expects an Euler rotation rather than a Vector3 and order.' ); + + } + + return this.applyQuaternion( _quaternion.setFromEuler( euler ) ); + + }; + + Vector3.prototype.applyAxisAngle = function applyAxisAngle ( axis, angle ) { + + return this.applyQuaternion( _quaternion.setFromAxisAngle( axis, angle ) ); + + }; + + Vector3.prototype.applyMatrix3 = function applyMatrix3 ( m ) { + + var x = this.x, y = this.y, z = this.z; + var e = m.elements; + + this.x = e[ 0 ] * x + e[ 3 ] * y + e[ 6 ] * z; + this.y = e[ 1 ] * x + e[ 4 ] * y + e[ 7 ] * z; + this.z = e[ 2 ] * x + e[ 5 ] * y + e[ 8 ] * z; + + return this; + + }; + + Vector3.prototype.applyNormalMatrix = function applyNormalMatrix ( m ) { + + return this.applyMatrix3( m ).normalize(); + + }; + + Vector3.prototype.applyMatrix4 = function applyMatrix4 ( m ) { + + var x = this.x, y = this.y, z = this.z; + var e = m.elements; + + var w = 1 / ( e[ 3 ] * x + e[ 7 ] * y + e[ 11 ] * z + e[ 15 ] ); + + this.x = ( e[ 0 ] * x + e[ 4 ] * y + e[ 8 ] * z + e[ 12 ] ) * w; + this.y = ( e[ 1 ] * x + e[ 5 ] * y + e[ 9 ] * z + e[ 13 ] ) * w; + this.z = ( e[ 2 ] * x + e[ 6 ] * y + e[ 10 ] * z + e[ 14 ] ) * w; + + return this; + + }; + + Vector3.prototype.applyQuaternion = function applyQuaternion ( q ) { + + var x = this.x, y = this.y, z = this.z; + var qx = q.x, qy = q.y, qz = q.z, qw = q.w; + + // calculate quat * vector + + var ix = qw * x + qy * z - qz * y; + var iy = qw * y + qz * x - qx * z; + var iz = qw * z + qx * y - qy * x; + var iw = - qx * x - qy * y - qz * z; + + // calculate result * inverse quat + + this.x = ix * qw + iw * - qx + iy * - qz - iz * - qy; + this.y = iy * qw + iw * - qy + iz * - qx - ix * - qz; + this.z = iz * qw + iw * - qz + ix * - qy - iy * - qx; + + return this; + + }; + + Vector3.prototype.project = function project ( camera ) { + + return this.applyMatrix4( camera.matrixWorldInverse ).applyMatrix4( camera.projectionMatrix ); + + }; + + Vector3.prototype.unproject = function unproject ( camera ) { + + return this.applyMatrix4( camera.projectionMatrixInverse ).applyMatrix4( camera.matrixWorld ); + + }; + + Vector3.prototype.transformDirection = function transformDirection ( m ) { + + // input: THREE.Matrix4 affine matrix + // vector interpreted as a direction + + var x = this.x, y = this.y, z = this.z; + var e = m.elements; + + this.x = e[ 0 ] * x + e[ 4 ] * y + e[ 8 ] * z; + this.y = e[ 1 ] * x + e[ 5 ] * y + e[ 9 ] * z; + this.z = e[ 2 ] * x + e[ 6 ] * y + e[ 10 ] * z; + + return this.normalize(); + + }; + + Vector3.prototype.divide = function divide ( v ) { + + this.x /= v.x; + this.y /= v.y; + this.z /= v.z; + + return this; + + }; + + Vector3.prototype.divideScalar = function divideScalar ( scalar ) { + + return this.multiplyScalar( 1 / scalar ); + + }; + + Vector3.prototype.min = function min ( v ) { + + this.x = Math.min( this.x, v.x ); + this.y = Math.min( this.y, v.y ); + this.z = Math.min( this.z, v.z ); + + return this; + + }; + + Vector3.prototype.max = function max ( v ) { + + this.x = Math.max( this.x, v.x ); + this.y = Math.max( this.y, v.y ); + this.z = Math.max( this.z, v.z ); + + return this; + + }; + + Vector3.prototype.clamp = function clamp ( min, max ) { + + // assumes min < max, componentwise + + this.x = Math.max( min.x, Math.min( max.x, this.x ) ); + this.y = Math.max( min.y, Math.min( max.y, this.y ) ); + this.z = Math.max( min.z, Math.min( max.z, this.z ) ); + + return this; + + }; + + Vector3.prototype.clampScalar = function clampScalar ( minVal, maxVal ) { + + this.x = Math.max( minVal, Math.min( maxVal, this.x ) ); + this.y = Math.max( minVal, Math.min( maxVal, this.y ) ); + this.z = Math.max( minVal, Math.min( maxVal, this.z ) ); + + return this; + + }; + + Vector3.prototype.clampLength = function clampLength ( min, max ) { + + var length = this.length(); + + return this.divideScalar( length || 1 ).multiplyScalar( Math.max( min, Math.min( max, length ) ) ); + + }; + + Vector3.prototype.floor = function floor () { + + this.x = Math.floor( this.x ); + this.y = Math.floor( this.y ); + this.z = Math.floor( this.z ); + + return this; + + }; + + Vector3.prototype.ceil = function ceil () { + + this.x = Math.ceil( this.x ); + this.y = Math.ceil( this.y ); + this.z = Math.ceil( this.z ); + + return this; + + }; + + Vector3.prototype.round = function round () { + + this.x = Math.round( this.x ); + this.y = Math.round( this.y ); + this.z = Math.round( this.z ); + + return this; + + }; + + Vector3.prototype.roundToZero = function roundToZero () { + + this.x = ( this.x < 0 ) ? Math.ceil( this.x ) : Math.floor( this.x ); + this.y = ( this.y < 0 ) ? Math.ceil( this.y ) : Math.floor( this.y ); + this.z = ( this.z < 0 ) ? Math.ceil( this.z ) : Math.floor( this.z ); + + return this; + + }; + + Vector3.prototype.negate = function negate () { + + this.x = - this.x; + this.y = - this.y; + this.z = - this.z; + + return this; + + }; + + Vector3.prototype.dot = function dot ( v ) { + + return this.x * v.x + this.y * v.y + this.z * v.z; + + }; + + // TODO lengthSquared? + + Vector3.prototype.lengthSq = function lengthSq () { + + return this.x * this.x + this.y * this.y + this.z * this.z; + + }; + + Vector3.prototype.length = function length () { + + return Math.sqrt( this.x * this.x + this.y * this.y + this.z * this.z ); + + }; + + Vector3.prototype.manhattanLength = function manhattanLength () { + + return Math.abs( this.x ) + Math.abs( this.y ) + Math.abs( this.z ); + + }; + + Vector3.prototype.normalize = function normalize () { + + return this.divideScalar( this.length() || 1 ); + + }; + + Vector3.prototype.setLength = function setLength ( length ) { + + return this.normalize().multiplyScalar( length ); + + }; + + Vector3.prototype.lerp = function lerp ( v, alpha ) { + + this.x += ( v.x - this.x ) * alpha; + this.y += ( v.y - this.y ) * alpha; + this.z += ( v.z - this.z ) * alpha; + + return this; + + }; + + Vector3.prototype.lerpVectors = function lerpVectors ( v1, v2, alpha ) { + + this.x = v1.x + ( v2.x - v1.x ) * alpha; + this.y = v1.y + ( v2.y - v1.y ) * alpha; + this.z = v1.z + ( v2.z - v1.z ) * alpha; + + return this; + + }; + + Vector3.prototype.cross = function cross ( v, w ) { + + if ( w !== undefined ) { + + console.warn( 'THREE.Vector3: .cross() now only accepts one argument. Use .crossVectors( a, b ) instead.' ); + return this.crossVectors( v, w ); + + } + + return this.crossVectors( this, v ); + + }; + + Vector3.prototype.crossVectors = function crossVectors ( a, b ) { + + var ax = a.x, ay = a.y, az = a.z; + var bx = b.x, by = b.y, bz = b.z; + + this.x = ay * bz - az * by; + this.y = az * bx - ax * bz; + this.z = ax * by - ay * bx; + + return this; + + }; + + Vector3.prototype.projectOnVector = function projectOnVector ( v ) { + + var denominator = v.lengthSq(); + + if ( denominator === 0 ) { return this.set( 0, 0, 0 ); } + + var scalar = v.dot( this ) / denominator; + + return this.copy( v ).multiplyScalar( scalar ); + + }; + + Vector3.prototype.projectOnPlane = function projectOnPlane ( planeNormal ) { + + _vector.copy( this ).projectOnVector( planeNormal ); + + return this.sub( _vector ); + + }; + + Vector3.prototype.reflect = function reflect ( normal ) { + + // reflect incident vector off plane orthogonal to normal + // normal is assumed to have unit length + + return this.sub( _vector.copy( normal ).multiplyScalar( 2 * this.dot( normal ) ) ); + + }; + + Vector3.prototype.angleTo = function angleTo ( v ) { + + var denominator = Math.sqrt( this.lengthSq() * v.lengthSq() ); + + if ( denominator === 0 ) { return Math.PI / 2; } + + var theta = this.dot( v ) / denominator; + + // clamp, to handle numerical problems + + return Math.acos( MathUtils.clamp( theta, - 1, 1 ) ); + + }; + + Vector3.prototype.distanceTo = function distanceTo ( v ) { + + return Math.sqrt( this.distanceToSquared( v ) ); + + }; + + Vector3.prototype.distanceToSquared = function distanceToSquared ( v ) { + + var dx = this.x - v.x, dy = this.y - v.y, dz = this.z - v.z; + + return dx * dx + dy * dy + dz * dz; + + }; + + Vector3.prototype.manhattanDistanceTo = function manhattanDistanceTo ( v ) { + + return Math.abs( this.x - v.x ) + Math.abs( this.y - v.y ) + Math.abs( this.z - v.z ); + + }; + + Vector3.prototype.setFromSpherical = function setFromSpherical ( s ) { + + return this.setFromSphericalCoords( s.radius, s.phi, s.theta ); + + }; + + Vector3.prototype.setFromSphericalCoords = function setFromSphericalCoords ( radius, phi, theta ) { + + var sinPhiRadius = Math.sin( phi ) * radius; + + this.x = sinPhiRadius * Math.sin( theta ); + this.y = Math.cos( phi ) * radius; + this.z = sinPhiRadius * Math.cos( theta ); + + return this; + + }; + + Vector3.prototype.setFromCylindrical = function setFromCylindrical ( c ) { + + return this.setFromCylindricalCoords( c.radius, c.theta, c.y ); + + }; + + Vector3.prototype.setFromCylindricalCoords = function setFromCylindricalCoords ( radius, theta, y ) { + + this.x = radius * Math.sin( theta ); + this.y = y; + this.z = radius * Math.cos( theta ); + + return this; + + }; + + Vector3.prototype.setFromMatrixPosition = function setFromMatrixPosition ( m ) { + + var e = m.elements; + + this.x = e[ 12 ]; + this.y = e[ 13 ]; + this.z = e[ 14 ]; + + return this; + + }; + + Vector3.prototype.setFromMatrixScale = function setFromMatrixScale ( m ) { + + var sx = this.setFromMatrixColumn( m, 0 ).length(); + var sy = this.setFromMatrixColumn( m, 1 ).length(); + var sz = this.setFromMatrixColumn( m, 2 ).length(); + + this.x = sx; + this.y = sy; + this.z = sz; + + return this; + + }; + + Vector3.prototype.setFromMatrixColumn = function setFromMatrixColumn ( m, index ) { + + return this.fromArray( m.elements, index * 4 ); + + }; + + Vector3.prototype.setFromMatrix3Column = function setFromMatrix3Column ( m, index ) { + + return this.fromArray( m.elements, index * 3 ); + + }; + + Vector3.prototype.equals = function equals ( v ) { + + return ( ( v.x === this.x ) && ( v.y === this.y ) && ( v.z === this.z ) ); + + }; + + Vector3.prototype.fromArray = function fromArray ( array, offset ) { + + if ( offset === undefined ) { offset = 0; } + + this.x = array[ offset ]; + this.y = array[ offset + 1 ]; + this.z = array[ offset + 2 ]; + + return this; + + }; + + Vector3.prototype.toArray = function toArray ( array, offset ) { + + if ( array === undefined ) { array = []; } + if ( offset === undefined ) { offset = 0; } + + array[ offset ] = this.x; + array[ offset + 1 ] = this.y; + array[ offset + 2 ] = this.z; + + return array; + + }; + + Vector3.prototype.fromBufferAttribute = function fromBufferAttribute ( attribute, index, offset ) { + + if ( offset !== undefined ) { + + console.warn( 'THREE.Vector3: offset has been removed from .fromBufferAttribute().' ); + + } + + this.x = attribute.getX( index ); + this.y = attribute.getY( index ); + this.z = attribute.getZ( index ); + + return this; + + }; + + Vector3.prototype.random = function random () { + + this.x = Math.random(); + this.y = Math.random(); + this.z = Math.random(); + + return this; + + }; + + var _vector = new Vector3(); + var _quaternion = new Quaternion(); + + var Box3 = function Box3( min, max ) { + + Object.defineProperty( this, 'isBox3', { value: true } ); + + this.min = ( min !== undefined ) ? min : new Vector3( + Infinity, + Infinity, + Infinity ); + this.max = ( max !== undefined ) ? max : new Vector3( - Infinity, - Infinity, - Infinity ); + + }; + + Box3.prototype.set = function set ( min, max ) { + + this.min.copy( min ); + this.max.copy( max ); + + return this; + + }; + + Box3.prototype.setFromArray = function setFromArray ( array ) { + + var minX = + Infinity; + var minY = + Infinity; + var minZ = + Infinity; + + var maxX = - Infinity; + var maxY = - Infinity; + var maxZ = - Infinity; + + for ( var i = 0, l = array.length; i < l; i += 3 ) { + + var x = array[ i ]; + var y = array[ i + 1 ]; + var z = array[ i + 2 ]; + + if ( x < minX ) { minX = x; } + if ( y < minY ) { minY = y; } + if ( z < minZ ) { minZ = z; } + + if ( x > maxX ) { maxX = x; } + if ( y > maxY ) { maxY = y; } + if ( z > maxZ ) { maxZ = z; } + + } + + this.min.set( minX, minY, minZ ); + this.max.set( maxX, maxY, maxZ ); + + return this; + + }; + + Box3.prototype.setFromBufferAttribute = function setFromBufferAttribute ( attribute ) { + + var minX = + Infinity; + var minY = + Infinity; + var minZ = + Infinity; + + var maxX = - Infinity; + var maxY = - Infinity; + var maxZ = - Infinity; + + for ( var i = 0, l = attribute.count; i < l; i ++ ) { + + var x = attribute.getX( i ); + var y = attribute.getY( i ); + var z = attribute.getZ( i ); + + if ( x < minX ) { minX = x; } + if ( y < minY ) { minY = y; } + if ( z < minZ ) { minZ = z; } + + if ( x > maxX ) { maxX = x; } + if ( y > maxY ) { maxY = y; } + if ( z > maxZ ) { maxZ = z; } + + } + + this.min.set( minX, minY, minZ ); + this.max.set( maxX, maxY, maxZ ); + + return this; + + }; + + Box3.prototype.setFromPoints = function setFromPoints ( points ) { + + this.makeEmpty(); + + for ( var i = 0, il = points.length; i < il; i ++ ) { + + this.expandByPoint( points[ i ] ); + + } + + return this; + + }; + + Box3.prototype.setFromCenterAndSize = function setFromCenterAndSize ( center, size ) { + + var halfSize = _vector$1.copy( size ).multiplyScalar( 0.5 ); + + this.min.copy( center ).sub( halfSize ); + this.max.copy( center ).add( halfSize ); + + return this; + + }; + + Box3.prototype.setFromObject = function setFromObject ( object ) { + + this.makeEmpty(); + + return this.expandByObject( object ); + + }; + + Box3.prototype.clone = function clone () { + + return new this.constructor().copy( this ); + + }; + + Box3.prototype.copy = function copy ( box ) { + + this.min.copy( box.min ); + this.max.copy( box.max ); + + return this; + + }; + + Box3.prototype.makeEmpty = function makeEmpty () { + + this.min.x = this.min.y = this.min.z = + Infinity; + this.max.x = this.max.y = this.max.z = - Infinity; + + return this; + + }; + + Box3.prototype.isEmpty = function isEmpty () { + + // this is a more robust check for empty than ( volume <= 0 ) because volume can get positive with two negative axes + + return ( this.max.x < this.min.x ) || ( this.max.y < this.min.y ) || ( this.max.z < this.min.z ); + + }; + + Box3.prototype.getCenter = function getCenter ( target ) { + + if ( target === undefined ) { + + console.warn( 'THREE.Box3: .getCenter() target is now required' ); + target = new Vector3(); + + } + + return this.isEmpty() ? target.set( 0, 0, 0 ) : target.addVectors( this.min, this.max ).multiplyScalar( 0.5 ); + + }; + + Box3.prototype.getSize = function getSize ( target ) { + + if ( target === undefined ) { + + console.warn( 'THREE.Box3: .getSize() target is now required' ); + target = new Vector3(); + + } + + return this.isEmpty() ? target.set( 0, 0, 0 ) : target.subVectors( this.max, this.min ); + + }; + + Box3.prototype.expandByPoint = function expandByPoint ( point ) { + + this.min.min( point ); + this.max.max( point ); + + return this; + + }; + + Box3.prototype.expandByVector = function expandByVector ( vector ) { + + this.min.sub( vector ); + this.max.add( vector ); + + return this; + + }; + + Box3.prototype.expandByScalar = function expandByScalar ( scalar ) { + + this.min.addScalar( - scalar ); + this.max.addScalar( scalar ); + + return this; + + }; + + Box3.prototype.expandByObject = function expandByObject ( object ) { + + // Computes the world-axis-aligned bounding box of an object (including its children), + // accounting for both the object's, and children's, world transforms + + object.updateWorldMatrix( false, false ); + + var geometry = object.geometry; + + if ( geometry !== undefined ) { + + if ( geometry.boundingBox === null ) { + + geometry.computeBoundingBox(); + + } + + _box.copy( geometry.boundingBox ); + _box.applyMatrix4( object.matrixWorld ); + + this.union( _box ); + + } + + var children = object.children; + + for ( var i = 0, l = children.length; i < l; i ++ ) { + + this.expandByObject( children[ i ] ); + + } + + return this; + + }; + + Box3.prototype.containsPoint = function containsPoint ( point ) { + + return point.x < this.min.x || point.x > this.max.x || + point.y < this.min.y || point.y > this.max.y || + point.z < this.min.z || point.z > this.max.z ? false : true; + + }; + + Box3.prototype.containsBox = function containsBox ( box ) { + + return this.min.x <= box.min.x && box.max.x <= this.max.x && + this.min.y <= box.min.y && box.max.y <= this.max.y && + this.min.z <= box.min.z && box.max.z <= this.max.z; + + }; + + Box3.prototype.getParameter = function getParameter ( point, target ) { + + // This can potentially have a divide by zero if the box + // has a size dimension of 0. + + if ( target === undefined ) { + + console.warn( 'THREE.Box3: .getParameter() target is now required' ); + target = new Vector3(); + + } + + return target.set( + ( point.x - this.min.x ) / ( this.max.x - this.min.x ), + ( point.y - this.min.y ) / ( this.max.y - this.min.y ), + ( point.z - this.min.z ) / ( this.max.z - this.min.z ) + ); + + }; + + Box3.prototype.intersectsBox = function intersectsBox ( box ) { + + // using 6 splitting planes to rule out intersections. + return box.max.x < this.min.x || box.min.x > this.max.x || + box.max.y < this.min.y || box.min.y > this.max.y || + box.max.z < this.min.z || box.min.z > this.max.z ? false : true; + + }; + + Box3.prototype.intersectsSphere = function intersectsSphere ( sphere ) { + + // Find the point on the AABB closest to the sphere center. + this.clampPoint( sphere.center, _vector$1 ); + + // If that point is inside the sphere, the AABB and sphere intersect. + return _vector$1.distanceToSquared( sphere.center ) <= ( sphere.radius * sphere.radius ); + + }; + + Box3.prototype.intersectsPlane = function intersectsPlane ( plane ) { + + // We compute the minimum and maximum dot product values. If those values + // are on the same side (back or front) of the plane, then there is no intersection. + + var min, max; + + if ( plane.normal.x > 0 ) { + + min = plane.normal.x * this.min.x; + max = plane.normal.x * this.max.x; + + } else { + + min = plane.normal.x * this.max.x; + max = plane.normal.x * this.min.x; + + } + + if ( plane.normal.y > 0 ) { + + min += plane.normal.y * this.min.y; + max += plane.normal.y * this.max.y; + + } else { + + min += plane.normal.y * this.max.y; + max += plane.normal.y * this.min.y; + + } + + if ( plane.normal.z > 0 ) { + + min += plane.normal.z * this.min.z; + max += plane.normal.z * this.max.z; + + } else { + + min += plane.normal.z * this.max.z; + max += plane.normal.z * this.min.z; + + } + + return ( min <= - plane.constant && max >= - plane.constant ); + + }; + + Box3.prototype.intersectsTriangle = function intersectsTriangle ( triangle ) { + + if ( this.isEmpty() ) { + + return false; + + } + + // compute box center and extents + this.getCenter( _center ); + _extents.subVectors( this.max, _center ); + + // translate triangle to aabb origin + _v0.subVectors( triangle.a, _center ); + _v1.subVectors( triangle.b, _center ); + _v2.subVectors( triangle.c, _center ); + + // compute edge vectors for triangle + _f0.subVectors( _v1, _v0 ); + _f1.subVectors( _v2, _v1 ); + _f2.subVectors( _v0, _v2 ); + + // test against axes that are given by cross product combinations of the edges of the triangle and the edges of the aabb + // make an axis testing of each of the 3 sides of the aabb against each of the 3 sides of the triangle = 9 axis of separation + // axis_ij = u_i x f_j (u0, u1, u2 = face normals of aabb = x,y,z axes vectors since aabb is axis aligned) + var axes = [ + 0, - _f0.z, _f0.y, 0, - _f1.z, _f1.y, 0, - _f2.z, _f2.y, + _f0.z, 0, - _f0.x, _f1.z, 0, - _f1.x, _f2.z, 0, - _f2.x, + - _f0.y, _f0.x, 0, - _f1.y, _f1.x, 0, - _f2.y, _f2.x, 0 + ]; + if ( ! satForAxes( axes, _v0, _v1, _v2, _extents ) ) { + + return false; + + } + + // test 3 face normals from the aabb + axes = [ 1, 0, 0, 0, 1, 0, 0, 0, 1 ]; + if ( ! satForAxes( axes, _v0, _v1, _v2, _extents ) ) { + + return false; + + } + + // finally testing the face normal of the triangle + // use already existing triangle edge vectors here + _triangleNormal.crossVectors( _f0, _f1 ); + axes = [ _triangleNormal.x, _triangleNormal.y, _triangleNormal.z ]; + + return satForAxes( axes, _v0, _v1, _v2, _extents ); + + }; + + Box3.prototype.clampPoint = function clampPoint ( point, target ) { + + if ( target === undefined ) { + + console.warn( 'THREE.Box3: .clampPoint() target is now required' ); + target = new Vector3(); + + } + + return target.copy( point ).clamp( this.min, this.max ); + + }; + + Box3.prototype.distanceToPoint = function distanceToPoint ( point ) { + + var clampedPoint = _vector$1.copy( point ).clamp( this.min, this.max ); + + return clampedPoint.sub( point ).length(); + + }; + + Box3.prototype.getBoundingSphere = function getBoundingSphere ( target ) { + + if ( target === undefined ) { + + console.error( 'THREE.Box3: .getBoundingSphere() target is now required' ); + //target = new Sphere(); // removed to avoid cyclic dependency + + } + + this.getCenter( target.center ); + + target.radius = this.getSize( _vector$1 ).length() * 0.5; + + return target; + + }; + + Box3.prototype.intersect = function intersect ( box ) { + + this.min.max( box.min ); + this.max.min( box.max ); + + // ensure that if there is no overlap, the result is fully empty, not slightly empty with non-inf/+inf values that will cause subsequence intersects to erroneously return valid values. + if ( this.isEmpty() ) { this.makeEmpty(); } + + return this; + + }; + + Box3.prototype.union = function union ( box ) { + + this.min.min( box.min ); + this.max.max( box.max ); + + return this; + + }; + + Box3.prototype.applyMatrix4 = function applyMatrix4 ( matrix ) { + + // transform of empty box is an empty box. + if ( this.isEmpty() ) { return this; } + + // NOTE: I am using a binary pattern to specify all 2^3 combinations below + _points[ 0 ].set( this.min.x, this.min.y, this.min.z ).applyMatrix4( matrix ); // 000 + _points[ 1 ].set( this.min.x, this.min.y, this.max.z ).applyMatrix4( matrix ); // 001 + _points[ 2 ].set( this.min.x, this.max.y, this.min.z ).applyMatrix4( matrix ); // 010 + _points[ 3 ].set( this.min.x, this.max.y, this.max.z ).applyMatrix4( matrix ); // 011 + _points[ 4 ].set( this.max.x, this.min.y, this.min.z ).applyMatrix4( matrix ); // 100 + _points[ 5 ].set( this.max.x, this.min.y, this.max.z ).applyMatrix4( matrix ); // 101 + _points[ 6 ].set( this.max.x, this.max.y, this.min.z ).applyMatrix4( matrix ); // 110 + _points[ 7 ].set( this.max.x, this.max.y, this.max.z ).applyMatrix4( matrix ); // 111 + + this.setFromPoints( _points ); + + return this; + + }; + + Box3.prototype.translate = function translate ( offset ) { + + this.min.add( offset ); + this.max.add( offset ); + + return this; + + }; + + Box3.prototype.equals = function equals ( box ) { + + return box.min.equals( this.min ) && box.max.equals( this.max ); + + }; + + function satForAxes( axes, v0, v1, v2, extents ) { + + for ( var i = 0, j = axes.length - 3; i <= j; i += 3 ) { + + _testAxis.fromArray( axes, i ); + // project the aabb onto the seperating axis + var r = extents.x * Math.abs( _testAxis.x ) + extents.y * Math.abs( _testAxis.y ) + extents.z * Math.abs( _testAxis.z ); + // project all 3 vertices of the triangle onto the seperating axis + var p0 = v0.dot( _testAxis ); + var p1 = v1.dot( _testAxis ); + var p2 = v2.dot( _testAxis ); + // actual test, basically see if either of the most extreme of the triangle points intersects r + if ( Math.max( - Math.max( p0, p1, p2 ), Math.min( p0, p1, p2 ) ) > r ) { + + // points of the projected triangle are outside the projected half-length of the aabb + // the axis is seperating and we can exit + return false; + + } + + } + + return true; + + } + + var _points = [ + new Vector3(), + new Vector3(), + new Vector3(), + new Vector3(), + new Vector3(), + new Vector3(), + new Vector3(), + new Vector3() + ]; + + var _vector$1 = new Vector3(); + + var _box = new Box3(); + + // triangle centered vertices + + var _v0 = new Vector3(); + var _v1 = new Vector3(); + var _v2 = new Vector3(); + + // triangle edge vectors + + var _f0 = new Vector3(); + var _f1 = new Vector3(); + var _f2 = new Vector3(); + + var _center = new Vector3(); + var _extents = new Vector3(); + var _triangleNormal = new Vector3(); + var _testAxis = new Vector3(); + + var _box$1 = new Box3(); + + var Sphere = function Sphere( center, radius ) { + + this.center = ( center !== undefined ) ? center : new Vector3(); + this.radius = ( radius !== undefined ) ? radius : - 1; + + }; + + Sphere.prototype.set = function set ( center, radius ) { + + this.center.copy( center ); + this.radius = radius; + + return this; + + }; + + Sphere.prototype.setFromPoints = function setFromPoints ( points, optionalCenter ) { + + var center = this.center; + + if ( optionalCenter !== undefined ) { + + center.copy( optionalCenter ); + + } else { + + _box$1.setFromPoints( points ).getCenter( center ); + + } + + var maxRadiusSq = 0; + + for ( var i = 0, il = points.length; i < il; i ++ ) { + + maxRadiusSq = Math.max( maxRadiusSq, center.distanceToSquared( points[ i ] ) ); + + } + + this.radius = Math.sqrt( maxRadiusSq ); + + return this; + + }; + + Sphere.prototype.clone = function clone () { + + return new this.constructor().copy( this ); + + }; + + Sphere.prototype.copy = function copy ( sphere ) { + + this.center.copy( sphere.center ); + this.radius = sphere.radius; + + return this; + + }; + + Sphere.prototype.isEmpty = function isEmpty () { + + return ( this.radius < 0 ); + + }; + + Sphere.prototype.makeEmpty = function makeEmpty () { + + this.center.set( 0, 0, 0 ); + this.radius = - 1; + + return this; + + }; + + Sphere.prototype.containsPoint = function containsPoint ( point ) { + + return ( point.distanceToSquared( this.center ) <= ( this.radius * this.radius ) ); + + }; + + Sphere.prototype.distanceToPoint = function distanceToPoint ( point ) { + + return ( point.distanceTo( this.center ) - this.radius ); + + }; + + Sphere.prototype.intersectsSphere = function intersectsSphere ( sphere ) { + + var radiusSum = this.radius + sphere.radius; + + return sphere.center.distanceToSquared( this.center ) <= ( radiusSum * radiusSum ); + + }; + + Sphere.prototype.intersectsBox = function intersectsBox ( box ) { + + return box.intersectsSphere( this ); + + }; + + Sphere.prototype.intersectsPlane = function intersectsPlane ( plane ) { + + return Math.abs( plane.distanceToPoint( this.center ) ) <= this.radius; + + }; + + Sphere.prototype.clampPoint = function clampPoint ( point, target ) { + + var deltaLengthSq = this.center.distanceToSquared( point ); + + if ( target === undefined ) { + + console.warn( 'THREE.Sphere: .clampPoint() target is now required' ); + target = new Vector3(); + + } + + target.copy( point ); + + if ( deltaLengthSq > ( this.radius * this.radius ) ) { + + target.sub( this.center ).normalize(); + target.multiplyScalar( this.radius ).add( this.center ); + + } + + return target; + + }; + + Sphere.prototype.getBoundingBox = function getBoundingBox ( target ) { + + if ( target === undefined ) { + + console.warn( 'THREE.Sphere: .getBoundingBox() target is now required' ); + target = new Box3(); + + } + + if ( this.isEmpty() ) { + + // Empty sphere produces empty bounding box + target.makeEmpty(); + return target; + + } + + target.set( this.center, this.center ); + target.expandByScalar( this.radius ); + + return target; + + }; + + Sphere.prototype.applyMatrix4 = function applyMatrix4 ( matrix ) { + + this.center.applyMatrix4( matrix ); + this.radius = this.radius * matrix.getMaxScaleOnAxis(); + + return this; + + }; + + Sphere.prototype.translate = function translate ( offset ) { + + this.center.add( offset ); + + return this; + + }; + + Sphere.prototype.equals = function equals ( sphere ) { + + return sphere.center.equals( this.center ) && ( sphere.radius === this.radius ); + + }; + + var _vector$2 = new Vector3(); + var _segCenter = new Vector3(); + var _segDir = new Vector3(); + var _diff = new Vector3(); + + var _edge1 = new Vector3(); + var _edge2 = new Vector3(); + var _normal = new Vector3(); + + var Ray = function Ray( origin, direction ) { + + this.origin = ( origin !== undefined ) ? origin : new Vector3(); + this.direction = ( direction !== undefined ) ? direction : new Vector3( 0, 0, - 1 ); + + }; + + Ray.prototype.set = function set ( origin, direction ) { + + this.origin.copy( origin ); + this.direction.copy( direction ); + + return this; + + }; + + Ray.prototype.clone = function clone () { + + return new this.constructor().copy( this ); + + }; + + Ray.prototype.copy = function copy ( ray ) { + + this.origin.copy( ray.origin ); + this.direction.copy( ray.direction ); + + return this; + + }; + + Ray.prototype.at = function at ( t, target ) { + + if ( target === undefined ) { + + console.warn( 'THREE.Ray: .at() target is now required' ); + target = new Vector3(); + + } + + return target.copy( this.direction ).multiplyScalar( t ).add( this.origin ); + + }; + + Ray.prototype.lookAt = function lookAt ( v ) { + + this.direction.copy( v ).sub( this.origin ).normalize(); + + return this; + + }; + + Ray.prototype.recast = function recast ( t ) { + + this.origin.copy( this.at( t, _vector$2 ) ); + + return this; + + }; + + Ray.prototype.closestPointToPoint = function closestPointToPoint ( point, target ) { + + if ( target === undefined ) { + + console.warn( 'THREE.Ray: .closestPointToPoint() target is now required' ); + target = new Vector3(); + + } + + target.subVectors( point, this.origin ); + + var directionDistance = target.dot( this.direction ); + + if ( directionDistance < 0 ) { + + return target.copy( this.origin ); + + } + + return target.copy( this.direction ).multiplyScalar( directionDistance ).add( this.origin ); + + }; + + Ray.prototype.distanceToPoint = function distanceToPoint ( point ) { + + return Math.sqrt( this.distanceSqToPoint( point ) ); + + }; + + Ray.prototype.distanceSqToPoint = function distanceSqToPoint ( point ) { + + var directionDistance = _vector$2.subVectors( point, this.origin ).dot( this.direction ); + + // point behind the ray + + if ( directionDistance < 0 ) { + + return this.origin.distanceToSquared( point ); + + } + + _vector$2.copy( this.direction ).multiplyScalar( directionDistance ).add( this.origin ); + + return _vector$2.distanceToSquared( point ); + + }; + + Ray.prototype.distanceSqToSegment = function distanceSqToSegment ( v0, v1, optionalPointOnRay, optionalPointOnSegment ) { + + // from http://www.geometrictools.com/GTEngine/Include/Mathematics/GteDistRaySegment.h + // It returns the min distance between the ray and the segment + // defined by v0 and v1 + // It can also set two optional targets : + // - The closest point on the ray + // - The closest point on the segment + + _segCenter.copy( v0 ).add( v1 ).multiplyScalar( 0.5 ); + _segDir.copy( v1 ).sub( v0 ).normalize(); + _diff.copy( this.origin ).sub( _segCenter ); + + var segExtent = v0.distanceTo( v1 ) * 0.5; + var a01 = - this.direction.dot( _segDir ); + var b0 = _diff.dot( this.direction ); + var b1 = - _diff.dot( _segDir ); + var c = _diff.lengthSq(); + var det = Math.abs( 1 - a01 * a01 ); + var s0, s1, sqrDist, extDet; + + if ( det > 0 ) { + + // The ray and segment are not parallel. + + s0 = a01 * b1 - b0; + s1 = a01 * b0 - b1; + extDet = segExtent * det; + + if ( s0 >= 0 ) { + + if ( s1 >= - extDet ) { + + if ( s1 <= extDet ) { + + // region 0 + // Minimum at interior points of ray and segment. + + var invDet = 1 / det; + s0 *= invDet; + s1 *= invDet; + sqrDist = s0 * ( s0 + a01 * s1 + 2 * b0 ) + s1 * ( a01 * s0 + s1 + 2 * b1 ) + c; + + } else { + + // region 1 + + s1 = segExtent; + s0 = Math.max( 0, - ( a01 * s1 + b0 ) ); + sqrDist = - s0 * s0 + s1 * ( s1 + 2 * b1 ) + c; + + } + + } else { + + // region 5 + + s1 = - segExtent; + s0 = Math.max( 0, - ( a01 * s1 + b0 ) ); + sqrDist = - s0 * s0 + s1 * ( s1 + 2 * b1 ) + c; + + } + + } else { + + if ( s1 <= - extDet ) { + + // region 4 + + s0 = Math.max( 0, - ( - a01 * segExtent + b0 ) ); + s1 = ( s0 > 0 ) ? - segExtent : Math.min( Math.max( - segExtent, - b1 ), segExtent ); + sqrDist = - s0 * s0 + s1 * ( s1 + 2 * b1 ) + c; + + } else if ( s1 <= extDet ) { + + // region 3 + + s0 = 0; + s1 = Math.min( Math.max( - segExtent, - b1 ), segExtent ); + sqrDist = s1 * ( s1 + 2 * b1 ) + c; + + } else { + + // region 2 + + s0 = Math.max( 0, - ( a01 * segExtent + b0 ) ); + s1 = ( s0 > 0 ) ? segExtent : Math.min( Math.max( - segExtent, - b1 ), segExtent ); + sqrDist = - s0 * s0 + s1 * ( s1 + 2 * b1 ) + c; + + } + + } + + } else { + + // Ray and segment are parallel. + + s1 = ( a01 > 0 ) ? - segExtent : segExtent; + s0 = Math.max( 0, - ( a01 * s1 + b0 ) ); + sqrDist = - s0 * s0 + s1 * ( s1 + 2 * b1 ) + c; + + } + + if ( optionalPointOnRay ) { + + optionalPointOnRay.copy( this.direction ).multiplyScalar( s0 ).add( this.origin ); + + } + + if ( optionalPointOnSegment ) { + + optionalPointOnSegment.copy( _segDir ).multiplyScalar( s1 ).add( _segCenter ); + + } + + return sqrDist; + + }; + + Ray.prototype.intersectSphere = function intersectSphere ( sphere, target ) { + + _vector$2.subVectors( sphere.center, this.origin ); + var tca = _vector$2.dot( this.direction ); + var d2 = _vector$2.dot( _vector$2 ) - tca * tca; + var radius2 = sphere.radius * sphere.radius; + + if ( d2 > radius2 ) { return null; } + + var thc = Math.sqrt( radius2 - d2 ); + + // t0 = first intersect point - entrance on front of sphere + var t0 = tca - thc; + + // t1 = second intersect point - exit point on back of sphere + var t1 = tca + thc; + + // test to see if both t0 and t1 are behind the ray - if so, return null + if ( t0 < 0 && t1 < 0 ) { return null; } + + // test to see if t0 is behind the ray: + // if it is, the ray is inside the sphere, so return the second exit point scaled by t1, + // in order to always return an intersect point that is in front of the ray. + if ( t0 < 0 ) { return this.at( t1, target ); } + + // else t0 is in front of the ray, so return the first collision point scaled by t0 + return this.at( t0, target ); + + }; + + Ray.prototype.intersectsSphere = function intersectsSphere ( sphere ) { + + return this.distanceSqToPoint( sphere.center ) <= ( sphere.radius * sphere.radius ); + + }; + + Ray.prototype.distanceToPlane = function distanceToPlane ( plane ) { + + var denominator = plane.normal.dot( this.direction ); + + if ( denominator === 0 ) { + + // line is coplanar, return origin + if ( plane.distanceToPoint( this.origin ) === 0 ) { + + return 0; + + } + + // Null is preferable to undefined since undefined means.... it is undefined + + return null; + + } + + var t = - ( this.origin.dot( plane.normal ) + plane.constant ) / denominator; + + // Return if the ray never intersects the plane + + return t >= 0 ? t : null; + + }; + + Ray.prototype.intersectPlane = function intersectPlane ( plane, target ) { + + var t = this.distanceToPlane( plane ); + + if ( t === null ) { + + return null; + + } + + return this.at( t, target ); + + }; + + Ray.prototype.intersectsPlane = function intersectsPlane ( plane ) { + + // check if the ray lies on the plane first + + var distToPoint = plane.distanceToPoint( this.origin ); + + if ( distToPoint === 0 ) { + + return true; + + } + + var denominator = plane.normal.dot( this.direction ); + + if ( denominator * distToPoint < 0 ) { + + return true; + + } + + // ray origin is behind the plane (and is pointing behind it) + + return false; + + }; + + Ray.prototype.intersectBox = function intersectBox ( box, target ) { + + var tmin, tmax, tymin, tymax, tzmin, tzmax; + + var invdirx = 1 / this.direction.x, + invdiry = 1 / this.direction.y, + invdirz = 1 / this.direction.z; + + var origin = this.origin; + + if ( invdirx >= 0 ) { + + tmin = ( box.min.x - origin.x ) * invdirx; + tmax = ( box.max.x - origin.x ) * invdirx; + + } else { + + tmin = ( box.max.x - origin.x ) * invdirx; + tmax = ( box.min.x - origin.x ) * invdirx; + + } + + if ( invdiry >= 0 ) { + + tymin = ( box.min.y - origin.y ) * invdiry; + tymax = ( box.max.y - origin.y ) * invdiry; + + } else { + + tymin = ( box.max.y - origin.y ) * invdiry; + tymax = ( box.min.y - origin.y ) * invdiry; + + } + + if ( ( tmin > tymax ) || ( tymin > tmax ) ) { return null; } + + // These lines also handle the case where tmin or tmax is NaN + // (result of 0 * Infinity). x !== x returns true if x is NaN + + if ( tymin > tmin || tmin !== tmin ) { tmin = tymin; } + + if ( tymax < tmax || tmax !== tmax ) { tmax = tymax; } + + if ( invdirz >= 0 ) { + + tzmin = ( box.min.z - origin.z ) * invdirz; + tzmax = ( box.max.z - origin.z ) * invdirz; + + } else { + + tzmin = ( box.max.z - origin.z ) * invdirz; + tzmax = ( box.min.z - origin.z ) * invdirz; + + } + + if ( ( tmin > tzmax ) || ( tzmin > tmax ) ) { return null; } + + if ( tzmin > tmin || tmin !== tmin ) { tmin = tzmin; } + + if ( tzmax < tmax || tmax !== tmax ) { tmax = tzmax; } + + //return point closest to the ray (positive side) + + if ( tmax < 0 ) { return null; } + + return this.at( tmin >= 0 ? tmin : tmax, target ); + + }; + + Ray.prototype.intersectsBox = function intersectsBox ( box ) { + + return this.intersectBox( box, _vector$2 ) !== null; + + }; + + Ray.prototype.intersectTriangle = function intersectTriangle ( a, b, c, backfaceCulling, target ) { + + // Compute the offset origin, edges, and normal. + + // from http://www.geometrictools.com/GTEngine/Include/Mathematics/GteIntrRay3Triangle3.h + + _edge1.subVectors( b, a ); + _edge2.subVectors( c, a ); + _normal.crossVectors( _edge1, _edge2 ); + + // Solve Q + t*D = b1*E1 + b2*E2 (Q = kDiff, D = ray direction, + // E1 = kEdge1, E2 = kEdge2, N = Cross(E1,E2)) by + // |Dot(D,N)|*b1 = sign(Dot(D,N))*Dot(D,Cross(Q,E2)) + // |Dot(D,N)|*b2 = sign(Dot(D,N))*Dot(D,Cross(E1,Q)) + // |Dot(D,N)|*t = -sign(Dot(D,N))*Dot(Q,N) + var DdN = this.direction.dot( _normal ); + var sign; + + if ( DdN > 0 ) { + + if ( backfaceCulling ) { return null; } + sign = 1; + + } else if ( DdN < 0 ) { + + sign = - 1; + DdN = - DdN; + + } else { + + return null; + + } + + _diff.subVectors( this.origin, a ); + var DdQxE2 = sign * this.direction.dot( _edge2.crossVectors( _diff, _edge2 ) ); + + // b1 < 0, no intersection + if ( DdQxE2 < 0 ) { + + return null; + + } + + var DdE1xQ = sign * this.direction.dot( _edge1.cross( _diff ) ); + + // b2 < 0, no intersection + if ( DdE1xQ < 0 ) { + + return null; + + } + + // b1+b2 > 1, no intersection + if ( DdQxE2 + DdE1xQ > DdN ) { + + return null; + + } + + // Line intersects triangle, check if ray does. + var QdN = - sign * _diff.dot( _normal ); + + // t < 0, no intersection + if ( QdN < 0 ) { + + return null; + + } + + // Ray intersects triangle. + return this.at( QdN / DdN, target ); + + }; + + Ray.prototype.applyMatrix4 = function applyMatrix4 ( matrix4 ) { + + this.origin.applyMatrix4( matrix4 ); + this.direction.transformDirection( matrix4 ); + + return this; + + }; + + Ray.prototype.equals = function equals ( ray ) { + + return ray.origin.equals( this.origin ) && ray.direction.equals( this.direction ); + + }; + + var Matrix4 = function Matrix4() { + + Object.defineProperty( this, 'isMatrix4', { value: true } ); + + this.elements = [ + + 1, 0, 0, 0, + 0, 1, 0, 0, + 0, 0, 1, 0, + 0, 0, 0, 1 + + ]; + + if ( arguments.length > 0 ) { + + console.error( 'THREE.Matrix4: the constructor no longer reads arguments. use .set() instead.' ); + + } + + }; + + Matrix4.prototype.set = function set ( n11, n12, n13, n14, n21, n22, n23, n24, n31, n32, n33, n34, n41, n42, n43, n44 ) { + + var te = this.elements; + + te[ 0 ] = n11; te[ 4 ] = n12; te[ 8 ] = n13; te[ 12 ] = n14; + te[ 1 ] = n21; te[ 5 ] = n22; te[ 9 ] = n23; te[ 13 ] = n24; + te[ 2 ] = n31; te[ 6 ] = n32; te[ 10 ] = n33; te[ 14 ] = n34; + te[ 3 ] = n41; te[ 7 ] = n42; te[ 11 ] = n43; te[ 15 ] = n44; + + return this; + + }; + + Matrix4.prototype.identity = function identity () { + + this.set( + + 1, 0, 0, 0, + 0, 1, 0, 0, + 0, 0, 1, 0, + 0, 0, 0, 1 + + ); + + return this; + + }; + + Matrix4.prototype.clone = function clone () { + + return new Matrix4().fromArray( this.elements ); + + }; + + Matrix4.prototype.copy = function copy ( m ) { + + var te = this.elements; + var me = m.elements; + + te[ 0 ] = me[ 0 ]; te[ 1 ] = me[ 1 ]; te[ 2 ] = me[ 2 ]; te[ 3 ] = me[ 3 ]; + te[ 4 ] = me[ 4 ]; te[ 5 ] = me[ 5 ]; te[ 6 ] = me[ 6 ]; te[ 7 ] = me[ 7 ]; + te[ 8 ] = me[ 8 ]; te[ 9 ] = me[ 9 ]; te[ 10 ] = me[ 10 ]; te[ 11 ] = me[ 11 ]; + te[ 12 ] = me[ 12 ]; te[ 13 ] = me[ 13 ]; te[ 14 ] = me[ 14 ]; te[ 15 ] = me[ 15 ]; + + return this; + + }; + + Matrix4.prototype.copyPosition = function copyPosition ( m ) { + + var te = this.elements, me = m.elements; + + te[ 12 ] = me[ 12 ]; + te[ 13 ] = me[ 13 ]; + te[ 14 ] = me[ 14 ]; + + return this; + + }; + + Matrix4.prototype.extractBasis = function extractBasis ( xAxis, yAxis, zAxis ) { + + xAxis.setFromMatrixColumn( this, 0 ); + yAxis.setFromMatrixColumn( this, 1 ); + zAxis.setFromMatrixColumn( this, 2 ); + + return this; + + }; + + Matrix4.prototype.makeBasis = function makeBasis ( xAxis, yAxis, zAxis ) { + + this.set( + xAxis.x, yAxis.x, zAxis.x, 0, + xAxis.y, yAxis.y, zAxis.y, 0, + xAxis.z, yAxis.z, zAxis.z, 0, + 0, 0, 0, 1 + ); + + return this; + + }; + + Matrix4.prototype.extractRotation = function extractRotation ( m ) { + + // this method does not support reflection matrices + + var te = this.elements; + var me = m.elements; + + var scaleX = 1 / _v1$1.setFromMatrixColumn( m, 0 ).length(); + var scaleY = 1 / _v1$1.setFromMatrixColumn( m, 1 ).length(); + var scaleZ = 1 / _v1$1.setFromMatrixColumn( m, 2 ).length(); + + te[ 0 ] = me[ 0 ] * scaleX; + te[ 1 ] = me[ 1 ] * scaleX; + te[ 2 ] = me[ 2 ] * scaleX; + te[ 3 ] = 0; + + te[ 4 ] = me[ 4 ] * scaleY; + te[ 5 ] = me[ 5 ] * scaleY; + te[ 6 ] = me[ 6 ] * scaleY; + te[ 7 ] = 0; + + te[ 8 ] = me[ 8 ] * scaleZ; + te[ 9 ] = me[ 9 ] * scaleZ; + te[ 10 ] = me[ 10 ] * scaleZ; + te[ 11 ] = 0; + + te[ 12 ] = 0; + te[ 13 ] = 0; + te[ 14 ] = 0; + te[ 15 ] = 1; + + return this; + + }; + + Matrix4.prototype.makeRotationFromEuler = function makeRotationFromEuler ( euler ) { + + if ( ! ( euler && euler.isEuler ) ) { + + console.error( 'THREE.Matrix4: .makeRotationFromEuler() now expects a Euler rotation rather than a Vector3 and order.' ); + + } + + var te = this.elements; + + var x = euler.x, y = euler.y, z = euler.z; + var a = Math.cos( x ), b = Math.sin( x ); + var c = Math.cos( y ), d = Math.sin( y ); + var e = Math.cos( z ), f = Math.sin( z ); + + if ( euler.order === 'XYZ' ) { + + var ae = a * e, af = a * f, be = b * e, bf = b * f; + + te[ 0 ] = c * e; + te[ 4 ] = - c * f; + te[ 8 ] = d; + + te[ 1 ] = af + be * d; + te[ 5 ] = ae - bf * d; + te[ 9 ] = - b * c; + + te[ 2 ] = bf - ae * d; + te[ 6 ] = be + af * d; + te[ 10 ] = a * c; + + } else if ( euler.order === 'YXZ' ) { + + var ce = c * e, cf = c * f, de = d * e, df = d * f; + + te[ 0 ] = ce + df * b; + te[ 4 ] = de * b - cf; + te[ 8 ] = a * d; + + te[ 1 ] = a * f; + te[ 5 ] = a * e; + te[ 9 ] = - b; + + te[ 2 ] = cf * b - de; + te[ 6 ] = df + ce * b; + te[ 10 ] = a * c; + + } else if ( euler.order === 'ZXY' ) { + + var ce$1 = c * e, cf$1 = c * f, de$1 = d * e, df$1 = d * f; + + te[ 0 ] = ce$1 - df$1 * b; + te[ 4 ] = - a * f; + te[ 8 ] = de$1 + cf$1 * b; + + te[ 1 ] = cf$1 + de$1 * b; + te[ 5 ] = a * e; + te[ 9 ] = df$1 - ce$1 * b; + + te[ 2 ] = - a * d; + te[ 6 ] = b; + te[ 10 ] = a * c; + + } else if ( euler.order === 'ZYX' ) { + + var ae$1 = a * e, af$1 = a * f, be$1 = b * e, bf$1 = b * f; + + te[ 0 ] = c * e; + te[ 4 ] = be$1 * d - af$1; + te[ 8 ] = ae$1 * d + bf$1; + + te[ 1 ] = c * f; + te[ 5 ] = bf$1 * d + ae$1; + te[ 9 ] = af$1 * d - be$1; + + te[ 2 ] = - d; + te[ 6 ] = b * c; + te[ 10 ] = a * c; + + } else if ( euler.order === 'YZX' ) { + + var ac = a * c, ad = a * d, bc = b * c, bd = b * d; + + te[ 0 ] = c * e; + te[ 4 ] = bd - ac * f; + te[ 8 ] = bc * f + ad; + + te[ 1 ] = f; + te[ 5 ] = a * e; + te[ 9 ] = - b * e; + + te[ 2 ] = - d * e; + te[ 6 ] = ad * f + bc; + te[ 10 ] = ac - bd * f; + + } else if ( euler.order === 'XZY' ) { + + var ac$1 = a * c, ad$1 = a * d, bc$1 = b * c, bd$1 = b * d; + + te[ 0 ] = c * e; + te[ 4 ] = - f; + te[ 8 ] = d * e; + + te[ 1 ] = ac$1 * f + bd$1; + te[ 5 ] = a * e; + te[ 9 ] = ad$1 * f - bc$1; + + te[ 2 ] = bc$1 * f - ad$1; + te[ 6 ] = b * e; + te[ 10 ] = bd$1 * f + ac$1; + + } + + // bottom row + te[ 3 ] = 0; + te[ 7 ] = 0; + te[ 11 ] = 0; + + // last column + te[ 12 ] = 0; + te[ 13 ] = 0; + te[ 14 ] = 0; + te[ 15 ] = 1; + + return this; + + }; + + Matrix4.prototype.makeRotationFromQuaternion = function makeRotationFromQuaternion ( q ) { + + return this.compose( _zero, q, _one ); + + }; + + Matrix4.prototype.lookAt = function lookAt ( eye, target, up ) { + + var te = this.elements; + + _z.subVectors( eye, target ); + + if ( _z.lengthSq() === 0 ) { + + // eye and target are in the same position + + _z.z = 1; + + } + + _z.normalize(); + _x.crossVectors( up, _z ); + + if ( _x.lengthSq() === 0 ) { + + // up and z are parallel + + if ( Math.abs( up.z ) === 1 ) { + + _z.x += 0.0001; + + } else { + + _z.z += 0.0001; + + } + + _z.normalize(); + _x.crossVectors( up, _z ); + + } + + _x.normalize(); + _y.crossVectors( _z, _x ); + + te[ 0 ] = _x.x; te[ 4 ] = _y.x; te[ 8 ] = _z.x; + te[ 1 ] = _x.y; te[ 5 ] = _y.y; te[ 9 ] = _z.y; + te[ 2 ] = _x.z; te[ 6 ] = _y.z; te[ 10 ] = _z.z; + + return this; + + }; + + Matrix4.prototype.multiply = function multiply ( m, n ) { + + if ( n !== undefined ) { + + console.warn( 'THREE.Matrix4: .multiply() now only accepts one argument. Use .multiplyMatrices( a, b ) instead.' ); + return this.multiplyMatrices( m, n ); + + } + + return this.multiplyMatrices( this, m ); + + }; + + Matrix4.prototype.premultiply = function premultiply ( m ) { + + return this.multiplyMatrices( m, this ); + + }; + + Matrix4.prototype.multiplyMatrices = function multiplyMatrices ( a, b ) { + + var ae = a.elements; + var be = b.elements; + var te = this.elements; + + var a11 = ae[ 0 ], a12 = ae[ 4 ], a13 = ae[ 8 ], a14 = ae[ 12 ]; + var a21 = ae[ 1 ], a22 = ae[ 5 ], a23 = ae[ 9 ], a24 = ae[ 13 ]; + var a31 = ae[ 2 ], a32 = ae[ 6 ], a33 = ae[ 10 ], a34 = ae[ 14 ]; + var a41 = ae[ 3 ], a42 = ae[ 7 ], a43 = ae[ 11 ], a44 = ae[ 15 ]; + + var b11 = be[ 0 ], b12 = be[ 4 ], b13 = be[ 8 ], b14 = be[ 12 ]; + var b21 = be[ 1 ], b22 = be[ 5 ], b23 = be[ 9 ], b24 = be[ 13 ]; + var b31 = be[ 2 ], b32 = be[ 6 ], b33 = be[ 10 ], b34 = be[ 14 ]; + var b41 = be[ 3 ], b42 = be[ 7 ], b43 = be[ 11 ], b44 = be[ 15 ]; + + te[ 0 ] = a11 * b11 + a12 * b21 + a13 * b31 + a14 * b41; + te[ 4 ] = a11 * b12 + a12 * b22 + a13 * b32 + a14 * b42; + te[ 8 ] = a11 * b13 + a12 * b23 + a13 * b33 + a14 * b43; + te[ 12 ] = a11 * b14 + a12 * b24 + a13 * b34 + a14 * b44; + + te[ 1 ] = a21 * b11 + a22 * b21 + a23 * b31 + a24 * b41; + te[ 5 ] = a21 * b12 + a22 * b22 + a23 * b32 + a24 * b42; + te[ 9 ] = a21 * b13 + a22 * b23 + a23 * b33 + a24 * b43; + te[ 13 ] = a21 * b14 + a22 * b24 + a23 * b34 + a24 * b44; + + te[ 2 ] = a31 * b11 + a32 * b21 + a33 * b31 + a34 * b41; + te[ 6 ] = a31 * b12 + a32 * b22 + a33 * b32 + a34 * b42; + te[ 10 ] = a31 * b13 + a32 * b23 + a33 * b33 + a34 * b43; + te[ 14 ] = a31 * b14 + a32 * b24 + a33 * b34 + a34 * b44; + + te[ 3 ] = a41 * b11 + a42 * b21 + a43 * b31 + a44 * b41; + te[ 7 ] = a41 * b12 + a42 * b22 + a43 * b32 + a44 * b42; + te[ 11 ] = a41 * b13 + a42 * b23 + a43 * b33 + a44 * b43; + te[ 15 ] = a41 * b14 + a42 * b24 + a43 * b34 + a44 * b44; + + return this; + + }; + + Matrix4.prototype.multiplyScalar = function multiplyScalar ( s ) { + + var te = this.elements; + + te[ 0 ] *= s; te[ 4 ] *= s; te[ 8 ] *= s; te[ 12 ] *= s; + te[ 1 ] *= s; te[ 5 ] *= s; te[ 9 ] *= s; te[ 13 ] *= s; + te[ 2 ] *= s; te[ 6 ] *= s; te[ 10 ] *= s; te[ 14 ] *= s; + te[ 3 ] *= s; te[ 7 ] *= s; te[ 11 ] *= s; te[ 15 ] *= s; + + return this; + + }; + + Matrix4.prototype.determinant = function determinant () { + + var te = this.elements; + + var n11 = te[ 0 ], n12 = te[ 4 ], n13 = te[ 8 ], n14 = te[ 12 ]; + var n21 = te[ 1 ], n22 = te[ 5 ], n23 = te[ 9 ], n24 = te[ 13 ]; + var n31 = te[ 2 ], n32 = te[ 6 ], n33 = te[ 10 ], n34 = te[ 14 ]; + var n41 = te[ 3 ], n42 = te[ 7 ], n43 = te[ 11 ], n44 = te[ 15 ]; + + //TODO: make this more efficient + //( based on http://www.euclideanspace.com/maths/algebra/matrix/functions/inverse/fourD/index.htm ) + + return ( + n41 * ( + + n14 * n23 * n32 + - n13 * n24 * n32 + - n14 * n22 * n33 + + n12 * n24 * n33 + + n13 * n22 * n34 + - n12 * n23 * n34 + ) + + n42 * ( + + n11 * n23 * n34 + - n11 * n24 * n33 + + n14 * n21 * n33 + - n13 * n21 * n34 + + n13 * n24 * n31 + - n14 * n23 * n31 + ) + + n43 * ( + + n11 * n24 * n32 + - n11 * n22 * n34 + - n14 * n21 * n32 + + n12 * n21 * n34 + + n14 * n22 * n31 + - n12 * n24 * n31 + ) + + n44 * ( + - n13 * n22 * n31 + - n11 * n23 * n32 + + n11 * n22 * n33 + + n13 * n21 * n32 + - n12 * n21 * n33 + + n12 * n23 * n31 + ) + + ); + + }; + + Matrix4.prototype.transpose = function transpose () { + + var te = this.elements; + var tmp; + + tmp = te[ 1 ]; te[ 1 ] = te[ 4 ]; te[ 4 ] = tmp; + tmp = te[ 2 ]; te[ 2 ] = te[ 8 ]; te[ 8 ] = tmp; + tmp = te[ 6 ]; te[ 6 ] = te[ 9 ]; te[ 9 ] = tmp; + + tmp = te[ 3 ]; te[ 3 ] = te[ 12 ]; te[ 12 ] = tmp; + tmp = te[ 7 ]; te[ 7 ] = te[ 13 ]; te[ 13 ] = tmp; + tmp = te[ 11 ]; te[ 11 ] = te[ 14 ]; te[ 14 ] = tmp; + + return this; + + }; + + Matrix4.prototype.setPosition = function setPosition ( x, y, z ) { + + var te = this.elements; + + if ( x.isVector3 ) { + + te[ 12 ] = x.x; + te[ 13 ] = x.y; + te[ 14 ] = x.z; + + } else { + + te[ 12 ] = x; + te[ 13 ] = y; + te[ 14 ] = z; + + } + + return this; + + }; + + Matrix4.prototype.getInverse = function getInverse ( m, throwOnDegenerate ) { + + if ( throwOnDegenerate !== undefined ) { + + console.warn( "THREE.Matrix4: .getInverse() can no longer be configured to throw on degenerate." ); + + } + + // based on http://www.euclideanspace.com/maths/algebra/matrix/functions/inverse/fourD/index.htm + var te = this.elements, + me = m.elements, + + n11 = me[ 0 ], n21 = me[ 1 ], n31 = me[ 2 ], n41 = me[ 3 ], + n12 = me[ 4 ], n22 = me[ 5 ], n32 = me[ 6 ], n42 = me[ 7 ], + n13 = me[ 8 ], n23 = me[ 9 ], n33 = me[ 10 ], n43 = me[ 11 ], + n14 = me[ 12 ], n24 = me[ 13 ], n34 = me[ 14 ], n44 = me[ 15 ], + + t11 = n23 * n34 * n42 - n24 * n33 * n42 + n24 * n32 * n43 - n22 * n34 * n43 - n23 * n32 * n44 + n22 * n33 * n44, + t12 = n14 * n33 * n42 - n13 * n34 * n42 - n14 * n32 * n43 + n12 * n34 * n43 + n13 * n32 * n44 - n12 * n33 * n44, + t13 = n13 * n24 * n42 - n14 * n23 * n42 + n14 * n22 * n43 - n12 * n24 * n43 - n13 * n22 * n44 + n12 * n23 * n44, + t14 = n14 * n23 * n32 - n13 * n24 * n32 - n14 * n22 * n33 + n12 * n24 * n33 + n13 * n22 * n34 - n12 * n23 * n34; + + var det = n11 * t11 + n21 * t12 + n31 * t13 + n41 * t14; + + if ( det === 0 ) { return this.set( 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 ); } + + var detInv = 1 / det; + + te[ 0 ] = t11 * detInv; + te[ 1 ] = ( n24 * n33 * n41 - n23 * n34 * n41 - n24 * n31 * n43 + n21 * n34 * n43 + n23 * n31 * n44 - n21 * n33 * n44 ) * detInv; + te[ 2 ] = ( n22 * n34 * n41 - n24 * n32 * n41 + n24 * n31 * n42 - n21 * n34 * n42 - n22 * n31 * n44 + n21 * n32 * n44 ) * detInv; + te[ 3 ] = ( n23 * n32 * n41 - n22 * n33 * n41 - n23 * n31 * n42 + n21 * n33 * n42 + n22 * n31 * n43 - n21 * n32 * n43 ) * detInv; + + te[ 4 ] = t12 * detInv; + te[ 5 ] = ( n13 * n34 * n41 - n14 * n33 * n41 + n14 * n31 * n43 - n11 * n34 * n43 - n13 * n31 * n44 + n11 * n33 * n44 ) * detInv; + te[ 6 ] = ( n14 * n32 * n41 - n12 * n34 * n41 - n14 * n31 * n42 + n11 * n34 * n42 + n12 * n31 * n44 - n11 * n32 * n44 ) * detInv; + te[ 7 ] = ( n12 * n33 * n41 - n13 * n32 * n41 + n13 * n31 * n42 - n11 * n33 * n42 - n12 * n31 * n43 + n11 * n32 * n43 ) * detInv; + + te[ 8 ] = t13 * detInv; + te[ 9 ] = ( n14 * n23 * n41 - n13 * n24 * n41 - n14 * n21 * n43 + n11 * n24 * n43 + n13 * n21 * n44 - n11 * n23 * n44 ) * detInv; + te[ 10 ] = ( n12 * n24 * n41 - n14 * n22 * n41 + n14 * n21 * n42 - n11 * n24 * n42 - n12 * n21 * n44 + n11 * n22 * n44 ) * detInv; + te[ 11 ] = ( n13 * n22 * n41 - n12 * n23 * n41 - n13 * n21 * n42 + n11 * n23 * n42 + n12 * n21 * n43 - n11 * n22 * n43 ) * detInv; + + te[ 12 ] = t14 * detInv; + te[ 13 ] = ( n13 * n24 * n31 - n14 * n23 * n31 + n14 * n21 * n33 - n11 * n24 * n33 - n13 * n21 * n34 + n11 * n23 * n34 ) * detInv; + te[ 14 ] = ( n14 * n22 * n31 - n12 * n24 * n31 - n14 * n21 * n32 + n11 * n24 * n32 + n12 * n21 * n34 - n11 * n22 * n34 ) * detInv; + te[ 15 ] = ( n12 * n23 * n31 - n13 * n22 * n31 + n13 * n21 * n32 - n11 * n23 * n32 - n12 * n21 * n33 + n11 * n22 * n33 ) * detInv; + + return this; + + }; + + Matrix4.prototype.scale = function scale ( v ) { + + var te = this.elements; + var x = v.x, y = v.y, z = v.z; + + te[ 0 ] *= x; te[ 4 ] *= y; te[ 8 ] *= z; + te[ 1 ] *= x; te[ 5 ] *= y; te[ 9 ] *= z; + te[ 2 ] *= x; te[ 6 ] *= y; te[ 10 ] *= z; + te[ 3 ] *= x; te[ 7 ] *= y; te[ 11 ] *= z; + + return this; + + }; + + Matrix4.prototype.getMaxScaleOnAxis = function getMaxScaleOnAxis () { + + var te = this.elements; + + var scaleXSq = te[ 0 ] * te[ 0 ] + te[ 1 ] * te[ 1 ] + te[ 2 ] * te[ 2 ]; + var scaleYSq = te[ 4 ] * te[ 4 ] + te[ 5 ] * te[ 5 ] + te[ 6 ] * te[ 6 ]; + var scaleZSq = te[ 8 ] * te[ 8 ] + te[ 9 ] * te[ 9 ] + te[ 10 ] * te[ 10 ]; + + return Math.sqrt( Math.max( scaleXSq, scaleYSq, scaleZSq ) ); + + }; + + Matrix4.prototype.makeTranslation = function makeTranslation ( x, y, z ) { + + this.set( + + 1, 0, 0, x, + 0, 1, 0, y, + 0, 0, 1, z, + 0, 0, 0, 1 + + ); + + return this; + + }; + + Matrix4.prototype.makeRotationX = function makeRotationX ( theta ) { + + var c = Math.cos( theta ), s = Math.sin( theta ); + + this.set( + + 1, 0, 0, 0, + 0, c, - s, 0, + 0, s, c, 0, + 0, 0, 0, 1 + + ); + + return this; + + }; + + Matrix4.prototype.makeRotationY = function makeRotationY ( theta ) { + + var c = Math.cos( theta ), s = Math.sin( theta ); + + this.set( + + c, 0, s, 0, + 0, 1, 0, 0, + - s, 0, c, 0, + 0, 0, 0, 1 + + ); + + return this; + + }; + + Matrix4.prototype.makeRotationZ = function makeRotationZ ( theta ) { + + var c = Math.cos( theta ), s = Math.sin( theta ); + + this.set( + + c, - s, 0, 0, + s, c, 0, 0, + 0, 0, 1, 0, + 0, 0, 0, 1 + + ); + + return this; + + }; + + Matrix4.prototype.makeRotationAxis = function makeRotationAxis ( axis, angle ) { + + // Based on http://www.gamedev.net/reference/articles/article1199.asp + + var c = Math.cos( angle ); + var s = Math.sin( angle ); + var t = 1 - c; + var x = axis.x, y = axis.y, z = axis.z; + var tx = t * x, ty = t * y; + + this.set( + + tx * x + c, tx * y - s * z, tx * z + s * y, 0, + tx * y + s * z, ty * y + c, ty * z - s * x, 0, + tx * z - s * y, ty * z + s * x, t * z * z + c, 0, + 0, 0, 0, 1 + + ); + + return this; + + }; + + Matrix4.prototype.makeScale = function makeScale ( x, y, z ) { + + this.set( + + x, 0, 0, 0, + 0, y, 0, 0, + 0, 0, z, 0, + 0, 0, 0, 1 + + ); + + return this; + + }; + + Matrix4.prototype.makeShear = function makeShear ( x, y, z ) { + + this.set( + + 1, y, z, 0, + x, 1, z, 0, + x, y, 1, 0, + 0, 0, 0, 1 + + ); + + return this; + + }; + + Matrix4.prototype.compose = function compose ( position, quaternion, scale ) { + + var te = this.elements; + + var x = quaternion._x, y = quaternion._y, z = quaternion._z, w = quaternion._w; + var x2 = x + x,y2 = y + y, z2 = z + z; + var xx = x * x2, xy = x * y2, xz = x * z2; + var yy = y * y2, yz = y * z2, zz = z * z2; + var wx = w * x2, wy = w * y2, wz = w * z2; + + var sx = scale.x, sy = scale.y, sz = scale.z; + + te[ 0 ] = ( 1 - ( yy + zz ) ) * sx; + te[ 1 ] = ( xy + wz ) * sx; + te[ 2 ] = ( xz - wy ) * sx; + te[ 3 ] = 0; + + te[ 4 ] = ( xy - wz ) * sy; + te[ 5 ] = ( 1 - ( xx + zz ) ) * sy; + te[ 6 ] = ( yz + wx ) * sy; + te[ 7 ] = 0; + + te[ 8 ] = ( xz + wy ) * sz; + te[ 9 ] = ( yz - wx ) * sz; + te[ 10 ] = ( 1 - ( xx + yy ) ) * sz; + te[ 11 ] = 0; + + te[ 12 ] = position.x; + te[ 13 ] = position.y; + te[ 14 ] = position.z; + te[ 15 ] = 1; + + return this; + + }; + + Matrix4.prototype.decompose = function decompose ( position, quaternion, scale ) { + + var te = this.elements; + + var sx = _v1$1.set( te[ 0 ], te[ 1 ], te[ 2 ] ).length(); + var sy = _v1$1.set( te[ 4 ], te[ 5 ], te[ 6 ] ).length(); + var sz = _v1$1.set( te[ 8 ], te[ 9 ], te[ 10 ] ).length(); + + // if determine is negative, we need to invert one scale + var det = this.determinant(); + if ( det < 0 ) { sx = - sx; } + + position.x = te[ 12 ]; + position.y = te[ 13 ]; + position.z = te[ 14 ]; + + // scale the rotation part + _m1.copy( this ); + + var invSX = 1 / sx; + var invSY = 1 / sy; + var invSZ = 1 / sz; + + _m1.elements[ 0 ] *= invSX; + _m1.elements[ 1 ] *= invSX; + _m1.elements[ 2 ] *= invSX; + + _m1.elements[ 4 ] *= invSY; + _m1.elements[ 5 ] *= invSY; + _m1.elements[ 6 ] *= invSY; + + _m1.elements[ 8 ] *= invSZ; + _m1.elements[ 9 ] *= invSZ; + _m1.elements[ 10 ] *= invSZ; + + quaternion.setFromRotationMatrix( _m1 ); + + scale.x = sx; + scale.y = sy; + scale.z = sz; + + return this; + + }; + + Matrix4.prototype.makePerspective = function makePerspective ( left, right, top, bottom, near, far ) { + + if ( far === undefined ) { + + console.warn( 'THREE.Matrix4: .makePerspective() has been redefined and has a new signature. Please check the docs.' ); + + } + + var te = this.elements; + var x = 2 * near / ( right - left ); + var y = 2 * near / ( top - bottom ); + + var a = ( right + left ) / ( right - left ); + var b = ( top + bottom ) / ( top - bottom ); + var c = - ( far + near ) / ( far - near ); + var d = - 2 * far * near / ( far - near ); + + te[ 0 ] = x;te[ 4 ] = 0;te[ 8 ] = a;te[ 12 ] = 0; + te[ 1 ] = 0;te[ 5 ] = y;te[ 9 ] = b;te[ 13 ] = 0; + te[ 2 ] = 0;te[ 6 ] = 0;te[ 10 ] = c;te[ 14 ] = d; + te[ 3 ] = 0;te[ 7 ] = 0;te[ 11 ] = - 1;te[ 15 ] = 0; + + return this; + + }; + + Matrix4.prototype.makeOrthographic = function makeOrthographic ( left, right, top, bottom, near, far ) { + + var te = this.elements; + var w = 1.0 / ( right - left ); + var h = 1.0 / ( top - bottom ); + var p = 1.0 / ( far - near ); + + var x = ( right + left ) * w; + var y = ( top + bottom ) * h; + var z = ( far + near ) * p; + + te[ 0 ] = 2 * w;te[ 4 ] = 0;te[ 8 ] = 0;te[ 12 ] = - x; + te[ 1 ] = 0;te[ 5 ] = 2 * h;te[ 9 ] = 0;te[ 13 ] = - y; + te[ 2 ] = 0;te[ 6 ] = 0;te[ 10 ] = - 2 * p;te[ 14 ] = - z; + te[ 3 ] = 0;te[ 7 ] = 0;te[ 11 ] = 0;te[ 15 ] = 1; + + return this; + + }; + + Matrix4.prototype.equals = function equals ( matrix ) { + + var te = this.elements; + var me = matrix.elements; + + for ( var i = 0; i < 16; i ++ ) { + + if ( te[ i ] !== me[ i ] ) { return false; } + + } + + return true; + + }; + + Matrix4.prototype.fromArray = function fromArray ( array, offset ) { + + if ( offset === undefined ) { offset = 0; } + + for ( var i = 0; i < 16; i ++ ) { + + this.elements[ i ] = array[ i + offset ]; + + } + + return this; + + }; + + Matrix4.prototype.toArray = function toArray ( array, offset ) { + + if ( array === undefined ) { array = []; } + if ( offset === undefined ) { offset = 0; } + + var te = this.elements; + + array[ offset ] = te[ 0 ]; + array[ offset + 1 ] = te[ 1 ]; + array[ offset + 2 ] = te[ 2 ]; + array[ offset + 3 ] = te[ 3 ]; + + array[ offset + 4 ] = te[ 4 ]; + array[ offset + 5 ] = te[ 5 ]; + array[ offset + 6 ] = te[ 6 ]; + array[ offset + 7 ] = te[ 7 ]; + + array[ offset + 8 ] = te[ 8 ]; + array[ offset + 9 ] = te[ 9 ]; + array[ offset + 10 ] = te[ 10 ]; + array[ offset + 11 ] = te[ 11 ]; + + array[ offset + 12 ] = te[ 12 ]; + array[ offset + 13 ] = te[ 13 ]; + array[ offset + 14 ] = te[ 14 ]; + array[ offset + 15 ] = te[ 15 ]; + + return array; + + }; + + var _v1$1 = new Vector3(); + var _m1 = new Matrix4(); + var _zero = new Vector3( 0, 0, 0 ); + var _one = new Vector3( 1, 1, 1 ); + var _x = new Vector3(); + var _y = new Vector3(); + var _z = new Vector3(); + + var Euler = function Euler( x, y, z, order ) { + if ( x === void 0 ) x = 0; + if ( y === void 0 ) y = 0; + if ( z === void 0 ) z = 0; + if ( order === void 0 ) order = Euler.DefaultOrder; + + + Object.defineProperty( this, 'isEuler', { value: true } ); + + this._x = x; + this._y = y; + this._z = z; + this._order = order; + + }; + + var prototypeAccessors$3 = { x: { configurable: true },y: { configurable: true },z: { configurable: true },order: { configurable: true } }; + + prototypeAccessors$3.x.get = function () { + + return this._x; + + }; + + prototypeAccessors$3.x.set = function ( value ) { + + this._x = value; + this._onChangeCallback(); + + }; + + prototypeAccessors$3.y.get = function () { + + return this._y; + + }; + + prototypeAccessors$3.y.set = function ( value ) { + + this._y = value; + this._onChangeCallback(); + + }; + + prototypeAccessors$3.z.get = function () { + + return this._z; + + }; + + prototypeAccessors$3.z.set = function ( value ) { + + this._z = value; + this._onChangeCallback(); + + }; + + prototypeAccessors$3.order.get = function () { + + return this._order; + + }; + + prototypeAccessors$3.order.set = function ( value ) { + + this._order = value; + this._onChangeCallback(); + + }; + + Euler.prototype.set = function set ( x, y, z, order ) { + + this._x = x; + this._y = y; + this._z = z; + this._order = order || this._order; + + this._onChangeCallback(); + + return this; + + }; + + Euler.prototype.clone = function clone () { + + return new this.constructor( this._x, this._y, this._z, this._order ); + + }; + + Euler.prototype.copy = function copy ( euler ) { + + this._x = euler._x; + this._y = euler._y; + this._z = euler._z; + this._order = euler._order; + + this._onChangeCallback(); + + return this; + + }; + + Euler.prototype.setFromRotationMatrix = function setFromRotationMatrix ( m, order, update ) { + + var clamp = MathUtils.clamp; + + // assumes the upper 3x3 of m is a pure rotation matrix (i.e, unscaled) + + var te = m.elements; + var m11 = te[ 0 ], m12 = te[ 4 ], m13 = te[ 8 ]; + var m21 = te[ 1 ], m22 = te[ 5 ], m23 = te[ 9 ]; + var m31 = te[ 2 ], m32 = te[ 6 ], m33 = te[ 10 ]; + + order = order || this._order; + + switch ( order ) { + + case 'XYZ': + + this._y = Math.asin( clamp( m13, - 1, 1 ) ); + + if ( Math.abs( m13 ) < 0.9999999 ) { + + this._x = Math.atan2( - m23, m33 ); + this._z = Math.atan2( - m12, m11 ); + + } else { + + this._x = Math.atan2( m32, m22 ); + this._z = 0; + + } + + break; + + case 'YXZ': + + this._x = Math.asin( - clamp( m23, - 1, 1 ) ); + + if ( Math.abs( m23 ) < 0.9999999 ) { + + this._y = Math.atan2( m13, m33 ); + this._z = Math.atan2( m21, m22 ); + + } else { + + this._y = Math.atan2( - m31, m11 ); + this._z = 0; + + } + + break; + + case 'ZXY': + + this._x = Math.asin( clamp( m32, - 1, 1 ) ); + + if ( Math.abs( m32 ) < 0.9999999 ) { + + this._y = Math.atan2( - m31, m33 ); + this._z = Math.atan2( - m12, m22 ); + + } else { + + this._y = 0; + this._z = Math.atan2( m21, m11 ); + + } + + break; + + case 'ZYX': + + this._y = Math.asin( - clamp( m31, - 1, 1 ) ); + + if ( Math.abs( m31 ) < 0.9999999 ) { + + this._x = Math.atan2( m32, m33 ); + this._z = Math.atan2( m21, m11 ); + + } else { + + this._x = 0; + this._z = Math.atan2( - m12, m22 ); + + } + + break; + + case 'YZX': + + this._z = Math.asin( clamp( m21, - 1, 1 ) ); + + if ( Math.abs( m21 ) < 0.9999999 ) { + + this._x = Math.atan2( - m23, m22 ); + this._y = Math.atan2( - m31, m11 ); + + } else { + + this._x = 0; + this._y = Math.atan2( m13, m33 ); + + } + + break; + + case 'XZY': + + this._z = Math.asin( - clamp( m12, - 1, 1 ) ); + + if ( Math.abs( m12 ) < 0.9999999 ) { + + this._x = Math.atan2( m32, m22 ); + this._y = Math.atan2( m13, m11 ); + + } else { + + this._x = Math.atan2( - m23, m33 ); + this._y = 0; + + } + + break; + + default: + + console.warn( 'THREE.Euler: .setFromRotationMatrix() encountered an unknown order: ' + order ); + + } + + this._order = order; + + if ( update !== false ) { this._onChangeCallback(); } + + return this; + + }; + + Euler.prototype.setFromQuaternion = function setFromQuaternion ( q, order, update ) { + + _matrix.makeRotationFromQuaternion( q ); + + return this.setFromRotationMatrix( _matrix, order, update ); + + }; + + Euler.prototype.setFromVector3 = function setFromVector3 ( v, order ) { + + return this.set( v.x, v.y, v.z, order || this._order ); + + }; + + Euler.prototype.reorder = function reorder ( newOrder ) { + + // WARNING: this discards revolution information -bhouston + + _quaternion$1.setFromEuler( this ); + + return this.setFromQuaternion( _quaternion$1, newOrder ); + + }; + + Euler.prototype.equals = function equals ( euler ) { + + return ( euler._x === this._x ) && ( euler._y === this._y ) && ( euler._z === this._z ) && ( euler._order === this._order ); + + }; + + Euler.prototype.fromArray = function fromArray ( array ) { + + this._x = array[ 0 ]; + this._y = array[ 1 ]; + this._z = array[ 2 ]; + if ( array[ 3 ] !== undefined ) { this._order = array[ 3 ]; } + + this._onChangeCallback(); + + return this; + + }; + + Euler.prototype.toArray = function toArray ( array, offset ) { + + if ( array === undefined ) { array = []; } + if ( offset === undefined ) { offset = 0; } + + array[ offset ] = this._x; + array[ offset + 1 ] = this._y; + array[ offset + 2 ] = this._z; + array[ offset + 3 ] = this._order; + + return array; + + }; + + Euler.prototype.toVector3 = function toVector3 ( optionalResult ) { + + if ( optionalResult ) { + + return optionalResult.set( this._x, this._y, this._z ); + + } else { + + return new Vector3( this._x, this._y, this._z ); + + } + + }; + + Euler.prototype._onChange = function _onChange ( callback ) { + + this._onChangeCallback = callback; + + return this; + + }; + + Euler.prototype._onChangeCallback = function _onChangeCallback () {}; + + Object.defineProperties( Euler.prototype, prototypeAccessors$3 ); + + Euler.DefaultOrder = 'XYZ'; + Euler.RotationOrders = [ 'XYZ', 'YZX', 'ZXY', 'XZY', 'YXZ', 'ZYX' ]; + + var _matrix = new Matrix4(); + var _quaternion$1 = new Quaternion(); + + var Layers = function Layers() { + + this.mask = 1 | 0; + + }; + + Layers.prototype.set = function set ( channel ) { + + this.mask = 1 << channel | 0; + + }; + + Layers.prototype.enable = function enable ( channel ) { + + this.mask |= 1 << channel | 0; + + }; + + Layers.prototype.enableAll = function enableAll () { + + this.mask = 0xffffffff | 0; + + }; + + Layers.prototype.toggle = function toggle ( channel ) { + + this.mask ^= 1 << channel | 0; + + }; + + Layers.prototype.disable = function disable ( channel ) { + + this.mask &= ~ ( 1 << channel | 0 ); + + }; + + Layers.prototype.disableAll = function disableAll () { + + this.mask = 0; + + }; + + Layers.prototype.test = function test ( layers ) { + + return ( this.mask & layers.mask ) !== 0; + + }; + + var _object3DId = 0; + + var _v1$2 = new Vector3(); + var _q1 = new Quaternion(); + var _m1$1 = new Matrix4(); + var _target = new Vector3(); + + var _position = new Vector3(); + var _scale = new Vector3(); + var _quaternion$2 = new Quaternion(); + + var _xAxis = new Vector3( 1, 0, 0 ); + var _yAxis = new Vector3( 0, 1, 0 ); + var _zAxis = new Vector3( 0, 0, 1 ); + + var _addedEvent = { type: 'added' }; + var _removedEvent = { type: 'removed' }; + + function Object3D() { + + Object.defineProperty( this, 'id', { value: _object3DId ++ } ); + + this.uuid = MathUtils.generateUUID(); + + this.name = ''; + this.type = 'Object3D'; + + this.parent = null; + this.children = []; + + this.up = Object3D.DefaultUp.clone(); + + var position = new Vector3(); + var rotation = new Euler(); + var quaternion = new Quaternion(); + var scale = new Vector3( 1, 1, 1 ); + + function onRotationChange() { + + quaternion.setFromEuler( rotation, false ); + + } + + function onQuaternionChange() { + + rotation.setFromQuaternion( quaternion, undefined, false ); + + } + + rotation._onChange( onRotationChange ); + quaternion._onChange( onQuaternionChange ); + + Object.defineProperties( this, { + position: { + configurable: true, + enumerable: true, + value: position + }, + rotation: { + configurable: true, + enumerable: true, + value: rotation + }, + quaternion: { + configurable: true, + enumerable: true, + value: quaternion + }, + scale: { + configurable: true, + enumerable: true, + value: scale + }, + modelViewMatrix: { + value: new Matrix4() + }, + normalMatrix: { + value: new Matrix3() + } + } ); + + this.matrix = new Matrix4(); + this.matrixWorld = new Matrix4(); + + this.matrixAutoUpdate = Object3D.DefaultMatrixAutoUpdate; + this.matrixWorldNeedsUpdate = false; + + this.layers = new Layers(); + this.visible = true; + + this.castShadow = false; + this.receiveShadow = false; + + this.frustumCulled = true; + this.renderOrder = 0; + + this.userData = {}; + + } + + Object3D.DefaultUp = new Vector3( 0, 1, 0 ); + Object3D.DefaultMatrixAutoUpdate = true; + + Object3D.prototype = Object.assign( Object.create( EventDispatcher.prototype ), { + + constructor: Object3D, + + isObject3D: true, + + onBeforeRender: function () {}, + onAfterRender: function () {}, + + applyMatrix4: function ( matrix ) { + + if ( this.matrixAutoUpdate ) { this.updateMatrix(); } + + this.matrix.premultiply( matrix ); + + this.matrix.decompose( this.position, this.quaternion, this.scale ); + + }, + + applyQuaternion: function ( q ) { + + this.quaternion.premultiply( q ); + + return this; + + }, + + setRotationFromAxisAngle: function ( axis, angle ) { + + // assumes axis is normalized + + this.quaternion.setFromAxisAngle( axis, angle ); + + }, + + setRotationFromEuler: function ( euler ) { + + this.quaternion.setFromEuler( euler, true ); + + }, + + setRotationFromMatrix: function ( m ) { + + // assumes the upper 3x3 of m is a pure rotation matrix (i.e, unscaled) + + this.quaternion.setFromRotationMatrix( m ); + + }, + + setRotationFromQuaternion: function ( q ) { + + // assumes q is normalized + + this.quaternion.copy( q ); + + }, + + rotateOnAxis: function ( axis, angle ) { + + // rotate object on axis in object space + // axis is assumed to be normalized + + _q1.setFromAxisAngle( axis, angle ); + + this.quaternion.multiply( _q1 ); + + return this; + + }, + + rotateOnWorldAxis: function ( axis, angle ) { + + // rotate object on axis in world space + // axis is assumed to be normalized + // method assumes no rotated parent + + _q1.setFromAxisAngle( axis, angle ); + + this.quaternion.premultiply( _q1 ); + + return this; + + }, + + rotateX: function ( angle ) { + + return this.rotateOnAxis( _xAxis, angle ); + + }, + + rotateY: function ( angle ) { + + return this.rotateOnAxis( _yAxis, angle ); + + }, + + rotateZ: function ( angle ) { + + return this.rotateOnAxis( _zAxis, angle ); + + }, + + translateOnAxis: function ( axis, distance ) { + + // translate object by distance along axis in object space + // axis is assumed to be normalized + + _v1$2.copy( axis ).applyQuaternion( this.quaternion ); + + this.position.add( _v1$2.multiplyScalar( distance ) ); + + return this; + + }, + + translateX: function ( distance ) { + + return this.translateOnAxis( _xAxis, distance ); + + }, + + translateY: function ( distance ) { + + return this.translateOnAxis( _yAxis, distance ); + + }, + + translateZ: function ( distance ) { + + return this.translateOnAxis( _zAxis, distance ); + + }, + + localToWorld: function ( vector ) { + + return vector.applyMatrix4( this.matrixWorld ); + + }, + + worldToLocal: function ( vector ) { + + return vector.applyMatrix4( _m1$1.getInverse( this.matrixWorld ) ); + + }, + + lookAt: function ( x, y, z ) { + + // This method does not support objects having non-uniformly-scaled parent(s) + + if ( x.isVector3 ) { + + _target.copy( x ); + + } else { + + _target.set( x, y, z ); + + } + + var parent = this.parent; + + this.updateWorldMatrix( true, false ); + + _position.setFromMatrixPosition( this.matrixWorld ); + + if ( this.isCamera || this.isLight ) { + + _m1$1.lookAt( _position, _target, this.up ); + + } else { + + _m1$1.lookAt( _target, _position, this.up ); + + } + + this.quaternion.setFromRotationMatrix( _m1$1 ); + + if ( parent ) { + + _m1$1.extractRotation( parent.matrixWorld ); + _q1.setFromRotationMatrix( _m1$1 ); + this.quaternion.premultiply( _q1.inverse() ); + + } + + }, + + add: function ( object ) { + + if ( arguments.length > 1 ) { + + for ( var i = 0; i < arguments.length; i ++ ) { + + this.add( arguments[ i ] ); + + } + + return this; + + } + + if ( object === this ) { + + console.error( "THREE.Object3D.add: object can't be added as a child of itself.", object ); + return this; + + } + + if ( ( object && object.isObject3D ) ) { + + if ( object.parent !== null ) { + + object.parent.remove( object ); + + } + + object.parent = this; + this.children.push( object ); + + object.dispatchEvent( _addedEvent ); + + } else { + + console.error( "THREE.Object3D.add: object not an instance of THREE.Object3D.", object ); + + } + + return this; + + }, + + remove: function ( object ) { + + if ( arguments.length > 1 ) { + + for ( var i = 0; i < arguments.length; i ++ ) { + + this.remove( arguments[ i ] ); + + } + + return this; + + } + + var index = this.children.indexOf( object ); + + if ( index !== - 1 ) { + + object.parent = null; + this.children.splice( index, 1 ); + + object.dispatchEvent( _removedEvent ); + + } + + return this; + + }, + + attach: function ( object ) { + + // adds object as a child of this, while maintaining the object's world transform + + this.updateWorldMatrix( true, false ); + + _m1$1.getInverse( this.matrixWorld ); + + if ( object.parent !== null ) { + + object.parent.updateWorldMatrix( true, false ); + + _m1$1.multiply( object.parent.matrixWorld ); + + } + + object.applyMatrix4( _m1$1 ); + + object.updateWorldMatrix( false, false ); + + this.add( object ); + + return this; + + }, + + getObjectById: function ( id ) { + + return this.getObjectByProperty( 'id', id ); + + }, + + getObjectByName: function ( name ) { + + return this.getObjectByProperty( 'name', name ); + + }, + + getObjectByProperty: function ( name, value ) { + + if ( this[ name ] === value ) { return this; } + + for ( var i = 0, l = this.children.length; i < l; i ++ ) { + + var child = this.children[ i ]; + var object = child.getObjectByProperty( name, value ); + + if ( object !== undefined ) { + + return object; + + } + + } + + return undefined; + + }, + + getWorldPosition: function ( target ) { + + if ( target === undefined ) { + + console.warn( 'THREE.Object3D: .getWorldPosition() target is now required' ); + target = new Vector3(); + + } + + this.updateMatrixWorld( true ); + + return target.setFromMatrixPosition( this.matrixWorld ); + + }, + + getWorldQuaternion: function ( target ) { + + if ( target === undefined ) { + + console.warn( 'THREE.Object3D: .getWorldQuaternion() target is now required' ); + target = new Quaternion(); + + } + + this.updateMatrixWorld( true ); + + this.matrixWorld.decompose( _position, target, _scale ); + + return target; + + }, + + getWorldScale: function ( target ) { + + if ( target === undefined ) { + + console.warn( 'THREE.Object3D: .getWorldScale() target is now required' ); + target = new Vector3(); + + } + + this.updateMatrixWorld( true ); + + this.matrixWorld.decompose( _position, _quaternion$2, target ); + + return target; + + }, + + getWorldDirection: function ( target ) { + + if ( target === undefined ) { + + console.warn( 'THREE.Object3D: .getWorldDirection() target is now required' ); + target = new Vector3(); + + } + + this.updateMatrixWorld( true ); + + var e = this.matrixWorld.elements; + + return target.set( e[ 8 ], e[ 9 ], e[ 10 ] ).normalize(); + + }, + + raycast: function () {}, + + traverse: function ( callback ) { + + callback( this ); + + var children = this.children; + + for ( var i = 0, l = children.length; i < l; i ++ ) { + + children[ i ].traverse( callback ); + + } + + }, + + traverseVisible: function ( callback ) { + + if ( this.visible === false ) { return; } + + callback( this ); + + var children = this.children; + + for ( var i = 0, l = children.length; i < l; i ++ ) { + + children[ i ].traverseVisible( callback ); + + } + + }, + + traverseAncestors: function ( callback ) { + + var parent = this.parent; + + if ( parent !== null ) { + + callback( parent ); + + parent.traverseAncestors( callback ); + + } + + }, + + updateMatrix: function () { + + this.matrix.compose( this.position, this.quaternion, this.scale ); + + this.matrixWorldNeedsUpdate = true; + + }, + + updateMatrixWorld: function ( force ) { + + if ( this.matrixAutoUpdate ) { this.updateMatrix(); } + + if ( this.matrixWorldNeedsUpdate || force ) { + + if ( this.parent === null ) { + + this.matrixWorld.copy( this.matrix ); + + } else { + + this.matrixWorld.multiplyMatrices( this.parent.matrixWorld, this.matrix ); + + } + + this.matrixWorldNeedsUpdate = false; + + force = true; + + } + + // update children + + var children = this.children; + + for ( var i = 0, l = children.length; i < l; i ++ ) { + + children[ i ].updateMatrixWorld( force ); + + } + + }, + + updateWorldMatrix: function ( updateParents, updateChildren ) { + + var parent = this.parent; + + if ( updateParents === true && parent !== null ) { + + parent.updateWorldMatrix( true, false ); + + } + + if ( this.matrixAutoUpdate ) { this.updateMatrix(); } + + if ( this.parent === null ) { + + this.matrixWorld.copy( this.matrix ); + + } else { + + this.matrixWorld.multiplyMatrices( this.parent.matrixWorld, this.matrix ); + + } + + // update children + + if ( updateChildren === true ) { + + var children = this.children; + + for ( var i = 0, l = children.length; i < l; i ++ ) { + + children[ i ].updateWorldMatrix( false, true ); + + } + + } + + }, + + toJSON: function ( meta ) { + + // meta is a string when called from JSON.stringify + var isRootObject = ( meta === undefined || typeof meta === 'string' ); + + var output = {}; + + // meta is a hash used to collect geometries, materials. + // not providing it implies that this is the root object + // being serialized. + if ( isRootObject ) { + + // initialize meta obj + meta = { + geometries: {}, + materials: {}, + textures: {}, + images: {}, + shapes: {} + }; + + output.metadata = { + version: 4.5, + type: 'Object', + generator: 'Object3D.toJSON' + }; + + } + + // standard Object3D serialization + + var object = {}; + + object.uuid = this.uuid; + object.type = this.type; + + if ( this.name !== '' ) { object.name = this.name; } + if ( this.castShadow === true ) { object.castShadow = true; } + if ( this.receiveShadow === true ) { object.receiveShadow = true; } + if ( this.visible === false ) { object.visible = false; } + if ( this.frustumCulled === false ) { object.frustumCulled = false; } + if ( this.renderOrder !== 0 ) { object.renderOrder = this.renderOrder; } + if ( JSON.stringify( this.userData ) !== '{}' ) { object.userData = this.userData; } + + object.layers = this.layers.mask; + object.matrix = this.matrix.toArray(); + + if ( this.matrixAutoUpdate === false ) { object.matrixAutoUpdate = false; } + + // object specific properties + + if ( this.isInstancedMesh ) { + + object.type = 'InstancedMesh'; + object.count = this.count; + object.instanceMatrix = this.instanceMatrix.toJSON(); + + } + + // + + function serialize( library, element ) { + + if ( library[ element.uuid ] === undefined ) { + + library[ element.uuid ] = element.toJSON( meta ); + + } + + return element.uuid; + + } + + if ( this.isMesh || this.isLine || this.isPoints ) { + + object.geometry = serialize( meta.geometries, this.geometry ); + + var parameters = this.geometry.parameters; + + if ( parameters !== undefined && parameters.shapes !== undefined ) { + + var shapes = parameters.shapes; + + if ( Array.isArray( shapes ) ) { + + for ( var i = 0, l = shapes.length; i < l; i ++ ) { + + var shape = shapes[ i ]; + + serialize( meta.shapes, shape ); + + } + + } else { + + serialize( meta.shapes, shapes ); + + } + + } + + } + + if ( this.material !== undefined ) { + + if ( Array.isArray( this.material ) ) { + + var uuids = []; + + for ( var i$1 = 0, l$1 = this.material.length; i$1 < l$1; i$1 ++ ) { + + uuids.push( serialize( meta.materials, this.material[ i$1 ] ) ); + + } + + object.material = uuids; + + } else { + + object.material = serialize( meta.materials, this.material ); + + } + + } + + // + + if ( this.children.length > 0 ) { + + object.children = []; + + for ( var i$2 = 0; i$2 < this.children.length; i$2 ++ ) { + + object.children.push( this.children[ i$2 ].toJSON( meta ).object ); + + } + + } + + if ( isRootObject ) { + + var geometries = extractFromCache( meta.geometries ); + var materials = extractFromCache( meta.materials ); + var textures = extractFromCache( meta.textures ); + var images = extractFromCache( meta.images ); + var shapes$1 = extractFromCache( meta.shapes ); + + if ( geometries.length > 0 ) { output.geometries = geometries; } + if ( materials.length > 0 ) { output.materials = materials; } + if ( textures.length > 0 ) { output.textures = textures; } + if ( images.length > 0 ) { output.images = images; } + if ( shapes$1.length > 0 ) { output.shapes = shapes$1; } + + } + + output.object = object; + + return output; + + // extract data from the cache hash + // remove metadata on each item + // and return as array + function extractFromCache( cache ) { + + var values = []; + for ( var key in cache ) { + + var data = cache[ key ]; + delete data.metadata; + values.push( data ); + + } + + return values; + + } + + }, + + clone: function ( recursive ) { + + return new this.constructor().copy( this, recursive ); + + }, + + copy: function ( source, recursive ) { + + if ( recursive === undefined ) { recursive = true; } + + this.name = source.name; + + this.up.copy( source.up ); + + this.position.copy( source.position ); + this.rotation.order = source.rotation.order; + this.quaternion.copy( source.quaternion ); + this.scale.copy( source.scale ); + + this.matrix.copy( source.matrix ); + this.matrixWorld.copy( source.matrixWorld ); + + this.matrixAutoUpdate = source.matrixAutoUpdate; + this.matrixWorldNeedsUpdate = source.matrixWorldNeedsUpdate; + + this.layers.mask = source.layers.mask; + this.visible = source.visible; + + this.castShadow = source.castShadow; + this.receiveShadow = source.receiveShadow; + + this.frustumCulled = source.frustumCulled; + this.renderOrder = source.renderOrder; + + this.userData = JSON.parse( JSON.stringify( source.userData ) ); + + if ( recursive === true ) { + + for ( var i = 0; i < source.children.length; i ++ ) { + + var child = source.children[ i ]; + this.add( child.clone() ); + + } + + } + + return this; + + } + + } ); + + var _vector1 = new Vector3(); + var _vector2 = new Vector3(); + var _normalMatrix = new Matrix3(); + + var Plane = function Plane( normal, constant ) { + + Object.defineProperty( this, 'isPlane', { value: true } ); + + // normal is assumed to be normalized + + this.normal = ( normal !== undefined ) ? normal : new Vector3( 1, 0, 0 ); + this.constant = ( constant !== undefined ) ? constant : 0; + + }; + + Plane.prototype.set = function set ( normal, constant ) { + + this.normal.copy( normal ); + this.constant = constant; + + return this; + + }; + + Plane.prototype.setComponents = function setComponents ( x, y, z, w ) { + + this.normal.set( x, y, z ); + this.constant = w; + + return this; + + }; + + Plane.prototype.setFromNormalAndCoplanarPoint = function setFromNormalAndCoplanarPoint ( normal, point ) { + + this.normal.copy( normal ); + this.constant = - point.dot( this.normal ); + + return this; + + }; + + Plane.prototype.setFromCoplanarPoints = function setFromCoplanarPoints ( a, b, c ) { + + var normal = _vector1.subVectors( c, b ).cross( _vector2.subVectors( a, b ) ).normalize(); + + // Q: should an error be thrown if normal is zero (e.g. degenerate plane)? + + this.setFromNormalAndCoplanarPoint( normal, a ); + + return this; + + }; + + Plane.prototype.clone = function clone () { + + return new this.constructor().copy( this ); + + }; + + Plane.prototype.copy = function copy ( plane ) { + + this.normal.copy( plane.normal ); + this.constant = plane.constant; + + return this; + + }; + + Plane.prototype.normalize = function normalize () { + + // Note: will lead to a divide by zero if the plane is invalid. + + var inverseNormalLength = 1.0 / this.normal.length(); + this.normal.multiplyScalar( inverseNormalLength ); + this.constant *= inverseNormalLength; + + return this; + + }; + + Plane.prototype.negate = function negate () { + + this.constant *= - 1; + this.normal.negate(); + + return this; + + }; + + Plane.prototype.distanceToPoint = function distanceToPoint ( point ) { + + return this.normal.dot( point ) + this.constant; + + }; + + Plane.prototype.distanceToSphere = function distanceToSphere ( sphere ) { + + return this.distanceToPoint( sphere.center ) - sphere.radius; + + }; + + Plane.prototype.projectPoint = function projectPoint ( point, target ) { + + if ( target === undefined ) { + + console.warn( 'THREE.Plane: .projectPoint() target is now required' ); + target = new Vector3(); + + } + + return target.copy( this.normal ).multiplyScalar( - this.distanceToPoint( point ) ).add( point ); + + }; + + Plane.prototype.intersectLine = function intersectLine ( line, target ) { + + if ( target === undefined ) { + + console.warn( 'THREE.Plane: .intersectLine() target is now required' ); + target = new Vector3(); + + } + + var direction = line.delta( _vector1 ); + + var denominator = this.normal.dot( direction ); + + if ( denominator === 0 ) { + + // line is coplanar, return origin + if ( this.distanceToPoint( line.start ) === 0 ) { + + return target.copy( line.start ); + + } + + // Unsure if this is the correct method to handle this case. + return undefined; + + } + + var t = - ( line.start.dot( this.normal ) + this.constant ) / denominator; + + if ( t < 0 || t > 1 ) { + + return undefined; + + } + + return target.copy( direction ).multiplyScalar( t ).add( line.start ); + + }; + + Plane.prototype.intersectsLine = function intersectsLine ( line ) { + + // Note: this tests if a line intersects the plane, not whether it (or its end-points) are coplanar with it. + + var startSign = this.distanceToPoint( line.start ); + var endSign = this.distanceToPoint( line.end ); + + return ( startSign < 0 && endSign > 0 ) || ( endSign < 0 && startSign > 0 ); + + }; + + Plane.prototype.intersectsBox = function intersectsBox ( box ) { + + return box.intersectsPlane( this ); + + }; + + Plane.prototype.intersectsSphere = function intersectsSphere ( sphere ) { + + return sphere.intersectsPlane( this ); + + }; + + Plane.prototype.coplanarPoint = function coplanarPoint ( target ) { + + if ( target === undefined ) { + + console.warn( 'THREE.Plane: .coplanarPoint() target is now required' ); + target = new Vector3(); + + } + + return target.copy( this.normal ).multiplyScalar( - this.constant ); + + }; + + Plane.prototype.applyMatrix4 = function applyMatrix4 ( matrix, optionalNormalMatrix ) { + + var normalMatrix = optionalNormalMatrix || _normalMatrix.getNormalMatrix( matrix ); + + var referencePoint = this.coplanarPoint( _vector1 ).applyMatrix4( matrix ); + + var normal = this.normal.applyMatrix3( normalMatrix ).normalize(); + + this.constant = - referencePoint.dot( normal ); + + return this; + + }; + + Plane.prototype.translate = function translate ( offset ) { + + this.constant -= offset.dot( this.normal ); + + return this; + + }; + + Plane.prototype.equals = function equals ( plane ) { + + return plane.normal.equals( this.normal ) && ( plane.constant === this.constant ); + + }; + + var _v0$1 = new Vector3(); + var _v1$3 = new Vector3(); + var _v2$1 = new Vector3(); + var _v3 = new Vector3(); + + var _vab = new Vector3(); + var _vac = new Vector3(); + var _vbc = new Vector3(); + var _vap = new Vector3(); + var _vbp = new Vector3(); + var _vcp = new Vector3(); + + var Triangle = function Triangle( a, b, c ) { + + this.a = ( a !== undefined ) ? a : new Vector3(); + this.b = ( b !== undefined ) ? b : new Vector3(); + this.c = ( c !== undefined ) ? c : new Vector3(); + + }; + + Triangle.getNormal = function getNormal ( a, b, c, target ) { + + if ( target === undefined ) { + + console.warn( 'THREE.Triangle: .getNormal() target is now required' ); + target = new Vector3(); + + } + + target.subVectors( c, b ); + _v0$1.subVectors( a, b ); + target.cross( _v0$1 ); + + var targetLengthSq = target.lengthSq(); + if ( targetLengthSq > 0 ) { + + return target.multiplyScalar( 1 / Math.sqrt( targetLengthSq ) ); + + } + + return target.set( 0, 0, 0 ); + + }; + + // static/instance method to calculate barycentric coordinates + // based on: http://www.blackpawn.com/texts/pointinpoly/default.html + Triangle.getBarycoord = function getBarycoord ( point, a, b, c, target ) { + + _v0$1.subVectors( c, a ); + _v1$3.subVectors( b, a ); + _v2$1.subVectors( point, a ); + + var dot00 = _v0$1.dot( _v0$1 ); + var dot01 = _v0$1.dot( _v1$3 ); + var dot02 = _v0$1.dot( _v2$1 ); + var dot11 = _v1$3.dot( _v1$3 ); + var dot12 = _v1$3.dot( _v2$1 ); + + var denom = ( dot00 * dot11 - dot01 * dot01 ); + + if ( target === undefined ) { + + console.warn( 'THREE.Triangle: .getBarycoord() target is now required' ); + target = new Vector3(); + + } + + // collinear or singular triangle + if ( denom === 0 ) { + + // arbitrary location outside of triangle? + // not sure if this is the best idea, maybe should be returning undefined + return target.set( - 2, - 1, - 1 ); + + } + + var invDenom = 1 / denom; + var u = ( dot11 * dot02 - dot01 * dot12 ) * invDenom; + var v = ( dot00 * dot12 - dot01 * dot02 ) * invDenom; + + // barycentric coordinates must always sum to 1 + return target.set( 1 - u - v, v, u ); + + }; + + Triangle.containsPoint = function containsPoint ( point, a, b, c ) { + + this.getBarycoord( point, a, b, c, _v3 ); + + return ( _v3.x >= 0 ) && ( _v3.y >= 0 ) && ( ( _v3.x + _v3.y ) <= 1 ); + + }; + + Triangle.getUV = function getUV ( point, p1, p2, p3, uv1, uv2, uv3, target ) { + + this.getBarycoord( point, p1, p2, p3, _v3 ); + + target.set( 0, 0 ); + target.addScaledVector( uv1, _v3.x ); + target.addScaledVector( uv2, _v3.y ); + target.addScaledVector( uv3, _v3.z ); + + return target; + + }; + + Triangle.isFrontFacing = function isFrontFacing ( a, b, c, direction ) { + + _v0$1.subVectors( c, b ); + _v1$3.subVectors( a, b ); + + // strictly front facing + return ( _v0$1.cross( _v1$3 ).dot( direction ) < 0 ) ? true : false; + + }; + + Triangle.prototype.set = function set ( a, b, c ) { + + this.a.copy( a ); + this.b.copy( b ); + this.c.copy( c ); + + return this; + + }; + + Triangle.prototype.setFromPointsAndIndices = function setFromPointsAndIndices ( points, i0, i1, i2 ) { + + this.a.copy( points[ i0 ] ); + this.b.copy( points[ i1 ] ); + this.c.copy( points[ i2 ] ); + + return this; + + }; + + Triangle.prototype.clone = function clone () { + + return new this.constructor().copy( this ); + + }; + + Triangle.prototype.copy = function copy ( triangle ) { + + this.a.copy( triangle.a ); + this.b.copy( triangle.b ); + this.c.copy( triangle.c ); + + return this; + + }; + + Triangle.prototype.getArea = function getArea () { + + _v0$1.subVectors( this.c, this.b ); + _v1$3.subVectors( this.a, this.b ); + + return _v0$1.cross( _v1$3 ).length() * 0.5; + + }; + + Triangle.prototype.getMidpoint = function getMidpoint ( target ) { + + if ( target === undefined ) { + + console.warn( 'THREE.Triangle: .getMidpoint() target is now required' ); + target = new Vector3(); + + } + + return target.addVectors( this.a, this.b ).add( this.c ).multiplyScalar( 1 / 3 ); + + }; + + Triangle.prototype.getNormal = function getNormal ( target ) { + + return Triangle.getNormal( this.a, this.b, this.c, target ); + + }; + + Triangle.prototype.getPlane = function getPlane ( target ) { + + if ( target === undefined ) { + + console.warn( 'THREE.Triangle: .getPlane() target is now required' ); + target = new Plane(); + + } + + return target.setFromCoplanarPoints( this.a, this.b, this.c ); + + }; + + Triangle.prototype.getBarycoord = function getBarycoord ( point, target ) { + + return Triangle.getBarycoord( point, this.a, this.b, this.c, target ); + + }; + + Triangle.prototype.getUV = function getUV ( point, uv1, uv2, uv3, target ) { + + return Triangle.getUV( point, this.a, this.b, this.c, uv1, uv2, uv3, target ); + + }; + + Triangle.prototype.containsPoint = function containsPoint ( point ) { + + return Triangle.containsPoint( point, this.a, this.b, this.c ); + + }; + + Triangle.prototype.isFrontFacing = function isFrontFacing ( direction ) { + + return Triangle.isFrontFacing( this.a, this.b, this.c, direction ); + + }; + + Triangle.prototype.intersectsBox = function intersectsBox ( box ) { + + return box.intersectsTriangle( this ); + + }; + + Triangle.prototype.closestPointToPoint = function closestPointToPoint ( p, target ) { + + if ( target === undefined ) { + + console.warn( 'THREE.Triangle: .closestPointToPoint() target is now required' ); + target = new Vector3(); + + } + + var a = this.a, b = this.b, c = this.c; + var v, w; + + // algorithm thanks to Real-Time Collision Detection by Christer Ericson, + // published by Morgan Kaufmann Publishers, (c) 2005 Elsevier Inc., + // under the accompanying license; see chapter 5.1.5 for detailed explanation. + // basically, we're distinguishing which of the voronoi regions of the triangle + // the point lies in with the minimum amount of redundant computation. + + _vab.subVectors( b, a ); + _vac.subVectors( c, a ); + _vap.subVectors( p, a ); + var d1 = _vab.dot( _vap ); + var d2 = _vac.dot( _vap ); + if ( d1 <= 0 && d2 <= 0 ) { + + // vertex region of A; barycentric coords (1, 0, 0) + return target.copy( a ); + + } + + _vbp.subVectors( p, b ); + var d3 = _vab.dot( _vbp ); + var d4 = _vac.dot( _vbp ); + if ( d3 >= 0 && d4 <= d3 ) { + + // vertex region of B; barycentric coords (0, 1, 0) + return target.copy( b ); + + } + + var vc = d1 * d4 - d3 * d2; + if ( vc <= 0 && d1 >= 0 && d3 <= 0 ) { + + v = d1 / ( d1 - d3 ); + // edge region of AB; barycentric coords (1-v, v, 0) + return target.copy( a ).addScaledVector( _vab, v ); + + } + + _vcp.subVectors( p, c ); + var d5 = _vab.dot( _vcp ); + var d6 = _vac.dot( _vcp ); + if ( d6 >= 0 && d5 <= d6 ) { + + // vertex region of C; barycentric coords (0, 0, 1) + return target.copy( c ); + + } + + var vb = d5 * d2 - d1 * d6; + if ( vb <= 0 && d2 >= 0 && d6 <= 0 ) { + + w = d2 / ( d2 - d6 ); + // edge region of AC; barycentric coords (1-w, 0, w) + return target.copy( a ).addScaledVector( _vac, w ); + + } + + var va = d3 * d6 - d5 * d4; + if ( va <= 0 && ( d4 - d3 ) >= 0 && ( d5 - d6 ) >= 0 ) { + + _vbc.subVectors( c, b ); + w = ( d4 - d3 ) / ( ( d4 - d3 ) + ( d5 - d6 ) ); + // edge region of BC; barycentric coords (0, 1-w, w) + return target.copy( b ).addScaledVector( _vbc, w ); // edge region of BC + + } + + // face region + var denom = 1 / ( va + vb + vc ); + // u = va * denom + v = vb * denom; + w = vc * denom; + + return target.copy( a ).addScaledVector( _vab, v ).addScaledVector( _vac, w ); + + }; + + Triangle.prototype.equals = function equals ( triangle ) { + + return triangle.a.equals( this.a ) && triangle.b.equals( this.b ) && triangle.c.equals( this.c ); + + }; + + var _colorKeywords = { 'aliceblue': 0xF0F8FF, 'antiquewhite': 0xFAEBD7, 'aqua': 0x00FFFF, 'aquamarine': 0x7FFFD4, 'azure': 0xF0FFFF, + 'beige': 0xF5F5DC, 'bisque': 0xFFE4C4, 'black': 0x000000, 'blanchedalmond': 0xFFEBCD, 'blue': 0x0000FF, 'blueviolet': 0x8A2BE2, + 'brown': 0xA52A2A, 'burlywood': 0xDEB887, 'cadetblue': 0x5F9EA0, 'chartreuse': 0x7FFF00, 'chocolate': 0xD2691E, 'coral': 0xFF7F50, + 'cornflowerblue': 0x6495ED, 'cornsilk': 0xFFF8DC, 'crimson': 0xDC143C, 'cyan': 0x00FFFF, 'darkblue': 0x00008B, 'darkcyan': 0x008B8B, + 'darkgoldenrod': 0xB8860B, 'darkgray': 0xA9A9A9, 'darkgreen': 0x006400, 'darkgrey': 0xA9A9A9, 'darkkhaki': 0xBDB76B, 'darkmagenta': 0x8B008B, + 'darkolivegreen': 0x556B2F, 'darkorange': 0xFF8C00, 'darkorchid': 0x9932CC, 'darkred': 0x8B0000, 'darksalmon': 0xE9967A, 'darkseagreen': 0x8FBC8F, + 'darkslateblue': 0x483D8B, 'darkslategray': 0x2F4F4F, 'darkslategrey': 0x2F4F4F, 'darkturquoise': 0x00CED1, 'darkviolet': 0x9400D3, + 'deeppink': 0xFF1493, 'deepskyblue': 0x00BFFF, 'dimgray': 0x696969, 'dimgrey': 0x696969, 'dodgerblue': 0x1E90FF, 'firebrick': 0xB22222, + 'floralwhite': 0xFFFAF0, 'forestgreen': 0x228B22, 'fuchsia': 0xFF00FF, 'gainsboro': 0xDCDCDC, 'ghostwhite': 0xF8F8FF, 'gold': 0xFFD700, + 'goldenrod': 0xDAA520, 'gray': 0x808080, 'green': 0x008000, 'greenyellow': 0xADFF2F, 'grey': 0x808080, 'honeydew': 0xF0FFF0, 'hotpink': 0xFF69B4, + 'indianred': 0xCD5C5C, 'indigo': 0x4B0082, 'ivory': 0xFFFFF0, 'khaki': 0xF0E68C, 'lavender': 0xE6E6FA, 'lavenderblush': 0xFFF0F5, 'lawngreen': 0x7CFC00, + 'lemonchiffon': 0xFFFACD, 'lightblue': 0xADD8E6, 'lightcoral': 0xF08080, 'lightcyan': 0xE0FFFF, 'lightgoldenrodyellow': 0xFAFAD2, 'lightgray': 0xD3D3D3, + 'lightgreen': 0x90EE90, 'lightgrey': 0xD3D3D3, 'lightpink': 0xFFB6C1, 'lightsalmon': 0xFFA07A, 'lightseagreen': 0x20B2AA, 'lightskyblue': 0x87CEFA, + 'lightslategray': 0x778899, 'lightslategrey': 0x778899, 'lightsteelblue': 0xB0C4DE, 'lightyellow': 0xFFFFE0, 'lime': 0x00FF00, 'limegreen': 0x32CD32, + 'linen': 0xFAF0E6, 'magenta': 0xFF00FF, 'maroon': 0x800000, 'mediumaquamarine': 0x66CDAA, 'mediumblue': 0x0000CD, 'mediumorchid': 0xBA55D3, + 'mediumpurple': 0x9370DB, 'mediumseagreen': 0x3CB371, 'mediumslateblue': 0x7B68EE, 'mediumspringgreen': 0x00FA9A, 'mediumturquoise': 0x48D1CC, + 'mediumvioletred': 0xC71585, 'midnightblue': 0x191970, 'mintcream': 0xF5FFFA, 'mistyrose': 0xFFE4E1, 'moccasin': 0xFFE4B5, 'navajowhite': 0xFFDEAD, + 'navy': 0x000080, 'oldlace': 0xFDF5E6, 'olive': 0x808000, 'olivedrab': 0x6B8E23, 'orange': 0xFFA500, 'orangered': 0xFF4500, 'orchid': 0xDA70D6, + 'palegoldenrod': 0xEEE8AA, 'palegreen': 0x98FB98, 'paleturquoise': 0xAFEEEE, 'palevioletred': 0xDB7093, 'papayawhip': 0xFFEFD5, 'peachpuff': 0xFFDAB9, + 'peru': 0xCD853F, 'pink': 0xFFC0CB, 'plum': 0xDDA0DD, 'powderblue': 0xB0E0E6, 'purple': 0x800080, 'rebeccapurple': 0x663399, 'red': 0xFF0000, 'rosybrown': 0xBC8F8F, + 'royalblue': 0x4169E1, 'saddlebrown': 0x8B4513, 'salmon': 0xFA8072, 'sandybrown': 0xF4A460, 'seagreen': 0x2E8B57, 'seashell': 0xFFF5EE, + 'sienna': 0xA0522D, 'silver': 0xC0C0C0, 'skyblue': 0x87CEEB, 'slateblue': 0x6A5ACD, 'slategray': 0x708090, 'slategrey': 0x708090, 'snow': 0xFFFAFA, + 'springgreen': 0x00FF7F, 'steelblue': 0x4682B4, 'tan': 0xD2B48C, 'teal': 0x008080, 'thistle': 0xD8BFD8, 'tomato': 0xFF6347, 'turquoise': 0x40E0D0, + 'violet': 0xEE82EE, 'wheat': 0xF5DEB3, 'white': 0xFFFFFF, 'whitesmoke': 0xF5F5F5, 'yellow': 0xFFFF00, 'yellowgreen': 0x9ACD32 }; + + var _hslA = { h: 0, s: 0, l: 0 }; + var _hslB = { h: 0, s: 0, l: 0 }; + + function hue2rgb( p, q, t ) { + + if ( t < 0 ) { t += 1; } + if ( t > 1 ) { t -= 1; } + if ( t < 1 / 6 ) { return p + ( q - p ) * 6 * t; } + if ( t < 1 / 2 ) { return q; } + if ( t < 2 / 3 ) { return p + ( q - p ) * 6 * ( 2 / 3 - t ); } + return p; + + } + + function SRGBToLinear( c ) { + + return ( c < 0.04045 ) ? c * 0.0773993808 : Math.pow( c * 0.9478672986 + 0.0521327014, 2.4 ); + + } + + function LinearToSRGB( c ) { + + return ( c < 0.0031308 ) ? c * 12.92 : 1.055 * ( Math.pow( c, 0.41666 ) ) - 0.055; + + } + + var Color = function Color( r, g, b ) { + + Object.defineProperty( this, 'isColor', { value: true } ); + + if ( g === undefined && b === undefined ) { + + // r is THREE.Color, hex or string + return this.set( r ); + + } + + return this.setRGB( r, g, b ); + + }; + + Color.prototype.set = function set ( value ) { + + if ( value && value.isColor ) { + + this.copy( value ); + + } else if ( typeof value === 'number' ) { + + this.setHex( value ); + + } else if ( typeof value === 'string' ) { + + this.setStyle( value ); + + } + + return this; + + }; + + Color.prototype.setScalar = function setScalar ( scalar ) { + + this.r = scalar; + this.g = scalar; + this.b = scalar; + + return this; + + }; + + Color.prototype.setHex = function setHex ( hex ) { + + hex = Math.floor( hex ); + + this.r = ( hex >> 16 & 255 ) / 255; + this.g = ( hex >> 8 & 255 ) / 255; + this.b = ( hex & 255 ) / 255; + + return this; + + }; + + Color.prototype.setRGB = function setRGB ( r, g, b ) { + + this.r = r; + this.g = g; + this.b = b; + + return this; + + }; + + Color.prototype.setHSL = function setHSL ( h, s, l ) { + + // h,s,l ranges are in 0.0 - 1.0 + h = MathUtils.euclideanModulo( h, 1 ); + s = MathUtils.clamp( s, 0, 1 ); + l = MathUtils.clamp( l, 0, 1 ); + + if ( s === 0 ) { + + this.r = this.g = this.b = l; + + } else { + + var p = l <= 0.5 ? l * ( 1 + s ) : l + s - ( l * s ); + var q = ( 2 * l ) - p; + + this.r = hue2rgb( q, p, h + 1 / 3 ); + this.g = hue2rgb( q, p, h ); + this.b = hue2rgb( q, p, h - 1 / 3 ); + + } + + return this; + + }; + + Color.prototype.setStyle = function setStyle ( style ) { + + function handleAlpha( string ) { + + if ( string === undefined ) { return; } + + if ( parseFloat( string ) < 1 ) { + + console.warn( 'THREE.Color: Alpha component of ' + style + ' will be ignored.' ); + + } + + } + + + var m; + + if ( m = /^((?:rgb|hsl)a?)\(\s*([^\)]*)\)/.exec( style ) ) { + + // rgb / hsl + + var color; + var name = m[ 1 ]; + var components = m[ 2 ]; + + switch ( name ) { + + case 'rgb': + case 'rgba': + + if ( color = /^(\d+)\s*,\s*(\d+)\s*,\s*(\d+)\s*(,\s*([0-9]*\.?[0-9]+)\s*)?$/.exec( components ) ) { + + // rgb(255,0,0) rgba(255,0,0,0.5) + this.r = Math.min( 255, parseInt( color[ 1 ], 10 ) ) / 255; + this.g = Math.min( 255, parseInt( color[ 2 ], 10 ) ) / 255; + this.b = Math.min( 255, parseInt( color[ 3 ], 10 ) ) / 255; + + handleAlpha( color[ 5 ] ); + + return this; + + } + + if ( color = /^(\d+)\%\s*,\s*(\d+)\%\s*,\s*(\d+)\%\s*(,\s*([0-9]*\.?[0-9]+)\s*)?$/.exec( components ) ) { + + // rgb(100%,0%,0%) rgba(100%,0%,0%,0.5) + this.r = Math.min( 100, parseInt( color[ 1 ], 10 ) ) / 100; + this.g = Math.min( 100, parseInt( color[ 2 ], 10 ) ) / 100; + this.b = Math.min( 100, parseInt( color[ 3 ], 10 ) ) / 100; + + handleAlpha( color[ 5 ] ); + + return this; + + } + + break; + + case 'hsl': + case 'hsla': + + if ( color = /^([0-9]*\.?[0-9]+)\s*,\s*(\d+)\%\s*,\s*(\d+)\%\s*(,\s*([0-9]*\.?[0-9]+)\s*)?$/.exec( components ) ) { + + // hsl(120,50%,50%) hsla(120,50%,50%,0.5) + var h = parseFloat( color[ 1 ] ) / 360; + var s = parseInt( color[ 2 ], 10 ) / 100; + var l = parseInt( color[ 3 ], 10 ) / 100; + + handleAlpha( color[ 5 ] ); + + return this.setHSL( h, s, l ); + + } + + break; + + } + + } else if ( m = /^\#([A-Fa-f0-9]+)$/.exec( style ) ) { + + // hex color + + var hex = m[ 1 ]; + var size = hex.length; + + if ( size === 3 ) { + + // #ff0 + this.r = parseInt( hex.charAt( 0 ) + hex.charAt( 0 ), 16 ) / 255; + this.g = parseInt( hex.charAt( 1 ) + hex.charAt( 1 ), 16 ) / 255; + this.b = parseInt( hex.charAt( 2 ) + hex.charAt( 2 ), 16 ) / 255; + + return this; + + } else if ( size === 6 ) { + + // #ff0000 + this.r = parseInt( hex.charAt( 0 ) + hex.charAt( 1 ), 16 ) / 255; + this.g = parseInt( hex.charAt( 2 ) + hex.charAt( 3 ), 16 ) / 255; + this.b = parseInt( hex.charAt( 4 ) + hex.charAt( 5 ), 16 ) / 255; + + return this; + + } + + } + + if ( style && style.length > 0 ) { + + return this.setColorName( style ); + + } + + return this; + + }; + + Color.prototype.setColorName = function setColorName ( style ) { + + // color keywords + var hex = _colorKeywords[ style ]; + + if ( hex !== undefined ) { + + // red + this.setHex( hex ); + + } else { + + // unknown color + console.warn( 'THREE.Color: Unknown color ' + style ); + + } + + return this; + + }; + + Color.prototype.clone = function clone () { + + return new this.constructor( this.r, this.g, this.b ); + + }; + + Color.prototype.copy = function copy ( color ) { + + this.r = color.r; + this.g = color.g; + this.b = color.b; + + return this; + + }; + + Color.prototype.copyGammaToLinear = function copyGammaToLinear ( color, gammaFactor ) { + + if ( gammaFactor === undefined ) { gammaFactor = 2.0; } + + this.r = Math.pow( color.r, gammaFactor ); + this.g = Math.pow( color.g, gammaFactor ); + this.b = Math.pow( color.b, gammaFactor ); + + return this; + + }; + + Color.prototype.copyLinearToGamma = function copyLinearToGamma ( color, gammaFactor ) { + + if ( gammaFactor === undefined ) { gammaFactor = 2.0; } + + var safeInverse = ( gammaFactor > 0 ) ? ( 1.0 / gammaFactor ) : 1.0; + + this.r = Math.pow( color.r, safeInverse ); + this.g = Math.pow( color.g, safeInverse ); + this.b = Math.pow( color.b, safeInverse ); + + return this; + + }; + + Color.prototype.convertGammaToLinear = function convertGammaToLinear ( gammaFactor ) { + + this.copyGammaToLinear( this, gammaFactor ); + + return this; + + }; + + Color.prototype.convertLinearToGamma = function convertLinearToGamma ( gammaFactor ) { + + this.copyLinearToGamma( this, gammaFactor ); + + return this; + + }; + + Color.prototype.copySRGBToLinear = function copySRGBToLinear ( color ) { + + this.r = SRGBToLinear( color.r ); + this.g = SRGBToLinear( color.g ); + this.b = SRGBToLinear( color.b ); + + return this; + + }; + + Color.prototype.copyLinearToSRGB = function copyLinearToSRGB ( color ) { + + this.r = LinearToSRGB( color.r ); + this.g = LinearToSRGB( color.g ); + this.b = LinearToSRGB( color.b ); + + return this; + + }; + + Color.prototype.convertSRGBToLinear = function convertSRGBToLinear () { + + this.copySRGBToLinear( this ); + + return this; + + }; + + Color.prototype.convertLinearToSRGB = function convertLinearToSRGB () { + + this.copyLinearToSRGB( this ); + + return this; + + }; + + Color.prototype.getHex = function getHex () { + + return ( this.r * 255 ) << 16 ^ ( this.g * 255 ) << 8 ^ ( this.b * 255 ) << 0; + + }; + + Color.prototype.getHexString = function getHexString () { + + return ( '000000' + this.getHex().toString( 16 ) ).slice( - 6 ); + + }; + + Color.prototype.getHSL = function getHSL ( target ) { + + // h,s,l ranges are in 0.0 - 1.0 + + if ( target === undefined ) { + + console.warn( 'THREE.Color: .getHSL() target is now required' ); + target = { h: 0, s: 0, l: 0 }; + + } + + var r = this.r, g = this.g, b = this.b; + + var max = Math.max( r, g, b ); + var min = Math.min( r, g, b ); + + var hue, saturation; + var lightness = ( min + max ) / 2.0; + + if ( min === max ) { + + hue = 0; + saturation = 0; + + } else { + + var delta = max - min; + + saturation = lightness <= 0.5 ? delta / ( max + min ) : delta / ( 2 - max - min ); + + switch ( max ) { + + case r: hue = ( g - b ) / delta + ( g < b ? 6 : 0 ); break; + case g: hue = ( b - r ) / delta + 2; break; + case b: hue = ( r - g ) / delta + 4; break; + + } + + hue /= 6; + + } + + target.h = hue; + target.s = saturation; + target.l = lightness; + + return target; + + }; + + Color.prototype.getStyle = function getStyle () { + + return 'rgb(' + ( ( this.r * 255 ) | 0 ) + ',' + ( ( this.g * 255 ) | 0 ) + ',' + ( ( this.b * 255 ) | 0 ) + ')'; + + }; + + Color.prototype.offsetHSL = function offsetHSL ( h, s, l ) { + + this.getHSL( _hslA ); + + _hslA.h += h; _hslA.s += s; _hslA.l += l; + + this.setHSL( _hslA.h, _hslA.s, _hslA.l ); + + return this; + + }; + + Color.prototype.add = function add ( color ) { + + this.r += color.r; + this.g += color.g; + this.b += color.b; + + return this; + + }; + + Color.prototype.addColors = function addColors ( color1, color2 ) { + + this.r = color1.r + color2.r; + this.g = color1.g + color2.g; + this.b = color1.b + color2.b; + + return this; + + }; + + Color.prototype.addScalar = function addScalar ( s ) { + + this.r += s; + this.g += s; + this.b += s; + + return this; + + }; + + Color.prototype.sub = function sub ( color ) { + + this.r = Math.max( 0, this.r - color.r ); + this.g = Math.max( 0, this.g - color.g ); + this.b = Math.max( 0, this.b - color.b ); + + return this; + + }; + + Color.prototype.multiply = function multiply ( color ) { + + this.r *= color.r; + this.g *= color.g; + this.b *= color.b; + + return this; + + }; + + Color.prototype.multiplyScalar = function multiplyScalar ( s ) { + + this.r *= s; + this.g *= s; + this.b *= s; + + return this; + + }; + + Color.prototype.lerp = function lerp ( color, alpha ) { + + this.r += ( color.r - this.r ) * alpha; + this.g += ( color.g - this.g ) * alpha; + this.b += ( color.b - this.b ) * alpha; + + return this; + + }; + + Color.prototype.lerpHSL = function lerpHSL ( color, alpha ) { + + this.getHSL( _hslA ); + color.getHSL( _hslB ); + + var h = MathUtils.lerp( _hslA.h, _hslB.h, alpha ); + var s = MathUtils.lerp( _hslA.s, _hslB.s, alpha ); + var l = MathUtils.lerp( _hslA.l, _hslB.l, alpha ); + + this.setHSL( h, s, l ); + + return this; + + }; + + Color.prototype.equals = function equals ( c ) { + + return ( c.r === this.r ) && ( c.g === this.g ) && ( c.b === this.b ); + + }; + + Color.prototype.fromArray = function fromArray ( array, offset ) { + + if ( offset === undefined ) { offset = 0; } + + this.r = array[ offset ]; + this.g = array[ offset + 1 ]; + this.b = array[ offset + 2 ]; + + return this; + + }; + + Color.prototype.toArray = function toArray ( array, offset ) { + + if ( array === undefined ) { array = []; } + if ( offset === undefined ) { offset = 0; } + + array[ offset ] = this.r; + array[ offset + 1 ] = this.g; + array[ offset + 2 ] = this.b; + + return array; + + }; + + Color.prototype.fromBufferAttribute = function fromBufferAttribute ( attribute, index ) { + + this.r = attribute.getX( index ); + this.g = attribute.getY( index ); + this.b = attribute.getZ( index ); + + if ( attribute.normalized === true ) { + + // assuming Uint8Array + + this.r /= 255; + this.g /= 255; + this.b /= 255; + + } + + return this; + + }; + + Color.prototype.toJSON = function toJSON () { + + return this.getHex(); + + }; + + Color.NAMES = _colorKeywords; + Color.prototype.r = 1; + Color.prototype.g = 1; + Color.prototype.b = 1; + + var Face3 = function Face3( a, b, c, normal, color, materialIndex ) { + + this.a = a; + this.b = b; + this.c = c; + + this.normal = ( normal && normal.isVector3 ) ? normal : new Vector3(); + this.vertexNormals = Array.isArray( normal ) ? normal : []; + + this.color = ( color && color.isColor ) ? color : new Color(); + this.vertexColors = Array.isArray( color ) ? color : []; + + this.materialIndex = materialIndex !== undefined ? materialIndex : 0; + + }; + + Face3.prototype.clone = function clone () { + + return new this.constructor().copy( this ); + + }; + + Face3.prototype.copy = function copy ( source ) { + + this.a = source.a; + this.b = source.b; + this.c = source.c; + + this.normal.copy( source.normal ); + this.color.copy( source.color ); + + this.materialIndex = source.materialIndex; + + for ( var i = 0, il = source.vertexNormals.length; i < il; i ++ ) { + + this.vertexNormals[ i ] = source.vertexNormals[ i ].clone(); + + } + + for ( var i$1 = 0, il$1 = source.vertexColors.length; i$1 < il$1; i$1 ++ ) { + + this.vertexColors[ i$1 ] = source.vertexColors[ i$1 ].clone(); + + } + + return this; + + }; + + var materialId = 0; + + function Material() { + + Object.defineProperty( this, 'id', { value: materialId ++ } ); + + this.uuid = MathUtils.generateUUID(); + + this.name = ''; + this.type = 'Material'; + + this.fog = true; + + this.blending = NormalBlending; + this.side = FrontSide; + this.flatShading = false; + this.vertexColors = false; + + this.opacity = 1; + this.transparent = false; + + this.blendSrc = SrcAlphaFactor; + this.blendDst = OneMinusSrcAlphaFactor; + this.blendEquation = AddEquation; + this.blendSrcAlpha = null; + this.blendDstAlpha = null; + this.blendEquationAlpha = null; + + this.depthFunc = LessEqualDepth; + this.depthTest = true; + this.depthWrite = true; + + this.stencilWriteMask = 0xff; + this.stencilFunc = AlwaysStencilFunc; + this.stencilRef = 0; + this.stencilFuncMask = 0xff; + this.stencilFail = KeepStencilOp; + this.stencilZFail = KeepStencilOp; + this.stencilZPass = KeepStencilOp; + this.stencilWrite = false; + + this.clippingPlanes = null; + this.clipIntersection = false; + this.clipShadows = false; + + this.shadowSide = null; + + this.colorWrite = true; + + this.precision = null; // override the renderer's default precision for this material + + this.polygonOffset = false; + this.polygonOffsetFactor = 0; + this.polygonOffsetUnits = 0; + + this.dithering = false; + + this.alphaTest = 0; + this.premultipliedAlpha = false; + + this.visible = true; + + this.toneMapped = true; + + this.userData = {}; + + this.version = 0; + + } + + Material.prototype = Object.assign( Object.create( EventDispatcher.prototype ), { + + constructor: Material, + + isMaterial: true, + + onBeforeCompile: function ( /* shaderobject, renderer */ ) {}, + + customProgramCacheKey: function () { + + return this.onBeforeCompile.toString(); + + }, + + setValues: function ( values ) { + + if ( values === undefined ) { return; } + + for ( var key in values ) { + + var newValue = values[ key ]; + + if ( newValue === undefined ) { + + console.warn( "THREE.Material: '" + key + "' parameter is undefined." ); + continue; + + } + + // for backward compatability if shading is set in the constructor + if ( key === 'shading' ) { + + console.warn( 'THREE.' + this.type + ': .shading has been removed. Use the boolean .flatShading instead.' ); + this.flatShading = ( newValue === FlatShading ) ? true : false; + continue; + + } + + var currentValue = this[ key ]; + + if ( currentValue === undefined ) { + + console.warn( "THREE." + this.type + ": '" + key + "' is not a property of this material." ); + continue; + + } + + if ( currentValue && currentValue.isColor ) { + + currentValue.set( newValue ); + + } else if ( ( currentValue && currentValue.isVector3 ) && ( newValue && newValue.isVector3 ) ) { + + currentValue.copy( newValue ); + + } else { + + this[ key ] = newValue; + + } + + } + + }, + + toJSON: function ( meta ) { + + var isRoot = ( meta === undefined || typeof meta === 'string' ); + + if ( isRoot ) { + + meta = { + textures: {}, + images: {} + }; + + } + + var data = { + metadata: { + version: 4.5, + type: 'Material', + generator: 'Material.toJSON' + } + }; + + // standard Material serialization + data.uuid = this.uuid; + data.type = this.type; + + if ( this.name !== '' ) { data.name = this.name; } + + if ( this.color && this.color.isColor ) { data.color = this.color.getHex(); } + + if ( this.roughness !== undefined ) { data.roughness = this.roughness; } + if ( this.metalness !== undefined ) { data.metalness = this.metalness; } + + if ( this.sheen && this.sheen.isColor ) { data.sheen = this.sheen.getHex(); } + if ( this.emissive && this.emissive.isColor ) { data.emissive = this.emissive.getHex(); } + if ( this.emissiveIntensity && this.emissiveIntensity !== 1 ) { data.emissiveIntensity = this.emissiveIntensity; } + + if ( this.specular && this.specular.isColor ) { data.specular = this.specular.getHex(); } + if ( this.shininess !== undefined ) { data.shininess = this.shininess; } + if ( this.clearcoat !== undefined ) { data.clearcoat = this.clearcoat; } + if ( this.clearcoatRoughness !== undefined ) { data.clearcoatRoughness = this.clearcoatRoughness; } + + if ( this.clearcoatMap && this.clearcoatMap.isTexture ) { + + data.clearcoatMap = this.clearcoatMap.toJSON( meta ).uuid; + + } + + if ( this.clearcoatRoughnessMap && this.clearcoatRoughnessMap.isTexture ) { + + data.clearcoatRoughnessMap = this.clearcoatRoughnessMap.toJSON( meta ).uuid; + + } + + if ( this.clearcoatNormalMap && this.clearcoatNormalMap.isTexture ) { + + data.clearcoatNormalMap = this.clearcoatNormalMap.toJSON( meta ).uuid; + data.clearcoatNormalScale = this.clearcoatNormalScale.toArray(); + + } + + if ( this.map && this.map.isTexture ) { data.map = this.map.toJSON( meta ).uuid; } + if ( this.matcap && this.matcap.isTexture ) { data.matcap = this.matcap.toJSON( meta ).uuid; } + if ( this.alphaMap && this.alphaMap.isTexture ) { data.alphaMap = this.alphaMap.toJSON( meta ).uuid; } + if ( this.lightMap && this.lightMap.isTexture ) { data.lightMap = this.lightMap.toJSON( meta ).uuid; } + + if ( this.aoMap && this.aoMap.isTexture ) { + + data.aoMap = this.aoMap.toJSON( meta ).uuid; + data.aoMapIntensity = this.aoMapIntensity; + + } + + if ( this.bumpMap && this.bumpMap.isTexture ) { + + data.bumpMap = this.bumpMap.toJSON( meta ).uuid; + data.bumpScale = this.bumpScale; + + } + + if ( this.normalMap && this.normalMap.isTexture ) { + + data.normalMap = this.normalMap.toJSON( meta ).uuid; + data.normalMapType = this.normalMapType; + data.normalScale = this.normalScale.toArray(); + + } + + if ( this.displacementMap && this.displacementMap.isTexture ) { + + data.displacementMap = this.displacementMap.toJSON( meta ).uuid; + data.displacementScale = this.displacementScale; + data.displacementBias = this.displacementBias; + + } + + if ( this.roughnessMap && this.roughnessMap.isTexture ) { data.roughnessMap = this.roughnessMap.toJSON( meta ).uuid; } + if ( this.metalnessMap && this.metalnessMap.isTexture ) { data.metalnessMap = this.metalnessMap.toJSON( meta ).uuid; } + + if ( this.emissiveMap && this.emissiveMap.isTexture ) { data.emissiveMap = this.emissiveMap.toJSON( meta ).uuid; } + if ( this.specularMap && this.specularMap.isTexture ) { data.specularMap = this.specularMap.toJSON( meta ).uuid; } + + if ( this.envMap && this.envMap.isTexture ) { + + data.envMap = this.envMap.toJSON( meta ).uuid; + data.reflectivity = this.reflectivity; // Scale behind envMap + data.refractionRatio = this.refractionRatio; + + if ( this.combine !== undefined ) { data.combine = this.combine; } + if ( this.envMapIntensity !== undefined ) { data.envMapIntensity = this.envMapIntensity; } + + } + + if ( this.gradientMap && this.gradientMap.isTexture ) { + + data.gradientMap = this.gradientMap.toJSON( meta ).uuid; + + } + + if ( this.size !== undefined ) { data.size = this.size; } + if ( this.sizeAttenuation !== undefined ) { data.sizeAttenuation = this.sizeAttenuation; } + + if ( this.blending !== NormalBlending ) { data.blending = this.blending; } + if ( this.flatShading === true ) { data.flatShading = this.flatShading; } + if ( this.side !== FrontSide ) { data.side = this.side; } + if ( this.vertexColors ) { data.vertexColors = true; } + + if ( this.opacity < 1 ) { data.opacity = this.opacity; } + if ( this.transparent === true ) { data.transparent = this.transparent; } + + data.depthFunc = this.depthFunc; + data.depthTest = this.depthTest; + data.depthWrite = this.depthWrite; + + data.stencilWrite = this.stencilWrite; + data.stencilWriteMask = this.stencilWriteMask; + data.stencilFunc = this.stencilFunc; + data.stencilRef = this.stencilRef; + data.stencilFuncMask = this.stencilFuncMask; + data.stencilFail = this.stencilFail; + data.stencilZFail = this.stencilZFail; + data.stencilZPass = this.stencilZPass; + + // rotation (SpriteMaterial) + if ( this.rotation && this.rotation !== 0 ) { data.rotation = this.rotation; } + + if ( this.polygonOffset === true ) { data.polygonOffset = true; } + if ( this.polygonOffsetFactor !== 0 ) { data.polygonOffsetFactor = this.polygonOffsetFactor; } + if ( this.polygonOffsetUnits !== 0 ) { data.polygonOffsetUnits = this.polygonOffsetUnits; } + + if ( this.linewidth && this.linewidth !== 1 ) { data.linewidth = this.linewidth; } + if ( this.dashSize !== undefined ) { data.dashSize = this.dashSize; } + if ( this.gapSize !== undefined ) { data.gapSize = this.gapSize; } + if ( this.scale !== undefined ) { data.scale = this.scale; } + + if ( this.dithering === true ) { data.dithering = true; } + + if ( this.alphaTest > 0 ) { data.alphaTest = this.alphaTest; } + if ( this.premultipliedAlpha === true ) { data.premultipliedAlpha = this.premultipliedAlpha; } + + if ( this.wireframe === true ) { data.wireframe = this.wireframe; } + if ( this.wireframeLinewidth > 1 ) { data.wireframeLinewidth = this.wireframeLinewidth; } + if ( this.wireframeLinecap !== 'round' ) { data.wireframeLinecap = this.wireframeLinecap; } + if ( this.wireframeLinejoin !== 'round' ) { data.wireframeLinejoin = this.wireframeLinejoin; } + + if ( this.morphTargets === true ) { data.morphTargets = true; } + if ( this.morphNormals === true ) { data.morphNormals = true; } + if ( this.skinning === true ) { data.skinning = true; } + + if ( this.visible === false ) { data.visible = false; } + + if ( this.toneMapped === false ) { data.toneMapped = false; } + + if ( JSON.stringify( this.userData ) !== '{}' ) { data.userData = this.userData; } + + // TODO: Copied from Object3D.toJSON + + function extractFromCache( cache ) { + + var values = []; + + for ( var key in cache ) { + + var data = cache[ key ]; + delete data.metadata; + values.push( data ); + + } + + return values; + + } + + if ( isRoot ) { + + var textures = extractFromCache( meta.textures ); + var images = extractFromCache( meta.images ); + + if ( textures.length > 0 ) { data.textures = textures; } + if ( images.length > 0 ) { data.images = images; } + + } + + return data; + + }, + + clone: function () { + + return new this.constructor().copy( this ); + + }, + + copy: function ( source ) { + + this.name = source.name; + + this.fog = source.fog; + + this.blending = source.blending; + this.side = source.side; + this.flatShading = source.flatShading; + this.vertexColors = source.vertexColors; + + this.opacity = source.opacity; + this.transparent = source.transparent; + + this.blendSrc = source.blendSrc; + this.blendDst = source.blendDst; + this.blendEquation = source.blendEquation; + this.blendSrcAlpha = source.blendSrcAlpha; + this.blendDstAlpha = source.blendDstAlpha; + this.blendEquationAlpha = source.blendEquationAlpha; + + this.depthFunc = source.depthFunc; + this.depthTest = source.depthTest; + this.depthWrite = source.depthWrite; + + this.stencilWriteMask = source.stencilWriteMask; + this.stencilFunc = source.stencilFunc; + this.stencilRef = source.stencilRef; + this.stencilFuncMask = source.stencilFuncMask; + this.stencilFail = source.stencilFail; + this.stencilZFail = source.stencilZFail; + this.stencilZPass = source.stencilZPass; + this.stencilWrite = source.stencilWrite; + + var srcPlanes = source.clippingPlanes; + var dstPlanes = null; + + if ( srcPlanes !== null ) { + + var n = srcPlanes.length; + dstPlanes = new Array( n ); + + for ( var i = 0; i !== n; ++ i ) { + + dstPlanes[ i ] = srcPlanes[ i ].clone(); + + } + + } + + this.clippingPlanes = dstPlanes; + this.clipIntersection = source.clipIntersection; + this.clipShadows = source.clipShadows; + + this.shadowSide = source.shadowSide; + + this.colorWrite = source.colorWrite; + + this.precision = source.precision; + + this.polygonOffset = source.polygonOffset; + this.polygonOffsetFactor = source.polygonOffsetFactor; + this.polygonOffsetUnits = source.polygonOffsetUnits; + + this.dithering = source.dithering; + + this.alphaTest = source.alphaTest; + this.premultipliedAlpha = source.premultipliedAlpha; + + this.visible = source.visible; + + this.toneMapped = source.toneMapped; + + this.userData = JSON.parse( JSON.stringify( source.userData ) ); + + return this; + + }, + + dispose: function () { + + this.dispatchEvent( { type: 'dispose' } ); + + } + + } ); + + Object.defineProperty( Material.prototype, 'needsUpdate', { + + set: function ( value ) { + + if ( value === true ) { this.version ++; } + + } + + } ); + + /** + * parameters = { + * color: , + * opacity: , + * map: new THREE.Texture( ), + * + * lightMap: new THREE.Texture( ), + * lightMapIntensity: + * + * aoMap: new THREE.Texture( ), + * aoMapIntensity: + * + * specularMap: new THREE.Texture( ), + * + * alphaMap: new THREE.Texture( ), + * + * envMap: new THREE.CubeTexture( [posx, negx, posy, negy, posz, negz] ), + * combine: THREE.Multiply, + * reflectivity: , + * refractionRatio: , + * + * depthTest: , + * depthWrite: , + * + * wireframe: , + * wireframeLinewidth: , + * + * skinning: , + * morphTargets: + * } + */ + + function MeshBasicMaterial( parameters ) { + + Material.call( this ); + + this.type = 'MeshBasicMaterial'; + + this.color = new Color( 0xffffff ); // emissive + + this.map = null; + + this.lightMap = null; + this.lightMapIntensity = 1.0; + + this.aoMap = null; + this.aoMapIntensity = 1.0; + + this.specularMap = null; + + this.alphaMap = null; + + this.envMap = null; + this.combine = MultiplyOperation; + this.reflectivity = 1; + this.refractionRatio = 0.98; + + this.wireframe = false; + this.wireframeLinewidth = 1; + this.wireframeLinecap = 'round'; + this.wireframeLinejoin = 'round'; + + this.skinning = false; + this.morphTargets = false; + + this.setValues( parameters ); + + } + + MeshBasicMaterial.prototype = Object.create( Material.prototype ); + MeshBasicMaterial.prototype.constructor = MeshBasicMaterial; + + MeshBasicMaterial.prototype.isMeshBasicMaterial = true; + + MeshBasicMaterial.prototype.copy = function ( source ) { + + Material.prototype.copy.call( this, source ); + + this.color.copy( source.color ); + + this.map = source.map; + + this.lightMap = source.lightMap; + this.lightMapIntensity = source.lightMapIntensity; + + this.aoMap = source.aoMap; + this.aoMapIntensity = source.aoMapIntensity; + + this.specularMap = source.specularMap; + + this.alphaMap = source.alphaMap; + + this.envMap = source.envMap; + this.combine = source.combine; + this.reflectivity = source.reflectivity; + this.refractionRatio = source.refractionRatio; + + this.wireframe = source.wireframe; + this.wireframeLinewidth = source.wireframeLinewidth; + this.wireframeLinecap = source.wireframeLinecap; + this.wireframeLinejoin = source.wireframeLinejoin; + + this.skinning = source.skinning; + this.morphTargets = source.morphTargets; + + return this; + + }; + + var _vector$3 = new Vector3(); + var _vector2$1 = new Vector2(); + + function BufferAttribute( array, itemSize, normalized ) { + + if ( Array.isArray( array ) ) { + + throw new TypeError( 'THREE.BufferAttribute: array should be a Typed Array.' ); + + } + + this.name = ''; + + this.array = array; + this.itemSize = itemSize; + this.count = array !== undefined ? array.length / itemSize : 0; + this.normalized = normalized === true; + + this.usage = StaticDrawUsage; + this.updateRange = { offset: 0, count: - 1 }; + + this.version = 0; + + } + + Object.defineProperty( BufferAttribute.prototype, 'needsUpdate', { + + set: function ( value ) { + + if ( value === true ) { this.version ++; } + + } + + } ); + + Object.assign( BufferAttribute.prototype, { + + isBufferAttribute: true, + + onUploadCallback: function () {}, + + setUsage: function ( value ) { + + this.usage = value; + + return this; + + }, + + copy: function ( source ) { + + this.name = source.name; + this.array = new source.array.constructor( source.array ); + this.itemSize = source.itemSize; + this.count = source.count; + this.normalized = source.normalized; + + this.usage = source.usage; + + return this; + + }, + + copyAt: function ( index1, attribute, index2 ) { + + index1 *= this.itemSize; + index2 *= attribute.itemSize; + + for ( var i = 0, l = this.itemSize; i < l; i ++ ) { + + this.array[ index1 + i ] = attribute.array[ index2 + i ]; + + } + + return this; + + }, + + copyArray: function ( array ) { + + this.array.set( array ); + + return this; + + }, + + copyColorsArray: function ( colors ) { + + var array = this.array; + var offset = 0; + + for ( var i = 0, l = colors.length; i < l; i ++ ) { + + var color = colors[ i ]; + + if ( color === undefined ) { + + console.warn( 'THREE.BufferAttribute.copyColorsArray(): color is undefined', i ); + color = new Color(); + + } + + array[ offset ++ ] = color.r; + array[ offset ++ ] = color.g; + array[ offset ++ ] = color.b; + + } + + return this; + + }, + + copyVector2sArray: function ( vectors ) { + + var array = this.array; + var offset = 0; + + for ( var i = 0, l = vectors.length; i < l; i ++ ) { + + var vector = vectors[ i ]; + + if ( vector === undefined ) { + + console.warn( 'THREE.BufferAttribute.copyVector2sArray(): vector is undefined', i ); + vector = new Vector2(); + + } + + array[ offset ++ ] = vector.x; + array[ offset ++ ] = vector.y; + + } + + return this; + + }, + + copyVector3sArray: function ( vectors ) { + + var array = this.array; + var offset = 0; + + for ( var i = 0, l = vectors.length; i < l; i ++ ) { + + var vector = vectors[ i ]; + + if ( vector === undefined ) { + + console.warn( 'THREE.BufferAttribute.copyVector3sArray(): vector is undefined', i ); + vector = new Vector3(); + + } + + array[ offset ++ ] = vector.x; + array[ offset ++ ] = vector.y; + array[ offset ++ ] = vector.z; + + } + + return this; + + }, + + copyVector4sArray: function ( vectors ) { + + var array = this.array; + var offset = 0; + + for ( var i = 0, l = vectors.length; i < l; i ++ ) { + + var vector = vectors[ i ]; + + if ( vector === undefined ) { + + console.warn( 'THREE.BufferAttribute.copyVector4sArray(): vector is undefined', i ); + vector = new Vector4(); + + } + + array[ offset ++ ] = vector.x; + array[ offset ++ ] = vector.y; + array[ offset ++ ] = vector.z; + array[ offset ++ ] = vector.w; + + } + + return this; + + }, + + applyMatrix3: function ( m ) { + + if ( this.itemSize === 2 ) { + + for ( var i = 0, l = this.count; i < l; i ++ ) { + + _vector2$1.fromBufferAttribute( this, i ); + _vector2$1.applyMatrix3( m ); + + this.setXY( i, _vector2$1.x, _vector2$1.y ); + + } + + } else if ( this.itemSize === 3 ) { + + for ( var i$1 = 0, l$1 = this.count; i$1 < l$1; i$1 ++ ) { + + _vector$3.fromBufferAttribute( this, i$1 ); + _vector$3.applyMatrix3( m ); + + this.setXYZ( i$1, _vector$3.x, _vector$3.y, _vector$3.z ); + + } + + } + + return this; + + }, + + applyMatrix4: function ( m ) { + + for ( var i = 0, l = this.count; i < l; i ++ ) { + + _vector$3.x = this.getX( i ); + _vector$3.y = this.getY( i ); + _vector$3.z = this.getZ( i ); + + _vector$3.applyMatrix4( m ); + + this.setXYZ( i, _vector$3.x, _vector$3.y, _vector$3.z ); + + } + + return this; + + }, + + applyNormalMatrix: function ( m ) { + + for ( var i = 0, l = this.count; i < l; i ++ ) { + + _vector$3.x = this.getX( i ); + _vector$3.y = this.getY( i ); + _vector$3.z = this.getZ( i ); + + _vector$3.applyNormalMatrix( m ); + + this.setXYZ( i, _vector$3.x, _vector$3.y, _vector$3.z ); + + } + + return this; + + }, + + transformDirection: function ( m ) { + + for ( var i = 0, l = this.count; i < l; i ++ ) { + + _vector$3.x = this.getX( i ); + _vector$3.y = this.getY( i ); + _vector$3.z = this.getZ( i ); + + _vector$3.transformDirection( m ); + + this.setXYZ( i, _vector$3.x, _vector$3.y, _vector$3.z ); + + } + + return this; + + }, + + set: function ( value, offset ) { + + if ( offset === undefined ) { offset = 0; } + + this.array.set( value, offset ); + + return this; + + }, + + getX: function ( index ) { + + return this.array[ index * this.itemSize ]; + + }, + + setX: function ( index, x ) { + + this.array[ index * this.itemSize ] = x; + + return this; + + }, + + getY: function ( index ) { + + return this.array[ index * this.itemSize + 1 ]; + + }, + + setY: function ( index, y ) { + + this.array[ index * this.itemSize + 1 ] = y; + + return this; + + }, + + getZ: function ( index ) { + + return this.array[ index * this.itemSize + 2 ]; + + }, + + setZ: function ( index, z ) { + + this.array[ index * this.itemSize + 2 ] = z; + + return this; + + }, + + getW: function ( index ) { + + return this.array[ index * this.itemSize + 3 ]; + + }, + + setW: function ( index, w ) { + + this.array[ index * this.itemSize + 3 ] = w; + + return this; + + }, + + setXY: function ( index, x, y ) { + + index *= this.itemSize; + + this.array[ index + 0 ] = x; + this.array[ index + 1 ] = y; + + return this; + + }, + + setXYZ: function ( index, x, y, z ) { + + index *= this.itemSize; + + this.array[ index + 0 ] = x; + this.array[ index + 1 ] = y; + this.array[ index + 2 ] = z; + + return this; + + }, + + setXYZW: function ( index, x, y, z, w ) { + + index *= this.itemSize; + + this.array[ index + 0 ] = x; + this.array[ index + 1 ] = y; + this.array[ index + 2 ] = z; + this.array[ index + 3 ] = w; + + return this; + + }, + + onUpload: function ( callback ) { + + this.onUploadCallback = callback; + + return this; + + }, + + clone: function () { + + return new this.constructor( this.array, this.itemSize ).copy( this ); + + }, + + toJSON: function () { + + return { + itemSize: this.itemSize, + type: this.array.constructor.name, + array: Array.prototype.slice.call( this.array ), + normalized: this.normalized + }; + + } + + } ); + + // + + function Int8BufferAttribute( array, itemSize, normalized ) { + + BufferAttribute.call( this, new Int8Array( array ), itemSize, normalized ); + + } + + Int8BufferAttribute.prototype = Object.create( BufferAttribute.prototype ); + Int8BufferAttribute.prototype.constructor = Int8BufferAttribute; + + + function Uint8BufferAttribute( array, itemSize, normalized ) { + + BufferAttribute.call( this, new Uint8Array( array ), itemSize, normalized ); + + } + + Uint8BufferAttribute.prototype = Object.create( BufferAttribute.prototype ); + Uint8BufferAttribute.prototype.constructor = Uint8BufferAttribute; + + + function Uint8ClampedBufferAttribute( array, itemSize, normalized ) { + + BufferAttribute.call( this, new Uint8ClampedArray( array ), itemSize, normalized ); + + } + + Uint8ClampedBufferAttribute.prototype = Object.create( BufferAttribute.prototype ); + Uint8ClampedBufferAttribute.prototype.constructor = Uint8ClampedBufferAttribute; + + + function Int16BufferAttribute( array, itemSize, normalized ) { + + BufferAttribute.call( this, new Int16Array( array ), itemSize, normalized ); + + } + + Int16BufferAttribute.prototype = Object.create( BufferAttribute.prototype ); + Int16BufferAttribute.prototype.constructor = Int16BufferAttribute; + + + function Uint16BufferAttribute( array, itemSize, normalized ) { + + BufferAttribute.call( this, new Uint16Array( array ), itemSize, normalized ); + + } + + Uint16BufferAttribute.prototype = Object.create( BufferAttribute.prototype ); + Uint16BufferAttribute.prototype.constructor = Uint16BufferAttribute; + + + function Int32BufferAttribute( array, itemSize, normalized ) { + + BufferAttribute.call( this, new Int32Array( array ), itemSize, normalized ); + + } + + Int32BufferAttribute.prototype = Object.create( BufferAttribute.prototype ); + Int32BufferAttribute.prototype.constructor = Int32BufferAttribute; + + + function Uint32BufferAttribute( array, itemSize, normalized ) { + + BufferAttribute.call( this, new Uint32Array( array ), itemSize, normalized ); + + } + + Uint32BufferAttribute.prototype = Object.create( BufferAttribute.prototype ); + Uint32BufferAttribute.prototype.constructor = Uint32BufferAttribute; + + + function Float32BufferAttribute( array, itemSize, normalized ) { + + BufferAttribute.call( this, new Float32Array( array ), itemSize, normalized ); + + } + + Float32BufferAttribute.prototype = Object.create( BufferAttribute.prototype ); + Float32BufferAttribute.prototype.constructor = Float32BufferAttribute; + + + function Float64BufferAttribute( array, itemSize, normalized ) { + + BufferAttribute.call( this, new Float64Array( array ), itemSize, normalized ); + + } + + Float64BufferAttribute.prototype = Object.create( BufferAttribute.prototype ); + Float64BufferAttribute.prototype.constructor = Float64BufferAttribute; + + var DirectGeometry = function DirectGeometry() { + + this.vertices = []; + this.normals = []; + this.colors = []; + this.uvs = []; + this.uvs2 = []; + + this.groups = []; + + this.morphTargets = {}; + + this.skinWeights = []; + this.skinIndices = []; + + // this.lineDistances = []; + + this.boundingBox = null; + this.boundingSphere = null; + + // update flags + + this.verticesNeedUpdate = false; + this.normalsNeedUpdate = false; + this.colorsNeedUpdate = false; + this.uvsNeedUpdate = false; + this.groupsNeedUpdate = false; + + }; + + DirectGeometry.prototype.computeGroups = function computeGroups ( geometry ) { + + var groups = []; + + var group, i; + var materialIndex = undefined; + + var faces = geometry.faces; + + for ( i = 0; i < faces.length; i ++ ) { + + var face = faces[ i ]; + + // materials + + if ( face.materialIndex !== materialIndex ) { + + materialIndex = face.materialIndex; + + if ( group !== undefined ) { + + group.count = ( i * 3 ) - group.start; + groups.push( group ); + + } + + group = { + start: i * 3, + materialIndex: materialIndex + }; + + } + + } + + if ( group !== undefined ) { + + group.count = ( i * 3 ) - group.start; + groups.push( group ); + + } + + this.groups = groups; + + }; + + DirectGeometry.prototype.fromGeometry = function fromGeometry ( geometry ) { + + var faces = geometry.faces; + var vertices = geometry.vertices; + var faceVertexUvs = geometry.faceVertexUvs; + + var hasFaceVertexUv = faceVertexUvs[ 0 ] && faceVertexUvs[ 0 ].length > 0; + var hasFaceVertexUv2 = faceVertexUvs[ 1 ] && faceVertexUvs[ 1 ].length > 0; + + // morphs + + var morphTargets = geometry.morphTargets; + var morphTargetsLength = morphTargets.length; + + var morphTargetsPosition; + + if ( morphTargetsLength > 0 ) { + + morphTargetsPosition = []; + + for ( var i = 0; i < morphTargetsLength; i ++ ) { + + morphTargetsPosition[ i ] = { + name: morphTargets[ i ].name, + data: [] + }; + + } + + this.morphTargets.position = morphTargetsPosition; + + } + + var morphNormals = geometry.morphNormals; + var morphNormalsLength = morphNormals.length; + + var morphTargetsNormal; + + if ( morphNormalsLength > 0 ) { + + morphTargetsNormal = []; + + for ( var i$1 = 0; i$1 < morphNormalsLength; i$1 ++ ) { + + morphTargetsNormal[ i$1 ] = { + name: morphNormals[ i$1 ].name, + data: [] + }; + + } + + this.morphTargets.normal = morphTargetsNormal; + + } + + // skins + + var skinIndices = geometry.skinIndices; + var skinWeights = geometry.skinWeights; + + var hasSkinIndices = skinIndices.length === vertices.length; + var hasSkinWeights = skinWeights.length === vertices.length; + + // + + if ( vertices.length > 0 && faces.length === 0 ) { + + console.error( 'THREE.DirectGeometry: Faceless geometries are not supported.' ); + + } + + for ( var i$2 = 0; i$2 < faces.length; i$2 ++ ) { + + var face = faces[ i$2 ]; + + this.vertices.push( vertices[ face.a ], vertices[ face.b ], vertices[ face.c ] ); + + var vertexNormals = face.vertexNormals; + + if ( vertexNormals.length === 3 ) { + + this.normals.push( vertexNormals[ 0 ], vertexNormals[ 1 ], vertexNormals[ 2 ] ); + + } else { + + var normal = face.normal; + + this.normals.push( normal, normal, normal ); + + } + + var vertexColors = face.vertexColors; + + if ( vertexColors.length === 3 ) { + + this.colors.push( vertexColors[ 0 ], vertexColors[ 1 ], vertexColors[ 2 ] ); + + } else { + + var color = face.color; + + this.colors.push( color, color, color ); + + } + + if ( hasFaceVertexUv === true ) { + + var vertexUvs = faceVertexUvs[ 0 ][ i$2 ]; + + if ( vertexUvs !== undefined ) { + + this.uvs.push( vertexUvs[ 0 ], vertexUvs[ 1 ], vertexUvs[ 2 ] ); + + } else { + + console.warn( 'THREE.DirectGeometry.fromGeometry(): Undefined vertexUv ', i$2 ); + + this.uvs.push( new Vector2(), new Vector2(), new Vector2() ); + + } + + } + + if ( hasFaceVertexUv2 === true ) { + + var vertexUvs$1 = faceVertexUvs[ 1 ][ i$2 ]; + + if ( vertexUvs$1 !== undefined ) { + + this.uvs2.push( vertexUvs$1[ 0 ], vertexUvs$1[ 1 ], vertexUvs$1[ 2 ] ); + + } else { + + console.warn( 'THREE.DirectGeometry.fromGeometry(): Undefined vertexUv2 ', i$2 ); + + this.uvs2.push( new Vector2(), new Vector2(), new Vector2() ); + + } + + } + + // morphs + + for ( var j = 0; j < morphTargetsLength; j ++ ) { + + var morphTarget = morphTargets[ j ].vertices; + + morphTargetsPosition[ j ].data.push( morphTarget[ face.a ], morphTarget[ face.b ], morphTarget[ face.c ] ); + + } + + for ( var j$1 = 0; j$1 < morphNormalsLength; j$1 ++ ) { + + var morphNormal = morphNormals[ j$1 ].vertexNormals[ i$2 ]; + + morphTargetsNormal[ j$1 ].data.push( morphNormal.a, morphNormal.b, morphNormal.c ); + + } + + // skins + + if ( hasSkinIndices ) { + + this.skinIndices.push( skinIndices[ face.a ], skinIndices[ face.b ], skinIndices[ face.c ] ); + + } + + if ( hasSkinWeights ) { + + this.skinWeights.push( skinWeights[ face.a ], skinWeights[ face.b ], skinWeights[ face.c ] ); + + } + + } + + this.computeGroups( geometry ); + + this.verticesNeedUpdate = geometry.verticesNeedUpdate; + this.normalsNeedUpdate = geometry.normalsNeedUpdate; + this.colorsNeedUpdate = geometry.colorsNeedUpdate; + this.uvsNeedUpdate = geometry.uvsNeedUpdate; + this.groupsNeedUpdate = geometry.groupsNeedUpdate; + + if ( geometry.boundingSphere !== null ) { + + this.boundingSphere = geometry.boundingSphere.clone(); + + } + + if ( geometry.boundingBox !== null ) { + + this.boundingBox = geometry.boundingBox.clone(); + + } + + return this; + + }; + + function arrayMax( array ) { + + if ( array.length === 0 ) { return - Infinity; } + + var max = array[ 0 ]; + + for ( var i = 1, l = array.length; i < l; ++ i ) { + + if ( array[ i ] > max ) { max = array[ i ]; } + + } + + return max; + + } + + var _bufferGeometryId = 1; // BufferGeometry uses odd numbers as Id + + var _m1$2 = new Matrix4(); + var _obj = new Object3D(); + var _offset = new Vector3(); + var _box$2 = new Box3(); + var _boxMorphTargets = new Box3(); + var _vector$4 = new Vector3(); + + function BufferGeometry() { + + Object.defineProperty( this, 'id', { value: _bufferGeometryId += 2 } ); + + this.uuid = MathUtils.generateUUID(); + + this.name = ''; + this.type = 'BufferGeometry'; + + this.index = null; + this.attributes = {}; + + this.morphAttributes = {}; + this.morphTargetsRelative = false; + + this.groups = []; + + this.boundingBox = null; + this.boundingSphere = null; + + this.drawRange = { start: 0, count: Infinity }; + + this.userData = {}; + + } + + BufferGeometry.prototype = Object.assign( Object.create( EventDispatcher.prototype ), { + + constructor: BufferGeometry, + + isBufferGeometry: true, + + getIndex: function () { + + return this.index; + + }, + + setIndex: function ( index ) { + + if ( Array.isArray( index ) ) { + + this.index = new ( arrayMax( index ) > 65535 ? Uint32BufferAttribute : Uint16BufferAttribute )( index, 1 ); + + } else { + + this.index = index; + + } + + }, + + getAttribute: function ( name ) { + + return this.attributes[ name ]; + + }, + + setAttribute: function ( name, attribute ) { + + this.attributes[ name ] = attribute; + + return this; + + }, + + deleteAttribute: function ( name ) { + + delete this.attributes[ name ]; + + return this; + + }, + + addGroup: function ( start, count, materialIndex ) { + + this.groups.push( { + + start: start, + count: count, + materialIndex: materialIndex !== undefined ? materialIndex : 0 + + } ); + + }, + + clearGroups: function () { + + this.groups = []; + + }, + + setDrawRange: function ( start, count ) { + + this.drawRange.start = start; + this.drawRange.count = count; + + }, + + applyMatrix4: function ( matrix ) { + + var position = this.attributes.position; + + if ( position !== undefined ) { + + position.applyMatrix4( matrix ); + + position.needsUpdate = true; + + } + + var normal = this.attributes.normal; + + if ( normal !== undefined ) { + + var normalMatrix = new Matrix3().getNormalMatrix( matrix ); + + normal.applyNormalMatrix( normalMatrix ); + + normal.needsUpdate = true; + + } + + var tangent = this.attributes.tangent; + + if ( tangent !== undefined ) { + + tangent.transformDirection( matrix ); + + tangent.needsUpdate = true; + + } + + if ( this.boundingBox !== null ) { + + this.computeBoundingBox(); + + } + + if ( this.boundingSphere !== null ) { + + this.computeBoundingSphere(); + + } + + return this; + + }, + + rotateX: function ( angle ) { + + // rotate geometry around world x-axis + + _m1$2.makeRotationX( angle ); + + this.applyMatrix4( _m1$2 ); + + return this; + + }, + + rotateY: function ( angle ) { + + // rotate geometry around world y-axis + + _m1$2.makeRotationY( angle ); + + this.applyMatrix4( _m1$2 ); + + return this; + + }, + + rotateZ: function ( angle ) { + + // rotate geometry around world z-axis + + _m1$2.makeRotationZ( angle ); + + this.applyMatrix4( _m1$2 ); + + return this; + + }, + + translate: function ( x, y, z ) { + + // translate geometry + + _m1$2.makeTranslation( x, y, z ); + + this.applyMatrix4( _m1$2 ); + + return this; + + }, + + scale: function ( x, y, z ) { + + // scale geometry + + _m1$2.makeScale( x, y, z ); + + this.applyMatrix4( _m1$2 ); + + return this; + + }, + + lookAt: function ( vector ) { + + _obj.lookAt( vector ); + + _obj.updateMatrix(); + + this.applyMatrix4( _obj.matrix ); + + return this; + + }, + + center: function () { + + this.computeBoundingBox(); + + this.boundingBox.getCenter( _offset ).negate(); + + this.translate( _offset.x, _offset.y, _offset.z ); + + return this; + + }, + + setFromObject: function ( object ) { + + // console.log( 'THREE.BufferGeometry.setFromObject(). Converting', object, this ); + + var geometry = object.geometry; + + if ( object.isPoints || object.isLine ) { + + var positions = new Float32BufferAttribute( geometry.vertices.length * 3, 3 ); + var colors = new Float32BufferAttribute( geometry.colors.length * 3, 3 ); + + this.setAttribute( 'position', positions.copyVector3sArray( geometry.vertices ) ); + this.setAttribute( 'color', colors.copyColorsArray( geometry.colors ) ); + + if ( geometry.lineDistances && geometry.lineDistances.length === geometry.vertices.length ) { + + var lineDistances = new Float32BufferAttribute( geometry.lineDistances.length, 1 ); + + this.setAttribute( 'lineDistance', lineDistances.copyArray( geometry.lineDistances ) ); + + } + + if ( geometry.boundingSphere !== null ) { + + this.boundingSphere = geometry.boundingSphere.clone(); + + } + + if ( geometry.boundingBox !== null ) { + + this.boundingBox = geometry.boundingBox.clone(); + + } + + } else if ( object.isMesh ) { + + if ( geometry && geometry.isGeometry ) { + + this.fromGeometry( geometry ); + + } + + } + + return this; + + }, + + setFromPoints: function ( points ) { + + var position = []; + + for ( var i = 0, l = points.length; i < l; i ++ ) { + + var point = points[ i ]; + position.push( point.x, point.y, point.z || 0 ); + + } + + this.setAttribute( 'position', new Float32BufferAttribute( position, 3 ) ); + + return this; + + }, + + updateFromObject: function ( object ) { + + var geometry = object.geometry; + + if ( object.isMesh ) { + + var direct = geometry.__directGeometry; + + if ( geometry.elementsNeedUpdate === true ) { + + direct = undefined; + geometry.elementsNeedUpdate = false; + + } + + if ( direct === undefined ) { + + return this.fromGeometry( geometry ); + + } + + direct.verticesNeedUpdate = geometry.verticesNeedUpdate; + direct.normalsNeedUpdate = geometry.normalsNeedUpdate; + direct.colorsNeedUpdate = geometry.colorsNeedUpdate; + direct.uvsNeedUpdate = geometry.uvsNeedUpdate; + direct.groupsNeedUpdate = geometry.groupsNeedUpdate; + + geometry.verticesNeedUpdate = false; + geometry.normalsNeedUpdate = false; + geometry.colorsNeedUpdate = false; + geometry.uvsNeedUpdate = false; + geometry.groupsNeedUpdate = false; + + geometry = direct; + + } + + if ( geometry.verticesNeedUpdate === true ) { + + var attribute = this.attributes.position; + + if ( attribute !== undefined ) { + + attribute.copyVector3sArray( geometry.vertices ); + attribute.needsUpdate = true; + + } + + geometry.verticesNeedUpdate = false; + + } + + if ( geometry.normalsNeedUpdate === true ) { + + var attribute$1 = this.attributes.normal; + + if ( attribute$1 !== undefined ) { + + attribute$1.copyVector3sArray( geometry.normals ); + attribute$1.needsUpdate = true; + + } + + geometry.normalsNeedUpdate = false; + + } + + if ( geometry.colorsNeedUpdate === true ) { + + var attribute$2 = this.attributes.color; + + if ( attribute$2 !== undefined ) { + + attribute$2.copyColorsArray( geometry.colors ); + attribute$2.needsUpdate = true; + + } + + geometry.colorsNeedUpdate = false; + + } + + if ( geometry.uvsNeedUpdate ) { + + var attribute$3 = this.attributes.uv; + + if ( attribute$3 !== undefined ) { + + attribute$3.copyVector2sArray( geometry.uvs ); + attribute$3.needsUpdate = true; + + } + + geometry.uvsNeedUpdate = false; + + } + + if ( geometry.lineDistancesNeedUpdate ) { + + var attribute$4 = this.attributes.lineDistance; + + if ( attribute$4 !== undefined ) { + + attribute$4.copyArray( geometry.lineDistances ); + attribute$4.needsUpdate = true; + + } + + geometry.lineDistancesNeedUpdate = false; + + } + + if ( geometry.groupsNeedUpdate ) { + + geometry.computeGroups( object.geometry ); + this.groups = geometry.groups; + + geometry.groupsNeedUpdate = false; + + } + + return this; + + }, + + fromGeometry: function ( geometry ) { + + geometry.__directGeometry = new DirectGeometry().fromGeometry( geometry ); + + return this.fromDirectGeometry( geometry.__directGeometry ); + + }, + + fromDirectGeometry: function ( geometry ) { + + var positions = new Float32Array( geometry.vertices.length * 3 ); + this.setAttribute( 'position', new BufferAttribute( positions, 3 ).copyVector3sArray( geometry.vertices ) ); + + if ( geometry.normals.length > 0 ) { + + var normals = new Float32Array( geometry.normals.length * 3 ); + this.setAttribute( 'normal', new BufferAttribute( normals, 3 ).copyVector3sArray( geometry.normals ) ); + + } + + if ( geometry.colors.length > 0 ) { + + var colors = new Float32Array( geometry.colors.length * 3 ); + this.setAttribute( 'color', new BufferAttribute( colors, 3 ).copyColorsArray( geometry.colors ) ); + + } + + if ( geometry.uvs.length > 0 ) { + + var uvs = new Float32Array( geometry.uvs.length * 2 ); + this.setAttribute( 'uv', new BufferAttribute( uvs, 2 ).copyVector2sArray( geometry.uvs ) ); + + } + + if ( geometry.uvs2.length > 0 ) { + + var uvs2 = new Float32Array( geometry.uvs2.length * 2 ); + this.setAttribute( 'uv2', new BufferAttribute( uvs2, 2 ).copyVector2sArray( geometry.uvs2 ) ); + + } + + // groups + + this.groups = geometry.groups; + + // morphs + + for ( var name in geometry.morphTargets ) { + + var array = []; + var morphTargets = geometry.morphTargets[ name ]; + + for ( var i = 0, l = morphTargets.length; i < l; i ++ ) { + + var morphTarget = morphTargets[ i ]; + + var attribute = new Float32BufferAttribute( morphTarget.data.length * 3, 3 ); + attribute.name = morphTarget.name; + + array.push( attribute.copyVector3sArray( morphTarget.data ) ); + + } + + this.morphAttributes[ name ] = array; + + } + + // skinning + + if ( geometry.skinIndices.length > 0 ) { + + var skinIndices = new Float32BufferAttribute( geometry.skinIndices.length * 4, 4 ); + this.setAttribute( 'skinIndex', skinIndices.copyVector4sArray( geometry.skinIndices ) ); + + } + + if ( geometry.skinWeights.length > 0 ) { + + var skinWeights = new Float32BufferAttribute( geometry.skinWeights.length * 4, 4 ); + this.setAttribute( 'skinWeight', skinWeights.copyVector4sArray( geometry.skinWeights ) ); + + } + + // + + if ( geometry.boundingSphere !== null ) { + + this.boundingSphere = geometry.boundingSphere.clone(); + + } + + if ( geometry.boundingBox !== null ) { + + this.boundingBox = geometry.boundingBox.clone(); + + } + + return this; + + }, + + computeBoundingBox: function () { + + if ( this.boundingBox === null ) { + + this.boundingBox = new Box3(); + + } + + var position = this.attributes.position; + var morphAttributesPosition = this.morphAttributes.position; + + if ( position && position.isGLBufferAttribute ) { + + console.error( 'THREE.BufferGeometry.computeBoundingBox(): GLBufferAttribute requires a manual bounding box. Alternatively set "mesh.frustumCulled" to "false".', this ); + + this.boundingBox.set( + new Vector3( - Infinity, - Infinity, - Infinity ), + new Vector3( + Infinity, + Infinity, + Infinity ) + ); + + return; + + } + + if ( position !== undefined ) { + + this.boundingBox.setFromBufferAttribute( position ); + + // process morph attributes if present + + if ( morphAttributesPosition ) { + + for ( var i = 0, il = morphAttributesPosition.length; i < il; i ++ ) { + + var morphAttribute = morphAttributesPosition[ i ]; + _box$2.setFromBufferAttribute( morphAttribute ); + + if ( this.morphTargetsRelative ) { + + _vector$4.addVectors( this.boundingBox.min, _box$2.min ); + this.boundingBox.expandByPoint( _vector$4 ); + + _vector$4.addVectors( this.boundingBox.max, _box$2.max ); + this.boundingBox.expandByPoint( _vector$4 ); + + } else { + + this.boundingBox.expandByPoint( _box$2.min ); + this.boundingBox.expandByPoint( _box$2.max ); + + } + + } + + } + + } else { + + this.boundingBox.makeEmpty(); + + } + + if ( isNaN( this.boundingBox.min.x ) || isNaN( this.boundingBox.min.y ) || isNaN( this.boundingBox.min.z ) ) { + + console.error( 'THREE.BufferGeometry.computeBoundingBox(): Computed min/max have NaN values. The "position" attribute is likely to have NaN values.', this ); + + } + + }, + + computeBoundingSphere: function () { + + if ( this.boundingSphere === null ) { + + this.boundingSphere = new Sphere(); + + } + + var position = this.attributes.position; + var morphAttributesPosition = this.morphAttributes.position; + + if ( position && position.isGLBufferAttribute ) { + + console.error( 'THREE.BufferGeometry.computeBoundingSphere(): GLBufferAttribute requires a manual bounding sphere. Alternatively set "mesh.frustumCulled" to "false".', this ); + + this.boundingSphere.set( new Vector3(), Infinity ); + + return; + + } + + if ( position ) { + + // first, find the center of the bounding sphere + + var center = this.boundingSphere.center; + + _box$2.setFromBufferAttribute( position ); + + // process morph attributes if present + + if ( morphAttributesPosition ) { + + for ( var i = 0, il = morphAttributesPosition.length; i < il; i ++ ) { + + var morphAttribute = morphAttributesPosition[ i ]; + _boxMorphTargets.setFromBufferAttribute( morphAttribute ); + + if ( this.morphTargetsRelative ) { + + _vector$4.addVectors( _box$2.min, _boxMorphTargets.min ); + _box$2.expandByPoint( _vector$4 ); + + _vector$4.addVectors( _box$2.max, _boxMorphTargets.max ); + _box$2.expandByPoint( _vector$4 ); + + } else { + + _box$2.expandByPoint( _boxMorphTargets.min ); + _box$2.expandByPoint( _boxMorphTargets.max ); + + } + + } + + } + + _box$2.getCenter( center ); + + // second, try to find a boundingSphere with a radius smaller than the + // boundingSphere of the boundingBox: sqrt(3) smaller in the best case + + var maxRadiusSq = 0; + + for ( var i$1 = 0, il$1 = position.count; i$1 < il$1; i$1 ++ ) { + + _vector$4.fromBufferAttribute( position, i$1 ); + + maxRadiusSq = Math.max( maxRadiusSq, center.distanceToSquared( _vector$4 ) ); + + } + + // process morph attributes if present + + if ( morphAttributesPosition ) { + + for ( var i$2 = 0, il$2 = morphAttributesPosition.length; i$2 < il$2; i$2 ++ ) { + + var morphAttribute$1 = morphAttributesPosition[ i$2 ]; + var morphTargetsRelative = this.morphTargetsRelative; + + for ( var j = 0, jl = morphAttribute$1.count; j < jl; j ++ ) { + + _vector$4.fromBufferAttribute( morphAttribute$1, j ); + + if ( morphTargetsRelative ) { + + _offset.fromBufferAttribute( position, j ); + _vector$4.add( _offset ); + + } + + maxRadiusSq = Math.max( maxRadiusSq, center.distanceToSquared( _vector$4 ) ); + + } + + } + + } + + this.boundingSphere.radius = Math.sqrt( maxRadiusSq ); + + if ( isNaN( this.boundingSphere.radius ) ) { + + console.error( 'THREE.BufferGeometry.computeBoundingSphere(): Computed radius is NaN. The "position" attribute is likely to have NaN values.', this ); + + } + + } + + }, + + computeFaceNormals: function () { + + // backwards compatibility + + }, + + computeVertexNormals: function () { + + var index = this.index; + var positionAttribute = this.getAttribute( 'position' ); + + if ( positionAttribute !== undefined ) { + + var normalAttribute = this.getAttribute( 'normal' ); + + if ( normalAttribute === undefined ) { + + normalAttribute = new BufferAttribute( new Float32Array( positionAttribute.count * 3 ), 3 ); + this.setAttribute( 'normal', normalAttribute ); + + } else { + + // reset existing normals to zero + + for ( var i = 0, il = normalAttribute.count; i < il; i ++ ) { + + normalAttribute.setXYZ( i, 0, 0, 0 ); + + } + + } + + var pA = new Vector3(), pB = new Vector3(), pC = new Vector3(); + var nA = new Vector3(), nB = new Vector3(), nC = new Vector3(); + var cb = new Vector3(), ab = new Vector3(); + + // indexed elements + + if ( index ) { + + for ( var i$1 = 0, il$1 = index.count; i$1 < il$1; i$1 += 3 ) { + + var vA = index.getX( i$1 + 0 ); + var vB = index.getX( i$1 + 1 ); + var vC = index.getX( i$1 + 2 ); + + pA.fromBufferAttribute( positionAttribute, vA ); + pB.fromBufferAttribute( positionAttribute, vB ); + pC.fromBufferAttribute( positionAttribute, vC ); + + cb.subVectors( pC, pB ); + ab.subVectors( pA, pB ); + cb.cross( ab ); + + nA.fromBufferAttribute( normalAttribute, vA ); + nB.fromBufferAttribute( normalAttribute, vB ); + nC.fromBufferAttribute( normalAttribute, vC ); + + nA.add( cb ); + nB.add( cb ); + nC.add( cb ); + + normalAttribute.setXYZ( vA, nA.x, nA.y, nA.z ); + normalAttribute.setXYZ( vB, nB.x, nB.y, nB.z ); + normalAttribute.setXYZ( vC, nC.x, nC.y, nC.z ); + + } + + } else { + + // non-indexed elements (unconnected triangle soup) + + for ( var i$2 = 0, il$2 = positionAttribute.count; i$2 < il$2; i$2 += 3 ) { + + pA.fromBufferAttribute( positionAttribute, i$2 + 0 ); + pB.fromBufferAttribute( positionAttribute, i$2 + 1 ); + pC.fromBufferAttribute( positionAttribute, i$2 + 2 ); + + cb.subVectors( pC, pB ); + ab.subVectors( pA, pB ); + cb.cross( ab ); + + normalAttribute.setXYZ( i$2 + 0, cb.x, cb.y, cb.z ); + normalAttribute.setXYZ( i$2 + 1, cb.x, cb.y, cb.z ); + normalAttribute.setXYZ( i$2 + 2, cb.x, cb.y, cb.z ); + + } + + } + + this.normalizeNormals(); + + normalAttribute.needsUpdate = true; + + } + + }, + + merge: function ( geometry, offset ) { + + if ( ! ( geometry && geometry.isBufferGeometry ) ) { + + console.error( 'THREE.BufferGeometry.merge(): geometry not an instance of THREE.BufferGeometry.', geometry ); + return; + + } + + if ( offset === undefined ) { + + offset = 0; + + console.warn( + 'THREE.BufferGeometry.merge(): Overwriting original geometry, starting at offset=0. ' + + 'Use BufferGeometryUtils.mergeBufferGeometries() for lossless merge.' + ); + + } + + var attributes = this.attributes; + + for ( var key in attributes ) { + + if ( geometry.attributes[ key ] === undefined ) { continue; } + + var attribute1 = attributes[ key ]; + var attributeArray1 = attribute1.array; + + var attribute2 = geometry.attributes[ key ]; + var attributeArray2 = attribute2.array; + + var attributeOffset = attribute2.itemSize * offset; + var length = Math.min( attributeArray2.length, attributeArray1.length - attributeOffset ); + + for ( var i = 0, j = attributeOffset; i < length; i ++, j ++ ) { + + attributeArray1[ j ] = attributeArray2[ i ]; + + } + + } + + return this; + + }, + + normalizeNormals: function () { + + var normals = this.attributes.normal; + + for ( var i = 0, il = normals.count; i < il; i ++ ) { + + _vector$4.fromBufferAttribute( normals, i ); + + _vector$4.normalize(); + + normals.setXYZ( i, _vector$4.x, _vector$4.y, _vector$4.z ); + + } + + }, + + toNonIndexed: function () { + + function convertBufferAttribute( attribute, indices ) { + + var array = attribute.array; + var itemSize = attribute.itemSize; + var normalized = attribute.normalized; + + var array2 = new array.constructor( indices.length * itemSize ); + + var index = 0, index2 = 0; + + for ( var i = 0, l = indices.length; i < l; i ++ ) { + + index = indices[ i ] * itemSize; + + for ( var j = 0; j < itemSize; j ++ ) { + + array2[ index2 ++ ] = array[ index ++ ]; + + } + + } + + return new BufferAttribute( array2, itemSize, normalized ); + + } + + // + + if ( this.index === null ) { + + console.warn( 'THREE.BufferGeometry.toNonIndexed(): Geometry is already non-indexed.' ); + return this; + + } + + var geometry2 = new BufferGeometry(); + + var indices = this.index.array; + var attributes = this.attributes; + + // attributes + + for ( var name in attributes ) { + + var attribute = attributes[ name ]; + + var newAttribute = convertBufferAttribute( attribute, indices ); + + geometry2.setAttribute( name, newAttribute ); + + } + + // morph attributes + + var morphAttributes = this.morphAttributes; + + for ( var name$1 in morphAttributes ) { + + var morphArray = []; + var morphAttribute = morphAttributes[ name$1 ]; // morphAttribute: array of Float32BufferAttributes + + for ( var i = 0, il = morphAttribute.length; i < il; i ++ ) { + + var attribute$1 = morphAttribute[ i ]; + + var newAttribute$1 = convertBufferAttribute( attribute$1, indices ); + + morphArray.push( newAttribute$1 ); + + } + + geometry2.morphAttributes[ name$1 ] = morphArray; + + } + + geometry2.morphTargetsRelative = this.morphTargetsRelative; + + // groups + + var groups = this.groups; + + for ( var i$1 = 0, l = groups.length; i$1 < l; i$1 ++ ) { + + var group = groups[ i$1 ]; + geometry2.addGroup( group.start, group.count, group.materialIndex ); + + } + + return geometry2; + + }, + + toJSON: function () { + + var data = { + metadata: { + version: 4.5, + type: 'BufferGeometry', + generator: 'BufferGeometry.toJSON' + } + }; + + // standard BufferGeometry serialization + + data.uuid = this.uuid; + data.type = this.type; + if ( this.name !== '' ) { data.name = this.name; } + if ( Object.keys( this.userData ).length > 0 ) { data.userData = this.userData; } + + if ( this.parameters !== undefined ) { + + var parameters = this.parameters; + + for ( var key in parameters ) { + + if ( parameters[ key ] !== undefined ) { data[ key ] = parameters[ key ]; } + + } + + return data; + + } + + data.data = { attributes: {} }; + + var index = this.index; + + if ( index !== null ) { + + data.data.index = { + type: index.array.constructor.name, + array: Array.prototype.slice.call( index.array ) + }; + + } + + var attributes = this.attributes; + + for ( var key$1 in attributes ) { + + var attribute = attributes[ key$1 ]; + + var attributeData = attribute.toJSON( data.data ); + + if ( attribute.name !== '' ) { attributeData.name = attribute.name; } + + data.data.attributes[ key$1 ] = attributeData; + + } + + var morphAttributes = {}; + var hasMorphAttributes = false; + + for ( var key$2 in this.morphAttributes ) { + + var attributeArray = this.morphAttributes[ key$2 ]; + + var array = []; + + for ( var i = 0, il = attributeArray.length; i < il; i ++ ) { + + var attribute$1 = attributeArray[ i ]; + + var attributeData$1 = attribute$1.toJSON( data.data ); + + if ( attribute$1.name !== '' ) { attributeData$1.name = attribute$1.name; } + + array.push( attributeData$1 ); + + } + + if ( array.length > 0 ) { + + morphAttributes[ key$2 ] = array; + + hasMorphAttributes = true; + + } + + } + + if ( hasMorphAttributes ) { + + data.data.morphAttributes = morphAttributes; + data.data.morphTargetsRelative = this.morphTargetsRelative; + + } + + var groups = this.groups; + + if ( groups.length > 0 ) { + + data.data.groups = JSON.parse( JSON.stringify( groups ) ); + + } + + var boundingSphere = this.boundingSphere; + + if ( boundingSphere !== null ) { + + data.data.boundingSphere = { + center: boundingSphere.center.toArray(), + radius: boundingSphere.radius + }; + + } + + return data; + + }, + + clone: function () { + + /* + // Handle primitives + + const parameters = this.parameters; + + if ( parameters !== undefined ) { + + const values = []; + + for ( const key in parameters ) { + + values.push( parameters[ key ] ); + + } + + const geometry = Object.create( this.constructor.prototype ); + this.constructor.apply( geometry, values ); + return geometry; + + } + + return new this.constructor().copy( this ); + */ + + return new BufferGeometry().copy( this ); + + }, + + copy: function ( source ) { + + // reset + + this.index = null; + this.attributes = {}; + this.morphAttributes = {}; + this.groups = []; + this.boundingBox = null; + this.boundingSphere = null; + + // used for storing cloned, shared data + + var data = {}; + + // name + + this.name = source.name; + + // index + + var index = source.index; + + if ( index !== null ) { + + this.setIndex( index.clone( data ) ); + + } + + // attributes + + var attributes = source.attributes; + + for ( var name in attributes ) { + + var attribute = attributes[ name ]; + this.setAttribute( name, attribute.clone( data ) ); + + } + + // morph attributes + + var morphAttributes = source.morphAttributes; + + for ( var name$1 in morphAttributes ) { + + var array = []; + var morphAttribute = morphAttributes[ name$1 ]; // morphAttribute: array of Float32BufferAttributes + + for ( var i = 0, l = morphAttribute.length; i < l; i ++ ) { + + array.push( morphAttribute[ i ].clone( data ) ); + + } + + this.morphAttributes[ name$1 ] = array; + + } + + this.morphTargetsRelative = source.morphTargetsRelative; + + // groups + + var groups = source.groups; + + for ( var i$1 = 0, l$1 = groups.length; i$1 < l$1; i$1 ++ ) { + + var group = groups[ i$1 ]; + this.addGroup( group.start, group.count, group.materialIndex ); + + } + + // bounding box + + var boundingBox = source.boundingBox; + + if ( boundingBox !== null ) { + + this.boundingBox = boundingBox.clone(); + + } + + // bounding sphere + + var boundingSphere = source.boundingSphere; + + if ( boundingSphere !== null ) { + + this.boundingSphere = boundingSphere.clone(); + + } + + // draw range + + this.drawRange.start = source.drawRange.start; + this.drawRange.count = source.drawRange.count; + + // user data + + this.userData = source.userData; + + return this; + + }, + + dispose: function () { + + this.dispatchEvent( { type: 'dispose' } ); + + } + + } ); + + var _inverseMatrix = new Matrix4(); + var _ray = new Ray(); + var _sphere = new Sphere(); + + var _vA = new Vector3(); + var _vB = new Vector3(); + var _vC = new Vector3(); + + var _tempA = new Vector3(); + var _tempB = new Vector3(); + var _tempC = new Vector3(); + + var _morphA = new Vector3(); + var _morphB = new Vector3(); + var _morphC = new Vector3(); + + var _uvA = new Vector2(); + var _uvB = new Vector2(); + var _uvC = new Vector2(); + + var _intersectionPoint = new Vector3(); + var _intersectionPointWorld = new Vector3(); + + function Mesh( geometry, material ) { + + Object3D.call( this ); + + this.type = 'Mesh'; + + this.geometry = geometry !== undefined ? geometry : new BufferGeometry(); + this.material = material !== undefined ? material : new MeshBasicMaterial(); + + this.updateMorphTargets(); + + } + + Mesh.prototype = Object.assign( Object.create( Object3D.prototype ), { + + constructor: Mesh, + + isMesh: true, + + copy: function ( source ) { + + Object3D.prototype.copy.call( this, source ); + + if ( source.morphTargetInfluences !== undefined ) { + + this.morphTargetInfluences = source.morphTargetInfluences.slice(); + + } + + if ( source.morphTargetDictionary !== undefined ) { + + this.morphTargetDictionary = Object.assign( {}, source.morphTargetDictionary ); + + } + + this.material = source.material; + this.geometry = source.geometry; + + return this; + + }, + + updateMorphTargets: function () { + + var geometry = this.geometry; + + if ( geometry.isBufferGeometry ) { + + var morphAttributes = geometry.morphAttributes; + var keys = Object.keys( morphAttributes ); + + if ( keys.length > 0 ) { + + var morphAttribute = morphAttributes[ keys[ 0 ] ]; + + if ( morphAttribute !== undefined ) { + + this.morphTargetInfluences = []; + this.morphTargetDictionary = {}; + + for ( var m = 0, ml = morphAttribute.length; m < ml; m ++ ) { + + var name = morphAttribute[ m ].name || String( m ); + + this.morphTargetInfluences.push( 0 ); + this.morphTargetDictionary[ name ] = m; + + } + + } + + } + + } else { + + var morphTargets = geometry.morphTargets; + + if ( morphTargets !== undefined && morphTargets.length > 0 ) { + + console.error( 'THREE.Mesh.updateMorphTargets() no longer supports THREE.Geometry. Use THREE.BufferGeometry instead.' ); + + } + + } + + }, + + raycast: function ( raycaster, intersects ) { + + var geometry = this.geometry; + var material = this.material; + var matrixWorld = this.matrixWorld; + + if ( material === undefined ) { return; } + + // Checking boundingSphere distance to ray + + if ( geometry.boundingSphere === null ) { geometry.computeBoundingSphere(); } + + _sphere.copy( geometry.boundingSphere ); + _sphere.applyMatrix4( matrixWorld ); + + if ( raycaster.ray.intersectsSphere( _sphere ) === false ) { return; } + + // + + _inverseMatrix.getInverse( matrixWorld ); + _ray.copy( raycaster.ray ).applyMatrix4( _inverseMatrix ); + + // Check boundingBox before continuing + + if ( geometry.boundingBox !== null ) { + + if ( _ray.intersectsBox( geometry.boundingBox ) === false ) { return; } + + } + + var intersection; + + if ( geometry.isBufferGeometry ) { + + var index = geometry.index; + var position = geometry.attributes.position; + var morphPosition = geometry.morphAttributes.position; + var morphTargetsRelative = geometry.morphTargetsRelative; + var uv = geometry.attributes.uv; + var uv2 = geometry.attributes.uv2; + var groups = geometry.groups; + var drawRange = geometry.drawRange; + + if ( index !== null ) { + + // indexed buffer geometry + + if ( Array.isArray( material ) ) { + + for ( var i = 0, il = groups.length; i < il; i ++ ) { + + var group = groups[ i ]; + var groupMaterial = material[ group.materialIndex ]; + + var start = Math.max( group.start, drawRange.start ); + var end = Math.min( ( group.start + group.count ), ( drawRange.start + drawRange.count ) ); + + for ( var j = start, jl = end; j < jl; j += 3 ) { + + var a = index.getX( j ); + var b = index.getX( j + 1 ); + var c = index.getX( j + 2 ); + + intersection = checkBufferGeometryIntersection( this, groupMaterial, raycaster, _ray, position, morphPosition, morphTargetsRelative, uv, uv2, a, b, c ); + + if ( intersection ) { + + intersection.faceIndex = Math.floor( j / 3 ); // triangle number in indexed buffer semantics + intersection.face.materialIndex = group.materialIndex; + intersects.push( intersection ); + + } + + } + + } + + } else { + + var start$1 = Math.max( 0, drawRange.start ); + var end$1 = Math.min( index.count, ( drawRange.start + drawRange.count ) ); + + for ( var i$1 = start$1, il$1 = end$1; i$1 < il$1; i$1 += 3 ) { + + var a$1 = index.getX( i$1 ); + var b$1 = index.getX( i$1 + 1 ); + var c$1 = index.getX( i$1 + 2 ); + + intersection = checkBufferGeometryIntersection( this, material, raycaster, _ray, position, morphPosition, morphTargetsRelative, uv, uv2, a$1, b$1, c$1 ); + + if ( intersection ) { + + intersection.faceIndex = Math.floor( i$1 / 3 ); // triangle number in indexed buffer semantics + intersects.push( intersection ); + + } + + } + + } + + } else if ( position !== undefined ) { + + // non-indexed buffer geometry + + if ( Array.isArray( material ) ) { + + for ( var i$2 = 0, il$2 = groups.length; i$2 < il$2; i$2 ++ ) { + + var group$1 = groups[ i$2 ]; + var groupMaterial$1 = material[ group$1.materialIndex ]; + + var start$2 = Math.max( group$1.start, drawRange.start ); + var end$2 = Math.min( ( group$1.start + group$1.count ), ( drawRange.start + drawRange.count ) ); + + for ( var j$1 = start$2, jl$1 = end$2; j$1 < jl$1; j$1 += 3 ) { + + var a$2 = j$1; + var b$2 = j$1 + 1; + var c$2 = j$1 + 2; + + intersection = checkBufferGeometryIntersection( this, groupMaterial$1, raycaster, _ray, position, morphPosition, morphTargetsRelative, uv, uv2, a$2, b$2, c$2 ); + + if ( intersection ) { + + intersection.faceIndex = Math.floor( j$1 / 3 ); // triangle number in non-indexed buffer semantics + intersection.face.materialIndex = group$1.materialIndex; + intersects.push( intersection ); + + } + + } + + } + + } else { + + var start$3 = Math.max( 0, drawRange.start ); + var end$3 = Math.min( position.count, ( drawRange.start + drawRange.count ) ); + + for ( var i$3 = start$3, il$3 = end$3; i$3 < il$3; i$3 += 3 ) { + + var a$3 = i$3; + var b$3 = i$3 + 1; + var c$3 = i$3 + 2; + + intersection = checkBufferGeometryIntersection( this, material, raycaster, _ray, position, morphPosition, morphTargetsRelative, uv, uv2, a$3, b$3, c$3 ); + + if ( intersection ) { + + intersection.faceIndex = Math.floor( i$3 / 3 ); // triangle number in non-indexed buffer semantics + intersects.push( intersection ); + + } + + } + + } + + } + + } else if ( geometry.isGeometry ) { + + var isMultiMaterial = Array.isArray( material ); + + var vertices = geometry.vertices; + var faces = geometry.faces; + var uvs; + + var faceVertexUvs = geometry.faceVertexUvs[ 0 ]; + if ( faceVertexUvs.length > 0 ) { uvs = faceVertexUvs; } + + for ( var f = 0, fl = faces.length; f < fl; f ++ ) { + + var face = faces[ f ]; + var faceMaterial = isMultiMaterial ? material[ face.materialIndex ] : material; + + if ( faceMaterial === undefined ) { continue; } + + var fvA = vertices[ face.a ]; + var fvB = vertices[ face.b ]; + var fvC = vertices[ face.c ]; + + intersection = checkIntersection( this, faceMaterial, raycaster, _ray, fvA, fvB, fvC, _intersectionPoint ); + + if ( intersection ) { + + if ( uvs && uvs[ f ] ) { + + var uvs_f = uvs[ f ]; + _uvA.copy( uvs_f[ 0 ] ); + _uvB.copy( uvs_f[ 1 ] ); + _uvC.copy( uvs_f[ 2 ] ); + + intersection.uv = Triangle.getUV( _intersectionPoint, fvA, fvB, fvC, _uvA, _uvB, _uvC, new Vector2() ); + + } + + intersection.face = face; + intersection.faceIndex = f; + intersects.push( intersection ); + + } + + } + + } + + } + + } ); + + function checkIntersection( object, material, raycaster, ray, pA, pB, pC, point ) { + + var intersect; + + if ( material.side === BackSide ) { + + intersect = ray.intersectTriangle( pC, pB, pA, true, point ); + + } else { + + intersect = ray.intersectTriangle( pA, pB, pC, material.side !== DoubleSide, point ); + + } + + if ( intersect === null ) { return null; } + + _intersectionPointWorld.copy( point ); + _intersectionPointWorld.applyMatrix4( object.matrixWorld ); + + var distance = raycaster.ray.origin.distanceTo( _intersectionPointWorld ); + + if ( distance < raycaster.near || distance > raycaster.far ) { return null; } + + return { + distance: distance, + point: _intersectionPointWorld.clone(), + object: object + }; + + } + + function checkBufferGeometryIntersection( object, material, raycaster, ray, position, morphPosition, morphTargetsRelative, uv, uv2, a, b, c ) { + + _vA.fromBufferAttribute( position, a ); + _vB.fromBufferAttribute( position, b ); + _vC.fromBufferAttribute( position, c ); + + var morphInfluences = object.morphTargetInfluences; + + if ( material.morphTargets && morphPosition && morphInfluences ) { + + _morphA.set( 0, 0, 0 ); + _morphB.set( 0, 0, 0 ); + _morphC.set( 0, 0, 0 ); + + for ( var i = 0, il = morphPosition.length; i < il; i ++ ) { + + var influence = morphInfluences[ i ]; + var morphAttribute = morphPosition[ i ]; + + if ( influence === 0 ) { continue; } + + _tempA.fromBufferAttribute( morphAttribute, a ); + _tempB.fromBufferAttribute( morphAttribute, b ); + _tempC.fromBufferAttribute( morphAttribute, c ); + + if ( morphTargetsRelative ) { + + _morphA.addScaledVector( _tempA, influence ); + _morphB.addScaledVector( _tempB, influence ); + _morphC.addScaledVector( _tempC, influence ); + + } else { + + _morphA.addScaledVector( _tempA.sub( _vA ), influence ); + _morphB.addScaledVector( _tempB.sub( _vB ), influence ); + _morphC.addScaledVector( _tempC.sub( _vC ), influence ); + + } + + } + + _vA.add( _morphA ); + _vB.add( _morphB ); + _vC.add( _morphC ); + + } + + if ( object.isSkinnedMesh ) { + + object.boneTransform( a, _vA ); + object.boneTransform( b, _vB ); + object.boneTransform( c, _vC ); + + } + + var intersection = checkIntersection( object, material, raycaster, ray, _vA, _vB, _vC, _intersectionPoint ); + + if ( intersection ) { + + if ( uv ) { + + _uvA.fromBufferAttribute( uv, a ); + _uvB.fromBufferAttribute( uv, b ); + _uvC.fromBufferAttribute( uv, c ); + + intersection.uv = Triangle.getUV( _intersectionPoint, _vA, _vB, _vC, _uvA, _uvB, _uvC, new Vector2() ); + + } + + if ( uv2 ) { + + _uvA.fromBufferAttribute( uv2, a ); + _uvB.fromBufferAttribute( uv2, b ); + _uvC.fromBufferAttribute( uv2, c ); + + intersection.uv2 = Triangle.getUV( _intersectionPoint, _vA, _vB, _vC, _uvA, _uvB, _uvC, new Vector2() ); + + } + + var face = new Face3( a, b, c ); + Triangle.getNormal( _vA, _vB, _vC, face.normal ); + + intersection.face = face; + + } + + return intersection; + + } + + var _geometryId = 0; // Geometry uses even numbers as Id + var _m1$3 = new Matrix4(); + var _obj$1 = new Object3D(); + var _offset$1 = new Vector3(); + + function Geometry() { + + Object.defineProperty( this, 'id', { value: _geometryId += 2 } ); + + this.uuid = MathUtils.generateUUID(); + + this.name = ''; + this.type = 'Geometry'; + + this.vertices = []; + this.colors = []; + this.faces = []; + this.faceVertexUvs = [[]]; + + this.morphTargets = []; + this.morphNormals = []; + + this.skinWeights = []; + this.skinIndices = []; + + this.lineDistances = []; + + this.boundingBox = null; + this.boundingSphere = null; + + // update flags + + this.elementsNeedUpdate = false; + this.verticesNeedUpdate = false; + this.uvsNeedUpdate = false; + this.normalsNeedUpdate = false; + this.colorsNeedUpdate = false; + this.lineDistancesNeedUpdate = false; + this.groupsNeedUpdate = false; + + } + + Geometry.prototype = Object.assign( Object.create( EventDispatcher.prototype ), { + + constructor: Geometry, + + isGeometry: true, + + applyMatrix4: function ( matrix ) { + + var normalMatrix = new Matrix3().getNormalMatrix( matrix ); + + for ( var i = 0, il = this.vertices.length; i < il; i ++ ) { + + var vertex = this.vertices[ i ]; + vertex.applyMatrix4( matrix ); + + } + + for ( var i$1 = 0, il$1 = this.faces.length; i$1 < il$1; i$1 ++ ) { + + var face = this.faces[ i$1 ]; + face.normal.applyMatrix3( normalMatrix ).normalize(); + + for ( var j = 0, jl = face.vertexNormals.length; j < jl; j ++ ) { + + face.vertexNormals[ j ].applyMatrix3( normalMatrix ).normalize(); + + } + + } + + if ( this.boundingBox !== null ) { + + this.computeBoundingBox(); + + } + + if ( this.boundingSphere !== null ) { + + this.computeBoundingSphere(); + + } + + this.verticesNeedUpdate = true; + this.normalsNeedUpdate = true; + + return this; + + }, + + rotateX: function ( angle ) { + + // rotate geometry around world x-axis + + _m1$3.makeRotationX( angle ); + + this.applyMatrix4( _m1$3 ); + + return this; + + }, + + rotateY: function ( angle ) { + + // rotate geometry around world y-axis + + _m1$3.makeRotationY( angle ); + + this.applyMatrix4( _m1$3 ); + + return this; + + }, + + rotateZ: function ( angle ) { + + // rotate geometry around world z-axis + + _m1$3.makeRotationZ( angle ); + + this.applyMatrix4( _m1$3 ); + + return this; + + }, + + translate: function ( x, y, z ) { + + // translate geometry + + _m1$3.makeTranslation( x, y, z ); + + this.applyMatrix4( _m1$3 ); + + return this; + + }, + + scale: function ( x, y, z ) { + + // scale geometry + + _m1$3.makeScale( x, y, z ); + + this.applyMatrix4( _m1$3 ); + + return this; + + }, + + lookAt: function ( vector ) { + + _obj$1.lookAt( vector ); + + _obj$1.updateMatrix(); + + this.applyMatrix4( _obj$1.matrix ); + + return this; + + }, + + fromBufferGeometry: function ( geometry ) { + + var scope = this; + + var index = geometry.index !== null ? geometry.index : undefined; + var attributes = geometry.attributes; + + if ( attributes.position === undefined ) { + + console.error( 'THREE.Geometry.fromBufferGeometry(): Position attribute required for conversion.' ); + return this; + + } + + var position = attributes.position; + var normal = attributes.normal; + var color = attributes.color; + var uv = attributes.uv; + var uv2 = attributes.uv2; + + if ( uv2 !== undefined ) { this.faceVertexUvs[ 1 ] = []; } + + for ( var i = 0; i < position.count; i ++ ) { + + scope.vertices.push( new Vector3().fromBufferAttribute( position, i ) ); + + if ( color !== undefined ) { + + scope.colors.push( new Color().fromBufferAttribute( color, i ) ); + + } + + } + + function addFace( a, b, c, materialIndex ) { + + var vertexColors = ( color === undefined ) ? [] : [ + scope.colors[ a ].clone(), + scope.colors[ b ].clone(), + scope.colors[ c ].clone() + ]; + + var vertexNormals = ( normal === undefined ) ? [] : [ + new Vector3().fromBufferAttribute( normal, a ), + new Vector3().fromBufferAttribute( normal, b ), + new Vector3().fromBufferAttribute( normal, c ) + ]; + + var face = new Face3( a, b, c, vertexNormals, vertexColors, materialIndex ); + + scope.faces.push( face ); + + if ( uv !== undefined ) { + + scope.faceVertexUvs[ 0 ].push( [ + new Vector2().fromBufferAttribute( uv, a ), + new Vector2().fromBufferAttribute( uv, b ), + new Vector2().fromBufferAttribute( uv, c ) + ] ); + + } + + if ( uv2 !== undefined ) { + + scope.faceVertexUvs[ 1 ].push( [ + new Vector2().fromBufferAttribute( uv2, a ), + new Vector2().fromBufferAttribute( uv2, b ), + new Vector2().fromBufferAttribute( uv2, c ) + ] ); + + } + + } + + var groups = geometry.groups; + + if ( groups.length > 0 ) { + + for ( var i$1 = 0; i$1 < groups.length; i$1 ++ ) { + + var group = groups[ i$1 ]; + + var start = group.start; + var count = group.count; + + for ( var j = start, jl = start + count; j < jl; j += 3 ) { + + if ( index !== undefined ) { + + addFace( index.getX( j ), index.getX( j + 1 ), index.getX( j + 2 ), group.materialIndex ); + + } else { + + addFace( j, j + 1, j + 2, group.materialIndex ); + + } + + } + + } + + } else { + + if ( index !== undefined ) { + + for ( var i$2 = 0; i$2 < index.count; i$2 += 3 ) { + + addFace( index.getX( i$2 ), index.getX( i$2 + 1 ), index.getX( i$2 + 2 ) ); + + } + + } else { + + for ( var i$3 = 0; i$3 < position.count; i$3 += 3 ) { + + addFace( i$3, i$3 + 1, i$3 + 2 ); + + } + + } + + } + + this.computeFaceNormals(); + + if ( geometry.boundingBox !== null ) { + + this.boundingBox = geometry.boundingBox.clone(); + + } + + if ( geometry.boundingSphere !== null ) { + + this.boundingSphere = geometry.boundingSphere.clone(); + + } + + return this; + + }, + + center: function () { + + this.computeBoundingBox(); + + this.boundingBox.getCenter( _offset$1 ).negate(); + + this.translate( _offset$1.x, _offset$1.y, _offset$1.z ); + + return this; + + }, + + normalize: function () { + + this.computeBoundingSphere(); + + var center = this.boundingSphere.center; + var radius = this.boundingSphere.radius; + + var s = radius === 0 ? 1 : 1.0 / radius; + + var matrix = new Matrix4(); + matrix.set( + s, 0, 0, - s * center.x, + 0, s, 0, - s * center.y, + 0, 0, s, - s * center.z, + 0, 0, 0, 1 + ); + + this.applyMatrix4( matrix ); + + return this; + + }, + + computeFaceNormals: function () { + + var cb = new Vector3(), ab = new Vector3(); + + for ( var f = 0, fl = this.faces.length; f < fl; f ++ ) { + + var face = this.faces[ f ]; + + var vA = this.vertices[ face.a ]; + var vB = this.vertices[ face.b ]; + var vC = this.vertices[ face.c ]; + + cb.subVectors( vC, vB ); + ab.subVectors( vA, vB ); + cb.cross( ab ); + + cb.normalize(); + + face.normal.copy( cb ); + + } + + }, + + computeVertexNormals: function ( areaWeighted ) { + + if ( areaWeighted === undefined ) { areaWeighted = true; } + + var vertices = new Array( this.vertices.length ); + + for ( var v = 0, vl = this.vertices.length; v < vl; v ++ ) { + + vertices[ v ] = new Vector3(); + + } + + if ( areaWeighted ) { + + // vertex normals weighted by triangle areas + // http://www.iquilezles.org/www/articles/normals/normals.htm + + var cb = new Vector3(), ab = new Vector3(); + + for ( var f = 0, fl = this.faces.length; f < fl; f ++ ) { + + var face = this.faces[ f ]; + + var vA = this.vertices[ face.a ]; + var vB = this.vertices[ face.b ]; + var vC = this.vertices[ face.c ]; + + cb.subVectors( vC, vB ); + ab.subVectors( vA, vB ); + cb.cross( ab ); + + vertices[ face.a ].add( cb ); + vertices[ face.b ].add( cb ); + vertices[ face.c ].add( cb ); + + } + + } else { + + this.computeFaceNormals(); + + for ( var f$1 = 0, fl$1 = this.faces.length; f$1 < fl$1; f$1 ++ ) { + + var face$1 = this.faces[ f$1 ]; + + vertices[ face$1.a ].add( face$1.normal ); + vertices[ face$1.b ].add( face$1.normal ); + vertices[ face$1.c ].add( face$1.normal ); + + } + + } + + for ( var v$1 = 0, vl$1 = this.vertices.length; v$1 < vl$1; v$1 ++ ) { + + vertices[ v$1 ].normalize(); + + } + + for ( var f$2 = 0, fl$2 = this.faces.length; f$2 < fl$2; f$2 ++ ) { + + var face$2 = this.faces[ f$2 ]; + + var vertexNormals = face$2.vertexNormals; + + if ( vertexNormals.length === 3 ) { + + vertexNormals[ 0 ].copy( vertices[ face$2.a ] ); + vertexNormals[ 1 ].copy( vertices[ face$2.b ] ); + vertexNormals[ 2 ].copy( vertices[ face$2.c ] ); + + } else { + + vertexNormals[ 0 ] = vertices[ face$2.a ].clone(); + vertexNormals[ 1 ] = vertices[ face$2.b ].clone(); + vertexNormals[ 2 ] = vertices[ face$2.c ].clone(); + + } + + } + + if ( this.faces.length > 0 ) { + + this.normalsNeedUpdate = true; + + } + + }, + + computeFlatVertexNormals: function () { + + this.computeFaceNormals(); + + for ( var f = 0, fl = this.faces.length; f < fl; f ++ ) { + + var face = this.faces[ f ]; + + var vertexNormals = face.vertexNormals; + + if ( vertexNormals.length === 3 ) { + + vertexNormals[ 0 ].copy( face.normal ); + vertexNormals[ 1 ].copy( face.normal ); + vertexNormals[ 2 ].copy( face.normal ); + + } else { + + vertexNormals[ 0 ] = face.normal.clone(); + vertexNormals[ 1 ] = face.normal.clone(); + vertexNormals[ 2 ] = face.normal.clone(); + + } + + } + + if ( this.faces.length > 0 ) { + + this.normalsNeedUpdate = true; + + } + + }, + + computeMorphNormals: function () { + + // save original normals + // - create temp variables on first access + // otherwise just copy (for faster repeated calls) + + for ( var f = 0, fl = this.faces.length; f < fl; f ++ ) { + + var face = this.faces[ f ]; + + if ( ! face.__originalFaceNormal ) { + + face.__originalFaceNormal = face.normal.clone(); + + } else { + + face.__originalFaceNormal.copy( face.normal ); + + } + + if ( ! face.__originalVertexNormals ) { face.__originalVertexNormals = []; } + + for ( var i = 0, il = face.vertexNormals.length; i < il; i ++ ) { + + if ( ! face.__originalVertexNormals[ i ] ) { + + face.__originalVertexNormals[ i ] = face.vertexNormals[ i ].clone(); + + } else { + + face.__originalVertexNormals[ i ].copy( face.vertexNormals[ i ] ); + + } + + } + + } + + // use temp geometry to compute face and vertex normals for each morph + + var tmpGeo = new Geometry(); + tmpGeo.faces = this.faces; + + for ( var i$1 = 0, il$1 = this.morphTargets.length; i$1 < il$1; i$1 ++ ) { + + // create on first access + + if ( ! this.morphNormals[ i$1 ] ) { + + this.morphNormals[ i$1 ] = {}; + this.morphNormals[ i$1 ].faceNormals = []; + this.morphNormals[ i$1 ].vertexNormals = []; + + var dstNormalsFace = this.morphNormals[ i$1 ].faceNormals; + var dstNormalsVertex = this.morphNormals[ i$1 ].vertexNormals; + + for ( var f$1 = 0, fl$1 = this.faces.length; f$1 < fl$1; f$1 ++ ) { + + var faceNormal = new Vector3(); + var vertexNormals = { a: new Vector3(), b: new Vector3(), c: new Vector3() }; + + dstNormalsFace.push( faceNormal ); + dstNormalsVertex.push( vertexNormals ); + + } + + } + + var morphNormals = this.morphNormals[ i$1 ]; + + // set vertices to morph target + + tmpGeo.vertices = this.morphTargets[ i$1 ].vertices; + + // compute morph normals + + tmpGeo.computeFaceNormals(); + tmpGeo.computeVertexNormals(); + + // store morph normals + + for ( var f$2 = 0, fl$2 = this.faces.length; f$2 < fl$2; f$2 ++ ) { + + var face$1 = this.faces[ f$2 ]; + + var faceNormal$1 = morphNormals.faceNormals[ f$2 ]; + var vertexNormals$1 = morphNormals.vertexNormals[ f$2 ]; + + faceNormal$1.copy( face$1.normal ); + + vertexNormals$1.a.copy( face$1.vertexNormals[ 0 ] ); + vertexNormals$1.b.copy( face$1.vertexNormals[ 1 ] ); + vertexNormals$1.c.copy( face$1.vertexNormals[ 2 ] ); + + } + + } + + // restore original normals + + for ( var f$3 = 0, fl$3 = this.faces.length; f$3 < fl$3; f$3 ++ ) { + + var face$2 = this.faces[ f$3 ]; + + face$2.normal = face$2.__originalFaceNormal; + face$2.vertexNormals = face$2.__originalVertexNormals; + + } + + }, + + computeBoundingBox: function () { + + if ( this.boundingBox === null ) { + + this.boundingBox = new Box3(); + + } + + this.boundingBox.setFromPoints( this.vertices ); + + }, + + computeBoundingSphere: function () { + + if ( this.boundingSphere === null ) { + + this.boundingSphere = new Sphere(); + + } + + this.boundingSphere.setFromPoints( this.vertices ); + + }, + + merge: function ( geometry, matrix, materialIndexOffset ) { + + if ( ! ( geometry && geometry.isGeometry ) ) { + + console.error( 'THREE.Geometry.merge(): geometry not an instance of THREE.Geometry.', geometry ); + return; + + } + + var normalMatrix; + var vertexOffset = this.vertices.length, + vertices1 = this.vertices, + vertices2 = geometry.vertices, + faces1 = this.faces, + faces2 = geometry.faces, + colors1 = this.colors, + colors2 = geometry.colors; + + if ( materialIndexOffset === undefined ) { materialIndexOffset = 0; } + + if ( matrix !== undefined ) { + + normalMatrix = new Matrix3().getNormalMatrix( matrix ); + + } + + // vertices + + for ( var i = 0, il = vertices2.length; i < il; i ++ ) { + + var vertex = vertices2[ i ]; + + var vertexCopy = vertex.clone(); + + if ( matrix !== undefined ) { vertexCopy.applyMatrix4( matrix ); } + + vertices1.push( vertexCopy ); + + } + + // colors + + for ( var i$1 = 0, il$1 = colors2.length; i$1 < il$1; i$1 ++ ) { + + colors1.push( colors2[ i$1 ].clone() ); + + } + + // faces + + for ( var i$2 = 0, il$2 = faces2.length; i$2 < il$2; i$2 ++ ) { + + var face = faces2[ i$2 ]; + var normal = (void 0), color = (void 0); + var faceVertexNormals = face.vertexNormals, + faceVertexColors = face.vertexColors; + + var faceCopy = new Face3( face.a + vertexOffset, face.b + vertexOffset, face.c + vertexOffset ); + faceCopy.normal.copy( face.normal ); + + if ( normalMatrix !== undefined ) { + + faceCopy.normal.applyMatrix3( normalMatrix ).normalize(); + + } + + for ( var j = 0, jl = faceVertexNormals.length; j < jl; j ++ ) { + + normal = faceVertexNormals[ j ].clone(); + + if ( normalMatrix !== undefined ) { + + normal.applyMatrix3( normalMatrix ).normalize(); + + } + + faceCopy.vertexNormals.push( normal ); + + } + + faceCopy.color.copy( face.color ); + + for ( var j$1 = 0, jl$1 = faceVertexColors.length; j$1 < jl$1; j$1 ++ ) { + + color = faceVertexColors[ j$1 ]; + faceCopy.vertexColors.push( color.clone() ); + + } + + faceCopy.materialIndex = face.materialIndex + materialIndexOffset; + + faces1.push( faceCopy ); + + } + + // uvs + + for ( var i$3 = 0, il$3 = geometry.faceVertexUvs.length; i$3 < il$3; i$3 ++ ) { + + var faceVertexUvs2 = geometry.faceVertexUvs[ i$3 ]; + + if ( this.faceVertexUvs[ i$3 ] === undefined ) { this.faceVertexUvs[ i$3 ] = []; } + + for ( var j$2 = 0, jl$2 = faceVertexUvs2.length; j$2 < jl$2; j$2 ++ ) { + + var uvs2 = faceVertexUvs2[ j$2 ], uvsCopy = []; + + for ( var k = 0, kl = uvs2.length; k < kl; k ++ ) { + + uvsCopy.push( uvs2[ k ].clone() ); + + } + + this.faceVertexUvs[ i$3 ].push( uvsCopy ); + + } + + } + + }, + + mergeMesh: function ( mesh ) { + + if ( ! ( mesh && mesh.isMesh ) ) { + + console.error( 'THREE.Geometry.mergeMesh(): mesh not an instance of THREE.Mesh.', mesh ); + return; + + } + + if ( mesh.matrixAutoUpdate ) { mesh.updateMatrix(); } + + this.merge( mesh.geometry, mesh.matrix ); + + }, + + /* + * Checks for duplicate vertices with hashmap. + * Duplicated vertices are removed + * and faces' vertices are updated. + */ + + mergeVertices: function () { + + var verticesMap = {}; // Hashmap for looking up vertices by position coordinates (and making sure they are unique) + var unique = [], changes = []; + + var precisionPoints = 4; // number of decimal points, e.g. 4 for epsilon of 0.0001 + var precision = Math.pow( 10, precisionPoints ); + + for ( var i = 0, il = this.vertices.length; i < il; i ++ ) { + + var v = this.vertices[ i ]; + var key = Math.round( v.x * precision ) + '_' + Math.round( v.y * precision ) + '_' + Math.round( v.z * precision ); + + if ( verticesMap[ key ] === undefined ) { + + verticesMap[ key ] = i; + unique.push( this.vertices[ i ] ); + changes[ i ] = unique.length - 1; + + } else { + + //console.log('Duplicate vertex found. ', i, ' could be using ', verticesMap[key]); + changes[ i ] = changes[ verticesMap[ key ] ]; + + } + + } + + + // if faces are completely degenerate after merging vertices, we + // have to remove them from the geometry. + var faceIndicesToRemove = []; + + for ( var i$1 = 0, il$1 = this.faces.length; i$1 < il$1; i$1 ++ ) { + + var face = this.faces[ i$1 ]; + + face.a = changes[ face.a ]; + face.b = changes[ face.b ]; + face.c = changes[ face.c ]; + + var indices = [ face.a, face.b, face.c ]; + + // if any duplicate vertices are found in a Face3 + // we have to remove the face as nothing can be saved + for ( var n = 0; n < 3; n ++ ) { + + if ( indices[ n ] === indices[ ( n + 1 ) % 3 ] ) { + + faceIndicesToRemove.push( i$1 ); + break; + + } + + } + + } + + for ( var i$2 = faceIndicesToRemove.length - 1; i$2 >= 0; i$2 -- ) { + + var idx = faceIndicesToRemove[ i$2 ]; + + this.faces.splice( idx, 1 ); + + for ( var j = 0, jl = this.faceVertexUvs.length; j < jl; j ++ ) { + + this.faceVertexUvs[ j ].splice( idx, 1 ); + + } + + } + + // Use unique set of vertices + + var diff = this.vertices.length - unique.length; + this.vertices = unique; + return diff; + + }, + + setFromPoints: function ( points ) { + + this.vertices = []; + + for ( var i = 0, l = points.length; i < l; i ++ ) { + + var point = points[ i ]; + this.vertices.push( new Vector3( point.x, point.y, point.z || 0 ) ); + + } + + return this; + + }, + + sortFacesByMaterialIndex: function () { + + var faces = this.faces; + var length = faces.length; + + // tag faces + + for ( var i = 0; i < length; i ++ ) { + + faces[ i ]._id = i; + + } + + // sort faces + + function materialIndexSort( a, b ) { + + return a.materialIndex - b.materialIndex; + + } + + faces.sort( materialIndexSort ); + + // sort uvs + + var uvs1 = this.faceVertexUvs[ 0 ]; + var uvs2 = this.faceVertexUvs[ 1 ]; + + var newUvs1, newUvs2; + + if ( uvs1 && uvs1.length === length ) { newUvs1 = []; } + if ( uvs2 && uvs2.length === length ) { newUvs2 = []; } + + for ( var i$1 = 0; i$1 < length; i$1 ++ ) { + + var id = faces[ i$1 ]._id; + + if ( newUvs1 ) { newUvs1.push( uvs1[ id ] ); } + if ( newUvs2 ) { newUvs2.push( uvs2[ id ] ); } + + } + + if ( newUvs1 ) { this.faceVertexUvs[ 0 ] = newUvs1; } + if ( newUvs2 ) { this.faceVertexUvs[ 1 ] = newUvs2; } + + }, + + toJSON: function () { + + var data = { + metadata: { + version: 4.5, + type: 'Geometry', + generator: 'Geometry.toJSON' + } + }; + + // standard Geometry serialization + + data.uuid = this.uuid; + data.type = this.type; + if ( this.name !== '' ) { data.name = this.name; } + + if ( this.parameters !== undefined ) { + + var parameters = this.parameters; + + for ( var key in parameters ) { + + if ( parameters[ key ] !== undefined ) { data[ key ] = parameters[ key ]; } + + } + + return data; + + } + + var vertices = []; + + for ( var i = 0; i < this.vertices.length; i ++ ) { + + var vertex = this.vertices[ i ]; + vertices.push( vertex.x, vertex.y, vertex.z ); + + } + + var faces = []; + var normals = []; + var normalsHash = {}; + var colors = []; + var colorsHash = {}; + var uvs = []; + var uvsHash = {}; + + for ( var i$1 = 0; i$1 < this.faces.length; i$1 ++ ) { + + var face = this.faces[ i$1 ]; + + var hasMaterial = true; + var hasFaceUv = false; // deprecated + var hasFaceVertexUv = this.faceVertexUvs[ 0 ][ i$1 ] !== undefined; + var hasFaceNormal = face.normal.length() > 0; + var hasFaceVertexNormal = face.vertexNormals.length > 0; + var hasFaceColor = face.color.r !== 1 || face.color.g !== 1 || face.color.b !== 1; + var hasFaceVertexColor = face.vertexColors.length > 0; + + var faceType = 0; + + faceType = setBit( faceType, 0, 0 ); // isQuad + faceType = setBit( faceType, 1, hasMaterial ); + faceType = setBit( faceType, 2, hasFaceUv ); + faceType = setBit( faceType, 3, hasFaceVertexUv ); + faceType = setBit( faceType, 4, hasFaceNormal ); + faceType = setBit( faceType, 5, hasFaceVertexNormal ); + faceType = setBit( faceType, 6, hasFaceColor ); + faceType = setBit( faceType, 7, hasFaceVertexColor ); + + faces.push( faceType ); + faces.push( face.a, face.b, face.c ); + faces.push( face.materialIndex ); + + if ( hasFaceVertexUv ) { + + var faceVertexUvs = this.faceVertexUvs[ 0 ][ i$1 ]; + + faces.push( + getUvIndex( faceVertexUvs[ 0 ] ), + getUvIndex( faceVertexUvs[ 1 ] ), + getUvIndex( faceVertexUvs[ 2 ] ) + ); + + } + + if ( hasFaceNormal ) { + + faces.push( getNormalIndex( face.normal ) ); + + } + + if ( hasFaceVertexNormal ) { + + var vertexNormals = face.vertexNormals; + + faces.push( + getNormalIndex( vertexNormals[ 0 ] ), + getNormalIndex( vertexNormals[ 1 ] ), + getNormalIndex( vertexNormals[ 2 ] ) + ); + + } + + if ( hasFaceColor ) { + + faces.push( getColorIndex( face.color ) ); + + } + + if ( hasFaceVertexColor ) { + + var vertexColors = face.vertexColors; + + faces.push( + getColorIndex( vertexColors[ 0 ] ), + getColorIndex( vertexColors[ 1 ] ), + getColorIndex( vertexColors[ 2 ] ) + ); + + } + + } + + function setBit( value, position, enabled ) { + + return enabled ? value | ( 1 << position ) : value & ( ~ ( 1 << position ) ); + + } + + function getNormalIndex( normal ) { + + var hash = normal.x.toString() + normal.y.toString() + normal.z.toString(); + + if ( normalsHash[ hash ] !== undefined ) { + + return normalsHash[ hash ]; + + } + + normalsHash[ hash ] = normals.length / 3; + normals.push( normal.x, normal.y, normal.z ); + + return normalsHash[ hash ]; + + } + + function getColorIndex( color ) { + + var hash = color.r.toString() + color.g.toString() + color.b.toString(); + + if ( colorsHash[ hash ] !== undefined ) { + + return colorsHash[ hash ]; + + } + + colorsHash[ hash ] = colors.length; + colors.push( color.getHex() ); + + return colorsHash[ hash ]; + + } + + function getUvIndex( uv ) { + + var hash = uv.x.toString() + uv.y.toString(); + + if ( uvsHash[ hash ] !== undefined ) { + + return uvsHash[ hash ]; + + } + + uvsHash[ hash ] = uvs.length / 2; + uvs.push( uv.x, uv.y ); + + return uvsHash[ hash ]; + + } + + data.data = {}; + + data.data.vertices = vertices; + data.data.normals = normals; + if ( colors.length > 0 ) { data.data.colors = colors; } + if ( uvs.length > 0 ) { data.data.uvs = [ uvs ]; } // temporal backward compatibility + data.data.faces = faces; + + return data; + + }, + + clone: function () { + + /* + // Handle primitives + + const parameters = this.parameters; + + if ( parameters !== undefined ) { + + const values = []; + + for ( const key in parameters ) { + + values.push( parameters[ key ] ); + + } + + const geometry = Object.create( this.constructor.prototype ); + this.constructor.apply( geometry, values ); + return geometry; + + } + + return new this.constructor().copy( this ); + */ + + return new Geometry().copy( this ); + + }, + + copy: function ( source ) { + + // reset + + this.vertices = []; + this.colors = []; + this.faces = []; + this.faceVertexUvs = [[]]; + this.morphTargets = []; + this.morphNormals = []; + this.skinWeights = []; + this.skinIndices = []; + this.lineDistances = []; + this.boundingBox = null; + this.boundingSphere = null; + + // name + + this.name = source.name; + + // vertices + + var vertices = source.vertices; + + for ( var i = 0, il = vertices.length; i < il; i ++ ) { + + this.vertices.push( vertices[ i ].clone() ); + + } + + // colors + + var colors = source.colors; + + for ( var i$1 = 0, il$1 = colors.length; i$1 < il$1; i$1 ++ ) { + + this.colors.push( colors[ i$1 ].clone() ); + + } + + // faces + + var faces = source.faces; + + for ( var i$2 = 0, il$2 = faces.length; i$2 < il$2; i$2 ++ ) { + + this.faces.push( faces[ i$2 ].clone() ); + + } + + // face vertex uvs + + for ( var i$3 = 0, il$3 = source.faceVertexUvs.length; i$3 < il$3; i$3 ++ ) { + + var faceVertexUvs = source.faceVertexUvs[ i$3 ]; + + if ( this.faceVertexUvs[ i$3 ] === undefined ) { + + this.faceVertexUvs[ i$3 ] = []; + + } + + for ( var j = 0, jl = faceVertexUvs.length; j < jl; j ++ ) { + + var uvs = faceVertexUvs[ j ], uvsCopy = []; + + for ( var k = 0, kl = uvs.length; k < kl; k ++ ) { + + var uv = uvs[ k ]; + + uvsCopy.push( uv.clone() ); + + } + + this.faceVertexUvs[ i$3 ].push( uvsCopy ); + + } + + } + + // morph targets + + var morphTargets = source.morphTargets; + + for ( var i$4 = 0, il$4 = morphTargets.length; i$4 < il$4; i$4 ++ ) { + + var morphTarget = {}; + morphTarget.name = morphTargets[ i$4 ].name; + + // vertices + + if ( morphTargets[ i$4 ].vertices !== undefined ) { + + morphTarget.vertices = []; + + for ( var j$1 = 0, jl$1 = morphTargets[ i$4 ].vertices.length; j$1 < jl$1; j$1 ++ ) { + + morphTarget.vertices.push( morphTargets[ i$4 ].vertices[ j$1 ].clone() ); + + } + + } + + // normals + + if ( morphTargets[ i$4 ].normals !== undefined ) { + + morphTarget.normals = []; + + for ( var j$2 = 0, jl$2 = morphTargets[ i$4 ].normals.length; j$2 < jl$2; j$2 ++ ) { + + morphTarget.normals.push( morphTargets[ i$4 ].normals[ j$2 ].clone() ); + + } + + } + + this.morphTargets.push( morphTarget ); + + } + + // morph normals + + var morphNormals = source.morphNormals; + + for ( var i$5 = 0, il$5 = morphNormals.length; i$5 < il$5; i$5 ++ ) { + + var morphNormal = {}; + + // vertex normals + + if ( morphNormals[ i$5 ].vertexNormals !== undefined ) { + + morphNormal.vertexNormals = []; + + for ( var j$3 = 0, jl$3 = morphNormals[ i$5 ].vertexNormals.length; j$3 < jl$3; j$3 ++ ) { + + var srcVertexNormal = morphNormals[ i$5 ].vertexNormals[ j$3 ]; + var destVertexNormal = {}; + + destVertexNormal.a = srcVertexNormal.a.clone(); + destVertexNormal.b = srcVertexNormal.b.clone(); + destVertexNormal.c = srcVertexNormal.c.clone(); + + morphNormal.vertexNormals.push( destVertexNormal ); + + } + + } + + // face normals + + if ( morphNormals[ i$5 ].faceNormals !== undefined ) { + + morphNormal.faceNormals = []; + + for ( var j$4 = 0, jl$4 = morphNormals[ i$5 ].faceNormals.length; j$4 < jl$4; j$4 ++ ) { + + morphNormal.faceNormals.push( morphNormals[ i$5 ].faceNormals[ j$4 ].clone() ); + + } + + } + + this.morphNormals.push( morphNormal ); + + } + + // skin weights + + var skinWeights = source.skinWeights; + + for ( var i$6 = 0, il$6 = skinWeights.length; i$6 < il$6; i$6 ++ ) { + + this.skinWeights.push( skinWeights[ i$6 ].clone() ); + + } + + // skin indices + + var skinIndices = source.skinIndices; + + for ( var i$7 = 0, il$7 = skinIndices.length; i$7 < il$7; i$7 ++ ) { + + this.skinIndices.push( skinIndices[ i$7 ].clone() ); + + } + + // line distances + + var lineDistances = source.lineDistances; + + for ( var i$8 = 0, il$8 = lineDistances.length; i$8 < il$8; i$8 ++ ) { + + this.lineDistances.push( lineDistances[ i$8 ] ); + + } + + // bounding box + + var boundingBox = source.boundingBox; + + if ( boundingBox !== null ) { + + this.boundingBox = boundingBox.clone(); + + } + + // bounding sphere + + var boundingSphere = source.boundingSphere; + + if ( boundingSphere !== null ) { + + this.boundingSphere = boundingSphere.clone(); + + } + + // update flags + + this.elementsNeedUpdate = source.elementsNeedUpdate; + this.verticesNeedUpdate = source.verticesNeedUpdate; + this.uvsNeedUpdate = source.uvsNeedUpdate; + this.normalsNeedUpdate = source.normalsNeedUpdate; + this.colorsNeedUpdate = source.colorsNeedUpdate; + this.lineDistancesNeedUpdate = source.lineDistancesNeedUpdate; + this.groupsNeedUpdate = source.groupsNeedUpdate; + + return this; + + }, + + dispose: function () { + + this.dispatchEvent( { type: 'dispose' } ); + + } + + } ); + + // BoxGeometry + + function BoxGeometry( width, height, depth, widthSegments, heightSegments, depthSegments ) { + + Geometry.call(this); + + this.type = 'BoxGeometry'; + + this.parameters = { + width: width, + height: height, + depth: depth, + widthSegments: widthSegments, + heightSegments: heightSegments, + depthSegments: depthSegments + }; + + this.fromBufferGeometry( new BoxBufferGeometry( width, height, depth, widthSegments, heightSegments, depthSegments ) ); + this.mergeVertices(); + + } + + BoxGeometry.prototype = Object.create( Geometry.prototype ); + BoxGeometry.prototype.constructor = BoxGeometry; + + // BoxBufferGeometry + + function BoxBufferGeometry( width, height, depth, widthSegments, heightSegments, depthSegments ) { + if ( width === void 0 ) width = 1; + if ( height === void 0 ) height = 1; + if ( depth === void 0 ) depth = 1; + if ( widthSegments === void 0 ) widthSegments = 1; + if ( heightSegments === void 0 ) heightSegments = 1; + if ( depthSegments === void 0 ) depthSegments = 1; + + + BufferGeometry.call(this); + + this.type = 'BoxBufferGeometry'; + + this.parameters = { + width: width, + height: height, + depth: depth, + widthSegments: widthSegments, + heightSegments: heightSegments, + depthSegments: depthSegments + }; + + var scope = this; + + // segments + + widthSegments = Math.floor( widthSegments ); + heightSegments = Math.floor( heightSegments ); + depthSegments = Math.floor( depthSegments ); + + // buffers + + var indices = []; + var vertices = []; + var normals = []; + var uvs = []; + + // helper variables + + var numberOfVertices = 0; + var groupStart = 0; + + // build each side of the box geometry + + buildPlane( 'z', 'y', 'x', - 1, - 1, depth, height, width, depthSegments, heightSegments, 0 ); // px + buildPlane( 'z', 'y', 'x', 1, - 1, depth, height, - width, depthSegments, heightSegments, 1 ); // nx + buildPlane( 'x', 'z', 'y', 1, 1, width, depth, height, widthSegments, depthSegments, 2 ); // py + buildPlane( 'x', 'z', 'y', 1, - 1, width, depth, - height, widthSegments, depthSegments, 3 ); // ny + buildPlane( 'x', 'y', 'z', 1, - 1, width, height, depth, widthSegments, heightSegments, 4 ); // pz + buildPlane( 'x', 'y', 'z', - 1, - 1, width, height, - depth, widthSegments, heightSegments, 5 ); // nz + + // build geometry + + this.setIndex( indices ); + this.setAttribute( 'position', new Float32BufferAttribute( vertices, 3 ) ); + this.setAttribute( 'normal', new Float32BufferAttribute( normals, 3 ) ); + this.setAttribute( 'uv', new Float32BufferAttribute( uvs, 2 ) ); + + function buildPlane( u, v, w, udir, vdir, width, height, depth, gridX, gridY, materialIndex ) { + + var segmentWidth = width / gridX; + var segmentHeight = height / gridY; + + var widthHalf = width / 2; + var heightHalf = height / 2; + var depthHalf = depth / 2; + + var gridX1 = gridX + 1; + var gridY1 = gridY + 1; + + var vertexCounter = 0; + var groupCount = 0; + + var vector = new Vector3(); + + // generate vertices, normals and uvs + + for ( var iy = 0; iy < gridY1; iy ++ ) { + + var y = iy * segmentHeight - heightHalf; + + for ( var ix = 0; ix < gridX1; ix ++ ) { + + var x = ix * segmentWidth - widthHalf; + + // set values to correct vector component + + vector[ u ] = x * udir; + vector[ v ] = y * vdir; + vector[ w ] = depthHalf; + + // now apply vector to vertex buffer + + vertices.push( vector.x, vector.y, vector.z ); + + // set values to correct vector component + + vector[ u ] = 0; + vector[ v ] = 0; + vector[ w ] = depth > 0 ? 1 : - 1; + + // now apply vector to normal buffer + + normals.push( vector.x, vector.y, vector.z ); + + // uvs + + uvs.push( ix / gridX ); + uvs.push( 1 - ( iy / gridY ) ); + + // counters + + vertexCounter += 1; + + } + + } + + // indices + + // 1. you need three indices to draw a single face + // 2. a single segment consists of two faces + // 3. so we need to generate six (2*3) indices per segment + + for ( var iy$1 = 0; iy$1 < gridY; iy$1 ++ ) { + + for ( var ix$1 = 0; ix$1 < gridX; ix$1 ++ ) { + + var a = numberOfVertices + ix$1 + gridX1 * iy$1; + var b = numberOfVertices + ix$1 + gridX1 * ( iy$1 + 1 ); + var c = numberOfVertices + ( ix$1 + 1 ) + gridX1 * ( iy$1 + 1 ); + var d = numberOfVertices + ( ix$1 + 1 ) + gridX1 * iy$1; + + // faces + + indices.push( a, b, d ); + indices.push( b, c, d ); + + // increase counter + + groupCount += 6; + + } + + } + + // add a group to the geometry. this will ensure multi material support + + scope.addGroup( groupStart, groupCount, materialIndex ); + + // calculate new start value for groups + + groupStart += groupCount; + + // update total number of vertices + + numberOfVertices += vertexCounter; + + } + + } + + BoxBufferGeometry.prototype = Object.create( BufferGeometry.prototype ); + BoxBufferGeometry.prototype.constructor = BoxBufferGeometry; + + /** + * Uniform Utilities + */ + + function cloneUniforms( src ) { + + var dst = {}; + + for ( var u in src ) { + + dst[ u ] = {}; + + for ( var p in src[ u ] ) { + + var property = src[ u ][ p ]; + + if ( property && ( property.isColor || + property.isMatrix3 || property.isMatrix4 || + property.isVector2 || property.isVector3 || property.isVector4 || + property.isTexture ) ) { + + dst[ u ][ p ] = property.clone(); + + } else if ( Array.isArray( property ) ) { + + dst[ u ][ p ] = property.slice(); + + } else { + + dst[ u ][ p ] = property; + + } + + } + + } + + return dst; + + } + + function mergeUniforms( uniforms ) { + + var merged = {}; + + for ( var u = 0; u < uniforms.length; u ++ ) { + + var tmp = cloneUniforms( uniforms[ u ] ); + + for ( var p in tmp ) { + + merged[ p ] = tmp[ p ]; + + } + + } + + return merged; + + } + + // Legacy + + var UniformsUtils = { clone: cloneUniforms, merge: mergeUniforms }; + + var default_vertex = "void main() {\n\tgl_Position = projectionMatrix * modelViewMatrix * vec4( position, 1.0 );\n}"; + + var default_fragment = "void main() {\n\tgl_FragColor = vec4( 1.0, 0.0, 0.0, 1.0 );\n}"; + + /** + * parameters = { + * defines: { "label" : "value" }, + * uniforms: { "parameter1": { value: 1.0 }, "parameter2": { value2: 2 } }, + * + * fragmentShader: , + * vertexShader: , + * + * wireframe: , + * wireframeLinewidth: , + * + * lights: , + * + * skinning: , + * morphTargets: , + * morphNormals: + * } + */ + + function ShaderMaterial( parameters ) { + + Material.call( this ); + + this.type = 'ShaderMaterial'; + + this.defines = {}; + this.uniforms = {}; + + this.vertexShader = default_vertex; + this.fragmentShader = default_fragment; + + this.linewidth = 1; + + this.wireframe = false; + this.wireframeLinewidth = 1; + + this.fog = false; // set to use scene fog + this.lights = false; // set to use scene lights + this.clipping = false; // set to use user-defined clipping planes + + this.skinning = false; // set to use skinning attribute streams + this.morphTargets = false; // set to use morph targets + this.morphNormals = false; // set to use morph normals + + this.extensions = { + derivatives: false, // set to use derivatives + fragDepth: false, // set to use fragment depth values + drawBuffers: false, // set to use draw buffers + shaderTextureLOD: false // set to use shader texture LOD + }; + + // When rendered geometry doesn't include these attributes but the material does, + // use these default values in WebGL. This avoids errors when buffer data is missing. + this.defaultAttributeValues = { + 'color': [ 1, 1, 1 ], + 'uv': [ 0, 0 ], + 'uv2': [ 0, 0 ] + }; + + this.index0AttributeName = undefined; + this.uniformsNeedUpdate = false; + + this.glslVersion = null; + + if ( parameters !== undefined ) { + + if ( parameters.attributes !== undefined ) { + + console.error( 'THREE.ShaderMaterial: attributes should now be defined in THREE.BufferGeometry instead.' ); + + } + + this.setValues( parameters ); + + } + + } + + ShaderMaterial.prototype = Object.create( Material.prototype ); + ShaderMaterial.prototype.constructor = ShaderMaterial; + + ShaderMaterial.prototype.isShaderMaterial = true; + + ShaderMaterial.prototype.copy = function ( source ) { + + Material.prototype.copy.call( this, source ); + + this.fragmentShader = source.fragmentShader; + this.vertexShader = source.vertexShader; + + this.uniforms = cloneUniforms( source.uniforms ); + + this.defines = Object.assign( {}, source.defines ); + + this.wireframe = source.wireframe; + this.wireframeLinewidth = source.wireframeLinewidth; + + this.lights = source.lights; + this.clipping = source.clipping; + + this.skinning = source.skinning; + + this.morphTargets = source.morphTargets; + this.morphNormals = source.morphNormals; + + this.extensions = Object.assign( {}, source.extensions ); + + this.glslVersion = source.glslVersion; + + return this; + + }; + + ShaderMaterial.prototype.toJSON = function ( meta ) { + + var data = Material.prototype.toJSON.call( this, meta ); + + data.glslVersion = this.glslVersion; + data.uniforms = {}; + + for ( var name in this.uniforms ) { + + var uniform = this.uniforms[ name ]; + var value = uniform.value; + + if ( value && value.isTexture ) { + + data.uniforms[ name ] = { + type: 't', + value: value.toJSON( meta ).uuid + }; + + } else if ( value && value.isColor ) { + + data.uniforms[ name ] = { + type: 'c', + value: value.getHex() + }; + + } else if ( value && value.isVector2 ) { + + data.uniforms[ name ] = { + type: 'v2', + value: value.toArray() + }; + + } else if ( value && value.isVector3 ) { + + data.uniforms[ name ] = { + type: 'v3', + value: value.toArray() + }; + + } else if ( value && value.isVector4 ) { + + data.uniforms[ name ] = { + type: 'v4', + value: value.toArray() + }; + + } else if ( value && value.isMatrix3 ) { + + data.uniforms[ name ] = { + type: 'm3', + value: value.toArray() + }; + + } else if ( value && value.isMatrix4 ) { + + data.uniforms[ name ] = { + type: 'm4', + value: value.toArray() + }; + + } else { + + data.uniforms[ name ] = { + value: value + }; + + // note: the array variants v2v, v3v, v4v, m4v and tv are not supported so far + + } + + } + + if ( Object.keys( this.defines ).length > 0 ) { data.defines = this.defines; } + + data.vertexShader = this.vertexShader; + data.fragmentShader = this.fragmentShader; + + var extensions = {}; + + for ( var key in this.extensions ) { + + if ( this.extensions[ key ] === true ) { extensions[ key ] = true; } + + } + + if ( Object.keys( extensions ).length > 0 ) { data.extensions = extensions; } + + return data; + + }; + + function Camera() { + + Object3D.call( this ); + + this.type = 'Camera'; + + this.matrixWorldInverse = new Matrix4(); + + this.projectionMatrix = new Matrix4(); + this.projectionMatrixInverse = new Matrix4(); + + } + + Camera.prototype = Object.assign( Object.create( Object3D.prototype ), { + + constructor: Camera, + + isCamera: true, + + copy: function ( source, recursive ) { + + Object3D.prototype.copy.call( this, source, recursive ); + + this.matrixWorldInverse.copy( source.matrixWorldInverse ); + + this.projectionMatrix.copy( source.projectionMatrix ); + this.projectionMatrixInverse.copy( source.projectionMatrixInverse ); + + return this; + + }, + + getWorldDirection: function ( target ) { + + if ( target === undefined ) { + + console.warn( 'THREE.Camera: .getWorldDirection() target is now required' ); + target = new Vector3(); + + } + + this.updateMatrixWorld( true ); + + var e = this.matrixWorld.elements; + + return target.set( - e[ 8 ], - e[ 9 ], - e[ 10 ] ).normalize(); + + }, + + updateMatrixWorld: function ( force ) { + + Object3D.prototype.updateMatrixWorld.call( this, force ); + + this.matrixWorldInverse.getInverse( this.matrixWorld ); + + }, + + updateWorldMatrix: function ( updateParents, updateChildren ) { + + Object3D.prototype.updateWorldMatrix.call( this, updateParents, updateChildren ); + + this.matrixWorldInverse.getInverse( this.matrixWorld ); + + }, + + clone: function () { + + return new this.constructor().copy( this ); + + } + + } ); + + function PerspectiveCamera( fov, aspect, near, far ) { + + Camera.call( this ); + + this.type = 'PerspectiveCamera'; + + this.fov = fov !== undefined ? fov : 50; + this.zoom = 1; + + this.near = near !== undefined ? near : 0.1; + this.far = far !== undefined ? far : 2000; + this.focus = 10; + + this.aspect = aspect !== undefined ? aspect : 1; + this.view = null; + + this.filmGauge = 35; // width of the film (default in millimeters) + this.filmOffset = 0; // horizontal film offset (same unit as gauge) + + this.updateProjectionMatrix(); + + } + + PerspectiveCamera.prototype = Object.assign( Object.create( Camera.prototype ), { + + constructor: PerspectiveCamera, + + isPerspectiveCamera: true, + + copy: function ( source, recursive ) { + + Camera.prototype.copy.call( this, source, recursive ); + + this.fov = source.fov; + this.zoom = source.zoom; + + this.near = source.near; + this.far = source.far; + this.focus = source.focus; + + this.aspect = source.aspect; + this.view = source.view === null ? null : Object.assign( {}, source.view ); + + this.filmGauge = source.filmGauge; + this.filmOffset = source.filmOffset; + + return this; + + }, + + /** + * Sets the FOV by focal length in respect to the current .filmGauge. + * + * The default film gauge is 35, so that the focal length can be specified for + * a 35mm (full frame) camera. + * + * Values for focal length and film gauge must have the same unit. + */ + setFocalLength: function ( focalLength ) { + + // see http://www.bobatkins.com/photography/technical/field_of_view.html + var vExtentSlope = 0.5 * this.getFilmHeight() / focalLength; + + this.fov = MathUtils.RAD2DEG * 2 * Math.atan( vExtentSlope ); + this.updateProjectionMatrix(); + + }, + + /** + * Calculates the focal length from the current .fov and .filmGauge. + */ + getFocalLength: function () { + + var vExtentSlope = Math.tan( MathUtils.DEG2RAD * 0.5 * this.fov ); + + return 0.5 * this.getFilmHeight() / vExtentSlope; + + }, + + getEffectiveFOV: function () { + + return MathUtils.RAD2DEG * 2 * Math.atan( + Math.tan( MathUtils.DEG2RAD * 0.5 * this.fov ) / this.zoom ); + + }, + + getFilmWidth: function () { + + // film not completely covered in portrait format (aspect < 1) + return this.filmGauge * Math.min( this.aspect, 1 ); + + }, + + getFilmHeight: function () { + + // film not completely covered in landscape format (aspect > 1) + return this.filmGauge / Math.max( this.aspect, 1 ); + + }, + + /** + * Sets an offset in a larger frustum. This is useful for multi-window or + * multi-monitor/multi-machine setups. + * + * For example, if you have 3x2 monitors and each monitor is 1920x1080 and + * the monitors are in grid like this + * + * +---+---+---+ + * | A | B | C | + * +---+---+---+ + * | D | E | F | + * +---+---+---+ + * + * then for each monitor you would call it like this + * + * const w = 1920; + * const h = 1080; + * const fullWidth = w * 3; + * const fullHeight = h * 2; + * + * --A-- + * camera.setViewOffset( fullWidth, fullHeight, w * 0, h * 0, w, h ); + * --B-- + * camera.setViewOffset( fullWidth, fullHeight, w * 1, h * 0, w, h ); + * --C-- + * camera.setViewOffset( fullWidth, fullHeight, w * 2, h * 0, w, h ); + * --D-- + * camera.setViewOffset( fullWidth, fullHeight, w * 0, h * 1, w, h ); + * --E-- + * camera.setViewOffset( fullWidth, fullHeight, w * 1, h * 1, w, h ); + * --F-- + * camera.setViewOffset( fullWidth, fullHeight, w * 2, h * 1, w, h ); + * + * Note there is no reason monitors have to be the same size or in a grid. + */ + setViewOffset: function ( fullWidth, fullHeight, x, y, width, height ) { + + this.aspect = fullWidth / fullHeight; + + if ( this.view === null ) { + + this.view = { + enabled: true, + fullWidth: 1, + fullHeight: 1, + offsetX: 0, + offsetY: 0, + width: 1, + height: 1 + }; + + } + + this.view.enabled = true; + this.view.fullWidth = fullWidth; + this.view.fullHeight = fullHeight; + this.view.offsetX = x; + this.view.offsetY = y; + this.view.width = width; + this.view.height = height; + + this.updateProjectionMatrix(); + + }, + + clearViewOffset: function () { + + if ( this.view !== null ) { + + this.view.enabled = false; + + } + + this.updateProjectionMatrix(); + + }, + + updateProjectionMatrix: function () { + + var near = this.near; + var top = near * Math.tan( MathUtils.DEG2RAD * 0.5 * this.fov ) / this.zoom; + var height = 2 * top; + var width = this.aspect * height; + var left = - 0.5 * width; + var view = this.view; + + if ( this.view !== null && this.view.enabled ) { + + var fullWidth = view.fullWidth, + fullHeight = view.fullHeight; + + left += view.offsetX * width / fullWidth; + top -= view.offsetY * height / fullHeight; + width *= view.width / fullWidth; + height *= view.height / fullHeight; + + } + + var skew = this.filmOffset; + if ( skew !== 0 ) { left += near * skew / this.getFilmWidth(); } + + this.projectionMatrix.makePerspective( left, left + width, top, top - height, near, this.far ); + + this.projectionMatrixInverse.getInverse( this.projectionMatrix ); + + }, + + toJSON: function ( meta ) { + + var data = Object3D.prototype.toJSON.call( this, meta ); + + data.object.fov = this.fov; + data.object.zoom = this.zoom; + + data.object.near = this.near; + data.object.far = this.far; + data.object.focus = this.focus; + + data.object.aspect = this.aspect; + + if ( this.view !== null ) { data.object.view = Object.assign( {}, this.view ); } + + data.object.filmGauge = this.filmGauge; + data.object.filmOffset = this.filmOffset; + + return data; + + } + + } ); + + var fov = 90, aspect = 1; + + function CubeCamera( near, far, renderTarget ) { + + Object3D.call( this ); + + this.type = 'CubeCamera'; + + if ( renderTarget.isWebGLCubeRenderTarget !== true ) { + + console.error( 'THREE.CubeCamera: The constructor now expects an instance of WebGLCubeRenderTarget as third parameter.' ); + return; + + } + + this.renderTarget = renderTarget; + + var cameraPX = new PerspectiveCamera( fov, aspect, near, far ); + cameraPX.layers = this.layers; + cameraPX.up.set( 0, - 1, 0 ); + cameraPX.lookAt( new Vector3( 1, 0, 0 ) ); + this.add( cameraPX ); + + var cameraNX = new PerspectiveCamera( fov, aspect, near, far ); + cameraNX.layers = this.layers; + cameraNX.up.set( 0, - 1, 0 ); + cameraNX.lookAt( new Vector3( - 1, 0, 0 ) ); + this.add( cameraNX ); + + var cameraPY = new PerspectiveCamera( fov, aspect, near, far ); + cameraPY.layers = this.layers; + cameraPY.up.set( 0, 0, 1 ); + cameraPY.lookAt( new Vector3( 0, 1, 0 ) ); + this.add( cameraPY ); + + var cameraNY = new PerspectiveCamera( fov, aspect, near, far ); + cameraNY.layers = this.layers; + cameraNY.up.set( 0, 0, - 1 ); + cameraNY.lookAt( new Vector3( 0, - 1, 0 ) ); + this.add( cameraNY ); + + var cameraPZ = new PerspectiveCamera( fov, aspect, near, far ); + cameraPZ.layers = this.layers; + cameraPZ.up.set( 0, - 1, 0 ); + cameraPZ.lookAt( new Vector3( 0, 0, 1 ) ); + this.add( cameraPZ ); + + var cameraNZ = new PerspectiveCamera( fov, aspect, near, far ); + cameraNZ.layers = this.layers; + cameraNZ.up.set( 0, - 1, 0 ); + cameraNZ.lookAt( new Vector3( 0, 0, - 1 ) ); + this.add( cameraNZ ); + + this.update = function ( renderer, scene ) { + + if ( this.parent === null ) { this.updateMatrixWorld(); } + + var currentXrEnabled = renderer.xr.enabled; + var currentRenderTarget = renderer.getRenderTarget(); + + renderer.xr.enabled = false; + + var generateMipmaps = renderTarget.texture.generateMipmaps; + + renderTarget.texture.generateMipmaps = false; + + renderer.setRenderTarget( renderTarget, 0 ); + renderer.render( scene, cameraPX ); + + renderer.setRenderTarget( renderTarget, 1 ); + renderer.render( scene, cameraNX ); + + renderer.setRenderTarget( renderTarget, 2 ); + renderer.render( scene, cameraPY ); + + renderer.setRenderTarget( renderTarget, 3 ); + renderer.render( scene, cameraNY ); + + renderer.setRenderTarget( renderTarget, 4 ); + renderer.render( scene, cameraPZ ); + + renderTarget.texture.generateMipmaps = generateMipmaps; + + renderer.setRenderTarget( renderTarget, 5 ); + renderer.render( scene, cameraNZ ); + + renderer.setRenderTarget( currentRenderTarget ); + + renderer.xr.enabled = currentXrEnabled; + + }; + + this.clear = function ( renderer, color, depth, stencil ) { + + var currentRenderTarget = renderer.getRenderTarget(); + + for ( var i = 0; i < 6; i ++ ) { + + renderer.setRenderTarget( renderTarget, i ); + + renderer.clear( color, depth, stencil ); + + } + + renderer.setRenderTarget( currentRenderTarget ); + + }; + + } + + CubeCamera.prototype = Object.create( Object3D.prototype ); + CubeCamera.prototype.constructor = CubeCamera; + + function WebGLCubeRenderTarget( size, options, dummy ) { + + if ( Number.isInteger( options ) ) { + + console.warn( 'THREE.WebGLCubeRenderTarget: constructor signature is now WebGLCubeRenderTarget( size, options )' ); + + options = dummy; + + } + + WebGLRenderTarget.call( this, size, size, options ); + + this.texture.isWebGLCubeRenderTargetTexture = true; // HACK Why is texture not a CubeTexture? + + } + + WebGLCubeRenderTarget.prototype = Object.create( WebGLRenderTarget.prototype ); + WebGLCubeRenderTarget.prototype.constructor = WebGLCubeRenderTarget; + + WebGLCubeRenderTarget.prototype.isWebGLCubeRenderTarget = true; + + WebGLCubeRenderTarget.prototype.fromEquirectangularTexture = function ( renderer, texture ) { + + this.texture.type = texture.type; + this.texture.format = RGBAFormat; // see #18859 + this.texture.encoding = texture.encoding; + + this.texture.generateMipmaps = texture.generateMipmaps; + this.texture.minFilter = texture.minFilter; + this.texture.magFilter = texture.magFilter; + + var shader = { + + uniforms: { + tEquirect: { value: null }, + }, + + vertexShader: /* glsl */"\n\n\t\t\tvarying vec3 vWorldDirection;\n\n\t\t\tvec3 transformDirection( in vec3 dir, in mat4 matrix ) {\n\n\t\t\t\treturn normalize( ( matrix * vec4( dir, 0.0 ) ).xyz );\n\n\t\t\t}\n\n\t\t\tvoid main() {\n\n\t\t\t\tvWorldDirection = transformDirection( position, modelMatrix );\n\n\t\t\t\t#include \n\t\t\t\t#include \n\n\t\t\t}\n\t\t", + + fragmentShader: /* glsl */"\n\n\t\t\tuniform sampler2D tEquirect;\n\n\t\t\tvarying vec3 vWorldDirection;\n\n\t\t\t#include \n\n\t\t\tvoid main() {\n\n\t\t\t\tvec3 direction = normalize( vWorldDirection );\n\n\t\t\t\tvec2 sampleUV = equirectUv( direction );\n\n\t\t\t\tgl_FragColor = texture2D( tEquirect, sampleUV );\n\n\t\t\t}\n\t\t" + }; + + var geometry = new BoxBufferGeometry( 5, 5, 5 ); + + var material = new ShaderMaterial( { + + name: 'CubemapFromEquirect', + + uniforms: cloneUniforms( shader.uniforms ), + vertexShader: shader.vertexShader, + fragmentShader: shader.fragmentShader, + side: BackSide, + blending: NoBlending + + } ); + + material.uniforms.tEquirect.value = texture; + + var mesh = new Mesh( geometry, material ); + + var currentMinFilter = texture.minFilter; + + // Avoid blurred poles + if ( texture.minFilter === LinearMipmapLinearFilter ) { texture.minFilter = LinearFilter; } + + var camera = new CubeCamera( 1, 10, this ); + camera.update( renderer, mesh ); + + texture.minFilter = currentMinFilter; + + mesh.geometry.dispose(); + mesh.material.dispose(); + + return this; + + }; + + function DataTexture( data, width, height, format, type, mapping, wrapS, wrapT, magFilter, minFilter, anisotropy, encoding ) { + + Texture.call( this, null, mapping, wrapS, wrapT, magFilter, minFilter, format, type, anisotropy, encoding ); + + this.image = { data: data || null, width: width || 1, height: height || 1 }; + + this.magFilter = magFilter !== undefined ? magFilter : NearestFilter; + this.minFilter = minFilter !== undefined ? minFilter : NearestFilter; + + this.generateMipmaps = false; + this.flipY = false; + this.unpackAlignment = 1; + + this.needsUpdate = true; + + } + + DataTexture.prototype = Object.create( Texture.prototype ); + DataTexture.prototype.constructor = DataTexture; + + DataTexture.prototype.isDataTexture = true; + + var _sphere$1 = new Sphere(); + var _vector$5 = new Vector3(); + + var Frustum = function Frustum( p0, p1, p2, p3, p4, p5 ) { + + this.planes = [ + + ( p0 !== undefined ) ? p0 : new Plane(), + ( p1 !== undefined ) ? p1 : new Plane(), + ( p2 !== undefined ) ? p2 : new Plane(), + ( p3 !== undefined ) ? p3 : new Plane(), + ( p4 !== undefined ) ? p4 : new Plane(), + ( p5 !== undefined ) ? p5 : new Plane() + + ]; + + }; + + Frustum.prototype.set = function set ( p0, p1, p2, p3, p4, p5 ) { + + var planes = this.planes; + + planes[ 0 ].copy( p0 ); + planes[ 1 ].copy( p1 ); + planes[ 2 ].copy( p2 ); + planes[ 3 ].copy( p3 ); + planes[ 4 ].copy( p4 ); + planes[ 5 ].copy( p5 ); + + return this; + + }; + + Frustum.prototype.clone = function clone () { + + return new this.constructor().copy( this ); + + }; + + Frustum.prototype.copy = function copy ( frustum ) { + + var planes = this.planes; + + for ( var i = 0; i < 6; i ++ ) { + + planes[ i ].copy( frustum.planes[ i ] ); + + } + + return this; + + }; + + Frustum.prototype.setFromProjectionMatrix = function setFromProjectionMatrix ( m ) { + + var planes = this.planes; + var me = m.elements; + var me0 = me[ 0 ], me1 = me[ 1 ], me2 = me[ 2 ], me3 = me[ 3 ]; + var me4 = me[ 4 ], me5 = me[ 5 ], me6 = me[ 6 ], me7 = me[ 7 ]; + var me8 = me[ 8 ], me9 = me[ 9 ], me10 = me[ 10 ], me11 = me[ 11 ]; + var me12 = me[ 12 ], me13 = me[ 13 ], me14 = me[ 14 ], me15 = me[ 15 ]; + + planes[ 0 ].setComponents( me3 - me0, me7 - me4, me11 - me8, me15 - me12 ).normalize(); + planes[ 1 ].setComponents( me3 + me0, me7 + me4, me11 + me8, me15 + me12 ).normalize(); + planes[ 2 ].setComponents( me3 + me1, me7 + me5, me11 + me9, me15 + me13 ).normalize(); + planes[ 3 ].setComponents( me3 - me1, me7 - me5, me11 - me9, me15 - me13 ).normalize(); + planes[ 4 ].setComponents( me3 - me2, me7 - me6, me11 - me10, me15 - me14 ).normalize(); + planes[ 5 ].setComponents( me3 + me2, me7 + me6, me11 + me10, me15 + me14 ).normalize(); + + return this; + + }; + + Frustum.prototype.intersectsObject = function intersectsObject ( object ) { + + var geometry = object.geometry; + + if ( geometry.boundingSphere === null ) { geometry.computeBoundingSphere(); } + + _sphere$1.copy( geometry.boundingSphere ).applyMatrix4( object.matrixWorld ); + + return this.intersectsSphere( _sphere$1 ); + + }; + + Frustum.prototype.intersectsSprite = function intersectsSprite ( sprite ) { + + _sphere$1.center.set( 0, 0, 0 ); + _sphere$1.radius = 0.7071067811865476; + _sphere$1.applyMatrix4( sprite.matrixWorld ); + + return this.intersectsSphere( _sphere$1 ); + + }; + + Frustum.prototype.intersectsSphere = function intersectsSphere ( sphere ) { + + var planes = this.planes; + var center = sphere.center; + var negRadius = - sphere.radius; + + for ( var i = 0; i < 6; i ++ ) { + + var distance = planes[ i ].distanceToPoint( center ); + + if ( distance < negRadius ) { + + return false; + + } + + } + + return true; + + }; + + Frustum.prototype.intersectsBox = function intersectsBox ( box ) { + + var planes = this.planes; + + for ( var i = 0; i < 6; i ++ ) { + + var plane = planes[ i ]; + + // corner at max distance + + _vector$5.x = plane.normal.x > 0 ? box.max.x : box.min.x; + _vector$5.y = plane.normal.y > 0 ? box.max.y : box.min.y; + _vector$5.z = plane.normal.z > 0 ? box.max.z : box.min.z; + + if ( plane.distanceToPoint( _vector$5 ) < 0 ) { + + return false; + + } + + } + + return true; + + }; + + Frustum.prototype.containsPoint = function containsPoint ( point ) { + + var planes = this.planes; + + for ( var i = 0; i < 6; i ++ ) { + + if ( planes[ i ].distanceToPoint( point ) < 0 ) { + + return false; + + } + + } + + return true; + + }; + + function WebGLAnimation() { + + var context = null; + var isAnimating = false; + var animationLoop = null; + var requestId = null; + + function onAnimationFrame( time, frame ) { + + animationLoop( time, frame ); + + requestId = context.requestAnimationFrame( onAnimationFrame ); + + } + + return { + + start: function () { + + if ( isAnimating === true ) { return; } + if ( animationLoop === null ) { return; } + + requestId = context.requestAnimationFrame( onAnimationFrame ); + + isAnimating = true; + + }, + + stop: function () { + + context.cancelAnimationFrame( requestId ); + + isAnimating = false; + + }, + + setAnimationLoop: function ( callback ) { + + animationLoop = callback; + + }, + + setContext: function ( value ) { + + context = value; + + } + + }; + + } + + function WebGLAttributes( gl, capabilities ) { + + var isWebGL2 = capabilities.isWebGL2; + + var buffers = new WeakMap(); + + function createBuffer( attribute, bufferType ) { + + var array = attribute.array; + var usage = attribute.usage; + + var buffer = gl.createBuffer(); + + gl.bindBuffer( bufferType, buffer ); + gl.bufferData( bufferType, array, usage ); + + attribute.onUploadCallback(); + + var type = 5126; + + if ( array instanceof Float32Array ) { + + type = 5126; + + } else if ( array instanceof Float64Array ) { + + console.warn( 'THREE.WebGLAttributes: Unsupported data buffer format: Float64Array.' ); + + } else if ( array instanceof Uint16Array ) { + + type = 5123; + + } else if ( array instanceof Int16Array ) { + + type = 5122; + + } else if ( array instanceof Uint32Array ) { + + type = 5125; + + } else if ( array instanceof Int32Array ) { + + type = 5124; + + } else if ( array instanceof Int8Array ) { + + type = 5120; + + } else if ( array instanceof Uint8Array ) { + + type = 5121; + + } + + return { + buffer: buffer, + type: type, + bytesPerElement: array.BYTES_PER_ELEMENT, + version: attribute.version + }; + + } + + function updateBuffer( buffer, attribute, bufferType ) { + + var array = attribute.array; + var updateRange = attribute.updateRange; + + gl.bindBuffer( bufferType, buffer ); + + if ( updateRange.count === - 1 ) { + + // Not using update ranges + + gl.bufferSubData( bufferType, 0, array ); + + } else { + + if ( isWebGL2 ) { + + gl.bufferSubData( bufferType, updateRange.offset * array.BYTES_PER_ELEMENT, + array, updateRange.offset, updateRange.count ); + + } else { + + gl.bufferSubData( bufferType, updateRange.offset * array.BYTES_PER_ELEMENT, + array.subarray( updateRange.offset, updateRange.offset + updateRange.count ) ); + + } + + updateRange.count = - 1; // reset range + + } + + } + + // + + function get( attribute ) { + + if ( attribute.isInterleavedBufferAttribute ) { attribute = attribute.data; } + + return buffers.get( attribute ); + + } + + function remove( attribute ) { + + if ( attribute.isInterleavedBufferAttribute ) { attribute = attribute.data; } + + var data = buffers.get( attribute ); + + if ( data ) { + + gl.deleteBuffer( data.buffer ); + + buffers.delete( attribute ); + + } + + } + + function update( attribute, bufferType ) { + + if ( attribute.isGLBufferAttribute ) { + + var cached = buffers.get( attribute ); + + if ( ! cached || cached.version < attribute.version ) { + + buffers.set( attribute, { + buffer: attribute.buffer, + type: attribute.type, + bytesPerElement: attribute.elementSize, + version: attribute.version + } ); + + } + + return; + + } + + if ( attribute.isInterleavedBufferAttribute ) { attribute = attribute.data; } + + var data = buffers.get( attribute ); + + if ( data === undefined ) { + + buffers.set( attribute, createBuffer( attribute, bufferType ) ); + + } else if ( data.version < attribute.version ) { + + updateBuffer( data.buffer, attribute, bufferType ); + + data.version = attribute.version; + + } + + } + + return { + + get: get, + remove: remove, + update: update + + }; + + } + + // PlaneGeometry + + function PlaneGeometry( width, height, widthSegments, heightSegments ) { + + Geometry.call(this); + + this.type = 'PlaneGeometry'; + + this.parameters = { + width: width, + height: height, + widthSegments: widthSegments, + heightSegments: heightSegments + }; + + this.fromBufferGeometry( new PlaneBufferGeometry( width, height, widthSegments, heightSegments ) ); + this.mergeVertices(); + + } + + PlaneGeometry.prototype = Object.create( Geometry.prototype ); + PlaneGeometry.prototype.constructor = PlaneGeometry; + + // PlaneBufferGeometry + + function PlaneBufferGeometry( width, height, widthSegments, heightSegments ) { + + BufferGeometry.call(this); + this.type = 'PlaneBufferGeometry'; + + this.parameters = { + width: width, + height: height, + widthSegments: widthSegments, + heightSegments: heightSegments + }; + + width = width || 1; + height = height || 1; + + var width_half = width / 2; + var height_half = height / 2; + + var gridX = Math.floor( widthSegments ) || 1; + var gridY = Math.floor( heightSegments ) || 1; + + var gridX1 = gridX + 1; + var gridY1 = gridY + 1; + + var segment_width = width / gridX; + var segment_height = height / gridY; + + // buffers + + var indices = []; + var vertices = []; + var normals = []; + var uvs = []; + + // generate vertices, normals and uvs + + for ( var iy = 0; iy < gridY1; iy ++ ) { + + var y = iy * segment_height - height_half; + + for ( var ix = 0; ix < gridX1; ix ++ ) { + + var x = ix * segment_width - width_half; + + vertices.push( x, - y, 0 ); + + normals.push( 0, 0, 1 ); + + uvs.push( ix / gridX ); + uvs.push( 1 - ( iy / gridY ) ); + + } + + } + + // indices + + for ( var iy$1 = 0; iy$1 < gridY; iy$1 ++ ) { + + for ( var ix$1 = 0; ix$1 < gridX; ix$1 ++ ) { + + var a = ix$1 + gridX1 * iy$1; + var b = ix$1 + gridX1 * ( iy$1 + 1 ); + var c = ( ix$1 + 1 ) + gridX1 * ( iy$1 + 1 ); + var d = ( ix$1 + 1 ) + gridX1 * iy$1; + + // faces + + indices.push( a, b, d ); + indices.push( b, c, d ); + + } + + } + + // build geometry + + this.setIndex( indices ); + this.setAttribute( 'position', new Float32BufferAttribute( vertices, 3 ) ); + this.setAttribute( 'normal', new Float32BufferAttribute( normals, 3 ) ); + this.setAttribute( 'uv', new Float32BufferAttribute( uvs, 2 ) ); + + } + + PlaneBufferGeometry.prototype = Object.create( BufferGeometry.prototype ); + PlaneBufferGeometry.prototype.constructor = PlaneBufferGeometry; + + var alphamap_fragment = "#ifdef USE_ALPHAMAP\n\tdiffuseColor.a *= texture2D( alphaMap, vUv ).g;\n#endif"; + + var alphamap_pars_fragment = "#ifdef USE_ALPHAMAP\n\tuniform sampler2D alphaMap;\n#endif"; + + var alphatest_fragment = "#ifdef ALPHATEST\n\tif ( diffuseColor.a < ALPHATEST ) discard;\n#endif"; + + var aomap_fragment = "#ifdef USE_AOMAP\n\tfloat ambientOcclusion = ( texture2D( aoMap, vUv2 ).r - 1.0 ) * aoMapIntensity + 1.0;\n\treflectedLight.indirectDiffuse *= ambientOcclusion;\n\t#if defined( USE_ENVMAP ) && defined( STANDARD )\n\t\tfloat dotNV = saturate( dot( geometry.normal, geometry.viewDir ) );\n\t\treflectedLight.indirectSpecular *= computeSpecularOcclusion( dotNV, ambientOcclusion, material.specularRoughness );\n\t#endif\n#endif"; + + var aomap_pars_fragment = "#ifdef USE_AOMAP\n\tuniform sampler2D aoMap;\n\tuniform float aoMapIntensity;\n#endif"; + + var begin_vertex = "vec3 transformed = vec3( position );"; + + var beginnormal_vertex = "vec3 objectNormal = vec3( normal );\n#ifdef USE_TANGENT\n\tvec3 objectTangent = vec3( tangent.xyz );\n#endif"; + + var bsdfs = "vec2 integrateSpecularBRDF( const in float dotNV, const in float roughness ) {\n\tconst vec4 c0 = vec4( - 1, - 0.0275, - 0.572, 0.022 );\n\tconst vec4 c1 = vec4( 1, 0.0425, 1.04, - 0.04 );\n\tvec4 r = roughness * c0 + c1;\n\tfloat a004 = min( r.x * r.x, exp2( - 9.28 * dotNV ) ) * r.x + r.y;\n\treturn vec2( -1.04, 1.04 ) * a004 + r.zw;\n}\nfloat punctualLightIntensityToIrradianceFactor( const in float lightDistance, const in float cutoffDistance, const in float decayExponent ) {\n#if defined ( PHYSICALLY_CORRECT_LIGHTS )\n\tfloat distanceFalloff = 1.0 / max( pow( lightDistance, decayExponent ), 0.01 );\n\tif( cutoffDistance > 0.0 ) {\n\t\tdistanceFalloff *= pow2( saturate( 1.0 - pow4( lightDistance / cutoffDistance ) ) );\n\t}\n\treturn distanceFalloff;\n#else\n\tif( cutoffDistance > 0.0 && decayExponent > 0.0 ) {\n\t\treturn pow( saturate( -lightDistance / cutoffDistance + 1.0 ), decayExponent );\n\t}\n\treturn 1.0;\n#endif\n}\nvec3 BRDF_Diffuse_Lambert( const in vec3 diffuseColor ) {\n\treturn RECIPROCAL_PI * diffuseColor;\n}\nvec3 F_Schlick( const in vec3 specularColor, const in float dotLH ) {\n\tfloat fresnel = exp2( ( -5.55473 * dotLH - 6.98316 ) * dotLH );\n\treturn ( 1.0 - specularColor ) * fresnel + specularColor;\n}\nvec3 F_Schlick_RoughnessDependent( const in vec3 F0, const in float dotNV, const in float roughness ) {\n\tfloat fresnel = exp2( ( -5.55473 * dotNV - 6.98316 ) * dotNV );\n\tvec3 Fr = max( vec3( 1.0 - roughness ), F0 ) - F0;\n\treturn Fr * fresnel + F0;\n}\nfloat G_GGX_Smith( const in float alpha, const in float dotNL, const in float dotNV ) {\n\tfloat a2 = pow2( alpha );\n\tfloat gl = dotNL + sqrt( a2 + ( 1.0 - a2 ) * pow2( dotNL ) );\n\tfloat gv = dotNV + sqrt( a2 + ( 1.0 - a2 ) * pow2( dotNV ) );\n\treturn 1.0 / ( gl * gv );\n}\nfloat G_GGX_SmithCorrelated( const in float alpha, const in float dotNL, const in float dotNV ) {\n\tfloat a2 = pow2( alpha );\n\tfloat gv = dotNL * sqrt( a2 + ( 1.0 - a2 ) * pow2( dotNV ) );\n\tfloat gl = dotNV * sqrt( a2 + ( 1.0 - a2 ) * pow2( dotNL ) );\n\treturn 0.5 / max( gv + gl, EPSILON );\n}\nfloat D_GGX( const in float alpha, const in float dotNH ) {\n\tfloat a2 = pow2( alpha );\n\tfloat denom = pow2( dotNH ) * ( a2 - 1.0 ) + 1.0;\n\treturn RECIPROCAL_PI * a2 / pow2( denom );\n}\nvec3 BRDF_Specular_GGX( const in IncidentLight incidentLight, const in vec3 viewDir, const in vec3 normal, const in vec3 specularColor, const in float roughness ) {\n\tfloat alpha = pow2( roughness );\n\tvec3 halfDir = normalize( incidentLight.direction + viewDir );\n\tfloat dotNL = saturate( dot( normal, incidentLight.direction ) );\n\tfloat dotNV = saturate( dot( normal, viewDir ) );\n\tfloat dotNH = saturate( dot( normal, halfDir ) );\n\tfloat dotLH = saturate( dot( incidentLight.direction, halfDir ) );\n\tvec3 F = F_Schlick( specularColor, dotLH );\n\tfloat G = G_GGX_SmithCorrelated( alpha, dotNL, dotNV );\n\tfloat D = D_GGX( alpha, dotNH );\n\treturn F * ( G * D );\n}\nvec2 LTC_Uv( const in vec3 N, const in vec3 V, const in float roughness ) {\n\tconst float LUT_SIZE = 64.0;\n\tconst float LUT_SCALE = ( LUT_SIZE - 1.0 ) / LUT_SIZE;\n\tconst float LUT_BIAS = 0.5 / LUT_SIZE;\n\tfloat dotNV = saturate( dot( N, V ) );\n\tvec2 uv = vec2( roughness, sqrt( 1.0 - dotNV ) );\n\tuv = uv * LUT_SCALE + LUT_BIAS;\n\treturn uv;\n}\nfloat LTC_ClippedSphereFormFactor( const in vec3 f ) {\n\tfloat l = length( f );\n\treturn max( ( l * l + f.z ) / ( l + 1.0 ), 0.0 );\n}\nvec3 LTC_EdgeVectorFormFactor( const in vec3 v1, const in vec3 v2 ) {\n\tfloat x = dot( v1, v2 );\n\tfloat y = abs( x );\n\tfloat a = 0.8543985 + ( 0.4965155 + 0.0145206 * y ) * y;\n\tfloat b = 3.4175940 + ( 4.1616724 + y ) * y;\n\tfloat v = a / b;\n\tfloat theta_sintheta = ( x > 0.0 ) ? v : 0.5 * inversesqrt( max( 1.0 - x * x, 1e-7 ) ) - v;\n\treturn cross( v1, v2 ) * theta_sintheta;\n}\nvec3 LTC_Evaluate( const in vec3 N, const in vec3 V, const in vec3 P, const in mat3 mInv, const in vec3 rectCoords[ 4 ] ) {\n\tvec3 v1 = rectCoords[ 1 ] - rectCoords[ 0 ];\n\tvec3 v2 = rectCoords[ 3 ] - rectCoords[ 0 ];\n\tvec3 lightNormal = cross( v1, v2 );\n\tif( dot( lightNormal, P - rectCoords[ 0 ] ) < 0.0 ) return vec3( 0.0 );\n\tvec3 T1, T2;\n\tT1 = normalize( V - N * dot( V, N ) );\n\tT2 = - cross( N, T1 );\n\tmat3 mat = mInv * transposeMat3( mat3( T1, T2, N ) );\n\tvec3 coords[ 4 ];\n\tcoords[ 0 ] = mat * ( rectCoords[ 0 ] - P );\n\tcoords[ 1 ] = mat * ( rectCoords[ 1 ] - P );\n\tcoords[ 2 ] = mat * ( rectCoords[ 2 ] - P );\n\tcoords[ 3 ] = mat * ( rectCoords[ 3 ] - P );\n\tcoords[ 0 ] = normalize( coords[ 0 ] );\n\tcoords[ 1 ] = normalize( coords[ 1 ] );\n\tcoords[ 2 ] = normalize( coords[ 2 ] );\n\tcoords[ 3 ] = normalize( coords[ 3 ] );\n\tvec3 vectorFormFactor = vec3( 0.0 );\n\tvectorFormFactor += LTC_EdgeVectorFormFactor( coords[ 0 ], coords[ 1 ] );\n\tvectorFormFactor += LTC_EdgeVectorFormFactor( coords[ 1 ], coords[ 2 ] );\n\tvectorFormFactor += LTC_EdgeVectorFormFactor( coords[ 2 ], coords[ 3 ] );\n\tvectorFormFactor += LTC_EdgeVectorFormFactor( coords[ 3 ], coords[ 0 ] );\n\tfloat result = LTC_ClippedSphereFormFactor( vectorFormFactor );\n\treturn vec3( result );\n}\nvec3 BRDF_Specular_GGX_Environment( const in vec3 viewDir, const in vec3 normal, const in vec3 specularColor, const in float roughness ) {\n\tfloat dotNV = saturate( dot( normal, viewDir ) );\n\tvec2 brdf = integrateSpecularBRDF( dotNV, roughness );\n\treturn specularColor * brdf.x + brdf.y;\n}\nvoid BRDF_Specular_Multiscattering_Environment( const in GeometricContext geometry, const in vec3 specularColor, const in float roughness, inout vec3 singleScatter, inout vec3 multiScatter ) {\n\tfloat dotNV = saturate( dot( geometry.normal, geometry.viewDir ) );\n\tvec3 F = F_Schlick_RoughnessDependent( specularColor, dotNV, roughness );\n\tvec2 brdf = integrateSpecularBRDF( dotNV, roughness );\n\tvec3 FssEss = F * brdf.x + brdf.y;\n\tfloat Ess = brdf.x + brdf.y;\n\tfloat Ems = 1.0 - Ess;\n\tvec3 Favg = specularColor + ( 1.0 - specularColor ) * 0.047619;\tvec3 Fms = FssEss * Favg / ( 1.0 - Ems * Favg );\n\tsingleScatter += FssEss;\n\tmultiScatter += Fms * Ems;\n}\nfloat G_BlinnPhong_Implicit( ) {\n\treturn 0.25;\n}\nfloat D_BlinnPhong( const in float shininess, const in float dotNH ) {\n\treturn RECIPROCAL_PI * ( shininess * 0.5 + 1.0 ) * pow( dotNH, shininess );\n}\nvec3 BRDF_Specular_BlinnPhong( const in IncidentLight incidentLight, const in GeometricContext geometry, const in vec3 specularColor, const in float shininess ) {\n\tvec3 halfDir = normalize( incidentLight.direction + geometry.viewDir );\n\tfloat dotNH = saturate( dot( geometry.normal, halfDir ) );\n\tfloat dotLH = saturate( dot( incidentLight.direction, halfDir ) );\n\tvec3 F = F_Schlick( specularColor, dotLH );\n\tfloat G = G_BlinnPhong_Implicit( );\n\tfloat D = D_BlinnPhong( shininess, dotNH );\n\treturn F * ( G * D );\n}\nfloat GGXRoughnessToBlinnExponent( const in float ggxRoughness ) {\n\treturn ( 2.0 / pow2( ggxRoughness + 0.0001 ) - 2.0 );\n}\nfloat BlinnExponentToGGXRoughness( const in float blinnExponent ) {\n\treturn sqrt( 2.0 / ( blinnExponent + 2.0 ) );\n}\n#if defined( USE_SHEEN )\nfloat D_Charlie(float roughness, float NoH) {\n\tfloat invAlpha = 1.0 / roughness;\n\tfloat cos2h = NoH * NoH;\n\tfloat sin2h = max(1.0 - cos2h, 0.0078125);\treturn (2.0 + invAlpha) * pow(sin2h, invAlpha * 0.5) / (2.0 * PI);\n}\nfloat V_Neubelt(float NoV, float NoL) {\n\treturn saturate(1.0 / (4.0 * (NoL + NoV - NoL * NoV)));\n}\nvec3 BRDF_Specular_Sheen( const in float roughness, const in vec3 L, const in GeometricContext geometry, vec3 specularColor ) {\n\tvec3 N = geometry.normal;\n\tvec3 V = geometry.viewDir;\n\tvec3 H = normalize( V + L );\n\tfloat dotNH = saturate( dot( N, H ) );\n\treturn specularColor * D_Charlie( roughness, dotNH ) * V_Neubelt( dot(N, V), dot(N, L) );\n}\n#endif"; + + var bumpmap_pars_fragment = "#ifdef USE_BUMPMAP\n\tuniform sampler2D bumpMap;\n\tuniform float bumpScale;\n\tvec2 dHdxy_fwd() {\n\t\tvec2 dSTdx = dFdx( vUv );\n\t\tvec2 dSTdy = dFdy( vUv );\n\t\tfloat Hll = bumpScale * texture2D( bumpMap, vUv ).x;\n\t\tfloat dBx = bumpScale * texture2D( bumpMap, vUv + dSTdx ).x - Hll;\n\t\tfloat dBy = bumpScale * texture2D( bumpMap, vUv + dSTdy ).x - Hll;\n\t\treturn vec2( dBx, dBy );\n\t}\n\tvec3 perturbNormalArb( vec3 surf_pos, vec3 surf_norm, vec2 dHdxy ) {\n\t\tvec3 vSigmaX = vec3( dFdx( surf_pos.x ), dFdx( surf_pos.y ), dFdx( surf_pos.z ) );\n\t\tvec3 vSigmaY = vec3( dFdy( surf_pos.x ), dFdy( surf_pos.y ), dFdy( surf_pos.z ) );\n\t\tvec3 vN = surf_norm;\n\t\tvec3 R1 = cross( vSigmaY, vN );\n\t\tvec3 R2 = cross( vN, vSigmaX );\n\t\tfloat fDet = dot( vSigmaX, R1 );\n\t\tfDet *= ( float( gl_FrontFacing ) * 2.0 - 1.0 );\n\t\tvec3 vGrad = sign( fDet ) * ( dHdxy.x * R1 + dHdxy.y * R2 );\n\t\treturn normalize( abs( fDet ) * surf_norm - vGrad );\n\t}\n#endif"; + + var clipping_planes_fragment = "#if NUM_CLIPPING_PLANES > 0\n\tvec4 plane;\n\t#pragma unroll_loop_start\n\tfor ( int i = 0; i < UNION_CLIPPING_PLANES; i ++ ) {\n\t\tplane = clippingPlanes[ i ];\n\t\tif ( dot( vClipPosition, plane.xyz ) > plane.w ) discard;\n\t}\n\t#pragma unroll_loop_end\n\t#if UNION_CLIPPING_PLANES < NUM_CLIPPING_PLANES\n\t\tbool clipped = true;\n\t\t#pragma unroll_loop_start\n\t\tfor ( int i = UNION_CLIPPING_PLANES; i < NUM_CLIPPING_PLANES; i ++ ) {\n\t\t\tplane = clippingPlanes[ i ];\n\t\t\tclipped = ( dot( vClipPosition, plane.xyz ) > plane.w ) && clipped;\n\t\t}\n\t\t#pragma unroll_loop_end\n\t\tif ( clipped ) discard;\n\t#endif\n#endif"; + + var clipping_planes_pars_fragment = "#if NUM_CLIPPING_PLANES > 0\n\tvarying vec3 vClipPosition;\n\tuniform vec4 clippingPlanes[ NUM_CLIPPING_PLANES ];\n#endif"; + + var clipping_planes_pars_vertex = "#if NUM_CLIPPING_PLANES > 0\n\tvarying vec3 vClipPosition;\n#endif"; + + var clipping_planes_vertex = "#if NUM_CLIPPING_PLANES > 0\n\tvClipPosition = - mvPosition.xyz;\n#endif"; + + var color_fragment = "#ifdef USE_COLOR\n\tdiffuseColor.rgb *= vColor;\n#endif"; + + var color_pars_fragment = "#ifdef USE_COLOR\n\tvarying vec3 vColor;\n#endif"; + + var color_pars_vertex = "#if defined( USE_COLOR ) || defined( USE_INSTANCING_COLOR )\n\tvarying vec3 vColor;\n#endif"; + + var color_vertex = "#if defined( USE_COLOR ) || defined( USE_INSTANCING_COLOR )\n\tvColor = vec3( 1.0 );\n#endif\n#ifdef USE_COLOR\n\tvColor.xyz *= color.xyz;\n#endif\n#ifdef USE_INSTANCING_COLOR\n\tvColor.xyz *= instanceColor.xyz;\n#endif"; + + var common = "#define PI 3.141592653589793\n#define PI2 6.283185307179586\n#define PI_HALF 1.5707963267948966\n#define RECIPROCAL_PI 0.3183098861837907\n#define RECIPROCAL_PI2 0.15915494309189535\n#define EPSILON 1e-6\n#ifndef saturate\n#define saturate(a) clamp( a, 0.0, 1.0 )\n#endif\n#define whiteComplement(a) ( 1.0 - saturate( a ) )\nfloat pow2( const in float x ) { return x*x; }\nfloat pow3( const in float x ) { return x*x*x; }\nfloat pow4( const in float x ) { float x2 = x*x; return x2*x2; }\nfloat average( const in vec3 color ) { return dot( color, vec3( 0.3333 ) ); }\nhighp float rand( const in vec2 uv ) {\n\tconst highp float a = 12.9898, b = 78.233, c = 43758.5453;\n\thighp float dt = dot( uv.xy, vec2( a,b ) ), sn = mod( dt, PI );\n\treturn fract(sin(sn) * c);\n}\n#ifdef HIGH_PRECISION\n\tfloat precisionSafeLength( vec3 v ) { return length( v ); }\n#else\n\tfloat max3( vec3 v ) { return max( max( v.x, v.y ), v.z ); }\n\tfloat precisionSafeLength( vec3 v ) {\n\t\tfloat maxComponent = max3( abs( v ) );\n\t\treturn length( v / maxComponent ) * maxComponent;\n\t}\n#endif\nstruct IncidentLight {\n\tvec3 color;\n\tvec3 direction;\n\tbool visible;\n};\nstruct ReflectedLight {\n\tvec3 directDiffuse;\n\tvec3 directSpecular;\n\tvec3 indirectDiffuse;\n\tvec3 indirectSpecular;\n};\nstruct GeometricContext {\n\tvec3 position;\n\tvec3 normal;\n\tvec3 viewDir;\n#ifdef CLEARCOAT\n\tvec3 clearcoatNormal;\n#endif\n};\nvec3 transformDirection( in vec3 dir, in mat4 matrix ) {\n\treturn normalize( ( matrix * vec4( dir, 0.0 ) ).xyz );\n}\nvec3 inverseTransformDirection( in vec3 dir, in mat4 matrix ) {\n\treturn normalize( ( vec4( dir, 0.0 ) * matrix ).xyz );\n}\nvec3 projectOnPlane(in vec3 point, in vec3 pointOnPlane, in vec3 planeNormal ) {\n\tfloat distance = dot( planeNormal, point - pointOnPlane );\n\treturn - distance * planeNormal + point;\n}\nfloat sideOfPlane( in vec3 point, in vec3 pointOnPlane, in vec3 planeNormal ) {\n\treturn sign( dot( point - pointOnPlane, planeNormal ) );\n}\nvec3 linePlaneIntersect( in vec3 pointOnLine, in vec3 lineDirection, in vec3 pointOnPlane, in vec3 planeNormal ) {\n\treturn lineDirection * ( dot( planeNormal, pointOnPlane - pointOnLine ) / dot( planeNormal, lineDirection ) ) + pointOnLine;\n}\nmat3 transposeMat3( const in mat3 m ) {\n\tmat3 tmp;\n\ttmp[ 0 ] = vec3( m[ 0 ].x, m[ 1 ].x, m[ 2 ].x );\n\ttmp[ 1 ] = vec3( m[ 0 ].y, m[ 1 ].y, m[ 2 ].y );\n\ttmp[ 2 ] = vec3( m[ 0 ].z, m[ 1 ].z, m[ 2 ].z );\n\treturn tmp;\n}\nfloat linearToRelativeLuminance( const in vec3 color ) {\n\tvec3 weights = vec3( 0.2126, 0.7152, 0.0722 );\n\treturn dot( weights, color.rgb );\n}\nbool isPerspectiveMatrix( mat4 m ) {\n\treturn m[ 2 ][ 3 ] == - 1.0;\n}\nvec2 equirectUv( in vec3 dir ) {\n\tfloat u = atan( dir.z, dir.x ) * RECIPROCAL_PI2 + 0.5;\n\tfloat v = asin( clamp( dir.y, - 1.0, 1.0 ) ) * RECIPROCAL_PI + 0.5;\n\treturn vec2( u, v );\n}"; + + var cube_uv_reflection_fragment = "#ifdef ENVMAP_TYPE_CUBE_UV\n\t#define cubeUV_maxMipLevel 8.0\n\t#define cubeUV_minMipLevel 4.0\n\t#define cubeUV_maxTileSize 256.0\n\t#define cubeUV_minTileSize 16.0\n\tfloat getFace( vec3 direction ) {\n\t\tvec3 absDirection = abs( direction );\n\t\tfloat face = - 1.0;\n\t\tif ( absDirection.x > absDirection.z ) {\n\t\t\tif ( absDirection.x > absDirection.y )\n\t\t\t\tface = direction.x > 0.0 ? 0.0 : 3.0;\n\t\t\telse\n\t\t\t\tface = direction.y > 0.0 ? 1.0 : 4.0;\n\t\t} else {\n\t\t\tif ( absDirection.z > absDirection.y )\n\t\t\t\tface = direction.z > 0.0 ? 2.0 : 5.0;\n\t\t\telse\n\t\t\t\tface = direction.y > 0.0 ? 1.0 : 4.0;\n\t\t}\n\t\treturn face;\n\t}\n\tvec2 getUV( vec3 direction, float face ) {\n\t\tvec2 uv;\n\t\tif ( face == 0.0 ) {\n\t\t\tuv = vec2( direction.z, direction.y ) / abs( direction.x );\n\t\t} else if ( face == 1.0 ) {\n\t\t\tuv = vec2( - direction.x, - direction.z ) / abs( direction.y );\n\t\t} else if ( face == 2.0 ) {\n\t\t\tuv = vec2( - direction.x, direction.y ) / abs( direction.z );\n\t\t} else if ( face == 3.0 ) {\n\t\t\tuv = vec2( - direction.z, direction.y ) / abs( direction.x );\n\t\t} else if ( face == 4.0 ) {\n\t\t\tuv = vec2( - direction.x, direction.z ) / abs( direction.y );\n\t\t} else {\n\t\t\tuv = vec2( direction.x, direction.y ) / abs( direction.z );\n\t\t}\n\t\treturn 0.5 * ( uv + 1.0 );\n\t}\n\tvec3 bilinearCubeUV( sampler2D envMap, vec3 direction, float mipInt ) {\n\t\tfloat face = getFace( direction );\n\t\tfloat filterInt = max( cubeUV_minMipLevel - mipInt, 0.0 );\n\t\tmipInt = max( mipInt, cubeUV_minMipLevel );\n\t\tfloat faceSize = exp2( mipInt );\n\t\tfloat texelSize = 1.0 / ( 3.0 * cubeUV_maxTileSize );\n\t\tvec2 uv = getUV( direction, face ) * ( faceSize - 1.0 );\n\t\tvec2 f = fract( uv );\n\t\tuv += 0.5 - f;\n\t\tif ( face > 2.0 ) {\n\t\t\tuv.y += faceSize;\n\t\t\tface -= 3.0;\n\t\t}\n\t\tuv.x += face * faceSize;\n\t\tif ( mipInt < cubeUV_maxMipLevel ) {\n\t\t\tuv.y += 2.0 * cubeUV_maxTileSize;\n\t\t}\n\t\tuv.y += filterInt * 2.0 * cubeUV_minTileSize;\n\t\tuv.x += 3.0 * max( 0.0, cubeUV_maxTileSize - 2.0 * faceSize );\n\t\tuv *= texelSize;\n\t\tvec3 tl = envMapTexelToLinear( texture2D( envMap, uv ) ).rgb;\n\t\tuv.x += texelSize;\n\t\tvec3 tr = envMapTexelToLinear( texture2D( envMap, uv ) ).rgb;\n\t\tuv.y += texelSize;\n\t\tvec3 br = envMapTexelToLinear( texture2D( envMap, uv ) ).rgb;\n\t\tuv.x -= texelSize;\n\t\tvec3 bl = envMapTexelToLinear( texture2D( envMap, uv ) ).rgb;\n\t\tvec3 tm = mix( tl, tr, f.x );\n\t\tvec3 bm = mix( bl, br, f.x );\n\t\treturn mix( tm, bm, f.y );\n\t}\n\t#define r0 1.0\n\t#define v0 0.339\n\t#define m0 - 2.0\n\t#define r1 0.8\n\t#define v1 0.276\n\t#define m1 - 1.0\n\t#define r4 0.4\n\t#define v4 0.046\n\t#define m4 2.0\n\t#define r5 0.305\n\t#define v5 0.016\n\t#define m5 3.0\n\t#define r6 0.21\n\t#define v6 0.0038\n\t#define m6 4.0\n\tfloat roughnessToMip( float roughness ) {\n\t\tfloat mip = 0.0;\n\t\tif ( roughness >= r1 ) {\n\t\t\tmip = ( r0 - roughness ) * ( m1 - m0 ) / ( r0 - r1 ) + m0;\n\t\t} else if ( roughness >= r4 ) {\n\t\t\tmip = ( r1 - roughness ) * ( m4 - m1 ) / ( r1 - r4 ) + m1;\n\t\t} else if ( roughness >= r5 ) {\n\t\t\tmip = ( r4 - roughness ) * ( m5 - m4 ) / ( r4 - r5 ) + m4;\n\t\t} else if ( roughness >= r6 ) {\n\t\t\tmip = ( r5 - roughness ) * ( m6 - m5 ) / ( r5 - r6 ) + m5;\n\t\t} else {\n\t\t\tmip = - 2.0 * log2( 1.16 * roughness );\t\t}\n\t\treturn mip;\n\t}\n\tvec4 textureCubeUV( sampler2D envMap, vec3 sampleDir, float roughness ) {\n\t\tfloat mip = clamp( roughnessToMip( roughness ), m0, cubeUV_maxMipLevel );\n\t\tfloat mipF = fract( mip );\n\t\tfloat mipInt = floor( mip );\n\t\tvec3 color0 = bilinearCubeUV( envMap, sampleDir, mipInt );\n\t\tif ( mipF == 0.0 ) {\n\t\t\treturn vec4( color0, 1.0 );\n\t\t} else {\n\t\t\tvec3 color1 = bilinearCubeUV( envMap, sampleDir, mipInt + 1.0 );\n\t\t\treturn vec4( mix( color0, color1, mipF ), 1.0 );\n\t\t}\n\t}\n#endif"; + + var defaultnormal_vertex = "vec3 transformedNormal = objectNormal;\n#ifdef USE_INSTANCING\n\tmat3 m = mat3( instanceMatrix );\n\ttransformedNormal /= vec3( dot( m[ 0 ], m[ 0 ] ), dot( m[ 1 ], m[ 1 ] ), dot( m[ 2 ], m[ 2 ] ) );\n\ttransformedNormal = m * transformedNormal;\n#endif\ntransformedNormal = normalMatrix * transformedNormal;\n#ifdef FLIP_SIDED\n\ttransformedNormal = - transformedNormal;\n#endif\n#ifdef USE_TANGENT\n\tvec3 transformedTangent = ( modelViewMatrix * vec4( objectTangent, 0.0 ) ).xyz;\n\t#ifdef FLIP_SIDED\n\t\ttransformedTangent = - transformedTangent;\n\t#endif\n#endif"; + + var displacementmap_pars_vertex = "#ifdef USE_DISPLACEMENTMAP\n\tuniform sampler2D displacementMap;\n\tuniform float displacementScale;\n\tuniform float displacementBias;\n#endif"; + + var displacementmap_vertex = "#ifdef USE_DISPLACEMENTMAP\n\ttransformed += normalize( objectNormal ) * ( texture2D( displacementMap, vUv ).x * displacementScale + displacementBias );\n#endif"; + + var emissivemap_fragment = "#ifdef USE_EMISSIVEMAP\n\tvec4 emissiveColor = texture2D( emissiveMap, vUv );\n\temissiveColor.rgb = emissiveMapTexelToLinear( emissiveColor ).rgb;\n\ttotalEmissiveRadiance *= emissiveColor.rgb;\n#endif"; + + var emissivemap_pars_fragment = "#ifdef USE_EMISSIVEMAP\n\tuniform sampler2D emissiveMap;\n#endif"; + + var encodings_fragment = "gl_FragColor = linearToOutputTexel( gl_FragColor );"; + + var encodings_pars_fragment = "\nvec4 LinearToLinear( in vec4 value ) {\n\treturn value;\n}\nvec4 GammaToLinear( in vec4 value, in float gammaFactor ) {\n\treturn vec4( pow( value.rgb, vec3( gammaFactor ) ), value.a );\n}\nvec4 LinearToGamma( in vec4 value, in float gammaFactor ) {\n\treturn vec4( pow( value.rgb, vec3( 1.0 / gammaFactor ) ), value.a );\n}\nvec4 sRGBToLinear( in vec4 value ) {\n\treturn vec4( mix( pow( value.rgb * 0.9478672986 + vec3( 0.0521327014 ), vec3( 2.4 ) ), value.rgb * 0.0773993808, vec3( lessThanEqual( value.rgb, vec3( 0.04045 ) ) ) ), value.a );\n}\nvec4 LinearTosRGB( in vec4 value ) {\n\treturn vec4( mix( pow( value.rgb, vec3( 0.41666 ) ) * 1.055 - vec3( 0.055 ), value.rgb * 12.92, vec3( lessThanEqual( value.rgb, vec3( 0.0031308 ) ) ) ), value.a );\n}\nvec4 RGBEToLinear( in vec4 value ) {\n\treturn vec4( value.rgb * exp2( value.a * 255.0 - 128.0 ), 1.0 );\n}\nvec4 LinearToRGBE( in vec4 value ) {\n\tfloat maxComponent = max( max( value.r, value.g ), value.b );\n\tfloat fExp = clamp( ceil( log2( maxComponent ) ), -128.0, 127.0 );\n\treturn vec4( value.rgb / exp2( fExp ), ( fExp + 128.0 ) / 255.0 );\n}\nvec4 RGBMToLinear( in vec4 value, in float maxRange ) {\n\treturn vec4( value.rgb * value.a * maxRange, 1.0 );\n}\nvec4 LinearToRGBM( in vec4 value, in float maxRange ) {\n\tfloat maxRGB = max( value.r, max( value.g, value.b ) );\n\tfloat M = clamp( maxRGB / maxRange, 0.0, 1.0 );\n\tM = ceil( M * 255.0 ) / 255.0;\n\treturn vec4( value.rgb / ( M * maxRange ), M );\n}\nvec4 RGBDToLinear( in vec4 value, in float maxRange ) {\n\treturn vec4( value.rgb * ( ( maxRange / 255.0 ) / value.a ), 1.0 );\n}\nvec4 LinearToRGBD( in vec4 value, in float maxRange ) {\n\tfloat maxRGB = max( value.r, max( value.g, value.b ) );\n\tfloat D = max( maxRange / maxRGB, 1.0 );\n\tD = clamp( floor( D ) / 255.0, 0.0, 1.0 );\n\treturn vec4( value.rgb * ( D * ( 255.0 / maxRange ) ), D );\n}\nconst mat3 cLogLuvM = mat3( 0.2209, 0.3390, 0.4184, 0.1138, 0.6780, 0.7319, 0.0102, 0.1130, 0.2969 );\nvec4 LinearToLogLuv( in vec4 value ) {\n\tvec3 Xp_Y_XYZp = cLogLuvM * value.rgb;\n\tXp_Y_XYZp = max( Xp_Y_XYZp, vec3( 1e-6, 1e-6, 1e-6 ) );\n\tvec4 vResult;\n\tvResult.xy = Xp_Y_XYZp.xy / Xp_Y_XYZp.z;\n\tfloat Le = 2.0 * log2(Xp_Y_XYZp.y) + 127.0;\n\tvResult.w = fract( Le );\n\tvResult.z = ( Le - ( floor( vResult.w * 255.0 ) ) / 255.0 ) / 255.0;\n\treturn vResult;\n}\nconst mat3 cLogLuvInverseM = mat3( 6.0014, -2.7008, -1.7996, -1.3320, 3.1029, -5.7721, 0.3008, -1.0882, 5.6268 );\nvec4 LogLuvToLinear( in vec4 value ) {\n\tfloat Le = value.z * 255.0 + value.w;\n\tvec3 Xp_Y_XYZp;\n\tXp_Y_XYZp.y = exp2( ( Le - 127.0 ) / 2.0 );\n\tXp_Y_XYZp.z = Xp_Y_XYZp.y / value.y;\n\tXp_Y_XYZp.x = value.x * Xp_Y_XYZp.z;\n\tvec3 vRGB = cLogLuvInverseM * Xp_Y_XYZp.rgb;\n\treturn vec4( max( vRGB, 0.0 ), 1.0 );\n}"; + + var envmap_fragment = "#ifdef USE_ENVMAP\n\t#ifdef ENV_WORLDPOS\n\t\tvec3 cameraToFrag;\n\t\tif ( isOrthographic ) {\n\t\t\tcameraToFrag = normalize( vec3( - viewMatrix[ 0 ][ 2 ], - viewMatrix[ 1 ][ 2 ], - viewMatrix[ 2 ][ 2 ] ) );\n\t\t} else {\n\t\t\tcameraToFrag = normalize( vWorldPosition - cameraPosition );\n\t\t}\n\t\tvec3 worldNormal = inverseTransformDirection( normal, viewMatrix );\n\t\t#ifdef ENVMAP_MODE_REFLECTION\n\t\t\tvec3 reflectVec = reflect( cameraToFrag, worldNormal );\n\t\t#else\n\t\t\tvec3 reflectVec = refract( cameraToFrag, worldNormal, refractionRatio );\n\t\t#endif\n\t#else\n\t\tvec3 reflectVec = vReflect;\n\t#endif\n\t#ifdef ENVMAP_TYPE_CUBE\n\t\tvec4 envColor = textureCube( envMap, vec3( flipEnvMap * reflectVec.x, reflectVec.yz ) );\n\t#elif defined( ENVMAP_TYPE_CUBE_UV )\n\t\tvec4 envColor = textureCubeUV( envMap, reflectVec, 0.0 );\n\t#else\n\t\tvec4 envColor = vec4( 0.0 );\n\t#endif\n\t#ifndef ENVMAP_TYPE_CUBE_UV\n\t\tenvColor = envMapTexelToLinear( envColor );\n\t#endif\n\t#ifdef ENVMAP_BLENDING_MULTIPLY\n\t\toutgoingLight = mix( outgoingLight, outgoingLight * envColor.xyz, specularStrength * reflectivity );\n\t#elif defined( ENVMAP_BLENDING_MIX )\n\t\toutgoingLight = mix( outgoingLight, envColor.xyz, specularStrength * reflectivity );\n\t#elif defined( ENVMAP_BLENDING_ADD )\n\t\toutgoingLight += envColor.xyz * specularStrength * reflectivity;\n\t#endif\n#endif"; + + var envmap_common_pars_fragment = "#ifdef USE_ENVMAP\n\tuniform float envMapIntensity;\n\tuniform float flipEnvMap;\n\tuniform int maxMipLevel;\n\t#ifdef ENVMAP_TYPE_CUBE\n\t\tuniform samplerCube envMap;\n\t#else\n\t\tuniform sampler2D envMap;\n\t#endif\n\t\n#endif"; + + var envmap_pars_fragment = "#ifdef USE_ENVMAP\n\tuniform float reflectivity;\n\t#if defined( USE_BUMPMAP ) || defined( USE_NORMALMAP ) || defined( PHONG )\n\t\t#define ENV_WORLDPOS\n\t#endif\n\t#ifdef ENV_WORLDPOS\n\t\tvarying vec3 vWorldPosition;\n\t\tuniform float refractionRatio;\n\t#else\n\t\tvarying vec3 vReflect;\n\t#endif\n#endif"; + + var envmap_pars_vertex = "#ifdef USE_ENVMAP\n\t#if defined( USE_BUMPMAP ) || defined( USE_NORMALMAP ) ||defined( PHONG )\n\t\t#define ENV_WORLDPOS\n\t#endif\n\t#ifdef ENV_WORLDPOS\n\t\t\n\t\tvarying vec3 vWorldPosition;\n\t#else\n\t\tvarying vec3 vReflect;\n\t\tuniform float refractionRatio;\n\t#endif\n#endif"; + + var envmap_vertex = "#ifdef USE_ENVMAP\n\t#ifdef ENV_WORLDPOS\n\t\tvWorldPosition = worldPosition.xyz;\n\t#else\n\t\tvec3 cameraToVertex;\n\t\tif ( isOrthographic ) {\n\t\t\tcameraToVertex = normalize( vec3( - viewMatrix[ 0 ][ 2 ], - viewMatrix[ 1 ][ 2 ], - viewMatrix[ 2 ][ 2 ] ) );\n\t\t} else {\n\t\t\tcameraToVertex = normalize( worldPosition.xyz - cameraPosition );\n\t\t}\n\t\tvec3 worldNormal = inverseTransformDirection( transformedNormal, viewMatrix );\n\t\t#ifdef ENVMAP_MODE_REFLECTION\n\t\t\tvReflect = reflect( cameraToVertex, worldNormal );\n\t\t#else\n\t\t\tvReflect = refract( cameraToVertex, worldNormal, refractionRatio );\n\t\t#endif\n\t#endif\n#endif"; + + var fog_vertex = "#ifdef USE_FOG\n\tfogDepth = - mvPosition.z;\n#endif"; + + var fog_pars_vertex = "#ifdef USE_FOG\n\tvarying float fogDepth;\n#endif"; + + var fog_fragment = "#ifdef USE_FOG\n\t#ifdef FOG_EXP2\n\t\tfloat fogFactor = 1.0 - exp( - fogDensity * fogDensity * fogDepth * fogDepth );\n\t#else\n\t\tfloat fogFactor = smoothstep( fogNear, fogFar, fogDepth );\n\t#endif\n\tgl_FragColor.rgb = mix( gl_FragColor.rgb, fogColor, fogFactor );\n#endif"; + + var fog_pars_fragment = "#ifdef USE_FOG\n\tuniform vec3 fogColor;\n\tvarying float fogDepth;\n\t#ifdef FOG_EXP2\n\t\tuniform float fogDensity;\n\t#else\n\t\tuniform float fogNear;\n\t\tuniform float fogFar;\n\t#endif\n#endif"; + + var gradientmap_pars_fragment = "#ifdef USE_GRADIENTMAP\n\tuniform sampler2D gradientMap;\n#endif\nvec3 getGradientIrradiance( vec3 normal, vec3 lightDirection ) {\n\tfloat dotNL = dot( normal, lightDirection );\n\tvec2 coord = vec2( dotNL * 0.5 + 0.5, 0.0 );\n\t#ifdef USE_GRADIENTMAP\n\t\treturn texture2D( gradientMap, coord ).rgb;\n\t#else\n\t\treturn ( coord.x < 0.7 ) ? vec3( 0.7 ) : vec3( 1.0 );\n\t#endif\n}"; + + var lightmap_fragment = "#ifdef USE_LIGHTMAP\n\tvec4 lightMapTexel= texture2D( lightMap, vUv2 );\n\treflectedLight.indirectDiffuse += PI * lightMapTexelToLinear( lightMapTexel ).rgb * lightMapIntensity;\n#endif"; + + var lightmap_pars_fragment = "#ifdef USE_LIGHTMAP\n\tuniform sampler2D lightMap;\n\tuniform float lightMapIntensity;\n#endif"; + + var lights_lambert_vertex = "vec3 diffuse = vec3( 1.0 );\nGeometricContext geometry;\ngeometry.position = mvPosition.xyz;\ngeometry.normal = normalize( transformedNormal );\ngeometry.viewDir = ( isOrthographic ) ? vec3( 0, 0, 1 ) : normalize( -mvPosition.xyz );\nGeometricContext backGeometry;\nbackGeometry.position = geometry.position;\nbackGeometry.normal = -geometry.normal;\nbackGeometry.viewDir = geometry.viewDir;\nvLightFront = vec3( 0.0 );\nvIndirectFront = vec3( 0.0 );\n#ifdef DOUBLE_SIDED\n\tvLightBack = vec3( 0.0 );\n\tvIndirectBack = vec3( 0.0 );\n#endif\nIncidentLight directLight;\nfloat dotNL;\nvec3 directLightColor_Diffuse;\nvIndirectFront += getAmbientLightIrradiance( ambientLightColor );\nvIndirectFront += getLightProbeIrradiance( lightProbe, geometry );\n#ifdef DOUBLE_SIDED\n\tvIndirectBack += getAmbientLightIrradiance( ambientLightColor );\n\tvIndirectBack += getLightProbeIrradiance( lightProbe, backGeometry );\n#endif\n#if NUM_POINT_LIGHTS > 0\n\t#pragma unroll_loop_start\n\tfor ( int i = 0; i < NUM_POINT_LIGHTS; i ++ ) {\n\t\tgetPointDirectLightIrradiance( pointLights[ i ], geometry, directLight );\n\t\tdotNL = dot( geometry.normal, directLight.direction );\n\t\tdirectLightColor_Diffuse = PI * directLight.color;\n\t\tvLightFront += saturate( dotNL ) * directLightColor_Diffuse;\n\t\t#ifdef DOUBLE_SIDED\n\t\t\tvLightBack += saturate( -dotNL ) * directLightColor_Diffuse;\n\t\t#endif\n\t}\n\t#pragma unroll_loop_end\n#endif\n#if NUM_SPOT_LIGHTS > 0\n\t#pragma unroll_loop_start\n\tfor ( int i = 0; i < NUM_SPOT_LIGHTS; i ++ ) {\n\t\tgetSpotDirectLightIrradiance( spotLights[ i ], geometry, directLight );\n\t\tdotNL = dot( geometry.normal, directLight.direction );\n\t\tdirectLightColor_Diffuse = PI * directLight.color;\n\t\tvLightFront += saturate( dotNL ) * directLightColor_Diffuse;\n\t\t#ifdef DOUBLE_SIDED\n\t\t\tvLightBack += saturate( -dotNL ) * directLightColor_Diffuse;\n\t\t#endif\n\t}\n\t#pragma unroll_loop_end\n#endif\n#if NUM_DIR_LIGHTS > 0\n\t#pragma unroll_loop_start\n\tfor ( int i = 0; i < NUM_DIR_LIGHTS; i ++ ) {\n\t\tgetDirectionalDirectLightIrradiance( directionalLights[ i ], geometry, directLight );\n\t\tdotNL = dot( geometry.normal, directLight.direction );\n\t\tdirectLightColor_Diffuse = PI * directLight.color;\n\t\tvLightFront += saturate( dotNL ) * directLightColor_Diffuse;\n\t\t#ifdef DOUBLE_SIDED\n\t\t\tvLightBack += saturate( -dotNL ) * directLightColor_Diffuse;\n\t\t#endif\n\t}\n\t#pragma unroll_loop_end\n#endif\n#if NUM_HEMI_LIGHTS > 0\n\t#pragma unroll_loop_start\n\tfor ( int i = 0; i < NUM_HEMI_LIGHTS; i ++ ) {\n\t\tvIndirectFront += getHemisphereLightIrradiance( hemisphereLights[ i ], geometry );\n\t\t#ifdef DOUBLE_SIDED\n\t\t\tvIndirectBack += getHemisphereLightIrradiance( hemisphereLights[ i ], backGeometry );\n\t\t#endif\n\t}\n\t#pragma unroll_loop_end\n#endif"; + + var lights_pars_begin = "uniform bool receiveShadow;\nuniform vec3 ambientLightColor;\nuniform vec3 lightProbe[ 9 ];\nvec3 shGetIrradianceAt( in vec3 normal, in vec3 shCoefficients[ 9 ] ) {\n\tfloat x = normal.x, y = normal.y, z = normal.z;\n\tvec3 result = shCoefficients[ 0 ] * 0.886227;\n\tresult += shCoefficients[ 1 ] * 2.0 * 0.511664 * y;\n\tresult += shCoefficients[ 2 ] * 2.0 * 0.511664 * z;\n\tresult += shCoefficients[ 3 ] * 2.0 * 0.511664 * x;\n\tresult += shCoefficients[ 4 ] * 2.0 * 0.429043 * x * y;\n\tresult += shCoefficients[ 5 ] * 2.0 * 0.429043 * y * z;\n\tresult += shCoefficients[ 6 ] * ( 0.743125 * z * z - 0.247708 );\n\tresult += shCoefficients[ 7 ] * 2.0 * 0.429043 * x * z;\n\tresult += shCoefficients[ 8 ] * 0.429043 * ( x * x - y * y );\n\treturn result;\n}\nvec3 getLightProbeIrradiance( const in vec3 lightProbe[ 9 ], const in GeometricContext geometry ) {\n\tvec3 worldNormal = inverseTransformDirection( geometry.normal, viewMatrix );\n\tvec3 irradiance = shGetIrradianceAt( worldNormal, lightProbe );\n\treturn irradiance;\n}\nvec3 getAmbientLightIrradiance( const in vec3 ambientLightColor ) {\n\tvec3 irradiance = ambientLightColor;\n\t#ifndef PHYSICALLY_CORRECT_LIGHTS\n\t\tirradiance *= PI;\n\t#endif\n\treturn irradiance;\n}\n#if NUM_DIR_LIGHTS > 0\n\tstruct DirectionalLight {\n\t\tvec3 direction;\n\t\tvec3 color;\n\t};\n\tuniform DirectionalLight directionalLights[ NUM_DIR_LIGHTS ];\n\tvoid getDirectionalDirectLightIrradiance( const in DirectionalLight directionalLight, const in GeometricContext geometry, out IncidentLight directLight ) {\n\t\tdirectLight.color = directionalLight.color;\n\t\tdirectLight.direction = directionalLight.direction;\n\t\tdirectLight.visible = true;\n\t}\n#endif\n#if NUM_POINT_LIGHTS > 0\n\tstruct PointLight {\n\t\tvec3 position;\n\t\tvec3 color;\n\t\tfloat distance;\n\t\tfloat decay;\n\t};\n\tuniform PointLight pointLights[ NUM_POINT_LIGHTS ];\n\tvoid getPointDirectLightIrradiance( const in PointLight pointLight, const in GeometricContext geometry, out IncidentLight directLight ) {\n\t\tvec3 lVector = pointLight.position - geometry.position;\n\t\tdirectLight.direction = normalize( lVector );\n\t\tfloat lightDistance = length( lVector );\n\t\tdirectLight.color = pointLight.color;\n\t\tdirectLight.color *= punctualLightIntensityToIrradianceFactor( lightDistance, pointLight.distance, pointLight.decay );\n\t\tdirectLight.visible = ( directLight.color != vec3( 0.0 ) );\n\t}\n#endif\n#if NUM_SPOT_LIGHTS > 0\n\tstruct SpotLight {\n\t\tvec3 position;\n\t\tvec3 direction;\n\t\tvec3 color;\n\t\tfloat distance;\n\t\tfloat decay;\n\t\tfloat coneCos;\n\t\tfloat penumbraCos;\n\t};\n\tuniform SpotLight spotLights[ NUM_SPOT_LIGHTS ];\n\tvoid getSpotDirectLightIrradiance( const in SpotLight spotLight, const in GeometricContext geometry, out IncidentLight directLight ) {\n\t\tvec3 lVector = spotLight.position - geometry.position;\n\t\tdirectLight.direction = normalize( lVector );\n\t\tfloat lightDistance = length( lVector );\n\t\tfloat angleCos = dot( directLight.direction, spotLight.direction );\n\t\tif ( angleCos > spotLight.coneCos ) {\n\t\t\tfloat spotEffect = smoothstep( spotLight.coneCos, spotLight.penumbraCos, angleCos );\n\t\t\tdirectLight.color = spotLight.color;\n\t\t\tdirectLight.color *= spotEffect * punctualLightIntensityToIrradianceFactor( lightDistance, spotLight.distance, spotLight.decay );\n\t\t\tdirectLight.visible = true;\n\t\t} else {\n\t\t\tdirectLight.color = vec3( 0.0 );\n\t\t\tdirectLight.visible = false;\n\t\t}\n\t}\n#endif\n#if NUM_RECT_AREA_LIGHTS > 0\n\tstruct RectAreaLight {\n\t\tvec3 color;\n\t\tvec3 position;\n\t\tvec3 halfWidth;\n\t\tvec3 halfHeight;\n\t};\n\tuniform sampler2D ltc_1;\tuniform sampler2D ltc_2;\n\tuniform RectAreaLight rectAreaLights[ NUM_RECT_AREA_LIGHTS ];\n#endif\n#if NUM_HEMI_LIGHTS > 0\n\tstruct HemisphereLight {\n\t\tvec3 direction;\n\t\tvec3 skyColor;\n\t\tvec3 groundColor;\n\t};\n\tuniform HemisphereLight hemisphereLights[ NUM_HEMI_LIGHTS ];\n\tvec3 getHemisphereLightIrradiance( const in HemisphereLight hemiLight, const in GeometricContext geometry ) {\n\t\tfloat dotNL = dot( geometry.normal, hemiLight.direction );\n\t\tfloat hemiDiffuseWeight = 0.5 * dotNL + 0.5;\n\t\tvec3 irradiance = mix( hemiLight.groundColor, hemiLight.skyColor, hemiDiffuseWeight );\n\t\t#ifndef PHYSICALLY_CORRECT_LIGHTS\n\t\t\tirradiance *= PI;\n\t\t#endif\n\t\treturn irradiance;\n\t}\n#endif"; + + var envmap_physical_pars_fragment = "#if defined( USE_ENVMAP )\n\t#ifdef ENVMAP_MODE_REFRACTION\n\t\tuniform float refractionRatio;\n\t#endif\n\tvec3 getLightProbeIndirectIrradiance( const in GeometricContext geometry, const in int maxMIPLevel ) {\n\t\tvec3 worldNormal = inverseTransformDirection( geometry.normal, viewMatrix );\n\t\t#ifdef ENVMAP_TYPE_CUBE\n\t\t\tvec3 queryVec = vec3( flipEnvMap * worldNormal.x, worldNormal.yz );\n\t\t\t#ifdef TEXTURE_LOD_EXT\n\t\t\t\tvec4 envMapColor = textureCubeLodEXT( envMap, queryVec, float( maxMIPLevel ) );\n\t\t\t#else\n\t\t\t\tvec4 envMapColor = textureCube( envMap, queryVec, float( maxMIPLevel ) );\n\t\t\t#endif\n\t\t\tenvMapColor.rgb = envMapTexelToLinear( envMapColor ).rgb;\n\t\t#elif defined( ENVMAP_TYPE_CUBE_UV )\n\t\t\tvec4 envMapColor = textureCubeUV( envMap, worldNormal, 1.0 );\n\t\t#else\n\t\t\tvec4 envMapColor = vec4( 0.0 );\n\t\t#endif\n\t\treturn PI * envMapColor.rgb * envMapIntensity;\n\t}\n\tfloat getSpecularMIPLevel( const in float roughness, const in int maxMIPLevel ) {\n\t\tfloat maxMIPLevelScalar = float( maxMIPLevel );\n\t\tfloat sigma = PI * roughness * roughness / ( 1.0 + roughness );\n\t\tfloat desiredMIPLevel = maxMIPLevelScalar + log2( sigma );\n\t\treturn clamp( desiredMIPLevel, 0.0, maxMIPLevelScalar );\n\t}\n\tvec3 getLightProbeIndirectRadiance( const in vec3 viewDir, const in vec3 normal, const in float roughness, const in int maxMIPLevel ) {\n\t\t#ifdef ENVMAP_MODE_REFLECTION\n\t\t\tvec3 reflectVec = reflect( -viewDir, normal );\n\t\t\treflectVec = normalize( mix( reflectVec, normal, roughness * roughness) );\n\t\t#else\n\t\t\tvec3 reflectVec = refract( -viewDir, normal, refractionRatio );\n\t\t#endif\n\t\treflectVec = inverseTransformDirection( reflectVec, viewMatrix );\n\t\tfloat specularMIPLevel = getSpecularMIPLevel( roughness, maxMIPLevel );\n\t\t#ifdef ENVMAP_TYPE_CUBE\n\t\t\tvec3 queryReflectVec = vec3( flipEnvMap * reflectVec.x, reflectVec.yz );\n\t\t\t#ifdef TEXTURE_LOD_EXT\n\t\t\t\tvec4 envMapColor = textureCubeLodEXT( envMap, queryReflectVec, specularMIPLevel );\n\t\t\t#else\n\t\t\t\tvec4 envMapColor = textureCube( envMap, queryReflectVec, specularMIPLevel );\n\t\t\t#endif\n\t\t\tenvMapColor.rgb = envMapTexelToLinear( envMapColor ).rgb;\n\t\t#elif defined( ENVMAP_TYPE_CUBE_UV )\n\t\t\tvec4 envMapColor = textureCubeUV( envMap, reflectVec, roughness );\n\t\t#endif\n\t\treturn envMapColor.rgb * envMapIntensity;\n\t}\n#endif"; + + var lights_toon_fragment = "ToonMaterial material;\nmaterial.diffuseColor = diffuseColor.rgb;"; + + var lights_toon_pars_fragment = "varying vec3 vViewPosition;\n#ifndef FLAT_SHADED\n\tvarying vec3 vNormal;\n#endif\nstruct ToonMaterial {\n\tvec3 diffuseColor;\n};\nvoid RE_Direct_Toon( const in IncidentLight directLight, const in GeometricContext geometry, const in ToonMaterial material, inout ReflectedLight reflectedLight ) {\n\tvec3 irradiance = getGradientIrradiance( geometry.normal, directLight.direction ) * directLight.color;\n\t#ifndef PHYSICALLY_CORRECT_LIGHTS\n\t\tirradiance *= PI;\n\t#endif\n\treflectedLight.directDiffuse += irradiance * BRDF_Diffuse_Lambert( material.diffuseColor );\n}\nvoid RE_IndirectDiffuse_Toon( const in vec3 irradiance, const in GeometricContext geometry, const in ToonMaterial material, inout ReflectedLight reflectedLight ) {\n\treflectedLight.indirectDiffuse += irradiance * BRDF_Diffuse_Lambert( material.diffuseColor );\n}\n#define RE_Direct\t\t\t\tRE_Direct_Toon\n#define RE_IndirectDiffuse\t\tRE_IndirectDiffuse_Toon\n#define Material_LightProbeLOD( material )\t(0)"; + + var lights_phong_fragment = "BlinnPhongMaterial material;\nmaterial.diffuseColor = diffuseColor.rgb;\nmaterial.specularColor = specular;\nmaterial.specularShininess = shininess;\nmaterial.specularStrength = specularStrength;"; + + var lights_phong_pars_fragment = "varying vec3 vViewPosition;\n#ifndef FLAT_SHADED\n\tvarying vec3 vNormal;\n#endif\nstruct BlinnPhongMaterial {\n\tvec3 diffuseColor;\n\tvec3 specularColor;\n\tfloat specularShininess;\n\tfloat specularStrength;\n};\nvoid RE_Direct_BlinnPhong( const in IncidentLight directLight, const in GeometricContext geometry, const in BlinnPhongMaterial material, inout ReflectedLight reflectedLight ) {\n\tfloat dotNL = saturate( dot( geometry.normal, directLight.direction ) );\n\tvec3 irradiance = dotNL * directLight.color;\n\t#ifndef PHYSICALLY_CORRECT_LIGHTS\n\t\tirradiance *= PI;\n\t#endif\n\treflectedLight.directDiffuse += irradiance * BRDF_Diffuse_Lambert( material.diffuseColor );\n\treflectedLight.directSpecular += irradiance * BRDF_Specular_BlinnPhong( directLight, geometry, material.specularColor, material.specularShininess ) * material.specularStrength;\n}\nvoid RE_IndirectDiffuse_BlinnPhong( const in vec3 irradiance, const in GeometricContext geometry, const in BlinnPhongMaterial material, inout ReflectedLight reflectedLight ) {\n\treflectedLight.indirectDiffuse += irradiance * BRDF_Diffuse_Lambert( material.diffuseColor );\n}\n#define RE_Direct\t\t\t\tRE_Direct_BlinnPhong\n#define RE_IndirectDiffuse\t\tRE_IndirectDiffuse_BlinnPhong\n#define Material_LightProbeLOD( material )\t(0)"; + + var lights_physical_fragment = "PhysicalMaterial material;\nmaterial.diffuseColor = diffuseColor.rgb * ( 1.0 - metalnessFactor );\nvec3 dxy = max( abs( dFdx( geometryNormal ) ), abs( dFdy( geometryNormal ) ) );\nfloat geometryRoughness = max( max( dxy.x, dxy.y ), dxy.z );\nmaterial.specularRoughness = max( roughnessFactor, 0.0525 );material.specularRoughness += geometryRoughness;\nmaterial.specularRoughness = min( material.specularRoughness, 1.0 );\n#ifdef REFLECTIVITY\n\tmaterial.specularColor = mix( vec3( MAXIMUM_SPECULAR_COEFFICIENT * pow2( reflectivity ) ), diffuseColor.rgb, metalnessFactor );\n#else\n\tmaterial.specularColor = mix( vec3( DEFAULT_SPECULAR_COEFFICIENT ), diffuseColor.rgb, metalnessFactor );\n#endif\n#ifdef CLEARCOAT\n\tmaterial.clearcoat = clearcoat;\n\tmaterial.clearcoatRoughness = clearcoatRoughness;\n\t#ifdef USE_CLEARCOATMAP\n\t\tmaterial.clearcoat *= texture2D( clearcoatMap, vUv ).x;\n\t#endif\n\t#ifdef USE_CLEARCOAT_ROUGHNESSMAP\n\t\tmaterial.clearcoatRoughness *= texture2D( clearcoatRoughnessMap, vUv ).y;\n\t#endif\n\tmaterial.clearcoat = saturate( material.clearcoat );\tmaterial.clearcoatRoughness = max( material.clearcoatRoughness, 0.0525 );\n\tmaterial.clearcoatRoughness += geometryRoughness;\n\tmaterial.clearcoatRoughness = min( material.clearcoatRoughness, 1.0 );\n#endif\n#ifdef USE_SHEEN\n\tmaterial.sheenColor = sheen;\n#endif"; + + var lights_physical_pars_fragment = "struct PhysicalMaterial {\n\tvec3 diffuseColor;\n\tfloat specularRoughness;\n\tvec3 specularColor;\n#ifdef CLEARCOAT\n\tfloat clearcoat;\n\tfloat clearcoatRoughness;\n#endif\n#ifdef USE_SHEEN\n\tvec3 sheenColor;\n#endif\n};\n#define MAXIMUM_SPECULAR_COEFFICIENT 0.16\n#define DEFAULT_SPECULAR_COEFFICIENT 0.04\nfloat clearcoatDHRApprox( const in float roughness, const in float dotNL ) {\n\treturn DEFAULT_SPECULAR_COEFFICIENT + ( 1.0 - DEFAULT_SPECULAR_COEFFICIENT ) * ( pow( 1.0 - dotNL, 5.0 ) * pow( 1.0 - roughness, 2.0 ) );\n}\n#if NUM_RECT_AREA_LIGHTS > 0\n\tvoid RE_Direct_RectArea_Physical( const in RectAreaLight rectAreaLight, const in GeometricContext geometry, const in PhysicalMaterial material, inout ReflectedLight reflectedLight ) {\n\t\tvec3 normal = geometry.normal;\n\t\tvec3 viewDir = geometry.viewDir;\n\t\tvec3 position = geometry.position;\n\t\tvec3 lightPos = rectAreaLight.position;\n\t\tvec3 halfWidth = rectAreaLight.halfWidth;\n\t\tvec3 halfHeight = rectAreaLight.halfHeight;\n\t\tvec3 lightColor = rectAreaLight.color;\n\t\tfloat roughness = material.specularRoughness;\n\t\tvec3 rectCoords[ 4 ];\n\t\trectCoords[ 0 ] = lightPos + halfWidth - halfHeight;\t\trectCoords[ 1 ] = lightPos - halfWidth - halfHeight;\n\t\trectCoords[ 2 ] = lightPos - halfWidth + halfHeight;\n\t\trectCoords[ 3 ] = lightPos + halfWidth + halfHeight;\n\t\tvec2 uv = LTC_Uv( normal, viewDir, roughness );\n\t\tvec4 t1 = texture2D( ltc_1, uv );\n\t\tvec4 t2 = texture2D( ltc_2, uv );\n\t\tmat3 mInv = mat3(\n\t\t\tvec3( t1.x, 0, t1.y ),\n\t\t\tvec3( 0, 1, 0 ),\n\t\t\tvec3( t1.z, 0, t1.w )\n\t\t);\n\t\tvec3 fresnel = ( material.specularColor * t2.x + ( vec3( 1.0 ) - material.specularColor ) * t2.y );\n\t\treflectedLight.directSpecular += lightColor * fresnel * LTC_Evaluate( normal, viewDir, position, mInv, rectCoords );\n\t\treflectedLight.directDiffuse += lightColor * material.diffuseColor * LTC_Evaluate( normal, viewDir, position, mat3( 1.0 ), rectCoords );\n\t}\n#endif\nvoid RE_Direct_Physical( const in IncidentLight directLight, const in GeometricContext geometry, const in PhysicalMaterial material, inout ReflectedLight reflectedLight ) {\n\tfloat dotNL = saturate( dot( geometry.normal, directLight.direction ) );\n\tvec3 irradiance = dotNL * directLight.color;\n\t#ifndef PHYSICALLY_CORRECT_LIGHTS\n\t\tirradiance *= PI;\n\t#endif\n\t#ifdef CLEARCOAT\n\t\tfloat ccDotNL = saturate( dot( geometry.clearcoatNormal, directLight.direction ) );\n\t\tvec3 ccIrradiance = ccDotNL * directLight.color;\n\t\t#ifndef PHYSICALLY_CORRECT_LIGHTS\n\t\t\tccIrradiance *= PI;\n\t\t#endif\n\t\tfloat clearcoatDHR = material.clearcoat * clearcoatDHRApprox( material.clearcoatRoughness, ccDotNL );\n\t\treflectedLight.directSpecular += ccIrradiance * material.clearcoat * BRDF_Specular_GGX( directLight, geometry.viewDir, geometry.clearcoatNormal, vec3( DEFAULT_SPECULAR_COEFFICIENT ), material.clearcoatRoughness );\n\t#else\n\t\tfloat clearcoatDHR = 0.0;\n\t#endif\n\t#ifdef USE_SHEEN\n\t\treflectedLight.directSpecular += ( 1.0 - clearcoatDHR ) * irradiance * BRDF_Specular_Sheen(\n\t\t\tmaterial.specularRoughness,\n\t\t\tdirectLight.direction,\n\t\t\tgeometry,\n\t\t\tmaterial.sheenColor\n\t\t);\n\t#else\n\t\treflectedLight.directSpecular += ( 1.0 - clearcoatDHR ) * irradiance * BRDF_Specular_GGX( directLight, geometry.viewDir, geometry.normal, material.specularColor, material.specularRoughness);\n\t#endif\n\treflectedLight.directDiffuse += ( 1.0 - clearcoatDHR ) * irradiance * BRDF_Diffuse_Lambert( material.diffuseColor );\n}\nvoid RE_IndirectDiffuse_Physical( const in vec3 irradiance, const in GeometricContext geometry, const in PhysicalMaterial material, inout ReflectedLight reflectedLight ) {\n\treflectedLight.indirectDiffuse += irradiance * BRDF_Diffuse_Lambert( material.diffuseColor );\n}\nvoid RE_IndirectSpecular_Physical( const in vec3 radiance, const in vec3 irradiance, const in vec3 clearcoatRadiance, const in GeometricContext geometry, const in PhysicalMaterial material, inout ReflectedLight reflectedLight) {\n\t#ifdef CLEARCOAT\n\t\tfloat ccDotNV = saturate( dot( geometry.clearcoatNormal, geometry.viewDir ) );\n\t\treflectedLight.indirectSpecular += clearcoatRadiance * material.clearcoat * BRDF_Specular_GGX_Environment( geometry.viewDir, geometry.clearcoatNormal, vec3( DEFAULT_SPECULAR_COEFFICIENT ), material.clearcoatRoughness );\n\t\tfloat ccDotNL = ccDotNV;\n\t\tfloat clearcoatDHR = material.clearcoat * clearcoatDHRApprox( material.clearcoatRoughness, ccDotNL );\n\t#else\n\t\tfloat clearcoatDHR = 0.0;\n\t#endif\n\tfloat clearcoatInv = 1.0 - clearcoatDHR;\n\tvec3 singleScattering = vec3( 0.0 );\n\tvec3 multiScattering = vec3( 0.0 );\n\tvec3 cosineWeightedIrradiance = irradiance * RECIPROCAL_PI;\n\tBRDF_Specular_Multiscattering_Environment( geometry, material.specularColor, material.specularRoughness, singleScattering, multiScattering );\n\tvec3 diffuse = material.diffuseColor * ( 1.0 - ( singleScattering + multiScattering ) );\n\treflectedLight.indirectSpecular += clearcoatInv * radiance * singleScattering;\n\treflectedLight.indirectSpecular += multiScattering * cosineWeightedIrradiance;\n\treflectedLight.indirectDiffuse += diffuse * cosineWeightedIrradiance;\n}\n#define RE_Direct\t\t\t\tRE_Direct_Physical\n#define RE_Direct_RectArea\t\tRE_Direct_RectArea_Physical\n#define RE_IndirectDiffuse\t\tRE_IndirectDiffuse_Physical\n#define RE_IndirectSpecular\t\tRE_IndirectSpecular_Physical\nfloat computeSpecularOcclusion( const in float dotNV, const in float ambientOcclusion, const in float roughness ) {\n\treturn saturate( pow( dotNV + ambientOcclusion, exp2( - 16.0 * roughness - 1.0 ) ) - 1.0 + ambientOcclusion );\n}"; + + var lights_fragment_begin = "\nGeometricContext geometry;\ngeometry.position = - vViewPosition;\ngeometry.normal = normal;\ngeometry.viewDir = ( isOrthographic ) ? vec3( 0, 0, 1 ) : normalize( vViewPosition );\n#ifdef CLEARCOAT\n\tgeometry.clearcoatNormal = clearcoatNormal;\n#endif\nIncidentLight directLight;\n#if ( NUM_POINT_LIGHTS > 0 ) && defined( RE_Direct )\n\tPointLight pointLight;\n\t#if defined( USE_SHADOWMAP ) && NUM_POINT_LIGHT_SHADOWS > 0\n\tPointLightShadow pointLightShadow;\n\t#endif\n\t#pragma unroll_loop_start\n\tfor ( int i = 0; i < NUM_POINT_LIGHTS; i ++ ) {\n\t\tpointLight = pointLights[ i ];\n\t\tgetPointDirectLightIrradiance( pointLight, geometry, directLight );\n\t\t#if defined( USE_SHADOWMAP ) && ( UNROLLED_LOOP_INDEX < NUM_POINT_LIGHT_SHADOWS )\n\t\tpointLightShadow = pointLightShadows[ i ];\n\t\tdirectLight.color *= all( bvec2( directLight.visible, receiveShadow ) ) ? getPointShadow( pointShadowMap[ i ], pointLightShadow.shadowMapSize, pointLightShadow.shadowBias, pointLightShadow.shadowRadius, vPointShadowCoord[ i ], pointLightShadow.shadowCameraNear, pointLightShadow.shadowCameraFar ) : 1.0;\n\t\t#endif\n\t\tRE_Direct( directLight, geometry, material, reflectedLight );\n\t}\n\t#pragma unroll_loop_end\n#endif\n#if ( NUM_SPOT_LIGHTS > 0 ) && defined( RE_Direct )\n\tSpotLight spotLight;\n\t#if defined( USE_SHADOWMAP ) && NUM_SPOT_LIGHT_SHADOWS > 0\n\tSpotLightShadow spotLightShadow;\n\t#endif\n\t#pragma unroll_loop_start\n\tfor ( int i = 0; i < NUM_SPOT_LIGHTS; i ++ ) {\n\t\tspotLight = spotLights[ i ];\n\t\tgetSpotDirectLightIrradiance( spotLight, geometry, directLight );\n\t\t#if defined( USE_SHADOWMAP ) && ( UNROLLED_LOOP_INDEX < NUM_SPOT_LIGHT_SHADOWS )\n\t\tspotLightShadow = spotLightShadows[ i ];\n\t\tdirectLight.color *= all( bvec2( directLight.visible, receiveShadow ) ) ? getShadow( spotShadowMap[ i ], spotLightShadow.shadowMapSize, spotLightShadow.shadowBias, spotLightShadow.shadowRadius, vSpotShadowCoord[ i ] ) : 1.0;\n\t\t#endif\n\t\tRE_Direct( directLight, geometry, material, reflectedLight );\n\t}\n\t#pragma unroll_loop_end\n#endif\n#if ( NUM_DIR_LIGHTS > 0 ) && defined( RE_Direct )\n\tDirectionalLight directionalLight;\n\t#if defined( USE_SHADOWMAP ) && NUM_DIR_LIGHT_SHADOWS > 0\n\tDirectionalLightShadow directionalLightShadow;\n\t#endif\n\t#pragma unroll_loop_start\n\tfor ( int i = 0; i < NUM_DIR_LIGHTS; i ++ ) {\n\t\tdirectionalLight = directionalLights[ i ];\n\t\tgetDirectionalDirectLightIrradiance( directionalLight, geometry, directLight );\n\t\t#if defined( USE_SHADOWMAP ) && ( UNROLLED_LOOP_INDEX < NUM_DIR_LIGHT_SHADOWS )\n\t\tdirectionalLightShadow = directionalLightShadows[ i ];\n\t\tdirectLight.color *= all( bvec2( directLight.visible, receiveShadow ) ) ? getShadow( directionalShadowMap[ i ], directionalLightShadow.shadowMapSize, directionalLightShadow.shadowBias, directionalLightShadow.shadowRadius, vDirectionalShadowCoord[ i ] ) : 1.0;\n\t\t#endif\n\t\tRE_Direct( directLight, geometry, material, reflectedLight );\n\t}\n\t#pragma unroll_loop_end\n#endif\n#if ( NUM_RECT_AREA_LIGHTS > 0 ) && defined( RE_Direct_RectArea )\n\tRectAreaLight rectAreaLight;\n\t#pragma unroll_loop_start\n\tfor ( int i = 0; i < NUM_RECT_AREA_LIGHTS; i ++ ) {\n\t\trectAreaLight = rectAreaLights[ i ];\n\t\tRE_Direct_RectArea( rectAreaLight, geometry, material, reflectedLight );\n\t}\n\t#pragma unroll_loop_end\n#endif\n#if defined( RE_IndirectDiffuse )\n\tvec3 iblIrradiance = vec3( 0.0 );\n\tvec3 irradiance = getAmbientLightIrradiance( ambientLightColor );\n\tirradiance += getLightProbeIrradiance( lightProbe, geometry );\n\t#if ( NUM_HEMI_LIGHTS > 0 )\n\t\t#pragma unroll_loop_start\n\t\tfor ( int i = 0; i < NUM_HEMI_LIGHTS; i ++ ) {\n\t\t\tirradiance += getHemisphereLightIrradiance( hemisphereLights[ i ], geometry );\n\t\t}\n\t\t#pragma unroll_loop_end\n\t#endif\n#endif\n#if defined( RE_IndirectSpecular )\n\tvec3 radiance = vec3( 0.0 );\n\tvec3 clearcoatRadiance = vec3( 0.0 );\n#endif"; + + var lights_fragment_maps = "#if defined( RE_IndirectDiffuse )\n\t#ifdef USE_LIGHTMAP\n\t\tvec4 lightMapTexel= texture2D( lightMap, vUv2 );\n\t\tvec3 lightMapIrradiance = lightMapTexelToLinear( lightMapTexel ).rgb * lightMapIntensity;\n\t\t#ifndef PHYSICALLY_CORRECT_LIGHTS\n\t\t\tlightMapIrradiance *= PI;\n\t\t#endif\n\t\tirradiance += lightMapIrradiance;\n\t#endif\n\t#if defined( USE_ENVMAP ) && defined( STANDARD ) && defined( ENVMAP_TYPE_CUBE_UV )\n\t\tiblIrradiance += getLightProbeIndirectIrradiance( geometry, maxMipLevel );\n\t#endif\n#endif\n#if defined( USE_ENVMAP ) && defined( RE_IndirectSpecular )\n\tradiance += getLightProbeIndirectRadiance( geometry.viewDir, geometry.normal, material.specularRoughness, maxMipLevel );\n\t#ifdef CLEARCOAT\n\t\tclearcoatRadiance += getLightProbeIndirectRadiance( geometry.viewDir, geometry.clearcoatNormal, material.clearcoatRoughness, maxMipLevel );\n\t#endif\n#endif"; + + var lights_fragment_end = "#if defined( RE_IndirectDiffuse )\n\tRE_IndirectDiffuse( irradiance, geometry, material, reflectedLight );\n#endif\n#if defined( RE_IndirectSpecular )\n\tRE_IndirectSpecular( radiance, iblIrradiance, clearcoatRadiance, geometry, material, reflectedLight );\n#endif"; + + var logdepthbuf_fragment = "#if defined( USE_LOGDEPTHBUF ) && defined( USE_LOGDEPTHBUF_EXT )\n\tgl_FragDepthEXT = vIsPerspective == 0.0 ? gl_FragCoord.z : log2( vFragDepth ) * logDepthBufFC * 0.5;\n#endif"; + + var logdepthbuf_pars_fragment = "#if defined( USE_LOGDEPTHBUF ) && defined( USE_LOGDEPTHBUF_EXT )\n\tuniform float logDepthBufFC;\n\tvarying float vFragDepth;\n\tvarying float vIsPerspective;\n#endif"; + + var logdepthbuf_pars_vertex = "#ifdef USE_LOGDEPTHBUF\n\t#ifdef USE_LOGDEPTHBUF_EXT\n\t\tvarying float vFragDepth;\n\t\tvarying float vIsPerspective;\n\t#else\n\t\tuniform float logDepthBufFC;\n\t#endif\n#endif"; + + var logdepthbuf_vertex = "#ifdef USE_LOGDEPTHBUF\n\t#ifdef USE_LOGDEPTHBUF_EXT\n\t\tvFragDepth = 1.0 + gl_Position.w;\n\t\tvIsPerspective = float( isPerspectiveMatrix( projectionMatrix ) );\n\t#else\n\t\tif ( isPerspectiveMatrix( projectionMatrix ) ) {\n\t\t\tgl_Position.z = log2( max( EPSILON, gl_Position.w + 1.0 ) ) * logDepthBufFC - 1.0;\n\t\t\tgl_Position.z *= gl_Position.w;\n\t\t}\n\t#endif\n#endif"; + + var map_fragment = "#ifdef USE_MAP\n\tvec4 texelColor = texture2D( map, vUv );\n\ttexelColor = mapTexelToLinear( texelColor );\n\tdiffuseColor *= texelColor;\n#endif"; + + var map_pars_fragment = "#ifdef USE_MAP\n\tuniform sampler2D map;\n#endif"; + + var map_particle_fragment = "#if defined( USE_MAP ) || defined( USE_ALPHAMAP )\n\tvec2 uv = ( uvTransform * vec3( gl_PointCoord.x, 1.0 - gl_PointCoord.y, 1 ) ).xy;\n#endif\n#ifdef USE_MAP\n\tvec4 mapTexel = texture2D( map, uv );\n\tdiffuseColor *= mapTexelToLinear( mapTexel );\n#endif\n#ifdef USE_ALPHAMAP\n\tdiffuseColor.a *= texture2D( alphaMap, uv ).g;\n#endif"; + + var map_particle_pars_fragment = "#if defined( USE_MAP ) || defined( USE_ALPHAMAP )\n\tuniform mat3 uvTransform;\n#endif\n#ifdef USE_MAP\n\tuniform sampler2D map;\n#endif\n#ifdef USE_ALPHAMAP\n\tuniform sampler2D alphaMap;\n#endif"; + + var metalnessmap_fragment = "float metalnessFactor = metalness;\n#ifdef USE_METALNESSMAP\n\tvec4 texelMetalness = texture2D( metalnessMap, vUv );\n\tmetalnessFactor *= texelMetalness.b;\n#endif"; + + var metalnessmap_pars_fragment = "#ifdef USE_METALNESSMAP\n\tuniform sampler2D metalnessMap;\n#endif"; + + var morphnormal_vertex = "#ifdef USE_MORPHNORMALS\n\tobjectNormal *= morphTargetBaseInfluence;\n\tobjectNormal += morphNormal0 * morphTargetInfluences[ 0 ];\n\tobjectNormal += morphNormal1 * morphTargetInfluences[ 1 ];\n\tobjectNormal += morphNormal2 * morphTargetInfluences[ 2 ];\n\tobjectNormal += morphNormal3 * morphTargetInfluences[ 3 ];\n#endif"; + + var morphtarget_pars_vertex = "#ifdef USE_MORPHTARGETS\n\tuniform float morphTargetBaseInfluence;\n\t#ifndef USE_MORPHNORMALS\n\t\tuniform float morphTargetInfluences[ 8 ];\n\t#else\n\t\tuniform float morphTargetInfluences[ 4 ];\n\t#endif\n#endif"; + + var morphtarget_vertex = "#ifdef USE_MORPHTARGETS\n\ttransformed *= morphTargetBaseInfluence;\n\ttransformed += morphTarget0 * morphTargetInfluences[ 0 ];\n\ttransformed += morphTarget1 * morphTargetInfluences[ 1 ];\n\ttransformed += morphTarget2 * morphTargetInfluences[ 2 ];\n\ttransformed += morphTarget3 * morphTargetInfluences[ 3 ];\n\t#ifndef USE_MORPHNORMALS\n\t\ttransformed += morphTarget4 * morphTargetInfluences[ 4 ];\n\t\ttransformed += morphTarget5 * morphTargetInfluences[ 5 ];\n\t\ttransformed += morphTarget6 * morphTargetInfluences[ 6 ];\n\t\ttransformed += morphTarget7 * morphTargetInfluences[ 7 ];\n\t#endif\n#endif"; + + var normal_fragment_begin = "#ifdef FLAT_SHADED\n\tvec3 fdx = vec3( dFdx( vViewPosition.x ), dFdx( vViewPosition.y ), dFdx( vViewPosition.z ) );\n\tvec3 fdy = vec3( dFdy( vViewPosition.x ), dFdy( vViewPosition.y ), dFdy( vViewPosition.z ) );\n\tvec3 normal = normalize( cross( fdx, fdy ) );\n#else\n\tvec3 normal = normalize( vNormal );\n\t#ifdef DOUBLE_SIDED\n\t\tnormal = normal * ( float( gl_FrontFacing ) * 2.0 - 1.0 );\n\t#endif\n\t#ifdef USE_TANGENT\n\t\tvec3 tangent = normalize( vTangent );\n\t\tvec3 bitangent = normalize( vBitangent );\n\t\t#ifdef DOUBLE_SIDED\n\t\t\ttangent = tangent * ( float( gl_FrontFacing ) * 2.0 - 1.0 );\n\t\t\tbitangent = bitangent * ( float( gl_FrontFacing ) * 2.0 - 1.0 );\n\t\t#endif\n\t\t#if defined( TANGENTSPACE_NORMALMAP ) || defined( USE_CLEARCOAT_NORMALMAP )\n\t\t\tmat3 vTBN = mat3( tangent, bitangent, normal );\n\t\t#endif\n\t#endif\n#endif\nvec3 geometryNormal = normal;"; + + var normal_fragment_maps = "#ifdef OBJECTSPACE_NORMALMAP\n\tnormal = texture2D( normalMap, vUv ).xyz * 2.0 - 1.0;\n\t#ifdef FLIP_SIDED\n\t\tnormal = - normal;\n\t#endif\n\t#ifdef DOUBLE_SIDED\n\t\tnormal = normal * ( float( gl_FrontFacing ) * 2.0 - 1.0 );\n\t#endif\n\tnormal = normalize( normalMatrix * normal );\n#elif defined( TANGENTSPACE_NORMALMAP )\n\tvec3 mapN = texture2D( normalMap, vUv ).xyz * 2.0 - 1.0;\n\tmapN.xy *= normalScale;\n\t#ifdef USE_TANGENT\n\t\tnormal = normalize( vTBN * mapN );\n\t#else\n\t\tnormal = perturbNormal2Arb( -vViewPosition, normal, mapN );\n\t#endif\n#elif defined( USE_BUMPMAP )\n\tnormal = perturbNormalArb( -vViewPosition, normal, dHdxy_fwd() );\n#endif"; + + var normalmap_pars_fragment = "#ifdef USE_NORMALMAP\n\tuniform sampler2D normalMap;\n\tuniform vec2 normalScale;\n#endif\n#ifdef OBJECTSPACE_NORMALMAP\n\tuniform mat3 normalMatrix;\n#endif\n#if ! defined ( USE_TANGENT ) && ( defined ( TANGENTSPACE_NORMALMAP ) || defined ( USE_CLEARCOAT_NORMALMAP ) )\n\tvec3 perturbNormal2Arb( vec3 eye_pos, vec3 surf_norm, vec3 mapN ) {\n\t\tvec3 q0 = vec3( dFdx( eye_pos.x ), dFdx( eye_pos.y ), dFdx( eye_pos.z ) );\n\t\tvec3 q1 = vec3( dFdy( eye_pos.x ), dFdy( eye_pos.y ), dFdy( eye_pos.z ) );\n\t\tvec2 st0 = dFdx( vUv.st );\n\t\tvec2 st1 = dFdy( vUv.st );\n\t\tfloat scale = sign( st1.t * st0.s - st0.t * st1.s );\n\t\tvec3 S = normalize( ( q0 * st1.t - q1 * st0.t ) * scale );\n\t\tvec3 T = normalize( ( - q0 * st1.s + q1 * st0.s ) * scale );\n\t\tvec3 N = normalize( surf_norm );\n\t\tmat3 tsn = mat3( S, T, N );\n\t\tmapN.xy *= ( float( gl_FrontFacing ) * 2.0 - 1.0 );\n\t\treturn normalize( tsn * mapN );\n\t}\n#endif"; + + var clearcoat_normal_fragment_begin = "#ifdef CLEARCOAT\n\tvec3 clearcoatNormal = geometryNormal;\n#endif"; + + var clearcoat_normal_fragment_maps = "#ifdef USE_CLEARCOAT_NORMALMAP\n\tvec3 clearcoatMapN = texture2D( clearcoatNormalMap, vUv ).xyz * 2.0 - 1.0;\n\tclearcoatMapN.xy *= clearcoatNormalScale;\n\t#ifdef USE_TANGENT\n\t\tclearcoatNormal = normalize( vTBN * clearcoatMapN );\n\t#else\n\t\tclearcoatNormal = perturbNormal2Arb( - vViewPosition, clearcoatNormal, clearcoatMapN );\n\t#endif\n#endif"; + + var clearcoat_pars_fragment = "#ifdef USE_CLEARCOATMAP\n\tuniform sampler2D clearcoatMap;\n#endif\n#ifdef USE_CLEARCOAT_ROUGHNESSMAP\n\tuniform sampler2D clearcoatRoughnessMap;\n#endif\n#ifdef USE_CLEARCOAT_NORMALMAP\n\tuniform sampler2D clearcoatNormalMap;\n\tuniform vec2 clearcoatNormalScale;\n#endif"; + + var packing = "vec3 packNormalToRGB( const in vec3 normal ) {\n\treturn normalize( normal ) * 0.5 + 0.5;\n}\nvec3 unpackRGBToNormal( const in vec3 rgb ) {\n\treturn 2.0 * rgb.xyz - 1.0;\n}\nconst float PackUpscale = 256. / 255.;const float UnpackDownscale = 255. / 256.;\nconst vec3 PackFactors = vec3( 256. * 256. * 256., 256. * 256., 256. );\nconst vec4 UnpackFactors = UnpackDownscale / vec4( PackFactors, 1. );\nconst float ShiftRight8 = 1. / 256.;\nvec4 packDepthToRGBA( const in float v ) {\n\tvec4 r = vec4( fract( v * PackFactors ), v );\n\tr.yzw -= r.xyz * ShiftRight8;\treturn r * PackUpscale;\n}\nfloat unpackRGBAToDepth( const in vec4 v ) {\n\treturn dot( v, UnpackFactors );\n}\nvec4 pack2HalfToRGBA( vec2 v ) {\n\tvec4 r = vec4( v.x, fract( v.x * 255.0 ), v.y, fract( v.y * 255.0 ));\n\treturn vec4( r.x - r.y / 255.0, r.y, r.z - r.w / 255.0, r.w);\n}\nvec2 unpackRGBATo2Half( vec4 v ) {\n\treturn vec2( v.x + ( v.y / 255.0 ), v.z + ( v.w / 255.0 ) );\n}\nfloat viewZToOrthographicDepth( const in float viewZ, const in float near, const in float far ) {\n\treturn ( viewZ + near ) / ( near - far );\n}\nfloat orthographicDepthToViewZ( const in float linearClipZ, const in float near, const in float far ) {\n\treturn linearClipZ * ( near - far ) - near;\n}\nfloat viewZToPerspectiveDepth( const in float viewZ, const in float near, const in float far ) {\n\treturn (( near + viewZ ) * far ) / (( far - near ) * viewZ );\n}\nfloat perspectiveDepthToViewZ( const in float invClipZ, const in float near, const in float far ) {\n\treturn ( near * far ) / ( ( far - near ) * invClipZ - far );\n}"; + + var premultiplied_alpha_fragment = "#ifdef PREMULTIPLIED_ALPHA\n\tgl_FragColor.rgb *= gl_FragColor.a;\n#endif"; + + var project_vertex = "vec4 mvPosition = vec4( transformed, 1.0 );\n#ifdef USE_INSTANCING\n\tmvPosition = instanceMatrix * mvPosition;\n#endif\nmvPosition = modelViewMatrix * mvPosition;\ngl_Position = projectionMatrix * mvPosition;"; + + var dithering_fragment = "#ifdef DITHERING\n\tgl_FragColor.rgb = dithering( gl_FragColor.rgb );\n#endif"; + + var dithering_pars_fragment = "#ifdef DITHERING\n\tvec3 dithering( vec3 color ) {\n\t\tfloat grid_position = rand( gl_FragCoord.xy );\n\t\tvec3 dither_shift_RGB = vec3( 0.25 / 255.0, -0.25 / 255.0, 0.25 / 255.0 );\n\t\tdither_shift_RGB = mix( 2.0 * dither_shift_RGB, -2.0 * dither_shift_RGB, grid_position );\n\t\treturn color + dither_shift_RGB;\n\t}\n#endif"; + + var roughnessmap_fragment = "float roughnessFactor = roughness;\n#ifdef USE_ROUGHNESSMAP\n\tvec4 texelRoughness = texture2D( roughnessMap, vUv );\n\troughnessFactor *= texelRoughness.g;\n#endif"; + + var roughnessmap_pars_fragment = "#ifdef USE_ROUGHNESSMAP\n\tuniform sampler2D roughnessMap;\n#endif"; + + var shadowmap_pars_fragment = "#ifdef USE_SHADOWMAP\n\t#if NUM_DIR_LIGHT_SHADOWS > 0\n\t\tuniform sampler2D directionalShadowMap[ NUM_DIR_LIGHT_SHADOWS ];\n\t\tvarying vec4 vDirectionalShadowCoord[ NUM_DIR_LIGHT_SHADOWS ];\n\t\tstruct DirectionalLightShadow {\n\t\t\tfloat shadowBias;\n\t\t\tfloat shadowNormalBias;\n\t\t\tfloat shadowRadius;\n\t\t\tvec2 shadowMapSize;\n\t\t};\n\t\tuniform DirectionalLightShadow directionalLightShadows[ NUM_DIR_LIGHT_SHADOWS ];\n\t#endif\n\t#if NUM_SPOT_LIGHT_SHADOWS > 0\n\t\tuniform sampler2D spotShadowMap[ NUM_SPOT_LIGHT_SHADOWS ];\n\t\tvarying vec4 vSpotShadowCoord[ NUM_SPOT_LIGHT_SHADOWS ];\n\t\tstruct SpotLightShadow {\n\t\t\tfloat shadowBias;\n\t\t\tfloat shadowNormalBias;\n\t\t\tfloat shadowRadius;\n\t\t\tvec2 shadowMapSize;\n\t\t};\n\t\tuniform SpotLightShadow spotLightShadows[ NUM_SPOT_LIGHT_SHADOWS ];\n\t#endif\n\t#if NUM_POINT_LIGHT_SHADOWS > 0\n\t\tuniform sampler2D pointShadowMap[ NUM_POINT_LIGHT_SHADOWS ];\n\t\tvarying vec4 vPointShadowCoord[ NUM_POINT_LIGHT_SHADOWS ];\n\t\tstruct PointLightShadow {\n\t\t\tfloat shadowBias;\n\t\t\tfloat shadowNormalBias;\n\t\t\tfloat shadowRadius;\n\t\t\tvec2 shadowMapSize;\n\t\t\tfloat shadowCameraNear;\n\t\t\tfloat shadowCameraFar;\n\t\t};\n\t\tuniform PointLightShadow pointLightShadows[ NUM_POINT_LIGHT_SHADOWS ];\n\t#endif\n\tfloat texture2DCompare( sampler2D depths, vec2 uv, float compare ) {\n\t\treturn step( compare, unpackRGBAToDepth( texture2D( depths, uv ) ) );\n\t}\n\tvec2 texture2DDistribution( sampler2D shadow, vec2 uv ) {\n\t\treturn unpackRGBATo2Half( texture2D( shadow, uv ) );\n\t}\n\tfloat VSMShadow (sampler2D shadow, vec2 uv, float compare ){\n\t\tfloat occlusion = 1.0;\n\t\tvec2 distribution = texture2DDistribution( shadow, uv );\n\t\tfloat hard_shadow = step( compare , distribution.x );\n\t\tif (hard_shadow != 1.0 ) {\n\t\t\tfloat distance = compare - distribution.x ;\n\t\t\tfloat variance = max( 0.00000, distribution.y * distribution.y );\n\t\t\tfloat softness_probability = variance / (variance + distance * distance );\t\t\tsoftness_probability = clamp( ( softness_probability - 0.3 ) / ( 0.95 - 0.3 ), 0.0, 1.0 );\t\t\tocclusion = clamp( max( hard_shadow, softness_probability ), 0.0, 1.0 );\n\t\t}\n\t\treturn occlusion;\n\t}\n\tfloat getShadow( sampler2D shadowMap, vec2 shadowMapSize, float shadowBias, float shadowRadius, vec4 shadowCoord ) {\n\t\tfloat shadow = 1.0;\n\t\tshadowCoord.xyz /= shadowCoord.w;\n\t\tshadowCoord.z += shadowBias;\n\t\tbvec4 inFrustumVec = bvec4 ( shadowCoord.x >= 0.0, shadowCoord.x <= 1.0, shadowCoord.y >= 0.0, shadowCoord.y <= 1.0 );\n\t\tbool inFrustum = all( inFrustumVec );\n\t\tbvec2 frustumTestVec = bvec2( inFrustum, shadowCoord.z <= 1.0 );\n\t\tbool frustumTest = all( frustumTestVec );\n\t\tif ( frustumTest ) {\n\t\t#if defined( SHADOWMAP_TYPE_PCF )\n\t\t\tvec2 texelSize = vec2( 1.0 ) / shadowMapSize;\n\t\t\tfloat dx0 = - texelSize.x * shadowRadius;\n\t\t\tfloat dy0 = - texelSize.y * shadowRadius;\n\t\t\tfloat dx1 = + texelSize.x * shadowRadius;\n\t\t\tfloat dy1 = + texelSize.y * shadowRadius;\n\t\t\tfloat dx2 = dx0 / 2.0;\n\t\t\tfloat dy2 = dy0 / 2.0;\n\t\t\tfloat dx3 = dx1 / 2.0;\n\t\t\tfloat dy3 = dy1 / 2.0;\n\t\t\tshadow = (\n\t\t\t\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( dx0, dy0 ), shadowCoord.z ) +\n\t\t\t\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( 0.0, dy0 ), shadowCoord.z ) +\n\t\t\t\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( dx1, dy0 ), shadowCoord.z ) +\n\t\t\t\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( dx2, dy2 ), shadowCoord.z ) +\n\t\t\t\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( 0.0, dy2 ), shadowCoord.z ) +\n\t\t\t\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( dx3, dy2 ), shadowCoord.z ) +\n\t\t\t\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( dx0, 0.0 ), shadowCoord.z ) +\n\t\t\t\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( dx2, 0.0 ), shadowCoord.z ) +\n\t\t\t\ttexture2DCompare( shadowMap, shadowCoord.xy, shadowCoord.z ) +\n\t\t\t\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( dx3, 0.0 ), shadowCoord.z ) +\n\t\t\t\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( dx1, 0.0 ), shadowCoord.z ) +\n\t\t\t\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( dx2, dy3 ), shadowCoord.z ) +\n\t\t\t\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( 0.0, dy3 ), shadowCoord.z ) +\n\t\t\t\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( dx3, dy3 ), shadowCoord.z ) +\n\t\t\t\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( dx0, dy1 ), shadowCoord.z ) +\n\t\t\t\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( 0.0, dy1 ), shadowCoord.z ) +\n\t\t\t\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( dx1, dy1 ), shadowCoord.z )\n\t\t\t) * ( 1.0 / 17.0 );\n\t\t#elif defined( SHADOWMAP_TYPE_PCF_SOFT )\n\t\t\tvec2 texelSize = vec2( 1.0 ) / shadowMapSize;\n\t\t\tfloat dx = texelSize.x;\n\t\t\tfloat dy = texelSize.y;\n\t\t\tvec2 uv = shadowCoord.xy;\n\t\t\tvec2 f = fract( uv * shadowMapSize + 0.5 );\n\t\t\tuv -= f * texelSize;\n\t\t\tshadow = (\n\t\t\t\ttexture2DCompare( shadowMap, uv, shadowCoord.z ) +\n\t\t\t\ttexture2DCompare( shadowMap, uv + vec2( dx, 0.0 ), shadowCoord.z ) +\n\t\t\t\ttexture2DCompare( shadowMap, uv + vec2( 0.0, dy ), shadowCoord.z ) +\n\t\t\t\ttexture2DCompare( shadowMap, uv + texelSize, shadowCoord.z ) +\n\t\t\t\tmix( texture2DCompare( shadowMap, uv + vec2( -dx, 0.0 ), shadowCoord.z ), \n\t\t\t\t\t texture2DCompare( shadowMap, uv + vec2( 2.0 * dx, 0.0 ), shadowCoord.z ),\n\t\t\t\t\t f.x ) +\n\t\t\t\tmix( texture2DCompare( shadowMap, uv + vec2( -dx, dy ), shadowCoord.z ), \n\t\t\t\t\t texture2DCompare( shadowMap, uv + vec2( 2.0 * dx, dy ), shadowCoord.z ),\n\t\t\t\t\t f.x ) +\n\t\t\t\tmix( texture2DCompare( shadowMap, uv + vec2( 0.0, -dy ), shadowCoord.z ), \n\t\t\t\t\t texture2DCompare( shadowMap, uv + vec2( 0.0, 2.0 * dy ), shadowCoord.z ),\n\t\t\t\t\t f.y ) +\n\t\t\t\tmix( texture2DCompare( shadowMap, uv + vec2( dx, -dy ), shadowCoord.z ), \n\t\t\t\t\t texture2DCompare( shadowMap, uv + vec2( dx, 2.0 * dy ), shadowCoord.z ),\n\t\t\t\t\t f.y ) +\n\t\t\t\tmix( mix( texture2DCompare( shadowMap, uv + vec2( -dx, -dy ), shadowCoord.z ), \n\t\t\t\t\t\t texture2DCompare( shadowMap, uv + vec2( 2.0 * dx, -dy ), shadowCoord.z ),\n\t\t\t\t\t\t f.x ),\n\t\t\t\t\t mix( texture2DCompare( shadowMap, uv + vec2( -dx, 2.0 * dy ), shadowCoord.z ), \n\t\t\t\t\t\t texture2DCompare( shadowMap, uv + vec2( 2.0 * dx, 2.0 * dy ), shadowCoord.z ),\n\t\t\t\t\t\t f.x ),\n\t\t\t\t\t f.y )\n\t\t\t) * ( 1.0 / 9.0 );\n\t\t#elif defined( SHADOWMAP_TYPE_VSM )\n\t\t\tshadow = VSMShadow( shadowMap, shadowCoord.xy, shadowCoord.z );\n\t\t#else\n\t\t\tshadow = texture2DCompare( shadowMap, shadowCoord.xy, shadowCoord.z );\n\t\t#endif\n\t\t}\n\t\treturn shadow;\n\t}\n\tvec2 cubeToUV( vec3 v, float texelSizeY ) {\n\t\tvec3 absV = abs( v );\n\t\tfloat scaleToCube = 1.0 / max( absV.x, max( absV.y, absV.z ) );\n\t\tabsV *= scaleToCube;\n\t\tv *= scaleToCube * ( 1.0 - 2.0 * texelSizeY );\n\t\tvec2 planar = v.xy;\n\t\tfloat almostATexel = 1.5 * texelSizeY;\n\t\tfloat almostOne = 1.0 - almostATexel;\n\t\tif ( absV.z >= almostOne ) {\n\t\t\tif ( v.z > 0.0 )\n\t\t\t\tplanar.x = 4.0 - v.x;\n\t\t} else if ( absV.x >= almostOne ) {\n\t\t\tfloat signX = sign( v.x );\n\t\t\tplanar.x = v.z * signX + 2.0 * signX;\n\t\t} else if ( absV.y >= almostOne ) {\n\t\t\tfloat signY = sign( v.y );\n\t\t\tplanar.x = v.x + 2.0 * signY + 2.0;\n\t\t\tplanar.y = v.z * signY - 2.0;\n\t\t}\n\t\treturn vec2( 0.125, 0.25 ) * planar + vec2( 0.375, 0.75 );\n\t}\n\tfloat getPointShadow( sampler2D shadowMap, vec2 shadowMapSize, float shadowBias, float shadowRadius, vec4 shadowCoord, float shadowCameraNear, float shadowCameraFar ) {\n\t\tvec2 texelSize = vec2( 1.0 ) / ( shadowMapSize * vec2( 4.0, 2.0 ) );\n\t\tvec3 lightToPosition = shadowCoord.xyz;\n\t\tfloat dp = ( length( lightToPosition ) - shadowCameraNear ) / ( shadowCameraFar - shadowCameraNear );\t\tdp += shadowBias;\n\t\tvec3 bd3D = normalize( lightToPosition );\n\t\t#if defined( SHADOWMAP_TYPE_PCF ) || defined( SHADOWMAP_TYPE_PCF_SOFT ) || defined( SHADOWMAP_TYPE_VSM )\n\t\t\tvec2 offset = vec2( - 1, 1 ) * shadowRadius * texelSize.y;\n\t\t\treturn (\n\t\t\t\ttexture2DCompare( shadowMap, cubeToUV( bd3D + offset.xyy, texelSize.y ), dp ) +\n\t\t\t\ttexture2DCompare( shadowMap, cubeToUV( bd3D + offset.yyy, texelSize.y ), dp ) +\n\t\t\t\ttexture2DCompare( shadowMap, cubeToUV( bd3D + offset.xyx, texelSize.y ), dp ) +\n\t\t\t\ttexture2DCompare( shadowMap, cubeToUV( bd3D + offset.yyx, texelSize.y ), dp ) +\n\t\t\t\ttexture2DCompare( shadowMap, cubeToUV( bd3D, texelSize.y ), dp ) +\n\t\t\t\ttexture2DCompare( shadowMap, cubeToUV( bd3D + offset.xxy, texelSize.y ), dp ) +\n\t\t\t\ttexture2DCompare( shadowMap, cubeToUV( bd3D + offset.yxy, texelSize.y ), dp ) +\n\t\t\t\ttexture2DCompare( shadowMap, cubeToUV( bd3D + offset.xxx, texelSize.y ), dp ) +\n\t\t\t\ttexture2DCompare( shadowMap, cubeToUV( bd3D + offset.yxx, texelSize.y ), dp )\n\t\t\t) * ( 1.0 / 9.0 );\n\t\t#else\n\t\t\treturn texture2DCompare( shadowMap, cubeToUV( bd3D, texelSize.y ), dp );\n\t\t#endif\n\t}\n#endif"; + + var shadowmap_pars_vertex = "#ifdef USE_SHADOWMAP\n\t#if NUM_DIR_LIGHT_SHADOWS > 0\n\t\tuniform mat4 directionalShadowMatrix[ NUM_DIR_LIGHT_SHADOWS ];\n\t\tvarying vec4 vDirectionalShadowCoord[ NUM_DIR_LIGHT_SHADOWS ];\n\t\tstruct DirectionalLightShadow {\n\t\t\tfloat shadowBias;\n\t\t\tfloat shadowNormalBias;\n\t\t\tfloat shadowRadius;\n\t\t\tvec2 shadowMapSize;\n\t\t};\n\t\tuniform DirectionalLightShadow directionalLightShadows[ NUM_DIR_LIGHT_SHADOWS ];\n\t#endif\n\t#if NUM_SPOT_LIGHT_SHADOWS > 0\n\t\tuniform mat4 spotShadowMatrix[ NUM_SPOT_LIGHT_SHADOWS ];\n\t\tvarying vec4 vSpotShadowCoord[ NUM_SPOT_LIGHT_SHADOWS ];\n\t\tstruct SpotLightShadow {\n\t\t\tfloat shadowBias;\n\t\t\tfloat shadowNormalBias;\n\t\t\tfloat shadowRadius;\n\t\t\tvec2 shadowMapSize;\n\t\t};\n\t\tuniform SpotLightShadow spotLightShadows[ NUM_SPOT_LIGHT_SHADOWS ];\n\t#endif\n\t#if NUM_POINT_LIGHT_SHADOWS > 0\n\t\tuniform mat4 pointShadowMatrix[ NUM_POINT_LIGHT_SHADOWS ];\n\t\tvarying vec4 vPointShadowCoord[ NUM_POINT_LIGHT_SHADOWS ];\n\t\tstruct PointLightShadow {\n\t\t\tfloat shadowBias;\n\t\t\tfloat shadowNormalBias;\n\t\t\tfloat shadowRadius;\n\t\t\tvec2 shadowMapSize;\n\t\t\tfloat shadowCameraNear;\n\t\t\tfloat shadowCameraFar;\n\t\t};\n\t\tuniform PointLightShadow pointLightShadows[ NUM_POINT_LIGHT_SHADOWS ];\n\t#endif\n#endif"; + + var shadowmap_vertex = "#ifdef USE_SHADOWMAP\n\t#if NUM_DIR_LIGHT_SHADOWS > 0 || NUM_SPOT_LIGHT_SHADOWS > 0 || NUM_POINT_LIGHT_SHADOWS > 0\n\t\tvec3 shadowWorldNormal = inverseTransformDirection( transformedNormal, viewMatrix );\n\t\tvec4 shadowWorldPosition;\n\t#endif\n\t#if NUM_DIR_LIGHT_SHADOWS > 0\n\t#pragma unroll_loop_start\n\tfor ( int i = 0; i < NUM_DIR_LIGHT_SHADOWS; i ++ ) {\n\t\tshadowWorldPosition = worldPosition + vec4( shadowWorldNormal * directionalLightShadows[ i ].shadowNormalBias, 0 );\n\t\tvDirectionalShadowCoord[ i ] = directionalShadowMatrix[ i ] * shadowWorldPosition;\n\t}\n\t#pragma unroll_loop_end\n\t#endif\n\t#if NUM_SPOT_LIGHT_SHADOWS > 0\n\t#pragma unroll_loop_start\n\tfor ( int i = 0; i < NUM_SPOT_LIGHT_SHADOWS; i ++ ) {\n\t\tshadowWorldPosition = worldPosition + vec4( shadowWorldNormal * spotLightShadows[ i ].shadowNormalBias, 0 );\n\t\tvSpotShadowCoord[ i ] = spotShadowMatrix[ i ] * shadowWorldPosition;\n\t}\n\t#pragma unroll_loop_end\n\t#endif\n\t#if NUM_POINT_LIGHT_SHADOWS > 0\n\t#pragma unroll_loop_start\n\tfor ( int i = 0; i < NUM_POINT_LIGHT_SHADOWS; i ++ ) {\n\t\tshadowWorldPosition = worldPosition + vec4( shadowWorldNormal * pointLightShadows[ i ].shadowNormalBias, 0 );\n\t\tvPointShadowCoord[ i ] = pointShadowMatrix[ i ] * shadowWorldPosition;\n\t}\n\t#pragma unroll_loop_end\n\t#endif\n#endif"; + + var shadowmask_pars_fragment = "float getShadowMask() {\n\tfloat shadow = 1.0;\n\t#ifdef USE_SHADOWMAP\n\t#if NUM_DIR_LIGHT_SHADOWS > 0\n\tDirectionalLightShadow directionalLight;\n\t#pragma unroll_loop_start\n\tfor ( int i = 0; i < NUM_DIR_LIGHT_SHADOWS; i ++ ) {\n\t\tdirectionalLight = directionalLightShadows[ i ];\n\t\tshadow *= receiveShadow ? getShadow( directionalShadowMap[ i ], directionalLight.shadowMapSize, directionalLight.shadowBias, directionalLight.shadowRadius, vDirectionalShadowCoord[ i ] ) : 1.0;\n\t}\n\t#pragma unroll_loop_end\n\t#endif\n\t#if NUM_SPOT_LIGHT_SHADOWS > 0\n\tSpotLightShadow spotLight;\n\t#pragma unroll_loop_start\n\tfor ( int i = 0; i < NUM_SPOT_LIGHT_SHADOWS; i ++ ) {\n\t\tspotLight = spotLightShadows[ i ];\n\t\tshadow *= receiveShadow ? getShadow( spotShadowMap[ i ], spotLight.shadowMapSize, spotLight.shadowBias, spotLight.shadowRadius, vSpotShadowCoord[ i ] ) : 1.0;\n\t}\n\t#pragma unroll_loop_end\n\t#endif\n\t#if NUM_POINT_LIGHT_SHADOWS > 0\n\tPointLightShadow pointLight;\n\t#pragma unroll_loop_start\n\tfor ( int i = 0; i < NUM_POINT_LIGHT_SHADOWS; i ++ ) {\n\t\tpointLight = pointLightShadows[ i ];\n\t\tshadow *= receiveShadow ? getPointShadow( pointShadowMap[ i ], pointLight.shadowMapSize, pointLight.shadowBias, pointLight.shadowRadius, vPointShadowCoord[ i ], pointLight.shadowCameraNear, pointLight.shadowCameraFar ) : 1.0;\n\t}\n\t#pragma unroll_loop_end\n\t#endif\n\t#endif\n\treturn shadow;\n}"; + + var skinbase_vertex = "#ifdef USE_SKINNING\n\tmat4 boneMatX = getBoneMatrix( skinIndex.x );\n\tmat4 boneMatY = getBoneMatrix( skinIndex.y );\n\tmat4 boneMatZ = getBoneMatrix( skinIndex.z );\n\tmat4 boneMatW = getBoneMatrix( skinIndex.w );\n#endif"; + + var skinning_pars_vertex = "#ifdef USE_SKINNING\n\tuniform mat4 bindMatrix;\n\tuniform mat4 bindMatrixInverse;\n\t#ifdef BONE_TEXTURE\n\t\tuniform highp sampler2D boneTexture;\n\t\tuniform int boneTextureSize;\n\t\tmat4 getBoneMatrix( const in float i ) {\n\t\t\tfloat j = i * 4.0;\n\t\t\tfloat x = mod( j, float( boneTextureSize ) );\n\t\t\tfloat y = floor( j / float( boneTextureSize ) );\n\t\t\tfloat dx = 1.0 / float( boneTextureSize );\n\t\t\tfloat dy = 1.0 / float( boneTextureSize );\n\t\t\ty = dy * ( y + 0.5 );\n\t\t\tvec4 v1 = texture2D( boneTexture, vec2( dx * ( x + 0.5 ), y ) );\n\t\t\tvec4 v2 = texture2D( boneTexture, vec2( dx * ( x + 1.5 ), y ) );\n\t\t\tvec4 v3 = texture2D( boneTexture, vec2( dx * ( x + 2.5 ), y ) );\n\t\t\tvec4 v4 = texture2D( boneTexture, vec2( dx * ( x + 3.5 ), y ) );\n\t\t\tmat4 bone = mat4( v1, v2, v3, v4 );\n\t\t\treturn bone;\n\t\t}\n\t#else\n\t\tuniform mat4 boneMatrices[ MAX_BONES ];\n\t\tmat4 getBoneMatrix( const in float i ) {\n\t\t\tmat4 bone = boneMatrices[ int(i) ];\n\t\t\treturn bone;\n\t\t}\n\t#endif\n#endif"; + + var skinning_vertex = "#ifdef USE_SKINNING\n\tvec4 skinVertex = bindMatrix * vec4( transformed, 1.0 );\n\tvec4 skinned = vec4( 0.0 );\n\tskinned += boneMatX * skinVertex * skinWeight.x;\n\tskinned += boneMatY * skinVertex * skinWeight.y;\n\tskinned += boneMatZ * skinVertex * skinWeight.z;\n\tskinned += boneMatW * skinVertex * skinWeight.w;\n\ttransformed = ( bindMatrixInverse * skinned ).xyz;\n#endif"; + + var skinnormal_vertex = "#ifdef USE_SKINNING\n\tmat4 skinMatrix = mat4( 0.0 );\n\tskinMatrix += skinWeight.x * boneMatX;\n\tskinMatrix += skinWeight.y * boneMatY;\n\tskinMatrix += skinWeight.z * boneMatZ;\n\tskinMatrix += skinWeight.w * boneMatW;\n\tskinMatrix = bindMatrixInverse * skinMatrix * bindMatrix;\n\tobjectNormal = vec4( skinMatrix * vec4( objectNormal, 0.0 ) ).xyz;\n\t#ifdef USE_TANGENT\n\t\tobjectTangent = vec4( skinMatrix * vec4( objectTangent, 0.0 ) ).xyz;\n\t#endif\n#endif"; + + var specularmap_fragment = "float specularStrength;\n#ifdef USE_SPECULARMAP\n\tvec4 texelSpecular = texture2D( specularMap, vUv );\n\tspecularStrength = texelSpecular.r;\n#else\n\tspecularStrength = 1.0;\n#endif"; + + var specularmap_pars_fragment = "#ifdef USE_SPECULARMAP\n\tuniform sampler2D specularMap;\n#endif"; + + var tonemapping_fragment = "#if defined( TONE_MAPPING )\n\tgl_FragColor.rgb = toneMapping( gl_FragColor.rgb );\n#endif"; + + var tonemapping_pars_fragment = "#ifndef saturate\n#define saturate(a) clamp( a, 0.0, 1.0 )\n#endif\nuniform float toneMappingExposure;\nvec3 LinearToneMapping( vec3 color ) {\n\treturn toneMappingExposure * color;\n}\nvec3 ReinhardToneMapping( vec3 color ) {\n\tcolor *= toneMappingExposure;\n\treturn saturate( color / ( vec3( 1.0 ) + color ) );\n}\nvec3 OptimizedCineonToneMapping( vec3 color ) {\n\tcolor *= toneMappingExposure;\n\tcolor = max( vec3( 0.0 ), color - 0.004 );\n\treturn pow( ( color * ( 6.2 * color + 0.5 ) ) / ( color * ( 6.2 * color + 1.7 ) + 0.06 ), vec3( 2.2 ) );\n}\nvec3 RRTAndODTFit( vec3 v ) {\n\tvec3 a = v * ( v + 0.0245786 ) - 0.000090537;\n\tvec3 b = v * ( 0.983729 * v + 0.4329510 ) + 0.238081;\n\treturn a / b;\n}\nvec3 ACESFilmicToneMapping( vec3 color ) {\n\tconst mat3 ACESInputMat = mat3(\n\t\tvec3( 0.59719, 0.07600, 0.02840 ),\t\tvec3( 0.35458, 0.90834, 0.13383 ),\n\t\tvec3( 0.04823, 0.01566, 0.83777 )\n\t);\n\tconst mat3 ACESOutputMat = mat3(\n\t\tvec3( 1.60475, -0.10208, -0.00327 ),\t\tvec3( -0.53108, 1.10813, -0.07276 ),\n\t\tvec3( -0.07367, -0.00605, 1.07602 )\n\t);\n\tcolor *= toneMappingExposure / 0.6;\n\tcolor = ACESInputMat * color;\n\tcolor = RRTAndODTFit( color );\n\tcolor = ACESOutputMat * color;\n\treturn saturate( color );\n}\nvec3 CustomToneMapping( vec3 color ) { return color; }"; + + var transmissionmap_fragment = "#ifdef USE_TRANSMISSIONMAP\n\ttotalTransmission *= texture2D( transmissionMap, vUv ).r;\n#endif"; + + var transmissionmap_pars_fragment = "#ifdef USE_TRANSMISSIONMAP\n\tuniform sampler2D transmissionMap;\n#endif"; + + var uv_pars_fragment = "#if ( defined( USE_UV ) && ! defined( UVS_VERTEX_ONLY ) )\n\tvarying vec2 vUv;\n#endif"; + + var uv_pars_vertex = "#ifdef USE_UV\n\t#ifdef UVS_VERTEX_ONLY\n\t\tvec2 vUv;\n\t#else\n\t\tvarying vec2 vUv;\n\t#endif\n\tuniform mat3 uvTransform;\n#endif"; + + var uv_vertex = "#ifdef USE_UV\n\tvUv = ( uvTransform * vec3( uv, 1 ) ).xy;\n#endif"; + + var uv2_pars_fragment = "#if defined( USE_LIGHTMAP ) || defined( USE_AOMAP )\n\tvarying vec2 vUv2;\n#endif"; + + var uv2_pars_vertex = "#if defined( USE_LIGHTMAP ) || defined( USE_AOMAP )\n\tattribute vec2 uv2;\n\tvarying vec2 vUv2;\n\tuniform mat3 uv2Transform;\n#endif"; + + var uv2_vertex = "#if defined( USE_LIGHTMAP ) || defined( USE_AOMAP )\n\tvUv2 = ( uv2Transform * vec3( uv2, 1 ) ).xy;\n#endif"; + + var worldpos_vertex = "#if defined( USE_ENVMAP ) || defined( DISTANCE ) || defined ( USE_SHADOWMAP )\n\tvec4 worldPosition = vec4( transformed, 1.0 );\n\t#ifdef USE_INSTANCING\n\t\tworldPosition = instanceMatrix * worldPosition;\n\t#endif\n\tworldPosition = modelMatrix * worldPosition;\n#endif"; + + var background_frag = "uniform sampler2D t2D;\nvarying vec2 vUv;\nvoid main() {\n\tvec4 texColor = texture2D( t2D, vUv );\n\tgl_FragColor = mapTexelToLinear( texColor );\n\t#include \n\t#include \n}"; + + var background_vert = "varying vec2 vUv;\nuniform mat3 uvTransform;\nvoid main() {\n\tvUv = ( uvTransform * vec3( uv, 1 ) ).xy;\n\tgl_Position = vec4( position.xy, 1.0, 1.0 );\n}"; + + var cube_frag = "#include \nuniform float opacity;\nvarying vec3 vWorldDirection;\n#include \nvoid main() {\n\tvec3 vReflect = vWorldDirection;\n\t#include \n\tgl_FragColor = envColor;\n\tgl_FragColor.a *= opacity;\n\t#include \n\t#include \n}"; + + var cube_vert = "varying vec3 vWorldDirection;\n#include \nvoid main() {\n\tvWorldDirection = transformDirection( position, modelMatrix );\n\t#include \n\t#include \n\tgl_Position.z = gl_Position.w;\n}"; + + var depth_frag = "#if DEPTH_PACKING == 3200\n\tuniform float opacity;\n#endif\n#include \n#include \n#include \n#include \n#include \n#include \n#include \nvarying vec2 vHighPrecisionZW;\nvoid main() {\n\t#include \n\tvec4 diffuseColor = vec4( 1.0 );\n\t#if DEPTH_PACKING == 3200\n\t\tdiffuseColor.a = opacity;\n\t#endif\n\t#include \n\t#include \n\t#include \n\t#include \n\tfloat fragCoordZ = 0.5 * vHighPrecisionZW[0] / vHighPrecisionZW[1] + 0.5;\n\t#if DEPTH_PACKING == 3200\n\t\tgl_FragColor = vec4( vec3( 1.0 - fragCoordZ ), opacity );\n\t#elif DEPTH_PACKING == 3201\n\t\tgl_FragColor = packDepthToRGBA( fragCoordZ );\n\t#endif\n}"; + + var depth_vert = "#include \n#include \n#include \n#include \n#include \n#include \n#include \nvarying vec2 vHighPrecisionZW;\nvoid main() {\n\t#include \n\t#include \n\t#ifdef USE_DISPLACEMENTMAP\n\t\t#include \n\t\t#include \n\t\t#include \n\t#endif\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\tvHighPrecisionZW = gl_Position.zw;\n}"; + + var distanceRGBA_frag = "#define DISTANCE\nuniform vec3 referencePosition;\nuniform float nearDistance;\nuniform float farDistance;\nvarying vec3 vWorldPosition;\n#include \n#include \n#include \n#include \n#include \n#include \nvoid main () {\n\t#include \n\tvec4 diffuseColor = vec4( 1.0 );\n\t#include \n\t#include \n\t#include \n\tfloat dist = length( vWorldPosition - referencePosition );\n\tdist = ( dist - nearDistance ) / ( farDistance - nearDistance );\n\tdist = saturate( dist );\n\tgl_FragColor = packDepthToRGBA( dist );\n}"; + + var distanceRGBA_vert = "#define DISTANCE\nvarying vec3 vWorldPosition;\n#include \n#include \n#include \n#include \n#include \n#include \nvoid main() {\n\t#include \n\t#include \n\t#ifdef USE_DISPLACEMENTMAP\n\t\t#include \n\t\t#include \n\t\t#include \n\t#endif\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\tvWorldPosition = worldPosition.xyz;\n}"; + + var equirect_frag = "uniform sampler2D tEquirect;\nvarying vec3 vWorldDirection;\n#include \nvoid main() {\n\tvec3 direction = normalize( vWorldDirection );\n\tvec2 sampleUV = equirectUv( direction );\n\tvec4 texColor = texture2D( tEquirect, sampleUV );\n\tgl_FragColor = mapTexelToLinear( texColor );\n\t#include \n\t#include \n}"; + + var equirect_vert = "varying vec3 vWorldDirection;\n#include \nvoid main() {\n\tvWorldDirection = transformDirection( position, modelMatrix );\n\t#include \n\t#include \n}"; + + var linedashed_frag = "uniform vec3 diffuse;\nuniform float opacity;\nuniform float dashSize;\nuniform float totalSize;\nvarying float vLineDistance;\n#include \n#include \n#include \n#include \n#include \nvoid main() {\n\t#include \n\tif ( mod( vLineDistance, totalSize ) > dashSize ) {\n\t\tdiscard;\n\t}\n\tvec3 outgoingLight = vec3( 0.0 );\n\tvec4 diffuseColor = vec4( diffuse, opacity );\n\t#include \n\t#include \n\toutgoingLight = diffuseColor.rgb;\n\tgl_FragColor = vec4( outgoingLight, diffuseColor.a );\n\t#include \n\t#include \n\t#include \n\t#include \n}"; + + var linedashed_vert = "uniform float scale;\nattribute float lineDistance;\nvarying float vLineDistance;\n#include \n#include \n#include \n#include \n#include \n#include \nvoid main() {\n\tvLineDistance = scale * lineDistance;\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n}"; + + var meshbasic_frag = "uniform vec3 diffuse;\nuniform float opacity;\n#ifndef FLAT_SHADED\n\tvarying vec3 vNormal;\n#endif\n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \nvoid main() {\n\t#include \n\tvec4 diffuseColor = vec4( diffuse, opacity );\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\tReflectedLight reflectedLight = ReflectedLight( vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ) );\n\t#ifdef USE_LIGHTMAP\n\t\n\t\tvec4 lightMapTexel= texture2D( lightMap, vUv2 );\n\t\treflectedLight.indirectDiffuse += lightMapTexelToLinear( lightMapTexel ).rgb * lightMapIntensity;\n\t#else\n\t\treflectedLight.indirectDiffuse += vec3( 1.0 );\n\t#endif\n\t#include \n\treflectedLight.indirectDiffuse *= diffuseColor.rgb;\n\tvec3 outgoingLight = reflectedLight.indirectDiffuse;\n\t#include \n\tgl_FragColor = vec4( outgoingLight, diffuseColor.a );\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n}"; + + var meshbasic_vert = "#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \nvoid main() {\n\t#include \n\t#include \n\t#include \n\t#include \n\t#ifdef USE_ENVMAP\n\t#include \n\t#include \n\t#include \n\t#include \n\t#endif\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n}"; + + var meshlambert_frag = "uniform vec3 diffuse;\nuniform vec3 emissive;\nuniform float opacity;\nvarying vec3 vLightFront;\nvarying vec3 vIndirectFront;\n#ifdef DOUBLE_SIDED\n\tvarying vec3 vLightBack;\n\tvarying vec3 vIndirectBack;\n#endif\n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \nvoid main() {\n\t#include \n\tvec4 diffuseColor = vec4( diffuse, opacity );\n\tReflectedLight reflectedLight = ReflectedLight( vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ) );\n\tvec3 totalEmissiveRadiance = emissive;\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#ifdef DOUBLE_SIDED\n\t\treflectedLight.indirectDiffuse += ( gl_FrontFacing ) ? vIndirectFront : vIndirectBack;\n\t#else\n\t\treflectedLight.indirectDiffuse += vIndirectFront;\n\t#endif\n\t#include \n\treflectedLight.indirectDiffuse *= BRDF_Diffuse_Lambert( diffuseColor.rgb );\n\t#ifdef DOUBLE_SIDED\n\t\treflectedLight.directDiffuse = ( gl_FrontFacing ) ? vLightFront : vLightBack;\n\t#else\n\t\treflectedLight.directDiffuse = vLightFront;\n\t#endif\n\treflectedLight.directDiffuse *= BRDF_Diffuse_Lambert( diffuseColor.rgb ) * getShadowMask();\n\t#include \n\tvec3 outgoingLight = reflectedLight.directDiffuse + reflectedLight.indirectDiffuse + totalEmissiveRadiance;\n\t#include \n\tgl_FragColor = vec4( outgoingLight, diffuseColor.a );\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n}"; + + var meshlambert_vert = "#define LAMBERT\nvarying vec3 vLightFront;\nvarying vec3 vIndirectFront;\n#ifdef DOUBLE_SIDED\n\tvarying vec3 vLightBack;\n\tvarying vec3 vIndirectBack;\n#endif\n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \nvoid main() {\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n}"; + + var meshmatcap_frag = "#define MATCAP\nuniform vec3 diffuse;\nuniform float opacity;\nuniform sampler2D matcap;\nvarying vec3 vViewPosition;\n#ifndef FLAT_SHADED\n\tvarying vec3 vNormal;\n#endif\n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \nvoid main() {\n\t#include \n\tvec4 diffuseColor = vec4( diffuse, opacity );\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\tvec3 viewDir = normalize( vViewPosition );\n\tvec3 x = normalize( vec3( viewDir.z, 0.0, - viewDir.x ) );\n\tvec3 y = cross( viewDir, x );\n\tvec2 uv = vec2( dot( x, normal ), dot( y, normal ) ) * 0.495 + 0.5;\n\t#ifdef USE_MATCAP\n\t\tvec4 matcapColor = texture2D( matcap, uv );\n\t\tmatcapColor = matcapTexelToLinear( matcapColor );\n\t#else\n\t\tvec4 matcapColor = vec4( 1.0 );\n\t#endif\n\tvec3 outgoingLight = diffuseColor.rgb * matcapColor.rgb;\n\tgl_FragColor = vec4( outgoingLight, diffuseColor.a );\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n}"; + + var meshmatcap_vert = "#define MATCAP\nvarying vec3 vViewPosition;\n#ifndef FLAT_SHADED\n\tvarying vec3 vNormal;\n#endif\n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \nvoid main() {\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#ifndef FLAT_SHADED\n\t\tvNormal = normalize( transformedNormal );\n\t#endif\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\tvViewPosition = - mvPosition.xyz;\n}"; + + var meshtoon_frag = "#define TOON\nuniform vec3 diffuse;\nuniform vec3 emissive;\nuniform float opacity;\n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \nvoid main() {\n\t#include \n\tvec4 diffuseColor = vec4( diffuse, opacity );\n\tReflectedLight reflectedLight = ReflectedLight( vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ) );\n\tvec3 totalEmissiveRadiance = emissive;\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\tvec3 outgoingLight = reflectedLight.directDiffuse + reflectedLight.indirectDiffuse + totalEmissiveRadiance;\n\tgl_FragColor = vec4( outgoingLight, diffuseColor.a );\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n}"; + + var meshtoon_vert = "#define TOON\nvarying vec3 vViewPosition;\n#ifndef FLAT_SHADED\n\tvarying vec3 vNormal;\n#endif\n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \nvoid main() {\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n#ifndef FLAT_SHADED\n\tvNormal = normalize( transformedNormal );\n#endif\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\tvViewPosition = - mvPosition.xyz;\n\t#include \n\t#include \n\t#include \n}"; + + var meshphong_frag = "#define PHONG\nuniform vec3 diffuse;\nuniform vec3 emissive;\nuniform vec3 specular;\nuniform float shininess;\nuniform float opacity;\n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \nvoid main() {\n\t#include \n\tvec4 diffuseColor = vec4( diffuse, opacity );\n\tReflectedLight reflectedLight = ReflectedLight( vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ) );\n\tvec3 totalEmissiveRadiance = emissive;\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\tvec3 outgoingLight = reflectedLight.directDiffuse + reflectedLight.indirectDiffuse + reflectedLight.directSpecular + reflectedLight.indirectSpecular + totalEmissiveRadiance;\n\t#include \n\tgl_FragColor = vec4( outgoingLight, diffuseColor.a );\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n}"; + + var meshphong_vert = "#define PHONG\nvarying vec3 vViewPosition;\n#ifndef FLAT_SHADED\n\tvarying vec3 vNormal;\n#endif\n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \nvoid main() {\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n#ifndef FLAT_SHADED\n\tvNormal = normalize( transformedNormal );\n#endif\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\tvViewPosition = - mvPosition.xyz;\n\t#include \n\t#include \n\t#include \n\t#include \n}"; + + var meshphysical_frag = "#define STANDARD\n#ifdef PHYSICAL\n\t#define REFLECTIVITY\n\t#define CLEARCOAT\n\t#define TRANSMISSION\n#endif\nuniform vec3 diffuse;\nuniform vec3 emissive;\nuniform float roughness;\nuniform float metalness;\nuniform float opacity;\n#ifdef TRANSMISSION\n\tuniform float transmission;\n#endif\n#ifdef REFLECTIVITY\n\tuniform float reflectivity;\n#endif\n#ifdef CLEARCOAT\n\tuniform float clearcoat;\n\tuniform float clearcoatRoughness;\n#endif\n#ifdef USE_SHEEN\n\tuniform vec3 sheen;\n#endif\nvarying vec3 vViewPosition;\n#ifndef FLAT_SHADED\n\tvarying vec3 vNormal;\n\t#ifdef USE_TANGENT\n\t\tvarying vec3 vTangent;\n\t\tvarying vec3 vBitangent;\n\t#endif\n#endif\n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \nvoid main() {\n\t#include \n\tvec4 diffuseColor = vec4( diffuse, opacity );\n\tReflectedLight reflectedLight = ReflectedLight( vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ) );\n\tvec3 totalEmissiveRadiance = emissive;\n\t#ifdef TRANSMISSION\n\t\tfloat totalTransmission = transmission;\n\t#endif\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\tvec3 outgoingLight = reflectedLight.directDiffuse + reflectedLight.indirectDiffuse + reflectedLight.directSpecular + reflectedLight.indirectSpecular + totalEmissiveRadiance;\n\t#ifdef TRANSMISSION\n\t\tdiffuseColor.a *= saturate( 1. - totalTransmission + linearToRelativeLuminance( reflectedLight.directSpecular + reflectedLight.indirectSpecular ) );\n\t#endif\n\tgl_FragColor = vec4( outgoingLight, diffuseColor.a );\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n}"; + + var meshphysical_vert = "#define STANDARD\nvarying vec3 vViewPosition;\n#ifndef FLAT_SHADED\n\tvarying vec3 vNormal;\n\t#ifdef USE_TANGENT\n\t\tvarying vec3 vTangent;\n\t\tvarying vec3 vBitangent;\n\t#endif\n#endif\n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \nvoid main() {\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n#ifndef FLAT_SHADED\n\tvNormal = normalize( transformedNormal );\n\t#ifdef USE_TANGENT\n\t\tvTangent = normalize( transformedTangent );\n\t\tvBitangent = normalize( cross( vNormal, vTangent ) * tangent.w );\n\t#endif\n#endif\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\tvViewPosition = - mvPosition.xyz;\n\t#include \n\t#include \n\t#include \n}"; + + var normal_frag = "#define NORMAL\nuniform float opacity;\n#if defined( FLAT_SHADED ) || defined( USE_BUMPMAP ) || defined( TANGENTSPACE_NORMALMAP )\n\tvarying vec3 vViewPosition;\n#endif\n#ifndef FLAT_SHADED\n\tvarying vec3 vNormal;\n\t#ifdef USE_TANGENT\n\t\tvarying vec3 vTangent;\n\t\tvarying vec3 vBitangent;\n\t#endif\n#endif\n#include \n#include \n#include \n#include \n#include \n#include \nvoid main() {\n\t#include \n\t#include \n\t#include \n\t#include \n\tgl_FragColor = vec4( packNormalToRGB( normal ), opacity );\n}"; + + var normal_vert = "#define NORMAL\n#if defined( FLAT_SHADED ) || defined( USE_BUMPMAP ) || defined( TANGENTSPACE_NORMALMAP )\n\tvarying vec3 vViewPosition;\n#endif\n#ifndef FLAT_SHADED\n\tvarying vec3 vNormal;\n\t#ifdef USE_TANGENT\n\t\tvarying vec3 vTangent;\n\t\tvarying vec3 vBitangent;\n\t#endif\n#endif\n#include \n#include \n#include \n#include \n#include \n#include \n#include \nvoid main() {\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n#ifndef FLAT_SHADED\n\tvNormal = normalize( transformedNormal );\n\t#ifdef USE_TANGENT\n\t\tvTangent = normalize( transformedTangent );\n\t\tvBitangent = normalize( cross( vNormal, vTangent ) * tangent.w );\n\t#endif\n#endif\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n#if defined( FLAT_SHADED ) || defined( USE_BUMPMAP ) || defined( TANGENTSPACE_NORMALMAP )\n\tvViewPosition = - mvPosition.xyz;\n#endif\n}"; + + var points_frag = "uniform vec3 diffuse;\nuniform float opacity;\n#include \n#include \n#include \n#include \n#include \n#include \nvoid main() {\n\t#include \n\tvec3 outgoingLight = vec3( 0.0 );\n\tvec4 diffuseColor = vec4( diffuse, opacity );\n\t#include \n\t#include \n\t#include \n\t#include \n\toutgoingLight = diffuseColor.rgb;\n\tgl_FragColor = vec4( outgoingLight, diffuseColor.a );\n\t#include \n\t#include \n\t#include \n\t#include \n}"; + + var points_vert = "uniform float size;\nuniform float scale;\n#include \n#include \n#include \n#include \n#include \n#include \nvoid main() {\n\t#include \n\t#include \n\t#include \n\t#include \n\tgl_PointSize = size;\n\t#ifdef USE_SIZEATTENUATION\n\t\tbool isPerspective = isPerspectiveMatrix( projectionMatrix );\n\t\tif ( isPerspective ) gl_PointSize *= ( scale / - mvPosition.z );\n\t#endif\n\t#include \n\t#include \n\t#include \n\t#include \n}"; + + var shadow_frag = "uniform vec3 color;\nuniform float opacity;\n#include \n#include \n#include \n#include \n#include \n#include \n#include \nvoid main() {\n\tgl_FragColor = vec4( color, opacity * ( 1.0 - getShadowMask() ) );\n\t#include \n\t#include \n\t#include \n}"; + + var shadow_vert = "#include \n#include \n#include \nvoid main() {\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n}"; + + var sprite_frag = "uniform vec3 diffuse;\nuniform float opacity;\n#include \n#include \n#include \n#include \n#include \n#include \n#include \nvoid main() {\n\t#include \n\tvec3 outgoingLight = vec3( 0.0 );\n\tvec4 diffuseColor = vec4( diffuse, opacity );\n\t#include \n\t#include \n\t#include \n\t#include \n\toutgoingLight = diffuseColor.rgb;\n\tgl_FragColor = vec4( outgoingLight, diffuseColor.a );\n\t#include \n\t#include \n\t#include \n}"; + + var sprite_vert = "uniform float rotation;\nuniform vec2 center;\n#include \n#include \n#include \n#include \n#include \nvoid main() {\n\t#include \n\tvec4 mvPosition = modelViewMatrix * vec4( 0.0, 0.0, 0.0, 1.0 );\n\tvec2 scale;\n\tscale.x = length( vec3( modelMatrix[ 0 ].x, modelMatrix[ 0 ].y, modelMatrix[ 0 ].z ) );\n\tscale.y = length( vec3( modelMatrix[ 1 ].x, modelMatrix[ 1 ].y, modelMatrix[ 1 ].z ) );\n\t#ifndef USE_SIZEATTENUATION\n\t\tbool isPerspective = isPerspectiveMatrix( projectionMatrix );\n\t\tif ( isPerspective ) scale *= - mvPosition.z;\n\t#endif\n\tvec2 alignedPosition = ( position.xy - ( center - vec2( 0.5 ) ) ) * scale;\n\tvec2 rotatedPosition;\n\trotatedPosition.x = cos( rotation ) * alignedPosition.x - sin( rotation ) * alignedPosition.y;\n\trotatedPosition.y = sin( rotation ) * alignedPosition.x + cos( rotation ) * alignedPosition.y;\n\tmvPosition.xy += rotatedPosition;\n\tgl_Position = projectionMatrix * mvPosition;\n\t#include \n\t#include \n\t#include \n}"; + + var ShaderChunk = { + alphamap_fragment: alphamap_fragment, + alphamap_pars_fragment: alphamap_pars_fragment, + alphatest_fragment: alphatest_fragment, + aomap_fragment: aomap_fragment, + aomap_pars_fragment: aomap_pars_fragment, + begin_vertex: begin_vertex, + beginnormal_vertex: beginnormal_vertex, + bsdfs: bsdfs, + bumpmap_pars_fragment: bumpmap_pars_fragment, + clipping_planes_fragment: clipping_planes_fragment, + clipping_planes_pars_fragment: clipping_planes_pars_fragment, + clipping_planes_pars_vertex: clipping_planes_pars_vertex, + clipping_planes_vertex: clipping_planes_vertex, + color_fragment: color_fragment, + color_pars_fragment: color_pars_fragment, + color_pars_vertex: color_pars_vertex, + color_vertex: color_vertex, + common: common, + cube_uv_reflection_fragment: cube_uv_reflection_fragment, + defaultnormal_vertex: defaultnormal_vertex, + displacementmap_pars_vertex: displacementmap_pars_vertex, + displacementmap_vertex: displacementmap_vertex, + emissivemap_fragment: emissivemap_fragment, + emissivemap_pars_fragment: emissivemap_pars_fragment, + encodings_fragment: encodings_fragment, + encodings_pars_fragment: encodings_pars_fragment, + envmap_fragment: envmap_fragment, + envmap_common_pars_fragment: envmap_common_pars_fragment, + envmap_pars_fragment: envmap_pars_fragment, + envmap_pars_vertex: envmap_pars_vertex, + envmap_physical_pars_fragment: envmap_physical_pars_fragment, + envmap_vertex: envmap_vertex, + fog_vertex: fog_vertex, + fog_pars_vertex: fog_pars_vertex, + fog_fragment: fog_fragment, + fog_pars_fragment: fog_pars_fragment, + gradientmap_pars_fragment: gradientmap_pars_fragment, + lightmap_fragment: lightmap_fragment, + lightmap_pars_fragment: lightmap_pars_fragment, + lights_lambert_vertex: lights_lambert_vertex, + lights_pars_begin: lights_pars_begin, + lights_toon_fragment: lights_toon_fragment, + lights_toon_pars_fragment: lights_toon_pars_fragment, + lights_phong_fragment: lights_phong_fragment, + lights_phong_pars_fragment: lights_phong_pars_fragment, + lights_physical_fragment: lights_physical_fragment, + lights_physical_pars_fragment: lights_physical_pars_fragment, + lights_fragment_begin: lights_fragment_begin, + lights_fragment_maps: lights_fragment_maps, + lights_fragment_end: lights_fragment_end, + logdepthbuf_fragment: logdepthbuf_fragment, + logdepthbuf_pars_fragment: logdepthbuf_pars_fragment, + logdepthbuf_pars_vertex: logdepthbuf_pars_vertex, + logdepthbuf_vertex: logdepthbuf_vertex, + map_fragment: map_fragment, + map_pars_fragment: map_pars_fragment, + map_particle_fragment: map_particle_fragment, + map_particle_pars_fragment: map_particle_pars_fragment, + metalnessmap_fragment: metalnessmap_fragment, + metalnessmap_pars_fragment: metalnessmap_pars_fragment, + morphnormal_vertex: morphnormal_vertex, + morphtarget_pars_vertex: morphtarget_pars_vertex, + morphtarget_vertex: morphtarget_vertex, + normal_fragment_begin: normal_fragment_begin, + normal_fragment_maps: normal_fragment_maps, + normalmap_pars_fragment: normalmap_pars_fragment, + clearcoat_normal_fragment_begin: clearcoat_normal_fragment_begin, + clearcoat_normal_fragment_maps: clearcoat_normal_fragment_maps, + clearcoat_pars_fragment: clearcoat_pars_fragment, + packing: packing, + premultiplied_alpha_fragment: premultiplied_alpha_fragment, + project_vertex: project_vertex, + dithering_fragment: dithering_fragment, + dithering_pars_fragment: dithering_pars_fragment, + roughnessmap_fragment: roughnessmap_fragment, + roughnessmap_pars_fragment: roughnessmap_pars_fragment, + shadowmap_pars_fragment: shadowmap_pars_fragment, + shadowmap_pars_vertex: shadowmap_pars_vertex, + shadowmap_vertex: shadowmap_vertex, + shadowmask_pars_fragment: shadowmask_pars_fragment, + skinbase_vertex: skinbase_vertex, + skinning_pars_vertex: skinning_pars_vertex, + skinning_vertex: skinning_vertex, + skinnormal_vertex: skinnormal_vertex, + specularmap_fragment: specularmap_fragment, + specularmap_pars_fragment: specularmap_pars_fragment, + tonemapping_fragment: tonemapping_fragment, + tonemapping_pars_fragment: tonemapping_pars_fragment, + transmissionmap_fragment: transmissionmap_fragment, + transmissionmap_pars_fragment: transmissionmap_pars_fragment, + uv_pars_fragment: uv_pars_fragment, + uv_pars_vertex: uv_pars_vertex, + uv_vertex: uv_vertex, + uv2_pars_fragment: uv2_pars_fragment, + uv2_pars_vertex: uv2_pars_vertex, + uv2_vertex: uv2_vertex, + worldpos_vertex: worldpos_vertex, + + background_frag: background_frag, + background_vert: background_vert, + cube_frag: cube_frag, + cube_vert: cube_vert, + depth_frag: depth_frag, + depth_vert: depth_vert, + distanceRGBA_frag: distanceRGBA_frag, + distanceRGBA_vert: distanceRGBA_vert, + equirect_frag: equirect_frag, + equirect_vert: equirect_vert, + linedashed_frag: linedashed_frag, + linedashed_vert: linedashed_vert, + meshbasic_frag: meshbasic_frag, + meshbasic_vert: meshbasic_vert, + meshlambert_frag: meshlambert_frag, + meshlambert_vert: meshlambert_vert, + meshmatcap_frag: meshmatcap_frag, + meshmatcap_vert: meshmatcap_vert, + meshtoon_frag: meshtoon_frag, + meshtoon_vert: meshtoon_vert, + meshphong_frag: meshphong_frag, + meshphong_vert: meshphong_vert, + meshphysical_frag: meshphysical_frag, + meshphysical_vert: meshphysical_vert, + normal_frag: normal_frag, + normal_vert: normal_vert, + points_frag: points_frag, + points_vert: points_vert, + shadow_frag: shadow_frag, + shadow_vert: shadow_vert, + sprite_frag: sprite_frag, + sprite_vert: sprite_vert + }; + + /** + * Uniforms library for shared webgl shaders + */ + + var UniformsLib = { + + common: { + + diffuse: { value: new Color( 0xeeeeee ) }, + opacity: { value: 1.0 }, + + map: { value: null }, + uvTransform: { value: new Matrix3() }, + uv2Transform: { value: new Matrix3() }, + + alphaMap: { value: null }, + + }, + + specularmap: { + + specularMap: { value: null }, + + }, + + envmap: { + + envMap: { value: null }, + flipEnvMap: { value: - 1 }, + reflectivity: { value: 1.0 }, + refractionRatio: { value: 0.98 }, + maxMipLevel: { value: 0 } + + }, + + aomap: { + + aoMap: { value: null }, + aoMapIntensity: { value: 1 } + + }, + + lightmap: { + + lightMap: { value: null }, + lightMapIntensity: { value: 1 } + + }, + + emissivemap: { + + emissiveMap: { value: null } + + }, + + bumpmap: { + + bumpMap: { value: null }, + bumpScale: { value: 1 } + + }, + + normalmap: { + + normalMap: { value: null }, + normalScale: { value: new Vector2( 1, 1 ) } + + }, + + displacementmap: { + + displacementMap: { value: null }, + displacementScale: { value: 1 }, + displacementBias: { value: 0 } + + }, + + roughnessmap: { + + roughnessMap: { value: null } + + }, + + metalnessmap: { + + metalnessMap: { value: null } + + }, + + gradientmap: { + + gradientMap: { value: null } + + }, + + fog: { + + fogDensity: { value: 0.00025 }, + fogNear: { value: 1 }, + fogFar: { value: 2000 }, + fogColor: { value: new Color( 0xffffff ) } + + }, + + lights: { + + ambientLightColor: { value: [] }, + + lightProbe: { value: [] }, + + directionalLights: { value: [], properties: { + direction: {}, + color: {} + } }, + + directionalLightShadows: { value: [], properties: { + shadowBias: {}, + shadowNormalBias: {}, + shadowRadius: {}, + shadowMapSize: {} + } }, + + directionalShadowMap: { value: [] }, + directionalShadowMatrix: { value: [] }, + + spotLights: { value: [], properties: { + color: {}, + position: {}, + direction: {}, + distance: {}, + coneCos: {}, + penumbraCos: {}, + decay: {} + } }, + + spotLightShadows: { value: [], properties: { + shadowBias: {}, + shadowNormalBias: {}, + shadowRadius: {}, + shadowMapSize: {} + } }, + + spotShadowMap: { value: [] }, + spotShadowMatrix: { value: [] }, + + pointLights: { value: [], properties: { + color: {}, + position: {}, + decay: {}, + distance: {} + } }, + + pointLightShadows: { value: [], properties: { + shadowBias: {}, + shadowNormalBias: {}, + shadowRadius: {}, + shadowMapSize: {}, + shadowCameraNear: {}, + shadowCameraFar: {} + } }, + + pointShadowMap: { value: [] }, + pointShadowMatrix: { value: [] }, + + hemisphereLights: { value: [], properties: { + direction: {}, + skyColor: {}, + groundColor: {} + } }, + + // TODO (abelnation): RectAreaLight BRDF data needs to be moved from example to main src + rectAreaLights: { value: [], properties: { + color: {}, + position: {}, + width: {}, + height: {} + } }, + + ltc_1: { value: null }, + ltc_2: { value: null } + + }, + + points: { + + diffuse: { value: new Color( 0xeeeeee ) }, + opacity: { value: 1.0 }, + size: { value: 1.0 }, + scale: { value: 1.0 }, + map: { value: null }, + alphaMap: { value: null }, + uvTransform: { value: new Matrix3() } + + }, + + sprite: { + + diffuse: { value: new Color( 0xeeeeee ) }, + opacity: { value: 1.0 }, + center: { value: new Vector2( 0.5, 0.5 ) }, + rotation: { value: 0.0 }, + map: { value: null }, + alphaMap: { value: null }, + uvTransform: { value: new Matrix3() } + + } + + }; + + var ShaderLib = { + + basic: { + + uniforms: mergeUniforms( [ + UniformsLib.common, + UniformsLib.specularmap, + UniformsLib.envmap, + UniformsLib.aomap, + UniformsLib.lightmap, + UniformsLib.fog + ] ), + + vertexShader: ShaderChunk.meshbasic_vert, + fragmentShader: ShaderChunk.meshbasic_frag + + }, + + lambert: { + + uniforms: mergeUniforms( [ + UniformsLib.common, + UniformsLib.specularmap, + UniformsLib.envmap, + UniformsLib.aomap, + UniformsLib.lightmap, + UniformsLib.emissivemap, + UniformsLib.fog, + UniformsLib.lights, + { + emissive: { value: new Color( 0x000000 ) } + } + ] ), + + vertexShader: ShaderChunk.meshlambert_vert, + fragmentShader: ShaderChunk.meshlambert_frag + + }, + + phong: { + + uniforms: mergeUniforms( [ + UniformsLib.common, + UniformsLib.specularmap, + UniformsLib.envmap, + UniformsLib.aomap, + UniformsLib.lightmap, + UniformsLib.emissivemap, + UniformsLib.bumpmap, + UniformsLib.normalmap, + UniformsLib.displacementmap, + UniformsLib.fog, + UniformsLib.lights, + { + emissive: { value: new Color( 0x000000 ) }, + specular: { value: new Color( 0x111111 ) }, + shininess: { value: 30 } + } + ] ), + + vertexShader: ShaderChunk.meshphong_vert, + fragmentShader: ShaderChunk.meshphong_frag + + }, + + standard: { + + uniforms: mergeUniforms( [ + UniformsLib.common, + UniformsLib.envmap, + UniformsLib.aomap, + UniformsLib.lightmap, + UniformsLib.emissivemap, + UniformsLib.bumpmap, + UniformsLib.normalmap, + UniformsLib.displacementmap, + UniformsLib.roughnessmap, + UniformsLib.metalnessmap, + UniformsLib.fog, + UniformsLib.lights, + { + emissive: { value: new Color( 0x000000 ) }, + roughness: { value: 1.0 }, + metalness: { value: 0.0 }, + envMapIntensity: { value: 1 } // temporary + } + ] ), + + vertexShader: ShaderChunk.meshphysical_vert, + fragmentShader: ShaderChunk.meshphysical_frag + + }, + + toon: { + + uniforms: mergeUniforms( [ + UniformsLib.common, + UniformsLib.aomap, + UniformsLib.lightmap, + UniformsLib.emissivemap, + UniformsLib.bumpmap, + UniformsLib.normalmap, + UniformsLib.displacementmap, + UniformsLib.gradientmap, + UniformsLib.fog, + UniformsLib.lights, + { + emissive: { value: new Color( 0x000000 ) } + } + ] ), + + vertexShader: ShaderChunk.meshtoon_vert, + fragmentShader: ShaderChunk.meshtoon_frag + + }, + + matcap: { + + uniforms: mergeUniforms( [ + UniformsLib.common, + UniformsLib.bumpmap, + UniformsLib.normalmap, + UniformsLib.displacementmap, + UniformsLib.fog, + { + matcap: { value: null } + } + ] ), + + vertexShader: ShaderChunk.meshmatcap_vert, + fragmentShader: ShaderChunk.meshmatcap_frag + + }, + + points: { + + uniforms: mergeUniforms( [ + UniformsLib.points, + UniformsLib.fog + ] ), + + vertexShader: ShaderChunk.points_vert, + fragmentShader: ShaderChunk.points_frag + + }, + + dashed: { + + uniforms: mergeUniforms( [ + UniformsLib.common, + UniformsLib.fog, + { + scale: { value: 1 }, + dashSize: { value: 1 }, + totalSize: { value: 2 } + } + ] ), + + vertexShader: ShaderChunk.linedashed_vert, + fragmentShader: ShaderChunk.linedashed_frag + + }, + + depth: { + + uniforms: mergeUniforms( [ + UniformsLib.common, + UniformsLib.displacementmap + ] ), + + vertexShader: ShaderChunk.depth_vert, + fragmentShader: ShaderChunk.depth_frag + + }, + + normal: { + + uniforms: mergeUniforms( [ + UniformsLib.common, + UniformsLib.bumpmap, + UniformsLib.normalmap, + UniformsLib.displacementmap, + { + opacity: { value: 1.0 } + } + ] ), + + vertexShader: ShaderChunk.normal_vert, + fragmentShader: ShaderChunk.normal_frag + + }, + + sprite: { + + uniforms: mergeUniforms( [ + UniformsLib.sprite, + UniformsLib.fog + ] ), + + vertexShader: ShaderChunk.sprite_vert, + fragmentShader: ShaderChunk.sprite_frag + + }, + + background: { + + uniforms: { + uvTransform: { value: new Matrix3() }, + t2D: { value: null }, + }, + + vertexShader: ShaderChunk.background_vert, + fragmentShader: ShaderChunk.background_frag + + }, + /* ------------------------------------------------------------------------- + // Cube map shader + ------------------------------------------------------------------------- */ + + cube: { + + uniforms: mergeUniforms( [ + UniformsLib.envmap, + { + opacity: { value: 1.0 } + } + ] ), + + vertexShader: ShaderChunk.cube_vert, + fragmentShader: ShaderChunk.cube_frag + + }, + + equirect: { + + uniforms: { + tEquirect: { value: null }, + }, + + vertexShader: ShaderChunk.equirect_vert, + fragmentShader: ShaderChunk.equirect_frag + + }, + + distanceRGBA: { + + uniforms: mergeUniforms( [ + UniformsLib.common, + UniformsLib.displacementmap, + { + referencePosition: { value: new Vector3() }, + nearDistance: { value: 1 }, + farDistance: { value: 1000 } + } + ] ), + + vertexShader: ShaderChunk.distanceRGBA_vert, + fragmentShader: ShaderChunk.distanceRGBA_frag + + }, + + shadow: { + + uniforms: mergeUniforms( [ + UniformsLib.lights, + UniformsLib.fog, + { + color: { value: new Color( 0x00000 ) }, + opacity: { value: 1.0 } + } ] ), + + vertexShader: ShaderChunk.shadow_vert, + fragmentShader: ShaderChunk.shadow_frag + + } + + }; + + ShaderLib.physical = { + + uniforms: mergeUniforms( [ + ShaderLib.standard.uniforms, + { + clearcoat: { value: 0 }, + clearcoatMap: { value: null }, + clearcoatRoughness: { value: 0 }, + clearcoatRoughnessMap: { value: null }, + clearcoatNormalScale: { value: new Vector2( 1, 1 ) }, + clearcoatNormalMap: { value: null }, + sheen: { value: new Color( 0x000000 ) }, + transmission: { value: 0 }, + transmissionMap: { value: null }, + } + ] ), + + vertexShader: ShaderChunk.meshphysical_vert, + fragmentShader: ShaderChunk.meshphysical_frag + + }; + + function WebGLBackground( renderer, cubemaps, state, objects, premultipliedAlpha ) { + + var clearColor = new Color( 0x000000 ); + var clearAlpha = 0; + + var planeMesh; + var boxMesh; + + var currentBackground = null; + var currentBackgroundVersion = 0; + var currentTonemapping = null; + + function render( renderList, scene, camera, forceClear ) { + + var background = scene.isScene === true ? scene.background : null; + + if ( background && background.isTexture ) { + + background = cubemaps.get( background ); + + } + + // Ignore background in AR + // TODO: Reconsider this. + + var xr = renderer.xr; + var session = xr.getSession && xr.getSession(); + + if ( session && session.environmentBlendMode === 'additive' ) { + + background = null; + + } + + if ( background === null ) { + + setClear( clearColor, clearAlpha ); + + } else if ( background && background.isColor ) { + + setClear( background, 1 ); + forceClear = true; + + } + + if ( renderer.autoClear || forceClear ) { + + renderer.clear( renderer.autoClearColor, renderer.autoClearDepth, renderer.autoClearStencil ); + + } + + if ( background && ( background.isCubeTexture || background.isWebGLCubeRenderTarget || background.isWebGLCubeRenderTargetTexture || background.mapping === CubeUVReflectionMapping ) ) { + + if ( boxMesh === undefined ) { + + boxMesh = new Mesh( + new BoxBufferGeometry( 1, 1, 1 ), + new ShaderMaterial( { + name: 'BackgroundCubeMaterial', + uniforms: cloneUniforms( ShaderLib.cube.uniforms ), + vertexShader: ShaderLib.cube.vertexShader, + fragmentShader: ShaderLib.cube.fragmentShader, + side: BackSide, + depthTest: false, + depthWrite: false, + fog: false + } ) + ); + + boxMesh.geometry.deleteAttribute( 'normal' ); + boxMesh.geometry.deleteAttribute( 'uv' ); + + boxMesh.onBeforeRender = function ( renderer, scene, camera ) { + + this.matrixWorld.copyPosition( camera.matrixWorld ); + + }; + + // enable code injection for non-built-in material + Object.defineProperty( boxMesh.material, 'envMap', { + + get: function () { + + return this.uniforms.envMap.value; + + } + + } ); + + objects.update( boxMesh ); + + } + + if ( background.isWebGLCubeRenderTarget ) { + + // TODO Deprecate + + background = background.texture; + + } + + boxMesh.material.uniforms.envMap.value = background; + boxMesh.material.uniforms.flipEnvMap.value = background.isCubeTexture ? - 1 : 1; + + if ( currentBackground !== background || + currentBackgroundVersion !== background.version || + currentTonemapping !== renderer.toneMapping ) { + + boxMesh.material.needsUpdate = true; + + currentBackground = background; + currentBackgroundVersion = background.version; + currentTonemapping = renderer.toneMapping; + + } + + // push to the pre-sorted opaque render list + renderList.unshift( boxMesh, boxMesh.geometry, boxMesh.material, 0, 0, null ); + + } else if ( background && background.isTexture ) { + + if ( planeMesh === undefined ) { + + planeMesh = new Mesh( + new PlaneBufferGeometry( 2, 2 ), + new ShaderMaterial( { + name: 'BackgroundMaterial', + uniforms: cloneUniforms( ShaderLib.background.uniforms ), + vertexShader: ShaderLib.background.vertexShader, + fragmentShader: ShaderLib.background.fragmentShader, + side: FrontSide, + depthTest: false, + depthWrite: false, + fog: false + } ) + ); + + planeMesh.geometry.deleteAttribute( 'normal' ); + + // enable code injection for non-built-in material + Object.defineProperty( planeMesh.material, 'map', { + + get: function () { + + return this.uniforms.t2D.value; + + } + + } ); + + objects.update( planeMesh ); + + } + + planeMesh.material.uniforms.t2D.value = background; + + if ( background.matrixAutoUpdate === true ) { + + background.updateMatrix(); + + } + + planeMesh.material.uniforms.uvTransform.value.copy( background.matrix ); + + if ( currentBackground !== background || + currentBackgroundVersion !== background.version || + currentTonemapping !== renderer.toneMapping ) { + + planeMesh.material.needsUpdate = true; + + currentBackground = background; + currentBackgroundVersion = background.version; + currentTonemapping = renderer.toneMapping; + + } + + + // push to the pre-sorted opaque render list + renderList.unshift( planeMesh, planeMesh.geometry, planeMesh.material, 0, 0, null ); + + } + + } + + function setClear( color, alpha ) { + + state.buffers.color.setClear( color.r, color.g, color.b, alpha, premultipliedAlpha ); + + } + + return { + + getClearColor: function () { + + return clearColor; + + }, + setClearColor: function ( color, alpha ) { + + clearColor.set( color ); + clearAlpha = alpha !== undefined ? alpha : 1; + setClear( clearColor, clearAlpha ); + + }, + getClearAlpha: function () { + + return clearAlpha; + + }, + setClearAlpha: function ( alpha ) { + + clearAlpha = alpha; + setClear( clearColor, clearAlpha ); + + }, + render: render + + }; + + } + + function WebGLBindingStates( gl, extensions, attributes, capabilities ) { + + var maxVertexAttributes = gl.getParameter( 34921 ); + + var extension = capabilities.isWebGL2 ? null : extensions.get( 'OES_vertex_array_object' ); + var vaoAvailable = capabilities.isWebGL2 || extension !== null; + + var bindingStates = {}; + + var defaultState = createBindingState( null ); + var currentState = defaultState; + + function setup( object, material, program, geometry, index ) { + + var updateBuffers = false; + + if ( vaoAvailable ) { + + var state = getBindingState( geometry, program, material ); + + if ( currentState !== state ) { + + currentState = state; + bindVertexArrayObject( currentState.object ); + + } + + updateBuffers = needsUpdate( geometry, index ); + + if ( updateBuffers ) { saveCache( geometry, index ); } + + } else { + + var wireframe = ( material.wireframe === true ); + + if ( currentState.geometry !== geometry.id || + currentState.program !== program.id || + currentState.wireframe !== wireframe ) { + + currentState.geometry = geometry.id; + currentState.program = program.id; + currentState.wireframe = wireframe; + + updateBuffers = true; + + } + + } + + if ( object.isInstancedMesh === true ) { + + updateBuffers = true; + + } + + if ( index !== null ) { + + attributes.update( index, 34963 ); + + } + + if ( updateBuffers ) { + + setupVertexAttributes( object, material, program, geometry ); + + if ( index !== null ) { + + gl.bindBuffer( 34963, attributes.get( index ).buffer ); + + } + + } + + } + + function createVertexArrayObject() { + + if ( capabilities.isWebGL2 ) { return gl.createVertexArray(); } + + return extension.createVertexArrayOES(); + + } + + function bindVertexArrayObject( vao ) { + + if ( capabilities.isWebGL2 ) { return gl.bindVertexArray( vao ); } + + return extension.bindVertexArrayOES( vao ); + + } + + function deleteVertexArrayObject( vao ) { + + if ( capabilities.isWebGL2 ) { return gl.deleteVertexArray( vao ); } + + return extension.deleteVertexArrayOES( vao ); + + } + + function getBindingState( geometry, program, material ) { + + var wireframe = ( material.wireframe === true ); + + var programMap = bindingStates[ geometry.id ]; + + if ( programMap === undefined ) { + + programMap = {}; + bindingStates[ geometry.id ] = programMap; + + } + + var stateMap = programMap[ program.id ]; + + if ( stateMap === undefined ) { + + stateMap = {}; + programMap[ program.id ] = stateMap; + + } + + var state = stateMap[ wireframe ]; + + if ( state === undefined ) { + + state = createBindingState( createVertexArrayObject() ); + stateMap[ wireframe ] = state; + + } + + return state; + + } + + function createBindingState( vao ) { + + var newAttributes = []; + var enabledAttributes = []; + var attributeDivisors = []; + + for ( var i = 0; i < maxVertexAttributes; i ++ ) { + + newAttributes[ i ] = 0; + enabledAttributes[ i ] = 0; + attributeDivisors[ i ] = 0; + + } + + return { + + // for backward compatibility on non-VAO support browser + geometry: null, + program: null, + wireframe: false, + + newAttributes: newAttributes, + enabledAttributes: enabledAttributes, + attributeDivisors: attributeDivisors, + object: vao, + attributes: {}, + index: null + + }; + + } + + function needsUpdate( geometry, index ) { + + var cachedAttributes = currentState.attributes; + var geometryAttributes = geometry.attributes; + + if ( Object.keys( cachedAttributes ).length !== Object.keys( geometryAttributes ).length ) { return true; } + + for ( var key in geometryAttributes ) { + + var cachedAttribute = cachedAttributes[ key ]; + var geometryAttribute = geometryAttributes[ key ]; + + if ( cachedAttribute === undefined ) { return true; } + + if ( cachedAttribute.attribute !== geometryAttribute ) { return true; } + + if ( cachedAttribute.data !== geometryAttribute.data ) { return true; } + + } + + if ( currentState.index !== index ) { return true; } + + return false; + + } + + function saveCache( geometry, index ) { + + var cache = {}; + var attributes = geometry.attributes; + + for ( var key in attributes ) { + + var attribute = attributes[ key ]; + + var data = {}; + data.attribute = attribute; + + if ( attribute.data ) { + + data.data = attribute.data; + + } + + cache[ key ] = data; + + } + + currentState.attributes = cache; + + currentState.index = index; + + } + + function initAttributes() { + + var newAttributes = currentState.newAttributes; + + for ( var i = 0, il = newAttributes.length; i < il; i ++ ) { + + newAttributes[ i ] = 0; + + } + + } + + function enableAttribute( attribute ) { + + enableAttributeAndDivisor( attribute, 0 ); + + } + + function enableAttributeAndDivisor( attribute, meshPerAttribute ) { + + var newAttributes = currentState.newAttributes; + var enabledAttributes = currentState.enabledAttributes; + var attributeDivisors = currentState.attributeDivisors; + + newAttributes[ attribute ] = 1; + + if ( enabledAttributes[ attribute ] === 0 ) { + + gl.enableVertexAttribArray( attribute ); + enabledAttributes[ attribute ] = 1; + + } + + if ( attributeDivisors[ attribute ] !== meshPerAttribute ) { + + var extension = capabilities.isWebGL2 ? gl : extensions.get( 'ANGLE_instanced_arrays' ); + + extension[ capabilities.isWebGL2 ? 'vertexAttribDivisor' : 'vertexAttribDivisorANGLE' ]( attribute, meshPerAttribute ); + attributeDivisors[ attribute ] = meshPerAttribute; + + } + + } + + function disableUnusedAttributes() { + + var newAttributes = currentState.newAttributes; + var enabledAttributes = currentState.enabledAttributes; + + for ( var i = 0, il = enabledAttributes.length; i < il; i ++ ) { + + if ( enabledAttributes[ i ] !== newAttributes[ i ] ) { + + gl.disableVertexAttribArray( i ); + enabledAttributes[ i ] = 0; + + } + + } + + } + + function vertexAttribPointer( index, size, type, normalized, stride, offset ) { + + if ( capabilities.isWebGL2 === true && ( type === 5124 || type === 5125 ) ) { + + gl.vertexAttribIPointer( index, size, type, stride, offset ); + + } else { + + gl.vertexAttribPointer( index, size, type, normalized, stride, offset ); + + } + + } + + function setupVertexAttributes( object, material, program, geometry ) { + + if ( capabilities.isWebGL2 === false && ( object.isInstancedMesh || geometry.isInstancedBufferGeometry ) ) { + + if ( extensions.get( 'ANGLE_instanced_arrays' ) === null ) { return; } + + } + + initAttributes(); + + var geometryAttributes = geometry.attributes; + + var programAttributes = program.getAttributes(); + + var materialDefaultAttributeValues = material.defaultAttributeValues; + + for ( var name in programAttributes ) { + + var programAttribute = programAttributes[ name ]; + + if ( programAttribute >= 0 ) { + + var geometryAttribute = geometryAttributes[ name ]; + + if ( geometryAttribute !== undefined ) { + + var normalized = geometryAttribute.normalized; + var size = geometryAttribute.itemSize; + + var attribute = attributes.get( geometryAttribute ); + + // TODO Attribute may not be available on context restore + + if ( attribute === undefined ) { continue; } + + var buffer = attribute.buffer; + var type = attribute.type; + var bytesPerElement = attribute.bytesPerElement; + + if ( geometryAttribute.isInterleavedBufferAttribute ) { + + var data = geometryAttribute.data; + var stride = data.stride; + var offset = geometryAttribute.offset; + + if ( data && data.isInstancedInterleavedBuffer ) { + + enableAttributeAndDivisor( programAttribute, data.meshPerAttribute ); + + if ( geometry._maxInstanceCount === undefined ) { + + geometry._maxInstanceCount = data.meshPerAttribute * data.count; + + } + + } else { + + enableAttribute( programAttribute ); + + } + + gl.bindBuffer( 34962, buffer ); + vertexAttribPointer( programAttribute, size, type, normalized, stride * bytesPerElement, offset * bytesPerElement ); + + } else { + + if ( geometryAttribute.isInstancedBufferAttribute ) { + + enableAttributeAndDivisor( programAttribute, geometryAttribute.meshPerAttribute ); + + if ( geometry._maxInstanceCount === undefined ) { + + geometry._maxInstanceCount = geometryAttribute.meshPerAttribute * geometryAttribute.count; + + } + + } else { + + enableAttribute( programAttribute ); + + } + + gl.bindBuffer( 34962, buffer ); + vertexAttribPointer( programAttribute, size, type, normalized, 0, 0 ); + + } + + } else if ( name === 'instanceMatrix' ) { + + var attribute$1 = attributes.get( object.instanceMatrix ); + + // TODO Attribute may not be available on context restore + + if ( attribute$1 === undefined ) { continue; } + + var buffer$1 = attribute$1.buffer; + var type$1 = attribute$1.type; + + enableAttributeAndDivisor( programAttribute + 0, 1 ); + enableAttributeAndDivisor( programAttribute + 1, 1 ); + enableAttributeAndDivisor( programAttribute + 2, 1 ); + enableAttributeAndDivisor( programAttribute + 3, 1 ); + + gl.bindBuffer( 34962, buffer$1 ); + + gl.vertexAttribPointer( programAttribute + 0, 4, type$1, false, 64, 0 ); + gl.vertexAttribPointer( programAttribute + 1, 4, type$1, false, 64, 16 ); + gl.vertexAttribPointer( programAttribute + 2, 4, type$1, false, 64, 32 ); + gl.vertexAttribPointer( programAttribute + 3, 4, type$1, false, 64, 48 ); + + } else if ( name === 'instanceColor' ) { + + var attribute$2 = attributes.get( object.instanceColor ); + + // TODO Attribute may not be available on context restore + + if ( attribute$2 === undefined ) { continue; } + + var buffer$2 = attribute$2.buffer; + var type$2 = attribute$2.type; + + enableAttributeAndDivisor( programAttribute, 1 ); + + gl.bindBuffer( 34962, buffer$2 ); + + gl.vertexAttribPointer( programAttribute, 3, type$2, false, 12, 0 ); + + } else if ( materialDefaultAttributeValues !== undefined ) { + + var value = materialDefaultAttributeValues[ name ]; + + if ( value !== undefined ) { + + switch ( value.length ) { + + case 2: + gl.vertexAttrib2fv( programAttribute, value ); + break; + + case 3: + gl.vertexAttrib3fv( programAttribute, value ); + break; + + case 4: + gl.vertexAttrib4fv( programAttribute, value ); + break; + + default: + gl.vertexAttrib1fv( programAttribute, value ); + + } + + } + + } + + } + + } + + disableUnusedAttributes(); + + } + + function dispose() { + + reset(); + + for ( var geometryId in bindingStates ) { + + var programMap = bindingStates[ geometryId ]; + + for ( var programId in programMap ) { + + var stateMap = programMap[ programId ]; + + for ( var wireframe in stateMap ) { + + deleteVertexArrayObject( stateMap[ wireframe ].object ); + + delete stateMap[ wireframe ]; + + } + + delete programMap[ programId ]; + + } + + delete bindingStates[ geometryId ]; + + } + + } + + function releaseStatesOfGeometry( geometry ) { + + if ( bindingStates[ geometry.id ] === undefined ) { return; } + + var programMap = bindingStates[ geometry.id ]; + + for ( var programId in programMap ) { + + var stateMap = programMap[ programId ]; + + for ( var wireframe in stateMap ) { + + deleteVertexArrayObject( stateMap[ wireframe ].object ); + + delete stateMap[ wireframe ]; + + } + + delete programMap[ programId ]; + + } + + delete bindingStates[ geometry.id ]; + + } + + function releaseStatesOfProgram( program ) { + + for ( var geometryId in bindingStates ) { + + var programMap = bindingStates[ geometryId ]; + + if ( programMap[ program.id ] === undefined ) { continue; } + + var stateMap = programMap[ program.id ]; + + for ( var wireframe in stateMap ) { + + deleteVertexArrayObject( stateMap[ wireframe ].object ); + + delete stateMap[ wireframe ]; + + } + + delete programMap[ program.id ]; + + } + + } + + function reset() { + + resetDefaultState(); + + if ( currentState === defaultState ) { return; } + + currentState = defaultState; + bindVertexArrayObject( currentState.object ); + + } + + // for backward-compatilibity + + function resetDefaultState() { + + defaultState.geometry = null; + defaultState.program = null; + defaultState.wireframe = false; + + } + + return { + + setup: setup, + reset: reset, + resetDefaultState: resetDefaultState, + dispose: dispose, + releaseStatesOfGeometry: releaseStatesOfGeometry, + releaseStatesOfProgram: releaseStatesOfProgram, + + initAttributes: initAttributes, + enableAttribute: enableAttribute, + disableUnusedAttributes: disableUnusedAttributes + + }; + + } + + function WebGLBufferRenderer( gl, extensions, info, capabilities ) { + + var isWebGL2 = capabilities.isWebGL2; + + var mode; + + function setMode( value ) { + + mode = value; + + } + + function render( start, count ) { + + gl.drawArrays( mode, start, count ); + + info.update( count, mode, 1 ); + + } + + function renderInstances( start, count, primcount ) { + + if ( primcount === 0 ) { return; } + + var extension, methodName; + + if ( isWebGL2 ) { + + extension = gl; + methodName = 'drawArraysInstanced'; + + } else { + + extension = extensions.get( 'ANGLE_instanced_arrays' ); + methodName = 'drawArraysInstancedANGLE'; + + if ( extension === null ) { + + console.error( 'THREE.WebGLBufferRenderer: using THREE.InstancedBufferGeometry but hardware does not support extension ANGLE_instanced_arrays.' ); + return; + + } + + } + + extension[ methodName ]( mode, start, count, primcount ); + + info.update( count, mode, primcount ); + + } + + // + + this.setMode = setMode; + this.render = render; + this.renderInstances = renderInstances; + + } + + function WebGLCapabilities( gl, extensions, parameters ) { + + var maxAnisotropy; + + function getMaxAnisotropy() { + + if ( maxAnisotropy !== undefined ) { return maxAnisotropy; } + + var extension = extensions.get( 'EXT_texture_filter_anisotropic' ); + + if ( extension !== null ) { + + maxAnisotropy = gl.getParameter( extension.MAX_TEXTURE_MAX_ANISOTROPY_EXT ); + + } else { + + maxAnisotropy = 0; + + } + + return maxAnisotropy; + + } + + function getMaxPrecision( precision ) { + + if ( precision === 'highp' ) { + + if ( gl.getShaderPrecisionFormat( 35633, 36338 ).precision > 0 && + gl.getShaderPrecisionFormat( 35632, 36338 ).precision > 0 ) { + + return 'highp'; + + } + + precision = 'mediump'; + + } + + if ( precision === 'mediump' ) { + + if ( gl.getShaderPrecisionFormat( 35633, 36337 ).precision > 0 && + gl.getShaderPrecisionFormat( 35632, 36337 ).precision > 0 ) { + + return 'mediump'; + + } + + } + + return 'lowp'; + + } + + /* eslint-disable no-undef */ + var isWebGL2 = ( typeof WebGL2RenderingContext !== 'undefined' && gl instanceof WebGL2RenderingContext ) || + ( typeof WebGL2ComputeRenderingContext !== 'undefined' && gl instanceof WebGL2ComputeRenderingContext ); + /* eslint-enable no-undef */ + + var precision = parameters.precision !== undefined ? parameters.precision : 'highp'; + var maxPrecision = getMaxPrecision( precision ); + + if ( maxPrecision !== precision ) { + + console.warn( 'THREE.WebGLRenderer:', precision, 'not supported, using', maxPrecision, 'instead.' ); + precision = maxPrecision; + + } + + var logarithmicDepthBuffer = parameters.logarithmicDepthBuffer === true; + + var maxTextures = gl.getParameter( 34930 ); + var maxVertexTextures = gl.getParameter( 35660 ); + var maxTextureSize = gl.getParameter( 3379 ); + var maxCubemapSize = gl.getParameter( 34076 ); + + var maxAttributes = gl.getParameter( 34921 ); + var maxVertexUniforms = gl.getParameter( 36347 ); + var maxVaryings = gl.getParameter( 36348 ); + var maxFragmentUniforms = gl.getParameter( 36349 ); + + var vertexTextures = maxVertexTextures > 0; + var floatFragmentTextures = isWebGL2 || !! extensions.get( 'OES_texture_float' ); + var floatVertexTextures = vertexTextures && floatFragmentTextures; + + var maxSamples = isWebGL2 ? gl.getParameter( 36183 ) : 0; + + return { + + isWebGL2: isWebGL2, + + getMaxAnisotropy: getMaxAnisotropy, + getMaxPrecision: getMaxPrecision, + + precision: precision, + logarithmicDepthBuffer: logarithmicDepthBuffer, + + maxTextures: maxTextures, + maxVertexTextures: maxVertexTextures, + maxTextureSize: maxTextureSize, + maxCubemapSize: maxCubemapSize, + + maxAttributes: maxAttributes, + maxVertexUniforms: maxVertexUniforms, + maxVaryings: maxVaryings, + maxFragmentUniforms: maxFragmentUniforms, + + vertexTextures: vertexTextures, + floatFragmentTextures: floatFragmentTextures, + floatVertexTextures: floatVertexTextures, + + maxSamples: maxSamples + + }; + + } + + function WebGLClipping( properties ) { + + var scope = this; + + var globalState = null, + numGlobalPlanes = 0, + localClippingEnabled = false, + renderingShadows = false; + + var plane = new Plane(), + viewNormalMatrix = new Matrix3(), + + uniform = { value: null, needsUpdate: false }; + + this.uniform = uniform; + this.numPlanes = 0; + this.numIntersection = 0; + + this.init = function ( planes, enableLocalClipping, camera ) { + + var enabled = + planes.length !== 0 || + enableLocalClipping || + // enable state of previous frame - the clipping code has to + // run another frame in order to reset the state: + numGlobalPlanes !== 0 || + localClippingEnabled; + + localClippingEnabled = enableLocalClipping; + + globalState = projectPlanes( planes, camera, 0 ); + numGlobalPlanes = planes.length; + + return enabled; + + }; + + this.beginShadows = function () { + + renderingShadows = true; + projectPlanes( null ); + + }; + + this.endShadows = function () { + + renderingShadows = false; + resetGlobalState(); + + }; + + this.setState = function ( material, camera, useCache ) { + + var planes = material.clippingPlanes, + clipIntersection = material.clipIntersection, + clipShadows = material.clipShadows; + + var materialProperties = properties.get( material ); + + if ( ! localClippingEnabled || planes === null || planes.length === 0 || renderingShadows && ! clipShadows ) { + + // there's no local clipping + + if ( renderingShadows ) { + + // there's no global clipping + + projectPlanes( null ); + + } else { + + resetGlobalState(); + + } + + } else { + + var nGlobal = renderingShadows ? 0 : numGlobalPlanes, + lGlobal = nGlobal * 4; + + var dstArray = materialProperties.clippingState || null; + + uniform.value = dstArray; // ensure unique state + + dstArray = projectPlanes( planes, camera, lGlobal, useCache ); + + for ( var i = 0; i !== lGlobal; ++ i ) { + + dstArray[ i ] = globalState[ i ]; + + } + + materialProperties.clippingState = dstArray; + this.numIntersection = clipIntersection ? this.numPlanes : 0; + this.numPlanes += nGlobal; + + } + + + }; + + function resetGlobalState() { + + if ( uniform.value !== globalState ) { + + uniform.value = globalState; + uniform.needsUpdate = numGlobalPlanes > 0; + + } + + scope.numPlanes = numGlobalPlanes; + scope.numIntersection = 0; + + } + + function projectPlanes( planes, camera, dstOffset, skipTransform ) { + + var nPlanes = planes !== null ? planes.length : 0; + var dstArray = null; + + if ( nPlanes !== 0 ) { + + dstArray = uniform.value; + + if ( skipTransform !== true || dstArray === null ) { + + var flatSize = dstOffset + nPlanes * 4, + viewMatrix = camera.matrixWorldInverse; + + viewNormalMatrix.getNormalMatrix( viewMatrix ); + + if ( dstArray === null || dstArray.length < flatSize ) { + + dstArray = new Float32Array( flatSize ); + + } + + for ( var i = 0, i4 = dstOffset; i !== nPlanes; ++ i, i4 += 4 ) { + + plane.copy( planes[ i ] ).applyMatrix4( viewMatrix, viewNormalMatrix ); + + plane.normal.toArray( dstArray, i4 ); + dstArray[ i4 + 3 ] = plane.constant; + + } + + } + + uniform.value = dstArray; + uniform.needsUpdate = true; + + } + + scope.numPlanes = nPlanes; + scope.numIntersection = 0; + + return dstArray; + + } + + } + + function WebGLCubeMaps( renderer ) { + + var cubemaps = new WeakMap(); + + function mapTextureMapping( texture, mapping ) { + + if ( mapping === EquirectangularReflectionMapping ) { + + texture.mapping = CubeReflectionMapping; + + } else if ( mapping === EquirectangularRefractionMapping ) { + + texture.mapping = CubeRefractionMapping; + + } + + return texture; + + } + + function get( texture ) { + + if ( texture && texture.isTexture ) { + + var mapping = texture.mapping; + + if ( mapping === EquirectangularReflectionMapping || mapping === EquirectangularRefractionMapping ) { + + if ( cubemaps.has( texture ) ) { + + var cubemap = cubemaps.get( texture ).texture; + return mapTextureMapping( cubemap, texture.mapping ); + + } else { + + var image = texture.image; + + if ( image && image.height > 0 ) { + + var currentRenderList = renderer.getRenderList(); + var currentRenderTarget = renderer.getRenderTarget(); + var currentRenderState = renderer.getRenderState(); + + var renderTarget = new WebGLCubeRenderTarget( image.height / 2 ); + renderTarget.fromEquirectangularTexture( renderer, texture ); + cubemaps.set( texture, renderTarget ); + + renderer.setRenderTarget( currentRenderTarget ); + renderer.setRenderList( currentRenderList ); + renderer.setRenderState( currentRenderState ); + + return mapTextureMapping( renderTarget.texture, texture.mapping ); + + } else { + + // image not yet ready. try the conversion next frame + + return null; + + } + + } + + } + + } + + return texture; + + } + + function dispose() { + + cubemaps = new WeakMap(); + + } + + return { + get: get, + dispose: dispose + }; + + } + + function WebGLExtensions( gl ) { + + var extensions = {}; + + return { + + has: function ( name ) { + + if ( extensions[ name ] !== undefined ) { + + return extensions[ name ] !== null; + + } + + var extension; + + switch ( name ) { + + case 'WEBGL_depth_texture': + extension = gl.getExtension( 'WEBGL_depth_texture' ) || gl.getExtension( 'MOZ_WEBGL_depth_texture' ) || gl.getExtension( 'WEBKIT_WEBGL_depth_texture' ); + break; + + case 'EXT_texture_filter_anisotropic': + extension = gl.getExtension( 'EXT_texture_filter_anisotropic' ) || gl.getExtension( 'MOZ_EXT_texture_filter_anisotropic' ) || gl.getExtension( 'WEBKIT_EXT_texture_filter_anisotropic' ); + break; + + case 'WEBGL_compressed_texture_s3tc': + extension = gl.getExtension( 'WEBGL_compressed_texture_s3tc' ) || gl.getExtension( 'MOZ_WEBGL_compressed_texture_s3tc' ) || gl.getExtension( 'WEBKIT_WEBGL_compressed_texture_s3tc' ); + break; + + case 'WEBGL_compressed_texture_pvrtc': + extension = gl.getExtension( 'WEBGL_compressed_texture_pvrtc' ) || gl.getExtension( 'WEBKIT_WEBGL_compressed_texture_pvrtc' ); + break; + + default: + extension = gl.getExtension( name ); + + } + + extensions[ name ] = extension; + + return extension !== null; + + }, + + get: function ( name ) { + + if ( ! this.has( name ) ) { + + console.warn( 'THREE.WebGLRenderer: ' + name + ' extension not supported.' ); + + } + + return extensions[ name ]; + + } + + }; + + } + + function WebGLGeometries( gl, attributes, info, bindingStates ) { + + var geometries = new WeakMap(); + var wireframeAttributes = new WeakMap(); + + function onGeometryDispose( event ) { + + var geometry = event.target; + var buffergeometry = geometries.get( geometry ); + + if ( buffergeometry.index !== null ) { + + attributes.remove( buffergeometry.index ); + + } + + for ( var name in buffergeometry.attributes ) { + + attributes.remove( buffergeometry.attributes[ name ] ); + + } + + geometry.removeEventListener( 'dispose', onGeometryDispose ); + + geometries.delete( geometry ); + + var attribute = wireframeAttributes.get( buffergeometry ); + + if ( attribute ) { + + attributes.remove( attribute ); + wireframeAttributes.delete( buffergeometry ); + + } + + bindingStates.releaseStatesOfGeometry( geometry ); + + if ( geometry.isInstancedBufferGeometry === true ) { + + delete geometry._maxInstanceCount; + + } + + // + + info.memory.geometries --; + + } + + function get( object, geometry ) { + + var buffergeometry = geometries.get( geometry ); + + if ( buffergeometry ) { return buffergeometry; } + + geometry.addEventListener( 'dispose', onGeometryDispose ); + + if ( geometry.isBufferGeometry ) { + + buffergeometry = geometry; + + } else if ( geometry.isGeometry ) { + + if ( geometry._bufferGeometry === undefined ) { + + geometry._bufferGeometry = new BufferGeometry().setFromObject( object ); + + } + + buffergeometry = geometry._bufferGeometry; + + } + + geometries.set( geometry, buffergeometry ); + + info.memory.geometries ++; + + return buffergeometry; + + } + + function update( geometry ) { + + var geometryAttributes = geometry.attributes; + + // Updating index buffer in VAO now. See WebGLBindingStates. + + for ( var name in geometryAttributes ) { + + attributes.update( geometryAttributes[ name ], 34962 ); + + } + + // morph targets + + var morphAttributes = geometry.morphAttributes; + + for ( var name$1 in morphAttributes ) { + + var array = morphAttributes[ name$1 ]; + + for ( var i = 0, l = array.length; i < l; i ++ ) { + + attributes.update( array[ i ], 34962 ); + + } + + } + + } + + function updateWireframeAttribute( geometry ) { + + var indices = []; + + var geometryIndex = geometry.index; + var geometryPosition = geometry.attributes.position; + var version = 0; + + if ( geometryIndex !== null ) { + + var array = geometryIndex.array; + version = geometryIndex.version; + + for ( var i = 0, l = array.length; i < l; i += 3 ) { + + var a = array[ i + 0 ]; + var b = array[ i + 1 ]; + var c = array[ i + 2 ]; + + indices.push( a, b, b, c, c, a ); + + } + + } else { + + var array$1 = geometryPosition.array; + version = geometryPosition.version; + + for ( var i$1 = 0, l$1 = ( array$1.length / 3 ) - 1; i$1 < l$1; i$1 += 3 ) { + + var a$1 = i$1 + 0; + var b$1 = i$1 + 1; + var c$1 = i$1 + 2; + + indices.push( a$1, b$1, b$1, c$1, c$1, a$1 ); + + } + + } + + var attribute = new ( arrayMax( indices ) > 65535 ? Uint32BufferAttribute : Uint16BufferAttribute )( indices, 1 ); + attribute.version = version; + + // Updating index buffer in VAO now. See WebGLBindingStates + + // + + var previousAttribute = wireframeAttributes.get( geometry ); + + if ( previousAttribute ) { attributes.remove( previousAttribute ); } + + // + + wireframeAttributes.set( geometry, attribute ); + + } + + function getWireframeAttribute( geometry ) { + + var currentAttribute = wireframeAttributes.get( geometry ); + + if ( currentAttribute ) { + + var geometryIndex = geometry.index; + + if ( geometryIndex !== null ) { + + // if the attribute is obsolete, create a new one + + if ( currentAttribute.version < geometryIndex.version ) { + + updateWireframeAttribute( geometry ); + + } + + } + + } else { + + updateWireframeAttribute( geometry ); + + } + + return wireframeAttributes.get( geometry ); + + } + + return { + + get: get, + update: update, + + getWireframeAttribute: getWireframeAttribute + + }; + + } + + function WebGLIndexedBufferRenderer( gl, extensions, info, capabilities ) { + + var isWebGL2 = capabilities.isWebGL2; + + var mode; + + function setMode( value ) { + + mode = value; + + } + + var type, bytesPerElement; + + function setIndex( value ) { + + type = value.type; + bytesPerElement = value.bytesPerElement; + + } + + function render( start, count ) { + + gl.drawElements( mode, count, type, start * bytesPerElement ); + + info.update( count, mode, 1 ); + + } + + function renderInstances( start, count, primcount ) { + + if ( primcount === 0 ) { return; } + + var extension, methodName; + + if ( isWebGL2 ) { + + extension = gl; + methodName = 'drawElementsInstanced'; + + } else { + + extension = extensions.get( 'ANGLE_instanced_arrays' ); + methodName = 'drawElementsInstancedANGLE'; + + if ( extension === null ) { + + console.error( 'THREE.WebGLIndexedBufferRenderer: using THREE.InstancedBufferGeometry but hardware does not support extension ANGLE_instanced_arrays.' ); + return; + + } + + } + + extension[ methodName ]( mode, count, type, start * bytesPerElement, primcount ); + + info.update( count, mode, primcount ); + + } + + // + + this.setMode = setMode; + this.setIndex = setIndex; + this.render = render; + this.renderInstances = renderInstances; + + } + + function WebGLInfo( gl ) { + + var memory = { + geometries: 0, + textures: 0 + }; + + var render = { + frame: 0, + calls: 0, + triangles: 0, + points: 0, + lines: 0 + }; + + function update( count, mode, instanceCount ) { + + render.calls ++; + + switch ( mode ) { + + case 4: + render.triangles += instanceCount * ( count / 3 ); + break; + + case 1: + render.lines += instanceCount * ( count / 2 ); + break; + + case 3: + render.lines += instanceCount * ( count - 1 ); + break; + + case 2: + render.lines += instanceCount * count; + break; + + case 0: + render.points += instanceCount * count; + break; + + default: + console.error( 'THREE.WebGLInfo: Unknown draw mode:', mode ); + break; + + } + + } + + function reset() { + + render.frame ++; + render.calls = 0; + render.triangles = 0; + render.points = 0; + render.lines = 0; + + } + + return { + memory: memory, + render: render, + programs: null, + autoReset: true, + reset: reset, + update: update + }; + + } + + function numericalSort( a, b ) { + + return a[ 0 ] - b[ 0 ]; + + } + + function absNumericalSort( a, b ) { + + return Math.abs( b[ 1 ] ) - Math.abs( a[ 1 ] ); + + } + + function WebGLMorphtargets( gl ) { + + var influencesList = {}; + var morphInfluences = new Float32Array( 8 ); + + var workInfluences = []; + + for ( var i = 0; i < 8; i ++ ) { + + workInfluences[ i ] = [ i, 0 ]; + + } + + function update( object, geometry, material, program ) { + + var objectInfluences = object.morphTargetInfluences; + + // When object doesn't have morph target influences defined, we treat it as a 0-length array + // This is important to make sure we set up morphTargetBaseInfluence / morphTargetInfluences + + var length = objectInfluences === undefined ? 0 : objectInfluences.length; + + var influences = influencesList[ geometry.id ]; + + if ( influences === undefined ) { + + // initialise list + + influences = []; + + for ( var i = 0; i < length; i ++ ) { + + influences[ i ] = [ i, 0 ]; + + } + + influencesList[ geometry.id ] = influences; + + } + + // Collect influences + + for ( var i$1 = 0; i$1 < length; i$1 ++ ) { + + var influence = influences[ i$1 ]; + + influence[ 0 ] = i$1; + influence[ 1 ] = objectInfluences[ i$1 ]; + + } + + influences.sort( absNumericalSort ); + + for ( var i$2 = 0; i$2 < 8; i$2 ++ ) { + + if ( i$2 < length && influences[ i$2 ][ 1 ] ) { + + workInfluences[ i$2 ][ 0 ] = influences[ i$2 ][ 0 ]; + workInfluences[ i$2 ][ 1 ] = influences[ i$2 ][ 1 ]; + + } else { + + workInfluences[ i$2 ][ 0 ] = Number.MAX_SAFE_INTEGER; + workInfluences[ i$2 ][ 1 ] = 0; + + } + + } + + workInfluences.sort( numericalSort ); + + var morphTargets = material.morphTargets && geometry.morphAttributes.position; + var morphNormals = material.morphNormals && geometry.morphAttributes.normal; + + var morphInfluencesSum = 0; + + for ( var i$3 = 0; i$3 < 8; i$3 ++ ) { + + var influence$1 = workInfluences[ i$3 ]; + var index = influence$1[ 0 ]; + var value = influence$1[ 1 ]; + + if ( index !== Number.MAX_SAFE_INTEGER && value ) { + + if ( morphTargets && geometry.getAttribute( 'morphTarget' + i$3 ) !== morphTargets[ index ] ) { + + geometry.setAttribute( 'morphTarget' + i$3, morphTargets[ index ] ); + + } + + if ( morphNormals && geometry.getAttribute( 'morphNormal' + i$3 ) !== morphNormals[ index ] ) { + + geometry.setAttribute( 'morphNormal' + i$3, morphNormals[ index ] ); + + } + + morphInfluences[ i$3 ] = value; + morphInfluencesSum += value; + + } else { + + if ( morphTargets && geometry.getAttribute( 'morphTarget' + i$3 ) !== undefined ) { + + geometry.deleteAttribute( 'morphTarget' + i$3 ); + + } + + if ( morphNormals && geometry.getAttribute( 'morphNormal' + i$3 ) !== undefined ) { + + geometry.deleteAttribute( 'morphNormal' + i$3 ); + + } + + morphInfluences[ i$3 ] = 0; + + } + + } + + // GLSL shader uses formula baseinfluence * base + sum(target * influence) + // This allows us to switch between absolute morphs and relative morphs without changing shader code + // When baseinfluence = 1 - sum(influence), the above is equivalent to sum((target - base) * influence) + var morphBaseInfluence = geometry.morphTargetsRelative ? 1 : 1 - morphInfluencesSum; + + program.getUniforms().setValue( gl, 'morphTargetBaseInfluence', morphBaseInfluence ); + program.getUniforms().setValue( gl, 'morphTargetInfluences', morphInfluences ); + + } + + return { + + update: update + + }; + + } + + function WebGLObjects( gl, geometries, attributes, info ) { + + var updateMap = new WeakMap(); + + function update( object ) { + + var frame = info.render.frame; + + var geometry = object.geometry; + var buffergeometry = geometries.get( object, geometry ); + + // Update once per frame + + if ( updateMap.get( buffergeometry ) !== frame ) { + + if ( geometry.isGeometry ) { + + buffergeometry.updateFromObject( object ); + + } + + geometries.update( buffergeometry ); + + updateMap.set( buffergeometry, frame ); + + } + + if ( object.isInstancedMesh ) { + + attributes.update( object.instanceMatrix, 34962 ); + + if ( object.instanceColor !== null ) { + + attributes.update( object.instanceColor, 34962 ); + + } + + } + + return buffergeometry; + + } + + function dispose() { + + updateMap = new WeakMap(); + + } + + return { + + update: update, + dispose: dispose + + }; + + } + + function CubeTexture( images, mapping, wrapS, wrapT, magFilter, minFilter, format, type, anisotropy, encoding ) { + + images = images !== undefined ? images : []; + mapping = mapping !== undefined ? mapping : CubeReflectionMapping; + format = format !== undefined ? format : RGBFormat; + + Texture.call( this, images, mapping, wrapS, wrapT, magFilter, minFilter, format, type, anisotropy, encoding ); + + this.flipY = false; + + } + + CubeTexture.prototype = Object.create( Texture.prototype ); + CubeTexture.prototype.constructor = CubeTexture; + + CubeTexture.prototype.isCubeTexture = true; + + Object.defineProperty( CubeTexture.prototype, 'images', { + + get: function () { + + return this.image; + + }, + + set: function ( value ) { + + this.image = value; + + } + + } ); + + function DataTexture2DArray( data, width, height, depth ) { + + Texture.call( this, null ); + + this.image = { data: data || null, width: width || 1, height: height || 1, depth: depth || 1 }; + + this.magFilter = NearestFilter; + this.minFilter = NearestFilter; + + this.wrapR = ClampToEdgeWrapping; + + this.generateMipmaps = false; + this.flipY = false; + + this.needsUpdate = true; + + } + + DataTexture2DArray.prototype = Object.create( Texture.prototype ); + DataTexture2DArray.prototype.constructor = DataTexture2DArray; + DataTexture2DArray.prototype.isDataTexture2DArray = true; + + function DataTexture3D( data, width, height, depth ) { + + // We're going to add .setXXX() methods for setting properties later. + // Users can still set in DataTexture3D directly. + // + // const texture = new THREE.DataTexture3D( data, width, height, depth ); + // texture.anisotropy = 16; + // + // See #14839 + + Texture.call( this, null ); + + this.image = { data: data || null, width: width || 1, height: height || 1, depth: depth || 1 }; + + this.magFilter = NearestFilter; + this.minFilter = NearestFilter; + + this.wrapR = ClampToEdgeWrapping; + + this.generateMipmaps = false; + this.flipY = false; + + this.needsUpdate = true; + + + } + + DataTexture3D.prototype = Object.create( Texture.prototype ); + DataTexture3D.prototype.constructor = DataTexture3D; + DataTexture3D.prototype.isDataTexture3D = true; + + /** + * Uniforms of a program. + * Those form a tree structure with a special top-level container for the root, + * which you get by calling 'new WebGLUniforms( gl, program )'. + * + * + * Properties of inner nodes including the top-level container: + * + * .seq - array of nested uniforms + * .map - nested uniforms by name + * + * + * Methods of all nodes except the top-level container: + * + * .setValue( gl, value, [textures] ) + * + * uploads a uniform value(s) + * the 'textures' parameter is needed for sampler uniforms + * + * + * Static methods of the top-level container (textures factorizations): + * + * .upload( gl, seq, values, textures ) + * + * sets uniforms in 'seq' to 'values[id].value' + * + * .seqWithValue( seq, values ) : filteredSeq + * + * filters 'seq' entries with corresponding entry in values + * + * + * Methods of the top-level container (textures factorizations): + * + * .setValue( gl, name, value, textures ) + * + * sets uniform with name 'name' to 'value' + * + * .setOptional( gl, obj, prop ) + * + * like .set for an optional property of the object + * + */ + + var emptyTexture = new Texture(); + var emptyTexture2dArray = new DataTexture2DArray(); + var emptyTexture3d = new DataTexture3D(); + var emptyCubeTexture = new CubeTexture(); + + // --- Utilities --- + + // Array Caches (provide typed arrays for temporary by size) + + var arrayCacheF32 = []; + var arrayCacheI32 = []; + + // Float32Array caches used for uploading Matrix uniforms + + var mat4array = new Float32Array( 16 ); + var mat3array = new Float32Array( 9 ); + var mat2array = new Float32Array( 4 ); + + // Flattening for arrays of vectors and matrices + + function flatten( array, nBlocks, blockSize ) { + + var firstElem = array[ 0 ]; + + if ( firstElem <= 0 || firstElem > 0 ) { return array; } + // unoptimized: ! isNaN( firstElem ) + // see http://jacksondunstan.com/articles/983 + + var n = nBlocks * blockSize; + var r = arrayCacheF32[ n ]; + + if ( r === undefined ) { + + r = new Float32Array( n ); + arrayCacheF32[ n ] = r; + + } + + if ( nBlocks !== 0 ) { + + firstElem.toArray( r, 0 ); + + for ( var i = 1, offset = 0; i !== nBlocks; ++ i ) { + + offset += blockSize; + array[ i ].toArray( r, offset ); + + } + + } + + return r; + + } + + function arraysEqual( a, b ) { + + if ( a.length !== b.length ) { return false; } + + for ( var i = 0, l = a.length; i < l; i ++ ) { + + if ( a[ i ] !== b[ i ] ) { return false; } + + } + + return true; + + } + + function copyArray( a, b ) { + + for ( var i = 0, l = b.length; i < l; i ++ ) { + + a[ i ] = b[ i ]; + + } + + } + + // Texture unit allocation + + function allocTexUnits( textures, n ) { + + var r = arrayCacheI32[ n ]; + + if ( r === undefined ) { + + r = new Int32Array( n ); + arrayCacheI32[ n ] = r; + + } + + for ( var i = 0; i !== n; ++ i ) { + + r[ i ] = textures.allocateTextureUnit(); + + } + + return r; + + } + + // --- Setters --- + + // Note: Defining these methods externally, because they come in a bunch + // and this way their names minify. + + // Single scalar + + function setValueV1f( gl, v ) { + + var cache = this.cache; + + if ( cache[ 0 ] === v ) { return; } + + gl.uniform1f( this.addr, v ); + + cache[ 0 ] = v; + + } + + // Single float vector (from flat array or THREE.VectorN) + + function setValueV2f( gl, v ) { + + var cache = this.cache; + + if ( v.x !== undefined ) { + + if ( cache[ 0 ] !== v.x || cache[ 1 ] !== v.y ) { + + gl.uniform2f( this.addr, v.x, v.y ); + + cache[ 0 ] = v.x; + cache[ 1 ] = v.y; + + } + + } else { + + if ( arraysEqual( cache, v ) ) { return; } + + gl.uniform2fv( this.addr, v ); + + copyArray( cache, v ); + + } + + } + + function setValueV3f( gl, v ) { + + var cache = this.cache; + + if ( v.x !== undefined ) { + + if ( cache[ 0 ] !== v.x || cache[ 1 ] !== v.y || cache[ 2 ] !== v.z ) { + + gl.uniform3f( this.addr, v.x, v.y, v.z ); + + cache[ 0 ] = v.x; + cache[ 1 ] = v.y; + cache[ 2 ] = v.z; + + } + + } else if ( v.r !== undefined ) { + + if ( cache[ 0 ] !== v.r || cache[ 1 ] !== v.g || cache[ 2 ] !== v.b ) { + + gl.uniform3f( this.addr, v.r, v.g, v.b ); + + cache[ 0 ] = v.r; + cache[ 1 ] = v.g; + cache[ 2 ] = v.b; + + } + + } else { + + if ( arraysEqual( cache, v ) ) { return; } + + gl.uniform3fv( this.addr, v ); + + copyArray( cache, v ); + + } + + } + + function setValueV4f( gl, v ) { + + var cache = this.cache; + + if ( v.x !== undefined ) { + + if ( cache[ 0 ] !== v.x || cache[ 1 ] !== v.y || cache[ 2 ] !== v.z || cache[ 3 ] !== v.w ) { + + gl.uniform4f( this.addr, v.x, v.y, v.z, v.w ); + + cache[ 0 ] = v.x; + cache[ 1 ] = v.y; + cache[ 2 ] = v.z; + cache[ 3 ] = v.w; + + } + + } else { + + if ( arraysEqual( cache, v ) ) { return; } + + gl.uniform4fv( this.addr, v ); + + copyArray( cache, v ); + + } + + } + + // Single matrix (from flat array or MatrixN) + + function setValueM2( gl, v ) { + + var cache = this.cache; + var elements = v.elements; + + if ( elements === undefined ) { + + if ( arraysEqual( cache, v ) ) { return; } + + gl.uniformMatrix2fv( this.addr, false, v ); + + copyArray( cache, v ); + + } else { + + if ( arraysEqual( cache, elements ) ) { return; } + + mat2array.set( elements ); + + gl.uniformMatrix2fv( this.addr, false, mat2array ); + + copyArray( cache, elements ); + + } + + } + + function setValueM3( gl, v ) { + + var cache = this.cache; + var elements = v.elements; + + if ( elements === undefined ) { + + if ( arraysEqual( cache, v ) ) { return; } + + gl.uniformMatrix3fv( this.addr, false, v ); + + copyArray( cache, v ); + + } else { + + if ( arraysEqual( cache, elements ) ) { return; } + + mat3array.set( elements ); + + gl.uniformMatrix3fv( this.addr, false, mat3array ); + + copyArray( cache, elements ); + + } + + } + + function setValueM4( gl, v ) { + + var cache = this.cache; + var elements = v.elements; + + if ( elements === undefined ) { + + if ( arraysEqual( cache, v ) ) { return; } + + gl.uniformMatrix4fv( this.addr, false, v ); + + copyArray( cache, v ); + + } else { + + if ( arraysEqual( cache, elements ) ) { return; } + + mat4array.set( elements ); + + gl.uniformMatrix4fv( this.addr, false, mat4array ); + + copyArray( cache, elements ); + + } + + } + + // Single texture (2D / Cube) + + function setValueT1( gl, v, textures ) { + + var cache = this.cache; + var unit = textures.allocateTextureUnit(); + + if ( cache[ 0 ] !== unit ) { + + gl.uniform1i( this.addr, unit ); + cache[ 0 ] = unit; + + } + + textures.safeSetTexture2D( v || emptyTexture, unit ); + + } + + function setValueT2DArray1( gl, v, textures ) { + + var cache = this.cache; + var unit = textures.allocateTextureUnit(); + + if ( cache[ 0 ] !== unit ) { + + gl.uniform1i( this.addr, unit ); + cache[ 0 ] = unit; + + } + + textures.setTexture2DArray( v || emptyTexture2dArray, unit ); + + } + + function setValueT3D1( gl, v, textures ) { + + var cache = this.cache; + var unit = textures.allocateTextureUnit(); + + if ( cache[ 0 ] !== unit ) { + + gl.uniform1i( this.addr, unit ); + cache[ 0 ] = unit; + + } + + textures.setTexture3D( v || emptyTexture3d, unit ); + + } + + function setValueT6( gl, v, textures ) { + + var cache = this.cache; + var unit = textures.allocateTextureUnit(); + + if ( cache[ 0 ] !== unit ) { + + gl.uniform1i( this.addr, unit ); + cache[ 0 ] = unit; + + } + + textures.safeSetTextureCube( v || emptyCubeTexture, unit ); + + } + + // Integer / Boolean vectors or arrays thereof (always flat arrays) + + function setValueV1i( gl, v ) { + + var cache = this.cache; + + if ( cache[ 0 ] === v ) { return; } + + gl.uniform1i( this.addr, v ); + + cache[ 0 ] = v; + + } + + function setValueV2i( gl, v ) { + + var cache = this.cache; + + if ( arraysEqual( cache, v ) ) { return; } + + gl.uniform2iv( this.addr, v ); + + copyArray( cache, v ); + + } + + function setValueV3i( gl, v ) { + + var cache = this.cache; + + if ( arraysEqual( cache, v ) ) { return; } + + gl.uniform3iv( this.addr, v ); + + copyArray( cache, v ); + + } + + function setValueV4i( gl, v ) { + + var cache = this.cache; + + if ( arraysEqual( cache, v ) ) { return; } + + gl.uniform4iv( this.addr, v ); + + copyArray( cache, v ); + + } + + // uint + + function setValueV1ui( gl, v ) { + + var cache = this.cache; + + if ( cache[ 0 ] === v ) { return; } + + gl.uniform1ui( this.addr, v ); + + cache[ 0 ] = v; + + } + + // Helper to pick the right setter for the singular case + + function getSingularSetter( type ) { + + switch ( type ) { + + case 0x1406: return setValueV1f; // FLOAT + case 0x8b50: return setValueV2f; // _VEC2 + case 0x8b51: return setValueV3f; // _VEC3 + case 0x8b52: return setValueV4f; // _VEC4 + + case 0x8b5a: return setValueM2; // _MAT2 + case 0x8b5b: return setValueM3; // _MAT3 + case 0x8b5c: return setValueM4; // _MAT4 + + case 0x1404: case 0x8b56: return setValueV1i; // INT, BOOL + case 0x8b53: case 0x8b57: return setValueV2i; // _VEC2 + case 0x8b54: case 0x8b58: return setValueV3i; // _VEC3 + case 0x8b55: case 0x8b59: return setValueV4i; // _VEC4 + + case 0x1405: return setValueV1ui; // UINT + + case 0x8b5e: // SAMPLER_2D + case 0x8d66: // SAMPLER_EXTERNAL_OES + case 0x8dca: // INT_SAMPLER_2D + case 0x8dd2: // UNSIGNED_INT_SAMPLER_2D + case 0x8b62: // SAMPLER_2D_SHADOW + return setValueT1; + + case 0x8b5f: // SAMPLER_3D + case 0x8dcb: // INT_SAMPLER_3D + case 0x8dd3: // UNSIGNED_INT_SAMPLER_3D + return setValueT3D1; + + case 0x8b60: // SAMPLER_CUBE + case 0x8dcc: // INT_SAMPLER_CUBE + case 0x8dd4: // UNSIGNED_INT_SAMPLER_CUBE + case 0x8dc5: // SAMPLER_CUBE_SHADOW + return setValueT6; + + case 0x8dc1: // SAMPLER_2D_ARRAY + case 0x8dcf: // INT_SAMPLER_2D_ARRAY + case 0x8dd7: // UNSIGNED_INT_SAMPLER_2D_ARRAY + case 0x8dc4: // SAMPLER_2D_ARRAY_SHADOW + return setValueT2DArray1; + + } + + } + + // Array of scalars + function setValueV1fArray( gl, v ) { + + gl.uniform1fv( this.addr, v ); + + } + + // Integer / Boolean vectors or arrays thereof (always flat arrays) + function setValueV1iArray( gl, v ) { + + gl.uniform1iv( this.addr, v ); + + } + + function setValueV2iArray( gl, v ) { + + gl.uniform2iv( this.addr, v ); + + } + + function setValueV3iArray( gl, v ) { + + gl.uniform3iv( this.addr, v ); + + } + + function setValueV4iArray( gl, v ) { + + gl.uniform4iv( this.addr, v ); + + } + + + // Array of vectors (flat or from THREE classes) + + function setValueV2fArray( gl, v ) { + + var data = flatten( v, this.size, 2 ); + + gl.uniform2fv( this.addr, data ); + + } + + function setValueV3fArray( gl, v ) { + + var data = flatten( v, this.size, 3 ); + + gl.uniform3fv( this.addr, data ); + + } + + function setValueV4fArray( gl, v ) { + + var data = flatten( v, this.size, 4 ); + + gl.uniform4fv( this.addr, data ); + + } + + // Array of matrices (flat or from THREE clases) + + function setValueM2Array( gl, v ) { + + var data = flatten( v, this.size, 4 ); + + gl.uniformMatrix2fv( this.addr, false, data ); + + } + + function setValueM3Array( gl, v ) { + + var data = flatten( v, this.size, 9 ); + + gl.uniformMatrix3fv( this.addr, false, data ); + + } + + function setValueM4Array( gl, v ) { + + var data = flatten( v, this.size, 16 ); + + gl.uniformMatrix4fv( this.addr, false, data ); + + } + + // Array of textures (2D / Cube) + + function setValueT1Array( gl, v, textures ) { + + var n = v.length; + + var units = allocTexUnits( textures, n ); + + gl.uniform1iv( this.addr, units ); + + for ( var i = 0; i !== n; ++ i ) { + + textures.safeSetTexture2D( v[ i ] || emptyTexture, units[ i ] ); + + } + + } + + function setValueT6Array( gl, v, textures ) { + + var n = v.length; + + var units = allocTexUnits( textures, n ); + + gl.uniform1iv( this.addr, units ); + + for ( var i = 0; i !== n; ++ i ) { + + textures.safeSetTextureCube( v[ i ] || emptyCubeTexture, units[ i ] ); + + } + + } + + // Helper to pick the right setter for a pure (bottom-level) array + + function getPureArraySetter( type ) { + + switch ( type ) { + + case 0x1406: return setValueV1fArray; // FLOAT + case 0x8b50: return setValueV2fArray; // _VEC2 + case 0x8b51: return setValueV3fArray; // _VEC3 + case 0x8b52: return setValueV4fArray; // _VEC4 + + case 0x8b5a: return setValueM2Array; // _MAT2 + case 0x8b5b: return setValueM3Array; // _MAT3 + case 0x8b5c: return setValueM4Array; // _MAT4 + + case 0x1404: case 0x8b56: return setValueV1iArray; // INT, BOOL + case 0x8b53: case 0x8b57: return setValueV2iArray; // _VEC2 + case 0x8b54: case 0x8b58: return setValueV3iArray; // _VEC3 + case 0x8b55: case 0x8b59: return setValueV4iArray; // _VEC4 + + case 0x8b5e: // SAMPLER_2D + case 0x8d66: // SAMPLER_EXTERNAL_OES + case 0x8dca: // INT_SAMPLER_2D + case 0x8dd2: // UNSIGNED_INT_SAMPLER_2D + case 0x8b62: // SAMPLER_2D_SHADOW + return setValueT1Array; + + case 0x8b60: // SAMPLER_CUBE + case 0x8dcc: // INT_SAMPLER_CUBE + case 0x8dd4: // UNSIGNED_INT_SAMPLER_CUBE + case 0x8dc5: // SAMPLER_CUBE_SHADOW + return setValueT6Array; + + } + + } + + // --- Uniform Classes --- + + function SingleUniform( id, activeInfo, addr ) { + + this.id = id; + this.addr = addr; + this.cache = []; + this.setValue = getSingularSetter( activeInfo.type ); + + // this.path = activeInfo.name; // DEBUG + + } + + function PureArrayUniform( id, activeInfo, addr ) { + + this.id = id; + this.addr = addr; + this.cache = []; + this.size = activeInfo.size; + this.setValue = getPureArraySetter( activeInfo.type ); + + // this.path = activeInfo.name; // DEBUG + + } + + PureArrayUniform.prototype.updateCache = function ( data ) { + + var cache = this.cache; + + if ( data instanceof Float32Array && cache.length !== data.length ) { + + this.cache = new Float32Array( data.length ); + + } + + copyArray( cache, data ); + + }; + + function StructuredUniform( id ) { + + this.id = id; + + this.seq = []; + this.map = {}; + + } + + StructuredUniform.prototype.setValue = function ( gl, value, textures ) { + + var seq = this.seq; + + for ( var i = 0, n = seq.length; i !== n; ++ i ) { + + var u = seq[ i ]; + u.setValue( gl, value[ u.id ], textures ); + + } + + }; + + // --- Top-level --- + + // Parser - builds up the property tree from the path strings + + var RePathPart = /([\w\d_]+)(\])?(\[|\.)?/g; + + // extracts + // - the identifier (member name or array index) + // - followed by an optional right bracket (found when array index) + // - followed by an optional left bracket or dot (type of subscript) + // + // Note: These portions can be read in a non-overlapping fashion and + // allow straightforward parsing of the hierarchy that WebGL encodes + // in the uniform names. + + function addUniform( container, uniformObject ) { + + container.seq.push( uniformObject ); + container.map[ uniformObject.id ] = uniformObject; + + } + + function parseUniform( activeInfo, addr, container ) { + + var path = activeInfo.name, + pathLength = path.length; + + // reset RegExp object, because of the early exit of a previous run + RePathPart.lastIndex = 0; + + while ( true ) { + + var match = RePathPart.exec( path ), + matchEnd = RePathPart.lastIndex; + + var id = match[ 1 ]; + var idIsIndex = match[ 2 ] === ']', + subscript = match[ 3 ]; + + if ( idIsIndex ) { id = id | 0; } // convert to integer + + if ( subscript === undefined || subscript === '[' && matchEnd + 2 === pathLength ) { + + // bare name or "pure" bottom-level array "[0]" suffix + + addUniform( container, subscript === undefined ? + new SingleUniform( id, activeInfo, addr ) : + new PureArrayUniform( id, activeInfo, addr ) ); + + break; + + } else { + + // step into inner node / create it in case it doesn't exist + + var map = container.map; + var next = map[ id ]; + + if ( next === undefined ) { + + next = new StructuredUniform( id ); + addUniform( container, next ); + + } + + container = next; + + } + + } + + } + + // Root Container + + function WebGLUniforms( gl, program ) { + + this.seq = []; + this.map = {}; + + var n = gl.getProgramParameter( program, 35718 ); + + for ( var i = 0; i < n; ++ i ) { + + var info = gl.getActiveUniform( program, i ), + addr = gl.getUniformLocation( program, info.name ); + + parseUniform( info, addr, this ); + + } + + } + + WebGLUniforms.prototype.setValue = function ( gl, name, value, textures ) { + + var u = this.map[ name ]; + + if ( u !== undefined ) { u.setValue( gl, value, textures ); } + + }; + + WebGLUniforms.prototype.setOptional = function ( gl, object, name ) { + + var v = object[ name ]; + + if ( v !== undefined ) { this.setValue( gl, name, v ); } + + }; + + + // Static interface + + WebGLUniforms.upload = function ( gl, seq, values, textures ) { + + for ( var i = 0, n = seq.length; i !== n; ++ i ) { + + var u = seq[ i ], + v = values[ u.id ]; + + if ( v.needsUpdate !== false ) { + + // note: always updating when .needsUpdate is undefined + u.setValue( gl, v.value, textures ); + + } + + } + + }; + + WebGLUniforms.seqWithValue = function ( seq, values ) { + + var r = []; + + for ( var i = 0, n = seq.length; i !== n; ++ i ) { + + var u = seq[ i ]; + if ( u.id in values ) { r.push( u ); } + + } + + return r; + + }; + + function WebGLShader( gl, type, string ) { + + var shader = gl.createShader( type ); + + gl.shaderSource( shader, string ); + gl.compileShader( shader ); + + return shader; + + } + + var programIdCount = 0; + + function addLineNumbers( string ) { + + var lines = string.split( '\n' ); + + for ( var i = 0; i < lines.length; i ++ ) { + + lines[ i ] = ( i + 1 ) + ': ' + lines[ i ]; + + } + + return lines.join( '\n' ); + + } + + function getEncodingComponents( encoding ) { + + switch ( encoding ) { + + case LinearEncoding: + return [ 'Linear', '( value )' ]; + case sRGBEncoding: + return [ 'sRGB', '( value )' ]; + case RGBEEncoding: + return [ 'RGBE', '( value )' ]; + case RGBM7Encoding: + return [ 'RGBM', '( value, 7.0 )' ]; + case RGBM16Encoding: + return [ 'RGBM', '( value, 16.0 )' ]; + case RGBDEncoding: + return [ 'RGBD', '( value, 256.0 )' ]; + case GammaEncoding: + return [ 'Gamma', '( value, float( GAMMA_FACTOR ) )' ]; + case LogLuvEncoding: + return [ 'LogLuv', '( value )' ]; + default: + console.warn( 'THREE.WebGLProgram: Unsupported encoding:', encoding ); + return [ 'Linear', '( value )' ]; + + } + + } + + function getShaderErrors( gl, shader, type ) { + + var status = gl.getShaderParameter( shader, 35713 ); + var log = gl.getShaderInfoLog( shader ).trim(); + + if ( status && log === '' ) { return ''; } + + // --enable-privileged-webgl-extension + // console.log( '**' + type + '**', gl.getExtension( 'WEBGL_debug_shaders' ).getTranslatedShaderSource( shader ) ); + + var source = gl.getShaderSource( shader ); + + return 'THREE.WebGLShader: gl.getShaderInfoLog() ' + type + '\n' + log + addLineNumbers( source ); + + } + + function getTexelDecodingFunction( functionName, encoding ) { + + var components = getEncodingComponents( encoding ); + return 'vec4 ' + functionName + '( vec4 value ) { return ' + components[ 0 ] + 'ToLinear' + components[ 1 ] + '; }'; + + } + + function getTexelEncodingFunction( functionName, encoding ) { + + var components = getEncodingComponents( encoding ); + return 'vec4 ' + functionName + '( vec4 value ) { return LinearTo' + components[ 0 ] + components[ 1 ] + '; }'; + + } + + function getToneMappingFunction( functionName, toneMapping ) { + + var toneMappingName; + + switch ( toneMapping ) { + + case LinearToneMapping: + toneMappingName = 'Linear'; + break; + + case ReinhardToneMapping: + toneMappingName = 'Reinhard'; + break; + + case CineonToneMapping: + toneMappingName = 'OptimizedCineon'; + break; + + case ACESFilmicToneMapping: + toneMappingName = 'ACESFilmic'; + break; + + case CustomToneMapping: + toneMappingName = 'Custom'; + break; + + default: + console.warn( 'THREE.WebGLProgram: Unsupported toneMapping:', toneMapping ); + toneMappingName = 'Linear'; + + } + + return 'vec3 ' + functionName + '( vec3 color ) { return ' + toneMappingName + 'ToneMapping( color ); }'; + + } + + function generateExtensions( parameters ) { + + var chunks = [ + ( parameters.extensionDerivatives || parameters.envMapCubeUV || parameters.bumpMap || parameters.tangentSpaceNormalMap || parameters.clearcoatNormalMap || parameters.flatShading || parameters.shaderID === 'physical' ) ? '#extension GL_OES_standard_derivatives : enable' : '', + ( parameters.extensionFragDepth || parameters.logarithmicDepthBuffer ) && parameters.rendererExtensionFragDepth ? '#extension GL_EXT_frag_depth : enable' : '', + ( parameters.extensionDrawBuffers && parameters.rendererExtensionDrawBuffers ) ? '#extension GL_EXT_draw_buffers : require' : '', + ( parameters.extensionShaderTextureLOD || parameters.envMap ) && parameters.rendererExtensionShaderTextureLod ? '#extension GL_EXT_shader_texture_lod : enable' : '' + ]; + + return chunks.filter( filterEmptyLine ).join( '\n' ); + + } + + function generateDefines( defines ) { + + var chunks = []; + + for ( var name in defines ) { + + var value = defines[ name ]; + + if ( value === false ) { continue; } + + chunks.push( '#define ' + name + ' ' + value ); + + } + + return chunks.join( '\n' ); + + } + + function fetchAttributeLocations( gl, program ) { + + var attributes = {}; + + var n = gl.getProgramParameter( program, 35721 ); + + for ( var i = 0; i < n; i ++ ) { + + var info = gl.getActiveAttrib( program, i ); + var name = info.name; + + // console.log( 'THREE.WebGLProgram: ACTIVE VERTEX ATTRIBUTE:', name, i ); + + attributes[ name ] = gl.getAttribLocation( program, name ); + + } + + return attributes; + + } + + function filterEmptyLine( string ) { + + return string !== ''; + + } + + function replaceLightNums( string, parameters ) { + + return string + .replace( /NUM_DIR_LIGHTS/g, parameters.numDirLights ) + .replace( /NUM_SPOT_LIGHTS/g, parameters.numSpotLights ) + .replace( /NUM_RECT_AREA_LIGHTS/g, parameters.numRectAreaLights ) + .replace( /NUM_POINT_LIGHTS/g, parameters.numPointLights ) + .replace( /NUM_HEMI_LIGHTS/g, parameters.numHemiLights ) + .replace( /NUM_DIR_LIGHT_SHADOWS/g, parameters.numDirLightShadows ) + .replace( /NUM_SPOT_LIGHT_SHADOWS/g, parameters.numSpotLightShadows ) + .replace( /NUM_POINT_LIGHT_SHADOWS/g, parameters.numPointLightShadows ); + + } + + function replaceClippingPlaneNums( string, parameters ) { + + return string + .replace( /NUM_CLIPPING_PLANES/g, parameters.numClippingPlanes ) + .replace( /UNION_CLIPPING_PLANES/g, ( parameters.numClippingPlanes - parameters.numClipIntersection ) ); + + } + + // Resolve Includes + + var includePattern = /^[ \t]*#include +<([\w\d./]+)>/gm; + + function resolveIncludes( string ) { + + return string.replace( includePattern, includeReplacer ); + + } + + function includeReplacer( match, include ) { + + var string = ShaderChunk[ include ]; + + if ( string === undefined ) { + + throw new Error( 'Can not resolve #include <' + include + '>' ); + + } + + return resolveIncludes( string ); + + } + + // Unroll Loops + + var deprecatedUnrollLoopPattern = /#pragma unroll_loop[\s]+?for \( int i \= (\d+)\; i < (\d+)\; i \+\+ \) \{([\s\S]+?)(?=\})\}/g; + var unrollLoopPattern = /#pragma unroll_loop_start\s+for\s*\(\s*int\s+i\s*=\s*(\d+)\s*;\s*i\s*<\s*(\d+)\s*;\s*i\s*\+\+\s*\)\s*{([\s\S]+?)}\s+#pragma unroll_loop_end/g; + + function unrollLoops( string ) { + + return string + .replace( unrollLoopPattern, loopReplacer ) + .replace( deprecatedUnrollLoopPattern, deprecatedLoopReplacer ); + + } + + function deprecatedLoopReplacer( match, start, end, snippet ) { + + console.warn( 'WebGLProgram: #pragma unroll_loop shader syntax is deprecated. Please use #pragma unroll_loop_start syntax instead.' ); + return loopReplacer( match, start, end, snippet ); + + } + + function loopReplacer( match, start, end, snippet ) { + + var string = ''; + + for ( var i = parseInt( start ); i < parseInt( end ); i ++ ) { + + string += snippet + .replace( /\[\s*i\s*\]/g, '[ ' + i + ' ]' ) + .replace( /UNROLLED_LOOP_INDEX/g, i ); + + } + + return string; + + } + + // + + function generatePrecision( parameters ) { + + var precisionstring = "precision " + parameters.precision + " float;\nprecision " + parameters.precision + " int;"; + + if ( parameters.precision === "highp" ) { + + precisionstring += "\n#define HIGH_PRECISION"; + + } else if ( parameters.precision === "mediump" ) { + + precisionstring += "\n#define MEDIUM_PRECISION"; + + } else if ( parameters.precision === "lowp" ) { + + precisionstring += "\n#define LOW_PRECISION"; + + } + + return precisionstring; + + } + + function generateShadowMapTypeDefine( parameters ) { + + var shadowMapTypeDefine = 'SHADOWMAP_TYPE_BASIC'; + + if ( parameters.shadowMapType === PCFShadowMap ) { + + shadowMapTypeDefine = 'SHADOWMAP_TYPE_PCF'; + + } else if ( parameters.shadowMapType === PCFSoftShadowMap ) { + + shadowMapTypeDefine = 'SHADOWMAP_TYPE_PCF_SOFT'; + + } else if ( parameters.shadowMapType === VSMShadowMap ) { + + shadowMapTypeDefine = 'SHADOWMAP_TYPE_VSM'; + + } + + return shadowMapTypeDefine; + + } + + function generateEnvMapTypeDefine( parameters ) { + + var envMapTypeDefine = 'ENVMAP_TYPE_CUBE'; + + if ( parameters.envMap ) { + + switch ( parameters.envMapMode ) { + + case CubeReflectionMapping: + case CubeRefractionMapping: + envMapTypeDefine = 'ENVMAP_TYPE_CUBE'; + break; + + case CubeUVReflectionMapping: + case CubeUVRefractionMapping: + envMapTypeDefine = 'ENVMAP_TYPE_CUBE_UV'; + break; + + } + + } + + return envMapTypeDefine; + + } + + function generateEnvMapModeDefine( parameters ) { + + var envMapModeDefine = 'ENVMAP_MODE_REFLECTION'; + + if ( parameters.envMap ) { + + switch ( parameters.envMapMode ) { + + case CubeRefractionMapping: + case CubeUVRefractionMapping: + + envMapModeDefine = 'ENVMAP_MODE_REFRACTION'; + break; + + } + + } + + return envMapModeDefine; + + } + + function generateEnvMapBlendingDefine( parameters ) { + + var envMapBlendingDefine = 'ENVMAP_BLENDING_NONE'; + + if ( parameters.envMap ) { + + switch ( parameters.combine ) { + + case MultiplyOperation: + envMapBlendingDefine = 'ENVMAP_BLENDING_MULTIPLY'; + break; + + case MixOperation: + envMapBlendingDefine = 'ENVMAP_BLENDING_MIX'; + break; + + case AddOperation: + envMapBlendingDefine = 'ENVMAP_BLENDING_ADD'; + break; + + } + + } + + return envMapBlendingDefine; + + } + + function WebGLProgram( renderer, cacheKey, parameters, bindingStates ) { + + var gl = renderer.getContext(); + + var defines = parameters.defines; + + var vertexShader = parameters.vertexShader; + var fragmentShader = parameters.fragmentShader; + + var shadowMapTypeDefine = generateShadowMapTypeDefine( parameters ); + var envMapTypeDefine = generateEnvMapTypeDefine( parameters ); + var envMapModeDefine = generateEnvMapModeDefine( parameters ); + var envMapBlendingDefine = generateEnvMapBlendingDefine( parameters ); + + + var gammaFactorDefine = ( renderer.gammaFactor > 0 ) ? renderer.gammaFactor : 1.0; + + var customExtensions = parameters.isWebGL2 ? '' : generateExtensions( parameters ); + + var customDefines = generateDefines( defines ); + + var program = gl.createProgram(); + + var prefixVertex, prefixFragment; + var versionString = parameters.glslVersion ? '#version ' + parameters.glslVersion + "\n" : ''; + + if ( parameters.isRawShaderMaterial ) { + + prefixVertex = [ + + customDefines + + ].filter( filterEmptyLine ).join( '\n' ); + + if ( prefixVertex.length > 0 ) { + + prefixVertex += '\n'; + + } + + prefixFragment = [ + + customExtensions, + customDefines + + ].filter( filterEmptyLine ).join( '\n' ); + + if ( prefixFragment.length > 0 ) { + + prefixFragment += '\n'; + + } + + } else { + + prefixVertex = [ + + generatePrecision( parameters ), + + '#define SHADER_NAME ' + parameters.shaderName, + + customDefines, + + parameters.instancing ? '#define USE_INSTANCING' : '', + parameters.instancingColor ? '#define USE_INSTANCING_COLOR' : '', + + parameters.supportsVertexTextures ? '#define VERTEX_TEXTURES' : '', + + '#define GAMMA_FACTOR ' + gammaFactorDefine, + + '#define MAX_BONES ' + parameters.maxBones, + ( parameters.useFog && parameters.fog ) ? '#define USE_FOG' : '', + ( parameters.useFog && parameters.fogExp2 ) ? '#define FOG_EXP2' : '', + + parameters.map ? '#define USE_MAP' : '', + parameters.envMap ? '#define USE_ENVMAP' : '', + parameters.envMap ? '#define ' + envMapModeDefine : '', + parameters.lightMap ? '#define USE_LIGHTMAP' : '', + parameters.aoMap ? '#define USE_AOMAP' : '', + parameters.emissiveMap ? '#define USE_EMISSIVEMAP' : '', + parameters.bumpMap ? '#define USE_BUMPMAP' : '', + parameters.normalMap ? '#define USE_NORMALMAP' : '', + ( parameters.normalMap && parameters.objectSpaceNormalMap ) ? '#define OBJECTSPACE_NORMALMAP' : '', + ( parameters.normalMap && parameters.tangentSpaceNormalMap ) ? '#define TANGENTSPACE_NORMALMAP' : '', + + parameters.clearcoatMap ? '#define USE_CLEARCOATMAP' : '', + parameters.clearcoatRoughnessMap ? '#define USE_CLEARCOAT_ROUGHNESSMAP' : '', + parameters.clearcoatNormalMap ? '#define USE_CLEARCOAT_NORMALMAP' : '', + parameters.displacementMap && parameters.supportsVertexTextures ? '#define USE_DISPLACEMENTMAP' : '', + parameters.specularMap ? '#define USE_SPECULARMAP' : '', + parameters.roughnessMap ? '#define USE_ROUGHNESSMAP' : '', + parameters.metalnessMap ? '#define USE_METALNESSMAP' : '', + parameters.alphaMap ? '#define USE_ALPHAMAP' : '', + parameters.transmissionMap ? '#define USE_TRANSMISSIONMAP' : '', + + parameters.vertexTangents ? '#define USE_TANGENT' : '', + parameters.vertexColors ? '#define USE_COLOR' : '', + parameters.vertexUvs ? '#define USE_UV' : '', + parameters.uvsVertexOnly ? '#define UVS_VERTEX_ONLY' : '', + + parameters.flatShading ? '#define FLAT_SHADED' : '', + + parameters.skinning ? '#define USE_SKINNING' : '', + parameters.useVertexTexture ? '#define BONE_TEXTURE' : '', + + parameters.morphTargets ? '#define USE_MORPHTARGETS' : '', + parameters.morphNormals && parameters.flatShading === false ? '#define USE_MORPHNORMALS' : '', + parameters.doubleSided ? '#define DOUBLE_SIDED' : '', + parameters.flipSided ? '#define FLIP_SIDED' : '', + + parameters.shadowMapEnabled ? '#define USE_SHADOWMAP' : '', + parameters.shadowMapEnabled ? '#define ' + shadowMapTypeDefine : '', + + parameters.sizeAttenuation ? '#define USE_SIZEATTENUATION' : '', + + parameters.logarithmicDepthBuffer ? '#define USE_LOGDEPTHBUF' : '', + ( parameters.logarithmicDepthBuffer && parameters.rendererExtensionFragDepth ) ? '#define USE_LOGDEPTHBUF_EXT' : '', + + 'uniform mat4 modelMatrix;', + 'uniform mat4 modelViewMatrix;', + 'uniform mat4 projectionMatrix;', + 'uniform mat4 viewMatrix;', + 'uniform mat3 normalMatrix;', + 'uniform vec3 cameraPosition;', + 'uniform bool isOrthographic;', + + '#ifdef USE_INSTANCING', + + ' attribute mat4 instanceMatrix;', + + '#endif', + + '#ifdef USE_INSTANCING_COLOR', + + ' attribute vec3 instanceColor;', + + '#endif', + + 'attribute vec3 position;', + 'attribute vec3 normal;', + 'attribute vec2 uv;', + + '#ifdef USE_TANGENT', + + ' attribute vec4 tangent;', + + '#endif', + + '#ifdef USE_COLOR', + + ' attribute vec3 color;', + + '#endif', + + '#ifdef USE_MORPHTARGETS', + + ' attribute vec3 morphTarget0;', + ' attribute vec3 morphTarget1;', + ' attribute vec3 morphTarget2;', + ' attribute vec3 morphTarget3;', + + ' #ifdef USE_MORPHNORMALS', + + ' attribute vec3 morphNormal0;', + ' attribute vec3 morphNormal1;', + ' attribute vec3 morphNormal2;', + ' attribute vec3 morphNormal3;', + + ' #else', + + ' attribute vec3 morphTarget4;', + ' attribute vec3 morphTarget5;', + ' attribute vec3 morphTarget6;', + ' attribute vec3 morphTarget7;', + + ' #endif', + + '#endif', + + '#ifdef USE_SKINNING', + + ' attribute vec4 skinIndex;', + ' attribute vec4 skinWeight;', + + '#endif', + + '\n' + + ].filter( filterEmptyLine ).join( '\n' ); + + prefixFragment = [ + + customExtensions, + + generatePrecision( parameters ), + + '#define SHADER_NAME ' + parameters.shaderName, + + customDefines, + + parameters.alphaTest ? '#define ALPHATEST ' + parameters.alphaTest + ( parameters.alphaTest % 1 ? '' : '.0' ) : '', // add '.0' if integer + + '#define GAMMA_FACTOR ' + gammaFactorDefine, + + ( parameters.useFog && parameters.fog ) ? '#define USE_FOG' : '', + ( parameters.useFog && parameters.fogExp2 ) ? '#define FOG_EXP2' : '', + + parameters.map ? '#define USE_MAP' : '', + parameters.matcap ? '#define USE_MATCAP' : '', + parameters.envMap ? '#define USE_ENVMAP' : '', + parameters.envMap ? '#define ' + envMapTypeDefine : '', + parameters.envMap ? '#define ' + envMapModeDefine : '', + parameters.envMap ? '#define ' + envMapBlendingDefine : '', + parameters.lightMap ? '#define USE_LIGHTMAP' : '', + parameters.aoMap ? '#define USE_AOMAP' : '', + parameters.emissiveMap ? '#define USE_EMISSIVEMAP' : '', + parameters.bumpMap ? '#define USE_BUMPMAP' : '', + parameters.normalMap ? '#define USE_NORMALMAP' : '', + ( parameters.normalMap && parameters.objectSpaceNormalMap ) ? '#define OBJECTSPACE_NORMALMAP' : '', + ( parameters.normalMap && parameters.tangentSpaceNormalMap ) ? '#define TANGENTSPACE_NORMALMAP' : '', + parameters.clearcoatMap ? '#define USE_CLEARCOATMAP' : '', + parameters.clearcoatRoughnessMap ? '#define USE_CLEARCOAT_ROUGHNESSMAP' : '', + parameters.clearcoatNormalMap ? '#define USE_CLEARCOAT_NORMALMAP' : '', + parameters.specularMap ? '#define USE_SPECULARMAP' : '', + parameters.roughnessMap ? '#define USE_ROUGHNESSMAP' : '', + parameters.metalnessMap ? '#define USE_METALNESSMAP' : '', + parameters.alphaMap ? '#define USE_ALPHAMAP' : '', + + parameters.sheen ? '#define USE_SHEEN' : '', + parameters.transmissionMap ? '#define USE_TRANSMISSIONMAP' : '', + + parameters.vertexTangents ? '#define USE_TANGENT' : '', + parameters.vertexColors || parameters.instancingColor ? '#define USE_COLOR' : '', + parameters.vertexUvs ? '#define USE_UV' : '', + parameters.uvsVertexOnly ? '#define UVS_VERTEX_ONLY' : '', + + parameters.gradientMap ? '#define USE_GRADIENTMAP' : '', + + parameters.flatShading ? '#define FLAT_SHADED' : '', + + parameters.doubleSided ? '#define DOUBLE_SIDED' : '', + parameters.flipSided ? '#define FLIP_SIDED' : '', + + parameters.shadowMapEnabled ? '#define USE_SHADOWMAP' : '', + parameters.shadowMapEnabled ? '#define ' + shadowMapTypeDefine : '', + + parameters.premultipliedAlpha ? '#define PREMULTIPLIED_ALPHA' : '', + + parameters.physicallyCorrectLights ? '#define PHYSICALLY_CORRECT_LIGHTS' : '', + + parameters.logarithmicDepthBuffer ? '#define USE_LOGDEPTHBUF' : '', + ( parameters.logarithmicDepthBuffer && parameters.rendererExtensionFragDepth ) ? '#define USE_LOGDEPTHBUF_EXT' : '', + + ( ( parameters.extensionShaderTextureLOD || parameters.envMap ) && parameters.rendererExtensionShaderTextureLod ) ? '#define TEXTURE_LOD_EXT' : '', + + 'uniform mat4 viewMatrix;', + 'uniform vec3 cameraPosition;', + 'uniform bool isOrthographic;', + + ( parameters.toneMapping !== NoToneMapping ) ? '#define TONE_MAPPING' : '', + ( parameters.toneMapping !== NoToneMapping ) ? ShaderChunk[ 'tonemapping_pars_fragment' ] : '', // this code is required here because it is used by the toneMapping() function defined below + ( parameters.toneMapping !== NoToneMapping ) ? getToneMappingFunction( 'toneMapping', parameters.toneMapping ) : '', + + parameters.dithering ? '#define DITHERING' : '', + + ShaderChunk[ 'encodings_pars_fragment' ], // this code is required here because it is used by the various encoding/decoding function defined below + parameters.map ? getTexelDecodingFunction( 'mapTexelToLinear', parameters.mapEncoding ) : '', + parameters.matcap ? getTexelDecodingFunction( 'matcapTexelToLinear', parameters.matcapEncoding ) : '', + parameters.envMap ? getTexelDecodingFunction( 'envMapTexelToLinear', parameters.envMapEncoding ) : '', + parameters.emissiveMap ? getTexelDecodingFunction( 'emissiveMapTexelToLinear', parameters.emissiveMapEncoding ) : '', + parameters.lightMap ? getTexelDecodingFunction( 'lightMapTexelToLinear', parameters.lightMapEncoding ) : '', + getTexelEncodingFunction( 'linearToOutputTexel', parameters.outputEncoding ), + + parameters.depthPacking ? '#define DEPTH_PACKING ' + parameters.depthPacking : '', + + '\n' + + ].filter( filterEmptyLine ).join( '\n' ); + + } + + vertexShader = resolveIncludes( vertexShader ); + vertexShader = replaceLightNums( vertexShader, parameters ); + vertexShader = replaceClippingPlaneNums( vertexShader, parameters ); + + fragmentShader = resolveIncludes( fragmentShader ); + fragmentShader = replaceLightNums( fragmentShader, parameters ); + fragmentShader = replaceClippingPlaneNums( fragmentShader, parameters ); + + vertexShader = unrollLoops( vertexShader ); + fragmentShader = unrollLoops( fragmentShader ); + + if ( parameters.isWebGL2 && parameters.isRawShaderMaterial !== true ) { + + // GLSL 3.0 conversion for built-in materials and ShaderMaterial + + versionString = '#version 300 es\n'; + + prefixVertex = [ + '#define attribute in', + '#define varying out', + '#define texture2D texture' + ].join( '\n' ) + '\n' + prefixVertex; + + prefixFragment = [ + '#define varying in', + ( parameters.glslVersion === GLSL3 ) ? '' : 'out highp vec4 pc_fragColor;', + ( parameters.glslVersion === GLSL3 ) ? '' : '#define gl_FragColor pc_fragColor', + '#define gl_FragDepthEXT gl_FragDepth', + '#define texture2D texture', + '#define textureCube texture', + '#define texture2DProj textureProj', + '#define texture2DLodEXT textureLod', + '#define texture2DProjLodEXT textureProjLod', + '#define textureCubeLodEXT textureLod', + '#define texture2DGradEXT textureGrad', + '#define texture2DProjGradEXT textureProjGrad', + '#define textureCubeGradEXT textureGrad' + ].join( '\n' ) + '\n' + prefixFragment; + + } + + var vertexGlsl = versionString + prefixVertex + vertexShader; + var fragmentGlsl = versionString + prefixFragment + fragmentShader; + + // console.log( '*VERTEX*', vertexGlsl ); + // console.log( '*FRAGMENT*', fragmentGlsl ); + + var glVertexShader = WebGLShader( gl, 35633, vertexGlsl ); + var glFragmentShader = WebGLShader( gl, 35632, fragmentGlsl ); + + gl.attachShader( program, glVertexShader ); + gl.attachShader( program, glFragmentShader ); + + // Force a particular attribute to index 0. + + if ( parameters.index0AttributeName !== undefined ) { + + gl.bindAttribLocation( program, 0, parameters.index0AttributeName ); + + } else if ( parameters.morphTargets === true ) { + + // programs with morphTargets displace position out of attribute 0 + gl.bindAttribLocation( program, 0, 'position' ); + + } + + gl.linkProgram( program ); + + // check for link errors + if ( renderer.debug.checkShaderErrors ) { + + var programLog = gl.getProgramInfoLog( program ).trim(); + var vertexLog = gl.getShaderInfoLog( glVertexShader ).trim(); + var fragmentLog = gl.getShaderInfoLog( glFragmentShader ).trim(); + + var runnable = true; + var haveDiagnostics = true; + + if ( gl.getProgramParameter( program, 35714 ) === false ) { + + runnable = false; + + var vertexErrors = getShaderErrors( gl, glVertexShader, 'vertex' ); + var fragmentErrors = getShaderErrors( gl, glFragmentShader, 'fragment' ); + + console.error( 'THREE.WebGLProgram: shader error: ', gl.getError(), '35715', gl.getProgramParameter( program, 35715 ), 'gl.getProgramInfoLog', programLog, vertexErrors, fragmentErrors ); + + } else if ( programLog !== '' ) { + + console.warn( 'THREE.WebGLProgram: gl.getProgramInfoLog()', programLog ); + + } else if ( vertexLog === '' || fragmentLog === '' ) { + + haveDiagnostics = false; + + } + + if ( haveDiagnostics ) { + + this.diagnostics = { + + runnable: runnable, + + programLog: programLog, + + vertexShader: { + + log: vertexLog, + prefix: prefixVertex + + }, + + fragmentShader: { + + log: fragmentLog, + prefix: prefixFragment + + } + + }; + + } + + } + + // Clean up + + // Crashes in iOS9 and iOS10. #18402 + // gl.detachShader( program, glVertexShader ); + // gl.detachShader( program, glFragmentShader ); + + gl.deleteShader( glVertexShader ); + gl.deleteShader( glFragmentShader ); + + // set up caching for uniform locations + + var cachedUniforms; + + this.getUniforms = function () { + + if ( cachedUniforms === undefined ) { + + cachedUniforms = new WebGLUniforms( gl, program ); + + } + + return cachedUniforms; + + }; + + // set up caching for attribute locations + + var cachedAttributes; + + this.getAttributes = function () { + + if ( cachedAttributes === undefined ) { + + cachedAttributes = fetchAttributeLocations( gl, program ); + + } + + return cachedAttributes; + + }; + + // free resource + + this.destroy = function () { + + bindingStates.releaseStatesOfProgram( this ); + + gl.deleteProgram( program ); + this.program = undefined; + + }; + + // + + this.name = parameters.shaderName; + this.id = programIdCount ++; + this.cacheKey = cacheKey; + this.usedTimes = 1; + this.program = program; + this.vertexShader = glVertexShader; + this.fragmentShader = glFragmentShader; + + return this; + + } + + function WebGLPrograms( renderer, cubemaps, extensions, capabilities, bindingStates, clipping ) { + + var programs = []; + + var isWebGL2 = capabilities.isWebGL2; + var logarithmicDepthBuffer = capabilities.logarithmicDepthBuffer; + var floatVertexTextures = capabilities.floatVertexTextures; + var maxVertexUniforms = capabilities.maxVertexUniforms; + var vertexTextures = capabilities.vertexTextures; + + var precision = capabilities.precision; + + var shaderIDs = { + MeshDepthMaterial: 'depth', + MeshDistanceMaterial: 'distanceRGBA', + MeshNormalMaterial: 'normal', + MeshBasicMaterial: 'basic', + MeshLambertMaterial: 'lambert', + MeshPhongMaterial: 'phong', + MeshToonMaterial: 'toon', + MeshStandardMaterial: 'physical', + MeshPhysicalMaterial: 'physical', + MeshMatcapMaterial: 'matcap', + LineBasicMaterial: 'basic', + LineDashedMaterial: 'dashed', + PointsMaterial: 'points', + ShadowMaterial: 'shadow', + SpriteMaterial: 'sprite' + }; + + var parameterNames = [ + "precision", "isWebGL2", "supportsVertexTextures", "outputEncoding", "instancing", "instancingColor", + "map", "mapEncoding", "matcap", "matcapEncoding", "envMap", "envMapMode", "envMapEncoding", "envMapCubeUV", + "lightMap", "lightMapEncoding", "aoMap", "emissiveMap", "emissiveMapEncoding", "bumpMap", "normalMap", "objectSpaceNormalMap", "tangentSpaceNormalMap", "clearcoatMap", "clearcoatRoughnessMap", "clearcoatNormalMap", "displacementMap", "specularMap", + "roughnessMap", "metalnessMap", "gradientMap", + "alphaMap", "combine", "vertexColors", "vertexTangents", "vertexUvs", "uvsVertexOnly", "fog", "useFog", "fogExp2", + "flatShading", "sizeAttenuation", "logarithmicDepthBuffer", "skinning", + "maxBones", "useVertexTexture", "morphTargets", "morphNormals", + "maxMorphTargets", "maxMorphNormals", "premultipliedAlpha", + "numDirLights", "numPointLights", "numSpotLights", "numHemiLights", "numRectAreaLights", + "numDirLightShadows", "numPointLightShadows", "numSpotLightShadows", + "shadowMapEnabled", "shadowMapType", "toneMapping", 'physicallyCorrectLights', + "alphaTest", "doubleSided", "flipSided", "numClippingPlanes", "numClipIntersection", "depthPacking", "dithering", + "sheen", "transmissionMap" + ]; + + function getMaxBones( object ) { + + var skeleton = object.skeleton; + var bones = skeleton.bones; + + if ( floatVertexTextures ) { + + return 1024; + + } else { + + // default for when object is not specified + // ( for example when prebuilding shader to be used with multiple objects ) + // + // - leave some extra space for other uniforms + // - limit here is ANGLE's 254 max uniform vectors + // (up to 54 should be safe) + + var nVertexUniforms = maxVertexUniforms; + var nVertexMatrices = Math.floor( ( nVertexUniforms - 20 ) / 4 ); + + var maxBones = Math.min( nVertexMatrices, bones.length ); + + if ( maxBones < bones.length ) { + + console.warn( 'THREE.WebGLRenderer: Skeleton has ' + bones.length + ' bones. This GPU supports ' + maxBones + '.' ); + return 0; + + } + + return maxBones; + + } + + } + + function getTextureEncodingFromMap( map ) { + + var encoding; + + if ( ! map ) { + + encoding = LinearEncoding; + + } else if ( map.isTexture ) { + + encoding = map.encoding; + + } else if ( map.isWebGLRenderTarget ) { + + console.warn( "THREE.WebGLPrograms.getTextureEncodingFromMap: don't use render targets as textures. Use their .texture property instead." ); + encoding = map.texture.encoding; + + } + + return encoding; + + } + + function getParameters( material, lights, shadows, scene, object ) { + + var fog = scene.fog; + var environment = material.isMeshStandardMaterial ? scene.environment : null; + + var envMap = cubemaps.get( material.envMap || environment ); + + var shaderID = shaderIDs[ material.type ]; + + // heuristics to create shader parameters according to lights in the scene + // (not to blow over maxLights budget) + + var maxBones = object.isSkinnedMesh ? getMaxBones( object ) : 0; + + if ( material.precision !== null ) { + + precision = capabilities.getMaxPrecision( material.precision ); + + if ( precision !== material.precision ) { + + console.warn( 'THREE.WebGLProgram.getParameters:', material.precision, 'not supported, using', precision, 'instead.' ); + + } + + } + + var vertexShader, fragmentShader; + + if ( shaderID ) { + + var shader = ShaderLib[ shaderID ]; + + vertexShader = shader.vertexShader; + fragmentShader = shader.fragmentShader; + + } else { + + vertexShader = material.vertexShader; + fragmentShader = material.fragmentShader; + + } + + var currentRenderTarget = renderer.getRenderTarget(); + + var parameters = { + + isWebGL2: isWebGL2, + + shaderID: shaderID, + shaderName: material.type, + + vertexShader: vertexShader, + fragmentShader: fragmentShader, + defines: material.defines, + + isRawShaderMaterial: material.isRawShaderMaterial === true, + glslVersion: material.glslVersion, + + precision: precision, + + instancing: object.isInstancedMesh === true, + instancingColor: object.isInstancedMesh === true && object.instanceColor !== null, + + supportsVertexTextures: vertexTextures, + outputEncoding: ( currentRenderTarget !== null ) ? getTextureEncodingFromMap( currentRenderTarget.texture ) : renderer.outputEncoding, + map: !! material.map, + mapEncoding: getTextureEncodingFromMap( material.map ), + matcap: !! material.matcap, + matcapEncoding: getTextureEncodingFromMap( material.matcap ), + envMap: !! envMap, + envMapMode: envMap && envMap.mapping, + envMapEncoding: getTextureEncodingFromMap( envMap ), + envMapCubeUV: ( !! envMap ) && ( ( envMap.mapping === CubeUVReflectionMapping ) || ( envMap.mapping === CubeUVRefractionMapping ) ), + lightMap: !! material.lightMap, + lightMapEncoding: getTextureEncodingFromMap( material.lightMap ), + aoMap: !! material.aoMap, + emissiveMap: !! material.emissiveMap, + emissiveMapEncoding: getTextureEncodingFromMap( material.emissiveMap ), + bumpMap: !! material.bumpMap, + normalMap: !! material.normalMap, + objectSpaceNormalMap: material.normalMapType === ObjectSpaceNormalMap, + tangentSpaceNormalMap: material.normalMapType === TangentSpaceNormalMap, + clearcoatMap: !! material.clearcoatMap, + clearcoatRoughnessMap: !! material.clearcoatRoughnessMap, + clearcoatNormalMap: !! material.clearcoatNormalMap, + displacementMap: !! material.displacementMap, + roughnessMap: !! material.roughnessMap, + metalnessMap: !! material.metalnessMap, + specularMap: !! material.specularMap, + alphaMap: !! material.alphaMap, + + gradientMap: !! material.gradientMap, + + sheen: !! material.sheen, + + transmissionMap: !! material.transmissionMap, + + combine: material.combine, + + vertexTangents: ( material.normalMap && material.vertexTangents ), + vertexColors: material.vertexColors, + vertexUvs: !! material.map || !! material.bumpMap || !! material.normalMap || !! material.specularMap || !! material.alphaMap || !! material.emissiveMap || !! material.roughnessMap || !! material.metalnessMap || !! material.clearcoatMap || !! material.clearcoatRoughnessMap || !! material.clearcoatNormalMap || !! material.displacementMap || !! material.transmissionMap, + uvsVertexOnly: ! ( !! material.map || !! material.bumpMap || !! material.normalMap || !! material.specularMap || !! material.alphaMap || !! material.emissiveMap || !! material.roughnessMap || !! material.metalnessMap || !! material.clearcoatNormalMap || !! material.transmissionMap ) && !! material.displacementMap, + + fog: !! fog, + useFog: material.fog, + fogExp2: ( fog && fog.isFogExp2 ), + + flatShading: material.flatShading, + + sizeAttenuation: material.sizeAttenuation, + logarithmicDepthBuffer: logarithmicDepthBuffer, + + skinning: material.skinning && maxBones > 0, + maxBones: maxBones, + useVertexTexture: floatVertexTextures, + + morphTargets: material.morphTargets, + morphNormals: material.morphNormals, + maxMorphTargets: renderer.maxMorphTargets, + maxMorphNormals: renderer.maxMorphNormals, + + numDirLights: lights.directional.length, + numPointLights: lights.point.length, + numSpotLights: lights.spot.length, + numRectAreaLights: lights.rectArea.length, + numHemiLights: lights.hemi.length, + + numDirLightShadows: lights.directionalShadowMap.length, + numPointLightShadows: lights.pointShadowMap.length, + numSpotLightShadows: lights.spotShadowMap.length, + + numClippingPlanes: clipping.numPlanes, + numClipIntersection: clipping.numIntersection, + + dithering: material.dithering, + + shadowMapEnabled: renderer.shadowMap.enabled && shadows.length > 0, + shadowMapType: renderer.shadowMap.type, + + toneMapping: material.toneMapped ? renderer.toneMapping : NoToneMapping, + physicallyCorrectLights: renderer.physicallyCorrectLights, + + premultipliedAlpha: material.premultipliedAlpha, + + alphaTest: material.alphaTest, + doubleSided: material.side === DoubleSide, + flipSided: material.side === BackSide, + + depthPacking: ( material.depthPacking !== undefined ) ? material.depthPacking : false, + + index0AttributeName: material.index0AttributeName, + + extensionDerivatives: material.extensions && material.extensions.derivatives, + extensionFragDepth: material.extensions && material.extensions.fragDepth, + extensionDrawBuffers: material.extensions && material.extensions.drawBuffers, + extensionShaderTextureLOD: material.extensions && material.extensions.shaderTextureLOD, + + rendererExtensionFragDepth: isWebGL2 || extensions.has( 'EXT_frag_depth' ), + rendererExtensionDrawBuffers: isWebGL2 || extensions.has( 'WEBGL_draw_buffers' ), + rendererExtensionShaderTextureLod: isWebGL2 || extensions.has( 'EXT_shader_texture_lod' ), + + customProgramCacheKey: material.customProgramCacheKey() + + }; + + return parameters; + + } + + function getProgramCacheKey( parameters ) { + + var array = []; + + if ( parameters.shaderID ) { + + array.push( parameters.shaderID ); + + } else { + + array.push( parameters.fragmentShader ); + array.push( parameters.vertexShader ); + + } + + if ( parameters.defines !== undefined ) { + + for ( var name in parameters.defines ) { + + array.push( name ); + array.push( parameters.defines[ name ] ); + + } + + } + + if ( parameters.isRawShaderMaterial === false ) { + + for ( var i = 0; i < parameterNames.length; i ++ ) { + + array.push( parameters[ parameterNames[ i ] ] ); + + } + + array.push( renderer.outputEncoding ); + array.push( renderer.gammaFactor ); + + } + + array.push( parameters.customProgramCacheKey ); + + return array.join(); + + } + + function getUniforms( material ) { + + var shaderID = shaderIDs[ material.type ]; + var uniforms; + + if ( shaderID ) { + + var shader = ShaderLib[ shaderID ]; + uniforms = UniformsUtils.clone( shader.uniforms ); + + } else { + + uniforms = material.uniforms; + + } + + return uniforms; + + } + + function acquireProgram( parameters, cacheKey ) { + + var program; + + // Check if code has been already compiled + for ( var p = 0, pl = programs.length; p < pl; p ++ ) { + + var preexistingProgram = programs[ p ]; + + if ( preexistingProgram.cacheKey === cacheKey ) { + + program = preexistingProgram; + ++ program.usedTimes; + + break; + + } + + } + + if ( program === undefined ) { + + program = new WebGLProgram( renderer, cacheKey, parameters, bindingStates ); + programs.push( program ); + + } + + return program; + + } + + function releaseProgram( program ) { + + if ( -- program.usedTimes === 0 ) { + + // Remove from unordered set + var i = programs.indexOf( program ); + programs[ i ] = programs[ programs.length - 1 ]; + programs.pop(); + + // Free WebGL resources + program.destroy(); + + } + + } + + return { + getParameters: getParameters, + getProgramCacheKey: getProgramCacheKey, + getUniforms: getUniforms, + acquireProgram: acquireProgram, + releaseProgram: releaseProgram, + // Exposed for resource monitoring & error feedback via renderer.info: + programs: programs + }; + + } + + function WebGLProperties() { + + var properties = new WeakMap(); + + function get( object ) { + + var map = properties.get( object ); + + if ( map === undefined ) { + + map = {}; + properties.set( object, map ); + + } + + return map; + + } + + function remove( object ) { + + properties.delete( object ); + + } + + function update( object, key, value ) { + + properties.get( object )[ key ] = value; + + } + + function dispose() { + + properties = new WeakMap(); + + } + + return { + get: get, + remove: remove, + update: update, + dispose: dispose + }; + + } + + function painterSortStable( a, b ) { + + if ( a.groupOrder !== b.groupOrder ) { + + return a.groupOrder - b.groupOrder; + + } else if ( a.renderOrder !== b.renderOrder ) { + + return a.renderOrder - b.renderOrder; + + } else if ( a.program !== b.program ) { + + return a.program.id - b.program.id; + + } else if ( a.material.id !== b.material.id ) { + + return a.material.id - b.material.id; + + } else if ( a.z !== b.z ) { + + return a.z - b.z; + + } else { + + return a.id - b.id; + + } + + } + + function reversePainterSortStable( a, b ) { + + if ( a.groupOrder !== b.groupOrder ) { + + return a.groupOrder - b.groupOrder; + + } else if ( a.renderOrder !== b.renderOrder ) { + + return a.renderOrder - b.renderOrder; + + } else if ( a.z !== b.z ) { + + return b.z - a.z; + + } else { + + return a.id - b.id; + + } + + } + + + function WebGLRenderList( properties ) { + + var renderItems = []; + var renderItemsIndex = 0; + + var opaque = []; + var transparent = []; + + var defaultProgram = { id: - 1 }; + + function init() { + + renderItemsIndex = 0; + + opaque.length = 0; + transparent.length = 0; + + } + + function getNextRenderItem( object, geometry, material, groupOrder, z, group ) { + + var renderItem = renderItems[ renderItemsIndex ]; + var materialProperties = properties.get( material ); + + if ( renderItem === undefined ) { + + renderItem = { + id: object.id, + object: object, + geometry: geometry, + material: material, + program: materialProperties.program || defaultProgram, + groupOrder: groupOrder, + renderOrder: object.renderOrder, + z: z, + group: group + }; + + renderItems[ renderItemsIndex ] = renderItem; + + } else { + + renderItem.id = object.id; + renderItem.object = object; + renderItem.geometry = geometry; + renderItem.material = material; + renderItem.program = materialProperties.program || defaultProgram; + renderItem.groupOrder = groupOrder; + renderItem.renderOrder = object.renderOrder; + renderItem.z = z; + renderItem.group = group; + + } + + renderItemsIndex ++; + + return renderItem; + + } + + function push( object, geometry, material, groupOrder, z, group ) { + + var renderItem = getNextRenderItem( object, geometry, material, groupOrder, z, group ); + + ( material.transparent === true ? transparent : opaque ).push( renderItem ); + + } + + function unshift( object, geometry, material, groupOrder, z, group ) { + + var renderItem = getNextRenderItem( object, geometry, material, groupOrder, z, group ); + + ( material.transparent === true ? transparent : opaque ).unshift( renderItem ); + + } + + function sort( customOpaqueSort, customTransparentSort ) { + + if ( opaque.length > 1 ) { opaque.sort( customOpaqueSort || painterSortStable ); } + if ( transparent.length > 1 ) { transparent.sort( customTransparentSort || reversePainterSortStable ); } + + } + + function finish() { + + // Clear references from inactive renderItems in the list + + for ( var i = renderItemsIndex, il = renderItems.length; i < il; i ++ ) { + + var renderItem = renderItems[ i ]; + + if ( renderItem.id === null ) { break; } + + renderItem.id = null; + renderItem.object = null; + renderItem.geometry = null; + renderItem.material = null; + renderItem.program = null; + renderItem.group = null; + + } + + } + + return { + + opaque: opaque, + transparent: transparent, + + init: init, + push: push, + unshift: unshift, + finish: finish, + + sort: sort + }; + + } + + function WebGLRenderLists( properties ) { + + var lists = new WeakMap(); + + function get( scene, camera ) { + + var cameras = lists.get( scene ); + var list; + + if ( cameras === undefined ) { + + list = new WebGLRenderList( properties ); + lists.set( scene, new WeakMap() ); + lists.get( scene ).set( camera, list ); + + } else { + + list = cameras.get( camera ); + if ( list === undefined ) { + + list = new WebGLRenderList( properties ); + cameras.set( camera, list ); + + } + + } + + return list; + + } + + function dispose() { + + lists = new WeakMap(); + + } + + return { + get: get, + dispose: dispose + }; + + } + + function UniformsCache() { + + var lights = {}; + + return { + + get: function ( light ) { + + if ( lights[ light.id ] !== undefined ) { + + return lights[ light.id ]; + + } + + var uniforms; + + switch ( light.type ) { + + case 'DirectionalLight': + uniforms = { + direction: new Vector3(), + color: new Color() + }; + break; + + case 'SpotLight': + uniforms = { + position: new Vector3(), + direction: new Vector3(), + color: new Color(), + distance: 0, + coneCos: 0, + penumbraCos: 0, + decay: 0 + }; + break; + + case 'PointLight': + uniforms = { + position: new Vector3(), + color: new Color(), + distance: 0, + decay: 0 + }; + break; + + case 'HemisphereLight': + uniforms = { + direction: new Vector3(), + skyColor: new Color(), + groundColor: new Color() + }; + break; + + case 'RectAreaLight': + uniforms = { + color: new Color(), + position: new Vector3(), + halfWidth: new Vector3(), + halfHeight: new Vector3() + }; + break; + + } + + lights[ light.id ] = uniforms; + + return uniforms; + + } + + }; + + } + + function ShadowUniformsCache() { + + var lights = {}; + + return { + + get: function ( light ) { + + if ( lights[ light.id ] !== undefined ) { + + return lights[ light.id ]; + + } + + var uniforms; + + switch ( light.type ) { + + case 'DirectionalLight': + uniforms = { + shadowBias: 0, + shadowNormalBias: 0, + shadowRadius: 1, + shadowMapSize: new Vector2() + }; + break; + + case 'SpotLight': + uniforms = { + shadowBias: 0, + shadowNormalBias: 0, + shadowRadius: 1, + shadowMapSize: new Vector2() + }; + break; + + case 'PointLight': + uniforms = { + shadowBias: 0, + shadowNormalBias: 0, + shadowRadius: 1, + shadowMapSize: new Vector2(), + shadowCameraNear: 1, + shadowCameraFar: 1000 + }; + break; + + // TODO (abelnation): set RectAreaLight shadow uniforms + + } + + lights[ light.id ] = uniforms; + + return uniforms; + + } + + }; + + } + + + + var nextVersion = 0; + + function shadowCastingLightsFirst( lightA, lightB ) { + + return ( lightB.castShadow ? 1 : 0 ) - ( lightA.castShadow ? 1 : 0 ); + + } + + function WebGLLights() { + + var cache = new UniformsCache(); + + var shadowCache = ShadowUniformsCache(); + + var state = { + + version: 0, + + hash: { + directionalLength: - 1, + pointLength: - 1, + spotLength: - 1, + rectAreaLength: - 1, + hemiLength: - 1, + + numDirectionalShadows: - 1, + numPointShadows: - 1, + numSpotShadows: - 1 + }, + + ambient: [ 0, 0, 0 ], + probe: [], + directional: [], + directionalShadow: [], + directionalShadowMap: [], + directionalShadowMatrix: [], + spot: [], + spotShadow: [], + spotShadowMap: [], + spotShadowMatrix: [], + rectArea: [], + rectAreaLTC1: null, + rectAreaLTC2: null, + point: [], + pointShadow: [], + pointShadowMap: [], + pointShadowMatrix: [], + hemi: [] + + }; + + for ( var i = 0; i < 9; i ++ ) { state.probe.push( new Vector3() ); } + + var vector3 = new Vector3(); + var matrix4 = new Matrix4(); + var matrix42 = new Matrix4(); + + function setup( lights, shadows, camera ) { + + var r = 0, g = 0, b = 0; + + for ( var i = 0; i < 9; i ++ ) { state.probe[ i ].set( 0, 0, 0 ); } + + var directionalLength = 0; + var pointLength = 0; + var spotLength = 0; + var rectAreaLength = 0; + var hemiLength = 0; + + var numDirectionalShadows = 0; + var numPointShadows = 0; + var numSpotShadows = 0; + + var viewMatrix = camera.matrixWorldInverse; + + lights.sort( shadowCastingLightsFirst ); + + for ( var i$1 = 0, l = lights.length; i$1 < l; i$1 ++ ) { + + var light = lights[ i$1 ]; + + var color = light.color; + var intensity = light.intensity; + var distance = light.distance; + + var shadowMap = ( light.shadow && light.shadow.map ) ? light.shadow.map.texture : null; + + if ( light.isAmbientLight ) { + + r += color.r * intensity; + g += color.g * intensity; + b += color.b * intensity; + + } else if ( light.isLightProbe ) { + + for ( var j = 0; j < 9; j ++ ) { + + state.probe[ j ].addScaledVector( light.sh.coefficients[ j ], intensity ); + + } + + } else if ( light.isDirectionalLight ) { + + var uniforms = cache.get( light ); + + uniforms.color.copy( light.color ).multiplyScalar( light.intensity ); + uniforms.direction.setFromMatrixPosition( light.matrixWorld ); + vector3.setFromMatrixPosition( light.target.matrixWorld ); + uniforms.direction.sub( vector3 ); + uniforms.direction.transformDirection( viewMatrix ); + + if ( light.castShadow ) { + + var shadow = light.shadow; + + var shadowUniforms = shadowCache.get( light ); + + shadowUniforms.shadowBias = shadow.bias; + shadowUniforms.shadowNormalBias = shadow.normalBias; + shadowUniforms.shadowRadius = shadow.radius; + shadowUniforms.shadowMapSize = shadow.mapSize; + + state.directionalShadow[ directionalLength ] = shadowUniforms; + state.directionalShadowMap[ directionalLength ] = shadowMap; + state.directionalShadowMatrix[ directionalLength ] = light.shadow.matrix; + + numDirectionalShadows ++; + + } + + state.directional[ directionalLength ] = uniforms; + + directionalLength ++; + + } else if ( light.isSpotLight ) { + + var uniforms$1 = cache.get( light ); + + uniforms$1.position.setFromMatrixPosition( light.matrixWorld ); + uniforms$1.position.applyMatrix4( viewMatrix ); + + uniforms$1.color.copy( color ).multiplyScalar( intensity ); + uniforms$1.distance = distance; + + uniforms$1.direction.setFromMatrixPosition( light.matrixWorld ); + vector3.setFromMatrixPosition( light.target.matrixWorld ); + uniforms$1.direction.sub( vector3 ); + uniforms$1.direction.transformDirection( viewMatrix ); + + uniforms$1.coneCos = Math.cos( light.angle ); + uniforms$1.penumbraCos = Math.cos( light.angle * ( 1 - light.penumbra ) ); + uniforms$1.decay = light.decay; + + if ( light.castShadow ) { + + var shadow$1 = light.shadow; + + var shadowUniforms$1 = shadowCache.get( light ); + + shadowUniforms$1.shadowBias = shadow$1.bias; + shadowUniforms$1.shadowNormalBias = shadow$1.normalBias; + shadowUniforms$1.shadowRadius = shadow$1.radius; + shadowUniforms$1.shadowMapSize = shadow$1.mapSize; + + state.spotShadow[ spotLength ] = shadowUniforms$1; + state.spotShadowMap[ spotLength ] = shadowMap; + state.spotShadowMatrix[ spotLength ] = light.shadow.matrix; + + numSpotShadows ++; + + } + + state.spot[ spotLength ] = uniforms$1; + + spotLength ++; + + } else if ( light.isRectAreaLight ) { + + var uniforms$2 = cache.get( light ); + + // (a) intensity is the total visible light emitted + //uniforms.color.copy( color ).multiplyScalar( intensity / ( light.width * light.height * Math.PI ) ); + + // (b) intensity is the brightness of the light + uniforms$2.color.copy( color ).multiplyScalar( intensity ); + + uniforms$2.position.setFromMatrixPosition( light.matrixWorld ); + uniforms$2.position.applyMatrix4( viewMatrix ); + + // extract local rotation of light to derive width/height half vectors + matrix42.identity(); + matrix4.copy( light.matrixWorld ); + matrix4.premultiply( viewMatrix ); + matrix42.extractRotation( matrix4 ); + + uniforms$2.halfWidth.set( light.width * 0.5, 0.0, 0.0 ); + uniforms$2.halfHeight.set( 0.0, light.height * 0.5, 0.0 ); + + uniforms$2.halfWidth.applyMatrix4( matrix42 ); + uniforms$2.halfHeight.applyMatrix4( matrix42 ); + + // TODO (abelnation): RectAreaLight distance? + // uniforms.distance = distance; + + state.rectArea[ rectAreaLength ] = uniforms$2; + + rectAreaLength ++; + + } else if ( light.isPointLight ) { + + var uniforms$3 = cache.get( light ); + + uniforms$3.position.setFromMatrixPosition( light.matrixWorld ); + uniforms$3.position.applyMatrix4( viewMatrix ); + + uniforms$3.color.copy( light.color ).multiplyScalar( light.intensity ); + uniforms$3.distance = light.distance; + uniforms$3.decay = light.decay; + + if ( light.castShadow ) { + + var shadow$2 = light.shadow; + + var shadowUniforms$2 = shadowCache.get( light ); + + shadowUniforms$2.shadowBias = shadow$2.bias; + shadowUniforms$2.shadowNormalBias = shadow$2.normalBias; + shadowUniforms$2.shadowRadius = shadow$2.radius; + shadowUniforms$2.shadowMapSize = shadow$2.mapSize; + shadowUniforms$2.shadowCameraNear = shadow$2.camera.near; + shadowUniforms$2.shadowCameraFar = shadow$2.camera.far; + + state.pointShadow[ pointLength ] = shadowUniforms$2; + state.pointShadowMap[ pointLength ] = shadowMap; + state.pointShadowMatrix[ pointLength ] = light.shadow.matrix; + + numPointShadows ++; + + } + + state.point[ pointLength ] = uniforms$3; + + pointLength ++; + + } else if ( light.isHemisphereLight ) { + + var uniforms$4 = cache.get( light ); + + uniforms$4.direction.setFromMatrixPosition( light.matrixWorld ); + uniforms$4.direction.transformDirection( viewMatrix ); + uniforms$4.direction.normalize(); + + uniforms$4.skyColor.copy( light.color ).multiplyScalar( intensity ); + uniforms$4.groundColor.copy( light.groundColor ).multiplyScalar( intensity ); + + state.hemi[ hemiLength ] = uniforms$4; + + hemiLength ++; + + } + + } + + if ( rectAreaLength > 0 ) { + + state.rectAreaLTC1 = UniformsLib.LTC_1; + state.rectAreaLTC2 = UniformsLib.LTC_2; + + } + + state.ambient[ 0 ] = r; + state.ambient[ 1 ] = g; + state.ambient[ 2 ] = b; + + var hash = state.hash; + + if ( hash.directionalLength !== directionalLength || + hash.pointLength !== pointLength || + hash.spotLength !== spotLength || + hash.rectAreaLength !== rectAreaLength || + hash.hemiLength !== hemiLength || + hash.numDirectionalShadows !== numDirectionalShadows || + hash.numPointShadows !== numPointShadows || + hash.numSpotShadows !== numSpotShadows ) { + + state.directional.length = directionalLength; + state.spot.length = spotLength; + state.rectArea.length = rectAreaLength; + state.point.length = pointLength; + state.hemi.length = hemiLength; + + state.directionalShadow.length = numDirectionalShadows; + state.directionalShadowMap.length = numDirectionalShadows; + state.pointShadow.length = numPointShadows; + state.pointShadowMap.length = numPointShadows; + state.spotShadow.length = numSpotShadows; + state.spotShadowMap.length = numSpotShadows; + state.directionalShadowMatrix.length = numDirectionalShadows; + state.pointShadowMatrix.length = numPointShadows; + state.spotShadowMatrix.length = numSpotShadows; + + hash.directionalLength = directionalLength; + hash.pointLength = pointLength; + hash.spotLength = spotLength; + hash.rectAreaLength = rectAreaLength; + hash.hemiLength = hemiLength; + + hash.numDirectionalShadows = numDirectionalShadows; + hash.numPointShadows = numPointShadows; + hash.numSpotShadows = numSpotShadows; + + state.version = nextVersion ++; + + } + + } + + return { + setup: setup, + state: state + }; + + } + + function WebGLRenderState() { + + var lights = new WebGLLights(); + + var lightsArray = []; + var shadowsArray = []; + + function init() { + + lightsArray.length = 0; + shadowsArray.length = 0; + + } + + function pushLight( light ) { + + lightsArray.push( light ); + + } + + function pushShadow( shadowLight ) { + + shadowsArray.push( shadowLight ); + + } + + function setupLights( camera ) { + + lights.setup( lightsArray, shadowsArray, camera ); + + } + + var state = { + lightsArray: lightsArray, + shadowsArray: shadowsArray, + + lights: lights + }; + + return { + init: init, + state: state, + setupLights: setupLights, + + pushLight: pushLight, + pushShadow: pushShadow + }; + + } + + function WebGLRenderStates() { + + var renderStates = new WeakMap(); + + function get( scene, camera ) { + + var renderState; + + if ( renderStates.has( scene ) === false ) { + + renderState = new WebGLRenderState(); + renderStates.set( scene, new WeakMap() ); + renderStates.get( scene ).set( camera, renderState ); + + } else { + + if ( renderStates.get( scene ).has( camera ) === false ) { + + renderState = new WebGLRenderState(); + renderStates.get( scene ).set( camera, renderState ); + + } else { + + renderState = renderStates.get( scene ).get( camera ); + + } + + } + + return renderState; + + } + + function dispose() { + + renderStates = new WeakMap(); + + } + + return { + get: get, + dispose: dispose + }; + + } + + /** + * parameters = { + * + * opacity: , + * + * map: new THREE.Texture( ), + * + * alphaMap: new THREE.Texture( ), + * + * displacementMap: new THREE.Texture( ), + * displacementScale: , + * displacementBias: , + * + * wireframe: , + * wireframeLinewidth: + * } + */ + + function MeshDepthMaterial( parameters ) { + + Material.call( this ); + + this.type = 'MeshDepthMaterial'; + + this.depthPacking = BasicDepthPacking; + + this.skinning = false; + this.morphTargets = false; + + this.map = null; + + this.alphaMap = null; + + this.displacementMap = null; + this.displacementScale = 1; + this.displacementBias = 0; + + this.wireframe = false; + this.wireframeLinewidth = 1; + + this.fog = false; + + this.setValues( parameters ); + + } + + MeshDepthMaterial.prototype = Object.create( Material.prototype ); + MeshDepthMaterial.prototype.constructor = MeshDepthMaterial; + + MeshDepthMaterial.prototype.isMeshDepthMaterial = true; + + MeshDepthMaterial.prototype.copy = function ( source ) { + + Material.prototype.copy.call( this, source ); + + this.depthPacking = source.depthPacking; + + this.skinning = source.skinning; + this.morphTargets = source.morphTargets; + + this.map = source.map; + + this.alphaMap = source.alphaMap; + + this.displacementMap = source.displacementMap; + this.displacementScale = source.displacementScale; + this.displacementBias = source.displacementBias; + + this.wireframe = source.wireframe; + this.wireframeLinewidth = source.wireframeLinewidth; + + return this; + + }; + + /** + * parameters = { + * + * referencePosition: , + * nearDistance: , + * farDistance: , + * + * skinning: , + * morphTargets: , + * + * map: new THREE.Texture( ), + * + * alphaMap: new THREE.Texture( ), + * + * displacementMap: new THREE.Texture( ), + * displacementScale: , + * displacementBias: + * + * } + */ + + function MeshDistanceMaterial( parameters ) { + + Material.call( this ); + + this.type = 'MeshDistanceMaterial'; + + this.referencePosition = new Vector3(); + this.nearDistance = 1; + this.farDistance = 1000; + + this.skinning = false; + this.morphTargets = false; + + this.map = null; + + this.alphaMap = null; + + this.displacementMap = null; + this.displacementScale = 1; + this.displacementBias = 0; + + this.fog = false; + + this.setValues( parameters ); + + } + + MeshDistanceMaterial.prototype = Object.create( Material.prototype ); + MeshDistanceMaterial.prototype.constructor = MeshDistanceMaterial; + + MeshDistanceMaterial.prototype.isMeshDistanceMaterial = true; + + MeshDistanceMaterial.prototype.copy = function ( source ) { + + Material.prototype.copy.call( this, source ); + + this.referencePosition.copy( source.referencePosition ); + this.nearDistance = source.nearDistance; + this.farDistance = source.farDistance; + + this.skinning = source.skinning; + this.morphTargets = source.morphTargets; + + this.map = source.map; + + this.alphaMap = source.alphaMap; + + this.displacementMap = source.displacementMap; + this.displacementScale = source.displacementScale; + this.displacementBias = source.displacementBias; + + return this; + + }; + + var vsm_frag = "uniform sampler2D shadow_pass;\nuniform vec2 resolution;\nuniform float radius;\n#include \nvoid main() {\n\tfloat mean = 0.0;\n\tfloat squared_mean = 0.0;\n\tfloat depth = unpackRGBAToDepth( texture2D( shadow_pass, ( gl_FragCoord.xy ) / resolution ) );\n\tfor ( float i = -1.0; i < 1.0 ; i += SAMPLE_RATE) {\n\t\t#ifdef HORIZONAL_PASS\n\t\t\tvec2 distribution = unpackRGBATo2Half( texture2D( shadow_pass, ( gl_FragCoord.xy + vec2( i, 0.0 ) * radius ) / resolution ) );\n\t\t\tmean += distribution.x;\n\t\t\tsquared_mean += distribution.y * distribution.y + distribution.x * distribution.x;\n\t\t#else\n\t\t\tfloat depth = unpackRGBAToDepth( texture2D( shadow_pass, ( gl_FragCoord.xy + vec2( 0.0, i ) * radius ) / resolution ) );\n\t\t\tmean += depth;\n\t\t\tsquared_mean += depth * depth;\n\t\t#endif\n\t}\n\tmean = mean * HALF_SAMPLE_RATE;\n\tsquared_mean = squared_mean * HALF_SAMPLE_RATE;\n\tfloat std_dev = sqrt( squared_mean - mean * mean );\n\tgl_FragColor = pack2HalfToRGBA( vec2( mean, std_dev ) );\n}"; + + var vsm_vert = "void main() {\n\tgl_Position = vec4( position, 1.0 );\n}"; + + function WebGLShadowMap( _renderer, _objects, maxTextureSize ) { + + var _frustum = new Frustum(); + + var _shadowMapSize = new Vector2(), + _viewportSize = new Vector2(), + + _viewport = new Vector4(), + + _depthMaterials = [], + _distanceMaterials = [], + + _materialCache = {}; + + var shadowSide = { 0: BackSide, 1: FrontSide, 2: DoubleSide }; + + var shadowMaterialVertical = new ShaderMaterial( { + + defines: { + SAMPLE_RATE: 2.0 / 8.0, + HALF_SAMPLE_RATE: 1.0 / 8.0 + }, + + uniforms: { + shadow_pass: { value: null }, + resolution: { value: new Vector2() }, + radius: { value: 4.0 } + }, + + vertexShader: vsm_vert, + + fragmentShader: vsm_frag + + } ); + + var shadowMaterialHorizonal = shadowMaterialVertical.clone(); + shadowMaterialHorizonal.defines.HORIZONAL_PASS = 1; + + var fullScreenTri = new BufferGeometry(); + fullScreenTri.setAttribute( + "position", + new BufferAttribute( + new Float32Array( [ - 1, - 1, 0.5, 3, - 1, 0.5, - 1, 3, 0.5 ] ), + 3 + ) + ); + + var fullScreenMesh = new Mesh( fullScreenTri, shadowMaterialVertical ); + + var scope = this; + + this.enabled = false; + + this.autoUpdate = true; + this.needsUpdate = false; + + this.type = PCFShadowMap; + + this.render = function ( lights, scene, camera ) { + + if ( scope.enabled === false ) { return; } + if ( scope.autoUpdate === false && scope.needsUpdate === false ) { return; } + + if ( lights.length === 0 ) { return; } + + var currentRenderTarget = _renderer.getRenderTarget(); + var activeCubeFace = _renderer.getActiveCubeFace(); + var activeMipmapLevel = _renderer.getActiveMipmapLevel(); + + var _state = _renderer.state; + + // Set GL state for depth map. + _state.setBlending( NoBlending ); + _state.buffers.color.setClear( 1, 1, 1, 1 ); + _state.buffers.depth.setTest( true ); + _state.setScissorTest( false ); + + // render depth map + + for ( var i = 0, il = lights.length; i < il; i ++ ) { + + var light = lights[ i ]; + var shadow = light.shadow; + + if ( shadow.autoUpdate === false && shadow.needsUpdate === false ) { continue; } + + if ( shadow === undefined ) { + + console.warn( 'THREE.WebGLShadowMap:', light, 'has no shadow.' ); + continue; + + } + + _shadowMapSize.copy( shadow.mapSize ); + + var shadowFrameExtents = shadow.getFrameExtents(); + + _shadowMapSize.multiply( shadowFrameExtents ); + + _viewportSize.copy( shadow.mapSize ); + + if ( _shadowMapSize.x > maxTextureSize || _shadowMapSize.y > maxTextureSize ) { + + if ( _shadowMapSize.x > maxTextureSize ) { + + _viewportSize.x = Math.floor( maxTextureSize / shadowFrameExtents.x ); + _shadowMapSize.x = _viewportSize.x * shadowFrameExtents.x; + shadow.mapSize.x = _viewportSize.x; + + } + + if ( _shadowMapSize.y > maxTextureSize ) { + + _viewportSize.y = Math.floor( maxTextureSize / shadowFrameExtents.y ); + _shadowMapSize.y = _viewportSize.y * shadowFrameExtents.y; + shadow.mapSize.y = _viewportSize.y; + + } + + } + + if ( shadow.map === null && ! shadow.isPointLightShadow && this.type === VSMShadowMap ) { + + var pars = { minFilter: LinearFilter, magFilter: LinearFilter, format: RGBAFormat }; + + shadow.map = new WebGLRenderTarget( _shadowMapSize.x, _shadowMapSize.y, pars ); + shadow.map.texture.name = light.name + ".shadowMap"; + + shadow.mapPass = new WebGLRenderTarget( _shadowMapSize.x, _shadowMapSize.y, pars ); + + shadow.camera.updateProjectionMatrix(); + + } + + if ( shadow.map === null ) { + + var pars$1 = { minFilter: NearestFilter, magFilter: NearestFilter, format: RGBAFormat }; + + shadow.map = new WebGLRenderTarget( _shadowMapSize.x, _shadowMapSize.y, pars$1 ); + shadow.map.texture.name = light.name + ".shadowMap"; + + shadow.camera.updateProjectionMatrix(); + + } + + _renderer.setRenderTarget( shadow.map ); + _renderer.clear(); + + var viewportCount = shadow.getViewportCount(); + + for ( var vp = 0; vp < viewportCount; vp ++ ) { + + var viewport = shadow.getViewport( vp ); + + _viewport.set( + _viewportSize.x * viewport.x, + _viewportSize.y * viewport.y, + _viewportSize.x * viewport.z, + _viewportSize.y * viewport.w + ); + + _state.viewport( _viewport ); + + shadow.updateMatrices( light, vp ); + + _frustum = shadow.getFrustum(); + + renderObject( scene, camera, shadow.camera, light, this.type ); + + } + + // do blur pass for VSM + + if ( ! shadow.isPointLightShadow && this.type === VSMShadowMap ) { + + VSMPass( shadow, camera ); + + } + + shadow.needsUpdate = false; + + } + + scope.needsUpdate = false; + + _renderer.setRenderTarget( currentRenderTarget, activeCubeFace, activeMipmapLevel ); + + }; + + function VSMPass( shadow, camera ) { + + var geometry = _objects.update( fullScreenMesh ); + + // vertical pass + + shadowMaterialVertical.uniforms.shadow_pass.value = shadow.map.texture; + shadowMaterialVertical.uniforms.resolution.value = shadow.mapSize; + shadowMaterialVertical.uniforms.radius.value = shadow.radius; + _renderer.setRenderTarget( shadow.mapPass ); + _renderer.clear(); + _renderer.renderBufferDirect( camera, null, geometry, shadowMaterialVertical, fullScreenMesh, null ); + + // horizonal pass + + shadowMaterialHorizonal.uniforms.shadow_pass.value = shadow.mapPass.texture; + shadowMaterialHorizonal.uniforms.resolution.value = shadow.mapSize; + shadowMaterialHorizonal.uniforms.radius.value = shadow.radius; + _renderer.setRenderTarget( shadow.map ); + _renderer.clear(); + _renderer.renderBufferDirect( camera, null, geometry, shadowMaterialHorizonal, fullScreenMesh, null ); + + } + + function getDepthMaterialVariant( useMorphing, useSkinning, useInstancing ) { + + var index = useMorphing << 0 | useSkinning << 1 | useInstancing << 2; + + var material = _depthMaterials[ index ]; + + if ( material === undefined ) { + + material = new MeshDepthMaterial( { + + depthPacking: RGBADepthPacking, + + morphTargets: useMorphing, + skinning: useSkinning + + } ); + + _depthMaterials[ index ] = material; + + } + + return material; + + } + + function getDistanceMaterialVariant( useMorphing, useSkinning, useInstancing ) { + + var index = useMorphing << 0 | useSkinning << 1 | useInstancing << 2; + + var material = _distanceMaterials[ index ]; + + if ( material === undefined ) { + + material = new MeshDistanceMaterial( { + + morphTargets: useMorphing, + skinning: useSkinning + + } ); + + _distanceMaterials[ index ] = material; + + } + + return material; + + } + + function getDepthMaterial( object, geometry, material, light, shadowCameraNear, shadowCameraFar, type ) { + + var result = null; + + var getMaterialVariant = getDepthMaterialVariant; + var customMaterial = object.customDepthMaterial; + + if ( light.isPointLight === true ) { + + getMaterialVariant = getDistanceMaterialVariant; + customMaterial = object.customDistanceMaterial; + + } + + if ( customMaterial === undefined ) { + + var useMorphing = false; + + if ( material.morphTargets === true ) { + + useMorphing = geometry.morphAttributes && geometry.morphAttributes.position && geometry.morphAttributes.position.length > 0; + + } + + var useSkinning = false; + + if ( object.isSkinnedMesh === true ) { + + if ( material.skinning === true ) { + + useSkinning = true; + + } else { + + console.warn( 'THREE.WebGLShadowMap: THREE.SkinnedMesh with material.skinning set to false:', object ); + + } + + } + + var useInstancing = object.isInstancedMesh === true; + + result = getMaterialVariant( useMorphing, useSkinning, useInstancing ); + + } else { + + result = customMaterial; + + } + + if ( _renderer.localClippingEnabled && + material.clipShadows === true && + material.clippingPlanes.length !== 0 ) { + + // in this case we need a unique material instance reflecting the + // appropriate state + + var keyA = result.uuid, keyB = material.uuid; + + var materialsForVariant = _materialCache[ keyA ]; + + if ( materialsForVariant === undefined ) { + + materialsForVariant = {}; + _materialCache[ keyA ] = materialsForVariant; + + } + + var cachedMaterial = materialsForVariant[ keyB ]; + + if ( cachedMaterial === undefined ) { + + cachedMaterial = result.clone(); + materialsForVariant[ keyB ] = cachedMaterial; + + } + + result = cachedMaterial; + + } + + result.visible = material.visible; + result.wireframe = material.wireframe; + + if ( type === VSMShadowMap ) { + + result.side = ( material.shadowSide !== null ) ? material.shadowSide : material.side; + + } else { + + result.side = ( material.shadowSide !== null ) ? material.shadowSide : shadowSide[ material.side ]; + + } + + result.clipShadows = material.clipShadows; + result.clippingPlanes = material.clippingPlanes; + result.clipIntersection = material.clipIntersection; + + result.wireframeLinewidth = material.wireframeLinewidth; + result.linewidth = material.linewidth; + + if ( light.isPointLight === true && result.isMeshDistanceMaterial === true ) { + + result.referencePosition.setFromMatrixPosition( light.matrixWorld ); + result.nearDistance = shadowCameraNear; + result.farDistance = shadowCameraFar; + + } + + return result; + + } + + function renderObject( object, camera, shadowCamera, light, type ) { + + if ( object.visible === false ) { return; } + + var visible = object.layers.test( camera.layers ); + + if ( visible && ( object.isMesh || object.isLine || object.isPoints ) ) { + + if ( ( object.castShadow || ( object.receiveShadow && type === VSMShadowMap ) ) && ( ! object.frustumCulled || _frustum.intersectsObject( object ) ) ) { + + object.modelViewMatrix.multiplyMatrices( shadowCamera.matrixWorldInverse, object.matrixWorld ); + + var geometry = _objects.update( object ); + var material = object.material; + + if ( Array.isArray( material ) ) { + + var groups = geometry.groups; + + for ( var k = 0, kl = groups.length; k < kl; k ++ ) { + + var group = groups[ k ]; + var groupMaterial = material[ group.materialIndex ]; + + if ( groupMaterial && groupMaterial.visible ) { + + var depthMaterial = getDepthMaterial( object, geometry, groupMaterial, light, shadowCamera.near, shadowCamera.far, type ); + + _renderer.renderBufferDirect( shadowCamera, null, geometry, depthMaterial, object, group ); + + } + + } + + } else if ( material.visible ) { + + var depthMaterial$1 = getDepthMaterial( object, geometry, material, light, shadowCamera.near, shadowCamera.far, type ); + + _renderer.renderBufferDirect( shadowCamera, null, geometry, depthMaterial$1, object, null ); + + } + + } + + } + + var children = object.children; + + for ( var i = 0, l = children.length; i < l; i ++ ) { + + renderObject( children[ i ], camera, shadowCamera, light, type ); + + } + + } + + } + + function WebGLState( gl, extensions, capabilities ) { + + var isWebGL2 = capabilities.isWebGL2; + + function ColorBuffer() { + + var locked = false; + + var color = new Vector4(); + var currentColorMask = null; + var currentColorClear = new Vector4( 0, 0, 0, 0 ); + + return { + + setMask: function ( colorMask ) { + + if ( currentColorMask !== colorMask && ! locked ) { + + gl.colorMask( colorMask, colorMask, colorMask, colorMask ); + currentColorMask = colorMask; + + } + + }, + + setLocked: function ( lock ) { + + locked = lock; + + }, + + setClear: function ( r, g, b, a, premultipliedAlpha ) { + + if ( premultipliedAlpha === true ) { + + r *= a; g *= a; b *= a; + + } + + color.set( r, g, b, a ); + + if ( currentColorClear.equals( color ) === false ) { + + gl.clearColor( r, g, b, a ); + currentColorClear.copy( color ); + + } + + }, + + reset: function () { + + locked = false; + + currentColorMask = null; + currentColorClear.set( - 1, 0, 0, 0 ); // set to invalid state + + } + + }; + + } + + function DepthBuffer() { + + var locked = false; + + var currentDepthMask = null; + var currentDepthFunc = null; + var currentDepthClear = null; + + return { + + setTest: function ( depthTest ) { + + if ( depthTest ) { + + enable( 2929 ); + + } else { + + disable( 2929 ); + + } + + }, + + setMask: function ( depthMask ) { + + if ( currentDepthMask !== depthMask && ! locked ) { + + gl.depthMask( depthMask ); + currentDepthMask = depthMask; + + } + + }, + + setFunc: function ( depthFunc ) { + + if ( currentDepthFunc !== depthFunc ) { + + if ( depthFunc ) { + + switch ( depthFunc ) { + + case NeverDepth: + + gl.depthFunc( 512 ); + break; + + case AlwaysDepth: + + gl.depthFunc( 519 ); + break; + + case LessDepth: + + gl.depthFunc( 513 ); + break; + + case LessEqualDepth: + + gl.depthFunc( 515 ); + break; + + case EqualDepth: + + gl.depthFunc( 514 ); + break; + + case GreaterEqualDepth: + + gl.depthFunc( 518 ); + break; + + case GreaterDepth: + + gl.depthFunc( 516 ); + break; + + case NotEqualDepth: + + gl.depthFunc( 517 ); + break; + + default: + + gl.depthFunc( 515 ); + + } + + } else { + + gl.depthFunc( 515 ); + + } + + currentDepthFunc = depthFunc; + + } + + }, + + setLocked: function ( lock ) { + + locked = lock; + + }, + + setClear: function ( depth ) { + + if ( currentDepthClear !== depth ) { + + gl.clearDepth( depth ); + currentDepthClear = depth; + + } + + }, + + reset: function () { + + locked = false; + + currentDepthMask = null; + currentDepthFunc = null; + currentDepthClear = null; + + } + + }; + + } + + function StencilBuffer() { + + var locked = false; + + var currentStencilMask = null; + var currentStencilFunc = null; + var currentStencilRef = null; + var currentStencilFuncMask = null; + var currentStencilFail = null; + var currentStencilZFail = null; + var currentStencilZPass = null; + var currentStencilClear = null; + + return { + + setTest: function ( stencilTest ) { + + if ( ! locked ) { + + if ( stencilTest ) { + + enable( 2960 ); + + } else { + + disable( 2960 ); + + } + + } + + }, + + setMask: function ( stencilMask ) { + + if ( currentStencilMask !== stencilMask && ! locked ) { + + gl.stencilMask( stencilMask ); + currentStencilMask = stencilMask; + + } + + }, + + setFunc: function ( stencilFunc, stencilRef, stencilMask ) { + + if ( currentStencilFunc !== stencilFunc || + currentStencilRef !== stencilRef || + currentStencilFuncMask !== stencilMask ) { + + gl.stencilFunc( stencilFunc, stencilRef, stencilMask ); + + currentStencilFunc = stencilFunc; + currentStencilRef = stencilRef; + currentStencilFuncMask = stencilMask; + + } + + }, + + setOp: function ( stencilFail, stencilZFail, stencilZPass ) { + + if ( currentStencilFail !== stencilFail || + currentStencilZFail !== stencilZFail || + currentStencilZPass !== stencilZPass ) { + + gl.stencilOp( stencilFail, stencilZFail, stencilZPass ); + + currentStencilFail = stencilFail; + currentStencilZFail = stencilZFail; + currentStencilZPass = stencilZPass; + + } + + }, + + setLocked: function ( lock ) { + + locked = lock; + + }, + + setClear: function ( stencil ) { + + if ( currentStencilClear !== stencil ) { + + gl.clearStencil( stencil ); + currentStencilClear = stencil; + + } + + }, + + reset: function () { + + locked = false; + + currentStencilMask = null; + currentStencilFunc = null; + currentStencilRef = null; + currentStencilFuncMask = null; + currentStencilFail = null; + currentStencilZFail = null; + currentStencilZPass = null; + currentStencilClear = null; + + } + + }; + + } + + // + + var colorBuffer = new ColorBuffer(); + var depthBuffer = new DepthBuffer(); + var stencilBuffer = new StencilBuffer(); + + var enabledCapabilities = {}; + + var currentProgram = null; + + var currentBlendingEnabled = null; + var currentBlending = null; + var currentBlendEquation = null; + var currentBlendSrc = null; + var currentBlendDst = null; + var currentBlendEquationAlpha = null; + var currentBlendSrcAlpha = null; + var currentBlendDstAlpha = null; + var currentPremultipledAlpha = false; + + var currentFlipSided = null; + var currentCullFace = null; + + var currentLineWidth = null; + + var currentPolygonOffsetFactor = null; + var currentPolygonOffsetUnits = null; + + var maxTextures = gl.getParameter( 35661 ); + + var lineWidthAvailable = false; + var version = 0; + var glVersion = gl.getParameter( 7938 ); + + if ( glVersion.indexOf( 'WebGL' ) !== - 1 ) { + + version = parseFloat( /^WebGL\ ([0-9])/.exec( glVersion )[ 1 ] ); + lineWidthAvailable = ( version >= 1.0 ); + + } else if ( glVersion.indexOf( 'OpenGL ES' ) !== - 1 ) { + + version = parseFloat( /^OpenGL\ ES\ ([0-9])/.exec( glVersion )[ 1 ] ); + lineWidthAvailable = ( version >= 2.0 ); + + } + + var currentTextureSlot = null; + var currentBoundTextures = {}; + + var currentScissor = new Vector4(); + var currentViewport = new Vector4(); + + function createTexture( type, target, count ) { + + var data = new Uint8Array( 4 ); // 4 is required to match default unpack alignment of 4. + var texture = gl.createTexture(); + + gl.bindTexture( type, texture ); + gl.texParameteri( type, 10241, 9728 ); + gl.texParameteri( type, 10240, 9728 ); + + for ( var i = 0; i < count; i ++ ) { + + gl.texImage2D( target + i, 0, 6408, 1, 1, 0, 6408, 5121, data ); + + } + + return texture; + + } + + var emptyTextures = {}; + emptyTextures[ 3553 ] = createTexture( 3553, 3553, 1 ); + emptyTextures[ 34067 ] = createTexture( 34067, 34069, 6 ); + + // init + + colorBuffer.setClear( 0, 0, 0, 1 ); + depthBuffer.setClear( 1 ); + stencilBuffer.setClear( 0 ); + + enable( 2929 ); + depthBuffer.setFunc( LessEqualDepth ); + + setFlipSided( false ); + setCullFace( CullFaceBack ); + enable( 2884 ); + + setBlending( NoBlending ); + + // + + function enable( id ) { + + if ( enabledCapabilities[ id ] !== true ) { + + gl.enable( id ); + enabledCapabilities[ id ] = true; + + } + + } + + function disable( id ) { + + if ( enabledCapabilities[ id ] !== false ) { + + gl.disable( id ); + enabledCapabilities[ id ] = false; + + } + + } + + function useProgram( program ) { + + if ( currentProgram !== program ) { + + gl.useProgram( program ); + + currentProgram = program; + + return true; + + } + + return false; + + } + + var equationToGL = {}; + equationToGL[ AddEquation ] = 32774; + equationToGL[ SubtractEquation ] = 32778; + equationToGL[ ReverseSubtractEquation ] = 32779; + + if ( isWebGL2 ) { + + equationToGL[ MinEquation ] = 32775; + equationToGL[ MaxEquation ] = 32776; + + } else { + + var extension = extensions.get( 'EXT_blend_minmax' ); + + if ( extension !== null ) { + + equationToGL[ MinEquation ] = extension.MIN_EXT; + equationToGL[ MaxEquation ] = extension.MAX_EXT; + + } + + } + + var factorToGL = {}; + factorToGL[ ZeroFactor ] = 0; + factorToGL[ OneFactor ] = 1; + factorToGL[ SrcColorFactor ] = 768; + factorToGL[ SrcAlphaFactor ] = 770; + factorToGL[ SrcAlphaSaturateFactor ] = 776; + factorToGL[ DstColorFactor ] = 774; + factorToGL[ DstAlphaFactor ] = 772; + factorToGL[ OneMinusSrcColorFactor ] = 769; + factorToGL[ OneMinusSrcAlphaFactor ] = 771; + factorToGL[ OneMinusDstColorFactor ] = 775; + factorToGL[ OneMinusDstAlphaFactor ] = 773; + + function setBlending( blending, blendEquation, blendSrc, blendDst, blendEquationAlpha, blendSrcAlpha, blendDstAlpha, premultipliedAlpha ) { + + if ( blending === NoBlending ) { + + if ( currentBlendingEnabled ) { + + disable( 3042 ); + currentBlendingEnabled = false; + + } + + return; + + } + + if ( ! currentBlendingEnabled ) { + + enable( 3042 ); + currentBlendingEnabled = true; + + } + + if ( blending !== CustomBlending ) { + + if ( blending !== currentBlending || premultipliedAlpha !== currentPremultipledAlpha ) { + + if ( currentBlendEquation !== AddEquation || currentBlendEquationAlpha !== AddEquation ) { + + gl.blendEquation( 32774 ); + + currentBlendEquation = AddEquation; + currentBlendEquationAlpha = AddEquation; + + } + + if ( premultipliedAlpha ) { + + switch ( blending ) { + + case NormalBlending: + gl.blendFuncSeparate( 1, 771, 1, 771 ); + break; + + case AdditiveBlending: + gl.blendFunc( 1, 1 ); + break; + + case SubtractiveBlending: + gl.blendFuncSeparate( 0, 0, 769, 771 ); + break; + + case MultiplyBlending: + gl.blendFuncSeparate( 0, 768, 0, 770 ); + break; + + default: + console.error( 'THREE.WebGLState: Invalid blending: ', blending ); + break; + + } + + } else { + + switch ( blending ) { + + case NormalBlending: + gl.blendFuncSeparate( 770, 771, 1, 771 ); + break; + + case AdditiveBlending: + gl.blendFunc( 770, 1 ); + break; + + case SubtractiveBlending: + gl.blendFunc( 0, 769 ); + break; + + case MultiplyBlending: + gl.blendFunc( 0, 768 ); + break; + + default: + console.error( 'THREE.WebGLState: Invalid blending: ', blending ); + break; + + } + + } + + currentBlendSrc = null; + currentBlendDst = null; + currentBlendSrcAlpha = null; + currentBlendDstAlpha = null; + + currentBlending = blending; + currentPremultipledAlpha = premultipliedAlpha; + + } + + return; + + } + + // custom blending + + blendEquationAlpha = blendEquationAlpha || blendEquation; + blendSrcAlpha = blendSrcAlpha || blendSrc; + blendDstAlpha = blendDstAlpha || blendDst; + + if ( blendEquation !== currentBlendEquation || blendEquationAlpha !== currentBlendEquationAlpha ) { + + gl.blendEquationSeparate( equationToGL[ blendEquation ], equationToGL[ blendEquationAlpha ] ); + + currentBlendEquation = blendEquation; + currentBlendEquationAlpha = blendEquationAlpha; + + } + + if ( blendSrc !== currentBlendSrc || blendDst !== currentBlendDst || blendSrcAlpha !== currentBlendSrcAlpha || blendDstAlpha !== currentBlendDstAlpha ) { + + gl.blendFuncSeparate( factorToGL[ blendSrc ], factorToGL[ blendDst ], factorToGL[ blendSrcAlpha ], factorToGL[ blendDstAlpha ] ); + + currentBlendSrc = blendSrc; + currentBlendDst = blendDst; + currentBlendSrcAlpha = blendSrcAlpha; + currentBlendDstAlpha = blendDstAlpha; + + } + + currentBlending = blending; + currentPremultipledAlpha = null; + + } + + function setMaterial( material, frontFaceCW ) { + + material.side === DoubleSide + ? disable( 2884 ) + : enable( 2884 ); + + var flipSided = ( material.side === BackSide ); + if ( frontFaceCW ) { flipSided = ! flipSided; } + + setFlipSided( flipSided ); + + ( material.blending === NormalBlending && material.transparent === false ) + ? setBlending( NoBlending ) + : setBlending( material.blending, material.blendEquation, material.blendSrc, material.blendDst, material.blendEquationAlpha, material.blendSrcAlpha, material.blendDstAlpha, material.premultipliedAlpha ); + + depthBuffer.setFunc( material.depthFunc ); + depthBuffer.setTest( material.depthTest ); + depthBuffer.setMask( material.depthWrite ); + colorBuffer.setMask( material.colorWrite ); + + var stencilWrite = material.stencilWrite; + stencilBuffer.setTest( stencilWrite ); + if ( stencilWrite ) { + + stencilBuffer.setMask( material.stencilWriteMask ); + stencilBuffer.setFunc( material.stencilFunc, material.stencilRef, material.stencilFuncMask ); + stencilBuffer.setOp( material.stencilFail, material.stencilZFail, material.stencilZPass ); + + } + + setPolygonOffset( material.polygonOffset, material.polygonOffsetFactor, material.polygonOffsetUnits ); + + } + + // + + function setFlipSided( flipSided ) { + + if ( currentFlipSided !== flipSided ) { + + if ( flipSided ) { + + gl.frontFace( 2304 ); + + } else { + + gl.frontFace( 2305 ); + + } + + currentFlipSided = flipSided; + + } + + } + + function setCullFace( cullFace ) { + + if ( cullFace !== CullFaceNone ) { + + enable( 2884 ); + + if ( cullFace !== currentCullFace ) { + + if ( cullFace === CullFaceBack ) { + + gl.cullFace( 1029 ); + + } else if ( cullFace === CullFaceFront ) { + + gl.cullFace( 1028 ); + + } else { + + gl.cullFace( 1032 ); + + } + + } + + } else { + + disable( 2884 ); + + } + + currentCullFace = cullFace; + + } + + function setLineWidth( width ) { + + if ( width !== currentLineWidth ) { + + if ( lineWidthAvailable ) { gl.lineWidth( width ); } + + currentLineWidth = width; + + } + + } + + function setPolygonOffset( polygonOffset, factor, units ) { + + if ( polygonOffset ) { + + enable( 32823 ); + + if ( currentPolygonOffsetFactor !== factor || currentPolygonOffsetUnits !== units ) { + + gl.polygonOffset( factor, units ); + + currentPolygonOffsetFactor = factor; + currentPolygonOffsetUnits = units; + + } + + } else { + + disable( 32823 ); + + } + + } + + function setScissorTest( scissorTest ) { + + if ( scissorTest ) { + + enable( 3089 ); + + } else { + + disable( 3089 ); + + } + + } + + // texture + + function activeTexture( webglSlot ) { + + if ( webglSlot === undefined ) { webglSlot = 33984 + maxTextures - 1; } + + if ( currentTextureSlot !== webglSlot ) { + + gl.activeTexture( webglSlot ); + currentTextureSlot = webglSlot; + + } + + } + + function bindTexture( webglType, webglTexture ) { + + if ( currentTextureSlot === null ) { + + activeTexture(); + + } + + var boundTexture = currentBoundTextures[ currentTextureSlot ]; + + if ( boundTexture === undefined ) { + + boundTexture = { type: undefined, texture: undefined }; + currentBoundTextures[ currentTextureSlot ] = boundTexture; + + } + + if ( boundTexture.type !== webglType || boundTexture.texture !== webglTexture ) { + + gl.bindTexture( webglType, webglTexture || emptyTextures[ webglType ] ); + + boundTexture.type = webglType; + boundTexture.texture = webglTexture; + + } + + } + + function unbindTexture() { + + var boundTexture = currentBoundTextures[ currentTextureSlot ]; + + if ( boundTexture !== undefined && boundTexture.type !== undefined ) { + + gl.bindTexture( boundTexture.type, null ); + + boundTexture.type = undefined; + boundTexture.texture = undefined; + + } + + } + + function compressedTexImage2D() { + + try { + + gl.compressedTexImage2D.apply( gl, arguments ); + + } catch ( error ) { + + console.error( 'THREE.WebGLState:', error ); + + } + + } + + function texImage2D() { + + try { + + gl.texImage2D.apply( gl, arguments ); + + } catch ( error ) { + + console.error( 'THREE.WebGLState:', error ); + + } + + } + + function texImage3D() { + + try { + + gl.texImage3D.apply( gl, arguments ); + + } catch ( error ) { + + console.error( 'THREE.WebGLState:', error ); + + } + + } + + // + + function scissor( scissor ) { + + if ( currentScissor.equals( scissor ) === false ) { + + gl.scissor( scissor.x, scissor.y, scissor.z, scissor.w ); + currentScissor.copy( scissor ); + + } + + } + + function viewport( viewport ) { + + if ( currentViewport.equals( viewport ) === false ) { + + gl.viewport( viewport.x, viewport.y, viewport.z, viewport.w ); + currentViewport.copy( viewport ); + + } + + } + + // + + function reset() { + + enabledCapabilities = {}; + + currentTextureSlot = null; + currentBoundTextures = {}; + + currentProgram = null; + + currentBlending = null; + + currentFlipSided = null; + currentCullFace = null; + + colorBuffer.reset(); + depthBuffer.reset(); + stencilBuffer.reset(); + + } + + return { + + buffers: { + color: colorBuffer, + depth: depthBuffer, + stencil: stencilBuffer + }, + + enable: enable, + disable: disable, + + useProgram: useProgram, + + setBlending: setBlending, + setMaterial: setMaterial, + + setFlipSided: setFlipSided, + setCullFace: setCullFace, + + setLineWidth: setLineWidth, + setPolygonOffset: setPolygonOffset, + + setScissorTest: setScissorTest, + + activeTexture: activeTexture, + bindTexture: bindTexture, + unbindTexture: unbindTexture, + compressedTexImage2D: compressedTexImage2D, + texImage2D: texImage2D, + texImage3D: texImage3D, + + scissor: scissor, + viewport: viewport, + + reset: reset + + }; + + } + + function WebGLTextures( _gl, extensions, state, properties, capabilities, utils, info ) { + + var isWebGL2 = capabilities.isWebGL2; + var maxTextures = capabilities.maxTextures; + var maxCubemapSize = capabilities.maxCubemapSize; + var maxTextureSize = capabilities.maxTextureSize; + var maxSamples = capabilities.maxSamples; + + var _videoTextures = new WeakMap(); + var _canvas; + + // cordova iOS (as of 5.0) still uses UIWebView, which provides OffscreenCanvas, + // also OffscreenCanvas.getContext("webgl"), but not OffscreenCanvas.getContext("2d")! + // Some implementations may only implement OffscreenCanvas partially (e.g. lacking 2d). + + var useOffscreenCanvas = false; + + try { + + useOffscreenCanvas = typeof OffscreenCanvas !== 'undefined' + && ( new OffscreenCanvas( 1, 1 ).getContext( "2d" ) ) !== null; + + } catch ( err ) { + + // Ignore any errors + + } + + function createCanvas( width, height ) { + + // Use OffscreenCanvas when available. Specially needed in web workers + + return useOffscreenCanvas ? + new OffscreenCanvas( width, height ) : + document.createElementNS( 'http://www.w3.org/1999/xhtml', 'canvas' ); + + } + + function resizeImage( image, needsPowerOfTwo, needsNewCanvas, maxSize ) { + + var scale = 1; + + // handle case if texture exceeds max size + + if ( image.width > maxSize || image.height > maxSize ) { + + scale = maxSize / Math.max( image.width, image.height ); + + } + + // only perform resize if necessary + + if ( scale < 1 || needsPowerOfTwo === true ) { + + // only perform resize for certain image types + + if ( ( typeof HTMLImageElement !== 'undefined' && image instanceof HTMLImageElement ) || + ( typeof HTMLCanvasElement !== 'undefined' && image instanceof HTMLCanvasElement ) || + ( typeof ImageBitmap !== 'undefined' && image instanceof ImageBitmap ) ) { + + var floor = needsPowerOfTwo ? MathUtils.floorPowerOfTwo : Math.floor; + + var width = floor( scale * image.width ); + var height = floor( scale * image.height ); + + if ( _canvas === undefined ) { _canvas = createCanvas( width, height ); } + + // cube textures can't reuse the same canvas + + var canvas = needsNewCanvas ? createCanvas( width, height ) : _canvas; + + canvas.width = width; + canvas.height = height; + + var context = canvas.getContext( '2d' ); + context.drawImage( image, 0, 0, width, height ); + + console.warn( 'THREE.WebGLRenderer: Texture has been resized from (' + image.width + 'x' + image.height + ') to (' + width + 'x' + height + ').' ); + + return canvas; + + } else { + + if ( 'data' in image ) { + + console.warn( 'THREE.WebGLRenderer: Image in DataTexture is too big (' + image.width + 'x' + image.height + ').' ); + + } + + return image; + + } + + } + + return image; + + } + + function isPowerOfTwo( image ) { + + return MathUtils.isPowerOfTwo( image.width ) && MathUtils.isPowerOfTwo( image.height ); + + } + + function textureNeedsPowerOfTwo( texture ) { + + if ( isWebGL2 ) { return false; } + + return ( texture.wrapS !== ClampToEdgeWrapping || texture.wrapT !== ClampToEdgeWrapping ) || + ( texture.minFilter !== NearestFilter && texture.minFilter !== LinearFilter ); + + } + + function textureNeedsGenerateMipmaps( texture, supportsMips ) { + + return texture.generateMipmaps && supportsMips && + texture.minFilter !== NearestFilter && texture.minFilter !== LinearFilter; + + } + + function generateMipmap( target, texture, width, height ) { + + _gl.generateMipmap( target ); + + var textureProperties = properties.get( texture ); + + // Note: Math.log( x ) * Math.LOG2E used instead of Math.log2( x ) which is not supported by IE11 + textureProperties.__maxMipLevel = Math.log( Math.max( width, height ) ) * Math.LOG2E; + + } + + function getInternalFormat( internalFormatName, glFormat, glType ) { + + if ( isWebGL2 === false ) { return glFormat; } + + if ( internalFormatName !== null ) { + + if ( _gl[ internalFormatName ] !== undefined ) { return _gl[ internalFormatName ]; } + + console.warn( 'THREE.WebGLRenderer: Attempt to use non-existing WebGL internal format \'' + internalFormatName + '\'' ); + + } + + var internalFormat = glFormat; + + if ( glFormat === 6403 ) { + + if ( glType === 5126 ) { internalFormat = 33326; } + if ( glType === 5131 ) { internalFormat = 33325; } + if ( glType === 5121 ) { internalFormat = 33321; } + + } + + if ( glFormat === 6407 ) { + + if ( glType === 5126 ) { internalFormat = 34837; } + if ( glType === 5131 ) { internalFormat = 34843; } + if ( glType === 5121 ) { internalFormat = 32849; } + + } + + if ( glFormat === 6408 ) { + + if ( glType === 5126 ) { internalFormat = 34836; } + if ( glType === 5131 ) { internalFormat = 34842; } + if ( glType === 5121 ) { internalFormat = 32856; } + + } + + if ( internalFormat === 33325 || internalFormat === 33326 || + internalFormat === 34842 || internalFormat === 34836 ) { + + extensions.get( 'EXT_color_buffer_float' ); + + } + + return internalFormat; + + } + + // Fallback filters for non-power-of-2 textures + + function filterFallback( f ) { + + if ( f === NearestFilter || f === NearestMipmapNearestFilter || f === NearestMipmapLinearFilter ) { + + return 9728; + + } + + return 9729; + + } + + // + + function onTextureDispose( event ) { + + var texture = event.target; + + texture.removeEventListener( 'dispose', onTextureDispose ); + + deallocateTexture( texture ); + + if ( texture.isVideoTexture ) { + + _videoTextures.delete( texture ); + + } + + info.memory.textures --; + + } + + function onRenderTargetDispose( event ) { + + var renderTarget = event.target; + + renderTarget.removeEventListener( 'dispose', onRenderTargetDispose ); + + deallocateRenderTarget( renderTarget ); + + info.memory.textures --; + + } + + // + + function deallocateTexture( texture ) { + + var textureProperties = properties.get( texture ); + + if ( textureProperties.__webglInit === undefined ) { return; } + + _gl.deleteTexture( textureProperties.__webglTexture ); + + properties.remove( texture ); + + } + + function deallocateRenderTarget( renderTarget ) { + + var renderTargetProperties = properties.get( renderTarget ); + var textureProperties = properties.get( renderTarget.texture ); + + if ( ! renderTarget ) { return; } + + if ( textureProperties.__webglTexture !== undefined ) { + + _gl.deleteTexture( textureProperties.__webglTexture ); + + } + + if ( renderTarget.depthTexture ) { + + renderTarget.depthTexture.dispose(); + + } + + if ( renderTarget.isWebGLCubeRenderTarget ) { + + for ( var i = 0; i < 6; i ++ ) { + + _gl.deleteFramebuffer( renderTargetProperties.__webglFramebuffer[ i ] ); + if ( renderTargetProperties.__webglDepthbuffer ) { _gl.deleteRenderbuffer( renderTargetProperties.__webglDepthbuffer[ i ] ); } + + } + + } else { + + _gl.deleteFramebuffer( renderTargetProperties.__webglFramebuffer ); + if ( renderTargetProperties.__webglDepthbuffer ) { _gl.deleteRenderbuffer( renderTargetProperties.__webglDepthbuffer ); } + if ( renderTargetProperties.__webglMultisampledFramebuffer ) { _gl.deleteFramebuffer( renderTargetProperties.__webglMultisampledFramebuffer ); } + if ( renderTargetProperties.__webglColorRenderbuffer ) { _gl.deleteRenderbuffer( renderTargetProperties.__webglColorRenderbuffer ); } + if ( renderTargetProperties.__webglDepthRenderbuffer ) { _gl.deleteRenderbuffer( renderTargetProperties.__webglDepthRenderbuffer ); } + + } + + properties.remove( renderTarget.texture ); + properties.remove( renderTarget ); + + } + + // + + var textureUnits = 0; + + function resetTextureUnits() { + + textureUnits = 0; + + } + + function allocateTextureUnit() { + + var textureUnit = textureUnits; + + if ( textureUnit >= maxTextures ) { + + console.warn( 'THREE.WebGLTextures: Trying to use ' + textureUnit + ' texture units while this GPU supports only ' + maxTextures ); + + } + + textureUnits += 1; + + return textureUnit; + + } + + // + + function setTexture2D( texture, slot ) { + + var textureProperties = properties.get( texture ); + + if ( texture.isVideoTexture ) { updateVideoTexture( texture ); } + + if ( texture.version > 0 && textureProperties.__version !== texture.version ) { + + var image = texture.image; + + if ( image === undefined ) { + + console.warn( 'THREE.WebGLRenderer: Texture marked for update but image is undefined' ); + + } else if ( image.complete === false ) { + + console.warn( 'THREE.WebGLRenderer: Texture marked for update but image is incomplete' ); + + } else { + + uploadTexture( textureProperties, texture, slot ); + return; + + } + + } + + state.activeTexture( 33984 + slot ); + state.bindTexture( 3553, textureProperties.__webglTexture ); + + } + + function setTexture2DArray( texture, slot ) { + + var textureProperties = properties.get( texture ); + + if ( texture.version > 0 && textureProperties.__version !== texture.version ) { + + uploadTexture( textureProperties, texture, slot ); + return; + + } + + state.activeTexture( 33984 + slot ); + state.bindTexture( 35866, textureProperties.__webglTexture ); + + } + + function setTexture3D( texture, slot ) { + + var textureProperties = properties.get( texture ); + + if ( texture.version > 0 && textureProperties.__version !== texture.version ) { + + uploadTexture( textureProperties, texture, slot ); + return; + + } + + state.activeTexture( 33984 + slot ); + state.bindTexture( 32879, textureProperties.__webglTexture ); + + } + + function setTextureCube( texture, slot ) { + + if ( texture.image.length !== 6 ) { return; } + + var textureProperties = properties.get( texture ); + + if ( texture.version > 0 && textureProperties.__version !== texture.version ) { + + initTexture( textureProperties, texture ); + + state.activeTexture( 33984 + slot ); + state.bindTexture( 34067, textureProperties.__webglTexture ); + + _gl.pixelStorei( 37440, texture.flipY ); + + var isCompressed = ( texture && ( texture.isCompressedTexture || texture.image[ 0 ].isCompressedTexture ) ); + var isDataTexture = ( texture.image[ 0 ] && texture.image[ 0 ].isDataTexture ); + + var cubeImage = []; + + for ( var i = 0; i < 6; i ++ ) { + + if ( ! isCompressed && ! isDataTexture ) { + + cubeImage[ i ] = resizeImage( texture.image[ i ], false, true, maxCubemapSize ); + + } else { + + cubeImage[ i ] = isDataTexture ? texture.image[ i ].image : texture.image[ i ]; + + } + + } + + var image = cubeImage[ 0 ], + supportsMips = isPowerOfTwo( image ) || isWebGL2, + glFormat = utils.convert( texture.format ), + glType = utils.convert( texture.type ), + glInternalFormat = getInternalFormat( texture.internalFormat, glFormat, glType ); + + setTextureParameters( 34067, texture, supportsMips ); + + var mipmaps; + + if ( isCompressed ) { + + for ( var i$1 = 0; i$1 < 6; i$1 ++ ) { + + mipmaps = cubeImage[ i$1 ].mipmaps; + + for ( var j = 0; j < mipmaps.length; j ++ ) { + + var mipmap = mipmaps[ j ]; + + if ( texture.format !== RGBAFormat && texture.format !== RGBFormat ) { + + if ( glFormat !== null ) { + + state.compressedTexImage2D( 34069 + i$1, j, glInternalFormat, mipmap.width, mipmap.height, 0, mipmap.data ); + + } else { + + console.warn( 'THREE.WebGLRenderer: Attempt to load unsupported compressed texture format in .setTextureCube()' ); + + } + + } else { + + state.texImage2D( 34069 + i$1, j, glInternalFormat, mipmap.width, mipmap.height, 0, glFormat, glType, mipmap.data ); + + } + + } + + } + + textureProperties.__maxMipLevel = mipmaps.length - 1; + + } else { + + mipmaps = texture.mipmaps; + + for ( var i$2 = 0; i$2 < 6; i$2 ++ ) { + + if ( isDataTexture ) { + + state.texImage2D( 34069 + i$2, 0, glInternalFormat, cubeImage[ i$2 ].width, cubeImage[ i$2 ].height, 0, glFormat, glType, cubeImage[ i$2 ].data ); + + for ( var j$1 = 0; j$1 < mipmaps.length; j$1 ++ ) { + + var mipmap$1 = mipmaps[ j$1 ]; + var mipmapImage = mipmap$1.image[ i$2 ].image; + + state.texImage2D( 34069 + i$2, j$1 + 1, glInternalFormat, mipmapImage.width, mipmapImage.height, 0, glFormat, glType, mipmapImage.data ); + + } + + } else { + + state.texImage2D( 34069 + i$2, 0, glInternalFormat, glFormat, glType, cubeImage[ i$2 ] ); + + for ( var j$2 = 0; j$2 < mipmaps.length; j$2 ++ ) { + + var mipmap$2 = mipmaps[ j$2 ]; + + state.texImage2D( 34069 + i$2, j$2 + 1, glInternalFormat, glFormat, glType, mipmap$2.image[ i$2 ] ); + + } + + } + + } + + textureProperties.__maxMipLevel = mipmaps.length; + + } + + if ( textureNeedsGenerateMipmaps( texture, supportsMips ) ) { + + // We assume images for cube map have the same size. + generateMipmap( 34067, texture, image.width, image.height ); + + } + + textureProperties.__version = texture.version; + + if ( texture.onUpdate ) { texture.onUpdate( texture ); } + + } else { + + state.activeTexture( 33984 + slot ); + state.bindTexture( 34067, textureProperties.__webglTexture ); + + } + + } + + function setTextureCubeDynamic( texture, slot ) { + + state.activeTexture( 33984 + slot ); + state.bindTexture( 34067, properties.get( texture ).__webglTexture ); + + } + + var wrappingToGL = {}; + wrappingToGL[ RepeatWrapping ] = 10497; + wrappingToGL[ ClampToEdgeWrapping ] = 33071; + wrappingToGL[ MirroredRepeatWrapping ] = 33648; + + var filterToGL = {}; + filterToGL[ NearestFilter ] = 9728; + filterToGL[ NearestMipmapNearestFilter ] = 9984; + filterToGL[ NearestMipmapLinearFilter ] = 9986; + filterToGL[ LinearFilter ] = 9729; + filterToGL[ LinearMipmapNearestFilter ] = 9985; + filterToGL[ LinearMipmapLinearFilter ] = 9987; + + function setTextureParameters( textureType, texture, supportsMips ) { + + if ( supportsMips ) { + + _gl.texParameteri( textureType, 10242, wrappingToGL[ texture.wrapS ] ); + _gl.texParameteri( textureType, 10243, wrappingToGL[ texture.wrapT ] ); + + if ( textureType === 32879 || textureType === 35866 ) { + + _gl.texParameteri( textureType, 32882, wrappingToGL[ texture.wrapR ] ); + + } + + _gl.texParameteri( textureType, 10240, filterToGL[ texture.magFilter ] ); + _gl.texParameteri( textureType, 10241, filterToGL[ texture.minFilter ] ); + + } else { + + _gl.texParameteri( textureType, 10242, 33071 ); + _gl.texParameteri( textureType, 10243, 33071 ); + + if ( textureType === 32879 || textureType === 35866 ) { + + _gl.texParameteri( textureType, 32882, 33071 ); + + } + + if ( texture.wrapS !== ClampToEdgeWrapping || texture.wrapT !== ClampToEdgeWrapping ) { + + console.warn( 'THREE.WebGLRenderer: Texture is not power of two. Texture.wrapS and Texture.wrapT should be set to THREE.ClampToEdgeWrapping.' ); + + } + + _gl.texParameteri( textureType, 10240, filterFallback( texture.magFilter ) ); + _gl.texParameteri( textureType, 10241, filterFallback( texture.minFilter ) ); + + if ( texture.minFilter !== NearestFilter && texture.minFilter !== LinearFilter ) { + + console.warn( 'THREE.WebGLRenderer: Texture is not power of two. Texture.minFilter should be set to THREE.NearestFilter or THREE.LinearFilter.' ); + + } + + } + + var extension = extensions.get( 'EXT_texture_filter_anisotropic' ); + + if ( extension ) { + + if ( texture.type === FloatType && extensions.get( 'OES_texture_float_linear' ) === null ) { return; } + if ( texture.type === HalfFloatType && ( isWebGL2 || extensions.get( 'OES_texture_half_float_linear' ) ) === null ) { return; } + + if ( texture.anisotropy > 1 || properties.get( texture ).__currentAnisotropy ) { + + _gl.texParameterf( textureType, extension.TEXTURE_MAX_ANISOTROPY_EXT, Math.min( texture.anisotropy, capabilities.getMaxAnisotropy() ) ); + properties.get( texture ).__currentAnisotropy = texture.anisotropy; + + } + + } + + } + + function initTexture( textureProperties, texture ) { + + if ( textureProperties.__webglInit === undefined ) { + + textureProperties.__webglInit = true; + + texture.addEventListener( 'dispose', onTextureDispose ); + + textureProperties.__webglTexture = _gl.createTexture(); + + info.memory.textures ++; + + } + + } + + function uploadTexture( textureProperties, texture, slot ) { + + var textureType = 3553; + + if ( texture.isDataTexture2DArray ) { textureType = 35866; } + if ( texture.isDataTexture3D ) { textureType = 32879; } + + initTexture( textureProperties, texture ); + + state.activeTexture( 33984 + slot ); + state.bindTexture( textureType, textureProperties.__webglTexture ); + + _gl.pixelStorei( 37440, texture.flipY ); + _gl.pixelStorei( 37441, texture.premultiplyAlpha ); + _gl.pixelStorei( 3317, texture.unpackAlignment ); + + var needsPowerOfTwo = textureNeedsPowerOfTwo( texture ) && isPowerOfTwo( texture.image ) === false; + var image = resizeImage( texture.image, needsPowerOfTwo, false, maxTextureSize ); + + var supportsMips = isPowerOfTwo( image ) || isWebGL2, + glFormat = utils.convert( texture.format ); + + var glType = utils.convert( texture.type ), + glInternalFormat = getInternalFormat( texture.internalFormat, glFormat, glType ); + + setTextureParameters( textureType, texture, supportsMips ); + + var mipmap; + var mipmaps = texture.mipmaps; + + if ( texture.isDepthTexture ) { + + // populate depth texture with dummy data + + glInternalFormat = 6402; + + if ( isWebGL2 ) { + + if ( texture.type === FloatType ) { + + glInternalFormat = 36012; + + } else if ( texture.type === UnsignedIntType ) { + + glInternalFormat = 33190; + + } else if ( texture.type === UnsignedInt248Type ) { + + glInternalFormat = 35056; + + } else { + + glInternalFormat = 33189; // WebGL2 requires sized internalformat for glTexImage2D + + } + + } else { + + if ( texture.type === FloatType ) { + + console.error( 'WebGLRenderer: Floating point depth texture requires WebGL2.' ); + + } + + } + + // validation checks for WebGL 1 + + if ( texture.format === DepthFormat && glInternalFormat === 6402 ) { + + // The error INVALID_OPERATION is generated by texImage2D if format and internalformat are + // DEPTH_COMPONENT and type is not UNSIGNED_SHORT or UNSIGNED_INT + // (https://www.khronos.org/registry/webgl/extensions/WEBGL_depth_texture/) + if ( texture.type !== UnsignedShortType && texture.type !== UnsignedIntType ) { + + console.warn( 'THREE.WebGLRenderer: Use UnsignedShortType or UnsignedIntType for DepthFormat DepthTexture.' ); + + texture.type = UnsignedShortType; + glType = utils.convert( texture.type ); + + } + + } + + if ( texture.format === DepthStencilFormat && glInternalFormat === 6402 ) { + + // Depth stencil textures need the DEPTH_STENCIL internal format + // (https://www.khronos.org/registry/webgl/extensions/WEBGL_depth_texture/) + glInternalFormat = 34041; + + // The error INVALID_OPERATION is generated by texImage2D if format and internalformat are + // DEPTH_STENCIL and type is not UNSIGNED_INT_24_8_WEBGL. + // (https://www.khronos.org/registry/webgl/extensions/WEBGL_depth_texture/) + if ( texture.type !== UnsignedInt248Type ) { + + console.warn( 'THREE.WebGLRenderer: Use UnsignedInt248Type for DepthStencilFormat DepthTexture.' ); + + texture.type = UnsignedInt248Type; + glType = utils.convert( texture.type ); + + } + + } + + // + + state.texImage2D( 3553, 0, glInternalFormat, image.width, image.height, 0, glFormat, glType, null ); + + } else if ( texture.isDataTexture ) { + + // use manually created mipmaps if available + // if there are no manual mipmaps + // set 0 level mipmap and then use GL to generate other mipmap levels + + if ( mipmaps.length > 0 && supportsMips ) { + + for ( var i = 0, il = mipmaps.length; i < il; i ++ ) { + + mipmap = mipmaps[ i ]; + state.texImage2D( 3553, i, glInternalFormat, mipmap.width, mipmap.height, 0, glFormat, glType, mipmap.data ); + + } + + texture.generateMipmaps = false; + textureProperties.__maxMipLevel = mipmaps.length - 1; + + } else { + + state.texImage2D( 3553, 0, glInternalFormat, image.width, image.height, 0, glFormat, glType, image.data ); + textureProperties.__maxMipLevel = 0; + + } + + } else if ( texture.isCompressedTexture ) { + + for ( var i$1 = 0, il$1 = mipmaps.length; i$1 < il$1; i$1 ++ ) { + + mipmap = mipmaps[ i$1 ]; + + if ( texture.format !== RGBAFormat && texture.format !== RGBFormat ) { + + if ( glFormat !== null ) { + + state.compressedTexImage2D( 3553, i$1, glInternalFormat, mipmap.width, mipmap.height, 0, mipmap.data ); + + } else { + + console.warn( 'THREE.WebGLRenderer: Attempt to load unsupported compressed texture format in .uploadTexture()' ); + + } + + } else { + + state.texImage2D( 3553, i$1, glInternalFormat, mipmap.width, mipmap.height, 0, glFormat, glType, mipmap.data ); + + } + + } + + textureProperties.__maxMipLevel = mipmaps.length - 1; + + } else if ( texture.isDataTexture2DArray ) { + + state.texImage3D( 35866, 0, glInternalFormat, image.width, image.height, image.depth, 0, glFormat, glType, image.data ); + textureProperties.__maxMipLevel = 0; + + } else if ( texture.isDataTexture3D ) { + + state.texImage3D( 32879, 0, glInternalFormat, image.width, image.height, image.depth, 0, glFormat, glType, image.data ); + textureProperties.__maxMipLevel = 0; + + } else { + + // regular Texture (image, video, canvas) + + // use manually created mipmaps if available + // if there are no manual mipmaps + // set 0 level mipmap and then use GL to generate other mipmap levels + + if ( mipmaps.length > 0 && supportsMips ) { + + for ( var i$2 = 0, il$2 = mipmaps.length; i$2 < il$2; i$2 ++ ) { + + mipmap = mipmaps[ i$2 ]; + state.texImage2D( 3553, i$2, glInternalFormat, glFormat, glType, mipmap ); + + } + + texture.generateMipmaps = false; + textureProperties.__maxMipLevel = mipmaps.length - 1; + + } else { + + state.texImage2D( 3553, 0, glInternalFormat, glFormat, glType, image ); + textureProperties.__maxMipLevel = 0; + + } + + } + + if ( textureNeedsGenerateMipmaps( texture, supportsMips ) ) { + + generateMipmap( textureType, texture, image.width, image.height ); + + } + + textureProperties.__version = texture.version; + + if ( texture.onUpdate ) { texture.onUpdate( texture ); } + + } + + // Render targets + + // Setup storage for target texture and bind it to correct framebuffer + function setupFrameBufferTexture( framebuffer, renderTarget, attachment, textureTarget ) { + + var glFormat = utils.convert( renderTarget.texture.format ); + var glType = utils.convert( renderTarget.texture.type ); + var glInternalFormat = getInternalFormat( renderTarget.texture.internalFormat, glFormat, glType ); + state.texImage2D( textureTarget, 0, glInternalFormat, renderTarget.width, renderTarget.height, 0, glFormat, glType, null ); + _gl.bindFramebuffer( 36160, framebuffer ); + _gl.framebufferTexture2D( 36160, attachment, textureTarget, properties.get( renderTarget.texture ).__webglTexture, 0 ); + _gl.bindFramebuffer( 36160, null ); + + } + + // Setup storage for internal depth/stencil buffers and bind to correct framebuffer + function setupRenderBufferStorage( renderbuffer, renderTarget, isMultisample ) { + + _gl.bindRenderbuffer( 36161, renderbuffer ); + + if ( renderTarget.depthBuffer && ! renderTarget.stencilBuffer ) { + + var glInternalFormat = 33189; + + if ( isMultisample ) { + + var depthTexture = renderTarget.depthTexture; + + if ( depthTexture && depthTexture.isDepthTexture ) { + + if ( depthTexture.type === FloatType ) { + + glInternalFormat = 36012; + + } else if ( depthTexture.type === UnsignedIntType ) { + + glInternalFormat = 33190; + + } + + } + + var samples = getRenderTargetSamples( renderTarget ); + + _gl.renderbufferStorageMultisample( 36161, samples, glInternalFormat, renderTarget.width, renderTarget.height ); + + } else { + + _gl.renderbufferStorage( 36161, glInternalFormat, renderTarget.width, renderTarget.height ); + + } + + _gl.framebufferRenderbuffer( 36160, 36096, 36161, renderbuffer ); + + } else if ( renderTarget.depthBuffer && renderTarget.stencilBuffer ) { + + if ( isMultisample ) { + + var samples$1 = getRenderTargetSamples( renderTarget ); + + _gl.renderbufferStorageMultisample( 36161, samples$1, 35056, renderTarget.width, renderTarget.height ); + + } else { + + _gl.renderbufferStorage( 36161, 34041, renderTarget.width, renderTarget.height ); + + } + + + _gl.framebufferRenderbuffer( 36160, 33306, 36161, renderbuffer ); + + } else { + + var glFormat = utils.convert( renderTarget.texture.format ); + var glType = utils.convert( renderTarget.texture.type ); + var glInternalFormat$1 = getInternalFormat( renderTarget.texture.internalFormat, glFormat, glType ); + + if ( isMultisample ) { + + var samples$2 = getRenderTargetSamples( renderTarget ); + + _gl.renderbufferStorageMultisample( 36161, samples$2, glInternalFormat$1, renderTarget.width, renderTarget.height ); + + } else { + + _gl.renderbufferStorage( 36161, glInternalFormat$1, renderTarget.width, renderTarget.height ); + + } + + } + + _gl.bindRenderbuffer( 36161, null ); + + } + + // Setup resources for a Depth Texture for a FBO (needs an extension) + function setupDepthTexture( framebuffer, renderTarget ) { + + var isCube = ( renderTarget && renderTarget.isWebGLCubeRenderTarget ); + if ( isCube ) { throw new Error( 'Depth Texture with cube render targets is not supported' ); } + + _gl.bindFramebuffer( 36160, framebuffer ); + + if ( ! ( renderTarget.depthTexture && renderTarget.depthTexture.isDepthTexture ) ) { + + throw new Error( 'renderTarget.depthTexture must be an instance of THREE.DepthTexture' ); + + } + + // upload an empty depth texture with framebuffer size + if ( ! properties.get( renderTarget.depthTexture ).__webglTexture || + renderTarget.depthTexture.image.width !== renderTarget.width || + renderTarget.depthTexture.image.height !== renderTarget.height ) { + + renderTarget.depthTexture.image.width = renderTarget.width; + renderTarget.depthTexture.image.height = renderTarget.height; + renderTarget.depthTexture.needsUpdate = true; + + } + + setTexture2D( renderTarget.depthTexture, 0 ); + + var webglDepthTexture = properties.get( renderTarget.depthTexture ).__webglTexture; + + if ( renderTarget.depthTexture.format === DepthFormat ) { + + _gl.framebufferTexture2D( 36160, 36096, 3553, webglDepthTexture, 0 ); + + } else if ( renderTarget.depthTexture.format === DepthStencilFormat ) { + + _gl.framebufferTexture2D( 36160, 33306, 3553, webglDepthTexture, 0 ); + + } else { + + throw new Error( 'Unknown depthTexture format' ); + + } + + } + + // Setup GL resources for a non-texture depth buffer + function setupDepthRenderbuffer( renderTarget ) { + + var renderTargetProperties = properties.get( renderTarget ); + + var isCube = ( renderTarget.isWebGLCubeRenderTarget === true ); + + if ( renderTarget.depthTexture ) { + + if ( isCube ) { throw new Error( 'target.depthTexture not supported in Cube render targets' ); } + + setupDepthTexture( renderTargetProperties.__webglFramebuffer, renderTarget ); + + } else { + + if ( isCube ) { + + renderTargetProperties.__webglDepthbuffer = []; + + for ( var i = 0; i < 6; i ++ ) { + + _gl.bindFramebuffer( 36160, renderTargetProperties.__webglFramebuffer[ i ] ); + renderTargetProperties.__webglDepthbuffer[ i ] = _gl.createRenderbuffer(); + setupRenderBufferStorage( renderTargetProperties.__webglDepthbuffer[ i ], renderTarget, false ); + + } + + } else { + + _gl.bindFramebuffer( 36160, renderTargetProperties.__webglFramebuffer ); + renderTargetProperties.__webglDepthbuffer = _gl.createRenderbuffer(); + setupRenderBufferStorage( renderTargetProperties.__webglDepthbuffer, renderTarget, false ); + + } + + } + + _gl.bindFramebuffer( 36160, null ); + + } + + // Set up GL resources for the render target + function setupRenderTarget( renderTarget ) { + + var renderTargetProperties = properties.get( renderTarget ); + var textureProperties = properties.get( renderTarget.texture ); + + renderTarget.addEventListener( 'dispose', onRenderTargetDispose ); + + textureProperties.__webglTexture = _gl.createTexture(); + + info.memory.textures ++; + + var isCube = ( renderTarget.isWebGLCubeRenderTarget === true ); + var isMultisample = ( renderTarget.isWebGLMultisampleRenderTarget === true ); + var supportsMips = isPowerOfTwo( renderTarget ) || isWebGL2; + + // Handles WebGL2 RGBFormat fallback - #18858 + + if ( isWebGL2 && renderTarget.texture.format === RGBFormat && ( renderTarget.texture.type === FloatType || renderTarget.texture.type === HalfFloatType ) ) { + + renderTarget.texture.format = RGBAFormat; + + console.warn( 'THREE.WebGLRenderer: Rendering to textures with RGB format is not supported. Using RGBA format instead.' ); + + } + + // Setup framebuffer + + if ( isCube ) { + + renderTargetProperties.__webglFramebuffer = []; + + for ( var i = 0; i < 6; i ++ ) { + + renderTargetProperties.__webglFramebuffer[ i ] = _gl.createFramebuffer(); + + } + + } else { + + renderTargetProperties.__webglFramebuffer = _gl.createFramebuffer(); + + if ( isMultisample ) { + + if ( isWebGL2 ) { + + renderTargetProperties.__webglMultisampledFramebuffer = _gl.createFramebuffer(); + renderTargetProperties.__webglColorRenderbuffer = _gl.createRenderbuffer(); + + _gl.bindRenderbuffer( 36161, renderTargetProperties.__webglColorRenderbuffer ); + + var glFormat = utils.convert( renderTarget.texture.format ); + var glType = utils.convert( renderTarget.texture.type ); + var glInternalFormat = getInternalFormat( renderTarget.texture.internalFormat, glFormat, glType ); + var samples = getRenderTargetSamples( renderTarget ); + _gl.renderbufferStorageMultisample( 36161, samples, glInternalFormat, renderTarget.width, renderTarget.height ); + + _gl.bindFramebuffer( 36160, renderTargetProperties.__webglMultisampledFramebuffer ); + _gl.framebufferRenderbuffer( 36160, 36064, 36161, renderTargetProperties.__webglColorRenderbuffer ); + _gl.bindRenderbuffer( 36161, null ); + + if ( renderTarget.depthBuffer ) { + + renderTargetProperties.__webglDepthRenderbuffer = _gl.createRenderbuffer(); + setupRenderBufferStorage( renderTargetProperties.__webglDepthRenderbuffer, renderTarget, true ); + + } + + _gl.bindFramebuffer( 36160, null ); + + + } else { + + console.warn( 'THREE.WebGLRenderer: WebGLMultisampleRenderTarget can only be used with WebGL2.' ); + + } + + } + + } + + // Setup color buffer + + if ( isCube ) { + + state.bindTexture( 34067, textureProperties.__webglTexture ); + setTextureParameters( 34067, renderTarget.texture, supportsMips ); + + for ( var i$1 = 0; i$1 < 6; i$1 ++ ) { + + setupFrameBufferTexture( renderTargetProperties.__webglFramebuffer[ i$1 ], renderTarget, 36064, 34069 + i$1 ); + + } + + if ( textureNeedsGenerateMipmaps( renderTarget.texture, supportsMips ) ) { + + generateMipmap( 34067, renderTarget.texture, renderTarget.width, renderTarget.height ); + + } + + state.bindTexture( 34067, null ); + + } else { + + state.bindTexture( 3553, textureProperties.__webglTexture ); + setTextureParameters( 3553, renderTarget.texture, supportsMips ); + setupFrameBufferTexture( renderTargetProperties.__webglFramebuffer, renderTarget, 36064, 3553 ); + + if ( textureNeedsGenerateMipmaps( renderTarget.texture, supportsMips ) ) { + + generateMipmap( 3553, renderTarget.texture, renderTarget.width, renderTarget.height ); + + } + + state.bindTexture( 3553, null ); + + } + + // Setup depth and stencil buffers + + if ( renderTarget.depthBuffer ) { + + setupDepthRenderbuffer( renderTarget ); + + } + + } + + function updateRenderTargetMipmap( renderTarget ) { + + var texture = renderTarget.texture; + var supportsMips = isPowerOfTwo( renderTarget ) || isWebGL2; + + if ( textureNeedsGenerateMipmaps( texture, supportsMips ) ) { + + var target = renderTarget.isWebGLCubeRenderTarget ? 34067 : 3553; + var webglTexture = properties.get( texture ).__webglTexture; + + state.bindTexture( target, webglTexture ); + generateMipmap( target, texture, renderTarget.width, renderTarget.height ); + state.bindTexture( target, null ); + + } + + } + + function updateMultisampleRenderTarget( renderTarget ) { + + if ( renderTarget.isWebGLMultisampleRenderTarget ) { + + if ( isWebGL2 ) { + + var renderTargetProperties = properties.get( renderTarget ); + + _gl.bindFramebuffer( 36008, renderTargetProperties.__webglMultisampledFramebuffer ); + _gl.bindFramebuffer( 36009, renderTargetProperties.__webglFramebuffer ); + + var width = renderTarget.width; + var height = renderTarget.height; + var mask = 16384; + + if ( renderTarget.depthBuffer ) { mask |= 256; } + if ( renderTarget.stencilBuffer ) { mask |= 1024; } + + _gl.blitFramebuffer( 0, 0, width, height, 0, 0, width, height, mask, 9728 ); + + _gl.bindFramebuffer( 36160, renderTargetProperties.__webglMultisampledFramebuffer ); // see #18905 + + } else { + + console.warn( 'THREE.WebGLRenderer: WebGLMultisampleRenderTarget can only be used with WebGL2.' ); + + } + + } + + } + + function getRenderTargetSamples( renderTarget ) { + + return ( isWebGL2 && renderTarget.isWebGLMultisampleRenderTarget ) ? + Math.min( maxSamples, renderTarget.samples ) : 0; + + } + + function updateVideoTexture( texture ) { + + var frame = info.render.frame; + + // Check the last frame we updated the VideoTexture + + if ( _videoTextures.get( texture ) !== frame ) { + + _videoTextures.set( texture, frame ); + texture.update(); + + } + + } + + // backwards compatibility + + var warnedTexture2D = false; + var warnedTextureCube = false; + + function safeSetTexture2D( texture, slot ) { + + if ( texture && texture.isWebGLRenderTarget ) { + + if ( warnedTexture2D === false ) { + + console.warn( "THREE.WebGLTextures.safeSetTexture2D: don't use render targets as textures. Use their .texture property instead." ); + warnedTexture2D = true; + + } + + texture = texture.texture; + + } + + setTexture2D( texture, slot ); + + } + + function safeSetTextureCube( texture, slot ) { + + if ( texture && texture.isWebGLCubeRenderTarget ) { + + if ( warnedTextureCube === false ) { + + console.warn( "THREE.WebGLTextures.safeSetTextureCube: don't use cube render targets as textures. Use their .texture property instead." ); + warnedTextureCube = true; + + } + + texture = texture.texture; + + } + + // currently relying on the fact that WebGLCubeRenderTarget.texture is a Texture and NOT a CubeTexture + // TODO: unify these code paths + if ( ( texture && texture.isCubeTexture ) || + ( Array.isArray( texture.image ) && texture.image.length === 6 ) ) { + + // CompressedTexture can have Array in image :/ + + // this function alone should take care of cube textures + setTextureCube( texture, slot ); + + } else { + + // assumed: texture property of THREE.WebGLCubeRenderTarget + setTextureCubeDynamic( texture, slot ); + + } + + } + + // + + this.allocateTextureUnit = allocateTextureUnit; + this.resetTextureUnits = resetTextureUnits; + + this.setTexture2D = setTexture2D; + this.setTexture2DArray = setTexture2DArray; + this.setTexture3D = setTexture3D; + this.setTextureCube = setTextureCube; + this.setTextureCubeDynamic = setTextureCubeDynamic; + this.setupRenderTarget = setupRenderTarget; + this.updateRenderTargetMipmap = updateRenderTargetMipmap; + this.updateMultisampleRenderTarget = updateMultisampleRenderTarget; + + this.safeSetTexture2D = safeSetTexture2D; + this.safeSetTextureCube = safeSetTextureCube; + + } + + function WebGLUtils( gl, extensions, capabilities ) { + + var isWebGL2 = capabilities.isWebGL2; + + function convert( p ) { + + var extension; + + if ( p === UnsignedByteType ) { return 5121; } + if ( p === UnsignedShort4444Type ) { return 32819; } + if ( p === UnsignedShort5551Type ) { return 32820; } + if ( p === UnsignedShort565Type ) { return 33635; } + + if ( p === ByteType ) { return 5120; } + if ( p === ShortType ) { return 5122; } + if ( p === UnsignedShortType ) { return 5123; } + if ( p === IntType ) { return 5124; } + if ( p === UnsignedIntType ) { return 5125; } + if ( p === FloatType ) { return 5126; } + + if ( p === HalfFloatType ) { + + if ( isWebGL2 ) { return 5131; } + + extension = extensions.get( 'OES_texture_half_float' ); + + if ( extension !== null ) { + + return extension.HALF_FLOAT_OES; + + } else { + + return null; + + } + + } + + if ( p === AlphaFormat ) { return 6406; } + if ( p === RGBFormat ) { return 6407; } + if ( p === RGBAFormat ) { return 6408; } + if ( p === LuminanceFormat ) { return 6409; } + if ( p === LuminanceAlphaFormat ) { return 6410; } + if ( p === DepthFormat ) { return 6402; } + if ( p === DepthStencilFormat ) { return 34041; } + if ( p === RedFormat ) { return 6403; } + + // WebGL2 formats. + + if ( p === RedIntegerFormat ) { return 36244; } + if ( p === RGFormat ) { return 33319; } + if ( p === RGIntegerFormat ) { return 33320; } + if ( p === RGBIntegerFormat ) { return 36248; } + if ( p === RGBAIntegerFormat ) { return 36249; } + + if ( p === RGB_S3TC_DXT1_Format || p === RGBA_S3TC_DXT1_Format || + p === RGBA_S3TC_DXT3_Format || p === RGBA_S3TC_DXT5_Format ) { + + extension = extensions.get( 'WEBGL_compressed_texture_s3tc' ); + + if ( extension !== null ) { + + if ( p === RGB_S3TC_DXT1_Format ) { return extension.COMPRESSED_RGB_S3TC_DXT1_EXT; } + if ( p === RGBA_S3TC_DXT1_Format ) { return extension.COMPRESSED_RGBA_S3TC_DXT1_EXT; } + if ( p === RGBA_S3TC_DXT3_Format ) { return extension.COMPRESSED_RGBA_S3TC_DXT3_EXT; } + if ( p === RGBA_S3TC_DXT5_Format ) { return extension.COMPRESSED_RGBA_S3TC_DXT5_EXT; } + + } else { + + return null; + + } + + } + + if ( p === RGB_PVRTC_4BPPV1_Format || p === RGB_PVRTC_2BPPV1_Format || + p === RGBA_PVRTC_4BPPV1_Format || p === RGBA_PVRTC_2BPPV1_Format ) { + + extension = extensions.get( 'WEBGL_compressed_texture_pvrtc' ); + + if ( extension !== null ) { + + if ( p === RGB_PVRTC_4BPPV1_Format ) { return extension.COMPRESSED_RGB_PVRTC_4BPPV1_IMG; } + if ( p === RGB_PVRTC_2BPPV1_Format ) { return extension.COMPRESSED_RGB_PVRTC_2BPPV1_IMG; } + if ( p === RGBA_PVRTC_4BPPV1_Format ) { return extension.COMPRESSED_RGBA_PVRTC_4BPPV1_IMG; } + if ( p === RGBA_PVRTC_2BPPV1_Format ) { return extension.COMPRESSED_RGBA_PVRTC_2BPPV1_IMG; } + + } else { + + return null; + + } + + } + + if ( p === RGB_ETC1_Format ) { + + extension = extensions.get( 'WEBGL_compressed_texture_etc1' ); + + if ( extension !== null ) { + + return extension.COMPRESSED_RGB_ETC1_WEBGL; + + } else { + + return null; + + } + + } + + if ( p === RGB_ETC2_Format || p === RGBA_ETC2_EAC_Format ) { + + extension = extensions.get( 'WEBGL_compressed_texture_etc' ); + + if ( extension !== null ) { + + if ( p === RGB_ETC2_Format ) { return extension.COMPRESSED_RGB8_ETC2; } + if ( p === RGBA_ETC2_EAC_Format ) { return extension.COMPRESSED_RGBA8_ETC2_EAC; } + + } + + } + + if ( p === RGBA_ASTC_4x4_Format || p === RGBA_ASTC_5x4_Format || p === RGBA_ASTC_5x5_Format || + p === RGBA_ASTC_6x5_Format || p === RGBA_ASTC_6x6_Format || p === RGBA_ASTC_8x5_Format || + p === RGBA_ASTC_8x6_Format || p === RGBA_ASTC_8x8_Format || p === RGBA_ASTC_10x5_Format || + p === RGBA_ASTC_10x6_Format || p === RGBA_ASTC_10x8_Format || p === RGBA_ASTC_10x10_Format || + p === RGBA_ASTC_12x10_Format || p === RGBA_ASTC_12x12_Format || + p === SRGB8_ALPHA8_ASTC_4x4_Format || p === SRGB8_ALPHA8_ASTC_5x4_Format || p === SRGB8_ALPHA8_ASTC_5x5_Format || + p === SRGB8_ALPHA8_ASTC_6x5_Format || p === SRGB8_ALPHA8_ASTC_6x6_Format || p === SRGB8_ALPHA8_ASTC_8x5_Format || + p === SRGB8_ALPHA8_ASTC_8x6_Format || p === SRGB8_ALPHA8_ASTC_8x8_Format || p === SRGB8_ALPHA8_ASTC_10x5_Format || + p === SRGB8_ALPHA8_ASTC_10x6_Format || p === SRGB8_ALPHA8_ASTC_10x8_Format || p === SRGB8_ALPHA8_ASTC_10x10_Format || + p === SRGB8_ALPHA8_ASTC_12x10_Format || p === SRGB8_ALPHA8_ASTC_12x12_Format ) { + + extension = extensions.get( 'WEBGL_compressed_texture_astc' ); + + if ( extension !== null ) { + + // TODO Complete? + + return p; + + } else { + + return null; + + } + + } + + if ( p === RGBA_BPTC_Format ) { + + extension = extensions.get( 'EXT_texture_compression_bptc' ); + + if ( extension !== null ) { + + // TODO Complete? + + return p; + + } else { + + return null; + + } + + } + + if ( p === UnsignedInt248Type ) { + + if ( isWebGL2 ) { return 34042; } + + extension = extensions.get( 'WEBGL_depth_texture' ); + + if ( extension !== null ) { + + return extension.UNSIGNED_INT_24_8_WEBGL; + + } else { + + return null; + + } + + } + + } + + return { convert: convert }; + + } + + function ArrayCamera( array ) { + + PerspectiveCamera.call( this ); + + this.cameras = array || []; + + } + + ArrayCamera.prototype = Object.assign( Object.create( PerspectiveCamera.prototype ), { + + constructor: ArrayCamera, + + isArrayCamera: true + + } ); + + function Group() { + + Object3D.call( this ); + + this.type = 'Group'; + + } + + Group.prototype = Object.assign( Object.create( Object3D.prototype ), { + + constructor: Group, + + isGroup: true + + } ); + + function WebXRController() { + + this._targetRay = null; + this._grip = null; + this._hand = null; + + } + + Object.assign( WebXRController.prototype, { + + constructor: WebXRController, + + getHandSpace: function () { + + if ( this._hand === null ) { + + this._hand = new Group(); + this._hand.matrixAutoUpdate = false; + this._hand.visible = false; + + this._hand.joints = []; + this._hand.inputState = { pinching: false }; + + if ( window.XRHand ) { + + for ( var i = 0; i <= window.XRHand.LITTLE_PHALANX_TIP; i ++ ) { + + // The transform of this joint will be updated with the joint pose on each frame + var joint = new Group(); + joint.matrixAutoUpdate = false; + joint.visible = false; + this._hand.joints.push( joint ); + // ?? + this._hand.add( joint ); + + } + + } + + } + + return this._hand; + + }, + + getTargetRaySpace: function () { + + if ( this._targetRay === null ) { + + this._targetRay = new Group(); + this._targetRay.matrixAutoUpdate = false; + this._targetRay.visible = false; + + } + + return this._targetRay; + + }, + + getGripSpace: function () { + + if ( this._grip === null ) { + + this._grip = new Group(); + this._grip.matrixAutoUpdate = false; + this._grip.visible = false; + + } + + return this._grip; + + }, + + dispatchEvent: function ( event ) { + + if ( this._targetRay !== null ) { + + this._targetRay.dispatchEvent( event ); + + } + + if ( this._grip !== null ) { + + this._grip.dispatchEvent( event ); + + } + + if ( this._hand !== null ) { + + this._hand.dispatchEvent( event ); + + } + + return this; + + }, + + disconnect: function ( inputSource ) { + + this.dispatchEvent( { type: 'disconnected', data: inputSource } ); + + if ( this._targetRay !== null ) { + + this._targetRay.visible = false; + + } + + if ( this._grip !== null ) { + + this._grip.visible = false; + + } + + if ( this._hand !== null ) { + + this._hand.visible = false; + + } + + return this; + + }, + + update: function ( inputSource, frame, referenceSpace ) { + + var inputPose = null; + var gripPose = null; + var handPose = null; + + var targetRay = this._targetRay; + var grip = this._grip; + var hand = this._hand; + + if ( inputSource ) { + + if ( hand && inputSource.hand ) { + + handPose = true; + + for ( var i = 0; i <= window.XRHand.LITTLE_PHALANX_TIP; i ++ ) { + + if ( inputSource.hand[ i ] ) { + + // Update the joints groups with the XRJoint poses + var jointPose = frame.getJointPose( inputSource.hand[ i ], referenceSpace ); + var joint = hand.joints[ i ]; + + if ( jointPose !== null ) { + + joint.matrix.fromArray( jointPose.transform.matrix ); + joint.matrix.decompose( joint.position, joint.rotation, joint.scale ); + joint.jointRadius = jointPose.radius; + + } + + joint.visible = jointPose !== null; + + // Custom events + + // Check pinch + var indexTip = hand.joints[ window.XRHand.INDEX_PHALANX_TIP ]; + var thumbTip = hand.joints[ window.XRHand.THUMB_PHALANX_TIP ]; + var distance = indexTip.position.distanceTo( thumbTip.position ); + + var distanceToPinch = 0.02; + var threshold = 0.005; + + if ( hand.inputState.pinching && distance > distanceToPinch + threshold ) { + + hand.inputState.pinching = false; + this.dispatchEvent( { + type: "pinchend", + handedness: inputSource.handedness, + target: this + } ); + + } else if ( ! hand.inputState.pinching && distance <= distanceToPinch - threshold ) { + + hand.inputState.pinching = true; + this.dispatchEvent( { + type: "pinchstart", + handedness: inputSource.handedness, + target: this + } ); + + } + + } + + } + + } else { + + if ( targetRay !== null ) { + + inputPose = frame.getPose( inputSource.targetRaySpace, referenceSpace ); + + if ( inputPose !== null ) { + + targetRay.matrix.fromArray( inputPose.transform.matrix ); + targetRay.matrix.decompose( targetRay.position, targetRay.rotation, targetRay.scale ); + + } + + } + + if ( grip !== null && inputSource.gripSpace ) { + + gripPose = frame.getPose( inputSource.gripSpace, referenceSpace ); + + if ( gripPose !== null ) { + + grip.matrix.fromArray( gripPose.transform.matrix ); + grip.matrix.decompose( grip.position, grip.rotation, grip.scale ); + + } + + } + + } + + } + + if ( targetRay !== null ) { + + targetRay.visible = ( inputPose !== null ); + + } + + if ( grip !== null ) { + + grip.visible = ( gripPose !== null ); + + } + + if ( hand !== null ) { + + hand.visible = ( handPose !== null ); + + } + + return this; + + } + + } ); + + function WebXRManager( renderer, gl ) { + + var scope = this; + + var session = null; + + var framebufferScaleFactor = 1.0; + + var referenceSpace = null; + var referenceSpaceType = 'local-floor'; + + var pose = null; + + var controllers = []; + var inputSourcesMap = new Map(); + + // + + var cameraL = new PerspectiveCamera(); + cameraL.layers.enable( 1 ); + cameraL.viewport = new Vector4(); + + var cameraR = new PerspectiveCamera(); + cameraR.layers.enable( 2 ); + cameraR.viewport = new Vector4(); + + var cameras = [ cameraL, cameraR ]; + + var cameraVR = new ArrayCamera(); + cameraVR.layers.enable( 1 ); + cameraVR.layers.enable( 2 ); + + var _currentDepthNear = null; + var _currentDepthFar = null; + + // + + this.enabled = false; + + this.isPresenting = false; + + this.getController = function ( index ) { + + var controller = controllers[ index ]; + + if ( controller === undefined ) { + + controller = new WebXRController(); + controllers[ index ] = controller; + + } + + return controller.getTargetRaySpace(); + + }; + + this.getControllerGrip = function ( index ) { + + var controller = controllers[ index ]; + + if ( controller === undefined ) { + + controller = new WebXRController(); + controllers[ index ] = controller; + + } + + return controller.getGripSpace(); + + }; + + this.getHand = function ( index ) { + + var controller = controllers[ index ]; + + if ( controller === undefined ) { + + controller = new WebXRController(); + controllers[ index ] = controller; + + } + + return controller.getHandSpace(); + + }; + + // + + function onSessionEvent( event ) { + + var controller = inputSourcesMap.get( event.inputSource ); + + if ( controller ) { + + controller.dispatchEvent( { type: event.type } ); + + } + + } + + function onSessionEnd() { + + inputSourcesMap.forEach( function ( controller, inputSource ) { + + controller.disconnect( inputSource ); + + } ); + + inputSourcesMap.clear(); + + // + + renderer.setFramebuffer( null ); + renderer.setRenderTarget( renderer.getRenderTarget() ); // Hack #15830 + animation.stop(); + + scope.isPresenting = false; + + scope.dispatchEvent( { type: 'sessionend' } ); + + } + + function onRequestReferenceSpace( value ) { + + referenceSpace = value; + + animation.setContext( session ); + animation.start(); + + scope.isPresenting = true; + + scope.dispatchEvent( { type: 'sessionstart' } ); + + } + + this.setFramebufferScaleFactor = function ( value ) { + + framebufferScaleFactor = value; + + if ( scope.isPresenting === true ) { + + console.warn( 'THREE.WebXRManager: Cannot change framebuffer scale while presenting.' ); + + } + + }; + + this.setReferenceSpaceType = function ( value ) { + + referenceSpaceType = value; + + if ( scope.isPresenting === true ) { + + console.warn( 'THREE.WebXRManager: Cannot change reference space type while presenting.' ); + + } + + }; + + this.getReferenceSpace = function () { + + return referenceSpace; + + }; + + this.getSession = function () { + + return session; + + }; + + this.setSession = function ( value ) { + + session = value; + + if ( session !== null ) { + + session.addEventListener( 'select', onSessionEvent ); + session.addEventListener( 'selectstart', onSessionEvent ); + session.addEventListener( 'selectend', onSessionEvent ); + session.addEventListener( 'squeeze', onSessionEvent ); + session.addEventListener( 'squeezestart', onSessionEvent ); + session.addEventListener( 'squeezeend', onSessionEvent ); + session.addEventListener( 'end', onSessionEnd ); + + var attributes = gl.getContextAttributes(); + + if ( attributes.xrCompatible !== true ) { + + gl.makeXRCompatible(); + + } + + var layerInit = { + antialias: attributes.antialias, + alpha: attributes.alpha, + depth: attributes.depth, + stencil: attributes.stencil, + framebufferScaleFactor: framebufferScaleFactor + }; + + // eslint-disable-next-line no-undef + var baseLayer = new XRWebGLLayer( session, gl, layerInit ); + + session.updateRenderState( { baseLayer: baseLayer } ); + + session.requestReferenceSpace( referenceSpaceType ).then( onRequestReferenceSpace ); + + // + + session.addEventListener( 'inputsourceschange', updateInputSources ); + + } + + }; + + function updateInputSources( event ) { + + var inputSources = session.inputSources; + + // Assign inputSources to available controllers + + for ( var i = 0; i < controllers.length; i ++ ) { + + inputSourcesMap.set( inputSources[ i ], controllers[ i ] ); + + } + + // Notify disconnected + + for ( var i$1 = 0; i$1 < event.removed.length; i$1 ++ ) { + + var inputSource = event.removed[ i$1 ]; + var controller = inputSourcesMap.get( inputSource ); + + if ( controller ) { + + controller.dispatchEvent( { type: 'disconnected', data: inputSource } ); + inputSourcesMap.delete( inputSource ); + + } + + } + + // Notify connected + + for ( var i$2 = 0; i$2 < event.added.length; i$2 ++ ) { + + var inputSource$1 = event.added[ i$2 ]; + var controller$1 = inputSourcesMap.get( inputSource$1 ); + + if ( controller$1 ) { + + controller$1.dispatchEvent( { type: 'connected', data: inputSource$1 } ); + + } + + } + + } + + // + + var cameraLPos = new Vector3(); + var cameraRPos = new Vector3(); + + /** + * Assumes 2 cameras that are parallel and share an X-axis, and that + * the cameras' projection and world matrices have already been set. + * And that near and far planes are identical for both cameras. + * Visualization of this technique: https://computergraphics.stackexchange.com/a/4765 + */ + function setProjectionFromUnion( camera, cameraL, cameraR ) { + + cameraLPos.setFromMatrixPosition( cameraL.matrixWorld ); + cameraRPos.setFromMatrixPosition( cameraR.matrixWorld ); + + var ipd = cameraLPos.distanceTo( cameraRPos ); + + var projL = cameraL.projectionMatrix.elements; + var projR = cameraR.projectionMatrix.elements; + + // VR systems will have identical far and near planes, and + // most likely identical top and bottom frustum extents. + // Use the left camera for these values. + var near = projL[ 14 ] / ( projL[ 10 ] - 1 ); + var far = projL[ 14 ] / ( projL[ 10 ] + 1 ); + var topFov = ( projL[ 9 ] + 1 ) / projL[ 5 ]; + var bottomFov = ( projL[ 9 ] - 1 ) / projL[ 5 ]; + + var leftFov = ( projL[ 8 ] - 1 ) / projL[ 0 ]; + var rightFov = ( projR[ 8 ] + 1 ) / projR[ 0 ]; + var left = near * leftFov; + var right = near * rightFov; + + // Calculate the new camera's position offset from the + // left camera. xOffset should be roughly half `ipd`. + var zOffset = ipd / ( - leftFov + rightFov ); + var xOffset = zOffset * - leftFov; + + // TODO: Better way to apply this offset? + cameraL.matrixWorld.decompose( camera.position, camera.quaternion, camera.scale ); + camera.translateX( xOffset ); + camera.translateZ( zOffset ); + camera.matrixWorld.compose( camera.position, camera.quaternion, camera.scale ); + camera.matrixWorldInverse.getInverse( camera.matrixWorld ); + + // Find the union of the frustum values of the cameras and scale + // the values so that the near plane's position does not change in world space, + // although must now be relative to the new union camera. + var near2 = near + zOffset; + var far2 = far + zOffset; + var left2 = left - xOffset; + var right2 = right + ( ipd - xOffset ); + var top2 = topFov * far / far2 * near2; + var bottom2 = bottomFov * far / far2 * near2; + + camera.projectionMatrix.makePerspective( left2, right2, top2, bottom2, near2, far2 ); + + } + + function updateCamera( camera, parent ) { + + if ( parent === null ) { + + camera.matrixWorld.copy( camera.matrix ); + + } else { + + camera.matrixWorld.multiplyMatrices( parent.matrixWorld, camera.matrix ); + + } + + camera.matrixWorldInverse.getInverse( camera.matrixWorld ); + + } + + this.getCamera = function ( camera ) { + + cameraVR.near = cameraR.near = cameraL.near = camera.near; + cameraVR.far = cameraR.far = cameraL.far = camera.far; + + if ( _currentDepthNear !== cameraVR.near || _currentDepthFar !== cameraVR.far ) { + + // Note that the new renderState won't apply until the next frame. See #18320 + + session.updateRenderState( { + depthNear: cameraVR.near, + depthFar: cameraVR.far + } ); + + _currentDepthNear = cameraVR.near; + _currentDepthFar = cameraVR.far; + + } + + var parent = camera.parent; + var cameras = cameraVR.cameras; + + updateCamera( cameraVR, parent ); + + for ( var i = 0; i < cameras.length; i ++ ) { + + updateCamera( cameras[ i ], parent ); + + } + + // update camera and its children + + camera.matrixWorld.copy( cameraVR.matrixWorld ); + + var children = camera.children; + + for ( var i$1 = 0, l = children.length; i$1 < l; i$1 ++ ) { + + children[ i$1 ].updateMatrixWorld( true ); + + } + + // update projection matrix for proper view frustum culling + + if ( cameras.length === 2 ) { + + setProjectionFromUnion( cameraVR, cameraL, cameraR ); + + } else { + + // assume single camera setup (AR) + + cameraVR.projectionMatrix.copy( cameraL.projectionMatrix ); + + } + + return cameraVR; + + }; + + // Animation Loop + + var onAnimationFrameCallback = null; + + function onAnimationFrame( time, frame ) { + + pose = frame.getViewerPose( referenceSpace ); + + if ( pose !== null ) { + + var views = pose.views; + var baseLayer = session.renderState.baseLayer; + + renderer.setFramebuffer( baseLayer.framebuffer ); + + var cameraVRNeedsUpdate = false; + + // check if it's necessary to rebuild cameraVR's camera list + + if ( views.length !== cameraVR.cameras.length ) { + + cameraVR.cameras.length = 0; + cameraVRNeedsUpdate = true; + + } + + for ( var i = 0; i < views.length; i ++ ) { + + var view = views[ i ]; + var viewport = baseLayer.getViewport( view ); + + var camera = cameras[ i ]; + camera.matrix.fromArray( view.transform.matrix ); + camera.projectionMatrix.fromArray( view.projectionMatrix ); + camera.viewport.set( viewport.x, viewport.y, viewport.width, viewport.height ); + + if ( i === 0 ) { + + cameraVR.matrix.copy( camera.matrix ); + + } + + if ( cameraVRNeedsUpdate === true ) { + + cameraVR.cameras.push( camera ); + + } + + } + + } + + // + + var inputSources = session.inputSources; + + for ( var i$1 = 0; i$1 < controllers.length; i$1 ++ ) { + + var controller = controllers[ i$1 ]; + var inputSource = inputSources[ i$1 ]; + + controller.update( inputSource, frame, referenceSpace ); + + } + + if ( onAnimationFrameCallback ) { onAnimationFrameCallback( time, frame ); } + + } + + var animation = new WebGLAnimation(); + animation.setAnimationLoop( onAnimationFrame ); + + this.setAnimationLoop = function ( callback ) { + + onAnimationFrameCallback = callback; + + }; + + this.dispose = function () {}; + + } + + Object.assign( WebXRManager.prototype, EventDispatcher.prototype ); + + function WebGLMaterials( properties ) { + + function refreshFogUniforms( uniforms, fog ) { + + uniforms.fogColor.value.copy( fog.color ); + + if ( fog.isFog ) { + + uniforms.fogNear.value = fog.near; + uniforms.fogFar.value = fog.far; + + } else if ( fog.isFogExp2 ) { + + uniforms.fogDensity.value = fog.density; + + } + + } + + function refreshMaterialUniforms( uniforms, material, pixelRatio, height ) { + + if ( material.isMeshBasicMaterial ) { + + refreshUniformsCommon( uniforms, material ); + + } else if ( material.isMeshLambertMaterial ) { + + refreshUniformsCommon( uniforms, material ); + refreshUniformsLambert( uniforms, material ); + + } else if ( material.isMeshToonMaterial ) { + + refreshUniformsCommon( uniforms, material ); + refreshUniformsToon( uniforms, material ); + + } else if ( material.isMeshPhongMaterial ) { + + refreshUniformsCommon( uniforms, material ); + refreshUniformsPhong( uniforms, material ); + + } else if ( material.isMeshStandardMaterial ) { + + refreshUniformsCommon( uniforms, material ); + + if ( material.isMeshPhysicalMaterial ) { + + refreshUniformsPhysical( uniforms, material ); + + } else { + + refreshUniformsStandard( uniforms, material ); + + } + + } else if ( material.isMeshMatcapMaterial ) { + + refreshUniformsCommon( uniforms, material ); + refreshUniformsMatcap( uniforms, material ); + + } else if ( material.isMeshDepthMaterial ) { + + refreshUniformsCommon( uniforms, material ); + refreshUniformsDepth( uniforms, material ); + + } else if ( material.isMeshDistanceMaterial ) { + + refreshUniformsCommon( uniforms, material ); + refreshUniformsDistance( uniforms, material ); + + } else if ( material.isMeshNormalMaterial ) { + + refreshUniformsCommon( uniforms, material ); + refreshUniformsNormal( uniforms, material ); + + } else if ( material.isLineBasicMaterial ) { + + refreshUniformsLine( uniforms, material ); + + if ( material.isLineDashedMaterial ) { + + refreshUniformsDash( uniforms, material ); + + } + + } else if ( material.isPointsMaterial ) { + + refreshUniformsPoints( uniforms, material, pixelRatio, height ); + + } else if ( material.isSpriteMaterial ) { + + refreshUniformsSprites( uniforms, material ); + + } else if ( material.isShadowMaterial ) { + + uniforms.color.value.copy( material.color ); + uniforms.opacity.value = material.opacity; + + } else if ( material.isShaderMaterial ) { + + material.uniformsNeedUpdate = false; // #15581 + + } + + } + + function refreshUniformsCommon( uniforms, material ) { + + uniforms.opacity.value = material.opacity; + + if ( material.color ) { + + uniforms.diffuse.value.copy( material.color ); + + } + + if ( material.emissive ) { + + uniforms.emissive.value.copy( material.emissive ).multiplyScalar( material.emissiveIntensity ); + + } + + if ( material.map ) { + + uniforms.map.value = material.map; + + } + + if ( material.alphaMap ) { + + uniforms.alphaMap.value = material.alphaMap; + + } + + if ( material.specularMap ) { + + uniforms.specularMap.value = material.specularMap; + + } + + var envMap = properties.get( material ).envMap; + + if ( envMap ) { + + uniforms.envMap.value = envMap; + + uniforms.flipEnvMap.value = envMap.isCubeTexture ? - 1 : 1; + + uniforms.reflectivity.value = material.reflectivity; + uniforms.refractionRatio.value = material.refractionRatio; + + var maxMipLevel = properties.get( envMap ).__maxMipLevel; + + if ( maxMipLevel !== undefined ) { + + uniforms.maxMipLevel.value = maxMipLevel; + + } + + } + + if ( material.lightMap ) { + + uniforms.lightMap.value = material.lightMap; + uniforms.lightMapIntensity.value = material.lightMapIntensity; + + } + + if ( material.aoMap ) { + + uniforms.aoMap.value = material.aoMap; + uniforms.aoMapIntensity.value = material.aoMapIntensity; + + } + + // uv repeat and offset setting priorities + // 1. color map + // 2. specular map + // 3. displacementMap map + // 4. normal map + // 5. bump map + // 6. roughnessMap map + // 7. metalnessMap map + // 8. alphaMap map + // 9. emissiveMap map + // 10. clearcoat map + // 11. clearcoat normal map + // 12. clearcoat roughnessMap map + + var uvScaleMap; + + if ( material.map ) { + + uvScaleMap = material.map; + + } else if ( material.specularMap ) { + + uvScaleMap = material.specularMap; + + } else if ( material.displacementMap ) { + + uvScaleMap = material.displacementMap; + + } else if ( material.normalMap ) { + + uvScaleMap = material.normalMap; + + } else if ( material.bumpMap ) { + + uvScaleMap = material.bumpMap; + + } else if ( material.roughnessMap ) { + + uvScaleMap = material.roughnessMap; + + } else if ( material.metalnessMap ) { + + uvScaleMap = material.metalnessMap; + + } else if ( material.alphaMap ) { + + uvScaleMap = material.alphaMap; + + } else if ( material.emissiveMap ) { + + uvScaleMap = material.emissiveMap; + + } else if ( material.clearcoatMap ) { + + uvScaleMap = material.clearcoatMap; + + } else if ( material.clearcoatNormalMap ) { + + uvScaleMap = material.clearcoatNormalMap; + + } else if ( material.clearcoatRoughnessMap ) { + + uvScaleMap = material.clearcoatRoughnessMap; + + } + + if ( uvScaleMap !== undefined ) { + + // backwards compatibility + if ( uvScaleMap.isWebGLRenderTarget ) { + + uvScaleMap = uvScaleMap.texture; + + } + + if ( uvScaleMap.matrixAutoUpdate === true ) { + + uvScaleMap.updateMatrix(); + + } + + uniforms.uvTransform.value.copy( uvScaleMap.matrix ); + + } + + // uv repeat and offset setting priorities for uv2 + // 1. ao map + // 2. light map + + var uv2ScaleMap; + + if ( material.aoMap ) { + + uv2ScaleMap = material.aoMap; + + } else if ( material.lightMap ) { + + uv2ScaleMap = material.lightMap; + + } + + if ( uv2ScaleMap !== undefined ) { + + // backwards compatibility + if ( uv2ScaleMap.isWebGLRenderTarget ) { + + uv2ScaleMap = uv2ScaleMap.texture; + + } + + if ( uv2ScaleMap.matrixAutoUpdate === true ) { + + uv2ScaleMap.updateMatrix(); + + } + + uniforms.uv2Transform.value.copy( uv2ScaleMap.matrix ); + + } + + } + + function refreshUniformsLine( uniforms, material ) { + + uniforms.diffuse.value.copy( material.color ); + uniforms.opacity.value = material.opacity; + + } + + function refreshUniformsDash( uniforms, material ) { + + uniforms.dashSize.value = material.dashSize; + uniforms.totalSize.value = material.dashSize + material.gapSize; + uniforms.scale.value = material.scale; + + } + + function refreshUniformsPoints( uniforms, material, pixelRatio, height ) { + + uniforms.diffuse.value.copy( material.color ); + uniforms.opacity.value = material.opacity; + uniforms.size.value = material.size * pixelRatio; + uniforms.scale.value = height * 0.5; + + if ( material.map ) { + + uniforms.map.value = material.map; + + } + + if ( material.alphaMap ) { + + uniforms.alphaMap.value = material.alphaMap; + + } + + // uv repeat and offset setting priorities + // 1. color map + // 2. alpha map + + var uvScaleMap; + + if ( material.map ) { + + uvScaleMap = material.map; + + } else if ( material.alphaMap ) { + + uvScaleMap = material.alphaMap; + + } + + if ( uvScaleMap !== undefined ) { + + if ( uvScaleMap.matrixAutoUpdate === true ) { + + uvScaleMap.updateMatrix(); + + } + + uniforms.uvTransform.value.copy( uvScaleMap.matrix ); + + } + + } + + function refreshUniformsSprites( uniforms, material ) { + + uniforms.diffuse.value.copy( material.color ); + uniforms.opacity.value = material.opacity; + uniforms.rotation.value = material.rotation; + + if ( material.map ) { + + uniforms.map.value = material.map; + + } + + if ( material.alphaMap ) { + + uniforms.alphaMap.value = material.alphaMap; + + } + + // uv repeat and offset setting priorities + // 1. color map + // 2. alpha map + + var uvScaleMap; + + if ( material.map ) { + + uvScaleMap = material.map; + + } else if ( material.alphaMap ) { + + uvScaleMap = material.alphaMap; + + } + + if ( uvScaleMap !== undefined ) { + + if ( uvScaleMap.matrixAutoUpdate === true ) { + + uvScaleMap.updateMatrix(); + + } + + uniforms.uvTransform.value.copy( uvScaleMap.matrix ); + + } + + } + + function refreshUniformsLambert( uniforms, material ) { + + if ( material.emissiveMap ) { + + uniforms.emissiveMap.value = material.emissiveMap; + + } + + } + + function refreshUniformsPhong( uniforms, material ) { + + uniforms.specular.value.copy( material.specular ); + uniforms.shininess.value = Math.max( material.shininess, 1e-4 ); // to prevent pow( 0.0, 0.0 ) + + if ( material.emissiveMap ) { + + uniforms.emissiveMap.value = material.emissiveMap; + + } + + if ( material.bumpMap ) { + + uniforms.bumpMap.value = material.bumpMap; + uniforms.bumpScale.value = material.bumpScale; + if ( material.side === BackSide ) { uniforms.bumpScale.value *= - 1; } + + } + + if ( material.normalMap ) { + + uniforms.normalMap.value = material.normalMap; + uniforms.normalScale.value.copy( material.normalScale ); + if ( material.side === BackSide ) { uniforms.normalScale.value.negate(); } + + } + + if ( material.displacementMap ) { + + uniforms.displacementMap.value = material.displacementMap; + uniforms.displacementScale.value = material.displacementScale; + uniforms.displacementBias.value = material.displacementBias; + + } + + } + + function refreshUniformsToon( uniforms, material ) { + + if ( material.gradientMap ) { + + uniforms.gradientMap.value = material.gradientMap; + + } + + if ( material.emissiveMap ) { + + uniforms.emissiveMap.value = material.emissiveMap; + + } + + if ( material.bumpMap ) { + + uniforms.bumpMap.value = material.bumpMap; + uniforms.bumpScale.value = material.bumpScale; + if ( material.side === BackSide ) { uniforms.bumpScale.value *= - 1; } + + } + + if ( material.normalMap ) { + + uniforms.normalMap.value = material.normalMap; + uniforms.normalScale.value.copy( material.normalScale ); + if ( material.side === BackSide ) { uniforms.normalScale.value.negate(); } + + } + + if ( material.displacementMap ) { + + uniforms.displacementMap.value = material.displacementMap; + uniforms.displacementScale.value = material.displacementScale; + uniforms.displacementBias.value = material.displacementBias; + + } + + } + + function refreshUniformsStandard( uniforms, material ) { + + uniforms.roughness.value = material.roughness; + uniforms.metalness.value = material.metalness; + + if ( material.roughnessMap ) { + + uniforms.roughnessMap.value = material.roughnessMap; + + } + + if ( material.metalnessMap ) { + + uniforms.metalnessMap.value = material.metalnessMap; + + } + + if ( material.emissiveMap ) { + + uniforms.emissiveMap.value = material.emissiveMap; + + } + + if ( material.bumpMap ) { + + uniforms.bumpMap.value = material.bumpMap; + uniforms.bumpScale.value = material.bumpScale; + if ( material.side === BackSide ) { uniforms.bumpScale.value *= - 1; } + + } + + if ( material.normalMap ) { + + uniforms.normalMap.value = material.normalMap; + uniforms.normalScale.value.copy( material.normalScale ); + if ( material.side === BackSide ) { uniforms.normalScale.value.negate(); } + + } + + if ( material.displacementMap ) { + + uniforms.displacementMap.value = material.displacementMap; + uniforms.displacementScale.value = material.displacementScale; + uniforms.displacementBias.value = material.displacementBias; + + } + + var envMap = properties.get( material ).envMap; + + if ( envMap ) { + + //uniforms.envMap.value = material.envMap; // part of uniforms common + uniforms.envMapIntensity.value = material.envMapIntensity; + + } + + } + + function refreshUniformsPhysical( uniforms, material ) { + + refreshUniformsStandard( uniforms, material ); + + uniforms.reflectivity.value = material.reflectivity; // also part of uniforms common + + uniforms.clearcoat.value = material.clearcoat; + uniforms.clearcoatRoughness.value = material.clearcoatRoughness; + if ( material.sheen ) { uniforms.sheen.value.copy( material.sheen ); } + + if ( material.clearcoatMap ) { + + uniforms.clearcoatMap.value = material.clearcoatMap; + + } + + if ( material.clearcoatRoughnessMap ) { + + uniforms.clearcoatRoughnessMap.value = material.clearcoatRoughnessMap; + + } + + if ( material.clearcoatNormalMap ) { + + uniforms.clearcoatNormalScale.value.copy( material.clearcoatNormalScale ); + uniforms.clearcoatNormalMap.value = material.clearcoatNormalMap; + + if ( material.side === BackSide ) { + + uniforms.clearcoatNormalScale.value.negate(); + + } + + } + + uniforms.transmission.value = material.transmission; + + if ( material.transmissionMap ) { + + uniforms.transmissionMap.value = material.transmissionMap; + + } + + } + + function refreshUniformsMatcap( uniforms, material ) { + + if ( material.matcap ) { + + uniforms.matcap.value = material.matcap; + + } + + if ( material.bumpMap ) { + + uniforms.bumpMap.value = material.bumpMap; + uniforms.bumpScale.value = material.bumpScale; + if ( material.side === BackSide ) { uniforms.bumpScale.value *= - 1; } + + } + + if ( material.normalMap ) { + + uniforms.normalMap.value = material.normalMap; + uniforms.normalScale.value.copy( material.normalScale ); + if ( material.side === BackSide ) { uniforms.normalScale.value.negate(); } + + } + + if ( material.displacementMap ) { + + uniforms.displacementMap.value = material.displacementMap; + uniforms.displacementScale.value = material.displacementScale; + uniforms.displacementBias.value = material.displacementBias; + + } + + } + + function refreshUniformsDepth( uniforms, material ) { + + if ( material.displacementMap ) { + + uniforms.displacementMap.value = material.displacementMap; + uniforms.displacementScale.value = material.displacementScale; + uniforms.displacementBias.value = material.displacementBias; + + } + + } + + function refreshUniformsDistance( uniforms, material ) { + + if ( material.displacementMap ) { + + uniforms.displacementMap.value = material.displacementMap; + uniforms.displacementScale.value = material.displacementScale; + uniforms.displacementBias.value = material.displacementBias; + + } + + uniforms.referencePosition.value.copy( material.referencePosition ); + uniforms.nearDistance.value = material.nearDistance; + uniforms.farDistance.value = material.farDistance; + + } + + function refreshUniformsNormal( uniforms, material ) { + + if ( material.bumpMap ) { + + uniforms.bumpMap.value = material.bumpMap; + uniforms.bumpScale.value = material.bumpScale; + if ( material.side === BackSide ) { uniforms.bumpScale.value *= - 1; } + + } + + if ( material.normalMap ) { + + uniforms.normalMap.value = material.normalMap; + uniforms.normalScale.value.copy( material.normalScale ); + if ( material.side === BackSide ) { uniforms.normalScale.value.negate(); } + + } + + if ( material.displacementMap ) { + + uniforms.displacementMap.value = material.displacementMap; + uniforms.displacementScale.value = material.displacementScale; + uniforms.displacementBias.value = material.displacementBias; + + } + + } + + return { + refreshFogUniforms: refreshFogUniforms, + refreshMaterialUniforms: refreshMaterialUniforms + }; + + } + + function WebGLRenderer( parameters ) { + + parameters = parameters || {}; + + var _canvas = parameters.canvas !== undefined ? parameters.canvas : document.createElementNS( 'http://www.w3.org/1999/xhtml', 'canvas' ), + _context = parameters.context !== undefined ? parameters.context : null, + + _alpha = parameters.alpha !== undefined ? parameters.alpha : false, + _depth = parameters.depth !== undefined ? parameters.depth : true, + _stencil = parameters.stencil !== undefined ? parameters.stencil : true, + _antialias = parameters.antialias !== undefined ? parameters.antialias : false, + _premultipliedAlpha = parameters.premultipliedAlpha !== undefined ? parameters.premultipliedAlpha : true, + _preserveDrawingBuffer = parameters.preserveDrawingBuffer !== undefined ? parameters.preserveDrawingBuffer : false, + _powerPreference = parameters.powerPreference !== undefined ? parameters.powerPreference : 'default', + _failIfMajorPerformanceCaveat = parameters.failIfMajorPerformanceCaveat !== undefined ? parameters.failIfMajorPerformanceCaveat : false; + + var currentRenderList = null; + var currentRenderState = null; + + // public properties + + this.domElement = _canvas; + + // Debug configuration container + this.debug = { + + /** + * Enables error checking and reporting when shader programs are being compiled + * @type {boolean} + */ + checkShaderErrors: true + }; + + // clearing + + this.autoClear = true; + this.autoClearColor = true; + this.autoClearDepth = true; + this.autoClearStencil = true; + + // scene graph + + this.sortObjects = true; + + // user-defined clipping + + this.clippingPlanes = []; + this.localClippingEnabled = false; + + // physically based shading + + this.gammaFactor = 2.0; // for backwards compatibility + this.outputEncoding = LinearEncoding; + + // physical lights + + this.physicallyCorrectLights = false; + + // tone mapping + + this.toneMapping = NoToneMapping; + this.toneMappingExposure = 1.0; + + // morphs + + this.maxMorphTargets = 8; + this.maxMorphNormals = 4; + + // internal properties + + var _this = this; + + var _isContextLost = false; + + // internal state cache + + var _framebuffer = null; + + var _currentActiveCubeFace = 0; + var _currentActiveMipmapLevel = 0; + var _currentRenderTarget = null; + var _currentFramebuffer = null; + var _currentMaterialId = - 1; + + var _currentCamera = null; + var _currentArrayCamera = null; + + var _currentViewport = new Vector4(); + var _currentScissor = new Vector4(); + var _currentScissorTest = null; + + // + + var _width = _canvas.width; + var _height = _canvas.height; + + var _pixelRatio = 1; + var _opaqueSort = null; + var _transparentSort = null; + + var _viewport = new Vector4( 0, 0, _width, _height ); + var _scissor = new Vector4( 0, 0, _width, _height ); + var _scissorTest = false; + + // frustum + + var _frustum = new Frustum(); + + // clipping + + var _clippingEnabled = false; + var _localClippingEnabled = false; + + // camera matrices cache + + var _projScreenMatrix = new Matrix4(); + + var _vector3 = new Vector3(); + + var _emptyScene = { background: null, fog: null, environment: null, overrideMaterial: null, isScene: true }; + + function getTargetPixelRatio() { + + return _currentRenderTarget === null ? _pixelRatio : 1; + + } + + // initialize + + var _gl = _context; + + function getContext( contextNames, contextAttributes ) { + + for ( var i = 0; i < contextNames.length; i ++ ) { + + var contextName = contextNames[ i ]; + var context = _canvas.getContext( contextName, contextAttributes ); + if ( context !== null ) { return context; } + + } + + return null; + + } + + try { + + var contextAttributes = { + alpha: _alpha, + depth: _depth, + stencil: _stencil, + antialias: _antialias, + premultipliedAlpha: _premultipliedAlpha, + preserveDrawingBuffer: _preserveDrawingBuffer, + powerPreference: _powerPreference, + failIfMajorPerformanceCaveat: _failIfMajorPerformanceCaveat + }; + + // event listeners must be registered before WebGL context is created, see #12753 + + _canvas.addEventListener( 'webglcontextlost', onContextLost, false ); + _canvas.addEventListener( 'webglcontextrestored', onContextRestore, false ); + + if ( _gl === null ) { + + var contextNames = [ 'webgl2', 'webgl', 'experimental-webgl' ]; + + if ( _this.isWebGL1Renderer === true ) { + + contextNames.shift(); + + } + + _gl = getContext( contextNames, contextAttributes ); + + if ( _gl === null ) { + + if ( getContext( contextNames ) ) { + + throw new Error( 'Error creating WebGL context with your selected attributes.' ); + + } else { + + throw new Error( 'Error creating WebGL context.' ); + + } + + } + + } + + // Some experimental-webgl implementations do not have getShaderPrecisionFormat + + if ( _gl.getShaderPrecisionFormat === undefined ) { + + _gl.getShaderPrecisionFormat = function () { + + return { 'rangeMin': 1, 'rangeMax': 1, 'precision': 1 }; + + }; + + } + + } catch ( error ) { + + console.error( 'THREE.WebGLRenderer: ' + error.message ); + throw error; + + } + + var extensions, capabilities, state, info; + var properties, textures, cubemaps, attributes, geometries, objects; + var programCache, materials, renderLists, renderStates, clipping; + + var background, morphtargets, bufferRenderer, indexedBufferRenderer; + + var utils, bindingStates; + + function initGLContext() { + + extensions = new WebGLExtensions( _gl ); + + capabilities = new WebGLCapabilities( _gl, extensions, parameters ); + + if ( capabilities.isWebGL2 === false ) { + + extensions.get( 'WEBGL_depth_texture' ); + extensions.get( 'OES_texture_float' ); + extensions.get( 'OES_texture_half_float' ); + extensions.get( 'OES_texture_half_float_linear' ); + extensions.get( 'OES_standard_derivatives' ); + extensions.get( 'OES_element_index_uint' ); + extensions.get( 'OES_vertex_array_object' ); + extensions.get( 'ANGLE_instanced_arrays' ); + + } + + extensions.get( 'OES_texture_float_linear' ); + + utils = new WebGLUtils( _gl, extensions, capabilities ); + + state = new WebGLState( _gl, extensions, capabilities ); + state.scissor( _currentScissor.copy( _scissor ).multiplyScalar( _pixelRatio ).floor() ); + state.viewport( _currentViewport.copy( _viewport ).multiplyScalar( _pixelRatio ).floor() ); + + info = new WebGLInfo( _gl ); + properties = new WebGLProperties(); + textures = new WebGLTextures( _gl, extensions, state, properties, capabilities, utils, info ); + cubemaps = new WebGLCubeMaps( _this ); + attributes = new WebGLAttributes( _gl, capabilities ); + bindingStates = new WebGLBindingStates( _gl, extensions, attributes, capabilities ); + geometries = new WebGLGeometries( _gl, attributes, info, bindingStates ); + objects = new WebGLObjects( _gl, geometries, attributes, info ); + morphtargets = new WebGLMorphtargets( _gl ); + clipping = new WebGLClipping( properties ); + programCache = new WebGLPrograms( _this, cubemaps, extensions, capabilities, bindingStates, clipping ); + materials = new WebGLMaterials( properties ); + renderLists = new WebGLRenderLists( properties ); + renderStates = new WebGLRenderStates(); + background = new WebGLBackground( _this, cubemaps, state, objects, _premultipliedAlpha ); + + bufferRenderer = new WebGLBufferRenderer( _gl, extensions, info, capabilities ); + indexedBufferRenderer = new WebGLIndexedBufferRenderer( _gl, extensions, info, capabilities ); + + info.programs = programCache.programs; + + _this.capabilities = capabilities; + _this.extensions = extensions; + _this.properties = properties; + _this.renderLists = renderLists; + _this.state = state; + _this.info = info; + + } + + initGLContext(); + + // xr + + var xr = new WebXRManager( _this, _gl ); + + this.xr = xr; + + // shadow map + + var shadowMap = new WebGLShadowMap( _this, objects, capabilities.maxTextureSize ); + + this.shadowMap = shadowMap; + + // API + + this.getContext = function () { + + return _gl; + + }; + + this.getContextAttributes = function () { + + return _gl.getContextAttributes(); + + }; + + this.forceContextLoss = function () { + + var extension = extensions.get( 'WEBGL_lose_context' ); + if ( extension ) { extension.loseContext(); } + + }; + + this.forceContextRestore = function () { + + var extension = extensions.get( 'WEBGL_lose_context' ); + if ( extension ) { extension.restoreContext(); } + + }; + + this.getPixelRatio = function () { + + return _pixelRatio; + + }; + + this.setPixelRatio = function ( value ) { + + if ( value === undefined ) { return; } + + _pixelRatio = value; + + this.setSize( _width, _height, false ); + + }; + + this.getSize = function ( target ) { + + if ( target === undefined ) { + + console.warn( 'WebGLRenderer: .getsize() now requires a Vector2 as an argument' ); + + target = new Vector2(); + + } + + return target.set( _width, _height ); + + }; + + this.setSize = function ( width, height, updateStyle ) { + + if ( xr.isPresenting ) { + + console.warn( 'THREE.WebGLRenderer: Can\'t change size while VR device is presenting.' ); + return; + + } + + _width = width; + _height = height; + + _canvas.width = Math.floor( width * _pixelRatio ); + _canvas.height = Math.floor( height * _pixelRatio ); + + if ( updateStyle !== false ) { + + _canvas.style.width = width + 'px'; + _canvas.style.height = height + 'px'; + + } + + this.setViewport( 0, 0, width, height ); + + }; + + this.getDrawingBufferSize = function ( target ) { + + if ( target === undefined ) { + + console.warn( 'WebGLRenderer: .getdrawingBufferSize() now requires a Vector2 as an argument' ); + + target = new Vector2(); + + } + + return target.set( _width * _pixelRatio, _height * _pixelRatio ).floor(); + + }; + + this.setDrawingBufferSize = function ( width, height, pixelRatio ) { + + _width = width; + _height = height; + + _pixelRatio = pixelRatio; + + _canvas.width = Math.floor( width * pixelRatio ); + _canvas.height = Math.floor( height * pixelRatio ); + + this.setViewport( 0, 0, width, height ); + + }; + + this.getCurrentViewport = function ( target ) { + + if ( target === undefined ) { + + console.warn( 'WebGLRenderer: .getCurrentViewport() now requires a Vector4 as an argument' ); + + target = new Vector4(); + + } + + return target.copy( _currentViewport ); + + }; + + this.getViewport = function ( target ) { + + return target.copy( _viewport ); + + }; + + this.setViewport = function ( x, y, width, height ) { + + if ( x.isVector4 ) { + + _viewport.set( x.x, x.y, x.z, x.w ); + + } else { + + _viewport.set( x, y, width, height ); + + } + + state.viewport( _currentViewport.copy( _viewport ).multiplyScalar( _pixelRatio ).floor() ); + + }; + + this.getScissor = function ( target ) { + + return target.copy( _scissor ); + + }; + + this.setScissor = function ( x, y, width, height ) { + + if ( x.isVector4 ) { + + _scissor.set( x.x, x.y, x.z, x.w ); + + } else { + + _scissor.set( x, y, width, height ); + + } + + state.scissor( _currentScissor.copy( _scissor ).multiplyScalar( _pixelRatio ).floor() ); + + }; + + this.getScissorTest = function () { + + return _scissorTest; + + }; + + this.setScissorTest = function ( boolean ) { + + state.setScissorTest( _scissorTest = boolean ); + + }; + + this.setOpaqueSort = function ( method ) { + + _opaqueSort = method; + + }; + + this.setTransparentSort = function ( method ) { + + _transparentSort = method; + + }; + + // Clearing + + this.getClearColor = function () { + + return background.getClearColor(); + + }; + + this.setClearColor = function () { + + background.setClearColor.apply( background, arguments ); + + }; + + this.getClearAlpha = function () { + + return background.getClearAlpha(); + + }; + + this.setClearAlpha = function () { + + background.setClearAlpha.apply( background, arguments ); + + }; + + this.clear = function ( color, depth, stencil ) { + + var bits = 0; + + if ( color === undefined || color ) { bits |= 16384; } + if ( depth === undefined || depth ) { bits |= 256; } + if ( stencil === undefined || stencil ) { bits |= 1024; } + + _gl.clear( bits ); + + }; + + this.clearColor = function () { + + this.clear( true, false, false ); + + }; + + this.clearDepth = function () { + + this.clear( false, true, false ); + + }; + + this.clearStencil = function () { + + this.clear( false, false, true ); + + }; + + // + + this.dispose = function () { + + _canvas.removeEventListener( 'webglcontextlost', onContextLost, false ); + _canvas.removeEventListener( 'webglcontextrestored', onContextRestore, false ); + + renderLists.dispose(); + renderStates.dispose(); + properties.dispose(); + cubemaps.dispose(); + objects.dispose(); + bindingStates.dispose(); + + xr.dispose(); + + animation.stop(); + + }; + + // Events + + function onContextLost( event ) { + + event.preventDefault(); + + console.log( 'THREE.WebGLRenderer: Context Lost.' ); + + _isContextLost = true; + + } + + function onContextRestore( /* event */ ) { + + console.log( 'THREE.WebGLRenderer: Context Restored.' ); + + _isContextLost = false; + + initGLContext(); + + } + + function onMaterialDispose( event ) { + + var material = event.target; + + material.removeEventListener( 'dispose', onMaterialDispose ); + + deallocateMaterial( material ); + + } + + // Buffer deallocation + + function deallocateMaterial( material ) { + + releaseMaterialProgramReference( material ); + + properties.remove( material ); + + } + + + function releaseMaterialProgramReference( material ) { + + var programInfo = properties.get( material ).program; + + if ( programInfo !== undefined ) { + + programCache.releaseProgram( programInfo ); + + } + + } + + // Buffer rendering + + function renderObjectImmediate( object, program ) { + + object.render( function ( object ) { + + _this.renderBufferImmediate( object, program ); + + } ); + + } + + this.renderBufferImmediate = function ( object, program ) { + + bindingStates.initAttributes(); + + var buffers = properties.get( object ); + + if ( object.hasPositions && ! buffers.position ) { buffers.position = _gl.createBuffer(); } + if ( object.hasNormals && ! buffers.normal ) { buffers.normal = _gl.createBuffer(); } + if ( object.hasUvs && ! buffers.uv ) { buffers.uv = _gl.createBuffer(); } + if ( object.hasColors && ! buffers.color ) { buffers.color = _gl.createBuffer(); } + + var programAttributes = program.getAttributes(); + + if ( object.hasPositions ) { + + _gl.bindBuffer( 34962, buffers.position ); + _gl.bufferData( 34962, object.positionArray, 35048 ); + + bindingStates.enableAttribute( programAttributes.position ); + _gl.vertexAttribPointer( programAttributes.position, 3, 5126, false, 0, 0 ); + + } + + if ( object.hasNormals ) { + + _gl.bindBuffer( 34962, buffers.normal ); + _gl.bufferData( 34962, object.normalArray, 35048 ); + + bindingStates.enableAttribute( programAttributes.normal ); + _gl.vertexAttribPointer( programAttributes.normal, 3, 5126, false, 0, 0 ); + + } + + if ( object.hasUvs ) { + + _gl.bindBuffer( 34962, buffers.uv ); + _gl.bufferData( 34962, object.uvArray, 35048 ); + + bindingStates.enableAttribute( programAttributes.uv ); + _gl.vertexAttribPointer( programAttributes.uv, 2, 5126, false, 0, 0 ); + + } + + if ( object.hasColors ) { + + _gl.bindBuffer( 34962, buffers.color ); + _gl.bufferData( 34962, object.colorArray, 35048 ); + + bindingStates.enableAttribute( programAttributes.color ); + _gl.vertexAttribPointer( programAttributes.color, 3, 5126, false, 0, 0 ); + + } + + bindingStates.disableUnusedAttributes(); + + _gl.drawArrays( 4, 0, object.count ); + + object.count = 0; + + }; + + this.renderBufferDirect = function ( camera, scene, geometry, material, object, group ) { + + if ( scene === null ) { scene = _emptyScene; } // renderBufferDirect second parameter used to be fog (could be null) + + var frontFaceCW = ( object.isMesh && object.matrixWorld.determinant() < 0 ); + + var program = setProgram( camera, scene, material, object ); + + state.setMaterial( material, frontFaceCW ); + + // + + var index = geometry.index; + var position = geometry.attributes.position; + + // + + if ( index === null ) { + + if ( position === undefined || position.count === 0 ) { return; } + + } else if ( index.count === 0 ) { + + return; + + } + + // + + var rangeFactor = 1; + + if ( material.wireframe === true ) { + + index = geometries.getWireframeAttribute( geometry ); + rangeFactor = 2; + + } + + if ( material.morphTargets || material.morphNormals ) { + + morphtargets.update( object, geometry, material, program ); + + } + + bindingStates.setup( object, material, program, geometry, index ); + + var attribute; + var renderer = bufferRenderer; + + if ( index !== null ) { + + attribute = attributes.get( index ); + + renderer = indexedBufferRenderer; + renderer.setIndex( attribute ); + + } + + // + + var dataCount = ( index !== null ) ? index.count : position.count; + + var rangeStart = geometry.drawRange.start * rangeFactor; + var rangeCount = geometry.drawRange.count * rangeFactor; + + var groupStart = group !== null ? group.start * rangeFactor : 0; + var groupCount = group !== null ? group.count * rangeFactor : Infinity; + + var drawStart = Math.max( rangeStart, groupStart ); + var drawEnd = Math.min( dataCount, rangeStart + rangeCount, groupStart + groupCount ) - 1; + + var drawCount = Math.max( 0, drawEnd - drawStart + 1 ); + + if ( drawCount === 0 ) { return; } + + // + + if ( object.isMesh ) { + + if ( material.wireframe === true ) { + + state.setLineWidth( material.wireframeLinewidth * getTargetPixelRatio() ); + renderer.setMode( 1 ); + + } else { + + renderer.setMode( 4 ); + + } + + } else if ( object.isLine ) { + + var lineWidth = material.linewidth; + + if ( lineWidth === undefined ) { lineWidth = 1; } // Not using Line*Material + + state.setLineWidth( lineWidth * getTargetPixelRatio() ); + + if ( object.isLineSegments ) { + + renderer.setMode( 1 ); + + } else if ( object.isLineLoop ) { + + renderer.setMode( 2 ); + + } else { + + renderer.setMode( 3 ); + + } + + } else if ( object.isPoints ) { + + renderer.setMode( 0 ); + + } else if ( object.isSprite ) { + + renderer.setMode( 4 ); + + } + + if ( object.isInstancedMesh ) { + + renderer.renderInstances( drawStart, drawCount, object.count ); + + } else if ( geometry.isInstancedBufferGeometry ) { + + var instanceCount = Math.min( geometry.instanceCount, geometry._maxInstanceCount ); + + renderer.renderInstances( drawStart, drawCount, instanceCount ); + + } else { + + renderer.render( drawStart, drawCount ); + + } + + }; + + // Compile + + this.compile = function ( scene, camera ) { + + currentRenderState = renderStates.get( scene, camera ); + currentRenderState.init(); + + scene.traverse( function ( object ) { + + if ( object.isLight ) { + + currentRenderState.pushLight( object ); + + if ( object.castShadow ) { + + currentRenderState.pushShadow( object ); + + } + + } + + } ); + + currentRenderState.setupLights( camera ); + + var compiled = new WeakMap(); + + scene.traverse( function ( object ) { + + var material = object.material; + + if ( material ) { + + if ( Array.isArray( material ) ) { + + for ( var i = 0; i < material.length; i ++ ) { + + var material2 = material[ i ]; + + if ( compiled.has( material2 ) === false ) { + + initMaterial( material2, scene, object ); + compiled.set( material2 ); + + } + + } + + } else if ( compiled.has( material ) === false ) { + + initMaterial( material, scene, object ); + compiled.set( material ); + + } + + } + + } ); + + }; + + // Animation Loop + + var onAnimationFrameCallback = null; + + function onAnimationFrame( time ) { + + if ( xr.isPresenting ) { return; } + if ( onAnimationFrameCallback ) { onAnimationFrameCallback( time ); } + + } + + var animation = new WebGLAnimation(); + animation.setAnimationLoop( onAnimationFrame ); + + if ( typeof window !== 'undefined' ) { animation.setContext( window ); } + + this.setAnimationLoop = function ( callback ) { + + onAnimationFrameCallback = callback; + xr.setAnimationLoop( callback ); + + ( callback === null ) ? animation.stop() : animation.start(); + + }; + + // Rendering + + this.render = function ( scene, camera ) { + + var renderTarget, forceClear; + + if ( arguments[ 2 ] !== undefined ) { + + console.warn( 'THREE.WebGLRenderer.render(): the renderTarget argument has been removed. Use .setRenderTarget() instead.' ); + renderTarget = arguments[ 2 ]; + + } + + if ( arguments[ 3 ] !== undefined ) { + + console.warn( 'THREE.WebGLRenderer.render(): the forceClear argument has been removed. Use .clear() instead.' ); + forceClear = arguments[ 3 ]; + + } + + if ( camera !== undefined && camera.isCamera !== true ) { + + console.error( 'THREE.WebGLRenderer.render: camera is not an instance of THREE.Camera.' ); + return; + + } + + if ( _isContextLost === true ) { return; } + + // reset caching for this frame + + bindingStates.resetDefaultState(); + _currentMaterialId = - 1; + _currentCamera = null; + + // update scene graph + + if ( scene.autoUpdate === true ) { scene.updateMatrixWorld(); } + + // update camera matrices and frustum + + if ( camera.parent === null ) { camera.updateMatrixWorld(); } + + if ( xr.enabled === true && xr.isPresenting === true ) { + + camera = xr.getCamera( camera ); + + } + + // + if ( scene.isScene === true ) { scene.onBeforeRender( _this, scene, camera, renderTarget || _currentRenderTarget ); } + + currentRenderState = renderStates.get( scene, camera ); + currentRenderState.init(); + + _projScreenMatrix.multiplyMatrices( camera.projectionMatrix, camera.matrixWorldInverse ); + _frustum.setFromProjectionMatrix( _projScreenMatrix ); + + _localClippingEnabled = this.localClippingEnabled; + _clippingEnabled = clipping.init( this.clippingPlanes, _localClippingEnabled, camera ); + + currentRenderList = renderLists.get( scene, camera ); + currentRenderList.init(); + + projectObject( scene, camera, 0, _this.sortObjects ); + + currentRenderList.finish(); + + if ( _this.sortObjects === true ) { + + currentRenderList.sort( _opaqueSort, _transparentSort ); + + } + + // + + if ( _clippingEnabled === true ) { clipping.beginShadows(); } + + var shadowsArray = currentRenderState.state.shadowsArray; + + shadowMap.render( shadowsArray, scene, camera ); + + currentRenderState.setupLights( camera ); + + if ( _clippingEnabled === true ) { clipping.endShadows(); } + + // + + if ( this.info.autoReset === true ) { this.info.reset(); } + + if ( renderTarget !== undefined ) { + + this.setRenderTarget( renderTarget ); + + } + + // + + background.render( currentRenderList, scene, camera, forceClear ); + + // render scene + + var opaqueObjects = currentRenderList.opaque; + var transparentObjects = currentRenderList.transparent; + + if ( opaqueObjects.length > 0 ) { renderObjects( opaqueObjects, scene, camera ); } + if ( transparentObjects.length > 0 ) { renderObjects( transparentObjects, scene, camera ); } + + // + + if ( scene.isScene === true ) { scene.onAfterRender( _this, scene, camera ); } + + // + + if ( _currentRenderTarget !== null ) { + + // Generate mipmap if we're using any kind of mipmap filtering + + textures.updateRenderTargetMipmap( _currentRenderTarget ); + + // resolve multisample renderbuffers to a single-sample texture if necessary + + textures.updateMultisampleRenderTarget( _currentRenderTarget ); + + } + + // Ensure depth buffer writing is enabled so it can be cleared on next render + + state.buffers.depth.setTest( true ); + state.buffers.depth.setMask( true ); + state.buffers.color.setMask( true ); + + state.setPolygonOffset( false ); + + // _gl.finish(); + + currentRenderList = null; + currentRenderState = null; + + }; + + function projectObject( object, camera, groupOrder, sortObjects ) { + + if ( object.visible === false ) { return; } + + var visible = object.layers.test( camera.layers ); + + if ( visible ) { + + if ( object.isGroup ) { + + groupOrder = object.renderOrder; + + } else if ( object.isLOD ) { + + if ( object.autoUpdate === true ) { object.update( camera ); } + + } else if ( object.isLight ) { + + currentRenderState.pushLight( object ); + + if ( object.castShadow ) { + + currentRenderState.pushShadow( object ); + + } + + } else if ( object.isSprite ) { + + if ( ! object.frustumCulled || _frustum.intersectsSprite( object ) ) { + + if ( sortObjects ) { + + _vector3.setFromMatrixPosition( object.matrixWorld ) + .applyMatrix4( _projScreenMatrix ); + + } + + var geometry = objects.update( object ); + var material = object.material; + + if ( material.visible ) { + + currentRenderList.push( object, geometry, material, groupOrder, _vector3.z, null ); + + } + + } + + } else if ( object.isImmediateRenderObject ) { + + if ( sortObjects ) { + + _vector3.setFromMatrixPosition( object.matrixWorld ) + .applyMatrix4( _projScreenMatrix ); + + } + + currentRenderList.push( object, null, object.material, groupOrder, _vector3.z, null ); + + } else if ( object.isMesh || object.isLine || object.isPoints ) { + + if ( object.isSkinnedMesh ) { + + // update skeleton only once in a frame + + if ( object.skeleton.frame !== info.render.frame ) { + + object.skeleton.update(); + object.skeleton.frame = info.render.frame; + + } + + } + + if ( ! object.frustumCulled || _frustum.intersectsObject( object ) ) { + + if ( sortObjects ) { + + _vector3.setFromMatrixPosition( object.matrixWorld ) + .applyMatrix4( _projScreenMatrix ); + + } + + var geometry$1 = objects.update( object ); + var material$1 = object.material; + + if ( Array.isArray( material$1 ) ) { + + var groups = geometry$1.groups; + + for ( var i = 0, l = groups.length; i < l; i ++ ) { + + var group = groups[ i ]; + var groupMaterial = material$1[ group.materialIndex ]; + + if ( groupMaterial && groupMaterial.visible ) { + + currentRenderList.push( object, geometry$1, groupMaterial, groupOrder, _vector3.z, group ); + + } + + } + + } else if ( material$1.visible ) { + + currentRenderList.push( object, geometry$1, material$1, groupOrder, _vector3.z, null ); + + } + + } + + } + + } + + var children = object.children; + + for ( var i$1 = 0, l$1 = children.length; i$1 < l$1; i$1 ++ ) { + + projectObject( children[ i$1 ], camera, groupOrder, sortObjects ); + + } + + } + + function renderObjects( renderList, scene, camera ) { + + var overrideMaterial = scene.isScene === true ? scene.overrideMaterial : null; + + for ( var i = 0, l = renderList.length; i < l; i ++ ) { + + var renderItem = renderList[ i ]; + + var object = renderItem.object; + var geometry = renderItem.geometry; + var material = overrideMaterial === null ? renderItem.material : overrideMaterial; + var group = renderItem.group; + + if ( camera.isArrayCamera ) { + + _currentArrayCamera = camera; + + var cameras = camera.cameras; + + for ( var j = 0, jl = cameras.length; j < jl; j ++ ) { + + var camera2 = cameras[ j ]; + + if ( object.layers.test( camera2.layers ) ) { + + state.viewport( _currentViewport.copy( camera2.viewport ) ); + + currentRenderState.setupLights( camera2 ); + + renderObject( object, scene, camera2, geometry, material, group ); + + } + + } + + } else { + + _currentArrayCamera = null; + + renderObject( object, scene, camera, geometry, material, group ); + + } + + } + + } + + function renderObject( object, scene, camera, geometry, material, group ) { + + object.onBeforeRender( _this, scene, camera, geometry, material, group ); + currentRenderState = renderStates.get( scene, _currentArrayCamera || camera ); + + object.modelViewMatrix.multiplyMatrices( camera.matrixWorldInverse, object.matrixWorld ); + object.normalMatrix.getNormalMatrix( object.modelViewMatrix ); + + if ( object.isImmediateRenderObject ) { + + var program = setProgram( camera, scene, material, object ); + + state.setMaterial( material ); + + bindingStates.reset(); + + renderObjectImmediate( object, program ); + + } else { + + _this.renderBufferDirect( camera, scene, geometry, material, object, group ); + + } + + object.onAfterRender( _this, scene, camera, geometry, material, group ); + currentRenderState = renderStates.get( scene, _currentArrayCamera || camera ); + + } + + function initMaterial( material, scene, object ) { + + if ( scene.isScene !== true ) { scene = _emptyScene; } // scene could be a Mesh, Line, Points, ... + + var materialProperties = properties.get( material ); + + var lights = currentRenderState.state.lights; + var shadowsArray = currentRenderState.state.shadowsArray; + + var lightsStateVersion = lights.state.version; + + var parameters = programCache.getParameters( material, lights.state, shadowsArray, scene, object ); + var programCacheKey = programCache.getProgramCacheKey( parameters ); + + var program = materialProperties.program; + var programChange = true; + + if ( program === undefined ) { + + // new material + material.addEventListener( 'dispose', onMaterialDispose ); + + } else if ( program.cacheKey !== programCacheKey ) { + + // changed glsl or parameters + releaseMaterialProgramReference( material ); + + } else if ( materialProperties.lightsStateVersion !== lightsStateVersion ) { + + programChange = false; + + } else if ( parameters.shaderID !== undefined ) { + + // same glsl and uniform list, envMap still needs the update here to avoid a frame-late effect + + var environment = material.isMeshStandardMaterial ? scene.environment : null; + materialProperties.envMap = cubemaps.get( material.envMap || environment ); + + return; + + } else { + + // only rebuild uniform list + programChange = false; + + } + + if ( programChange ) { + + parameters.uniforms = programCache.getUniforms( material ); + + material.onBeforeCompile( parameters, _this ); + + program = programCache.acquireProgram( parameters, programCacheKey ); + + materialProperties.program = program; + materialProperties.uniforms = parameters.uniforms; + materialProperties.outputEncoding = parameters.outputEncoding; + + } + + var uniforms = materialProperties.uniforms; + + if ( ! material.isShaderMaterial && + ! material.isRawShaderMaterial || + material.clipping === true ) { + + materialProperties.numClippingPlanes = clipping.numPlanes; + materialProperties.numIntersection = clipping.numIntersection; + uniforms.clippingPlanes = clipping.uniform; + + } + + materialProperties.environment = material.isMeshStandardMaterial ? scene.environment : null; + materialProperties.fog = scene.fog; + materialProperties.envMap = cubemaps.get( material.envMap || materialProperties.environment ); + + // store the light setup it was created for + + materialProperties.needsLights = materialNeedsLights( material ); + materialProperties.lightsStateVersion = lightsStateVersion; + + if ( materialProperties.needsLights ) { + + // wire up the material to this renderer's lighting state + + uniforms.ambientLightColor.value = lights.state.ambient; + uniforms.lightProbe.value = lights.state.probe; + uniforms.directionalLights.value = lights.state.directional; + uniforms.directionalLightShadows.value = lights.state.directionalShadow; + uniforms.spotLights.value = lights.state.spot; + uniforms.spotLightShadows.value = lights.state.spotShadow; + uniforms.rectAreaLights.value = lights.state.rectArea; + uniforms.ltc_1.value = lights.state.rectAreaLTC1; + uniforms.ltc_2.value = lights.state.rectAreaLTC2; + uniforms.pointLights.value = lights.state.point; + uniforms.pointLightShadows.value = lights.state.pointShadow; + uniforms.hemisphereLights.value = lights.state.hemi; + + uniforms.directionalShadowMap.value = lights.state.directionalShadowMap; + uniforms.directionalShadowMatrix.value = lights.state.directionalShadowMatrix; + uniforms.spotShadowMap.value = lights.state.spotShadowMap; + uniforms.spotShadowMatrix.value = lights.state.spotShadowMatrix; + uniforms.pointShadowMap.value = lights.state.pointShadowMap; + uniforms.pointShadowMatrix.value = lights.state.pointShadowMatrix; + // TODO (abelnation): add area lights shadow info to uniforms + + } + + var progUniforms = materialProperties.program.getUniforms(); + var uniformsList = WebGLUniforms.seqWithValue( progUniforms.seq, uniforms ); + + materialProperties.uniformsList = uniformsList; + + } + + function setProgram( camera, scene, material, object ) { + + if ( scene.isScene !== true ) { scene = _emptyScene; } // scene could be a Mesh, Line, Points, ... + + textures.resetTextureUnits(); + + var fog = scene.fog; + var environment = material.isMeshStandardMaterial ? scene.environment : null; + var encoding = ( _currentRenderTarget === null ) ? _this.outputEncoding : _currentRenderTarget.texture.encoding; + var envMap = cubemaps.get( material.envMap || environment ); + + var materialProperties = properties.get( material ); + var lights = currentRenderState.state.lights; + + if ( _clippingEnabled === true ) { + + if ( _localClippingEnabled === true || camera !== _currentCamera ) { + + var useCache = + camera === _currentCamera && + material.id === _currentMaterialId; + + // we might want to call this function with some ClippingGroup + // object instead of the material, once it becomes feasible + // (#8465, #8379) + clipping.setState( material, camera, useCache ); + + } + + } + + if ( material.version === materialProperties.__version ) { + + if ( material.fog && materialProperties.fog !== fog ) { + + initMaterial( material, scene, object ); + + } else if ( materialProperties.environment !== environment ) { + + initMaterial( material, scene, object ); + + } else if ( materialProperties.needsLights && ( materialProperties.lightsStateVersion !== lights.state.version ) ) { + + initMaterial( material, scene, object ); + + } else if ( materialProperties.numClippingPlanes !== undefined && + ( materialProperties.numClippingPlanes !== clipping.numPlanes || + materialProperties.numIntersection !== clipping.numIntersection ) ) { + + initMaterial( material, scene, object ); + + } else if ( materialProperties.outputEncoding !== encoding ) { + + initMaterial( material, scene, object ); + + } else if ( materialProperties.envMap !== envMap ) { + + initMaterial( material, scene, object ); + + } + + } else { + + initMaterial( material, scene, object ); + materialProperties.__version = material.version; + + } + + var refreshProgram = false; + var refreshMaterial = false; + var refreshLights = false; + + var program = materialProperties.program, + p_uniforms = program.getUniforms(), + m_uniforms = materialProperties.uniforms; + + if ( state.useProgram( program.program ) ) { + + refreshProgram = true; + refreshMaterial = true; + refreshLights = true; + + } + + if ( material.id !== _currentMaterialId ) { + + _currentMaterialId = material.id; + + refreshMaterial = true; + + } + + if ( refreshProgram || _currentCamera !== camera ) { + + p_uniforms.setValue( _gl, 'projectionMatrix', camera.projectionMatrix ); + + if ( capabilities.logarithmicDepthBuffer ) { + + p_uniforms.setValue( _gl, 'logDepthBufFC', + 2.0 / ( Math.log( camera.far + 1.0 ) / Math.LN2 ) ); + + } + + if ( _currentCamera !== camera ) { + + _currentCamera = camera; + + // lighting uniforms depend on the camera so enforce an update + // now, in case this material supports lights - or later, when + // the next material that does gets activated: + + refreshMaterial = true; // set to true on material change + refreshLights = true; // remains set until update done + + } + + // load material specific uniforms + // (shader material also gets them for the sake of genericity) + + if ( material.isShaderMaterial || + material.isMeshPhongMaterial || + material.isMeshToonMaterial || + material.isMeshStandardMaterial || + material.envMap ) { + + var uCamPos = p_uniforms.map.cameraPosition; + + if ( uCamPos !== undefined ) { + + uCamPos.setValue( _gl, + _vector3.setFromMatrixPosition( camera.matrixWorld ) ); + + } + + } + + if ( material.isMeshPhongMaterial || + material.isMeshToonMaterial || + material.isMeshLambertMaterial || + material.isMeshBasicMaterial || + material.isMeshStandardMaterial || + material.isShaderMaterial ) { + + p_uniforms.setValue( _gl, 'isOrthographic', camera.isOrthographicCamera === true ); + + } + + if ( material.isMeshPhongMaterial || + material.isMeshToonMaterial || + material.isMeshLambertMaterial || + material.isMeshBasicMaterial || + material.isMeshStandardMaterial || + material.isShaderMaterial || + material.isShadowMaterial || + material.skinning ) { + + p_uniforms.setValue( _gl, 'viewMatrix', camera.matrixWorldInverse ); + + } + + } + + // skinning uniforms must be set even if material didn't change + // auto-setting of texture unit for bone texture must go before other textures + // otherwise textures used for skinning can take over texture units reserved for other material textures + + if ( material.skinning ) { + + p_uniforms.setOptional( _gl, object, 'bindMatrix' ); + p_uniforms.setOptional( _gl, object, 'bindMatrixInverse' ); + + var skeleton = object.skeleton; + + if ( skeleton ) { + + var bones = skeleton.bones; + + if ( capabilities.floatVertexTextures ) { + + if ( skeleton.boneTexture === undefined ) { + + // layout (1 matrix = 4 pixels) + // RGBA RGBA RGBA RGBA (=> column1, column2, column3, column4) + // with 8x8 pixel texture max 16 bones * 4 pixels = (8 * 8) + // 16x16 pixel texture max 64 bones * 4 pixels = (16 * 16) + // 32x32 pixel texture max 256 bones * 4 pixels = (32 * 32) + // 64x64 pixel texture max 1024 bones * 4 pixels = (64 * 64) + + + var size = Math.sqrt( bones.length * 4 ); // 4 pixels needed for 1 matrix + size = MathUtils.ceilPowerOfTwo( size ); + size = Math.max( size, 4 ); + + var boneMatrices = new Float32Array( size * size * 4 ); // 4 floats per RGBA pixel + boneMatrices.set( skeleton.boneMatrices ); // copy current values + + var boneTexture = new DataTexture( boneMatrices, size, size, RGBAFormat, FloatType ); + + skeleton.boneMatrices = boneMatrices; + skeleton.boneTexture = boneTexture; + skeleton.boneTextureSize = size; + + } + + p_uniforms.setValue( _gl, 'boneTexture', skeleton.boneTexture, textures ); + p_uniforms.setValue( _gl, 'boneTextureSize', skeleton.boneTextureSize ); + + } else { + + p_uniforms.setOptional( _gl, skeleton, 'boneMatrices' ); + + } + + } + + } + + if ( refreshMaterial || materialProperties.receiveShadow !== object.receiveShadow ) { + + materialProperties.receiveShadow = object.receiveShadow; + p_uniforms.setValue( _gl, 'receiveShadow', object.receiveShadow ); + + } + + if ( refreshMaterial ) { + + p_uniforms.setValue( _gl, 'toneMappingExposure', _this.toneMappingExposure ); + + if ( materialProperties.needsLights ) { + + // the current material requires lighting info + + // note: all lighting uniforms are always set correctly + // they simply reference the renderer's state for their + // values + // + // use the current material's .needsUpdate flags to set + // the GL state when required + + markUniformsLightsNeedsUpdate( m_uniforms, refreshLights ); + + } + + // refresh uniforms common to several materials + + if ( fog && material.fog ) { + + materials.refreshFogUniforms( m_uniforms, fog ); + + } + + materials.refreshMaterialUniforms( m_uniforms, material, _pixelRatio, _height ); + + WebGLUniforms.upload( _gl, materialProperties.uniformsList, m_uniforms, textures ); + + } + + if ( material.isShaderMaterial && material.uniformsNeedUpdate === true ) { + + WebGLUniforms.upload( _gl, materialProperties.uniformsList, m_uniforms, textures ); + material.uniformsNeedUpdate = false; + + } + + if ( material.isSpriteMaterial ) { + + p_uniforms.setValue( _gl, 'center', object.center ); + + } + + // common matrices + + p_uniforms.setValue( _gl, 'modelViewMatrix', object.modelViewMatrix ); + p_uniforms.setValue( _gl, 'normalMatrix', object.normalMatrix ); + p_uniforms.setValue( _gl, 'modelMatrix', object.matrixWorld ); + + return program; + + } + + // If uniforms are marked as clean, they don't need to be loaded to the GPU. + + function markUniformsLightsNeedsUpdate( uniforms, value ) { + + uniforms.ambientLightColor.needsUpdate = value; + uniforms.lightProbe.needsUpdate = value; + + uniforms.directionalLights.needsUpdate = value; + uniforms.directionalLightShadows.needsUpdate = value; + uniforms.pointLights.needsUpdate = value; + uniforms.pointLightShadows.needsUpdate = value; + uniforms.spotLights.needsUpdate = value; + uniforms.spotLightShadows.needsUpdate = value; + uniforms.rectAreaLights.needsUpdate = value; + uniforms.hemisphereLights.needsUpdate = value; + + } + + function materialNeedsLights( material ) { + + return material.isMeshLambertMaterial || material.isMeshToonMaterial || material.isMeshPhongMaterial || + material.isMeshStandardMaterial || material.isShadowMaterial || + ( material.isShaderMaterial && material.lights === true ); + + } + + // + this.setFramebuffer = function ( value ) { + + if ( _framebuffer !== value && _currentRenderTarget === null ) { _gl.bindFramebuffer( 36160, value ); } + + _framebuffer = value; + + }; + + this.getActiveCubeFace = function () { + + return _currentActiveCubeFace; + + }; + + this.getActiveMipmapLevel = function () { + + return _currentActiveMipmapLevel; + + }; + + this.getRenderList = function () { + + return currentRenderList; + + }; + + this.setRenderList = function ( renderList ) { + + currentRenderList = renderList; + + }; + + this.getRenderState = function () { + + return currentRenderState; + + }; + + this.setRenderState = function ( renderState ) { + + currentRenderState = renderState; + + }; + + this.getRenderTarget = function () { + + return _currentRenderTarget; + + }; + + this.setRenderTarget = function ( renderTarget, activeCubeFace, activeMipmapLevel ) { + if ( activeCubeFace === void 0 ) activeCubeFace = 0; + if ( activeMipmapLevel === void 0 ) activeMipmapLevel = 0; + + + _currentRenderTarget = renderTarget; + _currentActiveCubeFace = activeCubeFace; + _currentActiveMipmapLevel = activeMipmapLevel; + + if ( renderTarget && properties.get( renderTarget ).__webglFramebuffer === undefined ) { + + textures.setupRenderTarget( renderTarget ); + + } + + var framebuffer = _framebuffer; + var isCube = false; + + if ( renderTarget ) { + + var _webglFramebuffer = properties.get( renderTarget ).__webglFramebuffer; + + if ( renderTarget.isWebGLCubeRenderTarget ) { + + framebuffer = _webglFramebuffer[ activeCubeFace ]; + isCube = true; + + } else if ( renderTarget.isWebGLMultisampleRenderTarget ) { + + framebuffer = properties.get( renderTarget ).__webglMultisampledFramebuffer; + + } else { + + framebuffer = _webglFramebuffer; + + } + + _currentViewport.copy( renderTarget.viewport ); + _currentScissor.copy( renderTarget.scissor ); + _currentScissorTest = renderTarget.scissorTest; + + } else { + + _currentViewport.copy( _viewport ).multiplyScalar( _pixelRatio ).floor(); + _currentScissor.copy( _scissor ).multiplyScalar( _pixelRatio ).floor(); + _currentScissorTest = _scissorTest; + + } + + if ( _currentFramebuffer !== framebuffer ) { + + _gl.bindFramebuffer( 36160, framebuffer ); + _currentFramebuffer = framebuffer; + + } + + state.viewport( _currentViewport ); + state.scissor( _currentScissor ); + state.setScissorTest( _currentScissorTest ); + + if ( isCube ) { + + var textureProperties = properties.get( renderTarget.texture ); + _gl.framebufferTexture2D( 36160, 36064, 34069 + activeCubeFace, textureProperties.__webglTexture, activeMipmapLevel ); + + } + + }; + + this.readRenderTargetPixels = function ( renderTarget, x, y, width, height, buffer, activeCubeFaceIndex ) { + + if ( ! ( renderTarget && renderTarget.isWebGLRenderTarget ) ) { + + console.error( 'THREE.WebGLRenderer.readRenderTargetPixels: renderTarget is not THREE.WebGLRenderTarget.' ); + return; + + } + + var framebuffer = properties.get( renderTarget ).__webglFramebuffer; + + if ( renderTarget.isWebGLCubeRenderTarget && activeCubeFaceIndex !== undefined ) { + + framebuffer = framebuffer[ activeCubeFaceIndex ]; + + } + + if ( framebuffer ) { + + var restore = false; + + if ( framebuffer !== _currentFramebuffer ) { + + _gl.bindFramebuffer( 36160, framebuffer ); + + restore = true; + + } + + try { + + var texture = renderTarget.texture; + var textureFormat = texture.format; + var textureType = texture.type; + + if ( textureFormat !== RGBAFormat && utils.convert( textureFormat ) !== _gl.getParameter( 35739 ) ) { + + console.error( 'THREE.WebGLRenderer.readRenderTargetPixels: renderTarget is not in RGBA or implementation defined format.' ); + return; + + } + + if ( textureType !== UnsignedByteType && utils.convert( textureType ) !== _gl.getParameter( 35738 ) && // IE11, Edge and Chrome Mac < 52 (#9513) + ! ( textureType === FloatType && ( capabilities.isWebGL2 || extensions.get( 'OES_texture_float' ) || extensions.get( 'WEBGL_color_buffer_float' ) ) ) && // Chrome Mac >= 52 and Firefox + ! ( textureType === HalfFloatType && ( capabilities.isWebGL2 ? extensions.get( 'EXT_color_buffer_float' ) : extensions.get( 'EXT_color_buffer_half_float' ) ) ) ) { + + console.error( 'THREE.WebGLRenderer.readRenderTargetPixels: renderTarget is not in UnsignedByteType or implementation defined type.' ); + return; + + } + + if ( _gl.checkFramebufferStatus( 36160 ) === 36053 ) { + + // the following if statement ensures valid read requests (no out-of-bounds pixels, see #8604) + + if ( ( x >= 0 && x <= ( renderTarget.width - width ) ) && ( y >= 0 && y <= ( renderTarget.height - height ) ) ) { + + _gl.readPixels( x, y, width, height, utils.convert( textureFormat ), utils.convert( textureType ), buffer ); + + } + + } else { + + console.error( 'THREE.WebGLRenderer.readRenderTargetPixels: readPixels from renderTarget failed. Framebuffer not complete.' ); + + } + + } finally { + + if ( restore ) { + + _gl.bindFramebuffer( 36160, _currentFramebuffer ); + + } + + } + + } + + }; + + this.copyFramebufferToTexture = function ( position, texture, level ) { + + if ( level === undefined ) { level = 0; } + + var levelScale = Math.pow( 2, - level ); + var width = Math.floor( texture.image.width * levelScale ); + var height = Math.floor( texture.image.height * levelScale ); + var glFormat = utils.convert( texture.format ); + + textures.setTexture2D( texture, 0 ); + + _gl.copyTexImage2D( 3553, level, glFormat, position.x, position.y, width, height, 0 ); + + state.unbindTexture(); + + }; + + this.copyTextureToTexture = function ( position, srcTexture, dstTexture, level ) { + + if ( level === undefined ) { level = 0; } + + var width = srcTexture.image.width; + var height = srcTexture.image.height; + var glFormat = utils.convert( dstTexture.format ); + var glType = utils.convert( dstTexture.type ); + + textures.setTexture2D( dstTexture, 0 ); + + // As another texture upload may have changed pixelStorei + // parameters, make sure they are correct for the dstTexture + _gl.pixelStorei( 37440, dstTexture.flipY ); + _gl.pixelStorei( 37441, dstTexture.premultiplyAlpha ); + _gl.pixelStorei( 3317, dstTexture.unpackAlignment ); + + if ( srcTexture.isDataTexture ) { + + _gl.texSubImage2D( 3553, level, position.x, position.y, width, height, glFormat, glType, srcTexture.image.data ); + + } else { + + if ( srcTexture.isCompressedTexture ) { + + _gl.compressedTexSubImage2D( 3553, level, position.x, position.y, srcTexture.mipmaps[ 0 ].width, srcTexture.mipmaps[ 0 ].height, glFormat, srcTexture.mipmaps[ 0 ].data ); + + } else { + + _gl.texSubImage2D( 3553, level, position.x, position.y, glFormat, glType, srcTexture.image ); + + } + + } + + // Generate mipmaps only when copying level 0 + if ( level === 0 && dstTexture.generateMipmaps ) { _gl.generateMipmap( 3553 ); } + + state.unbindTexture(); + + }; + + this.initTexture = function ( texture ) { + + textures.setTexture2D( texture, 0 ); + + state.unbindTexture(); + + }; + + if ( typeof __THREE_DEVTOOLS__ !== 'undefined' ) { + + __THREE_DEVTOOLS__.dispatchEvent( new CustomEvent( 'observe', { detail: this } ) ); // eslint-disable-line no-undef + + } + + } + + function WebGL1Renderer( parameters ) { + + WebGLRenderer.call( this, parameters ); + + } + + WebGL1Renderer.prototype = Object.assign( Object.create( WebGLRenderer.prototype ), { + + constructor: WebGL1Renderer, + + isWebGL1Renderer: true + + } ); + + var FogExp2 = function FogExp2( color, density ) { + + Object.defineProperty( this, 'isFogExp2', { value: true } ); + + this.name = ''; + + this.color = new Color( color ); + this.density = ( density !== undefined ) ? density : 0.00025; + + }; + + FogExp2.prototype.clone = function clone () { + + return new FogExp2( this.color, this.density ); + + }; + + FogExp2.prototype.toJSON = function toJSON ( /* meta */ ) { + + return { + type: 'FogExp2', + color: this.color.getHex(), + density: this.density + }; + + }; + + var Fog = function Fog( color, near, far ) { + + Object.defineProperty( this, 'isFog', { value: true } ); + + this.name = ''; + + this.color = new Color( color ); + + this.near = ( near !== undefined ) ? near : 1; + this.far = ( far !== undefined ) ? far : 1000; + + }; + + Fog.prototype.clone = function clone () { + + return new Fog( this.color, this.near, this.far ); + + }; + + Fog.prototype.toJSON = function toJSON ( /* meta */ ) { + + return { + type: 'Fog', + color: this.color.getHex(), + near: this.near, + far: this.far + }; + + }; + + function Scene() { + + Object3D.call(this); + + Object.defineProperty( this, 'isScene', { value: true } ); + + this.type = 'Scene'; + + this.background = null; + this.environment = null; + this.fog = null; + + this.overrideMaterial = null; + + this.autoUpdate = true; // checked by the renderer + + if ( typeof __THREE_DEVTOOLS__ !== 'undefined' ) { + + __THREE_DEVTOOLS__.dispatchEvent( new CustomEvent( 'observe', { detail: this } ) ); // eslint-disable-line no-undef + + } + + } + + Scene.prototype = Object.create( Object3D.prototype ); + Scene.prototype.constructor = Scene; + + Scene.prototype.copy = function copy ( source, recursive ) { + + Object3D.prototype.copy.call( this, source, recursive ); + + if ( source.background !== null ) { this.background = source.background.clone(); } + if ( source.environment !== null ) { this.environment = source.environment.clone(); } + if ( source.fog !== null ) { this.fog = source.fog.clone(); } + + if ( source.overrideMaterial !== null ) { this.overrideMaterial = source.overrideMaterial.clone(); } + + this.autoUpdate = source.autoUpdate; + this.matrixAutoUpdate = source.matrixAutoUpdate; + + return this; + + }; + + Scene.prototype.toJSON = function toJSON ( meta ) { + + var data = Object3D.prototype.toJSON.call( this, meta ); + + if ( this.background !== null ) { data.object.background = this.background.toJSON( meta ); } + if ( this.environment !== null ) { data.object.environment = this.environment.toJSON( meta ); } + if ( this.fog !== null ) { data.object.fog = this.fog.toJSON(); } + + return data; + + }; + + function InterleavedBuffer( array, stride ) { + + this.array = array; + this.stride = stride; + this.count = array !== undefined ? array.length / stride : 0; + + this.usage = StaticDrawUsage; + this.updateRange = { offset: 0, count: - 1 }; + + this.version = 0; + + this.uuid = MathUtils.generateUUID(); + + } + + Object.defineProperty( InterleavedBuffer.prototype, 'needsUpdate', { + + set: function ( value ) { + + if ( value === true ) { this.version ++; } + + } + + } ); + + Object.assign( InterleavedBuffer.prototype, { + + isInterleavedBuffer: true, + + onUploadCallback: function () {}, + + setUsage: function ( value ) { + + this.usage = value; + + return this; + + }, + + copy: function ( source ) { + + this.array = new source.array.constructor( source.array ); + this.count = source.count; + this.stride = source.stride; + this.usage = source.usage; + + return this; + + }, + + copyAt: function ( index1, attribute, index2 ) { + + index1 *= this.stride; + index2 *= attribute.stride; + + for ( var i = 0, l = this.stride; i < l; i ++ ) { + + this.array[ index1 + i ] = attribute.array[ index2 + i ]; + + } + + return this; + + }, + + set: function ( value, offset ) { + + if ( offset === undefined ) { offset = 0; } + + this.array.set( value, offset ); + + return this; + + }, + + clone: function ( data ) { + + if ( data.arrayBuffers === undefined ) { + + data.arrayBuffers = {}; + + } + + if ( this.array.buffer._uuid === undefined ) { + + this.array.buffer._uuid = MathUtils.generateUUID(); + + } + + if ( data.arrayBuffers[ this.array.buffer._uuid ] === undefined ) { + + data.arrayBuffers[ this.array.buffer._uuid ] = this.array.slice( 0 ).buffer; + + } + + var array = new this.array.constructor( data.arrayBuffers[ this.array.buffer._uuid ] ); + + var ib = new InterleavedBuffer( array, this.stride ); + ib.setUsage( this.usage ); + + return ib; + + }, + + onUpload: function ( callback ) { + + this.onUploadCallback = callback; + + return this; + + }, + + toJSON: function ( data ) { + + if ( data.arrayBuffers === undefined ) { + + data.arrayBuffers = {}; + + } + + // generate UUID for array buffer if necessary + + if ( this.array.buffer._uuid === undefined ) { + + this.array.buffer._uuid = MathUtils.generateUUID(); + + } + + if ( data.arrayBuffers[ this.array.buffer._uuid ] === undefined ) { + + data.arrayBuffers[ this.array.buffer._uuid ] = Array.prototype.slice.call( new Uint32Array( this.array.buffer ) ); + + } + + // + + return { + uuid: this.uuid, + buffer: this.array.buffer._uuid, + type: this.array.constructor.name, + stride: this.stride + }; + + } + + } ); + + var _vector$6 = new Vector3(); + + function InterleavedBufferAttribute( interleavedBuffer, itemSize, offset, normalized ) { + + this.name = ''; + + this.data = interleavedBuffer; + this.itemSize = itemSize; + this.offset = offset; + + this.normalized = normalized === true; + + } + + Object.defineProperties( InterleavedBufferAttribute.prototype, { + + count: { + + get: function () { + + return this.data.count; + + } + + }, + + array: { + + get: function () { + + return this.data.array; + + } + + }, + + needsUpdate: { + + set: function ( value ) { + + this.data.needsUpdate = value; + + } + + } + + } ); + + Object.assign( InterleavedBufferAttribute.prototype, { + + isInterleavedBufferAttribute: true, + + applyMatrix4: function ( m ) { + + for ( var i = 0, l = this.data.count; i < l; i ++ ) { + + _vector$6.x = this.getX( i ); + _vector$6.y = this.getY( i ); + _vector$6.z = this.getZ( i ); + + _vector$6.applyMatrix4( m ); + + this.setXYZ( i, _vector$6.x, _vector$6.y, _vector$6.z ); + + } + + return this; + + }, + + setX: function ( index, x ) { + + this.data.array[ index * this.data.stride + this.offset ] = x; + + return this; + + }, + + setY: function ( index, y ) { + + this.data.array[ index * this.data.stride + this.offset + 1 ] = y; + + return this; + + }, + + setZ: function ( index, z ) { + + this.data.array[ index * this.data.stride + this.offset + 2 ] = z; + + return this; + + }, + + setW: function ( index, w ) { + + this.data.array[ index * this.data.stride + this.offset + 3 ] = w; + + return this; + + }, + + getX: function ( index ) { + + return this.data.array[ index * this.data.stride + this.offset ]; + + }, + + getY: function ( index ) { + + return this.data.array[ index * this.data.stride + this.offset + 1 ]; + + }, + + getZ: function ( index ) { + + return this.data.array[ index * this.data.stride + this.offset + 2 ]; + + }, + + getW: function ( index ) { + + return this.data.array[ index * this.data.stride + this.offset + 3 ]; + + }, + + setXY: function ( index, x, y ) { + + index = index * this.data.stride + this.offset; + + this.data.array[ index + 0 ] = x; + this.data.array[ index + 1 ] = y; + + return this; + + }, + + setXYZ: function ( index, x, y, z ) { + + index = index * this.data.stride + this.offset; + + this.data.array[ index + 0 ] = x; + this.data.array[ index + 1 ] = y; + this.data.array[ index + 2 ] = z; + + return this; + + }, + + setXYZW: function ( index, x, y, z, w ) { + + index = index * this.data.stride + this.offset; + + this.data.array[ index + 0 ] = x; + this.data.array[ index + 1 ] = y; + this.data.array[ index + 2 ] = z; + this.data.array[ index + 3 ] = w; + + return this; + + }, + + clone: function ( data ) { + + if ( data === undefined ) { + + console.log( 'THREE.InterleavedBufferAttribute.clone(): Cloning an interlaved buffer attribute will deinterleave buffer data.' ); + + var array = []; + + for ( var i = 0; i < this.count; i ++ ) { + + var index = i * this.data.stride + this.offset; + + for ( var j = 0; j < this.itemSize; j ++ ) { + + array.push( this.data.array[ index + j ] ); + + } + + } + + return new BufferAttribute( new this.array.constructor( array ), this.itemSize, this.normalized ); + + } else { + + if ( data.interleavedBuffers === undefined ) { + + data.interleavedBuffers = {}; + + } + + if ( data.interleavedBuffers[ this.data.uuid ] === undefined ) { + + data.interleavedBuffers[ this.data.uuid ] = this.data.clone( data ); + + } + + return new InterleavedBufferAttribute( data.interleavedBuffers[ this.data.uuid ], this.itemSize, this.offset, this.normalized ); + + } + + }, + + toJSON: function ( data ) { + + if ( data === undefined ) { + + console.log( 'THREE.InterleavedBufferAttribute.toJSON(): Serializing an interlaved buffer attribute will deinterleave buffer data.' ); + + var array = []; + + for ( var i = 0; i < this.count; i ++ ) { + + var index = i * this.data.stride + this.offset; + + for ( var j = 0; j < this.itemSize; j ++ ) { + + array.push( this.data.array[ index + j ] ); + + } + + } + + // deinterleave data and save it as an ordinary buffer attribute for now + + return { + itemSize: this.itemSize, + type: this.array.constructor.name, + array: array, + normalized: this.normalized + }; + + } else { + + // save as true interlaved attribtue + + if ( data.interleavedBuffers === undefined ) { + + data.interleavedBuffers = {}; + + } + + if ( data.interleavedBuffers[ this.data.uuid ] === undefined ) { + + data.interleavedBuffers[ this.data.uuid ] = this.data.toJSON( data ); + + } + + return { + isInterleavedBufferAttribute: true, + itemSize: this.itemSize, + data: this.data.uuid, + offset: this.offset, + normalized: this.normalized + }; + + } + + } + + } ); + + /** + * parameters = { + * color: , + * map: new THREE.Texture( ), + * alphaMap: new THREE.Texture( ), + * rotation: , + * sizeAttenuation: + * } + */ + + function SpriteMaterial( parameters ) { + + Material.call( this ); + + this.type = 'SpriteMaterial'; + + this.color = new Color( 0xffffff ); + + this.map = null; + + this.alphaMap = null; + + this.rotation = 0; + + this.sizeAttenuation = true; + + this.transparent = true; + + this.setValues( parameters ); + + } + + SpriteMaterial.prototype = Object.create( Material.prototype ); + SpriteMaterial.prototype.constructor = SpriteMaterial; + SpriteMaterial.prototype.isSpriteMaterial = true; + + SpriteMaterial.prototype.copy = function ( source ) { + + Material.prototype.copy.call( this, source ); + + this.color.copy( source.color ); + + this.map = source.map; + + this.alphaMap = source.alphaMap; + + this.rotation = source.rotation; + + this.sizeAttenuation = source.sizeAttenuation; + + return this; + + }; + + var _geometry; + + var _intersectPoint = new Vector3(); + var _worldScale = new Vector3(); + var _mvPosition = new Vector3(); + + var _alignedPosition = new Vector2(); + var _rotatedPosition = new Vector2(); + var _viewWorldMatrix = new Matrix4(); + + var _vA$1 = new Vector3(); + var _vB$1 = new Vector3(); + var _vC$1 = new Vector3(); + + var _uvA$1 = new Vector2(); + var _uvB$1 = new Vector2(); + var _uvC$1 = new Vector2(); + + function Sprite( material ) { + + Object3D.call( this ); + + this.type = 'Sprite'; + + if ( _geometry === undefined ) { + + _geometry = new BufferGeometry(); + + var float32Array = new Float32Array( [ + - 0.5, - 0.5, 0, 0, 0, + 0.5, - 0.5, 0, 1, 0, + 0.5, 0.5, 0, 1, 1, + - 0.5, 0.5, 0, 0, 1 + ] ); + + var interleavedBuffer = new InterleavedBuffer( float32Array, 5 ); + + _geometry.setIndex( [ 0, 1, 2, 0, 2, 3 ] ); + _geometry.setAttribute( 'position', new InterleavedBufferAttribute( interleavedBuffer, 3, 0, false ) ); + _geometry.setAttribute( 'uv', new InterleavedBufferAttribute( interleavedBuffer, 2, 3, false ) ); + + } + + this.geometry = _geometry; + this.material = ( material !== undefined ) ? material : new SpriteMaterial(); + + this.center = new Vector2( 0.5, 0.5 ); + + } + + Sprite.prototype = Object.assign( Object.create( Object3D.prototype ), { + + constructor: Sprite, + + isSprite: true, + + raycast: function ( raycaster, intersects ) { + + if ( raycaster.camera === null ) { + + console.error( 'THREE.Sprite: "Raycaster.camera" needs to be set in order to raycast against sprites.' ); + + } + + _worldScale.setFromMatrixScale( this.matrixWorld ); + + _viewWorldMatrix.copy( raycaster.camera.matrixWorld ); + this.modelViewMatrix.multiplyMatrices( raycaster.camera.matrixWorldInverse, this.matrixWorld ); + + _mvPosition.setFromMatrixPosition( this.modelViewMatrix ); + + if ( raycaster.camera.isPerspectiveCamera && this.material.sizeAttenuation === false ) { + + _worldScale.multiplyScalar( - _mvPosition.z ); + + } + + var rotation = this.material.rotation; + var sin, cos; + + if ( rotation !== 0 ) { + + cos = Math.cos( rotation ); + sin = Math.sin( rotation ); + + } + + var center = this.center; + + transformVertex( _vA$1.set( - 0.5, - 0.5, 0 ), _mvPosition, center, _worldScale, sin, cos ); + transformVertex( _vB$1.set( 0.5, - 0.5, 0 ), _mvPosition, center, _worldScale, sin, cos ); + transformVertex( _vC$1.set( 0.5, 0.5, 0 ), _mvPosition, center, _worldScale, sin, cos ); + + _uvA$1.set( 0, 0 ); + _uvB$1.set( 1, 0 ); + _uvC$1.set( 1, 1 ); + + // check first triangle + var intersect = raycaster.ray.intersectTriangle( _vA$1, _vB$1, _vC$1, false, _intersectPoint ); + + if ( intersect === null ) { + + // check second triangle + transformVertex( _vB$1.set( - 0.5, 0.5, 0 ), _mvPosition, center, _worldScale, sin, cos ); + _uvB$1.set( 0, 1 ); + + intersect = raycaster.ray.intersectTriangle( _vA$1, _vC$1, _vB$1, false, _intersectPoint ); + if ( intersect === null ) { + + return; + + } + + } + + var distance = raycaster.ray.origin.distanceTo( _intersectPoint ); + + if ( distance < raycaster.near || distance > raycaster.far ) { return; } + + intersects.push( { + + distance: distance, + point: _intersectPoint.clone(), + uv: Triangle.getUV( _intersectPoint, _vA$1, _vB$1, _vC$1, _uvA$1, _uvB$1, _uvC$1, new Vector2() ), + face: null, + object: this + + } ); + + }, + + copy: function ( source ) { + + Object3D.prototype.copy.call( this, source ); + + if ( source.center !== undefined ) { this.center.copy( source.center ); } + + this.material = source.material; + + return this; + + } + + } ); + + function transformVertex( vertexPosition, mvPosition, center, scale, sin, cos ) { + + // compute position in camera space + _alignedPosition.subVectors( vertexPosition, center ).addScalar( 0.5 ).multiply( scale ); + + // to check if rotation is not zero + if ( sin !== undefined ) { + + _rotatedPosition.x = ( cos * _alignedPosition.x ) - ( sin * _alignedPosition.y ); + _rotatedPosition.y = ( sin * _alignedPosition.x ) + ( cos * _alignedPosition.y ); + + } else { + + _rotatedPosition.copy( _alignedPosition ); + + } + + + vertexPosition.copy( mvPosition ); + vertexPosition.x += _rotatedPosition.x; + vertexPosition.y += _rotatedPosition.y; + + // transform to world space + vertexPosition.applyMatrix4( _viewWorldMatrix ); + + } + + var _v1$4 = new Vector3(); + var _v2$2 = new Vector3(); + + function LOD() { + + Object3D.call( this ); + + this._currentLevel = 0; + + this.type = 'LOD'; + + Object.defineProperties( this, { + levels: { + enumerable: true, + value: [] + } + } ); + + this.autoUpdate = true; + + } + + LOD.prototype = Object.assign( Object.create( Object3D.prototype ), { + + constructor: LOD, + + isLOD: true, + + copy: function ( source ) { + + Object3D.prototype.copy.call( this, source, false ); + + var levels = source.levels; + + for ( var i = 0, l = levels.length; i < l; i ++ ) { + + var level = levels[ i ]; + + this.addLevel( level.object.clone(), level.distance ); + + } + + this.autoUpdate = source.autoUpdate; + + return this; + + }, + + addLevel: function ( object, distance ) { + + if ( distance === undefined ) { distance = 0; } + + distance = Math.abs( distance ); + + var levels = this.levels; + + var l; + + for ( l = 0; l < levels.length; l ++ ) { + + if ( distance < levels[ l ].distance ) { + + break; + + } + + } + + levels.splice( l, 0, { distance: distance, object: object } ); + + this.add( object ); + + return this; + + }, + + getCurrentLevel: function () { + + return this._currentLevel; + + }, + + getObjectForDistance: function ( distance ) { + + var levels = this.levels; + + if ( levels.length > 0 ) { + + var i, l; + + for ( i = 1, l = levels.length; i < l; i ++ ) { + + if ( distance < levels[ i ].distance ) { + + break; + + } + + } + + return levels[ i - 1 ].object; + + } + + return null; + + }, + + raycast: function ( raycaster, intersects ) { + + var levels = this.levels; + + if ( levels.length > 0 ) { + + _v1$4.setFromMatrixPosition( this.matrixWorld ); + + var distance = raycaster.ray.origin.distanceTo( _v1$4 ); + + this.getObjectForDistance( distance ).raycast( raycaster, intersects ); + + } + + }, + + update: function ( camera ) { + + var levels = this.levels; + + if ( levels.length > 1 ) { + + _v1$4.setFromMatrixPosition( camera.matrixWorld ); + _v2$2.setFromMatrixPosition( this.matrixWorld ); + + var distance = _v1$4.distanceTo( _v2$2 ) / camera.zoom; + + levels[ 0 ].object.visible = true; + + var i, l; + + for ( i = 1, l = levels.length; i < l; i ++ ) { + + if ( distance >= levels[ i ].distance ) { + + levels[ i - 1 ].object.visible = false; + levels[ i ].object.visible = true; + + } else { + + break; + + } + + } + + this._currentLevel = i - 1; + + for ( ; i < l; i ++ ) { + + levels[ i ].object.visible = false; + + } + + } + + }, + + toJSON: function ( meta ) { + + var data = Object3D.prototype.toJSON.call( this, meta ); + + if ( this.autoUpdate === false ) { data.object.autoUpdate = false; } + + data.object.levels = []; + + var levels = this.levels; + + for ( var i = 0, l = levels.length; i < l; i ++ ) { + + var level = levels[ i ]; + + data.object.levels.push( { + object: level.object.uuid, + distance: level.distance + } ); + + } + + return data; + + } + + } ); + + function SkinnedMesh( geometry, material ) { + + if ( geometry && geometry.isGeometry ) { + + console.error( 'THREE.SkinnedMesh no longer supports THREE.Geometry. Use THREE.BufferGeometry instead.' ); + + } + + Mesh.call( this, geometry, material ); + + this.type = 'SkinnedMesh'; + + this.bindMode = 'attached'; + this.bindMatrix = new Matrix4(); + this.bindMatrixInverse = new Matrix4(); + + } + + SkinnedMesh.prototype = Object.assign( Object.create( Mesh.prototype ), { + + constructor: SkinnedMesh, + + isSkinnedMesh: true, + + copy: function ( source ) { + + Mesh.prototype.copy.call( this, source ); + + this.bindMode = source.bindMode; + this.bindMatrix.copy( source.bindMatrix ); + this.bindMatrixInverse.copy( source.bindMatrixInverse ); + + this.skeleton = source.skeleton; + + return this; + + }, + + bind: function ( skeleton, bindMatrix ) { + + this.skeleton = skeleton; + + if ( bindMatrix === undefined ) { + + this.updateMatrixWorld( true ); + + this.skeleton.calculateInverses(); + + bindMatrix = this.matrixWorld; + + } + + this.bindMatrix.copy( bindMatrix ); + this.bindMatrixInverse.getInverse( bindMatrix ); + + }, + + pose: function () { + + this.skeleton.pose(); + + }, + + normalizeSkinWeights: function () { + + var vector = new Vector4(); + + var skinWeight = this.geometry.attributes.skinWeight; + + for ( var i = 0, l = skinWeight.count; i < l; i ++ ) { + + vector.x = skinWeight.getX( i ); + vector.y = skinWeight.getY( i ); + vector.z = skinWeight.getZ( i ); + vector.w = skinWeight.getW( i ); + + var scale = 1.0 / vector.manhattanLength(); + + if ( scale !== Infinity ) { + + vector.multiplyScalar( scale ); + + } else { + + vector.set( 1, 0, 0, 0 ); // do something reasonable + + } + + skinWeight.setXYZW( i, vector.x, vector.y, vector.z, vector.w ); + + } + + }, + + updateMatrixWorld: function ( force ) { + + Mesh.prototype.updateMatrixWorld.call( this, force ); + + if ( this.bindMode === 'attached' ) { + + this.bindMatrixInverse.getInverse( this.matrixWorld ); + + } else if ( this.bindMode === 'detached' ) { + + this.bindMatrixInverse.getInverse( this.bindMatrix ); + + } else { + + console.warn( 'THREE.SkinnedMesh: Unrecognized bindMode: ' + this.bindMode ); + + } + + }, + + boneTransform: ( function () { + + var basePosition = new Vector3(); + + var skinIndex = new Vector4(); + var skinWeight = new Vector4(); + + var vector = new Vector3(); + var matrix = new Matrix4(); + + return function ( index, target ) { + + var skeleton = this.skeleton; + var geometry = this.geometry; + + skinIndex.fromBufferAttribute( geometry.attributes.skinIndex, index ); + skinWeight.fromBufferAttribute( geometry.attributes.skinWeight, index ); + + basePosition.fromBufferAttribute( geometry.attributes.position, index ).applyMatrix4( this.bindMatrix ); + + target.set( 0, 0, 0 ); + + for ( var i = 0; i < 4; i ++ ) { + + var weight = skinWeight.getComponent( i ); + + if ( weight !== 0 ) { + + var boneIndex = skinIndex.getComponent( i ); + + matrix.multiplyMatrices( skeleton.bones[ boneIndex ].matrixWorld, skeleton.boneInverses[ boneIndex ] ); + + target.addScaledVector( vector.copy( basePosition ).applyMatrix4( matrix ), weight ); + + } + + } + + return target.applyMatrix4( this.bindMatrixInverse ); + + }; + + }() ) + + } ); + + var _offsetMatrix = new Matrix4(); + var _identityMatrix = new Matrix4(); + + function Skeleton( bones, boneInverses ) { + + // copy the bone array + + bones = bones || []; + + this.bones = bones.slice( 0 ); + this.boneMatrices = new Float32Array( this.bones.length * 16 ); + + this.frame = - 1; + + // use the supplied bone inverses or calculate the inverses + + if ( boneInverses === undefined ) { + + this.calculateInverses(); + + } else { + + if ( this.bones.length === boneInverses.length ) { + + this.boneInverses = boneInverses.slice( 0 ); + + } else { + + console.warn( 'THREE.Skeleton boneInverses is the wrong length.' ); + + this.boneInverses = []; + + for ( var i = 0, il = this.bones.length; i < il; i ++ ) { + + this.boneInverses.push( new Matrix4() ); + + } + + } + + } + + } + + Object.assign( Skeleton.prototype, { + + calculateInverses: function () { + + this.boneInverses = []; + + for ( var i = 0, il = this.bones.length; i < il; i ++ ) { + + var inverse = new Matrix4(); + + if ( this.bones[ i ] ) { + + inverse.getInverse( this.bones[ i ].matrixWorld ); + + } + + this.boneInverses.push( inverse ); + + } + + }, + + pose: function () { + + // recover the bind-time world matrices + + for ( var i = 0, il = this.bones.length; i < il; i ++ ) { + + var bone = this.bones[ i ]; + + if ( bone ) { + + bone.matrixWorld.getInverse( this.boneInverses[ i ] ); + + } + + } + + // compute the local matrices, positions, rotations and scales + + for ( var i$1 = 0, il$1 = this.bones.length; i$1 < il$1; i$1 ++ ) { + + var bone$1 = this.bones[ i$1 ]; + + if ( bone$1 ) { + + if ( bone$1.parent && bone$1.parent.isBone ) { + + bone$1.matrix.getInverse( bone$1.parent.matrixWorld ); + bone$1.matrix.multiply( bone$1.matrixWorld ); + + } else { + + bone$1.matrix.copy( bone$1.matrixWorld ); + + } + + bone$1.matrix.decompose( bone$1.position, bone$1.quaternion, bone$1.scale ); + + } + + } + + }, + + update: function () { + + var bones = this.bones; + var boneInverses = this.boneInverses; + var boneMatrices = this.boneMatrices; + var boneTexture = this.boneTexture; + + // flatten bone matrices to array + + for ( var i = 0, il = bones.length; i < il; i ++ ) { + + // compute the offset between the current and the original transform + + var matrix = bones[ i ] ? bones[ i ].matrixWorld : _identityMatrix; + + _offsetMatrix.multiplyMatrices( matrix, boneInverses[ i ] ); + _offsetMatrix.toArray( boneMatrices, i * 16 ); + + } + + if ( boneTexture !== undefined ) { + + boneTexture.needsUpdate = true; + + } + + }, + + clone: function () { + + return new Skeleton( this.bones, this.boneInverses ); + + }, + + getBoneByName: function ( name ) { + + for ( var i = 0, il = this.bones.length; i < il; i ++ ) { + + var bone = this.bones[ i ]; + + if ( bone.name === name ) { + + return bone; + + } + + } + + return undefined; + + }, + + dispose: function ( ) { + + if ( this.boneTexture ) { + + this.boneTexture.dispose(); + + this.boneTexture = undefined; + + } + + } + + } ); + + function Bone() { + + Object3D.call( this ); + + this.type = 'Bone'; + + } + + Bone.prototype = Object.assign( Object.create( Object3D.prototype ), { + + constructor: Bone, + + isBone: true + + } ); + + var _instanceLocalMatrix = new Matrix4(); + var _instanceWorldMatrix = new Matrix4(); + + var _instanceIntersects = []; + + var _mesh = new Mesh(); + + function InstancedMesh( geometry, material, count ) { + + Mesh.call( this, geometry, material ); + + this.instanceMatrix = new BufferAttribute( new Float32Array( count * 16 ), 16 ); + this.instanceColor = null; + + this.count = count; + + this.frustumCulled = false; + + } + + InstancedMesh.prototype = Object.assign( Object.create( Mesh.prototype ), { + + constructor: InstancedMesh, + + isInstancedMesh: true, + + copy: function ( source ) { + + Mesh.prototype.copy.call( this, source ); + + this.instanceMatrix.copy( source.instanceMatrix ); + this.count = source.count; + + return this; + + }, + + setColorAt: function ( index, color ) { + + if ( this.instanceColor === null ) { + + this.instanceColor = new BufferAttribute( new Float32Array( this.count * 3 ), 3 ); + + } + + color.toArray( this.instanceColor.array, index * 3 ); + + }, + + getMatrixAt: function ( index, matrix ) { + + matrix.fromArray( this.instanceMatrix.array, index * 16 ); + + }, + + raycast: function ( raycaster, intersects ) { + + var matrixWorld = this.matrixWorld; + var raycastTimes = this.count; + + _mesh.geometry = this.geometry; + _mesh.material = this.material; + + if ( _mesh.material === undefined ) { return; } + + for ( var instanceId = 0; instanceId < raycastTimes; instanceId ++ ) { + + // calculate the world matrix for each instance + + this.getMatrixAt( instanceId, _instanceLocalMatrix ); + + _instanceWorldMatrix.multiplyMatrices( matrixWorld, _instanceLocalMatrix ); + + // the mesh represents this single instance + + _mesh.matrixWorld = _instanceWorldMatrix; + + _mesh.raycast( raycaster, _instanceIntersects ); + + // process the result of raycast + + for ( var i = 0, l = _instanceIntersects.length; i < l; i ++ ) { + + var intersect = _instanceIntersects[ i ]; + intersect.instanceId = instanceId; + intersect.object = this; + intersects.push( intersect ); + + } + + _instanceIntersects.length = 0; + + } + + }, + + setMatrixAt: function ( index, matrix ) { + + matrix.toArray( this.instanceMatrix.array, index * 16 ); + + }, + + updateMorphTargets: function () { + + } + + } ); + + /** + * parameters = { + * color: , + * opacity: , + * + * linewidth: , + * linecap: "round", + * linejoin: "round" + * } + */ + + function LineBasicMaterial( parameters ) { + + Material.call( this ); + + this.type = 'LineBasicMaterial'; + + this.color = new Color( 0xffffff ); + + this.linewidth = 1; + this.linecap = 'round'; + this.linejoin = 'round'; + + this.morphTargets = false; + + this.setValues( parameters ); + + } + + LineBasicMaterial.prototype = Object.create( Material.prototype ); + LineBasicMaterial.prototype.constructor = LineBasicMaterial; + + LineBasicMaterial.prototype.isLineBasicMaterial = true; + + LineBasicMaterial.prototype.copy = function ( source ) { + + Material.prototype.copy.call( this, source ); + + this.color.copy( source.color ); + + this.linewidth = source.linewidth; + this.linecap = source.linecap; + this.linejoin = source.linejoin; + + this.morphTargets = source.morphTargets; + + return this; + + }; + + var _start = new Vector3(); + var _end = new Vector3(); + var _inverseMatrix$1 = new Matrix4(); + var _ray$1 = new Ray(); + var _sphere$2 = new Sphere(); + + function Line( geometry, material, mode ) { + + if ( mode === 1 ) { + + console.error( 'THREE.Line: parameter THREE.LinePieces no longer supported. Use THREE.LineSegments instead.' ); + + } + + Object3D.call( this ); + + this.type = 'Line'; + + this.geometry = geometry !== undefined ? geometry : new BufferGeometry(); + this.material = material !== undefined ? material : new LineBasicMaterial(); + + this.updateMorphTargets(); + + } + + Line.prototype = Object.assign( Object.create( Object3D.prototype ), { + + constructor: Line, + + isLine: true, + + copy: function ( source ) { + + Object3D.prototype.copy.call( this, source ); + + this.material = source.material; + this.geometry = source.geometry; + + return this; + + }, + + computeLineDistances: function () { + + var geometry = this.geometry; + + if ( geometry.isBufferGeometry ) { + + // we assume non-indexed geometry + + if ( geometry.index === null ) { + + var positionAttribute = geometry.attributes.position; + var lineDistances = [ 0 ]; + + for ( var i = 1, l = positionAttribute.count; i < l; i ++ ) { + + _start.fromBufferAttribute( positionAttribute, i - 1 ); + _end.fromBufferAttribute( positionAttribute, i ); + + lineDistances[ i ] = lineDistances[ i - 1 ]; + lineDistances[ i ] += _start.distanceTo( _end ); + + } + + geometry.setAttribute( 'lineDistance', new Float32BufferAttribute( lineDistances, 1 ) ); + + } else { + + console.warn( 'THREE.Line.computeLineDistances(): Computation only possible with non-indexed BufferGeometry.' ); + + } + + } else if ( geometry.isGeometry ) { + + var vertices = geometry.vertices; + var lineDistances$1 = geometry.lineDistances; + + lineDistances$1[ 0 ] = 0; + + for ( var i$1 = 1, l$1 = vertices.length; i$1 < l$1; i$1 ++ ) { + + lineDistances$1[ i$1 ] = lineDistances$1[ i$1 - 1 ]; + lineDistances$1[ i$1 ] += vertices[ i$1 - 1 ].distanceTo( vertices[ i$1 ] ); + + } + + } + + return this; + + }, + + raycast: function ( raycaster, intersects ) { + + var geometry = this.geometry; + var matrixWorld = this.matrixWorld; + var threshold = raycaster.params.Line.threshold; + + // Checking boundingSphere distance to ray + + if ( geometry.boundingSphere === null ) { geometry.computeBoundingSphere(); } + + _sphere$2.copy( geometry.boundingSphere ); + _sphere$2.applyMatrix4( matrixWorld ); + _sphere$2.radius += threshold; + + if ( raycaster.ray.intersectsSphere( _sphere$2 ) === false ) { return; } + + // + + _inverseMatrix$1.getInverse( matrixWorld ); + _ray$1.copy( raycaster.ray ).applyMatrix4( _inverseMatrix$1 ); + + var localThreshold = threshold / ( ( this.scale.x + this.scale.y + this.scale.z ) / 3 ); + var localThresholdSq = localThreshold * localThreshold; + + var vStart = new Vector3(); + var vEnd = new Vector3(); + var interSegment = new Vector3(); + var interRay = new Vector3(); + var step = ( this && this.isLineSegments ) ? 2 : 1; + + if ( geometry.isBufferGeometry ) { + + var index = geometry.index; + var attributes = geometry.attributes; + var positions = attributes.position.array; + + if ( index !== null ) { + + var indices = index.array; + + for ( var i = 0, l = indices.length - 1; i < l; i += step ) { + + var a = indices[ i ]; + var b = indices[ i + 1 ]; + + vStart.fromArray( positions, a * 3 ); + vEnd.fromArray( positions, b * 3 ); + + var distSq = _ray$1.distanceSqToSegment( vStart, vEnd, interRay, interSegment ); + + if ( distSq > localThresholdSq ) { continue; } + + interRay.applyMatrix4( this.matrixWorld ); //Move back to world space for distance calculation + + var distance = raycaster.ray.origin.distanceTo( interRay ); + + if ( distance < raycaster.near || distance > raycaster.far ) { continue; } + + intersects.push( { + + distance: distance, + // What do we want? intersection point on the ray or on the segment?? + // point: raycaster.ray.at( distance ), + point: interSegment.clone().applyMatrix4( this.matrixWorld ), + index: i, + face: null, + faceIndex: null, + object: this + + } ); + + } + + } else { + + for ( var i$1 = 0, l$1 = positions.length / 3 - 1; i$1 < l$1; i$1 += step ) { + + vStart.fromArray( positions, 3 * i$1 ); + vEnd.fromArray( positions, 3 * i$1 + 3 ); + + var distSq$1 = _ray$1.distanceSqToSegment( vStart, vEnd, interRay, interSegment ); + + if ( distSq$1 > localThresholdSq ) { continue; } + + interRay.applyMatrix4( this.matrixWorld ); //Move back to world space for distance calculation + + var distance$1 = raycaster.ray.origin.distanceTo( interRay ); + + if ( distance$1 < raycaster.near || distance$1 > raycaster.far ) { continue; } + + intersects.push( { + + distance: distance$1, + // What do we want? intersection point on the ray or on the segment?? + // point: raycaster.ray.at( distance ), + point: interSegment.clone().applyMatrix4( this.matrixWorld ), + index: i$1, + face: null, + faceIndex: null, + object: this + + } ); + + } + + } + + } else if ( geometry.isGeometry ) { + + var vertices = geometry.vertices; + var nbVertices = vertices.length; + + for ( var i$2 = 0; i$2 < nbVertices - 1; i$2 += step ) { + + var distSq$2 = _ray$1.distanceSqToSegment( vertices[ i$2 ], vertices[ i$2 + 1 ], interRay, interSegment ); + + if ( distSq$2 > localThresholdSq ) { continue; } + + interRay.applyMatrix4( this.matrixWorld ); //Move back to world space for distance calculation + + var distance$2 = raycaster.ray.origin.distanceTo( interRay ); + + if ( distance$2 < raycaster.near || distance$2 > raycaster.far ) { continue; } + + intersects.push( { + + distance: distance$2, + // What do we want? intersection point on the ray or on the segment?? + // point: raycaster.ray.at( distance ), + point: interSegment.clone().applyMatrix4( this.matrixWorld ), + index: i$2, + face: null, + faceIndex: null, + object: this + + } ); + + } + + } + + }, + + updateMorphTargets: function () { + + var geometry = this.geometry; + + if ( geometry.isBufferGeometry ) { + + var morphAttributes = geometry.morphAttributes; + var keys = Object.keys( morphAttributes ); + + if ( keys.length > 0 ) { + + var morphAttribute = morphAttributes[ keys[ 0 ] ]; + + if ( morphAttribute !== undefined ) { + + this.morphTargetInfluences = []; + this.morphTargetDictionary = {}; + + for ( var m = 0, ml = morphAttribute.length; m < ml; m ++ ) { + + var name = morphAttribute[ m ].name || String( m ); + + this.morphTargetInfluences.push( 0 ); + this.morphTargetDictionary[ name ] = m; + + } + + } + + } + + } else { + + var morphTargets = geometry.morphTargets; + + if ( morphTargets !== undefined && morphTargets.length > 0 ) { + + console.error( 'THREE.Line.updateMorphTargets() does not support THREE.Geometry. Use THREE.BufferGeometry instead.' ); + + } + + } + + } + + } ); + + var _start$1 = new Vector3(); + var _end$1 = new Vector3(); + + function LineSegments( geometry, material ) { + + Line.call( this, geometry, material ); + + this.type = 'LineSegments'; + + } + + LineSegments.prototype = Object.assign( Object.create( Line.prototype ), { + + constructor: LineSegments, + + isLineSegments: true, + + computeLineDistances: function () { + + var geometry = this.geometry; + + if ( geometry.isBufferGeometry ) { + + // we assume non-indexed geometry + + if ( geometry.index === null ) { + + var positionAttribute = geometry.attributes.position; + var lineDistances = []; + + for ( var i = 0, l = positionAttribute.count; i < l; i += 2 ) { + + _start$1.fromBufferAttribute( positionAttribute, i ); + _end$1.fromBufferAttribute( positionAttribute, i + 1 ); + + lineDistances[ i ] = ( i === 0 ) ? 0 : lineDistances[ i - 1 ]; + lineDistances[ i + 1 ] = lineDistances[ i ] + _start$1.distanceTo( _end$1 ); + + } + + geometry.setAttribute( 'lineDistance', new Float32BufferAttribute( lineDistances, 1 ) ); + + } else { + + console.warn( 'THREE.LineSegments.computeLineDistances(): Computation only possible with non-indexed BufferGeometry.' ); + + } + + } else if ( geometry.isGeometry ) { + + var vertices = geometry.vertices; + var lineDistances$1 = geometry.lineDistances; + + for ( var i$1 = 0, l$1 = vertices.length; i$1 < l$1; i$1 += 2 ) { + + _start$1.copy( vertices[ i$1 ] ); + _end$1.copy( vertices[ i$1 + 1 ] ); + + lineDistances$1[ i$1 ] = ( i$1 === 0 ) ? 0 : lineDistances$1[ i$1 - 1 ]; + lineDistances$1[ i$1 + 1 ] = lineDistances$1[ i$1 ] + _start$1.distanceTo( _end$1 ); + + } + + } + + return this; + + } + + } ); + + function LineLoop( geometry, material ) { + + Line.call( this, geometry, material ); + + this.type = 'LineLoop'; + + } + + LineLoop.prototype = Object.assign( Object.create( Line.prototype ), { + + constructor: LineLoop, + + isLineLoop: true, + + } ); + + /** + * parameters = { + * color: , + * opacity: , + * map: new THREE.Texture( ), + * alphaMap: new THREE.Texture( ), + * + * size: , + * sizeAttenuation: + * + * morphTargets: + * } + */ + + function PointsMaterial( parameters ) { + + Material.call( this ); + + this.type = 'PointsMaterial'; + + this.color = new Color( 0xffffff ); + + this.map = null; + + this.alphaMap = null; + + this.size = 1; + this.sizeAttenuation = true; + + this.morphTargets = false; + + this.setValues( parameters ); + + } + + PointsMaterial.prototype = Object.create( Material.prototype ); + PointsMaterial.prototype.constructor = PointsMaterial; + + PointsMaterial.prototype.isPointsMaterial = true; + + PointsMaterial.prototype.copy = function ( source ) { + + Material.prototype.copy.call( this, source ); + + this.color.copy( source.color ); + + this.map = source.map; + + this.alphaMap = source.alphaMap; + + this.size = source.size; + this.sizeAttenuation = source.sizeAttenuation; + + this.morphTargets = source.morphTargets; + + return this; + + }; + + var _inverseMatrix$2 = new Matrix4(); + var _ray$2 = new Ray(); + var _sphere$3 = new Sphere(); + var _position$1 = new Vector3(); + + function Points( geometry, material ) { + + Object3D.call( this ); + + this.type = 'Points'; + + this.geometry = geometry !== undefined ? geometry : new BufferGeometry(); + this.material = material !== undefined ? material : new PointsMaterial(); + + this.updateMorphTargets(); + + } + + Points.prototype = Object.assign( Object.create( Object3D.prototype ), { + + constructor: Points, + + isPoints: true, + + copy: function ( source ) { + + Object3D.prototype.copy.call( this, source ); + + this.material = source.material; + this.geometry = source.geometry; + + return this; + + }, + + raycast: function ( raycaster, intersects ) { + + var geometry = this.geometry; + var matrixWorld = this.matrixWorld; + var threshold = raycaster.params.Points.threshold; + + // Checking boundingSphere distance to ray + + if ( geometry.boundingSphere === null ) { geometry.computeBoundingSphere(); } + + _sphere$3.copy( geometry.boundingSphere ); + _sphere$3.applyMatrix4( matrixWorld ); + _sphere$3.radius += threshold; + + if ( raycaster.ray.intersectsSphere( _sphere$3 ) === false ) { return; } + + // + + _inverseMatrix$2.getInverse( matrixWorld ); + _ray$2.copy( raycaster.ray ).applyMatrix4( _inverseMatrix$2 ); + + var localThreshold = threshold / ( ( this.scale.x + this.scale.y + this.scale.z ) / 3 ); + var localThresholdSq = localThreshold * localThreshold; + + if ( geometry.isBufferGeometry ) { + + var index = geometry.index; + var attributes = geometry.attributes; + var positions = attributes.position.array; + + if ( index !== null ) { + + var indices = index.array; + + for ( var i = 0, il = indices.length; i < il; i ++ ) { + + var a = indices[ i ]; + + _position$1.fromArray( positions, a * 3 ); + + testPoint( _position$1, a, localThresholdSq, matrixWorld, raycaster, intersects, this ); + + } + + } else { + + for ( var i$1 = 0, l = positions.length / 3; i$1 < l; i$1 ++ ) { + + _position$1.fromArray( positions, i$1 * 3 ); + + testPoint( _position$1, i$1, localThresholdSq, matrixWorld, raycaster, intersects, this ); + + } + + } + + } else { + + var vertices = geometry.vertices; + + for ( var i$2 = 0, l$1 = vertices.length; i$2 < l$1; i$2 ++ ) { + + testPoint( vertices[ i$2 ], i$2, localThresholdSq, matrixWorld, raycaster, intersects, this ); + + } + + } + + }, + + updateMorphTargets: function () { + + var geometry = this.geometry; + + if ( geometry.isBufferGeometry ) { + + var morphAttributes = geometry.morphAttributes; + var keys = Object.keys( morphAttributes ); + + if ( keys.length > 0 ) { + + var morphAttribute = morphAttributes[ keys[ 0 ] ]; + + if ( morphAttribute !== undefined ) { + + this.morphTargetInfluences = []; + this.morphTargetDictionary = {}; + + for ( var m = 0, ml = morphAttribute.length; m < ml; m ++ ) { + + var name = morphAttribute[ m ].name || String( m ); + + this.morphTargetInfluences.push( 0 ); + this.morphTargetDictionary[ name ] = m; + + } + + } + + } + + } else { + + var morphTargets = geometry.morphTargets; + + if ( morphTargets !== undefined && morphTargets.length > 0 ) { + + console.error( 'THREE.Points.updateMorphTargets() does not support THREE.Geometry. Use THREE.BufferGeometry instead.' ); + + } + + } + + } + + } ); + + function testPoint( point, index, localThresholdSq, matrixWorld, raycaster, intersects, object ) { + + var rayPointDistanceSq = _ray$2.distanceSqToPoint( point ); + + if ( rayPointDistanceSq < localThresholdSq ) { + + var intersectPoint = new Vector3(); + + _ray$2.closestPointToPoint( point, intersectPoint ); + intersectPoint.applyMatrix4( matrixWorld ); + + var distance = raycaster.ray.origin.distanceTo( intersectPoint ); + + if ( distance < raycaster.near || distance > raycaster.far ) { return; } + + intersects.push( { + + distance: distance, + distanceToRay: Math.sqrt( rayPointDistanceSq ), + point: intersectPoint, + index: index, + face: null, + object: object + + } ); + + } + + } + + function VideoTexture( video, mapping, wrapS, wrapT, magFilter, minFilter, format, type, anisotropy ) { + + Texture.call( this, video, mapping, wrapS, wrapT, magFilter, minFilter, format, type, anisotropy ); + + this.format = format !== undefined ? format : RGBFormat; + + this.minFilter = minFilter !== undefined ? minFilter : LinearFilter; + this.magFilter = magFilter !== undefined ? magFilter : LinearFilter; + + this.generateMipmaps = false; + + var scope = this; + + function updateVideo() { + + scope.needsUpdate = true; + video.requestVideoFrameCallback( updateVideo ); + + } + + if ( 'requestVideoFrameCallback' in video ) { + + video.requestVideoFrameCallback( updateVideo ); + + } + + } + + VideoTexture.prototype = Object.assign( Object.create( Texture.prototype ), { + + constructor: VideoTexture, + + isVideoTexture: true, + + update: function () { + + var video = this.image; + var hasVideoFrameCallback = 'requestVideoFrameCallback' in video; + + if ( hasVideoFrameCallback === false && video.readyState >= video.HAVE_CURRENT_DATA ) { + + this.needsUpdate = true; + + } + + } + + } ); + + function CompressedTexture( mipmaps, width, height, format, type, mapping, wrapS, wrapT, magFilter, minFilter, anisotropy, encoding ) { + + Texture.call( this, null, mapping, wrapS, wrapT, magFilter, minFilter, format, type, anisotropy, encoding ); + + this.image = { width: width, height: height }; + this.mipmaps = mipmaps; + + // no flipping for cube textures + // (also flipping doesn't work for compressed textures ) + + this.flipY = false; + + // can't generate mipmaps for compressed textures + // mips must be embedded in DDS files + + this.generateMipmaps = false; + + } + + CompressedTexture.prototype = Object.create( Texture.prototype ); + CompressedTexture.prototype.constructor = CompressedTexture; + + CompressedTexture.prototype.isCompressedTexture = true; + + function CanvasTexture( canvas, mapping, wrapS, wrapT, magFilter, minFilter, format, type, anisotropy ) { + + Texture.call( this, canvas, mapping, wrapS, wrapT, magFilter, minFilter, format, type, anisotropy ); + + this.needsUpdate = true; + + } + + CanvasTexture.prototype = Object.create( Texture.prototype ); + CanvasTexture.prototype.constructor = CanvasTexture; + CanvasTexture.prototype.isCanvasTexture = true; + + function DepthTexture( width, height, type, mapping, wrapS, wrapT, magFilter, minFilter, anisotropy, format ) { + + format = format !== undefined ? format : DepthFormat; + + if ( format !== DepthFormat && format !== DepthStencilFormat ) { + + throw new Error( 'DepthTexture format must be either THREE.DepthFormat or THREE.DepthStencilFormat' ); + + } + + if ( type === undefined && format === DepthFormat ) { type = UnsignedShortType; } + if ( type === undefined && format === DepthStencilFormat ) { type = UnsignedInt248Type; } + + Texture.call( this, null, mapping, wrapS, wrapT, magFilter, minFilter, format, type, anisotropy ); + + this.image = { width: width, height: height }; + + this.magFilter = magFilter !== undefined ? magFilter : NearestFilter; + this.minFilter = minFilter !== undefined ? minFilter : NearestFilter; + + this.flipY = false; + this.generateMipmaps = false; + + } + + DepthTexture.prototype = Object.create( Texture.prototype ); + DepthTexture.prototype.constructor = DepthTexture; + DepthTexture.prototype.isDepthTexture = true; + + function WireframeGeometry( geometry ) { + + BufferGeometry.call(this); + this.type = 'WireframeGeometry'; + + // buffer + + var vertices = []; + + // helper variables + + var edge = [ 0, 0 ], edges = {}; + var keys = [ 'a', 'b', 'c' ]; + + // different logic for Geometry and BufferGeometry + + if ( geometry && geometry.isGeometry ) { + + // create a data structure that contains all edges without duplicates + + var faces = geometry.faces; + + for ( var i = 0, l = faces.length; i < l; i ++ ) { + + var face = faces[ i ]; + + for ( var j = 0; j < 3; j ++ ) { + + var edge1 = face[ keys[ j ] ]; + var edge2 = face[ keys[ ( j + 1 ) % 3 ] ]; + edge[ 0 ] = Math.min( edge1, edge2 ); // sorting prevents duplicates + edge[ 1 ] = Math.max( edge1, edge2 ); + + var key = edge[ 0 ] + ',' + edge[ 1 ]; + + if ( edges[ key ] === undefined ) { + + edges[ key ] = { index1: edge[ 0 ], index2: edge[ 1 ] }; + + } + + } + + } + + // generate vertices + + for ( var key$1 in edges ) { + + var e = edges[ key$1 ]; + + var vertex = geometry.vertices[ e.index1 ]; + vertices.push( vertex.x, vertex.y, vertex.z ); + + vertex = geometry.vertices[ e.index2 ]; + vertices.push( vertex.x, vertex.y, vertex.z ); + + } + + } else if ( geometry && geometry.isBufferGeometry ) { + + var vertex$1 = new Vector3(); + + if ( geometry.index !== null ) { + + // indexed BufferGeometry + + var position = geometry.attributes.position; + var indices = geometry.index; + var groups = geometry.groups; + + if ( groups.length === 0 ) { + + groups = [ { start: 0, count: indices.count, materialIndex: 0 } ]; + + } + + // create a data structure that contains all eges without duplicates + + for ( var o = 0, ol = groups.length; o < ol; ++ o ) { + + var group = groups[ o ]; + + var start = group.start; + var count = group.count; + + for ( var i$1 = start, l$1 = ( start + count ); i$1 < l$1; i$1 += 3 ) { + + for ( var j$1 = 0; j$1 < 3; j$1 ++ ) { + + var edge1$1 = indices.getX( i$1 + j$1 ); + var edge2$1 = indices.getX( i$1 + ( j$1 + 1 ) % 3 ); + edge[ 0 ] = Math.min( edge1$1, edge2$1 ); // sorting prevents duplicates + edge[ 1 ] = Math.max( edge1$1, edge2$1 ); + + var key$2 = edge[ 0 ] + ',' + edge[ 1 ]; + + if ( edges[ key$2 ] === undefined ) { + + edges[ key$2 ] = { index1: edge[ 0 ], index2: edge[ 1 ] }; + + } + + } + + } + + } + + // generate vertices + + for ( var key$3 in edges ) { + + var e$1 = edges[ key$3 ]; + + vertex$1.fromBufferAttribute( position, e$1.index1 ); + vertices.push( vertex$1.x, vertex$1.y, vertex$1.z ); + + vertex$1.fromBufferAttribute( position, e$1.index2 ); + vertices.push( vertex$1.x, vertex$1.y, vertex$1.z ); + + } + + } else { + + // non-indexed BufferGeometry + + var position$1 = geometry.attributes.position; + + for ( var i$2 = 0, l$2 = ( position$1.count / 3 ); i$2 < l$2; i$2 ++ ) { + + for ( var j$2 = 0; j$2 < 3; j$2 ++ ) { + + // three edges per triangle, an edge is represented as (index1, index2) + // e.g. the first triangle has the following edges: (0,1),(1,2),(2,0) + + var index1 = 3 * i$2 + j$2; + vertex$1.fromBufferAttribute( position$1, index1 ); + vertices.push( vertex$1.x, vertex$1.y, vertex$1.z ); + + var index2 = 3 * i$2 + ( ( j$2 + 1 ) % 3 ); + vertex$1.fromBufferAttribute( position$1, index2 ); + vertices.push( vertex$1.x, vertex$1.y, vertex$1.z ); + + } + + } + + } + + } + + // build geometry + + this.setAttribute( 'position', new Float32BufferAttribute( vertices, 3 ) ); + + } + + WireframeGeometry.prototype = Object.create( BufferGeometry.prototype ); + WireframeGeometry.prototype.constructor = WireframeGeometry; + + /** + * Parametric Surfaces Geometry + * based on the brilliant article by @prideout https://prideout.net/blog/old/blog/index.html@p=44.html + */ + + // ParametricGeometry + + function ParametricGeometry( func, slices, stacks ) { + + Geometry.call( this ); + + this.type = 'ParametricGeometry'; + + this.parameters = { + func: func, + slices: slices, + stacks: stacks + }; + + this.fromBufferGeometry( new ParametricBufferGeometry( func, slices, stacks ) ); + this.mergeVertices(); + + } + + ParametricGeometry.prototype = Object.create( Geometry.prototype ); + ParametricGeometry.prototype.constructor = ParametricGeometry; + + // ParametricBufferGeometry + + function ParametricBufferGeometry( func, slices, stacks ) { + + BufferGeometry.call( this ); + + this.type = 'ParametricBufferGeometry'; + + this.parameters = { + func: func, + slices: slices, + stacks: stacks + }; + + // buffers + + var indices = []; + var vertices = []; + var normals = []; + var uvs = []; + + var EPS = 0.00001; + + var normal = new Vector3(); + + var p0 = new Vector3(), p1 = new Vector3(); + var pu = new Vector3(), pv = new Vector3(); + + if ( func.length < 3 ) { + + console.error( 'THREE.ParametricGeometry: Function must now modify a Vector3 as third parameter.' ); + + } + + // generate vertices, normals and uvs + + var sliceCount = slices + 1; + + for ( var i = 0; i <= stacks; i ++ ) { + + var v = i / stacks; + + for ( var j = 0; j <= slices; j ++ ) { + + var u = j / slices; + + // vertex + + func( u, v, p0 ); + vertices.push( p0.x, p0.y, p0.z ); + + // normal + + // approximate tangent vectors via finite differences + + if ( u - EPS >= 0 ) { + + func( u - EPS, v, p1 ); + pu.subVectors( p0, p1 ); + + } else { + + func( u + EPS, v, p1 ); + pu.subVectors( p1, p0 ); + + } + + if ( v - EPS >= 0 ) { + + func( u, v - EPS, p1 ); + pv.subVectors( p0, p1 ); + + } else { + + func( u, v + EPS, p1 ); + pv.subVectors( p1, p0 ); + + } + + // cross product of tangent vectors returns surface normal + + normal.crossVectors( pu, pv ).normalize(); + normals.push( normal.x, normal.y, normal.z ); + + // uv + + uvs.push( u, v ); + + } + + } + + // generate indices + + for ( var i$1 = 0; i$1 < stacks; i$1 ++ ) { + + for ( var j$1 = 0; j$1 < slices; j$1 ++ ) { + + var a = i$1 * sliceCount + j$1; + var b = i$1 * sliceCount + j$1 + 1; + var c = ( i$1 + 1 ) * sliceCount + j$1 + 1; + var d = ( i$1 + 1 ) * sliceCount + j$1; + + // faces one and two + + indices.push( a, b, d ); + indices.push( b, c, d ); + + } + + } + + // build geometry + + this.setIndex( indices ); + this.setAttribute( 'position', new Float32BufferAttribute( vertices, 3 ) ); + this.setAttribute( 'normal', new Float32BufferAttribute( normals, 3 ) ); + this.setAttribute( 'uv', new Float32BufferAttribute( uvs, 2 ) ); + + } + + ParametricBufferGeometry.prototype = Object.create( BufferGeometry.prototype ); + ParametricBufferGeometry.prototype.constructor = ParametricBufferGeometry; + + // PolyhedronGeometry + + function PolyhedronGeometry( vertices, indices, radius, detail ) { + + Geometry.call(this); + + this.type = 'PolyhedronGeometry'; + + this.parameters = { + vertices: vertices, + indices: indices, + radius: radius, + detail: detail + }; + + this.fromBufferGeometry( new PolyhedronBufferGeometry( vertices, indices, radius, detail ) ); + this.mergeVertices(); + + } + + PolyhedronGeometry.prototype = Object.create( Geometry.prototype ); + PolyhedronGeometry.prototype.constructor = PolyhedronGeometry; + + // PolyhedronBufferGeometry + + function PolyhedronBufferGeometry( vertices, indices, radius, detail ) { + + BufferGeometry.call(this); + + this.type = 'PolyhedronBufferGeometry'; + + this.parameters = { + vertices: vertices, + indices: indices, + radius: radius, + detail: detail + }; + + radius = radius || 1; + detail = detail || 0; + + // default buffer data + + var vertexBuffer = []; + var uvBuffer = []; + + // the subdivision creates the vertex buffer data + + subdivide( detail ); + + // all vertices should lie on a conceptual sphere with a given radius + + applyRadius( radius ); + + // finally, create the uv data + + generateUVs(); + + // build non-indexed geometry + + this.setAttribute( 'position', new Float32BufferAttribute( vertexBuffer, 3 ) ); + this.setAttribute( 'normal', new Float32BufferAttribute( vertexBuffer.slice(), 3 ) ); + this.setAttribute( 'uv', new Float32BufferAttribute( uvBuffer, 2 ) ); + + if ( detail === 0 ) { + + this.computeVertexNormals(); // flat normals + + } else { + + this.normalizeNormals(); // smooth normals + + } + + // helper functions + + function subdivide( detail ) { + + var a = new Vector3(); + var b = new Vector3(); + var c = new Vector3(); + + // iterate over all faces and apply a subdivison with the given detail value + + for ( var i = 0; i < indices.length; i += 3 ) { + + // get the vertices of the face + + getVertexByIndex( indices[ i + 0 ], a ); + getVertexByIndex( indices[ i + 1 ], b ); + getVertexByIndex( indices[ i + 2 ], c ); + + // perform subdivision + + subdivideFace( a, b, c, detail ); + + } + + } + + function subdivideFace( a, b, c, detail ) { + + var cols = Math.pow( 2, detail ); + + // we use this multidimensional array as a data structure for creating the subdivision + + var v = []; + + // construct all of the vertices for this subdivision + + for ( var i = 0; i <= cols; i ++ ) { + + v[ i ] = []; + + var aj = a.clone().lerp( c, i / cols ); + var bj = b.clone().lerp( c, i / cols ); + + var rows = cols - i; + + for ( var j = 0; j <= rows; j ++ ) { + + if ( j === 0 && i === cols ) { + + v[ i ][ j ] = aj; + + } else { + + v[ i ][ j ] = aj.clone().lerp( bj, j / rows ); + + } + + } + + } + + // construct all of the faces + + for ( var i$1 = 0; i$1 < cols; i$1 ++ ) { + + for ( var j$1 = 0; j$1 < 2 * ( cols - i$1 ) - 1; j$1 ++ ) { + + var k = Math.floor( j$1 / 2 ); + + if ( j$1 % 2 === 0 ) { + + pushVertex( v[ i$1 ][ k + 1 ] ); + pushVertex( v[ i$1 + 1 ][ k ] ); + pushVertex( v[ i$1 ][ k ] ); + + } else { + + pushVertex( v[ i$1 ][ k + 1 ] ); + pushVertex( v[ i$1 + 1 ][ k + 1 ] ); + pushVertex( v[ i$1 + 1 ][ k ] ); + + } + + } + + } + + } + + function applyRadius( radius ) { + + var vertex = new Vector3(); + + // iterate over the entire buffer and apply the radius to each vertex + + for ( var i = 0; i < vertexBuffer.length; i += 3 ) { + + vertex.x = vertexBuffer[ i + 0 ]; + vertex.y = vertexBuffer[ i + 1 ]; + vertex.z = vertexBuffer[ i + 2 ]; + + vertex.normalize().multiplyScalar( radius ); + + vertexBuffer[ i + 0 ] = vertex.x; + vertexBuffer[ i + 1 ] = vertex.y; + vertexBuffer[ i + 2 ] = vertex.z; + + } + + } + + function generateUVs() { + + var vertex = new Vector3(); + + for ( var i = 0; i < vertexBuffer.length; i += 3 ) { + + vertex.x = vertexBuffer[ i + 0 ]; + vertex.y = vertexBuffer[ i + 1 ]; + vertex.z = vertexBuffer[ i + 2 ]; + + var u = azimuth( vertex ) / 2 / Math.PI + 0.5; + var v = inclination( vertex ) / Math.PI + 0.5; + uvBuffer.push( u, 1 - v ); + + } + + correctUVs(); + + correctSeam(); + + } + + function correctSeam() { + + // handle case when face straddles the seam, see #3269 + + for ( var i = 0; i < uvBuffer.length; i += 6 ) { + + // uv data of a single face + + var x0 = uvBuffer[ i + 0 ]; + var x1 = uvBuffer[ i + 2 ]; + var x2 = uvBuffer[ i + 4 ]; + + var max = Math.max( x0, x1, x2 ); + var min = Math.min( x0, x1, x2 ); + + // 0.9 is somewhat arbitrary + + if ( max > 0.9 && min < 0.1 ) { + + if ( x0 < 0.2 ) { uvBuffer[ i + 0 ] += 1; } + if ( x1 < 0.2 ) { uvBuffer[ i + 2 ] += 1; } + if ( x2 < 0.2 ) { uvBuffer[ i + 4 ] += 1; } + + } + + } + + } + + function pushVertex( vertex ) { + + vertexBuffer.push( vertex.x, vertex.y, vertex.z ); + + } + + function getVertexByIndex( index, vertex ) { + + var stride = index * 3; + + vertex.x = vertices[ stride + 0 ]; + vertex.y = vertices[ stride + 1 ]; + vertex.z = vertices[ stride + 2 ]; + + } + + function correctUVs() { + + var a = new Vector3(); + var b = new Vector3(); + var c = new Vector3(); + + var centroid = new Vector3(); + + var uvA = new Vector2(); + var uvB = new Vector2(); + var uvC = new Vector2(); + + for ( var i = 0, j = 0; i < vertexBuffer.length; i += 9, j += 6 ) { + + a.set( vertexBuffer[ i + 0 ], vertexBuffer[ i + 1 ], vertexBuffer[ i + 2 ] ); + b.set( vertexBuffer[ i + 3 ], vertexBuffer[ i + 4 ], vertexBuffer[ i + 5 ] ); + c.set( vertexBuffer[ i + 6 ], vertexBuffer[ i + 7 ], vertexBuffer[ i + 8 ] ); + + uvA.set( uvBuffer[ j + 0 ], uvBuffer[ j + 1 ] ); + uvB.set( uvBuffer[ j + 2 ], uvBuffer[ j + 3 ] ); + uvC.set( uvBuffer[ j + 4 ], uvBuffer[ j + 5 ] ); + + centroid.copy( a ).add( b ).add( c ).divideScalar( 3 ); + + var azi = azimuth( centroid ); + + correctUV( uvA, j + 0, a, azi ); + correctUV( uvB, j + 2, b, azi ); + correctUV( uvC, j + 4, c, azi ); + + } + + } + + function correctUV( uv, stride, vector, azimuth ) { + + if ( ( azimuth < 0 ) && ( uv.x === 1 ) ) { + + uvBuffer[ stride ] = uv.x - 1; + + } + + if ( ( vector.x === 0 ) && ( vector.z === 0 ) ) { + + uvBuffer[ stride ] = azimuth / 2 / Math.PI + 0.5; + + } + + } + + // Angle around the Y axis, counter-clockwise when looking from above. + + function azimuth( vector ) { + + return Math.atan2( vector.z, - vector.x ); + + } + + + // Angle above the XZ plane. + + function inclination( vector ) { + + return Math.atan2( - vector.y, Math.sqrt( ( vector.x * vector.x ) + ( vector.z * vector.z ) ) ); + + } + + } + + PolyhedronBufferGeometry.prototype = Object.create( BufferGeometry.prototype ); + PolyhedronBufferGeometry.prototype.constructor = PolyhedronBufferGeometry; + + // TetrahedronGeometry + + function TetrahedronGeometry( radius, detail ) { + + Geometry.call(this); + this.type = 'TetrahedronGeometry'; + + this.parameters = { + radius: radius, + detail: detail + }; + + this.fromBufferGeometry( new TetrahedronBufferGeometry( radius, detail ) ); + this.mergeVertices(); + + } + + TetrahedronGeometry.prototype = Object.create( Geometry.prototype ); + TetrahedronGeometry.prototype.constructor = TetrahedronGeometry; + + + // TetrahedronBufferGeometry + + function TetrahedronBufferGeometry( radius, detail ) { + + var vertices = [ + 1, 1, 1, - 1, - 1, 1, - 1, 1, - 1, 1, - 1, - 1 + ]; + + var indices = [ + 2, 1, 0, 0, 3, 2, 1, 3, 0, 2, 3, 1 + ]; + + PolyhedronBufferGeometry.call( this, vertices, indices, radius, detail ); + + this.type = 'TetrahedronBufferGeometry'; + + this.parameters = { + radius: radius, + detail: detail + }; + + } + + TetrahedronBufferGeometry.prototype = Object.create( PolyhedronBufferGeometry.prototype ); + TetrahedronBufferGeometry.prototype.constructor = TetrahedronBufferGeometry; + + // OctahedronGeometry + + function OctahedronGeometry( radius, detail ) { + + Geometry.call(this); + + this.type = 'OctahedronGeometry'; + + this.parameters = { + radius: radius, + detail: detail + }; + + this.fromBufferGeometry( new OctahedronBufferGeometry( radius, detail ) ); + this.mergeVertices(); + + } + + OctahedronGeometry.prototype = Object.create( Geometry.prototype ); + OctahedronGeometry.prototype.constructor = OctahedronGeometry; + + // OctahedronBufferGeometry + + function OctahedronBufferGeometry( radius, detail ) { + + var vertices = [ + 1, 0, 0, - 1, 0, 0, 0, 1, 0, + 0, - 1, 0, 0, 0, 1, 0, 0, - 1 + ]; + + var indices = [ + 0, 2, 4, 0, 4, 3, 0, 3, 5, + 0, 5, 2, 1, 2, 5, 1, 5, 3, + 1, 3, 4, 1, 4, 2 + ]; + + PolyhedronBufferGeometry.call( this, vertices, indices, radius, detail ); + + this.type = 'OctahedronBufferGeometry'; + + this.parameters = { + radius: radius, + detail: detail + }; + + } + + OctahedronBufferGeometry.prototype = Object.create( PolyhedronBufferGeometry.prototype ); + OctahedronBufferGeometry.prototype.constructor = OctahedronBufferGeometry; + + // IcosahedronGeometry + + function IcosahedronGeometry( radius, detail ) { + + Geometry.call(this); + + this.type = 'IcosahedronGeometry'; + + this.parameters = { + radius: radius, + detail: detail + }; + + this.fromBufferGeometry( new IcosahedronBufferGeometry( radius, detail ) ); + this.mergeVertices(); + + } + + IcosahedronGeometry.prototype = Object.create( Geometry.prototype ); + IcosahedronGeometry.prototype.constructor = IcosahedronGeometry; + + // IcosahedronBufferGeometry + + function IcosahedronBufferGeometry( radius, detail ) { + + var t = ( 1 + Math.sqrt( 5 ) ) / 2; + + var vertices = [ + - 1, t, 0, 1, t, 0, - 1, - t, 0, 1, - t, 0, + 0, - 1, t, 0, 1, t, 0, - 1, - t, 0, 1, - t, + t, 0, - 1, t, 0, 1, - t, 0, - 1, - t, 0, 1 + ]; + + var indices = [ + 0, 11, 5, 0, 5, 1, 0, 1, 7, 0, 7, 10, 0, 10, 11, + 1, 5, 9, 5, 11, 4, 11, 10, 2, 10, 7, 6, 7, 1, 8, + 3, 9, 4, 3, 4, 2, 3, 2, 6, 3, 6, 8, 3, 8, 9, + 4, 9, 5, 2, 4, 11, 6, 2, 10, 8, 6, 7, 9, 8, 1 + ]; + + PolyhedronBufferGeometry.call( this, vertices, indices, radius, detail ); + + this.type = 'IcosahedronBufferGeometry'; + + this.parameters = { + radius: radius, + detail: detail + }; + + } + + IcosahedronBufferGeometry.prototype = Object.create( PolyhedronBufferGeometry.prototype ); + IcosahedronBufferGeometry.prototype.constructor = IcosahedronBufferGeometry; + + // DodecahedronGeometry + + function DodecahedronGeometry( radius, detail ) { + + Geometry.call(this); + this.type = 'DodecahedronGeometry'; + + this.parameters = { + radius: radius, + detail: detail + }; + + this.fromBufferGeometry( new DodecahedronBufferGeometry( radius, detail ) ); + this.mergeVertices(); + + } + + DodecahedronGeometry.prototype = Object.create( Geometry.prototype ); + DodecahedronGeometry.prototype.constructor = DodecahedronGeometry; + + // DodecahedronBufferGeometry + + function DodecahedronBufferGeometry( radius, detail ) { + + var t = ( 1 + Math.sqrt( 5 ) ) / 2; + var r = 1 / t; + + var vertices = [ + + // (±1, ±1, ±1) + - 1, - 1, - 1, - 1, - 1, 1, + - 1, 1, - 1, - 1, 1, 1, + 1, - 1, - 1, 1, - 1, 1, + 1, 1, - 1, 1, 1, 1, + + // (0, ±1/φ, ±φ) + 0, - r, - t, 0, - r, t, + 0, r, - t, 0, r, t, + + // (±1/φ, ±φ, 0) + - r, - t, 0, - r, t, 0, + r, - t, 0, r, t, 0, + + // (±φ, 0, ±1/φ) + - t, 0, - r, t, 0, - r, + - t, 0, r, t, 0, r + ]; + + var indices = [ + 3, 11, 7, 3, 7, 15, 3, 15, 13, + 7, 19, 17, 7, 17, 6, 7, 6, 15, + 17, 4, 8, 17, 8, 10, 17, 10, 6, + 8, 0, 16, 8, 16, 2, 8, 2, 10, + 0, 12, 1, 0, 1, 18, 0, 18, 16, + 6, 10, 2, 6, 2, 13, 6, 13, 15, + 2, 16, 18, 2, 18, 3, 2, 3, 13, + 18, 1, 9, 18, 9, 11, 18, 11, 3, + 4, 14, 12, 4, 12, 0, 4, 0, 8, + 11, 9, 5, 11, 5, 19, 11, 19, 7, + 19, 5, 14, 19, 14, 4, 19, 4, 17, + 1, 12, 14, 1, 14, 5, 1, 5, 9 + ]; + + PolyhedronBufferGeometry.call( this, vertices, indices, radius, detail ); + + this.type = 'DodecahedronBufferGeometry'; + + this.parameters = { + radius: radius, + detail: detail + }; + + } + + DodecahedronBufferGeometry.prototype = Object.create( PolyhedronBufferGeometry.prototype ); + DodecahedronBufferGeometry.prototype.constructor = DodecahedronBufferGeometry; + + // TubeGeometry + + function TubeGeometry( path, tubularSegments, radius, radialSegments, closed, taper ) { + + Geometry.call(this); + this.type = 'TubeGeometry'; + + this.parameters = { + path: path, + tubularSegments: tubularSegments, + radius: radius, + radialSegments: radialSegments, + closed: closed + }; + + if ( taper !== undefined ) { console.warn( 'THREE.TubeGeometry: taper has been removed.' ); } + + var bufferGeometry = new TubeBufferGeometry( path, tubularSegments, radius, radialSegments, closed ); + + // expose internals + + this.tangents = bufferGeometry.tangents; + this.normals = bufferGeometry.normals; + this.binormals = bufferGeometry.binormals; + + // create geometry + + this.fromBufferGeometry( bufferGeometry ); + this.mergeVertices(); + + } + + TubeGeometry.prototype = Object.create( Geometry.prototype ); + TubeGeometry.prototype.constructor = TubeGeometry; + + + // TubeBufferGeometry + + function TubeBufferGeometry( path, tubularSegments, radius, radialSegments, closed ) { + + BufferGeometry.call(this); + this.type = 'TubeBufferGeometry'; + + this.parameters = { + path: path, + tubularSegments: tubularSegments, + radius: radius, + radialSegments: radialSegments, + closed: closed + }; + + tubularSegments = tubularSegments || 64; + radius = radius || 1; + radialSegments = radialSegments || 8; + closed = closed || false; + + var frames = path.computeFrenetFrames( tubularSegments, closed ); + + // expose internals + + this.tangents = frames.tangents; + this.normals = frames.normals; + this.binormals = frames.binormals; + + // helper variables + + var vertex = new Vector3(); + var normal = new Vector3(); + var uv = new Vector2(); + var P = new Vector3(); + + // buffer + + var vertices = []; + var normals = []; + var uvs = []; + var indices = []; + + // create buffer data + + generateBufferData(); + + // build geometry + + this.setIndex( indices ); + this.setAttribute( 'position', new Float32BufferAttribute( vertices, 3 ) ); + this.setAttribute( 'normal', new Float32BufferAttribute( normals, 3 ) ); + this.setAttribute( 'uv', new Float32BufferAttribute( uvs, 2 ) ); + + // functions + + function generateBufferData() { + + for ( var i = 0; i < tubularSegments; i ++ ) { + + generateSegment( i ); + + } + + // if the geometry is not closed, generate the last row of vertices and normals + // at the regular position on the given path + // + // if the geometry is closed, duplicate the first row of vertices and normals (uvs will differ) + + generateSegment( ( closed === false ) ? tubularSegments : 0 ); + + // uvs are generated in a separate function. + // this makes it easy compute correct values for closed geometries + + generateUVs(); + + // finally create faces + + generateIndices(); + + } + + function generateSegment( i ) { + + // we use getPointAt to sample evenly distributed points from the given path + + P = path.getPointAt( i / tubularSegments, P ); + + // retrieve corresponding normal and binormal + + var N = frames.normals[ i ]; + var B = frames.binormals[ i ]; + + // generate normals and vertices for the current segment + + for ( var j = 0; j <= radialSegments; j ++ ) { + + var v = j / radialSegments * Math.PI * 2; + + var sin = Math.sin( v ); + var cos = - Math.cos( v ); + + // normal + + normal.x = ( cos * N.x + sin * B.x ); + normal.y = ( cos * N.y + sin * B.y ); + normal.z = ( cos * N.z + sin * B.z ); + normal.normalize(); + + normals.push( normal.x, normal.y, normal.z ); + + // vertex + + vertex.x = P.x + radius * normal.x; + vertex.y = P.y + radius * normal.y; + vertex.z = P.z + radius * normal.z; + + vertices.push( vertex.x, vertex.y, vertex.z ); + + } + + } + + function generateIndices() { + + for ( var j = 1; j <= tubularSegments; j ++ ) { + + for ( var i = 1; i <= radialSegments; i ++ ) { + + var a = ( radialSegments + 1 ) * ( j - 1 ) + ( i - 1 ); + var b = ( radialSegments + 1 ) * j + ( i - 1 ); + var c = ( radialSegments + 1 ) * j + i; + var d = ( radialSegments + 1 ) * ( j - 1 ) + i; + + // faces + + indices.push( a, b, d ); + indices.push( b, c, d ); + + } + + } + + } + + function generateUVs() { + + for ( var i = 0; i <= tubularSegments; i ++ ) { + + for ( var j = 0; j <= radialSegments; j ++ ) { + + uv.x = i / tubularSegments; + uv.y = j / radialSegments; + + uvs.push( uv.x, uv.y ); + + } + + } + + } + + } + + TubeBufferGeometry.prototype = Object.create( BufferGeometry.prototype ); + TubeBufferGeometry.prototype.constructor = TubeBufferGeometry; + TubeBufferGeometry.prototype.toJSON = function toJSON () { + + var data = BufferGeometry.prototype.toJSON.call( this ); + + data.path = this.parameters.path.toJSON(); + + return data; + + }; + + // TorusKnotGeometry + + function TorusKnotGeometry( radius, tube, tubularSegments, radialSegments, p, q, heightScale ) { + + Geometry.call(this); + this.type = 'TorusKnotGeometry'; + + this.parameters = { + radius: radius, + tube: tube, + tubularSegments: tubularSegments, + radialSegments: radialSegments, + p: p, + q: q + }; + + if ( heightScale !== undefined ) { console.warn( 'THREE.TorusKnotGeometry: heightScale has been deprecated. Use .scale( x, y, z ) instead.' ); } + + this.fromBufferGeometry( new TorusKnotBufferGeometry( radius, tube, tubularSegments, radialSegments, p, q ) ); + this.mergeVertices(); + + } + + TorusKnotGeometry.prototype = Object.create( Geometry.prototype ); + TorusKnotGeometry.prototype.constructor = TorusKnotGeometry; + + + // TorusKnotBufferGeometry + + function TorusKnotBufferGeometry( radius, tube, tubularSegments, radialSegments, p, q ) { + + BufferGeometry.call(this); + this.type = 'TorusKnotBufferGeometry'; + + this.parameters = { + radius: radius, + tube: tube, + tubularSegments: tubularSegments, + radialSegments: radialSegments, + p: p, + q: q + }; + + radius = radius || 1; + tube = tube || 0.4; + tubularSegments = Math.floor( tubularSegments ) || 64; + radialSegments = Math.floor( radialSegments ) || 8; + p = p || 2; + q = q || 3; + + // buffers + + var indices = []; + var vertices = []; + var normals = []; + var uvs = []; + + // helper variables + + var vertex = new Vector3(); + var normal = new Vector3(); + + var P1 = new Vector3(); + var P2 = new Vector3(); + + var B = new Vector3(); + var T = new Vector3(); + var N = new Vector3(); + + // generate vertices, normals and uvs + + for ( var i = 0; i <= tubularSegments; ++ i ) { + + // the radian "u" is used to calculate the position on the torus curve of the current tubular segement + + var u = i / tubularSegments * p * Math.PI * 2; + + // now we calculate two points. P1 is our current position on the curve, P2 is a little farther ahead. + // these points are used to create a special "coordinate space", which is necessary to calculate the correct vertex positions + + calculatePositionOnCurve( u, p, q, radius, P1 ); + calculatePositionOnCurve( u + 0.01, p, q, radius, P2 ); + + // calculate orthonormal basis + + T.subVectors( P2, P1 ); + N.addVectors( P2, P1 ); + B.crossVectors( T, N ); + N.crossVectors( B, T ); + + // normalize B, N. T can be ignored, we don't use it + + B.normalize(); + N.normalize(); + + for ( var j = 0; j <= radialSegments; ++ j ) { + + // now calculate the vertices. they are nothing more than an extrusion of the torus curve. + // because we extrude a shape in the xy-plane, there is no need to calculate a z-value. + + var v = j / radialSegments * Math.PI * 2; + var cx = - tube * Math.cos( v ); + var cy = tube * Math.sin( v ); + + // now calculate the final vertex position. + // first we orient the extrusion with our basis vectos, then we add it to the current position on the curve + + vertex.x = P1.x + ( cx * N.x + cy * B.x ); + vertex.y = P1.y + ( cx * N.y + cy * B.y ); + vertex.z = P1.z + ( cx * N.z + cy * B.z ); + + vertices.push( vertex.x, vertex.y, vertex.z ); + + // normal (P1 is always the center/origin of the extrusion, thus we can use it to calculate the normal) + + normal.subVectors( vertex, P1 ).normalize(); + + normals.push( normal.x, normal.y, normal.z ); + + // uv + + uvs.push( i / tubularSegments ); + uvs.push( j / radialSegments ); + + } + + } + + // generate indices + + for ( var j$1 = 1; j$1 <= tubularSegments; j$1 ++ ) { + + for ( var i$1 = 1; i$1 <= radialSegments; i$1 ++ ) { + + // indices + + var a = ( radialSegments + 1 ) * ( j$1 - 1 ) + ( i$1 - 1 ); + var b = ( radialSegments + 1 ) * j$1 + ( i$1 - 1 ); + var c = ( radialSegments + 1 ) * j$1 + i$1; + var d = ( radialSegments + 1 ) * ( j$1 - 1 ) + i$1; + + // faces + + indices.push( a, b, d ); + indices.push( b, c, d ); + + } + + } + + // build geometry + + this.setIndex( indices ); + this.setAttribute( 'position', new Float32BufferAttribute( vertices, 3 ) ); + this.setAttribute( 'normal', new Float32BufferAttribute( normals, 3 ) ); + this.setAttribute( 'uv', new Float32BufferAttribute( uvs, 2 ) ); + + // this function calculates the current position on the torus curve + + function calculatePositionOnCurve( u, p, q, radius, position ) { + + var cu = Math.cos( u ); + var su = Math.sin( u ); + var quOverP = q / p * u; + var cs = Math.cos( quOverP ); + + position.x = radius * ( 2 + cs ) * 0.5 * cu; + position.y = radius * ( 2 + cs ) * su * 0.5; + position.z = radius * Math.sin( quOverP ) * 0.5; + + } + + } + + TorusKnotBufferGeometry.prototype = Object.create( BufferGeometry.prototype ); + TorusKnotBufferGeometry.prototype.constructor = TorusKnotBufferGeometry; + + // TorusGeometry + + function TorusGeometry( radius, tube, radialSegments, tubularSegments, arc ) { + + Geometry.call(this); + this.type = 'TorusGeometry'; + + this.parameters = { + radius: radius, + tube: tube, + radialSegments: radialSegments, + tubularSegments: tubularSegments, + arc: arc + }; + + this.fromBufferGeometry( new TorusBufferGeometry( radius, tube, radialSegments, tubularSegments, arc ) ); + this.mergeVertices(); + + } + + TorusGeometry.prototype = Object.create( Geometry.prototype ); + TorusGeometry.prototype.constructor = TorusGeometry; + + + // TorusBufferGeometry + + function TorusBufferGeometry( radius, tube, radialSegments, tubularSegments, arc ) { + + BufferGeometry.call(this); + this.type = 'TorusBufferGeometry'; + + this.parameters = { + radius: radius, + tube: tube, + radialSegments: radialSegments, + tubularSegments: tubularSegments, + arc: arc + }; + + radius = radius || 1; + tube = tube || 0.4; + radialSegments = Math.floor( radialSegments ) || 8; + tubularSegments = Math.floor( tubularSegments ) || 6; + arc = arc || Math.PI * 2; + + // buffers + + var indices = []; + var vertices = []; + var normals = []; + var uvs = []; + + // helper variables + + var center = new Vector3(); + var vertex = new Vector3(); + var normal = new Vector3(); + + // generate vertices, normals and uvs + + for ( var j = 0; j <= radialSegments; j ++ ) { + + for ( var i = 0; i <= tubularSegments; i ++ ) { + + var u = i / tubularSegments * arc; + var v = j / radialSegments * Math.PI * 2; + + // vertex + + vertex.x = ( radius + tube * Math.cos( v ) ) * Math.cos( u ); + vertex.y = ( radius + tube * Math.cos( v ) ) * Math.sin( u ); + vertex.z = tube * Math.sin( v ); + + vertices.push( vertex.x, vertex.y, vertex.z ); + + // normal + + center.x = radius * Math.cos( u ); + center.y = radius * Math.sin( u ); + normal.subVectors( vertex, center ).normalize(); + + normals.push( normal.x, normal.y, normal.z ); + + // uv + + uvs.push( i / tubularSegments ); + uvs.push( j / radialSegments ); + + } + + } + + // generate indices + + for ( var j$1 = 1; j$1 <= radialSegments; j$1 ++ ) { + + for ( var i$1 = 1; i$1 <= tubularSegments; i$1 ++ ) { + + // indices + + var a = ( tubularSegments + 1 ) * j$1 + i$1 - 1; + var b = ( tubularSegments + 1 ) * ( j$1 - 1 ) + i$1 - 1; + var c = ( tubularSegments + 1 ) * ( j$1 - 1 ) + i$1; + var d = ( tubularSegments + 1 ) * j$1 + i$1; + + // faces + + indices.push( a, b, d ); + indices.push( b, c, d ); + + } + + } + + // build geometry + + this.setIndex( indices ); + this.setAttribute( 'position', new Float32BufferAttribute( vertices, 3 ) ); + this.setAttribute( 'normal', new Float32BufferAttribute( normals, 3 ) ); + this.setAttribute( 'uv', new Float32BufferAttribute( uvs, 2 ) ); + + } + + TorusBufferGeometry.prototype = Object.create( BufferGeometry.prototype ); + TorusBufferGeometry.prototype.constructor = TorusBufferGeometry; + + /** + * Port from https://github.com/mapbox/earcut (v2.2.2) + */ + + var Earcut = { + + triangulate: function ( data, holeIndices, dim ) { + + dim = dim || 2; + + var hasHoles = holeIndices && holeIndices.length; + var outerLen = hasHoles ? holeIndices[ 0 ] * dim : data.length; + var outerNode = linkedList( data, 0, outerLen, dim, true ); + var triangles = []; + + if ( ! outerNode || outerNode.next === outerNode.prev ) { return triangles; } + + var minX, minY, maxX, maxY, x, y, invSize; + + if ( hasHoles ) { outerNode = eliminateHoles( data, holeIndices, outerNode, dim ); } + + // if the shape is not too simple, we'll use z-order curve hash later; calculate polygon bbox + if ( data.length > 80 * dim ) { + + minX = maxX = data[ 0 ]; + minY = maxY = data[ 1 ]; + + for ( var i = dim; i < outerLen; i += dim ) { + + x = data[ i ]; + y = data[ i + 1 ]; + if ( x < minX ) { minX = x; } + if ( y < minY ) { minY = y; } + if ( x > maxX ) { maxX = x; } + if ( y > maxY ) { maxY = y; } + + } + + // minX, minY and invSize are later used to transform coords into integers for z-order calculation + invSize = Math.max( maxX - minX, maxY - minY ); + invSize = invSize !== 0 ? 1 / invSize : 0; + + } + + earcutLinked( outerNode, triangles, dim, minX, minY, invSize ); + + return triangles; + + } + + }; + + // create a circular doubly linked list from polygon points in the specified winding order + function linkedList( data, start, end, dim, clockwise ) { + + var i, last; + + if ( clockwise === ( signedArea( data, start, end, dim ) > 0 ) ) { + + for ( i = start; i < end; i += dim ) { last = insertNode( i, data[ i ], data[ i + 1 ], last ); } + + } else { + + for ( i = end - dim; i >= start; i -= dim ) { last = insertNode( i, data[ i ], data[ i + 1 ], last ); } + + } + + if ( last && equals( last, last.next ) ) { + + removeNode( last ); + last = last.next; + + } + + return last; + + } + + // eliminate colinear or duplicate points + function filterPoints( start, end ) { + + if ( ! start ) { return start; } + if ( ! end ) { end = start; } + + var p = start, + again; + do { + + again = false; + + if ( ! p.steiner && ( equals( p, p.next ) || area( p.prev, p, p.next ) === 0 ) ) { + + removeNode( p ); + p = end = p.prev; + if ( p === p.next ) { break; } + again = true; + + } else { + + p = p.next; + + } + + } while ( again || p !== end ); + + return end; + + } + + // main ear slicing loop which triangulates a polygon (given as a linked list) + function earcutLinked( ear, triangles, dim, minX, minY, invSize, pass ) { + + if ( ! ear ) { return; } + + // interlink polygon nodes in z-order + if ( ! pass && invSize ) { indexCurve( ear, minX, minY, invSize ); } + + var stop = ear, + prev, next; + + // iterate through ears, slicing them one by one + while ( ear.prev !== ear.next ) { + + prev = ear.prev; + next = ear.next; + + if ( invSize ? isEarHashed( ear, minX, minY, invSize ) : isEar( ear ) ) { + + // cut off the triangle + triangles.push( prev.i / dim ); + triangles.push( ear.i / dim ); + triangles.push( next.i / dim ); + + removeNode( ear ); + + // skipping the next vertex leads to less sliver triangles + ear = next.next; + stop = next.next; + + continue; + + } + + ear = next; + + // if we looped through the whole remaining polygon and can't find any more ears + if ( ear === stop ) { + + // try filtering points and slicing again + if ( ! pass ) { + + earcutLinked( filterPoints( ear ), triangles, dim, minX, minY, invSize, 1 ); + + // if this didn't work, try curing all small self-intersections locally + + } else if ( pass === 1 ) { + + ear = cureLocalIntersections( filterPoints( ear ), triangles, dim ); + earcutLinked( ear, triangles, dim, minX, minY, invSize, 2 ); + + // as a last resort, try splitting the remaining polygon into two + + } else if ( pass === 2 ) { + + splitEarcut( ear, triangles, dim, minX, minY, invSize ); + + } + + break; + + } + + } + + } + + // check whether a polygon node forms a valid ear with adjacent nodes + function isEar( ear ) { + + var a = ear.prev, + b = ear, + c = ear.next; + + if ( area( a, b, c ) >= 0 ) { return false; } // reflex, can't be an ear + + // now make sure we don't have other points inside the potential ear + var p = ear.next.next; + + while ( p !== ear.prev ) { + + if ( pointInTriangle( a.x, a.y, b.x, b.y, c.x, c.y, p.x, p.y ) && + area( p.prev, p, p.next ) >= 0 ) { return false; } + p = p.next; + + } + + return true; + + } + + function isEarHashed( ear, minX, minY, invSize ) { + + var a = ear.prev, + b = ear, + c = ear.next; + + if ( area( a, b, c ) >= 0 ) { return false; } // reflex, can't be an ear + + // triangle bbox; min & max are calculated like this for speed + var minTX = a.x < b.x ? ( a.x < c.x ? a.x : c.x ) : ( b.x < c.x ? b.x : c.x ), + minTY = a.y < b.y ? ( a.y < c.y ? a.y : c.y ) : ( b.y < c.y ? b.y : c.y ), + maxTX = a.x > b.x ? ( a.x > c.x ? a.x : c.x ) : ( b.x > c.x ? b.x : c.x ), + maxTY = a.y > b.y ? ( a.y > c.y ? a.y : c.y ) : ( b.y > c.y ? b.y : c.y ); + + // z-order range for the current triangle bbox; + var minZ = zOrder( minTX, minTY, minX, minY, invSize ), + maxZ = zOrder( maxTX, maxTY, minX, minY, invSize ); + + var p = ear.prevZ, + n = ear.nextZ; + + // look for points inside the triangle in both directions + while ( p && p.z >= minZ && n && n.z <= maxZ ) { + + if ( p !== ear.prev && p !== ear.next && + pointInTriangle( a.x, a.y, b.x, b.y, c.x, c.y, p.x, p.y ) && + area( p.prev, p, p.next ) >= 0 ) { return false; } + p = p.prevZ; + + if ( n !== ear.prev && n !== ear.next && + pointInTriangle( a.x, a.y, b.x, b.y, c.x, c.y, n.x, n.y ) && + area( n.prev, n, n.next ) >= 0 ) { return false; } + n = n.nextZ; + + } + + // look for remaining points in decreasing z-order + while ( p && p.z >= minZ ) { + + if ( p !== ear.prev && p !== ear.next && + pointInTriangle( a.x, a.y, b.x, b.y, c.x, c.y, p.x, p.y ) && + area( p.prev, p, p.next ) >= 0 ) { return false; } + p = p.prevZ; + + } + + // look for remaining points in increasing z-order + while ( n && n.z <= maxZ ) { + + if ( n !== ear.prev && n !== ear.next && + pointInTriangle( a.x, a.y, b.x, b.y, c.x, c.y, n.x, n.y ) && + area( n.prev, n, n.next ) >= 0 ) { return false; } + n = n.nextZ; + + } + + return true; + + } + + // go through all polygon nodes and cure small local self-intersections + function cureLocalIntersections( start, triangles, dim ) { + + var p = start; + do { + + var a = p.prev, + b = p.next.next; + + if ( ! equals( a, b ) && intersects( a, p, p.next, b ) && locallyInside( a, b ) && locallyInside( b, a ) ) { + + triangles.push( a.i / dim ); + triangles.push( p.i / dim ); + triangles.push( b.i / dim ); + + // remove two nodes involved + removeNode( p ); + removeNode( p.next ); + + p = start = b; + + } + + p = p.next; + + } while ( p !== start ); + + return filterPoints( p ); + + } + + // try splitting polygon into two and triangulate them independently + function splitEarcut( start, triangles, dim, minX, minY, invSize ) { + + // look for a valid diagonal that divides the polygon into two + var a = start; + do { + + var b = a.next.next; + while ( b !== a.prev ) { + + if ( a.i !== b.i && isValidDiagonal( a, b ) ) { + + // split the polygon in two by the diagonal + var c = splitPolygon( a, b ); + + // filter colinear points around the cuts + a = filterPoints( a, a.next ); + c = filterPoints( c, c.next ); + + // run earcut on each half + earcutLinked( a, triangles, dim, minX, minY, invSize ); + earcutLinked( c, triangles, dim, minX, minY, invSize ); + return; + + } + + b = b.next; + + } + + a = a.next; + + } while ( a !== start ); + + } + + // link every hole into the outer loop, producing a single-ring polygon without holes + function eliminateHoles( data, holeIndices, outerNode, dim ) { + + var queue = []; + var i, len, start, end, list; + + for ( i = 0, len = holeIndices.length; i < len; i ++ ) { + + start = holeIndices[ i ] * dim; + end = i < len - 1 ? holeIndices[ i + 1 ] * dim : data.length; + list = linkedList( data, start, end, dim, false ); + if ( list === list.next ) { list.steiner = true; } + queue.push( getLeftmost( list ) ); + + } + + queue.sort( compareX ); + + // process holes from left to right + for ( i = 0; i < queue.length; i ++ ) { + + eliminateHole( queue[ i ], outerNode ); + outerNode = filterPoints( outerNode, outerNode.next ); + + } + + return outerNode; + + } + + function compareX( a, b ) { + + return a.x - b.x; + + } + + // find a bridge between vertices that connects hole with an outer ring and and link it + function eliminateHole( hole, outerNode ) { + + outerNode = findHoleBridge( hole, outerNode ); + if ( outerNode ) { + + var b = splitPolygon( outerNode, hole ); + + // filter collinear points around the cuts + filterPoints( outerNode, outerNode.next ); + filterPoints( b, b.next ); + + } + + } + + // David Eberly's algorithm for finding a bridge between hole and outer polygon + function findHoleBridge( hole, outerNode ) { + + var p = outerNode; + var hx = hole.x; + var hy = hole.y; + var qx = - Infinity, m; + + // find a segment intersected by a ray from the hole's leftmost point to the left; + // segment's endpoint with lesser x will be potential connection point + do { + + if ( hy <= p.y && hy >= p.next.y && p.next.y !== p.y ) { + + var x = p.x + ( hy - p.y ) * ( p.next.x - p.x ) / ( p.next.y - p.y ); + if ( x <= hx && x > qx ) { + + qx = x; + if ( x === hx ) { + + if ( hy === p.y ) { return p; } + if ( hy === p.next.y ) { return p.next; } + + } + + m = p.x < p.next.x ? p : p.next; + + } + + } + + p = p.next; + + } while ( p !== outerNode ); + + if ( ! m ) { return null; } + + if ( hx === qx ) { return m; } // hole touches outer segment; pick leftmost endpoint + + // look for points inside the triangle of hole point, segment intersection and endpoint; + // if there are no points found, we have a valid connection; + // otherwise choose the point of the minimum angle with the ray as connection point + + var stop = m, + mx = m.x, + my = m.y; + var tanMin = Infinity, tan; + + p = m; + + do { + + if ( hx >= p.x && p.x >= mx && hx !== p.x && + pointInTriangle( hy < my ? hx : qx, hy, mx, my, hy < my ? qx : hx, hy, p.x, p.y ) ) { + + tan = Math.abs( hy - p.y ) / ( hx - p.x ); // tangential + + if ( locallyInside( p, hole ) && ( tan < tanMin || ( tan === tanMin && ( p.x > m.x || ( p.x === m.x && sectorContainsSector( m, p ) ) ) ) ) ) { + + m = p; + tanMin = tan; + + } + + } + + p = p.next; + + } while ( p !== stop ); + + return m; + + } + + // whether sector in vertex m contains sector in vertex p in the same coordinates + function sectorContainsSector( m, p ) { + + return area( m.prev, m, p.prev ) < 0 && area( p.next, m, m.next ) < 0; + + } + + // interlink polygon nodes in z-order + function indexCurve( start, minX, minY, invSize ) { + + var p = start; + do { + + if ( p.z === null ) { p.z = zOrder( p.x, p.y, minX, minY, invSize ); } + p.prevZ = p.prev; + p.nextZ = p.next; + p = p.next; + + } while ( p !== start ); + + p.prevZ.nextZ = null; + p.prevZ = null; + + sortLinked( p ); + + } + + // Simon Tatham's linked list merge sort algorithm + // http://www.chiark.greenend.org.uk/~sgtatham/algorithms/listsort.html + function sortLinked( list ) { + + var i, p, q, e, tail, numMerges, pSize, qSize, + inSize = 1; + + do { + + p = list; + list = null; + tail = null; + numMerges = 0; + + while ( p ) { + + numMerges ++; + q = p; + pSize = 0; + for ( i = 0; i < inSize; i ++ ) { + + pSize ++; + q = q.nextZ; + if ( ! q ) { break; } + + } + + qSize = inSize; + + while ( pSize > 0 || ( qSize > 0 && q ) ) { + + if ( pSize !== 0 && ( qSize === 0 || ! q || p.z <= q.z ) ) { + + e = p; + p = p.nextZ; + pSize --; + + } else { + + e = q; + q = q.nextZ; + qSize --; + + } + + if ( tail ) { tail.nextZ = e; } + else { list = e; } + + e.prevZ = tail; + tail = e; + + } + + p = q; + + } + + tail.nextZ = null; + inSize *= 2; + + } while ( numMerges > 1 ); + + return list; + + } + + // z-order of a point given coords and inverse of the longer side of data bbox + function zOrder( x, y, minX, minY, invSize ) { + + // coords are transformed into non-negative 15-bit integer range + x = 32767 * ( x - minX ) * invSize; + y = 32767 * ( y - minY ) * invSize; + + x = ( x | ( x << 8 ) ) & 0x00FF00FF; + x = ( x | ( x << 4 ) ) & 0x0F0F0F0F; + x = ( x | ( x << 2 ) ) & 0x33333333; + x = ( x | ( x << 1 ) ) & 0x55555555; + + y = ( y | ( y << 8 ) ) & 0x00FF00FF; + y = ( y | ( y << 4 ) ) & 0x0F0F0F0F; + y = ( y | ( y << 2 ) ) & 0x33333333; + y = ( y | ( y << 1 ) ) & 0x55555555; + + return x | ( y << 1 ); + + } + + // find the leftmost node of a polygon ring + function getLeftmost( start ) { + + var p = start, + leftmost = start; + do { + + if ( p.x < leftmost.x || ( p.x === leftmost.x && p.y < leftmost.y ) ) { leftmost = p; } + p = p.next; + + } while ( p !== start ); + + return leftmost; + + } + + // check if a point lies within a convex triangle + function pointInTriangle( ax, ay, bx, by, cx, cy, px, py ) { + + return ( cx - px ) * ( ay - py ) - ( ax - px ) * ( cy - py ) >= 0 && + ( ax - px ) * ( by - py ) - ( bx - px ) * ( ay - py ) >= 0 && + ( bx - px ) * ( cy - py ) - ( cx - px ) * ( by - py ) >= 0; + + } + + // check if a diagonal between two polygon nodes is valid (lies in polygon interior) + function isValidDiagonal( a, b ) { + + return a.next.i !== b.i && a.prev.i !== b.i && ! intersectsPolygon( a, b ) && // dones't intersect other edges + ( locallyInside( a, b ) && locallyInside( b, a ) && middleInside( a, b ) && // locally visible + ( area( a.prev, a, b.prev ) || area( a, b.prev, b ) ) || // does not create opposite-facing sectors + equals( a, b ) && area( a.prev, a, a.next ) > 0 && area( b.prev, b, b.next ) > 0 ); // special zero-length case + + } + + // signed area of a triangle + function area( p, q, r ) { + + return ( q.y - p.y ) * ( r.x - q.x ) - ( q.x - p.x ) * ( r.y - q.y ); + + } + + // check if two points are equal + function equals( p1, p2 ) { + + return p1.x === p2.x && p1.y === p2.y; + + } + + // check if two segments intersect + function intersects( p1, q1, p2, q2 ) { + + var o1 = sign( area( p1, q1, p2 ) ); + var o2 = sign( area( p1, q1, q2 ) ); + var o3 = sign( area( p2, q2, p1 ) ); + var o4 = sign( area( p2, q2, q1 ) ); + + if ( o1 !== o2 && o3 !== o4 ) { return true; } // general case + + if ( o1 === 0 && onSegment( p1, p2, q1 ) ) { return true; } // p1, q1 and p2 are collinear and p2 lies on p1q1 + if ( o2 === 0 && onSegment( p1, q2, q1 ) ) { return true; } // p1, q1 and q2 are collinear and q2 lies on p1q1 + if ( o3 === 0 && onSegment( p2, p1, q2 ) ) { return true; } // p2, q2 and p1 are collinear and p1 lies on p2q2 + if ( o4 === 0 && onSegment( p2, q1, q2 ) ) { return true; } // p2, q2 and q1 are collinear and q1 lies on p2q2 + + return false; + + } + + // for collinear points p, q, r, check if point q lies on segment pr + function onSegment( p, q, r ) { + + return q.x <= Math.max( p.x, r.x ) && q.x >= Math.min( p.x, r.x ) && q.y <= Math.max( p.y, r.y ) && q.y >= Math.min( p.y, r.y ); + + } + + function sign( num ) { + + return num > 0 ? 1 : num < 0 ? - 1 : 0; + + } + + // check if a polygon diagonal intersects any polygon segments + function intersectsPolygon( a, b ) { + + var p = a; + do { + + if ( p.i !== a.i && p.next.i !== a.i && p.i !== b.i && p.next.i !== b.i && + intersects( p, p.next, a, b ) ) { return true; } + p = p.next; + + } while ( p !== a ); + + return false; + + } + + // check if a polygon diagonal is locally inside the polygon + function locallyInside( a, b ) { + + return area( a.prev, a, a.next ) < 0 ? + area( a, b, a.next ) >= 0 && area( a, a.prev, b ) >= 0 : + area( a, b, a.prev ) < 0 || area( a, a.next, b ) < 0; + + } + + // check if the middle point of a polygon diagonal is inside the polygon + function middleInside( a, b ) { + + var p = a, + inside = false; + var px = ( a.x + b.x ) / 2, + py = ( a.y + b.y ) / 2; + do { + + if ( ( ( p.y > py ) !== ( p.next.y > py ) ) && p.next.y !== p.y && + ( px < ( p.next.x - p.x ) * ( py - p.y ) / ( p.next.y - p.y ) + p.x ) ) + { inside = ! inside; } + p = p.next; + + } while ( p !== a ); + + return inside; + + } + + // link two polygon vertices with a bridge; if the vertices belong to the same ring, it splits polygon into two; + // if one belongs to the outer ring and another to a hole, it merges it into a single ring + function splitPolygon( a, b ) { + + var a2 = new Node( a.i, a.x, a.y ), + b2 = new Node( b.i, b.x, b.y ), + an = a.next, + bp = b.prev; + + a.next = b; + b.prev = a; + + a2.next = an; + an.prev = a2; + + b2.next = a2; + a2.prev = b2; + + bp.next = b2; + b2.prev = bp; + + return b2; + + } + + // create a node and optionally link it with previous one (in a circular doubly linked list) + function insertNode( i, x, y, last ) { + + var p = new Node( i, x, y ); + + if ( ! last ) { + + p.prev = p; + p.next = p; + + } else { + + p.next = last.next; + p.prev = last; + last.next.prev = p; + last.next = p; + + } + + return p; + + } + + function removeNode( p ) { + + p.next.prev = p.prev; + p.prev.next = p.next; + + if ( p.prevZ ) { p.prevZ.nextZ = p.nextZ; } + if ( p.nextZ ) { p.nextZ.prevZ = p.prevZ; } + + } + + function Node( i, x, y ) { + + // vertex index in coordinates array + this.i = i; + + // vertex coordinates + this.x = x; + this.y = y; + + // previous and next vertex nodes in a polygon ring + this.prev = null; + this.next = null; + + // z-order curve value + this.z = null; + + // previous and next nodes in z-order + this.prevZ = null; + this.nextZ = null; + + // indicates whether this is a steiner point + this.steiner = false; + + } + + function signedArea( data, start, end, dim ) { + + var sum = 0; + for ( var i = start, j = end - dim; i < end; i += dim ) { + + sum += ( data[ j ] - data[ i ] ) * ( data[ i + 1 ] + data[ j + 1 ] ); + j = i; + + } + + return sum; + + } + + var ShapeUtils = { + + // calculate area of the contour polygon + + area: function ( contour ) { + + var n = contour.length; + var a = 0.0; + + for ( var p = n - 1, q = 0; q < n; p = q ++ ) { + + a += contour[ p ].x * contour[ q ].y - contour[ q ].x * contour[ p ].y; + + } + + return a * 0.5; + + }, + + isClockWise: function ( pts ) { + + return ShapeUtils.area( pts ) < 0; + + }, + + triangulateShape: function ( contour, holes ) { + + var vertices = []; // flat array of vertices like [ x0,y0, x1,y1, x2,y2, ... ] + var holeIndices = []; // array of hole indices + var faces = []; // final array of vertex indices like [ [ a,b,d ], [ b,c,d ] ] + + removeDupEndPts( contour ); + addContour( vertices, contour ); + + // + + var holeIndex = contour.length; + + holes.forEach( removeDupEndPts ); + + for ( var i = 0; i < holes.length; i ++ ) { + + holeIndices.push( holeIndex ); + holeIndex += holes[ i ].length; + addContour( vertices, holes[ i ] ); + + } + + // + + var triangles = Earcut.triangulate( vertices, holeIndices ); + + // + + for ( var i$1 = 0; i$1 < triangles.length; i$1 += 3 ) { + + faces.push( triangles.slice( i$1, i$1 + 3 ) ); + + } + + return faces; + + } + + }; + + function removeDupEndPts( points ) { + + var l = points.length; + + if ( l > 2 && points[ l - 1 ].equals( points[ 0 ] ) ) { + + points.pop(); + + } + + } + + function addContour( vertices, contour ) { + + for ( var i = 0; i < contour.length; i ++ ) { + + vertices.push( contour[ i ].x ); + vertices.push( contour[ i ].y ); + + } + + } + + /** + * Creates extruded geometry from a path shape. + * + * parameters = { + * + * curveSegments: , // number of points on the curves + * steps: , // number of points for z-side extrusions / used for subdividing segments of extrude spline too + * depth: , // Depth to extrude the shape + * + * bevelEnabled: , // turn on bevel + * bevelThickness: , // how deep into the original shape bevel goes + * bevelSize: , // how far from shape outline (including bevelOffset) is bevel + * bevelOffset: , // how far from shape outline does bevel start + * bevelSegments: , // number of bevel layers + * + * extrudePath: // curve to extrude shape along + * + * UVGenerator: // object that provides UV generator functions + * + * } + */ + + // ExtrudeGeometry + + function ExtrudeGeometry( shapes, options ) { + + Geometry.call(this); + + this.type = 'ExtrudeGeometry'; + + this.parameters = { + shapes: shapes, + options: options + }; + + this.fromBufferGeometry( new ExtrudeBufferGeometry( shapes, options ) ); + this.mergeVertices(); + + } + + ExtrudeGeometry.prototype = Object.create( Geometry.prototype ); + ExtrudeGeometry.prototype.constructor = ExtrudeGeometry; + + ExtrudeGeometry.prototype.toJSON = function toJSON$1 () { + + var data = Geometry.prototype.toJSON.call(this); + + var shapes = this.parameters.shapes; + var options = this.parameters.options; + + return toJSON( shapes, options, data ); + + }; + + + // ExtrudeBufferGeometry + + function ExtrudeBufferGeometry( shapes, options ) { + + BufferGeometry.call(this); + + this.type = 'ExtrudeBufferGeometry'; + + this.parameters = { + shapes: shapes, + options: options + }; + + shapes = Array.isArray( shapes ) ? shapes : [ shapes ]; + + var scope = this; + + var verticesArray = []; + var uvArray = []; + + for ( var i = 0, l = shapes.length; i < l; i ++ ) { + + var shape = shapes[ i ]; + addShape( shape ); + + } + + // build geometry + + this.setAttribute( 'position', new Float32BufferAttribute( verticesArray, 3 ) ); + this.setAttribute( 'uv', new Float32BufferAttribute( uvArray, 2 ) ); + + this.computeVertexNormals(); + + // functions + + function addShape( shape ) { + + var placeholder = []; + + // options + + var curveSegments = options.curveSegments !== undefined ? options.curveSegments : 12; + var steps = options.steps !== undefined ? options.steps : 1; + var depth = options.depth !== undefined ? options.depth : 100; + + var bevelEnabled = options.bevelEnabled !== undefined ? options.bevelEnabled : true; + var bevelThickness = options.bevelThickness !== undefined ? options.bevelThickness : 6; + var bevelSize = options.bevelSize !== undefined ? options.bevelSize : bevelThickness - 2; + var bevelOffset = options.bevelOffset !== undefined ? options.bevelOffset : 0; + var bevelSegments = options.bevelSegments !== undefined ? options.bevelSegments : 3; + + var extrudePath = options.extrudePath; + + var uvgen = options.UVGenerator !== undefined ? options.UVGenerator : WorldUVGenerator; + + // deprecated options + + if ( options.amount !== undefined ) { + + console.warn( 'THREE.ExtrudeBufferGeometry: amount has been renamed to depth.' ); + depth = options.amount; + + } + + // + + var extrudePts, extrudeByPath = false; + var splineTube, binormal, normal, position2; + + if ( extrudePath ) { + + extrudePts = extrudePath.getSpacedPoints( steps ); + + extrudeByPath = true; + bevelEnabled = false; // bevels not supported for path extrusion + + // SETUP TNB variables + + // TODO1 - have a .isClosed in spline? + + splineTube = extrudePath.computeFrenetFrames( steps, false ); + + // console.log(splineTube, 'splineTube', splineTube.normals.length, 'steps', steps, 'extrudePts', extrudePts.length); + + binormal = new Vector3(); + normal = new Vector3(); + position2 = new Vector3(); + + } + + // Safeguards if bevels are not enabled + + if ( ! bevelEnabled ) { + + bevelSegments = 0; + bevelThickness = 0; + bevelSize = 0; + bevelOffset = 0; + + } + + // Variables initialization + + var shapePoints = shape.extractPoints( curveSegments ); + + var vertices = shapePoints.shape; + var holes = shapePoints.holes; + + var reverse = ! ShapeUtils.isClockWise( vertices ); + + if ( reverse ) { + + vertices = vertices.reverse(); + + // Maybe we should also check if holes are in the opposite direction, just to be safe ... + + for ( var h = 0, hl = holes.length; h < hl; h ++ ) { + + var ahole = holes[ h ]; + + if ( ShapeUtils.isClockWise( ahole ) ) { + + holes[ h ] = ahole.reverse(); + + } + + } + + } + + + var faces = ShapeUtils.triangulateShape( vertices, holes ); + + /* Vertices */ + + var contour = vertices; // vertices has all points but contour has only points of circumference + + for ( var h$1 = 0, hl$1 = holes.length; h$1 < hl$1; h$1 ++ ) { + + var ahole$1 = holes[ h$1 ]; + + vertices = vertices.concat( ahole$1 ); + + } + + + function scalePt2( pt, vec, size ) { + + if ( ! vec ) { console.error( "THREE.ExtrudeGeometry: vec does not exist" ); } + + return vec.clone().multiplyScalar( size ).add( pt ); + + } + + var vlen = vertices.length, flen = faces.length; + + + // Find directions for point movement + + + function getBevelVec( inPt, inPrev, inNext ) { + + // computes for inPt the corresponding point inPt' on a new contour + // shifted by 1 unit (length of normalized vector) to the left + // if we walk along contour clockwise, this new contour is outside the old one + // + // inPt' is the intersection of the two lines parallel to the two + // adjacent edges of inPt at a distance of 1 unit on the left side. + + var v_trans_x, v_trans_y, shrink_by; // resulting translation vector for inPt + + // good reading for geometry algorithms (here: line-line intersection) + // http://geomalgorithms.com/a05-_intersect-1.html + + var v_prev_x = inPt.x - inPrev.x, + v_prev_y = inPt.y - inPrev.y; + var v_next_x = inNext.x - inPt.x, + v_next_y = inNext.y - inPt.y; + + var v_prev_lensq = ( v_prev_x * v_prev_x + v_prev_y * v_prev_y ); + + // check for collinear edges + var collinear0 = ( v_prev_x * v_next_y - v_prev_y * v_next_x ); + + if ( Math.abs( collinear0 ) > Number.EPSILON ) { + + // not collinear + + // length of vectors for normalizing + + var v_prev_len = Math.sqrt( v_prev_lensq ); + var v_next_len = Math.sqrt( v_next_x * v_next_x + v_next_y * v_next_y ); + + // shift adjacent points by unit vectors to the left + + var ptPrevShift_x = ( inPrev.x - v_prev_y / v_prev_len ); + var ptPrevShift_y = ( inPrev.y + v_prev_x / v_prev_len ); + + var ptNextShift_x = ( inNext.x - v_next_y / v_next_len ); + var ptNextShift_y = ( inNext.y + v_next_x / v_next_len ); + + // scaling factor for v_prev to intersection point + + var sf = ( ( ptNextShift_x - ptPrevShift_x ) * v_next_y - + ( ptNextShift_y - ptPrevShift_y ) * v_next_x ) / + ( v_prev_x * v_next_y - v_prev_y * v_next_x ); + + // vector from inPt to intersection point + + v_trans_x = ( ptPrevShift_x + v_prev_x * sf - inPt.x ); + v_trans_y = ( ptPrevShift_y + v_prev_y * sf - inPt.y ); + + // Don't normalize!, otherwise sharp corners become ugly + // but prevent crazy spikes + var v_trans_lensq = ( v_trans_x * v_trans_x + v_trans_y * v_trans_y ); + if ( v_trans_lensq <= 2 ) { + + return new Vector2( v_trans_x, v_trans_y ); + + } else { + + shrink_by = Math.sqrt( v_trans_lensq / 2 ); + + } + + } else { + + // handle special case of collinear edges + + var direction_eq = false; // assumes: opposite + + if ( v_prev_x > Number.EPSILON ) { + + if ( v_next_x > Number.EPSILON ) { + + direction_eq = true; + + } + + } else { + + if ( v_prev_x < - Number.EPSILON ) { + + if ( v_next_x < - Number.EPSILON ) { + + direction_eq = true; + + } + + } else { + + if ( Math.sign( v_prev_y ) === Math.sign( v_next_y ) ) { + + direction_eq = true; + + } + + } + + } + + if ( direction_eq ) { + + // console.log("Warning: lines are a straight sequence"); + v_trans_x = - v_prev_y; + v_trans_y = v_prev_x; + shrink_by = Math.sqrt( v_prev_lensq ); + + } else { + + // console.log("Warning: lines are a straight spike"); + v_trans_x = v_prev_x; + v_trans_y = v_prev_y; + shrink_by = Math.sqrt( v_prev_lensq / 2 ); + + } + + } + + return new Vector2( v_trans_x / shrink_by, v_trans_y / shrink_by ); + + } + + + var contourMovements = []; + + for ( var i = 0, il = contour.length, j = il - 1, k = i + 1; i < il; i ++, j ++, k ++ ) { + + if ( j === il ) { j = 0; } + if ( k === il ) { k = 0; } + + // (j)---(i)---(k) + // console.log('i,j,k', i, j , k) + + contourMovements[ i ] = getBevelVec( contour[ i ], contour[ j ], contour[ k ] ); + + } + + var holesMovements = []; + var oneHoleMovements, verticesMovements = contourMovements.concat(); + + for ( var h$2 = 0, hl$2 = holes.length; h$2 < hl$2; h$2 ++ ) { + + var ahole$2 = holes[ h$2 ]; + + oneHoleMovements = []; + + for ( var i$1 = 0, il$1 = ahole$2.length, j$1 = il$1 - 1, k$1 = i$1 + 1; i$1 < il$1; i$1 ++, j$1 ++, k$1 ++ ) { + + if ( j$1 === il$1 ) { j$1 = 0; } + if ( k$1 === il$1 ) { k$1 = 0; } + + // (j)---(i)---(k) + oneHoleMovements[ i$1 ] = getBevelVec( ahole$2[ i$1 ], ahole$2[ j$1 ], ahole$2[ k$1 ] ); + + } + + holesMovements.push( oneHoleMovements ); + verticesMovements = verticesMovements.concat( oneHoleMovements ); + + } + + + // Loop bevelSegments, 1 for the front, 1 for the back + + for ( var b = 0; b < bevelSegments; b ++ ) { + + //for ( b = bevelSegments; b > 0; b -- ) { + + var t = b / bevelSegments; + var z = bevelThickness * Math.cos( t * Math.PI / 2 ); + var bs$1 = bevelSize * Math.sin( t * Math.PI / 2 ) + bevelOffset; + + // contract shape + + for ( var i$2 = 0, il$2 = contour.length; i$2 < il$2; i$2 ++ ) { + + var vert = scalePt2( contour[ i$2 ], contourMovements[ i$2 ], bs$1 ); + + v( vert.x, vert.y, - z ); + + } + + // expand holes + + for ( var h$3 = 0, hl$3 = holes.length; h$3 < hl$3; h$3 ++ ) { + + var ahole$3 = holes[ h$3 ]; + oneHoleMovements = holesMovements[ h$3 ]; + + for ( var i$3 = 0, il$3 = ahole$3.length; i$3 < il$3; i$3 ++ ) { + + var vert$1 = scalePt2( ahole$3[ i$3 ], oneHoleMovements[ i$3 ], bs$1 ); + + v( vert$1.x, vert$1.y, - z ); + + } + + } + + } + + var bs = bevelSize + bevelOffset; + + // Back facing vertices + + for ( var i$4 = 0; i$4 < vlen; i$4 ++ ) { + + var vert$2 = bevelEnabled ? scalePt2( vertices[ i$4 ], verticesMovements[ i$4 ], bs ) : vertices[ i$4 ]; + + if ( ! extrudeByPath ) { + + v( vert$2.x, vert$2.y, 0 ); + + } else { + + // v( vert.x, vert.y + extrudePts[ 0 ].y, extrudePts[ 0 ].x ); + + normal.copy( splineTube.normals[ 0 ] ).multiplyScalar( vert$2.x ); + binormal.copy( splineTube.binormals[ 0 ] ).multiplyScalar( vert$2.y ); + + position2.copy( extrudePts[ 0 ] ).add( normal ).add( binormal ); + + v( position2.x, position2.y, position2.z ); + + } + + } + + // Add stepped vertices... + // Including front facing vertices + + for ( var s = 1; s <= steps; s ++ ) { + + for ( var i$5 = 0; i$5 < vlen; i$5 ++ ) { + + var vert$3 = bevelEnabled ? scalePt2( vertices[ i$5 ], verticesMovements[ i$5 ], bs ) : vertices[ i$5 ]; + + if ( ! extrudeByPath ) { + + v( vert$3.x, vert$3.y, depth / steps * s ); + + } else { + + // v( vert.x, vert.y + extrudePts[ s - 1 ].y, extrudePts[ s - 1 ].x ); + + normal.copy( splineTube.normals[ s ] ).multiplyScalar( vert$3.x ); + binormal.copy( splineTube.binormals[ s ] ).multiplyScalar( vert$3.y ); + + position2.copy( extrudePts[ s ] ).add( normal ).add( binormal ); + + v( position2.x, position2.y, position2.z ); + + } + + } + + } + + + // Add bevel segments planes + + //for ( b = 1; b <= bevelSegments; b ++ ) { + for ( var b$1 = bevelSegments - 1; b$1 >= 0; b$1 -- ) { + + var t$1 = b$1 / bevelSegments; + var z$1 = bevelThickness * Math.cos( t$1 * Math.PI / 2 ); + var bs$2 = bevelSize * Math.sin( t$1 * Math.PI / 2 ) + bevelOffset; + + // contract shape + + for ( var i$6 = 0, il$4 = contour.length; i$6 < il$4; i$6 ++ ) { + + var vert$4 = scalePt2( contour[ i$6 ], contourMovements[ i$6 ], bs$2 ); + v( vert$4.x, vert$4.y, depth + z$1 ); + + } + + // expand holes + + for ( var h$4 = 0, hl$4 = holes.length; h$4 < hl$4; h$4 ++ ) { + + var ahole$4 = holes[ h$4 ]; + oneHoleMovements = holesMovements[ h$4 ]; + + for ( var i$7 = 0, il$5 = ahole$4.length; i$7 < il$5; i$7 ++ ) { + + var vert$5 = scalePt2( ahole$4[ i$7 ], oneHoleMovements[ i$7 ], bs$2 ); + + if ( ! extrudeByPath ) { + + v( vert$5.x, vert$5.y, depth + z$1 ); + + } else { + + v( vert$5.x, vert$5.y + extrudePts[ steps - 1 ].y, extrudePts[ steps - 1 ].x + z$1 ); + + } + + } + + } + + } + + /* Faces */ + + // Top and bottom faces + + buildLidFaces(); + + // Sides faces + + buildSideFaces(); + + + ///// Internal functions + + function buildLidFaces() { + + var start = verticesArray.length / 3; + + if ( bevelEnabled ) { + + var layer = 0; // steps + 1 + var offset = vlen * layer; + + // Bottom faces + + for ( var i = 0; i < flen; i ++ ) { + + var face = faces[ i ]; + f3( face[ 2 ] + offset, face[ 1 ] + offset, face[ 0 ] + offset ); + + } + + layer = steps + bevelSegments * 2; + offset = vlen * layer; + + // Top faces + + for ( var i$1 = 0; i$1 < flen; i$1 ++ ) { + + var face$1 = faces[ i$1 ]; + f3( face$1[ 0 ] + offset, face$1[ 1 ] + offset, face$1[ 2 ] + offset ); + + } + + } else { + + // Bottom faces + + for ( var i$2 = 0; i$2 < flen; i$2 ++ ) { + + var face$2 = faces[ i$2 ]; + f3( face$2[ 2 ], face$2[ 1 ], face$2[ 0 ] ); + + } + + // Top faces + + for ( var i$3 = 0; i$3 < flen; i$3 ++ ) { + + var face$3 = faces[ i$3 ]; + f3( face$3[ 0 ] + vlen * steps, face$3[ 1 ] + vlen * steps, face$3[ 2 ] + vlen * steps ); + + } + + } + + scope.addGroup( start, verticesArray.length / 3 - start, 0 ); + + } + + // Create faces for the z-sides of the shape + + function buildSideFaces() { + + var start = verticesArray.length / 3; + var layeroffset = 0; + sidewalls( contour, layeroffset ); + layeroffset += contour.length; + + for ( var h = 0, hl = holes.length; h < hl; h ++ ) { + + var ahole = holes[ h ]; + sidewalls( ahole, layeroffset ); + + //, true + layeroffset += ahole.length; + + } + + + scope.addGroup( start, verticesArray.length / 3 - start, 1 ); + + + } + + function sidewalls( contour, layeroffset ) { + + var i = contour.length; + + while ( -- i >= 0 ) { + + var j = i; + var k = i - 1; + if ( k < 0 ) { k = contour.length - 1; } + + //console.log('b', i,j, i-1, k,vertices.length); + + for ( var s = 0, sl = ( steps + bevelSegments * 2 ); s < sl; s ++ ) { + + var slen1 = vlen * s; + var slen2 = vlen * ( s + 1 ); + + var a = layeroffset + j + slen1, + b = layeroffset + k + slen1, + c = layeroffset + k + slen2, + d = layeroffset + j + slen2; + + f4( a, b, c, d ); + + } + + } + + } + + function v( x, y, z ) { + + placeholder.push( x ); + placeholder.push( y ); + placeholder.push( z ); + + } + + + function f3( a, b, c ) { + + addVertex( a ); + addVertex( b ); + addVertex( c ); + + var nextIndex = verticesArray.length / 3; + var uvs = uvgen.generateTopUV( scope, verticesArray, nextIndex - 3, nextIndex - 2, nextIndex - 1 ); + + addUV( uvs[ 0 ] ); + addUV( uvs[ 1 ] ); + addUV( uvs[ 2 ] ); + + } + + function f4( a, b, c, d ) { + + addVertex( a ); + addVertex( b ); + addVertex( d ); + + addVertex( b ); + addVertex( c ); + addVertex( d ); + + + var nextIndex = verticesArray.length / 3; + var uvs = uvgen.generateSideWallUV( scope, verticesArray, nextIndex - 6, nextIndex - 3, nextIndex - 2, nextIndex - 1 ); + + addUV( uvs[ 0 ] ); + addUV( uvs[ 1 ] ); + addUV( uvs[ 3 ] ); + + addUV( uvs[ 1 ] ); + addUV( uvs[ 2 ] ); + addUV( uvs[ 3 ] ); + + } + + function addVertex( index ) { + + verticesArray.push( placeholder[ index * 3 + 0 ] ); + verticesArray.push( placeholder[ index * 3 + 1 ] ); + verticesArray.push( placeholder[ index * 3 + 2 ] ); + + } + + + function addUV( vector2 ) { + + uvArray.push( vector2.x ); + uvArray.push( vector2.y ); + + } + + } + + } + + ExtrudeBufferGeometry.prototype = Object.create( BufferGeometry.prototype ); + ExtrudeBufferGeometry.prototype.constructor = ExtrudeBufferGeometry; + + ExtrudeBufferGeometry.prototype.toJSON = function toJSON$2 () { + + var data = BufferGeometry.prototype.toJSON.call( this ); + + var shapes = this.parameters.shapes; + var options = this.parameters.options; + + return toJSON( shapes, options, data ); + + }; + + var WorldUVGenerator = { + + generateTopUV: function ( geometry, vertices, indexA, indexB, indexC ) { + + var a_x = vertices[ indexA * 3 ]; + var a_y = vertices[ indexA * 3 + 1 ]; + var b_x = vertices[ indexB * 3 ]; + var b_y = vertices[ indexB * 3 + 1 ]; + var c_x = vertices[ indexC * 3 ]; + var c_y = vertices[ indexC * 3 + 1 ]; + + return [ + new Vector2( a_x, a_y ), + new Vector2( b_x, b_y ), + new Vector2( c_x, c_y ) + ]; + + }, + + generateSideWallUV: function ( geometry, vertices, indexA, indexB, indexC, indexD ) { + + var a_x = vertices[ indexA * 3 ]; + var a_y = vertices[ indexA * 3 + 1 ]; + var a_z = vertices[ indexA * 3 + 2 ]; + var b_x = vertices[ indexB * 3 ]; + var b_y = vertices[ indexB * 3 + 1 ]; + var b_z = vertices[ indexB * 3 + 2 ]; + var c_x = vertices[ indexC * 3 ]; + var c_y = vertices[ indexC * 3 + 1 ]; + var c_z = vertices[ indexC * 3 + 2 ]; + var d_x = vertices[ indexD * 3 ]; + var d_y = vertices[ indexD * 3 + 1 ]; + var d_z = vertices[ indexD * 3 + 2 ]; + + if ( Math.abs( a_y - b_y ) < 0.01 ) { + + return [ + new Vector2( a_x, 1 - a_z ), + new Vector2( b_x, 1 - b_z ), + new Vector2( c_x, 1 - c_z ), + new Vector2( d_x, 1 - d_z ) + ]; + + } else { + + return [ + new Vector2( a_y, 1 - a_z ), + new Vector2( b_y, 1 - b_z ), + new Vector2( c_y, 1 - c_z ), + new Vector2( d_y, 1 - d_z ) + ]; + + } + + } + }; + + function toJSON( shapes, options, data ) { + + data.shapes = []; + + if ( Array.isArray( shapes ) ) { + + for ( var i = 0, l = shapes.length; i < l; i ++ ) { + + var shape = shapes[ i ]; + + data.shapes.push( shape.uuid ); + + } + + } else { + + data.shapes.push( shapes.uuid ); + + } + + if ( options.extrudePath !== undefined ) { data.options.extrudePath = options.extrudePath.toJSON(); } + + return data; + + } + + /** + * Text = 3D Text + * + * parameters = { + * font: , // font + * + * size: , // size of the text + * height: , // thickness to extrude text + * curveSegments: , // number of points on the curves + * + * bevelEnabled: , // turn on bevel + * bevelThickness: , // how deep into text bevel goes + * bevelSize: , // how far from text outline (including bevelOffset) is bevel + * bevelOffset: // how far from text outline does bevel start + * } + */ + + // TextGeometry + + function TextGeometry( text, parameters ) { + + Geometry.call(this); + this.type = 'TextGeometry'; + + this.parameters = { + text: text, + parameters: parameters + }; + + this.fromBufferGeometry( new TextBufferGeometry( text, parameters ) ); + this.mergeVertices(); + + } + + TextGeometry.prototype = Object.create( Geometry.prototype ); + TextGeometry.prototype.constructor = TextGeometry; + + + // TextBufferGeometry + + function TextBufferGeometry( text, parameters ) { + + parameters = parameters || {}; + + var font = parameters.font; + + if ( ! ( font && font.isFont ) ) { + + console.error( 'THREE.TextGeometry: font parameter is not an instance of THREE.Font.' ); + return new Geometry(); + + } + + var shapes = font.generateShapes( text, parameters.size ); + + // translate parameters to ExtrudeGeometry API + + parameters.depth = parameters.height !== undefined ? parameters.height : 50; + + // defaults + + if ( parameters.bevelThickness === undefined ) { parameters.bevelThickness = 10; } + if ( parameters.bevelSize === undefined ) { parameters.bevelSize = 8; } + if ( parameters.bevelEnabled === undefined ) { parameters.bevelEnabled = false; } + + ExtrudeBufferGeometry.call( this, shapes, parameters ); + + this.type = 'TextBufferGeometry'; + + } + + TextBufferGeometry.prototype = Object.create( ExtrudeBufferGeometry.prototype ); + TextBufferGeometry.prototype.constructor = TextBufferGeometry; + + // SphereGeometry + + function SphereGeometry( radius, widthSegments, heightSegments, phiStart, phiLength, thetaStart, thetaLength ) { + + Geometry.call(this); + this.type = 'SphereGeometry'; + + this.parameters = { + radius: radius, + widthSegments: widthSegments, + heightSegments: heightSegments, + phiStart: phiStart, + phiLength: phiLength, + thetaStart: thetaStart, + thetaLength: thetaLength + }; + + this.fromBufferGeometry( new SphereBufferGeometry( radius, widthSegments, heightSegments, phiStart, phiLength, thetaStart, thetaLength ) ); + this.mergeVertices(); + + } + + SphereGeometry.prototype = Object.create( Geometry.prototype ); + SphereGeometry.prototype.constructor = SphereGeometry; + + // SphereBufferGeometry + + function SphereBufferGeometry( radius, widthSegments, heightSegments, phiStart, phiLength, thetaStart, thetaLength ) { + + BufferGeometry.call(this); + this.type = 'SphereBufferGeometry'; + + this.parameters = { + radius: radius, + widthSegments: widthSegments, + heightSegments: heightSegments, + phiStart: phiStart, + phiLength: phiLength, + thetaStart: thetaStart, + thetaLength: thetaLength + }; + + radius = radius || 1; + + widthSegments = Math.max( 3, Math.floor( widthSegments ) || 8 ); + heightSegments = Math.max( 2, Math.floor( heightSegments ) || 6 ); + + phiStart = phiStart !== undefined ? phiStart : 0; + phiLength = phiLength !== undefined ? phiLength : Math.PI * 2; + + thetaStart = thetaStart !== undefined ? thetaStart : 0; + thetaLength = thetaLength !== undefined ? thetaLength : Math.PI; + + var thetaEnd = Math.min( thetaStart + thetaLength, Math.PI ); + + var index = 0; + var grid = []; + + var vertex = new Vector3(); + var normal = new Vector3(); + + // buffers + + var indices = []; + var vertices = []; + var normals = []; + var uvs = []; + + // generate vertices, normals and uvs + + for ( var iy = 0; iy <= heightSegments; iy ++ ) { + + var verticesRow = []; + + var v = iy / heightSegments; + + // special case for the poles + + var uOffset = 0; + + if ( iy == 0 && thetaStart == 0 ) { + + uOffset = 0.5 / widthSegments; + + } else if ( iy == heightSegments && thetaEnd == Math.PI ) { + + uOffset = - 0.5 / widthSegments; + + } + + for ( var ix = 0; ix <= widthSegments; ix ++ ) { + + var u = ix / widthSegments; + + // vertex + + vertex.x = - radius * Math.cos( phiStart + u * phiLength ) * Math.sin( thetaStart + v * thetaLength ); + vertex.y = radius * Math.cos( thetaStart + v * thetaLength ); + vertex.z = radius * Math.sin( phiStart + u * phiLength ) * Math.sin( thetaStart + v * thetaLength ); + + vertices.push( vertex.x, vertex.y, vertex.z ); + + // normal + + normal.copy( vertex ).normalize(); + normals.push( normal.x, normal.y, normal.z ); + + // uv + + uvs.push( u + uOffset, 1 - v ); + + verticesRow.push( index ++ ); + + } + + grid.push( verticesRow ); + + } + + // indices + + for ( var iy$1 = 0; iy$1 < heightSegments; iy$1 ++ ) { + + for ( var ix$1 = 0; ix$1 < widthSegments; ix$1 ++ ) { + + var a = grid[ iy$1 ][ ix$1 + 1 ]; + var b = grid[ iy$1 ][ ix$1 ]; + var c = grid[ iy$1 + 1 ][ ix$1 ]; + var d = grid[ iy$1 + 1 ][ ix$1 + 1 ]; + + if ( iy$1 !== 0 || thetaStart > 0 ) { indices.push( a, b, d ); } + if ( iy$1 !== heightSegments - 1 || thetaEnd < Math.PI ) { indices.push( b, c, d ); } + + } + + } + + // build geometry + + this.setIndex( indices ); + this.setAttribute( 'position', new Float32BufferAttribute( vertices, 3 ) ); + this.setAttribute( 'normal', new Float32BufferAttribute( normals, 3 ) ); + this.setAttribute( 'uv', new Float32BufferAttribute( uvs, 2 ) ); + + } + + SphereBufferGeometry.prototype = Object.create( BufferGeometry.prototype ); + SphereBufferGeometry.prototype.constructor = SphereBufferGeometry; + + // RingGeometry + + function RingGeometry( innerRadius, outerRadius, thetaSegments, phiSegments, thetaStart, thetaLength ) { + + Geometry.call(this); + + this.type = 'RingGeometry'; + + this.parameters = { + innerRadius: innerRadius, + outerRadius: outerRadius, + thetaSegments: thetaSegments, + phiSegments: phiSegments, + thetaStart: thetaStart, + thetaLength: thetaLength + }; + + this.fromBufferGeometry( new RingBufferGeometry( innerRadius, outerRadius, thetaSegments, phiSegments, thetaStart, thetaLength ) ); + this.mergeVertices(); + + } + + RingGeometry.prototype = Object.create( Geometry.prototype ); + RingGeometry.prototype.constructor = RingGeometry; + + // RingBufferGeometry + + function RingBufferGeometry( innerRadius, outerRadius, thetaSegments, phiSegments, thetaStart, thetaLength ) { + + BufferGeometry.call(this); + + this.type = 'RingBufferGeometry'; + + this.parameters = { + innerRadius: innerRadius, + outerRadius: outerRadius, + thetaSegments: thetaSegments, + phiSegments: phiSegments, + thetaStart: thetaStart, + thetaLength: thetaLength + }; + + innerRadius = innerRadius || 0.5; + outerRadius = outerRadius || 1; + + thetaStart = thetaStart !== undefined ? thetaStart : 0; + thetaLength = thetaLength !== undefined ? thetaLength : Math.PI * 2; + + thetaSegments = thetaSegments !== undefined ? Math.max( 3, thetaSegments ) : 8; + phiSegments = phiSegments !== undefined ? Math.max( 1, phiSegments ) : 1; + + // buffers + + var indices = []; + var vertices = []; + var normals = []; + var uvs = []; + + // some helper variables + + var radius = innerRadius; + var radiusStep = ( ( outerRadius - innerRadius ) / phiSegments ); + var vertex = new Vector3(); + var uv = new Vector2(); + + // generate vertices, normals and uvs + + for ( var j = 0; j <= phiSegments; j ++ ) { + + for ( var i = 0; i <= thetaSegments; i ++ ) { + + // values are generate from the inside of the ring to the outside + + var segment = thetaStart + i / thetaSegments * thetaLength; + + // vertex + + vertex.x = radius * Math.cos( segment ); + vertex.y = radius * Math.sin( segment ); + + vertices.push( vertex.x, vertex.y, vertex.z ); + + // normal + + normals.push( 0, 0, 1 ); + + // uv + + uv.x = ( vertex.x / outerRadius + 1 ) / 2; + uv.y = ( vertex.y / outerRadius + 1 ) / 2; + + uvs.push( uv.x, uv.y ); + + } + + // increase the radius for next row of vertices + + radius += radiusStep; + + } + + // indices + + for ( var j$1 = 0; j$1 < phiSegments; j$1 ++ ) { + + var thetaSegmentLevel = j$1 * ( thetaSegments + 1 ); + + for ( var i$1 = 0; i$1 < thetaSegments; i$1 ++ ) { + + var segment$1 = i$1 + thetaSegmentLevel; + + var a = segment$1; + var b = segment$1 + thetaSegments + 1; + var c = segment$1 + thetaSegments + 2; + var d = segment$1 + 1; + + // faces + + indices.push( a, b, d ); + indices.push( b, c, d ); + + } + + } + + // build geometry + + this.setIndex( indices ); + this.setAttribute( 'position', new Float32BufferAttribute( vertices, 3 ) ); + this.setAttribute( 'normal', new Float32BufferAttribute( normals, 3 ) ); + this.setAttribute( 'uv', new Float32BufferAttribute( uvs, 2 ) ); + + } + + RingBufferGeometry.prototype = Object.create( BufferGeometry.prototype ); + RingBufferGeometry.prototype.constructor = RingBufferGeometry; + + // LatheGeometry + + function LatheGeometry( points, segments, phiStart, phiLength ) { + + Geometry.call(this); + + this.type = 'LatheGeometry'; + + this.parameters = { + points: points, + segments: segments, + phiStart: phiStart, + phiLength: phiLength + }; + + this.fromBufferGeometry( new LatheBufferGeometry( points, segments, phiStart, phiLength ) ); + this.mergeVertices(); + + } + + LatheGeometry.prototype = Object.create( Geometry.prototype ); + LatheGeometry.prototype.constructor = LatheGeometry; + + // LatheBufferGeometry + + function LatheBufferGeometry( points, segments, phiStart, phiLength ) { + + BufferGeometry.call(this); + + this.type = 'LatheBufferGeometry'; + + this.parameters = { + points: points, + segments: segments, + phiStart: phiStart, + phiLength: phiLength + }; + + segments = Math.floor( segments ) || 12; + phiStart = phiStart || 0; + phiLength = phiLength || Math.PI * 2; + + // clamp phiLength so it's in range of [ 0, 2PI ] + + phiLength = MathUtils.clamp( phiLength, 0, Math.PI * 2 ); + + + // buffers + + var indices = []; + var vertices = []; + var uvs = []; + + // helper variables + + var inverseSegments = 1.0 / segments; + var vertex = new Vector3(); + var uv = new Vector2(); + + // generate vertices and uvs + + for ( var i = 0; i <= segments; i ++ ) { + + var phi = phiStart + i * inverseSegments * phiLength; + + var sin = Math.sin( phi ); + var cos = Math.cos( phi ); + + for ( var j = 0; j <= ( points.length - 1 ); j ++ ) { + + // vertex + + vertex.x = points[ j ].x * sin; + vertex.y = points[ j ].y; + vertex.z = points[ j ].x * cos; + + vertices.push( vertex.x, vertex.y, vertex.z ); + + // uv + + uv.x = i / segments; + uv.y = j / ( points.length - 1 ); + + uvs.push( uv.x, uv.y ); + + + } + + } + + // indices + + for ( var i$1 = 0; i$1 < segments; i$1 ++ ) { + + for ( var j$1 = 0; j$1 < ( points.length - 1 ); j$1 ++ ) { + + var base = j$1 + i$1 * points.length; + + var a = base; + var b = base + points.length; + var c = base + points.length + 1; + var d = base + 1; + + // faces + + indices.push( a, b, d ); + indices.push( b, c, d ); + + } + + } + + // build geometry + + this.setIndex( indices ); + this.setAttribute( 'position', new Float32BufferAttribute( vertices, 3 ) ); + this.setAttribute( 'uv', new Float32BufferAttribute( uvs, 2 ) ); + + // generate normals + + this.computeVertexNormals(); + + // if the geometry is closed, we need to average the normals along the seam. + // because the corresponding vertices are identical (but still have different UVs). + + if ( phiLength === Math.PI * 2 ) { + + var normals = this.attributes.normal.array; + var n1 = new Vector3(); + var n2 = new Vector3(); + var n = new Vector3(); + + // this is the buffer offset for the last line of vertices + + var base$1 = segments * points.length * 3; + + for ( var i$2 = 0, j$2 = 0; i$2 < points.length; i$2 ++, j$2 += 3 ) { + + // select the normal of the vertex in the first line + + n1.x = normals[ j$2 + 0 ]; + n1.y = normals[ j$2 + 1 ]; + n1.z = normals[ j$2 + 2 ]; + + // select the normal of the vertex in the last line + + n2.x = normals[ base$1 + j$2 + 0 ]; + n2.y = normals[ base$1 + j$2 + 1 ]; + n2.z = normals[ base$1 + j$2 + 2 ]; + + // average normals + + n.addVectors( n1, n2 ).normalize(); + + // assign the new values to both normals + + normals[ j$2 + 0 ] = normals[ base$1 + j$2 + 0 ] = n.x; + normals[ j$2 + 1 ] = normals[ base$1 + j$2 + 1 ] = n.y; + normals[ j$2 + 2 ] = normals[ base$1 + j$2 + 2 ] = n.z; + + } + + } + + } + + LatheBufferGeometry.prototype = Object.create( BufferGeometry.prototype ); + LatheBufferGeometry.prototype.constructor = LatheBufferGeometry; + + // ShapeGeometry + + function ShapeGeometry( shapes, curveSegments ) { + + Geometry.call(this); + this.type = 'ShapeGeometry'; + + if ( typeof curveSegments === 'object' ) { + + console.warn( 'THREE.ShapeGeometry: Options parameter has been removed.' ); + + curveSegments = curveSegments.curveSegments; + + } + + this.parameters = { + shapes: shapes, + curveSegments: curveSegments + }; + + this.fromBufferGeometry( new ShapeBufferGeometry( shapes, curveSegments ) ); + this.mergeVertices(); + + } + + ShapeGeometry.prototype = Object.create( Geometry.prototype ); + ShapeGeometry.prototype.constructor = ShapeGeometry; + + ShapeGeometry.prototype.toJSON = function toJSON$1$1 () { + + var data = Geometry.prototype.toJSON.call( this ); + + var shapes = this.parameters.shapes; + + return toJSON$1( shapes, data ); + + }; + + // ShapeBufferGeometry + + function ShapeBufferGeometry( shapes, curveSegments ) { + + BufferGeometry.call(this); + this.type = 'ShapeBufferGeometry'; + + this.parameters = { + shapes: shapes, + curveSegments: curveSegments + }; + + curveSegments = curveSegments || 12; + + // buffers + + var indices = []; + var vertices = []; + var normals = []; + var uvs = []; + + // helper variables + + var groupStart = 0; + var groupCount = 0; + + // allow single and array values for "shapes" parameter + + if ( Array.isArray( shapes ) === false ) { + + addShape( shapes ); + + } else { + + for ( var i = 0; i < shapes.length; i ++ ) { + + addShape( shapes[ i ] ); + + this.addGroup( groupStart, groupCount, i ); // enables MultiMaterial support + + groupStart += groupCount; + groupCount = 0; + + } + + } + + // build geometry + + this.setIndex( indices ); + this.setAttribute( 'position', new Float32BufferAttribute( vertices, 3 ) ); + this.setAttribute( 'normal', new Float32BufferAttribute( normals, 3 ) ); + this.setAttribute( 'uv', new Float32BufferAttribute( uvs, 2 ) ); + + + // helper functions + + function addShape( shape ) { + + var indexOffset = vertices.length / 3; + var points = shape.extractPoints( curveSegments ); + + var shapeVertices = points.shape; + var shapeHoles = points.holes; + + // check direction of vertices + + if ( ShapeUtils.isClockWise( shapeVertices ) === false ) { + + shapeVertices = shapeVertices.reverse(); + + } + + for ( var i = 0, l = shapeHoles.length; i < l; i ++ ) { + + var shapeHole = shapeHoles[ i ]; + + if ( ShapeUtils.isClockWise( shapeHole ) === true ) { + + shapeHoles[ i ] = shapeHole.reverse(); + + } + + } + + var faces = ShapeUtils.triangulateShape( shapeVertices, shapeHoles ); + + // join vertices of inner and outer paths to a single array + + for ( var i$1 = 0, l$1 = shapeHoles.length; i$1 < l$1; i$1 ++ ) { + + var shapeHole$1 = shapeHoles[ i$1 ]; + shapeVertices = shapeVertices.concat( shapeHole$1 ); + + } + + // vertices, normals, uvs + + for ( var i$2 = 0, l$2 = shapeVertices.length; i$2 < l$2; i$2 ++ ) { + + var vertex = shapeVertices[ i$2 ]; + + vertices.push( vertex.x, vertex.y, 0 ); + normals.push( 0, 0, 1 ); + uvs.push( vertex.x, vertex.y ); // world uvs + + } + + // incides + + for ( var i$3 = 0, l$3 = faces.length; i$3 < l$3; i$3 ++ ) { + + var face = faces[ i$3 ]; + + var a = face[ 0 ] + indexOffset; + var b = face[ 1 ] + indexOffset; + var c = face[ 2 ] + indexOffset; + + indices.push( a, b, c ); + groupCount += 3; + + } + + } + + } + + ShapeBufferGeometry.prototype = Object.create( BufferGeometry.prototype ); + ShapeBufferGeometry.prototype.constructor = ShapeBufferGeometry; + + ShapeBufferGeometry.prototype.toJSON = function toJSON$2 () { + + var data = BufferGeometry.prototype.toJSON.call( this ); + + var shapes = this.parameters.shapes; + + return toJSON$1( shapes, data ); + + }; + + // + + function toJSON$1( shapes, data ) { + + data.shapes = []; + + if ( Array.isArray( shapes ) ) { + + for ( var i = 0, l = shapes.length; i < l; i ++ ) { + + var shape = shapes[ i ]; + + data.shapes.push( shape.uuid ); + + } + + } else { + + data.shapes.push( shapes.uuid ); + + } + + return data; + + } + + function EdgesGeometry( geometry, thresholdAngle ) { + + BufferGeometry.call(this); + + this.type = 'EdgesGeometry'; + + this.parameters = { + thresholdAngle: thresholdAngle + }; + + thresholdAngle = ( thresholdAngle !== undefined ) ? thresholdAngle : 1; + + // buffer + + var vertices = []; + + // helper variables + + var thresholdDot = Math.cos( MathUtils.DEG2RAD * thresholdAngle ); + var edge = [ 0, 0 ], edges = {}; + var edge1, edge2, key; + var keys = [ 'a', 'b', 'c' ]; + + // prepare source geometry + + var geometry2; + + if ( geometry.isBufferGeometry ) { + + geometry2 = new Geometry(); + geometry2.fromBufferGeometry( geometry ); + + } else { + + geometry2 = geometry.clone(); + + } + + geometry2.mergeVertices(); + geometry2.computeFaceNormals(); + + var sourceVertices = geometry2.vertices; + var faces = geometry2.faces; + + // now create a data structure where each entry represents an edge with its adjoining faces + + for ( var i = 0, l = faces.length; i < l; i ++ ) { + + var face = faces[ i ]; + + for ( var j = 0; j < 3; j ++ ) { + + edge1 = face[ keys[ j ] ]; + edge2 = face[ keys[ ( j + 1 ) % 3 ] ]; + edge[ 0 ] = Math.min( edge1, edge2 ); + edge[ 1 ] = Math.max( edge1, edge2 ); + + key = edge[ 0 ] + ',' + edge[ 1 ]; + + if ( edges[ key ] === undefined ) { + + edges[ key ] = { index1: edge[ 0 ], index2: edge[ 1 ], face1: i, face2: undefined }; + + } else { + + edges[ key ].face2 = i; + + } + + } + + } + + // generate vertices + + for ( key in edges ) { + + var e = edges[ key ]; + + // an edge is only rendered if the angle (in degrees) between the face normals of the adjoining faces exceeds this value. default = 1 degree. + + if ( e.face2 === undefined || faces[ e.face1 ].normal.dot( faces[ e.face2 ].normal ) <= thresholdDot ) { + + var vertex = sourceVertices[ e.index1 ]; + vertices.push( vertex.x, vertex.y, vertex.z ); + + vertex = sourceVertices[ e.index2 ]; + vertices.push( vertex.x, vertex.y, vertex.z ); + + } + + } + + // build geometry + + this.setAttribute( 'position', new Float32BufferAttribute( vertices, 3 ) ); + + } + + EdgesGeometry.prototype = Object.create( BufferGeometry.prototype ); + EdgesGeometry.prototype.constructor = EdgesGeometry; + + // CylinderGeometry + + function CylinderGeometry( radiusTop, radiusBottom, height, radialSegments, heightSegments, openEnded, thetaStart, thetaLength ) { + + Geometry.call(this); + this.type = 'CylinderGeometry'; + + this.parameters = { + radiusTop: radiusTop, + radiusBottom: radiusBottom, + height: height, + radialSegments: radialSegments, + heightSegments: heightSegments, + openEnded: openEnded, + thetaStart: thetaStart, + thetaLength: thetaLength + }; + + this.fromBufferGeometry( new CylinderBufferGeometry( radiusTop, radiusBottom, height, radialSegments, heightSegments, openEnded, thetaStart, thetaLength ) ); + this.mergeVertices(); + + } + + CylinderGeometry.prototype = Object.create( Geometry.prototype ); + CylinderGeometry.prototype.constructor = CylinderGeometry; + + // CylinderBufferGeometry + + function CylinderBufferGeometry( radiusTop, radiusBottom, height, radialSegments, heightSegments, openEnded, thetaStart, thetaLength ) { + + BufferGeometry.call(this); + this.type = 'CylinderBufferGeometry'; + + this.parameters = { + radiusTop: radiusTop, + radiusBottom: radiusBottom, + height: height, + radialSegments: radialSegments, + heightSegments: heightSegments, + openEnded: openEnded, + thetaStart: thetaStart, + thetaLength: thetaLength + }; + + var scope = this; + + radiusTop = radiusTop !== undefined ? radiusTop : 1; + radiusBottom = radiusBottom !== undefined ? radiusBottom : 1; + height = height || 1; + + radialSegments = Math.floor( radialSegments ) || 8; + heightSegments = Math.floor( heightSegments ) || 1; + + openEnded = openEnded !== undefined ? openEnded : false; + thetaStart = thetaStart !== undefined ? thetaStart : 0.0; + thetaLength = thetaLength !== undefined ? thetaLength : Math.PI * 2; + + // buffers + + var indices = []; + var vertices = []; + var normals = []; + var uvs = []; + + // helper variables + + var index = 0; + var indexArray = []; + var halfHeight = height / 2; + var groupStart = 0; + + // generate geometry + + generateTorso(); + + if ( openEnded === false ) { + + if ( radiusTop > 0 ) { generateCap( true ); } + if ( radiusBottom > 0 ) { generateCap( false ); } + + } + + // build geometry + + this.setIndex( indices ); + this.setAttribute( 'position', new Float32BufferAttribute( vertices, 3 ) ); + this.setAttribute( 'normal', new Float32BufferAttribute( normals, 3 ) ); + this.setAttribute( 'uv', new Float32BufferAttribute( uvs, 2 ) ); + + function generateTorso() { + + var normal = new Vector3(); + var vertex = new Vector3(); + + var groupCount = 0; + + // this will be used to calculate the normal + var slope = ( radiusBottom - radiusTop ) / height; + + // generate vertices, normals and uvs + + for ( var y = 0; y <= heightSegments; y ++ ) { + + var indexRow = []; + + var v = y / heightSegments; + + // calculate the radius of the current row + + var radius = v * ( radiusBottom - radiusTop ) + radiusTop; + + for ( var x = 0; x <= radialSegments; x ++ ) { + + var u = x / radialSegments; + + var theta = u * thetaLength + thetaStart; + + var sinTheta = Math.sin( theta ); + var cosTheta = Math.cos( theta ); + + // vertex + + vertex.x = radius * sinTheta; + vertex.y = - v * height + halfHeight; + vertex.z = radius * cosTheta; + vertices.push( vertex.x, vertex.y, vertex.z ); + + // normal + + normal.set( sinTheta, slope, cosTheta ).normalize(); + normals.push( normal.x, normal.y, normal.z ); + + // uv + + uvs.push( u, 1 - v ); + + // save index of vertex in respective row + + indexRow.push( index ++ ); + + } + + // now save vertices of the row in our index array + + indexArray.push( indexRow ); + + } + + // generate indices + + for ( var x$1 = 0; x$1 < radialSegments; x$1 ++ ) { + + for ( var y$1 = 0; y$1 < heightSegments; y$1 ++ ) { + + // we use the index array to access the correct indices + + var a = indexArray[ y$1 ][ x$1 ]; + var b = indexArray[ y$1 + 1 ][ x$1 ]; + var c = indexArray[ y$1 + 1 ][ x$1 + 1 ]; + var d = indexArray[ y$1 ][ x$1 + 1 ]; + + // faces + + indices.push( a, b, d ); + indices.push( b, c, d ); + + // update group counter + + groupCount += 6; + + } + + } + + // add a group to the geometry. this will ensure multi material support + + scope.addGroup( groupStart, groupCount, 0 ); + + // calculate new start value for groups + + groupStart += groupCount; + + } + + function generateCap( top ) { + + // save the index of the first center vertex + var centerIndexStart = index; + + var uv = new Vector2(); + var vertex = new Vector3(); + + var groupCount = 0; + + var radius = ( top === true ) ? radiusTop : radiusBottom; + var sign = ( top === true ) ? 1 : - 1; + + // first we generate the center vertex data of the cap. + // because the geometry needs one set of uvs per face, + // we must generate a center vertex per face/segment + + for ( var x = 1; x <= radialSegments; x ++ ) { + + // vertex + + vertices.push( 0, halfHeight * sign, 0 ); + + // normal + + normals.push( 0, sign, 0 ); + + // uv + + uvs.push( 0.5, 0.5 ); + + // increase index + + index ++; + + } + + // save the index of the last center vertex + var centerIndexEnd = index; + + // now we generate the surrounding vertices, normals and uvs + + for ( var x$1 = 0; x$1 <= radialSegments; x$1 ++ ) { + + var u = x$1 / radialSegments; + var theta = u * thetaLength + thetaStart; + + var cosTheta = Math.cos( theta ); + var sinTheta = Math.sin( theta ); + + // vertex + + vertex.x = radius * sinTheta; + vertex.y = halfHeight * sign; + vertex.z = radius * cosTheta; + vertices.push( vertex.x, vertex.y, vertex.z ); + + // normal + + normals.push( 0, sign, 0 ); + + // uv + + uv.x = ( cosTheta * 0.5 ) + 0.5; + uv.y = ( sinTheta * 0.5 * sign ) + 0.5; + uvs.push( uv.x, uv.y ); + + // increase index + + index ++; + + } + + // generate indices + + for ( var x$2 = 0; x$2 < radialSegments; x$2 ++ ) { + + var c = centerIndexStart + x$2; + var i = centerIndexEnd + x$2; + + if ( top === true ) { + + // face top + + indices.push( i, i + 1, c ); + + } else { + + // face bottom + + indices.push( i + 1, i, c ); + + } + + groupCount += 3; + + } + + // add a group to the geometry. this will ensure multi material support + + scope.addGroup( groupStart, groupCount, top === true ? 1 : 2 ); + + // calculate new start value for groups + + groupStart += groupCount; + + } + + } + + CylinderBufferGeometry.prototype = Object.create( BufferGeometry.prototype ); + CylinderBufferGeometry.prototype.constructor = CylinderBufferGeometry; + + // ConeGeometry + + function ConeGeometry( radius, height, radialSegments, heightSegments, openEnded, thetaStart, thetaLength ) { + + CylinderGeometry.call( this, 0, radius, height, radialSegments, heightSegments, openEnded, thetaStart, thetaLength ); + this.type = 'ConeGeometry'; + + this.parameters = { + radius: radius, + height: height, + radialSegments: radialSegments, + heightSegments: heightSegments, + openEnded: openEnded, + thetaStart: thetaStart, + thetaLength: thetaLength + }; + + } + + ConeGeometry.prototype = Object.create( CylinderGeometry.prototype ); + ConeGeometry.prototype.constructor = ConeGeometry; + + // ConeBufferGeometry + + function ConeBufferGeometry( radius, height, radialSegments, heightSegments, openEnded, thetaStart, thetaLength ) { + + CylinderBufferGeometry.call( this, 0, radius, height, radialSegments, heightSegments, openEnded, thetaStart, thetaLength ); + this.type = 'ConeBufferGeometry'; + + this.parameters = { + radius: radius, + height: height, + radialSegments: radialSegments, + heightSegments: heightSegments, + openEnded: openEnded, + thetaStart: thetaStart, + thetaLength: thetaLength + }; + + } + + ConeBufferGeometry.prototype = Object.create( CylinderBufferGeometry.prototype ); + ConeBufferGeometry.prototype.constructor = ConeBufferGeometry; + + // CircleGeometry + + function CircleGeometry( radius, segments, thetaStart, thetaLength ) { + + Geometry.call(this); + this.type = 'CircleGeometry'; + + this.parameters = { + radius: radius, + segments: segments, + thetaStart: thetaStart, + thetaLength: thetaLength + }; + + this.fromBufferGeometry( new CircleBufferGeometry( radius, segments, thetaStart, thetaLength ) ); + this.mergeVertices(); + + } + + CircleGeometry.prototype = Object.create( Geometry.prototype ); + CircleGeometry.prototype.constructor = CircleGeometry; + + // CircleBufferGeometry + + function CircleBufferGeometry( radius, segments, thetaStart, thetaLength ) { + + BufferGeometry.call(this); + + this.type = 'CircleBufferGeometry'; + + this.parameters = { + radius: radius, + segments: segments, + thetaStart: thetaStart, + thetaLength: thetaLength + }; + + radius = radius || 1; + segments = segments !== undefined ? Math.max( 3, segments ) : 8; + + thetaStart = thetaStart !== undefined ? thetaStart : 0; + thetaLength = thetaLength !== undefined ? thetaLength : Math.PI * 2; + + // buffers + + var indices = []; + var vertices = []; + var normals = []; + var uvs = []; + + // helper variables + + var vertex = new Vector3(); + var uv = new Vector2(); + + // center point + + vertices.push( 0, 0, 0 ); + normals.push( 0, 0, 1 ); + uvs.push( 0.5, 0.5 ); + + for ( var s = 0, i = 3; s <= segments; s ++, i += 3 ) { + + var segment = thetaStart + s / segments * thetaLength; + + // vertex + + vertex.x = radius * Math.cos( segment ); + vertex.y = radius * Math.sin( segment ); + + vertices.push( vertex.x, vertex.y, vertex.z ); + + // normal + + normals.push( 0, 0, 1 ); + + // uvs + + uv.x = ( vertices[ i ] / radius + 1 ) / 2; + uv.y = ( vertices[ i + 1 ] / radius + 1 ) / 2; + + uvs.push( uv.x, uv.y ); + + } + + // indices + + for ( var i$1 = 1; i$1 <= segments; i$1 ++ ) { + + indices.push( i$1, i$1 + 1, 0 ); + + } + + // build geometry + + this.setIndex( indices ); + this.setAttribute( 'position', new Float32BufferAttribute( vertices, 3 ) ); + this.setAttribute( 'normal', new Float32BufferAttribute( normals, 3 ) ); + this.setAttribute( 'uv', new Float32BufferAttribute( uvs, 2 ) ); + + } + + CircleBufferGeometry.prototype = Object.create( BufferGeometry.prototype ); + CircleBufferGeometry.prototype.constructor = CircleBufferGeometry; + + var Geometries = /*#__PURE__*/Object.freeze({ + __proto__: null, + WireframeGeometry: WireframeGeometry, + ParametricGeometry: ParametricGeometry, + ParametricBufferGeometry: ParametricBufferGeometry, + TetrahedronGeometry: TetrahedronGeometry, + TetrahedronBufferGeometry: TetrahedronBufferGeometry, + OctahedronGeometry: OctahedronGeometry, + OctahedronBufferGeometry: OctahedronBufferGeometry, + IcosahedronGeometry: IcosahedronGeometry, + IcosahedronBufferGeometry: IcosahedronBufferGeometry, + DodecahedronGeometry: DodecahedronGeometry, + DodecahedronBufferGeometry: DodecahedronBufferGeometry, + PolyhedronGeometry: PolyhedronGeometry, + PolyhedronBufferGeometry: PolyhedronBufferGeometry, + TubeGeometry: TubeGeometry, + TubeBufferGeometry: TubeBufferGeometry, + TorusKnotGeometry: TorusKnotGeometry, + TorusKnotBufferGeometry: TorusKnotBufferGeometry, + TorusGeometry: TorusGeometry, + TorusBufferGeometry: TorusBufferGeometry, + TextGeometry: TextGeometry, + TextBufferGeometry: TextBufferGeometry, + SphereGeometry: SphereGeometry, + SphereBufferGeometry: SphereBufferGeometry, + RingGeometry: RingGeometry, + RingBufferGeometry: RingBufferGeometry, + PlaneGeometry: PlaneGeometry, + PlaneBufferGeometry: PlaneBufferGeometry, + LatheGeometry: LatheGeometry, + LatheBufferGeometry: LatheBufferGeometry, + ShapeGeometry: ShapeGeometry, + ShapeBufferGeometry: ShapeBufferGeometry, + ExtrudeGeometry: ExtrudeGeometry, + ExtrudeBufferGeometry: ExtrudeBufferGeometry, + EdgesGeometry: EdgesGeometry, + ConeGeometry: ConeGeometry, + ConeBufferGeometry: ConeBufferGeometry, + CylinderGeometry: CylinderGeometry, + CylinderBufferGeometry: CylinderBufferGeometry, + CircleGeometry: CircleGeometry, + CircleBufferGeometry: CircleBufferGeometry, + BoxGeometry: BoxGeometry, + BoxBufferGeometry: BoxBufferGeometry + }); + + /** + * parameters = { + * color: + * } + */ + + function ShadowMaterial( parameters ) { + + Material.call( this ); + + this.type = 'ShadowMaterial'; + + this.color = new Color( 0x000000 ); + this.transparent = true; + + this.setValues( parameters ); + + } + + ShadowMaterial.prototype = Object.create( Material.prototype ); + ShadowMaterial.prototype.constructor = ShadowMaterial; + + ShadowMaterial.prototype.isShadowMaterial = true; + + ShadowMaterial.prototype.copy = function ( source ) { + + Material.prototype.copy.call( this, source ); + + this.color.copy( source.color ); + + return this; + + }; + + function RawShaderMaterial( parameters ) { + + ShaderMaterial.call( this, parameters ); + + this.type = 'RawShaderMaterial'; + + } + + RawShaderMaterial.prototype = Object.create( ShaderMaterial.prototype ); + RawShaderMaterial.prototype.constructor = RawShaderMaterial; + + RawShaderMaterial.prototype.isRawShaderMaterial = true; + + /** + * parameters = { + * color: , + * roughness: , + * metalness: , + * opacity: , + * + * map: new THREE.Texture( ), + * + * lightMap: new THREE.Texture( ), + * lightMapIntensity: + * + * aoMap: new THREE.Texture( ), + * aoMapIntensity: + * + * emissive: , + * emissiveIntensity: + * emissiveMap: new THREE.Texture( ), + * + * bumpMap: new THREE.Texture( ), + * bumpScale: , + * + * normalMap: new THREE.Texture( ), + * normalMapType: THREE.TangentSpaceNormalMap, + * normalScale: , + * + * displacementMap: new THREE.Texture( ), + * displacementScale: , + * displacementBias: , + * + * roughnessMap: new THREE.Texture( ), + * + * metalnessMap: new THREE.Texture( ), + * + * alphaMap: new THREE.Texture( ), + * + * envMap: new THREE.CubeTexture( [posx, negx, posy, negy, posz, negz] ), + * envMapIntensity: + * + * refractionRatio: , + * + * wireframe: , + * wireframeLinewidth: , + * + * skinning: , + * morphTargets: , + * morphNormals: + * } + */ + + function MeshStandardMaterial( parameters ) { + + Material.call( this ); + + this.defines = { 'STANDARD': '' }; + + this.type = 'MeshStandardMaterial'; + + this.color = new Color( 0xffffff ); // diffuse + this.roughness = 1.0; + this.metalness = 0.0; + + this.map = null; + + this.lightMap = null; + this.lightMapIntensity = 1.0; + + this.aoMap = null; + this.aoMapIntensity = 1.0; + + this.emissive = new Color( 0x000000 ); + this.emissiveIntensity = 1.0; + this.emissiveMap = null; + + this.bumpMap = null; + this.bumpScale = 1; + + this.normalMap = null; + this.normalMapType = TangentSpaceNormalMap; + this.normalScale = new Vector2( 1, 1 ); + + this.displacementMap = null; + this.displacementScale = 1; + this.displacementBias = 0; + + this.roughnessMap = null; + + this.metalnessMap = null; + + this.alphaMap = null; + + this.envMap = null; + this.envMapIntensity = 1.0; + + this.refractionRatio = 0.98; + + this.wireframe = false; + this.wireframeLinewidth = 1; + this.wireframeLinecap = 'round'; + this.wireframeLinejoin = 'round'; + + this.skinning = false; + this.morphTargets = false; + this.morphNormals = false; + + this.vertexTangents = false; + + this.setValues( parameters ); + + } + + MeshStandardMaterial.prototype = Object.create( Material.prototype ); + MeshStandardMaterial.prototype.constructor = MeshStandardMaterial; + + MeshStandardMaterial.prototype.isMeshStandardMaterial = true; + + MeshStandardMaterial.prototype.copy = function ( source ) { + + Material.prototype.copy.call( this, source ); + + this.defines = { 'STANDARD': '' }; + + this.color.copy( source.color ); + this.roughness = source.roughness; + this.metalness = source.metalness; + + this.map = source.map; + + this.lightMap = source.lightMap; + this.lightMapIntensity = source.lightMapIntensity; + + this.aoMap = source.aoMap; + this.aoMapIntensity = source.aoMapIntensity; + + this.emissive.copy( source.emissive ); + this.emissiveMap = source.emissiveMap; + this.emissiveIntensity = source.emissiveIntensity; + + this.bumpMap = source.bumpMap; + this.bumpScale = source.bumpScale; + + this.normalMap = source.normalMap; + this.normalMapType = source.normalMapType; + this.normalScale.copy( source.normalScale ); + + this.displacementMap = source.displacementMap; + this.displacementScale = source.displacementScale; + this.displacementBias = source.displacementBias; + + this.roughnessMap = source.roughnessMap; + + this.metalnessMap = source.metalnessMap; + + this.alphaMap = source.alphaMap; + + this.envMap = source.envMap; + this.envMapIntensity = source.envMapIntensity; + + this.refractionRatio = source.refractionRatio; + + this.wireframe = source.wireframe; + this.wireframeLinewidth = source.wireframeLinewidth; + this.wireframeLinecap = source.wireframeLinecap; + this.wireframeLinejoin = source.wireframeLinejoin; + + this.skinning = source.skinning; + this.morphTargets = source.morphTargets; + this.morphNormals = source.morphNormals; + + this.vertexTangents = source.vertexTangents; + + return this; + + }; + + /** + * parameters = { + * clearcoat: , + * clearcoatMap: new THREE.Texture( ), + * clearcoatRoughness: , + * clearcoatRoughnessMap: new THREE.Texture( ), + * clearcoatNormalScale: , + * clearcoatNormalMap: new THREE.Texture( ), + * + * reflectivity: , + * + * sheen: , + * + * transmission: , + * transmissionMap: new THREE.Texture( ) + * } + */ + + function MeshPhysicalMaterial( parameters ) { + + MeshStandardMaterial.call( this ); + + this.defines = { + + 'STANDARD': '', + 'PHYSICAL': '' + + }; + + this.type = 'MeshPhysicalMaterial'; + + this.clearcoat = 0.0; + this.clearcoatMap = null; + this.clearcoatRoughness = 0.0; + this.clearcoatRoughnessMap = null; + this.clearcoatNormalScale = new Vector2( 1, 1 ); + this.clearcoatNormalMap = null; + + this.reflectivity = 0.5; // maps to F0 = 0.04 + + this.sheen = null; // null will disable sheen bsdf + + this.transmission = 0.0; + this.transmissionMap = null; + + this.setValues( parameters ); + + } + + MeshPhysicalMaterial.prototype = Object.create( MeshStandardMaterial.prototype ); + MeshPhysicalMaterial.prototype.constructor = MeshPhysicalMaterial; + + MeshPhysicalMaterial.prototype.isMeshPhysicalMaterial = true; + + MeshPhysicalMaterial.prototype.copy = function ( source ) { + + MeshStandardMaterial.prototype.copy.call( this, source ); + + this.defines = { + + 'STANDARD': '', + 'PHYSICAL': '' + + }; + + this.clearcoat = source.clearcoat; + this.clearcoatMap = source.clearcoatMap; + this.clearcoatRoughness = source.clearcoatRoughness; + this.clearcoatRoughnessMap = source.clearcoatRoughnessMap; + this.clearcoatNormalMap = source.clearcoatNormalMap; + this.clearcoatNormalScale.copy( source.clearcoatNormalScale ); + + this.reflectivity = source.reflectivity; + + if ( source.sheen ) { + + this.sheen = ( this.sheen || new Color() ).copy( source.sheen ); + + } else { + + this.sheen = null; + + } + + this.transmission = source.transmission; + this.transmissionMap = source.transmissionMap; + + return this; + + }; + + /** + * parameters = { + * color: , + * specular: , + * shininess: , + * opacity: , + * + * map: new THREE.Texture( ), + * + * lightMap: new THREE.Texture( ), + * lightMapIntensity: + * + * aoMap: new THREE.Texture( ), + * aoMapIntensity: + * + * emissive: , + * emissiveIntensity: + * emissiveMap: new THREE.Texture( ), + * + * bumpMap: new THREE.Texture( ), + * bumpScale: , + * + * normalMap: new THREE.Texture( ), + * normalMapType: THREE.TangentSpaceNormalMap, + * normalScale: , + * + * displacementMap: new THREE.Texture( ), + * displacementScale: , + * displacementBias: , + * + * specularMap: new THREE.Texture( ), + * + * alphaMap: new THREE.Texture( ), + * + * envMap: new THREE.CubeTexture( [posx, negx, posy, negy, posz, negz] ), + * combine: THREE.MultiplyOperation, + * reflectivity: , + * refractionRatio: , + * + * wireframe: , + * wireframeLinewidth: , + * + * skinning: , + * morphTargets: , + * morphNormals: + * } + */ + + function MeshPhongMaterial( parameters ) { + + Material.call( this ); + + this.type = 'MeshPhongMaterial'; + + this.color = new Color( 0xffffff ); // diffuse + this.specular = new Color( 0x111111 ); + this.shininess = 30; + + this.map = null; + + this.lightMap = null; + this.lightMapIntensity = 1.0; + + this.aoMap = null; + this.aoMapIntensity = 1.0; + + this.emissive = new Color( 0x000000 ); + this.emissiveIntensity = 1.0; + this.emissiveMap = null; + + this.bumpMap = null; + this.bumpScale = 1; + + this.normalMap = null; + this.normalMapType = TangentSpaceNormalMap; + this.normalScale = new Vector2( 1, 1 ); + + this.displacementMap = null; + this.displacementScale = 1; + this.displacementBias = 0; + + this.specularMap = null; + + this.alphaMap = null; + + this.envMap = null; + this.combine = MultiplyOperation; + this.reflectivity = 1; + this.refractionRatio = 0.98; + + this.wireframe = false; + this.wireframeLinewidth = 1; + this.wireframeLinecap = 'round'; + this.wireframeLinejoin = 'round'; + + this.skinning = false; + this.morphTargets = false; + this.morphNormals = false; + + this.setValues( parameters ); + + } + + MeshPhongMaterial.prototype = Object.create( Material.prototype ); + MeshPhongMaterial.prototype.constructor = MeshPhongMaterial; + + MeshPhongMaterial.prototype.isMeshPhongMaterial = true; + + MeshPhongMaterial.prototype.copy = function ( source ) { + + Material.prototype.copy.call( this, source ); + + this.color.copy( source.color ); + this.specular.copy( source.specular ); + this.shininess = source.shininess; + + this.map = source.map; + + this.lightMap = source.lightMap; + this.lightMapIntensity = source.lightMapIntensity; + + this.aoMap = source.aoMap; + this.aoMapIntensity = source.aoMapIntensity; + + this.emissive.copy( source.emissive ); + this.emissiveMap = source.emissiveMap; + this.emissiveIntensity = source.emissiveIntensity; + + this.bumpMap = source.bumpMap; + this.bumpScale = source.bumpScale; + + this.normalMap = source.normalMap; + this.normalMapType = source.normalMapType; + this.normalScale.copy( source.normalScale ); + + this.displacementMap = source.displacementMap; + this.displacementScale = source.displacementScale; + this.displacementBias = source.displacementBias; + + this.specularMap = source.specularMap; + + this.alphaMap = source.alphaMap; + + this.envMap = source.envMap; + this.combine = source.combine; + this.reflectivity = source.reflectivity; + this.refractionRatio = source.refractionRatio; + + this.wireframe = source.wireframe; + this.wireframeLinewidth = source.wireframeLinewidth; + this.wireframeLinecap = source.wireframeLinecap; + this.wireframeLinejoin = source.wireframeLinejoin; + + this.skinning = source.skinning; + this.morphTargets = source.morphTargets; + this.morphNormals = source.morphNormals; + + return this; + + }; + + /** + * parameters = { + * color: , + * + * map: new THREE.Texture( ), + * gradientMap: new THREE.Texture( ), + * + * lightMap: new THREE.Texture( ), + * lightMapIntensity: + * + * aoMap: new THREE.Texture( ), + * aoMapIntensity: + * + * emissive: , + * emissiveIntensity: + * emissiveMap: new THREE.Texture( ), + * + * bumpMap: new THREE.Texture( ), + * bumpScale: , + * + * normalMap: new THREE.Texture( ), + * normalMapType: THREE.TangentSpaceNormalMap, + * normalScale: , + * + * displacementMap: new THREE.Texture( ), + * displacementScale: , + * displacementBias: , + * + * alphaMap: new THREE.Texture( ), + * + * wireframe: , + * wireframeLinewidth: , + * + * skinning: , + * morphTargets: , + * morphNormals: + * } + */ + + function MeshToonMaterial( parameters ) { + + Material.call( this ); + + this.defines = { 'TOON': '' }; + + this.type = 'MeshToonMaterial'; + + this.color = new Color( 0xffffff ); + + this.map = null; + this.gradientMap = null; + + this.lightMap = null; + this.lightMapIntensity = 1.0; + + this.aoMap = null; + this.aoMapIntensity = 1.0; + + this.emissive = new Color( 0x000000 ); + this.emissiveIntensity = 1.0; + this.emissiveMap = null; + + this.bumpMap = null; + this.bumpScale = 1; + + this.normalMap = null; + this.normalMapType = TangentSpaceNormalMap; + this.normalScale = new Vector2( 1, 1 ); + + this.displacementMap = null; + this.displacementScale = 1; + this.displacementBias = 0; + + this.alphaMap = null; + + this.wireframe = false; + this.wireframeLinewidth = 1; + this.wireframeLinecap = 'round'; + this.wireframeLinejoin = 'round'; + + this.skinning = false; + this.morphTargets = false; + this.morphNormals = false; + + this.setValues( parameters ); + + } + + MeshToonMaterial.prototype = Object.create( Material.prototype ); + MeshToonMaterial.prototype.constructor = MeshToonMaterial; + + MeshToonMaterial.prototype.isMeshToonMaterial = true; + + MeshToonMaterial.prototype.copy = function ( source ) { + + Material.prototype.copy.call( this, source ); + + this.color.copy( source.color ); + + this.map = source.map; + this.gradientMap = source.gradientMap; + + this.lightMap = source.lightMap; + this.lightMapIntensity = source.lightMapIntensity; + + this.aoMap = source.aoMap; + this.aoMapIntensity = source.aoMapIntensity; + + this.emissive.copy( source.emissive ); + this.emissiveMap = source.emissiveMap; + this.emissiveIntensity = source.emissiveIntensity; + + this.bumpMap = source.bumpMap; + this.bumpScale = source.bumpScale; + + this.normalMap = source.normalMap; + this.normalMapType = source.normalMapType; + this.normalScale.copy( source.normalScale ); + + this.displacementMap = source.displacementMap; + this.displacementScale = source.displacementScale; + this.displacementBias = source.displacementBias; + + this.alphaMap = source.alphaMap; + + this.wireframe = source.wireframe; + this.wireframeLinewidth = source.wireframeLinewidth; + this.wireframeLinecap = source.wireframeLinecap; + this.wireframeLinejoin = source.wireframeLinejoin; + + this.skinning = source.skinning; + this.morphTargets = source.morphTargets; + this.morphNormals = source.morphNormals; + + return this; + + }; + + /** + * parameters = { + * opacity: , + * + * bumpMap: new THREE.Texture( ), + * bumpScale: , + * + * normalMap: new THREE.Texture( ), + * normalMapType: THREE.TangentSpaceNormalMap, + * normalScale: , + * + * displacementMap: new THREE.Texture( ), + * displacementScale: , + * displacementBias: , + * + * wireframe: , + * wireframeLinewidth: + * + * skinning: , + * morphTargets: , + * morphNormals: + * } + */ + + function MeshNormalMaterial( parameters ) { + + Material.call( this ); + + this.type = 'MeshNormalMaterial'; + + this.bumpMap = null; + this.bumpScale = 1; + + this.normalMap = null; + this.normalMapType = TangentSpaceNormalMap; + this.normalScale = new Vector2( 1, 1 ); + + this.displacementMap = null; + this.displacementScale = 1; + this.displacementBias = 0; + + this.wireframe = false; + this.wireframeLinewidth = 1; + + this.fog = false; + + this.skinning = false; + this.morphTargets = false; + this.morphNormals = false; + + this.setValues( parameters ); + + } + + MeshNormalMaterial.prototype = Object.create( Material.prototype ); + MeshNormalMaterial.prototype.constructor = MeshNormalMaterial; + + MeshNormalMaterial.prototype.isMeshNormalMaterial = true; + + MeshNormalMaterial.prototype.copy = function ( source ) { + + Material.prototype.copy.call( this, source ); + + this.bumpMap = source.bumpMap; + this.bumpScale = source.bumpScale; + + this.normalMap = source.normalMap; + this.normalMapType = source.normalMapType; + this.normalScale.copy( source.normalScale ); + + this.displacementMap = source.displacementMap; + this.displacementScale = source.displacementScale; + this.displacementBias = source.displacementBias; + + this.wireframe = source.wireframe; + this.wireframeLinewidth = source.wireframeLinewidth; + + this.skinning = source.skinning; + this.morphTargets = source.morphTargets; + this.morphNormals = source.morphNormals; + + return this; + + }; + + /** + * parameters = { + * color: , + * opacity: , + * + * map: new THREE.Texture( ), + * + * lightMap: new THREE.Texture( ), + * lightMapIntensity: + * + * aoMap: new THREE.Texture( ), + * aoMapIntensity: + * + * emissive: , + * emissiveIntensity: + * emissiveMap: new THREE.Texture( ), + * + * specularMap: new THREE.Texture( ), + * + * alphaMap: new THREE.Texture( ), + * + * envMap: new THREE.CubeTexture( [posx, negx, posy, negy, posz, negz] ), + * combine: THREE.Multiply, + * reflectivity: , + * refractionRatio: , + * + * wireframe: , + * wireframeLinewidth: , + * + * skinning: , + * morphTargets: , + * morphNormals: + * } + */ + + function MeshLambertMaterial( parameters ) { + + Material.call( this ); + + this.type = 'MeshLambertMaterial'; + + this.color = new Color( 0xffffff ); // diffuse + + this.map = null; + + this.lightMap = null; + this.lightMapIntensity = 1.0; + + this.aoMap = null; + this.aoMapIntensity = 1.0; + + this.emissive = new Color( 0x000000 ); + this.emissiveIntensity = 1.0; + this.emissiveMap = null; + + this.specularMap = null; + + this.alphaMap = null; + + this.envMap = null; + this.combine = MultiplyOperation; + this.reflectivity = 1; + this.refractionRatio = 0.98; + + this.wireframe = false; + this.wireframeLinewidth = 1; + this.wireframeLinecap = 'round'; + this.wireframeLinejoin = 'round'; + + this.skinning = false; + this.morphTargets = false; + this.morphNormals = false; + + this.setValues( parameters ); + + } + + MeshLambertMaterial.prototype = Object.create( Material.prototype ); + MeshLambertMaterial.prototype.constructor = MeshLambertMaterial; + + MeshLambertMaterial.prototype.isMeshLambertMaterial = true; + + MeshLambertMaterial.prototype.copy = function ( source ) { + + Material.prototype.copy.call( this, source ); + + this.color.copy( source.color ); + + this.map = source.map; + + this.lightMap = source.lightMap; + this.lightMapIntensity = source.lightMapIntensity; + + this.aoMap = source.aoMap; + this.aoMapIntensity = source.aoMapIntensity; + + this.emissive.copy( source.emissive ); + this.emissiveMap = source.emissiveMap; + this.emissiveIntensity = source.emissiveIntensity; + + this.specularMap = source.specularMap; + + this.alphaMap = source.alphaMap; + + this.envMap = source.envMap; + this.combine = source.combine; + this.reflectivity = source.reflectivity; + this.refractionRatio = source.refractionRatio; + + this.wireframe = source.wireframe; + this.wireframeLinewidth = source.wireframeLinewidth; + this.wireframeLinecap = source.wireframeLinecap; + this.wireframeLinejoin = source.wireframeLinejoin; + + this.skinning = source.skinning; + this.morphTargets = source.morphTargets; + this.morphNormals = source.morphNormals; + + return this; + + }; + + /** + * parameters = { + * color: , + * opacity: , + * + * matcap: new THREE.Texture( ), + * + * map: new THREE.Texture( ), + * + * bumpMap: new THREE.Texture( ), + * bumpScale: , + * + * normalMap: new THREE.Texture( ), + * normalMapType: THREE.TangentSpaceNormalMap, + * normalScale: , + * + * displacementMap: new THREE.Texture( ), + * displacementScale: , + * displacementBias: , + * + * alphaMap: new THREE.Texture( ), + * + * skinning: , + * morphTargets: , + * morphNormals: + * } + */ + + function MeshMatcapMaterial( parameters ) { + + Material.call( this ); + + this.defines = { 'MATCAP': '' }; + + this.type = 'MeshMatcapMaterial'; + + this.color = new Color( 0xffffff ); // diffuse + + this.matcap = null; + + this.map = null; + + this.bumpMap = null; + this.bumpScale = 1; + + this.normalMap = null; + this.normalMapType = TangentSpaceNormalMap; + this.normalScale = new Vector2( 1, 1 ); + + this.displacementMap = null; + this.displacementScale = 1; + this.displacementBias = 0; + + this.alphaMap = null; + + this.skinning = false; + this.morphTargets = false; + this.morphNormals = false; + + this.setValues( parameters ); + + } + + MeshMatcapMaterial.prototype = Object.create( Material.prototype ); + MeshMatcapMaterial.prototype.constructor = MeshMatcapMaterial; + + MeshMatcapMaterial.prototype.isMeshMatcapMaterial = true; + + MeshMatcapMaterial.prototype.copy = function ( source ) { + + Material.prototype.copy.call( this, source ); + + this.defines = { 'MATCAP': '' }; + + this.color.copy( source.color ); + + this.matcap = source.matcap; + + this.map = source.map; + + this.bumpMap = source.bumpMap; + this.bumpScale = source.bumpScale; + + this.normalMap = source.normalMap; + this.normalMapType = source.normalMapType; + this.normalScale.copy( source.normalScale ); + + this.displacementMap = source.displacementMap; + this.displacementScale = source.displacementScale; + this.displacementBias = source.displacementBias; + + this.alphaMap = source.alphaMap; + + this.skinning = source.skinning; + this.morphTargets = source.morphTargets; + this.morphNormals = source.morphNormals; + + return this; + + }; + + /** + * parameters = { + * color: , + * opacity: , + * + * linewidth: , + * + * scale: , + * dashSize: , + * gapSize: + * } + */ + + function LineDashedMaterial( parameters ) { + + LineBasicMaterial.call( this ); + + this.type = 'LineDashedMaterial'; + + this.scale = 1; + this.dashSize = 3; + this.gapSize = 1; + + this.setValues( parameters ); + + } + + LineDashedMaterial.prototype = Object.create( LineBasicMaterial.prototype ); + LineDashedMaterial.prototype.constructor = LineDashedMaterial; + + LineDashedMaterial.prototype.isLineDashedMaterial = true; + + LineDashedMaterial.prototype.copy = function ( source ) { + + LineBasicMaterial.prototype.copy.call( this, source ); + + this.scale = source.scale; + this.dashSize = source.dashSize; + this.gapSize = source.gapSize; + + return this; + + }; + + var Materials = /*#__PURE__*/Object.freeze({ + __proto__: null, + ShadowMaterial: ShadowMaterial, + SpriteMaterial: SpriteMaterial, + RawShaderMaterial: RawShaderMaterial, + ShaderMaterial: ShaderMaterial, + PointsMaterial: PointsMaterial, + MeshPhysicalMaterial: MeshPhysicalMaterial, + MeshStandardMaterial: MeshStandardMaterial, + MeshPhongMaterial: MeshPhongMaterial, + MeshToonMaterial: MeshToonMaterial, + MeshNormalMaterial: MeshNormalMaterial, + MeshLambertMaterial: MeshLambertMaterial, + MeshDepthMaterial: MeshDepthMaterial, + MeshDistanceMaterial: MeshDistanceMaterial, + MeshBasicMaterial: MeshBasicMaterial, + MeshMatcapMaterial: MeshMatcapMaterial, + LineDashedMaterial: LineDashedMaterial, + LineBasicMaterial: LineBasicMaterial, + Material: Material + }); + + var AnimationUtils = { + + // same as Array.prototype.slice, but also works on typed arrays + arraySlice: function ( array, from, to ) { + + if ( AnimationUtils.isTypedArray( array ) ) { + + // in ios9 array.subarray(from, undefined) will return empty array + // but array.subarray(from) or array.subarray(from, len) is correct + return new array.constructor( array.subarray( from, to !== undefined ? to : array.length ) ); + + } + + return array.slice( from, to ); + + }, + + // converts an array to a specific type + convertArray: function ( array, type, forceClone ) { + + if ( ! array || // let 'undefined' and 'null' pass + ! forceClone && array.constructor === type ) { return array; } + + if ( typeof type.BYTES_PER_ELEMENT === 'number' ) { + + return new type( array ); // create typed array + + } + + return Array.prototype.slice.call( array ); // create Array + + }, + + isTypedArray: function ( object ) { + + return ArrayBuffer.isView( object ) && + ! ( object instanceof DataView ); + + }, + + // returns an array by which times and values can be sorted + getKeyframeOrder: function ( times ) { + + function compareTime( i, j ) { + + return times[ i ] - times[ j ]; + + } + + var n = times.length; + var result = new Array( n ); + for ( var i = 0; i !== n; ++ i ) { result[ i ] = i; } + + result.sort( compareTime ); + + return result; + + }, + + // uses the array previously returned by 'getKeyframeOrder' to sort data + sortedArray: function ( values, stride, order ) { + + var nValues = values.length; + var result = new values.constructor( nValues ); + + for ( var i = 0, dstOffset = 0; dstOffset !== nValues; ++ i ) { + + var srcOffset = order[ i ] * stride; + + for ( var j = 0; j !== stride; ++ j ) { + + result[ dstOffset ++ ] = values[ srcOffset + j ]; + + } + + } + + return result; + + }, + + // function for parsing AOS keyframe formats + flattenJSON: function ( jsonKeys, times, values, valuePropertyName ) { + + var i = 1, key = jsonKeys[ 0 ]; + + while ( key !== undefined && key[ valuePropertyName ] === undefined ) { + + key = jsonKeys[ i ++ ]; + + } + + if ( key === undefined ) { return; } // no data + + var value = key[ valuePropertyName ]; + if ( value === undefined ) { return; } // no data + + if ( Array.isArray( value ) ) { + + do { + + value = key[ valuePropertyName ]; + + if ( value !== undefined ) { + + times.push( key.time ); + values.push.apply( values, value ); // push all elements + + } + + key = jsonKeys[ i ++ ]; + + } while ( key !== undefined ); + + } else if ( value.toArray !== undefined ) { + + // ...assume THREE.Math-ish + + do { + + value = key[ valuePropertyName ]; + + if ( value !== undefined ) { + + times.push( key.time ); + value.toArray( values, values.length ); + + } + + key = jsonKeys[ i ++ ]; + + } while ( key !== undefined ); + + } else { + + // otherwise push as-is + + do { + + value = key[ valuePropertyName ]; + + if ( value !== undefined ) { + + times.push( key.time ); + values.push( value ); + + } + + key = jsonKeys[ i ++ ]; + + } while ( key !== undefined ); + + } + + }, + + subclip: function ( sourceClip, name, startFrame, endFrame, fps ) { + + fps = fps || 30; + + var clip = sourceClip.clone(); + + clip.name = name; + + var tracks = []; + + for ( var i = 0; i < clip.tracks.length; ++ i ) { + + var track = clip.tracks[ i ]; + var valueSize = track.getValueSize(); + + var times = []; + var values = []; + + for ( var j = 0; j < track.times.length; ++ j ) { + + var frame = track.times[ j ] * fps; + + if ( frame < startFrame || frame >= endFrame ) { continue; } + + times.push( track.times[ j ] ); + + for ( var k = 0; k < valueSize; ++ k ) { + + values.push( track.values[ j * valueSize + k ] ); + + } + + } + + if ( times.length === 0 ) { continue; } + + track.times = AnimationUtils.convertArray( times, track.times.constructor ); + track.values = AnimationUtils.convertArray( values, track.values.constructor ); + + tracks.push( track ); + + } + + clip.tracks = tracks; + + // find minimum .times value across all tracks in the trimmed clip + + var minStartTime = Infinity; + + for ( var i$1 = 0; i$1 < clip.tracks.length; ++ i$1 ) { + + if ( minStartTime > clip.tracks[ i$1 ].times[ 0 ] ) { + + minStartTime = clip.tracks[ i$1 ].times[ 0 ]; + + } + + } + + // shift all tracks such that clip begins at t=0 + + for ( var i$2 = 0; i$2 < clip.tracks.length; ++ i$2 ) { + + clip.tracks[ i$2 ].shift( - 1 * minStartTime ); + + } + + clip.resetDuration(); + + return clip; + + }, + + makeClipAdditive: function ( targetClip, referenceFrame, referenceClip, fps ) { + + if ( referenceFrame === undefined ) { referenceFrame = 0; } + if ( referenceClip === undefined ) { referenceClip = targetClip; } + if ( fps === undefined || fps <= 0 ) { fps = 30; } + + var numTracks = targetClip.tracks.length; + var referenceTime = referenceFrame / fps; + + // Make each track's values relative to the values at the reference frame + var loop = function ( i ) { + + var referenceTrack = referenceClip.tracks[ i ]; + var referenceTrackType = referenceTrack.ValueTypeName; + + // Skip this track if it's non-numeric + if ( referenceTrackType === 'bool' || referenceTrackType === 'string' ) { return; } + + // Find the track in the target clip whose name and type matches the reference track + var targetTrack = targetClip.tracks.find( function ( track ) { + + return track.name === referenceTrack.name + && track.ValueTypeName === referenceTrackType; + + } ); + + if ( targetTrack === undefined ) { return; } + + var referenceOffset = 0; + var referenceValueSize = referenceTrack.getValueSize(); + + if ( referenceTrack.createInterpolant.isInterpolantFactoryMethodGLTFCubicSpline ) { + + referenceOffset = referenceValueSize / 3; + + } + + var targetOffset = 0; + var targetValueSize = targetTrack.getValueSize(); + + if ( targetTrack.createInterpolant.isInterpolantFactoryMethodGLTFCubicSpline ) { + + targetOffset = targetValueSize / 3; + + } + + var lastIndex = referenceTrack.times.length - 1; + var referenceValue = (void 0); + + // Find the value to subtract out of the track + if ( referenceTime <= referenceTrack.times[ 0 ] ) { + + // Reference frame is earlier than the first keyframe, so just use the first keyframe + var startIndex = referenceOffset; + var endIndex = referenceValueSize - referenceOffset; + referenceValue = AnimationUtils.arraySlice( referenceTrack.values, startIndex, endIndex ); + + } else if ( referenceTime >= referenceTrack.times[ lastIndex ] ) { + + // Reference frame is after the last keyframe, so just use the last keyframe + var startIndex$1 = lastIndex * referenceValueSize + referenceOffset; + var endIndex$1 = startIndex$1 + referenceValueSize - referenceOffset; + referenceValue = AnimationUtils.arraySlice( referenceTrack.values, startIndex$1, endIndex$1 ); + + } else { + + // Interpolate to the reference value + var interpolant = referenceTrack.createInterpolant(); + var startIndex$2 = referenceOffset; + var endIndex$2 = referenceValueSize - referenceOffset; + interpolant.evaluate( referenceTime ); + referenceValue = AnimationUtils.arraySlice( interpolant.resultBuffer, startIndex$2, endIndex$2 ); + + } + + // Conjugate the quaternion + if ( referenceTrackType === 'quaternion' ) { + + var referenceQuat = new Quaternion().fromArray( referenceValue ).normalize().conjugate(); + referenceQuat.toArray( referenceValue ); + + } + + // Subtract the reference value from all of the track values + + var numTimes = targetTrack.times.length; + for ( var j = 0; j < numTimes; ++ j ) { + + var valueStart = j * targetValueSize + targetOffset; + + if ( referenceTrackType === 'quaternion' ) { + + // Multiply the conjugate for quaternion track types + Quaternion.multiplyQuaternionsFlat( + targetTrack.values, + valueStart, + referenceValue, + 0, + targetTrack.values, + valueStart + ); + + } else { + + var valueEnd = targetValueSize - targetOffset * 2; + + // Subtract each value for all other numeric track types + for ( var k = 0; k < valueEnd; ++ k ) { + + targetTrack.values[ valueStart + k ] -= referenceValue[ k ]; + + } + + } + + } + + }; + + for ( var i = 0; i < numTracks; ++ i ) loop( i ); + + targetClip.blendMode = AdditiveAnimationBlendMode; + + return targetClip; + + } + + }; + + /** + * Abstract base class of interpolants over parametric samples. + * + * The parameter domain is one dimensional, typically the time or a path + * along a curve defined by the data. + * + * The sample values can have any dimensionality and derived classes may + * apply special interpretations to the data. + * + * This class provides the interval seek in a Template Method, deferring + * the actual interpolation to derived classes. + * + * Time complexity is O(1) for linear access crossing at most two points + * and O(log N) for random access, where N is the number of positions. + * + * References: + * + * http://www.oodesign.com/template-method-pattern.html + * + */ + + function Interpolant( parameterPositions, sampleValues, sampleSize, resultBuffer ) { + + this.parameterPositions = parameterPositions; + this._cachedIndex = 0; + + this.resultBuffer = resultBuffer !== undefined ? + resultBuffer : new sampleValues.constructor( sampleSize ); + this.sampleValues = sampleValues; + this.valueSize = sampleSize; + + } + + Object.assign( Interpolant.prototype, { + + evaluate: function ( t ) { + + var pp = this.parameterPositions; + var i1 = this._cachedIndex, + t1 = pp[ i1 ], + t0 = pp[ i1 - 1 ]; + + validate_interval: { + + seek: { + + var right; + + linear_scan: { + + //- See http://jsperf.com/comparison-to-undefined/3 + //- slower code: + //- + //- if ( t >= t1 || t1 === undefined ) { + forward_scan: if ( ! ( t < t1 ) ) { + + for ( var giveUpAt = i1 + 2; ; ) { + + if ( t1 === undefined ) { + + if ( t < t0 ) { break forward_scan; } + + // after end + + i1 = pp.length; + this._cachedIndex = i1; + return this.afterEnd_( i1 - 1, t, t0 ); + + } + + if ( i1 === giveUpAt ) { break; } // this loop + + t0 = t1; + t1 = pp[ ++ i1 ]; + + if ( t < t1 ) { + + // we have arrived at the sought interval + break seek; + + } + + } + + // prepare binary search on the right side of the index + right = pp.length; + break linear_scan; + + } + + //- slower code: + //- if ( t < t0 || t0 === undefined ) { + if ( ! ( t >= t0 ) ) { + + // looping? + + var t1global = pp[ 1 ]; + + if ( t < t1global ) { + + i1 = 2; // + 1, using the scan for the details + t0 = t1global; + + } + + // linear reverse scan + + for ( var giveUpAt$1 = i1 - 2; ; ) { + + if ( t0 === undefined ) { + + // before start + + this._cachedIndex = 0; + return this.beforeStart_( 0, t, t1 ); + + } + + if ( i1 === giveUpAt$1 ) { break; } // this loop + + t1 = t0; + t0 = pp[ -- i1 - 1 ]; + + if ( t >= t0 ) { + + // we have arrived at the sought interval + break seek; + + } + + } + + // prepare binary search on the left side of the index + right = i1; + i1 = 0; + break linear_scan; + + } + + // the interval is valid + + break validate_interval; + + } // linear scan + + // binary search + + while ( i1 < right ) { + + var mid = ( i1 + right ) >>> 1; + + if ( t < pp[ mid ] ) { + + right = mid; + + } else { + + i1 = mid + 1; + + } + + } + + t1 = pp[ i1 ]; + t0 = pp[ i1 - 1 ]; + + // check boundary cases, again + + if ( t0 === undefined ) { + + this._cachedIndex = 0; + return this.beforeStart_( 0, t, t1 ); + + } + + if ( t1 === undefined ) { + + i1 = pp.length; + this._cachedIndex = i1; + return this.afterEnd_( i1 - 1, t0, t ); + + } + + } // seek + + this._cachedIndex = i1; + + this.intervalChanged_( i1, t0, t1 ); + + } // validate_interval + + return this.interpolate_( i1, t0, t, t1 ); + + }, + + settings: null, // optional, subclass-specific settings structure + // Note: The indirection allows central control of many interpolants. + + // --- Protected interface + + DefaultSettings_: {}, + + getSettings_: function () { + + return this.settings || this.DefaultSettings_; + + }, + + copySampleValue_: function ( index ) { + + // copies a sample value to the result buffer + + var result = this.resultBuffer, + values = this.sampleValues, + stride = this.valueSize, + offset = index * stride; + + for ( var i = 0; i !== stride; ++ i ) { + + result[ i ] = values[ offset + i ]; + + } + + return result; + + }, + + // Template methods for derived classes: + + interpolate_: function ( /* i1, t0, t, t1 */ ) { + + throw new Error( 'call to abstract method' ); + // implementations shall return this.resultBuffer + + }, + + intervalChanged_: function ( /* i1, t0, t1 */ ) { + + // empty + + } + + } ); + + // DECLARE ALIAS AFTER assign prototype + Object.assign( Interpolant.prototype, { + + //( 0, t, t0 ), returns this.resultBuffer + beforeStart_: Interpolant.prototype.copySampleValue_, + + //( N-1, tN-1, t ), returns this.resultBuffer + afterEnd_: Interpolant.prototype.copySampleValue_, + + } ); + + /** + * Fast and simple cubic spline interpolant. + * + * It was derived from a Hermitian construction setting the first derivative + * at each sample position to the linear slope between neighboring positions + * over their parameter interval. + */ + + function CubicInterpolant( parameterPositions, sampleValues, sampleSize, resultBuffer ) { + + Interpolant.call( this, parameterPositions, sampleValues, sampleSize, resultBuffer ); + + this._weightPrev = - 0; + this._offsetPrev = - 0; + this._weightNext = - 0; + this._offsetNext = - 0; + + } + + CubicInterpolant.prototype = Object.assign( Object.create( Interpolant.prototype ), { + + constructor: CubicInterpolant, + + DefaultSettings_: { + + endingStart: ZeroCurvatureEnding, + endingEnd: ZeroCurvatureEnding + + }, + + intervalChanged_: function ( i1, t0, t1 ) { + + var pp = this.parameterPositions; + var iPrev = i1 - 2, + iNext = i1 + 1, + + tPrev = pp[ iPrev ], + tNext = pp[ iNext ]; + + if ( tPrev === undefined ) { + + switch ( this.getSettings_().endingStart ) { + + case ZeroSlopeEnding: + + // f'(t0) = 0 + iPrev = i1; + tPrev = 2 * t0 - t1; + + break; + + case WrapAroundEnding: + + // use the other end of the curve + iPrev = pp.length - 2; + tPrev = t0 + pp[ iPrev ] - pp[ iPrev + 1 ]; + + break; + + default: // ZeroCurvatureEnding + + // f''(t0) = 0 a.k.a. Natural Spline + iPrev = i1; + tPrev = t1; + + } + + } + + if ( tNext === undefined ) { + + switch ( this.getSettings_().endingEnd ) { + + case ZeroSlopeEnding: + + // f'(tN) = 0 + iNext = i1; + tNext = 2 * t1 - t0; + + break; + + case WrapAroundEnding: + + // use the other end of the curve + iNext = 1; + tNext = t1 + pp[ 1 ] - pp[ 0 ]; + + break; + + default: // ZeroCurvatureEnding + + // f''(tN) = 0, a.k.a. Natural Spline + iNext = i1 - 1; + tNext = t0; + + } + + } + + var halfDt = ( t1 - t0 ) * 0.5, + stride = this.valueSize; + + this._weightPrev = halfDt / ( t0 - tPrev ); + this._weightNext = halfDt / ( tNext - t1 ); + this._offsetPrev = iPrev * stride; + this._offsetNext = iNext * stride; + + }, + + interpolate_: function ( i1, t0, t, t1 ) { + + var result = this.resultBuffer, + values = this.sampleValues, + stride = this.valueSize, + + o1 = i1 * stride, o0 = o1 - stride, + oP = this._offsetPrev, oN = this._offsetNext, + wP = this._weightPrev, wN = this._weightNext, + + p = ( t - t0 ) / ( t1 - t0 ), + pp = p * p, + ppp = pp * p; + + // evaluate polynomials + + var sP = - wP * ppp + 2 * wP * pp - wP * p; + var s0 = ( 1 + wP ) * ppp + ( - 1.5 - 2 * wP ) * pp + ( - 0.5 + wP ) * p + 1; + var s1 = ( - 1 - wN ) * ppp + ( 1.5 + wN ) * pp + 0.5 * p; + var sN = wN * ppp - wN * pp; + + // combine data linearly + + for ( var i = 0; i !== stride; ++ i ) { + + result[ i ] = + sP * values[ oP + i ] + + s0 * values[ o0 + i ] + + s1 * values[ o1 + i ] + + sN * values[ oN + i ]; + + } + + return result; + + } + + } ); + + function LinearInterpolant( parameterPositions, sampleValues, sampleSize, resultBuffer ) { + + Interpolant.call( this, parameterPositions, sampleValues, sampleSize, resultBuffer ); + + } + + LinearInterpolant.prototype = Object.assign( Object.create( Interpolant.prototype ), { + + constructor: LinearInterpolant, + + interpolate_: function ( i1, t0, t, t1 ) { + + var result = this.resultBuffer, + values = this.sampleValues, + stride = this.valueSize, + + offset1 = i1 * stride, + offset0 = offset1 - stride, + + weight1 = ( t - t0 ) / ( t1 - t0 ), + weight0 = 1 - weight1; + + for ( var i = 0; i !== stride; ++ i ) { + + result[ i ] = + values[ offset0 + i ] * weight0 + + values[ offset1 + i ] * weight1; + + } + + return result; + + } + + } ); + + /** + * + * Interpolant that evaluates to the sample value at the position preceeding + * the parameter. + */ + + function DiscreteInterpolant( parameterPositions, sampleValues, sampleSize, resultBuffer ) { + + Interpolant.call( this, parameterPositions, sampleValues, sampleSize, resultBuffer ); + + } + + DiscreteInterpolant.prototype = Object.assign( Object.create( Interpolant.prototype ), { + + constructor: DiscreteInterpolant, + + interpolate_: function ( i1 /*, t0, t, t1 */ ) { + + return this.copySampleValue_( i1 - 1 ); + + } + + } ); + + function KeyframeTrack( name, times, values, interpolation ) { + + if ( name === undefined ) { throw new Error( 'THREE.KeyframeTrack: track name is undefined' ); } + if ( times === undefined || times.length === 0 ) { throw new Error( 'THREE.KeyframeTrack: no keyframes in track named ' + name ); } + + this.name = name; + + this.times = AnimationUtils.convertArray( times, this.TimeBufferType ); + this.values = AnimationUtils.convertArray( values, this.ValueBufferType ); + + this.setInterpolation( interpolation || this.DefaultInterpolation ); + + } + + // Static methods + + Object.assign( KeyframeTrack, { + + // Serialization (in static context, because of constructor invocation + // and automatic invocation of .toJSON): + + toJSON: function ( track ) { + + var trackType = track.constructor; + + var json; + + // derived classes can define a static toJSON method + if ( trackType.toJSON !== undefined ) { + + json = trackType.toJSON( track ); + + } else { + + // by default, we assume the data can be serialized as-is + json = { + + 'name': track.name, + 'times': AnimationUtils.convertArray( track.times, Array ), + 'values': AnimationUtils.convertArray( track.values, Array ) + + }; + + var interpolation = track.getInterpolation(); + + if ( interpolation !== track.DefaultInterpolation ) { + + json.interpolation = interpolation; + + } + + } + + json.type = track.ValueTypeName; // mandatory + + return json; + + } + + } ); + + Object.assign( KeyframeTrack.prototype, { + + constructor: KeyframeTrack, + + TimeBufferType: Float32Array, + + ValueBufferType: Float32Array, + + DefaultInterpolation: InterpolateLinear, + + InterpolantFactoryMethodDiscrete: function ( result ) { + + return new DiscreteInterpolant( this.times, this.values, this.getValueSize(), result ); + + }, + + InterpolantFactoryMethodLinear: function ( result ) { + + return new LinearInterpolant( this.times, this.values, this.getValueSize(), result ); + + }, + + InterpolantFactoryMethodSmooth: function ( result ) { + + return new CubicInterpolant( this.times, this.values, this.getValueSize(), result ); + + }, + + setInterpolation: function ( interpolation ) { + + var factoryMethod; + + switch ( interpolation ) { + + case InterpolateDiscrete: + + factoryMethod = this.InterpolantFactoryMethodDiscrete; + + break; + + case InterpolateLinear: + + factoryMethod = this.InterpolantFactoryMethodLinear; + + break; + + case InterpolateSmooth: + + factoryMethod = this.InterpolantFactoryMethodSmooth; + + break; + + } + + if ( factoryMethod === undefined ) { + + var message = "unsupported interpolation for " + + this.ValueTypeName + " keyframe track named " + this.name; + + if ( this.createInterpolant === undefined ) { + + // fall back to default, unless the default itself is messed up + if ( interpolation !== this.DefaultInterpolation ) { + + this.setInterpolation( this.DefaultInterpolation ); + + } else { + + throw new Error( message ); // fatal, in this case + + } + + } + + console.warn( 'THREE.KeyframeTrack:', message ); + return this; + + } + + this.createInterpolant = factoryMethod; + + return this; + + }, + + getInterpolation: function () { + + switch ( this.createInterpolant ) { + + case this.InterpolantFactoryMethodDiscrete: + + return InterpolateDiscrete; + + case this.InterpolantFactoryMethodLinear: + + return InterpolateLinear; + + case this.InterpolantFactoryMethodSmooth: + + return InterpolateSmooth; + + } + + }, + + getValueSize: function () { + + return this.values.length / this.times.length; + + }, + + // move all keyframes either forwards or backwards in time + shift: function ( timeOffset ) { + + if ( timeOffset !== 0.0 ) { + + var times = this.times; + + for ( var i = 0, n = times.length; i !== n; ++ i ) { + + times[ i ] += timeOffset; + + } + + } + + return this; + + }, + + // scale all keyframe times by a factor (useful for frame <-> seconds conversions) + scale: function ( timeScale ) { + + if ( timeScale !== 1.0 ) { + + var times = this.times; + + for ( var i = 0, n = times.length; i !== n; ++ i ) { + + times[ i ] *= timeScale; + + } + + } + + return this; + + }, + + // removes keyframes before and after animation without changing any values within the range [startTime, endTime]. + // IMPORTANT: We do not shift around keys to the start of the track time, because for interpolated keys this will change their values + trim: function ( startTime, endTime ) { + + var times = this.times, + nKeys = times.length; + + var from = 0, + to = nKeys - 1; + + while ( from !== nKeys && times[ from ] < startTime ) { + + ++ from; + + } + + while ( to !== - 1 && times[ to ] > endTime ) { + + -- to; + + } + + ++ to; // inclusive -> exclusive bound + + if ( from !== 0 || to !== nKeys ) { + + // empty tracks are forbidden, so keep at least one keyframe + if ( from >= to ) { + + to = Math.max( to, 1 ); + from = to - 1; + + } + + var stride = this.getValueSize(); + this.times = AnimationUtils.arraySlice( times, from, to ); + this.values = AnimationUtils.arraySlice( this.values, from * stride, to * stride ); + + } + + return this; + + }, + + // ensure we do not get a GarbageInGarbageOut situation, make sure tracks are at least minimally viable + validate: function () { + + var valid = true; + + var valueSize = this.getValueSize(); + if ( valueSize - Math.floor( valueSize ) !== 0 ) { + + console.error( 'THREE.KeyframeTrack: Invalid value size in track.', this ); + valid = false; + + } + + var times = this.times, + values = this.values, + + nKeys = times.length; + + if ( nKeys === 0 ) { + + console.error( 'THREE.KeyframeTrack: Track is empty.', this ); + valid = false; + + } + + var prevTime = null; + + for ( var i = 0; i !== nKeys; i ++ ) { + + var currTime = times[ i ]; + + if ( typeof currTime === 'number' && isNaN( currTime ) ) { + + console.error( 'THREE.KeyframeTrack: Time is not a valid number.', this, i, currTime ); + valid = false; + break; + + } + + if ( prevTime !== null && prevTime > currTime ) { + + console.error( 'THREE.KeyframeTrack: Out of order keys.', this, i, currTime, prevTime ); + valid = false; + break; + + } + + prevTime = currTime; + + } + + if ( values !== undefined ) { + + if ( AnimationUtils.isTypedArray( values ) ) { + + for ( var i$1 = 0, n = values.length; i$1 !== n; ++ i$1 ) { + + var value = values[ i$1 ]; + + if ( isNaN( value ) ) { + + console.error( 'THREE.KeyframeTrack: Value is not a valid number.', this, i$1, value ); + valid = false; + break; + + } + + } + + } + + } + + return valid; + + }, + + // removes equivalent sequential keys as common in morph target sequences + // (0,0,0,0,1,1,1,0,0,0,0,0,0,0) --> (0,0,1,1,0,0) + optimize: function () { + + // times or values may be shared with other tracks, so overwriting is unsafe + var times = AnimationUtils.arraySlice( this.times ), + values = AnimationUtils.arraySlice( this.values ), + stride = this.getValueSize(), + + smoothInterpolation = this.getInterpolation() === InterpolateSmooth, + + lastIndex = times.length - 1; + + var writeIndex = 1; + + for ( var i = 1; i < lastIndex; ++ i ) { + + var keep = false; + + var time = times[ i ]; + var timeNext = times[ i + 1 ]; + + // remove adjacent keyframes scheduled at the same time + + if ( time !== timeNext && ( i !== 1 || time !== time[ 0 ] ) ) { + + if ( ! smoothInterpolation ) { + + // remove unnecessary keyframes same as their neighbors + + var offset = i * stride, + offsetP = offset - stride, + offsetN = offset + stride; + + for ( var j = 0; j !== stride; ++ j ) { + + var value = values[ offset + j ]; + + if ( value !== values[ offsetP + j ] || + value !== values[ offsetN + j ] ) { + + keep = true; + break; + + } + + } + + } else { + + keep = true; + + } + + } + + // in-place compaction + + if ( keep ) { + + if ( i !== writeIndex ) { + + times[ writeIndex ] = times[ i ]; + + var readOffset = i * stride, + writeOffset = writeIndex * stride; + + for ( var j$1 = 0; j$1 !== stride; ++ j$1 ) { + + values[ writeOffset + j$1 ] = values[ readOffset + j$1 ]; + + } + + } + + ++ writeIndex; + + } + + } + + // flush last keyframe (compaction looks ahead) + + if ( lastIndex > 0 ) { + + times[ writeIndex ] = times[ lastIndex ]; + + for ( var readOffset$1 = lastIndex * stride, writeOffset$1 = writeIndex * stride, j$2 = 0; j$2 !== stride; ++ j$2 ) { + + values[ writeOffset$1 + j$2 ] = values[ readOffset$1 + j$2 ]; + + } + + ++ writeIndex; + + } + + if ( writeIndex !== times.length ) { + + this.times = AnimationUtils.arraySlice( times, 0, writeIndex ); + this.values = AnimationUtils.arraySlice( values, 0, writeIndex * stride ); + + } else { + + this.times = times; + this.values = values; + + } + + return this; + + }, + + clone: function () { + + var times = AnimationUtils.arraySlice( this.times, 0 ); + var values = AnimationUtils.arraySlice( this.values, 0 ); + + var TypedKeyframeTrack = this.constructor; + var track = new TypedKeyframeTrack( this.name, times, values ); + + // Interpolant argument to constructor is not saved, so copy the factory method directly. + track.createInterpolant = this.createInterpolant; + + return track; + + } + + } ); + + /** + * A Track of Boolean keyframe values. + */ + + function BooleanKeyframeTrack( name, times, values ) { + + KeyframeTrack.call( this, name, times, values ); + + } + + BooleanKeyframeTrack.prototype = Object.assign( Object.create( KeyframeTrack.prototype ), { + + constructor: BooleanKeyframeTrack, + + ValueTypeName: 'bool', + ValueBufferType: Array, + + DefaultInterpolation: InterpolateDiscrete, + + InterpolantFactoryMethodLinear: undefined, + InterpolantFactoryMethodSmooth: undefined + + // Note: Actually this track could have a optimized / compressed + // representation of a single value and a custom interpolant that + // computes "firstValue ^ isOdd( index )". + + } ); + + /** + * A Track of keyframe values that represent color. + */ + + function ColorKeyframeTrack( name, times, values, interpolation ) { + + KeyframeTrack.call( this, name, times, values, interpolation ); + + } + + ColorKeyframeTrack.prototype = Object.assign( Object.create( KeyframeTrack.prototype ), { + + constructor: ColorKeyframeTrack, + + ValueTypeName: 'color' + + // ValueBufferType is inherited + + // DefaultInterpolation is inherited + + // Note: Very basic implementation and nothing special yet. + // However, this is the place for color space parameterization. + + } ); + + /** + * A Track of numeric keyframe values. + */ + + function NumberKeyframeTrack( name, times, values, interpolation ) { + + KeyframeTrack.call( this, name, times, values, interpolation ); + + } + + NumberKeyframeTrack.prototype = Object.assign( Object.create( KeyframeTrack.prototype ), { + + constructor: NumberKeyframeTrack, + + ValueTypeName: 'number' + + // ValueBufferType is inherited + + // DefaultInterpolation is inherited + + } ); + + /** + * Spherical linear unit quaternion interpolant. + */ + + function QuaternionLinearInterpolant( parameterPositions, sampleValues, sampleSize, resultBuffer ) { + + Interpolant.call( this, parameterPositions, sampleValues, sampleSize, resultBuffer ); + + } + + QuaternionLinearInterpolant.prototype = Object.assign( Object.create( Interpolant.prototype ), { + + constructor: QuaternionLinearInterpolant, + + interpolate_: function ( i1, t0, t, t1 ) { + + var result = this.resultBuffer, + values = this.sampleValues, + stride = this.valueSize, + + alpha = ( t - t0 ) / ( t1 - t0 ); + + var offset = i1 * stride; + + for ( var end = offset + stride; offset !== end; offset += 4 ) { + + Quaternion.slerpFlat( result, 0, values, offset - stride, values, offset, alpha ); + + } + + return result; + + } + + } ); + + /** + * A Track of quaternion keyframe values. + */ + + function QuaternionKeyframeTrack( name, times, values, interpolation ) { + + KeyframeTrack.call( this, name, times, values, interpolation ); + + } + + QuaternionKeyframeTrack.prototype = Object.assign( Object.create( KeyframeTrack.prototype ), { + + constructor: QuaternionKeyframeTrack, + + ValueTypeName: 'quaternion', + + // ValueBufferType is inherited + + DefaultInterpolation: InterpolateLinear, + + InterpolantFactoryMethodLinear: function ( result ) { + + return new QuaternionLinearInterpolant( this.times, this.values, this.getValueSize(), result ); + + }, + + InterpolantFactoryMethodSmooth: undefined // not yet implemented + + } ); + + /** + * A Track that interpolates Strings + */ + + function StringKeyframeTrack( name, times, values, interpolation ) { + + KeyframeTrack.call( this, name, times, values, interpolation ); + + } + + StringKeyframeTrack.prototype = Object.assign( Object.create( KeyframeTrack.prototype ), { + + constructor: StringKeyframeTrack, + + ValueTypeName: 'string', + ValueBufferType: Array, + + DefaultInterpolation: InterpolateDiscrete, + + InterpolantFactoryMethodLinear: undefined, + + InterpolantFactoryMethodSmooth: undefined + + } ); + + /** + * A Track of vectored keyframe values. + */ + + function VectorKeyframeTrack( name, times, values, interpolation ) { + + KeyframeTrack.call( this, name, times, values, interpolation ); + + } + + VectorKeyframeTrack.prototype = Object.assign( Object.create( KeyframeTrack.prototype ), { + + constructor: VectorKeyframeTrack, + + ValueTypeName: 'vector' + + // ValueBufferType is inherited + + // DefaultInterpolation is inherited + + } ); + + function AnimationClip( name, duration, tracks, blendMode ) { + + this.name = name; + this.tracks = tracks; + this.duration = ( duration !== undefined ) ? duration : - 1; + this.blendMode = ( blendMode !== undefined ) ? blendMode : NormalAnimationBlendMode; + + this.uuid = MathUtils.generateUUID(); + + // this means it should figure out its duration by scanning the tracks + if ( this.duration < 0 ) { + + this.resetDuration(); + + } + + } + + function getTrackTypeForValueTypeName( typeName ) { + + switch ( typeName.toLowerCase() ) { + + case 'scalar': + case 'double': + case 'float': + case 'number': + case 'integer': + + return NumberKeyframeTrack; + + case 'vector': + case 'vector2': + case 'vector3': + case 'vector4': + + return VectorKeyframeTrack; + + case 'color': + + return ColorKeyframeTrack; + + case 'quaternion': + + return QuaternionKeyframeTrack; + + case 'bool': + case 'boolean': + + return BooleanKeyframeTrack; + + case 'string': + + return StringKeyframeTrack; + + } + + throw new Error( 'THREE.KeyframeTrack: Unsupported typeName: ' + typeName ); + + } + + function parseKeyframeTrack( json ) { + + if ( json.type === undefined ) { + + throw new Error( 'THREE.KeyframeTrack: track type undefined, can not parse' ); + + } + + var trackType = getTrackTypeForValueTypeName( json.type ); + + if ( json.times === undefined ) { + + var times = [], values = []; + + AnimationUtils.flattenJSON( json.keys, times, values, 'value' ); + + json.times = times; + json.values = values; + + } + + // derived classes can define a static parse method + if ( trackType.parse !== undefined ) { + + return trackType.parse( json ); + + } else { + + // by default, we assume a constructor compatible with the base + return new trackType( json.name, json.times, json.values, json.interpolation ); + + } + + } + + Object.assign( AnimationClip, { + + parse: function ( json ) { + + var tracks = [], + jsonTracks = json.tracks, + frameTime = 1.0 / ( json.fps || 1.0 ); + + for ( var i = 0, n = jsonTracks.length; i !== n; ++ i ) { + + tracks.push( parseKeyframeTrack( jsonTracks[ i ] ).scale( frameTime ) ); + + } + + return new AnimationClip( json.name, json.duration, tracks, json.blendMode ); + + }, + + toJSON: function ( clip ) { + + var tracks = [], + clipTracks = clip.tracks; + + var json = { + + 'name': clip.name, + 'duration': clip.duration, + 'tracks': tracks, + 'uuid': clip.uuid, + 'blendMode': clip.blendMode + + }; + + for ( var i = 0, n = clipTracks.length; i !== n; ++ i ) { + + tracks.push( KeyframeTrack.toJSON( clipTracks[ i ] ) ); + + } + + return json; + + }, + + CreateFromMorphTargetSequence: function ( name, morphTargetSequence, fps, noLoop ) { + + var numMorphTargets = morphTargetSequence.length; + var tracks = []; + + for ( var i = 0; i < numMorphTargets; i ++ ) { + + var times = []; + var values = []; + + times.push( + ( i + numMorphTargets - 1 ) % numMorphTargets, + i, + ( i + 1 ) % numMorphTargets ); + + values.push( 0, 1, 0 ); + + var order = AnimationUtils.getKeyframeOrder( times ); + times = AnimationUtils.sortedArray( times, 1, order ); + values = AnimationUtils.sortedArray( values, 1, order ); + + // if there is a key at the first frame, duplicate it as the + // last frame as well for perfect loop. + if ( ! noLoop && times[ 0 ] === 0 ) { + + times.push( numMorphTargets ); + values.push( values[ 0 ] ); + + } + + tracks.push( + new NumberKeyframeTrack( + '.morphTargetInfluences[' + morphTargetSequence[ i ].name + ']', + times, values + ).scale( 1.0 / fps ) ); + + } + + return new AnimationClip( name, - 1, tracks ); + + }, + + findByName: function ( objectOrClipArray, name ) { + + var clipArray = objectOrClipArray; + + if ( ! Array.isArray( objectOrClipArray ) ) { + + var o = objectOrClipArray; + clipArray = o.geometry && o.geometry.animations || o.animations; + + } + + for ( var i = 0; i < clipArray.length; i ++ ) { + + if ( clipArray[ i ].name === name ) { + + return clipArray[ i ]; + + } + + } + + return null; + + }, + + CreateClipsFromMorphTargetSequences: function ( morphTargets, fps, noLoop ) { + + var animationToMorphTargets = {}; + + // tested with https://regex101.com/ on trick sequences + // such flamingo_flyA_003, flamingo_run1_003, crdeath0059 + var pattern = /^([\w-]*?)([\d]+)$/; + + // sort morph target names into animation groups based + // patterns like Walk_001, Walk_002, Run_001, Run_002 + for ( var i = 0, il = morphTargets.length; i < il; i ++ ) { + + var morphTarget = morphTargets[ i ]; + var parts = morphTarget.name.match( pattern ); + + if ( parts && parts.length > 1 ) { + + var name = parts[ 1 ]; + + var animationMorphTargets = animationToMorphTargets[ name ]; + + if ( ! animationMorphTargets ) { + + animationToMorphTargets[ name ] = animationMorphTargets = []; + + } + + animationMorphTargets.push( morphTarget ); + + } + + } + + var clips = []; + + for ( var name$1 in animationToMorphTargets ) { + + clips.push( AnimationClip.CreateFromMorphTargetSequence( name$1, animationToMorphTargets[ name$1 ], fps, noLoop ) ); + + } + + return clips; + + }, + + // parse the animation.hierarchy format + parseAnimation: function ( animation, bones ) { + + if ( ! animation ) { + + console.error( 'THREE.AnimationClip: No animation in JSONLoader data.' ); + return null; + + } + + var addNonemptyTrack = function ( trackType, trackName, animationKeys, propertyName, destTracks ) { + + // only return track if there are actually keys. + if ( animationKeys.length !== 0 ) { + + var times = []; + var values = []; + + AnimationUtils.flattenJSON( animationKeys, times, values, propertyName ); + + // empty keys are filtered out, so check again + if ( times.length !== 0 ) { + + destTracks.push( new trackType( trackName, times, values ) ); + + } + + } + + }; + + var tracks = []; + + var clipName = animation.name || 'default'; + var fps = animation.fps || 30; + var blendMode = animation.blendMode; + + // automatic length determination in AnimationClip. + var duration = animation.length || - 1; + + var hierarchyTracks = animation.hierarchy || []; + + for ( var h = 0; h < hierarchyTracks.length; h ++ ) { + + var animationKeys = hierarchyTracks[ h ].keys; + + // skip empty tracks + if ( ! animationKeys || animationKeys.length === 0 ) { continue; } + + // process morph targets + if ( animationKeys[ 0 ].morphTargets ) { + + // figure out all morph targets used in this track + var morphTargetNames = {}; + + var k = (void 0); + + for ( k = 0; k < animationKeys.length; k ++ ) { + + if ( animationKeys[ k ].morphTargets ) { + + for ( var m = 0; m < animationKeys[ k ].morphTargets.length; m ++ ) { + + morphTargetNames[ animationKeys[ k ].morphTargets[ m ] ] = - 1; + + } + + } + + } + + // create a track for each morph target with all zero + // morphTargetInfluences except for the keys in which + // the morphTarget is named. + for ( var morphTargetName in morphTargetNames ) { + + var times = []; + var values = []; + + for ( var m$1 = 0; m$1 !== animationKeys[ k ].morphTargets.length; ++ m$1 ) { + + var animationKey = animationKeys[ k ]; + + times.push( animationKey.time ); + values.push( ( animationKey.morphTarget === morphTargetName ) ? 1 : 0 ); + + } + + tracks.push( new NumberKeyframeTrack( '.morphTargetInfluence[' + morphTargetName + ']', times, values ) ); + + } + + duration = morphTargetNames.length * ( fps || 1.0 ); + + } else { + + // ...assume skeletal animation + + var boneName = '.bones[' + bones[ h ].name + ']'; + + addNonemptyTrack( + VectorKeyframeTrack, boneName + '.position', + animationKeys, 'pos', tracks ); + + addNonemptyTrack( + QuaternionKeyframeTrack, boneName + '.quaternion', + animationKeys, 'rot', tracks ); + + addNonemptyTrack( + VectorKeyframeTrack, boneName + '.scale', + animationKeys, 'scl', tracks ); + + } + + } + + if ( tracks.length === 0 ) { + + return null; + + } + + var clip = new AnimationClip( clipName, duration, tracks, blendMode ); + + return clip; + + } + + } ); + + Object.assign( AnimationClip.prototype, { + + resetDuration: function () { + + var tracks = this.tracks; + var duration = 0; + + for ( var i = 0, n = tracks.length; i !== n; ++ i ) { + + var track = this.tracks[ i ]; + + duration = Math.max( duration, track.times[ track.times.length - 1 ] ); + + } + + this.duration = duration; + + return this; + + }, + + trim: function () { + + for ( var i = 0; i < this.tracks.length; i ++ ) { + + this.tracks[ i ].trim( 0, this.duration ); + + } + + return this; + + }, + + validate: function () { + + var valid = true; + + for ( var i = 0; i < this.tracks.length; i ++ ) { + + valid = valid && this.tracks[ i ].validate(); + + } + + return valid; + + }, + + optimize: function () { + + for ( var i = 0; i < this.tracks.length; i ++ ) { + + this.tracks[ i ].optimize(); + + } + + return this; + + }, + + clone: function () { + + var tracks = []; + + for ( var i = 0; i < this.tracks.length; i ++ ) { + + tracks.push( this.tracks[ i ].clone() ); + + } + + return new AnimationClip( this.name, this.duration, tracks, this.blendMode ); + + } + + } ); + + var Cache = { + + enabled: false, + + files: {}, + + add: function ( key, file ) { + + if ( this.enabled === false ) { return; } + + // console.log( 'THREE.Cache', 'Adding key:', key ); + + this.files[ key ] = file; + + }, + + get: function ( key ) { + + if ( this.enabled === false ) { return; } + + // console.log( 'THREE.Cache', 'Checking key:', key ); + + return this.files[ key ]; + + }, + + remove: function ( key ) { + + delete this.files[ key ]; + + }, + + clear: function () { + + this.files = {}; + + } + + }; + + function LoadingManager( onLoad, onProgress, onError ) { + + var scope = this; + + var isLoading = false; + var itemsLoaded = 0; + var itemsTotal = 0; + var urlModifier = undefined; + var handlers = []; + + // Refer to #5689 for the reason why we don't set .onStart + // in the constructor + + this.onStart = undefined; + this.onLoad = onLoad; + this.onProgress = onProgress; + this.onError = onError; + + this.itemStart = function ( url ) { + + itemsTotal ++; + + if ( isLoading === false ) { + + if ( scope.onStart !== undefined ) { + + scope.onStart( url, itemsLoaded, itemsTotal ); + + } + + } + + isLoading = true; + + }; + + this.itemEnd = function ( url ) { + + itemsLoaded ++; + + if ( scope.onProgress !== undefined ) { + + scope.onProgress( url, itemsLoaded, itemsTotal ); + + } + + if ( itemsLoaded === itemsTotal ) { + + isLoading = false; + + if ( scope.onLoad !== undefined ) { + + scope.onLoad(); + + } + + } + + }; + + this.itemError = function ( url ) { + + if ( scope.onError !== undefined ) { + + scope.onError( url ); + + } + + }; + + this.resolveURL = function ( url ) { + + if ( urlModifier ) { + + return urlModifier( url ); + + } + + return url; + + }; + + this.setURLModifier = function ( transform ) { + + urlModifier = transform; + + return this; + + }; + + this.addHandler = function ( regex, loader ) { + + handlers.push( regex, loader ); + + return this; + + }; + + this.removeHandler = function ( regex ) { + + var index = handlers.indexOf( regex ); + + if ( index !== - 1 ) { + + handlers.splice( index, 2 ); + + } + + return this; + + }; + + this.getHandler = function ( file ) { + + for ( var i = 0, l = handlers.length; i < l; i += 2 ) { + + var regex = handlers[ i ]; + var loader = handlers[ i + 1 ]; + + if ( regex.global ) { regex.lastIndex = 0; } // see #17920 + + if ( regex.test( file ) ) { + + return loader; + + } + + } + + return null; + + }; + + } + + var DefaultLoadingManager = new LoadingManager(); + + function Loader( manager ) { + + this.manager = ( manager !== undefined ) ? manager : DefaultLoadingManager; + + this.crossOrigin = 'anonymous'; + this.path = ''; + this.resourcePath = ''; + this.requestHeader = {}; + + } + + Object.assign( Loader.prototype, { + + load: function ( /* url, onLoad, onProgress, onError */ ) {}, + + loadAsync: function ( url, onProgress ) { + + var scope = this; + + return new Promise( function ( resolve, reject ) { + + scope.load( url, resolve, onProgress, reject ); + + } ); + + }, + + parse: function ( /* data */ ) {}, + + setCrossOrigin: function ( crossOrigin ) { + + this.crossOrigin = crossOrigin; + return this; + + }, + + setPath: function ( path ) { + + this.path = path; + return this; + + }, + + setResourcePath: function ( resourcePath ) { + + this.resourcePath = resourcePath; + return this; + + }, + + setRequestHeader: function ( requestHeader ) { + + this.requestHeader = requestHeader; + return this; + + } + + } ); + + var loading = {}; + + function FileLoader( manager ) { + + Loader.call( this, manager ); + + } + + FileLoader.prototype = Object.assign( Object.create( Loader.prototype ), { + + constructor: FileLoader, + + load: function ( url, onLoad, onProgress, onError ) { + + if ( url === undefined ) { url = ''; } + + if ( this.path !== undefined ) { url = this.path + url; } + + url = this.manager.resolveURL( url ); + + var scope = this; + + var cached = Cache.get( url ); + + if ( cached !== undefined ) { + + scope.manager.itemStart( url ); + + setTimeout( function () { + + if ( onLoad ) { onLoad( cached ); } + + scope.manager.itemEnd( url ); + + }, 0 ); + + return cached; + + } + + // Check if request is duplicate + + if ( loading[ url ] !== undefined ) { + + loading[ url ].push( { + + onLoad: onLoad, + onProgress: onProgress, + onError: onError + + } ); + + return; + + } + + // Check for data: URI + var dataUriRegex = /^data:(.*?)(;base64)?,(.*)$/; + var dataUriRegexResult = url.match( dataUriRegex ); + var request; + + // Safari can not handle Data URIs through XMLHttpRequest so process manually + if ( dataUriRegexResult ) { + + var mimeType = dataUriRegexResult[ 1 ]; + var isBase64 = !! dataUriRegexResult[ 2 ]; + + var data = dataUriRegexResult[ 3 ]; + data = decodeURIComponent( data ); + + if ( isBase64 ) { data = atob( data ); } + + try { + + var response; + var responseType = ( this.responseType || '' ).toLowerCase(); + + switch ( responseType ) { + + case 'arraybuffer': + case 'blob': + + var view = new Uint8Array( data.length ); + + for ( var i = 0; i < data.length; i ++ ) { + + view[ i ] = data.charCodeAt( i ); + + } + + if ( responseType === 'blob' ) { + + response = new Blob( [ view.buffer ], { type: mimeType } ); + + } else { + + response = view.buffer; + + } + + break; + + case 'document': + + var parser = new DOMParser(); + response = parser.parseFromString( data, mimeType ); + + break; + + case 'json': + + response = JSON.parse( data ); + + break; + + default: // 'text' or other + + response = data; + + break; + + } + + // Wait for next browser tick like standard XMLHttpRequest event dispatching does + setTimeout( function () { + + if ( onLoad ) { onLoad( response ); } + + scope.manager.itemEnd( url ); + + }, 0 ); + + } catch ( error ) { + + // Wait for next browser tick like standard XMLHttpRequest event dispatching does + setTimeout( function () { + + if ( onError ) { onError( error ); } + + scope.manager.itemError( url ); + scope.manager.itemEnd( url ); + + }, 0 ); + + } + + } else { + + // Initialise array for duplicate requests + + loading[ url ] = []; + + loading[ url ].push( { + + onLoad: onLoad, + onProgress: onProgress, + onError: onError + + } ); + + request = new XMLHttpRequest(); + + request.open( 'GET', url, true ); + + request.addEventListener( 'load', function ( event ) { + + var response = this.response; + + var callbacks = loading[ url ]; + + delete loading[ url ]; + + if ( this.status === 200 || this.status === 0 ) { + + // Some browsers return HTTP Status 0 when using non-http protocol + // e.g. 'file://' or 'data://'. Handle as success. + + if ( this.status === 0 ) { console.warn( 'THREE.FileLoader: HTTP Status 0 received.' ); } + + // Add to cache only on HTTP success, so that we do not cache + // error response bodies as proper responses to requests. + Cache.add( url, response ); + + for ( var i = 0, il = callbacks.length; i < il; i ++ ) { + + var callback = callbacks[ i ]; + if ( callback.onLoad ) { callback.onLoad( response ); } + + } + + scope.manager.itemEnd( url ); + + } else { + + for ( var i$1 = 0, il$1 = callbacks.length; i$1 < il$1; i$1 ++ ) { + + var callback$1 = callbacks[ i$1 ]; + if ( callback$1.onError ) { callback$1.onError( event ); } + + } + + scope.manager.itemError( url ); + scope.manager.itemEnd( url ); + + } + + }, false ); + + request.addEventListener( 'progress', function ( event ) { + + var callbacks = loading[ url ]; + + for ( var i = 0, il = callbacks.length; i < il; i ++ ) { + + var callback = callbacks[ i ]; + if ( callback.onProgress ) { callback.onProgress( event ); } + + } + + }, false ); + + request.addEventListener( 'error', function ( event ) { + + var callbacks = loading[ url ]; + + delete loading[ url ]; + + for ( var i = 0, il = callbacks.length; i < il; i ++ ) { + + var callback = callbacks[ i ]; + if ( callback.onError ) { callback.onError( event ); } + + } + + scope.manager.itemError( url ); + scope.manager.itemEnd( url ); + + }, false ); + + request.addEventListener( 'abort', function ( event ) { + + var callbacks = loading[ url ]; + + delete loading[ url ]; + + for ( var i = 0, il = callbacks.length; i < il; i ++ ) { + + var callback = callbacks[ i ]; + if ( callback.onError ) { callback.onError( event ); } + + } + + scope.manager.itemError( url ); + scope.manager.itemEnd( url ); + + }, false ); + + if ( this.responseType !== undefined ) { request.responseType = this.responseType; } + if ( this.withCredentials !== undefined ) { request.withCredentials = this.withCredentials; } + + if ( request.overrideMimeType ) { request.overrideMimeType( this.mimeType !== undefined ? this.mimeType : 'text/plain' ); } + + for ( var header in this.requestHeader ) { + + request.setRequestHeader( header, this.requestHeader[ header ] ); + + } + + request.send( null ); + + } + + scope.manager.itemStart( url ); + + return request; + + }, + + setResponseType: function ( value ) { + + this.responseType = value; + return this; + + }, + + setWithCredentials: function ( value ) { + + this.withCredentials = value; + return this; + + }, + + setMimeType: function ( value ) { + + this.mimeType = value; + return this; + + } + + } ); + + function AnimationLoader( manager ) { + + Loader.call( this, manager ); + + } + + AnimationLoader.prototype = Object.assign( Object.create( Loader.prototype ), { + + constructor: AnimationLoader, + + load: function ( url, onLoad, onProgress, onError ) { + + var scope = this; + + var loader = new FileLoader( scope.manager ); + loader.setPath( scope.path ); + loader.setRequestHeader( scope.requestHeader ); + loader.load( url, function ( text ) { + + try { + + onLoad( scope.parse( JSON.parse( text ) ) ); + + } catch ( e ) { + + if ( onError ) { + + onError( e ); + + } else { + + console.error( e ); + + } + + scope.manager.itemError( url ); + + } + + }, onProgress, onError ); + + }, + + parse: function ( json ) { + + var animations = []; + + for ( var i = 0; i < json.length; i ++ ) { + + var clip = AnimationClip.parse( json[ i ] ); + + animations.push( clip ); + + } + + return animations; + + } + + } ); + + /** + * Abstract Base class to block based textures loader (dds, pvr, ...) + * + * Sub classes have to implement the parse() method which will be used in load(). + */ + + function CompressedTextureLoader( manager ) { + + Loader.call( this, manager ); + + } + + CompressedTextureLoader.prototype = Object.assign( Object.create( Loader.prototype ), { + + constructor: CompressedTextureLoader, + + load: function ( url, onLoad, onProgress, onError ) { + + var scope = this; + + var images = []; + + var texture = new CompressedTexture(); + texture.image = images; + + var loader = new FileLoader( this.manager ); + loader.setPath( this.path ); + loader.setResponseType( 'arraybuffer' ); + loader.setRequestHeader( this.requestHeader ); + + var loaded = 0; + + function loadTexture( i ) { + + loader.load( url[ i ], function ( buffer ) { + + var texDatas = scope.parse( buffer, true ); + + images[ i ] = { + width: texDatas.width, + height: texDatas.height, + format: texDatas.format, + mipmaps: texDatas.mipmaps + }; + + loaded += 1; + + if ( loaded === 6 ) { + + if ( texDatas.mipmapCount === 1 ) + { texture.minFilter = LinearFilter; } + + texture.format = texDatas.format; + texture.needsUpdate = true; + + if ( onLoad ) { onLoad( texture ); } + + } + + }, onProgress, onError ); + + } + + if ( Array.isArray( url ) ) { + + for ( var i = 0, il = url.length; i < il; ++ i ) { + + loadTexture( i ); + + } + + } else { + + // compressed cubemap texture stored in a single DDS file + + loader.load( url, function ( buffer ) { + + var texDatas = scope.parse( buffer, true ); + + if ( texDatas.isCubemap ) { + + var faces = texDatas.mipmaps.length / texDatas.mipmapCount; + + for ( var f = 0; f < faces; f ++ ) { + + images[ f ] = { mipmaps: [] }; + + for ( var i = 0; i < texDatas.mipmapCount; i ++ ) { + + images[ f ].mipmaps.push( texDatas.mipmaps[ f * texDatas.mipmapCount + i ] ); + images[ f ].format = texDatas.format; + images[ f ].width = texDatas.width; + images[ f ].height = texDatas.height; + + } + + } + + } else { + + texture.image.width = texDatas.width; + texture.image.height = texDatas.height; + texture.mipmaps = texDatas.mipmaps; + + } + + if ( texDatas.mipmapCount === 1 ) { + + texture.minFilter = LinearFilter; + + } + + texture.format = texDatas.format; + texture.needsUpdate = true; + + if ( onLoad ) { onLoad( texture ); } + + }, onProgress, onError ); + + } + + return texture; + + } + + } ); + + function ImageLoader( manager ) { + + Loader.call( this, manager ); + + } + + ImageLoader.prototype = Object.assign( Object.create( Loader.prototype ), { + + constructor: ImageLoader, + + load: function ( url, onLoad, onProgress, onError ) { + + if ( this.path !== undefined ) { url = this.path + url; } + + url = this.manager.resolveURL( url ); + + var scope = this; + + var cached = Cache.get( url ); + + if ( cached !== undefined ) { + + scope.manager.itemStart( url ); + + setTimeout( function () { + + if ( onLoad ) { onLoad( cached ); } + + scope.manager.itemEnd( url ); + + }, 0 ); + + return cached; + + } + + var image = document.createElementNS( 'http://www.w3.org/1999/xhtml', 'img' ); + + function onImageLoad() { + + image.removeEventListener( 'load', onImageLoad, false ); + image.removeEventListener( 'error', onImageError, false ); + + Cache.add( url, this ); + + if ( onLoad ) { onLoad( this ); } + + scope.manager.itemEnd( url ); + + } + + function onImageError( event ) { + + image.removeEventListener( 'load', onImageLoad, false ); + image.removeEventListener( 'error', onImageError, false ); + + if ( onError ) { onError( event ); } + + scope.manager.itemError( url ); + scope.manager.itemEnd( url ); + + } + + image.addEventListener( 'load', onImageLoad, false ); + image.addEventListener( 'error', onImageError, false ); + + if ( url.substr( 0, 5 ) !== 'data:' ) { + + if ( this.crossOrigin !== undefined ) { image.crossOrigin = this.crossOrigin; } + + } + + scope.manager.itemStart( url ); + + image.src = url; + + return image; + + } + + } ); + + function CubeTextureLoader( manager ) { + + Loader.call( this, manager ); + + } + + CubeTextureLoader.prototype = Object.assign( Object.create( Loader.prototype ), { + + constructor: CubeTextureLoader, + + load: function ( urls, onLoad, onProgress, onError ) { + + var texture = new CubeTexture(); + + var loader = new ImageLoader( this.manager ); + loader.setCrossOrigin( this.crossOrigin ); + loader.setPath( this.path ); + + var loaded = 0; + + function loadTexture( i ) { + + loader.load( urls[ i ], function ( image ) { + + texture.images[ i ] = image; + + loaded ++; + + if ( loaded === 6 ) { + + texture.needsUpdate = true; + + if ( onLoad ) { onLoad( texture ); } + + } + + }, undefined, onError ); + + } + + for ( var i = 0; i < urls.length; ++ i ) { + + loadTexture( i ); + + } + + return texture; + + } + + } ); + + /** + * Abstract Base class to load generic binary textures formats (rgbe, hdr, ...) + * + * Sub classes have to implement the parse() method which will be used in load(). + */ + + function DataTextureLoader( manager ) { + + Loader.call( this, manager ); + + } + + DataTextureLoader.prototype = Object.assign( Object.create( Loader.prototype ), { + + constructor: DataTextureLoader, + + load: function ( url, onLoad, onProgress, onError ) { + + var scope = this; + + var texture = new DataTexture(); + + var loader = new FileLoader( this.manager ); + loader.setResponseType( 'arraybuffer' ); + loader.setRequestHeader( this.requestHeader ); + loader.setPath( this.path ); + loader.load( url, function ( buffer ) { + + var texData = scope.parse( buffer ); + + if ( ! texData ) { return; } + + if ( texData.image !== undefined ) { + + texture.image = texData.image; + + } else if ( texData.data !== undefined ) { + + texture.image.width = texData.width; + texture.image.height = texData.height; + texture.image.data = texData.data; + + } + + texture.wrapS = texData.wrapS !== undefined ? texData.wrapS : ClampToEdgeWrapping; + texture.wrapT = texData.wrapT !== undefined ? texData.wrapT : ClampToEdgeWrapping; + + texture.magFilter = texData.magFilter !== undefined ? texData.magFilter : LinearFilter; + texture.minFilter = texData.minFilter !== undefined ? texData.minFilter : LinearFilter; + + texture.anisotropy = texData.anisotropy !== undefined ? texData.anisotropy : 1; + + if ( texData.format !== undefined ) { + + texture.format = texData.format; + + } + + if ( texData.type !== undefined ) { + + texture.type = texData.type; + + } + + if ( texData.mipmaps !== undefined ) { + + texture.mipmaps = texData.mipmaps; + texture.minFilter = LinearMipmapLinearFilter; // presumably... + + } + + if ( texData.mipmapCount === 1 ) { + + texture.minFilter = LinearFilter; + + } + + texture.needsUpdate = true; + + if ( onLoad ) { onLoad( texture, texData ); } + + }, onProgress, onError ); + + + return texture; + + } + + } ); + + function TextureLoader( manager ) { + + Loader.call( this, manager ); + + } + + TextureLoader.prototype = Object.assign( Object.create( Loader.prototype ), { + + constructor: TextureLoader, + + load: function ( url, onLoad, onProgress, onError ) { + + var texture = new Texture(); + + var loader = new ImageLoader( this.manager ); + loader.setCrossOrigin( this.crossOrigin ); + loader.setPath( this.path ); + + loader.load( url, function ( image ) { + + texture.image = image; + + // JPEGs can't have an alpha channel, so memory can be saved by storing them as RGB. + var isJPEG = url.search( /\.jpe?g($|\?)/i ) > 0 || url.search( /^data\:image\/jpeg/ ) === 0; + + texture.format = isJPEG ? RGBFormat : RGBAFormat; + texture.needsUpdate = true; + + if ( onLoad !== undefined ) { + + onLoad( texture ); + + } + + }, onProgress, onError ); + + return texture; + + } + + } ); + + /** + * Extensible curve object. + * + * Some common of curve methods: + * .getPoint( t, optionalTarget ), .getTangent( t, optionalTarget ) + * .getPointAt( u, optionalTarget ), .getTangentAt( u, optionalTarget ) + * .getPoints(), .getSpacedPoints() + * .getLength() + * .updateArcLengths() + * + * This following curves inherit from THREE.Curve: + * + * -- 2D curves -- + * THREE.ArcCurve + * THREE.CubicBezierCurve + * THREE.EllipseCurve + * THREE.LineCurve + * THREE.QuadraticBezierCurve + * THREE.SplineCurve + * + * -- 3D curves -- + * THREE.CatmullRomCurve3 + * THREE.CubicBezierCurve3 + * THREE.LineCurve3 + * THREE.QuadraticBezierCurve3 + * + * A series of curves can be represented as a THREE.CurvePath. + * + **/ + + function Curve() { + + this.type = 'Curve'; + + this.arcLengthDivisions = 200; + + } + + Object.assign( Curve.prototype, { + + // Virtual base class method to overwrite and implement in subclasses + // - t [0 .. 1] + + getPoint: function ( /* t, optionalTarget */ ) { + + console.warn( 'THREE.Curve: .getPoint() not implemented.' ); + return null; + + }, + + // Get point at relative position in curve according to arc length + // - u [0 .. 1] + + getPointAt: function ( u, optionalTarget ) { + + var t = this.getUtoTmapping( u ); + return this.getPoint( t, optionalTarget ); + + }, + + // Get sequence of points using getPoint( t ) + + getPoints: function ( divisions ) { + + if ( divisions === undefined ) { divisions = 5; } + + var points = []; + + for ( var d = 0; d <= divisions; d ++ ) { + + points.push( this.getPoint( d / divisions ) ); + + } + + return points; + + }, + + // Get sequence of points using getPointAt( u ) + + getSpacedPoints: function ( divisions ) { + + if ( divisions === undefined ) { divisions = 5; } + + var points = []; + + for ( var d = 0; d <= divisions; d ++ ) { + + points.push( this.getPointAt( d / divisions ) ); + + } + + return points; + + }, + + // Get total curve arc length + + getLength: function () { + + var lengths = this.getLengths(); + return lengths[ lengths.length - 1 ]; + + }, + + // Get list of cumulative segment lengths + + getLengths: function ( divisions ) { + + if ( divisions === undefined ) { divisions = this.arcLengthDivisions; } + + if ( this.cacheArcLengths && + ( this.cacheArcLengths.length === divisions + 1 ) && + ! this.needsUpdate ) { + + return this.cacheArcLengths; + + } + + this.needsUpdate = false; + + var cache = []; + var current, last = this.getPoint( 0 ); + var sum = 0; + + cache.push( 0 ); + + for ( var p = 1; p <= divisions; p ++ ) { + + current = this.getPoint( p / divisions ); + sum += current.distanceTo( last ); + cache.push( sum ); + last = current; + + } + + this.cacheArcLengths = cache; + + return cache; // { sums: cache, sum: sum }; Sum is in the last element. + + }, + + updateArcLengths: function () { + + this.needsUpdate = true; + this.getLengths(); + + }, + + // Given u ( 0 .. 1 ), get a t to find p. This gives you points which are equidistant + + getUtoTmapping: function ( u, distance ) { + + var arcLengths = this.getLengths(); + + var i = 0; + var il = arcLengths.length; + + var targetArcLength; // The targeted u distance value to get + + if ( distance ) { + + targetArcLength = distance; + + } else { + + targetArcLength = u * arcLengths[ il - 1 ]; + + } + + // binary search for the index with largest value smaller than target u distance + + var low = 0, high = il - 1, comparison; + + while ( low <= high ) { + + i = Math.floor( low + ( high - low ) / 2 ); // less likely to overflow, though probably not issue here, JS doesn't really have integers, all numbers are floats + + comparison = arcLengths[ i ] - targetArcLength; + + if ( comparison < 0 ) { + + low = i + 1; + + } else if ( comparison > 0 ) { + + high = i - 1; + + } else { + + high = i; + break; + + // DONE + + } + + } + + i = high; + + if ( arcLengths[ i ] === targetArcLength ) { + + return i / ( il - 1 ); + + } + + // we could get finer grain at lengths, or use simple interpolation between two points + + var lengthBefore = arcLengths[ i ]; + var lengthAfter = arcLengths[ i + 1 ]; + + var segmentLength = lengthAfter - lengthBefore; + + // determine where we are between the 'before' and 'after' points + + var segmentFraction = ( targetArcLength - lengthBefore ) / segmentLength; + + // add that fractional amount to t + + var t = ( i + segmentFraction ) / ( il - 1 ); + + return t; + + }, + + // Returns a unit vector tangent at t + // In case any sub curve does not implement its tangent derivation, + // 2 points a small delta apart will be used to find its gradient + // which seems to give a reasonable approximation + + getTangent: function ( t, optionalTarget ) { + + var delta = 0.0001; + var t1 = t - delta; + var t2 = t + delta; + + // Capping in case of danger + + if ( t1 < 0 ) { t1 = 0; } + if ( t2 > 1 ) { t2 = 1; } + + var pt1 = this.getPoint( t1 ); + var pt2 = this.getPoint( t2 ); + + var tangent = optionalTarget || ( ( pt1.isVector2 ) ? new Vector2() : new Vector3() ); + + tangent.copy( pt2 ).sub( pt1 ).normalize(); + + return tangent; + + }, + + getTangentAt: function ( u, optionalTarget ) { + + var t = this.getUtoTmapping( u ); + return this.getTangent( t, optionalTarget ); + + }, + + computeFrenetFrames: function ( segments, closed ) { + + // see http://www.cs.indiana.edu/pub/techreports/TR425.pdf + + var normal = new Vector3(); + + var tangents = []; + var normals = []; + var binormals = []; + + var vec = new Vector3(); + var mat = new Matrix4(); + + // compute the tangent vectors for each segment on the curve + + for ( var i = 0; i <= segments; i ++ ) { + + var u = i / segments; + + tangents[ i ] = this.getTangentAt( u, new Vector3() ); + tangents[ i ].normalize(); + + } + + // select an initial normal vector perpendicular to the first tangent vector, + // and in the direction of the minimum tangent xyz component + + normals[ 0 ] = new Vector3(); + binormals[ 0 ] = new Vector3(); + var min = Number.MAX_VALUE; + var tx = Math.abs( tangents[ 0 ].x ); + var ty = Math.abs( tangents[ 0 ].y ); + var tz = Math.abs( tangents[ 0 ].z ); + + if ( tx <= min ) { + + min = tx; + normal.set( 1, 0, 0 ); + + } + + if ( ty <= min ) { + + min = ty; + normal.set( 0, 1, 0 ); + + } + + if ( tz <= min ) { + + normal.set( 0, 0, 1 ); + + } + + vec.crossVectors( tangents[ 0 ], normal ).normalize(); + + normals[ 0 ].crossVectors( tangents[ 0 ], vec ); + binormals[ 0 ].crossVectors( tangents[ 0 ], normals[ 0 ] ); + + + // compute the slowly-varying normal and binormal vectors for each segment on the curve + + for ( var i$1 = 1; i$1 <= segments; i$1 ++ ) { + + normals[ i$1 ] = normals[ i$1 - 1 ].clone(); + + binormals[ i$1 ] = binormals[ i$1 - 1 ].clone(); + + vec.crossVectors( tangents[ i$1 - 1 ], tangents[ i$1 ] ); + + if ( vec.length() > Number.EPSILON ) { + + vec.normalize(); + + var theta = Math.acos( MathUtils.clamp( tangents[ i$1 - 1 ].dot( tangents[ i$1 ] ), - 1, 1 ) ); // clamp for floating pt errors + + normals[ i$1 ].applyMatrix4( mat.makeRotationAxis( vec, theta ) ); + + } + + binormals[ i$1 ].crossVectors( tangents[ i$1 ], normals[ i$1 ] ); + + } + + // if the curve is closed, postprocess the vectors so the first and last normal vectors are the same + + if ( closed === true ) { + + var theta$1 = Math.acos( MathUtils.clamp( normals[ 0 ].dot( normals[ segments ] ), - 1, 1 ) ); + theta$1 /= segments; + + if ( tangents[ 0 ].dot( vec.crossVectors( normals[ 0 ], normals[ segments ] ) ) > 0 ) { + + theta$1 = - theta$1; + + } + + for ( var i$2 = 1; i$2 <= segments; i$2 ++ ) { + + // twist a little... + normals[ i$2 ].applyMatrix4( mat.makeRotationAxis( tangents[ i$2 ], theta$1 * i$2 ) ); + binormals[ i$2 ].crossVectors( tangents[ i$2 ], normals[ i$2 ] ); + + } + + } + + return { + tangents: tangents, + normals: normals, + binormals: binormals + }; + + }, + + clone: function () { + + return new this.constructor().copy( this ); + + }, + + copy: function ( source ) { + + this.arcLengthDivisions = source.arcLengthDivisions; + + return this; + + }, + + toJSON: function () { + + var data = { + metadata: { + version: 4.5, + type: 'Curve', + generator: 'Curve.toJSON' + } + }; + + data.arcLengthDivisions = this.arcLengthDivisions; + data.type = this.type; + + return data; + + }, + + fromJSON: function ( json ) { + + this.arcLengthDivisions = json.arcLengthDivisions; + + return this; + + } + + } ); + + function EllipseCurve( aX, aY, xRadius, yRadius, aStartAngle, aEndAngle, aClockwise, aRotation ) { + + Curve.call( this ); + + this.type = 'EllipseCurve'; + + this.aX = aX || 0; + this.aY = aY || 0; + + this.xRadius = xRadius || 1; + this.yRadius = yRadius || 1; + + this.aStartAngle = aStartAngle || 0; + this.aEndAngle = aEndAngle || 2 * Math.PI; + + this.aClockwise = aClockwise || false; + + this.aRotation = aRotation || 0; + + } + + EllipseCurve.prototype = Object.create( Curve.prototype ); + EllipseCurve.prototype.constructor = EllipseCurve; + + EllipseCurve.prototype.isEllipseCurve = true; + + EllipseCurve.prototype.getPoint = function ( t, optionalTarget ) { + + var point = optionalTarget || new Vector2(); + + var twoPi = Math.PI * 2; + var deltaAngle = this.aEndAngle - this.aStartAngle; + var samePoints = Math.abs( deltaAngle ) < Number.EPSILON; + + // ensures that deltaAngle is 0 .. 2 PI + while ( deltaAngle < 0 ) { deltaAngle += twoPi; } + while ( deltaAngle > twoPi ) { deltaAngle -= twoPi; } + + if ( deltaAngle < Number.EPSILON ) { + + if ( samePoints ) { + + deltaAngle = 0; + + } else { + + deltaAngle = twoPi; + + } + + } + + if ( this.aClockwise === true && ! samePoints ) { + + if ( deltaAngle === twoPi ) { + + deltaAngle = - twoPi; + + } else { + + deltaAngle = deltaAngle - twoPi; + + } + + } + + var angle = this.aStartAngle + t * deltaAngle; + var x = this.aX + this.xRadius * Math.cos( angle ); + var y = this.aY + this.yRadius * Math.sin( angle ); + + if ( this.aRotation !== 0 ) { + + var cos = Math.cos( this.aRotation ); + var sin = Math.sin( this.aRotation ); + + var tx = x - this.aX; + var ty = y - this.aY; + + // Rotate the point about the center of the ellipse. + x = tx * cos - ty * sin + this.aX; + y = tx * sin + ty * cos + this.aY; + + } + + return point.set( x, y ); + + }; + + EllipseCurve.prototype.copy = function ( source ) { + + Curve.prototype.copy.call( this, source ); + + this.aX = source.aX; + this.aY = source.aY; + + this.xRadius = source.xRadius; + this.yRadius = source.yRadius; + + this.aStartAngle = source.aStartAngle; + this.aEndAngle = source.aEndAngle; + + this.aClockwise = source.aClockwise; + + this.aRotation = source.aRotation; + + return this; + + }; + + + EllipseCurve.prototype.toJSON = function () { + + var data = Curve.prototype.toJSON.call( this ); + + data.aX = this.aX; + data.aY = this.aY; + + data.xRadius = this.xRadius; + data.yRadius = this.yRadius; + + data.aStartAngle = this.aStartAngle; + data.aEndAngle = this.aEndAngle; + + data.aClockwise = this.aClockwise; + + data.aRotation = this.aRotation; + + return data; + + }; + + EllipseCurve.prototype.fromJSON = function ( json ) { + + Curve.prototype.fromJSON.call( this, json ); + + this.aX = json.aX; + this.aY = json.aY; + + this.xRadius = json.xRadius; + this.yRadius = json.yRadius; + + this.aStartAngle = json.aStartAngle; + this.aEndAngle = json.aEndAngle; + + this.aClockwise = json.aClockwise; + + this.aRotation = json.aRotation; + + return this; + + }; + + function ArcCurve( aX, aY, aRadius, aStartAngle, aEndAngle, aClockwise ) { + + EllipseCurve.call( this, aX, aY, aRadius, aRadius, aStartAngle, aEndAngle, aClockwise ); + + this.type = 'ArcCurve'; + + } + + ArcCurve.prototype = Object.create( EllipseCurve.prototype ); + ArcCurve.prototype.constructor = ArcCurve; + + ArcCurve.prototype.isArcCurve = true; + + /** + * Centripetal CatmullRom Curve - which is useful for avoiding + * cusps and self-intersections in non-uniform catmull rom curves. + * http://www.cemyuksel.com/research/catmullrom_param/catmullrom.pdf + * + * curve.type accepts centripetal(default), chordal and catmullrom + * curve.tension is used for catmullrom which defaults to 0.5 + */ + + + /* + Based on an optimized c++ solution in + - http://stackoverflow.com/questions/9489736/catmull-rom-curve-with-no-cusps-and-no-self-intersections/ + - http://ideone.com/NoEbVM + + This CubicPoly class could be used for reusing some variables and calculations, + but for three.js curve use, it could be possible inlined and flatten into a single function call + which can be placed in CurveUtils. + */ + + function CubicPoly() { + + var c0 = 0, c1 = 0, c2 = 0, c3 = 0; + + /* + * Compute coefficients for a cubic polynomial + * p(s) = c0 + c1*s + c2*s^2 + c3*s^3 + * such that + * p(0) = x0, p(1) = x1 + * and + * p'(0) = t0, p'(1) = t1. + */ + function init( x0, x1, t0, t1 ) { + + c0 = x0; + c1 = t0; + c2 = - 3 * x0 + 3 * x1 - 2 * t0 - t1; + c3 = 2 * x0 - 2 * x1 + t0 + t1; + + } + + return { + + initCatmullRom: function ( x0, x1, x2, x3, tension ) { + + init( x1, x2, tension * ( x2 - x0 ), tension * ( x3 - x1 ) ); + + }, + + initNonuniformCatmullRom: function ( x0, x1, x2, x3, dt0, dt1, dt2 ) { + + // compute tangents when parameterized in [t1,t2] + var t1 = ( x1 - x0 ) / dt0 - ( x2 - x0 ) / ( dt0 + dt1 ) + ( x2 - x1 ) / dt1; + var t2 = ( x2 - x1 ) / dt1 - ( x3 - x1 ) / ( dt1 + dt2 ) + ( x3 - x2 ) / dt2; + + // rescale tangents for parametrization in [0,1] + t1 *= dt1; + t2 *= dt1; + + init( x1, x2, t1, t2 ); + + }, + + calc: function ( t ) { + + var t2 = t * t; + var t3 = t2 * t; + return c0 + c1 * t + c2 * t2 + c3 * t3; + + } + + }; + + } + + // + + var tmp = new Vector3(); + var px = new CubicPoly(), py = new CubicPoly(), pz = new CubicPoly(); + + function CatmullRomCurve3( points, closed, curveType, tension ) { + + Curve.call( this ); + + this.type = 'CatmullRomCurve3'; + + this.points = points || []; + this.closed = closed || false; + this.curveType = curveType || 'centripetal'; + this.tension = ( tension !== undefined ) ? tension : 0.5; + + } + + CatmullRomCurve3.prototype = Object.create( Curve.prototype ); + CatmullRomCurve3.prototype.constructor = CatmullRomCurve3; + + CatmullRomCurve3.prototype.isCatmullRomCurve3 = true; + + CatmullRomCurve3.prototype.getPoint = function ( t, optionalTarget ) { + + var point = optionalTarget || new Vector3(); + + var points = this.points; + var l = points.length; + + var p = ( l - ( this.closed ? 0 : 1 ) ) * t; + var intPoint = Math.floor( p ); + var weight = p - intPoint; + + if ( this.closed ) { + + intPoint += intPoint > 0 ? 0 : ( Math.floor( Math.abs( intPoint ) / l ) + 1 ) * l; + + } else if ( weight === 0 && intPoint === l - 1 ) { + + intPoint = l - 2; + weight = 1; + + } + + var p0, p3; // 4 points (p1 & p2 defined below) + + if ( this.closed || intPoint > 0 ) { + + p0 = points[ ( intPoint - 1 ) % l ]; + + } else { + + // extrapolate first point + tmp.subVectors( points[ 0 ], points[ 1 ] ).add( points[ 0 ] ); + p0 = tmp; + + } + + var p1 = points[ intPoint % l ]; + var p2 = points[ ( intPoint + 1 ) % l ]; + + if ( this.closed || intPoint + 2 < l ) { + + p3 = points[ ( intPoint + 2 ) % l ]; + + } else { + + // extrapolate last point + tmp.subVectors( points[ l - 1 ], points[ l - 2 ] ).add( points[ l - 1 ] ); + p3 = tmp; + + } + + if ( this.curveType === 'centripetal' || this.curveType === 'chordal' ) { + + // init Centripetal / Chordal Catmull-Rom + var pow = this.curveType === 'chordal' ? 0.5 : 0.25; + var dt0 = Math.pow( p0.distanceToSquared( p1 ), pow ); + var dt1 = Math.pow( p1.distanceToSquared( p2 ), pow ); + var dt2 = Math.pow( p2.distanceToSquared( p3 ), pow ); + + // safety check for repeated points + if ( dt1 < 1e-4 ) { dt1 = 1.0; } + if ( dt0 < 1e-4 ) { dt0 = dt1; } + if ( dt2 < 1e-4 ) { dt2 = dt1; } + + px.initNonuniformCatmullRom( p0.x, p1.x, p2.x, p3.x, dt0, dt1, dt2 ); + py.initNonuniformCatmullRom( p0.y, p1.y, p2.y, p3.y, dt0, dt1, dt2 ); + pz.initNonuniformCatmullRom( p0.z, p1.z, p2.z, p3.z, dt0, dt1, dt2 ); + + } else if ( this.curveType === 'catmullrom' ) { + + px.initCatmullRom( p0.x, p1.x, p2.x, p3.x, this.tension ); + py.initCatmullRom( p0.y, p1.y, p2.y, p3.y, this.tension ); + pz.initCatmullRom( p0.z, p1.z, p2.z, p3.z, this.tension ); + + } + + point.set( + px.calc( weight ), + py.calc( weight ), + pz.calc( weight ) + ); + + return point; + + }; + + CatmullRomCurve3.prototype.copy = function ( source ) { + + Curve.prototype.copy.call( this, source ); + + this.points = []; + + for ( var i = 0, l = source.points.length; i < l; i ++ ) { + + var point = source.points[ i ]; + + this.points.push( point.clone() ); + + } + + this.closed = source.closed; + this.curveType = source.curveType; + this.tension = source.tension; + + return this; + + }; + + CatmullRomCurve3.prototype.toJSON = function () { + + var data = Curve.prototype.toJSON.call( this ); + + data.points = []; + + for ( var i = 0, l = this.points.length; i < l; i ++ ) { + + var point = this.points[ i ]; + data.points.push( point.toArray() ); + + } + + data.closed = this.closed; + data.curveType = this.curveType; + data.tension = this.tension; + + return data; + + }; + + CatmullRomCurve3.prototype.fromJSON = function ( json ) { + + Curve.prototype.fromJSON.call( this, json ); + + this.points = []; + + for ( var i = 0, l = json.points.length; i < l; i ++ ) { + + var point = json.points[ i ]; + this.points.push( new Vector3().fromArray( point ) ); + + } + + this.closed = json.closed; + this.curveType = json.curveType; + this.tension = json.tension; + + return this; + + }; + + /** + * Bezier Curves formulas obtained from + * http://en.wikipedia.org/wiki/Bézier_curve + */ + + function CatmullRom( t, p0, p1, p2, p3 ) { + + var v0 = ( p2 - p0 ) * 0.5; + var v1 = ( p3 - p1 ) * 0.5; + var t2 = t * t; + var t3 = t * t2; + return ( 2 * p1 - 2 * p2 + v0 + v1 ) * t3 + ( - 3 * p1 + 3 * p2 - 2 * v0 - v1 ) * t2 + v0 * t + p1; + + } + + // + + function QuadraticBezierP0( t, p ) { + + var k = 1 - t; + return k * k * p; + + } + + function QuadraticBezierP1( t, p ) { + + return 2 * ( 1 - t ) * t * p; + + } + + function QuadraticBezierP2( t, p ) { + + return t * t * p; + + } + + function QuadraticBezier( t, p0, p1, p2 ) { + + return QuadraticBezierP0( t, p0 ) + QuadraticBezierP1( t, p1 ) + + QuadraticBezierP2( t, p2 ); + + } + + // + + function CubicBezierP0( t, p ) { + + var k = 1 - t; + return k * k * k * p; + + } + + function CubicBezierP1( t, p ) { + + var k = 1 - t; + return 3 * k * k * t * p; + + } + + function CubicBezierP2( t, p ) { + + return 3 * ( 1 - t ) * t * t * p; + + } + + function CubicBezierP3( t, p ) { + + return t * t * t * p; + + } + + function CubicBezier( t, p0, p1, p2, p3 ) { + + return CubicBezierP0( t, p0 ) + CubicBezierP1( t, p1 ) + CubicBezierP2( t, p2 ) + + CubicBezierP3( t, p3 ); + + } + + function CubicBezierCurve( v0, v1, v2, v3 ) { + + Curve.call( this ); + + this.type = 'CubicBezierCurve'; + + this.v0 = v0 || new Vector2(); + this.v1 = v1 || new Vector2(); + this.v2 = v2 || new Vector2(); + this.v3 = v3 || new Vector2(); + + } + + CubicBezierCurve.prototype = Object.create( Curve.prototype ); + CubicBezierCurve.prototype.constructor = CubicBezierCurve; + + CubicBezierCurve.prototype.isCubicBezierCurve = true; + + CubicBezierCurve.prototype.getPoint = function ( t, optionalTarget ) { + + var point = optionalTarget || new Vector2(); + + var v0 = this.v0, v1 = this.v1, v2 = this.v2, v3 = this.v3; + + point.set( + CubicBezier( t, v0.x, v1.x, v2.x, v3.x ), + CubicBezier( t, v0.y, v1.y, v2.y, v3.y ) + ); + + return point; + + }; + + CubicBezierCurve.prototype.copy = function ( source ) { + + Curve.prototype.copy.call( this, source ); + + this.v0.copy( source.v0 ); + this.v1.copy( source.v1 ); + this.v2.copy( source.v2 ); + this.v3.copy( source.v3 ); + + return this; + + }; + + CubicBezierCurve.prototype.toJSON = function () { + + var data = Curve.prototype.toJSON.call( this ); + + data.v0 = this.v0.toArray(); + data.v1 = this.v1.toArray(); + data.v2 = this.v2.toArray(); + data.v3 = this.v3.toArray(); + + return data; + + }; + + CubicBezierCurve.prototype.fromJSON = function ( json ) { + + Curve.prototype.fromJSON.call( this, json ); + + this.v0.fromArray( json.v0 ); + this.v1.fromArray( json.v1 ); + this.v2.fromArray( json.v2 ); + this.v3.fromArray( json.v3 ); + + return this; + + }; + + function CubicBezierCurve3( v0, v1, v2, v3 ) { + + Curve.call( this ); + + this.type = 'CubicBezierCurve3'; + + this.v0 = v0 || new Vector3(); + this.v1 = v1 || new Vector3(); + this.v2 = v2 || new Vector3(); + this.v3 = v3 || new Vector3(); + + } + + CubicBezierCurve3.prototype = Object.create( Curve.prototype ); + CubicBezierCurve3.prototype.constructor = CubicBezierCurve3; + + CubicBezierCurve3.prototype.isCubicBezierCurve3 = true; + + CubicBezierCurve3.prototype.getPoint = function ( t, optionalTarget ) { + + var point = optionalTarget || new Vector3(); + + var v0 = this.v0, v1 = this.v1, v2 = this.v2, v3 = this.v3; + + point.set( + CubicBezier( t, v0.x, v1.x, v2.x, v3.x ), + CubicBezier( t, v0.y, v1.y, v2.y, v3.y ), + CubicBezier( t, v0.z, v1.z, v2.z, v3.z ) + ); + + return point; + + }; + + CubicBezierCurve3.prototype.copy = function ( source ) { + + Curve.prototype.copy.call( this, source ); + + this.v0.copy( source.v0 ); + this.v1.copy( source.v1 ); + this.v2.copy( source.v2 ); + this.v3.copy( source.v3 ); + + return this; + + }; + + CubicBezierCurve3.prototype.toJSON = function () { + + var data = Curve.prototype.toJSON.call( this ); + + data.v0 = this.v0.toArray(); + data.v1 = this.v1.toArray(); + data.v2 = this.v2.toArray(); + data.v3 = this.v3.toArray(); + + return data; + + }; + + CubicBezierCurve3.prototype.fromJSON = function ( json ) { + + Curve.prototype.fromJSON.call( this, json ); + + this.v0.fromArray( json.v0 ); + this.v1.fromArray( json.v1 ); + this.v2.fromArray( json.v2 ); + this.v3.fromArray( json.v3 ); + + return this; + + }; + + function LineCurve( v1, v2 ) { + + Curve.call( this ); + + this.type = 'LineCurve'; + + this.v1 = v1 || new Vector2(); + this.v2 = v2 || new Vector2(); + + } + + LineCurve.prototype = Object.create( Curve.prototype ); + LineCurve.prototype.constructor = LineCurve; + + LineCurve.prototype.isLineCurve = true; + + LineCurve.prototype.getPoint = function ( t, optionalTarget ) { + + var point = optionalTarget || new Vector2(); + + if ( t === 1 ) { + + point.copy( this.v2 ); + + } else { + + point.copy( this.v2 ).sub( this.v1 ); + point.multiplyScalar( t ).add( this.v1 ); + + } + + return point; + + }; + + // Line curve is linear, so we can overwrite default getPointAt + + LineCurve.prototype.getPointAt = function ( u, optionalTarget ) { + + return this.getPoint( u, optionalTarget ); + + }; + + LineCurve.prototype.getTangent = function ( t, optionalTarget ) { + + var tangent = optionalTarget || new Vector2(); + + tangent.copy( this.v2 ).sub( this.v1 ).normalize(); + + return tangent; + + }; + + LineCurve.prototype.copy = function ( source ) { + + Curve.prototype.copy.call( this, source ); + + this.v1.copy( source.v1 ); + this.v2.copy( source.v2 ); + + return this; + + }; + + LineCurve.prototype.toJSON = function () { + + var data = Curve.prototype.toJSON.call( this ); + + data.v1 = this.v1.toArray(); + data.v2 = this.v2.toArray(); + + return data; + + }; + + LineCurve.prototype.fromJSON = function ( json ) { + + Curve.prototype.fromJSON.call( this, json ); + + this.v1.fromArray( json.v1 ); + this.v2.fromArray( json.v2 ); + + return this; + + }; + + function LineCurve3( v1, v2 ) { + + Curve.call( this ); + + this.type = 'LineCurve3'; + + this.v1 = v1 || new Vector3(); + this.v2 = v2 || new Vector3(); + + } + + LineCurve3.prototype = Object.create( Curve.prototype ); + LineCurve3.prototype.constructor = LineCurve3; + + LineCurve3.prototype.isLineCurve3 = true; + + LineCurve3.prototype.getPoint = function ( t, optionalTarget ) { + + var point = optionalTarget || new Vector3(); + + if ( t === 1 ) { + + point.copy( this.v2 ); + + } else { + + point.copy( this.v2 ).sub( this.v1 ); + point.multiplyScalar( t ).add( this.v1 ); + + } + + return point; + + }; + + // Line curve is linear, so we can overwrite default getPointAt + + LineCurve3.prototype.getPointAt = function ( u, optionalTarget ) { + + return this.getPoint( u, optionalTarget ); + + }; + + LineCurve3.prototype.copy = function ( source ) { + + Curve.prototype.copy.call( this, source ); + + this.v1.copy( source.v1 ); + this.v2.copy( source.v2 ); + + return this; + + }; + + LineCurve3.prototype.toJSON = function () { + + var data = Curve.prototype.toJSON.call( this ); + + data.v1 = this.v1.toArray(); + data.v2 = this.v2.toArray(); + + return data; + + }; + + LineCurve3.prototype.fromJSON = function ( json ) { + + Curve.prototype.fromJSON.call( this, json ); + + this.v1.fromArray( json.v1 ); + this.v2.fromArray( json.v2 ); + + return this; + + }; + + function QuadraticBezierCurve( v0, v1, v2 ) { + + Curve.call( this ); + + this.type = 'QuadraticBezierCurve'; + + this.v0 = v0 || new Vector2(); + this.v1 = v1 || new Vector2(); + this.v2 = v2 || new Vector2(); + + } + + QuadraticBezierCurve.prototype = Object.create( Curve.prototype ); + QuadraticBezierCurve.prototype.constructor = QuadraticBezierCurve; + + QuadraticBezierCurve.prototype.isQuadraticBezierCurve = true; + + QuadraticBezierCurve.prototype.getPoint = function ( t, optionalTarget ) { + + var point = optionalTarget || new Vector2(); + + var v0 = this.v0, v1 = this.v1, v2 = this.v2; + + point.set( + QuadraticBezier( t, v0.x, v1.x, v2.x ), + QuadraticBezier( t, v0.y, v1.y, v2.y ) + ); + + return point; + + }; + + QuadraticBezierCurve.prototype.copy = function ( source ) { + + Curve.prototype.copy.call( this, source ); + + this.v0.copy( source.v0 ); + this.v1.copy( source.v1 ); + this.v2.copy( source.v2 ); + + return this; + + }; + + QuadraticBezierCurve.prototype.toJSON = function () { + + var data = Curve.prototype.toJSON.call( this ); + + data.v0 = this.v0.toArray(); + data.v1 = this.v1.toArray(); + data.v2 = this.v2.toArray(); + + return data; + + }; + + QuadraticBezierCurve.prototype.fromJSON = function ( json ) { + + Curve.prototype.fromJSON.call( this, json ); + + this.v0.fromArray( json.v0 ); + this.v1.fromArray( json.v1 ); + this.v2.fromArray( json.v2 ); + + return this; + + }; + + function QuadraticBezierCurve3( v0, v1, v2 ) { + + Curve.call( this ); + + this.type = 'QuadraticBezierCurve3'; + + this.v0 = v0 || new Vector3(); + this.v1 = v1 || new Vector3(); + this.v2 = v2 || new Vector3(); + + } + + QuadraticBezierCurve3.prototype = Object.create( Curve.prototype ); + QuadraticBezierCurve3.prototype.constructor = QuadraticBezierCurve3; + + QuadraticBezierCurve3.prototype.isQuadraticBezierCurve3 = true; + + QuadraticBezierCurve3.prototype.getPoint = function ( t, optionalTarget ) { + + var point = optionalTarget || new Vector3(); + + var v0 = this.v0, v1 = this.v1, v2 = this.v2; + + point.set( + QuadraticBezier( t, v0.x, v1.x, v2.x ), + QuadraticBezier( t, v0.y, v1.y, v2.y ), + QuadraticBezier( t, v0.z, v1.z, v2.z ) + ); + + return point; + + }; + + QuadraticBezierCurve3.prototype.copy = function ( source ) { + + Curve.prototype.copy.call( this, source ); + + this.v0.copy( source.v0 ); + this.v1.copy( source.v1 ); + this.v2.copy( source.v2 ); + + return this; + + }; + + QuadraticBezierCurve3.prototype.toJSON = function () { + + var data = Curve.prototype.toJSON.call( this ); + + data.v0 = this.v0.toArray(); + data.v1 = this.v1.toArray(); + data.v2 = this.v2.toArray(); + + return data; + + }; + + QuadraticBezierCurve3.prototype.fromJSON = function ( json ) { + + Curve.prototype.fromJSON.call( this, json ); + + this.v0.fromArray( json.v0 ); + this.v1.fromArray( json.v1 ); + this.v2.fromArray( json.v2 ); + + return this; + + }; + + function SplineCurve( points ) { + + Curve.call( this ); + + this.type = 'SplineCurve'; + + this.points = points || []; + + } + + SplineCurve.prototype = Object.create( Curve.prototype ); + SplineCurve.prototype.constructor = SplineCurve; + + SplineCurve.prototype.isSplineCurve = true; + + SplineCurve.prototype.getPoint = function ( t, optionalTarget ) { + + var point = optionalTarget || new Vector2(); + + var points = this.points; + var p = ( points.length - 1 ) * t; + + var intPoint = Math.floor( p ); + var weight = p - intPoint; + + var p0 = points[ intPoint === 0 ? intPoint : intPoint - 1 ]; + var p1 = points[ intPoint ]; + var p2 = points[ intPoint > points.length - 2 ? points.length - 1 : intPoint + 1 ]; + var p3 = points[ intPoint > points.length - 3 ? points.length - 1 : intPoint + 2 ]; + + point.set( + CatmullRom( weight, p0.x, p1.x, p2.x, p3.x ), + CatmullRom( weight, p0.y, p1.y, p2.y, p3.y ) + ); + + return point; + + }; + + SplineCurve.prototype.copy = function ( source ) { + + Curve.prototype.copy.call( this, source ); + + this.points = []; + + for ( var i = 0, l = source.points.length; i < l; i ++ ) { + + var point = source.points[ i ]; + + this.points.push( point.clone() ); + + } + + return this; + + }; + + SplineCurve.prototype.toJSON = function () { + + var data = Curve.prototype.toJSON.call( this ); + + data.points = []; + + for ( var i = 0, l = this.points.length; i < l; i ++ ) { + + var point = this.points[ i ]; + data.points.push( point.toArray() ); + + } + + return data; + + }; + + SplineCurve.prototype.fromJSON = function ( json ) { + + Curve.prototype.fromJSON.call( this, json ); + + this.points = []; + + for ( var i = 0, l = json.points.length; i < l; i ++ ) { + + var point = json.points[ i ]; + this.points.push( new Vector2().fromArray( point ) ); + + } + + return this; + + }; + + var Curves = /*#__PURE__*/Object.freeze({ + __proto__: null, + ArcCurve: ArcCurve, + CatmullRomCurve3: CatmullRomCurve3, + CubicBezierCurve: CubicBezierCurve, + CubicBezierCurve3: CubicBezierCurve3, + EllipseCurve: EllipseCurve, + LineCurve: LineCurve, + LineCurve3: LineCurve3, + QuadraticBezierCurve: QuadraticBezierCurve, + QuadraticBezierCurve3: QuadraticBezierCurve3, + SplineCurve: SplineCurve + }); + + /************************************************************** + * Curved Path - a curve path is simply a array of connected + * curves, but retains the api of a curve + **************************************************************/ + + function CurvePath() { + + Curve.call( this ); + + this.type = 'CurvePath'; + + this.curves = []; + this.autoClose = false; // Automatically closes the path + + } + + CurvePath.prototype = Object.assign( Object.create( Curve.prototype ), { + + constructor: CurvePath, + + add: function ( curve ) { + + this.curves.push( curve ); + + }, + + closePath: function () { + + // Add a line curve if start and end of lines are not connected + var startPoint = this.curves[ 0 ].getPoint( 0 ); + var endPoint = this.curves[ this.curves.length - 1 ].getPoint( 1 ); + + if ( ! startPoint.equals( endPoint ) ) { + + this.curves.push( new LineCurve( endPoint, startPoint ) ); + + } + + }, + + // To get accurate point with reference to + // entire path distance at time t, + // following has to be done: + + // 1. Length of each sub path have to be known + // 2. Locate and identify type of curve + // 3. Get t for the curve + // 4. Return curve.getPointAt(t') + + getPoint: function ( t ) { + + var d = t * this.getLength(); + var curveLengths = this.getCurveLengths(); + var i = 0; + + // To think about boundaries points. + + while ( i < curveLengths.length ) { + + if ( curveLengths[ i ] >= d ) { + + var diff = curveLengths[ i ] - d; + var curve = this.curves[ i ]; + + var segmentLength = curve.getLength(); + var u = segmentLength === 0 ? 0 : 1 - diff / segmentLength; + + return curve.getPointAt( u ); + + } + + i ++; + + } + + return null; + + // loop where sum != 0, sum > d , sum+1 1 && ! points[ points.length - 1 ].equals( points[ 0 ] ) ) { + + points.push( points[ 0 ] ); + + } + + return points; + + }, + + copy: function ( source ) { + + Curve.prototype.copy.call( this, source ); + + this.curves = []; + + for ( var i = 0, l = source.curves.length; i < l; i ++ ) { + + var curve = source.curves[ i ]; + + this.curves.push( curve.clone() ); + + } + + this.autoClose = source.autoClose; + + return this; + + }, + + toJSON: function () { + + var data = Curve.prototype.toJSON.call( this ); + + data.autoClose = this.autoClose; + data.curves = []; + + for ( var i = 0, l = this.curves.length; i < l; i ++ ) { + + var curve = this.curves[ i ]; + data.curves.push( curve.toJSON() ); + + } + + return data; + + }, + + fromJSON: function ( json ) { + + Curve.prototype.fromJSON.call( this, json ); + + this.autoClose = json.autoClose; + this.curves = []; + + for ( var i = 0, l = json.curves.length; i < l; i ++ ) { + + var curve = json.curves[ i ]; + this.curves.push( new Curves[ curve.type ]().fromJSON( curve ) ); + + } + + return this; + + } + + } ); + + function Path( points ) { + + CurvePath.call( this ); + + this.type = 'Path'; + + this.currentPoint = new Vector2(); + + if ( points ) { + + this.setFromPoints( points ); + + } + + } + + Path.prototype = Object.assign( Object.create( CurvePath.prototype ), { + + constructor: Path, + + setFromPoints: function ( points ) { + + this.moveTo( points[ 0 ].x, points[ 0 ].y ); + + for ( var i = 1, l = points.length; i < l; i ++ ) { + + this.lineTo( points[ i ].x, points[ i ].y ); + + } + + return this; + + }, + + moveTo: function ( x, y ) { + + this.currentPoint.set( x, y ); // TODO consider referencing vectors instead of copying? + + return this; + + }, + + lineTo: function ( x, y ) { + + var curve = new LineCurve( this.currentPoint.clone(), new Vector2( x, y ) ); + this.curves.push( curve ); + + this.currentPoint.set( x, y ); + + return this; + + }, + + quadraticCurveTo: function ( aCPx, aCPy, aX, aY ) { + + var curve = new QuadraticBezierCurve( + this.currentPoint.clone(), + new Vector2( aCPx, aCPy ), + new Vector2( aX, aY ) + ); + + this.curves.push( curve ); + + this.currentPoint.set( aX, aY ); + + return this; + + }, + + bezierCurveTo: function ( aCP1x, aCP1y, aCP2x, aCP2y, aX, aY ) { + + var curve = new CubicBezierCurve( + this.currentPoint.clone(), + new Vector2( aCP1x, aCP1y ), + new Vector2( aCP2x, aCP2y ), + new Vector2( aX, aY ) + ); + + this.curves.push( curve ); + + this.currentPoint.set( aX, aY ); + + return this; + + }, + + splineThru: function ( pts /*Array of Vector*/ ) { + + var npts = [ this.currentPoint.clone() ].concat( pts ); + + var curve = new SplineCurve( npts ); + this.curves.push( curve ); + + this.currentPoint.copy( pts[ pts.length - 1 ] ); + + return this; + + }, + + arc: function ( aX, aY, aRadius, aStartAngle, aEndAngle, aClockwise ) { + + var x0 = this.currentPoint.x; + var y0 = this.currentPoint.y; + + this.absarc( aX + x0, aY + y0, aRadius, + aStartAngle, aEndAngle, aClockwise ); + + return this; + + }, + + absarc: function ( aX, aY, aRadius, aStartAngle, aEndAngle, aClockwise ) { + + this.absellipse( aX, aY, aRadius, aRadius, aStartAngle, aEndAngle, aClockwise ); + + return this; + + }, + + ellipse: function ( aX, aY, xRadius, yRadius, aStartAngle, aEndAngle, aClockwise, aRotation ) { + + var x0 = this.currentPoint.x; + var y0 = this.currentPoint.y; + + this.absellipse( aX + x0, aY + y0, xRadius, yRadius, aStartAngle, aEndAngle, aClockwise, aRotation ); + + return this; + + }, + + absellipse: function ( aX, aY, xRadius, yRadius, aStartAngle, aEndAngle, aClockwise, aRotation ) { + + var curve = new EllipseCurve( aX, aY, xRadius, yRadius, aStartAngle, aEndAngle, aClockwise, aRotation ); + + if ( this.curves.length > 0 ) { + + // if a previous curve is present, attempt to join + var firstPoint = curve.getPoint( 0 ); + + if ( ! firstPoint.equals( this.currentPoint ) ) { + + this.lineTo( firstPoint.x, firstPoint.y ); + + } + + } + + this.curves.push( curve ); + + var lastPoint = curve.getPoint( 1 ); + this.currentPoint.copy( lastPoint ); + + return this; + + }, + + copy: function ( source ) { + + CurvePath.prototype.copy.call( this, source ); + + this.currentPoint.copy( source.currentPoint ); + + return this; + + }, + + toJSON: function () { + + var data = CurvePath.prototype.toJSON.call( this ); + + data.currentPoint = this.currentPoint.toArray(); + + return data; + + }, + + fromJSON: function ( json ) { + + CurvePath.prototype.fromJSON.call( this, json ); + + this.currentPoint.fromArray( json.currentPoint ); + + return this; + + } + + } ); + + function Shape( points ) { + + Path.call( this, points ); + + this.uuid = MathUtils.generateUUID(); + + this.type = 'Shape'; + + this.holes = []; + + } + + Shape.prototype = Object.assign( Object.create( Path.prototype ), { + + constructor: Shape, + + getPointsHoles: function ( divisions ) { + + var holesPts = []; + + for ( var i = 0, l = this.holes.length; i < l; i ++ ) { + + holesPts[ i ] = this.holes[ i ].getPoints( divisions ); + + } + + return holesPts; + + }, + + // get points of shape and holes (keypoints based on segments parameter) + + extractPoints: function ( divisions ) { + + return { + + shape: this.getPoints( divisions ), + holes: this.getPointsHoles( divisions ) + + }; + + }, + + copy: function ( source ) { + + Path.prototype.copy.call( this, source ); + + this.holes = []; + + for ( var i = 0, l = source.holes.length; i < l; i ++ ) { + + var hole = source.holes[ i ]; + + this.holes.push( hole.clone() ); + + } + + return this; + + }, + + toJSON: function () { + + var data = Path.prototype.toJSON.call( this ); + + data.uuid = this.uuid; + data.holes = []; + + for ( var i = 0, l = this.holes.length; i < l; i ++ ) { + + var hole = this.holes[ i ]; + data.holes.push( hole.toJSON() ); + + } + + return data; + + }, + + fromJSON: function ( json ) { + + Path.prototype.fromJSON.call( this, json ); + + this.uuid = json.uuid; + this.holes = []; + + for ( var i = 0, l = json.holes.length; i < l; i ++ ) { + + var hole = json.holes[ i ]; + this.holes.push( new Path().fromJSON( hole ) ); + + } + + return this; + + } + + } ); + + function Light( color, intensity ) { + + Object3D.call( this ); + + this.type = 'Light'; + + this.color = new Color( color ); + this.intensity = intensity !== undefined ? intensity : 1; + + this.receiveShadow = undefined; + + } + + Light.prototype = Object.assign( Object.create( Object3D.prototype ), { + + constructor: Light, + + isLight: true, + + copy: function ( source ) { + + Object3D.prototype.copy.call( this, source ); + + this.color.copy( source.color ); + this.intensity = source.intensity; + + return this; + + }, + + toJSON: function ( meta ) { + + var data = Object3D.prototype.toJSON.call( this, meta ); + + data.object.color = this.color.getHex(); + data.object.intensity = this.intensity; + + if ( this.groundColor !== undefined ) { data.object.groundColor = this.groundColor.getHex(); } + + if ( this.distance !== undefined ) { data.object.distance = this.distance; } + if ( this.angle !== undefined ) { data.object.angle = this.angle; } + if ( this.decay !== undefined ) { data.object.decay = this.decay; } + if ( this.penumbra !== undefined ) { data.object.penumbra = this.penumbra; } + + if ( this.shadow !== undefined ) { data.object.shadow = this.shadow.toJSON(); } + + return data; + + } + + } ); + + function HemisphereLight( skyColor, groundColor, intensity ) { + + Light.call( this, skyColor, intensity ); + + this.type = 'HemisphereLight'; + + this.castShadow = undefined; + + this.position.copy( Object3D.DefaultUp ); + this.updateMatrix(); + + this.groundColor = new Color( groundColor ); + + } + + HemisphereLight.prototype = Object.assign( Object.create( Light.prototype ), { + + constructor: HemisphereLight, + + isHemisphereLight: true, + + copy: function ( source ) { + + Light.prototype.copy.call( this, source ); + + this.groundColor.copy( source.groundColor ); + + return this; + + } + + } ); + + function LightShadow( camera ) { + + this.camera = camera; + + this.bias = 0; + this.normalBias = 0; + this.radius = 1; + + this.mapSize = new Vector2( 512, 512 ); + + this.map = null; + this.mapPass = null; + this.matrix = new Matrix4(); + + this.autoUpdate = true; + this.needsUpdate = false; + + this._frustum = new Frustum(); + this._frameExtents = new Vector2( 1, 1 ); + + this._viewportCount = 1; + + this._viewports = [ + + new Vector4( 0, 0, 1, 1 ) + + ]; + + } + + Object.assign( LightShadow.prototype, { + + _projScreenMatrix: new Matrix4(), + + _lightPositionWorld: new Vector3(), + + _lookTarget: new Vector3(), + + getViewportCount: function () { + + return this._viewportCount; + + }, + + getFrustum: function () { + + return this._frustum; + + }, + + updateMatrices: function ( light ) { + + var shadowCamera = this.camera, + shadowMatrix = this.matrix, + projScreenMatrix = this._projScreenMatrix, + lookTarget = this._lookTarget, + lightPositionWorld = this._lightPositionWorld; + + lightPositionWorld.setFromMatrixPosition( light.matrixWorld ); + shadowCamera.position.copy( lightPositionWorld ); + + lookTarget.setFromMatrixPosition( light.target.matrixWorld ); + shadowCamera.lookAt( lookTarget ); + shadowCamera.updateMatrixWorld(); + + projScreenMatrix.multiplyMatrices( shadowCamera.projectionMatrix, shadowCamera.matrixWorldInverse ); + this._frustum.setFromProjectionMatrix( projScreenMatrix ); + + shadowMatrix.set( + 0.5, 0.0, 0.0, 0.5, + 0.0, 0.5, 0.0, 0.5, + 0.0, 0.0, 0.5, 0.5, + 0.0, 0.0, 0.0, 1.0 + ); + + shadowMatrix.multiply( shadowCamera.projectionMatrix ); + shadowMatrix.multiply( shadowCamera.matrixWorldInverse ); + + }, + + getViewport: function ( viewportIndex ) { + + return this._viewports[ viewportIndex ]; + + }, + + getFrameExtents: function () { + + return this._frameExtents; + + }, + + copy: function ( source ) { + + this.camera = source.camera.clone(); + + this.bias = source.bias; + this.radius = source.radius; + + this.mapSize.copy( source.mapSize ); + + return this; + + }, + + clone: function () { + + return new this.constructor().copy( this ); + + }, + + toJSON: function () { + + var object = {}; + + if ( this.bias !== 0 ) { object.bias = this.bias; } + if ( this.normalBias !== 0 ) { object.normalBias = this.normalBias; } + if ( this.radius !== 1 ) { object.radius = this.radius; } + if ( this.mapSize.x !== 512 || this.mapSize.y !== 512 ) { object.mapSize = this.mapSize.toArray(); } + + object.camera = this.camera.toJSON( false ).object; + delete object.camera.matrix; + + return object; + + } + + } ); + + function SpotLightShadow() { + + LightShadow.call( this, new PerspectiveCamera( 50, 1, 0.5, 500 ) ); + + } + + SpotLightShadow.prototype = Object.assign( Object.create( LightShadow.prototype ), { + + constructor: SpotLightShadow, + + isSpotLightShadow: true, + + updateMatrices: function ( light ) { + + var camera = this.camera; + + var fov = MathUtils.RAD2DEG * 2 * light.angle; + var aspect = this.mapSize.width / this.mapSize.height; + var far = light.distance || camera.far; + + if ( fov !== camera.fov || aspect !== camera.aspect || far !== camera.far ) { + + camera.fov = fov; + camera.aspect = aspect; + camera.far = far; + camera.updateProjectionMatrix(); + + } + + LightShadow.prototype.updateMatrices.call( this, light ); + + } + + } ); + + function SpotLight( color, intensity, distance, angle, penumbra, decay ) { + + Light.call( this, color, intensity ); + + this.type = 'SpotLight'; + + this.position.copy( Object3D.DefaultUp ); + this.updateMatrix(); + + this.target = new Object3D(); + + Object.defineProperty( this, 'power', { + get: function () { + + // intensity = power per solid angle. + // ref: equation (17) from https://seblagarde.files.wordpress.com/2015/07/course_notes_moving_frostbite_to_pbr_v32.pdf + return this.intensity * Math.PI; + + }, + set: function ( power ) { + + // intensity = power per solid angle. + // ref: equation (17) from https://seblagarde.files.wordpress.com/2015/07/course_notes_moving_frostbite_to_pbr_v32.pdf + this.intensity = power / Math.PI; + + } + } ); + + this.distance = ( distance !== undefined ) ? distance : 0; + this.angle = ( angle !== undefined ) ? angle : Math.PI / 3; + this.penumbra = ( penumbra !== undefined ) ? penumbra : 0; + this.decay = ( decay !== undefined ) ? decay : 1; // for physically correct lights, should be 2. + + this.shadow = new SpotLightShadow(); + + } + + SpotLight.prototype = Object.assign( Object.create( Light.prototype ), { + + constructor: SpotLight, + + isSpotLight: true, + + copy: function ( source ) { + + Light.prototype.copy.call( this, source ); + + this.distance = source.distance; + this.angle = source.angle; + this.penumbra = source.penumbra; + this.decay = source.decay; + + this.target = source.target.clone(); + + this.shadow = source.shadow.clone(); + + return this; + + } + + } ); + + function PointLightShadow() { + + LightShadow.call( this, new PerspectiveCamera( 90, 1, 0.5, 500 ) ); + + this._frameExtents = new Vector2( 4, 2 ); + + this._viewportCount = 6; + + this._viewports = [ + // These viewports map a cube-map onto a 2D texture with the + // following orientation: + // + // xzXZ + // y Y + // + // X - Positive x direction + // x - Negative x direction + // Y - Positive y direction + // y - Negative y direction + // Z - Positive z direction + // z - Negative z direction + + // positive X + new Vector4( 2, 1, 1, 1 ), + // negative X + new Vector4( 0, 1, 1, 1 ), + // positive Z + new Vector4( 3, 1, 1, 1 ), + // negative Z + new Vector4( 1, 1, 1, 1 ), + // positive Y + new Vector4( 3, 0, 1, 1 ), + // negative Y + new Vector4( 1, 0, 1, 1 ) + ]; + + this._cubeDirections = [ + new Vector3( 1, 0, 0 ), new Vector3( - 1, 0, 0 ), new Vector3( 0, 0, 1 ), + new Vector3( 0, 0, - 1 ), new Vector3( 0, 1, 0 ), new Vector3( 0, - 1, 0 ) + ]; + + this._cubeUps = [ + new Vector3( 0, 1, 0 ), new Vector3( 0, 1, 0 ), new Vector3( 0, 1, 0 ), + new Vector3( 0, 1, 0 ), new Vector3( 0, 0, 1 ), new Vector3( 0, 0, - 1 ) + ]; + + } + + PointLightShadow.prototype = Object.assign( Object.create( LightShadow.prototype ), { + + constructor: PointLightShadow, + + isPointLightShadow: true, + + updateMatrices: function ( light, viewportIndex ) { + + if ( viewportIndex === undefined ) { viewportIndex = 0; } + + var camera = this.camera, + shadowMatrix = this.matrix, + lightPositionWorld = this._lightPositionWorld, + lookTarget = this._lookTarget, + projScreenMatrix = this._projScreenMatrix; + + lightPositionWorld.setFromMatrixPosition( light.matrixWorld ); + camera.position.copy( lightPositionWorld ); + + lookTarget.copy( camera.position ); + lookTarget.add( this._cubeDirections[ viewportIndex ] ); + camera.up.copy( this._cubeUps[ viewportIndex ] ); + camera.lookAt( lookTarget ); + camera.updateMatrixWorld(); + + shadowMatrix.makeTranslation( - lightPositionWorld.x, - lightPositionWorld.y, - lightPositionWorld.z ); + + projScreenMatrix.multiplyMatrices( camera.projectionMatrix, camera.matrixWorldInverse ); + this._frustum.setFromProjectionMatrix( projScreenMatrix ); + + } + + } ); + + function PointLight( color, intensity, distance, decay ) { + + Light.call( this, color, intensity ); + + this.type = 'PointLight'; + + Object.defineProperty( this, 'power', { + get: function () { + + // intensity = power per solid angle. + // ref: equation (15) from https://seblagarde.files.wordpress.com/2015/07/course_notes_moving_frostbite_to_pbr_v32.pdf + return this.intensity * 4 * Math.PI; + + }, + set: function ( power ) { + + // intensity = power per solid angle. + // ref: equation (15) from https://seblagarde.files.wordpress.com/2015/07/course_notes_moving_frostbite_to_pbr_v32.pdf + this.intensity = power / ( 4 * Math.PI ); + + } + } ); + + this.distance = ( distance !== undefined ) ? distance : 0; + this.decay = ( decay !== undefined ) ? decay : 1; // for physically correct lights, should be 2. + + this.shadow = new PointLightShadow(); + + } + + PointLight.prototype = Object.assign( Object.create( Light.prototype ), { + + constructor: PointLight, + + isPointLight: true, + + copy: function ( source ) { + + Light.prototype.copy.call( this, source ); + + this.distance = source.distance; + this.decay = source.decay; + + this.shadow = source.shadow.clone(); + + return this; + + } + + } ); + + function OrthographicCamera( left, right, top, bottom, near, far ) { + + Camera.call( this ); + + this.type = 'OrthographicCamera'; + + this.zoom = 1; + this.view = null; + + this.left = ( left !== undefined ) ? left : - 1; + this.right = ( right !== undefined ) ? right : 1; + this.top = ( top !== undefined ) ? top : 1; + this.bottom = ( bottom !== undefined ) ? bottom : - 1; + + this.near = ( near !== undefined ) ? near : 0.1; + this.far = ( far !== undefined ) ? far : 2000; + + this.updateProjectionMatrix(); + + } + + OrthographicCamera.prototype = Object.assign( Object.create( Camera.prototype ), { + + constructor: OrthographicCamera, + + isOrthographicCamera: true, + + copy: function ( source, recursive ) { + + Camera.prototype.copy.call( this, source, recursive ); + + this.left = source.left; + this.right = source.right; + this.top = source.top; + this.bottom = source.bottom; + this.near = source.near; + this.far = source.far; + + this.zoom = source.zoom; + this.view = source.view === null ? null : Object.assign( {}, source.view ); + + return this; + + }, + + setViewOffset: function ( fullWidth, fullHeight, x, y, width, height ) { + + if ( this.view === null ) { + + this.view = { + enabled: true, + fullWidth: 1, + fullHeight: 1, + offsetX: 0, + offsetY: 0, + width: 1, + height: 1 + }; + + } + + this.view.enabled = true; + this.view.fullWidth = fullWidth; + this.view.fullHeight = fullHeight; + this.view.offsetX = x; + this.view.offsetY = y; + this.view.width = width; + this.view.height = height; + + this.updateProjectionMatrix(); + + }, + + clearViewOffset: function () { + + if ( this.view !== null ) { + + this.view.enabled = false; + + } + + this.updateProjectionMatrix(); + + }, + + updateProjectionMatrix: function () { + + var dx = ( this.right - this.left ) / ( 2 * this.zoom ); + var dy = ( this.top - this.bottom ) / ( 2 * this.zoom ); + var cx = ( this.right + this.left ) / 2; + var cy = ( this.top + this.bottom ) / 2; + + var left = cx - dx; + var right = cx + dx; + var top = cy + dy; + var bottom = cy - dy; + + if ( this.view !== null && this.view.enabled ) { + + var scaleW = ( this.right - this.left ) / this.view.fullWidth / this.zoom; + var scaleH = ( this.top - this.bottom ) / this.view.fullHeight / this.zoom; + + left += scaleW * this.view.offsetX; + right = left + scaleW * this.view.width; + top -= scaleH * this.view.offsetY; + bottom = top - scaleH * this.view.height; + + } + + this.projectionMatrix.makeOrthographic( left, right, top, bottom, this.near, this.far ); + + this.projectionMatrixInverse.getInverse( this.projectionMatrix ); + + }, + + toJSON: function ( meta ) { + + var data = Object3D.prototype.toJSON.call( this, meta ); + + data.object.zoom = this.zoom; + data.object.left = this.left; + data.object.right = this.right; + data.object.top = this.top; + data.object.bottom = this.bottom; + data.object.near = this.near; + data.object.far = this.far; + + if ( this.view !== null ) { data.object.view = Object.assign( {}, this.view ); } + + return data; + + } + + } ); + + function DirectionalLightShadow() { + + LightShadow.call( this, new OrthographicCamera( - 5, 5, 5, - 5, 0.5, 500 ) ); + + } + + DirectionalLightShadow.prototype = Object.assign( Object.create( LightShadow.prototype ), { + + constructor: DirectionalLightShadow, + + isDirectionalLightShadow: true, + + updateMatrices: function ( light ) { + + LightShadow.prototype.updateMatrices.call( this, light ); + + } + + } ); + + function DirectionalLight( color, intensity ) { + + Light.call( this, color, intensity ); + + this.type = 'DirectionalLight'; + + this.position.copy( Object3D.DefaultUp ); + this.updateMatrix(); + + this.target = new Object3D(); + + this.shadow = new DirectionalLightShadow(); + + } + + DirectionalLight.prototype = Object.assign( Object.create( Light.prototype ), { + + constructor: DirectionalLight, + + isDirectionalLight: true, + + copy: function ( source ) { + + Light.prototype.copy.call( this, source ); + + this.target = source.target.clone(); + + this.shadow = source.shadow.clone(); + + return this; + + } + + } ); + + function AmbientLight( color, intensity ) { + + Light.call( this, color, intensity ); + + this.type = 'AmbientLight'; + + this.castShadow = undefined; + + } + + AmbientLight.prototype = Object.assign( Object.create( Light.prototype ), { + + constructor: AmbientLight, + + isAmbientLight: true + + } ); + + function RectAreaLight( color, intensity, width, height ) { + + Light.call( this, color, intensity ); + + this.type = 'RectAreaLight'; + + this.width = ( width !== undefined ) ? width : 10; + this.height = ( height !== undefined ) ? height : 10; + + } + + RectAreaLight.prototype = Object.assign( Object.create( Light.prototype ), { + + constructor: RectAreaLight, + + isRectAreaLight: true, + + copy: function ( source ) { + + Light.prototype.copy.call( this, source ); + + this.width = source.width; + this.height = source.height; + + return this; + + }, + + toJSON: function ( meta ) { + + var data = Light.prototype.toJSON.call( this, meta ); + + data.object.width = this.width; + data.object.height = this.height; + + return data; + + } + + } ); + + /** + * Primary reference: + * https://graphics.stanford.edu/papers/envmap/envmap.pdf + * + * Secondary reference: + * https://www.ppsloan.org/publications/StupidSH36.pdf + */ + + // 3-band SH defined by 9 coefficients + + var SphericalHarmonics3 = function SphericalHarmonics3() { + + Object.defineProperty( this, 'isSphericalHarmonics3', { value: true } ); + + this.coefficients = []; + + for ( var i = 0; i < 9; i ++ ) { + + this.coefficients.push( new Vector3() ); + + } + + }; + + SphericalHarmonics3.prototype.set = function set ( coefficients ) { + + for ( var i = 0; i < 9; i ++ ) { + + this.coefficients[ i ].copy( coefficients[ i ] ); + + } + + return this; + + }; + + SphericalHarmonics3.prototype.zero = function zero () { + + for ( var i = 0; i < 9; i ++ ) { + + this.coefficients[ i ].set( 0, 0, 0 ); + + } + + return this; + + }; + + // get the radiance in the direction of the normal + // target is a Vector3 + SphericalHarmonics3.prototype.getAt = function getAt ( normal, target ) { + + // normal is assumed to be unit length + + var x = normal.x, y = normal.y, z = normal.z; + + var coeff = this.coefficients; + + // band 0 + target.copy( coeff[ 0 ] ).multiplyScalar( 0.282095 ); + + // band 1 + target.addScaledVector( coeff[ 1 ], 0.488603 * y ); + target.addScaledVector( coeff[ 2 ], 0.488603 * z ); + target.addScaledVector( coeff[ 3 ], 0.488603 * x ); + + // band 2 + target.addScaledVector( coeff[ 4 ], 1.092548 * ( x * y ) ); + target.addScaledVector( coeff[ 5 ], 1.092548 * ( y * z ) ); + target.addScaledVector( coeff[ 6 ], 0.315392 * ( 3.0 * z * z - 1.0 ) ); + target.addScaledVector( coeff[ 7 ], 1.092548 * ( x * z ) ); + target.addScaledVector( coeff[ 8 ], 0.546274 * ( x * x - y * y ) ); + + return target; + + }; + + // get the irradiance (radiance convolved with cosine lobe) in the direction of the normal + // target is a Vector3 + // https://graphics.stanford.edu/papers/envmap/envmap.pdf + SphericalHarmonics3.prototype.getIrradianceAt = function getIrradianceAt ( normal, target ) { + + // normal is assumed to be unit length + + var x = normal.x, y = normal.y, z = normal.z; + + var coeff = this.coefficients; + + // band 0 + target.copy( coeff[ 0 ] ).multiplyScalar( 0.886227 ); // π * 0.282095 + + // band 1 + target.addScaledVector( coeff[ 1 ], 2.0 * 0.511664 * y ); // ( 2 * π / 3 ) * 0.488603 + target.addScaledVector( coeff[ 2 ], 2.0 * 0.511664 * z ); + target.addScaledVector( coeff[ 3 ], 2.0 * 0.511664 * x ); + + // band 2 + target.addScaledVector( coeff[ 4 ], 2.0 * 0.429043 * x * y ); // ( π / 4 ) * 1.092548 + target.addScaledVector( coeff[ 5 ], 2.0 * 0.429043 * y * z ); + target.addScaledVector( coeff[ 6 ], 0.743125 * z * z - 0.247708 ); // ( π / 4 ) * 0.315392 * 3 + target.addScaledVector( coeff[ 7 ], 2.0 * 0.429043 * x * z ); + target.addScaledVector( coeff[ 8 ], 0.429043 * ( x * x - y * y ) ); // ( π / 4 ) * 0.546274 + + return target; + + }; + + SphericalHarmonics3.prototype.add = function add ( sh ) { + + for ( var i = 0; i < 9; i ++ ) { + + this.coefficients[ i ].add( sh.coefficients[ i ] ); + + } + + return this; + + }; + + SphericalHarmonics3.prototype.addScaledSH = function addScaledSH ( sh, s ) { + + for ( var i = 0; i < 9; i ++ ) { + + this.coefficients[ i ].addScaledVector( sh.coefficients[ i ], s ); + + } + + return this; + + }; + + SphericalHarmonics3.prototype.scale = function scale ( s ) { + + for ( var i = 0; i < 9; i ++ ) { + + this.coefficients[ i ].multiplyScalar( s ); + + } + + return this; + + }; + + SphericalHarmonics3.prototype.lerp = function lerp ( sh, alpha ) { + + for ( var i = 0; i < 9; i ++ ) { + + this.coefficients[ i ].lerp( sh.coefficients[ i ], alpha ); + + } + + return this; + + }; + + SphericalHarmonics3.prototype.equals = function equals ( sh ) { + + for ( var i = 0; i < 9; i ++ ) { + + if ( ! this.coefficients[ i ].equals( sh.coefficients[ i ] ) ) { + + return false; + + } + + } + + return true; + + }; + + SphericalHarmonics3.prototype.copy = function copy ( sh ) { + + return this.set( sh.coefficients ); + + }; + + SphericalHarmonics3.prototype.clone = function clone () { + + return new this.constructor().copy( this ); + + }; + + SphericalHarmonics3.prototype.fromArray = function fromArray ( array, offset ) { + + if ( offset === undefined ) { offset = 0; } + + var coefficients = this.coefficients; + + for ( var i = 0; i < 9; i ++ ) { + + coefficients[ i ].fromArray( array, offset + ( i * 3 ) ); + + } + + return this; + + }; + + SphericalHarmonics3.prototype.toArray = function toArray ( array, offset ) { + + if ( array === undefined ) { array = []; } + if ( offset === undefined ) { offset = 0; } + + var coefficients = this.coefficients; + + for ( var i = 0; i < 9; i ++ ) { + + coefficients[ i ].toArray( array, offset + ( i * 3 ) ); + + } + + return array; + + }; + + // evaluate the basis functions + // shBasis is an Array[ 9 ] + SphericalHarmonics3.getBasisAt = function getBasisAt ( normal, shBasis ) { + + // normal is assumed to be unit length + + var x = normal.x, y = normal.y, z = normal.z; + + // band 0 + shBasis[ 0 ] = 0.282095; + + // band 1 + shBasis[ 1 ] = 0.488603 * y; + shBasis[ 2 ] = 0.488603 * z; + shBasis[ 3 ] = 0.488603 * x; + + // band 2 + shBasis[ 4 ] = 1.092548 * x * y; + shBasis[ 5 ] = 1.092548 * y * z; + shBasis[ 6 ] = 0.315392 * ( 3 * z * z - 1 ); + shBasis[ 7 ] = 1.092548 * x * z; + shBasis[ 8 ] = 0.546274 * ( x * x - y * y ); + + }; + + function LightProbe( sh, intensity ) { + + Light.call( this, undefined, intensity ); + + this.type = 'LightProbe'; + + this.sh = ( sh !== undefined ) ? sh : new SphericalHarmonics3(); + + } + + LightProbe.prototype = Object.assign( Object.create( Light.prototype ), { + + constructor: LightProbe, + + isLightProbe: true, + + copy: function ( source ) { + + Light.prototype.copy.call( this, source ); + + this.sh.copy( source.sh ); + + return this; + + }, + + fromJSON: function ( json ) { + + this.intensity = json.intensity; // TODO: Move this bit to Light.fromJSON(); + this.sh.fromArray( json.sh ); + + return this; + + }, + + toJSON: function ( meta ) { + + var data = Light.prototype.toJSON.call( this, meta ); + + data.object.sh = this.sh.toArray(); + + return data; + + } + + } ); + + function MaterialLoader( manager ) { + + Loader.call( this, manager ); + + this.textures = {}; + + } + + MaterialLoader.prototype = Object.assign( Object.create( Loader.prototype ), { + + constructor: MaterialLoader, + + load: function ( url, onLoad, onProgress, onError ) { + + var scope = this; + + var loader = new FileLoader( scope.manager ); + loader.setPath( scope.path ); + loader.setRequestHeader( scope.requestHeader ); + loader.load( url, function ( text ) { + + try { + + onLoad( scope.parse( JSON.parse( text ) ) ); + + } catch ( e ) { + + if ( onError ) { + + onError( e ); + + } else { + + console.error( e ); + + } + + scope.manager.itemError( url ); + + } + + }, onProgress, onError ); + + }, + + parse: function ( json ) { + + var textures = this.textures; + + function getTexture( name ) { + + if ( textures[ name ] === undefined ) { + + console.warn( 'THREE.MaterialLoader: Undefined texture', name ); + + } + + return textures[ name ]; + + } + + var material = new Materials[ json.type ](); + + if ( json.uuid !== undefined ) { material.uuid = json.uuid; } + if ( json.name !== undefined ) { material.name = json.name; } + if ( json.color !== undefined ) { material.color.setHex( json.color ); } + if ( json.roughness !== undefined ) { material.roughness = json.roughness; } + if ( json.metalness !== undefined ) { material.metalness = json.metalness; } + if ( json.sheen !== undefined ) { material.sheen = new Color().setHex( json.sheen ); } + if ( json.emissive !== undefined ) { material.emissive.setHex( json.emissive ); } + if ( json.specular !== undefined ) { material.specular.setHex( json.specular ); } + if ( json.shininess !== undefined ) { material.shininess = json.shininess; } + if ( json.clearcoat !== undefined ) { material.clearcoat = json.clearcoat; } + if ( json.clearcoatRoughness !== undefined ) { material.clearcoatRoughness = json.clearcoatRoughness; } + if ( json.fog !== undefined ) { material.fog = json.fog; } + if ( json.flatShading !== undefined ) { material.flatShading = json.flatShading; } + if ( json.blending !== undefined ) { material.blending = json.blending; } + if ( json.combine !== undefined ) { material.combine = json.combine; } + if ( json.side !== undefined ) { material.side = json.side; } + if ( json.opacity !== undefined ) { material.opacity = json.opacity; } + if ( json.transparent !== undefined ) { material.transparent = json.transparent; } + if ( json.alphaTest !== undefined ) { material.alphaTest = json.alphaTest; } + if ( json.depthTest !== undefined ) { material.depthTest = json.depthTest; } + if ( json.depthWrite !== undefined ) { material.depthWrite = json.depthWrite; } + if ( json.colorWrite !== undefined ) { material.colorWrite = json.colorWrite; } + + if ( json.stencilWrite !== undefined ) { material.stencilWrite = json.stencilWrite; } + if ( json.stencilWriteMask !== undefined ) { material.stencilWriteMask = json.stencilWriteMask; } + if ( json.stencilFunc !== undefined ) { material.stencilFunc = json.stencilFunc; } + if ( json.stencilRef !== undefined ) { material.stencilRef = json.stencilRef; } + if ( json.stencilFuncMask !== undefined ) { material.stencilFuncMask = json.stencilFuncMask; } + if ( json.stencilFail !== undefined ) { material.stencilFail = json.stencilFail; } + if ( json.stencilZFail !== undefined ) { material.stencilZFail = json.stencilZFail; } + if ( json.stencilZPass !== undefined ) { material.stencilZPass = json.stencilZPass; } + + if ( json.wireframe !== undefined ) { material.wireframe = json.wireframe; } + if ( json.wireframeLinewidth !== undefined ) { material.wireframeLinewidth = json.wireframeLinewidth; } + if ( json.wireframeLinecap !== undefined ) { material.wireframeLinecap = json.wireframeLinecap; } + if ( json.wireframeLinejoin !== undefined ) { material.wireframeLinejoin = json.wireframeLinejoin; } + + if ( json.rotation !== undefined ) { material.rotation = json.rotation; } + + if ( json.linewidth !== 1 ) { material.linewidth = json.linewidth; } + if ( json.dashSize !== undefined ) { material.dashSize = json.dashSize; } + if ( json.gapSize !== undefined ) { material.gapSize = json.gapSize; } + if ( json.scale !== undefined ) { material.scale = json.scale; } + + if ( json.polygonOffset !== undefined ) { material.polygonOffset = json.polygonOffset; } + if ( json.polygonOffsetFactor !== undefined ) { material.polygonOffsetFactor = json.polygonOffsetFactor; } + if ( json.polygonOffsetUnits !== undefined ) { material.polygonOffsetUnits = json.polygonOffsetUnits; } + + if ( json.skinning !== undefined ) { material.skinning = json.skinning; } + if ( json.morphTargets !== undefined ) { material.morphTargets = json.morphTargets; } + if ( json.morphNormals !== undefined ) { material.morphNormals = json.morphNormals; } + if ( json.dithering !== undefined ) { material.dithering = json.dithering; } + + if ( json.vertexTangents !== undefined ) { material.vertexTangents = json.vertexTangents; } + + if ( json.visible !== undefined ) { material.visible = json.visible; } + + if ( json.toneMapped !== undefined ) { material.toneMapped = json.toneMapped; } + + if ( json.userData !== undefined ) { material.userData = json.userData; } + + if ( json.vertexColors !== undefined ) { + + if ( typeof json.vertexColors === 'number' ) { + + material.vertexColors = ( json.vertexColors > 0 ) ? true : false; + + } else { + + material.vertexColors = json.vertexColors; + + } + + } + + // Shader Material + + if ( json.uniforms !== undefined ) { + + for ( var name in json.uniforms ) { + + var uniform = json.uniforms[ name ]; + + material.uniforms[ name ] = {}; + + switch ( uniform.type ) { + + case 't': + material.uniforms[ name ].value = getTexture( uniform.value ); + break; + + case 'c': + material.uniforms[ name ].value = new Color().setHex( uniform.value ); + break; + + case 'v2': + material.uniforms[ name ].value = new Vector2().fromArray( uniform.value ); + break; + + case 'v3': + material.uniforms[ name ].value = new Vector3().fromArray( uniform.value ); + break; + + case 'v4': + material.uniforms[ name ].value = new Vector4().fromArray( uniform.value ); + break; + + case 'm3': + material.uniforms[ name ].value = new Matrix3().fromArray( uniform.value ); + break; + + case 'm4': + material.uniforms[ name ].value = new Matrix4().fromArray( uniform.value ); + break; + + default: + material.uniforms[ name ].value = uniform.value; + + } + + } + + } + + if ( json.defines !== undefined ) { material.defines = json.defines; } + if ( json.vertexShader !== undefined ) { material.vertexShader = json.vertexShader; } + if ( json.fragmentShader !== undefined ) { material.fragmentShader = json.fragmentShader; } + + if ( json.extensions !== undefined ) { + + for ( var key in json.extensions ) { + + material.extensions[ key ] = json.extensions[ key ]; + + } + + } + + // Deprecated + + if ( json.shading !== undefined ) { material.flatShading = json.shading === 1; } // THREE.FlatShading + + // for PointsMaterial + + if ( json.size !== undefined ) { material.size = json.size; } + if ( json.sizeAttenuation !== undefined ) { material.sizeAttenuation = json.sizeAttenuation; } + + // maps + + if ( json.map !== undefined ) { material.map = getTexture( json.map ); } + if ( json.matcap !== undefined ) { material.matcap = getTexture( json.matcap ); } + + if ( json.alphaMap !== undefined ) { material.alphaMap = getTexture( json.alphaMap ); } + + if ( json.bumpMap !== undefined ) { material.bumpMap = getTexture( json.bumpMap ); } + if ( json.bumpScale !== undefined ) { material.bumpScale = json.bumpScale; } + + if ( json.normalMap !== undefined ) { material.normalMap = getTexture( json.normalMap ); } + if ( json.normalMapType !== undefined ) { material.normalMapType = json.normalMapType; } + if ( json.normalScale !== undefined ) { + + var normalScale = json.normalScale; + + if ( Array.isArray( normalScale ) === false ) { + + // Blender exporter used to export a scalar. See #7459 + + normalScale = [ normalScale, normalScale ]; + + } + + material.normalScale = new Vector2().fromArray( normalScale ); + + } + + if ( json.displacementMap !== undefined ) { material.displacementMap = getTexture( json.displacementMap ); } + if ( json.displacementScale !== undefined ) { material.displacementScale = json.displacementScale; } + if ( json.displacementBias !== undefined ) { material.displacementBias = json.displacementBias; } + + if ( json.roughnessMap !== undefined ) { material.roughnessMap = getTexture( json.roughnessMap ); } + if ( json.metalnessMap !== undefined ) { material.metalnessMap = getTexture( json.metalnessMap ); } + + if ( json.emissiveMap !== undefined ) { material.emissiveMap = getTexture( json.emissiveMap ); } + if ( json.emissiveIntensity !== undefined ) { material.emissiveIntensity = json.emissiveIntensity; } + + if ( json.specularMap !== undefined ) { material.specularMap = getTexture( json.specularMap ); } + + if ( json.envMap !== undefined ) { material.envMap = getTexture( json.envMap ); } + if ( json.envMapIntensity !== undefined ) { material.envMapIntensity = json.envMapIntensity; } + + if ( json.reflectivity !== undefined ) { material.reflectivity = json.reflectivity; } + if ( json.refractionRatio !== undefined ) { material.refractionRatio = json.refractionRatio; } + + if ( json.lightMap !== undefined ) { material.lightMap = getTexture( json.lightMap ); } + if ( json.lightMapIntensity !== undefined ) { material.lightMapIntensity = json.lightMapIntensity; } + + if ( json.aoMap !== undefined ) { material.aoMap = getTexture( json.aoMap ); } + if ( json.aoMapIntensity !== undefined ) { material.aoMapIntensity = json.aoMapIntensity; } + + if ( json.gradientMap !== undefined ) { material.gradientMap = getTexture( json.gradientMap ); } + + if ( json.clearcoatMap !== undefined ) { material.clearcoatMap = getTexture( json.clearcoatMap ); } + if ( json.clearcoatRoughnessMap !== undefined ) { material.clearcoatRoughnessMap = getTexture( json.clearcoatRoughnessMap ); } + if ( json.clearcoatNormalMap !== undefined ) { material.clearcoatNormalMap = getTexture( json.clearcoatNormalMap ); } + if ( json.clearcoatNormalScale !== undefined ) { material.clearcoatNormalScale = new Vector2().fromArray( json.clearcoatNormalScale ); } + + if ( json.transmission !== undefined ) { material.transmission = json.transmission; } + if ( json.transmissionMap !== undefined ) { material.transmissionMap = getTexture( json.transmissionMap ); } + + return material; + + }, + + setTextures: function ( value ) { + + this.textures = value; + return this; + + } + + } ); + + var LoaderUtils = { + + decodeText: function ( array ) { + + if ( typeof TextDecoder !== 'undefined' ) { + + return new TextDecoder().decode( array ); + + } + + // Avoid the String.fromCharCode.apply(null, array) shortcut, which + // throws a "maximum call stack size exceeded" error for large arrays. + + var s = ''; + + for ( var i = 0, il = array.length; i < il; i ++ ) { + + // Implicitly assumes little-endian. + s += String.fromCharCode( array[ i ] ); + + } + + try { + + // merges multi-byte utf-8 characters. + + return decodeURIComponent( escape( s ) ); + + } catch ( e ) { // see #16358 + + return s; + + } + + }, + + extractUrlBase: function ( url ) { + + var index = url.lastIndexOf( '/' ); + + if ( index === - 1 ) { return './'; } + + return url.substr( 0, index + 1 ); + + } + + }; + + function InstancedBufferGeometry() { + + BufferGeometry.call( this ); + + this.type = 'InstancedBufferGeometry'; + this.instanceCount = Infinity; + + } + + InstancedBufferGeometry.prototype = Object.assign( Object.create( BufferGeometry.prototype ), { + + constructor: InstancedBufferGeometry, + + isInstancedBufferGeometry: true, + + copy: function ( source ) { + + BufferGeometry.prototype.copy.call( this, source ); + + this.instanceCount = source.instanceCount; + + return this; + + }, + + clone: function () { + + return new this.constructor().copy( this ); + + }, + + toJSON: function () { + + var data = BufferGeometry.prototype.toJSON.call( this ); + + data.instanceCount = this.instanceCount; + + data.isInstancedBufferGeometry = true; + + return data; + + } + + } ); + + function InstancedBufferAttribute( array, itemSize, normalized, meshPerAttribute ) { + + if ( typeof ( normalized ) === 'number' ) { + + meshPerAttribute = normalized; + + normalized = false; + + console.error( 'THREE.InstancedBufferAttribute: The constructor now expects normalized as the third argument.' ); + + } + + BufferAttribute.call( this, array, itemSize, normalized ); + + this.meshPerAttribute = meshPerAttribute || 1; + + } + + InstancedBufferAttribute.prototype = Object.assign( Object.create( BufferAttribute.prototype ), { + + constructor: InstancedBufferAttribute, + + isInstancedBufferAttribute: true, + + copy: function ( source ) { + + BufferAttribute.prototype.copy.call( this, source ); + + this.meshPerAttribute = source.meshPerAttribute; + + return this; + + }, + + toJSON: function () { + + var data = BufferAttribute.prototype.toJSON.call( this ); + + data.meshPerAttribute = this.meshPerAttribute; + + data.isInstancedBufferAttribute = true; + + return data; + + } + + } ); + + function BufferGeometryLoader( manager ) { + + Loader.call( this, manager ); + + } + + BufferGeometryLoader.prototype = Object.assign( Object.create( Loader.prototype ), { + + constructor: BufferGeometryLoader, + + load: function ( url, onLoad, onProgress, onError ) { + + var scope = this; + + var loader = new FileLoader( scope.manager ); + loader.setPath( scope.path ); + loader.setRequestHeader( scope.requestHeader ); + loader.load( url, function ( text ) { + + try { + + onLoad( scope.parse( JSON.parse( text ) ) ); + + } catch ( e ) { + + if ( onError ) { + + onError( e ); + + } else { + + console.error( e ); + + } + + scope.manager.itemError( url ); + + } + + }, onProgress, onError ); + + }, + + parse: function ( json ) { + + var interleavedBufferMap = {}; + var arrayBufferMap = {}; + + function getInterleavedBuffer( json, uuid ) { + + if ( interleavedBufferMap[ uuid ] !== undefined ) { return interleavedBufferMap[ uuid ]; } + + var interleavedBuffers = json.interleavedBuffers; + var interleavedBuffer = interleavedBuffers[ uuid ]; + + var buffer = getArrayBuffer( json, interleavedBuffer.buffer ); + + var array = new TYPED_ARRAYS[ interleavedBuffer.type ]( buffer ); + var ib = new InterleavedBuffer( array, interleavedBuffer.stride ); + ib.uuid = interleavedBuffer.uuid; + + interleavedBufferMap[ uuid ] = ib; + + return ib; + + } + + function getArrayBuffer( json, uuid ) { + + if ( arrayBufferMap[ uuid ] !== undefined ) { return arrayBufferMap[ uuid ]; } + + var arrayBuffers = json.arrayBuffers; + var arrayBuffer = arrayBuffers[ uuid ]; + + var ab = new Uint32Array( arrayBuffer ).buffer; + + arrayBufferMap[ uuid ] = ab; + + return ab; + + } + + var geometry = json.isInstancedBufferGeometry ? new InstancedBufferGeometry() : new BufferGeometry(); + + var index = json.data.index; + + if ( index !== undefined ) { + + var typedArray = new TYPED_ARRAYS[ index.type ]( index.array ); + geometry.setIndex( new BufferAttribute( typedArray, 1 ) ); + + } + + var attributes = json.data.attributes; + + for ( var key in attributes ) { + + var attribute = attributes[ key ]; + var bufferAttribute = (void 0); + + if ( attribute.isInterleavedBufferAttribute ) { + + var interleavedBuffer = getInterleavedBuffer( json.data, attribute.data ); + bufferAttribute = new InterleavedBufferAttribute( interleavedBuffer, attribute.itemSize, attribute.offset, attribute.normalized ); + + } else { + + var typedArray$1 = new TYPED_ARRAYS[ attribute.type ]( attribute.array ); + var bufferAttributeConstr = attribute.isInstancedBufferAttribute ? InstancedBufferAttribute : BufferAttribute; + bufferAttribute = new bufferAttributeConstr( typedArray$1, attribute.itemSize, attribute.normalized ); + + } + + if ( attribute.name !== undefined ) { bufferAttribute.name = attribute.name; } + geometry.setAttribute( key, bufferAttribute ); + + } + + var morphAttributes = json.data.morphAttributes; + + if ( morphAttributes ) { + + for ( var key$1 in morphAttributes ) { + + var attributeArray = morphAttributes[ key$1 ]; + + var array = []; + + for ( var i = 0, il = attributeArray.length; i < il; i ++ ) { + + var attribute$1 = attributeArray[ i ]; + var bufferAttribute$1 = (void 0); + + if ( attribute$1.isInterleavedBufferAttribute ) { + + var interleavedBuffer$1 = getInterleavedBuffer( json.data, attribute$1.data ); + bufferAttribute$1 = new InterleavedBufferAttribute( interleavedBuffer$1, attribute$1.itemSize, attribute$1.offset, attribute$1.normalized ); + + } else { + + var typedArray$2 = new TYPED_ARRAYS[ attribute$1.type ]( attribute$1.array ); + bufferAttribute$1 = new BufferAttribute( typedArray$2, attribute$1.itemSize, attribute$1.normalized ); + + } + + if ( attribute$1.name !== undefined ) { bufferAttribute$1.name = attribute$1.name; } + array.push( bufferAttribute$1 ); + + } + + geometry.morphAttributes[ key$1 ] = array; + + } + + } + + var morphTargetsRelative = json.data.morphTargetsRelative; + + if ( morphTargetsRelative ) { + + geometry.morphTargetsRelative = true; + + } + + var groups = json.data.groups || json.data.drawcalls || json.data.offsets; + + if ( groups !== undefined ) { + + for ( var i$1 = 0, n = groups.length; i$1 !== n; ++ i$1 ) { + + var group = groups[ i$1 ]; + + geometry.addGroup( group.start, group.count, group.materialIndex ); + + } + + } + + var boundingSphere = json.data.boundingSphere; + + if ( boundingSphere !== undefined ) { + + var center = new Vector3(); + + if ( boundingSphere.center !== undefined ) { + + center.fromArray( boundingSphere.center ); + + } + + geometry.boundingSphere = new Sphere( center, boundingSphere.radius ); + + } + + if ( json.name ) { geometry.name = json.name; } + if ( json.userData ) { geometry.userData = json.userData; } + + return geometry; + + } + + } ); + + var TYPED_ARRAYS = { + Int8Array: Int8Array, + Uint8Array: Uint8Array, + // Workaround for IE11 pre KB2929437. See #11440 + Uint8ClampedArray: typeof Uint8ClampedArray !== 'undefined' ? Uint8ClampedArray : Uint8Array, + Int16Array: Int16Array, + Uint16Array: Uint16Array, + Int32Array: Int32Array, + Uint32Array: Uint32Array, + Float32Array: Float32Array, + Float64Array: Float64Array + }; + + function ObjectLoader( manager ) { + + Loader.call( this, manager ); + + } + + ObjectLoader.prototype = Object.assign( Object.create( Loader.prototype ), { + + constructor: ObjectLoader, + + load: function ( url, onLoad, onProgress, onError ) { + + var scope = this; + + var path = ( this.path === '' ) ? LoaderUtils.extractUrlBase( url ) : this.path; + this.resourcePath = this.resourcePath || path; + + var loader = new FileLoader( scope.manager ); + loader.setPath( this.path ); + loader.setRequestHeader( this.requestHeader ); + loader.load( url, function ( text ) { + + var json = null; + + try { + + json = JSON.parse( text ); + + } catch ( error ) { + + if ( onError !== undefined ) { onError( error ); } + + console.error( 'THREE:ObjectLoader: Can\'t parse ' + url + '.', error.message ); + + return; + + } + + var metadata = json.metadata; + + if ( metadata === undefined || metadata.type === undefined || metadata.type.toLowerCase() === 'geometry' ) { + + console.error( 'THREE.ObjectLoader: Can\'t load ' + url ); + return; + + } + + scope.parse( json, onLoad ); + + }, onProgress, onError ); + + }, + + parse: function ( json, onLoad ) { + + var shapes = this.parseShape( json.shapes ); + var geometries = this.parseGeometries( json.geometries, shapes ); + + var images = this.parseImages( json.images, function () { + + if ( onLoad !== undefined ) { onLoad( object ); } + + } ); + + var textures = this.parseTextures( json.textures, images ); + var materials = this.parseMaterials( json.materials, textures ); + + var object = this.parseObject( json.object, geometries, materials ); + + if ( json.animations ) { + + object.animations = this.parseAnimations( json.animations ); + + } + + if ( json.images === undefined || json.images.length === 0 ) { + + if ( onLoad !== undefined ) { onLoad( object ); } + + } + + return object; + + }, + + parseShape: function ( json ) { + + var shapes = {}; + + if ( json !== undefined ) { + + for ( var i = 0, l = json.length; i < l; i ++ ) { + + var shape = new Shape().fromJSON( json[ i ] ); + + shapes[ shape.uuid ] = shape; + + } + + } + + return shapes; + + }, + + parseGeometries: function ( json, shapes ) { + + var geometries = {}; + var geometryShapes; + + if ( json !== undefined ) { + + var bufferGeometryLoader = new BufferGeometryLoader(); + + for ( var i = 0, l = json.length; i < l; i ++ ) { + + var geometry = (void 0); + var data = json[ i ]; + + switch ( data.type ) { + + case 'PlaneGeometry': + case 'PlaneBufferGeometry': + + geometry = new Geometries[ data.type ]( + data.width, + data.height, + data.widthSegments, + data.heightSegments + ); + + break; + + case 'BoxGeometry': + case 'BoxBufferGeometry': + case 'CubeGeometry': // backwards compatible + + geometry = new Geometries[ data.type ]( + data.width, + data.height, + data.depth, + data.widthSegments, + data.heightSegments, + data.depthSegments + ); + + break; + + case 'CircleGeometry': + case 'CircleBufferGeometry': + + geometry = new Geometries[ data.type ]( + data.radius, + data.segments, + data.thetaStart, + data.thetaLength + ); + + break; + + case 'CylinderGeometry': + case 'CylinderBufferGeometry': + + geometry = new Geometries[ data.type ]( + data.radiusTop, + data.radiusBottom, + data.height, + data.radialSegments, + data.heightSegments, + data.openEnded, + data.thetaStart, + data.thetaLength + ); + + break; + + case 'ConeGeometry': + case 'ConeBufferGeometry': + + geometry = new Geometries[ data.type ]( + data.radius, + data.height, + data.radialSegments, + data.heightSegments, + data.openEnded, + data.thetaStart, + data.thetaLength + ); + + break; + + case 'SphereGeometry': + case 'SphereBufferGeometry': + + geometry = new Geometries[ data.type ]( + data.radius, + data.widthSegments, + data.heightSegments, + data.phiStart, + data.phiLength, + data.thetaStart, + data.thetaLength + ); + + break; + + case 'DodecahedronGeometry': + case 'DodecahedronBufferGeometry': + case 'IcosahedronGeometry': + case 'IcosahedronBufferGeometry': + case 'OctahedronGeometry': + case 'OctahedronBufferGeometry': + case 'TetrahedronGeometry': + case 'TetrahedronBufferGeometry': + + geometry = new Geometries[ data.type ]( + data.radius, + data.detail + ); + + break; + + case 'RingGeometry': + case 'RingBufferGeometry': + + geometry = new Geometries[ data.type ]( + data.innerRadius, + data.outerRadius, + data.thetaSegments, + data.phiSegments, + data.thetaStart, + data.thetaLength + ); + + break; + + case 'TorusGeometry': + case 'TorusBufferGeometry': + + geometry = new Geometries[ data.type ]( + data.radius, + data.tube, + data.radialSegments, + data.tubularSegments, + data.arc + ); + + break; + + case 'TorusKnotGeometry': + case 'TorusKnotBufferGeometry': + + geometry = new Geometries[ data.type ]( + data.radius, + data.tube, + data.tubularSegments, + data.radialSegments, + data.p, + data.q + ); + + break; + + case 'TubeGeometry': + case 'TubeBufferGeometry': + + // This only works for built-in curves (e.g. CatmullRomCurve3). + // User defined curves or instances of CurvePath will not be deserialized. + geometry = new Geometries[ data.type ]( + new Curves[ data.path.type ]().fromJSON( data.path ), + data.tubularSegments, + data.radius, + data.radialSegments, + data.closed + ); + + break; + + case 'LatheGeometry': + case 'LatheBufferGeometry': + + geometry = new Geometries[ data.type ]( + data.points, + data.segments, + data.phiStart, + data.phiLength + ); + + break; + + case 'PolyhedronGeometry': + case 'PolyhedronBufferGeometry': + + geometry = new Geometries[ data.type ]( + data.vertices, + data.indices, + data.radius, + data.details + ); + + break; + + case 'ShapeGeometry': + case 'ShapeBufferGeometry': + + geometryShapes = []; + + for ( var j = 0, jl = data.shapes.length; j < jl; j ++ ) { + + var shape = shapes[ data.shapes[ j ] ]; + + geometryShapes.push( shape ); + + } + + geometry = new Geometries[ data.type ]( + geometryShapes, + data.curveSegments + ); + + break; + + + case 'ExtrudeGeometry': + case 'ExtrudeBufferGeometry': + + geometryShapes = []; + + for ( var j$1 = 0, jl$1 = data.shapes.length; j$1 < jl$1; j$1 ++ ) { + + var shape$1 = shapes[ data.shapes[ j$1 ] ]; + + geometryShapes.push( shape$1 ); + + } + + var extrudePath = data.options.extrudePath; + + if ( extrudePath !== undefined ) { + + data.options.extrudePath = new Curves[ extrudePath.type ]().fromJSON( extrudePath ); + + } + + geometry = new Geometries[ data.type ]( + geometryShapes, + data.options + ); + + break; + + case 'BufferGeometry': + case 'InstancedBufferGeometry': + + geometry = bufferGeometryLoader.parse( data ); + + break; + + case 'Geometry': + + console.error( 'THREE.ObjectLoader: Loading "Geometry" is not supported anymore.' ); + + break; + + default: + + console.warn( 'THREE.ObjectLoader: Unsupported geometry type "' + data.type + '"' ); + + continue; + + } + + geometry.uuid = data.uuid; + + if ( data.name !== undefined ) { geometry.name = data.name; } + if ( geometry.isBufferGeometry === true && data.userData !== undefined ) { geometry.userData = data.userData; } + + geometries[ data.uuid ] = geometry; + + } + + } + + return geometries; + + }, + + parseMaterials: function ( json, textures ) { + + var cache = {}; // MultiMaterial + var materials = {}; + + if ( json !== undefined ) { + + var loader = new MaterialLoader(); + loader.setTextures( textures ); + + for ( var i = 0, l = json.length; i < l; i ++ ) { + + var data = json[ i ]; + + if ( data.type === 'MultiMaterial' ) { + + // Deprecated + + var array = []; + + for ( var j = 0; j < data.materials.length; j ++ ) { + + var material = data.materials[ j ]; + + if ( cache[ material.uuid ] === undefined ) { + + cache[ material.uuid ] = loader.parse( material ); + + } + + array.push( cache[ material.uuid ] ); + + } + + materials[ data.uuid ] = array; + + } else { + + if ( cache[ data.uuid ] === undefined ) { + + cache[ data.uuid ] = loader.parse( data ); + + } + + materials[ data.uuid ] = cache[ data.uuid ]; + + } + + } + + } + + return materials; + + }, + + parseAnimations: function ( json ) { + + var animations = []; + + for ( var i = 0; i < json.length; i ++ ) { + + var data = json[ i ]; + + var clip = AnimationClip.parse( data ); + + if ( data.uuid !== undefined ) { clip.uuid = data.uuid; } + + animations.push( clip ); + + } + + return animations; + + }, + + parseImages: function ( json, onLoad ) { + + var scope = this; + var images = {}; + + var loader; + + function loadImage( url ) { + + scope.manager.itemStart( url ); + + return loader.load( url, function () { + + scope.manager.itemEnd( url ); + + }, undefined, function () { + + scope.manager.itemError( url ); + scope.manager.itemEnd( url ); + + } ); + + } + + if ( json !== undefined && json.length > 0 ) { + + var manager = new LoadingManager( onLoad ); + + loader = new ImageLoader( manager ); + loader.setCrossOrigin( this.crossOrigin ); + + for ( var i = 0, il = json.length; i < il; i ++ ) { + + var image = json[ i ]; + var url = image.url; + + if ( Array.isArray( url ) ) { + + // load array of images e.g CubeTexture + + images[ image.uuid ] = []; + + for ( var j = 0, jl = url.length; j < jl; j ++ ) { + + var currentUrl = url[ j ]; + + var path = /^(\/\/)|([a-z]+:(\/\/)?)/i.test( currentUrl ) ? currentUrl : scope.resourcePath + currentUrl; + + images[ image.uuid ].push( loadImage( path ) ); + + } + + } else { + + // load single image + + var path$1 = /^(\/\/)|([a-z]+:(\/\/)?)/i.test( image.url ) ? image.url : scope.resourcePath + image.url; + + images[ image.uuid ] = loadImage( path$1 ); + + } + + } + + } + + return images; + + }, + + parseTextures: function ( json, images ) { + + function parseConstant( value, type ) { + + if ( typeof value === 'number' ) { return value; } + + console.warn( 'THREE.ObjectLoader.parseTexture: Constant should be in numeric form.', value ); + + return type[ value ]; + + } + + var textures = {}; + + if ( json !== undefined ) { + + for ( var i = 0, l = json.length; i < l; i ++ ) { + + var data = json[ i ]; + + if ( data.image === undefined ) { + + console.warn( 'THREE.ObjectLoader: No "image" specified for', data.uuid ); + + } + + if ( images[ data.image ] === undefined ) { + + console.warn( 'THREE.ObjectLoader: Undefined image', data.image ); + + } + + var texture = (void 0); + + if ( Array.isArray( images[ data.image ] ) ) { + + texture = new CubeTexture( images[ data.image ] ); + + } else { + + texture = new Texture( images[ data.image ] ); + + } + + texture.needsUpdate = true; + + texture.uuid = data.uuid; + + if ( data.name !== undefined ) { texture.name = data.name; } + + if ( data.mapping !== undefined ) { texture.mapping = parseConstant( data.mapping, TEXTURE_MAPPING ); } + + if ( data.offset !== undefined ) { texture.offset.fromArray( data.offset ); } + if ( data.repeat !== undefined ) { texture.repeat.fromArray( data.repeat ); } + if ( data.center !== undefined ) { texture.center.fromArray( data.center ); } + if ( data.rotation !== undefined ) { texture.rotation = data.rotation; } + + if ( data.wrap !== undefined ) { + + texture.wrapS = parseConstant( data.wrap[ 0 ], TEXTURE_WRAPPING ); + texture.wrapT = parseConstant( data.wrap[ 1 ], TEXTURE_WRAPPING ); + + } + + if ( data.format !== undefined ) { texture.format = data.format; } + if ( data.type !== undefined ) { texture.type = data.type; } + if ( data.encoding !== undefined ) { texture.encoding = data.encoding; } + + if ( data.minFilter !== undefined ) { texture.minFilter = parseConstant( data.minFilter, TEXTURE_FILTER ); } + if ( data.magFilter !== undefined ) { texture.magFilter = parseConstant( data.magFilter, TEXTURE_FILTER ); } + if ( data.anisotropy !== undefined ) { texture.anisotropy = data.anisotropy; } + + if ( data.flipY !== undefined ) { texture.flipY = data.flipY; } + + if ( data.premultiplyAlpha !== undefined ) { texture.premultiplyAlpha = data.premultiplyAlpha; } + if ( data.unpackAlignment !== undefined ) { texture.unpackAlignment = data.unpackAlignment; } + + textures[ data.uuid ] = texture; + + } + + } + + return textures; + + }, + + parseObject: function ( data, geometries, materials ) { + + var object; + + function getGeometry( name ) { + + if ( geometries[ name ] === undefined ) { + + console.warn( 'THREE.ObjectLoader: Undefined geometry', name ); + + } + + return geometries[ name ]; + + } + + function getMaterial( name ) { + + if ( name === undefined ) { return undefined; } + + if ( Array.isArray( name ) ) { + + var array = []; + + for ( var i = 0, l = name.length; i < l; i ++ ) { + + var uuid = name[ i ]; + + if ( materials[ uuid ] === undefined ) { + + console.warn( 'THREE.ObjectLoader: Undefined material', uuid ); + + } + + array.push( materials[ uuid ] ); + + } + + return array; + + } + + if ( materials[ name ] === undefined ) { + + console.warn( 'THREE.ObjectLoader: Undefined material', name ); + + } + + return materials[ name ]; + + } + + var geometry, material; + + switch ( data.type ) { + + case 'Scene': + + object = new Scene(); + + if ( data.background !== undefined ) { + + if ( Number.isInteger( data.background ) ) { + + object.background = new Color( data.background ); + + } + + } + + if ( data.fog !== undefined ) { + + if ( data.fog.type === 'Fog' ) { + + object.fog = new Fog( data.fog.color, data.fog.near, data.fog.far ); + + } else if ( data.fog.type === 'FogExp2' ) { + + object.fog = new FogExp2( data.fog.color, data.fog.density ); + + } + + } + + break; + + case 'PerspectiveCamera': + + object = new PerspectiveCamera( data.fov, data.aspect, data.near, data.far ); + + if ( data.focus !== undefined ) { object.focus = data.focus; } + if ( data.zoom !== undefined ) { object.zoom = data.zoom; } + if ( data.filmGauge !== undefined ) { object.filmGauge = data.filmGauge; } + if ( data.filmOffset !== undefined ) { object.filmOffset = data.filmOffset; } + if ( data.view !== undefined ) { object.view = Object.assign( {}, data.view ); } + + break; + + case 'OrthographicCamera': + + object = new OrthographicCamera( data.left, data.right, data.top, data.bottom, data.near, data.far ); + + if ( data.zoom !== undefined ) { object.zoom = data.zoom; } + if ( data.view !== undefined ) { object.view = Object.assign( {}, data.view ); } + + break; + + case 'AmbientLight': + + object = new AmbientLight( data.color, data.intensity ); + + break; + + case 'DirectionalLight': + + object = new DirectionalLight( data.color, data.intensity ); + + break; + + case 'PointLight': + + object = new PointLight( data.color, data.intensity, data.distance, data.decay ); + + break; + + case 'RectAreaLight': + + object = new RectAreaLight( data.color, data.intensity, data.width, data.height ); + + break; + + case 'SpotLight': + + object = new SpotLight( data.color, data.intensity, data.distance, data.angle, data.penumbra, data.decay ); + + break; + + case 'HemisphereLight': + + object = new HemisphereLight( data.color, data.groundColor, data.intensity ); + + break; + + case 'LightProbe': + + object = new LightProbe().fromJSON( data ); + + break; + + case 'SkinnedMesh': + + console.warn( 'THREE.ObjectLoader.parseObject() does not support SkinnedMesh yet.' ); + + case 'Mesh': + + geometry = getGeometry( data.geometry ); + material = getMaterial( data.material ); + + object = new Mesh( geometry, material ); + + break; + + case 'InstancedMesh': + + geometry = getGeometry( data.geometry ); + material = getMaterial( data.material ); + var count = data.count; + var instanceMatrix = data.instanceMatrix; + + object = new InstancedMesh( geometry, material, count ); + object.instanceMatrix = new BufferAttribute( new Float32Array( instanceMatrix.array ), 16 ); + + break; + + case 'LOD': + + object = new LOD(); + + break; + + case 'Line': + + object = new Line( getGeometry( data.geometry ), getMaterial( data.material ), data.mode ); + + break; + + case 'LineLoop': + + object = new LineLoop( getGeometry( data.geometry ), getMaterial( data.material ) ); + + break; + + case 'LineSegments': + + object = new LineSegments( getGeometry( data.geometry ), getMaterial( data.material ) ); + + break; + + case 'PointCloud': + case 'Points': + + object = new Points( getGeometry( data.geometry ), getMaterial( data.material ) ); + + break; + + case 'Sprite': + + object = new Sprite( getMaterial( data.material ) ); + + break; + + case 'Group': + + object = new Group(); + + break; + + default: + + object = new Object3D(); + + } + + object.uuid = data.uuid; + + if ( data.name !== undefined ) { object.name = data.name; } + + if ( data.matrix !== undefined ) { + + object.matrix.fromArray( data.matrix ); + + if ( data.matrixAutoUpdate !== undefined ) { object.matrixAutoUpdate = data.matrixAutoUpdate; } + if ( object.matrixAutoUpdate ) { object.matrix.decompose( object.position, object.quaternion, object.scale ); } + + } else { + + if ( data.position !== undefined ) { object.position.fromArray( data.position ); } + if ( data.rotation !== undefined ) { object.rotation.fromArray( data.rotation ); } + if ( data.quaternion !== undefined ) { object.quaternion.fromArray( data.quaternion ); } + if ( data.scale !== undefined ) { object.scale.fromArray( data.scale ); } + + } + + if ( data.castShadow !== undefined ) { object.castShadow = data.castShadow; } + if ( data.receiveShadow !== undefined ) { object.receiveShadow = data.receiveShadow; } + + if ( data.shadow ) { + + if ( data.shadow.bias !== undefined ) { object.shadow.bias = data.shadow.bias; } + if ( data.shadow.normalBias !== undefined ) { object.shadow.normalBias = data.shadow.normalBias; } + if ( data.shadow.radius !== undefined ) { object.shadow.radius = data.shadow.radius; } + if ( data.shadow.mapSize !== undefined ) { object.shadow.mapSize.fromArray( data.shadow.mapSize ); } + if ( data.shadow.camera !== undefined ) { object.shadow.camera = this.parseObject( data.shadow.camera ); } + + } + + if ( data.visible !== undefined ) { object.visible = data.visible; } + if ( data.frustumCulled !== undefined ) { object.frustumCulled = data.frustumCulled; } + if ( data.renderOrder !== undefined ) { object.renderOrder = data.renderOrder; } + if ( data.userData !== undefined ) { object.userData = data.userData; } + if ( data.layers !== undefined ) { object.layers.mask = data.layers; } + + if ( data.children !== undefined ) { + + var children = data.children; + + for ( var i = 0; i < children.length; i ++ ) { + + object.add( this.parseObject( children[ i ], geometries, materials ) ); + + } + + } + + if ( data.type === 'LOD' ) { + + if ( data.autoUpdate !== undefined ) { object.autoUpdate = data.autoUpdate; } + + var levels = data.levels; + + for ( var l = 0; l < levels.length; l ++ ) { + + var level = levels[ l ]; + var child = object.getObjectByProperty( 'uuid', level.object ); + + if ( child !== undefined ) { + + object.addLevel( child, level.distance ); + + } + + } + + } + + return object; + + } + + } ); + + var TEXTURE_MAPPING = { + UVMapping: UVMapping, + CubeReflectionMapping: CubeReflectionMapping, + CubeRefractionMapping: CubeRefractionMapping, + EquirectangularReflectionMapping: EquirectangularReflectionMapping, + EquirectangularRefractionMapping: EquirectangularRefractionMapping, + CubeUVReflectionMapping: CubeUVReflectionMapping, + CubeUVRefractionMapping: CubeUVRefractionMapping + }; + + var TEXTURE_WRAPPING = { + RepeatWrapping: RepeatWrapping, + ClampToEdgeWrapping: ClampToEdgeWrapping, + MirroredRepeatWrapping: MirroredRepeatWrapping + }; + + var TEXTURE_FILTER = { + NearestFilter: NearestFilter, + NearestMipmapNearestFilter: NearestMipmapNearestFilter, + NearestMipmapLinearFilter: NearestMipmapLinearFilter, + LinearFilter: LinearFilter, + LinearMipmapNearestFilter: LinearMipmapNearestFilter, + LinearMipmapLinearFilter: LinearMipmapLinearFilter + }; + + function ImageBitmapLoader( manager ) { + + if ( typeof createImageBitmap === 'undefined' ) { + + console.warn( 'THREE.ImageBitmapLoader: createImageBitmap() not supported.' ); + + } + + if ( typeof fetch === 'undefined' ) { + + console.warn( 'THREE.ImageBitmapLoader: fetch() not supported.' ); + + } + + Loader.call( this, manager ); + + this.options = { premultiplyAlpha: 'none' }; + + } + + ImageBitmapLoader.prototype = Object.assign( Object.create( Loader.prototype ), { + + constructor: ImageBitmapLoader, + + isImageBitmapLoader: true, + + setOptions: function setOptions( options ) { + + this.options = options; + + return this; + + }, + + load: function ( url, onLoad, onProgress, onError ) { + + if ( url === undefined ) { url = ''; } + + if ( this.path !== undefined ) { url = this.path + url; } + + url = this.manager.resolveURL( url ); + + var scope = this; + + var cached = Cache.get( url ); + + if ( cached !== undefined ) { + + scope.manager.itemStart( url ); + + setTimeout( function () { + + if ( onLoad ) { onLoad( cached ); } + + scope.manager.itemEnd( url ); + + }, 0 ); + + return cached; + + } + + fetch( url ).then( function ( res ) { + + return res.blob(); + + } ).then( function ( blob ) { + + return createImageBitmap( blob, scope.options ); + + } ).then( function ( imageBitmap ) { + + Cache.add( url, imageBitmap ); + + if ( onLoad ) { onLoad( imageBitmap ); } + + scope.manager.itemEnd( url ); + + } ).catch( function ( e ) { + + if ( onError ) { onError( e ); } + + scope.manager.itemError( url ); + scope.manager.itemEnd( url ); + + } ); + + scope.manager.itemStart( url ); + + } + + } ); + + function ShapePath() { + + this.type = 'ShapePath'; + + this.color = new Color(); + + this.subPaths = []; + this.currentPath = null; + + } + + Object.assign( ShapePath.prototype, { + + moveTo: function ( x, y ) { + + this.currentPath = new Path(); + this.subPaths.push( this.currentPath ); + this.currentPath.moveTo( x, y ); + + return this; + + }, + + lineTo: function ( x, y ) { + + this.currentPath.lineTo( x, y ); + + return this; + + }, + + quadraticCurveTo: function ( aCPx, aCPy, aX, aY ) { + + this.currentPath.quadraticCurveTo( aCPx, aCPy, aX, aY ); + + return this; + + }, + + bezierCurveTo: function ( aCP1x, aCP1y, aCP2x, aCP2y, aX, aY ) { + + this.currentPath.bezierCurveTo( aCP1x, aCP1y, aCP2x, aCP2y, aX, aY ); + + return this; + + }, + + splineThru: function ( pts ) { + + this.currentPath.splineThru( pts ); + + return this; + + }, + + toShapes: function ( isCCW, noHoles ) { + + function toShapesNoHoles( inSubpaths ) { + + var shapes = []; + + for ( var i = 0, l = inSubpaths.length; i < l; i ++ ) { + + var tmpPath = inSubpaths[ i ]; + + var tmpShape = new Shape(); + tmpShape.curves = tmpPath.curves; + + shapes.push( tmpShape ); + + } + + return shapes; + + } + + function isPointInsidePolygon( inPt, inPolygon ) { + + var polyLen = inPolygon.length; + + // inPt on polygon contour => immediate success or + // toggling of inside/outside at every single! intersection point of an edge + // with the horizontal line through inPt, left of inPt + // not counting lowerY endpoints of edges and whole edges on that line + var inside = false; + for ( var p = polyLen - 1, q = 0; q < polyLen; p = q ++ ) { + + var edgeLowPt = inPolygon[ p ]; + var edgeHighPt = inPolygon[ q ]; + + var edgeDx = edgeHighPt.x - edgeLowPt.x; + var edgeDy = edgeHighPt.y - edgeLowPt.y; + + if ( Math.abs( edgeDy ) > Number.EPSILON ) { + + // not parallel + if ( edgeDy < 0 ) { + + edgeLowPt = inPolygon[ q ]; edgeDx = - edgeDx; + edgeHighPt = inPolygon[ p ]; edgeDy = - edgeDy; + + } + + if ( ( inPt.y < edgeLowPt.y ) || ( inPt.y > edgeHighPt.y ) ) { continue; } + + if ( inPt.y === edgeLowPt.y ) { + + if ( inPt.x === edgeLowPt.x ) { return true; } // inPt is on contour ? + // continue; // no intersection or edgeLowPt => doesn't count !!! + + } else { + + var perpEdge = edgeDy * ( inPt.x - edgeLowPt.x ) - edgeDx * ( inPt.y - edgeLowPt.y ); + if ( perpEdge === 0 ) { return true; } // inPt is on contour ? + if ( perpEdge < 0 ) { continue; } + inside = ! inside; // true intersection left of inPt + + } + + } else { + + // parallel or collinear + if ( inPt.y !== edgeLowPt.y ) { continue; } // parallel + // edge lies on the same horizontal line as inPt + if ( ( ( edgeHighPt.x <= inPt.x ) && ( inPt.x <= edgeLowPt.x ) ) || + ( ( edgeLowPt.x <= inPt.x ) && ( inPt.x <= edgeHighPt.x ) ) ) { return true; } // inPt: Point on contour ! + // continue; + + } + + } + + return inside; + + } + + var isClockWise = ShapeUtils.isClockWise; + + var subPaths = this.subPaths; + if ( subPaths.length === 0 ) { return []; } + + if ( noHoles === true ) { return toShapesNoHoles( subPaths ); } + + + var solid, tmpPath, tmpShape; + var shapes = []; + + if ( subPaths.length === 1 ) { + + tmpPath = subPaths[ 0 ]; + tmpShape = new Shape(); + tmpShape.curves = tmpPath.curves; + shapes.push( tmpShape ); + return shapes; + + } + + var holesFirst = ! isClockWise( subPaths[ 0 ].getPoints() ); + holesFirst = isCCW ? ! holesFirst : holesFirst; + + // console.log("Holes first", holesFirst); + + var betterShapeHoles = []; + var newShapes = []; + var newShapeHoles = []; + var mainIdx = 0; + var tmpPoints; + + newShapes[ mainIdx ] = undefined; + newShapeHoles[ mainIdx ] = []; + + for ( var i = 0, l = subPaths.length; i < l; i ++ ) { + + tmpPath = subPaths[ i ]; + tmpPoints = tmpPath.getPoints(); + solid = isClockWise( tmpPoints ); + solid = isCCW ? ! solid : solid; + + if ( solid ) { + + if ( ( ! holesFirst ) && ( newShapes[ mainIdx ] ) ) { mainIdx ++; } + + newShapes[ mainIdx ] = { s: new Shape(), p: tmpPoints }; + newShapes[ mainIdx ].s.curves = tmpPath.curves; + + if ( holesFirst ) { mainIdx ++; } + newShapeHoles[ mainIdx ] = []; + + //console.log('cw', i); + + } else { + + newShapeHoles[ mainIdx ].push( { h: tmpPath, p: tmpPoints[ 0 ] } ); + + //console.log('ccw', i); + + } + + } + + // only Holes? -> probably all Shapes with wrong orientation + if ( ! newShapes[ 0 ] ) { return toShapesNoHoles( subPaths ); } + + + if ( newShapes.length > 1 ) { + + var ambiguous = false; + var toChange = []; + + for ( var sIdx = 0, sLen = newShapes.length; sIdx < sLen; sIdx ++ ) { + + betterShapeHoles[ sIdx ] = []; + + } + + for ( var sIdx$1 = 0, sLen$1 = newShapes.length; sIdx$1 < sLen$1; sIdx$1 ++ ) { + + var sho = newShapeHoles[ sIdx$1 ]; + + for ( var hIdx = 0; hIdx < sho.length; hIdx ++ ) { + + var ho = sho[ hIdx ]; + var hole_unassigned = true; + + for ( var s2Idx = 0; s2Idx < newShapes.length; s2Idx ++ ) { + + if ( isPointInsidePolygon( ho.p, newShapes[ s2Idx ].p ) ) { + + if ( sIdx$1 !== s2Idx ) { toChange.push( { froms: sIdx$1, tos: s2Idx, hole: hIdx } ); } + if ( hole_unassigned ) { + + hole_unassigned = false; + betterShapeHoles[ s2Idx ].push( ho ); + + } else { + + ambiguous = true; + + } + + } + + } + + if ( hole_unassigned ) { + + betterShapeHoles[ sIdx$1 ].push( ho ); + + } + + } + + } + // console.log("ambiguous: ", ambiguous); + + if ( toChange.length > 0 ) { + + // console.log("to change: ", toChange); + if ( ! ambiguous ) { newShapeHoles = betterShapeHoles; } + + } + + } + + var tmpHoles; + + for ( var i$1 = 0, il = newShapes.length; i$1 < il; i$1 ++ ) { + + tmpShape = newShapes[ i$1 ].s; + shapes.push( tmpShape ); + tmpHoles = newShapeHoles[ i$1 ]; + + for ( var j = 0, jl = tmpHoles.length; j < jl; j ++ ) { + + tmpShape.holes.push( tmpHoles[ j ].h ); + + } + + } + + //console.log("shape", shapes); + + return shapes; + + } + + } ); + + function Font( data ) { + + this.type = 'Font'; + + this.data = data; + + } + + Object.assign( Font.prototype, { + + isFont: true, + + generateShapes: function ( text, size ) { + + if ( size === undefined ) { size = 100; } + + var shapes = []; + var paths = createPaths( text, size, this.data ); + + for ( var p = 0, pl = paths.length; p < pl; p ++ ) { + + Array.prototype.push.apply( shapes, paths[ p ].toShapes() ); + + } + + return shapes; + + } + + } ); + + function createPaths( text, size, data ) { + + var chars = Array.from ? Array.from( text ) : String( text ).split( '' ); // workaround for IE11, see #13988 + var scale = size / data.resolution; + var line_height = ( data.boundingBox.yMax - data.boundingBox.yMin + data.underlineThickness ) * scale; + + var paths = []; + + var offsetX = 0, offsetY = 0; + + for ( var i = 0; i < chars.length; i ++ ) { + + var char = chars[ i ]; + + if ( char === '\n' ) { + + offsetX = 0; + offsetY -= line_height; + + } else { + + var ret = createPath( char, scale, offsetX, offsetY, data ); + offsetX += ret.offsetX; + paths.push( ret.path ); + + } + + } + + return paths; + + } + + function createPath( char, scale, offsetX, offsetY, data ) { + + var glyph = data.glyphs[ char ] || data.glyphs[ '?' ]; + + if ( ! glyph ) { + + console.error( 'THREE.Font: character "' + char + '" does not exists in font family ' + data.familyName + '.' ); + + return; + + } + + var path = new ShapePath(); + + var x, y, cpx, cpy, cpx1, cpy1, cpx2, cpy2; + + if ( glyph.o ) { + + var outline = glyph._cachedOutline || ( glyph._cachedOutline = glyph.o.split( ' ' ) ); + + for ( var i = 0, l = outline.length; i < l; ) { + + var action = outline[ i ++ ]; + + switch ( action ) { + + case 'm': // moveTo + + x = outline[ i ++ ] * scale + offsetX; + y = outline[ i ++ ] * scale + offsetY; + + path.moveTo( x, y ); + + break; + + case 'l': // lineTo + + x = outline[ i ++ ] * scale + offsetX; + y = outline[ i ++ ] * scale + offsetY; + + path.lineTo( x, y ); + + break; + + case 'q': // quadraticCurveTo + + cpx = outline[ i ++ ] * scale + offsetX; + cpy = outline[ i ++ ] * scale + offsetY; + cpx1 = outline[ i ++ ] * scale + offsetX; + cpy1 = outline[ i ++ ] * scale + offsetY; + + path.quadraticCurveTo( cpx1, cpy1, cpx, cpy ); + + break; + + case 'b': // bezierCurveTo + + cpx = outline[ i ++ ] * scale + offsetX; + cpy = outline[ i ++ ] * scale + offsetY; + cpx1 = outline[ i ++ ] * scale + offsetX; + cpy1 = outline[ i ++ ] * scale + offsetY; + cpx2 = outline[ i ++ ] * scale + offsetX; + cpy2 = outline[ i ++ ] * scale + offsetY; + + path.bezierCurveTo( cpx1, cpy1, cpx2, cpy2, cpx, cpy ); + + break; + + } + + } + + } + + return { offsetX: glyph.ha * scale, path: path }; + + } + + function FontLoader( manager ) { + + Loader.call( this, manager ); + + } + + FontLoader.prototype = Object.assign( Object.create( Loader.prototype ), { + + constructor: FontLoader, + + load: function ( url, onLoad, onProgress, onError ) { + + var scope = this; + + var loader = new FileLoader( this.manager ); + loader.setPath( this.path ); + loader.setRequestHeader( this.requestHeader ); + loader.load( url, function ( text ) { + + var json; + + try { + + json = JSON.parse( text ); + + } catch ( e ) { + + console.warn( 'THREE.FontLoader: typeface.js support is being deprecated. Use typeface.json instead.' ); + json = JSON.parse( text.substring( 65, text.length - 2 ) ); + + } + + var font = scope.parse( json ); + + if ( onLoad ) { onLoad( font ); } + + }, onProgress, onError ); + + }, + + parse: function ( json ) { + + return new Font( json ); + + } + + } ); + + var _context; + + var AudioContext = { + + getContext: function () { + + if ( _context === undefined ) { + + _context = new ( window.AudioContext || window.webkitAudioContext )(); + + } + + return _context; + + }, + + setContext: function ( value ) { + + _context = value; + + } + + }; + + function AudioLoader( manager ) { + + Loader.call( this, manager ); + + } + + AudioLoader.prototype = Object.assign( Object.create( Loader.prototype ), { + + constructor: AudioLoader, + + load: function ( url, onLoad, onProgress, onError ) { + + var scope = this; + + var loader = new FileLoader( scope.manager ); + loader.setResponseType( 'arraybuffer' ); + loader.setPath( scope.path ); + loader.setRequestHeader( scope.requestHeader ); + loader.load( url, function ( buffer ) { + + try { + + // Create a copy of the buffer. The `decodeAudioData` method + // detaches the buffer when complete, preventing reuse. + var bufferCopy = buffer.slice( 0 ); + + var context = AudioContext.getContext(); + context.decodeAudioData( bufferCopy, function ( audioBuffer ) { + + onLoad( audioBuffer ); + + } ); + + } catch ( e ) { + + if ( onError ) { + + onError( e ); + + } else { + + console.error( e ); + + } + + scope.manager.itemError( url ); + + } + + }, onProgress, onError ); + + } + + } ); + + function HemisphereLightProbe( skyColor, groundColor, intensity ) { + + LightProbe.call( this, undefined, intensity ); + + var color1 = new Color().set( skyColor ); + var color2 = new Color().set( groundColor ); + + var sky = new Vector3( color1.r, color1.g, color1.b ); + var ground = new Vector3( color2.r, color2.g, color2.b ); + + // without extra factor of PI in the shader, should = 1 / Math.sqrt( Math.PI ); + var c0 = Math.sqrt( Math.PI ); + var c1 = c0 * Math.sqrt( 0.75 ); + + this.sh.coefficients[ 0 ].copy( sky ).add( ground ).multiplyScalar( c0 ); + this.sh.coefficients[ 1 ].copy( sky ).sub( ground ).multiplyScalar( c1 ); + + } + + HemisphereLightProbe.prototype = Object.assign( Object.create( LightProbe.prototype ), { + + constructor: HemisphereLightProbe, + + isHemisphereLightProbe: true, + + copy: function ( source ) { // modifying colors not currently supported + + LightProbe.prototype.copy.call( this, source ); + + return this; + + }, + + toJSON: function ( meta ) { + + var data = LightProbe.prototype.toJSON.call( this, meta ); + + // data.sh = this.sh.toArray(); // todo + + return data; + + } + + } ); + + function AmbientLightProbe( color, intensity ) { + + LightProbe.call( this, undefined, intensity ); + + var color1 = new Color().set( color ); + + // without extra factor of PI in the shader, would be 2 / Math.sqrt( Math.PI ); + this.sh.coefficients[ 0 ].set( color1.r, color1.g, color1.b ).multiplyScalar( 2 * Math.sqrt( Math.PI ) ); + + } + + AmbientLightProbe.prototype = Object.assign( Object.create( LightProbe.prototype ), { + + constructor: AmbientLightProbe, + + isAmbientLightProbe: true, + + copy: function ( source ) { // modifying color not currently supported + + LightProbe.prototype.copy.call( this, source ); + + return this; + + }, + + toJSON: function ( meta ) { + + var data = LightProbe.prototype.toJSON.call( this, meta ); + + // data.sh = this.sh.toArray(); // todo + + return data; + + } + + } ); + + var _eyeRight = new Matrix4(); + var _eyeLeft = new Matrix4(); + + function StereoCamera() { + + this.type = 'StereoCamera'; + + this.aspect = 1; + + this.eyeSep = 0.064; + + this.cameraL = new PerspectiveCamera(); + this.cameraL.layers.enable( 1 ); + this.cameraL.matrixAutoUpdate = false; + + this.cameraR = new PerspectiveCamera(); + this.cameraR.layers.enable( 2 ); + this.cameraR.matrixAutoUpdate = false; + + this._cache = { + focus: null, + fov: null, + aspect: null, + near: null, + far: null, + zoom: null, + eyeSep: null + }; + + } + + Object.assign( StereoCamera.prototype, { + + update: function ( camera ) { + + var cache = this._cache; + + var needsUpdate = cache.focus !== camera.focus || cache.fov !== camera.fov || + cache.aspect !== camera.aspect * this.aspect || cache.near !== camera.near || + cache.far !== camera.far || cache.zoom !== camera.zoom || cache.eyeSep !== this.eyeSep; + + if ( needsUpdate ) { + + cache.focus = camera.focus; + cache.fov = camera.fov; + cache.aspect = camera.aspect * this.aspect; + cache.near = camera.near; + cache.far = camera.far; + cache.zoom = camera.zoom; + cache.eyeSep = this.eyeSep; + + // Off-axis stereoscopic effect based on + // http://paulbourke.net/stereographics/stereorender/ + + var projectionMatrix = camera.projectionMatrix.clone(); + var eyeSepHalf = cache.eyeSep / 2; + var eyeSepOnProjection = eyeSepHalf * cache.near / cache.focus; + var ymax = ( cache.near * Math.tan( MathUtils.DEG2RAD * cache.fov * 0.5 ) ) / cache.zoom; + var xmin, xmax; + + // translate xOffset + + _eyeLeft.elements[ 12 ] = - eyeSepHalf; + _eyeRight.elements[ 12 ] = eyeSepHalf; + + // for left eye + + xmin = - ymax * cache.aspect + eyeSepOnProjection; + xmax = ymax * cache.aspect + eyeSepOnProjection; + + projectionMatrix.elements[ 0 ] = 2 * cache.near / ( xmax - xmin ); + projectionMatrix.elements[ 8 ] = ( xmax + xmin ) / ( xmax - xmin ); + + this.cameraL.projectionMatrix.copy( projectionMatrix ); + + // for right eye + + xmin = - ymax * cache.aspect - eyeSepOnProjection; + xmax = ymax * cache.aspect - eyeSepOnProjection; + + projectionMatrix.elements[ 0 ] = 2 * cache.near / ( xmax - xmin ); + projectionMatrix.elements[ 8 ] = ( xmax + xmin ) / ( xmax - xmin ); + + this.cameraR.projectionMatrix.copy( projectionMatrix ); + + } + + this.cameraL.matrixWorld.copy( camera.matrixWorld ).multiply( _eyeLeft ); + this.cameraR.matrixWorld.copy( camera.matrixWorld ).multiply( _eyeRight ); + + } + + } ); + + var Clock = function Clock( autoStart ) { + + this.autoStart = ( autoStart !== undefined ) ? autoStart : true; + + this.startTime = 0; + this.oldTime = 0; + this.elapsedTime = 0; + + this.running = false; + + }; + + Clock.prototype.start = function start () { + + this.startTime = ( typeof performance === 'undefined' ? Date : performance ).now(); // see #10732 + + this.oldTime = this.startTime; + this.elapsedTime = 0; + this.running = true; + + }; + + Clock.prototype.stop = function stop () { + + this.getElapsedTime(); + this.running = false; + this.autoStart = false; + + }; + + Clock.prototype.getElapsedTime = function getElapsedTime () { + + this.getDelta(); + return this.elapsedTime; + + }; + + Clock.prototype.getDelta = function getDelta () { + + var diff = 0; + + if ( this.autoStart && ! this.running ) { + + this.start(); + return 0; + + } + + if ( this.running ) { + + var newTime = ( typeof performance === 'undefined' ? Date : performance ).now(); + + diff = ( newTime - this.oldTime ) / 1000; + this.oldTime = newTime; + + this.elapsedTime += diff; + + } + + return diff; + + }; + + var _position$2 = new Vector3(); + var _quaternion$3 = new Quaternion(); + var _scale$1 = new Vector3(); + var _orientation = new Vector3(); + + function AudioListener() { + + Object3D.call(this); + + this.type = 'AudioListener'; + + this.context = AudioContext.getContext(); + + this.gain = this.context.createGain(); + this.gain.connect( this.context.destination ); + + this.filter = null; + + this.timeDelta = 0; + + // private + + this._clock = new Clock(); + + } + + AudioListener.prototype = Object.create( Object3D.prototype ); + AudioListener.prototype.constructor = AudioListener; + + AudioListener.prototype.getInput = function getInput () { + + return this.gain; + + }; + + AudioListener.prototype.removeFilter = function removeFilter () { + + if ( this.filter !== null ) { + + this.gain.disconnect( this.filter ); + this.filter.disconnect( this.context.destination ); + this.gain.connect( this.context.destination ); + this.filter = null; + + } + + return this; + + }; + + AudioListener.prototype.getFilter = function getFilter () { + + return this.filter; + + }; + + AudioListener.prototype.setFilter = function setFilter ( value ) { + + if ( this.filter !== null ) { + + this.gain.disconnect( this.filter ); + this.filter.disconnect( this.context.destination ); + + } else { + + this.gain.disconnect( this.context.destination ); + + } + + this.filter = value; + this.gain.connect( this.filter ); + this.filter.connect( this.context.destination ); + + return this; + + }; + + AudioListener.prototype.getMasterVolume = function getMasterVolume () { + + return this.gain.gain.value; + + }; + + AudioListener.prototype.setMasterVolume = function setMasterVolume ( value ) { + + this.gain.gain.setTargetAtTime( value, this.context.currentTime, 0.01 ); + + return this; + + }; + + AudioListener.prototype.updateMatrixWorld = function updateMatrixWorld ( force ) { + + Object3D.prototype.updateMatrixWorld.call( this, force ); + + var listener = this.context.listener; + var up = this.up; + + this.timeDelta = this._clock.getDelta(); + + this.matrixWorld.decompose( _position$2, _quaternion$3, _scale$1 ); + + _orientation.set( 0, 0, - 1 ).applyQuaternion( _quaternion$3 ); + + if ( listener.positionX ) { + + // code path for Chrome (see #14393) + + var endTime = this.context.currentTime + this.timeDelta; + + listener.positionX.linearRampToValueAtTime( _position$2.x, endTime ); + listener.positionY.linearRampToValueAtTime( _position$2.y, endTime ); + listener.positionZ.linearRampToValueAtTime( _position$2.z, endTime ); + listener.forwardX.linearRampToValueAtTime( _orientation.x, endTime ); + listener.forwardY.linearRampToValueAtTime( _orientation.y, endTime ); + listener.forwardZ.linearRampToValueAtTime( _orientation.z, endTime ); + listener.upX.linearRampToValueAtTime( up.x, endTime ); + listener.upY.linearRampToValueAtTime( up.y, endTime ); + listener.upZ.linearRampToValueAtTime( up.z, endTime ); + + } else { + + listener.setPosition( _position$2.x, _position$2.y, _position$2.z ); + listener.setOrientation( _orientation.x, _orientation.y, _orientation.z, up.x, up.y, up.z ); + + } + + }; + + function Audio( listener ) { + + Object3D.call(this); + + this.type = 'Audio'; + + this.listener = listener; + this.context = listener.context; + + this.gain = this.context.createGain(); + this.gain.connect( listener.getInput() ); + + this.autoplay = false; + + this.buffer = null; + this.detune = 0; + this.loop = false; + this.loopStart = 0; + this.loopEnd = 0; + this.offset = 0; + this.duration = undefined; + this.playbackRate = 1; + this.isPlaying = false; + this.hasPlaybackControl = true; + this.source = null; + this.sourceType = 'empty'; + + this._startedAt = 0; + this._progress = 0; + this._connected = false; + + this.filters = []; + + } + + Audio.prototype = Object.create( Object3D.prototype ); + Audio.prototype.constructor = Audio; + + Audio.prototype.getOutput = function getOutput () { + + return this.gain; + + }; + + Audio.prototype.setNodeSource = function setNodeSource ( audioNode ) { + + this.hasPlaybackControl = false; + this.sourceType = 'audioNode'; + this.source = audioNode; + this.connect(); + + return this; + + }; + + Audio.prototype.setMediaElementSource = function setMediaElementSource ( mediaElement ) { + + this.hasPlaybackControl = false; + this.sourceType = 'mediaNode'; + this.source = this.context.createMediaElementSource( mediaElement ); + this.connect(); + + return this; + + }; + + Audio.prototype.setMediaStreamSource = function setMediaStreamSource ( mediaStream ) { + + this.hasPlaybackControl = false; + this.sourceType = 'mediaStreamNode'; + this.source = this.context.createMediaStreamSource( mediaStream ); + this.connect(); + + return this; + + }; + + Audio.prototype.setBuffer = function setBuffer ( audioBuffer ) { + + this.buffer = audioBuffer; + this.sourceType = 'buffer'; + + if ( this.autoplay ) { this.play(); } + + return this; + + }; + + Audio.prototype.play = function play ( delay ) { + + if ( delay === undefined ) { delay = 0; } + + if ( this.isPlaying === true ) { + + console.warn( 'THREE.Audio: Audio is already playing.' ); + return; + + } + + if ( this.hasPlaybackControl === false ) { + + console.warn( 'THREE.Audio: this Audio has no playback control.' ); + return; + + } + + this._startedAt = this.context.currentTime + delay; + + var source = this.context.createBufferSource(); + source.buffer = this.buffer; + source.loop = this.loop; + source.loopStart = this.loopStart; + source.loopEnd = this.loopEnd; + source.onended = this.onEnded.bind( this ); + source.start( this._startedAt, this._progress + this.offset, this.duration ); + + this.isPlaying = true; + + this.source = source; + + this.setDetune( this.detune ); + this.setPlaybackRate( this.playbackRate ); + + return this.connect(); + + }; + + Audio.prototype.pause = function pause () { + + if ( this.hasPlaybackControl === false ) { + + console.warn( 'THREE.Audio: this Audio has no playback control.' ); + return; + + } + + if ( this.isPlaying === true ) { + + // update current progress + + this._progress += Math.max( this.context.currentTime - this._startedAt, 0 ) * this.playbackRate; + + if ( this.loop === true ) { + + // ensure _progress does not exceed duration with looped audios + + this._progress = this._progress % ( this.duration || this.buffer.duration ); + + } + + this.source.stop(); + this.source.onended = null; + + this.isPlaying = false; + + } + + return this; + + }; + + Audio.prototype.stop = function stop () { + + if ( this.hasPlaybackControl === false ) { + + console.warn( 'THREE.Audio: this Audio has no playback control.' ); + return; + + } + + this._progress = 0; + + this.source.stop(); + this.source.onended = null; + this.isPlaying = false; + + return this; + + }; + + Audio.prototype.connect = function connect () { + + if ( this.filters.length > 0 ) { + + this.source.connect( this.filters[ 0 ] ); + + for ( var i = 1, l = this.filters.length; i < l; i ++ ) { + + this.filters[ i - 1 ].connect( this.filters[ i ] ); + + } + + this.filters[ this.filters.length - 1 ].connect( this.getOutput() ); + + } else { + + this.source.connect( this.getOutput() ); + + } + + this._connected = true; + + return this; + + }; + + Audio.prototype.disconnect = function disconnect () { + + if ( this.filters.length > 0 ) { + + this.source.disconnect( this.filters[ 0 ] ); + + for ( var i = 1, l = this.filters.length; i < l; i ++ ) { + + this.filters[ i - 1 ].disconnect( this.filters[ i ] ); + + } + + this.filters[ this.filters.length - 1 ].disconnect( this.getOutput() ); + + } else { + + this.source.disconnect( this.getOutput() ); + + } + + this._connected = false; + + return this; + + }; + + Audio.prototype.getFilters = function getFilters () { + + return this.filters; + + }; + + Audio.prototype.setFilters = function setFilters ( value ) { + + if ( ! value ) { value = []; } + + if ( this._connected === true ) { + + this.disconnect(); + this.filters = value; + this.connect(); + + } else { + + this.filters = value; + + } + + return this; + + }; + + Audio.prototype.setDetune = function setDetune ( value ) { + + this.detune = value; + + if ( this.source.detune === undefined ) { return; } // only set detune when available + + if ( this.isPlaying === true ) { + + this.source.detune.setTargetAtTime( this.detune, this.context.currentTime, 0.01 ); + + } + + return this; + + }; + + Audio.prototype.getDetune = function getDetune () { + + return this.detune; + + }; + + Audio.prototype.getFilter = function getFilter () { + + return this.getFilters()[ 0 ]; + + }; + + Audio.prototype.setFilter = function setFilter ( filter ) { + + return this.setFilters( filter ? [ filter ] : [] ); + + }; + + Audio.prototype.setPlaybackRate = function setPlaybackRate ( value ) { + + if ( this.hasPlaybackControl === false ) { + + console.warn( 'THREE.Audio: this Audio has no playback control.' ); + return; + + } + + this.playbackRate = value; + + if ( this.isPlaying === true ) { + + this.source.playbackRate.setTargetAtTime( this.playbackRate, this.context.currentTime, 0.01 ); + + } + + return this; + + }; + + Audio.prototype.getPlaybackRate = function getPlaybackRate () { + + return this.playbackRate; + + }; + + Audio.prototype.onEnded = function onEnded () { + + this.isPlaying = false; + + }; + + Audio.prototype.getLoop = function getLoop () { + + if ( this.hasPlaybackControl === false ) { + + console.warn( 'THREE.Audio: this Audio has no playback control.' ); + return false; + + } + + return this.loop; + + }; + + Audio.prototype.setLoop = function setLoop ( value ) { + + if ( this.hasPlaybackControl === false ) { + + console.warn( 'THREE.Audio: this Audio has no playback control.' ); + return; + + } + + this.loop = value; + + if ( this.isPlaying === true ) { + + this.source.loop = this.loop; + + } + + return this; + + }; + + Audio.prototype.setLoopStart = function setLoopStart ( value ) { + + this.loopStart = value; + + return this; + + }; + + Audio.prototype.setLoopEnd = function setLoopEnd ( value ) { + + this.loopEnd = value; + + return this; + + }; + + Audio.prototype.getVolume = function getVolume () { + + return this.gain.gain.value; + + }; + + Audio.prototype.setVolume = function setVolume ( value ) { + + this.gain.gain.setTargetAtTime( value, this.context.currentTime, 0.01 ); + + return this; + + }; + + var _position$3 = new Vector3(); + var _quaternion$4 = new Quaternion(); + var _scale$2 = new Vector3(); + var _orientation$1 = new Vector3(); + + function PositionalAudio( listener ) { + + Audio.call( this, listener ); + + this.panner = this.context.createPanner(); + this.panner.panningModel = 'HRTF'; + this.panner.connect( this.gain ); + + } + + PositionalAudio.prototype = Object.create( Audio.prototype ); + PositionalAudio.prototype.constructor = PositionalAudio; + + PositionalAudio.prototype.getOutput = function getOutput () { + + return this.panner; + + }; + + PositionalAudio.prototype.getRefDistance = function getRefDistance () { + + return this.panner.refDistance; + + }; + + PositionalAudio.prototype.setRefDistance = function setRefDistance ( value ) { + + this.panner.refDistance = value; + + return this; + + }; + + PositionalAudio.prototype.getRolloffFactor = function getRolloffFactor () { + + return this.panner.rolloffFactor; + + }; + + PositionalAudio.prototype.setRolloffFactor = function setRolloffFactor ( value ) { + + this.panner.rolloffFactor = value; + + return this; + + }; + + PositionalAudio.prototype.getDistanceModel = function getDistanceModel () { + + return this.panner.distanceModel; + + }; + + PositionalAudio.prototype.setDistanceModel = function setDistanceModel ( value ) { + + this.panner.distanceModel = value; + + return this; + + }; + + PositionalAudio.prototype.getMaxDistance = function getMaxDistance () { + + return this.panner.maxDistance; + + }; + + PositionalAudio.prototype.setMaxDistance = function setMaxDistance ( value ) { + + this.panner.maxDistance = value; + + return this; + + }; + + PositionalAudio.prototype.setDirectionalCone = function setDirectionalCone ( coneInnerAngle, coneOuterAngle, coneOuterGain ) { + + this.panner.coneInnerAngle = coneInnerAngle; + this.panner.coneOuterAngle = coneOuterAngle; + this.panner.coneOuterGain = coneOuterGain; + + return this; + + }; + + PositionalAudio.prototype.updateMatrixWorld = function updateMatrixWorld ( force ) { + + Audio.prototype.updateMatrixWorld.call( this, force ); + + if ( this.hasPlaybackControl === true && this.isPlaying === false ) { return; } + + this.matrixWorld.decompose( _position$3, _quaternion$4, _scale$2 ); + + _orientation$1.set( 0, 0, 1 ).applyQuaternion( _quaternion$4 ); + + var panner = this.panner; + + if ( panner.positionX ) { + + // code path for Chrome and Firefox (see #14393) + + var endTime = this.context.currentTime + this.listener.timeDelta; + + panner.positionX.linearRampToValueAtTime( _position$3.x, endTime ); + panner.positionY.linearRampToValueAtTime( _position$3.y, endTime ); + panner.positionZ.linearRampToValueAtTime( _position$3.z, endTime ); + panner.orientationX.linearRampToValueAtTime( _orientation$1.x, endTime ); + panner.orientationY.linearRampToValueAtTime( _orientation$1.y, endTime ); + panner.orientationZ.linearRampToValueAtTime( _orientation$1.z, endTime ); + + } else { + + panner.setPosition( _position$3.x, _position$3.y, _position$3.z ); + panner.setOrientation( _orientation$1.x, _orientation$1.y, _orientation$1.z ); + + } + + }; + + var AudioAnalyser = function AudioAnalyser( audio, fftSize ) { + + this.analyser = audio.context.createAnalyser(); + this.analyser.fftSize = fftSize !== undefined ? fftSize : 2048; + + this.data = new Uint8Array( this.analyser.frequencyBinCount ); + + audio.getOutput().connect( this.analyser ); + + }; + + + AudioAnalyser.prototype.getFrequencyData = function getFrequencyData () { + + this.analyser.getByteFrequencyData( this.data ); + + return this.data; + + }; + + AudioAnalyser.prototype.getAverageFrequency = function getAverageFrequency () { + + var value = 0; + var data = this.getFrequencyData(); + + for ( var i = 0; i < data.length; i ++ ) { + + value += data[ i ]; + + } + + return value / data.length; + + }; + + function PropertyMixer( binding, typeName, valueSize ) { + + this.binding = binding; + this.valueSize = valueSize; + + var mixFunction, + mixFunctionAdditive, + setIdentity; + + // buffer layout: [ incoming | accu0 | accu1 | orig | addAccu | (optional work) ] + // + // interpolators can use .buffer as their .result + // the data then goes to 'incoming' + // + // 'accu0' and 'accu1' are used frame-interleaved for + // the cumulative result and are compared to detect + // changes + // + // 'orig' stores the original state of the property + // + // 'add' is used for additive cumulative results + // + // 'work' is optional and is only present for quaternion types. It is used + // to store intermediate quaternion multiplication results + + switch ( typeName ) { + + case 'quaternion': + mixFunction = this._slerp; + mixFunctionAdditive = this._slerpAdditive; + setIdentity = this._setAdditiveIdentityQuaternion; + + this.buffer = new Float64Array( valueSize * 6 ); + this._workIndex = 5; + break; + + case 'string': + case 'bool': + mixFunction = this._select; + + // Use the regular mix function and for additive on these types, + // additive is not relevant for non-numeric types + mixFunctionAdditive = this._select; + + setIdentity = this._setAdditiveIdentityOther; + + this.buffer = new Array( valueSize * 5 ); + break; + + default: + mixFunction = this._lerp; + mixFunctionAdditive = this._lerpAdditive; + setIdentity = this._setAdditiveIdentityNumeric; + + this.buffer = new Float64Array( valueSize * 5 ); + + } + + this._mixBufferRegion = mixFunction; + this._mixBufferRegionAdditive = mixFunctionAdditive; + this._setIdentity = setIdentity; + this._origIndex = 3; + this._addIndex = 4; + + this.cumulativeWeight = 0; + this.cumulativeWeightAdditive = 0; + + this.useCount = 0; + this.referenceCount = 0; + + } + + Object.assign( PropertyMixer.prototype, { + + // accumulate data in the 'incoming' region into 'accu' + accumulate: function ( accuIndex, weight ) { + + // note: happily accumulating nothing when weight = 0, the caller knows + // the weight and shouldn't have made the call in the first place + + var buffer = this.buffer, + stride = this.valueSize, + offset = accuIndex * stride + stride; + + var currentWeight = this.cumulativeWeight; + + if ( currentWeight === 0 ) { + + // accuN := incoming * weight + + for ( var i = 0; i !== stride; ++ i ) { + + buffer[ offset + i ] = buffer[ i ]; + + } + + currentWeight = weight; + + } else { + + // accuN := accuN + incoming * weight + + currentWeight += weight; + var mix = weight / currentWeight; + this._mixBufferRegion( buffer, offset, 0, mix, stride ); + + } + + this.cumulativeWeight = currentWeight; + + }, + + // accumulate data in the 'incoming' region into 'add' + accumulateAdditive: function ( weight ) { + + var buffer = this.buffer, + stride = this.valueSize, + offset = stride * this._addIndex; + + if ( this.cumulativeWeightAdditive === 0 ) { + + // add = identity + + this._setIdentity(); + + } + + // add := add + incoming * weight + + this._mixBufferRegionAdditive( buffer, offset, 0, weight, stride ); + this.cumulativeWeightAdditive += weight; + + }, + + // apply the state of 'accu' to the binding when accus differ + apply: function ( accuIndex ) { + + var stride = this.valueSize, + buffer = this.buffer, + offset = accuIndex * stride + stride, + + weight = this.cumulativeWeight, + weightAdditive = this.cumulativeWeightAdditive, + + binding = this.binding; + + this.cumulativeWeight = 0; + this.cumulativeWeightAdditive = 0; + + if ( weight < 1 ) { + + // accuN := accuN + original * ( 1 - cumulativeWeight ) + + var originalValueOffset = stride * this._origIndex; + + this._mixBufferRegion( + buffer, offset, originalValueOffset, 1 - weight, stride ); + + } + + if ( weightAdditive > 0 ) { + + // accuN := accuN + additive accuN + + this._mixBufferRegionAdditive( buffer, offset, this._addIndex * stride, 1, stride ); + + } + + for ( var i = stride, e = stride + stride; i !== e; ++ i ) { + + if ( buffer[ i ] !== buffer[ i + stride ] ) { + + // value has changed -> update scene graph + + binding.setValue( buffer, offset ); + break; + + } + + } + + }, + + // remember the state of the bound property and copy it to both accus + saveOriginalState: function () { + + var binding = this.binding; + + var buffer = this.buffer, + stride = this.valueSize, + + originalValueOffset = stride * this._origIndex; + + binding.getValue( buffer, originalValueOffset ); + + // accu[0..1] := orig -- initially detect changes against the original + for ( var i = stride, e = originalValueOffset; i !== e; ++ i ) { + + buffer[ i ] = buffer[ originalValueOffset + ( i % stride ) ]; + + } + + // Add to identity for additive + this._setIdentity(); + + this.cumulativeWeight = 0; + this.cumulativeWeightAdditive = 0; + + }, + + // apply the state previously taken via 'saveOriginalState' to the binding + restoreOriginalState: function () { + + var originalValueOffset = this.valueSize * 3; + this.binding.setValue( this.buffer, originalValueOffset ); + + }, + + _setAdditiveIdentityNumeric: function () { + + var startIndex = this._addIndex * this.valueSize; + var endIndex = startIndex + this.valueSize; + + for ( var i = startIndex; i < endIndex; i ++ ) { + + this.buffer[ i ] = 0; + + } + + }, + + _setAdditiveIdentityQuaternion: function () { + + this._setAdditiveIdentityNumeric(); + this.buffer[ this._addIndex * this.valueSize + 3 ] = 1; + + }, + + _setAdditiveIdentityOther: function () { + + var startIndex = this._origIndex * this.valueSize; + var targetIndex = this._addIndex * this.valueSize; + + for ( var i = 0; i < this.valueSize; i ++ ) { + + this.buffer[ targetIndex + i ] = this.buffer[ startIndex + i ]; + + } + + }, + + + // mix functions + + _select: function ( buffer, dstOffset, srcOffset, t, stride ) { + + if ( t >= 0.5 ) { + + for ( var i = 0; i !== stride; ++ i ) { + + buffer[ dstOffset + i ] = buffer[ srcOffset + i ]; + + } + + } + + }, + + _slerp: function ( buffer, dstOffset, srcOffset, t ) { + + Quaternion.slerpFlat( buffer, dstOffset, buffer, dstOffset, buffer, srcOffset, t ); + + }, + + _slerpAdditive: function ( buffer, dstOffset, srcOffset, t, stride ) { + + var workOffset = this._workIndex * stride; + + // Store result in intermediate buffer offset + Quaternion.multiplyQuaternionsFlat( buffer, workOffset, buffer, dstOffset, buffer, srcOffset ); + + // Slerp to the intermediate result + Quaternion.slerpFlat( buffer, dstOffset, buffer, dstOffset, buffer, workOffset, t ); + + }, + + _lerp: function ( buffer, dstOffset, srcOffset, t, stride ) { + + var s = 1 - t; + + for ( var i = 0; i !== stride; ++ i ) { + + var j = dstOffset + i; + + buffer[ j ] = buffer[ j ] * s + buffer[ srcOffset + i ] * t; + + } + + }, + + _lerpAdditive: function ( buffer, dstOffset, srcOffset, t, stride ) { + + for ( var i = 0; i !== stride; ++ i ) { + + var j = dstOffset + i; + + buffer[ j ] = buffer[ j ] + buffer[ srcOffset + i ] * t; + + } + + } + + } ); + + // Characters [].:/ are reserved for track binding syntax. + var _RESERVED_CHARS_RE = '\\[\\]\\.:\\/'; + var _reservedRe = new RegExp( '[' + _RESERVED_CHARS_RE + ']', 'g' ); + + // Attempts to allow node names from any language. ES5's `\w` regexp matches + // only latin characters, and the unicode \p{L} is not yet supported. So + // instead, we exclude reserved characters and match everything else. + var _wordChar = '[^' + _RESERVED_CHARS_RE + ']'; + var _wordCharOrDot = '[^' + _RESERVED_CHARS_RE.replace( '\\.', '' ) + ']'; + + // Parent directories, delimited by '/' or ':'. Currently unused, but must + // be matched to parse the rest of the track name. + var _directoryRe = /((?:WC+[\/:])*)/.source.replace( 'WC', _wordChar ); + + // Target node. May contain word characters (a-zA-Z0-9_) and '.' or '-'. + var _nodeRe = /(WCOD+)?/.source.replace( 'WCOD', _wordCharOrDot ); + + // Object on target node, and accessor. May not contain reserved + // characters. Accessor may contain any character except closing bracket. + var _objectRe = /(?:\.(WC+)(?:\[(.+)\])?)?/.source.replace( 'WC', _wordChar ); + + // Property and accessor. May not contain reserved characters. Accessor may + // contain any non-bracket characters. + var _propertyRe = /\.(WC+)(?:\[(.+)\])?/.source.replace( 'WC', _wordChar ); + + var _trackRe = new RegExp( '' + + '^' + + _directoryRe + + _nodeRe + + _objectRe + + _propertyRe + + '$' + ); + + var _supportedObjectNames = [ 'material', 'materials', 'bones' ]; + + function Composite( targetGroup, path, optionalParsedPath ) { + + var parsedPath = optionalParsedPath || PropertyBinding.parseTrackName( path ); + + this._targetGroup = targetGroup; + this._bindings = targetGroup.subscribe_( path, parsedPath ); + + } + + Object.assign( Composite.prototype, { + + getValue: function ( array, offset ) { + + this.bind(); // bind all binding + + var firstValidIndex = this._targetGroup.nCachedObjects_, + binding = this._bindings[ firstValidIndex ]; + + // and only call .getValue on the first + if ( binding !== undefined ) { binding.getValue( array, offset ); } + + }, + + setValue: function ( array, offset ) { + + var bindings = this._bindings; + + for ( var i = this._targetGroup.nCachedObjects_, n = bindings.length; i !== n; ++ i ) { + + bindings[ i ].setValue( array, offset ); + + } + + }, + + bind: function () { + + var bindings = this._bindings; + + for ( var i = this._targetGroup.nCachedObjects_, n = bindings.length; i !== n; ++ i ) { + + bindings[ i ].bind(); + + } + + }, + + unbind: function () { + + var bindings = this._bindings; + + for ( var i = this._targetGroup.nCachedObjects_, n = bindings.length; i !== n; ++ i ) { + + bindings[ i ].unbind(); + + } + + } + + } ); + + + function PropertyBinding( rootNode, path, parsedPath ) { + + this.path = path; + this.parsedPath = parsedPath || PropertyBinding.parseTrackName( path ); + + this.node = PropertyBinding.findNode( rootNode, this.parsedPath.nodeName ) || rootNode; + + this.rootNode = rootNode; + + } + + Object.assign( PropertyBinding, { + + Composite: Composite, + + create: function ( root, path, parsedPath ) { + + if ( ! ( root && root.isAnimationObjectGroup ) ) { + + return new PropertyBinding( root, path, parsedPath ); + + } else { + + return new PropertyBinding.Composite( root, path, parsedPath ); + + } + + }, + + /** + * Replaces spaces with underscores and removes unsupported characters from + * node names, to ensure compatibility with parseTrackName(). + * + * @param {string} name Node name to be sanitized. + * @return {string} + */ + sanitizeNodeName: function ( name ) { + + return name.replace( /\s/g, '_' ).replace( _reservedRe, '' ); + + }, + + parseTrackName: function ( trackName ) { + + var matches = _trackRe.exec( trackName ); + + if ( ! matches ) { + + throw new Error( 'PropertyBinding: Cannot parse trackName: ' + trackName ); + + } + + var results = { + // directoryName: matches[ 1 ], // (tschw) currently unused + nodeName: matches[ 2 ], + objectName: matches[ 3 ], + objectIndex: matches[ 4 ], + propertyName: matches[ 5 ], // required + propertyIndex: matches[ 6 ] + }; + + var lastDot = results.nodeName && results.nodeName.lastIndexOf( '.' ); + + if ( lastDot !== undefined && lastDot !== - 1 ) { + + var objectName = results.nodeName.substring( lastDot + 1 ); + + // Object names must be checked against an allowlist. Otherwise, there + // is no way to parse 'foo.bar.baz': 'baz' must be a property, but + // 'bar' could be the objectName, or part of a nodeName (which can + // include '.' characters). + if ( _supportedObjectNames.indexOf( objectName ) !== - 1 ) { + + results.nodeName = results.nodeName.substring( 0, lastDot ); + results.objectName = objectName; + + } + + } + + if ( results.propertyName === null || results.propertyName.length === 0 ) { + + throw new Error( 'PropertyBinding: can not parse propertyName from trackName: ' + trackName ); + + } + + return results; + + }, + + findNode: function ( root, nodeName ) { + + if ( ! nodeName || nodeName === "" || nodeName === "." || nodeName === - 1 || nodeName === root.name || nodeName === root.uuid ) { + + return root; + + } + + // search into skeleton bones. + if ( root.skeleton ) { + + var bone = root.skeleton.getBoneByName( nodeName ); + + if ( bone !== undefined ) { + + return bone; + + } + + } + + // search into node subtree. + if ( root.children ) { + + var searchNodeSubtree = function ( children ) { + + for ( var i = 0; i < children.length; i ++ ) { + + var childNode = children[ i ]; + + if ( childNode.name === nodeName || childNode.uuid === nodeName ) { + + return childNode; + + } + + var result = searchNodeSubtree( childNode.children ); + + if ( result ) { return result; } + + } + + return null; + + }; + + var subTreeNode = searchNodeSubtree( root.children ); + + if ( subTreeNode ) { + + return subTreeNode; + + } + + } + + return null; + + } + + } ); + + Object.assign( PropertyBinding.prototype, { // prototype, continued + + // these are used to "bind" a nonexistent property + _getValue_unavailable: function () {}, + _setValue_unavailable: function () {}, + + BindingType: { + Direct: 0, + EntireArray: 1, + ArrayElement: 2, + HasFromToArray: 3 + }, + + Versioning: { + None: 0, + NeedsUpdate: 1, + MatrixWorldNeedsUpdate: 2 + }, + + GetterByBindingType: [ + + function getValue_direct( buffer, offset ) { + + buffer[ offset ] = this.node[ this.propertyName ]; + + }, + + function getValue_array( buffer, offset ) { + + var source = this.resolvedProperty; + + for ( var i = 0, n = source.length; i !== n; ++ i ) { + + buffer[ offset ++ ] = source[ i ]; + + } + + }, + + function getValue_arrayElement( buffer, offset ) { + + buffer[ offset ] = this.resolvedProperty[ this.propertyIndex ]; + + }, + + function getValue_toArray( buffer, offset ) { + + this.resolvedProperty.toArray( buffer, offset ); + + } + + ], + + SetterByBindingTypeAndVersioning: [ + + [ + // Direct + + function setValue_direct( buffer, offset ) { + + this.targetObject[ this.propertyName ] = buffer[ offset ]; + + }, + + function setValue_direct_setNeedsUpdate( buffer, offset ) { + + this.targetObject[ this.propertyName ] = buffer[ offset ]; + this.targetObject.needsUpdate = true; + + }, + + function setValue_direct_setMatrixWorldNeedsUpdate( buffer, offset ) { + + this.targetObject[ this.propertyName ] = buffer[ offset ]; + this.targetObject.matrixWorldNeedsUpdate = true; + + } + + ], [ + + // EntireArray + + function setValue_array( buffer, offset ) { + + var dest = this.resolvedProperty; + + for ( var i = 0, n = dest.length; i !== n; ++ i ) { + + dest[ i ] = buffer[ offset ++ ]; + + } + + }, + + function setValue_array_setNeedsUpdate( buffer, offset ) { + + var dest = this.resolvedProperty; + + for ( var i = 0, n = dest.length; i !== n; ++ i ) { + + dest[ i ] = buffer[ offset ++ ]; + + } + + this.targetObject.needsUpdate = true; + + }, + + function setValue_array_setMatrixWorldNeedsUpdate( buffer, offset ) { + + var dest = this.resolvedProperty; + + for ( var i = 0, n = dest.length; i !== n; ++ i ) { + + dest[ i ] = buffer[ offset ++ ]; + + } + + this.targetObject.matrixWorldNeedsUpdate = true; + + } + + ], [ + + // ArrayElement + + function setValue_arrayElement( buffer, offset ) { + + this.resolvedProperty[ this.propertyIndex ] = buffer[ offset ]; + + }, + + function setValue_arrayElement_setNeedsUpdate( buffer, offset ) { + + this.resolvedProperty[ this.propertyIndex ] = buffer[ offset ]; + this.targetObject.needsUpdate = true; + + }, + + function setValue_arrayElement_setMatrixWorldNeedsUpdate( buffer, offset ) { + + this.resolvedProperty[ this.propertyIndex ] = buffer[ offset ]; + this.targetObject.matrixWorldNeedsUpdate = true; + + } + + ], [ + + // HasToFromArray + + function setValue_fromArray( buffer, offset ) { + + this.resolvedProperty.fromArray( buffer, offset ); + + }, + + function setValue_fromArray_setNeedsUpdate( buffer, offset ) { + + this.resolvedProperty.fromArray( buffer, offset ); + this.targetObject.needsUpdate = true; + + }, + + function setValue_fromArray_setMatrixWorldNeedsUpdate( buffer, offset ) { + + this.resolvedProperty.fromArray( buffer, offset ); + this.targetObject.matrixWorldNeedsUpdate = true; + + } + + ] + + ], + + getValue: function getValue_unbound( targetArray, offset ) { + + this.bind(); + this.getValue( targetArray, offset ); + + // Note: This class uses a State pattern on a per-method basis: + // 'bind' sets 'this.getValue' / 'setValue' and shadows the + // prototype version of these methods with one that represents + // the bound state. When the property is not found, the methods + // become no-ops. + + }, + + setValue: function getValue_unbound( sourceArray, offset ) { + + this.bind(); + this.setValue( sourceArray, offset ); + + }, + + // create getter / setter pair for a property in the scene graph + bind: function () { + + var targetObject = this.node; + var parsedPath = this.parsedPath; + + var objectName = parsedPath.objectName; + var propertyName = parsedPath.propertyName; + var propertyIndex = parsedPath.propertyIndex; + + if ( ! targetObject ) { + + targetObject = PropertyBinding.findNode( this.rootNode, parsedPath.nodeName ) || this.rootNode; + + this.node = targetObject; + + } + + // set fail state so we can just 'return' on error + this.getValue = this._getValue_unavailable; + this.setValue = this._setValue_unavailable; + + // ensure there is a value node + if ( ! targetObject ) { + + console.error( 'THREE.PropertyBinding: Trying to update node for track: ' + this.path + ' but it wasn\'t found.' ); + return; + + } + + if ( objectName ) { + + var objectIndex = parsedPath.objectIndex; + + // special cases were we need to reach deeper into the hierarchy to get the face materials.... + switch ( objectName ) { + + case 'materials': + + if ( ! targetObject.material ) { + + console.error( 'THREE.PropertyBinding: Can not bind to material as node does not have a material.', this ); + return; + + } + + if ( ! targetObject.material.materials ) { + + console.error( 'THREE.PropertyBinding: Can not bind to material.materials as node.material does not have a materials array.', this ); + return; + + } + + targetObject = targetObject.material.materials; + + break; + + case 'bones': + + if ( ! targetObject.skeleton ) { + + console.error( 'THREE.PropertyBinding: Can not bind to bones as node does not have a skeleton.', this ); + return; + + } + + // potential future optimization: skip this if propertyIndex is already an integer + // and convert the integer string to a true integer. + + targetObject = targetObject.skeleton.bones; + + // support resolving morphTarget names into indices. + for ( var i = 0; i < targetObject.length; i ++ ) { + + if ( targetObject[ i ].name === objectIndex ) { + + objectIndex = i; + break; + + } + + } + + break; + + default: + + if ( targetObject[ objectName ] === undefined ) { + + console.error( 'THREE.PropertyBinding: Can not bind to objectName of node undefined.', this ); + return; + + } + + targetObject = targetObject[ objectName ]; + + } + + + if ( objectIndex !== undefined ) { + + if ( targetObject[ objectIndex ] === undefined ) { + + console.error( 'THREE.PropertyBinding: Trying to bind to objectIndex of objectName, but is undefined.', this, targetObject ); + return; + + } + + targetObject = targetObject[ objectIndex ]; + + } + + } + + // resolve property + var nodeProperty = targetObject[ propertyName ]; + + if ( nodeProperty === undefined ) { + + var nodeName = parsedPath.nodeName; + + console.error( 'THREE.PropertyBinding: Trying to update property for track: ' + nodeName + + '.' + propertyName + ' but it wasn\'t found.', targetObject ); + return; + + } + + // determine versioning scheme + var versioning = this.Versioning.None; + + this.targetObject = targetObject; + + if ( targetObject.needsUpdate !== undefined ) { // material + + versioning = this.Versioning.NeedsUpdate; + + } else if ( targetObject.matrixWorldNeedsUpdate !== undefined ) { // node transform + + versioning = this.Versioning.MatrixWorldNeedsUpdate; + + } + + // determine how the property gets bound + var bindingType = this.BindingType.Direct; + + if ( propertyIndex !== undefined ) { + + // access a sub element of the property array (only primitives are supported right now) + + if ( propertyName === "morphTargetInfluences" ) { + + // potential optimization, skip this if propertyIndex is already an integer, and convert the integer string to a true integer. + + // support resolving morphTarget names into indices. + if ( ! targetObject.geometry ) { + + console.error( 'THREE.PropertyBinding: Can not bind to morphTargetInfluences because node does not have a geometry.', this ); + return; + + } + + if ( targetObject.geometry.isBufferGeometry ) { + + if ( ! targetObject.geometry.morphAttributes ) { + + console.error( 'THREE.PropertyBinding: Can not bind to morphTargetInfluences because node does not have a geometry.morphAttributes.', this ); + return; + + } + + if ( targetObject.morphTargetDictionary[ propertyIndex ] !== undefined ) { + + propertyIndex = targetObject.morphTargetDictionary[ propertyIndex ]; + + } + + + } else { + + console.error( 'THREE.PropertyBinding: Can not bind to morphTargetInfluences on THREE.Geometry. Use THREE.BufferGeometry instead.', this ); + return; + + } + + } + + bindingType = this.BindingType.ArrayElement; + + this.resolvedProperty = nodeProperty; + this.propertyIndex = propertyIndex; + + } else if ( nodeProperty.fromArray !== undefined && nodeProperty.toArray !== undefined ) { + + // must use copy for Object3D.Euler/Quaternion + + bindingType = this.BindingType.HasFromToArray; + + this.resolvedProperty = nodeProperty; + + } else if ( Array.isArray( nodeProperty ) ) { + + bindingType = this.BindingType.EntireArray; + + this.resolvedProperty = nodeProperty; + + } else { + + this.propertyName = propertyName; + + } + + // select getter / setter + this.getValue = this.GetterByBindingType[ bindingType ]; + this.setValue = this.SetterByBindingTypeAndVersioning[ bindingType ][ versioning ]; + + }, + + unbind: function () { + + this.node = null; + + // back to the prototype version of getValue / setValue + // note: avoiding to mutate the shape of 'this' via 'delete' + this.getValue = this._getValue_unbound; + this.setValue = this._setValue_unbound; + + } + + } ); + + // DECLARE ALIAS AFTER assign prototype + Object.assign( PropertyBinding.prototype, { + + // initial state of these methods that calls 'bind' + _getValue_unbound: PropertyBinding.prototype.getValue, + _setValue_unbound: PropertyBinding.prototype.setValue, + + } ); + + /** + * + * A group of objects that receives a shared animation state. + * + * Usage: + * + * - Add objects you would otherwise pass as 'root' to the + * constructor or the .clipAction method of AnimationMixer. + * + * - Instead pass this object as 'root'. + * + * - You can also add and remove objects later when the mixer + * is running. + * + * Note: + * + * Objects of this class appear as one object to the mixer, + * so cache control of the individual objects must be done + * on the group. + * + * Limitation: + * + * - The animated properties must be compatible among the + * all objects in the group. + * + * - A single property can either be controlled through a + * target group or directly, but not both. + */ + + function AnimationObjectGroup() { + + this.uuid = MathUtils.generateUUID(); + + // cached objects followed by the active ones + this._objects = Array.prototype.slice.call( arguments ); + + this.nCachedObjects_ = 0; // threshold + // note: read by PropertyBinding.Composite + + var indices = {}; + this._indicesByUUID = indices; // for bookkeeping + + for ( var i = 0, n = arguments.length; i !== n; ++ i ) { + + indices[ arguments[ i ].uuid ] = i; + + } + + this._paths = []; // inside: string + this._parsedPaths = []; // inside: { we don't care, here } + this._bindings = []; // inside: Array< PropertyBinding > + this._bindingsIndicesByPath = {}; // inside: indices in these arrays + + var scope = this; + + this.stats = { + + objects: { + get total() { + + return scope._objects.length; + + }, + get inUse() { + + return this.total - scope.nCachedObjects_; + + } + }, + get bindingsPerObject() { + + return scope._bindings.length; + + } + + }; + + } + + Object.assign( AnimationObjectGroup.prototype, { + + isAnimationObjectGroup: true, + + add: function () { + + var objects = this._objects, + indicesByUUID = this._indicesByUUID, + paths = this._paths, + parsedPaths = this._parsedPaths, + bindings = this._bindings, + nBindings = bindings.length; + + var knownObject = undefined, + nObjects = objects.length, + nCachedObjects = this.nCachedObjects_; + + for ( var i = 0, n = arguments.length; i !== n; ++ i ) { + + var object = arguments[ i ], + uuid = object.uuid; + var index = indicesByUUID[ uuid ]; + + if ( index === undefined ) { + + // unknown object -> add it to the ACTIVE region + + index = nObjects ++; + indicesByUUID[ uuid ] = index; + objects.push( object ); + + // accounting is done, now do the same for all bindings + + for ( var j = 0, m = nBindings; j !== m; ++ j ) { + + bindings[ j ].push( new PropertyBinding( object, paths[ j ], parsedPaths[ j ] ) ); + + } + + } else if ( index < nCachedObjects ) { + + knownObject = objects[ index ]; + + // move existing object to the ACTIVE region + + var firstActiveIndex = -- nCachedObjects, + lastCachedObject = objects[ firstActiveIndex ]; + + indicesByUUID[ lastCachedObject.uuid ] = index; + objects[ index ] = lastCachedObject; + + indicesByUUID[ uuid ] = firstActiveIndex; + objects[ firstActiveIndex ] = object; + + // accounting is done, now do the same for all bindings + + for ( var j$1 = 0, m$1 = nBindings; j$1 !== m$1; ++ j$1 ) { + + var bindingsForPath = bindings[ j$1 ], + lastCached = bindingsForPath[ firstActiveIndex ]; + + var binding = bindingsForPath[ index ]; + + bindingsForPath[ index ] = lastCached; + + if ( binding === undefined ) { + + // since we do not bother to create new bindings + // for objects that are cached, the binding may + // or may not exist + + binding = new PropertyBinding( object, paths[ j$1 ], parsedPaths[ j$1 ] ); + + } + + bindingsForPath[ firstActiveIndex ] = binding; + + } + + } else if ( objects[ index ] !== knownObject ) { + + console.error( 'THREE.AnimationObjectGroup: Different objects with the same UUID ' + + 'detected. Clean the caches or recreate your infrastructure when reloading scenes.' ); + + } // else the object is already where we want it to be + + } // for arguments + + this.nCachedObjects_ = nCachedObjects; + + }, + + remove: function () { + + var objects = this._objects, + indicesByUUID = this._indicesByUUID, + bindings = this._bindings, + nBindings = bindings.length; + + var nCachedObjects = this.nCachedObjects_; + + for ( var i = 0, n = arguments.length; i !== n; ++ i ) { + + var object = arguments[ i ], + uuid = object.uuid, + index = indicesByUUID[ uuid ]; + + if ( index !== undefined && index >= nCachedObjects ) { + + // move existing object into the CACHED region + + var lastCachedIndex = nCachedObjects ++, + firstActiveObject = objects[ lastCachedIndex ]; + + indicesByUUID[ firstActiveObject.uuid ] = index; + objects[ index ] = firstActiveObject; + + indicesByUUID[ uuid ] = lastCachedIndex; + objects[ lastCachedIndex ] = object; + + // accounting is done, now do the same for all bindings + + for ( var j = 0, m = nBindings; j !== m; ++ j ) { + + var bindingsForPath = bindings[ j ], + firstActive = bindingsForPath[ lastCachedIndex ], + binding = bindingsForPath[ index ]; + + bindingsForPath[ index ] = firstActive; + bindingsForPath[ lastCachedIndex ] = binding; + + } + + } + + } // for arguments + + this.nCachedObjects_ = nCachedObjects; + + }, + + // remove & forget + uncache: function () { + + var objects = this._objects, + indicesByUUID = this._indicesByUUID, + bindings = this._bindings, + nBindings = bindings.length; + + var nCachedObjects = this.nCachedObjects_, + nObjects = objects.length; + + for ( var i = 0, n = arguments.length; i !== n; ++ i ) { + + var object = arguments[ i ], + uuid = object.uuid, + index = indicesByUUID[ uuid ]; + + if ( index !== undefined ) { + + delete indicesByUUID[ uuid ]; + + if ( index < nCachedObjects ) { + + // object is cached, shrink the CACHED region + + var firstActiveIndex = -- nCachedObjects, + lastCachedObject = objects[ firstActiveIndex ], + lastIndex = -- nObjects, + lastObject = objects[ lastIndex ]; + + // last cached object takes this object's place + indicesByUUID[ lastCachedObject.uuid ] = index; + objects[ index ] = lastCachedObject; + + // last object goes to the activated slot and pop + indicesByUUID[ lastObject.uuid ] = firstActiveIndex; + objects[ firstActiveIndex ] = lastObject; + objects.pop(); + + // accounting is done, now do the same for all bindings + + for ( var j = 0, m = nBindings; j !== m; ++ j ) { + + var bindingsForPath = bindings[ j ], + lastCached = bindingsForPath[ firstActiveIndex ], + last = bindingsForPath[ lastIndex ]; + + bindingsForPath[ index ] = lastCached; + bindingsForPath[ firstActiveIndex ] = last; + bindingsForPath.pop(); + + } + + } else { + + // object is active, just swap with the last and pop + + var lastIndex$1 = -- nObjects, + lastObject$1 = objects[ lastIndex$1 ]; + + indicesByUUID[ lastObject$1.uuid ] = index; + objects[ index ] = lastObject$1; + objects.pop(); + + // accounting is done, now do the same for all bindings + + for ( var j$1 = 0, m$1 = nBindings; j$1 !== m$1; ++ j$1 ) { + + var bindingsForPath$1 = bindings[ j$1 ]; + + bindingsForPath$1[ index ] = bindingsForPath$1[ lastIndex$1 ]; + bindingsForPath$1.pop(); + + } + + } // cached or active + + } // if object is known + + } // for arguments + + this.nCachedObjects_ = nCachedObjects; + + }, + + // Internal interface used by befriended PropertyBinding.Composite: + + subscribe_: function ( path, parsedPath ) { + + // returns an array of bindings for the given path that is changed + // according to the contained objects in the group + + var indicesByPath = this._bindingsIndicesByPath; + var index = indicesByPath[ path ]; + var bindings = this._bindings; + + if ( index !== undefined ) { return bindings[ index ]; } + + var paths = this._paths, + parsedPaths = this._parsedPaths, + objects = this._objects, + nObjects = objects.length, + nCachedObjects = this.nCachedObjects_, + bindingsForPath = new Array( nObjects ); + + index = bindings.length; + + indicesByPath[ path ] = index; + + paths.push( path ); + parsedPaths.push( parsedPath ); + bindings.push( bindingsForPath ); + + for ( var i = nCachedObjects, n = objects.length; i !== n; ++ i ) { + + var object = objects[ i ]; + bindingsForPath[ i ] = new PropertyBinding( object, path, parsedPath ); + + } + + return bindingsForPath; + + }, + + unsubscribe_: function ( path ) { + + // tells the group to forget about a property path and no longer + // update the array previously obtained with 'subscribe_' + + var indicesByPath = this._bindingsIndicesByPath, + index = indicesByPath[ path ]; + + if ( index !== undefined ) { + + var paths = this._paths, + parsedPaths = this._parsedPaths, + bindings = this._bindings, + lastBindingsIndex = bindings.length - 1, + lastBindings = bindings[ lastBindingsIndex ], + lastBindingsPath = path[ lastBindingsIndex ]; + + indicesByPath[ lastBindingsPath ] = index; + + bindings[ index ] = lastBindings; + bindings.pop(); + + parsedPaths[ index ] = parsedPaths[ lastBindingsIndex ]; + parsedPaths.pop(); + + paths[ index ] = paths[ lastBindingsIndex ]; + paths.pop(); + + } + + } + + } ); + + var AnimationAction = function AnimationAction( mixer, clip, localRoot, blendMode ) { + + this._mixer = mixer; + this._clip = clip; + this._localRoot = localRoot || null; + this.blendMode = blendMode || clip.blendMode; + + var tracks = clip.tracks, + nTracks = tracks.length, + interpolants = new Array( nTracks ); + + var interpolantSettings = { + endingStart: ZeroCurvatureEnding, + endingEnd: ZeroCurvatureEnding + }; + + for ( var i = 0; i !== nTracks; ++ i ) { + + var interpolant = tracks[ i ].createInterpolant( null ); + interpolants[ i ] = interpolant; + interpolant.settings = interpolantSettings; + + } + + this._interpolantSettings = interpolantSettings; + + this._interpolants = interpolants; // bound by the mixer + + // inside: PropertyMixer (managed by the mixer) + this._propertyBindings = new Array( nTracks ); + + this._cacheIndex = null; // for the memory manager + this._byClipCacheIndex = null; // for the memory manager + + this._timeScaleInterpolant = null; + this._weightInterpolant = null; + + this.loop = LoopRepeat; + this._loopCount = - 1; + + // global mixer time when the action is to be started + // it's set back to 'null' upon start of the action + this._startTime = null; + + // scaled local time of the action + // gets clamped or wrapped to 0..clip.duration according to loop + this.time = 0; + + this.timeScale = 1; + this._effectiveTimeScale = 1; + + this.weight = 1; + this._effectiveWeight = 1; + + this.repetitions = Infinity; // no. of repetitions when looping + + this.paused = false; // true -> zero effective time scale + this.enabled = true; // false -> zero effective weight + + this.clampWhenFinished = false;// keep feeding the last frame? + + this.zeroSlopeAtStart = true;// for smooth interpolation w/o separate + this.zeroSlopeAtEnd = true;// clips for start, loop and end + + }; + + // State & Scheduling + + AnimationAction.prototype.play = function play () { + + this._mixer._activateAction( this ); + + return this; + + }; + + AnimationAction.prototype.stop = function stop () { + + this._mixer._deactivateAction( this ); + + return this.reset(); + + }; + + AnimationAction.prototype.reset = function reset () { + + this.paused = false; + this.enabled = true; + + this.time = 0; // restart clip + this._loopCount = - 1;// forget previous loops + this._startTime = null;// forget scheduling + + return this.stopFading().stopWarping(); + + }; + + AnimationAction.prototype.isRunning = function isRunning () { + + return this.enabled && ! this.paused && this.timeScale !== 0 && + this._startTime === null && this._mixer._isActiveAction( this ); + + }; + + // return true when play has been called + AnimationAction.prototype.isScheduled = function isScheduled () { + + return this._mixer._isActiveAction( this ); + + }; + + AnimationAction.prototype.startAt = function startAt ( time ) { + + this._startTime = time; + + return this; + + }; + + AnimationAction.prototype.setLoop = function setLoop ( mode, repetitions ) { + + this.loop = mode; + this.repetitions = repetitions; + + return this; + + }; + + // Weight + + // set the weight stopping any scheduled fading + // although .enabled = false yields an effective weight of zero, this + // method does *not* change .enabled, because it would be confusing + AnimationAction.prototype.setEffectiveWeight = function setEffectiveWeight ( weight ) { + + this.weight = weight; + + // note: same logic as when updated at runtime + this._effectiveWeight = this.enabled ? weight : 0; + + return this.stopFading(); + + }; + + // return the weight considering fading and .enabled + AnimationAction.prototype.getEffectiveWeight = function getEffectiveWeight () { + + return this._effectiveWeight; + + }; + + AnimationAction.prototype.fadeIn = function fadeIn ( duration ) { + + return this._scheduleFading( duration, 0, 1 ); + + }; + + AnimationAction.prototype.fadeOut = function fadeOut ( duration ) { + + return this._scheduleFading( duration, 1, 0 ); + + }; + + AnimationAction.prototype.crossFadeFrom = function crossFadeFrom ( fadeOutAction, duration, warp ) { + + fadeOutAction.fadeOut( duration ); + this.fadeIn( duration ); + + if ( warp ) { + + var fadeInDuration = this._clip.duration, + fadeOutDuration = fadeOutAction._clip.duration, + + startEndRatio = fadeOutDuration / fadeInDuration, + endStartRatio = fadeInDuration / fadeOutDuration; + + fadeOutAction.warp( 1.0, startEndRatio, duration ); + this.warp( endStartRatio, 1.0, duration ); + + } + + return this; + + }; + + AnimationAction.prototype.crossFadeTo = function crossFadeTo ( fadeInAction, duration, warp ) { + + return fadeInAction.crossFadeFrom( this, duration, warp ); + + }; + + AnimationAction.prototype.stopFading = function stopFading () { + + var weightInterpolant = this._weightInterpolant; + + if ( weightInterpolant !== null ) { + + this._weightInterpolant = null; + this._mixer._takeBackControlInterpolant( weightInterpolant ); + + } + + return this; + + }; + + // Time Scale Control + + // set the time scale stopping any scheduled warping + // although .paused = true yields an effective time scale of zero, this + // method does *not* change .paused, because it would be confusing + AnimationAction.prototype.setEffectiveTimeScale = function setEffectiveTimeScale ( timeScale ) { + + this.timeScale = timeScale; + this._effectiveTimeScale = this.paused ? 0 : timeScale; + + return this.stopWarping(); + + }; + + // return the time scale considering warping and .paused + AnimationAction.prototype.getEffectiveTimeScale = function getEffectiveTimeScale () { + + return this._effectiveTimeScale; + + }; + + AnimationAction.prototype.setDuration = function setDuration ( duration ) { + + this.timeScale = this._clip.duration / duration; + + return this.stopWarping(); + + }; + + AnimationAction.prototype.syncWith = function syncWith ( action ) { + + this.time = action.time; + this.timeScale = action.timeScale; + + return this.stopWarping(); + + }; + + AnimationAction.prototype.halt = function halt ( duration ) { + + return this.warp( this._effectiveTimeScale, 0, duration ); + + }; + + AnimationAction.prototype.warp = function warp ( startTimeScale, endTimeScale, duration ) { + + var mixer = this._mixer, + now = mixer.time, + timeScale = this.timeScale; + + var interpolant = this._timeScaleInterpolant; + + if ( interpolant === null ) { + + interpolant = mixer._lendControlInterpolant(); + this._timeScaleInterpolant = interpolant; + + } + + var times = interpolant.parameterPositions, + values = interpolant.sampleValues; + + times[ 0 ] = now; + times[ 1 ] = now + duration; + + values[ 0 ] = startTimeScale / timeScale; + values[ 1 ] = endTimeScale / timeScale; + + return this; + + }; + + AnimationAction.prototype.stopWarping = function stopWarping () { + + var timeScaleInterpolant = this._timeScaleInterpolant; + + if ( timeScaleInterpolant !== null ) { + + this._timeScaleInterpolant = null; + this._mixer._takeBackControlInterpolant( timeScaleInterpolant ); + + } + + return this; + + }; + + // Object Accessors + + AnimationAction.prototype.getMixer = function getMixer () { + + return this._mixer; + + }; + + AnimationAction.prototype.getClip = function getClip () { + + return this._clip; + + }; + + AnimationAction.prototype.getRoot = function getRoot () { + + return this._localRoot || this._mixer._root; + + }; + + // Interna + + AnimationAction.prototype._update = function _update ( time, deltaTime, timeDirection, accuIndex ) { + + // called by the mixer + + if ( ! this.enabled ) { + + // call ._updateWeight() to update ._effectiveWeight + + this._updateWeight( time ); + return; + + } + + var startTime = this._startTime; + + if ( startTime !== null ) { + + // check for scheduled start of action + + var timeRunning = ( time - startTime ) * timeDirection; + if ( timeRunning < 0 || timeDirection === 0 ) { + + return; // yet to come / don't decide when delta = 0 + + } + + // start + + this._startTime = null; // unschedule + deltaTime = timeDirection * timeRunning; + + } + + // apply time scale and advance time + + deltaTime *= this._updateTimeScale( time ); + var clipTime = this._updateTime( deltaTime ); + + // note: _updateTime may disable the action resulting in + // an effective weight of 0 + + var weight = this._updateWeight( time ); + + if ( weight > 0 ) { + + var interpolants = this._interpolants; + var propertyMixers = this._propertyBindings; + + switch ( this.blendMode ) { + + case AdditiveAnimationBlendMode: + + for ( var j = 0, m = interpolants.length; j !== m; ++ j ) { + + interpolants[ j ].evaluate( clipTime ); + propertyMixers[ j ].accumulateAdditive( weight ); + + } + + break; + + case NormalAnimationBlendMode: + default: + + for ( var j$1 = 0, m$1 = interpolants.length; j$1 !== m$1; ++ j$1 ) { + + interpolants[ j$1 ].evaluate( clipTime ); + propertyMixers[ j$1 ].accumulate( accuIndex, weight ); + + } + + } + + } + + }; + + AnimationAction.prototype._updateWeight = function _updateWeight ( time ) { + + var weight = 0; + + if ( this.enabled ) { + + weight = this.weight; + var interpolant = this._weightInterpolant; + + if ( interpolant !== null ) { + + var interpolantValue = interpolant.evaluate( time )[ 0 ]; + + weight *= interpolantValue; + + if ( time > interpolant.parameterPositions[ 1 ] ) { + + this.stopFading(); + + if ( interpolantValue === 0 ) { + + // faded out, disable + this.enabled = false; + + } + + } + + } + + } + + this._effectiveWeight = weight; + return weight; + + }; + + AnimationAction.prototype._updateTimeScale = function _updateTimeScale ( time ) { + + var timeScale = 0; + + if ( ! this.paused ) { + + timeScale = this.timeScale; + + var interpolant = this._timeScaleInterpolant; + + if ( interpolant !== null ) { + + var interpolantValue = interpolant.evaluate( time )[ 0 ]; + + timeScale *= interpolantValue; + + if ( time > interpolant.parameterPositions[ 1 ] ) { + + this.stopWarping(); + + if ( timeScale === 0 ) { + + // motion has halted, pause + this.paused = true; + + } else { + + // warp done - apply final time scale + this.timeScale = timeScale; + + } + + } + + } + + } + + this._effectiveTimeScale = timeScale; + return timeScale; + + }; + + AnimationAction.prototype._updateTime = function _updateTime ( deltaTime ) { + + var duration = this._clip.duration; + var loop = this.loop; + + var time = this.time + deltaTime; + var loopCount = this._loopCount; + + var pingPong = ( loop === LoopPingPong ); + + if ( deltaTime === 0 ) { + + if ( loopCount === - 1 ) { return time; } + + return ( pingPong && ( loopCount & 1 ) === 1 ) ? duration - time : time; + + } + + if ( loop === LoopOnce ) { + + if ( loopCount === - 1 ) { + + // just started + + this._loopCount = 0; + this._setEndings( true, true, false ); + + } + + handle_stop: { + + if ( time >= duration ) { + + time = duration; + + } else if ( time < 0 ) { + + time = 0; + + } else { + + this.time = time; + + break handle_stop; + + } + + if ( this.clampWhenFinished ) { this.paused = true; } + else { this.enabled = false; } + + this.time = time; + + this._mixer.dispatchEvent( { + type: 'finished', action: this, + direction: deltaTime < 0 ? - 1 : 1 + } ); + + } + + } else { // repetitive Repeat or PingPong + + if ( loopCount === - 1 ) { + + // just started + + if ( deltaTime >= 0 ) { + + loopCount = 0; + + this._setEndings( true, this.repetitions === 0, pingPong ); + + } else { + + // when looping in reverse direction, the initial + // transition through zero counts as a repetition, + // so leave loopCount at -1 + + this._setEndings( this.repetitions === 0, true, pingPong ); + + } + + } + + if ( time >= duration || time < 0 ) { + + // wrap around + + var loopDelta = Math.floor( time / duration ); // signed + time -= duration * loopDelta; + + loopCount += Math.abs( loopDelta ); + + var pending = this.repetitions - loopCount; + + if ( pending <= 0 ) { + + // have to stop (switch state, clamp time, fire event) + + if ( this.clampWhenFinished ) { this.paused = true; } + else { this.enabled = false; } + + time = deltaTime > 0 ? duration : 0; + + this.time = time; + + this._mixer.dispatchEvent( { + type: 'finished', action: this, + direction: deltaTime > 0 ? 1 : - 1 + } ); + + } else { + + // keep running + + if ( pending === 1 ) { + + // entering the last round + + var atStart = deltaTime < 0; + this._setEndings( atStart, ! atStart, pingPong ); + + } else { + + this._setEndings( false, false, pingPong ); + + } + + this._loopCount = loopCount; + + this.time = time; + + this._mixer.dispatchEvent( { + type: 'loop', action: this, loopDelta: loopDelta + } ); + + } + + } else { + + this.time = time; + + } + + if ( pingPong && ( loopCount & 1 ) === 1 ) { + + // invert time for the "pong round" + + return duration - time; + + } + + } + + return time; + + }; + + AnimationAction.prototype._setEndings = function _setEndings ( atStart, atEnd, pingPong ) { + + var settings = this._interpolantSettings; + + if ( pingPong ) { + + settings.endingStart = ZeroSlopeEnding; + settings.endingEnd = ZeroSlopeEnding; + + } else { + + // assuming for LoopOnce atStart == atEnd == true + + if ( atStart ) { + + settings.endingStart = this.zeroSlopeAtStart ? ZeroSlopeEnding : ZeroCurvatureEnding; + + } else { + + settings.endingStart = WrapAroundEnding; + + } + + if ( atEnd ) { + + settings.endingEnd = this.zeroSlopeAtEnd ? ZeroSlopeEnding : ZeroCurvatureEnding; + + } else { + + settings.endingEnd = WrapAroundEnding; + + } + + } + + }; + + AnimationAction.prototype._scheduleFading = function _scheduleFading ( duration, weightNow, weightThen ) { + + var mixer = this._mixer, now = mixer.time; + var interpolant = this._weightInterpolant; + + if ( interpolant === null ) { + + interpolant = mixer._lendControlInterpolant(); + this._weightInterpolant = interpolant; + + } + + var times = interpolant.parameterPositions, + values = interpolant.sampleValues; + + times[ 0 ] = now; + values[ 0 ] = weightNow; + times[ 1 ] = now + duration; + values[ 1 ] = weightThen; + + return this; + + }; + + function AnimationMixer( root ) { + + this._root = root; + this._initMemoryManager(); + this._accuIndex = 0; + + this.time = 0; + + this.timeScale = 1.0; + + } + + AnimationMixer.prototype = Object.assign( Object.create( EventDispatcher.prototype ), { + + constructor: AnimationMixer, + + _bindAction: function ( action, prototypeAction ) { + + var root = action._localRoot || this._root, + tracks = action._clip.tracks, + nTracks = tracks.length, + bindings = action._propertyBindings, + interpolants = action._interpolants, + rootUuid = root.uuid, + bindingsByRoot = this._bindingsByRootAndName; + + var bindingsByName = bindingsByRoot[ rootUuid ]; + + if ( bindingsByName === undefined ) { + + bindingsByName = {}; + bindingsByRoot[ rootUuid ] = bindingsByName; + + } + + for ( var i = 0; i !== nTracks; ++ i ) { + + var track = tracks[ i ], + trackName = track.name; + + var binding = bindingsByName[ trackName ]; + + if ( binding !== undefined ) { + + bindings[ i ] = binding; + + } else { + + binding = bindings[ i ]; + + if ( binding !== undefined ) { + + // existing binding, make sure the cache knows + + if ( binding._cacheIndex === null ) { + + ++ binding.referenceCount; + this._addInactiveBinding( binding, rootUuid, trackName ); + + } + + continue; + + } + + var path = prototypeAction && prototypeAction. + _propertyBindings[ i ].binding.parsedPath; + + binding = new PropertyMixer( + PropertyBinding.create( root, trackName, path ), + track.ValueTypeName, track.getValueSize() ); + + ++ binding.referenceCount; + this._addInactiveBinding( binding, rootUuid, trackName ); + + bindings[ i ] = binding; + + } + + interpolants[ i ].resultBuffer = binding.buffer; + + } + + }, + + _activateAction: function ( action ) { + + if ( ! this._isActiveAction( action ) ) { + + if ( action._cacheIndex === null ) { + + // this action has been forgotten by the cache, but the user + // appears to be still using it -> rebind + + var rootUuid = ( action._localRoot || this._root ).uuid, + clipUuid = action._clip.uuid, + actionsForClip = this._actionsByClip[ clipUuid ]; + + this._bindAction( action, + actionsForClip && actionsForClip.knownActions[ 0 ] ); + + this._addInactiveAction( action, clipUuid, rootUuid ); + + } + + var bindings = action._propertyBindings; + + // increment reference counts / sort out state + for ( var i = 0, n = bindings.length; i !== n; ++ i ) { + + var binding = bindings[ i ]; + + if ( binding.useCount ++ === 0 ) { + + this._lendBinding( binding ); + binding.saveOriginalState(); + + } + + } + + this._lendAction( action ); + + } + + }, + + _deactivateAction: function ( action ) { + + if ( this._isActiveAction( action ) ) { + + var bindings = action._propertyBindings; + + // decrement reference counts / sort out state + for ( var i = 0, n = bindings.length; i !== n; ++ i ) { + + var binding = bindings[ i ]; + + if ( -- binding.useCount === 0 ) { + + binding.restoreOriginalState(); + this._takeBackBinding( binding ); + + } + + } + + this._takeBackAction( action ); + + } + + }, + + // Memory manager + + _initMemoryManager: function () { + + this._actions = []; // 'nActiveActions' followed by inactive ones + this._nActiveActions = 0; + + this._actionsByClip = {}; + // inside: + // { + // knownActions: Array< AnimationAction > - used as prototypes + // actionByRoot: AnimationAction - lookup + // } + + + this._bindings = []; // 'nActiveBindings' followed by inactive ones + this._nActiveBindings = 0; + + this._bindingsByRootAndName = {}; // inside: Map< name, PropertyMixer > + + + this._controlInterpolants = []; // same game as above + this._nActiveControlInterpolants = 0; + + var scope = this; + + this.stats = { + + actions: { + get total() { + + return scope._actions.length; + + }, + get inUse() { + + return scope._nActiveActions; + + } + }, + bindings: { + get total() { + + return scope._bindings.length; + + }, + get inUse() { + + return scope._nActiveBindings; + + } + }, + controlInterpolants: { + get total() { + + return scope._controlInterpolants.length; + + }, + get inUse() { + + return scope._nActiveControlInterpolants; + + } + } + + }; + + }, + + // Memory management for AnimationAction objects + + _isActiveAction: function ( action ) { + + var index = action._cacheIndex; + return index !== null && index < this._nActiveActions; + + }, + + _addInactiveAction: function ( action, clipUuid, rootUuid ) { + + var actions = this._actions, + actionsByClip = this._actionsByClip; + + var actionsForClip = actionsByClip[ clipUuid ]; + + if ( actionsForClip === undefined ) { + + actionsForClip = { + + knownActions: [ action ], + actionByRoot: {} + + }; + + action._byClipCacheIndex = 0; + + actionsByClip[ clipUuid ] = actionsForClip; + + } else { + + var knownActions = actionsForClip.knownActions; + + action._byClipCacheIndex = knownActions.length; + knownActions.push( action ); + + } + + action._cacheIndex = actions.length; + actions.push( action ); + + actionsForClip.actionByRoot[ rootUuid ] = action; + + }, + + _removeInactiveAction: function ( action ) { + + var actions = this._actions, + lastInactiveAction = actions[ actions.length - 1 ], + cacheIndex = action._cacheIndex; + + lastInactiveAction._cacheIndex = cacheIndex; + actions[ cacheIndex ] = lastInactiveAction; + actions.pop(); + + action._cacheIndex = null; + + + var clipUuid = action._clip.uuid, + actionsByClip = this._actionsByClip, + actionsForClip = actionsByClip[ clipUuid ], + knownActionsForClip = actionsForClip.knownActions, + + lastKnownAction = + knownActionsForClip[ knownActionsForClip.length - 1 ], + + byClipCacheIndex = action._byClipCacheIndex; + + lastKnownAction._byClipCacheIndex = byClipCacheIndex; + knownActionsForClip[ byClipCacheIndex ] = lastKnownAction; + knownActionsForClip.pop(); + + action._byClipCacheIndex = null; + + + var actionByRoot = actionsForClip.actionByRoot, + rootUuid = ( action._localRoot || this._root ).uuid; + + delete actionByRoot[ rootUuid ]; + + if ( knownActionsForClip.length === 0 ) { + + delete actionsByClip[ clipUuid ]; + + } + + this._removeInactiveBindingsForAction( action ); + + }, + + _removeInactiveBindingsForAction: function ( action ) { + + var bindings = action._propertyBindings; + + for ( var i = 0, n = bindings.length; i !== n; ++ i ) { + + var binding = bindings[ i ]; + + if ( -- binding.referenceCount === 0 ) { + + this._removeInactiveBinding( binding ); + + } + + } + + }, + + _lendAction: function ( action ) { + + // [ active actions | inactive actions ] + // [ active actions >| inactive actions ] + // s a + // <-swap-> + // a s + + var actions = this._actions, + prevIndex = action._cacheIndex, + + lastActiveIndex = this._nActiveActions ++, + + firstInactiveAction = actions[ lastActiveIndex ]; + + action._cacheIndex = lastActiveIndex; + actions[ lastActiveIndex ] = action; + + firstInactiveAction._cacheIndex = prevIndex; + actions[ prevIndex ] = firstInactiveAction; + + }, + + _takeBackAction: function ( action ) { + + // [ active actions | inactive actions ] + // [ active actions |< inactive actions ] + // a s + // <-swap-> + // s a + + var actions = this._actions, + prevIndex = action._cacheIndex, + + firstInactiveIndex = -- this._nActiveActions, + + lastActiveAction = actions[ firstInactiveIndex ]; + + action._cacheIndex = firstInactiveIndex; + actions[ firstInactiveIndex ] = action; + + lastActiveAction._cacheIndex = prevIndex; + actions[ prevIndex ] = lastActiveAction; + + }, + + // Memory management for PropertyMixer objects + + _addInactiveBinding: function ( binding, rootUuid, trackName ) { + + var bindingsByRoot = this._bindingsByRootAndName, + bindings = this._bindings; + + var bindingByName = bindingsByRoot[ rootUuid ]; + + if ( bindingByName === undefined ) { + + bindingByName = {}; + bindingsByRoot[ rootUuid ] = bindingByName; + + } + + bindingByName[ trackName ] = binding; + + binding._cacheIndex = bindings.length; + bindings.push( binding ); + + }, + + _removeInactiveBinding: function ( binding ) { + + var bindings = this._bindings, + propBinding = binding.binding, + rootUuid = propBinding.rootNode.uuid, + trackName = propBinding.path, + bindingsByRoot = this._bindingsByRootAndName, + bindingByName = bindingsByRoot[ rootUuid ], + + lastInactiveBinding = bindings[ bindings.length - 1 ], + cacheIndex = binding._cacheIndex; + + lastInactiveBinding._cacheIndex = cacheIndex; + bindings[ cacheIndex ] = lastInactiveBinding; + bindings.pop(); + + delete bindingByName[ trackName ]; + + if ( Object.keys( bindingByName ).length === 0 ) { + + delete bindingsByRoot[ rootUuid ]; + + } + + }, + + _lendBinding: function ( binding ) { + + var bindings = this._bindings, + prevIndex = binding._cacheIndex, + + lastActiveIndex = this._nActiveBindings ++, + + firstInactiveBinding = bindings[ lastActiveIndex ]; + + binding._cacheIndex = lastActiveIndex; + bindings[ lastActiveIndex ] = binding; + + firstInactiveBinding._cacheIndex = prevIndex; + bindings[ prevIndex ] = firstInactiveBinding; + + }, + + _takeBackBinding: function ( binding ) { + + var bindings = this._bindings, + prevIndex = binding._cacheIndex, + + firstInactiveIndex = -- this._nActiveBindings, + + lastActiveBinding = bindings[ firstInactiveIndex ]; + + binding._cacheIndex = firstInactiveIndex; + bindings[ firstInactiveIndex ] = binding; + + lastActiveBinding._cacheIndex = prevIndex; + bindings[ prevIndex ] = lastActiveBinding; + + }, + + + // Memory management of Interpolants for weight and time scale + + _lendControlInterpolant: function () { + + var interpolants = this._controlInterpolants, + lastActiveIndex = this._nActiveControlInterpolants ++; + + var interpolant = interpolants[ lastActiveIndex ]; + + if ( interpolant === undefined ) { + + interpolant = new LinearInterpolant( + new Float32Array( 2 ), new Float32Array( 2 ), + 1, this._controlInterpolantsResultBuffer ); + + interpolant.__cacheIndex = lastActiveIndex; + interpolants[ lastActiveIndex ] = interpolant; + + } + + return interpolant; + + }, + + _takeBackControlInterpolant: function ( interpolant ) { + + var interpolants = this._controlInterpolants, + prevIndex = interpolant.__cacheIndex, + + firstInactiveIndex = -- this._nActiveControlInterpolants, + + lastActiveInterpolant = interpolants[ firstInactiveIndex ]; + + interpolant.__cacheIndex = firstInactiveIndex; + interpolants[ firstInactiveIndex ] = interpolant; + + lastActiveInterpolant.__cacheIndex = prevIndex; + interpolants[ prevIndex ] = lastActiveInterpolant; + + }, + + _controlInterpolantsResultBuffer: new Float32Array( 1 ), + + // return an action for a clip optionally using a custom root target + // object (this method allocates a lot of dynamic memory in case a + // previously unknown clip/root combination is specified) + clipAction: function ( clip, optionalRoot, blendMode ) { + + var root = optionalRoot || this._root, + rootUuid = root.uuid; + + var clipObject = typeof clip === 'string' ? AnimationClip.findByName( root, clip ) : clip; + + var clipUuid = clipObject !== null ? clipObject.uuid : clip; + + var actionsForClip = this._actionsByClip[ clipUuid ]; + var prototypeAction = null; + + if ( blendMode === undefined ) { + + if ( clipObject !== null ) { + + blendMode = clipObject.blendMode; + + } else { + + blendMode = NormalAnimationBlendMode; + + } + + } + + if ( actionsForClip !== undefined ) { + + var existingAction = actionsForClip.actionByRoot[ rootUuid ]; + + if ( existingAction !== undefined && existingAction.blendMode === blendMode ) { + + return existingAction; + + } + + // we know the clip, so we don't have to parse all + // the bindings again but can just copy + prototypeAction = actionsForClip.knownActions[ 0 ]; + + // also, take the clip from the prototype action + if ( clipObject === null ) + { clipObject = prototypeAction._clip; } + + } + + // clip must be known when specified via string + if ( clipObject === null ) { return null; } + + // allocate all resources required to run it + var newAction = new AnimationAction( this, clipObject, optionalRoot, blendMode ); + + this._bindAction( newAction, prototypeAction ); + + // and make the action known to the memory manager + this._addInactiveAction( newAction, clipUuid, rootUuid ); + + return newAction; + + }, + + // get an existing action + existingAction: function ( clip, optionalRoot ) { + + var root = optionalRoot || this._root, + rootUuid = root.uuid, + + clipObject = typeof clip === 'string' ? + AnimationClip.findByName( root, clip ) : clip, + + clipUuid = clipObject ? clipObject.uuid : clip, + + actionsForClip = this._actionsByClip[ clipUuid ]; + + if ( actionsForClip !== undefined ) { + + return actionsForClip.actionByRoot[ rootUuid ] || null; + + } + + return null; + + }, + + // deactivates all previously scheduled actions + stopAllAction: function () { + + var actions = this._actions, + nActions = this._nActiveActions; + + for ( var i = nActions - 1; i >= 0; -- i ) { + + actions[ i ].stop(); + + } + + return this; + + }, + + // advance the time and update apply the animation + update: function ( deltaTime ) { + + deltaTime *= this.timeScale; + + var actions = this._actions, + nActions = this._nActiveActions, + + time = this.time += deltaTime, + timeDirection = Math.sign( deltaTime ), + + accuIndex = this._accuIndex ^= 1; + + // run active actions + + for ( var i = 0; i !== nActions; ++ i ) { + + var action = actions[ i ]; + + action._update( time, deltaTime, timeDirection, accuIndex ); + + } + + // update scene graph + + var bindings = this._bindings, + nBindings = this._nActiveBindings; + + for ( var i$1 = 0; i$1 !== nBindings; ++ i$1 ) { + + bindings[ i$1 ].apply( accuIndex ); + + } + + return this; + + }, + + // Allows you to seek to a specific time in an animation. + setTime: function ( timeInSeconds ) { + + this.time = 0; // Zero out time attribute for AnimationMixer object; + for ( var i = 0; i < this._actions.length; i ++ ) { + + this._actions[ i ].time = 0; // Zero out time attribute for all associated AnimationAction objects. + + } + + return this.update( timeInSeconds ); // Update used to set exact time. Returns "this" AnimationMixer object. + + }, + + // return this mixer's root target object + getRoot: function () { + + return this._root; + + }, + + // free all resources specific to a particular clip + uncacheClip: function ( clip ) { + + var actions = this._actions, + clipUuid = clip.uuid, + actionsByClip = this._actionsByClip, + actionsForClip = actionsByClip[ clipUuid ]; + + if ( actionsForClip !== undefined ) { + + // note: just calling _removeInactiveAction would mess up the + // iteration state and also require updating the state we can + // just throw away + + var actionsToRemove = actionsForClip.knownActions; + + for ( var i = 0, n = actionsToRemove.length; i !== n; ++ i ) { + + var action = actionsToRemove[ i ]; + + this._deactivateAction( action ); + + var cacheIndex = action._cacheIndex, + lastInactiveAction = actions[ actions.length - 1 ]; + + action._cacheIndex = null; + action._byClipCacheIndex = null; + + lastInactiveAction._cacheIndex = cacheIndex; + actions[ cacheIndex ] = lastInactiveAction; + actions.pop(); + + this._removeInactiveBindingsForAction( action ); + + } + + delete actionsByClip[ clipUuid ]; + + } + + }, + + // free all resources specific to a particular root target object + uncacheRoot: function ( root ) { + + var rootUuid = root.uuid, + actionsByClip = this._actionsByClip; + + for ( var clipUuid in actionsByClip ) { + + var actionByRoot = actionsByClip[ clipUuid ].actionByRoot, + action = actionByRoot[ rootUuid ]; + + if ( action !== undefined ) { + + this._deactivateAction( action ); + this._removeInactiveAction( action ); + + } + + } + + var bindingsByRoot = this._bindingsByRootAndName, + bindingByName = bindingsByRoot[ rootUuid ]; + + if ( bindingByName !== undefined ) { + + for ( var trackName in bindingByName ) { + + var binding = bindingByName[ trackName ]; + binding.restoreOriginalState(); + this._removeInactiveBinding( binding ); + + } + + } + + }, + + // remove a targeted clip from the cache + uncacheAction: function ( clip, optionalRoot ) { + + var action = this.existingAction( clip, optionalRoot ); + + if ( action !== null ) { + + this._deactivateAction( action ); + this._removeInactiveAction( action ); + + } + + } + + } ); + + var Uniform = function Uniform( value ) { + + if ( typeof value === 'string' ) { + + console.warn( 'THREE.Uniform: Type parameter is no longer needed.' ); + value = arguments[ 1 ]; + + } + + this.value = value; + + }; + + Uniform.prototype.clone = function clone () { + + return new Uniform( this.value.clone === undefined ? this.value : this.value.clone() ); + + }; + + function InstancedInterleavedBuffer( array, stride, meshPerAttribute ) { + + InterleavedBuffer.call( this, array, stride ); + + this.meshPerAttribute = meshPerAttribute || 1; + + } + + InstancedInterleavedBuffer.prototype = Object.assign( Object.create( InterleavedBuffer.prototype ), { + + constructor: InstancedInterleavedBuffer, + + isInstancedInterleavedBuffer: true, + + copy: function ( source ) { + + InterleavedBuffer.prototype.copy.call( this, source ); + + this.meshPerAttribute = source.meshPerAttribute; + + return this; + + }, + + clone: function ( data ) { + + var ib = InterleavedBuffer.prototype.clone.call( this, data ); + + ib.meshPerAttribute = this.meshPerAttribute; + + return ib; + + }, + + toJSON: function ( data ) { + + var json = InterleavedBuffer.prototype.toJSON.call( this, data ); + + json.isInstancedInterleavedBuffer = true; + json.meshPerAttribute = this.meshPerAttribute; + + return json; + + } + + } ); + + /** + * @author raub / https://github.com/raub + */ + + /** + * Element size is one of: + * 5126: 4 + * 5123: 2 + * 5122: 2 + * 5125: 4 + * 5124: 4 + * 5120: 1 + * 5121: 1 + */ + function GLBufferAttribute( buffer, type, itemSize, elementSize, count ) { + + this.buffer = buffer; + this.type = type; + this.itemSize = itemSize; + this.elementSize = elementSize; + this.count = count; + + this.version = 0; + + } + + Object.defineProperty( GLBufferAttribute.prototype, 'needsUpdate', { + + set: function ( value ) { + + if ( value === true ) { this.version ++; } + + } + + } ); + + Object.assign( GLBufferAttribute.prototype, { + + isGLBufferAttribute: true, + + setBuffer: function ( buffer ) { + + this.buffer = buffer; + + return this; + + }, + + setType: function ( type, elementSize ) { + + this.type = type; + this.elementSize = elementSize; + + return this; + + }, + + setItemSize: function ( itemSize ) { + + this.itemSize = itemSize; + + return this; + + }, + + setCount: function ( count ) { + + this.count = count; + + return this; + + }, + + } ); + + function Raycaster( origin, direction, near, far ) { + + this.ray = new Ray( origin, direction ); + // direction is assumed to be normalized (for accurate distance calculations) + + this.near = near || 0; + this.far = far || Infinity; + this.camera = null; + this.layers = new Layers(); + + this.params = { + Mesh: {}, + Line: { threshold: 1 }, + LOD: {}, + Points: { threshold: 1 }, + Sprite: {} + }; + + Object.defineProperties( this.params, { + PointCloud: { + get: function () { + + console.warn( 'THREE.Raycaster: params.PointCloud has been renamed to params.Points.' ); + return this.Points; + + } + } + } ); + + } + + function ascSort( a, b ) { + + return a.distance - b.distance; + + } + + function intersectObject( object, raycaster, intersects, recursive ) { + + if ( object.layers.test( raycaster.layers ) ) { + + object.raycast( raycaster, intersects ); + + } + + if ( recursive === true ) { + + var children = object.children; + + for ( var i = 0, l = children.length; i < l; i ++ ) { + + intersectObject( children[ i ], raycaster, intersects, true ); + + } + + } + + } + + Object.assign( Raycaster.prototype, { + + set: function ( origin, direction ) { + + // direction is assumed to be normalized (for accurate distance calculations) + + this.ray.set( origin, direction ); + + }, + + setFromCamera: function ( coords, camera ) { + + if ( ( camera && camera.isPerspectiveCamera ) ) { + + this.ray.origin.setFromMatrixPosition( camera.matrixWorld ); + this.ray.direction.set( coords.x, coords.y, 0.5 ).unproject( camera ).sub( this.ray.origin ).normalize(); + this.camera = camera; + + } else if ( ( camera && camera.isOrthographicCamera ) ) { + + this.ray.origin.set( coords.x, coords.y, ( camera.near + camera.far ) / ( camera.near - camera.far ) ).unproject( camera ); // set origin in plane of camera + this.ray.direction.set( 0, 0, - 1 ).transformDirection( camera.matrixWorld ); + this.camera = camera; + + } else { + + console.error( 'THREE.Raycaster: Unsupported camera type.' ); + + } + + }, + + intersectObject: function ( object, recursive, optionalTarget ) { + + var intersects = optionalTarget || []; + + intersectObject( object, this, intersects, recursive ); + + intersects.sort( ascSort ); + + return intersects; + + }, + + intersectObjects: function ( objects, recursive, optionalTarget ) { + + var intersects = optionalTarget || []; + + if ( Array.isArray( objects ) === false ) { + + console.warn( 'THREE.Raycaster.intersectObjects: objects is not an Array.' ); + return intersects; + + } + + for ( var i = 0, l = objects.length; i < l; i ++ ) { + + intersectObject( objects[ i ], this, intersects, recursive ); + + } + + intersects.sort( ascSort ); + + return intersects; + + } + + } ); + + /** + * Ref: https://en.wikipedia.org/wiki/Spherical_coordinate_system + * + * The polar angle (phi) is measured from the positive y-axis. The positive y-axis is up. + * The azimuthal angle (theta) is measured from the positive z-axis. + */ + + var Spherical = function Spherical( radius, phi, theta ) { + if ( radius === void 0 ) radius = 1; + if ( phi === void 0 ) phi = 0; + if ( theta === void 0 ) theta = 0; + + + this.radius = radius; + this.phi = phi; // polar angle + this.theta = theta; // azimuthal angle + + return this; + + }; + + Spherical.prototype.set = function set ( radius, phi, theta ) { + + this.radius = radius; + this.phi = phi; + this.theta = theta; + + return this; + + }; + + Spherical.prototype.clone = function clone () { + + return new this.constructor().copy( this ); + + }; + + Spherical.prototype.copy = function copy ( other ) { + + this.radius = other.radius; + this.phi = other.phi; + this.theta = other.theta; + + return this; + + }; + + // restrict phi to be betwee EPS and PI-EPS + Spherical.prototype.makeSafe = function makeSafe () { + + var EPS = 0.000001; + this.phi = Math.max( EPS, Math.min( Math.PI - EPS, this.phi ) ); + + return this; + + }; + + Spherical.prototype.setFromVector3 = function setFromVector3 ( v ) { + + return this.setFromCartesianCoords( v.x, v.y, v.z ); + + }; + + Spherical.prototype.setFromCartesianCoords = function setFromCartesianCoords ( x, y, z ) { + + this.radius = Math.sqrt( x * x + y * y + z * z ); + + if ( this.radius === 0 ) { + + this.theta = 0; + this.phi = 0; + + } else { + + this.theta = Math.atan2( x, z ); + this.phi = Math.acos( MathUtils.clamp( y / this.radius, - 1, 1 ) ); + + } + + return this; + + }; + + /** + * Ref: https://en.wikipedia.org/wiki/Cylindrical_coordinate_system + */ + + var Cylindrical = function Cylindrical( radius, theta, y ) { + + this.radius = ( radius !== undefined ) ? radius : 1.0; // distance from the origin to a point in the x-z plane + this.theta = ( theta !== undefined ) ? theta : 0; // counterclockwise angle in the x-z plane measured in radians from the positive z-axis + this.y = ( y !== undefined ) ? y : 0; // height above the x-z plane + + return this; + + }; + + Cylindrical.prototype.set = function set ( radius, theta, y ) { + + this.radius = radius; + this.theta = theta; + this.y = y; + + return this; + + }; + + Cylindrical.prototype.clone = function clone () { + + return new this.constructor().copy( this ); + + }; + + Cylindrical.prototype.copy = function copy ( other ) { + + this.radius = other.radius; + this.theta = other.theta; + this.y = other.y; + + return this; + + }; + + Cylindrical.prototype.setFromVector3 = function setFromVector3 ( v ) { + + return this.setFromCartesianCoords( v.x, v.y, v.z ); + + }; + + Cylindrical.prototype.setFromCartesianCoords = function setFromCartesianCoords ( x, y, z ) { + + this.radius = Math.sqrt( x * x + z * z ); + this.theta = Math.atan2( x, z ); + this.y = y; + + return this; + + }; + + var _vector$7 = new Vector2(); + + var Box2 = function Box2( min, max ) { + + Object.defineProperty( this, 'isBox2', { value: true } ); + + this.min = ( min !== undefined ) ? min : new Vector2( + Infinity, + Infinity ); + this.max = ( max !== undefined ) ? max : new Vector2( - Infinity, - Infinity ); + + }; + + Box2.prototype.set = function set ( min, max ) { + + this.min.copy( min ); + this.max.copy( max ); + + return this; + + }; + + Box2.prototype.setFromPoints = function setFromPoints ( points ) { + + this.makeEmpty(); + + for ( var i = 0, il = points.length; i < il; i ++ ) { + + this.expandByPoint( points[ i ] ); + + } + + return this; + + }; + + Box2.prototype.setFromCenterAndSize = function setFromCenterAndSize ( center, size ) { + + var halfSize = _vector$7.copy( size ).multiplyScalar( 0.5 ); + this.min.copy( center ).sub( halfSize ); + this.max.copy( center ).add( halfSize ); + + return this; + + }; + + Box2.prototype.clone = function clone () { + + return new this.constructor().copy( this ); + + }; + + Box2.prototype.copy = function copy ( box ) { + + this.min.copy( box.min ); + this.max.copy( box.max ); + + return this; + + }; + + Box2.prototype.makeEmpty = function makeEmpty () { + + this.min.x = this.min.y = + Infinity; + this.max.x = this.max.y = - Infinity; + + return this; + + }; + + Box2.prototype.isEmpty = function isEmpty () { + + // this is a more robust check for empty than ( volume <= 0 ) because volume can get positive with two negative axes + + return ( this.max.x < this.min.x ) || ( this.max.y < this.min.y ); + + }; + + Box2.prototype.getCenter = function getCenter ( target ) { + + if ( target === undefined ) { + + console.warn( 'THREE.Box2: .getCenter() target is now required' ); + target = new Vector2(); + + } + + return this.isEmpty() ? target.set( 0, 0 ) : target.addVectors( this.min, this.max ).multiplyScalar( 0.5 ); + + }; + + Box2.prototype.getSize = function getSize ( target ) { + + if ( target === undefined ) { + + console.warn( 'THREE.Box2: .getSize() target is now required' ); + target = new Vector2(); + + } + + return this.isEmpty() ? target.set( 0, 0 ) : target.subVectors( this.max, this.min ); + + }; + + Box2.prototype.expandByPoint = function expandByPoint ( point ) { + + this.min.min( point ); + this.max.max( point ); + + return this; + + }; + + Box2.prototype.expandByVector = function expandByVector ( vector ) { + + this.min.sub( vector ); + this.max.add( vector ); + + return this; + + }; + + Box2.prototype.expandByScalar = function expandByScalar ( scalar ) { + + this.min.addScalar( - scalar ); + this.max.addScalar( scalar ); + + return this; + + }; + + Box2.prototype.containsPoint = function containsPoint ( point ) { + + return point.x < this.min.x || point.x > this.max.x || + point.y < this.min.y || point.y > this.max.y ? false : true; + + }; + + Box2.prototype.containsBox = function containsBox ( box ) { + + return this.min.x <= box.min.x && box.max.x <= this.max.x && + this.min.y <= box.min.y && box.max.y <= this.max.y; + + }; + + Box2.prototype.getParameter = function getParameter ( point, target ) { + + // This can potentially have a divide by zero if the box + // has a size dimension of 0. + + if ( target === undefined ) { + + console.warn( 'THREE.Box2: .getParameter() target is now required' ); + target = new Vector2(); + + } + + return target.set( + ( point.x - this.min.x ) / ( this.max.x - this.min.x ), + ( point.y - this.min.y ) / ( this.max.y - this.min.y ) + ); + + }; + + Box2.prototype.intersectsBox = function intersectsBox ( box ) { + + // using 4 splitting planes to rule out intersections + + return box.max.x < this.min.x || box.min.x > this.max.x || + box.max.y < this.min.y || box.min.y > this.max.y ? false : true; + + }; + + Box2.prototype.clampPoint = function clampPoint ( point, target ) { + + if ( target === undefined ) { + + console.warn( 'THREE.Box2: .clampPoint() target is now required' ); + target = new Vector2(); + + } + + return target.copy( point ).clamp( this.min, this.max ); + + }; + + Box2.prototype.distanceToPoint = function distanceToPoint ( point ) { + + var clampedPoint = _vector$7.copy( point ).clamp( this.min, this.max ); + return clampedPoint.sub( point ).length(); + + }; + + Box2.prototype.intersect = function intersect ( box ) { + + this.min.max( box.min ); + this.max.min( box.max ); + + return this; + + }; + + Box2.prototype.union = function union ( box ) { + + this.min.min( box.min ); + this.max.max( box.max ); + + return this; + + }; + + Box2.prototype.translate = function translate ( offset ) { + + this.min.add( offset ); + this.max.add( offset ); + + return this; + + }; + + Box2.prototype.equals = function equals ( box ) { + + return box.min.equals( this.min ) && box.max.equals( this.max ); + + }; + + var _startP = new Vector3(); + var _startEnd = new Vector3(); + + var Line3 = function Line3( start, end ) { + + this.start = ( start !== undefined ) ? start : new Vector3(); + this.end = ( end !== undefined ) ? end : new Vector3(); + + }; + + Line3.prototype.set = function set ( start, end ) { + + this.start.copy( start ); + this.end.copy( end ); + + return this; + + }; + + Line3.prototype.clone = function clone () { + + return new this.constructor().copy( this ); + + }; + + Line3.prototype.copy = function copy ( line ) { + + this.start.copy( line.start ); + this.end.copy( line.end ); + + return this; + + }; + + Line3.prototype.getCenter = function getCenter ( target ) { + + if ( target === undefined ) { + + console.warn( 'THREE.Line3: .getCenter() target is now required' ); + target = new Vector3(); + + } + + return target.addVectors( this.start, this.end ).multiplyScalar( 0.5 ); + + }; + + Line3.prototype.delta = function delta ( target ) { + + if ( target === undefined ) { + + console.warn( 'THREE.Line3: .delta() target is now required' ); + target = new Vector3(); + + } + + return target.subVectors( this.end, this.start ); + + }; + + Line3.prototype.distanceSq = function distanceSq () { + + return this.start.distanceToSquared( this.end ); + + }; + + Line3.prototype.distance = function distance () { + + return this.start.distanceTo( this.end ); + + }; + + Line3.prototype.at = function at ( t, target ) { + + if ( target === undefined ) { + + console.warn( 'THREE.Line3: .at() target is now required' ); + target = new Vector3(); + + } + + return this.delta( target ).multiplyScalar( t ).add( this.start ); + + }; + + Line3.prototype.closestPointToPointParameter = function closestPointToPointParameter ( point, clampToLine ) { + + _startP.subVectors( point, this.start ); + _startEnd.subVectors( this.end, this.start ); + + var startEnd2 = _startEnd.dot( _startEnd ); + var startEnd_startP = _startEnd.dot( _startP ); + + var t = startEnd_startP / startEnd2; + + if ( clampToLine ) { + + t = MathUtils.clamp( t, 0, 1 ); + + } + + return t; + + }; + + Line3.prototype.closestPointToPoint = function closestPointToPoint ( point, clampToLine, target ) { + + var t = this.closestPointToPointParameter( point, clampToLine ); + + if ( target === undefined ) { + + console.warn( 'THREE.Line3: .closestPointToPoint() target is now required' ); + target = new Vector3(); + + } + + return this.delta( target ).multiplyScalar( t ).add( this.start ); + + }; + + Line3.prototype.applyMatrix4 = function applyMatrix4 ( matrix ) { + + this.start.applyMatrix4( matrix ); + this.end.applyMatrix4( matrix ); + + return this; + + }; + + Line3.prototype.equals = function equals ( line ) { + + return line.start.equals( this.start ) && line.end.equals( this.end ); + + }; + + function ImmediateRenderObject( material ) { + + Object3D.call( this ); + + this.material = material; + this.render = function ( /* renderCallback */ ) {}; + + this.hasPositions = false; + this.hasNormals = false; + this.hasColors = false; + this.hasUvs = false; + + this.positionArray = null; + this.normalArray = null; + this.colorArray = null; + this.uvArray = null; + + this.count = 0; + + } + + ImmediateRenderObject.prototype = Object.create( Object3D.prototype ); + ImmediateRenderObject.prototype.constructor = ImmediateRenderObject; + + ImmediateRenderObject.prototype.isImmediateRenderObject = true; + + var _vector$8 = new Vector3(); + + function SpotLightHelper( light, color ) { + + Object3D.call(this); + this.light = light; + this.light.updateMatrixWorld(); + + this.matrix = light.matrixWorld; + this.matrixAutoUpdate = false; + + this.color = color; + + var geometry = new BufferGeometry(); + + var positions = [ + 0, 0, 0, 0, 0, 1, + 0, 0, 0, 1, 0, 1, + 0, 0, 0, - 1, 0, 1, + 0, 0, 0, 0, 1, 1, + 0, 0, 0, 0, - 1, 1 + ]; + + for ( var i = 0, j = 1, l = 32; i < l; i ++, j ++ ) { + + var p1 = ( i / l ) * Math.PI * 2; + var p2 = ( j / l ) * Math.PI * 2; + + positions.push( + Math.cos( p1 ), Math.sin( p1 ), 1, + Math.cos( p2 ), Math.sin( p2 ), 1 + ); + + } + + geometry.setAttribute( 'position', new Float32BufferAttribute( positions, 3 ) ); + + var material = new LineBasicMaterial( { fog: false, toneMapped: false } ); + + this.cone = new LineSegments( geometry, material ); + this.add( this.cone ); + + this.update(); + + } + + SpotLightHelper.prototype = Object.create( Object3D.prototype ); + SpotLightHelper.prototype.constructor = SpotLightHelper; + + SpotLightHelper.prototype.dispose = function dispose () { + + this.cone.geometry.dispose(); + this.cone.material.dispose(); + + }; + + SpotLightHelper.prototype.update = function update () { + + this.light.updateMatrixWorld(); + + var coneLength = this.light.distance ? this.light.distance : 1000; + var coneWidth = coneLength * Math.tan( this.light.angle ); + + this.cone.scale.set( coneWidth, coneWidth, coneLength ); + + _vector$8.setFromMatrixPosition( this.light.target.matrixWorld ); + + this.cone.lookAt( _vector$8 ); + + if ( this.color !== undefined ) { + + this.cone.material.color.set( this.color ); + + } else { + + this.cone.material.color.copy( this.light.color ); + + } + + }; + + var _vector$9 = new Vector3(); + var _boneMatrix = new Matrix4(); + var _matrixWorldInv = new Matrix4(); + + + function SkeletonHelper( object ) { + + var bones = getBoneList( object ); + + var geometry = new BufferGeometry(); + + var vertices = []; + var colors = []; + + var color1 = new Color( 0, 0, 1 ); + var color2 = new Color( 0, 1, 0 ); + + for ( var i = 0; i < bones.length; i ++ ) { + + var bone = bones[ i ]; + + if ( bone.parent && bone.parent.isBone ) { + + vertices.push( 0, 0, 0 ); + vertices.push( 0, 0, 0 ); + colors.push( color1.r, color1.g, color1.b ); + colors.push( color2.r, color2.g, color2.b ); + + } + + } + + geometry.setAttribute( 'position', new Float32BufferAttribute( vertices, 3 ) ); + geometry.setAttribute( 'color', new Float32BufferAttribute( colors, 3 ) ); + + var material = new LineBasicMaterial( { vertexColors: true, depthTest: false, depthWrite: false, toneMapped: false, transparent: true } ); + + LineSegments.call( this, geometry, material ); + + this.type = 'SkeletonHelper'; + this.isSkeletonHelper = true; + + this.root = object; + this.bones = bones; + + this.matrix = object.matrixWorld; + this.matrixAutoUpdate = false; + + } + + SkeletonHelper.prototype = Object.create( LineSegments.prototype ); + SkeletonHelper.prototype.constructor = SkeletonHelper; + + SkeletonHelper.prototype.updateMatrixWorld = function updateMatrixWorld ( force ) { + + var bones = this.bones; + + var geometry = this.geometry; + var position = geometry.getAttribute( 'position' ); + + _matrixWorldInv.getInverse( this.root.matrixWorld ); + + for ( var i = 0, j = 0; i < bones.length; i ++ ) { + + var bone = bones[ i ]; + + if ( bone.parent && bone.parent.isBone ) { + + _boneMatrix.multiplyMatrices( _matrixWorldInv, bone.matrixWorld ); + _vector$9.setFromMatrixPosition( _boneMatrix ); + position.setXYZ( j, _vector$9.x, _vector$9.y, _vector$9.z ); + + _boneMatrix.multiplyMatrices( _matrixWorldInv, bone.parent.matrixWorld ); + _vector$9.setFromMatrixPosition( _boneMatrix ); + position.setXYZ( j + 1, _vector$9.x, _vector$9.y, _vector$9.z ); + + j += 2; + + } + + } + + geometry.getAttribute( 'position' ).needsUpdate = true; + + LineSegments.prototype.updateMatrixWorld.call( this, force ); + + }; + + + function getBoneList( object ) { + + var boneList = []; + + if ( object && object.isBone ) { + + boneList.push( object ); + + } + + for ( var i = 0; i < object.children.length; i ++ ) { + + boneList.push.apply( boneList, getBoneList( object.children[ i ] ) ); + + } + + return boneList; + + } + + function PointLightHelper( light, sphereSize, color ) { + + var geometry = new SphereBufferGeometry( sphereSize, 4, 2 ); + var material = new MeshBasicMaterial( { wireframe: true, fog: false, toneMapped: false } ); + + Mesh.call( this, geometry, material ); + + this.light = light; + this.light.updateMatrixWorld(); + + this.color = color; + + this.type = 'PointLightHelper'; + + this.matrix = this.light.matrixWorld; + this.matrixAutoUpdate = false; + + this.update(); + + + /* + // TODO: delete this comment? + const distanceGeometry = new THREE.IcosahedronBufferGeometry( 1, 2 ); + const distanceMaterial = new THREE.MeshBasicMaterial( { color: hexColor, fog: false, wireframe: true, opacity: 0.1, transparent: true } ); + + this.lightSphere = new THREE.Mesh( bulbGeometry, bulbMaterial ); + this.lightDistance = new THREE.Mesh( distanceGeometry, distanceMaterial ); + + const d = light.distance; + + if ( d === 0.0 ) { + + this.lightDistance.visible = false; + + } else { + + this.lightDistance.scale.set( d, d, d ); + + } + + this.add( this.lightDistance ); + */ + + } + + PointLightHelper.prototype = Object.create( Mesh.prototype ); + PointLightHelper.prototype.constructor = PointLightHelper; + + PointLightHelper.prototype.dispose = function dispose () { + + this.geometry.dispose(); + this.material.dispose(); + + }; + + PointLightHelper.prototype.update = function update () { + + if ( this.color !== undefined ) { + + this.material.color.set( this.color ); + + } else { + + this.material.color.copy( this.light.color ); + + } + + /* + const d = this.light.distance; + + if ( d === 0.0 ) { + + this.lightDistance.visible = false; + + } else { + + this.lightDistance.visible = true; + this.lightDistance.scale.set( d, d, d ); + + } + */ + + }; + + var _vector$a = new Vector3(); + var _color1 = new Color(); + var _color2 = new Color(); + + function HemisphereLightHelper( light, size, color ) { + + Object3D.call(this); + this.light = light; + this.light.updateMatrixWorld(); + + this.matrix = light.matrixWorld; + this.matrixAutoUpdate = false; + + this.color = color; + + var geometry = new OctahedronBufferGeometry( size ); + geometry.rotateY( Math.PI * 0.5 ); + + this.material = new MeshBasicMaterial( { wireframe: true, fog: false, toneMapped: false } ); + if ( this.color === undefined ) { this.material.vertexColors = true; } + + var position = geometry.getAttribute( 'position' ); + var colors = new Float32Array( position.count * 3 ); + + geometry.setAttribute( 'color', new BufferAttribute( colors, 3 ) ); + + this.add( new Mesh( geometry, this.material ) ); + + this.update(); + + } + + HemisphereLightHelper.prototype = Object.create( Object3D.prototype ); + HemisphereLightHelper.prototype.constructor = HemisphereLightHelper; + + HemisphereLightHelper.prototype.dispose = function dispose () { + + this.children[ 0 ].geometry.dispose(); + this.children[ 0 ].material.dispose(); + + }; + + HemisphereLightHelper.prototype.update = function update () { + + var mesh = this.children[ 0 ]; + + if ( this.color !== undefined ) { + + this.material.color.set( this.color ); + + } else { + + var colors = mesh.geometry.getAttribute( 'color' ); + + _color1.copy( this.light.color ); + _color2.copy( this.light.groundColor ); + + for ( var i = 0, l = colors.count; i < l; i ++ ) { + + var color = ( i < ( l / 2 ) ) ? _color1 : _color2; + + colors.setXYZ( i, color.r, color.g, color.b ); + + } + + colors.needsUpdate = true; + + } + + mesh.lookAt( _vector$a.setFromMatrixPosition( this.light.matrixWorld ).negate() ); + + }; + + function GridHelper( size, divisions, color1, color2 ) { + + size = size || 10; + divisions = divisions || 10; + color1 = new Color( color1 !== undefined ? color1 : 0x444444 ); + color2 = new Color( color2 !== undefined ? color2 : 0x888888 ); + + var center = divisions / 2; + var step = size / divisions; + var halfSize = size / 2; + + var vertices = [], colors = []; + + for ( var i = 0, j = 0, k = - halfSize; i <= divisions; i ++, k += step ) { + + vertices.push( - halfSize, 0, k, halfSize, 0, k ); + vertices.push( k, 0, - halfSize, k, 0, halfSize ); + + var color = i === center ? color1 : color2; + + color.toArray( colors, j ); j += 3; + color.toArray( colors, j ); j += 3; + color.toArray( colors, j ); j += 3; + color.toArray( colors, j ); j += 3; + + } + + var geometry = new BufferGeometry(); + geometry.setAttribute( 'position', new Float32BufferAttribute( vertices, 3 ) ); + geometry.setAttribute( 'color', new Float32BufferAttribute( colors, 3 ) ); + + var material = new LineBasicMaterial( { vertexColors: true, toneMapped: false } ); + + LineSegments.call( this, geometry, material ); + + this.type = 'GridHelper'; + + } + + GridHelper.prototype = Object.create( LineSegments.prototype ); + GridHelper.prototype.constructor = GridHelper; + + function PolarGridHelper( radius, radials, circles, divisions, color1, color2 ) { + + radius = radius || 10; + radials = radials || 16; + circles = circles || 8; + divisions = divisions || 64; + color1 = new Color( color1 !== undefined ? color1 : 0x444444 ); + color2 = new Color( color2 !== undefined ? color2 : 0x888888 ); + + var vertices = []; + var colors = []; + + // create the radials + + for ( var i = 0; i <= radials; i ++ ) { + + var v = ( i / radials ) * ( Math.PI * 2 ); + + var x = Math.sin( v ) * radius; + var z = Math.cos( v ) * radius; + + vertices.push( 0, 0, 0 ); + vertices.push( x, 0, z ); + + var color = ( i & 1 ) ? color1 : color2; + + colors.push( color.r, color.g, color.b ); + colors.push( color.r, color.g, color.b ); + + } + + // create the circles + + for ( var i$1 = 0; i$1 <= circles; i$1 ++ ) { + + var color$1 = ( i$1 & 1 ) ? color1 : color2; + + var r = radius - ( radius / circles * i$1 ); + + for ( var j = 0; j < divisions; j ++ ) { + + // first vertex + + var v$1 = ( j / divisions ) * ( Math.PI * 2 ); + + var x$1 = Math.sin( v$1 ) * r; + var z$1 = Math.cos( v$1 ) * r; + + vertices.push( x$1, 0, z$1 ); + colors.push( color$1.r, color$1.g, color$1.b ); + + // second vertex + + v$1 = ( ( j + 1 ) / divisions ) * ( Math.PI * 2 ); + + x$1 = Math.sin( v$1 ) * r; + z$1 = Math.cos( v$1 ) * r; + + vertices.push( x$1, 0, z$1 ); + colors.push( color$1.r, color$1.g, color$1.b ); + + } + + } + + var geometry = new BufferGeometry(); + geometry.setAttribute( 'position', new Float32BufferAttribute( vertices, 3 ) ); + geometry.setAttribute( 'color', new Float32BufferAttribute( colors, 3 ) ); + + var material = new LineBasicMaterial( { vertexColors: true, toneMapped: false } ); + + LineSegments.call( this, geometry, material ); + + this.type = 'PolarGridHelper'; + + } + + PolarGridHelper.prototype = Object.create( LineSegments.prototype ); + PolarGridHelper.prototype.constructor = PolarGridHelper; + + var _v1$5 = new Vector3(); + var _v2$3 = new Vector3(); + var _v3$1 = new Vector3(); + + function DirectionalLightHelper( light, size, color ) { + + Object3D.call(this); + this.light = light; + this.light.updateMatrixWorld(); + + this.matrix = light.matrixWorld; + this.matrixAutoUpdate = false; + + this.color = color; + + if ( size === undefined ) { size = 1; } + + var geometry = new BufferGeometry(); + geometry.setAttribute( 'position', new Float32BufferAttribute( [ + - size, size, 0, + size, size, 0, + size, - size, 0, + - size, - size, 0, + - size, size, 0 + ], 3 ) ); + + var material = new LineBasicMaterial( { fog: false, toneMapped: false } ); + + this.lightPlane = new Line( geometry, material ); + this.add( this.lightPlane ); + + geometry = new BufferGeometry(); + geometry.setAttribute( 'position', new Float32BufferAttribute( [ 0, 0, 0, 0, 0, 1 ], 3 ) ); + + this.targetLine = new Line( geometry, material ); + this.add( this.targetLine ); + + this.update(); + + } + + DirectionalLightHelper.prototype = Object.create( Object3D.prototype ); + DirectionalLightHelper.prototype.constructor = DirectionalLightHelper; + + DirectionalLightHelper.prototype.dispose = function dispose () { + + this.lightPlane.geometry.dispose(); + this.lightPlane.material.dispose(); + this.targetLine.geometry.dispose(); + this.targetLine.material.dispose(); + + }; + + DirectionalLightHelper.prototype.update = function update () { + + _v1$5.setFromMatrixPosition( this.light.matrixWorld ); + _v2$3.setFromMatrixPosition( this.light.target.matrixWorld ); + _v3$1.subVectors( _v2$3, _v1$5 ); + + this.lightPlane.lookAt( _v2$3 ); + + if ( this.color !== undefined ) { + + this.lightPlane.material.color.set( this.color ); + this.targetLine.material.color.set( this.color ); + + } else { + + this.lightPlane.material.color.copy( this.light.color ); + this.targetLine.material.color.copy( this.light.color ); + + } + + this.targetLine.lookAt( _v2$3 ); + this.targetLine.scale.z = _v3$1.length(); + + }; + + var _vector$b = new Vector3(); + var _camera = new Camera(); + + /** + * - shows frustum, line of sight and up of the camera + * - suitable for fast updates + * - based on frustum visualization in lightgl.js shadowmap example + * http://evanw.github.com/lightgl.js/tests/shadowmap.html + */ + + function CameraHelper( camera ) { + + var geometry = new BufferGeometry(); + var material = new LineBasicMaterial( { color: 0xffffff, vertexColors: true, toneMapped: false } ); + + var vertices = []; + var colors = []; + + var pointMap = {}; + + // colors + + var colorFrustum = new Color( 0xffaa00 ); + var colorCone = new Color( 0xff0000 ); + var colorUp = new Color( 0x00aaff ); + var colorTarget = new Color( 0xffffff ); + var colorCross = new Color( 0x333333 ); + + // near + + addLine( 'n1', 'n2', colorFrustum ); + addLine( 'n2', 'n4', colorFrustum ); + addLine( 'n4', 'n3', colorFrustum ); + addLine( 'n3', 'n1', colorFrustum ); + + // far + + addLine( 'f1', 'f2', colorFrustum ); + addLine( 'f2', 'f4', colorFrustum ); + addLine( 'f4', 'f3', colorFrustum ); + addLine( 'f3', 'f1', colorFrustum ); + + // sides + + addLine( 'n1', 'f1', colorFrustum ); + addLine( 'n2', 'f2', colorFrustum ); + addLine( 'n3', 'f3', colorFrustum ); + addLine( 'n4', 'f4', colorFrustum ); + + // cone + + addLine( 'p', 'n1', colorCone ); + addLine( 'p', 'n2', colorCone ); + addLine( 'p', 'n3', colorCone ); + addLine( 'p', 'n4', colorCone ); + + // up + + addLine( 'u1', 'u2', colorUp ); + addLine( 'u2', 'u3', colorUp ); + addLine( 'u3', 'u1', colorUp ); + + // target + + addLine( 'c', 't', colorTarget ); + addLine( 'p', 'c', colorCross ); + + // cross + + addLine( 'cn1', 'cn2', colorCross ); + addLine( 'cn3', 'cn4', colorCross ); + + addLine( 'cf1', 'cf2', colorCross ); + addLine( 'cf3', 'cf4', colorCross ); + + function addLine( a, b, color ) { + + addPoint( a, color ); + addPoint( b, color ); + + } + + function addPoint( id, color ) { + + vertices.push( 0, 0, 0 ); + colors.push( color.r, color.g, color.b ); + + if ( pointMap[ id ] === undefined ) { + + pointMap[ id ] = []; + + } + + pointMap[ id ].push( ( vertices.length / 3 ) - 1 ); + + } + + geometry.setAttribute( 'position', new Float32BufferAttribute( vertices, 3 ) ); + geometry.setAttribute( 'color', new Float32BufferAttribute( colors, 3 ) ); + + LineSegments.call( this, geometry, material ); + + this.type = 'CameraHelper'; + + this.camera = camera; + if ( this.camera.updateProjectionMatrix ) { this.camera.updateProjectionMatrix(); } + + this.matrix = camera.matrixWorld; + this.matrixAutoUpdate = false; + + this.pointMap = pointMap; + + this.update(); + + } + + CameraHelper.prototype = Object.create( LineSegments.prototype ); + CameraHelper.prototype.constructor = CameraHelper; + + CameraHelper.prototype.update = function update () { + + var geometry = this.geometry; + var pointMap = this.pointMap; + + var w = 1, h = 1; + + // we need just camera projection matrix inverse + // world matrix must be identity + + _camera.projectionMatrixInverse.copy( this.camera.projectionMatrixInverse ); + + // center / target + + setPoint( 'c', pointMap, geometry, _camera, 0, 0, - 1 ); + setPoint( 't', pointMap, geometry, _camera, 0, 0, 1 ); + + // near + + setPoint( 'n1', pointMap, geometry, _camera, - w, - h, - 1 ); + setPoint( 'n2', pointMap, geometry, _camera, w, - h, - 1 ); + setPoint( 'n3', pointMap, geometry, _camera, - w, h, - 1 ); + setPoint( 'n4', pointMap, geometry, _camera, w, h, - 1 ); + + // far + + setPoint( 'f1', pointMap, geometry, _camera, - w, - h, 1 ); + setPoint( 'f2', pointMap, geometry, _camera, w, - h, 1 ); + setPoint( 'f3', pointMap, geometry, _camera, - w, h, 1 ); + setPoint( 'f4', pointMap, geometry, _camera, w, h, 1 ); + + // up + + setPoint( 'u1', pointMap, geometry, _camera, w * 0.7, h * 1.1, - 1 ); + setPoint( 'u2', pointMap, geometry, _camera, - w * 0.7, h * 1.1, - 1 ); + setPoint( 'u3', pointMap, geometry, _camera, 0, h * 2, - 1 ); + + // cross + + setPoint( 'cf1', pointMap, geometry, _camera, - w, 0, 1 ); + setPoint( 'cf2', pointMap, geometry, _camera, w, 0, 1 ); + setPoint( 'cf3', pointMap, geometry, _camera, 0, - h, 1 ); + setPoint( 'cf4', pointMap, geometry, _camera, 0, h, 1 ); + + setPoint( 'cn1', pointMap, geometry, _camera, - w, 0, - 1 ); + setPoint( 'cn2', pointMap, geometry, _camera, w, 0, - 1 ); + setPoint( 'cn3', pointMap, geometry, _camera, 0, - h, - 1 ); + setPoint( 'cn4', pointMap, geometry, _camera, 0, h, - 1 ); + + geometry.getAttribute( 'position' ).needsUpdate = true; + + }; + + + function setPoint( point, pointMap, geometry, camera, x, y, z ) { + + _vector$b.set( x, y, z ).unproject( camera ); + + var points = pointMap[ point ]; + + if ( points !== undefined ) { + + var position = geometry.getAttribute( 'position' ); + + for ( var i = 0, l = points.length; i < l; i ++ ) { + + position.setXYZ( points[ i ], _vector$b.x, _vector$b.y, _vector$b.z ); + + } + + } + + } + + var _box$3 = new Box3(); + + function BoxHelper( object, color ) { + if ( color === void 0 ) color = 0xffff00; + + + var indices = new Uint16Array( [ 0, 1, 1, 2, 2, 3, 3, 0, 4, 5, 5, 6, 6, 7, 7, 4, 0, 4, 1, 5, 2, 6, 3, 7 ] ); + var positions = new Float32Array( 8 * 3 ); + + var geometry = new BufferGeometry(); + geometry.setIndex( new BufferAttribute( indices, 1 ) ); + geometry.setAttribute( 'position', new BufferAttribute( positions, 3 ) ); + + LineSegments.call( this, geometry, new LineBasicMaterial( { color: color, toneMapped: false } ) ); + + this.object = object; + this.type = 'BoxHelper'; + + this.matrixAutoUpdate = false; + + this.update(); + + } + + BoxHelper.prototype = Object.create( LineSegments.prototype ); + BoxHelper.prototype.constructor = BoxHelper; + + BoxHelper.prototype.update = function update ( object ) { + + if ( object !== undefined ) { + + console.warn( 'THREE.BoxHelper: .update() has no longer arguments.' ); + + } + + if ( this.object !== undefined ) { + + _box$3.setFromObject( this.object ); + + } + + if ( _box$3.isEmpty() ) { return; } + + var min = _box$3.min; + var max = _box$3.max; + + /* + 5____4 + 1/___0/| + | 6__|_7 + 2/___3/ + + 0: max.x, max.y, max.z + 1: min.x, max.y, max.z + 2: min.x, min.y, max.z + 3: max.x, min.y, max.z + 4: max.x, max.y, min.z + 5: min.x, max.y, min.z + 6: min.x, min.y, min.z + 7: max.x, min.y, min.z + */ + + var position = this.geometry.attributes.position; + var array = position.array; + + array[ 0 ] = max.x; array[ 1 ] = max.y; array[ 2 ] = max.z; + array[ 3 ] = min.x; array[ 4 ] = max.y; array[ 5 ] = max.z; + array[ 6 ] = min.x; array[ 7 ] = min.y; array[ 8 ] = max.z; + array[ 9 ] = max.x; array[ 10 ] = min.y; array[ 11 ] = max.z; + array[ 12 ] = max.x; array[ 13 ] = max.y; array[ 14 ] = min.z; + array[ 15 ] = min.x; array[ 16 ] = max.y; array[ 17 ] = min.z; + array[ 18 ] = min.x; array[ 19 ] = min.y; array[ 20 ] = min.z; + array[ 21 ] = max.x; array[ 22 ] = min.y; array[ 23 ] = min.z; + + position.needsUpdate = true; + + this.geometry.computeBoundingSphere(); + + + }; + + BoxHelper.prototype.setFromObject = function setFromObject ( object ) { + + this.object = object; + this.update(); + + return this; + + }; + + BoxHelper.prototype.copy = function copy ( source ) { + + LineSegments.prototype.copy.call( this, source ); + + this.object = source.object; + + return this; + + }; + + function Box3Helper( box, color ) { + if ( color === void 0 ) color = 0xffff00; + + + var indices = new Uint16Array( [ 0, 1, 1, 2, 2, 3, 3, 0, 4, 5, 5, 6, 6, 7, 7, 4, 0, 4, 1, 5, 2, 6, 3, 7 ] ); + + var positions = [ 1, 1, 1, - 1, 1, 1, - 1, - 1, 1, 1, - 1, 1, 1, 1, - 1, - 1, 1, - 1, - 1, - 1, - 1, 1, - 1, - 1 ]; + + var geometry = new BufferGeometry(); + + geometry.setIndex( new BufferAttribute( indices, 1 ) ); + + geometry.setAttribute( 'position', new Float32BufferAttribute( positions, 3 ) ); + + LineSegments.call( this, geometry, new LineBasicMaterial( { color: color, toneMapped: false } ) ); + + this.box = box; + + this.type = 'Box3Helper'; + + this.geometry.computeBoundingSphere(); + + } + + Box3Helper.prototype = Object.create( LineSegments.prototype ); + Box3Helper.prototype.constructor = Box3Helper; + + Box3Helper.prototype.updateMatrixWorld = function updateMatrixWorld ( force ) { + + var box = this.box; + + if ( box.isEmpty() ) { return; } + + box.getCenter( this.position ); + + box.getSize( this.scale ); + + this.scale.multiplyScalar( 0.5 ); + + LineSegments.prototype.updateMatrixWorld.call( this, force ); + + }; + + function PlaneHelper( plane, size, hex ) { + + var color = ( hex !== undefined ) ? hex : 0xffff00; + + var positions = [ 1, - 1, 1, - 1, 1, 1, - 1, - 1, 1, 1, 1, 1, - 1, 1, 1, - 1, - 1, 1, 1, - 1, 1, 1, 1, 1, 0, 0, 1, 0, 0, 0 ]; + + var geometry = new BufferGeometry(); + geometry.setAttribute( 'position', new Float32BufferAttribute( positions, 3 ) ); + geometry.computeBoundingSphere(); + + Line.call( this, geometry, new LineBasicMaterial( { color: color, toneMapped: false } ) ); + + this.type = 'PlaneHelper'; + + this.plane = plane; + + this.size = ( size === undefined ) ? 1 : size; + + var positions2 = [ 1, 1, 1, - 1, 1, 1, - 1, - 1, 1, 1, 1, 1, - 1, - 1, 1, 1, - 1, 1 ]; + + var geometry2 = new BufferGeometry(); + geometry2.setAttribute( 'position', new Float32BufferAttribute( positions2, 3 ) ); + geometry2.computeBoundingSphere(); + + this.add( new Mesh( geometry2, new MeshBasicMaterial( { color: color, opacity: 0.2, transparent: true, depthWrite: false, toneMapped: false } ) ) ); + + } + + PlaneHelper.prototype = Object.create( Line.prototype ); + PlaneHelper.prototype.constructor = PlaneHelper; + + PlaneHelper.prototype.updateMatrixWorld = function updateMatrixWorld ( force ) { + + var scale = - this.plane.constant; + + if ( Math.abs( scale ) < 1e-8 ) { scale = 1e-8; } // sign does not matter + + this.scale.set( 0.5 * this.size, 0.5 * this.size, scale ); + + this.children[ 0 ].material.side = ( scale < 0 ) ? BackSide : FrontSide; // renderer flips side when determinant < 0; flipping not wanted here + + this.lookAt( this.plane.normal ); + + Line.prototype.updateMatrixWorld.call( this, force ); + + }; + + var _axis = new Vector3(); + var _lineGeometry, _coneGeometry; + + function ArrowHelper( dir, origin, length, color, headLength, headWidth ) { + + Object3D.call(this); + // dir is assumed to be normalized + + this.type = 'ArrowHelper'; + + if ( dir === undefined ) { dir = new Vector3( 0, 0, 1 ); } + if ( origin === undefined ) { origin = new Vector3( 0, 0, 0 ); } + if ( length === undefined ) { length = 1; } + if ( color === undefined ) { color = 0xffff00; } + if ( headLength === undefined ) { headLength = 0.2 * length; } + if ( headWidth === undefined ) { headWidth = 0.2 * headLength; } + + if ( _lineGeometry === undefined ) { + + _lineGeometry = new BufferGeometry(); + _lineGeometry.setAttribute( 'position', new Float32BufferAttribute( [ 0, 0, 0, 0, 1, 0 ], 3 ) ); + + _coneGeometry = new CylinderBufferGeometry( 0, 0.5, 1, 5, 1 ); + _coneGeometry.translate( 0, - 0.5, 0 ); + + } + + this.position.copy( origin ); + + this.line = new Line( _lineGeometry, new LineBasicMaterial( { color: color, toneMapped: false } ) ); + this.line.matrixAutoUpdate = false; + this.add( this.line ); + + this.cone = new Mesh( _coneGeometry, new MeshBasicMaterial( { color: color, toneMapped: false } ) ); + this.cone.matrixAutoUpdate = false; + this.add( this.cone ); + + this.setDirection( dir ); + this.setLength( length, headLength, headWidth ); + + } + + ArrowHelper.prototype = Object.create( Object3D.prototype ); + ArrowHelper.prototype.constructor = ArrowHelper; + + ArrowHelper.prototype.setDirection = function setDirection ( dir ) { + + // dir is assumed to be normalized + + if ( dir.y > 0.99999 ) { + + this.quaternion.set( 0, 0, 0, 1 ); + + } else if ( dir.y < - 0.99999 ) { + + this.quaternion.set( 1, 0, 0, 0 ); + + } else { + + _axis.set( dir.z, 0, - dir.x ).normalize(); + + var radians = Math.acos( dir.y ); + + this.quaternion.setFromAxisAngle( _axis, radians ); + + } + + }; + + ArrowHelper.prototype.setLength = function setLength ( length, headLength, headWidth ) { + + if ( headLength === undefined ) { headLength = 0.2 * length; } + if ( headWidth === undefined ) { headWidth = 0.2 * headLength; } + + this.line.scale.set( 1, Math.max( 0.0001, length - headLength ), 1 ); // see #17458 + this.line.updateMatrix(); + + this.cone.scale.set( headWidth, headLength, headWidth ); + this.cone.position.y = length; + this.cone.updateMatrix(); + + }; + + ArrowHelper.prototype.setColor = function setColor ( color ) { + + this.line.material.color.set( color ); + this.cone.material.color.set( color ); + + }; + + ArrowHelper.prototype.copy = function copy ( source ) { + + Object3D.prototype.copy.call( this, source, false ); + + this.line.copy( source.line ); + this.cone.copy( source.cone ); + + return this; + + }; + + function AxesHelper( size ) { + if ( size === void 0 ) size = 1; + + + var vertices = [ + 0, 0, 0, size, 0, 0, + 0, 0, 0, 0, size, 0, + 0, 0, 0, 0, 0, size + ]; + + var colors = [ + 1, 0, 0, 1, 0.6, 0, + 0, 1, 0, 0.6, 1, 0, + 0, 0, 1, 0, 0.6, 1 + ]; + + var geometry = new BufferGeometry(); + geometry.setAttribute( 'position', new Float32BufferAttribute( vertices, 3 ) ); + geometry.setAttribute( 'color', new Float32BufferAttribute( colors, 3 ) ); + + var material = new LineBasicMaterial( { vertexColors: true, toneMapped: false } ); + + LineSegments.call( this, geometry, material ); + + this.type = 'AxesHelper'; + + } + + AxesHelper.prototype = Object.create( LineSegments.prototype ); + AxesHelper.prototype.constructor = AxesHelper; + + var LOD_MIN = 4; + var LOD_MAX = 8; + var SIZE_MAX = Math.pow( 2, LOD_MAX ); + + // The standard deviations (radians) associated with the extra mips. These are + // chosen to approximate a Trowbridge-Reitz distribution function times the + // geometric shadowing function. These sigma values squared must match the + // variance #defines in cube_uv_reflection_fragment.glsl.js. + var EXTRA_LOD_SIGMA = [ 0.125, 0.215, 0.35, 0.446, 0.526, 0.582 ]; + + var TOTAL_LODS = LOD_MAX - LOD_MIN + 1 + EXTRA_LOD_SIGMA.length; + + // The maximum length of the blur for loop. Smaller sigmas will use fewer + // samples and exit early, but not recompile the shader. + var MAX_SAMPLES = 20; + + var ENCODINGS = {}; + ENCODINGS[ LinearEncoding ] = 0; + ENCODINGS[ sRGBEncoding ] = 1; + ENCODINGS[ RGBEEncoding ] = 2; + ENCODINGS[ RGBM7Encoding ] = 3; + ENCODINGS[ RGBM16Encoding ] = 4; + ENCODINGS[ RGBDEncoding ] = 5; + ENCODINGS[ GammaEncoding ] = 6; + + var _flatCamera = new OrthographicCamera(); + var ref = _createPlanes(); + var _lodPlanes = ref._lodPlanes; + var _sizeLods = ref._sizeLods; + var _sigmas = ref._sigmas; + var _oldTarget = null; + + // Golden Ratio + var PHI = ( 1 + Math.sqrt( 5 ) ) / 2; + var INV_PHI = 1 / PHI; + + // Vertices of a dodecahedron (except the opposites, which represent the + // same axis), used as axis directions evenly spread on a sphere. + var _axisDirections = [ + new Vector3( 1, 1, 1 ), + new Vector3( - 1, 1, 1 ), + new Vector3( 1, 1, - 1 ), + new Vector3( - 1, 1, - 1 ), + new Vector3( 0, PHI, INV_PHI ), + new Vector3( 0, PHI, - INV_PHI ), + new Vector3( INV_PHI, 0, PHI ), + new Vector3( - INV_PHI, 0, PHI ), + new Vector3( PHI, INV_PHI, 0 ), + new Vector3( - PHI, INV_PHI, 0 ) ]; + + /** + * This class generates a Prefiltered, Mipmapped Radiance Environment Map + * (PMREM) from a cubeMap environment texture. This allows different levels of + * blur to be quickly accessed based on material roughness. It is packed into a + * special CubeUV format that allows us to perform custom interpolation so that + * we can support nonlinear formats such as RGBE. Unlike a traditional mipmap + * chain, it only goes down to the LOD_MIN level (above), and then creates extra + * even more filtered 'mips' at the same LOD_MIN resolution, associated with + * higher roughness levels. In this way we maintain resolution to smoothly + * interpolate diffuse lighting while limiting sampling computation. + */ + + var PMREMGenerator = function PMREMGenerator( renderer ) { + + this._renderer = renderer; + this._pingPongRenderTarget = null; + + this._blurMaterial = _getBlurShader( MAX_SAMPLES ); + this._equirectShader = null; + this._cubemapShader = null; + + this._compileMaterial( this._blurMaterial ); + + }; + + /** + * Generates a PMREM from a supplied Scene, which can be faster than using an + * image if networking bandwidth is low. Optional sigma specifies a blur radius + * in radians to be applied to the scene before PMREM generation. Optional near + * and far planes ensure the scene is rendered in its entirety (the cubeCamera + * is placed at the origin). + */ + PMREMGenerator.prototype.fromScene = function fromScene ( scene, sigma, near, far ) { + if ( sigma === void 0 ) sigma = 0; + if ( near === void 0 ) near = 0.1; + if ( far === void 0 ) far = 100; + + + _oldTarget = this._renderer.getRenderTarget(); + var cubeUVRenderTarget = this._allocateTargets(); + + this._sceneToCubeUV( scene, near, far, cubeUVRenderTarget ); + if ( sigma > 0 ) { + + this._blur( cubeUVRenderTarget, 0, 0, sigma ); + + } + + this._applyPMREM( cubeUVRenderTarget ); + this._cleanup( cubeUVRenderTarget ); + + return cubeUVRenderTarget; + + }; + + /** + * Generates a PMREM from an equirectangular texture, which can be either LDR + * (RGBFormat) or HDR (RGBEFormat). The ideal input image size is 1k (1024 x 512), + * as this matches best with the 256 x 256 cubemap output. + */ + PMREMGenerator.prototype.fromEquirectangular = function fromEquirectangular ( equirectangular ) { + + return this._fromTexture( equirectangular ); + + }; + + /** + * Generates a PMREM from an cubemap texture, which can be either LDR + * (RGBFormat) or HDR (RGBEFormat). The ideal input cube size is 256 x 256, + * as this matches best with the 256 x 256 cubemap output. + */ + PMREMGenerator.prototype.fromCubemap = function fromCubemap ( cubemap ) { + + return this._fromTexture( cubemap ); + + }; + + /** + * Pre-compiles the cubemap shader. You can get faster start-up by invoking this method during + * your texture's network fetch for increased concurrency. + */ + PMREMGenerator.prototype.compileCubemapShader = function compileCubemapShader () { + + if ( this._cubemapShader === null ) { + + this._cubemapShader = _getCubemapShader(); + this._compileMaterial( this._cubemapShader ); + + } + + }; + + /** + * Pre-compiles the equirectangular shader. You can get faster start-up by invoking this method during + * your texture's network fetch for increased concurrency. + */ + PMREMGenerator.prototype.compileEquirectangularShader = function compileEquirectangularShader () { + + if ( this._equirectShader === null ) { + + this._equirectShader = _getEquirectShader(); + this._compileMaterial( this._equirectShader ); + + } + + }; + + /** + * Disposes of the PMREMGenerator's internal memory. Note that PMREMGenerator is a static class, + * so you should not need more than one PMREMGenerator object. If you do, calling dispose() on + * one of them will cause any others to also become unusable. + */ + PMREMGenerator.prototype.dispose = function dispose () { + + this._blurMaterial.dispose(); + + if ( this._cubemapShader !== null ) { this._cubemapShader.dispose(); } + if ( this._equirectShader !== null ) { this._equirectShader.dispose(); } + + for ( var i = 0; i < _lodPlanes.length; i ++ ) { + + _lodPlanes[ i ].dispose(); + + } + + }; + + // private interface + + PMREMGenerator.prototype._cleanup = function _cleanup ( outputTarget ) { + + this._pingPongRenderTarget.dispose(); + this._renderer.setRenderTarget( _oldTarget ); + outputTarget.scissorTest = false; + _setViewport( outputTarget, 0, 0, outputTarget.width, outputTarget.height ); + + }; + + PMREMGenerator.prototype._fromTexture = function _fromTexture ( texture ) { + + _oldTarget = this._renderer.getRenderTarget(); + var cubeUVRenderTarget = this._allocateTargets( texture ); + this._textureToCubeUV( texture, cubeUVRenderTarget ); + this._applyPMREM( cubeUVRenderTarget ); + this._cleanup( cubeUVRenderTarget ); + + return cubeUVRenderTarget; + + }; + + PMREMGenerator.prototype._allocateTargets = function _allocateTargets ( texture ) { // warning: null texture is valid + + var params = { + magFilter: NearestFilter, + minFilter: NearestFilter, + generateMipmaps: false, + type: UnsignedByteType, + format: RGBEFormat, + encoding: _isLDR( texture ) ? texture.encoding : RGBEEncoding, + depthBuffer: false + }; + + var cubeUVRenderTarget = _createRenderTarget( params ); + cubeUVRenderTarget.depthBuffer = texture ? false : true; + this._pingPongRenderTarget = _createRenderTarget( params ); + return cubeUVRenderTarget; + + }; + + PMREMGenerator.prototype._compileMaterial = function _compileMaterial ( material ) { + + var tmpMesh = new Mesh( _lodPlanes[ 0 ], material ); + this._renderer.compile( tmpMesh, _flatCamera ); + + }; + + PMREMGenerator.prototype._sceneToCubeUV = function _sceneToCubeUV ( scene, near, far, cubeUVRenderTarget ) { + + var fov = 90; + var aspect = 1; + var cubeCamera = new PerspectiveCamera( fov, aspect, near, far ); + var upSign = [ 1, - 1, 1, 1, 1, 1 ]; + var forwardSign = [ 1, 1, 1, - 1, - 1, - 1 ]; + var renderer = this._renderer; + + var outputEncoding = renderer.outputEncoding; + var toneMapping = renderer.toneMapping; + var clearColor = renderer.getClearColor(); + var clearAlpha = renderer.getClearAlpha(); + + renderer.toneMapping = NoToneMapping; + renderer.outputEncoding = LinearEncoding; + + var background = scene.background; + if ( background && background.isColor ) { + + background.convertSRGBToLinear(); + // Convert linear to RGBE + var maxComponent = Math.max( background.r, background.g, background.b ); + var fExp = Math.min( Math.max( Math.ceil( Math.log2( maxComponent ) ), - 128.0 ), 127.0 ); + background = background.multiplyScalar( Math.pow( 2.0, - fExp ) ); + var alpha = ( fExp + 128.0 ) / 255.0; + renderer.setClearColor( background, alpha ); + scene.background = null; + + } + + for ( var i = 0; i < 6; i ++ ) { + + var col = i % 3; + if ( col == 0 ) { + + cubeCamera.up.set( 0, upSign[ i ], 0 ); + cubeCamera.lookAt( forwardSign[ i ], 0, 0 ); + + } else if ( col == 1 ) { + + cubeCamera.up.set( 0, 0, upSign[ i ] ); + cubeCamera.lookAt( 0, forwardSign[ i ], 0 ); + + } else { + + cubeCamera.up.set( 0, upSign[ i ], 0 ); + cubeCamera.lookAt( 0, 0, forwardSign[ i ] ); + + } + + _setViewport( cubeUVRenderTarget, + col * SIZE_MAX, i > 2 ? SIZE_MAX : 0, SIZE_MAX, SIZE_MAX ); + renderer.setRenderTarget( cubeUVRenderTarget ); + renderer.render( scene, cubeCamera ); + + } + + renderer.toneMapping = toneMapping; + renderer.outputEncoding = outputEncoding; + renderer.setClearColor( clearColor, clearAlpha ); + + }; + + PMREMGenerator.prototype._textureToCubeUV = function _textureToCubeUV ( texture, cubeUVRenderTarget ) { + + var renderer = this._renderer; + + if ( texture.isCubeTexture ) { + + if ( this._cubemapShader == null ) { + + this._cubemapShader = _getCubemapShader(); + + } + + } else { + + if ( this._equirectShader == null ) { + + this._equirectShader = _getEquirectShader(); + + } + + } + + var material = texture.isCubeTexture ? this._cubemapShader : this._equirectShader; + var mesh = new Mesh( _lodPlanes[ 0 ], material ); + + var uniforms = material.uniforms; + + uniforms[ 'envMap' ].value = texture; + + if ( ! texture.isCubeTexture ) { + + uniforms[ 'texelSize' ].value.set( 1.0 / texture.image.width, 1.0 / texture.image.height ); + + } + + uniforms[ 'inputEncoding' ].value = ENCODINGS[ texture.encoding ]; + uniforms[ 'outputEncoding' ].value = ENCODINGS[ cubeUVRenderTarget.texture.encoding ]; + + _setViewport( cubeUVRenderTarget, 0, 0, 3 * SIZE_MAX, 2 * SIZE_MAX ); + + renderer.setRenderTarget( cubeUVRenderTarget ); + renderer.render( mesh, _flatCamera ); + + }; + + PMREMGenerator.prototype._applyPMREM = function _applyPMREM ( cubeUVRenderTarget ) { + + var renderer = this._renderer; + var autoClear = renderer.autoClear; + renderer.autoClear = false; + + for ( var i = 1; i < TOTAL_LODS; i ++ ) { + + var sigma = Math.sqrt( _sigmas[ i ] * _sigmas[ i ] - _sigmas[ i - 1 ] * _sigmas[ i - 1 ] ); + + var poleAxis = _axisDirections[ ( i - 1 ) % _axisDirections.length ]; + + this._blur( cubeUVRenderTarget, i - 1, i, sigma, poleAxis ); + + } + + renderer.autoClear = autoClear; + + }; + + /** + * This is a two-pass Gaussian blur for a cubemap. Normally this is done + * vertically and horizontally, but this breaks down on a cube. Here we apply + * the blur latitudinally (around the poles), and then longitudinally (towards + * the poles) to approximate the orthogonally-separable blur. It is least + * accurate at the poles, but still does a decent job. + */ + PMREMGenerator.prototype._blur = function _blur ( cubeUVRenderTarget, lodIn, lodOut, sigma, poleAxis ) { + + var pingPongRenderTarget = this._pingPongRenderTarget; + + this._halfBlur( + cubeUVRenderTarget, + pingPongRenderTarget, + lodIn, + lodOut, + sigma, + 'latitudinal', + poleAxis ); + + this._halfBlur( + pingPongRenderTarget, + cubeUVRenderTarget, + lodOut, + lodOut, + sigma, + 'longitudinal', + poleAxis ); + + }; + + PMREMGenerator.prototype._halfBlur = function _halfBlur ( targetIn, targetOut, lodIn, lodOut, sigmaRadians, direction, poleAxis ) { + + var renderer = this._renderer; + var blurMaterial = this._blurMaterial; + + if ( direction !== 'latitudinal' && direction !== 'longitudinal' ) { + + console.error( + 'blur direction must be either latitudinal or longitudinal!' ); + + } + + // Number of standard deviations at which to cut off the discrete approximation. + var STANDARD_DEVIATIONS = 3; + + var blurMesh = new Mesh( _lodPlanes[ lodOut ], blurMaterial ); + var blurUniforms = blurMaterial.uniforms; + + var pixels = _sizeLods[ lodIn ] - 1; + var radiansPerPixel = isFinite( sigmaRadians ) ? Math.PI / ( 2 * pixels ) : 2 * Math.PI / ( 2 * MAX_SAMPLES - 1 ); + var sigmaPixels = sigmaRadians / radiansPerPixel; + var samples = isFinite( sigmaRadians ) ? 1 + Math.floor( STANDARD_DEVIATIONS * sigmaPixels ) : MAX_SAMPLES; + + if ( samples > MAX_SAMPLES ) { + + console.warn( ("sigmaRadians, " + sigmaRadians + ", is too large and will clip, as it requested " + samples + " samples when the maximum is set to " + MAX_SAMPLES) ); + + } + + var weights = []; + var sum = 0; + + for ( var i = 0; i < MAX_SAMPLES; ++ i ) { + + var x$1 = i / sigmaPixels; + var weight = Math.exp( - x$1 * x$1 / 2 ); + weights.push( weight ); + + if ( i == 0 ) { + + sum += weight; + + } else if ( i < samples ) { + + sum += 2 * weight; + + } + + } + + for ( var i$1 = 0; i$1 < weights.length; i$1 ++ ) { + + weights[ i$1 ] = weights[ i$1 ] / sum; + + } + + blurUniforms[ 'envMap' ].value = targetIn.texture; + blurUniforms[ 'samples' ].value = samples; + blurUniforms[ 'weights' ].value = weights; + blurUniforms[ 'latitudinal' ].value = direction === 'latitudinal'; + + if ( poleAxis ) { + + blurUniforms[ 'poleAxis' ].value = poleAxis; + + } + + blurUniforms[ 'dTheta' ].value = radiansPerPixel; + blurUniforms[ 'mipInt' ].value = LOD_MAX - lodIn; + blurUniforms[ 'inputEncoding' ].value = ENCODINGS[ targetIn.texture.encoding ]; + blurUniforms[ 'outputEncoding' ].value = ENCODINGS[ targetIn.texture.encoding ]; + + var outputSize = _sizeLods[ lodOut ]; + var x = 3 * Math.max( 0, SIZE_MAX - 2 * outputSize ); + var y = ( lodOut === 0 ? 0 : 2 * SIZE_MAX ) + 2 * outputSize * ( lodOut > LOD_MAX - LOD_MIN ? lodOut - LOD_MAX + LOD_MIN : 0 ); + + _setViewport( targetOut, x, y, 3 * outputSize, 2 * outputSize ); + renderer.setRenderTarget( targetOut ); + renderer.render( blurMesh, _flatCamera ); + + }; + + function _isLDR( texture ) { + + if ( texture === undefined || texture.type !== UnsignedByteType ) { return false; } + + return texture.encoding === LinearEncoding || texture.encoding === sRGBEncoding || texture.encoding === GammaEncoding; + + } + + function _createPlanes() { + + var _lodPlanes = []; + var _sizeLods = []; + var _sigmas = []; + + var lod = LOD_MAX; + + for ( var i = 0; i < TOTAL_LODS; i ++ ) { + + var sizeLod = Math.pow( 2, lod ); + _sizeLods.push( sizeLod ); + var sigma = 1.0 / sizeLod; + + if ( i > LOD_MAX - LOD_MIN ) { + + sigma = EXTRA_LOD_SIGMA[ i - LOD_MAX + LOD_MIN - 1 ]; + + } else if ( i == 0 ) { + + sigma = 0; + + } + + _sigmas.push( sigma ); + + var texelSize = 1.0 / ( sizeLod - 1 ); + var min = - texelSize / 2; + var max = 1 + texelSize / 2; + var uv1 = [ min, min, max, min, max, max, min, min, max, max, min, max ]; + + var cubeFaces = 6; + var vertices = 6; + var positionSize = 3; + var uvSize = 2; + var faceIndexSize = 1; + + var position = new Float32Array( positionSize * vertices * cubeFaces ); + var uv = new Float32Array( uvSize * vertices * cubeFaces ); + var faceIndex = new Float32Array( faceIndexSize * vertices * cubeFaces ); + + for ( var face = 0; face < cubeFaces; face ++ ) { + + var x = ( face % 3 ) * 2 / 3 - 1; + var y = face > 2 ? 0 : - 1; + var coordinates = [ + x, y, 0, + x + 2 / 3, y, 0, + x + 2 / 3, y + 1, 0, + x, y, 0, + x + 2 / 3, y + 1, 0, + x, y + 1, 0 + ]; + position.set( coordinates, positionSize * vertices * face ); + uv.set( uv1, uvSize * vertices * face ); + var fill = [ face, face, face, face, face, face ]; + faceIndex.set( fill, faceIndexSize * vertices * face ); + + } + + var planes = new BufferGeometry(); + planes.setAttribute( 'position', new BufferAttribute( position, positionSize ) ); + planes.setAttribute( 'uv', new BufferAttribute( uv, uvSize ) ); + planes.setAttribute( 'faceIndex', new BufferAttribute( faceIndex, faceIndexSize ) ); + _lodPlanes.push( planes ); + + if ( lod > LOD_MIN ) { + + lod --; + + } + + } + + return { _lodPlanes: _lodPlanes, _sizeLods: _sizeLods, _sigmas: _sigmas }; + + } + + function _createRenderTarget( params ) { + + var cubeUVRenderTarget = new WebGLRenderTarget( 3 * SIZE_MAX, 3 * SIZE_MAX, params ); + cubeUVRenderTarget.texture.mapping = CubeUVReflectionMapping; + cubeUVRenderTarget.texture.name = 'PMREM.cubeUv'; + cubeUVRenderTarget.scissorTest = true; + return cubeUVRenderTarget; + + } + + function _setViewport( target, x, y, width, height ) { + + target.viewport.set( x, y, width, height ); + target.scissor.set( x, y, width, height ); + + } + + function _getBlurShader( maxSamples ) { + + var weights = new Float32Array( maxSamples ); + var poleAxis = new Vector3( 0, 1, 0 ); + var shaderMaterial = new RawShaderMaterial( { + + name: 'SphericalGaussianBlur', + + defines: { 'n': maxSamples }, + + uniforms: { + 'envMap': { value: null }, + 'samples': { value: 1 }, + 'weights': { value: weights }, + 'latitudinal': { value: false }, + 'dTheta': { value: 0 }, + 'mipInt': { value: 0 }, + 'poleAxis': { value: poleAxis }, + 'inputEncoding': { value: ENCODINGS[ LinearEncoding ] }, + 'outputEncoding': { value: ENCODINGS[ LinearEncoding ] } + }, + + vertexShader: _getCommonVertexShader(), + + fragmentShader: /* glsl */("\n\n\t\t\tprecision mediump float;\n\t\t\tprecision mediump int;\n\n\t\t\tvarying vec3 vOutputDirection;\n\n\t\t\tuniform sampler2D envMap;\n\t\t\tuniform int samples;\n\t\t\tuniform float weights[ n ];\n\t\t\tuniform bool latitudinal;\n\t\t\tuniform float dTheta;\n\t\t\tuniform float mipInt;\n\t\t\tuniform vec3 poleAxis;\n\n\t\t\t" + (_getEncodings()) + "\n\n\t\t\t#define ENVMAP_TYPE_CUBE_UV\n\t\t\t#include \n\n\t\t\tvec3 getSample( float theta, vec3 axis ) {\n\n\t\t\t\tfloat cosTheta = cos( theta );\n\t\t\t\t// Rodrigues' axis-angle rotation\n\t\t\t\tvec3 sampleDirection = vOutputDirection * cosTheta\n\t\t\t\t\t+ cross( axis, vOutputDirection ) * sin( theta )\n\t\t\t\t\t+ axis * dot( axis, vOutputDirection ) * ( 1.0 - cosTheta );\n\n\t\t\t\treturn bilinearCubeUV( envMap, sampleDirection, mipInt );\n\n\t\t\t}\n\n\t\t\tvoid main() {\n\n\t\t\t\tvec3 axis = latitudinal ? poleAxis : cross( poleAxis, vOutputDirection );\n\n\t\t\t\tif ( all( equal( axis, vec3( 0.0 ) ) ) ) {\n\n\t\t\t\t\taxis = vec3( vOutputDirection.z, 0.0, - vOutputDirection.x );\n\n\t\t\t\t}\n\n\t\t\t\taxis = normalize( axis );\n\n\t\t\t\tgl_FragColor = vec4( 0.0, 0.0, 0.0, 1.0 );\n\t\t\t\tgl_FragColor.rgb += weights[ 0 ] * getSample( 0.0, axis );\n\n\t\t\t\tfor ( int i = 1; i < n; i++ ) {\n\n\t\t\t\t\tif ( i >= samples ) {\n\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\t}\n\n\t\t\t\t\tfloat theta = dTheta * float( i );\n\t\t\t\t\tgl_FragColor.rgb += weights[ i ] * getSample( -1.0 * theta, axis );\n\t\t\t\t\tgl_FragColor.rgb += weights[ i ] * getSample( theta, axis );\n\n\t\t\t\t}\n\n\t\t\t\tgl_FragColor = linearToOutputTexel( gl_FragColor );\n\n\t\t\t}\n\t\t"), + + blending: NoBlending, + depthTest: false, + depthWrite: false + + } ); + + return shaderMaterial; + + } + + function _getEquirectShader() { + + var texelSize = new Vector2( 1, 1 ); + var shaderMaterial = new RawShaderMaterial( { + + name: 'EquirectangularToCubeUV', + + uniforms: { + 'envMap': { value: null }, + 'texelSize': { value: texelSize }, + 'inputEncoding': { value: ENCODINGS[ LinearEncoding ] }, + 'outputEncoding': { value: ENCODINGS[ LinearEncoding ] } + }, + + vertexShader: _getCommonVertexShader(), + + fragmentShader: /* glsl */("\n\n\t\t\tprecision mediump float;\n\t\t\tprecision mediump int;\n\n\t\t\tvarying vec3 vOutputDirection;\n\n\t\t\tuniform sampler2D envMap;\n\t\t\tuniform vec2 texelSize;\n\n\t\t\t" + (_getEncodings()) + "\n\n\t\t\t#include \n\n\t\t\tvoid main() {\n\n\t\t\t\tgl_FragColor = vec4( 0.0, 0.0, 0.0, 1.0 );\n\n\t\t\t\tvec3 outputDirection = normalize( vOutputDirection );\n\t\t\t\tvec2 uv = equirectUv( outputDirection );\n\n\t\t\t\tvec2 f = fract( uv / texelSize - 0.5 );\n\t\t\t\tuv -= f * texelSize;\n\t\t\t\tvec3 tl = envMapTexelToLinear( texture2D ( envMap, uv ) ).rgb;\n\t\t\t\tuv.x += texelSize.x;\n\t\t\t\tvec3 tr = envMapTexelToLinear( texture2D ( envMap, uv ) ).rgb;\n\t\t\t\tuv.y += texelSize.y;\n\t\t\t\tvec3 br = envMapTexelToLinear( texture2D ( envMap, uv ) ).rgb;\n\t\t\t\tuv.x -= texelSize.x;\n\t\t\t\tvec3 bl = envMapTexelToLinear( texture2D ( envMap, uv ) ).rgb;\n\n\t\t\t\tvec3 tm = mix( tl, tr, f.x );\n\t\t\t\tvec3 bm = mix( bl, br, f.x );\n\t\t\t\tgl_FragColor.rgb = mix( tm, bm, f.y );\n\n\t\t\t\tgl_FragColor = linearToOutputTexel( gl_FragColor );\n\n\t\t\t}\n\t\t"), + + blending: NoBlending, + depthTest: false, + depthWrite: false + + } ); + + return shaderMaterial; + + } + + function _getCubemapShader() { + + var shaderMaterial = new RawShaderMaterial( { + + name: 'CubemapToCubeUV', + + uniforms: { + 'envMap': { value: null }, + 'inputEncoding': { value: ENCODINGS[ LinearEncoding ] }, + 'outputEncoding': { value: ENCODINGS[ LinearEncoding ] } + }, + + vertexShader: _getCommonVertexShader(), + + fragmentShader: /* glsl */("\n\n\t\t\tprecision mediump float;\n\t\t\tprecision mediump int;\n\n\t\t\tvarying vec3 vOutputDirection;\n\n\t\t\tuniform samplerCube envMap;\n\n\t\t\t" + (_getEncodings()) + "\n\n\t\t\tvoid main() {\n\n\t\t\t\tgl_FragColor = vec4( 0.0, 0.0, 0.0, 1.0 );\n\t\t\t\tgl_FragColor.rgb = envMapTexelToLinear( textureCube( envMap, vec3( - vOutputDirection.x, vOutputDirection.yz ) ) ).rgb;\n\t\t\t\tgl_FragColor = linearToOutputTexel( gl_FragColor );\n\n\t\t\t}\n\t\t"), + + blending: NoBlending, + depthTest: false, + depthWrite: false + + } ); + + return shaderMaterial; + + } + + function _getCommonVertexShader() { + + return /* glsl */"\n\n\t\tprecision mediump float;\n\t\tprecision mediump int;\n\n\t\tattribute vec3 position;\n\t\tattribute vec2 uv;\n\t\tattribute float faceIndex;\n\n\t\tvarying vec3 vOutputDirection;\n\n\t\t// RH coordinate system; PMREM face-indexing convention\n\t\tvec3 getDirection( vec2 uv, float face ) {\n\n\t\t\tuv = 2.0 * uv - 1.0;\n\n\t\t\tvec3 direction = vec3( uv, 1.0 );\n\n\t\t\tif ( face == 0.0 ) {\n\n\t\t\t\tdirection = direction.zyx; // ( 1, v, u ) pos x\n\n\t\t\t} else if ( face == 1.0 ) {\n\n\t\t\t\tdirection = direction.xzy;\n\t\t\t\tdirection.xz *= -1.0; // ( -u, 1, -v ) pos y\n\n\t\t\t} else if ( face == 2.0 ) {\n\n\t\t\t\tdirection.x *= -1.0; // ( -u, v, 1 ) pos z\n\n\t\t\t} else if ( face == 3.0 ) {\n\n\t\t\t\tdirection = direction.zyx;\n\t\t\t\tdirection.xz *= -1.0; // ( -1, v, -u ) neg x\n\n\t\t\t} else if ( face == 4.0 ) {\n\n\t\t\t\tdirection = direction.xzy;\n\t\t\t\tdirection.xy *= -1.0; // ( -u, -1, v ) neg y\n\n\t\t\t} else if ( face == 5.0 ) {\n\n\t\t\t\tdirection.z *= -1.0; // ( u, v, -1 ) neg z\n\n\t\t\t}\n\n\t\t\treturn direction;\n\n\t\t}\n\n\t\tvoid main() {\n\n\t\t\tvOutputDirection = getDirection( uv, faceIndex );\n\t\t\tgl_Position = vec4( position, 1.0 );\n\n\t\t}\n\t"; + + } + + function _getEncodings() { + + return /* glsl */"\n\n\t\tuniform int inputEncoding;\n\t\tuniform int outputEncoding;\n\n\t\t#include \n\n\t\tvec4 inputTexelToLinear( vec4 value ) {\n\n\t\t\tif ( inputEncoding == 0 ) {\n\n\t\t\t\treturn value;\n\n\t\t\t} else if ( inputEncoding == 1 ) {\n\n\t\t\t\treturn sRGBToLinear( value );\n\n\t\t\t} else if ( inputEncoding == 2 ) {\n\n\t\t\t\treturn RGBEToLinear( value );\n\n\t\t\t} else if ( inputEncoding == 3 ) {\n\n\t\t\t\treturn RGBMToLinear( value, 7.0 );\n\n\t\t\t} else if ( inputEncoding == 4 ) {\n\n\t\t\t\treturn RGBMToLinear( value, 16.0 );\n\n\t\t\t} else if ( inputEncoding == 5 ) {\n\n\t\t\t\treturn RGBDToLinear( value, 256.0 );\n\n\t\t\t} else {\n\n\t\t\t\treturn GammaToLinear( value, 2.2 );\n\n\t\t\t}\n\n\t\t}\n\n\t\tvec4 linearToOutputTexel( vec4 value ) {\n\n\t\t\tif ( outputEncoding == 0 ) {\n\n\t\t\t\treturn value;\n\n\t\t\t} else if ( outputEncoding == 1 ) {\n\n\t\t\t\treturn LinearTosRGB( value );\n\n\t\t\t} else if ( outputEncoding == 2 ) {\n\n\t\t\t\treturn LinearToRGBE( value );\n\n\t\t\t} else if ( outputEncoding == 3 ) {\n\n\t\t\t\treturn LinearToRGBM( value, 7.0 );\n\n\t\t\t} else if ( outputEncoding == 4 ) {\n\n\t\t\t\treturn LinearToRGBM( value, 16.0 );\n\n\t\t\t} else if ( outputEncoding == 5 ) {\n\n\t\t\t\treturn LinearToRGBD( value, 256.0 );\n\n\t\t\t} else {\n\n\t\t\t\treturn LinearToGamma( value, 2.2 );\n\n\t\t\t}\n\n\t\t}\n\n\t\tvec4 envMapTexelToLinear( vec4 color ) {\n\n\t\t\treturn inputTexelToLinear( color );\n\n\t\t}\n\t"; + + } + + function Face4( a, b, c, d, normal, color, materialIndex ) { + + console.warn( 'THREE.Face4 has been removed. A THREE.Face3 will be created instead.' ); + return new Face3( a, b, c, normal, color, materialIndex ); + + } + + var LineStrip = 0; + var LinePieces = 1; + var NoColors = 0; + var FaceColors = 1; + var VertexColors = 2; + + function MeshFaceMaterial( materials ) { + + console.warn( 'THREE.MeshFaceMaterial has been removed. Use an Array instead.' ); + return materials; + + } + + function MultiMaterial( materials ) { + + if ( materials === undefined ) { materials = []; } + + console.warn( 'THREE.MultiMaterial has been removed. Use an Array instead.' ); + materials.isMultiMaterial = true; + materials.materials = materials; + materials.clone = function () { + + return materials.slice(); + + }; + + return materials; + + } + + function PointCloud( geometry, material ) { + + console.warn( 'THREE.PointCloud has been renamed to THREE.Points.' ); + return new Points( geometry, material ); + + } + + function Particle( material ) { + + console.warn( 'THREE.Particle has been renamed to THREE.Sprite.' ); + return new Sprite( material ); + + } + + function ParticleSystem( geometry, material ) { + + console.warn( 'THREE.ParticleSystem has been renamed to THREE.Points.' ); + return new Points( geometry, material ); + + } + + function PointCloudMaterial( parameters ) { + + console.warn( 'THREE.PointCloudMaterial has been renamed to THREE.PointsMaterial.' ); + return new PointsMaterial( parameters ); + + } + + function ParticleBasicMaterial( parameters ) { + + console.warn( 'THREE.ParticleBasicMaterial has been renamed to THREE.PointsMaterial.' ); + return new PointsMaterial( parameters ); + + } + + function ParticleSystemMaterial( parameters ) { + + console.warn( 'THREE.ParticleSystemMaterial has been renamed to THREE.PointsMaterial.' ); + return new PointsMaterial( parameters ); + + } + + function Vertex( x, y, z ) { + + console.warn( 'THREE.Vertex has been removed. Use THREE.Vector3 instead.' ); + return new Vector3( x, y, z ); + + } + + // + + function DynamicBufferAttribute( array, itemSize ) { + + console.warn( 'THREE.DynamicBufferAttribute has been removed. Use new THREE.BufferAttribute().setUsage( THREE.DynamicDrawUsage ) instead.' ); + return new BufferAttribute( array, itemSize ).setUsage( DynamicDrawUsage ); + + } + + function Int8Attribute( array, itemSize ) { + + console.warn( 'THREE.Int8Attribute has been removed. Use new THREE.Int8BufferAttribute() instead.' ); + return new Int8BufferAttribute( array, itemSize ); + + } + + function Uint8Attribute( array, itemSize ) { + + console.warn( 'THREE.Uint8Attribute has been removed. Use new THREE.Uint8BufferAttribute() instead.' ); + return new Uint8BufferAttribute( array, itemSize ); + + } + + function Uint8ClampedAttribute( array, itemSize ) { + + console.warn( 'THREE.Uint8ClampedAttribute has been removed. Use new THREE.Uint8ClampedBufferAttribute() instead.' ); + return new Uint8ClampedBufferAttribute( array, itemSize ); + + } + + function Int16Attribute( array, itemSize ) { + + console.warn( 'THREE.Int16Attribute has been removed. Use new THREE.Int16BufferAttribute() instead.' ); + return new Int16BufferAttribute( array, itemSize ); + + } + + function Uint16Attribute( array, itemSize ) { + + console.warn( 'THREE.Uint16Attribute has been removed. Use new THREE.Uint16BufferAttribute() instead.' ); + return new Uint16BufferAttribute( array, itemSize ); + + } + + function Int32Attribute( array, itemSize ) { + + console.warn( 'THREE.Int32Attribute has been removed. Use new THREE.Int32BufferAttribute() instead.' ); + return new Int32BufferAttribute( array, itemSize ); + + } + + function Uint32Attribute( array, itemSize ) { + + console.warn( 'THREE.Uint32Attribute has been removed. Use new THREE.Uint32BufferAttribute() instead.' ); + return new Uint32BufferAttribute( array, itemSize ); + + } + + function Float32Attribute( array, itemSize ) { + + console.warn( 'THREE.Float32Attribute has been removed. Use new THREE.Float32BufferAttribute() instead.' ); + return new Float32BufferAttribute( array, itemSize ); + + } + + function Float64Attribute( array, itemSize ) { + + console.warn( 'THREE.Float64Attribute has been removed. Use new THREE.Float64BufferAttribute() instead.' ); + return new Float64BufferAttribute( array, itemSize ); + + } + + // + + Curve.create = function ( construct, getPoint ) { + + console.log( 'THREE.Curve.create() has been deprecated' ); + + construct.prototype = Object.create( Curve.prototype ); + construct.prototype.constructor = construct; + construct.prototype.getPoint = getPoint; + + return construct; + + }; + + // + + Object.assign( CurvePath.prototype, { + + createPointsGeometry: function ( divisions ) { + + console.warn( 'THREE.CurvePath: .createPointsGeometry() has been removed. Use new THREE.Geometry().setFromPoints( points ) instead.' ); + + // generate geometry from path points (for Line or Points objects) + + var pts = this.getPoints( divisions ); + return this.createGeometry( pts ); + + }, + + createSpacedPointsGeometry: function ( divisions ) { + + console.warn( 'THREE.CurvePath: .createSpacedPointsGeometry() has been removed. Use new THREE.Geometry().setFromPoints( points ) instead.' ); + + // generate geometry from equidistant sampling along the path + + var pts = this.getSpacedPoints( divisions ); + return this.createGeometry( pts ); + + }, + + createGeometry: function ( points ) { + + console.warn( 'THREE.CurvePath: .createGeometry() has been removed. Use new THREE.Geometry().setFromPoints( points ) instead.' ); + + var geometry = new Geometry(); + + for ( var i = 0, l = points.length; i < l; i ++ ) { + + var point = points[ i ]; + geometry.vertices.push( new Vector3( point.x, point.y, point.z || 0 ) ); + + } + + return geometry; + + } + + } ); + + // + + Object.assign( Path.prototype, { + + fromPoints: function ( points ) { + + console.warn( 'THREE.Path: .fromPoints() has been renamed to .setFromPoints().' ); + return this.setFromPoints( points ); + + } + + } ); + + // + + function ClosedSplineCurve3( points ) { + + console.warn( 'THREE.ClosedSplineCurve3 has been deprecated. Use THREE.CatmullRomCurve3 instead.' ); + + CatmullRomCurve3.call( this, points ); + this.type = 'catmullrom'; + this.closed = true; + + } + + ClosedSplineCurve3.prototype = Object.create( CatmullRomCurve3.prototype ); + + // + + function SplineCurve3( points ) { + + console.warn( 'THREE.SplineCurve3 has been deprecated. Use THREE.CatmullRomCurve3 instead.' ); + + CatmullRomCurve3.call( this, points ); + this.type = 'catmullrom'; + + } + + SplineCurve3.prototype = Object.create( CatmullRomCurve3.prototype ); + + // + + function Spline( points ) { + + console.warn( 'THREE.Spline has been removed. Use THREE.CatmullRomCurve3 instead.' ); + + CatmullRomCurve3.call( this, points ); + this.type = 'catmullrom'; + + } + + Spline.prototype = Object.create( CatmullRomCurve3.prototype ); + + Object.assign( Spline.prototype, { + + initFromArray: function ( /* a */ ) { + + console.error( 'THREE.Spline: .initFromArray() has been removed.' ); + + }, + getControlPointsArray: function ( /* optionalTarget */ ) { + + console.error( 'THREE.Spline: .getControlPointsArray() has been removed.' ); + + }, + reparametrizeByArcLength: function ( /* samplingCoef */ ) { + + console.error( 'THREE.Spline: .reparametrizeByArcLength() has been removed.' ); + + } + + } ); + + // + + function AxisHelper( size ) { + + console.warn( 'THREE.AxisHelper has been renamed to THREE.AxesHelper.' ); + return new AxesHelper( size ); + + } + + function BoundingBoxHelper( object, color ) { + + console.warn( 'THREE.BoundingBoxHelper has been deprecated. Creating a THREE.BoxHelper instead.' ); + return new BoxHelper( object, color ); + + } + + function EdgesHelper( object, hex ) { + + console.warn( 'THREE.EdgesHelper has been removed. Use THREE.EdgesGeometry instead.' ); + return new LineSegments( new EdgesGeometry( object.geometry ), new LineBasicMaterial( { color: hex !== undefined ? hex : 0xffffff } ) ); + + } + + GridHelper.prototype.setColors = function () { + + console.error( 'THREE.GridHelper: setColors() has been deprecated, pass them in the constructor instead.' ); + + }; + + SkeletonHelper.prototype.update = function () { + + console.error( 'THREE.SkeletonHelper: update() no longer needs to be called.' ); + + }; + + function WireframeHelper( object, hex ) { + + console.warn( 'THREE.WireframeHelper has been removed. Use THREE.WireframeGeometry instead.' ); + return new LineSegments( new WireframeGeometry( object.geometry ), new LineBasicMaterial( { color: hex !== undefined ? hex : 0xffffff } ) ); + + } + + // + + Object.assign( Loader.prototype, { + + extractUrlBase: function ( url ) { + + console.warn( 'THREE.Loader: .extractUrlBase() has been deprecated. Use THREE.LoaderUtils.extractUrlBase() instead.' ); + return LoaderUtils.extractUrlBase( url ); + + } + + } ); + + Loader.Handlers = { + + add: function ( /* regex, loader */ ) { + + console.error( 'THREE.Loader: Handlers.add() has been removed. Use LoadingManager.addHandler() instead.' ); + + }, + + get: function ( /* file */ ) { + + console.error( 'THREE.Loader: Handlers.get() has been removed. Use LoadingManager.getHandler() instead.' ); + + } + + }; + + function XHRLoader( manager ) { + + console.warn( 'THREE.XHRLoader has been renamed to THREE.FileLoader.' ); + return new FileLoader( manager ); + + } + + function BinaryTextureLoader( manager ) { + + console.warn( 'THREE.BinaryTextureLoader has been renamed to THREE.DataTextureLoader.' ); + return new DataTextureLoader( manager ); + + } + + Object.assign( ObjectLoader.prototype, { + + setTexturePath: function ( value ) { + + console.warn( 'THREE.ObjectLoader: .setTexturePath() has been renamed to .setResourcePath().' ); + return this.setResourcePath( value ); + + } + + } ); + + // + + Object.assign( Box2.prototype, { + + center: function ( optionalTarget ) { + + console.warn( 'THREE.Box2: .center() has been renamed to .getCenter().' ); + return this.getCenter( optionalTarget ); + + }, + empty: function () { + + console.warn( 'THREE.Box2: .empty() has been renamed to .isEmpty().' ); + return this.isEmpty(); + + }, + isIntersectionBox: function ( box ) { + + console.warn( 'THREE.Box2: .isIntersectionBox() has been renamed to .intersectsBox().' ); + return this.intersectsBox( box ); + + }, + size: function ( optionalTarget ) { + + console.warn( 'THREE.Box2: .size() has been renamed to .getSize().' ); + return this.getSize( optionalTarget ); + + } + } ); + + Object.assign( Box3.prototype, { + + center: function ( optionalTarget ) { + + console.warn( 'THREE.Box3: .center() has been renamed to .getCenter().' ); + return this.getCenter( optionalTarget ); + + }, + empty: function () { + + console.warn( 'THREE.Box3: .empty() has been renamed to .isEmpty().' ); + return this.isEmpty(); + + }, + isIntersectionBox: function ( box ) { + + console.warn( 'THREE.Box3: .isIntersectionBox() has been renamed to .intersectsBox().' ); + return this.intersectsBox( box ); + + }, + isIntersectionSphere: function ( sphere ) { + + console.warn( 'THREE.Box3: .isIntersectionSphere() has been renamed to .intersectsSphere().' ); + return this.intersectsSphere( sphere ); + + }, + size: function ( optionalTarget ) { + + console.warn( 'THREE.Box3: .size() has been renamed to .getSize().' ); + return this.getSize( optionalTarget ); + + } + } ); + + Object.assign( Sphere.prototype, { + + empty: function () { + + console.warn( 'THREE.Sphere: .empty() has been renamed to .isEmpty().' ); + return this.isEmpty(); + + }, + + } ); + + Frustum.prototype.setFromMatrix = function ( m ) { + + console.warn( 'THREE.Frustum: .setFromMatrix() has been renamed to .setFromProjectionMatrix().' ); + return this.setFromProjectionMatrix( m ); + + }; + + Line3.prototype.center = function ( optionalTarget ) { + + console.warn( 'THREE.Line3: .center() has been renamed to .getCenter().' ); + return this.getCenter( optionalTarget ); + + }; + + Object.assign( MathUtils, { + + random16: function () { + + console.warn( 'THREE.Math: .random16() has been deprecated. Use Math.random() instead.' ); + return Math.random(); + + }, + + nearestPowerOfTwo: function ( value ) { + + console.warn( 'THREE.Math: .nearestPowerOfTwo() has been renamed to .floorPowerOfTwo().' ); + return MathUtils.floorPowerOfTwo( value ); + + }, + + nextPowerOfTwo: function ( value ) { + + console.warn( 'THREE.Math: .nextPowerOfTwo() has been renamed to .ceilPowerOfTwo().' ); + return MathUtils.ceilPowerOfTwo( value ); + + } + + } ); + + Object.assign( Matrix3.prototype, { + + flattenToArrayOffset: function ( array, offset ) { + + console.warn( "THREE.Matrix3: .flattenToArrayOffset() has been deprecated. Use .toArray() instead." ); + return this.toArray( array, offset ); + + }, + multiplyVector3: function ( vector ) { + + console.warn( 'THREE.Matrix3: .multiplyVector3() has been removed. Use vector.applyMatrix3( matrix ) instead.' ); + return vector.applyMatrix3( this ); + + }, + multiplyVector3Array: function ( /* a */ ) { + + console.error( 'THREE.Matrix3: .multiplyVector3Array() has been removed.' ); + + }, + applyToBufferAttribute: function ( attribute ) { + + console.warn( 'THREE.Matrix3: .applyToBufferAttribute() has been removed. Use attribute.applyMatrix3( matrix ) instead.' ); + return attribute.applyMatrix3( this ); + + }, + applyToVector3Array: function ( /* array, offset, length */ ) { + + console.error( 'THREE.Matrix3: .applyToVector3Array() has been removed.' ); + + } + + } ); + + Object.assign( Matrix4.prototype, { + + extractPosition: function ( m ) { + + console.warn( 'THREE.Matrix4: .extractPosition() has been renamed to .copyPosition().' ); + return this.copyPosition( m ); + + }, + flattenToArrayOffset: function ( array, offset ) { + + console.warn( "THREE.Matrix4: .flattenToArrayOffset() has been deprecated. Use .toArray() instead." ); + return this.toArray( array, offset ); + + }, + getPosition: function () { + + console.warn( 'THREE.Matrix4: .getPosition() has been removed. Use Vector3.setFromMatrixPosition( matrix ) instead.' ); + return new Vector3().setFromMatrixColumn( this, 3 ); + + }, + setRotationFromQuaternion: function ( q ) { + + console.warn( 'THREE.Matrix4: .setRotationFromQuaternion() has been renamed to .makeRotationFromQuaternion().' ); + return this.makeRotationFromQuaternion( q ); + + }, + multiplyToArray: function () { + + console.warn( 'THREE.Matrix4: .multiplyToArray() has been removed.' ); + + }, + multiplyVector3: function ( vector ) { + + console.warn( 'THREE.Matrix4: .multiplyVector3() has been removed. Use vector.applyMatrix4( matrix ) instead.' ); + return vector.applyMatrix4( this ); + + }, + multiplyVector4: function ( vector ) { + + console.warn( 'THREE.Matrix4: .multiplyVector4() has been removed. Use vector.applyMatrix4( matrix ) instead.' ); + return vector.applyMatrix4( this ); + + }, + multiplyVector3Array: function ( /* a */ ) { + + console.error( 'THREE.Matrix4: .multiplyVector3Array() has been removed.' ); + + }, + rotateAxis: function ( v ) { + + console.warn( 'THREE.Matrix4: .rotateAxis() has been removed. Use Vector3.transformDirection( matrix ) instead.' ); + v.transformDirection( this ); + + }, + crossVector: function ( vector ) { + + console.warn( 'THREE.Matrix4: .crossVector() has been removed. Use vector.applyMatrix4( matrix ) instead.' ); + return vector.applyMatrix4( this ); + + }, + translate: function () { + + console.error( 'THREE.Matrix4: .translate() has been removed.' ); + + }, + rotateX: function () { + + console.error( 'THREE.Matrix4: .rotateX() has been removed.' ); + + }, + rotateY: function () { + + console.error( 'THREE.Matrix4: .rotateY() has been removed.' ); + + }, + rotateZ: function () { + + console.error( 'THREE.Matrix4: .rotateZ() has been removed.' ); + + }, + rotateByAxis: function () { + + console.error( 'THREE.Matrix4: .rotateByAxis() has been removed.' ); + + }, + applyToBufferAttribute: function ( attribute ) { + + console.warn( 'THREE.Matrix4: .applyToBufferAttribute() has been removed. Use attribute.applyMatrix4( matrix ) instead.' ); + return attribute.applyMatrix4( this ); + + }, + applyToVector3Array: function ( /* array, offset, length */ ) { + + console.error( 'THREE.Matrix4: .applyToVector3Array() has been removed.' ); + + }, + makeFrustum: function ( left, right, bottom, top, near, far ) { + + console.warn( 'THREE.Matrix4: .makeFrustum() has been removed. Use .makePerspective( left, right, top, bottom, near, far ) instead.' ); + return this.makePerspective( left, right, top, bottom, near, far ); + + } + + } ); + + Plane.prototype.isIntersectionLine = function ( line ) { + + console.warn( 'THREE.Plane: .isIntersectionLine() has been renamed to .intersectsLine().' ); + return this.intersectsLine( line ); + + }; + + Quaternion.prototype.multiplyVector3 = function ( vector ) { + + console.warn( 'THREE.Quaternion: .multiplyVector3() has been removed. Use is now vector.applyQuaternion( quaternion ) instead.' ); + return vector.applyQuaternion( this ); + + }; + + Object.assign( Ray.prototype, { + + isIntersectionBox: function ( box ) { + + console.warn( 'THREE.Ray: .isIntersectionBox() has been renamed to .intersectsBox().' ); + return this.intersectsBox( box ); + + }, + isIntersectionPlane: function ( plane ) { + + console.warn( 'THREE.Ray: .isIntersectionPlane() has been renamed to .intersectsPlane().' ); + return this.intersectsPlane( plane ); + + }, + isIntersectionSphere: function ( sphere ) { + + console.warn( 'THREE.Ray: .isIntersectionSphere() has been renamed to .intersectsSphere().' ); + return this.intersectsSphere( sphere ); + + } + + } ); + + Object.assign( Triangle.prototype, { + + area: function () { + + console.warn( 'THREE.Triangle: .area() has been renamed to .getArea().' ); + return this.getArea(); + + }, + barycoordFromPoint: function ( point, target ) { + + console.warn( 'THREE.Triangle: .barycoordFromPoint() has been renamed to .getBarycoord().' ); + return this.getBarycoord( point, target ); + + }, + midpoint: function ( target ) { + + console.warn( 'THREE.Triangle: .midpoint() has been renamed to .getMidpoint().' ); + return this.getMidpoint( target ); + + }, + normal: function ( target ) { + + console.warn( 'THREE.Triangle: .normal() has been renamed to .getNormal().' ); + return this.getNormal( target ); + + }, + plane: function ( target ) { + + console.warn( 'THREE.Triangle: .plane() has been renamed to .getPlane().' ); + return this.getPlane( target ); + + } + + } ); + + Object.assign( Triangle, { + + barycoordFromPoint: function ( point, a, b, c, target ) { + + console.warn( 'THREE.Triangle: .barycoordFromPoint() has been renamed to .getBarycoord().' ); + return Triangle.getBarycoord( point, a, b, c, target ); + + }, + normal: function ( a, b, c, target ) { + + console.warn( 'THREE.Triangle: .normal() has been renamed to .getNormal().' ); + return Triangle.getNormal( a, b, c, target ); + + } + + } ); + + Object.assign( Shape.prototype, { + + extractAllPoints: function ( divisions ) { + + console.warn( 'THREE.Shape: .extractAllPoints() has been removed. Use .extractPoints() instead.' ); + return this.extractPoints( divisions ); + + }, + extrude: function ( options ) { + + console.warn( 'THREE.Shape: .extrude() has been removed. Use ExtrudeGeometry() instead.' ); + return new ExtrudeGeometry( this, options ); + + }, + makeGeometry: function ( options ) { + + console.warn( 'THREE.Shape: .makeGeometry() has been removed. Use ShapeGeometry() instead.' ); + return new ShapeGeometry( this, options ); + + } + + } ); + + Object.assign( Vector2.prototype, { + + fromAttribute: function ( attribute, index, offset ) { + + console.warn( 'THREE.Vector2: .fromAttribute() has been renamed to .fromBufferAttribute().' ); + return this.fromBufferAttribute( attribute, index, offset ); + + }, + distanceToManhattan: function ( v ) { + + console.warn( 'THREE.Vector2: .distanceToManhattan() has been renamed to .manhattanDistanceTo().' ); + return this.manhattanDistanceTo( v ); + + }, + lengthManhattan: function () { + + console.warn( 'THREE.Vector2: .lengthManhattan() has been renamed to .manhattanLength().' ); + return this.manhattanLength(); + + } + + } ); + + Object.assign( Vector3.prototype, { + + setEulerFromRotationMatrix: function () { + + console.error( 'THREE.Vector3: .setEulerFromRotationMatrix() has been removed. Use Euler.setFromRotationMatrix() instead.' ); + + }, + setEulerFromQuaternion: function () { + + console.error( 'THREE.Vector3: .setEulerFromQuaternion() has been removed. Use Euler.setFromQuaternion() instead.' ); + + }, + getPositionFromMatrix: function ( m ) { + + console.warn( 'THREE.Vector3: .getPositionFromMatrix() has been renamed to .setFromMatrixPosition().' ); + return this.setFromMatrixPosition( m ); + + }, + getScaleFromMatrix: function ( m ) { + + console.warn( 'THREE.Vector3: .getScaleFromMatrix() has been renamed to .setFromMatrixScale().' ); + return this.setFromMatrixScale( m ); + + }, + getColumnFromMatrix: function ( index, matrix ) { + + console.warn( 'THREE.Vector3: .getColumnFromMatrix() has been renamed to .setFromMatrixColumn().' ); + return this.setFromMatrixColumn( matrix, index ); + + }, + applyProjection: function ( m ) { + + console.warn( 'THREE.Vector3: .applyProjection() has been removed. Use .applyMatrix4( m ) instead.' ); + return this.applyMatrix4( m ); + + }, + fromAttribute: function ( attribute, index, offset ) { + + console.warn( 'THREE.Vector3: .fromAttribute() has been renamed to .fromBufferAttribute().' ); + return this.fromBufferAttribute( attribute, index, offset ); + + }, + distanceToManhattan: function ( v ) { + + console.warn( 'THREE.Vector3: .distanceToManhattan() has been renamed to .manhattanDistanceTo().' ); + return this.manhattanDistanceTo( v ); + + }, + lengthManhattan: function () { + + console.warn( 'THREE.Vector3: .lengthManhattan() has been renamed to .manhattanLength().' ); + return this.manhattanLength(); + + } + + } ); + + Object.assign( Vector4.prototype, { + + fromAttribute: function ( attribute, index, offset ) { + + console.warn( 'THREE.Vector4: .fromAttribute() has been renamed to .fromBufferAttribute().' ); + return this.fromBufferAttribute( attribute, index, offset ); + + }, + lengthManhattan: function () { + + console.warn( 'THREE.Vector4: .lengthManhattan() has been renamed to .manhattanLength().' ); + return this.manhattanLength(); + + } + + } ); + + // + + Object.assign( Geometry.prototype, { + + computeTangents: function () { + + console.error( 'THREE.Geometry: .computeTangents() has been removed.' ); + + }, + computeLineDistances: function () { + + console.error( 'THREE.Geometry: .computeLineDistances() has been removed. Use THREE.Line.computeLineDistances() instead.' ); + + }, + applyMatrix: function ( matrix ) { + + console.warn( 'THREE.Geometry: .applyMatrix() has been renamed to .applyMatrix4().' ); + return this.applyMatrix4( matrix ); + + } + + } ); + + Object.assign( Object3D.prototype, { + + getChildByName: function ( name ) { + + console.warn( 'THREE.Object3D: .getChildByName() has been renamed to .getObjectByName().' ); + return this.getObjectByName( name ); + + }, + renderDepth: function () { + + console.warn( 'THREE.Object3D: .renderDepth has been removed. Use .renderOrder, instead.' ); + + }, + translate: function ( distance, axis ) { + + console.warn( 'THREE.Object3D: .translate() has been removed. Use .translateOnAxis( axis, distance ) instead.' ); + return this.translateOnAxis( axis, distance ); + + }, + getWorldRotation: function () { + + console.error( 'THREE.Object3D: .getWorldRotation() has been removed. Use THREE.Object3D.getWorldQuaternion( target ) instead.' ); + + }, + applyMatrix: function ( matrix ) { + + console.warn( 'THREE.Object3D: .applyMatrix() has been renamed to .applyMatrix4().' ); + return this.applyMatrix4( matrix ); + + } + + } ); + + Object.defineProperties( Object3D.prototype, { + + eulerOrder: { + get: function () { + + console.warn( 'THREE.Object3D: .eulerOrder is now .rotation.order.' ); + return this.rotation.order; + + }, + set: function ( value ) { + + console.warn( 'THREE.Object3D: .eulerOrder is now .rotation.order.' ); + this.rotation.order = value; + + } + }, + useQuaternion: { + get: function () { + + console.warn( 'THREE.Object3D: .useQuaternion has been removed. The library now uses quaternions by default.' ); + + }, + set: function () { + + console.warn( 'THREE.Object3D: .useQuaternion has been removed. The library now uses quaternions by default.' ); + + } + } + + } ); + + Object.assign( Mesh.prototype, { + + setDrawMode: function () { + + console.error( 'THREE.Mesh: .setDrawMode() has been removed. The renderer now always assumes THREE.TrianglesDrawMode. Transform your geometry via BufferGeometryUtils.toTrianglesDrawMode() if necessary.' ); + + }, + + } ); + + Object.defineProperties( Mesh.prototype, { + + drawMode: { + get: function () { + + console.error( 'THREE.Mesh: .drawMode has been removed. The renderer now always assumes THREE.TrianglesDrawMode.' ); + return TrianglesDrawMode; + + }, + set: function () { + + console.error( 'THREE.Mesh: .drawMode has been removed. The renderer now always assumes THREE.TrianglesDrawMode. Transform your geometry via BufferGeometryUtils.toTrianglesDrawMode() if necessary.' ); + + } + } + + } ); + + Object.defineProperties( LOD.prototype, { + + objects: { + get: function () { + + console.warn( 'THREE.LOD: .objects has been renamed to .levels.' ); + return this.levels; + + } + } + + } ); + + Object.defineProperty( Skeleton.prototype, 'useVertexTexture', { + + get: function () { + + console.warn( 'THREE.Skeleton: useVertexTexture has been removed.' ); + + }, + set: function () { + + console.warn( 'THREE.Skeleton: useVertexTexture has been removed.' ); + + } + + } ); + + SkinnedMesh.prototype.initBones = function () { + + console.error( 'THREE.SkinnedMesh: initBones() has been removed.' ); + + }; + + Object.defineProperty( Curve.prototype, '__arcLengthDivisions', { + + get: function () { + + console.warn( 'THREE.Curve: .__arcLengthDivisions is now .arcLengthDivisions.' ); + return this.arcLengthDivisions; + + }, + set: function ( value ) { + + console.warn( 'THREE.Curve: .__arcLengthDivisions is now .arcLengthDivisions.' ); + this.arcLengthDivisions = value; + + } + + } ); + + // + + PerspectiveCamera.prototype.setLens = function ( focalLength, filmGauge ) { + + console.warn( "THREE.PerspectiveCamera.setLens is deprecated. " + + "Use .setFocalLength and .filmGauge for a photographic setup." ); + + if ( filmGauge !== undefined ) { this.filmGauge = filmGauge; } + this.setFocalLength( focalLength ); + + }; + + // + + Object.defineProperties( Light.prototype, { + onlyShadow: { + set: function () { + + console.warn( 'THREE.Light: .onlyShadow has been removed.' ); + + } + }, + shadowCameraFov: { + set: function ( value ) { + + console.warn( 'THREE.Light: .shadowCameraFov is now .shadow.camera.fov.' ); + this.shadow.camera.fov = value; + + } + }, + shadowCameraLeft: { + set: function ( value ) { + + console.warn( 'THREE.Light: .shadowCameraLeft is now .shadow.camera.left.' ); + this.shadow.camera.left = value; + + } + }, + shadowCameraRight: { + set: function ( value ) { + + console.warn( 'THREE.Light: .shadowCameraRight is now .shadow.camera.right.' ); + this.shadow.camera.right = value; + + } + }, + shadowCameraTop: { + set: function ( value ) { + + console.warn( 'THREE.Light: .shadowCameraTop is now .shadow.camera.top.' ); + this.shadow.camera.top = value; + + } + }, + shadowCameraBottom: { + set: function ( value ) { + + console.warn( 'THREE.Light: .shadowCameraBottom is now .shadow.camera.bottom.' ); + this.shadow.camera.bottom = value; + + } + }, + shadowCameraNear: { + set: function ( value ) { + + console.warn( 'THREE.Light: .shadowCameraNear is now .shadow.camera.near.' ); + this.shadow.camera.near = value; + + } + }, + shadowCameraFar: { + set: function ( value ) { + + console.warn( 'THREE.Light: .shadowCameraFar is now .shadow.camera.far.' ); + this.shadow.camera.far = value; + + } + }, + shadowCameraVisible: { + set: function () { + + console.warn( 'THREE.Light: .shadowCameraVisible has been removed. Use new THREE.CameraHelper( light.shadow.camera ) instead.' ); + + } + }, + shadowBias: { + set: function ( value ) { + + console.warn( 'THREE.Light: .shadowBias is now .shadow.bias.' ); + this.shadow.bias = value; + + } + }, + shadowDarkness: { + set: function () { + + console.warn( 'THREE.Light: .shadowDarkness has been removed.' ); + + } + }, + shadowMapWidth: { + set: function ( value ) { + + console.warn( 'THREE.Light: .shadowMapWidth is now .shadow.mapSize.width.' ); + this.shadow.mapSize.width = value; + + } + }, + shadowMapHeight: { + set: function ( value ) { + + console.warn( 'THREE.Light: .shadowMapHeight is now .shadow.mapSize.height.' ); + this.shadow.mapSize.height = value; + + } + } + } ); + + // + + Object.defineProperties( BufferAttribute.prototype, { + + length: { + get: function () { + + console.warn( 'THREE.BufferAttribute: .length has been deprecated. Use .count instead.' ); + return this.array.length; + + } + }, + dynamic: { + get: function () { + + console.warn( 'THREE.BufferAttribute: .dynamic has been deprecated. Use .usage instead.' ); + return this.usage === DynamicDrawUsage; + + }, + set: function ( /* value */ ) { + + console.warn( 'THREE.BufferAttribute: .dynamic has been deprecated. Use .usage instead.' ); + this.setUsage( DynamicDrawUsage ); + + } + } + + } ); + + Object.assign( BufferAttribute.prototype, { + setDynamic: function ( value ) { + + console.warn( 'THREE.BufferAttribute: .setDynamic() has been deprecated. Use .setUsage() instead.' ); + this.setUsage( value === true ? DynamicDrawUsage : StaticDrawUsage ); + return this; + + }, + copyIndicesArray: function ( /* indices */ ) { + + console.error( 'THREE.BufferAttribute: .copyIndicesArray() has been removed.' ); + + }, + setArray: function ( /* array */ ) { + + console.error( 'THREE.BufferAttribute: .setArray has been removed. Use BufferGeometry .setAttribute to replace/resize attribute buffers' ); + + } + } ); + + Object.assign( BufferGeometry.prototype, { + + addIndex: function ( index ) { + + console.warn( 'THREE.BufferGeometry: .addIndex() has been renamed to .setIndex().' ); + this.setIndex( index ); + + }, + addAttribute: function ( name, attribute ) { + + console.warn( 'THREE.BufferGeometry: .addAttribute() has been renamed to .setAttribute().' ); + + if ( ! ( attribute && attribute.isBufferAttribute ) && ! ( attribute && attribute.isInterleavedBufferAttribute ) ) { + + console.warn( 'THREE.BufferGeometry: .addAttribute() now expects ( name, attribute ).' ); + + return this.setAttribute( name, new BufferAttribute( arguments[ 1 ], arguments[ 2 ] ) ); + + } + + if ( name === 'index' ) { + + console.warn( 'THREE.BufferGeometry.addAttribute: Use .setIndex() for index attribute.' ); + this.setIndex( attribute ); + + return this; + + } + + return this.setAttribute( name, attribute ); + + }, + addDrawCall: function ( start, count, indexOffset ) { + + if ( indexOffset !== undefined ) { + + console.warn( 'THREE.BufferGeometry: .addDrawCall() no longer supports indexOffset.' ); + + } + + console.warn( 'THREE.BufferGeometry: .addDrawCall() is now .addGroup().' ); + this.addGroup( start, count ); + + }, + clearDrawCalls: function () { + + console.warn( 'THREE.BufferGeometry: .clearDrawCalls() is now .clearGroups().' ); + this.clearGroups(); + + }, + computeTangents: function () { + + console.warn( 'THREE.BufferGeometry: .computeTangents() has been removed.' ); + + }, + computeOffsets: function () { + + console.warn( 'THREE.BufferGeometry: .computeOffsets() has been removed.' ); + + }, + removeAttribute: function ( name ) { + + console.warn( 'THREE.BufferGeometry: .removeAttribute() has been renamed to .deleteAttribute().' ); + + return this.deleteAttribute( name ); + + }, + applyMatrix: function ( matrix ) { + + console.warn( 'THREE.BufferGeometry: .applyMatrix() has been renamed to .applyMatrix4().' ); + return this.applyMatrix4( matrix ); + + } + + } ); + + Object.defineProperties( BufferGeometry.prototype, { + + drawcalls: { + get: function () { + + console.error( 'THREE.BufferGeometry: .drawcalls has been renamed to .groups.' ); + return this.groups; + + } + }, + offsets: { + get: function () { + + console.warn( 'THREE.BufferGeometry: .offsets has been renamed to .groups.' ); + return this.groups; + + } + } + + } ); + + Object.defineProperties( InstancedBufferGeometry.prototype, { + + maxInstancedCount: { + get: function () { + + console.warn( 'THREE.InstancedBufferGeometry: .maxInstancedCount has been renamed to .instanceCount.' ); + return this.instanceCount; + + }, + set: function ( value ) { + + console.warn( 'THREE.InstancedBufferGeometry: .maxInstancedCount has been renamed to .instanceCount.' ); + this.instanceCount = value; + + } + } + + } ); + + Object.defineProperties( Raycaster.prototype, { + + linePrecision: { + get: function () { + + console.warn( 'THREE.Raycaster: .linePrecision has been deprecated. Use .params.Line.threshold instead.' ); + return this.params.Line.threshold; + + }, + set: function ( value ) { + + console.warn( 'THREE.Raycaster: .linePrecision has been deprecated. Use .params.Line.threshold instead.' ); + this.params.Line.threshold = value; + + } + } + + } ); + + Object.defineProperties( InterleavedBuffer.prototype, { + + dynamic: { + get: function () { + + console.warn( 'THREE.InterleavedBuffer: .length has been deprecated. Use .usage instead.' ); + return this.usage === DynamicDrawUsage; + + }, + set: function ( value ) { + + console.warn( 'THREE.InterleavedBuffer: .length has been deprecated. Use .usage instead.' ); + this.setUsage( value ); + + } + } + + } ); + + Object.assign( InterleavedBuffer.prototype, { + setDynamic: function ( value ) { + + console.warn( 'THREE.InterleavedBuffer: .setDynamic() has been deprecated. Use .setUsage() instead.' ); + this.setUsage( value === true ? DynamicDrawUsage : StaticDrawUsage ); + return this; + + }, + setArray: function ( /* array */ ) { + + console.error( 'THREE.InterleavedBuffer: .setArray has been removed. Use BufferGeometry .setAttribute to replace/resize attribute buffers' ); + + } + } ); + + // + + Object.assign( ExtrudeBufferGeometry.prototype, { + + getArrays: function () { + + console.error( 'THREE.ExtrudeBufferGeometry: .getArrays() has been removed.' ); + + }, + + addShapeList: function () { + + console.error( 'THREE.ExtrudeBufferGeometry: .addShapeList() has been removed.' ); + + }, + + addShape: function () { + + console.error( 'THREE.ExtrudeBufferGeometry: .addShape() has been removed.' ); + + } + + } ); + + // + + Object.assign( Scene.prototype, { + + dispose: function () { + + console.error( 'THREE.Scene: .dispose() has been removed.' ); + + } + + } ); + + // + + Object.defineProperties( Uniform.prototype, { + + dynamic: { + set: function () { + + console.warn( 'THREE.Uniform: .dynamic has been removed. Use object.onBeforeRender() instead.' ); + + } + }, + onUpdate: { + value: function () { + + console.warn( 'THREE.Uniform: .onUpdate() has been removed. Use object.onBeforeRender() instead.' ); + return this; + + } + } + + } ); + + // + + Object.defineProperties( Material.prototype, { + + wrapAround: { + get: function () { + + console.warn( 'THREE.Material: .wrapAround has been removed.' ); + + }, + set: function () { + + console.warn( 'THREE.Material: .wrapAround has been removed.' ); + + } + }, + + overdraw: { + get: function () { + + console.warn( 'THREE.Material: .overdraw has been removed.' ); + + }, + set: function () { + + console.warn( 'THREE.Material: .overdraw has been removed.' ); + + } + }, + + wrapRGB: { + get: function () { + + console.warn( 'THREE.Material: .wrapRGB has been removed.' ); + return new Color(); + + } + }, + + shading: { + get: function () { + + console.error( 'THREE.' + this.type + ': .shading has been removed. Use the boolean .flatShading instead.' ); + + }, + set: function ( value ) { + + console.warn( 'THREE.' + this.type + ': .shading has been removed. Use the boolean .flatShading instead.' ); + this.flatShading = ( value === FlatShading ); + + } + }, + + stencilMask: { + get: function () { + + console.warn( 'THREE.' + this.type + ': .stencilMask has been removed. Use .stencilFuncMask instead.' ); + return this.stencilFuncMask; + + }, + set: function ( value ) { + + console.warn( 'THREE.' + this.type + ': .stencilMask has been removed. Use .stencilFuncMask instead.' ); + this.stencilFuncMask = value; + + } + } + + } ); + + Object.defineProperties( MeshPhongMaterial.prototype, { + + metal: { + get: function () { + + console.warn( 'THREE.MeshPhongMaterial: .metal has been removed. Use THREE.MeshStandardMaterial instead.' ); + return false; + + }, + set: function () { + + console.warn( 'THREE.MeshPhongMaterial: .metal has been removed. Use THREE.MeshStandardMaterial instead' ); + + } + } + + } ); + + Object.defineProperties( MeshPhysicalMaterial.prototype, { + + transparency: { + get: function () { + + console.warn( 'THREE.MeshPhysicalMaterial: .transparency has been renamed to .transmission.' ); + return this.transmission; + + }, + set: function ( value ) { + + console.warn( 'THREE.MeshPhysicalMaterial: .transparency has been renamed to .transmission.' ); + this.transmission = value; + + } + } + + } ); + + Object.defineProperties( ShaderMaterial.prototype, { + + derivatives: { + get: function () { + + console.warn( 'THREE.ShaderMaterial: .derivatives has been moved to .extensions.derivatives.' ); + return this.extensions.derivatives; + + }, + set: function ( value ) { + + console.warn( 'THREE. ShaderMaterial: .derivatives has been moved to .extensions.derivatives.' ); + this.extensions.derivatives = value; + + } + } + + } ); + + // + + Object.assign( WebGLRenderer.prototype, { + + clearTarget: function ( renderTarget, color, depth, stencil ) { + + console.warn( 'THREE.WebGLRenderer: .clearTarget() has been deprecated. Use .setRenderTarget() and .clear() instead.' ); + this.setRenderTarget( renderTarget ); + this.clear( color, depth, stencil ); + + }, + animate: function ( callback ) { + + console.warn( 'THREE.WebGLRenderer: .animate() is now .setAnimationLoop().' ); + this.setAnimationLoop( callback ); + + }, + getCurrentRenderTarget: function () { + + console.warn( 'THREE.WebGLRenderer: .getCurrentRenderTarget() is now .getRenderTarget().' ); + return this.getRenderTarget(); + + }, + getMaxAnisotropy: function () { + + console.warn( 'THREE.WebGLRenderer: .getMaxAnisotropy() is now .capabilities.getMaxAnisotropy().' ); + return this.capabilities.getMaxAnisotropy(); + + }, + getPrecision: function () { + + console.warn( 'THREE.WebGLRenderer: .getPrecision() is now .capabilities.precision.' ); + return this.capabilities.precision; + + }, + resetGLState: function () { + + console.warn( 'THREE.WebGLRenderer: .resetGLState() is now .state.reset().' ); + return this.state.reset(); + + }, + supportsFloatTextures: function () { + + console.warn( 'THREE.WebGLRenderer: .supportsFloatTextures() is now .extensions.get( \'OES_texture_float\' ).' ); + return this.extensions.get( 'OES_texture_float' ); + + }, + supportsHalfFloatTextures: function () { + + console.warn( 'THREE.WebGLRenderer: .supportsHalfFloatTextures() is now .extensions.get( \'OES_texture_half_float\' ).' ); + return this.extensions.get( 'OES_texture_half_float' ); + + }, + supportsStandardDerivatives: function () { + + console.warn( 'THREE.WebGLRenderer: .supportsStandardDerivatives() is now .extensions.get( \'OES_standard_derivatives\' ).' ); + return this.extensions.get( 'OES_standard_derivatives' ); + + }, + supportsCompressedTextureS3TC: function () { + + console.warn( 'THREE.WebGLRenderer: .supportsCompressedTextureS3TC() is now .extensions.get( \'WEBGL_compressed_texture_s3tc\' ).' ); + return this.extensions.get( 'WEBGL_compressed_texture_s3tc' ); + + }, + supportsCompressedTexturePVRTC: function () { + + console.warn( 'THREE.WebGLRenderer: .supportsCompressedTexturePVRTC() is now .extensions.get( \'WEBGL_compressed_texture_pvrtc\' ).' ); + return this.extensions.get( 'WEBGL_compressed_texture_pvrtc' ); + + }, + supportsBlendMinMax: function () { + + console.warn( 'THREE.WebGLRenderer: .supportsBlendMinMax() is now .extensions.get( \'EXT_blend_minmax\' ).' ); + return this.extensions.get( 'EXT_blend_minmax' ); + + }, + supportsVertexTextures: function () { + + console.warn( 'THREE.WebGLRenderer: .supportsVertexTextures() is now .capabilities.vertexTextures.' ); + return this.capabilities.vertexTextures; + + }, + supportsInstancedArrays: function () { + + console.warn( 'THREE.WebGLRenderer: .supportsInstancedArrays() is now .extensions.get( \'ANGLE_instanced_arrays\' ).' ); + return this.extensions.get( 'ANGLE_instanced_arrays' ); + + }, + enableScissorTest: function ( boolean ) { + + console.warn( 'THREE.WebGLRenderer: .enableScissorTest() is now .setScissorTest().' ); + this.setScissorTest( boolean ); + + }, + initMaterial: function () { + + console.warn( 'THREE.WebGLRenderer: .initMaterial() has been removed.' ); + + }, + addPrePlugin: function () { + + console.warn( 'THREE.WebGLRenderer: .addPrePlugin() has been removed.' ); + + }, + addPostPlugin: function () { + + console.warn( 'THREE.WebGLRenderer: .addPostPlugin() has been removed.' ); + + }, + updateShadowMap: function () { + + console.warn( 'THREE.WebGLRenderer: .updateShadowMap() has been removed.' ); + + }, + setFaceCulling: function () { + + console.warn( 'THREE.WebGLRenderer: .setFaceCulling() has been removed.' ); + + }, + allocTextureUnit: function () { + + console.warn( 'THREE.WebGLRenderer: .allocTextureUnit() has been removed.' ); + + }, + setTexture: function () { + + console.warn( 'THREE.WebGLRenderer: .setTexture() has been removed.' ); + + }, + setTexture2D: function () { + + console.warn( 'THREE.WebGLRenderer: .setTexture2D() has been removed.' ); + + }, + setTextureCube: function () { + + console.warn( 'THREE.WebGLRenderer: .setTextureCube() has been removed.' ); + + }, + getActiveMipMapLevel: function () { + + console.warn( 'THREE.WebGLRenderer: .getActiveMipMapLevel() is now .getActiveMipmapLevel().' ); + return this.getActiveMipmapLevel(); + + } + + } ); + + Object.defineProperties( WebGLRenderer.prototype, { + + shadowMapEnabled: { + get: function () { + + return this.shadowMap.enabled; + + }, + set: function ( value ) { + + console.warn( 'THREE.WebGLRenderer: .shadowMapEnabled is now .shadowMap.enabled.' ); + this.shadowMap.enabled = value; + + } + }, + shadowMapType: { + get: function () { + + return this.shadowMap.type; + + }, + set: function ( value ) { + + console.warn( 'THREE.WebGLRenderer: .shadowMapType is now .shadowMap.type.' ); + this.shadowMap.type = value; + + } + }, + shadowMapCullFace: { + get: function () { + + console.warn( 'THREE.WebGLRenderer: .shadowMapCullFace has been removed. Set Material.shadowSide instead.' ); + return undefined; + + }, + set: function ( /* value */ ) { + + console.warn( 'THREE.WebGLRenderer: .shadowMapCullFace has been removed. Set Material.shadowSide instead.' ); + + } + }, + context: { + get: function () { + + console.warn( 'THREE.WebGLRenderer: .context has been removed. Use .getContext() instead.' ); + return this.getContext(); + + } + }, + vr: { + get: function () { + + console.warn( 'THREE.WebGLRenderer: .vr has been renamed to .xr' ); + return this.xr; + + } + }, + gammaInput: { + get: function () { + + console.warn( 'THREE.WebGLRenderer: .gammaInput has been removed. Set the encoding for textures via Texture.encoding instead.' ); + return false; + + }, + set: function () { + + console.warn( 'THREE.WebGLRenderer: .gammaInput has been removed. Set the encoding for textures via Texture.encoding instead.' ); + + } + }, + gammaOutput: { + get: function () { + + console.warn( 'THREE.WebGLRenderer: .gammaOutput has been removed. Set WebGLRenderer.outputEncoding instead.' ); + return false; + + }, + set: function ( value ) { + + console.warn( 'THREE.WebGLRenderer: .gammaOutput has been removed. Set WebGLRenderer.outputEncoding instead.' ); + this.outputEncoding = ( value === true ) ? sRGBEncoding : LinearEncoding; + + } + }, + toneMappingWhitePoint: { + get: function () { + + console.warn( 'THREE.WebGLRenderer: .toneMappingWhitePoint has been removed.' ); + return 1.0; + + }, + set: function () { + + console.warn( 'THREE.WebGLRenderer: .toneMappingWhitePoint has been removed.' ); + + } + }, + + } ); + + Object.defineProperties( WebGLShadowMap.prototype, { + + cullFace: { + get: function () { + + console.warn( 'THREE.WebGLRenderer: .shadowMap.cullFace has been removed. Set Material.shadowSide instead.' ); + return undefined; + + }, + set: function ( /* cullFace */ ) { + + console.warn( 'THREE.WebGLRenderer: .shadowMap.cullFace has been removed. Set Material.shadowSide instead.' ); + + } + }, + renderReverseSided: { + get: function () { + + console.warn( 'THREE.WebGLRenderer: .shadowMap.renderReverseSided has been removed. Set Material.shadowSide instead.' ); + return undefined; + + }, + set: function () { + + console.warn( 'THREE.WebGLRenderer: .shadowMap.renderReverseSided has been removed. Set Material.shadowSide instead.' ); + + } + }, + renderSingleSided: { + get: function () { + + console.warn( 'THREE.WebGLRenderer: .shadowMap.renderSingleSided has been removed. Set Material.shadowSide instead.' ); + return undefined; + + }, + set: function () { + + console.warn( 'THREE.WebGLRenderer: .shadowMap.renderSingleSided has been removed. Set Material.shadowSide instead.' ); + + } + } + + } ); + + function WebGLRenderTargetCube( width, height, options ) { + + console.warn( 'THREE.WebGLRenderTargetCube( width, height, options ) is now WebGLCubeRenderTarget( size, options ).' ); + return new WebGLCubeRenderTarget( width, options ); + + } + + // + + Object.defineProperties( WebGLRenderTarget.prototype, { + + wrapS: { + get: function () { + + console.warn( 'THREE.WebGLRenderTarget: .wrapS is now .texture.wrapS.' ); + return this.texture.wrapS; + + }, + set: function ( value ) { + + console.warn( 'THREE.WebGLRenderTarget: .wrapS is now .texture.wrapS.' ); + this.texture.wrapS = value; + + } + }, + wrapT: { + get: function () { + + console.warn( 'THREE.WebGLRenderTarget: .wrapT is now .texture.wrapT.' ); + return this.texture.wrapT; + + }, + set: function ( value ) { + + console.warn( 'THREE.WebGLRenderTarget: .wrapT is now .texture.wrapT.' ); + this.texture.wrapT = value; + + } + }, + magFilter: { + get: function () { + + console.warn( 'THREE.WebGLRenderTarget: .magFilter is now .texture.magFilter.' ); + return this.texture.magFilter; + + }, + set: function ( value ) { + + console.warn( 'THREE.WebGLRenderTarget: .magFilter is now .texture.magFilter.' ); + this.texture.magFilter = value; + + } + }, + minFilter: { + get: function () { + + console.warn( 'THREE.WebGLRenderTarget: .minFilter is now .texture.minFilter.' ); + return this.texture.minFilter; + + }, + set: function ( value ) { + + console.warn( 'THREE.WebGLRenderTarget: .minFilter is now .texture.minFilter.' ); + this.texture.minFilter = value; + + } + }, + anisotropy: { + get: function () { + + console.warn( 'THREE.WebGLRenderTarget: .anisotropy is now .texture.anisotropy.' ); + return this.texture.anisotropy; + + }, + set: function ( value ) { + + console.warn( 'THREE.WebGLRenderTarget: .anisotropy is now .texture.anisotropy.' ); + this.texture.anisotropy = value; + + } + }, + offset: { + get: function () { + + console.warn( 'THREE.WebGLRenderTarget: .offset is now .texture.offset.' ); + return this.texture.offset; + + }, + set: function ( value ) { + + console.warn( 'THREE.WebGLRenderTarget: .offset is now .texture.offset.' ); + this.texture.offset = value; + + } + }, + repeat: { + get: function () { + + console.warn( 'THREE.WebGLRenderTarget: .repeat is now .texture.repeat.' ); + return this.texture.repeat; + + }, + set: function ( value ) { + + console.warn( 'THREE.WebGLRenderTarget: .repeat is now .texture.repeat.' ); + this.texture.repeat = value; + + } + }, + format: { + get: function () { + + console.warn( 'THREE.WebGLRenderTarget: .format is now .texture.format.' ); + return this.texture.format; + + }, + set: function ( value ) { + + console.warn( 'THREE.WebGLRenderTarget: .format is now .texture.format.' ); + this.texture.format = value; + + } + }, + type: { + get: function () { + + console.warn( 'THREE.WebGLRenderTarget: .type is now .texture.type.' ); + return this.texture.type; + + }, + set: function ( value ) { + + console.warn( 'THREE.WebGLRenderTarget: .type is now .texture.type.' ); + this.texture.type = value; + + } + }, + generateMipmaps: { + get: function () { + + console.warn( 'THREE.WebGLRenderTarget: .generateMipmaps is now .texture.generateMipmaps.' ); + return this.texture.generateMipmaps; + + }, + set: function ( value ) { + + console.warn( 'THREE.WebGLRenderTarget: .generateMipmaps is now .texture.generateMipmaps.' ); + this.texture.generateMipmaps = value; + + } + } + + } ); + + // + + Object.defineProperties( Audio.prototype, { + + load: { + value: function ( file ) { + + console.warn( 'THREE.Audio: .load has been deprecated. Use THREE.AudioLoader instead.' ); + var scope = this; + var audioLoader = new AudioLoader(); + audioLoader.load( file, function ( buffer ) { + + scope.setBuffer( buffer ); + + } ); + return this; + + } + }, + startTime: { + set: function () { + + console.warn( 'THREE.Audio: .startTime is now .play( delay ).' ); + + } + } + + } ); + + AudioAnalyser.prototype.getData = function () { + + console.warn( 'THREE.AudioAnalyser: .getData() is now .getFrequencyData().' ); + return this.getFrequencyData(); + + }; + + // + + CubeCamera.prototype.updateCubeMap = function ( renderer, scene ) { + + console.warn( 'THREE.CubeCamera: .updateCubeMap() is now .update().' ); + return this.update( renderer, scene ); + + }; + + // + + var GeometryUtils = { + + merge: function ( geometry1, geometry2, materialIndexOffset ) { + + console.warn( 'THREE.GeometryUtils: .merge() has been moved to Geometry. Use geometry.merge( geometry2, matrix, materialIndexOffset ) instead.' ); + var matrix; + + if ( geometry2.isMesh ) { + + geometry2.matrixAutoUpdate && geometry2.updateMatrix(); + + matrix = geometry2.matrix; + geometry2 = geometry2.geometry; + + } + + geometry1.merge( geometry2, matrix, materialIndexOffset ); + + }, + + center: function ( geometry ) { + + console.warn( 'THREE.GeometryUtils: .center() has been moved to Geometry. Use geometry.center() instead.' ); + return geometry.center(); + + } + + }; + + ImageUtils.crossOrigin = undefined; + + ImageUtils.loadTexture = function ( url, mapping, onLoad, onError ) { + + console.warn( 'THREE.ImageUtils.loadTexture has been deprecated. Use THREE.TextureLoader() instead.' ); + + var loader = new TextureLoader(); + loader.setCrossOrigin( this.crossOrigin ); + + var texture = loader.load( url, onLoad, undefined, onError ); + + if ( mapping ) { texture.mapping = mapping; } + + return texture; + + }; + + ImageUtils.loadTextureCube = function ( urls, mapping, onLoad, onError ) { + + console.warn( 'THREE.ImageUtils.loadTextureCube has been deprecated. Use THREE.CubeTextureLoader() instead.' ); + + var loader = new CubeTextureLoader(); + loader.setCrossOrigin( this.crossOrigin ); + + var texture = loader.load( urls, onLoad, undefined, onError ); + + if ( mapping ) { texture.mapping = mapping; } + + return texture; + + }; + + ImageUtils.loadCompressedTexture = function () { + + console.error( 'THREE.ImageUtils.loadCompressedTexture has been removed. Use THREE.DDSLoader instead.' ); + + }; + + ImageUtils.loadCompressedTextureCube = function () { + + console.error( 'THREE.ImageUtils.loadCompressedTextureCube has been removed. Use THREE.DDSLoader instead.' ); + + }; + + // + + function CanvasRenderer() { + + console.error( 'THREE.CanvasRenderer has been removed' ); + + } + + // + + function JSONLoader() { + + console.error( 'THREE.JSONLoader has been removed.' ); + + } + + // + + var SceneUtils = { + + createMultiMaterialObject: function ( /* geometry, materials */ ) { + + console.error( 'THREE.SceneUtils has been moved to /examples/jsm/utils/SceneUtils.js' ); + + }, + + detach: function ( /* child, parent, scene */ ) { + + console.error( 'THREE.SceneUtils has been moved to /examples/jsm/utils/SceneUtils.js' ); + + }, + + attach: function ( /* child, scene, parent */ ) { + + console.error( 'THREE.SceneUtils has been moved to /examples/jsm/utils/SceneUtils.js' ); + + } + + }; + + // + + function LensFlare() { + + console.error( 'THREE.LensFlare has been moved to /examples/jsm/objects/Lensflare.js' ); + + } + + if ( typeof __THREE_DEVTOOLS__ !== 'undefined' ) { + + /* eslint-disable no-undef */ + __THREE_DEVTOOLS__.dispatchEvent( new CustomEvent( 'register', { detail: { + revision: REVISION, + } } ) ); + /* eslint-enable no-undef */ + + } + + exports.ACESFilmicToneMapping = ACESFilmicToneMapping; + exports.AddEquation = AddEquation; + exports.AddOperation = AddOperation; + exports.AdditiveAnimationBlendMode = AdditiveAnimationBlendMode; + exports.AdditiveBlending = AdditiveBlending; + exports.AlphaFormat = AlphaFormat; + exports.AlwaysDepth = AlwaysDepth; + exports.AlwaysStencilFunc = AlwaysStencilFunc; + exports.AmbientLight = AmbientLight; + exports.AmbientLightProbe = AmbientLightProbe; + exports.AnimationClip = AnimationClip; + exports.AnimationLoader = AnimationLoader; + exports.AnimationMixer = AnimationMixer; + exports.AnimationObjectGroup = AnimationObjectGroup; + exports.AnimationUtils = AnimationUtils; + exports.ArcCurve = ArcCurve; + exports.ArrayCamera = ArrayCamera; + exports.ArrowHelper = ArrowHelper; + exports.Audio = Audio; + exports.AudioAnalyser = AudioAnalyser; + exports.AudioContext = AudioContext; + exports.AudioListener = AudioListener; + exports.AudioLoader = AudioLoader; + exports.AxesHelper = AxesHelper; + exports.AxisHelper = AxisHelper; + exports.BackSide = BackSide; + exports.BasicDepthPacking = BasicDepthPacking; + exports.BasicShadowMap = BasicShadowMap; + exports.BinaryTextureLoader = BinaryTextureLoader; + exports.Bone = Bone; + exports.BooleanKeyframeTrack = BooleanKeyframeTrack; + exports.BoundingBoxHelper = BoundingBoxHelper; + exports.Box2 = Box2; + exports.Box3 = Box3; + exports.Box3Helper = Box3Helper; + exports.BoxBufferGeometry = BoxBufferGeometry; + exports.BoxGeometry = BoxGeometry; + exports.BoxHelper = BoxHelper; + exports.BufferAttribute = BufferAttribute; + exports.BufferGeometry = BufferGeometry; + exports.BufferGeometryLoader = BufferGeometryLoader; + exports.ByteType = ByteType; + exports.Cache = Cache; + exports.Camera = Camera; + exports.CameraHelper = CameraHelper; + exports.CanvasRenderer = CanvasRenderer; + exports.CanvasTexture = CanvasTexture; + exports.CatmullRomCurve3 = CatmullRomCurve3; + exports.CineonToneMapping = CineonToneMapping; + exports.CircleBufferGeometry = CircleBufferGeometry; + exports.CircleGeometry = CircleGeometry; + exports.ClampToEdgeWrapping = ClampToEdgeWrapping; + exports.Clock = Clock; + exports.ClosedSplineCurve3 = ClosedSplineCurve3; + exports.Color = Color; + exports.ColorKeyframeTrack = ColorKeyframeTrack; + exports.CompressedTexture = CompressedTexture; + exports.CompressedTextureLoader = CompressedTextureLoader; + exports.ConeBufferGeometry = ConeBufferGeometry; + exports.ConeGeometry = ConeGeometry; + exports.CubeCamera = CubeCamera; + exports.CubeGeometry = BoxGeometry; + exports.CubeReflectionMapping = CubeReflectionMapping; + exports.CubeRefractionMapping = CubeRefractionMapping; + exports.CubeTexture = CubeTexture; + exports.CubeTextureLoader = CubeTextureLoader; + exports.CubeUVReflectionMapping = CubeUVReflectionMapping; + exports.CubeUVRefractionMapping = CubeUVRefractionMapping; + exports.CubicBezierCurve = CubicBezierCurve; + exports.CubicBezierCurve3 = CubicBezierCurve3; + exports.CubicInterpolant = CubicInterpolant; + exports.CullFaceBack = CullFaceBack; + exports.CullFaceFront = CullFaceFront; + exports.CullFaceFrontBack = CullFaceFrontBack; + exports.CullFaceNone = CullFaceNone; + exports.Curve = Curve; + exports.CurvePath = CurvePath; + exports.CustomBlending = CustomBlending; + exports.CustomToneMapping = CustomToneMapping; + exports.CylinderBufferGeometry = CylinderBufferGeometry; + exports.CylinderGeometry = CylinderGeometry; + exports.Cylindrical = Cylindrical; + exports.DataTexture = DataTexture; + exports.DataTexture2DArray = DataTexture2DArray; + exports.DataTexture3D = DataTexture3D; + exports.DataTextureLoader = DataTextureLoader; + exports.DecrementStencilOp = DecrementStencilOp; + exports.DecrementWrapStencilOp = DecrementWrapStencilOp; + exports.DefaultLoadingManager = DefaultLoadingManager; + exports.DepthFormat = DepthFormat; + exports.DepthStencilFormat = DepthStencilFormat; + exports.DepthTexture = DepthTexture; + exports.DirectionalLight = DirectionalLight; + exports.DirectionalLightHelper = DirectionalLightHelper; + exports.DiscreteInterpolant = DiscreteInterpolant; + exports.DodecahedronBufferGeometry = DodecahedronBufferGeometry; + exports.DodecahedronGeometry = DodecahedronGeometry; + exports.DoubleSide = DoubleSide; + exports.DstAlphaFactor = DstAlphaFactor; + exports.DstColorFactor = DstColorFactor; + exports.DynamicBufferAttribute = DynamicBufferAttribute; + exports.DynamicCopyUsage = DynamicCopyUsage; + exports.DynamicDrawUsage = DynamicDrawUsage; + exports.DynamicReadUsage = DynamicReadUsage; + exports.EdgesGeometry = EdgesGeometry; + exports.EdgesHelper = EdgesHelper; + exports.EllipseCurve = EllipseCurve; + exports.EqualDepth = EqualDepth; + exports.EqualStencilFunc = EqualStencilFunc; + exports.EquirectangularReflectionMapping = EquirectangularReflectionMapping; + exports.EquirectangularRefractionMapping = EquirectangularRefractionMapping; + exports.Euler = Euler; + exports.EventDispatcher = EventDispatcher; + exports.ExtrudeBufferGeometry = ExtrudeBufferGeometry; + exports.ExtrudeGeometry = ExtrudeGeometry; + exports.Face3 = Face3; + exports.Face4 = Face4; + exports.FaceColors = FaceColors; + exports.FileLoader = FileLoader; + exports.FlatShading = FlatShading; + exports.Float32Attribute = Float32Attribute; + exports.Float32BufferAttribute = Float32BufferAttribute; + exports.Float64Attribute = Float64Attribute; + exports.Float64BufferAttribute = Float64BufferAttribute; + exports.FloatType = FloatType; + exports.Fog = Fog; + exports.FogExp2 = FogExp2; + exports.Font = Font; + exports.FontLoader = FontLoader; + exports.FrontSide = FrontSide; + exports.Frustum = Frustum; + exports.GLBufferAttribute = GLBufferAttribute; + exports.GLSL1 = GLSL1; + exports.GLSL3 = GLSL3; + exports.GammaEncoding = GammaEncoding; + exports.Geometry = Geometry; + exports.GeometryUtils = GeometryUtils; + exports.GreaterDepth = GreaterDepth; + exports.GreaterEqualDepth = GreaterEqualDepth; + exports.GreaterEqualStencilFunc = GreaterEqualStencilFunc; + exports.GreaterStencilFunc = GreaterStencilFunc; + exports.GridHelper = GridHelper; + exports.Group = Group; + exports.HalfFloatType = HalfFloatType; + exports.HemisphereLight = HemisphereLight; + exports.HemisphereLightHelper = HemisphereLightHelper; + exports.HemisphereLightProbe = HemisphereLightProbe; + exports.IcosahedronBufferGeometry = IcosahedronBufferGeometry; + exports.IcosahedronGeometry = IcosahedronGeometry; + exports.ImageBitmapLoader = ImageBitmapLoader; + exports.ImageLoader = ImageLoader; + exports.ImageUtils = ImageUtils; + exports.ImmediateRenderObject = ImmediateRenderObject; + exports.IncrementStencilOp = IncrementStencilOp; + exports.IncrementWrapStencilOp = IncrementWrapStencilOp; + exports.InstancedBufferAttribute = InstancedBufferAttribute; + exports.InstancedBufferGeometry = InstancedBufferGeometry; + exports.InstancedInterleavedBuffer = InstancedInterleavedBuffer; + exports.InstancedMesh = InstancedMesh; + exports.Int16Attribute = Int16Attribute; + exports.Int16BufferAttribute = Int16BufferAttribute; + exports.Int32Attribute = Int32Attribute; + exports.Int32BufferAttribute = Int32BufferAttribute; + exports.Int8Attribute = Int8Attribute; + exports.Int8BufferAttribute = Int8BufferAttribute; + exports.IntType = IntType; + exports.InterleavedBuffer = InterleavedBuffer; + exports.InterleavedBufferAttribute = InterleavedBufferAttribute; + exports.Interpolant = Interpolant; + exports.InterpolateDiscrete = InterpolateDiscrete; + exports.InterpolateLinear = InterpolateLinear; + exports.InterpolateSmooth = InterpolateSmooth; + exports.InvertStencilOp = InvertStencilOp; + exports.JSONLoader = JSONLoader; + exports.KeepStencilOp = KeepStencilOp; + exports.KeyframeTrack = KeyframeTrack; + exports.LOD = LOD; + exports.LatheBufferGeometry = LatheBufferGeometry; + exports.LatheGeometry = LatheGeometry; + exports.Layers = Layers; + exports.LensFlare = LensFlare; + exports.LessDepth = LessDepth; + exports.LessEqualDepth = LessEqualDepth; + exports.LessEqualStencilFunc = LessEqualStencilFunc; + exports.LessStencilFunc = LessStencilFunc; + exports.Light = Light; + exports.LightProbe = LightProbe; + exports.LightShadow = LightShadow; + exports.Line = Line; + exports.Line3 = Line3; + exports.LineBasicMaterial = LineBasicMaterial; + exports.LineCurve = LineCurve; + exports.LineCurve3 = LineCurve3; + exports.LineDashedMaterial = LineDashedMaterial; + exports.LineLoop = LineLoop; + exports.LinePieces = LinePieces; + exports.LineSegments = LineSegments; + exports.LineStrip = LineStrip; + exports.LinearEncoding = LinearEncoding; + exports.LinearFilter = LinearFilter; + exports.LinearInterpolant = LinearInterpolant; + exports.LinearMipMapLinearFilter = LinearMipMapLinearFilter; + exports.LinearMipMapNearestFilter = LinearMipMapNearestFilter; + exports.LinearMipmapLinearFilter = LinearMipmapLinearFilter; + exports.LinearMipmapNearestFilter = LinearMipmapNearestFilter; + exports.LinearToneMapping = LinearToneMapping; + exports.Loader = Loader; + exports.LoaderUtils = LoaderUtils; + exports.LoadingManager = LoadingManager; + exports.LogLuvEncoding = LogLuvEncoding; + exports.LoopOnce = LoopOnce; + exports.LoopPingPong = LoopPingPong; + exports.LoopRepeat = LoopRepeat; + exports.LuminanceAlphaFormat = LuminanceAlphaFormat; + exports.LuminanceFormat = LuminanceFormat; + exports.MOUSE = MOUSE; + exports.Material = Material; + exports.MaterialLoader = MaterialLoader; + exports.Math = MathUtils; + exports.MathUtils = MathUtils; + exports.Matrix3 = Matrix3; + exports.Matrix4 = Matrix4; + exports.MaxEquation = MaxEquation; + exports.Mesh = Mesh; + exports.MeshBasicMaterial = MeshBasicMaterial; + exports.MeshDepthMaterial = MeshDepthMaterial; + exports.MeshDistanceMaterial = MeshDistanceMaterial; + exports.MeshFaceMaterial = MeshFaceMaterial; + exports.MeshLambertMaterial = MeshLambertMaterial; + exports.MeshMatcapMaterial = MeshMatcapMaterial; + exports.MeshNormalMaterial = MeshNormalMaterial; + exports.MeshPhongMaterial = MeshPhongMaterial; + exports.MeshPhysicalMaterial = MeshPhysicalMaterial; + exports.MeshStandardMaterial = MeshStandardMaterial; + exports.MeshToonMaterial = MeshToonMaterial; + exports.MinEquation = MinEquation; + exports.MirroredRepeatWrapping = MirroredRepeatWrapping; + exports.MixOperation = MixOperation; + exports.MultiMaterial = MultiMaterial; + exports.MultiplyBlending = MultiplyBlending; + exports.MultiplyOperation = MultiplyOperation; + exports.NearestFilter = NearestFilter; + exports.NearestMipMapLinearFilter = NearestMipMapLinearFilter; + exports.NearestMipMapNearestFilter = NearestMipMapNearestFilter; + exports.NearestMipmapLinearFilter = NearestMipmapLinearFilter; + exports.NearestMipmapNearestFilter = NearestMipmapNearestFilter; + exports.NeverDepth = NeverDepth; + exports.NeverStencilFunc = NeverStencilFunc; + exports.NoBlending = NoBlending; + exports.NoColors = NoColors; + exports.NoToneMapping = NoToneMapping; + exports.NormalAnimationBlendMode = NormalAnimationBlendMode; + exports.NormalBlending = NormalBlending; + exports.NotEqualDepth = NotEqualDepth; + exports.NotEqualStencilFunc = NotEqualStencilFunc; + exports.NumberKeyframeTrack = NumberKeyframeTrack; + exports.Object3D = Object3D; + exports.ObjectLoader = ObjectLoader; + exports.ObjectSpaceNormalMap = ObjectSpaceNormalMap; + exports.OctahedronBufferGeometry = OctahedronBufferGeometry; + exports.OctahedronGeometry = OctahedronGeometry; + exports.OneFactor = OneFactor; + exports.OneMinusDstAlphaFactor = OneMinusDstAlphaFactor; + exports.OneMinusDstColorFactor = OneMinusDstColorFactor; + exports.OneMinusSrcAlphaFactor = OneMinusSrcAlphaFactor; + exports.OneMinusSrcColorFactor = OneMinusSrcColorFactor; + exports.OrthographicCamera = OrthographicCamera; + exports.PCFShadowMap = PCFShadowMap; + exports.PCFSoftShadowMap = PCFSoftShadowMap; + exports.PMREMGenerator = PMREMGenerator; + exports.ParametricBufferGeometry = ParametricBufferGeometry; + exports.ParametricGeometry = ParametricGeometry; + exports.Particle = Particle; + exports.ParticleBasicMaterial = ParticleBasicMaterial; + exports.ParticleSystem = ParticleSystem; + exports.ParticleSystemMaterial = ParticleSystemMaterial; + exports.Path = Path; + exports.PerspectiveCamera = PerspectiveCamera; + exports.Plane = Plane; + exports.PlaneBufferGeometry = PlaneBufferGeometry; + exports.PlaneGeometry = PlaneGeometry; + exports.PlaneHelper = PlaneHelper; + exports.PointCloud = PointCloud; + exports.PointCloudMaterial = PointCloudMaterial; + exports.PointLight = PointLight; + exports.PointLightHelper = PointLightHelper; + exports.Points = Points; + exports.PointsMaterial = PointsMaterial; + exports.PolarGridHelper = PolarGridHelper; + exports.PolyhedronBufferGeometry = PolyhedronBufferGeometry; + exports.PolyhedronGeometry = PolyhedronGeometry; + exports.PositionalAudio = PositionalAudio; + exports.PropertyBinding = PropertyBinding; + exports.PropertyMixer = PropertyMixer; + exports.QuadraticBezierCurve = QuadraticBezierCurve; + exports.QuadraticBezierCurve3 = QuadraticBezierCurve3; + exports.Quaternion = Quaternion; + exports.QuaternionKeyframeTrack = QuaternionKeyframeTrack; + exports.QuaternionLinearInterpolant = QuaternionLinearInterpolant; + exports.REVISION = REVISION; + exports.RGBADepthPacking = RGBADepthPacking; + exports.RGBAFormat = RGBAFormat; + exports.RGBAIntegerFormat = RGBAIntegerFormat; + exports.RGBA_ASTC_10x10_Format = RGBA_ASTC_10x10_Format; + exports.RGBA_ASTC_10x5_Format = RGBA_ASTC_10x5_Format; + exports.RGBA_ASTC_10x6_Format = RGBA_ASTC_10x6_Format; + exports.RGBA_ASTC_10x8_Format = RGBA_ASTC_10x8_Format; + exports.RGBA_ASTC_12x10_Format = RGBA_ASTC_12x10_Format; + exports.RGBA_ASTC_12x12_Format = RGBA_ASTC_12x12_Format; + exports.RGBA_ASTC_4x4_Format = RGBA_ASTC_4x4_Format; + exports.RGBA_ASTC_5x4_Format = RGBA_ASTC_5x4_Format; + exports.RGBA_ASTC_5x5_Format = RGBA_ASTC_5x5_Format; + exports.RGBA_ASTC_6x5_Format = RGBA_ASTC_6x5_Format; + exports.RGBA_ASTC_6x6_Format = RGBA_ASTC_6x6_Format; + exports.RGBA_ASTC_8x5_Format = RGBA_ASTC_8x5_Format; + exports.RGBA_ASTC_8x6_Format = RGBA_ASTC_8x6_Format; + exports.RGBA_ASTC_8x8_Format = RGBA_ASTC_8x8_Format; + exports.RGBA_BPTC_Format = RGBA_BPTC_Format; + exports.RGBA_ETC2_EAC_Format = RGBA_ETC2_EAC_Format; + exports.RGBA_PVRTC_2BPPV1_Format = RGBA_PVRTC_2BPPV1_Format; + exports.RGBA_PVRTC_4BPPV1_Format = RGBA_PVRTC_4BPPV1_Format; + exports.RGBA_S3TC_DXT1_Format = RGBA_S3TC_DXT1_Format; + exports.RGBA_S3TC_DXT3_Format = RGBA_S3TC_DXT3_Format; + exports.RGBA_S3TC_DXT5_Format = RGBA_S3TC_DXT5_Format; + exports.RGBDEncoding = RGBDEncoding; + exports.RGBEEncoding = RGBEEncoding; + exports.RGBEFormat = RGBEFormat; + exports.RGBFormat = RGBFormat; + exports.RGBIntegerFormat = RGBIntegerFormat; + exports.RGBM16Encoding = RGBM16Encoding; + exports.RGBM7Encoding = RGBM7Encoding; + exports.RGB_ETC1_Format = RGB_ETC1_Format; + exports.RGB_ETC2_Format = RGB_ETC2_Format; + exports.RGB_PVRTC_2BPPV1_Format = RGB_PVRTC_2BPPV1_Format; + exports.RGB_PVRTC_4BPPV1_Format = RGB_PVRTC_4BPPV1_Format; + exports.RGB_S3TC_DXT1_Format = RGB_S3TC_DXT1_Format; + exports.RGFormat = RGFormat; + exports.RGIntegerFormat = RGIntegerFormat; + exports.RawShaderMaterial = RawShaderMaterial; + exports.Ray = Ray; + exports.Raycaster = Raycaster; + exports.RectAreaLight = RectAreaLight; + exports.RedFormat = RedFormat; + exports.RedIntegerFormat = RedIntegerFormat; + exports.ReinhardToneMapping = ReinhardToneMapping; + exports.RepeatWrapping = RepeatWrapping; + exports.ReplaceStencilOp = ReplaceStencilOp; + exports.ReverseSubtractEquation = ReverseSubtractEquation; + exports.RingBufferGeometry = RingBufferGeometry; + exports.RingGeometry = RingGeometry; + exports.SRGB8_ALPHA8_ASTC_10x10_Format = SRGB8_ALPHA8_ASTC_10x10_Format; + exports.SRGB8_ALPHA8_ASTC_10x5_Format = SRGB8_ALPHA8_ASTC_10x5_Format; + exports.SRGB8_ALPHA8_ASTC_10x6_Format = SRGB8_ALPHA8_ASTC_10x6_Format; + exports.SRGB8_ALPHA8_ASTC_10x8_Format = SRGB8_ALPHA8_ASTC_10x8_Format; + exports.SRGB8_ALPHA8_ASTC_12x10_Format = SRGB8_ALPHA8_ASTC_12x10_Format; + exports.SRGB8_ALPHA8_ASTC_12x12_Format = SRGB8_ALPHA8_ASTC_12x12_Format; + exports.SRGB8_ALPHA8_ASTC_4x4_Format = SRGB8_ALPHA8_ASTC_4x4_Format; + exports.SRGB8_ALPHA8_ASTC_5x4_Format = SRGB8_ALPHA8_ASTC_5x4_Format; + exports.SRGB8_ALPHA8_ASTC_5x5_Format = SRGB8_ALPHA8_ASTC_5x5_Format; + exports.SRGB8_ALPHA8_ASTC_6x5_Format = SRGB8_ALPHA8_ASTC_6x5_Format; + exports.SRGB8_ALPHA8_ASTC_6x6_Format = SRGB8_ALPHA8_ASTC_6x6_Format; + exports.SRGB8_ALPHA8_ASTC_8x5_Format = SRGB8_ALPHA8_ASTC_8x5_Format; + exports.SRGB8_ALPHA8_ASTC_8x6_Format = SRGB8_ALPHA8_ASTC_8x6_Format; + exports.SRGB8_ALPHA8_ASTC_8x8_Format = SRGB8_ALPHA8_ASTC_8x8_Format; + exports.Scene = Scene; + exports.SceneUtils = SceneUtils; + exports.ShaderChunk = ShaderChunk; + exports.ShaderLib = ShaderLib; + exports.ShaderMaterial = ShaderMaterial; + exports.ShadowMaterial = ShadowMaterial; + exports.Shape = Shape; + exports.ShapeBufferGeometry = ShapeBufferGeometry; + exports.ShapeGeometry = ShapeGeometry; + exports.ShapePath = ShapePath; + exports.ShapeUtils = ShapeUtils; + exports.ShortType = ShortType; + exports.Skeleton = Skeleton; + exports.SkeletonHelper = SkeletonHelper; + exports.SkinnedMesh = SkinnedMesh; + exports.SmoothShading = SmoothShading; + exports.Sphere = Sphere; + exports.SphereBufferGeometry = SphereBufferGeometry; + exports.SphereGeometry = SphereGeometry; + exports.Spherical = Spherical; + exports.SphericalHarmonics3 = SphericalHarmonics3; + exports.Spline = Spline; + exports.SplineCurve = SplineCurve; + exports.SplineCurve3 = SplineCurve3; + exports.SpotLight = SpotLight; + exports.SpotLightHelper = SpotLightHelper; + exports.Sprite = Sprite; + exports.SpriteMaterial = SpriteMaterial; + exports.SrcAlphaFactor = SrcAlphaFactor; + exports.SrcAlphaSaturateFactor = SrcAlphaSaturateFactor; + exports.SrcColorFactor = SrcColorFactor; + exports.StaticCopyUsage = StaticCopyUsage; + exports.StaticDrawUsage = StaticDrawUsage; + exports.StaticReadUsage = StaticReadUsage; + exports.StereoCamera = StereoCamera; + exports.StreamCopyUsage = StreamCopyUsage; + exports.StreamDrawUsage = StreamDrawUsage; + exports.StreamReadUsage = StreamReadUsage; + exports.StringKeyframeTrack = StringKeyframeTrack; + exports.SubtractEquation = SubtractEquation; + exports.SubtractiveBlending = SubtractiveBlending; + exports.TOUCH = TOUCH; + exports.TangentSpaceNormalMap = TangentSpaceNormalMap; + exports.TetrahedronBufferGeometry = TetrahedronBufferGeometry; + exports.TetrahedronGeometry = TetrahedronGeometry; + exports.TextBufferGeometry = TextBufferGeometry; + exports.TextGeometry = TextGeometry; + exports.Texture = Texture; + exports.TextureLoader = TextureLoader; + exports.TorusBufferGeometry = TorusBufferGeometry; + exports.TorusGeometry = TorusGeometry; + exports.TorusKnotBufferGeometry = TorusKnotBufferGeometry; + exports.TorusKnotGeometry = TorusKnotGeometry; + exports.Triangle = Triangle; + exports.TriangleFanDrawMode = TriangleFanDrawMode; + exports.TriangleStripDrawMode = TriangleStripDrawMode; + exports.TrianglesDrawMode = TrianglesDrawMode; + exports.TubeBufferGeometry = TubeBufferGeometry; + exports.TubeGeometry = TubeGeometry; + exports.UVMapping = UVMapping; + exports.Uint16Attribute = Uint16Attribute; + exports.Uint16BufferAttribute = Uint16BufferAttribute; + exports.Uint32Attribute = Uint32Attribute; + exports.Uint32BufferAttribute = Uint32BufferAttribute; + exports.Uint8Attribute = Uint8Attribute; + exports.Uint8BufferAttribute = Uint8BufferAttribute; + exports.Uint8ClampedAttribute = Uint8ClampedAttribute; + exports.Uint8ClampedBufferAttribute = Uint8ClampedBufferAttribute; + exports.Uniform = Uniform; + exports.UniformsLib = UniformsLib; + exports.UniformsUtils = UniformsUtils; + exports.UnsignedByteType = UnsignedByteType; + exports.UnsignedInt248Type = UnsignedInt248Type; + exports.UnsignedIntType = UnsignedIntType; + exports.UnsignedShort4444Type = UnsignedShort4444Type; + exports.UnsignedShort5551Type = UnsignedShort5551Type; + exports.UnsignedShort565Type = UnsignedShort565Type; + exports.UnsignedShortType = UnsignedShortType; + exports.VSMShadowMap = VSMShadowMap; + exports.Vector2 = Vector2; + exports.Vector3 = Vector3; + exports.Vector4 = Vector4; + exports.VectorKeyframeTrack = VectorKeyframeTrack; + exports.Vertex = Vertex; + exports.VertexColors = VertexColors; + exports.VideoTexture = VideoTexture; + exports.WebGL1Renderer = WebGL1Renderer; + exports.WebGLCubeRenderTarget = WebGLCubeRenderTarget; + exports.WebGLMultisampleRenderTarget = WebGLMultisampleRenderTarget; + exports.WebGLRenderTarget = WebGLRenderTarget; + exports.WebGLRenderTargetCube = WebGLRenderTargetCube; + exports.WebGLRenderer = WebGLRenderer; + exports.WebGLUtils = WebGLUtils; + exports.WireframeGeometry = WireframeGeometry; + exports.WireframeHelper = WireframeHelper; + exports.WrapAroundEnding = WrapAroundEnding; + exports.XHRLoader = XHRLoader; + exports.ZeroCurvatureEnding = ZeroCurvatureEnding; + exports.ZeroFactor = ZeroFactor; + exports.ZeroSlopeEnding = ZeroSlopeEnding; + exports.ZeroStencilOp = ZeroStencilOp; + exports.sRGBEncoding = sRGBEncoding; + + Object.defineProperty(exports, '__esModule', { value: true }); + +}))); diff --git a/examples/mouseFollow.html b/examples/mouseFollow.html index 6d4725b..c6f2e7d 100644 --- a/examples/mouseFollow.html +++ b/examples/mouseFollow.html @@ -1,153 +1,167 @@ - - SPE: Mouse follow - - - - -

            - - - - - - - - - - + + SPE: Mouse follow + + + + +

            + + + + + + + + + + diff --git a/examples/multipleEmitters.html b/examples/multipleEmitters.html index cd84708..313ed1d 100644 --- a/examples/multipleEmitters.html +++ b/examples/multipleEmitters.html @@ -1,193 +1,189 @@ - - SPE: Multiple Emitters - - - - -

            - - - - - - - - + + + + + - - + + diff --git a/examples/orbit.html b/examples/orbit.html index 0ef6478..f9bf353 100644 --- a/examples/orbit.html +++ b/examples/orbit.html @@ -1,138 +1,145 @@ - - SPE: Distribution types - - - - - - - - - - - - - + + SPE: Distribution types + + + + + + + + + + + + diff --git a/examples/pool.html b/examples/pool.html index 8a929b1..0a9d9bb 100644 --- a/examples/pool.html +++ b/examples/pool.html @@ -1,173 +1,181 @@ - - SPE: Emitter pooling - - - - -

            Click mouse or press any key to trigger an explosion.

            - - - - - - - - + + + + + + // Kick it all off. + init(); + initParticles(); - + animate(); + //setTimeout(animate, 0); + } + + diff --git a/examples/rotation.html b/examples/rotation.html index 61f5bdc..7b6f3ba 100644 --- a/examples/rotation.html +++ b/examples/rotation.html @@ -1,287 +1,288 @@ - - SPE: Distribution types - - - - - - - - - - - + + + + + - - + + diff --git a/examples/runtimeChanging.html b/examples/runtimeChanging.html index 1f9cd03..81b3bcc 100644 --- a/examples/runtimeChanging.html +++ b/examples/runtimeChanging.html @@ -2,7 +2,7 @@ SPE: Dynamic properties - + - + - - - - + + + + + diff --git a/notes.txt b/notes.txt index 14bd76c..79e301f 100644 --- a/notes.txt +++ b/notes.txt @@ -10,4 +10,38 @@ Since you're doing such a significant version upgrade, you might want to watch o 3. The WebGLRenderer parameters changed somewhat 4. Material property naming evolved in some cases -Would you like me to keep an eye out for any other version-specific changes as we discuss your Three.js implementation? I can flag anything that might need attention during the upgrade process. \ No newline at end of file + + +Would you like me to keep an eye out for any other version-specific changes as we discuss your Three.js implementation? I can flag anything that might need attention during the upgrade process. + + +That's a smart, methodical approach to upgrading. Going up in smaller increments makes it much easier to isolate and fix breaking changes when they occur. + +Between r120 and r150, some notable changes to watch for include: + +1. Around r125-r129: Changes to material parameter handling +2. r137: WebGLRenderer got some significant updates +3. r139: More strict WebGL context handling +4. r148: Changes to how buffers are managed + +By stopping at r120 for now, you're in a relatively stable zone. The bigger breaking changes tend to start appearing in the r130+ range, particularly around shader and material handling. + +Your staged approach (5 versions at a time) will be especially helpful when you hit the r130-150 range as there were more architectural changes in those releases. Would you like me to point out specific changes for the next 5 versions you're planning to upgrade to? + +Looking at the changes from r120 to r125: + +Key changes to watch for: +1. r121: WebGL state handling was updated - might affect custom shaders +2. r122: Texture handling improvements - generally backwards compatible but worth testing thoroughly with your texture loader +3. r123: Minor changes to geometry attribute handling +4. r124: Updates to shadow mapping - if you're using shadows, test carefully +5. r125: Material system updates - particularly around shader uniforms + +The most likely impact points for your code would be: +- Any custom WebGL state management +- Shader uniform handling +- Shadow implementations if you're using them + +Since you've built that robust texture loading system, you should be safe on that front through these versions. However, if you're using any direct WebGL calls or state management, those might need attention around r121. + +Would you like me to get specific about the next batch (r126-130) once you've tackled these versions? \ No newline at end of file diff --git a/package-lock.json b/package-lock.json index 7b3f844..fc9e733 100644 --- a/package-lock.json +++ b/package-lock.json @@ -14,98 +14,9 @@ "devDependencies": { "grunt": "^1.6.1", "grunt-contrib-concat": "^2.1.0", - "grunt-contrib-uglify": "^5.2.1", - "jsdoc": "^4.0.4" + "grunt-contrib-uglify": "^5.2.1" } }, - "node_modules/@babel/helper-string-parser": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.25.9.tgz", - "integrity": "sha512-4A/SCr/2KLd5jrtOMFzaKjVtAei3+2r/NChoBNoZ3EyP/+GlhoaEGoWOZUmFmoITP7zOJyHIMm+DYRd8o3PvHA==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-validator-identifier": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.25.9.tgz", - "integrity": "sha512-Ed61U6XJc3CVRfkERJWDz4dJwKe7iLmmJsbOGu9wSloNSFttHV0I8g6UAgb7qnK5ly5bGLPd4oXZlxCdANBOWQ==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/parser": { - "version": "7.26.9", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.26.9.tgz", - "integrity": "sha512-81NWa1njQblgZbQHxWHpxxCzNsa3ZwvFqpUg7P+NNUU6f3UU2jBEg4OlF/J6rl8+PQGh1q6/zWScd001YwcA5A==", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/types": "^7.26.9" - }, - "bin": { - "parser": "bin/babel-parser.js" - }, - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/@babel/types": { - "version": "7.26.9", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.26.9.tgz", - "integrity": "sha512-Y3IR1cRnOxOCDvMmNiym7XpXQ93iGDDPHx+Zj+NM+rg0fBaShfQLkg+hKPaZCEvg5N/LeCo4+Rj/i3FuJsIQaw==", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-string-parser": "^7.25.9", - "@babel/helper-validator-identifier": "^7.25.9" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@jsdoc/salty": { - "version": "0.2.9", - "resolved": "https://registry.npmjs.org/@jsdoc/salty/-/salty-0.2.9.tgz", - "integrity": "sha512-yYxMVH7Dqw6nO0d5NIV8OQWnitU8k6vXH8NtgqAfIa/IUqRMxRv/NUJJ08VEKbAakwxlgBl5PJdrU0dMPStsnw==", - "dev": true, - "license": "Apache-2.0", - "dependencies": { - "lodash": "^4.17.21" - }, - "engines": { - "node": ">=v12.0.0" - } - }, - "node_modules/@types/linkify-it": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/@types/linkify-it/-/linkify-it-5.0.0.tgz", - "integrity": "sha512-sVDA58zAw4eWAffKOaQH5/5j3XeayukzDk+ewSsnv3p4yJEZHCCzMDiZM8e0OUrRvmpGZ85jf4yDHkHsgBNr9Q==", - "dev": true, - "license": "MIT" - }, - "node_modules/@types/markdown-it": { - "version": "14.1.2", - "resolved": "https://registry.npmjs.org/@types/markdown-it/-/markdown-it-14.1.2.tgz", - "integrity": "sha512-promo4eFwuiW+TfGxhi+0x3czqTYJkG8qB17ZUJiVF10Xm7NLVRSLUsfRTU/6h1e24VvRnXCx+hG7li58lkzog==", - "dev": true, - "license": "MIT", - "dependencies": { - "@types/linkify-it": "^5", - "@types/mdurl": "^2" - } - }, - "node_modules/@types/mdurl": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/@types/mdurl/-/mdurl-2.0.0.tgz", - "integrity": "sha512-RGdgjQUZba5p6QEFAVx2OGb8rQDL/cPRG7GiedRzMcJ1tYnUANBncjbSB1NRGwbvjcPeikRABz2nshyPk1bhWg==", - "dev": true, - "license": "MIT" - }, "node_modules/abbrev": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/abbrev/-/abbrev-1.1.1.tgz", @@ -173,13 +84,6 @@ "dev": true, "license": "MIT" }, - "node_modules/bluebird": { - "version": "3.7.2", - "resolved": "https://registry.npmjs.org/bluebird/-/bluebird-3.7.2.tgz", - "integrity": "sha512-XpNj6GDQzdfW+r2Wnn7xiSAd7TM3jzkxGXBGTtWKuSXv1xUV+azxAm8jdWZN06QTQk+2N2XB9jRDkvbmQmcRtg==", - "dev": true, - "license": "MIT" - }, "node_modules/brace-expansion": { "version": "1.1.11", "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", @@ -204,19 +108,6 @@ "node": ">=8" } }, - "node_modules/catharsis": { - "version": "0.9.0", - "resolved": "https://registry.npmjs.org/catharsis/-/catharsis-0.9.0.tgz", - "integrity": "sha512-prMTQVpcns/tzFgFVkVp6ak6RykZyWb3gu8ckUpd6YkTlacOd3DXGJjIpD4Q6zJirizvaiAjSSHlOsA+6sNh2A==", - "dev": true, - "license": "MIT", - "dependencies": { - "lodash": "^4.17.15" - }, - "engines": { - "node": ">= 10" - } - }, "node_modules/chalk": { "version": "4.1.2", "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", @@ -298,19 +189,6 @@ "dev": true, "license": "MIT" }, - "node_modules/entities": { - "version": "4.5.0", - "resolved": "https://registry.npmjs.org/entities/-/entities-4.5.0.tgz", - "integrity": "sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw==", - "dev": true, - "license": "BSD-2-Clause", - "engines": { - "node": ">=0.12" - }, - "funding": { - "url": "https://github.com/fb55/entities?sponsor=1" - } - }, "node_modules/escape-string-regexp": { "version": "1.0.5", "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", @@ -559,13 +437,6 @@ "which": "bin/which" } }, - "node_modules/graceful-fs": { - "version": "4.2.11", - "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.11.tgz", - "integrity": "sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==", - "dev": true, - "license": "ISC" - }, "node_modules/grunt": { "version": "1.6.1", "resolved": "https://registry.npmjs.org/grunt/-/grunt-1.6.1.tgz", @@ -968,56 +839,6 @@ "js-yaml": "bin/js-yaml.js" } }, - "node_modules/js2xmlparser": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/js2xmlparser/-/js2xmlparser-4.0.2.tgz", - "integrity": "sha512-6n4D8gLlLf1n5mNLQPRfViYzu9RATblzPEtm1SthMX1Pjao0r9YI9nw7ZIfRxQMERS87mcswrg+r/OYrPRX6jA==", - "dev": true, - "license": "Apache-2.0", - "dependencies": { - "xmlcreate": "^2.0.4" - } - }, - "node_modules/jsdoc": { - "version": "4.0.4", - "resolved": "https://registry.npmjs.org/jsdoc/-/jsdoc-4.0.4.tgz", - "integrity": "sha512-zeFezwyXeG4syyYHbvh1A967IAqq/67yXtXvuL5wnqCkFZe8I0vKfm+EO+YEvLguo6w9CDUbrAXVtJSHh2E8rw==", - "dev": true, - "license": "Apache-2.0", - "dependencies": { - "@babel/parser": "^7.20.15", - "@jsdoc/salty": "^0.2.1", - "@types/markdown-it": "^14.1.1", - "bluebird": "^3.7.2", - "catharsis": "^0.9.0", - "escape-string-regexp": "^2.0.0", - "js2xmlparser": "^4.0.2", - "klaw": "^3.0.0", - "markdown-it": "^14.1.0", - "markdown-it-anchor": "^8.6.7", - "marked": "^4.0.10", - "mkdirp": "^1.0.4", - "requizzle": "^0.2.3", - "strip-json-comments": "^3.1.0", - "underscore": "~1.13.2" - }, - "bin": { - "jsdoc": "jsdoc.js" - }, - "engines": { - "node": ">=12.0.0" - } - }, - "node_modules/jsdoc/node_modules/escape-string-regexp": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-2.0.0.tgz", - "integrity": "sha512-UpzcLCXolUWcNu5HtVMHYdXJjArjsF9C0aNnquZYY4uW/Vu0miy5YoWvbV345HauVvcAUnpRuhMMcqTcGOY2+w==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, "node_modules/kind-of": { "version": "6.0.3", "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz", @@ -1028,16 +849,6 @@ "node": ">=0.10.0" } }, - "node_modules/klaw": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/klaw/-/klaw-3.0.0.tgz", - "integrity": "sha512-0Fo5oir+O9jnXu5EefYbVK+mHMBeEVEy2cmctR1O1NECcCkPRreJKrS6Qt/j3KC2C148Dfo9i3pCmCMsdqGr0g==", - "dev": true, - "license": "MIT", - "dependencies": { - "graceful-fs": "^4.1.9" - } - }, "node_modules/liftup": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/liftup/-/liftup-3.0.1.tgz", @@ -1074,16 +885,6 @@ "node": ">= 8" } }, - "node_modules/linkify-it": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/linkify-it/-/linkify-it-5.0.0.tgz", - "integrity": "sha512-5aHCbzQRADcdP+ATqnDuhhJ/MRIqDkZX5pyjFHRRysS8vZ5AbqGEoFIb6pYHPZ+L/OC2Lc+xT8uHVVR5CAK/wQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "uc.micro": "^2.0.0" - } - }, "node_modules/lodash": { "version": "4.17.21", "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", @@ -1114,55 +915,6 @@ "node": ">=0.10.0" } }, - "node_modules/markdown-it": { - "version": "14.1.0", - "resolved": "https://registry.npmjs.org/markdown-it/-/markdown-it-14.1.0.tgz", - "integrity": "sha512-a54IwgWPaeBCAAsv13YgmALOF1elABB08FxO9i+r4VFk5Vl4pKokRPeX8u5TCgSsPi6ec1otfLjdOpVcgbpshg==", - "dev": true, - "license": "MIT", - "dependencies": { - "argparse": "^2.0.1", - "entities": "^4.4.0", - "linkify-it": "^5.0.0", - "mdurl": "^2.0.0", - "punycode.js": "^2.3.1", - "uc.micro": "^2.1.0" - }, - "bin": { - "markdown-it": "bin/markdown-it.mjs" - } - }, - "node_modules/markdown-it-anchor": { - "version": "8.6.7", - "resolved": "https://registry.npmjs.org/markdown-it-anchor/-/markdown-it-anchor-8.6.7.tgz", - "integrity": "sha512-FlCHFwNnutLgVTflOYHPW2pPcl2AACqVzExlkGQNsi4CJgqOHN7YTgDd4LuhgN1BFO3TS0vLAruV1Td6dwWPJA==", - "dev": true, - "license": "Unlicense", - "peerDependencies": { - "@types/markdown-it": "*", - "markdown-it": "*" - } - }, - "node_modules/markdown-it/node_modules/argparse": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", - "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", - "dev": true, - "license": "Python-2.0" - }, - "node_modules/marked": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/marked/-/marked-4.3.0.tgz", - "integrity": "sha512-PRsaiG84bK+AMvxziE/lCFss8juXjNaWzVbN5tXAm4XjeaS9NAHhop+PjQxz2A9h8Q4M/xGmzP8vqNwy6JeK0A==", - "dev": true, - "license": "MIT", - "bin": { - "marked": "bin/marked.js" - }, - "engines": { - "node": ">= 12" - } - }, "node_modules/maxmin": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/maxmin/-/maxmin-3.0.0.tgz", @@ -1182,13 +934,6 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/mdurl": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/mdurl/-/mdurl-2.0.0.tgz", - "integrity": "sha512-Lf+9+2r+Tdp5wXDXC4PcIBjTDtq4UKjCPMQhKIuzpJNW0b96kVqSwW0bT7FhRSfmAiFYgP+SCRvdrDozfh0U5w==", - "dev": true, - "license": "MIT" - }, "node_modules/micromatch": { "version": "4.0.8", "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.8.tgz", @@ -1216,19 +961,6 @@ "node": "*" } }, - "node_modules/mkdirp": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz", - "integrity": "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==", - "dev": true, - "license": "MIT", - "bin": { - "mkdirp": "bin/cmd.js" - }, - "engines": { - "node": ">=10" - } - }, "node_modules/nopt": { "version": "3.0.6", "resolved": "https://registry.npmjs.org/nopt/-/nopt-3.0.6.tgz", @@ -1428,16 +1160,6 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/punycode.js": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/punycode.js/-/punycode.js-2.3.1.tgz", - "integrity": "sha512-uxFIHU0YlHYhDQtV4R9J6a52SLx28BCjT+4ieh7IGbgwVJWO+km431c4yRlREUAsAmt/uMjQUyQHNEPf0M39CA==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=6" - } - }, "node_modules/rechoir": { "version": "0.7.1", "resolved": "https://registry.npmjs.org/rechoir/-/rechoir-0.7.1.tgz", @@ -1451,16 +1173,6 @@ "node": ">= 0.10" } }, - "node_modules/requizzle": { - "version": "0.2.4", - "resolved": "https://registry.npmjs.org/requizzle/-/requizzle-0.2.4.tgz", - "integrity": "sha512-JRrFk1D4OQ4SqovXOgdav+K8EAhSB/LJZqCz8tbX0KObcdeM15Ss59ozWMBWmmINMagCwmqn4ZNryUGpBsl6Jw==", - "dev": true, - "license": "MIT", - "dependencies": { - "lodash": "^4.17.21" - } - }, "node_modules/resolve": { "version": "1.22.10", "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.10.tgz", @@ -1520,19 +1232,6 @@ "dev": true, "license": "BSD-3-Clause" }, - "node_modules/strip-json-comments": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz", - "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, "node_modules/supports-color": { "version": "7.2.0", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", @@ -1578,13 +1277,6 @@ "node": ">=8.0" } }, - "node_modules/uc.micro": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/uc.micro/-/uc.micro-2.1.0.tgz", - "integrity": "sha512-ARDJmphmdvUk6Glw7y9DQ2bFkKBHwQHLi2lsaH6PPmz/Ka9sFOBsBluozhDltWmnv9u/cF6Rt87znRTPV+yp/A==", - "dev": true, - "license": "MIT" - }, "node_modules/uglify-js": { "version": "3.19.3", "resolved": "https://registry.npmjs.org/uglify-js/-/uglify-js-3.19.3.tgz", @@ -1608,13 +1300,6 @@ "node": ">=0.10.0" } }, - "node_modules/underscore": { - "version": "1.13.7", - "resolved": "https://registry.npmjs.org/underscore/-/underscore-1.13.7.tgz", - "integrity": "sha512-GMXzWtsc57XAtguZgaQViUOzs0KTkk8ojr3/xAxXLITqf/3EMwxC0inyETfDFjH/Krbhuep0HNbbjI9i/q3F3g==", - "dev": true, - "license": "MIT" - }, "node_modules/underscore.string": { "version": "3.3.6", "resolved": "https://registry.npmjs.org/underscore.string/-/underscore.string-3.3.6.tgz", @@ -1688,13 +1373,6 @@ "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==", "dev": true, "license": "ISC" - }, - "node_modules/xmlcreate": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/xmlcreate/-/xmlcreate-2.0.4.tgz", - "integrity": "sha512-nquOebG4sngPmGPICTS5EnxqhKbCmz5Ox5hsszI2T6U5qdrJizBc+0ilYSEjTSzU0yZcmvppztXe/5Al5fUwdg==", - "dev": true, - "license": "Apache-2.0" } } } diff --git a/package.json b/package.json index b501242..8b6e02d 100644 --- a/package.json +++ b/package.json @@ -24,8 +24,7 @@ "devDependencies": { "grunt": "^1.6.1", "grunt-contrib-concat": "^2.1.0", - "grunt-contrib-uglify": "^5.2.1", - "jsdoc": "^4.0.4" + "grunt-contrib-uglify": "^5.2.1" }, "scripts": { "test": "grunt", diff --git a/src/core/SPE.Emitter.js b/src/core/SPE.Emitter.js index c9eba34..904a303 100644 --- a/src/core/SPE.Emitter.js +++ b/src/core/SPE.Emitter.js @@ -149,132 +149,127 @@ * * @param {EmitterOptions} options A map of options to configure the emitter. */ -SPE.Emitter = function( options ) { - 'use strict'; +SPE.Emitter = function (options) { + "use strict"; - var utils = SPE.utils, - types = utils.types, - lifetimeLength = SPE.valueOverLifetimeLength; + let utils = SPE.utils; + let types = utils.types; + let lifetimeLength = SPE.valueOverLifetimeLength; // Ensure we have a map of options to play with, // and that each option is in the correct format. - options = utils.ensureTypedArg( options, types.OBJECT, {} ); - options.position = utils.ensureTypedArg( options.position, types.OBJECT, {} ); - options.velocity = utils.ensureTypedArg( options.velocity, types.OBJECT, {} ); - options.acceleration = utils.ensureTypedArg( options.acceleration, types.OBJECT, {} ); - options.radius = utils.ensureTypedArg( options.radius, types.OBJECT, {} ); - options.drag = utils.ensureTypedArg( options.drag, types.OBJECT, {} ); - options.rotation = utils.ensureTypedArg( options.rotation, types.OBJECT, {} ); - options.color = utils.ensureTypedArg( options.color, types.OBJECT, {} ); - options.opacity = utils.ensureTypedArg( options.opacity, types.OBJECT, {} ); - options.size = utils.ensureTypedArg( options.size, types.OBJECT, {} ); - options.angle = utils.ensureTypedArg( options.angle, types.OBJECT, {} ); - options.wiggle = utils.ensureTypedArg( options.wiggle, types.OBJECT, {} ); - options.maxAge = utils.ensureTypedArg( options.maxAge, types.OBJECT, {} ); - - if ( options.onParticleSpawn ) { - console.warn( 'onParticleSpawn has been removed. Please set properties directly to alter values at runtime.' ); + options = utils.ensureTypedArg(options, types.OBJECT, {}); + options.position = utils.ensureTypedArg(options.position, types.OBJECT, {}); + options.velocity = utils.ensureTypedArg(options.velocity, types.OBJECT, {}); + options.acceleration = utils.ensureTypedArg(options.acceleration, types.OBJECT, {}); + options.radius = utils.ensureTypedArg(options.radius, types.OBJECT, {}); + options.drag = utils.ensureTypedArg(options.drag, types.OBJECT, {}); + options.rotation = utils.ensureTypedArg(options.rotation, types.OBJECT, {}); + options.color = utils.ensureTypedArg(options.color, types.OBJECT, {}); + options.opacity = utils.ensureTypedArg(options.opacity, types.OBJECT, {}); + options.size = utils.ensureTypedArg(options.size, types.OBJECT, {}); + options.angle = utils.ensureTypedArg(options.angle, types.OBJECT, {}); + options.wiggle = utils.ensureTypedArg(options.wiggle, types.OBJECT, {}); + options.maxAge = utils.ensureTypedArg(options.maxAge, types.OBJECT, {}); + + if (options.onParticleSpawn) { + console.warn("onParticleSpawn has been removed. Please set properties directly to alter values at runtime."); } this.uuid = THREE.Math.generateUUID(); - this.type = utils.ensureTypedArg( options.type, types.NUMBER, SPE.distributions.BOX ); + this.type = utils.ensureTypedArg(options.type, types.NUMBER, SPE.distributions.BOX); // Start assigning properties...kicking it off with props that DON'T support values over // lifetimes. // // Btw, values over lifetimes are just the new way of referring to *Start, *Middle, and *End. this.position = { - _value: utils.ensureInstanceOf( options.position.value, THREE.Vector3, new THREE.Vector3() ), - _spread: utils.ensureInstanceOf( options.position.spread, THREE.Vector3, new THREE.Vector3() ), - _spreadClamp: utils.ensureInstanceOf( options.position.spreadClamp, THREE.Vector3, new THREE.Vector3() ), - _distribution: utils.ensureTypedArg( options.position.distribution, types.NUMBER, this.type ), - _randomise: utils.ensureTypedArg( options.position.randomise, types.BOOLEAN, false ), - _radius: utils.ensureTypedArg( options.position.radius, types.NUMBER, 10 ), - _radiusScale: utils.ensureInstanceOf( options.position.radiusScale, THREE.Vector3, new THREE.Vector3( 1, 1, 1 ) ), - _distributionClamp: utils.ensureTypedArg( options.position.distributionClamp, types.NUMBER, 0 ), + _value: utils.ensureInstanceOf(options.position.value, THREE.Vector3, new THREE.Vector3()), + _spread: utils.ensureInstanceOf(options.position.spread, THREE.Vector3, new THREE.Vector3()), + _spreadClamp: utils.ensureInstanceOf(options.position.spreadClamp, THREE.Vector3, new THREE.Vector3()), + _distribution: utils.ensureTypedArg(options.position.distribution, types.NUMBER, this.type), + _randomise: utils.ensureTypedArg(options.position.randomise, types.BOOLEAN, false), + _radius: utils.ensureTypedArg(options.position.radius, types.NUMBER, 10), + _radiusScale: utils.ensureInstanceOf(options.position.radiusScale, THREE.Vector3, new THREE.Vector3(1, 1, 1)), + _distributionClamp: utils.ensureTypedArg(options.position.distributionClamp, types.NUMBER, 0), }; this.velocity = { - _value: utils.ensureInstanceOf( options.velocity.value, THREE.Vector3, new THREE.Vector3() ), - _spread: utils.ensureInstanceOf( options.velocity.spread, THREE.Vector3, new THREE.Vector3() ), - _distribution: utils.ensureTypedArg( options.velocity.distribution, types.NUMBER, this.type ), - _randomise: utils.ensureTypedArg( options.position.randomise, types.BOOLEAN, false ) + _value: utils.ensureInstanceOf(options.velocity.value, THREE.Vector3, new THREE.Vector3()), + _spread: utils.ensureInstanceOf(options.velocity.spread, THREE.Vector3, new THREE.Vector3()), + _distribution: utils.ensureTypedArg(options.velocity.distribution, types.NUMBER, this.type), + _randomise: utils.ensureTypedArg(options.position.randomise, types.BOOLEAN, false), }; this.acceleration = { - _value: utils.ensureInstanceOf( options.acceleration.value, THREE.Vector3, new THREE.Vector3() ), - _spread: utils.ensureInstanceOf( options.acceleration.spread, THREE.Vector3, new THREE.Vector3() ), - _distribution: utils.ensureTypedArg( options.acceleration.distribution, types.NUMBER, this.type ), - _randomise: utils.ensureTypedArg( options.position.randomise, types.BOOLEAN, false ) + _value: utils.ensureInstanceOf(options.acceleration.value, THREE.Vector3, new THREE.Vector3()), + _spread: utils.ensureInstanceOf(options.acceleration.spread, THREE.Vector3, new THREE.Vector3()), + _distribution: utils.ensureTypedArg(options.acceleration.distribution, types.NUMBER, this.type), + _randomise: utils.ensureTypedArg(options.position.randomise, types.BOOLEAN, false), }; this.drag = { - _value: utils.ensureTypedArg( options.drag.value, types.NUMBER, 0 ), - _spread: utils.ensureTypedArg( options.drag.spread, types.NUMBER, 0 ), - _randomise: utils.ensureTypedArg( options.position.randomise, types.BOOLEAN, false ) + _value: utils.ensureTypedArg(options.drag.value, types.NUMBER, 0), + _spread: utils.ensureTypedArg(options.drag.spread, types.NUMBER, 0), + _randomise: utils.ensureTypedArg(options.position.randomise, types.BOOLEAN, false), }; this.wiggle = { - _value: utils.ensureTypedArg( options.wiggle.value, types.NUMBER, 0 ), - _spread: utils.ensureTypedArg( options.wiggle.spread, types.NUMBER, 0 ) + _value: utils.ensureTypedArg(options.wiggle.value, types.NUMBER, 0), + _spread: utils.ensureTypedArg(options.wiggle.spread, types.NUMBER, 0), }; this.rotation = { - _axis: utils.ensureInstanceOf( options.rotation.axis, THREE.Vector3, new THREE.Vector3( 0.0, 1.0, 0.0 ) ), - _axisSpread: utils.ensureInstanceOf( options.rotation.axisSpread, THREE.Vector3, new THREE.Vector3() ), - _angle: utils.ensureTypedArg( options.rotation.angle, types.NUMBER, 0 ), - _angleSpread: utils.ensureTypedArg( options.rotation.angleSpread, types.NUMBER, 0 ), - _static: utils.ensureTypedArg( options.rotation.static, types.BOOLEAN, false ), - _center: utils.ensureInstanceOf( options.rotation.center, THREE.Vector3, this.position._value.clone() ), - _randomise: utils.ensureTypedArg( options.position.randomise, types.BOOLEAN, false ) + _axis: utils.ensureInstanceOf(options.rotation.axis, THREE.Vector3, new THREE.Vector3(0.0, 1.0, 0.0)), + _axisSpread: utils.ensureInstanceOf(options.rotation.axisSpread, THREE.Vector3, new THREE.Vector3()), + _angle: utils.ensureTypedArg(options.rotation.angle, types.NUMBER, 0), + _angleSpread: utils.ensureTypedArg(options.rotation.angleSpread, types.NUMBER, 0), + _static: utils.ensureTypedArg(options.rotation.static, types.BOOLEAN, false), + _center: utils.ensureInstanceOf(options.rotation.center, THREE.Vector3, this.position._value.clone()), + _randomise: utils.ensureTypedArg(options.position.randomise, types.BOOLEAN, false), }; - this.maxAge = { - _value: utils.ensureTypedArg( options.maxAge.value, types.NUMBER, 2 ), - _spread: utils.ensureTypedArg( options.maxAge.spread, types.NUMBER, 0 ) + _value: utils.ensureTypedArg(options.maxAge.value, types.NUMBER, 2), + _spread: utils.ensureTypedArg(options.maxAge.spread, types.NUMBER, 0), }; - - // The following properties can support either single values, or an array of values that change // the property over a particle's lifetime (value over lifetime). this.color = { - _value: utils.ensureArrayInstanceOf( options.color.value, THREE.Color, new THREE.Color() ), - _spread: utils.ensureArrayInstanceOf( options.color.spread, THREE.Vector3, new THREE.Vector3() ), - _randomise: utils.ensureTypedArg( options.position.randomise, types.BOOLEAN, false ) + _value: utils.ensureArrayInstanceOf(options.color.value, THREE.Color, new THREE.Color()), + _spread: utils.ensureArrayInstanceOf(options.color.spread, THREE.Vector3, new THREE.Vector3()), + _randomise: utils.ensureTypedArg(options.position.randomise, types.BOOLEAN, false), }; this.opacity = { - _value: utils.ensureArrayTypedArg( options.opacity.value, types.NUMBER, 1 ), - _spread: utils.ensureArrayTypedArg( options.opacity.spread, types.NUMBER, 0 ), - _randomise: utils.ensureTypedArg( options.position.randomise, types.BOOLEAN, false ) + _value: utils.ensureArrayTypedArg(options.opacity.value, types.NUMBER, 1), + _spread: utils.ensureArrayTypedArg(options.opacity.spread, types.NUMBER, 0), + _randomise: utils.ensureTypedArg(options.position.randomise, types.BOOLEAN, false), }; this.size = { - _value: utils.ensureArrayTypedArg( options.size.value, types.NUMBER, 1 ), - _spread: utils.ensureArrayTypedArg( options.size.spread, types.NUMBER, 0 ), - _randomise: utils.ensureTypedArg( options.position.randomise, types.BOOLEAN, false ) + _value: utils.ensureArrayTypedArg(options.size.value, types.NUMBER, 1), + _spread: utils.ensureArrayTypedArg(options.size.spread, types.NUMBER, 0), + _randomise: utils.ensureTypedArg(options.position.randomise, types.BOOLEAN, false), }; this.angle = { - _value: utils.ensureArrayTypedArg( options.angle.value, types.NUMBER, 0 ), - _spread: utils.ensureArrayTypedArg( options.angle.spread, types.NUMBER, 0 ), - _randomise: utils.ensureTypedArg( options.position.randomise, types.BOOLEAN, false ) + _value: utils.ensureArrayTypedArg(options.angle.value, types.NUMBER, 0), + _spread: utils.ensureArrayTypedArg(options.angle.spread, types.NUMBER, 0), + _randomise: utils.ensureTypedArg(options.position.randomise, types.BOOLEAN, false), }; - // Assign renaining option values. - this.particleCount = utils.ensureTypedArg( options.particleCount, types.NUMBER, 100 ); - this.duration = utils.ensureTypedArg( options.duration, types.NUMBER, null ); - this.isStatic = utils.ensureTypedArg( options.isStatic, types.BOOLEAN, false ); - this.activeMultiplier = utils.ensureTypedArg( options.activeMultiplier, types.NUMBER, 1 ); - this.direction = utils.ensureTypedArg( options.direction, types.NUMBER, 1 ); + this.particleCount = utils.ensureTypedArg(options.particleCount, types.NUMBER, 100); + this.duration = utils.ensureTypedArg(options.duration, types.NUMBER, null); + this.isStatic = utils.ensureTypedArg(options.isStatic, types.BOOLEAN, false); + this.activeMultiplier = utils.ensureTypedArg(options.activeMultiplier, types.NUMBER, 1); + this.direction = utils.ensureTypedArg(options.direction, types.NUMBER, 1); // Whether this emitter is alive or not. - this.alive = utils.ensureTypedArg( options.alive, types.BOOLEAN, true ); - + this.alive = utils.ensureTypedArg(options.alive, types.BOOLEAN, true); // The following properties are set internally and are not // user-controllable. @@ -291,8 +286,6 @@ SPE.Emitter = function( options ) { // The end of the range in the attribute buffers this.attributeEnd = 0; - - // Holds the time the emitter has been alive for. this.age = 0.0; @@ -326,17 +319,19 @@ SPE.Emitter = function( options ) { this.resetFlags = { // params: utils.ensureTypedArg( options.maxAge.randomise, types.BOOLEAN, !!options.maxAge.spread ) || // utils.ensureTypedArg( options.wiggle.randomise, types.BOOLEAN, !!options.wiggle.spread ), - position: utils.ensureTypedArg( options.position.randomise, types.BOOLEAN, false ) || - utils.ensureTypedArg( options.radius.randomise, types.BOOLEAN, false ), - velocity: utils.ensureTypedArg( options.velocity.randomise, types.BOOLEAN, false ), - acceleration: utils.ensureTypedArg( options.acceleration.randomise, types.BOOLEAN, false ) || - utils.ensureTypedArg( options.drag.randomise, types.BOOLEAN, false ), - rotation: utils.ensureTypedArg( options.rotation.randomise, types.BOOLEAN, false ), - rotationCenter: utils.ensureTypedArg( options.rotation.randomise, types.BOOLEAN, false ), - size: utils.ensureTypedArg( options.size.randomise, types.BOOLEAN, false ), - color: utils.ensureTypedArg( options.color.randomise, types.BOOLEAN, false ), - opacity: utils.ensureTypedArg( options.opacity.randomise, types.BOOLEAN, false ), - angle: utils.ensureTypedArg( options.angle.randomise, types.BOOLEAN, false ) + position: + utils.ensureTypedArg(options.position.randomise, types.BOOLEAN, false) || + utils.ensureTypedArg(options.radius.randomise, types.BOOLEAN, false), + velocity: utils.ensureTypedArg(options.velocity.randomise, types.BOOLEAN, false), + acceleration: + utils.ensureTypedArg(options.acceleration.randomise, types.BOOLEAN, false) || + utils.ensureTypedArg(options.drag.randomise, types.BOOLEAN, false), + rotation: utils.ensureTypedArg(options.rotation.randomise, types.BOOLEAN, false), + rotationCenter: utils.ensureTypedArg(options.rotation.randomise, types.BOOLEAN, false), + size: utils.ensureTypedArg(options.size.randomise, types.BOOLEAN, false), + color: utils.ensureTypedArg(options.color.randomise, types.BOOLEAN, false), + opacity: utils.ensureTypedArg(options.opacity.randomise, types.BOOLEAN, false), + angle: utils.ensureTypedArg(options.angle.randomise, types.BOOLEAN, false), }; this.updateFlags = {}; @@ -345,24 +340,24 @@ SPE.Emitter = function( options ) { // A map to indicate which emitter parameters should update // which attribute. this.updateMap = { - maxAge: 'params', - position: 'position', - velocity: 'velocity', - acceleration: 'acceleration', - drag: 'acceleration', - wiggle: 'params', - rotation: 'rotation', - size: 'size', - color: 'color', - opacity: 'opacity', - angle: 'angle' + maxAge: "params", + position: "position", + velocity: "velocity", + acceleration: "acceleration", + drag: "acceleration", + wiggle: "params", + rotation: "rotation", + size: "size", + color: "color", + opacity: "opacity", + angle: "angle", }; - for ( var i in this.updateMap ) { - if ( this.updateMap.hasOwnProperty( i ) ) { - this.updateCounts[ this.updateMap[ i ] ] = 0.0; - this.updateFlags[ this.updateMap[ i ] ] = false; - this._createGetterSetters( this[ i ], i ); + for (let i in this.updateMap) { + if (this.updateMap.hasOwnProperty(i)) { + this.updateCounts[this.updateMap[i]] = 0.0; + this.updateFlags[this.updateMap[i]] = false; + this._createGetterSetters(this[i], i); } } @@ -370,148 +365,141 @@ SPE.Emitter = function( options ) { this.attributeKeys = null; this.attributeCount = 0; - // Ensure that the value-over-lifetime property objects above // have value and spread properties that are of the same length. // // Also, for now, make sure they have a length of 3 (min/max arguments here). - utils.ensureValueOverLifetimeCompliance( this.color, lifetimeLength, lifetimeLength ); - utils.ensureValueOverLifetimeCompliance( this.opacity, lifetimeLength, lifetimeLength ); - utils.ensureValueOverLifetimeCompliance( this.size, lifetimeLength, lifetimeLength ); - utils.ensureValueOverLifetimeCompliance( this.angle, lifetimeLength, lifetimeLength ); + utils.ensureValueOverLifetimeCompliance(this.color, lifetimeLength, lifetimeLength); + utils.ensureValueOverLifetimeCompliance(this.opacity, lifetimeLength, lifetimeLength); + utils.ensureValueOverLifetimeCompliance(this.size, lifetimeLength, lifetimeLength); + utils.ensureValueOverLifetimeCompliance(this.angle, lifetimeLength, lifetimeLength); }; SPE.Emitter.constructor = SPE.Emitter; -SPE.Emitter.prototype._createGetterSetters = function( propObj, propName ) { - 'use strict'; +SPE.Emitter.prototype._createGetterSetters = function (propObj, propName) { + "use strict"; - var self = this; + let self = this; - for ( var i in propObj ) { - if ( propObj.hasOwnProperty( i ) ) { + for (let i in propObj) { + if (propObj.hasOwnProperty(i)) { + let name = i.replace("_", ""); - var name = i.replace( '_', '' ); - - Object.defineProperty( propObj, name, { - get: ( function( prop ) { - return function() { - return this[ prop ]; + Object.defineProperty(propObj, name, { + get: (function (prop) { + return function () { + return this[prop]; }; - }( i ) ), + })(i), - set: ( function( prop ) { - return function( value ) { - var mapName = self.updateMap[ propName ], - prevValue = this[ prop ], + set: (function (prop) { + return function (value) { + let mapName = self.updateMap[propName], + prevValue = this[prop], length = SPE.valueOverLifetimeLength; - if ( prop === '_rotationCenter' ) { + if (prop === "_rotationCenter") { self.updateFlags.rotationCenter = true; self.updateCounts.rotationCenter = 0.0; - } - else if ( prop === '_randomise' ) { - self.resetFlags[ mapName ] = value; - } - else { - self.updateFlags[ mapName ] = true; - self.updateCounts[ mapName ] = 0.0; + } else if (prop === "_randomise") { + self.resetFlags[mapName] = value; + } else { + self.updateFlags[mapName] = true; + self.updateCounts[mapName] = 0.0; } self.group._updateDefines(); - this[ prop ] = value; + this[prop] = value; // If the previous value was an array, then make // sure the provided value is interpolated correctly. - if ( Array.isArray( prevValue ) ) { - SPE.utils.ensureValueOverLifetimeCompliance( self[ propName ], length, length ); + if (Array.isArray(prevValue)) { + SPE.utils.ensureValueOverLifetimeCompliance(self[propName], length, length); } }; - }( i ) ) - } ); + })(i), + }); } } }; -SPE.Emitter.prototype._setBufferUpdateRanges = function( keys ) { - 'use strict'; +SPE.Emitter.prototype._setBufferUpdateRanges = function (keys) { + "use strict"; this.attributeKeys = keys; this.attributeCount = keys.length; - for ( var i = this.attributeCount - 1; i >= 0; --i ) { - this.bufferUpdateRanges[ keys[ i ] ] = { + for (let i = this.attributeCount - 1; i >= 0; --i) { + this.bufferUpdateRanges[keys[i]] = { min: Number.POSITIVE_INFINITY, - max: Number.NEGATIVE_INFINITY + max: Number.NEGATIVE_INFINITY, }; } }; -SPE.Emitter.prototype._calculatePPSValue = function( groupMaxAge ) { - 'use strict'; - - var particleCount = this.particleCount; +SPE.Emitter.prototype._calculatePPSValue = function (groupMaxAge) { + "use strict"; + let particleCount = this.particleCount; // Calculate the `particlesPerSecond` value for this emitter. It's used // when determining which particles should die and which should live to // see another day. Or be born, for that matter. The "God" property. - if ( this.duration ) { - this.particlesPerSecond = particleCount / ( groupMaxAge < this.duration ? groupMaxAge : this.duration ); - } - else { + if (this.duration) { + this.particlesPerSecond = particleCount / (groupMaxAge < this.duration ? groupMaxAge : this.duration); + } else { this.particlesPerSecond = particleCount / groupMaxAge; } }; -SPE.Emitter.prototype._setAttributeOffset = function( startIndex ) { +SPE.Emitter.prototype._setAttributeOffset = function (startIndex) { this.attributeOffset = startIndex; this.activationIndex = startIndex; this.activationEnd = startIndex + this.particleCount; }; +SPE.Emitter.prototype._assignValue = function (prop, index) { + "use strict"; -SPE.Emitter.prototype._assignValue = function( prop, index ) { - 'use strict'; - - switch ( prop ) { - case 'position': - this._assignPositionValue( index ); + switch (prop) { + case "position": + this._assignPositionValue(index); break; - case 'velocity': - case 'acceleration': - this._assignForceValue( index, prop ); + case "velocity": + case "acceleration": + this._assignForceValue(index, prop); break; - case 'size': - case 'opacity': - this._assignAbsLifetimeValue( index, prop ); + case "size": + case "opacity": + this._assignAbsLifetimeValue(index, prop); break; - case 'angle': - this._assignAngleValue( index ); + case "angle": + this._assignAngleValue(index); break; - case 'params': - this._assignParamsValue( index ); + case "params": + this._assignParamsValue(index); break; - case 'rotation': - this._assignRotationValue( index ); + case "rotation": + this._assignRotationValue(index); break; - case 'color': - this._assignColorValue( index ); + case "color": + this._assignColorValue(index); break; } }; -SPE.Emitter.prototype._assignPositionValue = function( index ) { - 'use strict'; +SPE.Emitter.prototype._assignPositionValue = function (index) { + "use strict"; - var distributions = SPE.distributions, + let distributions = SPE.distributions, utils = SPE.utils, prop = this.position, attr = this.attributes.position, @@ -519,43 +507,60 @@ SPE.Emitter.prototype._assignPositionValue = function( index ) { spread = prop._spread, distribution = prop._distribution; - switch ( distribution ) { + switch (distribution) { case distributions.BOX: - utils.randomVector3( attr, index, value, spread, prop._spreadClamp ); + utils.randomVector3(attr, index, value, spread, prop._spreadClamp); break; case distributions.SPHERE: - utils.randomVector3OnSphere( attr, index, value, prop._radius, prop._spread.x, prop._radiusScale, prop._spreadClamp.x, prop._distributionClamp || this.particleCount ); + utils.randomVector3OnSphere( + attr, + index, + value, + prop._radius, + prop._spread.x, + prop._radiusScale, + prop._spreadClamp.x, + prop._distributionClamp || this.particleCount + ); break; case distributions.DISC: - utils.randomVector3OnDisc( attr, index, value, prop._radius, prop._spread.x, prop._radiusScale, prop._spreadClamp.x ); + utils.randomVector3OnDisc( + attr, + index, + value, + prop._radius, + prop._spread.x, + prop._radiusScale, + prop._spreadClamp.x + ); break; case distributions.LINE: - utils.randomVector3OnLine( attr, index, value, spread ); + utils.randomVector3OnLine(attr, index, value, spread); break; } }; -SPE.Emitter.prototype._assignForceValue = function( index, attrName ) { - 'use strict'; - - var distributions = SPE.distributions, - utils = SPE.utils, - prop = this[ attrName ], - value = prop._value, - spread = prop._spread, - distribution = prop._distribution, - pos, - positionX, - positionY, - positionZ, - i; - - switch ( distribution ) { +SPE.Emitter.prototype._assignForceValue = function (index, attrName) { + "use strict"; + + let distributions = SPE.distributions; + let utils = SPE.utils; + let prop = this[attrName]; + let value = prop._value; + let spread = prop._spread; + let distribution = prop._distribution; + let pos; + let positionX; + let positionY; + let positionZ; + let i; + + switch (distribution) { case distributions.BOX: - utils.randomVector3( this.attributes[ attrName ], index, value, spread ); + utils.randomVector3(this.attributes[attrName], index, value, spread); break; case distributions.SPHERE: @@ -567,13 +572,16 @@ SPE.Emitter.prototype._assignForceValue = function( index, attrName ) { // positionX = utils.zeroToEpsilon( pos[ i ], true ); // positionY = utils.zeroToEpsilon( pos[ i + 1 ], true ); // positionZ = utils.zeroToEpsilon( pos[ i + 2 ], true ); - positionX = pos[ i ]; - positionY = pos[ i + 1 ]; - positionZ = pos[ i + 2 ]; + positionX = pos[i]; + positionY = pos[i + 1]; + positionZ = pos[i + 2]; utils.randomDirectionVector3OnSphere( - this.attributes[ attrName ], index, - positionX, positionY, positionZ, + this.attributes[attrName], + index, + positionX, + positionY, + positionZ, this.position._value, prop._value.x, prop._spread.x @@ -589,13 +597,16 @@ SPE.Emitter.prototype._assignForceValue = function( index, attrName ) { // positionX = utils.zeroToEpsilon( pos[ i ], true ); // positionY = utils.zeroToEpsilon( pos[ i + 1 ], true ); // positionZ = utils.zeroToEpsilon( pos[ i + 2 ], true ); - positionX = pos[ i ]; - positionY = pos[ i + 1 ]; - positionZ = pos[ i + 2 ]; + positionX = pos[i]; + positionY = pos[i + 1]; + positionZ = pos[i + 2]; utils.randomDirectionVector3OnDisc( - this.attributes[ attrName ], index, - positionX, positionY, positionZ, + this.attributes[attrName], + index, + positionX, + positionY, + positionZ, this.position._value, prop._value.x, prop._spread.x @@ -603,143 +614,144 @@ SPE.Emitter.prototype._assignForceValue = function( index, attrName ) { break; case distributions.LINE: - utils.randomVector3OnLine( this.attributes[ attrName ], index, value, spread ); + utils.randomVector3OnLine(this.attributes[attrName], index, value, spread); break; } - if ( attrName === 'acceleration' ) { - var drag = utils.clamp( utils.randomFloat( this.drag._value, this.drag._spread ), 0, 1 ); - this.attributes.acceleration.typedArray.array[ index * 4 + 3 ] = drag; + if (attrName === "acceleration") { + let drag = utils.clamp(utils.randomFloat(this.drag._value, this.drag._spread), 0, 1); + this.attributes.acceleration.typedArray.array[index * 4 + 3] = drag; } }; -SPE.Emitter.prototype._assignAbsLifetimeValue = function( index, propName ) { - 'use strict'; - - var array = this.attributes[ propName ].typedArray, - prop = this[ propName ], - utils = SPE.utils, - value; - - if ( utils.arrayValuesAreEqual( prop._value ) && utils.arrayValuesAreEqual( prop._spread ) ) { - value = Math.abs( utils.randomFloat( prop._value[ 0 ], prop._spread[ 0 ] ) ); - array.setVec4Components( index, value, value, value, value ); - } - else { - array.setVec4Components( index, - Math.abs( utils.randomFloat( prop._value[ 0 ], prop._spread[ 0 ] ) ), - Math.abs( utils.randomFloat( prop._value[ 1 ], prop._spread[ 1 ] ) ), - Math.abs( utils.randomFloat( prop._value[ 2 ], prop._spread[ 2 ] ) ), - Math.abs( utils.randomFloat( prop._value[ 3 ], prop._spread[ 3 ] ) ) +SPE.Emitter.prototype._assignAbsLifetimeValue = function (index, propName) { + "use strict"; + + let array = this.attributes[propName].typedArray; + let prop = this[propName]; + let utils = SPE.utils; + let value; + + if (utils.arrayValuesAreEqual(prop._value) && utils.arrayValuesAreEqual(prop._spread)) { + value = Math.abs(utils.randomFloat(prop._value[0], prop._spread[0])); + array.setVec4Components(index, value, value, value, value); + } else { + array.setVec4Components( + index, + Math.abs(utils.randomFloat(prop._value[0], prop._spread[0])), + Math.abs(utils.randomFloat(prop._value[1], prop._spread[1])), + Math.abs(utils.randomFloat(prop._value[2], prop._spread[2])), + Math.abs(utils.randomFloat(prop._value[3], prop._spread[3])) ); } }; -SPE.Emitter.prototype._assignAngleValue = function( index ) { - 'use strict'; - - var array = this.attributes.angle.typedArray, - prop = this.angle, - utils = SPE.utils, - value; - - if ( utils.arrayValuesAreEqual( prop._value ) && utils.arrayValuesAreEqual( prop._spread ) ) { - value = utils.randomFloat( prop._value[ 0 ], prop._spread[ 0 ] ); - array.setVec4Components( index, value, value, value, value ); - } - else { - array.setVec4Components( index, - utils.randomFloat( prop._value[ 0 ], prop._spread[ 0 ] ), - utils.randomFloat( prop._value[ 1 ], prop._spread[ 1 ] ), - utils.randomFloat( prop._value[ 2 ], prop._spread[ 2 ] ), - utils.randomFloat( prop._value[ 3 ], prop._spread[ 3 ] ) +SPE.Emitter.prototype._assignAngleValue = function (index) { + "use strict"; + + let array = this.attributes.angle.typedArray; + let prop = this.angle; + let utils = SPE.utils; + let value; + + if (utils.arrayValuesAreEqual(prop._value) && utils.arrayValuesAreEqual(prop._spread)) { + value = utils.randomFloat(prop._value[0], prop._spread[0]); + array.setVec4Components(index, value, value, value, value); + } else { + array.setVec4Components( + index, + utils.randomFloat(prop._value[0], prop._spread[0]), + utils.randomFloat(prop._value[1], prop._spread[1]), + utils.randomFloat(prop._value[2], prop._spread[2]), + utils.randomFloat(prop._value[3], prop._spread[3]) ); } }; -SPE.Emitter.prototype._assignParamsValue = function( index ) { - 'use strict'; +SPE.Emitter.prototype._assignParamsValue = function (index) { + "use strict"; - this.attributes.params.typedArray.setVec4Components( index, + this.attributes.params.typedArray.setVec4Components( + index, this.isStatic ? 1 : 0, 0.0, - Math.abs( SPE.utils.randomFloat( this.maxAge._value, this.maxAge._spread ) ), - SPE.utils.randomFloat( this.wiggle._value, this.wiggle._spread ) + Math.abs(SPE.utils.randomFloat(this.maxAge._value, this.maxAge._spread)), + SPE.utils.randomFloat(this.wiggle._value, this.wiggle._spread) ); }; -SPE.Emitter.prototype._assignRotationValue = function( index ) { - 'use strict'; +SPE.Emitter.prototype._assignRotationValue = function (index) { + "use strict"; - this.attributes.rotation.typedArray.setVec3Components( index, - SPE.utils.getPackedRotationAxis( this.rotation._axis, this.rotation._axisSpread ), - SPE.utils.randomFloat( this.rotation._angle, this.rotation._angleSpread ), + this.attributes.rotation.typedArray.setVec3Components( + index, + SPE.utils.getPackedRotationAxis(this.rotation._axis, this.rotation._axisSpread), + SPE.utils.randomFloat(this.rotation._angle, this.rotation._angleSpread), this.rotation._static ? 0 : 1 ); - this.attributes.rotationCenter.typedArray.setVec3( index, this.rotation._center ); + this.attributes.rotationCenter.typedArray.setVec3(index, this.rotation._center); }; -SPE.Emitter.prototype._assignColorValue = function( index ) { - 'use strict'; - SPE.utils.randomColorAsHex( this.attributes.color, index, this.color._value, this.color._spread ); +SPE.Emitter.prototype._assignColorValue = function (index) { + "use strict"; + SPE.utils.randomColorAsHex(this.attributes.color, index, this.color._value, this.color._spread); }; -SPE.Emitter.prototype._resetParticle = function( index ) { - 'use strict'; - - var resetFlags = this.resetFlags, - updateFlags = this.updateFlags, - updateCounts = this.updateCounts, - keys = this.attributeKeys, - key, - updateFlag; - - for ( var i = this.attributeCount - 1; i >= 0; --i ) { - key = keys[ i ]; - updateFlag = updateFlags[ key ]; - - if ( resetFlags[ key ] === true || updateFlag === true ) { - this._assignValue( key, index ); - this._updateAttributeUpdateRange( key, index ); - - if ( updateFlag === true && updateCounts[ key ] === this.particleCount ) { - updateFlags[ key ] = false; - updateCounts[ key ] = 0.0; - } - else if ( updateFlag == true ) { - ++updateCounts[ key ]; +SPE.Emitter.prototype._resetParticle = function (index) { + "use strict"; + + let resetFlags = this.resetFlags; + let updateFlags = this.updateFlags; + let updateCounts = this.updateCounts; + let keys = this.attributeKeys; + let key; + let updateFlag; + + for (let i = this.attributeCount - 1; i >= 0; --i) { + key = keys[i]; + updateFlag = updateFlags[key]; + + if (resetFlags[key] === true || updateFlag === true) { + this._assignValue(key, index); + this._updateAttributeUpdateRange(key, index); + + if (updateFlag === true && updateCounts[key] === this.particleCount) { + updateFlags[key] = false; + updateCounts[key] = 0.0; + } else if (updateFlag == true) { + ++updateCounts[key]; } } } }; -SPE.Emitter.prototype._updateAttributeUpdateRange = function( attr, i ) { - 'use strict'; +SPE.Emitter.prototype._updateAttributeUpdateRange = function (attr, i) { + "use strict"; - var ranges = this.bufferUpdateRanges[ attr ]; + let ranges = this.bufferUpdateRanges[attr]; - ranges.min = Math.min( i, ranges.min ); - ranges.max = Math.max( i, ranges.max ); + ranges.min = Math.min(i, ranges.min); + ranges.max = Math.max(i, ranges.max); }; -SPE.Emitter.prototype._resetBufferRanges = function() { - 'use strict'; +SPE.Emitter.prototype._resetBufferRanges = function () { + "use strict"; - var ranges = this.bufferUpdateRanges, - keys = this.bufferUpdateKeys, - i = this.bufferUpdateCount - 1, - key; + let ranges = this.bufferUpdateRanges; + let keys = this.bufferUpdateKeys; + let i = this.bufferUpdateCount - 1; + let key; - for ( i; i >= 0; --i ) { - key = keys[ i ]; - ranges[ key ].min = Number.POSITIVE_INFINITY; - ranges[ key ].max = Number.NEGATIVE_INFINITY; + for (let i; i >= 0; --i) { + key = keys[i]; + ranges[key].min = Number.POSITIVE_INFINITY; + ranges[key].max = Number.NEGATIVE_INFINITY; } }; -SPE.Emitter.prototype._onRemove = function() { - 'use strict'; +SPE.Emitter.prototype._onRemove = function () { + "use strict"; // Reset any properties of the emitter that were set by // a group when it was added. this.particlesPerSecond = 0; @@ -752,68 +764,75 @@ SPE.Emitter.prototype._onRemove = function() { this.age = 0.0; }; -SPE.Emitter.prototype._decrementParticleCount = function() { - 'use strict'; +SPE.Emitter.prototype._decrementParticleCount = function () { + "use strict"; --this.activeParticleCount; // TODO: // - Trigger event if count === 0. }; -SPE.Emitter.prototype._incrementParticleCount = function() { - 'use strict'; +SPE.Emitter.prototype._incrementParticleCount = function () { + "use strict"; ++this.activeParticleCount; // TODO: // - Trigger event if count === this.particleCount. }; -SPE.Emitter.prototype._checkParticleAges = function( start, end, params, dt ) { - 'use strict'; - for ( var i = end - 1, index, maxAge, age, alive; i >= start; --i ) { +SPE.Emitter.prototype._checkParticleAges = function (start, end, params, dt) { + "use strict"; + + let index; + let maxAge; + let age; + let alive; + + for (let i = end - 1; i >= start; --i) { index = i * 4; - alive = params[ index ]; + alive = params[index]; - if ( alive === 0.0 ) { + if (alive === 0.0) { continue; } // Increment age - age = params[ index + 1 ]; - maxAge = params[ index + 2 ]; + age = params[index + 1]; + maxAge = params[index + 2]; - if ( this.direction === 1 ) { + if (this.direction === 1) { age += dt; - if ( age >= maxAge ) { + if (age >= maxAge) { age = 0.0; alive = 0.0; this._decrementParticleCount(); } - } - else { + } else { age -= dt; - if ( age <= 0.0 ) { + if (age <= 0.0) { age = maxAge; alive = 0.0; this._decrementParticleCount(); } } - params[ index ] = alive; - params[ index + 1 ] = age; + params[index] = alive; + params[index + 1] = age; - this._updateAttributeUpdateRange( 'params', i ); + this._updateAttributeUpdateRange("params", i); } }; -SPE.Emitter.prototype._activateParticles = function( activationStart, activationEnd, params, dtPerParticle ) { - 'use strict'; - var direction = this.direction; +SPE.Emitter.prototype._activateParticles = function (activationStart, activationEnd, params, dtPerParticle) { + "use strict"; + let direction = this.direction; + let index; + let dtValue; - for ( var i = activationStart, index, dtValue; i < activationEnd; ++i ) { + for (let i = activationStart; i < activationEnd; ++i) { index = i * 4; // Don't re-activate particles that aren't dead yet. @@ -821,7 +840,7 @@ SPE.Emitter.prototype._activateParticles = function( activationStart, activation // continue; // } - if ( params[ index ] != 0.0 && this.particleCount !== 1 ) { + if (params[index] != 0.0 && this.particleCount !== 1) { continue; } @@ -829,10 +848,10 @@ SPE.Emitter.prototype._activateParticles = function( activationStart, activation this._incrementParticleCount(); // Mark the particle as alive. - params[ index ] = 1.0; + params[index] = 1.0; // Reset the particle - this._resetParticle( i ); + this._resetParticle(i); // Move each particle being activated to // it's actual position in time. @@ -840,10 +859,10 @@ SPE.Emitter.prototype._activateParticles = function( activationStart, activation // This stops particles being 'clumped' together // when frame rates are on the lower side of 60fps // or not constant (a very real possibility!) - dtValue = dtPerParticle * ( i - activationStart ) - params[ index + 1 ] = direction === -1 ? params[ index + 2 ] - dtValue : dtValue; + dtValue = dtPerParticle * (i - activationStart); + params[index + 1] = direction === -1 ? params[index + 2] - dtValue : dtValue; - this._updateAttributeUpdateRange( 'params', i ); + this._updateAttributeUpdateRange("params", i); } }; @@ -856,61 +875,59 @@ SPE.Emitter.prototype._activateParticles = function( activationStart, activation * * @param {Number} dt The number of seconds to simulate (deltaTime) */ -SPE.Emitter.prototype.tick = function( dt ) { - 'use strict'; +SPE.Emitter.prototype.tick = function (dt) { + "use strict"; - if ( this.isStatic ) { + if (this.isStatic) { return; } - if ( this.paramsArray === null ) { + if (this.paramsArray === null) { this.paramsArray = this.attributes.params.typedArray.array; } - var start = this.attributeOffset, - end = start + this.particleCount, - params = this.paramsArray, // vec3( alive, age, maxAge, wiggle ) - ppsDt = this.particlesPerSecond * this.activeMultiplier * dt, - activationIndex = this.activationIndex; + let start = this.attributeOffset; + let end = start + this.particleCount; + let params = this.paramsArray; + let ppsDt = this.particlesPerSecond * this.activeMultiplier * dt; + let activationIndex = this.activationIndex; // Reset the buffer update indices. this._resetBufferRanges(); // Increment age for those particles that are alive, // and kill off any particles whose age is over the limit. - this._checkParticleAges( start, end, params, dt ); + this._checkParticleAges(start, end, params, dt); // If the emitter is dead, reset the age of the emitter to zero, // ready to go again if required - if ( this.alive === false ) { + if (this.alive === false) { this.age = 0.0; return; } // If the emitter has a specified lifetime and we've exceeded it, // mark the emitter as dead. - if ( this.duration !== null && this.age > this.duration ) { + if (this.duration !== null && this.age > this.duration) { this.alive = false; this.age = 0.0; return; } + let activationStart = this.particleCount === 1 ? activationIndex : activationIndex | 0; + let activationEnd = Math.min(activationStart + ppsDt, this.activationEnd); + let activationCount = (activationEnd - this.activationIndex) | 0; + let dtPerParticle = activationCount > 0 ? dt / activationCount : 0; - var activationStart = this.particleCount === 1 ? activationIndex : ( activationIndex | 0 ), - activationEnd = Math.min( activationStart + ppsDt, this.activationEnd ), - activationCount = activationEnd - this.activationIndex | 0, - dtPerParticle = activationCount > 0 ? dt / activationCount : 0; - - this._activateParticles( activationStart, activationEnd, params, dtPerParticle ); + this._activateParticles(activationStart, activationEnd, params, dtPerParticle); // Move the activation window forward, soldier. this.activationIndex += ppsDt; - if ( this.activationIndex > end ) { + if (this.activationIndex > end) { this.activationIndex = start; } - // Increment the age of the emitter. this.age += dt; }; @@ -923,23 +940,24 @@ SPE.Emitter.prototype.tick = function( dt ) { * @param {Boolean} [force=undefined] If true, all particles will be marked as dead instantly. * @return {Emitter} This emitter instance. */ -SPE.Emitter.prototype.reset = function( force ) { - 'use strict'; +SPE.Emitter.prototype.reset = function (force) { + "use strict"; this.age = 0.0; this.alive = false; - if ( force === true ) { - var start = this.attributeOffset, - end = start + this.particleCount, - array = this.paramsArray, - attr = this.attributes.params.bufferAttribute; + if (force === true) { + let start = this.attributeOffset; + let end = start + this.particleCount; + let array = this.paramsArray; + let attr = this.attributes.params.bufferAttribute; + let index; - for ( var i = end - 1, index; i >= start; --i ) { + for (let i = end - 1; i >= start; --i) { index = i * 4; - array[ index ] = 0.0; - array[ index + 1 ] = 0.0; + array[index] = 0.0; + array[index + 1] = 0.0; } attr.updateRange.offset = 0; @@ -956,8 +974,8 @@ SPE.Emitter.prototype.reset = function( force ) { * * @return {Emitter} This emitter instance. */ -SPE.Emitter.prototype.enable = function() { - 'use strict'; +SPE.Emitter.prototype.enable = function () { + "use strict"; this.alive = true; return this; }; @@ -970,8 +988,8 @@ SPE.Emitter.prototype.enable = function() { * * @return {Emitter} This emitter instance. */ -SPE.Emitter.prototype.disable = function() { - 'use strict'; +SPE.Emitter.prototype.disable = function () { + "use strict"; this.alive = false; return this; @@ -988,13 +1006,12 @@ SPE.Emitter.prototype.disable = function() { * * @see SPE.Group.prototype.removeEmitter */ -SPE.Emitter.prototype.remove = function() { - 'use strict'; - if ( this.group !== null ) { - this.group.removeEmitter( this ); - } - else { - console.error( 'Emitter does not belong to a group, cannot remove.' ); +SPE.Emitter.prototype.remove = function () { + "use strict"; + if (this.group !== null) { + this.group.removeEmitter(this); + } else { + console.error("Emitter does not belong to a group, cannot remove."); } return this; diff --git a/src/core/SPE.Group.js b/src/core/SPE.Group.js index b9e3349..89e17aa 100644 --- a/src/core/SPE.Group.js +++ b/src/core/SPE.Group.js @@ -50,52 +50,54 @@ * setting particle sizes to be relative to renderer size. */ - /** * The SPE.Group class. Creates a new group, containing a material, geometry, and mesh. * * @constructor * @param {GroupOptions} options A map of options to configure the group instance. */ -SPE.Group = function( options ) { - 'use strict'; +SPE.Group = function (options) { + "use strict"; - var utils = SPE.utils, - types = utils.types; + let utils = SPE.utils; + let types = utils.types; // Ensure we have a map of options to play with - options = utils.ensureTypedArg( options, types.OBJECT, {} ); - options.texture = utils.ensureTypedArg( options.texture, types.OBJECT, {} ); + options = utils.ensureTypedArg(options, types.OBJECT, {}); + options.texture = utils.ensureTypedArg(options.texture, types.OBJECT, {}); // Assign a UUID to this instance this.uuid = THREE.Math.generateUUID(); // If no `deltaTime` value is passed to the `SPE.Group.tick` function, // the value of this property will be used to advance the simulation. - this.fixedTimeStep = utils.ensureTypedArg( options.fixedTimeStep, types.NUMBER, 0.016 ); + this.fixedTimeStep = utils.ensureTypedArg(options.fixedTimeStep, types.NUMBER, 0.016); // Set properties used in the uniforms map, starting with the // texture stuff. - this.texture = utils.ensureInstanceOf( options.texture.value, THREE.Texture, null ); - this.textureFrames = utils.ensureInstanceOf( options.texture.frames, THREE.Vector2, new THREE.Vector2( 1, 1 ) ); - this.textureFrameCount = utils.ensureTypedArg( options.texture.frameCount, types.NUMBER, this.textureFrames.x * this.textureFrames.y ); - this.textureLoop = utils.ensureTypedArg( options.texture.loop, types.NUMBER, 1 ); - this.textureFrames.max( new THREE.Vector2( 1, 1 ) ); - - this.hasPerspective = utils.ensureTypedArg( options.hasPerspective, types.BOOLEAN, true ); - this.colorize = utils.ensureTypedArg( options.colorize, types.BOOLEAN, true ); + this.texture = utils.ensureInstanceOf(options.texture.value, THREE.Texture, null); + this.textureFrames = utils.ensureInstanceOf(options.texture.frames, THREE.Vector2, new THREE.Vector2(1, 1)); + this.textureFrameCount = utils.ensureTypedArg( + options.texture.frameCount, + types.NUMBER, + this.textureFrames.x * this.textureFrames.y + ); + this.textureLoop = utils.ensureTypedArg(options.texture.loop, types.NUMBER, 1); + this.textureFrames.max(new THREE.Vector2(1, 1)); - this.maxParticleCount = utils.ensureTypedArg( options.maxParticleCount, types.NUMBER, null ); + this.hasPerspective = utils.ensureTypedArg(options.hasPerspective, types.BOOLEAN, true); + this.colorize = utils.ensureTypedArg(options.colorize, types.BOOLEAN, true); + this.maxParticleCount = utils.ensureTypedArg(options.maxParticleCount, types.NUMBER, null); // Set properties used to define the ShaderMaterial's appearance. - this.blending = utils.ensureTypedArg( options.blending, types.NUMBER, THREE.AdditiveBlending ); - this.transparent = utils.ensureTypedArg( options.transparent, types.BOOLEAN, true ); - this.alphaTest = parseFloat( utils.ensureTypedArg( options.alphaTest, types.NUMBER, 0.0 ) ); - this.depthWrite = utils.ensureTypedArg( options.depthWrite, types.BOOLEAN, false ); - this.depthTest = utils.ensureTypedArg( options.depthTest, types.BOOLEAN, true ); - this.fog = utils.ensureTypedArg( options.fog, types.BOOLEAN, true ); - this.scale = utils.ensureTypedArg( options.scale, types.NUMBER, 300 ); + this.blending = utils.ensureTypedArg(options.blending, types.NUMBER, THREE.AdditiveBlending); + this.transparent = utils.ensureTypedArg(options.transparent, types.BOOLEAN, true); + this.alphaTest = parseFloat(utils.ensureTypedArg(options.alphaTest, types.NUMBER, 0.0)); + this.depthWrite = utils.ensureTypedArg(options.depthWrite, types.BOOLEAN, false); + this.depthTest = utils.ensureTypedArg(options.depthTest, types.BOOLEAN, true); + this.fog = utils.ensureTypedArg(options.fog, types.BOOLEAN, true); + this.scale = utils.ensureTypedArg(options.scale, types.NUMBER, 300); // Where emitter's go to curl up in a warm blanket and live // out their days. @@ -116,50 +118,49 @@ SPE.Group = function( options ) { this.particleCount = 0; - // Map of uniforms to be applied to the ShaderMaterial instance. this.uniforms = { tex: { - type: 't', - value: this.texture + type: "t", + value: this.texture, }, textureAnimation: { - type: 'v4', + type: "v4", value: new THREE.Vector4( this.textureFrames.x, this.textureFrames.y, this.textureFrameCount, - Math.max( Math.abs( this.textureLoop ), 1.0 ) - ) + Math.max(Math.abs(this.textureLoop), 1.0) + ), }, fogColor: { - type: 'c', - value: this.fog ? new THREE.Color() : null + type: "c", + value: this.fog ? new THREE.Color() : null, }, fogNear: { - type: 'f', - value: 10 + type: "f", + value: 10, }, fogFar: { - type: 'f', - value: 200 + type: "f", + value: 200, }, fogDensity: { - type: 'f', - value: 0.5 + type: "f", + value: 0.5, }, deltaTime: { - type: 'f', - value: 0 + type: "f", + value: 0, }, runTime: { - type: 'f', - value: 0 + type: "f", + value: 0, }, scale: { - type: 'f', - value: this.scale - } + type: "f", + value: this.scale, + }, }; // Add some defines into the mix... @@ -172,31 +173,31 @@ SPE.Group = function( options ) { SHOULD_ROTATE_PARTICLES: false, SHOULD_WIGGLE_PARTICLES: false, - SHOULD_CALCULATE_SPRITE: this.textureFrames.x > 1 || this.textureFrames.y > 1 + SHOULD_CALCULATE_SPRITE: this.textureFrames.x > 1 || this.textureFrames.y > 1, }; // Map of all attributes to be applied to the particles. // // See SPE.ShaderAttribute for a bit more info on this bit. this.attributes = { - position: new SPE.ShaderAttribute( 'v3', true ), - acceleration: new SPE.ShaderAttribute( 'v4', true ), // w component is drag - velocity: new SPE.ShaderAttribute( 'v3', true ), - rotation: new SPE.ShaderAttribute( 'v4', true ), - rotationCenter: new SPE.ShaderAttribute( 'v3', true ), - params: new SPE.ShaderAttribute( 'v4', true ), // Holds (alive, age, delay, wiggle) - size: new SPE.ShaderAttribute( 'v4', true ), - angle: new SPE.ShaderAttribute( 'v4', true ), - color: new SPE.ShaderAttribute( 'v4', true ), - opacity: new SPE.ShaderAttribute( 'v4', true ) + position: new SPE.ShaderAttribute("v3", true), + acceleration: new SPE.ShaderAttribute("v4", true), // w component is drag + velocity: new SPE.ShaderAttribute("v3", true), + rotation: new SPE.ShaderAttribute("v4", true), + rotationCenter: new SPE.ShaderAttribute("v3", true), + params: new SPE.ShaderAttribute("v4", true), // Holds (alive, age, delay, wiggle) + size: new SPE.ShaderAttribute("v4", true), + angle: new SPE.ShaderAttribute("v4", true), + color: new SPE.ShaderAttribute("v4", true), + opacity: new SPE.ShaderAttribute("v4", true), }; - this.attributeKeys = Object.keys( this.attributes ); + this.attributeKeys = Object.keys(this.attributes); this.attributeCount = this.attributeKeys.length; // Create the ShaderMaterial instance that'll help render the // particles. - this.material = new THREE.ShaderMaterial( { + this.material = new THREE.ShaderMaterial({ uniforms: this.uniforms, vertexShader: SPE.shaders.vertex, fragmentShader: SPE.shaders.fragment, @@ -206,85 +207,81 @@ SPE.Group = function( options ) { depthWrite: this.depthWrite, depthTest: this.depthTest, defines: this.defines, - fog: this.fog - } ); + fog: this.fog, + }); // Create the BufferGeometry and Points instances, ensuring // the geometry and material are given to the latter. this.geometry = new THREE.BufferGeometry(); - this.mesh = new THREE.Points( this.geometry, this.material ); + this.mesh = new THREE.Points(this.geometry, this.material); - if ( this.maxParticleCount === null ) { - console.warn( 'SPE.Group: No maxParticleCount specified. Adding emitters after rendering will probably cause errors.' ); + if (this.maxParticleCount === null) { + console.warn( + "SPE.Group: No maxParticleCount specified. Adding emitters after rendering will probably cause errors." + ); } }; SPE.Group.constructor = SPE.Group; +SPE.Group.prototype._updateDefines = function () { + "use strict"; -SPE.Group.prototype._updateDefines = function() { - 'use strict'; + let emitters = this.emitters; + let i = emitters.length - 1; + let emitter; + let defines = this.defines; - var emitters = this.emitters, - i = emitters.length - 1, - emitter, - defines = this.defines; - - for ( i; i >= 0; --i ) { - emitter = emitters[ i ]; + for (i; i >= 0; --i) { + emitter = emitters[i]; // Only do angle calculation if there's no spritesheet defined. // // Saves calculations being done and then overwritten in the shaders. - if ( !defines.SHOULD_CALCULATE_SPRITE ) { - defines.SHOULD_ROTATE_TEXTURE = defines.SHOULD_ROTATE_TEXTURE || !!Math.max( - Math.max.apply( null, emitter.angle.value ), - Math.max.apply( null, emitter.angle.spread ) - ); + if (!defines.SHOULD_CALCULATE_SPRITE) { + defines.SHOULD_ROTATE_TEXTURE = + defines.SHOULD_ROTATE_TEXTURE || + !!Math.max(Math.max.apply(null, emitter.angle.value), Math.max.apply(null, emitter.angle.spread)); } - defines.SHOULD_ROTATE_PARTICLES = defines.SHOULD_ROTATE_PARTICLES || !!Math.max( - emitter.rotation.angle, - emitter.rotation.angleSpread - ); + defines.SHOULD_ROTATE_PARTICLES = + defines.SHOULD_ROTATE_PARTICLES || !!Math.max(emitter.rotation.angle, emitter.rotation.angleSpread); - defines.SHOULD_WIGGLE_PARTICLES = defines.SHOULD_WIGGLE_PARTICLES || !!Math.max( - emitter.wiggle.value, - emitter.wiggle.spread - ); + defines.SHOULD_WIGGLE_PARTICLES = + defines.SHOULD_WIGGLE_PARTICLES || !!Math.max(emitter.wiggle.value, emitter.wiggle.spread); } this.material.needsUpdate = true; }; -SPE.Group.prototype._applyAttributesToGeometry = function() { - 'use strict'; +SPE.Group.prototype._applyAttributesToGeometry = function () { + "use strict"; - var attributes = this.attributes, - geometry = this.geometry, - geometryAttributes = geometry.attributes, - attribute, - geometryAttribute; + let attributes = this.attributes; + let geometry = this.geometry; + let geometryAttributes = geometry.attributes; + let attribute; + let geometryAttribute; // Loop through all the shader attributes and assign (or re-assign) // typed array buffers to each one. - for ( var attr in attributes ) { - if ( attributes.hasOwnProperty( attr ) ) { - attribute = attributes[ attr ]; - geometryAttribute = geometryAttributes[ attr ]; + for (let attr in attributes) { + if (attributes.hasOwnProperty(attr)) { + attribute = attributes[attr]; + geometryAttribute = geometryAttributes[attr]; // Update the array if this attribute exists on the geometry. // // This needs to be done because the attribute's typed array might have // been resized and reinstantiated, and might now be looking at a // different ArrayBuffer, so reference needs updating. - if ( geometryAttribute ) { + if (geometryAttribute) { geometryAttribute.array = attribute.typedArray.array; } // // Add the attribute to the geometry if it doesn't already exist. else { - geometry.setAttribute( attr, attribute.bufferAttribute ); + geometry.setAttribute(attr, attribute.bufferAttribute); } // Mark the attribute as needing an update the next time a frame is rendered. @@ -296,7 +293,7 @@ SPE.Group.prototype._applyAttributesToGeometry = function() { // only the values in the attribute buffers that are // associated with a particle will be used in THREE's // render cycle. - this.geometry.setDrawRange( 0, this.particleCount ); + this.geometry.setDrawRange(0, this.particleCount); }; /** @@ -305,54 +302,58 @@ SPE.Group.prototype._applyAttributesToGeometry = function() { * * @param {Emitter} emitter The emitter to add to this group. */ -SPE.Group.prototype.addEmitter = function( emitter ) { - 'use strict'; +SPE.Group.prototype.addEmitter = function (emitter) { + "use strict"; // Ensure an actual emitter instance is passed here. // // Decided not to throw here, just in case a scene's // rendering would be paused. Logging an error instead // of stopping execution if exceptions aren't caught. - if ( emitter instanceof SPE.Emitter === false ) { - console.error( '`emitter` argument must be instance of SPE.Emitter. Was provided with:', emitter ); + if (emitter instanceof SPE.Emitter === false) { + console.error("`emitter` argument must be instance of SPE.Emitter. Was provided with:", emitter); return; } // If the emitter already exists as a member of this group, then // stop here, we don't want to add it again. - else if ( this.emitterIDs.indexOf( emitter.uuid ) > -1 ) { - console.error( 'Emitter already exists in this group. Will not add again.' ); + else if (this.emitterIDs.indexOf(emitter.uuid) > -1) { + console.error("Emitter already exists in this group. Will not add again."); return; } // And finally, if the emitter is a member of another group, // don't add it to this group. - else if ( emitter.group !== null ) { - console.error( 'Emitter already belongs to another group. Will not add to requested group.' ); + else if (emitter.group !== null) { + console.error("Emitter already belongs to another group. Will not add to requested group."); return; } - var attributes = this.attributes, - start = this.particleCount, - end = start + emitter.particleCount; + let attributes = this.attributes; + let start = this.particleCount; + let end = start + emitter.particleCount; // Update this group's particle count. this.particleCount = end; // Emit a warning if the emitter being added will exceed the buffer sizes specified. - if ( this.maxParticleCount !== null && this.particleCount > this.maxParticleCount ) { - console.warn( 'SPE.Group: maxParticleCount exceeded. Requesting', this.particleCount, 'particles, can support only', this.maxParticleCount ); + if (this.maxParticleCount !== null && this.particleCount > this.maxParticleCount) { + console.warn( + "SPE.Group: maxParticleCount exceeded. Requesting", + this.particleCount, + "particles, can support only", + this.maxParticleCount + ); } - // Set the `particlesPerSecond` value (PPS) on the emitter. // It's used to determine how many particles to release // on a per-frame basis. - emitter._calculatePPSValue( emitter.maxAge._value + emitter.maxAge._spread ); - emitter._setBufferUpdateRanges( this.attributeKeys ); + emitter._calculatePPSValue(emitter.maxAge._value + emitter.maxAge._spread); + emitter._setBufferUpdateRanges(this.attributeKeys); // Store the offset value in the TypedArray attributes for this emitter. - emitter._setAttributeOffset( start ); + emitter._setAttributeOffset(start); // Save a reference to this group on the emitter so it knows // where it belongs. @@ -362,34 +363,30 @@ SPE.Group.prototype.addEmitter = function( emitter ) { // easier access during the emitter's tick function. emitter.attributes = this.attributes; - - // Ensure the attributes and their BufferAttributes exist, and their // TypedArrays are of the correct size. - for ( var attr in attributes ) { - if ( attributes.hasOwnProperty( attr ) ) { + for (let attr in attributes) { + if (attributes.hasOwnProperty(attr)) { // When creating a buffer, pass through the maxParticle count // if one is specified. - attributes[ attr ]._createBufferAttribute( - this.maxParticleCount !== null ? - this.maxParticleCount : - this.particleCount + attributes[attr]._createBufferAttribute( + this.maxParticleCount !== null ? this.maxParticleCount : this.particleCount ); } } // Loop through each particle this emitter wants to have, and create the attributes values, // storing them in the TypedArrays that each attribute holds. - for ( var i = start; i < end; ++i ) { - emitter._assignPositionValue( i ); - emitter._assignForceValue( i, 'velocity' ); - emitter._assignForceValue( i, 'acceleration' ); - emitter._assignAbsLifetimeValue( i, 'opacity' ); - emitter._assignAbsLifetimeValue( i, 'size' ); - emitter._assignAngleValue( i ); - emitter._assignRotationValue( i ); - emitter._assignParamsValue( i ); - emitter._assignColorValue( i ); + for (let i = start; i < end; ++i) { + emitter._assignPositionValue(i); + emitter._assignForceValue(i, "velocity"); + emitter._assignForceValue(i, "acceleration"); + emitter._assignAbsLifetimeValue(i, "opacity"); + emitter._assignAbsLifetimeValue(i, "size"); + emitter._assignAngleValue(i); + emitter._assignRotationValue(i); + emitter._assignParamsValue(i); + emitter._assignColorValue(i); } // Update the geometry and make sure the attributes are referencing @@ -397,11 +394,11 @@ SPE.Group.prototype.addEmitter = function( emitter ) { this._applyAttributesToGeometry(); // Store this emitter in this group's emitter's store. - this.emitters.push( emitter ); - this.emitterIDs.push( emitter.uuid ); + this.emitters.push(emitter); + this.emitterIDs.push(emitter.uuid); // Update certain flags to enable shader calculations only if they're necessary. - this._updateDefines( emitter ); + this._updateDefines(emitter); // Update the material since defines might have changed this.material.needsUpdate = true; @@ -419,49 +416,49 @@ SPE.Group.prototype.addEmitter = function( emitter ) { * * @param {Emitter} emitter The emitter to add to this group. */ -SPE.Group.prototype.removeEmitter = function( emitter ) { - 'use strict'; +SPE.Group.prototype.removeEmitter = function (emitter) { + "use strict"; - var emitterIndex = this.emitterIDs.indexOf( emitter.uuid ); + let emitterIndex = this.emitterIDs.indexOf(emitter.uuid); // Ensure an actual emitter instance is passed here. // // Decided not to throw here, just in case a scene's // rendering would be paused. Logging an error instead // of stopping execution if exceptions aren't caught. - if ( emitter instanceof SPE.Emitter === false ) { - console.error( '`emitter` argument must be instance of SPE.Emitter. Was provided with:', emitter ); + if (emitter instanceof SPE.Emitter === false) { + console.error("`emitter` argument must be instance of SPE.Emitter. Was provided with:", emitter); return; } // Issue an error if the emitter isn't a member of this group. - else if ( emitterIndex === -1 ) { - console.error( 'Emitter does not exist in this group. Will not remove.' ); + else if (emitterIndex === -1) { + console.error("Emitter does not exist in this group. Will not remove."); return; } // Kill all particles by marking them as dead // and their age as 0. - var start = emitter.attributeOffset, - end = start + emitter.particleCount, - params = this.attributes.params.typedArray; + let start = emitter.attributeOffset; + let end = start + emitter.particleCount; + let params = this.attributes.params.typedArray; // Set alive and age to zero. - for ( var i = start; i < end; ++i ) { - params.array[ i * 4 ] = 0.0; - params.array[ i * 4 + 1 ] = 0.0; + for (let i = start; i < end; ++i) { + params.array[i * 4] = 0.0; + params.array[i * 4 + 1] = 0.0; } // Remove the emitter from this group's "store". - this.emitters.splice( emitterIndex, 1 ); - this.emitterIDs.splice( emitterIndex, 1 ); + this.emitters.splice(emitterIndex, 1); + this.emitterIDs.splice(emitterIndex, 1); // Remove this emitter's attribute values from all shader attributes. // The `.splice()` call here also marks each attribute's buffer // as needing to update it's entire contents. - for ( var attr in this.attributes ) { - if ( this.attributes.hasOwnProperty( attr ) ) { - this.attributes[ attr ].splice( start, end ); + for (let attr in this.attributes) { + if (this.attributes.hasOwnProperty(attr)) { + this.attributes[attr].splice(start, end); } } @@ -476,7 +473,6 @@ SPE.Group.prototype.removeEmitter = function( emitter ) { this._attributesNeedRefresh = true; }; - /** * Fetch a single emitter instance from the pool. * If there are no objects in the pool, a new emitter will be @@ -484,19 +480,18 @@ SPE.Group.prototype.removeEmitter = function( emitter ) { * * @return {Emitter|null} */ -SPE.Group.prototype.getFromPool = function() { - 'use strict'; +SPE.Group.prototype.getFromPool = function () { + "use strict"; - var pool = this._pool, - createNew = this._createNewWhenPoolEmpty; + let pool = this._pool; + let createNew = this._createNewWhenPoolEmpty; - if ( pool.length ) { + if (pool.length) { return pool.pop(); - } - else if ( createNew ) { - var emitter = new SPE.Emitter( this._poolCreationSettings ); + } else if (createNew) { + let emitter = new SPE.Emitter(this._poolCreationSettings); - this.addEmitter( emitter ); + this.addEmitter(emitter); return emitter; } @@ -504,39 +499,36 @@ SPE.Group.prototype.getFromPool = function() { return null; }; - /** * Release an emitter into the pool. * * @param {ShaderParticleEmitter} emitter * @return {Group} This group instance. */ -SPE.Group.prototype.releaseIntoPool = function( emitter ) { - 'use strict'; +SPE.Group.prototype.releaseIntoPool = function (emitter) { + "use strict"; - if ( emitter instanceof SPE.Emitter === false ) { - console.error( 'Argument is not instanceof SPE.Emitter:', emitter ); + if (emitter instanceof SPE.Emitter === false) { + console.error("Argument is not instanceof SPE.Emitter:", emitter); return; } emitter.reset(); - this._pool.unshift( emitter ); + this._pool.unshift(emitter); return this; }; - /** * Get the pool array * * @return {Array} */ -SPE.Group.prototype.getPool = function() { - 'use strict'; +SPE.Group.prototype.getPool = function () { + "use strict"; return this._pool; }; - /** * Add a pool of emitters to this particle group * @@ -545,47 +537,44 @@ SPE.Group.prototype.getPool = function() { * @param {Boolean} createNew Should a new emitter be created if the pool runs out? * @return {Group} This group instance. */ -SPE.Group.prototype.addPool = function( numEmitters, emitterOptions, createNew ) { - 'use strict'; +SPE.Group.prototype.addPool = function (numEmitters, emitterOptions, createNew) { + "use strict"; - var emitter; + let emitter; // Save relevant settings and flags. this._poolCreationSettings = emitterOptions; this._createNewWhenPoolEmpty = !!createNew; // Create the emitters, add them to this group and the pool. - for ( var i = 0; i < numEmitters; ++i ) { - if ( Array.isArray( emitterOptions ) ) { - emitter = new SPE.Emitter( emitterOptions[ i ] ); - } - else { - emitter = new SPE.Emitter( emitterOptions ); + for (let i = 0; i < numEmitters; ++i) { + if (Array.isArray(emitterOptions)) { + emitter = new SPE.Emitter(emitterOptions[i]); + } else { + emitter = new SPE.Emitter(emitterOptions); } - this.addEmitter( emitter ); - this.releaseIntoPool( emitter ); + this.addEmitter(emitter); + this.releaseIntoPool(emitter); } return this; }; +SPE.Group.prototype._triggerSingleEmitter = function (pos) { + "use strict"; - -SPE.Group.prototype._triggerSingleEmitter = function( pos ) { - 'use strict'; - - var emitter = this.getFromPool(), + let emitter = this.getFromPool(), self = this; - if ( emitter === null ) { - console.log( 'SPE.Group pool ran out.' ); + if (emitter === null) { + console.log("SPE.Group pool ran out."); return; } // TODO: // - Make sure buffers are update with thus new position. - if ( pos instanceof THREE.Vector3 ) { - emitter.position.value.copy( pos ); + if (pos instanceof THREE.Vector3) { + emitter.position.value.copy(pos); // Trigger the setter for this property to force an // update to the emitter's position attribute. @@ -594,15 +583,14 @@ SPE.Group.prototype._triggerSingleEmitter = function( pos ) { emitter.enable(); - setTimeout( function() { + setTimeout(function () { emitter.disable(); - self.releaseIntoPool( emitter ); - }, ( Math.max( emitter.duration, ( emitter.maxAge.value + emitter.maxAge.spread ) ) ) * 1000 ); + self.releaseIntoPool(emitter); + }, Math.max(emitter.duration, emitter.maxAge.value + emitter.maxAge.spread) * 1000); return this; }; - /** * Set a given number of emitters as alive, with an optional position * vector3 to move them to. @@ -611,113 +599,101 @@ SPE.Group.prototype._triggerSingleEmitter = function( pos ) { * @param {Object} [position=undefined] A THREE.Vector3 instance describing the position to activate the emitter(s) at. * @return {Group} This group instance. */ -SPE.Group.prototype.triggerPoolEmitter = function( numEmitters, position ) { - 'use strict'; +SPE.Group.prototype.triggerPoolEmitter = function (numEmitters, position) { + "use strict"; - if ( typeof numEmitters === 'number' && numEmitters > 1 ) { - for ( var i = 0; i < numEmitters; ++i ) { - this._triggerSingleEmitter( position ); + if (typeof numEmitters === "number" && numEmitters > 1) { + for (let i = 0; i < numEmitters; ++i) { + this._triggerSingleEmitter(position); } - } - else { - this._triggerSingleEmitter( position ); + } else { + this._triggerSingleEmitter(position); } return this; }; - - -SPE.Group.prototype._updateUniforms = function( dt ) { - 'use strict'; +SPE.Group.prototype._updateUniforms = function (dt) { + "use strict"; this.uniforms.runTime.value += dt; this.uniforms.deltaTime.value = dt; }; -SPE.Group.prototype._resetBufferRanges = function() { - 'use strict'; +SPE.Group.prototype._resetBufferRanges = function () { + "use strict"; - var keys = this.attributeKeys, - i = this.attributeCount - 1, - attrs = this.attributes; + let keys = this.attributeKeys; + let i = this.attributeCount - 1; + let attrs = this.attributes; - for ( i; i >= 0; --i ) { - attrs[ keys[ i ] ].resetUpdateRange(); + for (i; i >= 0; --i) { + attrs[keys[i]].resetUpdateRange(); } }; - -SPE.Group.prototype._updateBuffers = function( emitter ) { - 'use strict'; - - var keys = this.attributeKeys, - i = this.attributeCount - 1, - attrs = this.attributes, - emitterRanges = emitter.bufferUpdateRanges, - key, - emitterAttr, - attr; - - for ( i; i >= 0; --i ) { - key = keys[ i ]; - emitterAttr = emitterRanges[ key ]; - attr = attrs[ key ]; - attr.setUpdateRange( emitterAttr.min, emitterAttr.max ); +SPE.Group.prototype._updateBuffers = function (emitter) { + "use strict"; + + let keys = this.attributeKeys; + let attrs = this.attributes; + let emitterRanges = emitter.bufferUpdateRanges; + let key; + let emitterAttr; + let attr; + + for (let i = this.attributeCount - 1; i >= 0; --i) { + key = keys[i]; + emitterAttr = emitterRanges[key]; + attr = attrs[key]; + attr.setUpdateRange(emitterAttr.min, emitterAttr.max); attr.flagUpdate(); } }; - /** * Simulate all the emitter's belonging to this group, updating * attribute values along the way. * @param {Number} [dt=Group's `fixedTimeStep` value] The number of seconds to simulate the group's emitters for (deltaTime) */ -SPE.Group.prototype.tick = function( dt ) { - 'use strict'; +SPE.Group.prototype.tick = function (dt) { + "use strict"; - var emitters = this.emitters, - numEmitters = emitters.length, - deltaTime = dt || this.fixedTimeStep, - keys = this.attributeKeys, - i, - attrs = this.attributes; + let emitters = this.emitters; + let numEmitters = emitters.length; + let deltaTime = dt || this.fixedTimeStep; + let keys = this.attributeKeys; + let i; + let attrs = this.attributes; // Update uniform values. - this._updateUniforms( deltaTime ); + this._updateUniforms(deltaTime); // Reset buffer update ranges on the shader attributes. this._resetBufferRanges(); - // If nothing needs updating, then stop here. - if ( - numEmitters === 0 && - this._attributesNeedRefresh === false && - this._attributesNeedDynamicReset === false - ) { + if (numEmitters === 0 && this._attributesNeedRefresh === false && this._attributesNeedDynamicReset === false) { return; } // Loop through each emitter in this group and // simulate it, then update the shader attribute // buffers. - for ( var i = 0, emitter; i < numEmitters; ++i ) { - emitter = emitters[ i ]; - emitter.tick( deltaTime ); - this._updateBuffers( emitter ); + for (let i = 0, emitter; i < numEmitters; ++i) { + emitter = emitters[i]; + emitter.tick(deltaTime); + this._updateBuffers(emitter); } // If the shader attributes have been refreshed, // then the dynamic properties of each buffer // attribute will need to be reset back to // what they should be. - if ( this._attributesNeedDynamicReset === true ) { - i = this.attributeCount - 1; + if (this._attributesNeedDynamicReset === true) { - for ( i; i >= 0; --i ) { - attrs[ keys[ i ] ].resetDynamic(); + for (let i = this.attributeCount - 1; i >= 0; --i) { + attrs[keys[i]].resetDynamic(); } this._attributesNeedDynamicReset = false; @@ -726,11 +702,10 @@ SPE.Group.prototype.tick = function( dt ) { // If this group's shader attributes need a full refresh // then mark each attribute's buffer attribute as // needing so. - if ( this._attributesNeedRefresh === true ) { - i = this.attributeCount - 1; + if (this._attributesNeedRefresh === true) { - for ( i; i >= 0; --i ) { - attrs[ keys[ i ] ].forceUpdateAll(); + for (let i = this.attributeCount - 1; i >= 0; --i) { + attrs[keys[i]].forceUpdateAll(); } this._attributesNeedRefresh = false; @@ -738,14 +713,13 @@ SPE.Group.prototype.tick = function( dt ) { } }; - /** * Dipose the geometry and material for the group. * * @return {Group} Group instance. */ -SPE.Group.prototype.dispose = function() { - 'use strict'; +SPE.Group.prototype.dispose = function () { + "use strict"; this.geometry.dispose(); this.material.dispose(); return this; diff --git a/src/core/SPE.utils.js b/src/core/SPE.utils.js index fff01ea..f30eedd 100644 --- a/src/core/SPE.utils.js +++ b/src/core/SPE.utils.js @@ -15,25 +15,25 @@ SPE.utils = { * Boolean type. * @type {String} */ - BOOLEAN: 'boolean', + BOOLEAN: "boolean", /** * String type. * @type {String} */ - STRING: 'string', + STRING: "string", /** * Number type. * @type {String} */ - NUMBER: 'number', + NUMBER: "number", /** * Object type. * @type {String} */ - OBJECT: 'object' + OBJECT: "object", }, /** @@ -46,13 +46,12 @@ SPE.utils = { * @param {(boolean|string|number|object)} defaultValue A default value to fallback on if the type check fails. * @return {(boolean|string|number|object)} The given value if type check passes, or the default value if it fails. */ - ensureTypedArg: function( arg, type, defaultValue ) { - 'use strict'; + ensureTypedArg: function (arg, type, defaultValue) { + "use strict"; - if ( typeof arg === type ) { + if (typeof arg === type) { return arg; - } - else { + } else { return defaultValue; } }, @@ -69,15 +68,15 @@ SPE.utils = { * @param {(boolean|string|number|object)} defaultValue A default fallback value. * @return {(boolean|string|number|object)} The given value if type check passes, or the default value if it fails. */ - ensureArrayTypedArg: function( arg, type, defaultValue ) { - 'use strict'; + ensureArrayTypedArg: function (arg, type, defaultValue) { + "use strict"; // If the argument being checked is an array, loop through // it and ensure all the values are of the correct type, // falling back to the defaultValue if any aren't. - if ( Array.isArray( arg ) ) { - for ( var i = arg.length - 1; i >= 0; --i ) { - if ( typeof arg[ i ] !== type ) { + if (Array.isArray(arg)) { + for (let i = arg.length - 1; i >= 0; --i) { + if (typeof arg[i] !== type) { return defaultValue; } } @@ -87,7 +86,7 @@ SPE.utils = { // If the arg isn't an array then just fallback to // checking the type. - return this.ensureTypedArg( arg, type, defaultValue ); + return this.ensureTypedArg(arg, type, defaultValue); }, /** @@ -98,13 +97,12 @@ SPE.utils = { * @param {Object} defaultValue A default fallback value if instance check fails * @return {Object} The given value if type check passes, or the default value if it fails. */ - ensureInstanceOf: function( arg, instance, defaultValue ) { - 'use strict'; + ensureInstanceOf: function (arg, instance, defaultValue) { + "use strict"; - if ( instance !== undefined && arg instanceof instance ) { + if (instance !== undefined && arg instanceof instance) { return arg; - } - else { + } else { return defaultValue; } }, @@ -121,15 +119,15 @@ SPE.utils = { * @param {Object} defaultValue A default fallback value if instance check fails * @return {Object} The given value if type check passes, or the default value if it fails. */ - ensureArrayInstanceOf: function( arg, instance, defaultValue ) { - 'use strict'; + ensureArrayInstanceOf: function (arg, instance, defaultValue) { + "use strict"; // If the argument being checked is an array, loop through // it and ensure all the values are of the correct type, // falling back to the defaultValue if any aren't. - if ( Array.isArray( arg ) ) { - for ( var i = arg.length - 1; i >= 0; --i ) { - if ( instance !== undefined && arg[ i ] instanceof instance === false ) { + if (Array.isArray(arg)) { + for (let i = arg.length - 1; i >= 0; --i) { + if (instance !== undefined && arg[i] instanceof instance === false) { return defaultValue; } } @@ -139,7 +137,7 @@ SPE.utils = { // If the arg isn't an array then just fallback to // checking the type. - return this.ensureInstanceOf( arg, instance, defaultValue ); + return this.ensureInstanceOf(arg, instance, defaultValue); }, /** @@ -154,31 +152,31 @@ SPE.utils = { * @param {Number} minLength The minimum length of the array to create. * @param {Number} maxLength The maximum length of the array to create. */ - ensureValueOverLifetimeCompliance: function( property, minLength, maxLength ) { - 'use strict'; + ensureValueOverLifetimeCompliance: function (property, minLength, maxLength) { + "use strict"; minLength = minLength || 3; maxLength = maxLength || 3; // First, ensure both properties are arrays. - if ( Array.isArray( property._value ) === false ) { - property._value = [ property._value ]; + if (Array.isArray(property._value) === false) { + property._value = [property._value]; } - if ( Array.isArray( property._spread ) === false ) { - property._spread = [ property._spread ]; + if (Array.isArray(property._spread) === false) { + property._spread = [property._spread]; } - var valueLength = this.clamp( property._value.length, minLength, maxLength ), - spreadLength = this.clamp( property._spread.length, minLength, maxLength ), - desiredLength = Math.max( valueLength, spreadLength ); + let valueLength = this.clamp(property._value.length, minLength, maxLength); + let spreadLength = this.clamp(property._spread.length, minLength, maxLength); + let desiredLength = Math.max(valueLength, spreadLength); - if ( property._value.length !== desiredLength ) { - property._value = this.interpolateArray( property._value, desiredLength ); + if (property._value.length !== desiredLength) { + property._value = this.interpolateArray(property._value, desiredLength); } - if ( property._spread.length !== desiredLength ) { - property._spread = this.interpolateArray( property._spread, desiredLength ); + if (property._spread.length !== desiredLength) { + property._spread = this.interpolateArray(property._spread, desiredLength); } }, @@ -194,27 +192,26 @@ SPE.utils = { * @param {Number} newLength The length the array should be interpolated to. * @return {Array} The interpolated array. */ - interpolateArray: function( srcArray, newLength ) { - 'use strict'; - - var sourceLength = srcArray.length, - newArray = [ typeof srcArray[ 0 ].clone === 'function' ? srcArray[ 0 ].clone() : srcArray[ 0 ] ], - factor = ( sourceLength - 1 ) / ( newLength - 1 ); + interpolateArray: function (srcArray, newLength) { + "use strict"; + let sourceLength = srcArray.length; + let newArray = [typeof srcArray[0].clone === "function" ? srcArray[0].clone() : srcArray[0]]; + let factor = (sourceLength - 1) / (newLength - 1); - for ( var i = 1; i < newLength - 1; ++i ) { - var f = i * factor, - before = Math.floor( f ), - after = Math.ceil( f ), - delta = f - before; + for (let i = 1; i < newLength - 1; ++i) { + let f = i * factor; + let before = Math.floor(f); + let after = Math.ceil(f); + let delta = f - before; - newArray[ i ] = this.lerpTypeAgnostic( srcArray[ before ], srcArray[ after ], delta ); + newArray[i] = this.lerpTypeAgnostic(srcArray[before], srcArray[after], delta); } newArray.push( - typeof srcArray[ sourceLength - 1 ].clone === 'function' ? - srcArray[ sourceLength - 1 ].clone() : - srcArray[ sourceLength - 1 ] + typeof srcArray[sourceLength - 1].clone === "function" + ? srcArray[sourceLength - 1].clone() + : srcArray[sourceLength - 1] ); return newArray; @@ -227,10 +224,10 @@ SPE.utils = { * @param {Number} max The maximum value. * @return {Number} The clamped number. */ - clamp: function( value, min, max ) { - 'use strict'; + clamp: function (value, min, max) { + "use strict"; - return Math.max( min, Math.min( value, max ) ); + return Math.max(min, Math.min(value, max)); }, /** @@ -242,15 +239,15 @@ SPE.utils = { * @param {Boolean} randomise Whether the value should be randomised. * @return {Number} The result of the operation. */ - zeroToEpsilon: function( value, randomise ) { - 'use strict'; + zeroToEpsilon: function (value, randomise) { + "use strict"; - var epsilon = 0.00001, - result = value; + let epsilon = 0.00001; + let result = value; result = randomise ? Math.random() * epsilon * 10 : epsilon; - if ( value < 0 && value > -epsilon ) { + if (value < 0 && value > -epsilon) { result = -result; } @@ -277,45 +274,40 @@ SPE.utils = { * the start and end arguments aren't a supported type, or * if their types do not match. */ - lerpTypeAgnostic: function( start, end, delta ) { - 'use strict'; + lerpTypeAgnostic: function (start, end, delta) { + "use strict"; - var types = this.types, - out; + let types = this.types; + let out; - if ( typeof start === types.NUMBER && typeof end === types.NUMBER ) { - return start + ( ( end - start ) * delta ); - } - else if ( start instanceof THREE.Vector2 && end instanceof THREE.Vector2 ) { + if (typeof start === types.NUMBER && typeof end === types.NUMBER) { + return start + (end - start) * delta; + } else if (start instanceof THREE.Vector2 && end instanceof THREE.Vector2) { out = start.clone(); - out.x = this.lerp( start.x, end.x, delta ); - out.y = this.lerp( start.y, end.y, delta ); + out.x = this.lerp(start.x, end.x, delta); + out.y = this.lerp(start.y, end.y, delta); return out; - } - else if ( start instanceof THREE.Vector3 && end instanceof THREE.Vector3 ) { + } else if (start instanceof THREE.Vector3 && end instanceof THREE.Vector3) { out = start.clone(); - out.x = this.lerp( start.x, end.x, delta ); - out.y = this.lerp( start.y, end.y, delta ); - out.z = this.lerp( start.z, end.z, delta ); + out.x = this.lerp(start.x, end.x, delta); + out.y = this.lerp(start.y, end.y, delta); + out.z = this.lerp(start.z, end.z, delta); return out; - } - else if ( start instanceof THREE.Vector4 && end instanceof THREE.Vector4 ) { + } else if (start instanceof THREE.Vector4 && end instanceof THREE.Vector4) { out = start.clone(); - out.x = this.lerp( start.x, end.x, delta ); - out.y = this.lerp( start.y, end.y, delta ); - out.z = this.lerp( start.z, end.z, delta ); - out.w = this.lerp( start.w, end.w, delta ); + out.x = this.lerp(start.x, end.x, delta); + out.y = this.lerp(start.y, end.y, delta); + out.z = this.lerp(start.z, end.z, delta); + out.w = this.lerp(start.w, end.w, delta); return out; - } - else if ( start instanceof THREE.Color && end instanceof THREE.Color ) { + } else if (start instanceof THREE.Color && end instanceof THREE.Color) { out = start.clone(); - out.r = this.lerp( start.r, end.r, delta ); - out.g = this.lerp( start.g, end.g, delta ); - out.b = this.lerp( start.b, end.b, delta ); + out.r = this.lerp(start.r, end.r, delta); + out.g = this.lerp(start.g, end.g, delta); + out.b = this.lerp(start.b, end.b, delta); return out; - } - else { - console.warn( 'Invalid argument types, or argument types do not match:', start, end ); + } else { + console.warn("Invalid argument types, or argument types do not match:", start, end); } }, @@ -326,9 +318,9 @@ SPE.utils = { * @param {Number} delta The position to interpolate to. * @return {Number} The result of the lerp operation. */ - lerp: function( start, end, delta ) { - 'use strict'; - return start + ( ( end - start ) * delta ); + lerp: function (start, end, delta) { + "use strict"; + return start + (end - start) * delta; }, /** @@ -338,23 +330,23 @@ SPE.utils = { * @param {Number} multiple The multiple to round to. * @return {Number} The result of the round operation. */ - roundToNearestMultiple: function( n, multiple ) { - 'use strict'; + roundToNearestMultiple: function (n, multiple) { + "use strict"; - var remainder = 0; + let remainder = 0; - if ( multiple === 0 ) { + if (multiple === 0) { return n; } - remainder = Math.abs( n ) % multiple; + remainder = Math.abs(n) % multiple; - if ( remainder === 0 ) { + if (remainder === 0) { return n; } - if ( n < 0 ) { - return -( Math.abs( n ) - remainder ); + if (n < 0) { + return -(Math.abs(n) - remainder); } return n + multiple - remainder; @@ -366,11 +358,11 @@ SPE.utils = { * @param {Array} array The array of values to check equality of. * @return {Boolean} Whether the array's values are all equal or not. */ - arrayValuesAreEqual: function( array ) { - 'use strict'; + arrayValuesAreEqual: function (array) { + "use strict"; - for ( var i = 0; i < array.length - 1; ++i ) { - if ( array[ i ] !== array[ i + 1 ] ) { + for (let i = 0; i < array.length - 1; ++i) { + if (array[i] !== array[i + 1]) { return false; } } @@ -379,10 +371,10 @@ SPE.utils = { }, // colorsAreEqual: function() { - // var colors = Array.prototype.slice.call( arguments ), + // let colors = Array.prototype.slice.call( arguments ), // numColors = colors.length; - // for ( var i = 0, color1, color2; i < numColors - 1; ++i ) { + // for ( let i = 0, color1, color2; i < numColors - 1; ++i ) { // color1 = colors[ i ]; // color2 = colors[ i + 1 ]; @@ -398,7 +390,6 @@ SPE.utils = { // return true; // }, - /** * Given a start value and a spread value, create and return a random * number. @@ -406,13 +397,11 @@ SPE.utils = { * @param {Number} spread The size of the random variance to apply. * @return {Number} A randomised number. */ - randomFloat: function( base, spread ) { - 'use strict'; - return base + spread * ( Math.random() - 0.5 ); + randomFloat: function (base, spread) { + "use strict"; + return base + spread * (Math.random() - 0.5); }, - - /** * Given an SPE.ShaderAttribute instance, and various other settings, * assign values to the attribute's array in a `vec3` format. @@ -423,24 +412,24 @@ SPE.utils = { * @param {Object} spread THREE.Vector3 instance describing the random variance to apply to the start value. * @param {Object} spreadClamp THREE.Vector3 instance describing the multiples to clamp the randomness to. */ - randomVector3: function( attribute, index, base, spread, spreadClamp ) { - 'use strict'; + randomVector3: function (attribute, index, base, spread, spreadClamp) { + "use strict"; - var x = base.x + ( Math.random() * spread.x - ( spread.x * 0.5 ) ), - y = base.y + ( Math.random() * spread.y - ( spread.y * 0.5 ) ), - z = base.z + ( Math.random() * spread.z - ( spread.z * 0.5 ) ); + let x = base.x + (Math.random() * spread.x - spread.x * 0.5); + let y = base.y + (Math.random() * spread.y - spread.y * 0.5); + let z = base.z + (Math.random() * spread.z - spread.z * 0.5); - // var x = this.randomFloat( base.x, spread.x ), + // let x = this.randomFloat( base.x, spread.x ), // y = this.randomFloat( base.y, spread.y ), // z = this.randomFloat( base.z, spread.z ); - if ( spreadClamp ) { - x = -spreadClamp.x * 0.5 + this.roundToNearestMultiple( x, spreadClamp.x ); - y = -spreadClamp.y * 0.5 + this.roundToNearestMultiple( y, spreadClamp.y ); - z = -spreadClamp.z * 0.5 + this.roundToNearestMultiple( z, spreadClamp.z ); + if (spreadClamp) { + x = -spreadClamp.x * 0.5 + this.roundToNearestMultiple(x, spreadClamp.x); + y = -spreadClamp.y * 0.5 + this.roundToNearestMultiple(y, spreadClamp.y); + z = -spreadClamp.z * 0.5 + this.roundToNearestMultiple(z, spreadClamp.z); } - attribute.typedArray.setVec3Components( index, x, y, z ); + attribute.typedArray.setVec3Components(index, x, y, z); }, /** @@ -451,26 +440,24 @@ SPE.utils = { * @param {Object} base THREE.Color instance describing the start color. * @param {Object} spread THREE.Vector3 instance describing the random variance to apply to the start color. */ - randomColor: function( attribute, index, base, spread ) { - 'use strict'; + randomColor: function (attribute, index, base, spread) { + "use strict"; - var r = base.r + ( Math.random() * spread.x ), - g = base.g + ( Math.random() * spread.y ), - b = base.b + ( Math.random() * spread.z ); + let r = base.r + Math.random() * spread.x; + let g = base.g + Math.random() * spread.y; + let b = base.b + Math.random() * spread.z; - r = this.clamp( r, 0, 1 ); - g = this.clamp( g, 0, 1 ); - b = this.clamp( b, 0, 1 ); + r = this.clamp(r, 0, 1); + g = this.clamp(g, 0, 1); + b = this.clamp(b, 0, 1); - - attribute.typedArray.setVec3Components( index, r, g, b ); + attribute.typedArray.setVec3Components(index, r, g, b); }, + randomColorAsHex: (function () { + "use strict"; - randomColorAsHex: ( function() { - 'use strict'; - - var workingColor = new THREE.Color(); + let workingColor = new THREE.Color(); /** * Assigns a random color value, encoded as a hex value in decimal @@ -480,29 +467,29 @@ SPE.utils = { * @param {Object} base THREE.Color instance describing the start color. * @param {Object} spread THREE.Vector3 instance describing the random variance to apply to the start color. */ - return function( attribute, index, base, spread ) { - var numItems = base.length, - colors = []; + return function (attribute, index, base, spread) { + let numItems = base.length; + let colors = []; - for ( var i = 0; i < numItems; ++i ) { - var spreadVector = spread[ i ]; + for (let i = 0; i < numItems; ++i) { + let spreadVector = spread[i]; - workingColor.copy( base[ i ] ); + workingColor.copy(base[i]); - workingColor.r += ( Math.random() * spreadVector.x ) - ( spreadVector.x * 0.5 ); - workingColor.g += ( Math.random() * spreadVector.y ) - ( spreadVector.y * 0.5 ); - workingColor.b += ( Math.random() * spreadVector.z ) - ( spreadVector.z * 0.5 ); + workingColor.r += Math.random() * spreadVector.x - spreadVector.x * 0.5; + workingColor.g += Math.random() * spreadVector.y - spreadVector.y * 0.5; + workingColor.b += Math.random() * spreadVector.z - spreadVector.z * 0.5; - workingColor.r = this.clamp( workingColor.r, 0, 1 ); - workingColor.g = this.clamp( workingColor.g, 0, 1 ); - workingColor.b = this.clamp( workingColor.b, 0, 1 ); + workingColor.r = this.clamp(workingColor.r, 0, 1); + workingColor.g = this.clamp(workingColor.g, 0, 1); + workingColor.b = this.clamp(workingColor.b, 0, 1); - colors.push( workingColor.getHex() ); + colors.push(workingColor.getHex()); } - attribute.typedArray.setVec4Components( index, colors[ 0 ], colors[ 1 ], colors[ 2 ], colors[ 3 ] ); + attribute.typedArray.setVec4Components(index, colors[0], colors[1], colors[2], colors[3]); }; - }() ), + })(), /** * Given an SPE.ShaderAttribute instance, and various other settings, @@ -513,13 +500,13 @@ SPE.utils = { * @param {Object} start THREE.Vector3 instance describing the start line position. * @param {Object} end THREE.Vector3 instance describing the end line position. */ - randomVector3OnLine: function( attribute, index, start, end ) { - 'use strict'; - var pos = start.clone(); + randomVector3OnLine: function (attribute, index, start, end) { + "use strict"; + let pos = start.clone(); - pos.lerp( end, Math.random() ); + pos.lerp(end, Math.random()); - attribute.typedArray.setVec3Components( index, pos.x, pos.y, pos.z ); + attribute.typedArray.setVec3Components(index, pos.x, pos.y, pos.z); }, /** @@ -543,29 +530,33 @@ SPE.utils = { * @param {Object} radiusScale THREE.Vector3 instance describing the scale of each axis of the sphere. * @param {Number} radiusSpreadClamp What numeric multiple the projected value should be clamped to. */ - randomVector3OnSphere: function( - attribute, index, base, radius, radiusSpread, radiusScale, radiusSpreadClamp, distributionClamp + randomVector3OnSphere: function ( + attribute, + index, + base, + radius, + radiusSpread, + radiusScale, + radiusSpreadClamp, + distributionClamp ) { - 'use strict'; - - var depth = 2 * Math.random() - 1, - t = 6.2832 * Math.random(), - r = Math.sqrt( 1 - depth * depth ), - rand = this.randomFloat( radius, radiusSpread ), - x = 0, - y = 0, - z = 0; - - - if ( radiusSpreadClamp ) { - rand = Math.round( rand / radiusSpreadClamp ) * radiusSpreadClamp; + "use strict"; + + let depth = 2 * Math.random() - 1; + let t = 6.2832 * Math.random(); + let r = Math.sqrt(1 - depth * depth); + let rand = this.randomFloat(radius, radiusSpread); + let x = 0; + let y = 0; + let z = 0; + + if (radiusSpreadClamp) { + rand = Math.round(rand / radiusSpreadClamp) * radiusSpreadClamp; } - - // Set position on sphere - x = r * Math.cos( t ) * rand; - y = r * Math.sin( t ) * rand; + x = r * Math.cos(t) * rand; + y = r * Math.sin(t) * rand; z = depth * rand; // Apply radius scale to this position @@ -579,16 +570,14 @@ SPE.utils = { z += base.z; // Set the values in the typed array. - attribute.typedArray.setVec3Components( index, x, y, z ); + attribute.typedArray.setVec3Components(index, x, y, z); }, - seededRandom: function( seed ) { - var x = Math.sin( seed ) * 10000; - return x - ( x | 0 ); + seededRandom: function (seed) { + let x = Math.sin(seed) * 10000; + return x - (x | 0); }, - - /** * Assigns a random vector 3 value to an SPE.ShaderAttribute instance, projecting the * given values onto a 2d-disc. @@ -601,22 +590,22 @@ SPE.utils = { * @param {Object} radiusScale THREE.Vector3 instance describing the scale of each axis of the disc. The z-component is ignored. * @param {Number} radiusSpreadClamp What numeric multiple the projected value should be clamped to. */ - randomVector3OnDisc: function( attribute, index, base, radius, radiusSpread, radiusScale, radiusSpreadClamp ) { - 'use strict'; + randomVector3OnDisc: function (attribute, index, base, radius, radiusSpread, radiusScale, radiusSpreadClamp) { + "use strict"; - var t = 6.2832 * Math.random(), - rand = Math.abs( this.randomFloat( radius, radiusSpread ) ), - x = 0, - y = 0, - z = 0; + let t = 6.2832 * Math.random(); + let rand = Math.abs(this.randomFloat(radius, radiusSpread)); + let x = 0; + let y = 0; + let z = 0; - if ( radiusSpreadClamp ) { - rand = Math.round( rand / radiusSpreadClamp ) * radiusSpreadClamp; + if (radiusSpreadClamp) { + rand = Math.round(rand / radiusSpreadClamp) * radiusSpreadClamp; } // Set position on sphere - x = Math.cos( t ) * rand; - y = Math.sin( t ) * rand; + x = Math.cos(t) * rand; + y = Math.sin(t) * rand; // Apply radius scale to this position x *= radiusScale.x; @@ -628,13 +617,13 @@ SPE.utils = { z += base.z; // Set the values in the typed array. - attribute.typedArray.setVec3Components( index, x, y, z ); + attribute.typedArray.setVec3Components(index, x, y, z); }, - randomDirectionVector3OnSphere: ( function() { - 'use strict'; + randomDirectionVector3OnSphere: (function () { + "use strict"; - var v = new THREE.Vector3(); + let v = new THREE.Vector3(); /** * Given an SPE.ShaderAttribute instance, create a direction vector from the given @@ -649,24 +638,23 @@ SPE.utils = { * @param {Number} speed The magnitude to apply to the vector. * @param {Number} speedSpread The amount of randomness to apply to the magnitude. */ - return function( attribute, index, posX, posY, posZ, emitterPosition, speed, speedSpread ) { - v.copy( emitterPosition ); + return function (attribute, index, posX, posY, posZ, emitterPosition, speed, speedSpread) { + v.copy(emitterPosition); v.x -= posX; v.y -= posY; v.z -= posZ; - v.normalize().multiplyScalar( -this.randomFloat( speed, speedSpread ) ); + v.normalize().multiplyScalar(-this.randomFloat(speed, speedSpread)); - attribute.typedArray.setVec3Components( index, v.x, v.y, v.z ); + attribute.typedArray.setVec3Components(index, v.x, v.y, v.z); }; - }() ), - + })(), - randomDirectionVector3OnDisc: ( function() { - 'use strict'; + randomDirectionVector3OnDisc: (function () { + "use strict"; - var v = new THREE.Vector3(); + let v = new THREE.Vector3(); /** * Given an SPE.ShaderAttribute instance, create a direction vector from the given @@ -681,26 +669,26 @@ SPE.utils = { * @param {Number} speed The magnitude to apply to the vector. * @param {Number} speedSpread The amount of randomness to apply to the magnitude. */ - return function( attribute, index, posX, posY, posZ, emitterPosition, speed, speedSpread ) { - v.copy( emitterPosition ); + return function (attribute, index, posX, posY, posZ, emitterPosition, speed, speedSpread) { + v.copy(emitterPosition); v.x -= posX; v.y -= posY; v.z -= posZ; - v.normalize().multiplyScalar( -this.randomFloat( speed, speedSpread ) ); + v.normalize().multiplyScalar(-this.randomFloat(speed, speedSpread)); - attribute.typedArray.setVec3Components( index, v.x, v.y, 0 ); + attribute.typedArray.setVec3Components(index, v.x, v.y, 0); }; - }() ), + })(), - getPackedRotationAxis: ( function() { - 'use strict'; + getPackedRotationAxis: (function () { + "use strict"; - var v = new THREE.Vector3(), - vSpread = new THREE.Vector3(), - c = new THREE.Color(), - addOne = new THREE.Vector3( 1, 1, 1 ); + let v = new THREE.Vector3(); + let vSpread = new THREE.Vector3(); + let c = new THREE.Color(); + let addOne = new THREE.Vector3(1, 1, 1); /** * Given a rotation axis, and a rotation axis spread vector, @@ -710,23 +698,23 @@ SPE.utils = { * @param {Object} axisSpread THREE.Vector3 instance describing the amount of randomness to apply to the rotation axis. * @return {Number} The packed rotation axis, with randomness. */ - return function( axis, axisSpread ) { - v.copy( axis ).normalize(); - vSpread.copy( axisSpread ).normalize(); + return function (axis, axisSpread) { + v.copy(axis).normalize(); + vSpread.copy(axisSpread).normalize(); - v.x += ( -axisSpread.x * 0.5 ) + ( Math.random() * axisSpread.x ); - v.y += ( -axisSpread.y * 0.5 ) + ( Math.random() * axisSpread.y ); - v.z += ( -axisSpread.z * 0.5 ) + ( Math.random() * axisSpread.z ); + v.x += -axisSpread.x * 0.5 + Math.random() * axisSpread.x; + v.y += -axisSpread.y * 0.5 + Math.random() * axisSpread.y; + v.z += -axisSpread.z * 0.5 + Math.random() * axisSpread.z; // v.x = Math.abs( v.x ); // v.y = Math.abs( v.y ); // v.z = Math.abs( v.z ); - v.normalize().add( addOne ).multiplyScalar( 0.5 ); + v.normalize().add(addOne).multiplyScalar(0.5); - c.setRGB( v.x, v.y, v.z ); + c.setRGB(v.x, v.y, v.z); return c.getHex(); }; - }() ) + })(), }; diff --git a/src/helpers/SPE.ShaderAttribute.js b/src/helpers/SPE.ShaderAttribute.js index 95e1deb..9043fb4 100644 --- a/src/helpers/SPE.ShaderAttribute.js +++ b/src/helpers/SPE.ShaderAttribute.js @@ -7,20 +7,20 @@ * @param {Boolean=} dynamicBuffer Whether this buffer attribute should be marked as dynamic or not. * @param {Function=} arrayType A reference to a TypedArray constructor. Defaults to Float32Array if none provided. */ -SPE.ShaderAttribute = function( type, dynamicBuffer, arrayType ) { - 'use strict'; +SPE.ShaderAttribute = function (type, dynamicBuffer, arrayType) { + "use strict"; - var typeMap = SPE.ShaderAttribute.typeSizeMap; + let typeMap = SPE.ShaderAttribute.typeSizeMap; - this.type = typeof type === 'string' && typeMap.hasOwnProperty( type ) ? type : 'f'; - this.componentSize = typeMap[ this.type ]; - this.arrayType = arrayType || Float32Array; - this.typedArray = null; - this.bufferAttribute = null; - this.dynamicBuffer = !!dynamicBuffer; + this.type = typeof type === "string" && typeMap.hasOwnProperty(type) ? type : "f"; + this.componentSize = typeMap[this.type]; + this.arrayType = arrayType || Float32Array; + this.typedArray = null; + this.bufferAttribute = null; + this.dynamicBuffer = !!dynamicBuffer; - this.updateMin = 0; - this.updateMax = 0; + this.updateMin = 0; + this.updateMax = 0; }; SPE.ShaderAttribute.constructor = SPE.ShaderAttribute; @@ -30,47 +30,47 @@ SPE.ShaderAttribute.constructor = SPE.ShaderAttribute; * @enum {Number} */ SPE.ShaderAttribute.typeSizeMap = { - /** - * Float - * @type {Number} - */ - f: 1, - - /** - * Vec2 - * @type {Number} - */ - v2: 2, - - /** - * Vec3 - * @type {Number} - */ - v3: 3, - - /** - * Vec4 - * @type {Number} - */ - v4: 4, - - /** - * Color - * @type {Number} - */ - c: 3, - - /** - * Mat3 - * @type {Number} - */ - m3: 9, - - /** - * Mat4 - * @type {Number} - */ - m4: 16 + /** + * Float + * @type {Number} + */ + f: 1, + + /** + * Vec2 + * @type {Number} + */ + v2: 2, + + /** + * Vec3 + * @type {Number} + */ + v3: 3, + + /** + * Vec4 + * @type {Number} + */ + v4: 4, + + /** + * Color + * @type {Number} + */ + c: 3, + + /** + * Mat3 + * @type {Number} + */ + m3: 9, + + /** + * Mat4 + * @type {Number} + */ + m4: 16, }; /** @@ -80,45 +80,41 @@ SPE.ShaderAttribute.typeSizeMap = { * @param {Number} min The start of the range to mark as needing an update. * @param {Number} max The end of the range to mark as needing an update. */ -SPE.ShaderAttribute.prototype.setUpdateRange = function( min, max ) { - 'use strict'; +SPE.ShaderAttribute.prototype.setUpdateRange = function (min, max) { + "use strict"; - this.updateMin = Math.min( min * this.componentSize, this.updateMin * this.componentSize ); - this.updateMax = Math.max( max * this.componentSize, this.updateMax * this.componentSize ); + this.updateMin = Math.min(min * this.componentSize, this.updateMin * this.componentSize); + this.updateMax = Math.max(max * this.componentSize, this.updateMax * this.componentSize); }; /** * Calculate the number of indices that this attribute should mark as needing * updating. Also marks the attribute as needing an update. */ -SPE.ShaderAttribute.prototype.flagUpdate = function() { - 'use strict'; +SPE.ShaderAttribute.prototype.flagUpdate = function () { + "use strict"; - var attr = this.bufferAttribute, - range = attr.updateRange; + let attr = this.bufferAttribute; + let range = attr.updateRange; - range.offset = this.updateMin; - range.count = Math.min( ( this.updateMax - this.updateMin ) + this.componentSize, this.typedArray.array.length ); - attr.needsUpdate = true; + range.offset = this.updateMin; + range.count = Math.min(this.updateMax - this.updateMin + this.componentSize, this.typedArray.array.length); + attr.needsUpdate = true; }; - - /** * Reset the index update counts for this attribute */ -SPE.ShaderAttribute.prototype.resetUpdateRange = function() { - 'use strict'; +SPE.ShaderAttribute.prototype.resetUpdateRange = function () { + "use strict"; - this.updateMin = 0; - this.updateMax = 0; + this.updateMin = 0; + this.updateMax = 0; }; -SPE.ShaderAttribute.prototype.resetDynamic = function() { - 'use strict'; - this.bufferAttribute.usage = this.dynamicBuffer ? - THREE.DynamicDrawUsage : - THREE.StaticDrawUsage; +SPE.ShaderAttribute.prototype.resetDynamic = function () { + "use strict"; + this.bufferAttribute.usage = this.dynamicBuffer ? THREE.DynamicDrawUsage : THREE.StaticDrawUsage; }; /** @@ -126,25 +122,25 @@ SPE.ShaderAttribute.prototype.resetDynamic = function() { * @param {Number} start The start index of the splice. Will be multiplied by the number of components for this attribute. * @param {Number} end The end index of the splice. Will be multiplied by the number of components for this attribute. */ -SPE.ShaderAttribute.prototype.splice = function( start, end ) { - 'use strict'; +SPE.ShaderAttribute.prototype.splice = function (start, end) { + "use strict"; - this.typedArray.splice( start, end ); + this.typedArray.splice(start, end); - // Reset the reference to the attribute's typed array - // since it has probably changed. - this.forceUpdateAll(); + // Reset the reference to the attribute's typed array + // since it has probably changed. + this.forceUpdateAll(); }; -SPE.ShaderAttribute.prototype.forceUpdateAll = function() { - 'use strict'; +SPE.ShaderAttribute.prototype.forceUpdateAll = function () { + "use strict"; - this.bufferAttribute.array = this.typedArray.array; - this.bufferAttribute.updateRange.offset = 0; - this.bufferAttribute.updateRange.count = -1; + this.bufferAttribute.array = this.typedArray.array; + this.bufferAttribute.updateRange.offset = 0; + this.bufferAttribute.updateRange.count = -1; - this.bufferAttribute.usage = THREE.StaticDrawUsage; - this.bufferAttribute.needsUpdate = true; + this.bufferAttribute.usage = THREE.StaticDrawUsage; + this.bufferAttribute.needsUpdate = true; }; /** @@ -156,27 +152,26 @@ SPE.ShaderAttribute.prototype.forceUpdateAll = function() { * * @param {Number} size The size of the typed array to create or update to. */ -SPE.ShaderAttribute.prototype._ensureTypedArray = function( size ) { - 'use strict'; - - // Condition that's most likely to be true at the top: no change. - if ( this.typedArray !== null && this.typedArray.size === size * this.componentSize ) { - return; - } - - // Resize the array if we need to, telling the TypedArrayHelper to - // ignore it's component size when evaluating size. - else if ( this.typedArray !== null && this.typedArray.size !== size ) { - this.typedArray.setSize( size ); - } - - // This condition should only occur once in an attribute's lifecycle. - else if ( this.typedArray === null ) { - this.typedArray = new SPE.TypedArrayHelper( this.arrayType, size, this.componentSize ); - } +SPE.ShaderAttribute.prototype._ensureTypedArray = function (size) { + "use strict"; + + // Condition that's most likely to be true at the top: no change. + if (this.typedArray !== null && this.typedArray.size === size * this.componentSize) { + return; + } + + // Resize the array if we need to, telling the TypedArrayHelper to + // ignore it's component size when evaluating size. + else if (this.typedArray !== null && this.typedArray.size !== size) { + this.typedArray.setSize(size); + } + + // This condition should only occur once in an attribute's lifecycle. + else if (this.typedArray === null) { + this.typedArray = new SPE.TypedArrayHelper(this.arrayType, size, this.componentSize); + } }; - /** * Creates a THREE.BufferAttribute instance if one doesn't exist already. * @@ -186,48 +181,46 @@ SPE.ShaderAttribute.prototype._ensureTypedArray = function( size ) { * * @param {Number} size The size of the typed array to create if one doesn't exist, or resize existing array to. */ -SPE.ShaderAttribute.prototype._createBufferAttribute = function( size ) { - 'use strict'; - - // Make sure the typedArray is present and correct. - this._ensureTypedArray( size ); - - // Don't create it if it already exists, but do - // flag that it needs updating on the next render - // cycle. - if ( this.bufferAttribute !== null ) { - this.bufferAttribute.array = this.typedArray.array; - - // Since THREE.js version 81, dynamic count calculation was removed - // so I need to do it manually here. - // - // In the next minor release, I may well remove this check and force - // dependency on THREE r81+. - if ( parseFloat( THREE.REVISION ) >= 81 ) { - this.bufferAttribute.count = this.bufferAttribute.array.length / this.bufferAttribute.itemSize; - } - - this.bufferAttribute.needsUpdate = true; - return; - } - - this.bufferAttribute = new THREE.BufferAttribute( this.typedArray.array, this.componentSize ); - - this.bufferAttribute.usage = this.dynamicBuffer ? - THREE.DynamicDrawUsage : - THREE.StaticDrawUsage; +SPE.ShaderAttribute.prototype._createBufferAttribute = function (size) { + "use strict"; + + // Make sure the typedArray is present and correct. + this._ensureTypedArray(size); + + // Don't create it if it already exists, but do + // flag that it needs updating on the next render + // cycle. + if (this.bufferAttribute !== null) { + this.bufferAttribute.array = this.typedArray.array; + + // Since THREE.js version 81, dynamic count calculation was removed + // so I need to do it manually here. + // + // In the next minor release, I may well remove this check and force + // dependency on THREE r81+. + if (parseFloat(THREE.REVISION) >= 81) { + this.bufferAttribute.count = this.bufferAttribute.array.length / this.bufferAttribute.itemSize; + } + + this.bufferAttribute.needsUpdate = true; + return; + } + + this.bufferAttribute = new THREE.BufferAttribute(this.typedArray.array, this.componentSize); + + this.bufferAttribute.usage = this.dynamicBuffer ? THREE.DynamicDrawUsage : THREE.StaticDrawUsage; }; /** * Returns the length of the typed array associated with this attribute. * @return {Number} The length of the typed array. Will be 0 if no typed array has been created yet. */ -SPE.ShaderAttribute.prototype.getLength = function() { - 'use strict'; +SPE.ShaderAttribute.prototype.getLength = function () { + "use strict"; - if ( this.typedArray === null ) { - return 0; - } + if (this.typedArray === null) { + return 0; + } - return this.typedArray.array.length; + return this.typedArray.array.length; }; diff --git a/src/helpers/SPE.TypedArrayHelper.js b/src/helpers/SPE.TypedArrayHelper.js index 8eb76fa..658f5db 100644 --- a/src/helpers/SPE.TypedArrayHelper.js +++ b/src/helpers/SPE.TypedArrayHelper.js @@ -13,13 +13,13 @@ * @param {Number} componentSize The number of components per-value (ie. 3 for a vec3, 9 for a Mat3, etc.) * @param {Number} indexOffset The index in the array from which to start assigning values. Default `0` if none provided */ -SPE.TypedArrayHelper = function( TypedArrayConstructor, size, componentSize, indexOffset ) { - 'use strict'; +SPE.TypedArrayHelper = function (TypedArrayConstructor, size, componentSize, indexOffset) { + "use strict"; this.componentSize = componentSize || 1; - this.size = ( size || 1 ); + this.size = size || 1; this.TypedArrayConstructor = TypedArrayConstructor || Float32Array; - this.array = new TypedArrayConstructor( size * this.componentSize ); + this.array = new TypedArrayConstructor(size * this.componentSize); this.indexOffset = indexOffset || 0; }; @@ -35,23 +35,21 @@ SPE.TypedArrayHelper.constructor = SPE.TypedArrayHelper; * * @param {Number} size The new size of the array. */ -SPE.TypedArrayHelper.prototype.setSize = function( size, noComponentMultiply ) { - 'use strict'; +SPE.TypedArrayHelper.prototype.setSize = function (size, noComponentMultiply) { + "use strict"; - var currentArraySize = this.array.length; + let currentArraySize = this.array.length; - if ( !noComponentMultiply ) { + if (!noComponentMultiply) { size = size * this.componentSize; } - if ( size < currentArraySize ) { - return this.shrink( size ); - } - else if ( size > currentArraySize ) { - return this.grow( size ); - } - else { - console.info( 'TypedArray is already of size:', size + '.', 'Will not resize.' ); + if (size < currentArraySize) { + return this.shrink(size); + } else if (size > currentArraySize) { + return this.grow(size); + } else { + console.info("TypedArray is already of size:", size + ".", "Will not resize."); } }; @@ -61,10 +59,10 @@ SPE.TypedArrayHelper.prototype.setSize = function( size, noComponentMultiply ) { * @param {Number} size The new size of the typed array. Must be smaller than `this.array.length`. * @return {SPE.TypedArrayHelper} Instance of this class. */ -SPE.TypedArrayHelper.prototype.shrink = function( size ) { - 'use strict'; +SPE.TypedArrayHelper.prototype.shrink = function (size) { + "use strict"; - this.array = this.array.subarray( 0, size ); + this.array = this.array.subarray(0, size); this.size = size; return this; }; @@ -74,48 +72,46 @@ SPE.TypedArrayHelper.prototype.shrink = function( size ) { * @param {Number} size The new size of the typed array. Must be larger than `this.array.length`. * @return {SPE.TypedArrayHelper} Instance of this class. */ -SPE.TypedArrayHelper.prototype.grow = function( size ) { - 'use strict'; +SPE.TypedArrayHelper.prototype.grow = function (size) { + "use strict"; - var existingArray = this.array, - newArray = new this.TypedArrayConstructor( size ); + let existingArray = this.array; + let newArray = new this.TypedArrayConstructor(size); - newArray.set( existingArray ); + newArray.set(existingArray); this.array = newArray; this.size = size; return this; }; - /** * Perform a splice operation on this array's buffer. * @param {Number} start The start index of the splice. Will be multiplied by the number of components for this attribute. * @param {Number} end The end index of the splice. Will be multiplied by the number of components for this attribute. * @returns {Object} The SPE.TypedArrayHelper instance. */ -SPE.TypedArrayHelper.prototype.splice = function( start, end ) { - 'use strict'; +SPE.TypedArrayHelper.prototype.splice = function (start, end) { + "use strict"; start *= this.componentSize; end *= this.componentSize; - var data = [], - array = this.array, - size = array.length; + let data = []; + let array = this.array; + let size = array.length; - for ( var i = 0; i < size; ++i ) { - if ( i < start || i >= end ) { - data.push( array[ i ] ); + for (let i = 0; i < size; ++i) { + if (i < start || i >= end) { + data.push(array[i]); } // array[ i ] = 0; } - this.setFromArray( 0, data ); + this.setFromArray(0, data); return this; }; - /** * Copies from the given TypedArray into this one, using the index argument * as the start position. Alias for `TypedArray.set`. Will automatically resize @@ -125,20 +121,19 @@ SPE.TypedArrayHelper.prototype.splice = function( start, end ) { * @param {TypedArray} array The array from which to copy; the source array. * @return {SPE.TypedArrayHelper} Instance of this class. */ -SPE.TypedArrayHelper.prototype.setFromArray = function( index, array ) { - 'use strict'; +SPE.TypedArrayHelper.prototype.setFromArray = function (index, array) { + "use strict"; - var sourceArraySize = array.length, + let sourceArraySize = array.length, newSize = index + sourceArraySize; - if ( newSize > this.array.length ) { - this.grow( newSize ); - } - else if ( newSize < this.array.length ) { - this.shrink( newSize ); + if (newSize > this.array.length) { + this.grow(newSize); + } else if (newSize < this.array.length) { + this.shrink(newSize); } - this.array.set( array, this.indexOffset + index ); + this.array.set(array, this.indexOffset + index); return this; }; @@ -150,10 +145,10 @@ SPE.TypedArrayHelper.prototype.setFromArray = function( index, array ) { * @param {Vector2} vec2 Any object that has `x` and `y` properties. * @return {SPE.TypedArrayHelper} Instance of this class. */ -SPE.TypedArrayHelper.prototype.setVec2 = function( index, vec2 ) { - 'use strict'; +SPE.TypedArrayHelper.prototype.setVec2 = function (index, vec2) { + "use strict"; - return this.setVec2Components( index, vec2.x, vec2.y ); + return this.setVec2Components(index, vec2.x, vec2.y); }; /** @@ -164,14 +159,14 @@ SPE.TypedArrayHelper.prototype.setVec2 = function( index, vec2 ) { * @param {Number} y The Vec2's `y` component. * @return {SPE.TypedArrayHelper} Instance of this class. */ -SPE.TypedArrayHelper.prototype.setVec2Components = function( index, x, y ) { - 'use strict'; +SPE.TypedArrayHelper.prototype.setVec2Components = function (index, x, y) { + "use strict"; - var array = this.array, - i = this.indexOffset + ( index * this.componentSize ); + let array = this.array; + let i = this.indexOffset + index * this.componentSize; - array[ i ] = x; - array[ i + 1 ] = y; + array[i] = x; + array[i + 1] = y; return this; }; @@ -182,10 +177,10 @@ SPE.TypedArrayHelper.prototype.setVec2Components = function( index, x, y ) { * @param {Vector3} vec2 Any object that has `x`, `y`, and `z` properties. * @return {SPE.TypedArrayHelper} Instance of this class. */ -SPE.TypedArrayHelper.prototype.setVec3 = function( index, vec3 ) { - 'use strict'; +SPE.TypedArrayHelper.prototype.setVec3 = function (index, vec3) { + "use strict"; - return this.setVec3Components( index, vec3.x, vec3.y, vec3.z ); + return this.setVec3Components(index, vec3.x, vec3.y, vec3.z); }; /** @@ -197,15 +192,15 @@ SPE.TypedArrayHelper.prototype.setVec3 = function( index, vec3 ) { * @param {Number} z The Vec3's `z` component. * @return {SPE.TypedArrayHelper} Instance of this class. */ -SPE.TypedArrayHelper.prototype.setVec3Components = function( index, x, y, z ) { - 'use strict'; +SPE.TypedArrayHelper.prototype.setVec3Components = function (index, x, y, z) { + "use strict"; - var array = this.array, - i = this.indexOffset + ( index * this.componentSize ); + let array = this.array; + let i = this.indexOffset + index * this.componentSize; - array[ i ] = x; - array[ i + 1 ] = y; - array[ i + 2 ] = z; + array[i] = x; + array[i + 1] = y; + array[i + 2] = z; return this; }; @@ -216,10 +211,10 @@ SPE.TypedArrayHelper.prototype.setVec3Components = function( index, x, y, z ) { * @param {Vector4} vec2 Any object that has `x`, `y`, `z`, and `w` properties. * @return {SPE.TypedArrayHelper} Instance of this class. */ -SPE.TypedArrayHelper.prototype.setVec4 = function( index, vec4 ) { - 'use strict'; +SPE.TypedArrayHelper.prototype.setVec4 = function (index, vec4) { + "use strict"; - return this.setVec4Components( index, vec4.x, vec4.y, vec4.z, vec4.w ); + return this.setVec4Components(index, vec4.x, vec4.y, vec4.z, vec4.w); }; /** @@ -232,16 +227,16 @@ SPE.TypedArrayHelper.prototype.setVec4 = function( index, vec4 ) { * @param {Number} w The Vec4's `w` component. * @return {SPE.TypedArrayHelper} Instance of this class. */ -SPE.TypedArrayHelper.prototype.setVec4Components = function( index, x, y, z, w ) { - 'use strict'; +SPE.TypedArrayHelper.prototype.setVec4Components = function (index, x, y, z, w) { + "use strict"; - var array = this.array, - i = this.indexOffset + ( index * this.componentSize ); + let array = this.array; + let i = this.indexOffset + index * this.componentSize; - array[ i ] = x; - array[ i + 1 ] = y; - array[ i + 2 ] = z; - array[ i + 3 ] = w; + array[i] = x; + array[i + 1] = y; + array[i + 2] = z; + array[i + 3] = w; return this; }; @@ -252,10 +247,10 @@ SPE.TypedArrayHelper.prototype.setVec4Components = function( index, x, y, z, w ) * @param {Matrix3} mat3 The 3x3 matrix to set from. Must have a TypedArray property named `elements` to copy from. * @return {SPE.TypedArrayHelper} Instance of this class. */ -SPE.TypedArrayHelper.prototype.setMat3 = function( index, mat3 ) { - 'use strict'; +SPE.TypedArrayHelper.prototype.setMat3 = function (index, mat3) { + "use strict"; - return this.setFromArray( this.indexOffset + ( index * this.componentSize ), mat3.elements ); + return this.setFromArray(this.indexOffset + index * this.componentSize, mat3.elements); }; /** @@ -265,10 +260,10 @@ SPE.TypedArrayHelper.prototype.setMat3 = function( index, mat3 ) { * @param {Matrix4} mat3 The 4x4 matrix to set from. Must have a TypedArray property named `elements` to copy from. * @return {SPE.TypedArrayHelper} Instance of this class. */ -SPE.TypedArrayHelper.prototype.setMat4 = function( index, mat4 ) { - 'use strict'; +SPE.TypedArrayHelper.prototype.setMat4 = function (index, mat4) { + "use strict"; - return this.setFromArray( this.indexOffset + ( index * this.componentSize ), mat4.elements ); + return this.setFromArray(this.indexOffset + index * this.componentSize, mat4.elements); }; /** @@ -278,10 +273,10 @@ SPE.TypedArrayHelper.prototype.setMat4 = function( index, mat4 ) { * @param {Color} color Any object that has `r`, `g`, and `b` properties. * @return {SPE.TypedArrayHelper} Instance of this class. */ -SPE.TypedArrayHelper.prototype.setColor = function( index, color ) { - 'use strict'; +SPE.TypedArrayHelper.prototype.setColor = function (index, color) { + "use strict"; - return this.setVec3Components( index, color.r, color.g, color.b ); + return this.setVec3Components(index, color.r, color.g, color.b); }; /** @@ -291,10 +286,10 @@ SPE.TypedArrayHelper.prototype.setColor = function( index, color ) { * @param {Number} numericValue The number to assign to this index in the array. * @return {SPE.TypedArrayHelper} Instance of this class. */ -SPE.TypedArrayHelper.prototype.setNumber = function( index, numericValue ) { - 'use strict'; +SPE.TypedArrayHelper.prototype.setNumber = function (index, numericValue) { + "use strict"; - this.array[ this.indexOffset + ( index * this.componentSize ) ] = numericValue; + this.array[this.indexOffset + index * this.componentSize] = numericValue; return this; }; @@ -308,10 +303,10 @@ SPE.TypedArrayHelper.prototype.setNumber = function( index, numericValue ) { * @param {Number} index The index in the array to fetch. * @return {Number} The value at the given index. */ -SPE.TypedArrayHelper.prototype.getValueAtIndex = function( index ) { - 'use strict'; +SPE.TypedArrayHelper.prototype.getValueAtIndex = function (index) { + "use strict"; - return this.array[ this.indexOffset + index ]; + return this.array[this.indexOffset + index]; }; /** @@ -324,8 +319,8 @@ SPE.TypedArrayHelper.prototype.getValueAtIndex = function( index ) { * @param {Number} index The index in the array to fetch. * @return {TypedArray} The component value at the given index. */ -SPE.TypedArrayHelper.prototype.getComponentValueAtIndex = function( index ) { - 'use strict'; +SPE.TypedArrayHelper.prototype.getComponentValueAtIndex = function (index) { + "use strict"; - return this.array.subarray( this.indexOffset + ( index * this.componentSize ) ); -}; \ No newline at end of file + return this.array.subarray(this.indexOffset + index * this.componentSize); +}; From b5837bbee3caca53793544789b99612fff355bea Mon Sep 17 00:00:00 2001 From: KellyCode Date: Sat, 22 Feb 2025 09:45:01 -0600 Subject: [PATCH 06/25] cleaned SPE code --- examples/js/spector.bundle.js | 82 ----------------------------------- notes.txt | 47 -------------------- 2 files changed, 129 deletions(-) delete mode 100644 examples/js/spector.bundle.js delete mode 100644 notes.txt diff --git a/examples/js/spector.bundle.js b/examples/js/spector.bundle.js deleted file mode 100644 index 23a2d55..0000000 --- a/examples/js/spector.bundle.js +++ /dev/null @@ -1,82 +0,0 @@ -!function(e,t){"object"==typeof exports&&"object"==typeof module?module.exports=t():"function"==typeof define&&define.amd?define("SPECTOR",[],t):"object"==typeof exports?exports.SPECTOR=t():e.SPECTOR=t()}(self,(()=>(()=>{var e={874:(e,t)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0})},327:(e,t)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.makeEveryOtherGenerator=t.makeGenerator=void 0,t.makeGenerator=function(e){var t=function(n){return"string"==typeof n?n:null==n?"":Array.isArray(n)?n.map(t).join(""):n.type in e?e[n.type](n):"NO GENERATOR FOR ".concat(n.type)+n};return t},t.makeEveryOtherGenerator=function(e){return function(t,n){return t.reduce((function(i,r,s){return i+e(r)+(s===t.length-1?"":e(n[s]))}),"")}}},83:function(e,t,n){"use strict";var i=this&&this.__createBinding||(Object.create?function(e,t,n,i){void 0===i&&(i=n);var r=Object.getOwnPropertyDescriptor(t,n);r&&!("get"in r?!t.__esModule:r.writable||r.configurable)||(r={enumerable:!0,get:function(){return t[n]}}),Object.defineProperty(e,i,r)}:function(e,t,n,i){void 0===i&&(i=n),e[i]=t[n]}),r=this&&this.__exportStar||function(e,t){for(var n in e)"default"===n||Object.prototype.hasOwnProperty.call(t,n)||i(t,e,n)};Object.defineProperty(t,"__esModule",{value:!0}),r(n(327),t),r(n(416),t),r(n(874),t)},416:(e,t)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.visit=void 0,t.visit=function(e,t){var n=function(e,i,r,s,o){var a,l=t[e.type],c=function(e,t,n,i,r){return{node:e,parent:t,parentPath:n,key:i,index:r,skip:function(){this.skipped=!0},remove:function(){this.removed=!0},replaceWith:function(e){this.replaced=e},findParent:function(e){return n?e(n)?n:n.findParent(e):n}}}(e,i,r,s,o),u=i;if(null==l?void 0:l.enter){if(l.enter(c),c.removed){if(!s||!i)throw new Error("Asked to remove ".concat(e," but no parent key was present in ").concat(i));return"number"==typeof o?u[s].splice(o,1):u[s]=null,c}if(c.replaced){if(!s||!i)throw new Error("Asked to remove ".concat(e," but no parent key was present in ").concat(i));"number"==typeof o?u[s].splice(o,1,c.replaced):u[s]=c.replaced}if(c.skipped)return c}Object.entries(e).filter((function(e){return e[0],function(e){return function(e){return!!(null==e?void 0:e.type)}(e)||Array.isArray(e)}(e[1])})).forEach((function(t){var i=t[0],r=t[1];if(Array.isArray(r))for(var s=0,o=0;s-o{"use strict";Object.defineProperty(t,"__esModule",{value:!0});var i=(0,n(83).makeGenerator)({program:function(e){return i(e.program)+i(e.wsEnd)},segment:function(e){return i(e.blocks)},text:function(e){return i(e.text)},literal:function(e){return i(e.wsStart)+i(e.literal)+i(e.wsEnd)},identifier:function(e){return i(e.identifier)+i(e.wsEnd)},binary:function(e){return i(e.left)+i(e.operator)+i(e.right)},group:function(e){return i(e.lp)+i(e.expression)+i(e.rp)},unary:function(e){return i(e.operator)+i(e.expression)},unary_defined:function(e){return i(e.operator)+i(e.lp)+i(e.identifier)+i(e.rp)},int_constant:function(e){return i(e.token)+i(e.wsEnd)},elseif:function(e){return i(e.token)+i(e.expression)+i(e.wsEnd)+i(e.body)},if:function(e){return i(e.token)+i(e.expression)+i(e.wsEnd)+i(e.body)},ifdef:function(e){return i(e.token)+i(e.identifier)+i(e.wsEnd)},ifndef:function(e){return i(e.token)+i(e.identifier)+i(e.wsEnd)},else:function(e){return i(e.token)+i(e.body)+i(e.wsEnd)},error:function(e){return i(e.error)+i(e.message)+i(e.wsEnd)},undef:function(e){return i(e.undef)+i(e.identifier)+i(e.wsEnd)},define:function(e){return i(e.wsStart)+i(e.define)+i(e.identifier)+i(e.body)+i(e.wsEnd)},define_arguments:function(e){return i(e.wsStart)+i(e.define)+i(e.identifier)+i(e.lp)+i(e.args)+i(e.rp)+i(e.body)+i(e.wsEnd)},conditional:function(e){return i(e.wsStart)+i(e.ifPart)+i(e.elseIfParts)+i(e.elsePart)+i(e.endif)+i(e.wsEnd)},version:function(e){return i(e.version)+i(e.value)+i(e.profile)+i(e.wsEnd)},pragma:function(e){return i(e.pragma)+i(e.body)+i(e.wsEnd)},line:function(e){return i(e.line)+i(e.value)+i(e.wsEnd)},extension:function(e){return i(e.extension)+i(e.name)+i(e.colon)+i(e.behavior)+i(e.wsEnd)}});t.default=i},29:function(e,t,n){"use strict";var i=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0}),t.parser=t.preprocess=t.generate=t.preprocessComments=t.preprocessAst=void 0;var r=i(n(851));t.generate=r.default;var s=n(168);Object.defineProperty(t,"preprocessAst",{enumerable:!0,get:function(){return s.preprocessAst}}),Object.defineProperty(t,"preprocessComments",{enumerable:!0,get:function(){return s.preprocessComments}});var o=i(n(180));t.parser=o.default;var a=function(e,t){return(0,r.default)((0,s.preprocessAst)(o.default.parse(t.preserveComments?e:(0,s.preprocessComments)(e)),t))};t.preprocess=a,t.default=a},180:e=>{"use strict";function t(e,n,i,r){var s=Error.call(this,e);return Object.setPrototypeOf&&Object.setPrototypeOf(s,t.prototype),s.expected=n,s.found=i,s.location=r,s.name="SyntaxError",s}function n(e,t,n){return n=n||" ",e.length>t?e:(t-=e.length,e+(n+=n.repeat(t)).slice(0,t))}!function(e,t){function n(){this.constructor=e}n.prototype=t.prototype,e.prototype=new n}(t,Error),t.prototype.format=function(e){var t="Error: "+this.message;if(this.location){var i,r=null;for(i=0;i0){for(t=1,n=1;t>",!1),B=dt("<=",!1),$=dt(">=",!1),P=dt("==",!1),k=dt("!=",!1),D=dt("&&",!1),U=dt("||",!1),G=dt("(",!1),W=dt(")",!1),V=dt(",",!1),H=dt("!",!1),X=dt("-",!1),z=dt("~",!1),K=dt("+",!1),j=dt("*",!1),Y=dt("/",!1),q=dt("%",!1),Z=dt("<",!1),Q=dt(">",!1),J=dt("|",!1),ee=dt("^",!1),te=dt("&",!1),ne=dt(":",!1),ie=dt("#define",!1),re=(dt("#include",!1),dt("#line",!1)),se=dt("#undef",!1),oe=dt("#error",!1),ae=dt("#pragma",!1),le=dt("defined",!1),ce=dt("#if",!1),ue=dt("#ifdef",!1),he=dt("#ifndef",!1),de=dt("#elif",!1),me=dt("#else",!1),pe=dt("#endif",!1),ge=dt("#version",!1),fe=dt("#extension",!1),Ee=mt([["A","Z"],["a","z"],"_"],!1,!1),ve=mt([["A","Z"],["a","z"],"_",["0","9"]],!1,!1),_e=pt("number"),Ce=mt(["u","U"],!1,!1),Ae=mt([["1","9"]],!1,!1),Re=dt("0",!1),Se=mt([["0","7"]],!1,!1),Te=mt(["x","X"],!1,!1),be=mt([["0","9"],["a","f"],["A","F"]],!1,!1),we=mt([["0","9"]],!1,!1),xe=pt("control line"),ye=mt(["\n"],!1,!1),Le=pt("token string"),Ie=mt(["\n"],!0,!1),Fe=pt("text"),Ne=dt("#",!1),Me=pt("if"),Oe=pt("primary expression"),Be=pt("unary expression"),$e=pt("multiplicative expression"),Pe=pt("additive expression"),ke=pt("shift expression"),De=pt("relational expression"),Ue=pt("equality expression"),Ge=pt("and expression"),We=pt("exclusive or expression"),Ve=pt("inclusive or expression"),He=pt("logical and expression"),Xe=pt("logical or expression"),ze=pt("constant expression"),Ke=pt("whitespace or comment"),je=dt("//",!1),Ye=dt("/*",!1),qe=dt("*/",!1),Ze={type:"any"},Qe=pt("whitespace"),Je=mt([" ","\t"],!1,!1),et=function(e,t){return dn("literal",{literal:e,wsEnd:t})},tt=function(e,t,n){return dn("literal",{literal:t,wsStart:e,wsEnd:n})},nt=function(e){return dn("text",{text:e.join("")})},it=function(e,t,n,i,r){return dn("elseif",{token:t,expression:n,wsEnd:i,body:r})},rt=function(e,t){return gn(e,t)},st=function(e,t,n){return mn(t,n)},ot=0,at=[{line:1,column:1}],lt=0,ct=[],ut=0,ht={};if("startRule"in n){if(!(n.startRule in o))throw new Error("Can't start parsing from rule \""+n.startRule+'".');a=o[n.startRule]}function dt(e,t){return{type:"literal",text:e,ignoreCase:t}}function mt(e,t,n){return{type:"class",parts:e,inverted:t,ignoreCase:n}}function pt(e){return{type:"other",description:e}}function gt(t){var n,i=at[t];if(i)return i;for(n=t-1;!at[n];)n--;for(i={line:(i=at[n]).line,column:i.column};nlt&&(lt=ot,ct=[]),ct.push(e))}function vt(){var e,t=74*ot+0,n=ht[t];return n?(ot=n.nextPos,n.result):(e=function(){var e,t,n,i=74*ot+1,s=ht[i];return s?(ot=s.nextPos,s.result):(e=ot,(t=zt())!==r?(n=cn(),e=dn("program",{program:t.blocks,wsEnd:n})):(ot=e,e=r),ht[i]={nextPos:ot,result:e},e)}(),ht[t]={nextPos:ot,result:e},e)}function _t(){var t,n,i,s=74*ot+3,o=ht[s];return o?(ot=o.nextPos,o.result):(t=ot,"<<"===e.substr(ot,2)?(n="<<",ot+=2):(n=r,0===ut&&Et(M)),n!==r?(i=cn(),t=et(n,i)):(ot=t,t=r),ht[s]={nextPos:ot,result:t},t)}function Ct(){var t,n,i,s=74*ot+4,o=ht[s];return o?(ot=o.nextPos,o.result):(t=ot,">>"===e.substr(ot,2)?(n=">>",ot+=2):(n=r,0===ut&&Et(O)),n!==r?(i=cn(),t=et(n,i)):(ot=t,t=r),ht[s]={nextPos:ot,result:t},t)}function At(){var t,n,i,s=74*ot+5,o=ht[s];return o?(ot=o.nextPos,o.result):(t=ot,"<="===e.substr(ot,2)?(n="<=",ot+=2):(n=r,0===ut&&Et(B)),n!==r?(i=cn(),t=et(n,i)):(ot=t,t=r),ht[s]={nextPos:ot,result:t},t)}function Rt(){var t,n,i,s=74*ot+6,o=ht[s];return o?(ot=o.nextPos,o.result):(t=ot,">="===e.substr(ot,2)?(n=">=",ot+=2):(n=r,0===ut&&Et($)),n!==r?(i=cn(),t=et(n,i)):(ot=t,t=r),ht[s]={nextPos:ot,result:t},t)}function St(){var t,n,i,s=74*ot+7,o=ht[s];return o?(ot=o.nextPos,o.result):(t=ot,"=="===e.substr(ot,2)?(n="==",ot+=2):(n=r,0===ut&&Et(P)),n!==r?(i=cn(),t=et(n,i)):(ot=t,t=r),ht[s]={nextPos:ot,result:t},t)}function Tt(){var t,n,i,s=74*ot+8,o=ht[s];return o?(ot=o.nextPos,o.result):(t=ot,"!="===e.substr(ot,2)?(n="!=",ot+=2):(n=r,0===ut&&Et(k)),n!==r?(i=cn(),t=et(n,i)):(ot=t,t=r),ht[s]={nextPos:ot,result:t},t)}function bt(){var t,n,i,s=74*ot+9,o=ht[s];return o?(ot=o.nextPos,o.result):(t=ot,"&&"===e.substr(ot,2)?(n="&&",ot+=2):(n=r,0===ut&&Et(D)),n!==r?(i=cn(),t=et(n,i)):(ot=t,t=r),ht[s]={nextPos:ot,result:t},t)}function wt(){var t,n,i,s=74*ot+10,o=ht[s];return o?(ot=o.nextPos,o.result):(t=ot,"||"===e.substr(ot,2)?(n="||",ot+=2):(n=r,0===ut&&Et(U)),n!==r?(i=cn(),t=et(n,i)):(ot=t,t=r),ht[s]={nextPos:ot,result:t},t)}function xt(){var t,n,i,s=74*ot+11,o=ht[s];return o?(ot=o.nextPos,o.result):(t=ot,40===e.charCodeAt(ot)?(n="(",ot++):(n=r,0===ut&&Et(G)),n!==r?(i=cn(),t=et(n,i)):(ot=t,t=r),ht[s]={nextPos:ot,result:t},t)}function yt(){var t,n,i,s=74*ot+12,o=ht[s];return o?(ot=o.nextPos,o.result):(t=ot,41===e.charCodeAt(ot)?(n=")",ot++):(n=r,0===ut&&Et(W)),n!==r?(i=cn(),t=et(n,i)):(ot=t,t=r),ht[s]={nextPos:ot,result:t},t)}function Lt(){var t,n,i,s=74*ot+13,o=ht[s];return o?(ot=o.nextPos,o.result):(t=ot,44===e.charCodeAt(ot)?(n=",",ot++):(n=r,0===ut&&Et(V)),n!==r?(i=cn(),t=et(n,i)):(ot=t,t=r),ht[s]={nextPos:ot,result:t},t)}function It(){var t,n,i,s=74*ot+15,o=ht[s];return o?(ot=o.nextPos,o.result):(t=ot,45===e.charCodeAt(ot)?(n="-",ot++):(n=r,0===ut&&Et(X)),n!==r?(i=cn(),t=et(n,i)):(ot=t,t=r),ht[s]={nextPos:ot,result:t},t)}function Ft(){var t,n,i,s=74*ot+17,o=ht[s];return o?(ot=o.nextPos,o.result):(t=ot,43===e.charCodeAt(ot)?(n="+",ot++):(n=r,0===ut&&Et(K)),n!==r?(i=cn(),t=et(n,i)):(ot=t,t=r),ht[s]={nextPos:ot,result:t},t)}function Nt(){var t,n,i,s=74*ot+18,o=ht[s];return o?(ot=o.nextPos,o.result):(t=ot,42===e.charCodeAt(ot)?(n="*",ot++):(n=r,0===ut&&Et(j)),n!==r?(i=cn(),t=et(n,i)):(ot=t,t=r),ht[s]={nextPos:ot,result:t},t)}function Mt(){var t,n,i,s=74*ot+19,o=ht[s];return o?(ot=o.nextPos,o.result):(t=ot,47===e.charCodeAt(ot)?(n="/",ot++):(n=r,0===ut&&Et(Y)),n!==r?(i=cn(),t=et(n,i)):(ot=t,t=r),ht[s]={nextPos:ot,result:t},t)}function Ot(){var t,n,i,s=74*ot+20,o=ht[s];return o?(ot=o.nextPos,o.result):(t=ot,37===e.charCodeAt(ot)?(n="%",ot++):(n=r,0===ut&&Et(q)),n!==r?(i=cn(),t=et(n,i)):(ot=t,t=r),ht[s]={nextPos:ot,result:t},t)}function Bt(){var t,n,i,s=74*ot+21,o=ht[s];return o?(ot=o.nextPos,o.result):(t=ot,60===e.charCodeAt(ot)?(n="<",ot++):(n=r,0===ut&&Et(Z)),n!==r?(i=cn(),t=et(n,i)):(ot=t,t=r),ht[s]={nextPos:ot,result:t},t)}function $t(){var t,n,i,s=74*ot+22,o=ht[s];return o?(ot=o.nextPos,o.result):(t=ot,62===e.charCodeAt(ot)?(n=">",ot++):(n=r,0===ut&&Et(Q)),n!==r?(i=cn(),t=et(n,i)):(ot=t,t=r),ht[s]={nextPos:ot,result:t},t)}function Pt(){var t,n,i,s=74*ot+23,o=ht[s];return o?(ot=o.nextPos,o.result):(t=ot,124===e.charCodeAt(ot)?(n="|",ot++):(n=r,0===ut&&Et(J)),n!==r?(i=cn(),t=et(n,i)):(ot=t,t=r),ht[s]={nextPos:ot,result:t},t)}function kt(){var t,n,i,s=74*ot+24,o=ht[s];return o?(ot=o.nextPos,o.result):(t=ot,94===e.charCodeAt(ot)?(n="^",ot++):(n=r,0===ut&&Et(ee)),n!==r?(i=cn(),t=et(n,i)):(ot=t,t=r),ht[s]={nextPos:ot,result:t},t)}function Dt(){var t,n,i,s=74*ot+25,o=ht[s];return o?(ot=o.nextPos,o.result):(t=ot,38===e.charCodeAt(ot)?(n="&",ot++):(n=r,0===ut&&Et(te)),n!==r?(i=cn(),t=et(n,i)):(ot=t,t=r),ht[s]={nextPos:ot,result:t},t)}function Ut(){var t,n,i,s,o=74*ot+27,a=ht[o];return a?(ot=a.nextPos,a.result):(t=ot,n=cn(),e.substr(ot,7)===l?(i=l,ot+=7):(i=r,0===ut&&Et(ie)),i!==r?(s=cn(),t=tt(n,i,s)):(ot=t,t=r),ht[o]={nextPos:ot,result:t},t)}function Gt(){var t,n,i,s,o=74*ot+37,a=ht[o];return a?(ot=a.nextPos,a.result):(t=ot,n=cn(),e.substr(ot,5)===f?(i=f,ot+=5):(i=r,0===ut&&Et(de)),i!==r?(s=cn(),t=tt(n,i,s)):(ot=t,t=r),ht[o]={nextPos:ot,result:t},t)}function Wt(){var t,n,i,s,o,a,l=74*ot+42,c=ht[l];if(c)return ot=c.nextPos,c.result;if(t=ot,n=ot,i=ot,R.test(e.charAt(ot))?(s=e.charAt(ot),ot++):(s=r,0===ut&&Et(Ee)),s!==r){for(o=[],S.test(e.charAt(ot))?(a=e.charAt(ot),ot++):(a=r,0===ut&&Et(ve));a!==r;)o.push(a),S.test(e.charAt(ot))?(a=e.charAt(ot),ot++):(a=r,0===ut&&Et(ve));i=s=[s,o]}else ot=i,i=r;return(n=i!==r?e.substring(n,ot):i)!==r?(i=cn(),t=dn("identifier",{identifier:n,wsEnd:i})):(ot=t,t=r),ht[l]={nextPos:ot,result:t},t}function Vt(){var t,n,i,s,o=74*ot+44,a=ht[o];return a?(ot=a.nextPos,a.result):(ut++,t=ot,n=ot,i=function(){var t,n,i,s,o,a=74*ot+46,l=ht[a];if(l)return ot=l.nextPos,l.result;if(t=ot,n=ot,b.test(e.charAt(ot))?(i=e.charAt(ot),ot++):(i=r,0===ut&&Et(Ae)),i!==r){for(s=[],o=Xt();o!==r;)s.push(o),o=Xt();n=i=[i,s]}else ot=n,n=r;return t=n!==r?e.substring(t,ot):n,ht[a]={nextPos:ot,result:t},t}(),i!==r?((s=Ht())===r&&(s=null),n=i=[i,s]):(ot=n,n=r),(t=n!==r?e.substring(t,ot):n)===r&&(t=ot,n=ot,i=function(){var t,n,i,s,o=74*ot+47,a=ht[o];if(a)return ot=a.nextPos,a.result;if(t=ot,48===e.charCodeAt(ot)?(n="0",ot++):(n=r,0===ut&&Et(Re)),n!==r){for(i=[],w.test(e.charAt(ot))?(s=e.charAt(ot),ot++):(s=r,0===ut&&Et(Se));s!==r;)i.push(s),w.test(e.charAt(ot))?(s=e.charAt(ot),ot++):(s=r,0===ut&&Et(Se));t=n=[n,i]}else ot=t,t=r;return ht[o]={nextPos:ot,result:t},t}(),i!==r?((s=Ht())===r&&(s=null),n=i=[i,s]):(ot=n,n=r),(t=n!==r?e.substring(t,ot):n)===r&&(t=ot,n=ot,i=function(){var t,n,i,s,o,a=74*ot+48,l=ht[a];if(l)return ot=l.nextPos,l.result;if(t=ot,48===e.charCodeAt(ot)?(n="0",ot++):(n=r,0===ut&&Et(Re)),n!==r)if(x.test(e.charAt(ot))?(i=e.charAt(ot),ot++):(i=r,0===ut&&Et(Te)),i!==r){for(s=[],y.test(e.charAt(ot))?(o=e.charAt(ot),ot++):(o=r,0===ut&&Et(be));o!==r;)s.push(o),y.test(e.charAt(ot))?(o=e.charAt(ot),ot++):(o=r,0===ut&&Et(be));t=n=[n,i,s]}else ot=t,t=r;else ot=t,t=r;return ht[a]={nextPos:ot,result:t},t}(),i!==r?((s=Ht())===r&&(s=null),n=i=[i,s]):(ot=n,n=r),t=n!==r?e.substring(t,ot):n)),ut--,t===r&&(n=r,0===ut&&Et(_e)),ht[o]={nextPos:ot,result:t},t)}function Ht(){var t,n=74*ot+45,i=ht[n];return i?(ot=i.nextPos,i.result):(T.test(e.charAt(ot))?(t=e.charAt(ot),ot++):(t=r,0===ut&&Et(Ce)),ht[n]={nextPos:ot,result:t},t)}function Xt(){var t,n=74*ot+49,i=ht[n];return i?(ot=i.nextPos,i.result):(L.test(e.charAt(ot))?(t=e.charAt(ot),ot++):(t=r,0===ut&&Et(we)),ht[n]={nextPos:ot,result:t},t)}function zt(){var e,t,n,i,s,o=74*ot+50,a=ht[o];if(a)return ot=a.nextPos,a.result;if(e=ot,t=[],(n=Kt())===r){if(n=ot,i=[],(s=Yt())!==r)for(;s!==r;)i.push(s),s=Yt();else i=r;i!==r&&(i=nt(i)),n=i}if(n!==r){for(;n!==r;)if(t.push(n),(n=Kt())===r){if(n=ot,i=[],(s=Yt())!==r)for(;s!==r;)i.push(s),s=Yt();else i=r;i!==r&&(i=nt(i)),n=i}}else t=r;return t!==r&&(t=dn("segment",{blocks:t})),e=t,ht[o]={nextPos:ot,result:e},e}function Kt(){var t,n,i,s,o,a,l,m,f,A,T,b,w,x=74*ot+51,y=ht[x];if(y)return ot=y.nextPos,y.result;if(ut++,t=function(){var t,n,i,s,o,a,l,c,u,h,d,m=74*ot+54,f=ht[m];if(f)return ot=f.nextPos,f.result;if(t=ot,n=ot,i=function(){var t,n,i,s=74*ot+55,o=ht[s];return o?(ot=o.nextPos,o.result):(ut++,t=ot,n=function(){var t,n,i,s,o=74*ot+35,a=ht[o];return a?(ot=a.nextPos,a.result):(t=ot,n=cn(),e.substr(ot,6)===p?(i=p,ot+=6):(i=r,0===ut&&Et(ue)),i!==r?(s=cn(),t=tt(n,i,s)):(ot=t,t=r),ht[o]={nextPos:ot,result:t},t)}(),n!==r&&(i=Wt())!==r?t=dn("ifdef",{token:n,identifier:i}):(ot=t,t=r),t===r&&(t=ot,n=function(){var t,n,i,s,o=74*ot+36,a=ht[o];return a?(ot=a.nextPos,a.result):(t=ot,n=cn(),e.substr(ot,7)===g?(i=g,ot+=7):(i=r,0===ut&&Et(he)),i!==r?(s=cn(),t=tt(n,i,s)):(ot=t,t=r),ht[o]={nextPos:ot,result:t},t)}(),n!==r&&(i=Wt())!==r?t=dn("ifndef",{token:n,identifier:i}):(ot=t,t=r),t===r&&(t=ot,n=function(){var t,n,i,s,o=74*ot+34,a=ht[o];return a?(ot=a.nextPos,a.result):(t=ot,n=cn(),"#if"===e.substr(ot,3)?(i="#if",ot+=3):(i=r,0===ut&&Et(ce)),i!==r?(s=cn(),t=tt(n,i,s)):(ot=t,t=r),ht[o]={nextPos:ot,result:t},t)}(),n!==r?((i=ln())===r&&(i=null),t=function(e,t){return dn("if",{token:e,expression:t})}(n,i)):(ot=t,t=r))),ut--,t===r&&(n=r,0===ut&&Et(Me)),ht[s]={nextPos:ot,result:t},t)}(),i!==r?(I.test(e.charAt(ot))?(s=e.charAt(ot),ot++):(s=r,0===ut&&Et(ye)),s!==r?((o=zt())===r&&(o=null),u=i,h=s,d=o,n={...u,body:d,wsEnd:h}):(ot=n,n=r)):(ot=n,n=r),n!==r){for(i=[],s=ot,(o=Gt())!==r&&(a=ln())!==r?(I.test(e.charAt(ot))?(l=e.charAt(ot),ot++):(l=r,0===ut&&Et(ye)),l!==r?((c=zt())===r&&(c=null),s=it(0,o,a,l,c)):(ot=s,s=r)):(ot=s,s=r);s!==r;)i.push(s),s=ot,(o=Gt())!==r&&(a=ln())!==r?(I.test(e.charAt(ot))?(l=e.charAt(ot),ot++):(l=r,0===ut&&Et(ye)),l!==r?((c=zt())===r&&(c=null),s=it(0,o,a,l,c)):(ot=s,s=r)):(ot=s,s=r);s=ot,o=function(){var t,n,i,s,o=74*ot+38,a=ht[o];return a?(ot=a.nextPos,a.result):(t=ot,n=cn(),e.substr(ot,5)===E?(i=E,ot+=5):(i=r,0===ut&&Et(me)),i!==r?(s=cn(),t=tt(n,i,s)):(ot=t,t=r),ht[o]={nextPos:ot,result:t},t)}(),o!==r?(I.test(e.charAt(ot))?(a=e.charAt(ot),ot++):(a=r,0===ut&&Et(ye)),a!==r?((l=zt())===r&&(l=null),s=function(e,t,n,i,r){return dn("else",{token:n,wsEnd:i,body:r})}(0,0,o,a,l)):(ot=s,s=r)):(ot=s,s=r),s===r&&(s=null),o=function(){var t,n,i,s,o=74*ot+39,a=ht[o];return a?(ot=a.nextPos,a.result):(t=ot,n=cn(),e.substr(ot,6)===v?(i=v,ot+=6):(i=r,0===ut&&Et(pe)),i!==r?(s=cn(),t=tt(n,i,s)):(ot=t,t=r),ht[o]={nextPos:ot,result:t},t)}(),o!==r?(I.test(e.charAt(ot))?(a=e.charAt(ot),ot++):(a=r,0===ut&&Et(ye)),a===r&&(a=null),t=function(e,t,n,i,r){return dn("conditional",{ifPart:e,elseIfParts:t,elsePart:n,endif:i,wsEnd:r})}(n,i,s,o,a)):(ot=t,t=r)}else ot=t,t=r;return ht[m]={nextPos:ot,result:t},t}(),t===r){if(t=ot,n=ot,(i=Ut())!==r)if((s=function(){var t,n,i,s,o,a,l=74*ot+43,c=ht[l];if(c)return ot=c.nextPos,c.result;if(t=ot,n=ot,i=ot,R.test(e.charAt(ot))?(s=e.charAt(ot),ot++):(s=r,0===ut&&Et(Ee)),s!==r){for(o=[],S.test(e.charAt(ot))?(a=e.charAt(ot),ot++):(a=r,0===ut&&Et(ve));a!==r;)o.push(a),S.test(e.charAt(ot))?(a=e.charAt(ot),ot++):(a=r,0===ut&&Et(ve));i=s=[s,o]}else ot=i,i=r;return(n=i!==r?e.substring(n,ot):i)!==r&&(n=dn("identifier",{identifier:n})),t=n,ht[l]={nextPos:ot,result:t},t}())!==r)if((o=xt())!==r){if(a=ot,(l=Wt())!==r){for(m=[],f=ot,(A=Lt())!==r&&(T=Wt())!==r?f=A=[A,T]:(ot=f,f=r);f!==r;)m.push(f),f=ot,(A=Lt())!==r&&(T=Wt())!==r?f=A=[A,T]:(ot=f,f=r);a=[l,...m.flat()]}else ot=a,a=r;a===r&&(a=null),(l=yt())!==r?((m=jt())===r&&(m=null),n=function(e,t,n,i,r,s){return dn("define_arguments",{define:e,identifier:t,lp:n,args:i||[],rp:r,body:s})}(i,s,o,a,l,m)):(ot=n,n=r)}else ot=n,n=r;else ot=n,n=r;else ot=n,n=r;if(n===r&&(n=ot,(i=Ut())!==r&&(s=Wt())!==r?((o=jt())===r&&(o=null),n=function(e,t,n){return dn("define",{define:e,identifier:t,body:n})}(i,s,o)):(ot=n,n=r),n===r)){if(n=ot,i=function(){var t,n,i,s,o=74*ot+29,a=ht[o];return a?(ot=a.nextPos,a.result):(t=ot,n=cn(),e.substr(ot,5)===c?(i=c,ot+=5):(i=r,0===ut&&Et(re)),i!==r?(s=cn(),t=tt(n,i,s)):(ot=t,t=r),ht[o]={nextPos:ot,result:t},t)}(),i!==r){if(s=ot,o=[],(a=Xt())!==r)for(;a!==r;)o.push(a),a=Xt();else o=r;(s=o!==r?e.substring(s,ot):o)!==r?n=dn("line",{line:i,value:s}):(ot=n,n=r)}else ot=n,n=r;n===r&&(n=ot,i=function(){var t,n,i,s,o=74*ot+30,a=ht[o];return a?(ot=a.nextPos,a.result):(t=ot,n=cn(),e.substr(ot,6)===u?(i=u,ot+=6):(i=r,0===ut&&Et(se)),i!==r?(s=cn(),t=tt(n,i,s)):(ot=t,t=r),ht[o]={nextPos:ot,result:t},t)}(),i!==r&&(s=Wt())!==r?n=dn("undef",{undef:i,identifier:s}):(ot=n,n=r),n===r&&(n=ot,i=function(){var t,n,i,s,o=74*ot+31,a=ht[o];return a?(ot=a.nextPos,a.result):(t=ot,n=cn(),e.substr(ot,6)===h?(i=h,ot+=6):(i=r,0===ut&&Et(oe)),i!==r?(s=cn(),t=tt(n,i,s)):(ot=t,t=r),ht[o]={nextPos:ot,result:t},t)}(),i!==r&&(s=jt())!==r?n=dn("error",{error:i,message:s}):(ot=n,n=r),n===r&&(n=ot,i=function(){var t,n,i,s,o=74*ot+32,a=ht[o];return a?(ot=a.nextPos,a.result):(t=ot,n=cn(),e.substr(ot,7)===d?(i=d,ot+=7):(i=r,0===ut&&Et(ae)),i!==r?(s=cn(),t=tt(n,i,s)):(ot=t,t=r),ht[o]={nextPos:ot,result:t},t)}(),i!==r&&(s=jt())!==r?n=dn("pragma",{pragma:i,body:s}):(ot=n,n=r),n===r&&(n=ot,i=function(){var t,n,i,s,o=74*ot+40,a=ht[o];return a?(ot=a.nextPos,a.result):(t=ot,n=cn(),e.substr(ot,8)===_?(i=_,ot+=8):(i=r,0===ut&&Et(ge)),i!==r?(s=cn(),t=tt(n,i,s)):(ot=t,t=r),ht[o]={nextPos:ot,result:t},t)}(),i!==r&&(s=Vt())!==r?((o=jt())===r&&(o=null),n=dn("version",{version:i,value:s,profile:o})):(ot=n,n=r),n===r&&(n=ot,i=function(){var t,n,i,s,o=74*ot+41,a=ht[o];return a?(ot=a.nextPos,a.result):(t=ot,n=cn(),e.substr(ot,10)===C?(i=C,ot+=10):(i=r,0===ut&&Et(fe)),i!==r?(s=cn(),t=tt(n,i,s)):(ot=t,t=r),ht[o]={nextPos:ot,result:t},t)}(),i!==r&&(s=Wt())!==r?(o=function(){var t,n,i,s=74*ot+26,o=ht[s];return o?(ot=o.nextPos,o.result):(t=ot,58===e.charCodeAt(ot)?(n=":",ot++):(n=r,0===ut&&Et(ne)),n!==r?(i=cn(),t=et(n,i)):(ot=t,t=r),ht[s]={nextPos:ot,result:t},t)}(),o!==r&&(a=jt())!==r?n=dn("extension",{extension:i,name:s,colon:o,behavior:a}):(ot=n,n=r)):(ot=n,n=r))))))}n!==r?(I.test(e.charAt(ot))?(i=e.charAt(ot),ot++):(i=r,0===ut&&Et(ye)),i===r&&(i=null),b=n,w=i,t={...b,wsEnd:w}):(ot=t,t=r)}return ut--,t===r&&(n=r,0===ut&&Et(xe)),ht[x]={nextPos:ot,result:t},t}function jt(){var t,n,i,s=74*ot+52,o=ht[s];if(o)return ot=o.nextPos,o.result;if(ut++,t=ot,n=[],F.test(e.charAt(ot))?(i=e.charAt(ot),ot++):(i=r,0===ut&&Et(Ie)),i!==r)for(;i!==r;)n.push(i),F.test(e.charAt(ot))?(i=e.charAt(ot),ot++):(i=r,0===ut&&Et(Ie));else n=r;return t=n!==r?e.substring(t,ot):n,ut--,t===r&&(n=r,0===ut&&Et(Le)),ht[s]={nextPos:ot,result:t},t}function Yt(){var t,n,i,s,o,a,l=74*ot+53,c=ht[l];if(c)return ot=c.nextPos,c.result;if(ut++,t=ot,n=ot,i=ot,ut++,s=ot,(o=hn())===r&&(o=null),35===e.charCodeAt(ot)?(a="#",ot++):(a=r,0===ut&&Et(Ne)),a!==r?s=o=[o,a]:(ot=s,s=r),ut--,s===r?i=void 0:(ot=i,i=r),i!==r){if(s=[],F.test(e.charAt(ot))?(o=e.charAt(ot),ot++):(o=r,0===ut&&Et(Ie)),o!==r)for(;o!==r;)s.push(o),F.test(e.charAt(ot))?(o=e.charAt(ot),ot++):(o=r,0===ut&&Et(Ie));else s=r;s!==r?(I.test(e.charAt(ot))?(o=e.charAt(ot),ot++):(o=r,0===ut&&Et(ye)),o===r&&(o=null),n=i=[i,s,o]):(ot=n,n=r)}else ot=n,n=r;return n===r&&(I.test(e.charAt(ot))?(n=e.charAt(ot),ot++):(n=r,0===ut&&Et(ye))),t=n!==r?e.substring(t,ot):n,ut--,t===r&&(n=r,0===ut&&Et(Fe)),ht[l]={nextPos:ot,result:t},t}function qt(){var e,t,n,i,s=74*ot+56,o=ht[s];return o?(ot=o.nextPos,o.result):(ut++,(e=function(){var e,t,n,i=74*ot+2,s=ht[i];return s?(ot=s.nextPos,s.result):(e=ot,(t=Vt())!==r?(n=cn(),e=dn("int_constant",{token:t,wsEnd:n})):(ot=e,e=r),ht[i]={nextPos:ot,result:e},e)}())===r&&(e=ot,(t=xt())!==r&&(n=ln())!==r&&(i=yt())!==r?e=dn("group",{lp:t,expression:n,rp:i}):(ot=e,e=r),e===r&&(e=Wt())),ut--,e===r&&(t=r,0===ut&&Et(Oe)),ht[s]={nextPos:ot,result:e},e)}function Zt(){var t,n,i,s,o,a=74*ot+57,l=ht[a];return l?(ot=l.nextPos,l.result):(ut++,t=ot,n=function(){var t,n,i,s,o=74*ot+33,a=ht[o];return a?(ot=a.nextPos,a.result):(t=ot,n=cn(),e.substr(ot,7)===m?(i=m,ot+=7):(i=r,0===ut&&Et(le)),i!==r?(s=cn(),t=tt(n,i,s)):(ot=t,t=r),ht[o]={nextPos:ot,result:t},t)}(),n!==r&&(i=xt())!==r&&(s=Wt())!==r&&(o=yt())!==r?t=dn("unary_defined",{operator:n,lp:i,identifier:s,rp:o}):(ot=t,t=r),t===r&&(t=ot,(n=Ft())===r&&(n=It())===r&&(n=function(){var t,n,i,s=74*ot+14,o=ht[s];return o?(ot=o.nextPos,o.result):(t=ot,33===e.charCodeAt(ot)?(n="!",ot++):(n=r,0===ut&&Et(H)),n!==r?(i=cn(),t=et(n,i)):(ot=t,t=r),ht[s]={nextPos:ot,result:t},t)}(),n===r&&(n=function(){var t,n,i,s=74*ot+16,o=ht[s];return o?(ot=o.nextPos,o.result):(t=ot,126===e.charCodeAt(ot)?(n="~",ot++):(n=r,0===ut&&Et(z)),n!==r?(i=cn(),t=et(n,i)):(ot=t,t=r),ht[s]={nextPos:ot,result:t},t)}())),n!==r&&(i=Zt())!==r?t=dn("unary",{operator:n,expression:i}):(ot=t,t=r),t===r&&(t=qt())),ut--,t===r&&(n=r,0===ut&&Et(Be)),ht[a]={nextPos:ot,result:t},t)}function Qt(){var e,t,n,i,s,o,a=74*ot+58,l=ht[a];if(l)return ot=l.nextPos,l.result;if(ut++,e=ot,(t=Zt())!==r){for(n=[],i=ot,(s=Nt())===r&&(s=Mt())===r&&(s=Ot()),s!==r&&(o=Zt())!==r?i=s=[s,o]:(ot=i,i=r);i!==r;)n.push(i),i=ot,(s=Nt())===r&&(s=Mt())===r&&(s=Ot()),s!==r&&(o=Zt())!==r?i=s=[s,o]:(ot=i,i=r);e=rt(t,n)}else ot=e,e=r;return ut--,e===r&&(t=r,0===ut&&Et($e)),ht[a]={nextPos:ot,result:e},e}function Jt(){var e,t,n,i,s,o,a=74*ot+59,l=ht[a];if(l)return ot=l.nextPos,l.result;if(ut++,e=ot,(t=Qt())!==r){for(n=[],i=ot,(s=Ft())===r&&(s=It()),s!==r&&(o=Qt())!==r?i=s=[s,o]:(ot=i,i=r);i!==r;)n.push(i),i=ot,(s=Ft())===r&&(s=It()),s!==r&&(o=Qt())!==r?i=s=[s,o]:(ot=i,i=r);e=rt(t,n)}else ot=e,e=r;return ut--,e===r&&(t=r,0===ut&&Et(Pe)),ht[a]={nextPos:ot,result:e},e}function en(){var e,t,n,i,s,o,a=74*ot+60,l=ht[a];if(l)return ot=l.nextPos,l.result;if(ut++,e=ot,(t=Jt())!==r){for(n=[],i=ot,(s=Ct())===r&&(s=_t()),s!==r&&(o=Jt())!==r?i=s=[s,o]:(ot=i,i=r);i!==r;)n.push(i),i=ot,(s=Ct())===r&&(s=_t()),s!==r&&(o=Jt())!==r?i=s=[s,o]:(ot=i,i=r);e=rt(t,n)}else ot=e,e=r;return ut--,e===r&&(t=r,0===ut&&Et(ke)),ht[a]={nextPos:ot,result:e},e}function tn(){var e,t,n,i,s,o,a=74*ot+61,l=ht[a];if(l)return ot=l.nextPos,l.result;if(ut++,e=ot,(t=en())!==r){for(n=[],i=ot,(s=At())===r&&(s=Rt())===r&&(s=Bt())===r&&(s=$t()),s!==r&&(o=en())!==r?i=s=[s,o]:(ot=i,i=r);i!==r;)n.push(i),i=ot,(s=At())===r&&(s=Rt())===r&&(s=Bt())===r&&(s=$t()),s!==r&&(o=en())!==r?i=s=[s,o]:(ot=i,i=r);e=rt(t,n)}else ot=e,e=r;return ut--,e===r&&(t=r,0===ut&&Et(De)),ht[a]={nextPos:ot,result:e},e}function nn(){var e,t,n,i,s,o,a=74*ot+62,l=ht[a];if(l)return ot=l.nextPos,l.result;if(ut++,e=ot,(t=tn())!==r){for(n=[],i=ot,(s=St())===r&&(s=Tt()),s!==r&&(o=tn())!==r?i=s=[s,o]:(ot=i,i=r);i!==r;)n.push(i),i=ot,(s=St())===r&&(s=Tt()),s!==r&&(o=tn())!==r?i=s=[s,o]:(ot=i,i=r);e=rt(t,n)}else ot=e,e=r;return ut--,e===r&&(t=r,0===ut&&Et(Ue)),ht[a]={nextPos:ot,result:e},e}function rn(){var e,t,n,i,s,o,a=74*ot+63,l=ht[a];if(l)return ot=l.nextPos,l.result;if(ut++,e=ot,(t=nn())!==r){for(n=[],i=ot,(s=Dt())!==r&&(o=nn())!==r?i=s=[s,o]:(ot=i,i=r);i!==r;)n.push(i),i=ot,(s=Dt())!==r&&(o=nn())!==r?i=s=[s,o]:(ot=i,i=r);e=rt(t,n)}else ot=e,e=r;return ut--,e===r&&(t=r,0===ut&&Et(Ge)),ht[a]={nextPos:ot,result:e},e}function sn(){var e,t,n,i,s,o,a=74*ot+64,l=ht[a];if(l)return ot=l.nextPos,l.result;if(ut++,e=ot,(t=rn())!==r){for(n=[],i=ot,(s=kt())!==r&&(o=rn())!==r?i=s=[s,o]:(ot=i,i=r);i!==r;)n.push(i),i=ot,(s=kt())!==r&&(o=rn())!==r?i=s=[s,o]:(ot=i,i=r);e=rt(t,n)}else ot=e,e=r;return ut--,e===r&&(t=r,0===ut&&Et(We)),ht[a]={nextPos:ot,result:e},e}function on(){var e,t,n,i,s,o,a=74*ot+65,l=ht[a];if(l)return ot=l.nextPos,l.result;if(ut++,e=ot,(t=sn())!==r){for(n=[],i=ot,(s=Pt())!==r&&(o=sn())!==r?i=s=[s,o]:(ot=i,i=r);i!==r;)n.push(i),i=ot,(s=Pt())!==r&&(o=sn())!==r?i=s=[s,o]:(ot=i,i=r);e=rt(t,n)}else ot=e,e=r;return ut--,e===r&&(t=r,0===ut&&Et(Ve)),ht[a]={nextPos:ot,result:e},e}function an(){var e,t,n,i,s,o,a=74*ot+66,l=ht[a];if(l)return ot=l.nextPos,l.result;if(ut++,e=ot,(t=on())!==r){for(n=[],i=ot,(s=bt())!==r&&(o=on())!==r?i=s=[s,o]:(ot=i,i=r);i!==r;)n.push(i),i=ot,(s=bt())!==r&&(o=on())!==r?i=s=[s,o]:(ot=i,i=r);e=rt(t,n)}else ot=e,e=r;return ut--,e===r&&(t=r,0===ut&&Et(He)),ht[a]={nextPos:ot,result:e},e}function ln(){var e,t=74*ot+68,n=ht[t];return n?(ot=n.nextPos,n.result):(ut++,e=function(){var e,t,n,i,s,o,a=74*ot+67,l=ht[a];if(l)return ot=l.nextPos,l.result;if(ut++,e=ot,(t=an())!==r){for(n=[],i=ot,(s=wt())!==r&&(o=an())!==r?i=s=[s,o]:(ot=i,i=r);i!==r;)n.push(i),i=ot,(s=wt())!==r&&(o=an())!==r?i=s=[s,o]:(ot=i,i=r);e=rt(t,n)}else ot=e,e=r;return ut--,e===r&&(t=r,0===ut&&Et(Xe)),ht[a]={nextPos:ot,result:e},e}(),ut--,e===r&&0===ut&&Et(ze),ht[t]={nextPos:ot,result:e},e)}function cn(){var e,t,n,i,s,o,a=74*ot+69,l=ht[a];if(l)return ot=l.nextPos,l.result;for(ut++,e=ot,(t=hn())===r&&(t=null),n=[],i=ot,(s=un())!==r?((o=hn())===r&&(o=null),i=s=[s,o]):(ot=i,i=r);i!==r;)n.push(i),i=ot,(s=un())!==r?((o=hn())===r&&(o=null),i=s=[s,o]):(ot=i,i=r);return e=pn(t,n),ut--,t=r,0===ut&&Et(Ke),ht[a]={nextPos:ot,result:e},e}function un(){var t,n,i,s,o,a,l=74*ot+70,c=ht[l];if(c)return ot=c.nextPos,c.result;if(t=function(){var t,n,i,s,o,a=74*ot+71,l=ht[a];if(l)return ot=l.nextPos,l.result;if(t=ot,n=ot,"//"===e.substr(ot,2)?(i="//",ot+=2):(i=r,0===ut&&Et(je)),i!==r){for(s=[],F.test(e.charAt(ot))?(o=e.charAt(ot),ot++):(o=r,0===ut&&Et(Ie));o!==r;)s.push(o),F.test(e.charAt(ot))?(o=e.charAt(ot),ot++):(o=r,0===ut&&Et(Ie));n=i=[i,s]}else ot=n,n=r;return t=n!==r?e.substring(t,ot):n,ht[a]={nextPos:ot,result:t},t}(),t===r)if(t=ot,n=function(){var t,n,i,s,o,a,l,c=74*ot+72,u=ht[c];if(u)return ot=u.nextPos,u.result;if(t=ot,n=ot,"/*"===e.substr(ot,2)?(i="/*",ot+=2):(i=r,0===ut&&Et(Ye)),i!==r){for(s=[],o=ot,a=ot,ut++,e.substr(ot,2)===A?(l=A,ot+=2):(l=r,0===ut&&Et(qe)),ut--,l===r?a=void 0:(ot=a,a=r),a!==r?(e.length>ot?(l=e.charAt(ot),ot++):(l=r,0===ut&&Et(Ze)),l!==r?o=l:(ot=o,o=r)):(ot=o,o=r);o!==r;)s.push(o),o=ot,a=ot,ut++,e.substr(ot,2)===A?(l=A,ot+=2):(l=r,0===ut&&Et(qe)),ut--,l===r?a=void 0:(ot=a,a=r),a!==r?(e.length>ot?(l=e.charAt(ot),ot++):(l=r,0===ut&&Et(Ze)),l!==r?o=l:(ot=o,o=r)):(ot=o,o=r);e.substr(ot,2)===A?(o=A,ot+=2):(o=r,0===ut&&Et(qe)),o!==r?n=i=[i,s,o]:(ot=n,n=r)}else ot=n,n=r;return t=n!==r?e.substring(t,ot):n,ht[c]={nextPos:ot,result:t},t}(),n!==r){for(i=[],s=ot,(o=hn())!==r&&(a=un())!==r?s=st(0,o,a):(ot=s,s=r);s!==r;)i.push(s),s=ot,(o=hn())!==r&&(a=un())!==r?s=st(0,o,a):(ot=s,s=r);t=mn(n,i.flat())}else ot=t,t=r;return ht[l]={nextPos:ot,result:t},t}function hn(){var t,n,i,s=74*ot+73,o=ht[s];if(o)return ot=o.nextPos,o.result;if(ut++,t=ot,n=[],N.test(e.charAt(ot))?(i=e.charAt(ot),ot++):(i=r,0===ut&&Et(Je)),i!==r)for(;i!==r;)n.push(i),N.test(e.charAt(ot))?(i=e.charAt(ot),ot++):(i=r,0===ut&&Et(Je));else n=r;return t=n!==r?e.substring(t,ot):n,ut--,t===r&&(n=r,0===ut&&Et(Qe)),ht[s]={nextPos:ot,result:t},t}const dn=(e,t)=>({type:e,...t}),mn=(...e)=>e.flat().filter((e=>null!=e&&""!==e&&0!==e.length)),pn=(...e)=>{return(t=mn(e)).length>1?t:t[0];var t},gn=(...e)=>e.flat().reduce(((e,[t,n])=>({type:"binary",operator:t,left:e,right:n})));if((i=a())!==r&&ot===e.length)return i;throw i!==r&&ots.length)throw new Error("'".concat(t,"': Too many arguments for macro"));if(d.length>":return t(n)>>t(i);case"<":return t(n)":return t(n)>t(i);case"<=":return t(n)<=t(i);case">=":return t(n)>=t(i);case"==":return t(n)==t(i);case"!=":return t(n)!=t(i);case"&":return t(n)&t(i);case"^":return t(n)^t(i);case"|":return t(n)|t(i);case"&&":return t(n)&&t(i);case"||":return t(n)||t(i);default:throw new Error("Preprocessing error: Unknown binary operator ".concat(r))}},unary:function(e,t){switch(e.operator.literal){case"+":return t(e.expression);case"-":return-1*t(e.expression);case"!":return!t(e.expression);case"~":return~t(e.expression);default:throw new Error("Preprocessing error: Unknown unary operator ".concat(e.operator.literal))}}},i=function(e){var t=n[e.type];if(!t)throw new Error("No evaluate() evaluator for ".concat(e.type));return t(e,i)},i(e);var n,i},d=s.visit;t.preprocessAst=function(e,t){void 0===t&&(t={});var n,s=Object.entries(t.defines||{}).reduce((function(e,t){var n,r=t[0],s=t[1];return i(i({},e),((n={})[r]={body:s},n))}),{}),o=(void 0===(n=t.preserve)&&(n={}),function(e){var t=null==n?void 0:n[e.node.type];return"function"==typeof t?t(e):t});return d(e,{conditional:{enter:function(e){var t=e,n=t.node;o(t)||(u.apply(void 0,r([s],r([n.ifPart.expression],n.elseIfParts.map((function(e){return e.expression})),!0).filter(c),!1)),function(e,t){return"if"===t.type?h(t.expression,e):"ifdef"===t.type?t.identifier.identifier in e:"ifndef"===t.type?!(t.identifier.identifier in e):void 0}(s,n.ifPart)?t.replaceWith(n.ifPart.body):n.elseIfParts.reduce((function(e,n){return e||h(n.expression,s)&&(t.replaceWith(n.body),!0)}),!1)||(n.elsePart?t.replaceWith(n.elsePart.body):t.remove()))}},text:{enter:function(e){var t=e;t.node.text=l(t.node.text,s)}},define_arguments:{enter:function(e){var t=e,n=t.node,i=n.identifier.identifier,r=n.body,a=n.args;s[i]={args:a,body:r},!o(t)&&t.remove()}},define:{enter:function(e){var t=e,n=t.node,i=n.identifier.identifier,r=n.body;s[i]={body:r},!o(t)&&t.remove()}},undef:{enter:function(e){var t=e;delete s[t.node.identifier.identifier],!o(t)&&t.remove()}},error:{enter:function(e){var n=e;if(t.stopOnError)throw new Error(n.node.message);!o(n)&&n.remove()}},pragma:{enter:function(e){var t=e;!o(t)&&t.remove()}},version:{enter:function(e){var t=e;!o(t)&&t.remove()}},extension:{enter:function(e){var t=e;!o(t)&&t.remove()}},line:{enter:function(e){var t=e;!o(t)&&t.remove()}}}),e}},866:(e,t,n)=>{"use strict";n.d(t,{Z:()=>a});var i=n(81),r=n.n(i),s=n(645),o=n.n(s)()(r());o.push([e.id,"@import url(https://fonts.googleapis.com/css?family=Montserrat:300,400);"]),o.push([e.id,'.captureMenuComponent{position:absolute;padding:7px;z-index:99999;top:10px;left:50%;margin-left:-209px;height:40px;width:400px;border:2px solid #222;background-color:#2c2c2c;visibility:hidden;display:none;color:#f9f9f9;font-family:Consolas,monaco,monospace;font-size:14px;font-weight:500}.captureMenuComponent.active{visibility:visible;display:block}.captureMenuComponent,.captureMenuComponent:after,.captureMenuComponent:before{box-sizing:content-box}.captureMenuLogComponent{position:absolute;padding:7px;z-index:80000;top:66px;left:50%;margin-left:-209px;height:40px;width:400px;border:2px solid #222;background-color:#2c2c2c;visibility:hidden;display:none;color:#f9f9f9;font-family:Consolas,monaco,monospace;font-size:14px;font-weight:500}.captureMenuLogComponent.active{visibility:visible;display:block}.captureMenuLogComponent,.captureMenuLogComponent:after,.captureMenuLogComponent:before{box-sizing:content-box}.captureMenuLogComponent span.error{color:red}.canvasListComponent{float:left;width:50%;height:100%}.canvasListComponent [commandName=onCanvasSelection]{vertical-align:center;line-height:40px;white-space:nowrap;text-overflow:ellipsis;width:190px;display:inline-block;overflow:hidden;margin:0px 5px}.canvasListComponent [commandName=onCanvasSelection]:hover{color:#c9c9c9;cursor:pointer;transition:color .3s;-webkit-transition:color .3s;-moz-transition:color .3s}.canvasListComponent ul{margin:0px;padding:7px;list-style:none;position:absolute;top:54px;left:-2px;width:400px;border:2px solid #222;background-color:#2c2c2c}.canvasListComponent ul li{margin:5px}.canvasListComponent ul li:hover{color:#c9c9c9;cursor:pointer;transition:color .3s;-webkit-transition:color .3s;-moz-transition:color .3s}.captureMenuActionsComponent{float:left;width:30%;height:100%;margin-top:7.5px}.captureMenuActionsComponent div{float:left}.captureMenuActionsComponent [commandName=onCaptureRequested]{border-radius:50%;background:#2c2c2c;border:2px solid red;width:21px;height:21px}.captureMenuActionsComponent [commandName=onCaptureRequested]:hover{background:red;cursor:pointer;transition:background .3s;-webkit-transition:background .3s;-moz-transition:background .3s}.captureMenuActionsComponent [commandName=onPlayRequested],.captureMenuActionsComponent [commandName=onPlayNextFrameRequested]{width:21px;height:21px;border:2px solid #f9f9f9;border-radius:50%;margin-left:9px}.captureMenuActionsComponent [commandName=onPlayRequested]:before,.captureMenuActionsComponent [commandName=onPlayNextFrameRequested]:before{content:"";position:absolute;display:inline-block;margin-top:6px;margin-left:4px;width:7px;height:7px;border-top:2px solid #f9f9f9;border-right:2px solid #f9f9f9;background-color:#f9f9f9;-moz-transform:rotate(45deg);-webkit-transform:rotate(45deg);transform:rotate(45deg);z-index:-20}.captureMenuActionsComponent [commandName=onPlayRequested]:after,.captureMenuActionsComponent [commandName=onPlayNextFrameRequested]:after{content:"";position:absolute;display:inline-block;width:8px;height:20px;background-color:#2c2c2c;z-index:-10}.captureMenuActionsComponent [commandName=onPlayRequested]:hover,.captureMenuActionsComponent [commandName=onPlayNextFrameRequested]:hover{cursor:pointer;border:2px solid #c9c9c9;transition:border .3s;-webkit-transition:border .3s;-moz-transition:border .3s}.captureMenuActionsComponent [commandName=onPauseRequested]{width:21px;height:21px;border:2px solid #f9f9f9;border-radius:50%;margin-left:9px}.captureMenuActionsComponent [commandName=onPauseRequested]:before{content:"";position:absolute;display:inline-block;width:2px;height:13px;margin-left:12px;margin-top:4px;background-color:#f9f9f9}.captureMenuActionsComponent [commandName=onPauseRequested]:after{content:"";position:absolute;display:inline-block;width:2px;height:13px;margin-left:7px;margin-top:4px;background-color:#f9f9f9}.captureMenuActionsComponent [commandName=onPauseRequested]:hover{cursor:pointer;border:2px solid #c9c9c9;transition:border .3s;-webkit-transition:border .3s;-moz-transition:border .3s}.captureMenuActionsComponent [commandName=onPlayNextFrameRequested]:before{background-color:#2c2c2c}.fpsCounterComponent{float:left;width:20%;vertical-align:center;line-height:40px;white-space:nowrap}',""]);const a=o},625:(e,t,n)=>{"use strict";n.d(t,{Z:()=>a});var i=n(81),r=n.n(i),s=n(645),o=n.n(s)()(r());o.push([e.id,"@import url(https://fonts.googleapis.com/css?family=Montserrat:300,400);"]),o.push([e.id,'.resultViewComponent{position:absolute;z-index:99999;border:1px solid #000;top:0;left:0;bottom:0;right:0;background-color:#222;opacity:1;visibility:hidden;display:none;color:#f9f9f9;font-family:Consolas,monaco,monospace;font-size:14px;font-weight:500}.resultViewComponent.active{visibility:visible;display:block}.resultViewComponent,.resultViewComponent:after,.resultViewComponent:before{box-sizing:content-box}.resultViewMenuComponent{font-family:"Montserrat",sans-serif;font-size:13px;font-weight:300;line-height:40px;flex:1 100%;display:flex;flex-flow:row wrap;height:42px;outline:0 none;border-bottom:2px solid #222;box-sizing:border-box;list-style:none;margin:0;background:#2c2c2c;display:-webkit-box;display:-moz-box;display:-ms-flexbox;display:-webkit-flex;display:flex;-webkit-flex-flow:row wrap;flex-flow:row wrap;justify-content:flex-end}.resultViewMenuComponent .resultViewMenuOpen{display:none;visibility:hidden}.resultViewMenuComponent a{outline:0 none;text-decoration:none;display:block;padding:0 20px 0 20px;color:#ccc;background:#2c2c2c;box-sizing:border-box;height:100%}.resultViewMenuComponent a.active{background:#222;color:#fff;font-weight:400;border-bottom:2px solid #f0640d}.resultViewMenuComponent a:hover{background:#222;color:#c9c9c9;cursor:pointer;transition:color .3s;-webkit-transition:color .3s;-moz-transition:color .3s}.resultViewMenuComponent a:hover.active{color:#f0640d;transition:color 0;-webkit-transition:color 0;-moz-transition:color 0}.resultViewMenuComponent a.clearSearch{padding:0px;margin-left:-30px;margin-right:20px;z-index:9000;color:#f9f9f9}.resultViewMenuComponent a.clearSearch:hover{background:#2c2c2c;color:#f0640d}@media all and (max-width: 1024px){.resultViewMenuComponent{padding:0px;position:absolute;overflow-y:visible;top:0px;left:0px;right:0px;bottom:0px;z-index:999999;display:block}.resultViewMenuComponent .resultViewMenuOpen{display:block;visibility:visible}.resultViewMenuComponent li:not(.resultViewMenuSmall){display:none;visibility:hidden}.resultViewMenuComponent li{background:#2c2c2c}.resultViewMenuComponent li.searchContainer{background:#464646}.resultViewMenuComponent a.active{background:#2c2c2c}}.resultViewMenuComponent input{border:0;font-family:"Montserrat",sans-serif;font-weight:300;padding:0 20px 0 20px;background:#464646;color:#f9f9f9;height:40px;position:relative;top:-1px;box-sizing:border-box}.resultViewMenuComponent input:focus{border:0;outline:0 none}.resultViewMenuComponent .clearSearch{position:relative;background:rgba(0,0,0,0);display:inline;padding:0px;margin-left:-30px;z-index:9000;color:#f0640d}.resultViewMenuComponent .clearSearch:hover{background:rgba(0,0,0,0) !important}.resultViewMenuComponent ::-webkit-input-placeholder{color:#ccc}.resultViewMenuComponent :-moz-placeholder{color:#ccc}.resultViewMenuComponent ::-moz-placeholder{color:#ccc}.resultViewMenuComponent :-ms-input-placeholder{color:#ccc}.resultViewContentComponent{position:absolute;top:40px;left:0;bottom:0;right:0}.informationColumnLeftComponent{position:absolute;top:0;left:0;bottom:0;right:50%;overflow:auto;overflow-x:hidden;overflow-y:visible}.informationColumnRightComponent{position:absolute;top:0;left:50%;bottom:0;right:0;overflow:auto;overflow-x:hidden;overflow-y:visible}.captureListComponent{position:absolute;top:40px;left:0;bottom:0;right:0;background:#222;z-index:9000;display:none;visibility:hidden;overflow-y:visible;overflow-x:hidden}.captureListComponent.active{display:block;visibility:visible}.captureListComponent .openCaptureFile{border:1px dashed #f9f9f9;display:block;margin:5px;padding:5px;text-align:center;font-style:italic}.captureListComponent .openCaptureFile span{line-height:100%;vertical-align:middle}.captureListComponent ul{margin:0px;padding:0px;list-style:none;display:-webkit-box;display:-moz-box;display:-ms-flexbox;display:-webkit-flex;display:flex;-webkit-flex-flow:row wrap;flex-flow:row wrap;justify-content:flex-start}.captureListComponent ul li{margin:5px;border:1px solid #606060}.captureListComponent ul li img{width:295px;background-image:-webkit-gradient(linear, 0 100%, 100% 0, color-stop(0.25, #c9c9c9), color-stop(0.25, transparent)),-webkit-gradient(linear, 0 0, 100% 100%, color-stop(0.25, #c9c9c9), color-stop(0.25, transparent)),-webkit-gradient(linear, 0 100%, 100% 0, color-stop(0.75, transparent), color-stop(0.75, #c9c9c9)),-webkit-gradient(linear, 0 0, 100% 100%, color-stop(0.75, transparent), color-stop(0.75, #c9c9c9));background-image:-moz-linear-gradient(45deg, #d9d9d9 25%, transparent 25%),-moz-linear-gradient(-45deg, #d9d9d9 25%, transparent 25%),-moz-linear-gradient(45deg, transparent 75%, #d9d9d9 75%),-moz-linear-gradient(-45deg, transparent 75%, #d9d9d9 75%);-webkit-background-size:50px 51px;-moz-background-size:50px 50px;background-size:50px 50px;background-position:0 0,25px 0,25px -25px,0px 25px;display:block}.captureListComponent ul li span{display:block;text-align:center;border:5px solid #222}.captureListComponent ul li span .captureListItemSave{color:#f9f9f9;font-size:16px;margin-left:10px;position:relative;padding:3px 8px 3px 32px}.captureListComponent ul li span .captureListItemSave:before,.captureListComponent ul li span .captureListItemSave:after{box-sizing:border-box;content:"";position:absolute}.captureListComponent ul li span .captureListItemSave:before{background:#d9d9d9;border-color:#f9f9f9;border-style:solid;border-width:7px 2px 1px;border-radius:1px;height:16px;left:8px;top:5px;width:16px}.captureListComponent ul li span .captureListItemSave:after{background:#f9f9f9;border-color:#d9d9d9;border-style:solid;border-width:1px 1px 1px 4px;height:5px;left:13px;top:5px;width:7px}.captureListComponent ul li:hover{cursor:pointer}.captureListComponent ul li.active span{background:#f0640d;border:5px solid #f0640d}.captureListComponent ul li.active span .captureListItemSave:before{background:#f0640d}.captureListComponent ul li.active span .captureListItemSave:after{border-color:#f0640d}.visualStateListComponent{position:absolute;top:0;left:0;bottom:0;padding:5px;right:80%;overflow-y:visible;overflow-x:hidden}.visualStateListComponent ul{margin:0px;padding:0px;list-style:none}.visualStateListComponent ul li{margin:20px 15px 0px 15px;border:1px solid #606060}.visualStateListComponent ul li img{display:block;padding:0px;box-sizing:border-box;max-height:600px;width:100%;margin:0 auto;background-image:-webkit-gradient(linear, 0 100%, 100% 0, color-stop(0.25, #c9c9c9), color-stop(0.25, transparent)),-webkit-gradient(linear, 0 0, 100% 100%, color-stop(0.25, #c9c9c9), color-stop(0.25, transparent)),-webkit-gradient(linear, 0 100%, 100% 0, color-stop(0.75, transparent), color-stop(0.75, #c9c9c9)),-webkit-gradient(linear, 0 0, 100% 100%, color-stop(0.75, transparent), color-stop(0.75, #c9c9c9));background-image:-moz-linear-gradient(45deg, #d9d9d9 25%, transparent 25%),-moz-linear-gradient(-45deg, #d9d9d9 25%, transparent 25%),-moz-linear-gradient(45deg, transparent 75%, #d9d9d9 75%),-moz-linear-gradient(-45deg, transparent 75%, #d9d9d9 75%);-webkit-background-size:50px 51px;-moz-background-size:50px 50px;background-size:50px 50px;background-position:0 0,25px 0,25px -25px,0px 25px}.visualStateListComponent ul li:hover{cursor:pointer}.visualStateListComponent ul li span{border:5px solid #222;background:#222;box-sizing:border-box;display:inline-block;width:100%;margin:0px;padding:5px;word-wrap:break-word}.visualStateListComponent ul li.active{border:2px solid #f0640d}.commandListComponent{position:absolute;top:0;left:20%;right:40%;bottom:0;color:#d3d3d3}.commandListComponent ul{margin:0px;padding:0px;list-style:none;overflow-y:visible;overflow-x:hidden;height:100%}.commandListComponent ul li{padding:8px}.commandListComponent ul li span{word-wrap:break-word;line-height:22px}.commandListComponent ul li:hover{color:#f9f9f9;cursor:pointer;transition:color .3s;-webkit-transition:color .3s;-moz-transition:color .3s}.commandListComponent ul li:nth-child(even){background:#2c2c2c}.commandListComponent ul li:nth-child(odd){background:#222}.commandListComponent ul li .important{font-weight:800}.commandListComponent ul li .important.deprecated{color:red}.commandListComponent ul li .important.unused{color:#ff0}.commandListComponent ul li .important.disabled{color:gray}.commandListComponent ul li .important.redundant{color:orange}.commandListComponent ul li .important.valid{color:#adff2f}.commandListComponent ul li .marker{font-size:16px;font-weight:900;color:#adff2f}.commandListComponent ul li.active{background:#f37628;color:#222}.commandListComponent ul li.drawCall{background:#5db0d7;color:#222}.commandListComponent ul li a{margin-left:5px;margin-right:5px;color:#5db0d7;background:#222;padding:5px;font-weight:900;display:inline-block}.commandDetailComponent{position:absolute;top:0;left:60%;right:0;bottom:0;overflow-y:visible;overflow-x:hidden}.jsonGroupComponent{display:block;margin:10px;padding:10px;padding-bottom:5px}.jsonGroupComponent .jsonGroupComponentTitle{display:block;font-size:16px;color:#5db0d7;border-bottom:1px solid #5db0d7;padding-bottom:5px;margin-bottom:5px;text-transform:capitalize}.jsonGroupComponent ul{margin:0px;padding:0px;list-style:none}.jsonGroupComponent ul li:nth-child(even){background:#222}.jsonGroupComponent ul li:nth-child(odd){background:#222}.jsonItemComponentKey{color:#f0640d}.jsonItemComponentValue{white-space:pre-wrap}.jsonItemImageHolder{width:50%;margin:auto}.jsonItemImageHolder .jsonItemImage{margin:5px;display:block;border:1px solid #606060;width:100%}.jsonItemImageHolder .jsonItemImage img{width:100%;display:block;margin:auto;max-width:256px;background-image:-webkit-gradient(linear, 0 100%, 100% 0, color-stop(0.25, #c9c9c9), color-stop(0.25, transparent)),-webkit-gradient(linear, 0 0, 100% 100%, color-stop(0.25, #c9c9c9), color-stop(0.25, transparent)),-webkit-gradient(linear, 0 100%, 100% 0, color-stop(0.75, transparent), color-stop(0.75, #c9c9c9)),-webkit-gradient(linear, 0 0, 100% 100%, color-stop(0.75, transparent), color-stop(0.75, #c9c9c9));background-image:-moz-linear-gradient(45deg, #d9d9d9 25%, transparent 25%),-moz-linear-gradient(-45deg, #d9d9d9 25%, transparent 25%),-moz-linear-gradient(45deg, transparent 75%, #d9d9d9 75%),-moz-linear-gradient(-45deg, transparent 75%, #d9d9d9 75%);-webkit-background-size:50px 51px;-moz-background-size:50px 50px;background-size:50px 50px;background-position:0 0,25px 0,25px -25px,0px 25px}.jsonItemImageHolder .jsonItemImage span{margin:0px;padding:5px;word-wrap:break-word;display:inline-block;width:100%;box-sizing:border-box}[commandName=onOpenSourceClicked]:hover{color:#f9f9f9;cursor:pointer;transition:color .3s;-webkit-transition:color .3s;-moz-transition:color .3s}.jsonVisualStateItemComponent{text-align:center;padding:10px}.jsonVisualStateItemComponent img{background-image:-webkit-gradient(linear, 0 100%, 100% 0, color-stop(0.25, #c9c9c9), color-stop(0.25, transparent)),-webkit-gradient(linear, 0 0, 100% 100%, color-stop(0.25, #c9c9c9), color-stop(0.25, transparent)),-webkit-gradient(linear, 0 100%, 100% 0, color-stop(0.75, transparent), color-stop(0.75, #c9c9c9)),-webkit-gradient(linear, 0 0, 100% 100%, color-stop(0.75, transparent), color-stop(0.75, #c9c9c9));background-image:-moz-linear-gradient(45deg, #d9d9d9 25%, transparent 25%),-moz-linear-gradient(-45deg, #d9d9d9 25%, transparent 25%),-moz-linear-gradient(45deg, transparent 75%, #d9d9d9 75%),-moz-linear-gradient(-45deg, transparent 75%, #d9d9d9 75%);-webkit-background-size:50px 51px;-moz-background-size:50px 50px;background-size:50px 50px;background-position:0 0,25px 0,25px -25px,0px 25px;border:1px solid #606060;margin:5px;width:100%;max-width:512px;max-height:800px}.jsonVisualStateItemComponent span{display:block}.jsonContentComponent{position:absolute;top:0;left:0;right:0;bottom:0;padding:10px;overflow-y:visible;overflow-x:hidden}.jsonItemComponentValue{word-break:break-all;white-space:normal}.jsonSourceItemComponentOpen{font-weight:bold;color:#5db0d7;text-decoration:underline}.sourceCodeMenuComponentContainer{position:absolute;left:0;top:0;bottom:48px;right:40%}.sourceCodeMenuComponentFooter{position:absolute;left:0;right:40%;bottom:0;padding:0 15px}.sourceCodeMenuComponent{font-family:"Montserrat",sans-serif;font-size:13px;font-weight:300;line-height:40px;flex:1 100%;display:flex;flex-flow:row wrap;height:42px;outline:0 none;border-bottom:2px solid #222;box-sizing:border-box;list-style:none;margin:0;background:#2c2c2c;display:-webkit-box;display:-moz-box;display:-ms-flexbox;display:-webkit-flex;display:flex;-webkit-flex-flow:row wrap;flex-flow:row wrap;justify-content:flex-end}.sourceCodeMenuComponent .resultViewMenuOpen{display:none;visibility:hidden}.sourceCodeMenuComponent a{outline:0 none;text-decoration:none;display:block;padding:0 20px 0 20px;color:#ccc;background:#2c2c2c;box-sizing:border-box;height:100%}.sourceCodeMenuComponent a.active{background:#222;color:#fff;font-weight:400;border-bottom:2px solid #f0640d}.sourceCodeMenuComponent a:hover{background:#222;color:#c9c9c9;cursor:pointer;transition:color .3s;-webkit-transition:color .3s;-moz-transition:color .3s}.sourceCodeMenuComponent a:hover.active{color:#f0640d;transition:color 0;-webkit-transition:color 0;-moz-transition:color 0}.sourceCodeMenuComponent a.clearSearch{display:inline-block;padding:0px;margin-left:-30px;margin-right:20px;z-index:9000;color:#f9f9f9}.sourceCodeMenuComponent a.clearSearch:hover{background:#2c2c2c;color:#f0640d}.sourceCodeMenuComponent input{border:0;font-family:"Montserrat",sans-serif;font-weight:300;padding:0 20px 0 20px;background:#464646;color:#f9f9f9;height:100%;position:relative;top:-1px;box-sizing:border-box}.sourceCodeMenuComponent input:focus{border:0;outline:0 none}.sourceCodeMenuComponent .clearSearch{position:relative;background:rgba(0,0,0,0);display:inline;padding:0px;margin-left:-30px;z-index:9000;color:#f0640d}.sourceCodeMenuComponent .clearSearch:hover{background:rgba(0,0,0,0) !important}.sourceCodeMenuComponent ::-webkit-input-placeholder{color:#ccc}.sourceCodeMenuComponent :-moz-placeholder{color:#ccc}.sourceCodeMenuComponent ::-moz-placeholder{color:#ccc}.sourceCodeMenuComponent :-ms-input-placeholder{color:#ccc}.sourceCodeComponent{position:absolute;top:42px;left:0;bottom:48px;right:40%;background:#222;z-index:9000;overflow-x:visible;overflow:auto}.sourceCodeComponent .sourceCodeComponentTitle{font-size:16px;font-weight:800;line-height:50px;color:#f0640d;padding:1em;margin:.5em 0}',""]);const a=o},827:(e,t,n)=>{"use strict";n.d(t,{Z:()=>a});var i=n(81),r=n.n(i),s=n(645),o=n.n(s)()(r());o.push([e.id,".ace-monokai {\r\n color: #f9f9f9;\r\n font-size: 14px;\r\n}\r\n\r\n.ace-monokai .ace_entity.ace_name.ace_tag,\r\n.ace-monokai .ace_keyword,\r\n.ace-monokai .ace_meta.ace_tag,\r\n.ace-monokai .ace_storage {\r\n color: #F0640D\r\n}\r\n\r\n.ace-monokai .ace_constant.ace_character,\r\n.ace-monokai .ace_constant.ace_other {\r\n color: #5db0d7;\r\n}\r\n\r\n.ace-monokai .ace_marker-layer .ace_selection {\r\n background: #a6e22e\r\n}\r\n\r\n.ace-monokai .ace_marker-layer .ace_bracket {\r\n margin: -1px 0 0 -1px;\r\n border: 1px solid #a6e22e;\r\n}\r\n\r\n.ace-monokai .ace_marker-layer .ace_active-line {\r\n background: #2c2c2c\r\n}\r\n.ace-monokai .ace_gutter-active-line {\r\n background-color: #2c2c2c\r\n}\r\n.ace-monokai .ace_marker-layer .ace_selected-word {\r\n border: 1px solid #a6e22e\r\n}\r\n\r\n.ace-monokai .ace_constant.ace_language {\r\n color: #e6db74\r\n}\r\n.ace-monokai .ace_constant.ace_numeric {\r\n color: #ae81ff\r\n}\r\n\r\n.ace-monokai .ace_gutter {\r\n background: #222;\r\n color: #8F908A;\r\n}",""]);const a=o},645:e=>{"use strict";e.exports=function(e){var t=[];return t.toString=function(){return this.map((function(t){var n="",i=void 0!==t[5];return t[4]&&(n+="@supports (".concat(t[4],") {")),t[2]&&(n+="@media ".concat(t[2]," {")),i&&(n+="@layer".concat(t[5].length>0?" ".concat(t[5]):""," {")),n+=e(t),i&&(n+="}"),t[2]&&(n+="}"),t[4]&&(n+="}"),n})).join("")},t.i=function(e,n,i,r,s){"string"==typeof e&&(e=[[null,e,void 0]]);var o={};if(i)for(var a=0;a0?" ".concat(u[5]):""," {").concat(u[1],"}")),u[5]=s),n&&(u[2]?(u[1]="@media ".concat(u[2]," {").concat(u[1],"}"),u[2]=n):u[2]=n),r&&(u[4]?(u[1]="@supports (".concat(u[4],") {").concat(u[1],"}"),u[4]=r):u[4]="".concat(r)),t.push(u))}},t}},81:e=>{"use strict";e.exports=function(e){return e[1]}},819:(e,t,n)=>{e=n.nmd(e),function(){var e=function(){return this}();e||"undefined"==typeof window||(e=window);var t=function(e,n,i){"string"==typeof e?(2==arguments.length&&(i=n),t.modules[e]||(t.payloads[e]=i,t.modules[e]=null)):t.original?t.original.apply(this,arguments):(console.error("dropping module because define wasn't a string."),console.trace())};t.modules={},t.payloads={};var n,i=function(e,t,n){if("string"==typeof t){var i=o(e,t);if(null!=i)return n&&n(),i}else if("[object Array]"===Object.prototype.toString.call(t)){for(var s=[],a=0,l=t.length;a1&&l(i,"")>-1&&(n=RegExp(this.source,r.replace.call(a(this),"g","")),r.replace.call(e.slice(i.index),n,(function(){for(var e=1;ei.index&&this.lastIndex--}return i},o||(RegExp.prototype.test=function(e){var t=r.exec.call(this,e);return t&&this.global&&!t[0].length&&this.lastIndex>t.index&&this.lastIndex--,!!t}))})),ace.define("ace/lib/es5-shim",["require","exports","module"],(function(e,t,n){function i(){}Function.prototype.bind||(Function.prototype.bind=function(e){var t=this;if("function"!=typeof t)throw new TypeError("Function.prototype.bind called on incompatible "+t);var n=d.call(arguments,1),r=function(){if(this instanceof r){var i=t.apply(this,n.concat(d.call(arguments)));return Object(i)===i?i:this}return t.apply(e,n.concat(d.call(arguments)))};return t.prototype&&(i.prototype=t.prototype,r.prototype=new i,i.prototype=null),r});var r,s,o,a,l,c=Function.prototype.call,u=Array.prototype,h=Object.prototype,d=u.slice,m=c.bind(h.toString),p=c.bind(h.hasOwnProperty);if((l=p(h,"__defineGetter__"))&&(r=c.bind(h.__defineGetter__),s=c.bind(h.__defineSetter__),o=c.bind(h.__lookupGetter__),a=c.bind(h.__lookupSetter__)),2!=[1,2].splice(0).length)if(function(){function e(e){var t=new Array(e+2);return t[0]=t[1]=0,t}var t,n=[];if(n.splice.apply(n,e(20)),n.splice.apply(n,e(26)),t=n.length,n.splice(5,0,"XXX"),n.length,t+1==n.length)return!0}()){var g=Array.prototype.splice;Array.prototype.splice=function(e,t){return arguments.length?g.apply(this,[void 0===e?0:e,void 0===t?this.length-e:t].concat(d.call(arguments,2))):[]}}else Array.prototype.splice=function(e,t){var n=this.length;e>0?e>n&&(e=n):null==e?e=0:e<0&&(e=Math.max(n+e,0)),e+ta)for(h=c;h--;)this[l+h]=this[a+h];if(s&&e===u)this.length=u,this.push.apply(this,r);else for(this.length=u+s,h=0;h>>0;if("[object Function]"!=m(e))throw new TypeError;for(;++r>>0,r=Array(i),s=arguments[1];if("[object Function]"!=m(e))throw new TypeError(e+" is not a function");for(var o=0;o>>0,s=[],o=arguments[1];if("[object Function]"!=m(e))throw new TypeError(e+" is not a function");for(var a=0;a>>0,r=arguments[1];if("[object Function]"!=m(e))throw new TypeError(e+" is not a function");for(var s=0;s>>0,r=arguments[1];if("[object Function]"!=m(e))throw new TypeError(e+" is not a function");for(var s=0;s>>0;if("[object Function]"!=m(e))throw new TypeError(e+" is not a function");if(!i&&1==arguments.length)throw new TypeError("reduce of empty array with no initial value");var r,s=0;if(arguments.length>=2)r=arguments[1];else for(;;){if(s in n){r=n[s++];break}if(++s>=i)throw new TypeError("reduce of empty array with no initial value")}for(;s>>0;if("[object Function]"!=m(e))throw new TypeError(e+" is not a function");if(!i&&1==arguments.length)throw new TypeError("reduceRight of empty array with no initial value");var r,s=i-1;if(arguments.length>=2)r=arguments[1];else for(;;){if(s in n){r=n[s--];break}if(--s<0)throw new TypeError("reduceRight of empty array with no initial value")}do{s in this&&(r=e.call(void 0,r,n[s],s,t))}while(s--);return r}),Array.prototype.indexOf&&-1==[0,1].indexOf(1,2)||(Array.prototype.indexOf=function(e){var t=_&&"[object String]"==m(this)?this.split(""):N(this),n=t.length>>>0;if(!n)return-1;var i=0;for(arguments.length>1&&(i=F(arguments[1])),i=i>=0?i:Math.max(0,n+i);i>>0;if(!n)return-1;var i=n-1;for(arguments.length>1&&(i=Math.min(i,F(arguments[1]))),i=i>=0?i:n-Math.abs(i);i>=0;i--)if(i in t&&e===t[i])return i;return-1}),Object.getPrototypeOf||(Object.getPrototypeOf=function(e){return e.__proto__||(e.constructor?e.constructor.prototype:h)}),Object.getOwnPropertyDescriptor||(Object.getOwnPropertyDescriptor=function(e,t){if("object"!=typeof e&&"function"!=typeof e||null===e)throw new TypeError("Object.getOwnPropertyDescriptor called on a non-object: "+e);if(p(e,t)){var n;if(n={enumerable:!0,configurable:!0},l){var i=e.__proto__;e.__proto__=h;var r=o(e,t),s=a(e,t);if(e.__proto__=i,r||s)return r&&(n.get=r),s&&(n.set=s),n}return n.value=e[t],n}}),Object.getOwnPropertyNames||(Object.getOwnPropertyNames=function(e){return Object.keys(e)}),Object.create||(f=null===Object.prototype.__proto__?function(){return{__proto__:null}}:function(){var e={};for(var t in e)e[t]=null;return e.constructor=e.hasOwnProperty=e.propertyIsEnumerable=e.isPrototypeOf=e.toLocaleString=e.toString=e.valueOf=e.__proto__=null,e},Object.create=function(e,t){var n;if(null===e)n=f();else{if("object"!=typeof e)throw new TypeError("typeof prototype["+typeof e+"] != 'object'");var i=function(){};i.prototype=e,(n=new i).__proto__=e}return void 0!==t&&Object.defineProperties(n,t),n}),Object.defineProperty){var A=C({}),R="undefined"==typeof document||C(document.createElement("div"));if(!A||!R)var S=Object.defineProperty}Object.defineProperty&&!S||(Object.defineProperty=function(e,t,n){if("object"!=typeof e&&"function"!=typeof e||null===e)throw new TypeError("Object.defineProperty called on non-object: "+e);if("object"!=typeof n&&"function"!=typeof n||null===n)throw new TypeError("Property description must be an object: "+n);if(S)try{return S.call(Object,e,t,n)}catch(e){}if(p(n,"value"))if(l&&(o(e,t)||a(e,t))){var i=e.__proto__;e.__proto__=h,delete e[t],e[t]=n.value,e.__proto__=i}else e[t]=n.value;else{if(!l)throw new TypeError("getters & setters can not be defined on this javascript engine");p(n,"get")&&r(e,t,n.get),p(n,"set")&&s(e,t,n.set)}return e}),Object.defineProperties||(Object.defineProperties=function(e,t){for(var n in t)p(t,n)&&Object.defineProperty(e,n,t[n]);return e}),Object.seal||(Object.seal=function(e){return e}),Object.freeze||(Object.freeze=function(e){return e});try{Object.freeze((function(){}))}catch(e){Object.freeze=(E=Object.freeze,function(e){return"function"==typeof e?e:E(e)})}if(Object.preventExtensions||(Object.preventExtensions=function(e){return e}),Object.isSealed||(Object.isSealed=function(e){return!1}),Object.isFrozen||(Object.isFrozen=function(e){return!1}),Object.isExtensible||(Object.isExtensible=function(e){if(Object(e)===e)throw new TypeError;for(var t="";p(e,t);)t+="?";e[t]=!0;var n=p(e,t);return delete e[t],n}),!Object.keys){var T=!0,b=["toString","toLocaleString","valueOf","hasOwnProperty","isPrototypeOf","propertyIsEnumerable","constructor"],w=b.length;for(var x in{toString:null})T=!1;Object.keys=function(e){if("object"!=typeof e&&"function"!=typeof e||null===e)throw new TypeError("Object.keys called on a non-object");var t=[];for(var n in e)p(e,n)&&t.push(n);if(T)for(var i=0,r=w;i0||-1)*Math.floor(Math.abs(e))),e}var N=function(e){if(null==e)throw new TypeError("can't convert "+e+" to object");return Object(e)}})),ace.define("ace/lib/fixoldbrowsers",["require","exports","module","ace/lib/regexp","ace/lib/es5-shim"],(function(e,t,n){"use strict";e("./regexp"),e("./es5-shim"),"undefined"==typeof Element||Element.prototype.remove||Object.defineProperty(Element.prototype,"remove",{enumerable:!1,writable:!0,configurable:!0,value:function(){this.parentNode&&this.parentNode.removeChild(this)}})})),ace.define("ace/lib/useragent",["require","exports","module"],(function(e,t,n){"use strict";t.OS={LINUX:"LINUX",MAC:"MAC",WINDOWS:"WINDOWS"},t.getOS=function(){return t.isMac?t.OS.MAC:t.isLinux?t.OS.LINUX:t.OS.WINDOWS};var i="object"==typeof navigator?navigator:{},r=(/mac|win|linux/i.exec(i.platform)||["other"])[0].toLowerCase(),s=i.userAgent||"",o=i.appName||"";t.isWin="win"==r,t.isMac="mac"==r,t.isLinux="linux"==r,t.isIE="Microsoft Internet Explorer"==o||o.indexOf("MSAppHost")>=0?parseFloat((s.match(/(?:MSIE |Trident\/[0-9]+[\.0-9]+;.*rv:)([0-9]+[\.0-9]+)/)||[])[1]):parseFloat((s.match(/(?:Trident\/[0-9]+[\.0-9]+;.*rv:)([0-9]+[\.0-9]+)/)||[])[1]),t.isOldIE=t.isIE&&t.isIE<9,t.isGecko=t.isMozilla=s.match(/ Gecko\/\d+/),t.isOpera="object"==typeof opera&&"[object Opera]"==Object.prototype.toString.call(window.opera),t.isWebKit=parseFloat(s.split("WebKit/")[1])||void 0,t.isChrome=parseFloat(s.split(" Chrome/")[1])||void 0,t.isEdge=parseFloat(s.split(" Edge/")[1])||void 0,t.isAIR=s.indexOf("AdobeAIR")>=0,t.isAndroid=s.indexOf("Android")>=0,t.isChromeOS=s.indexOf(" CrOS ")>=0,t.isIOS=/iPad|iPhone|iPod/.test(s)&&!window.MSStream,t.isIOS&&(t.isMac=!0),t.isMobile=t.isIOS||t.isAndroid})),ace.define("ace/lib/dom",["require","exports","module","ace/lib/useragent"],(function(e,t,n){"use strict";var i=e("./useragent");if(t.buildDom=function e(t,n,i){if("string"==typeof t&&t){var r=document.createTextNode(t);return n&&n.appendChild(r),r}if(!Array.isArray(t))return t;if("string"!=typeof t[0]||!t[0]){for(var s=[],o=0;o=1.5,"undefined"!=typeof document){var r=document.createElement("div");t.HI_DPI&&void 0!==r.style.transform&&(t.HAS_CSS_TRANSFORMS=!0),i.isEdge||void 0===r.style.animationName||(t.HAS_CSS_ANIMATION=!0),r=null}t.HAS_CSS_TRANSFORMS?t.translate=function(e,t,n){e.style.transform="translate("+Math.round(t)+"px, "+Math.round(n)+"px)"}:t.translate=function(e,t,n){e.style.top=Math.round(n)+"px",e.style.left=Math.round(t)+"px"}})),ace.define("ace/lib/oop",["require","exports","module"],(function(e,t,n){"use strict";t.inherits=function(e,t){e.super_=t,e.prototype=Object.create(t.prototype,{constructor:{value:e,enumerable:!1,writable:!0,configurable:!0}})},t.mixin=function(e,t){for(var n in t)e[n]=t[n];return e},t.implement=function(e,n){t.mixin(e,n)}})),ace.define("ace/lib/keys",["require","exports","module","ace/lib/oop"],(function(e,t,n){"use strict";var i=e("./oop"),r=function(){var e,t,n={MODIFIER_KEYS:{16:"Shift",17:"Ctrl",18:"Alt",224:"Meta",91:"MetaLeft",92:"MetaRight",93:"ContextMenu"},KEY_MODS:{ctrl:1,alt:2,option:2,shift:4,super:8,meta:8,command:8,cmd:8},FUNCTION_KEYS:{8:"Backspace",9:"Tab",13:"Return",19:"Pause",27:"Esc",32:"Space",33:"PageUp",34:"PageDown",35:"End",36:"Home",37:"Left",38:"Up",39:"Right",40:"Down",44:"Print",45:"Insert",46:"Delete",96:"Numpad0",97:"Numpad1",98:"Numpad2",99:"Numpad3",100:"Numpad4",101:"Numpad5",102:"Numpad6",103:"Numpad7",104:"Numpad8",105:"Numpad9","-13":"NumpadEnter",112:"F1",113:"F2",114:"F3",115:"F4",116:"F5",117:"F6",118:"F7",119:"F8",120:"F9",121:"F10",122:"F11",123:"F12",144:"Numlock",145:"Scrolllock"},PRINTABLE_KEYS:{32:" ",48:"0",49:"1",50:"2",51:"3",52:"4",53:"5",54:"6",55:"7",56:"8",57:"9",59:";",61:"=",65:"a",66:"b",67:"c",68:"d",69:"e",70:"f",71:"g",72:"h",73:"i",74:"j",75:"k",76:"l",77:"m",78:"n",79:"o",80:"p",81:"q",82:"r",83:"s",84:"t",85:"u",86:"v",87:"w",88:"x",89:"y",90:"z",107:"+",109:"-",110:".",186:";",187:"=",188:",",189:"-",190:".",191:"/",192:"`",219:"[",220:"\\",221:"]",222:"'",111:"/",106:"*"}};for(t in n.FUNCTION_KEYS)e=n.FUNCTION_KEYS[t].toLowerCase(),n[e]=parseInt(t,10);for(t in n.PRINTABLE_KEYS)e=n.PRINTABLE_KEYS[t].toLowerCase(),n[e]=parseInt(t,10);return i.mixin(n,n.MODIFIER_KEYS),i.mixin(n,n.PRINTABLE_KEYS),i.mixin(n,n.FUNCTION_KEYS),n.enter=n.return,n.escape=n.esc,n.del=n.delete,n[173]="-",function(){for(var e=["cmd","ctrl","alt","shift"],t=Math.pow(2,e.length);t--;)n.KEY_MODS[t]=e.filter((function(e){return t&n.KEY_MODS[e]})).join("-")+"-"}(),n.KEY_MODS[0]="",n.KEY_MODS[-1]="input-",n}();i.mixin(t,r),t.keyCodeToString=function(e){var t=r[e];return"string"!=typeof t&&(t=String.fromCharCode(e)),t.toLowerCase()}})),ace.define("ace/lib/event",["require","exports","module","ace/lib/keys","ace/lib/useragent"],(function(e,t,n){"use strict";var i=e("./keys"),r=e("./useragent"),s=null,o=0;t.addListener=function(e,t,n){if(e.addEventListener)return e.addEventListener(t,n,!1);if(e.attachEvent){var i=function(){n.call(e,window.event)};n._wrapper=i,e.attachEvent("on"+t,i)}},t.removeListener=function(e,t,n){if(e.removeEventListener)return e.removeEventListener(t,n,!1);e.detachEvent&&e.detachEvent("on"+t,n._wrapper||n)},t.stopEvent=function(e){return t.stopPropagation(e),t.preventDefault(e),!1},t.stopPropagation=function(e){e.stopPropagation?e.stopPropagation():e.cancelBubble=!0},t.preventDefault=function(e){e.preventDefault?e.preventDefault():e.returnValue=!1},t.getButton=function(e){return"dblclick"==e.type?0:"contextmenu"==e.type||r.isMac&&e.ctrlKey&&!e.altKey&&!e.shiftKey?2:e.preventDefault?e.button:{1:0,2:2,4:1}[e.button]},t.capture=function(e,n,i){function r(e){n&&n(e),i&&i(e),t.removeListener(document,"mousemove",n,!0),t.removeListener(document,"mouseup",r,!0),t.removeListener(document,"dragstart",r,!0)}return t.addListener(document,"mousemove",n,!0),t.addListener(document,"mouseup",r,!0),t.addListener(document,"dragstart",r,!0),r},t.addMouseWheelListener=function(e,n){"onmousewheel"in e?t.addListener(e,"mousewheel",(function(e){void 0!==e.wheelDeltaX?(e.wheelX=-e.wheelDeltaX/8,e.wheelY=-e.wheelDeltaY/8):(e.wheelX=0,e.wheelY=-e.wheelDelta/8),n(e)})):"onwheel"in e?t.addListener(e,"wheel",(function(e){switch(e.deltaMode){case e.DOM_DELTA_PIXEL:e.wheelX=.35*e.deltaX||0,e.wheelY=.35*e.deltaY||0;break;case e.DOM_DELTA_LINE:case e.DOM_DELTA_PAGE:e.wheelX=5*(e.deltaX||0),e.wheelY=5*(e.deltaY||0)}n(e)})):t.addListener(e,"DOMMouseScroll",(function(e){e.axis&&e.axis==e.HORIZONTAL_AXIS?(e.wheelX=5*(e.detail||0),e.wheelY=0):(e.wheelX=0,e.wheelY=5*(e.detail||0)),n(e)}))},t.addMultiMouseDownListener=function(e,n,i,s){var o,a,l,c=0,u={2:"dblclick",3:"tripleclick",4:"quadclick"};function h(e){if(0!==t.getButton(e)?c=0:e.detail>1?++c>4&&(c=1):c=1,r.isIE){var h=Math.abs(e.clientX-o)>5||Math.abs(e.clientY-a)>5;l&&!h||(c=1),l&&clearTimeout(l),l=setTimeout((function(){l=null}),n[c-1]||600),1==c&&(o=e.clientX,a=e.clientY)}if(e._clicks=c,i[s]("mousedown",e),c>4)c=0;else if(c>1)return i[s](u[c],e)}function d(e){c=2,l&&clearTimeout(l),l=setTimeout((function(){l=null}),n[c-1]||600),i[s]("mousedown",e),i[s](u[c],e)}Array.isArray(e)||(e=[e]),e.forEach((function(e){t.addListener(e,"mousedown",h),r.isOldIE&&t.addListener(e,"dblclick",d)}))};var a=r.isMac&&r.isOpera&&!("KeyboardEvent"in window)?function(e){return 0|(e.metaKey?1:0)|(e.altKey?2:0)|(e.shiftKey?4:0)|(e.ctrlKey?8:0)}:function(e){return 0|(e.ctrlKey?1:0)|(e.altKey?2:0)|(e.shiftKey?4:0)|(e.metaKey?8:0)};function l(e,t,n){var l=a(t);if(!r.isMac&&s){if(t.getModifierState&&(t.getModifierState("OS")||t.getModifierState("Win"))&&(l|=8),s.altGr){if(3==(3&l))return;s.altGr=0}if(18===n||17===n){var c="location"in t?t.location:t.keyLocation;17===n&&1===c?1==s[n]&&(o=t.timeStamp):18===n&&3===l&&2===c&&t.timeStamp-o<50&&(s.altGr=!0)}}if(n in i.MODIFIER_KEYS&&(n=-1),l||13!==n||3!==(c="location"in t?t.location:t.keyLocation)||(e(t,l,-n),!t.defaultPrevented)){if(r.isChromeOS&&8&l){if(e(t,l,n),t.defaultPrevented)return;l&=-9}return!!(l||n in i.FUNCTION_KEYS||n in i.PRINTABLE_KEYS)&&e(t,l,n)}}function c(){s=Object.create(null)}if(t.getModifierString=function(e){return i.KEY_MODS[a(e)]},t.addCommandKeyListener=function(e,n){var i=t.addListener;if(r.isOldGecko||r.isOpera&&!("KeyboardEvent"in window)){var o=null;i(e,"keydown",(function(e){o=e.keyCode})),i(e,"keypress",(function(e){return l(n,e,o)}))}else{var a=null;i(e,"keydown",(function(e){s[e.keyCode]=(s[e.keyCode]||0)+1;var t=l(n,e,e.keyCode);return a=e.defaultPrevented,t})),i(e,"keypress",(function(e){a&&(e.ctrlKey||e.altKey||e.shiftKey||e.metaKey)&&(t.stopEvent(e),a=null)})),i(e,"keyup",(function(e){s[e.keyCode]=null})),s||(c(),i(window,"focus",c))}},"object"==typeof window&&window.postMessage&&!r.isOldIE){var u=1;t.nextTick=function(e,n){n=n||window;var i="zero-timeout-message-"+u++,r=function(s){s.data==i&&(t.stopPropagation(s),t.removeListener(n,"message",r),e())};t.addListener(n,"message",r),n.postMessage(i,"*")}}t.$idleBlocked=!1,t.onIdle=function(e,n){return setTimeout((function n(){t.$idleBlocked?setTimeout(n,100):e()}),n)},t.$idleBlockId=null,t.blockIdle=function(e){t.$idleBlockId&&clearTimeout(t.$idleBlockId),t.$idleBlocked=!0,t.$idleBlockId=setTimeout((function(){t.$idleBlocked=!1}),e||100)},t.nextFrame="object"==typeof window&&(window.requestAnimationFrame||window.mozRequestAnimationFrame||window.webkitRequestAnimationFrame||window.msRequestAnimationFrame||window.oRequestAnimationFrame),t.nextFrame?t.nextFrame=t.nextFrame.bind(window):t.nextFrame=function(e){setTimeout(e,17)}})),ace.define("ace/range",["require","exports","module"],(function(e,t,n){"use strict";var i=function(e,t,n,i){this.start={row:e,column:t},this.end={row:n,column:i}};(function(){this.isEqual=function(e){return this.start.row===e.start.row&&this.end.row===e.end.row&&this.start.column===e.start.column&&this.end.column===e.end.column},this.toString=function(){return"Range: ["+this.start.row+"/"+this.start.column+"] -> ["+this.end.row+"/"+this.end.column+"]"},this.contains=function(e,t){return 0==this.compare(e,t)},this.compareRange=function(e){var t,n=e.end,i=e.start;return 1==(t=this.compare(n.row,n.column))?1==(t=this.compare(i.row,i.column))?2:0==t?1:0:-1==t?-2:-1==(t=this.compare(i.row,i.column))?-1:1==t?42:0},this.comparePoint=function(e){return this.compare(e.row,e.column)},this.containsRange=function(e){return 0==this.comparePoint(e.start)&&0==this.comparePoint(e.end)},this.intersects=function(e){var t=this.compareRange(e);return-1==t||0==t||1==t},this.isEnd=function(e,t){return this.end.row==e&&this.end.column==t},this.isStart=function(e,t){return this.start.row==e&&this.start.column==t},this.setStart=function(e,t){"object"==typeof e?(this.start.column=e.column,this.start.row=e.row):(this.start.row=e,this.start.column=t)},this.setEnd=function(e,t){"object"==typeof e?(this.end.column=e.column,this.end.row=e.row):(this.end.row=e,this.end.column=t)},this.inside=function(e,t){return 0==this.compare(e,t)&&!this.isEnd(e,t)&&!this.isStart(e,t)},this.insideStart=function(e,t){return 0==this.compare(e,t)&&!this.isEnd(e,t)},this.insideEnd=function(e,t){return 0==this.compare(e,t)&&!this.isStart(e,t)},this.compare=function(e,t){return this.isMultiLine()||e!==this.start.row?ethis.end.row?1:this.start.row===e?t>=this.start.column?0:-1:this.end.row===e?t<=this.end.column?0:1:0:tthis.end.column?1:0},this.compareStart=function(e,t){return this.start.row==e&&this.start.column==t?-1:this.compare(e,t)},this.compareEnd=function(e,t){return this.end.row==e&&this.end.column==t?1:this.compare(e,t)},this.compareInside=function(e,t){return this.end.row==e&&this.end.column==t?1:this.start.row==e&&this.start.column==t?-1:this.compare(e,t)},this.clipRows=function(e,t){if(this.end.row>t)var n={row:t+1,column:0};else this.end.rowt)var r={row:t+1,column:0};else this.start.row0;)1&t&&(n+=e),(t>>=1)&&(e+=e);return n};var i=/^\s\s*/,r=/\s\s*$/;t.stringTrimLeft=function(e){return e.replace(i,"")},t.stringTrimRight=function(e){return e.replace(r,"")},t.copyObject=function(e){var t={};for(var n in e)t[n]=e[n];return t},t.copyArray=function(e){for(var t=[],n=0,i=e.length;nDate.now()-50)||(i=!1)},cancel:function(){i=Date.now()}}})),ace.define("ace/keyboard/textinput",["require","exports","module","ace/lib/event","ace/lib/useragent","ace/lib/dom","ace/lib/lang","ace/clipboard","ace/lib/keys"],(function(e,t,n){"use strict";var i=e("../lib/event"),r=e("../lib/useragent"),s=e("../lib/dom"),o=e("../lib/lang"),a=e("../clipboard"),l=r.isChrome<18,c=r.isIE,u=r.isChrome>63,h=400,d=e("../lib/keys"),m=d.KEY_MODS,p=r.isIOS,g=p?/\s/:/\n/;t.TextInput=function(e,t){var n=s.createElement("textarea");n.className="ace_text-input",n.setAttribute("wrap","off"),n.setAttribute("autocorrect","off"),n.setAttribute("autocapitalize","off"),n.setAttribute("spellcheck",!1),n.style.opacity="0",e.insertBefore(n,e.firstChild);var f=!1,E=!1,v=!1,_=!1,C="";r.isMobile||(n.style.fontSize="1px");var A=!1,R=!1,S="",T=0,b=0,w=0;try{var x=document.activeElement===n}catch(e){}i.addListener(n,"blur",(function(e){R||(t.onBlur(e),x=!1)})),i.addListener(n,"focus",(function(e){if(!R){if(x=!0,r.isEdge)try{if(!document.hasFocus())return}catch(e){}t.onFocus(e),r.isEdge?setTimeout(y):y()}})),this.$focusScroll=!1,this.focus=function(){if(C||u||"browser"==this.$focusScroll)return n.focus({preventScroll:!0});var e=n.style.top;n.style.position="fixed",n.style.top="0px";try{var t=0!=n.getBoundingClientRect().top}catch(e){return}var i=[];if(t)for(var r=n.parentElement;r&&1==r.nodeType;)i.push(r),r.setAttribute("ace_nocontext",!0),r=!r.parentElement&&r.getRootNode?r.getRootNode().host:r.parentElement;n.focus({preventScroll:!0}),t&&i.forEach((function(e){e.removeAttribute("ace_nocontext")})),setTimeout((function(){n.style.position="","0px"==n.style.top&&(n.style.top=e)}),0)},this.blur=function(){n.blur()},this.isFocused=function(){return x},t.on("beforeEndOperation",(function(){t.curOp&&"insertstring"==t.curOp.command.name||(v&&(S=n.value="",D()),y())}));var y=p?function(e){if(x&&(!f||e)&&!_){e||(e="");var i="\n ab"+e+"cde fg\n";i!=n.value&&(n.value=S=i);var r=4+(e.length||(t.selection.isEmpty()?0:1));4==T&&b==r||n.setSelectionRange(4,r),T=4,b=r}}:function(){if(!v&&!_&&(x||I)){v=!0;var e=t.selection,i=e.getRange(),r=e.cursor.row,s=i.start.column,o=i.end.column,a=t.session.getLine(r);if(i.start.row!=r){var l=t.session.getLine(r-1);s=i.start.rowr+1?c.length:o,o+=a.length+1,a=a+"\n"+c}a.length>h&&(s0&&S[h]==e[h];)h++,o--;for(l=l.slice(h),h=1;a>0&&S.length-h>T-1&&S[S.length-h]==e[e.length-h];)h++,a--;c-=h-1,u-=h-1;var d=l.length-h+1;return d<0&&(o=-d,d=0),l=l.slice(0,d),i||l||c||o||a||u?(_=!0,l&&!o&&!a&&!c&&!u||A?t.onTextInput(l):t.onTextInput(l,{extendLeft:o,extendRight:a,restoreStart:c,restoreEnd:u}),_=!1,S=e,T=r,b=s,w=u,l):""},N=function(e){if(v)return k();if(e&&e.inputType){if("historyUndo"==e.inputType)return t.execCommand("undo");if("historyRedo"==e.inputType)return t.execCommand("redo")}var i=n.value,r=F(i,!0);(i.length>500||g.test(r))&&y()},M=function(e,t,n){var i=e.clipboardData||window.clipboardData;if(i&&!l){var r=c||n?"Text":"text/plain";try{return t?!1!==i.setData(r,t):i.getData(r)}catch(e){if(!n)return M(e,t,!0)}}},O=function(e,r){var s=t.getCopyText();if(!s)return i.preventDefault(e);M(e,s)?(p&&(y(s),f=s,setTimeout((function(){f=!1}),10)),r?t.onCut():t.onCopy(),i.preventDefault(e)):(f=!0,n.value=s,n.select(),setTimeout((function(){f=!1,y(),r?t.onCut():t.onCopy()})))},B=function(e){O(e,!0)},$=function(e){O(e,!1)},P=function(e){var s=M(e);a.pasteCancelled()||("string"==typeof s?(s&&t.onPaste(s,e),r.isIE&&setTimeout(y),i.preventDefault(e)):(n.value="",E=!0))};i.addCommandKeyListener(n,t.onCommandKey.bind(t)),i.addListener(n,"select",(function(e){v||(f?f=!1:function(e){return 0===e.selectionStart&&e.selectionEnd>=S.length&&e.value===S&&S&&e.selectionEnd!==b}(n)&&(t.selectAll(),y()))})),i.addListener(n,"input",N),i.addListener(n,"cut",B),i.addListener(n,"copy",$),i.addListener(n,"paste",P),"oncut"in n&&"oncopy"in n&&"onpaste"in n||i.addListener(e,"keydown",(function(e){if((!r.isMac||e.metaKey)&&e.ctrlKey)switch(e.keyCode){case 67:$(e);break;case 86:P(e);break;case 88:B(e)}}));var k=function(){if(v&&t.onCompositionUpdate&&!t.$readOnly){if(A)return U();if(v.useTextareaForIME)t.onCompositionUpdate(n.value);else{var e=n.value;F(e),v.markerRange&&(v.context&&(v.markerRange.start.column=v.selectionStart=v.context.compositionStartOffset),v.markerRange.end.column=v.markerRange.start.column+b-v.selectionStart+w)}}},D=function(e){t.onCompositionEnd&&!t.$readOnly&&(v=!1,t.onCompositionEnd(),t.off("mousedown",U),e&&N())};function U(){R=!0,n.blur(),n.focus(),R=!1}var G,W=o.delayedCall(k,50).schedule.bind(null,null);function V(){clearTimeout(G),G=setTimeout((function(){C&&(n.style.cssText=C,C=""),t.renderer.$isMousePressed=!1,t.renderer.$keepTextAreaAtCursor&&t.renderer.$moveTextAreaToCursor()}),0)}i.addListener(n,"compositionstart",(function(e){if(!v&&t.onCompositionStart&&!t.$readOnly&&(v={},!A)){setTimeout(k,0),t.on("mousedown",U);var i=t.getSelectionRange();i.end.row=i.start.row,i.end.column=i.start.column,v.markerRange=i,v.selectionStart=T,t.onCompositionStart(v),v.useTextareaForIME?(n.value="",S="",T=0,b=0):(n.msGetInputContext&&(v.context=n.msGetInputContext()),n.getInputContext&&(v.context=n.getInputContext()))}})),i.addListener(n,"compositionupdate",k),i.addListener(n,"keyup",(function(e){27==e.keyCode&&n.value.lengthb&&"\n"==S[s]?o=d.end:ib&&S.slice(0,s).split("\n").length>2?o=d.down:s>b&&" "==S[s-1]?(o=d.right,a=m.option):(s>b||s==b&&b!=T&&i==s)&&(o=d.right),i!==s&&(a|=m.shift),o){if(!t.onCommandKey({},a,o)&&t.commands){o=d.keyCodeToString(o);var l=t.commands.findKeyCommand(a,o);l&&t.execCommand(l)}T=i,b=s,y("")}}};document.addEventListener("selectionchange",s),t.on("destroy",(function(){document.removeEventListener("selectionchange",s)}))}(0,t,n)}})),ace.define("ace/mouse/default_handlers",["require","exports","module","ace/lib/useragent"],(function(e,t,n){"use strict";var i=e("../lib/useragent");function r(e){e.$clickSelection=null;var t=e.editor;t.setDefaultHandler("mousedown",this.onMouseDown.bind(e)),t.setDefaultHandler("dblclick",this.onDoubleClick.bind(e)),t.setDefaultHandler("tripleclick",this.onTripleClick.bind(e)),t.setDefaultHandler("quadclick",this.onQuadClick.bind(e)),t.setDefaultHandler("mousewheel",this.onMouseWheel.bind(e)),["select","startSelect","selectEnd","selectAllEnd","selectByWordsEnd","selectByLinesEnd","dragWait","dragWaitEnd","focusWait"].forEach((function(t){e[t]=this[t]}),this),e.selectByLines=this.extendSelectionBy.bind(e,"getLineRange"),e.selectByWords=this.extendSelectionBy.bind(e,"getWordRange")}function s(e,t){if(e.start.row==e.end.row)var n=2*t.column-e.start.column-e.end.column;else if(e.start.row!=e.end.row-1||e.start.column||e.end.column)n=2*t.row-e.start.row-e.end.row;else n=t.column-4;return n<0?{cursor:e.start,anchor:e.end}:{cursor:e.end,anchor:e.start}}(function(){this.onMouseDown=function(e){var t=e.inSelection(),n=e.getDocumentPosition();this.mousedownEvent=e;var r=this.editor,s=e.getButton();return 0!==s?((r.getSelectionRange().isEmpty()||1==s)&&r.selection.moveToPosition(n),void(2==s&&(r.textInput.onContextMenu(e.domEvent),i.isMozilla||e.preventDefault()))):(this.mousedownEvent.time=Date.now(),!t||r.isFocused()||(r.focus(),!this.$focusTimeout||this.$clickSelection||r.inMultiSelectMode)?(this.captureMouse(e),this.startSelect(n,e.domEvent._clicks>1),e.preventDefault()):(this.setState("focusWait"),void this.captureMouse(e)))},this.startSelect=function(e,t){e=e||this.editor.renderer.screenToTextCoordinates(this.x,this.y);var n=this.editor;this.mousedownEvent&&(this.mousedownEvent.getShiftKey()?n.selection.selectToPosition(e):t||n.selection.moveToPosition(e),t||this.select(),n.renderer.scroller.setCapture&&n.renderer.scroller.setCapture(),n.setStyle("ace_selecting"),this.setState("select"))},this.select=function(){var e,t=this.editor,n=t.renderer.screenToTextCoordinates(this.x,this.y);if(this.$clickSelection){var i=this.$clickSelection.comparePoint(n);if(-1==i)e=this.$clickSelection.end;else if(1==i)e=this.$clickSelection.start;else{var r=s(this.$clickSelection,n);n=r.cursor,e=r.anchor}t.selection.setSelectionAnchor(e.row,e.column)}t.selection.selectToPosition(n),t.renderer.scrollCursorIntoView()},this.extendSelectionBy=function(e){var t,n=this.editor,i=n.renderer.screenToTextCoordinates(this.x,this.y),r=n.selection[e](i.row,i.column);if(this.$clickSelection){var o=this.$clickSelection.comparePoint(r.start),a=this.$clickSelection.comparePoint(r.end);if(-1==o&&a<=0)t=this.$clickSelection.end,r.end.row==i.row&&r.end.column==i.column||(i=r.start);else if(1==a&&o>=0)t=this.$clickSelection.start,r.start.row==i.row&&r.start.column==i.column||(i=r.end);else if(-1==o&&1==a)i=r.end,t=r.start;else{var l=s(this.$clickSelection,i);i=l.cursor,t=l.anchor}n.selection.setSelectionAnchor(t.row,t.column)}n.selection.selectToPosition(i),n.renderer.scrollCursorIntoView()},this.selectEnd=this.selectAllEnd=this.selectByWordsEnd=this.selectByLinesEnd=function(){this.$clickSelection=null,this.editor.unsetStyle("ace_selecting"),this.editor.renderer.scroller.releaseCapture&&this.editor.renderer.scroller.releaseCapture()},this.focusWait=function(){var e,t,n,i,r=(e=this.mousedownEvent.x,t=this.mousedownEvent.y,n=this.x,i=this.y,Math.sqrt(Math.pow(n-e,2)+Math.pow(i-t,2))),s=Date.now();(r>0||s-this.mousedownEvent.time>this.$focusTimeout)&&this.startSelect(this.mousedownEvent.getDocumentPosition())},this.onDoubleClick=function(e){var t=e.getDocumentPosition(),n=this.editor,i=n.session.getBracketRange(t);i?(i.isEmpty()&&(i.start.column--,i.end.column++),this.setState("select")):(i=n.selection.getWordRange(t.row,t.column),this.setState("selectByWords")),this.$clickSelection=i,this.select()},this.onTripleClick=function(e){var t=e.getDocumentPosition(),n=this.editor;this.setState("selectByLines");var i=n.getSelectionRange();i.isMultiLine()&&i.contains(t.row,t.column)?(this.$clickSelection=n.selection.getLineRange(i.start.row),this.$clickSelection.end=n.selection.getLineRange(i.end.row).end):this.$clickSelection=n.selection.getLineRange(t.row),this.select()},this.onQuadClick=function(e){var t=this.editor;t.selectAll(),this.$clickSelection=t.getSelectionRange(),this.setState("selectAll")},this.onMouseWheel=function(e){if(!e.getAccelKey()){e.getShiftKey()&&e.wheelY&&!e.wheelX&&(e.wheelX=e.wheelY,e.wheelY=0);var t=this.editor;this.$lastScroll||(this.$lastScroll={t:0,vx:0,vy:0,allowed:0});var n=this.$lastScroll,i=e.domEvent.timeStamp,r=i-n.t,s=r?e.wheelX/r:n.vx,o=r?e.wheelY/r:n.vy;r<550&&(s=(s+n.vx)/2,o=(o+n.vy)/2);var a=Math.abs(s/o),l=!1;return a>=1&&t.renderer.isScrollableBy(e.wheelX*e.speed,0)&&(l=!0),a<=1&&t.renderer.isScrollableBy(0,e.wheelY*e.speed)&&(l=!0),l?n.allowed=i:i-n.allowed<550&&(Math.abs(s)<=1.5*Math.abs(n.vx)&&Math.abs(o)<=1.5*Math.abs(n.vy)?(l=!0,n.allowed=i):n.allowed=0),n.t=i,n.vx=s,n.vy=o,l?(t.renderer.scrollBy(e.wheelX*e.speed,e.wheelY*e.speed),e.stop()):void 0}}}).call(r.prototype),t.DefaultHandlers=r})),ace.define("ace/tooltip",["require","exports","module","ace/lib/oop","ace/lib/dom"],(function(e,t,n){"use strict";e("./lib/oop");var i=e("./lib/dom");function r(e){this.isOpen=!1,this.$element=null,this.$parentNode=e}(function(){this.$init=function(){return this.$element=i.createElement("div"),this.$element.className="ace_tooltip",this.$element.style.display="none",this.$parentNode.appendChild(this.$element),this.$element},this.getElement=function(){return this.$element||this.$init()},this.setText=function(e){this.getElement().textContent=e},this.setHtml=function(e){this.getElement().innerHTML=e},this.setPosition=function(e,t){this.getElement().style.left=e+"px",this.getElement().style.top=t+"px"},this.setClassName=function(e){i.addCssClass(this.getElement(),e)},this.show=function(e,t,n){null!=e&&this.setText(e),null!=t&&null!=n&&this.setPosition(t,n),this.isOpen||(this.getElement().style.display="block",this.isOpen=!0)},this.hide=function(){this.isOpen&&(this.getElement().style.display="none",this.isOpen=!1)},this.getHeight=function(){return this.getElement().offsetHeight},this.getWidth=function(){return this.getElement().offsetWidth},this.destroy=function(){this.isOpen=!1,this.$element&&this.$element.parentNode&&this.$element.parentNode.removeChild(this.$element)}}).call(r.prototype),t.Tooltip=r})),ace.define("ace/mouse/default_gutter_handler",["require","exports","module","ace/lib/dom","ace/lib/oop","ace/lib/event","ace/tooltip"],(function(e,t,n){"use strict";var i=e("../lib/dom"),r=e("../lib/oop"),s=e("../lib/event"),o=e("../tooltip").Tooltip;function a(e){o.call(this,e)}r.inherits(a,o),function(){this.setPosition=function(e,t){var n=window.innerWidth||document.documentElement.clientWidth,i=window.innerHeight||document.documentElement.clientHeight,r=this.getWidth(),s=this.getHeight();(e+=15)+r>n&&(e-=e+r-n),(t+=15)+s>i&&(t-=20+s),o.prototype.setPosition.call(this,e,t)}}.call(a.prototype),t.GutterHandler=function(e){var t,n,r,o=e.editor,l=o.renderer.$gutterLayer,c=new a(o.container);function u(){t&&(t=clearTimeout(t)),r&&(c.hide(),r=null,o._signal("hideGutterTooltip",c),o.removeEventListener("mousewheel",u))}function h(e){c.setPosition(e.x,e.y)}e.editor.setDefaultHandler("guttermousedown",(function(t){if(o.isFocused()&&0==t.getButton()&&"foldWidgets"!=l.getRegion(t)){var n=t.getDocumentPosition().row,i=o.session.selection;if(t.getShiftKey())i.selectTo(n,0);else{if(2==t.domEvent.detail)return o.selectAll(),t.preventDefault();e.$clickSelection=o.selection.getLineRange(n)}return e.setState("selectByLines"),e.captureMouse(t),t.preventDefault()}})),e.editor.setDefaultHandler("guttermousemove",(function(s){var a=s.domEvent.target||s.domEvent.srcElement;if(i.hasCssClass(a,"ace_fold-widget"))return u();r&&e.$tooltipFollowsMouse&&h(s),n=s,t||(t=setTimeout((function(){t=null,n&&!e.isMousePressed?function(){var t=n.getDocumentPosition().row,i=l.$annotations[t];if(!i)return u();if(t==o.session.getLength()){var s=o.renderer.pixelToScreenCoordinates(0,n.y).row,a=n.$pos;if(s>o.session.documentToScreenRow(a.row,a.column))return u()}if(r!=i)if(r=i.text.join("
            "),c.setHtml(r),c.show(),o._signal("showGutterTooltip",c),o.on("mousewheel",u),e.$tooltipFollowsMouse)h(n);else{var d=n.domEvent.target.getBoundingClientRect(),m=c.getElement().style;m.left=d.right+"px",m.top=d.bottom+"px"}}():u()}),50))})),s.addListener(o.renderer.$gutter,"mouseout",(function(e){n=null,r&&!t&&(t=setTimeout((function(){t=null,u()}),50))})),o.on("changeSession",u)}})),ace.define("ace/mouse/mouse_event",["require","exports","module","ace/lib/event","ace/lib/useragent"],(function(e,t,n){"use strict";var i=e("../lib/event"),r=e("../lib/useragent"),s=t.MouseEvent=function(e,t){this.domEvent=e,this.editor=t,this.x=this.clientX=e.clientX,this.y=this.clientY=e.clientY,this.$pos=null,this.$inSelection=null,this.propagationStopped=!1,this.defaultPrevented=!1};(function(){this.stopPropagation=function(){i.stopPropagation(this.domEvent),this.propagationStopped=!0},this.preventDefault=function(){i.preventDefault(this.domEvent),this.defaultPrevented=!0},this.stop=function(){this.stopPropagation(),this.preventDefault()},this.getDocumentPosition=function(){return this.$pos||(this.$pos=this.editor.renderer.screenToTextCoordinates(this.clientX,this.clientY)),this.$pos},this.inSelection=function(){if(null!==this.$inSelection)return this.$inSelection;var e=this.editor.getSelectionRange();if(e.isEmpty())this.$inSelection=!1;else{var t=this.getDocumentPosition();this.$inSelection=e.contains(t.row,t.column)}return this.$inSelection},this.getButton=function(){return i.getButton(this.domEvent)},this.getShiftKey=function(){return this.domEvent.shiftKey},this.getAccelKey=r.isMac?function(){return this.domEvent.metaKey}:function(){return this.domEvent.ctrlKey}}).call(s.prototype)})),ace.define("ace/mouse/dragdrop_handler",["require","exports","module","ace/lib/dom","ace/lib/event","ace/lib/useragent"],(function(e,t,n){"use strict";var i=e("../lib/dom"),r=e("../lib/event"),s=e("../lib/useragent");function o(e){var t=e.editor,n=i.createElement("img");n.src="data:image/gif;base64,R0lGODlhAQABAAAAACH5BAEKAAEALAAAAAABAAEAAAICTAEAOw==",s.isOpera&&(n.style.cssText="width:1px;height:1px;position:fixed;top:0;left:0;z-index:2147483647;opacity:0;"),["dragWait","dragWaitEnd","startDrag","dragReadyEnd","onMouseDrag"].forEach((function(t){e[t]=this[t]}),this),t.addEventListener("mousedown",this.onMouseDown.bind(e));var o,l,c,u,h,d,m,p,g,f,E,v=t.container,_=0;function C(){var e=d;(function(e,n){var i=Date.now(),r=!n||e.row!=n.row,s=!n||e.column!=n.column;!f||r||s?(t.moveCursorToPosition(e),f=i,E={x:l,y:c}):a(E.x,E.y,l,c)>5?f=null:i-f>=200&&(t.renderer.scrollCursorIntoView(),f=null)})(d=t.renderer.screenToTextCoordinates(l,c),e),function(e,n){var i=Date.now(),r=t.renderer.layerConfig.lineHeight,s=t.renderer.layerConfig.characterWidth,o=t.renderer.scroller.getBoundingClientRect(),a={x:{left:l-o.left,right:o.right-l},y:{top:c-o.top,bottom:o.bottom-c}},u=Math.min(a.x.left,a.x.right),h=Math.min(a.y.top,a.y.bottom),d={row:e.row,column:e.column};u/s<=2&&(d.column+=a.x.left=200&&t.renderer.scrollCursorIntoView(d):g=i:g=null}(d,e)}function A(){h=t.selection.toOrientedRange(),o=t.session.addMarker(h,"ace_selection",t.getSelectionStyle()),t.clearSelection(),t.isFocused()&&t.renderer.$cursorLayer.setBlinking(!1),clearInterval(u),C(),u=setInterval(C,20),_=0,r.addListener(document,"mousemove",T)}function R(){clearInterval(u),t.session.removeMarker(o),o=null,t.selection.fromOrientedRange(h),t.isFocused()&&!p&&t.$resetCursorStyle(),h=null,d=null,_=0,g=null,f=null,r.removeListener(document,"mousemove",T)}this.onDragStart=function(e){if(this.cancelDrag||!v.draggable){var i=this;return setTimeout((function(){i.startSelect(),i.captureMouse(e)}),0),e.preventDefault()}h=t.getSelectionRange();var r=e.dataTransfer;r.effectAllowed=t.getReadOnly()?"copy":"copyMove",s.isOpera&&(t.container.appendChild(n),n.scrollTop=0),r.setDragImage&&r.setDragImage(n,0,0),s.isOpera&&t.container.removeChild(n),r.clearData(),r.setData("Text",t.session.getTextRange()),p=!0,this.setState("drag")},this.onDragEnd=function(e){if(v.draggable=!1,p=!1,this.setState(null),!t.getReadOnly()){var n=e.dataTransfer.dropEffect;m||"move"!=n||t.session.remove(t.getSelectionRange()),t.$resetCursorStyle()}this.editor.unsetStyle("ace_dragging"),this.editor.renderer.setCursorStyle("")},this.onDragEnter=function(e){if(!t.getReadOnly()&&b(e.dataTransfer))return l=e.clientX,c=e.clientY,o||A(),_++,e.dataTransfer.dropEffect=m=w(e),r.preventDefault(e)},this.onDragOver=function(e){if(!t.getReadOnly()&&b(e.dataTransfer))return l=e.clientX,c=e.clientY,o||(A(),_++),null!==S&&(S=null),e.dataTransfer.dropEffect=m=w(e),r.preventDefault(e)},this.onDragLeave=function(e){if(--_<=0&&o)return R(),m=null,r.preventDefault(e)},this.onDrop=function(e){if(d){var n=e.dataTransfer;if(p)switch(m){case"move":h=h.contains(d.row,d.column)?{start:d,end:d}:t.moveText(h,d);break;case"copy":h=t.moveText(h,d,!0)}else{var i=n.getData("Text");h={start:d,end:t.session.insert(d,i)},t.focus(),m=null}return R(),r.preventDefault(e)}},r.addListener(v,"dragstart",this.onDragStart.bind(e)),r.addListener(v,"dragend",this.onDragEnd.bind(e)),r.addListener(v,"dragenter",this.onDragEnter.bind(e)),r.addListener(v,"dragover",this.onDragOver.bind(e)),r.addListener(v,"dragleave",this.onDragLeave.bind(e)),r.addListener(v,"drop",this.onDrop.bind(e));var S=null;function T(){null==S&&(S=setTimeout((function(){null!=S&&o&&R()}),20))}function b(e){var t=e.types;return!t||Array.prototype.some.call(t,(function(e){return"text/plain"==e||"Text"==e}))}function w(e){var t=["copy","copymove","all","uninitialized"],n=s.isMac?e.altKey:e.ctrlKey,i="uninitialized";try{i=e.dataTransfer.effectAllowed.toLowerCase()}catch(e){}var r="none";return n&&t.indexOf(i)>=0?r="copy":["move","copymove","linkmove","all","uninitialized"].indexOf(i)>=0?r="move":t.indexOf(i)>=0&&(r="copy"),r}}function a(e,t,n,i){return Math.sqrt(Math.pow(n-e,2)+Math.pow(i-t,2))}(function(){this.dragWait=function(){Date.now()-this.mousedownEvent.time>this.editor.getDragDelay()&&this.startDrag()},this.dragWaitEnd=function(){this.editor.container.draggable=!1,this.startSelect(this.mousedownEvent.getDocumentPosition()),this.selectEnd()},this.dragReadyEnd=function(e){this.editor.$resetCursorStyle(),this.editor.unsetStyle("ace_dragging"),this.editor.renderer.setCursorStyle(""),this.dragWaitEnd()},this.startDrag=function(){this.cancelDrag=!1;var e=this.editor;e.container.draggable=!0,e.renderer.$cursorLayer.setBlinking(!1),e.setStyle("ace_dragging");var t=s.isWin?"default":"move";e.renderer.setCursorStyle(t),this.setState("dragReady")},this.onMouseDrag=function(e){var t=this.editor.container;s.isIE&&"dragReady"==this.state&&a(this.mousedownEvent.x,this.mousedownEvent.y,this.x,this.y)>3&&t.dragDrop(),"dragWait"===this.state&&a(this.mousedownEvent.x,this.mousedownEvent.y,this.x,this.y)>0&&(t.draggable=!1,this.startSelect(this.mousedownEvent.getDocumentPosition()))},this.onMouseDown=function(e){if(this.$dragEnabled){this.mousedownEvent=e;var t=this.editor,n=e.inSelection(),i=e.getButton();if(1===(e.domEvent.detail||1)&&0===i&&n){if(e.editor.inMultiSelectMode&&(e.getAccelKey()||e.getShiftKey()))return;this.mousedownEvent.time=Date.now();var r=e.domEvent.target||e.domEvent.srcElement;"unselectable"in r&&(r.unselectable="on"),t.getDragDelay()?(s.isWebKit&&(this.cancelDrag=!0,t.container.draggable=!0),this.setState("dragWait")):this.startDrag(),this.captureMouse(e,this.onMouseDrag.bind(this)),e.defaultPrevented=!0}}}}).call(o.prototype),t.DragdropHandler=o})),ace.define("ace/mouse/touch_handler",["require","exports","module","ace/mouse/mouse_event","ace/lib/dom"],(function(e,t,n){"use strict";var i=e("./mouse_event").MouseEvent,r=e("../lib/dom");t.addTouchListeners=function(e,t){var n,s,o,a,l,c,u,h,d,m="scroll",p=0,g=0,f=0,E=0;function v(){var e,n,i;d||(e=window.navigator&&window.navigator.clipboard,n=!1,i=function(i){var s,o,a=i.target.getAttribute("action");if("more"==a||!n)return n=!n,s=t.getCopyText(),o=t.session.getUndoManager().hasUndo(),void d.replaceChild(r.buildDom(n?["span",!s&&["span",{class:"ace_mobile-button",action:"selectall"},"Select All"],s&&["span",{class:"ace_mobile-button",action:"copy"},"Copy"],s&&["span",{class:"ace_mobile-button",action:"cut"},"Cut"],e&&["span",{class:"ace_mobile-button",action:"paste"},"Paste"],o&&["span",{class:"ace_mobile-button",action:"undo"},"Undo"],["span",{class:"ace_mobile-button",action:"find"},"Find"],["span",{class:"ace_mobile-button",action:"openCommandPallete"},"Pallete"]]:["span"]),d.firstChild);"paste"==a?e.readText().then((function(e){t.execCommand(a,e)})):a&&("cut"!=a&&"copy"!=a||(e?e.writeText(t.getCopyText()):document.execCommand("copy")),t.execCommand(a)),d.firstChild.style.display="none",n=!1,"openCommandPallete"!=a&&t.focus()},d=r.buildDom(["div",{class:"ace_mobile-menu",ontouchstart:function(e){m="menu",e.stopPropagation(),e.preventDefault(),t.textInput.focus()},ontouchend:function(e){e.stopPropagation(),e.preventDefault(),i(e)},onclick:i},["span"],["span",{class:"ace_mobile-button",action:"more"},"..."]],t.container));var s=t.selection.cursor,o=t.renderer.textToScreenCoordinates(s.row,s.column),a=t.container.getBoundingClientRect();d.style.top=o.pageY-a.top-3+"px",d.style.right="10px",d.style.display="",d.firstChild.style.display="none",t.on("input",_)}function _(e){d&&(d.style.display="none"),t.off("input",_)}function C(){l=null,clearTimeout(l);var e=t.selection.getRange(),n=e.contains(u.row,u.column);!e.isEmpty()&&n||(t.selection.moveToPosition(u),t.selection.selectWord()),m="wait",v()}e.addEventListener("contextmenu",(function(e){h&&t.textInput.getElement().focus()})),e.addEventListener("touchstart",(function(e){var r=e.touches;if(l||r.length>1)return clearTimeout(l),l=null,o=-1,void(m="zoom");h=t.$mouseHandler.isMousePressed=!0;var c=t.renderer.layerConfig.lineHeight,d=t.renderer.layerConfig.lineHeight,v=e.timeStamp;a=v;var _=r[0],A=_.clientX,R=_.clientY;Math.abs(n-A)+Math.abs(s-R)>c&&(o=-1),n=e.clientX=A,s=e.clientY=R,f=E=0;var S=new i(e,t);if(u=S.getDocumentPosition(),v-o<500&&1==r.length&&!p)g++,e.preventDefault(),e.button=0,function(){l=null,clearTimeout(l),t.selection.moveToPosition(u);var e=g>=2?t.selection.getLineRange(u.row):t.session.getBracketRange(u);e&&!e.isEmpty()?t.selection.setRange(e):t.selection.selectWord(),m="wait"}();else{g=0;var T=t.selection.cursor,b=t.selection.isEmpty()?T:t.selection.anchor,w=t.renderer.$cursorLayer.getPixelPosition(T,!0),x=t.renderer.$cursorLayer.getPixelPosition(b,!0),y=t.renderer.scroller.getBoundingClientRect(),L=function(e,t){return(e/=d)*e+(t=t/c-.75)*t};if(e.clientXF?"cursor":"anchor"),m=F<3.5?"anchor":I<3.5?"cursor":"scroll",l=setTimeout(C,450)}o=v})),e.addEventListener("touchend",(function(e){h=t.$mouseHandler.isMousePressed=!1,c&&clearInterval(c),"zoom"==m?(m="",p=0):l?(t.selection.moveToPosition(u),p=0,v()):"scroll"==m?(p+=60,c=setInterval((function(){p--<=0&&(clearInterval(c),c=null),Math.abs(f)<.01&&(f=0),Math.abs(E)<.01&&(E=0),p<20&&(f*=.9),p<20&&(E*=.9);var e=t.session.getScrollTop();t.renderer.scrollBy(10*f,10*E),e==t.session.getScrollTop()&&(p=0)}),10),e.preventDefault(),_()):v(),clearTimeout(l),l=null})),e.addEventListener("touchmove",(function(e){l&&(clearTimeout(l),l=null);var r=e.touches;if(!(r.length>1||"zoom"==m)){var o=r[0],c=n-o.clientX,u=s-o.clientY;if("wait"==m){if(!(c*c+u*u>4))return e.preventDefault();m="cursor"}n=o.clientX,s=o.clientY,e.clientX=o.clientX,e.clientY=o.clientY;var h=e.timeStamp,d=h-a;if(a=h,"scroll"==m){var p=new i(e,t);p.speed=1,p.wheelX=c,p.wheelY=u,10*Math.abs(c)1&&(r=n[n.length-2]);var o=l[t+"Path"];return null==o?o=l.basePath:"/"==i&&(t=i=""),o&&"/"!=o.slice(-1)&&(o+="/"),o+t+i+r+this.get("suffix")},t.setModuleUrl=function(e,t){return l.$moduleUrls[e]=t},t.$loading={},t.loadModule=function(n,i){var r,o;Array.isArray(n)&&(o=n[0],n=n[1]);try{r=e(n)}catch(e){}if(r&&!t.$loading[n])return i&&i(r);if(t.$loading[n]||(t.$loading[n]=[]),t.$loading[n].push(i),!(t.$loading[n].length>1)){var a=function(){e([n],(function(e){t._emit("load.module",{name:n,module:e});var i=t.$loading[n];t.$loading[n]=null,i.forEach((function(t){t&&t(e)}))}))};if(!t.get("packaged"))return a();s.loadScript(t.moduleUrl(n,o),a),c()}};var c=function(){l.basePath||l.workerPath||l.modePath||l.themePath||Object.keys(l.$moduleUrls).length||(console.error("Unable to infer path to ace from script src,","use ace.config.set('basePath', 'path') to enable dynamic loading of modes and themes","or with webpack use ace/webpack-resolver"),c=function(){})};function u(r){if(a&&a.document){l.packaged=r||e.packaged||i.packaged||a.define&&n.amdD.packaged;for(var s,o={},c="",u=document.currentScript||document._currentScript,h=(u&&u.ownerDocument||document).getElementsByTagName("script"),d=0;d=e){for(s=h+1;s=e;)s++;for(a=h,l=s-1;a=t.length||2!=(l=n[r-1])&&3!=l||2!=(c=t[r+1])&&3!=c?4:(s&&(c=3),c==l?c:4);case 10:return 2==(l=r>0?n[r-1]:5)&&r+10&&2==n[r-1])return 2;if(s)return 4;for(m=r+1,d=t.length;m=1425&&g<=2303||64286==g;if(l=t[m],f&&(1==l||7==l))return 1}return r<1||5==(l=t[r-1])?4:n[r-1];case 5:return s=!1,o=!0,i;case 6:return a=!0,4;case 13:case 14:case 16:case 17:case 15:s=!1;case h:return 4}}function f(e){var t=e.charCodeAt(0),n=t>>8;return 0==n?t>191?0:d[t]:5==n?/[\u0591-\u05f4]/.test(e)?1:0:6==n?/[\u0610-\u061a\u064b-\u065f\u06d6-\u06e4\u06e7-\u06ed]/.test(e)?12:/[\u0660-\u0669\u066b-\u066c]/.test(e)?3:1642==t?u:/[\u06f0-\u06f9]/.test(e)?2:7:32==n&&t<=8287?m[255&t]:254==n&&t>=65136?7:4}t.L=0,t.R=1,t.EN=2,t.ON_R=3,t.AN=4,t.R_H=5,t.B=6,t.RLE=7,t.DOT="·",t.doBidiReorder=function(e,n,u){if(e.length<2)return{};var d=e.split(""),m=new Array(d.length),E=new Array(d.length),v=[];i=u?1:0,function(e,t,n,u){var h=i?c:l,d=null,m=null,p=null,E=0,v=null,_=-1,C=null,A=null,R=[];if(!u)for(C=0,u=[];C0)if(16==v){for(C=_;C-1){for(C=_;C=0&&8==u[S];S--)t[S]=i}}(d,v,d.length,n);for(var _=0;_7&&n[_]<13||4===n[_]||n[_]===h)?v[_]=t.ON_R:_>0&&"ل"===d[_-1]&&/\u0622|\u0623|\u0625|\u0627/.test(d[_])&&(v[_-1]=v[_]=t.R_H,_++);for(d[d.length-1]===t.DOT&&(v[d.length-1]=t.B),"‫"===d[0]&&(v[0]=t.RLE),_=0;_=0&&(e=this.session.$docRowCache[n])}return e},this.getSplitIndex=function(){var e=0,t=this.session.$screenRowCache;if(t.length)for(var n,i=this.session.$getRowCacheIndex(t,this.currentRow);this.currentRow-e>0&&(n=this.session.$getRowCacheIndex(t,this.currentRow-e-1))===i;)i=n,e++;else e=this.currentRow;return e},this.updateRowLine=function(e,t){void 0===e&&(e=this.getDocumentRow());var n=e===this.session.getLength()-1?this.EOF:this.EOL;if(this.wrapIndent=0,this.line=this.session.getLine(e),this.isRtlDir=this.$isRtl||this.line.charAt(0)===this.RLE,this.session.$useWrapMode){var s=this.session.$wrapData[e];s&&(void 0===t&&(t=this.getSplitIndex()),t>0&&s.length?(this.wrapIndent=s.indent,this.wrapOffset=this.wrapIndent*this.charWidths[i.L],this.line=tt?this.session.getOverwrite()?e:e-1:t,r=i.getVisualFromLogicalIdx(n,this.bidiMap),s=this.bidiMap.bidiLevels,o=0;!this.session.getOverwrite()&&e<=t&&s[r]%2!=0&&r++;for(var a=0;at&&s[r]%2==0&&(o+=this.charWidths[s[r]]),this.wrapIndent&&(o+=this.isRtlDir?-1*this.wrapOffset:this.wrapOffset),this.isRtlDir&&(o+=this.rtlLineOffset),o},this.getSelections=function(e,t){var n,i=this.bidiMap,r=i.bidiLevels,s=[],o=0,a=Math.min(e,t)-this.wrapIndent,l=Math.max(e,t)-this.wrapIndent,c=!1,u=!1,h=0;this.wrapIndent&&(o+=this.isRtlDir?-1*this.wrapOffset:this.wrapOffset);for(var d,m=0;m=a&&dn+s/2;){if(n+=s,i===r.length-1){s=0;break}s=this.charWidths[r[++i]]}return i>0&&r[i-1]%2!=0&&r[i]%2==0?(e0&&r[i-1]%2==0&&r[i]%2!=0?t=1+(e>n?this.bidiMap.logicalFromVisual[i]:this.bidiMap.logicalFromVisual[i-1]):this.isRtlDir&&i===r.length-1&&0===s&&r[i-1]%2==0||!this.isRtlDir&&0===i&&r[i]%2!=0?t=1+this.bidiMap.logicalFromVisual[i]:(i>0&&r[i-1]%2!=0&&0!==s&&i--,t=this.bidiMap.logicalFromVisual[i]),0===t&&this.isRtlDir&&t++,t+this.wrapIndent}}).call(o.prototype),t.BidiHandler=o})),ace.define("ace/selection",["require","exports","module","ace/lib/oop","ace/lib/lang","ace/lib/event_emitter","ace/range"],(function(e,t,n){"use strict";var i=e("./lib/oop"),r=e("./lib/lang"),s=e("./lib/event_emitter").EventEmitter,o=e("./range").Range,a=function(e){this.session=e,this.doc=e.getDocument(),this.clearSelection(),this.cursor=this.lead=this.doc.createAnchor(0,0),this.anchor=this.doc.createAnchor(0,0),this.$silent=!1;var t=this;this.cursor.on("change",(function(e){t.$cursorChanged=!0,t.$silent||t._emit("changeCursor"),t.$isEmpty||t.$silent||t._emit("changeSelection"),t.$keepDesiredColumnOnChange||e.old.column==e.value.column||(t.$desiredColumn=null)})),this.anchor.on("change",(function(){t.$anchorChanged=!0,t.$isEmpty||t.$silent||t._emit("changeSelection")}))};(function(){i.implement(this,s),this.isEmpty=function(){return this.$isEmpty||this.anchor.row==this.lead.row&&this.anchor.column==this.lead.column},this.isMultiLine=function(){return!this.$isEmpty&&this.anchor.row!=this.cursor.row},this.getCursor=function(){return this.lead.getPosition()},this.setSelectionAnchor=function(e,t){this.$isEmpty=!1,this.anchor.setPosition(e,t)},this.getAnchor=this.getSelectionAnchor=function(){return this.$isEmpty?this.getSelectionLead():this.anchor.getPosition()},this.getSelectionLead=function(){return this.lead.getPosition()},this.isBackwards=function(){var e=this.anchor,t=this.lead;return e.row>t.row||e.row==t.row&&e.column>t.column},this.getRange=function(){var e=this.anchor,t=this.lead;return this.$isEmpty?o.fromPoints(t,t):this.isBackwards()?o.fromPoints(t,e):o.fromPoints(e,t)},this.clearSelection=function(){this.$isEmpty||(this.$isEmpty=!0,this._emit("changeSelection"))},this.selectAll=function(){this.$setSelection(0,0,Number.MAX_VALUE,Number.MAX_VALUE)},this.setRange=this.setSelectionRange=function(e,t){var n=t?e.end:e.start,i=t?e.start:e.end;this.$setSelection(n.row,n.column,i.row,i.column)},this.$setSelection=function(e,t,n,i){var r=this.$isEmpty,s=this.inMultiSelectMode;this.$silent=!0,this.$cursorChanged=this.$anchorChanged=!1,this.anchor.setPosition(e,t),this.cursor.setPosition(n,i),this.$isEmpty=!o.comparePoints(this.anchor,this.cursor),this.$silent=!1,this.$cursorChanged&&this._emit("changeCursor"),(this.$cursorChanged||this.$anchorChanged||r!=this.$isEmpty||s)&&this._emit("changeSelection")},this.$moveSelection=function(e){var t=this.lead;this.$isEmpty&&this.setSelectionAnchor(t.row,t.column),e.call(this)},this.selectTo=function(e,t){this.$moveSelection((function(){this.moveCursorTo(e,t)}))},this.selectToPosition=function(e){this.$moveSelection((function(){this.moveCursorToPosition(e)}))},this.moveTo=function(e,t){this.clearSelection(),this.moveCursorTo(e,t)},this.moveToPosition=function(e){this.clearSelection(),this.moveCursorToPosition(e)},this.selectUp=function(){this.$moveSelection(this.moveCursorUp)},this.selectDown=function(){this.$moveSelection(this.moveCursorDown)},this.selectRight=function(){this.$moveSelection(this.moveCursorRight)},this.selectLeft=function(){this.$moveSelection(this.moveCursorLeft)},this.selectLineStart=function(){this.$moveSelection(this.moveCursorLineStart)},this.selectLineEnd=function(){this.$moveSelection(this.moveCursorLineEnd)},this.selectFileEnd=function(){this.$moveSelection(this.moveCursorFileEnd)},this.selectFileStart=function(){this.$moveSelection(this.moveCursorFileStart)},this.selectWordRight=function(){this.$moveSelection(this.moveCursorWordRight)},this.selectWordLeft=function(){this.$moveSelection(this.moveCursorWordLeft)},this.getWordRange=function(e,t){if(void 0===t){var n=e||this.lead;e=n.row,t=n.column}return this.session.getWordRange(e,t)},this.selectWord=function(){this.setSelectionRange(this.getWordRange())},this.selectAWord=function(){var e=this.getCursor(),t=this.session.getAWordRange(e.row,e.column);this.setSelectionRange(t)},this.getLineRange=function(e,t){var n,i="number"==typeof e?e:this.lead.row,r=this.session.getFoldLine(i);return r?(i=r.start.row,n=r.end.row):n=i,!0===t?new o(i,0,n,this.session.getLine(n).length):new o(i,0,n+1,0)},this.selectLine=function(){this.setSelectionRange(this.getLineRange())},this.moveCursorUp=function(){this.moveCursorBy(-1,0)},this.moveCursorDown=function(){this.moveCursorBy(1,0)},this.wouldMoveIntoSoftTab=function(e,t,n){var i=e.column,r=e.column+t;return n<0&&(i=e.column-t,r=e.column),this.session.isTabStop(e)&&this.doc.getLine(e.row).slice(i,r).split(" ").length-1==t},this.moveCursorLeft=function(){var e,t=this.lead.getPosition();if(e=this.session.getFoldAt(t.row,t.column,-1))this.moveCursorTo(e.start.row,e.start.column);else if(0===t.column)t.row>0&&this.moveCursorTo(t.row-1,this.doc.getLine(t.row-1).length);else{var n=this.session.getTabSize();this.wouldMoveIntoSoftTab(t,n,-1)&&!this.session.getNavigateWithinSoftTabs()?this.moveCursorBy(0,-n):this.moveCursorBy(0,-1)}},this.moveCursorRight=function(){var e,t=this.lead.getPosition();if(e=this.session.getFoldAt(t.row,t.column,1))this.moveCursorTo(e.end.row,e.end.column);else if(this.lead.column==this.doc.getLine(this.lead.row).length)this.lead.row0&&(t.column=i)}}this.moveCursorTo(t.row,t.column)},this.moveCursorFileEnd=function(){var e=this.doc.getLength()-1,t=this.doc.getLine(e).length;this.moveCursorTo(e,t)},this.moveCursorFileStart=function(){this.moveCursorTo(0,0)},this.moveCursorLongWordRight=function(){var e=this.lead.row,t=this.lead.column,n=this.doc.getLine(e),i=n.substring(t);this.session.nonTokenRe.lastIndex=0,this.session.tokenRe.lastIndex=0;var r=this.session.getFoldAt(e,t,1);if(r)this.moveCursorTo(r.end.row,r.end.column);else{if(this.session.nonTokenRe.exec(i)&&(t+=this.session.nonTokenRe.lastIndex,this.session.nonTokenRe.lastIndex=0,i=n.substring(t)),t>=n.length)return this.moveCursorTo(e,n.length),this.moveCursorRight(),void(e0&&this.moveCursorWordLeft());this.session.tokenRe.exec(s)&&(n-=this.session.tokenRe.lastIndex,this.session.tokenRe.lastIndex=0),this.moveCursorTo(t,n)}},this.$shortWordEndIndex=function(e){var t,n=0,i=/\s/,r=this.session.tokenRe;if(r.lastIndex=0,this.session.tokenRe.exec(e))n=this.session.tokenRe.lastIndex;else{for(;(t=e[n])&&i.test(t);)n++;if(n<1)for(r.lastIndex=0;(t=e[n])&&!r.test(t);)if(r.lastIndex=0,n++,i.test(t)){if(n>2){n--;break}for(;(t=e[n])&&i.test(t);)n++;if(n>2)break}}return r.lastIndex=0,n},this.moveCursorShortWordRight=function(){var e=this.lead.row,t=this.lead.column,n=this.doc.getLine(e),i=n.substring(t),r=this.session.getFoldAt(e,t,1);if(r)return this.moveCursorTo(r.end.row,r.end.column);if(t==n.length){var s=this.doc.getLength();do{e++,i=this.doc.getLine(e)}while(e0&&/^\s*$/.test(i));n=i.length,/\s+$/.test(i)||(i="")}var s=r.stringReverse(i),o=this.$shortWordEndIndex(s);return this.moveCursorTo(t,n-o)},this.moveCursorWordRight=function(){this.session.$selectLongWords?this.moveCursorLongWordRight():this.moveCursorShortWordRight()},this.moveCursorWordLeft=function(){this.session.$selectLongWords?this.moveCursorLongWordLeft():this.moveCursorShortWordLeft()},this.moveCursorBy=function(e,t){var n,i=this.session.documentToScreenPosition(this.lead.row,this.lead.column);0===t&&(0!==e&&(this.session.$bidiHandler.isBidiRow(i.row,this.lead.row)?(n=this.session.$bidiHandler.getPosLeft(i.column),i.column=Math.round(n/this.session.$bidiHandler.charWidths[0])):n=i.column*this.session.$bidiHandler.charWidths[0]),this.$desiredColumn?i.column=this.$desiredColumn:this.$desiredColumn=i.column);var r=this.session.screenToDocumentPosition(i.row+e,i.column,n);0!==e&&0===t&&r.row===this.lead.row&&r.column===this.lead.column&&this.session.lineWidgets&&this.session.lineWidgets[r.row]&&(r.row>0||e>0)&&r.row++,this.moveCursorTo(r.row,r.column+t,0===t)},this.moveCursorToPosition=function(e){this.moveCursorTo(e.row,e.column)},this.moveCursorTo=function(e,t,n){var i=this.session.getFoldAt(e,t,1);i&&(e=i.start.row,t=i.start.column),this.$keepDesiredColumnOnChange=!0;var r=this.session.getLine(e);/[\uDC00-\uDFFF]/.test(r.charAt(t))&&r.charAt(t-1)&&(this.lead.row==e&&this.lead.column==t+1?t-=1:t+=1),this.lead.setPosition(e,t),this.$keepDesiredColumnOnChange=!1,n||(this.$desiredColumn=null)},this.moveCursorToScreen=function(e,t,n){var i=this.session.screenToDocumentPosition(e,t);this.moveCursorTo(i.row,i.column,n)},this.detach=function(){this.lead.detach(),this.anchor.detach(),this.session=this.doc=null},this.fromOrientedRange=function(e){this.setSelectionRange(e,e.cursor==e.start),this.$desiredColumn=e.desiredColumn||this.$desiredColumn},this.toOrientedRange=function(e){var t=this.getRange();return e?(e.start.column=t.start.column,e.start.row=t.start.row,e.end.column=t.end.column,e.end.row=t.end.row):e=t,e.cursor=this.isBackwards()?e.start:e.end,e.desiredColumn=this.$desiredColumn,e},this.getRangeOfMovements=function(e){var t=this.getCursor();try{e(this);var n=this.getCursor();return o.fromPoints(t,n)}catch(e){return o.fromPoints(t,t)}finally{this.moveCursorToPosition(t)}},this.toJSON=function(){if(this.rangeCount)var e=this.ranges.map((function(e){var t=e.clone();return t.isBackwards=e.cursor==e.start,t}));else(e=this.getRange()).isBackwards=this.isBackwards();return e},this.fromJSON=function(e){if(null==e.start){if(this.rangeList&&e.length>1){this.toSingleRange(e[0]);for(var t=e.length;t--;){var n=o.fromPoints(e[t].start,e[t].end);e[t].isBackwards&&(n.cursor=n.start),this.addRange(n,!0)}return}e=e[0]}this.rangeList&&this.toSingleRange(e),this.setSelectionRange(e,e.isBackwards)},this.isEqual=function(e){if((e.length||this.rangeCount)&&e.length!=this.rangeCount)return!1;if(!e.length||!this.ranges)return this.getRange().isEqual(e);for(var t=this.ranges.length;t--;)if(!this.ranges[t].isEqual(e[t]))return!1;return!0}}).call(a.prototype),t.Selection=a})),ace.define("ace/tokenizer",["require","exports","module","ace/config"],(function(e,t,n){"use strict";var i=e("./config"),r=2e3,s=function(e){for(var t in this.states=e,this.regExps={},this.matchMappings={},this.states){for(var n=this.states[t],i=[],r=0,s=this.matchMappings[t]={defaultToken:"text"},o="g",a=[],l=0;l1?this.$applyToken:c.token),h>1&&(/\\\d/.test(c.regex)?u=c.regex.replace(/\\([0-9]+)/g,(function(e,t){return"\\"+(parseInt(t,10)+r+1)})):(h=1,u=this.removeCapturingGroups(c.regex)),c.splitRegex||"string"==typeof c.token||a.push(c)),s[r]=l,r+=h,i.push(u),c.onMatch||(c.onMatch=null)}}i.length||(s[0]=0,i.push("$")),a.forEach((function(e){e.splitRegex=this.createSplitterRegexp(e.regex,o)}),this),this.regExps[t]=new RegExp("("+i.join(")|(")+")|($)",o)}};(function(){this.$setMaxTokenCount=function(e){r=0|e},this.$applyToken=function(e){var t=this.splitRegex.exec(e).slice(1),n=this.token.apply(this,t);if("string"==typeof n)return[{type:n,value:e}];for(var i=[],r=0,s=n.length;ru){var E=e.substring(u,f-g.length);d.type==m?d.value+=E:(d.type&&c.push(d),d={type:m,value:E})}for(var v=0;vr){for(h>2*e.length&&this.reportError("infinite loop with in ace tokenizer",{startState:t,line:e});u1&&n[0]!==i&&n.unshift("#tmp",i),{tokens:c,state:n.length?n:i}},this.reportError=i.reportError}).call(s.prototype),t.Tokenizer=s})),ace.define("ace/mode/text_highlight_rules",["require","exports","module","ace/lib/lang"],(function(e,t,n){"use strict";var i=e("../lib/lang"),r=function(){this.$rules={start:[{token:"empty_line",regex:"^$"},{defaultToken:"text"}]}};(function(){this.addRules=function(e,t){if(t)for(var n in e){for(var i=e[n],r=0;r=this.$rowTokens.length;){if(this.$row+=1,e||(e=this.$session.getLength()),this.$row>=e)return this.$row=e-1,null;this.$rowTokens=this.$session.getTokens(this.$row),this.$tokenIndex=0}return this.$rowTokens[this.$tokenIndex]},this.getCurrentToken=function(){return this.$rowTokens[this.$tokenIndex]},this.getCurrentTokenRow=function(){return this.$row},this.getCurrentTokenColumn=function(){var e=this.$rowTokens,t=this.$tokenIndex,n=e[t].start;if(void 0!==n)return n;for(n=0;t>0;)n+=e[t-=1].value.length;return n},this.getCurrentTokenPosition=function(){return{row:this.$row,column:this.getCurrentTokenColumn()}},this.getCurrentTokenRange=function(){var e=this.$rowTokens[this.$tokenIndex],t=this.getCurrentTokenColumn();return new i(this.$row,t,this.$row,t+e.value.length)}}).call(r.prototype),t.TokenIterator=r})),ace.define("ace/mode/behaviour/cstyle",["require","exports","module","ace/lib/oop","ace/mode/behaviour","ace/token_iterator","ace/lib/lang"],(function(e,t,n){"use strict";var i,r=e("../../lib/oop"),s=e("../behaviour").Behaviour,o=e("../../token_iterator").TokenIterator,a=e("../../lib/lang"),l=["text","paren.rparen","rparen","paren","punctuation.operator"],c=["text","paren.rparen","rparen","paren","punctuation.operator","comment"],u={},h={'"':'"',"'":"'"},d=function(e){var t=-1;if(e.multiSelect&&(t=e.selection.index,u.rangeCount!=e.multiSelect.rangeCount&&(u={rangeCount:e.multiSelect.rangeCount})),u[t])return i=u[t];i=u[t]={autoInsertedBrackets:0,autoInsertedRow:-1,autoInsertedLineEnd:"",maybeInsertedBrackets:0,maybeInsertedRow:-1,maybeInsertedLineStart:"",maybeInsertedLineEnd:""}},m=function(e,t,n,i){var r=e.end.row-e.start.row;return{text:n+t+i,selection:[0,e.start.column+1,r,e.end.column+(r?0:1)]}},p=function(e){this.add("braces","insertion",(function(t,n,r,s,o){var l=r.getCursorPosition(),c=s.doc.getLine(l.row);if("{"==o){d(r);var u=r.getSelectionRange(),h=s.doc.getTextRange(u);if(""!==h&&"{"!==h&&r.getWrapBehavioursEnabled())return m(u,h,"{","}");if(p.isSaneInsertion(r,s))return/[\]\}\)]/.test(c[l.column])||r.inMultiSelectMode||e&&e.braces?(p.recordAutoInsert(r,s,"}"),{text:"{}",selection:[1,1]}):(p.recordMaybeInsert(r,s,"{"),{text:"{",selection:[1,1]})}else if("}"==o){if(d(r),"}"==c.substring(l.column,l.column+1)&&null!==s.$findOpeningBracket("}",{column:l.column+1,row:l.row})&&p.isAutoInsertedClosing(l,c,o))return p.popAutoInsertedClosing(),{text:"",selection:[1,1]}}else{if("\n"==o||"\r\n"==o){d(r);var g="";if(p.isMaybeInsertedClosing(l,c)&&(g=a.stringRepeat("}",i.maybeInsertedBrackets),p.clearMaybeInsertedClosing()),"}"===c.substring(l.column,l.column+1)){var f=s.findMatchingBracket({row:l.row,column:l.column+1},"}");if(!f)return null;var E=this.$getIndent(s.getLine(f.row))}else{if(!g)return void p.clearMaybeInsertedClosing();E=this.$getIndent(c)}var v=E+s.getTabString();return{text:"\n"+v+"\n"+E+g,selection:[1,v.length,1,v.length]}}p.clearMaybeInsertedClosing()}})),this.add("braces","deletion",(function(e,t,n,r,s){var o=r.doc.getTextRange(s);if(!s.isMultiLine()&&"{"==o){if(d(n),"}"==r.doc.getLine(s.start.row).substring(s.end.column,s.end.column+1))return s.end.column++,s;i.maybeInsertedBrackets--}})),this.add("parens","insertion",(function(e,t,n,i,r){if("("==r){d(n);var s=n.getSelectionRange(),o=i.doc.getTextRange(s);if(""!==o&&n.getWrapBehavioursEnabled())return m(s,o,"(",")");if(p.isSaneInsertion(n,i))return p.recordAutoInsert(n,i,")"),{text:"()",selection:[1,1]}}else if(")"==r){d(n);var a=n.getCursorPosition(),l=i.doc.getLine(a.row);if(")"==l.substring(a.column,a.column+1)&&null!==i.$findOpeningBracket(")",{column:a.column+1,row:a.row})&&p.isAutoInsertedClosing(a,l,r))return p.popAutoInsertedClosing(),{text:"",selection:[1,1]}}})),this.add("parens","deletion",(function(e,t,n,i,r){var s=i.doc.getTextRange(r);if(!r.isMultiLine()&&"("==s&&(d(n),")"==i.doc.getLine(r.start.row).substring(r.start.column+1,r.start.column+2)))return r.end.column++,r})),this.add("brackets","insertion",(function(e,t,n,i,r){if("["==r){d(n);var s=n.getSelectionRange(),o=i.doc.getTextRange(s);if(""!==o&&n.getWrapBehavioursEnabled())return m(s,o,"[","]");if(p.isSaneInsertion(n,i))return p.recordAutoInsert(n,i,"]"),{text:"[]",selection:[1,1]}}else if("]"==r){d(n);var a=n.getCursorPosition(),l=i.doc.getLine(a.row);if("]"==l.substring(a.column,a.column+1)&&null!==i.$findOpeningBracket("]",{column:a.column+1,row:a.row})&&p.isAutoInsertedClosing(a,l,r))return p.popAutoInsertedClosing(),{text:"",selection:[1,1]}}})),this.add("brackets","deletion",(function(e,t,n,i,r){var s=i.doc.getTextRange(r);if(!r.isMultiLine()&&"["==s&&(d(n),"]"==i.doc.getLine(r.start.row).substring(r.start.column+1,r.start.column+2)))return r.end.column++,r})),this.add("string_dquotes","insertion",(function(e,t,n,i,r){var s=i.$mode.$quotes||h;if(1==r.length&&s[r]){if(this.lineCommentStart&&-1!=this.lineCommentStart.indexOf(r))return;d(n);var o=r,a=n.getSelectionRange(),l=i.doc.getTextRange(a);if(!(""===l||1==l.length&&s[l])&&n.getWrapBehavioursEnabled())return m(a,l,o,o);if(!l){var c=n.getCursorPosition(),u=i.doc.getLine(c.row),p=u.substring(c.column-1,c.column),g=u.substring(c.column,c.column+1),f=i.getTokenAt(c.row,c.column),E=i.getTokenAt(c.row,c.column+1);if("\\"==p&&f&&/escape/.test(f.type))return null;var v,_=f&&/string|escape/.test(f.type),C=!E||/string|escape/.test(E.type);if(g==o)(v=_!==C)&&/string\.end/.test(E.type)&&(v=!1);else{if(_&&!C)return null;if(_&&C)return null;var A=i.$mode.tokenRe;A.lastIndex=0;var R=A.test(p);A.lastIndex=0;var S=A.test(p);if(R||S)return null;if(g&&!/[\s;,.})\]\\]/.test(g))return null;var T=u[c.column-2];if(p==o&&(T==o||A.test(T)))return null;v=!0}return{text:v?o+o:"",selection:[1,1]}}}})),this.add("string_dquotes","deletion",(function(e,t,n,i,r){var s=i.$mode.$quotes||h,o=i.doc.getTextRange(r);if(!r.isMultiLine()&&s.hasOwnProperty(o)&&(d(n),i.doc.getLine(r.start.row).substring(r.start.column+1,r.start.column+2)==o))return r.end.column++,r}))};p.isSaneInsertion=function(e,t){var n=e.getCursorPosition(),i=new o(t,n.row,n.column);if(!this.$matchTokenType(i.getCurrentToken()||"text",l)){if(/[)}\]]/.test(e.session.getLine(n.row)[n.column]))return!0;var r=new o(t,n.row,n.column+1);if(!this.$matchTokenType(r.getCurrentToken()||"text",l))return!1}return i.stepForward(),i.getCurrentTokenRow()!==n.row||this.$matchTokenType(i.getCurrentToken()||"text",c)},p.$matchTokenType=function(e,t){return t.indexOf(e.type||e)>-1},p.recordAutoInsert=function(e,t,n){var r=e.getCursorPosition(),s=t.doc.getLine(r.row);this.isAutoInsertedClosing(r,s,i.autoInsertedLineEnd[0])||(i.autoInsertedBrackets=0),i.autoInsertedRow=r.row,i.autoInsertedLineEnd=n+s.substr(r.column),i.autoInsertedBrackets++},p.recordMaybeInsert=function(e,t,n){var r=e.getCursorPosition(),s=t.doc.getLine(r.row);this.isMaybeInsertedClosing(r,s)||(i.maybeInsertedBrackets=0),i.maybeInsertedRow=r.row,i.maybeInsertedLineStart=s.substr(0,r.column)+n,i.maybeInsertedLineEnd=s.substr(r.column),i.maybeInsertedBrackets++},p.isAutoInsertedClosing=function(e,t,n){return i.autoInsertedBrackets>0&&e.row===i.autoInsertedRow&&n===i.autoInsertedLineEnd[0]&&t.substr(e.column)===i.autoInsertedLineEnd},p.isMaybeInsertedClosing=function(e,t){return i.maybeInsertedBrackets>0&&e.row===i.maybeInsertedRow&&t.substr(e.column)===i.maybeInsertedLineEnd&&t.substr(0,e.column)==i.maybeInsertedLineStart},p.popAutoInsertedClosing=function(){i.autoInsertedLineEnd=i.autoInsertedLineEnd.substr(1),i.autoInsertedBrackets--},p.clearMaybeInsertedClosing=function(){i&&(i.maybeInsertedBrackets=0,i.maybeInsertedRow=-1)},r.inherits(p,s),t.CstyleBehaviour=p})),ace.define("ace/unicode",["require","exports","module"],(function(e,t,n){"use strict";for(var i=[48,9,8,25,5,0,2,25,48,0,11,0,5,0,6,22,2,30,2,457,5,11,15,4,8,0,2,0,18,116,2,1,3,3,9,0,2,2,2,0,2,19,2,82,2,138,2,4,3,155,12,37,3,0,8,38,10,44,2,0,2,1,2,1,2,0,9,26,6,2,30,10,7,61,2,9,5,101,2,7,3,9,2,18,3,0,17,58,3,100,15,53,5,0,6,45,211,57,3,18,2,5,3,11,3,9,2,1,7,6,2,2,2,7,3,1,3,21,2,6,2,0,4,3,3,8,3,1,3,3,9,0,5,1,2,4,3,11,16,2,2,5,5,1,3,21,2,6,2,1,2,1,2,1,3,0,2,4,5,1,3,2,4,0,8,3,2,0,8,15,12,2,2,8,2,2,2,21,2,6,2,1,2,4,3,9,2,2,2,2,3,0,16,3,3,9,18,2,2,7,3,1,3,21,2,6,2,1,2,4,3,8,3,1,3,2,9,1,5,1,2,4,3,9,2,0,17,1,2,5,4,2,2,3,4,1,2,0,2,1,4,1,4,2,4,11,5,4,4,2,2,3,3,0,7,0,15,9,18,2,2,7,2,2,2,22,2,9,2,4,4,7,2,2,2,3,8,1,2,1,7,3,3,9,19,1,2,7,2,2,2,22,2,9,2,4,3,8,2,2,2,3,8,1,8,0,2,3,3,9,19,1,2,7,2,2,2,22,2,15,4,7,2,2,2,3,10,0,9,3,3,9,11,5,3,1,2,17,4,23,2,8,2,0,3,6,4,0,5,5,2,0,2,7,19,1,14,57,6,14,2,9,40,1,2,0,3,1,2,0,3,0,7,3,2,6,2,2,2,0,2,0,3,1,2,12,2,2,3,4,2,0,2,5,3,9,3,1,35,0,24,1,7,9,12,0,2,0,2,0,5,9,2,35,5,19,2,5,5,7,2,35,10,0,58,73,7,77,3,37,11,42,2,0,4,328,2,3,3,6,2,0,2,3,3,40,2,3,3,32,2,3,3,6,2,0,2,3,3,14,2,56,2,3,3,66,5,0,33,15,17,84,13,619,3,16,2,25,6,74,22,12,2,6,12,20,12,19,13,12,2,2,2,1,13,51,3,29,4,0,5,1,3,9,34,2,3,9,7,87,9,42,6,69,11,28,4,11,5,11,11,39,3,4,12,43,5,25,7,10,38,27,5,62,2,28,3,10,7,9,14,0,89,75,5,9,18,8,13,42,4,11,71,55,9,9,4,48,83,2,2,30,14,230,23,280,3,5,3,37,3,5,3,7,2,0,2,0,2,0,2,30,3,52,2,6,2,0,4,2,2,6,4,3,3,5,5,12,6,2,2,6,67,1,20,0,29,0,14,0,17,4,60,12,5,0,4,11,18,0,5,0,3,9,2,0,4,4,7,0,2,0,2,0,2,3,2,10,3,3,6,4,5,0,53,1,2684,46,2,46,2,132,7,6,15,37,11,53,10,0,17,22,10,6,2,6,2,6,2,6,2,6,2,6,2,6,2,6,2,31,48,0,470,1,36,5,2,4,6,1,5,85,3,1,3,2,2,89,2,3,6,40,4,93,18,23,57,15,513,6581,75,20939,53,1164,68,45,3,268,4,27,21,31,3,13,13,1,2,24,9,69,11,1,38,8,3,102,3,1,111,44,25,51,13,68,12,9,7,23,4,0,5,45,3,35,13,28,4,64,15,10,39,54,10,13,3,9,7,22,4,1,5,66,25,2,227,42,2,1,3,9,7,11171,13,22,5,48,8453,301,3,61,3,105,39,6,13,4,6,11,2,12,2,4,2,0,2,1,2,1,2,107,34,362,19,63,3,53,41,11,5,15,17,6,13,1,25,2,33,4,2,134,20,9,8,25,5,0,2,25,12,88,4,5,3,5,3,5,3,2],r=0,s=[],o=0;o2?i%c!=c-1:i%c==0})}else{if(!this.blockComment)return!1;var m=this.blockComment.start,p=this.blockComment.end,g=new RegExp("^(\\s*)(?:"+l.escapeRegExp(m)+")"),f=new RegExp("(?:"+l.escapeRegExp(p)+")\\s*$"),E=function(e,t){_(e,t)||s&&!/\S/.test(e)||(r.insertInLine({row:t,column:e.length},p),r.insertInLine({row:t,column:a},m))},v=function(e,t){var n;(n=e.match(f))&&r.removeInLine(t,e.length-n[0].length,e.length),(n=e.match(g))&&r.removeInLine(t,n[1].length,n[0].length)},_=function(e,n){if(g.test(e))return!0;for(var i=t.getTokens(n),r=0;re.length&&(A=e.length)})),a==1/0&&(a=A,s=!1,o=!1),u&&a%c!=0&&(a=Math.floor(a/c)*c),C(o?v:E)},this.toggleBlockComment=function(e,t,n,i){var r=this.blockComment;if(r){!r.start&&r[0]&&(r=r[0]);var s,o,a=(g=new c(t,i.row,i.column)).getCurrentToken(),l=(t.selection,t.selection.toOrientedRange());if(a&&/comment/.test(a.type)){for(var h,d;a&&/comment/.test(a.type);){if(-1!=(f=a.value.indexOf(r.start))){var m=g.getCurrentTokenRow(),p=g.getCurrentTokenColumn()+f;h=new u(m,p,m,p+r.start.length);break}a=g.stepBackward()}var g;for(a=(g=new c(t,i.row,i.column)).getCurrentToken();a&&/comment/.test(a.type);){var f;if(-1!=(f=a.value.indexOf(r.end))){m=g.getCurrentTokenRow(),p=g.getCurrentTokenColumn()+f,d=new u(m,p,m,p+r.end.length);break}a=g.stepForward()}d&&t.remove(d),h&&(t.remove(h),s=h.start.row,o=-r.start.length)}else o=r.start.length,s=n.start.row,t.insert(n.end,r.end),t.insert(n.start,r.start);l.start.row==s&&(l.start.column+=o),l.end.row==s&&(l.end.column+=o),t.selection.fromOrientedRange(l)}},this.getNextLineIndent=function(e,t,n){return this.$getIndent(t)},this.checkOutdent=function(e,t,n){return!1},this.autoOutdent=function(e,t,n){},this.$getIndent=function(e){return e.match(/^\s*/)[0]},this.createWorker=function(e){return null},this.createModeDelegates=function(e){for(var t in this.$embeds=[],this.$modes={},e)if(e[t]){var n=e[t],r=n.prototype.$id,s=i.$modes[r];s||(i.$modes[r]=s=new n),i.$modes[t]||(i.$modes[t]=s),this.$embeds.push(t),this.$modes[t]=s}var o=["toggleBlockComment","toggleCommentLines","getNextLineIndent","checkOutdent","autoOutdent","transformAction","getCompletions"];for(t=0;tthis.row)){var n=function(t,n,i){var r="insert"==t.action,s=(r?1:-1)*(t.end.row-t.start.row),o=(r?1:-1)*(t.end.column-t.start.column),a=t.start,l=r?a:t.end;return e(n,a,i)?{row:n.row,column:n.column}:e(l,n,!i)?{row:n.row+s,column:n.column+(n.row==l.row?o:0)}:{row:a.row,column:a.column}}(t,{row:this.row,column:this.column},this.$insertRight);this.setPosition(n.row,n.column,!0)}},this.setPosition=function(e,t,n){var i;if(i=n?{row:e,column:t}:this.$clipPositionToDocument(e,t),this.row!=i.row||this.column!=i.column){var r={row:this.row,column:this.column};this.row=i.row,this.column=i.column,this._signal("change",{old:r,value:i})}},this.detach=function(){this.document.removeEventListener("change",this.$onChange)},this.attach=function(e){this.document=e||this.document,this.document.on("change",this.$onChange)},this.$clipPositionToDocument=function(e,t){var n={};return e>=this.document.getLength()?(n.row=Math.max(0,this.document.getLength()-1),n.column=this.document.getLine(n.row).length):e<0?(n.row=0,n.column=0):(n.row=e,n.column=Math.min(this.document.getLine(n.row).length,Math.max(0,t))),t<0&&(n.column=0),n}}).call(s.prototype)})),ace.define("ace/document",["require","exports","module","ace/lib/oop","ace/apply_delta","ace/lib/event_emitter","ace/range","ace/anchor"],(function(e,t,n){"use strict";var i=e("./lib/oop"),r=e("./apply_delta").applyDelta,s=e("./lib/event_emitter").EventEmitter,o=e("./range").Range,a=e("./anchor").Anchor,l=function(e){this.$lines=[""],0===e.length?this.$lines=[""]:Array.isArray(e)?this.insertMergedLines({row:0,column:0},e):this.insert({row:0,column:0},e)};(function(){i.implement(this,s),this.setValue=function(e){var t=this.getLength()-1;this.remove(new o(0,0,t,this.getLine(t).length)),this.insert({row:0,column:0},e)},this.getValue=function(){return this.getAllLines().join(this.getNewLineCharacter())},this.createAnchor=function(e,t){return new a(this,e,t)},0==="aaa".split(/a/).length?this.$split=function(e){return e.replace(/\r\n|\r/g,"\n").split("\n")}:this.$split=function(e){return e.split(/\r\n|\r|\n/)},this.$detectNewLine=function(e){var t=e.match(/^.*?(\r\n|\r|\n)/m);this.$autoNewLine=t?t[1]:"\n",this._signal("changeNewLineMode")},this.getNewLineCharacter=function(){switch(this.$newLineMode){case"windows":return"\r\n";case"unix":return"\n";default:return this.$autoNewLine||"\n"}},this.$autoNewLine="",this.$newLineMode="auto",this.setNewLineMode=function(e){this.$newLineMode!==e&&(this.$newLineMode=e,this._signal("changeNewLineMode"))},this.getNewLineMode=function(){return this.$newLineMode},this.isNewLine=function(e){return"\r\n"==e||"\r"==e||"\n"==e},this.getLine=function(e){return this.$lines[e]||""},this.getLines=function(e,t){return this.$lines.slice(e,t+1)},this.getAllLines=function(){return this.getLines(0,this.getLength())},this.getLength=function(){return this.$lines.length},this.getTextRange=function(e){return this.getLinesForRange(e).join(this.getNewLineCharacter())},this.getLinesForRange=function(e){var t;if(e.start.row===e.end.row)t=[this.getLine(e.start.row).substring(e.start.column,e.end.column)];else{(t=this.getLines(e.start.row,e.end.row))[0]=(t[0]||"").substring(e.start.column);var n=t.length-1;e.end.row-e.start.row==n&&(t[n]=t[n].substring(0,e.end.column))}return t},this.insertLines=function(e,t){return console.warn("Use of document.insertLines is deprecated. Use the insertFullLines method instead."),this.insertFullLines(e,t)},this.removeLines=function(e,t){return console.warn("Use of document.removeLines is deprecated. Use the removeFullLines method instead."),this.removeFullLines(e,t)},this.insertNewLine=function(e){return console.warn("Use of document.insertNewLine is deprecated. Use insertMergedLines(position, ['', '']) instead."),this.insertMergedLines(e,["",""])},this.insert=function(e,t){return this.getLength()<=1&&this.$detectNewLine(t),this.insertMergedLines(e,this.$split(t))},this.insertInLine=function(e,t){var n=this.clippedPos(e.row,e.column),i=this.pos(e.row,e.column+t.length);return this.applyDelta({start:n,end:i,action:"insert",lines:[t]},!0),this.clonePos(i)},this.clippedPos=function(e,t){var n=this.getLength();void 0===e?e=n:e<0?e=0:e>=n&&(e=n-1,t=void 0);var i=this.getLine(e);return null==t&&(t=i.length),{row:e,column:t=Math.min(Math.max(t,0),i.length)}},this.clonePos=function(e){return{row:e.row,column:e.column}},this.pos=function(e,t){return{row:e,column:t}},this.$clipPosition=function(e){var t=this.getLength();return e.row>=t?(e.row=Math.max(0,t-1),e.column=this.getLine(t-1).length):(e.row=Math.max(0,e.row),e.column=Math.min(Math.max(e.column,0),this.getLine(e.row).length)),e},this.insertFullLines=function(e,t){var n=0;(e=Math.min(Math.max(e,0),this.getLength()))0,i=t=0&&this.applyDelta({start:this.pos(e,this.getLine(e).length),end:this.pos(e+1,0),action:"remove",lines:["",""]})},this.replace=function(e,t){return e instanceof o||(e=o.fromPoints(e.start,e.end)),0===t.length&&e.isEmpty()?e.start:t==this.getTextRange(e)?e.end:(this.remove(e),t?this.insert(e.start,t):e.start)},this.applyDeltas=function(e){for(var t=0;t=0;t--)this.revertDelta(e[t])},this.applyDelta=function(e,t){var n="insert"==e.action;(n?e.lines.length<=1&&!e.lines[0]:!o.comparePoints(e.start,e.end))||(n&&e.lines.length>2e4?this.$splitAndapplyLargeDelta(e,2e4):(r(this.$lines,e,t),this._signal("change",e)))},this.$splitAndapplyLargeDelta=function(e,t){for(var n=e.lines,i=n.length-t+1,r=e.start.row,s=e.start.column,o=0,a=0;o20){n.running=setTimeout(n.$worker,20);break}}n.currentLine=t,-1==i&&(i=t),s<=i&&n.fireUpdateEvent(s,i)}}};(function(){i.implement(this,r),this.setTokenizer=function(e){this.tokenizer=e,this.lines=[],this.states=[],this.start(0)},this.setDocument=function(e){this.doc=e,this.lines=[],this.states=[],this.stop()},this.fireUpdateEvent=function(e,t){var n={first:e,last:t};this._signal("update",{data:n})},this.start=function(e){this.currentLine=Math.min(e||0,this.currentLine,this.doc.getLength()),this.lines.splice(this.currentLine,this.lines.length),this.states.splice(this.currentLine,this.states.length),this.stop(),this.running=setTimeout(this.$worker,700)},this.scheduleStart=function(){this.running||(this.running=setTimeout(this.$worker,700))},this.$updateOnChange=function(e){var t=e.start.row,n=e.end.row-t;if(0===n)this.lines[t]=null;else if("remove"==e.action)this.lines.splice(t,n+1,null),this.states.splice(t,n+1,null);else{var i=Array(n+1);i.unshift(t,1),this.lines.splice.apply(this.lines,i),this.states.splice.apply(this.states,i)}this.currentLine=Math.min(t,this.currentLine,this.doc.getLength()),this.stop()},this.stop=function(){this.running&&clearTimeout(this.running),this.running=!1},this.getTokens=function(e){return this.lines[e]||this.$tokenizeRow(e)},this.getState=function(e){return this.currentLine==e&&this.$tokenizeRow(e),this.states[e]||"start"},this.$tokenizeRow=function(e){var t=this.doc.getLine(e),n=this.states[e-1],i=this.tokenizer.getLineTokens(t,n,e);return this.states[e]+""!=i.state+""?(this.states[e]=i.state,this.lines[e+1]=null,this.currentLine>e+1&&(this.currentLine=e+1)):this.currentLine==e&&(this.currentLine=e+1),this.lines[e]=i.tokens}}).call(s.prototype),t.BackgroundTokenizer=s})),ace.define("ace/search_highlight",["require","exports","module","ace/lib/lang","ace/lib/oop","ace/range"],(function(e,t,n){"use strict";var i=e("./lib/lang"),r=(e("./lib/oop"),e("./range").Range),s=function(e,t,n){this.setRegexp(e),this.clazz=t,this.type=n||"text"};(function(){this.MAX_RANGES=500,this.setRegexp=function(e){this.regExp+""!=e+""&&(this.regExp=e,this.cache=[])},this.update=function(e,t,n,s){if(this.regExp)for(var o=s.firstRow,a=s.lastRow,l=o;l<=a;l++){var c=this.cache[l];null==c&&((c=i.getMatchOffsets(n.getLine(l),this.regExp)).length>this.MAX_RANGES&&(c=c.slice(0,this.MAX_RANGES)),c=c.map((function(e){return new r(l,e.offset,l,e.offset+e.length)})),this.cache[l]=c.length?c:"");for(var u=c.length;u--;)t.drawSingleLineMarker(e,c[u].toScreenRange(n),this.clazz,s)}}}).call(s.prototype),t.SearchHighlight=s})),ace.define("ace/edit_session/fold_line",["require","exports","module","ace/range"],(function(e,t,n){"use strict";var i=e("../range").Range;function r(e,t){this.foldData=e,Array.isArray(t)?this.folds=t:t=this.folds=[t];var n=t[t.length-1];this.range=new i(t[0].start.row,t[0].start.column,n.end.row,n.end.column),this.start=this.range.start,this.end=this.range.end,this.folds.forEach((function(e){e.setFoldLine(this)}),this)}(function(){this.shiftRow=function(e){this.start.row+=e,this.end.row+=e,this.folds.forEach((function(t){t.start.row+=e,t.end.row+=e}))},this.addFold=function(e){if(e.sameRow){if(e.start.rowthis.endRow)throw new Error("Can't add a fold to this FoldLine as it has no connection");this.folds.push(e),this.folds.sort((function(e,t){return-e.range.compareEnd(t.start.row,t.start.column)})),this.range.compareEnd(e.start.row,e.start.column)>0?(this.end.row=e.end.row,this.end.column=e.end.column):this.range.compareStart(e.end.row,e.end.column)<0&&(this.start.row=e.start.row,this.start.column=e.start.column)}else if(e.start.row==this.end.row)this.folds.push(e),this.end.row=e.end.row,this.end.column=e.end.column;else{if(e.end.row!=this.start.row)throw new Error("Trying to add fold to FoldRow that doesn't have a matching row");this.folds.unshift(e),this.start.row=e.start.row,this.start.column=e.start.column}e.foldLine=this},this.containsRow=function(e){return e>=this.start.row&&e<=this.end.row},this.walk=function(e,t,n){var i,r,s=0,o=this.folds,a=!0;null==t&&(t=this.end.row,n=this.end.column);for(var l=0;l0)){var l=i(e,o.start);return 0===a?t&&0!==l?-s-2:s:l>0||0===l&&!t?s:-s-1}}return-s-1},this.add=function(e){var t=!e.isEmpty(),n=this.pointIndex(e.start,t);n<0&&(n=-n-1);var i=this.pointIndex(e.end,t,n);return i<0?i=-i-1:i++,this.ranges.splice(n,i-n,e)},this.addList=function(e){for(var t=[],n=e.length;n--;)t.push.apply(t,this.add(e[n]));return t},this.substractPoint=function(e){var t=this.pointIndex(e);if(t>=0)return this.ranges.splice(t,1)},this.merge=function(){for(var e,t=[],n=this.ranges,r=(n=n.sort((function(e,t){return i(e.start,t.start)})))[0],s=1;s=0},this.containsPoint=function(e){return this.pointIndex(e)>=0},this.rangeAtPoint=function(e){var t=this.pointIndex(e);if(t>=0)return this.ranges[t]},this.clipRows=function(e,t){var n=this.ranges;if(n[0].start.row>t||n[n.length-1].start.row=i);o++);if("insert"==e.action){for(var l=r-i,c=-t.column+n.column;oi);o++)if(u.start.row==i&&u.start.column>=t.column&&(u.start.column==t.column&&this.$bias<=0||(u.start.column+=c,u.start.row+=l)),u.end.row==i&&u.end.column>=t.column){if(u.end.column==t.column&&this.$bias<0)continue;u.end.column==t.column&&c>0&&ou.start.column&&u.end.column==s[o+1].start.column&&(u.end.column-=c),u.end.column+=c,u.end.row+=l}}else for(l=i-r,c=t.column-n.column;or);o++)u.end.rowt.column)&&(u.end.column=t.column,u.end.row=t.row):(u.end.column+=c,u.end.row+=l):u.end.row>r&&(u.end.row+=l),u.start.rowt.column)&&(u.start.column=t.column,u.start.row=t.row):(u.start.column+=c,u.start.row+=l):u.start.row>r&&(u.start.row+=l);if(0!=l&&o=e)return r;if(r.end.row>e)return null}return null},this.getNextFoldLine=function(e,t){var n=this.$foldData,i=0;for(t&&(i=n.indexOf(t)),-1==i&&(i=0);i=e)return r}return null},this.getFoldedRowCount=function(e,t){for(var n=this.$foldData,i=t-e+1,r=0;r=t){a=e?i-=t-a:i=0);break}o>=e&&(i-=a>=e?o-a:o-e+1)}return i},this.$addFoldLine=function(e){return this.$foldData.push(e),this.$foldData.sort((function(e,t){return e.start.row-t.start.row})),e},this.addFold=function(e,t){var n,i=this.$foldData,o=!1;e instanceof s?n=e:(n=new s(t,e)).collapseChildren=t.collapseChildren,this.$clipRangeToDocument(n.range);var a=n.start.row,l=n.start.column,c=n.end.row,u=n.end.column,h=this.getFoldAt(a,l,1),d=this.getFoldAt(c,u,-1);if(h&&d==h)return h.addSubFold(n);h&&!h.range.isStart(a,l)&&this.removeFold(h),d&&!d.range.isEnd(c,u)&&this.removeFold(d);var m=this.getFoldsInRange(n.range);m.length>0&&(this.removeFolds(m),m.forEach((function(e){n.addSubFold(e)})));for(var p=0;p0&&this.foldAll(e.start.row+1,e.end.row,e.collapseChildren-1),e.subFolds=[]},this.expandFolds=function(e){e.forEach((function(e){this.expandFold(e)}),this)},this.unfold=function(e,t){var n,r;if(null==e?(n=new i(0,0,this.getLength(),0),t=!0):n="number"==typeof e?new i(e,0,e,this.getLine(e).length):"row"in e?i.fromPoints(e,e):e,r=this.getFoldsInRangeList(n),t)this.removeFolds(r);else for(var s=r;s.length;)this.expandFolds(s),s=this.getFoldsInRangeList(n);if(r.length)return r},this.isRowFolded=function(e,t){return!!this.getFoldLine(e,t)},this.getRowFoldEnd=function(e,t){var n=this.getFoldLine(e,t);return n?n.end.row:e},this.getRowFoldStart=function(e,t){var n=this.getFoldLine(e,t);return n?n.start.row:e},this.getFoldDisplayLine=function(e,t,n,i,r){null==i&&(i=e.start.row),null==r&&(r=0),null==t&&(t=e.end.row),null==n&&(n=this.getLine(t).length);var s=this.doc,o="";return e.walk((function(e,t,n,a){if(!(tu)break}while(s&&l.test(s.type));s=r.stepBackward()}else s=r.getCurrentToken();return c.end.row=r.getCurrentTokenRow(),c.end.column=r.getCurrentTokenColumn()+s.value.length-2,c}},this.foldAll=function(e,t,n){null==n&&(n=1e5);var i=this.foldWidgets;if(i){t=t||this.getLength();for(var r=e=e||0;r=e){r=s.end.row;try{var o=this.addFold("...",s);o&&(o.collapseChildren=n)}catch(e){}}}}},this.$foldStyles={manual:1,markbegin:1,markbeginend:1},this.$foldStyle="markbegin",this.setFoldStyle=function(e){if(!this.$foldStyles[e])throw new Error("invalid fold style: "+e+"["+Object.keys(this.$foldStyles).join(", ")+"]");if(this.$foldStyle!=e){this.$foldStyle=e,"manual"==e&&this.unfold();var t=this.$foldMode;this.$setFolding(null),this.$setFolding(t)}},this.$setFolding=function(e){this.$foldMode!=e&&(this.$foldMode=e,this.off("change",this.$updateFoldWidgets),this.off("tokenizerUpdate",this.$tokenizerUpdateFoldWidgets),this._signal("changeAnnotation"),e&&"manual"!=this.$foldStyle?(this.foldWidgets=[],this.getFoldWidget=e.getFoldWidget.bind(e,this,this.$foldStyle),this.getFoldWidgetRange=e.getFoldWidgetRange.bind(e,this,this.$foldStyle),this.$updateFoldWidgets=this.updateFoldWidgets.bind(this),this.$tokenizerUpdateFoldWidgets=this.tokenizerUpdateFoldWidgets.bind(this),this.on("change",this.$updateFoldWidgets),this.on("tokenizerUpdate",this.$tokenizerUpdateFoldWidgets)):this.foldWidgets=null)},this.getParentFoldRangeData=function(e,t){var n=this.foldWidgets;if(!n||t&&n[e])return{};for(var i,r=e-1;r>=0;){var s=n[r];if(null==s&&(s=n[r]=this.getFoldWidget(r)),"start"==s){var o=this.getFoldWidgetRange(r);if(i||(i=o),o&&o.end.row>=e)break}r--}return{range:-1!==r&&o,firstRange:i}},this.onFoldWidgetClick=function(e,t){var n={children:(t=t.domEvent).shiftKey,all:t.ctrlKey||t.metaKey,siblings:t.altKey};if(!this.$toggleFoldWidget(e,n)){var i=t.target||t.srcElement;i&&/ace_fold-widget/.test(i.className)&&(i.className+=" ace_invalid")}},this.$toggleFoldWidget=function(e,t){if(this.getFoldWidget){var n=this.getFoldWidget(e),i=this.getLine(e),r="end"===n?-1:1,s=this.getFoldAt(e,-1===r?0:i.length,r);if(s)return t.children||t.all?this.removeFold(s):this.expandFold(s),s;var o=this.getFoldWidgetRange(e,!0);if(o&&!o.isMultiLine()&&(s=this.getFoldAt(o.start.row,o.start.column,1))&&o.isEqual(s.range))return this.removeFold(s),s;if(t.siblings){var a=this.getParentFoldRangeData(e);if(a.range)var l=a.range.start.row+1,c=a.range.end.row;this.foldAll(l,c,t.all?1e4:0)}else t.children?(c=o?o.end.row:this.getLength(),this.foldAll(e+1,c,t.all?1e4:0)):o&&(t.all&&(o.collapseChildren=1e4),this.addFold("...",o));return o}},this.toggleFoldWidget=function(e){var t=this.selection.getCursor().row;t=this.getRowFoldStart(t);var n=this.$toggleFoldWidget(t,{});if(!n){var i=this.getParentFoldRangeData(t,!0);if(n=i.range||i.firstRange){t=n.start.row;var r=this.getFoldAt(t,this.getLine(t).length,1);r?this.removeFold(r):this.addFold("...",n)}}},this.updateFoldWidgets=function(e){var t=e.start.row,n=e.end.row-t;if(0===n)this.foldWidgets[t]=null;else if("remove"==e.action)this.foldWidgets.splice(t,n+1,null);else{var i=Array(n+1);i.unshift(t,1),this.foldWidgets.splice.apply(this.foldWidgets,i)}},this.tokenizerUpdateFoldWidgets=function(e){var t=e.data;t.first!=t.last&&this.foldWidgets.length>t.first&&this.foldWidgets.splice(t.first,this.foldWidgets.length)}}})),ace.define("ace/edit_session/bracket_match",["require","exports","module","ace/token_iterator","ace/range"],(function(e,t,n){"use strict";var i=e("../token_iterator").TokenIterator,r=e("../range").Range;t.BracketMatch=function(){this.findMatchingBracket=function(e,t){if(0==e.column)return null;var n=t||this.getLine(e.row).charAt(e.column-1);if(""==n)return null;var i=n.match(/([\(\[\{])|([\)\]\}])/);return i?i[1]?this.$findClosingBracket(i[1],e):this.$findOpeningBracket(i[2],e):null},this.getBracketRange=function(e){var t,n=this.getLine(e.row),i=!0,s=n.charAt(e.column-1),o=s&&s.match(/([\(\[\{])|([\)\]\}])/);if(o||(s=n.charAt(e.column),e={row:e.row,column:e.column+1},o=s&&s.match(/([\(\[\{])|([\)\]\}])/),i=!1),!o)return null;if(o[1]){if(!(a=this.$findClosingBracket(o[1],e)))return null;t=r.fromPoints(e,a),i||(t.end.column++,t.start.column--),t.cursor=t.end}else{var a;if(!(a=this.$findOpeningBracket(o[2],e)))return null;t=r.fromPoints(a,e),i||(t.start.column++,t.end.column--),t.cursor=t.start}return t},this.$brackets={")":"(","(":")","]":"[","[":"]","{":"}","}":"{","<":">",">":"<"},this.$findOpeningBracket=function(e,t,n){var r=this.$brackets[e],s=1,o=new i(this,t.row,t.column),a=o.getCurrentToken();if(a||(a=o.stepForward()),a){n||(n=new RegExp("(\\.?"+a.type.replace(".","\\.").replace("rparen",".paren").replace(/\b(?:end)\b/,"(?:start|begin|end)")+")+"));for(var l=t.column-o.getCurrentTokenColumn()-2,c=a.value;;){for(;l>=0;){var u=c.charAt(l);if(u==r){if(0==(s-=1))return{row:o.getCurrentTokenRow(),column:l+o.getCurrentTokenColumn()}}else u==e&&(s+=1);l-=1}do{a=o.stepBackward()}while(a&&!n.test(a.type));if(null==a)break;l=(c=a.value).length-1}return null}},this.$findClosingBracket=function(e,t,n){var r=this.$brackets[e],s=1,o=new i(this,t.row,t.column),a=o.getCurrentToken();if(a||(a=o.stepForward()),a){n||(n=new RegExp("(\\.?"+a.type.replace(".","\\.").replace("lparen",".paren").replace(/\b(?:start|begin)\b/,"(?:start|begin|end)")+")+"));for(var l=t.column-o.getCurrentTokenColumn();;){for(var c=a.value,u=c.length;ln&&(this.$docRowCache.splice(n,t),this.$screenRowCache.splice(n,t))},this.$getRowCacheIndex=function(e,t){for(var n=0,i=e.length-1;n<=i;){var r=n+i>>1,s=e[r];if(t>s)n=r+1;else{if(!(t=t);s++);return(n=i[s])?(n.index=s,n.start=r-n.value.length,n):null},this.setUndoManager=function(e){if(this.$undoManager=e,this.$informUndoManager&&this.$informUndoManager.cancel(),e){var t=this;e.addSession(this),this.$syncInformUndoManager=function(){t.$informUndoManager.cancel(),t.mergeUndoDeltas=!1},this.$informUndoManager=r.delayedCall(this.$syncInformUndoManager)}else this.$syncInformUndoManager=function(){}},this.markUndoGroup=function(){this.$syncInformUndoManager&&this.$syncInformUndoManager()},this.$defaultUndoManager={undo:function(){},redo:function(){},hasUndo:function(){},hasRedo:function(){},reset:function(){},add:function(){},addSelection:function(){},startNewGroup:function(){},addSession:function(){}},this.getUndoManager=function(){return this.$undoManager||this.$defaultUndoManager},this.getTabString=function(){return this.getUseSoftTabs()?r.stringRepeat(" ",this.getTabSize()):"\t"},this.setUseSoftTabs=function(e){this.setOption("useSoftTabs",e)},this.getUseSoftTabs=function(){return this.$useSoftTabs&&!this.$mode.$indentWithTabs},this.setTabSize=function(e){this.setOption("tabSize",e)},this.getTabSize=function(){return this.$tabSize},this.isTabStop=function(e){return this.$useSoftTabs&&e.column%this.$tabSize==0},this.setNavigateWithinSoftTabs=function(e){this.setOption("navigateWithinSoftTabs",e)},this.getNavigateWithinSoftTabs=function(){return this.$navigateWithinSoftTabs},this.$overwrite=!1,this.setOverwrite=function(e){this.setOption("overwrite",e)},this.getOverwrite=function(){return this.$overwrite},this.toggleOverwrite=function(){this.setOverwrite(!this.$overwrite)},this.addGutterDecoration=function(e,t){this.$decorations[e]||(this.$decorations[e]=""),this.$decorations[e]+=" "+t,this._signal("changeBreakpoint",{})},this.removeGutterDecoration=function(e,t){this.$decorations[e]=(this.$decorations[e]||"").replace(" "+t,""),this._signal("changeBreakpoint",{})},this.getBreakpoints=function(){return this.$breakpoints},this.setBreakpoints=function(e){this.$breakpoints=[];for(var t=0;t0&&(i=!!n.charAt(t-1).match(this.tokenRe)),i||(i=!!n.charAt(t).match(this.tokenRe)),i)var r=this.tokenRe;else r=/^\s+$/.test(n.slice(t-1,t+1))?/\s/:this.nonTokenRe;var s=t;if(s>0){do{s--}while(s>=0&&n.charAt(s).match(r));s++}for(var o=t;oe&&(e=t.screenWidth)})),this.lineWidgetWidth=e},this.$computeWidth=function(e){if(this.$modified||e){if(this.$modified=!1,this.$useWrapMode)return this.screenWidth=this.$wrapLimit;for(var t=this.doc.getAllLines(),n=this.$rowLengthCache,i=0,r=0,s=this.$foldData[r],o=s?s.start.row:1/0,a=t.length,l=0;lo){if((l=s.end.row+1)>=a)break;o=(s=this.$foldData[r++])?s.start.row:1/0}null==n[l]&&(n[l]=this.$getStringScreenWidth(t[l])[0]),n[l]>i&&(i=n[l])}this.screenWidth=i}},this.getLine=function(e){return this.doc.getLine(e)},this.getLines=function(e,t){return this.doc.getLines(e,t)},this.getLength=function(){return this.doc.getLength()},this.getTextRange=function(e){return this.doc.getTextRange(e||this.selection.getRange())},this.insert=function(e,t){return this.doc.insert(e,t)},this.remove=function(e){return this.doc.remove(e)},this.removeFullLines=function(e,t){return this.doc.removeFullLines(e,t)},this.undoChanges=function(e,t){if(e.length){this.$fromUndo=!0;for(var n=e.length-1;-1!=n;n--){var i=e[n];"insert"==i.action||"remove"==i.action?this.doc.revertDelta(i):i.folds&&this.addFolds(i.folds)}!t&&this.$undoSelect&&(e.selectionBefore?this.selection.fromJSON(e.selectionBefore):this.selection.setRange(this.$getUndoSelection(e,!0))),this.$fromUndo=!1}},this.redoChanges=function(e,t){if(e.length){this.$fromUndo=!0;for(var n=0;ne.end.column&&(s.start.column+=c),s.end.row==e.end.row&&s.end.column>e.end.column&&(s.end.column+=c)),o&&s.start.row>=e.end.row&&(s.start.row+=o,s.end.row+=o)}if(s.end=this.insert(s.start,i),r.length){var a=e.start,l=s.start,c=(o=l.row-a.row,l.column-a.column);this.addFolds(r.map((function(e){return(e=e.clone()).start.row==a.row&&(e.start.column+=c),e.end.row==a.row&&(e.end.column+=c),e.start.row+=o,e.end.row+=o,e})))}return s},this.indentRows=function(e,t,n){n=n.replace(/\t/g,this.getTabString());for(var i=e;i<=t;i++)this.doc.insertInLine({row:i,column:0},n)},this.outdentRows=function(e){for(var t=e.collapseRows(),n=new u(0,0,0,0),i=this.getTabSize(),r=t.start.row;r<=t.end.row;++r){var s=this.getLine(r);n.start.row=r,n.end.row=r;for(var o=0;o0){var r;if((r=this.getRowFoldEnd(t+n))>this.doc.getLength()-1)return 0;i=r-t}else e=this.$clipRowToDocument(e),i=(t=this.$clipRowToDocument(t))-e+1;var s=new u(e,0,t,Number.MAX_VALUE),o=this.getFoldsInRange(s).map((function(e){return(e=e.clone()).start.row+=i,e.end.row+=i,e})),a=0==n?this.doc.getLines(e,t):this.doc.removeFullLines(e,t);return this.doc.insertFullLines(e+i,a),o.length&&this.addFolds(o),i},this.moveLinesUp=function(e,t){return this.$moveLines(e,t,-1)},this.moveLinesDown=function(e,t){return this.$moveLines(e,t,1)},this.duplicateLines=function(e,t){return this.$moveLines(e,t,0)},this.$clipRowToDocument=function(e){return Math.max(0,Math.min(e,this.doc.getLength()-1))},this.$clipColumnToRow=function(e,t){return t<0?0:Math.min(this.doc.getLine(e).length,t)},this.$clipPositionToDocument=function(e,t){if(t=Math.max(0,t),e<0)e=0,t=0;else{var n=this.doc.getLength();e>=n?(e=n-1,t=this.doc.getLine(n-1).length):t=Math.min(this.doc.getLine(e).length,t)}return{row:e,column:t}},this.$clipRangeToDocument=function(e){e.start.row<0?(e.start.row=0,e.start.column=0):e.start.column=this.$clipColumnToRow(e.start.row,e.start.column);var t=this.doc.getLength()-1;return e.end.row>t?(e.end.row=t,e.end.column=this.doc.getLine(t).length):e.end.column=this.$clipColumnToRow(e.end.row,e.end.column),e},this.$wrapLimit=80,this.$useWrapMode=!1,this.$wrapLimitRange={min:null,max:null},this.setUseWrapMode=function(e){if(e!=this.$useWrapMode){if(this.$useWrapMode=e,this.$modified=!0,this.$resetRowCache(0),e){var t=this.getLength();this.$wrapData=Array(t),this.$updateWrapData(0,t-1)}this._signal("changeWrapMode")}},this.getUseWrapMode=function(){return this.$useWrapMode},this.setWrapLimitRange=function(e,t){this.$wrapLimitRange.min===e&&this.$wrapLimitRange.max===t||(this.$wrapLimitRange={min:e,max:t},this.$modified=!0,this.$bidiHandler.markAsDirty(),this.$useWrapMode&&this._signal("changeWrapMode"))},this.adjustWrapLimit=function(e,t){var n=this.$wrapLimitRange;n.max<0&&(n={min:t,max:t});var i=this.$constrainWrapLimit(e,n.min,n.max);return i!=this.$wrapLimit&&i>1&&(this.$wrapLimit=i,this.$modified=!0,this.$useWrapMode&&(this.$updateWrapData(0,this.getLength()-1),this.$resetRowCache(0),this._signal("changeWrapLimit")),!0)},this.$constrainWrapLimit=function(e,t,n){return t&&(e=Math.max(t,e)),n&&(e=Math.min(n,e)),e},this.getWrapLimit=function(){return this.$wrapLimit},this.setWrapLimit=function(e){this.setWrapLimitRange(e,e)},this.getWrapLimitRange=function(){return{min:this.$wrapLimitRange.min,max:this.$wrapLimitRange.max}},this.$updateInternalDataOnChange=function(e){var t=this.$useWrapMode,n=e.action,i=e.start,r=e.end,s=i.row,o=r.row,a=o-s,l=null;if(this.$updating=!0,0!=a)if("remove"===n){this[t?"$wrapData":"$rowLengthCache"].splice(s,a);var c=this.$foldData;l=this.getFoldsInRange(e),this.removeFolds(l);var u=0;if(g=this.getFoldLine(r.row)){g.addRemoveChars(r.row,r.column,i.column-r.column),g.shiftRow(-a);var h=this.getFoldLine(s);h&&h!==g&&(h.merge(g),g=h),u=c.indexOf(g)+1}for(;u=r.row&&g.shiftRow(-a);o=s}else{var d=Array(a);d.unshift(s,0);var m=t?this.$wrapData:this.$rowLengthCache;if(m.splice.apply(m,d),c=this.$foldData,u=0,g=this.getFoldLine(s)){var p=g.range.compareInside(i.row,i.column);0==p?(g=g.split(i.row,i.column))&&(g.shiftRow(a),g.addRemoveChars(o,0,r.column-i.column)):-1==p&&(g.addRemoveChars(s,0,r.column-i.column),g.shiftRow(a)),u=c.indexOf(g)+1}for(;u=s&&g.shiftRow(a)}}else a=Math.abs(e.start.column-e.end.column),"remove"===n&&(l=this.getFoldsInRange(e),this.removeFolds(l),a=-a),(g=this.getFoldLine(s))&&g.addRemoveChars(s,i.column,a);return t&&this.$wrapData.length!=this.doc.getLength()&&console.error("doc.getLength() and $wrapData.length have to be the same!"),this.$updating=!1,t?this.$updateWrapData(s,o):this.$updateRowLengthCache(s,o),l},this.$updateRowLengthCache=function(e,t,n){this.$rowLengthCache[e]=null,this.$rowLengthCache[t]=null},this.$updateWrapData=function(n,i){var r,s,o=this.doc.getAllLines(),a=this.getTabSize(),l=this.$wrapData,c=this.$wrapLimit,u=n;for(i=Math.min(i,o.length-1);u<=i;)(s=this.getFoldLine(u,s))?(r=[],s.walk(function(n,i,s,a){var l;if(null!=n){(l=this.$getDisplayTokens(n,r.length))[0]=e;for(var c=1;c=4352&&e<=4447||e>=4515&&e<=4519||e>=4602&&e<=4607||e>=9001&&e<=9002||e>=11904&&e<=11929||e>=11931&&e<=12019||e>=12032&&e<=12245||e>=12272&&e<=12283||e>=12288&&e<=12350||e>=12353&&e<=12438||e>=12441&&e<=12543||e>=12549&&e<=12589||e>=12593&&e<=12686||e>=12688&&e<=12730||e>=12736&&e<=12771||e>=12784&&e<=12830||e>=12832&&e<=12871||e>=12880&&e<=13054||e>=13056&&e<=19903||e>=19968&&e<=42124||e>=42128&&e<=42182||e>=43360&&e<=43388||e>=44032&&e<=55203||e>=55216&&e<=55238||e>=55243&&e<=55291||e>=63744&&e<=64255||e>=65040&&e<=65049||e>=65072&&e<=65106||e>=65108&&e<=65126||e>=65128&&e<=65131||e>=65281&&e<=65376||e>=65504&&e<=65510)}this.$computeWrapSplits=function(n,i,r){if(0==n.length)return[];var s=[],o=n.length,a=0,l=0,c=this.$wrapAsCode,u=this.$indentedSoftWrap,h=i<=Math.max(2*r,8)||!1===u?0:Math.floor(i/2);function d(e){for(var t=e-a,i=a;ii-m;){var p=a+i-m;if(n[p-1]>=10&&n[p]>=10)d(p);else if(n[p]!=e&&n[p]!=t){for(var g=Math.max(p-(i-(i>>2)),a-1);p>g&&n[p]g&&n[p]g&&9==n[p];)p--}else for(;p>g&&n[p]<10;)p--;p>g?d(++p):(2==n[p=a+i]&&p--,d(p-m))}else{for(;p!=a-1&&n[p]!=e;p--);if(p>a){d(p);continue}for(p=a+i;p39&&o<48||o>57&&o<64?r.push(9):o>=4352&&n(o)?r.push(1,2):r.push(1)}return r},this.$getStringScreenWidth=function(e,t,i){if(0==t)return[0,0];var r,s;for(null==t&&(t=1/0),i=i||0,s=0;s=4352&&n(r)?i+=2:i+=1,!(i>t));s++);return[i,s]},this.lineWidgets=null,this.getRowLength=function(e){if(this.lineWidgets)var t=this.lineWidgets[e]&&this.lineWidgets[e].rowCount||0;else t=0;return this.$useWrapMode&&this.$wrapData[e]?this.$wrapData[e].length+1+t:1+t},this.getRowLineCount=function(e){return this.$useWrapMode&&this.$wrapData[e]?this.$wrapData[e].length+1:1},this.getRowWrapIndent=function(e){if(this.$useWrapMode){var t=this.screenToDocumentPosition(e,Number.MAX_VALUE),n=this.$wrapData[t.row];return n.length&&n[0]=0){a=c[u],s=this.$docRowCache[u];var d=e>c[h-1]}else d=!h;for(var m=this.getLength()-1,p=this.getNextFoldLine(s),g=p?p.start.row:1/0;a<=e&&!(a+(l=this.getRowLength(s))>e||s>=m);)a+=l,++s>g&&(s=p.end.row+1,g=(p=this.getNextFoldLine(s,p))?p.start.row:1/0),d&&(this.$docRowCache.push(s),this.$screenRowCache.push(a));if(p&&p.start.row<=s)i=this.getFoldDisplayLine(p),s=p.start.row;else{if(a+l<=e||s>m)return{row:m,column:this.getLine(m).length};i=this.getLine(s),p=null}var f=0,E=Math.floor(e-a);if(this.$useWrapMode){var v=this.$wrapData[s];v&&(r=v[E],E>0&&v.length&&(f=v.indent,o=v[E-1]||v[v.length-1],i=i.substring(o)))}return void 0!==n&&this.$bidiHandler.isBidiRow(a+E,s,E)&&(t=this.$bidiHandler.offsetToCol(n)),o+=this.$getStringScreenWidth(i,t-f)[1],this.$useWrapMode&&o>=r&&(o=r-1),p?p.idxToPosition(o):{row:s,column:o}},this.documentToScreenPosition=function(e,t){if(void 0===t)var n=this.$clipPositionToDocument(e.row,e.column);else n=this.$clipPositionToDocument(e,t);e=n.row,t=n.column;var i,r=0,s=null;(i=this.getFoldAt(e,t,1))&&(e=i.start.row,t=i.start.column);var o,a=0,l=this.$docRowCache,c=this.$getRowCacheIndex(l,e),u=l.length;if(u&&c>=0){a=l[c],r=this.$screenRowCache[c];var h=e>l[u-1]}else h=!u;for(var d=this.getNextFoldLine(a),m=d?d.start.row:1/0;a=m){if((o=d.end.row+1)>e)break;m=(d=this.getNextFoldLine(o,d))?d.start.row:1/0}else o=a+1;r+=this.getRowLength(a),a=o,h&&(this.$docRowCache.push(a),this.$screenRowCache.push(r))}var p="";d&&a>=m?(p=this.getFoldDisplayLine(d,e,t),s=d.start.row):(p=this.getLine(e).substring(0,t),s=e);var g=0;if(this.$useWrapMode){var f=this.$wrapData[s];if(f){for(var E=0;p.length>=f[E];)r++,E++;p=p.substring(f[E-1]||0,p.length),g=E>0?f.indent:0}}return{row:r,column:g+this.$getStringScreenWidth(p)[0]}},this.documentToScreenColumn=function(e,t){return this.documentToScreenPosition(e,t).column},this.documentToScreenRow=function(e,t){return this.documentToScreenPosition(e,t).row},this.getScreenLength=function(){var e=0,t=null;if(this.$useWrapMode)for(var n=this.$wrapData.length,i=0,r=(a=0,(t=this.$foldData[a++])?t.start.row:1/0);ir&&(i=t.end.row+1,r=(t=this.$foldData[a++])?t.start.row:1/0)}else{e=this.getLength();for(var o=this.$foldData,a=0;an);s++);return[i,s]})},this.destroy=function(){this.bgTokenizer&&(this.bgTokenizer.setDocument(null),this.bgTokenizer=null),this.$stopWorker()},this.isFullWidth=n}.call(p.prototype),e("./edit_session/folding").Folding.call(p.prototype),e("./edit_session/bracket_match").BracketMatch.call(p.prototype),o.defineOptions(p.prototype,"session",{wrap:{set:function(e){if(e&&"off"!=e?"free"==e?e=!0:"printMargin"==e?e=-1:"string"==typeof e&&(e=parseInt(e,10)||!1):e=!1,this.$wrap!=e)if(this.$wrap=e,e){var t="number"==typeof e?e:null;this.setWrapLimitRange(t,t),this.setUseWrapMode(!0)}else this.setUseWrapMode(!1)},get:function(){return this.getUseWrapMode()?-1==this.$wrap?"printMargin":this.getWrapLimitRange().min?this.$wrap:"free":"off"},handlesSet:!0},wrapMethod:{set:function(e){(e="auto"==e?"text"!=this.$mode.type:"text"!=e)!=this.$wrapAsCode&&(this.$wrapAsCode=e,this.$useWrapMode&&(this.$useWrapMode=!1,this.setUseWrapMode(!0)))},initialValue:"auto"},indentedSoftWrap:{set:function(){this.$useWrapMode&&(this.$useWrapMode=!1,this.setUseWrapMode(!0))},initialValue:!0},firstLineNumber:{set:function(){this._signal("changeBreakpoint")},initialValue:1},useWorker:{set:function(e){this.$useWorker=e,this.$stopWorker(),e&&this.$startWorker()},initialValue:!0},useSoftTabs:{initialValue:!0},tabSize:{set:function(e){(e=parseInt(e))>0&&this.$tabSize!==e&&(this.$modified=!0,this.$rowLengthCache=[],this.$tabSize=e,this._signal("changeTabSize"))},initialValue:4,handlesSet:!0},navigateWithinSoftTabs:{initialValue:!1},foldStyle:{set:function(e){this.setFoldStyle(e)},handlesSet:!0},overwrite:{set:function(e){this._signal("changeOverwrite")},initialValue:!1},newLineMode:{set:function(e){this.doc.setNewLineMode(e)},get:function(){return this.doc.getNewLineMode()},handlesSet:!0},mode:{set:function(e){this.setMode(e)},get:function(){return this.$modeId},handlesSet:!0}}),t.EditSession=p})),ace.define("ace/search",["require","exports","module","ace/lib/lang","ace/lib/oop","ace/range"],(function(e,t,n){"use strict";var i=e("./lib/lang"),r=e("./lib/oop"),s=e("./range").Range,o=function(){this.$options={}};(function(){this.set=function(e){return r.mixin(this.$options,e),this},this.getOptions=function(){return i.copyObject(this.$options)},this.setOptions=function(e){this.$options=e},this.find=function(e){var t=this.$options,n=this.$matchIterator(e,t);if(!n)return!1;var i=null;return n.forEach((function(e,n,r,o){return i=new s(e,n,r,o),!(n==o&&t.start&&t.start.start&&0!=t.skipCurrent&&i.isEqual(t.start)&&(i=null,1))})),i},this.findAll=function(e){var t=this.$options;if(!t.needle)return[];this.$assembleRegExp(t);var n=t.range,r=n?e.getLines(n.start.row,n.end.row):e.doc.getAllLines(),o=[],a=t.re;if(t.$isMultiLine){var l,c=a.length,u=r.length-c;e:for(var h=a.offset||0;h<=u;h++){for(var d=0;dg||(o.push(l=new s(h,g,h+c-1,f)),c>2&&(h=h+c-2))}}else for(var E=0;EA&&o[d].end.row==n.end.row;)d--;for(o=o.slice(E,d+1),E=0,d=o.length;E=a;n--)if(h(n,Number.MAX_VALUE,e))return;if(0!=t.wrap)for(n=l,a=o.row;n>=a;n--)if(h(n,Number.MAX_VALUE,e))return}};else c=function(e){var n=o.row;if(!h(n,o.column,e)){for(n+=1;n<=l;n++)if(h(n,0,e))return;if(0!=t.wrap)for(n=a,l=o.row;n<=l;n++)if(h(n,0,e))return}};if(t.$isMultiLine)var u=n.length,h=function(t,r,s){var o=i?t-u+1:t;if(!(o<0)){var a=e.getLine(o),l=a.search(n[0]);if(!(!i&&lr))return!!s(o,l,o+u-1,h)||void 0}}};else h=i?function(t,i,r){var s,o=e.getLine(t),a=[],l=0;for(n.lastIndex=0;s=n.exec(o);){var c=s[0].length;if(l=s.index,!c){if(l>=o.length)break;n.lastIndex=l+=1}if(s.index+c>i)break;a.push(s.index,c)}for(var u=a.length-1;u>=0;u-=2){var h=a[u-1];if(r(t,h,t,h+(c=a[u])))return!0}}:function(t,i,r){var s,o,a=e.getLine(t);for(n.lastIndex=i;o=n.exec(a);){var l=o[0].length;if(r(t,s=o.index,t,s+l))return!0;if(!l&&(n.lastIndex=s+=1,s>=a.length))return!1}};return{forEach:c}}}).call(o.prototype),t.Search=o})),ace.define("ace/keyboard/hash_handler",["require","exports","module","ace/lib/keys","ace/lib/useragent"],(function(e,t,n){"use strict";var i=e("../lib/keys"),r=e("../lib/useragent"),s=i.KEY_MODS;function o(e,t){this.platform=t||(r.isMac?"mac":"win"),this.commands={},this.commandKeyBinding={},this.addCommands(e),this.$singleCommand=!0}function a(e,t){o.call(this,e,t),this.$singleCommand=!1}a.prototype=o.prototype,function(){function e(e){return"object"==typeof e&&e.bindKey&&e.bindKey.position||(e.isDefault?-100:0)}this.addCommand=function(e){this.commands[e.name]&&this.removeCommand(e),this.commands[e.name]=e,e.bindKey&&this._buildKeyHash(e)},this.removeCommand=function(e,t){var n=e&&("string"==typeof e?e:e.name);e=this.commands[n],t||delete this.commands[n];var i=this.commandKeyBinding;for(var r in i){var s=i[r];if(s==e)delete i[r];else if(Array.isArray(s)){var o=s.indexOf(e);-1!=o&&(s.splice(o,1),1==s.length&&(i[r]=s[0]))}}},this.bindKey=function(e,t,n){if("object"==typeof e&&e&&(null==n&&(n=e.position),e=e[this.platform]),e)return"function"==typeof t?this.addCommand({exec:t,bindKey:e,name:t.name||e}):void e.split("|").forEach((function(e){var i="";if(-1!=e.indexOf(" ")){var r=e.split(/\s+/);e=r.pop(),r.forEach((function(e){var t=this.parseKeys(e),n=s[t.hashId]+t.key;i+=(i?" ":"")+n,this._addCommandToBinding(i,"chainKeys")}),this),i+=" "}var o=this.parseKeys(e),a=s[o.hashId]+o.key;this._addCommandToBinding(i+a,t,n)}),this)},this._addCommandToBinding=function(t,n,i){var r,s=this.commandKeyBinding;if(n)if(!s[t]||this.$singleCommand)s[t]=n;else{Array.isArray(s[t])?-1!=(r=s[t].indexOf(n))&&s[t].splice(r,1):s[t]=[s[t]],"number"!=typeof i&&(i=e(n));var o=s[t];for(r=0;ri);r++);o.splice(r,0,n)}else delete s[t]},this.addCommands=function(e){e&&Object.keys(e).forEach((function(t){var n=e[t];if(n){if("string"==typeof n)return this.bindKey(n,t);"function"==typeof n&&(n={exec:n}),"object"==typeof n&&(n.name||(n.name=t),this.addCommand(n))}}),this)},this.removeCommands=function(e){Object.keys(e).forEach((function(t){this.removeCommand(e[t])}),this)},this.bindKeys=function(e){Object.keys(e).forEach((function(t){this.bindKey(t,e[t])}),this)},this._buildKeyHash=function(e){this.bindKey(e.bindKey,e)},this.parseKeys=function(e){var t=e.toLowerCase().split(/[\-\+]([\-\+])?/).filter((function(e){return e})),n=t.pop(),r=i[n];if(i.FUNCTION_KEYS[r])n=i.FUNCTION_KEYS[r].toLowerCase();else{if(!t.length)return{key:n,hashId:-1};if(1==t.length&&"shift"==t[0])return{key:n.toUpperCase(),hashId:-1}}for(var s=0,o=t.length;o--;){var a=i.KEY_MODS[t[o]];if(null==a)return"undefined"!=typeof console&&console.error("invalid modifier "+t[o]+" in "+e),!1;s|=a}return{key:n,hashId:s}},this.findKeyCommand=function(e,t){var n=s[e]+t;return this.commandKeyBinding[n]},this.handleKeyboard=function(e,t,n,i){if(!(i<0)){var r=s[t]+n,o=this.commandKeyBinding[r];return e.$keyChain&&(e.$keyChain+=" "+r,o=this.commandKeyBinding[e.$keyChain]||o),!o||"chainKeys"!=o&&"chainKeys"!=o[o.length-1]?(e.$keyChain&&(t&&4!=t||1!=n.length?(-1==t||i>0)&&(e.$keyChain=""):e.$keyChain=e.$keyChain.slice(0,-r.length-1)),{command:o}):(e.$keyChain=e.$keyChain||r,{command:"null"})}},this.getStatusText=function(e,t){return t.$keyChain||""}}.call(o.prototype),t.HashHandler=o,t.MultiHashHandler=a})),ace.define("ace/commands/command_manager",["require","exports","module","ace/lib/oop","ace/keyboard/hash_handler","ace/lib/event_emitter"],(function(e,t,n){"use strict";var i=e("../lib/oop"),r=e("../keyboard/hash_handler").MultiHashHandler,s=e("../lib/event_emitter").EventEmitter,o=function(e,t){r.call(this,t,e),this.byName=this.commands,this.setDefaultHandler("exec",(function(e){return e.command.exec(e.editor,e.args||{})}))};i.inherits(o,r),function(){i.implement(this,s),this.exec=function(e,t,n){if(Array.isArray(e)){for(var i=e.length;i--;)if(this.exec(e[i],t,n))return!0;return!1}if("string"==typeof e&&(e=this.commands[e]),!e)return!1;if(t&&t.$readOnly&&!e.readOnly)return!1;if(0!=this.$checkCommandState&&e.isAvailable&&!e.isAvailable(t))return!1;var r={editor:t,command:e,args:n};return r.returnValue=this._emit("exec",r),this._signal("afterExec",r),!1!==r.returnValue},this.toggleRecording=function(e){if(!this.$inReplay)return e&&e._emit("changeStatus"),this.recording?(this.macro.pop(),this.removeEventListener("exec",this.$addCommandToMacro),this.macro.length||(this.macro=this.oldMacro),this.recording=!1):(this.$addCommandToMacro||(this.$addCommandToMacro=function(e){this.macro.push([e.command,e.args])}.bind(this)),this.oldMacro=this.macro,this.macro=[],this.on("exec",this.$addCommandToMacro),this.recording=!0)},this.replay=function(e){if(!this.$inReplay&&this.macro){if(this.recording)return this.toggleRecording(e);try{this.$inReplay=!0,this.macro.forEach((function(t){"string"==typeof t?this.exec(t,e):this.exec(t[0],e,t[1])}),this)}finally{this.$inReplay=!1}}},this.trimMacro=function(e){return e.map((function(e){return"string"!=typeof e[0]&&(e[0]=e[0].name),e[1]||(e=e[0]),e}))}}.call(o.prototype),t.CommandManager=o})),ace.define("ace/commands/default_commands",["require","exports","module","ace/lib/lang","ace/config","ace/range"],(function(e,t,n){"use strict";var i=e("../lib/lang"),r=e("../config"),s=e("../range").Range;function o(e,t){return{win:e,mac:t}}t.commands=[{name:"showSettingsMenu",bindKey:o("Ctrl-,","Command-,"),exec:function(e){r.loadModule("ace/ext/settings_menu",(function(t){t.init(e),e.showSettingsMenu()}))},readOnly:!0},{name:"goToNextError",bindKey:o("Alt-E","F4"),exec:function(e){r.loadModule("./ext/error_marker",(function(t){t.showErrorMarker(e,1)}))},scrollIntoView:"animate",readOnly:!0},{name:"goToPreviousError",bindKey:o("Alt-Shift-E","Shift-F4"),exec:function(e){r.loadModule("./ext/error_marker",(function(t){t.showErrorMarker(e,-1)}))},scrollIntoView:"animate",readOnly:!0},{name:"selectall",description:"Select all",bindKey:o("Ctrl-A","Command-A"),exec:function(e){e.selectAll()},readOnly:!0},{name:"centerselection",description:"Center selection",bindKey:o(null,"Ctrl-L"),exec:function(e){e.centerSelection()},readOnly:!0},{name:"gotoline",description:"Go to line...",bindKey:o("Ctrl-L","Command-L"),exec:function(e,t){"number"!=typeof t||isNaN(t)||e.gotoLine(t),e.prompt({$type:"gotoLine"})},readOnly:!0},{name:"fold",bindKey:o("Alt-L|Ctrl-F1","Command-Alt-L|Command-F1"),exec:function(e){e.session.toggleFold(!1)},multiSelectAction:"forEach",scrollIntoView:"center",readOnly:!0},{name:"unfold",bindKey:o("Alt-Shift-L|Ctrl-Shift-F1","Command-Alt-Shift-L|Command-Shift-F1"),exec:function(e){e.session.toggleFold(!0)},multiSelectAction:"forEach",scrollIntoView:"center",readOnly:!0},{name:"toggleFoldWidget",bindKey:o("F2","F2"),exec:function(e){e.session.toggleFoldWidget()},multiSelectAction:"forEach",scrollIntoView:"center",readOnly:!0},{name:"toggleParentFoldWidget",bindKey:o("Alt-F2","Alt-F2"),exec:function(e){e.session.toggleFoldWidget(!0)},multiSelectAction:"forEach",scrollIntoView:"center",readOnly:!0},{name:"foldall",description:"Fold all",bindKey:o(null,"Ctrl-Command-Option-0"),exec:function(e){e.session.foldAll()},scrollIntoView:"center",readOnly:!0},{name:"foldOther",description:"Fold other",bindKey:o("Alt-0","Command-Option-0"),exec:function(e){e.session.foldAll(),e.session.unfold(e.selection.getAllRanges())},scrollIntoView:"center",readOnly:!0},{name:"unfoldall",description:"Unfold all",bindKey:o("Alt-Shift-0","Command-Option-Shift-0"),exec:function(e){e.session.unfold()},scrollIntoView:"center",readOnly:!0},{name:"findnext",description:"Find next",bindKey:o("Ctrl-K","Command-G"),exec:function(e){e.findNext()},multiSelectAction:"forEach",scrollIntoView:"center",readOnly:!0},{name:"findprevious",description:"Find previous",bindKey:o("Ctrl-Shift-K","Command-Shift-G"),exec:function(e){e.findPrevious()},multiSelectAction:"forEach",scrollIntoView:"center",readOnly:!0},{name:"selectOrFindNext",description:"Select or find next",bindKey:o("Alt-K","Ctrl-G"),exec:function(e){e.selection.isEmpty()?e.selection.selectWord():e.findNext()},readOnly:!0},{name:"selectOrFindPrevious",description:"Select or find previous",bindKey:o("Alt-Shift-K","Ctrl-Shift-G"),exec:function(e){e.selection.isEmpty()?e.selection.selectWord():e.findPrevious()},readOnly:!0},{name:"find",description:"Find",bindKey:o("Ctrl-F","Command-F"),exec:function(e){r.loadModule("ace/ext/searchbox",(function(t){t.Search(e)}))},readOnly:!0},{name:"overwrite",description:"Overwrite",bindKey:"Insert",exec:function(e){e.toggleOverwrite()},readOnly:!0},{name:"selecttostart",description:"Select to start",bindKey:o("Ctrl-Shift-Home","Command-Shift-Home|Command-Shift-Up"),exec:function(e){e.getSelection().selectFileStart()},multiSelectAction:"forEach",readOnly:!0,scrollIntoView:"animate",aceCommandGroup:"fileJump"},{name:"gotostart",description:"Go to start",bindKey:o("Ctrl-Home","Command-Home|Command-Up"),exec:function(e){e.navigateFileStart()},multiSelectAction:"forEach",readOnly:!0,scrollIntoView:"animate",aceCommandGroup:"fileJump"},{name:"selectup",description:"Select up",bindKey:o("Shift-Up","Shift-Up|Ctrl-Shift-P"),exec:function(e){e.getSelection().selectUp()},multiSelectAction:"forEach",scrollIntoView:"cursor",readOnly:!0},{name:"golineup",description:"Go line up",bindKey:o("Up","Up|Ctrl-P"),exec:function(e,t){e.navigateUp(t.times)},multiSelectAction:"forEach",scrollIntoView:"cursor",readOnly:!0},{name:"selecttoend",description:"Select to end",bindKey:o("Ctrl-Shift-End","Command-Shift-End|Command-Shift-Down"),exec:function(e){e.getSelection().selectFileEnd()},multiSelectAction:"forEach",readOnly:!0,scrollIntoView:"animate",aceCommandGroup:"fileJump"},{name:"gotoend",description:"Go to end",bindKey:o("Ctrl-End","Command-End|Command-Down"),exec:function(e){e.navigateFileEnd()},multiSelectAction:"forEach",readOnly:!0,scrollIntoView:"animate",aceCommandGroup:"fileJump"},{name:"selectdown",description:"Select down",bindKey:o("Shift-Down","Shift-Down|Ctrl-Shift-N"),exec:function(e){e.getSelection().selectDown()},multiSelectAction:"forEach",scrollIntoView:"cursor",readOnly:!0},{name:"golinedown",description:"Go line down",bindKey:o("Down","Down|Ctrl-N"),exec:function(e,t){e.navigateDown(t.times)},multiSelectAction:"forEach",scrollIntoView:"cursor",readOnly:!0},{name:"selectwordleft",description:"Select word left",bindKey:o("Ctrl-Shift-Left","Option-Shift-Left"),exec:function(e){e.getSelection().selectWordLeft()},multiSelectAction:"forEach",scrollIntoView:"cursor",readOnly:!0},{name:"gotowordleft",description:"Go to word left",bindKey:o("Ctrl-Left","Option-Left"),exec:function(e){e.navigateWordLeft()},multiSelectAction:"forEach",scrollIntoView:"cursor",readOnly:!0},{name:"selecttolinestart",description:"Select to line start",bindKey:o("Alt-Shift-Left","Command-Shift-Left|Ctrl-Shift-A"),exec:function(e){e.getSelection().selectLineStart()},multiSelectAction:"forEach",scrollIntoView:"cursor",readOnly:!0},{name:"gotolinestart",description:"Go to line start",bindKey:o("Alt-Left|Home","Command-Left|Home|Ctrl-A"),exec:function(e){e.navigateLineStart()},multiSelectAction:"forEach",scrollIntoView:"cursor",readOnly:!0},{name:"selectleft",description:"Select left",bindKey:o("Shift-Left","Shift-Left|Ctrl-Shift-B"),exec:function(e){e.getSelection().selectLeft()},multiSelectAction:"forEach",scrollIntoView:"cursor",readOnly:!0},{name:"gotoleft",description:"Go to left",bindKey:o("Left","Left|Ctrl-B"),exec:function(e,t){e.navigateLeft(t.times)},multiSelectAction:"forEach",scrollIntoView:"cursor",readOnly:!0},{name:"selectwordright",description:"Select word right",bindKey:o("Ctrl-Shift-Right","Option-Shift-Right"),exec:function(e){e.getSelection().selectWordRight()},multiSelectAction:"forEach",scrollIntoView:"cursor",readOnly:!0},{name:"gotowordright",description:"Go to word right",bindKey:o("Ctrl-Right","Option-Right"),exec:function(e){e.navigateWordRight()},multiSelectAction:"forEach",scrollIntoView:"cursor",readOnly:!0},{name:"selecttolineend",description:"Select to line end",bindKey:o("Alt-Shift-Right","Command-Shift-Right|Shift-End|Ctrl-Shift-E"),exec:function(e){e.getSelection().selectLineEnd()},multiSelectAction:"forEach",scrollIntoView:"cursor",readOnly:!0},{name:"gotolineend",description:"Go to line end",bindKey:o("Alt-Right|End","Command-Right|End|Ctrl-E"),exec:function(e){e.navigateLineEnd()},multiSelectAction:"forEach",scrollIntoView:"cursor",readOnly:!0},{name:"selectright",description:"Select right",bindKey:o("Shift-Right","Shift-Right"),exec:function(e){e.getSelection().selectRight()},multiSelectAction:"forEach",scrollIntoView:"cursor",readOnly:!0},{name:"gotoright",description:"Go to right",bindKey:o("Right","Right|Ctrl-F"),exec:function(e,t){e.navigateRight(t.times)},multiSelectAction:"forEach",scrollIntoView:"cursor",readOnly:!0},{name:"selectpagedown",description:"Select page down",bindKey:"Shift-PageDown",exec:function(e){e.selectPageDown()},readOnly:!0},{name:"pagedown",description:"Page down",bindKey:o(null,"Option-PageDown"),exec:function(e){e.scrollPageDown()},readOnly:!0},{name:"gotopagedown",description:"Go to page down",bindKey:o("PageDown","PageDown|Ctrl-V"),exec:function(e){e.gotoPageDown()},readOnly:!0},{name:"selectpageup",description:"Select page up",bindKey:"Shift-PageUp",exec:function(e){e.selectPageUp()},readOnly:!0},{name:"pageup",description:"Page up",bindKey:o(null,"Option-PageUp"),exec:function(e){e.scrollPageUp()},readOnly:!0},{name:"gotopageup",description:"Go to page up",bindKey:"PageUp",exec:function(e){e.gotoPageUp()},readOnly:!0},{name:"scrollup",description:"Scroll up",bindKey:o("Ctrl-Up",null),exec:function(e){e.renderer.scrollBy(0,-2*e.renderer.layerConfig.lineHeight)},readOnly:!0},{name:"scrolldown",description:"Scroll down",bindKey:o("Ctrl-Down",null),exec:function(e){e.renderer.scrollBy(0,2*e.renderer.layerConfig.lineHeight)},readOnly:!0},{name:"selectlinestart",description:"Select line start",bindKey:"Shift-Home",exec:function(e){e.getSelection().selectLineStart()},multiSelectAction:"forEach",scrollIntoView:"cursor",readOnly:!0},{name:"selectlineend",description:"Select line end",bindKey:"Shift-End",exec:function(e){e.getSelection().selectLineEnd()},multiSelectAction:"forEach",scrollIntoView:"cursor",readOnly:!0},{name:"togglerecording",description:"Toggle recording",bindKey:o("Ctrl-Alt-E","Command-Option-E"),exec:function(e){e.commands.toggleRecording(e)},readOnly:!0},{name:"replaymacro",description:"Replay macro",bindKey:o("Ctrl-Shift-E","Command-Shift-E"),exec:function(e){e.commands.replay(e)},readOnly:!0},{name:"jumptomatching",description:"Jump to matching",bindKey:o("Ctrl-\\|Ctrl-P","Command-\\"),exec:function(e){e.jumpToMatching()},multiSelectAction:"forEach",scrollIntoView:"animate",readOnly:!0},{name:"selecttomatching",description:"Select to matching",bindKey:o("Ctrl-Shift-\\|Ctrl-Shift-P","Command-Shift-\\"),exec:function(e){e.jumpToMatching(!0)},multiSelectAction:"forEach",scrollIntoView:"animate",readOnly:!0},{name:"expandToMatching",description:"Expand to matching",bindKey:o("Ctrl-Shift-M","Ctrl-Shift-M"),exec:function(e){e.jumpToMatching(!0,!0)},multiSelectAction:"forEach",scrollIntoView:"animate",readOnly:!0},{name:"passKeysToBrowser",description:"Pass keys to browser",bindKey:o(null,null),exec:function(){},passEvent:!0,readOnly:!0},{name:"copy",description:"Copy",exec:function(e){},readOnly:!0},{name:"cut",description:"Cut",exec:function(e){var t=e.$copyWithEmptySelection&&e.selection.isEmpty()?e.selection.getLineRange():e.selection.getRange();e._emit("cut",t),t.isEmpty()||e.session.remove(t),e.clearSelection()},scrollIntoView:"cursor",multiSelectAction:"forEach"},{name:"paste",description:"Paste",exec:function(e,t){e.$handlePaste(t)},scrollIntoView:"cursor"},{name:"removeline",description:"Remove line",bindKey:o("Ctrl-D","Command-D"),exec:function(e){e.removeLines()},scrollIntoView:"cursor",multiSelectAction:"forEachLine"},{name:"duplicateSelection",description:"Duplicate selection",bindKey:o("Ctrl-Shift-D","Command-Shift-D"),exec:function(e){e.duplicateSelection()},scrollIntoView:"cursor",multiSelectAction:"forEach"},{name:"sortlines",description:"Sort lines",bindKey:o("Ctrl-Alt-S","Command-Alt-S"),exec:function(e){e.sortLines()},scrollIntoView:"selection",multiSelectAction:"forEachLine"},{name:"togglecomment",description:"Toggle comment",bindKey:o("Ctrl-/","Command-/"),exec:function(e){e.toggleCommentLines()},multiSelectAction:"forEachLine",scrollIntoView:"selectionPart"},{name:"toggleBlockComment",description:"Toggle block comment",bindKey:o("Ctrl-Shift-/","Command-Shift-/"),exec:function(e){e.toggleBlockComment()},multiSelectAction:"forEach",scrollIntoView:"selectionPart"},{name:"modifyNumberUp",description:"Modify number up",bindKey:o("Ctrl-Shift-Up","Alt-Shift-Up"),exec:function(e){e.modifyNumber(1)},scrollIntoView:"cursor",multiSelectAction:"forEach"},{name:"modifyNumberDown",description:"Modify number down",bindKey:o("Ctrl-Shift-Down","Alt-Shift-Down"),exec:function(e){e.modifyNumber(-1)},scrollIntoView:"cursor",multiSelectAction:"forEach"},{name:"replace",description:"Replace",bindKey:o("Ctrl-H","Command-Option-F"),exec:function(e){r.loadModule("ace/ext/searchbox",(function(t){t.Search(e,!0)}))}},{name:"undo",description:"Undo",bindKey:o("Ctrl-Z","Command-Z"),exec:function(e){e.undo()}},{name:"redo",description:"Redo",bindKey:o("Ctrl-Shift-Z|Ctrl-Y","Command-Shift-Z|Command-Y"),exec:function(e){e.redo()}},{name:"copylinesup",description:"Copy lines up",bindKey:o("Alt-Shift-Up","Command-Option-Up"),exec:function(e){e.copyLinesUp()},scrollIntoView:"cursor"},{name:"movelinesup",description:"Move lines up",bindKey:o("Alt-Up","Option-Up"),exec:function(e){e.moveLinesUp()},scrollIntoView:"cursor"},{name:"copylinesdown",description:"Copy lines down",bindKey:o("Alt-Shift-Down","Command-Option-Down"),exec:function(e){e.copyLinesDown()},scrollIntoView:"cursor"},{name:"movelinesdown",description:"Move lines down",bindKey:o("Alt-Down","Option-Down"),exec:function(e){e.moveLinesDown()},scrollIntoView:"cursor"},{name:"del",description:"Delete",bindKey:o("Delete","Delete|Ctrl-D|Shift-Delete"),exec:function(e){e.remove("right")},multiSelectAction:"forEach",scrollIntoView:"cursor"},{name:"backspace",description:"Backspace",bindKey:o("Shift-Backspace|Backspace","Ctrl-Backspace|Shift-Backspace|Backspace|Ctrl-H"),exec:function(e){e.remove("left")},multiSelectAction:"forEach",scrollIntoView:"cursor"},{name:"cut_or_delete",description:"Cut or delete",bindKey:o("Shift-Delete",null),exec:function(e){if(!e.selection.isEmpty())return!1;e.remove("left")},multiSelectAction:"forEach",scrollIntoView:"cursor"},{name:"removetolinestart",description:"Remove to line start",bindKey:o("Alt-Backspace","Command-Backspace"),exec:function(e){e.removeToLineStart()},multiSelectAction:"forEach",scrollIntoView:"cursor"},{name:"removetolineend",description:"Remove to line end",bindKey:o("Alt-Delete","Ctrl-K|Command-Delete"),exec:function(e){e.removeToLineEnd()},multiSelectAction:"forEach",scrollIntoView:"cursor"},{name:"removetolinestarthard",description:"Remove to line start hard",bindKey:o("Ctrl-Shift-Backspace",null),exec:function(e){var t=e.selection.getRange();t.start.column=0,e.session.remove(t)},multiSelectAction:"forEach",scrollIntoView:"cursor"},{name:"removetolineendhard",description:"Remove to line end hard",bindKey:o("Ctrl-Shift-Delete",null),exec:function(e){var t=e.selection.getRange();t.end.column=Number.MAX_VALUE,e.session.remove(t)},multiSelectAction:"forEach",scrollIntoView:"cursor"},{name:"removewordleft",description:"Remove word left",bindKey:o("Ctrl-Backspace","Alt-Backspace|Ctrl-Alt-Backspace"),exec:function(e){e.removeWordLeft()},multiSelectAction:"forEach",scrollIntoView:"cursor"},{name:"removewordright",description:"Remove word right",bindKey:o("Ctrl-Delete","Alt-Delete"),exec:function(e){e.removeWordRight()},multiSelectAction:"forEach",scrollIntoView:"cursor"},{name:"outdent",description:"Outdent",bindKey:o("Shift-Tab","Shift-Tab"),exec:function(e){e.blockOutdent()},multiSelectAction:"forEach",scrollIntoView:"selectionPart"},{name:"indent",description:"Indent",bindKey:o("Tab","Tab"),exec:function(e){e.indent()},multiSelectAction:"forEach",scrollIntoView:"selectionPart"},{name:"blockoutdent",description:"Block outdent",bindKey:o("Ctrl-[","Ctrl-["),exec:function(e){e.blockOutdent()},multiSelectAction:"forEachLine",scrollIntoView:"selectionPart"},{name:"blockindent",description:"Block indent",bindKey:o("Ctrl-]","Ctrl-]"),exec:function(e){e.blockIndent()},multiSelectAction:"forEachLine",scrollIntoView:"selectionPart"},{name:"insertstring",description:"Insert string",exec:function(e,t){e.insert(t)},multiSelectAction:"forEach",scrollIntoView:"cursor"},{name:"inserttext",description:"Insert text",exec:function(e,t){e.insert(i.stringRepeat(t.text||"",t.times||1))},multiSelectAction:"forEach",scrollIntoView:"cursor"},{name:"splitline",description:"Split line",bindKey:o(null,"Ctrl-O"),exec:function(e){e.splitLine()},multiSelectAction:"forEach",scrollIntoView:"cursor"},{name:"transposeletters",description:"Transpose letters",bindKey:o("Alt-Shift-X","Ctrl-T"),exec:function(e){e.transposeLetters()},multiSelectAction:function(e){e.transposeSelections(1)},scrollIntoView:"cursor"},{name:"touppercase",description:"To uppercase",bindKey:o("Ctrl-U","Ctrl-U"),exec:function(e){e.toUpperCase()},multiSelectAction:"forEach",scrollIntoView:"cursor"},{name:"tolowercase",description:"To lowercase",bindKey:o("Ctrl-Shift-U","Ctrl-Shift-U"),exec:function(e){e.toLowerCase()},multiSelectAction:"forEach",scrollIntoView:"cursor"},{name:"expandtoline",description:"Expand to line",bindKey:o("Ctrl-Shift-L","Command-Shift-L"),exec:function(e){var t=e.selection.getRange();t.start.column=t.end.column=0,t.end.row++,e.selection.setRange(t,!1)},multiSelectAction:"forEach",scrollIntoView:"cursor",readOnly:!0},{name:"joinlines",description:"Join lines",bindKey:o(null,null),exec:function(e){for(var t=e.selection.isBackwards(),n=t?e.selection.getSelectionLead():e.selection.getSelectionAnchor(),r=t?e.selection.getSelectionAnchor():e.selection.getSelectionLead(),o=e.session.doc.getLine(n.row).length,a=e.session.doc.getTextRange(e.selection.getRange()).replace(/\n\s*/," ").length,l=e.session.doc.getLine(n.row),c=n.row+1;c<=r.row+1;c++){var u=i.stringTrimLeft(i.stringTrimRight(e.session.doc.getLine(c)));0!==u.length&&(u=" "+u),l+=u}r.row+10?(e.selection.moveCursorTo(n.row,n.column),e.selection.selectTo(n.row,n.column+a)):(o=e.session.doc.getLine(n.row).length>o?o+1:o,e.selection.moveCursorTo(n.row,o))},multiSelectAction:"forEach",readOnly:!0},{name:"invertSelection",description:"Invert selection",bindKey:o(null,null),exec:function(e){var t=e.session.doc.getLength()-1,n=e.session.doc.getLine(t).length,i=e.selection.rangeList.ranges,r=[];i.length<1&&(i=[e.selection.getRange()]);for(var o=0;o=r.lastRow||i.end.row<=r.firstRow)&&this.renderer.scrollSelectionIntoView(this.selection.anchor,this.selection.lead)}"animate"==n&&this.renderer.animateScrolling(this.curOp.scrollTop)}var s=this.selection.toJSON();this.curOp.selectionAfter=s,this.$lastSel=this.selection.toJSON(),this.session.getUndoManager().addSelection(s),this.prevOp=this.curOp,this.curOp=null}},this.$mergeableCommands=["backspace","del","insertstring"],this.$historyTracker=function(e){if(this.$mergeUndoDeltas){var t=this.prevOp,n=this.$mergeableCommands,i=t.command&&e.command.name==t.command.name;if("insertstring"==e.command.name){var r=e.args;void 0===this.mergeNextCommand&&(this.mergeNextCommand=!0),i=i&&this.mergeNextCommand&&(!/\s/.test(r)||/\s/.test(t.args)),this.mergeNextCommand=!0}else i=i&&-1!==n.indexOf(e.command.name);"always"!=this.$mergeUndoDeltas&&Date.now()-this.sequenceStartTime>2e3&&(i=!1),i?this.session.mergeUndoDeltas=!0:-1!==n.indexOf(e.command.name)&&(this.sequenceStartTime=Date.now())}},this.setKeyboardHandler=function(e,t){if(e&&"string"==typeof e&&"ace"!=e){this.$keybindingId=e;var n=this;E.loadModule(["keybinding",e],(function(i){n.$keybindingId==e&&n.keyBinding.setKeyboardHandler(i&&i.handler),t&&t()}))}else this.$keybindingId=null,this.keyBinding.setKeyboardHandler(e),t&&t()},this.getKeyboardHandler=function(){return this.keyBinding.getKeyboardHandler()},this.setSession=function(e){if(this.session!=e){this.curOp&&this.endOperation(),this.curOp={};var t=this.session;if(t){this.session.off("change",this.$onDocumentChange),this.session.off("changeMode",this.$onChangeMode),this.session.off("tokenizerUpdate",this.$onTokenizerUpdate),this.session.off("changeTabSize",this.$onChangeTabSize),this.session.off("changeWrapLimit",this.$onChangeWrapLimit),this.session.off("changeWrapMode",this.$onChangeWrapMode),this.session.off("changeFold",this.$onChangeFold),this.session.off("changeFrontMarker",this.$onChangeFrontMarker),this.session.off("changeBackMarker",this.$onChangeBackMarker),this.session.off("changeBreakpoint",this.$onChangeBreakpoint),this.session.off("changeAnnotation",this.$onChangeAnnotation),this.session.off("changeOverwrite",this.$onCursorChange),this.session.off("changeScrollTop",this.$onScrollTopChange),this.session.off("changeScrollLeft",this.$onScrollLeftChange);var n=this.session.getSelection();n.off("changeCursor",this.$onCursorChange),n.off("changeSelection",this.$onSelectionChange)}this.session=e,e?(this.$onDocumentChange=this.onDocumentChange.bind(this),e.on("change",this.$onDocumentChange),this.renderer.setSession(e),this.$onChangeMode=this.onChangeMode.bind(this),e.on("changeMode",this.$onChangeMode),this.$onTokenizerUpdate=this.onTokenizerUpdate.bind(this),e.on("tokenizerUpdate",this.$onTokenizerUpdate),this.$onChangeTabSize=this.renderer.onChangeTabSize.bind(this.renderer),e.on("changeTabSize",this.$onChangeTabSize),this.$onChangeWrapLimit=this.onChangeWrapLimit.bind(this),e.on("changeWrapLimit",this.$onChangeWrapLimit),this.$onChangeWrapMode=this.onChangeWrapMode.bind(this),e.on("changeWrapMode",this.$onChangeWrapMode),this.$onChangeFold=this.onChangeFold.bind(this),e.on("changeFold",this.$onChangeFold),this.$onChangeFrontMarker=this.onChangeFrontMarker.bind(this),this.session.on("changeFrontMarker",this.$onChangeFrontMarker),this.$onChangeBackMarker=this.onChangeBackMarker.bind(this),this.session.on("changeBackMarker",this.$onChangeBackMarker),this.$onChangeBreakpoint=this.onChangeBreakpoint.bind(this),this.session.on("changeBreakpoint",this.$onChangeBreakpoint),this.$onChangeAnnotation=this.onChangeAnnotation.bind(this),this.session.on("changeAnnotation",this.$onChangeAnnotation),this.$onCursorChange=this.onCursorChange.bind(this),this.session.on("changeOverwrite",this.$onCursorChange),this.$onScrollTopChange=this.onScrollTopChange.bind(this),this.session.on("changeScrollTop",this.$onScrollTopChange),this.$onScrollLeftChange=this.onScrollLeftChange.bind(this),this.session.on("changeScrollLeft",this.$onScrollLeftChange),this.selection=e.getSelection(),this.selection.on("changeCursor",this.$onCursorChange),this.$onSelectionChange=this.onSelectionChange.bind(this),this.selection.on("changeSelection",this.$onSelectionChange),this.onChangeMode(),this.onCursorChange(),this.onScrollTopChange(),this.onScrollLeftChange(),this.onSelectionChange(),this.onChangeFrontMarker(),this.onChangeBackMarker(),this.onChangeBreakpoint(),this.onChangeAnnotation(),this.session.getUseWrapMode()&&this.renderer.adjustWrapLimit(),this.renderer.updateFull()):(this.selection=null,this.renderer.setSession(e)),this._signal("changeSession",{session:e,oldSession:t}),this.curOp=null,t&&t._signal("changeEditor",{oldEditor:this}),e&&e._signal("changeEditor",{editor:this}),e&&e.bgTokenizer&&e.bgTokenizer.scheduleStart()}},this.getSession=function(){return this.session},this.setValue=function(e,t){return this.session.doc.setValue(e),t?1==t?this.navigateFileEnd():-1==t&&this.navigateFileStart():this.selectAll(),e},this.getValue=function(){return this.session.getValue()},this.getSelection=function(){return this.selection},this.resize=function(e){this.renderer.onResize(e)},this.setTheme=function(e,t){this.renderer.setTheme(e,t)},this.getTheme=function(){return this.renderer.getTheme()},this.setStyle=function(e){this.renderer.setStyle(e)},this.unsetStyle=function(e){this.renderer.unsetStyle(e)},this.getFontSize=function(){return this.getOption("fontSize")||r.computedStyle(this.container).fontSize},this.setFontSize=function(e){this.setOption("fontSize",e)},this.$highlightBrackets=function(){if(this.session.$bracketHighlight&&(this.session.removeMarker(this.session.$bracketHighlight),this.session.$bracketHighlight=null),!this.$highlightPending){var e=this;this.$highlightPending=!0,setTimeout((function(){e.$highlightPending=!1;var t=e.session;if(t&&t.bgTokenizer){var n=t.findMatchingBracket(e.getCursorPosition());if(n)var i=new m(n.row,n.column,n.row,n.column+1);else t.$mode.getMatching&&(i=t.$mode.getMatching(e.session));i&&(t.$bracketHighlight=t.addMarker(i,"ace_bracket","text"))}}),50)}},this.$highlightTags=function(){if(!this.$highlightTagPending){var e=this;this.$highlightTagPending=!0,setTimeout((function(){e.$highlightTagPending=!1;var t=e.session;if(t&&t.bgTokenizer){var n=e.getCursorPosition(),i=new v(e.session,n.row,n.column),r=i.getCurrentToken();if(!r||!/\b(?:tag-open|tag-name)/.test(r.type))return t.removeMarker(t.$tagHighlight),void(t.$tagHighlight=null);if(-1==r.type.indexOf("tag-open")||(r=i.stepForward())){var s=r.value,o=0,a=i.stepBackward();if("<"==a.value)do{a=r,(r=i.stepForward())&&r.value===s&&-1!==r.type.indexOf("tag-name")&&("<"===a.value?o++:"=0);else{do{r=a,a=i.stepBackward(),r&&r.value===s&&-1!==r.type.indexOf("tag-name")&&("<"===a.value?o++:"1||(e=!1)),t.$highlightLineMarker&&!e)t.removeMarker(t.$highlightLineMarker.id),t.$highlightLineMarker=null;else if(!t.$highlightLineMarker&&e){var n=new m(e.row,e.column,e.row,1/0);n.id=t.addMarker(n,"ace_active-line","screenLine"),t.$highlightLineMarker=n}else e&&(t.$highlightLineMarker.start.row=e.row,t.$highlightLineMarker.end.row=e.row,t.$highlightLineMarker.start.column=e.column,t._signal("changeBackMarker"))},this.onSelectionChange=function(e){var t=this.session;if(t.$selectionMarker&&t.removeMarker(t.$selectionMarker),t.$selectionMarker=null,this.selection.isEmpty())this.$updateHighlightActiveLine();else{var n=this.selection.getRange(),i=this.getSelectionStyle();t.$selectionMarker=t.addMarker(n,"ace_selection",i)}var r=this.$highlightSelectedWord&&this.$getSelectionHighLightRegexp();this.session.highlight(r),this._signal("changeSelection")},this.$getSelectionHighLightRegexp=function(){var e=this.session,t=this.getSelectionRange();if(!t.isEmpty()&&!t.isMultiLine()){var n=t.start.column,i=t.end.column,r=e.getLine(t.start.row),s=r.substring(n,i);if(!(s.length>5e3)&&/[\w\d]/.test(s)){var o=this.$search.$assembleRegExp({wholeWord:!0,caseSensitive:!0,needle:s}),a=r.substring(n-1,i+1);if(o.test(a))return o}}},this.onChangeFrontMarker=function(){this.renderer.updateFrontMarkers()},this.onChangeBackMarker=function(){this.renderer.updateBackMarkers()},this.onChangeBreakpoint=function(){this.renderer.updateBreakpoints()},this.onChangeAnnotation=function(){this.renderer.setAnnotations(this.session.getAnnotations())},this.onChangeMode=function(e){this.renderer.updateText(),this._emit("changeMode",e)},this.onChangeWrapLimit=function(){this.renderer.updateFull()},this.onChangeWrapMode=function(){this.renderer.onResize(!0)},this.onChangeFold=function(){this.$updateHighlightActiveLine(),this.renderer.updateFull()},this.getSelectedText=function(){return this.session.getTextRange(this.getSelectionRange())},this.getCopyText=function(){var e=this.getSelectedText(),t=this.session.doc.getNewLineCharacter(),n=!1;if(!e&&this.$copyWithEmptySelection){n=!0;for(var i=this.selection.getAllRanges(),r=0;ra.search(/\S|$/)){var l=a.substr(r.column).search(/\S|$/);n.doc.removeInLine(r.row,r.column,r.column+l)}}this.clearSelection();var c=r.column,u=n.getState(r.row),h=(a=n.getLine(r.row),i.checkOutdent(u,a,e));if(n.insert(r,e),s&&s.selection&&(2==s.selection.length?this.selection.setSelectionRange(new m(r.row,c+s.selection[0],r.row,c+s.selection[1])):this.selection.setSelectionRange(new m(r.row+s.selection[0],s.selection[1],r.row+s.selection[2],s.selection[3]))),n.getDocument().isNewLine(e)){var d=i.getNextLineIndent(u,a.slice(0,r.column),n.getTabString());n.insert({row:r.row+1,column:0},d)}h&&i.autoOutdent(u,n,r.row)},this.onTextInput=function(e,t){if(!t)return this.keyBinding.onTextInput(e);this.startOperation({command:{name:"insertstring"}});var n=this.applyComposition.bind(this,e,t);this.selection.rangeCount?this.forEachSelection(n):n(),this.endOperation()},this.applyComposition=function(e,t){var n;(t.extendLeft||t.extendRight)&&((n=this.selection.getRange()).start.column-=t.extendLeft,n.end.column+=t.extendRight,this.selection.setRange(n),e||n.isEmpty()||this.remove()),!e&&this.selection.isEmpty()||this.insert(e,!0),(t.restoreStart||t.restoreEnd)&&((n=this.selection.getRange()).start.column-=t.restoreStart,n.end.column-=t.restoreEnd,this.selection.setRange(n))},this.onCommandKey=function(e,t,n){return this.keyBinding.onCommandKey(e,t,n)},this.setOverwrite=function(e){this.session.setOverwrite(e)},this.getOverwrite=function(){return this.session.getOverwrite()},this.toggleOverwrite=function(){this.session.toggleOverwrite()},this.setScrollSpeed=function(e){this.setOption("scrollSpeed",e)},this.getScrollSpeed=function(){return this.getOption("scrollSpeed")},this.setDragDelay=function(e){this.setOption("dragDelay",e)},this.getDragDelay=function(){return this.getOption("dragDelay")},this.setSelectionStyle=function(e){this.setOption("selectionStyle",e)},this.getSelectionStyle=function(){return this.getOption("selectionStyle")},this.setHighlightActiveLine=function(e){this.setOption("highlightActiveLine",e)},this.getHighlightActiveLine=function(){return this.getOption("highlightActiveLine")},this.setHighlightGutterLine=function(e){this.setOption("highlightGutterLine",e)},this.getHighlightGutterLine=function(){return this.getOption("highlightGutterLine")},this.setHighlightSelectedWord=function(e){this.setOption("highlightSelectedWord",e)},this.getHighlightSelectedWord=function(){return this.$highlightSelectedWord},this.setAnimatedScroll=function(e){this.renderer.setAnimatedScroll(e)},this.getAnimatedScroll=function(){return this.renderer.getAnimatedScroll()},this.setShowInvisibles=function(e){this.renderer.setShowInvisibles(e)},this.getShowInvisibles=function(){return this.renderer.getShowInvisibles()},this.setDisplayIndentGuides=function(e){this.renderer.setDisplayIndentGuides(e)},this.getDisplayIndentGuides=function(){return this.renderer.getDisplayIndentGuides()},this.setShowPrintMargin=function(e){this.renderer.setShowPrintMargin(e)},this.getShowPrintMargin=function(){return this.renderer.getShowPrintMargin()},this.setPrintMarginColumn=function(e){this.renderer.setPrintMarginColumn(e)},this.getPrintMarginColumn=function(){return this.renderer.getPrintMarginColumn()},this.setReadOnly=function(e){this.setOption("readOnly",e)},this.getReadOnly=function(){return this.getOption("readOnly")},this.setBehavioursEnabled=function(e){this.setOption("behavioursEnabled",e)},this.getBehavioursEnabled=function(){return this.getOption("behavioursEnabled")},this.setWrapBehavioursEnabled=function(e){this.setOption("wrapBehavioursEnabled",e)},this.getWrapBehavioursEnabled=function(){return this.getOption("wrapBehavioursEnabled")},this.setShowFoldWidgets=function(e){this.setOption("showFoldWidgets",e)},this.getShowFoldWidgets=function(){return this.getOption("showFoldWidgets")},this.setFadeFoldWidgets=function(e){this.setOption("fadeFoldWidgets",e)},this.getFadeFoldWidgets=function(){return this.getOption("fadeFoldWidgets")},this.remove=function(e){this.selection.isEmpty()&&("left"==e?this.selection.selectLeft():this.selection.selectRight());var t=this.getSelectionRange();if(this.getBehavioursEnabled()){var n=this.session,i=n.getState(t.start.row),r=n.getMode().transformAction(i,"deletion",this,n,t);if(0===t.end.column){var s=n.getTextRange(t);if("\n"==s[s.length-1]){var o=n.getLine(t.end.row);/^\s+$/.test(o)&&(t.end.column=o.length)}}r&&(t=r)}this.session.remove(t),this.clearSelection()},this.removeWordRight=function(){this.selection.isEmpty()&&this.selection.selectWordRight(),this.session.remove(this.getSelectionRange()),this.clearSelection()},this.removeWordLeft=function(){this.selection.isEmpty()&&this.selection.selectWordLeft(),this.session.remove(this.getSelectionRange()),this.clearSelection()},this.removeToLineStart=function(){this.selection.isEmpty()&&this.selection.selectLineStart(),this.selection.isEmpty()&&this.selection.selectLeft(),this.session.remove(this.getSelectionRange()),this.clearSelection()},this.removeToLineEnd=function(){this.selection.isEmpty()&&this.selection.selectLineEnd();var e=this.getSelectionRange();e.start.column==e.end.column&&e.start.row==e.end.row&&(e.end.column=0,e.end.row++),this.session.remove(e),this.clearSelection()},this.splitLine=function(){this.selection.isEmpty()||(this.session.remove(this.getSelectionRange()),this.clearSelection());var e=this.getCursorPosition();this.insert("\n"),this.moveCursorToPosition(e)},this.transposeLetters=function(){if(this.selection.isEmpty()){var e=this.getCursorPosition(),t=e.column;if(0!==t){var n,i,r=this.session.getLine(e.row);tt.toLowerCase()?1:0}));var r=new m(0,0,0,0);for(i=e.first;i<=e.last;i++){var s=t.getLine(i);r.start.row=i,r.end.row=i,r.end.column=s.length,t.replace(r,n[i-e.first])}},this.toggleCommentLines=function(){var e=this.session.getState(this.getCursorPosition().row),t=this.$getSelectedRows();this.session.getMode().toggleCommentLines(e,this.session,t.first,t.last)},this.toggleBlockComment=function(){var e=this.getCursorPosition(),t=this.session.getState(e.row),n=this.getSelectionRange();this.session.getMode().toggleBlockComment(t,this.session,n,e)},this.getNumberAt=function(e,t){var n=/[\-]?[0-9]+(?:\.[0-9]+)?/g;n.lastIndex=0;for(var i=this.session.getLine(e);n.lastIndex=t)return{value:r[0],start:r.index,end:r.index+r[0].length}}return null},this.modifyNumber=function(e){var t=this.selection.getCursor().row,n=this.selection.getCursor().column,i=new m(t,n-1,t,n),r=this.session.getTextRange(i);if(!isNaN(parseFloat(r))&&isFinite(r)){var s=this.getNumberAt(t,n);if(s){var o=s.value.indexOf(".")>=0?s.start+s.value.indexOf(".")+1:s.end,a=s.start+s.value.length-o,l=parseFloat(s.value);l*=Math.pow(10,a),o!==s.end&&n=a&&o<=l&&(n=t,c.selection.clearSelection(),c.moveCursorTo(e,a+i),c.selection.selectTo(e,l+i)),a=l}));for(var u,h=this.$toggleWordPairs,d=0;dm+1)break;m=p.last}for(u--,a=this.session.$moveLines(d,m,t?0:e),t&&-1==e&&(h=u+1);h<=u;)o[h].moveBy(a,0),h++;t||(a=0),l+=a}r.fromOrientedRange(r.ranges[0]),r.rangeList.attach(this.session),this.inVirtualSelectionMode=!1}},this.$getSelectedRows=function(e){return e=(e||this.getSelectionRange()).collapseRows(),{first:this.session.getRowFoldStart(e.start.row),last:this.session.getRowFoldEnd(e.end.row)}},this.onCompositionStart=function(e){this.renderer.showComposition(e)},this.onCompositionUpdate=function(e){this.renderer.setCompositionText(e)},this.onCompositionEnd=function(){this.renderer.hideComposition()},this.getFirstVisibleRow=function(){return this.renderer.getFirstVisibleRow()},this.getLastVisibleRow=function(){return this.renderer.getLastVisibleRow()},this.isRowVisible=function(e){return e>=this.getFirstVisibleRow()&&e<=this.getLastVisibleRow()},this.isRowFullyVisible=function(e){return e>=this.renderer.getFirstFullyVisibleRow()&&e<=this.renderer.getLastFullyVisibleRow()},this.$getVisibleRowCount=function(){return this.renderer.getScrollBottomRow()-this.renderer.getScrollTopRow()+1},this.$moveByPage=function(e,t){var n=this.renderer,i=this.renderer.layerConfig,r=e*Math.floor(i.height/i.lineHeight);!0===t?this.selection.$moveSelection((function(){this.moveCursorBy(r,0)})):!1===t&&(this.selection.moveCursorBy(r,0),this.selection.clearSelection());var s=n.scrollTop;n.scrollBy(0,r*i.lineHeight),null!=t&&n.scrollCursorIntoView(null,.5),n.animateScrolling(s)},this.selectPageDown=function(){this.$moveByPage(1,!0)},this.selectPageUp=function(){this.$moveByPage(-1,!0)},this.gotoPageDown=function(){this.$moveByPage(1,!1)},this.gotoPageUp=function(){this.$moveByPage(-1,!1)},this.scrollPageDown=function(){this.$moveByPage(1)},this.scrollPageUp=function(){this.$moveByPage(-1)},this.scrollToRow=function(e){this.renderer.scrollToRow(e)},this.scrollToLine=function(e,t,n,i){this.renderer.scrollToLine(e,t,n,i)},this.centerSelection=function(){var e=this.getSelectionRange(),t={row:Math.floor(e.start.row+(e.end.row-e.start.row)/2),column:Math.floor(e.start.column+(e.end.column-e.start.column)/2)};this.renderer.alignCursor(t,.5)},this.getCursorPosition=function(){return this.selection.getCursor()},this.getCursorPositionScreen=function(){return this.session.documentToScreenPosition(this.getCursorPosition())},this.getSelectionRange=function(){return this.selection.getRange()},this.selectAll=function(){this.selection.selectAll()},this.clearSelection=function(){this.selection.clearSelection()},this.moveCursorTo=function(e,t){this.selection.moveCursorTo(e,t)},this.moveCursorToPosition=function(e){this.selection.moveCursorToPosition(e)},this.jumpToMatching=function(e,t){var n=this.getCursorPosition(),i=new v(this.session,n.row,n.column),r=i.getCurrentToken(),s=r||i.stepForward();if(s){var o,a,l=!1,c={},u=n.column-s.start,h={")":"(","(":"(","]":"[","[":"[","{":"{","}":"{"};do{if(s.value.match(/[{}()\[\]]/g)){for(;u=0;--s)this.$tryReplace(n[s],e)&&i++;return this.selection.setSelectionRange(r),i},this.$tryReplace=function(e,t){var n=this.session.getTextRange(e);return null!==(t=this.$search.replace(n,t))?(e.end=this.session.replace(e,t),e):null},this.getLastSearchOptions=function(){return this.$search.getOptions()},this.find=function(e,t,n){t||(t={}),"string"==typeof e||e instanceof RegExp?t.needle=e:"object"==typeof e&&i.mixin(t,e);var r=this.selection.getRange();null==t.needle&&((e=this.session.getTextRange(r)||this.$search.$options.needle)||(r=this.session.getWordRange(r.start.row,r.start.column),e=this.session.getTextRange(r)),this.$search.set({needle:e})),this.$search.set(t),t.start||this.$search.set({start:r});var s=this.$search.find(this.session);return t.preventScroll?s:s?(this.revealRange(s,n),s):(t.backwards?r.start=r.end:r.end=r.start,void this.selection.setRange(r))},this.findNext=function(e,t){this.find({skipCurrent:!0,backwards:!1},e,t)},this.findPrevious=function(e,t){this.find(e,{skipCurrent:!0,backwards:!0},t)},this.revealRange=function(e,t){this.session.unfold(e),this.selection.setSelectionRange(e);var n=this.renderer.scrollTop;this.renderer.scrollSelectionIntoView(e.start,e.end,.5),!1!==t&&this.renderer.animateScrolling(n)},this.undo=function(){this.session.getUndoManager().undo(this.session),this.renderer.scrollCursorIntoView(null,.5)},this.redo=function(){this.session.getUndoManager().redo(this.session),this.renderer.scrollCursorIntoView(null,.5)},this.destroy=function(){this.renderer.destroy(),this._signal("destroy",this),this.session&&this.session.destroy()},this.setAutoScrollEditorIntoView=function(e){if(e){var t,n=this,i=!1;this.$scrollAnchor||(this.$scrollAnchor=document.createElement("div"));var r=this.$scrollAnchor;r.style.cssText="position:absolute",this.container.insertBefore(r,this.container.firstChild);var s=this.on("changeSelection",(function(){i=!0})),o=this.renderer.on("beforeRender",(function(){i&&(t=n.renderer.container.getBoundingClientRect())})),a=this.renderer.on("afterRender",(function(){if(i&&t&&(n.isFocused()||n.searchBox&&n.searchBox.isFocused())){var e=n.renderer,s=e.$cursorLayer.$pixelPos,o=e.layerConfig,a=s.top-o.offset;null!=(i=s.top>=0&&a+t.top<0||!(s.topwindow.innerHeight)&&null)&&(r.style.top=a+"px",r.style.left=s.left+"px",r.style.height=o.lineHeight+"px",r.scrollIntoView(i)),i=t=null}}));this.setAutoScrollEditorIntoView=function(e){e||(delete this.setAutoScrollEditorIntoView,this.off("changeSelection",s),this.renderer.off("afterRender",a),this.renderer.off("beforeRender",o))}}},this.$resetCursorStyle=function(){var e=this.$cursorStyle||"ace",t=this.renderer.$cursorLayer;t&&(t.setSmoothBlinking(/smooth/.test(e)),t.isBlinking=!this.$readOnly&&"wide"!=e,r.setCssClass(t.element,"ace_slim-cursors",/slim/.test(e)))},this.prompt=function(e,t,n){var i=this;E.loadModule("./ext/prompt",(function(r){r.prompt(i,e,t,n)}))}}.call(C.prototype),E.defineOptions(C.prototype,"editor",{selectionStyle:{set:function(e){this.onSelectionChange(),this._signal("changeSelectionStyle",{data:e})},initialValue:"line"},highlightActiveLine:{set:function(){this.$updateHighlightActiveLine()},initialValue:!0},highlightSelectedWord:{set:function(e){this.$onSelectionChange()},initialValue:!0},readOnly:{set:function(e){this.textInput.setReadOnly(e),this.$resetCursorStyle()},initialValue:!1},copyWithEmptySelection:{set:function(e){this.textInput.setCopyWithEmptySelection(e)},initialValue:!1},cursorStyle:{set:function(e){this.$resetCursorStyle()},values:["ace","slim","smooth","wide"],initialValue:"ace"},mergeUndoDeltas:{values:[!1,!0,"always"],initialValue:!0},behavioursEnabled:{initialValue:!0},wrapBehavioursEnabled:{initialValue:!0},autoScrollEditorIntoView:{set:function(e){this.setAutoScrollEditorIntoView(e)}},keyboardHandler:{set:function(e){this.setKeyboardHandler(e)},get:function(){return this.$keybindingId},handlesSet:!0},value:{set:function(e){this.session.setValue(e)},get:function(){return this.getValue()},handlesSet:!0,hidden:!0},session:{set:function(e){this.setSession(e)},get:function(){return this.session},handlesSet:!0,hidden:!0},showLineNumbers:{set:function(e){this.renderer.$gutterLayer.setShowLineNumbers(e),this.renderer.$loop.schedule(this.renderer.CHANGE_GUTTER),e&&this.$relativeLineNumbers?A.attach(this):A.detach(this)},initialValue:!0},relativeLineNumbers:{set:function(e){this.$showLineNumbers&&e?A.attach(this):A.detach(this)}},placeholder:{set:function(e){this.$updatePlaceholder||(this.$updatePlaceholder=function(){var e=this.renderer.$composition||this.getValue();if(e&&this.renderer.placeholderNode)this.renderer.off("afterRender",this.$updatePlaceholder),r.removeCssClass(this.container,"ace_hasPlaceholder"),this.renderer.placeholderNode.remove(),this.renderer.placeholderNode=null;else if(!e&&!this.renderer.placeholderNode){this.renderer.on("afterRender",this.$updatePlaceholder),r.addCssClass(this.container,"ace_hasPlaceholder");var t=r.createElement("div");t.className="ace_placeholder",t.textContent=this.$placeholder||"",this.renderer.placeholderNode=t,this.renderer.content.appendChild(this.renderer.placeholderNode)}}.bind(this),this.on("input",this.$updatePlaceholder)),this.$updatePlaceholder()}},hScrollBarAlwaysVisible:"renderer",vScrollBarAlwaysVisible:"renderer",highlightGutterLine:"renderer",animatedScroll:"renderer",showInvisibles:"renderer",showPrintMargin:"renderer",printMarginColumn:"renderer",printMargin:"renderer",fadeFoldWidgets:"renderer",showFoldWidgets:"renderer",displayIndentGuides:"renderer",showGutter:"renderer",fontSize:"renderer",fontFamily:"renderer",maxLines:"renderer",minLines:"renderer",scrollPastEnd:"renderer",fixedWidthGutter:"renderer",theme:"renderer",hasCssTransforms:"renderer",maxPixelHeight:"renderer",useTextareaForIME:"renderer",scrollSpeed:"$mouseHandler",dragDelay:"$mouseHandler",dragEnabled:"$mouseHandler",focusTimeout:"$mouseHandler",tooltipFollowsMouse:"$mouseHandler",firstLineNumber:"session",overwrite:"session",newLineMode:"session",useWorker:"session",useSoftTabs:"session",navigateWithinSoftTabs:"session",tabSize:"session",wrap:"session",indentedSoftWrap:"session",foldStyle:"session",mode:"session"});var A={getText:function(e,t){return(Math.abs(e.selection.lead.row-t)||t+1+(t<9?"·":""))+""},getWidth:function(e,t,n){return Math.max(t.toString().length,(n.lastRow+1).toString().length,2)*n.characterWidth},update:function(e,t){t.renderer.$loop.schedule(t.renderer.CHANGE_GUTTER)},attach:function(e){e.renderer.$gutterLayer.$renderer=this,e.on("changeSelection",this.update),this.update(null,e)},detach:function(e){e.renderer.$gutterLayer.$renderer==this&&(e.renderer.$gutterLayer.$renderer=null),e.off("changeSelection",this.update),this.update(null,e)}};t.Editor=C})),ace.define("ace/undomanager",["require","exports","module","ace/range"],(function(e,t,n){"use strict";var i=function(){this.$maxRev=0,this.$fromUndo=!1,this.reset()};(function(){this.addSession=function(e){this.$session=e},this.add=function(e,t,n){this.$fromUndo||e!=this.$lastDelta&&(!1!==t&&this.lastDeltas||(this.lastDeltas=[],this.$undoStack.push(this.lastDeltas),e.id=this.$rev=++this.$maxRev),"remove"!=e.action&&"insert"!=e.action||(this.$lastDelta=e),this.lastDeltas.push(e))},this.addSelection=function(e,t){this.selections.push({value:e,rev:t||this.$rev})},this.startNewGroup=function(){return this.lastDeltas=null,this.$rev},this.markIgnored=function(e,t){null==t&&(t=this.$rev+1);for(var n=this.$undoStack,i=n.length;i--;){var r=n[i][0];if(r.id<=e)break;r.id0},this.canRedo=function(){return this.$redoStack.length>0},this.bookmark=function(e){null==e&&(e=this.$rev),this.mark=e},this.isAtBookmark=function(){return this.$rev===this.mark},this.toJSON=function(){},this.fromJSON=function(){},this.hasUndo=this.canUndo,this.hasRedo=this.canRedo,this.isClean=this.isAtBookmark,this.markClean=this.bookmark,this.$prettyPrint=function(e){return e?a(e):a(this.$undoStack)+"\n---\n"+a(this.$redoStack)}}).call(i.prototype);var r=e("./range").Range,s=r.comparePoints;function o(e){return{row:e.row,column:e.column}}function a(e){if(e=e||this,Array.isArray(e))return e.map(a).join("\n");var t="";return e.action?(t="insert"==e.action?"+":"-",t+="["+e.lines+"]"):e.value&&(t=Array.isArray(e.value)?e.value.map(l).join("\n"):l(e.value)),e.start&&(t+=l(e)),(e.id||e.rev)&&(t+="\t("+(e.id||e.rev)+")"),t}function l(e){return e.start.row+":"+e.start.column+"=>"+e.end.row+":"+e.end.column}function c(e,t){var n="insert"==e.action,i="insert"==t.action;if(n&&i)if(s(t.start,e.end)>=0)d(t,e,-1);else{if(!(s(t.start,e.start)<=0))return null;d(e,t,1)}else if(n&&!i)if(s(t.start,e.end)>=0)d(t,e,-1);else{if(!(s(t.end,e.start)<=0))return null;d(e,t,-1)}else if(!n&&i)if(s(t.start,e.start)>=0)d(t,e,1);else{if(!(s(t.start,e.start)<=0))return null;d(e,t,1)}else if(!n&&!i)if(s(t.start,e.start)>=0)d(t,e,1);else{if(!(s(t.end,e.start)<=0))return null;d(e,t,-1)}return[t,e]}function u(e,t){for(var n=e.length;n--;)for(var i=0;i=0?d(e,t,-1):(s(e.start,t.start)<=0||d(e,r.fromPoints(t.start,e.start),-1),d(t,e,1));else if(!n&&i)s(t.start,e.end)>=0?d(t,e,-1):(s(t.start,e.start)<=0||d(t,r.fromPoints(e.start,t.start),-1),d(e,t,1));else if(!n&&!i)if(s(t.start,e.end)>=0)d(t,e,-1);else{var o,a;if(!(s(t.end,e.start)<=0))return s(e.start,t.start)<0&&(o=e,e=p(e,t.start)),s(e.end,t.end)>0&&(a=p(e,t.end)),m(t.end,e.start,e.end,-1),a&&!o&&(e.lines=a.lines,e.start=a.start,e.end=a.end,a=e),[t,o,a].filter(Boolean);d(e,t,-1)}return[t,e]}function d(e,t,n){m(e.start,t.start,t.end,n),m(e.end,t.start,t.end,n)}function m(e,t,n,i){e.row==(1==i?t:n).row&&(e.column+=i*(n.column-t.column)),e.row+=i*(n.row-t.row)}function p(e,t){var n=e.lines,i=e.end;e.end=o(t);var r=e.end.row-e.start.row,s=n.splice(r,n.length),a=r?t.column:t.column-e.start.column;return n.push(s[0].substring(0,a)),s[0]=s[0].substr(a),{start:o(t),end:i,lines:s,action:e.action}}function g(e,t){t=function(e){return{start:o(e.start),end:o(e.end),action:e.action,lines:e.lines.slice()}}(t);for(var n=e.length;n--;){for(var i=e[n],r=0;rs&&(l=r.end.row+1,s=(r=t.getNextFoldLine(l,r))?r.start.row:1/0),l>i){for(;this.$lines.getLength()>a+1;)this.$lines.pop();break}(o=this.$lines.get(++a))?o.row=l:(o=this.$lines.createCell(l,e,this.session,c),this.$lines.push(o)),this.$renderCell(o,e,r,l),l++}this._signal("afterRender"),this.$updateGutterWidth(e)},this.$updateGutterWidth=function(e){var t=this.session,n=t.gutterRenderer||this.$renderer,i=t.$firstLineNumber,r=this.$lines.last()?this.$lines.last().text:"";(this.$fixedWidth||t.$useWrapMode)&&(r=t.getLength()+i-1);var s=n?n.getWidth(t,r,e):r.toString().length*e.characterWidth,o=this.$padding||this.$computePadding();(s+=o.left+o.right)===this.gutterWidth||isNaN(s)||(this.gutterWidth=s,this.element.parentNode.style.width=this.element.style.width=Math.ceil(this.gutterWidth)+"px",this._signal("changeGutterWidth",s))},this.$updateCursorRow=function(){if(this.$highlightGutterLine){var e=this.session.selection.getCursor();this.$cursorRow!==e.row&&(this.$cursorRow=e.row)}},this.updateLineHighlight=function(){if(this.$highlightGutterLine){var e=this.session.selection.cursor.row;if(this.$cursorRow=e,!this.$cursorCell||this.$cursorCell.row!=e){this.$cursorCell&&(this.$cursorCell.element.className=this.$cursorCell.element.className.replace("ace_gutter-active-line ",""));var t=this.$lines.cells;this.$cursorCell=null;for(var n=0;n=this.$cursorRow){if(i.row>this.$cursorRow){var r=this.session.getFoldLine(this.$cursorRow);if(!(n>0&&r&&r.start.row==t[n-1].row))break;i=t[n-1]}i.element.className="ace_gutter-active-line "+i.element.className,this.$cursorCell=i;break}}}}},this.scrollLines=function(e){var t=this.config;if(this.config=e,this.$updateCursorRow(),this.$lines.pageChanged(t,e))return this.update(e);this.$lines.moveContainer(e);var n=Math.min(e.lastRow+e.gutterOffset,this.session.getLength()-1),i=this.oldLastRow;if(this.oldLastRow=n,!t||i0;r--)this.$lines.shift();if(i>n)for(r=this.session.getFoldedRowCount(n+1,i);r>0;r--)this.$lines.pop();e.firstRowi&&this.$lines.push(this.$renderLines(e,i+1,n)),this.updateLineHighlight(),this._signal("afterRender"),this.$updateGutterWidth(e)},this.$renderLines=function(e,t,n){for(var i=[],r=t,s=this.session.getNextFoldLine(r),o=s?s.start.row:1/0;r>o&&(r=s.end.row+1,o=(s=this.session.getNextFoldLine(r,s))?s.start.row:1/0),!(r>n);){var a=this.$lines.createCell(r,e,this.session,c);this.$renderCell(a,e,s,r),i.push(a),r++}return i},this.$renderCell=function(e,t,n,r){var s=e.element,o=this.session,a=s.childNodes[0],l=s.childNodes[1],c=o.$firstLineNumber,u=o.$breakpoints,h=o.$decorations,d=o.gutterRenderer||this.$renderer,m=this.$showFoldWidgets&&o.foldWidgets,p=n?n.start.row:Number.MAX_VALUE,g="ace_gutter-cell ";if(this.$highlightGutterLine&&(r==this.$cursorRow||n&&r=p&&this.$cursorRow<=n.end.row)&&(g+="ace_gutter-active-line ",this.$cursorCell!=e&&(this.$cursorCell&&(this.$cursorCell.element.className=this.$cursorCell.element.className.replace("ace_gutter-active-line ","")),this.$cursorCell=e)),u[r]&&(g+=u[r]),h[r]&&(g+=h[r]),this.$annotations[r]&&(g+=this.$annotations[r].className),s.className!=g&&(s.className=g),m){var f=m[r];null==f&&(f=m[r]=o.getFoldWidget(r))}if(f){g="ace_fold-widget ace_"+f,"start"==f&&r==p&&rn.right-t.right?"foldWidgets":void 0}}).call(l.prototype),t.Gutter=l})),ace.define("ace/layer/marker",["require","exports","module","ace/range","ace/lib/dom"],(function(e,t,n){"use strict";var i=e("../range").Range,r=e("../lib/dom"),s=function(e){this.element=r.createElement("div"),this.element.className="ace_layer ace_marker-layer",e.appendChild(this.element)};(function(){this.$padding=0,this.setPadding=function(e){this.$padding=e},this.setSession=function(e){this.session=e},this.setMarkers=function(e){this.markers=e},this.elt=function(e,t){var n=-1!=this.i&&this.element.childNodes[this.i];n?this.i++:(n=document.createElement("div"),this.element.appendChild(n),this.i=-1),n.style.cssText=t,n.className=e},this.update=function(e){if(e){var t;for(var n in this.config=e,this.i=0,this.markers){var i=this.markers[n];if(i.range){var r=i.range.clipRows(e.firstRow,e.lastRow);if(!r.isEmpty())if(r=r.toScreenRange(this.session),i.renderer){var s=this.$getTop(r.start.row,e),o=this.$padding+r.start.column*e.characterWidth;i.renderer(t,r,o,s,e)}else"fullLine"==i.type?this.drawFullLineMarker(t,r,i.clazz,e):"screenLine"==i.type?this.drawScreenLineMarker(t,r,i.clazz,e):r.isMultiLine()?"text"==i.type?this.drawTextMarker(t,r,i.clazz,e):this.drawMultiLineMarker(t,r,i.clazz,e):this.drawSingleLineMarker(t,r,i.clazz+" ace_start ace_br15",e)}else i.update(t,this,this.session,e)}if(-1!=this.i)for(;this.id?4:0)|(c==l?8:0)),r,c==l?0:1,s)},this.drawMultiLineMarker=function(e,t,n,i,r){var s=this.$padding,o=i.lineHeight,a=this.$getTop(t.start.row,i),l=s+t.start.column*i.characterWidth;if(r=r||"",this.session.$bidiHandler.isBidiRow(t.start.row)?((c=t.clone()).end.row=c.start.row,c.end.column=this.session.getLine(c.start.row).length,this.drawBidiSingleLineMarker(e,c,n+" ace_br1 ace_start",i,null,r)):this.elt(n+" ace_br1 ace_start","height:"+o+"px;right:0;top:"+a+"px;left:"+l+"px;"+(r||"")),this.session.$bidiHandler.isBidiRow(t.end.row)){var c;(c=t.clone()).start.row=c.end.row,c.start.column=0,this.drawBidiSingleLineMarker(e,c,n+" ace_br12",i,null,r)}else{a=this.$getTop(t.end.row,i);var u=t.end.column*i.characterWidth;this.elt(n+" ace_br12","height:"+o+"px;width:"+u+"px;top:"+a+"px;left:"+s+"px;"+(r||""))}if(!((o=(t.end.row-t.start.row-1)*i.lineHeight)<=0)){a=this.$getTop(t.start.row+1,i);var h=(t.start.column?1:0)|(t.end.column?0:8);this.elt(n+(h?" ace_br"+h:""),"height:"+o+"px;right:0;top:"+a+"px;left:"+s+"px;"+(r||""))}},this.drawSingleLineMarker=function(e,t,n,i,r,s){if(this.session.$bidiHandler.isBidiRow(t.start.row))return this.drawBidiSingleLineMarker(e,t,n,i,r,s);var o=i.lineHeight,a=(t.end.column+(r||0)-t.start.column)*i.characterWidth,l=this.$getTop(t.start.row,i),c=this.$padding+t.start.column*i.characterWidth;this.elt(n,"height:"+o+"px;width:"+a+"px;top:"+l+"px;left:"+c+"px;"+(s||""))},this.drawBidiSingleLineMarker=function(e,t,n,i,r,s){var o=i.lineHeight,a=this.$getTop(t.start.row,i),l=this.$padding;this.session.$bidiHandler.getSelections(t.start.column,t.end.column).forEach((function(e){this.elt(n,"height:"+o+"px;width:"+e.width+(r||0)+"px;top:"+a+"px;left:"+(l+e.left)+"px;"+(s||""))}),this)},this.drawFullLineMarker=function(e,t,n,i,r){var s=this.$getTop(t.start.row,i),o=i.lineHeight;t.start.row!=t.end.row&&(o+=this.$getTop(t.end.row,i)-s),this.elt(n,"height:"+o+"px;top:"+s+"px;left:0;right:0;"+(r||""))},this.drawScreenLineMarker=function(e,t,n,i,r){var s=this.$getTop(t.start.row,i),o=i.lineHeight;this.elt(n,"height:"+o+"px;top:"+s+"px;left:0;right:0;"+(r||""))}}).call(s.prototype),t.Marker=s})),ace.define("ace/layer/text",["require","exports","module","ace/lib/oop","ace/lib/dom","ace/lib/lang","ace/layer/lines","ace/lib/event_emitter"],(function(e,t,n){"use strict";var i=e("../lib/oop"),r=e("../lib/dom"),s=e("../lib/lang"),o=e("./lines").Lines,a=e("../lib/event_emitter").EventEmitter,l=function(e){this.dom=r,this.element=this.dom.createElement("div"),this.element.className="ace_layer ace_text-layer",e.appendChild(this.element),this.$updateEolChar=this.$updateEolChar.bind(this),this.$lines=new o(this.element)};(function(){i.implement(this,a),this.EOF_CHAR="¶",this.EOL_CHAR_LF="¬",this.EOL_CHAR_CRLF="¤",this.EOL_CHAR=this.EOL_CHAR_LF,this.TAB_CHAR="—",this.SPACE_CHAR="·",this.$padding=0,this.MAX_LINE_LENGTH=1e4,this.$updateEolChar=function(){var e=this.session.doc,t="\n"==e.getNewLineCharacter()&&"windows"!=e.getNewLineMode()?this.EOL_CHAR_LF:this.EOL_CHAR_CRLF;if(this.EOL_CHAR!=t)return this.EOL_CHAR=t,!0},this.setPadding=function(e){this.$padding=e,this.element.style.margin="0 "+e+"px"},this.getLineHeight=function(){return this.$fontMetrics.$characterSize.height||0},this.getCharacterWidth=function(){return this.$fontMetrics.$characterSize.width||0},this.$setFontMetrics=function(e){this.$fontMetrics=e,this.$fontMetrics.on("changeCharacterSize",function(e){this._signal("changeCharacterSize",e)}.bind(this)),this.$pollSizeChanges()},this.checkForSizeChanges=function(){this.$fontMetrics.checkForSizeChanges()},this.$pollSizeChanges=function(){return this.$pollSizeChangesTimer=this.$fontMetrics.$pollSizeChanges()},this.setSession=function(e){this.session=e,e&&this.$computeTabString()},this.showInvisibles=!1,this.setShowInvisibles=function(e){return this.showInvisibles!=e&&(this.showInvisibles=e,this.$computeTabString(),!0)},this.displayIndentGuides=!0,this.setDisplayIndentGuides=function(e){return this.displayIndentGuides!=e&&(this.displayIndentGuides=e,this.$computeTabString(),!0)},this.$tabStrings=[],this.onChangeTabSize=this.$computeTabString=function(){var e=this.session.getTabSize();this.tabSize=e;for(var t=this.$tabStrings=[0],n=1;nu&&(a=l.end.row+1,u=(l=this.session.getNextFoldLine(a,l))?l.start.row:1/0),!(a>r);){var h=s[o++];if(h){this.dom.removeChildren(h),this.$renderLine(h,a,a==u&&l),c&&(h.style.top=this.$lines.computeLineTop(a,e,this.session)+"px");var d=e.lineHeight*this.session.getRowLength(a)+"px";h.style.height!=d&&(c=!0,h.style.height=d)}a++}if(c)for(;o0;r--)this.$lines.shift();if(t.lastRow>e.lastRow)for(r=this.session.getFoldedRowCount(e.lastRow+1,t.lastRow);r>0;r--)this.$lines.pop();e.firstRowt.lastRow&&this.$lines.push(this.$renderLinesFragment(e,t.lastRow+1,e.lastRow))},this.$renderLinesFragment=function(e,t,n){for(var i=[],s=t,o=this.session.getNextFoldLine(s),a=o?o.start.row:1/0;s>a&&(s=o.end.row+1,a=(o=this.session.getNextFoldLine(s,o))?o.start.row:1/0),!(s>n);){var l=this.$lines.createCell(s,e,this.session),c=l.element;this.dom.removeChildren(c),r.setStyle(c.style,"height",this.$lines.computeLineHeight(s,e,this.session)+"px"),r.setStyle(c.style,"top",this.$lines.computeLineTop(s,e,this.session)+"px"),this.$renderLine(c,s,s==a&&o),this.$useLineGroups()?c.className="ace_line_group":c.className="ace_line",i.push(l),s++}return i},this.update=function(e){this.$lines.moveContainer(e),this.config=e;for(var t=e.firstRow,n=e.lastRow,i=this.$lines;i.getLength();)i.pop();i.push(this.$renderLinesFragment(e,t,n))},this.$textToken={text:!0,rparen:!0,lparen:!0},this.$renderToken=function(e,t,n,i){for(var r,o=this,a=/(\t)|( +)|([\x00-\x1f\x80-\xa0\xad\u1680\u180E\u2000-\u200f\u2028\u2029\u202F\u205F\uFEFF\uFFF9-\uFFFC]+)|(\u3000)|([\u1100-\u115F\u11A3-\u11A7\u11FA-\u11FF\u2329-\u232A\u2E80-\u2E99\u2E9B-\u2EF3\u2F00-\u2FD5\u2FF0-\u2FFB\u3001-\u303E\u3041-\u3096\u3099-\u30FF\u3105-\u312D\u3131-\u318E\u3190-\u31BA\u31C0-\u31E3\u31F0-\u321E\u3220-\u3247\u3250-\u32FE\u3300-\u4DBF\u4E00-\uA48C\uA490-\uA4C6\uA960-\uA97C\uAC00-\uD7A3\uD7B0-\uD7C6\uD7CB-\uD7FB\uF900-\uFAFF\uFE10-\uFE19\uFE30-\uFE52\uFE54-\uFE66\uFE68-\uFE6B\uFF01-\uFF60\uFFE0-\uFFE6]|[\uD800-\uDBFF][\uDC00-\uDFFF])/g,l=this.dom.createFragment(this.element),c=0;r=a.exec(i);){var u=r[1],h=r[2],d=r[3],m=r[4],p=r[5];if(o.showInvisibles||!h){var g=c!=r.index?i.slice(c,r.index):"";if(c=r.index+r[0].length,g&&l.appendChild(this.dom.createTextNode(g,this.element)),u){var f=o.session.getScreenTabSize(t+r.index);l.appendChild(o.$tabStrings[f].cloneNode(!0)),t+=f-1}else h?o.showInvisibles?((v=this.dom.createElement("span")).className="ace_invisible ace_invisible_space",v.textContent=s.stringRepeat(o.SPACE_CHAR,h.length),l.appendChild(v)):l.appendChild(this.com.createTextNode(h,this.element)):d?((v=this.dom.createElement("span")).className="ace_invisible ace_invisible_space ace_invalid",v.textContent=s.stringRepeat(o.SPACE_CHAR,d.length),l.appendChild(v)):m?(t+=1,(v=this.dom.createElement("span")).style.width=2*o.config.characterWidth+"px",v.className=o.showInvisibles?"ace_cjk ace_invisible ace_invisible_space":"ace_cjk",v.textContent=o.showInvisibles?o.SPACE_CHAR:m,l.appendChild(v)):p&&(t+=1,(v=this.dom.createElement("span")).style.width=2*o.config.characterWidth+"px",v.className="ace_cjk",v.textContent=p,l.appendChild(v))}}if(l.appendChild(this.dom.createTextNode(c?i.slice(c):i,this.element)),this.$textToken[n.type])e.appendChild(l);else{var E="ace_"+n.type.replace(/\./g," ace_"),v=this.dom.createElement("span");"fold"==n.type&&(v.style.width=n.value.length*this.config.characterWidth+"px"),v.className=E,v.appendChild(l),e.appendChild(v)}return t+i.length},this.renderIndentGuide=function(e,t,n){var i=t.search(this.$indentGuideRe);if(i<=0||i>=n)return t;if(" "==t[0]){for(var r=(i-=i%this.tabSize)/this.tabSize,s=0;s=o;)a=this.$renderToken(l,a,u,h.substring(0,o-i)),h=h.substring(o-i),i=o,l=this.$createLineElement(),e.appendChild(l),l.appendChild(this.dom.createTextNode(s.stringRepeat(" ",n.indent),this.element)),a=0,o=n[++r]||Number.MAX_VALUE;0!=h.length&&(i+=h.length,a=this.$renderToken(l,a,u,h))}}n[n.length-1]>this.MAX_LINE_LENGTH&&this.$renderOverflowMessage(l,a,null,"",!0)},this.$renderSimpleLine=function(e,t){var n=0,i=t[0],r=i.value;this.displayIndentGuides&&(r=this.renderIndentGuide(e,r)),r&&(n=this.$renderToken(e,n,i,r));for(var s=1;sthis.MAX_LINE_LENGTH)return this.$renderOverflowMessage(e,n,i,r);n=this.$renderToken(e,n,i,r)}},this.$renderOverflowMessage=function(e,t,n,i,r){n&&this.$renderToken(e,t,n,i.slice(0,this.MAX_LINE_LENGTH-t));var s=this.dom.createElement("span");s.className="ace_inline_button ace_keyword ace_toggle_wrap",s.textContent=r?"":"",e.appendChild(s)},this.$renderLine=function(e,t,n){if(n||0==n||(n=this.session.getFoldLine(t)),n)var i=this.$getFoldLineTokens(t,n);else i=this.session.getTokens(t);var r=e;if(i.length){var s=this.session.getRowSplitData(t);s&&s.length?(this.$renderWrappedLine(e,i,s),r=e.lastChild):(r=e,this.$useLineGroups()&&(r=this.$createLineElement(),e.appendChild(r)),this.$renderSimpleLine(r,i))}else this.$useLineGroups()&&(r=this.$createLineElement(),e.appendChild(r));if(this.showInvisibles&&r){n&&(t=n.end.row);var o=this.dom.createElement("span");o.className="ace_invisible ace_invisible_eol",o.textContent=t==this.session.getLength()-1?this.EOF_CHAR:this.EOL_CHAR,r.appendChild(o)}},this.$getFoldLineTokens=function(e,t){var n=this.session,i=[],r=n.getTokens(e);return t.walk((function(e,t,s,o,a){null!=e?i.push({type:"fold",value:e}):(a&&(r=n.getTokens(t)),r.length&&function(e,t,n){for(var r=0,s=0;s+e[r].value.lengthn-t&&(o=o.substring(0,n-t)),i.push({type:e[r].type,value:o}),s=t+o.length,r+=1);sn?i.push({type:e[r].type,value:o.substring(0,n-s)}):i.push(e[r]),s+=o.length,r+=1}}(r,o,s))}),t.end.row,this.session.getLine(t.end.row).length),i},this.$useLineGroups=function(){return this.session.getUseWrapMode()},this.destroy=function(){}}).call(l.prototype),t.Text=l})),ace.define("ace/layer/cursor",["require","exports","module","ace/lib/dom"],(function(e,t,n){"use strict";var i=e("../lib/dom"),r=function(e){this.element=i.createElement("div"),this.element.className="ace_layer ace_cursor-layer",e.appendChild(this.element),this.isVisible=!1,this.isBlinking=!0,this.blinkInterval=1e3,this.smoothBlinking=!1,this.cursors=[],this.cursor=this.addCursor(),i.addCssClass(this.element,"ace_hidden-cursors"),this.$updateCursors=this.$updateOpacity.bind(this)};(function(){this.$updateOpacity=function(e){for(var t=this.cursors,n=t.length;n--;)i.setStyle(t[n].style,"opacity",e?"":"0")},this.$startCssAnimation=function(){for(var e=this.cursors,t=e.length;t--;)e[t].style.animationDuration=this.blinkInterval+"ms";setTimeout(function(){i.addCssClass(this.element,"ace_animate-blinking")}.bind(this))},this.$stopCssAnimation=function(){i.removeCssClass(this.element,"ace_animate-blinking")},this.$padding=0,this.setPadding=function(e){this.$padding=e},this.setSession=function(e){this.session=e},this.setBlinking=function(e){e!=this.isBlinking&&(this.isBlinking=e,this.restartTimer())},this.setBlinkInterval=function(e){e!=this.blinkInterval&&(this.blinkInterval=e,this.restartTimer())},this.setSmoothBlinking=function(e){e!=this.smoothBlinking&&(this.smoothBlinking=e,i.setCssClass(this.element,"ace_smooth-blinking",e),this.$updateCursors(!0),this.restartTimer())},this.addCursor=function(){var e=i.createElement("div");return e.className="ace_cursor",this.element.appendChild(e),this.cursors.push(e),e},this.removeCursor=function(){if(this.cursors.length>1){var e=this.cursors.pop();return e.parentNode.removeChild(e),e}},this.hideCursor=function(){this.isVisible=!1,i.addCssClass(this.element,"ace_hidden-cursors"),this.restartTimer()},this.showCursor=function(){this.isVisible=!0,i.removeCssClass(this.element,"ace_hidden-cursors"),this.restartTimer()},this.restartTimer=function(){var e=this.$updateCursors;if(clearInterval(this.intervalId),clearTimeout(this.timeoutId),this.$stopCssAnimation(),this.smoothBlinking&&i.removeCssClass(this.element,"ace_smooth-blinking"),e(!0),this.isBlinking&&this.blinkInterval&&this.isVisible)if(this.smoothBlinking&&setTimeout(function(){i.addCssClass(this.element,"ace_smooth-blinking")}.bind(this)),i.HAS_CSS_ANIMATION)this.$startCssAnimation();else{var t=function(){this.timeoutId=setTimeout((function(){e(!1)}),.6*this.blinkInterval)}.bind(this);this.intervalId=setInterval((function(){e(!0),t()}),this.blinkInterval),t()}else this.$stopCssAnimation()},this.getPixelPosition=function(e,t){if(!this.config||!this.session)return{left:0,top:0};e||(e=this.session.selection.getCursor());var n=this.session.documentToScreenPosition(e);return{left:this.$padding+(this.session.$bidiHandler.isBidiRow(n.row,e.row)?this.session.$bidiHandler.getPosLeft(n.column):n.column*this.config.characterWidth),top:(n.row-(t?this.config.firstRowScreen:0))*this.config.lineHeight}},this.isCursorInView=function(e,t){return e.top>=0&&e.tope.height+e.offset||o.top<0)&&n>1)){var a=this.cursors[r++]||this.addCursor(),l=a.style;this.drawCursor?this.drawCursor(a,o,e,t[n],this.session):this.isCursorInView(o,e)?(i.setStyle(l,"display","block"),i.translate(a,o.left,o.top),i.setStyle(l,"width",Math.round(e.characterWidth)+"px"),i.setStyle(l,"height",e.lineHeight+"px")):i.setStyle(l,"display","none")}}for(;this.cursors.length>r;)this.removeCursor();var c=this.session.getOverwrite();this.$setOverwrite(c),this.$pixelPos=o,this.restartTimer()},this.drawCursor=null,this.$setOverwrite=function(e){e!=this.overwrite&&(this.overwrite=e,e?i.addCssClass(this.element,"ace_overwrite-cursors"):i.removeCssClass(this.element,"ace_overwrite-cursors"))},this.destroy=function(){clearInterval(this.intervalId),clearTimeout(this.timeoutId)}}).call(r.prototype),t.Cursor=r})),ace.define("ace/scrollbar",["require","exports","module","ace/lib/oop","ace/lib/dom","ace/lib/event","ace/lib/event_emitter"],(function(e,t,n){"use strict";var i=e("./lib/oop"),r=e("./lib/dom"),s=e("./lib/event"),o=e("./lib/event_emitter").EventEmitter,a=32768,l=function(e){this.element=r.createElement("div"),this.element.className="ace_scrollbar ace_scrollbar"+this.classSuffix,this.inner=r.createElement("div"),this.inner.className="ace_scrollbar-inner",this.inner.textContent=" ",this.element.appendChild(this.inner),e.appendChild(this.element),this.setVisible(!1),this.skipEvent=!1,s.addListener(this.element,"scroll",this.onScroll.bind(this)),s.addListener(this.element,"mousedown",s.preventDefault)};(function(){i.implement(this,o),this.setVisible=function(e){this.element.style.display=e?"":"none",this.isVisible=e,this.coeff=1}}).call(l.prototype);var c=function(e,t){l.call(this,e),this.scrollTop=0,this.scrollHeight=0,t.$scrollbarWidth=this.width=r.scrollbarWidth(e.ownerDocument),this.inner.style.width=this.element.style.width=(this.width||15)+5+"px",this.$minWidth=0};i.inherits(c,l),function(){this.classSuffix="-v",this.onScroll=function(){if(!this.skipEvent){if(this.scrollTop=this.element.scrollTop,1!=this.coeff){var e=this.element.clientHeight/this.scrollHeight;this.scrollTop=this.scrollTop*(1-e)/(this.coeff-e)}this._emit("scroll",{data:this.scrollTop})}this.skipEvent=!1},this.getWidth=function(){return Math.max(this.isVisible?this.width:0,this.$minWidth||0)},this.setHeight=function(e){this.element.style.height=e+"px"},this.setInnerHeight=this.setScrollHeight=function(e){this.scrollHeight=e,e>a?(this.coeff=a/e,e=a):1!=this.coeff&&(this.coeff=1),this.inner.style.height=e+"px"},this.setScrollTop=function(e){this.scrollTop!=e&&(this.skipEvent=!0,this.scrollTop=e,this.element.scrollTop=e*this.coeff)}}.call(c.prototype);var u=function(e,t){l.call(this,e),this.scrollLeft=0,this.height=t.$scrollbarWidth,this.inner.style.height=this.element.style.height=(this.height||15)+5+"px"};i.inherits(u,l),function(){this.classSuffix="-h",this.onScroll=function(){this.skipEvent||(this.scrollLeft=this.element.scrollLeft,this._emit("scroll",{data:this.scrollLeft})),this.skipEvent=!1},this.getHeight=function(){return this.isVisible?this.height:0},this.setWidth=function(e){this.element.style.width=e+"px"},this.setInnerWidth=function(e){this.inner.style.width=e+"px"},this.setScrollWidth=function(e){this.inner.style.width=e+"px"},this.setScrollLeft=function(e){this.scrollLeft!=e&&(this.skipEvent=!0,this.scrollLeft=this.element.scrollLeft=e)}}.call(u.prototype),t.ScrollBar=c,t.ScrollBarV=c,t.ScrollBarH=u,t.VScrollBar=c,t.HScrollBar=u})),ace.define("ace/renderloop",["require","exports","module","ace/lib/event"],(function(e,t,n){"use strict";var i=e("./lib/event"),r=function(e,t){this.onRender=e,this.pending=!1,this.changes=0,this.$recursionLimit=2,this.window=t||window;var n=this;this._flush=function(e){n.pending=!1;var t=n.changes;if(t&&(i.blockIdle(100),n.changes=0,n.onRender(t)),n.changes){if(n.$recursionLimit--<0)return;n.schedule()}else n.$recursionLimit=2}};(function(){this.schedule=function(e){this.changes=this.changes|e,this.changes&&!this.pending&&(i.nextFrame(this._flush),this.pending=!0)},this.clear=function(e){var t=this.changes;return this.changes=0,t}}).call(r.prototype),t.RenderLoop=r})),ace.define("ace/layer/font_metrics",["require","exports","module","ace/lib/oop","ace/lib/dom","ace/lib/lang","ace/lib/event","ace/lib/useragent","ace/lib/event_emitter"],(function(e,t,n){var i=e("../lib/oop"),r=e("../lib/dom"),s=e("../lib/lang"),o=e("../lib/event"),a=e("../lib/useragent"),l=e("../lib/event_emitter").EventEmitter,c=256,u="function"==typeof ResizeObserver,h=200,d=t.FontMetrics=function(e){this.el=r.createElement("div"),this.$setMeasureNodeStyles(this.el.style,!0),this.$main=r.createElement("div"),this.$setMeasureNodeStyles(this.$main.style),this.$measureNode=r.createElement("div"),this.$setMeasureNodeStyles(this.$measureNode.style),this.el.appendChild(this.$main),this.el.appendChild(this.$measureNode),e.appendChild(this.el),this.$measureNode.innerHTML=s.stringRepeat("X",c),this.$characterSize={width:0,height:0},u?this.$addObserver():this.checkForSizeChanges()};(function(){i.implement(this,l),this.$characterSize={width:0,height:0},this.$setMeasureNodeStyles=function(e,t){e.width=e.height="auto",e.left=e.top="0px",e.visibility="hidden",e.position="absolute",e.whiteSpace="pre",a.isIE<8?e["font-family"]="inherit":e.font="inherit",e.overflow=t?"hidden":"visible"},this.checkForSizeChanges=function(e){if(void 0===e&&(e=this.$measureSizes()),e&&(this.$characterSize.width!==e.width||this.$characterSize.height!==e.height)){this.$measureNode.style.fontWeight="bold";var t=this.$measureSizes();this.$measureNode.style.fontWeight="",this.$characterSize=e,this.charSizes=Object.create(null),this.allowBoldFonts=t&&t.width===e.width&&t.height===e.height,this._emit("changeCharacterSize",{data:e})}},this.$addObserver=function(){var e=this;this.$observer=new window.ResizeObserver((function(t){var n=t[0].contentRect;e.checkForSizeChanges({height:n.height,width:n.width/c})})),this.$observer.observe(this.$measureNode)},this.$pollSizeChanges=function(){if(this.$pollSizeChangesTimer||this.$observer)return this.$pollSizeChangesTimer;var e=this;return this.$pollSizeChangesTimer=o.onIdle((function t(){e.checkForSizeChanges(),o.onIdle(t,500)}),500)},this.setPolling=function(e){e?this.$pollSizeChanges():this.$pollSizeChangesTimer&&(clearInterval(this.$pollSizeChangesTimer),this.$pollSizeChangesTimer=0)},this.$measureSizes=function(e){var t={height:(e||this.$measureNode).clientHeight,width:(e||this.$measureNode).clientWidth/c};return 0===t.width||0===t.height?null:t},this.$measureCharWidth=function(e){return this.$main.innerHTML=s.stringRepeat(e,c),this.$main.getBoundingClientRect().width/c},this.getCharacterWidth=function(e){var t=this.charSizes[e];return void 0===t&&(t=this.charSizes[e]=this.$measureCharWidth(e)/this.$characterSize.width),t},this.destroy=function(){clearInterval(this.$pollSizeChangesTimer),this.$observer&&this.$observer.disconnect(),this.el&&this.el.parentNode&&this.el.parentNode.removeChild(this.el)},this.$getZoom=function e(t){return t?(window.getComputedStyle(t).zoom||1)*e(t.parentElement):1},this.$initTransformMeasureNodes=function(){var e=function(e,t){return["div",{style:"position: absolute;top:"+e+"px;left:"+t+"px;"}]};this.els=r.buildDom([e(0,0),e(h,0),e(0,h),e(h,h)],this.el)},this.transformCoordinates=function(e,t){function n(e,t,n){var i=e[1]*t[0]-e[0]*t[1];return[(-t[1]*n[0]+t[0]*n[1])/i,(+e[1]*n[0]-e[0]*n[1])/i]}function i(e,t){return[e[0]-t[0],e[1]-t[1]]}function r(e,t){return[e[0]+t[0],e[1]+t[1]]}function s(e,t){return[e*t[0],e*t[1]]}function o(e){var t=e.getBoundingClientRect();return[t.left,t.top]}e&&(e=s(1/this.$getZoom(this.el),e)),this.els||this.$initTransformMeasureNodes();var a=o(this.els[0]),l=o(this.els[1]),c=o(this.els[2]),u=o(this.els[3]),d=n(i(u,l),i(u,c),i(r(l,c),r(u,a))),m=s(1+d[0],i(l,a)),p=s(1+d[1],i(c,a));if(t){var g=t,f=d[0]*g[0]/h+d[1]*g[1]/h+1,E=r(s(g[0],m),s(g[1],p));return r(s(1/f/h,E),a)}var v=i(e,a),_=n(i(m,s(d[0],v)),i(p,s(d[1],v)),v);return s(h,_)}}).call(d.prototype)})),ace.define("ace/virtual_renderer",["require","exports","module","ace/lib/oop","ace/lib/dom","ace/config","ace/layer/gutter","ace/layer/marker","ace/layer/text","ace/layer/cursor","ace/scrollbar","ace/scrollbar","ace/renderloop","ace/layer/font_metrics","ace/lib/event_emitter","ace/lib/useragent"],(function(e,t,n){"use strict";var i=e("./lib/oop"),r=e("./lib/dom"),s=e("./config"),o=e("./layer/gutter").Gutter,a=e("./layer/marker").Marker,l=e("./layer/text").Text,c=e("./layer/cursor").Cursor,u=e("./scrollbar").HScrollBar,h=e("./scrollbar").VScrollBar,d=e("./renderloop").RenderLoop,m=e("./layer/font_metrics").FontMetrics,p=e("./lib/event_emitter").EventEmitter,g='.ace_br1 {border-top-left-radius : 3px;}.ace_br2 {border-top-right-radius : 3px;}.ace_br3 {border-top-left-radius : 3px; border-top-right-radius: 3px;}.ace_br4 {border-bottom-right-radius: 3px;}.ace_br5 {border-top-left-radius : 3px; border-bottom-right-radius: 3px;}.ace_br6 {border-top-right-radius : 3px; border-bottom-right-radius: 3px;}.ace_br7 {border-top-left-radius : 3px; border-top-right-radius: 3px; border-bottom-right-radius: 3px;}.ace_br8 {border-bottom-left-radius : 3px;}.ace_br9 {border-top-left-radius : 3px; border-bottom-left-radius: 3px;}.ace_br10{border-top-right-radius : 3px; border-bottom-left-radius: 3px;}.ace_br11{border-top-left-radius : 3px; border-top-right-radius: 3px; border-bottom-left-radius: 3px;}.ace_br12{border-bottom-right-radius: 3px; border-bottom-left-radius: 3px;}.ace_br13{border-top-left-radius : 3px; border-bottom-right-radius: 3px; border-bottom-left-radius: 3px;}.ace_br14{border-top-right-radius : 3px; border-bottom-right-radius: 3px; border-bottom-left-radius: 3px;}.ace_br15{border-top-left-radius : 3px; border-top-right-radius: 3px; border-bottom-right-radius: 3px; border-bottom-left-radius: 3px;}.ace_editor {position: relative;overflow: hidden;font: 12px/normal \'Monaco\', \'Menlo\', \'Ubuntu Mono\', \'Consolas\', \'source-code-pro\', monospace;direction: ltr;text-align: left;-webkit-tap-highlight-color: rgba(0, 0, 0, 0);}.ace_scroller {position: absolute;overflow: hidden;top: 0;bottom: 0;background-color: inherit;-ms-user-select: none;-moz-user-select: none;-webkit-user-select: none;user-select: none;cursor: text;}.ace_content {position: absolute;box-sizing: border-box;min-width: 100%;contain: style size layout;}.ace_dragging .ace_scroller:before{position: absolute;top: 0;left: 0;right: 0;bottom: 0;content: \'\';background: rgba(250, 250, 250, 0.01);z-index: 1000;}.ace_dragging.ace_dark .ace_scroller:before{background: rgba(0, 0, 0, 0.01);}.ace_selecting, .ace_selecting * {cursor: text !important;}.ace_gutter {position: absolute;overflow : hidden;width: auto;top: 0;bottom: 0;left: 0;cursor: default;z-index: 4;-ms-user-select: none;-moz-user-select: none;-webkit-user-select: none;user-select: none;contain: style size layout;}.ace_gutter-active-line {position: absolute;left: 0;right: 0;}.ace_scroller.ace_scroll-left {box-shadow: 17px 0 16px -16px rgba(0, 0, 0, 0.4) inset;}.ace_gutter-cell {position: absolute;top: 0;left: 0;right: 0;padding-left: 19px;padding-right: 6px;background-repeat: no-repeat;}.ace_gutter-cell.ace_error {background-image: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAMAAAAoLQ9TAAABOFBMVEX/////////QRswFAb/Ui4wFAYwFAYwFAaWGAfDRymzOSH/PxswFAb/SiUwFAYwFAbUPRvjQiDllog5HhHdRybsTi3/Tyv9Tir+Syj/UC3////XurebMBIwFAb/RSHbPx/gUzfdwL3kzMivKBAwFAbbvbnhPx66NhowFAYwFAaZJg8wFAaxKBDZurf/RB6mMxb/SCMwFAYwFAbxQB3+RB4wFAb/Qhy4Oh+4QifbNRcwFAYwFAYwFAb/QRzdNhgwFAYwFAbav7v/Uy7oaE68MBK5LxLewr/r2NXewLswFAaxJw4wFAbkPRy2PyYwFAaxKhLm1tMwFAazPiQwFAaUGAb/QBrfOx3bvrv/VC/maE4wFAbRPBq6MRO8Qynew8Dp2tjfwb0wFAbx6eju5+by6uns4uH9/f36+vr/GkHjAAAAYnRSTlMAGt+64rnWu/bo8eAA4InH3+DwoN7j4eLi4xP99Nfg4+b+/u9B/eDs1MD1mO7+4PHg2MXa347g7vDizMLN4eG+Pv7i5evs/v79yu7S3/DV7/498Yv24eH+4ufQ3Ozu/v7+y13sRqwAAADLSURBVHjaZc/XDsFgGIBhtDrshlitmk2IrbHFqL2pvXf/+78DPokj7+Fz9qpU/9UXJIlhmPaTaQ6QPaz0mm+5gwkgovcV6GZzd5JtCQwgsxoHOvJO15kleRLAnMgHFIESUEPmawB9ngmelTtipwwfASilxOLyiV5UVUyVAfbG0cCPHig+GBkzAENHS0AstVF6bacZIOzgLmxsHbt2OecNgJC83JERmePUYq8ARGkJx6XtFsdddBQgZE2nPR6CICZhawjA4Fb/chv+399kfR+MMMDGOQAAAABJRU5ErkJggg==");background-repeat: no-repeat;background-position: 2px center;}.ace_gutter-cell.ace_warning {background-image: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAMAAAAoLQ9TAAAAmVBMVEX///8AAAD///8AAAAAAABPSzb/5sAAAAB/blH/73z/ulkAAAAAAAD85pkAAAAAAAACAgP/vGz/rkDerGbGrV7/pkQICAf////e0IsAAAD/oED/qTvhrnUAAAD/yHD/njcAAADuv2r/nz//oTj/p064oGf/zHAAAAA9Nir/tFIAAAD/tlTiuWf/tkIAAACynXEAAAAAAAAtIRW7zBpBAAAAM3RSTlMAABR1m7RXO8Ln31Z36zT+neXe5OzooRDfn+TZ4p3h2hTf4t3k3ucyrN1K5+Xaks52Sfs9CXgrAAAAjklEQVR42o3PbQ+CIBQFYEwboPhSYgoYunIqqLn6/z8uYdH8Vmdnu9vz4WwXgN/xTPRD2+sgOcZjsge/whXZgUaYYvT8QnuJaUrjrHUQreGczuEafQCO/SJTufTbroWsPgsllVhq3wJEk2jUSzX3CUEDJC84707djRc5MTAQxoLgupWRwW6UB5fS++NV8AbOZgnsC7BpEAAAAABJRU5ErkJggg==");background-position: 2px center;}.ace_gutter-cell.ace_info {background-image: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAAAAAA6mKC9AAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAAJ0Uk5TAAB2k804AAAAPklEQVQY02NgIB68QuO3tiLznjAwpKTgNyDbMegwisCHZUETUZV0ZqOquBpXj2rtnpSJT1AEnnRmL2OgGgAAIKkRQap2htgAAAAASUVORK5CYII=");background-position: 2px center;}.ace_dark .ace_gutter-cell.ace_info {background-image: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQBAMAAADt3eJSAAAAJFBMVEUAAAChoaGAgIAqKiq+vr6tra1ZWVmUlJSbm5s8PDxubm56enrdgzg3AAAAAXRSTlMAQObYZgAAAClJREFUeNpjYMAPdsMYHegyJZFQBlsUlMFVCWUYKkAZMxZAGdxlDMQBAG+TBP4B6RyJAAAAAElFTkSuQmCC");}.ace_scrollbar {contain: strict;position: absolute;right: 0;bottom: 0;z-index: 6;}.ace_scrollbar-inner {position: absolute;cursor: text;left: 0;top: 0;}.ace_scrollbar-v{overflow-x: hidden;overflow-y: scroll;top: 0;}.ace_scrollbar-h {overflow-x: scroll;overflow-y: hidden;left: 0;}.ace_print-margin {position: absolute;height: 100%;}.ace_text-input {position: absolute;z-index: 0;width: 0.5em;height: 1em;opacity: 0;background: transparent;-moz-appearance: none;appearance: none;border: none;resize: none;outline: none;overflow: hidden;font: inherit;padding: 0 1px;margin: 0 -1px;contain: strict;-ms-user-select: text;-moz-user-select: text;-webkit-user-select: text;user-select: text;white-space: pre!important;}.ace_text-input.ace_composition {background: transparent;color: inherit;z-index: 1000;opacity: 1;}.ace_composition_placeholder { color: transparent }.ace_composition_marker { border-bottom: 1px solid;position: absolute;border-radius: 0;margin-top: 1px;}[ace_nocontext=true] {transform: none!important;filter: none!important;perspective: none!important;clip-path: none!important;mask : none!important;contain: none!important;perspective: none!important;mix-blend-mode: initial!important;z-index: auto;}.ace_layer {z-index: 1;position: absolute;overflow: hidden;word-wrap: normal;white-space: pre;height: 100%;width: 100%;box-sizing: border-box;pointer-events: none;}.ace_gutter-layer {position: relative;width: auto;text-align: right;pointer-events: auto;height: 1000000px;contain: style size layout;}.ace_text-layer {font: inherit !important;position: absolute;height: 1000000px;width: 1000000px;contain: style size layout;}.ace_text-layer > .ace_line, .ace_text-layer > .ace_line_group {contain: style size layout;position: absolute;top: 0;left: 0;right: 0;}.ace_hidpi .ace_text-layer,.ace_hidpi .ace_gutter-layer,.ace_hidpi .ace_content,.ace_hidpi .ace_gutter {contain: strict;will-change: transform;}.ace_hidpi .ace_text-layer > .ace_line, .ace_hidpi .ace_text-layer > .ace_line_group {contain: strict;}.ace_cjk {display: inline-block;text-align: center;}.ace_cursor-layer {z-index: 4;}.ace_cursor {z-index: 4;position: absolute;box-sizing: border-box;border-left: 2px solid;transform: translatez(0);}.ace_multiselect .ace_cursor {border-left-width: 1px;}.ace_slim-cursors .ace_cursor {border-left-width: 1px;}.ace_overwrite-cursors .ace_cursor {border-left-width: 0;border-bottom: 1px solid;}.ace_hidden-cursors .ace_cursor {opacity: 0.2;}.ace_hasPlaceholder .ace_hidden-cursors .ace_cursor {opacity: 0;}.ace_smooth-blinking .ace_cursor {transition: opacity 0.18s;}.ace_animate-blinking .ace_cursor {animation-duration: 1000ms;animation-timing-function: step-end;animation-name: blink-ace-animate;animation-iteration-count: infinite;}.ace_animate-blinking.ace_smooth-blinking .ace_cursor {animation-duration: 1000ms;animation-timing-function: ease-in-out;animation-name: blink-ace-animate-smooth;}@keyframes blink-ace-animate {from, to { opacity: 1; }60% { opacity: 0; }}@keyframes blink-ace-animate-smooth {from, to { opacity: 1; }45% { opacity: 1; }60% { opacity: 0; }85% { opacity: 0; }}.ace_marker-layer .ace_step, .ace_marker-layer .ace_stack {position: absolute;z-index: 3;}.ace_marker-layer .ace_selection {position: absolute;z-index: 5;}.ace_marker-layer .ace_bracket {position: absolute;z-index: 6;}.ace_marker-layer .ace_active-line {position: absolute;z-index: 2;}.ace_marker-layer .ace_selected-word {position: absolute;z-index: 4;box-sizing: border-box;}.ace_line .ace_fold {box-sizing: border-box;display: inline-block;height: 11px;margin-top: -2px;vertical-align: middle;background-image:url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABEAAAAJCAYAAADU6McMAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAJpJREFUeNpi/P//PwOlgAXGYGRklAVSokD8GmjwY1wasKljQpYACtpCFeADcHVQfQyMQAwzwAZI3wJKvCLkfKBaMSClBlR7BOQikCFGQEErIH0VqkabiGCAqwUadAzZJRxQr/0gwiXIal8zQQPnNVTgJ1TdawL0T5gBIP1MUJNhBv2HKoQHHjqNrA4WO4zY0glyNKLT2KIfIMAAQsdgGiXvgnYAAAAASUVORK5CYII="),url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAA3CAYAAADNNiA5AAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAACJJREFUeNpi+P//fxgTAwPDBxDxD078RSX+YeEyDFMCIMAAI3INmXiwf2YAAAAASUVORK5CYII=");background-repeat: no-repeat, repeat-x;background-position: center center, top left;color: transparent;border: 1px solid black;border-radius: 2px;cursor: pointer;pointer-events: auto;}.ace_dark .ace_fold {}.ace_fold:hover{background-image:url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABEAAAAJCAYAAADU6McMAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAJpJREFUeNpi/P//PwOlgAXGYGRklAVSokD8GmjwY1wasKljQpYACtpCFeADcHVQfQyMQAwzwAZI3wJKvCLkfKBaMSClBlR7BOQikCFGQEErIH0VqkabiGCAqwUadAzZJRxQr/0gwiXIal8zQQPnNVTgJ1TdawL0T5gBIP1MUJNhBv2HKoQHHjqNrA4WO4zY0glyNKLT2KIfIMAAQsdgGiXvgnYAAAAASUVORK5CYII="),url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAA3CAYAAADNNiA5AAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAACBJREFUeNpi+P//fz4TAwPDZxDxD5X4i5fLMEwJgAADAEPVDbjNw87ZAAAAAElFTkSuQmCC");}.ace_tooltip {background-color: #FFF;background-image: linear-gradient(to bottom, transparent, rgba(0, 0, 0, 0.1));border: 1px solid gray;border-radius: 1px;box-shadow: 0 1px 2px rgba(0, 0, 0, 0.3);color: black;max-width: 100%;padding: 3px 4px;position: fixed;z-index: 999999;box-sizing: border-box;cursor: default;white-space: pre;word-wrap: break-word;line-height: normal;font-style: normal;font-weight: normal;letter-spacing: normal;pointer-events: none;}.ace_folding-enabled > .ace_gutter-cell {padding-right: 13px;}.ace_fold-widget {box-sizing: border-box;margin: 0 -12px 0 1px;display: none;width: 11px;vertical-align: top;background-image: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAUAAAAFCAYAAACNbyblAAAANElEQVR42mWKsQ0AMAzC8ixLlrzQjzmBiEjp0A6WwBCSPgKAXoLkqSot7nN3yMwR7pZ32NzpKkVoDBUxKAAAAABJRU5ErkJggg==");background-repeat: no-repeat;background-position: center;border-radius: 3px;border: 1px solid transparent;cursor: pointer;}.ace_folding-enabled .ace_fold-widget {display: inline-block; }.ace_fold-widget.ace_end {background-image: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAUAAAAFCAYAAACNbyblAAAANElEQVR42m3HwQkAMAhD0YzsRchFKI7sAikeWkrxwScEB0nh5e7KTPWimZki4tYfVbX+MNl4pyZXejUO1QAAAABJRU5ErkJggg==");}.ace_fold-widget.ace_closed {background-image: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAMAAAAGCAYAAAAG5SQMAAAAOUlEQVR42jXKwQkAMAgDwKwqKD4EwQ26sSOkVWjgIIHAzPiCgaqiqnJHZnKICBERHN194O5b9vbLuAVRL+l0YWnZAAAAAElFTkSuQmCCXA==");}.ace_fold-widget:hover {border: 1px solid rgba(0, 0, 0, 0.3);background-color: rgba(255, 255, 255, 0.2);box-shadow: 0 1px 1px rgba(255, 255, 255, 0.7);}.ace_fold-widget:active {border: 1px solid rgba(0, 0, 0, 0.4);background-color: rgba(0, 0, 0, 0.05);box-shadow: 0 1px 1px rgba(255, 255, 255, 0.8);}.ace_dark .ace_fold-widget {background-image: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAUAAAAFCAYAAACNbyblAAAAHklEQVQIW2P4//8/AzoGEQ7oGCaLLAhWiSwB146BAQCSTPYocqT0AAAAAElFTkSuQmCC");}.ace_dark .ace_fold-widget.ace_end {background-image: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAUAAAAFCAYAAACNbyblAAAAH0lEQVQIW2P4//8/AxQ7wNjIAjDMgC4AxjCVKBirIAAF0kz2rlhxpAAAAABJRU5ErkJggg==");}.ace_dark .ace_fold-widget.ace_closed {background-image: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAMAAAAFCAYAAACAcVaiAAAAHElEQVQIW2P4//+/AxAzgDADlOOAznHAKgPWAwARji8UIDTfQQAAAABJRU5ErkJggg==");}.ace_dark .ace_fold-widget:hover {box-shadow: 0 1px 1px rgba(255, 255, 255, 0.2);background-color: rgba(255, 255, 255, 0.1);}.ace_dark .ace_fold-widget:active {box-shadow: 0 1px 1px rgba(255, 255, 255, 0.2);}.ace_inline_button {border: 1px solid lightgray;display: inline-block;margin: -1px 8px;padding: 0 5px;pointer-events: auto;cursor: pointer;}.ace_inline_button:hover {border-color: gray;background: rgba(200,200,200,0.2);display: inline-block;pointer-events: auto;}.ace_fold-widget.ace_invalid {background-color: #FFB4B4;border-color: #DE5555;}.ace_fade-fold-widgets .ace_fold-widget {transition: opacity 0.4s ease 0.05s;opacity: 0;}.ace_fade-fold-widgets:hover .ace_fold-widget {transition: opacity 0.05s ease 0.05s;opacity:1;}.ace_underline {text-decoration: underline;}.ace_bold {font-weight: bold;}.ace_nobold .ace_bold {font-weight: normal;}.ace_italic {font-style: italic;}.ace_error-marker {background-color: rgba(255, 0, 0,0.2);position: absolute;z-index: 9;}.ace_highlight-marker {background-color: rgba(255, 255, 0,0.2);position: absolute;z-index: 8;}.ace_mobile-menu {position: absolute;line-height: 1.5;border-radius: 4px;-ms-user-select: none;-moz-user-select: none;-webkit-user-select: none;user-select: none;background: white;box-shadow: 1px 3px 2px grey;border: 1px solid #dcdcdc;color: black;}.ace_dark > .ace_mobile-menu {background: #333;color: #ccc;box-shadow: 1px 3px 2px grey;border: 1px solid #444;}.ace_mobile-button {padding: 2px;cursor: pointer;overflow: hidden;}.ace_mobile-button:hover {background-color: #eee;opacity:1;}.ace_mobile-button:active {background-color: #ddd;}.ace_placeholder {font-family: arial;transform: scale(0.9);opacity: 0.7;transform-origin: left;text-indent: 10px;}',f=e("./lib/useragent"),E=f.isIE;r.importCssString(g,"ace_editor.css");var v=function(e,t){var n=this;this.container=e||r.createElement("div"),r.addCssClass(this.container,"ace_editor"),r.HI_DPI&&r.addCssClass(this.container,"ace_hidpi"),this.setTheme(t),this.$gutter=r.createElement("div"),this.$gutter.className="ace_gutter",this.container.appendChild(this.$gutter),this.$gutter.setAttribute("aria-hidden",!0),this.scroller=r.createElement("div"),this.scroller.className="ace_scroller",this.container.appendChild(this.scroller),this.content=r.createElement("div"),this.content.className="ace_content",this.scroller.appendChild(this.content),this.$gutterLayer=new o(this.$gutter),this.$gutterLayer.on("changeGutterWidth",this.onGutterResize.bind(this)),this.$markerBack=new a(this.content);var i=this.$textLayer=new l(this.content);this.canvas=i.element,this.$markerFront=new a(this.content),this.$cursorLayer=new c(this.content),this.$horizScroll=!1,this.$vScroll=!1,this.scrollBar=this.scrollBarV=new h(this.container,this),this.scrollBarH=new u(this.container,this),this.scrollBarV.addEventListener("scroll",(function(e){n.$scrollAnimation||n.session.setScrollTop(e.data-n.scrollMargin.top)})),this.scrollBarH.addEventListener("scroll",(function(e){n.$scrollAnimation||n.session.setScrollLeft(e.data-n.scrollMargin.left)})),this.scrollTop=0,this.scrollLeft=0,this.cursorPos={row:0,column:0},this.$fontMetrics=new m(this.container),this.$textLayer.$setFontMetrics(this.$fontMetrics),this.$textLayer.addEventListener("changeCharacterSize",(function(e){n.updateCharacterSize(),n.onResize(!0,n.gutterWidth,n.$size.width,n.$size.height),n._signal("changeCharacterSize",e)})),this.$size={width:0,height:0,scrollerHeight:0,scrollerWidth:0,$dirty:!0},this.layerConfig={width:1,padding:0,firstRow:0,firstRowScreen:0,lastRow:0,lineHeight:0,characterWidth:0,minHeight:1,maxHeight:1,offset:0,height:1,gutterOffset:1},this.scrollMargin={left:0,right:0,top:0,bottom:0,v:0,h:0},this.margin={left:0,right:0,top:0,bottom:0,v:0,h:0},this.$keepTextAreaAtCursor=!f.isIOS,this.$loop=new d(this.$renderChanges.bind(this),this.container.ownerDocument.defaultView),this.$loop.schedule(this.CHANGE_FULL),this.updateCharacterSize(),this.setPadding(4),s.resetOptions(this),s._signal("renderer",this)};(function(){this.CHANGE_CURSOR=1,this.CHANGE_MARKER=2,this.CHANGE_GUTTER=4,this.CHANGE_SCROLL=8,this.CHANGE_LINES=16,this.CHANGE_TEXT=32,this.CHANGE_SIZE=64,this.CHANGE_MARKER_BACK=128,this.CHANGE_MARKER_FRONT=256,this.CHANGE_FULL=512,this.CHANGE_H_SCROLL=1024,i.implement(this,p),this.updateCharacterSize=function(){this.$textLayer.allowBoldFonts!=this.$allowBoldFonts&&(this.$allowBoldFonts=this.$textLayer.allowBoldFonts,this.setStyle("ace_nobold",!this.$allowBoldFonts)),this.layerConfig.characterWidth=this.characterWidth=this.$textLayer.getCharacterWidth(),this.layerConfig.lineHeight=this.lineHeight=this.$textLayer.getLineHeight(),this.$updatePrintMargin(),r.setStyle(this.scroller.style,"line-height",this.lineHeight+"px")},this.setSession=function(e){this.session&&this.session.doc.off("changeNewLineMode",this.onChangeNewLineMode),this.session=e,e&&this.scrollMargin.top&&e.getScrollTop()<=0&&e.setScrollTop(-this.scrollMargin.top),this.$cursorLayer.setSession(e),this.$markerBack.setSession(e),this.$markerFront.setSession(e),this.$gutterLayer.setSession(e),this.$textLayer.setSession(e),e&&(this.$loop.schedule(this.CHANGE_FULL),this.session.$setFontMetrics(this.$fontMetrics),this.scrollBarH.scrollLeft=this.scrollBarV.scrollTop=null,this.onChangeNewLineMode=this.onChangeNewLineMode.bind(this),this.onChangeNewLineMode(),this.session.doc.on("changeNewLineMode",this.onChangeNewLineMode))},this.updateLines=function(e,t,n){if(void 0===t&&(t=1/0),this.$changedLines?(this.$changedLines.firstRow>e&&(this.$changedLines.firstRow=e),this.$changedLines.lastRowthis.layerConfig.lastRow||this.$loop.schedule(this.CHANGE_LINES)},this.onChangeNewLineMode=function(){this.$loop.schedule(this.CHANGE_TEXT),this.$textLayer.$updateEolChar(),this.session.$bidiHandler.setEolChar(this.$textLayer.EOL_CHAR)},this.onChangeTabSize=function(){this.$loop.schedule(this.CHANGE_TEXT|this.CHANGE_MARKER),this.$textLayer.onChangeTabSize()},this.updateText=function(){this.$loop.schedule(this.CHANGE_TEXT)},this.updateFull=function(e){e?this.$renderChanges(this.CHANGE_FULL,!0):this.$loop.schedule(this.CHANGE_FULL)},this.updateFontSize=function(){this.$textLayer.checkForSizeChanges()},this.$changes=0,this.$updateSizeAsync=function(){this.$loop.pending?this.$size.$dirty=!0:this.onResize()},this.onResize=function(e,t,n,i){if(!(this.resizing>2)){this.resizing>0?this.resizing++:this.resizing=e?1:0;var r=this.container;i||(i=r.clientHeight||r.scrollHeight),n||(n=r.clientWidth||r.scrollWidth);var s=this.$updateCachedSize(e,t,n,i);if(!this.$size.scrollerHeight||!n&&!i)return this.resizing=0;e&&(this.$gutterLayer.$padding=null),e?this.$renderChanges(s|this.$changes,!0):this.$loop.schedule(s|this.$changes),this.resizing&&(this.resizing=0),this.scrollBarV.scrollLeft=this.scrollBarV.scrollTop=null}},this.$updateCachedSize=function(e,t,n,i){i-=this.$extraHeight||0;var s=0,o=this.$size,a={width:o.width,height:o.height,scrollerHeight:o.scrollerHeight,scrollerWidth:o.scrollerWidth};if(i&&(e||o.height!=i)&&(o.height=i,s|=this.CHANGE_SIZE,o.scrollerHeight=o.height,this.$horizScroll&&(o.scrollerHeight-=this.scrollBarH.getHeight()),this.scrollBarV.element.style.bottom=this.scrollBarH.getHeight()+"px",s|=this.CHANGE_SCROLL),n&&(e||o.width!=n)){s|=this.CHANGE_SIZE,o.width=n,null==t&&(t=this.$showGutter?this.$gutter.offsetWidth:0),this.gutterWidth=t,r.setStyle(this.scrollBarH.element.style,"left",t+"px"),r.setStyle(this.scroller.style,"left",t+this.margin.left+"px"),o.scrollerWidth=Math.max(0,n-t-this.scrollBarV.getWidth()-this.margin.h),r.setStyle(this.$gutter.style,"left",this.margin.left+"px");var l=this.scrollBarV.getWidth()+"px";r.setStyle(this.scrollBarH.element.style,"right",l),r.setStyle(this.scroller.style,"right",l),r.setStyle(this.scroller.style,"bottom",this.scrollBarH.getHeight()),(this.session&&this.session.getUseWrapMode()&&this.adjustWrapLimit()||e)&&(s|=this.CHANGE_FULL)}return o.$dirty=!n||!i,s&&this._signal("resize",a),s},this.onGutterResize=function(e){var t=this.$showGutter?e:0;t!=this.gutterWidth&&(this.$changes|=this.$updateCachedSize(!0,t,this.$size.width,this.$size.height)),this.session.getUseWrapMode()&&this.adjustWrapLimit()||this.$size.$dirty?this.$loop.schedule(this.CHANGE_FULL):this.$computeLayerConfig()},this.adjustWrapLimit=function(){var e=this.$size.scrollerWidth-2*this.$padding,t=Math.floor(e/this.characterWidth);return this.session.adjustWrapLimit(t,this.$showPrintMargin&&this.$printMarginColumn)},this.setAnimatedScroll=function(e){this.setOption("animatedScroll",e)},this.getAnimatedScroll=function(){return this.$animatedScroll},this.setShowInvisibles=function(e){this.setOption("showInvisibles",e),this.session.$bidiHandler.setShowInvisibles(e)},this.getShowInvisibles=function(){return this.getOption("showInvisibles")},this.getDisplayIndentGuides=function(){return this.getOption("displayIndentGuides")},this.setDisplayIndentGuides=function(e){this.setOption("displayIndentGuides",e)},this.setShowPrintMargin=function(e){this.setOption("showPrintMargin",e)},this.getShowPrintMargin=function(){return this.getOption("showPrintMargin")},this.setPrintMarginColumn=function(e){this.setOption("printMarginColumn",e)},this.getPrintMarginColumn=function(){return this.getOption("printMarginColumn")},this.getShowGutter=function(){return this.getOption("showGutter")},this.setShowGutter=function(e){return this.setOption("showGutter",e)},this.getFadeFoldWidgets=function(){return this.getOption("fadeFoldWidgets")},this.setFadeFoldWidgets=function(e){this.setOption("fadeFoldWidgets",e)},this.setHighlightGutterLine=function(e){this.setOption("highlightGutterLine",e)},this.getHighlightGutterLine=function(){return this.getOption("highlightGutterLine")},this.$updatePrintMargin=function(){if(this.$showPrintMargin||this.$printMarginEl){if(!this.$printMarginEl){var e=r.createElement("div");e.className="ace_layer ace_print-margin-layer",this.$printMarginEl=r.createElement("div"),this.$printMarginEl.className="ace_print-margin",e.appendChild(this.$printMarginEl),this.content.insertBefore(e,this.content.firstChild)}var t=this.$printMarginEl.style;t.left=Math.round(this.characterWidth*this.$printMarginColumn+this.$padding)+"px",t.visibility=this.$showPrintMargin?"visible":"hidden",this.session&&-1==this.session.$wrap&&this.adjustWrapLimit()}},this.getContainerElement=function(){return this.container},this.getMouseEventTarget=function(){return this.scroller},this.getTextAreaContainer=function(){return this.container},this.$moveTextAreaToCursor=function(){if(!this.$isMousePressed){var e=this.textarea.style,t=this.$composition;if(this.$keepTextAreaAtCursor||t){var n=this.$cursorLayer.$pixelPos;if(n){t&&t.markerRange&&(n=this.$cursorLayer.getPixelPosition(t.markerRange.start,!0));var i=this.layerConfig,s=n.top,o=n.left;s-=i.offset;var a=t&&t.useTextareaForIME?this.lineHeight:E?0:1;if(s<0||s>i.height-a)r.translate(this.textarea,0,0);else{var l=1,c=this.$size.height-a;if(t)if(t.useTextareaForIME){var u=this.textarea.value;l=this.characterWidth*this.session.$getStringScreenWidth(u)[0]}else s+=this.lineHeight+2;else s+=this.lineHeight;(o-=this.scrollLeft)>this.$size.scrollerWidth-l&&(o=this.$size.scrollerWidth-l),o+=this.gutterWidth+this.margin.left,r.setStyle(e,"height",a+"px"),r.setStyle(e,"width",l+"px"),r.translate(this.textarea,Math.min(o,this.$size.scrollerWidth-l),Math.min(s,c))}}}else r.translate(this.textarea,-100,0)}},this.getFirstVisibleRow=function(){return this.layerConfig.firstRow},this.getFirstFullyVisibleRow=function(){return this.layerConfig.firstRow+(0===this.layerConfig.offset?0:1)},this.getLastFullyVisibleRow=function(){var e=this.layerConfig,t=e.lastRow;return this.session.documentToScreenRow(t,0)*e.lineHeight-this.session.getScrollTop()>e.height-e.lineHeight?t-1:t},this.getLastVisibleRow=function(){return this.layerConfig.lastRow},this.$padding=null,this.setPadding=function(e){this.$padding=e,this.$textLayer.setPadding(e),this.$cursorLayer.setPadding(e),this.$markerFront.setPadding(e),this.$markerBack.setPadding(e),this.$loop.schedule(this.CHANGE_FULL),this.$updatePrintMargin()},this.setScrollMargin=function(e,t,n,i){var r=this.scrollMargin;r.top=0|e,r.bottom=0|t,r.right=0|i,r.left=0|n,r.v=r.top+r.bottom,r.h=r.left+r.right,r.top&&this.scrollTop<=0&&this.session&&this.session.setScrollTop(-r.top),this.updateFull()},this.setMargin=function(e,t,n,i){var r=this.margin;r.top=0|e,r.bottom=0|t,r.right=0|i,r.left=0|n,r.v=r.top+r.bottom,r.h=r.left+r.right,this.$updateCachedSize(!0,this.gutterWidth,this.$size.width,this.$size.height),this.updateFull()},this.getHScrollBarAlwaysVisible=function(){return this.$hScrollBarAlwaysVisible},this.setHScrollBarAlwaysVisible=function(e){this.setOption("hScrollBarAlwaysVisible",e)},this.getVScrollBarAlwaysVisible=function(){return this.$vScrollBarAlwaysVisible},this.setVScrollBarAlwaysVisible=function(e){this.setOption("vScrollBarAlwaysVisible",e)},this.$updateScrollBarV=function(){var e=this.layerConfig.maxHeight,t=this.$size.scrollerHeight;!this.$maxLines&&this.$scrollPastEnd&&(e-=(t-this.lineHeight)*this.$scrollPastEnd,this.scrollTop>e-t&&(e=this.scrollTop+t,this.scrollBarV.scrollTop=null)),this.scrollBarV.setScrollHeight(e+this.scrollMargin.v),this.scrollBarV.setScrollTop(this.scrollTop+this.scrollMargin.top)},this.$updateScrollBarH=function(){this.scrollBarH.setScrollWidth(this.layerConfig.width+2*this.$padding+this.scrollMargin.h),this.scrollBarH.setScrollLeft(this.scrollLeft+this.scrollMargin.left)},this.$frozen=!1,this.freeze=function(){this.$frozen=!0},this.unfreeze=function(){this.$frozen=!1},this.$renderChanges=function(e,t){if(this.$changes&&(e|=this.$changes,this.$changes=0),this.session&&this.container.offsetWidth&&!this.$frozen&&(e||t)){if(this.$size.$dirty)return this.$changes|=e,this.onResize(!0);this.lineHeight||this.$textLayer.checkForSizeChanges(),this._signal("beforeRender"),this.session&&this.session.$bidiHandler&&this.session.$bidiHandler.updateCharacterWidths(this.$fontMetrics);var n=this.layerConfig;if(e&this.CHANGE_FULL||e&this.CHANGE_SIZE||e&this.CHANGE_TEXT||e&this.CHANGE_LINES||e&this.CHANGE_SCROLL||e&this.CHANGE_H_SCROLL){if(e|=this.$computeLayerConfig()|this.$loop.clear(),n.firstRow!=this.layerConfig.firstRow&&n.firstRowScreen==this.layerConfig.firstRowScreen){var i=this.scrollTop+(n.firstRow-this.layerConfig.firstRow)*this.lineHeight;i>0&&(this.scrollTop=i,e|=this.CHANGE_SCROLL,e|=this.$computeLayerConfig()|this.$loop.clear())}n=this.layerConfig,this.$updateScrollBarV(),e&this.CHANGE_H_SCROLL&&this.$updateScrollBarH(),r.translate(this.content,-this.scrollLeft,-n.offset);var s=n.width+2*this.$padding+"px",o=n.minHeight+"px";r.setStyle(this.content.style,"width",s),r.setStyle(this.content.style,"height",o)}if(e&this.CHANGE_H_SCROLL&&(r.translate(this.content,-this.scrollLeft,-n.offset),this.scroller.className=this.scrollLeft<=0?"ace_scroller":"ace_scroller ace_scroll-left"),e&this.CHANGE_FULL)return this.$changedLines=null,this.$textLayer.update(n),this.$showGutter&&this.$gutterLayer.update(n),this.$markerBack.update(n),this.$markerFront.update(n),this.$cursorLayer.update(n),this.$moveTextAreaToCursor(),void this._signal("afterRender");if(e&this.CHANGE_SCROLL)return this.$changedLines=null,e&this.CHANGE_TEXT||e&this.CHANGE_LINES?this.$textLayer.update(n):this.$textLayer.scrollLines(n),this.$showGutter&&(e&this.CHANGE_GUTTER||e&this.CHANGE_LINES?this.$gutterLayer.update(n):this.$gutterLayer.scrollLines(n)),this.$markerBack.update(n),this.$markerFront.update(n),this.$cursorLayer.update(n),this.$moveTextAreaToCursor(),void this._signal("afterRender");e&this.CHANGE_TEXT?(this.$changedLines=null,this.$textLayer.update(n),this.$showGutter&&this.$gutterLayer.update(n)):e&this.CHANGE_LINES?(this.$updateLines()||e&this.CHANGE_GUTTER&&this.$showGutter)&&this.$gutterLayer.update(n):e&this.CHANGE_TEXT||e&this.CHANGE_GUTTER?this.$showGutter&&this.$gutterLayer.update(n):e&this.CHANGE_CURSOR&&this.$highlightGutterLine&&this.$gutterLayer.updateLineHighlight(n),e&this.CHANGE_CURSOR&&(this.$cursorLayer.update(n),this.$moveTextAreaToCursor()),e&(this.CHANGE_MARKER|this.CHANGE_MARKER_FRONT)&&this.$markerFront.update(n),e&(this.CHANGE_MARKER|this.CHANGE_MARKER_BACK)&&this.$markerBack.update(n),this._signal("afterRender")}else this.$changes|=e},this.$autosize=function(){var e=this.session.getScreenLength()*this.lineHeight,t=this.$maxLines*this.lineHeight,n=Math.min(t,Math.max((this.$minLines||1)*this.lineHeight,e))+this.scrollMargin.v+(this.$extraHeight||0);this.$horizScroll&&(n+=this.scrollBarH.getHeight()),this.$maxPixelHeight&&n>this.$maxPixelHeight&&(n=this.$maxPixelHeight);var i=!(n<=2*this.lineHeight)&&e>t;if(n!=this.desiredHeight||this.$size.height!=this.desiredHeight||i!=this.$vScroll){i!=this.$vScroll&&(this.$vScroll=i,this.scrollBarV.setVisible(i));var r=this.container.clientWidth;this.container.style.height=n+"px",this.$updateCachedSize(!0,this.$gutterWidth,r,n),this.desiredHeight=n,this._signal("autosize")}},this.$computeLayerConfig=function(){var e=this.session,t=this.$size,n=t.height<=2*this.lineHeight,i=this.session.getScreenLength()*this.lineHeight,r=this.$getLongestLine(),s=!n&&(this.$hScrollBarAlwaysVisible||t.scrollerWidth-r-2*this.$padding<0),o=this.$horizScroll!==s;o&&(this.$horizScroll=s,this.scrollBarH.setVisible(s));var a=this.$vScroll;this.$maxLines&&this.lineHeight>1&&this.$autosize();var l=t.scrollerHeight+this.lineHeight,c=!this.$maxLines&&this.$scrollPastEnd?(t.scrollerHeight-this.lineHeight)*this.$scrollPastEnd:0;i+=c;var u=this.scrollMargin;this.session.setScrollTop(Math.max(-u.top,Math.min(this.scrollTop,i-t.scrollerHeight+u.bottom))),this.session.setScrollLeft(Math.max(-u.left,Math.min(this.scrollLeft,r+2*this.$padding-t.scrollerWidth+u.right)));var h=!n&&(this.$vScrollBarAlwaysVisible||t.scrollerHeight-i+c<0||this.scrollTop>u.top),d=a!==h;d&&(this.$vScroll=h,this.scrollBarV.setVisible(h));var m,p,g=this.scrollTop%this.lineHeight,f=Math.ceil(l/this.lineHeight)-1,E=Math.max(0,Math.round((this.scrollTop-g)/this.lineHeight)),v=E+f,_=this.lineHeight;E=e.screenToDocumentRow(E,0);var C=e.getFoldLine(E);C&&(E=C.start.row),m=e.documentToScreenRow(E,0),p=e.getRowLength(E)*_,v=Math.min(e.screenToDocumentRow(v,0),e.getLength()-1),l=t.scrollerHeight+e.getRowLength(v)*_+p,g=this.scrollTop-m*_;var A=0;return(this.layerConfig.width!=r||o)&&(A=this.CHANGE_H_SCROLL),(o||d)&&(A|=this.$updateCachedSize(!0,this.gutterWidth,t.width,t.height),this._signal("scrollbarVisibilityChanged"),d&&(r=this.$getLongestLine())),this.layerConfig={width:r,padding:this.$padding,firstRow:E,firstRowScreen:m,lastRow:v,lineHeight:_,characterWidth:this.characterWidth,minHeight:l,maxHeight:i,offset:g,gutterOffset:_?Math.max(0,Math.ceil((g+t.height-t.scrollerHeight)/_)):0,height:this.$size.scrollerHeight},this.session.$bidiHandler&&this.session.$bidiHandler.setContentWidth(r-this.$padding),A},this.$updateLines=function(){if(this.$changedLines){var e=this.$changedLines.firstRow,t=this.$changedLines.lastRow;this.$changedLines=null;var n=this.layerConfig;if(!(e>n.lastRow+1||tthis.$textLayer.MAX_LINE_LENGTH&&(e=this.$textLayer.MAX_LINE_LENGTH+30),Math.max(this.$size.scrollerWidth-2*this.$padding,Math.round(e*this.characterWidth))},this.updateFrontMarkers=function(){this.$markerFront.setMarkers(this.session.getMarkers(!0)),this.$loop.schedule(this.CHANGE_MARKER_FRONT)},this.updateBackMarkers=function(){this.$markerBack.setMarkers(this.session.getMarkers()),this.$loop.schedule(this.CHANGE_MARKER_BACK)},this.addGutterDecoration=function(e,t){this.$gutterLayer.addGutterDecoration(e,t)},this.removeGutterDecoration=function(e,t){this.$gutterLayer.removeGutterDecoration(e,t)},this.updateBreakpoints=function(e){this.$loop.schedule(this.CHANGE_GUTTER)},this.setAnnotations=function(e){this.$gutterLayer.setAnnotations(e),this.$loop.schedule(this.CHANGE_GUTTER)},this.updateCursor=function(){this.$loop.schedule(this.CHANGE_CURSOR)},this.hideCursor=function(){this.$cursorLayer.hideCursor()},this.showCursor=function(){this.$cursorLayer.showCursor()},this.scrollSelectionIntoView=function(e,t,n){this.scrollCursorIntoView(e,n),this.scrollCursorIntoView(t,n)},this.scrollCursorIntoView=function(e,t,n){if(0!==this.$size.scrollerHeight){var i=this.$cursorLayer.getPixelPosition(e),r=i.left,s=i.top,o=n&&n.top||0,a=n&&n.bottom||0,l=this.$scrollAnimation?this.session.getScrollTop():this.scrollTop;l+o>s?(t&&l+o>s+this.lineHeight&&(s-=t*this.$size.scrollerHeight),0===s&&(s=-this.scrollMargin.top),this.session.setScrollTop(s)):l+this.$size.scrollerHeight-ar?(r=1-this.scrollMargin.top||t>0&&this.session.getScrollTop()+this.$size.scrollerHeight-this.layerConfig.maxHeight<-1+this.scrollMargin.bottom||e<0&&this.session.getScrollLeft()>=1-this.scrollMargin.left||e>0&&this.session.getScrollLeft()+this.$size.scrollerWidth-this.layerConfig.width<-1+this.scrollMargin.right||void 0},this.pixelToScreenCoordinates=function(e,t){var n;if(this.$hasCssTransforms){n={top:0,left:0};var i=this.$fontMetrics.transformCoordinates([e,t]);e=i[1]-this.gutterWidth-this.margin.left,t=i[0]}else n=this.scroller.getBoundingClientRect();var r=e+this.scrollLeft-n.left-this.$padding,s=r/this.characterWidth,o=Math.floor((t+this.scrollTop-n.top)/this.lineHeight),a=this.$blockCursor?Math.floor(s):Math.round(s);return{row:o,column:a,side:s-a>0?1:-1,offsetX:r}},this.screenToTextCoordinates=function(e,t){var n;if(this.$hasCssTransforms){n={top:0,left:0};var i=this.$fontMetrics.transformCoordinates([e,t]);e=i[1]-this.gutterWidth-this.margin.left,t=i[0]}else n=this.scroller.getBoundingClientRect();var r=e+this.scrollLeft-n.left-this.$padding,s=r/this.characterWidth,o=this.$blockCursor?Math.floor(s):Math.round(s),a=Math.floor((t+this.scrollTop-n.top)/this.lineHeight);return this.session.screenToDocumentPosition(a,Math.max(o,0),r)},this.textToScreenCoordinates=function(e,t){var n=this.scroller.getBoundingClientRect(),i=this.session.documentToScreenPosition(e,t),r=this.$padding+(this.session.$bidiHandler.isBidiRow(i.row,e)?this.session.$bidiHandler.getPosLeft(i.column):Math.round(i.column*this.characterWidth)),s=i.row*this.lineHeight;return{pageX:n.left+r-this.scrollLeft,pageY:n.top+s-this.scrollTop}},this.visualizeFocus=function(){r.addCssClass(this.container,"ace_focus")},this.visualizeBlur=function(){r.removeCssClass(this.container,"ace_focus")},this.showComposition=function(e){this.$composition=e,e.cssText||(e.cssText=this.textarea.style.cssText),e.useTextareaForIME=this.$useTextareaForIME,this.$useTextareaForIME?(r.addCssClass(this.textarea,"ace_composition"),this.textarea.style.cssText="",this.$moveTextAreaToCursor(),this.$cursorLayer.element.style.display="none"):e.markerId=this.session.addMarker(e.markerRange,"ace_composition_marker","text")},this.setCompositionText=function(e){var t=this.session.selection.cursor;this.addToken(e,"composition_placeholder",t.row,t.column),this.$moveTextAreaToCursor()},this.hideComposition=function(){this.$composition&&(this.$composition.markerId&&this.session.removeMarker(this.$composition.markerId),r.removeCssClass(this.textarea,"ace_composition"),this.textarea.style.cssText=this.$composition.cssText,this.$composition=null,this.$cursorLayer.element.style.display="")},this.addToken=function(e,t,n,i){var r=this.session;r.bgTokenizer.lines[n]=null;var s={type:t,value:e},o=r.getTokens(n);if(null==i)o.push(s);else for(var a=0,l=0;l50&&e.length>this.$doc.getLength()>>1?this.call("setValue",[this.$doc.getValue()]):this.emit("change",{data:e}))}}).call(l.prototype),t.UIWorkerClient=function(e,t,n){var i=null,r=!1,a=Object.create(s),c=[],u=new l({messageBuffer:c,terminate:function(){},postMessage:function(e){c.push(e),i&&(r?setTimeout(h):h())}});u.setEmitSync=function(e){r=e};var h=function(){var e=c.shift();e.command?i[e.command].apply(i,e.args):e.event&&a._signal(e.event,e.data)};return a.postMessage=function(e){u.onMessage({data:e})},a.callback=function(e,t){this.postMessage({type:"call",id:t,data:e})},a.emit=function(e,t){this.postMessage({type:"event",name:e,data:t})},o.loadModule(["worker",t],(function(e){for(i=new e[n](a);c.length;)h()})),u},t.WorkerClient=l,t.createWorker=a})),ace.define("ace/placeholder",["require","exports","module","ace/range","ace/lib/event_emitter","ace/lib/oop"],(function(e,t,n){"use strict";var i=e("./range").Range,r=e("./lib/event_emitter").EventEmitter,s=e("./lib/oop"),o=function(e,t,n,i,r,s){var o=this;this.length=t,this.session=e,this.doc=e.getDocument(),this.mainClass=r,this.othersClass=s,this.$onUpdate=this.onUpdate.bind(this),this.doc.on("change",this.$onUpdate),this.$others=i,this.$onCursorChange=function(){setTimeout((function(){o.onCursorChange()}))},this.$pos=n;var a=e.getUndoManager().$undoStack||e.getUndoManager().$undostack||{length:-1};this.$undoStackDepth=a.length,this.setup(),e.selection.on("changeCursor",this.$onCursorChange)};(function(){s.implement(this,r),this.setup=function(){var e=this,t=this.doc,n=this.session;this.selectionBefore=n.selection.toJSON(),n.selection.inMultiSelectMode&&n.selection.toSingleRange(),this.pos=t.createAnchor(this.$pos.row,this.$pos.column);var r=this.pos;r.$insertRight=!0,r.detach(),r.markerId=n.addMarker(new i(r.row,r.column,r.row,r.column+this.length),this.mainClass,null,!1),this.others=[],this.$others.forEach((function(n){var i=t.createAnchor(n.row,n.column);i.$insertRight=!0,i.detach(),e.others.push(i)})),n.setUndoSelect(!1)},this.showOtherMarkers=function(){if(!this.othersActive){var e=this.session,t=this;this.othersActive=!0,this.others.forEach((function(n){n.markerId=e.addMarker(new i(n.row,n.column,n.row,n.column+t.length),t.othersClass,null,!1)}))}},this.hideOtherMarkers=function(){if(this.othersActive){this.othersActive=!1;for(var e=0;e=this.pos.column&&t.start.column<=this.pos.column+this.length+1,s=t.start.column-this.pos.column;if(this.updateAnchors(e),r&&(this.length+=n),r&&!this.session.$fromUndo)if("insert"===e.action)for(var o=this.others.length-1;o>=0;o--){var a={row:(l=this.others[o]).row,column:l.column+s};this.doc.insertMergedLines(a,e.lines)}else if("remove"===e.action)for(o=this.others.length-1;o>=0;o--){var l;a={row:(l=this.others[o]).row,column:l.column+s},this.doc.remove(new i(a.row,a.column,a.row,a.column-n))}this.$updating=!1,this.updateMarkers()}},this.updateAnchors=function(e){this.pos.onChange(e);for(var t=this.others.length;t--;)this.others[t].onChange(e);this.updateMarkers()},this.updateMarkers=function(){if(!this.$updating){var e=this,t=this.session,n=function(n,r){t.removeMarker(n.markerId),n.markerId=t.addMarker(new i(n.row,n.column,n.row,n.column+e.length),r,null,!1)};n(this.pos,this.mainClass);for(var r=this.others.length;r--;)n(this.others[r],this.othersClass)}},this.onCursorChange=function(e){if(!this.$updating&&this.session){var t=this.session.selection.getCursor();t.row===this.pos.row&&t.column>=this.pos.column&&t.column<=this.pos.column+this.length?(this.showOtherMarkers(),this._emit("cursorEnter",e)):(this.hideOtherMarkers(),this._emit("cursorLeave",e))}},this.detach=function(){this.session.removeMarker(this.pos&&this.pos.markerId),this.hideOtherMarkers(),this.doc.removeEventListener("change",this.$onUpdate),this.session.selection.removeEventListener("changeCursor",this.$onCursorChange),this.session.setUndoSelect(!0),this.session=null},this.cancel=function(){if(-1!==this.$undoStackDepth){for(var e=this.session.getUndoManager(),t=(e.$undoStack||e.$undostack).length-this.$undoStackDepth,n=0;n1&&!this.inMultiSelectMode&&(this._signal("multiSelect"),this.inMultiSelectMode=!0,this.session.$undoSelect=!1,this.rangeList.attach(this.session)),t||this.fromOrientedRange(e)}},this.toSingleRange=function(e){e=e||this.ranges[0];var t=this.rangeList.removeAll();t.length&&this.$onRemoveRange(t),e&&this.fromOrientedRange(e)},this.substractPoint=function(e){var t=this.rangeList.substractPoint(e);if(t)return this.$onRemoveRange(t),t[0]},this.mergeOverlappingRanges=function(){var e=this.rangeList.merge();e.length&&this.$onRemoveRange(e)},this.$onAddRange=function(e){this.rangeCount=this.rangeList.ranges.length,this.ranges.unshift(e),this._signal("addRange",{range:e})},this.$onRemoveRange=function(e){if(this.rangeCount=this.rangeList.ranges.length,1==this.rangeCount&&this.inMultiSelectMode){var t=this.rangeList.ranges.pop();e.push(t),this.rangeCount=0}for(var n=e.length;n--;){var i=this.ranges.indexOf(e[n]);this.ranges.splice(i,1)}this._signal("removeRange",{ranges:e}),0===this.rangeCount&&this.inMultiSelectMode&&(this.inMultiSelectMode=!1,this._signal("singleSelect"),this.session.$undoSelect=!0,this.rangeList.detach(this.session)),(t=t||this.ranges[0])&&!t.isEqual(this.getRange())&&this.fromOrientedRange(t)},this.$initRangeList=function(){this.rangeList||(this.rangeList=new i,this.ranges=[],this.rangeCount=0)},this.getAllRanges=function(){return this.rangeCount?this.rangeList.ranges.concat():[this.getRange()]},this.splitIntoLines=function(){if(this.rangeCount>1){var e=this.rangeList.ranges,t=e[e.length-1],n=r.fromPoints(e[0].start,t.end);this.toSingleRange(),this.setSelectionRange(n,t.cursor==t.start)}else{n=this.getRange();var i=this.isBackwards(),s=n.start.row,o=n.end.row;if(s==o){if(i)var a=n.end,l=n.start;else a=n.start,l=n.end;return this.addRange(r.fromPoints(l,l)),void this.addRange(r.fromPoints(a,a))}var c=[],u=this.getLineRange(s,!0);u.start.column=n.start.column,c.push(u);for(var h=s+1;h1){var e=this.rangeList.ranges,t=e[e.length-1],n=r.fromPoints(e[0].start,t.end);this.toSingleRange(),this.setSelectionRange(n,t.cursor==t.start)}else{var i=this.session.documentToScreenPosition(this.cursor),s=this.session.documentToScreenPosition(this.anchor);this.rectangularRangeBlock(i,s).forEach(this.addRange,this)}},this.rectangularRangeBlock=function(e,t,n){var i=[],s=e.column0;)v--;if(v>0)for(var _=0;i[_].isEmpty();)_++;for(var C=v;C>=_;C--)i[C].isEmpty()&&i.splice(C,1)}return i}}.call(s.prototype);var d=e("./editor").Editor;function m(e){e.$multiselectOnSessionChange||(e.$onAddRange=e.$onAddRange.bind(e),e.$onRemoveRange=e.$onRemoveRange.bind(e),e.$onMultiSelect=e.$onMultiSelect.bind(e),e.$onSingleSelect=e.$onSingleSelect.bind(e),e.$multiselectOnSessionChange=t.onSessionChange.bind(e),e.$checkMultiselectChange=e.$checkMultiselectChange.bind(e),e.$multiselectOnSessionChange(e),e.on("changeSession",e.$multiselectOnSessionChange),e.on("mousedown",o),e.commands.addCommands(c.defaultCommands),function(e){if(e.textInput){var t=e.textInput.getElement(),n=!1;a.addListener(t,"keydown",(function(t){var r=18==t.keyCode&&!(t.ctrlKey||t.shiftKey||t.metaKey);e.$blockSelectEnabled&&r?n||(e.renderer.setMouseCursor("crosshair"),n=!0):n&&i()})),a.addListener(t,"keyup",i),a.addListener(t,"blur",i)}function i(t){n&&(e.renderer.setMouseCursor(""),n=!1)}}(e))}(function(){this.updateSelectionMarkers=function(){this.renderer.updateCursor(),this.renderer.updateBackMarkers()},this.addSelectionMarker=function(e){e.cursor||(e.cursor=e.end);var t=this.getSelectionStyle();return e.marker=this.session.addMarker(e,"ace_selection",t),this.session.$selectionMarkers.push(e),this.session.selectionMarkerCount=this.session.$selectionMarkers.length,e},this.removeSelectionMarker=function(e){if(e.marker){this.session.removeMarker(e.marker);var t=this.session.$selectionMarkers.indexOf(e);-1!=t&&this.session.$selectionMarkers.splice(t,1),this.session.selectionMarkerCount=this.session.$selectionMarkers.length}},this.removeSelectionMarkers=function(e){for(var t=this.session.$selectionMarkers,n=e.length;n--;){var i=e[n];if(i.marker){this.session.removeMarker(i.marker);var r=t.indexOf(i);-1!=r&&t.splice(r,1)}}this.session.selectionMarkerCount=t.length},this.$onAddRange=function(e){this.addSelectionMarker(e.range),this.renderer.updateCursor(),this.renderer.updateBackMarkers()},this.$onRemoveRange=function(e){this.removeSelectionMarkers(e.ranges),this.renderer.updateCursor(),this.renderer.updateBackMarkers()},this.$onMultiSelect=function(e){this.inMultiSelectMode||(this.inMultiSelectMode=!0,this.setStyle("ace_multiselect"),this.keyBinding.addKeyboardHandler(c.keyboardHandler),this.commands.setDefaultHandler("exec",this.$onMultiSelectExec),this.renderer.updateCursor(),this.renderer.updateBackMarkers())},this.$onSingleSelect=function(e){this.session.multiSelect.inVirtualMode||(this.inMultiSelectMode=!1,this.unsetStyle("ace_multiselect"),this.keyBinding.removeKeyboardHandler(c.keyboardHandler),this.commands.removeDefaultHandler("exec",this.$onMultiSelectExec),this.renderer.updateCursor(),this.renderer.updateBackMarkers(),this._emit("changeSelection"))},this.$onMultiSelectExec=function(e){var t=e.command,n=e.editor;if(n.multiSelect){if(t.multiSelectAction)"forEach"==t.multiSelectAction?i=n.forEachSelection(t,e.args):"forEachLine"==t.multiSelectAction?i=n.forEachSelection(t,e.args,!0):"single"==t.multiSelectAction?(n.exitMultiSelectMode(),i=t.exec(n,e.args||{})):i=t.multiSelectAction(n,e.args||{});else{var i=t.exec(n,e.args||{});n.multiSelect.addRange(n.multiSelect.toOrientedRange()),n.multiSelect.mergeOverlappingRanges()}return i}},this.forEachSelection=function(e,t,n){if(!this.inVirtualSelectionMode){var i,r=n&&n.keepOrder,o=1==n||n&&n.$byLines,a=this.session,l=this.selection,c=l.rangeList,u=(r?l:c).ranges;if(!u.length)return e.exec?e.exec(this,t||{}):e(this,t||{});var h=l._eventRegistry;l._eventRegistry={};var d=new s(a);this.inVirtualSelectionMode=!0;for(var m=u.length;m--;){if(o)for(;m>0&&u[m].start.row==u[m-1].end.row;)m--;d.fromOrientedRange(u[m]),d.index=m,this.selection=a.selection=d;var p=e.exec?e.exec(this,t||{}):e(this,t||{});i||void 0===p||(i=p),d.toOrientedRange(u[m])}d.detach(),this.selection=a.selection=l,this.inVirtualSelectionMode=!1,l._eventRegistry=h,l.mergeOverlappingRanges(),l.ranges[0]&&l.fromOrientedRange(l.ranges[0]);var g=this.renderer.$scrollAnimation;return this.onCursorChange(),this.onSelectionChange(),g&&g.from==g.to&&this.renderer.animateScrolling(g.from),i}},this.exitMultiSelectMode=function(){this.inMultiSelectMode&&!this.inVirtualSelectionMode&&this.multiSelect.toSingleRange()},this.getSelectedText=function(){var e="";if(this.inMultiSelectMode&&!this.inVirtualSelectionMode){for(var t=this.multiSelect.rangeList.ranges,n=[],i=0;io&&(o=n.column),iu?e.insert(i,l.stringRepeat(" ",s-u)):e.remove(new r(i.row,i.column,i.row,i.column-s+u)),t.start.column=t.end.column=o,t.start.row=t.end.row=i.row,t.cursor=t.end})),t.fromOrientedRange(n[0]),this.renderer.updateCursor(),this.renderer.updateBackMarkers()}else{var u=this.selection.getRange(),h=u.start.row,d=u.end.row,m=h==d;if(m){var p,g=this.session.getLength();do{p=this.session.getLine(d)}while(/[=:]/.test(p)&&++d0);h<0&&(h=0),d>=g&&(d=g-1)}var f=this.session.removeFullLines(h,d);f=this.$reAlignText(f,m),this.session.insert({row:h,column:0},f.join("\n")+"\n"),m||(u.start.column=0,u.end.column=f[f.length-1].length),this.selection.setRange(u)}},this.$reAlignText=function(e,t){var n,i,r,s=!0,o=!0;return e.map((function(e){var t=e.match(/(\s*)(.*?)(\s*)([=:].*)/);return t?null==n?(n=t[1].length,i=t[2].length,r=t[3].length,t):(n+i+r!=t[1].length+t[2].length+t[3].length&&(o=!1),n!=t[1].length&&(s=!1),n>t[1].length&&(n=t[1].length),it[3].length&&(r=t[3].length),t):[e]})).map(t?c:s?o?function(e){return e[2]?a(n+i-e[2].length)+e[2]+a(r)+e[4].replace(/^([=:])\s+/,"$1 "):e[0]}:c:function(e){return e[2]?a(n)+e[2]+a(r)+e[4].replace(/^([=:])\s+/,"$1 "):e[0]});function a(e){return l.stringRepeat(" ",e)}function c(e){return e[2]?a(n)+e[2]+a(i-e[2].length+r)+e[4].replace(/^([=:])\s+/,"$1 "):e[0]}}}).call(d.prototype),t.onSessionChange=function(e){var t=e.session;t&&!t.multiSelect&&(t.$selectionMarkers=[],t.selection.$initRangeList(),t.multiSelect=t.selection),this.multiSelect=t&&t.multiSelect;var n=e.oldSession;n&&(n.multiSelect.off("addRange",this.$onAddRange),n.multiSelect.off("removeRange",this.$onRemoveRange),n.multiSelect.off("multiSelect",this.$onMultiSelect),n.multiSelect.off("singleSelect",this.$onSingleSelect),n.multiSelect.lead.off("change",this.$checkMultiselectChange),n.multiSelect.anchor.off("change",this.$checkMultiselectChange)),t&&(t.multiSelect.on("addRange",this.$onAddRange),t.multiSelect.on("removeRange",this.$onRemoveRange),t.multiSelect.on("multiSelect",this.$onMultiSelect),t.multiSelect.on("singleSelect",this.$onSingleSelect),t.multiSelect.lead.on("change",this.$checkMultiselectChange),t.multiSelect.anchor.on("change",this.$checkMultiselectChange)),t&&this.inMultiSelectMode!=t.selection.inMultiSelectMode&&(t.selection.inMultiSelectMode?this.$onMultiSelect():this.$onSingleSelect())},t.MultiSelect=m,e("./config").defineOptions(d.prototype,"editor",{enableMultiselect:{set:function(e){m(this),e?(this.on("changeSession",this.$multiselectOnSessionChange),this.on("mousedown",o)):(this.off("changeSession",this.$multiselectOnSessionChange),this.off("mousedown",o))},value:!0},enableBlockSelect:{set:function(e){this.$blockSelectEnabled=e},value:!0}})})),ace.define("ace/mode/folding/fold_mode",["require","exports","module","ace/range"],(function(e,t,n){"use strict";var i=e("../../range").Range,r=t.FoldMode=function(){};(function(){this.foldingStartMarker=null,this.foldingStopMarker=null,this.getFoldWidget=function(e,t,n){var i=e.getLine(n);return this.foldingStartMarker.test(i)?"start":"markbeginend"==t&&this.foldingStopMarker&&this.foldingStopMarker.test(i)?"end":""},this.getFoldWidgetRange=function(e,t,n){return null},this.indentationBlock=function(e,t,n){var r=/\S/,s=e.getLine(t),o=s.search(r);if(-1!=o){for(var a=n||s.length,l=e.getLength(),c=t,u=t;++tc){var m=e.getLine(u).length;return new i(c,a,u,m)}}},this.openingBracketBlock=function(e,t,n,r,s){var o={row:n,column:r+1},a=e.$findClosingBracket(t,o,s);if(a){var l=e.foldWidgets[a.row];return null==l&&(l=e.getFoldWidget(a.row)),"start"==l&&a.row>o.row&&(a.row--,a.column=e.getLine(a.row).length),i.fromPoints(o,a)}},this.closingBracketBlock=function(e,t,n,r,s){var o={row:n,column:r},a=e.$findOpeningBracket(t,o);if(a)return a.column++,o.column--,i.fromPoints(a,o)}}).call(r.prototype)})),ace.define("ace/theme/textmate",["require","exports","module","ace/lib/dom"],(function(e,t,n){"use strict";t.isDark=!1,t.cssClass="ace-tm",t.cssText='.ace-tm .ace_gutter {background: #f0f0f0;color: #333;}.ace-tm .ace_print-margin {width: 1px;background: #e8e8e8;}.ace-tm .ace_fold {background-color: #6B72E6;}.ace-tm {background-color: #FFFFFF;color: black;}.ace-tm .ace_cursor {color: black;}.ace-tm .ace_invisible {color: rgb(191, 191, 191);}.ace-tm .ace_storage,.ace-tm .ace_keyword {color: blue;}.ace-tm .ace_constant {color: rgb(197, 6, 11);}.ace-tm .ace_constant.ace_buildin {color: rgb(88, 72, 246);}.ace-tm .ace_constant.ace_language {color: rgb(88, 92, 246);}.ace-tm .ace_constant.ace_library {color: rgb(6, 150, 14);}.ace-tm .ace_invalid {background-color: rgba(255, 0, 0, 0.1);color: red;}.ace-tm .ace_support.ace_function {color: rgb(60, 76, 114);}.ace-tm .ace_support.ace_constant {color: rgb(6, 150, 14);}.ace-tm .ace_support.ace_type,.ace-tm .ace_support.ace_class {color: rgb(109, 121, 222);}.ace-tm .ace_keyword.ace_operator {color: rgb(104, 118, 135);}.ace-tm .ace_string {color: rgb(3, 106, 7);}.ace-tm .ace_comment {color: rgb(76, 136, 107);}.ace-tm .ace_comment.ace_doc {color: rgb(0, 102, 255);}.ace-tm .ace_comment.ace_doc.ace_tag {color: rgb(128, 159, 191);}.ace-tm .ace_constant.ace_numeric {color: rgb(0, 0, 205);}.ace-tm .ace_variable {color: rgb(49, 132, 149);}.ace-tm .ace_xml-pe {color: rgb(104, 104, 91);}.ace-tm .ace_entity.ace_name.ace_function {color: #0000A2;}.ace-tm .ace_heading {color: rgb(12, 7, 255);}.ace-tm .ace_list {color:rgb(185, 6, 144);}.ace-tm .ace_meta.ace_tag {color:rgb(0, 22, 142);}.ace-tm .ace_string.ace_regex {color: rgb(255, 0, 0)}.ace-tm .ace_marker-layer .ace_selection {background: rgb(181, 213, 255);}.ace-tm.ace_multiselect .ace_selection.ace_start {box-shadow: 0 0 3px 0px white;}.ace-tm .ace_marker-layer .ace_step {background: rgb(252, 255, 0);}.ace-tm .ace_marker-layer .ace_stack {background: rgb(164, 229, 101);}.ace-tm .ace_marker-layer .ace_bracket {margin: -1px 0 0 -1px;border: 1px solid rgb(192, 192, 192);}.ace-tm .ace_marker-layer .ace_active-line {background: rgba(0, 0, 0, 0.07);}.ace-tm .ace_gutter-active-line {background-color : #dcdcdc;}.ace-tm .ace_marker-layer .ace_selected-word {background: rgb(250, 250, 255);border: 1px solid rgb(200, 200, 250);}.ace-tm .ace_indent-guide {background: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAACCAYAAACZgbYnAAAAE0lEQVQImWP4////f4bLly//BwAmVgd1/w11/gAAAABJRU5ErkJggg==") right repeat-y;}',t.$id="ace/theme/textmate",e("../lib/dom").importCssString(t.cssText,t.cssClass)})),ace.define("ace/line_widgets",["require","exports","module","ace/lib/oop","ace/lib/dom","ace/range"],(function(e,t,n){"use strict";e("./lib/oop");var i=e("./lib/dom");function r(e){this.session=e,this.session.widgetManager=this,this.session.getRowLength=this.getRowLength,this.session.$getWidgetScreenLength=this.$getWidgetScreenLength,this.updateOnChange=this.updateOnChange.bind(this),this.renderWidgets=this.renderWidgets.bind(this),this.measureWidgets=this.measureWidgets.bind(this),this.session._changedWidgets=[],this.$onChangeEditor=this.$onChangeEditor.bind(this),this.session.on("change",this.updateOnChange),this.session.on("changeFold",this.updateOnFold),this.session.on("changeEditor",this.$onChangeEditor)}e("./range").Range,function(){this.getRowLength=function(e){var t;return t=this.lineWidgets&&this.lineWidgets[e]&&this.lineWidgets[e].rowCount||0,this.$useWrapMode&&this.$wrapData[e]?this.$wrapData[e].length+1+t:1+t},this.$getWidgetScreenLength=function(){var e=0;return this.lineWidgets.forEach((function(t){t&&t.rowCount&&!t.hidden&&(e+=t.rowCount)})),e},this.$onChangeEditor=function(e){this.attach(e.editor)},this.attach=function(e){e&&e.widgetManager&&e.widgetManager!=this&&e.widgetManager.detach(),this.editor!=e&&(this.detach(),this.editor=e,e&&(e.widgetManager=this,e.renderer.on("beforeRender",this.measureWidgets),e.renderer.on("afterRender",this.renderWidgets)))},this.detach=function(e){var t=this.editor;if(t){this.editor=null,t.widgetManager=null,t.renderer.off("beforeRender",this.measureWidgets),t.renderer.off("afterRender",this.renderWidgets);var n=this.session.lineWidgets;n&&n.forEach((function(e){e&&e.el&&e.el.parentNode&&(e._inDocument=!1,e.el.parentNode.removeChild(e.el))}))}},this.updateOnFold=function(e,t){var n=t.lineWidgets;if(n&&e.action){for(var i=e.data,r=i.start.row,s=i.end.row,o="add"==e.action,a=r+1;a0&&!i[r];)r--;this.firstRow=n.firstRow,this.lastRow=n.lastRow,t.$cursorLayer.config=n;for(var o=r;o<=s;o++){var a=i[o];if(a&&a.el)if(a.hidden)a.el.style.top=-100-(a.pixelHeight||0)+"px";else{a._inDocument||(a._inDocument=!0,t.container.appendChild(a.el));var l=t.$cursorLayer.getPixelPosition({row:o,column:0},!0).top;a.coverLine||(l+=n.lineHeight*this.session.getRowLineCount(a.row)),a.el.style.top=l-n.offset+"px";var c=a.coverGutter?0:t.gutterWidth;a.fixedWidth||(c-=t.scrollLeft),a.el.style.left=c+"px",a.fullWidth&&a.screenWidth&&(a.el.style.minWidth=n.width+2*n.padding+"px"),a.fixedWidth?a.el.style.right=t.scrollBar.getWidth()+"px":a.el.style.right=""}}}}}.call(r.prototype),t.LineWidgets=r})),ace.define("ace/ext/error_marker",["require","exports","module","ace/line_widgets","ace/lib/dom","ace/range"],(function(e,t,n){"use strict";var i=e("../line_widgets").LineWidgets,r=e("../lib/dom"),s=e("../range").Range;t.showErrorMarker=function(e,t){var n=e.session;n.widgetManager||(n.widgetManager=new i(n),n.widgetManager.attach(e));var o=e.getCursorPosition(),a=o.row,l=n.widgetManager.getWidgetsAtRow(a).filter((function(e){return"errorMarker"==e.type}))[0];l?l.destroy():a-=t;var c,u=function(e,t,n){var i=e.getAnnotations().sort(s.comparePoints);if(i.length){var r=function(e,t,n){for(var i=0,r=e.length-1;i<=r;){var s=i+r>>1,o=n(t,e[s]);if(o>0)i=s+1;else{if(!(o<0))return s;r=s-1}}return-(i+1)}(i,{row:t,column:-1},s.comparePoints);r<0&&(r=-r-1),r>=i.length?r=n>0?0:i.length-1:0===r&&n<0&&(r=i.length-1);var o=i[r];if(o&&n){if(o.row===t){do{o=i[r+=n]}while(o&&o.row===t);if(!o)return i.slice()}var a=[];t=o.row;do{a[n<0?"unshift":"push"](o),o=i[r+=n]}while(o&&o.row==t);return a.length&&a}}}(n,a,t);if(u){var h=u[0];o.column=(h.pos&&"number"!=typeof h.column?h.pos.sc:h.column)||0,o.row=h.row,c=e.renderer.$gutterLayer.$annotations[o.row]}else{if(l)return;c={text:["Looks good!"],className:"ace_ok"}}e.session.unfold(o.row),e.selection.moveToPosition(o);var d={row:o.row,fixedWidth:!0,coverGutter:!0,el:r.createElement("div"),type:"errorMarker"},m=d.el.appendChild(r.createElement("div")),p=d.el.appendChild(r.createElement("div"));p.className="error_widget_arrow "+c.className;var g=e.renderer.$cursorLayer.getPixelPosition(o).left;p.style.left=g+e.renderer.gutterWidth-5+"px",d.el.className="error_widget_wrapper",m.className="error_widget "+c.className,m.innerHTML=c.text.join("
            "),m.appendChild(r.createElement("div"));var f=function(e,t,n){if(0===t&&("esc"===n||"return"===n))return d.destroy(),{command:"null"}};d.destroy=function(){e.$mouseHandler.isMousePressed||(e.keyBinding.removeKeyboardHandler(f),n.widgetManager.removeLineWidget(d),e.off("changeSelection",d.destroy),e.off("changeSession",d.destroy),e.off("mouseup",d.destroy),e.off("change",d.destroy))},e.keyBinding.addKeyboardHandler(f),e.on("changeSelection",d.destroy),e.on("changeSession",d.destroy),e.on("mouseup",d.destroy),e.on("change",d.destroy),e.session.widgetManager.addLineWidget(d),d.el.onmousedown=e.focus.bind(e),e.renderer.scrollCursorIntoView(null,.5,{bottom:d.el.offsetHeight})},r.importCssString(" .error_widget_wrapper { background: inherit; color: inherit; border:none } .error_widget { border-top: solid 2px; border-bottom: solid 2px; margin: 5px 0; padding: 10px 40px; white-space: pre-wrap; } .error_widget.ace_error, .error_widget_arrow.ace_error{ border-color: #ff5a5a } .error_widget.ace_warning, .error_widget_arrow.ace_warning{ border-color: #F1D817 } .error_widget.ace_info, .error_widget_arrow.ace_info{ border-color: #5a5a5a } .error_widget.ace_ok, .error_widget_arrow.ace_ok{ border-color: #5aaa5a } .error_widget_arrow { position: absolute; border: solid 5px; border-top-color: transparent!important; border-right-color: transparent!important; border-left-color: transparent!important; top: -5px; }","")})),ace.define("ace/ace",["require","exports","module","ace/lib/fixoldbrowsers","ace/lib/dom","ace/lib/event","ace/range","ace/editor","ace/edit_session","ace/undomanager","ace/virtual_renderer","ace/worker/worker_client","ace/keyboard/hash_handler","ace/placeholder","ace/multi_select","ace/mode/folding/fold_mode","ace/theme/textmate","ace/ext/error_marker","ace/config"],(function(e,t,i){"use strict";e("./lib/fixoldbrowsers");var r=e("./lib/dom"),s=e("./lib/event"),o=e("./range").Range,a=e("./editor").Editor,l=e("./edit_session").EditSession,c=e("./undomanager").UndoManager,u=e("./virtual_renderer").VirtualRenderer;e("./worker/worker_client"),e("./keyboard/hash_handler"),e("./placeholder"),e("./multi_select"),e("./mode/folding/fold_mode"),e("./theme/textmate"),e("./ext/error_marker"),t.config=e("./config"),t.require=e,t.define=n.amdD,t.edit=function(e,n){if("string"==typeof e){var i=e;if(!(e=document.getElementById(i)))throw new Error("ace.edit can't find div #"+i)}if(e&&e.env&&e.env.editor instanceof a)return e.env.editor;var o="";if(e&&/input|textarea/i.test(e.tagName)){var l=e;o=l.value,e=r.createElement("pre"),l.parentNode.replaceChild(e,l)}else e&&(o=e.textContent,e.innerHTML="");var c=t.createEditSession(o),h=new a(new u(e),c,n),d={document:c,editor:h,onResize:h.resize.bind(h,null)};return l&&(d.textarea=l),s.addListener(window,"resize",d.onResize),h.on("destroy",(function(){s.removeListener(window,"resize",d.onResize),d.editor.container.env=null})),h.container.env=h.env=d,h},t.createEditSession=function(e,t){var n=new l(e,t);return n.setUndoManager(new c),n},t.Range=o,t.Editor=a,t.EditSession=l,t.UndoManager=c,t.VirtualRenderer=u,t.version=t.config.version})),ace.require(["ace/ace"],(function(t){for(var n in t&&(t.config.init(!0),t.define=ace.define),window.ace||(window.ace=t),t)t.hasOwnProperty(n)&&(window.ace[n]=t[n]);window.ace.default=window.ace,e&&(e.exports=window.ace)})),e.exports={ace}},655:(e,t,n)=>{"use strict";var i=n(379),r=n.n(i),s=n(795),o=n.n(s),a=n(569),l=n.n(a),c=n(565),u=n.n(c),h=n(216),d=n.n(h),m=n(589),p=n.n(m),g=n(827),f={};f.styleTagTransform=p(),f.setAttributes=u(),f.insert=l().bind(null,"html"),f.domAPI=o(),f.insertStyleElement=d(),r()(g.Z,f),g.Z&&g.Z.locals&&g.Z.locals},379:e=>{"use strict";var t=[];function n(e){for(var n=-1,i=0;i{"use strict";var t={};e.exports=function(e,n){var i=function(e){if(void 0===t[e]){var n=document.querySelector(e);if(window.HTMLIFrameElement&&n instanceof window.HTMLIFrameElement)try{n=n.contentDocument.head}catch(e){n=null}t[e]=n}return t[e]}(e);if(!i)throw new Error("Couldn't find a style target. This probably means that the value for the 'insert' parameter is invalid.");i.appendChild(n)}},216:e=>{"use strict";e.exports=function(e){var t=document.createElement("style");return e.setAttributes(t,e.attributes),e.insert(t,e.options),t}},565:(e,t,n)=>{"use strict";e.exports=function(e){var t=n.nc;t&&e.setAttribute("nonce",t)}},795:e=>{"use strict";e.exports=function(e){var t=e.insertStyleElement(e);return{update:function(n){!function(e,t,n){var i="";n.supports&&(i+="@supports (".concat(n.supports,") {")),n.media&&(i+="@media ".concat(n.media," {"));var r=void 0!==n.layer;r&&(i+="@layer".concat(n.layer.length>0?" ".concat(n.layer):""," {")),i+=n.css,r&&(i+="}"),n.media&&(i+="}"),n.supports&&(i+="}");var s=n.sourceMap;s&&"undefined"!=typeof btoa&&(i+="\n/*# sourceMappingURL=data:application/json;base64,".concat(btoa(unescape(encodeURIComponent(JSON.stringify(s))))," */")),t.styleTagTransform(i,e,t.options)}(t,e,n)},remove:function(){!function(e){if(null===e.parentNode)return!1;e.parentNode.removeChild(e)}(t)}}}},589:e=>{"use strict";e.exports=function(e,t){if(t.styleSheet)t.styleSheet.cssText=e;else{for(;t.firstChild;)t.removeChild(t.firstChild);t.appendChild(document.createTextNode(e))}}},986:(e,t,n)=>{"use strict";n.r(t),n.d(t,{EmbeddedFrontend:()=>qt,Spector:()=>Zt});class i{static isBuildableProgram(e){return!!e&&!!e[this.rebuildProgramFunctionName]}static rebuildProgram(e,t,n,i,r){this.isBuildableProgram(e)&&e[this.rebuildProgramFunctionName](t,n,i,r)}}var r;i.rebuildProgramFunctionName="__SPECTOR_rebuildProgram",function(e){e[e.noLog=0]="noLog",e[e.error=1]="error",e[e.warning=2]="warning",e[e.info=3]="info"}(r||(r={}));class s{static error(e,...t){this.level>0&&console.error(e,t)}static warn(e,...t){this.level>1&&console.warn(e,t)}static info(e,...t){this.level>2&&console.log(e,t)}}s.level=r.warning;class o{constructor(){this.callbacks=[],this.counter=-1}add(e,t){return this.counter++,t&&(e=e.bind(t)),this.callbacks[this.counter]=e,this.counter}remove(e){delete this.callbacks[e]}clear(){this.callbacks={}}trigger(e){for(const t in this.callbacks)this.callbacks.hasOwnProperty(t)&&this.callbacks[t](e)}}class a{constructor(){if(window.performance&&window.performance.now)this.nowFunction=this.dateBasedPerformanceNow.bind(this);else{const e=new Date;this.nowFunction=e.getTime.bind(e)}}dateBasedPerformanceNow(){return performance.timing.navigationStart+performance.now()}static get now(){return a.instance.nowFunction()}}a.instance=new a;class l{constructor(e){this.options=e}appendAnalysis(e){e.analyses=e.analyses||[];const t=this.getAnalysis(e);e.analyses.push(t)}getAnalysis(e){const t={analyserName:this.analyserName};return this.appendToAnalysis(e,t),t}}class c extends l{get analyserName(){return c.analyserName}appendToAnalysis(e,t){if(!e.commands)return;const n={};for(const t of e.commands)n[t.name]=n[t.name]||0,n[t.name]++;const i=Object.keys(n).map((e=>[e,n[e]]));i.sort(((e,t)=>{const n=t[1]-e[1];return 0===n?e[0].localeCompare(t[0]):n}));for(const e of i)t[e[0]]=e[1]}}c.analyserName="Commands";const u=["drawArrays","drawElements","drawArraysInstanced","drawArraysInstancedANGLE","drawElementsInstanced","drawElementsInstancedANGLE","drawRangeElements","multiDrawArraysWEBGL","multiDrawElementsWEBGL","multiDrawArraysInstancedWEBGL","multiDrawElementsInstancedWEBGL","multiDrawArraysInstancedBaseInstanceWEBGL","multiDrawElementsInstancedBaseVertexBaseInstanceWEBGL","drawArraysInstancedBaseInstanceWEBGL","drawElementsInstancedBaseVertexBaseInstanceWEBGL"];class h extends l{get analyserName(){return h.analyserName}appendToAnalysis(e,t){if(e.commands){t.total=e.commands.length,t.draw=0,t.clear=0;for(const n of e.commands)"clear"===n.name?t.clear++:u.indexOf(n.name)>-1&&t.draw++}}}h.analyserName="CommandsSummary";class d{static isWebGlConstant(e){return null!==p[e]&&void 0!==p[e]}static stringifyWebGlConstant(e,t){if(null==e)return"";if(0===e){return this.zeroMeaningByCommand[t]||"0"}if(1===e){return this.oneMeaningByCommand[t]||"1"}const n=p[e];return n?n.name:e+""}}d.DEPTH_BUFFER_BIT={name:"DEPTH_BUFFER_BIT",value:256,description:"Passed to clear to clear the current depth buffer."},d.STENCIL_BUFFER_BIT={name:"STENCIL_BUFFER_BIT",value:1024,description:"Passed to clear to clear the current stencil buffer."},d.COLOR_BUFFER_BIT={name:"COLOR_BUFFER_BIT",value:16384,description:"Passed to clear to clear the current color buffer."},d.POINTS={name:"POINTS",value:0,description:"Passed to drawElements or drawArrays to draw single points."},d.LINES={name:"LINES",value:1,description:"Passed to drawElements or drawArrays to draw lines. Each vertex connects to the one after it."},d.LINE_LOOP={name:"LINE_LOOP",value:2,description:"Passed to drawElements or drawArrays to draw lines. Each set of two vertices is treated as a separate line segment."},d.LINE_STRIP={name:"LINE_STRIP",value:3,description:"Passed to drawElements or drawArrays to draw a connected group of line segments from the first vertex to the last."},d.TRIANGLES={name:"TRIANGLES",value:4,description:"Passed to drawElements or drawArrays to draw triangles. Each set of three vertices creates a separate triangle."},d.TRIANGLE_STRIP={name:"TRIANGLE_STRIP",value:5,description:"Passed to drawElements or drawArrays to draw a connected group of triangles."},d.TRIANGLE_FAN={name:"TRIANGLE_FAN",value:6,description:"Passed to drawElements or drawArrays to draw a connected group of triangles. Each vertex connects to the previous and the first vertex in the fan."},d.ZERO={name:"ZERO",value:0,description:"Passed to blendFunc or blendFuncSeparate to turn off a component."},d.ONE={name:"ONE",value:1,description:"Passed to blendFunc or blendFuncSeparate to turn on a component."},d.SRC_COLOR={name:"SRC_COLOR",value:768,description:"Passed to blendFunc or blendFuncSeparate to multiply a component by the source elements color."},d.ONE_MINUS_SRC_COLOR={name:"ONE_MINUS_SRC_COLOR",value:769,description:"Passed to blendFunc or blendFuncSeparate to multiply a component by one minus the source elements color."},d.SRC_ALPHA={name:"SRC_ALPHA",value:770,description:"Passed to blendFunc or blendFuncSeparate to multiply a component by the source's alpha."},d.ONE_MINUS_SRC_ALPHA={name:"ONE_MINUS_SRC_ALPHA",value:771,description:"Passed to blendFunc or blendFuncSeparate to multiply a component by one minus the source's alpha."},d.DST_ALPHA={name:"DST_ALPHA",value:772,description:"Passed to blendFunc or blendFuncSeparate to multiply a component by the destination's alpha."},d.ONE_MINUS_DST_ALPHA={name:"ONE_MINUS_DST_ALPHA",value:773,description:"Passed to blendFunc or blendFuncSeparate to multiply a component by one minus the destination's alpha."},d.DST_COLOR={name:"DST_COLOR",value:774,description:"Passed to blendFunc or blendFuncSeparate to multiply a component by the destination's color."},d.ONE_MINUS_DST_COLOR={name:"ONE_MINUS_DST_COLOR",value:775,description:"Passed to blendFunc or blendFuncSeparate to multiply a component by one minus the destination's color."},d.SRC_ALPHA_SATURATE={name:"SRC_ALPHA_SATURATE",value:776,description:"Passed to blendFunc or blendFuncSeparate to multiply a component by the minimum of source's alpha or one minus the destination's alpha."},d.CONSTANT_COLOR={name:"CONSTANT_COLOR",value:32769,description:"Passed to blendFunc or blendFuncSeparate to specify a constant color blend function."},d.ONE_MINUS_CONSTANT_COLOR={name:"ONE_MINUS_CONSTANT_COLOR",value:32770,description:"Passed to blendFunc or blendFuncSeparate to specify one minus a constant color blend function."},d.CONSTANT_ALPHA={name:"CONSTANT_ALPHA",value:32771,description:"Passed to blendFunc or blendFuncSeparate to specify a constant alpha blend function."},d.ONE_MINUS_CONSTANT_ALPHA={name:"ONE_MINUS_CONSTANT_ALPHA",value:32772,description:"Passed to blendFunc or blendFuncSeparate to specify one minus a constant alpha blend function."},d.FUNC_ADD={name:"FUNC_ADD",value:32774,description:"Passed to blendEquation or blendEquationSeparate to set an addition blend function."},d.FUNC_SUBSTRACT={name:"FUNC_SUBSTRACT",value:32778,description:"Passed to blendEquation or blendEquationSeparate to specify a subtraction blend function (source - destination)."},d.FUNC_REVERSE_SUBTRACT={name:"FUNC_REVERSE_SUBTRACT",value:32779,description:"Passed to blendEquation or blendEquationSeparate to specify a reverse subtraction blend function (destination - source)."},d.BLEND_EQUATION={name:"BLEND_EQUATION",value:32777,description:"Passed to getParameter to get the current RGB blend function."},d.BLEND_EQUATION_RGB={name:"BLEND_EQUATION_RGB",value:32777,description:"Passed to getParameter to get the current RGB blend function. Same as BLEND_EQUATION"},d.BLEND_EQUATION_ALPHA={name:"BLEND_EQUATION_ALPHA",value:34877,description:"Passed to getParameter to get the current alpha blend function. Same as BLEND_EQUATION"},d.BLEND_DST_RGB={name:"BLEND_DST_RGB",value:32968,description:"Passed to getParameter to get the current destination RGB blend function."},d.BLEND_SRC_RGB={name:"BLEND_SRC_RGB",value:32969,description:"Passed to getParameter to get the current destination RGB blend function."},d.BLEND_DST_ALPHA={name:"BLEND_DST_ALPHA",value:32970,description:"Passed to getParameter to get the current destination alpha blend function."},d.BLEND_SRC_ALPHA={name:"BLEND_SRC_ALPHA",value:32971,description:"Passed to getParameter to get the current source alpha blend function."},d.BLEND_COLOR={name:"BLEND_COLOR",value:32773,description:"Passed to getParameter to return a the current blend color."},d.ARRAY_BUFFER_BINDING={name:"ARRAY_BUFFER_BINDING",value:34964,description:"Passed to getParameter to get the array buffer binding."},d.ELEMENT_ARRAY_BUFFER_BINDING={name:"ELEMENT_ARRAY_BUFFER_BINDING",value:34965,description:"Passed to getParameter to get the current element array buffer."},d.LINE_WIDTH={name:"LINE_WIDTH",value:2849,description:"Passed to getParameter to get the current lineWidth (set by the lineWidth method)."},d.ALIASED_POINT_SIZE_RANGE={name:"ALIASED_POINT_SIZE_RANGE",value:33901,description:"Passed to getParameter to get the current size of a point drawn with gl.POINTS"},d.ALIASED_LINE_WIDTH_RANGE={name:"ALIASED_LINE_WIDTH_RANGE",value:33902,description:"Passed to getParameter to get the range of available widths for a line. Returns a length-2 array with the lo value at 0, and hight at 1."},d.CULL_FACE_MODE={name:"CULL_FACE_MODE",value:2885,description:"Passed to getParameter to get the current value of cullFace. Should return FRONT, BACK, or FRONT_AND_BACK"},d.FRONT_FACE={name:"FRONT_FACE",value:2886,description:"Passed to getParameter to determine the current value of frontFace. Should return CW or CCW."},d.DEPTH_RANGE={name:"DEPTH_RANGE",value:2928,description:"Passed to getParameter to return a length-2 array of floats giving the current depth range."},d.DEPTH_WRITEMASK={name:"DEPTH_WRITEMASK",value:2930,description:"Passed to getParameter to determine if the depth write mask is enabled."},d.DEPTH_CLEAR_VALUE={name:"DEPTH_CLEAR_VALUE",value:2931,description:"Passed to getParameter to determine the current depth clear value."},d.DEPTH_FUNC={name:"DEPTH_FUNC",value:2932,description:"Passed to getParameter to get the current depth function. Returns NEVER, ALWAYS, LESS, EQUAL, LEQUAL, GREATER, GEQUAL, or NOTEQUAL."},d.STENCIL_CLEAR_VALUE={name:"STENCIL_CLEAR_VALUE",value:2961,description:"Passed to getParameter to get the value the stencil will be cleared to."},d.STENCIL_FUNC={name:"STENCIL_FUNC",value:2962,description:"Passed to getParameter to get the current stencil function. Returns NEVER, ALWAYS, LESS, EQUAL, LEQUAL, GREATER, GEQUAL, or NOTEQUAL."},d.STENCIL_FAIL={name:"STENCIL_FAIL",value:2964,description:"Passed to getParameter to get the current stencil fail function. Should return KEEP, REPLACE, INCR, DECR, INVERT, INCR_WRAP, or DECR_WRAP."},d.STENCIL_PASS_DEPTH_FAIL={name:"STENCIL_PASS_DEPTH_FAIL",value:2965,description:"Passed to getParameter to get the current stencil fail function should the depth buffer test fail. Should return KEEP, REPLACE, INCR, DECR, INVERT, INCR_WRAP, or DECR_WRAP."},d.STENCIL_PASS_DEPTH_PASS={name:"STENCIL_PASS_DEPTH_PASS",value:2966,description:"Passed to getParameter to get the current stencil fail function should the depth buffer test pass. Should return KEEP, REPLACE, INCR, DECR, INVERT, INCR_WRAP, or DECR_WRAP."},d.STENCIL_REF={name:"STENCIL_REF",value:2967,description:"Passed to getParameter to get the reference value used for stencil tests."},d.STENCIL_VALUE_MASK={name:"STENCIL_VALUE_MASK",value:2963,description:" "},d.STENCIL_WRITEMASK={name:"STENCIL_WRITEMASK",value:2968,description:" "},d.STENCIL_BACK_FUNC={name:"STENCIL_BACK_FUNC",value:34816,description:" "},d.STENCIL_BACK_FAIL={name:"STENCIL_BACK_FAIL",value:34817,description:" "},d.STENCIL_BACK_PASS_DEPTH_FAIL={name:"STENCIL_BACK_PASS_DEPTH_FAIL",value:34818,description:" "},d.STENCIL_BACK_PASS_DEPTH_PASS={name:"STENCIL_BACK_PASS_DEPTH_PASS",value:34819,description:" "},d.STENCIL_BACK_REF={name:"STENCIL_BACK_REF",value:36003,description:" "},d.STENCIL_BACK_VALUE_MASK={name:"STENCIL_BACK_VALUE_MASK",value:36004,description:" "},d.STENCIL_BACK_WRITEMASK={name:"STENCIL_BACK_WRITEMASK",value:36005,description:" "},d.VIEWPORT={name:"VIEWPORT",value:2978,description:"Returns an Int32Array with four elements for the current viewport dimensions."},d.SCISSOR_BOX={name:"SCISSOR_BOX",value:3088,description:"Returns an Int32Array with four elements for the current scissor box dimensions."},d.COLOR_CLEAR_VALUE={name:"COLOR_CLEAR_VALUE",value:3106,description:" "},d.COLOR_WRITEMASK={name:"COLOR_WRITEMASK",value:3107,description:" "},d.UNPACK_ALIGNMENT={name:"UNPACK_ALIGNMENT",value:3317,description:" "},d.PACK_ALIGNMENT={name:"PACK_ALIGNMENT",value:3333,description:" "},d.MAX_TEXTURE_SIZE={name:"MAX_TEXTURE_SIZE",value:3379,description:" "},d.MAX_VIEWPORT_DIMS={name:"MAX_VIEWPORT_DIMS",value:3386,description:" "},d.SUBPIXEL_BITS={name:"SUBPIXEL_BITS",value:3408,description:" "},d.RED_BITS={name:"RED_BITS",value:3410,description:" "},d.GREEN_BITS={name:"GREEN_BITS",value:3411,description:" "},d.BLUE_BITS={name:"BLUE_BITS",value:3412,description:" "},d.ALPHA_BITS={name:"ALPHA_BITS",value:3413,description:" "},d.DEPTH_BITS={name:"DEPTH_BITS",value:3414,description:" "},d.STENCIL_BITS={name:"STENCIL_BITS",value:3415,description:" "},d.POLYGON_OFFSET_UNITS={name:"POLYGON_OFFSET_UNITS",value:10752,description:" "},d.POLYGON_OFFSET_FACTOR={name:"POLYGON_OFFSET_FACTOR",value:32824,description:" "},d.TEXTURE_BINDING_2D={name:"TEXTURE_BINDING_2D",value:32873,description:" "},d.SAMPLE_BUFFERS={name:"SAMPLE_BUFFERS",value:32936,description:" "},d.SAMPLES={name:"SAMPLES",value:32937,description:" "},d.SAMPLE_COVERAGE_VALUE={name:"SAMPLE_COVERAGE_VALUE",value:32938,description:" "},d.SAMPLE_COVERAGE_INVERT={name:"SAMPLE_COVERAGE_INVERT",value:32939,description:" "},d.COMPRESSED_TEXTURE_FORMATS={name:"COMPRESSED_TEXTURE_FORMATS",value:34467,description:" "},d.VENDOR={name:"VENDOR",value:7936,description:" "},d.RENDERER={name:"RENDERER",value:7937,description:" "},d.VERSION={name:"VERSION",value:7938,description:" "},d.IMPLEMENTATION_COLOR_READ_TYPE={name:"IMPLEMENTATION_COLOR_READ_TYPE",value:35738,description:" "},d.IMPLEMENTATION_COLOR_READ_FORMAT={name:"IMPLEMENTATION_COLOR_READ_FORMAT",value:35739,description:" "},d.BROWSER_DEFAULT_WEBGL={name:"BROWSER_DEFAULT_WEBGL",value:37444,description:" "},d.STATIC_DRAW={name:"STATIC_DRAW",value:35044,description:"Passed to bufferData as a hint about whether the contents of the buffer are likely to be used often and not change often."},d.STREAM_DRAW={name:"STREAM_DRAW",value:35040,description:"Passed to bufferData as a hint about whether the contents of the buffer are likely to not be used often."},d.DYNAMIC_DRAW={name:"DYNAMIC_DRAW",value:35048,description:"Passed to bufferData as a hint about whether the contents of the buffer are likely to be used often and change often."},d.ARRAY_BUFFER={name:"ARRAY_BUFFER",value:34962,description:"Passed to bindBuffer or bufferData to specify the type of buffer being used."},d.ELEMENT_ARRAY_BUFFER={name:"ELEMENT_ARRAY_BUFFER",value:34963,description:"Passed to bindBuffer or bufferData to specify the type of buffer being used."},d.BUFFER_SIZE={name:"BUFFER_SIZE",value:34660,description:"Passed to getBufferParameter to get a buffer's size."},d.BUFFER_USAGE={name:"BUFFER_USAGE",value:34661,description:"Passed to getBufferParameter to get the hint for the buffer passed in when it was created."},d.CURRENT_VERTEX_ATTRIB={name:"CURRENT_VERTEX_ATTRIB",value:34342,description:"Passed to getVertexAttrib to read back the current vertex attribute."},d.VERTEX_ATTRIB_ARRAY_ENABLED={name:"VERTEX_ATTRIB_ARRAY_ENABLED",value:34338,description:" "},d.VERTEX_ATTRIB_ARRAY_SIZE={name:"VERTEX_ATTRIB_ARRAY_SIZE",value:34339,description:" "},d.VERTEX_ATTRIB_ARRAY_STRIDE={name:"VERTEX_ATTRIB_ARRAY_STRIDE",value:34340,description:" "},d.VERTEX_ATTRIB_ARRAY_TYPE={name:"VERTEX_ATTRIB_ARRAY_TYPE",value:34341,description:" "},d.VERTEX_ATTRIB_ARRAY_NORMALIZED={name:"VERTEX_ATTRIB_ARRAY_NORMALIZED",value:34922,description:" "},d.VERTEX_ATTRIB_ARRAY_POINTER={name:"VERTEX_ATTRIB_ARRAY_POINTER",value:34373,description:" "},d.VERTEX_ATTRIB_ARRAY_BUFFER_BINDING={name:"VERTEX_ATTRIB_ARRAY_BUFFER_BINDING",value:34975,description:" "},d.CULL_FACE={name:"CULL_FACE",value:2884,description:"Passed to enable/disable to turn on/off culling. Can also be used with getParameter to find the current culling method."},d.FRONT={name:"FRONT",value:1028,description:"Passed to cullFace to specify that only front faces should be drawn."},d.BACK={name:"BACK",value:1029,description:"Passed to cullFace to specify that only back faces should be drawn."},d.FRONT_AND_BACK={name:"FRONT_AND_BACK",value:1032,description:"Passed to cullFace to specify that front and back faces should be drawn."},d.BLEND={name:"BLEND",value:3042,description:"Passed to enable/disable to turn on/off blending. Can also be used with getParameter to find the current blending method."},d.DEPTH_TEST={name:"DEPTH_TEST",value:2929,description:"Passed to enable/disable to turn on/off the depth test. Can also be used with getParameter to query the depth test."},d.DITHER={name:"DITHER",value:3024,description:"Passed to enable/disable to turn on/off dithering. Can also be used with getParameter to find the current dithering method."},d.POLYGON_OFFSET_FILL={name:"POLYGON_OFFSET_FILL",value:32823,description:"Passed to enable/disable to turn on/off the polygon offset. Useful for rendering hidden-line images, decals, and or solids with highlighted edges. Can also be used with getParameter to query the scissor test."},d.SAMPLE_ALPHA_TO_COVERAGE={name:"SAMPLE_ALPHA_TO_COVERAGE",value:32926,description:"Passed to enable/disable to turn on/off the alpha to coverage. Used in multi-sampling alpha channels."},d.SAMPLE_COVERAGE={name:"SAMPLE_COVERAGE",value:32928,description:"Passed to enable/disable to turn on/off the sample coverage. Used in multi-sampling."},d.SCISSOR_TEST={name:"SCISSOR_TEST",value:3089,description:"Passed to enable/disable to turn on/off the scissor test. Can also be used with getParameter to query the scissor test."},d.STENCIL_TEST={name:"STENCIL_TEST",value:2960,description:"Passed to enable/disable to turn on/off the stencil test. Can also be used with getParameter to query the stencil test."},d.NO_ERROR={name:"NO_ERROR",value:0,description:"Returned from getError."},d.INVALID_ENUM={name:"INVALID_ENUM",value:1280,description:"Returned from getError."},d.INVALID_VALUE={name:"INVALID_VALUE",value:1281,description:"Returned from getError."},d.INVALID_OPERATION={name:"INVALID_OPERATION",value:1282,description:"Returned from getError."},d.OUT_OF_MEMORY={name:"OUT_OF_MEMORY",value:1285,description:"Returned from getError."},d.CONTEXT_LOST_WEBGL={name:"CONTEXT_LOST_WEBGL",value:37442,description:"Returned from getError."},d.CW={name:"CW",value:2304,description:"Passed to frontFace to specify the front face of a polygon is drawn in the clockwise direction"},d.CCW={name:"CCW",value:2305,description:"Passed to frontFace to specify the front face of a polygon is drawn in the counter clockwise direction"},d.DONT_CARE={name:"DONT_CARE",value:4352,description:"There is no preference for this behavior."},d.FASTEST={name:"FASTEST",value:4353,description:"The most efficient behavior should be used."},d.NICEST={name:"NICEST",value:4354,description:"The most correct or the highest quality option should be used."},d.GENERATE_MIPMAP_HINT={name:"GENERATE_MIPMAP_HINT",value:33170,description:"Hint for the quality of filtering when generating mipmap images with WebGLRenderingContext.generateMipmap()."},d.BYTE={name:"BYTE",value:5120,description:" "},d.UNSIGNED_BYTE={name:"UNSIGNED_BYTE",value:5121,description:" "},d.SHORT={name:"SHORT",value:5122,description:" "},d.UNSIGNED_SHORT={name:"UNSIGNED_SHORT",value:5123,description:" "},d.INT={name:"INT",value:5124,description:" "},d.UNSIGNED_INT={name:"UNSIGNED_INT",value:5125,description:" "},d.FLOAT={name:"FLOAT",value:5126,description:" "},d.DEPTH_COMPONENT={name:"DEPTH_COMPONENT",value:6402,description:" "},d.ALPHA={name:"ALPHA",value:6406,description:" "},d.RGB={name:"RGB",value:6407,description:" "},d.RGBA={name:"RGBA",value:6408,description:" "},d.LUMINANCE={name:"LUMINANCE",value:6409,description:" "},d.LUMINANCE_ALPHA={name:"LUMINANCE_ALPHA",value:6410,description:" "},d.UNSIGNED_SHORT_4_4_4_4={name:"UNSIGNED_SHORT_4_4_4_4",value:32819,description:" "},d.UNSIGNED_SHORT_5_5_5_1={name:"UNSIGNED_SHORT_5_5_5_1",value:32820,description:" "},d.UNSIGNED_SHORT_5_6_5={name:"UNSIGNED_SHORT_5_6_5",value:33635,description:" "},d.FRAGMENT_SHADER={name:"FRAGMENT_SHADER",value:35632,description:"Passed to createShader to define a fragment shader."},d.VERTEX_SHADER={name:"VERTEX_SHADER",value:35633,description:"Passed to createShader to define a vertex shader"},d.COMPILE_STATUS={name:"COMPILE_STATUS",value:35713,description:"Passed to getShaderParamter to get the status of the compilation. Returns false if the shader was not compiled. You can then query getShaderInfoLog to find the exact error"},d.DELETE_STATUS={name:"DELETE_STATUS",value:35712,description:"Passed to getShaderParamter to determine if a shader was deleted via deleteShader. Returns true if it was, false otherwise."},d.LINK_STATUS={name:"LINK_STATUS",value:35714,description:"Passed to getProgramParameter after calling linkProgram to determine if a program was linked correctly. Returns false if there were errors. Use getProgramInfoLog to find the exact error."},d.VALIDATE_STATUS={name:"VALIDATE_STATUS",value:35715,description:"Passed to getProgramParameter after calling validateProgram to determine if it is valid. Returns false if errors were found."},d.ATTACHED_SHADERS={name:"ATTACHED_SHADERS",value:35717,description:"Passed to getProgramParameter after calling attachShader to determine if the shader was attached correctly. Returns false if errors occurred."},d.ACTIVE_ATTRIBUTES={name:"ACTIVE_ATTRIBUTES",value:35721,description:"Passed to getProgramParameter to get the number of attributes active in a program."},d.ACTIVE_UNIFORMS={name:"ACTIVE_UNIFORMS",value:35718,description:"Passed to getProgramParamter to get the number of uniforms active in a program."},d.MAX_VERTEX_ATTRIBS={name:"MAX_VERTEX_ATTRIBS",value:34921,description:" "},d.MAX_VERTEX_UNIFORM_VECTORS={name:"MAX_VERTEX_UNIFORM_VECTORS",value:36347,description:" "},d.MAX_VARYING_VECTORS={name:"MAX_VARYING_VECTORS",value:36348,description:" "},d.MAX_COMBINED_TEXTURE_IMAGE_UNITS={name:"MAX_COMBINED_TEXTURE_IMAGE_UNITS",value:35661,description:" "},d.MAX_VERTEX_TEXTURE_IMAGE_UNITS={name:"MAX_VERTEX_TEXTURE_IMAGE_UNITS",value:35660,description:" "},d.MAX_TEXTURE_IMAGE_UNITS={name:"MAX_TEXTURE_IMAGE_UNITS",value:34930,description:"Implementation dependent number of maximum texture units. At least 8."},d.MAX_FRAGMENT_UNIFORM_VECTORS={name:"MAX_FRAGMENT_UNIFORM_VECTORS",value:36349,description:" "},d.SHADER_TYPE={name:"SHADER_TYPE",value:35663,description:" "},d.SHADING_LANGUAGE_VERSION={name:"SHADING_LANGUAGE_VERSION",value:35724,description:" "},d.CURRENT_PROGRAM={name:"CURRENT_PROGRAM",value:35725,description:" "},d.NEVER={name:"NEVER",value:512,description:"Passed to depthFunction or stencilFunction to specify depth or stencil tests will never pass. i.e. Nothing will be drawn."},d.ALWAYS={name:"ALWAYS",value:519,description:"Passed to depthFunction or stencilFunction to specify depth or stencil tests will always pass. i.e. Pixels will be drawn in the order they are drawn."},d.LESS={name:"LESS",value:513,description:"Passed to depthFunction or stencilFunction to specify depth or stencil tests will pass if the new depth value is less than the stored value."},d.EQUAL={name:"EQUAL",value:514,description:"Passed to depthFunction or stencilFunction to specify depth or stencil tests will pass if the new depth value is equals to the stored value."},d.LEQUAL={name:"LEQUAL",value:515,description:"Passed to depthFunction or stencilFunction to specify depth or stencil tests will pass if the new depth value is less than or equal to the stored value."},d.GREATER={name:"GREATER",value:516,description:"Passed to depthFunction or stencilFunction to specify depth or stencil tests will pass if the new depth value is greater than the stored value."},d.GEQUAL={name:"GEQUAL",value:518,description:"Passed to depthFunction or stencilFunction to specify depth or stencil tests will pass if the new depth value is greater than or equal to the stored value."},d.NOTEQUAL={name:"NOTEQUAL",value:517,description:"Passed to depthFunction or stencilFunction to specify depth or stencil tests will pass if the new depth value is not equal to the stored value."},d.KEEP={name:"KEEP",value:7680,description:" "},d.REPLACE={name:"REPLACE",value:7681,description:" "},d.INCR={name:"INCR",value:7682,description:" "},d.DECR={name:"DECR",value:7683,description:" "},d.INVERT={name:"INVERT",value:5386,description:" "},d.INCR_WRAP={name:"INCR_WRAP",value:34055,description:" "},d.DECR_WRAP={name:"DECR_WRAP",value:34056,description:" "},d.NEAREST={name:"NEAREST",value:9728,description:" "},d.LINEAR={name:"LINEAR",value:9729,description:" "},d.NEAREST_MIPMAP_NEAREST={name:"NEAREST_MIPMAP_NEAREST",value:9984,description:" "},d.LINEAR_MIPMAP_NEAREST={name:"LINEAR_MIPMAP_NEAREST",value:9985,description:" "},d.NEAREST_MIPMAP_LINEAR={name:"NEAREST_MIPMAP_LINEAR",value:9986,description:" "},d.LINEAR_MIPMAP_LINEAR={name:"LINEAR_MIPMAP_LINEAR",value:9987,description:" "},d.TEXTURE_MAG_FILTER={name:"TEXTURE_MAG_FILTER",value:10240,description:" "},d.TEXTURE_MIN_FILTER={name:"TEXTURE_MIN_FILTER",value:10241,description:" "},d.TEXTURE_WRAP_S={name:"TEXTURE_WRAP_S",value:10242,description:" "},d.TEXTURE_WRAP_T={name:"TEXTURE_WRAP_T",value:10243,description:" "},d.TEXTURE_2D={name:"TEXTURE_2D",value:3553,description:" "},d.TEXTURE={name:"TEXTURE",value:5890,description:" "},d.TEXTURE_CUBE_MAP={name:"TEXTURE_CUBE_MAP",value:34067,description:" "},d.TEXTURE_BINDING_CUBE_MAP={name:"TEXTURE_BINDING_CUBE_MAP",value:34068,description:" "},d.TEXTURE_CUBE_MAP_POSITIVE_X={name:"TEXTURE_CUBE_MAP_POSITIVE_X",value:34069,description:" "},d.TEXTURE_CUBE_MAP_NEGATIVE_X={name:"TEXTURE_CUBE_MAP_NEGATIVE_X",value:34070,description:" "},d.TEXTURE_CUBE_MAP_POSITIVE_Y={name:"TEXTURE_CUBE_MAP_POSITIVE_Y",value:34071,description:" "},d.TEXTURE_CUBE_MAP_NEGATIVE_Y={name:"TEXTURE_CUBE_MAP_NEGATIVE_Y",value:34072,description:" "},d.TEXTURE_CUBE_MAP_POSITIVE_Z={name:"TEXTURE_CUBE_MAP_POSITIVE_Z",value:34073,description:" "},d.TEXTURE_CUBE_MAP_NEGATIVE_Z={name:"TEXTURE_CUBE_MAP_NEGATIVE_Z",value:34074,description:" "},d.MAX_CUBE_MAP_TEXTURE_SIZE={name:"MAX_CUBE_MAP_TEXTURE_SIZE",value:34076,description:" "},d.TEXTURE0={name:"TEXTURE0",value:33984,description:"A texture unit."},d.TEXTURE1={name:"TEXTURE1",value:33985,description:"A texture unit."},d.TEXTURE2={name:"TEXTURE2",value:33986,description:"A texture unit."},d.TEXTURE3={name:"TEXTURE3",value:33987,description:"A texture unit."},d.TEXTURE4={name:"TEXTURE4",value:33988,description:"A texture unit."},d.TEXTURE5={name:"TEXTURE5",value:33989,description:"A texture unit."},d.TEXTURE6={name:"TEXTURE6",value:33990,description:"A texture unit."},d.TEXTURE7={name:"TEXTURE7",value:33991,description:"A texture unit."},d.TEXTURE8={name:"TEXTURE8",value:33992,description:"A texture unit."},d.TEXTURE9={name:"TEXTURE9",value:33993,description:"A texture unit."},d.TEXTURE10={name:"TEXTURE10",value:33994,description:"A texture unit."},d.TEXTURE11={name:"TEXTURE11",value:33995,description:"A texture unit."},d.TEXTURE12={name:"TEXTURE12",value:33996,description:"A texture unit."},d.TEXTURE13={name:"TEXTURE13",value:33997,description:"A texture unit."},d.TEXTURE14={name:"TEXTURE14",value:33998,description:"A texture unit."},d.TEXTURE15={name:"TEXTURE15",value:33999,description:"A texture unit."},d.TEXTURE16={name:"TEXTURE16",value:34e3,description:"A texture unit."},d.TEXTURE17={name:"TEXTURE17",value:34001,description:"A texture unit."},d.TEXTURE18={name:"TEXTURE18",value:34002,description:"A texture unit."},d.TEXTURE19={name:"TEXTURE19",value:34003,description:"A texture unit."},d.TEXTURE20={name:"TEXTURE20",value:34004,description:"A texture unit."},d.TEXTURE21={name:"TEXTURE21",value:34005,description:"A texture unit."},d.TEXTURE22={name:"TEXTURE22",value:34006,description:"A texture unit."},d.TEXTURE23={name:"TEXTURE23",value:34007,description:"A texture unit."},d.TEXTURE24={name:"TEXTURE24",value:34008,description:"A texture unit."},d.TEXTURE25={name:"TEXTURE25",value:34009,description:"A texture unit."},d.TEXTURE26={name:"TEXTURE26",value:34010,description:"A texture unit."},d.TEXTURE27={name:"TEXTURE27",value:34011,description:"A texture unit."},d.TEXTURE28={name:"TEXTURE28",value:34012,description:"A texture unit."},d.TEXTURE29={name:"TEXTURE29",value:34013,description:"A texture unit."},d.TEXTURE30={name:"TEXTURE30",value:34014,description:"A texture unit."},d.TEXTURE31={name:"TEXTURE31",value:34015,description:"A texture unit."},d.ACTIVE_TEXTURE={name:"ACTIVE_TEXTURE",value:34016,description:"The current active texture unit."},d.REPEAT={name:"REPEAT",value:10497,description:" "},d.CLAMP_TO_EDGE={name:"CLAMP_TO_EDGE",value:33071,description:" "},d.MIRRORED_REPEAT={name:"MIRRORED_REPEAT",value:33648,description:" "},d.FLOAT_VEC2={name:"FLOAT_VEC2",value:35664,description:" "},d.FLOAT_VEC3={name:"FLOAT_VEC3",value:35665,description:" "},d.FLOAT_VEC4={name:"FLOAT_VEC4",value:35666,description:" "},d.INT_VEC2={name:"INT_VEC2",value:35667,description:" "},d.INT_VEC3={name:"INT_VEC3",value:35668,description:" "},d.INT_VEC4={name:"INT_VEC4",value:35669,description:" "},d.BOOL={name:"BOOL",value:35670,description:" "},d.BOOL_VEC2={name:"BOOL_VEC2",value:35671,description:" "},d.BOOL_VEC3={name:"BOOL_VEC3",value:35672,description:" "},d.BOOL_VEC4={name:"BOOL_VEC4",value:35673,description:" "},d.FLOAT_MAT2={name:"FLOAT_MAT2",value:35674,description:" "},d.FLOAT_MAT3={name:"FLOAT_MAT3",value:35675,description:" "},d.FLOAT_MAT4={name:"FLOAT_MAT4",value:35676,description:" "},d.SAMPLER_2D={name:"SAMPLER_2D",value:35678,description:" "},d.SAMPLER_CUBE={name:"SAMPLER_CUBE",value:35680,description:" "},d.LOW_FLOAT={name:"LOW_FLOAT",value:36336,description:" "},d.MEDIUM_FLOAT={name:"MEDIUM_FLOAT",value:36337,description:" "},d.HIGH_FLOAT={name:"HIGH_FLOAT",value:36338,description:" "},d.LOW_INT={name:"LOW_INT",value:36339,description:" "},d.MEDIUM_INT={name:"MEDIUM_INT",value:36340,description:" "},d.HIGH_INT={name:"HIGH_INT",value:36341,description:" "},d.FRAMEBUFFER={name:"FRAMEBUFFER",value:36160,description:" "},d.RENDERBUFFER={name:"RENDERBUFFER",value:36161,description:" "},d.RGBA4={name:"RGBA4",value:32854,description:" "},d.RGB5_A1={name:"RGB5_A1",value:32855,description:" "},d.RGB565={name:"RGB565",value:36194,description:" "},d.DEPTH_COMPONENT16={name:"DEPTH_COMPONENT16",value:33189,description:" "},d.STENCIL_INDEX={name:"STENCIL_INDEX",value:6401,description:" "},d.STENCIL_INDEX8={name:"STENCIL_INDEX8",value:36168,description:" "},d.DEPTH_STENCIL={name:"DEPTH_STENCIL",value:34041,description:" "},d.RENDERBUFFER_WIDTH={name:"RENDERBUFFER_WIDTH",value:36162,description:" "},d.RENDERBUFFER_HEIGHT={name:"RENDERBUFFER_HEIGHT",value:36163,description:" "},d.RENDERBUFFER_INTERNAL_FORMAT={name:"RENDERBUFFER_INTERNAL_FORMAT",value:36164,description:" "},d.RENDERBUFFER_RED_SIZE={name:"RENDERBUFFER_RED_SIZE",value:36176,description:" "},d.RENDERBUFFER_GREEN_SIZE={name:"RENDERBUFFER_GREEN_SIZE",value:36177,description:" "},d.RENDERBUFFER_BLUE_SIZE={name:"RENDERBUFFER_BLUE_SIZE",value:36178,description:" "},d.RENDERBUFFER_ALPHA_SIZE={name:"RENDERBUFFER_ALPHA_SIZE",value:36179,description:" "},d.RENDERBUFFER_DEPTH_SIZE={name:"RENDERBUFFER_DEPTH_SIZE",value:36180,description:" "},d.RENDERBUFFER_STENCIL_SIZE={name:"RENDERBUFFER_STENCIL_SIZE",value:36181,description:" "},d.FRAMEBUFFER_ATTACHMENT_OBJECT_TYPE={name:"FRAMEBUFFER_ATTACHMENT_OBJECT_TYPE",value:36048,description:" "},d.FRAMEBUFFER_ATTACHMENT_OBJECT_NAME={name:"FRAMEBUFFER_ATTACHMENT_OBJECT_NAME",value:36049,description:" "},d.FRAMEBUFFER_ATTACHMENT_TEXTURE_LEVEL={name:"FRAMEBUFFER_ATTACHMENT_TEXTURE_LEVEL",value:36050,description:" "},d.FRAMEBUFFER_ATTACHMENT_TEXTURE_CUBE_MAP_FACE={name:"FRAMEBUFFER_ATTACHMENT_TEXTURE_CUBE_MAP_FACE",value:36051,description:" "},d.COLOR_ATTACHMENT0={name:"COLOR_ATTACHMENT0",value:36064,description:" "},d.DEPTH_ATTACHMENT={name:"DEPTH_ATTACHMENT",value:36096,description:" "},d.STENCIL_ATTACHMENT={name:"STENCIL_ATTACHMENT",value:36128,description:" "},d.DEPTH_STENCIL_ATTACHMENT={name:"DEPTH_STENCIL_ATTACHMENT",value:33306,description:" "},d.NONE={name:"NONE",value:0,description:" "},d.FRAMEBUFFER_COMPLETE={name:"FRAMEBUFFER_COMPLETE",value:36053,description:" "},d.FRAMEBUFFER_INCOMPLETE_ATTACHMENT={name:"FRAMEBUFFER_INCOMPLETE_ATTACHMENT",value:36054,description:" "},d.FRAMEBUFFER_INCOMPLETE_MISSING_ATTACHMENT={name:"FRAMEBUFFER_INCOMPLETE_MISSING_ATTACHMENT",value:36055,description:" "},d.FRAMEBUFFER_INCOMPLETE_DIMENSIONS={name:"FRAMEBUFFER_INCOMPLETE_DIMENSIONS",value:36057,description:" "},d.FRAMEBUFFER_UNSUPPORTED={name:"FRAMEBUFFER_UNSUPPORTED",value:36061,description:" "},d.FRAMEBUFFER_BINDING={name:"FRAMEBUFFER_BINDING",value:36006,description:" "},d.RENDERBUFFER_BINDING={name:"RENDERBUFFER_BINDING",value:36007,description:" "},d.MAX_RENDERBUFFER_SIZE={name:"MAX_RENDERBUFFER_SIZE",value:34024,description:" "},d.INVALID_FRAMEBUFFER_OPERATION={name:"INVALID_FRAMEBUFFER_OPERATION",value:1286,description:" "},d.UNPACK_FLIP_Y_WEBGL={name:"UNPACK_FLIP_Y_WEBGL",value:37440,description:" "},d.UNPACK_PREMULTIPLY_ALPHA_WEBGL={name:"UNPACK_PREMULTIPLY_ALPHA_WEBGL",value:37441,description:" "},d.UNPACK_COLORSPACE_CONVERSION_WEBGL={name:"UNPACK_COLORSPACE_CONVERSION_WEBGL",value:37443,description:" "},d.READ_BUFFER={name:"READ_BUFFER",value:3074,description:" "},d.UNPACK_ROW_LENGTH={name:"UNPACK_ROW_LENGTH",value:3314,description:" "},d.UNPACK_SKIP_ROWS={name:"UNPACK_SKIP_ROWS",value:3315,description:" "},d.UNPACK_SKIP_PIXELS={name:"UNPACK_SKIP_PIXELS",value:3316,description:" "},d.PACK_ROW_LENGTH={name:"PACK_ROW_LENGTH",value:3330,description:" "},d.PACK_SKIP_ROWS={name:"PACK_SKIP_ROWS",value:3331,description:" "},d.PACK_SKIP_PIXELS={name:"PACK_SKIP_PIXELS",value:3332,description:" "},d.TEXTURE_BINDING_3D={name:"TEXTURE_BINDING_3D",value:32874,description:" "},d.UNPACK_SKIP_IMAGES={name:"UNPACK_SKIP_IMAGES",value:32877,description:" "},d.UNPACK_IMAGE_HEIGHT={name:"UNPACK_IMAGE_HEIGHT",value:32878,description:" "},d.MAX_3D_TEXTURE_SIZE={name:"MAX_3D_TEXTURE_SIZE",value:32883,description:" "},d.MAX_ELEMENTS_VERTICES={name:"MAX_ELEMENTS_VERTICES",value:33e3,description:" "},d.MAX_ELEMENTS_INDICES={name:"MAX_ELEMENTS_INDICES",value:33001,description:" "},d.MAX_TEXTURE_LOD_BIAS={name:"MAX_TEXTURE_LOD_BIAS",value:34045,description:" "},d.MAX_FRAGMENT_UNIFORM_COMPONENTS={name:"MAX_FRAGMENT_UNIFORM_COMPONENTS",value:35657,description:" "},d.MAX_VERTEX_UNIFORM_COMPONENTS={name:"MAX_VERTEX_UNIFORM_COMPONENTS",value:35658,description:" "},d.MAX_ARRAY_TEXTURE_LAYERS={name:"MAX_ARRAY_TEXTURE_LAYERS",value:35071,description:" "},d.MIN_PROGRAM_TEXEL_OFFSET={name:"MIN_PROGRAM_TEXEL_OFFSET",value:35076,description:" "},d.MAX_PROGRAM_TEXEL_OFFSET={name:"MAX_PROGRAM_TEXEL_OFFSET",value:35077,description:" "},d.MAX_VARYING_COMPONENTS={name:"MAX_VARYING_COMPONENTS",value:35659,description:" "},d.FRAGMENT_SHADER_DERIVATIVE_HINT={name:"FRAGMENT_SHADER_DERIVATIVE_HINT",value:35723,description:" "},d.RASTERIZER_DISCARD={name:"RASTERIZER_DISCARD",value:35977,description:" "},d.VERTEX_ARRAY_BINDING={name:"VERTEX_ARRAY_BINDING",value:34229,description:" "},d.MAX_VERTEX_OUTPUT_COMPONENTS={name:"MAX_VERTEX_OUTPUT_COMPONENTS",value:37154,description:" "},d.MAX_FRAGMENT_INPUT_COMPONENTS={name:"MAX_FRAGMENT_INPUT_COMPONENTS",value:37157,description:" "},d.MAX_SERVER_WAIT_TIMEOUT={name:"MAX_SERVER_WAIT_TIMEOUT",value:37137,description:" "},d.MAX_ELEMENT_INDEX={name:"MAX_ELEMENT_INDEX",value:36203,description:" "},d.RED={name:"RED",value:6403,description:" "},d.RGB8={name:"RGB8",value:32849,description:" "},d.RGBA8={name:"RGBA8",value:32856,description:" "},d.RGB10_A2={name:"RGB10_A2",value:32857,description:" "},d.TEXTURE_3D={name:"TEXTURE_3D",value:32879,description:" "},d.TEXTURE_WRAP_R={name:"TEXTURE_WRAP_R",value:32882,description:" "},d.TEXTURE_MIN_LOD={name:"TEXTURE_MIN_LOD",value:33082,description:" "},d.TEXTURE_MAX_LOD={name:"TEXTURE_MAX_LOD",value:33083,description:" "},d.TEXTURE_BASE_LEVEL={name:"TEXTURE_BASE_LEVEL",value:33084,description:" "},d.TEXTURE_MAX_LEVEL={name:"TEXTURE_MAX_LEVEL",value:33085,description:" "},d.TEXTURE_COMPARE_MODE={name:"TEXTURE_COMPARE_MODE",value:34892,description:" "},d.TEXTURE_COMPARE_FUNC={name:"TEXTURE_COMPARE_FUNC",value:34893,description:" "},d.SRGB={name:"SRGB",value:35904,description:" "},d.SRGB8={name:"SRGB8",value:35905,description:" "},d.SRGB8_ALPHA8={name:"SRGB8_ALPHA8",value:35907,description:" "},d.COMPARE_REF_TO_TEXTURE={name:"COMPARE_REF_TO_TEXTURE",value:34894,description:" "},d.RGBA32F={name:"RGBA32F",value:34836,description:" "},d.RGB32F={name:"RGB32F",value:34837,description:" "},d.RGBA16F={name:"RGBA16F",value:34842,description:" "},d.RGB16F={name:"RGB16F",value:34843,description:" "},d.TEXTURE_2D_ARRAY={name:"TEXTURE_2D_ARRAY",value:35866,description:" "},d.TEXTURE_BINDING_2D_ARRAY={name:"TEXTURE_BINDING_2D_ARRAY",value:35869,description:" "},d.R11F_G11F_B10F={name:"R11F_G11F_B10F",value:35898,description:" "},d.RGB9_E5={name:"RGB9_E5",value:35901,description:" "},d.RGBA32UI={name:"RGBA32UI",value:36208,description:" "},d.RGB32UI={name:"RGB32UI",value:36209,description:" "},d.RGBA16UI={name:"RGBA16UI",value:36214,description:" "},d.RGB16UI={name:"RGB16UI",value:36215,description:" "},d.RGBA8UI={name:"RGBA8UI",value:36220,description:" "},d.RGB8UI={name:"RGB8UI",value:36221,description:" "},d.RGBA32I={name:"RGBA32I",value:36226,description:" "},d.RGB32I={name:"RGB32I",value:36227,description:" "},d.RGBA16I={name:"RGBA16I",value:36232,description:" "},d.RGB16I={name:"RGB16I",value:36233,description:" "},d.RGBA8I={name:"RGBA8I",value:36238,description:" "},d.RGB8I={name:"RGB8I",value:36239,description:" "},d.RED_INTEGER={name:"RED_INTEGER",value:36244,description:" "},d.RGB_INTEGER={name:"RGB_INTEGER",value:36248,description:" "},d.RGBA_INTEGER={name:"RGBA_INTEGER",value:36249,description:" "},d.R8={name:"R8",value:33321,description:" "},d.RG8={name:"RG8",value:33323,description:" "},d.R16F={name:"R16F",value:33325,description:" "},d.R32F={name:"R32F",value:33326,description:" "},d.RG16F={name:"RG16F",value:33327,description:" "},d.RG32F={name:"RG32F",value:33328,description:" "},d.R8I={name:"R8I",value:33329,description:" "},d.R8UI={name:"R8UI",value:33330,description:" "},d.R16I={name:"R16I",value:33331,description:" "},d.R16UI={name:"R16UI",value:33332,description:" "},d.R32I={name:"R32I",value:33333,description:" "},d.R32UI={name:"R32UI",value:33334,description:" "},d.RG8I={name:"RG8I",value:33335,description:" "},d.RG8UI={name:"RG8UI",value:33336,description:" "},d.RG16I={name:"RG16I",value:33337,description:" "},d.RG16UI={name:"RG16UI",value:33338,description:" "},d.RG32I={name:"RG32I",value:33339,description:" "},d.RG32UI={name:"RG32UI",value:33340,description:" "},d.R8_SNORM={name:"R8_SNORM",value:36756,description:" "},d.RG8_SNORM={name:"RG8_SNORM",value:36757,description:" "},d.RGB8_SNORM={name:"RGB8_SNORM",value:36758,description:" "},d.RGBA8_SNORM={name:"RGBA8_SNORM",value:36759,description:" "},d.RGB10_A2UI={name:"RGB10_A2UI",value:36975,description:" "},d.TEXTURE_IMMUTABLE_FORMAT={name:"TEXTURE_IMMUTABLE_FORMAT",value:37167,description:" "},d.TEXTURE_IMMUTABLE_LEVELS={name:"TEXTURE_IMMUTABLE_LEVELS",value:33503,description:" "},d.UNSIGNED_INT_2_10_10_10_REV={name:"UNSIGNED_INT_2_10_10_10_REV",value:33640,description:" "},d.UNSIGNED_INT_10F_11F_11F_REV={name:"UNSIGNED_INT_10F_11F_11F_REV",value:35899,description:" "},d.UNSIGNED_INT_5_9_9_9_REV={name:"UNSIGNED_INT_5_9_9_9_REV",value:35902,description:" "},d.FLOAT_32_UNSIGNED_INT_24_8_REV={name:"FLOAT_32_UNSIGNED_INT_24_8_REV",value:36269,description:" "},d.UNSIGNED_INT_24_8={name:"UNSIGNED_INT_24_8",value:34042,description:" "},d.HALF_FLOAT={name:"HALF_FLOAT",value:5131,description:" "},d.RG={name:"RG",value:33319,description:" "},d.RG_INTEGER={name:"RG_INTEGER",value:33320,description:" "},d.INT_2_10_10_10_REV={name:"INT_2_10_10_10_REV",value:36255,description:" "},d.CURRENT_QUERY={name:"CURRENT_QUERY",value:34917,description:" "},d.QUERY_RESULT={name:"QUERY_RESULT",value:34918,description:" "},d.QUERY_RESULT_AVAILABLE={name:"QUERY_RESULT_AVAILABLE",value:34919,description:" "},d.ANY_SAMPLES_PASSED={name:"ANY_SAMPLES_PASSED",value:35887,description:" "},d.ANY_SAMPLES_PASSED_CONSERVATIVE={name:"ANY_SAMPLES_PASSED_CONSERVATIVE",value:36202,description:" "},d.MAX_DRAW_BUFFERS={name:"MAX_DRAW_BUFFERS",value:34852,description:" "},d.DRAW_BUFFER0={name:"DRAW_BUFFER0",value:34853,description:" "},d.DRAW_BUFFER1={name:"DRAW_BUFFER1",value:34854,description:" "},d.DRAW_BUFFER2={name:"DRAW_BUFFER2",value:34855,description:" "},d.DRAW_BUFFER3={name:"DRAW_BUFFER3",value:34856,description:" "},d.DRAW_BUFFER4={name:"DRAW_BUFFER4",value:34857,description:" "},d.DRAW_BUFFER5={name:"DRAW_BUFFER5",value:34858,description:" "},d.DRAW_BUFFER6={name:"DRAW_BUFFER6",value:34859,description:" "},d.DRAW_BUFFER7={name:"DRAW_BUFFER7",value:34860,description:" "},d.DRAW_BUFFER8={name:"DRAW_BUFFER8",value:34861,description:" "},d.DRAW_BUFFER9={name:"DRAW_BUFFER9",value:34862,description:" "},d.DRAW_BUFFER10={name:"DRAW_BUFFER10",value:34863,description:" "},d.DRAW_BUFFER11={name:"DRAW_BUFFER11",value:34864,description:" "},d.DRAW_BUFFER12={name:"DRAW_BUFFER12",value:34865,description:" "},d.DRAW_BUFFER13={name:"DRAW_BUFFER13",value:34866,description:" "},d.DRAW_BUFFER14={name:"DRAW_BUFFER14",value:34867,description:" "},d.DRAW_BUFFER15={name:"DRAW_BUFFER15",value:34868,description:" "},d.MAX_COLOR_ATTACHMENTS={name:"MAX_COLOR_ATTACHMENTS",value:36063,description:" "},d.COLOR_ATTACHMENT1={name:"COLOR_ATTACHMENT1",value:36065,description:" "},d.COLOR_ATTACHMENT2={name:"COLOR_ATTACHMENT2",value:36066,description:" "},d.COLOR_ATTACHMENT3={name:"COLOR_ATTACHMENT3",value:36067,description:" "},d.COLOR_ATTACHMENT4={name:"COLOR_ATTACHMENT4",value:36068,description:" "},d.COLOR_ATTACHMENT5={name:"COLOR_ATTACHMENT5",value:36069,description:" "},d.COLOR_ATTACHMENT6={name:"COLOR_ATTACHMENT6",value:36070,description:" "},d.COLOR_ATTACHMENT7={name:"COLOR_ATTACHMENT7",value:36071,description:" "},d.COLOR_ATTACHMENT8={name:"COLOR_ATTACHMENT8",value:36072,description:" "},d.COLOR_ATTACHMENT9={name:"COLOR_ATTACHMENT9",value:36073,description:" "},d.COLOR_ATTACHMENT10={name:"COLOR_ATTACHMENT10",value:36074,description:" "},d.COLOR_ATTACHMENT11={name:"COLOR_ATTACHMENT11",value:36075,description:" "},d.COLOR_ATTACHMENT12={name:"COLOR_ATTACHMENT12",value:36076,description:" "},d.COLOR_ATTACHMENT13={name:"COLOR_ATTACHMENT13",value:36077,description:" "},d.COLOR_ATTACHMENT14={name:"COLOR_ATTACHMENT14",value:36078,description:" "},d.COLOR_ATTACHMENT15={name:"COLOR_ATTACHMENT15",value:36079,description:" "},d.SAMPLER_3D={name:"SAMPLER_3D",value:35679,description:" "},d.SAMPLER_2D_SHADOW={name:"SAMPLER_2D_SHADOW",value:35682,description:" "},d.SAMPLER_2D_ARRAY={name:"SAMPLER_2D_ARRAY",value:36289,description:" "},d.SAMPLER_2D_ARRAY_SHADOW={name:"SAMPLER_2D_ARRAY_SHADOW",value:36292,description:" "},d.SAMPLER_CUBE_SHADOW={name:"SAMPLER_CUBE_SHADOW",value:36293,description:" "},d.INT_SAMPLER_2D={name:"INT_SAMPLER_2D",value:36298,description:" "},d.INT_SAMPLER_3D={name:"INT_SAMPLER_3D",value:36299,description:" "},d.INT_SAMPLER_CUBE={name:"INT_SAMPLER_CUBE",value:36300,description:" "},d.INT_SAMPLER_2D_ARRAY={name:"INT_SAMPLER_2D_ARRAY",value:36303,description:" "},d.UNSIGNED_INT_SAMPLER_2D={name:"UNSIGNED_INT_SAMPLER_2D",value:36306,description:" "},d.UNSIGNED_INT_SAMPLER_3D={name:"UNSIGNED_INT_SAMPLER_3D",value:36307,description:" "},d.UNSIGNED_INT_SAMPLER_CUBE={name:"UNSIGNED_INT_SAMPLER_CUBE",value:36308,description:" "},d.UNSIGNED_INT_SAMPLER_2D_ARRAY={name:"UNSIGNED_INT_SAMPLER_2D_ARRAY",value:36311,description:" "},d.MAX_SAMPLES={name:"MAX_SAMPLES",value:36183,description:" "},d.SAMPLER_BINDING={name:"SAMPLER_BINDING",value:35097,description:" "},d.PIXEL_PACK_BUFFER={name:"PIXEL_PACK_BUFFER",value:35051,description:" "},d.PIXEL_UNPACK_BUFFER={name:"PIXEL_UNPACK_BUFFER",value:35052,description:" "},d.PIXEL_PACK_BUFFER_BINDING={name:"PIXEL_PACK_BUFFER_BINDING",value:35053,description:" "},d.PIXEL_UNPACK_BUFFER_BINDING={name:"PIXEL_UNPACK_BUFFER_BINDING",value:35055,description:" "},d.COPY_READ_BUFFER={name:"COPY_READ_BUFFER",value:36662,description:" "},d.COPY_WRITE_BUFFER={name:"COPY_WRITE_BUFFER",value:36663,description:" "},d.COPY_READ_BUFFER_BINDING={name:"COPY_READ_BUFFER_BINDING",value:36662,description:" "},d.COPY_WRITE_BUFFER_BINDING={name:"COPY_WRITE_BUFFER_BINDING",value:36663,description:" "},d.FLOAT_MAT2x3={name:"FLOAT_MAT2x3",value:35685,description:" "},d.FLOAT_MAT2x4={name:"FLOAT_MAT2x4",value:35686,description:" "},d.FLOAT_MAT3x2={name:"FLOAT_MAT3x2",value:35687,description:" "},d.FLOAT_MAT3x4={name:"FLOAT_MAT3x4",value:35688,description:" "},d.FLOAT_MAT4x2={name:"FLOAT_MAT4x2",value:35689,description:" "},d.FLOAT_MAT4x3={name:"FLOAT_MAT4x3",value:35690,description:" "},d.UNSIGNED_INT_VEC2={name:"UNSIGNED_INT_VEC2",value:36294,description:" "},d.UNSIGNED_INT_VEC3={name:"UNSIGNED_INT_VEC3",value:36295,description:" "},d.UNSIGNED_INT_VEC4={name:"UNSIGNED_INT_VEC4",value:36296,description:" "},d.UNSIGNED_NORMALIZED={name:"UNSIGNED_NORMALIZED",value:35863,description:" "},d.SIGNED_NORMALIZED={name:"SIGNED_NORMALIZED",value:36764,description:" "},d.VERTEX_ATTRIB_ARRAY_INTEGER={name:"VERTEX_ATTRIB_ARRAY_INTEGER",value:35069,description:" "},d.VERTEX_ATTRIB_ARRAY_DIVISOR={name:"VERTEX_ATTRIB_ARRAY_DIVISOR",value:35070,description:" "},d.TRANSFORM_FEEDBACK_BUFFER_MODE={name:"TRANSFORM_FEEDBACK_BUFFER_MODE",value:35967,description:" "},d.MAX_TRANSFORM_FEEDBACK_SEPARATE_COMPONENTS={name:"MAX_TRANSFORM_FEEDBACK_SEPARATE_COMPONENTS",value:35968,description:" "},d.TRANSFORM_FEEDBACK_VARYINGS={name:"TRANSFORM_FEEDBACK_VARYINGS",value:35971,description:" "},d.TRANSFORM_FEEDBACK_BUFFER_START={name:"TRANSFORM_FEEDBACK_BUFFER_START",value:35972,description:" "},d.TRANSFORM_FEEDBACK_BUFFER_SIZE={name:"TRANSFORM_FEEDBACK_BUFFER_SIZE",value:35973,description:" "},d.TRANSFORM_FEEDBACK_PRIMITIVES_WRITTEN={name:"TRANSFORM_FEEDBACK_PRIMITIVES_WRITTEN",value:35976,description:" "},d.MAX_TRANSFORM_FEEDBACK_INTERLEAVED_COMPONENTS={name:"MAX_TRANSFORM_FEEDBACK_INTERLEAVED_COMPONENTS",value:35978,description:" "},d.MAX_TRANSFORM_FEEDBACK_SEPARATE_ATTRIBS={name:"MAX_TRANSFORM_FEEDBACK_SEPARATE_ATTRIBS",value:35979,description:" "},d.INTERLEAVED_ATTRIBS={name:"INTERLEAVED_ATTRIBS",value:35980,description:" "},d.SEPARATE_ATTRIBS={name:"SEPARATE_ATTRIBS",value:35981,description:" "},d.TRANSFORM_FEEDBACK_BUFFER={name:"TRANSFORM_FEEDBACK_BUFFER",value:35982,description:" "},d.TRANSFORM_FEEDBACK_BUFFER_BINDING={name:"TRANSFORM_FEEDBACK_BUFFER_BINDING",value:35983,description:" "},d.TRANSFORM_FEEDBACK={name:"TRANSFORM_FEEDBACK",value:36386,description:" "},d.TRANSFORM_FEEDBACK_PAUSED={name:"TRANSFORM_FEEDBACK_PAUSED",value:36387,description:" "},d.TRANSFORM_FEEDBACK_ACTIVE={name:"TRANSFORM_FEEDBACK_ACTIVE",value:36388,description:" "},d.TRANSFORM_FEEDBACK_BINDING={name:"TRANSFORM_FEEDBACK_BINDING",value:36389,description:" "},d.FRAMEBUFFER_ATTACHMENT_COLOR_ENCODING={name:"FRAMEBUFFER_ATTACHMENT_COLOR_ENCODING",value:33296,description:" "},d.FRAMEBUFFER_ATTACHMENT_COMPONENT_TYPE={name:"FRAMEBUFFER_ATTACHMENT_COMPONENT_TYPE",value:33297,description:" "},d.FRAMEBUFFER_ATTACHMENT_RED_SIZE={name:"FRAMEBUFFER_ATTACHMENT_RED_SIZE",value:33298,description:" "},d.FRAMEBUFFER_ATTACHMENT_GREEN_SIZE={name:"FRAMEBUFFER_ATTACHMENT_GREEN_SIZE",value:33299,description:" "},d.FRAMEBUFFER_ATTACHMENT_BLUE_SIZE={name:"FRAMEBUFFER_ATTACHMENT_BLUE_SIZE",value:33300,description:" "},d.FRAMEBUFFER_ATTACHMENT_ALPHA_SIZE={name:"FRAMEBUFFER_ATTACHMENT_ALPHA_SIZE",value:33301,description:" "},d.FRAMEBUFFER_ATTACHMENT_DEPTH_SIZE={name:"FRAMEBUFFER_ATTACHMENT_DEPTH_SIZE",value:33302,description:" "},d.FRAMEBUFFER_ATTACHMENT_STENCIL_SIZE={name:"FRAMEBUFFER_ATTACHMENT_STENCIL_SIZE",value:33303,description:" "},d.FRAMEBUFFER_DEFAULT={name:"FRAMEBUFFER_DEFAULT",value:33304,description:" "},d.DEPTH24_STENCIL8={name:"DEPTH24_STENCIL8",value:35056,description:" "},d.DRAW_FRAMEBUFFER_BINDING={name:"DRAW_FRAMEBUFFER_BINDING",value:36006,description:" "},d.READ_FRAMEBUFFER={name:"READ_FRAMEBUFFER",value:36008,description:" "},d.DRAW_FRAMEBUFFER={name:"DRAW_FRAMEBUFFER",value:36009,description:" "},d.READ_FRAMEBUFFER_BINDING={name:"READ_FRAMEBUFFER_BINDING",value:36010,description:" "},d.RENDERBUFFER_SAMPLES={name:"RENDERBUFFER_SAMPLES",value:36011,description:" "},d.FRAMEBUFFER_ATTACHMENT_TEXTURE_LAYER={name:"FRAMEBUFFER_ATTACHMENT_TEXTURE_LAYER",value:36052,description:" "},d.FRAMEBUFFER_INCOMPLETE_MULTISAMPLE={name:"FRAMEBUFFER_INCOMPLETE_MULTISAMPLE",value:36182,description:" "},d.UNIFORM_BUFFER={name:"UNIFORM_BUFFER",value:35345,description:" "},d.UNIFORM_BUFFER_BINDING={name:"UNIFORM_BUFFER_BINDING",value:35368,description:" "},d.UNIFORM_BUFFER_START={name:"UNIFORM_BUFFER_START",value:35369,description:" "},d.UNIFORM_BUFFER_SIZE={name:"UNIFORM_BUFFER_SIZE",value:35370,description:" "},d.MAX_VERTEX_UNIFORM_BLOCKS={name:"MAX_VERTEX_UNIFORM_BLOCKS",value:35371,description:" "},d.MAX_FRAGMENT_UNIFORM_BLOCKS={name:"MAX_FRAGMENT_UNIFORM_BLOCKS",value:35373,description:" "},d.MAX_COMBINED_UNIFORM_BLOCKS={name:"MAX_COMBINED_UNIFORM_BLOCKS",value:35374,description:" "},d.MAX_UNIFORM_BUFFER_BINDINGS={name:"MAX_UNIFORM_BUFFER_BINDINGS",value:35375,description:" "},d.MAX_UNIFORM_BLOCK_SIZE={name:"MAX_UNIFORM_BLOCK_SIZE",value:35376,description:" "},d.MAX_COMBINED_VERTEX_UNIFORM_COMPONENTS={name:"MAX_COMBINED_VERTEX_UNIFORM_COMPONENTS",value:35377,description:" "},d.MAX_COMBINED_FRAGMENT_UNIFORM_COMPONENTS={name:"MAX_COMBINED_FRAGMENT_UNIFORM_COMPONENTS",value:35379,description:" "},d.UNIFORM_BUFFER_OFFSET_ALIGNMENT={name:"UNIFORM_BUFFER_OFFSET_ALIGNMENT",value:35380,description:" "},d.ACTIVE_UNIFORM_BLOCKS={name:"ACTIVE_UNIFORM_BLOCKS",value:35382,description:" "},d.UNIFORM_TYPE={name:"UNIFORM_TYPE",value:35383,description:" "},d.UNIFORM_SIZE={name:"UNIFORM_SIZE",value:35384,description:" "},d.UNIFORM_BLOCK_INDEX={name:"UNIFORM_BLOCK_INDEX",value:35386,description:" "},d.UNIFORM_OFFSET={name:"UNIFORM_OFFSET",value:35387,description:" "},d.UNIFORM_ARRAY_STRIDE={name:"UNIFORM_ARRAY_STRIDE",value:35388,description:" "},d.UNIFORM_MATRIX_STRIDE={name:"UNIFORM_MATRIX_STRIDE",value:35389,description:" "},d.UNIFORM_IS_ROW_MAJOR={name:"UNIFORM_IS_ROW_MAJOR",value:35390,description:" "},d.UNIFORM_BLOCK_BINDING={name:"UNIFORM_BLOCK_BINDING",value:35391,description:" "},d.UNIFORM_BLOCK_DATA_SIZE={name:"UNIFORM_BLOCK_DATA_SIZE",value:35392,description:" "},d.UNIFORM_BLOCK_ACTIVE_UNIFORMS={name:"UNIFORM_BLOCK_ACTIVE_UNIFORMS",value:35394,description:" "},d.UNIFORM_BLOCK_ACTIVE_UNIFORM_INDICES={name:"UNIFORM_BLOCK_ACTIVE_UNIFORM_INDICES",value:35395,description:" "},d.UNIFORM_BLOCK_REFERENCED_BY_VERTEX_SHADER={name:"UNIFORM_BLOCK_REFERENCED_BY_VERTEX_SHADER",value:35396,description:" "},d.UNIFORM_BLOCK_REFERENCED_BY_FRAGMENT_SHADER={name:"UNIFORM_BLOCK_REFERENCED_BY_FRAGMENT_SHADER",value:35398,description:" "},d.OBJECT_TYPE={name:"OBJECT_TYPE",value:37138,description:" "},d.SYNC_CONDITION={name:"SYNC_CONDITION",value:37139,description:" "},d.SYNC_STATUS={name:"SYNC_STATUS",value:37140,description:" "},d.SYNC_FLAGS={name:"SYNC_FLAGS",value:37141,description:" "},d.SYNC_FENCE={name:"SYNC_FENCE",value:37142,description:" "},d.SYNC_GPU_COMMANDS_COMPLETE={name:"SYNC_GPU_COMMANDS_COMPLETE",value:37143,description:" "},d.UNSIGNALED={name:"UNSIGNALED",value:37144,description:" "},d.SIGNALED={name:"SIGNALED",value:37145,description:" "},d.ALREADY_SIGNALED={name:"ALREADY_SIGNALED",value:37146,description:" "},d.TIMEOUT_EXPIRED={name:"TIMEOUT_EXPIRED",value:37147,description:" "},d.CONDITION_SATISFIED={name:"CONDITION_SATISFIED",value:37148,description:" "},d.WAIT_FAILED={name:"WAIT_FAILED",value:37149,description:" "},d.SYNC_FLUSH_COMMANDS_BIT={name:"SYNC_FLUSH_COMMANDS_BIT",value:1,description:" "},d.COLOR={name:"COLOR",value:6144,description:" "},d.DEPTH={name:"DEPTH",value:6145,description:" "},d.STENCIL={name:"STENCIL",value:6146,description:" "},d.MIN={name:"MIN",value:32775,description:" "},d.MAX={name:"MAX",value:32776,description:" "},d.DEPTH_COMPONENT24={name:"DEPTH_COMPONENT24",value:33190,description:" "},d.STREAM_READ={name:"STREAM_READ",value:35041,description:" "},d.STREAM_COPY={name:"STREAM_COPY",value:35042,description:" "},d.STATIC_READ={name:"STATIC_READ",value:35045,description:" "},d.STATIC_COPY={name:"STATIC_COPY",value:35046,description:" "},d.DYNAMIC_READ={name:"DYNAMIC_READ",value:35049,description:" "},d.DYNAMIC_COPY={name:"DYNAMIC_COPY",value:35050,description:" "},d.DEPTH_COMPONENT32F={name:"DEPTH_COMPONENT32F",value:36012,description:" "},d.DEPTH32F_STENCIL8={name:"DEPTH32F_STENCIL8",value:36013,description:" "},d.INVALID_INDEX={name:"INVALID_INDEX",value:4294967295,description:" "},d.TIMEOUT_IGNORED={name:"TIMEOUT_IGNORED",value:-1,description:" "},d.MAX_CLIENT_WAIT_TIMEOUT_WEBGL={name:"MAX_CLIENT_WAIT_TIMEOUT_WEBGL",value:37447,description:" "},d.VERTEX_ATTRIB_ARRAY_DIVISOR_ANGLE={name:"VERTEX_ATTRIB_ARRAY_DIVISOR_ANGLE",value:35070,description:"Describes the frequency divisor used for instanced rendering.",extensionName:"ANGLE_instanced_arrays"},d.UNMASKED_VENDOR_WEBGL={name:"UNMASKED_VENDOR_WEBGL",value:37445,description:"Passed to getParameter to get the vendor string of the graphics driver.",extensionName:"ANGLE_instanced_arrays"},d.UNMASKED_RENDERER_WEBGL={name:"UNMASKED_RENDERER_WEBGL",value:37446,description:"Passed to getParameter to get the renderer string of the graphics driver.",extensionName:"WEBGL_debug_renderer_info"},d.MAX_TEXTURE_MAX_ANISOTROPY_EXT={name:"MAX_TEXTURE_MAX_ANISOTROPY_EXT",value:34047,description:"Returns the maximum available anisotropy.",extensionName:"EXT_texture_filter_anisotropic"},d.TEXTURE_MAX_ANISOTROPY_EXT={name:"TEXTURE_MAX_ANISOTROPY_EXT",value:34046,description:"Passed to texParameter to set the desired maximum anisotropy for a texture.",extensionName:"EXT_texture_filter_anisotropic"},d.COMPRESSED_RGB_S3TC_DXT1_EXT={name:"COMPRESSED_RGB_S3TC_DXT1_EXT",value:33776,description:"A DXT1-compressed image in an RGB image format.",extensionName:"WEBGL_compressed_texture_s3tc"},d.COMPRESSED_RGBA_S3TC_DXT1_EXT={name:"COMPRESSED_RGBA_S3TC_DXT1_EXT",value:33777,description:"A DXT1-compressed image in an RGB image format with a simple on/off alpha value.",extensionName:"WEBGL_compressed_texture_s3tc"},d.COMPRESSED_RGBA_S3TC_DXT3_EXT={name:"COMPRESSED_RGBA_S3TC_DXT3_EXT",value:33778,description:"A DXT3-compressed image in an RGBA image format. Compared to a 32-bit RGBA texture, it offers 4:1 compression.",extensionName:"WEBGL_compressed_texture_s3tc"},d.COMPRESSED_RGBA_S3TC_DXT5_EXT={name:"COMPRESSED_RGBA_S3TC_DXT5_EXT",value:33779,description:"A DXT5-compressed image in an RGBA image format. It also provides a 4:1 compression, but differs to the DXT3 compression in how the alpha compression is done.",extensionName:"WEBGL_compressed_texture_s3tc"},d.COMPRESSED_R11_EAC={name:"COMPRESSED_R11_EAC",value:37488,description:"One-channel (red) unsigned format compression.",extensionName:"WEBGL_compressed_texture_etc"},d.COMPRESSED_SIGNED_R11_EAC={name:"COMPRESSED_SIGNED_R11_EAC",value:37489,description:"One-channel (red) signed format compression.",extensionName:"WEBGL_compressed_texture_etc"},d.COMPRESSED_RG11_EAC={name:"COMPRESSED_RG11_EAC",value:37490,description:"Two-channel (red and green) unsigned format compression.",extensionName:"WEBGL_compressed_texture_etc"},d.COMPRESSED_SIGNED_RG11_EAC={name:"COMPRESSED_SIGNED_RG11_EAC",value:37491,description:"Two-channel (red and green) signed format compression.",extensionName:"WEBGL_compressed_texture_etc"},d.COMPRESSED_RGB8_ETC2={name:"COMPRESSED_RGB8_ETC2",value:37492,description:"Compresses RBG8 data with no alpha channel.",extensionName:"WEBGL_compressed_texture_etc"},d.COMPRESSED_RGBA8_ETC2_EAC={name:"COMPRESSED_RGBA8_ETC2_EAC",value:37493,description:"Compresses RGBA8 data. The RGB part is encoded the same as RGB_ETC2, but the alpha part is encoded separately.",extensionName:"WEBGL_compressed_texture_etc"},d.COMPRESSED_SRGB8_ETC2={name:"COMPRESSED_SRGB8_ETC2",value:37494,description:"Compresses sRBG8 data with no alpha channel.",extensionName:"WEBGL_compressed_texture_etc"},d.COMPRESSED_SRGB8_ALPHA8_ETC2_EAC={name:"COMPRESSED_SRGB8_ALPHA8_ETC2_EAC",value:37495,description:"Compresses sRGBA8 data. The sRGB part is encoded the same as SRGB_ETC2, but the alpha part is encoded separately.",extensionName:"WEBGL_compressed_texture_etc"},d.COMPRESSED_RGB8_PUNCHTHROUGH_ALPHA1_ETC2={name:"COMPRESSED_RGB8_PUNCHTHROUGH_ALPHA1_ETC2",value:37496,description:"Similar to RGB8_ETC, but with ability to punch through the alpha channel, which means to make it completely opaque or transparent.",extensionName:"WEBGL_compressed_texture_etc"},d.COMPRESSED_SRGB8_PUNCHTHROUGH_ALPHA1_ETC2={name:"COMPRESSED_SRGB8_PUNCHTHROUGH_ALPHA1_ETC2",value:37497,description:"Similar to SRGB8_ETC, but with ability to punch through the alpha channel, which means to make it completely opaque or transparent.",extensionName:"WEBGL_compressed_texture_etc"},d.COMPRESSED_RGB_PVRTC_4BPPV1_IMG={name:"COMPRESSED_RGB_PVRTC_4BPPV1_IMG",value:35840,description:"RGB compression in 4-bit mode. One block for each 4×4 pixels.",extensionName:"WEBGL_compressed_texture_pvrtc"},d.COMPRESSED_RGBA_PVRTC_4BPPV1_IMG={name:"COMPRESSED_RGBA_PVRTC_4BPPV1_IMG",value:35842,description:"RGBA compression in 4-bit mode. One block for each 4×4 pixels.",extensionName:"WEBGL_compressed_texture_pvrtc"},d.COMPRESSED_RGB_PVRTC_2BPPV1_IMG={name:"COMPRESSED_RGB_PVRTC_2BPPV1_IMG",value:35841,description:"RGB compression in 2-bit mode. One block for each 8×4 pixels.",extensionName:"WEBGL_compressed_texture_pvrtc"},d.COMPRESSED_RGBA_PVRTC_2BPPV1_IMG={name:"COMPRESSED_RGBA_PVRTC_2BPPV1_IMG",value:35843,description:"RGBA compression in 2-bit mode. One block for each 8×4 pixe",extensionName:"WEBGL_compressed_texture_pvrtc"},d.COMPRESSED_RGB_ETC1_WEBGL={name:"COMPRESSED_RGB_ETC1_WEBGL",value:36196,description:"Compresses 24-bit RGB data with no alpha channel.",extensionName:"WEBGL_compressed_texture_etc1"},d.COMPRESSED_RGB_ATC_WEBGL={name:"COMPRESSED_RGB_ATC_WEBGL",value:35986,description:"Compresses RGB textures with no alpha channel.",extensionName:"WEBGL_compressed_texture_atc"},d.COMPRESSED_RGBA_ATC_EXPLICIT_ALPHA_WEBGL={name:"COMPRESSED_RGBA_ATC_EXPLICIT_ALPHA_WEBGL",value:35986,description:"Compresses RGBA textures using explicit alpha encoding (useful when alpha transitions are sharp).",extensionName:"WEBGL_compressed_texture_atc"},d.COMPRESSED_RGBA_ATC_INTERPOLATED_ALPHA_WEBGL={name:"COMPRESSED_RGBA_ATC_INTERPOLATED_ALPHA_WEBGL",value:34798,description:"Compresses RGBA textures using interpolated alpha encoding (useful when alpha transitions are gradient).",extensionName:"WEBGL_compressed_texture_atc"},d.UNSIGNED_INT_24_8_WEBGL={name:"UNSIGNED_INT_24_8_WEBGL",value:34042,description:"Unsigned integer type for 24-bit depth texture data.",extensionName:"WEBGL_depth_texture"},d.HALF_FLOAT_OES={name:"HALF_FLOAT_OES",value:36193,description:"Half floating-point type (16-bit).",extensionName:"OES_texture_half_float"},d.FRAMEBUFFER_ATTACHMENT_COMPONENT_TYPE_EXT={name:"FRAMEBUFFER_ATTACHMENT_COMPONENT_TYPE_EXT",value:33297,description:" ",extensionName:"WEBGL_color_buffer_float"},d.UNSIGNED_NORMALIZED_EXT={name:"UNSIGNED_NORMALIZED_EXT",value:35863,description:" ",extensionName:"WEBGL_color_buffer_float"},d.MIN_EXT={name:"MIN_EXT",value:32775,description:"Produces the minimum color components of the source and destination colors.",extensionName:"EXT_blend_minmax"},d.MAX_EXT={name:"MAX_EXT",value:32776,description:"Produces the maximum color components of the source and destination colors.",extensionName:"EXT_blend_minmax"},d.SRGB_EXT={name:"SRGB_EXT",value:35904,description:"Unsized sRGB format that leaves the precision up to the driver.",extensionName:"EXT_sRGB"},d.SRGB_ALPHA_EXT={name:"SRGB_ALPHA_EXT",value:35906,description:"Unsized sRGB format with unsized alpha component.",extensionName:"EXT_sRGB"},d.SRGB8_ALPHA8_EXT={name:"SRGB8_ALPHA8_EXT",value:35907,description:"Sized (8-bit) sRGB and alpha formats.",extensionName:"EXT_sRGB"},d.FRAMEBUFFER_ATTACHMENT_COLOR_ENCODING_EXT={name:"FRAMEBUFFER_ATTACHMENT_COLOR_ENCODING_EXT",value:33296,description:"Returns the framebuffer color encoding.",extensionName:"EXT_sRGB"},d.FRAGMENT_SHADER_DERIVATIVE_HINT_OES={name:"FRAGMENT_SHADER_DERIVATIVE_HINT_OES",value:35723,description:"Indicates the accuracy of the derivative calculation for the GLSL built-in functions: dFdx, dFdy, and fwidth.",extensionName:"OES_standard_derivatives"},d.COLOR_ATTACHMENT0_WEBGL={name:"COLOR_ATTACHMENT0_WEBGL",value:36064,description:"Framebuffer color attachment point",extensionName:"WEBGL_draw_buffers"},d.COLOR_ATTACHMENT1_WEBGL={name:"COLOR_ATTACHMENT1_WEBGL",value:36065,description:"Framebuffer color attachment point",extensionName:"WEBGL_draw_buffers"},d.COLOR_ATTACHMENT2_WEBGL={name:"COLOR_ATTACHMENT2_WEBGL",value:36066,description:"Framebuffer color attachment point",extensionName:"WEBGL_draw_buffers"},d.COLOR_ATTACHMENT3_WEBGL={name:"COLOR_ATTACHMENT3_WEBGL",value:36067,description:"Framebuffer color attachment point",extensionName:"WEBGL_draw_buffers"},d.COLOR_ATTACHMENT4_WEBGL={name:"COLOR_ATTACHMENT4_WEBGL",value:36068,description:"Framebuffer color attachment point",extensionName:"WEBGL_draw_buffers"},d.COLOR_ATTACHMENT5_WEBGL={name:"COLOR_ATTACHMENT5_WEBGL",value:36069,description:"Framebuffer color attachment point",extensionName:"WEBGL_draw_buffers"},d.COLOR_ATTACHMENT6_WEBGL={name:"COLOR_ATTACHMENT6_WEBGL",value:36070,description:"Framebuffer color attachment point",extensionName:"WEBGL_draw_buffers"},d.COLOR_ATTACHMENT7_WEBGL={name:"COLOR_ATTACHMENT7_WEBGL",value:36071,description:"Framebuffer color attachment point",extensionName:"WEBGL_draw_buffers"},d.COLOR_ATTACHMENT8_WEBGL={name:"COLOR_ATTACHMENT8_WEBGL",value:36072,description:"Framebuffer color attachment point",extensionName:"WEBGL_draw_buffers"},d.COLOR_ATTACHMENT9_WEBGL={name:"COLOR_ATTACHMENT9_WEBGL",value:36073,description:"Framebuffer color attachment point",extensionName:"WEBGL_draw_buffers"},d.COLOR_ATTACHMENT10_WEBGL={name:"COLOR_ATTACHMENT10_WEBGL",value:36074,description:"Framebuffer color attachment point",extensionName:"WEBGL_draw_buffers"},d.COLOR_ATTACHMENT11_WEBGL={name:"COLOR_ATTACHMENT11_WEBGL",value:36075,description:"Framebuffer color attachment point",extensionName:"WEBGL_draw_buffers"},d.COLOR_ATTACHMENT12_WEBGL={name:"COLOR_ATTACHMENT12_WEBGL",value:36076,description:"Framebuffer color attachment point",extensionName:"WEBGL_draw_buffers"},d.COLOR_ATTACHMENT13_WEBGL={name:"COLOR_ATTACHMENT13_WEBGL",value:36077,description:"Framebuffer color attachment point",extensionName:"WEBGL_draw_buffers"},d.COLOR_ATTACHMENT14_WEBGL={name:"COLOR_ATTACHMENT14_WEBGL",value:36078,description:"Framebuffer color attachment point",extensionName:"WEBGL_draw_buffers"},d.COLOR_ATTACHMENT15_WEBGL={name:"COLOR_ATTACHMENT15_WEBGL",value:36079,description:"Framebuffer color attachment point",extensionName:"WEBGL_draw_buffers"},d.DRAW_BUFFER0_WEBGL={name:"DRAW_BUFFER0_WEBGL",value:34853,description:"Draw buffer",extensionName:"WEBGL_draw_buffers"},d.DRAW_BUFFER1_WEBGL={name:"DRAW_BUFFER1_WEBGL",value:34854,description:"Draw buffer",extensionName:"WEBGL_draw_buffers"},d.DRAW_BUFFER2_WEBGL={name:"DRAW_BUFFER2_WEBGL",value:34855,description:"Draw buffer",extensionName:"WEBGL_draw_buffers"},d.DRAW_BUFFER3_WEBGL={name:"DRAW_BUFFER3_WEBGL",value:34856,description:"Draw buffer",extensionName:"WEBGL_draw_buffers"},d.DRAW_BUFFER4_WEBGL={name:"DRAW_BUFFER4_WEBGL",value:34857,description:"Draw buffer",extensionName:"WEBGL_draw_buffers"},d.DRAW_BUFFER5_WEBGL={name:"DRAW_BUFFER5_WEBGL",value:34858,description:"Draw buffer",extensionName:"WEBGL_draw_buffers"},d.DRAW_BUFFER6_WEBGL={name:"DRAW_BUFFER6_WEBGL",value:34859,description:"Draw buffer",extensionName:"WEBGL_draw_buffers"},d.DRAW_BUFFER7_WEBGL={name:"DRAW_BUFFER7_WEBGL",value:34860,description:"Draw buffer",extensionName:"WEBGL_draw_buffers"},d.DRAW_BUFFER8_WEBGL={name:"DRAW_BUFFER8_WEBGL",value:34861,description:"Draw buffer",extensionName:"WEBGL_draw_buffers"},d.DRAW_BUFFER9_WEBGL={name:"DRAW_BUFFER9_WEBGL",value:34862,description:"Draw buffer",extensionName:"WEBGL_draw_buffers"},d.DRAW_BUFFER10_WEBGL={name:"DRAW_BUFFER10_WEBGL",value:34863,description:"Draw buffer",extensionName:"WEBGL_draw_buffers"},d.DRAW_BUFFER11_WEBGL={name:"DRAW_BUFFER11_WEBGL",value:34864,description:"Draw buffer",extensionName:"WEBGL_draw_buffers"},d.DRAW_BUFFER12_WEBGL={name:"DRAW_BUFFER12_WEBGL",value:34865,description:"Draw buffer",extensionName:"WEBGL_draw_buffers"},d.DRAW_BUFFER13_WEBGL={name:"DRAW_BUFFER13_WEBGL",value:34866,description:"Draw buffer",extensionName:"WEBGL_draw_buffers"},d.DRAW_BUFFER14_WEBGL={name:"DRAW_BUFFER14_WEBGL",value:34867,description:"Draw buffer",extensionName:"WEBGL_draw_buffers"},d.DRAW_BUFFER15_WEBGL={name:"DRAW_BUFFER15_WEBGL",value:34868,description:"Draw buffer",extensionName:"WEBGL_draw_buffers"},d.MAX_COLOR_ATTACHMENTS_WEBGL={name:"MAX_COLOR_ATTACHMENTS_WEBGL",value:36063,description:"Maximum number of framebuffer color attachment points",extensionName:"WEBGL_draw_buffers"},d.MAX_DRAW_BUFFERS_WEBGL={name:"MAX_DRAW_BUFFERS_WEBGL",value:34852,description:"Maximum number of draw buffers",extensionName:"WEBGL_draw_buffers"},d.VERTEX_ARRAY_BINDING_OES={name:"VERTEX_ARRAY_BINDING_OES",value:34229,description:"The bound vertex array object (VAO).",extensionName:"VERTEX_ARRAY_BINDING_OES"},d.QUERY_COUNTER_BITS_EXT={name:"QUERY_COUNTER_BITS_EXT",value:34916,description:"The number of bits used to hold the query result for the given target.",extensionName:"EXT_disjoint_timer_query"},d.CURRENT_QUERY_EXT={name:"CURRENT_QUERY_EXT",value:34917,description:"The currently active query.",extensionName:"EXT_disjoint_timer_query"},d.QUERY_RESULT_EXT={name:"QUERY_RESULT_EXT",value:34918,description:"The query result.",extensionName:"EXT_disjoint_timer_query"},d.QUERY_RESULT_AVAILABLE_EXT={name:"QUERY_RESULT_AVAILABLE_EXT",value:34919,description:"A Boolean indicating whether or not a query result is available.",extensionName:"EXT_disjoint_timer_query"},d.TIME_ELAPSED_EXT={name:"TIME_ELAPSED_EXT",value:35007,description:"Elapsed time (in nanoseconds).",extensionName:"EXT_disjoint_timer_query"},d.TIMESTAMP_EXT={name:"TIMESTAMP_EXT",value:36392,description:"The current time.",extensionName:"EXT_disjoint_timer_query"},d.GPU_DISJOINT_EXT={name:"GPU_DISJOINT_EXT",value:36795,description:"A Boolean indicating whether or not the GPU performed any disjoint operation.",extensionName:"EXT_disjoint_timer_query"},d.zeroMeaningByCommand={getError:"NO_ERROR",blendFunc:"ZERO",blendFuncSeparate:"ZERO",readBuffer:"NONE",getFramebufferAttachmentParameter:"NONE",texParameterf:"NONE",texParameteri:"NONE",drawArrays:"POINTS",drawElements:"POINTS",drawArraysInstanced:"POINTS",drawArraysInstancedAngle:"POINTS",drawBuffers:"POINTS",drawElementsInstanced:"POINTS",drawRangeElements:"POINTS"},d.oneMeaningByCommand={blendFunc:"ONE",blendFuncSeparate:"ONE",drawArrays:"LINES",drawElements:"LINES",drawArraysInstanced:"LINES",drawArraysInstancedAngle:"LINES",drawBuffers:"LINES",drawElementsInstanced:"LINES",drawRangeElements:"LINES"};const m={},p={};!function(){for(const e in d)if(d.hasOwnProperty(e)){const t=d[e];m[t.name]=t,p[t.value]=t}}();class g extends l{get analyserName(){return g.analyserName}appendToAnalysis(e,t){if(!e.commands)return;const n={total:0,totalTriangles:0,totalTriangleStrip:0,totalTriangleFan:0,totalLines:0,totalLineStrip:0,totalLineLoop:0,totalPoints:0};for(const t of e.commands)"drawArrays"===t.name&&t.commandArguments.length>=3||"drawArraysInstanced"===t.name&&t.commandArguments.length>=3||"drawArraysInstancedANGLE"===t.name&&t.commandArguments.length>=3?this.appendToPrimitives(n,t.commandArguments[0],t.commandArguments[2]):"drawElements"===t.name&&t.commandArguments.length>=2||"drawElementsInstanced"===t.name&&t.commandArguments.length>=2||"drawElementsInstancedANGLE"===t.name&&t.commandArguments.length>=2?this.appendToPrimitives(n,t.commandArguments[0],t.commandArguments[1]):"drawRangeElements"===t.name&&t.commandArguments.length>=4&&this.appendToPrimitives(n,t.commandArguments[0],t.commandArguments[3]);t.total=n.total,t.triangles=n.totalTriangles,t.triangleStrip=n.totalTriangleStrip,t.triangleFan=n.totalTriangleFan,t.lines=n.totalLines,t.lineStrip=n.totalLineStrip,t.lineLoop=n.totalLineLoop,t.points=n.totalPoints}appendToPrimitives(e,t,n){t===d.POINTS.value?e.totalPoints+=n:t===d.LINES.value?e.totalLines+=n:t===d.LINE_STRIP.value?e.totalLineStrip+=n:t===d.LINE_LOOP.value?e.totalLineLoop+=n:t===d.TRIANGLES.value?e.totalTriangles+=n:t===d.TRIANGLE_STRIP.value?e.totalTriangleStrip+=n:t===d.TRIANGLE_FAN.value&&(e.totalTriangleFan+=n),e.total+=n}}g.analyserName="Primitives";class f{constructor(e){this.contextInformation=e,this.analysers=[],this.initAnalysers()}appendAnalyses(e){for(const t in this.analysers)this.analysers.hasOwnProperty(t)&&this.analysers[t].appendAnalysis(e)}initAnalysers(){this.analysers.push(new c(this.contextInformation),new h(this.contextInformation),new g(this.contextInformation))}}class E{static getWebGlObjectTag(e){return e[E.SPECTOROBJECTTAGKEY]}static attachWebGlObjectTag(e,t){t.displayText=E.stringifyWebGlObjectTag(t),e[E.SPECTOROBJECTTAGKEY]=t}static stringifyWebGlObjectTag(e){return e?`${e.typeName} - ID: ${e.id}`:"No tag available."}}E.SPECTOROBJECTTAGKEY="__SPECTOR_Object_TAG";class v{constructor(){this.id=0}get type(){return window[this.typeName]||null}tagWebGlObject(e){if(!this.type)return;let t;if(!e)return t;if(t=E.getWebGlObjectTag(e),t)return t;if(e instanceof this.type){const n=this.getNextId();return t={typeName:this.typeName,id:n},E.attachWebGlObjectTag(e,t),t}return t}getNextId(){return this.id++}}class _{constructor(e){this.options=e}createCapture(e,t,n){const i=class{static getStackTrace(e=0,t=0){const n=[];try{throw new Error("Errorator.")}catch(e){if(e.stack){const t=e.stack.split("\n");for(let e=0,i=t.length;e0;t++)n.shift();for(let e=0;e0;e++)n.pop()}return n}}.getStackTrace(4,1),r=0===e.name.indexOf("uniform")?this.stringifyUniform(e.arguments):this.stringify(e.arguments,e.result),s={id:t,startTime:e.startTime,commandEndTime:e.endTime,endTime:0,name:e.name,commandArguments:e.arguments,result:e.result,stackTrace:i,status:0,marker:n,text:r};this.transformCapture(s);for(let e=0;e50&&(s.commandArguments[e]="Array Length: "+t.length)}if(s.commandArguments){const e=[];for(let t=0;t0&&(n+=": "+this.stringifyArgs(e).join(", ")),null!=t&&(n+=" -> "+this.stringifyResult(t)),n}stringifyUniform(e){let t=this.spiedCommandName;if(e&&e.length>0){const n=[];n.push(this.stringifyValue(e[0]));for(let t=1;t0&&"number"==typeof s)i.push(null!==(n=null===(t=e[r])||void 0===t?void 0:t.toFixed(0))&&void 0!==n?n:"0");else{const e=this.stringifyValue(s);i.push(e)}}return i}}C.commandName="bufferSubData";class A{static storeOriginFunction(e,t){if(!e)return;if(!e[t])return;const n=this.getOriginFunctionName(t);e[n]||(e[n]=e[t])}static resetOriginFunction(e,t){if(!e)return;if(!e[t])return;const n=this.getOriginFunctionName(t);e[n]&&(e[t]=e[n],delete e[n])}static storePrototypeOriginFunction(e,t){if(!e)return;if(!e.prototype[t])return;const n=this.getOriginFunctionName(t);e.prototype[n]||(e.prototype[n]=e.prototype[t])}static executePrototypeOriginFunction(e,t,n,i){if(!e)return;const r=this.getOriginFunctionName(n);return t.prototype[r]?(e[r]||(e[r]=t.prototype[r]),this.executeFunction(e,r,i)):void 0}static executeOriginFunction(e,t,n){if(!e)return;const i=this.getOriginFunctionName(t);return e[i]?this.executeFunction(e,i,n):void 0}static executeFunction(e,t,n){const i=n;if(void 0===i||0===i.length)return e[t]();switch(i.length){case 1:return e[t](i[0]);case 2:return e[t](i[0],i[1]);case 3:return e[t](i[0],i[1],i[2]);case 4:return e[t](i[0],i[1],i[2],i[3]);case 5:return e[t](i[0],i[1],i[2],i[3],i[4]);case 6:return e[t](i[0],i[1],i[2],i[3],i[4],i[5]);case 7:return e[t](i[0],i[1],i[2],i[3],i[4],i[5],i[6]);case 8:return e[t](i[0],i[1],i[2],i[3],i[4],i[5],i[6],i[7]);case 9:return e[t](i[0],i[1],i[2],i[3],i[4],i[5],i[6],i[7],i[8]);case 10:return e[t](i[0],i[1],i[2],i[3],i[4],i[5],i[6],i[7],i[8],i[9]);case 11:return e[t](i[0],i[1],i[2],i[3],i[4],i[5],i[6],i[7],i[8],i[9],i[10]);case 12:return e[t](i[0],i[1],i[2],i[3],i[4],i[5],i[6],i[7],i[8],i[9],i[10],i[11]);case 13:return e[t](i[0],i[1],i[2],i[3],i[4],i[5],i[6],i[7],i[8],i[9],i[10],i[11],i[12]);case 14:return e[t](i[0],i[1],i[2],i[3],i[4],i[5],i[6],i[7],i[8],i[9],i[10],i[11],i[12],i[13]);case 15:return e[t](i[0],i[1],i[2],i[3],i[4],i[5],i[6],i[7],i[8],i[9],i[10],i[11],i[12],i[13],i[14]);case 16:return e[t](i[0],i[1],i[2],i[3],i[4],i[5],i[6],i[7],i[8],i[9],i[10],i[11],i[12],i[13],i[14],i[15]);case 17:return e[t](i[0],i[1],i[2],i[3],i[4],i[5],i[6],i[7],i[8],i[9],i[10],i[11],i[12],i[13],i[14],i[15],i[16]);case 18:return e[t](i[0],i[1],i[2],i[3],i[4],i[5],i[6],i[7],i[8],i[9],i[10],i[11],i[12],i[13],i[14],i[15],i[16],i[17]);case 19:return e[t](i[0],i[1],i[2],i[3],i[4],i[5],i[6],i[7],i[8],i[9],i[10],i[11],i[12],i[13],i[14],i[15],i[16],i[17],i[18]);case 20:return e[t](i[0],i[1],i[2],i[3],i[4],i[5],i[6],i[7],i[8],i[9],i[10],i[11],i[12],i[13],i[14],i[15],i[16],i[17],i[18],i[19]);default:return e[t].apply(e,i)}}static getOriginFunctionName(e){return this.originFunctionPrefix+e}}A.originFunctionPrefix="__SPECTOR_Origin_";class R extends _{get spiedCommandName(){return R.commandName}stringifyArgs(e){const t=[];if(e.length>0){const n=e[0],i=this.stringifyValue(n);t.push(i)}if(e.length>1){const n=""+e[1];t.push(n)}return e.length>2&&t.push(e[2]),t}}R.commandName="bindAttribLocation";class S extends _{get spiedCommandName(){return S.commandName}stringifyArgs(e){const t=[],n=this.options.context.getParameter(d.READ_FRAMEBUFFER_BINDING.value),i=this.options.tagWebGlObject(n);t.push("READ FROM: "+this.stringifyValue(i));const r=this.options.context.getParameter(d.DRAW_FRAMEBUFFER_BINDING.value),s=this.options.tagWebGlObject(r);t.push("WRITE TO: "+this.stringifyValue(s));for(let n=0;n<8;n++)t.push(e[n]);return(e[8]&d.DEPTH_BUFFER_BIT.value)===d.DEPTH_BUFFER_BIT.value&&t.push(d.DEPTH_BUFFER_BIT.name),(e[8]&d.STENCIL_BUFFER_BIT.value)===d.STENCIL_BUFFER_BIT.value&&t.push(d.STENCIL_BUFFER_BIT.name),(e[8]&d.COLOR_BUFFER_BIT.value)===d.COLOR_BUFFER_BIT.value&&t.push(d.COLOR_BUFFER_BIT.name),t.push(d.stringifyWebGlConstant(e[9],"blitFrameBuffer")),t}}S.commandName="blitFrameBuffer";class T extends _{get spiedCommandName(){return T.commandName}stringifyArgs(e){const t=[];return(e[0]&d.DEPTH_BUFFER_BIT.value)===d.DEPTH_BUFFER_BIT.value&&t.push(d.DEPTH_BUFFER_BIT.name),(e[0]&d.STENCIL_BUFFER_BIT.value)===d.STENCIL_BUFFER_BIT.value&&t.push(d.STENCIL_BUFFER_BIT.name),(e[0]&d.COLOR_BUFFER_BIT.value)===d.COLOR_BUFFER_BIT.value&&t.push(d.COLOR_BUFFER_BIT.name),t}}T.commandName="clear";const b=["lineWidth"];class w extends _{constructor(e,t){super(e),this.internalSpiedCommandName=t,this.isDeprecated=b.indexOf(this.spiedCommandName)>-1}get spiedCommandName(){return this.internalSpiedCommandName}transformCapture(e){this.isDeprecated&&(e.status=50)}}class x extends _{get spiedCommandName(){return x.commandName}stringifyArgs(e){const t=[];return t.push(e[0]),t}}x.commandName="disableVertexAttribArray";class y extends _{get spiedCommandName(){return y.commandName}stringifyArgs(e){const t=[];return t.push(d.stringifyWebGlConstant(e[0],"drawArrays")),t.push(e[1]+" indices"),t.push(e[2]),t}}y.commandName="drawArrays";class L extends _{get spiedCommandName(){return L.commandName}stringifyArgs(e){const t=[];return t.push(d.stringifyWebGlConstant(e[0],"drawArraysInstanced")),t.push(e[1]),t.push(e[2]),t.push(e[3]),t}}L.commandName="drawArraysInstanced";class I extends _{get spiedCommandName(){return I.commandName}stringifyArgs(e){const t=[];return t.push(d.stringifyWebGlConstant(e[0],"drawArraysInstancedANGLE")),t.push(e[1]),t.push(e[2]),t.push(e[3]),t}}I.commandName="drawArraysInstancedANGLE";class F extends _{get spiedCommandName(){return F.commandName}stringifyArgs(e){const t=[];return t.push(d.stringifyWebGlConstant(e[0],"drawElements")),t.push(e[1]+" indices"),t.push(d.stringifyWebGlConstant(e[2],"drawElements")),t.push(e[3]),t}}F.commandName="drawElements";class N extends _{get spiedCommandName(){return N.commandName}stringifyArgs(e){const t=[];return t.push(d.stringifyWebGlConstant(e[0],"drawElementsInstancedANGLE")),t.push(e[1]+" indices"),t.push(d.stringifyWebGlConstant(e[2],"drawElementsInstancedANGLE")),t.push(e[3]),t.push(e[4]),t}}N.commandName="drawElementsInstancedANGLE";class M extends _{get spiedCommandName(){return M.commandName}stringifyArgs(e){const t=[];return t.push(d.stringifyWebGlConstant(e[0],"drawElementsInstanced")),t.push(e[1]+" indices"),t.push(d.stringifyWebGlConstant(e[2],"drawElementsInstanced")),t.push(e[3]),t.push(e[4]),t}}M.commandName="drawElementsInstanced";class O extends _{get spiedCommandName(){return O.commandName}stringifyArgs(e){const t=[];return t.push(d.stringifyWebGlConstant(e[0],"drawRangeElements")),t.push(e[1]),t.push(e[2]),t.push(e[3]),t.push(d.stringifyWebGlConstant(e[4],"drawRangeElements")),t.push(e[5]),t}}O.commandName="drawRangeElements";class B extends _{get spiedCommandName(){return B.commandName}stringifyResult(e){if(e)return`name: ${e.name}, size: ${e.size}, type: ${e.type}`}}B.commandName="getActiveAttrib";class $ extends _{get spiedCommandName(){return $.commandName}stringifyResult(e){if(e)return`name: ${e.name}, size: ${e.size}, type: ${e.type}`}}$.commandName="getActiveUniform";class P extends _{get spiedCommandName(){return P.commandName}stringifyResult(e){var t;if(null!=e)return null!==(t=null==e?void 0:e.toFixed(0))&&void 0!==t?t:"0"}}P.commandName="getAttribLocation";class k extends _{get spiedCommandName(){return k.commandName}stringifyResult(e){return e?"true":"false"}}k.commandName="getExtension";class D extends _{get spiedCommandName(){return D.commandName}stringifyResult(e){if(!e)return"null";const t=E.getWebGlObjectTag(e);return t?t.displayText:e}}D.commandName="getParameter";class U extends _{get spiedCommandName(){return U.commandName}stringifyResult(e){if(e)return`min: ${e.rangeMin}, max: ${e.rangeMax}, precision: ${e.precision}`}}U.commandName="getShaderPrecisionFormat";class G extends _{get spiedCommandName(){return G.commandName}stringifyResult(e){if(e)return`name: ${e.name}, size: ${e.size}, type: ${e.type}`}}G.commandName="getTransformFeedbackVarying";class W extends _{get spiedCommandName(){return W.commandName}stringifyArgs(e){const t=[];return t.push(d.stringifyWebGlConstant(e[0],"multiDrawArraysInstancedBaseInstanceWEBGL")),t.push(`drawCount=${e[9]}`),t.push(e[2]),t.push(e[4]),t.push(e[6]),t.push(e[8]),t}}W.commandName="multiDrawArraysInstancedBaseInstanceWEBGL";class V extends _{get spiedCommandName(){return V.commandName}stringifyArgs(e){const t=[];return t.push(d.stringifyWebGlConstant(e[0],"drawArrays")),t.push(`drawCount=${e[7]}`),t.push(e[2]),t.push(e[4]),t.push(e[6]),t}}V.commandName="multiDrawArraysInstancedWEBGL";class H extends _{get spiedCommandName(){return H.commandName}stringifyArgs(e){const t=[];return t.push(d.stringifyWebGlConstant(e[0],"drawArrays")),t.push(`drawCount=${e[5]}`),t.push(e[2]),t.push(e[4]),t}}H.commandName="multiDrawArraysWEBGL";class X extends _{get spiedCommandName(){return X.commandName}stringifyArgs(e){const t=[];return t.push(d.stringifyWebGlConstant(e[0],"drawArrays")),t.push(d.stringifyWebGlConstant(e[3],"drawArrays")),t.push(`drawCount=${e[11]}`),t.push(e[2]),t.push(e[4]),t.push(e[6]),t.push(e[8]),t.push(e[10]),t}}X.commandName="multiDrawElementsInstancedBaseVertexBaseInstanceWEBGL";class z extends _{get spiedCommandName(){return z.commandName}stringifyArgs(e){const t=[];return t.push(d.stringifyWebGlConstant(e[0],"drawArrays")),t.push(d.stringifyWebGlConstant(e[3],"drawArrays")),t.push(`drawCount=${e[8]}`),t.push(e[2]),t.push(e[5]),t.push(e[7]),t}}z.commandName="multiDrawElementsInstancedWEBGL";class K extends _{get spiedCommandName(){return K.commandName}stringifyArgs(e){const t=[];return t.push(d.stringifyWebGlConstant(e[0],"drawArrays")),t.push(d.stringifyWebGlConstant(e[3],"drawArrays")),t.push(`drawCount=${e[6]}`),t.push(e[2]),t.push(e[5]),t}}K.commandName="multiDrawElementsWEBGL";class j extends _{get spiedCommandName(){return j.commandName}stringifyArgs(e){const t=[];return t.push(d.stringifyWebGlConstant(e[0],"drawArraysInstanced")),t.push(e[1]),t.push(e[2]),t.push(e[3]),t.push(`baseInstance = ${e[4]}`),t}}j.commandName="drawArraysInstancedBaseInstanceWEBGL";class Y extends _{get spiedCommandName(){return Y.commandName}stringifyArgs(e){const t=[];return t.push(d.stringifyWebGlConstant(e[0],"drawElementsInstanced")),t.push(e[1]+" indices"),t.push(d.stringifyWebGlConstant(e[2],"drawElementsInstanced")),t.push(e[3]),t.push(e[4]),t.push(`baseVertex = ${e[5]}`),t.push(`baseInstance = ${e[6]}`),t}}Y.commandName="drawElementsInstancedBaseVertexBaseInstanceWEBGL";class q extends _{get spiedCommandName(){return q.commandName}stringifyArgs(e){var t,n;const i=[];for(let r=0;r<4;r++)i.push(null!==(n=null===(t=e[r])||void 0===t?void 0:t.toFixed(0))&&void 0!==n?n:"0");return i}}function Z(e){return null==e?"":`${e.toFixed(0)} (0b${(e>>>0).toString(2)})`}q.commandName="scissor";class Q extends _{get spiedCommandName(){return Q.commandName}stringifyArgs(e){const t=[];return t.push(Z(e[0])),t}}Q.commandName="stencilMask";class J extends _{get spiedCommandName(){return J.commandName}stringifyArgs(e){const t=[];return t.push(d.stringifyWebGlConstant(e[0],"stencilMaskSeparate")),t.push(Z(e[1])),t}}J.commandName="stencilMaskSeparate";class ee extends _{get spiedCommandName(){return ee.commandName}stringifyArgs(e){const t=[];return t.push(d.stringifyWebGlConstant(e[0],"stencilFunc")),t.push(Z(e[1])),t.push(Z(e[2])),t}}ee.commandName="stencilFunc";class te extends _{get spiedCommandName(){return te.commandName}stringifyArgs(e){const t=[];return t.push(d.stringifyWebGlConstant(e[0],"stencilFuncSeparate")),t.push(d.stringifyWebGlConstant(e[1],"stencilFuncSeparate")),t.push(Z(e[2])),t.push(Z(e[3])),t}}te.commandName="stencilFuncSeparate";class ne extends _{get spiedCommandName(){return ne.commandName}stringifyArgs(e){const t=[];return t.push(e[0]),t.push(e[1]),t.push(d.stringifyWebGlConstant(e[2],"vertexAttribPointer")),t.push(e[3]),t.push(e[4]),t.push(e[5]),t}}ne.commandName="vertexAttribPointer";class ie extends _{get spiedCommandName(){return ie.commandName}stringifyArgs(e){const t=[];for(let n=0;n<4;n++)t.push(e[n].toFixed(0));return t}}ie.commandName="viewport";class re extends _{get spiedCommandName(){return re.commandName}stringifyArgs(e){const t=[];return t.push(e[0]),t}}re.commandName="enableVertexAttribArray";class se{constructor(e){this.spiedCommandName=e.spiedCommandName,this.spiedCommandRunningContext=e.spiedCommandRunningContext,this.spiedCommand=this.spiedCommandRunningContext[this.spiedCommandName],A.storeOriginFunction(this.spiedCommandRunningContext,this.spiedCommandName),this.callback=e.callback,this.commandOptions={context:e.context,contextVersion:e.contextVersion,extensions:e.extensions,toggleCapture:e.toggleCapture},this.initCustomCommands(),this.initCommand()}spy(){this.spiedCommandRunningContext[this.spiedCommandName]=this.overloadedCommand}unSpy(){this.spiedCommandRunningContext[this.spiedCommandName]=this.spiedCommand}createCapture(e,t,n){return this.command.createCapture(e,t,n)}initCommand(){se.customCommandsConstructors[this.spiedCommandName]?this.command=se.customCommandsConstructors[this.spiedCommandName](this.commandOptions):this.command=new w(this.commandOptions,this.spiedCommandName),this.overloadedCommand=this.getSpy()}getSpy(){const e=this;return function(){const t=a.now,n=A.executeOriginFunction(e.spiedCommandRunningContext,e.spiedCommandName,arguments),i=a.now,r={name:e.spiedCommandName,arguments,result:n,startTime:t,endTime:i};return e.callback(e,r),n}}initCustomCommands(){se.customCommandsConstructors||(se.customCommandsConstructors={[R.commandName]:e=>new R(e),[S.commandName]:e=>new S(e),[C.commandName]:e=>new C(e),[T.commandName]:e=>new T(e),[x.commandName]:e=>new x(e),[y.commandName]:e=>new y(e),[L.commandName]:e=>new L(e),[I.commandName]:e=>new I(e),[F.commandName]:e=>new F(e),[M.commandName]:e=>new M(e),[N.commandName]:e=>new N(e),[O.commandName]:e=>new O(e),[B.commandName]:e=>new B(e),[$.commandName]:e=>new $(e),[P.commandName]:e=>new P(e),[k.commandName]:e=>new k(e),[D.commandName]:e=>new D(e),[U.commandName]:e=>new U(e),[G.commandName]:e=>new G(e),[W.commandName]:e=>new W(e),[V.commandName]:e=>new V(e),[H.commandName]:e=>new H(e),[X.commandName]:e=>new X(e),[z.commandName]:e=>new z(e),[K.commandName]:e=>new K(e),[j.commandName]:e=>new j(e),[Y.commandName]:e=>new Y(e),[q.commandName]:e=>new q(e),[Q.commandName]:e=>new Q(e),[J.commandName]:e=>new J(e),[ee.commandName]:e=>new ee(e),[te.commandName]:e=>new te(e),[ne.commandName]:e=>new ne(e),[ie.commandName]:e=>new ie(e),[re.commandName]:e=>new re(e)})}}class oe{constructor(e){this.options=e,this.context=e.context,this.contextVersion=e.contextVersion,this.extensions=e.extensions,this.toggleCapture=e.toggleCapture,this.consumeCommands=this.getConsumeCommands(),this.changeCommandsByState=this.getChangeCommandsByState(),this.commandNameToStates=this.getCommandNameToStates()}get requireStartAndStopStates(){return!0}startCapture(e,t,n){return this.quickCapture=t,this.fullCapture=n,this.capturedCommandsByState={},e&&this.requireStartAndStopStates&&(this.currentState={},this.readFromContextNoSideEffects()),this.copyCurrentStateToPrevious(),this.currentState={},this.previousState}stopCapture(){return this.requireStartAndStopStates&&this.readFromContextNoSideEffects(),this.analyse(void 0),this.currentState}registerCallbacks(e){for(const t in this.changeCommandsByState)if(this.changeCommandsByState.hasOwnProperty(t))for(const n of this.changeCommandsByState[t])e[n]=e[n]||[],e[n].push(this.onChangeCommand.bind(this));for(const t of this.consumeCommands)e[t]=e[t]||[],e[t].push(this.onConsumeCommand.bind(this))}getStateData(){return this.currentState}getConsumeCommands(){return[]}getChangeCommandsByState(){return{}}copyCurrentStateToPrevious(){this.currentState&&(this.previousState=this.currentState)}onChangeCommand(e){const t=this.commandNameToStates[e.name];for(const n of t){if(!this.isValidChangeCommand(e,n))return;this.capturedCommandsByState[n]=this.capturedCommandsByState[n]||[],this.capturedCommandsByState[n].push(e)}}isValidChangeCommand(e,t){return!0}onConsumeCommand(e){this.isValidConsumeCommand(e)&&(this.readFromContextNoSideEffects(),this.analyse(e),this.storeCommandIds(),e[this.stateName]=this.currentState,this.startCapture(!1,this.quickCapture,this.fullCapture))}isValidConsumeCommand(e){return this.lastCommandName=null==e?void 0:e.name,!0}analyse(e){for(const t in this.capturedCommandsByState)if(this.capturedCommandsByState.hasOwnProperty(t)){const n=this.capturedCommandsByState[t],i=n.length-1;if(i>=0)if(e){for(let t=0;t1&&this.parameters.push(this.getWebgl2Parameters());const e={};for(let t=1;t<=this.contextVersion&&!(t>this.parameters.length);t++)if(this.parameters[t-1])for(const n of this.parameters[t-1])if(n.changeCommands)for(const t of n.changeCommands)e[n.constant.name]=e[n.constant.name]||[],e[n.constant.name].push(t);return e}readFromContext(){for(let e=1;e<=this.contextVersion&&!(e>this.parameters.length);e++)for(const t of this.parameters[e-1]){const e=this.readParameterFromContext(t);if(null==e){const n=this.stringifyParameterValue(e,t);this.currentState[t.constant.name]=n;continue}const n=E.getWebGlObjectTag(e);if(n)this.currentState[t.constant.name]=n;else{const n=this.stringifyParameterValue(e,t);this.currentState[t.constant.name]=n}}}readParameterFromContext(e){return e.constant.extensionName&&!this.extensions[e.constant.extensionName]?`Extension ${e.constant.extensionName} is unavailable.`:this.context.getParameter(e.constant.value)}stringifyParameterValue(e,t){if(null===e)return"null";if(void 0===e)return"undefined";if(30===t.returnType)return Z(e);if("number"==typeof e&&d.isWebGlConstant(e)){if(20===t.returnType){const n=t.changeCommands&&t.changeCommands[0]||"";return d.stringifyWebGlConstant(e,n)}return e}if(e.length&&"string"!=typeof e){const t=[];for(let n=0;n1?i=this.context.getFramebufferAttachmentParameter(t,n,d.FRAMEBUFFER_ATTACHMENT_STENCIL_SIZE.value):this.context.getFramebufferAttachmentParameter(t,n,d.FRAMEBUFFER_ATTACHMENT_OBJECT_NAME.value)===d.RENDERBUFFER.value&&(i=e.getRenderbufferParameter(e.RENDERBUFFER,e.RENDERBUFFER_STENCIL_SIZE))):i=this.readParameterFromContext({constant:d.STENCIL_BITS}),this.currentState[d.STENCIL_BITS.name]=""+i}isValidChangeCommand(e,t){return"enable"===e.name||"disable"===e.name?e.commandArguments[0]===d.STENCIL_TEST.value:"stencilOp"===e.name||"stencilOpSeparate"===e.name?_e.stencilOpStates.indexOf(e.commandArguments[0])>0:"stencilFunc"===e.name||"stencilFuncSeparate"===e.name?_e.stencilFuncStates.indexOf(e.commandArguments[0])>0:"stencilMask"!==e.name&&"stencilMaskSeparate"!==e.name||_e.stencilMaskStates.indexOf(e.commandArguments[0])>0}getConsumeCommands(){return u}isStateEnable(e,t){return this.context.isEnabled(d.STENCIL_TEST.value)}}_e.stateName="StencilState",_e.stencilOpStates=[d.STENCIL_BACK_FAIL.value,d.STENCIL_BACK_PASS_DEPTH_FAIL.value,d.STENCIL_BACK_PASS_DEPTH_PASS.value,d.STENCIL_FAIL.value,d.STENCIL_PASS_DEPTH_FAIL.value,d.STENCIL_PASS_DEPTH_PASS.value],_e.stencilFuncStates=[d.STENCIL_BACK_FUNC.value,d.STENCIL_BACK_REF.value,d.STENCIL_BACK_VALUE_MASK.value,d.STENCIL_FUNC.value,d.STENCIL_REF.value,d.STENCIL_VALUE_MASK.value],_e.stencilMaskStates=[d.STENCIL_BACK_WRITEMASK.value,d.STENCIL_WRITEMASK.value];class Ce{static isSupportedCombination(e,t,n){return e=e||d.UNSIGNED_BYTE.value,((t=t||d.RGBA.value)===d.RGB.value||t===d.RGBA.value)&&(n===d.RGB.value||n===d.RGBA.value||n===d.RGBA8.value||n===d.RGBA16F.value||n===d.RGBA32F.value||n===d.RGB16F.value||n===d.RGB32F.value||n===d.R11F_G11F_B10F.value||n===d.SRGB8.value||n===d.SRGB8_ALPHA8.value)&&this.isSupportedComponentType(e)}static readPixels(e,t,n,i,r,s){e.getError(),s===d.UNSIGNED_NORMALIZED.value&&(s=d.UNSIGNED_BYTE.value);const o=i*r*4;let a;if(s===d.UNSIGNED_BYTE.value?a=new Uint8Array(o):(s=d.FLOAT.value,a=new Float32Array(o)),e.readPixels(t,n,i,r,e.RGBA,s,a),e.getError())return;if(s===d.UNSIGNED_BYTE.value)return a;const l=new Uint8Array(i*r*4);for(let e=0;e1){const e=this.context.getParameter(d.MAX_DRAW_BUFFERS.value);for(let n=0;n1?this.context.getFramebufferAttachmentParameter(a,n.value,d.FRAMEBUFFER_ATTACHMENT_COMPONENT_TYPE.value):d.UNSIGNED_BYTE.value;l===d.RENDERBUFFER.value?this.readFrameBufferAttachmentFromRenderBuffer(e,t,n,i,r,s,o,a,u,c):l===d.TEXTURE.value&&this.readFrameBufferAttachmentFromTexture(e,t,n,i,r,s,o,a,u,c)}readFrameBufferAttachmentFromRenderBuffer(e,t,n,i,r,s,o,a,l,c){let u=0,h=0;if(c.__SPECTOR_Object_CustomData){const e=c.__SPECTOR_Object_CustomData;if(s=e.width,o=e.height,u=e.samples,h=e.internalFormat,!u&&!Ce.isSupportedCombination(l,d.RGBA.value,h))return}else s+=i,o+=r;if(i=r=0,u){const a=e,c=e.createRenderbuffer(),u=e.getParameter(e.RENDERBUFFER_BINDING);e.bindRenderbuffer(e.RENDERBUFFER,c),e.renderbufferStorage(e.RENDERBUFFER,h,s,o),e.bindRenderbuffer(e.RENDERBUFFER,u),e.bindFramebuffer(d.FRAMEBUFFER.value,this.captureFrameBuffer),e.framebufferRenderbuffer(d.FRAMEBUFFER.value,d.COLOR_ATTACHMENT0.value,d.RENDERBUFFER.value,c);const m=a.getParameter(a.READ_FRAMEBUFFER_BINDING),p=a.getParameter(a.DRAW_FRAMEBUFFER_BINDING);a.bindFramebuffer(a.READ_FRAMEBUFFER,t),a.bindFramebuffer(a.DRAW_FRAMEBUFFER,this.captureFrameBuffer),a.blitFramebuffer(0,0,s,o,0,0,s,o,e.COLOR_BUFFER_BIT,e.NEAREST),a.bindFramebuffer(d.FRAMEBUFFER.value,this.captureFrameBuffer),a.bindFramebuffer(a.READ_FRAMEBUFFER,m),a.bindFramebuffer(a.DRAW_FRAMEBUFFER,p),this.context.checkFramebufferStatus(d.FRAMEBUFFER.value)===d.FRAMEBUFFER_COMPLETE.value&&this.getCapture(e,n.name,i,r,s,o,0,0,l),e.bindFramebuffer(d.FRAMEBUFFER.value,t),e.deleteRenderbuffer(c)}else e.bindFramebuffer(d.FRAMEBUFFER.value,this.captureFrameBuffer),e.framebufferRenderbuffer(d.FRAMEBUFFER.value,d.COLOR_ATTACHMENT0.value,d.RENDERBUFFER.value,c),this.context.checkFramebufferStatus(d.FRAMEBUFFER.value)===d.FRAMEBUFFER_COMPLETE.value&&this.getCapture(e,n.name,i,r,s,o,0,0,l),e.bindFramebuffer(d.FRAMEBUFFER.value,t)}readFrameBufferAttachmentFromTexture(e,t,n,i,r,s,o,a,l,c){let u=0;this.contextVersion>1&&(u=this.context.getFramebufferAttachmentParameter(a,n.value,d.FRAMEBUFFER_ATTACHMENT_TEXTURE_LAYER.value));const h=this.context.getFramebufferAttachmentParameter(a,n.value,d.FRAMEBUFFER_ATTACHMENT_TEXTURE_LEVEL.value),m=this.context.getFramebufferAttachmentParameter(a,n.value,d.FRAMEBUFFER_ATTACHMENT_TEXTURE_CUBE_MAP_FACE.value);m>0?p[m].name:d.TEXTURE_2D.name;let g=!1,f=l;if(c.__SPECTOR_Object_CustomData){const e=c.__SPECTOR_Object_CustomData;if(s=e.width,o=e.height,void 0!==e.type&&(f=e.type),g=e.target===d.TEXTURE_2D_ARRAY.name,!Ce.isSupportedCombination(e.type,e.format,e.internalFormat))return}else s+=i,o+=r;i=r=0,e.bindFramebuffer(d.FRAMEBUFFER.value,this.captureFrameBuffer),u>0||g?e.framebufferTextureLayer(d.FRAMEBUFFER.value,d.COLOR_ATTACHMENT0.value,c,h,u):e.framebufferTexture2D(d.FRAMEBUFFER.value,d.COLOR_ATTACHMENT0.value,m||d.TEXTURE_2D.value,c,h),this.context.checkFramebufferStatus(d.FRAMEBUFFER.value)===d.FRAMEBUFFER_COMPLETE.value&&this.getCapture(e,n.name,i,r,s,o,m,u,f),e.bindFramebuffer(d.FRAMEBUFFER.value,t)}getCapture(e,t,n,i,r,o,a,l,c){r=Math.floor(r),o=Math.floor(o);const u={attachmentName:t,src:null,textureCubeMapFace:a?p[a].name:null,textureLayer:l};if(!this.quickCapture)try{const t=Ce.readPixels(e,n,i,r,o,c);if(t){this.workingCanvas.width=r,this.workingCanvas.height=o;const e=this.workingContext2D.createImageData(r,o);if(e.data.set(t),this.workingContext2D.putImageData(e,0,0),this.fullCapture)this.captureCanvas.width=this.workingCanvas.width,this.captureCanvas.height=this.workingCanvas.height;else{const e=r/o;e<1?(this.captureCanvas.width=Ae.captureBaseSize*e,this.captureCanvas.height=Ae.captureBaseSize):e>1?(this.captureCanvas.width=Ae.captureBaseSize,this.captureCanvas.height=Ae.captureBaseSize/e):(this.captureCanvas.width=Ae.captureBaseSize,this.captureCanvas.height=Ae.captureBaseSize)}this.captureCanvas.width=Math.max(this.captureCanvas.width,1),this.captureCanvas.height=Math.max(this.captureCanvas.height,1),this.captureContext2D.globalCompositeOperation="copy",this.captureContext2D.scale(1,-1),this.captureContext2D.translate(0,-this.captureCanvas.height),this.captureContext2D.drawImage(this.workingCanvas,0,0,r,o,0,0,this.captureCanvas.width,this.captureCanvas.height),this.captureContext2D.setTransform(1,0,0,1,0,0),this.captureContext2D.globalCompositeOperation="source-over",u.src=this.captureCanvas.toDataURL()}}catch(e){s.warn("Spector can not capture the visual state: "+e)}this.currentState.Attachments.push(u)}analyse(e){}}Ae.stateName="VisualState",Ae.captureBaseSize=256;class Re{constructor(e){this.context=e.context,this.captureFrameBuffer=e.context.createFramebuffer(),this.workingCanvas=document.createElement("canvas"),this.workingContext2D=this.workingCanvas.getContext("2d"),this.captureCanvas=document.createElement("canvas"),this.captureContext2D=this.captureCanvas.getContext("2d"),this._setSmoothing(!0)}appendTextureState(e,t,n=null,i){if(!t)return;const r=t.__SPECTOR_Object_CustomData;if(r&&(this.fullCapture=i,r.type&&(e.textureType=this.getWebGlConstant(r.type)),r.format&&(e.format=this.getWebGlConstant(r.format)),r.internalFormat&&(e.internalFormat=this.getWebGlConstant(r.internalFormat)),e.width=r.width,e.height=r.height,r.depth&&(e.depth=r.depth),n)){const i="NEAREST"===e.samplerMagFilter||"NEAREST"===e.magFilter;e.visual=this.getTextureVisualState(n,t,r,i)}}getTextureVisualState(e,t,n,i){try{const r=this.context,s={};if(!Ce.isSupportedCombination(n.type,n.format,n.internalFormat))return s;const o=this.context.getParameter(d.FRAMEBUFFER_BINDING.value);r.bindFramebuffer(d.FRAMEBUFFER.value,this.captureFrameBuffer);try{const o=0,a=n.width,l=n.height;if(e===d.TEXTURE_3D&&n.depth){const e=r;for(let c=0;c2&&c2&&c1?(this.captureCanvas.width=Ae.captureBaseSize,this.captureCanvas.height=Ae.captureBaseSize/e):(this.captureCanvas.width=Ae.captureBaseSize,this.captureCanvas.height=Ae.captureBaseSize)}return this.captureCanvas.width=Math.max(this.captureCanvas.width,1),this.captureCanvas.height=Math.max(this.captureCanvas.height,1),this.captureContext2D.globalCompositeOperation="copy",this.captureContext2D.scale(1,-1),this.captureContext2D.translate(0,-this.captureCanvas.height),this._setSmoothing(!o),this.captureContext2D.drawImage(this.workingCanvas,0,0,i,r,0,0,this.captureCanvas.width,this.captureCanvas.height),this.captureContext2D.setTransform(1,0,0,1,0,0),this.captureContext2D.globalCompositeOperation="source-over",this.captureCanvas.toDataURL()}catch(e){}}getWebGlConstant(e){const t=p[e];return t?t.name:e+""}_setSmoothing(e){this.captureContext2D.imageSmoothingEnabled=e,this.captureContext2D.mozImageSmoothingEnabled=e,this.captureContext2D.oImageSmoothingEnabled=e,this.captureContext2D.webkitImageSmoothingEnabled=e,this.captureContext2D.msImageSmoothingEnabled=e}}Re.captureBaseSize=64,Re.cubeMapFaces=[d.TEXTURE_CUBE_MAP_POSITIVE_X,d.TEXTURE_CUBE_MAP_POSITIVE_Y,d.TEXTURE_CUBE_MAP_POSITIVE_Z,d.TEXTURE_CUBE_MAP_NEGATIVE_X,d.TEXTURE_CUBE_MAP_NEGATIVE_Y,d.TEXTURE_CUBE_MAP_NEGATIVE_Z];class Se{constructor(e){this.context=e.context}getUboValue(e,t,n,i){const r=Se.uboTypes[i];if(!r)return;const s=new r.arrayBufferView(n*r.lengthMultiplier),o=this.context,a=o.getIndexedParameter(d.UNIFORM_BUFFER_BINDING.value,e);if(a){const n=o.getIndexedParameter(d.UNIFORM_BUFFER_START.value,e),i=o.getParameter(d.UNIFORM_BUFFER_BINDING.value);try{o.bindBuffer(d.UNIFORM_BUFFER.value,a),o.getBufferSubData(d.UNIFORM_BUFFER.value,n+t,s)}catch(e){return}i&&o.bindBuffer(d.UNIFORM_BUFFER.value,i)}return Array.prototype.slice.call(s)}}Se.uboTypes={[d.BOOL.value]:{arrayBufferView:Uint8Array,lengthMultiplier:1},[d.BOOL_VEC2.value]:{arrayBufferView:Uint8Array,lengthMultiplier:2},[d.BOOL_VEC3.value]:{arrayBufferView:Uint8Array,lengthMultiplier:3},[d.BOOL_VEC4.value]:{arrayBufferView:Uint8Array,lengthMultiplier:4},[d.INT.value]:{arrayBufferView:Int32Array,lengthMultiplier:1},[d.INT_VEC2.value]:{arrayBufferView:Int32Array,lengthMultiplier:2},[d.INT_VEC3.value]:{arrayBufferView:Int32Array,lengthMultiplier:3},[d.INT_VEC4.value]:{arrayBufferView:Int32Array,lengthMultiplier:4},[d.UNSIGNED_INT.value]:{arrayBufferView:Uint32Array,lengthMultiplier:1},[d.UNSIGNED_INT_VEC2.value]:{arrayBufferView:Uint32Array,lengthMultiplier:2},[d.UNSIGNED_INT_VEC3.value]:{arrayBufferView:Uint32Array,lengthMultiplier:3},[d.UNSIGNED_INT_VEC4.value]:{arrayBufferView:Uint32Array,lengthMultiplier:4},[d.FLOAT.value]:{arrayBufferView:Float32Array,lengthMultiplier:1},[d.FLOAT_VEC2.value]:{arrayBufferView:Float32Array,lengthMultiplier:2},[d.FLOAT_VEC3.value]:{arrayBufferView:Float32Array,lengthMultiplier:3},[d.FLOAT_VEC4.value]:{arrayBufferView:Float32Array,lengthMultiplier:4},[d.FLOAT_MAT2.value]:{arrayBufferView:Float32Array,lengthMultiplier:4},[d.FLOAT_MAT2x3.value]:{arrayBufferView:Float32Array,lengthMultiplier:6},[d.FLOAT_MAT2x4.value]:{arrayBufferView:Float32Array,lengthMultiplier:8},[d.FLOAT_MAT3.value]:{arrayBufferView:Float32Array,lengthMultiplier:9},[d.FLOAT_MAT3x2.value]:{arrayBufferView:Float32Array,lengthMultiplier:6},[d.FLOAT_MAT3x4.value]:{arrayBufferView:Float32Array,lengthMultiplier:12},[d.FLOAT_MAT4.value]:{arrayBufferView:Float32Array,lengthMultiplier:16},[d.FLOAT_MAT4x2.value]:{arrayBufferView:Float32Array,lengthMultiplier:8},[d.FLOAT_MAT4x3.value]:{arrayBufferView:Float32Array,lengthMultiplier:12},[d.SAMPLER_2D.value]:{arrayBufferView:Uint8Array,lengthMultiplier:1},[d.SAMPLER_CUBE.value]:{arrayBufferView:Uint8Array,lengthMultiplier:1}};class Te extends v{get typeName(){return"WebGLBuffer"}}class be extends v{get typeName(){return"WebGLFramebuffer"}}class we extends v{get typeName(){return"WebGLProgram"}static saveInGlobalStore(e){const t=E.getWebGlObjectTag(e);t&&(this.store[t.id]=e)}static getFromGlobalStore(e){return this.store[e]}static updateInGlobalStore(e,t){if(!t)return;const n=this.getFromGlobalStore(e);if(!n)return;const i=E.getWebGlObjectTag(n);i&&(E.attachWebGlObjectTag(t,i),this.store[i.id]=t)}}we.store={};class xe extends v{get typeName(){return"WebGLQuery"}}class ye extends v{get typeName(){return"WebGLRenderbuffer"}}class Le extends v{get typeName(){return"WebGLSampler"}}class Ie extends v{get typeName(){return"WebGLShader"}}class Fe extends v{get typeName(){return"WebGLSync"}}class Ne extends v{get typeName(){return"WebGLTexture"}}class Me extends v{get typeName(){return"WebGLTransformFeedback"}}class Oe extends v{get typeName(){return"WebGLUniformLocation"}}class Be extends v{get typeName(){return"WebGLVertexArrayObject"}}class $e{static getProgramData(e,t){const n={LINK_STATUS:e.getProgramParameter(t,d.LINK_STATUS.value),VALIDATE_STATUS:e.getProgramParameter(t,d.VALIDATE_STATUS.value)},i=e.getAttachedShaders(t),r=new Array(2);let s=0;for(const t of i){const n=this.readShaderFromContext(e,t);s+=n.source.length,n.shaderType===d.FRAGMENT_SHADER.name?r[1]=n:r[0]=n}return{programStatus:n,shaders:r,length:s}}static readShaderFromContext(e,t){const n=e.getShaderSource(t),i=e.getExtension("WEBGL_debug_shaders"),r=i?i.getTranslatedShaderSource(t):null,s=e.getShaderParameter(t,d.SHADER_TYPE.value)===d.FRAGMENT_SHADER.value;let o=t&&t.__SPECTOR_Metadata&&t.__SPECTOR_Metadata.name?t.__SPECTOR_Metadata.name:this.readNameFromShaderSource(n);return o||(o=s?"Fragment":"Vertex"),{COMPILE_STATUS:e.getShaderParameter(t,d.COMPILE_STATUS.value),shaderType:s?d.FRAGMENT_SHADER.name:d.VERTEX_SHADER.name,name:o,source:n,translatedSource:r}}static readNameFromShaderSource(e){try{let t,n="";const i=/#define[\s]+SHADER_NAME[\s]+([\S]+)(\n|$)/gi;if(t=i.exec(e),null!==t&&(t.index===i.lastIndex&&i.lastIndex++,n=t[1]),""===n){const i=/#define[\s]+SHADER_NAME_B64[\s]+([\S]+)(\n|$)/gi;t=i.exec(e),null!==t&&(t.index===i.lastIndex&&i.lastIndex++,n=t[1]),n&&(n=decodeURIComponent(atob(n)))}return n}catch(e){return null}}}class Pe extends oe{constructor(e){super(e),this.drawCallTextureInputState=new Re(e),this.drawCallUboInputState=new Se(e)}get stateName(){return Pe.stateName}get requireStartAndStopStates(){return!1}getConsumeCommands(){return u}getChangeCommandsByState(){return{}}readFromContext(){var e,t;const n=this.context.getParameter(d.CURRENT_PROGRAM.value);if(!n)return;this.currentState.frameBuffer=this.readFrameBufferFromContext();const r=n.__SPECTOR_Object_CustomData?n.__SPECTOR_Object_CustomData:$e.getProgramData(this.context,n);if(this.currentState.programStatus=Object.assign({},r.programStatus),this.currentState.programStatus.program=this.getSpectorData(n),this.currentState.programStatus.RECOMPILABLE=i.isBuildableProgram(n),this.currentState.programStatus.RECOMPILABLE&&we.saveInGlobalStore(n),this.currentState.shaders=r.shaders,(null===(e=this.lastCommandName)||void 0===e?void 0:e.indexOf("Elements"))>=0){const e=this.context.getParameter(this.context.ELEMENT_ARRAY_BUFFER_BINDING);e&&(this.currentState.elementArray={},this.currentState.elementArray.arrayBuffer=this.getSpectorData(e))}const s=this.context.getProgramParameter(n,d.ACTIVE_ATTRIBUTES.value);this.currentState.attributes=[];for(let e=0;e1){const e=this.context.getProgramParameter(n,d.ACTIVE_UNIFORM_BLOCKS.value);this.currentState.uniformBlocks=[];for(let t=0;t1){const e=this.context;t.colorAttachments=[];const n=e.getParameter(d.MAX_DRAW_BUFFERS.value);for(let e=0;e1&&(i.alphaSize=this.context.getFramebufferAttachmentParameter(t,e,d.FRAMEBUFFER_ATTACHMENT_ALPHA_SIZE.value),i.blueSize=this.context.getFramebufferAttachmentParameter(t,e,d.FRAMEBUFFER_ATTACHMENT_BLUE_SIZE.value),i.encoding=this.getWebGlConstant(this.context.getFramebufferAttachmentParameter(t,e,d.FRAMEBUFFER_ATTACHMENT_COLOR_ENCODING.value)),i.componentType=this.getWebGlConstant(this.context.getFramebufferAttachmentParameter(t,e,d.FRAMEBUFFER_ATTACHMENT_COMPONENT_TYPE.value)),i.depthSize=this.context.getFramebufferAttachmentParameter(t,e,d.FRAMEBUFFER_ATTACHMENT_DEPTH_SIZE.value),i.greenSize=this.context.getFramebufferAttachmentParameter(t,e,d.FRAMEBUFFER_ATTACHMENT_GREEN_SIZE.value),i.redSize=this.context.getFramebufferAttachmentParameter(t,e,d.FRAMEBUFFER_ATTACHMENT_RED_SIZE.value),i.stencilSize=this.context.getFramebufferAttachmentParameter(t,e,d.FRAMEBUFFER_ATTACHMENT_STENCIL_SIZE.value),n===d.TEXTURE.value&&(i.textureLayer=this.context.getFramebufferAttachmentParameter(t,e,d.FRAMEBUFFER_ATTACHMENT_TEXTURE_LAYER.value))),i}readAttributeFromContext(e,t){const n=this.context.getActiveAttrib(e,t),i=this.context.getAttribLocation(e,n.name);if(-1===i)return{name:n.name,size:n.size,type:this.getWebGlConstant(n.type),location:-1};const r=this.context.getVertexAttrib(i,d.CURRENT_VERTEX_ATTRIB.value),s=this.context.getVertexAttrib(i,d.VERTEX_ATTRIB_ARRAY_BUFFER_BINDING.value),o={name:n.name,size:n.size,type:this.getWebGlConstant(n.type),location:i,offsetPointer:this.context.getVertexAttribOffset(i,d.VERTEX_ATTRIB_ARRAY_POINTER.value),bufferBinding:this.getSpectorData(s),enabled:this.context.getVertexAttrib(i,d.VERTEX_ATTRIB_ARRAY_ENABLED.value),arraySize:this.context.getVertexAttrib(i,d.VERTEX_ATTRIB_ARRAY_SIZE.value),stride:this.context.getVertexAttrib(i,d.VERTEX_ATTRIB_ARRAY_STRIDE.value),arrayType:this.getWebGlConstant(this.context.getVertexAttrib(i,d.VERTEX_ATTRIB_ARRAY_TYPE.value)),normalized:this.context.getVertexAttrib(i,d.VERTEX_ATTRIB_ARRAY_NORMALIZED.value),vertexAttrib:Array.prototype.slice.call(r)};return this.extensions[d.VERTEX_ATTRIB_ARRAY_DIVISOR_ANGLE.extensionName]?o.divisor=this.context.getVertexAttrib(i,d.VERTEX_ATTRIB_ARRAY_DIVISOR_ANGLE.value):this.contextVersion>1&&(o.integer=this.context.getVertexAttrib(i,d.VERTEX_ATTRIB_ARRAY_INTEGER.value),o.divisor=this.context.getVertexAttrib(i,d.VERTEX_ATTRIB_ARRAY_DIVISOR.value)),this.appendBufferCustomData(o,s),o}readUniformFromContext(e,t){const n=this.context.getActiveUniform(e,t),i=this.context.getUniformLocation(e,n.name);if(i){if(n.size>1&&n.name&&n.name.indexOf("[0]")===n.name.length-3){const t=[];for(let i=0;i1){i.baseLevel=this.context.getTexParameter(t.value,d.TEXTURE_BASE_LEVEL.value),i.immutable=this.context.getTexParameter(t.value,d.TEXTURE_IMMUTABLE_FORMAT.value),i.immutableLevels=this.context.getTexParameter(t.value,d.TEXTURE_IMMUTABLE_LEVELS.value),i.maxLevel=this.context.getTexParameter(t.value,d.TEXTURE_MAX_LEVEL.value);const e=this.context.getParameter(d.SAMPLER_BINDING.value);if(e){i.sampler=this.getSpectorData(e);const t=this.context;i.samplerMaxLod=t.getSamplerParameter(e,d.TEXTURE_MAX_LOD.value),i.samplerMinLod=t.getSamplerParameter(e,d.TEXTURE_MIN_LOD.value),i.samplerCompareFunc=this.getWebGlConstant(t.getSamplerParameter(e,d.TEXTURE_COMPARE_FUNC.value)),i.samplerCompareMode=this.getWebGlConstant(t.getSamplerParameter(e,d.TEXTURE_COMPARE_MODE.value)),i.samplerWrapS=this.getWebGlConstant(t.getSamplerParameter(e,d.TEXTURE_WRAP_S.value)),i.samplerWrapT=this.getWebGlConstant(t.getSamplerParameter(e,d.TEXTURE_WRAP_T.value)),i.samplerWrapR=this.getWebGlConstant(t.getSamplerParameter(e,d.TEXTURE_WRAP_R.value)),i.samplerMagFilter=this.getWebGlConstant(t.getSamplerParameter(e,d.TEXTURE_MAG_FILTER.value)),i.samplerMinFilter=this.getWebGlConstant(t.getSamplerParameter(e,d.TEXTURE_MIN_FILTER.value))}else i.maxLod=this.context.getTexParameter(t.value,d.TEXTURE_MAX_LOD.value),i.minLod=this.context.getTexParameter(t.value,d.TEXTURE_MIN_LOD.value),i.compareFunc=this.getWebGlConstant(this.context.getTexParameter(t.value,d.TEXTURE_COMPARE_FUNC.value)),i.compareMode=this.getWebGlConstant(this.context.getTexParameter(t.value,d.TEXTURE_COMPARE_MODE.value)),i.wrapR=this.getWebGlConstant(this.context.getTexParameter(t.value,d.TEXTURE_WRAP_R.value))}const r=this.getTextureStorage(t);if(r){const e=this.quickCapture?null:t;this.drawCallTextureInputState.appendTextureState(i,r,e,this.fullCapture)}return this.context.activeTexture(n),i}getTextureStorage(e){return e===d.TEXTURE_2D?this.context.getParameter(d.TEXTURE_BINDING_2D.value):e===d.TEXTURE_CUBE_MAP?this.context.getParameter(d.TEXTURE_BINDING_CUBE_MAP.value):e===d.TEXTURE_3D?this.context.getParameter(d.TEXTURE_BINDING_3D.value):e===d.TEXTURE_2D_ARRAY?this.context.getParameter(d.TEXTURE_BINDING_2D_ARRAY.value):void 0}readUniformsFromContextIntoState(e,t,n,i){const r=this.context,s=r.getActiveUniforms(e,t,d.UNIFORM_TYPE.value),o=r.getActiveUniforms(e,t,d.UNIFORM_SIZE.value),a=r.getActiveUniforms(e,t,d.UNIFORM_BLOCK_INDEX.value),l=r.getActiveUniforms(e,t,d.UNIFORM_OFFSET.value),c=r.getActiveUniforms(e,t,d.UNIFORM_ARRAY_STRIDE.value),u=r.getActiveUniforms(e,t,d.UNIFORM_MATRIX_STRIDE.value),h=r.getActiveUniforms(e,t,d.UNIFORM_IS_ROW_MAJOR.value);for(let d=0;d-1&&(t.blockName=r.getActiveUniformBlockName(e,t.blockIndice)),t.offset=l[d],t.arrayStride=c[d],t.matrixStride=u[d],t.rowMajor=h[d],t.blockIndice>-1){const e=i[a[d]].bindingPoint;t.value=this.drawCallUboInputState.getUboValue(e,t.offset,t.size,s[d])}}}readTransformFeedbackFromContext(e,t){const n=this.context,i=n.getTransformFeedbackVarying(e,t),r=n.getIndexedParameter(d.TRANSFORM_FEEDBACK_BUFFER_BINDING.value,t),s={name:i.name,size:i.size,type:this.getWebGlConstant(i.type),buffer:this.getSpectorData(r),bufferSize:n.getIndexedParameter(d.TRANSFORM_FEEDBACK_BUFFER_SIZE.value,t),bufferStart:n.getIndexedParameter(d.TRANSFORM_FEEDBACK_BUFFER_START.value,t)};return this.appendBufferCustomData(s,r),s}readUniformBlockFromContext(e,t){const n=this.context,i=n.getActiveUniformBlockParameter(e,t,d.UNIFORM_BLOCK_BINDING.value),r=n.getIndexedParameter(d.UNIFORM_BUFFER_BINDING.value,i),s={name:n.getActiveUniformBlockName(e,t),bindingPoint:i,size:n.getActiveUniformBlockParameter(e,t,d.UNIFORM_BLOCK_DATA_SIZE.value),activeUniformCount:n.getActiveUniformBlockParameter(e,t,d.UNIFORM_BLOCK_ACTIVE_UNIFORMS.value),vertex:n.getActiveUniformBlockParameter(e,t,d.UNIFORM_BLOCK_REFERENCED_BY_VERTEX_SHADER.value),fragment:n.getActiveUniformBlockParameter(e,t,d.UNIFORM_BLOCK_REFERENCED_BY_FRAGMENT_SHADER.value),buffer:this.getSpectorData(r)};return this.appendBufferCustomData(s,r),s}appendBufferCustomData(e,t){if(t){const n=t.__SPECTOR_Object_CustomData;n&&(n.usage&&(e.bufferUsage=this.getWebGlConstant(n.usage)),e.bufferLength=n.length,n.offset&&(e.bufferOffset=n.offset),n.sourceLength&&(e.bufferSourceLength=n.sourceLength))}}getWebGlConstant(e){const t=p[e];return t?t.name:e}}Pe.stateName="DrawCall",Pe.samplerTypes={[d.SAMPLER_2D.value]:d.TEXTURE_2D,[d.SAMPLER_CUBE.value]:d.TEXTURE_CUBE_MAP,[d.SAMPLER_3D.value]:d.TEXTURE_3D,[d.SAMPLER_2D_SHADOW.value]:d.TEXTURE_2D,[d.SAMPLER_2D_ARRAY.value]:d.TEXTURE_2D_ARRAY,[d.SAMPLER_2D_ARRAY_SHADOW.value]:d.TEXTURE_2D_ARRAY,[d.SAMPLER_CUBE_SHADOW.value]:d.TEXTURE_CUBE_MAP,[d.INT_SAMPLER_2D.value]:d.TEXTURE_2D,[d.INT_SAMPLER_3D.value]:d.TEXTURE_3D,[d.INT_SAMPLER_CUBE.value]:d.TEXTURE_CUBE_MAP,[d.INT_SAMPLER_2D_ARRAY.value]:d.TEXTURE_2D_ARRAY,[d.UNSIGNED_INT_SAMPLER_2D.value]:d.TEXTURE_2D,[d.UNSIGNED_INT_SAMPLER_3D.value]:d.TEXTURE_3D,[d.UNSIGNED_INT_SAMPLER_CUBE.value]:d.TEXTURE_CUBE_MAP,[d.UNSIGNED_INT_SAMPLER_2D_ARRAY.value]:d.TEXTURE_2D_ARRAY};class ke{constructor(e){this.contextInformation=e,this.stateTrackers=[],this.onCommandCapturedCallbacks={},this.initStateTrackers()}startCapture(e,t,n){for(const i of this.stateTrackers){const r=i.startCapture(!0,t,n);i.requireStartAndStopStates&&(e.initState[i.stateName]=r)}}stopCapture(e){for(const t of this.stateTrackers){const n=t.stopCapture();t.requireStartAndStopStates&&(e.endState[t.stateName]=n)}}captureState(e){const t=this.onCommandCapturedCallbacks[e.name];if(t)for(const n of t)n(e)}initStateTrackers(){this.stateTrackers.push(new le(this.contextInformation),new ce(this.contextInformation),new ue(this.contextInformation),new he(this.contextInformation),new de(this.contextInformation),new me(this.contextInformation),new pe(this.contextInformation),new ge(this.contextInformation),new fe(this.contextInformation),new Ee(this.contextInformation),new ve(this.contextInformation),new _e(this.contextInformation),new Ae(this.contextInformation),new Pe(this.contextInformation));for(const e of this.stateTrackers)e.registerCallbacks(this.onCommandCapturedCallbacks)}}class De{constructor(e){this.options=e,this.createCommandNames=this.getCreateCommandNames(),this.updateCommandNames=this.getUpdateCommandNames(),this.deleteCommandNames=this.getDeleteCommandNames(),this.startTime=a.now,this.memoryPerSecond={},this.totalMemory=0,this.frameMemory=0,this.capturing=!1,De.initializeByteSizeFormat()}static initializeByteSizeFormat(){this.byteSizePerInternalFormat||(this.byteSizePerInternalFormat={[d.R8.value]:1,[d.R16F.value]:2,[d.R32F.value]:4,[d.R8UI.value]:1,[d.RG8.value]:2,[d.RG16F.value]:4,[d.RG32F.value]:8,[d.ALPHA.value]:1,[d.RGB.value]:3,[d.RGBA.value]:4,[d.LUMINANCE.value]:1,[d.LUMINANCE_ALPHA.value]:2,[d.DEPTH_COMPONENT.value]:1,[d.DEPTH_STENCIL.value]:2,[d.SRGB_EXT.value]:3,[d.SRGB_ALPHA_EXT.value]:4,[d.RGB8.value]:3,[d.SRGB8.value]:3,[d.RGB565.value]:2,[d.R11F_G11F_B10F.value]:4,[d.RGB9_E5.value]:2,[d.RGB16F.value]:6,[d.RGB32F.value]:12,[d.RGB8UI.value]:3,[d.RGBA8.value]:4,[d.RGB5_A1.value]:2,[d.RGBA16F.value]:8,[d.RGBA32F.value]:16,[d.RGBA8UI.value]:4,[d.COMPRESSED_R11_EAC.value]:4,[d.COMPRESSED_SIGNED_R11_EAC.value]:4,[d.COMPRESSED_RG11_EAC.value]:4,[d.COMPRESSED_SIGNED_RG11_EAC.value]:4,[d.COMPRESSED_RGB8_ETC2.value]:4,[d.COMPRESSED_RGBA8_ETC2_EAC.value]:4,[d.COMPRESSED_SRGB8_ETC2.value]:4,[d.COMPRESSED_SRGB8_ALPHA8_ETC2_EAC.value]:4,[d.COMPRESSED_RGB8_PUNCHTHROUGH_ALPHA1_ETC2.value]:4,[d.COMPRESSED_SRGB8_PUNCHTHROUGH_ALPHA1_ETC2.value]:4,[d.COMPRESSED_RGB_S3TC_DXT1_EXT.value]:.5,[d.COMPRESSED_RGBA_S3TC_DXT3_EXT.value]:1,[d.COMPRESSED_RGBA_S3TC_DXT5_EXT.value]:1,[d.COMPRESSED_RGB_PVRTC_4BPPV1_IMG.value]:.5,[d.COMPRESSED_RGBA_PVRTC_4BPPV1_IMG.value]:.5,[d.COMPRESSED_RGB_PVRTC_2BPPV1_IMG.value]:.25,[d.COMPRESSED_RGBA_PVRTC_2BPPV1_IMG.value]:.25,[d.COMPRESSED_RGB_ETC1_WEBGL.value]:.5,[d.COMPRESSED_RGB_ATC_WEBGL.value]:.5,[d.COMPRESSED_RGBA_ATC_EXPLICIT_ALPHA_WEBGL.value]:1,[d.COMPRESSED_RGBA_ATC_INTERPOLATED_ALPHA_WEBGL.value]:1})}registerCallbacks(e){for(const t of this.createCommandNames)e[t]=e[t]||[],e[t].push(this.createWithoutSideEffects.bind(this));for(const t of this.updateCommandNames)e[t]=e[t]||[],e[t].push(this.updateWithoutSideEffects.bind(this));for(const t of this.deleteCommandNames)e[t]=e[t]||[],e[t].push(this.deleteWithoutSideEffects.bind(this))}startCapture(){this.frameMemory=0,this.capturing=!0}stopCapture(){this.frameMemory=0,this.capturing=!1}appendRecordedInformation(e){e.frameMemory[this.objectName]=this.frameMemory,e.memory[this.objectName]=this.memoryPerSecond}create(e){}createWithoutSideEffects(e){this.options.toggleCapture(!1),this.create(e),this.options.toggleCapture(!0)}updateWithoutSideEffects(e){if(!e||0===e.arguments.length)return;this.options.toggleCapture(!1);const t=e.arguments[0],n=this.getBoundInstance(t);if(!n)return void this.options.toggleCapture(!0);if(!E.getWebGlObjectTag(n))return void this.options.toggleCapture(!0);const i=this.getWebGlConstant(t),r=this.update(e,i,n);this.changeMemorySize(r),this.options.toggleCapture(!0)}deleteWithoutSideEffects(e){if(!e||!e.arguments||e.arguments.length<1)return;const t=e.arguments[0];if(!t)return;this.options.toggleCapture(!1);const n=this.delete(t);this.changeMemorySize(-n),this.options.toggleCapture(!0)}changeMemorySize(e){this.totalMemory+=e,this.capturing&&(this.frameMemory+=e);const t=a.now-this.startTime,n=Math.round(t/1e3);this.memoryPerSecond[n]=this.totalMemory}getWebGlConstant(e){const t=p[e];return t?t.name:e+""}getByteSizeForInternalFormat(e){return De.byteSizePerInternalFormat[e]||4}}class Ue extends De{get objectName(){return"Buffer"}getCreateCommandNames(){return["createBuffer"]}getUpdateCommandNames(){return["bufferData"]}getDeleteCommandNames(){return["deleteBuffer"]}getBoundInstance(e){const t=this.options.context;return e===d.ARRAY_BUFFER.value?t.getParameter(d.ARRAY_BUFFER_BINDING.value):e===d.ELEMENT_ARRAY_BUFFER.value?t.getParameter(d.ELEMENT_ARRAY_BUFFER_BINDING.value):e===d.COPY_READ_BUFFER.value?t.getParameter(d.COPY_READ_BUFFER_BINDING.value):e===d.COPY_WRITE_BUFFER.value?t.getParameter(d.COPY_WRITE_BUFFER_BINDING.value):e===d.TRANSFORM_FEEDBACK_BUFFER.value?t.getParameter(d.TRANSFORM_FEEDBACK_BUFFER_BINDING.value):e===d.UNIFORM_BUFFER.value?t.getParameter(d.UNIFORM_BUFFER_BINDING.value):e===d.PIXEL_PACK_BUFFER.value?t.getParameter(d.PIXEL_PACK_BUFFER_BINDING.value):e===d.PIXEL_UNPACK_BUFFER.value?t.getParameter(d.PIXEL_UNPACK_BUFFER_BINDING.value):void 0}delete(e){const t=e.__SPECTOR_Object_CustomData;return t?t.length:0}update(e,t,n){const i=this.getCustomData(t,e);if(!i)return 0;const r=n.__SPECTOR_Object_CustomData?n.__SPECTOR_Object_CustomData.length:0;return n.__SPECTOR_Object_CustomData=i,i.length-r}getCustomData(e,t){const n=this.getLength(t);return t.arguments.length>=4?{target:e,length:n,usage:t.arguments[2],offset:t.arguments[3],sourceLength:t.arguments[1]?t.arguments[1].length:-1}:3===t.arguments.length?{target:e,length:n,usage:t.arguments[2]}:void 0}getLength(e){let t=-1,n=0;return 5===e.arguments.length&&(t=e.arguments[4],n=e.arguments[3]),t<=0&&(t="number"==typeof e.arguments[1]?e.arguments[1]:e.arguments[1]&&(e.arguments[1].byteLength||e.arguments[1].length)||0),t-n}}class Ge extends De{get objectName(){return"Renderbuffer"}getCreateCommandNames(){return["createRenderbuffer"]}getUpdateCommandNames(){return["renderbufferStorage","renderbufferStorageMultisample"]}getDeleteCommandNames(){return["deleteRenderbuffer"]}getBoundInstance(e){const t=this.options.context;if(e===d.RENDERBUFFER.value)return t.getParameter(d.RENDERBUFFER_BINDING.value)}delete(e){const t=e.__SPECTOR_Object_CustomData;return t?t.length:0}update(e,t,n){const i=this.getCustomData(e,t);if(!i)return 0;const r=n.__SPECTOR_Object_CustomData?n.__SPECTOR_Object_CustomData.length:0;return i.length=i.width*i.height*this.getByteSizeForInternalFormat(i.internalFormat),n.__SPECTOR_Object_CustomData=i,i.length-r}getCustomData(e,t){return 4===e.arguments.length?{target:t,internalFormat:e.arguments[1],width:e.arguments[2],height:e.arguments[3],length:0,samples:0}:{target:t,internalFormat:e.arguments[2],width:e.arguments[3],height:e.arguments[4],length:0,samples:e.arguments[1]}}}class We extends De{get objectName(){return"Texture2d"}getCreateCommandNames(){return["createTexture"]}getUpdateCommandNames(){return["texImage2D","compressedTexImage2D","texStorage2D"]}getDeleteCommandNames(){return["deleteTexture"]}getBoundInstance(e){const t=this.options.context;return e===d.TEXTURE_2D.value?t.getParameter(d.TEXTURE_BINDING_2D.value):e===d.TEXTURE_CUBE_MAP_POSITIVE_X.value||e===d.TEXTURE_CUBE_MAP_POSITIVE_Y.value||e===d.TEXTURE_CUBE_MAP_POSITIVE_Z.value||e===d.TEXTURE_CUBE_MAP_NEGATIVE_X.value||e===d.TEXTURE_CUBE_MAP_NEGATIVE_Y.value||e===d.TEXTURE_CUBE_MAP_NEGATIVE_Z.value?t.getParameter(d.TEXTURE_BINDING_CUBE_MAP.value):void 0}delete(e){const t=e.__SPECTOR_Object_CustomData;return t?t.target===d.TEXTURE_2D_ARRAY.name||t.target===d.TEXTURE_3D.name?0:t.length:0}update(e,t,n){const i=this.getCustomData(e,t,n);if(!i)return 0;const r=n.__SPECTOR_Object_CustomData?n.__SPECTOR_Object_CustomData.length:0;if(i.isCompressed){if(e.arguments.length>=7){const t=e.arguments[6];i.length="number"==typeof t?t:null==t?void 0:t.byteLength}}else{const e="TEXTURE_2D"===t?1:6;let n=i.internalFormat;n===d.RGBA.value&&(i.type===d.FLOAT.value&&(n=d.RGBA32F.value),i.type===d.HALF_FLOAT_OES.value&&(n=d.RGBA16F.value)),i.length=i.width*i.height*e*this.getByteSizeForInternalFormat(n)}return i.length=0|i.length,n.__SPECTOR_Object_CustomData=i,i.length-r}getCustomData(e,t,n){return"texImage2D"===e.name?this.getTexImage2DCustomData(e,t,n):"compressedTexImage2D"===e.name?this.getCompressedTexImage2DCustomData(e,t,n):"texStorage2D"===e.name?this.getTexStorage2DCustomData(e,t,n):void 0}getTexStorage2DCustomData(e,t,n){let i;return 5===e.arguments.length&&(i={target:t,internalFormat:e.arguments[2],width:e.arguments[3],height:e.arguments[4],length:0,isCompressed:!1}),i}getCompressedTexImage2DCustomData(e,t,n){if(0!==e.arguments[1])return;let i;return e.arguments.length>=7&&(i={target:t,internalFormat:e.arguments[2],width:e.arguments[3],height:e.arguments[4],length:0,isCompressed:!0}),i}getTexImage2DCustomData(e,t,n){if(0!==e.arguments[1])return;let i;return e.arguments.length>=8?i={target:t,internalFormat:e.arguments[2],width:e.arguments[3],height:e.arguments[4],format:e.arguments[6],type:e.arguments[7],length:0,isCompressed:!1}:6===e.arguments.length&&(i={target:t,internalFormat:e.arguments[2],width:e.arguments[5].width,height:e.arguments[5].height,format:e.arguments[3],type:e.arguments[4],length:0,isCompressed:!1}),i}}class Ve extends De{get objectName(){return"Texture3d"}getCreateCommandNames(){return["createTexture"]}getUpdateCommandNames(){return["texImage3D","compressedTexImage3D","texStorage3D"]}getDeleteCommandNames(){return["deleteTexture"]}getBoundInstance(e){const t=this.options.context;return e===d.TEXTURE_2D_ARRAY.value?t.getParameter(d.TEXTURE_BINDING_2D_ARRAY.value):e===d.TEXTURE_3D.value?t.getParameter(d.TEXTURE_BINDING_3D.value):void 0}delete(e){const t=e.__SPECTOR_Object_CustomData;return t?t.target!==d.TEXTURE_2D_ARRAY.name&&t.target!==d.TEXTURE_3D.name?0:t.length:0}update(e,t,n){if(e.arguments.length>=2&&0!==e.arguments[1])return 0;const i=this.getCustomData(e,t,n);if(!i)return 0;const r=n.__SPECTOR_Object_CustomData?n.__SPECTOR_Object_CustomData.length:0;if(i.isCompressed){if(e.arguments.length>=7){const t=e.arguments[6];i.length="number"==typeof t?t:null==t?void 0:t.byteLength}}else i.length=i.width*i.height*i.depth*this.getByteSizeForInternalFormat(i.internalFormat);return i.length=0|i.length,n.__SPECTOR_Object_CustomData=i,i.length-r}getCustomData(e,t,n){return"texImage3D"===e.name?this.getTexImage3DCustomData(e,t,n):"compressedTexImage3D"===e.name?this.getCompressedTexImage3DCustomData(e,t,n):"texStorage3D"===e.name?this.getTexStorage3DCustomData(e,t,n):void 0}getTexStorage3DCustomData(e,t,n){let i;return 6===e.arguments.length&&(i={target:t,internalFormat:e.arguments[2],width:e.arguments[3],height:e.arguments[4],depth:e.arguments[5],length:0,isCompressed:!1}),i}getCompressedTexImage3DCustomData(e,t,n){if(0!==e.arguments[1])return;let i;return e.arguments.length>=8&&(i={target:t,internalFormat:e.arguments[2],width:e.arguments[3],height:e.arguments[4],depth:e.arguments[5],length:0,isCompressed:!0}),i}getTexImage3DCustomData(e,t,n){if(0!==e.arguments[1])return;let i;return e.arguments.length>=9&&(i={target:t,internalFormat:e.arguments[2],width:e.arguments[3],height:e.arguments[4],depth:e.arguments[5],format:e.arguments[7],type:e.arguments[8],length:0,isCompressed:!1}),i}}class He extends De{get objectName(){return"Program"}getCreateCommandNames(){return["createProgram"]}getUpdateCommandNames(){return["linkProgram"]}getDeleteCommandNames(){return["deleteProgram"]}getBoundInstance(e){return e}delete(e){const t=e.__SPECTOR_Object_CustomData;return t?t.length:0}update(e,t,n){if(e.arguments.length>=1&&!e.arguments[0])return 0;const i=this.getCustomData(n);if(!i)return 0;const r=n.__SPECTOR_Object_CustomData?n.__SPECTOR_Object_CustomData.length:0;return n.__SPECTOR_Object_CustomData=i,i.length-r}getCustomData(e){const t=this.options.context;return $e.getProgramData(t,e)}}class Xe{constructor(e){this.contextInformation=e,this.onCommandCallbacks={},this.recorders=[],this.initRecorders()}recordCommand(e){const t=this.onCommandCallbacks[e.name];if(t)for(const n of t)n(e)}startCapture(){for(const e of this.recorders)e.startCapture()}stopCapture(){for(const e of this.recorders)e.stopCapture()}appendRecordedInformation(e){for(const t of this.recorders)t.appendRecordedInformation(e)}initRecorders(){this.recorders.push(new Ue(this.contextInformation),new Ge(this.contextInformation),new We(this.contextInformation),new Ve(this.contextInformation),new He(this.contextInformation));for(const e of this.recorders)e.registerCallbacks(this.onCommandCallbacks)}}class ze{constructor(e){this.contextInformation=e,this.webGlObjects=[],this.initWebglObjects()}tagWebGlObjects(e){for(const t of this.webGlObjects){for(let n=0;n0&&this.currentCapture.commands.length===this.maxCommands&&this.onMaxCommand.trigger(this)}}spyContext(e){const t=[];for(const n in e)n&&t.push(n);for(let n=0;n{this.spyRequestAnimationFrame("requestAnimationFrame",e.display)}))}spyRequestAnimationFrame(e,t){const n=this;A.storeOriginFunction(t,e),t[e]=function(){const i=arguments[0],r=n.getCallback(n,i,(()=>{n.spiedScope[e](i)})),s=A.executeOriginFunction(t,e,[r]);return s}}spySetTimer(e){const t=this,n=this.spiedScope,i="setTimeout"===e;A.storeOriginFunction(n,e),n[e]=function(){const r=arguments[0],s=arguments[1],o=Array.prototype.slice.call(arguments);Ze.setTimerCommonValues.indexOf(s)>-1&&(o[0]=t.getCallback(t,r,i?()=>{n[e](r)}:null));const a=A.executeOriginFunction(n,e,o);return a}}getCallback(e,t,n=null){return function(){const i=a.now;if(e.lastFrame=++e.lastFrame%e.speedRatio,e.willPlayNextFrame||e.speedRatio&&!e.lastFrame){e.onFrameStart.trigger(e);try{t.apply(e.spiedScope,arguments)}catch(t){e.onError.trigger(t)}e.lastSixtyFramesCurrentIndex=(e.lastSixtyFramesCurrentIndex+1)%Ze.fpsWindowSize,e.lastSixtyFramesDuration[e.lastSixtyFramesCurrentIndex]=i-e.lastSixtyFramesPreviousStart,e.onFrameEnd.trigger(e),e.willPlayNextFrame=!1}else n&&n();e.lastSixtyFramesPreviousStart=i}}}Ze.requestAnimationFrameFunctions=["requestAnimationFrame","msRequestAnimationFrame","webkitRequestAnimationFrame","mozRequestAnimationFrame","oRequestAnimationFrame"],Ze.setTimerFunctions=["setTimeout","setInterval"],Ze.setTimerCommonValues=[0,15,16,33,32,40],Ze.fpsWindowSize=60;class Qe{constructor(e){this.canvas=e,this.onContextRequested=new o,this.init()}init(){const e=this,t=function(){const t=this instanceof HTMLCanvasElement?HTMLCanvasElement:OffscreenCanvas,n=e.canvas?A.executeOriginFunction(this,"getContext",arguments):A.executePrototypeOriginFunction(this,t,"getContext",arguments);if(arguments.length>0){const e=arguments[0];if("webgl"!==e&&"experimental-webgl"!==e&&"webgl2"!==e&&"experimental-webgl2"!==e)return n}if(n){const t=Array.prototype.slice.call(arguments),i="webgl2"===t[0]||"experimental-webgl2"===t[0]?2:1;e.onContextRequested.trigger({context:n,contextVersion:i})}return n};this.canvas?(A.storeOriginFunction(this.canvas,"getContext"),this.canvas.getContext=t):(A.storePrototypeOriginFunction(HTMLCanvasElement,"getContext"),HTMLCanvasElement.prototype.getContext=t,"undefined"!=typeof OffscreenCanvas&&(A.storePrototypeOriginFunction(OffscreenCanvas,"getContext"),OffscreenCanvas.prototype.getContext=t))}}var Je=n(379),et=n.n(Je),tt=n(795),nt=n.n(tt),it=n(569),rt=n.n(it),st=n(565),ot=n.n(st),at=n(216),lt=n.n(at),ct=n(589),ut=n.n(ct),ht=n(866),dt={};dt.styleTagTransform=ut(),dt.setAttributes=ot(),dt.insert=rt().bind(null,"html"),dt.domAPI=nt(),dt.insertStyleElement=lt(),et()(ht.Z,dt),ht.Z&&ht.Z.locals&&ht.Z.locals;class mt{constructor(e,t){this.placeHolder=e,this.stateStore=t}compose(e){const t=this.stateStore.getStatesToProcess();let n=!1;for(const e in t)if(t.hasOwnProperty(e)){const i=t[e],r=this.stateStore.getLastOperation(i),s=this.stateStore.getComponentInstance(i),o=this.stateStore.getData(i);s.render(o,i,r),n=!0}if(!n)return;const i=this.stateStore.getLastOperation(e);this.composeInContainer(this.placeHolder,Number.MAX_VALUE,e,i)}composeChildren(e,t){if(!t)return;const n=this.stateStore.getChildrenIds(e);let i=0;for(let e=0;e0}add(e,t){const n=this.getNewId();return this.pendingOperation[n]=n,this.store[n]={data:e,id:n,parent:null,children:[],componentInstance:t,lastOperation:20},n}update(e,t){this.store[e],this.pendingOperation[e]=e,this.store[e].data=t,this.store[e].lastOperation=40}addChild(e,t,n){const i=this.store[e],r=this.add(t,n);this.pendingOperation[r]=r;const s=this.store[r];return s.parent=i,i.children.push(s),r}insertChildAt(e,t,n,i){const r=this.store[e],s=this.add(n,i);this.pendingOperation[s]=s;const o=this.store[s];return o.parent=r,t>=r.children.length?r.children.push(o):t>=0?r.children.splice(t,0,o):r.children.unshift(o),s}removeChildById(e,t){const n=this.store[e];for(let i=n.children.length-1;i>=0;i--)if(n.children[i].id===t){this.removeChildAt(e,i);break}}removeChildAt(e,t){const n=this.store[e];let i;t>n.children.length-1?(i=n.children[n.children.length-1],n.children[n.children.length-1].parent=null,n.children.splice(n.children.length-1,1)):t>=0?(i=n.children[t],n.children[t].parent=null,n.children.splice(t,1)):(i=n.children[0],n.children[0].parent=null,n.children.splice(0,1)),i.parent=null,this.remove(i.id)}remove(e){const t=this.store[e];t.parent?(this.store[t.parent.id],this.removeChildById(t.parent.id,e)):(this.removeChildren(e),this.store[e].lastOperation=50,this.pendingOperation[e]=e)}removeChildren(e){const t=this.store[e];for(;t.children.length;)this.remove(t.children[0].id)}getStatesToProcess(){return this.pendingOperation}flushPendingOperations(){for(const e in this.pendingOperation)this.pendingOperation[e]&&(50===this.store[e].lastOperation?delete this.store[e]:this.store[e].lastOperation=0);this.pendingOperation={}}getNewId(){return++this.idGenerator}}class gt{constructor(e){this.component=e}render(e,t,n){0!==n&&(50!==n?this.domNode=this.component.render(e,t):this.removeNode())}composeInContainer(e,t,n){if(50===n)return this.removeNode(),null;const i=this.cachedCurrentChildrenContainer;if(0===n)return i;const r=this.domNode,s=r.getAttribute("childrencontainer")?r:r.querySelector("[childrenContainer]");if(s&&i){const e=i.children;for(;e.length>0;)s.appendChild(e[0])}if(this.cachedCurrentChildrenContainer=s,t>=e.children.length)e.appendChild(r),this.cachedCurrentDomNode&&40===n&&(this.cachedCurrentDomNode.remove?this.cachedCurrentDomNode.remove():this.cachedCurrentDomNode.parentNode&&this.cachedCurrentDomNode.parentNode.removeChild(this.cachedCurrentDomNode));else{const i=e.children[t];e.insertBefore(r,i),40===n&&e.removeChild(i)}return this.cachedCurrentDomNode=this.domNode,s}removeNode(){this.domNode&&this.domNode.parentElement&&(this.domNode.remove?this.domNode.remove():this.domNode.parentNode&&this.domNode.parentNode.removeChild(this.domNode)),this.cachedCurrentDomNode&&this.cachedCurrentDomNode.parentElement&&(this.cachedCurrentDomNode.remove?this.cachedCurrentDomNode.remove():this.cachedCurrentDomNode.parentNode&&this.cachedCurrentDomNode.parentNode.removeChild(this.cachedCurrentDomNode))}}gt.idGenerator=0;class ft{constructor(e){this.stateStore=new pt,this.compositor=new mt(e,this.stateStore),this.willRender=!1,this.rootStateId=-1}addRootState(e,t,n=!1){const i=new gt(t),r=this.stateStore.add(e,i);return this.rootStateId=r,this.setForRender(n),r}addChildState(e,t,n,i=!1){const r=this.insertChildState(e,t,Number.MAX_VALUE,n);return this.setForRender(i),r}insertChildState(e,t,n,i,r=!1){const s=new gt(i),o=this.stateStore.insertChildAt(e,n,t,s);return this.setForRender(r),o}updateState(e,t,n=!1){this.stateStore.update(e,t),this.setForRender(n)}removeState(e,t=!1){this.stateStore.remove(e),this.setForRender(t)}removeChildrenStates(e,t=!1){this.stateStore.removeChildren(e),this.setForRender(t)}getState(e){return this.stateStore.getData(e)}getGenericState(e){return this.getState(e)}getChildrenState(e){return this.stateStore.getChildrenIds(e).map((t=>this.stateStore.getData(e)))}getChildrenGenericState(e){return this.getChildrenState(e)}hasChildren(e){return this.stateStore.hasChildren(e)}updateAllChildrenState(e,t){const n=this.stateStore.getChildrenIds(e);for(const e of n){const n=this.getGenericState(e);t(n),this.updateState(e,n)}}updateAllChildrenGenericState(e,t){this.updateAllChildrenState(e,t)}setForRender(e){this.willRender||(this.willRender=!0,e?this.compose():setTimeout(this.compose.bind(this),ft.REFRESHRATEINMILLISECONDS))}compose(){this.willRender=!1,this.compositor.compose(this.rootStateId),this.stateStore.flushPendingOperations()}}ft.REFRESHRATEINMILLISECONDS=100;class Et extends class{constructor(){this.dummyTextGeneratorElement=document.createElement("div")}createFromHtml(e){const t=document.createElement("div");return t.innerHTML=e,t.firstElementChild}htmlTemplate(e,...t){const n=e.raw;let i="";return t.forEach(((e,t)=>{let r=n[t];Array.isArray(e)&&(e=e.join("")),r&&r.length>0&&"$"===r[r.length-1]?r=r.slice(0,-1):e=this.htmlEscape(e),i+=r,i+=e})),i+=n[n.length-1],i}htmlEscape(e){return null==e||0===e.length?e:(this.dummyTextGeneratorElement.innerText=e,this.dummyTextGeneratorElement.innerHTML)}}{constructor(){super(),this.events={}}addEventListener(e,t,n=null){return this.events[e]?this.events[e].add(t,n):-1}removeEventListener(e,t){this.events[e]&&this.events[e].remove(t)}renderElementFromTemplate(e,t,n){const i=this.createFromHtml(e);return this.bindCommands(i,t,n),i}bindCommands(e,t,n){e.getAttribute("commandname")&&this.bindCommand(e,t,n);const i=e.querySelectorAll("[commandName]");for(let e=0;e -
            -
            -
            - ${e.logText} -
            - `;return this.renderElementFromTemplate(n,e,t)}}class _t extends Et{constructor(){super(),this.onCanvasSelected=this.createEvent("onCanvasSelected")}render(e,t){const n=document.createElement("li"),i=document.createElement("span");return i.innerText=`Id: ${e.id} - Size: ${e.width}*${e.height}`,n.appendChild(i),this.mapEventListener(n,"click","onCanvasSelected",e,t),n}}class Ct extends Et{constructor(){super(),this.onCaptureRequested=this.createEvent("onCaptureRequested"),this.onPlayRequested=this.createEvent("onPlayRequested"),this.onPauseRequested=this.createEvent("onPauseRequested"),this.onPlayNextFrameRequested=this.createEvent("onPlayNextFrameRequested")}render(e,t){const n=this.htmlTemplate` -
            -
            -
            - $${e?'
            \n
            ':'
            \n
            \n
            \n
            '} -
            `;return this.renderElementFromTemplate(n,e,t)}}class At extends Et{constructor(){super(),this.onCanvasSelection=this.createEvent("onCanvasSelection")}render(e,t){const n=this.htmlTemplate` -
            - - ${e.currentCanvasInformation?`${e.currentCanvasInformation.id} (${e.currentCanvasInformation.width}*${e.currentCanvasInformation.height})`:"Choose Canvas..."} - -
              -
              `;return this.renderElementFromTemplate(n,e,t)}}class Rt extends Et{render(e,t){const n=document.createElement("span");return n.className="fpsCounterComponent",n.innerText=e.toFixed(2)+" Fps",n}}class St{constructor(e={}){this.options=e,this.rootPlaceHolder=e.rootPlaceHolder||document.body,this.mvx=new ft(this.rootPlaceHolder),this.isTrackingCanvas=!1,this.onCanvasSelected=new o,this.onCaptureRequested=new o,this.onPauseRequested=new o,this.onPlayRequested=new o,this.onPlayNextFrameRequested=new o,this.captureMenuComponent=new vt,this.canvasListComponent=new At,this.canvasListItemComponent=new _t,this.actionsComponent=new Ct,this.fpsCounterComponent=new Rt,this.rootStateId=this.mvx.addRootState({visible:!0,logLevel:r.info,logText:St.SelectCanvasHelpText,logVisible:!this.options.hideLog},this.captureMenuComponent),this.canvasListStateId=this.mvx.addChildState(this.rootStateId,{currentCanvasInformation:null,showList:!1},this.canvasListComponent),this.actionsStateId=this.mvx.addChildState(this.rootStateId,!0,this.actionsComponent),this.fpsStateId=this.mvx.addChildState(this.rootStateId,0,this.fpsCounterComponent),this.actionsComponent.onCaptureRequested.add((()=>{const e=this.getSelectedCanvasInformation();e&&this.updateMenuStateLog(r.info,St.PleaseWaitHelpText,!0),setTimeout((()=>{this.onCaptureRequested.trigger(e)}),200)})),this.actionsComponent.onPauseRequested.add((()=>{this.onPauseRequested.trigger(this.getSelectedCanvasInformation()),this.mvx.updateState(this.actionsStateId,!1)})),this.actionsComponent.onPlayRequested.add((()=>{this.onPlayRequested.trigger(this.getSelectedCanvasInformation()),this.mvx.updateState(this.actionsStateId,!0)})),this.actionsComponent.onPlayNextFrameRequested.add((()=>{this.onPlayNextFrameRequested.trigger(this.getSelectedCanvasInformation())})),this.canvasListComponent.onCanvasSelection.add((e=>{this.mvx.updateState(this.canvasListStateId,{currentCanvasInformation:null,showList:!e.state.showList}),this.updateMenuStateLog(r.info,St.SelectCanvasHelpText),this.onCanvasSelected.trigger(null),this.isTrackingCanvas&&this.trackPageCanvases(),e.state.showList?this.showMenuStateLog():this.hideMenuStateLog()})),this.canvasListItemComponent.onCanvasSelected.add((e=>{this.mvx.updateState(this.canvasListStateId,{currentCanvasInformation:e.state,showList:!1}),this.onCanvasSelected.trigger(e.state),this.updateMenuStateLog(r.info,St.ActionsHelpText),this.showMenuStateLog()}))}getSelectedCanvasInformation(){return this.mvx.getGenericState(this.canvasListStateId).currentCanvasInformation}trackPageCanvases(){if(this.isTrackingCanvas=!0,document.body){const e=document.body.querySelectorAll("canvas");this.updateCanvasesList(e)}}updateCanvasesList(e){this.updateCanvasesListInformationInternal(e,(e=>({id:e.id,width:e.width,height:e.height,ref:e})))}updateCanvasesListInformation(e){this.updateCanvasesListInformationInternal(e,(e=>({id:e.id,width:e.width,height:e.height,ref:e.ref})))}display(){this.updateMenuStateVisibility(!0)}hide(){this.updateMenuStateVisibility(!1)}captureComplete(e){e?this.updateMenuStateLog(r.error,e):this.updateMenuStateLog(r.info,St.ActionsHelpText)}setFPS(e){this.mvx.updateState(this.fpsStateId,e)}updateCanvasesListInformationInternal(e,t){this.mvx.removeChildrenStates(this.canvasListStateId);const n=[];for(let i=0;i -
              - Drag files here to open a previously saved capture. -
              -
                - `,i=this.renderElementFromTemplate(n,e,t),r=i.querySelector(".openCaptureFile");return r.addEventListener("dragenter",(e=>(this.drag(e),!1)),!1),r.addEventListener("dragover",(e=>(this.drag(e),!1)),!1),r.addEventListener("drop",(e=>{this.drop(e)}),!1),i}drag(e){e.stopPropagation(),e.preventDefault()}drop(e){e.stopPropagation(),e.preventDefault(),this.loadFiles(e)}loadFiles(e){let t=null;if(e&&e.dataTransfer&&e.dataTransfer.files&&(t=e.dataTransfer.files),e&&e.target&&e.target.files&&(t=e.target.files),t&&t.length>0)for(let e=0;e{s.error("Error while reading file: "+n.name+e)},i.onload=e=>{try{const t=JSON.parse(e.target.result);this.onCaptureLoaded.trigger(t)}catch(e){s.error("Error while reading file: "+n.name+e)}},i.readAsText(n)}}}}class xt extends Et{constructor(){super(),this.onCaptureSelected=this.createEvent("onCaptureSelected"),this.onSaveRequested=this.createEvent("onSaveRequested")}render(e,t){const n=document.createElement("li");if(e.active&&(n.className="active"),e.capture.endState.VisualState.Attachments)for(const t of e.capture.endState.VisualState.Attachments){const e=document.createElement("img");e.src=encodeURI(t.src),n.appendChild(e)}else{const t=document.createElement("span");t.innerText=e.capture.endState.VisualState.FrameBufferStatus,n.appendChild(t)}const i=document.createElement("span");i.innerText=new Date(e.capture.startTime).toTimeString().split(" ")[0],n.appendChild(i);const r=document.createElement("a");return r.href="#",r.className="captureListItemSave",this.mapEventListener(r,"click","onSaveRequested",e,t,!1,!0),i.appendChild(r),this.mapEventListener(n,"click","onCaptureSelected",e,t),n}}class yt extends Et{render(e,t){const n=this.htmlTemplate` -
                -
                  -
                  `;return this.renderElementFromTemplate(n,e,t)}}class Lt{static scrollIntoView(e){const t=e.getBoundingClientRect();let n=e.parentElement;for(;n&&n.clientHeight===n.offsetHeight;)n=n.parentElement;if(!n)return;const i=n.getBoundingClientRect();t.topi.bottom&&e.scrollIntoView(!1)}}class It extends Et{constructor(){super(),this.onVisualStateSelected=this.createEvent("onVisualStateSelected")}render(e,t){const n=document.createElement("li");if(e.active&&(n.className="active",setTimeout((()=>{Lt.scrollIntoView(n)}),1)),e.VisualState.Attachments)for(const t of e.VisualState.Attachments){if(!t.src)continue;const i=document.createElement("img");if(i.src=encodeURI(t.src),n.appendChild(i),e.VisualState.Attachments.length>1){const e=document.createElement("span");e.innerText=t.attachmentName,n.appendChild(e)}if(t.textureLayer){const e=document.createElement("span");e.innerText="Layer: "+t.textureLayer,n.appendChild(e)}if(t.textureCubeMapFace){const e=document.createElement("span");e.innerText=t.textureCubeMapFace,n.appendChild(e)}}else{const t=document.createElement("span");t.innerText=e.VisualState.FrameBufferStatus,n.appendChild(t)}const i=document.createElement("span");return i.innerText=e.VisualState.FrameBuffer?"Frame buffer: "+e.VisualState.FrameBuffer.__SPECTOR_Object_TAG.id:"Canvas frame buffer",n.appendChild(i),this.mapEventListener(n,"click","onVisualStateSelected",e,t),n}}class Ft extends Et{render(e,t){const n=this.htmlTemplate` -
                  -
                    -
                    `;return this.renderElementFromTemplate(n,e,t)}}class Nt extends Et{constructor(){super(),this.onCommandSelected=this.createEvent("onCommandSelected"),this.onVertexSelected=this.createEvent("onVertexSelected"),this.onFragmentSelected=this.createEvent("onFragmentSelected")}render(e,t){const n=document.createElement("li");let i="unknown";switch(e.capture.status){case 50:i="deprecated";break;case 10:i="unused";break;case 20:i="disabled";break;case 30:i="redundant";break;case 40:i="valid"}if(e.capture.VisualState&&(n.className=" drawCall"),e.active&&(n.className=" active",setTimeout((()=>{Lt.scrollIntoView(n)}),1)),e.capture.marker){const t=document.createElement("span");t.className=i+" marker important",t.innerText=e.capture.marker+" ",t.style.fontWeight="1000",n.appendChild(t)}if("LOG"===e.capture.name){const t=document.createElement("span");t.className=i+" marker important",t.innerText=e.capture.text+" ",t.style.fontWeight="1000",n.appendChild(t)}else{const t=document.createElement("span");let r=e.capture.text;r=r.replace(e.capture.name,`${e.capture.name}`),t.innerHTML=r,n.appendChild(t)}if(e.capture.VisualState&&"clear"!==e.capture.name)try{const i=e.capture.DrawCall.shaders[0],r=e.capture.DrawCall.shaders[1],s=document.createElement("a");s.innerText=i.name,s.href="#",n.appendChild(s),this.mapEventListener(s,"click","onVertexSelected",e,t);const o=document.createElement("a");o.innerText=r.name,o.href="#",n.appendChild(o),this.mapEventListener(o,"click","onFragmentSelected",e,t)}catch(e){}return this.mapEventListener(n,"click","onCommandSelected",e,t),n}}class Mt extends Et{render(e,t){const n=this.htmlTemplate` -
                    -
                    `;return this.renderElementFromTemplate(n,e,t)}}class Ot extends Et{render(e,t){const n=this.htmlTemplate` -
                    -
                    `;return this.renderElementFromTemplate(n,e,t)}}class Bt extends Et{render(e,t){const n=this.htmlTemplate` -
                    -
                    ${e?e.replace(/([A-Z])/g," $1").trim():""}
                    -
                      -
                      `;return this.renderElementFromTemplate(n,e,t)}}class $t extends Et{render(e,t){const n=this.htmlTemplate` -
                    • ${e.key}: ${e.value}
                    • `;return this.renderElementFromTemplate(n,e,t)}}class Pt extends Et{render(e,t){const n=this.htmlTemplate` -
                    • ${e.key}
                    • `;return this.renderElementFromTemplate(n,e,t)}}class kt extends Et{render(e,t){const n=this.htmlTemplate` -
                    • ${e.key}: - ${e.value} (Open help page) - -
                    • `;return this.renderElementFromTemplate(n,e,t)}}class Dt extends Et{render(e,t){const n=document.createElement("div");if(n.className="jsonVisualStateItemComponent",e.Attachments)for(const t of e.Attachments){if(!t.src)continue;const i=document.createElement("img");if(i.src=encodeURI(t.src),n.appendChild(i),e.Attachments.length>1){const e=document.createElement("span");e.innerText=t.attachmentName,n.appendChild(e)}}else{const t=document.createElement("span");t.innerText=e.FrameBufferStatus,n.appendChild(t)}const i=document.createElement("span");return i.innerText=e.FrameBuffer?e.FrameBuffer.__SPECTOR_Object_TAG.displayText:"Canvas frame buffer",n.appendChild(i),n}}class Ut extends Et{constructor(){super(),this.onCapturesClicked=this.createEvent("onCapturesClicked"),this.onCommandsClicked=this.createEvent("onCommandsClicked"),this.onInformationClicked=this.createEvent("onInformationClicked"),this.onInitStateClicked=this.createEvent("onInitStateClicked"),this.onEndStateClicked=this.createEvent("onEndStateClicked"),this.onCloseClicked=this.createEvent("onCloseClicked"),this.onSearchTextChanged=this.createEvent("onSearchTextChanged"),this.onSearchTextCleared=this.createEvent("onSearchTextCleared")}render(e,t){const n=this.htmlTemplate``,i=this.renderElementFromTemplate(n,e,t),r=i.querySelector(".resultViewMenuOpen"),s=i.querySelectorAll("li:not(.resultViewMenuSmall)");return r.addEventListener("click",(e=>{if("true"===r.getAttribute("open")){r.setAttribute("open","false");for(let e=0;e',e,t)}}class Wt extends Et{render(e,t){const n=this.htmlTemplate` -
                      -
                      `;return this.renderElementFromTemplate(n,e,t)}}var Vt=n(29),Ht=n.n(Vt);class Xt extends Et{constructor(){super(),this.onTranslatedVertexSourceClicked=this.createEvent("onTranslatedVertexSourceClicked"),this.onTranslatedFragmentSourceClicked=this.createEvent("onTranslatedFragmentSourceClicked"),this.onVertexSourceClicked=this.createEvent("onVertexSourceClicked"),this.onFragmentSourceClicked=this.createEvent("onFragmentSourceClicked"),this.onSourceCodeCloseClicked=this.createEvent("onSourceCodeCloseClicked"),this.onSourceCodeChanged=this.createEvent("onSourceCodeChanged"),this.onBeautifyChanged=this.createEvent("onBeautifyChanged"),this.onPreprocessChanged=this.createEvent("onPreprocessChanged")}showError(e){if(!this.editor)return;const t=[];if(e=e||""){const n=/^.*ERROR:\W([0-9]+):([0-9]+):(.*)$/gm;let i=n.exec(e);for(;null!=i;)t.push({row:+i[2]-1,column:i[1],text:i[3]||"Error",type:"error"}),i=n.exec(e)}this.editor.getSession().setAnnotations(t)}render(e,t){const n=e.fragment?e.sourceFragment:e.sourceVertex;let i,r=e.preprocessed;e.translated?(i=e.fragment?e.translatedSourceFragment:e.translatedSourceVertex,r=!1):i=null!=n?n:"";let o=i;if(r)try{o=Ht()(o,{preserveComments:!1,stopOnError:!0})}catch(e){s.error("shader preprocess failed",e)}e.beautify&&(o=this._indentIfdef(this._beautify(o)));const a=this.htmlTemplate` -
                      -
                      - -
                      - $${this.htmlTemplate`
                      ${o}
                      `} -
                      -

                      - - -

                      -
                      -
                      `,l=this.renderElementFromTemplate(a.replace(/
                      /g,"\n"),e,t);this.editor=ace.edit(l.querySelector(".sourceCodeComponent")),this.editor.setTheme("ace/theme/monokai"),this.editor.getSession().setMode("ace/mode/glsl"),this.editor.setShowPrintMargin(!1);let c=-1;return this.editor.setReadOnly(!e.editable&&!e.translated),this.editor.getSession().on("change",(n=>{-1!==c&&clearTimeout(c),c=setTimeout((()=>{this._triggerCompilation(this.editor,e,l,t)}),1500)})),l}_triggerCompilation(e,t,n,i){t.fragment?t.sourceFragment=e.getValue():t.sourceVertex=e.getValue(),this.triggerEvent("onSourceCodeChanged",n,t,i)}_beautify(e,t=0){let n="";for(let e=0;ee.trim()+"\n"))).replace(/\s*([*+-/=><\s]*=)\s*/g,(e=>" "+e.trim()+" "))).replace(/\s*(,)\s*/g,(e=>e.trim()+" "))).replace(/\n[ \t]+/g,"\n")).replace(/\n/g,"\n"+n)).replace(/\s+$/g,"")).replace(/\n+$/g,"");else{const i=e.substr(0,s).trim(),r=e.substr(o+1,e.length).trim(),l=e.substr(s+1,o-s-1).trim();a=(""===i?n+"{":this._beautify(i,t)+" {\n")+this._beautify(l,t+1)+"\n"+n+"}\n"+this._beautify(r,t),a=a.replace(/\s*\n+\s*;/g,";")}return a=a.replace(Xt.semicolonReplacementKeyRegex,";"),a=a.replace(Xt.openCurlyReplacementKeyRegex,"{"),a=a.replace(Xt.closeCurlyReplacementKeyRegex,"}"),a}_adaptComments(e){let t=!1,n=!1;for(let i=0;i-1&&0===o?this._getBracket(e,n+1):{firstIteration:n,lastIteration:o}}_indentIfdef(e){let t=0;const n=e.split("\n");for(let e=0;e`;return this.renderElementFromTemplate(n,e,t)}}class Kt{static getMDNLink(e){const t=Kt.WebGL2Functions[e];if(t)return Kt.WebGL2RootUrl+t;const n=Kt.WebGLFunctions[e];if(n)return Kt.WebGLRootUrl+n;const i=Kt.AngleInstancedArraysExtFunctions[e];return i?Kt.AngleInstancedArraysExtRootUrl+i:Kt.WebGLRootUrl+e}}Kt.WebGL2RootUrl="https://developer.mozilla.org/en-US/docs/Web/API/WebGL2RenderingContext/",Kt.WebGLRootUrl="https://developer.mozilla.org/en-US/docs/Web/API/WebGLRenderingContext/",Kt.AngleInstancedArraysExtRootUrl="https://developer.mozilla.org/en-US/docs/Web/API/ANGLE_instanced_arrays/",Kt.WebGL2Functions={beginQuery:"beginQuery",beginTransformFeedback:"beginTransformFeedback",bindBufferBase:"bindBufferBase",bindBufferRange:"bindBufferRange",bindSampler:"bindSampler",bindTransformFeedback:"bindTransformFeedback",bindVertexArray:"bindVertexArray",blitFramebuffer:"blitFramebuffer",clearBufferfv:"clearBuffer",clearBufferiv:"clearBuffer",clearBufferuiv:"clearBuffer",clearBufferfi:"clearBuffer",clientWaitSync:"clientWaitSync",compressedTexImage3D:"compressedTexImage3D",compressedTexSubImage3D:"compressedTexSubImage3D",copyBufferSubData:"copyBufferSubData",copyTexSubImage3D:"copyTexSubImage3D",createQuery:"createQuery",createSampler:"createSampler",createTransformFeedback:"createTransformFeedback",createVertexArray:"createVertexArray",deleteQuery:"deleteQuery",deleteSampler:"deleteSampler",deleteSync:"deleteSync",deleteTransformFeedback:"deleteTransformFeedback",deleteVertexArray:"deleteVertexArray",drawArraysInstanced:"drawArraysInstanced",drawBuffers:"drawBuffers",drawElementsInstanced:"drawElementsInstanced",drawRangeElements:"drawRangeElements",endQuery:"endQuery",endTransformFeedback:"endTransformFeedback",fenceSync:"fenceSync",framebufferTextureLayer:"framebufferTextureLayer",getActiveUniformBlockName:"getActiveUniformBlockName",getActiveUniformBlockParameter:"getActiveUniformBlockParameter",getActiveUniforms:"getActiveUniforms",getBufferSubData:"getBufferSubData",getFragDataLocation:"getFragDataLocation",getIndexedParameter:"getIndexedParameter",getInternalformatParameter:"getInternalformatParameter",getQuery:"getQuery",getQueryParameter:"getQueryParameter",getSamplerParameter:"getSamplerParameter",getSyncParameter:"getSyncParameter",getTransformFeedbackVarying:"getTransformFeedbackVarying",getUniformBlockIndex:"getUniformBlockIndex",getUniformIndices:"getUniformIndices",invalidateFramebuffer:"invalidateFramebuffer",invalidateSubFramebuffer:"invalidateSubFramebuffer",isQuery:"isQuery",isSampler:"isSampler",isSync:"isSync",isTransformFeedback:"isTransformFeedback",isVertexArray:"isVertexArray",pauseTransformFeedback:"pauseTransformFeedback",readBuffer:"readBuffer",renderbufferStorageMultisample:"renderbufferStorageMultisample",resumeTransformFeedback:"resumeTransformFeedback",samplerParameteri:"samplerParameter",samplerParameterf:"samplerParameter",texImage3D:"texImage3D",texStorage2D:"texStorage2D",texStorage3D:"texStorage3D",texSubImage3D:"texSubImage3D",transformFeedbackVaryings:"transformFeedbackVaryings",uniform1ui:"uniform",uniform2ui:"uniform",uniform3ui:"uniform",uniform4ui:"uniform",uniform1fv:"uniform",uniform2fv:"uniform",uniform3fv:"uniform",uniform4fv:"uniform",uniform1iv:"uniform",uniform2iv:"uniform",uniform3iv:"uniform",uniform4iv:"uniform",uniform1uiv:"uniform",uniform2uiv:"uniform",uniform3uiv:"uniform",uniform4uiv:"uniform",uniformBlockBinding:"uniformBlockBinding",uniformMatrix2fv:"uniformMatrix",uniformMatrix3x2fv:"uniformMatrix",uniformMatrix4x2fv:"uniformMatrix",uniformMatrix2x3fv:"uniformMatrix",uniformMatrix3fv:"uniformMatrix",uniformMatrix4x3fv:"uniformMatrix",uniformMatrix2x4fv:"uniformMatrix",uniformMatrix3x4fv:"uniformMatrix",uniformMatrix4fv:"uniformMatrix",vertexAttribDivisor:"vertexAttribDivisor",vertexAttribI4i:"vertexAttribI",vertexAttribI4ui:"vertexAttribI",vertexAttribI4iv:"vertexAttribI",vertexAttribI4uiv:"vertexAttribI",vertexAttribIPointer:"vertexAttribIPointer",waitSync:"waitSync"},Kt.WebGLFunctions={uniform1f:"uniform",uniform1fv:"uniform",uniform1i:"uniform",uniform1iv:"uniform",uniform2f:"uniform",uniform2fv:"uniform",uniform2i:"uniform",uniform2iv:"uniform",uniform3f:"uniform",uniform3i:"uniform",uniform3iv:"uniform",uniform4f:"uniform",uniform4fv:"uniform",uniform4i:"uniform",uniform4iv:"uniform",uniformMatrix2fv:"uniformMatrix",uniformMatrix3fv:"uniformMatrix",uniformMatrix4fv:"uniformMatrix",vertexAttrib1f:"vertexAttrib",vertexAttrib2f:"vertexAttrib",vertexAttrib3f:"vertexAttrib",vertexAttrib4f:"vertexAttrib",vertexAttrib1fv:"vertexAttrib",vertexAttrib2fv:"vertexAttrib",vertexAttrib3fv:"vertexAttrib",vertexAttrib4fv:"vertexAttrib"},Kt.AngleInstancedArraysExtFunctions={drawArraysInstancedANGLE:"drawArraysInstancedANGLE",drawElementsInstancedANGLE:"drawElementsInstancedANGLE",vertexAttribDivisorANGLE:"vertexAttribDivisorANGLE"};class jt{constructor(e=null){this.rootPlaceHolder=e,this.onSourceCodeChanged=new o,this.rootPlaceHolder=this.rootPlaceHolder||document.body,this.mvx=new ft(this.rootPlaceHolder),this.searchText="",this.currentCommandId=-1,this.visible=!1,this.commandCount=0,this.commandListStateId=-1,this.commandDetailStateId=-1,this.currentCaptureStateId=-1,this.currentCommandStateId=-1,this.currentVisualStateId=-1,this.visualStateListStateId=-1,this.initVisualStateId=-1,this.sourceCodeComponentStateId=-1,this.captureListComponent=new wt,this.captureListItemComponent=new xt,this.visualStateListComponent=new yt,this.visualStateListItemComponent=new It,this.commandListComponent=new Ft,this.commandListItemComponent=new Nt,this.commandDetailComponent=new Mt,this.jsonContentComponent=new Ot,this.jsonGroupComponent=new Bt,this.jsonItemComponent=new $t,this.jsonImageItemComponent=new Pt,this.jsonHelpItemComponent=new kt,this.jsonVisualStateItemComponent=new Dt,this.resultViewMenuComponent=new Ut,this.resultViewContentComponent=new Gt,this.resultViewComponent=new Wt,this.sourceCodeComponent=new Xt,this.informationColumnComponent=new zt,this.rootStateId=this.mvx.addRootState(null,this.resultViewComponent),this.menuStateId=this.mvx.addChildState(this.rootStateId,null,this.resultViewMenuComponent),this.contentStateId=this.mvx.addChildState(this.rootStateId,null,this.resultViewContentComponent),this.captureListStateId=this.mvx.addChildState(this.rootStateId,!1,this.captureListComponent),this.initKeyboardEvents(),this.initMenuComponent(),this.captureListComponent.onCaptureLoaded.add((e=>{this.addCapture(e)})),this.captureListItemComponent.onCaptureSelected.add((e=>{this.selectCapture(e.stateId)})),this.captureListItemComponent.onSaveRequested.add((e=>{this.saveCapture(e.state.capture)})),this.visualStateListItemComponent.onVisualStateSelected.add((e=>{this.selectVisualState(e.stateId)})),this.commandListItemComponent.onCommandSelected.add((e=>{this.selectCommand(e.stateId)})),this.commandListItemComponent.onVertexSelected.add((e=>{this.selectCommand(e.stateId),this.openShader(!1)})),this.commandListItemComponent.onFragmentSelected.add((e=>{this.selectCommand(e.stateId),this.openShader(!0)})),this.sourceCodeComponent.onSourceCodeCloseClicked.add((()=>{this.displayCurrentCapture()})),this.sourceCodeComponent.onTranslatedVertexSourceClicked.add((e=>{const t=this.mvx.getGenericState(this.sourceCodeComponentStateId);t.fragment=!1,t.translated=!0,this.mvx.updateState(this.sourceCodeComponentStateId,t)})),this.sourceCodeComponent.onTranslatedFragmentSourceClicked.add((e=>{const t=this.mvx.getGenericState(this.sourceCodeComponentStateId);t.fragment=!0,t.translated=!0,this.mvx.updateState(this.sourceCodeComponentStateId,t)})),this.sourceCodeComponent.onVertexSourceClicked.add((e=>{const t=this.mvx.getGenericState(this.sourceCodeComponentStateId);t.fragment=!1,t.translated=!1,this.mvx.updateState(this.sourceCodeComponentStateId,t)})),this.sourceCodeComponent.onFragmentSourceClicked.add((e=>{const t=this.mvx.getGenericState(this.sourceCodeComponentStateId);t.fragment=!0,t.translated=!1,this.mvx.updateState(this.sourceCodeComponentStateId,t)})),this.sourceCodeComponent.onSourceCodeChanged.add((e=>{this.onSourceCodeChanged.trigger({programId:e.state.programId,sourceFragment:e.state.sourceFragment,sourceVertex:e.state.sourceVertex,translatedSourceFragment:e.state.translatedSourceFragment,translatedSourceVertex:e.state.translatedSourceVertex})})),this.sourceCodeComponent.onBeautifyChanged.add((e=>{const t=this.mvx.getGenericState(this.sourceCodeComponentStateId);t.beautify=e.sender.checked,this.mvx.updateState(this.sourceCodeComponentStateId,t)})),this.sourceCodeComponent.onPreprocessChanged.add((e=>{const t=this.mvx.getGenericState(this.sourceCodeComponentStateId);t.preprocessed=e.sender.checked,this.mvx.updateState(this.sourceCodeComponentStateId,t)})),this.updateViewState()}saveCapture(e){const t=JSON.stringify(e,null,4),n=new Blob([t],{type:"octet/stream"}),i="capture "+new Date(e.startTime).toTimeString().split(" ")[0]+".json";if(navigator.msSaveBlob)navigator.msSaveBlob(n,i);else{const e=document.createElement("a"),t=window.URL.createObjectURL(n);e.setAttribute("href",t),e.setAttribute("download",i),e.click()}}selectCapture(e){this.currentCommandId=-1,this.currentCaptureStateId=e,this.displayCurrentCapture()}selectCommand(e){this.currentCommandStateId=e,this.currentVisualStateId=this.displayCurrentCommand(),this.displayCurrentVisualState()}selectVisualState(e){this.currentVisualStateId=e,this.currentCommandStateId=this.displayCurrentVisualState(),this.displayCurrentCommand()}display(){this.visible=!0,this.updateViewState()}hide(){this.visible=!1,this.updateViewState()}addCapture(e){const t=this.mvx.insertChildState(this.captureListStateId,{capture:e,active:!1},0,this.captureListItemComponent);return this.selectCapture(t),t}showSourceCodeError(e){this.sourceCodeComponent.showError(e)}initKeyboardEvents(){this.rootPlaceHolder.addEventListener("keydown",(e=>{40===this.mvx.getGenericState(this.menuStateId).status&&(38===e.keyCode?(e.preventDefault(),e.stopPropagation(),this.selectPreviousCommand()):40===e.keyCode?(e.preventDefault(),e.stopPropagation(),this.selectNextCommand()):33===e.keyCode?(e.preventDefault(),e.stopPropagation(),this.selectPreviousVisualState()):34===e.keyCode&&(e.preventDefault(),e.stopPropagation(),this.selectNextVisualState()))}))}openShader(e){this.mvx.removeChildrenStates(this.contentStateId);const t=this.mvx.getGenericState(this.currentCommandStateId);this.sourceCodeComponentStateId=this.mvx.addChildState(this.contentStateId,{programId:t.capture.DrawCall.programStatus.program.__SPECTOR_Object_TAG.id,nameVertex:t.capture.DrawCall.shaders[0].name,nameFragment:t.capture.DrawCall.shaders[1].name,sourceVertex:t.capture.DrawCall.shaders[0].source,sourceFragment:t.capture.DrawCall.shaders[1].source,translatedSourceVertex:t.capture.DrawCall.shaders[0].translatedSource,translatedSourceFragment:t.capture.DrawCall.shaders[1].translatedSource,fragment:e,translated:!1,editable:t.capture.DrawCall.programStatus.RECOMPILABLE,beautify:!0},this.sourceCodeComponent),this.commandDetailStateId=this.mvx.addChildState(this.contentStateId,null,this.commandDetailComponent),this.displayCurrentCommandDetail(t)}selectPreviousCommand(){const e=this.mvx.getGenericState(this.currentCommandStateId);e.previousCommandStateId<0||this.selectCommand(e.previousCommandStateId)}selectNextCommand(){const e=this.mvx.getGenericState(this.currentCommandStateId);e.nextCommandStateId<0||this.selectCommand(e.nextCommandStateId)}selectPreviousVisualState(){const e=this.mvx.getGenericState(this.currentVisualStateId);e.previousVisualStateId<0||this.selectVisualState(e.previousVisualStateId)}selectNextVisualState(){const e=this.mvx.getGenericState(this.currentVisualStateId);e.nextVisualStateId<0||this.selectVisualState(e.nextVisualStateId)}initMenuComponent(){this.mvx.updateState(this.menuStateId,{status:0,searchText:this.searchText,commandCount:0}),this.resultViewMenuComponent.onCloseClicked.add((e=>{this.hide()})),this.resultViewMenuComponent.onCapturesClicked.add((e=>{this.displayCaptures()})),this.resultViewMenuComponent.onCommandsClicked.add((e=>{this.displayCurrentCapture()})),this.resultViewMenuComponent.onInformationClicked.add((e=>{this.displayInformation()})),this.resultViewMenuComponent.onInitStateClicked.add((e=>{this.displayInitState()})),this.resultViewMenuComponent.onEndStateClicked.add((e=>{this.displayEndState()})),this.resultViewMenuComponent.onSearchTextChanged.add((e=>{this.search(e.sender.value)})),this.resultViewMenuComponent.onSearchTextCleared.add((e=>{this.mvx.updateState(this.menuStateId,{status:e.state.status,searchText:"",commandCount:e.state.commandCount}),this.search("")}))}onCaptureRelatedAction(e){const t=this.mvx.getGenericState(this.currentCaptureStateId);return this.commandCount=t.capture.commands.length,this.mvx.removeChildrenStates(this.contentStateId),this.mvx.updateState(this.menuStateId,{status:e,searchText:this.searchText,commandCount:this.commandCount}),this.mvx.getGenericState(this.captureListStateId)&&this.mvx.updateState(this.captureListStateId,!1),t.capture}displayCaptures(){this.mvx.updateState(this.menuStateId,{status:0,searchText:this.searchText,commandCount:this.commandCount}),this.mvx.updateState(this.captureListStateId,!0)}displayInformation(){const e=this.onCaptureRelatedAction(10),t=this.mvx.addChildState(this.contentStateId,!0,this.informationColumnComponent),n=this.mvx.addChildState(this.contentStateId,!1,this.informationColumnComponent),i=this.mvx.addChildState(t,null,this.jsonContentComponent);this.displayJSONGroup(i,"Canvas",e.canvas),this.displayJSONGroup(i,"Context",e.context);const r=this.mvx.addChildState(n,null,this.jsonContentComponent);for(const t of e.analyses)"Primitives"===t.analyserName?this.displayJSONGroup(r,"Vertices count",t):this.displayJSONGroup(r,t.analyserName,t);this.displayJSONGroup(r,"Frame Memory Changes",e.frameMemory),this.displayJSONGroup(r,"Total Memory (seconds since application start: bytes)",e.memory)}displayJSON(e,t){t.VisualState&&this.mvx.addChildState(e,t.VisualState,this.jsonVisualStateItemComponent);for(const n in t){if("VisualState"===n||"analyserName"===n||"source"===n||"translatedSource"===n)continue;const i=t[n];if("visual"===n)for(const n in i)i.hasOwnProperty(n)&&i[n]&&this.mvx.addChildState(e,{key:n,value:i[n],pixelated:"NEAREST"===t.samplerMagFilter||"NEAREST"===t.magFilter},this.jsonImageItemComponent);else{const t=this.getJSONAsString(e,n,i);if(null==t)continue;if(this.toFilter(n)&&this.toFilter(i))continue;this.mvx.addChildState(e,{key:n,value:t},this.jsonItemComponent)}i&&i.__SPECTOR_Metadata&&this.displayJSONGroup(e,"Metadata",i.__SPECTOR_Metadata)}}getJSONAsString(e,t,n){if(null===n)return"null";if(void 0===n)return"undefined";if("number"==typeof n)return Math.floor(n)===n?n.toFixed(0):n.toFixed(4);if("string"==typeof n)return n;if("boolean"==typeof n)return n?"true":"false";if(0===n.length)return"Empty Array";if(n.length){const i=[];for(let r=0;r(e.active=!1,e))),this.mvx.updateState(this.currentCaptureStateId,{capture:e,active:!0}),this.createVisualStates(e),this.commandListStateId=this.mvx.addChildState(this.contentStateId,null,this.commandListComponent),this.commandDetailStateId=this.mvx.addChildState(this.contentStateId,null,this.commandDetailComponent),this.createCommands(e)}displayCurrentCommand(){if(40!==this.mvx.getGenericState(this.menuStateId).status)return-1;const e=this.mvx.getGenericState(this.currentCommandStateId),t=e.capture;return this.currentCommandId=t.id,this.mvx.updateAllChildrenGenericState(this.commandListStateId,(e=>(e.active=!1,e))),this.mvx.updateState(this.currentCommandStateId,{capture:t,visualStateId:e.visualStateId,previousCommandStateId:e.previousCommandStateId,nextCommandStateId:e.nextCommandStateId,active:!0}),this.displayCurrentCommandDetail(e)}displayCurrentCommandDetail(e){const t=e.capture;this.mvx.removeChildrenStates(this.commandDetailStateId);const n=this.mvx.getGenericState(e.visualStateId);this.mvx.addChildState(this.commandDetailStateId,n.VisualState,this.jsonVisualStateItemComponent);let i="Unknown";switch(t.status){case 50:i="Deprecated";break;case 10:i="Unused";break;case 20:i="Disabled";break;case 30:i="Redundant";break;case 40:i="Valid"}const r=Kt.getMDNLink(t.name);t.result?this.displayJSONGroup(this.commandDetailStateId,"Global",{name:{help:r,name:t.name},duration:t.commandEndTime-t.startTime,result:t.result,status:i}):"LOG"!==t.name&&this.displayJSONGroup(this.commandDetailStateId,"Global",{name:{help:r,name:t.name},duration:t.commandEndTime-t.startTime,status:i});for(const e in t)"VisualState"!==e&&"result"!==e&&"object"==typeof t[e]&&this.displayJSONGroup(this.commandDetailStateId,e,t[e]);return e.visualStateId}displayCurrentVisualState(){if(40!==this.mvx.getGenericState(this.menuStateId).status)return null;const e=this.mvx.getGenericState(this.currentVisualStateId);return e.commandStateId===Number.MIN_VALUE?this.displayInitState():e.commandStateId===Number.MAX_VALUE&&this.displayEndState(),this.mvx.updateAllChildrenGenericState(this.visualStateListStateId,(e=>(e.active=!1,e))),e.active=!0,this.mvx.updateState(this.currentVisualStateId,e),e.commandStateId}createVisualStates(e){this.visualStateListStateId=this.mvx.addChildState(this.contentStateId,null,this.visualStateListComponent),this.mvx.removeChildrenStates(this.visualStateListStateId),this.initVisualStateId=this.mvx.addChildState(this.visualStateListStateId,{VisualState:e.initState.VisualState,time:e.startTime,commandStateId:Number.MIN_VALUE,active:!1},this.visualStateListItemComponent)}createCommands(e){this.mvx.removeChildrenStates(this.commandListStateId);let t=this.initVisualStateId,n=!1,i=null,r=-1,s=null,o=-1;for(let a=0;a2&&-1===e.indexOf(this.searchText.toLowerCase()))}search(e){switch(this.searchText=e,this.mvx.getGenericState(this.menuStateId).status){case 0:case 40:this.displayCurrentCapture();break;case 30:this.displayEndState();break;case 10:this.displayInformation();break;case 20:this.displayInitState()}this.searchText=""}}class Yt{constructor(e){this.timeSpy=e,this.init()}spyXRSession(e){this.currentXRSession&&this.unspyXRSession();for(const e of Ze.getRequestAnimationFrameFunctionNames())A.resetOriginFunction(this.timeSpy.getSpiedScope(),e);this.timeSpy.spyRequestAnimationFrame("requestAnimationFrame",e),this.currentXRSession=e}unspyXRSession(){if(this.currentXRSession){A.resetOriginFunction(this.currentXRSession,"requestAnimationFrame"),this.currentXRSession=void 0;for(const e of Ze.getRequestAnimationFrameFunctionNames())this.timeSpy.spyRequestAnimationFrame(e,this.timeSpy.getSpiedScope())}}init(){if(!navigator.xr)return;class e extends XRWebGLLayer{constructor(e,t,n){super(e,t,n),this.glContext=t}getContext(){return this.glContext}}class t extends XRWebGLBinding{constructor(e,t){super(e,t),this.glContext=t}createProjectionLayer(e){const t=super.createProjectionLayer(e);return t.glContext=this.glContext,t}}window.XRWebGLLayer=e,window.XRWebGLBinding=t;const n=navigator.xr.requestSession;Object.defineProperty(navigator.xr,"requestSessionInternal",{writable:!0}),navigator.xr.requestSessionInternal=n,Object.defineProperty(navigator.xr,"requestSession",{writable:!0}),navigator.xr.requestSession=(e,t)=>((e,t)=>navigator.xr.requestSessionInternal(e,t).then((e=>{const t=e;return t._updateRenderState=e.updateRenderState,t.updateRenderState=e=>{return n=this,i=void 0,s=function*(){if(e.baseLayer){const n=e.baseLayer;t.glContext=n.getContext()}if(e.layers)for(const n of e.layers){const e=n;e.glContext&&(t.glContext=e.glContext)}return t._updateRenderState(e)},new((r=void 0)||(r=Promise))((function(e,t){function o(e){try{l(s.next(e))}catch(e){t(e)}}function a(e){try{l(s.throw(e))}catch(e){t(e)}}function l(t){var n;t.done?e(t.value):(n=t.value,n instanceof r?n:new r((function(e){e(n)}))).then(o,a)}l((s=s.apply(n,i||[])).next())}));var n,i,r,s},this.spyXRSession(t),e.addEventListener("end",(()=>{this.unspyXRSession()})),Promise.resolve(e)})))(e,t)}}const qt={CaptureMenu:St,ResultView:jt};class Zt{constructor(e={}){this.noFrameTimeout=-1,this.options=Object.assign({enableXRCapture:!1},e),this.captureNextFrames=0,this.captureNextCommands=0,this.quickCapture=!1,this.fullCapture=!1,this.retry=0,this.contexts=[],this.timeSpy=new Ze,this.onCaptureStarted=new o,this.onCapture=new o,this.onError=new o,this.timeSpy.onFrameStart.add(this.onFrameStart,this),this.timeSpy.onFrameEnd.add(this.onFrameEnd,this),this.timeSpy.onError.add(this.onErrorInternal,this),this.options.enableXRCapture&&(this.xrSpy=new Yt(this.timeSpy))}static getFirstAvailable3dContext(e){return this.tryGetContextFromHelperField(e)||this.tryGetContextFromCanvas(e,"webgl")||this.tryGetContextFromCanvas(e,"experimental-webgl")||this.tryGetContextFromCanvas(e,"webgl2")||this.tryGetContextFromCanvas(e,"experimental-webgl2")}static tryGetContextFromHelperField(e){const t=e instanceof HTMLCanvasElement?e.getAttribute("__spector_context_type"):e.__spector_context_type;if(t)return this.tryGetContextFromCanvas(e,t)}static tryGetContextFromCanvas(e,t){let n;try{n=e.getContext(t)}catch(e){}return n}displayUI(e=!1){this.captureMenu||(this.getCaptureUI(),this.captureMenu.onPauseRequested.add(this.pause,this),this.captureMenu.onPlayRequested.add(this.play,this),this.captureMenu.onPlayNextFrameRequested.add(this.playNextFrame,this),this.captureMenu.onCaptureRequested.add((e=>{e&&this.captureCanvas(e.ref)}),this),setInterval((()=>{this.captureMenu.setFPS(this.getFps())}),1e3),e||this.captureMenu.trackPageCanvases(),this.captureMenu.display()),this.resultView||(this.getResultUI(),this.onCapture.add((e=>{this.resultView.display(),this.resultView.addCapture(e)})))}getResultUI(){return this.resultView||(this.resultView=new jt,this.resultView.onSourceCodeChanged.add((e=>{this.rebuildProgramFromProgramId(e.programId,e.sourceVertex,e.sourceFragment,(t=>{this.referenceNewProgram(e.programId,t),this.resultView.showSourceCodeError(null)}),(e=>{this.resultView.showSourceCodeError(e)}))}))),this.resultView}getCaptureUI(){return this.captureMenu||(this.captureMenu=new St),this.captureMenu}rebuildProgramFromProgramId(e,t,n,i,r){const s=we.getFromGlobalStore(e);this.rebuildProgram(s,t,n,i,r)}rebuildProgram(e,t,n,r,s){i.rebuildProgram(e,t,n,r,s)}referenceNewProgram(e,t){we.updateInGlobalStore(e,t)}pause(){this.timeSpy.changeSpeedRatio(0)}play(){this.timeSpy.changeSpeedRatio(1)}playNextFrame(){this.timeSpy.playNextFrame()}drawOnlyEveryXFrame(e){this.timeSpy.changeSpeedRatio(e)}getFps(){return this.timeSpy.getFps()}spyCanvases(){this.canvasSpy?this.onErrorInternal("Already spying canvas."):(this.canvasSpy=new Qe,this.canvasSpy.onContextRequested.add(this.spyContext,this))}spyCanvas(e){this.canvasSpy?this.onErrorInternal("Already spying canvas."):(this.canvasSpy=new Qe(e),this.canvasSpy.onContextRequested.add(this.spyContext,this))}getAvailableContexts(){return this.getAvailableContexts()}captureCanvas(e,t=0,n=!1,i=!1){const r=this.getAvailableContextSpyByCanvas(e);if(r)this.captureContextSpy(r,t,n,i);else{const r=Zt.getFirstAvailable3dContext(e);r?this.captureContext(r,t,n,i):s.error("No webgl context available on the chosen canvas.")}}captureContext(e,t=0,n=!1,i=!1){let r=this.getAvailableContextSpyByCanvas(e.canvas);r||(r=e.getIndexedParameter?new qe({context:e,version:2,recordAlways:!1}):new qe({context:e,version:1,recordAlways:!1}),r.onMaxCommand.add(this.stopCapture,this),this.contexts.push({canvas:r.context.canvas,contextSpy:r})),r&&this.captureContextSpy(r,t,n,i)}captureXRContext(e=0,t=!1,n=!1){this.captureContext(this.getXRContext(),e,t,n)}captureContextSpy(e,t=0,n=!1,i=!1){this.quickCapture=n,this.fullCapture=i,this.capturingContext?this.onErrorInternal("Already capturing a context."):(this.retry=0,this.capturingContext=e,this.capturingContext.setMarker(this.marker),(t=Math.min(t,1e4))>0?this.captureCommands(t):this.captureFrames(1),this.noFrameTimeout=setTimeout((()=>{t>0?this.stopCapture():this.capturingContext&&this.retry>1?this.onErrorInternal("No frames with gl commands detected. Try moving the camera."):this.onErrorInternal("No frames detected. Try moving the camera or implementing requestAnimationFrame.")}),1e4))}captureNextFrame(e,t=!1,n=!1){e instanceof HTMLCanvasElement||self.OffscreenCanvas&&e instanceof OffscreenCanvas?this.captureCanvas(e,0,t,n):this.captureContext(e,0,t,n)}startCapture(e,t,n=!1,i=!1){e instanceof HTMLCanvasElement||self.OffscreenCanvas&&e instanceof OffscreenCanvas?this.captureCanvas(e,t,n,i):this.captureContext(e,t,n,i)}stopCapture(){if(this.capturingContext){const e=this.capturingContext.stopCapture();if(e.commands.length>0)return this.noFrameTimeout>-1&&clearTimeout(this.noFrameTimeout),this.triggerCapture(e),this.capturingContext=void 0,this.captureNextFrames=0,this.captureNextCommands=0,e;0===this.captureNextCommands&&(this.retry++,this.captureFrames(1))}}setMarker(e){this.marker=e,this.capturingContext&&this.capturingContext.setMarker(e)}clearMarker(){this.marker=null,this.capturingContext&&this.capturingContext.clearMarker()}addRequestAnimationFrameFunctionName(e){this.timeSpy.addRequestAnimationFrameFunctionName(e)}setSpiedScope(e){this.timeSpy.setSpiedScope(e)}log(e){this.capturingContext&&this.capturingContext.log(e)}captureFrames(e){this.captureNextFrames=e,this.captureNextCommands=0,this.playNextFrame()}captureCommands(e){this.captureNextFrames=0,this.captureNextCommands=e,this.play(),this.capturingContext?(this.onCaptureStarted.trigger(void 0),this.capturingContext.startCapture(e,this.quickCapture,this.fullCapture)):(this.onErrorInternal("No context to capture from."),this.captureNextCommands=0)}spyContext(e){let t=this.getAvailableContextSpyByCanvas(e.context.canvas);t||(t=new qe({context:e.context,version:e.contextVersion,recordAlways:!0}),t.onMaxCommand.add(this.stopCapture,this),this.contexts.push({canvas:t.context.canvas,contextSpy:t})),t.spy()}getAvailableContextSpyByCanvas(e){for(const t of this.contexts)if(t.canvas===e)return t.contextSpy}getXRContext(){return this.options.enableXRCapture||s.error("Cannot retrieve WebXR context if capturing WebXR is disabled."),this.xrSpy.currentXRSession||s.error("No currently active WebXR session."),this.xrSpy.currentXRSession.glContext}onFrameStart(){this.captureNextCommands>0||(this.captureNextFrames>0?(this.capturingContext&&(this.onCaptureStarted.trigger(void 0),this.capturingContext.startCapture(0,this.quickCapture,this.fullCapture)),this.captureNextFrames--):this.capturingContext=void 0)}onFrameEnd(){this.captureNextCommands>0||0===this.captureNextFrames&&this.stopCapture()}triggerCapture(e){this.captureMenu&&this.captureMenu.captureComplete(null),this.onCapture.trigger(e)}onErrorInternal(e){if(s.error(e),this.noFrameTimeout>-1&&clearTimeout(this.noFrameTimeout),!this.capturingContext)throw e;this.capturingContext=void 0,this.captureNextFrames=0,this.captureNextCommands=0,this.retry=0,this.captureMenu&&this.captureMenu.captureComplete(e),this.onError.trigger(e)}}},18:(e,t,n)=>{e=n.nmd(e),ace.define("ace/ext/searchbox",["require","exports","module","ace/lib/dom","ace/lib/lang","ace/lib/event","ace/keyboard/hash_handler","ace/lib/keys"],(function(e,t,n){"use strict";var i=e("../lib/dom"),r=e("../lib/lang"),s=e("../lib/event"),o='.ace_search {background-color: #ddd;color: #666;border: 1px solid #cbcbcb;border-top: 0 none;overflow: hidden;margin: 0;padding: 4px 6px 0 4px;position: absolute;top: 0;z-index: 99;white-space: normal;}.ace_search.left {border-left: 0 none;border-radius: 0px 0px 5px 0px;left: 0;}.ace_search.right {border-radius: 0px 0px 0px 5px;border-right: 0 none;right: 0;}.ace_search_form, .ace_replace_form {margin: 0 20px 4px 0;overflow: hidden;line-height: 1.9;}.ace_replace_form {margin-right: 0;}.ace_search_form.ace_nomatch {outline: 1px solid red;}.ace_search_field {border-radius: 3px 0 0 3px;background-color: white;color: black;border: 1px solid #cbcbcb;border-right: 0 none;outline: 0;padding: 0;font-size: inherit;margin: 0;line-height: inherit;padding: 0 6px;min-width: 17em;vertical-align: top;min-height: 1.8em;box-sizing: content-box;}.ace_searchbtn {border: 1px solid #cbcbcb;line-height: inherit;display: inline-block;padding: 0 6px;background: #fff;border-right: 0 none;border-left: 1px solid #dcdcdc;cursor: pointer;margin: 0;position: relative;color: #666;}.ace_searchbtn:last-child {border-radius: 0 3px 3px 0;border-right: 1px solid #cbcbcb;}.ace_searchbtn:disabled {background: none;cursor: default;}.ace_searchbtn:hover {background-color: #eef1f6;}.ace_searchbtn.prev, .ace_searchbtn.next {padding: 0px 0.7em}.ace_searchbtn.prev:after, .ace_searchbtn.next:after {content: "";border: solid 2px #888;width: 0.5em;height: 0.5em;border-width: 2px 0 0 2px;display:inline-block;transform: rotate(-45deg);}.ace_searchbtn.next:after {border-width: 0 2px 2px 0 ;}.ace_searchbtn_close {background: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAA4AAAAcCAYAAABRVo5BAAAAZ0lEQVR42u2SUQrAMAhDvazn8OjZBilCkYVVxiis8H4CT0VrAJb4WHT3C5xU2a2IQZXJjiQIRMdkEoJ5Q2yMqpfDIo+XY4k6h+YXOyKqTIj5REaxloNAd0xiKmAtsTHqW8sR2W5f7gCu5nWFUpVjZwAAAABJRU5ErkJggg==) no-repeat 50% 0;border-radius: 50%;border: 0 none;color: #656565;cursor: pointer;font: 16px/16px Arial;padding: 0;height: 14px;width: 14px;top: 9px;right: 7px;position: absolute;}.ace_searchbtn_close:hover {background-color: #656565;background-position: 50% 100%;color: white;}.ace_button {margin-left: 2px;cursor: pointer;-webkit-user-select: none;-moz-user-select: none;-o-user-select: none;-ms-user-select: none;user-select: none;overflow: hidden;opacity: 0.7;border: 1px solid rgba(100,100,100,0.23);padding: 1px;box-sizing: border-box!important;color: black;}.ace_button:hover {background-color: #eee;opacity:1;}.ace_button:active {background-color: #ddd;}.ace_button.checked {border-color: #3399ff;opacity:1;}.ace_search_options{margin-bottom: 3px;text-align: right;-webkit-user-select: none;-moz-user-select: none;-o-user-select: none;-ms-user-select: none;user-select: none;clear: both;}.ace_search_counter {float: left;font-family: arial;padding: 0 8px;}',a=e("../keyboard/hash_handler").HashHandler,l=e("../lib/keys");i.importCssString(o,"ace_searchbox");var c=function(e,t,n){var r=i.createElement("div");i.buildDom(["div",{class:"ace_search right"},["span",{action:"hide",class:"ace_searchbtn_close"}],["div",{class:"ace_search_form"},["input",{class:"ace_search_field",placeholder:"Search for",spellcheck:"false"}],["span",{action:"findPrev",class:"ace_searchbtn prev"},"​"],["span",{action:"findNext",class:"ace_searchbtn next"},"​"],["span",{action:"findAll",class:"ace_searchbtn",title:"Alt-Enter"},"All"]],["div",{class:"ace_replace_form"},["input",{class:"ace_search_field",placeholder:"Replace with",spellcheck:"false"}],["span",{action:"replaceAndFindNext",class:"ace_searchbtn"},"Replace"],["span",{action:"replaceAll",class:"ace_searchbtn"},"All"]],["div",{class:"ace_search_options"},["span",{action:"toggleReplace",class:"ace_button",title:"Toggle Replace mode",style:"float:left;margin-top:-2px;padding:0 5px;"},"+"],["span",{class:"ace_search_counter"}],["span",{action:"toggleRegexpMode",class:"ace_button",title:"RegExp Search"},".*"],["span",{action:"toggleCaseSensitive",class:"ace_button",title:"CaseSensitive Search"},"Aa"],["span",{action:"toggleWholeWords",class:"ace_button",title:"Whole Word Search"},"\\b"],["span",{action:"searchInSelection",class:"ace_button",title:"Search In Selection"},"S"]]],r),this.element=r.firstChild,this.setSession=this.setSession.bind(this),this.$init(),this.setEditor(e),i.importCssString(o,"ace_searchbox",e.container)};(function(){this.setEditor=function(e){e.searchBox=this,e.renderer.scroller.appendChild(this.element),this.editor=e},this.setSession=function(e){this.searchRange=null,this.$syncOptions(!0)},this.$initElements=function(e){this.searchBox=e.querySelector(".ace_search_form"),this.replaceBox=e.querySelector(".ace_replace_form"),this.searchOption=e.querySelector("[action=searchInSelection]"),this.replaceOption=e.querySelector("[action=toggleReplace]"),this.regExpOption=e.querySelector("[action=toggleRegexpMode]"),this.caseSensitiveOption=e.querySelector("[action=toggleCaseSensitive]"),this.wholeWordOption=e.querySelector("[action=toggleWholeWords]"),this.searchInput=this.searchBox.querySelector(".ace_search_field"),this.replaceInput=this.replaceBox.querySelector(".ace_search_field"),this.searchCounter=e.querySelector(".ace_search_counter")},this.$init=function(){var e=this.element;this.$initElements(e);var t=this;s.addListener(e,"mousedown",(function(e){setTimeout((function(){t.activeInput.focus()}),0),s.stopPropagation(e)})),s.addListener(e,"click",(function(e){var n=(e.target||e.srcElement).getAttribute("action");n&&t[n]?t[n]():t.$searchBarKb.commands[n]&&t.$searchBarKb.commands[n].exec(t),s.stopPropagation(e)})),s.addCommandKeyListener(e,(function(e,n,i){var r=l.keyCodeToString(i),o=t.$searchBarKb.findKeyCommand(n,r);o&&o.exec&&(o.exec(t),s.stopEvent(e))})),this.$onChange=r.delayedCall((function(){t.find(!1,!1)})),s.addListener(this.searchInput,"input",(function(){t.$onChange.schedule(20)})),s.addListener(this.searchInput,"focus",(function(){t.activeInput=t.searchInput,t.searchInput.value&&t.highlight()})),s.addListener(this.replaceInput,"focus",(function(){t.activeInput=t.replaceInput,t.searchInput.value&&t.highlight()}))},this.$closeSearchBarKb=new a([{bindKey:"Esc",name:"closeSearchBar",exec:function(e){e.searchBox.hide()}}]),this.$searchBarKb=new a,this.$searchBarKb.bindKeys({"Ctrl-f|Command-f":function(e){var t=e.isReplace=!e.isReplace;e.replaceBox.style.display=t?"":"none",e.replaceOption.checked=!1,e.$syncOptions(),e.searchInput.focus()},"Ctrl-H|Command-Option-F":function(e){e.editor.getReadOnly()||(e.replaceOption.checked=!0,e.$syncOptions(),e.replaceInput.focus())},"Ctrl-G|Command-G":function(e){e.findNext()},"Ctrl-Shift-G|Command-Shift-G":function(e){e.findPrev()},esc:function(e){setTimeout((function(){e.hide()}))},Return:function(e){e.activeInput==e.replaceInput&&e.replace(),e.findNext()},"Shift-Return":function(e){e.activeInput==e.replaceInput&&e.replace(),e.findPrev()},"Alt-Return":function(e){e.activeInput==e.replaceInput&&e.replaceAll(),e.findAll()},Tab:function(e){(e.activeInput==e.replaceInput?e.searchInput:e.replaceInput).focus()}}),this.$searchBarKb.addCommands([{name:"toggleRegexpMode",bindKey:{win:"Alt-R|Alt-/",mac:"Ctrl-Alt-R|Ctrl-Alt-/"},exec:function(e){e.regExpOption.checked=!e.regExpOption.checked,e.$syncOptions()}},{name:"toggleCaseSensitive",bindKey:{win:"Alt-C|Alt-I",mac:"Ctrl-Alt-R|Ctrl-Alt-I"},exec:function(e){e.caseSensitiveOption.checked=!e.caseSensitiveOption.checked,e.$syncOptions()}},{name:"toggleWholeWords",bindKey:{win:"Alt-B|Alt-W",mac:"Ctrl-Alt-B|Ctrl-Alt-W"},exec:function(e){e.wholeWordOption.checked=!e.wholeWordOption.checked,e.$syncOptions()}},{name:"toggleReplace",exec:function(e){e.replaceOption.checked=!e.replaceOption.checked,e.$syncOptions()}},{name:"searchInSelection",exec:function(e){e.searchOption.checked=!e.searchRange,e.setSearchRange(e.searchOption.checked&&e.editor.getSelectionRange()),e.$syncOptions()}}]),this.setSearchRange=function(e){this.searchRange=e,e?this.searchRangeMarker=this.editor.session.addMarker(e,"ace_active-line"):this.searchRangeMarker&&(this.editor.session.removeMarker(this.searchRangeMarker),this.searchRangeMarker=null)},this.$syncOptions=function(e){i.setCssClass(this.replaceOption,"checked",this.searchRange),i.setCssClass(this.searchOption,"checked",this.searchOption.checked),this.replaceOption.textContent=this.replaceOption.checked?"-":"+",i.setCssClass(this.regExpOption,"checked",this.regExpOption.checked),i.setCssClass(this.wholeWordOption,"checked",this.wholeWordOption.checked),i.setCssClass(this.caseSensitiveOption,"checked",this.caseSensitiveOption.checked);var t=this.editor.getReadOnly();this.replaceOption.style.display=t?"none":"",this.replaceBox.style.display=this.replaceOption.checked&&!t?"":"none",this.find(!1,!1,e)},this.highlight=function(e){this.editor.session.highlight(e||this.editor.$search.$options.re),this.editor.renderer.updateBackMarkers()},this.find=function(e,t,n){var r=!this.editor.find(this.searchInput.value,{skipCurrent:e,backwards:t,wrap:!0,regExp:this.regExpOption.checked,caseSensitive:this.caseSensitiveOption.checked,wholeWord:this.wholeWordOption.checked,preventScroll:n,range:this.searchRange})&&this.searchInput.value;i.setCssClass(this.searchBox,"ace_nomatch",r),this.editor._emit("findSearchBox",{match:!r}),this.highlight(),this.updateCounter()},this.updateCounter=function(){var e=this.editor,t=e.$search.$options.re,n=0,i=0;if(t){var r=this.searchRange?e.session.getTextRange(this.searchRange):e.getValue(),s=e.session.doc.positionToIndex(e.selection.anchor);this.searchRange&&(s-=e.session.doc.positionToIndex(this.searchRange.start));for(var o,a=t.lastIndex=0;(o=t.exec(r))&&(n++,(a=o.index)<=s&&i++,!(n>999))&&(o[0]||(t.lastIndex=a+=1,!(a>=r.length))););}this.searchCounter.textContent=i+" of "+(n>999?"999+":n)},this.findNext=function(){this.find(!0,!1)},this.findPrev=function(){this.find(!0,!0)},this.findAll=function(){var e=!this.editor.findAll(this.searchInput.value,{regExp:this.regExpOption.checked,caseSensitive:this.caseSensitiveOption.checked,wholeWord:this.wholeWordOption.checked})&&this.searchInput.value;i.setCssClass(this.searchBox,"ace_nomatch",e),this.editor._emit("findSearchBox",{match:!e}),this.highlight(),this.hide()},this.replace=function(){this.editor.getReadOnly()||this.editor.replace(this.replaceInput.value)},this.replaceAndFindNext=function(){this.editor.getReadOnly()||(this.editor.replace(this.replaceInput.value),this.findNext())},this.replaceAll=function(){this.editor.getReadOnly()||this.editor.replaceAll(this.replaceInput.value)},this.hide=function(){this.active=!1,this.setSearchRange(null),this.editor.off("changeSession",this.setSession),this.element.style.display="none",this.editor.keyBinding.removeKeyboardHandler(this.$closeSearchBarKb),this.editor.focus()},this.show=function(e,t){this.active=!0,this.editor.on("changeSession",this.setSession),this.element.style.display="",this.replaceOption.checked=t,e&&(this.searchInput.value=e),this.searchInput.focus(),this.searchInput.select(),this.editor.keyBinding.addKeyboardHandler(this.$closeSearchBarKb),this.$syncOptions(!0)},this.isFocused=function(){var e=document.activeElement;return e==this.searchInput||e==this.replaceInput}}).call(c.prototype),t.SearchBox=c,t.Search=function(e,t){(e.searchBox||new c(e)).show(e.session.getTextRange(),t)}})),ace.require(["ace/ext/searchbox"],(function(t){e&&(e.exports=t)}))},176:(e,t,n)=>{e=n.nmd(e),ace.define("ace/mode/doc_comment_highlight_rules",["require","exports","module","ace/lib/oop","ace/mode/text_highlight_rules"],(function(e,t,n){"use strict";var i=e("../lib/oop"),r=e("./text_highlight_rules").TextHighlightRules,s=function(){this.$rules={start:[{token:"comment.doc.tag",regex:"@[\\w\\d_]+"},s.getTagRule(),{defaultToken:"comment.doc",caseInsensitive:!0}]}};i.inherits(s,r),s.getTagRule=function(e){return{token:"comment.doc.tag.storage.type",regex:"\\b(?:TODO|FIXME|XXX|HACK)\\b"}},s.getStartRule=function(e){return{token:"comment.doc",regex:"\\/\\*(?=\\*)",next:e}},s.getEndRule=function(e){return{token:"comment.doc",regex:"\\*\\/",next:e}},t.DocCommentHighlightRules=s})),ace.define("ace/mode/c_cpp_highlight_rules",["require","exports","module","ace/lib/oop","ace/mode/doc_comment_highlight_rules","ace/mode/text_highlight_rules"],(function(e,t,n){"use strict";var i=e("../lib/oop"),r=e("./doc_comment_highlight_rules").DocCommentHighlightRules,s=e("./text_highlight_rules").TextHighlightRules,o=t.cFunctions="\\b(?:hypot(?:f|l)?|s(?:scanf|ystem|nprintf|ca(?:nf|lb(?:n(?:f|l)?|ln(?:f|l)?))|i(?:n(?:h(?:f|l)?|f|l)?|gn(?:al|bit))|tr(?:s(?:tr|pn)|nc(?:py|at|mp)|c(?:spn|hr|oll|py|at|mp)|to(?:imax|d|u(?:l(?:l)?|max)|k|f|l(?:d|l)?)|error|pbrk|ftime|len|rchr|xfrm)|printf|et(?:jmp|vbuf|locale|buf)|qrt(?:f|l)?|w(?:scanf|printf)|rand)|n(?:e(?:arbyint(?:f|l)?|xt(?:toward(?:f|l)?|after(?:f|l)?))|an(?:f|l)?)|c(?:s(?:in(?:h(?:f|l)?|f|l)?|qrt(?:f|l)?)|cos(?:h(?:f)?|f|l)?|imag(?:f|l)?|t(?:ime|an(?:h(?:f|l)?|f|l)?)|o(?:s(?:h(?:f|l)?|f|l)?|nj(?:f|l)?|pysign(?:f|l)?)|p(?:ow(?:f|l)?|roj(?:f|l)?)|e(?:il(?:f|l)?|xp(?:f|l)?)|l(?:o(?:ck|g(?:f|l)?)|earerr)|a(?:sin(?:h(?:f|l)?|f|l)?|cos(?:h(?:f|l)?|f|l)?|tan(?:h(?:f|l)?|f|l)?|lloc|rg(?:f|l)?|bs(?:f|l)?)|real(?:f|l)?|brt(?:f|l)?)|t(?:ime|o(?:upper|lower)|an(?:h(?:f|l)?|f|l)?|runc(?:f|l)?|gamma(?:f|l)?|mp(?:nam|file))|i(?:s(?:space|n(?:ormal|an)|cntrl|inf|digit|u(?:nordered|pper)|p(?:unct|rint)|finite|w(?:space|c(?:ntrl|type)|digit|upper|p(?:unct|rint)|lower|al(?:num|pha)|graph|xdigit|blank)|l(?:ower|ess(?:equal|greater)?)|al(?:num|pha)|gr(?:eater(?:equal)?|aph)|xdigit|blank)|logb(?:f|l)?|max(?:div|abs))|di(?:v|fftime)|_Exit|unget(?:c|wc)|p(?:ow(?:f|l)?|ut(?:s|c(?:har)?|wc(?:har)?)|error|rintf)|e(?:rf(?:c(?:f|l)?|f|l)?|x(?:it|p(?:2(?:f|l)?|f|l|m1(?:f|l)?)?))|v(?:s(?:scanf|nprintf|canf|printf|w(?:scanf|printf))|printf|f(?:scanf|printf|w(?:scanf|printf))|w(?:scanf|printf)|a_(?:start|copy|end|arg))|qsort|f(?:s(?:canf|e(?:tpos|ek))|close|tell|open|dim(?:f|l)?|p(?:classify|ut(?:s|c|w(?:s|c))|rintf)|e(?:holdexcept|set(?:e(?:nv|xceptflag)|round)|clearexcept|testexcept|of|updateenv|r(?:aiseexcept|ror)|get(?:e(?:nv|xceptflag)|round))|flush|w(?:scanf|ide|printf|rite)|loor(?:f|l)?|abs(?:f|l)?|get(?:s|c|pos|w(?:s|c))|re(?:open|e|ad|xp(?:f|l)?)|m(?:in(?:f|l)?|od(?:f|l)?|a(?:f|l|x(?:f|l)?)?))|l(?:d(?:iv|exp(?:f|l)?)|o(?:ngjmp|cal(?:time|econv)|g(?:1(?:p(?:f|l)?|0(?:f|l)?)|2(?:f|l)?|f|l|b(?:f|l)?)?)|abs|l(?:div|abs|r(?:int(?:f|l)?|ound(?:f|l)?))|r(?:int(?:f|l)?|ound(?:f|l)?)|gamma(?:f|l)?)|w(?:scanf|c(?:s(?:s(?:tr|pn)|nc(?:py|at|mp)|c(?:spn|hr|oll|py|at|mp)|to(?:imax|d|u(?:l(?:l)?|max)|k|f|l(?:d|l)?|mbs)|pbrk|ftime|len|r(?:chr|tombs)|xfrm)|to(?:b|mb)|rtomb)|printf|mem(?:set|c(?:hr|py|mp)|move))|a(?:s(?:sert|ctime|in(?:h(?:f|l)?|f|l)?)|cos(?:h(?:f|l)?|f|l)?|t(?:o(?:i|f|l(?:l)?)|exit|an(?:h(?:f|l)?|2(?:f|l)?|f|l)?)|b(?:s|ort))|g(?:et(?:s|c(?:har)?|env|wc(?:har)?)|mtime)|r(?:int(?:f|l)?|ound(?:f|l)?|e(?:name|alloc|wind|m(?:ove|quo(?:f|l)?|ainder(?:f|l)?))|a(?:nd|ise))|b(?:search|towc)|m(?:odf(?:f|l)?|em(?:set|c(?:hr|py|mp)|move)|ktime|alloc|b(?:s(?:init|towcs|rtowcs)|towc|len|r(?:towc|len))))\\b",a=function(){var e=this.$keywords=this.createKeywordMapper({"keyword.control":"break|case|continue|default|do|else|for|goto|if|_Pragma|return|switch|while|catch|operator|try|throw|using","storage.type":"asm|__asm__|auto|bool|_Bool|char|_Complex|double|enum|float|_Imaginary|int|long|short|signed|struct|typedef|union|unsigned|void|class|wchar_t|template|char16_t|char32_t","storage.modifier":"const|extern|register|restrict|static|volatile|inline|private|protected|public|friend|explicit|virtual|export|mutable|typename|constexpr|new|delete|alignas|alignof|decltype|noexcept|thread_local","keyword.operator":"and|and_eq|bitand|bitor|compl|not|not_eq|or|or_eq|typeid|xor|xor_eq|const_cast|dynamic_cast|reinterpret_cast|static_cast|sizeof|namespace","variable.language":"this","constant.language":"NULL|true|false|TRUE|FALSE|nullptr"},"identifier"),t=/\\(?:['"?\\abfnrtv]|[0-7]{1,3}|x[a-fA-F\d]{2}|u[a-fA-F\d]{4}U[a-fA-F\d]{8}|.)/.source,n="%"+/(\d+\$)?/.source+/[#0\- +']*/.source+/[,;:_]?/.source+/((-?\d+)|\*(-?\d+\$)?)?/.source+/(\.((-?\d+)|\*(-?\d+\$)?)?)?/.source+/(hh|h|ll|l|j|t|z|q|L|vh|vl|v|hv|hl)?/.source+/(\[[^"\]]+\]|[diouxXDOUeEfFgGaACcSspn%])/.source;this.$rules={start:[{token:"comment",regex:"//$",next:"start"},{token:"comment",regex:"//",next:"singleLineComment"},r.getStartRule("doc-start"),{token:"comment",regex:"\\/\\*",next:"comment"},{token:"string",regex:"'(?:"+t+"|.)?'"},{token:"string.start",regex:'"',stateName:"qqstring",next:[{token:"string",regex:/\\\s*$/,next:"qqstring"},{token:"constant.language.escape",regex:t},{token:"constant.language.escape",regex:n},{token:"string.end",regex:'"|$',next:"start"},{defaultToken:"string"}]},{token:"string.start",regex:'R"\\(',stateName:"rawString",next:[{token:"string.end",regex:'\\)"',next:"start"},{defaultToken:"string"}]},{token:"constant.numeric",regex:"0[xX][0-9a-fA-F]+(L|l|UL|ul|u|U|F|f|ll|LL|ull|ULL)?\\b"},{token:"constant.numeric",regex:"[+-]?\\d+(?:(?:\\.\\d*)?(?:[eE][+-]?\\d+)?)?(L|l|UL|ul|u|U|F|f|ll|LL|ull|ULL)?\\b"},{token:"keyword",regex:"#\\s*(?:include|import|pragma|line|define|undef|version)\\b",next:"directive"},{token:"keyword",regex:"#\\s*(?:endif|if|ifdef|else|elif|ifndef)\\b"},{token:"support.function.C99.c",regex:o},{token:e,regex:"[a-zA-Z_$][a-zA-Z0-9_$]*"},{token:"keyword.operator",regex:/--|\+\+|<<=|>>=|>>>=|<>|&&|\|\||\?:|[*%\/+\-&\^|~!<>=]=?/},{token:"punctuation.operator",regex:"\\?|\\:|\\,|\\;|\\."},{token:"paren.lparen",regex:"[[({]"},{token:"paren.rparen",regex:"[\\])}]"},{token:"text",regex:"\\s+"}],comment:[{token:"comment",regex:"\\*\\/",next:"start"},{defaultToken:"comment"}],singleLineComment:[{token:"comment",regex:/\\$/,next:"singleLineComment"},{token:"comment",regex:/$/,next:"start"},{defaultToken:"comment"}],directive:[{token:"constant.other.multiline",regex:/\\/},{token:"constant.other.multiline",regex:/.*\\/},{token:"constant.other",regex:"\\s*<.+?>",next:"start"},{token:"constant.other",regex:'\\s*["](?:(?:\\\\.)|(?:[^"\\\\]))*?["]',next:"start"},{token:"constant.other",regex:"\\s*['](?:(?:\\\\.)|(?:[^'\\\\]))*?[']",next:"start"},{token:"constant.other",regex:/[^\\\/]+/,next:"start"}]},this.embedRules(r,"doc-",[r.getEndRule("start")]),this.normalizeRules()};i.inherits(a,s),t.c_cppHighlightRules=a})),ace.define("ace/mode/matching_brace_outdent",["require","exports","module","ace/range"],(function(e,t,n){"use strict";var i=e("../range").Range,r=function(){};(function(){this.checkOutdent=function(e,t){return!!/^\s+$/.test(e)&&/^\s*\}/.test(t)},this.autoOutdent=function(e,t){var n=e.getLine(t).match(/^(\s*\})/);if(!n)return 0;var r=n[1].length,s=e.findMatchingBracket({row:t,column:r});if(!s||s.row==t)return 0;var o=this.$getIndent(e.getLine(s.row));e.replace(new i(t,0,t,r-1),o)},this.$getIndent=function(e){return e.match(/^\s*/)[0]}}).call(r.prototype),t.MatchingBraceOutdent=r})),ace.define("ace/mode/folding/cstyle",["require","exports","module","ace/lib/oop","ace/range","ace/mode/folding/fold_mode"],(function(e,t,n){"use strict";var i=e("../../lib/oop"),r=e("../../range").Range,s=e("./fold_mode").FoldMode,o=t.FoldMode=function(e){e&&(this.foldingStartMarker=new RegExp(this.foldingStartMarker.source.replace(/\|[^|]*?$/,"|"+e.start)),this.foldingStopMarker=new RegExp(this.foldingStopMarker.source.replace(/\|[^|]*?$/,"|"+e.end)))};i.inherits(o,s),function(){this.foldingStartMarker=/([\{\[\(])[^\}\]\)]*$|^\s*(\/\*)/,this.foldingStopMarker=/^[^\[\{\(]*([\}\]\)])|^[\s\*]*(\*\/)/,this.singleLineBlockCommentRe=/^\s*(\/\*).*\*\/\s*$/,this.tripleStarBlockCommentRe=/^\s*(\/\*\*\*).*\*\/\s*$/,this.startRegionRe=/^\s*(\/\*|\/\/)#?region\b/,this._getFoldWidgetBase=this.getFoldWidget,this.getFoldWidget=function(e,t,n){var i=e.getLine(n);if(this.singleLineBlockCommentRe.test(i)&&!this.startRegionRe.test(i)&&!this.tripleStarBlockCommentRe.test(i))return"";var r=this._getFoldWidgetBase(e,t,n);return!r&&this.startRegionRe.test(i)?"start":r},this.getFoldWidgetRange=function(e,t,n,i){var r,s=e.getLine(n);if(this.startRegionRe.test(s))return this.getCommentRegionBlock(e,s,n);if(r=s.match(this.foldingStartMarker)){var o=r.index;if(r[1])return this.openingBracketBlock(e,r[1],n,o);var a=e.getCommentFoldRange(n,o+r[0].length,1);return a&&!a.isMultiLine()&&(i?a=this.getSectionRange(e,n):"all"!=t&&(a=null)),a}return"markbegin"!==t&&(r=s.match(this.foldingStopMarker))?(o=r.index+r[0].length,r[1]?this.closingBracketBlock(e,r[1],n,o):e.getCommentFoldRange(n,o,-1)):void 0},this.getSectionRange=function(e,t){for(var n=e.getLine(t),i=n.search(/\S/),s=t,o=n.length,a=t+=1,l=e.getLength();++tc)break;var u=this.getFoldWidgetRange(e,"all",t);if(u){if(u.start.row<=s)break;if(u.isMultiLine())t=u.end.row;else if(i==c)break}a=t}}return new r(s,o,a,e.getLine(a).length)},this.getCommentRegionBlock=function(e,t,n){for(var i=t.search(/\s*$/),s=e.getLength(),o=n,a=/^\s*(?:\/\*|\/\/|--)#?(end)?region\b/,l=1;++no)return new r(o,i,n,t.length)}}.call(o.prototype)})),ace.define("ace/mode/c_cpp",["require","exports","module","ace/lib/oop","ace/mode/text","ace/mode/c_cpp_highlight_rules","ace/mode/matching_brace_outdent","ace/range","ace/mode/behaviour/cstyle","ace/mode/folding/cstyle"],(function(e,t,n){"use strict";var i=e("../lib/oop"),r=e("./text").Mode,s=e("./c_cpp_highlight_rules").c_cppHighlightRules,o=e("./matching_brace_outdent").MatchingBraceOutdent,a=(e("../range").Range,e("./behaviour/cstyle").CstyleBehaviour),l=e("./folding/cstyle").FoldMode,c=function(){this.HighlightRules=s,this.$outdent=new o,this.$behaviour=new a,this.foldingRules=new l};i.inherits(c,r),function(){this.lineCommentStart="//",this.blockComment={start:"/*",end:"*/"},this.getNextLineIndent=function(e,t,n){var i=this.$getIndent(t),r=this.getTokenizer().getLineTokens(t,e),s=r.tokens,o=r.state;if(s.length&&"comment"==s[s.length-1].type)return i;if("start"==e)(a=t.match(/^.*[\{\(\[]\s*$/))&&(i+=n);else if("doc-start"==e){if("start"==o)return"";var a;(a=t.match(/^\s*(\/?)\*/))&&(a[1]&&(i+=" "),i+="* ")}return i},this.checkOutdent=function(e,t,n){return this.$outdent.checkOutdent(t,n)},this.autoOutdent=function(e,t,n){this.$outdent.autoOutdent(t,n)},this.$id="ace/mode/c_cpp"}.call(c.prototype),t.Mode=c})),ace.define("ace/mode/glsl_highlight_rules",["require","exports","module","ace/lib/oop","ace/mode/c_cpp_highlight_rules"],(function(e,t,n){"use strict";var i=e("../lib/oop"),r=e("./c_cpp_highlight_rules").c_cppHighlightRules,s=function(){var e=this.createKeywordMapper({"variable.language":"this",keyword:"layout|attribute|const|uniform|varying|break|continue|do|for|while|if|else|in|out|inout|float|int|void|bool|true|false|lowp|mediump|highp|precision|invariant|discard|return|mat2|mat3|mat4|vec2|vec3|vec4|ivec2|ivec3|ivec4|bvec2|bvec3|bvec4|sampler2D|samplerCube|struct","constant.language":"radians|degrees|sin|cos|tan|asin|acos|atan|pow|exp|log|exp2|log2|sqrt|inversesqrt|abs|sign|floor|ceil|fract|mod|min|max|clamp|mix|step|smoothstep|length|distance|dot|cross|normalize|faceforward|reflect|refract|matrixCompMult|lessThan|lessThanEqual|greaterThan|greaterThanEqual|equal|notEqual|any|all|not|dFdx|dFdy|fwidth|texture2D|texture2DProj|texture2DLod|texture2DProjLod|textureCube|textureCubeLod|gl_MaxVertexAttribs|gl_MaxVertexUniformVectors|gl_MaxVaryingVectors|gl_MaxVertexTextureImageUnits|gl_MaxCombinedTextureImageUnits|gl_MaxTextureImageUnits|gl_MaxFragmentUniformVectors|gl_MaxDrawBuffers|gl_DepthRangeParameters|gl_DepthRange|gl_Position|gl_PointSize|gl_FragCoord|gl_FrontFacing|gl_PointCoord|gl_FragColor|gl_FragData"},"identifier");this.$rules=(new r).$rules,this.$rules.start.forEach((function(t){"function"==typeof t.token&&(t.token=e)}))};i.inherits(s,r),t.glslHighlightRules=s})),ace.define("ace/mode/glsl",["require","exports","module","ace/lib/oop","ace/mode/c_cpp","ace/mode/glsl_highlight_rules","ace/mode/matching_brace_outdent","ace/range","ace/mode/behaviour/cstyle","ace/mode/folding/cstyle"],(function(e,t,n){"use strict";var i=e("../lib/oop"),r=e("./c_cpp").Mode,s=e("./glsl_highlight_rules").glslHighlightRules,o=e("./matching_brace_outdent").MatchingBraceOutdent,a=(e("../range").Range,e("./behaviour/cstyle").CstyleBehaviour),l=e("./folding/cstyle").FoldMode,c=function(){this.HighlightRules=s,this.$outdent=new o,this.$behaviour=new a,this.foldingRules=new l};i.inherits(c,r),function(){this.$id="ace/mode/glsl"}.call(c.prototype),t.Mode=c})),ace.require(["ace/mode/glsl"],(function(t){e&&(e.exports=t)}))},793:(e,t,n)=>{e=n.nmd(e),ace.define("ace/theme/monokai",["require","exports","module","ace/lib/dom"],(function(e,t,n){t.isDark=!0,t.cssClass="ace-monokai",t.cssText=".ace-monokai .ace_gutter {background: #2F3129;color: #8F908A}.ace-monokai .ace_print-margin {width: 1px;background: #555651}.ace-monokai {background-color: #272822;color: #F8F8F2}.ace-monokai .ace_cursor {color: #F8F8F0}.ace-monokai .ace_marker-layer .ace_selection {background: #49483E}.ace-monokai.ace_multiselect .ace_selection.ace_start {box-shadow: 0 0 3px 0px #272822;}.ace-monokai .ace_marker-layer .ace_step {background: rgb(102, 82, 0)}.ace-monokai .ace_marker-layer .ace_bracket {margin: -1px 0 0 -1px;border: 1px solid #49483E}.ace-monokai .ace_marker-layer .ace_active-line {background: #202020}.ace-monokai .ace_gutter-active-line {background-color: #272727}.ace-monokai .ace_marker-layer .ace_selected-word {border: 1px solid #49483E}.ace-monokai .ace_invisible {color: #52524d}.ace-monokai .ace_entity.ace_name.ace_tag,.ace-monokai .ace_keyword,.ace-monokai .ace_meta.ace_tag,.ace-monokai .ace_storage {color: #F92672}.ace-monokai .ace_punctuation,.ace-monokai .ace_punctuation.ace_tag {color: #fff}.ace-monokai .ace_constant.ace_character,.ace-monokai .ace_constant.ace_language,.ace-monokai .ace_constant.ace_numeric,.ace-monokai .ace_constant.ace_other {color: #AE81FF}.ace-monokai .ace_invalid {color: #F8F8F0;background-color: #F92672}.ace-monokai .ace_invalid.ace_deprecated {color: #F8F8F0;background-color: #AE81FF}.ace-monokai .ace_support.ace_constant,.ace-monokai .ace_support.ace_function {color: #66D9EF}.ace-monokai .ace_fold {background-color: #A6E22E;border-color: #F8F8F2}.ace-monokai .ace_storage.ace_type,.ace-monokai .ace_support.ace_class,.ace-monokai .ace_support.ace_type {font-style: italic;color: #66D9EF}.ace-monokai .ace_entity.ace_name.ace_function,.ace-monokai .ace_entity.ace_other,.ace-monokai .ace_entity.ace_other.ace_attribute-name,.ace-monokai .ace_variable {color: #A6E22E}.ace-monokai .ace_variable.ace_parameter {font-style: italic;color: #FD971F}.ace-monokai .ace_string {color: #E6DB74}.ace-monokai .ace_comment {color: #75715E}.ace-monokai .ace_indent-guide {background: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAACCAYAAACZgbYnAAAAEklEQVQImWPQ0FD0ZXBzd/wPAAjVAoxeSgNeAAAAAElFTkSuQmCC) right repeat-y}",e("../lib/dom").importCssString(t.cssText,t.cssClass)})),ace.require(["ace/theme/monokai"],(function(t){e&&(e.exports=t)}))}},t={};function n(i){var r=t[i];if(void 0!==r)return r.exports;var s=t[i]={id:i,loaded:!1,exports:{}};return e[i].call(s.exports,s,s.exports,n),s.loaded=!0,s.exports}return n.amdD=function(){throw new Error("define cannot be used indirect")},n.n=e=>{var t=e&&e.__esModule?()=>e.default:()=>e;return n.d(t,{a:t}),t},n.d=(e,t)=>{for(var i in t)n.o(t,i)&&!n.o(e,i)&&Object.defineProperty(e,i,{enumerable:!0,get:t[i]})},n.o=(e,t)=>Object.prototype.hasOwnProperty.call(e,t),n.r=e=>{"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},n.nmd=e=>(e.paths=[],e.children||(e.children=[]),e),n.nc=void 0,n(819),n(176),n(793),n(655),n(18),n(986)})())); \ No newline at end of file diff --git a/notes.txt b/notes.txt deleted file mode 100644 index 79e301f..0000000 --- a/notes.txt +++ /dev/null @@ -1,47 +0,0 @@ -three.min.js:92 THREE.WebGLProgram: gl.getProgramInfoLog() C:\fakepath(87,1-6): warning X4000: use of potentially uninitialized variable (dyn_index_vec4_float4_int) - - -Moving from r84 to r120 of Three.js is quite a jump - that's good that you've only encountered minor issues so far. The main attribute change you probably hit was the switch from `.attributes` to `.getAttribute()`, which was one of the bigger breaking changes in that period. - -Since you're doing such a significant version upgrade, you might want to watch out for a few other potential issues that could come up, particularly with shaders: - -1. Shader precision defaults changed -2. Some uniform naming conventions were updated -3. The WebGLRenderer parameters changed somewhat -4. Material property naming evolved in some cases - - - -Would you like me to keep an eye out for any other version-specific changes as we discuss your Three.js implementation? I can flag anything that might need attention during the upgrade process. - - -That's a smart, methodical approach to upgrading. Going up in smaller increments makes it much easier to isolate and fix breaking changes when they occur. - -Between r120 and r150, some notable changes to watch for include: - -1. Around r125-r129: Changes to material parameter handling -2. r137: WebGLRenderer got some significant updates -3. r139: More strict WebGL context handling -4. r148: Changes to how buffers are managed - -By stopping at r120 for now, you're in a relatively stable zone. The bigger breaking changes tend to start appearing in the r130+ range, particularly around shader and material handling. - -Your staged approach (5 versions at a time) will be especially helpful when you hit the r130-150 range as there were more architectural changes in those releases. Would you like me to point out specific changes for the next 5 versions you're planning to upgrade to? - -Looking at the changes from r120 to r125: - -Key changes to watch for: -1. r121: WebGL state handling was updated - might affect custom shaders -2. r122: Texture handling improvements - generally backwards compatible but worth testing thoroughly with your texture loader -3. r123: Minor changes to geometry attribute handling -4. r124: Updates to shadow mapping - if you're using shadows, test carefully -5. r125: Material system updates - particularly around shader uniforms - -The most likely impact points for your code would be: -- Any custom WebGL state management -- Shader uniform handling -- Shadow implementations if you're using them - -Since you've built that robust texture loading system, you should be safe on that front through these versions. However, if you're using any direct WebGL calls or state management, those might need attention around r121. - -Would you like me to get specific about the next batch (r126-130) once you've tackled these versions? \ No newline at end of file From e877ab5c4ee594270f06e5a0cd2652af864e6861 Mon Sep 17 00:00:00 2001 From: KellyCode Date: Sat, 22 Feb 2025 09:46:58 -0600 Subject: [PATCH 07/25] cleaned SPE code --- .gitignore | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/.gitignore b/.gitignore index e5663e3..092264d 100644 --- a/.gitignore +++ b/.gitignore @@ -1,4 +1,5 @@ /node_modules NOTES.md /tests -/docs \ No newline at end of file +/docs +notes.txt \ No newline at end of file From ce06eb921d3895ce6b62d6282c6318373d6e2640 Mon Sep 17 00:00:00 2001 From: KellyCode Date: Sat, 22 Feb 2025 12:53:30 -0600 Subject: [PATCH 08/25] Three r140, expanded basicScene.js --- examples/activeMultiplier.html | 42 +- examples/basic.html | 54 +- examples/clock.html | 38 +- examples/clouds.html | 51 +- examples/distributions.html | 78 +- examples/explosion.html | 48 +- examples/fog.html | 69 +- examples/js/basicScene.js | 100 +- examples/js/shaderErrorLog.js | 10 + examples/js/three_r125/three.js | 37359 +++++++++++++++++++++ examples/js/three_r130/three.js | 36280 ++++++++++++++++++++ examples/js/three_r140/three.js | 36794 ++++++++++++++++++++ examples/js/three_r150/three.js | 50857 ++++++++++++++++++++++++++++ examples/js/three_r160/three.js | 53468 ++++++++++++++++++++++++++++++ examples/mouseFollow.html | 58 +- examples/multipleEmitters.html | 64 +- examples/orbit.html | 55 +- examples/pool.html | 66 +- examples/rotation.html | 78 +- examples/runtimeChanging.html | 222 +- 20 files changed, 215176 insertions(+), 615 deletions(-) create mode 100644 examples/js/shaderErrorLog.js create mode 100644 examples/js/three_r125/three.js create mode 100644 examples/js/three_r130/three.js create mode 100644 examples/js/three_r140/three.js create mode 100644 examples/js/three_r150/three.js create mode 100644 examples/js/three_r160/three.js diff --git a/examples/activeMultiplier.html b/examples/activeMultiplier.html index ec95e2b..99539a9 100644 --- a/examples/activeMultiplier.html +++ b/examples/activeMultiplier.html @@ -30,45 +30,35 @@

                      Examples

                      runtimeChanging - + - + + - + + - + - + + - + + - + + - + + - + + - + + - + + - + + - + - + - + - + diff --git a/examples/basic.html b/examples/basic.html index ccbadb1..d84874f 100644 --- a/examples/basic.html +++ b/examples/basic.html @@ -23,7 +23,7 @@

                      Examples

                      runtimeChanging - + diff --git a/examples/clock.html b/examples/clock.html index 8653b2f..dc3214d 100644 --- a/examples/clock.html +++ b/examples/clock.html @@ -23,7 +23,7 @@

                      Examples

                      runtimeChanging - + diff --git a/examples/clouds.html b/examples/clouds.html index 72369d6..7a811b6 100644 --- a/examples/clouds.html +++ b/examples/clouds.html @@ -24,7 +24,7 @@

                      Examples

                      runtimeChanging - + diff --git a/examples/distributions.html b/examples/distributions.html index d73a220..d0d40af 100644 --- a/examples/distributions.html +++ b/examples/distributions.html @@ -21,7 +21,7 @@

                      Examples

                      runtimeChanging - + > diff --git a/examples/explosion.html b/examples/explosion.html index 4e680ff..2ae895e 100644 --- a/examples/explosion.html +++ b/examples/explosion.html @@ -23,7 +23,7 @@

                      Examples

                      runtimeChanging - + diff --git a/examples/fog.html b/examples/fog.html index b367c68..041e4b9 100644 --- a/examples/fog.html +++ b/examples/fog.html @@ -24,7 +24,7 @@

                      Examples

                      runtimeChanging - + diff --git a/examples/img/star.png b/examples/img/star.png index c0b75a768f9ff8dd80f10ee008c31b2d0938f6fe..0b7abd0e10690b4aa87317f1505a98c0665cd5b1 100644 GIT binary patch literal 31875 zcmV)fK&8KlP)}H73y{ zrWlQyZlbXOBJiBEXJ*ZR-)pUX&Uqd&@Av&5*EQF3*k_-;XJ)Ngy;O3ltc|gbj$Bz+ zN3F7+{0ZaFmGyFgk=I;ba%FwovjM)hAv)UW$n~)y{=Xsavypw&D(&;97)vmu(jL!h zFQT72;B$u*D;@D&$Gi+9RXWC0=_Jc4o$>!J_25<2?gXstn|iR2h`ZAsE^JO4D@=v3m#dx45T2#wPyE zzW$Eh`cA$ZbHF@$Myd3OoEzuJxnj-|F@LV%3#^4};yRc5z&ds9qC@v2SMm2V-zV-_ zxqr#`RqA_c``y_8)^Gu=6kdR11{`w(jt1Z8@CNKF`oS)&>j(+u>pDaDTh{1fx&5FaW1)e|2Dy*rX1!q|zb&8w+1)i^q56=p-$b zPU$m@Wf-Z_83@oheF4CKQR#~RcMY-94WGMXGkf4!J@Cw)7#ra^8{^%*@!mcdeeu}< zp8&J~;Kj;7+&54R(1Y=Rjv@HohWOvuY7EwU@f-YZpgtqwSwJRzHs8T_@tpzhHU!)V z_x4Pj8|TQmCd?Ug*EIkMglpo!8Y9-4v1TF#kv|a`I937qKf}OYNnwY>_s|Ya@_pt= zO$ZX3;1U}MA%I-~99!P6tRJg@D`1P~5dqdM4}C>}Zx`0Zm+KJ$5-}(M_%%GlPQ77V z4KMoy<5P@6U#^n_=61-RVJyW+HgTPN3FwT);cr}NfX>SSbe;&o$ylK$y)&NC*-v{H zZXD*s(Jkgm_kfL+llW6hT*ymey(Da-}7EWj=}i3TZ_+F0kdTnDLB z59~pAt^xDxN-Bo6bOEL45?T}yI^!@HQbg><7Z{&oR57wr2iv=(`&UxR4!Ea7=BQyb z_J2bmTt34H4GMw#d1yBPGOdsIkSeSvgmH3s69I5xU5;#Da47jm#Gu>+d|(WLnz0B)%a2hc`f z(?@{9jli`Lc*Y3Ka|G@mf#;48e5d#D-l&K%RG-nJh(z`<5EOBMzKckJcVlgRalMaI zqFy@37Epu)BrsOh!`IRc@9K&@=o&~FmSCMrl)@=e5FxOKoq;Hw1NI5*LiddnvK*w8 z0ec*=*Vz9CViX1whs%bEumXj~ckRUCNSIAMC6o4-3QRE;td&%W@FaJ@k$`v53L?sJ3OOLV}CpZH{e$2^APyAjyDk$B!nJbNU* z8-;sD;rI5J1J|VRdw8!Q$Z%XYL=a^egDFQ~{R5rFP{!B<&+jLs2CI}65jlHde>Rq+ zNXyYv5dmw%9(0RD@MX5{MD~`Q;sqcB_Nd@qao<+>ei0d#``#9Mm^!6wlp@q$~k*#M*iT`Fkt1S^-2@2_y)L%!UXxMerU#j2=LM?x|!I zQTL@=z+TA`Ll8W>tB^V_2ZAiq!_y__HM)>O=z#;v$Waeq#}YmzYY+;LRUPe00bZ#) zVeN3QxRl5X0REbWDJ}Sc@e~v6Oc?3l{HUY85T_iZy9*{spm)ujAOMe-b>(S}Tu4yC zt-A_ESSTiB!2YrhYy)@=0AJy!B`SZn6JN!NUui(c|0#j@%LIJTO}A4|QeX2EpA|^M zm9!IhcFGOdNddkoK5vT8n_^v?;deIpIW>Jp#1I{$okEQCXAXCnVW_^drid^wQ(Fj1 ziBwwEuT^@i?7b0(e*e@Z&Ngtl1g zb91m18~BXhZ(jeN_lk~99eG+K0^hYtg~p-yJlIvqfj&1y1gxbW1yn~|QyrtSFj9qH zy5>@YAjSLA2Gv_427ujD_b${AiXI~DU3X{+-LUW7bnll!j##eLS5-|PCLaKH3F
                      Mlb6M$e5^YJk?tz_ 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 O0000G0H{u4 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 z z%S7)+yQIbT+qKK5t0l7g?Z!gZRz(9f)j25_!q+w)o9yN)_MJ#v4@Uy{bM(U~Z~q{U zrePWu82zeh$3&|xw7H#2ncTEQ16rPaI4Exh}0LlRB zKt%v+XT5J_1I?K^UBwB0YGePBcfli!OLVmpECJzifuB z<(BW%XdDVNFDgD($Nn>lkG@=>`#r;1?Ri#rI_|ze^Vn@B-=72A;zccyU6yt|ddZuQ}RxC4e?!WrVxjNb4<)#f`S& zdHLWo2SBhDrMD8x{3h%{7o2_M#|~iO;{8foA{o!wRTSNNE&)bdG#_5U#lNX=Ij&@3 ziJ-b>>Q;wZO&=CJ^Xia#TqQN?STv6tDw3)?9ag~zyr$D)?N~nt1aZ^> 8 & 0xff] + _lut[d0 >> 16 & 0xff] + _lut[d0 >> 24 & 0xff] + '-' + _lut[d1 & 0xff] + _lut[d1 >> 8 & 0xff] + '-' + _lut[d1 >> 16 & 0x0f | 0x40] + _lut[d1 >> 24 & 0xff] + '-' + _lut[d2 & 0x3f | 0x80] + _lut[d2 >> 8 & 0xff] + '-' + _lut[d2 >> 16 & 0xff] + _lut[d2 >> 24 & 0xff] + _lut[d3 & 0xff] + _lut[d3 >> 8 & 0xff] + _lut[d3 >> 16 & 0xff] + _lut[d3 >> 24 & 0xff]; // .toLowerCase() here flattens concatenated strings to save heap memory space. - - return uuid.toLowerCase(); - } - - function clamp(value, min, max) { - return Math.max(min, Math.min(max, value)); - } // compute euclidean modulo of m % n - // https://en.wikipedia.org/wiki/Modulo_operation - - - function euclideanModulo(n, m) { - return (n % m + m) % m; - } // Linear mapping from range to range - - - function mapLinear(x, a1, a2, b1, b2) { - return b1 + (x - a1) * (b2 - b1) / (a2 - a1); - } // https://www.gamedev.net/tutorials/programming/general-and-gameplay-programming/inverse-lerp-a-super-useful-yet-often-overlooked-function-r5230/ - - - function inverseLerp(x, y, value) { - if (x !== y) { - return (value - x) / (y - x); - } else { - return 0; - } - } // https://en.wikipedia.org/wiki/Linear_interpolation - - - function lerp(x, y, t) { - return (1 - t) * x + t * y; - } // http://www.rorydriscoll.com/2016/03/07/frame-rate-independent-damping-using-lerp/ - - - function damp(x, y, lambda, dt) { - return lerp(x, y, 1 - Math.exp(-lambda * dt)); - } // https://www.desmos.com/calculator/vcsjnyz7x4 - - - function pingpong(x, length = 1) { - return length - Math.abs(euclideanModulo(x, length * 2) - length); - } // http://en.wikipedia.org/wiki/Smoothstep - - - function smoothstep(x, min, max) { - if (x <= min) return 0; - if (x >= max) return 1; - x = (x - min) / (max - min); - return x * x * (3 - 2 * x); - } - - function smootherstep(x, min, max) { - if (x <= min) return 0; - if (x >= max) return 1; - x = (x - min) / (max - min); - return x * x * x * (x * (x * 6 - 15) + 10); - } // Random integer from interval - - - function randInt(low, high) { - return low + Math.floor(Math.random() * (high - low + 1)); - } // Random float from interval - - - function randFloat(low, high) { - return low + Math.random() * (high - low); - } // Random float from <-range/2, range/2> interval - - - function randFloatSpread(range) { - return range * (0.5 - Math.random()); - } // Deterministic pseudo-random float in the interval [ 0, 1 ] - - - function seededRandom(s) { - if (s !== undefined) _seed = s; // Mulberry32 generator - - let t = _seed += 0x6D2B79F5; - t = Math.imul(t ^ t >>> 15, t | 1); - t ^= t + Math.imul(t ^ t >>> 7, t | 61); - return ((t ^ t >>> 14) >>> 0) / 4294967296; - } - - function degToRad(degrees) { - return degrees * DEG2RAD; - } - - function radToDeg(radians) { - return radians * RAD2DEG; - } - - function isPowerOfTwo(value) { - return (value & value - 1) === 0 && value !== 0; - } - - function ceilPowerOfTwo(value) { - return Math.pow(2, Math.ceil(Math.log(value) / Math.LN2)); - } - - function floorPowerOfTwo(value) { - return Math.pow(2, Math.floor(Math.log(value) / Math.LN2)); - } - - function setQuaternionFromProperEuler(q, a, b, c, order) { - // Intrinsic Proper Euler Angles - see https://en.wikipedia.org/wiki/Euler_angles - // rotations are applied to the axes in the order specified by 'order' - // rotation by angle 'a' is applied first, then by angle 'b', then by angle 'c' - // angles are in radians - const cos = Math.cos; - const sin = Math.sin; - const c2 = cos(b / 2); - const s2 = sin(b / 2); - const c13 = cos((a + c) / 2); - const s13 = sin((a + c) / 2); - const c1_3 = cos((a - c) / 2); - const s1_3 = sin((a - c) / 2); - const c3_1 = cos((c - a) / 2); - const s3_1 = sin((c - a) / 2); - - switch (order) { - case 'XYX': - q.set(c2 * s13, s2 * c1_3, s2 * s1_3, c2 * c13); - break; - - case 'YZY': - q.set(s2 * s1_3, c2 * s13, s2 * c1_3, c2 * c13); - break; - - case 'ZXZ': - q.set(s2 * c1_3, s2 * s1_3, c2 * s13, c2 * c13); - break; - - case 'XZX': - q.set(c2 * s13, s2 * s3_1, s2 * c3_1, c2 * c13); - break; - - case 'YXY': - q.set(s2 * c3_1, c2 * s13, s2 * s3_1, c2 * c13); - break; - - case 'ZYZ': - q.set(s2 * s3_1, s2 * c3_1, c2 * s13, c2 * c13); - break; - - default: - console.warn('THREE.MathUtils: .setQuaternionFromProperEuler() encountered an unknown order: ' + order); - } - } - - function denormalize$1(value, array) { - switch (array.constructor) { - case Float32Array: - return value; - - case Uint16Array: - return value / 65535.0; - - case Uint8Array: - return value / 255.0; - - case Int16Array: - return Math.max(value / 32767.0, -1.0); - - case Int8Array: - return Math.max(value / 127.0, -1.0); - - default: - throw new Error('Invalid component type.'); - } - } - - function normalize(value, array) { - switch (array.constructor) { - case Float32Array: - return value; - - case Uint16Array: - return Math.round(value * 65535.0); - - case Uint8Array: - return Math.round(value * 255.0); - - case Int16Array: - return Math.round(value * 32767.0); - - case Int8Array: - return Math.round(value * 127.0); - - default: - throw new Error('Invalid component type.'); - } - } - - var MathUtils = /*#__PURE__*/Object.freeze({ - __proto__: null, - DEG2RAD: DEG2RAD, - RAD2DEG: RAD2DEG, - generateUUID: generateUUID, - clamp: clamp, - euclideanModulo: euclideanModulo, - mapLinear: mapLinear, - inverseLerp: inverseLerp, - lerp: lerp, - damp: damp, - pingpong: pingpong, - smoothstep: smoothstep, - smootherstep: smootherstep, - randInt: randInt, - randFloat: randFloat, - randFloatSpread: randFloatSpread, - seededRandom: seededRandom, - degToRad: degToRad, - radToDeg: radToDeg, - isPowerOfTwo: isPowerOfTwo, - ceilPowerOfTwo: ceilPowerOfTwo, - floorPowerOfTwo: floorPowerOfTwo, - setQuaternionFromProperEuler: setQuaternionFromProperEuler, - normalize: normalize, - denormalize: denormalize$1 - }); - - class Vector2 { - constructor(x = 0, y = 0) { - this.x = x; - this.y = y; - } - - get width() { - return this.x; - } - - set width(value) { - this.x = value; - } - - get height() { - return this.y; - } - - set height(value) { - this.y = value; - } - - set(x, y) { - this.x = x; - this.y = y; - return this; - } - - setScalar(scalar) { - this.x = scalar; - this.y = scalar; - return this; - } - - setX(x) { - this.x = x; - return this; - } - - setY(y) { - this.y = y; - return this; - } - - setComponent(index, value) { - switch (index) { - case 0: - this.x = value; - break; - - case 1: - this.y = value; - break; - - default: - throw new Error('index is out of range: ' + index); - } - - return this; - } - - getComponent(index) { - switch (index) { - case 0: - return this.x; - - case 1: - return this.y; - - default: - throw new Error('index is out of range: ' + index); - } - } - - clone() { - return new this.constructor(this.x, this.y); - } - - copy(v) { - this.x = v.x; - this.y = v.y; - return this; - } - - add(v, w) { - if (w !== undefined) { - console.warn('THREE.Vector2: .add() now only accepts one argument. Use .addVectors( a, b ) instead.'); - return this.addVectors(v, w); - } - - this.x += v.x; - this.y += v.y; - return this; - } - - addScalar(s) { - this.x += s; - this.y += s; - return this; - } - - addVectors(a, b) { - this.x = a.x + b.x; - this.y = a.y + b.y; - return this; - } - - addScaledVector(v, s) { - this.x += v.x * s; - this.y += v.y * s; - return this; - } - - sub(v, w) { - if (w !== undefined) { - console.warn('THREE.Vector2: .sub() now only accepts one argument. Use .subVectors( a, b ) instead.'); - return this.subVectors(v, w); - } - - this.x -= v.x; - this.y -= v.y; - return this; - } - - subScalar(s) { - this.x -= s; - this.y -= s; - return this; - } - - subVectors(a, b) { - this.x = a.x - b.x; - this.y = a.y - b.y; - return this; - } - - multiply(v) { - this.x *= v.x; - this.y *= v.y; - return this; - } - - multiplyScalar(scalar) { - this.x *= scalar; - this.y *= scalar; - return this; - } - - divide(v) { - this.x /= v.x; - this.y /= v.y; - return this; - } - - divideScalar(scalar) { - return this.multiplyScalar(1 / scalar); - } - - applyMatrix3(m) { - const x = this.x, - y = this.y; - const e = m.elements; - this.x = e[0] * x + e[3] * y + e[6]; - this.y = e[1] * x + e[4] * y + e[7]; - return this; - } - - min(v) { - this.x = Math.min(this.x, v.x); - this.y = Math.min(this.y, v.y); - return this; - } - - max(v) { - this.x = Math.max(this.x, v.x); - this.y = Math.max(this.y, v.y); - return this; - } - - clamp(min, max) { - // assumes min < max, componentwise - this.x = Math.max(min.x, Math.min(max.x, this.x)); - this.y = Math.max(min.y, Math.min(max.y, this.y)); - return this; - } - - clampScalar(minVal, maxVal) { - this.x = Math.max(minVal, Math.min(maxVal, this.x)); - this.y = Math.max(minVal, Math.min(maxVal, this.y)); - return this; - } - - clampLength(min, max) { - const length = this.length(); - return this.divideScalar(length || 1).multiplyScalar(Math.max(min, Math.min(max, length))); - } - - floor() { - this.x = Math.floor(this.x); - this.y = Math.floor(this.y); - return this; - } - - ceil() { - this.x = Math.ceil(this.x); - this.y = Math.ceil(this.y); - return this; - } - - round() { - this.x = Math.round(this.x); - this.y = Math.round(this.y); - return this; - } - - roundToZero() { - this.x = this.x < 0 ? Math.ceil(this.x) : Math.floor(this.x); - this.y = this.y < 0 ? Math.ceil(this.y) : Math.floor(this.y); - return this; - } - - negate() { - this.x = -this.x; - this.y = -this.y; - return this; - } - - dot(v) { - return this.x * v.x + this.y * v.y; - } - - cross(v) { - return this.x * v.y - this.y * v.x; - } - - lengthSq() { - return this.x * this.x + this.y * this.y; - } - - length() { - return Math.sqrt(this.x * this.x + this.y * this.y); - } - - manhattanLength() { - return Math.abs(this.x) + Math.abs(this.y); - } - - normalize() { - return this.divideScalar(this.length() || 1); - } - - angle() { - // computes the angle in radians with respect to the positive x-axis - const angle = Math.atan2(-this.y, -this.x) + Math.PI; - return angle; - } - - distanceTo(v) { - return Math.sqrt(this.distanceToSquared(v)); - } - - distanceToSquared(v) { - const dx = this.x - v.x, - dy = this.y - v.y; - return dx * dx + dy * dy; - } - - manhattanDistanceTo(v) { - return Math.abs(this.x - v.x) + Math.abs(this.y - v.y); - } - - setLength(length) { - return this.normalize().multiplyScalar(length); - } - - lerp(v, alpha) { - this.x += (v.x - this.x) * alpha; - this.y += (v.y - this.y) * alpha; - return this; - } - - lerpVectors(v1, v2, alpha) { - this.x = v1.x + (v2.x - v1.x) * alpha; - this.y = v1.y + (v2.y - v1.y) * alpha; - return this; - } - - equals(v) { - return v.x === this.x && v.y === this.y; - } - - fromArray(array, offset = 0) { - this.x = array[offset]; - this.y = array[offset + 1]; - return this; - } - - toArray(array = [], offset = 0) { - array[offset] = this.x; - array[offset + 1] = this.y; - return array; - } - - fromBufferAttribute(attribute, index, offset) { - if (offset !== undefined) { - console.warn('THREE.Vector2: offset has been removed from .fromBufferAttribute().'); - } - - this.x = attribute.getX(index); - this.y = attribute.getY(index); - return this; - } - - rotateAround(center, angle) { - const c = Math.cos(angle), - s = Math.sin(angle); - const x = this.x - center.x; - const y = this.y - center.y; - this.x = x * c - y * s + center.x; - this.y = x * s + y * c + center.y; - return this; - } - - random() { - this.x = Math.random(); - this.y = Math.random(); - return this; - } - - *[Symbol.iterator]() { - yield this.x; - yield this.y; - } - - } - - Vector2.prototype.isVector2 = true; - - class Matrix3 { - constructor() { - this.elements = [1, 0, 0, 0, 1, 0, 0, 0, 1]; - - if (arguments.length > 0) { - console.error('THREE.Matrix3: the constructor no longer reads arguments. use .set() instead.'); - } - } - - set(n11, n12, n13, n21, n22, n23, n31, n32, n33) { - const te = this.elements; - te[0] = n11; - te[1] = n21; - te[2] = n31; - te[3] = n12; - te[4] = n22; - te[5] = n32; - te[6] = n13; - te[7] = n23; - te[8] = n33; - return this; - } - - identity() { - this.set(1, 0, 0, 0, 1, 0, 0, 0, 1); - return this; - } - - copy(m) { - const te = this.elements; - const me = m.elements; - te[0] = me[0]; - te[1] = me[1]; - te[2] = me[2]; - te[3] = me[3]; - te[4] = me[4]; - te[5] = me[5]; - te[6] = me[6]; - te[7] = me[7]; - te[8] = me[8]; - return this; - } - - extractBasis(xAxis, yAxis, zAxis) { - xAxis.setFromMatrix3Column(this, 0); - yAxis.setFromMatrix3Column(this, 1); - zAxis.setFromMatrix3Column(this, 2); - return this; - } - - setFromMatrix4(m) { - const me = m.elements; - this.set(me[0], me[4], me[8], me[1], me[5], me[9], me[2], me[6], me[10]); - return this; - } - - multiply(m) { - return this.multiplyMatrices(this, m); - } - - premultiply(m) { - return this.multiplyMatrices(m, this); - } - - multiplyMatrices(a, b) { - const ae = a.elements; - const be = b.elements; - const te = this.elements; - const a11 = ae[0], - a12 = ae[3], - a13 = ae[6]; - const a21 = ae[1], - a22 = ae[4], - a23 = ae[7]; - const a31 = ae[2], - a32 = ae[5], - a33 = ae[8]; - const b11 = be[0], - b12 = be[3], - b13 = be[6]; - const b21 = be[1], - b22 = be[4], - b23 = be[7]; - const b31 = be[2], - b32 = be[5], - b33 = be[8]; - te[0] = a11 * b11 + a12 * b21 + a13 * b31; - te[3] = a11 * b12 + a12 * b22 + a13 * b32; - te[6] = a11 * b13 + a12 * b23 + a13 * b33; - te[1] = a21 * b11 + a22 * b21 + a23 * b31; - te[4] = a21 * b12 + a22 * b22 + a23 * b32; - te[7] = a21 * b13 + a22 * b23 + a23 * b33; - te[2] = a31 * b11 + a32 * b21 + a33 * b31; - te[5] = a31 * b12 + a32 * b22 + a33 * b32; - te[8] = a31 * b13 + a32 * b23 + a33 * b33; - return this; - } - - multiplyScalar(s) { - const te = this.elements; - te[0] *= s; - te[3] *= s; - te[6] *= s; - te[1] *= s; - te[4] *= s; - te[7] *= s; - te[2] *= s; - te[5] *= s; - te[8] *= s; - return this; - } - - determinant() { - const te = this.elements; - const a = te[0], - b = te[1], - c = te[2], - d = te[3], - e = te[4], - f = te[5], - g = te[6], - h = te[7], - i = te[8]; - return a * e * i - a * f * h - b * d * i + b * f * g + c * d * h - c * e * g; - } - - invert() { - const te = this.elements, - n11 = te[0], - n21 = te[1], - n31 = te[2], - n12 = te[3], - n22 = te[4], - n32 = te[5], - n13 = te[6], - n23 = te[7], - n33 = te[8], - t11 = n33 * n22 - n32 * n23, - t12 = n32 * n13 - n33 * n12, - t13 = n23 * n12 - n22 * n13, - det = n11 * t11 + n21 * t12 + n31 * t13; - if (det === 0) return this.set(0, 0, 0, 0, 0, 0, 0, 0, 0); - const detInv = 1 / det; - te[0] = t11 * detInv; - te[1] = (n31 * n23 - n33 * n21) * detInv; - te[2] = (n32 * n21 - n31 * n22) * detInv; - te[3] = t12 * detInv; - te[4] = (n33 * n11 - n31 * n13) * detInv; - te[5] = (n31 * n12 - n32 * n11) * detInv; - te[6] = t13 * detInv; - te[7] = (n21 * n13 - n23 * n11) * detInv; - te[8] = (n22 * n11 - n21 * n12) * detInv; - return this; - } - - transpose() { - let tmp; - const m = this.elements; - tmp = m[1]; - m[1] = m[3]; - m[3] = tmp; - tmp = m[2]; - m[2] = m[6]; - m[6] = tmp; - tmp = m[5]; - m[5] = m[7]; - m[7] = tmp; - return this; - } - - getNormalMatrix(matrix4) { - return this.setFromMatrix4(matrix4).invert().transpose(); - } - - transposeIntoArray(r) { - const m = this.elements; - r[0] = m[0]; - r[1] = m[3]; - r[2] = m[6]; - r[3] = m[1]; - r[4] = m[4]; - r[5] = m[7]; - r[6] = m[2]; - r[7] = m[5]; - r[8] = m[8]; - return this; - } - - setUvTransform(tx, ty, sx, sy, rotation, cx, cy) { - const c = Math.cos(rotation); - const s = Math.sin(rotation); - this.set(sx * c, sx * s, -sx * (c * cx + s * cy) + cx + tx, -sy * s, sy * c, -sy * (-s * cx + c * cy) + cy + ty, 0, 0, 1); - return this; - } - - scale(sx, sy) { - const te = this.elements; - te[0] *= sx; - te[3] *= sx; - te[6] *= sx; - te[1] *= sy; - te[4] *= sy; - te[7] *= sy; - return this; - } - - rotate(theta) { - const c = Math.cos(theta); - const s = Math.sin(theta); - const te = this.elements; - const a11 = te[0], - a12 = te[3], - a13 = te[6]; - const a21 = te[1], - a22 = te[4], - a23 = te[7]; - te[0] = c * a11 + s * a21; - te[3] = c * a12 + s * a22; - te[6] = c * a13 + s * a23; - te[1] = -s * a11 + c * a21; - te[4] = -s * a12 + c * a22; - te[7] = -s * a13 + c * a23; - return this; - } - - translate(tx, ty) { - const te = this.elements; - te[0] += tx * te[2]; - te[3] += tx * te[5]; - te[6] += tx * te[8]; - te[1] += ty * te[2]; - te[4] += ty * te[5]; - te[7] += ty * te[8]; - return this; - } - - equals(matrix) { - const te = this.elements; - const me = matrix.elements; - - for (let i = 0; i < 9; i++) { - if (te[i] !== me[i]) return false; - } - - return true; - } - - fromArray(array, offset = 0) { - for (let i = 0; i < 9; i++) { - this.elements[i] = array[i + offset]; - } - - return this; - } - - toArray(array = [], offset = 0) { - const te = this.elements; - array[offset] = te[0]; - array[offset + 1] = te[1]; - array[offset + 2] = te[2]; - array[offset + 3] = te[3]; - array[offset + 4] = te[4]; - array[offset + 5] = te[5]; - array[offset + 6] = te[6]; - array[offset + 7] = te[7]; - array[offset + 8] = te[8]; - return array; - } - - clone() { - return new this.constructor().fromArray(this.elements); - } - - } - - Matrix3.prototype.isMatrix3 = true; - - function arrayNeedsUint32(array) { - // assumes larger values usually on last - for (let i = array.length - 1; i >= 0; --i) { - if (array[i] > 65535) return true; - } - - return false; - } - - const TYPED_ARRAYS = { - Int8Array: Int8Array, - Uint8Array: Uint8Array, - Uint8ClampedArray: Uint8ClampedArray, - Int16Array: Int16Array, - Uint16Array: Uint16Array, - Int32Array: Int32Array, - Uint32Array: Uint32Array, - Float32Array: Float32Array, - Float64Array: Float64Array - }; - - function getTypedArray(type, buffer) { - return new TYPED_ARRAYS[type](buffer); - } - - function createElementNS(name) { - return document.createElementNS('http://www.w3.org/1999/xhtml', name); - } - - function SRGBToLinear(c) { - return c < 0.04045 ? c * 0.0773993808 : Math.pow(c * 0.9478672986 + 0.0521327014, 2.4); - } - function LinearToSRGB(c) { - return c < 0.0031308 ? c * 12.92 : 1.055 * Math.pow(c, 0.41666) - 0.055; - } // JavaScript RGB-to-RGB transforms, defined as - // FN[InputColorSpace][OutputColorSpace] callback functions. - - const FN = { - [SRGBColorSpace]: { - [LinearSRGBColorSpace]: SRGBToLinear - }, - [LinearSRGBColorSpace]: { - [SRGBColorSpace]: LinearToSRGB - } - }; - const ColorManagement = { - legacyMode: true, - - get workingColorSpace() { - return LinearSRGBColorSpace; - }, - - set workingColorSpace(colorSpace) { - console.warn('THREE.ColorManagement: .workingColorSpace is readonly.'); - }, - - convert: function (color, sourceColorSpace, targetColorSpace) { - if (this.legacyMode || sourceColorSpace === targetColorSpace || !sourceColorSpace || !targetColorSpace) { - return color; - } - - if (FN[sourceColorSpace] && FN[sourceColorSpace][targetColorSpace] !== undefined) { - const fn = FN[sourceColorSpace][targetColorSpace]; - color.r = fn(color.r); - color.g = fn(color.g); - color.b = fn(color.b); - return color; - } - - throw new Error('Unsupported color space conversion.'); - }, - fromWorkingColorSpace: function (color, targetColorSpace) { - return this.convert(color, this.workingColorSpace, targetColorSpace); - }, - toWorkingColorSpace: function (color, sourceColorSpace) { - return this.convert(color, sourceColorSpace, this.workingColorSpace); - } - }; - - const _colorKeywords = { - 'aliceblue': 0xF0F8FF, - 'antiquewhite': 0xFAEBD7, - 'aqua': 0x00FFFF, - 'aquamarine': 0x7FFFD4, - 'azure': 0xF0FFFF, - 'beige': 0xF5F5DC, - 'bisque': 0xFFE4C4, - 'black': 0x000000, - 'blanchedalmond': 0xFFEBCD, - 'blue': 0x0000FF, - 'blueviolet': 0x8A2BE2, - 'brown': 0xA52A2A, - 'burlywood': 0xDEB887, - 'cadetblue': 0x5F9EA0, - 'chartreuse': 0x7FFF00, - 'chocolate': 0xD2691E, - 'coral': 0xFF7F50, - 'cornflowerblue': 0x6495ED, - 'cornsilk': 0xFFF8DC, - 'crimson': 0xDC143C, - 'cyan': 0x00FFFF, - 'darkblue': 0x00008B, - 'darkcyan': 0x008B8B, - 'darkgoldenrod': 0xB8860B, - 'darkgray': 0xA9A9A9, - 'darkgreen': 0x006400, - 'darkgrey': 0xA9A9A9, - 'darkkhaki': 0xBDB76B, - 'darkmagenta': 0x8B008B, - 'darkolivegreen': 0x556B2F, - 'darkorange': 0xFF8C00, - 'darkorchid': 0x9932CC, - 'darkred': 0x8B0000, - 'darksalmon': 0xE9967A, - 'darkseagreen': 0x8FBC8F, - 'darkslateblue': 0x483D8B, - 'darkslategray': 0x2F4F4F, - 'darkslategrey': 0x2F4F4F, - 'darkturquoise': 0x00CED1, - 'darkviolet': 0x9400D3, - 'deeppink': 0xFF1493, - 'deepskyblue': 0x00BFFF, - 'dimgray': 0x696969, - 'dimgrey': 0x696969, - 'dodgerblue': 0x1E90FF, - 'firebrick': 0xB22222, - 'floralwhite': 0xFFFAF0, - 'forestgreen': 0x228B22, - 'fuchsia': 0xFF00FF, - 'gainsboro': 0xDCDCDC, - 'ghostwhite': 0xF8F8FF, - 'gold': 0xFFD700, - 'goldenrod': 0xDAA520, - 'gray': 0x808080, - 'green': 0x008000, - 'greenyellow': 0xADFF2F, - 'grey': 0x808080, - 'honeydew': 0xF0FFF0, - 'hotpink': 0xFF69B4, - 'indianred': 0xCD5C5C, - 'indigo': 0x4B0082, - 'ivory': 0xFFFFF0, - 'khaki': 0xF0E68C, - 'lavender': 0xE6E6FA, - 'lavenderblush': 0xFFF0F5, - 'lawngreen': 0x7CFC00, - 'lemonchiffon': 0xFFFACD, - 'lightblue': 0xADD8E6, - 'lightcoral': 0xF08080, - 'lightcyan': 0xE0FFFF, - 'lightgoldenrodyellow': 0xFAFAD2, - 'lightgray': 0xD3D3D3, - 'lightgreen': 0x90EE90, - 'lightgrey': 0xD3D3D3, - 'lightpink': 0xFFB6C1, - 'lightsalmon': 0xFFA07A, - 'lightseagreen': 0x20B2AA, - 'lightskyblue': 0x87CEFA, - 'lightslategray': 0x778899, - 'lightslategrey': 0x778899, - 'lightsteelblue': 0xB0C4DE, - 'lightyellow': 0xFFFFE0, - 'lime': 0x00FF00, - 'limegreen': 0x32CD32, - 'linen': 0xFAF0E6, - 'magenta': 0xFF00FF, - 'maroon': 0x800000, - 'mediumaquamarine': 0x66CDAA, - 'mediumblue': 0x0000CD, - 'mediumorchid': 0xBA55D3, - 'mediumpurple': 0x9370DB, - 'mediumseagreen': 0x3CB371, - 'mediumslateblue': 0x7B68EE, - 'mediumspringgreen': 0x00FA9A, - 'mediumturquoise': 0x48D1CC, - 'mediumvioletred': 0xC71585, - 'midnightblue': 0x191970, - 'mintcream': 0xF5FFFA, - 'mistyrose': 0xFFE4E1, - 'moccasin': 0xFFE4B5, - 'navajowhite': 0xFFDEAD, - 'navy': 0x000080, - 'oldlace': 0xFDF5E6, - 'olive': 0x808000, - 'olivedrab': 0x6B8E23, - 'orange': 0xFFA500, - 'orangered': 0xFF4500, - 'orchid': 0xDA70D6, - 'palegoldenrod': 0xEEE8AA, - 'palegreen': 0x98FB98, - 'paleturquoise': 0xAFEEEE, - 'palevioletred': 0xDB7093, - 'papayawhip': 0xFFEFD5, - 'peachpuff': 0xFFDAB9, - 'peru': 0xCD853F, - 'pink': 0xFFC0CB, - 'plum': 0xDDA0DD, - 'powderblue': 0xB0E0E6, - 'purple': 0x800080, - 'rebeccapurple': 0x663399, - 'red': 0xFF0000, - 'rosybrown': 0xBC8F8F, - 'royalblue': 0x4169E1, - 'saddlebrown': 0x8B4513, - 'salmon': 0xFA8072, - 'sandybrown': 0xF4A460, - 'seagreen': 0x2E8B57, - 'seashell': 0xFFF5EE, - 'sienna': 0xA0522D, - 'silver': 0xC0C0C0, - 'skyblue': 0x87CEEB, - 'slateblue': 0x6A5ACD, - 'slategray': 0x708090, - 'slategrey': 0x708090, - 'snow': 0xFFFAFA, - 'springgreen': 0x00FF7F, - 'steelblue': 0x4682B4, - 'tan': 0xD2B48C, - 'teal': 0x008080, - 'thistle': 0xD8BFD8, - 'tomato': 0xFF6347, - 'turquoise': 0x40E0D0, - 'violet': 0xEE82EE, - 'wheat': 0xF5DEB3, - 'white': 0xFFFFFF, - 'whitesmoke': 0xF5F5F5, - 'yellow': 0xFFFF00, - 'yellowgreen': 0x9ACD32 - }; - const _rgb = { - r: 0, - g: 0, - b: 0 - }; - const _hslA = { - h: 0, - s: 0, - l: 0 - }; - const _hslB = { - h: 0, - s: 0, - l: 0 - }; - - function hue2rgb(p, q, t) { - if (t < 0) t += 1; - if (t > 1) t -= 1; - if (t < 1 / 6) return p + (q - p) * 6 * t; - if (t < 1 / 2) return q; - if (t < 2 / 3) return p + (q - p) * 6 * (2 / 3 - t); - return p; - } - - function toComponents(source, target) { - target.r = source.r; - target.g = source.g; - target.b = source.b; - return target; - } - - class Color { - constructor(r, g, b) { - if (g === undefined && b === undefined) { - // r is THREE.Color, hex or string - return this.set(r); - } - - return this.setRGB(r, g, b); - } - - set(value) { - if (value && value.isColor) { - this.copy(value); - } else if (typeof value === 'number') { - this.setHex(value); - } else if (typeof value === 'string') { - this.setStyle(value); - } - - return this; - } - - setScalar(scalar) { - this.r = scalar; - this.g = scalar; - this.b = scalar; - return this; - } - - setHex(hex, colorSpace = SRGBColorSpace) { - hex = Math.floor(hex); - this.r = (hex >> 16 & 255) / 255; - this.g = (hex >> 8 & 255) / 255; - this.b = (hex & 255) / 255; - ColorManagement.toWorkingColorSpace(this, colorSpace); - return this; - } - - setRGB(r, g, b, colorSpace = LinearSRGBColorSpace) { - this.r = r; - this.g = g; - this.b = b; - ColorManagement.toWorkingColorSpace(this, colorSpace); - return this; - } - - setHSL(h, s, l, colorSpace = LinearSRGBColorSpace) { - // h,s,l ranges are in 0.0 - 1.0 - h = euclideanModulo(h, 1); - s = clamp(s, 0, 1); - l = clamp(l, 0, 1); - - if (s === 0) { - this.r = this.g = this.b = l; - } else { - const p = l <= 0.5 ? l * (1 + s) : l + s - l * s; - const q = 2 * l - p; - this.r = hue2rgb(q, p, h + 1 / 3); - this.g = hue2rgb(q, p, h); - this.b = hue2rgb(q, p, h - 1 / 3); - } - - ColorManagement.toWorkingColorSpace(this, colorSpace); - return this; - } - - setStyle(style, colorSpace = SRGBColorSpace) { - function handleAlpha(string) { - if (string === undefined) return; - - if (parseFloat(string) < 1) { - console.warn('THREE.Color: Alpha component of ' + style + ' will be ignored.'); - } - } - - let m; - - if (m = /^((?:rgb|hsl)a?)\(([^\)]*)\)/.exec(style)) { - // rgb / hsl - let color; - const name = m[1]; - const components = m[2]; - - switch (name) { - case 'rgb': - case 'rgba': - if (color = /^\s*(\d+)\s*,\s*(\d+)\s*,\s*(\d+)\s*(?:,\s*(\d*\.?\d+)\s*)?$/.exec(components)) { - // rgb(255,0,0) rgba(255,0,0,0.5) - this.r = Math.min(255, parseInt(color[1], 10)) / 255; - this.g = Math.min(255, parseInt(color[2], 10)) / 255; - this.b = Math.min(255, parseInt(color[3], 10)) / 255; - ColorManagement.toWorkingColorSpace(this, colorSpace); - handleAlpha(color[4]); - return this; - } - - if (color = /^\s*(\d+)\%\s*,\s*(\d+)\%\s*,\s*(\d+)\%\s*(?:,\s*(\d*\.?\d+)\s*)?$/.exec(components)) { - // rgb(100%,0%,0%) rgba(100%,0%,0%,0.5) - this.r = Math.min(100, parseInt(color[1], 10)) / 100; - this.g = Math.min(100, parseInt(color[2], 10)) / 100; - this.b = Math.min(100, parseInt(color[3], 10)) / 100; - ColorManagement.toWorkingColorSpace(this, colorSpace); - handleAlpha(color[4]); - return this; - } - - break; - - case 'hsl': - case 'hsla': - if (color = /^\s*(\d*\.?\d+)\s*,\s*(\d+)\%\s*,\s*(\d+)\%\s*(?:,\s*(\d*\.?\d+)\s*)?$/.exec(components)) { - // hsl(120,50%,50%) hsla(120,50%,50%,0.5) - const h = parseFloat(color[1]) / 360; - const s = parseInt(color[2], 10) / 100; - const l = parseInt(color[3], 10) / 100; - handleAlpha(color[4]); - return this.setHSL(h, s, l, colorSpace); - } - - break; - } - } else if (m = /^\#([A-Fa-f\d]+)$/.exec(style)) { - // hex color - const hex = m[1]; - const size = hex.length; - - if (size === 3) { - // #ff0 - this.r = parseInt(hex.charAt(0) + hex.charAt(0), 16) / 255; - this.g = parseInt(hex.charAt(1) + hex.charAt(1), 16) / 255; - this.b = parseInt(hex.charAt(2) + hex.charAt(2), 16) / 255; - ColorManagement.toWorkingColorSpace(this, colorSpace); - return this; - } else if (size === 6) { - // #ff0000 - this.r = parseInt(hex.charAt(0) + hex.charAt(1), 16) / 255; - this.g = parseInt(hex.charAt(2) + hex.charAt(3), 16) / 255; - this.b = parseInt(hex.charAt(4) + hex.charAt(5), 16) / 255; - ColorManagement.toWorkingColorSpace(this, colorSpace); - return this; - } - } - - if (style && style.length > 0) { - return this.setColorName(style, colorSpace); - } - - return this; - } - - setColorName(style, colorSpace = SRGBColorSpace) { - // color keywords - const hex = _colorKeywords[style.toLowerCase()]; - - if (hex !== undefined) { - // red - this.setHex(hex, colorSpace); - } else { - // unknown color - console.warn('THREE.Color: Unknown color ' + style); - } - - return this; - } - - clone() { - return new this.constructor(this.r, this.g, this.b); - } - - copy(color) { - this.r = color.r; - this.g = color.g; - this.b = color.b; - return this; - } - - copySRGBToLinear(color) { - this.r = SRGBToLinear(color.r); - this.g = SRGBToLinear(color.g); - this.b = SRGBToLinear(color.b); - return this; - } - - copyLinearToSRGB(color) { - this.r = LinearToSRGB(color.r); - this.g = LinearToSRGB(color.g); - this.b = LinearToSRGB(color.b); - return this; - } - - convertSRGBToLinear() { - this.copySRGBToLinear(this); - return this; - } - - convertLinearToSRGB() { - this.copyLinearToSRGB(this); - return this; - } - - getHex(colorSpace = SRGBColorSpace) { - ColorManagement.fromWorkingColorSpace(toComponents(this, _rgb), colorSpace); - return clamp(_rgb.r * 255, 0, 255) << 16 ^ clamp(_rgb.g * 255, 0, 255) << 8 ^ clamp(_rgb.b * 255, 0, 255) << 0; - } - - getHexString(colorSpace = SRGBColorSpace) { - return ('000000' + this.getHex(colorSpace).toString(16)).slice(-6); - } - - getHSL(target, colorSpace = LinearSRGBColorSpace) { - // h,s,l ranges are in 0.0 - 1.0 - ColorManagement.fromWorkingColorSpace(toComponents(this, _rgb), colorSpace); - const r = _rgb.r, - g = _rgb.g, - b = _rgb.b; - const max = Math.max(r, g, b); - const min = Math.min(r, g, b); - let hue, saturation; - const lightness = (min + max) / 2.0; - - if (min === max) { - hue = 0; - saturation = 0; - } else { - const delta = max - min; - saturation = lightness <= 0.5 ? delta / (max + min) : delta / (2 - max - min); - - switch (max) { - case r: - hue = (g - b) / delta + (g < b ? 6 : 0); - break; - - case g: - hue = (b - r) / delta + 2; - break; - - case b: - hue = (r - g) / delta + 4; - break; - } - - hue /= 6; - } - - target.h = hue; - target.s = saturation; - target.l = lightness; - return target; - } - - getRGB(target, colorSpace = LinearSRGBColorSpace) { - ColorManagement.fromWorkingColorSpace(toComponents(this, _rgb), colorSpace); - target.r = _rgb.r; - target.g = _rgb.g; - target.b = _rgb.b; - return target; - } - - getStyle(colorSpace = SRGBColorSpace) { - ColorManagement.fromWorkingColorSpace(toComponents(this, _rgb), colorSpace); - - if (colorSpace !== SRGBColorSpace) { - // Requires CSS Color Module Level 4 (https://www.w3.org/TR/css-color-4/). - return `color(${colorSpace} ${_rgb.r} ${_rgb.g} ${_rgb.b})`; - } - - return `rgb(${_rgb.r * 255 | 0},${_rgb.g * 255 | 0},${_rgb.b * 255 | 0})`; - } - - offsetHSL(h, s, l) { - this.getHSL(_hslA); - _hslA.h += h; - _hslA.s += s; - _hslA.l += l; - this.setHSL(_hslA.h, _hslA.s, _hslA.l); - return this; - } - - add(color) { - this.r += color.r; - this.g += color.g; - this.b += color.b; - return this; - } - - addColors(color1, color2) { - this.r = color1.r + color2.r; - this.g = color1.g + color2.g; - this.b = color1.b + color2.b; - return this; - } - - addScalar(s) { - this.r += s; - this.g += s; - this.b += s; - return this; - } - - sub(color) { - this.r = Math.max(0, this.r - color.r); - this.g = Math.max(0, this.g - color.g); - this.b = Math.max(0, this.b - color.b); - return this; - } - - multiply(color) { - this.r *= color.r; - this.g *= color.g; - this.b *= color.b; - return this; - } - - multiplyScalar(s) { - this.r *= s; - this.g *= s; - this.b *= s; - return this; - } - - lerp(color, alpha) { - this.r += (color.r - this.r) * alpha; - this.g += (color.g - this.g) * alpha; - this.b += (color.b - this.b) * alpha; - return this; - } - - lerpColors(color1, color2, alpha) { - this.r = color1.r + (color2.r - color1.r) * alpha; - this.g = color1.g + (color2.g - color1.g) * alpha; - this.b = color1.b + (color2.b - color1.b) * alpha; - return this; - } - - lerpHSL(color, alpha) { - this.getHSL(_hslA); - color.getHSL(_hslB); - const h = lerp(_hslA.h, _hslB.h, alpha); - const s = lerp(_hslA.s, _hslB.s, alpha); - const l = lerp(_hslA.l, _hslB.l, alpha); - this.setHSL(h, s, l); - return this; - } - - equals(c) { - return c.r === this.r && c.g === this.g && c.b === this.b; - } - - fromArray(array, offset = 0) { - this.r = array[offset]; - this.g = array[offset + 1]; - this.b = array[offset + 2]; - return this; - } - - toArray(array = [], offset = 0) { - array[offset] = this.r; - array[offset + 1] = this.g; - array[offset + 2] = this.b; - return array; - } - - fromBufferAttribute(attribute, index) { - this.r = attribute.getX(index); - this.g = attribute.getY(index); - this.b = attribute.getZ(index); - - if (attribute.normalized === true) { - // assuming Uint8Array - this.r /= 255; - this.g /= 255; - this.b /= 255; - } - - return this; - } - - toJSON() { - return this.getHex(); - } - - *[Symbol.iterator]() { - yield this.r; - yield this.g; - yield this.b; - } - - } - - Color.NAMES = _colorKeywords; - Color.prototype.isColor = true; - Color.prototype.r = 1; - Color.prototype.g = 1; - Color.prototype.b = 1; - - let _canvas; - - class ImageUtils { - static getDataURL(image) { - if (/^data:/i.test(image.src)) { - return image.src; - } - - if (typeof HTMLCanvasElement == 'undefined') { - return image.src; - } - - let canvas; - - if (image instanceof HTMLCanvasElement) { - canvas = image; - } else { - if (_canvas === undefined) _canvas = createElementNS('canvas'); - _canvas.width = image.width; - _canvas.height = image.height; - - const context = _canvas.getContext('2d'); - - if (image instanceof ImageData) { - context.putImageData(image, 0, 0); - } else { - context.drawImage(image, 0, 0, image.width, image.height); - } - - canvas = _canvas; - } - - if (canvas.width > 2048 || canvas.height > 2048) { - console.warn('THREE.ImageUtils.getDataURL: Image converted to jpg for performance reasons', image); - return canvas.toDataURL('image/jpeg', 0.6); - } else { - return canvas.toDataURL('image/png'); - } - } - - static sRGBToLinear(image) { - if (typeof HTMLImageElement !== 'undefined' && image instanceof HTMLImageElement || typeof HTMLCanvasElement !== 'undefined' && image instanceof HTMLCanvasElement || typeof ImageBitmap !== 'undefined' && image instanceof ImageBitmap) { - const canvas = createElementNS('canvas'); - canvas.width = image.width; - canvas.height = image.height; - const context = canvas.getContext('2d'); - context.drawImage(image, 0, 0, image.width, image.height); - const imageData = context.getImageData(0, 0, image.width, image.height); - const data = imageData.data; - - for (let i = 0; i < data.length; i++) { - data[i] = SRGBToLinear(data[i] / 255) * 255; - } - - context.putImageData(imageData, 0, 0); - return canvas; - } else if (image.data) { - const data = image.data.slice(0); - - for (let i = 0; i < data.length; i++) { - if (data instanceof Uint8Array || data instanceof Uint8ClampedArray) { - data[i] = Math.floor(SRGBToLinear(data[i] / 255) * 255); - } else { - // assuming float - data[i] = SRGBToLinear(data[i]); - } - } - - return { - data: data, - width: image.width, - height: image.height - }; - } else { - console.warn('THREE.ImageUtils.sRGBToLinear(): Unsupported image type. No color space conversion applied.'); - return image; - } - } - - } - - class Source { - constructor(data = null) { - this.uuid = generateUUID(); - this.data = data; - this.version = 0; - } - - set needsUpdate(value) { - if (value === true) this.version++; - } - - toJSON(meta) { - const isRootObject = meta === undefined || typeof meta === 'string'; - - if (!isRootObject && meta.images[this.uuid] !== undefined) { - return meta.images[this.uuid]; - } - - const output = { - uuid: this.uuid, - url: '' - }; - const data = this.data; - - if (data !== null) { - let url; - - if (Array.isArray(data)) { - // cube texture - url = []; - - for (let i = 0, l = data.length; i < l; i++) { - if (data[i].isDataTexture) { - url.push(serializeImage(data[i].image)); - } else { - url.push(serializeImage(data[i])); - } - } - } else { - // texture - url = serializeImage(data); - } - - output.url = url; - } - - if (!isRootObject) { - meta.images[this.uuid] = output; - } - - return output; - } - - } - - function serializeImage(image) { - if (typeof HTMLImageElement !== 'undefined' && image instanceof HTMLImageElement || typeof HTMLCanvasElement !== 'undefined' && image instanceof HTMLCanvasElement || typeof ImageBitmap !== 'undefined' && image instanceof ImageBitmap) { - // default images - return ImageUtils.getDataURL(image); - } else { - if (image.data) { - // images of DataTexture - return { - data: Array.prototype.slice.call(image.data), - width: image.width, - height: image.height, - type: image.data.constructor.name - }; - } else { - console.warn('THREE.Texture: Unable to serialize Texture.'); - return {}; - } - } - } - - Source.prototype.isSource = true; - - let textureId = 0; - - class Texture extends EventDispatcher { - constructor(image = Texture.DEFAULT_IMAGE, mapping = Texture.DEFAULT_MAPPING, wrapS = ClampToEdgeWrapping, wrapT = ClampToEdgeWrapping, magFilter = LinearFilter, minFilter = LinearMipmapLinearFilter, format = RGBAFormat, type = UnsignedByteType, anisotropy = 1, encoding = LinearEncoding) { - super(); - Object.defineProperty(this, 'id', { - value: textureId++ - }); - this.uuid = generateUUID(); - this.name = ''; - this.source = new Source(image); - this.mipmaps = []; - this.mapping = mapping; - this.wrapS = wrapS; - this.wrapT = wrapT; - this.magFilter = magFilter; - this.minFilter = minFilter; - this.anisotropy = anisotropy; - this.format = format; - this.internalFormat = null; - this.type = type; - this.offset = new Vector2(0, 0); - this.repeat = new Vector2(1, 1); - this.center = new Vector2(0, 0); - this.rotation = 0; - this.matrixAutoUpdate = true; - this.matrix = new Matrix3(); - this.generateMipmaps = true; - this.premultiplyAlpha = false; - this.flipY = true; - this.unpackAlignment = 4; // valid values: 1, 2, 4, 8 (see http://www.khronos.org/opengles/sdk/docs/man/xhtml/glPixelStorei.xml) - // Values of encoding !== THREE.LinearEncoding only supported on map, envMap and emissiveMap. - // - // Also changing the encoding after already used by a Material will not automatically make the Material - // update. You need to explicitly call Material.needsUpdate to trigger it to recompile. - - this.encoding = encoding; - this.userData = {}; - this.version = 0; - this.onUpdate = null; - this.isRenderTargetTexture = false; // indicates whether a texture belongs to a render target or not - - this.needsPMREMUpdate = false; // indicates whether this texture should be processed by PMREMGenerator or not (only relevant for render target textures) - } - - get image() { - return this.source.data; - } - - set image(value) { - this.source.data = value; - } - - updateMatrix() { - this.matrix.setUvTransform(this.offset.x, this.offset.y, this.repeat.x, this.repeat.y, this.rotation, this.center.x, this.center.y); - } - - clone() { - return new this.constructor().copy(this); - } - - copy(source) { - this.name = source.name; - this.source = source.source; - this.mipmaps = source.mipmaps.slice(0); - this.mapping = source.mapping; - this.wrapS = source.wrapS; - this.wrapT = source.wrapT; - this.magFilter = source.magFilter; - this.minFilter = source.minFilter; - this.anisotropy = source.anisotropy; - this.format = source.format; - this.internalFormat = source.internalFormat; - this.type = source.type; - this.offset.copy(source.offset); - this.repeat.copy(source.repeat); - this.center.copy(source.center); - this.rotation = source.rotation; - this.matrixAutoUpdate = source.matrixAutoUpdate; - this.matrix.copy(source.matrix); - this.generateMipmaps = source.generateMipmaps; - this.premultiplyAlpha = source.premultiplyAlpha; - this.flipY = source.flipY; - this.unpackAlignment = source.unpackAlignment; - this.encoding = source.encoding; - this.userData = JSON.parse(JSON.stringify(source.userData)); - this.needsUpdate = true; - return this; - } - - toJSON(meta) { - const isRootObject = meta === undefined || typeof meta === 'string'; - - if (!isRootObject && meta.textures[this.uuid] !== undefined) { - return meta.textures[this.uuid]; - } - - const output = { - metadata: { - version: 4.5, - type: 'Texture', - generator: 'Texture.toJSON' - }, - uuid: this.uuid, - name: this.name, - image: this.source.toJSON(meta).uuid, - mapping: this.mapping, - repeat: [this.repeat.x, this.repeat.y], - offset: [this.offset.x, this.offset.y], - center: [this.center.x, this.center.y], - rotation: this.rotation, - wrap: [this.wrapS, this.wrapT], - format: this.format, - type: this.type, - encoding: this.encoding, - minFilter: this.minFilter, - magFilter: this.magFilter, - anisotropy: this.anisotropy, - flipY: this.flipY, - premultiplyAlpha: this.premultiplyAlpha, - unpackAlignment: this.unpackAlignment - }; - if (JSON.stringify(this.userData) !== '{}') output.userData = this.userData; - - if (!isRootObject) { - meta.textures[this.uuid] = output; - } - - return output; - } - - dispose() { - this.dispatchEvent({ - type: 'dispose' - }); - } - - transformUv(uv) { - if (this.mapping !== UVMapping) return uv; - uv.applyMatrix3(this.matrix); - - if (uv.x < 0 || uv.x > 1) { - switch (this.wrapS) { - case RepeatWrapping: - uv.x = uv.x - Math.floor(uv.x); - break; - - case ClampToEdgeWrapping: - uv.x = uv.x < 0 ? 0 : 1; - break; - - case MirroredRepeatWrapping: - if (Math.abs(Math.floor(uv.x) % 2) === 1) { - uv.x = Math.ceil(uv.x) - uv.x; - } else { - uv.x = uv.x - Math.floor(uv.x); - } - - break; - } - } - - if (uv.y < 0 || uv.y > 1) { - switch (this.wrapT) { - case RepeatWrapping: - uv.y = uv.y - Math.floor(uv.y); - break; - - case ClampToEdgeWrapping: - uv.y = uv.y < 0 ? 0 : 1; - break; - - case MirroredRepeatWrapping: - if (Math.abs(Math.floor(uv.y) % 2) === 1) { - uv.y = Math.ceil(uv.y) - uv.y; - } else { - uv.y = uv.y - Math.floor(uv.y); - } - - break; - } - } - - if (this.flipY) { - uv.y = 1 - uv.y; - } - - return uv; - } - - set needsUpdate(value) { - if (value === true) { - this.version++; - this.source.needsUpdate = true; - } - } - - } - - Texture.DEFAULT_IMAGE = null; - Texture.DEFAULT_MAPPING = UVMapping; - Texture.prototype.isTexture = true; - - class Vector4 { - constructor(x = 0, y = 0, z = 0, w = 1) { - this.x = x; - this.y = y; - this.z = z; - this.w = w; - } - - get width() { - return this.z; - } - - set width(value) { - this.z = value; - } - - get height() { - return this.w; - } - - set height(value) { - this.w = value; - } - - set(x, y, z, w) { - this.x = x; - this.y = y; - this.z = z; - this.w = w; - return this; - } - - setScalar(scalar) { - this.x = scalar; - this.y = scalar; - this.z = scalar; - this.w = scalar; - return this; - } - - setX(x) { - this.x = x; - return this; - } - - setY(y) { - this.y = y; - return this; - } - - setZ(z) { - this.z = z; - return this; - } - - setW(w) { - this.w = w; - return this; - } - - setComponent(index, value) { - switch (index) { - case 0: - this.x = value; - break; - - case 1: - this.y = value; - break; - - case 2: - this.z = value; - break; - - case 3: - this.w = value; - break; - - default: - throw new Error('index is out of range: ' + index); - } - - return this; - } - - getComponent(index) { - switch (index) { - case 0: - return this.x; - - case 1: - return this.y; - - case 2: - return this.z; - - case 3: - return this.w; - - default: - throw new Error('index is out of range: ' + index); - } - } - - clone() { - return new this.constructor(this.x, this.y, this.z, this.w); - } - - copy(v) { - this.x = v.x; - this.y = v.y; - this.z = v.z; - this.w = v.w !== undefined ? v.w : 1; - return this; - } - - add(v, w) { - if (w !== undefined) { - console.warn('THREE.Vector4: .add() now only accepts one argument. Use .addVectors( a, b ) instead.'); - return this.addVectors(v, w); - } - - this.x += v.x; - this.y += v.y; - this.z += v.z; - this.w += v.w; - return this; - } - - addScalar(s) { - this.x += s; - this.y += s; - this.z += s; - this.w += s; - return this; - } - - addVectors(a, b) { - this.x = a.x + b.x; - this.y = a.y + b.y; - this.z = a.z + b.z; - this.w = a.w + b.w; - return this; - } - - addScaledVector(v, s) { - this.x += v.x * s; - this.y += v.y * s; - this.z += v.z * s; - this.w += v.w * s; - return this; - } - - sub(v, w) { - if (w !== undefined) { - console.warn('THREE.Vector4: .sub() now only accepts one argument. Use .subVectors( a, b ) instead.'); - return this.subVectors(v, w); - } - - this.x -= v.x; - this.y -= v.y; - this.z -= v.z; - this.w -= v.w; - return this; - } - - subScalar(s) { - this.x -= s; - this.y -= s; - this.z -= s; - this.w -= s; - return this; - } - - subVectors(a, b) { - this.x = a.x - b.x; - this.y = a.y - b.y; - this.z = a.z - b.z; - this.w = a.w - b.w; - return this; - } - - multiply(v) { - this.x *= v.x; - this.y *= v.y; - this.z *= v.z; - this.w *= v.w; - return this; - } - - multiplyScalar(scalar) { - this.x *= scalar; - this.y *= scalar; - this.z *= scalar; - this.w *= scalar; - return this; - } - - applyMatrix4(m) { - const x = this.x, - y = this.y, - z = this.z, - w = this.w; - const e = m.elements; - this.x = e[0] * x + e[4] * y + e[8] * z + e[12] * w; - this.y = e[1] * x + e[5] * y + e[9] * z + e[13] * w; - this.z = e[2] * x + e[6] * y + e[10] * z + e[14] * w; - this.w = e[3] * x + e[7] * y + e[11] * z + e[15] * w; - return this; - } - - divideScalar(scalar) { - return this.multiplyScalar(1 / scalar); - } - - setAxisAngleFromQuaternion(q) { - // http://www.euclideanspace.com/maths/geometry/rotations/conversions/quaternionToAngle/index.htm - // q is assumed to be normalized - this.w = 2 * Math.acos(q.w); - const s = Math.sqrt(1 - q.w * q.w); - - if (s < 0.0001) { - this.x = 1; - this.y = 0; - this.z = 0; - } else { - this.x = q.x / s; - this.y = q.y / s; - this.z = q.z / s; - } - - return this; - } - - setAxisAngleFromRotationMatrix(m) { - // http://www.euclideanspace.com/maths/geometry/rotations/conversions/matrixToAngle/index.htm - // assumes the upper 3x3 of m is a pure rotation matrix (i.e, unscaled) - let angle, x, y, z; // variables for result - - const epsilon = 0.01, - // margin to allow for rounding errors - epsilon2 = 0.1, - // margin to distinguish between 0 and 180 degrees - te = m.elements, - m11 = te[0], - m12 = te[4], - m13 = te[8], - m21 = te[1], - m22 = te[5], - m23 = te[9], - m31 = te[2], - m32 = te[6], - m33 = te[10]; - - if (Math.abs(m12 - m21) < epsilon && Math.abs(m13 - m31) < epsilon && Math.abs(m23 - m32) < epsilon) { - // singularity found - // first check for identity matrix which must have +1 for all terms - // in leading diagonal and zero in other terms - if (Math.abs(m12 + m21) < epsilon2 && Math.abs(m13 + m31) < epsilon2 && Math.abs(m23 + m32) < epsilon2 && Math.abs(m11 + m22 + m33 - 3) < epsilon2) { - // this singularity is identity matrix so angle = 0 - this.set(1, 0, 0, 0); - return this; // zero angle, arbitrary axis - } // otherwise this singularity is angle = 180 - - - angle = Math.PI; - const xx = (m11 + 1) / 2; - const yy = (m22 + 1) / 2; - const zz = (m33 + 1) / 2; - const xy = (m12 + m21) / 4; - const xz = (m13 + m31) / 4; - const yz = (m23 + m32) / 4; - - if (xx > yy && xx > zz) { - // m11 is the largest diagonal term - if (xx < epsilon) { - x = 0; - y = 0.707106781; - z = 0.707106781; - } else { - x = Math.sqrt(xx); - y = xy / x; - z = xz / x; - } - } else if (yy > zz) { - // m22 is the largest diagonal term - if (yy < epsilon) { - x = 0.707106781; - y = 0; - z = 0.707106781; - } else { - y = Math.sqrt(yy); - x = xy / y; - z = yz / y; - } - } else { - // m33 is the largest diagonal term so base result on this - if (zz < epsilon) { - x = 0.707106781; - y = 0.707106781; - z = 0; - } else { - z = Math.sqrt(zz); - x = xz / z; - y = yz / z; - } - } - - this.set(x, y, z, angle); - return this; // return 180 deg rotation - } // as we have reached here there are no singularities so we can handle normally - - - let s = Math.sqrt((m32 - m23) * (m32 - m23) + (m13 - m31) * (m13 - m31) + (m21 - m12) * (m21 - m12)); // used to normalize - - if (Math.abs(s) < 0.001) s = 1; // prevent divide by zero, should not happen if matrix is orthogonal and should be - // caught by singularity test above, but I've left it in just in case - - this.x = (m32 - m23) / s; - this.y = (m13 - m31) / s; - this.z = (m21 - m12) / s; - this.w = Math.acos((m11 + m22 + m33 - 1) / 2); - return this; - } - - min(v) { - this.x = Math.min(this.x, v.x); - this.y = Math.min(this.y, v.y); - this.z = Math.min(this.z, v.z); - this.w = Math.min(this.w, v.w); - return this; - } - - max(v) { - this.x = Math.max(this.x, v.x); - this.y = Math.max(this.y, v.y); - this.z = Math.max(this.z, v.z); - this.w = Math.max(this.w, v.w); - return this; - } - - clamp(min, max) { - // assumes min < max, componentwise - this.x = Math.max(min.x, Math.min(max.x, this.x)); - this.y = Math.max(min.y, Math.min(max.y, this.y)); - this.z = Math.max(min.z, Math.min(max.z, this.z)); - this.w = Math.max(min.w, Math.min(max.w, this.w)); - return this; - } - - clampScalar(minVal, maxVal) { - this.x = Math.max(minVal, Math.min(maxVal, this.x)); - this.y = Math.max(minVal, Math.min(maxVal, this.y)); - this.z = Math.max(minVal, Math.min(maxVal, this.z)); - this.w = Math.max(minVal, Math.min(maxVal, this.w)); - return this; - } - - clampLength(min, max) { - const length = this.length(); - return this.divideScalar(length || 1).multiplyScalar(Math.max(min, Math.min(max, length))); - } - - floor() { - this.x = Math.floor(this.x); - this.y = Math.floor(this.y); - this.z = Math.floor(this.z); - this.w = Math.floor(this.w); - return this; - } - - ceil() { - this.x = Math.ceil(this.x); - this.y = Math.ceil(this.y); - this.z = Math.ceil(this.z); - this.w = Math.ceil(this.w); - return this; - } - - round() { - this.x = Math.round(this.x); - this.y = Math.round(this.y); - this.z = Math.round(this.z); - this.w = Math.round(this.w); - return this; - } - - roundToZero() { - this.x = this.x < 0 ? Math.ceil(this.x) : Math.floor(this.x); - this.y = this.y < 0 ? Math.ceil(this.y) : Math.floor(this.y); - this.z = this.z < 0 ? Math.ceil(this.z) : Math.floor(this.z); - this.w = this.w < 0 ? Math.ceil(this.w) : Math.floor(this.w); - return this; - } - - negate() { - this.x = -this.x; - this.y = -this.y; - this.z = -this.z; - this.w = -this.w; - return this; - } - - dot(v) { - return this.x * v.x + this.y * v.y + this.z * v.z + this.w * v.w; - } - - lengthSq() { - return this.x * this.x + this.y * this.y + this.z * this.z + this.w * this.w; - } - - length() { - return Math.sqrt(this.x * this.x + this.y * this.y + this.z * this.z + this.w * this.w); - } - - manhattanLength() { - return Math.abs(this.x) + Math.abs(this.y) + Math.abs(this.z) + Math.abs(this.w); - } - - normalize() { - return this.divideScalar(this.length() || 1); - } - - setLength(length) { - return this.normalize().multiplyScalar(length); - } - - lerp(v, alpha) { - this.x += (v.x - this.x) * alpha; - this.y += (v.y - this.y) * alpha; - this.z += (v.z - this.z) * alpha; - this.w += (v.w - this.w) * alpha; - return this; - } - - lerpVectors(v1, v2, alpha) { - this.x = v1.x + (v2.x - v1.x) * alpha; - this.y = v1.y + (v2.y - v1.y) * alpha; - this.z = v1.z + (v2.z - v1.z) * alpha; - this.w = v1.w + (v2.w - v1.w) * alpha; - return this; - } - - equals(v) { - return v.x === this.x && v.y === this.y && v.z === this.z && v.w === this.w; - } - - fromArray(array, offset = 0) { - this.x = array[offset]; - this.y = array[offset + 1]; - this.z = array[offset + 2]; - this.w = array[offset + 3]; - return this; - } - - toArray(array = [], offset = 0) { - array[offset] = this.x; - array[offset + 1] = this.y; - array[offset + 2] = this.z; - array[offset + 3] = this.w; - return array; - } - - fromBufferAttribute(attribute, index, offset) { - if (offset !== undefined) { - console.warn('THREE.Vector4: offset has been removed from .fromBufferAttribute().'); - } - - this.x = attribute.getX(index); - this.y = attribute.getY(index); - this.z = attribute.getZ(index); - this.w = attribute.getW(index); - return this; - } - - random() { - this.x = Math.random(); - this.y = Math.random(); - this.z = Math.random(); - this.w = Math.random(); - return this; - } - - *[Symbol.iterator]() { - yield this.x; - yield this.y; - yield this.z; - yield this.w; - } - - } - - Vector4.prototype.isVector4 = true; - - /* - In options, we can specify: - * Texture parameters for an auto-generated target texture - * depthBuffer/stencilBuffer: Booleans to indicate if we should generate these buffers - */ - - class WebGLRenderTarget extends EventDispatcher { - constructor(width, height, options = {}) { - super(); - this.width = width; - this.height = height; - this.depth = 1; - this.scissor = new Vector4(0, 0, width, height); - this.scissorTest = false; - this.viewport = new Vector4(0, 0, width, height); - const image = { - width: width, - height: height, - depth: 1 - }; - this.texture = new Texture(image, options.mapping, options.wrapS, options.wrapT, options.magFilter, options.minFilter, options.format, options.type, options.anisotropy, options.encoding); - this.texture.isRenderTargetTexture = true; - this.texture.flipY = false; - this.texture.generateMipmaps = options.generateMipmaps !== undefined ? options.generateMipmaps : false; - this.texture.internalFormat = options.internalFormat !== undefined ? options.internalFormat : null; - this.texture.minFilter = options.minFilter !== undefined ? options.minFilter : LinearFilter; - this.depthBuffer = options.depthBuffer !== undefined ? options.depthBuffer : true; - this.stencilBuffer = options.stencilBuffer !== undefined ? options.stencilBuffer : false; - this.depthTexture = options.depthTexture !== undefined ? options.depthTexture : null; - this.samples = options.samples !== undefined ? options.samples : 0; - } - - setSize(width, height, depth = 1) { - if (this.width !== width || this.height !== height || this.depth !== depth) { - this.width = width; - this.height = height; - this.depth = depth; - this.texture.image.width = width; - this.texture.image.height = height; - this.texture.image.depth = depth; - this.dispose(); - } - - this.viewport.set(0, 0, width, height); - this.scissor.set(0, 0, width, height); - } - - clone() { - return new this.constructor().copy(this); - } - - copy(source) { - this.width = source.width; - this.height = source.height; - this.depth = source.depth; - this.viewport.copy(source.viewport); - this.texture = source.texture.clone(); - this.texture.isRenderTargetTexture = true; // ensure image object is not shared, see #20328 - - const image = Object.assign({}, source.texture.image); - this.texture.source = new Source(image); - this.depthBuffer = source.depthBuffer; - this.stencilBuffer = source.stencilBuffer; - if (source.depthTexture !== null) this.depthTexture = source.depthTexture.clone(); - this.samples = source.samples; - return this; - } - - dispose() { - this.dispatchEvent({ - type: 'dispose' - }); - } - - } - - WebGLRenderTarget.prototype.isWebGLRenderTarget = true; - - class DataArrayTexture extends Texture { - constructor(data = null, width = 1, height = 1, depth = 1) { - super(null); - this.image = { - data, - width, - height, - depth - }; - this.magFilter = NearestFilter; - this.minFilter = NearestFilter; - this.wrapR = ClampToEdgeWrapping; - this.generateMipmaps = false; - this.flipY = false; - this.unpackAlignment = 1; - } - - } - - DataArrayTexture.prototype.isDataArrayTexture = true; - - class WebGLArrayRenderTarget extends WebGLRenderTarget { - constructor(width, height, depth) { - super(width, height); - this.depth = depth; - this.texture = new DataArrayTexture(null, width, height, depth); - this.texture.isRenderTargetTexture = true; - } - - } - - WebGLArrayRenderTarget.prototype.isWebGLArrayRenderTarget = true; - - class Data3DTexture extends Texture { - constructor(data = null, width = 1, height = 1, depth = 1) { - // We're going to add .setXXX() methods for setting properties later. - // Users can still set in DataTexture3D directly. - // - // const texture = new THREE.DataTexture3D( data, width, height, depth ); - // texture.anisotropy = 16; - // - // See #14839 - super(null); - this.image = { - data, - width, - height, - depth - }; - this.magFilter = NearestFilter; - this.minFilter = NearestFilter; - this.wrapR = ClampToEdgeWrapping; - this.generateMipmaps = false; - this.flipY = false; - this.unpackAlignment = 1; - } - - } - - Data3DTexture.prototype.isData3DTexture = true; - - class WebGL3DRenderTarget extends WebGLRenderTarget { - constructor(width, height, depth) { - super(width, height); - this.depth = depth; - this.texture = new Data3DTexture(null, width, height, depth); - this.texture.isRenderTargetTexture = true; - } - - } - - WebGL3DRenderTarget.prototype.isWebGL3DRenderTarget = true; - - class WebGLMultipleRenderTargets extends WebGLRenderTarget { - constructor(width, height, count, options = {}) { - super(width, height, options); - const texture = this.texture; - this.texture = []; - - for (let i = 0; i < count; i++) { - this.texture[i] = texture.clone(); - this.texture[i].isRenderTargetTexture = true; - } - } - - setSize(width, height, depth = 1) { - if (this.width !== width || this.height !== height || this.depth !== depth) { - this.width = width; - this.height = height; - this.depth = depth; - - for (let i = 0, il = this.texture.length; i < il; i++) { - this.texture[i].image.width = width; - this.texture[i].image.height = height; - this.texture[i].image.depth = depth; - } - - this.dispose(); - } - - this.viewport.set(0, 0, width, height); - this.scissor.set(0, 0, width, height); - return this; - } - - copy(source) { - this.dispose(); - this.width = source.width; - this.height = source.height; - this.depth = source.depth; - this.viewport.set(0, 0, this.width, this.height); - this.scissor.set(0, 0, this.width, this.height); - this.depthBuffer = source.depthBuffer; - this.stencilBuffer = source.stencilBuffer; - if (source.depthTexture !== null) this.depthTexture = source.depthTexture.clone(); - this.texture.length = 0; - - for (let i = 0, il = source.texture.length; i < il; i++) { - this.texture[i] = source.texture[i].clone(); - this.texture[i].isRenderTargetTexture = true; - } - - return this; - } - - } - - WebGLMultipleRenderTargets.prototype.isWebGLMultipleRenderTargets = true; - - class Quaternion { - constructor(x = 0, y = 0, z = 0, w = 1) { - this._x = x; - this._y = y; - this._z = z; - this._w = w; - } - - static slerp(qa, qb, qm, t) { - console.warn('THREE.Quaternion: Static .slerp() has been deprecated. Use qm.slerpQuaternions( qa, qb, t ) instead.'); - return qm.slerpQuaternions(qa, qb, t); - } - - static slerpFlat(dst, dstOffset, src0, srcOffset0, src1, srcOffset1, t) { - // fuzz-free, array-based Quaternion SLERP operation - let x0 = src0[srcOffset0 + 0], - y0 = src0[srcOffset0 + 1], - z0 = src0[srcOffset0 + 2], - w0 = src0[srcOffset0 + 3]; - const x1 = src1[srcOffset1 + 0], - y1 = src1[srcOffset1 + 1], - z1 = src1[srcOffset1 + 2], - w1 = src1[srcOffset1 + 3]; - - if (t === 0) { - dst[dstOffset + 0] = x0; - dst[dstOffset + 1] = y0; - dst[dstOffset + 2] = z0; - dst[dstOffset + 3] = w0; - return; - } - - if (t === 1) { - dst[dstOffset + 0] = x1; - dst[dstOffset + 1] = y1; - dst[dstOffset + 2] = z1; - dst[dstOffset + 3] = w1; - return; - } - - if (w0 !== w1 || x0 !== x1 || y0 !== y1 || z0 !== z1) { - let s = 1 - t; - const cos = x0 * x1 + y0 * y1 + z0 * z1 + w0 * w1, - dir = cos >= 0 ? 1 : -1, - sqrSin = 1 - cos * cos; // Skip the Slerp for tiny steps to avoid numeric problems: - - if (sqrSin > Number.EPSILON) { - const sin = Math.sqrt(sqrSin), - len = Math.atan2(sin, cos * dir); - s = Math.sin(s * len) / sin; - t = Math.sin(t * len) / sin; - } - - const tDir = t * dir; - x0 = x0 * s + x1 * tDir; - y0 = y0 * s + y1 * tDir; - z0 = z0 * s + z1 * tDir; - w0 = w0 * s + w1 * tDir; // Normalize in case we just did a lerp: - - if (s === 1 - t) { - const f = 1 / Math.sqrt(x0 * x0 + y0 * y0 + z0 * z0 + w0 * w0); - x0 *= f; - y0 *= f; - z0 *= f; - w0 *= f; - } - } - - dst[dstOffset] = x0; - dst[dstOffset + 1] = y0; - dst[dstOffset + 2] = z0; - dst[dstOffset + 3] = w0; - } - - static multiplyQuaternionsFlat(dst, dstOffset, src0, srcOffset0, src1, srcOffset1) { - const x0 = src0[srcOffset0]; - const y0 = src0[srcOffset0 + 1]; - const z0 = src0[srcOffset0 + 2]; - const w0 = src0[srcOffset0 + 3]; - const x1 = src1[srcOffset1]; - const y1 = src1[srcOffset1 + 1]; - const z1 = src1[srcOffset1 + 2]; - const w1 = src1[srcOffset1 + 3]; - dst[dstOffset] = x0 * w1 + w0 * x1 + y0 * z1 - z0 * y1; - dst[dstOffset + 1] = y0 * w1 + w0 * y1 + z0 * x1 - x0 * z1; - dst[dstOffset + 2] = z0 * w1 + w0 * z1 + x0 * y1 - y0 * x1; - dst[dstOffset + 3] = w0 * w1 - x0 * x1 - y0 * y1 - z0 * z1; - return dst; - } - - get x() { - return this._x; - } - - set x(value) { - this._x = value; - - this._onChangeCallback(); - } - - get y() { - return this._y; - } - - set y(value) { - this._y = value; - - this._onChangeCallback(); - } - - get z() { - return this._z; - } - - set z(value) { - this._z = value; - - this._onChangeCallback(); - } - - get w() { - return this._w; - } - - set w(value) { - this._w = value; - - this._onChangeCallback(); - } - - set(x, y, z, w) { - this._x = x; - this._y = y; - this._z = z; - this._w = w; - - this._onChangeCallback(); - - return this; - } - - clone() { - return new this.constructor(this._x, this._y, this._z, this._w); - } - - copy(quaternion) { - this._x = quaternion.x; - this._y = quaternion.y; - this._z = quaternion.z; - this._w = quaternion.w; - - this._onChangeCallback(); - - return this; - } - - setFromEuler(euler, update) { - if (!(euler && euler.isEuler)) { - throw new Error('THREE.Quaternion: .setFromEuler() now expects an Euler rotation rather than a Vector3 and order.'); - } - - const x = euler._x, - y = euler._y, - z = euler._z, - order = euler._order; // http://www.mathworks.com/matlabcentral/fileexchange/ - // 20696-function-to-convert-between-dcm-euler-angles-quaternions-and-euler-vectors/ - // content/SpinCalc.m - - const cos = Math.cos; - const sin = Math.sin; - const c1 = cos(x / 2); - const c2 = cos(y / 2); - const c3 = cos(z / 2); - const s1 = sin(x / 2); - const s2 = sin(y / 2); - const s3 = sin(z / 2); - - switch (order) { - case 'XYZ': - this._x = s1 * c2 * c3 + c1 * s2 * s3; - this._y = c1 * s2 * c3 - s1 * c2 * s3; - this._z = c1 * c2 * s3 + s1 * s2 * c3; - this._w = c1 * c2 * c3 - s1 * s2 * s3; - break; - - case 'YXZ': - this._x = s1 * c2 * c3 + c1 * s2 * s3; - this._y = c1 * s2 * c3 - s1 * c2 * s3; - this._z = c1 * c2 * s3 - s1 * s2 * c3; - this._w = c1 * c2 * c3 + s1 * s2 * s3; - break; - - case 'ZXY': - this._x = s1 * c2 * c3 - c1 * s2 * s3; - this._y = c1 * s2 * c3 + s1 * c2 * s3; - this._z = c1 * c2 * s3 + s1 * s2 * c3; - this._w = c1 * c2 * c3 - s1 * s2 * s3; - break; - - case 'ZYX': - this._x = s1 * c2 * c3 - c1 * s2 * s3; - this._y = c1 * s2 * c3 + s1 * c2 * s3; - this._z = c1 * c2 * s3 - s1 * s2 * c3; - this._w = c1 * c2 * c3 + s1 * s2 * s3; - break; - - case 'YZX': - this._x = s1 * c2 * c3 + c1 * s2 * s3; - this._y = c1 * s2 * c3 + s1 * c2 * s3; - this._z = c1 * c2 * s3 - s1 * s2 * c3; - this._w = c1 * c2 * c3 - s1 * s2 * s3; - break; - - case 'XZY': - this._x = s1 * c2 * c3 - c1 * s2 * s3; - this._y = c1 * s2 * c3 - s1 * c2 * s3; - this._z = c1 * c2 * s3 + s1 * s2 * c3; - this._w = c1 * c2 * c3 + s1 * s2 * s3; - break; - - default: - console.warn('THREE.Quaternion: .setFromEuler() encountered an unknown order: ' + order); - } - - if (update !== false) this._onChangeCallback(); - return this; - } - - setFromAxisAngle(axis, angle) { - // http://www.euclideanspace.com/maths/geometry/rotations/conversions/angleToQuaternion/index.htm - // assumes axis is normalized - const halfAngle = angle / 2, - s = Math.sin(halfAngle); - this._x = axis.x * s; - this._y = axis.y * s; - this._z = axis.z * s; - this._w = Math.cos(halfAngle); - - this._onChangeCallback(); - - return this; - } - - setFromRotationMatrix(m) { - // http://www.euclideanspace.com/maths/geometry/rotations/conversions/matrixToQuaternion/index.htm - // assumes the upper 3x3 of m is a pure rotation matrix (i.e, unscaled) - const te = m.elements, - m11 = te[0], - m12 = te[4], - m13 = te[8], - m21 = te[1], - m22 = te[5], - m23 = te[9], - m31 = te[2], - m32 = te[6], - m33 = te[10], - trace = m11 + m22 + m33; - - if (trace > 0) { - const s = 0.5 / Math.sqrt(trace + 1.0); - this._w = 0.25 / s; - this._x = (m32 - m23) * s; - this._y = (m13 - m31) * s; - this._z = (m21 - m12) * s; - } else if (m11 > m22 && m11 > m33) { - const s = 2.0 * Math.sqrt(1.0 + m11 - m22 - m33); - this._w = (m32 - m23) / s; - this._x = 0.25 * s; - this._y = (m12 + m21) / s; - this._z = (m13 + m31) / s; - } else if (m22 > m33) { - const s = 2.0 * Math.sqrt(1.0 + m22 - m11 - m33); - this._w = (m13 - m31) / s; - this._x = (m12 + m21) / s; - this._y = 0.25 * s; - this._z = (m23 + m32) / s; - } else { - const s = 2.0 * Math.sqrt(1.0 + m33 - m11 - m22); - this._w = (m21 - m12) / s; - this._x = (m13 + m31) / s; - this._y = (m23 + m32) / s; - this._z = 0.25 * s; - } - - this._onChangeCallback(); - - return this; - } - - setFromUnitVectors(vFrom, vTo) { - // assumes direction vectors vFrom and vTo are normalized - let r = vFrom.dot(vTo) + 1; - - if (r < Number.EPSILON) { - // vFrom and vTo point in opposite directions - r = 0; - - if (Math.abs(vFrom.x) > Math.abs(vFrom.z)) { - this._x = -vFrom.y; - this._y = vFrom.x; - this._z = 0; - this._w = r; - } else { - this._x = 0; - this._y = -vFrom.z; - this._z = vFrom.y; - this._w = r; - } - } else { - // crossVectors( vFrom, vTo ); // inlined to avoid cyclic dependency on Vector3 - this._x = vFrom.y * vTo.z - vFrom.z * vTo.y; - this._y = vFrom.z * vTo.x - vFrom.x * vTo.z; - this._z = vFrom.x * vTo.y - vFrom.y * vTo.x; - this._w = r; - } - - return this.normalize(); - } - - angleTo(q) { - return 2 * Math.acos(Math.abs(clamp(this.dot(q), -1, 1))); - } - - rotateTowards(q, step) { - const angle = this.angleTo(q); - if (angle === 0) return this; - const t = Math.min(1, step / angle); - this.slerp(q, t); - return this; - } - - identity() { - return this.set(0, 0, 0, 1); - } - - invert() { - // quaternion is assumed to have unit length - return this.conjugate(); - } - - conjugate() { - this._x *= -1; - this._y *= -1; - this._z *= -1; - - this._onChangeCallback(); - - return this; - } - - dot(v) { - return this._x * v._x + this._y * v._y + this._z * v._z + this._w * v._w; - } - - lengthSq() { - return this._x * this._x + this._y * this._y + this._z * this._z + this._w * this._w; - } - - length() { - return Math.sqrt(this._x * this._x + this._y * this._y + this._z * this._z + this._w * this._w); - } - - normalize() { - let l = this.length(); - - if (l === 0) { - this._x = 0; - this._y = 0; - this._z = 0; - this._w = 1; - } else { - l = 1 / l; - this._x = this._x * l; - this._y = this._y * l; - this._z = this._z * l; - this._w = this._w * l; - } - - this._onChangeCallback(); - - return this; - } - - multiply(q, p) { - if (p !== undefined) { - console.warn('THREE.Quaternion: .multiply() now only accepts one argument. Use .multiplyQuaternions( a, b ) instead.'); - return this.multiplyQuaternions(q, p); - } - - return this.multiplyQuaternions(this, q); - } - - premultiply(q) { - return this.multiplyQuaternions(q, this); - } - - multiplyQuaternions(a, b) { - // from http://www.euclideanspace.com/maths/algebra/realNormedAlgebra/quaternions/code/index.htm - const qax = a._x, - qay = a._y, - qaz = a._z, - qaw = a._w; - const qbx = b._x, - qby = b._y, - qbz = b._z, - qbw = b._w; - this._x = qax * qbw + qaw * qbx + qay * qbz - qaz * qby; - this._y = qay * qbw + qaw * qby + qaz * qbx - qax * qbz; - this._z = qaz * qbw + qaw * qbz + qax * qby - qay * qbx; - this._w = qaw * qbw - qax * qbx - qay * qby - qaz * qbz; - - this._onChangeCallback(); - - return this; - } - - slerp(qb, t) { - if (t === 0) return this; - if (t === 1) return this.copy(qb); - const x = this._x, - y = this._y, - z = this._z, - w = this._w; // http://www.euclideanspace.com/maths/algebra/realNormedAlgebra/quaternions/slerp/ - - let cosHalfTheta = w * qb._w + x * qb._x + y * qb._y + z * qb._z; - - if (cosHalfTheta < 0) { - this._w = -qb._w; - this._x = -qb._x; - this._y = -qb._y; - this._z = -qb._z; - cosHalfTheta = -cosHalfTheta; - } else { - this.copy(qb); - } - - if (cosHalfTheta >= 1.0) { - this._w = w; - this._x = x; - this._y = y; - this._z = z; - return this; - } - - const sqrSinHalfTheta = 1.0 - cosHalfTheta * cosHalfTheta; - - if (sqrSinHalfTheta <= Number.EPSILON) { - const s = 1 - t; - this._w = s * w + t * this._w; - this._x = s * x + t * this._x; - this._y = s * y + t * this._y; - this._z = s * z + t * this._z; - this.normalize(); - - this._onChangeCallback(); - - return this; - } - - const sinHalfTheta = Math.sqrt(sqrSinHalfTheta); - const halfTheta = Math.atan2(sinHalfTheta, cosHalfTheta); - const ratioA = Math.sin((1 - t) * halfTheta) / sinHalfTheta, - ratioB = Math.sin(t * halfTheta) / sinHalfTheta; - this._w = w * ratioA + this._w * ratioB; - this._x = x * ratioA + this._x * ratioB; - this._y = y * ratioA + this._y * ratioB; - this._z = z * ratioA + this._z * ratioB; - - this._onChangeCallback(); - - return this; - } - - slerpQuaternions(qa, qb, t) { - return this.copy(qa).slerp(qb, t); - } - - random() { - // Derived from http://planning.cs.uiuc.edu/node198.html - // Note, this source uses w, x, y, z ordering, - // so we swap the order below. - const u1 = Math.random(); - const sqrt1u1 = Math.sqrt(1 - u1); - const sqrtu1 = Math.sqrt(u1); - const u2 = 2 * Math.PI * Math.random(); - const u3 = 2 * Math.PI * Math.random(); - return this.set(sqrt1u1 * Math.cos(u2), sqrtu1 * Math.sin(u3), sqrtu1 * Math.cos(u3), sqrt1u1 * Math.sin(u2)); - } - - equals(quaternion) { - return quaternion._x === this._x && quaternion._y === this._y && quaternion._z === this._z && quaternion._w === this._w; - } - - fromArray(array, offset = 0) { - this._x = array[offset]; - this._y = array[offset + 1]; - this._z = array[offset + 2]; - this._w = array[offset + 3]; - - this._onChangeCallback(); - - return this; - } - - toArray(array = [], offset = 0) { - array[offset] = this._x; - array[offset + 1] = this._y; - array[offset + 2] = this._z; - array[offset + 3] = this._w; - return array; - } - - fromBufferAttribute(attribute, index) { - this._x = attribute.getX(index); - this._y = attribute.getY(index); - this._z = attribute.getZ(index); - this._w = attribute.getW(index); - return this; - } - - _onChange(callback) { - this._onChangeCallback = callback; - return this; - } - - _onChangeCallback() {} - - *[Symbol.iterator]() { - yield this._x; - yield this._y; - yield this._z; - yield this._w; - } - - } - - Quaternion.prototype.isQuaternion = true; - - class Vector3 { - constructor(x = 0, y = 0, z = 0) { - this.x = x; - this.y = y; - this.z = z; - } - - set(x, y, z) { - if (z === undefined) z = this.z; // sprite.scale.set(x,y) - - this.x = x; - this.y = y; - this.z = z; - return this; - } - - setScalar(scalar) { - this.x = scalar; - this.y = scalar; - this.z = scalar; - return this; - } - - setX(x) { - this.x = x; - return this; - } - - setY(y) { - this.y = y; - return this; - } - - setZ(z) { - this.z = z; - return this; - } - - setComponent(index, value) { - switch (index) { - case 0: - this.x = value; - break; - - case 1: - this.y = value; - break; - - case 2: - this.z = value; - break; - - default: - throw new Error('index is out of range: ' + index); - } - - return this; - } - - getComponent(index) { - switch (index) { - case 0: - return this.x; - - case 1: - return this.y; - - case 2: - return this.z; - - default: - throw new Error('index is out of range: ' + index); - } - } - - clone() { - return new this.constructor(this.x, this.y, this.z); - } - - copy(v) { - this.x = v.x; - this.y = v.y; - this.z = v.z; - return this; - } - - add(v, w) { - if (w !== undefined) { - console.warn('THREE.Vector3: .add() now only accepts one argument. Use .addVectors( a, b ) instead.'); - return this.addVectors(v, w); - } - - this.x += v.x; - this.y += v.y; - this.z += v.z; - return this; - } - - addScalar(s) { - this.x += s; - this.y += s; - this.z += s; - return this; - } - - addVectors(a, b) { - this.x = a.x + b.x; - this.y = a.y + b.y; - this.z = a.z + b.z; - return this; - } - - addScaledVector(v, s) { - this.x += v.x * s; - this.y += v.y * s; - this.z += v.z * s; - return this; - } - - sub(v, w) { - if (w !== undefined) { - console.warn('THREE.Vector3: .sub() now only accepts one argument. Use .subVectors( a, b ) instead.'); - return this.subVectors(v, w); - } - - this.x -= v.x; - this.y -= v.y; - this.z -= v.z; - return this; - } - - subScalar(s) { - this.x -= s; - this.y -= s; - this.z -= s; - return this; - } - - subVectors(a, b) { - this.x = a.x - b.x; - this.y = a.y - b.y; - this.z = a.z - b.z; - return this; - } - - multiply(v, w) { - if (w !== undefined) { - console.warn('THREE.Vector3: .multiply() now only accepts one argument. Use .multiplyVectors( a, b ) instead.'); - return this.multiplyVectors(v, w); - } - - this.x *= v.x; - this.y *= v.y; - this.z *= v.z; - return this; - } - - multiplyScalar(scalar) { - this.x *= scalar; - this.y *= scalar; - this.z *= scalar; - return this; - } - - multiplyVectors(a, b) { - this.x = a.x * b.x; - this.y = a.y * b.y; - this.z = a.z * b.z; - return this; - } - - applyEuler(euler) { - if (!(euler && euler.isEuler)) { - console.error('THREE.Vector3: .applyEuler() now expects an Euler rotation rather than a Vector3 and order.'); - } - - return this.applyQuaternion(_quaternion$4.setFromEuler(euler)); - } - - applyAxisAngle(axis, angle) { - return this.applyQuaternion(_quaternion$4.setFromAxisAngle(axis, angle)); - } - - applyMatrix3(m) { - const x = this.x, - y = this.y, - z = this.z; - const e = m.elements; - this.x = e[0] * x + e[3] * y + e[6] * z; - this.y = e[1] * x + e[4] * y + e[7] * z; - this.z = e[2] * x + e[5] * y + e[8] * z; - return this; - } - - applyNormalMatrix(m) { - return this.applyMatrix3(m).normalize(); - } - - applyMatrix4(m) { - const x = this.x, - y = this.y, - z = this.z; - const e = m.elements; - const w = 1 / (e[3] * x + e[7] * y + e[11] * z + e[15]); - this.x = (e[0] * x + e[4] * y + e[8] * z + e[12]) * w; - this.y = (e[1] * x + e[5] * y + e[9] * z + e[13]) * w; - this.z = (e[2] * x + e[6] * y + e[10] * z + e[14]) * w; - return this; - } - - applyQuaternion(q) { - const x = this.x, - y = this.y, - z = this.z; - const qx = q.x, - qy = q.y, - qz = q.z, - qw = q.w; // calculate quat * vector - - const ix = qw * x + qy * z - qz * y; - const iy = qw * y + qz * x - qx * z; - const iz = qw * z + qx * y - qy * x; - const iw = -qx * x - qy * y - qz * z; // calculate result * inverse quat - - this.x = ix * qw + iw * -qx + iy * -qz - iz * -qy; - this.y = iy * qw + iw * -qy + iz * -qx - ix * -qz; - this.z = iz * qw + iw * -qz + ix * -qy - iy * -qx; - return this; - } - - project(camera) { - return this.applyMatrix4(camera.matrixWorldInverse).applyMatrix4(camera.projectionMatrix); - } - - unproject(camera) { - return this.applyMatrix4(camera.projectionMatrixInverse).applyMatrix4(camera.matrixWorld); - } - - transformDirection(m) { - // input: THREE.Matrix4 affine matrix - // vector interpreted as a direction - const x = this.x, - y = this.y, - z = this.z; - const e = m.elements; - this.x = e[0] * x + e[4] * y + e[8] * z; - this.y = e[1] * x + e[5] * y + e[9] * z; - this.z = e[2] * x + e[6] * y + e[10] * z; - return this.normalize(); - } - - divide(v) { - this.x /= v.x; - this.y /= v.y; - this.z /= v.z; - return this; - } - - divideScalar(scalar) { - return this.multiplyScalar(1 / scalar); - } - - min(v) { - this.x = Math.min(this.x, v.x); - this.y = Math.min(this.y, v.y); - this.z = Math.min(this.z, v.z); - return this; - } - - max(v) { - this.x = Math.max(this.x, v.x); - this.y = Math.max(this.y, v.y); - this.z = Math.max(this.z, v.z); - return this; - } - - clamp(min, max) { - // assumes min < max, componentwise - this.x = Math.max(min.x, Math.min(max.x, this.x)); - this.y = Math.max(min.y, Math.min(max.y, this.y)); - this.z = Math.max(min.z, Math.min(max.z, this.z)); - return this; - } - - clampScalar(minVal, maxVal) { - this.x = Math.max(minVal, Math.min(maxVal, this.x)); - this.y = Math.max(minVal, Math.min(maxVal, this.y)); - this.z = Math.max(minVal, Math.min(maxVal, this.z)); - return this; - } - - clampLength(min, max) { - const length = this.length(); - return this.divideScalar(length || 1).multiplyScalar(Math.max(min, Math.min(max, length))); - } - - floor() { - this.x = Math.floor(this.x); - this.y = Math.floor(this.y); - this.z = Math.floor(this.z); - return this; - } - - ceil() { - this.x = Math.ceil(this.x); - this.y = Math.ceil(this.y); - this.z = Math.ceil(this.z); - return this; - } - - round() { - this.x = Math.round(this.x); - this.y = Math.round(this.y); - this.z = Math.round(this.z); - return this; - } - - roundToZero() { - this.x = this.x < 0 ? Math.ceil(this.x) : Math.floor(this.x); - this.y = this.y < 0 ? Math.ceil(this.y) : Math.floor(this.y); - this.z = this.z < 0 ? Math.ceil(this.z) : Math.floor(this.z); - return this; - } - - negate() { - this.x = -this.x; - this.y = -this.y; - this.z = -this.z; - return this; - } - - dot(v) { - return this.x * v.x + this.y * v.y + this.z * v.z; - } // TODO lengthSquared? - - - lengthSq() { - return this.x * this.x + this.y * this.y + this.z * this.z; - } - - length() { - return Math.sqrt(this.x * this.x + this.y * this.y + this.z * this.z); - } - - manhattanLength() { - return Math.abs(this.x) + Math.abs(this.y) + Math.abs(this.z); - } - - normalize() { - return this.divideScalar(this.length() || 1); - } - - setLength(length) { - return this.normalize().multiplyScalar(length); - } - - lerp(v, alpha) { - this.x += (v.x - this.x) * alpha; - this.y += (v.y - this.y) * alpha; - this.z += (v.z - this.z) * alpha; - return this; - } - - lerpVectors(v1, v2, alpha) { - this.x = v1.x + (v2.x - v1.x) * alpha; - this.y = v1.y + (v2.y - v1.y) * alpha; - this.z = v1.z + (v2.z - v1.z) * alpha; - return this; - } - - cross(v, w) { - if (w !== undefined) { - console.warn('THREE.Vector3: .cross() now only accepts one argument. Use .crossVectors( a, b ) instead.'); - return this.crossVectors(v, w); - } - - return this.crossVectors(this, v); - } - - crossVectors(a, b) { - const ax = a.x, - ay = a.y, - az = a.z; - const bx = b.x, - by = b.y, - bz = b.z; - this.x = ay * bz - az * by; - this.y = az * bx - ax * bz; - this.z = ax * by - ay * bx; - return this; - } - - projectOnVector(v) { - const denominator = v.lengthSq(); - if (denominator === 0) return this.set(0, 0, 0); - const scalar = v.dot(this) / denominator; - return this.copy(v).multiplyScalar(scalar); - } - - projectOnPlane(planeNormal) { - _vector$c.copy(this).projectOnVector(planeNormal); - - return this.sub(_vector$c); - } - - reflect(normal) { - // reflect incident vector off plane orthogonal to normal - // normal is assumed to have unit length - return this.sub(_vector$c.copy(normal).multiplyScalar(2 * this.dot(normal))); - } - - angleTo(v) { - const denominator = Math.sqrt(this.lengthSq() * v.lengthSq()); - if (denominator === 0) return Math.PI / 2; - const theta = this.dot(v) / denominator; // clamp, to handle numerical problems - - return Math.acos(clamp(theta, -1, 1)); - } - - distanceTo(v) { - return Math.sqrt(this.distanceToSquared(v)); - } - - distanceToSquared(v) { - const dx = this.x - v.x, - dy = this.y - v.y, - dz = this.z - v.z; - return dx * dx + dy * dy + dz * dz; - } - - manhattanDistanceTo(v) { - return Math.abs(this.x - v.x) + Math.abs(this.y - v.y) + Math.abs(this.z - v.z); - } - - setFromSpherical(s) { - return this.setFromSphericalCoords(s.radius, s.phi, s.theta); - } - - setFromSphericalCoords(radius, phi, theta) { - const sinPhiRadius = Math.sin(phi) * radius; - this.x = sinPhiRadius * Math.sin(theta); - this.y = Math.cos(phi) * radius; - this.z = sinPhiRadius * Math.cos(theta); - return this; - } - - setFromCylindrical(c) { - return this.setFromCylindricalCoords(c.radius, c.theta, c.y); - } - - setFromCylindricalCoords(radius, theta, y) { - this.x = radius * Math.sin(theta); - this.y = y; - this.z = radius * Math.cos(theta); - return this; - } - - setFromMatrixPosition(m) { - const e = m.elements; - this.x = e[12]; - this.y = e[13]; - this.z = e[14]; - return this; - } - - setFromMatrixScale(m) { - const sx = this.setFromMatrixColumn(m, 0).length(); - const sy = this.setFromMatrixColumn(m, 1).length(); - const sz = this.setFromMatrixColumn(m, 2).length(); - this.x = sx; - this.y = sy; - this.z = sz; - return this; - } - - setFromMatrixColumn(m, index) { - return this.fromArray(m.elements, index * 4); - } - - setFromMatrix3Column(m, index) { - return this.fromArray(m.elements, index * 3); - } - - setFromEuler(e) { - this.x = e._x; - this.y = e._y; - this.z = e._z; - return this; - } - - equals(v) { - return v.x === this.x && v.y === this.y && v.z === this.z; - } - - fromArray(array, offset = 0) { - this.x = array[offset]; - this.y = array[offset + 1]; - this.z = array[offset + 2]; - return this; - } - - toArray(array = [], offset = 0) { - array[offset] = this.x; - array[offset + 1] = this.y; - array[offset + 2] = this.z; - return array; - } - - fromBufferAttribute(attribute, index, offset) { - if (offset !== undefined) { - console.warn('THREE.Vector3: offset has been removed from .fromBufferAttribute().'); - } - - this.x = attribute.getX(index); - this.y = attribute.getY(index); - this.z = attribute.getZ(index); - return this; - } - - random() { - this.x = Math.random(); - this.y = Math.random(); - this.z = Math.random(); - return this; - } - - randomDirection() { - // Derived from https://mathworld.wolfram.com/SpherePointPicking.html - const u = (Math.random() - 0.5) * 2; - const t = Math.random() * Math.PI * 2; - const f = Math.sqrt(1 - u ** 2); - this.x = f * Math.cos(t); - this.y = f * Math.sin(t); - this.z = u; - return this; - } - - *[Symbol.iterator]() { - yield this.x; - yield this.y; - yield this.z; - } - - } - - Vector3.prototype.isVector3 = true; - - const _vector$c = /*@__PURE__*/new Vector3(); - - const _quaternion$4 = /*@__PURE__*/new Quaternion(); - - class Box3 { - constructor(min = new Vector3(+Infinity, +Infinity, +Infinity), max = new Vector3(-Infinity, -Infinity, -Infinity)) { - this.min = min; - this.max = max; - } - - set(min, max) { - this.min.copy(min); - this.max.copy(max); - return this; - } - - setFromArray(array) { - let minX = +Infinity; - let minY = +Infinity; - let minZ = +Infinity; - let maxX = -Infinity; - let maxY = -Infinity; - let maxZ = -Infinity; - - for (let i = 0, l = array.length; i < l; i += 3) { - const x = array[i]; - const y = array[i + 1]; - const z = array[i + 2]; - if (x < minX) minX = x; - if (y < minY) minY = y; - if (z < minZ) minZ = z; - if (x > maxX) maxX = x; - if (y > maxY) maxY = y; - if (z > maxZ) maxZ = z; - } - - this.min.set(minX, minY, minZ); - this.max.set(maxX, maxY, maxZ); - return this; - } - - setFromBufferAttribute(attribute) { - let minX = +Infinity; - let minY = +Infinity; - let minZ = +Infinity; - let maxX = -Infinity; - let maxY = -Infinity; - let maxZ = -Infinity; - - for (let i = 0, l = attribute.count; i < l; i++) { - const x = attribute.getX(i); - const y = attribute.getY(i); - const z = attribute.getZ(i); - if (x < minX) minX = x; - if (y < minY) minY = y; - if (z < minZ) minZ = z; - if (x > maxX) maxX = x; - if (y > maxY) maxY = y; - if (z > maxZ) maxZ = z; - } - - this.min.set(minX, minY, minZ); - this.max.set(maxX, maxY, maxZ); - return this; - } - - setFromPoints(points) { - this.makeEmpty(); - - for (let i = 0, il = points.length; i < il; i++) { - this.expandByPoint(points[i]); - } - - return this; - } - - setFromCenterAndSize(center, size) { - const halfSize = _vector$b.copy(size).multiplyScalar(0.5); - - this.min.copy(center).sub(halfSize); - this.max.copy(center).add(halfSize); - return this; - } - - setFromObject(object, precise = false) { - this.makeEmpty(); - return this.expandByObject(object, precise); - } - - clone() { - return new this.constructor().copy(this); - } - - copy(box) { - this.min.copy(box.min); - this.max.copy(box.max); - return this; - } - - makeEmpty() { - this.min.x = this.min.y = this.min.z = +Infinity; - this.max.x = this.max.y = this.max.z = -Infinity; - return this; - } - - isEmpty() { - // this is a more robust check for empty than ( volume <= 0 ) because volume can get positive with two negative axes - return this.max.x < this.min.x || this.max.y < this.min.y || this.max.z < this.min.z; - } - - getCenter(target) { - return this.isEmpty() ? target.set(0, 0, 0) : target.addVectors(this.min, this.max).multiplyScalar(0.5); - } - - getSize(target) { - return this.isEmpty() ? target.set(0, 0, 0) : target.subVectors(this.max, this.min); - } - - expandByPoint(point) { - this.min.min(point); - this.max.max(point); - return this; - } - - expandByVector(vector) { - this.min.sub(vector); - this.max.add(vector); - return this; - } - - expandByScalar(scalar) { - this.min.addScalar(-scalar); - this.max.addScalar(scalar); - return this; - } - - expandByObject(object, precise = false) { - // Computes the world-axis-aligned bounding box of an object (including its children), - // accounting for both the object's, and children's, world transforms - object.updateWorldMatrix(false, false); - const geometry = object.geometry; - - if (geometry !== undefined) { - if (precise && geometry.attributes != undefined && geometry.attributes.position !== undefined) { - const position = geometry.attributes.position; - - for (let i = 0, l = position.count; i < l; i++) { - _vector$b.fromBufferAttribute(position, i).applyMatrix4(object.matrixWorld); - - this.expandByPoint(_vector$b); - } - } else { - if (geometry.boundingBox === null) { - geometry.computeBoundingBox(); - } - - _box$3.copy(geometry.boundingBox); - - _box$3.applyMatrix4(object.matrixWorld); - - this.union(_box$3); - } - } - - const children = object.children; - - for (let i = 0, l = children.length; i < l; i++) { - this.expandByObject(children[i], precise); - } - - return this; - } - - containsPoint(point) { - return point.x < this.min.x || point.x > this.max.x || point.y < this.min.y || point.y > this.max.y || point.z < this.min.z || point.z > this.max.z ? false : true; - } - - containsBox(box) { - return this.min.x <= box.min.x && box.max.x <= this.max.x && this.min.y <= box.min.y && box.max.y <= this.max.y && this.min.z <= box.min.z && box.max.z <= this.max.z; - } - - getParameter(point, target) { - // This can potentially have a divide by zero if the box - // has a size dimension of 0. - return target.set((point.x - this.min.x) / (this.max.x - this.min.x), (point.y - this.min.y) / (this.max.y - this.min.y), (point.z - this.min.z) / (this.max.z - this.min.z)); - } - - intersectsBox(box) { - // using 6 splitting planes to rule out intersections. - return box.max.x < this.min.x || box.min.x > this.max.x || box.max.y < this.min.y || box.min.y > this.max.y || box.max.z < this.min.z || box.min.z > this.max.z ? false : true; - } - - intersectsSphere(sphere) { - // Find the point on the AABB closest to the sphere center. - this.clampPoint(sphere.center, _vector$b); // If that point is inside the sphere, the AABB and sphere intersect. - - return _vector$b.distanceToSquared(sphere.center) <= sphere.radius * sphere.radius; - } - - intersectsPlane(plane) { - // We compute the minimum and maximum dot product values. If those values - // are on the same side (back or front) of the plane, then there is no intersection. - let min, max; - - if (plane.normal.x > 0) { - min = plane.normal.x * this.min.x; - max = plane.normal.x * this.max.x; - } else { - min = plane.normal.x * this.max.x; - max = plane.normal.x * this.min.x; - } - - if (plane.normal.y > 0) { - min += plane.normal.y * this.min.y; - max += plane.normal.y * this.max.y; - } else { - min += plane.normal.y * this.max.y; - max += plane.normal.y * this.min.y; - } - - if (plane.normal.z > 0) { - min += plane.normal.z * this.min.z; - max += plane.normal.z * this.max.z; - } else { - min += plane.normal.z * this.max.z; - max += plane.normal.z * this.min.z; - } - - return min <= -plane.constant && max >= -plane.constant; - } - - intersectsTriangle(triangle) { - if (this.isEmpty()) { - return false; - } // compute box center and extents - - - this.getCenter(_center); - - _extents.subVectors(this.max, _center); // translate triangle to aabb origin - - - _v0$2.subVectors(triangle.a, _center); - - _v1$7.subVectors(triangle.b, _center); - - _v2$3.subVectors(triangle.c, _center); // compute edge vectors for triangle - - - _f0.subVectors(_v1$7, _v0$2); - - _f1.subVectors(_v2$3, _v1$7); - - _f2.subVectors(_v0$2, _v2$3); // test against axes that are given by cross product combinations of the edges of the triangle and the edges of the aabb - // make an axis testing of each of the 3 sides of the aabb against each of the 3 sides of the triangle = 9 axis of separation - // axis_ij = u_i x f_j (u0, u1, u2 = face normals of aabb = x,y,z axes vectors since aabb is axis aligned) - - - let axes = [0, -_f0.z, _f0.y, 0, -_f1.z, _f1.y, 0, -_f2.z, _f2.y, _f0.z, 0, -_f0.x, _f1.z, 0, -_f1.x, _f2.z, 0, -_f2.x, -_f0.y, _f0.x, 0, -_f1.y, _f1.x, 0, -_f2.y, _f2.x, 0]; - - if (!satForAxes(axes, _v0$2, _v1$7, _v2$3, _extents)) { - return false; - } // test 3 face normals from the aabb - - - axes = [1, 0, 0, 0, 1, 0, 0, 0, 1]; - - if (!satForAxes(axes, _v0$2, _v1$7, _v2$3, _extents)) { - return false; - } // finally testing the face normal of the triangle - // use already existing triangle edge vectors here - - - _triangleNormal.crossVectors(_f0, _f1); - - axes = [_triangleNormal.x, _triangleNormal.y, _triangleNormal.z]; - return satForAxes(axes, _v0$2, _v1$7, _v2$3, _extents); - } - - clampPoint(point, target) { - return target.copy(point).clamp(this.min, this.max); - } - - distanceToPoint(point) { - const clampedPoint = _vector$b.copy(point).clamp(this.min, this.max); - - return clampedPoint.sub(point).length(); - } - - getBoundingSphere(target) { - this.getCenter(target.center); - target.radius = this.getSize(_vector$b).length() * 0.5; - return target; - } - - intersect(box) { - this.min.max(box.min); - this.max.min(box.max); // ensure that if there is no overlap, the result is fully empty, not slightly empty with non-inf/+inf values that will cause subsequence intersects to erroneously return valid values. - - if (this.isEmpty()) this.makeEmpty(); - return this; - } - - union(box) { - this.min.min(box.min); - this.max.max(box.max); - return this; - } - - applyMatrix4(matrix) { - // transform of empty box is an empty box. - if (this.isEmpty()) return this; // NOTE: I am using a binary pattern to specify all 2^3 combinations below - - _points[0].set(this.min.x, this.min.y, this.min.z).applyMatrix4(matrix); // 000 - - - _points[1].set(this.min.x, this.min.y, this.max.z).applyMatrix4(matrix); // 001 - - - _points[2].set(this.min.x, this.max.y, this.min.z).applyMatrix4(matrix); // 010 - - - _points[3].set(this.min.x, this.max.y, this.max.z).applyMatrix4(matrix); // 011 - - - _points[4].set(this.max.x, this.min.y, this.min.z).applyMatrix4(matrix); // 100 - - - _points[5].set(this.max.x, this.min.y, this.max.z).applyMatrix4(matrix); // 101 - - - _points[6].set(this.max.x, this.max.y, this.min.z).applyMatrix4(matrix); // 110 - - - _points[7].set(this.max.x, this.max.y, this.max.z).applyMatrix4(matrix); // 111 - - - this.setFromPoints(_points); - return this; - } - - translate(offset) { - this.min.add(offset); - this.max.add(offset); - return this; - } - - equals(box) { - return box.min.equals(this.min) && box.max.equals(this.max); - } - - } - - Box3.prototype.isBox3 = true; - const _points = [/*@__PURE__*/new Vector3(), /*@__PURE__*/new Vector3(), /*@__PURE__*/new Vector3(), /*@__PURE__*/new Vector3(), /*@__PURE__*/new Vector3(), /*@__PURE__*/new Vector3(), /*@__PURE__*/new Vector3(), /*@__PURE__*/new Vector3()]; - - const _vector$b = /*@__PURE__*/new Vector3(); - - const _box$3 = /*@__PURE__*/new Box3(); // triangle centered vertices - - - const _v0$2 = /*@__PURE__*/new Vector3(); - - const _v1$7 = /*@__PURE__*/new Vector3(); - - const _v2$3 = /*@__PURE__*/new Vector3(); // triangle edge vectors - - - const _f0 = /*@__PURE__*/new Vector3(); - - const _f1 = /*@__PURE__*/new Vector3(); - - const _f2 = /*@__PURE__*/new Vector3(); - - const _center = /*@__PURE__*/new Vector3(); - - const _extents = /*@__PURE__*/new Vector3(); - - const _triangleNormal = /*@__PURE__*/new Vector3(); - - const _testAxis = /*@__PURE__*/new Vector3(); - - function satForAxes(axes, v0, v1, v2, extents) { - for (let i = 0, j = axes.length - 3; i <= j; i += 3) { - _testAxis.fromArray(axes, i); // project the aabb onto the separating axis - - - const r = extents.x * Math.abs(_testAxis.x) + extents.y * Math.abs(_testAxis.y) + extents.z * Math.abs(_testAxis.z); // project all 3 vertices of the triangle onto the separating axis - - const p0 = v0.dot(_testAxis); - const p1 = v1.dot(_testAxis); - const p2 = v2.dot(_testAxis); // actual test, basically see if either of the most extreme of the triangle points intersects r - - if (Math.max(-Math.max(p0, p1, p2), Math.min(p0, p1, p2)) > r) { - // points of the projected triangle are outside the projected half-length of the aabb - // the axis is separating and we can exit - return false; - } - } - - return true; - } - - const _box$2 = /*@__PURE__*/new Box3(); - - const _v1$6 = /*@__PURE__*/new Vector3(); - - const _toFarthestPoint = /*@__PURE__*/new Vector3(); - - const _toPoint = /*@__PURE__*/new Vector3(); - - class Sphere { - constructor(center = new Vector3(), radius = -1) { - this.center = center; - this.radius = radius; - } - - set(center, radius) { - this.center.copy(center); - this.radius = radius; - return this; - } - - setFromPoints(points, optionalCenter) { - const center = this.center; - - if (optionalCenter !== undefined) { - center.copy(optionalCenter); - } else { - _box$2.setFromPoints(points).getCenter(center); - } - - let maxRadiusSq = 0; - - for (let i = 0, il = points.length; i < il; i++) { - maxRadiusSq = Math.max(maxRadiusSq, center.distanceToSquared(points[i])); - } - - this.radius = Math.sqrt(maxRadiusSq); - return this; - } - - copy(sphere) { - this.center.copy(sphere.center); - this.radius = sphere.radius; - return this; - } - - isEmpty() { - return this.radius < 0; - } - - makeEmpty() { - this.center.set(0, 0, 0); - this.radius = -1; - return this; - } - - containsPoint(point) { - return point.distanceToSquared(this.center) <= this.radius * this.radius; - } - - distanceToPoint(point) { - return point.distanceTo(this.center) - this.radius; - } - - intersectsSphere(sphere) { - const radiusSum = this.radius + sphere.radius; - return sphere.center.distanceToSquared(this.center) <= radiusSum * radiusSum; - } - - intersectsBox(box) { - return box.intersectsSphere(this); - } - - intersectsPlane(plane) { - return Math.abs(plane.distanceToPoint(this.center)) <= this.radius; - } - - clampPoint(point, target) { - const deltaLengthSq = this.center.distanceToSquared(point); - target.copy(point); - - if (deltaLengthSq > this.radius * this.radius) { - target.sub(this.center).normalize(); - target.multiplyScalar(this.radius).add(this.center); - } - - return target; - } - - getBoundingBox(target) { - if (this.isEmpty()) { - // Empty sphere produces empty bounding box - target.makeEmpty(); - return target; - } - - target.set(this.center, this.center); - target.expandByScalar(this.radius); - return target; - } - - applyMatrix4(matrix) { - this.center.applyMatrix4(matrix); - this.radius = this.radius * matrix.getMaxScaleOnAxis(); - return this; - } - - translate(offset) { - this.center.add(offset); - return this; - } - - expandByPoint(point) { - // from https://github.com/juj/MathGeoLib/blob/2940b99b99cfe575dd45103ef20f4019dee15b54/src/Geometry/Sphere.cpp#L649-L671 - _toPoint.subVectors(point, this.center); - - const lengthSq = _toPoint.lengthSq(); - - if (lengthSq > this.radius * this.radius) { - const length = Math.sqrt(lengthSq); - const missingRadiusHalf = (length - this.radius) * 0.5; // Nudge this sphere towards the target point. Add half the missing distance to radius, - // and the other half to position. This gives a tighter enclosure, instead of if - // the whole missing distance were just added to radius. - - this.center.add(_toPoint.multiplyScalar(missingRadiusHalf / length)); - this.radius += missingRadiusHalf; - } - - return this; - } - - union(sphere) { - // from https://github.com/juj/MathGeoLib/blob/2940b99b99cfe575dd45103ef20f4019dee15b54/src/Geometry/Sphere.cpp#L759-L769 - // To enclose another sphere into this sphere, we only need to enclose two points: - // 1) Enclose the farthest point on the other sphere into this sphere. - // 2) Enclose the opposite point of the farthest point into this sphere. - if (this.center.equals(sphere.center) === true) { - _toFarthestPoint.set(0, 0, 1).multiplyScalar(sphere.radius); - } else { - _toFarthestPoint.subVectors(sphere.center, this.center).normalize().multiplyScalar(sphere.radius); - } - - this.expandByPoint(_v1$6.copy(sphere.center).add(_toFarthestPoint)); - this.expandByPoint(_v1$6.copy(sphere.center).sub(_toFarthestPoint)); - return this; - } - - equals(sphere) { - return sphere.center.equals(this.center) && sphere.radius === this.radius; - } - - clone() { - return new this.constructor().copy(this); - } - - } - - const _vector$a = /*@__PURE__*/new Vector3(); - - const _segCenter = /*@__PURE__*/new Vector3(); - - const _segDir = /*@__PURE__*/new Vector3(); - - const _diff = /*@__PURE__*/new Vector3(); - - const _edge1 = /*@__PURE__*/new Vector3(); - - const _edge2 = /*@__PURE__*/new Vector3(); - - const _normal$1 = /*@__PURE__*/new Vector3(); - - class Ray { - constructor(origin = new Vector3(), direction = new Vector3(0, 0, -1)) { - this.origin = origin; - this.direction = direction; - } - - set(origin, direction) { - this.origin.copy(origin); - this.direction.copy(direction); - return this; - } - - copy(ray) { - this.origin.copy(ray.origin); - this.direction.copy(ray.direction); - return this; - } - - at(t, target) { - return target.copy(this.direction).multiplyScalar(t).add(this.origin); - } - - lookAt(v) { - this.direction.copy(v).sub(this.origin).normalize(); - return this; - } - - recast(t) { - this.origin.copy(this.at(t, _vector$a)); - return this; - } - - closestPointToPoint(point, target) { - target.subVectors(point, this.origin); - const directionDistance = target.dot(this.direction); - - if (directionDistance < 0) { - return target.copy(this.origin); - } - - return target.copy(this.direction).multiplyScalar(directionDistance).add(this.origin); - } - - distanceToPoint(point) { - return Math.sqrt(this.distanceSqToPoint(point)); - } - - distanceSqToPoint(point) { - const directionDistance = _vector$a.subVectors(point, this.origin).dot(this.direction); // point behind the ray - - - if (directionDistance < 0) { - return this.origin.distanceToSquared(point); - } - - _vector$a.copy(this.direction).multiplyScalar(directionDistance).add(this.origin); - - return _vector$a.distanceToSquared(point); - } - - distanceSqToSegment(v0, v1, optionalPointOnRay, optionalPointOnSegment) { - // from https://github.com/pmjoniak/GeometricTools/blob/master/GTEngine/Include/Mathematics/GteDistRaySegment.h - // It returns the min distance between the ray and the segment - // defined by v0 and v1 - // It can also set two optional targets : - // - The closest point on the ray - // - The closest point on the segment - _segCenter.copy(v0).add(v1).multiplyScalar(0.5); - - _segDir.copy(v1).sub(v0).normalize(); - - _diff.copy(this.origin).sub(_segCenter); - - const segExtent = v0.distanceTo(v1) * 0.5; - const a01 = -this.direction.dot(_segDir); - - const b0 = _diff.dot(this.direction); - - const b1 = -_diff.dot(_segDir); - - const c = _diff.lengthSq(); - - const det = Math.abs(1 - a01 * a01); - let s0, s1, sqrDist, extDet; - - if (det > 0) { - // The ray and segment are not parallel. - s0 = a01 * b1 - b0; - s1 = a01 * b0 - b1; - extDet = segExtent * det; - - if (s0 >= 0) { - if (s1 >= -extDet) { - if (s1 <= extDet) { - // region 0 - // Minimum at interior points of ray and segment. - const invDet = 1 / det; - s0 *= invDet; - s1 *= invDet; - sqrDist = s0 * (s0 + a01 * s1 + 2 * b0) + s1 * (a01 * s0 + s1 + 2 * b1) + c; - } else { - // region 1 - s1 = segExtent; - s0 = Math.max(0, -(a01 * s1 + b0)); - sqrDist = -s0 * s0 + s1 * (s1 + 2 * b1) + c; - } - } else { - // region 5 - s1 = -segExtent; - s0 = Math.max(0, -(a01 * s1 + b0)); - sqrDist = -s0 * s0 + s1 * (s1 + 2 * b1) + c; - } - } else { - if (s1 <= -extDet) { - // region 4 - s0 = Math.max(0, -(-a01 * segExtent + b0)); - s1 = s0 > 0 ? -segExtent : Math.min(Math.max(-segExtent, -b1), segExtent); - sqrDist = -s0 * s0 + s1 * (s1 + 2 * b1) + c; - } else if (s1 <= extDet) { - // region 3 - s0 = 0; - s1 = Math.min(Math.max(-segExtent, -b1), segExtent); - sqrDist = s1 * (s1 + 2 * b1) + c; - } else { - // region 2 - s0 = Math.max(0, -(a01 * segExtent + b0)); - s1 = s0 > 0 ? segExtent : Math.min(Math.max(-segExtent, -b1), segExtent); - sqrDist = -s0 * s0 + s1 * (s1 + 2 * b1) + c; - } - } - } else { - // Ray and segment are parallel. - s1 = a01 > 0 ? -segExtent : segExtent; - s0 = Math.max(0, -(a01 * s1 + b0)); - sqrDist = -s0 * s0 + s1 * (s1 + 2 * b1) + c; - } - - if (optionalPointOnRay) { - optionalPointOnRay.copy(this.direction).multiplyScalar(s0).add(this.origin); - } - - if (optionalPointOnSegment) { - optionalPointOnSegment.copy(_segDir).multiplyScalar(s1).add(_segCenter); - } - - return sqrDist; - } - - intersectSphere(sphere, target) { - _vector$a.subVectors(sphere.center, this.origin); - - const tca = _vector$a.dot(this.direction); - - const d2 = _vector$a.dot(_vector$a) - tca * tca; - const radius2 = sphere.radius * sphere.radius; - if (d2 > radius2) return null; - const thc = Math.sqrt(radius2 - d2); // t0 = first intersect point - entrance on front of sphere - - const t0 = tca - thc; // t1 = second intersect point - exit point on back of sphere - - const t1 = tca + thc; // test to see if both t0 and t1 are behind the ray - if so, return null - - if (t0 < 0 && t1 < 0) return null; // test to see if t0 is behind the ray: - // if it is, the ray is inside the sphere, so return the second exit point scaled by t1, - // in order to always return an intersect point that is in front of the ray. - - if (t0 < 0) return this.at(t1, target); // else t0 is in front of the ray, so return the first collision point scaled by t0 - - return this.at(t0, target); - } - - intersectsSphere(sphere) { - return this.distanceSqToPoint(sphere.center) <= sphere.radius * sphere.radius; - } - - distanceToPlane(plane) { - const denominator = plane.normal.dot(this.direction); - - if (denominator === 0) { - // line is coplanar, return origin - if (plane.distanceToPoint(this.origin) === 0) { - return 0; - } // Null is preferable to undefined since undefined means.... it is undefined - - - return null; - } - - const t = -(this.origin.dot(plane.normal) + plane.constant) / denominator; // Return if the ray never intersects the plane - - return t >= 0 ? t : null; - } - - intersectPlane(plane, target) { - const t = this.distanceToPlane(plane); - - if (t === null) { - return null; - } - - return this.at(t, target); - } - - intersectsPlane(plane) { - // check if the ray lies on the plane first - const distToPoint = plane.distanceToPoint(this.origin); - - if (distToPoint === 0) { - return true; - } - - const denominator = plane.normal.dot(this.direction); - - if (denominator * distToPoint < 0) { - return true; - } // ray origin is behind the plane (and is pointing behind it) - - - return false; - } - - intersectBox(box, target) { - let tmin, tmax, tymin, tymax, tzmin, tzmax; - const invdirx = 1 / this.direction.x, - invdiry = 1 / this.direction.y, - invdirz = 1 / this.direction.z; - const origin = this.origin; - - if (invdirx >= 0) { - tmin = (box.min.x - origin.x) * invdirx; - tmax = (box.max.x - origin.x) * invdirx; - } else { - tmin = (box.max.x - origin.x) * invdirx; - tmax = (box.min.x - origin.x) * invdirx; - } - - if (invdiry >= 0) { - tymin = (box.min.y - origin.y) * invdiry; - tymax = (box.max.y - origin.y) * invdiry; - } else { - tymin = (box.max.y - origin.y) * invdiry; - tymax = (box.min.y - origin.y) * invdiry; - } - - if (tmin > tymax || tymin > tmax) return null; // These lines also handle the case where tmin or tmax is NaN - // (result of 0 * Infinity). x !== x returns true if x is NaN - - if (tymin > tmin || tmin !== tmin) tmin = tymin; - if (tymax < tmax || tmax !== tmax) tmax = tymax; - - if (invdirz >= 0) { - tzmin = (box.min.z - origin.z) * invdirz; - tzmax = (box.max.z - origin.z) * invdirz; - } else { - tzmin = (box.max.z - origin.z) * invdirz; - tzmax = (box.min.z - origin.z) * invdirz; - } - - if (tmin > tzmax || tzmin > tmax) return null; - if (tzmin > tmin || tmin !== tmin) tmin = tzmin; - if (tzmax < tmax || tmax !== tmax) tmax = tzmax; //return point closest to the ray (positive side) - - if (tmax < 0) return null; - return this.at(tmin >= 0 ? tmin : tmax, target); - } - - intersectsBox(box) { - return this.intersectBox(box, _vector$a) !== null; - } - - intersectTriangle(a, b, c, backfaceCulling, target) { - // Compute the offset origin, edges, and normal. - // from https://github.com/pmjoniak/GeometricTools/blob/master/GTEngine/Include/Mathematics/GteIntrRay3Triangle3.h - _edge1.subVectors(b, a); - - _edge2.subVectors(c, a); - - _normal$1.crossVectors(_edge1, _edge2); // Solve Q + t*D = b1*E1 + b2*E2 (Q = kDiff, D = ray direction, - // E1 = kEdge1, E2 = kEdge2, N = Cross(E1,E2)) by - // |Dot(D,N)|*b1 = sign(Dot(D,N))*Dot(D,Cross(Q,E2)) - // |Dot(D,N)|*b2 = sign(Dot(D,N))*Dot(D,Cross(E1,Q)) - // |Dot(D,N)|*t = -sign(Dot(D,N))*Dot(Q,N) - - - let DdN = this.direction.dot(_normal$1); - let sign; - - if (DdN > 0) { - if (backfaceCulling) return null; - sign = 1; - } else if (DdN < 0) { - sign = -1; - DdN = -DdN; - } else { - return null; - } - - _diff.subVectors(this.origin, a); - - const DdQxE2 = sign * this.direction.dot(_edge2.crossVectors(_diff, _edge2)); // b1 < 0, no intersection - - if (DdQxE2 < 0) { - return null; - } - - const DdE1xQ = sign * this.direction.dot(_edge1.cross(_diff)); // b2 < 0, no intersection - - if (DdE1xQ < 0) { - return null; - } // b1+b2 > 1, no intersection - - - if (DdQxE2 + DdE1xQ > DdN) { - return null; - } // Line intersects triangle, check if ray does. - - - const QdN = -sign * _diff.dot(_normal$1); // t < 0, no intersection - - - if (QdN < 0) { - return null; - } // Ray intersects triangle. - - - return this.at(QdN / DdN, target); - } - - applyMatrix4(matrix4) { - this.origin.applyMatrix4(matrix4); - this.direction.transformDirection(matrix4); - return this; - } - - equals(ray) { - return ray.origin.equals(this.origin) && ray.direction.equals(this.direction); - } - - clone() { - return new this.constructor().copy(this); - } - - } - - class Matrix4 { - constructor() { - this.elements = [1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1]; - - if (arguments.length > 0) { - console.error('THREE.Matrix4: the constructor no longer reads arguments. use .set() instead.'); - } - } - - set(n11, n12, n13, n14, n21, n22, n23, n24, n31, n32, n33, n34, n41, n42, n43, n44) { - const te = this.elements; - te[0] = n11; - te[4] = n12; - te[8] = n13; - te[12] = n14; - te[1] = n21; - te[5] = n22; - te[9] = n23; - te[13] = n24; - te[2] = n31; - te[6] = n32; - te[10] = n33; - te[14] = n34; - te[3] = n41; - te[7] = n42; - te[11] = n43; - te[15] = n44; - return this; - } - - identity() { - this.set(1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1); - return this; - } - - clone() { - return new Matrix4().fromArray(this.elements); - } - - copy(m) { - const te = this.elements; - const me = m.elements; - te[0] = me[0]; - te[1] = me[1]; - te[2] = me[2]; - te[3] = me[3]; - te[4] = me[4]; - te[5] = me[5]; - te[6] = me[6]; - te[7] = me[7]; - te[8] = me[8]; - te[9] = me[9]; - te[10] = me[10]; - te[11] = me[11]; - te[12] = me[12]; - te[13] = me[13]; - te[14] = me[14]; - te[15] = me[15]; - return this; - } - - copyPosition(m) { - const te = this.elements, - me = m.elements; - te[12] = me[12]; - te[13] = me[13]; - te[14] = me[14]; - return this; - } - - setFromMatrix3(m) { - const me = m.elements; - this.set(me[0], me[3], me[6], 0, me[1], me[4], me[7], 0, me[2], me[5], me[8], 0, 0, 0, 0, 1); - return this; - } - - extractBasis(xAxis, yAxis, zAxis) { - xAxis.setFromMatrixColumn(this, 0); - yAxis.setFromMatrixColumn(this, 1); - zAxis.setFromMatrixColumn(this, 2); - return this; - } - - makeBasis(xAxis, yAxis, zAxis) { - this.set(xAxis.x, yAxis.x, zAxis.x, 0, xAxis.y, yAxis.y, zAxis.y, 0, xAxis.z, yAxis.z, zAxis.z, 0, 0, 0, 0, 1); - return this; - } - - extractRotation(m) { - // this method does not support reflection matrices - const te = this.elements; - const me = m.elements; - - const scaleX = 1 / _v1$5.setFromMatrixColumn(m, 0).length(); - - const scaleY = 1 / _v1$5.setFromMatrixColumn(m, 1).length(); - - const scaleZ = 1 / _v1$5.setFromMatrixColumn(m, 2).length(); - - te[0] = me[0] * scaleX; - te[1] = me[1] * scaleX; - te[2] = me[2] * scaleX; - te[3] = 0; - te[4] = me[4] * scaleY; - te[5] = me[5] * scaleY; - te[6] = me[6] * scaleY; - te[7] = 0; - te[8] = me[8] * scaleZ; - te[9] = me[9] * scaleZ; - te[10] = me[10] * scaleZ; - te[11] = 0; - te[12] = 0; - te[13] = 0; - te[14] = 0; - te[15] = 1; - return this; - } - - makeRotationFromEuler(euler) { - if (!(euler && euler.isEuler)) { - console.error('THREE.Matrix4: .makeRotationFromEuler() now expects a Euler rotation rather than a Vector3 and order.'); - } - - const te = this.elements; - const x = euler.x, - y = euler.y, - z = euler.z; - const a = Math.cos(x), - b = Math.sin(x); - const c = Math.cos(y), - d = Math.sin(y); - const e = Math.cos(z), - f = Math.sin(z); - - if (euler.order === 'XYZ') { - const ae = a * e, - af = a * f, - be = b * e, - bf = b * f; - te[0] = c * e; - te[4] = -c * f; - te[8] = d; - te[1] = af + be * d; - te[5] = ae - bf * d; - te[9] = -b * c; - te[2] = bf - ae * d; - te[6] = be + af * d; - te[10] = a * c; - } else if (euler.order === 'YXZ') { - const ce = c * e, - cf = c * f, - de = d * e, - df = d * f; - te[0] = ce + df * b; - te[4] = de * b - cf; - te[8] = a * d; - te[1] = a * f; - te[5] = a * e; - te[9] = -b; - te[2] = cf * b - de; - te[6] = df + ce * b; - te[10] = a * c; - } else if (euler.order === 'ZXY') { - const ce = c * e, - cf = c * f, - de = d * e, - df = d * f; - te[0] = ce - df * b; - te[4] = -a * f; - te[8] = de + cf * b; - te[1] = cf + de * b; - te[5] = a * e; - te[9] = df - ce * b; - te[2] = -a * d; - te[6] = b; - te[10] = a * c; - } else if (euler.order === 'ZYX') { - const ae = a * e, - af = a * f, - be = b * e, - bf = b * f; - te[0] = c * e; - te[4] = be * d - af; - te[8] = ae * d + bf; - te[1] = c * f; - te[5] = bf * d + ae; - te[9] = af * d - be; - te[2] = -d; - te[6] = b * c; - te[10] = a * c; - } else if (euler.order === 'YZX') { - const ac = a * c, - ad = a * d, - bc = b * c, - bd = b * d; - te[0] = c * e; - te[4] = bd - ac * f; - te[8] = bc * f + ad; - te[1] = f; - te[5] = a * e; - te[9] = -b * e; - te[2] = -d * e; - te[6] = ad * f + bc; - te[10] = ac - bd * f; - } else if (euler.order === 'XZY') { - const ac = a * c, - ad = a * d, - bc = b * c, - bd = b * d; - te[0] = c * e; - te[4] = -f; - te[8] = d * e; - te[1] = ac * f + bd; - te[5] = a * e; - te[9] = ad * f - bc; - te[2] = bc * f - ad; - te[6] = b * e; - te[10] = bd * f + ac; - } // bottom row - - - te[3] = 0; - te[7] = 0; - te[11] = 0; // last column - - te[12] = 0; - te[13] = 0; - te[14] = 0; - te[15] = 1; - return this; - } - - makeRotationFromQuaternion(q) { - return this.compose(_zero, q, _one); - } - - lookAt(eye, target, up) { - const te = this.elements; - - _z.subVectors(eye, target); - - if (_z.lengthSq() === 0) { - // eye and target are in the same position - _z.z = 1; - } - - _z.normalize(); - - _x.crossVectors(up, _z); - - if (_x.lengthSq() === 0) { - // up and z are parallel - if (Math.abs(up.z) === 1) { - _z.x += 0.0001; - } else { - _z.z += 0.0001; - } - - _z.normalize(); - - _x.crossVectors(up, _z); - } - - _x.normalize(); - - _y.crossVectors(_z, _x); - - te[0] = _x.x; - te[4] = _y.x; - te[8] = _z.x; - te[1] = _x.y; - te[5] = _y.y; - te[9] = _z.y; - te[2] = _x.z; - te[6] = _y.z; - te[10] = _z.z; - return this; - } - - multiply(m, n) { - if (n !== undefined) { - console.warn('THREE.Matrix4: .multiply() now only accepts one argument. Use .multiplyMatrices( a, b ) instead.'); - return this.multiplyMatrices(m, n); - } - - return this.multiplyMatrices(this, m); - } - - premultiply(m) { - return this.multiplyMatrices(m, this); - } - - multiplyMatrices(a, b) { - const ae = a.elements; - const be = b.elements; - const te = this.elements; - const a11 = ae[0], - a12 = ae[4], - a13 = ae[8], - a14 = ae[12]; - const a21 = ae[1], - a22 = ae[5], - a23 = ae[9], - a24 = ae[13]; - const a31 = ae[2], - a32 = ae[6], - a33 = ae[10], - a34 = ae[14]; - const a41 = ae[3], - a42 = ae[7], - a43 = ae[11], - a44 = ae[15]; - const b11 = be[0], - b12 = be[4], - b13 = be[8], - b14 = be[12]; - const b21 = be[1], - b22 = be[5], - b23 = be[9], - b24 = be[13]; - const b31 = be[2], - b32 = be[6], - b33 = be[10], - b34 = be[14]; - const b41 = be[3], - b42 = be[7], - b43 = be[11], - b44 = be[15]; - te[0] = a11 * b11 + a12 * b21 + a13 * b31 + a14 * b41; - te[4] = a11 * b12 + a12 * b22 + a13 * b32 + a14 * b42; - te[8] = a11 * b13 + a12 * b23 + a13 * b33 + a14 * b43; - te[12] = a11 * b14 + a12 * b24 + a13 * b34 + a14 * b44; - te[1] = a21 * b11 + a22 * b21 + a23 * b31 + a24 * b41; - te[5] = a21 * b12 + a22 * b22 + a23 * b32 + a24 * b42; - te[9] = a21 * b13 + a22 * b23 + a23 * b33 + a24 * b43; - te[13] = a21 * b14 + a22 * b24 + a23 * b34 + a24 * b44; - te[2] = a31 * b11 + a32 * b21 + a33 * b31 + a34 * b41; - te[6] = a31 * b12 + a32 * b22 + a33 * b32 + a34 * b42; - te[10] = a31 * b13 + a32 * b23 + a33 * b33 + a34 * b43; - te[14] = a31 * b14 + a32 * b24 + a33 * b34 + a34 * b44; - te[3] = a41 * b11 + a42 * b21 + a43 * b31 + a44 * b41; - te[7] = a41 * b12 + a42 * b22 + a43 * b32 + a44 * b42; - te[11] = a41 * b13 + a42 * b23 + a43 * b33 + a44 * b43; - te[15] = a41 * b14 + a42 * b24 + a43 * b34 + a44 * b44; - return this; - } - - multiplyScalar(s) { - const te = this.elements; - te[0] *= s; - te[4] *= s; - te[8] *= s; - te[12] *= s; - te[1] *= s; - te[5] *= s; - te[9] *= s; - te[13] *= s; - te[2] *= s; - te[6] *= s; - te[10] *= s; - te[14] *= s; - te[3] *= s; - te[7] *= s; - te[11] *= s; - te[15] *= s; - return this; - } - - determinant() { - const te = this.elements; - const n11 = te[0], - n12 = te[4], - n13 = te[8], - n14 = te[12]; - const n21 = te[1], - n22 = te[5], - n23 = te[9], - n24 = te[13]; - const n31 = te[2], - n32 = te[6], - n33 = te[10], - n34 = te[14]; - const n41 = te[3], - n42 = te[7], - n43 = te[11], - n44 = te[15]; //TODO: make this more efficient - //( based on http://www.euclideanspace.com/maths/algebra/matrix/functions/inverse/fourD/index.htm ) - - return n41 * (+n14 * n23 * n32 - n13 * n24 * n32 - n14 * n22 * n33 + n12 * n24 * n33 + n13 * n22 * n34 - n12 * n23 * n34) + n42 * (+n11 * n23 * n34 - n11 * n24 * n33 + n14 * n21 * n33 - n13 * n21 * n34 + n13 * n24 * n31 - n14 * n23 * n31) + n43 * (+n11 * n24 * n32 - n11 * n22 * n34 - n14 * n21 * n32 + n12 * n21 * n34 + n14 * n22 * n31 - n12 * n24 * n31) + n44 * (-n13 * n22 * n31 - n11 * n23 * n32 + n11 * n22 * n33 + n13 * n21 * n32 - n12 * n21 * n33 + n12 * n23 * n31); - } - - transpose() { - const te = this.elements; - let tmp; - tmp = te[1]; - te[1] = te[4]; - te[4] = tmp; - tmp = te[2]; - te[2] = te[8]; - te[8] = tmp; - tmp = te[6]; - te[6] = te[9]; - te[9] = tmp; - tmp = te[3]; - te[3] = te[12]; - te[12] = tmp; - tmp = te[7]; - te[7] = te[13]; - te[13] = tmp; - tmp = te[11]; - te[11] = te[14]; - te[14] = tmp; - return this; - } - - setPosition(x, y, z) { - const te = this.elements; - - if (x.isVector3) { - te[12] = x.x; - te[13] = x.y; - te[14] = x.z; - } else { - te[12] = x; - te[13] = y; - te[14] = z; - } - - return this; - } - - invert() { - // based on http://www.euclideanspace.com/maths/algebra/matrix/functions/inverse/fourD/index.htm - const te = this.elements, - n11 = te[0], - n21 = te[1], - n31 = te[2], - n41 = te[3], - n12 = te[4], - n22 = te[5], - n32 = te[6], - n42 = te[7], - n13 = te[8], - n23 = te[9], - n33 = te[10], - n43 = te[11], - n14 = te[12], - n24 = te[13], - n34 = te[14], - n44 = te[15], - t11 = n23 * n34 * n42 - n24 * n33 * n42 + n24 * n32 * n43 - n22 * n34 * n43 - n23 * n32 * n44 + n22 * n33 * n44, - t12 = n14 * n33 * n42 - n13 * n34 * n42 - n14 * n32 * n43 + n12 * n34 * n43 + n13 * n32 * n44 - n12 * n33 * n44, - t13 = n13 * n24 * n42 - n14 * n23 * n42 + n14 * n22 * n43 - n12 * n24 * n43 - n13 * n22 * n44 + n12 * n23 * n44, - t14 = n14 * n23 * n32 - n13 * n24 * n32 - n14 * n22 * n33 + n12 * n24 * n33 + n13 * n22 * n34 - n12 * n23 * n34; - const det = n11 * t11 + n21 * t12 + n31 * t13 + n41 * t14; - if (det === 0) return this.set(0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0); - const detInv = 1 / det; - te[0] = t11 * detInv; - te[1] = (n24 * n33 * n41 - n23 * n34 * n41 - n24 * n31 * n43 + n21 * n34 * n43 + n23 * n31 * n44 - n21 * n33 * n44) * detInv; - te[2] = (n22 * n34 * n41 - n24 * n32 * n41 + n24 * n31 * n42 - n21 * n34 * n42 - n22 * n31 * n44 + n21 * n32 * n44) * detInv; - te[3] = (n23 * n32 * n41 - n22 * n33 * n41 - n23 * n31 * n42 + n21 * n33 * n42 + n22 * n31 * n43 - n21 * n32 * n43) * detInv; - te[4] = t12 * detInv; - te[5] = (n13 * n34 * n41 - n14 * n33 * n41 + n14 * n31 * n43 - n11 * n34 * n43 - n13 * n31 * n44 + n11 * n33 * n44) * detInv; - te[6] = (n14 * n32 * n41 - n12 * n34 * n41 - n14 * n31 * n42 + n11 * n34 * n42 + n12 * n31 * n44 - n11 * n32 * n44) * detInv; - te[7] = (n12 * n33 * n41 - n13 * n32 * n41 + n13 * n31 * n42 - n11 * n33 * n42 - n12 * n31 * n43 + n11 * n32 * n43) * detInv; - te[8] = t13 * detInv; - te[9] = (n14 * n23 * n41 - n13 * n24 * n41 - n14 * n21 * n43 + n11 * n24 * n43 + n13 * n21 * n44 - n11 * n23 * n44) * detInv; - te[10] = (n12 * n24 * n41 - n14 * n22 * n41 + n14 * n21 * n42 - n11 * n24 * n42 - n12 * n21 * n44 + n11 * n22 * n44) * detInv; - te[11] = (n13 * n22 * n41 - n12 * n23 * n41 - n13 * n21 * n42 + n11 * n23 * n42 + n12 * n21 * n43 - n11 * n22 * n43) * detInv; - te[12] = t14 * detInv; - te[13] = (n13 * n24 * n31 - n14 * n23 * n31 + n14 * n21 * n33 - n11 * n24 * n33 - n13 * n21 * n34 + n11 * n23 * n34) * detInv; - te[14] = (n14 * n22 * n31 - n12 * n24 * n31 - n14 * n21 * n32 + n11 * n24 * n32 + n12 * n21 * n34 - n11 * n22 * n34) * detInv; - te[15] = (n12 * n23 * n31 - n13 * n22 * n31 + n13 * n21 * n32 - n11 * n23 * n32 - n12 * n21 * n33 + n11 * n22 * n33) * detInv; - return this; - } - - scale(v) { - const te = this.elements; - const x = v.x, - y = v.y, - z = v.z; - te[0] *= x; - te[4] *= y; - te[8] *= z; - te[1] *= x; - te[5] *= y; - te[9] *= z; - te[2] *= x; - te[6] *= y; - te[10] *= z; - te[3] *= x; - te[7] *= y; - te[11] *= z; - return this; - } - - getMaxScaleOnAxis() { - const te = this.elements; - const scaleXSq = te[0] * te[0] + te[1] * te[1] + te[2] * te[2]; - const scaleYSq = te[4] * te[4] + te[5] * te[5] + te[6] * te[6]; - const scaleZSq = te[8] * te[8] + te[9] * te[9] + te[10] * te[10]; - return Math.sqrt(Math.max(scaleXSq, scaleYSq, scaleZSq)); - } - - makeTranslation(x, y, z) { - this.set(1, 0, 0, x, 0, 1, 0, y, 0, 0, 1, z, 0, 0, 0, 1); - return this; - } - - makeRotationX(theta) { - const c = Math.cos(theta), - s = Math.sin(theta); - this.set(1, 0, 0, 0, 0, c, -s, 0, 0, s, c, 0, 0, 0, 0, 1); - return this; - } - - makeRotationY(theta) { - const c = Math.cos(theta), - s = Math.sin(theta); - this.set(c, 0, s, 0, 0, 1, 0, 0, -s, 0, c, 0, 0, 0, 0, 1); - return this; - } - - makeRotationZ(theta) { - const c = Math.cos(theta), - s = Math.sin(theta); - this.set(c, -s, 0, 0, s, c, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1); - return this; - } - - makeRotationAxis(axis, angle) { - // Based on http://www.gamedev.net/reference/articles/article1199.asp - const c = Math.cos(angle); - const s = Math.sin(angle); - const t = 1 - c; - const x = axis.x, - y = axis.y, - z = axis.z; - const tx = t * x, - ty = t * y; - this.set(tx * x + c, tx * y - s * z, tx * z + s * y, 0, tx * y + s * z, ty * y + c, ty * z - s * x, 0, tx * z - s * y, ty * z + s * x, t * z * z + c, 0, 0, 0, 0, 1); - return this; - } - - makeScale(x, y, z) { - this.set(x, 0, 0, 0, 0, y, 0, 0, 0, 0, z, 0, 0, 0, 0, 1); - return this; - } - - makeShear(xy, xz, yx, yz, zx, zy) { - this.set(1, yx, zx, 0, xy, 1, zy, 0, xz, yz, 1, 0, 0, 0, 0, 1); - return this; - } - - compose(position, quaternion, scale) { - const te = this.elements; - const x = quaternion._x, - y = quaternion._y, - z = quaternion._z, - w = quaternion._w; - const x2 = x + x, - y2 = y + y, - z2 = z + z; - const xx = x * x2, - xy = x * y2, - xz = x * z2; - const yy = y * y2, - yz = y * z2, - zz = z * z2; - const wx = w * x2, - wy = w * y2, - wz = w * z2; - const sx = scale.x, - sy = scale.y, - sz = scale.z; - te[0] = (1 - (yy + zz)) * sx; - te[1] = (xy + wz) * sx; - te[2] = (xz - wy) * sx; - te[3] = 0; - te[4] = (xy - wz) * sy; - te[5] = (1 - (xx + zz)) * sy; - te[6] = (yz + wx) * sy; - te[7] = 0; - te[8] = (xz + wy) * sz; - te[9] = (yz - wx) * sz; - te[10] = (1 - (xx + yy)) * sz; - te[11] = 0; - te[12] = position.x; - te[13] = position.y; - te[14] = position.z; - te[15] = 1; - return this; - } - - decompose(position, quaternion, scale) { - const te = this.elements; - - let sx = _v1$5.set(te[0], te[1], te[2]).length(); - - const sy = _v1$5.set(te[4], te[5], te[6]).length(); - - const sz = _v1$5.set(te[8], te[9], te[10]).length(); // if determine is negative, we need to invert one scale - - - const det = this.determinant(); - if (det < 0) sx = -sx; - position.x = te[12]; - position.y = te[13]; - position.z = te[14]; // scale the rotation part - - _m1$2.copy(this); - - const invSX = 1 / sx; - const invSY = 1 / sy; - const invSZ = 1 / sz; - _m1$2.elements[0] *= invSX; - _m1$2.elements[1] *= invSX; - _m1$2.elements[2] *= invSX; - _m1$2.elements[4] *= invSY; - _m1$2.elements[5] *= invSY; - _m1$2.elements[6] *= invSY; - _m1$2.elements[8] *= invSZ; - _m1$2.elements[9] *= invSZ; - _m1$2.elements[10] *= invSZ; - quaternion.setFromRotationMatrix(_m1$2); - scale.x = sx; - scale.y = sy; - scale.z = sz; - return this; - } - - makePerspective(left, right, top, bottom, near, far) { - if (far === undefined) { - console.warn('THREE.Matrix4: .makePerspective() has been redefined and has a new signature. Please check the docs.'); - } - - const te = this.elements; - const x = 2 * near / (right - left); - const y = 2 * near / (top - bottom); - const a = (right + left) / (right - left); - const b = (top + bottom) / (top - bottom); - const c = -(far + near) / (far - near); - const d = -2 * far * near / (far - near); - te[0] = x; - te[4] = 0; - te[8] = a; - te[12] = 0; - te[1] = 0; - te[5] = y; - te[9] = b; - te[13] = 0; - te[2] = 0; - te[6] = 0; - te[10] = c; - te[14] = d; - te[3] = 0; - te[7] = 0; - te[11] = -1; - te[15] = 0; - return this; - } - - makeOrthographic(left, right, top, bottom, near, far) { - const te = this.elements; - const w = 1.0 / (right - left); - const h = 1.0 / (top - bottom); - const p = 1.0 / (far - near); - const x = (right + left) * w; - const y = (top + bottom) * h; - const z = (far + near) * p; - te[0] = 2 * w; - te[4] = 0; - te[8] = 0; - te[12] = -x; - te[1] = 0; - te[5] = 2 * h; - te[9] = 0; - te[13] = -y; - te[2] = 0; - te[6] = 0; - te[10] = -2 * p; - te[14] = -z; - te[3] = 0; - te[7] = 0; - te[11] = 0; - te[15] = 1; - return this; - } - - equals(matrix) { - const te = this.elements; - const me = matrix.elements; - - for (let i = 0; i < 16; i++) { - if (te[i] !== me[i]) return false; - } - - return true; - } - - fromArray(array, offset = 0) { - for (let i = 0; i < 16; i++) { - this.elements[i] = array[i + offset]; - } - - return this; - } - - toArray(array = [], offset = 0) { - const te = this.elements; - array[offset] = te[0]; - array[offset + 1] = te[1]; - array[offset + 2] = te[2]; - array[offset + 3] = te[3]; - array[offset + 4] = te[4]; - array[offset + 5] = te[5]; - array[offset + 6] = te[6]; - array[offset + 7] = te[7]; - array[offset + 8] = te[8]; - array[offset + 9] = te[9]; - array[offset + 10] = te[10]; - array[offset + 11] = te[11]; - array[offset + 12] = te[12]; - array[offset + 13] = te[13]; - array[offset + 14] = te[14]; - array[offset + 15] = te[15]; - return array; - } - - } - - Matrix4.prototype.isMatrix4 = true; - - const _v1$5 = /*@__PURE__*/new Vector3(); - - const _m1$2 = /*@__PURE__*/new Matrix4(); - - const _zero = /*@__PURE__*/new Vector3(0, 0, 0); - - const _one = /*@__PURE__*/new Vector3(1, 1, 1); - - const _x = /*@__PURE__*/new Vector3(); - - const _y = /*@__PURE__*/new Vector3(); - - const _z = /*@__PURE__*/new Vector3(); - - const _matrix$1 = /*@__PURE__*/new Matrix4(); - - const _quaternion$3 = /*@__PURE__*/new Quaternion(); - - class Euler { - constructor(x = 0, y = 0, z = 0, order = Euler.DefaultOrder) { - this._x = x; - this._y = y; - this._z = z; - this._order = order; - } - - get x() { - return this._x; - } - - set x(value) { - this._x = value; - - this._onChangeCallback(); - } - - get y() { - return this._y; - } - - set y(value) { - this._y = value; - - this._onChangeCallback(); - } - - get z() { - return this._z; - } - - set z(value) { - this._z = value; - - this._onChangeCallback(); - } - - get order() { - return this._order; - } - - set order(value) { - this._order = value; - - this._onChangeCallback(); - } - - set(x, y, z, order = this._order) { - this._x = x; - this._y = y; - this._z = z; - this._order = order; - - this._onChangeCallback(); - - return this; - } - - clone() { - return new this.constructor(this._x, this._y, this._z, this._order); - } - - copy(euler) { - this._x = euler._x; - this._y = euler._y; - this._z = euler._z; - this._order = euler._order; - - this._onChangeCallback(); - - return this; - } - - setFromRotationMatrix(m, order = this._order, update = true) { - // assumes the upper 3x3 of m is a pure rotation matrix (i.e, unscaled) - const te = m.elements; - const m11 = te[0], - m12 = te[4], - m13 = te[8]; - const m21 = te[1], - m22 = te[5], - m23 = te[9]; - const m31 = te[2], - m32 = te[6], - m33 = te[10]; - - switch (order) { - case 'XYZ': - this._y = Math.asin(clamp(m13, -1, 1)); - - if (Math.abs(m13) < 0.9999999) { - this._x = Math.atan2(-m23, m33); - this._z = Math.atan2(-m12, m11); - } else { - this._x = Math.atan2(m32, m22); - this._z = 0; - } - - break; - - case 'YXZ': - this._x = Math.asin(-clamp(m23, -1, 1)); - - if (Math.abs(m23) < 0.9999999) { - this._y = Math.atan2(m13, m33); - this._z = Math.atan2(m21, m22); - } else { - this._y = Math.atan2(-m31, m11); - this._z = 0; - } - - break; - - case 'ZXY': - this._x = Math.asin(clamp(m32, -1, 1)); - - if (Math.abs(m32) < 0.9999999) { - this._y = Math.atan2(-m31, m33); - this._z = Math.atan2(-m12, m22); - } else { - this._y = 0; - this._z = Math.atan2(m21, m11); - } - - break; - - case 'ZYX': - this._y = Math.asin(-clamp(m31, -1, 1)); - - if (Math.abs(m31) < 0.9999999) { - this._x = Math.atan2(m32, m33); - this._z = Math.atan2(m21, m11); - } else { - this._x = 0; - this._z = Math.atan2(-m12, m22); - } - - break; - - case 'YZX': - this._z = Math.asin(clamp(m21, -1, 1)); - - if (Math.abs(m21) < 0.9999999) { - this._x = Math.atan2(-m23, m22); - this._y = Math.atan2(-m31, m11); - } else { - this._x = 0; - this._y = Math.atan2(m13, m33); - } - - break; - - case 'XZY': - this._z = Math.asin(-clamp(m12, -1, 1)); - - if (Math.abs(m12) < 0.9999999) { - this._x = Math.atan2(m32, m22); - this._y = Math.atan2(m13, m11); - } else { - this._x = Math.atan2(-m23, m33); - this._y = 0; - } - - break; - - default: - console.warn('THREE.Euler: .setFromRotationMatrix() encountered an unknown order: ' + order); - } - - this._order = order; - if (update === true) this._onChangeCallback(); - return this; - } - - setFromQuaternion(q, order, update) { - _matrix$1.makeRotationFromQuaternion(q); - - return this.setFromRotationMatrix(_matrix$1, order, update); - } - - setFromVector3(v, order = this._order) { - return this.set(v.x, v.y, v.z, order); - } - - reorder(newOrder) { - // WARNING: this discards revolution information -bhouston - _quaternion$3.setFromEuler(this); - - return this.setFromQuaternion(_quaternion$3, newOrder); - } - - equals(euler) { - return euler._x === this._x && euler._y === this._y && euler._z === this._z && euler._order === this._order; - } - - fromArray(array) { - this._x = array[0]; - this._y = array[1]; - this._z = array[2]; - if (array[3] !== undefined) this._order = array[3]; - - this._onChangeCallback(); - - return this; - } - - toArray(array = [], offset = 0) { - array[offset] = this._x; - array[offset + 1] = this._y; - array[offset + 2] = this._z; - array[offset + 3] = this._order; - return array; - } - - _onChange(callback) { - this._onChangeCallback = callback; - return this; - } - - _onChangeCallback() {} - - *[Symbol.iterator]() { - yield this._x; - yield this._y; - yield this._z; - yield this._order; - } - - } - - Euler.prototype.isEuler = true; - Euler.DefaultOrder = 'XYZ'; - Euler.RotationOrders = ['XYZ', 'YZX', 'ZXY', 'XZY', 'YXZ', 'ZYX']; - - class Layers { - constructor() { - this.mask = 1 | 0; - } - - set(channel) { - this.mask = (1 << channel | 0) >>> 0; - } - - enable(channel) { - this.mask |= 1 << channel | 0; - } - - enableAll() { - this.mask = 0xffffffff | 0; - } - - toggle(channel) { - this.mask ^= 1 << channel | 0; - } - - disable(channel) { - this.mask &= ~(1 << channel | 0); - } - - disableAll() { - this.mask = 0; - } - - test(layers) { - return (this.mask & layers.mask) !== 0; - } - - isEnabled(channel) { - return (this.mask & (1 << channel | 0)) !== 0; - } - - } - - let _object3DId = 0; - - const _v1$4 = /*@__PURE__*/new Vector3(); - - const _q1 = /*@__PURE__*/new Quaternion(); - - const _m1$1 = /*@__PURE__*/new Matrix4(); - - const _target = /*@__PURE__*/new Vector3(); - - const _position$3 = /*@__PURE__*/new Vector3(); - - const _scale$2 = /*@__PURE__*/new Vector3(); - - const _quaternion$2 = /*@__PURE__*/new Quaternion(); - - const _xAxis = /*@__PURE__*/new Vector3(1, 0, 0); - - const _yAxis = /*@__PURE__*/new Vector3(0, 1, 0); - - const _zAxis = /*@__PURE__*/new Vector3(0, 0, 1); - - const _addedEvent = { - type: 'added' - }; - const _removedEvent = { - type: 'removed' - }; - - class Object3D extends EventDispatcher { - constructor() { - super(); - Object.defineProperty(this, 'id', { - value: _object3DId++ - }); - this.uuid = generateUUID(); - this.name = ''; - this.type = 'Object3D'; - this.parent = null; - this.children = []; - this.up = Object3D.DefaultUp.clone(); - const position = new Vector3(); - const rotation = new Euler(); - const quaternion = new Quaternion(); - const scale = new Vector3(1, 1, 1); - - function onRotationChange() { - quaternion.setFromEuler(rotation, false); - } - - function onQuaternionChange() { - rotation.setFromQuaternion(quaternion, undefined, false); - } - - rotation._onChange(onRotationChange); - - quaternion._onChange(onQuaternionChange); - - Object.defineProperties(this, { - position: { - configurable: true, - enumerable: true, - value: position - }, - rotation: { - configurable: true, - enumerable: true, - value: rotation - }, - quaternion: { - configurable: true, - enumerable: true, - value: quaternion - }, - scale: { - configurable: true, - enumerable: true, - value: scale - }, - modelViewMatrix: { - value: new Matrix4() - }, - normalMatrix: { - value: new Matrix3() - } - }); - this.matrix = new Matrix4(); - this.matrixWorld = new Matrix4(); - this.matrixAutoUpdate = Object3D.DefaultMatrixAutoUpdate; - this.matrixWorldNeedsUpdate = false; - this.layers = new Layers(); - this.visible = true; - this.castShadow = false; - this.receiveShadow = false; - this.frustumCulled = true; - this.renderOrder = 0; - this.animations = []; - this.userData = {}; - } - - onBeforeRender() {} - - onAfterRender() {} - - applyMatrix4(matrix) { - if (this.matrixAutoUpdate) this.updateMatrix(); - this.matrix.premultiply(matrix); - this.matrix.decompose(this.position, this.quaternion, this.scale); - } - - applyQuaternion(q) { - this.quaternion.premultiply(q); - return this; - } - - setRotationFromAxisAngle(axis, angle) { - // assumes axis is normalized - this.quaternion.setFromAxisAngle(axis, angle); - } - - setRotationFromEuler(euler) { - this.quaternion.setFromEuler(euler, true); - } - - setRotationFromMatrix(m) { - // assumes the upper 3x3 of m is a pure rotation matrix (i.e, unscaled) - this.quaternion.setFromRotationMatrix(m); - } - - setRotationFromQuaternion(q) { - // assumes q is normalized - this.quaternion.copy(q); - } - - rotateOnAxis(axis, angle) { - // rotate object on axis in object space - // axis is assumed to be normalized - _q1.setFromAxisAngle(axis, angle); - - this.quaternion.multiply(_q1); - return this; - } - - rotateOnWorldAxis(axis, angle) { - // rotate object on axis in world space - // axis is assumed to be normalized - // method assumes no rotated parent - _q1.setFromAxisAngle(axis, angle); - - this.quaternion.premultiply(_q1); - return this; - } - - rotateX(angle) { - return this.rotateOnAxis(_xAxis, angle); - } - - rotateY(angle) { - return this.rotateOnAxis(_yAxis, angle); - } - - rotateZ(angle) { - return this.rotateOnAxis(_zAxis, angle); - } - - translateOnAxis(axis, distance) { - // translate object by distance along axis in object space - // axis is assumed to be normalized - _v1$4.copy(axis).applyQuaternion(this.quaternion); - - this.position.add(_v1$4.multiplyScalar(distance)); - return this; - } - - translateX(distance) { - return this.translateOnAxis(_xAxis, distance); - } - - translateY(distance) { - return this.translateOnAxis(_yAxis, distance); - } - - translateZ(distance) { - return this.translateOnAxis(_zAxis, distance); - } - - localToWorld(vector) { - return vector.applyMatrix4(this.matrixWorld); - } - - worldToLocal(vector) { - return vector.applyMatrix4(_m1$1.copy(this.matrixWorld).invert()); - } - - lookAt(x, y, z) { - // This method does not support objects having non-uniformly-scaled parent(s) - if (x.isVector3) { - _target.copy(x); - } else { - _target.set(x, y, z); - } - - const parent = this.parent; - this.updateWorldMatrix(true, false); - - _position$3.setFromMatrixPosition(this.matrixWorld); - - if (this.isCamera || this.isLight) { - _m1$1.lookAt(_position$3, _target, this.up); - } else { - _m1$1.lookAt(_target, _position$3, this.up); - } - - this.quaternion.setFromRotationMatrix(_m1$1); - - if (parent) { - _m1$1.extractRotation(parent.matrixWorld); - - _q1.setFromRotationMatrix(_m1$1); - - this.quaternion.premultiply(_q1.invert()); - } - } - - add(object) { - if (arguments.length > 1) { - for (let i = 0; i < arguments.length; i++) { - this.add(arguments[i]); - } - - return this; - } - - if (object === this) { - console.error('THREE.Object3D.add: object can\'t be added as a child of itself.', object); - return this; - } - - if (object && object.isObject3D) { - if (object.parent !== null) { - object.parent.remove(object); - } - - object.parent = this; - this.children.push(object); - object.dispatchEvent(_addedEvent); - } else { - console.error('THREE.Object3D.add: object not an instance of THREE.Object3D.', object); - } - - return this; - } - - remove(object) { - if (arguments.length > 1) { - for (let i = 0; i < arguments.length; i++) { - this.remove(arguments[i]); - } - - return this; - } - - const index = this.children.indexOf(object); - - if (index !== -1) { - object.parent = null; - this.children.splice(index, 1); - object.dispatchEvent(_removedEvent); - } - - return this; - } - - removeFromParent() { - const parent = this.parent; - - if (parent !== null) { - parent.remove(this); - } - - return this; - } - - clear() { - for (let i = 0; i < this.children.length; i++) { - const object = this.children[i]; - object.parent = null; - object.dispatchEvent(_removedEvent); - } - - this.children.length = 0; - return this; - } - - attach(object) { - // adds object as a child of this, while maintaining the object's world transform - // Note: This method does not support scene graphs having non-uniformly-scaled nodes(s) - this.updateWorldMatrix(true, false); - - _m1$1.copy(this.matrixWorld).invert(); - - if (object.parent !== null) { - object.parent.updateWorldMatrix(true, false); - - _m1$1.multiply(object.parent.matrixWorld); - } - - object.applyMatrix4(_m1$1); - this.add(object); - object.updateWorldMatrix(false, true); - return this; - } - - getObjectById(id) { - return this.getObjectByProperty('id', id); - } - - getObjectByName(name) { - return this.getObjectByProperty('name', name); - } - - getObjectByProperty(name, value) { - if (this[name] === value) return this; - - for (let i = 0, l = this.children.length; i < l; i++) { - const child = this.children[i]; - const object = child.getObjectByProperty(name, value); - - if (object !== undefined) { - return object; - } - } - - return undefined; - } - - getWorldPosition(target) { - this.updateWorldMatrix(true, false); - return target.setFromMatrixPosition(this.matrixWorld); - } - - getWorldQuaternion(target) { - this.updateWorldMatrix(true, false); - this.matrixWorld.decompose(_position$3, target, _scale$2); - return target; - } - - getWorldScale(target) { - this.updateWorldMatrix(true, false); - this.matrixWorld.decompose(_position$3, _quaternion$2, target); - return target; - } - - getWorldDirection(target) { - this.updateWorldMatrix(true, false); - const e = this.matrixWorld.elements; - return target.set(e[8], e[9], e[10]).normalize(); - } - - raycast() {} - - traverse(callback) { - callback(this); - const children = this.children; - - for (let i = 0, l = children.length; i < l; i++) { - children[i].traverse(callback); - } - } - - traverseVisible(callback) { - if (this.visible === false) return; - callback(this); - const children = this.children; - - for (let i = 0, l = children.length; i < l; i++) { - children[i].traverseVisible(callback); - } - } - - traverseAncestors(callback) { - const parent = this.parent; - - if (parent !== null) { - callback(parent); - parent.traverseAncestors(callback); - } - } - - updateMatrix() { - this.matrix.compose(this.position, this.quaternion, this.scale); - this.matrixWorldNeedsUpdate = true; - } - - updateMatrixWorld(force) { - if (this.matrixAutoUpdate) this.updateMatrix(); - - if (this.matrixWorldNeedsUpdate || force) { - if (this.parent === null) { - this.matrixWorld.copy(this.matrix); - } else { - this.matrixWorld.multiplyMatrices(this.parent.matrixWorld, this.matrix); - } - - this.matrixWorldNeedsUpdate = false; - force = true; - } // update children - - - const children = this.children; - - for (let i = 0, l = children.length; i < l; i++) { - children[i].updateMatrixWorld(force); - } - } - - updateWorldMatrix(updateParents, updateChildren) { - const parent = this.parent; - - if (updateParents === true && parent !== null) { - parent.updateWorldMatrix(true, false); - } - - if (this.matrixAutoUpdate) this.updateMatrix(); - - if (this.parent === null) { - this.matrixWorld.copy(this.matrix); - } else { - this.matrixWorld.multiplyMatrices(this.parent.matrixWorld, this.matrix); - } // update children - - - if (updateChildren === true) { - const children = this.children; - - for (let i = 0, l = children.length; i < l; i++) { - children[i].updateWorldMatrix(false, true); - } - } - } - - toJSON(meta) { - // meta is a string when called from JSON.stringify - const isRootObject = meta === undefined || typeof meta === 'string'; - const output = {}; // meta is a hash used to collect geometries, materials. - // not providing it implies that this is the root object - // being serialized. - - if (isRootObject) { - // initialize meta obj - meta = { - geometries: {}, - materials: {}, - textures: {}, - images: {}, - shapes: {}, - skeletons: {}, - animations: {}, - nodes: {} - }; - output.metadata = { - version: 4.5, - type: 'Object', - generator: 'Object3D.toJSON' - }; - } // standard Object3D serialization - - - const object = {}; - object.uuid = this.uuid; - object.type = this.type; - if (this.name !== '') object.name = this.name; - if (this.castShadow === true) object.castShadow = true; - if (this.receiveShadow === true) object.receiveShadow = true; - if (this.visible === false) object.visible = false; - if (this.frustumCulled === false) object.frustumCulled = false; - if (this.renderOrder !== 0) object.renderOrder = this.renderOrder; - if (JSON.stringify(this.userData) !== '{}') object.userData = this.userData; - object.layers = this.layers.mask; - object.matrix = this.matrix.toArray(); - if (this.matrixAutoUpdate === false) object.matrixAutoUpdate = false; // object specific properties - - if (this.isInstancedMesh) { - object.type = 'InstancedMesh'; - object.count = this.count; - object.instanceMatrix = this.instanceMatrix.toJSON(); - if (this.instanceColor !== null) object.instanceColor = this.instanceColor.toJSON(); - } // - - - function serialize(library, element) { - if (library[element.uuid] === undefined) { - library[element.uuid] = element.toJSON(meta); - } - - return element.uuid; - } - - if (this.isScene) { - if (this.background) { - if (this.background.isColor) { - object.background = this.background.toJSON(); - } else if (this.background.isTexture) { - object.background = this.background.toJSON(meta).uuid; - } - } - - if (this.environment && this.environment.isTexture) { - object.environment = this.environment.toJSON(meta).uuid; - } - } else if (this.isMesh || this.isLine || this.isPoints) { - object.geometry = serialize(meta.geometries, this.geometry); - const parameters = this.geometry.parameters; - - if (parameters !== undefined && parameters.shapes !== undefined) { - const shapes = parameters.shapes; - - if (Array.isArray(shapes)) { - for (let i = 0, l = shapes.length; i < l; i++) { - const shape = shapes[i]; - serialize(meta.shapes, shape); - } - } else { - serialize(meta.shapes, shapes); - } - } - } - - if (this.isSkinnedMesh) { - object.bindMode = this.bindMode; - object.bindMatrix = this.bindMatrix.toArray(); - - if (this.skeleton !== undefined) { - serialize(meta.skeletons, this.skeleton); - object.skeleton = this.skeleton.uuid; - } - } - - if (this.material !== undefined) { - if (Array.isArray(this.material)) { - const uuids = []; - - for (let i = 0, l = this.material.length; i < l; i++) { - uuids.push(serialize(meta.materials, this.material[i])); - } - - object.material = uuids; - } else { - object.material = serialize(meta.materials, this.material); - } - } // - - - if (this.children.length > 0) { - object.children = []; - - for (let i = 0; i < this.children.length; i++) { - object.children.push(this.children[i].toJSON(meta).object); - } - } // - - - if (this.animations.length > 0) { - object.animations = []; - - for (let i = 0; i < this.animations.length; i++) { - const animation = this.animations[i]; - object.animations.push(serialize(meta.animations, animation)); - } - } - - if (isRootObject) { - const geometries = extractFromCache(meta.geometries); - const materials = extractFromCache(meta.materials); - const textures = extractFromCache(meta.textures); - const images = extractFromCache(meta.images); - const shapes = extractFromCache(meta.shapes); - const skeletons = extractFromCache(meta.skeletons); - const animations = extractFromCache(meta.animations); - const nodes = extractFromCache(meta.nodes); - if (geometries.length > 0) output.geometries = geometries; - if (materials.length > 0) output.materials = materials; - if (textures.length > 0) output.textures = textures; - if (images.length > 0) output.images = images; - if (shapes.length > 0) output.shapes = shapes; - if (skeletons.length > 0) output.skeletons = skeletons; - if (animations.length > 0) output.animations = animations; - if (nodes.length > 0) output.nodes = nodes; - } - - output.object = object; - return output; // extract data from the cache hash - // remove metadata on each item - // and return as array - - function extractFromCache(cache) { - const values = []; - - for (const key in cache) { - const data = cache[key]; - delete data.metadata; - values.push(data); - } - - return values; - } - } - - clone(recursive) { - return new this.constructor().copy(this, recursive); - } - - copy(source, recursive = true) { - this.name = source.name; - this.up.copy(source.up); - this.position.copy(source.position); - this.rotation.order = source.rotation.order; - this.quaternion.copy(source.quaternion); - this.scale.copy(source.scale); - this.matrix.copy(source.matrix); - this.matrixWorld.copy(source.matrixWorld); - this.matrixAutoUpdate = source.matrixAutoUpdate; - this.matrixWorldNeedsUpdate = source.matrixWorldNeedsUpdate; - this.layers.mask = source.layers.mask; - this.visible = source.visible; - this.castShadow = source.castShadow; - this.receiveShadow = source.receiveShadow; - this.frustumCulled = source.frustumCulled; - this.renderOrder = source.renderOrder; - this.userData = JSON.parse(JSON.stringify(source.userData)); - - if (recursive === true) { - for (let i = 0; i < source.children.length; i++) { - const child = source.children[i]; - this.add(child.clone()); - } - } - - return this; - } - - } - - Object3D.DefaultUp = new Vector3(0, 1, 0); - Object3D.DefaultMatrixAutoUpdate = true; - Object3D.prototype.isObject3D = true; - - const _v0$1 = /*@__PURE__*/new Vector3(); - - const _v1$3 = /*@__PURE__*/new Vector3(); - - const _v2$2 = /*@__PURE__*/new Vector3(); - - const _v3$1 = /*@__PURE__*/new Vector3(); - - const _vab = /*@__PURE__*/new Vector3(); - - const _vac = /*@__PURE__*/new Vector3(); - - const _vbc = /*@__PURE__*/new Vector3(); - - const _vap = /*@__PURE__*/new Vector3(); - - const _vbp = /*@__PURE__*/new Vector3(); - - const _vcp = /*@__PURE__*/new Vector3(); - - class Triangle { - constructor(a = new Vector3(), b = new Vector3(), c = new Vector3()) { - this.a = a; - this.b = b; - this.c = c; - } - - static getNormal(a, b, c, target) { - target.subVectors(c, b); - - _v0$1.subVectors(a, b); - - target.cross(_v0$1); - const targetLengthSq = target.lengthSq(); - - if (targetLengthSq > 0) { - return target.multiplyScalar(1 / Math.sqrt(targetLengthSq)); - } - - return target.set(0, 0, 0); - } // static/instance method to calculate barycentric coordinates - // based on: http://www.blackpawn.com/texts/pointinpoly/default.html - - - static getBarycoord(point, a, b, c, target) { - _v0$1.subVectors(c, a); - - _v1$3.subVectors(b, a); - - _v2$2.subVectors(point, a); - - const dot00 = _v0$1.dot(_v0$1); - - const dot01 = _v0$1.dot(_v1$3); - - const dot02 = _v0$1.dot(_v2$2); - - const dot11 = _v1$3.dot(_v1$3); - - const dot12 = _v1$3.dot(_v2$2); - - const denom = dot00 * dot11 - dot01 * dot01; // collinear or singular triangle - - if (denom === 0) { - // arbitrary location outside of triangle? - // not sure if this is the best idea, maybe should be returning undefined - return target.set(-2, -1, -1); - } - - const invDenom = 1 / denom; - const u = (dot11 * dot02 - dot01 * dot12) * invDenom; - const v = (dot00 * dot12 - dot01 * dot02) * invDenom; // barycentric coordinates must always sum to 1 - - return target.set(1 - u - v, v, u); - } - - static containsPoint(point, a, b, c) { - this.getBarycoord(point, a, b, c, _v3$1); - return _v3$1.x >= 0 && _v3$1.y >= 0 && _v3$1.x + _v3$1.y <= 1; - } - - static getUV(point, p1, p2, p3, uv1, uv2, uv3, target) { - this.getBarycoord(point, p1, p2, p3, _v3$1); - target.set(0, 0); - target.addScaledVector(uv1, _v3$1.x); - target.addScaledVector(uv2, _v3$1.y); - target.addScaledVector(uv3, _v3$1.z); - return target; - } - - static isFrontFacing(a, b, c, direction) { - _v0$1.subVectors(c, b); - - _v1$3.subVectors(a, b); // strictly front facing - - - return _v0$1.cross(_v1$3).dot(direction) < 0 ? true : false; - } - - set(a, b, c) { - this.a.copy(a); - this.b.copy(b); - this.c.copy(c); - return this; - } - - setFromPointsAndIndices(points, i0, i1, i2) { - this.a.copy(points[i0]); - this.b.copy(points[i1]); - this.c.copy(points[i2]); - return this; - } - - setFromAttributeAndIndices(attribute, i0, i1, i2) { - this.a.fromBufferAttribute(attribute, i0); - this.b.fromBufferAttribute(attribute, i1); - this.c.fromBufferAttribute(attribute, i2); - return this; - } - - clone() { - return new this.constructor().copy(this); - } - - copy(triangle) { - this.a.copy(triangle.a); - this.b.copy(triangle.b); - this.c.copy(triangle.c); - return this; - } - - getArea() { - _v0$1.subVectors(this.c, this.b); - - _v1$3.subVectors(this.a, this.b); - - return _v0$1.cross(_v1$3).length() * 0.5; - } - - getMidpoint(target) { - return target.addVectors(this.a, this.b).add(this.c).multiplyScalar(1 / 3); - } - - getNormal(target) { - return Triangle.getNormal(this.a, this.b, this.c, target); - } - - getPlane(target) { - return target.setFromCoplanarPoints(this.a, this.b, this.c); - } - - getBarycoord(point, target) { - return Triangle.getBarycoord(point, this.a, this.b, this.c, target); - } - - getUV(point, uv1, uv2, uv3, target) { - return Triangle.getUV(point, this.a, this.b, this.c, uv1, uv2, uv3, target); - } - - containsPoint(point) { - return Triangle.containsPoint(point, this.a, this.b, this.c); - } - - isFrontFacing(direction) { - return Triangle.isFrontFacing(this.a, this.b, this.c, direction); - } - - intersectsBox(box) { - return box.intersectsTriangle(this); - } - - closestPointToPoint(p, target) { - const a = this.a, - b = this.b, - c = this.c; - let v, w; // algorithm thanks to Real-Time Collision Detection by Christer Ericson, - // published by Morgan Kaufmann Publishers, (c) 2005 Elsevier Inc., - // under the accompanying license; see chapter 5.1.5 for detailed explanation. - // basically, we're distinguishing which of the voronoi regions of the triangle - // the point lies in with the minimum amount of redundant computation. - - _vab.subVectors(b, a); - - _vac.subVectors(c, a); - - _vap.subVectors(p, a); - - const d1 = _vab.dot(_vap); - - const d2 = _vac.dot(_vap); - - if (d1 <= 0 && d2 <= 0) { - // vertex region of A; barycentric coords (1, 0, 0) - return target.copy(a); - } - - _vbp.subVectors(p, b); - - const d3 = _vab.dot(_vbp); - - const d4 = _vac.dot(_vbp); - - if (d3 >= 0 && d4 <= d3) { - // vertex region of B; barycentric coords (0, 1, 0) - return target.copy(b); - } - - const vc = d1 * d4 - d3 * d2; - - if (vc <= 0 && d1 >= 0 && d3 <= 0) { - v = d1 / (d1 - d3); // edge region of AB; barycentric coords (1-v, v, 0) - - return target.copy(a).addScaledVector(_vab, v); - } - - _vcp.subVectors(p, c); - - const d5 = _vab.dot(_vcp); - - const d6 = _vac.dot(_vcp); - - if (d6 >= 0 && d5 <= d6) { - // vertex region of C; barycentric coords (0, 0, 1) - return target.copy(c); - } - - const vb = d5 * d2 - d1 * d6; - - if (vb <= 0 && d2 >= 0 && d6 <= 0) { - w = d2 / (d2 - d6); // edge region of AC; barycentric coords (1-w, 0, w) - - return target.copy(a).addScaledVector(_vac, w); - } - - const va = d3 * d6 - d5 * d4; - - if (va <= 0 && d4 - d3 >= 0 && d5 - d6 >= 0) { - _vbc.subVectors(c, b); - - w = (d4 - d3) / (d4 - d3 + (d5 - d6)); // edge region of BC; barycentric coords (0, 1-w, w) - - return target.copy(b).addScaledVector(_vbc, w); // edge region of BC - } // face region - - - const denom = 1 / (va + vb + vc); // u = va * denom - - v = vb * denom; - w = vc * denom; - return target.copy(a).addScaledVector(_vab, v).addScaledVector(_vac, w); - } - - equals(triangle) { - return triangle.a.equals(this.a) && triangle.b.equals(this.b) && triangle.c.equals(this.c); - } - - } - - let materialId = 0; - - class Material extends EventDispatcher { - constructor() { - super(); - Object.defineProperty(this, 'id', { - value: materialId++ - }); - this.uuid = generateUUID(); - this.name = ''; - this.type = 'Material'; - this.blending = NormalBlending; - this.side = FrontSide; - this.vertexColors = false; - this.opacity = 1; - this.transparent = false; - this.blendSrc = SrcAlphaFactor; - this.blendDst = OneMinusSrcAlphaFactor; - this.blendEquation = AddEquation; - this.blendSrcAlpha = null; - this.blendDstAlpha = null; - this.blendEquationAlpha = null; - this.depthFunc = LessEqualDepth; - this.depthTest = true; - this.depthWrite = true; - this.stencilWriteMask = 0xff; - this.stencilFunc = AlwaysStencilFunc; - this.stencilRef = 0; - this.stencilFuncMask = 0xff; - this.stencilFail = KeepStencilOp; - this.stencilZFail = KeepStencilOp; - this.stencilZPass = KeepStencilOp; - this.stencilWrite = false; - this.clippingPlanes = null; - this.clipIntersection = false; - this.clipShadows = false; - this.shadowSide = null; - this.colorWrite = true; - this.precision = null; // override the renderer's default precision for this material - - this.polygonOffset = false; - this.polygonOffsetFactor = 0; - this.polygonOffsetUnits = 0; - this.dithering = false; - this.alphaToCoverage = false; - this.premultipliedAlpha = false; - this.visible = true; - this.toneMapped = true; - this.userData = {}; - this.version = 0; - this._alphaTest = 0; - } - - get alphaTest() { - return this._alphaTest; - } - - set alphaTest(value) { - if (this._alphaTest > 0 !== value > 0) { - this.version++; - } - - this._alphaTest = value; - } - - onBuild() {} - - onBeforeRender() {} - - onBeforeCompile() {} - - customProgramCacheKey() { - return this.onBeforeCompile.toString(); - } - - setValues(values) { - if (values === undefined) return; - - for (const key in values) { - const newValue = values[key]; - - if (newValue === undefined) { - console.warn('THREE.Material: \'' + key + '\' parameter is undefined.'); - continue; - } // for backward compatibility if shading is set in the constructor - - - if (key === 'shading') { - console.warn('THREE.' + this.type + ': .shading has been removed. Use the boolean .flatShading instead.'); - this.flatShading = newValue === FlatShading ? true : false; - continue; - } - - const currentValue = this[key]; - - if (currentValue === undefined) { - console.warn('THREE.' + this.type + ': \'' + key + '\' is not a property of this material.'); - continue; - } - - if (currentValue && currentValue.isColor) { - currentValue.set(newValue); - } else if (currentValue && currentValue.isVector3 && newValue && newValue.isVector3) { - currentValue.copy(newValue); - } else { - this[key] = newValue; - } - } - } - - toJSON(meta) { - const isRootObject = meta === undefined || typeof meta === 'string'; - - if (isRootObject) { - meta = { - textures: {}, - images: {} - }; - } - - const data = { - metadata: { - version: 4.5, - type: 'Material', - generator: 'Material.toJSON' - } - }; // standard Material serialization - - data.uuid = this.uuid; - data.type = this.type; - if (this.name !== '') data.name = this.name; - if (this.color && this.color.isColor) data.color = this.color.getHex(); - if (this.roughness !== undefined) data.roughness = this.roughness; - if (this.metalness !== undefined) data.metalness = this.metalness; - if (this.sheen !== undefined) data.sheen = this.sheen; - if (this.sheenColor && this.sheenColor.isColor) data.sheenColor = this.sheenColor.getHex(); - if (this.sheenRoughness !== undefined) data.sheenRoughness = this.sheenRoughness; - if (this.emissive && this.emissive.isColor) data.emissive = this.emissive.getHex(); - if (this.emissiveIntensity && this.emissiveIntensity !== 1) data.emissiveIntensity = this.emissiveIntensity; - if (this.specular && this.specular.isColor) data.specular = this.specular.getHex(); - if (this.specularIntensity !== undefined) data.specularIntensity = this.specularIntensity; - if (this.specularColor && this.specularColor.isColor) data.specularColor = this.specularColor.getHex(); - if (this.shininess !== undefined) data.shininess = this.shininess; - if (this.clearcoat !== undefined) data.clearcoat = this.clearcoat; - if (this.clearcoatRoughness !== undefined) data.clearcoatRoughness = this.clearcoatRoughness; - - if (this.clearcoatMap && this.clearcoatMap.isTexture) { - data.clearcoatMap = this.clearcoatMap.toJSON(meta).uuid; - } - - if (this.clearcoatRoughnessMap && this.clearcoatRoughnessMap.isTexture) { - data.clearcoatRoughnessMap = this.clearcoatRoughnessMap.toJSON(meta).uuid; - } - - if (this.clearcoatNormalMap && this.clearcoatNormalMap.isTexture) { - data.clearcoatNormalMap = this.clearcoatNormalMap.toJSON(meta).uuid; - data.clearcoatNormalScale = this.clearcoatNormalScale.toArray(); - } - - if (this.map && this.map.isTexture) data.map = this.map.toJSON(meta).uuid; - if (this.matcap && this.matcap.isTexture) data.matcap = this.matcap.toJSON(meta).uuid; - if (this.alphaMap && this.alphaMap.isTexture) data.alphaMap = this.alphaMap.toJSON(meta).uuid; - - if (this.lightMap && this.lightMap.isTexture) { - data.lightMap = this.lightMap.toJSON(meta).uuid; - data.lightMapIntensity = this.lightMapIntensity; - } - - if (this.aoMap && this.aoMap.isTexture) { - data.aoMap = this.aoMap.toJSON(meta).uuid; - data.aoMapIntensity = this.aoMapIntensity; - } - - if (this.bumpMap && this.bumpMap.isTexture) { - data.bumpMap = this.bumpMap.toJSON(meta).uuid; - data.bumpScale = this.bumpScale; - } - - if (this.normalMap && this.normalMap.isTexture) { - data.normalMap = this.normalMap.toJSON(meta).uuid; - data.normalMapType = this.normalMapType; - data.normalScale = this.normalScale.toArray(); - } - - if (this.displacementMap && this.displacementMap.isTexture) { - data.displacementMap = this.displacementMap.toJSON(meta).uuid; - data.displacementScale = this.displacementScale; - data.displacementBias = this.displacementBias; - } - - if (this.roughnessMap && this.roughnessMap.isTexture) data.roughnessMap = this.roughnessMap.toJSON(meta).uuid; - if (this.metalnessMap && this.metalnessMap.isTexture) data.metalnessMap = this.metalnessMap.toJSON(meta).uuid; - if (this.emissiveMap && this.emissiveMap.isTexture) data.emissiveMap = this.emissiveMap.toJSON(meta).uuid; - if (this.specularMap && this.specularMap.isTexture) data.specularMap = this.specularMap.toJSON(meta).uuid; - if (this.specularIntensityMap && this.specularIntensityMap.isTexture) data.specularIntensityMap = this.specularIntensityMap.toJSON(meta).uuid; - if (this.specularColorMap && this.specularColorMap.isTexture) data.specularColorMap = this.specularColorMap.toJSON(meta).uuid; - - if (this.envMap && this.envMap.isTexture) { - data.envMap = this.envMap.toJSON(meta).uuid; - if (this.combine !== undefined) data.combine = this.combine; - } - - if (this.envMapIntensity !== undefined) data.envMapIntensity = this.envMapIntensity; - if (this.reflectivity !== undefined) data.reflectivity = this.reflectivity; - if (this.refractionRatio !== undefined) data.refractionRatio = this.refractionRatio; - - if (this.gradientMap && this.gradientMap.isTexture) { - data.gradientMap = this.gradientMap.toJSON(meta).uuid; - } - - if (this.transmission !== undefined) data.transmission = this.transmission; - if (this.transmissionMap && this.transmissionMap.isTexture) data.transmissionMap = this.transmissionMap.toJSON(meta).uuid; - if (this.thickness !== undefined) data.thickness = this.thickness; - if (this.thicknessMap && this.thicknessMap.isTexture) data.thicknessMap = this.thicknessMap.toJSON(meta).uuid; - if (this.attenuationDistance !== undefined) data.attenuationDistance = this.attenuationDistance; - if (this.attenuationColor !== undefined) data.attenuationColor = this.attenuationColor.getHex(); - if (this.size !== undefined) data.size = this.size; - if (this.shadowSide !== null) data.shadowSide = this.shadowSide; - if (this.sizeAttenuation !== undefined) data.sizeAttenuation = this.sizeAttenuation; - if (this.blending !== NormalBlending) data.blending = this.blending; - if (this.side !== FrontSide) data.side = this.side; - if (this.vertexColors) data.vertexColors = true; - if (this.opacity < 1) data.opacity = this.opacity; - if (this.transparent === true) data.transparent = this.transparent; - data.depthFunc = this.depthFunc; - data.depthTest = this.depthTest; - data.depthWrite = this.depthWrite; - data.colorWrite = this.colorWrite; - data.stencilWrite = this.stencilWrite; - data.stencilWriteMask = this.stencilWriteMask; - data.stencilFunc = this.stencilFunc; - data.stencilRef = this.stencilRef; - data.stencilFuncMask = this.stencilFuncMask; - data.stencilFail = this.stencilFail; - data.stencilZFail = this.stencilZFail; - data.stencilZPass = this.stencilZPass; // rotation (SpriteMaterial) - - if (this.rotation !== undefined && this.rotation !== 0) data.rotation = this.rotation; - if (this.polygonOffset === true) data.polygonOffset = true; - if (this.polygonOffsetFactor !== 0) data.polygonOffsetFactor = this.polygonOffsetFactor; - if (this.polygonOffsetUnits !== 0) data.polygonOffsetUnits = this.polygonOffsetUnits; - if (this.linewidth !== undefined && this.linewidth !== 1) data.linewidth = this.linewidth; - if (this.dashSize !== undefined) data.dashSize = this.dashSize; - if (this.gapSize !== undefined) data.gapSize = this.gapSize; - if (this.scale !== undefined) data.scale = this.scale; - if (this.dithering === true) data.dithering = true; - if (this.alphaTest > 0) data.alphaTest = this.alphaTest; - if (this.alphaToCoverage === true) data.alphaToCoverage = this.alphaToCoverage; - if (this.premultipliedAlpha === true) data.premultipliedAlpha = this.premultipliedAlpha; - if (this.wireframe === true) data.wireframe = this.wireframe; - if (this.wireframeLinewidth > 1) data.wireframeLinewidth = this.wireframeLinewidth; - if (this.wireframeLinecap !== 'round') data.wireframeLinecap = this.wireframeLinecap; - if (this.wireframeLinejoin !== 'round') data.wireframeLinejoin = this.wireframeLinejoin; - if (this.flatShading === true) data.flatShading = this.flatShading; - if (this.visible === false) data.visible = false; - if (this.toneMapped === false) data.toneMapped = false; - if (this.fog === false) data.fog = false; - if (JSON.stringify(this.userData) !== '{}') data.userData = this.userData; // TODO: Copied from Object3D.toJSON - - function extractFromCache(cache) { - const values = []; - - for (const key in cache) { - const data = cache[key]; - delete data.metadata; - values.push(data); - } - - return values; - } - - if (isRootObject) { - const textures = extractFromCache(meta.textures); - const images = extractFromCache(meta.images); - if (textures.length > 0) data.textures = textures; - if (images.length > 0) data.images = images; - } - - return data; - } - - clone() { - return new this.constructor().copy(this); - } - - copy(source) { - this.name = source.name; - this.blending = source.blending; - this.side = source.side; - this.vertexColors = source.vertexColors; - this.opacity = source.opacity; - this.transparent = source.transparent; - this.blendSrc = source.blendSrc; - this.blendDst = source.blendDst; - this.blendEquation = source.blendEquation; - this.blendSrcAlpha = source.blendSrcAlpha; - this.blendDstAlpha = source.blendDstAlpha; - this.blendEquationAlpha = source.blendEquationAlpha; - this.depthFunc = source.depthFunc; - this.depthTest = source.depthTest; - this.depthWrite = source.depthWrite; - this.stencilWriteMask = source.stencilWriteMask; - this.stencilFunc = source.stencilFunc; - this.stencilRef = source.stencilRef; - this.stencilFuncMask = source.stencilFuncMask; - this.stencilFail = source.stencilFail; - this.stencilZFail = source.stencilZFail; - this.stencilZPass = source.stencilZPass; - this.stencilWrite = source.stencilWrite; - const srcPlanes = source.clippingPlanes; - let dstPlanes = null; - - if (srcPlanes !== null) { - const n = srcPlanes.length; - dstPlanes = new Array(n); - - for (let i = 0; i !== n; ++i) { - dstPlanes[i] = srcPlanes[i].clone(); - } - } - - this.clippingPlanes = dstPlanes; - this.clipIntersection = source.clipIntersection; - this.clipShadows = source.clipShadows; - this.shadowSide = source.shadowSide; - this.colorWrite = source.colorWrite; - this.precision = source.precision; - this.polygonOffset = source.polygonOffset; - this.polygonOffsetFactor = source.polygonOffsetFactor; - this.polygonOffsetUnits = source.polygonOffsetUnits; - this.dithering = source.dithering; - this.alphaTest = source.alphaTest; - this.alphaToCoverage = source.alphaToCoverage; - this.premultipliedAlpha = source.premultipliedAlpha; - this.visible = source.visible; - this.toneMapped = source.toneMapped; - this.userData = JSON.parse(JSON.stringify(source.userData)); - return this; - } - - dispose() { - this.dispatchEvent({ - type: 'dispose' - }); - } - - set needsUpdate(value) { - if (value === true) this.version++; - } - - } - - Material.prototype.isMaterial = true; - - Material.fromType = function - /*type*/ - () { - // TODO: Behavior added in Materials.js - return null; - }; - - class MeshBasicMaterial extends Material { - constructor(parameters) { - super(); - this.type = 'MeshBasicMaterial'; - this.color = new Color(0xffffff); // emissive - - this.map = null; - this.lightMap = null; - this.lightMapIntensity = 1.0; - this.aoMap = null; - this.aoMapIntensity = 1.0; - this.specularMap = null; - this.alphaMap = null; - this.envMap = null; - this.combine = MultiplyOperation; - this.reflectivity = 1; - this.refractionRatio = 0.98; - this.wireframe = false; - this.wireframeLinewidth = 1; - this.wireframeLinecap = 'round'; - this.wireframeLinejoin = 'round'; - this.fog = true; - this.setValues(parameters); - } - - copy(source) { - super.copy(source); - this.color.copy(source.color); - this.map = source.map; - this.lightMap = source.lightMap; - this.lightMapIntensity = source.lightMapIntensity; - this.aoMap = source.aoMap; - this.aoMapIntensity = source.aoMapIntensity; - this.specularMap = source.specularMap; - this.alphaMap = source.alphaMap; - this.envMap = source.envMap; - this.combine = source.combine; - this.reflectivity = source.reflectivity; - this.refractionRatio = source.refractionRatio; - this.wireframe = source.wireframe; - this.wireframeLinewidth = source.wireframeLinewidth; - this.wireframeLinecap = source.wireframeLinecap; - this.wireframeLinejoin = source.wireframeLinejoin; - this.fog = source.fog; - return this; - } - - } - - MeshBasicMaterial.prototype.isMeshBasicMaterial = true; - - const _vector$9 = /*@__PURE__*/new Vector3(); - - const _vector2$1 = /*@__PURE__*/new Vector2(); - - class BufferAttribute { - constructor(array, itemSize, normalized) { - if (Array.isArray(array)) { - throw new TypeError('THREE.BufferAttribute: array should be a Typed Array.'); - } - - this.name = ''; - this.array = array; - this.itemSize = itemSize; - this.count = array !== undefined ? array.length / itemSize : 0; - this.normalized = normalized === true; - this.usage = StaticDrawUsage; - this.updateRange = { - offset: 0, - count: -1 - }; - this.version = 0; - } - - onUploadCallback() {} - - set needsUpdate(value) { - if (value === true) this.version++; - } - - setUsage(value) { - this.usage = value; - return this; - } - - copy(source) { - this.name = source.name; - this.array = new source.array.constructor(source.array); - this.itemSize = source.itemSize; - this.count = source.count; - this.normalized = source.normalized; - this.usage = source.usage; - return this; - } - - copyAt(index1, attribute, index2) { - index1 *= this.itemSize; - index2 *= attribute.itemSize; - - for (let i = 0, l = this.itemSize; i < l; i++) { - this.array[index1 + i] = attribute.array[index2 + i]; - } - - return this; - } - - copyArray(array) { - this.array.set(array); - return this; - } - - copyColorsArray(colors) { - const array = this.array; - let offset = 0; - - for (let i = 0, l = colors.length; i < l; i++) { - let color = colors[i]; - - if (color === undefined) { - console.warn('THREE.BufferAttribute.copyColorsArray(): color is undefined', i); - color = new Color(); - } - - array[offset++] = color.r; - array[offset++] = color.g; - array[offset++] = color.b; - } - - return this; - } - - copyVector2sArray(vectors) { - const array = this.array; - let offset = 0; - - for (let i = 0, l = vectors.length; i < l; i++) { - let vector = vectors[i]; - - if (vector === undefined) { - console.warn('THREE.BufferAttribute.copyVector2sArray(): vector is undefined', i); - vector = new Vector2(); - } - - array[offset++] = vector.x; - array[offset++] = vector.y; - } - - return this; - } - - copyVector3sArray(vectors) { - const array = this.array; - let offset = 0; - - for (let i = 0, l = vectors.length; i < l; i++) { - let vector = vectors[i]; - - if (vector === undefined) { - console.warn('THREE.BufferAttribute.copyVector3sArray(): vector is undefined', i); - vector = new Vector3(); - } - - array[offset++] = vector.x; - array[offset++] = vector.y; - array[offset++] = vector.z; - } - - return this; - } - - copyVector4sArray(vectors) { - const array = this.array; - let offset = 0; - - for (let i = 0, l = vectors.length; i < l; i++) { - let vector = vectors[i]; - - if (vector === undefined) { - console.warn('THREE.BufferAttribute.copyVector4sArray(): vector is undefined', i); - vector = new Vector4(); - } - - array[offset++] = vector.x; - array[offset++] = vector.y; - array[offset++] = vector.z; - array[offset++] = vector.w; - } - - return this; - } - - applyMatrix3(m) { - if (this.itemSize === 2) { - for (let i = 0, l = this.count; i < l; i++) { - _vector2$1.fromBufferAttribute(this, i); - - _vector2$1.applyMatrix3(m); - - this.setXY(i, _vector2$1.x, _vector2$1.y); - } - } else if (this.itemSize === 3) { - for (let i = 0, l = this.count; i < l; i++) { - _vector$9.fromBufferAttribute(this, i); - - _vector$9.applyMatrix3(m); - - this.setXYZ(i, _vector$9.x, _vector$9.y, _vector$9.z); - } - } - - return this; - } - - applyMatrix4(m) { - for (let i = 0, l = this.count; i < l; i++) { - _vector$9.fromBufferAttribute(this, i); - - _vector$9.applyMatrix4(m); - - this.setXYZ(i, _vector$9.x, _vector$9.y, _vector$9.z); - } - - return this; - } - - applyNormalMatrix(m) { - for (let i = 0, l = this.count; i < l; i++) { - _vector$9.fromBufferAttribute(this, i); - - _vector$9.applyNormalMatrix(m); - - this.setXYZ(i, _vector$9.x, _vector$9.y, _vector$9.z); - } - - return this; - } - - transformDirection(m) { - for (let i = 0, l = this.count; i < l; i++) { - _vector$9.fromBufferAttribute(this, i); - - _vector$9.transformDirection(m); - - this.setXYZ(i, _vector$9.x, _vector$9.y, _vector$9.z); - } - - return this; - } - - set(value, offset = 0) { - this.array.set(value, offset); - return this; - } - - getX(index) { - return this.array[index * this.itemSize]; - } - - setX(index, x) { - this.array[index * this.itemSize] = x; - return this; - } - - getY(index) { - return this.array[index * this.itemSize + 1]; - } - - setY(index, y) { - this.array[index * this.itemSize + 1] = y; - return this; - } - - getZ(index) { - return this.array[index * this.itemSize + 2]; - } - - setZ(index, z) { - this.array[index * this.itemSize + 2] = z; - return this; - } - - getW(index) { - return this.array[index * this.itemSize + 3]; - } - - setW(index, w) { - this.array[index * this.itemSize + 3] = w; - return this; - } - - setXY(index, x, y) { - index *= this.itemSize; - this.array[index + 0] = x; - this.array[index + 1] = y; - return this; - } - - setXYZ(index, x, y, z) { - index *= this.itemSize; - this.array[index + 0] = x; - this.array[index + 1] = y; - this.array[index + 2] = z; - return this; - } - - setXYZW(index, x, y, z, w) { - index *= this.itemSize; - this.array[index + 0] = x; - this.array[index + 1] = y; - this.array[index + 2] = z; - this.array[index + 3] = w; - return this; - } - - onUpload(callback) { - this.onUploadCallback = callback; - return this; - } - - clone() { - return new this.constructor(this.array, this.itemSize).copy(this); - } - - toJSON() { - const data = { - itemSize: this.itemSize, - type: this.array.constructor.name, - array: Array.prototype.slice.call(this.array), - normalized: this.normalized - }; - if (this.name !== '') data.name = this.name; - if (this.usage !== StaticDrawUsage) data.usage = this.usage; - if (this.updateRange.offset !== 0 || this.updateRange.count !== -1) data.updateRange = this.updateRange; - return data; - } - - } - - BufferAttribute.prototype.isBufferAttribute = true; // - - class Int8BufferAttribute extends BufferAttribute { - constructor(array, itemSize, normalized) { - super(new Int8Array(array), itemSize, normalized); - } - - } - - class Uint8BufferAttribute extends BufferAttribute { - constructor(array, itemSize, normalized) { - super(new Uint8Array(array), itemSize, normalized); - } - - } - - class Uint8ClampedBufferAttribute extends BufferAttribute { - constructor(array, itemSize, normalized) { - super(new Uint8ClampedArray(array), itemSize, normalized); - } - - } - - class Int16BufferAttribute extends BufferAttribute { - constructor(array, itemSize, normalized) { - super(new Int16Array(array), itemSize, normalized); - } - - } - - class Uint16BufferAttribute extends BufferAttribute { - constructor(array, itemSize, normalized) { - super(new Uint16Array(array), itemSize, normalized); - } - - } - - class Int32BufferAttribute extends BufferAttribute { - constructor(array, itemSize, normalized) { - super(new Int32Array(array), itemSize, normalized); - } - - } - - class Uint32BufferAttribute extends BufferAttribute { - constructor(array, itemSize, normalized) { - super(new Uint32Array(array), itemSize, normalized); - } - - } - - class Float16BufferAttribute extends BufferAttribute { - constructor(array, itemSize, normalized) { - super(new Uint16Array(array), itemSize, normalized); - } - - } - - Float16BufferAttribute.prototype.isFloat16BufferAttribute = true; - - class Float32BufferAttribute extends BufferAttribute { - constructor(array, itemSize, normalized) { - super(new Float32Array(array), itemSize, normalized); - } - - } - - class Float64BufferAttribute extends BufferAttribute { - constructor(array, itemSize, normalized) { - super(new Float64Array(array), itemSize, normalized); - } - - } // - - let _id$1 = 0; - - const _m1 = /*@__PURE__*/new Matrix4(); - - const _obj = /*@__PURE__*/new Object3D(); - - const _offset = /*@__PURE__*/new Vector3(); - - const _box$1 = /*@__PURE__*/new Box3(); - - const _boxMorphTargets = /*@__PURE__*/new Box3(); - - const _vector$8 = /*@__PURE__*/new Vector3(); - - class BufferGeometry extends EventDispatcher { - constructor() { - super(); - Object.defineProperty(this, 'id', { - value: _id$1++ - }); - this.uuid = generateUUID(); - this.name = ''; - this.type = 'BufferGeometry'; - this.index = null; - this.attributes = {}; - this.morphAttributes = {}; - this.morphTargetsRelative = false; - this.groups = []; - this.boundingBox = null; - this.boundingSphere = null; - this.drawRange = { - start: 0, - count: Infinity - }; - this.userData = {}; - } - - getIndex() { - return this.index; - } - - setIndex(index) { - if (Array.isArray(index)) { - this.index = new (arrayNeedsUint32(index) ? Uint32BufferAttribute : Uint16BufferAttribute)(index, 1); - } else { - this.index = index; - } - - return this; - } - - getAttribute(name) { - return this.attributes[name]; - } - - setAttribute(name, attribute) { - this.attributes[name] = attribute; - return this; - } - - deleteAttribute(name) { - delete this.attributes[name]; - return this; - } - - hasAttribute(name) { - return this.attributes[name] !== undefined; - } - - addGroup(start, count, materialIndex = 0) { - this.groups.push({ - start: start, - count: count, - materialIndex: materialIndex - }); - } - - clearGroups() { - this.groups = []; - } - - setDrawRange(start, count) { - this.drawRange.start = start; - this.drawRange.count = count; - } - - applyMatrix4(matrix) { - const position = this.attributes.position; - - if (position !== undefined) { - position.applyMatrix4(matrix); - position.needsUpdate = true; - } - - const normal = this.attributes.normal; - - if (normal !== undefined) { - const normalMatrix = new Matrix3().getNormalMatrix(matrix); - normal.applyNormalMatrix(normalMatrix); - normal.needsUpdate = true; - } - - const tangent = this.attributes.tangent; - - if (tangent !== undefined) { - tangent.transformDirection(matrix); - tangent.needsUpdate = true; - } - - if (this.boundingBox !== null) { - this.computeBoundingBox(); - } - - if (this.boundingSphere !== null) { - this.computeBoundingSphere(); - } - - return this; - } - - applyQuaternion(q) { - _m1.makeRotationFromQuaternion(q); - - this.applyMatrix4(_m1); - return this; - } - - rotateX(angle) { - // rotate geometry around world x-axis - _m1.makeRotationX(angle); - - this.applyMatrix4(_m1); - return this; - } - - rotateY(angle) { - // rotate geometry around world y-axis - _m1.makeRotationY(angle); - - this.applyMatrix4(_m1); - return this; - } - - rotateZ(angle) { - // rotate geometry around world z-axis - _m1.makeRotationZ(angle); - - this.applyMatrix4(_m1); - return this; - } - - translate(x, y, z) { - // translate geometry - _m1.makeTranslation(x, y, z); - - this.applyMatrix4(_m1); - return this; - } - - scale(x, y, z) { - // scale geometry - _m1.makeScale(x, y, z); - - this.applyMatrix4(_m1); - return this; - } - - lookAt(vector) { - _obj.lookAt(vector); - - _obj.updateMatrix(); - - this.applyMatrix4(_obj.matrix); - return this; - } - - center() { - this.computeBoundingBox(); - this.boundingBox.getCenter(_offset).negate(); - this.translate(_offset.x, _offset.y, _offset.z); - return this; - } - - setFromPoints(points) { - const position = []; - - for (let i = 0, l = points.length; i < l; i++) { - const point = points[i]; - position.push(point.x, point.y, point.z || 0); - } - - this.setAttribute('position', new Float32BufferAttribute(position, 3)); - return this; - } - - computeBoundingBox() { - if (this.boundingBox === null) { - this.boundingBox = new Box3(); - } - - const position = this.attributes.position; - const morphAttributesPosition = this.morphAttributes.position; - - if (position && position.isGLBufferAttribute) { - console.error('THREE.BufferGeometry.computeBoundingBox(): GLBufferAttribute requires a manual bounding box. Alternatively set "mesh.frustumCulled" to "false".', this); - this.boundingBox.set(new Vector3(-Infinity, -Infinity, -Infinity), new Vector3(+Infinity, +Infinity, +Infinity)); - return; - } - - if (position !== undefined) { - this.boundingBox.setFromBufferAttribute(position); // process morph attributes if present - - if (morphAttributesPosition) { - for (let i = 0, il = morphAttributesPosition.length; i < il; i++) { - const morphAttribute = morphAttributesPosition[i]; - - _box$1.setFromBufferAttribute(morphAttribute); - - if (this.morphTargetsRelative) { - _vector$8.addVectors(this.boundingBox.min, _box$1.min); - - this.boundingBox.expandByPoint(_vector$8); - - _vector$8.addVectors(this.boundingBox.max, _box$1.max); - - this.boundingBox.expandByPoint(_vector$8); - } else { - this.boundingBox.expandByPoint(_box$1.min); - this.boundingBox.expandByPoint(_box$1.max); - } - } - } - } else { - this.boundingBox.makeEmpty(); - } - - if (isNaN(this.boundingBox.min.x) || isNaN(this.boundingBox.min.y) || isNaN(this.boundingBox.min.z)) { - console.error('THREE.BufferGeometry.computeBoundingBox(): Computed min/max have NaN values. The "position" attribute is likely to have NaN values.', this); - } - } - - computeBoundingSphere() { - if (this.boundingSphere === null) { - this.boundingSphere = new Sphere(); - } - - const position = this.attributes.position; - const morphAttributesPosition = this.morphAttributes.position; - - if (position && position.isGLBufferAttribute) { - console.error('THREE.BufferGeometry.computeBoundingSphere(): GLBufferAttribute requires a manual bounding sphere. Alternatively set "mesh.frustumCulled" to "false".', this); - this.boundingSphere.set(new Vector3(), Infinity); - return; - } - - if (position) { - // first, find the center of the bounding sphere - const center = this.boundingSphere.center; - - _box$1.setFromBufferAttribute(position); // process morph attributes if present - - - if (morphAttributesPosition) { - for (let i = 0, il = morphAttributesPosition.length; i < il; i++) { - const morphAttribute = morphAttributesPosition[i]; - - _boxMorphTargets.setFromBufferAttribute(morphAttribute); - - if (this.morphTargetsRelative) { - _vector$8.addVectors(_box$1.min, _boxMorphTargets.min); - - _box$1.expandByPoint(_vector$8); - - _vector$8.addVectors(_box$1.max, _boxMorphTargets.max); - - _box$1.expandByPoint(_vector$8); - } else { - _box$1.expandByPoint(_boxMorphTargets.min); - - _box$1.expandByPoint(_boxMorphTargets.max); - } - } - } - - _box$1.getCenter(center); // second, try to find a boundingSphere with a radius smaller than the - // boundingSphere of the boundingBox: sqrt(3) smaller in the best case - - - let maxRadiusSq = 0; - - for (let i = 0, il = position.count; i < il; i++) { - _vector$8.fromBufferAttribute(position, i); - - maxRadiusSq = Math.max(maxRadiusSq, center.distanceToSquared(_vector$8)); - } // process morph attributes if present - - - if (morphAttributesPosition) { - for (let i = 0, il = morphAttributesPosition.length; i < il; i++) { - const morphAttribute = morphAttributesPosition[i]; - const morphTargetsRelative = this.morphTargetsRelative; - - for (let j = 0, jl = morphAttribute.count; j < jl; j++) { - _vector$8.fromBufferAttribute(morphAttribute, j); - - if (morphTargetsRelative) { - _offset.fromBufferAttribute(position, j); - - _vector$8.add(_offset); - } - - maxRadiusSq = Math.max(maxRadiusSq, center.distanceToSquared(_vector$8)); - } - } - } - - this.boundingSphere.radius = Math.sqrt(maxRadiusSq); - - if (isNaN(this.boundingSphere.radius)) { - console.error('THREE.BufferGeometry.computeBoundingSphere(): Computed radius is NaN. The "position" attribute is likely to have NaN values.', this); - } - } - } - - computeTangents() { - const index = this.index; - const attributes = this.attributes; // based on http://www.terathon.com/code/tangent.html - // (per vertex tangents) - - if (index === null || attributes.position === undefined || attributes.normal === undefined || attributes.uv === undefined) { - console.error('THREE.BufferGeometry: .computeTangents() failed. Missing required attributes (index, position, normal or uv)'); - return; - } - - const indices = index.array; - const positions = attributes.position.array; - const normals = attributes.normal.array; - const uvs = attributes.uv.array; - const nVertices = positions.length / 3; - - if (this.hasAttribute('tangent') === false) { - this.setAttribute('tangent', new BufferAttribute(new Float32Array(4 * nVertices), 4)); - } - - const tangents = this.getAttribute('tangent').array; - const tan1 = [], - tan2 = []; - - for (let i = 0; i < nVertices; i++) { - tan1[i] = new Vector3(); - tan2[i] = new Vector3(); - } - - const vA = new Vector3(), - vB = new Vector3(), - vC = new Vector3(), - uvA = new Vector2(), - uvB = new Vector2(), - uvC = new Vector2(), - sdir = new Vector3(), - tdir = new Vector3(); - - function handleTriangle(a, b, c) { - vA.fromArray(positions, a * 3); - vB.fromArray(positions, b * 3); - vC.fromArray(positions, c * 3); - uvA.fromArray(uvs, a * 2); - uvB.fromArray(uvs, b * 2); - uvC.fromArray(uvs, c * 2); - vB.sub(vA); - vC.sub(vA); - uvB.sub(uvA); - uvC.sub(uvA); - const r = 1.0 / (uvB.x * uvC.y - uvC.x * uvB.y); // silently ignore degenerate uv triangles having coincident or colinear vertices - - if (!isFinite(r)) return; - sdir.copy(vB).multiplyScalar(uvC.y).addScaledVector(vC, -uvB.y).multiplyScalar(r); - tdir.copy(vC).multiplyScalar(uvB.x).addScaledVector(vB, -uvC.x).multiplyScalar(r); - tan1[a].add(sdir); - tan1[b].add(sdir); - tan1[c].add(sdir); - tan2[a].add(tdir); - tan2[b].add(tdir); - tan2[c].add(tdir); - } - - let groups = this.groups; - - if (groups.length === 0) { - groups = [{ - start: 0, - count: indices.length - }]; - } - - for (let i = 0, il = groups.length; i < il; ++i) { - const group = groups[i]; - const start = group.start; - const count = group.count; - - for (let j = start, jl = start + count; j < jl; j += 3) { - handleTriangle(indices[j + 0], indices[j + 1], indices[j + 2]); - } - } - - const tmp = new Vector3(), - tmp2 = new Vector3(); - const n = new Vector3(), - n2 = new Vector3(); - - function handleVertex(v) { - n.fromArray(normals, v * 3); - n2.copy(n); - const t = tan1[v]; // Gram-Schmidt orthogonalize - - tmp.copy(t); - tmp.sub(n.multiplyScalar(n.dot(t))).normalize(); // Calculate handedness - - tmp2.crossVectors(n2, t); - const test = tmp2.dot(tan2[v]); - const w = test < 0.0 ? -1.0 : 1.0; - tangents[v * 4] = tmp.x; - tangents[v * 4 + 1] = tmp.y; - tangents[v * 4 + 2] = tmp.z; - tangents[v * 4 + 3] = w; - } - - for (let i = 0, il = groups.length; i < il; ++i) { - const group = groups[i]; - const start = group.start; - const count = group.count; - - for (let j = start, jl = start + count; j < jl; j += 3) { - handleVertex(indices[j + 0]); - handleVertex(indices[j + 1]); - handleVertex(indices[j + 2]); - } - } - } - - computeVertexNormals() { - const index = this.index; - const positionAttribute = this.getAttribute('position'); - - if (positionAttribute !== undefined) { - let normalAttribute = this.getAttribute('normal'); - - if (normalAttribute === undefined) { - normalAttribute = new BufferAttribute(new Float32Array(positionAttribute.count * 3), 3); - this.setAttribute('normal', normalAttribute); - } else { - // reset existing normals to zero - for (let i = 0, il = normalAttribute.count; i < il; i++) { - normalAttribute.setXYZ(i, 0, 0, 0); - } - } - - const pA = new Vector3(), - pB = new Vector3(), - pC = new Vector3(); - const nA = new Vector3(), - nB = new Vector3(), - nC = new Vector3(); - const cb = new Vector3(), - ab = new Vector3(); // indexed elements - - if (index) { - for (let i = 0, il = index.count; i < il; i += 3) { - const vA = index.getX(i + 0); - const vB = index.getX(i + 1); - const vC = index.getX(i + 2); - pA.fromBufferAttribute(positionAttribute, vA); - pB.fromBufferAttribute(positionAttribute, vB); - pC.fromBufferAttribute(positionAttribute, vC); - cb.subVectors(pC, pB); - ab.subVectors(pA, pB); - cb.cross(ab); - nA.fromBufferAttribute(normalAttribute, vA); - nB.fromBufferAttribute(normalAttribute, vB); - nC.fromBufferAttribute(normalAttribute, vC); - nA.add(cb); - nB.add(cb); - nC.add(cb); - normalAttribute.setXYZ(vA, nA.x, nA.y, nA.z); - normalAttribute.setXYZ(vB, nB.x, nB.y, nB.z); - normalAttribute.setXYZ(vC, nC.x, nC.y, nC.z); - } - } else { - // non-indexed elements (unconnected triangle soup) - for (let i = 0, il = positionAttribute.count; i < il; i += 3) { - pA.fromBufferAttribute(positionAttribute, i + 0); - pB.fromBufferAttribute(positionAttribute, i + 1); - pC.fromBufferAttribute(positionAttribute, i + 2); - cb.subVectors(pC, pB); - ab.subVectors(pA, pB); - cb.cross(ab); - normalAttribute.setXYZ(i + 0, cb.x, cb.y, cb.z); - normalAttribute.setXYZ(i + 1, cb.x, cb.y, cb.z); - normalAttribute.setXYZ(i + 2, cb.x, cb.y, cb.z); - } - } - - this.normalizeNormals(); - normalAttribute.needsUpdate = true; - } - } - - merge(geometry, offset) { - if (!(geometry && geometry.isBufferGeometry)) { - console.error('THREE.BufferGeometry.merge(): geometry not an instance of THREE.BufferGeometry.', geometry); - return; - } - - if (offset === undefined) { - offset = 0; - console.warn('THREE.BufferGeometry.merge(): Overwriting original geometry, starting at offset=0. ' + 'Use BufferGeometryUtils.mergeBufferGeometries() for lossless merge.'); - } - - const attributes = this.attributes; - - for (const key in attributes) { - if (geometry.attributes[key] === undefined) continue; - const attribute1 = attributes[key]; - const attributeArray1 = attribute1.array; - const attribute2 = geometry.attributes[key]; - const attributeArray2 = attribute2.array; - const attributeOffset = attribute2.itemSize * offset; - const length = Math.min(attributeArray2.length, attributeArray1.length - attributeOffset); - - for (let i = 0, j = attributeOffset; i < length; i++, j++) { - attributeArray1[j] = attributeArray2[i]; - } - } - - return this; - } - - normalizeNormals() { - const normals = this.attributes.normal; - - for (let i = 0, il = normals.count; i < il; i++) { - _vector$8.fromBufferAttribute(normals, i); - - _vector$8.normalize(); - - normals.setXYZ(i, _vector$8.x, _vector$8.y, _vector$8.z); - } - } - - toNonIndexed() { - function convertBufferAttribute(attribute, indices) { - const array = attribute.array; - const itemSize = attribute.itemSize; - const normalized = attribute.normalized; - const array2 = new array.constructor(indices.length * itemSize); - let index = 0, - index2 = 0; - - for (let i = 0, l = indices.length; i < l; i++) { - if (attribute.isInterleavedBufferAttribute) { - index = indices[i] * attribute.data.stride + attribute.offset; - } else { - index = indices[i] * itemSize; - } - - for (let j = 0; j < itemSize; j++) { - array2[index2++] = array[index++]; - } - } - - return new BufferAttribute(array2, itemSize, normalized); - } // - - - if (this.index === null) { - console.warn('THREE.BufferGeometry.toNonIndexed(): BufferGeometry is already non-indexed.'); - return this; - } - - const geometry2 = new BufferGeometry(); - const indices = this.index.array; - const attributes = this.attributes; // attributes - - for (const name in attributes) { - const attribute = attributes[name]; - const newAttribute = convertBufferAttribute(attribute, indices); - geometry2.setAttribute(name, newAttribute); - } // morph attributes - - - const morphAttributes = this.morphAttributes; - - for (const name in morphAttributes) { - const morphArray = []; - const morphAttribute = morphAttributes[name]; // morphAttribute: array of Float32BufferAttributes - - for (let i = 0, il = morphAttribute.length; i < il; i++) { - const attribute = morphAttribute[i]; - const newAttribute = convertBufferAttribute(attribute, indices); - morphArray.push(newAttribute); - } - - geometry2.morphAttributes[name] = morphArray; - } - - geometry2.morphTargetsRelative = this.morphTargetsRelative; // groups - - const groups = this.groups; - - for (let i = 0, l = groups.length; i < l; i++) { - const group = groups[i]; - geometry2.addGroup(group.start, group.count, group.materialIndex); - } - - return geometry2; - } - - toJSON() { - const data = { - metadata: { - version: 4.5, - type: 'BufferGeometry', - generator: 'BufferGeometry.toJSON' - } - }; // standard BufferGeometry serialization - - data.uuid = this.uuid; - data.type = this.type; - if (this.name !== '') data.name = this.name; - if (Object.keys(this.userData).length > 0) data.userData = this.userData; - - if (this.parameters !== undefined) { - const parameters = this.parameters; - - for (const key in parameters) { - if (parameters[key] !== undefined) data[key] = parameters[key]; - } - - return data; - } // for simplicity the code assumes attributes are not shared across geometries, see #15811 - - - data.data = { - attributes: {} - }; - const index = this.index; - - if (index !== null) { - data.data.index = { - type: index.array.constructor.name, - array: Array.prototype.slice.call(index.array) - }; - } - - const attributes = this.attributes; - - for (const key in attributes) { - const attribute = attributes[key]; - data.data.attributes[key] = attribute.toJSON(data.data); - } - - const morphAttributes = {}; - let hasMorphAttributes = false; - - for (const key in this.morphAttributes) { - const attributeArray = this.morphAttributes[key]; - const array = []; - - for (let i = 0, il = attributeArray.length; i < il; i++) { - const attribute = attributeArray[i]; - array.push(attribute.toJSON(data.data)); - } - - if (array.length > 0) { - morphAttributes[key] = array; - hasMorphAttributes = true; - } - } - - if (hasMorphAttributes) { - data.data.morphAttributes = morphAttributes; - data.data.morphTargetsRelative = this.morphTargetsRelative; - } - - const groups = this.groups; - - if (groups.length > 0) { - data.data.groups = JSON.parse(JSON.stringify(groups)); - } - - const boundingSphere = this.boundingSphere; - - if (boundingSphere !== null) { - data.data.boundingSphere = { - center: boundingSphere.center.toArray(), - radius: boundingSphere.radius - }; - } - - return data; - } - - clone() { - return new this.constructor().copy(this); - } - - copy(source) { - // reset - this.index = null; - this.attributes = {}; - this.morphAttributes = {}; - this.groups = []; - this.boundingBox = null; - this.boundingSphere = null; // used for storing cloned, shared data - - const data = {}; // name - - this.name = source.name; // index - - const index = source.index; - - if (index !== null) { - this.setIndex(index.clone(data)); - } // attributes - - - const attributes = source.attributes; - - for (const name in attributes) { - const attribute = attributes[name]; - this.setAttribute(name, attribute.clone(data)); - } // morph attributes - - - const morphAttributes = source.morphAttributes; - - for (const name in morphAttributes) { - const array = []; - const morphAttribute = morphAttributes[name]; // morphAttribute: array of Float32BufferAttributes - - for (let i = 0, l = morphAttribute.length; i < l; i++) { - array.push(morphAttribute[i].clone(data)); - } - - this.morphAttributes[name] = array; - } - - this.morphTargetsRelative = source.morphTargetsRelative; // groups - - const groups = source.groups; - - for (let i = 0, l = groups.length; i < l; i++) { - const group = groups[i]; - this.addGroup(group.start, group.count, group.materialIndex); - } // bounding box - - - const boundingBox = source.boundingBox; - - if (boundingBox !== null) { - this.boundingBox = boundingBox.clone(); - } // bounding sphere - - - const boundingSphere = source.boundingSphere; - - if (boundingSphere !== null) { - this.boundingSphere = boundingSphere.clone(); - } // draw range - - - this.drawRange.start = source.drawRange.start; - this.drawRange.count = source.drawRange.count; // user data - - this.userData = source.userData; // geometry generator parameters - - if (source.parameters !== undefined) this.parameters = Object.assign({}, source.parameters); - return this; - } - - dispose() { - this.dispatchEvent({ - type: 'dispose' - }); - } - - } - - BufferGeometry.prototype.isBufferGeometry = true; - - const _inverseMatrix$2 = /*@__PURE__*/new Matrix4(); - - const _ray$2 = /*@__PURE__*/new Ray(); - - const _sphere$3 = /*@__PURE__*/new Sphere(); - - const _vA$1 = /*@__PURE__*/new Vector3(); - - const _vB$1 = /*@__PURE__*/new Vector3(); - - const _vC$1 = /*@__PURE__*/new Vector3(); - - const _tempA = /*@__PURE__*/new Vector3(); - - const _tempB = /*@__PURE__*/new Vector3(); - - const _tempC = /*@__PURE__*/new Vector3(); - - const _morphA = /*@__PURE__*/new Vector3(); - - const _morphB = /*@__PURE__*/new Vector3(); - - const _morphC = /*@__PURE__*/new Vector3(); - - const _uvA$1 = /*@__PURE__*/new Vector2(); - - const _uvB$1 = /*@__PURE__*/new Vector2(); - - const _uvC$1 = /*@__PURE__*/new Vector2(); - - const _intersectionPoint = /*@__PURE__*/new Vector3(); - - const _intersectionPointWorld = /*@__PURE__*/new Vector3(); - - class Mesh extends Object3D { - constructor(geometry = new BufferGeometry(), material = new MeshBasicMaterial()) { - super(); - this.type = 'Mesh'; - this.geometry = geometry; - this.material = material; - this.updateMorphTargets(); - } - - copy(source) { - super.copy(source); - - if (source.morphTargetInfluences !== undefined) { - this.morphTargetInfluences = source.morphTargetInfluences.slice(); - } - - if (source.morphTargetDictionary !== undefined) { - this.morphTargetDictionary = Object.assign({}, source.morphTargetDictionary); - } - - this.material = source.material; - this.geometry = source.geometry; - return this; - } - - updateMorphTargets() { - const geometry = this.geometry; - - if (geometry.isBufferGeometry) { - const morphAttributes = geometry.morphAttributes; - const keys = Object.keys(morphAttributes); - - if (keys.length > 0) { - const morphAttribute = morphAttributes[keys[0]]; - - if (morphAttribute !== undefined) { - this.morphTargetInfluences = []; - this.morphTargetDictionary = {}; - - for (let m = 0, ml = morphAttribute.length; m < ml; m++) { - const name = morphAttribute[m].name || String(m); - this.morphTargetInfluences.push(0); - this.morphTargetDictionary[name] = m; - } - } - } - } else { - const morphTargets = geometry.morphTargets; - - if (morphTargets !== undefined && morphTargets.length > 0) { - console.error('THREE.Mesh.updateMorphTargets() no longer supports THREE.Geometry. Use THREE.BufferGeometry instead.'); - } - } - } - - raycast(raycaster, intersects) { - const geometry = this.geometry; - const material = this.material; - const matrixWorld = this.matrixWorld; - if (material === undefined) return; // Checking boundingSphere distance to ray - - if (geometry.boundingSphere === null) geometry.computeBoundingSphere(); - - _sphere$3.copy(geometry.boundingSphere); - - _sphere$3.applyMatrix4(matrixWorld); - - if (raycaster.ray.intersectsSphere(_sphere$3) === false) return; // - - _inverseMatrix$2.copy(matrixWorld).invert(); - - _ray$2.copy(raycaster.ray).applyMatrix4(_inverseMatrix$2); // Check boundingBox before continuing - - - if (geometry.boundingBox !== null) { - if (_ray$2.intersectsBox(geometry.boundingBox) === false) return; - } - - let intersection; - - if (geometry.isBufferGeometry) { - const index = geometry.index; - const position = geometry.attributes.position; - const morphPosition = geometry.morphAttributes.position; - const morphTargetsRelative = geometry.morphTargetsRelative; - const uv = geometry.attributes.uv; - const uv2 = geometry.attributes.uv2; - const groups = geometry.groups; - const drawRange = geometry.drawRange; - - if (index !== null) { - // indexed buffer geometry - if (Array.isArray(material)) { - for (let i = 0, il = groups.length; i < il; i++) { - const group = groups[i]; - const groupMaterial = material[group.materialIndex]; - const start = Math.max(group.start, drawRange.start); - const end = Math.min(index.count, Math.min(group.start + group.count, drawRange.start + drawRange.count)); - - for (let j = start, jl = end; j < jl; j += 3) { - const a = index.getX(j); - const b = index.getX(j + 1); - const c = index.getX(j + 2); - intersection = checkBufferGeometryIntersection(this, groupMaterial, raycaster, _ray$2, position, morphPosition, morphTargetsRelative, uv, uv2, a, b, c); - - if (intersection) { - intersection.faceIndex = Math.floor(j / 3); // triangle number in indexed buffer semantics - - intersection.face.materialIndex = group.materialIndex; - intersects.push(intersection); - } - } - } - } else { - const start = Math.max(0, drawRange.start); - const end = Math.min(index.count, drawRange.start + drawRange.count); - - for (let i = start, il = end; i < il; i += 3) { - const a = index.getX(i); - const b = index.getX(i + 1); - const c = index.getX(i + 2); - intersection = checkBufferGeometryIntersection(this, material, raycaster, _ray$2, position, morphPosition, morphTargetsRelative, uv, uv2, a, b, c); - - if (intersection) { - intersection.faceIndex = Math.floor(i / 3); // triangle number in indexed buffer semantics - - intersects.push(intersection); - } - } - } - } else if (position !== undefined) { - // non-indexed buffer geometry - if (Array.isArray(material)) { - for (let i = 0, il = groups.length; i < il; i++) { - const group = groups[i]; - const groupMaterial = material[group.materialIndex]; - const start = Math.max(group.start, drawRange.start); - const end = Math.min(position.count, Math.min(group.start + group.count, drawRange.start + drawRange.count)); - - for (let j = start, jl = end; j < jl; j += 3) { - const a = j; - const b = j + 1; - const c = j + 2; - intersection = checkBufferGeometryIntersection(this, groupMaterial, raycaster, _ray$2, position, morphPosition, morphTargetsRelative, uv, uv2, a, b, c); - - if (intersection) { - intersection.faceIndex = Math.floor(j / 3); // triangle number in non-indexed buffer semantics - - intersection.face.materialIndex = group.materialIndex; - intersects.push(intersection); - } - } - } - } else { - const start = Math.max(0, drawRange.start); - const end = Math.min(position.count, drawRange.start + drawRange.count); - - for (let i = start, il = end; i < il; i += 3) { - const a = i; - const b = i + 1; - const c = i + 2; - intersection = checkBufferGeometryIntersection(this, material, raycaster, _ray$2, position, morphPosition, morphTargetsRelative, uv, uv2, a, b, c); - - if (intersection) { - intersection.faceIndex = Math.floor(i / 3); // triangle number in non-indexed buffer semantics - - intersects.push(intersection); - } - } - } - } - } else if (geometry.isGeometry) { - console.error('THREE.Mesh.raycast() no longer supports THREE.Geometry. Use THREE.BufferGeometry instead.'); - } - } - - } - - Mesh.prototype.isMesh = true; - - function checkIntersection(object, material, raycaster, ray, pA, pB, pC, point) { - let intersect; - - if (material.side === BackSide) { - intersect = ray.intersectTriangle(pC, pB, pA, true, point); - } else { - intersect = ray.intersectTriangle(pA, pB, pC, material.side !== DoubleSide, point); - } - - if (intersect === null) return null; - - _intersectionPointWorld.copy(point); - - _intersectionPointWorld.applyMatrix4(object.matrixWorld); - - const distance = raycaster.ray.origin.distanceTo(_intersectionPointWorld); - if (distance < raycaster.near || distance > raycaster.far) return null; - return { - distance: distance, - point: _intersectionPointWorld.clone(), - object: object - }; - } - - function checkBufferGeometryIntersection(object, material, raycaster, ray, position, morphPosition, morphTargetsRelative, uv, uv2, a, b, c) { - _vA$1.fromBufferAttribute(position, a); - - _vB$1.fromBufferAttribute(position, b); - - _vC$1.fromBufferAttribute(position, c); - - const morphInfluences = object.morphTargetInfluences; - - if (morphPosition && morphInfluences) { - _morphA.set(0, 0, 0); - - _morphB.set(0, 0, 0); - - _morphC.set(0, 0, 0); - - for (let i = 0, il = morphPosition.length; i < il; i++) { - const influence = morphInfluences[i]; - const morphAttribute = morphPosition[i]; - if (influence === 0) continue; - - _tempA.fromBufferAttribute(morphAttribute, a); - - _tempB.fromBufferAttribute(morphAttribute, b); - - _tempC.fromBufferAttribute(morphAttribute, c); - - if (morphTargetsRelative) { - _morphA.addScaledVector(_tempA, influence); - - _morphB.addScaledVector(_tempB, influence); - - _morphC.addScaledVector(_tempC, influence); - } else { - _morphA.addScaledVector(_tempA.sub(_vA$1), influence); - - _morphB.addScaledVector(_tempB.sub(_vB$1), influence); - - _morphC.addScaledVector(_tempC.sub(_vC$1), influence); - } - } - - _vA$1.add(_morphA); - - _vB$1.add(_morphB); - - _vC$1.add(_morphC); - } - - if (object.isSkinnedMesh) { - object.boneTransform(a, _vA$1); - object.boneTransform(b, _vB$1); - object.boneTransform(c, _vC$1); - } - - const intersection = checkIntersection(object, material, raycaster, ray, _vA$1, _vB$1, _vC$1, _intersectionPoint); - - if (intersection) { - if (uv) { - _uvA$1.fromBufferAttribute(uv, a); - - _uvB$1.fromBufferAttribute(uv, b); - - _uvC$1.fromBufferAttribute(uv, c); - - intersection.uv = Triangle.getUV(_intersectionPoint, _vA$1, _vB$1, _vC$1, _uvA$1, _uvB$1, _uvC$1, new Vector2()); - } - - if (uv2) { - _uvA$1.fromBufferAttribute(uv2, a); - - _uvB$1.fromBufferAttribute(uv2, b); - - _uvC$1.fromBufferAttribute(uv2, c); - - intersection.uv2 = Triangle.getUV(_intersectionPoint, _vA$1, _vB$1, _vC$1, _uvA$1, _uvB$1, _uvC$1, new Vector2()); - } - - const face = { - a: a, - b: b, - c: c, - normal: new Vector3(), - materialIndex: 0 - }; - Triangle.getNormal(_vA$1, _vB$1, _vC$1, face.normal); - intersection.face = face; - } - - return intersection; - } - - class BoxGeometry extends BufferGeometry { - constructor(width = 1, height = 1, depth = 1, widthSegments = 1, heightSegments = 1, depthSegments = 1) { - super(); - this.type = 'BoxGeometry'; - this.parameters = { - width: width, - height: height, - depth: depth, - widthSegments: widthSegments, - heightSegments: heightSegments, - depthSegments: depthSegments - }; - const scope = this; // segments - - widthSegments = Math.floor(widthSegments); - heightSegments = Math.floor(heightSegments); - depthSegments = Math.floor(depthSegments); // buffers - - const indices = []; - const vertices = []; - const normals = []; - const uvs = []; // helper variables - - let numberOfVertices = 0; - let groupStart = 0; // build each side of the box geometry - - buildPlane('z', 'y', 'x', -1, -1, depth, height, width, depthSegments, heightSegments, 0); // px - - buildPlane('z', 'y', 'x', 1, -1, depth, height, -width, depthSegments, heightSegments, 1); // nx - - buildPlane('x', 'z', 'y', 1, 1, width, depth, height, widthSegments, depthSegments, 2); // py - - buildPlane('x', 'z', 'y', 1, -1, width, depth, -height, widthSegments, depthSegments, 3); // ny - - buildPlane('x', 'y', 'z', 1, -1, width, height, depth, widthSegments, heightSegments, 4); // pz - - buildPlane('x', 'y', 'z', -1, -1, width, height, -depth, widthSegments, heightSegments, 5); // nz - // build geometry - - this.setIndex(indices); - this.setAttribute('position', new Float32BufferAttribute(vertices, 3)); - this.setAttribute('normal', new Float32BufferAttribute(normals, 3)); - this.setAttribute('uv', new Float32BufferAttribute(uvs, 2)); - - function buildPlane(u, v, w, udir, vdir, width, height, depth, gridX, gridY, materialIndex) { - const segmentWidth = width / gridX; - const segmentHeight = height / gridY; - const widthHalf = width / 2; - const heightHalf = height / 2; - const depthHalf = depth / 2; - const gridX1 = gridX + 1; - const gridY1 = gridY + 1; - let vertexCounter = 0; - let groupCount = 0; - const vector = new Vector3(); // generate vertices, normals and uvs - - for (let iy = 0; iy < gridY1; iy++) { - const y = iy * segmentHeight - heightHalf; - - for (let ix = 0; ix < gridX1; ix++) { - const x = ix * segmentWidth - widthHalf; // set values to correct vector component - - vector[u] = x * udir; - vector[v] = y * vdir; - vector[w] = depthHalf; // now apply vector to vertex buffer - - vertices.push(vector.x, vector.y, vector.z); // set values to correct vector component - - vector[u] = 0; - vector[v] = 0; - vector[w] = depth > 0 ? 1 : -1; // now apply vector to normal buffer - - normals.push(vector.x, vector.y, vector.z); // uvs - - uvs.push(ix / gridX); - uvs.push(1 - iy / gridY); // counters - - vertexCounter += 1; - } - } // indices - // 1. you need three indices to draw a single face - // 2. a single segment consists of two faces - // 3. so we need to generate six (2*3) indices per segment - - - for (let iy = 0; iy < gridY; iy++) { - for (let ix = 0; ix < gridX; ix++) { - const a = numberOfVertices + ix + gridX1 * iy; - const b = numberOfVertices + ix + gridX1 * (iy + 1); - const c = numberOfVertices + (ix + 1) + gridX1 * (iy + 1); - const d = numberOfVertices + (ix + 1) + gridX1 * iy; // faces - - indices.push(a, b, d); - indices.push(b, c, d); // increase counter - - groupCount += 6; - } - } // add a group to the geometry. this will ensure multi material support - - - scope.addGroup(groupStart, groupCount, materialIndex); // calculate new start value for groups - - groupStart += groupCount; // update total number of vertices - - numberOfVertices += vertexCounter; - } - } - - static fromJSON(data) { - return new BoxGeometry(data.width, data.height, data.depth, data.widthSegments, data.heightSegments, data.depthSegments); - } - - } - - /** - * Uniform Utilities - */ - function cloneUniforms(src) { - const dst = {}; - - for (const u in src) { - dst[u] = {}; - - for (const p in src[u]) { - const property = src[u][p]; - - if (property && (property.isColor || property.isMatrix3 || property.isMatrix4 || property.isVector2 || property.isVector3 || property.isVector4 || property.isTexture || property.isQuaternion)) { - dst[u][p] = property.clone(); - } else if (Array.isArray(property)) { - dst[u][p] = property.slice(); - } else { - dst[u][p] = property; - } - } - } - - return dst; - } - function mergeUniforms(uniforms) { - const merged = {}; - - for (let u = 0; u < uniforms.length; u++) { - const tmp = cloneUniforms(uniforms[u]); - - for (const p in tmp) { - merged[p] = tmp[p]; - } - } - - return merged; - } // Legacy - - const UniformsUtils = { - clone: cloneUniforms, - merge: mergeUniforms - }; - - var default_vertex = "void main() {\n\tgl_Position = projectionMatrix * modelViewMatrix * vec4( position, 1.0 );\n}"; - - var default_fragment = "void main() {\n\tgl_FragColor = vec4( 1.0, 0.0, 0.0, 1.0 );\n}"; - - class ShaderMaterial extends Material { - constructor(parameters) { - super(); - this.type = 'ShaderMaterial'; - this.defines = {}; - this.uniforms = {}; - this.vertexShader = default_vertex; - this.fragmentShader = default_fragment; - this.linewidth = 1; - this.wireframe = false; - this.wireframeLinewidth = 1; - this.fog = false; // set to use scene fog - - this.lights = false; // set to use scene lights - - this.clipping = false; // set to use user-defined clipping planes - - this.extensions = { - derivatives: false, - // set to use derivatives - fragDepth: false, - // set to use fragment depth values - drawBuffers: false, - // set to use draw buffers - shaderTextureLOD: false // set to use shader texture LOD - - }; // When rendered geometry doesn't include these attributes but the material does, - // use these default values in WebGL. This avoids errors when buffer data is missing. - - this.defaultAttributeValues = { - 'color': [1, 1, 1], - 'uv': [0, 0], - 'uv2': [0, 0] - }; - this.index0AttributeName = undefined; - this.uniformsNeedUpdate = false; - this.glslVersion = null; - - if (parameters !== undefined) { - if (parameters.attributes !== undefined) { - console.error('THREE.ShaderMaterial: attributes should now be defined in THREE.BufferGeometry instead.'); - } - - this.setValues(parameters); - } - } - - copy(source) { - super.copy(source); - this.fragmentShader = source.fragmentShader; - this.vertexShader = source.vertexShader; - this.uniforms = cloneUniforms(source.uniforms); - this.defines = Object.assign({}, source.defines); - this.wireframe = source.wireframe; - this.wireframeLinewidth = source.wireframeLinewidth; - this.fog = source.fog; - this.lights = source.lights; - this.clipping = source.clipping; - this.extensions = Object.assign({}, source.extensions); - this.glslVersion = source.glslVersion; - return this; - } - - toJSON(meta) { - const data = super.toJSON(meta); - data.glslVersion = this.glslVersion; - data.uniforms = {}; - - for (const name in this.uniforms) { - const uniform = this.uniforms[name]; - const value = uniform.value; - - if (value && value.isTexture) { - data.uniforms[name] = { - type: 't', - value: value.toJSON(meta).uuid - }; - } else if (value && value.isColor) { - data.uniforms[name] = { - type: 'c', - value: value.getHex() - }; - } else if (value && value.isVector2) { - data.uniforms[name] = { - type: 'v2', - value: value.toArray() - }; - } else if (value && value.isVector3) { - data.uniforms[name] = { - type: 'v3', - value: value.toArray() - }; - } else if (value && value.isVector4) { - data.uniforms[name] = { - type: 'v4', - value: value.toArray() - }; - } else if (value && value.isMatrix3) { - data.uniforms[name] = { - type: 'm3', - value: value.toArray() - }; - } else if (value && value.isMatrix4) { - data.uniforms[name] = { - type: 'm4', - value: value.toArray() - }; - } else { - data.uniforms[name] = { - value: value - }; // note: the array variants v2v, v3v, v4v, m4v and tv are not supported so far - } - } - - if (Object.keys(this.defines).length > 0) data.defines = this.defines; - data.vertexShader = this.vertexShader; - data.fragmentShader = this.fragmentShader; - const extensions = {}; - - for (const key in this.extensions) { - if (this.extensions[key] === true) extensions[key] = true; - } - - if (Object.keys(extensions).length > 0) data.extensions = extensions; - return data; - } - - } - - ShaderMaterial.prototype.isShaderMaterial = true; - - class Camera extends Object3D { - constructor() { - super(); - this.type = 'Camera'; - this.matrixWorldInverse = new Matrix4(); - this.projectionMatrix = new Matrix4(); - this.projectionMatrixInverse = new Matrix4(); - } - - copy(source, recursive) { - super.copy(source, recursive); - this.matrixWorldInverse.copy(source.matrixWorldInverse); - this.projectionMatrix.copy(source.projectionMatrix); - this.projectionMatrixInverse.copy(source.projectionMatrixInverse); - return this; - } - - getWorldDirection(target) { - this.updateWorldMatrix(true, false); - const e = this.matrixWorld.elements; - return target.set(-e[8], -e[9], -e[10]).normalize(); - } - - updateMatrixWorld(force) { - super.updateMatrixWorld(force); - this.matrixWorldInverse.copy(this.matrixWorld).invert(); - } - - updateWorldMatrix(updateParents, updateChildren) { - super.updateWorldMatrix(updateParents, updateChildren); - this.matrixWorldInverse.copy(this.matrixWorld).invert(); - } - - clone() { - return new this.constructor().copy(this); - } - - } - - Camera.prototype.isCamera = true; - - class PerspectiveCamera extends Camera { - constructor(fov = 50, aspect = 1, near = 0.1, far = 2000) { - super(); - this.type = 'PerspectiveCamera'; - this.fov = fov; - this.zoom = 1; - this.near = near; - this.far = far; - this.focus = 10; - this.aspect = aspect; - this.view = null; - this.filmGauge = 35; // width of the film (default in millimeters) - - this.filmOffset = 0; // horizontal film offset (same unit as gauge) - - this.updateProjectionMatrix(); - } - - copy(source, recursive) { - super.copy(source, recursive); - this.fov = source.fov; - this.zoom = source.zoom; - this.near = source.near; - this.far = source.far; - this.focus = source.focus; - this.aspect = source.aspect; - this.view = source.view === null ? null : Object.assign({}, source.view); - this.filmGauge = source.filmGauge; - this.filmOffset = source.filmOffset; - return this; - } - /** - * Sets the FOV by focal length in respect to the current .filmGauge. - * - * The default film gauge is 35, so that the focal length can be specified for - * a 35mm (full frame) camera. - * - * Values for focal length and film gauge must have the same unit. - */ - - - setFocalLength(focalLength) { - /** see {@link http://www.bobatkins.com/photography/technical/field_of_view.html} */ - const vExtentSlope = 0.5 * this.getFilmHeight() / focalLength; - this.fov = RAD2DEG * 2 * Math.atan(vExtentSlope); - this.updateProjectionMatrix(); - } - /** - * Calculates the focal length from the current .fov and .filmGauge. - */ - - - getFocalLength() { - const vExtentSlope = Math.tan(DEG2RAD * 0.5 * this.fov); - return 0.5 * this.getFilmHeight() / vExtentSlope; - } - - getEffectiveFOV() { - return RAD2DEG * 2 * Math.atan(Math.tan(DEG2RAD * 0.5 * this.fov) / this.zoom); - } - - getFilmWidth() { - // film not completely covered in portrait format (aspect < 1) - return this.filmGauge * Math.min(this.aspect, 1); - } - - getFilmHeight() { - // film not completely covered in landscape format (aspect > 1) - return this.filmGauge / Math.max(this.aspect, 1); - } - /** - * Sets an offset in a larger frustum. This is useful for multi-window or - * multi-monitor/multi-machine setups. - * - * For example, if you have 3x2 monitors and each monitor is 1920x1080 and - * the monitors are in grid like this - * - * +---+---+---+ - * | A | B | C | - * +---+---+---+ - * | D | E | F | - * +---+---+---+ - * - * then for each monitor you would call it like this - * - * const w = 1920; - * const h = 1080; - * const fullWidth = w * 3; - * const fullHeight = h * 2; - * - * --A-- - * camera.setViewOffset( fullWidth, fullHeight, w * 0, h * 0, w, h ); - * --B-- - * camera.setViewOffset( fullWidth, fullHeight, w * 1, h * 0, w, h ); - * --C-- - * camera.setViewOffset( fullWidth, fullHeight, w * 2, h * 0, w, h ); - * --D-- - * camera.setViewOffset( fullWidth, fullHeight, w * 0, h * 1, w, h ); - * --E-- - * camera.setViewOffset( fullWidth, fullHeight, w * 1, h * 1, w, h ); - * --F-- - * camera.setViewOffset( fullWidth, fullHeight, w * 2, h * 1, w, h ); - * - * Note there is no reason monitors have to be the same size or in a grid. - */ - - - setViewOffset(fullWidth, fullHeight, x, y, width, height) { - this.aspect = fullWidth / fullHeight; - - if (this.view === null) { - this.view = { - enabled: true, - fullWidth: 1, - fullHeight: 1, - offsetX: 0, - offsetY: 0, - width: 1, - height: 1 - }; - } - - this.view.enabled = true; - this.view.fullWidth = fullWidth; - this.view.fullHeight = fullHeight; - this.view.offsetX = x; - this.view.offsetY = y; - this.view.width = width; - this.view.height = height; - this.updateProjectionMatrix(); - } - - clearViewOffset() { - if (this.view !== null) { - this.view.enabled = false; - } - - this.updateProjectionMatrix(); - } - - updateProjectionMatrix() { - const near = this.near; - let top = near * Math.tan(DEG2RAD * 0.5 * this.fov) / this.zoom; - let height = 2 * top; - let width = this.aspect * height; - let left = -0.5 * width; - const view = this.view; - - if (this.view !== null && this.view.enabled) { - const fullWidth = view.fullWidth, - fullHeight = view.fullHeight; - left += view.offsetX * width / fullWidth; - top -= view.offsetY * height / fullHeight; - width *= view.width / fullWidth; - height *= view.height / fullHeight; - } - - const skew = this.filmOffset; - if (skew !== 0) left += near * skew / this.getFilmWidth(); - this.projectionMatrix.makePerspective(left, left + width, top, top - height, near, this.far); - this.projectionMatrixInverse.copy(this.projectionMatrix).invert(); - } - - toJSON(meta) { - const data = super.toJSON(meta); - data.object.fov = this.fov; - data.object.zoom = this.zoom; - data.object.near = this.near; - data.object.far = this.far; - data.object.focus = this.focus; - data.object.aspect = this.aspect; - if (this.view !== null) data.object.view = Object.assign({}, this.view); - data.object.filmGauge = this.filmGauge; - data.object.filmOffset = this.filmOffset; - return data; - } - - } - - PerspectiveCamera.prototype.isPerspectiveCamera = true; - - const fov = 90, - aspect = 1; - - class CubeCamera extends Object3D { - constructor(near, far, renderTarget) { - super(); - this.type = 'CubeCamera'; - - if (renderTarget.isWebGLCubeRenderTarget !== true) { - console.error('THREE.CubeCamera: The constructor now expects an instance of WebGLCubeRenderTarget as third parameter.'); - return; - } - - this.renderTarget = renderTarget; - const cameraPX = new PerspectiveCamera(fov, aspect, near, far); - cameraPX.layers = this.layers; - cameraPX.up.set(0, -1, 0); - cameraPX.lookAt(new Vector3(1, 0, 0)); - this.add(cameraPX); - const cameraNX = new PerspectiveCamera(fov, aspect, near, far); - cameraNX.layers = this.layers; - cameraNX.up.set(0, -1, 0); - cameraNX.lookAt(new Vector3(-1, 0, 0)); - this.add(cameraNX); - const cameraPY = new PerspectiveCamera(fov, aspect, near, far); - cameraPY.layers = this.layers; - cameraPY.up.set(0, 0, 1); - cameraPY.lookAt(new Vector3(0, 1, 0)); - this.add(cameraPY); - const cameraNY = new PerspectiveCamera(fov, aspect, near, far); - cameraNY.layers = this.layers; - cameraNY.up.set(0, 0, -1); - cameraNY.lookAt(new Vector3(0, -1, 0)); - this.add(cameraNY); - const cameraPZ = new PerspectiveCamera(fov, aspect, near, far); - cameraPZ.layers = this.layers; - cameraPZ.up.set(0, -1, 0); - cameraPZ.lookAt(new Vector3(0, 0, 1)); - this.add(cameraPZ); - const cameraNZ = new PerspectiveCamera(fov, aspect, near, far); - cameraNZ.layers = this.layers; - cameraNZ.up.set(0, -1, 0); - cameraNZ.lookAt(new Vector3(0, 0, -1)); - this.add(cameraNZ); - } - - update(renderer, scene) { - if (this.parent === null) this.updateMatrixWorld(); - const renderTarget = this.renderTarget; - const [cameraPX, cameraNX, cameraPY, cameraNY, cameraPZ, cameraNZ] = this.children; - const currentRenderTarget = renderer.getRenderTarget(); - const currentToneMapping = renderer.toneMapping; - const currentXrEnabled = renderer.xr.enabled; - renderer.toneMapping = NoToneMapping; - renderer.xr.enabled = false; - const generateMipmaps = renderTarget.texture.generateMipmaps; - renderTarget.texture.generateMipmaps = false; - renderer.setRenderTarget(renderTarget, 0); - renderer.render(scene, cameraPX); - renderer.setRenderTarget(renderTarget, 1); - renderer.render(scene, cameraNX); - renderer.setRenderTarget(renderTarget, 2); - renderer.render(scene, cameraPY); - renderer.setRenderTarget(renderTarget, 3); - renderer.render(scene, cameraNY); - renderer.setRenderTarget(renderTarget, 4); - renderer.render(scene, cameraPZ); - renderTarget.texture.generateMipmaps = generateMipmaps; - renderer.setRenderTarget(renderTarget, 5); - renderer.render(scene, cameraNZ); - renderer.setRenderTarget(currentRenderTarget); - renderer.toneMapping = currentToneMapping; - renderer.xr.enabled = currentXrEnabled; - renderTarget.texture.needsPMREMUpdate = true; - } - - } - - class CubeTexture extends Texture { - constructor(images, mapping, wrapS, wrapT, magFilter, minFilter, format, type, anisotropy, encoding) { - images = images !== undefined ? images : []; - mapping = mapping !== undefined ? mapping : CubeReflectionMapping; - super(images, mapping, wrapS, wrapT, magFilter, minFilter, format, type, anisotropy, encoding); - this.flipY = false; - } - - get images() { - return this.image; - } - - set images(value) { - this.image = value; - } - - } - - CubeTexture.prototype.isCubeTexture = true; - - class WebGLCubeRenderTarget extends WebGLRenderTarget { - constructor(size, options = {}) { - super(size, size, options); - const image = { - width: size, - height: size, - depth: 1 - }; - const images = [image, image, image, image, image, image]; - this.texture = new CubeTexture(images, options.mapping, options.wrapS, options.wrapT, options.magFilter, options.minFilter, options.format, options.type, options.anisotropy, options.encoding); // By convention -- likely based on the RenderMan spec from the 1990's -- cube maps are specified by WebGL (and three.js) - // in a coordinate system in which positive-x is to the right when looking up the positive-z axis -- in other words, - // in a left-handed coordinate system. By continuing this convention, preexisting cube maps continued to render correctly. - // three.js uses a right-handed coordinate system. So environment maps used in three.js appear to have px and nx swapped - // and the flag isRenderTargetTexture controls this conversion. The flip is not required when using WebGLCubeRenderTarget.texture - // as a cube texture (this is detected when isRenderTargetTexture is set to true for cube textures). - - this.texture.isRenderTargetTexture = true; - this.texture.generateMipmaps = options.generateMipmaps !== undefined ? options.generateMipmaps : false; - this.texture.minFilter = options.minFilter !== undefined ? options.minFilter : LinearFilter; - } - - fromEquirectangularTexture(renderer, texture) { - this.texture.type = texture.type; - this.texture.encoding = texture.encoding; - this.texture.generateMipmaps = texture.generateMipmaps; - this.texture.minFilter = texture.minFilter; - this.texture.magFilter = texture.magFilter; - const shader = { - uniforms: { - tEquirect: { - value: null - } - }, - vertexShader: - /* glsl */ - ` - - varying vec3 vWorldDirection; - - vec3 transformDirection( in vec3 dir, in mat4 matrix ) { - - return normalize( ( matrix * vec4( dir, 0.0 ) ).xyz ); - - } - - void main() { - - vWorldDirection = transformDirection( position, modelMatrix ); - - #include - #include - - } - `, - fragmentShader: - /* glsl */ - ` - - uniform sampler2D tEquirect; - - varying vec3 vWorldDirection; - - #include - - void main() { - - vec3 direction = normalize( vWorldDirection ); - - vec2 sampleUV = equirectUv( direction ); - - gl_FragColor = texture2D( tEquirect, sampleUV ); - - } - ` - }; - const geometry = new BoxGeometry(5, 5, 5); - const material = new ShaderMaterial({ - name: 'CubemapFromEquirect', - uniforms: cloneUniforms(shader.uniforms), - vertexShader: shader.vertexShader, - fragmentShader: shader.fragmentShader, - side: BackSide, - blending: NoBlending - }); - material.uniforms.tEquirect.value = texture; - const mesh = new Mesh(geometry, material); - const currentMinFilter = texture.minFilter; // Avoid blurred poles - - if (texture.minFilter === LinearMipmapLinearFilter) texture.minFilter = LinearFilter; - const camera = new CubeCamera(1, 10, this); - camera.update(renderer, mesh); - texture.minFilter = currentMinFilter; - mesh.geometry.dispose(); - mesh.material.dispose(); - return this; - } - - clear(renderer, color, depth, stencil) { - const currentRenderTarget = renderer.getRenderTarget(); - - for (let i = 0; i < 6; i++) { - renderer.setRenderTarget(this, i); - renderer.clear(color, depth, stencil); - } - - renderer.setRenderTarget(currentRenderTarget); - } - - } - - WebGLCubeRenderTarget.prototype.isWebGLCubeRenderTarget = true; - - const _vector1 = /*@__PURE__*/new Vector3(); - - const _vector2 = /*@__PURE__*/new Vector3(); - - const _normalMatrix = /*@__PURE__*/new Matrix3(); - - class Plane { - constructor(normal = new Vector3(1, 0, 0), constant = 0) { - // normal is assumed to be normalized - this.normal = normal; - this.constant = constant; - } - - set(normal, constant) { - this.normal.copy(normal); - this.constant = constant; - return this; - } - - setComponents(x, y, z, w) { - this.normal.set(x, y, z); - this.constant = w; - return this; - } - - setFromNormalAndCoplanarPoint(normal, point) { - this.normal.copy(normal); - this.constant = -point.dot(this.normal); - return this; - } - - setFromCoplanarPoints(a, b, c) { - const normal = _vector1.subVectors(c, b).cross(_vector2.subVectors(a, b)).normalize(); // Q: should an error be thrown if normal is zero (e.g. degenerate plane)? - - - this.setFromNormalAndCoplanarPoint(normal, a); - return this; - } - - copy(plane) { - this.normal.copy(plane.normal); - this.constant = plane.constant; - return this; - } - - normalize() { - // Note: will lead to a divide by zero if the plane is invalid. - const inverseNormalLength = 1.0 / this.normal.length(); - this.normal.multiplyScalar(inverseNormalLength); - this.constant *= inverseNormalLength; - return this; - } - - negate() { - this.constant *= -1; - this.normal.negate(); - return this; - } - - distanceToPoint(point) { - return this.normal.dot(point) + this.constant; - } - - distanceToSphere(sphere) { - return this.distanceToPoint(sphere.center) - sphere.radius; - } - - projectPoint(point, target) { - return target.copy(this.normal).multiplyScalar(-this.distanceToPoint(point)).add(point); - } - - intersectLine(line, target) { - const direction = line.delta(_vector1); - const denominator = this.normal.dot(direction); - - if (denominator === 0) { - // line is coplanar, return origin - if (this.distanceToPoint(line.start) === 0) { - return target.copy(line.start); - } // Unsure if this is the correct method to handle this case. - - - return null; - } - - const t = -(line.start.dot(this.normal) + this.constant) / denominator; - - if (t < 0 || t > 1) { - return null; - } - - return target.copy(direction).multiplyScalar(t).add(line.start); - } - - intersectsLine(line) { - // Note: this tests if a line intersects the plane, not whether it (or its end-points) are coplanar with it. - const startSign = this.distanceToPoint(line.start); - const endSign = this.distanceToPoint(line.end); - return startSign < 0 && endSign > 0 || endSign < 0 && startSign > 0; - } - - intersectsBox(box) { - return box.intersectsPlane(this); - } - - intersectsSphere(sphere) { - return sphere.intersectsPlane(this); - } - - coplanarPoint(target) { - return target.copy(this.normal).multiplyScalar(-this.constant); - } - - applyMatrix4(matrix, optionalNormalMatrix) { - const normalMatrix = optionalNormalMatrix || _normalMatrix.getNormalMatrix(matrix); - - const referencePoint = this.coplanarPoint(_vector1).applyMatrix4(matrix); - const normal = this.normal.applyMatrix3(normalMatrix).normalize(); - this.constant = -referencePoint.dot(normal); - return this; - } - - translate(offset) { - this.constant -= offset.dot(this.normal); - return this; - } - - equals(plane) { - return plane.normal.equals(this.normal) && plane.constant === this.constant; - } - - clone() { - return new this.constructor().copy(this); - } - - } - - Plane.prototype.isPlane = true; - - const _sphere$2 = /*@__PURE__*/new Sphere(); - - const _vector$7 = /*@__PURE__*/new Vector3(); - - class Frustum { - constructor(p0 = new Plane(), p1 = new Plane(), p2 = new Plane(), p3 = new Plane(), p4 = new Plane(), p5 = new Plane()) { - this.planes = [p0, p1, p2, p3, p4, p5]; - } - - set(p0, p1, p2, p3, p4, p5) { - const planes = this.planes; - planes[0].copy(p0); - planes[1].copy(p1); - planes[2].copy(p2); - planes[3].copy(p3); - planes[4].copy(p4); - planes[5].copy(p5); - return this; - } - - copy(frustum) { - const planes = this.planes; - - for (let i = 0; i < 6; i++) { - planes[i].copy(frustum.planes[i]); - } - - return this; - } - - setFromProjectionMatrix(m) { - const planes = this.planes; - const me = m.elements; - const me0 = me[0], - me1 = me[1], - me2 = me[2], - me3 = me[3]; - const me4 = me[4], - me5 = me[5], - me6 = me[6], - me7 = me[7]; - const me8 = me[8], - me9 = me[9], - me10 = me[10], - me11 = me[11]; - const me12 = me[12], - me13 = me[13], - me14 = me[14], - me15 = me[15]; - planes[0].setComponents(me3 - me0, me7 - me4, me11 - me8, me15 - me12).normalize(); - planes[1].setComponents(me3 + me0, me7 + me4, me11 + me8, me15 + me12).normalize(); - planes[2].setComponents(me3 + me1, me7 + me5, me11 + me9, me15 + me13).normalize(); - planes[3].setComponents(me3 - me1, me7 - me5, me11 - me9, me15 - me13).normalize(); - planes[4].setComponents(me3 - me2, me7 - me6, me11 - me10, me15 - me14).normalize(); - planes[5].setComponents(me3 + me2, me7 + me6, me11 + me10, me15 + me14).normalize(); - return this; - } - - intersectsObject(object) { - const geometry = object.geometry; - if (geometry.boundingSphere === null) geometry.computeBoundingSphere(); - - _sphere$2.copy(geometry.boundingSphere).applyMatrix4(object.matrixWorld); - - return this.intersectsSphere(_sphere$2); - } - - intersectsSprite(sprite) { - _sphere$2.center.set(0, 0, 0); - - _sphere$2.radius = 0.7071067811865476; - - _sphere$2.applyMatrix4(sprite.matrixWorld); - - return this.intersectsSphere(_sphere$2); - } - - intersectsSphere(sphere) { - const planes = this.planes; - const center = sphere.center; - const negRadius = -sphere.radius; - - for (let i = 0; i < 6; i++) { - const distance = planes[i].distanceToPoint(center); - - if (distance < negRadius) { - return false; - } - } - - return true; - } - - intersectsBox(box) { - const planes = this.planes; - - for (let i = 0; i < 6; i++) { - const plane = planes[i]; // corner at max distance - - _vector$7.x = plane.normal.x > 0 ? box.max.x : box.min.x; - _vector$7.y = plane.normal.y > 0 ? box.max.y : box.min.y; - _vector$7.z = plane.normal.z > 0 ? box.max.z : box.min.z; - - if (plane.distanceToPoint(_vector$7) < 0) { - return false; - } - } - - return true; - } - - containsPoint(point) { - const planes = this.planes; - - for (let i = 0; i < 6; i++) { - if (planes[i].distanceToPoint(point) < 0) { - return false; - } - } - - return true; - } - - clone() { - return new this.constructor().copy(this); - } - - } - - function WebGLAnimation() { - let context = null; - let isAnimating = false; - let animationLoop = null; - let requestId = null; - - function onAnimationFrame(time, frame) { - animationLoop(time, frame); - requestId = context.requestAnimationFrame(onAnimationFrame); - } - - return { - start: function () { - if (isAnimating === true) return; - if (animationLoop === null) return; - requestId = context.requestAnimationFrame(onAnimationFrame); - isAnimating = true; - }, - stop: function () { - context.cancelAnimationFrame(requestId); - isAnimating = false; - }, - setAnimationLoop: function (callback) { - animationLoop = callback; - }, - setContext: function (value) { - context = value; - } - }; - } - - function WebGLAttributes(gl, capabilities) { - const isWebGL2 = capabilities.isWebGL2; - const buffers = new WeakMap(); - - function createBuffer(attribute, bufferType) { - const array = attribute.array; - const usage = attribute.usage; - const buffer = gl.createBuffer(); - gl.bindBuffer(bufferType, buffer); - gl.bufferData(bufferType, array, usage); - attribute.onUploadCallback(); - let type; - - if (array instanceof Float32Array) { - type = gl.FLOAT; - } else if (array instanceof Uint16Array) { - if (attribute.isFloat16BufferAttribute) { - if (isWebGL2) { - type = gl.HALF_FLOAT; - } else { - throw new Error('THREE.WebGLAttributes: Usage of Float16BufferAttribute requires WebGL2.'); - } - } else { - type = gl.UNSIGNED_SHORT; - } - } else if (array instanceof Int16Array) { - type = gl.SHORT; - } else if (array instanceof Uint32Array) { - type = gl.UNSIGNED_INT; - } else if (array instanceof Int32Array) { - type = gl.INT; - } else if (array instanceof Int8Array) { - type = gl.BYTE; - } else if (array instanceof Uint8Array) { - type = gl.UNSIGNED_BYTE; - } else if (array instanceof Uint8ClampedArray) { - type = gl.UNSIGNED_BYTE; - } else { - throw new Error('THREE.WebGLAttributes: Unsupported buffer data format: ' + array); - } - - return { - buffer: buffer, - type: type, - bytesPerElement: array.BYTES_PER_ELEMENT, - version: attribute.version - }; - } - - function updateBuffer(buffer, attribute, bufferType) { - const array = attribute.array; - const updateRange = attribute.updateRange; - gl.bindBuffer(bufferType, buffer); - - if (updateRange.count === -1) { - // Not using update ranges - gl.bufferSubData(bufferType, 0, array); - } else { - if (isWebGL2) { - gl.bufferSubData(bufferType, updateRange.offset * array.BYTES_PER_ELEMENT, array, updateRange.offset, updateRange.count); - } else { - gl.bufferSubData(bufferType, updateRange.offset * array.BYTES_PER_ELEMENT, array.subarray(updateRange.offset, updateRange.offset + updateRange.count)); - } - - updateRange.count = -1; // reset range - } - } // - - - function get(attribute) { - if (attribute.isInterleavedBufferAttribute) attribute = attribute.data; - return buffers.get(attribute); - } - - function remove(attribute) { - if (attribute.isInterleavedBufferAttribute) attribute = attribute.data; - const data = buffers.get(attribute); - - if (data) { - gl.deleteBuffer(data.buffer); - buffers.delete(attribute); - } - } - - function update(attribute, bufferType) { - if (attribute.isGLBufferAttribute) { - const cached = buffers.get(attribute); - - if (!cached || cached.version < attribute.version) { - buffers.set(attribute, { - buffer: attribute.buffer, - type: attribute.type, - bytesPerElement: attribute.elementSize, - version: attribute.version - }); - } - - return; - } - - if (attribute.isInterleavedBufferAttribute) attribute = attribute.data; - const data = buffers.get(attribute); - - if (data === undefined) { - buffers.set(attribute, createBuffer(attribute, bufferType)); - } else if (data.version < attribute.version) { - updateBuffer(data.buffer, attribute, bufferType); - data.version = attribute.version; - } - } - - return { - get: get, - remove: remove, - update: update - }; - } - - class PlaneGeometry extends BufferGeometry { - constructor(width = 1, height = 1, widthSegments = 1, heightSegments = 1) { - super(); - this.type = 'PlaneGeometry'; - this.parameters = { - width: width, - height: height, - widthSegments: widthSegments, - heightSegments: heightSegments - }; - const width_half = width / 2; - const height_half = height / 2; - const gridX = Math.floor(widthSegments); - const gridY = Math.floor(heightSegments); - const gridX1 = gridX + 1; - const gridY1 = gridY + 1; - const segment_width = width / gridX; - const segment_height = height / gridY; // - - const indices = []; - const vertices = []; - const normals = []; - const uvs = []; - - for (let iy = 0; iy < gridY1; iy++) { - const y = iy * segment_height - height_half; - - for (let ix = 0; ix < gridX1; ix++) { - const x = ix * segment_width - width_half; - vertices.push(x, -y, 0); - normals.push(0, 0, 1); - uvs.push(ix / gridX); - uvs.push(1 - iy / gridY); - } - } - - for (let iy = 0; iy < gridY; iy++) { - for (let ix = 0; ix < gridX; ix++) { - const a = ix + gridX1 * iy; - const b = ix + gridX1 * (iy + 1); - const c = ix + 1 + gridX1 * (iy + 1); - const d = ix + 1 + gridX1 * iy; - indices.push(a, b, d); - indices.push(b, c, d); - } - } - - this.setIndex(indices); - this.setAttribute('position', new Float32BufferAttribute(vertices, 3)); - this.setAttribute('normal', new Float32BufferAttribute(normals, 3)); - this.setAttribute('uv', new Float32BufferAttribute(uvs, 2)); - } - - static fromJSON(data) { - return new PlaneGeometry(data.width, data.height, data.widthSegments, data.heightSegments); - } - - } - - var alphamap_fragment = "#ifdef USE_ALPHAMAP\n\tdiffuseColor.a *= texture2D( alphaMap, vUv ).g;\n#endif"; - - var alphamap_pars_fragment = "#ifdef USE_ALPHAMAP\n\tuniform sampler2D alphaMap;\n#endif"; - - var alphatest_fragment = "#ifdef USE_ALPHATEST\n\tif ( diffuseColor.a < alphaTest ) discard;\n#endif"; - - var alphatest_pars_fragment = "#ifdef USE_ALPHATEST\n\tuniform float alphaTest;\n#endif"; - - var aomap_fragment = "#ifdef USE_AOMAP\n\tfloat ambientOcclusion = ( texture2D( aoMap, vUv2 ).r - 1.0 ) * aoMapIntensity + 1.0;\n\treflectedLight.indirectDiffuse *= ambientOcclusion;\n\t#if defined( USE_ENVMAP ) && defined( STANDARD )\n\t\tfloat dotNV = saturate( dot( geometry.normal, geometry.viewDir ) );\n\t\treflectedLight.indirectSpecular *= computeSpecularOcclusion( dotNV, ambientOcclusion, material.roughness );\n\t#endif\n#endif"; - - var aomap_pars_fragment = "#ifdef USE_AOMAP\n\tuniform sampler2D aoMap;\n\tuniform float aoMapIntensity;\n#endif"; - - var begin_vertex = "vec3 transformed = vec3( position );"; - - var beginnormal_vertex = "vec3 objectNormal = vec3( normal );\n#ifdef USE_TANGENT\n\tvec3 objectTangent = vec3( tangent.xyz );\n#endif"; - - var bsdfs = "vec3 BRDF_Lambert( const in vec3 diffuseColor ) {\n\treturn RECIPROCAL_PI * diffuseColor;\n}\nvec3 F_Schlick( const in vec3 f0, const in float f90, const in float dotVH ) {\n\tfloat fresnel = exp2( ( - 5.55473 * dotVH - 6.98316 ) * dotVH );\n\treturn f0 * ( 1.0 - fresnel ) + ( f90 * fresnel );\n}\nfloat V_GGX_SmithCorrelated( const in float alpha, const in float dotNL, const in float dotNV ) {\n\tfloat a2 = pow2( alpha );\n\tfloat gv = dotNL * sqrt( a2 + ( 1.0 - a2 ) * pow2( dotNV ) );\n\tfloat gl = dotNV * sqrt( a2 + ( 1.0 - a2 ) * pow2( dotNL ) );\n\treturn 0.5 / max( gv + gl, EPSILON );\n}\nfloat D_GGX( const in float alpha, const in float dotNH ) {\n\tfloat a2 = pow2( alpha );\n\tfloat denom = pow2( dotNH ) * ( a2 - 1.0 ) + 1.0;\n\treturn RECIPROCAL_PI * a2 / pow2( denom );\n}\nvec3 BRDF_GGX( const in vec3 lightDir, const in vec3 viewDir, const in vec3 normal, const in vec3 f0, const in float f90, const in float roughness ) {\n\tfloat alpha = pow2( roughness );\n\tvec3 halfDir = normalize( lightDir + viewDir );\n\tfloat dotNL = saturate( dot( normal, lightDir ) );\n\tfloat dotNV = saturate( dot( normal, viewDir ) );\n\tfloat dotNH = saturate( dot( normal, halfDir ) );\n\tfloat dotVH = saturate( dot( viewDir, halfDir ) );\n\tvec3 F = F_Schlick( f0, f90, dotVH );\n\tfloat V = V_GGX_SmithCorrelated( alpha, dotNL, dotNV );\n\tfloat D = D_GGX( alpha, dotNH );\n\treturn F * ( V * D );\n}\nvec2 LTC_Uv( const in vec3 N, const in vec3 V, const in float roughness ) {\n\tconst float LUT_SIZE = 64.0;\n\tconst float LUT_SCALE = ( LUT_SIZE - 1.0 ) / LUT_SIZE;\n\tconst float LUT_BIAS = 0.5 / LUT_SIZE;\n\tfloat dotNV = saturate( dot( N, V ) );\n\tvec2 uv = vec2( roughness, sqrt( 1.0 - dotNV ) );\n\tuv = uv * LUT_SCALE + LUT_BIAS;\n\treturn uv;\n}\nfloat LTC_ClippedSphereFormFactor( const in vec3 f ) {\n\tfloat l = length( f );\n\treturn max( ( l * l + f.z ) / ( l + 1.0 ), 0.0 );\n}\nvec3 LTC_EdgeVectorFormFactor( const in vec3 v1, const in vec3 v2 ) {\n\tfloat x = dot( v1, v2 );\n\tfloat y = abs( x );\n\tfloat a = 0.8543985 + ( 0.4965155 + 0.0145206 * y ) * y;\n\tfloat b = 3.4175940 + ( 4.1616724 + y ) * y;\n\tfloat v = a / b;\n\tfloat theta_sintheta = ( x > 0.0 ) ? v : 0.5 * inversesqrt( max( 1.0 - x * x, 1e-7 ) ) - v;\n\treturn cross( v1, v2 ) * theta_sintheta;\n}\nvec3 LTC_Evaluate( const in vec3 N, const in vec3 V, const in vec3 P, const in mat3 mInv, const in vec3 rectCoords[ 4 ] ) {\n\tvec3 v1 = rectCoords[ 1 ] - rectCoords[ 0 ];\n\tvec3 v2 = rectCoords[ 3 ] - rectCoords[ 0 ];\n\tvec3 lightNormal = cross( v1, v2 );\n\tif( dot( lightNormal, P - rectCoords[ 0 ] ) < 0.0 ) return vec3( 0.0 );\n\tvec3 T1, T2;\n\tT1 = normalize( V - N * dot( V, N ) );\n\tT2 = - cross( N, T1 );\n\tmat3 mat = mInv * transposeMat3( mat3( T1, T2, N ) );\n\tvec3 coords[ 4 ];\n\tcoords[ 0 ] = mat * ( rectCoords[ 0 ] - P );\n\tcoords[ 1 ] = mat * ( rectCoords[ 1 ] - P );\n\tcoords[ 2 ] = mat * ( rectCoords[ 2 ] - P );\n\tcoords[ 3 ] = mat * ( rectCoords[ 3 ] - P );\n\tcoords[ 0 ] = normalize( coords[ 0 ] );\n\tcoords[ 1 ] = normalize( coords[ 1 ] );\n\tcoords[ 2 ] = normalize( coords[ 2 ] );\n\tcoords[ 3 ] = normalize( coords[ 3 ] );\n\tvec3 vectorFormFactor = vec3( 0.0 );\n\tvectorFormFactor += LTC_EdgeVectorFormFactor( coords[ 0 ], coords[ 1 ] );\n\tvectorFormFactor += LTC_EdgeVectorFormFactor( coords[ 1 ], coords[ 2 ] );\n\tvectorFormFactor += LTC_EdgeVectorFormFactor( coords[ 2 ], coords[ 3 ] );\n\tvectorFormFactor += LTC_EdgeVectorFormFactor( coords[ 3 ], coords[ 0 ] );\n\tfloat result = LTC_ClippedSphereFormFactor( vectorFormFactor );\n\treturn vec3( result );\n}\nfloat G_BlinnPhong_Implicit( ) {\n\treturn 0.25;\n}\nfloat D_BlinnPhong( const in float shininess, const in float dotNH ) {\n\treturn RECIPROCAL_PI * ( shininess * 0.5 + 1.0 ) * pow( dotNH, shininess );\n}\nvec3 BRDF_BlinnPhong( const in vec3 lightDir, const in vec3 viewDir, const in vec3 normal, const in vec3 specularColor, const in float shininess ) {\n\tvec3 halfDir = normalize( lightDir + viewDir );\n\tfloat dotNH = saturate( dot( normal, halfDir ) );\n\tfloat dotVH = saturate( dot( viewDir, halfDir ) );\n\tvec3 F = F_Schlick( specularColor, 1.0, dotVH );\n\tfloat G = G_BlinnPhong_Implicit( );\n\tfloat D = D_BlinnPhong( shininess, dotNH );\n\treturn F * ( G * D );\n}\n#if defined( USE_SHEEN )\nfloat D_Charlie( float roughness, float dotNH ) {\n\tfloat alpha = pow2( roughness );\n\tfloat invAlpha = 1.0 / alpha;\n\tfloat cos2h = dotNH * dotNH;\n\tfloat sin2h = max( 1.0 - cos2h, 0.0078125 );\n\treturn ( 2.0 + invAlpha ) * pow( sin2h, invAlpha * 0.5 ) / ( 2.0 * PI );\n}\nfloat V_Neubelt( float dotNV, float dotNL ) {\n\treturn saturate( 1.0 / ( 4.0 * ( dotNL + dotNV - dotNL * dotNV ) ) );\n}\nvec3 BRDF_Sheen( const in vec3 lightDir, const in vec3 viewDir, const in vec3 normal, vec3 sheenColor, const in float sheenRoughness ) {\n\tvec3 halfDir = normalize( lightDir + viewDir );\n\tfloat dotNL = saturate( dot( normal, lightDir ) );\n\tfloat dotNV = saturate( dot( normal, viewDir ) );\n\tfloat dotNH = saturate( dot( normal, halfDir ) );\n\tfloat D = D_Charlie( sheenRoughness, dotNH );\n\tfloat V = V_Neubelt( dotNV, dotNL );\n\treturn sheenColor * ( D * V );\n}\n#endif"; - - var bumpmap_pars_fragment = "#ifdef USE_BUMPMAP\n\tuniform sampler2D bumpMap;\n\tuniform float bumpScale;\n\tvec2 dHdxy_fwd() {\n\t\tvec2 dSTdx = dFdx( vUv );\n\t\tvec2 dSTdy = dFdy( vUv );\n\t\tfloat Hll = bumpScale * texture2D( bumpMap, vUv ).x;\n\t\tfloat dBx = bumpScale * texture2D( bumpMap, vUv + dSTdx ).x - Hll;\n\t\tfloat dBy = bumpScale * texture2D( bumpMap, vUv + dSTdy ).x - Hll;\n\t\treturn vec2( dBx, dBy );\n\t}\n\tvec3 perturbNormalArb( vec3 surf_pos, vec3 surf_norm, vec2 dHdxy, float faceDirection ) {\n\t\tvec3 vSigmaX = vec3( dFdx( surf_pos.x ), dFdx( surf_pos.y ), dFdx( surf_pos.z ) );\n\t\tvec3 vSigmaY = vec3( dFdy( surf_pos.x ), dFdy( surf_pos.y ), dFdy( surf_pos.z ) );\n\t\tvec3 vN = surf_norm;\n\t\tvec3 R1 = cross( vSigmaY, vN );\n\t\tvec3 R2 = cross( vN, vSigmaX );\n\t\tfloat fDet = dot( vSigmaX, R1 ) * faceDirection;\n\t\tvec3 vGrad = sign( fDet ) * ( dHdxy.x * R1 + dHdxy.y * R2 );\n\t\treturn normalize( abs( fDet ) * surf_norm - vGrad );\n\t}\n#endif"; - - var clipping_planes_fragment = "#if NUM_CLIPPING_PLANES > 0\n\tvec4 plane;\n\t#pragma unroll_loop_start\n\tfor ( int i = 0; i < UNION_CLIPPING_PLANES; i ++ ) {\n\t\tplane = clippingPlanes[ i ];\n\t\tif ( dot( vClipPosition, plane.xyz ) > plane.w ) discard;\n\t}\n\t#pragma unroll_loop_end\n\t#if UNION_CLIPPING_PLANES < NUM_CLIPPING_PLANES\n\t\tbool clipped = true;\n\t\t#pragma unroll_loop_start\n\t\tfor ( int i = UNION_CLIPPING_PLANES; i < NUM_CLIPPING_PLANES; i ++ ) {\n\t\t\tplane = clippingPlanes[ i ];\n\t\t\tclipped = ( dot( vClipPosition, plane.xyz ) > plane.w ) && clipped;\n\t\t}\n\t\t#pragma unroll_loop_end\n\t\tif ( clipped ) discard;\n\t#endif\n#endif"; - - var clipping_planes_pars_fragment = "#if NUM_CLIPPING_PLANES > 0\n\tvarying vec3 vClipPosition;\n\tuniform vec4 clippingPlanes[ NUM_CLIPPING_PLANES ];\n#endif"; - - var clipping_planes_pars_vertex = "#if NUM_CLIPPING_PLANES > 0\n\tvarying vec3 vClipPosition;\n#endif"; - - var clipping_planes_vertex = "#if NUM_CLIPPING_PLANES > 0\n\tvClipPosition = - mvPosition.xyz;\n#endif"; - - var color_fragment = "#if defined( USE_COLOR_ALPHA )\n\tdiffuseColor *= vColor;\n#elif defined( USE_COLOR )\n\tdiffuseColor.rgb *= vColor;\n#endif"; - - var color_pars_fragment = "#if defined( USE_COLOR_ALPHA )\n\tvarying vec4 vColor;\n#elif defined( USE_COLOR )\n\tvarying vec3 vColor;\n#endif"; - - var color_pars_vertex = "#if defined( USE_COLOR_ALPHA )\n\tvarying vec4 vColor;\n#elif defined( USE_COLOR ) || defined( USE_INSTANCING_COLOR )\n\tvarying vec3 vColor;\n#endif"; - - var color_vertex = "#if defined( USE_COLOR_ALPHA )\n\tvColor = vec4( 1.0 );\n#elif defined( USE_COLOR ) || defined( USE_INSTANCING_COLOR )\n\tvColor = vec3( 1.0 );\n#endif\n#ifdef USE_COLOR\n\tvColor *= color;\n#endif\n#ifdef USE_INSTANCING_COLOR\n\tvColor.xyz *= instanceColor.xyz;\n#endif"; - - var common = "#define PI 3.141592653589793\n#define PI2 6.283185307179586\n#define PI_HALF 1.5707963267948966\n#define RECIPROCAL_PI 0.3183098861837907\n#define RECIPROCAL_PI2 0.15915494309189535\n#define EPSILON 1e-6\n#ifndef saturate\n#define saturate( a ) clamp( a, 0.0, 1.0 )\n#endif\n#define whiteComplement( a ) ( 1.0 - saturate( a ) )\nfloat pow2( const in float x ) { return x*x; }\nfloat pow3( const in float x ) { return x*x*x; }\nfloat pow4( const in float x ) { float x2 = x*x; return x2*x2; }\nfloat max3( const in vec3 v ) { return max( max( v.x, v.y ), v.z ); }\nfloat average( const in vec3 color ) { return dot( color, vec3( 0.3333 ) ); }\nhighp float rand( const in vec2 uv ) {\n\tconst highp float a = 12.9898, b = 78.233, c = 43758.5453;\n\thighp float dt = dot( uv.xy, vec2( a,b ) ), sn = mod( dt, PI );\n\treturn fract( sin( sn ) * c );\n}\n#ifdef HIGH_PRECISION\n\tfloat precisionSafeLength( vec3 v ) { return length( v ); }\n#else\n\tfloat precisionSafeLength( vec3 v ) {\n\t\tfloat maxComponent = max3( abs( v ) );\n\t\treturn length( v / maxComponent ) * maxComponent;\n\t}\n#endif\nstruct IncidentLight {\n\tvec3 color;\n\tvec3 direction;\n\tbool visible;\n};\nstruct ReflectedLight {\n\tvec3 directDiffuse;\n\tvec3 directSpecular;\n\tvec3 indirectDiffuse;\n\tvec3 indirectSpecular;\n};\nstruct GeometricContext {\n\tvec3 position;\n\tvec3 normal;\n\tvec3 viewDir;\n#ifdef USE_CLEARCOAT\n\tvec3 clearcoatNormal;\n#endif\n};\nvec3 transformDirection( in vec3 dir, in mat4 matrix ) {\n\treturn normalize( ( matrix * vec4( dir, 0.0 ) ).xyz );\n}\nvec3 inverseTransformDirection( in vec3 dir, in mat4 matrix ) {\n\treturn normalize( ( vec4( dir, 0.0 ) * matrix ).xyz );\n}\nmat3 transposeMat3( const in mat3 m ) {\n\tmat3 tmp;\n\ttmp[ 0 ] = vec3( m[ 0 ].x, m[ 1 ].x, m[ 2 ].x );\n\ttmp[ 1 ] = vec3( m[ 0 ].y, m[ 1 ].y, m[ 2 ].y );\n\ttmp[ 2 ] = vec3( m[ 0 ].z, m[ 1 ].z, m[ 2 ].z );\n\treturn tmp;\n}\nfloat linearToRelativeLuminance( const in vec3 color ) {\n\tvec3 weights = vec3( 0.2126, 0.7152, 0.0722 );\n\treturn dot( weights, color.rgb );\n}\nbool isPerspectiveMatrix( mat4 m ) {\n\treturn m[ 2 ][ 3 ] == - 1.0;\n}\nvec2 equirectUv( in vec3 dir ) {\n\tfloat u = atan( dir.z, dir.x ) * RECIPROCAL_PI2 + 0.5;\n\tfloat v = asin( clamp( dir.y, - 1.0, 1.0 ) ) * RECIPROCAL_PI + 0.5;\n\treturn vec2( u, v );\n}"; - - var cube_uv_reflection_fragment = "#ifdef ENVMAP_TYPE_CUBE_UV\n\t#define cubeUV_minMipLevel 4.0\n\t#define cubeUV_minTileSize 16.0\n\tfloat getFace( vec3 direction ) {\n\t\tvec3 absDirection = abs( direction );\n\t\tfloat face = - 1.0;\n\t\tif ( absDirection.x > absDirection.z ) {\n\t\t\tif ( absDirection.x > absDirection.y )\n\t\t\t\tface = direction.x > 0.0 ? 0.0 : 3.0;\n\t\t\telse\n\t\t\t\tface = direction.y > 0.0 ? 1.0 : 4.0;\n\t\t} else {\n\t\t\tif ( absDirection.z > absDirection.y )\n\t\t\t\tface = direction.z > 0.0 ? 2.0 : 5.0;\n\t\t\telse\n\t\t\t\tface = direction.y > 0.0 ? 1.0 : 4.0;\n\t\t}\n\t\treturn face;\n\t}\n\tvec2 getUV( vec3 direction, float face ) {\n\t\tvec2 uv;\n\t\tif ( face == 0.0 ) {\n\t\t\tuv = vec2( direction.z, direction.y ) / abs( direction.x );\n\t\t} else if ( face == 1.0 ) {\n\t\t\tuv = vec2( - direction.x, - direction.z ) / abs( direction.y );\n\t\t} else if ( face == 2.0 ) {\n\t\t\tuv = vec2( - direction.x, direction.y ) / abs( direction.z );\n\t\t} else if ( face == 3.0 ) {\n\t\t\tuv = vec2( - direction.z, direction.y ) / abs( direction.x );\n\t\t} else if ( face == 4.0 ) {\n\t\t\tuv = vec2( - direction.x, direction.z ) / abs( direction.y );\n\t\t} else {\n\t\t\tuv = vec2( direction.x, direction.y ) / abs( direction.z );\n\t\t}\n\t\treturn 0.5 * ( uv + 1.0 );\n\t}\n\tvec3 bilinearCubeUV( sampler2D envMap, vec3 direction, float mipInt ) {\n\t\tfloat face = getFace( direction );\n\t\tfloat filterInt = max( cubeUV_minMipLevel - mipInt, 0.0 );\n\t\tmipInt = max( mipInt, cubeUV_minMipLevel );\n\t\tfloat faceSize = exp2( mipInt );\n\t\tvec2 uv = getUV( direction, face ) * ( faceSize - 2.0 ) + 1.0;\n\t\tif ( face > 2.0 ) {\n\t\t\tuv.y += faceSize;\n\t\t\tface -= 3.0;\n\t\t}\n\t\tuv.x += face * faceSize;\n\t\tuv.x += filterInt * 3.0 * cubeUV_minTileSize;\n\t\tuv.y += 4.0 * ( exp2( CUBEUV_MAX_MIP ) - faceSize );\n\t\tuv.x *= CUBEUV_TEXEL_WIDTH;\n\t\tuv.y *= CUBEUV_TEXEL_HEIGHT;\n\t\t#ifdef texture2DGradEXT\n\t\t\treturn texture2DGradEXT( envMap, uv, vec2( 0.0 ), vec2( 0.0 ) ).rgb;\n\t\t#else\n\t\t\treturn texture2D( envMap, uv ).rgb;\n\t\t#endif\n\t}\n\t#define r0 1.0\n\t#define v0 0.339\n\t#define m0 - 2.0\n\t#define r1 0.8\n\t#define v1 0.276\n\t#define m1 - 1.0\n\t#define r4 0.4\n\t#define v4 0.046\n\t#define m4 2.0\n\t#define r5 0.305\n\t#define v5 0.016\n\t#define m5 3.0\n\t#define r6 0.21\n\t#define v6 0.0038\n\t#define m6 4.0\n\tfloat roughnessToMip( float roughness ) {\n\t\tfloat mip = 0.0;\n\t\tif ( roughness >= r1 ) {\n\t\t\tmip = ( r0 - roughness ) * ( m1 - m0 ) / ( r0 - r1 ) + m0;\n\t\t} else if ( roughness >= r4 ) {\n\t\t\tmip = ( r1 - roughness ) * ( m4 - m1 ) / ( r1 - r4 ) + m1;\n\t\t} else if ( roughness >= r5 ) {\n\t\t\tmip = ( r4 - roughness ) * ( m5 - m4 ) / ( r4 - r5 ) + m4;\n\t\t} else if ( roughness >= r6 ) {\n\t\t\tmip = ( r5 - roughness ) * ( m6 - m5 ) / ( r5 - r6 ) + m5;\n\t\t} else {\n\t\t\tmip = - 2.0 * log2( 1.16 * roughness );\t\t}\n\t\treturn mip;\n\t}\n\tvec4 textureCubeUV( sampler2D envMap, vec3 sampleDir, float roughness ) {\n\t\tfloat mip = clamp( roughnessToMip( roughness ), m0, CUBEUV_MAX_MIP );\n\t\tfloat mipF = fract( mip );\n\t\tfloat mipInt = floor( mip );\n\t\tvec3 color0 = bilinearCubeUV( envMap, sampleDir, mipInt );\n\t\tif ( mipF == 0.0 ) {\n\t\t\treturn vec4( color0, 1.0 );\n\t\t} else {\n\t\t\tvec3 color1 = bilinearCubeUV( envMap, sampleDir, mipInt + 1.0 );\n\t\t\treturn vec4( mix( color0, color1, mipF ), 1.0 );\n\t\t}\n\t}\n#endif"; - - var defaultnormal_vertex = "vec3 transformedNormal = objectNormal;\n#ifdef USE_INSTANCING\n\tmat3 m = mat3( instanceMatrix );\n\ttransformedNormal /= vec3( dot( m[ 0 ], m[ 0 ] ), dot( m[ 1 ], m[ 1 ] ), dot( m[ 2 ], m[ 2 ] ) );\n\ttransformedNormal = m * transformedNormal;\n#endif\ntransformedNormal = normalMatrix * transformedNormal;\n#ifdef FLIP_SIDED\n\ttransformedNormal = - transformedNormal;\n#endif\n#ifdef USE_TANGENT\n\tvec3 transformedTangent = ( modelViewMatrix * vec4( objectTangent, 0.0 ) ).xyz;\n\t#ifdef FLIP_SIDED\n\t\ttransformedTangent = - transformedTangent;\n\t#endif\n#endif"; - - var displacementmap_pars_vertex = "#ifdef USE_DISPLACEMENTMAP\n\tuniform sampler2D displacementMap;\n\tuniform float displacementScale;\n\tuniform float displacementBias;\n#endif"; - - var displacementmap_vertex = "#ifdef USE_DISPLACEMENTMAP\n\ttransformed += normalize( objectNormal ) * ( texture2D( displacementMap, vUv ).x * displacementScale + displacementBias );\n#endif"; - - var emissivemap_fragment = "#ifdef USE_EMISSIVEMAP\n\tvec4 emissiveColor = texture2D( emissiveMap, vUv );\n\ttotalEmissiveRadiance *= emissiveColor.rgb;\n#endif"; - - var emissivemap_pars_fragment = "#ifdef USE_EMISSIVEMAP\n\tuniform sampler2D emissiveMap;\n#endif"; - - var encodings_fragment = "gl_FragColor = linearToOutputTexel( gl_FragColor );"; - - var encodings_pars_fragment = "vec4 LinearToLinear( in vec4 value ) {\n\treturn value;\n}\nvec4 LinearTosRGB( in vec4 value ) {\n\treturn vec4( mix( pow( value.rgb, vec3( 0.41666 ) ) * 1.055 - vec3( 0.055 ), value.rgb * 12.92, vec3( lessThanEqual( value.rgb, vec3( 0.0031308 ) ) ) ), value.a );\n}"; - - var envmap_fragment = "#ifdef USE_ENVMAP\n\t#ifdef ENV_WORLDPOS\n\t\tvec3 cameraToFrag;\n\t\tif ( isOrthographic ) {\n\t\t\tcameraToFrag = normalize( vec3( - viewMatrix[ 0 ][ 2 ], - viewMatrix[ 1 ][ 2 ], - viewMatrix[ 2 ][ 2 ] ) );\n\t\t} else {\n\t\t\tcameraToFrag = normalize( vWorldPosition - cameraPosition );\n\t\t}\n\t\tvec3 worldNormal = inverseTransformDirection( normal, viewMatrix );\n\t\t#ifdef ENVMAP_MODE_REFLECTION\n\t\t\tvec3 reflectVec = reflect( cameraToFrag, worldNormal );\n\t\t#else\n\t\t\tvec3 reflectVec = refract( cameraToFrag, worldNormal, refractionRatio );\n\t\t#endif\n\t#else\n\t\tvec3 reflectVec = vReflect;\n\t#endif\n\t#ifdef ENVMAP_TYPE_CUBE\n\t\tvec4 envColor = textureCube( envMap, vec3( flipEnvMap * reflectVec.x, reflectVec.yz ) );\n\t#elif defined( ENVMAP_TYPE_CUBE_UV )\n\t\tvec4 envColor = textureCubeUV( envMap, reflectVec, 0.0 );\n\t#else\n\t\tvec4 envColor = vec4( 0.0 );\n\t#endif\n\t#ifdef ENVMAP_BLENDING_MULTIPLY\n\t\toutgoingLight = mix( outgoingLight, outgoingLight * envColor.xyz, specularStrength * reflectivity );\n\t#elif defined( ENVMAP_BLENDING_MIX )\n\t\toutgoingLight = mix( outgoingLight, envColor.xyz, specularStrength * reflectivity );\n\t#elif defined( ENVMAP_BLENDING_ADD )\n\t\toutgoingLight += envColor.xyz * specularStrength * reflectivity;\n\t#endif\n#endif"; - - var envmap_common_pars_fragment = "#ifdef USE_ENVMAP\n\tuniform float envMapIntensity;\n\tuniform float flipEnvMap;\n\t#ifdef ENVMAP_TYPE_CUBE\n\t\tuniform samplerCube envMap;\n\t#else\n\t\tuniform sampler2D envMap;\n\t#endif\n\t\n#endif"; - - var envmap_pars_fragment = "#ifdef USE_ENVMAP\n\tuniform float reflectivity;\n\t#if defined( USE_BUMPMAP ) || defined( USE_NORMALMAP ) || defined( PHONG )\n\t\t#define ENV_WORLDPOS\n\t#endif\n\t#ifdef ENV_WORLDPOS\n\t\tvarying vec3 vWorldPosition;\n\t\tuniform float refractionRatio;\n\t#else\n\t\tvarying vec3 vReflect;\n\t#endif\n#endif"; - - var envmap_pars_vertex = "#ifdef USE_ENVMAP\n\t#if defined( USE_BUMPMAP ) || defined( USE_NORMALMAP ) ||defined( PHONG )\n\t\t#define ENV_WORLDPOS\n\t#endif\n\t#ifdef ENV_WORLDPOS\n\t\t\n\t\tvarying vec3 vWorldPosition;\n\t#else\n\t\tvarying vec3 vReflect;\n\t\tuniform float refractionRatio;\n\t#endif\n#endif"; - - var envmap_vertex = "#ifdef USE_ENVMAP\n\t#ifdef ENV_WORLDPOS\n\t\tvWorldPosition = worldPosition.xyz;\n\t#else\n\t\tvec3 cameraToVertex;\n\t\tif ( isOrthographic ) {\n\t\t\tcameraToVertex = normalize( vec3( - viewMatrix[ 0 ][ 2 ], - viewMatrix[ 1 ][ 2 ], - viewMatrix[ 2 ][ 2 ] ) );\n\t\t} else {\n\t\t\tcameraToVertex = normalize( worldPosition.xyz - cameraPosition );\n\t\t}\n\t\tvec3 worldNormal = inverseTransformDirection( transformedNormal, viewMatrix );\n\t\t#ifdef ENVMAP_MODE_REFLECTION\n\t\t\tvReflect = reflect( cameraToVertex, worldNormal );\n\t\t#else\n\t\t\tvReflect = refract( cameraToVertex, worldNormal, refractionRatio );\n\t\t#endif\n\t#endif\n#endif"; - - var fog_vertex = "#ifdef USE_FOG\n\tvFogDepth = - mvPosition.z;\n#endif"; - - var fog_pars_vertex = "#ifdef USE_FOG\n\tvarying float vFogDepth;\n#endif"; - - var fog_fragment = "#ifdef USE_FOG\n\t#ifdef FOG_EXP2\n\t\tfloat fogFactor = 1.0 - exp( - fogDensity * fogDensity * vFogDepth * vFogDepth );\n\t#else\n\t\tfloat fogFactor = smoothstep( fogNear, fogFar, vFogDepth );\n\t#endif\n\tgl_FragColor.rgb = mix( gl_FragColor.rgb, fogColor, fogFactor );\n#endif"; - - var fog_pars_fragment = "#ifdef USE_FOG\n\tuniform vec3 fogColor;\n\tvarying float vFogDepth;\n\t#ifdef FOG_EXP2\n\t\tuniform float fogDensity;\n\t#else\n\t\tuniform float fogNear;\n\t\tuniform float fogFar;\n\t#endif\n#endif"; - - var gradientmap_pars_fragment = "#ifdef USE_GRADIENTMAP\n\tuniform sampler2D gradientMap;\n#endif\nvec3 getGradientIrradiance( vec3 normal, vec3 lightDirection ) {\n\tfloat dotNL = dot( normal, lightDirection );\n\tvec2 coord = vec2( dotNL * 0.5 + 0.5, 0.0 );\n\t#ifdef USE_GRADIENTMAP\n\t\treturn vec3( texture2D( gradientMap, coord ).r );\n\t#else\n\t\treturn ( coord.x < 0.7 ) ? vec3( 0.7 ) : vec3( 1.0 );\n\t#endif\n}"; - - var lightmap_fragment = "#ifdef USE_LIGHTMAP\n\tvec4 lightMapTexel = texture2D( lightMap, vUv2 );\n\tvec3 lightMapIrradiance = lightMapTexel.rgb * lightMapIntensity;\n\treflectedLight.indirectDiffuse += lightMapIrradiance;\n#endif"; - - var lightmap_pars_fragment = "#ifdef USE_LIGHTMAP\n\tuniform sampler2D lightMap;\n\tuniform float lightMapIntensity;\n#endif"; - - var lights_lambert_vertex = "vec3 diffuse = vec3( 1.0 );\nGeometricContext geometry;\ngeometry.position = mvPosition.xyz;\ngeometry.normal = normalize( transformedNormal );\ngeometry.viewDir = ( isOrthographic ) ? vec3( 0, 0, 1 ) : normalize( -mvPosition.xyz );\nGeometricContext backGeometry;\nbackGeometry.position = geometry.position;\nbackGeometry.normal = -geometry.normal;\nbackGeometry.viewDir = geometry.viewDir;\nvLightFront = vec3( 0.0 );\nvIndirectFront = vec3( 0.0 );\n#ifdef DOUBLE_SIDED\n\tvLightBack = vec3( 0.0 );\n\tvIndirectBack = vec3( 0.0 );\n#endif\nIncidentLight directLight;\nfloat dotNL;\nvec3 directLightColor_Diffuse;\nvIndirectFront += getAmbientLightIrradiance( ambientLightColor );\nvIndirectFront += getLightProbeIrradiance( lightProbe, geometry.normal );\n#ifdef DOUBLE_SIDED\n\tvIndirectBack += getAmbientLightIrradiance( ambientLightColor );\n\tvIndirectBack += getLightProbeIrradiance( lightProbe, backGeometry.normal );\n#endif\n#if NUM_POINT_LIGHTS > 0\n\t#pragma unroll_loop_start\n\tfor ( int i = 0; i < NUM_POINT_LIGHTS; i ++ ) {\n\t\tgetPointLightInfo( pointLights[ i ], geometry, directLight );\n\t\tdotNL = dot( geometry.normal, directLight.direction );\n\t\tdirectLightColor_Diffuse = directLight.color;\n\t\tvLightFront += saturate( dotNL ) * directLightColor_Diffuse;\n\t\t#ifdef DOUBLE_SIDED\n\t\t\tvLightBack += saturate( - dotNL ) * directLightColor_Diffuse;\n\t\t#endif\n\t}\n\t#pragma unroll_loop_end\n#endif\n#if NUM_SPOT_LIGHTS > 0\n\t#pragma unroll_loop_start\n\tfor ( int i = 0; i < NUM_SPOT_LIGHTS; i ++ ) {\n\t\tgetSpotLightInfo( spotLights[ i ], geometry, directLight );\n\t\tdotNL = dot( geometry.normal, directLight.direction );\n\t\tdirectLightColor_Diffuse = directLight.color;\n\t\tvLightFront += saturate( dotNL ) * directLightColor_Diffuse;\n\t\t#ifdef DOUBLE_SIDED\n\t\t\tvLightBack += saturate( - dotNL ) * directLightColor_Diffuse;\n\t\t#endif\n\t}\n\t#pragma unroll_loop_end\n#endif\n#if NUM_DIR_LIGHTS > 0\n\t#pragma unroll_loop_start\n\tfor ( int i = 0; i < NUM_DIR_LIGHTS; i ++ ) {\n\t\tgetDirectionalLightInfo( directionalLights[ i ], geometry, directLight );\n\t\tdotNL = dot( geometry.normal, directLight.direction );\n\t\tdirectLightColor_Diffuse = directLight.color;\n\t\tvLightFront += saturate( dotNL ) * directLightColor_Diffuse;\n\t\t#ifdef DOUBLE_SIDED\n\t\t\tvLightBack += saturate( - dotNL ) * directLightColor_Diffuse;\n\t\t#endif\n\t}\n\t#pragma unroll_loop_end\n#endif\n#if NUM_HEMI_LIGHTS > 0\n\t#pragma unroll_loop_start\n\tfor ( int i = 0; i < NUM_HEMI_LIGHTS; i ++ ) {\n\t\tvIndirectFront += getHemisphereLightIrradiance( hemisphereLights[ i ], geometry.normal );\n\t\t#ifdef DOUBLE_SIDED\n\t\t\tvIndirectBack += getHemisphereLightIrradiance( hemisphereLights[ i ], backGeometry.normal );\n\t\t#endif\n\t}\n\t#pragma unroll_loop_end\n#endif"; - - var lights_pars_begin = "uniform bool receiveShadow;\nuniform vec3 ambientLightColor;\nuniform vec3 lightProbe[ 9 ];\nvec3 shGetIrradianceAt( in vec3 normal, in vec3 shCoefficients[ 9 ] ) {\n\tfloat x = normal.x, y = normal.y, z = normal.z;\n\tvec3 result = shCoefficients[ 0 ] * 0.886227;\n\tresult += shCoefficients[ 1 ] * 2.0 * 0.511664 * y;\n\tresult += shCoefficients[ 2 ] * 2.0 * 0.511664 * z;\n\tresult += shCoefficients[ 3 ] * 2.0 * 0.511664 * x;\n\tresult += shCoefficients[ 4 ] * 2.0 * 0.429043 * x * y;\n\tresult += shCoefficients[ 5 ] * 2.0 * 0.429043 * y * z;\n\tresult += shCoefficients[ 6 ] * ( 0.743125 * z * z - 0.247708 );\n\tresult += shCoefficients[ 7 ] * 2.0 * 0.429043 * x * z;\n\tresult += shCoefficients[ 8 ] * 0.429043 * ( x * x - y * y );\n\treturn result;\n}\nvec3 getLightProbeIrradiance( const in vec3 lightProbe[ 9 ], const in vec3 normal ) {\n\tvec3 worldNormal = inverseTransformDirection( normal, viewMatrix );\n\tvec3 irradiance = shGetIrradianceAt( worldNormal, lightProbe );\n\treturn irradiance;\n}\nvec3 getAmbientLightIrradiance( const in vec3 ambientLightColor ) {\n\tvec3 irradiance = ambientLightColor;\n\treturn irradiance;\n}\nfloat getDistanceAttenuation( const in float lightDistance, const in float cutoffDistance, const in float decayExponent ) {\n\t#if defined ( PHYSICALLY_CORRECT_LIGHTS )\n\t\tfloat distanceFalloff = 1.0 / max( pow( lightDistance, decayExponent ), 0.01 );\n\t\tif ( cutoffDistance > 0.0 ) {\n\t\t\tdistanceFalloff *= pow2( saturate( 1.0 - pow4( lightDistance / cutoffDistance ) ) );\n\t\t}\n\t\treturn distanceFalloff;\n\t#else\n\t\tif ( cutoffDistance > 0.0 && decayExponent > 0.0 ) {\n\t\t\treturn pow( saturate( - lightDistance / cutoffDistance + 1.0 ), decayExponent );\n\t\t}\n\t\treturn 1.0;\n\t#endif\n}\nfloat getSpotAttenuation( const in float coneCosine, const in float penumbraCosine, const in float angleCosine ) {\n\treturn smoothstep( coneCosine, penumbraCosine, angleCosine );\n}\n#if NUM_DIR_LIGHTS > 0\n\tstruct DirectionalLight {\n\t\tvec3 direction;\n\t\tvec3 color;\n\t};\n\tuniform DirectionalLight directionalLights[ NUM_DIR_LIGHTS ];\n\tvoid getDirectionalLightInfo( const in DirectionalLight directionalLight, const in GeometricContext geometry, out IncidentLight light ) {\n\t\tlight.color = directionalLight.color;\n\t\tlight.direction = directionalLight.direction;\n\t\tlight.visible = true;\n\t}\n#endif\n#if NUM_POINT_LIGHTS > 0\n\tstruct PointLight {\n\t\tvec3 position;\n\t\tvec3 color;\n\t\tfloat distance;\n\t\tfloat decay;\n\t};\n\tuniform PointLight pointLights[ NUM_POINT_LIGHTS ];\n\tvoid getPointLightInfo( const in PointLight pointLight, const in GeometricContext geometry, out IncidentLight light ) {\n\t\tvec3 lVector = pointLight.position - geometry.position;\n\t\tlight.direction = normalize( lVector );\n\t\tfloat lightDistance = length( lVector );\n\t\tlight.color = pointLight.color;\n\t\tlight.color *= getDistanceAttenuation( lightDistance, pointLight.distance, pointLight.decay );\n\t\tlight.visible = ( light.color != vec3( 0.0 ) );\n\t}\n#endif\n#if NUM_SPOT_LIGHTS > 0\n\tstruct SpotLight {\n\t\tvec3 position;\n\t\tvec3 direction;\n\t\tvec3 color;\n\t\tfloat distance;\n\t\tfloat decay;\n\t\tfloat coneCos;\n\t\tfloat penumbraCos;\n\t};\n\tuniform SpotLight spotLights[ NUM_SPOT_LIGHTS ];\n\tvoid getSpotLightInfo( const in SpotLight spotLight, const in GeometricContext geometry, out IncidentLight light ) {\n\t\tvec3 lVector = spotLight.position - geometry.position;\n\t\tlight.direction = normalize( lVector );\n\t\tfloat angleCos = dot( light.direction, spotLight.direction );\n\t\tfloat spotAttenuation = getSpotAttenuation( spotLight.coneCos, spotLight.penumbraCos, angleCos );\n\t\tif ( spotAttenuation > 0.0 ) {\n\t\t\tfloat lightDistance = length( lVector );\n\t\t\tlight.color = spotLight.color * spotAttenuation;\n\t\t\tlight.color *= getDistanceAttenuation( lightDistance, spotLight.distance, spotLight.decay );\n\t\t\tlight.visible = ( light.color != vec3( 0.0 ) );\n\t\t} else {\n\t\t\tlight.color = vec3( 0.0 );\n\t\t\tlight.visible = false;\n\t\t}\n\t}\n#endif\n#if NUM_RECT_AREA_LIGHTS > 0\n\tstruct RectAreaLight {\n\t\tvec3 color;\n\t\tvec3 position;\n\t\tvec3 halfWidth;\n\t\tvec3 halfHeight;\n\t};\n\tuniform sampler2D ltc_1;\tuniform sampler2D ltc_2;\n\tuniform RectAreaLight rectAreaLights[ NUM_RECT_AREA_LIGHTS ];\n#endif\n#if NUM_HEMI_LIGHTS > 0\n\tstruct HemisphereLight {\n\t\tvec3 direction;\n\t\tvec3 skyColor;\n\t\tvec3 groundColor;\n\t};\n\tuniform HemisphereLight hemisphereLights[ NUM_HEMI_LIGHTS ];\n\tvec3 getHemisphereLightIrradiance( const in HemisphereLight hemiLight, const in vec3 normal ) {\n\t\tfloat dotNL = dot( normal, hemiLight.direction );\n\t\tfloat hemiDiffuseWeight = 0.5 * dotNL + 0.5;\n\t\tvec3 irradiance = mix( hemiLight.groundColor, hemiLight.skyColor, hemiDiffuseWeight );\n\t\treturn irradiance;\n\t}\n#endif"; - - var envmap_physical_pars_fragment = "#if defined( USE_ENVMAP )\n\tvec3 getIBLIrradiance( const in vec3 normal ) {\n\t\t#if defined( ENVMAP_TYPE_CUBE_UV )\n\t\t\tvec3 worldNormal = inverseTransformDirection( normal, viewMatrix );\n\t\t\tvec4 envMapColor = textureCubeUV( envMap, worldNormal, 1.0 );\n\t\t\treturn PI * envMapColor.rgb * envMapIntensity;\n\t\t#else\n\t\t\treturn vec3( 0.0 );\n\t\t#endif\n\t}\n\tvec3 getIBLRadiance( const in vec3 viewDir, const in vec3 normal, const in float roughness ) {\n\t\t#if defined( ENVMAP_TYPE_CUBE_UV )\n\t\t\tvec3 reflectVec = reflect( - viewDir, normal );\n\t\t\treflectVec = normalize( mix( reflectVec, normal, roughness * roughness) );\n\t\t\treflectVec = inverseTransformDirection( reflectVec, viewMatrix );\n\t\t\tvec4 envMapColor = textureCubeUV( envMap, reflectVec, roughness );\n\t\t\treturn envMapColor.rgb * envMapIntensity;\n\t\t#else\n\t\t\treturn vec3( 0.0 );\n\t\t#endif\n\t}\n#endif"; - - var lights_toon_fragment = "ToonMaterial material;\nmaterial.diffuseColor = diffuseColor.rgb;"; - - var lights_toon_pars_fragment = "varying vec3 vViewPosition;\nstruct ToonMaterial {\n\tvec3 diffuseColor;\n};\nvoid RE_Direct_Toon( const in IncidentLight directLight, const in GeometricContext geometry, const in ToonMaterial material, inout ReflectedLight reflectedLight ) {\n\tvec3 irradiance = getGradientIrradiance( geometry.normal, directLight.direction ) * directLight.color;\n\treflectedLight.directDiffuse += irradiance * BRDF_Lambert( material.diffuseColor );\n}\nvoid RE_IndirectDiffuse_Toon( const in vec3 irradiance, const in GeometricContext geometry, const in ToonMaterial material, inout ReflectedLight reflectedLight ) {\n\treflectedLight.indirectDiffuse += irradiance * BRDF_Lambert( material.diffuseColor );\n}\n#define RE_Direct\t\t\t\tRE_Direct_Toon\n#define RE_IndirectDiffuse\t\tRE_IndirectDiffuse_Toon\n#define Material_LightProbeLOD( material )\t(0)"; - - var lights_phong_fragment = "BlinnPhongMaterial material;\nmaterial.diffuseColor = diffuseColor.rgb;\nmaterial.specularColor = specular;\nmaterial.specularShininess = shininess;\nmaterial.specularStrength = specularStrength;"; - - var lights_phong_pars_fragment = "varying vec3 vViewPosition;\nstruct BlinnPhongMaterial {\n\tvec3 diffuseColor;\n\tvec3 specularColor;\n\tfloat specularShininess;\n\tfloat specularStrength;\n};\nvoid RE_Direct_BlinnPhong( const in IncidentLight directLight, const in GeometricContext geometry, const in BlinnPhongMaterial material, inout ReflectedLight reflectedLight ) {\n\tfloat dotNL = saturate( dot( geometry.normal, directLight.direction ) );\n\tvec3 irradiance = dotNL * directLight.color;\n\treflectedLight.directDiffuse += irradiance * BRDF_Lambert( material.diffuseColor );\n\treflectedLight.directSpecular += irradiance * BRDF_BlinnPhong( directLight.direction, geometry.viewDir, geometry.normal, material.specularColor, material.specularShininess ) * material.specularStrength;\n}\nvoid RE_IndirectDiffuse_BlinnPhong( const in vec3 irradiance, const in GeometricContext geometry, const in BlinnPhongMaterial material, inout ReflectedLight reflectedLight ) {\n\treflectedLight.indirectDiffuse += irradiance * BRDF_Lambert( material.diffuseColor );\n}\n#define RE_Direct\t\t\t\tRE_Direct_BlinnPhong\n#define RE_IndirectDiffuse\t\tRE_IndirectDiffuse_BlinnPhong\n#define Material_LightProbeLOD( material )\t(0)"; - - var lights_physical_fragment = "PhysicalMaterial material;\nmaterial.diffuseColor = diffuseColor.rgb * ( 1.0 - metalnessFactor );\nvec3 dxy = max( abs( dFdx( geometryNormal ) ), abs( dFdy( geometryNormal ) ) );\nfloat geometryRoughness = max( max( dxy.x, dxy.y ), dxy.z );\nmaterial.roughness = max( roughnessFactor, 0.0525 );material.roughness += geometryRoughness;\nmaterial.roughness = min( material.roughness, 1.0 );\n#ifdef IOR\n\t#ifdef SPECULAR\n\t\tfloat specularIntensityFactor = specularIntensity;\n\t\tvec3 specularColorFactor = specularColor;\n\t\t#ifdef USE_SPECULARINTENSITYMAP\n\t\t\tspecularIntensityFactor *= texture2D( specularIntensityMap, vUv ).a;\n\t\t#endif\n\t\t#ifdef USE_SPECULARCOLORMAP\n\t\t\tspecularColorFactor *= texture2D( specularColorMap, vUv ).rgb;\n\t\t#endif\n\t\tmaterial.specularF90 = mix( specularIntensityFactor, 1.0, metalnessFactor );\n\t#else\n\t\tfloat specularIntensityFactor = 1.0;\n\t\tvec3 specularColorFactor = vec3( 1.0 );\n\t\tmaterial.specularF90 = 1.0;\n\t#endif\n\tmaterial.specularColor = mix( min( pow2( ( ior - 1.0 ) / ( ior + 1.0 ) ) * specularColorFactor, vec3( 1.0 ) ) * specularIntensityFactor, diffuseColor.rgb, metalnessFactor );\n#else\n\tmaterial.specularColor = mix( vec3( 0.04 ), diffuseColor.rgb, metalnessFactor );\n\tmaterial.specularF90 = 1.0;\n#endif\n#ifdef USE_CLEARCOAT\n\tmaterial.clearcoat = clearcoat;\n\tmaterial.clearcoatRoughness = clearcoatRoughness;\n\tmaterial.clearcoatF0 = vec3( 0.04 );\n\tmaterial.clearcoatF90 = 1.0;\n\t#ifdef USE_CLEARCOATMAP\n\t\tmaterial.clearcoat *= texture2D( clearcoatMap, vUv ).x;\n\t#endif\n\t#ifdef USE_CLEARCOAT_ROUGHNESSMAP\n\t\tmaterial.clearcoatRoughness *= texture2D( clearcoatRoughnessMap, vUv ).y;\n\t#endif\n\tmaterial.clearcoat = saturate( material.clearcoat );\tmaterial.clearcoatRoughness = max( material.clearcoatRoughness, 0.0525 );\n\tmaterial.clearcoatRoughness += geometryRoughness;\n\tmaterial.clearcoatRoughness = min( material.clearcoatRoughness, 1.0 );\n#endif\n#ifdef USE_SHEEN\n\tmaterial.sheenColor = sheenColor;\n\t#ifdef USE_SHEENCOLORMAP\n\t\tmaterial.sheenColor *= texture2D( sheenColorMap, vUv ).rgb;\n\t#endif\n\tmaterial.sheenRoughness = clamp( sheenRoughness, 0.07, 1.0 );\n\t#ifdef USE_SHEENROUGHNESSMAP\n\t\tmaterial.sheenRoughness *= texture2D( sheenRoughnessMap, vUv ).a;\n\t#endif\n#endif"; - - var lights_physical_pars_fragment = "struct PhysicalMaterial {\n\tvec3 diffuseColor;\n\tfloat roughness;\n\tvec3 specularColor;\n\tfloat specularF90;\n\t#ifdef USE_CLEARCOAT\n\t\tfloat clearcoat;\n\t\tfloat clearcoatRoughness;\n\t\tvec3 clearcoatF0;\n\t\tfloat clearcoatF90;\n\t#endif\n\t#ifdef USE_SHEEN\n\t\tvec3 sheenColor;\n\t\tfloat sheenRoughness;\n\t#endif\n};\nvec3 clearcoatSpecular = vec3( 0.0 );\nvec3 sheenSpecular = vec3( 0.0 );\nfloat IBLSheenBRDF( const in vec3 normal, const in vec3 viewDir, const in float roughness) {\n\tfloat dotNV = saturate( dot( normal, viewDir ) );\n\tfloat r2 = roughness * roughness;\n\tfloat a = roughness < 0.25 ? -339.2 * r2 + 161.4 * roughness - 25.9 : -8.48 * r2 + 14.3 * roughness - 9.95;\n\tfloat b = roughness < 0.25 ? 44.0 * r2 - 23.7 * roughness + 3.26 : 1.97 * r2 - 3.27 * roughness + 0.72;\n\tfloat DG = exp( a * dotNV + b ) + ( roughness < 0.25 ? 0.0 : 0.1 * ( roughness - 0.25 ) );\n\treturn saturate( DG * RECIPROCAL_PI );\n}\nvec2 DFGApprox( const in vec3 normal, const in vec3 viewDir, const in float roughness ) {\n\tfloat dotNV = saturate( dot( normal, viewDir ) );\n\tconst vec4 c0 = vec4( - 1, - 0.0275, - 0.572, 0.022 );\n\tconst vec4 c1 = vec4( 1, 0.0425, 1.04, - 0.04 );\n\tvec4 r = roughness * c0 + c1;\n\tfloat a004 = min( r.x * r.x, exp2( - 9.28 * dotNV ) ) * r.x + r.y;\n\tvec2 fab = vec2( - 1.04, 1.04 ) * a004 + r.zw;\n\treturn fab;\n}\nvec3 EnvironmentBRDF( const in vec3 normal, const in vec3 viewDir, const in vec3 specularColor, const in float specularF90, const in float roughness ) {\n\tvec2 fab = DFGApprox( normal, viewDir, roughness );\n\treturn specularColor * fab.x + specularF90 * fab.y;\n}\nvoid computeMultiscattering( const in vec3 normal, const in vec3 viewDir, const in vec3 specularColor, const in float specularF90, const in float roughness, inout vec3 singleScatter, inout vec3 multiScatter ) {\n\tvec2 fab = DFGApprox( normal, viewDir, roughness );\n\tvec3 FssEss = specularColor * fab.x + specularF90 * fab.y;\n\tfloat Ess = fab.x + fab.y;\n\tfloat Ems = 1.0 - Ess;\n\tvec3 Favg = specularColor + ( 1.0 - specularColor ) * 0.047619;\tvec3 Fms = FssEss * Favg / ( 1.0 - Ems * Favg );\n\tsingleScatter += FssEss;\n\tmultiScatter += Fms * Ems;\n}\n#if NUM_RECT_AREA_LIGHTS > 0\n\tvoid RE_Direct_RectArea_Physical( const in RectAreaLight rectAreaLight, const in GeometricContext geometry, const in PhysicalMaterial material, inout ReflectedLight reflectedLight ) {\n\t\tvec3 normal = geometry.normal;\n\t\tvec3 viewDir = geometry.viewDir;\n\t\tvec3 position = geometry.position;\n\t\tvec3 lightPos = rectAreaLight.position;\n\t\tvec3 halfWidth = rectAreaLight.halfWidth;\n\t\tvec3 halfHeight = rectAreaLight.halfHeight;\n\t\tvec3 lightColor = rectAreaLight.color;\n\t\tfloat roughness = material.roughness;\n\t\tvec3 rectCoords[ 4 ];\n\t\trectCoords[ 0 ] = lightPos + halfWidth - halfHeight;\t\trectCoords[ 1 ] = lightPos - halfWidth - halfHeight;\n\t\trectCoords[ 2 ] = lightPos - halfWidth + halfHeight;\n\t\trectCoords[ 3 ] = lightPos + halfWidth + halfHeight;\n\t\tvec2 uv = LTC_Uv( normal, viewDir, roughness );\n\t\tvec4 t1 = texture2D( ltc_1, uv );\n\t\tvec4 t2 = texture2D( ltc_2, uv );\n\t\tmat3 mInv = mat3(\n\t\t\tvec3( t1.x, 0, t1.y ),\n\t\t\tvec3( 0, 1, 0 ),\n\t\t\tvec3( t1.z, 0, t1.w )\n\t\t);\n\t\tvec3 fresnel = ( material.specularColor * t2.x + ( vec3( 1.0 ) - material.specularColor ) * t2.y );\n\t\treflectedLight.directSpecular += lightColor * fresnel * LTC_Evaluate( normal, viewDir, position, mInv, rectCoords );\n\t\treflectedLight.directDiffuse += lightColor * material.diffuseColor * LTC_Evaluate( normal, viewDir, position, mat3( 1.0 ), rectCoords );\n\t}\n#endif\nvoid RE_Direct_Physical( const in IncidentLight directLight, const in GeometricContext geometry, const in PhysicalMaterial material, inout ReflectedLight reflectedLight ) {\n\tfloat dotNL = saturate( dot( geometry.normal, directLight.direction ) );\n\tvec3 irradiance = dotNL * directLight.color;\n\t#ifdef USE_CLEARCOAT\n\t\tfloat dotNLcc = saturate( dot( geometry.clearcoatNormal, directLight.direction ) );\n\t\tvec3 ccIrradiance = dotNLcc * directLight.color;\n\t\tclearcoatSpecular += ccIrradiance * BRDF_GGX( directLight.direction, geometry.viewDir, geometry.clearcoatNormal, material.clearcoatF0, material.clearcoatF90, material.clearcoatRoughness );\n\t#endif\n\t#ifdef USE_SHEEN\n\t\tsheenSpecular += irradiance * BRDF_Sheen( directLight.direction, geometry.viewDir, geometry.normal, material.sheenColor, material.sheenRoughness );\n\t#endif\n\treflectedLight.directSpecular += irradiance * BRDF_GGX( directLight.direction, geometry.viewDir, geometry.normal, material.specularColor, material.specularF90, material.roughness );\n\treflectedLight.directDiffuse += irradiance * BRDF_Lambert( material.diffuseColor );\n}\nvoid RE_IndirectDiffuse_Physical( const in vec3 irradiance, const in GeometricContext geometry, const in PhysicalMaterial material, inout ReflectedLight reflectedLight ) {\n\treflectedLight.indirectDiffuse += irradiance * BRDF_Lambert( material.diffuseColor );\n}\nvoid RE_IndirectSpecular_Physical( const in vec3 radiance, const in vec3 irradiance, const in vec3 clearcoatRadiance, const in GeometricContext geometry, const in PhysicalMaterial material, inout ReflectedLight reflectedLight) {\n\t#ifdef USE_CLEARCOAT\n\t\tclearcoatSpecular += clearcoatRadiance * EnvironmentBRDF( geometry.clearcoatNormal, geometry.viewDir, material.clearcoatF0, material.clearcoatF90, material.clearcoatRoughness );\n\t#endif\n\t#ifdef USE_SHEEN\n\t\tsheenSpecular += irradiance * material.sheenColor * IBLSheenBRDF( geometry.normal, geometry.viewDir, material.sheenRoughness );\n\t#endif\n\tvec3 singleScattering = vec3( 0.0 );\n\tvec3 multiScattering = vec3( 0.0 );\n\tvec3 cosineWeightedIrradiance = irradiance * RECIPROCAL_PI;\n\tcomputeMultiscattering( geometry.normal, geometry.viewDir, material.specularColor, material.specularF90, material.roughness, singleScattering, multiScattering );\n\tvec3 diffuse = material.diffuseColor * ( 1.0 - ( singleScattering + multiScattering ) );\n\treflectedLight.indirectSpecular += radiance * singleScattering;\n\treflectedLight.indirectSpecular += multiScattering * cosineWeightedIrradiance;\n\treflectedLight.indirectDiffuse += diffuse * cosineWeightedIrradiance;\n}\n#define RE_Direct\t\t\t\tRE_Direct_Physical\n#define RE_Direct_RectArea\t\tRE_Direct_RectArea_Physical\n#define RE_IndirectDiffuse\t\tRE_IndirectDiffuse_Physical\n#define RE_IndirectSpecular\t\tRE_IndirectSpecular_Physical\nfloat computeSpecularOcclusion( const in float dotNV, const in float ambientOcclusion, const in float roughness ) {\n\treturn saturate( pow( dotNV + ambientOcclusion, exp2( - 16.0 * roughness - 1.0 ) ) - 1.0 + ambientOcclusion );\n}"; - - var lights_fragment_begin = "\nGeometricContext geometry;\ngeometry.position = - vViewPosition;\ngeometry.normal = normal;\ngeometry.viewDir = ( isOrthographic ) ? vec3( 0, 0, 1 ) : normalize( vViewPosition );\n#ifdef USE_CLEARCOAT\n\tgeometry.clearcoatNormal = clearcoatNormal;\n#endif\nIncidentLight directLight;\n#if ( NUM_POINT_LIGHTS > 0 ) && defined( RE_Direct )\n\tPointLight pointLight;\n\t#if defined( USE_SHADOWMAP ) && NUM_POINT_LIGHT_SHADOWS > 0\n\tPointLightShadow pointLightShadow;\n\t#endif\n\t#pragma unroll_loop_start\n\tfor ( int i = 0; i < NUM_POINT_LIGHTS; i ++ ) {\n\t\tpointLight = pointLights[ i ];\n\t\tgetPointLightInfo( pointLight, geometry, directLight );\n\t\t#if defined( USE_SHADOWMAP ) && ( UNROLLED_LOOP_INDEX < NUM_POINT_LIGHT_SHADOWS )\n\t\tpointLightShadow = pointLightShadows[ i ];\n\t\tdirectLight.color *= all( bvec2( directLight.visible, receiveShadow ) ) ? getPointShadow( pointShadowMap[ i ], pointLightShadow.shadowMapSize, pointLightShadow.shadowBias, pointLightShadow.shadowRadius, vPointShadowCoord[ i ], pointLightShadow.shadowCameraNear, pointLightShadow.shadowCameraFar ) : 1.0;\n\t\t#endif\n\t\tRE_Direct( directLight, geometry, material, reflectedLight );\n\t}\n\t#pragma unroll_loop_end\n#endif\n#if ( NUM_SPOT_LIGHTS > 0 ) && defined( RE_Direct )\n\tSpotLight spotLight;\n\t#if defined( USE_SHADOWMAP ) && NUM_SPOT_LIGHT_SHADOWS > 0\n\tSpotLightShadow spotLightShadow;\n\t#endif\n\t#pragma unroll_loop_start\n\tfor ( int i = 0; i < NUM_SPOT_LIGHTS; i ++ ) {\n\t\tspotLight = spotLights[ i ];\n\t\tgetSpotLightInfo( spotLight, geometry, directLight );\n\t\t#if defined( USE_SHADOWMAP ) && ( UNROLLED_LOOP_INDEX < NUM_SPOT_LIGHT_SHADOWS )\n\t\tspotLightShadow = spotLightShadows[ i ];\n\t\tdirectLight.color *= all( bvec2( directLight.visible, receiveShadow ) ) ? getShadow( spotShadowMap[ i ], spotLightShadow.shadowMapSize, spotLightShadow.shadowBias, spotLightShadow.shadowRadius, vSpotShadowCoord[ i ] ) : 1.0;\n\t\t#endif\n\t\tRE_Direct( directLight, geometry, material, reflectedLight );\n\t}\n\t#pragma unroll_loop_end\n#endif\n#if ( NUM_DIR_LIGHTS > 0 ) && defined( RE_Direct )\n\tDirectionalLight directionalLight;\n\t#if defined( USE_SHADOWMAP ) && NUM_DIR_LIGHT_SHADOWS > 0\n\tDirectionalLightShadow directionalLightShadow;\n\t#endif\n\t#pragma unroll_loop_start\n\tfor ( int i = 0; i < NUM_DIR_LIGHTS; i ++ ) {\n\t\tdirectionalLight = directionalLights[ i ];\n\t\tgetDirectionalLightInfo( directionalLight, geometry, directLight );\n\t\t#if defined( USE_SHADOWMAP ) && ( UNROLLED_LOOP_INDEX < NUM_DIR_LIGHT_SHADOWS )\n\t\tdirectionalLightShadow = directionalLightShadows[ i ];\n\t\tdirectLight.color *= all( bvec2( directLight.visible, receiveShadow ) ) ? getShadow( directionalShadowMap[ i ], directionalLightShadow.shadowMapSize, directionalLightShadow.shadowBias, directionalLightShadow.shadowRadius, vDirectionalShadowCoord[ i ] ) : 1.0;\n\t\t#endif\n\t\tRE_Direct( directLight, geometry, material, reflectedLight );\n\t}\n\t#pragma unroll_loop_end\n#endif\n#if ( NUM_RECT_AREA_LIGHTS > 0 ) && defined( RE_Direct_RectArea )\n\tRectAreaLight rectAreaLight;\n\t#pragma unroll_loop_start\n\tfor ( int i = 0; i < NUM_RECT_AREA_LIGHTS; i ++ ) {\n\t\trectAreaLight = rectAreaLights[ i ];\n\t\tRE_Direct_RectArea( rectAreaLight, geometry, material, reflectedLight );\n\t}\n\t#pragma unroll_loop_end\n#endif\n#if defined( RE_IndirectDiffuse )\n\tvec3 iblIrradiance = vec3( 0.0 );\n\tvec3 irradiance = getAmbientLightIrradiance( ambientLightColor );\n\tirradiance += getLightProbeIrradiance( lightProbe, geometry.normal );\n\t#if ( NUM_HEMI_LIGHTS > 0 )\n\t\t#pragma unroll_loop_start\n\t\tfor ( int i = 0; i < NUM_HEMI_LIGHTS; i ++ ) {\n\t\t\tirradiance += getHemisphereLightIrradiance( hemisphereLights[ i ], geometry.normal );\n\t\t}\n\t\t#pragma unroll_loop_end\n\t#endif\n#endif\n#if defined( RE_IndirectSpecular )\n\tvec3 radiance = vec3( 0.0 );\n\tvec3 clearcoatRadiance = vec3( 0.0 );\n#endif"; - - var lights_fragment_maps = "#if defined( RE_IndirectDiffuse )\n\t#ifdef USE_LIGHTMAP\n\t\tvec4 lightMapTexel = texture2D( lightMap, vUv2 );\n\t\tvec3 lightMapIrradiance = lightMapTexel.rgb * lightMapIntensity;\n\t\tirradiance += lightMapIrradiance;\n\t#endif\n\t#if defined( USE_ENVMAP ) && defined( STANDARD ) && defined( ENVMAP_TYPE_CUBE_UV )\n\t\tiblIrradiance += getIBLIrradiance( geometry.normal );\n\t#endif\n#endif\n#if defined( USE_ENVMAP ) && defined( RE_IndirectSpecular )\n\tradiance += getIBLRadiance( geometry.viewDir, geometry.normal, material.roughness );\n\t#ifdef USE_CLEARCOAT\n\t\tclearcoatRadiance += getIBLRadiance( geometry.viewDir, geometry.clearcoatNormal, material.clearcoatRoughness );\n\t#endif\n#endif"; - - var lights_fragment_end = "#if defined( RE_IndirectDiffuse )\n\tRE_IndirectDiffuse( irradiance, geometry, material, reflectedLight );\n#endif\n#if defined( RE_IndirectSpecular )\n\tRE_IndirectSpecular( radiance, iblIrradiance, clearcoatRadiance, geometry, material, reflectedLight );\n#endif"; - - var logdepthbuf_fragment = "#if defined( USE_LOGDEPTHBUF ) && defined( USE_LOGDEPTHBUF_EXT )\n\tgl_FragDepthEXT = vIsPerspective == 0.0 ? gl_FragCoord.z : log2( vFragDepth ) * logDepthBufFC * 0.5;\n#endif"; - - var logdepthbuf_pars_fragment = "#if defined( USE_LOGDEPTHBUF ) && defined( USE_LOGDEPTHBUF_EXT )\n\tuniform float logDepthBufFC;\n\tvarying float vFragDepth;\n\tvarying float vIsPerspective;\n#endif"; - - var logdepthbuf_pars_vertex = "#ifdef USE_LOGDEPTHBUF\n\t#ifdef USE_LOGDEPTHBUF_EXT\n\t\tvarying float vFragDepth;\n\t\tvarying float vIsPerspective;\n\t#else\n\t\tuniform float logDepthBufFC;\n\t#endif\n#endif"; - - var logdepthbuf_vertex = "#ifdef USE_LOGDEPTHBUF\n\t#ifdef USE_LOGDEPTHBUF_EXT\n\t\tvFragDepth = 1.0 + gl_Position.w;\n\t\tvIsPerspective = float( isPerspectiveMatrix( projectionMatrix ) );\n\t#else\n\t\tif ( isPerspectiveMatrix( projectionMatrix ) ) {\n\t\t\tgl_Position.z = log2( max( EPSILON, gl_Position.w + 1.0 ) ) * logDepthBufFC - 1.0;\n\t\t\tgl_Position.z *= gl_Position.w;\n\t\t}\n\t#endif\n#endif"; - - var map_fragment = "#ifdef USE_MAP\n\tvec4 sampledDiffuseColor = texture2D( map, vUv );\n\t#ifdef DECODE_VIDEO_TEXTURE\n\t\tsampledDiffuseColor = vec4( mix( pow( sampledDiffuseColor.rgb * 0.9478672986 + vec3( 0.0521327014 ), vec3( 2.4 ) ), sampledDiffuseColor.rgb * 0.0773993808, vec3( lessThanEqual( sampledDiffuseColor.rgb, vec3( 0.04045 ) ) ) ), sampledDiffuseColor.w );\n\t#endif\n\tdiffuseColor *= sampledDiffuseColor;\n#endif"; - - var map_pars_fragment = "#ifdef USE_MAP\n\tuniform sampler2D map;\n#endif"; - - var map_particle_fragment = "#if defined( USE_MAP ) || defined( USE_ALPHAMAP )\n\tvec2 uv = ( uvTransform * vec3( gl_PointCoord.x, 1.0 - gl_PointCoord.y, 1 ) ).xy;\n#endif\n#ifdef USE_MAP\n\tdiffuseColor *= texture2D( map, uv );\n#endif\n#ifdef USE_ALPHAMAP\n\tdiffuseColor.a *= texture2D( alphaMap, uv ).g;\n#endif"; - - var map_particle_pars_fragment = "#if defined( USE_MAP ) || defined( USE_ALPHAMAP )\n\tuniform mat3 uvTransform;\n#endif\n#ifdef USE_MAP\n\tuniform sampler2D map;\n#endif\n#ifdef USE_ALPHAMAP\n\tuniform sampler2D alphaMap;\n#endif"; - - var metalnessmap_fragment = "float metalnessFactor = metalness;\n#ifdef USE_METALNESSMAP\n\tvec4 texelMetalness = texture2D( metalnessMap, vUv );\n\tmetalnessFactor *= texelMetalness.b;\n#endif"; - - var metalnessmap_pars_fragment = "#ifdef USE_METALNESSMAP\n\tuniform sampler2D metalnessMap;\n#endif"; - - var morphcolor_vertex = "#if defined( USE_MORPHCOLORS ) && defined( MORPHTARGETS_TEXTURE )\n\tvColor *= morphTargetBaseInfluence;\n\tfor ( int i = 0; i < MORPHTARGETS_COUNT; i ++ ) {\n\t\t#if defined( USE_COLOR_ALPHA )\n\t\t\tif ( morphTargetInfluences[ i ] != 0.0 ) vColor += getMorph( gl_VertexID, i, 2 ) * morphTargetInfluences[ i ];\n\t\t#elif defined( USE_COLOR )\n\t\t\tif ( morphTargetInfluences[ i ] != 0.0 ) vColor += getMorph( gl_VertexID, i, 2 ).rgb * morphTargetInfluences[ i ];\n\t\t#endif\n\t}\n#endif"; - - var morphnormal_vertex = "#ifdef USE_MORPHNORMALS\n\tobjectNormal *= morphTargetBaseInfluence;\n\t#ifdef MORPHTARGETS_TEXTURE\n\t\tfor ( int i = 0; i < MORPHTARGETS_COUNT; i ++ ) {\n\t\t\tif ( morphTargetInfluences[ i ] != 0.0 ) objectNormal += getMorph( gl_VertexID, i, 1 ).xyz * morphTargetInfluences[ i ];\n\t\t}\n\t#else\n\t\tobjectNormal += morphNormal0 * morphTargetInfluences[ 0 ];\n\t\tobjectNormal += morphNormal1 * morphTargetInfluences[ 1 ];\n\t\tobjectNormal += morphNormal2 * morphTargetInfluences[ 2 ];\n\t\tobjectNormal += morphNormal3 * morphTargetInfluences[ 3 ];\n\t#endif\n#endif"; - - var morphtarget_pars_vertex = "#ifdef USE_MORPHTARGETS\n\tuniform float morphTargetBaseInfluence;\n\t#ifdef MORPHTARGETS_TEXTURE\n\t\tuniform float morphTargetInfluences[ MORPHTARGETS_COUNT ];\n\t\tuniform sampler2DArray morphTargetsTexture;\n\t\tuniform ivec2 morphTargetsTextureSize;\n\t\tvec4 getMorph( const in int vertexIndex, const in int morphTargetIndex, const in int offset ) {\n\t\t\tint texelIndex = vertexIndex * MORPHTARGETS_TEXTURE_STRIDE + offset;\n\t\t\tint y = texelIndex / morphTargetsTextureSize.x;\n\t\t\tint x = texelIndex - y * morphTargetsTextureSize.x;\n\t\t\tivec3 morphUV = ivec3( x, y, morphTargetIndex );\n\t\t\treturn texelFetch( morphTargetsTexture, morphUV, 0 );\n\t\t}\n\t#else\n\t\t#ifndef USE_MORPHNORMALS\n\t\t\tuniform float morphTargetInfluences[ 8 ];\n\t\t#else\n\t\t\tuniform float morphTargetInfluences[ 4 ];\n\t\t#endif\n\t#endif\n#endif"; - - var morphtarget_vertex = "#ifdef USE_MORPHTARGETS\n\ttransformed *= morphTargetBaseInfluence;\n\t#ifdef MORPHTARGETS_TEXTURE\n\t\tfor ( int i = 0; i < MORPHTARGETS_COUNT; i ++ ) {\n\t\t\tif ( morphTargetInfluences[ i ] != 0.0 ) transformed += getMorph( gl_VertexID, i, 0 ).xyz * morphTargetInfluences[ i ];\n\t\t}\n\t#else\n\t\ttransformed += morphTarget0 * morphTargetInfluences[ 0 ];\n\t\ttransformed += morphTarget1 * morphTargetInfluences[ 1 ];\n\t\ttransformed += morphTarget2 * morphTargetInfluences[ 2 ];\n\t\ttransformed += morphTarget3 * morphTargetInfluences[ 3 ];\n\t\t#ifndef USE_MORPHNORMALS\n\t\t\ttransformed += morphTarget4 * morphTargetInfluences[ 4 ];\n\t\t\ttransformed += morphTarget5 * morphTargetInfluences[ 5 ];\n\t\t\ttransformed += morphTarget6 * morphTargetInfluences[ 6 ];\n\t\t\ttransformed += morphTarget7 * morphTargetInfluences[ 7 ];\n\t\t#endif\n\t#endif\n#endif"; - - var normal_fragment_begin = "float faceDirection = gl_FrontFacing ? 1.0 : - 1.0;\n#ifdef FLAT_SHADED\n\tvec3 fdx = vec3( dFdx( vViewPosition.x ), dFdx( vViewPosition.y ), dFdx( vViewPosition.z ) );\n\tvec3 fdy = vec3( dFdy( vViewPosition.x ), dFdy( vViewPosition.y ), dFdy( vViewPosition.z ) );\n\tvec3 normal = normalize( cross( fdx, fdy ) );\n#else\n\tvec3 normal = normalize( vNormal );\n\t#ifdef DOUBLE_SIDED\n\t\tnormal = normal * faceDirection;\n\t#endif\n\t#ifdef USE_TANGENT\n\t\tvec3 tangent = normalize( vTangent );\n\t\tvec3 bitangent = normalize( vBitangent );\n\t\t#ifdef DOUBLE_SIDED\n\t\t\ttangent = tangent * faceDirection;\n\t\t\tbitangent = bitangent * faceDirection;\n\t\t#endif\n\t\t#if defined( TANGENTSPACE_NORMALMAP ) || defined( USE_CLEARCOAT_NORMALMAP )\n\t\t\tmat3 vTBN = mat3( tangent, bitangent, normal );\n\t\t#endif\n\t#endif\n#endif\nvec3 geometryNormal = normal;"; - - var normal_fragment_maps = "#ifdef OBJECTSPACE_NORMALMAP\n\tnormal = texture2D( normalMap, vUv ).xyz * 2.0 - 1.0;\n\t#ifdef FLIP_SIDED\n\t\tnormal = - normal;\n\t#endif\n\t#ifdef DOUBLE_SIDED\n\t\tnormal = normal * faceDirection;\n\t#endif\n\tnormal = normalize( normalMatrix * normal );\n#elif defined( TANGENTSPACE_NORMALMAP )\n\tvec3 mapN = texture2D( normalMap, vUv ).xyz * 2.0 - 1.0;\n\tmapN.xy *= normalScale;\n\t#ifdef USE_TANGENT\n\t\tnormal = normalize( vTBN * mapN );\n\t#else\n\t\tnormal = perturbNormal2Arb( - vViewPosition, normal, mapN, faceDirection );\n\t#endif\n#elif defined( USE_BUMPMAP )\n\tnormal = perturbNormalArb( - vViewPosition, normal, dHdxy_fwd(), faceDirection );\n#endif"; - - var normal_pars_fragment = "#ifndef FLAT_SHADED\n\tvarying vec3 vNormal;\n\t#ifdef USE_TANGENT\n\t\tvarying vec3 vTangent;\n\t\tvarying vec3 vBitangent;\n\t#endif\n#endif"; - - var normal_pars_vertex = "#ifndef FLAT_SHADED\n\tvarying vec3 vNormal;\n\t#ifdef USE_TANGENT\n\t\tvarying vec3 vTangent;\n\t\tvarying vec3 vBitangent;\n\t#endif\n#endif"; - - var normal_vertex = "#ifndef FLAT_SHADED\n\tvNormal = normalize( transformedNormal );\n\t#ifdef USE_TANGENT\n\t\tvTangent = normalize( transformedTangent );\n\t\tvBitangent = normalize( cross( vNormal, vTangent ) * tangent.w );\n\t#endif\n#endif"; - - var normalmap_pars_fragment = "#ifdef USE_NORMALMAP\n\tuniform sampler2D normalMap;\n\tuniform vec2 normalScale;\n#endif\n#ifdef OBJECTSPACE_NORMALMAP\n\tuniform mat3 normalMatrix;\n#endif\n#if ! defined ( USE_TANGENT ) && ( defined ( TANGENTSPACE_NORMALMAP ) || defined ( USE_CLEARCOAT_NORMALMAP ) )\n\tvec3 perturbNormal2Arb( vec3 eye_pos, vec3 surf_norm, vec3 mapN, float faceDirection ) {\n\t\tvec3 q0 = vec3( dFdx( eye_pos.x ), dFdx( eye_pos.y ), dFdx( eye_pos.z ) );\n\t\tvec3 q1 = vec3( dFdy( eye_pos.x ), dFdy( eye_pos.y ), dFdy( eye_pos.z ) );\n\t\tvec2 st0 = dFdx( vUv.st );\n\t\tvec2 st1 = dFdy( vUv.st );\n\t\tvec3 N = surf_norm;\n\t\tvec3 q1perp = cross( q1, N );\n\t\tvec3 q0perp = cross( N, q0 );\n\t\tvec3 T = q1perp * st0.x + q0perp * st1.x;\n\t\tvec3 B = q1perp * st0.y + q0perp * st1.y;\n\t\tfloat det = max( dot( T, T ), dot( B, B ) );\n\t\tfloat scale = ( det == 0.0 ) ? 0.0 : faceDirection * inversesqrt( det );\n\t\treturn normalize( T * ( mapN.x * scale ) + B * ( mapN.y * scale ) + N * mapN.z );\n\t}\n#endif"; - - var clearcoat_normal_fragment_begin = "#ifdef USE_CLEARCOAT\n\tvec3 clearcoatNormal = geometryNormal;\n#endif"; - - var clearcoat_normal_fragment_maps = "#ifdef USE_CLEARCOAT_NORMALMAP\n\tvec3 clearcoatMapN = texture2D( clearcoatNormalMap, vUv ).xyz * 2.0 - 1.0;\n\tclearcoatMapN.xy *= clearcoatNormalScale;\n\t#ifdef USE_TANGENT\n\t\tclearcoatNormal = normalize( vTBN * clearcoatMapN );\n\t#else\n\t\tclearcoatNormal = perturbNormal2Arb( - vViewPosition, clearcoatNormal, clearcoatMapN, faceDirection );\n\t#endif\n#endif"; - - var clearcoat_pars_fragment = "#ifdef USE_CLEARCOATMAP\n\tuniform sampler2D clearcoatMap;\n#endif\n#ifdef USE_CLEARCOAT_ROUGHNESSMAP\n\tuniform sampler2D clearcoatRoughnessMap;\n#endif\n#ifdef USE_CLEARCOAT_NORMALMAP\n\tuniform sampler2D clearcoatNormalMap;\n\tuniform vec2 clearcoatNormalScale;\n#endif"; - - var output_fragment = "#ifdef OPAQUE\ndiffuseColor.a = 1.0;\n#endif\n#ifdef USE_TRANSMISSION\ndiffuseColor.a *= transmissionAlpha + 0.1;\n#endif\ngl_FragColor = vec4( outgoingLight, diffuseColor.a );"; - - var packing = "vec3 packNormalToRGB( const in vec3 normal ) {\n\treturn normalize( normal ) * 0.5 + 0.5;\n}\nvec3 unpackRGBToNormal( const in vec3 rgb ) {\n\treturn 2.0 * rgb.xyz - 1.0;\n}\nconst float PackUpscale = 256. / 255.;const float UnpackDownscale = 255. / 256.;\nconst vec3 PackFactors = vec3( 256. * 256. * 256., 256. * 256., 256. );\nconst vec4 UnpackFactors = UnpackDownscale / vec4( PackFactors, 1. );\nconst float ShiftRight8 = 1. / 256.;\nvec4 packDepthToRGBA( const in float v ) {\n\tvec4 r = vec4( fract( v * PackFactors ), v );\n\tr.yzw -= r.xyz * ShiftRight8;\treturn r * PackUpscale;\n}\nfloat unpackRGBAToDepth( const in vec4 v ) {\n\treturn dot( v, UnpackFactors );\n}\nvec4 pack2HalfToRGBA( vec2 v ) {\n\tvec4 r = vec4( v.x, fract( v.x * 255.0 ), v.y, fract( v.y * 255.0 ) );\n\treturn vec4( r.x - r.y / 255.0, r.y, r.z - r.w / 255.0, r.w );\n}\nvec2 unpackRGBATo2Half( vec4 v ) {\n\treturn vec2( v.x + ( v.y / 255.0 ), v.z + ( v.w / 255.0 ) );\n}\nfloat viewZToOrthographicDepth( const in float viewZ, const in float near, const in float far ) {\n\treturn ( viewZ + near ) / ( near - far );\n}\nfloat orthographicDepthToViewZ( const in float linearClipZ, const in float near, const in float far ) {\n\treturn linearClipZ * ( near - far ) - near;\n}\nfloat viewZToPerspectiveDepth( const in float viewZ, const in float near, const in float far ) {\n\treturn ( ( near + viewZ ) * far ) / ( ( far - near ) * viewZ );\n}\nfloat perspectiveDepthToViewZ( const in float invClipZ, const in float near, const in float far ) {\n\treturn ( near * far ) / ( ( far - near ) * invClipZ - far );\n}"; - - var premultiplied_alpha_fragment = "#ifdef PREMULTIPLIED_ALPHA\n\tgl_FragColor.rgb *= gl_FragColor.a;\n#endif"; - - var project_vertex = "vec4 mvPosition = vec4( transformed, 1.0 );\n#ifdef USE_INSTANCING\n\tmvPosition = instanceMatrix * mvPosition;\n#endif\nmvPosition = modelViewMatrix * mvPosition;\ngl_Position = projectionMatrix * mvPosition;"; - - var dithering_fragment = "#ifdef DITHERING\n\tgl_FragColor.rgb = dithering( gl_FragColor.rgb );\n#endif"; - - var dithering_pars_fragment = "#ifdef DITHERING\n\tvec3 dithering( vec3 color ) {\n\t\tfloat grid_position = rand( gl_FragCoord.xy );\n\t\tvec3 dither_shift_RGB = vec3( 0.25 / 255.0, -0.25 / 255.0, 0.25 / 255.0 );\n\t\tdither_shift_RGB = mix( 2.0 * dither_shift_RGB, -2.0 * dither_shift_RGB, grid_position );\n\t\treturn color + dither_shift_RGB;\n\t}\n#endif"; - - var roughnessmap_fragment = "float roughnessFactor = roughness;\n#ifdef USE_ROUGHNESSMAP\n\tvec4 texelRoughness = texture2D( roughnessMap, vUv );\n\troughnessFactor *= texelRoughness.g;\n#endif"; - - var roughnessmap_pars_fragment = "#ifdef USE_ROUGHNESSMAP\n\tuniform sampler2D roughnessMap;\n#endif"; - - var shadowmap_pars_fragment = "#ifdef USE_SHADOWMAP\n\t#if NUM_DIR_LIGHT_SHADOWS > 0\n\t\tuniform sampler2D directionalShadowMap[ NUM_DIR_LIGHT_SHADOWS ];\n\t\tvarying vec4 vDirectionalShadowCoord[ NUM_DIR_LIGHT_SHADOWS ];\n\t\tstruct DirectionalLightShadow {\n\t\t\tfloat shadowBias;\n\t\t\tfloat shadowNormalBias;\n\t\t\tfloat shadowRadius;\n\t\t\tvec2 shadowMapSize;\n\t\t};\n\t\tuniform DirectionalLightShadow directionalLightShadows[ NUM_DIR_LIGHT_SHADOWS ];\n\t#endif\n\t#if NUM_SPOT_LIGHT_SHADOWS > 0\n\t\tuniform sampler2D spotShadowMap[ NUM_SPOT_LIGHT_SHADOWS ];\n\t\tvarying vec4 vSpotShadowCoord[ NUM_SPOT_LIGHT_SHADOWS ];\n\t\tstruct SpotLightShadow {\n\t\t\tfloat shadowBias;\n\t\t\tfloat shadowNormalBias;\n\t\t\tfloat shadowRadius;\n\t\t\tvec2 shadowMapSize;\n\t\t};\n\t\tuniform SpotLightShadow spotLightShadows[ NUM_SPOT_LIGHT_SHADOWS ];\n\t#endif\n\t#if NUM_POINT_LIGHT_SHADOWS > 0\n\t\tuniform sampler2D pointShadowMap[ NUM_POINT_LIGHT_SHADOWS ];\n\t\tvarying vec4 vPointShadowCoord[ NUM_POINT_LIGHT_SHADOWS ];\n\t\tstruct PointLightShadow {\n\t\t\tfloat shadowBias;\n\t\t\tfloat shadowNormalBias;\n\t\t\tfloat shadowRadius;\n\t\t\tvec2 shadowMapSize;\n\t\t\tfloat shadowCameraNear;\n\t\t\tfloat shadowCameraFar;\n\t\t};\n\t\tuniform PointLightShadow pointLightShadows[ NUM_POINT_LIGHT_SHADOWS ];\n\t#endif\n\tfloat texture2DCompare( sampler2D depths, vec2 uv, float compare ) {\n\t\treturn step( compare, unpackRGBAToDepth( texture2D( depths, uv ) ) );\n\t}\n\tvec2 texture2DDistribution( sampler2D shadow, vec2 uv ) {\n\t\treturn unpackRGBATo2Half( texture2D( shadow, uv ) );\n\t}\n\tfloat VSMShadow (sampler2D shadow, vec2 uv, float compare ){\n\t\tfloat occlusion = 1.0;\n\t\tvec2 distribution = texture2DDistribution( shadow, uv );\n\t\tfloat hard_shadow = step( compare , distribution.x );\n\t\tif (hard_shadow != 1.0 ) {\n\t\t\tfloat distance = compare - distribution.x ;\n\t\t\tfloat variance = max( 0.00000, distribution.y * distribution.y );\n\t\t\tfloat softness_probability = variance / (variance + distance * distance );\t\t\tsoftness_probability = clamp( ( softness_probability - 0.3 ) / ( 0.95 - 0.3 ), 0.0, 1.0 );\t\t\tocclusion = clamp( max( hard_shadow, softness_probability ), 0.0, 1.0 );\n\t\t}\n\t\treturn occlusion;\n\t}\n\tfloat getShadow( sampler2D shadowMap, vec2 shadowMapSize, float shadowBias, float shadowRadius, vec4 shadowCoord ) {\n\t\tfloat shadow = 1.0;\n\t\tshadowCoord.xyz /= shadowCoord.w;\n\t\tshadowCoord.z += shadowBias;\n\t\tbvec4 inFrustumVec = bvec4 ( shadowCoord.x >= 0.0, shadowCoord.x <= 1.0, shadowCoord.y >= 0.0, shadowCoord.y <= 1.0 );\n\t\tbool inFrustum = all( inFrustumVec );\n\t\tbvec2 frustumTestVec = bvec2( inFrustum, shadowCoord.z <= 1.0 );\n\t\tbool frustumTest = all( frustumTestVec );\n\t\tif ( frustumTest ) {\n\t\t#if defined( SHADOWMAP_TYPE_PCF )\n\t\t\tvec2 texelSize = vec2( 1.0 ) / shadowMapSize;\n\t\t\tfloat dx0 = - texelSize.x * shadowRadius;\n\t\t\tfloat dy0 = - texelSize.y * shadowRadius;\n\t\t\tfloat dx1 = + texelSize.x * shadowRadius;\n\t\t\tfloat dy1 = + texelSize.y * shadowRadius;\n\t\t\tfloat dx2 = dx0 / 2.0;\n\t\t\tfloat dy2 = dy0 / 2.0;\n\t\t\tfloat dx3 = dx1 / 2.0;\n\t\t\tfloat dy3 = dy1 / 2.0;\n\t\t\tshadow = (\n\t\t\t\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( dx0, dy0 ), shadowCoord.z ) +\n\t\t\t\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( 0.0, dy0 ), shadowCoord.z ) +\n\t\t\t\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( dx1, dy0 ), shadowCoord.z ) +\n\t\t\t\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( dx2, dy2 ), shadowCoord.z ) +\n\t\t\t\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( 0.0, dy2 ), shadowCoord.z ) +\n\t\t\t\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( dx3, dy2 ), shadowCoord.z ) +\n\t\t\t\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( dx0, 0.0 ), shadowCoord.z ) +\n\t\t\t\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( dx2, 0.0 ), shadowCoord.z ) +\n\t\t\t\ttexture2DCompare( shadowMap, shadowCoord.xy, shadowCoord.z ) +\n\t\t\t\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( dx3, 0.0 ), shadowCoord.z ) +\n\t\t\t\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( dx1, 0.0 ), shadowCoord.z ) +\n\t\t\t\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( dx2, dy3 ), shadowCoord.z ) +\n\t\t\t\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( 0.0, dy3 ), shadowCoord.z ) +\n\t\t\t\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( dx3, dy3 ), shadowCoord.z ) +\n\t\t\t\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( dx0, dy1 ), shadowCoord.z ) +\n\t\t\t\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( 0.0, dy1 ), shadowCoord.z ) +\n\t\t\t\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( dx1, dy1 ), shadowCoord.z )\n\t\t\t) * ( 1.0 / 17.0 );\n\t\t#elif defined( SHADOWMAP_TYPE_PCF_SOFT )\n\t\t\tvec2 texelSize = vec2( 1.0 ) / shadowMapSize;\n\t\t\tfloat dx = texelSize.x;\n\t\t\tfloat dy = texelSize.y;\n\t\t\tvec2 uv = shadowCoord.xy;\n\t\t\tvec2 f = fract( uv * shadowMapSize + 0.5 );\n\t\t\tuv -= f * texelSize;\n\t\t\tshadow = (\n\t\t\t\ttexture2DCompare( shadowMap, uv, shadowCoord.z ) +\n\t\t\t\ttexture2DCompare( shadowMap, uv + vec2( dx, 0.0 ), shadowCoord.z ) +\n\t\t\t\ttexture2DCompare( shadowMap, uv + vec2( 0.0, dy ), shadowCoord.z ) +\n\t\t\t\ttexture2DCompare( shadowMap, uv + texelSize, shadowCoord.z ) +\n\t\t\t\tmix( texture2DCompare( shadowMap, uv + vec2( -dx, 0.0 ), shadowCoord.z ), \n\t\t\t\t\t texture2DCompare( shadowMap, uv + vec2( 2.0 * dx, 0.0 ), shadowCoord.z ),\n\t\t\t\t\t f.x ) +\n\t\t\t\tmix( texture2DCompare( shadowMap, uv + vec2( -dx, dy ), shadowCoord.z ), \n\t\t\t\t\t texture2DCompare( shadowMap, uv + vec2( 2.0 * dx, dy ), shadowCoord.z ),\n\t\t\t\t\t f.x ) +\n\t\t\t\tmix( texture2DCompare( shadowMap, uv + vec2( 0.0, -dy ), shadowCoord.z ), \n\t\t\t\t\t texture2DCompare( shadowMap, uv + vec2( 0.0, 2.0 * dy ), shadowCoord.z ),\n\t\t\t\t\t f.y ) +\n\t\t\t\tmix( texture2DCompare( shadowMap, uv + vec2( dx, -dy ), shadowCoord.z ), \n\t\t\t\t\t texture2DCompare( shadowMap, uv + vec2( dx, 2.0 * dy ), shadowCoord.z ),\n\t\t\t\t\t f.y ) +\n\t\t\t\tmix( mix( texture2DCompare( shadowMap, uv + vec2( -dx, -dy ), shadowCoord.z ), \n\t\t\t\t\t\t texture2DCompare( shadowMap, uv + vec2( 2.0 * dx, -dy ), shadowCoord.z ),\n\t\t\t\t\t\t f.x ),\n\t\t\t\t\t mix( texture2DCompare( shadowMap, uv + vec2( -dx, 2.0 * dy ), shadowCoord.z ), \n\t\t\t\t\t\t texture2DCompare( shadowMap, uv + vec2( 2.0 * dx, 2.0 * dy ), shadowCoord.z ),\n\t\t\t\t\t\t f.x ),\n\t\t\t\t\t f.y )\n\t\t\t) * ( 1.0 / 9.0 );\n\t\t#elif defined( SHADOWMAP_TYPE_VSM )\n\t\t\tshadow = VSMShadow( shadowMap, shadowCoord.xy, shadowCoord.z );\n\t\t#else\n\t\t\tshadow = texture2DCompare( shadowMap, shadowCoord.xy, shadowCoord.z );\n\t\t#endif\n\t\t}\n\t\treturn shadow;\n\t}\n\tvec2 cubeToUV( vec3 v, float texelSizeY ) {\n\t\tvec3 absV = abs( v );\n\t\tfloat scaleToCube = 1.0 / max( absV.x, max( absV.y, absV.z ) );\n\t\tabsV *= scaleToCube;\n\t\tv *= scaleToCube * ( 1.0 - 2.0 * texelSizeY );\n\t\tvec2 planar = v.xy;\n\t\tfloat almostATexel = 1.5 * texelSizeY;\n\t\tfloat almostOne = 1.0 - almostATexel;\n\t\tif ( absV.z >= almostOne ) {\n\t\t\tif ( v.z > 0.0 )\n\t\t\t\tplanar.x = 4.0 - v.x;\n\t\t} else if ( absV.x >= almostOne ) {\n\t\t\tfloat signX = sign( v.x );\n\t\t\tplanar.x = v.z * signX + 2.0 * signX;\n\t\t} else if ( absV.y >= almostOne ) {\n\t\t\tfloat signY = sign( v.y );\n\t\t\tplanar.x = v.x + 2.0 * signY + 2.0;\n\t\t\tplanar.y = v.z * signY - 2.0;\n\t\t}\n\t\treturn vec2( 0.125, 0.25 ) * planar + vec2( 0.375, 0.75 );\n\t}\n\tfloat getPointShadow( sampler2D shadowMap, vec2 shadowMapSize, float shadowBias, float shadowRadius, vec4 shadowCoord, float shadowCameraNear, float shadowCameraFar ) {\n\t\tvec2 texelSize = vec2( 1.0 ) / ( shadowMapSize * vec2( 4.0, 2.0 ) );\n\t\tvec3 lightToPosition = shadowCoord.xyz;\n\t\tfloat dp = ( length( lightToPosition ) - shadowCameraNear ) / ( shadowCameraFar - shadowCameraNear );\t\tdp += shadowBias;\n\t\tvec3 bd3D = normalize( lightToPosition );\n\t\t#if defined( SHADOWMAP_TYPE_PCF ) || defined( SHADOWMAP_TYPE_PCF_SOFT ) || defined( SHADOWMAP_TYPE_VSM )\n\t\t\tvec2 offset = vec2( - 1, 1 ) * shadowRadius * texelSize.y;\n\t\t\treturn (\n\t\t\t\ttexture2DCompare( shadowMap, cubeToUV( bd3D + offset.xyy, texelSize.y ), dp ) +\n\t\t\t\ttexture2DCompare( shadowMap, cubeToUV( bd3D + offset.yyy, texelSize.y ), dp ) +\n\t\t\t\ttexture2DCompare( shadowMap, cubeToUV( bd3D + offset.xyx, texelSize.y ), dp ) +\n\t\t\t\ttexture2DCompare( shadowMap, cubeToUV( bd3D + offset.yyx, texelSize.y ), dp ) +\n\t\t\t\ttexture2DCompare( shadowMap, cubeToUV( bd3D, texelSize.y ), dp ) +\n\t\t\t\ttexture2DCompare( shadowMap, cubeToUV( bd3D + offset.xxy, texelSize.y ), dp ) +\n\t\t\t\ttexture2DCompare( shadowMap, cubeToUV( bd3D + offset.yxy, texelSize.y ), dp ) +\n\t\t\t\ttexture2DCompare( shadowMap, cubeToUV( bd3D + offset.xxx, texelSize.y ), dp ) +\n\t\t\t\ttexture2DCompare( shadowMap, cubeToUV( bd3D + offset.yxx, texelSize.y ), dp )\n\t\t\t) * ( 1.0 / 9.0 );\n\t\t#else\n\t\t\treturn texture2DCompare( shadowMap, cubeToUV( bd3D, texelSize.y ), dp );\n\t\t#endif\n\t}\n#endif"; - - var shadowmap_pars_vertex = "#ifdef USE_SHADOWMAP\n\t#if NUM_DIR_LIGHT_SHADOWS > 0\n\t\tuniform mat4 directionalShadowMatrix[ NUM_DIR_LIGHT_SHADOWS ];\n\t\tvarying vec4 vDirectionalShadowCoord[ NUM_DIR_LIGHT_SHADOWS ];\n\t\tstruct DirectionalLightShadow {\n\t\t\tfloat shadowBias;\n\t\t\tfloat shadowNormalBias;\n\t\t\tfloat shadowRadius;\n\t\t\tvec2 shadowMapSize;\n\t\t};\n\t\tuniform DirectionalLightShadow directionalLightShadows[ NUM_DIR_LIGHT_SHADOWS ];\n\t#endif\n\t#if NUM_SPOT_LIGHT_SHADOWS > 0\n\t\tuniform mat4 spotShadowMatrix[ NUM_SPOT_LIGHT_SHADOWS ];\n\t\tvarying vec4 vSpotShadowCoord[ NUM_SPOT_LIGHT_SHADOWS ];\n\t\tstruct SpotLightShadow {\n\t\t\tfloat shadowBias;\n\t\t\tfloat shadowNormalBias;\n\t\t\tfloat shadowRadius;\n\t\t\tvec2 shadowMapSize;\n\t\t};\n\t\tuniform SpotLightShadow spotLightShadows[ NUM_SPOT_LIGHT_SHADOWS ];\n\t#endif\n\t#if NUM_POINT_LIGHT_SHADOWS > 0\n\t\tuniform mat4 pointShadowMatrix[ NUM_POINT_LIGHT_SHADOWS ];\n\t\tvarying vec4 vPointShadowCoord[ NUM_POINT_LIGHT_SHADOWS ];\n\t\tstruct PointLightShadow {\n\t\t\tfloat shadowBias;\n\t\t\tfloat shadowNormalBias;\n\t\t\tfloat shadowRadius;\n\t\t\tvec2 shadowMapSize;\n\t\t\tfloat shadowCameraNear;\n\t\t\tfloat shadowCameraFar;\n\t\t};\n\t\tuniform PointLightShadow pointLightShadows[ NUM_POINT_LIGHT_SHADOWS ];\n\t#endif\n#endif"; - - var shadowmap_vertex = "#ifdef USE_SHADOWMAP\n\t#if NUM_DIR_LIGHT_SHADOWS > 0 || NUM_SPOT_LIGHT_SHADOWS > 0 || NUM_POINT_LIGHT_SHADOWS > 0\n\t\tvec3 shadowWorldNormal = inverseTransformDirection( transformedNormal, viewMatrix );\n\t\tvec4 shadowWorldPosition;\n\t#endif\n\t#if NUM_DIR_LIGHT_SHADOWS > 0\n\t#pragma unroll_loop_start\n\tfor ( int i = 0; i < NUM_DIR_LIGHT_SHADOWS; i ++ ) {\n\t\tshadowWorldPosition = worldPosition + vec4( shadowWorldNormal * directionalLightShadows[ i ].shadowNormalBias, 0 );\n\t\tvDirectionalShadowCoord[ i ] = directionalShadowMatrix[ i ] * shadowWorldPosition;\n\t}\n\t#pragma unroll_loop_end\n\t#endif\n\t#if NUM_SPOT_LIGHT_SHADOWS > 0\n\t#pragma unroll_loop_start\n\tfor ( int i = 0; i < NUM_SPOT_LIGHT_SHADOWS; i ++ ) {\n\t\tshadowWorldPosition = worldPosition + vec4( shadowWorldNormal * spotLightShadows[ i ].shadowNormalBias, 0 );\n\t\tvSpotShadowCoord[ i ] = spotShadowMatrix[ i ] * shadowWorldPosition;\n\t}\n\t#pragma unroll_loop_end\n\t#endif\n\t#if NUM_POINT_LIGHT_SHADOWS > 0\n\t#pragma unroll_loop_start\n\tfor ( int i = 0; i < NUM_POINT_LIGHT_SHADOWS; i ++ ) {\n\t\tshadowWorldPosition = worldPosition + vec4( shadowWorldNormal * pointLightShadows[ i ].shadowNormalBias, 0 );\n\t\tvPointShadowCoord[ i ] = pointShadowMatrix[ i ] * shadowWorldPosition;\n\t}\n\t#pragma unroll_loop_end\n\t#endif\n#endif"; - - var shadowmask_pars_fragment = "float getShadowMask() {\n\tfloat shadow = 1.0;\n\t#ifdef USE_SHADOWMAP\n\t#if NUM_DIR_LIGHT_SHADOWS > 0\n\tDirectionalLightShadow directionalLight;\n\t#pragma unroll_loop_start\n\tfor ( int i = 0; i < NUM_DIR_LIGHT_SHADOWS; i ++ ) {\n\t\tdirectionalLight = directionalLightShadows[ i ];\n\t\tshadow *= receiveShadow ? getShadow( directionalShadowMap[ i ], directionalLight.shadowMapSize, directionalLight.shadowBias, directionalLight.shadowRadius, vDirectionalShadowCoord[ i ] ) : 1.0;\n\t}\n\t#pragma unroll_loop_end\n\t#endif\n\t#if NUM_SPOT_LIGHT_SHADOWS > 0\n\tSpotLightShadow spotLight;\n\t#pragma unroll_loop_start\n\tfor ( int i = 0; i < NUM_SPOT_LIGHT_SHADOWS; i ++ ) {\n\t\tspotLight = spotLightShadows[ i ];\n\t\tshadow *= receiveShadow ? getShadow( spotShadowMap[ i ], spotLight.shadowMapSize, spotLight.shadowBias, spotLight.shadowRadius, vSpotShadowCoord[ i ] ) : 1.0;\n\t}\n\t#pragma unroll_loop_end\n\t#endif\n\t#if NUM_POINT_LIGHT_SHADOWS > 0\n\tPointLightShadow pointLight;\n\t#pragma unroll_loop_start\n\tfor ( int i = 0; i < NUM_POINT_LIGHT_SHADOWS; i ++ ) {\n\t\tpointLight = pointLightShadows[ i ];\n\t\tshadow *= receiveShadow ? getPointShadow( pointShadowMap[ i ], pointLight.shadowMapSize, pointLight.shadowBias, pointLight.shadowRadius, vPointShadowCoord[ i ], pointLight.shadowCameraNear, pointLight.shadowCameraFar ) : 1.0;\n\t}\n\t#pragma unroll_loop_end\n\t#endif\n\t#endif\n\treturn shadow;\n}"; - - var skinbase_vertex = "#ifdef USE_SKINNING\n\tmat4 boneMatX = getBoneMatrix( skinIndex.x );\n\tmat4 boneMatY = getBoneMatrix( skinIndex.y );\n\tmat4 boneMatZ = getBoneMatrix( skinIndex.z );\n\tmat4 boneMatW = getBoneMatrix( skinIndex.w );\n#endif"; - - var skinning_pars_vertex = "#ifdef USE_SKINNING\n\tuniform mat4 bindMatrix;\n\tuniform mat4 bindMatrixInverse;\n\tuniform highp sampler2D boneTexture;\n\tuniform int boneTextureSize;\n\tmat4 getBoneMatrix( const in float i ) {\n\t\tfloat j = i * 4.0;\n\t\tfloat x = mod( j, float( boneTextureSize ) );\n\t\tfloat y = floor( j / float( boneTextureSize ) );\n\t\tfloat dx = 1.0 / float( boneTextureSize );\n\t\tfloat dy = 1.0 / float( boneTextureSize );\n\t\ty = dy * ( y + 0.5 );\n\t\tvec4 v1 = texture2D( boneTexture, vec2( dx * ( x + 0.5 ), y ) );\n\t\tvec4 v2 = texture2D( boneTexture, vec2( dx * ( x + 1.5 ), y ) );\n\t\tvec4 v3 = texture2D( boneTexture, vec2( dx * ( x + 2.5 ), y ) );\n\t\tvec4 v4 = texture2D( boneTexture, vec2( dx * ( x + 3.5 ), y ) );\n\t\tmat4 bone = mat4( v1, v2, v3, v4 );\n\t\treturn bone;\n\t}\n#endif"; - - var skinning_vertex = "#ifdef USE_SKINNING\n\tvec4 skinVertex = bindMatrix * vec4( transformed, 1.0 );\n\tvec4 skinned = vec4( 0.0 );\n\tskinned += boneMatX * skinVertex * skinWeight.x;\n\tskinned += boneMatY * skinVertex * skinWeight.y;\n\tskinned += boneMatZ * skinVertex * skinWeight.z;\n\tskinned += boneMatW * skinVertex * skinWeight.w;\n\ttransformed = ( bindMatrixInverse * skinned ).xyz;\n#endif"; - - var skinnormal_vertex = "#ifdef USE_SKINNING\n\tmat4 skinMatrix = mat4( 0.0 );\n\tskinMatrix += skinWeight.x * boneMatX;\n\tskinMatrix += skinWeight.y * boneMatY;\n\tskinMatrix += skinWeight.z * boneMatZ;\n\tskinMatrix += skinWeight.w * boneMatW;\n\tskinMatrix = bindMatrixInverse * skinMatrix * bindMatrix;\n\tobjectNormal = vec4( skinMatrix * vec4( objectNormal, 0.0 ) ).xyz;\n\t#ifdef USE_TANGENT\n\t\tobjectTangent = vec4( skinMatrix * vec4( objectTangent, 0.0 ) ).xyz;\n\t#endif\n#endif"; - - var specularmap_fragment = "float specularStrength;\n#ifdef USE_SPECULARMAP\n\tvec4 texelSpecular = texture2D( specularMap, vUv );\n\tspecularStrength = texelSpecular.r;\n#else\n\tspecularStrength = 1.0;\n#endif"; - - var specularmap_pars_fragment = "#ifdef USE_SPECULARMAP\n\tuniform sampler2D specularMap;\n#endif"; - - var tonemapping_fragment = "#if defined( TONE_MAPPING )\n\tgl_FragColor.rgb = toneMapping( gl_FragColor.rgb );\n#endif"; - - var tonemapping_pars_fragment = "#ifndef saturate\n#define saturate( a ) clamp( a, 0.0, 1.0 )\n#endif\nuniform float toneMappingExposure;\nvec3 LinearToneMapping( vec3 color ) {\n\treturn toneMappingExposure * color;\n}\nvec3 ReinhardToneMapping( vec3 color ) {\n\tcolor *= toneMappingExposure;\n\treturn saturate( color / ( vec3( 1.0 ) + color ) );\n}\nvec3 OptimizedCineonToneMapping( vec3 color ) {\n\tcolor *= toneMappingExposure;\n\tcolor = max( vec3( 0.0 ), color - 0.004 );\n\treturn pow( ( color * ( 6.2 * color + 0.5 ) ) / ( color * ( 6.2 * color + 1.7 ) + 0.06 ), vec3( 2.2 ) );\n}\nvec3 RRTAndODTFit( vec3 v ) {\n\tvec3 a = v * ( v + 0.0245786 ) - 0.000090537;\n\tvec3 b = v * ( 0.983729 * v + 0.4329510 ) + 0.238081;\n\treturn a / b;\n}\nvec3 ACESFilmicToneMapping( vec3 color ) {\n\tconst mat3 ACESInputMat = mat3(\n\t\tvec3( 0.59719, 0.07600, 0.02840 ),\t\tvec3( 0.35458, 0.90834, 0.13383 ),\n\t\tvec3( 0.04823, 0.01566, 0.83777 )\n\t);\n\tconst mat3 ACESOutputMat = mat3(\n\t\tvec3( 1.60475, -0.10208, -0.00327 ),\t\tvec3( -0.53108, 1.10813, -0.07276 ),\n\t\tvec3( -0.07367, -0.00605, 1.07602 )\n\t);\n\tcolor *= toneMappingExposure / 0.6;\n\tcolor = ACESInputMat * color;\n\tcolor = RRTAndODTFit( color );\n\tcolor = ACESOutputMat * color;\n\treturn saturate( color );\n}\nvec3 CustomToneMapping( vec3 color ) { return color; }"; - - var transmission_fragment = "#ifdef USE_TRANSMISSION\n\tfloat transmissionAlpha = 1.0;\n\tfloat transmissionFactor = transmission;\n\tfloat thicknessFactor = thickness;\n\t#ifdef USE_TRANSMISSIONMAP\n\t\ttransmissionFactor *= texture2D( transmissionMap, vUv ).r;\n\t#endif\n\t#ifdef USE_THICKNESSMAP\n\t\tthicknessFactor *= texture2D( thicknessMap, vUv ).g;\n\t#endif\n\tvec3 pos = vWorldPosition;\n\tvec3 v = normalize( cameraPosition - pos );\n\tvec3 n = inverseTransformDirection( normal, viewMatrix );\n\tvec4 transmission = getIBLVolumeRefraction(\n\t\tn, v, roughnessFactor, material.diffuseColor, material.specularColor, material.specularF90,\n\t\tpos, modelMatrix, viewMatrix, projectionMatrix, ior, thicknessFactor,\n\t\tattenuationColor, attenuationDistance );\n\ttotalDiffuse = mix( totalDiffuse, transmission.rgb, transmissionFactor );\n\ttransmissionAlpha = mix( transmissionAlpha, transmission.a, transmissionFactor );\n#endif"; - - var transmission_pars_fragment = "#ifdef USE_TRANSMISSION\n\tuniform float transmission;\n\tuniform float thickness;\n\tuniform float attenuationDistance;\n\tuniform vec3 attenuationColor;\n\t#ifdef USE_TRANSMISSIONMAP\n\t\tuniform sampler2D transmissionMap;\n\t#endif\n\t#ifdef USE_THICKNESSMAP\n\t\tuniform sampler2D thicknessMap;\n\t#endif\n\tuniform vec2 transmissionSamplerSize;\n\tuniform sampler2D transmissionSamplerMap;\n\tuniform mat4 modelMatrix;\n\tuniform mat4 projectionMatrix;\n\tvarying vec3 vWorldPosition;\n\tvec3 getVolumeTransmissionRay( const in vec3 n, const in vec3 v, const in float thickness, const in float ior, const in mat4 modelMatrix ) {\n\t\tvec3 refractionVector = refract( - v, normalize( n ), 1.0 / ior );\n\t\tvec3 modelScale;\n\t\tmodelScale.x = length( vec3( modelMatrix[ 0 ].xyz ) );\n\t\tmodelScale.y = length( vec3( modelMatrix[ 1 ].xyz ) );\n\t\tmodelScale.z = length( vec3( modelMatrix[ 2 ].xyz ) );\n\t\treturn normalize( refractionVector ) * thickness * modelScale;\n\t}\n\tfloat applyIorToRoughness( const in float roughness, const in float ior ) {\n\t\treturn roughness * clamp( ior * 2.0 - 2.0, 0.0, 1.0 );\n\t}\n\tvec4 getTransmissionSample( const in vec2 fragCoord, const in float roughness, const in float ior ) {\n\t\tfloat framebufferLod = log2( transmissionSamplerSize.x ) * applyIorToRoughness( roughness, ior );\n\t\t#ifdef texture2DLodEXT\n\t\t\treturn texture2DLodEXT( transmissionSamplerMap, fragCoord.xy, framebufferLod );\n\t\t#else\n\t\t\treturn texture2D( transmissionSamplerMap, fragCoord.xy, framebufferLod );\n\t\t#endif\n\t}\n\tvec3 applyVolumeAttenuation( const in vec3 radiance, const in float transmissionDistance, const in vec3 attenuationColor, const in float attenuationDistance ) {\n\t\tif ( attenuationDistance == 0.0 ) {\n\t\t\treturn radiance;\n\t\t} else {\n\t\t\tvec3 attenuationCoefficient = -log( attenuationColor ) / attenuationDistance;\n\t\t\tvec3 transmittance = exp( - attenuationCoefficient * transmissionDistance );\t\t\treturn transmittance * radiance;\n\t\t}\n\t}\n\tvec4 getIBLVolumeRefraction( const in vec3 n, const in vec3 v, const in float roughness, const in vec3 diffuseColor,\n\t\tconst in vec3 specularColor, const in float specularF90, const in vec3 position, const in mat4 modelMatrix,\n\t\tconst in mat4 viewMatrix, const in mat4 projMatrix, const in float ior, const in float thickness,\n\t\tconst in vec3 attenuationColor, const in float attenuationDistance ) {\n\t\tvec3 transmissionRay = getVolumeTransmissionRay( n, v, thickness, ior, modelMatrix );\n\t\tvec3 refractedRayExit = position + transmissionRay;\n\t\tvec4 ndcPos = projMatrix * viewMatrix * vec4( refractedRayExit, 1.0 );\n\t\tvec2 refractionCoords = ndcPos.xy / ndcPos.w;\n\t\trefractionCoords += 1.0;\n\t\trefractionCoords /= 2.0;\n\t\tvec4 transmittedLight = getTransmissionSample( refractionCoords, roughness, ior );\n\t\tvec3 attenuatedColor = applyVolumeAttenuation( transmittedLight.rgb, length( transmissionRay ), attenuationColor, attenuationDistance );\n\t\tvec3 F = EnvironmentBRDF( n, v, specularColor, specularF90, roughness );\n\t\treturn vec4( ( 1.0 - F ) * attenuatedColor * diffuseColor, transmittedLight.a );\n\t}\n#endif"; - - var uv_pars_fragment = "#if ( defined( USE_UV ) && ! defined( UVS_VERTEX_ONLY ) )\n\tvarying vec2 vUv;\n#endif"; - - var uv_pars_vertex = "#ifdef USE_UV\n\t#ifdef UVS_VERTEX_ONLY\n\t\tvec2 vUv;\n\t#else\n\t\tvarying vec2 vUv;\n\t#endif\n\tuniform mat3 uvTransform;\n#endif"; - - var uv_vertex = "#ifdef USE_UV\n\tvUv = ( uvTransform * vec3( uv, 1 ) ).xy;\n#endif"; - - var uv2_pars_fragment = "#if defined( USE_LIGHTMAP ) || defined( USE_AOMAP )\n\tvarying vec2 vUv2;\n#endif"; - - var uv2_pars_vertex = "#if defined( USE_LIGHTMAP ) || defined( USE_AOMAP )\n\tattribute vec2 uv2;\n\tvarying vec2 vUv2;\n\tuniform mat3 uv2Transform;\n#endif"; - - var uv2_vertex = "#if defined( USE_LIGHTMAP ) || defined( USE_AOMAP )\n\tvUv2 = ( uv2Transform * vec3( uv2, 1 ) ).xy;\n#endif"; - - var worldpos_vertex = "#if defined( USE_ENVMAP ) || defined( DISTANCE ) || defined ( USE_SHADOWMAP ) || defined ( USE_TRANSMISSION )\n\tvec4 worldPosition = vec4( transformed, 1.0 );\n\t#ifdef USE_INSTANCING\n\t\tworldPosition = instanceMatrix * worldPosition;\n\t#endif\n\tworldPosition = modelMatrix * worldPosition;\n#endif"; - - const vertex$g = "varying vec2 vUv;\nuniform mat3 uvTransform;\nvoid main() {\n\tvUv = ( uvTransform * vec3( uv, 1 ) ).xy;\n\tgl_Position = vec4( position.xy, 1.0, 1.0 );\n}"; - const fragment$g = "uniform sampler2D t2D;\nvarying vec2 vUv;\nvoid main() {\n\tgl_FragColor = texture2D( t2D, vUv );\n\t#ifdef DECODE_VIDEO_TEXTURE\n\t\tgl_FragColor = vec4( mix( pow( gl_FragColor.rgb * 0.9478672986 + vec3( 0.0521327014 ), vec3( 2.4 ) ), gl_FragColor.rgb * 0.0773993808, vec3( lessThanEqual( gl_FragColor.rgb, vec3( 0.04045 ) ) ) ), gl_FragColor.w );\n\t#endif\n\t#include \n\t#include \n}"; - - const vertex$f = "varying vec3 vWorldDirection;\n#include \nvoid main() {\n\tvWorldDirection = transformDirection( position, modelMatrix );\n\t#include \n\t#include \n\tgl_Position.z = gl_Position.w;\n}"; - const fragment$f = "#include \nuniform float opacity;\nvarying vec3 vWorldDirection;\n#include \nvoid main() {\n\tvec3 vReflect = vWorldDirection;\n\t#include \n\tgl_FragColor = envColor;\n\tgl_FragColor.a *= opacity;\n\t#include \n\t#include \n}"; - - const vertex$e = "#include \n#include \n#include \n#include \n#include \n#include \n#include \nvarying vec2 vHighPrecisionZW;\nvoid main() {\n\t#include \n\t#include \n\t#ifdef USE_DISPLACEMENTMAP\n\t\t#include \n\t\t#include \n\t\t#include \n\t#endif\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\tvHighPrecisionZW = gl_Position.zw;\n}"; - const fragment$e = "#if DEPTH_PACKING == 3200\n\tuniform float opacity;\n#endif\n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \nvarying vec2 vHighPrecisionZW;\nvoid main() {\n\t#include \n\tvec4 diffuseColor = vec4( 1.0 );\n\t#if DEPTH_PACKING == 3200\n\t\tdiffuseColor.a = opacity;\n\t#endif\n\t#include \n\t#include \n\t#include \n\t#include \n\tfloat fragCoordZ = 0.5 * vHighPrecisionZW[0] / vHighPrecisionZW[1] + 0.5;\n\t#if DEPTH_PACKING == 3200\n\t\tgl_FragColor = vec4( vec3( 1.0 - fragCoordZ ), opacity );\n\t#elif DEPTH_PACKING == 3201\n\t\tgl_FragColor = packDepthToRGBA( fragCoordZ );\n\t#endif\n}"; - - const vertex$d = "#define DISTANCE\nvarying vec3 vWorldPosition;\n#include \n#include \n#include \n#include \n#include \n#include \nvoid main() {\n\t#include \n\t#include \n\t#ifdef USE_DISPLACEMENTMAP\n\t\t#include \n\t\t#include \n\t\t#include \n\t#endif\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\tvWorldPosition = worldPosition.xyz;\n}"; - const fragment$d = "#define DISTANCE\nuniform vec3 referencePosition;\nuniform float nearDistance;\nuniform float farDistance;\nvarying vec3 vWorldPosition;\n#include \n#include \n#include \n#include \n#include \n#include \n#include \nvoid main () {\n\t#include \n\tvec4 diffuseColor = vec4( 1.0 );\n\t#include \n\t#include \n\t#include \n\tfloat dist = length( vWorldPosition - referencePosition );\n\tdist = ( dist - nearDistance ) / ( farDistance - nearDistance );\n\tdist = saturate( dist );\n\tgl_FragColor = packDepthToRGBA( dist );\n}"; - - const vertex$c = "varying vec3 vWorldDirection;\n#include \nvoid main() {\n\tvWorldDirection = transformDirection( position, modelMatrix );\n\t#include \n\t#include \n}"; - const fragment$c = "uniform sampler2D tEquirect;\nvarying vec3 vWorldDirection;\n#include \nvoid main() {\n\tvec3 direction = normalize( vWorldDirection );\n\tvec2 sampleUV = equirectUv( direction );\n\tgl_FragColor = texture2D( tEquirect, sampleUV );\n\t#include \n\t#include \n}"; - - const vertex$b = "uniform float scale;\nattribute float lineDistance;\nvarying float vLineDistance;\n#include \n#include \n#include \n#include \n#include \n#include \nvoid main() {\n\tvLineDistance = scale * lineDistance;\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n}"; - const fragment$b = "uniform vec3 diffuse;\nuniform float opacity;\nuniform float dashSize;\nuniform float totalSize;\nvarying float vLineDistance;\n#include \n#include \n#include \n#include \n#include \nvoid main() {\n\t#include \n\tif ( mod( vLineDistance, totalSize ) > dashSize ) {\n\t\tdiscard;\n\t}\n\tvec3 outgoingLight = vec3( 0.0 );\n\tvec4 diffuseColor = vec4( diffuse, opacity );\n\t#include \n\t#include \n\toutgoingLight = diffuseColor.rgb;\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n}"; - - const vertex$a = "#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \nvoid main() {\n\t#include \n\t#include \n\t#include \n\t#include \n\t#if defined ( USE_ENVMAP ) || defined ( USE_SKINNING )\n\t\t#include \n\t\t#include \n\t\t#include \n\t\t#include \n\t\t#include \n\t#endif\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n}"; - const fragment$a = "uniform vec3 diffuse;\nuniform float opacity;\n#ifndef FLAT_SHADED\n\tvarying vec3 vNormal;\n#endif\n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \nvoid main() {\n\t#include \n\tvec4 diffuseColor = vec4( diffuse, opacity );\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\tReflectedLight reflectedLight = ReflectedLight( vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ) );\n\t#ifdef USE_LIGHTMAP\n\t\tvec4 lightMapTexel = texture2D( lightMap, vUv2 );\n\t\treflectedLight.indirectDiffuse += lightMapTexel.rgb * lightMapIntensity * RECIPROCAL_PI;\n\t#else\n\t\treflectedLight.indirectDiffuse += vec3( 1.0 );\n\t#endif\n\t#include \n\treflectedLight.indirectDiffuse *= diffuseColor.rgb;\n\tvec3 outgoingLight = reflectedLight.indirectDiffuse;\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n}"; - - const vertex$9 = "#define LAMBERT\nvarying vec3 vLightFront;\nvarying vec3 vIndirectFront;\n#ifdef DOUBLE_SIDED\n\tvarying vec3 vLightBack;\n\tvarying vec3 vIndirectBack;\n#endif\n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \nvoid main() {\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n}"; - const fragment$9 = "uniform vec3 diffuse;\nuniform vec3 emissive;\nuniform float opacity;\nvarying vec3 vLightFront;\nvarying vec3 vIndirectFront;\n#ifdef DOUBLE_SIDED\n\tvarying vec3 vLightBack;\n\tvarying vec3 vIndirectBack;\n#endif\n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \nvoid main() {\n\t#include \n\tvec4 diffuseColor = vec4( diffuse, opacity );\n\tReflectedLight reflectedLight = ReflectedLight( vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ) );\n\tvec3 totalEmissiveRadiance = emissive;\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#ifdef DOUBLE_SIDED\n\t\treflectedLight.indirectDiffuse += ( gl_FrontFacing ) ? vIndirectFront : vIndirectBack;\n\t#else\n\t\treflectedLight.indirectDiffuse += vIndirectFront;\n\t#endif\n\t#include \n\treflectedLight.indirectDiffuse *= BRDF_Lambert( diffuseColor.rgb );\n\t#ifdef DOUBLE_SIDED\n\t\treflectedLight.directDiffuse = ( gl_FrontFacing ) ? vLightFront : vLightBack;\n\t#else\n\t\treflectedLight.directDiffuse = vLightFront;\n\t#endif\n\treflectedLight.directDiffuse *= BRDF_Lambert( diffuseColor.rgb ) * getShadowMask();\n\t#include \n\tvec3 outgoingLight = reflectedLight.directDiffuse + reflectedLight.indirectDiffuse + totalEmissiveRadiance;\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n}"; - - const vertex$8 = "#define MATCAP\nvarying vec3 vViewPosition;\n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \nvoid main() {\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\tvViewPosition = - mvPosition.xyz;\n}"; - const fragment$8 = "#define MATCAP\nuniform vec3 diffuse;\nuniform float opacity;\nuniform sampler2D matcap;\nvarying vec3 vViewPosition;\n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \nvoid main() {\n\t#include \n\tvec4 diffuseColor = vec4( diffuse, opacity );\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\tvec3 viewDir = normalize( vViewPosition );\n\tvec3 x = normalize( vec3( viewDir.z, 0.0, - viewDir.x ) );\n\tvec3 y = cross( viewDir, x );\n\tvec2 uv = vec2( dot( x, normal ), dot( y, normal ) ) * 0.495 + 0.5;\n\t#ifdef USE_MATCAP\n\t\tvec4 matcapColor = texture2D( matcap, uv );\n\t#else\n\t\tvec4 matcapColor = vec4( vec3( mix( 0.2, 0.8, uv.y ) ), 1.0 );\n\t#endif\n\tvec3 outgoingLight = diffuseColor.rgb * matcapColor.rgb;\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n}"; - - const vertex$7 = "#define NORMAL\n#if defined( FLAT_SHADED ) || defined( USE_BUMPMAP ) || defined( TANGENTSPACE_NORMALMAP )\n\tvarying vec3 vViewPosition;\n#endif\n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \nvoid main() {\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n#if defined( FLAT_SHADED ) || defined( USE_BUMPMAP ) || defined( TANGENTSPACE_NORMALMAP )\n\tvViewPosition = - mvPosition.xyz;\n#endif\n}"; - const fragment$7 = "#define NORMAL\nuniform float opacity;\n#if defined( FLAT_SHADED ) || defined( USE_BUMPMAP ) || defined( TANGENTSPACE_NORMALMAP )\n\tvarying vec3 vViewPosition;\n#endif\n#include \n#include \n#include \n#include \n#include \n#include \n#include \nvoid main() {\n\t#include \n\t#include \n\t#include \n\t#include \n\tgl_FragColor = vec4( packNormalToRGB( normal ), opacity );\n\t#ifdef OPAQUE\n\t\tgl_FragColor.a = 1.0;\n\t#endif\n}"; - - const vertex$6 = "#define PHONG\nvarying vec3 vViewPosition;\n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \nvoid main() {\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\tvViewPosition = - mvPosition.xyz;\n\t#include \n\t#include \n\t#include \n\t#include \n}"; - const fragment$6 = "#define PHONG\nuniform vec3 diffuse;\nuniform vec3 emissive;\nuniform vec3 specular;\nuniform float shininess;\nuniform float opacity;\n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \nvoid main() {\n\t#include \n\tvec4 diffuseColor = vec4( diffuse, opacity );\n\tReflectedLight reflectedLight = ReflectedLight( vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ) );\n\tvec3 totalEmissiveRadiance = emissive;\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\tvec3 outgoingLight = reflectedLight.directDiffuse + reflectedLight.indirectDiffuse + reflectedLight.directSpecular + reflectedLight.indirectSpecular + totalEmissiveRadiance;\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n}"; - - const vertex$5 = "#define STANDARD\nvarying vec3 vViewPosition;\n#ifdef USE_TRANSMISSION\n\tvarying vec3 vWorldPosition;\n#endif\n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \nvoid main() {\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\tvViewPosition = - mvPosition.xyz;\n\t#include \n\t#include \n\t#include \n#ifdef USE_TRANSMISSION\n\tvWorldPosition = worldPosition.xyz;\n#endif\n}"; - const fragment$5 = "#define STANDARD\n#ifdef PHYSICAL\n\t#define IOR\n\t#define SPECULAR\n#endif\nuniform vec3 diffuse;\nuniform vec3 emissive;\nuniform float roughness;\nuniform float metalness;\nuniform float opacity;\n#ifdef IOR\n\tuniform float ior;\n#endif\n#ifdef SPECULAR\n\tuniform float specularIntensity;\n\tuniform vec3 specularColor;\n\t#ifdef USE_SPECULARINTENSITYMAP\n\t\tuniform sampler2D specularIntensityMap;\n\t#endif\n\t#ifdef USE_SPECULARCOLORMAP\n\t\tuniform sampler2D specularColorMap;\n\t#endif\n#endif\n#ifdef USE_CLEARCOAT\n\tuniform float clearcoat;\n\tuniform float clearcoatRoughness;\n#endif\n#ifdef USE_SHEEN\n\tuniform vec3 sheenColor;\n\tuniform float sheenRoughness;\n\t#ifdef USE_SHEENCOLORMAP\n\t\tuniform sampler2D sheenColorMap;\n\t#endif\n\t#ifdef USE_SHEENROUGHNESSMAP\n\t\tuniform sampler2D sheenRoughnessMap;\n\t#endif\n#endif\nvarying vec3 vViewPosition;\n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \nvoid main() {\n\t#include \n\tvec4 diffuseColor = vec4( diffuse, opacity );\n\tReflectedLight reflectedLight = ReflectedLight( vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ) );\n\tvec3 totalEmissiveRadiance = emissive;\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\tvec3 totalDiffuse = reflectedLight.directDiffuse + reflectedLight.indirectDiffuse;\n\tvec3 totalSpecular = reflectedLight.directSpecular + reflectedLight.indirectSpecular;\n\t#include \n\tvec3 outgoingLight = totalDiffuse + totalSpecular + totalEmissiveRadiance;\n\t#ifdef USE_SHEEN\n\t\tfloat sheenEnergyComp = 1.0 - 0.157 * max3( material.sheenColor );\n\t\toutgoingLight = outgoingLight * sheenEnergyComp + sheenSpecular;\n\t#endif\n\t#ifdef USE_CLEARCOAT\n\t\tfloat dotNVcc = saturate( dot( geometry.clearcoatNormal, geometry.viewDir ) );\n\t\tvec3 Fcc = F_Schlick( material.clearcoatF0, material.clearcoatF90, dotNVcc );\n\t\toutgoingLight = outgoingLight * ( 1.0 - material.clearcoat * Fcc ) + clearcoatSpecular * material.clearcoat;\n\t#endif\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n}"; - - const vertex$4 = "#define TOON\nvarying vec3 vViewPosition;\n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \nvoid main() {\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\tvViewPosition = - mvPosition.xyz;\n\t#include \n\t#include \n\t#include \n}"; - const fragment$4 = "#define TOON\nuniform vec3 diffuse;\nuniform vec3 emissive;\nuniform float opacity;\n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \nvoid main() {\n\t#include \n\tvec4 diffuseColor = vec4( diffuse, opacity );\n\tReflectedLight reflectedLight = ReflectedLight( vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ) );\n\tvec3 totalEmissiveRadiance = emissive;\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\tvec3 outgoingLight = reflectedLight.directDiffuse + reflectedLight.indirectDiffuse + totalEmissiveRadiance;\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n}"; - - const vertex$3 = "uniform float size;\nuniform float scale;\n#include \n#include \n#include \n#include \n#include \n#include \nvoid main() {\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\tgl_PointSize = size;\n\t#ifdef USE_SIZEATTENUATION\n\t\tbool isPerspective = isPerspectiveMatrix( projectionMatrix );\n\t\tif ( isPerspective ) gl_PointSize *= ( scale / - mvPosition.z );\n\t#endif\n\t#include \n\t#include \n\t#include \n\t#include \n}"; - const fragment$3 = "uniform vec3 diffuse;\nuniform float opacity;\n#include \n#include \n#include \n#include \n#include \n#include \n#include \nvoid main() {\n\t#include \n\tvec3 outgoingLight = vec3( 0.0 );\n\tvec4 diffuseColor = vec4( diffuse, opacity );\n\t#include \n\t#include \n\t#include \n\t#include \n\toutgoingLight = diffuseColor.rgb;\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n}"; - - const vertex$2 = "#include \n#include \n#include \n#include \n#include \nvoid main() {\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n}"; - const fragment$2 = "uniform vec3 color;\nuniform float opacity;\n#include \n#include \n#include \n#include \n#include \n#include \n#include \nvoid main() {\n\tgl_FragColor = vec4( color, opacity * ( 1.0 - getShadowMask() ) );\n\t#include \n\t#include \n\t#include \n}"; - - const vertex$1 = "uniform float rotation;\nuniform vec2 center;\n#include \n#include \n#include \n#include \n#include \nvoid main() {\n\t#include \n\tvec4 mvPosition = modelViewMatrix * vec4( 0.0, 0.0, 0.0, 1.0 );\n\tvec2 scale;\n\tscale.x = length( vec3( modelMatrix[ 0 ].x, modelMatrix[ 0 ].y, modelMatrix[ 0 ].z ) );\n\tscale.y = length( vec3( modelMatrix[ 1 ].x, modelMatrix[ 1 ].y, modelMatrix[ 1 ].z ) );\n\t#ifndef USE_SIZEATTENUATION\n\t\tbool isPerspective = isPerspectiveMatrix( projectionMatrix );\n\t\tif ( isPerspective ) scale *= - mvPosition.z;\n\t#endif\n\tvec2 alignedPosition = ( position.xy - ( center - vec2( 0.5 ) ) ) * scale;\n\tvec2 rotatedPosition;\n\trotatedPosition.x = cos( rotation ) * alignedPosition.x - sin( rotation ) * alignedPosition.y;\n\trotatedPosition.y = sin( rotation ) * alignedPosition.x + cos( rotation ) * alignedPosition.y;\n\tmvPosition.xy += rotatedPosition;\n\tgl_Position = projectionMatrix * mvPosition;\n\t#include \n\t#include \n\t#include \n}"; - const fragment$1 = "uniform vec3 diffuse;\nuniform float opacity;\n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \nvoid main() {\n\t#include \n\tvec3 outgoingLight = vec3( 0.0 );\n\tvec4 diffuseColor = vec4( diffuse, opacity );\n\t#include \n\t#include \n\t#include \n\t#include \n\toutgoingLight = diffuseColor.rgb;\n\t#include \n\t#include \n\t#include \n\t#include \n}"; - - const ShaderChunk = { - alphamap_fragment: alphamap_fragment, - alphamap_pars_fragment: alphamap_pars_fragment, - alphatest_fragment: alphatest_fragment, - alphatest_pars_fragment: alphatest_pars_fragment, - aomap_fragment: aomap_fragment, - aomap_pars_fragment: aomap_pars_fragment, - begin_vertex: begin_vertex, - beginnormal_vertex: beginnormal_vertex, - bsdfs: bsdfs, - bumpmap_pars_fragment: bumpmap_pars_fragment, - clipping_planes_fragment: clipping_planes_fragment, - clipping_planes_pars_fragment: clipping_planes_pars_fragment, - clipping_planes_pars_vertex: clipping_planes_pars_vertex, - clipping_planes_vertex: clipping_planes_vertex, - color_fragment: color_fragment, - color_pars_fragment: color_pars_fragment, - color_pars_vertex: color_pars_vertex, - color_vertex: color_vertex, - common: common, - cube_uv_reflection_fragment: cube_uv_reflection_fragment, - defaultnormal_vertex: defaultnormal_vertex, - displacementmap_pars_vertex: displacementmap_pars_vertex, - displacementmap_vertex: displacementmap_vertex, - emissivemap_fragment: emissivemap_fragment, - emissivemap_pars_fragment: emissivemap_pars_fragment, - encodings_fragment: encodings_fragment, - encodings_pars_fragment: encodings_pars_fragment, - envmap_fragment: envmap_fragment, - envmap_common_pars_fragment: envmap_common_pars_fragment, - envmap_pars_fragment: envmap_pars_fragment, - envmap_pars_vertex: envmap_pars_vertex, - envmap_physical_pars_fragment: envmap_physical_pars_fragment, - envmap_vertex: envmap_vertex, - fog_vertex: fog_vertex, - fog_pars_vertex: fog_pars_vertex, - fog_fragment: fog_fragment, - fog_pars_fragment: fog_pars_fragment, - gradientmap_pars_fragment: gradientmap_pars_fragment, - lightmap_fragment: lightmap_fragment, - lightmap_pars_fragment: lightmap_pars_fragment, - lights_lambert_vertex: lights_lambert_vertex, - lights_pars_begin: lights_pars_begin, - lights_toon_fragment: lights_toon_fragment, - lights_toon_pars_fragment: lights_toon_pars_fragment, - lights_phong_fragment: lights_phong_fragment, - lights_phong_pars_fragment: lights_phong_pars_fragment, - lights_physical_fragment: lights_physical_fragment, - lights_physical_pars_fragment: lights_physical_pars_fragment, - lights_fragment_begin: lights_fragment_begin, - lights_fragment_maps: lights_fragment_maps, - lights_fragment_end: lights_fragment_end, - logdepthbuf_fragment: logdepthbuf_fragment, - logdepthbuf_pars_fragment: logdepthbuf_pars_fragment, - logdepthbuf_pars_vertex: logdepthbuf_pars_vertex, - logdepthbuf_vertex: logdepthbuf_vertex, - map_fragment: map_fragment, - map_pars_fragment: map_pars_fragment, - map_particle_fragment: map_particle_fragment, - map_particle_pars_fragment: map_particle_pars_fragment, - metalnessmap_fragment: metalnessmap_fragment, - metalnessmap_pars_fragment: metalnessmap_pars_fragment, - morphcolor_vertex: morphcolor_vertex, - morphnormal_vertex: morphnormal_vertex, - morphtarget_pars_vertex: morphtarget_pars_vertex, - morphtarget_vertex: morphtarget_vertex, - normal_fragment_begin: normal_fragment_begin, - normal_fragment_maps: normal_fragment_maps, - normal_pars_fragment: normal_pars_fragment, - normal_pars_vertex: normal_pars_vertex, - normal_vertex: normal_vertex, - normalmap_pars_fragment: normalmap_pars_fragment, - clearcoat_normal_fragment_begin: clearcoat_normal_fragment_begin, - clearcoat_normal_fragment_maps: clearcoat_normal_fragment_maps, - clearcoat_pars_fragment: clearcoat_pars_fragment, - output_fragment: output_fragment, - packing: packing, - premultiplied_alpha_fragment: premultiplied_alpha_fragment, - project_vertex: project_vertex, - dithering_fragment: dithering_fragment, - dithering_pars_fragment: dithering_pars_fragment, - roughnessmap_fragment: roughnessmap_fragment, - roughnessmap_pars_fragment: roughnessmap_pars_fragment, - shadowmap_pars_fragment: shadowmap_pars_fragment, - shadowmap_pars_vertex: shadowmap_pars_vertex, - shadowmap_vertex: shadowmap_vertex, - shadowmask_pars_fragment: shadowmask_pars_fragment, - skinbase_vertex: skinbase_vertex, - skinning_pars_vertex: skinning_pars_vertex, - skinning_vertex: skinning_vertex, - skinnormal_vertex: skinnormal_vertex, - specularmap_fragment: specularmap_fragment, - specularmap_pars_fragment: specularmap_pars_fragment, - tonemapping_fragment: tonemapping_fragment, - tonemapping_pars_fragment: tonemapping_pars_fragment, - transmission_fragment: transmission_fragment, - transmission_pars_fragment: transmission_pars_fragment, - uv_pars_fragment: uv_pars_fragment, - uv_pars_vertex: uv_pars_vertex, - uv_vertex: uv_vertex, - uv2_pars_fragment: uv2_pars_fragment, - uv2_pars_vertex: uv2_pars_vertex, - uv2_vertex: uv2_vertex, - worldpos_vertex: worldpos_vertex, - background_vert: vertex$g, - background_frag: fragment$g, - cube_vert: vertex$f, - cube_frag: fragment$f, - depth_vert: vertex$e, - depth_frag: fragment$e, - distanceRGBA_vert: vertex$d, - distanceRGBA_frag: fragment$d, - equirect_vert: vertex$c, - equirect_frag: fragment$c, - linedashed_vert: vertex$b, - linedashed_frag: fragment$b, - meshbasic_vert: vertex$a, - meshbasic_frag: fragment$a, - meshlambert_vert: vertex$9, - meshlambert_frag: fragment$9, - meshmatcap_vert: vertex$8, - meshmatcap_frag: fragment$8, - meshnormal_vert: vertex$7, - meshnormal_frag: fragment$7, - meshphong_vert: vertex$6, - meshphong_frag: fragment$6, - meshphysical_vert: vertex$5, - meshphysical_frag: fragment$5, - meshtoon_vert: vertex$4, - meshtoon_frag: fragment$4, - points_vert: vertex$3, - points_frag: fragment$3, - shadow_vert: vertex$2, - shadow_frag: fragment$2, - sprite_vert: vertex$1, - sprite_frag: fragment$1 - }; - - /** - * Uniforms library for shared webgl shaders - */ - - const UniformsLib = { - common: { - diffuse: { - value: new Color(0xffffff) - }, - opacity: { - value: 1.0 - }, - map: { - value: null - }, - uvTransform: { - value: new Matrix3() - }, - uv2Transform: { - value: new Matrix3() - }, - alphaMap: { - value: null - }, - alphaTest: { - value: 0 - } - }, - specularmap: { - specularMap: { - value: null - } - }, - envmap: { - envMap: { - value: null - }, - flipEnvMap: { - value: -1 - }, - reflectivity: { - value: 1.0 - }, - // basic, lambert, phong - ior: { - value: 1.5 - }, - // physical - refractionRatio: { - value: 0.98 - } // basic, lambert, phong - - }, - aomap: { - aoMap: { - value: null - }, - aoMapIntensity: { - value: 1 - } - }, - lightmap: { - lightMap: { - value: null - }, - lightMapIntensity: { - value: 1 - } - }, - emissivemap: { - emissiveMap: { - value: null - } - }, - bumpmap: { - bumpMap: { - value: null - }, - bumpScale: { - value: 1 - } - }, - normalmap: { - normalMap: { - value: null - }, - normalScale: { - value: new Vector2(1, 1) - } - }, - displacementmap: { - displacementMap: { - value: null - }, - displacementScale: { - value: 1 - }, - displacementBias: { - value: 0 - } - }, - roughnessmap: { - roughnessMap: { - value: null - } - }, - metalnessmap: { - metalnessMap: { - value: null - } - }, - gradientmap: { - gradientMap: { - value: null - } - }, - fog: { - fogDensity: { - value: 0.00025 - }, - fogNear: { - value: 1 - }, - fogFar: { - value: 2000 - }, - fogColor: { - value: new Color(0xffffff) - } - }, - lights: { - ambientLightColor: { - value: [] - }, - lightProbe: { - value: [] - }, - directionalLights: { - value: [], - properties: { - direction: {}, - color: {} - } - }, - directionalLightShadows: { - value: [], - properties: { - shadowBias: {}, - shadowNormalBias: {}, - shadowRadius: {}, - shadowMapSize: {} - } - }, - directionalShadowMap: { - value: [] - }, - directionalShadowMatrix: { - value: [] - }, - spotLights: { - value: [], - properties: { - color: {}, - position: {}, - direction: {}, - distance: {}, - coneCos: {}, - penumbraCos: {}, - decay: {} - } - }, - spotLightShadows: { - value: [], - properties: { - shadowBias: {}, - shadowNormalBias: {}, - shadowRadius: {}, - shadowMapSize: {} - } - }, - spotShadowMap: { - value: [] - }, - spotShadowMatrix: { - value: [] - }, - pointLights: { - value: [], - properties: { - color: {}, - position: {}, - decay: {}, - distance: {} - } - }, - pointLightShadows: { - value: [], - properties: { - shadowBias: {}, - shadowNormalBias: {}, - shadowRadius: {}, - shadowMapSize: {}, - shadowCameraNear: {}, - shadowCameraFar: {} - } - }, - pointShadowMap: { - value: [] - }, - pointShadowMatrix: { - value: [] - }, - hemisphereLights: { - value: [], - properties: { - direction: {}, - skyColor: {}, - groundColor: {} - } - }, - // TODO (abelnation): RectAreaLight BRDF data needs to be moved from example to main src - rectAreaLights: { - value: [], - properties: { - color: {}, - position: {}, - width: {}, - height: {} - } - }, - ltc_1: { - value: null - }, - ltc_2: { - value: null - } - }, - points: { - diffuse: { - value: new Color(0xffffff) - }, - opacity: { - value: 1.0 - }, - size: { - value: 1.0 - }, - scale: { - value: 1.0 - }, - map: { - value: null - }, - alphaMap: { - value: null - }, - alphaTest: { - value: 0 - }, - uvTransform: { - value: new Matrix3() - } - }, - sprite: { - diffuse: { - value: new Color(0xffffff) - }, - opacity: { - value: 1.0 - }, - center: { - value: new Vector2(0.5, 0.5) - }, - rotation: { - value: 0.0 - }, - map: { - value: null - }, - alphaMap: { - value: null - }, - alphaTest: { - value: 0 - }, - uvTransform: { - value: new Matrix3() - } - } - }; - - const ShaderLib = { - basic: { - uniforms: mergeUniforms([UniformsLib.common, UniformsLib.specularmap, UniformsLib.envmap, UniformsLib.aomap, UniformsLib.lightmap, UniformsLib.fog]), - vertexShader: ShaderChunk.meshbasic_vert, - fragmentShader: ShaderChunk.meshbasic_frag - }, - lambert: { - uniforms: mergeUniforms([UniformsLib.common, UniformsLib.specularmap, UniformsLib.envmap, UniformsLib.aomap, UniformsLib.lightmap, UniformsLib.emissivemap, UniformsLib.fog, UniformsLib.lights, { - emissive: { - value: new Color(0x000000) - } - }]), - vertexShader: ShaderChunk.meshlambert_vert, - fragmentShader: ShaderChunk.meshlambert_frag - }, - phong: { - uniforms: mergeUniforms([UniformsLib.common, UniformsLib.specularmap, UniformsLib.envmap, UniformsLib.aomap, UniformsLib.lightmap, UniformsLib.emissivemap, UniformsLib.bumpmap, UniformsLib.normalmap, UniformsLib.displacementmap, UniformsLib.fog, UniformsLib.lights, { - emissive: { - value: new Color(0x000000) - }, - specular: { - value: new Color(0x111111) - }, - shininess: { - value: 30 - } - }]), - vertexShader: ShaderChunk.meshphong_vert, - fragmentShader: ShaderChunk.meshphong_frag - }, - standard: { - uniforms: mergeUniforms([UniformsLib.common, UniformsLib.envmap, UniformsLib.aomap, UniformsLib.lightmap, UniformsLib.emissivemap, UniformsLib.bumpmap, UniformsLib.normalmap, UniformsLib.displacementmap, UniformsLib.roughnessmap, UniformsLib.metalnessmap, UniformsLib.fog, UniformsLib.lights, { - emissive: { - value: new Color(0x000000) - }, - roughness: { - value: 1.0 - }, - metalness: { - value: 0.0 - }, - envMapIntensity: { - value: 1 - } // temporary - - }]), - vertexShader: ShaderChunk.meshphysical_vert, - fragmentShader: ShaderChunk.meshphysical_frag - }, - toon: { - uniforms: mergeUniforms([UniformsLib.common, UniformsLib.aomap, UniformsLib.lightmap, UniformsLib.emissivemap, UniformsLib.bumpmap, UniformsLib.normalmap, UniformsLib.displacementmap, UniformsLib.gradientmap, UniformsLib.fog, UniformsLib.lights, { - emissive: { - value: new Color(0x000000) - } - }]), - vertexShader: ShaderChunk.meshtoon_vert, - fragmentShader: ShaderChunk.meshtoon_frag - }, - matcap: { - uniforms: mergeUniforms([UniformsLib.common, UniformsLib.bumpmap, UniformsLib.normalmap, UniformsLib.displacementmap, UniformsLib.fog, { - matcap: { - value: null - } - }]), - vertexShader: ShaderChunk.meshmatcap_vert, - fragmentShader: ShaderChunk.meshmatcap_frag - }, - points: { - uniforms: mergeUniforms([UniformsLib.points, UniformsLib.fog]), - vertexShader: ShaderChunk.points_vert, - fragmentShader: ShaderChunk.points_frag - }, - dashed: { - uniforms: mergeUniforms([UniformsLib.common, UniformsLib.fog, { - scale: { - value: 1 - }, - dashSize: { - value: 1 - }, - totalSize: { - value: 2 - } - }]), - vertexShader: ShaderChunk.linedashed_vert, - fragmentShader: ShaderChunk.linedashed_frag - }, - depth: { - uniforms: mergeUniforms([UniformsLib.common, UniformsLib.displacementmap]), - vertexShader: ShaderChunk.depth_vert, - fragmentShader: ShaderChunk.depth_frag - }, - normal: { - uniforms: mergeUniforms([UniformsLib.common, UniformsLib.bumpmap, UniformsLib.normalmap, UniformsLib.displacementmap, { - opacity: { - value: 1.0 - } - }]), - vertexShader: ShaderChunk.meshnormal_vert, - fragmentShader: ShaderChunk.meshnormal_frag - }, - sprite: { - uniforms: mergeUniforms([UniformsLib.sprite, UniformsLib.fog]), - vertexShader: ShaderChunk.sprite_vert, - fragmentShader: ShaderChunk.sprite_frag - }, - background: { - uniforms: { - uvTransform: { - value: new Matrix3() - }, - t2D: { - value: null - } - }, - vertexShader: ShaderChunk.background_vert, - fragmentShader: ShaderChunk.background_frag - }, - - /* ------------------------------------------------------------------------- - // Cube map shader - ------------------------------------------------------------------------- */ - cube: { - uniforms: mergeUniforms([UniformsLib.envmap, { - opacity: { - value: 1.0 - } - }]), - vertexShader: ShaderChunk.cube_vert, - fragmentShader: ShaderChunk.cube_frag - }, - equirect: { - uniforms: { - tEquirect: { - value: null - } - }, - vertexShader: ShaderChunk.equirect_vert, - fragmentShader: ShaderChunk.equirect_frag - }, - distanceRGBA: { - uniforms: mergeUniforms([UniformsLib.common, UniformsLib.displacementmap, { - referencePosition: { - value: new Vector3() - }, - nearDistance: { - value: 1 - }, - farDistance: { - value: 1000 - } - }]), - vertexShader: ShaderChunk.distanceRGBA_vert, - fragmentShader: ShaderChunk.distanceRGBA_frag - }, - shadow: { - uniforms: mergeUniforms([UniformsLib.lights, UniformsLib.fog, { - color: { - value: new Color(0x00000) - }, - opacity: { - value: 1.0 - } - }]), - vertexShader: ShaderChunk.shadow_vert, - fragmentShader: ShaderChunk.shadow_frag - } - }; - ShaderLib.physical = { - uniforms: mergeUniforms([ShaderLib.standard.uniforms, { - clearcoat: { - value: 0 - }, - clearcoatMap: { - value: null - }, - clearcoatRoughness: { - value: 0 - }, - clearcoatRoughnessMap: { - value: null - }, - clearcoatNormalScale: { - value: new Vector2(1, 1) - }, - clearcoatNormalMap: { - value: null - }, - sheen: { - value: 0 - }, - sheenColor: { - value: new Color(0x000000) - }, - sheenColorMap: { - value: null - }, - sheenRoughness: { - value: 1 - }, - sheenRoughnessMap: { - value: null - }, - transmission: { - value: 0 - }, - transmissionMap: { - value: null - }, - transmissionSamplerSize: { - value: new Vector2() - }, - transmissionSamplerMap: { - value: null - }, - thickness: { - value: 0 - }, - thicknessMap: { - value: null - }, - attenuationDistance: { - value: 0 - }, - attenuationColor: { - value: new Color(0x000000) - }, - specularIntensity: { - value: 1 - }, - specularIntensityMap: { - value: null - }, - specularColor: { - value: new Color(1, 1, 1) - }, - specularColorMap: { - value: null - } - }]), - vertexShader: ShaderChunk.meshphysical_vert, - fragmentShader: ShaderChunk.meshphysical_frag - }; - - function WebGLBackground(renderer, cubemaps, state, objects, alpha, premultipliedAlpha) { - const clearColor = new Color(0x000000); - let clearAlpha = alpha === true ? 0 : 1; - let planeMesh; - let boxMesh; - let currentBackground = null; - let currentBackgroundVersion = 0; - let currentTonemapping = null; - - function render(renderList, scene) { - let forceClear = false; - let background = scene.isScene === true ? scene.background : null; - - if (background && background.isTexture) { - background = cubemaps.get(background); - } // Ignore background in AR - // TODO: Reconsider this. - - - const xr = renderer.xr; - const session = xr.getSession && xr.getSession(); - - if (session && session.environmentBlendMode === 'additive') { - background = null; - } - - if (background === null) { - setClear(clearColor, clearAlpha); - } else if (background && background.isColor) { - setClear(background, 1); - forceClear = true; - } - - if (renderer.autoClear || forceClear) { - renderer.clear(renderer.autoClearColor, renderer.autoClearDepth, renderer.autoClearStencil); - } - - if (background && (background.isCubeTexture || background.mapping === CubeUVReflectionMapping)) { - if (boxMesh === undefined) { - boxMesh = new Mesh(new BoxGeometry(1, 1, 1), new ShaderMaterial({ - name: 'BackgroundCubeMaterial', - uniforms: cloneUniforms(ShaderLib.cube.uniforms), - vertexShader: ShaderLib.cube.vertexShader, - fragmentShader: ShaderLib.cube.fragmentShader, - side: BackSide, - depthTest: false, - depthWrite: false, - fog: false - })); - boxMesh.geometry.deleteAttribute('normal'); - boxMesh.geometry.deleteAttribute('uv'); - - boxMesh.onBeforeRender = function (renderer, scene, camera) { - this.matrixWorld.copyPosition(camera.matrixWorld); - }; // enable code injection for non-built-in material - - - Object.defineProperty(boxMesh.material, 'envMap', { - get: function () { - return this.uniforms.envMap.value; - } - }); - objects.update(boxMesh); - } - - boxMesh.material.uniforms.envMap.value = background; - boxMesh.material.uniforms.flipEnvMap.value = background.isCubeTexture && background.isRenderTargetTexture === false ? -1 : 1; - - if (currentBackground !== background || currentBackgroundVersion !== background.version || currentTonemapping !== renderer.toneMapping) { - boxMesh.material.needsUpdate = true; - currentBackground = background; - currentBackgroundVersion = background.version; - currentTonemapping = renderer.toneMapping; - } - - boxMesh.layers.enableAll(); // push to the pre-sorted opaque render list - - renderList.unshift(boxMesh, boxMesh.geometry, boxMesh.material, 0, 0, null); - } else if (background && background.isTexture) { - if (planeMesh === undefined) { - planeMesh = new Mesh(new PlaneGeometry(2, 2), new ShaderMaterial({ - name: 'BackgroundMaterial', - uniforms: cloneUniforms(ShaderLib.background.uniforms), - vertexShader: ShaderLib.background.vertexShader, - fragmentShader: ShaderLib.background.fragmentShader, - side: FrontSide, - depthTest: false, - depthWrite: false, - fog: false - })); - planeMesh.geometry.deleteAttribute('normal'); // enable code injection for non-built-in material - - Object.defineProperty(planeMesh.material, 'map', { - get: function () { - return this.uniforms.t2D.value; - } - }); - objects.update(planeMesh); - } - - planeMesh.material.uniforms.t2D.value = background; - - if (background.matrixAutoUpdate === true) { - background.updateMatrix(); - } - - planeMesh.material.uniforms.uvTransform.value.copy(background.matrix); - - if (currentBackground !== background || currentBackgroundVersion !== background.version || currentTonemapping !== renderer.toneMapping) { - planeMesh.material.needsUpdate = true; - currentBackground = background; - currentBackgroundVersion = background.version; - currentTonemapping = renderer.toneMapping; - } - - planeMesh.layers.enableAll(); // push to the pre-sorted opaque render list - - renderList.unshift(planeMesh, planeMesh.geometry, planeMesh.material, 0, 0, null); - } - } - - function setClear(color, alpha) { - state.buffers.color.setClear(color.r, color.g, color.b, alpha, premultipliedAlpha); - } - - return { - getClearColor: function () { - return clearColor; - }, - setClearColor: function (color, alpha = 1) { - clearColor.set(color); - clearAlpha = alpha; - setClear(clearColor, clearAlpha); - }, - getClearAlpha: function () { - return clearAlpha; - }, - setClearAlpha: function (alpha) { - clearAlpha = alpha; - setClear(clearColor, clearAlpha); - }, - render: render - }; - } - - function WebGLBindingStates(gl, extensions, attributes, capabilities) { - const maxVertexAttributes = gl.getParameter(gl.MAX_VERTEX_ATTRIBS); - const extension = capabilities.isWebGL2 ? null : extensions.get('OES_vertex_array_object'); - const vaoAvailable = capabilities.isWebGL2 || extension !== null; - const bindingStates = {}; - const defaultState = createBindingState(null); - let currentState = defaultState; - let forceUpdate = false; - - function setup(object, material, program, geometry, index) { - let updateBuffers = false; - - if (vaoAvailable) { - const state = getBindingState(geometry, program, material); - - if (currentState !== state) { - currentState = state; - bindVertexArrayObject(currentState.object); - } - - updateBuffers = needsUpdate(object, geometry, program, index); - if (updateBuffers) saveCache(object, geometry, program, index); - } else { - const wireframe = material.wireframe === true; - - if (currentState.geometry !== geometry.id || currentState.program !== program.id || currentState.wireframe !== wireframe) { - currentState.geometry = geometry.id; - currentState.program = program.id; - currentState.wireframe = wireframe; - updateBuffers = true; - } - } - - if (index !== null) { - attributes.update(index, gl.ELEMENT_ARRAY_BUFFER); - } - - if (updateBuffers || forceUpdate) { - forceUpdate = false; - setupVertexAttributes(object, material, program, geometry); - - if (index !== null) { - gl.bindBuffer(gl.ELEMENT_ARRAY_BUFFER, attributes.get(index).buffer); - } - } - } - - function createVertexArrayObject() { - if (capabilities.isWebGL2) return gl.createVertexArray(); - return extension.createVertexArrayOES(); - } - - function bindVertexArrayObject(vao) { - if (capabilities.isWebGL2) return gl.bindVertexArray(vao); - return extension.bindVertexArrayOES(vao); - } - - function deleteVertexArrayObject(vao) { - if (capabilities.isWebGL2) return gl.deleteVertexArray(vao); - return extension.deleteVertexArrayOES(vao); - } - - function getBindingState(geometry, program, material) { - const wireframe = material.wireframe === true; - let programMap = bindingStates[geometry.id]; - - if (programMap === undefined) { - programMap = {}; - bindingStates[geometry.id] = programMap; - } - - let stateMap = programMap[program.id]; - - if (stateMap === undefined) { - stateMap = {}; - programMap[program.id] = stateMap; - } - - let state = stateMap[wireframe]; - - if (state === undefined) { - state = createBindingState(createVertexArrayObject()); - stateMap[wireframe] = state; - } - - return state; - } - - function createBindingState(vao) { - const newAttributes = []; - const enabledAttributes = []; - const attributeDivisors = []; - - for (let i = 0; i < maxVertexAttributes; i++) { - newAttributes[i] = 0; - enabledAttributes[i] = 0; - attributeDivisors[i] = 0; - } - - return { - // for backward compatibility on non-VAO support browser - geometry: null, - program: null, - wireframe: false, - newAttributes: newAttributes, - enabledAttributes: enabledAttributes, - attributeDivisors: attributeDivisors, - object: vao, - attributes: {}, - index: null - }; - } - - function needsUpdate(object, geometry, program, index) { - const cachedAttributes = currentState.attributes; - const geometryAttributes = geometry.attributes; - let attributesNum = 0; - const programAttributes = program.getAttributes(); - - for (const name in programAttributes) { - const programAttribute = programAttributes[name]; - - if (programAttribute.location >= 0) { - const cachedAttribute = cachedAttributes[name]; - let geometryAttribute = geometryAttributes[name]; - - if (geometryAttribute === undefined) { - if (name === 'instanceMatrix' && object.instanceMatrix) geometryAttribute = object.instanceMatrix; - if (name === 'instanceColor' && object.instanceColor) geometryAttribute = object.instanceColor; - } - - if (cachedAttribute === undefined) return true; - if (cachedAttribute.attribute !== geometryAttribute) return true; - if (geometryAttribute && cachedAttribute.data !== geometryAttribute.data) return true; - attributesNum++; - } - } - - if (currentState.attributesNum !== attributesNum) return true; - if (currentState.index !== index) return true; - return false; - } - - function saveCache(object, geometry, program, index) { - const cache = {}; - const attributes = geometry.attributes; - let attributesNum = 0; - const programAttributes = program.getAttributes(); - - for (const name in programAttributes) { - const programAttribute = programAttributes[name]; - - if (programAttribute.location >= 0) { - let attribute = attributes[name]; - - if (attribute === undefined) { - if (name === 'instanceMatrix' && object.instanceMatrix) attribute = object.instanceMatrix; - if (name === 'instanceColor' && object.instanceColor) attribute = object.instanceColor; - } - - const data = {}; - data.attribute = attribute; - - if (attribute && attribute.data) { - data.data = attribute.data; - } - - cache[name] = data; - attributesNum++; - } - } - - currentState.attributes = cache; - currentState.attributesNum = attributesNum; - currentState.index = index; - } - - function initAttributes() { - const newAttributes = currentState.newAttributes; - - for (let i = 0, il = newAttributes.length; i < il; i++) { - newAttributes[i] = 0; - } - } - - function enableAttribute(attribute) { - enableAttributeAndDivisor(attribute, 0); - } - - function enableAttributeAndDivisor(attribute, meshPerAttribute) { - const newAttributes = currentState.newAttributes; - const enabledAttributes = currentState.enabledAttributes; - const attributeDivisors = currentState.attributeDivisors; - newAttributes[attribute] = 1; - - if (enabledAttributes[attribute] === 0) { - gl.enableVertexAttribArray(attribute); - enabledAttributes[attribute] = 1; - } - - if (attributeDivisors[attribute] !== meshPerAttribute) { - const extension = capabilities.isWebGL2 ? gl : extensions.get('ANGLE_instanced_arrays'); - extension[capabilities.isWebGL2 ? 'vertexAttribDivisor' : 'vertexAttribDivisorANGLE'](attribute, meshPerAttribute); - attributeDivisors[attribute] = meshPerAttribute; - } - } - - function disableUnusedAttributes() { - const newAttributes = currentState.newAttributes; - const enabledAttributes = currentState.enabledAttributes; - - for (let i = 0, il = enabledAttributes.length; i < il; i++) { - if (enabledAttributes[i] !== newAttributes[i]) { - gl.disableVertexAttribArray(i); - enabledAttributes[i] = 0; - } - } - } - - function vertexAttribPointer(index, size, type, normalized, stride, offset) { - if (capabilities.isWebGL2 === true && (type === gl.INT || type === gl.UNSIGNED_INT)) { - gl.vertexAttribIPointer(index, size, type, stride, offset); - } else { - gl.vertexAttribPointer(index, size, type, normalized, stride, offset); - } - } - - function setupVertexAttributes(object, material, program, geometry) { - if (capabilities.isWebGL2 === false && (object.isInstancedMesh || geometry.isInstancedBufferGeometry)) { - if (extensions.get('ANGLE_instanced_arrays') === null) return; - } - - initAttributes(); - const geometryAttributes = geometry.attributes; - const programAttributes = program.getAttributes(); - const materialDefaultAttributeValues = material.defaultAttributeValues; - - for (const name in programAttributes) { - const programAttribute = programAttributes[name]; - - if (programAttribute.location >= 0) { - let geometryAttribute = geometryAttributes[name]; - - if (geometryAttribute === undefined) { - if (name === 'instanceMatrix' && object.instanceMatrix) geometryAttribute = object.instanceMatrix; - if (name === 'instanceColor' && object.instanceColor) geometryAttribute = object.instanceColor; - } - - if (geometryAttribute !== undefined) { - const normalized = geometryAttribute.normalized; - const size = geometryAttribute.itemSize; - const attribute = attributes.get(geometryAttribute); // TODO Attribute may not be available on context restore - - if (attribute === undefined) continue; - const buffer = attribute.buffer; - const type = attribute.type; - const bytesPerElement = attribute.bytesPerElement; - - if (geometryAttribute.isInterleavedBufferAttribute) { - const data = geometryAttribute.data; - const stride = data.stride; - const offset = geometryAttribute.offset; - - if (data.isInstancedInterleavedBuffer) { - for (let i = 0; i < programAttribute.locationSize; i++) { - enableAttributeAndDivisor(programAttribute.location + i, data.meshPerAttribute); - } - - if (object.isInstancedMesh !== true && geometry._maxInstanceCount === undefined) { - geometry._maxInstanceCount = data.meshPerAttribute * data.count; - } - } else { - for (let i = 0; i < programAttribute.locationSize; i++) { - enableAttribute(programAttribute.location + i); - } - } - - gl.bindBuffer(gl.ARRAY_BUFFER, buffer); - - for (let i = 0; i < programAttribute.locationSize; i++) { - vertexAttribPointer(programAttribute.location + i, size / programAttribute.locationSize, type, normalized, stride * bytesPerElement, (offset + size / programAttribute.locationSize * i) * bytesPerElement); - } - } else { - if (geometryAttribute.isInstancedBufferAttribute) { - for (let i = 0; i < programAttribute.locationSize; i++) { - enableAttributeAndDivisor(programAttribute.location + i, geometryAttribute.meshPerAttribute); - } - - if (object.isInstancedMesh !== true && geometry._maxInstanceCount === undefined) { - geometry._maxInstanceCount = geometryAttribute.meshPerAttribute * geometryAttribute.count; - } - } else { - for (let i = 0; i < programAttribute.locationSize; i++) { - enableAttribute(programAttribute.location + i); - } - } - - gl.bindBuffer(gl.ARRAY_BUFFER, buffer); - - for (let i = 0; i < programAttribute.locationSize; i++) { - vertexAttribPointer(programAttribute.location + i, size / programAttribute.locationSize, type, normalized, size * bytesPerElement, size / programAttribute.locationSize * i * bytesPerElement); - } - } - } else if (materialDefaultAttributeValues !== undefined) { - const value = materialDefaultAttributeValues[name]; - - if (value !== undefined) { - switch (value.length) { - case 2: - gl.vertexAttrib2fv(programAttribute.location, value); - break; - - case 3: - gl.vertexAttrib3fv(programAttribute.location, value); - break; - - case 4: - gl.vertexAttrib4fv(programAttribute.location, value); - break; - - default: - gl.vertexAttrib1fv(programAttribute.location, value); - } - } - } - } - } - - disableUnusedAttributes(); - } - - function dispose() { - reset(); - - for (const geometryId in bindingStates) { - const programMap = bindingStates[geometryId]; - - for (const programId in programMap) { - const stateMap = programMap[programId]; - - for (const wireframe in stateMap) { - deleteVertexArrayObject(stateMap[wireframe].object); - delete stateMap[wireframe]; - } - - delete programMap[programId]; - } - - delete bindingStates[geometryId]; - } - } - - function releaseStatesOfGeometry(geometry) { - if (bindingStates[geometry.id] === undefined) return; - const programMap = bindingStates[geometry.id]; - - for (const programId in programMap) { - const stateMap = programMap[programId]; - - for (const wireframe in stateMap) { - deleteVertexArrayObject(stateMap[wireframe].object); - delete stateMap[wireframe]; - } - - delete programMap[programId]; - } - - delete bindingStates[geometry.id]; - } - - function releaseStatesOfProgram(program) { - for (const geometryId in bindingStates) { - const programMap = bindingStates[geometryId]; - if (programMap[program.id] === undefined) continue; - const stateMap = programMap[program.id]; - - for (const wireframe in stateMap) { - deleteVertexArrayObject(stateMap[wireframe].object); - delete stateMap[wireframe]; - } - - delete programMap[program.id]; - } - } - - function reset() { - resetDefaultState(); - forceUpdate = true; - if (currentState === defaultState) return; - currentState = defaultState; - bindVertexArrayObject(currentState.object); - } // for backward-compatibility - - - function resetDefaultState() { - defaultState.geometry = null; - defaultState.program = null; - defaultState.wireframe = false; - } - - return { - setup: setup, - reset: reset, - resetDefaultState: resetDefaultState, - dispose: dispose, - releaseStatesOfGeometry: releaseStatesOfGeometry, - releaseStatesOfProgram: releaseStatesOfProgram, - initAttributes: initAttributes, - enableAttribute: enableAttribute, - disableUnusedAttributes: disableUnusedAttributes - }; - } - - function WebGLBufferRenderer(gl, extensions, info, capabilities) { - const isWebGL2 = capabilities.isWebGL2; - let mode; - - function setMode(value) { - mode = value; - } - - function render(start, count) { - gl.drawArrays(mode, start, count); - info.update(count, mode, 1); - } - - function renderInstances(start, count, primcount) { - if (primcount === 0) return; - let extension, methodName; - - if (isWebGL2) { - extension = gl; - methodName = 'drawArraysInstanced'; - } else { - extension = extensions.get('ANGLE_instanced_arrays'); - methodName = 'drawArraysInstancedANGLE'; - - if (extension === null) { - console.error('THREE.WebGLBufferRenderer: using THREE.InstancedBufferGeometry but hardware does not support extension ANGLE_instanced_arrays.'); - return; - } - } - - extension[methodName](mode, start, count, primcount); - info.update(count, mode, primcount); - } // - - - this.setMode = setMode; - this.render = render; - this.renderInstances = renderInstances; - } - - function WebGLCapabilities(gl, extensions, parameters) { - let maxAnisotropy; - - function getMaxAnisotropy() { - if (maxAnisotropy !== undefined) return maxAnisotropy; - - if (extensions.has('EXT_texture_filter_anisotropic') === true) { - const extension = extensions.get('EXT_texture_filter_anisotropic'); - maxAnisotropy = gl.getParameter(extension.MAX_TEXTURE_MAX_ANISOTROPY_EXT); - } else { - maxAnisotropy = 0; - } - - return maxAnisotropy; - } - - function getMaxPrecision(precision) { - if (precision === 'highp') { - if (gl.getShaderPrecisionFormat(gl.VERTEX_SHADER, gl.HIGH_FLOAT).precision > 0 && gl.getShaderPrecisionFormat(gl.FRAGMENT_SHADER, gl.HIGH_FLOAT).precision > 0) { - return 'highp'; - } - - precision = 'mediump'; - } - - if (precision === 'mediump') { - if (gl.getShaderPrecisionFormat(gl.VERTEX_SHADER, gl.MEDIUM_FLOAT).precision > 0 && gl.getShaderPrecisionFormat(gl.FRAGMENT_SHADER, gl.MEDIUM_FLOAT).precision > 0) { - return 'mediump'; - } - } - - return 'lowp'; - } - - const isWebGL2 = typeof WebGL2RenderingContext !== 'undefined' && gl instanceof WebGL2RenderingContext || typeof WebGL2ComputeRenderingContext !== 'undefined' && gl instanceof WebGL2ComputeRenderingContext; - let precision = parameters.precision !== undefined ? parameters.precision : 'highp'; - const maxPrecision = getMaxPrecision(precision); - - if (maxPrecision !== precision) { - console.warn('THREE.WebGLRenderer:', precision, 'not supported, using', maxPrecision, 'instead.'); - precision = maxPrecision; - } - - const drawBuffers = isWebGL2 || extensions.has('WEBGL_draw_buffers'); - const logarithmicDepthBuffer = parameters.logarithmicDepthBuffer === true; - const maxTextures = gl.getParameter(gl.MAX_TEXTURE_IMAGE_UNITS); - const maxVertexTextures = gl.getParameter(gl.MAX_VERTEX_TEXTURE_IMAGE_UNITS); - const maxTextureSize = gl.getParameter(gl.MAX_TEXTURE_SIZE); - const maxCubemapSize = gl.getParameter(gl.MAX_CUBE_MAP_TEXTURE_SIZE); - const maxAttributes = gl.getParameter(gl.MAX_VERTEX_ATTRIBS); - const maxVertexUniforms = gl.getParameter(gl.MAX_VERTEX_UNIFORM_VECTORS); - const maxVaryings = gl.getParameter(gl.MAX_VARYING_VECTORS); - const maxFragmentUniforms = gl.getParameter(gl.MAX_FRAGMENT_UNIFORM_VECTORS); - const vertexTextures = maxVertexTextures > 0; - const floatFragmentTextures = isWebGL2 || extensions.has('OES_texture_float'); - const floatVertexTextures = vertexTextures && floatFragmentTextures; - const maxSamples = isWebGL2 ? gl.getParameter(gl.MAX_SAMPLES) : 0; - return { - isWebGL2: isWebGL2, - drawBuffers: drawBuffers, - getMaxAnisotropy: getMaxAnisotropy, - getMaxPrecision: getMaxPrecision, - precision: precision, - logarithmicDepthBuffer: logarithmicDepthBuffer, - maxTextures: maxTextures, - maxVertexTextures: maxVertexTextures, - maxTextureSize: maxTextureSize, - maxCubemapSize: maxCubemapSize, - maxAttributes: maxAttributes, - maxVertexUniforms: maxVertexUniforms, - maxVaryings: maxVaryings, - maxFragmentUniforms: maxFragmentUniforms, - vertexTextures: vertexTextures, - floatFragmentTextures: floatFragmentTextures, - floatVertexTextures: floatVertexTextures, - maxSamples: maxSamples - }; - } - - function WebGLClipping(properties) { - const scope = this; - let globalState = null, - numGlobalPlanes = 0, - localClippingEnabled = false, - renderingShadows = false; - const plane = new Plane(), - viewNormalMatrix = new Matrix3(), - uniform = { - value: null, - needsUpdate: false - }; - this.uniform = uniform; - this.numPlanes = 0; - this.numIntersection = 0; - - this.init = function (planes, enableLocalClipping, camera) { - const enabled = planes.length !== 0 || enableLocalClipping || // enable state of previous frame - the clipping code has to - // run another frame in order to reset the state: - numGlobalPlanes !== 0 || localClippingEnabled; - localClippingEnabled = enableLocalClipping; - globalState = projectPlanes(planes, camera, 0); - numGlobalPlanes = planes.length; - return enabled; - }; - - this.beginShadows = function () { - renderingShadows = true; - projectPlanes(null); - }; - - this.endShadows = function () { - renderingShadows = false; - resetGlobalState(); - }; - - this.setState = function (material, camera, useCache) { - const planes = material.clippingPlanes, - clipIntersection = material.clipIntersection, - clipShadows = material.clipShadows; - const materialProperties = properties.get(material); - - if (!localClippingEnabled || planes === null || planes.length === 0 || renderingShadows && !clipShadows) { - // there's no local clipping - if (renderingShadows) { - // there's no global clipping - projectPlanes(null); - } else { - resetGlobalState(); - } - } else { - const nGlobal = renderingShadows ? 0 : numGlobalPlanes, - lGlobal = nGlobal * 4; - let dstArray = materialProperties.clippingState || null; - uniform.value = dstArray; // ensure unique state - - dstArray = projectPlanes(planes, camera, lGlobal, useCache); - - for (let i = 0; i !== lGlobal; ++i) { - dstArray[i] = globalState[i]; - } - - materialProperties.clippingState = dstArray; - this.numIntersection = clipIntersection ? this.numPlanes : 0; - this.numPlanes += nGlobal; - } - }; - - function resetGlobalState() { - if (uniform.value !== globalState) { - uniform.value = globalState; - uniform.needsUpdate = numGlobalPlanes > 0; - } - - scope.numPlanes = numGlobalPlanes; - scope.numIntersection = 0; - } - - function projectPlanes(planes, camera, dstOffset, skipTransform) { - const nPlanes = planes !== null ? planes.length : 0; - let dstArray = null; - - if (nPlanes !== 0) { - dstArray = uniform.value; - - if (skipTransform !== true || dstArray === null) { - const flatSize = dstOffset + nPlanes * 4, - viewMatrix = camera.matrixWorldInverse; - viewNormalMatrix.getNormalMatrix(viewMatrix); - - if (dstArray === null || dstArray.length < flatSize) { - dstArray = new Float32Array(flatSize); - } - - for (let i = 0, i4 = dstOffset; i !== nPlanes; ++i, i4 += 4) { - plane.copy(planes[i]).applyMatrix4(viewMatrix, viewNormalMatrix); - plane.normal.toArray(dstArray, i4); - dstArray[i4 + 3] = plane.constant; - } - } - - uniform.value = dstArray; - uniform.needsUpdate = true; - } - - scope.numPlanes = nPlanes; - scope.numIntersection = 0; - return dstArray; - } - } - - function WebGLCubeMaps(renderer) { - let cubemaps = new WeakMap(); - - function mapTextureMapping(texture, mapping) { - if (mapping === EquirectangularReflectionMapping) { - texture.mapping = CubeReflectionMapping; - } else if (mapping === EquirectangularRefractionMapping) { - texture.mapping = CubeRefractionMapping; - } - - return texture; - } - - function get(texture) { - if (texture && texture.isTexture && texture.isRenderTargetTexture === false) { - const mapping = texture.mapping; - - if (mapping === EquirectangularReflectionMapping || mapping === EquirectangularRefractionMapping) { - if (cubemaps.has(texture)) { - const cubemap = cubemaps.get(texture).texture; - return mapTextureMapping(cubemap, texture.mapping); - } else { - const image = texture.image; - - if (image && image.height > 0) { - const renderTarget = new WebGLCubeRenderTarget(image.height / 2); - renderTarget.fromEquirectangularTexture(renderer, texture); - cubemaps.set(texture, renderTarget); - texture.addEventListener('dispose', onTextureDispose); - return mapTextureMapping(renderTarget.texture, texture.mapping); - } else { - // image not yet ready. try the conversion next frame - return null; - } - } - } - } - - return texture; - } - - function onTextureDispose(event) { - const texture = event.target; - texture.removeEventListener('dispose', onTextureDispose); - const cubemap = cubemaps.get(texture); - - if (cubemap !== undefined) { - cubemaps.delete(texture); - cubemap.dispose(); - } - } - - function dispose() { - cubemaps = new WeakMap(); - } - - return { - get: get, - dispose: dispose - }; - } - - class OrthographicCamera extends Camera { - constructor(left = -1, right = 1, top = 1, bottom = -1, near = 0.1, far = 2000) { - super(); - this.type = 'OrthographicCamera'; - this.zoom = 1; - this.view = null; - this.left = left; - this.right = right; - this.top = top; - this.bottom = bottom; - this.near = near; - this.far = far; - this.updateProjectionMatrix(); - } - - copy(source, recursive) { - super.copy(source, recursive); - this.left = source.left; - this.right = source.right; - this.top = source.top; - this.bottom = source.bottom; - this.near = source.near; - this.far = source.far; - this.zoom = source.zoom; - this.view = source.view === null ? null : Object.assign({}, source.view); - return this; - } - - setViewOffset(fullWidth, fullHeight, x, y, width, height) { - if (this.view === null) { - this.view = { - enabled: true, - fullWidth: 1, - fullHeight: 1, - offsetX: 0, - offsetY: 0, - width: 1, - height: 1 - }; - } - - this.view.enabled = true; - this.view.fullWidth = fullWidth; - this.view.fullHeight = fullHeight; - this.view.offsetX = x; - this.view.offsetY = y; - this.view.width = width; - this.view.height = height; - this.updateProjectionMatrix(); - } - - clearViewOffset() { - if (this.view !== null) { - this.view.enabled = false; - } - - this.updateProjectionMatrix(); - } - - updateProjectionMatrix() { - const dx = (this.right - this.left) / (2 * this.zoom); - const dy = (this.top - this.bottom) / (2 * this.zoom); - const cx = (this.right + this.left) / 2; - const cy = (this.top + this.bottom) / 2; - let left = cx - dx; - let right = cx + dx; - let top = cy + dy; - let bottom = cy - dy; - - if (this.view !== null && this.view.enabled) { - const scaleW = (this.right - this.left) / this.view.fullWidth / this.zoom; - const scaleH = (this.top - this.bottom) / this.view.fullHeight / this.zoom; - left += scaleW * this.view.offsetX; - right = left + scaleW * this.view.width; - top -= scaleH * this.view.offsetY; - bottom = top - scaleH * this.view.height; - } - - this.projectionMatrix.makeOrthographic(left, right, top, bottom, this.near, this.far); - this.projectionMatrixInverse.copy(this.projectionMatrix).invert(); - } - - toJSON(meta) { - const data = super.toJSON(meta); - data.object.zoom = this.zoom; - data.object.left = this.left; - data.object.right = this.right; - data.object.top = this.top; - data.object.bottom = this.bottom; - data.object.near = this.near; - data.object.far = this.far; - if (this.view !== null) data.object.view = Object.assign({}, this.view); - return data; - } - - } - - OrthographicCamera.prototype.isOrthographicCamera = true; - - const LOD_MIN = 4; // The standard deviations (radians) associated with the extra mips. These are - // chosen to approximate a Trowbridge-Reitz distribution function times the - // geometric shadowing function. These sigma values squared must match the - // variance #defines in cube_uv_reflection_fragment.glsl.js. - - const EXTRA_LOD_SIGMA = [0.125, 0.215, 0.35, 0.446, 0.526, 0.582]; // The maximum length of the blur for loop. Smaller sigmas will use fewer - // samples and exit early, but not recompile the shader. - - const MAX_SAMPLES = 20; - - const _flatCamera = /*@__PURE__*/new OrthographicCamera(); - - const _clearColor = /*@__PURE__*/new Color(); - - let _oldTarget = null; // Golden Ratio - - const PHI = (1 + Math.sqrt(5)) / 2; - const INV_PHI = 1 / PHI; // Vertices of a dodecahedron (except the opposites, which represent the - // same axis), used as axis directions evenly spread on a sphere. - - const _axisDirections = [/*@__PURE__*/new Vector3(1, 1, 1), /*@__PURE__*/new Vector3(-1, 1, 1), /*@__PURE__*/new Vector3(1, 1, -1), /*@__PURE__*/new Vector3(-1, 1, -1), /*@__PURE__*/new Vector3(0, PHI, INV_PHI), /*@__PURE__*/new Vector3(0, PHI, -INV_PHI), /*@__PURE__*/new Vector3(INV_PHI, 0, PHI), /*@__PURE__*/new Vector3(-INV_PHI, 0, PHI), /*@__PURE__*/new Vector3(PHI, INV_PHI, 0), /*@__PURE__*/new Vector3(-PHI, INV_PHI, 0)]; - /** - * This class generates a Prefiltered, Mipmapped Radiance Environment Map - * (PMREM) from a cubeMap environment texture. This allows different levels of - * blur to be quickly accessed based on material roughness. It is packed into a - * special CubeUV format that allows us to perform custom interpolation so that - * we can support nonlinear formats such as RGBE. Unlike a traditional mipmap - * chain, it only goes down to the LOD_MIN level (above), and then creates extra - * even more filtered 'mips' at the same LOD_MIN resolution, associated with - * higher roughness levels. In this way we maintain resolution to smoothly - * interpolate diffuse lighting while limiting sampling computation. - * - * Paper: Fast, Accurate Image-Based Lighting - * https://drive.google.com/file/d/15y8r_UpKlU9SvV4ILb0C3qCPecS8pvLz/view - */ - - class PMREMGenerator { - constructor(renderer) { - this._renderer = renderer; - this._pingPongRenderTarget = null; - this._lodMax = 0; - this._cubeSize = 0; - this._lodPlanes = []; - this._sizeLods = []; - this._sigmas = []; - this._blurMaterial = null; - this._cubemapMaterial = null; - this._equirectMaterial = null; - - this._compileMaterial(this._blurMaterial); - } - /** - * Generates a PMREM from a supplied Scene, which can be faster than using an - * image if networking bandwidth is low. Optional sigma specifies a blur radius - * in radians to be applied to the scene before PMREM generation. Optional near - * and far planes ensure the scene is rendered in its entirety (the cubeCamera - * is placed at the origin). - */ - - - fromScene(scene, sigma = 0, near = 0.1, far = 100) { - _oldTarget = this._renderer.getRenderTarget(); - - this._setSize(256); - - const cubeUVRenderTarget = this._allocateTargets(); - - cubeUVRenderTarget.depthBuffer = true; - - this._sceneToCubeUV(scene, near, far, cubeUVRenderTarget); - - if (sigma > 0) { - this._blur(cubeUVRenderTarget, 0, 0, sigma); - } - - this._applyPMREM(cubeUVRenderTarget); - - this._cleanup(cubeUVRenderTarget); - - return cubeUVRenderTarget; - } - /** - * Generates a PMREM from an equirectangular texture, which can be either LDR - * or HDR. The ideal input image size is 1k (1024 x 512), - * as this matches best with the 256 x 256 cubemap output. - */ - - - fromEquirectangular(equirectangular, renderTarget = null) { - return this._fromTexture(equirectangular, renderTarget); - } - /** - * Generates a PMREM from an cubemap texture, which can be either LDR - * or HDR. The ideal input cube size is 256 x 256, - * as this matches best with the 256 x 256 cubemap output. - */ - - - fromCubemap(cubemap, renderTarget = null) { - return this._fromTexture(cubemap, renderTarget); - } - /** - * Pre-compiles the cubemap shader. You can get faster start-up by invoking this method during - * your texture's network fetch for increased concurrency. - */ - - - compileCubemapShader() { - if (this._cubemapMaterial === null) { - this._cubemapMaterial = _getCubemapMaterial(); - - this._compileMaterial(this._cubemapMaterial); - } - } - /** - * Pre-compiles the equirectangular shader. You can get faster start-up by invoking this method during - * your texture's network fetch for increased concurrency. - */ - - - compileEquirectangularShader() { - if (this._equirectMaterial === null) { - this._equirectMaterial = _getEquirectMaterial(); - - this._compileMaterial(this._equirectMaterial); - } - } - /** - * Disposes of the PMREMGenerator's internal memory. Note that PMREMGenerator is a static class, - * so you should not need more than one PMREMGenerator object. If you do, calling dispose() on - * one of them will cause any others to also become unusable. - */ - - - dispose() { - this._dispose(); - - if (this._cubemapMaterial !== null) this._cubemapMaterial.dispose(); - if (this._equirectMaterial !== null) this._equirectMaterial.dispose(); - } // private interface - - - _setSize(cubeSize) { - this._lodMax = Math.floor(Math.log2(cubeSize)); - this._cubeSize = Math.pow(2, this._lodMax); - } - - _dispose() { - if (this._blurMaterial !== null) this._blurMaterial.dispose(); - if (this._pingPongRenderTarget !== null) this._pingPongRenderTarget.dispose(); - - for (let i = 0; i < this._lodPlanes.length; i++) { - this._lodPlanes[i].dispose(); - } - } - - _cleanup(outputTarget) { - this._renderer.setRenderTarget(_oldTarget); - - outputTarget.scissorTest = false; - - _setViewport(outputTarget, 0, 0, outputTarget.width, outputTarget.height); - } - - _fromTexture(texture, renderTarget) { - if (texture.mapping === CubeReflectionMapping || texture.mapping === CubeRefractionMapping) { - this._setSize(texture.image.length === 0 ? 16 : texture.image[0].width || texture.image[0].image.width); - } else { - // Equirectangular - this._setSize(texture.image.width / 4); - } - - _oldTarget = this._renderer.getRenderTarget(); - - const cubeUVRenderTarget = renderTarget || this._allocateTargets(); - - this._textureToCubeUV(texture, cubeUVRenderTarget); - - this._applyPMREM(cubeUVRenderTarget); - - this._cleanup(cubeUVRenderTarget); - - return cubeUVRenderTarget; - } - - _allocateTargets() { - const width = 3 * Math.max(this._cubeSize, 16 * 7); - const height = 4 * this._cubeSize; - const params = { - magFilter: LinearFilter, - minFilter: LinearFilter, - generateMipmaps: false, - type: HalfFloatType, - format: RGBAFormat, - encoding: LinearEncoding, - depthBuffer: false - }; - - const cubeUVRenderTarget = _createRenderTarget(width, height, params); - - if (this._pingPongRenderTarget === null || this._pingPongRenderTarget.width !== width) { - if (this._pingPongRenderTarget !== null) { - this._dispose(); - } - - this._pingPongRenderTarget = _createRenderTarget(width, height, params); - const { - _lodMax - } = this; - ({ - sizeLods: this._sizeLods, - lodPlanes: this._lodPlanes, - sigmas: this._sigmas - } = _createPlanes(_lodMax)); - this._blurMaterial = _getBlurShader(_lodMax, width, height); - } - - return cubeUVRenderTarget; - } - - _compileMaterial(material) { - const tmpMesh = new Mesh(this._lodPlanes[0], material); - - this._renderer.compile(tmpMesh, _flatCamera); - } - - _sceneToCubeUV(scene, near, far, cubeUVRenderTarget) { - const fov = 90; - const aspect = 1; - const cubeCamera = new PerspectiveCamera(fov, aspect, near, far); - const upSign = [1, -1, 1, 1, 1, 1]; - const forwardSign = [1, 1, 1, -1, -1, -1]; - const renderer = this._renderer; - const originalAutoClear = renderer.autoClear; - const toneMapping = renderer.toneMapping; - renderer.getClearColor(_clearColor); - renderer.toneMapping = NoToneMapping; - renderer.autoClear = false; - const backgroundMaterial = new MeshBasicMaterial({ - name: 'PMREM.Background', - side: BackSide, - depthWrite: false, - depthTest: false - }); - const backgroundBox = new Mesh(new BoxGeometry(), backgroundMaterial); - let useSolidColor = false; - const background = scene.background; - - if (background) { - if (background.isColor) { - backgroundMaterial.color.copy(background); - scene.background = null; - useSolidColor = true; - } - } else { - backgroundMaterial.color.copy(_clearColor); - useSolidColor = true; - } - - for (let i = 0; i < 6; i++) { - const col = i % 3; - - if (col === 0) { - cubeCamera.up.set(0, upSign[i], 0); - cubeCamera.lookAt(forwardSign[i], 0, 0); - } else if (col === 1) { - cubeCamera.up.set(0, 0, upSign[i]); - cubeCamera.lookAt(0, forwardSign[i], 0); - } else { - cubeCamera.up.set(0, upSign[i], 0); - cubeCamera.lookAt(0, 0, forwardSign[i]); - } - - const size = this._cubeSize; - - _setViewport(cubeUVRenderTarget, col * size, i > 2 ? size : 0, size, size); - - renderer.setRenderTarget(cubeUVRenderTarget); - - if (useSolidColor) { - renderer.render(backgroundBox, cubeCamera); - } - - renderer.render(scene, cubeCamera); - } - - backgroundBox.geometry.dispose(); - backgroundBox.material.dispose(); - renderer.toneMapping = toneMapping; - renderer.autoClear = originalAutoClear; - scene.background = background; - } - - _textureToCubeUV(texture, cubeUVRenderTarget) { - const renderer = this._renderer; - const isCubeTexture = texture.mapping === CubeReflectionMapping || texture.mapping === CubeRefractionMapping; - - if (isCubeTexture) { - if (this._cubemapMaterial === null) { - this._cubemapMaterial = _getCubemapMaterial(); - } - - this._cubemapMaterial.uniforms.flipEnvMap.value = texture.isRenderTargetTexture === false ? -1 : 1; - } else { - if (this._equirectMaterial === null) { - this._equirectMaterial = _getEquirectMaterial(); - } - } - - const material = isCubeTexture ? this._cubemapMaterial : this._equirectMaterial; - const mesh = new Mesh(this._lodPlanes[0], material); - const uniforms = material.uniforms; - uniforms['envMap'].value = texture; - const size = this._cubeSize; - - _setViewport(cubeUVRenderTarget, 0, 0, 3 * size, 2 * size); - - renderer.setRenderTarget(cubeUVRenderTarget); - renderer.render(mesh, _flatCamera); - } - - _applyPMREM(cubeUVRenderTarget) { - const renderer = this._renderer; - const autoClear = renderer.autoClear; - renderer.autoClear = false; - - for (let i = 1; i < this._lodPlanes.length; i++) { - const sigma = Math.sqrt(this._sigmas[i] * this._sigmas[i] - this._sigmas[i - 1] * this._sigmas[i - 1]); - const poleAxis = _axisDirections[(i - 1) % _axisDirections.length]; - - this._blur(cubeUVRenderTarget, i - 1, i, sigma, poleAxis); - } - - renderer.autoClear = autoClear; - } - /** - * This is a two-pass Gaussian blur for a cubemap. Normally this is done - * vertically and horizontally, but this breaks down on a cube. Here we apply - * the blur latitudinally (around the poles), and then longitudinally (towards - * the poles) to approximate the orthogonally-separable blur. It is least - * accurate at the poles, but still does a decent job. - */ - - - _blur(cubeUVRenderTarget, lodIn, lodOut, sigma, poleAxis) { - const pingPongRenderTarget = this._pingPongRenderTarget; - - this._halfBlur(cubeUVRenderTarget, pingPongRenderTarget, lodIn, lodOut, sigma, 'latitudinal', poleAxis); - - this._halfBlur(pingPongRenderTarget, cubeUVRenderTarget, lodOut, lodOut, sigma, 'longitudinal', poleAxis); - } - - _halfBlur(targetIn, targetOut, lodIn, lodOut, sigmaRadians, direction, poleAxis) { - const renderer = this._renderer; - const blurMaterial = this._blurMaterial; - - if (direction !== 'latitudinal' && direction !== 'longitudinal') { - console.error('blur direction must be either latitudinal or longitudinal!'); - } // Number of standard deviations at which to cut off the discrete approximation. - - - const STANDARD_DEVIATIONS = 3; - const blurMesh = new Mesh(this._lodPlanes[lodOut], blurMaterial); - const blurUniforms = blurMaterial.uniforms; - const pixels = this._sizeLods[lodIn] - 1; - const radiansPerPixel = isFinite(sigmaRadians) ? Math.PI / (2 * pixels) : 2 * Math.PI / (2 * MAX_SAMPLES - 1); - const sigmaPixels = sigmaRadians / radiansPerPixel; - const samples = isFinite(sigmaRadians) ? 1 + Math.floor(STANDARD_DEVIATIONS * sigmaPixels) : MAX_SAMPLES; - - if (samples > MAX_SAMPLES) { - console.warn(`sigmaRadians, ${sigmaRadians}, is too large and will clip, as it requested ${samples} samples when the maximum is set to ${MAX_SAMPLES}`); - } - - const weights = []; - let sum = 0; - - for (let i = 0; i < MAX_SAMPLES; ++i) { - const x = i / sigmaPixels; - const weight = Math.exp(-x * x / 2); - weights.push(weight); - - if (i === 0) { - sum += weight; - } else if (i < samples) { - sum += 2 * weight; - } - } - - for (let i = 0; i < weights.length; i++) { - weights[i] = weights[i] / sum; - } - - blurUniforms['envMap'].value = targetIn.texture; - blurUniforms['samples'].value = samples; - blurUniforms['weights'].value = weights; - blurUniforms['latitudinal'].value = direction === 'latitudinal'; - - if (poleAxis) { - blurUniforms['poleAxis'].value = poleAxis; - } - - const { - _lodMax - } = this; - blurUniforms['dTheta'].value = radiansPerPixel; - blurUniforms['mipInt'].value = _lodMax - lodIn; - const outputSize = this._sizeLods[lodOut]; - const x = 3 * outputSize * (lodOut > _lodMax - LOD_MIN ? lodOut - _lodMax + LOD_MIN : 0); - const y = 4 * (this._cubeSize - outputSize); - - _setViewport(targetOut, x, y, 3 * outputSize, 2 * outputSize); - - renderer.setRenderTarget(targetOut); - renderer.render(blurMesh, _flatCamera); - } - - } - - function _createPlanes(lodMax) { - const lodPlanes = []; - const sizeLods = []; - const sigmas = []; - let lod = lodMax; - const totalLods = lodMax - LOD_MIN + 1 + EXTRA_LOD_SIGMA.length; - - for (let i = 0; i < totalLods; i++) { - const sizeLod = Math.pow(2, lod); - sizeLods.push(sizeLod); - let sigma = 1.0 / sizeLod; - - if (i > lodMax - LOD_MIN) { - sigma = EXTRA_LOD_SIGMA[i - lodMax + LOD_MIN - 1]; - } else if (i === 0) { - sigma = 0; - } - - sigmas.push(sigma); - const texelSize = 1.0 / (sizeLod - 2); - const min = -texelSize; - const max = 1 + texelSize; - const uv1 = [min, min, max, min, max, max, min, min, max, max, min, max]; - const cubeFaces = 6; - const vertices = 6; - const positionSize = 3; - const uvSize = 2; - const faceIndexSize = 1; - const position = new Float32Array(positionSize * vertices * cubeFaces); - const uv = new Float32Array(uvSize * vertices * cubeFaces); - const faceIndex = new Float32Array(faceIndexSize * vertices * cubeFaces); - - for (let face = 0; face < cubeFaces; face++) { - const x = face % 3 * 2 / 3 - 1; - const y = face > 2 ? 0 : -1; - const coordinates = [x, y, 0, x + 2 / 3, y, 0, x + 2 / 3, y + 1, 0, x, y, 0, x + 2 / 3, y + 1, 0, x, y + 1, 0]; - position.set(coordinates, positionSize * vertices * face); - uv.set(uv1, uvSize * vertices * face); - const fill = [face, face, face, face, face, face]; - faceIndex.set(fill, faceIndexSize * vertices * face); - } - - const planes = new BufferGeometry(); - planes.setAttribute('position', new BufferAttribute(position, positionSize)); - planes.setAttribute('uv', new BufferAttribute(uv, uvSize)); - planes.setAttribute('faceIndex', new BufferAttribute(faceIndex, faceIndexSize)); - lodPlanes.push(planes); - - if (lod > LOD_MIN) { - lod--; - } - } - - return { - lodPlanes, - sizeLods, - sigmas - }; - } - - function _createRenderTarget(width, height, params) { - const cubeUVRenderTarget = new WebGLRenderTarget(width, height, params); - cubeUVRenderTarget.texture.mapping = CubeUVReflectionMapping; - cubeUVRenderTarget.texture.name = 'PMREM.cubeUv'; - cubeUVRenderTarget.scissorTest = true; - return cubeUVRenderTarget; - } - - function _setViewport(target, x, y, width, height) { - target.viewport.set(x, y, width, height); - target.scissor.set(x, y, width, height); - } - - function _getBlurShader(lodMax, width, height) { - const weights = new Float32Array(MAX_SAMPLES); - const poleAxis = new Vector3(0, 1, 0); - const shaderMaterial = new ShaderMaterial({ - name: 'SphericalGaussianBlur', - defines: { - 'n': MAX_SAMPLES, - 'CUBEUV_TEXEL_WIDTH': 1.0 / width, - 'CUBEUV_TEXEL_HEIGHT': 1.0 / height, - 'CUBEUV_MAX_MIP': `${lodMax}.0` - }, - uniforms: { - 'envMap': { - value: null - }, - 'samples': { - value: 1 - }, - 'weights': { - value: weights - }, - 'latitudinal': { - value: false - }, - 'dTheta': { - value: 0 - }, - 'mipInt': { - value: 0 - }, - 'poleAxis': { - value: poleAxis - } - }, - vertexShader: _getCommonVertexShader(), - fragmentShader: - /* glsl */ - ` - - precision mediump float; - precision mediump int; - - varying vec3 vOutputDirection; - - uniform sampler2D envMap; - uniform int samples; - uniform float weights[ n ]; - uniform bool latitudinal; - uniform float dTheta; - uniform float mipInt; - uniform vec3 poleAxis; - - #define ENVMAP_TYPE_CUBE_UV - #include - - vec3 getSample( float theta, vec3 axis ) { - - float cosTheta = cos( theta ); - // Rodrigues' axis-angle rotation - vec3 sampleDirection = vOutputDirection * cosTheta - + cross( axis, vOutputDirection ) * sin( theta ) - + axis * dot( axis, vOutputDirection ) * ( 1.0 - cosTheta ); - - return bilinearCubeUV( envMap, sampleDirection, mipInt ); - - } - - void main() { - - vec3 axis = latitudinal ? poleAxis : cross( poleAxis, vOutputDirection ); - - if ( all( equal( axis, vec3( 0.0 ) ) ) ) { - - axis = vec3( vOutputDirection.z, 0.0, - vOutputDirection.x ); - - } - - axis = normalize( axis ); - - gl_FragColor = vec4( 0.0, 0.0, 0.0, 1.0 ); - gl_FragColor.rgb += weights[ 0 ] * getSample( 0.0, axis ); - - for ( int i = 1; i < n; i++ ) { - - if ( i >= samples ) { - - break; - - } - - float theta = dTheta * float( i ); - gl_FragColor.rgb += weights[ i ] * getSample( -1.0 * theta, axis ); - gl_FragColor.rgb += weights[ i ] * getSample( theta, axis ); - - } - - } - `, - blending: NoBlending, - depthTest: false, - depthWrite: false - }); - return shaderMaterial; - } - - function _getEquirectMaterial() { - return new ShaderMaterial({ - name: 'EquirectangularToCubeUV', - uniforms: { - 'envMap': { - value: null - } - }, - vertexShader: _getCommonVertexShader(), - fragmentShader: - /* glsl */ - ` - - precision mediump float; - precision mediump int; - - varying vec3 vOutputDirection; - - uniform sampler2D envMap; - - #include - - void main() { - - vec3 outputDirection = normalize( vOutputDirection ); - vec2 uv = equirectUv( outputDirection ); - - gl_FragColor = vec4( texture2D ( envMap, uv ).rgb, 1.0 ); - - } - `, - blending: NoBlending, - depthTest: false, - depthWrite: false - }); - } - - function _getCubemapMaterial() { - return new ShaderMaterial({ - name: 'CubemapToCubeUV', - uniforms: { - 'envMap': { - value: null - }, - 'flipEnvMap': { - value: -1 - } - }, - vertexShader: _getCommonVertexShader(), - fragmentShader: - /* glsl */ - ` - - precision mediump float; - precision mediump int; - - uniform float flipEnvMap; - - varying vec3 vOutputDirection; - - uniform samplerCube envMap; - - void main() { - - gl_FragColor = textureCube( envMap, vec3( flipEnvMap * vOutputDirection.x, vOutputDirection.yz ) ); - - } - `, - blending: NoBlending, - depthTest: false, - depthWrite: false - }); - } - - function _getCommonVertexShader() { - return ( - /* glsl */ - ` - - precision mediump float; - precision mediump int; - - attribute float faceIndex; - - varying vec3 vOutputDirection; - - // RH coordinate system; PMREM face-indexing convention - vec3 getDirection( vec2 uv, float face ) { - - uv = 2.0 * uv - 1.0; - - vec3 direction = vec3( uv, 1.0 ); - - if ( face == 0.0 ) { - - direction = direction.zyx; // ( 1, v, u ) pos x - - } else if ( face == 1.0 ) { - - direction = direction.xzy; - direction.xz *= -1.0; // ( -u, 1, -v ) pos y - - } else if ( face == 2.0 ) { - - direction.x *= -1.0; // ( -u, v, 1 ) pos z - - } else if ( face == 3.0 ) { - - direction = direction.zyx; - direction.xz *= -1.0; // ( -1, v, -u ) neg x - - } else if ( face == 4.0 ) { - - direction = direction.xzy; - direction.xy *= -1.0; // ( -u, -1, v ) neg y - - } else if ( face == 5.0 ) { - - direction.z *= -1.0; // ( u, v, -1 ) neg z - - } - - return direction; - - } - - void main() { - - vOutputDirection = getDirection( uv, faceIndex ); - gl_Position = vec4( position, 1.0 ); - - } - ` - ); - } - - function WebGLCubeUVMaps(renderer) { - let cubeUVmaps = new WeakMap(); - let pmremGenerator = null; - - function get(texture) { - if (texture && texture.isTexture) { - const mapping = texture.mapping; - const isEquirectMap = mapping === EquirectangularReflectionMapping || mapping === EquirectangularRefractionMapping; - const isCubeMap = mapping === CubeReflectionMapping || mapping === CubeRefractionMapping; // equirect/cube map to cubeUV conversion - - if (isEquirectMap || isCubeMap) { - if (texture.isRenderTargetTexture && texture.needsPMREMUpdate === true) { - texture.needsPMREMUpdate = false; - let renderTarget = cubeUVmaps.get(texture); - if (pmremGenerator === null) pmremGenerator = new PMREMGenerator(renderer); - renderTarget = isEquirectMap ? pmremGenerator.fromEquirectangular(texture, renderTarget) : pmremGenerator.fromCubemap(texture, renderTarget); - cubeUVmaps.set(texture, renderTarget); - return renderTarget.texture; - } else { - if (cubeUVmaps.has(texture)) { - return cubeUVmaps.get(texture).texture; - } else { - const image = texture.image; - - if (isEquirectMap && image && image.height > 0 || isCubeMap && image && isCubeTextureComplete(image)) { - if (pmremGenerator === null) pmremGenerator = new PMREMGenerator(renderer); - const renderTarget = isEquirectMap ? pmremGenerator.fromEquirectangular(texture) : pmremGenerator.fromCubemap(texture); - cubeUVmaps.set(texture, renderTarget); - texture.addEventListener('dispose', onTextureDispose); - return renderTarget.texture; - } else { - // image not yet ready. try the conversion next frame - return null; - } - } - } - } - } - - return texture; - } - - function isCubeTextureComplete(image) { - let count = 0; - const length = 6; - - for (let i = 0; i < length; i++) { - if (image[i] !== undefined) count++; - } - - return count === length; - } - - function onTextureDispose(event) { - const texture = event.target; - texture.removeEventListener('dispose', onTextureDispose); - const cubemapUV = cubeUVmaps.get(texture); - - if (cubemapUV !== undefined) { - cubeUVmaps.delete(texture); - cubemapUV.dispose(); - } - } - - function dispose() { - cubeUVmaps = new WeakMap(); - - if (pmremGenerator !== null) { - pmremGenerator.dispose(); - pmremGenerator = null; - } - } - - return { - get: get, - dispose: dispose - }; - } - - function WebGLExtensions(gl) { - const extensions = {}; - - function getExtension(name) { - if (extensions[name] !== undefined) { - return extensions[name]; - } - - let extension; - - switch (name) { - case 'WEBGL_depth_texture': - extension = gl.getExtension('WEBGL_depth_texture') || gl.getExtension('MOZ_WEBGL_depth_texture') || gl.getExtension('WEBKIT_WEBGL_depth_texture'); - break; - - case 'EXT_texture_filter_anisotropic': - extension = gl.getExtension('EXT_texture_filter_anisotropic') || gl.getExtension('MOZ_EXT_texture_filter_anisotropic') || gl.getExtension('WEBKIT_EXT_texture_filter_anisotropic'); - break; - - case 'WEBGL_compressed_texture_s3tc': - extension = gl.getExtension('WEBGL_compressed_texture_s3tc') || gl.getExtension('MOZ_WEBGL_compressed_texture_s3tc') || gl.getExtension('WEBKIT_WEBGL_compressed_texture_s3tc'); - break; - - case 'WEBGL_compressed_texture_pvrtc': - extension = gl.getExtension('WEBGL_compressed_texture_pvrtc') || gl.getExtension('WEBKIT_WEBGL_compressed_texture_pvrtc'); - break; - - default: - extension = gl.getExtension(name); - } - - extensions[name] = extension; - return extension; - } - - return { - has: function (name) { - return getExtension(name) !== null; - }, - init: function (capabilities) { - if (capabilities.isWebGL2) { - getExtension('EXT_color_buffer_float'); - } else { - getExtension('WEBGL_depth_texture'); - getExtension('OES_texture_float'); - getExtension('OES_texture_half_float'); - getExtension('OES_texture_half_float_linear'); - getExtension('OES_standard_derivatives'); - getExtension('OES_element_index_uint'); - getExtension('OES_vertex_array_object'); - getExtension('ANGLE_instanced_arrays'); - } - - getExtension('OES_texture_float_linear'); - getExtension('EXT_color_buffer_half_float'); - getExtension('WEBGL_multisampled_render_to_texture'); - }, - get: function (name) { - const extension = getExtension(name); - - if (extension === null) { - console.warn('THREE.WebGLRenderer: ' + name + ' extension not supported.'); - } - - return extension; - } - }; - } - - function WebGLGeometries(gl, attributes, info, bindingStates) { - const geometries = {}; - const wireframeAttributes = new WeakMap(); - - function onGeometryDispose(event) { - const geometry = event.target; - - if (geometry.index !== null) { - attributes.remove(geometry.index); - } - - for (const name in geometry.attributes) { - attributes.remove(geometry.attributes[name]); - } - - geometry.removeEventListener('dispose', onGeometryDispose); - delete geometries[geometry.id]; - const attribute = wireframeAttributes.get(geometry); - - if (attribute) { - attributes.remove(attribute); - wireframeAttributes.delete(geometry); - } - - bindingStates.releaseStatesOfGeometry(geometry); - - if (geometry.isInstancedBufferGeometry === true) { - delete geometry._maxInstanceCount; - } // - - - info.memory.geometries--; - } - - function get(object, geometry) { - if (geometries[geometry.id] === true) return geometry; - geometry.addEventListener('dispose', onGeometryDispose); - geometries[geometry.id] = true; - info.memory.geometries++; - return geometry; - } - - function update(geometry) { - const geometryAttributes = geometry.attributes; // Updating index buffer in VAO now. See WebGLBindingStates. - - for (const name in geometryAttributes) { - attributes.update(geometryAttributes[name], gl.ARRAY_BUFFER); - } // morph targets - - - const morphAttributes = geometry.morphAttributes; - - for (const name in morphAttributes) { - const array = morphAttributes[name]; - - for (let i = 0, l = array.length; i < l; i++) { - attributes.update(array[i], gl.ARRAY_BUFFER); - } - } - } - - function updateWireframeAttribute(geometry) { - const indices = []; - const geometryIndex = geometry.index; - const geometryPosition = geometry.attributes.position; - let version = 0; - - if (geometryIndex !== null) { - const array = geometryIndex.array; - version = geometryIndex.version; - - for (let i = 0, l = array.length; i < l; i += 3) { - const a = array[i + 0]; - const b = array[i + 1]; - const c = array[i + 2]; - indices.push(a, b, b, c, c, a); - } - } else { - const array = geometryPosition.array; - version = geometryPosition.version; - - for (let i = 0, l = array.length / 3 - 1; i < l; i += 3) { - const a = i + 0; - const b = i + 1; - const c = i + 2; - indices.push(a, b, b, c, c, a); - } - } - - const attribute = new (arrayNeedsUint32(indices) ? Uint32BufferAttribute : Uint16BufferAttribute)(indices, 1); - attribute.version = version; // Updating index buffer in VAO now. See WebGLBindingStates - // - - const previousAttribute = wireframeAttributes.get(geometry); - if (previousAttribute) attributes.remove(previousAttribute); // - - wireframeAttributes.set(geometry, attribute); - } - - function getWireframeAttribute(geometry) { - const currentAttribute = wireframeAttributes.get(geometry); - - if (currentAttribute) { - const geometryIndex = geometry.index; - - if (geometryIndex !== null) { - // if the attribute is obsolete, create a new one - if (currentAttribute.version < geometryIndex.version) { - updateWireframeAttribute(geometry); - } - } - } else { - updateWireframeAttribute(geometry); - } - - return wireframeAttributes.get(geometry); - } - - return { - get: get, - update: update, - getWireframeAttribute: getWireframeAttribute - }; - } - - function WebGLIndexedBufferRenderer(gl, extensions, info, capabilities) { - const isWebGL2 = capabilities.isWebGL2; - let mode; - - function setMode(value) { - mode = value; - } - - let type, bytesPerElement; - - function setIndex(value) { - type = value.type; - bytesPerElement = value.bytesPerElement; - } - - function render(start, count) { - gl.drawElements(mode, count, type, start * bytesPerElement); - info.update(count, mode, 1); - } - - function renderInstances(start, count, primcount) { - if (primcount === 0) return; - let extension, methodName; - - if (isWebGL2) { - extension = gl; - methodName = 'drawElementsInstanced'; - } else { - extension = extensions.get('ANGLE_instanced_arrays'); - methodName = 'drawElementsInstancedANGLE'; - - if (extension === null) { - console.error('THREE.WebGLIndexedBufferRenderer: using THREE.InstancedBufferGeometry but hardware does not support extension ANGLE_instanced_arrays.'); - return; - } - } - - extension[methodName](mode, count, type, start * bytesPerElement, primcount); - info.update(count, mode, primcount); - } // - - - this.setMode = setMode; - this.setIndex = setIndex; - this.render = render; - this.renderInstances = renderInstances; - } - - function WebGLInfo(gl) { - const memory = { - geometries: 0, - textures: 0 - }; - const render = { - frame: 0, - calls: 0, - triangles: 0, - points: 0, - lines: 0 - }; - - function update(count, mode, instanceCount) { - render.calls++; - - switch (mode) { - case gl.TRIANGLES: - render.triangles += instanceCount * (count / 3); - break; - - case gl.LINES: - render.lines += instanceCount * (count / 2); - break; - - case gl.LINE_STRIP: - render.lines += instanceCount * (count - 1); - break; - - case gl.LINE_LOOP: - render.lines += instanceCount * count; - break; - - case gl.POINTS: - render.points += instanceCount * count; - break; - - default: - console.error('THREE.WebGLInfo: Unknown draw mode:', mode); - break; - } - } - - function reset() { - render.frame++; - render.calls = 0; - render.triangles = 0; - render.points = 0; - render.lines = 0; - } - - return { - memory: memory, - render: render, - programs: null, - autoReset: true, - reset: reset, - update: update - }; - } - - function numericalSort(a, b) { - return a[0] - b[0]; - } - - function absNumericalSort(a, b) { - return Math.abs(b[1]) - Math.abs(a[1]); - } - - function denormalize(morph, attribute) { - let denominator = 1; - const array = attribute.isInterleavedBufferAttribute ? attribute.data.array : attribute.array; - if (array instanceof Int8Array) denominator = 127;else if (array instanceof Int16Array) denominator = 32767;else if (array instanceof Int32Array) denominator = 2147483647;else console.error('THREE.WebGLMorphtargets: Unsupported morph attribute data type: ', array); - morph.divideScalar(denominator); - } - - function WebGLMorphtargets(gl, capabilities, textures) { - const influencesList = {}; - const morphInfluences = new Float32Array(8); - const morphTextures = new WeakMap(); - const morph = new Vector4(); - const workInfluences = []; - - for (let i = 0; i < 8; i++) { - workInfluences[i] = [i, 0]; - } - - function update(object, geometry, material, program) { - const objectInfluences = object.morphTargetInfluences; - - if (capabilities.isWebGL2 === true) { - // instead of using attributes, the WebGL 2 code path encodes morph targets - // into an array of data textures. Each layer represents a single morph target. - const morphAttribute = geometry.morphAttributes.position || geometry.morphAttributes.normal || geometry.morphAttributes.color; - const morphTargetsCount = morphAttribute !== undefined ? morphAttribute.length : 0; - let entry = morphTextures.get(geometry); - - if (entry === undefined || entry.count !== morphTargetsCount) { - if (entry !== undefined) entry.texture.dispose(); - const hasMorphPosition = geometry.morphAttributes.position !== undefined; - const hasMorphNormals = geometry.morphAttributes.normal !== undefined; - const hasMorphColors = geometry.morphAttributes.color !== undefined; - const morphTargets = geometry.morphAttributes.position || []; - const morphNormals = geometry.morphAttributes.normal || []; - const morphColors = geometry.morphAttributes.color || []; - let vertexDataCount = 0; - if (hasMorphPosition === true) vertexDataCount = 1; - if (hasMorphNormals === true) vertexDataCount = 2; - if (hasMorphColors === true) vertexDataCount = 3; - let width = geometry.attributes.position.count * vertexDataCount; - let height = 1; - - if (width > capabilities.maxTextureSize) { - height = Math.ceil(width / capabilities.maxTextureSize); - width = capabilities.maxTextureSize; - } - - const buffer = new Float32Array(width * height * 4 * morphTargetsCount); - const texture = new DataArrayTexture(buffer, width, height, morphTargetsCount); - texture.type = FloatType; - texture.needsUpdate = true; // fill buffer - - const vertexDataStride = vertexDataCount * 4; - - for (let i = 0; i < morphTargetsCount; i++) { - const morphTarget = morphTargets[i]; - const morphNormal = morphNormals[i]; - const morphColor = morphColors[i]; - const offset = width * height * 4 * i; - - for (let j = 0; j < morphTarget.count; j++) { - const stride = j * vertexDataStride; - - if (hasMorphPosition === true) { - morph.fromBufferAttribute(morphTarget, j); - if (morphTarget.normalized === true) denormalize(morph, morphTarget); - buffer[offset + stride + 0] = morph.x; - buffer[offset + stride + 1] = morph.y; - buffer[offset + stride + 2] = morph.z; - buffer[offset + stride + 3] = 0; - } - - if (hasMorphNormals === true) { - morph.fromBufferAttribute(morphNormal, j); - if (morphNormal.normalized === true) denormalize(morph, morphNormal); - buffer[offset + stride + 4] = morph.x; - buffer[offset + stride + 5] = morph.y; - buffer[offset + stride + 6] = morph.z; - buffer[offset + stride + 7] = 0; - } - - if (hasMorphColors === true) { - morph.fromBufferAttribute(morphColor, j); - if (morphColor.normalized === true) denormalize(morph, morphColor); - buffer[offset + stride + 8] = morph.x; - buffer[offset + stride + 9] = morph.y; - buffer[offset + stride + 10] = morph.z; - buffer[offset + stride + 11] = morphColor.itemSize === 4 ? morph.w : 1; - } - } - } - - entry = { - count: morphTargetsCount, - texture: texture, - size: new Vector2(width, height) - }; - morphTextures.set(geometry, entry); - - function disposeTexture() { - texture.dispose(); - morphTextures.delete(geometry); - geometry.removeEventListener('dispose', disposeTexture); - } - - geometry.addEventListener('dispose', disposeTexture); - } // - - - let morphInfluencesSum = 0; - - for (let i = 0; i < objectInfluences.length; i++) { - morphInfluencesSum += objectInfluences[i]; - } - - const morphBaseInfluence = geometry.morphTargetsRelative ? 1 : 1 - morphInfluencesSum; - program.getUniforms().setValue(gl, 'morphTargetBaseInfluence', morphBaseInfluence); - program.getUniforms().setValue(gl, 'morphTargetInfluences', objectInfluences); - program.getUniforms().setValue(gl, 'morphTargetsTexture', entry.texture, textures); - program.getUniforms().setValue(gl, 'morphTargetsTextureSize', entry.size); - } else { - // When object doesn't have morph target influences defined, we treat it as a 0-length array - // This is important to make sure we set up morphTargetBaseInfluence / morphTargetInfluences - const length = objectInfluences === undefined ? 0 : objectInfluences.length; - let influences = influencesList[geometry.id]; - - if (influences === undefined || influences.length !== length) { - // initialise list - influences = []; - - for (let i = 0; i < length; i++) { - influences[i] = [i, 0]; - } - - influencesList[geometry.id] = influences; - } // Collect influences - - - for (let i = 0; i < length; i++) { - const influence = influences[i]; - influence[0] = i; - influence[1] = objectInfluences[i]; - } - - influences.sort(absNumericalSort); - - for (let i = 0; i < 8; i++) { - if (i < length && influences[i][1]) { - workInfluences[i][0] = influences[i][0]; - workInfluences[i][1] = influences[i][1]; - } else { - workInfluences[i][0] = Number.MAX_SAFE_INTEGER; - workInfluences[i][1] = 0; - } - } - - workInfluences.sort(numericalSort); - const morphTargets = geometry.morphAttributes.position; - const morphNormals = geometry.morphAttributes.normal; - let morphInfluencesSum = 0; - - for (let i = 0; i < 8; i++) { - const influence = workInfluences[i]; - const index = influence[0]; - const value = influence[1]; - - if (index !== Number.MAX_SAFE_INTEGER && value) { - if (morphTargets && geometry.getAttribute('morphTarget' + i) !== morphTargets[index]) { - geometry.setAttribute('morphTarget' + i, morphTargets[index]); - } - - if (morphNormals && geometry.getAttribute('morphNormal' + i) !== morphNormals[index]) { - geometry.setAttribute('morphNormal' + i, morphNormals[index]); - } - - morphInfluences[i] = value; - morphInfluencesSum += value; - } else { - if (morphTargets && geometry.hasAttribute('morphTarget' + i) === true) { - geometry.deleteAttribute('morphTarget' + i); - } - - if (morphNormals && geometry.hasAttribute('morphNormal' + i) === true) { - geometry.deleteAttribute('morphNormal' + i); - } - - morphInfluences[i] = 0; - } - } // GLSL shader uses formula baseinfluence * base + sum(target * influence) - // This allows us to switch between absolute morphs and relative morphs without changing shader code - // When baseinfluence = 1 - sum(influence), the above is equivalent to sum((target - base) * influence) - - - const morphBaseInfluence = geometry.morphTargetsRelative ? 1 : 1 - morphInfluencesSum; - program.getUniforms().setValue(gl, 'morphTargetBaseInfluence', morphBaseInfluence); - program.getUniforms().setValue(gl, 'morphTargetInfluences', morphInfluences); - } - } - - return { - update: update - }; - } - - function WebGLObjects(gl, geometries, attributes, info) { - let updateMap = new WeakMap(); - - function update(object) { - const frame = info.render.frame; - const geometry = object.geometry; - const buffergeometry = geometries.get(object, geometry); // Update once per frame - - if (updateMap.get(buffergeometry) !== frame) { - geometries.update(buffergeometry); - updateMap.set(buffergeometry, frame); - } - - if (object.isInstancedMesh) { - if (object.hasEventListener('dispose', onInstancedMeshDispose) === false) { - object.addEventListener('dispose', onInstancedMeshDispose); - } - - attributes.update(object.instanceMatrix, gl.ARRAY_BUFFER); - - if (object.instanceColor !== null) { - attributes.update(object.instanceColor, gl.ARRAY_BUFFER); - } - } - - return buffergeometry; - } - - function dispose() { - updateMap = new WeakMap(); - } - - function onInstancedMeshDispose(event) { - const instancedMesh = event.target; - instancedMesh.removeEventListener('dispose', onInstancedMeshDispose); - attributes.remove(instancedMesh.instanceMatrix); - if (instancedMesh.instanceColor !== null) attributes.remove(instancedMesh.instanceColor); - } - - return { - update: update, - dispose: dispose - }; - } - - /** - * Uniforms of a program. - * Those form a tree structure with a special top-level container for the root, - * which you get by calling 'new WebGLUniforms( gl, program )'. - * - * - * Properties of inner nodes including the top-level container: - * - * .seq - array of nested uniforms - * .map - nested uniforms by name - * - * - * Methods of all nodes except the top-level container: - * - * .setValue( gl, value, [textures] ) - * - * uploads a uniform value(s) - * the 'textures' parameter is needed for sampler uniforms - * - * - * Static methods of the top-level container (textures factorizations): - * - * .upload( gl, seq, values, textures ) - * - * sets uniforms in 'seq' to 'values[id].value' - * - * .seqWithValue( seq, values ) : filteredSeq - * - * filters 'seq' entries with corresponding entry in values - * - * - * Methods of the top-level container (textures factorizations): - * - * .setValue( gl, name, value, textures ) - * - * sets uniform with name 'name' to 'value' - * - * .setOptional( gl, obj, prop ) - * - * like .set for an optional property of the object - * - */ - const emptyTexture = new Texture(); - const emptyArrayTexture = new DataArrayTexture(); - const empty3dTexture = new Data3DTexture(); - const emptyCubeTexture = new CubeTexture(); // --- Utilities --- - // Array Caches (provide typed arrays for temporary by size) - - const arrayCacheF32 = []; - const arrayCacheI32 = []; // Float32Array caches used for uploading Matrix uniforms - - const mat4array = new Float32Array(16); - const mat3array = new Float32Array(9); - const mat2array = new Float32Array(4); // Flattening for arrays of vectors and matrices - - function flatten(array, nBlocks, blockSize) { - const firstElem = array[0]; - if (firstElem <= 0 || firstElem > 0) return array; // unoptimized: ! isNaN( firstElem ) - // see http://jacksondunstan.com/articles/983 - - const n = nBlocks * blockSize; - let r = arrayCacheF32[n]; - - if (r === undefined) { - r = new Float32Array(n); - arrayCacheF32[n] = r; - } - - if (nBlocks !== 0) { - firstElem.toArray(r, 0); - - for (let i = 1, offset = 0; i !== nBlocks; ++i) { - offset += blockSize; - array[i].toArray(r, offset); - } - } - - return r; - } - - function arraysEqual(a, b) { - if (a.length !== b.length) return false; - - for (let i = 0, l = a.length; i < l; i++) { - if (a[i] !== b[i]) return false; - } - - return true; - } - - function copyArray(a, b) { - for (let i = 0, l = b.length; i < l; i++) { - a[i] = b[i]; - } - } // Texture unit allocation - - - function allocTexUnits(textures, n) { - let r = arrayCacheI32[n]; - - if (r === undefined) { - r = new Int32Array(n); - arrayCacheI32[n] = r; - } - - for (let i = 0; i !== n; ++i) { - r[i] = textures.allocateTextureUnit(); - } - - return r; - } // --- Setters --- - // Note: Defining these methods externally, because they come in a bunch - // and this way their names minify. - // Single scalar - - - function setValueV1f(gl, v) { - const cache = this.cache; - if (cache[0] === v) return; - gl.uniform1f(this.addr, v); - cache[0] = v; - } // Single float vector (from flat array or THREE.VectorN) - - - function setValueV2f(gl, v) { - const cache = this.cache; - - if (v.x !== undefined) { - if (cache[0] !== v.x || cache[1] !== v.y) { - gl.uniform2f(this.addr, v.x, v.y); - cache[0] = v.x; - cache[1] = v.y; - } - } else { - if (arraysEqual(cache, v)) return; - gl.uniform2fv(this.addr, v); - copyArray(cache, v); - } - } - - function setValueV3f(gl, v) { - const cache = this.cache; - - if (v.x !== undefined) { - if (cache[0] !== v.x || cache[1] !== v.y || cache[2] !== v.z) { - gl.uniform3f(this.addr, v.x, v.y, v.z); - cache[0] = v.x; - cache[1] = v.y; - cache[2] = v.z; - } - } else if (v.r !== undefined) { - if (cache[0] !== v.r || cache[1] !== v.g || cache[2] !== v.b) { - gl.uniform3f(this.addr, v.r, v.g, v.b); - cache[0] = v.r; - cache[1] = v.g; - cache[2] = v.b; - } - } else { - if (arraysEqual(cache, v)) return; - gl.uniform3fv(this.addr, v); - copyArray(cache, v); - } - } - - function setValueV4f(gl, v) { - const cache = this.cache; - - if (v.x !== undefined) { - if (cache[0] !== v.x || cache[1] !== v.y || cache[2] !== v.z || cache[3] !== v.w) { - gl.uniform4f(this.addr, v.x, v.y, v.z, v.w); - cache[0] = v.x; - cache[1] = v.y; - cache[2] = v.z; - cache[3] = v.w; - } - } else { - if (arraysEqual(cache, v)) return; - gl.uniform4fv(this.addr, v); - copyArray(cache, v); - } - } // Single matrix (from flat array or THREE.MatrixN) - - - function setValueM2(gl, v) { - const cache = this.cache; - const elements = v.elements; - - if (elements === undefined) { - if (arraysEqual(cache, v)) return; - gl.uniformMatrix2fv(this.addr, false, v); - copyArray(cache, v); - } else { - if (arraysEqual(cache, elements)) return; - mat2array.set(elements); - gl.uniformMatrix2fv(this.addr, false, mat2array); - copyArray(cache, elements); - } - } - - function setValueM3(gl, v) { - const cache = this.cache; - const elements = v.elements; - - if (elements === undefined) { - if (arraysEqual(cache, v)) return; - gl.uniformMatrix3fv(this.addr, false, v); - copyArray(cache, v); - } else { - if (arraysEqual(cache, elements)) return; - mat3array.set(elements); - gl.uniformMatrix3fv(this.addr, false, mat3array); - copyArray(cache, elements); - } - } - - function setValueM4(gl, v) { - const cache = this.cache; - const elements = v.elements; - - if (elements === undefined) { - if (arraysEqual(cache, v)) return; - gl.uniformMatrix4fv(this.addr, false, v); - copyArray(cache, v); - } else { - if (arraysEqual(cache, elements)) return; - mat4array.set(elements); - gl.uniformMatrix4fv(this.addr, false, mat4array); - copyArray(cache, elements); - } - } // Single integer / boolean - - - function setValueV1i(gl, v) { - const cache = this.cache; - if (cache[0] === v) return; - gl.uniform1i(this.addr, v); - cache[0] = v; - } // Single integer / boolean vector (from flat array) - - - function setValueV2i(gl, v) { - const cache = this.cache; - if (arraysEqual(cache, v)) return; - gl.uniform2iv(this.addr, v); - copyArray(cache, v); - } - - function setValueV3i(gl, v) { - const cache = this.cache; - if (arraysEqual(cache, v)) return; - gl.uniform3iv(this.addr, v); - copyArray(cache, v); - } - - function setValueV4i(gl, v) { - const cache = this.cache; - if (arraysEqual(cache, v)) return; - gl.uniform4iv(this.addr, v); - copyArray(cache, v); - } // Single unsigned integer - - - function setValueV1ui(gl, v) { - const cache = this.cache; - if (cache[0] === v) return; - gl.uniform1ui(this.addr, v); - cache[0] = v; - } // Single unsigned integer vector (from flat array) - - - function setValueV2ui(gl, v) { - const cache = this.cache; - if (arraysEqual(cache, v)) return; - gl.uniform2uiv(this.addr, v); - copyArray(cache, v); - } - - function setValueV3ui(gl, v) { - const cache = this.cache; - if (arraysEqual(cache, v)) return; - gl.uniform3uiv(this.addr, v); - copyArray(cache, v); - } - - function setValueV4ui(gl, v) { - const cache = this.cache; - if (arraysEqual(cache, v)) return; - gl.uniform4uiv(this.addr, v); - copyArray(cache, v); - } // Single texture (2D / Cube) - - - function setValueT1(gl, v, textures) { - const cache = this.cache; - const unit = textures.allocateTextureUnit(); - - if (cache[0] !== unit) { - gl.uniform1i(this.addr, unit); - cache[0] = unit; - } - - textures.setTexture2D(v || emptyTexture, unit); - } - - function setValueT3D1(gl, v, textures) { - const cache = this.cache; - const unit = textures.allocateTextureUnit(); - - if (cache[0] !== unit) { - gl.uniform1i(this.addr, unit); - cache[0] = unit; - } - - textures.setTexture3D(v || empty3dTexture, unit); - } - - function setValueT6(gl, v, textures) { - const cache = this.cache; - const unit = textures.allocateTextureUnit(); - - if (cache[0] !== unit) { - gl.uniform1i(this.addr, unit); - cache[0] = unit; - } - - textures.setTextureCube(v || emptyCubeTexture, unit); - } - - function setValueT2DArray1(gl, v, textures) { - const cache = this.cache; - const unit = textures.allocateTextureUnit(); - - if (cache[0] !== unit) { - gl.uniform1i(this.addr, unit); - cache[0] = unit; - } - - textures.setTexture2DArray(v || emptyArrayTexture, unit); - } // Helper to pick the right setter for the singular case - - - function getSingularSetter(type) { - switch (type) { - case 0x1406: - return setValueV1f; - // FLOAT - - case 0x8b50: - return setValueV2f; - // _VEC2 - - case 0x8b51: - return setValueV3f; - // _VEC3 - - case 0x8b52: - return setValueV4f; - // _VEC4 - - case 0x8b5a: - return setValueM2; - // _MAT2 - - case 0x8b5b: - return setValueM3; - // _MAT3 - - case 0x8b5c: - return setValueM4; - // _MAT4 - - case 0x1404: - case 0x8b56: - return setValueV1i; - // INT, BOOL - - case 0x8b53: - case 0x8b57: - return setValueV2i; - // _VEC2 - - case 0x8b54: - case 0x8b58: - return setValueV3i; - // _VEC3 - - case 0x8b55: - case 0x8b59: - return setValueV4i; - // _VEC4 - - case 0x1405: - return setValueV1ui; - // UINT - - case 0x8dc6: - return setValueV2ui; - // _VEC2 - - case 0x8dc7: - return setValueV3ui; - // _VEC3 - - case 0x8dc8: - return setValueV4ui; - // _VEC4 - - case 0x8b5e: // SAMPLER_2D - - case 0x8d66: // SAMPLER_EXTERNAL_OES - - case 0x8dca: // INT_SAMPLER_2D - - case 0x8dd2: // UNSIGNED_INT_SAMPLER_2D - - case 0x8b62: - // SAMPLER_2D_SHADOW - return setValueT1; - - case 0x8b5f: // SAMPLER_3D - - case 0x8dcb: // INT_SAMPLER_3D - - case 0x8dd3: - // UNSIGNED_INT_SAMPLER_3D - return setValueT3D1; - - case 0x8b60: // SAMPLER_CUBE - - case 0x8dcc: // INT_SAMPLER_CUBE - - case 0x8dd4: // UNSIGNED_INT_SAMPLER_CUBE - - case 0x8dc5: - // SAMPLER_CUBE_SHADOW - return setValueT6; - - case 0x8dc1: // SAMPLER_2D_ARRAY - - case 0x8dcf: // INT_SAMPLER_2D_ARRAY - - case 0x8dd7: // UNSIGNED_INT_SAMPLER_2D_ARRAY - - case 0x8dc4: - // SAMPLER_2D_ARRAY_SHADOW - return setValueT2DArray1; - } - } // Array of scalars - - - function setValueV1fArray(gl, v) { - gl.uniform1fv(this.addr, v); - } // Array of vectors (from flat array or array of THREE.VectorN) - - - function setValueV2fArray(gl, v) { - const data = flatten(v, this.size, 2); - gl.uniform2fv(this.addr, data); - } - - function setValueV3fArray(gl, v) { - const data = flatten(v, this.size, 3); - gl.uniform3fv(this.addr, data); - } - - function setValueV4fArray(gl, v) { - const data = flatten(v, this.size, 4); - gl.uniform4fv(this.addr, data); - } // Array of matrices (from flat array or array of THREE.MatrixN) - - - function setValueM2Array(gl, v) { - const data = flatten(v, this.size, 4); - gl.uniformMatrix2fv(this.addr, false, data); - } - - function setValueM3Array(gl, v) { - const data = flatten(v, this.size, 9); - gl.uniformMatrix3fv(this.addr, false, data); - } - - function setValueM4Array(gl, v) { - const data = flatten(v, this.size, 16); - gl.uniformMatrix4fv(this.addr, false, data); - } // Array of integer / boolean - - - function setValueV1iArray(gl, v) { - gl.uniform1iv(this.addr, v); - } // Array of integer / boolean vectors (from flat array) - - - function setValueV2iArray(gl, v) { - gl.uniform2iv(this.addr, v); - } - - function setValueV3iArray(gl, v) { - gl.uniform3iv(this.addr, v); - } - - function setValueV4iArray(gl, v) { - gl.uniform4iv(this.addr, v); - } // Array of unsigned integer - - - function setValueV1uiArray(gl, v) { - gl.uniform1uiv(this.addr, v); - } // Array of unsigned integer vectors (from flat array) - - - function setValueV2uiArray(gl, v) { - gl.uniform2uiv(this.addr, v); - } - - function setValueV3uiArray(gl, v) { - gl.uniform3uiv(this.addr, v); - } - - function setValueV4uiArray(gl, v) { - gl.uniform4uiv(this.addr, v); - } // Array of textures (2D / 3D / Cube / 2DArray) - - - function setValueT1Array(gl, v, textures) { - const n = v.length; - const units = allocTexUnits(textures, n); - gl.uniform1iv(this.addr, units); - - for (let i = 0; i !== n; ++i) { - textures.setTexture2D(v[i] || emptyTexture, units[i]); - } - } - - function setValueT3DArray(gl, v, textures) { - const n = v.length; - const units = allocTexUnits(textures, n); - gl.uniform1iv(this.addr, units); - - for (let i = 0; i !== n; ++i) { - textures.setTexture3D(v[i] || empty3dTexture, units[i]); - } - } - - function setValueT6Array(gl, v, textures) { - const n = v.length; - const units = allocTexUnits(textures, n); - gl.uniform1iv(this.addr, units); - - for (let i = 0; i !== n; ++i) { - textures.setTextureCube(v[i] || emptyCubeTexture, units[i]); - } - } - - function setValueT2DArrayArray(gl, v, textures) { - const n = v.length; - const units = allocTexUnits(textures, n); - gl.uniform1iv(this.addr, units); - - for (let i = 0; i !== n; ++i) { - textures.setTexture2DArray(v[i] || emptyArrayTexture, units[i]); - } - } // Helper to pick the right setter for a pure (bottom-level) array - - - function getPureArraySetter(type) { - switch (type) { - case 0x1406: - return setValueV1fArray; - // FLOAT - - case 0x8b50: - return setValueV2fArray; - // _VEC2 - - case 0x8b51: - return setValueV3fArray; - // _VEC3 - - case 0x8b52: - return setValueV4fArray; - // _VEC4 - - case 0x8b5a: - return setValueM2Array; - // _MAT2 - - case 0x8b5b: - return setValueM3Array; - // _MAT3 - - case 0x8b5c: - return setValueM4Array; - // _MAT4 - - case 0x1404: - case 0x8b56: - return setValueV1iArray; - // INT, BOOL - - case 0x8b53: - case 0x8b57: - return setValueV2iArray; - // _VEC2 - - case 0x8b54: - case 0x8b58: - return setValueV3iArray; - // _VEC3 - - case 0x8b55: - case 0x8b59: - return setValueV4iArray; - // _VEC4 - - case 0x1405: - return setValueV1uiArray; - // UINT - - case 0x8dc6: - return setValueV2uiArray; - // _VEC2 - - case 0x8dc7: - return setValueV3uiArray; - // _VEC3 - - case 0x8dc8: - return setValueV4uiArray; - // _VEC4 - - case 0x8b5e: // SAMPLER_2D - - case 0x8d66: // SAMPLER_EXTERNAL_OES - - case 0x8dca: // INT_SAMPLER_2D - - case 0x8dd2: // UNSIGNED_INT_SAMPLER_2D - - case 0x8b62: - // SAMPLER_2D_SHADOW - return setValueT1Array; - - case 0x8b5f: // SAMPLER_3D - - case 0x8dcb: // INT_SAMPLER_3D - - case 0x8dd3: - // UNSIGNED_INT_SAMPLER_3D - return setValueT3DArray; - - case 0x8b60: // SAMPLER_CUBE - - case 0x8dcc: // INT_SAMPLER_CUBE - - case 0x8dd4: // UNSIGNED_INT_SAMPLER_CUBE - - case 0x8dc5: - // SAMPLER_CUBE_SHADOW - return setValueT6Array; - - case 0x8dc1: // SAMPLER_2D_ARRAY - - case 0x8dcf: // INT_SAMPLER_2D_ARRAY - - case 0x8dd7: // UNSIGNED_INT_SAMPLER_2D_ARRAY - - case 0x8dc4: - // SAMPLER_2D_ARRAY_SHADOW - return setValueT2DArrayArray; - } - } // --- Uniform Classes --- - - - function SingleUniform(id, activeInfo, addr) { - this.id = id; - this.addr = addr; - this.cache = []; - this.setValue = getSingularSetter(activeInfo.type); // this.path = activeInfo.name; // DEBUG - } - - function PureArrayUniform(id, activeInfo, addr) { - this.id = id; - this.addr = addr; - this.cache = []; - this.size = activeInfo.size; - this.setValue = getPureArraySetter(activeInfo.type); // this.path = activeInfo.name; // DEBUG - } - - function StructuredUniform(id) { - this.id = id; - this.seq = []; - this.map = {}; - } - - StructuredUniform.prototype.setValue = function (gl, value, textures) { - const seq = this.seq; - - for (let i = 0, n = seq.length; i !== n; ++i) { - const u = seq[i]; - u.setValue(gl, value[u.id], textures); - } - }; // --- Top-level --- - // Parser - builds up the property tree from the path strings - - - const RePathPart = /(\w+)(\])?(\[|\.)?/g; // extracts - // - the identifier (member name or array index) - // - followed by an optional right bracket (found when array index) - // - followed by an optional left bracket or dot (type of subscript) - // - // Note: These portions can be read in a non-overlapping fashion and - // allow straightforward parsing of the hierarchy that WebGL encodes - // in the uniform names. - - function addUniform(container, uniformObject) { - container.seq.push(uniformObject); - container.map[uniformObject.id] = uniformObject; - } - - function parseUniform(activeInfo, addr, container) { - const path = activeInfo.name, - pathLength = path.length; // reset RegExp object, because of the early exit of a previous run - - RePathPart.lastIndex = 0; - - while (true) { - const match = RePathPart.exec(path), - matchEnd = RePathPart.lastIndex; - let id = match[1]; - const idIsIndex = match[2] === ']', - subscript = match[3]; - if (idIsIndex) id = id | 0; // convert to integer - - if (subscript === undefined || subscript === '[' && matchEnd + 2 === pathLength) { - // bare name or "pure" bottom-level array "[0]" suffix - addUniform(container, subscript === undefined ? new SingleUniform(id, activeInfo, addr) : new PureArrayUniform(id, activeInfo, addr)); - break; - } else { - // step into inner node / create it in case it doesn't exist - const map = container.map; - let next = map[id]; - - if (next === undefined) { - next = new StructuredUniform(id); - addUniform(container, next); - } - - container = next; - } - } - } // Root Container - - - function WebGLUniforms(gl, program) { - this.seq = []; - this.map = {}; - const n = gl.getProgramParameter(program, gl.ACTIVE_UNIFORMS); - - for (let i = 0; i < n; ++i) { - const info = gl.getActiveUniform(program, i), - addr = gl.getUniformLocation(program, info.name); - parseUniform(info, addr, this); - } - } - - WebGLUniforms.prototype.setValue = function (gl, name, value, textures) { - const u = this.map[name]; - if (u !== undefined) u.setValue(gl, value, textures); - }; - - WebGLUniforms.prototype.setOptional = function (gl, object, name) { - const v = object[name]; - if (v !== undefined) this.setValue(gl, name, v); - }; // Static interface - - - WebGLUniforms.upload = function (gl, seq, values, textures) { - for (let i = 0, n = seq.length; i !== n; ++i) { - const u = seq[i], - v = values[u.id]; - - if (v.needsUpdate !== false) { - // note: always updating when .needsUpdate is undefined - u.setValue(gl, v.value, textures); - } - } - }; - - WebGLUniforms.seqWithValue = function (seq, values) { - const r = []; - - for (let i = 0, n = seq.length; i !== n; ++i) { - const u = seq[i]; - if (u.id in values) r.push(u); - } - - return r; - }; - - function WebGLShader(gl, type, string) { - const shader = gl.createShader(type); - gl.shaderSource(shader, string); - gl.compileShader(shader); - return shader; - } - - let programIdCount = 0; - - function handleSource(string, errorLine) { - const lines = string.split('\n'); - const lines2 = []; - const from = Math.max(errorLine - 6, 0); - const to = Math.min(errorLine + 6, lines.length); - - for (let i = from; i < to; i++) { - lines2.push(i + 1 + ': ' + lines[i]); - } - - return lines2.join('\n'); - } - - function getEncodingComponents(encoding) { - switch (encoding) { - case LinearEncoding: - return ['Linear', '( value )']; - - case sRGBEncoding: - return ['sRGB', '( value )']; - - default: - console.warn('THREE.WebGLProgram: Unsupported encoding:', encoding); - return ['Linear', '( value )']; - } - } - - function getShaderErrors(gl, shader, type) { - const status = gl.getShaderParameter(shader, gl.COMPILE_STATUS); - const errors = gl.getShaderInfoLog(shader).trim(); - if (status && errors === '') return ''; - const errorMatches = /ERROR: 0:(\d+)/.exec(errors); - - if (errorMatches) { - // --enable-privileged-webgl-extension - // console.log( '**' + type + '**', gl.getExtension( 'WEBGL_debug_shaders' ).getTranslatedShaderSource( shader ) ); - const errorLine = parseInt(errorMatches[0]); - return type.toUpperCase() + '\n\n' + errors + '\n\n' + handleSource(gl.getShaderSource(shader), errorLine); - } else { - return errors; - } - } - - function getTexelEncodingFunction(functionName, encoding) { - const components = getEncodingComponents(encoding); - return 'vec4 ' + functionName + '( vec4 value ) { return LinearTo' + components[0] + components[1] + '; }'; - } - - function getToneMappingFunction(functionName, toneMapping) { - let toneMappingName; - - switch (toneMapping) { - case LinearToneMapping: - toneMappingName = 'Linear'; - break; - - case ReinhardToneMapping: - toneMappingName = 'Reinhard'; - break; - - case CineonToneMapping: - toneMappingName = 'OptimizedCineon'; - break; - - case ACESFilmicToneMapping: - toneMappingName = 'ACESFilmic'; - break; - - case CustomToneMapping: - toneMappingName = 'Custom'; - break; - - default: - console.warn('THREE.WebGLProgram: Unsupported toneMapping:', toneMapping); - toneMappingName = 'Linear'; - } - - return 'vec3 ' + functionName + '( vec3 color ) { return ' + toneMappingName + 'ToneMapping( color ); }'; - } - - function generateExtensions(parameters) { - const chunks = [parameters.extensionDerivatives || !!parameters.envMapCubeUVHeight || parameters.bumpMap || parameters.tangentSpaceNormalMap || parameters.clearcoatNormalMap || parameters.flatShading || parameters.shaderID === 'physical' ? '#extension GL_OES_standard_derivatives : enable' : '', (parameters.extensionFragDepth || parameters.logarithmicDepthBuffer) && parameters.rendererExtensionFragDepth ? '#extension GL_EXT_frag_depth : enable' : '', parameters.extensionDrawBuffers && parameters.rendererExtensionDrawBuffers ? '#extension GL_EXT_draw_buffers : require' : '', (parameters.extensionShaderTextureLOD || parameters.envMap || parameters.transmission) && parameters.rendererExtensionShaderTextureLod ? '#extension GL_EXT_shader_texture_lod : enable' : '']; - return chunks.filter(filterEmptyLine).join('\n'); - } - - function generateDefines(defines) { - const chunks = []; - - for (const name in defines) { - const value = defines[name]; - if (value === false) continue; - chunks.push('#define ' + name + ' ' + value); - } - - return chunks.join('\n'); - } - - function fetchAttributeLocations(gl, program) { - const attributes = {}; - const n = gl.getProgramParameter(program, gl.ACTIVE_ATTRIBUTES); - - for (let i = 0; i < n; i++) { - const info = gl.getActiveAttrib(program, i); - const name = info.name; - let locationSize = 1; - if (info.type === gl.FLOAT_MAT2) locationSize = 2; - if (info.type === gl.FLOAT_MAT3) locationSize = 3; - if (info.type === gl.FLOAT_MAT4) locationSize = 4; // console.log( 'THREE.WebGLProgram: ACTIVE VERTEX ATTRIBUTE:', name, i ); - - attributes[name] = { - type: info.type, - location: gl.getAttribLocation(program, name), - locationSize: locationSize - }; - } - - return attributes; - } - - function filterEmptyLine(string) { - return string !== ''; - } - - function replaceLightNums(string, parameters) { - return string.replace(/NUM_DIR_LIGHTS/g, parameters.numDirLights).replace(/NUM_SPOT_LIGHTS/g, parameters.numSpotLights).replace(/NUM_RECT_AREA_LIGHTS/g, parameters.numRectAreaLights).replace(/NUM_POINT_LIGHTS/g, parameters.numPointLights).replace(/NUM_HEMI_LIGHTS/g, parameters.numHemiLights).replace(/NUM_DIR_LIGHT_SHADOWS/g, parameters.numDirLightShadows).replace(/NUM_SPOT_LIGHT_SHADOWS/g, parameters.numSpotLightShadows).replace(/NUM_POINT_LIGHT_SHADOWS/g, parameters.numPointLightShadows); - } - - function replaceClippingPlaneNums(string, parameters) { - return string.replace(/NUM_CLIPPING_PLANES/g, parameters.numClippingPlanes).replace(/UNION_CLIPPING_PLANES/g, parameters.numClippingPlanes - parameters.numClipIntersection); - } // Resolve Includes - - - const includePattern = /^[ \t]*#include +<([\w\d./]+)>/gm; - - function resolveIncludes(string) { - return string.replace(includePattern, includeReplacer); - } - - function includeReplacer(match, include) { - const string = ShaderChunk[include]; - - if (string === undefined) { - throw new Error('Can not resolve #include <' + include + '>'); - } - - return resolveIncludes(string); - } // Unroll Loops - - - const deprecatedUnrollLoopPattern = /#pragma unroll_loop[\s]+?for \( int i \= (\d+)\; i < (\d+)\; i \+\+ \) \{([\s\S]+?)(?=\})\}/g; - const unrollLoopPattern = /#pragma unroll_loop_start\s+for\s*\(\s*int\s+i\s*=\s*(\d+)\s*;\s*i\s*<\s*(\d+)\s*;\s*i\s*\+\+\s*\)\s*{([\s\S]+?)}\s+#pragma unroll_loop_end/g; - - function unrollLoops(string) { - return string.replace(unrollLoopPattern, loopReplacer).replace(deprecatedUnrollLoopPattern, deprecatedLoopReplacer); - } - - function deprecatedLoopReplacer(match, start, end, snippet) { - console.warn('WebGLProgram: #pragma unroll_loop shader syntax is deprecated. Please use #pragma unroll_loop_start syntax instead.'); - return loopReplacer(match, start, end, snippet); - } - - function loopReplacer(match, start, end, snippet) { - let string = ''; - - for (let i = parseInt(start); i < parseInt(end); i++) { - string += snippet.replace(/\[\s*i\s*\]/g, '[ ' + i + ' ]').replace(/UNROLLED_LOOP_INDEX/g, i); - } - - return string; - } // - - - function generatePrecision(parameters) { - let precisionstring = 'precision ' + parameters.precision + ' float;\nprecision ' + parameters.precision + ' int;'; - - if (parameters.precision === 'highp') { - precisionstring += '\n#define HIGH_PRECISION'; - } else if (parameters.precision === 'mediump') { - precisionstring += '\n#define MEDIUM_PRECISION'; - } else if (parameters.precision === 'lowp') { - precisionstring += '\n#define LOW_PRECISION'; - } - - return precisionstring; - } - - function generateShadowMapTypeDefine(parameters) { - let shadowMapTypeDefine = 'SHADOWMAP_TYPE_BASIC'; - - if (parameters.shadowMapType === PCFShadowMap) { - shadowMapTypeDefine = 'SHADOWMAP_TYPE_PCF'; - } else if (parameters.shadowMapType === PCFSoftShadowMap) { - shadowMapTypeDefine = 'SHADOWMAP_TYPE_PCF_SOFT'; - } else if (parameters.shadowMapType === VSMShadowMap) { - shadowMapTypeDefine = 'SHADOWMAP_TYPE_VSM'; - } - - return shadowMapTypeDefine; - } - - function generateEnvMapTypeDefine(parameters) { - let envMapTypeDefine = 'ENVMAP_TYPE_CUBE'; - - if (parameters.envMap) { - switch (parameters.envMapMode) { - case CubeReflectionMapping: - case CubeRefractionMapping: - envMapTypeDefine = 'ENVMAP_TYPE_CUBE'; - break; - - case CubeUVReflectionMapping: - envMapTypeDefine = 'ENVMAP_TYPE_CUBE_UV'; - break; - } - } - - return envMapTypeDefine; - } - - function generateEnvMapModeDefine(parameters) { - let envMapModeDefine = 'ENVMAP_MODE_REFLECTION'; - - if (parameters.envMap) { - switch (parameters.envMapMode) { - case CubeRefractionMapping: - envMapModeDefine = 'ENVMAP_MODE_REFRACTION'; - break; - } - } - - return envMapModeDefine; - } - - function generateEnvMapBlendingDefine(parameters) { - let envMapBlendingDefine = 'ENVMAP_BLENDING_NONE'; - - if (parameters.envMap) { - switch (parameters.combine) { - case MultiplyOperation: - envMapBlendingDefine = 'ENVMAP_BLENDING_MULTIPLY'; - break; - - case MixOperation: - envMapBlendingDefine = 'ENVMAP_BLENDING_MIX'; - break; - - case AddOperation: - envMapBlendingDefine = 'ENVMAP_BLENDING_ADD'; - break; - } - } - - return envMapBlendingDefine; - } - - function generateCubeUVSize(parameters) { - const imageHeight = parameters.envMapCubeUVHeight; - if (imageHeight === null) return null; - const maxMip = Math.log2(imageHeight) - 2; - const texelHeight = 1.0 / imageHeight; - const texelWidth = 1.0 / (3 * Math.max(Math.pow(2, maxMip), 7 * 16)); - return { - texelWidth, - texelHeight, - maxMip - }; - } - - function WebGLProgram(renderer, cacheKey, parameters, bindingStates) { - // TODO Send this event to Three.js DevTools - // console.log( 'WebGLProgram', cacheKey ); - const gl = renderer.getContext(); - const defines = parameters.defines; - let vertexShader = parameters.vertexShader; - let fragmentShader = parameters.fragmentShader; - const shadowMapTypeDefine = generateShadowMapTypeDefine(parameters); - const envMapTypeDefine = generateEnvMapTypeDefine(parameters); - const envMapModeDefine = generateEnvMapModeDefine(parameters); - const envMapBlendingDefine = generateEnvMapBlendingDefine(parameters); - const envMapCubeUVSize = generateCubeUVSize(parameters); - const customExtensions = parameters.isWebGL2 ? '' : generateExtensions(parameters); - const customDefines = generateDefines(defines); - const program = gl.createProgram(); - let prefixVertex, prefixFragment; - let versionString = parameters.glslVersion ? '#version ' + parameters.glslVersion + '\n' : ''; - - if (parameters.isRawShaderMaterial) { - prefixVertex = [customDefines].filter(filterEmptyLine).join('\n'); - - if (prefixVertex.length > 0) { - prefixVertex += '\n'; - } - - prefixFragment = [customExtensions, customDefines].filter(filterEmptyLine).join('\n'); - - if (prefixFragment.length > 0) { - prefixFragment += '\n'; - } - } else { - prefixVertex = [generatePrecision(parameters), '#define SHADER_NAME ' + parameters.shaderName, customDefines, parameters.instancing ? '#define USE_INSTANCING' : '', parameters.instancingColor ? '#define USE_INSTANCING_COLOR' : '', parameters.supportsVertexTextures ? '#define VERTEX_TEXTURES' : '', parameters.useFog && parameters.fog ? '#define USE_FOG' : '', parameters.useFog && parameters.fogExp2 ? '#define FOG_EXP2' : '', parameters.map ? '#define USE_MAP' : '', parameters.envMap ? '#define USE_ENVMAP' : '', parameters.envMap ? '#define ' + envMapModeDefine : '', parameters.lightMap ? '#define USE_LIGHTMAP' : '', parameters.aoMap ? '#define USE_AOMAP' : '', parameters.emissiveMap ? '#define USE_EMISSIVEMAP' : '', parameters.bumpMap ? '#define USE_BUMPMAP' : '', parameters.normalMap ? '#define USE_NORMALMAP' : '', parameters.normalMap && parameters.objectSpaceNormalMap ? '#define OBJECTSPACE_NORMALMAP' : '', parameters.normalMap && parameters.tangentSpaceNormalMap ? '#define TANGENTSPACE_NORMALMAP' : '', parameters.clearcoatMap ? '#define USE_CLEARCOATMAP' : '', parameters.clearcoatRoughnessMap ? '#define USE_CLEARCOAT_ROUGHNESSMAP' : '', parameters.clearcoatNormalMap ? '#define USE_CLEARCOAT_NORMALMAP' : '', parameters.displacementMap && parameters.supportsVertexTextures ? '#define USE_DISPLACEMENTMAP' : '', parameters.specularMap ? '#define USE_SPECULARMAP' : '', parameters.specularIntensityMap ? '#define USE_SPECULARINTENSITYMAP' : '', parameters.specularColorMap ? '#define USE_SPECULARCOLORMAP' : '', parameters.roughnessMap ? '#define USE_ROUGHNESSMAP' : '', parameters.metalnessMap ? '#define USE_METALNESSMAP' : '', parameters.alphaMap ? '#define USE_ALPHAMAP' : '', parameters.transmission ? '#define USE_TRANSMISSION' : '', parameters.transmissionMap ? '#define USE_TRANSMISSIONMAP' : '', parameters.thicknessMap ? '#define USE_THICKNESSMAP' : '', parameters.sheenColorMap ? '#define USE_SHEENCOLORMAP' : '', parameters.sheenRoughnessMap ? '#define USE_SHEENROUGHNESSMAP' : '', parameters.vertexTangents ? '#define USE_TANGENT' : '', parameters.vertexColors ? '#define USE_COLOR' : '', parameters.vertexAlphas ? '#define USE_COLOR_ALPHA' : '', parameters.vertexUvs ? '#define USE_UV' : '', parameters.uvsVertexOnly ? '#define UVS_VERTEX_ONLY' : '', parameters.flatShading ? '#define FLAT_SHADED' : '', parameters.skinning ? '#define USE_SKINNING' : '', parameters.morphTargets ? '#define USE_MORPHTARGETS' : '', parameters.morphNormals && parameters.flatShading === false ? '#define USE_MORPHNORMALS' : '', parameters.morphColors && parameters.isWebGL2 ? '#define USE_MORPHCOLORS' : '', parameters.morphTargetsCount > 0 && parameters.isWebGL2 ? '#define MORPHTARGETS_TEXTURE' : '', parameters.morphTargetsCount > 0 && parameters.isWebGL2 ? '#define MORPHTARGETS_TEXTURE_STRIDE ' + parameters.morphTextureStride : '', parameters.morphTargetsCount > 0 && parameters.isWebGL2 ? '#define MORPHTARGETS_COUNT ' + parameters.morphTargetsCount : '', parameters.doubleSided ? '#define DOUBLE_SIDED' : '', parameters.flipSided ? '#define FLIP_SIDED' : '', parameters.shadowMapEnabled ? '#define USE_SHADOWMAP' : '', parameters.shadowMapEnabled ? '#define ' + shadowMapTypeDefine : '', parameters.sizeAttenuation ? '#define USE_SIZEATTENUATION' : '', parameters.logarithmicDepthBuffer ? '#define USE_LOGDEPTHBUF' : '', parameters.logarithmicDepthBuffer && parameters.rendererExtensionFragDepth ? '#define USE_LOGDEPTHBUF_EXT' : '', 'uniform mat4 modelMatrix;', 'uniform mat4 modelViewMatrix;', 'uniform mat4 projectionMatrix;', 'uniform mat4 viewMatrix;', 'uniform mat3 normalMatrix;', 'uniform vec3 cameraPosition;', 'uniform bool isOrthographic;', '#ifdef USE_INSTANCING', ' attribute mat4 instanceMatrix;', '#endif', '#ifdef USE_INSTANCING_COLOR', ' attribute vec3 instanceColor;', '#endif', 'attribute vec3 position;', 'attribute vec3 normal;', 'attribute vec2 uv;', '#ifdef USE_TANGENT', ' attribute vec4 tangent;', '#endif', '#if defined( USE_COLOR_ALPHA )', ' attribute vec4 color;', '#elif defined( USE_COLOR )', ' attribute vec3 color;', '#endif', '#if ( defined( USE_MORPHTARGETS ) && ! defined( MORPHTARGETS_TEXTURE ) )', ' attribute vec3 morphTarget0;', ' attribute vec3 morphTarget1;', ' attribute vec3 morphTarget2;', ' attribute vec3 morphTarget3;', ' #ifdef USE_MORPHNORMALS', ' attribute vec3 morphNormal0;', ' attribute vec3 morphNormal1;', ' attribute vec3 morphNormal2;', ' attribute vec3 morphNormal3;', ' #else', ' attribute vec3 morphTarget4;', ' attribute vec3 morphTarget5;', ' attribute vec3 morphTarget6;', ' attribute vec3 morphTarget7;', ' #endif', '#endif', '#ifdef USE_SKINNING', ' attribute vec4 skinIndex;', ' attribute vec4 skinWeight;', '#endif', '\n'].filter(filterEmptyLine).join('\n'); - prefixFragment = [customExtensions, generatePrecision(parameters), '#define SHADER_NAME ' + parameters.shaderName, customDefines, parameters.useFog && parameters.fog ? '#define USE_FOG' : '', parameters.useFog && parameters.fogExp2 ? '#define FOG_EXP2' : '', parameters.map ? '#define USE_MAP' : '', parameters.matcap ? '#define USE_MATCAP' : '', parameters.envMap ? '#define USE_ENVMAP' : '', parameters.envMap ? '#define ' + envMapTypeDefine : '', parameters.envMap ? '#define ' + envMapModeDefine : '', parameters.envMap ? '#define ' + envMapBlendingDefine : '', envMapCubeUVSize ? '#define CUBEUV_TEXEL_WIDTH ' + envMapCubeUVSize.texelWidth : '', envMapCubeUVSize ? '#define CUBEUV_TEXEL_HEIGHT ' + envMapCubeUVSize.texelHeight : '', envMapCubeUVSize ? '#define CUBEUV_MAX_MIP ' + envMapCubeUVSize.maxMip + '.0' : '', parameters.lightMap ? '#define USE_LIGHTMAP' : '', parameters.aoMap ? '#define USE_AOMAP' : '', parameters.emissiveMap ? '#define USE_EMISSIVEMAP' : '', parameters.bumpMap ? '#define USE_BUMPMAP' : '', parameters.normalMap ? '#define USE_NORMALMAP' : '', parameters.normalMap && parameters.objectSpaceNormalMap ? '#define OBJECTSPACE_NORMALMAP' : '', parameters.normalMap && parameters.tangentSpaceNormalMap ? '#define TANGENTSPACE_NORMALMAP' : '', parameters.clearcoat ? '#define USE_CLEARCOAT' : '', parameters.clearcoatMap ? '#define USE_CLEARCOATMAP' : '', parameters.clearcoatRoughnessMap ? '#define USE_CLEARCOAT_ROUGHNESSMAP' : '', parameters.clearcoatNormalMap ? '#define USE_CLEARCOAT_NORMALMAP' : '', parameters.specularMap ? '#define USE_SPECULARMAP' : '', parameters.specularIntensityMap ? '#define USE_SPECULARINTENSITYMAP' : '', parameters.specularColorMap ? '#define USE_SPECULARCOLORMAP' : '', parameters.roughnessMap ? '#define USE_ROUGHNESSMAP' : '', parameters.metalnessMap ? '#define USE_METALNESSMAP' : '', parameters.alphaMap ? '#define USE_ALPHAMAP' : '', parameters.alphaTest ? '#define USE_ALPHATEST' : '', parameters.sheen ? '#define USE_SHEEN' : '', parameters.sheenColorMap ? '#define USE_SHEENCOLORMAP' : '', parameters.sheenRoughnessMap ? '#define USE_SHEENROUGHNESSMAP' : '', parameters.transmission ? '#define USE_TRANSMISSION' : '', parameters.transmissionMap ? '#define USE_TRANSMISSIONMAP' : '', parameters.thicknessMap ? '#define USE_THICKNESSMAP' : '', parameters.decodeVideoTexture ? '#define DECODE_VIDEO_TEXTURE' : '', parameters.vertexTangents ? '#define USE_TANGENT' : '', parameters.vertexColors || parameters.instancingColor ? '#define USE_COLOR' : '', parameters.vertexAlphas ? '#define USE_COLOR_ALPHA' : '', parameters.vertexUvs ? '#define USE_UV' : '', parameters.uvsVertexOnly ? '#define UVS_VERTEX_ONLY' : '', parameters.gradientMap ? '#define USE_GRADIENTMAP' : '', parameters.flatShading ? '#define FLAT_SHADED' : '', parameters.doubleSided ? '#define DOUBLE_SIDED' : '', parameters.flipSided ? '#define FLIP_SIDED' : '', parameters.shadowMapEnabled ? '#define USE_SHADOWMAP' : '', parameters.shadowMapEnabled ? '#define ' + shadowMapTypeDefine : '', parameters.premultipliedAlpha ? '#define PREMULTIPLIED_ALPHA' : '', parameters.physicallyCorrectLights ? '#define PHYSICALLY_CORRECT_LIGHTS' : '', parameters.logarithmicDepthBuffer ? '#define USE_LOGDEPTHBUF' : '', parameters.logarithmicDepthBuffer && parameters.rendererExtensionFragDepth ? '#define USE_LOGDEPTHBUF_EXT' : '', 'uniform mat4 viewMatrix;', 'uniform vec3 cameraPosition;', 'uniform bool isOrthographic;', parameters.toneMapping !== NoToneMapping ? '#define TONE_MAPPING' : '', parameters.toneMapping !== NoToneMapping ? ShaderChunk['tonemapping_pars_fragment'] : '', // this code is required here because it is used by the toneMapping() function defined below - parameters.toneMapping !== NoToneMapping ? getToneMappingFunction('toneMapping', parameters.toneMapping) : '', parameters.dithering ? '#define DITHERING' : '', parameters.opaque ? '#define OPAQUE' : '', ShaderChunk['encodings_pars_fragment'], // this code is required here because it is used by the various encoding/decoding function defined below - getTexelEncodingFunction('linearToOutputTexel', parameters.outputEncoding), parameters.useDepthPacking ? '#define DEPTH_PACKING ' + parameters.depthPacking : '', '\n'].filter(filterEmptyLine).join('\n'); - } - - vertexShader = resolveIncludes(vertexShader); - vertexShader = replaceLightNums(vertexShader, parameters); - vertexShader = replaceClippingPlaneNums(vertexShader, parameters); - fragmentShader = resolveIncludes(fragmentShader); - fragmentShader = replaceLightNums(fragmentShader, parameters); - fragmentShader = replaceClippingPlaneNums(fragmentShader, parameters); - vertexShader = unrollLoops(vertexShader); - fragmentShader = unrollLoops(fragmentShader); - - if (parameters.isWebGL2 && parameters.isRawShaderMaterial !== true) { - // GLSL 3.0 conversion for built-in materials and ShaderMaterial - versionString = '#version 300 es\n'; - prefixVertex = ['precision mediump sampler2DArray;', '#define attribute in', '#define varying out', '#define texture2D texture'].join('\n') + '\n' + prefixVertex; - prefixFragment = ['#define varying in', parameters.glslVersion === GLSL3 ? '' : 'layout(location = 0) out highp vec4 pc_fragColor;', parameters.glslVersion === GLSL3 ? '' : '#define gl_FragColor pc_fragColor', '#define gl_FragDepthEXT gl_FragDepth', '#define texture2D texture', '#define textureCube texture', '#define texture2DProj textureProj', '#define texture2DLodEXT textureLod', '#define texture2DProjLodEXT textureProjLod', '#define textureCubeLodEXT textureLod', '#define texture2DGradEXT textureGrad', '#define texture2DProjGradEXT textureProjGrad', '#define textureCubeGradEXT textureGrad'].join('\n') + '\n' + prefixFragment; - } - - const vertexGlsl = versionString + prefixVertex + vertexShader; - const fragmentGlsl = versionString + prefixFragment + fragmentShader; // console.log( '*VERTEX*', vertexGlsl ); - // console.log( '*FRAGMENT*', fragmentGlsl ); - - const glVertexShader = WebGLShader(gl, gl.VERTEX_SHADER, vertexGlsl); - const glFragmentShader = WebGLShader(gl, gl.FRAGMENT_SHADER, fragmentGlsl); - gl.attachShader(program, glVertexShader); - gl.attachShader(program, glFragmentShader); // Force a particular attribute to index 0. - - if (parameters.index0AttributeName !== undefined) { - gl.bindAttribLocation(program, 0, parameters.index0AttributeName); - } else if (parameters.morphTargets === true) { - // programs with morphTargets displace position out of attribute 0 - gl.bindAttribLocation(program, 0, 'position'); - } - - gl.linkProgram(program); // check for link errors - - if (renderer.debug.checkShaderErrors) { - const programLog = gl.getProgramInfoLog(program).trim(); - const vertexLog = gl.getShaderInfoLog(glVertexShader).trim(); - const fragmentLog = gl.getShaderInfoLog(glFragmentShader).trim(); - let runnable = true; - let haveDiagnostics = true; - - if (gl.getProgramParameter(program, gl.LINK_STATUS) === false) { - runnable = false; - const vertexErrors = getShaderErrors(gl, glVertexShader, 'vertex'); - const fragmentErrors = getShaderErrors(gl, glFragmentShader, 'fragment'); - console.error('THREE.WebGLProgram: Shader Error ' + gl.getError() + ' - ' + 'VALIDATE_STATUS ' + gl.getProgramParameter(program, gl.VALIDATE_STATUS) + '\n\n' + 'Program Info Log: ' + programLog + '\n' + vertexErrors + '\n' + fragmentErrors); - } else if (programLog !== '') { - console.warn('THREE.WebGLProgram: Program Info Log:', programLog); - } else if (vertexLog === '' || fragmentLog === '') { - haveDiagnostics = false; - } - - if (haveDiagnostics) { - this.diagnostics = { - runnable: runnable, - programLog: programLog, - vertexShader: { - log: vertexLog, - prefix: prefixVertex - }, - fragmentShader: { - log: fragmentLog, - prefix: prefixFragment - } - }; - } - } // Clean up - // Crashes in iOS9 and iOS10. #18402 - // gl.detachShader( program, glVertexShader ); - // gl.detachShader( program, glFragmentShader ); - - - gl.deleteShader(glVertexShader); - gl.deleteShader(glFragmentShader); // set up caching for uniform locations - - let cachedUniforms; - - this.getUniforms = function () { - if (cachedUniforms === undefined) { - cachedUniforms = new WebGLUniforms(gl, program); - } - - return cachedUniforms; - }; // set up caching for attribute locations - - - let cachedAttributes; - - this.getAttributes = function () { - if (cachedAttributes === undefined) { - cachedAttributes = fetchAttributeLocations(gl, program); - } - - return cachedAttributes; - }; // free resource - - - this.destroy = function () { - bindingStates.releaseStatesOfProgram(this); - gl.deleteProgram(program); - this.program = undefined; - }; // - - - this.name = parameters.shaderName; - this.id = programIdCount++; - this.cacheKey = cacheKey; - this.usedTimes = 1; - this.program = program; - this.vertexShader = glVertexShader; - this.fragmentShader = glFragmentShader; - return this; - } - - let _id = 0; - - class WebGLShaderCache { - constructor() { - this.shaderCache = new Map(); - this.materialCache = new Map(); - } - - update(material) { - const vertexShader = material.vertexShader; - const fragmentShader = material.fragmentShader; - - const vertexShaderStage = this._getShaderStage(vertexShader); - - const fragmentShaderStage = this._getShaderStage(fragmentShader); - - const materialShaders = this._getShaderCacheForMaterial(material); - - if (materialShaders.has(vertexShaderStage) === false) { - materialShaders.add(vertexShaderStage); - vertexShaderStage.usedTimes++; - } - - if (materialShaders.has(fragmentShaderStage) === false) { - materialShaders.add(fragmentShaderStage); - fragmentShaderStage.usedTimes++; - } - - return this; - } - - remove(material) { - const materialShaders = this.materialCache.get(material); - - for (const shaderStage of materialShaders) { - shaderStage.usedTimes--; - if (shaderStage.usedTimes === 0) this.shaderCache.delete(shaderStage.code); - } - - this.materialCache.delete(material); - return this; - } - - getVertexShaderID(material) { - return this._getShaderStage(material.vertexShader).id; - } - - getFragmentShaderID(material) { - return this._getShaderStage(material.fragmentShader).id; - } - - dispose() { - this.shaderCache.clear(); - this.materialCache.clear(); - } - - _getShaderCacheForMaterial(material) { - const cache = this.materialCache; - - if (cache.has(material) === false) { - cache.set(material, new Set()); - } - - return cache.get(material); - } - - _getShaderStage(code) { - const cache = this.shaderCache; - - if (cache.has(code) === false) { - const stage = new WebGLShaderStage(code); - cache.set(code, stage); - } - - return cache.get(code); - } - - } - - class WebGLShaderStage { - constructor(code) { - this.id = _id++; - this.code = code; - this.usedTimes = 0; - } - - } - - function WebGLPrograms(renderer, cubemaps, cubeuvmaps, extensions, capabilities, bindingStates, clipping) { - const _programLayers = new Layers(); - - const _customShaders = new WebGLShaderCache(); - - const programs = []; - const isWebGL2 = capabilities.isWebGL2; - const logarithmicDepthBuffer = capabilities.logarithmicDepthBuffer; - const vertexTextures = capabilities.vertexTextures; - let precision = capabilities.precision; - const shaderIDs = { - MeshDepthMaterial: 'depth', - MeshDistanceMaterial: 'distanceRGBA', - MeshNormalMaterial: 'normal', - MeshBasicMaterial: 'basic', - MeshLambertMaterial: 'lambert', - MeshPhongMaterial: 'phong', - MeshToonMaterial: 'toon', - MeshStandardMaterial: 'physical', - MeshPhysicalMaterial: 'physical', - MeshMatcapMaterial: 'matcap', - LineBasicMaterial: 'basic', - LineDashedMaterial: 'dashed', - PointsMaterial: 'points', - ShadowMaterial: 'shadow', - SpriteMaterial: 'sprite' - }; - - function getParameters(material, lights, shadows, scene, object) { - const fog = scene.fog; - const geometry = object.geometry; - const environment = material.isMeshStandardMaterial ? scene.environment : null; - const envMap = (material.isMeshStandardMaterial ? cubeuvmaps : cubemaps).get(material.envMap || environment); - const envMapCubeUVHeight = !!envMap && envMap.mapping === CubeUVReflectionMapping ? envMap.image.height : null; - const shaderID = shaderIDs[material.type]; // heuristics to create shader parameters according to lights in the scene - // (not to blow over maxLights budget) - - if (material.precision !== null) { - precision = capabilities.getMaxPrecision(material.precision); - - if (precision !== material.precision) { - console.warn('THREE.WebGLProgram.getParameters:', material.precision, 'not supported, using', precision, 'instead.'); - } - } // - - - const morphAttribute = geometry.morphAttributes.position || geometry.morphAttributes.normal || geometry.morphAttributes.color; - const morphTargetsCount = morphAttribute !== undefined ? morphAttribute.length : 0; - let morphTextureStride = 0; - if (geometry.morphAttributes.position !== undefined) morphTextureStride = 1; - if (geometry.morphAttributes.normal !== undefined) morphTextureStride = 2; - if (geometry.morphAttributes.color !== undefined) morphTextureStride = 3; // - - let vertexShader, fragmentShader; - let customVertexShaderID, customFragmentShaderID; - - if (shaderID) { - const shader = ShaderLib[shaderID]; - vertexShader = shader.vertexShader; - fragmentShader = shader.fragmentShader; - } else { - vertexShader = material.vertexShader; - fragmentShader = material.fragmentShader; - - _customShaders.update(material); - - customVertexShaderID = _customShaders.getVertexShaderID(material); - customFragmentShaderID = _customShaders.getFragmentShaderID(material); - } - - const currentRenderTarget = renderer.getRenderTarget(); - const useAlphaTest = material.alphaTest > 0; - const useClearcoat = material.clearcoat > 0; - const parameters = { - isWebGL2: isWebGL2, - shaderID: shaderID, - shaderName: material.type, - vertexShader: vertexShader, - fragmentShader: fragmentShader, - defines: material.defines, - customVertexShaderID: customVertexShaderID, - customFragmentShaderID: customFragmentShaderID, - isRawShaderMaterial: material.isRawShaderMaterial === true, - glslVersion: material.glslVersion, - precision: precision, - instancing: object.isInstancedMesh === true, - instancingColor: object.isInstancedMesh === true && object.instanceColor !== null, - supportsVertexTextures: vertexTextures, - outputEncoding: currentRenderTarget === null ? renderer.outputEncoding : currentRenderTarget.isXRRenderTarget === true ? currentRenderTarget.texture.encoding : LinearEncoding, - map: !!material.map, - matcap: !!material.matcap, - envMap: !!envMap, - envMapMode: envMap && envMap.mapping, - envMapCubeUVHeight: envMapCubeUVHeight, - lightMap: !!material.lightMap, - aoMap: !!material.aoMap, - emissiveMap: !!material.emissiveMap, - bumpMap: !!material.bumpMap, - normalMap: !!material.normalMap, - objectSpaceNormalMap: material.normalMapType === ObjectSpaceNormalMap, - tangentSpaceNormalMap: material.normalMapType === TangentSpaceNormalMap, - decodeVideoTexture: !!material.map && material.map.isVideoTexture === true && material.map.encoding === sRGBEncoding, - clearcoat: useClearcoat, - clearcoatMap: useClearcoat && !!material.clearcoatMap, - clearcoatRoughnessMap: useClearcoat && !!material.clearcoatRoughnessMap, - clearcoatNormalMap: useClearcoat && !!material.clearcoatNormalMap, - displacementMap: !!material.displacementMap, - roughnessMap: !!material.roughnessMap, - metalnessMap: !!material.metalnessMap, - specularMap: !!material.specularMap, - specularIntensityMap: !!material.specularIntensityMap, - specularColorMap: !!material.specularColorMap, - opaque: material.transparent === false && material.blending === NormalBlending, - alphaMap: !!material.alphaMap, - alphaTest: useAlphaTest, - gradientMap: !!material.gradientMap, - sheen: material.sheen > 0, - sheenColorMap: !!material.sheenColorMap, - sheenRoughnessMap: !!material.sheenRoughnessMap, - transmission: material.transmission > 0, - transmissionMap: !!material.transmissionMap, - thicknessMap: !!material.thicknessMap, - combine: material.combine, - vertexTangents: !!material.normalMap && !!geometry.attributes.tangent, - vertexColors: material.vertexColors, - vertexAlphas: material.vertexColors === true && !!geometry.attributes.color && geometry.attributes.color.itemSize === 4, - vertexUvs: !!material.map || !!material.bumpMap || !!material.normalMap || !!material.specularMap || !!material.alphaMap || !!material.emissiveMap || !!material.roughnessMap || !!material.metalnessMap || !!material.clearcoatMap || !!material.clearcoatRoughnessMap || !!material.clearcoatNormalMap || !!material.displacementMap || !!material.transmissionMap || !!material.thicknessMap || !!material.specularIntensityMap || !!material.specularColorMap || !!material.sheenColorMap || !!material.sheenRoughnessMap, - uvsVertexOnly: !(!!material.map || !!material.bumpMap || !!material.normalMap || !!material.specularMap || !!material.alphaMap || !!material.emissiveMap || !!material.roughnessMap || !!material.metalnessMap || !!material.clearcoatNormalMap || material.transmission > 0 || !!material.transmissionMap || !!material.thicknessMap || !!material.specularIntensityMap || !!material.specularColorMap || material.sheen > 0 || !!material.sheenColorMap || !!material.sheenRoughnessMap) && !!material.displacementMap, - fog: !!fog, - useFog: material.fog === true, - fogExp2: fog && fog.isFogExp2, - flatShading: !!material.flatShading, - sizeAttenuation: material.sizeAttenuation, - logarithmicDepthBuffer: logarithmicDepthBuffer, - skinning: object.isSkinnedMesh === true, - morphTargets: geometry.morphAttributes.position !== undefined, - morphNormals: geometry.morphAttributes.normal !== undefined, - morphColors: geometry.morphAttributes.color !== undefined, - morphTargetsCount: morphTargetsCount, - morphTextureStride: morphTextureStride, - numDirLights: lights.directional.length, - numPointLights: lights.point.length, - numSpotLights: lights.spot.length, - numRectAreaLights: lights.rectArea.length, - numHemiLights: lights.hemi.length, - numDirLightShadows: lights.directionalShadowMap.length, - numPointLightShadows: lights.pointShadowMap.length, - numSpotLightShadows: lights.spotShadowMap.length, - numClippingPlanes: clipping.numPlanes, - numClipIntersection: clipping.numIntersection, - dithering: material.dithering, - shadowMapEnabled: renderer.shadowMap.enabled && shadows.length > 0, - shadowMapType: renderer.shadowMap.type, - toneMapping: material.toneMapped ? renderer.toneMapping : NoToneMapping, - physicallyCorrectLights: renderer.physicallyCorrectLights, - premultipliedAlpha: material.premultipliedAlpha, - doubleSided: material.side === DoubleSide, - flipSided: material.side === BackSide, - useDepthPacking: !!material.depthPacking, - depthPacking: material.depthPacking || 0, - index0AttributeName: material.index0AttributeName, - extensionDerivatives: material.extensions && material.extensions.derivatives, - extensionFragDepth: material.extensions && material.extensions.fragDepth, - extensionDrawBuffers: material.extensions && material.extensions.drawBuffers, - extensionShaderTextureLOD: material.extensions && material.extensions.shaderTextureLOD, - rendererExtensionFragDepth: isWebGL2 || extensions.has('EXT_frag_depth'), - rendererExtensionDrawBuffers: isWebGL2 || extensions.has('WEBGL_draw_buffers'), - rendererExtensionShaderTextureLod: isWebGL2 || extensions.has('EXT_shader_texture_lod'), - customProgramCacheKey: material.customProgramCacheKey() - }; - return parameters; - } - - function getProgramCacheKey(parameters) { - const array = []; - - if (parameters.shaderID) { - array.push(parameters.shaderID); - } else { - array.push(parameters.customVertexShaderID); - array.push(parameters.customFragmentShaderID); - } - - if (parameters.defines !== undefined) { - for (const name in parameters.defines) { - array.push(name); - array.push(parameters.defines[name]); - } - } - - if (parameters.isRawShaderMaterial === false) { - getProgramCacheKeyParameters(array, parameters); - getProgramCacheKeyBooleans(array, parameters); - array.push(renderer.outputEncoding); - } - - array.push(parameters.customProgramCacheKey); - return array.join(); - } - - function getProgramCacheKeyParameters(array, parameters) { - array.push(parameters.precision); - array.push(parameters.outputEncoding); - array.push(parameters.envMapMode); - array.push(parameters.envMapCubeUVHeight); - array.push(parameters.combine); - array.push(parameters.vertexUvs); - array.push(parameters.fogExp2); - array.push(parameters.sizeAttenuation); - array.push(parameters.morphTargetsCount); - array.push(parameters.morphAttributeCount); - array.push(parameters.numDirLights); - array.push(parameters.numPointLights); - array.push(parameters.numSpotLights); - array.push(parameters.numHemiLights); - array.push(parameters.numRectAreaLights); - array.push(parameters.numDirLightShadows); - array.push(parameters.numPointLightShadows); - array.push(parameters.numSpotLightShadows); - array.push(parameters.shadowMapType); - array.push(parameters.toneMapping); - array.push(parameters.numClippingPlanes); - array.push(parameters.numClipIntersection); - array.push(parameters.depthPacking); - } - - function getProgramCacheKeyBooleans(array, parameters) { - _programLayers.disableAll(); - - if (parameters.isWebGL2) _programLayers.enable(0); - if (parameters.supportsVertexTextures) _programLayers.enable(1); - if (parameters.instancing) _programLayers.enable(2); - if (parameters.instancingColor) _programLayers.enable(3); - if (parameters.map) _programLayers.enable(4); - if (parameters.matcap) _programLayers.enable(5); - if (parameters.envMap) _programLayers.enable(6); - if (parameters.lightMap) _programLayers.enable(7); - if (parameters.aoMap) _programLayers.enable(8); - if (parameters.emissiveMap) _programLayers.enable(9); - if (parameters.bumpMap) _programLayers.enable(10); - if (parameters.normalMap) _programLayers.enable(11); - if (parameters.objectSpaceNormalMap) _programLayers.enable(12); - if (parameters.tangentSpaceNormalMap) _programLayers.enable(13); - if (parameters.clearcoat) _programLayers.enable(14); - if (parameters.clearcoatMap) _programLayers.enable(15); - if (parameters.clearcoatRoughnessMap) _programLayers.enable(16); - if (parameters.clearcoatNormalMap) _programLayers.enable(17); - if (parameters.displacementMap) _programLayers.enable(18); - if (parameters.specularMap) _programLayers.enable(19); - if (parameters.roughnessMap) _programLayers.enable(20); - if (parameters.metalnessMap) _programLayers.enable(21); - if (parameters.gradientMap) _programLayers.enable(22); - if (parameters.alphaMap) _programLayers.enable(23); - if (parameters.alphaTest) _programLayers.enable(24); - if (parameters.vertexColors) _programLayers.enable(25); - if (parameters.vertexAlphas) _programLayers.enable(26); - if (parameters.vertexUvs) _programLayers.enable(27); - if (parameters.vertexTangents) _programLayers.enable(28); - if (parameters.uvsVertexOnly) _programLayers.enable(29); - if (parameters.fog) _programLayers.enable(30); - array.push(_programLayers.mask); - - _programLayers.disableAll(); - - if (parameters.useFog) _programLayers.enable(0); - if (parameters.flatShading) _programLayers.enable(1); - if (parameters.logarithmicDepthBuffer) _programLayers.enable(2); - if (parameters.skinning) _programLayers.enable(3); - if (parameters.morphTargets) _programLayers.enable(4); - if (parameters.morphNormals) _programLayers.enable(5); - if (parameters.morphColors) _programLayers.enable(6); - if (parameters.premultipliedAlpha) _programLayers.enable(7); - if (parameters.shadowMapEnabled) _programLayers.enable(8); - if (parameters.physicallyCorrectLights) _programLayers.enable(9); - if (parameters.doubleSided) _programLayers.enable(10); - if (parameters.flipSided) _programLayers.enable(11); - if (parameters.useDepthPacking) _programLayers.enable(12); - if (parameters.dithering) _programLayers.enable(13); - if (parameters.specularIntensityMap) _programLayers.enable(14); - if (parameters.specularColorMap) _programLayers.enable(15); - if (parameters.transmission) _programLayers.enable(16); - if (parameters.transmissionMap) _programLayers.enable(17); - if (parameters.thicknessMap) _programLayers.enable(18); - if (parameters.sheen) _programLayers.enable(19); - if (parameters.sheenColorMap) _programLayers.enable(20); - if (parameters.sheenRoughnessMap) _programLayers.enable(21); - if (parameters.decodeVideoTexture) _programLayers.enable(22); - if (parameters.opaque) _programLayers.enable(23); - array.push(_programLayers.mask); - } - - function getUniforms(material) { - const shaderID = shaderIDs[material.type]; - let uniforms; - - if (shaderID) { - const shader = ShaderLib[shaderID]; - uniforms = UniformsUtils.clone(shader.uniforms); - } else { - uniforms = material.uniforms; - } - - return uniforms; - } - - function acquireProgram(parameters, cacheKey) { - let program; // Check if code has been already compiled - - for (let p = 0, pl = programs.length; p < pl; p++) { - const preexistingProgram = programs[p]; - - if (preexistingProgram.cacheKey === cacheKey) { - program = preexistingProgram; - ++program.usedTimes; - break; - } - } - - if (program === undefined) { - program = new WebGLProgram(renderer, cacheKey, parameters, bindingStates); - programs.push(program); - } - - return program; - } - - function releaseProgram(program) { - if (--program.usedTimes === 0) { - // Remove from unordered set - const i = programs.indexOf(program); - programs[i] = programs[programs.length - 1]; - programs.pop(); // Free WebGL resources - - program.destroy(); - } - } - - function releaseShaderCache(material) { - _customShaders.remove(material); - } - - function dispose() { - _customShaders.dispose(); - } - - return { - getParameters: getParameters, - getProgramCacheKey: getProgramCacheKey, - getUniforms: getUniforms, - acquireProgram: acquireProgram, - releaseProgram: releaseProgram, - releaseShaderCache: releaseShaderCache, - // Exposed for resource monitoring & error feedback via renderer.info: - programs: programs, - dispose: dispose - }; - } - - function WebGLProperties() { - let properties = new WeakMap(); - - function get(object) { - let map = properties.get(object); - - if (map === undefined) { - map = {}; - properties.set(object, map); - } - - return map; - } - - function remove(object) { - properties.delete(object); - } - - function update(object, key, value) { - properties.get(object)[key] = value; - } - - function dispose() { - properties = new WeakMap(); - } - - return { - get: get, - remove: remove, - update: update, - dispose: dispose - }; - } - - function painterSortStable(a, b) { - if (a.groupOrder !== b.groupOrder) { - return a.groupOrder - b.groupOrder; - } else if (a.renderOrder !== b.renderOrder) { - return a.renderOrder - b.renderOrder; - } else if (a.material.id !== b.material.id) { - return a.material.id - b.material.id; - } else if (a.z !== b.z) { - return a.z - b.z; - } else { - return a.id - b.id; - } - } - - function reversePainterSortStable(a, b) { - if (a.groupOrder !== b.groupOrder) { - return a.groupOrder - b.groupOrder; - } else if (a.renderOrder !== b.renderOrder) { - return a.renderOrder - b.renderOrder; - } else if (a.z !== b.z) { - return b.z - a.z; - } else { - return a.id - b.id; - } - } - - function WebGLRenderList() { - const renderItems = []; - let renderItemsIndex = 0; - const opaque = []; - const transmissive = []; - const transparent = []; - - function init() { - renderItemsIndex = 0; - opaque.length = 0; - transmissive.length = 0; - transparent.length = 0; - } - - function getNextRenderItem(object, geometry, material, groupOrder, z, group) { - let renderItem = renderItems[renderItemsIndex]; - - if (renderItem === undefined) { - renderItem = { - id: object.id, - object: object, - geometry: geometry, - material: material, - groupOrder: groupOrder, - renderOrder: object.renderOrder, - z: z, - group: group - }; - renderItems[renderItemsIndex] = renderItem; - } else { - renderItem.id = object.id; - renderItem.object = object; - renderItem.geometry = geometry; - renderItem.material = material; - renderItem.groupOrder = groupOrder; - renderItem.renderOrder = object.renderOrder; - renderItem.z = z; - renderItem.group = group; - } - - renderItemsIndex++; - return renderItem; - } - - function push(object, geometry, material, groupOrder, z, group) { - const renderItem = getNextRenderItem(object, geometry, material, groupOrder, z, group); - - if (material.transmission > 0.0) { - transmissive.push(renderItem); - } else if (material.transparent === true) { - transparent.push(renderItem); - } else { - opaque.push(renderItem); - } - } - - function unshift(object, geometry, material, groupOrder, z, group) { - const renderItem = getNextRenderItem(object, geometry, material, groupOrder, z, group); - - if (material.transmission > 0.0) { - transmissive.unshift(renderItem); - } else if (material.transparent === true) { - transparent.unshift(renderItem); - } else { - opaque.unshift(renderItem); - } - } - - function sort(customOpaqueSort, customTransparentSort) { - if (opaque.length > 1) opaque.sort(customOpaqueSort || painterSortStable); - if (transmissive.length > 1) transmissive.sort(customTransparentSort || reversePainterSortStable); - if (transparent.length > 1) transparent.sort(customTransparentSort || reversePainterSortStable); - } - - function finish() { - // Clear references from inactive renderItems in the list - for (let i = renderItemsIndex, il = renderItems.length; i < il; i++) { - const renderItem = renderItems[i]; - if (renderItem.id === null) break; - renderItem.id = null; - renderItem.object = null; - renderItem.geometry = null; - renderItem.material = null; - renderItem.group = null; - } - } - - return { - opaque: opaque, - transmissive: transmissive, - transparent: transparent, - init: init, - push: push, - unshift: unshift, - finish: finish, - sort: sort - }; - } - - function WebGLRenderLists() { - let lists = new WeakMap(); - - function get(scene, renderCallDepth) { - let list; - - if (lists.has(scene) === false) { - list = new WebGLRenderList(); - lists.set(scene, [list]); - } else { - if (renderCallDepth >= lists.get(scene).length) { - list = new WebGLRenderList(); - lists.get(scene).push(list); - } else { - list = lists.get(scene)[renderCallDepth]; - } - } - - return list; - } - - function dispose() { - lists = new WeakMap(); - } - - return { - get: get, - dispose: dispose - }; - } - - function UniformsCache() { - const lights = {}; - return { - get: function (light) { - if (lights[light.id] !== undefined) { - return lights[light.id]; - } - - let uniforms; - - switch (light.type) { - case 'DirectionalLight': - uniforms = { - direction: new Vector3(), - color: new Color() - }; - break; - - case 'SpotLight': - uniforms = { - position: new Vector3(), - direction: new Vector3(), - color: new Color(), - distance: 0, - coneCos: 0, - penumbraCos: 0, - decay: 0 - }; - break; - - case 'PointLight': - uniforms = { - position: new Vector3(), - color: new Color(), - distance: 0, - decay: 0 - }; - break; - - case 'HemisphereLight': - uniforms = { - direction: new Vector3(), - skyColor: new Color(), - groundColor: new Color() - }; - break; - - case 'RectAreaLight': - uniforms = { - color: new Color(), - position: new Vector3(), - halfWidth: new Vector3(), - halfHeight: new Vector3() - }; - break; - } - - lights[light.id] = uniforms; - return uniforms; - } - }; - } - - function ShadowUniformsCache() { - const lights = {}; - return { - get: function (light) { - if (lights[light.id] !== undefined) { - return lights[light.id]; - } - - let uniforms; - - switch (light.type) { - case 'DirectionalLight': - uniforms = { - shadowBias: 0, - shadowNormalBias: 0, - shadowRadius: 1, - shadowMapSize: new Vector2() - }; - break; - - case 'SpotLight': - uniforms = { - shadowBias: 0, - shadowNormalBias: 0, - shadowRadius: 1, - shadowMapSize: new Vector2() - }; - break; - - case 'PointLight': - uniforms = { - shadowBias: 0, - shadowNormalBias: 0, - shadowRadius: 1, - shadowMapSize: new Vector2(), - shadowCameraNear: 1, - shadowCameraFar: 1000 - }; - break; - // TODO (abelnation): set RectAreaLight shadow uniforms - } - - lights[light.id] = uniforms; - return uniforms; - } - }; - } - - let nextVersion = 0; - - function shadowCastingLightsFirst(lightA, lightB) { - return (lightB.castShadow ? 1 : 0) - (lightA.castShadow ? 1 : 0); - } - - function WebGLLights(extensions, capabilities) { - const cache = new UniformsCache(); - const shadowCache = ShadowUniformsCache(); - const state = { - version: 0, - hash: { - directionalLength: -1, - pointLength: -1, - spotLength: -1, - rectAreaLength: -1, - hemiLength: -1, - numDirectionalShadows: -1, - numPointShadows: -1, - numSpotShadows: -1 - }, - ambient: [0, 0, 0], - probe: [], - directional: [], - directionalShadow: [], - directionalShadowMap: [], - directionalShadowMatrix: [], - spot: [], - spotShadow: [], - spotShadowMap: [], - spotShadowMatrix: [], - rectArea: [], - rectAreaLTC1: null, - rectAreaLTC2: null, - point: [], - pointShadow: [], - pointShadowMap: [], - pointShadowMatrix: [], - hemi: [] - }; - - for (let i = 0; i < 9; i++) state.probe.push(new Vector3()); - - const vector3 = new Vector3(); - const matrix4 = new Matrix4(); - const matrix42 = new Matrix4(); - - function setup(lights, physicallyCorrectLights) { - let r = 0, - g = 0, - b = 0; - - for (let i = 0; i < 9; i++) state.probe[i].set(0, 0, 0); - - let directionalLength = 0; - let pointLength = 0; - let spotLength = 0; - let rectAreaLength = 0; - let hemiLength = 0; - let numDirectionalShadows = 0; - let numPointShadows = 0; - let numSpotShadows = 0; - lights.sort(shadowCastingLightsFirst); // artist-friendly light intensity scaling factor - - const scaleFactor = physicallyCorrectLights !== true ? Math.PI : 1; - - for (let i = 0, l = lights.length; i < l; i++) { - const light = lights[i]; - const color = light.color; - const intensity = light.intensity; - const distance = light.distance; - const shadowMap = light.shadow && light.shadow.map ? light.shadow.map.texture : null; - - if (light.isAmbientLight) { - r += color.r * intensity * scaleFactor; - g += color.g * intensity * scaleFactor; - b += color.b * intensity * scaleFactor; - } else if (light.isLightProbe) { - for (let j = 0; j < 9; j++) { - state.probe[j].addScaledVector(light.sh.coefficients[j], intensity); - } - } else if (light.isDirectionalLight) { - const uniforms = cache.get(light); - uniforms.color.copy(light.color).multiplyScalar(light.intensity * scaleFactor); - - if (light.castShadow) { - const shadow = light.shadow; - const shadowUniforms = shadowCache.get(light); - shadowUniforms.shadowBias = shadow.bias; - shadowUniforms.shadowNormalBias = shadow.normalBias; - shadowUniforms.shadowRadius = shadow.radius; - shadowUniforms.shadowMapSize = shadow.mapSize; - state.directionalShadow[directionalLength] = shadowUniforms; - state.directionalShadowMap[directionalLength] = shadowMap; - state.directionalShadowMatrix[directionalLength] = light.shadow.matrix; - numDirectionalShadows++; - } - - state.directional[directionalLength] = uniforms; - directionalLength++; - } else if (light.isSpotLight) { - const uniforms = cache.get(light); - uniforms.position.setFromMatrixPosition(light.matrixWorld); - uniforms.color.copy(color).multiplyScalar(intensity * scaleFactor); - uniforms.distance = distance; - uniforms.coneCos = Math.cos(light.angle); - uniforms.penumbraCos = Math.cos(light.angle * (1 - light.penumbra)); - uniforms.decay = light.decay; - - if (light.castShadow) { - const shadow = light.shadow; - const shadowUniforms = shadowCache.get(light); - shadowUniforms.shadowBias = shadow.bias; - shadowUniforms.shadowNormalBias = shadow.normalBias; - shadowUniforms.shadowRadius = shadow.radius; - shadowUniforms.shadowMapSize = shadow.mapSize; - state.spotShadow[spotLength] = shadowUniforms; - state.spotShadowMap[spotLength] = shadowMap; - state.spotShadowMatrix[spotLength] = light.shadow.matrix; - numSpotShadows++; - } - - state.spot[spotLength] = uniforms; - spotLength++; - } else if (light.isRectAreaLight) { - const uniforms = cache.get(light); // (a) intensity is the total visible light emitted - //uniforms.color.copy( color ).multiplyScalar( intensity / ( light.width * light.height * Math.PI ) ); - // (b) intensity is the brightness of the light - - uniforms.color.copy(color).multiplyScalar(intensity); - uniforms.halfWidth.set(light.width * 0.5, 0.0, 0.0); - uniforms.halfHeight.set(0.0, light.height * 0.5, 0.0); - state.rectArea[rectAreaLength] = uniforms; - rectAreaLength++; - } else if (light.isPointLight) { - const uniforms = cache.get(light); - uniforms.color.copy(light.color).multiplyScalar(light.intensity * scaleFactor); - uniforms.distance = light.distance; - uniforms.decay = light.decay; - - if (light.castShadow) { - const shadow = light.shadow; - const shadowUniforms = shadowCache.get(light); - shadowUniforms.shadowBias = shadow.bias; - shadowUniforms.shadowNormalBias = shadow.normalBias; - shadowUniforms.shadowRadius = shadow.radius; - shadowUniforms.shadowMapSize = shadow.mapSize; - shadowUniforms.shadowCameraNear = shadow.camera.near; - shadowUniforms.shadowCameraFar = shadow.camera.far; - state.pointShadow[pointLength] = shadowUniforms; - state.pointShadowMap[pointLength] = shadowMap; - state.pointShadowMatrix[pointLength] = light.shadow.matrix; - numPointShadows++; - } - - state.point[pointLength] = uniforms; - pointLength++; - } else if (light.isHemisphereLight) { - const uniforms = cache.get(light); - uniforms.skyColor.copy(light.color).multiplyScalar(intensity * scaleFactor); - uniforms.groundColor.copy(light.groundColor).multiplyScalar(intensity * scaleFactor); - state.hemi[hemiLength] = uniforms; - hemiLength++; - } - } - - if (rectAreaLength > 0) { - if (capabilities.isWebGL2) { - // WebGL 2 - state.rectAreaLTC1 = UniformsLib.LTC_FLOAT_1; - state.rectAreaLTC2 = UniformsLib.LTC_FLOAT_2; - } else { - // WebGL 1 - if (extensions.has('OES_texture_float_linear') === true) { - state.rectAreaLTC1 = UniformsLib.LTC_FLOAT_1; - state.rectAreaLTC2 = UniformsLib.LTC_FLOAT_2; - } else if (extensions.has('OES_texture_half_float_linear') === true) { - state.rectAreaLTC1 = UniformsLib.LTC_HALF_1; - state.rectAreaLTC2 = UniformsLib.LTC_HALF_2; - } else { - console.error('THREE.WebGLRenderer: Unable to use RectAreaLight. Missing WebGL extensions.'); - } - } - } - - state.ambient[0] = r; - state.ambient[1] = g; - state.ambient[2] = b; - const hash = state.hash; - - if (hash.directionalLength !== directionalLength || hash.pointLength !== pointLength || hash.spotLength !== spotLength || hash.rectAreaLength !== rectAreaLength || hash.hemiLength !== hemiLength || hash.numDirectionalShadows !== numDirectionalShadows || hash.numPointShadows !== numPointShadows || hash.numSpotShadows !== numSpotShadows) { - state.directional.length = directionalLength; - state.spot.length = spotLength; - state.rectArea.length = rectAreaLength; - state.point.length = pointLength; - state.hemi.length = hemiLength; - state.directionalShadow.length = numDirectionalShadows; - state.directionalShadowMap.length = numDirectionalShadows; - state.pointShadow.length = numPointShadows; - state.pointShadowMap.length = numPointShadows; - state.spotShadow.length = numSpotShadows; - state.spotShadowMap.length = numSpotShadows; - state.directionalShadowMatrix.length = numDirectionalShadows; - state.pointShadowMatrix.length = numPointShadows; - state.spotShadowMatrix.length = numSpotShadows; - hash.directionalLength = directionalLength; - hash.pointLength = pointLength; - hash.spotLength = spotLength; - hash.rectAreaLength = rectAreaLength; - hash.hemiLength = hemiLength; - hash.numDirectionalShadows = numDirectionalShadows; - hash.numPointShadows = numPointShadows; - hash.numSpotShadows = numSpotShadows; - state.version = nextVersion++; - } - } - - function setupView(lights, camera) { - let directionalLength = 0; - let pointLength = 0; - let spotLength = 0; - let rectAreaLength = 0; - let hemiLength = 0; - const viewMatrix = camera.matrixWorldInverse; - - for (let i = 0, l = lights.length; i < l; i++) { - const light = lights[i]; - - if (light.isDirectionalLight) { - const uniforms = state.directional[directionalLength]; - uniforms.direction.setFromMatrixPosition(light.matrixWorld); - vector3.setFromMatrixPosition(light.target.matrixWorld); - uniforms.direction.sub(vector3); - uniforms.direction.transformDirection(viewMatrix); - directionalLength++; - } else if (light.isSpotLight) { - const uniforms = state.spot[spotLength]; - uniforms.position.setFromMatrixPosition(light.matrixWorld); - uniforms.position.applyMatrix4(viewMatrix); - uniforms.direction.setFromMatrixPosition(light.matrixWorld); - vector3.setFromMatrixPosition(light.target.matrixWorld); - uniforms.direction.sub(vector3); - uniforms.direction.transformDirection(viewMatrix); - spotLength++; - } else if (light.isRectAreaLight) { - const uniforms = state.rectArea[rectAreaLength]; - uniforms.position.setFromMatrixPosition(light.matrixWorld); - uniforms.position.applyMatrix4(viewMatrix); // extract local rotation of light to derive width/height half vectors - - matrix42.identity(); - matrix4.copy(light.matrixWorld); - matrix4.premultiply(viewMatrix); - matrix42.extractRotation(matrix4); - uniforms.halfWidth.set(light.width * 0.5, 0.0, 0.0); - uniforms.halfHeight.set(0.0, light.height * 0.5, 0.0); - uniforms.halfWidth.applyMatrix4(matrix42); - uniforms.halfHeight.applyMatrix4(matrix42); - rectAreaLength++; - } else if (light.isPointLight) { - const uniforms = state.point[pointLength]; - uniforms.position.setFromMatrixPosition(light.matrixWorld); - uniforms.position.applyMatrix4(viewMatrix); - pointLength++; - } else if (light.isHemisphereLight) { - const uniforms = state.hemi[hemiLength]; - uniforms.direction.setFromMatrixPosition(light.matrixWorld); - uniforms.direction.transformDirection(viewMatrix); - hemiLength++; - } - } - } - - return { - setup: setup, - setupView: setupView, - state: state - }; - } - - function WebGLRenderState(extensions, capabilities) { - const lights = new WebGLLights(extensions, capabilities); - const lightsArray = []; - const shadowsArray = []; - - function init() { - lightsArray.length = 0; - shadowsArray.length = 0; - } - - function pushLight(light) { - lightsArray.push(light); - } - - function pushShadow(shadowLight) { - shadowsArray.push(shadowLight); - } - - function setupLights(physicallyCorrectLights) { - lights.setup(lightsArray, physicallyCorrectLights); - } - - function setupLightsView(camera) { - lights.setupView(lightsArray, camera); - } - - const state = { - lightsArray: lightsArray, - shadowsArray: shadowsArray, - lights: lights - }; - return { - init: init, - state: state, - setupLights: setupLights, - setupLightsView: setupLightsView, - pushLight: pushLight, - pushShadow: pushShadow - }; - } - - function WebGLRenderStates(extensions, capabilities) { - let renderStates = new WeakMap(); - - function get(scene, renderCallDepth = 0) { - let renderState; - - if (renderStates.has(scene) === false) { - renderState = new WebGLRenderState(extensions, capabilities); - renderStates.set(scene, [renderState]); - } else { - if (renderCallDepth >= renderStates.get(scene).length) { - renderState = new WebGLRenderState(extensions, capabilities); - renderStates.get(scene).push(renderState); - } else { - renderState = renderStates.get(scene)[renderCallDepth]; - } - } - - return renderState; - } - - function dispose() { - renderStates = new WeakMap(); - } - - return { - get: get, - dispose: dispose - }; - } - - class MeshDepthMaterial extends Material { - constructor(parameters) { - super(); - this.type = 'MeshDepthMaterial'; - this.depthPacking = BasicDepthPacking; - this.map = null; - this.alphaMap = null; - this.displacementMap = null; - this.displacementScale = 1; - this.displacementBias = 0; - this.wireframe = false; - this.wireframeLinewidth = 1; - this.setValues(parameters); - } - - copy(source) { - super.copy(source); - this.depthPacking = source.depthPacking; - this.map = source.map; - this.alphaMap = source.alphaMap; - this.displacementMap = source.displacementMap; - this.displacementScale = source.displacementScale; - this.displacementBias = source.displacementBias; - this.wireframe = source.wireframe; - this.wireframeLinewidth = source.wireframeLinewidth; - return this; - } - - } - - MeshDepthMaterial.prototype.isMeshDepthMaterial = true; - - class MeshDistanceMaterial extends Material { - constructor(parameters) { - super(); - this.type = 'MeshDistanceMaterial'; - this.referencePosition = new Vector3(); - this.nearDistance = 1; - this.farDistance = 1000; - this.map = null; - this.alphaMap = null; - this.displacementMap = null; - this.displacementScale = 1; - this.displacementBias = 0; - this.setValues(parameters); - } - - copy(source) { - super.copy(source); - this.referencePosition.copy(source.referencePosition); - this.nearDistance = source.nearDistance; - this.farDistance = source.farDistance; - this.map = source.map; - this.alphaMap = source.alphaMap; - this.displacementMap = source.displacementMap; - this.displacementScale = source.displacementScale; - this.displacementBias = source.displacementBias; - return this; - } - - } - - MeshDistanceMaterial.prototype.isMeshDistanceMaterial = true; - - const vertex = "void main() {\n\tgl_Position = vec4( position, 1.0 );\n}"; - const fragment = "uniform sampler2D shadow_pass;\nuniform vec2 resolution;\nuniform float radius;\n#include \nvoid main() {\n\tconst float samples = float( VSM_SAMPLES );\n\tfloat mean = 0.0;\n\tfloat squared_mean = 0.0;\n\tfloat uvStride = samples <= 1.0 ? 0.0 : 2.0 / ( samples - 1.0 );\n\tfloat uvStart = samples <= 1.0 ? 0.0 : - 1.0;\n\tfor ( float i = 0.0; i < samples; i ++ ) {\n\t\tfloat uvOffset = uvStart + i * uvStride;\n\t\t#ifdef HORIZONTAL_PASS\n\t\t\tvec2 distribution = unpackRGBATo2Half( texture2D( shadow_pass, ( gl_FragCoord.xy + vec2( uvOffset, 0.0 ) * radius ) / resolution ) );\n\t\t\tmean += distribution.x;\n\t\t\tsquared_mean += distribution.y * distribution.y + distribution.x * distribution.x;\n\t\t#else\n\t\t\tfloat depth = unpackRGBAToDepth( texture2D( shadow_pass, ( gl_FragCoord.xy + vec2( 0.0, uvOffset ) * radius ) / resolution ) );\n\t\t\tmean += depth;\n\t\t\tsquared_mean += depth * depth;\n\t\t#endif\n\t}\n\tmean = mean / samples;\n\tsquared_mean = squared_mean / samples;\n\tfloat std_dev = sqrt( squared_mean - mean * mean );\n\tgl_FragColor = pack2HalfToRGBA( vec2( mean, std_dev ) );\n}"; - - function WebGLShadowMap(_renderer, _objects, _capabilities) { - let _frustum = new Frustum(); - - const _shadowMapSize = new Vector2(), - _viewportSize = new Vector2(), - _viewport = new Vector4(), - _depthMaterial = new MeshDepthMaterial({ - depthPacking: RGBADepthPacking - }), - _distanceMaterial = new MeshDistanceMaterial(), - _materialCache = {}, - _maxTextureSize = _capabilities.maxTextureSize; - - const shadowSide = { - 0: BackSide, - 1: FrontSide, - 2: DoubleSide - }; - const shadowMaterialVertical = new ShaderMaterial({ - defines: { - VSM_SAMPLES: 8 - }, - uniforms: { - shadow_pass: { - value: null - }, - resolution: { - value: new Vector2() - }, - radius: { - value: 4.0 - } - }, - vertexShader: vertex, - fragmentShader: fragment - }); - const shadowMaterialHorizontal = shadowMaterialVertical.clone(); - shadowMaterialHorizontal.defines.HORIZONTAL_PASS = 1; - const fullScreenTri = new BufferGeometry(); - fullScreenTri.setAttribute('position', new BufferAttribute(new Float32Array([-1, -1, 0.5, 3, -1, 0.5, -1, 3, 0.5]), 3)); - const fullScreenMesh = new Mesh(fullScreenTri, shadowMaterialVertical); - const scope = this; - this.enabled = false; - this.autoUpdate = true; - this.needsUpdate = false; - this.type = PCFShadowMap; - - this.render = function (lights, scene, camera) { - if (scope.enabled === false) return; - if (scope.autoUpdate === false && scope.needsUpdate === false) return; - if (lights.length === 0) return; - - const currentRenderTarget = _renderer.getRenderTarget(); - - const activeCubeFace = _renderer.getActiveCubeFace(); - - const activeMipmapLevel = _renderer.getActiveMipmapLevel(); - - const _state = _renderer.state; // Set GL state for depth map. - - _state.setBlending(NoBlending); - - _state.buffers.color.setClear(1, 1, 1, 1); - - _state.buffers.depth.setTest(true); - - _state.setScissorTest(false); // render depth map - - - for (let i = 0, il = lights.length; i < il; i++) { - const light = lights[i]; - const shadow = light.shadow; - - if (shadow === undefined) { - console.warn('THREE.WebGLShadowMap:', light, 'has no shadow.'); - continue; - } - - if (shadow.autoUpdate === false && shadow.needsUpdate === false) continue; - - _shadowMapSize.copy(shadow.mapSize); - - const shadowFrameExtents = shadow.getFrameExtents(); - - _shadowMapSize.multiply(shadowFrameExtents); - - _viewportSize.copy(shadow.mapSize); - - if (_shadowMapSize.x > _maxTextureSize || _shadowMapSize.y > _maxTextureSize) { - if (_shadowMapSize.x > _maxTextureSize) { - _viewportSize.x = Math.floor(_maxTextureSize / shadowFrameExtents.x); - _shadowMapSize.x = _viewportSize.x * shadowFrameExtents.x; - shadow.mapSize.x = _viewportSize.x; - } - - if (_shadowMapSize.y > _maxTextureSize) { - _viewportSize.y = Math.floor(_maxTextureSize / shadowFrameExtents.y); - _shadowMapSize.y = _viewportSize.y * shadowFrameExtents.y; - shadow.mapSize.y = _viewportSize.y; - } - } - - if (shadow.map === null && !shadow.isPointLightShadow && this.type === VSMShadowMap) { - shadow.map = new WebGLRenderTarget(_shadowMapSize.x, _shadowMapSize.y); - shadow.map.texture.name = light.name + '.shadowMap'; - shadow.mapPass = new WebGLRenderTarget(_shadowMapSize.x, _shadowMapSize.y); - shadow.camera.updateProjectionMatrix(); - } - - if (shadow.map === null) { - const pars = { - minFilter: NearestFilter, - magFilter: NearestFilter, - format: RGBAFormat - }; - shadow.map = new WebGLRenderTarget(_shadowMapSize.x, _shadowMapSize.y, pars); - shadow.map.texture.name = light.name + '.shadowMap'; - shadow.camera.updateProjectionMatrix(); - } - - _renderer.setRenderTarget(shadow.map); - - _renderer.clear(); - - const viewportCount = shadow.getViewportCount(); - - for (let vp = 0; vp < viewportCount; vp++) { - const viewport = shadow.getViewport(vp); - - _viewport.set(_viewportSize.x * viewport.x, _viewportSize.y * viewport.y, _viewportSize.x * viewport.z, _viewportSize.y * viewport.w); - - _state.viewport(_viewport); - - shadow.updateMatrices(light, vp); - _frustum = shadow.getFrustum(); - renderObject(scene, camera, shadow.camera, light, this.type); - } // do blur pass for VSM - - - if (!shadow.isPointLightShadow && this.type === VSMShadowMap) { - VSMPass(shadow, camera); - } - - shadow.needsUpdate = false; - } - - scope.needsUpdate = false; - - _renderer.setRenderTarget(currentRenderTarget, activeCubeFace, activeMipmapLevel); - }; - - function VSMPass(shadow, camera) { - const geometry = _objects.update(fullScreenMesh); - - if (shadowMaterialVertical.defines.VSM_SAMPLES !== shadow.blurSamples) { - shadowMaterialVertical.defines.VSM_SAMPLES = shadow.blurSamples; - shadowMaterialHorizontal.defines.VSM_SAMPLES = shadow.blurSamples; - shadowMaterialVertical.needsUpdate = true; - shadowMaterialHorizontal.needsUpdate = true; - } // vertical pass - - - shadowMaterialVertical.uniforms.shadow_pass.value = shadow.map.texture; - shadowMaterialVertical.uniforms.resolution.value = shadow.mapSize; - shadowMaterialVertical.uniforms.radius.value = shadow.radius; - - _renderer.setRenderTarget(shadow.mapPass); - - _renderer.clear(); - - _renderer.renderBufferDirect(camera, null, geometry, shadowMaterialVertical, fullScreenMesh, null); // horizontal pass - - - shadowMaterialHorizontal.uniforms.shadow_pass.value = shadow.mapPass.texture; - shadowMaterialHorizontal.uniforms.resolution.value = shadow.mapSize; - shadowMaterialHorizontal.uniforms.radius.value = shadow.radius; - - _renderer.setRenderTarget(shadow.map); - - _renderer.clear(); - - _renderer.renderBufferDirect(camera, null, geometry, shadowMaterialHorizontal, fullScreenMesh, null); - } - - function getDepthMaterial(object, material, light, shadowCameraNear, shadowCameraFar, type) { - let result = null; - const customMaterial = light.isPointLight === true ? object.customDistanceMaterial : object.customDepthMaterial; - - if (customMaterial !== undefined) { - result = customMaterial; - } else { - result = light.isPointLight === true ? _distanceMaterial : _depthMaterial; - } - - if (_renderer.localClippingEnabled && material.clipShadows === true && material.clippingPlanes.length !== 0 || material.displacementMap && material.displacementScale !== 0 || material.alphaMap && material.alphaTest > 0) { - // in this case we need a unique material instance reflecting the - // appropriate state - const keyA = result.uuid, - keyB = material.uuid; - let materialsForVariant = _materialCache[keyA]; - - if (materialsForVariant === undefined) { - materialsForVariant = {}; - _materialCache[keyA] = materialsForVariant; - } - - let cachedMaterial = materialsForVariant[keyB]; - - if (cachedMaterial === undefined) { - cachedMaterial = result.clone(); - materialsForVariant[keyB] = cachedMaterial; - } - - result = cachedMaterial; - } - - result.visible = material.visible; - result.wireframe = material.wireframe; - - if (type === VSMShadowMap) { - result.side = material.shadowSide !== null ? material.shadowSide : material.side; - } else { - result.side = material.shadowSide !== null ? material.shadowSide : shadowSide[material.side]; - } - - result.alphaMap = material.alphaMap; - result.alphaTest = material.alphaTest; - result.clipShadows = material.clipShadows; - result.clippingPlanes = material.clippingPlanes; - result.clipIntersection = material.clipIntersection; - result.displacementMap = material.displacementMap; - result.displacementScale = material.displacementScale; - result.displacementBias = material.displacementBias; - result.wireframeLinewidth = material.wireframeLinewidth; - result.linewidth = material.linewidth; - - if (light.isPointLight === true && result.isMeshDistanceMaterial === true) { - result.referencePosition.setFromMatrixPosition(light.matrixWorld); - result.nearDistance = shadowCameraNear; - result.farDistance = shadowCameraFar; - } - - return result; - } - - function renderObject(object, camera, shadowCamera, light, type) { - if (object.visible === false) return; - const visible = object.layers.test(camera.layers); - - if (visible && (object.isMesh || object.isLine || object.isPoints)) { - if ((object.castShadow || object.receiveShadow && type === VSMShadowMap) && (!object.frustumCulled || _frustum.intersectsObject(object))) { - object.modelViewMatrix.multiplyMatrices(shadowCamera.matrixWorldInverse, object.matrixWorld); - - const geometry = _objects.update(object); - - const material = object.material; - - if (Array.isArray(material)) { - const groups = geometry.groups; - - for (let k = 0, kl = groups.length; k < kl; k++) { - const group = groups[k]; - const groupMaterial = material[group.materialIndex]; - - if (groupMaterial && groupMaterial.visible) { - const depthMaterial = getDepthMaterial(object, groupMaterial, light, shadowCamera.near, shadowCamera.far, type); - - _renderer.renderBufferDirect(shadowCamera, null, geometry, depthMaterial, object, group); - } - } - } else if (material.visible) { - const depthMaterial = getDepthMaterial(object, material, light, shadowCamera.near, shadowCamera.far, type); - - _renderer.renderBufferDirect(shadowCamera, null, geometry, depthMaterial, object, null); - } - } - } - - const children = object.children; - - for (let i = 0, l = children.length; i < l; i++) { - renderObject(children[i], camera, shadowCamera, light, type); - } - } - } - - function WebGLState(gl, extensions, capabilities) { - const isWebGL2 = capabilities.isWebGL2; - - function ColorBuffer() { - let locked = false; - const color = new Vector4(); - let currentColorMask = null; - const currentColorClear = new Vector4(0, 0, 0, 0); - return { - setMask: function (colorMask) { - if (currentColorMask !== colorMask && !locked) { - gl.colorMask(colorMask, colorMask, colorMask, colorMask); - currentColorMask = colorMask; - } - }, - setLocked: function (lock) { - locked = lock; - }, - setClear: function (r, g, b, a, premultipliedAlpha) { - if (premultipliedAlpha === true) { - r *= a; - g *= a; - b *= a; - } - - color.set(r, g, b, a); - - if (currentColorClear.equals(color) === false) { - gl.clearColor(r, g, b, a); - currentColorClear.copy(color); - } - }, - reset: function () { - locked = false; - currentColorMask = null; - currentColorClear.set(-1, 0, 0, 0); // set to invalid state - } - }; - } - - function DepthBuffer() { - let locked = false; - let currentDepthMask = null; - let currentDepthFunc = null; - let currentDepthClear = null; - return { - setTest: function (depthTest) { - if (depthTest) { - enable(gl.DEPTH_TEST); - } else { - disable(gl.DEPTH_TEST); - } - }, - setMask: function (depthMask) { - if (currentDepthMask !== depthMask && !locked) { - gl.depthMask(depthMask); - currentDepthMask = depthMask; - } - }, - setFunc: function (depthFunc) { - if (currentDepthFunc !== depthFunc) { - if (depthFunc) { - switch (depthFunc) { - case NeverDepth: - gl.depthFunc(gl.NEVER); - break; - - case AlwaysDepth: - gl.depthFunc(gl.ALWAYS); - break; - - case LessDepth: - gl.depthFunc(gl.LESS); - break; - - case LessEqualDepth: - gl.depthFunc(gl.LEQUAL); - break; - - case EqualDepth: - gl.depthFunc(gl.EQUAL); - break; - - case GreaterEqualDepth: - gl.depthFunc(gl.GEQUAL); - break; - - case GreaterDepth: - gl.depthFunc(gl.GREATER); - break; - - case NotEqualDepth: - gl.depthFunc(gl.NOTEQUAL); - break; - - default: - gl.depthFunc(gl.LEQUAL); - } - } else { - gl.depthFunc(gl.LEQUAL); - } - - currentDepthFunc = depthFunc; - } - }, - setLocked: function (lock) { - locked = lock; - }, - setClear: function (depth) { - if (currentDepthClear !== depth) { - gl.clearDepth(depth); - currentDepthClear = depth; - } - }, - reset: function () { - locked = false; - currentDepthMask = null; - currentDepthFunc = null; - currentDepthClear = null; - } - }; - } - - function StencilBuffer() { - let locked = false; - let currentStencilMask = null; - let currentStencilFunc = null; - let currentStencilRef = null; - let currentStencilFuncMask = null; - let currentStencilFail = null; - let currentStencilZFail = null; - let currentStencilZPass = null; - let currentStencilClear = null; - return { - setTest: function (stencilTest) { - if (!locked) { - if (stencilTest) { - enable(gl.STENCIL_TEST); - } else { - disable(gl.STENCIL_TEST); - } - } - }, - setMask: function (stencilMask) { - if (currentStencilMask !== stencilMask && !locked) { - gl.stencilMask(stencilMask); - currentStencilMask = stencilMask; - } - }, - setFunc: function (stencilFunc, stencilRef, stencilMask) { - if (currentStencilFunc !== stencilFunc || currentStencilRef !== stencilRef || currentStencilFuncMask !== stencilMask) { - gl.stencilFunc(stencilFunc, stencilRef, stencilMask); - currentStencilFunc = stencilFunc; - currentStencilRef = stencilRef; - currentStencilFuncMask = stencilMask; - } - }, - setOp: function (stencilFail, stencilZFail, stencilZPass) { - if (currentStencilFail !== stencilFail || currentStencilZFail !== stencilZFail || currentStencilZPass !== stencilZPass) { - gl.stencilOp(stencilFail, stencilZFail, stencilZPass); - currentStencilFail = stencilFail; - currentStencilZFail = stencilZFail; - currentStencilZPass = stencilZPass; - } - }, - setLocked: function (lock) { - locked = lock; - }, - setClear: function (stencil) { - if (currentStencilClear !== stencil) { - gl.clearStencil(stencil); - currentStencilClear = stencil; - } - }, - reset: function () { - locked = false; - currentStencilMask = null; - currentStencilFunc = null; - currentStencilRef = null; - currentStencilFuncMask = null; - currentStencilFail = null; - currentStencilZFail = null; - currentStencilZPass = null; - currentStencilClear = null; - } - }; - } // - - - const colorBuffer = new ColorBuffer(); - const depthBuffer = new DepthBuffer(); - const stencilBuffer = new StencilBuffer(); - let enabledCapabilities = {}; - let currentBoundFramebuffers = {}; - let currentDrawbuffers = new WeakMap(); - let defaultDrawbuffers = []; - let currentProgram = null; - let currentBlendingEnabled = false; - let currentBlending = null; - let currentBlendEquation = null; - let currentBlendSrc = null; - let currentBlendDst = null; - let currentBlendEquationAlpha = null; - let currentBlendSrcAlpha = null; - let currentBlendDstAlpha = null; - let currentPremultipledAlpha = false; - let currentFlipSided = null; - let currentCullFace = null; - let currentLineWidth = null; - let currentPolygonOffsetFactor = null; - let currentPolygonOffsetUnits = null; - const maxTextures = gl.getParameter(gl.MAX_COMBINED_TEXTURE_IMAGE_UNITS); - let lineWidthAvailable = false; - let version = 0; - const glVersion = gl.getParameter(gl.VERSION); - - if (glVersion.indexOf('WebGL') !== -1) { - version = parseFloat(/^WebGL (\d)/.exec(glVersion)[1]); - lineWidthAvailable = version >= 1.0; - } else if (glVersion.indexOf('OpenGL ES') !== -1) { - version = parseFloat(/^OpenGL ES (\d)/.exec(glVersion)[1]); - lineWidthAvailable = version >= 2.0; - } - - let currentTextureSlot = null; - let currentBoundTextures = {}; - const scissorParam = gl.getParameter(gl.SCISSOR_BOX); - const viewportParam = gl.getParameter(gl.VIEWPORT); - const currentScissor = new Vector4().fromArray(scissorParam); - const currentViewport = new Vector4().fromArray(viewportParam); - - function createTexture(type, target, count) { - const data = new Uint8Array(4); // 4 is required to match default unpack alignment of 4. - - const texture = gl.createTexture(); - gl.bindTexture(type, texture); - gl.texParameteri(type, gl.TEXTURE_MIN_FILTER, gl.NEAREST); - gl.texParameteri(type, gl.TEXTURE_MAG_FILTER, gl.NEAREST); - - for (let i = 0; i < count; i++) { - gl.texImage2D(target + i, 0, gl.RGBA, 1, 1, 0, gl.RGBA, gl.UNSIGNED_BYTE, data); - } - - return texture; - } - - const emptyTextures = {}; - emptyTextures[gl.TEXTURE_2D] = createTexture(gl.TEXTURE_2D, gl.TEXTURE_2D, 1); - emptyTextures[gl.TEXTURE_CUBE_MAP] = createTexture(gl.TEXTURE_CUBE_MAP, gl.TEXTURE_CUBE_MAP_POSITIVE_X, 6); // init - - colorBuffer.setClear(0, 0, 0, 1); - depthBuffer.setClear(1); - stencilBuffer.setClear(0); - enable(gl.DEPTH_TEST); - depthBuffer.setFunc(LessEqualDepth); - setFlipSided(false); - setCullFace(CullFaceBack); - enable(gl.CULL_FACE); - setBlending(NoBlending); // - - function enable(id) { - if (enabledCapabilities[id] !== true) { - gl.enable(id); - enabledCapabilities[id] = true; - } - } - - function disable(id) { - if (enabledCapabilities[id] !== false) { - gl.disable(id); - enabledCapabilities[id] = false; - } - } - - function bindFramebuffer(target, framebuffer) { - if (currentBoundFramebuffers[target] !== framebuffer) { - gl.bindFramebuffer(target, framebuffer); - currentBoundFramebuffers[target] = framebuffer; - - if (isWebGL2) { - // gl.DRAW_FRAMEBUFFER is equivalent to gl.FRAMEBUFFER - if (target === gl.DRAW_FRAMEBUFFER) { - currentBoundFramebuffers[gl.FRAMEBUFFER] = framebuffer; - } - - if (target === gl.FRAMEBUFFER) { - currentBoundFramebuffers[gl.DRAW_FRAMEBUFFER] = framebuffer; - } - } - - return true; - } - - return false; - } - - function drawBuffers(renderTarget, framebuffer) { - let drawBuffers = defaultDrawbuffers; - let needsUpdate = false; - - if (renderTarget) { - drawBuffers = currentDrawbuffers.get(framebuffer); - - if (drawBuffers === undefined) { - drawBuffers = []; - currentDrawbuffers.set(framebuffer, drawBuffers); - } - - if (renderTarget.isWebGLMultipleRenderTargets) { - const textures = renderTarget.texture; - - if (drawBuffers.length !== textures.length || drawBuffers[0] !== gl.COLOR_ATTACHMENT0) { - for (let i = 0, il = textures.length; i < il; i++) { - drawBuffers[i] = gl.COLOR_ATTACHMENT0 + i; - } - - drawBuffers.length = textures.length; - needsUpdate = true; - } - } else { - if (drawBuffers[0] !== gl.COLOR_ATTACHMENT0) { - drawBuffers[0] = gl.COLOR_ATTACHMENT0; - needsUpdate = true; - } - } - } else { - if (drawBuffers[0] !== gl.BACK) { - drawBuffers[0] = gl.BACK; - needsUpdate = true; - } - } - - if (needsUpdate) { - if (capabilities.isWebGL2) { - gl.drawBuffers(drawBuffers); - } else { - extensions.get('WEBGL_draw_buffers').drawBuffersWEBGL(drawBuffers); - } - } - } - - function useProgram(program) { - if (currentProgram !== program) { - gl.useProgram(program); - currentProgram = program; - return true; - } - - return false; - } - - const equationToGL = { - [AddEquation]: gl.FUNC_ADD, - [SubtractEquation]: gl.FUNC_SUBTRACT, - [ReverseSubtractEquation]: gl.FUNC_REVERSE_SUBTRACT - }; - - if (isWebGL2) { - equationToGL[MinEquation] = gl.MIN; - equationToGL[MaxEquation] = gl.MAX; - } else { - const extension = extensions.get('EXT_blend_minmax'); - - if (extension !== null) { - equationToGL[MinEquation] = extension.MIN_EXT; - equationToGL[MaxEquation] = extension.MAX_EXT; - } - } - - const factorToGL = { - [ZeroFactor]: gl.ZERO, - [OneFactor]: gl.ONE, - [SrcColorFactor]: gl.SRC_COLOR, - [SrcAlphaFactor]: gl.SRC_ALPHA, - [SrcAlphaSaturateFactor]: gl.SRC_ALPHA_SATURATE, - [DstColorFactor]: gl.DST_COLOR, - [DstAlphaFactor]: gl.DST_ALPHA, - [OneMinusSrcColorFactor]: gl.ONE_MINUS_SRC_COLOR, - [OneMinusSrcAlphaFactor]: gl.ONE_MINUS_SRC_ALPHA, - [OneMinusDstColorFactor]: gl.ONE_MINUS_DST_COLOR, - [OneMinusDstAlphaFactor]: gl.ONE_MINUS_DST_ALPHA - }; - - function setBlending(blending, blendEquation, blendSrc, blendDst, blendEquationAlpha, blendSrcAlpha, blendDstAlpha, premultipliedAlpha) { - if (blending === NoBlending) { - if (currentBlendingEnabled === true) { - disable(gl.BLEND); - currentBlendingEnabled = false; - } - - return; - } - - if (currentBlendingEnabled === false) { - enable(gl.BLEND); - currentBlendingEnabled = true; - } - - if (blending !== CustomBlending) { - if (blending !== currentBlending || premultipliedAlpha !== currentPremultipledAlpha) { - if (currentBlendEquation !== AddEquation || currentBlendEquationAlpha !== AddEquation) { - gl.blendEquation(gl.FUNC_ADD); - currentBlendEquation = AddEquation; - currentBlendEquationAlpha = AddEquation; - } - - if (premultipliedAlpha) { - switch (blending) { - case NormalBlending: - gl.blendFuncSeparate(gl.ONE, gl.ONE_MINUS_SRC_ALPHA, gl.ONE, gl.ONE_MINUS_SRC_ALPHA); - break; - - case AdditiveBlending: - gl.blendFunc(gl.ONE, gl.ONE); - break; - - case SubtractiveBlending: - gl.blendFuncSeparate(gl.ZERO, gl.ONE_MINUS_SRC_COLOR, gl.ZERO, gl.ONE); - break; - - case MultiplyBlending: - gl.blendFuncSeparate(gl.ZERO, gl.SRC_COLOR, gl.ZERO, gl.SRC_ALPHA); - break; - - default: - console.error('THREE.WebGLState: Invalid blending: ', blending); - break; - } - } else { - switch (blending) { - case NormalBlending: - gl.blendFuncSeparate(gl.SRC_ALPHA, gl.ONE_MINUS_SRC_ALPHA, gl.ONE, gl.ONE_MINUS_SRC_ALPHA); - break; - - case AdditiveBlending: - gl.blendFunc(gl.SRC_ALPHA, gl.ONE); - break; - - case SubtractiveBlending: - gl.blendFuncSeparate(gl.ZERO, gl.ONE_MINUS_SRC_COLOR, gl.ZERO, gl.ONE); - break; - - case MultiplyBlending: - gl.blendFunc(gl.ZERO, gl.SRC_COLOR); - break; - - default: - console.error('THREE.WebGLState: Invalid blending: ', blending); - break; - } - } - - currentBlendSrc = null; - currentBlendDst = null; - currentBlendSrcAlpha = null; - currentBlendDstAlpha = null; - currentBlending = blending; - currentPremultipledAlpha = premultipliedAlpha; - } - - return; - } // custom blending - - - blendEquationAlpha = blendEquationAlpha || blendEquation; - blendSrcAlpha = blendSrcAlpha || blendSrc; - blendDstAlpha = blendDstAlpha || blendDst; - - if (blendEquation !== currentBlendEquation || blendEquationAlpha !== currentBlendEquationAlpha) { - gl.blendEquationSeparate(equationToGL[blendEquation], equationToGL[blendEquationAlpha]); - currentBlendEquation = blendEquation; - currentBlendEquationAlpha = blendEquationAlpha; - } - - if (blendSrc !== currentBlendSrc || blendDst !== currentBlendDst || blendSrcAlpha !== currentBlendSrcAlpha || blendDstAlpha !== currentBlendDstAlpha) { - gl.blendFuncSeparate(factorToGL[blendSrc], factorToGL[blendDst], factorToGL[blendSrcAlpha], factorToGL[blendDstAlpha]); - currentBlendSrc = blendSrc; - currentBlendDst = blendDst; - currentBlendSrcAlpha = blendSrcAlpha; - currentBlendDstAlpha = blendDstAlpha; - } - - currentBlending = blending; - currentPremultipledAlpha = null; - } - - function setMaterial(material, frontFaceCW) { - material.side === DoubleSide ? disable(gl.CULL_FACE) : enable(gl.CULL_FACE); - let flipSided = material.side === BackSide; - if (frontFaceCW) flipSided = !flipSided; - setFlipSided(flipSided); - material.blending === NormalBlending && material.transparent === false ? setBlending(NoBlending) : setBlending(material.blending, material.blendEquation, material.blendSrc, material.blendDst, material.blendEquationAlpha, material.blendSrcAlpha, material.blendDstAlpha, material.premultipliedAlpha); - depthBuffer.setFunc(material.depthFunc); - depthBuffer.setTest(material.depthTest); - depthBuffer.setMask(material.depthWrite); - colorBuffer.setMask(material.colorWrite); - const stencilWrite = material.stencilWrite; - stencilBuffer.setTest(stencilWrite); - - if (stencilWrite) { - stencilBuffer.setMask(material.stencilWriteMask); - stencilBuffer.setFunc(material.stencilFunc, material.stencilRef, material.stencilFuncMask); - stencilBuffer.setOp(material.stencilFail, material.stencilZFail, material.stencilZPass); - } - - setPolygonOffset(material.polygonOffset, material.polygonOffsetFactor, material.polygonOffsetUnits); - material.alphaToCoverage === true ? enable(gl.SAMPLE_ALPHA_TO_COVERAGE) : disable(gl.SAMPLE_ALPHA_TO_COVERAGE); - } // - - - function setFlipSided(flipSided) { - if (currentFlipSided !== flipSided) { - if (flipSided) { - gl.frontFace(gl.CW); - } else { - gl.frontFace(gl.CCW); - } - - currentFlipSided = flipSided; - } - } - - function setCullFace(cullFace) { - if (cullFace !== CullFaceNone) { - enable(gl.CULL_FACE); - - if (cullFace !== currentCullFace) { - if (cullFace === CullFaceBack) { - gl.cullFace(gl.BACK); - } else if (cullFace === CullFaceFront) { - gl.cullFace(gl.FRONT); - } else { - gl.cullFace(gl.FRONT_AND_BACK); - } - } - } else { - disable(gl.CULL_FACE); - } - - currentCullFace = cullFace; - } - - function setLineWidth(width) { - if (width !== currentLineWidth) { - if (lineWidthAvailable) gl.lineWidth(width); - currentLineWidth = width; - } - } - - function setPolygonOffset(polygonOffset, factor, units) { - if (polygonOffset) { - enable(gl.POLYGON_OFFSET_FILL); - - if (currentPolygonOffsetFactor !== factor || currentPolygonOffsetUnits !== units) { - gl.polygonOffset(factor, units); - currentPolygonOffsetFactor = factor; - currentPolygonOffsetUnits = units; - } - } else { - disable(gl.POLYGON_OFFSET_FILL); - } - } - - function setScissorTest(scissorTest) { - if (scissorTest) { - enable(gl.SCISSOR_TEST); - } else { - disable(gl.SCISSOR_TEST); - } - } // texture - - - function activeTexture(webglSlot) { - if (webglSlot === undefined) webglSlot = gl.TEXTURE0 + maxTextures - 1; - - if (currentTextureSlot !== webglSlot) { - gl.activeTexture(webglSlot); - currentTextureSlot = webglSlot; - } - } - - function bindTexture(webglType, webglTexture) { - if (currentTextureSlot === null) { - activeTexture(); - } - - let boundTexture = currentBoundTextures[currentTextureSlot]; - - if (boundTexture === undefined) { - boundTexture = { - type: undefined, - texture: undefined - }; - currentBoundTextures[currentTextureSlot] = boundTexture; - } - - if (boundTexture.type !== webglType || boundTexture.texture !== webglTexture) { - gl.bindTexture(webglType, webglTexture || emptyTextures[webglType]); - boundTexture.type = webglType; - boundTexture.texture = webglTexture; - } - } - - function unbindTexture() { - const boundTexture = currentBoundTextures[currentTextureSlot]; - - if (boundTexture !== undefined && boundTexture.type !== undefined) { - gl.bindTexture(boundTexture.type, null); - boundTexture.type = undefined; - boundTexture.texture = undefined; - } - } - - function compressedTexImage2D() { - try { - gl.compressedTexImage2D.apply(gl, arguments); - } catch (error) { - console.error('THREE.WebGLState:', error); - } - } - - function texSubImage2D() { - try { - gl.texSubImage2D.apply(gl, arguments); - } catch (error) { - console.error('THREE.WebGLState:', error); - } - } - - function texSubImage3D() { - try { - gl.texSubImage3D.apply(gl, arguments); - } catch (error) { - console.error('THREE.WebGLState:', error); - } - } - - function compressedTexSubImage2D() { - try { - gl.compressedTexSubImage2D.apply(gl, arguments); - } catch (error) { - console.error('THREE.WebGLState:', error); - } - } - - function texStorage2D() { - try { - gl.texStorage2D.apply(gl, arguments); - } catch (error) { - console.error('THREE.WebGLState:', error); - } - } - - function texStorage3D() { - try { - gl.texStorage3D.apply(gl, arguments); - } catch (error) { - console.error('THREE.WebGLState:', error); - } - } - - function texImage2D() { - try { - gl.texImage2D.apply(gl, arguments); - } catch (error) { - console.error('THREE.WebGLState:', error); - } - } - - function texImage3D() { - try { - gl.texImage3D.apply(gl, arguments); - } catch (error) { - console.error('THREE.WebGLState:', error); - } - } // - - - function scissor(scissor) { - if (currentScissor.equals(scissor) === false) { - gl.scissor(scissor.x, scissor.y, scissor.z, scissor.w); - currentScissor.copy(scissor); - } - } - - function viewport(viewport) { - if (currentViewport.equals(viewport) === false) { - gl.viewport(viewport.x, viewport.y, viewport.z, viewport.w); - currentViewport.copy(viewport); - } - } // - - - function reset() { - // reset state - gl.disable(gl.BLEND); - gl.disable(gl.CULL_FACE); - gl.disable(gl.DEPTH_TEST); - gl.disable(gl.POLYGON_OFFSET_FILL); - gl.disable(gl.SCISSOR_TEST); - gl.disable(gl.STENCIL_TEST); - gl.disable(gl.SAMPLE_ALPHA_TO_COVERAGE); - gl.blendEquation(gl.FUNC_ADD); - gl.blendFunc(gl.ONE, gl.ZERO); - gl.blendFuncSeparate(gl.ONE, gl.ZERO, gl.ONE, gl.ZERO); - gl.colorMask(true, true, true, true); - gl.clearColor(0, 0, 0, 0); - gl.depthMask(true); - gl.depthFunc(gl.LESS); - gl.clearDepth(1); - gl.stencilMask(0xffffffff); - gl.stencilFunc(gl.ALWAYS, 0, 0xffffffff); - gl.stencilOp(gl.KEEP, gl.KEEP, gl.KEEP); - gl.clearStencil(0); - gl.cullFace(gl.BACK); - gl.frontFace(gl.CCW); - gl.polygonOffset(0, 0); - gl.activeTexture(gl.TEXTURE0); - gl.bindFramebuffer(gl.FRAMEBUFFER, null); - - if (isWebGL2 === true) { - gl.bindFramebuffer(gl.DRAW_FRAMEBUFFER, null); - gl.bindFramebuffer(gl.READ_FRAMEBUFFER, null); - } - - gl.useProgram(null); - gl.lineWidth(1); - gl.scissor(0, 0, gl.canvas.width, gl.canvas.height); - gl.viewport(0, 0, gl.canvas.width, gl.canvas.height); // reset internals - - enabledCapabilities = {}; - currentTextureSlot = null; - currentBoundTextures = {}; - currentBoundFramebuffers = {}; - currentDrawbuffers = new WeakMap(); - defaultDrawbuffers = []; - currentProgram = null; - currentBlendingEnabled = false; - currentBlending = null; - currentBlendEquation = null; - currentBlendSrc = null; - currentBlendDst = null; - currentBlendEquationAlpha = null; - currentBlendSrcAlpha = null; - currentBlendDstAlpha = null; - currentPremultipledAlpha = false; - currentFlipSided = null; - currentCullFace = null; - currentLineWidth = null; - currentPolygonOffsetFactor = null; - currentPolygonOffsetUnits = null; - currentScissor.set(0, 0, gl.canvas.width, gl.canvas.height); - currentViewport.set(0, 0, gl.canvas.width, gl.canvas.height); - colorBuffer.reset(); - depthBuffer.reset(); - stencilBuffer.reset(); - } - - return { - buffers: { - color: colorBuffer, - depth: depthBuffer, - stencil: stencilBuffer - }, - enable: enable, - disable: disable, - bindFramebuffer: bindFramebuffer, - drawBuffers: drawBuffers, - useProgram: useProgram, - setBlending: setBlending, - setMaterial: setMaterial, - setFlipSided: setFlipSided, - setCullFace: setCullFace, - setLineWidth: setLineWidth, - setPolygonOffset: setPolygonOffset, - setScissorTest: setScissorTest, - activeTexture: activeTexture, - bindTexture: bindTexture, - unbindTexture: unbindTexture, - compressedTexImage2D: compressedTexImage2D, - texImage2D: texImage2D, - texImage3D: texImage3D, - texStorage2D: texStorage2D, - texStorage3D: texStorage3D, - texSubImage2D: texSubImage2D, - texSubImage3D: texSubImage3D, - compressedTexSubImage2D: compressedTexSubImage2D, - scissor: scissor, - viewport: viewport, - reset: reset - }; - } - - function WebGLTextures(_gl, extensions, state, properties, capabilities, utils, info) { - const isWebGL2 = capabilities.isWebGL2; - const maxTextures = capabilities.maxTextures; - const maxCubemapSize = capabilities.maxCubemapSize; - const maxTextureSize = capabilities.maxTextureSize; - const maxSamples = capabilities.maxSamples; - const multisampledRTTExt = extensions.has('WEBGL_multisampled_render_to_texture') ? extensions.get('WEBGL_multisampled_render_to_texture') : null; - const supportsInvalidateFramebuffer = /OculusBrowser/g.test(navigator.userAgent); - - const _videoTextures = new WeakMap(); - - let _canvas; - - const _sources = new WeakMap(); // maps WebglTexture objects to instances of Source - // cordova iOS (as of 5.0) still uses UIWebView, which provides OffscreenCanvas, - // also OffscreenCanvas.getContext("webgl"), but not OffscreenCanvas.getContext("2d")! - // Some implementations may only implement OffscreenCanvas partially (e.g. lacking 2d). - - - let useOffscreenCanvas = false; - - try { - useOffscreenCanvas = typeof OffscreenCanvas !== 'undefined' // eslint-disable-next-line compat/compat - && new OffscreenCanvas(1, 1).getContext('2d') !== null; - } catch (err) {// Ignore any errors - } - - function createCanvas(width, height) { - // Use OffscreenCanvas when available. Specially needed in web workers - return useOffscreenCanvas ? // eslint-disable-next-line compat/compat - new OffscreenCanvas(width, height) : createElementNS('canvas'); - } - - function resizeImage(image, needsPowerOfTwo, needsNewCanvas, maxSize) { - let scale = 1; // handle case if texture exceeds max size - - if (image.width > maxSize || image.height > maxSize) { - scale = maxSize / Math.max(image.width, image.height); - } // only perform resize if necessary - - - if (scale < 1 || needsPowerOfTwo === true) { - // only perform resize for certain image types - if (typeof HTMLImageElement !== 'undefined' && image instanceof HTMLImageElement || typeof HTMLCanvasElement !== 'undefined' && image instanceof HTMLCanvasElement || typeof ImageBitmap !== 'undefined' && image instanceof ImageBitmap) { - const floor = needsPowerOfTwo ? floorPowerOfTwo : Math.floor; - const width = floor(scale * image.width); - const height = floor(scale * image.height); - if (_canvas === undefined) _canvas = createCanvas(width, height); // cube textures can't reuse the same canvas - - const canvas = needsNewCanvas ? createCanvas(width, height) : _canvas; - canvas.width = width; - canvas.height = height; - const context = canvas.getContext('2d'); - context.drawImage(image, 0, 0, width, height); - console.warn('THREE.WebGLRenderer: Texture has been resized from (' + image.width + 'x' + image.height + ') to (' + width + 'x' + height + ').'); - return canvas; - } else { - if ('data' in image) { - console.warn('THREE.WebGLRenderer: Image in DataTexture is too big (' + image.width + 'x' + image.height + ').'); - } - - return image; - } - } - - return image; - } - - function isPowerOfTwo$1(image) { - return isPowerOfTwo(image.width) && isPowerOfTwo(image.height); - } - - function textureNeedsPowerOfTwo(texture) { - if (isWebGL2) return false; - return texture.wrapS !== ClampToEdgeWrapping || texture.wrapT !== ClampToEdgeWrapping || texture.minFilter !== NearestFilter && texture.minFilter !== LinearFilter; - } - - function textureNeedsGenerateMipmaps(texture, supportsMips) { - return texture.generateMipmaps && supportsMips && texture.minFilter !== NearestFilter && texture.minFilter !== LinearFilter; - } - - function generateMipmap(target) { - _gl.generateMipmap(target); - } - - function getInternalFormat(internalFormatName, glFormat, glType, encoding, isVideoTexture = false) { - if (isWebGL2 === false) return glFormat; - - if (internalFormatName !== null) { - if (_gl[internalFormatName] !== undefined) return _gl[internalFormatName]; - console.warn('THREE.WebGLRenderer: Attempt to use non-existing WebGL internal format \'' + internalFormatName + '\''); - } - - let internalFormat = glFormat; - - if (glFormat === _gl.RED) { - if (glType === _gl.FLOAT) internalFormat = _gl.R32F; - if (glType === _gl.HALF_FLOAT) internalFormat = _gl.R16F; - if (glType === _gl.UNSIGNED_BYTE) internalFormat = _gl.R8; - } - - if (glFormat === _gl.RG) { - if (glType === _gl.FLOAT) internalFormat = _gl.RG32F; - if (glType === _gl.HALF_FLOAT) internalFormat = _gl.RG16F; - if (glType === _gl.UNSIGNED_BYTE) internalFormat = _gl.RG8; - } - - if (glFormat === _gl.RGBA) { - if (glType === _gl.FLOAT) internalFormat = _gl.RGBA32F; - if (glType === _gl.HALF_FLOAT) internalFormat = _gl.RGBA16F; - if (glType === _gl.UNSIGNED_BYTE) internalFormat = encoding === sRGBEncoding && isVideoTexture === false ? _gl.SRGB8_ALPHA8 : _gl.RGBA8; - if (glType === _gl.UNSIGNED_SHORT_4_4_4_4) internalFormat = _gl.RGBA4; - if (glType === _gl.UNSIGNED_SHORT_5_5_5_1) internalFormat = _gl.RGB5_A1; - } - - if (internalFormat === _gl.R16F || internalFormat === _gl.R32F || internalFormat === _gl.RG16F || internalFormat === _gl.RG32F || internalFormat === _gl.RGBA16F || internalFormat === _gl.RGBA32F) { - extensions.get('EXT_color_buffer_float'); - } - - return internalFormat; - } - - function getMipLevels(texture, image, supportsMips) { - if (textureNeedsGenerateMipmaps(texture, supportsMips) === true || texture.isFramebufferTexture && texture.minFilter !== NearestFilter && texture.minFilter !== LinearFilter) { - return Math.log2(Math.max(image.width, image.height)) + 1; - } else if (texture.mipmaps !== undefined && texture.mipmaps.length > 0) { - // user-defined mipmaps - return texture.mipmaps.length; - } else if (texture.isCompressedTexture && Array.isArray(texture.image)) { - return image.mipmaps.length; - } else { - // texture without mipmaps (only base level) - return 1; - } - } // Fallback filters for non-power-of-2 textures - - - function filterFallback(f) { - if (f === NearestFilter || f === NearestMipmapNearestFilter || f === NearestMipmapLinearFilter) { - return _gl.NEAREST; - } - - return _gl.LINEAR; - } // - - - function onTextureDispose(event) { - const texture = event.target; - texture.removeEventListener('dispose', onTextureDispose); - deallocateTexture(texture); - - if (texture.isVideoTexture) { - _videoTextures.delete(texture); - } - } - - function onRenderTargetDispose(event) { - const renderTarget = event.target; - renderTarget.removeEventListener('dispose', onRenderTargetDispose); - deallocateRenderTarget(renderTarget); - } // - - - function deallocateTexture(texture) { - const textureProperties = properties.get(texture); - if (textureProperties.__webglInit === undefined) return; // check if it's necessary to remove the WebGLTexture object - - const source = texture.source; - - const webglTextures = _sources.get(source); - - if (webglTextures) { - const webglTexture = webglTextures[textureProperties.__cacheKey]; - webglTexture.usedTimes--; // the WebGLTexture object is not used anymore, remove it - - if (webglTexture.usedTimes === 0) { - deleteTexture(texture); - } // remove the weak map entry if no WebGLTexture uses the source anymore - - - if (Object.keys(webglTextures).length === 0) { - _sources.delete(source); - } - } - - properties.remove(texture); - } - - function deleteTexture(texture) { - const textureProperties = properties.get(texture); - - _gl.deleteTexture(textureProperties.__webglTexture); - - const source = texture.source; - - const webglTextures = _sources.get(source); - - delete webglTextures[textureProperties.__cacheKey]; - info.memory.textures--; - } - - function deallocateRenderTarget(renderTarget) { - const texture = renderTarget.texture; - const renderTargetProperties = properties.get(renderTarget); - const textureProperties = properties.get(texture); - - if (textureProperties.__webglTexture !== undefined) { - _gl.deleteTexture(textureProperties.__webglTexture); - - info.memory.textures--; - } - - if (renderTarget.depthTexture) { - renderTarget.depthTexture.dispose(); - } - - if (renderTarget.isWebGLCubeRenderTarget) { - for (let i = 0; i < 6; i++) { - _gl.deleteFramebuffer(renderTargetProperties.__webglFramebuffer[i]); - - if (renderTargetProperties.__webglDepthbuffer) _gl.deleteRenderbuffer(renderTargetProperties.__webglDepthbuffer[i]); - } - } else { - _gl.deleteFramebuffer(renderTargetProperties.__webglFramebuffer); - - if (renderTargetProperties.__webglDepthbuffer) _gl.deleteRenderbuffer(renderTargetProperties.__webglDepthbuffer); - if (renderTargetProperties.__webglMultisampledFramebuffer) _gl.deleteFramebuffer(renderTargetProperties.__webglMultisampledFramebuffer); - if (renderTargetProperties.__webglColorRenderbuffer) _gl.deleteRenderbuffer(renderTargetProperties.__webglColorRenderbuffer); - if (renderTargetProperties.__webglDepthRenderbuffer) _gl.deleteRenderbuffer(renderTargetProperties.__webglDepthRenderbuffer); - } - - if (renderTarget.isWebGLMultipleRenderTargets) { - for (let i = 0, il = texture.length; i < il; i++) { - const attachmentProperties = properties.get(texture[i]); - - if (attachmentProperties.__webglTexture) { - _gl.deleteTexture(attachmentProperties.__webglTexture); - - info.memory.textures--; - } - - properties.remove(texture[i]); - } - } - - properties.remove(texture); - properties.remove(renderTarget); - } // - - - let textureUnits = 0; - - function resetTextureUnits() { - textureUnits = 0; - } - - function allocateTextureUnit() { - const textureUnit = textureUnits; - - if (textureUnit >= maxTextures) { - console.warn('THREE.WebGLTextures: Trying to use ' + textureUnit + ' texture units while this GPU supports only ' + maxTextures); - } - - textureUnits += 1; - return textureUnit; - } - - function getTextureCacheKey(texture) { - const array = []; - array.push(texture.wrapS); - array.push(texture.wrapT); - array.push(texture.magFilter); - array.push(texture.minFilter); - array.push(texture.anisotropy); - array.push(texture.internalFormat); - array.push(texture.format); - array.push(texture.type); - array.push(texture.generateMipmaps); - array.push(texture.premultiplyAlpha); - array.push(texture.flipY); - array.push(texture.unpackAlignment); - array.push(texture.encoding); - return array.join(); - } // - - - function setTexture2D(texture, slot) { - const textureProperties = properties.get(texture); - if (texture.isVideoTexture) updateVideoTexture(texture); - - if (texture.isRenderTargetTexture === false && texture.version > 0 && textureProperties.__version !== texture.version) { - const image = texture.image; - - if (image === null) { - console.warn('THREE.WebGLRenderer: Texture marked for update but no image data found.'); - } else if (image.complete === false) { - console.warn('THREE.WebGLRenderer: Texture marked for update but image is incomplete'); - } else { - uploadTexture(textureProperties, texture, slot); - return; - } - } - - state.activeTexture(_gl.TEXTURE0 + slot); - state.bindTexture(_gl.TEXTURE_2D, textureProperties.__webglTexture); - } - - function setTexture2DArray(texture, slot) { - const textureProperties = properties.get(texture); - - if (texture.version > 0 && textureProperties.__version !== texture.version) { - uploadTexture(textureProperties, texture, slot); - return; - } - - state.activeTexture(_gl.TEXTURE0 + slot); - state.bindTexture(_gl.TEXTURE_2D_ARRAY, textureProperties.__webglTexture); - } - - function setTexture3D(texture, slot) { - const textureProperties = properties.get(texture); - - if (texture.version > 0 && textureProperties.__version !== texture.version) { - uploadTexture(textureProperties, texture, slot); - return; - } - - state.activeTexture(_gl.TEXTURE0 + slot); - state.bindTexture(_gl.TEXTURE_3D, textureProperties.__webglTexture); - } - - function setTextureCube(texture, slot) { - const textureProperties = properties.get(texture); - - if (texture.version > 0 && textureProperties.__version !== texture.version) { - uploadCubeTexture(textureProperties, texture, slot); - return; - } - - state.activeTexture(_gl.TEXTURE0 + slot); - state.bindTexture(_gl.TEXTURE_CUBE_MAP, textureProperties.__webglTexture); - } - - const wrappingToGL = { - [RepeatWrapping]: _gl.REPEAT, - [ClampToEdgeWrapping]: _gl.CLAMP_TO_EDGE, - [MirroredRepeatWrapping]: _gl.MIRRORED_REPEAT - }; - const filterToGL = { - [NearestFilter]: _gl.NEAREST, - [NearestMipmapNearestFilter]: _gl.NEAREST_MIPMAP_NEAREST, - [NearestMipmapLinearFilter]: _gl.NEAREST_MIPMAP_LINEAR, - [LinearFilter]: _gl.LINEAR, - [LinearMipmapNearestFilter]: _gl.LINEAR_MIPMAP_NEAREST, - [LinearMipmapLinearFilter]: _gl.LINEAR_MIPMAP_LINEAR - }; - - function setTextureParameters(textureType, texture, supportsMips) { - if (supportsMips) { - _gl.texParameteri(textureType, _gl.TEXTURE_WRAP_S, wrappingToGL[texture.wrapS]); - - _gl.texParameteri(textureType, _gl.TEXTURE_WRAP_T, wrappingToGL[texture.wrapT]); - - if (textureType === _gl.TEXTURE_3D || textureType === _gl.TEXTURE_2D_ARRAY) { - _gl.texParameteri(textureType, _gl.TEXTURE_WRAP_R, wrappingToGL[texture.wrapR]); - } - - _gl.texParameteri(textureType, _gl.TEXTURE_MAG_FILTER, filterToGL[texture.magFilter]); - - _gl.texParameteri(textureType, _gl.TEXTURE_MIN_FILTER, filterToGL[texture.minFilter]); - } else { - _gl.texParameteri(textureType, _gl.TEXTURE_WRAP_S, _gl.CLAMP_TO_EDGE); - - _gl.texParameteri(textureType, _gl.TEXTURE_WRAP_T, _gl.CLAMP_TO_EDGE); - - if (textureType === _gl.TEXTURE_3D || textureType === _gl.TEXTURE_2D_ARRAY) { - _gl.texParameteri(textureType, _gl.TEXTURE_WRAP_R, _gl.CLAMP_TO_EDGE); - } - - if (texture.wrapS !== ClampToEdgeWrapping || texture.wrapT !== ClampToEdgeWrapping) { - console.warn('THREE.WebGLRenderer: Texture is not power of two. Texture.wrapS and Texture.wrapT should be set to THREE.ClampToEdgeWrapping.'); - } - - _gl.texParameteri(textureType, _gl.TEXTURE_MAG_FILTER, filterFallback(texture.magFilter)); - - _gl.texParameteri(textureType, _gl.TEXTURE_MIN_FILTER, filterFallback(texture.minFilter)); - - if (texture.minFilter !== NearestFilter && texture.minFilter !== LinearFilter) { - console.warn('THREE.WebGLRenderer: Texture is not power of two. Texture.minFilter should be set to THREE.NearestFilter or THREE.LinearFilter.'); - } - } - - if (extensions.has('EXT_texture_filter_anisotropic') === true) { - const extension = extensions.get('EXT_texture_filter_anisotropic'); - if (texture.type === FloatType && extensions.has('OES_texture_float_linear') === false) return; // verify extension for WebGL 1 and WebGL 2 - - if (isWebGL2 === false && texture.type === HalfFloatType && extensions.has('OES_texture_half_float_linear') === false) return; // verify extension for WebGL 1 only - - if (texture.anisotropy > 1 || properties.get(texture).__currentAnisotropy) { - _gl.texParameterf(textureType, extension.TEXTURE_MAX_ANISOTROPY_EXT, Math.min(texture.anisotropy, capabilities.getMaxAnisotropy())); - - properties.get(texture).__currentAnisotropy = texture.anisotropy; - } - } - } - - function initTexture(textureProperties, texture) { - let forceUpload = false; - - if (textureProperties.__webglInit === undefined) { - textureProperties.__webglInit = true; - texture.addEventListener('dispose', onTextureDispose); - } // create Source <-> WebGLTextures mapping if necessary - - - const source = texture.source; - - let webglTextures = _sources.get(source); - - if (webglTextures === undefined) { - webglTextures = {}; - - _sources.set(source, webglTextures); - } // check if there is already a WebGLTexture object for the given texture parameters - - - const textureCacheKey = getTextureCacheKey(texture); - - if (textureCacheKey !== textureProperties.__cacheKey) { - // if not, create a new instance of WebGLTexture - if (webglTextures[textureCacheKey] === undefined) { - // create new entry - webglTextures[textureCacheKey] = { - texture: _gl.createTexture(), - usedTimes: 0 - }; - info.memory.textures++; // when a new instance of WebGLTexture was created, a texture upload is required - // even if the image contents are identical - - forceUpload = true; - } - - webglTextures[textureCacheKey].usedTimes++; // every time the texture cache key changes, it's necessary to check if an instance of - // WebGLTexture can be deleted in order to avoid a memory leak. - - const webglTexture = webglTextures[textureProperties.__cacheKey]; - - if (webglTexture !== undefined) { - webglTextures[textureProperties.__cacheKey].usedTimes--; - - if (webglTexture.usedTimes === 0) { - deleteTexture(texture); - } - } // store references to cache key and WebGLTexture object - - - textureProperties.__cacheKey = textureCacheKey; - textureProperties.__webglTexture = webglTextures[textureCacheKey].texture; - } - - return forceUpload; - } - - function uploadTexture(textureProperties, texture, slot) { - let textureType = _gl.TEXTURE_2D; - if (texture.isDataArrayTexture) textureType = _gl.TEXTURE_2D_ARRAY; - if (texture.isData3DTexture) textureType = _gl.TEXTURE_3D; - const forceUpload = initTexture(textureProperties, texture); - const source = texture.source; - state.activeTexture(_gl.TEXTURE0 + slot); - state.bindTexture(textureType, textureProperties.__webglTexture); - - if (source.version !== source.__currentVersion || forceUpload === true) { - _gl.pixelStorei(_gl.UNPACK_FLIP_Y_WEBGL, texture.flipY); - - _gl.pixelStorei(_gl.UNPACK_PREMULTIPLY_ALPHA_WEBGL, texture.premultiplyAlpha); - - _gl.pixelStorei(_gl.UNPACK_ALIGNMENT, texture.unpackAlignment); - - _gl.pixelStorei(_gl.UNPACK_COLORSPACE_CONVERSION_WEBGL, _gl.NONE); - - const needsPowerOfTwo = textureNeedsPowerOfTwo(texture) && isPowerOfTwo$1(texture.image) === false; - let image = resizeImage(texture.image, needsPowerOfTwo, false, maxTextureSize); - image = verifyColorSpace(texture, image); - const supportsMips = isPowerOfTwo$1(image) || isWebGL2, - glFormat = utils.convert(texture.format, texture.encoding); - let glType = utils.convert(texture.type), - glInternalFormat = getInternalFormat(texture.internalFormat, glFormat, glType, texture.encoding, texture.isVideoTexture); - setTextureParameters(textureType, texture, supportsMips); - let mipmap; - const mipmaps = texture.mipmaps; - const useTexStorage = isWebGL2 && texture.isVideoTexture !== true; - const allocateMemory = textureProperties.__version === undefined || forceUpload === true; - const levels = getMipLevels(texture, image, supportsMips); - - if (texture.isDepthTexture) { - // populate depth texture with dummy data - glInternalFormat = _gl.DEPTH_COMPONENT; - - if (isWebGL2) { - if (texture.type === FloatType) { - glInternalFormat = _gl.DEPTH_COMPONENT32F; - } else if (texture.type === UnsignedIntType) { - glInternalFormat = _gl.DEPTH_COMPONENT24; - } else if (texture.type === UnsignedInt248Type) { - glInternalFormat = _gl.DEPTH24_STENCIL8; - } else { - glInternalFormat = _gl.DEPTH_COMPONENT16; // WebGL2 requires sized internalformat for glTexImage2D - } - } else { - if (texture.type === FloatType) { - console.error('WebGLRenderer: Floating point depth texture requires WebGL2.'); - } - } // validation checks for WebGL 1 - - - if (texture.format === DepthFormat && glInternalFormat === _gl.DEPTH_COMPONENT) { - // The error INVALID_OPERATION is generated by texImage2D if format and internalformat are - // DEPTH_COMPONENT and type is not UNSIGNED_SHORT or UNSIGNED_INT - // (https://www.khronos.org/registry/webgl/extensions/WEBGL_depth_texture/) - if (texture.type !== UnsignedShortType && texture.type !== UnsignedIntType) { - console.warn('THREE.WebGLRenderer: Use UnsignedShortType or UnsignedIntType for DepthFormat DepthTexture.'); - texture.type = UnsignedShortType; - glType = utils.convert(texture.type); - } - } - - if (texture.format === DepthStencilFormat && glInternalFormat === _gl.DEPTH_COMPONENT) { - // Depth stencil textures need the DEPTH_STENCIL internal format - // (https://www.khronos.org/registry/webgl/extensions/WEBGL_depth_texture/) - glInternalFormat = _gl.DEPTH_STENCIL; // The error INVALID_OPERATION is generated by texImage2D if format and internalformat are - // DEPTH_STENCIL and type is not UNSIGNED_INT_24_8_WEBGL. - // (https://www.khronos.org/registry/webgl/extensions/WEBGL_depth_texture/) - - if (texture.type !== UnsignedInt248Type) { - console.warn('THREE.WebGLRenderer: Use UnsignedInt248Type for DepthStencilFormat DepthTexture.'); - texture.type = UnsignedInt248Type; - glType = utils.convert(texture.type); - } - } // - - - if (allocateMemory) { - if (useTexStorage) { - state.texStorage2D(_gl.TEXTURE_2D, 1, glInternalFormat, image.width, image.height); - } else { - state.texImage2D(_gl.TEXTURE_2D, 0, glInternalFormat, image.width, image.height, 0, glFormat, glType, null); - } - } - } else if (texture.isDataTexture) { - // use manually created mipmaps if available - // if there are no manual mipmaps - // set 0 level mipmap and then use GL to generate other mipmap levels - if (mipmaps.length > 0 && supportsMips) { - if (useTexStorage && allocateMemory) { - state.texStorage2D(_gl.TEXTURE_2D, levels, glInternalFormat, mipmaps[0].width, mipmaps[0].height); - } - - for (let i = 0, il = mipmaps.length; i < il; i++) { - mipmap = mipmaps[i]; - - if (useTexStorage) { - state.texSubImage2D(_gl.TEXTURE_2D, i, 0, 0, mipmap.width, mipmap.height, glFormat, glType, mipmap.data); - } else { - state.texImage2D(_gl.TEXTURE_2D, i, glInternalFormat, mipmap.width, mipmap.height, 0, glFormat, glType, mipmap.data); - } - } - - texture.generateMipmaps = false; - } else { - if (useTexStorage) { - if (allocateMemory) { - state.texStorage2D(_gl.TEXTURE_2D, levels, glInternalFormat, image.width, image.height); - } - - state.texSubImage2D(_gl.TEXTURE_2D, 0, 0, 0, image.width, image.height, glFormat, glType, image.data); - } else { - state.texImage2D(_gl.TEXTURE_2D, 0, glInternalFormat, image.width, image.height, 0, glFormat, glType, image.data); - } - } - } else if (texture.isCompressedTexture) { - if (useTexStorage && allocateMemory) { - state.texStorage2D(_gl.TEXTURE_2D, levels, glInternalFormat, mipmaps[0].width, mipmaps[0].height); - } - - for (let i = 0, il = mipmaps.length; i < il; i++) { - mipmap = mipmaps[i]; - - if (texture.format !== RGBAFormat) { - if (glFormat !== null) { - if (useTexStorage) { - state.compressedTexSubImage2D(_gl.TEXTURE_2D, i, 0, 0, mipmap.width, mipmap.height, glFormat, mipmap.data); - } else { - state.compressedTexImage2D(_gl.TEXTURE_2D, i, glInternalFormat, mipmap.width, mipmap.height, 0, mipmap.data); - } - } else { - console.warn('THREE.WebGLRenderer: Attempt to load unsupported compressed texture format in .uploadTexture()'); - } - } else { - if (useTexStorage) { - state.texSubImage2D(_gl.TEXTURE_2D, i, 0, 0, mipmap.width, mipmap.height, glFormat, glType, mipmap.data); - } else { - state.texImage2D(_gl.TEXTURE_2D, i, glInternalFormat, mipmap.width, mipmap.height, 0, glFormat, glType, mipmap.data); - } - } - } - } else if (texture.isDataArrayTexture) { - if (useTexStorage) { - if (allocateMemory) { - state.texStorage3D(_gl.TEXTURE_2D_ARRAY, levels, glInternalFormat, image.width, image.height, image.depth); - } - - state.texSubImage3D(_gl.TEXTURE_2D_ARRAY, 0, 0, 0, 0, image.width, image.height, image.depth, glFormat, glType, image.data); - } else { - state.texImage3D(_gl.TEXTURE_2D_ARRAY, 0, glInternalFormat, image.width, image.height, image.depth, 0, glFormat, glType, image.data); - } - } else if (texture.isData3DTexture) { - if (useTexStorage) { - if (allocateMemory) { - state.texStorage3D(_gl.TEXTURE_3D, levels, glInternalFormat, image.width, image.height, image.depth); - } - - state.texSubImage3D(_gl.TEXTURE_3D, 0, 0, 0, 0, image.width, image.height, image.depth, glFormat, glType, image.data); - } else { - state.texImage3D(_gl.TEXTURE_3D, 0, glInternalFormat, image.width, image.height, image.depth, 0, glFormat, glType, image.data); - } - } else if (texture.isFramebufferTexture) { - if (allocateMemory) { - if (useTexStorage) { - state.texStorage2D(_gl.TEXTURE_2D, levels, glInternalFormat, image.width, image.height); - } else { - let width = image.width, - height = image.height; - - for (let i = 0; i < levels; i++) { - state.texImage2D(_gl.TEXTURE_2D, i, glInternalFormat, width, height, 0, glFormat, glType, null); - width >>= 1; - height >>= 1; - } - } - } - } else { - // regular Texture (image, video, canvas) - // use manually created mipmaps if available - // if there are no manual mipmaps - // set 0 level mipmap and then use GL to generate other mipmap levels - if (mipmaps.length > 0 && supportsMips) { - if (useTexStorage && allocateMemory) { - state.texStorage2D(_gl.TEXTURE_2D, levels, glInternalFormat, mipmaps[0].width, mipmaps[0].height); - } - - for (let i = 0, il = mipmaps.length; i < il; i++) { - mipmap = mipmaps[i]; - - if (useTexStorage) { - state.texSubImage2D(_gl.TEXTURE_2D, i, 0, 0, glFormat, glType, mipmap); - } else { - state.texImage2D(_gl.TEXTURE_2D, i, glInternalFormat, glFormat, glType, mipmap); - } - } - - texture.generateMipmaps = false; - } else { - if (useTexStorage) { - if (allocateMemory) { - state.texStorage2D(_gl.TEXTURE_2D, levels, glInternalFormat, image.width, image.height); - } - - state.texSubImage2D(_gl.TEXTURE_2D, 0, 0, 0, glFormat, glType, image); - } else { - state.texImage2D(_gl.TEXTURE_2D, 0, glInternalFormat, glFormat, glType, image); - } - } - } - - if (textureNeedsGenerateMipmaps(texture, supportsMips)) { - generateMipmap(textureType); - } - - source.__currentVersion = source.version; - if (texture.onUpdate) texture.onUpdate(texture); - } - - textureProperties.__version = texture.version; - } - - function uploadCubeTexture(textureProperties, texture, slot) { - if (texture.image.length !== 6) return; - const forceUpload = initTexture(textureProperties, texture); - const source = texture.source; - state.activeTexture(_gl.TEXTURE0 + slot); - state.bindTexture(_gl.TEXTURE_CUBE_MAP, textureProperties.__webglTexture); - - if (source.version !== source.__currentVersion || forceUpload === true) { - _gl.pixelStorei(_gl.UNPACK_FLIP_Y_WEBGL, texture.flipY); - - _gl.pixelStorei(_gl.UNPACK_PREMULTIPLY_ALPHA_WEBGL, texture.premultiplyAlpha); - - _gl.pixelStorei(_gl.UNPACK_ALIGNMENT, texture.unpackAlignment); - - _gl.pixelStorei(_gl.UNPACK_COLORSPACE_CONVERSION_WEBGL, _gl.NONE); - - const isCompressed = texture.isCompressedTexture || texture.image[0].isCompressedTexture; - const isDataTexture = texture.image[0] && texture.image[0].isDataTexture; - const cubeImage = []; - - for (let i = 0; i < 6; i++) { - if (!isCompressed && !isDataTexture) { - cubeImage[i] = resizeImage(texture.image[i], false, true, maxCubemapSize); - } else { - cubeImage[i] = isDataTexture ? texture.image[i].image : texture.image[i]; - } - - cubeImage[i] = verifyColorSpace(texture, cubeImage[i]); - } - - const image = cubeImage[0], - supportsMips = isPowerOfTwo$1(image) || isWebGL2, - glFormat = utils.convert(texture.format, texture.encoding), - glType = utils.convert(texture.type), - glInternalFormat = getInternalFormat(texture.internalFormat, glFormat, glType, texture.encoding); - const useTexStorage = isWebGL2 && texture.isVideoTexture !== true; - const allocateMemory = textureProperties.__version === undefined; - let levels = getMipLevels(texture, image, supportsMips); - setTextureParameters(_gl.TEXTURE_CUBE_MAP, texture, supportsMips); - let mipmaps; - - if (isCompressed) { - if (useTexStorage && allocateMemory) { - state.texStorage2D(_gl.TEXTURE_CUBE_MAP, levels, glInternalFormat, image.width, image.height); - } - - for (let i = 0; i < 6; i++) { - mipmaps = cubeImage[i].mipmaps; - - for (let j = 0; j < mipmaps.length; j++) { - const mipmap = mipmaps[j]; - - if (texture.format !== RGBAFormat) { - if (glFormat !== null) { - if (useTexStorage) { - state.compressedTexSubImage2D(_gl.TEXTURE_CUBE_MAP_POSITIVE_X + i, j, 0, 0, mipmap.width, mipmap.height, glFormat, mipmap.data); - } else { - state.compressedTexImage2D(_gl.TEXTURE_CUBE_MAP_POSITIVE_X + i, j, glInternalFormat, mipmap.width, mipmap.height, 0, mipmap.data); - } - } else { - console.warn('THREE.WebGLRenderer: Attempt to load unsupported compressed texture format in .setTextureCube()'); - } - } else { - if (useTexStorage) { - state.texSubImage2D(_gl.TEXTURE_CUBE_MAP_POSITIVE_X + i, j, 0, 0, mipmap.width, mipmap.height, glFormat, glType, mipmap.data); - } else { - state.texImage2D(_gl.TEXTURE_CUBE_MAP_POSITIVE_X + i, j, glInternalFormat, mipmap.width, mipmap.height, 0, glFormat, glType, mipmap.data); - } - } - } - } - } else { - mipmaps = texture.mipmaps; - - if (useTexStorage && allocateMemory) { - // TODO: Uniformly handle mipmap definitions - // Normal textures and compressed cube textures define base level + mips with their mipmap array - // Uncompressed cube textures use their mipmap array only for mips (no base level) - if (mipmaps.length > 0) levels++; - state.texStorage2D(_gl.TEXTURE_CUBE_MAP, levels, glInternalFormat, cubeImage[0].width, cubeImage[0].height); - } - - for (let i = 0; i < 6; i++) { - if (isDataTexture) { - if (useTexStorage) { - state.texSubImage2D(_gl.TEXTURE_CUBE_MAP_POSITIVE_X + i, 0, 0, 0, cubeImage[i].width, cubeImage[i].height, glFormat, glType, cubeImage[i].data); - } else { - state.texImage2D(_gl.TEXTURE_CUBE_MAP_POSITIVE_X + i, 0, glInternalFormat, cubeImage[i].width, cubeImage[i].height, 0, glFormat, glType, cubeImage[i].data); - } - - for (let j = 0; j < mipmaps.length; j++) { - const mipmap = mipmaps[j]; - const mipmapImage = mipmap.image[i].image; - - if (useTexStorage) { - state.texSubImage2D(_gl.TEXTURE_CUBE_MAP_POSITIVE_X + i, j + 1, 0, 0, mipmapImage.width, mipmapImage.height, glFormat, glType, mipmapImage.data); - } else { - state.texImage2D(_gl.TEXTURE_CUBE_MAP_POSITIVE_X + i, j + 1, glInternalFormat, mipmapImage.width, mipmapImage.height, 0, glFormat, glType, mipmapImage.data); - } - } - } else { - if (useTexStorage) { - state.texSubImage2D(_gl.TEXTURE_CUBE_MAP_POSITIVE_X + i, 0, 0, 0, glFormat, glType, cubeImage[i]); - } else { - state.texImage2D(_gl.TEXTURE_CUBE_MAP_POSITIVE_X + i, 0, glInternalFormat, glFormat, glType, cubeImage[i]); - } - - for (let j = 0; j < mipmaps.length; j++) { - const mipmap = mipmaps[j]; - - if (useTexStorage) { - state.texSubImage2D(_gl.TEXTURE_CUBE_MAP_POSITIVE_X + i, j + 1, 0, 0, glFormat, glType, mipmap.image[i]); - } else { - state.texImage2D(_gl.TEXTURE_CUBE_MAP_POSITIVE_X + i, j + 1, glInternalFormat, glFormat, glType, mipmap.image[i]); - } - } - } - } - } - - if (textureNeedsGenerateMipmaps(texture, supportsMips)) { - // We assume images for cube map have the same size. - generateMipmap(_gl.TEXTURE_CUBE_MAP); - } - - source.__currentVersion = source.version; - if (texture.onUpdate) texture.onUpdate(texture); - } - - textureProperties.__version = texture.version; - } // Render targets - // Setup storage for target texture and bind it to correct framebuffer - - - function setupFrameBufferTexture(framebuffer, renderTarget, texture, attachment, textureTarget) { - const glFormat = utils.convert(texture.format, texture.encoding); - const glType = utils.convert(texture.type); - const glInternalFormat = getInternalFormat(texture.internalFormat, glFormat, glType, texture.encoding); - const renderTargetProperties = properties.get(renderTarget); - - if (!renderTargetProperties.__hasExternalTextures) { - if (textureTarget === _gl.TEXTURE_3D || textureTarget === _gl.TEXTURE_2D_ARRAY) { - state.texImage3D(textureTarget, 0, glInternalFormat, renderTarget.width, renderTarget.height, renderTarget.depth, 0, glFormat, glType, null); - } else { - state.texImage2D(textureTarget, 0, glInternalFormat, renderTarget.width, renderTarget.height, 0, glFormat, glType, null); - } - } - - state.bindFramebuffer(_gl.FRAMEBUFFER, framebuffer); - - if (useMultisampledRTT(renderTarget)) { - multisampledRTTExt.framebufferTexture2DMultisampleEXT(_gl.FRAMEBUFFER, attachment, textureTarget, properties.get(texture).__webglTexture, 0, getRenderTargetSamples(renderTarget)); - } else { - _gl.framebufferTexture2D(_gl.FRAMEBUFFER, attachment, textureTarget, properties.get(texture).__webglTexture, 0); - } - - state.bindFramebuffer(_gl.FRAMEBUFFER, null); - } // Setup storage for internal depth/stencil buffers and bind to correct framebuffer - - - function setupRenderBufferStorage(renderbuffer, renderTarget, isMultisample) { - _gl.bindRenderbuffer(_gl.RENDERBUFFER, renderbuffer); - - if (renderTarget.depthBuffer && !renderTarget.stencilBuffer) { - let glInternalFormat = _gl.DEPTH_COMPONENT16; - - if (isMultisample || useMultisampledRTT(renderTarget)) { - const depthTexture = renderTarget.depthTexture; - - if (depthTexture && depthTexture.isDepthTexture) { - if (depthTexture.type === FloatType) { - glInternalFormat = _gl.DEPTH_COMPONENT32F; - } else if (depthTexture.type === UnsignedIntType) { - glInternalFormat = _gl.DEPTH_COMPONENT24; - } - } - - const samples = getRenderTargetSamples(renderTarget); - - if (useMultisampledRTT(renderTarget)) { - multisampledRTTExt.renderbufferStorageMultisampleEXT(_gl.RENDERBUFFER, samples, glInternalFormat, renderTarget.width, renderTarget.height); - } else { - _gl.renderbufferStorageMultisample(_gl.RENDERBUFFER, samples, glInternalFormat, renderTarget.width, renderTarget.height); - } - } else { - _gl.renderbufferStorage(_gl.RENDERBUFFER, glInternalFormat, renderTarget.width, renderTarget.height); - } - - _gl.framebufferRenderbuffer(_gl.FRAMEBUFFER, _gl.DEPTH_ATTACHMENT, _gl.RENDERBUFFER, renderbuffer); - } else if (renderTarget.depthBuffer && renderTarget.stencilBuffer) { - const samples = getRenderTargetSamples(renderTarget); - - if (isMultisample && useMultisampledRTT(renderTarget) === false) { - _gl.renderbufferStorageMultisample(_gl.RENDERBUFFER, samples, _gl.DEPTH24_STENCIL8, renderTarget.width, renderTarget.height); - } else if (useMultisampledRTT(renderTarget)) { - multisampledRTTExt.renderbufferStorageMultisampleEXT(_gl.RENDERBUFFER, samples, _gl.DEPTH24_STENCIL8, renderTarget.width, renderTarget.height); - } else { - _gl.renderbufferStorage(_gl.RENDERBUFFER, _gl.DEPTH_STENCIL, renderTarget.width, renderTarget.height); - } - - _gl.framebufferRenderbuffer(_gl.FRAMEBUFFER, _gl.DEPTH_STENCIL_ATTACHMENT, _gl.RENDERBUFFER, renderbuffer); - } else { - // Use the first texture for MRT so far - const texture = renderTarget.isWebGLMultipleRenderTargets === true ? renderTarget.texture[0] : renderTarget.texture; - const glFormat = utils.convert(texture.format, texture.encoding); - const glType = utils.convert(texture.type); - const glInternalFormat = getInternalFormat(texture.internalFormat, glFormat, glType, texture.encoding); - const samples = getRenderTargetSamples(renderTarget); - - if (isMultisample && useMultisampledRTT(renderTarget) === false) { - _gl.renderbufferStorageMultisample(_gl.RENDERBUFFER, samples, glInternalFormat, renderTarget.width, renderTarget.height); - } else if (useMultisampledRTT(renderTarget)) { - multisampledRTTExt.renderbufferStorageMultisampleEXT(_gl.RENDERBUFFER, samples, glInternalFormat, renderTarget.width, renderTarget.height); - } else { - _gl.renderbufferStorage(_gl.RENDERBUFFER, glInternalFormat, renderTarget.width, renderTarget.height); - } - } - - _gl.bindRenderbuffer(_gl.RENDERBUFFER, null); - } // Setup resources for a Depth Texture for a FBO (needs an extension) - - - function setupDepthTexture(framebuffer, renderTarget) { - const isCube = renderTarget && renderTarget.isWebGLCubeRenderTarget; - if (isCube) throw new Error('Depth Texture with cube render targets is not supported'); - state.bindFramebuffer(_gl.FRAMEBUFFER, framebuffer); - - if (!(renderTarget.depthTexture && renderTarget.depthTexture.isDepthTexture)) { - throw new Error('renderTarget.depthTexture must be an instance of THREE.DepthTexture'); - } // upload an empty depth texture with framebuffer size - - - if (!properties.get(renderTarget.depthTexture).__webglTexture || renderTarget.depthTexture.image.width !== renderTarget.width || renderTarget.depthTexture.image.height !== renderTarget.height) { - renderTarget.depthTexture.image.width = renderTarget.width; - renderTarget.depthTexture.image.height = renderTarget.height; - renderTarget.depthTexture.needsUpdate = true; - } - - setTexture2D(renderTarget.depthTexture, 0); - - const webglDepthTexture = properties.get(renderTarget.depthTexture).__webglTexture; - - const samples = getRenderTargetSamples(renderTarget); - - if (renderTarget.depthTexture.format === DepthFormat) { - if (useMultisampledRTT(renderTarget)) { - multisampledRTTExt.framebufferTexture2DMultisampleEXT(_gl.FRAMEBUFFER, _gl.DEPTH_ATTACHMENT, _gl.TEXTURE_2D, webglDepthTexture, 0, samples); - } else { - _gl.framebufferTexture2D(_gl.FRAMEBUFFER, _gl.DEPTH_ATTACHMENT, _gl.TEXTURE_2D, webglDepthTexture, 0); - } - } else if (renderTarget.depthTexture.format === DepthStencilFormat) { - if (useMultisampledRTT(renderTarget)) { - multisampledRTTExt.framebufferTexture2DMultisampleEXT(_gl.FRAMEBUFFER, _gl.DEPTH_STENCIL_ATTACHMENT, _gl.TEXTURE_2D, webglDepthTexture, 0, samples); - } else { - _gl.framebufferTexture2D(_gl.FRAMEBUFFER, _gl.DEPTH_STENCIL_ATTACHMENT, _gl.TEXTURE_2D, webglDepthTexture, 0); - } - } else { - throw new Error('Unknown depthTexture format'); - } - } // Setup GL resources for a non-texture depth buffer - - - function setupDepthRenderbuffer(renderTarget) { - const renderTargetProperties = properties.get(renderTarget); - const isCube = renderTarget.isWebGLCubeRenderTarget === true; - - if (renderTarget.depthTexture && !renderTargetProperties.__autoAllocateDepthBuffer) { - if (isCube) throw new Error('target.depthTexture not supported in Cube render targets'); - setupDepthTexture(renderTargetProperties.__webglFramebuffer, renderTarget); - } else { - if (isCube) { - renderTargetProperties.__webglDepthbuffer = []; - - for (let i = 0; i < 6; i++) { - state.bindFramebuffer(_gl.FRAMEBUFFER, renderTargetProperties.__webglFramebuffer[i]); - renderTargetProperties.__webglDepthbuffer[i] = _gl.createRenderbuffer(); - setupRenderBufferStorage(renderTargetProperties.__webglDepthbuffer[i], renderTarget, false); - } - } else { - state.bindFramebuffer(_gl.FRAMEBUFFER, renderTargetProperties.__webglFramebuffer); - renderTargetProperties.__webglDepthbuffer = _gl.createRenderbuffer(); - setupRenderBufferStorage(renderTargetProperties.__webglDepthbuffer, renderTarget, false); - } - } - - state.bindFramebuffer(_gl.FRAMEBUFFER, null); - } // rebind framebuffer with external textures - - - function rebindTextures(renderTarget, colorTexture, depthTexture) { - const renderTargetProperties = properties.get(renderTarget); - - if (colorTexture !== undefined) { - setupFrameBufferTexture(renderTargetProperties.__webglFramebuffer, renderTarget, renderTarget.texture, _gl.COLOR_ATTACHMENT0, _gl.TEXTURE_2D); - } - - if (depthTexture !== undefined) { - setupDepthRenderbuffer(renderTarget); - } - } // Set up GL resources for the render target - - - function setupRenderTarget(renderTarget) { - const texture = renderTarget.texture; - const renderTargetProperties = properties.get(renderTarget); - const textureProperties = properties.get(texture); - renderTarget.addEventListener('dispose', onRenderTargetDispose); - - if (renderTarget.isWebGLMultipleRenderTargets !== true) { - if (textureProperties.__webglTexture === undefined) { - textureProperties.__webglTexture = _gl.createTexture(); - } - - textureProperties.__version = texture.version; - info.memory.textures++; - } - - const isCube = renderTarget.isWebGLCubeRenderTarget === true; - const isMultipleRenderTargets = renderTarget.isWebGLMultipleRenderTargets === true; - const supportsMips = isPowerOfTwo$1(renderTarget) || isWebGL2; // Setup framebuffer - - if (isCube) { - renderTargetProperties.__webglFramebuffer = []; - - for (let i = 0; i < 6; i++) { - renderTargetProperties.__webglFramebuffer[i] = _gl.createFramebuffer(); - } - } else { - renderTargetProperties.__webglFramebuffer = _gl.createFramebuffer(); - - if (isMultipleRenderTargets) { - if (capabilities.drawBuffers) { - const textures = renderTarget.texture; - - for (let i = 0, il = textures.length; i < il; i++) { - const attachmentProperties = properties.get(textures[i]); - - if (attachmentProperties.__webglTexture === undefined) { - attachmentProperties.__webglTexture = _gl.createTexture(); - info.memory.textures++; - } - } - } else { - console.warn('THREE.WebGLRenderer: WebGLMultipleRenderTargets can only be used with WebGL2 or WEBGL_draw_buffers extension.'); - } - } else if (isWebGL2 && renderTarget.samples > 0 && useMultisampledRTT(renderTarget) === false) { - renderTargetProperties.__webglMultisampledFramebuffer = _gl.createFramebuffer(); - renderTargetProperties.__webglColorRenderbuffer = _gl.createRenderbuffer(); - - _gl.bindRenderbuffer(_gl.RENDERBUFFER, renderTargetProperties.__webglColorRenderbuffer); - - const glFormat = utils.convert(texture.format, texture.encoding); - const glType = utils.convert(texture.type); - const glInternalFormat = getInternalFormat(texture.internalFormat, glFormat, glType, texture.encoding); - const samples = getRenderTargetSamples(renderTarget); - - _gl.renderbufferStorageMultisample(_gl.RENDERBUFFER, samples, glInternalFormat, renderTarget.width, renderTarget.height); - - state.bindFramebuffer(_gl.FRAMEBUFFER, renderTargetProperties.__webglMultisampledFramebuffer); - - _gl.framebufferRenderbuffer(_gl.FRAMEBUFFER, _gl.COLOR_ATTACHMENT0, _gl.RENDERBUFFER, renderTargetProperties.__webglColorRenderbuffer); - - _gl.bindRenderbuffer(_gl.RENDERBUFFER, null); - - if (renderTarget.depthBuffer) { - renderTargetProperties.__webglDepthRenderbuffer = _gl.createRenderbuffer(); - setupRenderBufferStorage(renderTargetProperties.__webglDepthRenderbuffer, renderTarget, true); - } - - state.bindFramebuffer(_gl.FRAMEBUFFER, null); - } - } // Setup color buffer - - - if (isCube) { - state.bindTexture(_gl.TEXTURE_CUBE_MAP, textureProperties.__webglTexture); - setTextureParameters(_gl.TEXTURE_CUBE_MAP, texture, supportsMips); - - for (let i = 0; i < 6; i++) { - setupFrameBufferTexture(renderTargetProperties.__webglFramebuffer[i], renderTarget, texture, _gl.COLOR_ATTACHMENT0, _gl.TEXTURE_CUBE_MAP_POSITIVE_X + i); - } - - if (textureNeedsGenerateMipmaps(texture, supportsMips)) { - generateMipmap(_gl.TEXTURE_CUBE_MAP); - } - - state.unbindTexture(); - } else if (isMultipleRenderTargets) { - const textures = renderTarget.texture; - - for (let i = 0, il = textures.length; i < il; i++) { - const attachment = textures[i]; - const attachmentProperties = properties.get(attachment); - state.bindTexture(_gl.TEXTURE_2D, attachmentProperties.__webglTexture); - setTextureParameters(_gl.TEXTURE_2D, attachment, supportsMips); - setupFrameBufferTexture(renderTargetProperties.__webglFramebuffer, renderTarget, attachment, _gl.COLOR_ATTACHMENT0 + i, _gl.TEXTURE_2D); - - if (textureNeedsGenerateMipmaps(attachment, supportsMips)) { - generateMipmap(_gl.TEXTURE_2D); - } - } - - state.unbindTexture(); - } else { - let glTextureType = _gl.TEXTURE_2D; - - if (renderTarget.isWebGL3DRenderTarget || renderTarget.isWebGLArrayRenderTarget) { - if (isWebGL2) { - glTextureType = renderTarget.isWebGL3DRenderTarget ? _gl.TEXTURE_3D : _gl.TEXTURE_2D_ARRAY; - } else { - console.error('THREE.WebGLTextures: THREE.Data3DTexture and THREE.DataArrayTexture only supported with WebGL2.'); - } - } - - state.bindTexture(glTextureType, textureProperties.__webglTexture); - setTextureParameters(glTextureType, texture, supportsMips); - setupFrameBufferTexture(renderTargetProperties.__webglFramebuffer, renderTarget, texture, _gl.COLOR_ATTACHMENT0, glTextureType); - - if (textureNeedsGenerateMipmaps(texture, supportsMips)) { - generateMipmap(glTextureType); - } - - state.unbindTexture(); - } // Setup depth and stencil buffers - - - if (renderTarget.depthBuffer) { - setupDepthRenderbuffer(renderTarget); - } - } - - function updateRenderTargetMipmap(renderTarget) { - const supportsMips = isPowerOfTwo$1(renderTarget) || isWebGL2; - const textures = renderTarget.isWebGLMultipleRenderTargets === true ? renderTarget.texture : [renderTarget.texture]; - - for (let i = 0, il = textures.length; i < il; i++) { - const texture = textures[i]; - - if (textureNeedsGenerateMipmaps(texture, supportsMips)) { - const target = renderTarget.isWebGLCubeRenderTarget ? _gl.TEXTURE_CUBE_MAP : _gl.TEXTURE_2D; - - const webglTexture = properties.get(texture).__webglTexture; - - state.bindTexture(target, webglTexture); - generateMipmap(target); - state.unbindTexture(); - } - } - } - - function updateMultisampleRenderTarget(renderTarget) { - if (isWebGL2 && renderTarget.samples > 0 && useMultisampledRTT(renderTarget) === false) { - const width = renderTarget.width; - const height = renderTarget.height; - let mask = _gl.COLOR_BUFFER_BIT; - const invalidationArray = [_gl.COLOR_ATTACHMENT0]; - const depthStyle = renderTarget.stencilBuffer ? _gl.DEPTH_STENCIL_ATTACHMENT : _gl.DEPTH_ATTACHMENT; - - if (renderTarget.depthBuffer) { - invalidationArray.push(depthStyle); - } - - const renderTargetProperties = properties.get(renderTarget); - const ignoreDepthValues = renderTargetProperties.__ignoreDepthValues !== undefined ? renderTargetProperties.__ignoreDepthValues : false; - - if (ignoreDepthValues === false) { - if (renderTarget.depthBuffer) mask |= _gl.DEPTH_BUFFER_BIT; - if (renderTarget.stencilBuffer) mask |= _gl.STENCIL_BUFFER_BIT; - } - - state.bindFramebuffer(_gl.READ_FRAMEBUFFER, renderTargetProperties.__webglMultisampledFramebuffer); - state.bindFramebuffer(_gl.DRAW_FRAMEBUFFER, renderTargetProperties.__webglFramebuffer); - - if (ignoreDepthValues === true) { - _gl.invalidateFramebuffer(_gl.READ_FRAMEBUFFER, [depthStyle]); - - _gl.invalidateFramebuffer(_gl.DRAW_FRAMEBUFFER, [depthStyle]); - } - - _gl.blitFramebuffer(0, 0, width, height, 0, 0, width, height, mask, _gl.NEAREST); - - if (supportsInvalidateFramebuffer) { - _gl.invalidateFramebuffer(_gl.READ_FRAMEBUFFER, invalidationArray); - } - - state.bindFramebuffer(_gl.READ_FRAMEBUFFER, null); - state.bindFramebuffer(_gl.DRAW_FRAMEBUFFER, renderTargetProperties.__webglMultisampledFramebuffer); - } - } - - function getRenderTargetSamples(renderTarget) { - return Math.min(maxSamples, renderTarget.samples); - } - - function useMultisampledRTT(renderTarget) { - const renderTargetProperties = properties.get(renderTarget); - return isWebGL2 && renderTarget.samples > 0 && extensions.has('WEBGL_multisampled_render_to_texture') === true && renderTargetProperties.__useRenderToTexture !== false; - } - - function updateVideoTexture(texture) { - const frame = info.render.frame; // Check the last frame we updated the VideoTexture - - if (_videoTextures.get(texture) !== frame) { - _videoTextures.set(texture, frame); - - texture.update(); - } - } - - function verifyColorSpace(texture, image) { - const encoding = texture.encoding; - const format = texture.format; - const type = texture.type; - if (texture.isCompressedTexture === true || texture.isVideoTexture === true || texture.format === _SRGBAFormat) return image; - - if (encoding !== LinearEncoding) { - // sRGB - if (encoding === sRGBEncoding) { - if (isWebGL2 === false) { - // in WebGL 1, try to use EXT_sRGB extension and unsized formats - if (extensions.has('EXT_sRGB') === true && format === RGBAFormat) { - texture.format = _SRGBAFormat; // it's not possible to generate mips in WebGL 1 with this extension - - texture.minFilter = LinearFilter; - texture.generateMipmaps = false; - } else { - // slow fallback (CPU decode) - image = ImageUtils.sRGBToLinear(image); - } - } else { - // in WebGL 2 uncompressed textures can only be sRGB encoded if they have the RGBA8 format - if (format !== RGBAFormat || type !== UnsignedByteType) { - console.warn('THREE.WebGLTextures: sRGB encoded textures have to use RGBAFormat and UnsignedByteType.'); - } - } - } else { - console.error('THREE.WebGLTextures: Unsupported texture encoding:', encoding); - } - } - - return image; - } // - - - this.allocateTextureUnit = allocateTextureUnit; - this.resetTextureUnits = resetTextureUnits; - this.setTexture2D = setTexture2D; - this.setTexture2DArray = setTexture2DArray; - this.setTexture3D = setTexture3D; - this.setTextureCube = setTextureCube; - this.rebindTextures = rebindTextures; - this.setupRenderTarget = setupRenderTarget; - this.updateRenderTargetMipmap = updateRenderTargetMipmap; - this.updateMultisampleRenderTarget = updateMultisampleRenderTarget; - this.setupDepthRenderbuffer = setupDepthRenderbuffer; - this.setupFrameBufferTexture = setupFrameBufferTexture; - this.useMultisampledRTT = useMultisampledRTT; - } - - function WebGLUtils(gl, extensions, capabilities) { - const isWebGL2 = capabilities.isWebGL2; - - function convert(p, encoding = null) { - let extension; - if (p === UnsignedByteType) return gl.UNSIGNED_BYTE; - if (p === UnsignedShort4444Type) return gl.UNSIGNED_SHORT_4_4_4_4; - if (p === UnsignedShort5551Type) return gl.UNSIGNED_SHORT_5_5_5_1; - if (p === ByteType) return gl.BYTE; - if (p === ShortType) return gl.SHORT; - if (p === UnsignedShortType) return gl.UNSIGNED_SHORT; - if (p === IntType) return gl.INT; - if (p === UnsignedIntType) return gl.UNSIGNED_INT; - if (p === FloatType) return gl.FLOAT; - - if (p === HalfFloatType) { - if (isWebGL2) return gl.HALF_FLOAT; - extension = extensions.get('OES_texture_half_float'); - - if (extension !== null) { - return extension.HALF_FLOAT_OES; - } else { - return null; - } - } - - if (p === AlphaFormat) return gl.ALPHA; - if (p === RGBAFormat) return gl.RGBA; - if (p === LuminanceFormat) return gl.LUMINANCE; - if (p === LuminanceAlphaFormat) return gl.LUMINANCE_ALPHA; - if (p === DepthFormat) return gl.DEPTH_COMPONENT; - if (p === DepthStencilFormat) return gl.DEPTH_STENCIL; - if (p === RedFormat) return gl.RED; - - if (p === RGBFormat) { - console.warn('THREE.WebGLRenderer: THREE.RGBFormat has been removed. Use THREE.RGBAFormat instead. https://github.com/mrdoob/three.js/pull/23228'); - return gl.RGBA; - } // WebGL 1 sRGB fallback - - - if (p === _SRGBAFormat) { - extension = extensions.get('EXT_sRGB'); - - if (extension !== null) { - return extension.SRGB_ALPHA_EXT; - } else { - return null; - } - } // WebGL2 formats. - - - if (p === RedIntegerFormat) return gl.RED_INTEGER; - if (p === RGFormat) return gl.RG; - if (p === RGIntegerFormat) return gl.RG_INTEGER; - if (p === RGBAIntegerFormat) return gl.RGBA_INTEGER; // S3TC - - if (p === RGB_S3TC_DXT1_Format || p === RGBA_S3TC_DXT1_Format || p === RGBA_S3TC_DXT3_Format || p === RGBA_S3TC_DXT5_Format) { - if (encoding === sRGBEncoding) { - extension = extensions.get('WEBGL_compressed_texture_s3tc_srgb'); - - if (extension !== null) { - if (p === RGB_S3TC_DXT1_Format) return extension.COMPRESSED_SRGB_S3TC_DXT1_EXT; - if (p === RGBA_S3TC_DXT1_Format) return extension.COMPRESSED_SRGB_ALPHA_S3TC_DXT1_EXT; - if (p === RGBA_S3TC_DXT3_Format) return extension.COMPRESSED_SRGB_ALPHA_S3TC_DXT3_EXT; - if (p === RGBA_S3TC_DXT5_Format) return extension.COMPRESSED_SRGB_ALPHA_S3TC_DXT5_EXT; - } else { - return null; - } - } else { - extension = extensions.get('WEBGL_compressed_texture_s3tc'); - - if (extension !== null) { - if (p === RGB_S3TC_DXT1_Format) return extension.COMPRESSED_RGB_S3TC_DXT1_EXT; - if (p === RGBA_S3TC_DXT1_Format) return extension.COMPRESSED_RGBA_S3TC_DXT1_EXT; - if (p === RGBA_S3TC_DXT3_Format) return extension.COMPRESSED_RGBA_S3TC_DXT3_EXT; - if (p === RGBA_S3TC_DXT5_Format) return extension.COMPRESSED_RGBA_S3TC_DXT5_EXT; - } else { - return null; - } - } - } // PVRTC - - - if (p === RGB_PVRTC_4BPPV1_Format || p === RGB_PVRTC_2BPPV1_Format || p === RGBA_PVRTC_4BPPV1_Format || p === RGBA_PVRTC_2BPPV1_Format) { - extension = extensions.get('WEBGL_compressed_texture_pvrtc'); - - if (extension !== null) { - if (p === RGB_PVRTC_4BPPV1_Format) return extension.COMPRESSED_RGB_PVRTC_4BPPV1_IMG; - if (p === RGB_PVRTC_2BPPV1_Format) return extension.COMPRESSED_RGB_PVRTC_2BPPV1_IMG; - if (p === RGBA_PVRTC_4BPPV1_Format) return extension.COMPRESSED_RGBA_PVRTC_4BPPV1_IMG; - if (p === RGBA_PVRTC_2BPPV1_Format) return extension.COMPRESSED_RGBA_PVRTC_2BPPV1_IMG; - } else { - return null; - } - } // ETC1 - - - if (p === RGB_ETC1_Format) { - extension = extensions.get('WEBGL_compressed_texture_etc1'); - - if (extension !== null) { - return extension.COMPRESSED_RGB_ETC1_WEBGL; - } else { - return null; - } - } // ETC2 - - - if (p === RGB_ETC2_Format || p === RGBA_ETC2_EAC_Format) { - extension = extensions.get('WEBGL_compressed_texture_etc'); - - if (extension !== null) { - if (p === RGB_ETC2_Format) return encoding === sRGBEncoding ? extension.COMPRESSED_SRGB8_ETC2 : extension.COMPRESSED_RGB8_ETC2; - if (p === RGBA_ETC2_EAC_Format) return encoding === sRGBEncoding ? extension.COMPRESSED_SRGB8_ALPHA8_ETC2_EAC : extension.COMPRESSED_RGBA8_ETC2_EAC; - } else { - return null; - } - } // ASTC - - - if (p === RGBA_ASTC_4x4_Format || p === RGBA_ASTC_5x4_Format || p === RGBA_ASTC_5x5_Format || p === RGBA_ASTC_6x5_Format || p === RGBA_ASTC_6x6_Format || p === RGBA_ASTC_8x5_Format || p === RGBA_ASTC_8x6_Format || p === RGBA_ASTC_8x8_Format || p === RGBA_ASTC_10x5_Format || p === RGBA_ASTC_10x6_Format || p === RGBA_ASTC_10x8_Format || p === RGBA_ASTC_10x10_Format || p === RGBA_ASTC_12x10_Format || p === RGBA_ASTC_12x12_Format) { - extension = extensions.get('WEBGL_compressed_texture_astc'); - - if (extension !== null) { - if (p === RGBA_ASTC_4x4_Format) return encoding === sRGBEncoding ? extension.COMPRESSED_SRGB8_ALPHA8_ASTC_4x4_KHR : extension.COMPRESSED_RGBA_ASTC_4x4_KHR; - if (p === RGBA_ASTC_5x4_Format) return encoding === sRGBEncoding ? extension.COMPRESSED_SRGB8_ALPHA8_ASTC_5x4_KHR : extension.COMPRESSED_RGBA_ASTC_5x4_KHR; - if (p === RGBA_ASTC_5x5_Format) return encoding === sRGBEncoding ? extension.COMPRESSED_SRGB8_ALPHA8_ASTC_5x5_KHR : extension.COMPRESSED_RGBA_ASTC_5x5_KHR; - if (p === RGBA_ASTC_6x5_Format) return encoding === sRGBEncoding ? extension.COMPRESSED_SRGB8_ALPHA8_ASTC_6x5_KHR : extension.COMPRESSED_RGBA_ASTC_6x5_KHR; - if (p === RGBA_ASTC_6x6_Format) return encoding === sRGBEncoding ? extension.COMPRESSED_SRGB8_ALPHA8_ASTC_6x6_KHR : extension.COMPRESSED_RGBA_ASTC_6x6_KHR; - if (p === RGBA_ASTC_8x5_Format) return encoding === sRGBEncoding ? extension.COMPRESSED_SRGB8_ALPHA8_ASTC_8x5_KHR : extension.COMPRESSED_RGBA_ASTC_8x5_KHR; - if (p === RGBA_ASTC_8x6_Format) return encoding === sRGBEncoding ? extension.COMPRESSED_SRGB8_ALPHA8_ASTC_8x6_KHR : extension.COMPRESSED_RGBA_ASTC_8x6_KHR; - if (p === RGBA_ASTC_8x8_Format) return encoding === sRGBEncoding ? extension.COMPRESSED_SRGB8_ALPHA8_ASTC_8x8_KHR : extension.COMPRESSED_RGBA_ASTC_8x8_KHR; - if (p === RGBA_ASTC_10x5_Format) return encoding === sRGBEncoding ? extension.COMPRESSED_SRGB8_ALPHA8_ASTC_10x5_KHR : extension.COMPRESSED_RGBA_ASTC_10x5_KHR; - if (p === RGBA_ASTC_10x6_Format) return encoding === sRGBEncoding ? extension.COMPRESSED_SRGB8_ALPHA8_ASTC_10x6_KHR : extension.COMPRESSED_RGBA_ASTC_10x6_KHR; - if (p === RGBA_ASTC_10x8_Format) return encoding === sRGBEncoding ? extension.COMPRESSED_SRGB8_ALPHA8_ASTC_10x8_KHR : extension.COMPRESSED_RGBA_ASTC_10x8_KHR; - if (p === RGBA_ASTC_10x10_Format) return encoding === sRGBEncoding ? extension.COMPRESSED_SRGB8_ALPHA8_ASTC_10x10_KHR : extension.COMPRESSED_RGBA_ASTC_10x10_KHR; - if (p === RGBA_ASTC_12x10_Format) return encoding === sRGBEncoding ? extension.COMPRESSED_SRGB8_ALPHA8_ASTC_12x10_KHR : extension.COMPRESSED_RGBA_ASTC_12x10_KHR; - if (p === RGBA_ASTC_12x12_Format) return encoding === sRGBEncoding ? extension.COMPRESSED_SRGB8_ALPHA8_ASTC_12x12_KHR : extension.COMPRESSED_RGBA_ASTC_12x12_KHR; - } else { - return null; - } - } // BPTC - - - if (p === RGBA_BPTC_Format) { - extension = extensions.get('EXT_texture_compression_bptc'); - - if (extension !== null) { - if (p === RGBA_BPTC_Format) return encoding === sRGBEncoding ? extension.COMPRESSED_SRGB_ALPHA_BPTC_UNORM_EXT : extension.COMPRESSED_RGBA_BPTC_UNORM_EXT; - } else { - return null; - } - } // - - - if (p === UnsignedInt248Type) { - if (isWebGL2) return gl.UNSIGNED_INT_24_8; - extension = extensions.get('WEBGL_depth_texture'); - - if (extension !== null) { - return extension.UNSIGNED_INT_24_8_WEBGL; - } else { - return null; - } - } // if "p" can't be resolved, assume the user defines a WebGL constant as a string (fallback/workaround for packed RGB formats) - - - return gl[p] !== undefined ? gl[p] : null; - } - - return { - convert: convert - }; - } - - class ArrayCamera extends PerspectiveCamera { - constructor(array = []) { - super(); - this.cameras = array; - } - - } - - ArrayCamera.prototype.isArrayCamera = true; - - class Group extends Object3D { - constructor() { - super(); - this.type = 'Group'; - } - - } - - Group.prototype.isGroup = true; - - const _moveEvent = { - type: 'move' - }; - - class WebXRController { - constructor() { - this._targetRay = null; - this._grip = null; - this._hand = null; - } - - getHandSpace() { - if (this._hand === null) { - this._hand = new Group(); - this._hand.matrixAutoUpdate = false; - this._hand.visible = false; - this._hand.joints = {}; - this._hand.inputState = { - pinching: false - }; - } - - return this._hand; - } - - getTargetRaySpace() { - if (this._targetRay === null) { - this._targetRay = new Group(); - this._targetRay.matrixAutoUpdate = false; - this._targetRay.visible = false; - this._targetRay.hasLinearVelocity = false; - this._targetRay.linearVelocity = new Vector3(); - this._targetRay.hasAngularVelocity = false; - this._targetRay.angularVelocity = new Vector3(); - } - - return this._targetRay; - } - - getGripSpace() { - if (this._grip === null) { - this._grip = new Group(); - this._grip.matrixAutoUpdate = false; - this._grip.visible = false; - this._grip.hasLinearVelocity = false; - this._grip.linearVelocity = new Vector3(); - this._grip.hasAngularVelocity = false; - this._grip.angularVelocity = new Vector3(); - } - - return this._grip; - } - - dispatchEvent(event) { - if (this._targetRay !== null) { - this._targetRay.dispatchEvent(event); - } - - if (this._grip !== null) { - this._grip.dispatchEvent(event); - } - - if (this._hand !== null) { - this._hand.dispatchEvent(event); - } - - return this; - } - - disconnect(inputSource) { - this.dispatchEvent({ - type: 'disconnected', - data: inputSource - }); - - if (this._targetRay !== null) { - this._targetRay.visible = false; - } - - if (this._grip !== null) { - this._grip.visible = false; - } - - if (this._hand !== null) { - this._hand.visible = false; - } - - return this; - } - - update(inputSource, frame, referenceSpace) { - let inputPose = null; - let gripPose = null; - let handPose = null; - const targetRay = this._targetRay; - const grip = this._grip; - const hand = this._hand; - - if (inputSource && frame.session.visibilityState !== 'visible-blurred') { - if (targetRay !== null) { - inputPose = frame.getPose(inputSource.targetRaySpace, referenceSpace); - - if (inputPose !== null) { - targetRay.matrix.fromArray(inputPose.transform.matrix); - targetRay.matrix.decompose(targetRay.position, targetRay.rotation, targetRay.scale); - - if (inputPose.linearVelocity) { - targetRay.hasLinearVelocity = true; - targetRay.linearVelocity.copy(inputPose.linearVelocity); - } else { - targetRay.hasLinearVelocity = false; - } - - if (inputPose.angularVelocity) { - targetRay.hasAngularVelocity = true; - targetRay.angularVelocity.copy(inputPose.angularVelocity); - } else { - targetRay.hasAngularVelocity = false; - } - - this.dispatchEvent(_moveEvent); - } - } - - if (hand && inputSource.hand) { - handPose = true; - - for (const inputjoint of inputSource.hand.values()) { - // Update the joints groups with the XRJoint poses - const jointPose = frame.getJointPose(inputjoint, referenceSpace); - - if (hand.joints[inputjoint.jointName] === undefined) { - // The transform of this joint will be updated with the joint pose on each frame - const joint = new Group(); - joint.matrixAutoUpdate = false; - joint.visible = false; - hand.joints[inputjoint.jointName] = joint; // ?? - - hand.add(joint); - } - - const joint = hand.joints[inputjoint.jointName]; - - if (jointPose !== null) { - joint.matrix.fromArray(jointPose.transform.matrix); - joint.matrix.decompose(joint.position, joint.rotation, joint.scale); - joint.jointRadius = jointPose.radius; - } - - joint.visible = jointPose !== null; - } // Custom events - // Check pinchz - - - const indexTip = hand.joints['index-finger-tip']; - const thumbTip = hand.joints['thumb-tip']; - const distance = indexTip.position.distanceTo(thumbTip.position); - const distanceToPinch = 0.02; - const threshold = 0.005; - - if (hand.inputState.pinching && distance > distanceToPinch + threshold) { - hand.inputState.pinching = false; - this.dispatchEvent({ - type: 'pinchend', - handedness: inputSource.handedness, - target: this - }); - } else if (!hand.inputState.pinching && distance <= distanceToPinch - threshold) { - hand.inputState.pinching = true; - this.dispatchEvent({ - type: 'pinchstart', - handedness: inputSource.handedness, - target: this - }); - } - } else { - if (grip !== null && inputSource.gripSpace) { - gripPose = frame.getPose(inputSource.gripSpace, referenceSpace); - - if (gripPose !== null) { - grip.matrix.fromArray(gripPose.transform.matrix); - grip.matrix.decompose(grip.position, grip.rotation, grip.scale); - - if (gripPose.linearVelocity) { - grip.hasLinearVelocity = true; - grip.linearVelocity.copy(gripPose.linearVelocity); - } else { - grip.hasLinearVelocity = false; - } - - if (gripPose.angularVelocity) { - grip.hasAngularVelocity = true; - grip.angularVelocity.copy(gripPose.angularVelocity); - } else { - grip.hasAngularVelocity = false; - } - } - } - } - } - - if (targetRay !== null) { - targetRay.visible = inputPose !== null; - } - - if (grip !== null) { - grip.visible = gripPose !== null; - } - - if (hand !== null) { - hand.visible = handPose !== null; - } - - return this; - } - - } - - class DepthTexture extends Texture { - constructor(width, height, type, mapping, wrapS, wrapT, magFilter, minFilter, anisotropy, format) { - format = format !== undefined ? format : DepthFormat; - - if (format !== DepthFormat && format !== DepthStencilFormat) { - throw new Error('DepthTexture format must be either THREE.DepthFormat or THREE.DepthStencilFormat'); - } - - if (type === undefined && format === DepthFormat) type = UnsignedShortType; - if (type === undefined && format === DepthStencilFormat) type = UnsignedInt248Type; - super(null, mapping, wrapS, wrapT, magFilter, minFilter, format, type, anisotropy); - this.image = { - width: width, - height: height - }; - this.magFilter = magFilter !== undefined ? magFilter : NearestFilter; - this.minFilter = minFilter !== undefined ? minFilter : NearestFilter; - this.flipY = false; - this.generateMipmaps = false; - } - - } - - DepthTexture.prototype.isDepthTexture = true; - - class WebXRManager extends EventDispatcher { - constructor(renderer, gl) { - super(); - const scope = this; - let session = null; - let framebufferScaleFactor = 1.0; - let referenceSpace = null; - let referenceSpaceType = 'local-floor'; - let customReferenceSpace = null; - let pose = null; - let glBinding = null; - let glProjLayer = null; - let glBaseLayer = null; - let xrFrame = null; - const attributes = gl.getContextAttributes(); - let initialRenderTarget = null; - let newRenderTarget = null; - const controllers = []; - const inputSourcesMap = new Map(); // - - const cameraL = new PerspectiveCamera(); - cameraL.layers.enable(1); - cameraL.viewport = new Vector4(); - const cameraR = new PerspectiveCamera(); - cameraR.layers.enable(2); - cameraR.viewport = new Vector4(); - const cameras = [cameraL, cameraR]; - const cameraVR = new ArrayCamera(); - cameraVR.layers.enable(1); - cameraVR.layers.enable(2); - let _currentDepthNear = null; - let _currentDepthFar = null; // - - this.cameraAutoUpdate = true; - this.enabled = false; - this.isPresenting = false; - - this.getController = function (index) { - let controller = controllers[index]; - - if (controller === undefined) { - controller = new WebXRController(); - controllers[index] = controller; - } - - return controller.getTargetRaySpace(); - }; - - this.getControllerGrip = function (index) { - let controller = controllers[index]; - - if (controller === undefined) { - controller = new WebXRController(); - controllers[index] = controller; - } - - return controller.getGripSpace(); - }; - - this.getHand = function (index) { - let controller = controllers[index]; - - if (controller === undefined) { - controller = new WebXRController(); - controllers[index] = controller; - } - - return controller.getHandSpace(); - }; // - - - function onSessionEvent(event) { - const controller = inputSourcesMap.get(event.inputSource); - - if (controller) { - controller.dispatchEvent({ - type: event.type, - data: event.inputSource - }); - } - } - - function onSessionEnd() { - inputSourcesMap.forEach(function (controller, inputSource) { - controller.disconnect(inputSource); - }); - inputSourcesMap.clear(); - _currentDepthNear = null; - _currentDepthFar = null; // restore framebuffer/rendering state - - renderer.setRenderTarget(initialRenderTarget); - glBaseLayer = null; - glProjLayer = null; - glBinding = null; - session = null; - newRenderTarget = null; // - - animation.stop(); - scope.isPresenting = false; - scope.dispatchEvent({ - type: 'sessionend' - }); - } - - this.setFramebufferScaleFactor = function (value) { - framebufferScaleFactor = value; - - if (scope.isPresenting === true) { - console.warn('THREE.WebXRManager: Cannot change framebuffer scale while presenting.'); - } - }; - - this.setReferenceSpaceType = function (value) { - referenceSpaceType = value; - - if (scope.isPresenting === true) { - console.warn('THREE.WebXRManager: Cannot change reference space type while presenting.'); - } - }; - - this.getReferenceSpace = function () { - return customReferenceSpace || referenceSpace; - }; - - this.setReferenceSpace = function (space) { - customReferenceSpace = space; - }; - - this.getBaseLayer = function () { - return glProjLayer !== null ? glProjLayer : glBaseLayer; - }; - - this.getBinding = function () { - return glBinding; - }; - - this.getFrame = function () { - return xrFrame; - }; - - this.getSession = function () { - return session; - }; - - this.setSession = async function (value) { - session = value; - - if (session !== null) { - initialRenderTarget = renderer.getRenderTarget(); - session.addEventListener('select', onSessionEvent); - session.addEventListener('selectstart', onSessionEvent); - session.addEventListener('selectend', onSessionEvent); - session.addEventListener('squeeze', onSessionEvent); - session.addEventListener('squeezestart', onSessionEvent); - session.addEventListener('squeezeend', onSessionEvent); - session.addEventListener('end', onSessionEnd); - session.addEventListener('inputsourceschange', onInputSourcesChange); - - if (attributes.xrCompatible !== true) { - await gl.makeXRCompatible(); - } - - if (session.renderState.layers === undefined || renderer.capabilities.isWebGL2 === false) { - const layerInit = { - antialias: session.renderState.layers === undefined ? attributes.antialias : true, - alpha: attributes.alpha, - depth: attributes.depth, - stencil: attributes.stencil, - framebufferScaleFactor: framebufferScaleFactor - }; - glBaseLayer = new XRWebGLLayer(session, gl, layerInit); - session.updateRenderState({ - baseLayer: glBaseLayer - }); - newRenderTarget = new WebGLRenderTarget(glBaseLayer.framebufferWidth, glBaseLayer.framebufferHeight, { - format: RGBAFormat, - type: UnsignedByteType, - encoding: renderer.outputEncoding - }); - } else { - let depthFormat = null; - let depthType = null; - let glDepthFormat = null; - - if (attributes.depth) { - glDepthFormat = attributes.stencil ? gl.DEPTH24_STENCIL8 : gl.DEPTH_COMPONENT24; - depthFormat = attributes.stencil ? DepthStencilFormat : DepthFormat; - depthType = attributes.stencil ? UnsignedInt248Type : UnsignedShortType; - } - - const projectionlayerInit = { - colorFormat: renderer.outputEncoding === sRGBEncoding ? gl.SRGB8_ALPHA8 : gl.RGBA8, - depthFormat: glDepthFormat, - scaleFactor: framebufferScaleFactor - }; - glBinding = new XRWebGLBinding(session, gl); - glProjLayer = glBinding.createProjectionLayer(projectionlayerInit); - session.updateRenderState({ - layers: [glProjLayer] - }); - newRenderTarget = new WebGLRenderTarget(glProjLayer.textureWidth, glProjLayer.textureHeight, { - format: RGBAFormat, - type: UnsignedByteType, - depthTexture: new DepthTexture(glProjLayer.textureWidth, glProjLayer.textureHeight, depthType, undefined, undefined, undefined, undefined, undefined, undefined, depthFormat), - stencilBuffer: attributes.stencil, - encoding: renderer.outputEncoding, - samples: attributes.antialias ? 4 : 0 - }); - const renderTargetProperties = renderer.properties.get(newRenderTarget); - renderTargetProperties.__ignoreDepthValues = glProjLayer.ignoreDepthValues; - } - - newRenderTarget.isXRRenderTarget = true; // TODO Remove this when possible, see #23278 - // Set foveation to maximum. - - this.setFoveation(1.0); - referenceSpace = await session.requestReferenceSpace(referenceSpaceType); - animation.setContext(session); - animation.start(); - scope.isPresenting = true; - scope.dispatchEvent({ - type: 'sessionstart' - }); - } - }; - - function onInputSourcesChange(event) { - const inputSources = session.inputSources; // Assign controllers to available inputSources - - for (let i = 0; i < inputSources.length; i++) { - const index = inputSources[i].handedness === 'right' ? 1 : 0; - inputSourcesMap.set(inputSources[i], controllers[index]); - } // Notify disconnected - - - for (let i = 0; i < event.removed.length; i++) { - const inputSource = event.removed[i]; - const controller = inputSourcesMap.get(inputSource); - - if (controller) { - controller.dispatchEvent({ - type: 'disconnected', - data: inputSource - }); - inputSourcesMap.delete(inputSource); - } - } // Notify connected - - - for (let i = 0; i < event.added.length; i++) { - const inputSource = event.added[i]; - const controller = inputSourcesMap.get(inputSource); - - if (controller) { - controller.dispatchEvent({ - type: 'connected', - data: inputSource - }); - } - } - } // - - - const cameraLPos = new Vector3(); - const cameraRPos = new Vector3(); - /** - * Assumes 2 cameras that are parallel and share an X-axis, and that - * the cameras' projection and world matrices have already been set. - * And that near and far planes are identical for both cameras. - * Visualization of this technique: https://computergraphics.stackexchange.com/a/4765 - */ - - function setProjectionFromUnion(camera, cameraL, cameraR) { - cameraLPos.setFromMatrixPosition(cameraL.matrixWorld); - cameraRPos.setFromMatrixPosition(cameraR.matrixWorld); - const ipd = cameraLPos.distanceTo(cameraRPos); - const projL = cameraL.projectionMatrix.elements; - const projR = cameraR.projectionMatrix.elements; // VR systems will have identical far and near planes, and - // most likely identical top and bottom frustum extents. - // Use the left camera for these values. - - const near = projL[14] / (projL[10] - 1); - const far = projL[14] / (projL[10] + 1); - const topFov = (projL[9] + 1) / projL[5]; - const bottomFov = (projL[9] - 1) / projL[5]; - const leftFov = (projL[8] - 1) / projL[0]; - const rightFov = (projR[8] + 1) / projR[0]; - const left = near * leftFov; - const right = near * rightFov; // Calculate the new camera's position offset from the - // left camera. xOffset should be roughly half `ipd`. - - const zOffset = ipd / (-leftFov + rightFov); - const xOffset = zOffset * -leftFov; // TODO: Better way to apply this offset? - - cameraL.matrixWorld.decompose(camera.position, camera.quaternion, camera.scale); - camera.translateX(xOffset); - camera.translateZ(zOffset); - camera.matrixWorld.compose(camera.position, camera.quaternion, camera.scale); - camera.matrixWorldInverse.copy(camera.matrixWorld).invert(); // Find the union of the frustum values of the cameras and scale - // the values so that the near plane's position does not change in world space, - // although must now be relative to the new union camera. - - const near2 = near + zOffset; - const far2 = far + zOffset; - const left2 = left - xOffset; - const right2 = right + (ipd - xOffset); - const top2 = topFov * far / far2 * near2; - const bottom2 = bottomFov * far / far2 * near2; - camera.projectionMatrix.makePerspective(left2, right2, top2, bottom2, near2, far2); - } - - function updateCamera(camera, parent) { - if (parent === null) { - camera.matrixWorld.copy(camera.matrix); - } else { - camera.matrixWorld.multiplyMatrices(parent.matrixWorld, camera.matrix); - } - - camera.matrixWorldInverse.copy(camera.matrixWorld).invert(); - } - - this.updateCamera = function (camera) { - if (session === null) return; - cameraVR.near = cameraR.near = cameraL.near = camera.near; - cameraVR.far = cameraR.far = cameraL.far = camera.far; - - if (_currentDepthNear !== cameraVR.near || _currentDepthFar !== cameraVR.far) { - // Note that the new renderState won't apply until the next frame. See #18320 - session.updateRenderState({ - depthNear: cameraVR.near, - depthFar: cameraVR.far - }); - _currentDepthNear = cameraVR.near; - _currentDepthFar = cameraVR.far; - } - - const parent = camera.parent; - const cameras = cameraVR.cameras; - updateCamera(cameraVR, parent); - - for (let i = 0; i < cameras.length; i++) { - updateCamera(cameras[i], parent); - } - - cameraVR.matrixWorld.decompose(cameraVR.position, cameraVR.quaternion, cameraVR.scale); // update user camera and its children - - camera.position.copy(cameraVR.position); - camera.quaternion.copy(cameraVR.quaternion); - camera.scale.copy(cameraVR.scale); - camera.matrix.copy(cameraVR.matrix); - camera.matrixWorld.copy(cameraVR.matrixWorld); - const children = camera.children; - - for (let i = 0, l = children.length; i < l; i++) { - children[i].updateMatrixWorld(true); - } // update projection matrix for proper view frustum culling - - - if (cameras.length === 2) { - setProjectionFromUnion(cameraVR, cameraL, cameraR); - } else { - // assume single camera setup (AR) - cameraVR.projectionMatrix.copy(cameraL.projectionMatrix); - } - }; - - this.getCamera = function () { - return cameraVR; - }; - - this.getFoveation = function () { - if (glProjLayer !== null) { - return glProjLayer.fixedFoveation; - } - - if (glBaseLayer !== null) { - return glBaseLayer.fixedFoveation; - } - - return undefined; - }; - - this.setFoveation = function (foveation) { - // 0 = no foveation = full resolution - // 1 = maximum foveation = the edges render at lower resolution - if (glProjLayer !== null) { - glProjLayer.fixedFoveation = foveation; - } - - if (glBaseLayer !== null && glBaseLayer.fixedFoveation !== undefined) { - glBaseLayer.fixedFoveation = foveation; - } - }; // Animation Loop - - - let onAnimationFrameCallback = null; - - function onAnimationFrame(time, frame) { - pose = frame.getViewerPose(customReferenceSpace || referenceSpace); - xrFrame = frame; - - if (pose !== null) { - const views = pose.views; - - if (glBaseLayer !== null) { - renderer.setRenderTargetFramebuffer(newRenderTarget, glBaseLayer.framebuffer); - renderer.setRenderTarget(newRenderTarget); - } - - let cameraVRNeedsUpdate = false; // check if it's necessary to rebuild cameraVR's camera list - - if (views.length !== cameraVR.cameras.length) { - cameraVR.cameras.length = 0; - cameraVRNeedsUpdate = true; - } - - for (let i = 0; i < views.length; i++) { - const view = views[i]; - let viewport = null; - - if (glBaseLayer !== null) { - viewport = glBaseLayer.getViewport(view); - } else { - const glSubImage = glBinding.getViewSubImage(glProjLayer, view); - viewport = glSubImage.viewport; // For side-by-side projection, we only produce a single texture for both eyes. - - if (i === 0) { - renderer.setRenderTargetTextures(newRenderTarget, glSubImage.colorTexture, glProjLayer.ignoreDepthValues ? undefined : glSubImage.depthStencilTexture); - renderer.setRenderTarget(newRenderTarget); - } - } - - const camera = cameras[i]; - camera.matrix.fromArray(view.transform.matrix); - camera.projectionMatrix.fromArray(view.projectionMatrix); - camera.viewport.set(viewport.x, viewport.y, viewport.width, viewport.height); - - if (i === 0) { - cameraVR.matrix.copy(camera.matrix); - } - - if (cameraVRNeedsUpdate === true) { - cameraVR.cameras.push(camera); - } - } - } // - - - const inputSources = session.inputSources; - - for (let i = 0; i < controllers.length; i++) { - const inputSource = inputSources[i]; - const controller = inputSourcesMap.get(inputSource); - - if (controller !== undefined) { - controller.update(inputSource, frame, customReferenceSpace || referenceSpace); - } - } - - if (onAnimationFrameCallback) onAnimationFrameCallback(time, frame); - xrFrame = null; - } - - const animation = new WebGLAnimation(); - animation.setAnimationLoop(onAnimationFrame); - - this.setAnimationLoop = function (callback) { - onAnimationFrameCallback = callback; - }; - - this.dispose = function () {}; - } - - } - - function WebGLMaterials(renderer, properties) { - function refreshFogUniforms(uniforms, fog) { - uniforms.fogColor.value.copy(fog.color); - - if (fog.isFog) { - uniforms.fogNear.value = fog.near; - uniforms.fogFar.value = fog.far; - } else if (fog.isFogExp2) { - uniforms.fogDensity.value = fog.density; - } - } - - function refreshMaterialUniforms(uniforms, material, pixelRatio, height, transmissionRenderTarget) { - if (material.isMeshBasicMaterial) { - refreshUniformsCommon(uniforms, material); - } else if (material.isMeshLambertMaterial) { - refreshUniformsCommon(uniforms, material); - } else if (material.isMeshToonMaterial) { - refreshUniformsCommon(uniforms, material); - refreshUniformsToon(uniforms, material); - } else if (material.isMeshPhongMaterial) { - refreshUniformsCommon(uniforms, material); - refreshUniformsPhong(uniforms, material); - } else if (material.isMeshStandardMaterial) { - refreshUniformsCommon(uniforms, material); - refreshUniformsStandard(uniforms, material); - - if (material.isMeshPhysicalMaterial) { - refreshUniformsPhysical(uniforms, material, transmissionRenderTarget); - } - } else if (material.isMeshMatcapMaterial) { - refreshUniformsCommon(uniforms, material); - refreshUniformsMatcap(uniforms, material); - } else if (material.isMeshDepthMaterial) { - refreshUniformsCommon(uniforms, material); - } else if (material.isMeshDistanceMaterial) { - refreshUniformsCommon(uniforms, material); - refreshUniformsDistance(uniforms, material); - } else if (material.isMeshNormalMaterial) { - refreshUniformsCommon(uniforms, material); - } else if (material.isLineBasicMaterial) { - refreshUniformsLine(uniforms, material); - - if (material.isLineDashedMaterial) { - refreshUniformsDash(uniforms, material); - } - } else if (material.isPointsMaterial) { - refreshUniformsPoints(uniforms, material, pixelRatio, height); - } else if (material.isSpriteMaterial) { - refreshUniformsSprites(uniforms, material); - } else if (material.isShadowMaterial) { - uniforms.color.value.copy(material.color); - uniforms.opacity.value = material.opacity; - } else if (material.isShaderMaterial) { - material.uniformsNeedUpdate = false; // #15581 - } - } - - function refreshUniformsCommon(uniforms, material) { - uniforms.opacity.value = material.opacity; - - if (material.color) { - uniforms.diffuse.value.copy(material.color); - } - - if (material.emissive) { - uniforms.emissive.value.copy(material.emissive).multiplyScalar(material.emissiveIntensity); - } - - if (material.map) { - uniforms.map.value = material.map; - } - - if (material.alphaMap) { - uniforms.alphaMap.value = material.alphaMap; - } - - if (material.bumpMap) { - uniforms.bumpMap.value = material.bumpMap; - uniforms.bumpScale.value = material.bumpScale; - if (material.side === BackSide) uniforms.bumpScale.value *= -1; - } - - if (material.displacementMap) { - uniforms.displacementMap.value = material.displacementMap; - uniforms.displacementScale.value = material.displacementScale; - uniforms.displacementBias.value = material.displacementBias; - } - - if (material.emissiveMap) { - uniforms.emissiveMap.value = material.emissiveMap; - } - - if (material.normalMap) { - uniforms.normalMap.value = material.normalMap; - uniforms.normalScale.value.copy(material.normalScale); - if (material.side === BackSide) uniforms.normalScale.value.negate(); - } - - if (material.specularMap) { - uniforms.specularMap.value = material.specularMap; - } - - if (material.alphaTest > 0) { - uniforms.alphaTest.value = material.alphaTest; - } - - const envMap = properties.get(material).envMap; - - if (envMap) { - uniforms.envMap.value = envMap; - uniforms.flipEnvMap.value = envMap.isCubeTexture && envMap.isRenderTargetTexture === false ? -1 : 1; - uniforms.reflectivity.value = material.reflectivity; - uniforms.ior.value = material.ior; - uniforms.refractionRatio.value = material.refractionRatio; - } - - if (material.lightMap) { - uniforms.lightMap.value = material.lightMap; // artist-friendly light intensity scaling factor - - const scaleFactor = renderer.physicallyCorrectLights !== true ? Math.PI : 1; - uniforms.lightMapIntensity.value = material.lightMapIntensity * scaleFactor; - } - - if (material.aoMap) { - uniforms.aoMap.value = material.aoMap; - uniforms.aoMapIntensity.value = material.aoMapIntensity; - } // uv repeat and offset setting priorities - // 1. color map - // 2. specular map - // 3. displacementMap map - // 4. normal map - // 5. bump map - // 6. roughnessMap map - // 7. metalnessMap map - // 8. alphaMap map - // 9. emissiveMap map - // 10. clearcoat map - // 11. clearcoat normal map - // 12. clearcoat roughnessMap map - // 13. specular intensity map - // 14. specular tint map - // 15. transmission map - // 16. thickness map - - - let uvScaleMap; - - if (material.map) { - uvScaleMap = material.map; - } else if (material.specularMap) { - uvScaleMap = material.specularMap; - } else if (material.displacementMap) { - uvScaleMap = material.displacementMap; - } else if (material.normalMap) { - uvScaleMap = material.normalMap; - } else if (material.bumpMap) { - uvScaleMap = material.bumpMap; - } else if (material.roughnessMap) { - uvScaleMap = material.roughnessMap; - } else if (material.metalnessMap) { - uvScaleMap = material.metalnessMap; - } else if (material.alphaMap) { - uvScaleMap = material.alphaMap; - } else if (material.emissiveMap) { - uvScaleMap = material.emissiveMap; - } else if (material.clearcoatMap) { - uvScaleMap = material.clearcoatMap; - } else if (material.clearcoatNormalMap) { - uvScaleMap = material.clearcoatNormalMap; - } else if (material.clearcoatRoughnessMap) { - uvScaleMap = material.clearcoatRoughnessMap; - } else if (material.specularIntensityMap) { - uvScaleMap = material.specularIntensityMap; - } else if (material.specularColorMap) { - uvScaleMap = material.specularColorMap; - } else if (material.transmissionMap) { - uvScaleMap = material.transmissionMap; - } else if (material.thicknessMap) { - uvScaleMap = material.thicknessMap; - } else if (material.sheenColorMap) { - uvScaleMap = material.sheenColorMap; - } else if (material.sheenRoughnessMap) { - uvScaleMap = material.sheenRoughnessMap; - } - - if (uvScaleMap !== undefined) { - // backwards compatibility - if (uvScaleMap.isWebGLRenderTarget) { - uvScaleMap = uvScaleMap.texture; - } - - if (uvScaleMap.matrixAutoUpdate === true) { - uvScaleMap.updateMatrix(); - } - - uniforms.uvTransform.value.copy(uvScaleMap.matrix); - } // uv repeat and offset setting priorities for uv2 - // 1. ao map - // 2. light map - - - let uv2ScaleMap; - - if (material.aoMap) { - uv2ScaleMap = material.aoMap; - } else if (material.lightMap) { - uv2ScaleMap = material.lightMap; - } - - if (uv2ScaleMap !== undefined) { - // backwards compatibility - if (uv2ScaleMap.isWebGLRenderTarget) { - uv2ScaleMap = uv2ScaleMap.texture; - } - - if (uv2ScaleMap.matrixAutoUpdate === true) { - uv2ScaleMap.updateMatrix(); - } - - uniforms.uv2Transform.value.copy(uv2ScaleMap.matrix); - } - } - - function refreshUniformsLine(uniforms, material) { - uniforms.diffuse.value.copy(material.color); - uniforms.opacity.value = material.opacity; - } - - function refreshUniformsDash(uniforms, material) { - uniforms.dashSize.value = material.dashSize; - uniforms.totalSize.value = material.dashSize + material.gapSize; - uniforms.scale.value = material.scale; - } - - function refreshUniformsPoints(uniforms, material, pixelRatio, height) { - uniforms.diffuse.value.copy(material.color); - uniforms.opacity.value = material.opacity; - uniforms.size.value = material.size * pixelRatio; - uniforms.scale.value = height * 0.5; - - if (material.map) { - uniforms.map.value = material.map; - } - - if (material.alphaMap) { - uniforms.alphaMap.value = material.alphaMap; - } - - if (material.alphaTest > 0) { - uniforms.alphaTest.value = material.alphaTest; - } // uv repeat and offset setting priorities - // 1. color map - // 2. alpha map - - - let uvScaleMap; - - if (material.map) { - uvScaleMap = material.map; - } else if (material.alphaMap) { - uvScaleMap = material.alphaMap; - } - - if (uvScaleMap !== undefined) { - if (uvScaleMap.matrixAutoUpdate === true) { - uvScaleMap.updateMatrix(); - } - - uniforms.uvTransform.value.copy(uvScaleMap.matrix); - } - } - - function refreshUniformsSprites(uniforms, material) { - uniforms.diffuse.value.copy(material.color); - uniforms.opacity.value = material.opacity; - uniforms.rotation.value = material.rotation; - - if (material.map) { - uniforms.map.value = material.map; - } - - if (material.alphaMap) { - uniforms.alphaMap.value = material.alphaMap; - } - - if (material.alphaTest > 0) { - uniforms.alphaTest.value = material.alphaTest; - } // uv repeat and offset setting priorities - // 1. color map - // 2. alpha map - - - let uvScaleMap; - - if (material.map) { - uvScaleMap = material.map; - } else if (material.alphaMap) { - uvScaleMap = material.alphaMap; - } - - if (uvScaleMap !== undefined) { - if (uvScaleMap.matrixAutoUpdate === true) { - uvScaleMap.updateMatrix(); - } - - uniforms.uvTransform.value.copy(uvScaleMap.matrix); - } - } - - function refreshUniformsPhong(uniforms, material) { - uniforms.specular.value.copy(material.specular); - uniforms.shininess.value = Math.max(material.shininess, 1e-4); // to prevent pow( 0.0, 0.0 ) - } - - function refreshUniformsToon(uniforms, material) { - if (material.gradientMap) { - uniforms.gradientMap.value = material.gradientMap; - } - } - - function refreshUniformsStandard(uniforms, material) { - uniforms.roughness.value = material.roughness; - uniforms.metalness.value = material.metalness; - - if (material.roughnessMap) { - uniforms.roughnessMap.value = material.roughnessMap; - } - - if (material.metalnessMap) { - uniforms.metalnessMap.value = material.metalnessMap; - } - - const envMap = properties.get(material).envMap; - - if (envMap) { - //uniforms.envMap.value = material.envMap; // part of uniforms common - uniforms.envMapIntensity.value = material.envMapIntensity; - } - } - - function refreshUniformsPhysical(uniforms, material, transmissionRenderTarget) { - uniforms.ior.value = material.ior; // also part of uniforms common - - if (material.sheen > 0) { - uniforms.sheenColor.value.copy(material.sheenColor).multiplyScalar(material.sheen); - uniforms.sheenRoughness.value = material.sheenRoughness; - - if (material.sheenColorMap) { - uniforms.sheenColorMap.value = material.sheenColorMap; - } - - if (material.sheenRoughnessMap) { - uniforms.sheenRoughnessMap.value = material.sheenRoughnessMap; - } - } - - if (material.clearcoat > 0) { - uniforms.clearcoat.value = material.clearcoat; - uniforms.clearcoatRoughness.value = material.clearcoatRoughness; - - if (material.clearcoatMap) { - uniforms.clearcoatMap.value = material.clearcoatMap; - } - - if (material.clearcoatRoughnessMap) { - uniforms.clearcoatRoughnessMap.value = material.clearcoatRoughnessMap; - } - - if (material.clearcoatNormalMap) { - uniforms.clearcoatNormalScale.value.copy(material.clearcoatNormalScale); - uniforms.clearcoatNormalMap.value = material.clearcoatNormalMap; - - if (material.side === BackSide) { - uniforms.clearcoatNormalScale.value.negate(); - } - } - } - - if (material.transmission > 0) { - uniforms.transmission.value = material.transmission; - uniforms.transmissionSamplerMap.value = transmissionRenderTarget.texture; - uniforms.transmissionSamplerSize.value.set(transmissionRenderTarget.width, transmissionRenderTarget.height); - - if (material.transmissionMap) { - uniforms.transmissionMap.value = material.transmissionMap; - } - - uniforms.thickness.value = material.thickness; - - if (material.thicknessMap) { - uniforms.thicknessMap.value = material.thicknessMap; - } - - uniforms.attenuationDistance.value = material.attenuationDistance; - uniforms.attenuationColor.value.copy(material.attenuationColor); - } - - uniforms.specularIntensity.value = material.specularIntensity; - uniforms.specularColor.value.copy(material.specularColor); - - if (material.specularIntensityMap) { - uniforms.specularIntensityMap.value = material.specularIntensityMap; - } - - if (material.specularColorMap) { - uniforms.specularColorMap.value = material.specularColorMap; - } - } - - function refreshUniformsMatcap(uniforms, material) { - if (material.matcap) { - uniforms.matcap.value = material.matcap; - } - } - - function refreshUniformsDistance(uniforms, material) { - uniforms.referencePosition.value.copy(material.referencePosition); - uniforms.nearDistance.value = material.nearDistance; - uniforms.farDistance.value = material.farDistance; - } - - return { - refreshFogUniforms: refreshFogUniforms, - refreshMaterialUniforms: refreshMaterialUniforms - }; - } - - function createCanvasElement() { - const canvas = createElementNS('canvas'); - canvas.style.display = 'block'; - return canvas; - } - - function WebGLRenderer(parameters = {}) { - const _canvas = parameters.canvas !== undefined ? parameters.canvas : createCanvasElement(), - _context = parameters.context !== undefined ? parameters.context : null, - _depth = parameters.depth !== undefined ? parameters.depth : true, - _stencil = parameters.stencil !== undefined ? parameters.stencil : true, - _antialias = parameters.antialias !== undefined ? parameters.antialias : false, - _premultipliedAlpha = parameters.premultipliedAlpha !== undefined ? parameters.premultipliedAlpha : true, - _preserveDrawingBuffer = parameters.preserveDrawingBuffer !== undefined ? parameters.preserveDrawingBuffer : false, - _powerPreference = parameters.powerPreference !== undefined ? parameters.powerPreference : 'default', - _failIfMajorPerformanceCaveat = parameters.failIfMajorPerformanceCaveat !== undefined ? parameters.failIfMajorPerformanceCaveat : false; - - let _alpha; - - if (_context !== null) { - _alpha = _context.getContextAttributes().alpha; - } else { - _alpha = parameters.alpha !== undefined ? parameters.alpha : false; - } - - let currentRenderList = null; - let currentRenderState = null; // render() can be called from within a callback triggered by another render. - // We track this so that the nested render call gets its list and state isolated from the parent render call. - - const renderListStack = []; - const renderStateStack = []; // public properties - - this.domElement = _canvas; // Debug configuration container - - this.debug = { - /** - * Enables error checking and reporting when shader programs are being compiled - * @type {boolean} - */ - checkShaderErrors: true - }; // clearing - - this.autoClear = true; - this.autoClearColor = true; - this.autoClearDepth = true; - this.autoClearStencil = true; // scene graph - - this.sortObjects = true; // user-defined clipping - - this.clippingPlanes = []; - this.localClippingEnabled = false; // physically based shading - - this.outputEncoding = LinearEncoding; // physical lights - - this.physicallyCorrectLights = false; // tone mapping - - this.toneMapping = NoToneMapping; - this.toneMappingExposure = 1.0; // internal properties - - const _this = this; - - let _isContextLost = false; // internal state cache - - let _currentActiveCubeFace = 0; - let _currentActiveMipmapLevel = 0; - let _currentRenderTarget = null; - - let _currentMaterialId = -1; - - let _currentCamera = null; - - const _currentViewport = new Vector4(); - - const _currentScissor = new Vector4(); - - let _currentScissorTest = null; // - - let _width = _canvas.width; - let _height = _canvas.height; - let _pixelRatio = 1; - let _opaqueSort = null; - let _transparentSort = null; - - const _viewport = new Vector4(0, 0, _width, _height); - - const _scissor = new Vector4(0, 0, _width, _height); - - let _scissorTest = false; // frustum - - const _frustum = new Frustum(); // clipping - - - let _clippingEnabled = false; - let _localClippingEnabled = false; // transmission - - let _transmissionRenderTarget = null; // camera matrices cache - - const _projScreenMatrix = new Matrix4(); - - const _vector2 = new Vector2(); - - const _vector3 = new Vector3(); - - const _emptyScene = { - background: null, - fog: null, - environment: null, - overrideMaterial: null, - isScene: true - }; - - function getTargetPixelRatio() { - return _currentRenderTarget === null ? _pixelRatio : 1; - } // initialize - - - let _gl = _context; - - function getContext(contextNames, contextAttributes) { - for (let i = 0; i < contextNames.length; i++) { - const contextName = contextNames[i]; - - const context = _canvas.getContext(contextName, contextAttributes); - - if (context !== null) return context; - } - - return null; - } - - try { - const contextAttributes = { - alpha: true, - depth: _depth, - stencil: _stencil, - antialias: _antialias, - premultipliedAlpha: _premultipliedAlpha, - preserveDrawingBuffer: _preserveDrawingBuffer, - powerPreference: _powerPreference, - failIfMajorPerformanceCaveat: _failIfMajorPerformanceCaveat - }; // OffscreenCanvas does not have setAttribute, see #22811 - - if ('setAttribute' in _canvas) _canvas.setAttribute('data-engine', `three.js r${REVISION}`); // event listeners must be registered before WebGL context is created, see #12753 - - _canvas.addEventListener('webglcontextlost', onContextLost, false); - - _canvas.addEventListener('webglcontextrestored', onContextRestore, false); - - if (_gl === null) { - const contextNames = ['webgl2', 'webgl', 'experimental-webgl']; - - if (_this.isWebGL1Renderer === true) { - contextNames.shift(); - } - - _gl = getContext(contextNames, contextAttributes); - - if (_gl === null) { - if (getContext(contextNames)) { - throw new Error('Error creating WebGL context with your selected attributes.'); - } else { - throw new Error('Error creating WebGL context.'); - } - } - } // Some experimental-webgl implementations do not have getShaderPrecisionFormat - - - if (_gl.getShaderPrecisionFormat === undefined) { - _gl.getShaderPrecisionFormat = function () { - return { - 'rangeMin': 1, - 'rangeMax': 1, - 'precision': 1 - }; - }; - } - } catch (error) { - console.error('THREE.WebGLRenderer: ' + error.message); - throw error; - } - - let extensions, capabilities, state, info; - let properties, textures, cubemaps, cubeuvmaps, attributes, geometries, objects; - let programCache, materials, renderLists, renderStates, clipping, shadowMap; - let background, morphtargets, bufferRenderer, indexedBufferRenderer; - let utils, bindingStates; - - function initGLContext() { - extensions = new WebGLExtensions(_gl); - capabilities = new WebGLCapabilities(_gl, extensions, parameters); - extensions.init(capabilities); - utils = new WebGLUtils(_gl, extensions, capabilities); - state = new WebGLState(_gl, extensions, capabilities); - info = new WebGLInfo(_gl); - properties = new WebGLProperties(); - textures = new WebGLTextures(_gl, extensions, state, properties, capabilities, utils, info); - cubemaps = new WebGLCubeMaps(_this); - cubeuvmaps = new WebGLCubeUVMaps(_this); - attributes = new WebGLAttributes(_gl, capabilities); - bindingStates = new WebGLBindingStates(_gl, extensions, attributes, capabilities); - geometries = new WebGLGeometries(_gl, attributes, info, bindingStates); - objects = new WebGLObjects(_gl, geometries, attributes, info); - morphtargets = new WebGLMorphtargets(_gl, capabilities, textures); - clipping = new WebGLClipping(properties); - programCache = new WebGLPrograms(_this, cubemaps, cubeuvmaps, extensions, capabilities, bindingStates, clipping); - materials = new WebGLMaterials(_this, properties); - renderLists = new WebGLRenderLists(); - renderStates = new WebGLRenderStates(extensions, capabilities); - background = new WebGLBackground(_this, cubemaps, state, objects, _alpha, _premultipliedAlpha); - shadowMap = new WebGLShadowMap(_this, objects, capabilities); - bufferRenderer = new WebGLBufferRenderer(_gl, extensions, info, capabilities); - indexedBufferRenderer = new WebGLIndexedBufferRenderer(_gl, extensions, info, capabilities); - info.programs = programCache.programs; - _this.capabilities = capabilities; - _this.extensions = extensions; - _this.properties = properties; - _this.renderLists = renderLists; - _this.shadowMap = shadowMap; - _this.state = state; - _this.info = info; - } - - initGLContext(); // xr - - const xr = new WebXRManager(_this, _gl); - this.xr = xr; // API - - this.getContext = function () { - return _gl; - }; - - this.getContextAttributes = function () { - return _gl.getContextAttributes(); - }; - - this.forceContextLoss = function () { - const extension = extensions.get('WEBGL_lose_context'); - if (extension) extension.loseContext(); - }; - - this.forceContextRestore = function () { - const extension = extensions.get('WEBGL_lose_context'); - if (extension) extension.restoreContext(); - }; - - this.getPixelRatio = function () { - return _pixelRatio; - }; - - this.setPixelRatio = function (value) { - if (value === undefined) return; - _pixelRatio = value; - this.setSize(_width, _height, false); - }; - - this.getSize = function (target) { - return target.set(_width, _height); - }; - - this.setSize = function (width, height, updateStyle) { - if (xr.isPresenting) { - console.warn('THREE.WebGLRenderer: Can\'t change size while VR device is presenting.'); - return; - } - - _width = width; - _height = height; - _canvas.width = Math.floor(width * _pixelRatio); - _canvas.height = Math.floor(height * _pixelRatio); - - if (updateStyle !== false) { - _canvas.style.width = width + 'px'; - _canvas.style.height = height + 'px'; - } - - this.setViewport(0, 0, width, height); - }; - - this.getDrawingBufferSize = function (target) { - return target.set(_width * _pixelRatio, _height * _pixelRatio).floor(); - }; - - this.setDrawingBufferSize = function (width, height, pixelRatio) { - _width = width; - _height = height; - _pixelRatio = pixelRatio; - _canvas.width = Math.floor(width * pixelRatio); - _canvas.height = Math.floor(height * pixelRatio); - this.setViewport(0, 0, width, height); - }; - - this.getCurrentViewport = function (target) { - return target.copy(_currentViewport); - }; - - this.getViewport = function (target) { - return target.copy(_viewport); - }; - - this.setViewport = function (x, y, width, height) { - if (x.isVector4) { - _viewport.set(x.x, x.y, x.z, x.w); - } else { - _viewport.set(x, y, width, height); - } - - state.viewport(_currentViewport.copy(_viewport).multiplyScalar(_pixelRatio).floor()); - }; - - this.getScissor = function (target) { - return target.copy(_scissor); - }; - - this.setScissor = function (x, y, width, height) { - if (x.isVector4) { - _scissor.set(x.x, x.y, x.z, x.w); - } else { - _scissor.set(x, y, width, height); - } - - state.scissor(_currentScissor.copy(_scissor).multiplyScalar(_pixelRatio).floor()); - }; - - this.getScissorTest = function () { - return _scissorTest; - }; - - this.setScissorTest = function (boolean) { - state.setScissorTest(_scissorTest = boolean); - }; - - this.setOpaqueSort = function (method) { - _opaqueSort = method; - }; - - this.setTransparentSort = function (method) { - _transparentSort = method; - }; // Clearing - - - this.getClearColor = function (target) { - return target.copy(background.getClearColor()); - }; - - this.setClearColor = function () { - background.setClearColor.apply(background, arguments); - }; - - this.getClearAlpha = function () { - return background.getClearAlpha(); - }; - - this.setClearAlpha = function () { - background.setClearAlpha.apply(background, arguments); - }; - - this.clear = function (color = true, depth = true, stencil = true) { - let bits = 0; - if (color) bits |= _gl.COLOR_BUFFER_BIT; - if (depth) bits |= _gl.DEPTH_BUFFER_BIT; - if (stencil) bits |= _gl.STENCIL_BUFFER_BIT; - - _gl.clear(bits); - }; - - this.clearColor = function () { - this.clear(true, false, false); - }; - - this.clearDepth = function () { - this.clear(false, true, false); - }; - - this.clearStencil = function () { - this.clear(false, false, true); - }; // - - - this.dispose = function () { - _canvas.removeEventListener('webglcontextlost', onContextLost, false); - - _canvas.removeEventListener('webglcontextrestored', onContextRestore, false); - - renderLists.dispose(); - renderStates.dispose(); - properties.dispose(); - cubemaps.dispose(); - cubeuvmaps.dispose(); - objects.dispose(); - bindingStates.dispose(); - programCache.dispose(); - xr.dispose(); - xr.removeEventListener('sessionstart', onXRSessionStart); - xr.removeEventListener('sessionend', onXRSessionEnd); - - if (_transmissionRenderTarget) { - _transmissionRenderTarget.dispose(); - - _transmissionRenderTarget = null; - } - - animation.stop(); - }; // Events - - - function onContextLost(event) { - event.preventDefault(); - console.log('THREE.WebGLRenderer: Context Lost.'); - _isContextLost = true; - } - - function - /* event */ - onContextRestore() { - console.log('THREE.WebGLRenderer: Context Restored.'); - _isContextLost = false; - const infoAutoReset = info.autoReset; - const shadowMapEnabled = shadowMap.enabled; - const shadowMapAutoUpdate = shadowMap.autoUpdate; - const shadowMapNeedsUpdate = shadowMap.needsUpdate; - const shadowMapType = shadowMap.type; - initGLContext(); - info.autoReset = infoAutoReset; - shadowMap.enabled = shadowMapEnabled; - shadowMap.autoUpdate = shadowMapAutoUpdate; - shadowMap.needsUpdate = shadowMapNeedsUpdate; - shadowMap.type = shadowMapType; - } - - function onMaterialDispose(event) { - const material = event.target; - material.removeEventListener('dispose', onMaterialDispose); - deallocateMaterial(material); - } // Buffer deallocation - - - function deallocateMaterial(material) { - releaseMaterialProgramReferences(material); - properties.remove(material); - } - - function releaseMaterialProgramReferences(material) { - const programs = properties.get(material).programs; - - if (programs !== undefined) { - programs.forEach(function (program) { - programCache.releaseProgram(program); - }); - - if (material.isShaderMaterial) { - programCache.releaseShaderCache(material); - } - } - } // Buffer rendering - - - this.renderBufferDirect = function (camera, scene, geometry, material, object, group) { - if (scene === null) scene = _emptyScene; // renderBufferDirect second parameter used to be fog (could be null) - - const frontFaceCW = object.isMesh && object.matrixWorld.determinant() < 0; - const program = setProgram(camera, scene, geometry, material, object); - state.setMaterial(material, frontFaceCW); // - - let index = geometry.index; - const position = geometry.attributes.position; // - - if (index === null) { - if (position === undefined || position.count === 0) return; - } else if (index.count === 0) { - return; - } // - - - let rangeFactor = 1; - - if (material.wireframe === true) { - index = geometries.getWireframeAttribute(geometry); - rangeFactor = 2; - } - - bindingStates.setup(object, material, program, geometry, index); - let attribute; - let renderer = bufferRenderer; - - if (index !== null) { - attribute = attributes.get(index); - renderer = indexedBufferRenderer; - renderer.setIndex(attribute); - } // - - - const dataCount = index !== null ? index.count : position.count; - const rangeStart = geometry.drawRange.start * rangeFactor; - const rangeCount = geometry.drawRange.count * rangeFactor; - const groupStart = group !== null ? group.start * rangeFactor : 0; - const groupCount = group !== null ? group.count * rangeFactor : Infinity; - const drawStart = Math.max(rangeStart, groupStart); - const drawEnd = Math.min(dataCount, rangeStart + rangeCount, groupStart + groupCount) - 1; - const drawCount = Math.max(0, drawEnd - drawStart + 1); - if (drawCount === 0) return; // - - if (object.isMesh) { - if (material.wireframe === true) { - state.setLineWidth(material.wireframeLinewidth * getTargetPixelRatio()); - renderer.setMode(_gl.LINES); - } else { - renderer.setMode(_gl.TRIANGLES); - } - } else if (object.isLine) { - let lineWidth = material.linewidth; - if (lineWidth === undefined) lineWidth = 1; // Not using Line*Material - - state.setLineWidth(lineWidth * getTargetPixelRatio()); - - if (object.isLineSegments) { - renderer.setMode(_gl.LINES); - } else if (object.isLineLoop) { - renderer.setMode(_gl.LINE_LOOP); - } else { - renderer.setMode(_gl.LINE_STRIP); - } - } else if (object.isPoints) { - renderer.setMode(_gl.POINTS); - } else if (object.isSprite) { - renderer.setMode(_gl.TRIANGLES); - } - - if (object.isInstancedMesh) { - renderer.renderInstances(drawStart, drawCount, object.count); - } else if (geometry.isInstancedBufferGeometry) { - const instanceCount = Math.min(geometry.instanceCount, geometry._maxInstanceCount); - renderer.renderInstances(drawStart, drawCount, instanceCount); - } else { - renderer.render(drawStart, drawCount); - } - }; // Compile - - - this.compile = function (scene, camera) { - currentRenderState = renderStates.get(scene); - currentRenderState.init(); - renderStateStack.push(currentRenderState); - scene.traverseVisible(function (object) { - if (object.isLight && object.layers.test(camera.layers)) { - currentRenderState.pushLight(object); - - if (object.castShadow) { - currentRenderState.pushShadow(object); - } - } - }); - currentRenderState.setupLights(_this.physicallyCorrectLights); - scene.traverse(function (object) { - const material = object.material; - - if (material) { - if (Array.isArray(material)) { - for (let i = 0; i < material.length; i++) { - const material2 = material[i]; - getProgram(material2, scene, object); - } - } else { - getProgram(material, scene, object); - } - } - }); - renderStateStack.pop(); - currentRenderState = null; - }; // Animation Loop - - - let onAnimationFrameCallback = null; - - function onAnimationFrame(time) { - if (onAnimationFrameCallback) onAnimationFrameCallback(time); - } - - function onXRSessionStart() { - animation.stop(); - } - - function onXRSessionEnd() { - animation.start(); - } - - const animation = new WebGLAnimation(); - animation.setAnimationLoop(onAnimationFrame); - if (typeof self !== 'undefined') animation.setContext(self); - - this.setAnimationLoop = function (callback) { - onAnimationFrameCallback = callback; - xr.setAnimationLoop(callback); - callback === null ? animation.stop() : animation.start(); - }; - - xr.addEventListener('sessionstart', onXRSessionStart); - xr.addEventListener('sessionend', onXRSessionEnd); // Rendering - - this.render = function (scene, camera) { - if (camera !== undefined && camera.isCamera !== true) { - console.error('THREE.WebGLRenderer.render: camera is not an instance of THREE.Camera.'); - return; - } - - if (_isContextLost === true) return; // update scene graph - - if (scene.autoUpdate === true) scene.updateMatrixWorld(); // update camera matrices and frustum - - if (camera.parent === null) camera.updateMatrixWorld(); - - if (xr.enabled === true && xr.isPresenting === true) { - if (xr.cameraAutoUpdate === true) xr.updateCamera(camera); - camera = xr.getCamera(); // use XR camera for rendering - } // - - - if (scene.isScene === true) scene.onBeforeRender(_this, scene, camera, _currentRenderTarget); - currentRenderState = renderStates.get(scene, renderStateStack.length); - currentRenderState.init(); - renderStateStack.push(currentRenderState); - - _projScreenMatrix.multiplyMatrices(camera.projectionMatrix, camera.matrixWorldInverse); - - _frustum.setFromProjectionMatrix(_projScreenMatrix); - - _localClippingEnabled = this.localClippingEnabled; - _clippingEnabled = clipping.init(this.clippingPlanes, _localClippingEnabled, camera); - currentRenderList = renderLists.get(scene, renderListStack.length); - currentRenderList.init(); - renderListStack.push(currentRenderList); - projectObject(scene, camera, 0, _this.sortObjects); - currentRenderList.finish(); - - if (_this.sortObjects === true) { - currentRenderList.sort(_opaqueSort, _transparentSort); - } // - - - if (_clippingEnabled === true) clipping.beginShadows(); - const shadowsArray = currentRenderState.state.shadowsArray; - shadowMap.render(shadowsArray, scene, camera); - if (_clippingEnabled === true) clipping.endShadows(); // - - if (this.info.autoReset === true) this.info.reset(); // - - background.render(currentRenderList, scene); // render scene - - currentRenderState.setupLights(_this.physicallyCorrectLights); - - if (camera.isArrayCamera) { - const cameras = camera.cameras; - - for (let i = 0, l = cameras.length; i < l; i++) { - const camera2 = cameras[i]; - renderScene(currentRenderList, scene, camera2, camera2.viewport); - } - } else { - renderScene(currentRenderList, scene, camera); - } // - - - if (_currentRenderTarget !== null) { - // resolve multisample renderbuffers to a single-sample texture if necessary - textures.updateMultisampleRenderTarget(_currentRenderTarget); // Generate mipmap if we're using any kind of mipmap filtering - - textures.updateRenderTargetMipmap(_currentRenderTarget); - } // - - - if (scene.isScene === true) scene.onAfterRender(_this, scene, camera); // _gl.finish(); - - bindingStates.resetDefaultState(); - _currentMaterialId = -1; - _currentCamera = null; - renderStateStack.pop(); - - if (renderStateStack.length > 0) { - currentRenderState = renderStateStack[renderStateStack.length - 1]; - } else { - currentRenderState = null; - } - - renderListStack.pop(); - - if (renderListStack.length > 0) { - currentRenderList = renderListStack[renderListStack.length - 1]; - } else { - currentRenderList = null; - } - }; - - function projectObject(object, camera, groupOrder, sortObjects) { - if (object.visible === false) return; - const visible = object.layers.test(camera.layers); - - if (visible) { - if (object.isGroup) { - groupOrder = object.renderOrder; - } else if (object.isLOD) { - if (object.autoUpdate === true) object.update(camera); - } else if (object.isLight) { - currentRenderState.pushLight(object); - - if (object.castShadow) { - currentRenderState.pushShadow(object); - } - } else if (object.isSprite) { - if (!object.frustumCulled || _frustum.intersectsSprite(object)) { - if (sortObjects) { - _vector3.setFromMatrixPosition(object.matrixWorld).applyMatrix4(_projScreenMatrix); - } - - const geometry = objects.update(object); - const material = object.material; - - if (material.visible) { - currentRenderList.push(object, geometry, material, groupOrder, _vector3.z, null); - } - } - } else if (object.isMesh || object.isLine || object.isPoints) { - if (object.isSkinnedMesh) { - // update skeleton only once in a frame - if (object.skeleton.frame !== info.render.frame) { - object.skeleton.update(); - object.skeleton.frame = info.render.frame; - } - } - - if (!object.frustumCulled || _frustum.intersectsObject(object)) { - if (sortObjects) { - _vector3.setFromMatrixPosition(object.matrixWorld).applyMatrix4(_projScreenMatrix); - } - - const geometry = objects.update(object); - const material = object.material; - - if (Array.isArray(material)) { - const groups = geometry.groups; - - for (let i = 0, l = groups.length; i < l; i++) { - const group = groups[i]; - const groupMaterial = material[group.materialIndex]; - - if (groupMaterial && groupMaterial.visible) { - currentRenderList.push(object, geometry, groupMaterial, groupOrder, _vector3.z, group); - } - } - } else if (material.visible) { - currentRenderList.push(object, geometry, material, groupOrder, _vector3.z, null); - } - } - } - } - - const children = object.children; - - for (let i = 0, l = children.length; i < l; i++) { - projectObject(children[i], camera, groupOrder, sortObjects); - } - } - - function renderScene(currentRenderList, scene, camera, viewport) { - const opaqueObjects = currentRenderList.opaque; - const transmissiveObjects = currentRenderList.transmissive; - const transparentObjects = currentRenderList.transparent; - currentRenderState.setupLightsView(camera); - if (transmissiveObjects.length > 0) renderTransmissionPass(opaqueObjects, scene, camera); - if (viewport) state.viewport(_currentViewport.copy(viewport)); - if (opaqueObjects.length > 0) renderObjects(opaqueObjects, scene, camera); - if (transmissiveObjects.length > 0) renderObjects(transmissiveObjects, scene, camera); - if (transparentObjects.length > 0) renderObjects(transparentObjects, scene, camera); // Ensure depth buffer writing is enabled so it can be cleared on next render - - state.buffers.depth.setTest(true); - state.buffers.depth.setMask(true); - state.buffers.color.setMask(true); - state.setPolygonOffset(false); - } - - function renderTransmissionPass(opaqueObjects, scene, camera) { - const isWebGL2 = capabilities.isWebGL2; - - if (_transmissionRenderTarget === null) { - _transmissionRenderTarget = new WebGLRenderTarget(1, 1, { - generateMipmaps: true, - type: extensions.has('EXT_color_buffer_half_float') ? HalfFloatType : UnsignedByteType, - minFilter: LinearMipmapLinearFilter, - samples: isWebGL2 && _antialias === true ? 4 : 0 - }); - } - - _this.getDrawingBufferSize(_vector2); - - if (isWebGL2) { - _transmissionRenderTarget.setSize(_vector2.x, _vector2.y); - } else { - _transmissionRenderTarget.setSize(floorPowerOfTwo(_vector2.x), floorPowerOfTwo(_vector2.y)); - } // - - - const currentRenderTarget = _this.getRenderTarget(); - - _this.setRenderTarget(_transmissionRenderTarget); - - _this.clear(); // Turn off the features which can affect the frag color for opaque objects pass. - // Otherwise they are applied twice in opaque objects pass and transmission objects pass. - - - const currentToneMapping = _this.toneMapping; - _this.toneMapping = NoToneMapping; - renderObjects(opaqueObjects, scene, camera); - _this.toneMapping = currentToneMapping; - textures.updateMultisampleRenderTarget(_transmissionRenderTarget); - textures.updateRenderTargetMipmap(_transmissionRenderTarget); - - _this.setRenderTarget(currentRenderTarget); - } - - function renderObjects(renderList, scene, camera) { - const overrideMaterial = scene.isScene === true ? scene.overrideMaterial : null; - - for (let i = 0, l = renderList.length; i < l; i++) { - const renderItem = renderList[i]; - const object = renderItem.object; - const geometry = renderItem.geometry; - const material = overrideMaterial === null ? renderItem.material : overrideMaterial; - const group = renderItem.group; - - if (object.layers.test(camera.layers)) { - renderObject(object, scene, camera, geometry, material, group); - } - } - } - - function renderObject(object, scene, camera, geometry, material, group) { - object.onBeforeRender(_this, scene, camera, geometry, material, group); - object.modelViewMatrix.multiplyMatrices(camera.matrixWorldInverse, object.matrixWorld); - object.normalMatrix.getNormalMatrix(object.modelViewMatrix); - material.onBeforeRender(_this, scene, camera, geometry, object, group); - - if (material.transparent === true && material.side === DoubleSide) { - material.side = BackSide; - material.needsUpdate = true; - - _this.renderBufferDirect(camera, scene, geometry, material, object, group); - - material.side = FrontSide; - material.needsUpdate = true; - - _this.renderBufferDirect(camera, scene, geometry, material, object, group); - - material.side = DoubleSide; - } else { - _this.renderBufferDirect(camera, scene, geometry, material, object, group); - } - - object.onAfterRender(_this, scene, camera, geometry, material, group); - } - - function getProgram(material, scene, object) { - if (scene.isScene !== true) scene = _emptyScene; // scene could be a Mesh, Line, Points, ... - - const materialProperties = properties.get(material); - const lights = currentRenderState.state.lights; - const shadowsArray = currentRenderState.state.shadowsArray; - const lightsStateVersion = lights.state.version; - const parameters = programCache.getParameters(material, lights.state, shadowsArray, scene, object); - const programCacheKey = programCache.getProgramCacheKey(parameters); - let programs = materialProperties.programs; // always update environment and fog - changing these trigger an getProgram call, but it's possible that the program doesn't change - - materialProperties.environment = material.isMeshStandardMaterial ? scene.environment : null; - materialProperties.fog = scene.fog; - materialProperties.envMap = (material.isMeshStandardMaterial ? cubeuvmaps : cubemaps).get(material.envMap || materialProperties.environment); - - if (programs === undefined) { - // new material - material.addEventListener('dispose', onMaterialDispose); - programs = new Map(); - materialProperties.programs = programs; - } - - let program = programs.get(programCacheKey); - - if (program !== undefined) { - // early out if program and light state is identical - if (materialProperties.currentProgram === program && materialProperties.lightsStateVersion === lightsStateVersion) { - updateCommonMaterialProperties(material, parameters); - return program; - } - } else { - parameters.uniforms = programCache.getUniforms(material); - material.onBuild(object, parameters, _this); - material.onBeforeCompile(parameters, _this); - program = programCache.acquireProgram(parameters, programCacheKey); - programs.set(programCacheKey, program); - materialProperties.uniforms = parameters.uniforms; - } - - const uniforms = materialProperties.uniforms; - - if (!material.isShaderMaterial && !material.isRawShaderMaterial || material.clipping === true) { - uniforms.clippingPlanes = clipping.uniform; - } - - updateCommonMaterialProperties(material, parameters); // store the light setup it was created for - - materialProperties.needsLights = materialNeedsLights(material); - materialProperties.lightsStateVersion = lightsStateVersion; - - if (materialProperties.needsLights) { - // wire up the material to this renderer's lighting state - uniforms.ambientLightColor.value = lights.state.ambient; - uniforms.lightProbe.value = lights.state.probe; - uniforms.directionalLights.value = lights.state.directional; - uniforms.directionalLightShadows.value = lights.state.directionalShadow; - uniforms.spotLights.value = lights.state.spot; - uniforms.spotLightShadows.value = lights.state.spotShadow; - uniforms.rectAreaLights.value = lights.state.rectArea; - uniforms.ltc_1.value = lights.state.rectAreaLTC1; - uniforms.ltc_2.value = lights.state.rectAreaLTC2; - uniforms.pointLights.value = lights.state.point; - uniforms.pointLightShadows.value = lights.state.pointShadow; - uniforms.hemisphereLights.value = lights.state.hemi; - uniforms.directionalShadowMap.value = lights.state.directionalShadowMap; - uniforms.directionalShadowMatrix.value = lights.state.directionalShadowMatrix; - uniforms.spotShadowMap.value = lights.state.spotShadowMap; - uniforms.spotShadowMatrix.value = lights.state.spotShadowMatrix; - uniforms.pointShadowMap.value = lights.state.pointShadowMap; - uniforms.pointShadowMatrix.value = lights.state.pointShadowMatrix; // TODO (abelnation): add area lights shadow info to uniforms - } - - const progUniforms = program.getUniforms(); - const uniformsList = WebGLUniforms.seqWithValue(progUniforms.seq, uniforms); - materialProperties.currentProgram = program; - materialProperties.uniformsList = uniformsList; - return program; - } - - function updateCommonMaterialProperties(material, parameters) { - const materialProperties = properties.get(material); - materialProperties.outputEncoding = parameters.outputEncoding; - materialProperties.instancing = parameters.instancing; - materialProperties.skinning = parameters.skinning; - materialProperties.morphTargets = parameters.morphTargets; - materialProperties.morphNormals = parameters.morphNormals; - materialProperties.morphColors = parameters.morphColors; - materialProperties.morphTargetsCount = parameters.morphTargetsCount; - materialProperties.numClippingPlanes = parameters.numClippingPlanes; - materialProperties.numIntersection = parameters.numClipIntersection; - materialProperties.vertexAlphas = parameters.vertexAlphas; - materialProperties.vertexTangents = parameters.vertexTangents; - materialProperties.toneMapping = parameters.toneMapping; - } - - function setProgram(camera, scene, geometry, material, object) { - if (scene.isScene !== true) scene = _emptyScene; // scene could be a Mesh, Line, Points, ... - - textures.resetTextureUnits(); - const fog = scene.fog; - const environment = material.isMeshStandardMaterial ? scene.environment : null; - const encoding = _currentRenderTarget === null ? _this.outputEncoding : _currentRenderTarget.isXRRenderTarget === true ? _currentRenderTarget.texture.encoding : LinearEncoding; - const envMap = (material.isMeshStandardMaterial ? cubeuvmaps : cubemaps).get(material.envMap || environment); - const vertexAlphas = material.vertexColors === true && !!geometry.attributes.color && geometry.attributes.color.itemSize === 4; - const vertexTangents = !!material.normalMap && !!geometry.attributes.tangent; - const morphTargets = !!geometry.morphAttributes.position; - const morphNormals = !!geometry.morphAttributes.normal; - const morphColors = !!geometry.morphAttributes.color; - const toneMapping = material.toneMapped ? _this.toneMapping : NoToneMapping; - const morphAttribute = geometry.morphAttributes.position || geometry.morphAttributes.normal || geometry.morphAttributes.color; - const morphTargetsCount = morphAttribute !== undefined ? morphAttribute.length : 0; - const materialProperties = properties.get(material); - const lights = currentRenderState.state.lights; - - if (_clippingEnabled === true) { - if (_localClippingEnabled === true || camera !== _currentCamera) { - const useCache = camera === _currentCamera && material.id === _currentMaterialId; // we might want to call this function with some ClippingGroup - // object instead of the material, once it becomes feasible - // (#8465, #8379) - - clipping.setState(material, camera, useCache); - } - } // - - - let needsProgramChange = false; - - if (material.version === materialProperties.__version) { - if (materialProperties.needsLights && materialProperties.lightsStateVersion !== lights.state.version) { - needsProgramChange = true; - } else if (materialProperties.outputEncoding !== encoding) { - needsProgramChange = true; - } else if (object.isInstancedMesh && materialProperties.instancing === false) { - needsProgramChange = true; - } else if (!object.isInstancedMesh && materialProperties.instancing === true) { - needsProgramChange = true; - } else if (object.isSkinnedMesh && materialProperties.skinning === false) { - needsProgramChange = true; - } else if (!object.isSkinnedMesh && materialProperties.skinning === true) { - needsProgramChange = true; - } else if (materialProperties.envMap !== envMap) { - needsProgramChange = true; - } else if (material.fog === true && materialProperties.fog !== fog) { - needsProgramChange = true; - } else if (materialProperties.numClippingPlanes !== undefined && (materialProperties.numClippingPlanes !== clipping.numPlanes || materialProperties.numIntersection !== clipping.numIntersection)) { - needsProgramChange = true; - } else if (materialProperties.vertexAlphas !== vertexAlphas) { - needsProgramChange = true; - } else if (materialProperties.vertexTangents !== vertexTangents) { - needsProgramChange = true; - } else if (materialProperties.morphTargets !== morphTargets) { - needsProgramChange = true; - } else if (materialProperties.morphNormals !== morphNormals) { - needsProgramChange = true; - } else if (materialProperties.morphColors !== morphColors) { - needsProgramChange = true; - } else if (materialProperties.toneMapping !== toneMapping) { - needsProgramChange = true; - } else if (capabilities.isWebGL2 === true && materialProperties.morphTargetsCount !== morphTargetsCount) { - needsProgramChange = true; - } - } else { - needsProgramChange = true; - materialProperties.__version = material.version; - } // - - - let program = materialProperties.currentProgram; - - if (needsProgramChange === true) { - program = getProgram(material, scene, object); - } - - let refreshProgram = false; - let refreshMaterial = false; - let refreshLights = false; - const p_uniforms = program.getUniforms(), - m_uniforms = materialProperties.uniforms; - - if (state.useProgram(program.program)) { - refreshProgram = true; - refreshMaterial = true; - refreshLights = true; - } - - if (material.id !== _currentMaterialId) { - _currentMaterialId = material.id; - refreshMaterial = true; - } - - if (refreshProgram || _currentCamera !== camera) { - p_uniforms.setValue(_gl, 'projectionMatrix', camera.projectionMatrix); - - if (capabilities.logarithmicDepthBuffer) { - p_uniforms.setValue(_gl, 'logDepthBufFC', 2.0 / (Math.log(camera.far + 1.0) / Math.LN2)); - } - - if (_currentCamera !== camera) { - _currentCamera = camera; // lighting uniforms depend on the camera so enforce an update - // now, in case this material supports lights - or later, when - // the next material that does gets activated: - - refreshMaterial = true; // set to true on material change - - refreshLights = true; // remains set until update done - } // load material specific uniforms - // (shader material also gets them for the sake of genericity) - - - if (material.isShaderMaterial || material.isMeshPhongMaterial || material.isMeshToonMaterial || material.isMeshStandardMaterial || material.envMap) { - const uCamPos = p_uniforms.map.cameraPosition; - - if (uCamPos !== undefined) { - uCamPos.setValue(_gl, _vector3.setFromMatrixPosition(camera.matrixWorld)); - } - } - - if (material.isMeshPhongMaterial || material.isMeshToonMaterial || material.isMeshLambertMaterial || material.isMeshBasicMaterial || material.isMeshStandardMaterial || material.isShaderMaterial) { - p_uniforms.setValue(_gl, 'isOrthographic', camera.isOrthographicCamera === true); - } - - if (material.isMeshPhongMaterial || material.isMeshToonMaterial || material.isMeshLambertMaterial || material.isMeshBasicMaterial || material.isMeshStandardMaterial || material.isShaderMaterial || material.isShadowMaterial || object.isSkinnedMesh) { - p_uniforms.setValue(_gl, 'viewMatrix', camera.matrixWorldInverse); - } - } // skinning and morph target uniforms must be set even if material didn't change - // auto-setting of texture unit for bone and morph texture must go before other textures - // otherwise textures used for skinning and morphing can take over texture units reserved for other material textures - - - if (object.isSkinnedMesh) { - p_uniforms.setOptional(_gl, object, 'bindMatrix'); - p_uniforms.setOptional(_gl, object, 'bindMatrixInverse'); - const skeleton = object.skeleton; - - if (skeleton) { - if (capabilities.floatVertexTextures) { - if (skeleton.boneTexture === null) skeleton.computeBoneTexture(); - p_uniforms.setValue(_gl, 'boneTexture', skeleton.boneTexture, textures); - p_uniforms.setValue(_gl, 'boneTextureSize', skeleton.boneTextureSize); - } else { - console.warn('THREE.WebGLRenderer: SkinnedMesh can only be used with WebGL 2. With WebGL 1 OES_texture_float and vertex textures support is required.'); - } - } - } - - const morphAttributes = geometry.morphAttributes; - - if (morphAttributes.position !== undefined || morphAttributes.normal !== undefined || morphAttributes.color !== undefined && capabilities.isWebGL2 === true) { - morphtargets.update(object, geometry, material, program); - } - - if (refreshMaterial || materialProperties.receiveShadow !== object.receiveShadow) { - materialProperties.receiveShadow = object.receiveShadow; - p_uniforms.setValue(_gl, 'receiveShadow', object.receiveShadow); - } - - if (refreshMaterial) { - p_uniforms.setValue(_gl, 'toneMappingExposure', _this.toneMappingExposure); - - if (materialProperties.needsLights) { - // the current material requires lighting info - // note: all lighting uniforms are always set correctly - // they simply reference the renderer's state for their - // values - // - // use the current material's .needsUpdate flags to set - // the GL state when required - markUniformsLightsNeedsUpdate(m_uniforms, refreshLights); - } // refresh uniforms common to several materials - - - if (fog && material.fog === true) { - materials.refreshFogUniforms(m_uniforms, fog); - } - - materials.refreshMaterialUniforms(m_uniforms, material, _pixelRatio, _height, _transmissionRenderTarget); - WebGLUniforms.upload(_gl, materialProperties.uniformsList, m_uniforms, textures); - } - - if (material.isShaderMaterial && material.uniformsNeedUpdate === true) { - WebGLUniforms.upload(_gl, materialProperties.uniformsList, m_uniforms, textures); - material.uniformsNeedUpdate = false; - } - - if (material.isSpriteMaterial) { - p_uniforms.setValue(_gl, 'center', object.center); - } // common matrices - - - p_uniforms.setValue(_gl, 'modelViewMatrix', object.modelViewMatrix); - p_uniforms.setValue(_gl, 'normalMatrix', object.normalMatrix); - p_uniforms.setValue(_gl, 'modelMatrix', object.matrixWorld); - return program; - } // If uniforms are marked as clean, they don't need to be loaded to the GPU. - - - function markUniformsLightsNeedsUpdate(uniforms, value) { - uniforms.ambientLightColor.needsUpdate = value; - uniforms.lightProbe.needsUpdate = value; - uniforms.directionalLights.needsUpdate = value; - uniforms.directionalLightShadows.needsUpdate = value; - uniforms.pointLights.needsUpdate = value; - uniforms.pointLightShadows.needsUpdate = value; - uniforms.spotLights.needsUpdate = value; - uniforms.spotLightShadows.needsUpdate = value; - uniforms.rectAreaLights.needsUpdate = value; - uniforms.hemisphereLights.needsUpdate = value; - } - - function materialNeedsLights(material) { - return material.isMeshLambertMaterial || material.isMeshToonMaterial || material.isMeshPhongMaterial || material.isMeshStandardMaterial || material.isShadowMaterial || material.isShaderMaterial && material.lights === true; - } - - this.getActiveCubeFace = function () { - return _currentActiveCubeFace; - }; - - this.getActiveMipmapLevel = function () { - return _currentActiveMipmapLevel; - }; - - this.getRenderTarget = function () { - return _currentRenderTarget; - }; - - this.setRenderTargetTextures = function (renderTarget, colorTexture, depthTexture) { - properties.get(renderTarget.texture).__webglTexture = colorTexture; - properties.get(renderTarget.depthTexture).__webglTexture = depthTexture; - const renderTargetProperties = properties.get(renderTarget); - renderTargetProperties.__hasExternalTextures = true; - - if (renderTargetProperties.__hasExternalTextures) { - renderTargetProperties.__autoAllocateDepthBuffer = depthTexture === undefined; - - if (!renderTargetProperties.__autoAllocateDepthBuffer) { - // The multisample_render_to_texture extension doesn't work properly if there - // are midframe flushes and an external depth buffer. Disable use of the extension. - if (extensions.has('WEBGL_multisampled_render_to_texture') === true) { - console.warn('THREE.WebGLRenderer: Render-to-texture extension was disabled because an external texture was provided'); - renderTargetProperties.__useRenderToTexture = false; - } - } - } - }; - - this.setRenderTargetFramebuffer = function (renderTarget, defaultFramebuffer) { - const renderTargetProperties = properties.get(renderTarget); - renderTargetProperties.__webglFramebuffer = defaultFramebuffer; - renderTargetProperties.__useDefaultFramebuffer = defaultFramebuffer === undefined; - }; - - this.setRenderTarget = function (renderTarget, activeCubeFace = 0, activeMipmapLevel = 0) { - _currentRenderTarget = renderTarget; - _currentActiveCubeFace = activeCubeFace; - _currentActiveMipmapLevel = activeMipmapLevel; - let useDefaultFramebuffer = true; - - if (renderTarget) { - const renderTargetProperties = properties.get(renderTarget); - - if (renderTargetProperties.__useDefaultFramebuffer !== undefined) { - // We need to make sure to rebind the framebuffer. - state.bindFramebuffer(_gl.FRAMEBUFFER, null); - useDefaultFramebuffer = false; - } else if (renderTargetProperties.__webglFramebuffer === undefined) { - textures.setupRenderTarget(renderTarget); - } else if (renderTargetProperties.__hasExternalTextures) { - // Color and depth texture must be rebound in order for the swapchain to update. - textures.rebindTextures(renderTarget, properties.get(renderTarget.texture).__webglTexture, properties.get(renderTarget.depthTexture).__webglTexture); - } - } - - let framebuffer = null; - let isCube = false; - let isRenderTarget3D = false; - - if (renderTarget) { - const texture = renderTarget.texture; - - if (texture.isData3DTexture || texture.isDataArrayTexture) { - isRenderTarget3D = true; - } - - const __webglFramebuffer = properties.get(renderTarget).__webglFramebuffer; - - if (renderTarget.isWebGLCubeRenderTarget) { - framebuffer = __webglFramebuffer[activeCubeFace]; - isCube = true; - } else if (capabilities.isWebGL2 && renderTarget.samples > 0 && textures.useMultisampledRTT(renderTarget) === false) { - framebuffer = properties.get(renderTarget).__webglMultisampledFramebuffer; - } else { - framebuffer = __webglFramebuffer; - } - - _currentViewport.copy(renderTarget.viewport); - - _currentScissor.copy(renderTarget.scissor); - - _currentScissorTest = renderTarget.scissorTest; - } else { - _currentViewport.copy(_viewport).multiplyScalar(_pixelRatio).floor(); - - _currentScissor.copy(_scissor).multiplyScalar(_pixelRatio).floor(); - - _currentScissorTest = _scissorTest; - } - - const framebufferBound = state.bindFramebuffer(_gl.FRAMEBUFFER, framebuffer); - - if (framebufferBound && capabilities.drawBuffers && useDefaultFramebuffer) { - state.drawBuffers(renderTarget, framebuffer); - } - - state.viewport(_currentViewport); - state.scissor(_currentScissor); - state.setScissorTest(_currentScissorTest); - - if (isCube) { - const textureProperties = properties.get(renderTarget.texture); - - _gl.framebufferTexture2D(_gl.FRAMEBUFFER, _gl.COLOR_ATTACHMENT0, _gl.TEXTURE_CUBE_MAP_POSITIVE_X + activeCubeFace, textureProperties.__webglTexture, activeMipmapLevel); - } else if (isRenderTarget3D) { - const textureProperties = properties.get(renderTarget.texture); - const layer = activeCubeFace || 0; - - _gl.framebufferTextureLayer(_gl.FRAMEBUFFER, _gl.COLOR_ATTACHMENT0, textureProperties.__webglTexture, activeMipmapLevel || 0, layer); - } - - _currentMaterialId = -1; // reset current material to ensure correct uniform bindings - }; - - this.readRenderTargetPixels = function (renderTarget, x, y, width, height, buffer, activeCubeFaceIndex) { - if (!(renderTarget && renderTarget.isWebGLRenderTarget)) { - console.error('THREE.WebGLRenderer.readRenderTargetPixels: renderTarget is not THREE.WebGLRenderTarget.'); - return; - } - - let framebuffer = properties.get(renderTarget).__webglFramebuffer; - - if (renderTarget.isWebGLCubeRenderTarget && activeCubeFaceIndex !== undefined) { - framebuffer = framebuffer[activeCubeFaceIndex]; - } - - if (framebuffer) { - state.bindFramebuffer(_gl.FRAMEBUFFER, framebuffer); - - try { - const texture = renderTarget.texture; - const textureFormat = texture.format; - const textureType = texture.type; - - if (textureFormat !== RGBAFormat && utils.convert(textureFormat) !== _gl.getParameter(_gl.IMPLEMENTATION_COLOR_READ_FORMAT)) { - console.error('THREE.WebGLRenderer.readRenderTargetPixels: renderTarget is not in RGBA or implementation defined format.'); - return; - } - - const halfFloatSupportedByExt = textureType === HalfFloatType && (extensions.has('EXT_color_buffer_half_float') || capabilities.isWebGL2 && extensions.has('EXT_color_buffer_float')); - - if (textureType !== UnsignedByteType && utils.convert(textureType) !== _gl.getParameter(_gl.IMPLEMENTATION_COLOR_READ_TYPE) && // Edge and Chrome Mac < 52 (#9513) - !(textureType === FloatType && (capabilities.isWebGL2 || extensions.has('OES_texture_float') || extensions.has('WEBGL_color_buffer_float'))) && // Chrome Mac >= 52 and Firefox - !halfFloatSupportedByExt) { - console.error('THREE.WebGLRenderer.readRenderTargetPixels: renderTarget is not in UnsignedByteType or implementation defined type.'); - return; - } // the following if statement ensures valid read requests (no out-of-bounds pixels, see #8604) - - - if (x >= 0 && x <= renderTarget.width - width && y >= 0 && y <= renderTarget.height - height) { - _gl.readPixels(x, y, width, height, utils.convert(textureFormat), utils.convert(textureType), buffer); - } - } finally { - // restore framebuffer of current render target if necessary - const framebuffer = _currentRenderTarget !== null ? properties.get(_currentRenderTarget).__webglFramebuffer : null; - state.bindFramebuffer(_gl.FRAMEBUFFER, framebuffer); - } - } - }; - - this.copyFramebufferToTexture = function (position, texture, level = 0) { - if (texture.isFramebufferTexture !== true) { - console.error('THREE.WebGLRenderer: copyFramebufferToTexture() can only be used with FramebufferTexture.'); - return; - } - - const levelScale = Math.pow(2, -level); - const width = Math.floor(texture.image.width * levelScale); - const height = Math.floor(texture.image.height * levelScale); - textures.setTexture2D(texture, 0); - - _gl.copyTexSubImage2D(_gl.TEXTURE_2D, level, 0, 0, position.x, position.y, width, height); - - state.unbindTexture(); - }; - - this.copyTextureToTexture = function (position, srcTexture, dstTexture, level = 0) { - const width = srcTexture.image.width; - const height = srcTexture.image.height; - const glFormat = utils.convert(dstTexture.format); - const glType = utils.convert(dstTexture.type); - textures.setTexture2D(dstTexture, 0); // As another texture upload may have changed pixelStorei - // parameters, make sure they are correct for the dstTexture - - _gl.pixelStorei(_gl.UNPACK_FLIP_Y_WEBGL, dstTexture.flipY); - - _gl.pixelStorei(_gl.UNPACK_PREMULTIPLY_ALPHA_WEBGL, dstTexture.premultiplyAlpha); - - _gl.pixelStorei(_gl.UNPACK_ALIGNMENT, dstTexture.unpackAlignment); - - if (srcTexture.isDataTexture) { - _gl.texSubImage2D(_gl.TEXTURE_2D, level, position.x, position.y, width, height, glFormat, glType, srcTexture.image.data); - } else { - if (srcTexture.isCompressedTexture) { - _gl.compressedTexSubImage2D(_gl.TEXTURE_2D, level, position.x, position.y, srcTexture.mipmaps[0].width, srcTexture.mipmaps[0].height, glFormat, srcTexture.mipmaps[0].data); - } else { - _gl.texSubImage2D(_gl.TEXTURE_2D, level, position.x, position.y, glFormat, glType, srcTexture.image); - } - } // Generate mipmaps only when copying level 0 - - - if (level === 0 && dstTexture.generateMipmaps) _gl.generateMipmap(_gl.TEXTURE_2D); - state.unbindTexture(); - }; - - this.copyTextureToTexture3D = function (sourceBox, position, srcTexture, dstTexture, level = 0) { - if (_this.isWebGL1Renderer) { - console.warn('THREE.WebGLRenderer.copyTextureToTexture3D: can only be used with WebGL2.'); - return; - } - - const width = sourceBox.max.x - sourceBox.min.x + 1; - const height = sourceBox.max.y - sourceBox.min.y + 1; - const depth = sourceBox.max.z - sourceBox.min.z + 1; - const glFormat = utils.convert(dstTexture.format); - const glType = utils.convert(dstTexture.type); - let glTarget; - - if (dstTexture.isData3DTexture) { - textures.setTexture3D(dstTexture, 0); - glTarget = _gl.TEXTURE_3D; - } else if (dstTexture.isDataArrayTexture) { - textures.setTexture2DArray(dstTexture, 0); - glTarget = _gl.TEXTURE_2D_ARRAY; - } else { - console.warn('THREE.WebGLRenderer.copyTextureToTexture3D: only supports THREE.DataTexture3D and THREE.DataTexture2DArray.'); - return; - } - - _gl.pixelStorei(_gl.UNPACK_FLIP_Y_WEBGL, dstTexture.flipY); - - _gl.pixelStorei(_gl.UNPACK_PREMULTIPLY_ALPHA_WEBGL, dstTexture.premultiplyAlpha); - - _gl.pixelStorei(_gl.UNPACK_ALIGNMENT, dstTexture.unpackAlignment); - - const unpackRowLen = _gl.getParameter(_gl.UNPACK_ROW_LENGTH); - - const unpackImageHeight = _gl.getParameter(_gl.UNPACK_IMAGE_HEIGHT); - - const unpackSkipPixels = _gl.getParameter(_gl.UNPACK_SKIP_PIXELS); - - const unpackSkipRows = _gl.getParameter(_gl.UNPACK_SKIP_ROWS); - - const unpackSkipImages = _gl.getParameter(_gl.UNPACK_SKIP_IMAGES); - - const image = srcTexture.isCompressedTexture ? srcTexture.mipmaps[0] : srcTexture.image; - - _gl.pixelStorei(_gl.UNPACK_ROW_LENGTH, image.width); - - _gl.pixelStorei(_gl.UNPACK_IMAGE_HEIGHT, image.height); - - _gl.pixelStorei(_gl.UNPACK_SKIP_PIXELS, sourceBox.min.x); - - _gl.pixelStorei(_gl.UNPACK_SKIP_ROWS, sourceBox.min.y); - - _gl.pixelStorei(_gl.UNPACK_SKIP_IMAGES, sourceBox.min.z); - - if (srcTexture.isDataTexture || srcTexture.isData3DTexture) { - _gl.texSubImage3D(glTarget, level, position.x, position.y, position.z, width, height, depth, glFormat, glType, image.data); - } else { - if (srcTexture.isCompressedTexture) { - console.warn('THREE.WebGLRenderer.copyTextureToTexture3D: untested support for compressed srcTexture.'); - - _gl.compressedTexSubImage3D(glTarget, level, position.x, position.y, position.z, width, height, depth, glFormat, image.data); - } else { - _gl.texSubImage3D(glTarget, level, position.x, position.y, position.z, width, height, depth, glFormat, glType, image); - } - } - - _gl.pixelStorei(_gl.UNPACK_ROW_LENGTH, unpackRowLen); - - _gl.pixelStorei(_gl.UNPACK_IMAGE_HEIGHT, unpackImageHeight); - - _gl.pixelStorei(_gl.UNPACK_SKIP_PIXELS, unpackSkipPixels); - - _gl.pixelStorei(_gl.UNPACK_SKIP_ROWS, unpackSkipRows); - - _gl.pixelStorei(_gl.UNPACK_SKIP_IMAGES, unpackSkipImages); // Generate mipmaps only when copying level 0 - - - if (level === 0 && dstTexture.generateMipmaps) _gl.generateMipmap(glTarget); - state.unbindTexture(); - }; - - this.initTexture = function (texture) { - textures.setTexture2D(texture, 0); - state.unbindTexture(); - }; - - this.resetState = function () { - _currentActiveCubeFace = 0; - _currentActiveMipmapLevel = 0; - _currentRenderTarget = null; - state.reset(); - bindingStates.reset(); - }; - - if (typeof __THREE_DEVTOOLS__ !== 'undefined') { - __THREE_DEVTOOLS__.dispatchEvent(new CustomEvent('observe', { - detail: this - })); - } - } - - WebGLRenderer.prototype.isWebGLRenderer = true; - - class WebGL1Renderer extends WebGLRenderer {} - - WebGL1Renderer.prototype.isWebGL1Renderer = true; - - class FogExp2 { - constructor(color, density = 0.00025) { - this.name = ''; - this.color = new Color(color); - this.density = density; - } - - clone() { - return new FogExp2(this.color, this.density); - } - - toJSON() { - return { - type: 'FogExp2', - color: this.color.getHex(), - density: this.density - }; - } - - } - - FogExp2.prototype.isFogExp2 = true; - - class Fog { - constructor(color, near = 1, far = 1000) { - this.name = ''; - this.color = new Color(color); - this.near = near; - this.far = far; - } - - clone() { - return new Fog(this.color, this.near, this.far); - } - - toJSON() { - return { - type: 'Fog', - color: this.color.getHex(), - near: this.near, - far: this.far - }; - } - - } - - Fog.prototype.isFog = true; - - class Scene extends Object3D { - constructor() { - super(); - this.type = 'Scene'; - this.background = null; - this.environment = null; - this.fog = null; - this.overrideMaterial = null; - this.autoUpdate = true; // checked by the renderer - - if (typeof __THREE_DEVTOOLS__ !== 'undefined') { - __THREE_DEVTOOLS__.dispatchEvent(new CustomEvent('observe', { - detail: this - })); - } - } - - copy(source, recursive) { - super.copy(source, recursive); - if (source.background !== null) this.background = source.background.clone(); - if (source.environment !== null) this.environment = source.environment.clone(); - if (source.fog !== null) this.fog = source.fog.clone(); - if (source.overrideMaterial !== null) this.overrideMaterial = source.overrideMaterial.clone(); - this.autoUpdate = source.autoUpdate; - this.matrixAutoUpdate = source.matrixAutoUpdate; - return this; - } - - toJSON(meta) { - const data = super.toJSON(meta); - if (this.fog !== null) data.object.fog = this.fog.toJSON(); - return data; - } - - } - - Scene.prototype.isScene = true; - - class InterleavedBuffer { - constructor(array, stride) { - this.array = array; - this.stride = stride; - this.count = array !== undefined ? array.length / stride : 0; - this.usage = StaticDrawUsage; - this.updateRange = { - offset: 0, - count: -1 - }; - this.version = 0; - this.uuid = generateUUID(); - } - - onUploadCallback() {} - - set needsUpdate(value) { - if (value === true) this.version++; - } - - setUsage(value) { - this.usage = value; - return this; - } - - copy(source) { - this.array = new source.array.constructor(source.array); - this.count = source.count; - this.stride = source.stride; - this.usage = source.usage; - return this; - } - - copyAt(index1, attribute, index2) { - index1 *= this.stride; - index2 *= attribute.stride; - - for (let i = 0, l = this.stride; i < l; i++) { - this.array[index1 + i] = attribute.array[index2 + i]; - } - - return this; - } - - set(value, offset = 0) { - this.array.set(value, offset); - return this; - } - - clone(data) { - if (data.arrayBuffers === undefined) { - data.arrayBuffers = {}; - } - - if (this.array.buffer._uuid === undefined) { - this.array.buffer._uuid = generateUUID(); - } - - if (data.arrayBuffers[this.array.buffer._uuid] === undefined) { - data.arrayBuffers[this.array.buffer._uuid] = this.array.slice(0).buffer; - } - - const array = new this.array.constructor(data.arrayBuffers[this.array.buffer._uuid]); - const ib = new this.constructor(array, this.stride); - ib.setUsage(this.usage); - return ib; - } - - onUpload(callback) { - this.onUploadCallback = callback; - return this; - } - - toJSON(data) { - if (data.arrayBuffers === undefined) { - data.arrayBuffers = {}; - } // generate UUID for array buffer if necessary - - - if (this.array.buffer._uuid === undefined) { - this.array.buffer._uuid = generateUUID(); - } - - if (data.arrayBuffers[this.array.buffer._uuid] === undefined) { - data.arrayBuffers[this.array.buffer._uuid] = Array.prototype.slice.call(new Uint32Array(this.array.buffer)); - } // - - - return { - uuid: this.uuid, - buffer: this.array.buffer._uuid, - type: this.array.constructor.name, - stride: this.stride - }; - } - - } - - InterleavedBuffer.prototype.isInterleavedBuffer = true; - - const _vector$6 = /*@__PURE__*/new Vector3(); - - class InterleavedBufferAttribute { - constructor(interleavedBuffer, itemSize, offset, normalized = false) { - this.name = ''; - this.data = interleavedBuffer; - this.itemSize = itemSize; - this.offset = offset; - this.normalized = normalized === true; - } - - get count() { - return this.data.count; - } - - get array() { - return this.data.array; - } - - set needsUpdate(value) { - this.data.needsUpdate = value; - } - - applyMatrix4(m) { - for (let i = 0, l = this.data.count; i < l; i++) { - _vector$6.fromBufferAttribute(this, i); - - _vector$6.applyMatrix4(m); - - this.setXYZ(i, _vector$6.x, _vector$6.y, _vector$6.z); - } - - return this; - } - - applyNormalMatrix(m) { - for (let i = 0, l = this.count; i < l; i++) { - _vector$6.fromBufferAttribute(this, i); - - _vector$6.applyNormalMatrix(m); - - this.setXYZ(i, _vector$6.x, _vector$6.y, _vector$6.z); - } - - return this; - } - - transformDirection(m) { - for (let i = 0, l = this.count; i < l; i++) { - _vector$6.fromBufferAttribute(this, i); - - _vector$6.transformDirection(m); - - this.setXYZ(i, _vector$6.x, _vector$6.y, _vector$6.z); - } - - return this; - } - - setX(index, x) { - this.data.array[index * this.data.stride + this.offset] = x; - return this; - } - - setY(index, y) { - this.data.array[index * this.data.stride + this.offset + 1] = y; - return this; - } - - setZ(index, z) { - this.data.array[index * this.data.stride + this.offset + 2] = z; - return this; - } - - setW(index, w) { - this.data.array[index * this.data.stride + this.offset + 3] = w; - return this; - } - - getX(index) { - return this.data.array[index * this.data.stride + this.offset]; - } - - getY(index) { - return this.data.array[index * this.data.stride + this.offset + 1]; - } - - getZ(index) { - return this.data.array[index * this.data.stride + this.offset + 2]; - } - - getW(index) { - return this.data.array[index * this.data.stride + this.offset + 3]; - } - - setXY(index, x, y) { - index = index * this.data.stride + this.offset; - this.data.array[index + 0] = x; - this.data.array[index + 1] = y; - return this; - } - - setXYZ(index, x, y, z) { - index = index * this.data.stride + this.offset; - this.data.array[index + 0] = x; - this.data.array[index + 1] = y; - this.data.array[index + 2] = z; - return this; - } - - setXYZW(index, x, y, z, w) { - index = index * this.data.stride + this.offset; - this.data.array[index + 0] = x; - this.data.array[index + 1] = y; - this.data.array[index + 2] = z; - this.data.array[index + 3] = w; - return this; - } - - clone(data) { - if (data === undefined) { - console.log('THREE.InterleavedBufferAttribute.clone(): Cloning an interlaved buffer attribute will deinterleave buffer data.'); - const array = []; - - for (let i = 0; i < this.count; i++) { - const index = i * this.data.stride + this.offset; - - for (let j = 0; j < this.itemSize; j++) { - array.push(this.data.array[index + j]); - } - } - - return new BufferAttribute(new this.array.constructor(array), this.itemSize, this.normalized); - } else { - if (data.interleavedBuffers === undefined) { - data.interleavedBuffers = {}; - } - - if (data.interleavedBuffers[this.data.uuid] === undefined) { - data.interleavedBuffers[this.data.uuid] = this.data.clone(data); - } - - return new InterleavedBufferAttribute(data.interleavedBuffers[this.data.uuid], this.itemSize, this.offset, this.normalized); - } - } - - toJSON(data) { - if (data === undefined) { - console.log('THREE.InterleavedBufferAttribute.toJSON(): Serializing an interlaved buffer attribute will deinterleave buffer data.'); - const array = []; - - for (let i = 0; i < this.count; i++) { - const index = i * this.data.stride + this.offset; - - for (let j = 0; j < this.itemSize; j++) { - array.push(this.data.array[index + j]); - } - } // deinterleave data and save it as an ordinary buffer attribute for now - - - return { - itemSize: this.itemSize, - type: this.array.constructor.name, - array: array, - normalized: this.normalized - }; - } else { - // save as true interlaved attribtue - if (data.interleavedBuffers === undefined) { - data.interleavedBuffers = {}; - } - - if (data.interleavedBuffers[this.data.uuid] === undefined) { - data.interleavedBuffers[this.data.uuid] = this.data.toJSON(data); - } - - return { - isInterleavedBufferAttribute: true, - itemSize: this.itemSize, - data: this.data.uuid, - offset: this.offset, - normalized: this.normalized - }; - } - } - - } - - InterleavedBufferAttribute.prototype.isInterleavedBufferAttribute = true; - - class SpriteMaterial extends Material { - constructor(parameters) { - super(); - this.type = 'SpriteMaterial'; - this.color = new Color(0xffffff); - this.map = null; - this.alphaMap = null; - this.rotation = 0; - this.sizeAttenuation = true; - this.transparent = true; - this.fog = true; - this.setValues(parameters); - } - - copy(source) { - super.copy(source); - this.color.copy(source.color); - this.map = source.map; - this.alphaMap = source.alphaMap; - this.rotation = source.rotation; - this.sizeAttenuation = source.sizeAttenuation; - this.fog = source.fog; - return this; - } - - } - - SpriteMaterial.prototype.isSpriteMaterial = true; - - let _geometry; - - const _intersectPoint = /*@__PURE__*/new Vector3(); - - const _worldScale = /*@__PURE__*/new Vector3(); - - const _mvPosition = /*@__PURE__*/new Vector3(); - - const _alignedPosition = /*@__PURE__*/new Vector2(); - - const _rotatedPosition = /*@__PURE__*/new Vector2(); - - const _viewWorldMatrix = /*@__PURE__*/new Matrix4(); - - const _vA = /*@__PURE__*/new Vector3(); - - const _vB = /*@__PURE__*/new Vector3(); - - const _vC = /*@__PURE__*/new Vector3(); - - const _uvA = /*@__PURE__*/new Vector2(); - - const _uvB = /*@__PURE__*/new Vector2(); - - const _uvC = /*@__PURE__*/new Vector2(); - - class Sprite extends Object3D { - constructor(material) { - super(); - this.type = 'Sprite'; - - if (_geometry === undefined) { - _geometry = new BufferGeometry(); - const float32Array = new Float32Array([-0.5, -0.5, 0, 0, 0, 0.5, -0.5, 0, 1, 0, 0.5, 0.5, 0, 1, 1, -0.5, 0.5, 0, 0, 1]); - const interleavedBuffer = new InterleavedBuffer(float32Array, 5); - - _geometry.setIndex([0, 1, 2, 0, 2, 3]); - - _geometry.setAttribute('position', new InterleavedBufferAttribute(interleavedBuffer, 3, 0, false)); - - _geometry.setAttribute('uv', new InterleavedBufferAttribute(interleavedBuffer, 2, 3, false)); - } - - this.geometry = _geometry; - this.material = material !== undefined ? material : new SpriteMaterial(); - this.center = new Vector2(0.5, 0.5); - } - - raycast(raycaster, intersects) { - if (raycaster.camera === null) { - console.error('THREE.Sprite: "Raycaster.camera" needs to be set in order to raycast against sprites.'); - } - - _worldScale.setFromMatrixScale(this.matrixWorld); - - _viewWorldMatrix.copy(raycaster.camera.matrixWorld); - - this.modelViewMatrix.multiplyMatrices(raycaster.camera.matrixWorldInverse, this.matrixWorld); - - _mvPosition.setFromMatrixPosition(this.modelViewMatrix); - - if (raycaster.camera.isPerspectiveCamera && this.material.sizeAttenuation === false) { - _worldScale.multiplyScalar(-_mvPosition.z); - } - - const rotation = this.material.rotation; - let sin, cos; - - if (rotation !== 0) { - cos = Math.cos(rotation); - sin = Math.sin(rotation); - } - - const center = this.center; - transformVertex(_vA.set(-0.5, -0.5, 0), _mvPosition, center, _worldScale, sin, cos); - transformVertex(_vB.set(0.5, -0.5, 0), _mvPosition, center, _worldScale, sin, cos); - transformVertex(_vC.set(0.5, 0.5, 0), _mvPosition, center, _worldScale, sin, cos); - - _uvA.set(0, 0); - - _uvB.set(1, 0); - - _uvC.set(1, 1); // check first triangle - - - let intersect = raycaster.ray.intersectTriangle(_vA, _vB, _vC, false, _intersectPoint); - - if (intersect === null) { - // check second triangle - transformVertex(_vB.set(-0.5, 0.5, 0), _mvPosition, center, _worldScale, sin, cos); - - _uvB.set(0, 1); - - intersect = raycaster.ray.intersectTriangle(_vA, _vC, _vB, false, _intersectPoint); - - if (intersect === null) { - return; - } - } - - const distance = raycaster.ray.origin.distanceTo(_intersectPoint); - if (distance < raycaster.near || distance > raycaster.far) return; - intersects.push({ - distance: distance, - point: _intersectPoint.clone(), - uv: Triangle.getUV(_intersectPoint, _vA, _vB, _vC, _uvA, _uvB, _uvC, new Vector2()), - face: null, - object: this - }); - } - - copy(source) { - super.copy(source); - if (source.center !== undefined) this.center.copy(source.center); - this.material = source.material; - return this; - } - - } - - Sprite.prototype.isSprite = true; - - function transformVertex(vertexPosition, mvPosition, center, scale, sin, cos) { - // compute position in camera space - _alignedPosition.subVectors(vertexPosition, center).addScalar(0.5).multiply(scale); // to check if rotation is not zero - - - if (sin !== undefined) { - _rotatedPosition.x = cos * _alignedPosition.x - sin * _alignedPosition.y; - _rotatedPosition.y = sin * _alignedPosition.x + cos * _alignedPosition.y; - } else { - _rotatedPosition.copy(_alignedPosition); - } - - vertexPosition.copy(mvPosition); - vertexPosition.x += _rotatedPosition.x; - vertexPosition.y += _rotatedPosition.y; // transform to world space - - vertexPosition.applyMatrix4(_viewWorldMatrix); - } - - const _v1$2 = /*@__PURE__*/new Vector3(); - - const _v2$1 = /*@__PURE__*/new Vector3(); - - class LOD extends Object3D { - constructor() { - super(); - this._currentLevel = 0; - this.type = 'LOD'; - Object.defineProperties(this, { - levels: { - enumerable: true, - value: [] - }, - isLOD: { - value: true - } - }); - this.autoUpdate = true; - } - - copy(source) { - super.copy(source, false); - const levels = source.levels; - - for (let i = 0, l = levels.length; i < l; i++) { - const level = levels[i]; - this.addLevel(level.object.clone(), level.distance); - } - - this.autoUpdate = source.autoUpdate; - return this; - } - - addLevel(object, distance = 0) { - distance = Math.abs(distance); - const levels = this.levels; - let l; - - for (l = 0; l < levels.length; l++) { - if (distance < levels[l].distance) { - break; - } - } - - levels.splice(l, 0, { - distance: distance, - object: object - }); - this.add(object); - return this; - } - - getCurrentLevel() { - return this._currentLevel; - } - - getObjectForDistance(distance) { - const levels = this.levels; - - if (levels.length > 0) { - let i, l; - - for (i = 1, l = levels.length; i < l; i++) { - if (distance < levels[i].distance) { - break; - } - } - - return levels[i - 1].object; - } - - return null; - } - - raycast(raycaster, intersects) { - const levels = this.levels; - - if (levels.length > 0) { - _v1$2.setFromMatrixPosition(this.matrixWorld); - - const distance = raycaster.ray.origin.distanceTo(_v1$2); - this.getObjectForDistance(distance).raycast(raycaster, intersects); - } - } - - update(camera) { - const levels = this.levels; - - if (levels.length > 1) { - _v1$2.setFromMatrixPosition(camera.matrixWorld); - - _v2$1.setFromMatrixPosition(this.matrixWorld); - - const distance = _v1$2.distanceTo(_v2$1) / camera.zoom; - levels[0].object.visible = true; - let i, l; - - for (i = 1, l = levels.length; i < l; i++) { - if (distance >= levels[i].distance) { - levels[i - 1].object.visible = false; - levels[i].object.visible = true; - } else { - break; - } - } - - this._currentLevel = i - 1; - - for (; i < l; i++) { - levels[i].object.visible = false; - } - } - } - - toJSON(meta) { - const data = super.toJSON(meta); - if (this.autoUpdate === false) data.object.autoUpdate = false; - data.object.levels = []; - const levels = this.levels; - - for (let i = 0, l = levels.length; i < l; i++) { - const level = levels[i]; - data.object.levels.push({ - object: level.object.uuid, - distance: level.distance - }); - } - - return data; - } - - } - - const _basePosition = /*@__PURE__*/new Vector3(); - - const _skinIndex = /*@__PURE__*/new Vector4(); - - const _skinWeight = /*@__PURE__*/new Vector4(); - - const _vector$5 = /*@__PURE__*/new Vector3(); - - const _matrix = /*@__PURE__*/new Matrix4(); - - class SkinnedMesh extends Mesh { - constructor(geometry, material) { - super(geometry, material); - this.type = 'SkinnedMesh'; - this.bindMode = 'attached'; - this.bindMatrix = new Matrix4(); - this.bindMatrixInverse = new Matrix4(); - } - - copy(source) { - super.copy(source); - this.bindMode = source.bindMode; - this.bindMatrix.copy(source.bindMatrix); - this.bindMatrixInverse.copy(source.bindMatrixInverse); - this.skeleton = source.skeleton; - return this; - } - - bind(skeleton, bindMatrix) { - this.skeleton = skeleton; - - if (bindMatrix === undefined) { - this.updateMatrixWorld(true); - this.skeleton.calculateInverses(); - bindMatrix = this.matrixWorld; - } - - this.bindMatrix.copy(bindMatrix); - this.bindMatrixInverse.copy(bindMatrix).invert(); - } - - pose() { - this.skeleton.pose(); - } - - normalizeSkinWeights() { - const vector = new Vector4(); - const skinWeight = this.geometry.attributes.skinWeight; - - for (let i = 0, l = skinWeight.count; i < l; i++) { - vector.fromBufferAttribute(skinWeight, i); - const scale = 1.0 / vector.manhattanLength(); - - if (scale !== Infinity) { - vector.multiplyScalar(scale); - } else { - vector.set(1, 0, 0, 0); // do something reasonable - } - - skinWeight.setXYZW(i, vector.x, vector.y, vector.z, vector.w); - } - } - - updateMatrixWorld(force) { - super.updateMatrixWorld(force); - - if (this.bindMode === 'attached') { - this.bindMatrixInverse.copy(this.matrixWorld).invert(); - } else if (this.bindMode === 'detached') { - this.bindMatrixInverse.copy(this.bindMatrix).invert(); - } else { - console.warn('THREE.SkinnedMesh: Unrecognized bindMode: ' + this.bindMode); - } - } - - boneTransform(index, target) { - const skeleton = this.skeleton; - const geometry = this.geometry; - - _skinIndex.fromBufferAttribute(geometry.attributes.skinIndex, index); - - _skinWeight.fromBufferAttribute(geometry.attributes.skinWeight, index); - - _basePosition.copy(target).applyMatrix4(this.bindMatrix); - - target.set(0, 0, 0); - - for (let i = 0; i < 4; i++) { - const weight = _skinWeight.getComponent(i); - - if (weight !== 0) { - const boneIndex = _skinIndex.getComponent(i); - - _matrix.multiplyMatrices(skeleton.bones[boneIndex].matrixWorld, skeleton.boneInverses[boneIndex]); - - target.addScaledVector(_vector$5.copy(_basePosition).applyMatrix4(_matrix), weight); - } - } - - return target.applyMatrix4(this.bindMatrixInverse); - } - - } - - SkinnedMesh.prototype.isSkinnedMesh = true; - - class Bone extends Object3D { - constructor() { - super(); - this.type = 'Bone'; - } - - } - - Bone.prototype.isBone = true; - - class DataTexture extends Texture { - constructor(data = null, width = 1, height = 1, format, type, mapping, wrapS, wrapT, magFilter = NearestFilter, minFilter = NearestFilter, anisotropy, encoding) { - super(null, mapping, wrapS, wrapT, magFilter, minFilter, format, type, anisotropy, encoding); - this.image = { - data: data, - width: width, - height: height - }; - this.generateMipmaps = false; - this.flipY = false; - this.unpackAlignment = 1; - } - - } - - DataTexture.prototype.isDataTexture = true; - - const _offsetMatrix = /*@__PURE__*/new Matrix4(); - - const _identityMatrix = /*@__PURE__*/new Matrix4(); - - class Skeleton { - constructor(bones = [], boneInverses = []) { - this.uuid = generateUUID(); - this.bones = bones.slice(0); - this.boneInverses = boneInverses; - this.boneMatrices = null; - this.boneTexture = null; - this.boneTextureSize = 0; - this.frame = -1; - this.init(); - } - - init() { - const bones = this.bones; - const boneInverses = this.boneInverses; - this.boneMatrices = new Float32Array(bones.length * 16); // calculate inverse bone matrices if necessary - - if (boneInverses.length === 0) { - this.calculateInverses(); - } else { - // handle special case - if (bones.length !== boneInverses.length) { - console.warn('THREE.Skeleton: Number of inverse bone matrices does not match amount of bones.'); - this.boneInverses = []; - - for (let i = 0, il = this.bones.length; i < il; i++) { - this.boneInverses.push(new Matrix4()); - } - } - } - } - - calculateInverses() { - this.boneInverses.length = 0; - - for (let i = 0, il = this.bones.length; i < il; i++) { - const inverse = new Matrix4(); - - if (this.bones[i]) { - inverse.copy(this.bones[i].matrixWorld).invert(); - } - - this.boneInverses.push(inverse); - } - } - - pose() { - // recover the bind-time world matrices - for (let i = 0, il = this.bones.length; i < il; i++) { - const bone = this.bones[i]; - - if (bone) { - bone.matrixWorld.copy(this.boneInverses[i]).invert(); - } - } // compute the local matrices, positions, rotations and scales - - - for (let i = 0, il = this.bones.length; i < il; i++) { - const bone = this.bones[i]; - - if (bone) { - if (bone.parent && bone.parent.isBone) { - bone.matrix.copy(bone.parent.matrixWorld).invert(); - bone.matrix.multiply(bone.matrixWorld); - } else { - bone.matrix.copy(bone.matrixWorld); - } - - bone.matrix.decompose(bone.position, bone.quaternion, bone.scale); - } - } - } - - update() { - const bones = this.bones; - const boneInverses = this.boneInverses; - const boneMatrices = this.boneMatrices; - const boneTexture = this.boneTexture; // flatten bone matrices to array - - for (let i = 0, il = bones.length; i < il; i++) { - // compute the offset between the current and the original transform - const matrix = bones[i] ? bones[i].matrixWorld : _identityMatrix; - - _offsetMatrix.multiplyMatrices(matrix, boneInverses[i]); - - _offsetMatrix.toArray(boneMatrices, i * 16); - } - - if (boneTexture !== null) { - boneTexture.needsUpdate = true; - } - } - - clone() { - return new Skeleton(this.bones, this.boneInverses); - } - - computeBoneTexture() { - // layout (1 matrix = 4 pixels) - // RGBA RGBA RGBA RGBA (=> column1, column2, column3, column4) - // with 8x8 pixel texture max 16 bones * 4 pixels = (8 * 8) - // 16x16 pixel texture max 64 bones * 4 pixels = (16 * 16) - // 32x32 pixel texture max 256 bones * 4 pixels = (32 * 32) - // 64x64 pixel texture max 1024 bones * 4 pixels = (64 * 64) - let size = Math.sqrt(this.bones.length * 4); // 4 pixels needed for 1 matrix - - size = ceilPowerOfTwo(size); - size = Math.max(size, 4); - const boneMatrices = new Float32Array(size * size * 4); // 4 floats per RGBA pixel - - boneMatrices.set(this.boneMatrices); // copy current values - - const boneTexture = new DataTexture(boneMatrices, size, size, RGBAFormat, FloatType); - boneTexture.needsUpdate = true; - this.boneMatrices = boneMatrices; - this.boneTexture = boneTexture; - this.boneTextureSize = size; - return this; - } - - getBoneByName(name) { - for (let i = 0, il = this.bones.length; i < il; i++) { - const bone = this.bones[i]; - - if (bone.name === name) { - return bone; - } - } - - return undefined; - } - - dispose() { - if (this.boneTexture !== null) { - this.boneTexture.dispose(); - this.boneTexture = null; - } - } - - fromJSON(json, bones) { - this.uuid = json.uuid; - - for (let i = 0, l = json.bones.length; i < l; i++) { - const uuid = json.bones[i]; - let bone = bones[uuid]; - - if (bone === undefined) { - console.warn('THREE.Skeleton: No bone found with UUID:', uuid); - bone = new Bone(); - } - - this.bones.push(bone); - this.boneInverses.push(new Matrix4().fromArray(json.boneInverses[i])); - } - - this.init(); - return this; - } - - toJSON() { - const data = { - metadata: { - version: 4.5, - type: 'Skeleton', - generator: 'Skeleton.toJSON' - }, - bones: [], - boneInverses: [] - }; - data.uuid = this.uuid; - const bones = this.bones; - const boneInverses = this.boneInverses; - - for (let i = 0, l = bones.length; i < l; i++) { - const bone = bones[i]; - data.bones.push(bone.uuid); - const boneInverse = boneInverses[i]; - data.boneInverses.push(boneInverse.toArray()); - } - - return data; - } - - } - - class InstancedBufferAttribute extends BufferAttribute { - constructor(array, itemSize, normalized, meshPerAttribute = 1) { - if (typeof normalized === 'number') { - meshPerAttribute = normalized; - normalized = false; - console.error('THREE.InstancedBufferAttribute: The constructor now expects normalized as the third argument.'); - } - - super(array, itemSize, normalized); - this.meshPerAttribute = meshPerAttribute; - } - - copy(source) { - super.copy(source); - this.meshPerAttribute = source.meshPerAttribute; - return this; - } - - toJSON() { - const data = super.toJSON(); - data.meshPerAttribute = this.meshPerAttribute; - data.isInstancedBufferAttribute = true; - return data; - } - - } - - InstancedBufferAttribute.prototype.isInstancedBufferAttribute = true; - - const _instanceLocalMatrix = /*@__PURE__*/new Matrix4(); - - const _instanceWorldMatrix = /*@__PURE__*/new Matrix4(); - - const _instanceIntersects = []; - - const _mesh = /*@__PURE__*/new Mesh(); - - class InstancedMesh extends Mesh { - constructor(geometry, material, count) { - super(geometry, material); - this.instanceMatrix = new InstancedBufferAttribute(new Float32Array(count * 16), 16); - this.instanceColor = null; - this.count = count; - this.frustumCulled = false; - } - - copy(source) { - super.copy(source); - this.instanceMatrix.copy(source.instanceMatrix); - if (source.instanceColor !== null) this.instanceColor = source.instanceColor.clone(); - this.count = source.count; - return this; - } - - getColorAt(index, color) { - color.fromArray(this.instanceColor.array, index * 3); - } - - getMatrixAt(index, matrix) { - matrix.fromArray(this.instanceMatrix.array, index * 16); - } - - raycast(raycaster, intersects) { - const matrixWorld = this.matrixWorld; - const raycastTimes = this.count; - _mesh.geometry = this.geometry; - _mesh.material = this.material; - if (_mesh.material === undefined) return; - - for (let instanceId = 0; instanceId < raycastTimes; instanceId++) { - // calculate the world matrix for each instance - this.getMatrixAt(instanceId, _instanceLocalMatrix); - - _instanceWorldMatrix.multiplyMatrices(matrixWorld, _instanceLocalMatrix); // the mesh represents this single instance - - - _mesh.matrixWorld = _instanceWorldMatrix; - - _mesh.raycast(raycaster, _instanceIntersects); // process the result of raycast - - - for (let i = 0, l = _instanceIntersects.length; i < l; i++) { - const intersect = _instanceIntersects[i]; - intersect.instanceId = instanceId; - intersect.object = this; - intersects.push(intersect); - } - - _instanceIntersects.length = 0; - } - } - - setColorAt(index, color) { - if (this.instanceColor === null) { - this.instanceColor = new InstancedBufferAttribute(new Float32Array(this.instanceMatrix.count * 3), 3); - } - - color.toArray(this.instanceColor.array, index * 3); - } - - setMatrixAt(index, matrix) { - matrix.toArray(this.instanceMatrix.array, index * 16); - } - - updateMorphTargets() {} - - dispose() { - this.dispatchEvent({ - type: 'dispose' - }); - } - - } - - InstancedMesh.prototype.isInstancedMesh = true; - - class LineBasicMaterial extends Material { - constructor(parameters) { - super(); - this.type = 'LineBasicMaterial'; - this.color = new Color(0xffffff); - this.linewidth = 1; - this.linecap = 'round'; - this.linejoin = 'round'; - this.fog = true; - this.setValues(parameters); - } - - copy(source) { - super.copy(source); - this.color.copy(source.color); - this.linewidth = source.linewidth; - this.linecap = source.linecap; - this.linejoin = source.linejoin; - this.fog = source.fog; - return this; - } - - } - - LineBasicMaterial.prototype.isLineBasicMaterial = true; - - const _start$1 = /*@__PURE__*/new Vector3(); - - const _end$1 = /*@__PURE__*/new Vector3(); - - const _inverseMatrix$1 = /*@__PURE__*/new Matrix4(); - - const _ray$1 = /*@__PURE__*/new Ray(); - - const _sphere$1 = /*@__PURE__*/new Sphere(); - - class Line extends Object3D { - constructor(geometry = new BufferGeometry(), material = new LineBasicMaterial()) { - super(); - this.type = 'Line'; - this.geometry = geometry; - this.material = material; - this.updateMorphTargets(); - } - - copy(source) { - super.copy(source); - this.material = source.material; - this.geometry = source.geometry; - return this; - } - - computeLineDistances() { - const geometry = this.geometry; - - if (geometry.isBufferGeometry) { - // we assume non-indexed geometry - if (geometry.index === null) { - const positionAttribute = geometry.attributes.position; - const lineDistances = [0]; - - for (let i = 1, l = positionAttribute.count; i < l; i++) { - _start$1.fromBufferAttribute(positionAttribute, i - 1); - - _end$1.fromBufferAttribute(positionAttribute, i); - - lineDistances[i] = lineDistances[i - 1]; - lineDistances[i] += _start$1.distanceTo(_end$1); - } - - geometry.setAttribute('lineDistance', new Float32BufferAttribute(lineDistances, 1)); - } else { - console.warn('THREE.Line.computeLineDistances(): Computation only possible with non-indexed BufferGeometry.'); - } - } else if (geometry.isGeometry) { - console.error('THREE.Line.computeLineDistances() no longer supports THREE.Geometry. Use THREE.BufferGeometry instead.'); - } - - return this; - } - - raycast(raycaster, intersects) { - const geometry = this.geometry; - const matrixWorld = this.matrixWorld; - const threshold = raycaster.params.Line.threshold; - const drawRange = geometry.drawRange; // Checking boundingSphere distance to ray - - if (geometry.boundingSphere === null) geometry.computeBoundingSphere(); - - _sphere$1.copy(geometry.boundingSphere); - - _sphere$1.applyMatrix4(matrixWorld); - - _sphere$1.radius += threshold; - if (raycaster.ray.intersectsSphere(_sphere$1) === false) return; // - - _inverseMatrix$1.copy(matrixWorld).invert(); - - _ray$1.copy(raycaster.ray).applyMatrix4(_inverseMatrix$1); - - const localThreshold = threshold / ((this.scale.x + this.scale.y + this.scale.z) / 3); - const localThresholdSq = localThreshold * localThreshold; - const vStart = new Vector3(); - const vEnd = new Vector3(); - const interSegment = new Vector3(); - const interRay = new Vector3(); - const step = this.isLineSegments ? 2 : 1; - - if (geometry.isBufferGeometry) { - const index = geometry.index; - const attributes = geometry.attributes; - const positionAttribute = attributes.position; - - if (index !== null) { - const start = Math.max(0, drawRange.start); - const end = Math.min(index.count, drawRange.start + drawRange.count); - - for (let i = start, l = end - 1; i < l; i += step) { - const a = index.getX(i); - const b = index.getX(i + 1); - vStart.fromBufferAttribute(positionAttribute, a); - vEnd.fromBufferAttribute(positionAttribute, b); - - const distSq = _ray$1.distanceSqToSegment(vStart, vEnd, interRay, interSegment); - - if (distSq > localThresholdSq) continue; - interRay.applyMatrix4(this.matrixWorld); //Move back to world space for distance calculation - - const distance = raycaster.ray.origin.distanceTo(interRay); - if (distance < raycaster.near || distance > raycaster.far) continue; - intersects.push({ - distance: distance, - // What do we want? intersection point on the ray or on the segment?? - // point: raycaster.ray.at( distance ), - point: interSegment.clone().applyMatrix4(this.matrixWorld), - index: i, - face: null, - faceIndex: null, - object: this - }); - } - } else { - const start = Math.max(0, drawRange.start); - const end = Math.min(positionAttribute.count, drawRange.start + drawRange.count); - - for (let i = start, l = end - 1; i < l; i += step) { - vStart.fromBufferAttribute(positionAttribute, i); - vEnd.fromBufferAttribute(positionAttribute, i + 1); - - const distSq = _ray$1.distanceSqToSegment(vStart, vEnd, interRay, interSegment); - - if (distSq > localThresholdSq) continue; - interRay.applyMatrix4(this.matrixWorld); //Move back to world space for distance calculation - - const distance = raycaster.ray.origin.distanceTo(interRay); - if (distance < raycaster.near || distance > raycaster.far) continue; - intersects.push({ - distance: distance, - // What do we want? intersection point on the ray or on the segment?? - // point: raycaster.ray.at( distance ), - point: interSegment.clone().applyMatrix4(this.matrixWorld), - index: i, - face: null, - faceIndex: null, - object: this - }); - } - } - } else if (geometry.isGeometry) { - console.error('THREE.Line.raycast() no longer supports THREE.Geometry. Use THREE.BufferGeometry instead.'); - } - } - - updateMorphTargets() { - const geometry = this.geometry; - - if (geometry.isBufferGeometry) { - const morphAttributes = geometry.morphAttributes; - const keys = Object.keys(morphAttributes); - - if (keys.length > 0) { - const morphAttribute = morphAttributes[keys[0]]; - - if (morphAttribute !== undefined) { - this.morphTargetInfluences = []; - this.morphTargetDictionary = {}; - - for (let m = 0, ml = morphAttribute.length; m < ml; m++) { - const name = morphAttribute[m].name || String(m); - this.morphTargetInfluences.push(0); - this.morphTargetDictionary[name] = m; - } - } - } - } else { - const morphTargets = geometry.morphTargets; - - if (morphTargets !== undefined && morphTargets.length > 0) { - console.error('THREE.Line.updateMorphTargets() does not support THREE.Geometry. Use THREE.BufferGeometry instead.'); - } - } - } - - } - - Line.prototype.isLine = true; - - const _start = /*@__PURE__*/new Vector3(); - - const _end = /*@__PURE__*/new Vector3(); - - class LineSegments extends Line { - constructor(geometry, material) { - super(geometry, material); - this.type = 'LineSegments'; - } - - computeLineDistances() { - const geometry = this.geometry; - - if (geometry.isBufferGeometry) { - // we assume non-indexed geometry - if (geometry.index === null) { - const positionAttribute = geometry.attributes.position; - const lineDistances = []; - - for (let i = 0, l = positionAttribute.count; i < l; i += 2) { - _start.fromBufferAttribute(positionAttribute, i); - - _end.fromBufferAttribute(positionAttribute, i + 1); - - lineDistances[i] = i === 0 ? 0 : lineDistances[i - 1]; - lineDistances[i + 1] = lineDistances[i] + _start.distanceTo(_end); - } - - geometry.setAttribute('lineDistance', new Float32BufferAttribute(lineDistances, 1)); - } else { - console.warn('THREE.LineSegments.computeLineDistances(): Computation only possible with non-indexed BufferGeometry.'); - } - } else if (geometry.isGeometry) { - console.error('THREE.LineSegments.computeLineDistances() no longer supports THREE.Geometry. Use THREE.BufferGeometry instead.'); - } - - return this; - } - - } - - LineSegments.prototype.isLineSegments = true; - - class LineLoop extends Line { - constructor(geometry, material) { - super(geometry, material); - this.type = 'LineLoop'; - } - - } - - LineLoop.prototype.isLineLoop = true; - - class PointsMaterial extends Material { - constructor(parameters) { - super(); - this.type = 'PointsMaterial'; - this.color = new Color(0xffffff); - this.map = null; - this.alphaMap = null; - this.size = 1; - this.sizeAttenuation = true; - this.fog = true; - this.setValues(parameters); - } - - copy(source) { - super.copy(source); - this.color.copy(source.color); - this.map = source.map; - this.alphaMap = source.alphaMap; - this.size = source.size; - this.sizeAttenuation = source.sizeAttenuation; - this.fog = source.fog; - return this; - } - - } - - PointsMaterial.prototype.isPointsMaterial = true; - - const _inverseMatrix = /*@__PURE__*/new Matrix4(); - - const _ray = /*@__PURE__*/new Ray(); - - const _sphere = /*@__PURE__*/new Sphere(); - - const _position$2 = /*@__PURE__*/new Vector3(); - - class Points extends Object3D { - constructor(geometry = new BufferGeometry(), material = new PointsMaterial()) { - super(); - this.type = 'Points'; - this.geometry = geometry; - this.material = material; - this.updateMorphTargets(); - } - - copy(source) { - super.copy(source); - this.material = source.material; - this.geometry = source.geometry; - return this; - } - - raycast(raycaster, intersects) { - const geometry = this.geometry; - const matrixWorld = this.matrixWorld; - const threshold = raycaster.params.Points.threshold; - const drawRange = geometry.drawRange; // Checking boundingSphere distance to ray - - if (geometry.boundingSphere === null) geometry.computeBoundingSphere(); - - _sphere.copy(geometry.boundingSphere); - - _sphere.applyMatrix4(matrixWorld); - - _sphere.radius += threshold; - if (raycaster.ray.intersectsSphere(_sphere) === false) return; // - - _inverseMatrix.copy(matrixWorld).invert(); - - _ray.copy(raycaster.ray).applyMatrix4(_inverseMatrix); - - const localThreshold = threshold / ((this.scale.x + this.scale.y + this.scale.z) / 3); - const localThresholdSq = localThreshold * localThreshold; - - if (geometry.isBufferGeometry) { - const index = geometry.index; - const attributes = geometry.attributes; - const positionAttribute = attributes.position; - - if (index !== null) { - const start = Math.max(0, drawRange.start); - const end = Math.min(index.count, drawRange.start + drawRange.count); - - for (let i = start, il = end; i < il; i++) { - const a = index.getX(i); - - _position$2.fromBufferAttribute(positionAttribute, a); - - testPoint(_position$2, a, localThresholdSq, matrixWorld, raycaster, intersects, this); - } - } else { - const start = Math.max(0, drawRange.start); - const end = Math.min(positionAttribute.count, drawRange.start + drawRange.count); - - for (let i = start, l = end; i < l; i++) { - _position$2.fromBufferAttribute(positionAttribute, i); - - testPoint(_position$2, i, localThresholdSq, matrixWorld, raycaster, intersects, this); - } - } - } else { - console.error('THREE.Points.raycast() no longer supports THREE.Geometry. Use THREE.BufferGeometry instead.'); - } - } - - updateMorphTargets() { - const geometry = this.geometry; - - if (geometry.isBufferGeometry) { - const morphAttributes = geometry.morphAttributes; - const keys = Object.keys(morphAttributes); - - if (keys.length > 0) { - const morphAttribute = morphAttributes[keys[0]]; - - if (morphAttribute !== undefined) { - this.morphTargetInfluences = []; - this.morphTargetDictionary = {}; - - for (let m = 0, ml = morphAttribute.length; m < ml; m++) { - const name = morphAttribute[m].name || String(m); - this.morphTargetInfluences.push(0); - this.morphTargetDictionary[name] = m; - } - } - } - } else { - const morphTargets = geometry.morphTargets; - - if (morphTargets !== undefined && morphTargets.length > 0) { - console.error('THREE.Points.updateMorphTargets() does not support THREE.Geometry. Use THREE.BufferGeometry instead.'); - } - } - } - - } - - Points.prototype.isPoints = true; - - function testPoint(point, index, localThresholdSq, matrixWorld, raycaster, intersects, object) { - const rayPointDistanceSq = _ray.distanceSqToPoint(point); - - if (rayPointDistanceSq < localThresholdSq) { - const intersectPoint = new Vector3(); - - _ray.closestPointToPoint(point, intersectPoint); - - intersectPoint.applyMatrix4(matrixWorld); - const distance = raycaster.ray.origin.distanceTo(intersectPoint); - if (distance < raycaster.near || distance > raycaster.far) return; - intersects.push({ - distance: distance, - distanceToRay: Math.sqrt(rayPointDistanceSq), - point: intersectPoint, - index: index, - face: null, - object: object - }); - } - } - - class VideoTexture extends Texture { - constructor(video, mapping, wrapS, wrapT, magFilter, minFilter, format, type, anisotropy) { - super(video, mapping, wrapS, wrapT, magFilter, minFilter, format, type, anisotropy); - this.minFilter = minFilter !== undefined ? minFilter : LinearFilter; - this.magFilter = magFilter !== undefined ? magFilter : LinearFilter; - this.generateMipmaps = false; - const scope = this; - - function updateVideo() { - scope.needsUpdate = true; - video.requestVideoFrameCallback(updateVideo); - } - - if ('requestVideoFrameCallback' in video) { - video.requestVideoFrameCallback(updateVideo); - } - } - - clone() { - return new this.constructor(this.image).copy(this); - } - - update() { - const video = this.image; - const hasVideoFrameCallback = ('requestVideoFrameCallback' in video); - - if (hasVideoFrameCallback === false && video.readyState >= video.HAVE_CURRENT_DATA) { - this.needsUpdate = true; - } - } - - } - - VideoTexture.prototype.isVideoTexture = true; - - class FramebufferTexture extends Texture { - constructor(width, height, format) { - super({ - width, - height - }); - this.format = format; - this.magFilter = NearestFilter; - this.minFilter = NearestFilter; - this.generateMipmaps = false; - this.needsUpdate = true; - } - - } - - FramebufferTexture.prototype.isFramebufferTexture = true; - - class CompressedTexture extends Texture { - constructor(mipmaps, width, height, format, type, mapping, wrapS, wrapT, magFilter, minFilter, anisotropy, encoding) { - super(null, mapping, wrapS, wrapT, magFilter, minFilter, format, type, anisotropy, encoding); - this.image = { - width: width, - height: height - }; - this.mipmaps = mipmaps; // no flipping for cube textures - // (also flipping doesn't work for compressed textures ) - - this.flipY = false; // can't generate mipmaps for compressed textures - // mips must be embedded in DDS files - - this.generateMipmaps = false; - } - - } - - CompressedTexture.prototype.isCompressedTexture = true; - - class CanvasTexture extends Texture { - constructor(canvas, mapping, wrapS, wrapT, magFilter, minFilter, format, type, anisotropy) { - super(canvas, mapping, wrapS, wrapT, magFilter, minFilter, format, type, anisotropy); - this.needsUpdate = true; - } - - } - - CanvasTexture.prototype.isCanvasTexture = true; - - /** - * Extensible curve object. - * - * Some common of curve methods: - * .getPoint( t, optionalTarget ), .getTangent( t, optionalTarget ) - * .getPointAt( u, optionalTarget ), .getTangentAt( u, optionalTarget ) - * .getPoints(), .getSpacedPoints() - * .getLength() - * .updateArcLengths() - * - * This following curves inherit from THREE.Curve: - * - * -- 2D curves -- - * THREE.ArcCurve - * THREE.CubicBezierCurve - * THREE.EllipseCurve - * THREE.LineCurve - * THREE.QuadraticBezierCurve - * THREE.SplineCurve - * - * -- 3D curves -- - * THREE.CatmullRomCurve3 - * THREE.CubicBezierCurve3 - * THREE.LineCurve3 - * THREE.QuadraticBezierCurve3 - * - * A series of curves can be represented as a THREE.CurvePath. - * - **/ - - class Curve { - constructor() { - this.type = 'Curve'; - this.arcLengthDivisions = 200; - } // Virtual base class method to overwrite and implement in subclasses - // - t [0 .. 1] - - - getPoint() { - console.warn('THREE.Curve: .getPoint() not implemented.'); - return null; - } // Get point at relative position in curve according to arc length - // - u [0 .. 1] - - - getPointAt(u, optionalTarget) { - const t = this.getUtoTmapping(u); - return this.getPoint(t, optionalTarget); - } // Get sequence of points using getPoint( t ) - - - getPoints(divisions = 5) { - const points = []; - - for (let d = 0; d <= divisions; d++) { - points.push(this.getPoint(d / divisions)); - } - - return points; - } // Get sequence of points using getPointAt( u ) - - - getSpacedPoints(divisions = 5) { - const points = []; - - for (let d = 0; d <= divisions; d++) { - points.push(this.getPointAt(d / divisions)); - } - - return points; - } // Get total curve arc length - - - getLength() { - const lengths = this.getLengths(); - return lengths[lengths.length - 1]; - } // Get list of cumulative segment lengths - - - getLengths(divisions = this.arcLengthDivisions) { - if (this.cacheArcLengths && this.cacheArcLengths.length === divisions + 1 && !this.needsUpdate) { - return this.cacheArcLengths; - } - - this.needsUpdate = false; - const cache = []; - let current, - last = this.getPoint(0); - let sum = 0; - cache.push(0); - - for (let p = 1; p <= divisions; p++) { - current = this.getPoint(p / divisions); - sum += current.distanceTo(last); - cache.push(sum); - last = current; - } - - this.cacheArcLengths = cache; - return cache; // { sums: cache, sum: sum }; Sum is in the last element. - } - - updateArcLengths() { - this.needsUpdate = true; - this.getLengths(); - } // Given u ( 0 .. 1 ), get a t to find p. This gives you points which are equidistant - - - getUtoTmapping(u, distance) { - const arcLengths = this.getLengths(); - let i = 0; - const il = arcLengths.length; - let targetArcLength; // The targeted u distance value to get - - if (distance) { - targetArcLength = distance; - } else { - targetArcLength = u * arcLengths[il - 1]; - } // binary search for the index with largest value smaller than target u distance - - - let low = 0, - high = il - 1, - comparison; - - while (low <= high) { - i = Math.floor(low + (high - low) / 2); // less likely to overflow, though probably not issue here, JS doesn't really have integers, all numbers are floats - - comparison = arcLengths[i] - targetArcLength; - - if (comparison < 0) { - low = i + 1; - } else if (comparison > 0) { - high = i - 1; - } else { - high = i; - break; // DONE - } - } - - i = high; - - if (arcLengths[i] === targetArcLength) { - return i / (il - 1); - } // we could get finer grain at lengths, or use simple interpolation between two points - - - const lengthBefore = arcLengths[i]; - const lengthAfter = arcLengths[i + 1]; - const segmentLength = lengthAfter - lengthBefore; // determine where we are between the 'before' and 'after' points - - const segmentFraction = (targetArcLength - lengthBefore) / segmentLength; // add that fractional amount to t - - const t = (i + segmentFraction) / (il - 1); - return t; - } // Returns a unit vector tangent at t - // In case any sub curve does not implement its tangent derivation, - // 2 points a small delta apart will be used to find its gradient - // which seems to give a reasonable approximation - - - getTangent(t, optionalTarget) { - const delta = 0.0001; - let t1 = t - delta; - let t2 = t + delta; // Capping in case of danger - - if (t1 < 0) t1 = 0; - if (t2 > 1) t2 = 1; - const pt1 = this.getPoint(t1); - const pt2 = this.getPoint(t2); - const tangent = optionalTarget || (pt1.isVector2 ? new Vector2() : new Vector3()); - tangent.copy(pt2).sub(pt1).normalize(); - return tangent; - } - - getTangentAt(u, optionalTarget) { - const t = this.getUtoTmapping(u); - return this.getTangent(t, optionalTarget); - } - - computeFrenetFrames(segments, closed) { - // see http://www.cs.indiana.edu/pub/techreports/TR425.pdf - const normal = new Vector3(); - const tangents = []; - const normals = []; - const binormals = []; - const vec = new Vector3(); - const mat = new Matrix4(); // compute the tangent vectors for each segment on the curve - - for (let i = 0; i <= segments; i++) { - const u = i / segments; - tangents[i] = this.getTangentAt(u, new Vector3()); - } // select an initial normal vector perpendicular to the first tangent vector, - // and in the direction of the minimum tangent xyz component - - - normals[0] = new Vector3(); - binormals[0] = new Vector3(); - let min = Number.MAX_VALUE; - const tx = Math.abs(tangents[0].x); - const ty = Math.abs(tangents[0].y); - const tz = Math.abs(tangents[0].z); - - if (tx <= min) { - min = tx; - normal.set(1, 0, 0); - } - - if (ty <= min) { - min = ty; - normal.set(0, 1, 0); - } - - if (tz <= min) { - normal.set(0, 0, 1); - } - - vec.crossVectors(tangents[0], normal).normalize(); - normals[0].crossVectors(tangents[0], vec); - binormals[0].crossVectors(tangents[0], normals[0]); // compute the slowly-varying normal and binormal vectors for each segment on the curve - - for (let i = 1; i <= segments; i++) { - normals[i] = normals[i - 1].clone(); - binormals[i] = binormals[i - 1].clone(); - vec.crossVectors(tangents[i - 1], tangents[i]); - - if (vec.length() > Number.EPSILON) { - vec.normalize(); - const theta = Math.acos(clamp(tangents[i - 1].dot(tangents[i]), -1, 1)); // clamp for floating pt errors - - normals[i].applyMatrix4(mat.makeRotationAxis(vec, theta)); - } - - binormals[i].crossVectors(tangents[i], normals[i]); - } // if the curve is closed, postprocess the vectors so the first and last normal vectors are the same - - - if (closed === true) { - let theta = Math.acos(clamp(normals[0].dot(normals[segments]), -1, 1)); - theta /= segments; - - if (tangents[0].dot(vec.crossVectors(normals[0], normals[segments])) > 0) { - theta = -theta; - } - - for (let i = 1; i <= segments; i++) { - // twist a little... - normals[i].applyMatrix4(mat.makeRotationAxis(tangents[i], theta * i)); - binormals[i].crossVectors(tangents[i], normals[i]); - } - } - - return { - tangents: tangents, - normals: normals, - binormals: binormals - }; - } - - clone() { - return new this.constructor().copy(this); - } - - copy(source) { - this.arcLengthDivisions = source.arcLengthDivisions; - return this; - } - - toJSON() { - const data = { - metadata: { - version: 4.5, - type: 'Curve', - generator: 'Curve.toJSON' - } - }; - data.arcLengthDivisions = this.arcLengthDivisions; - data.type = this.type; - return data; - } - - fromJSON(json) { - this.arcLengthDivisions = json.arcLengthDivisions; - return this; - } - - } - - class EllipseCurve extends Curve { - constructor(aX = 0, aY = 0, xRadius = 1, yRadius = 1, aStartAngle = 0, aEndAngle = Math.PI * 2, aClockwise = false, aRotation = 0) { - super(); - this.type = 'EllipseCurve'; - this.aX = aX; - this.aY = aY; - this.xRadius = xRadius; - this.yRadius = yRadius; - this.aStartAngle = aStartAngle; - this.aEndAngle = aEndAngle; - this.aClockwise = aClockwise; - this.aRotation = aRotation; - } - - getPoint(t, optionalTarget) { - const point = optionalTarget || new Vector2(); - const twoPi = Math.PI * 2; - let deltaAngle = this.aEndAngle - this.aStartAngle; - const samePoints = Math.abs(deltaAngle) < Number.EPSILON; // ensures that deltaAngle is 0 .. 2 PI - - while (deltaAngle < 0) deltaAngle += twoPi; - - while (deltaAngle > twoPi) deltaAngle -= twoPi; - - if (deltaAngle < Number.EPSILON) { - if (samePoints) { - deltaAngle = 0; - } else { - deltaAngle = twoPi; - } - } - - if (this.aClockwise === true && !samePoints) { - if (deltaAngle === twoPi) { - deltaAngle = -twoPi; - } else { - deltaAngle = deltaAngle - twoPi; - } - } - - const angle = this.aStartAngle + t * deltaAngle; - let x = this.aX + this.xRadius * Math.cos(angle); - let y = this.aY + this.yRadius * Math.sin(angle); - - if (this.aRotation !== 0) { - const cos = Math.cos(this.aRotation); - const sin = Math.sin(this.aRotation); - const tx = x - this.aX; - const ty = y - this.aY; // Rotate the point about the center of the ellipse. - - x = tx * cos - ty * sin + this.aX; - y = tx * sin + ty * cos + this.aY; - } - - return point.set(x, y); - } - - copy(source) { - super.copy(source); - this.aX = source.aX; - this.aY = source.aY; - this.xRadius = source.xRadius; - this.yRadius = source.yRadius; - this.aStartAngle = source.aStartAngle; - this.aEndAngle = source.aEndAngle; - this.aClockwise = source.aClockwise; - this.aRotation = source.aRotation; - return this; - } - - toJSON() { - const data = super.toJSON(); - data.aX = this.aX; - data.aY = this.aY; - data.xRadius = this.xRadius; - data.yRadius = this.yRadius; - data.aStartAngle = this.aStartAngle; - data.aEndAngle = this.aEndAngle; - data.aClockwise = this.aClockwise; - data.aRotation = this.aRotation; - return data; - } - - fromJSON(json) { - super.fromJSON(json); - this.aX = json.aX; - this.aY = json.aY; - this.xRadius = json.xRadius; - this.yRadius = json.yRadius; - this.aStartAngle = json.aStartAngle; - this.aEndAngle = json.aEndAngle; - this.aClockwise = json.aClockwise; - this.aRotation = json.aRotation; - return this; - } - - } - - EllipseCurve.prototype.isEllipseCurve = true; - - class ArcCurve extends EllipseCurve { - constructor(aX, aY, aRadius, aStartAngle, aEndAngle, aClockwise) { - super(aX, aY, aRadius, aRadius, aStartAngle, aEndAngle, aClockwise); - this.type = 'ArcCurve'; - } - - } - - ArcCurve.prototype.isArcCurve = true; - - /** - * Centripetal CatmullRom Curve - which is useful for avoiding - * cusps and self-intersections in non-uniform catmull rom curves. - * http://www.cemyuksel.com/research/catmullrom_param/catmullrom.pdf - * - * curve.type accepts centripetal(default), chordal and catmullrom - * curve.tension is used for catmullrom which defaults to 0.5 - */ - - /* - Based on an optimized c++ solution in - - http://stackoverflow.com/questions/9489736/catmull-rom-curve-with-no-cusps-and-no-self-intersections/ - - http://ideone.com/NoEbVM - - This CubicPoly class could be used for reusing some variables and calculations, - but for three.js curve use, it could be possible inlined and flatten into a single function call - which can be placed in CurveUtils. - */ - - function CubicPoly() { - let c0 = 0, - c1 = 0, - c2 = 0, - c3 = 0; - /* - * Compute coefficients for a cubic polynomial - * p(s) = c0 + c1*s + c2*s^2 + c3*s^3 - * such that - * p(0) = x0, p(1) = x1 - * and - * p'(0) = t0, p'(1) = t1. - */ - - function init(x0, x1, t0, t1) { - c0 = x0; - c1 = t0; - c2 = -3 * x0 + 3 * x1 - 2 * t0 - t1; - c3 = 2 * x0 - 2 * x1 + t0 + t1; - } - - return { - initCatmullRom: function (x0, x1, x2, x3, tension) { - init(x1, x2, tension * (x2 - x0), tension * (x3 - x1)); - }, - initNonuniformCatmullRom: function (x0, x1, x2, x3, dt0, dt1, dt2) { - // compute tangents when parameterized in [t1,t2] - let t1 = (x1 - x0) / dt0 - (x2 - x0) / (dt0 + dt1) + (x2 - x1) / dt1; - let t2 = (x2 - x1) / dt1 - (x3 - x1) / (dt1 + dt2) + (x3 - x2) / dt2; // rescale tangents for parametrization in [0,1] - - t1 *= dt1; - t2 *= dt1; - init(x1, x2, t1, t2); - }, - calc: function (t) { - const t2 = t * t; - const t3 = t2 * t; - return c0 + c1 * t + c2 * t2 + c3 * t3; - } - }; - } // - - - const tmp = new Vector3(); - const px = new CubicPoly(), - py = new CubicPoly(), - pz = new CubicPoly(); - - class CatmullRomCurve3 extends Curve { - constructor(points = [], closed = false, curveType = 'centripetal', tension = 0.5) { - super(); - this.type = 'CatmullRomCurve3'; - this.points = points; - this.closed = closed; - this.curveType = curveType; - this.tension = tension; - } - - getPoint(t, optionalTarget = new Vector3()) { - const point = optionalTarget; - const points = this.points; - const l = points.length; - const p = (l - (this.closed ? 0 : 1)) * t; - let intPoint = Math.floor(p); - let weight = p - intPoint; - - if (this.closed) { - intPoint += intPoint > 0 ? 0 : (Math.floor(Math.abs(intPoint) / l) + 1) * l; - } else if (weight === 0 && intPoint === l - 1) { - intPoint = l - 2; - weight = 1; - } - - let p0, p3; // 4 points (p1 & p2 defined below) - - if (this.closed || intPoint > 0) { - p0 = points[(intPoint - 1) % l]; - } else { - // extrapolate first point - tmp.subVectors(points[0], points[1]).add(points[0]); - p0 = tmp; - } - - const p1 = points[intPoint % l]; - const p2 = points[(intPoint + 1) % l]; - - if (this.closed || intPoint + 2 < l) { - p3 = points[(intPoint + 2) % l]; - } else { - // extrapolate last point - tmp.subVectors(points[l - 1], points[l - 2]).add(points[l - 1]); - p3 = tmp; - } - - if (this.curveType === 'centripetal' || this.curveType === 'chordal') { - // init Centripetal / Chordal Catmull-Rom - const pow = this.curveType === 'chordal' ? 0.5 : 0.25; - let dt0 = Math.pow(p0.distanceToSquared(p1), pow); - let dt1 = Math.pow(p1.distanceToSquared(p2), pow); - let dt2 = Math.pow(p2.distanceToSquared(p3), pow); // safety check for repeated points - - if (dt1 < 1e-4) dt1 = 1.0; - if (dt0 < 1e-4) dt0 = dt1; - if (dt2 < 1e-4) dt2 = dt1; - px.initNonuniformCatmullRom(p0.x, p1.x, p2.x, p3.x, dt0, dt1, dt2); - py.initNonuniformCatmullRom(p0.y, p1.y, p2.y, p3.y, dt0, dt1, dt2); - pz.initNonuniformCatmullRom(p0.z, p1.z, p2.z, p3.z, dt0, dt1, dt2); - } else if (this.curveType === 'catmullrom') { - px.initCatmullRom(p0.x, p1.x, p2.x, p3.x, this.tension); - py.initCatmullRom(p0.y, p1.y, p2.y, p3.y, this.tension); - pz.initCatmullRom(p0.z, p1.z, p2.z, p3.z, this.tension); - } - - point.set(px.calc(weight), py.calc(weight), pz.calc(weight)); - return point; - } - - copy(source) { - super.copy(source); - this.points = []; - - for (let i = 0, l = source.points.length; i < l; i++) { - const point = source.points[i]; - this.points.push(point.clone()); - } - - this.closed = source.closed; - this.curveType = source.curveType; - this.tension = source.tension; - return this; - } - - toJSON() { - const data = super.toJSON(); - data.points = []; - - for (let i = 0, l = this.points.length; i < l; i++) { - const point = this.points[i]; - data.points.push(point.toArray()); - } - - data.closed = this.closed; - data.curveType = this.curveType; - data.tension = this.tension; - return data; - } - - fromJSON(json) { - super.fromJSON(json); - this.points = []; - - for (let i = 0, l = json.points.length; i < l; i++) { - const point = json.points[i]; - this.points.push(new Vector3().fromArray(point)); - } - - this.closed = json.closed; - this.curveType = json.curveType; - this.tension = json.tension; - return this; - } - - } - - CatmullRomCurve3.prototype.isCatmullRomCurve3 = true; - - /** - * Bezier Curves formulas obtained from - * https://en.wikipedia.org/wiki/B%C3%A9zier_curve - */ - function CatmullRom(t, p0, p1, p2, p3) { - const v0 = (p2 - p0) * 0.5; - const v1 = (p3 - p1) * 0.5; - const t2 = t * t; - const t3 = t * t2; - return (2 * p1 - 2 * p2 + v0 + v1) * t3 + (-3 * p1 + 3 * p2 - 2 * v0 - v1) * t2 + v0 * t + p1; - } // - - - function QuadraticBezierP0(t, p) { - const k = 1 - t; - return k * k * p; - } - - function QuadraticBezierP1(t, p) { - return 2 * (1 - t) * t * p; - } - - function QuadraticBezierP2(t, p) { - return t * t * p; - } - - function QuadraticBezier(t, p0, p1, p2) { - return QuadraticBezierP0(t, p0) + QuadraticBezierP1(t, p1) + QuadraticBezierP2(t, p2); - } // - - - function CubicBezierP0(t, p) { - const k = 1 - t; - return k * k * k * p; - } - - function CubicBezierP1(t, p) { - const k = 1 - t; - return 3 * k * k * t * p; - } - - function CubicBezierP2(t, p) { - return 3 * (1 - t) * t * t * p; - } - - function CubicBezierP3(t, p) { - return t * t * t * p; - } - - function CubicBezier(t, p0, p1, p2, p3) { - return CubicBezierP0(t, p0) + CubicBezierP1(t, p1) + CubicBezierP2(t, p2) + CubicBezierP3(t, p3); - } - - class CubicBezierCurve extends Curve { - constructor(v0 = new Vector2(), v1 = new Vector2(), v2 = new Vector2(), v3 = new Vector2()) { - super(); - this.type = 'CubicBezierCurve'; - this.v0 = v0; - this.v1 = v1; - this.v2 = v2; - this.v3 = v3; - } - - getPoint(t, optionalTarget = new Vector2()) { - const point = optionalTarget; - const v0 = this.v0, - v1 = this.v1, - v2 = this.v2, - v3 = this.v3; - point.set(CubicBezier(t, v0.x, v1.x, v2.x, v3.x), CubicBezier(t, v0.y, v1.y, v2.y, v3.y)); - return point; - } - - copy(source) { - super.copy(source); - this.v0.copy(source.v0); - this.v1.copy(source.v1); - this.v2.copy(source.v2); - this.v3.copy(source.v3); - return this; - } - - toJSON() { - const data = super.toJSON(); - data.v0 = this.v0.toArray(); - data.v1 = this.v1.toArray(); - data.v2 = this.v2.toArray(); - data.v3 = this.v3.toArray(); - return data; - } - - fromJSON(json) { - super.fromJSON(json); - this.v0.fromArray(json.v0); - this.v1.fromArray(json.v1); - this.v2.fromArray(json.v2); - this.v3.fromArray(json.v3); - return this; - } - - } - - CubicBezierCurve.prototype.isCubicBezierCurve = true; - - class CubicBezierCurve3 extends Curve { - constructor(v0 = new Vector3(), v1 = new Vector3(), v2 = new Vector3(), v3 = new Vector3()) { - super(); - this.type = 'CubicBezierCurve3'; - this.v0 = v0; - this.v1 = v1; - this.v2 = v2; - this.v3 = v3; - } - - getPoint(t, optionalTarget = new Vector3()) { - const point = optionalTarget; - const v0 = this.v0, - v1 = this.v1, - v2 = this.v2, - v3 = this.v3; - point.set(CubicBezier(t, v0.x, v1.x, v2.x, v3.x), CubicBezier(t, v0.y, v1.y, v2.y, v3.y), CubicBezier(t, v0.z, v1.z, v2.z, v3.z)); - return point; - } - - copy(source) { - super.copy(source); - this.v0.copy(source.v0); - this.v1.copy(source.v1); - this.v2.copy(source.v2); - this.v3.copy(source.v3); - return this; - } - - toJSON() { - const data = super.toJSON(); - data.v0 = this.v0.toArray(); - data.v1 = this.v1.toArray(); - data.v2 = this.v2.toArray(); - data.v3 = this.v3.toArray(); - return data; - } - - fromJSON(json) { - super.fromJSON(json); - this.v0.fromArray(json.v0); - this.v1.fromArray(json.v1); - this.v2.fromArray(json.v2); - this.v3.fromArray(json.v3); - return this; - } - - } - - CubicBezierCurve3.prototype.isCubicBezierCurve3 = true; - - class LineCurve extends Curve { - constructor(v1 = new Vector2(), v2 = new Vector2()) { - super(); - this.type = 'LineCurve'; - this.v1 = v1; - this.v2 = v2; - } - - getPoint(t, optionalTarget = new Vector2()) { - const point = optionalTarget; - - if (t === 1) { - point.copy(this.v2); - } else { - point.copy(this.v2).sub(this.v1); - point.multiplyScalar(t).add(this.v1); - } - - return point; - } // Line curve is linear, so we can overwrite default getPointAt - - - getPointAt(u, optionalTarget) { - return this.getPoint(u, optionalTarget); - } - - getTangent(t, optionalTarget) { - const tangent = optionalTarget || new Vector2(); - tangent.copy(this.v2).sub(this.v1).normalize(); - return tangent; - } - - copy(source) { - super.copy(source); - this.v1.copy(source.v1); - this.v2.copy(source.v2); - return this; - } - - toJSON() { - const data = super.toJSON(); - data.v1 = this.v1.toArray(); - data.v2 = this.v2.toArray(); - return data; - } - - fromJSON(json) { - super.fromJSON(json); - this.v1.fromArray(json.v1); - this.v2.fromArray(json.v2); - return this; - } - - } - - LineCurve.prototype.isLineCurve = true; - - class LineCurve3 extends Curve { - constructor(v1 = new Vector3(), v2 = new Vector3()) { - super(); - this.type = 'LineCurve3'; - this.isLineCurve3 = true; - this.v1 = v1; - this.v2 = v2; - } - - getPoint(t, optionalTarget = new Vector3()) { - const point = optionalTarget; - - if (t === 1) { - point.copy(this.v2); - } else { - point.copy(this.v2).sub(this.v1); - point.multiplyScalar(t).add(this.v1); - } - - return point; - } // Line curve is linear, so we can overwrite default getPointAt - - - getPointAt(u, optionalTarget) { - return this.getPoint(u, optionalTarget); - } - - copy(source) { - super.copy(source); - this.v1.copy(source.v1); - this.v2.copy(source.v2); - return this; - } - - toJSON() { - const data = super.toJSON(); - data.v1 = this.v1.toArray(); - data.v2 = this.v2.toArray(); - return data; - } - - fromJSON(json) { - super.fromJSON(json); - this.v1.fromArray(json.v1); - this.v2.fromArray(json.v2); - return this; - } - - } - - class QuadraticBezierCurve extends Curve { - constructor(v0 = new Vector2(), v1 = new Vector2(), v2 = new Vector2()) { - super(); - this.type = 'QuadraticBezierCurve'; - this.v0 = v0; - this.v1 = v1; - this.v2 = v2; - } - - getPoint(t, optionalTarget = new Vector2()) { - const point = optionalTarget; - const v0 = this.v0, - v1 = this.v1, - v2 = this.v2; - point.set(QuadraticBezier(t, v0.x, v1.x, v2.x), QuadraticBezier(t, v0.y, v1.y, v2.y)); - return point; - } - - copy(source) { - super.copy(source); - this.v0.copy(source.v0); - this.v1.copy(source.v1); - this.v2.copy(source.v2); - return this; - } - - toJSON() { - const data = super.toJSON(); - data.v0 = this.v0.toArray(); - data.v1 = this.v1.toArray(); - data.v2 = this.v2.toArray(); - return data; - } - - fromJSON(json) { - super.fromJSON(json); - this.v0.fromArray(json.v0); - this.v1.fromArray(json.v1); - this.v2.fromArray(json.v2); - return this; - } - - } - - QuadraticBezierCurve.prototype.isQuadraticBezierCurve = true; - - class QuadraticBezierCurve3 extends Curve { - constructor(v0 = new Vector3(), v1 = new Vector3(), v2 = new Vector3()) { - super(); - this.type = 'QuadraticBezierCurve3'; - this.v0 = v0; - this.v1 = v1; - this.v2 = v2; - } - - getPoint(t, optionalTarget = new Vector3()) { - const point = optionalTarget; - const v0 = this.v0, - v1 = this.v1, - v2 = this.v2; - point.set(QuadraticBezier(t, v0.x, v1.x, v2.x), QuadraticBezier(t, v0.y, v1.y, v2.y), QuadraticBezier(t, v0.z, v1.z, v2.z)); - return point; - } - - copy(source) { - super.copy(source); - this.v0.copy(source.v0); - this.v1.copy(source.v1); - this.v2.copy(source.v2); - return this; - } - - toJSON() { - const data = super.toJSON(); - data.v0 = this.v0.toArray(); - data.v1 = this.v1.toArray(); - data.v2 = this.v2.toArray(); - return data; - } - - fromJSON(json) { - super.fromJSON(json); - this.v0.fromArray(json.v0); - this.v1.fromArray(json.v1); - this.v2.fromArray(json.v2); - return this; - } - - } - - QuadraticBezierCurve3.prototype.isQuadraticBezierCurve3 = true; - - class SplineCurve extends Curve { - constructor(points = []) { - super(); - this.type = 'SplineCurve'; - this.points = points; - } - - getPoint(t, optionalTarget = new Vector2()) { - const point = optionalTarget; - const points = this.points; - const p = (points.length - 1) * t; - const intPoint = Math.floor(p); - const weight = p - intPoint; - const p0 = points[intPoint === 0 ? intPoint : intPoint - 1]; - const p1 = points[intPoint]; - const p2 = points[intPoint > points.length - 2 ? points.length - 1 : intPoint + 1]; - const p3 = points[intPoint > points.length - 3 ? points.length - 1 : intPoint + 2]; - point.set(CatmullRom(weight, p0.x, p1.x, p2.x, p3.x), CatmullRom(weight, p0.y, p1.y, p2.y, p3.y)); - return point; - } - - copy(source) { - super.copy(source); - this.points = []; - - for (let i = 0, l = source.points.length; i < l; i++) { - const point = source.points[i]; - this.points.push(point.clone()); - } - - return this; - } - - toJSON() { - const data = super.toJSON(); - data.points = []; - - for (let i = 0, l = this.points.length; i < l; i++) { - const point = this.points[i]; - data.points.push(point.toArray()); - } - - return data; - } - - fromJSON(json) { - super.fromJSON(json); - this.points = []; - - for (let i = 0, l = json.points.length; i < l; i++) { - const point = json.points[i]; - this.points.push(new Vector2().fromArray(point)); - } - - return this; - } - - } - - SplineCurve.prototype.isSplineCurve = true; - - var Curves = /*#__PURE__*/Object.freeze({ - __proto__: null, - ArcCurve: ArcCurve, - CatmullRomCurve3: CatmullRomCurve3, - CubicBezierCurve: CubicBezierCurve, - CubicBezierCurve3: CubicBezierCurve3, - EllipseCurve: EllipseCurve, - LineCurve: LineCurve, - LineCurve3: LineCurve3, - QuadraticBezierCurve: QuadraticBezierCurve, - QuadraticBezierCurve3: QuadraticBezierCurve3, - SplineCurve: SplineCurve - }); - - /************************************************************** - * Curved Path - a curve path is simply a array of connected - * curves, but retains the api of a curve - **************************************************************/ - - class CurvePath extends Curve { - constructor() { - super(); - this.type = 'CurvePath'; - this.curves = []; - this.autoClose = false; // Automatically closes the path - } - - add(curve) { - this.curves.push(curve); - } - - closePath() { - // Add a line curve if start and end of lines are not connected - const startPoint = this.curves[0].getPoint(0); - const endPoint = this.curves[this.curves.length - 1].getPoint(1); - - if (!startPoint.equals(endPoint)) { - this.curves.push(new LineCurve(endPoint, startPoint)); - } - } // To get accurate point with reference to - // entire path distance at time t, - // following has to be done: - // 1. Length of each sub path have to be known - // 2. Locate and identify type of curve - // 3. Get t for the curve - // 4. Return curve.getPointAt(t') - - - getPoint(t, optionalTarget) { - const d = t * this.getLength(); - const curveLengths = this.getCurveLengths(); - let i = 0; // To think about boundaries points. - - while (i < curveLengths.length) { - if (curveLengths[i] >= d) { - const diff = curveLengths[i] - d; - const curve = this.curves[i]; - const segmentLength = curve.getLength(); - const u = segmentLength === 0 ? 0 : 1 - diff / segmentLength; - return curve.getPointAt(u, optionalTarget); - } - - i++; - } - - return null; // loop where sum != 0, sum > d , sum+1 1 && !points[points.length - 1].equals(points[0])) { - points.push(points[0]); - } - - return points; - } - - copy(source) { - super.copy(source); - this.curves = []; - - for (let i = 0, l = source.curves.length; i < l; i++) { - const curve = source.curves[i]; - this.curves.push(curve.clone()); - } - - this.autoClose = source.autoClose; - return this; - } - - toJSON() { - const data = super.toJSON(); - data.autoClose = this.autoClose; - data.curves = []; - - for (let i = 0, l = this.curves.length; i < l; i++) { - const curve = this.curves[i]; - data.curves.push(curve.toJSON()); - } - - return data; - } - - fromJSON(json) { - super.fromJSON(json); - this.autoClose = json.autoClose; - this.curves = []; - - for (let i = 0, l = json.curves.length; i < l; i++) { - const curve = json.curves[i]; - this.curves.push(new Curves[curve.type]().fromJSON(curve)); - } - - return this; - } - - } - - class Path extends CurvePath { - constructor(points) { - super(); - this.type = 'Path'; - this.currentPoint = new Vector2(); - - if (points) { - this.setFromPoints(points); - } - } - - setFromPoints(points) { - this.moveTo(points[0].x, points[0].y); - - for (let i = 1, l = points.length; i < l; i++) { - this.lineTo(points[i].x, points[i].y); - } - - return this; - } - - moveTo(x, y) { - this.currentPoint.set(x, y); // TODO consider referencing vectors instead of copying? - - return this; - } - - lineTo(x, y) { - const curve = new LineCurve(this.currentPoint.clone(), new Vector2(x, y)); - this.curves.push(curve); - this.currentPoint.set(x, y); - return this; - } - - quadraticCurveTo(aCPx, aCPy, aX, aY) { - const curve = new QuadraticBezierCurve(this.currentPoint.clone(), new Vector2(aCPx, aCPy), new Vector2(aX, aY)); - this.curves.push(curve); - this.currentPoint.set(aX, aY); - return this; - } - - bezierCurveTo(aCP1x, aCP1y, aCP2x, aCP2y, aX, aY) { - const curve = new CubicBezierCurve(this.currentPoint.clone(), new Vector2(aCP1x, aCP1y), new Vector2(aCP2x, aCP2y), new Vector2(aX, aY)); - this.curves.push(curve); - this.currentPoint.set(aX, aY); - return this; - } - - splineThru(pts - /*Array of Vector*/ - ) { - const npts = [this.currentPoint.clone()].concat(pts); - const curve = new SplineCurve(npts); - this.curves.push(curve); - this.currentPoint.copy(pts[pts.length - 1]); - return this; - } - - arc(aX, aY, aRadius, aStartAngle, aEndAngle, aClockwise) { - const x0 = this.currentPoint.x; - const y0 = this.currentPoint.y; - this.absarc(aX + x0, aY + y0, aRadius, aStartAngle, aEndAngle, aClockwise); - return this; - } - - absarc(aX, aY, aRadius, aStartAngle, aEndAngle, aClockwise) { - this.absellipse(aX, aY, aRadius, aRadius, aStartAngle, aEndAngle, aClockwise); - return this; - } - - ellipse(aX, aY, xRadius, yRadius, aStartAngle, aEndAngle, aClockwise, aRotation) { - const x0 = this.currentPoint.x; - const y0 = this.currentPoint.y; - this.absellipse(aX + x0, aY + y0, xRadius, yRadius, aStartAngle, aEndAngle, aClockwise, aRotation); - return this; - } - - absellipse(aX, aY, xRadius, yRadius, aStartAngle, aEndAngle, aClockwise, aRotation) { - const curve = new EllipseCurve(aX, aY, xRadius, yRadius, aStartAngle, aEndAngle, aClockwise, aRotation); - - if (this.curves.length > 0) { - // if a previous curve is present, attempt to join - const firstPoint = curve.getPoint(0); - - if (!firstPoint.equals(this.currentPoint)) { - this.lineTo(firstPoint.x, firstPoint.y); - } - } - - this.curves.push(curve); - const lastPoint = curve.getPoint(1); - this.currentPoint.copy(lastPoint); - return this; - } - - copy(source) { - super.copy(source); - this.currentPoint.copy(source.currentPoint); - return this; - } - - toJSON() { - const data = super.toJSON(); - data.currentPoint = this.currentPoint.toArray(); - return data; - } - - fromJSON(json) { - super.fromJSON(json); - this.currentPoint.fromArray(json.currentPoint); - return this; - } - - } - - class LatheGeometry extends BufferGeometry { - constructor(points = [new Vector2(0, 0.5), new Vector2(0.5, 0), new Vector2(0, -0.5)], segments = 12, phiStart = 0, phiLength = Math.PI * 2) { - super(); - this.type = 'LatheGeometry'; - this.parameters = { - points: points, - segments: segments, - phiStart: phiStart, - phiLength: phiLength - }; - segments = Math.floor(segments); // clamp phiLength so it's in range of [ 0, 2PI ] - - phiLength = clamp(phiLength, 0, Math.PI * 2); // buffers - - const indices = []; - const vertices = []; - const uvs = []; - const initNormals = []; - const normals = []; // helper variables - - const inverseSegments = 1.0 / segments; - const vertex = new Vector3(); - const uv = new Vector2(); - const normal = new Vector3(); - const curNormal = new Vector3(); - const prevNormal = new Vector3(); - let dx = 0; - let dy = 0; // pre-compute normals for initial "meridian" - - for (let j = 0; j <= points.length - 1; j++) { - switch (j) { - case 0: - // special handling for 1st vertex on path - dx = points[j + 1].x - points[j].x; - dy = points[j + 1].y - points[j].y; - normal.x = dy * 1.0; - normal.y = -dx; - normal.z = dy * 0.0; - prevNormal.copy(normal); - normal.normalize(); - initNormals.push(normal.x, normal.y, normal.z); - break; - - case points.length - 1: - // special handling for last Vertex on path - initNormals.push(prevNormal.x, prevNormal.y, prevNormal.z); - break; - - default: - // default handling for all vertices in between - dx = points[j + 1].x - points[j].x; - dy = points[j + 1].y - points[j].y; - normal.x = dy * 1.0; - normal.y = -dx; - normal.z = dy * 0.0; - curNormal.copy(normal); - normal.x += prevNormal.x; - normal.y += prevNormal.y; - normal.z += prevNormal.z; - normal.normalize(); - initNormals.push(normal.x, normal.y, normal.z); - prevNormal.copy(curNormal); - } - } // generate vertices, uvs and normals - - - for (let i = 0; i <= segments; i++) { - const phi = phiStart + i * inverseSegments * phiLength; - const sin = Math.sin(phi); - const cos = Math.cos(phi); - - for (let j = 0; j <= points.length - 1; j++) { - // vertex - vertex.x = points[j].x * sin; - vertex.y = points[j].y; - vertex.z = points[j].x * cos; - vertices.push(vertex.x, vertex.y, vertex.z); // uv - - uv.x = i / segments; - uv.y = j / (points.length - 1); - uvs.push(uv.x, uv.y); // normal - - const x = initNormals[3 * j + 0] * sin; - const y = initNormals[3 * j + 1]; - const z = initNormals[3 * j + 0] * cos; - normals.push(x, y, z); - } - } // indices - - - for (let i = 0; i < segments; i++) { - for (let j = 0; j < points.length - 1; j++) { - const base = j + i * points.length; - const a = base; - const b = base + points.length; - const c = base + points.length + 1; - const d = base + 1; // faces - - indices.push(a, b, d); - indices.push(c, d, b); - } - } // build geometry - - - this.setIndex(indices); - this.setAttribute('position', new Float32BufferAttribute(vertices, 3)); - this.setAttribute('uv', new Float32BufferAttribute(uvs, 2)); - this.setAttribute('normal', new Float32BufferAttribute(normals, 3)); - } - - static fromJSON(data) { - return new LatheGeometry(data.points, data.segments, data.phiStart, data.phiLength); - } - - } - - class CapsuleGeometry extends LatheGeometry { - constructor(radius = 1, length = 1, capSegments = 4, radialSegments = 8) { - const path = new Path(); - path.absarc(0, -length / 2, radius, Math.PI * 1.5, 0); - path.absarc(0, length / 2, radius, 0, Math.PI * 0.5); - super(path.getPoints(capSegments), radialSegments); - this.type = 'CapsuleGeometry'; - this.parameters = { - radius: radius, - height: length, - capSegments: capSegments, - radialSegments: radialSegments - }; - } - - static fromJSON(data) { - return new CapsuleGeometry(data.radius, data.length, data.capSegments, data.radialSegments); - } - - } - - class CircleGeometry extends BufferGeometry { - constructor(radius = 1, segments = 8, thetaStart = 0, thetaLength = Math.PI * 2) { - super(); - this.type = 'CircleGeometry'; - this.parameters = { - radius: radius, - segments: segments, - thetaStart: thetaStart, - thetaLength: thetaLength - }; - segments = Math.max(3, segments); // buffers - - const indices = []; - const vertices = []; - const normals = []; - const uvs = []; // helper variables - - const vertex = new Vector3(); - const uv = new Vector2(); // center point - - vertices.push(0, 0, 0); - normals.push(0, 0, 1); - uvs.push(0.5, 0.5); - - for (let s = 0, i = 3; s <= segments; s++, i += 3) { - const segment = thetaStart + s / segments * thetaLength; // vertex - - vertex.x = radius * Math.cos(segment); - vertex.y = radius * Math.sin(segment); - vertices.push(vertex.x, vertex.y, vertex.z); // normal - - normals.push(0, 0, 1); // uvs - - uv.x = (vertices[i] / radius + 1) / 2; - uv.y = (vertices[i + 1] / radius + 1) / 2; - uvs.push(uv.x, uv.y); - } // indices - - - for (let i = 1; i <= segments; i++) { - indices.push(i, i + 1, 0); - } // build geometry - - - this.setIndex(indices); - this.setAttribute('position', new Float32BufferAttribute(vertices, 3)); - this.setAttribute('normal', new Float32BufferAttribute(normals, 3)); - this.setAttribute('uv', new Float32BufferAttribute(uvs, 2)); - } - - static fromJSON(data) { - return new CircleGeometry(data.radius, data.segments, data.thetaStart, data.thetaLength); - } - - } - - class CylinderGeometry extends BufferGeometry { - constructor(radiusTop = 1, radiusBottom = 1, height = 1, radialSegments = 8, heightSegments = 1, openEnded = false, thetaStart = 0, thetaLength = Math.PI * 2) { - super(); - this.type = 'CylinderGeometry'; - this.parameters = { - radiusTop: radiusTop, - radiusBottom: radiusBottom, - height: height, - radialSegments: radialSegments, - heightSegments: heightSegments, - openEnded: openEnded, - thetaStart: thetaStart, - thetaLength: thetaLength - }; - const scope = this; - radialSegments = Math.floor(radialSegments); - heightSegments = Math.floor(heightSegments); // buffers - - const indices = []; - const vertices = []; - const normals = []; - const uvs = []; // helper variables - - let index = 0; - const indexArray = []; - const halfHeight = height / 2; - let groupStart = 0; // generate geometry - - generateTorso(); - - if (openEnded === false) { - if (radiusTop > 0) generateCap(true); - if (radiusBottom > 0) generateCap(false); - } // build geometry - - - this.setIndex(indices); - this.setAttribute('position', new Float32BufferAttribute(vertices, 3)); - this.setAttribute('normal', new Float32BufferAttribute(normals, 3)); - this.setAttribute('uv', new Float32BufferAttribute(uvs, 2)); - - function generateTorso() { - const normal = new Vector3(); - const vertex = new Vector3(); - let groupCount = 0; // this will be used to calculate the normal - - const slope = (radiusBottom - radiusTop) / height; // generate vertices, normals and uvs - - for (let y = 0; y <= heightSegments; y++) { - const indexRow = []; - const v = y / heightSegments; // calculate the radius of the current row - - const radius = v * (radiusBottom - radiusTop) + radiusTop; - - for (let x = 0; x <= radialSegments; x++) { - const u = x / radialSegments; - const theta = u * thetaLength + thetaStart; - const sinTheta = Math.sin(theta); - const cosTheta = Math.cos(theta); // vertex - - vertex.x = radius * sinTheta; - vertex.y = -v * height + halfHeight; - vertex.z = radius * cosTheta; - vertices.push(vertex.x, vertex.y, vertex.z); // normal - - normal.set(sinTheta, slope, cosTheta).normalize(); - normals.push(normal.x, normal.y, normal.z); // uv - - uvs.push(u, 1 - v); // save index of vertex in respective row - - indexRow.push(index++); - } // now save vertices of the row in our index array - - - indexArray.push(indexRow); - } // generate indices - - - for (let x = 0; x < radialSegments; x++) { - for (let y = 0; y < heightSegments; y++) { - // we use the index array to access the correct indices - const a = indexArray[y][x]; - const b = indexArray[y + 1][x]; - const c = indexArray[y + 1][x + 1]; - const d = indexArray[y][x + 1]; // faces - - indices.push(a, b, d); - indices.push(b, c, d); // update group counter - - groupCount += 6; - } - } // add a group to the geometry. this will ensure multi material support - - - scope.addGroup(groupStart, groupCount, 0); // calculate new start value for groups - - groupStart += groupCount; - } - - function generateCap(top) { - // save the index of the first center vertex - const centerIndexStart = index; - const uv = new Vector2(); - const vertex = new Vector3(); - let groupCount = 0; - const radius = top === true ? radiusTop : radiusBottom; - const sign = top === true ? 1 : -1; // first we generate the center vertex data of the cap. - // because the geometry needs one set of uvs per face, - // we must generate a center vertex per face/segment - - for (let x = 1; x <= radialSegments; x++) { - // vertex - vertices.push(0, halfHeight * sign, 0); // normal - - normals.push(0, sign, 0); // uv - - uvs.push(0.5, 0.5); // increase index - - index++; - } // save the index of the last center vertex - - - const centerIndexEnd = index; // now we generate the surrounding vertices, normals and uvs - - for (let x = 0; x <= radialSegments; x++) { - const u = x / radialSegments; - const theta = u * thetaLength + thetaStart; - const cosTheta = Math.cos(theta); - const sinTheta = Math.sin(theta); // vertex - - vertex.x = radius * sinTheta; - vertex.y = halfHeight * sign; - vertex.z = radius * cosTheta; - vertices.push(vertex.x, vertex.y, vertex.z); // normal - - normals.push(0, sign, 0); // uv - - uv.x = cosTheta * 0.5 + 0.5; - uv.y = sinTheta * 0.5 * sign + 0.5; - uvs.push(uv.x, uv.y); // increase index - - index++; - } // generate indices - - - for (let x = 0; x < radialSegments; x++) { - const c = centerIndexStart + x; - const i = centerIndexEnd + x; - - if (top === true) { - // face top - indices.push(i, i + 1, c); - } else { - // face bottom - indices.push(i + 1, i, c); - } - - groupCount += 3; - } // add a group to the geometry. this will ensure multi material support - - - scope.addGroup(groupStart, groupCount, top === true ? 1 : 2); // calculate new start value for groups - - groupStart += groupCount; - } - } - - static fromJSON(data) { - return new CylinderGeometry(data.radiusTop, data.radiusBottom, data.height, data.radialSegments, data.heightSegments, data.openEnded, data.thetaStart, data.thetaLength); - } - - } - - class ConeGeometry extends CylinderGeometry { - constructor(radius = 1, height = 1, radialSegments = 8, heightSegments = 1, openEnded = false, thetaStart = 0, thetaLength = Math.PI * 2) { - super(0, radius, height, radialSegments, heightSegments, openEnded, thetaStart, thetaLength); - this.type = 'ConeGeometry'; - this.parameters = { - radius: radius, - height: height, - radialSegments: radialSegments, - heightSegments: heightSegments, - openEnded: openEnded, - thetaStart: thetaStart, - thetaLength: thetaLength - }; - } - - static fromJSON(data) { - return new ConeGeometry(data.radius, data.height, data.radialSegments, data.heightSegments, data.openEnded, data.thetaStart, data.thetaLength); - } - - } - - class PolyhedronGeometry extends BufferGeometry { - constructor(vertices = [], indices = [], radius = 1, detail = 0) { - super(); - this.type = 'PolyhedronGeometry'; - this.parameters = { - vertices: vertices, - indices: indices, - radius: radius, - detail: detail - }; // default buffer data - - const vertexBuffer = []; - const uvBuffer = []; // the subdivision creates the vertex buffer data - - subdivide(detail); // all vertices should lie on a conceptual sphere with a given radius - - applyRadius(radius); // finally, create the uv data - - generateUVs(); // build non-indexed geometry - - this.setAttribute('position', new Float32BufferAttribute(vertexBuffer, 3)); - this.setAttribute('normal', new Float32BufferAttribute(vertexBuffer.slice(), 3)); - this.setAttribute('uv', new Float32BufferAttribute(uvBuffer, 2)); - - if (detail === 0) { - this.computeVertexNormals(); // flat normals - } else { - this.normalizeNormals(); // smooth normals - } // helper functions - - - function subdivide(detail) { - const a = new Vector3(); - const b = new Vector3(); - const c = new Vector3(); // iterate over all faces and apply a subdivison with the given detail value - - for (let i = 0; i < indices.length; i += 3) { - // get the vertices of the face - getVertexByIndex(indices[i + 0], a); - getVertexByIndex(indices[i + 1], b); - getVertexByIndex(indices[i + 2], c); // perform subdivision - - subdivideFace(a, b, c, detail); - } - } - - function subdivideFace(a, b, c, detail) { - const cols = detail + 1; // we use this multidimensional array as a data structure for creating the subdivision - - const v = []; // construct all of the vertices for this subdivision - - for (let i = 0; i <= cols; i++) { - v[i] = []; - const aj = a.clone().lerp(c, i / cols); - const bj = b.clone().lerp(c, i / cols); - const rows = cols - i; - - for (let j = 0; j <= rows; j++) { - if (j === 0 && i === cols) { - v[i][j] = aj; - } else { - v[i][j] = aj.clone().lerp(bj, j / rows); - } - } - } // construct all of the faces - - - for (let i = 0; i < cols; i++) { - for (let j = 0; j < 2 * (cols - i) - 1; j++) { - const k = Math.floor(j / 2); - - if (j % 2 === 0) { - pushVertex(v[i][k + 1]); - pushVertex(v[i + 1][k]); - pushVertex(v[i][k]); - } else { - pushVertex(v[i][k + 1]); - pushVertex(v[i + 1][k + 1]); - pushVertex(v[i + 1][k]); - } - } - } - } - - function applyRadius(radius) { - const vertex = new Vector3(); // iterate over the entire buffer and apply the radius to each vertex - - for (let i = 0; i < vertexBuffer.length; i += 3) { - vertex.x = vertexBuffer[i + 0]; - vertex.y = vertexBuffer[i + 1]; - vertex.z = vertexBuffer[i + 2]; - vertex.normalize().multiplyScalar(radius); - vertexBuffer[i + 0] = vertex.x; - vertexBuffer[i + 1] = vertex.y; - vertexBuffer[i + 2] = vertex.z; - } - } - - function generateUVs() { - const vertex = new Vector3(); - - for (let i = 0; i < vertexBuffer.length; i += 3) { - vertex.x = vertexBuffer[i + 0]; - vertex.y = vertexBuffer[i + 1]; - vertex.z = vertexBuffer[i + 2]; - const u = azimuth(vertex) / 2 / Math.PI + 0.5; - const v = inclination(vertex) / Math.PI + 0.5; - uvBuffer.push(u, 1 - v); - } - - correctUVs(); - correctSeam(); - } - - function correctSeam() { - // handle case when face straddles the seam, see #3269 - for (let i = 0; i < uvBuffer.length; i += 6) { - // uv data of a single face - const x0 = uvBuffer[i + 0]; - const x1 = uvBuffer[i + 2]; - const x2 = uvBuffer[i + 4]; - const max = Math.max(x0, x1, x2); - const min = Math.min(x0, x1, x2); // 0.9 is somewhat arbitrary - - if (max > 0.9 && min < 0.1) { - if (x0 < 0.2) uvBuffer[i + 0] += 1; - if (x1 < 0.2) uvBuffer[i + 2] += 1; - if (x2 < 0.2) uvBuffer[i + 4] += 1; - } - } - } - - function pushVertex(vertex) { - vertexBuffer.push(vertex.x, vertex.y, vertex.z); - } - - function getVertexByIndex(index, vertex) { - const stride = index * 3; - vertex.x = vertices[stride + 0]; - vertex.y = vertices[stride + 1]; - vertex.z = vertices[stride + 2]; - } - - function correctUVs() { - const a = new Vector3(); - const b = new Vector3(); - const c = new Vector3(); - const centroid = new Vector3(); - const uvA = new Vector2(); - const uvB = new Vector2(); - const uvC = new Vector2(); - - for (let i = 0, j = 0; i < vertexBuffer.length; i += 9, j += 6) { - a.set(vertexBuffer[i + 0], vertexBuffer[i + 1], vertexBuffer[i + 2]); - b.set(vertexBuffer[i + 3], vertexBuffer[i + 4], vertexBuffer[i + 5]); - c.set(vertexBuffer[i + 6], vertexBuffer[i + 7], vertexBuffer[i + 8]); - uvA.set(uvBuffer[j + 0], uvBuffer[j + 1]); - uvB.set(uvBuffer[j + 2], uvBuffer[j + 3]); - uvC.set(uvBuffer[j + 4], uvBuffer[j + 5]); - centroid.copy(a).add(b).add(c).divideScalar(3); - const azi = azimuth(centroid); - correctUV(uvA, j + 0, a, azi); - correctUV(uvB, j + 2, b, azi); - correctUV(uvC, j + 4, c, azi); - } - } - - function correctUV(uv, stride, vector, azimuth) { - if (azimuth < 0 && uv.x === 1) { - uvBuffer[stride] = uv.x - 1; - } - - if (vector.x === 0 && vector.z === 0) { - uvBuffer[stride] = azimuth / 2 / Math.PI + 0.5; - } - } // Angle around the Y axis, counter-clockwise when looking from above. - - - function azimuth(vector) { - return Math.atan2(vector.z, -vector.x); - } // Angle above the XZ plane. - - - function inclination(vector) { - return Math.atan2(-vector.y, Math.sqrt(vector.x * vector.x + vector.z * vector.z)); - } - } - - static fromJSON(data) { - return new PolyhedronGeometry(data.vertices, data.indices, data.radius, data.details); - } - - } - - class DodecahedronGeometry extends PolyhedronGeometry { - constructor(radius = 1, detail = 0) { - const t = (1 + Math.sqrt(5)) / 2; - const r = 1 / t; - const vertices = [// (±1, ±1, ±1) - -1, -1, -1, -1, -1, 1, -1, 1, -1, -1, 1, 1, 1, -1, -1, 1, -1, 1, 1, 1, -1, 1, 1, 1, // (0, ±1/φ, ±φ) - 0, -r, -t, 0, -r, t, 0, r, -t, 0, r, t, // (±1/φ, ±φ, 0) - -r, -t, 0, -r, t, 0, r, -t, 0, r, t, 0, // (±φ, 0, ±1/φ) - -t, 0, -r, t, 0, -r, -t, 0, r, t, 0, r]; - const indices = [3, 11, 7, 3, 7, 15, 3, 15, 13, 7, 19, 17, 7, 17, 6, 7, 6, 15, 17, 4, 8, 17, 8, 10, 17, 10, 6, 8, 0, 16, 8, 16, 2, 8, 2, 10, 0, 12, 1, 0, 1, 18, 0, 18, 16, 6, 10, 2, 6, 2, 13, 6, 13, 15, 2, 16, 18, 2, 18, 3, 2, 3, 13, 18, 1, 9, 18, 9, 11, 18, 11, 3, 4, 14, 12, 4, 12, 0, 4, 0, 8, 11, 9, 5, 11, 5, 19, 11, 19, 7, 19, 5, 14, 19, 14, 4, 19, 4, 17, 1, 12, 14, 1, 14, 5, 1, 5, 9]; - super(vertices, indices, radius, detail); - this.type = 'DodecahedronGeometry'; - this.parameters = { - radius: radius, - detail: detail - }; - } - - static fromJSON(data) { - return new DodecahedronGeometry(data.radius, data.detail); - } - - } - - const _v0 = new Vector3(); - - const _v1$1 = new Vector3(); - - const _normal = new Vector3(); - - const _triangle = new Triangle(); - - class EdgesGeometry extends BufferGeometry { - constructor(geometry = null, thresholdAngle = 1) { - super(); - this.type = 'EdgesGeometry'; - this.parameters = { - geometry: geometry, - thresholdAngle: thresholdAngle - }; - - if (geometry !== null) { - const precisionPoints = 4; - const precision = Math.pow(10, precisionPoints); - const thresholdDot = Math.cos(DEG2RAD * thresholdAngle); - const indexAttr = geometry.getIndex(); - const positionAttr = geometry.getAttribute('position'); - const indexCount = indexAttr ? indexAttr.count : positionAttr.count; - const indexArr = [0, 0, 0]; - const vertKeys = ['a', 'b', 'c']; - const hashes = new Array(3); - const edgeData = {}; - const vertices = []; - - for (let i = 0; i < indexCount; i += 3) { - if (indexAttr) { - indexArr[0] = indexAttr.getX(i); - indexArr[1] = indexAttr.getX(i + 1); - indexArr[2] = indexAttr.getX(i + 2); - } else { - indexArr[0] = i; - indexArr[1] = i + 1; - indexArr[2] = i + 2; - } - - const { - a, - b, - c - } = _triangle; - a.fromBufferAttribute(positionAttr, indexArr[0]); - b.fromBufferAttribute(positionAttr, indexArr[1]); - c.fromBufferAttribute(positionAttr, indexArr[2]); - - _triangle.getNormal(_normal); // create hashes for the edge from the vertices - - - hashes[0] = `${Math.round(a.x * precision)},${Math.round(a.y * precision)},${Math.round(a.z * precision)}`; - hashes[1] = `${Math.round(b.x * precision)},${Math.round(b.y * precision)},${Math.round(b.z * precision)}`; - hashes[2] = `${Math.round(c.x * precision)},${Math.round(c.y * precision)},${Math.round(c.z * precision)}`; // skip degenerate triangles - - if (hashes[0] === hashes[1] || hashes[1] === hashes[2] || hashes[2] === hashes[0]) { - continue; - } // iterate over every edge - - - for (let j = 0; j < 3; j++) { - // get the first and next vertex making up the edge - const jNext = (j + 1) % 3; - const vecHash0 = hashes[j]; - const vecHash1 = hashes[jNext]; - const v0 = _triangle[vertKeys[j]]; - const v1 = _triangle[vertKeys[jNext]]; - const hash = `${vecHash0}_${vecHash1}`; - const reverseHash = `${vecHash1}_${vecHash0}`; - - if (reverseHash in edgeData && edgeData[reverseHash]) { - // if we found a sibling edge add it into the vertex array if - // it meets the angle threshold and delete the edge from the map. - if (_normal.dot(edgeData[reverseHash].normal) <= thresholdDot) { - vertices.push(v0.x, v0.y, v0.z); - vertices.push(v1.x, v1.y, v1.z); - } - - edgeData[reverseHash] = null; - } else if (!(hash in edgeData)) { - // if we've already got an edge here then skip adding a new one - edgeData[hash] = { - index0: indexArr[j], - index1: indexArr[jNext], - normal: _normal.clone() - }; - } - } - } // iterate over all remaining, unmatched edges and add them to the vertex array - - - for (const key in edgeData) { - if (edgeData[key]) { - const { - index0, - index1 - } = edgeData[key]; - - _v0.fromBufferAttribute(positionAttr, index0); - - _v1$1.fromBufferAttribute(positionAttr, index1); - - vertices.push(_v0.x, _v0.y, _v0.z); - vertices.push(_v1$1.x, _v1$1.y, _v1$1.z); - } - } - - this.setAttribute('position', new Float32BufferAttribute(vertices, 3)); - } - } - - } - - class Shape extends Path { - constructor(points) { - super(points); - this.uuid = generateUUID(); - this.type = 'Shape'; - this.holes = []; - } - - getPointsHoles(divisions) { - const holesPts = []; - - for (let i = 0, l = this.holes.length; i < l; i++) { - holesPts[i] = this.holes[i].getPoints(divisions); - } - - return holesPts; - } // get points of shape and holes (keypoints based on segments parameter) - - - extractPoints(divisions) { - return { - shape: this.getPoints(divisions), - holes: this.getPointsHoles(divisions) - }; - } - - copy(source) { - super.copy(source); - this.holes = []; - - for (let i = 0, l = source.holes.length; i < l; i++) { - const hole = source.holes[i]; - this.holes.push(hole.clone()); - } - - return this; - } - - toJSON() { - const data = super.toJSON(); - data.uuid = this.uuid; - data.holes = []; - - for (let i = 0, l = this.holes.length; i < l; i++) { - const hole = this.holes[i]; - data.holes.push(hole.toJSON()); - } - - return data; - } - - fromJSON(json) { - super.fromJSON(json); - this.uuid = json.uuid; - this.holes = []; - - for (let i = 0, l = json.holes.length; i < l; i++) { - const hole = json.holes[i]; - this.holes.push(new Path().fromJSON(hole)); - } - - return this; - } - - } - - /** - * Port from https://github.com/mapbox/earcut (v2.2.2) - */ - const Earcut = { - triangulate: function (data, holeIndices, dim = 2) { - const hasHoles = holeIndices && holeIndices.length; - const outerLen = hasHoles ? holeIndices[0] * dim : data.length; - let outerNode = linkedList(data, 0, outerLen, dim, true); - const triangles = []; - if (!outerNode || outerNode.next === outerNode.prev) return triangles; - let minX, minY, maxX, maxY, x, y, invSize; - if (hasHoles) outerNode = eliminateHoles(data, holeIndices, outerNode, dim); // if the shape is not too simple, we'll use z-order curve hash later; calculate polygon bbox - - if (data.length > 80 * dim) { - minX = maxX = data[0]; - minY = maxY = data[1]; - - for (let i = dim; i < outerLen; i += dim) { - x = data[i]; - y = data[i + 1]; - if (x < minX) minX = x; - if (y < minY) minY = y; - if (x > maxX) maxX = x; - if (y > maxY) maxY = y; - } // minX, minY and invSize are later used to transform coords into integers for z-order calculation - - - invSize = Math.max(maxX - minX, maxY - minY); - invSize = invSize !== 0 ? 1 / invSize : 0; - } - - earcutLinked(outerNode, triangles, dim, minX, minY, invSize); - return triangles; - } - }; // create a circular doubly linked list from polygon points in the specified winding order - - function linkedList(data, start, end, dim, clockwise) { - let i, last; - - if (clockwise === signedArea(data, start, end, dim) > 0) { - for (i = start; i < end; i += dim) last = insertNode(i, data[i], data[i + 1], last); - } else { - for (i = end - dim; i >= start; i -= dim) last = insertNode(i, data[i], data[i + 1], last); - } - - if (last && equals(last, last.next)) { - removeNode(last); - last = last.next; - } - - return last; - } // eliminate colinear or duplicate points - - - function filterPoints(start, end) { - if (!start) return start; - if (!end) end = start; - let p = start, - again; - - do { - again = false; - - if (!p.steiner && (equals(p, p.next) || area(p.prev, p, p.next) === 0)) { - removeNode(p); - p = end = p.prev; - if (p === p.next) break; - again = true; - } else { - p = p.next; - } - } while (again || p !== end); - - return end; - } // main ear slicing loop which triangulates a polygon (given as a linked list) - - - function earcutLinked(ear, triangles, dim, minX, minY, invSize, pass) { - if (!ear) return; // interlink polygon nodes in z-order - - if (!pass && invSize) indexCurve(ear, minX, minY, invSize); - let stop = ear, - prev, - next; // iterate through ears, slicing them one by one - - while (ear.prev !== ear.next) { - prev = ear.prev; - next = ear.next; - - if (invSize ? isEarHashed(ear, minX, minY, invSize) : isEar(ear)) { - // cut off the triangle - triangles.push(prev.i / dim); - triangles.push(ear.i / dim); - triangles.push(next.i / dim); - removeNode(ear); // skipping the next vertex leads to less sliver triangles - - ear = next.next; - stop = next.next; - continue; - } - - ear = next; // if we looped through the whole remaining polygon and can't find any more ears - - if (ear === stop) { - // try filtering points and slicing again - if (!pass) { - earcutLinked(filterPoints(ear), triangles, dim, minX, minY, invSize, 1); // if this didn't work, try curing all small self-intersections locally - } else if (pass === 1) { - ear = cureLocalIntersections(filterPoints(ear), triangles, dim); - earcutLinked(ear, triangles, dim, minX, minY, invSize, 2); // as a last resort, try splitting the remaining polygon into two - } else if (pass === 2) { - splitEarcut(ear, triangles, dim, minX, minY, invSize); - } - - break; - } - } - } // check whether a polygon node forms a valid ear with adjacent nodes - - - function isEar(ear) { - const a = ear.prev, - b = ear, - c = ear.next; - if (area(a, b, c) >= 0) return false; // reflex, can't be an ear - // now make sure we don't have other points inside the potential ear - - let p = ear.next.next; - - while (p !== ear.prev) { - if (pointInTriangle(a.x, a.y, b.x, b.y, c.x, c.y, p.x, p.y) && area(p.prev, p, p.next) >= 0) return false; - p = p.next; - } - - return true; - } - - function isEarHashed(ear, minX, minY, invSize) { - const a = ear.prev, - b = ear, - c = ear.next; - if (area(a, b, c) >= 0) return false; // reflex, can't be an ear - // triangle bbox; min & max are calculated like this for speed - - const minTX = a.x < b.x ? a.x < c.x ? a.x : c.x : b.x < c.x ? b.x : c.x, - minTY = a.y < b.y ? a.y < c.y ? a.y : c.y : b.y < c.y ? b.y : c.y, - maxTX = a.x > b.x ? a.x > c.x ? a.x : c.x : b.x > c.x ? b.x : c.x, - maxTY = a.y > b.y ? a.y > c.y ? a.y : c.y : b.y > c.y ? b.y : c.y; // z-order range for the current triangle bbox; - - const minZ = zOrder(minTX, minTY, minX, minY, invSize), - maxZ = zOrder(maxTX, maxTY, minX, minY, invSize); - let p = ear.prevZ, - n = ear.nextZ; // look for points inside the triangle in both directions - - while (p && p.z >= minZ && n && n.z <= maxZ) { - if (p !== ear.prev && p !== ear.next && pointInTriangle(a.x, a.y, b.x, b.y, c.x, c.y, p.x, p.y) && area(p.prev, p, p.next) >= 0) return false; - p = p.prevZ; - if (n !== ear.prev && n !== ear.next && pointInTriangle(a.x, a.y, b.x, b.y, c.x, c.y, n.x, n.y) && area(n.prev, n, n.next) >= 0) return false; - n = n.nextZ; - } // look for remaining points in decreasing z-order - - - while (p && p.z >= minZ) { - if (p !== ear.prev && p !== ear.next && pointInTriangle(a.x, a.y, b.x, b.y, c.x, c.y, p.x, p.y) && area(p.prev, p, p.next) >= 0) return false; - p = p.prevZ; - } // look for remaining points in increasing z-order - - - while (n && n.z <= maxZ) { - if (n !== ear.prev && n !== ear.next && pointInTriangle(a.x, a.y, b.x, b.y, c.x, c.y, n.x, n.y) && area(n.prev, n, n.next) >= 0) return false; - n = n.nextZ; - } - - return true; - } // go through all polygon nodes and cure small local self-intersections - - - function cureLocalIntersections(start, triangles, dim) { - let p = start; - - do { - const a = p.prev, - b = p.next.next; - - if (!equals(a, b) && intersects(a, p, p.next, b) && locallyInside(a, b) && locallyInside(b, a)) { - triangles.push(a.i / dim); - triangles.push(p.i / dim); - triangles.push(b.i / dim); // remove two nodes involved - - removeNode(p); - removeNode(p.next); - p = start = b; - } - - p = p.next; - } while (p !== start); - - return filterPoints(p); - } // try splitting polygon into two and triangulate them independently - - - function splitEarcut(start, triangles, dim, minX, minY, invSize) { - // look for a valid diagonal that divides the polygon into two - let a = start; - - do { - let b = a.next.next; - - while (b !== a.prev) { - if (a.i !== b.i && isValidDiagonal(a, b)) { - // split the polygon in two by the diagonal - let c = splitPolygon(a, b); // filter colinear points around the cuts - - a = filterPoints(a, a.next); - c = filterPoints(c, c.next); // run earcut on each half - - earcutLinked(a, triangles, dim, minX, minY, invSize); - earcutLinked(c, triangles, dim, minX, minY, invSize); - return; - } - - b = b.next; - } - - a = a.next; - } while (a !== start); - } // link every hole into the outer loop, producing a single-ring polygon without holes - - - function eliminateHoles(data, holeIndices, outerNode, dim) { - const queue = []; - let i, len, start, end, list; - - for (i = 0, len = holeIndices.length; i < len; i++) { - start = holeIndices[i] * dim; - end = i < len - 1 ? holeIndices[i + 1] * dim : data.length; - list = linkedList(data, start, end, dim, false); - if (list === list.next) list.steiner = true; - queue.push(getLeftmost(list)); - } - - queue.sort(compareX); // process holes from left to right - - for (i = 0; i < queue.length; i++) { - eliminateHole(queue[i], outerNode); - outerNode = filterPoints(outerNode, outerNode.next); - } - - return outerNode; - } - - function compareX(a, b) { - return a.x - b.x; - } // find a bridge between vertices that connects hole with an outer ring and link it - - - function eliminateHole(hole, outerNode) { - outerNode = findHoleBridge(hole, outerNode); - - if (outerNode) { - const b = splitPolygon(outerNode, hole); // filter collinear points around the cuts - - filterPoints(outerNode, outerNode.next); - filterPoints(b, b.next); - } - } // David Eberly's algorithm for finding a bridge between hole and outer polygon - - - function findHoleBridge(hole, outerNode) { - let p = outerNode; - const hx = hole.x; - const hy = hole.y; - let qx = -Infinity, - m; // find a segment intersected by a ray from the hole's leftmost point to the left; - // segment's endpoint with lesser x will be potential connection point - - do { - if (hy <= p.y && hy >= p.next.y && p.next.y !== p.y) { - const x = p.x + (hy - p.y) * (p.next.x - p.x) / (p.next.y - p.y); - - if (x <= hx && x > qx) { - qx = x; - - if (x === hx) { - if (hy === p.y) return p; - if (hy === p.next.y) return p.next; - } - - m = p.x < p.next.x ? p : p.next; - } - } - - p = p.next; - } while (p !== outerNode); - - if (!m) return null; - if (hx === qx) return m; // hole touches outer segment; pick leftmost endpoint - // look for points inside the triangle of hole point, segment intersection and endpoint; - // if there are no points found, we have a valid connection; - // otherwise choose the point of the minimum angle with the ray as connection point - - const stop = m, - mx = m.x, - my = m.y; - let tanMin = Infinity, - tan; - p = m; - - do { - if (hx >= p.x && p.x >= mx && hx !== p.x && pointInTriangle(hy < my ? hx : qx, hy, mx, my, hy < my ? qx : hx, hy, p.x, p.y)) { - tan = Math.abs(hy - p.y) / (hx - p.x); // tangential - - if (locallyInside(p, hole) && (tan < tanMin || tan === tanMin && (p.x > m.x || p.x === m.x && sectorContainsSector(m, p)))) { - m = p; - tanMin = tan; - } - } - - p = p.next; - } while (p !== stop); - - return m; - } // whether sector in vertex m contains sector in vertex p in the same coordinates - - - function sectorContainsSector(m, p) { - return area(m.prev, m, p.prev) < 0 && area(p.next, m, m.next) < 0; - } // interlink polygon nodes in z-order - - - function indexCurve(start, minX, minY, invSize) { - let p = start; - - do { - if (p.z === null) p.z = zOrder(p.x, p.y, minX, minY, invSize); - p.prevZ = p.prev; - p.nextZ = p.next; - p = p.next; - } while (p !== start); - - p.prevZ.nextZ = null; - p.prevZ = null; - sortLinked(p); - } // Simon Tatham's linked list merge sort algorithm - // http://www.chiark.greenend.org.uk/~sgtatham/algorithms/listsort.html - - - function sortLinked(list) { - let i, - p, - q, - e, - tail, - numMerges, - pSize, - qSize, - inSize = 1; - - do { - p = list; - list = null; - tail = null; - numMerges = 0; - - while (p) { - numMerges++; - q = p; - pSize = 0; - - for (i = 0; i < inSize; i++) { - pSize++; - q = q.nextZ; - if (!q) break; - } - - qSize = inSize; - - while (pSize > 0 || qSize > 0 && q) { - if (pSize !== 0 && (qSize === 0 || !q || p.z <= q.z)) { - e = p; - p = p.nextZ; - pSize--; - } else { - e = q; - q = q.nextZ; - qSize--; - } - - if (tail) tail.nextZ = e;else list = e; - e.prevZ = tail; - tail = e; - } - - p = q; - } - - tail.nextZ = null; - inSize *= 2; - } while (numMerges > 1); - - return list; - } // z-order of a point given coords and inverse of the longer side of data bbox - - - function zOrder(x, y, minX, minY, invSize) { - // coords are transformed into non-negative 15-bit integer range - x = 32767 * (x - minX) * invSize; - y = 32767 * (y - minY) * invSize; - x = (x | x << 8) & 0x00FF00FF; - x = (x | x << 4) & 0x0F0F0F0F; - x = (x | x << 2) & 0x33333333; - x = (x | x << 1) & 0x55555555; - y = (y | y << 8) & 0x00FF00FF; - y = (y | y << 4) & 0x0F0F0F0F; - y = (y | y << 2) & 0x33333333; - y = (y | y << 1) & 0x55555555; - return x | y << 1; - } // find the leftmost node of a polygon ring - - - function getLeftmost(start) { - let p = start, - leftmost = start; - - do { - if (p.x < leftmost.x || p.x === leftmost.x && p.y < leftmost.y) leftmost = p; - p = p.next; - } while (p !== start); - - return leftmost; - } // check if a point lies within a convex triangle - - - function pointInTriangle(ax, ay, bx, by, cx, cy, px, py) { - return (cx - px) * (ay - py) - (ax - px) * (cy - py) >= 0 && (ax - px) * (by - py) - (bx - px) * (ay - py) >= 0 && (bx - px) * (cy - py) - (cx - px) * (by - py) >= 0; - } // check if a diagonal between two polygon nodes is valid (lies in polygon interior) - - - function isValidDiagonal(a, b) { - return a.next.i !== b.i && a.prev.i !== b.i && !intersectsPolygon(a, b) && ( // doesn't intersect other edges - locallyInside(a, b) && locallyInside(b, a) && middleInside(a, b) && ( // locally visible - area(a.prev, a, b.prev) || area(a, b.prev, b)) || // does not create opposite-facing sectors - equals(a, b) && area(a.prev, a, a.next) > 0 && area(b.prev, b, b.next) > 0); // special zero-length case - } // signed area of a triangle - - - function area(p, q, r) { - return (q.y - p.y) * (r.x - q.x) - (q.x - p.x) * (r.y - q.y); - } // check if two points are equal - - - function equals(p1, p2) { - return p1.x === p2.x && p1.y === p2.y; - } // check if two segments intersect - - - function intersects(p1, q1, p2, q2) { - const o1 = sign(area(p1, q1, p2)); - const o2 = sign(area(p1, q1, q2)); - const o3 = sign(area(p2, q2, p1)); - const o4 = sign(area(p2, q2, q1)); - if (o1 !== o2 && o3 !== o4) return true; // general case - - if (o1 === 0 && onSegment(p1, p2, q1)) return true; // p1, q1 and p2 are collinear and p2 lies on p1q1 - - if (o2 === 0 && onSegment(p1, q2, q1)) return true; // p1, q1 and q2 are collinear and q2 lies on p1q1 - - if (o3 === 0 && onSegment(p2, p1, q2)) return true; // p2, q2 and p1 are collinear and p1 lies on p2q2 - - if (o4 === 0 && onSegment(p2, q1, q2)) return true; // p2, q2 and q1 are collinear and q1 lies on p2q2 - - return false; - } // for collinear points p, q, r, check if point q lies on segment pr - - - function onSegment(p, q, r) { - return q.x <= Math.max(p.x, r.x) && q.x >= Math.min(p.x, r.x) && q.y <= Math.max(p.y, r.y) && q.y >= Math.min(p.y, r.y); - } - - function sign(num) { - return num > 0 ? 1 : num < 0 ? -1 : 0; - } // check if a polygon diagonal intersects any polygon segments - - - function intersectsPolygon(a, b) { - let p = a; - - do { - if (p.i !== a.i && p.next.i !== a.i && p.i !== b.i && p.next.i !== b.i && intersects(p, p.next, a, b)) return true; - p = p.next; - } while (p !== a); - - return false; - } // check if a polygon diagonal is locally inside the polygon - - - function locallyInside(a, b) { - return area(a.prev, a, a.next) < 0 ? area(a, b, a.next) >= 0 && area(a, a.prev, b) >= 0 : area(a, b, a.prev) < 0 || area(a, a.next, b) < 0; - } // check if the middle point of a polygon diagonal is inside the polygon - - - function middleInside(a, b) { - let p = a, - inside = false; - const px = (a.x + b.x) / 2, - py = (a.y + b.y) / 2; - - do { - if (p.y > py !== p.next.y > py && p.next.y !== p.y && px < (p.next.x - p.x) * (py - p.y) / (p.next.y - p.y) + p.x) inside = !inside; - p = p.next; - } while (p !== a); - - return inside; - } // link two polygon vertices with a bridge; if the vertices belong to the same ring, it splits polygon into two; - // if one belongs to the outer ring and another to a hole, it merges it into a single ring - - - function splitPolygon(a, b) { - const a2 = new Node(a.i, a.x, a.y), - b2 = new Node(b.i, b.x, b.y), - an = a.next, - bp = b.prev; - a.next = b; - b.prev = a; - a2.next = an; - an.prev = a2; - b2.next = a2; - a2.prev = b2; - bp.next = b2; - b2.prev = bp; - return b2; - } // create a node and optionally link it with previous one (in a circular doubly linked list) - - - function insertNode(i, x, y, last) { - const p = new Node(i, x, y); - - if (!last) { - p.prev = p; - p.next = p; - } else { - p.next = last.next; - p.prev = last; - last.next.prev = p; - last.next = p; - } - - return p; - } - - function removeNode(p) { - p.next.prev = p.prev; - p.prev.next = p.next; - if (p.prevZ) p.prevZ.nextZ = p.nextZ; - if (p.nextZ) p.nextZ.prevZ = p.prevZ; - } - - function Node(i, x, y) { - // vertex index in coordinates array - this.i = i; // vertex coordinates - - this.x = x; - this.y = y; // previous and next vertex nodes in a polygon ring - - this.prev = null; - this.next = null; // z-order curve value - - this.z = null; // previous and next nodes in z-order - - this.prevZ = null; - this.nextZ = null; // indicates whether this is a steiner point - - this.steiner = false; - } - - function signedArea(data, start, end, dim) { - let sum = 0; - - for (let i = start, j = end - dim; i < end; i += dim) { - sum += (data[j] - data[i]) * (data[i + 1] + data[j + 1]); - j = i; - } - - return sum; - } - - class ShapeUtils { - // calculate area of the contour polygon - static area(contour) { - const n = contour.length; - let a = 0.0; - - for (let p = n - 1, q = 0; q < n; p = q++) { - a += contour[p].x * contour[q].y - contour[q].x * contour[p].y; - } - - return a * 0.5; - } - - static isClockWise(pts) { - return ShapeUtils.area(pts) < 0; - } - - static triangulateShape(contour, holes) { - const vertices = []; // flat array of vertices like [ x0,y0, x1,y1, x2,y2, ... ] - - const holeIndices = []; // array of hole indices - - const faces = []; // final array of vertex indices like [ [ a,b,d ], [ b,c,d ] ] - - removeDupEndPts(contour); - addContour(vertices, contour); // - - let holeIndex = contour.length; - holes.forEach(removeDupEndPts); - - for (let i = 0; i < holes.length; i++) { - holeIndices.push(holeIndex); - holeIndex += holes[i].length; - addContour(vertices, holes[i]); - } // - - - const triangles = Earcut.triangulate(vertices, holeIndices); // - - for (let i = 0; i < triangles.length; i += 3) { - faces.push(triangles.slice(i, i + 3)); - } - - return faces; - } - - } - - function removeDupEndPts(points) { - const l = points.length; - - if (l > 2 && points[l - 1].equals(points[0])) { - points.pop(); - } - } - - function addContour(vertices, contour) { - for (let i = 0; i < contour.length; i++) { - vertices.push(contour[i].x); - vertices.push(contour[i].y); - } - } - - /** - * Creates extruded geometry from a path shape. - * - * parameters = { - * - * curveSegments: , // number of points on the curves - * steps: , // number of points for z-side extrusions / used for subdividing segments of extrude spline too - * depth: , // Depth to extrude the shape - * - * bevelEnabled: , // turn on bevel - * bevelThickness: , // how deep into the original shape bevel goes - * bevelSize: , // how far from shape outline (including bevelOffset) is bevel - * bevelOffset: , // how far from shape outline does bevel start - * bevelSegments: , // number of bevel layers - * - * extrudePath: // curve to extrude shape along - * - * UVGenerator: // object that provides UV generator functions - * - * } - */ - - class ExtrudeGeometry extends BufferGeometry { - constructor(shapes = new Shape([new Vector2(0.5, 0.5), new Vector2(-0.5, 0.5), new Vector2(-0.5, -0.5), new Vector2(0.5, -0.5)]), options = {}) { - super(); - this.type = 'ExtrudeGeometry'; - this.parameters = { - shapes: shapes, - options: options - }; - shapes = Array.isArray(shapes) ? shapes : [shapes]; - const scope = this; - const verticesArray = []; - const uvArray = []; - - for (let i = 0, l = shapes.length; i < l; i++) { - const shape = shapes[i]; - addShape(shape); - } // build geometry - - - this.setAttribute('position', new Float32BufferAttribute(verticesArray, 3)); - this.setAttribute('uv', new Float32BufferAttribute(uvArray, 2)); - this.computeVertexNormals(); // functions - - function addShape(shape) { - const placeholder = []; // options - - const curveSegments = options.curveSegments !== undefined ? options.curveSegments : 12; - const steps = options.steps !== undefined ? options.steps : 1; - let depth = options.depth !== undefined ? options.depth : 1; - let bevelEnabled = options.bevelEnabled !== undefined ? options.bevelEnabled : true; - let bevelThickness = options.bevelThickness !== undefined ? options.bevelThickness : 0.2; - let bevelSize = options.bevelSize !== undefined ? options.bevelSize : bevelThickness - 0.1; - let bevelOffset = options.bevelOffset !== undefined ? options.bevelOffset : 0; - let bevelSegments = options.bevelSegments !== undefined ? options.bevelSegments : 3; - const extrudePath = options.extrudePath; - const uvgen = options.UVGenerator !== undefined ? options.UVGenerator : WorldUVGenerator; // deprecated options - - if (options.amount !== undefined) { - console.warn('THREE.ExtrudeBufferGeometry: amount has been renamed to depth.'); - depth = options.amount; - } // - - - let extrudePts, - extrudeByPath = false; - let splineTube, binormal, normal, position2; - - if (extrudePath) { - extrudePts = extrudePath.getSpacedPoints(steps); - extrudeByPath = true; - bevelEnabled = false; // bevels not supported for path extrusion - // SETUP TNB variables - // TODO1 - have a .isClosed in spline? - - splineTube = extrudePath.computeFrenetFrames(steps, false); // console.log(splineTube, 'splineTube', splineTube.normals.length, 'steps', steps, 'extrudePts', extrudePts.length); - - binormal = new Vector3(); - normal = new Vector3(); - position2 = new Vector3(); - } // Safeguards if bevels are not enabled - - - if (!bevelEnabled) { - bevelSegments = 0; - bevelThickness = 0; - bevelSize = 0; - bevelOffset = 0; - } // Variables initialization - - - const shapePoints = shape.extractPoints(curveSegments); - let vertices = shapePoints.shape; - const holes = shapePoints.holes; - const reverse = !ShapeUtils.isClockWise(vertices); - - if (reverse) { - vertices = vertices.reverse(); // Maybe we should also check if holes are in the opposite direction, just to be safe ... - - for (let h = 0, hl = holes.length; h < hl; h++) { - const ahole = holes[h]; - - if (ShapeUtils.isClockWise(ahole)) { - holes[h] = ahole.reverse(); - } - } - } - - const faces = ShapeUtils.triangulateShape(vertices, holes); - /* Vertices */ - - const contour = vertices; // vertices has all points but contour has only points of circumference - - for (let h = 0, hl = holes.length; h < hl; h++) { - const ahole = holes[h]; - vertices = vertices.concat(ahole); - } - - function scalePt2(pt, vec, size) { - if (!vec) console.error('THREE.ExtrudeGeometry: vec does not exist'); - return vec.clone().multiplyScalar(size).add(pt); - } - - const vlen = vertices.length, - flen = faces.length; // Find directions for point movement - - function getBevelVec(inPt, inPrev, inNext) { - // computes for inPt the corresponding point inPt' on a new contour - // shifted by 1 unit (length of normalized vector) to the left - // if we walk along contour clockwise, this new contour is outside the old one - // - // inPt' is the intersection of the two lines parallel to the two - // adjacent edges of inPt at a distance of 1 unit on the left side. - let v_trans_x, v_trans_y, shrink_by; // resulting translation vector for inPt - // good reading for geometry algorithms (here: line-line intersection) - // http://geomalgorithms.com/a05-_intersect-1.html - - const v_prev_x = inPt.x - inPrev.x, - v_prev_y = inPt.y - inPrev.y; - const v_next_x = inNext.x - inPt.x, - v_next_y = inNext.y - inPt.y; - const v_prev_lensq = v_prev_x * v_prev_x + v_prev_y * v_prev_y; // check for collinear edges - - const collinear0 = v_prev_x * v_next_y - v_prev_y * v_next_x; - - if (Math.abs(collinear0) > Number.EPSILON) { - // not collinear - // length of vectors for normalizing - const v_prev_len = Math.sqrt(v_prev_lensq); - const v_next_len = Math.sqrt(v_next_x * v_next_x + v_next_y * v_next_y); // shift adjacent points by unit vectors to the left - - const ptPrevShift_x = inPrev.x - v_prev_y / v_prev_len; - const ptPrevShift_y = inPrev.y + v_prev_x / v_prev_len; - const ptNextShift_x = inNext.x - v_next_y / v_next_len; - const ptNextShift_y = inNext.y + v_next_x / v_next_len; // scaling factor for v_prev to intersection point - - const sf = ((ptNextShift_x - ptPrevShift_x) * v_next_y - (ptNextShift_y - ptPrevShift_y) * v_next_x) / (v_prev_x * v_next_y - v_prev_y * v_next_x); // vector from inPt to intersection point - - v_trans_x = ptPrevShift_x + v_prev_x * sf - inPt.x; - v_trans_y = ptPrevShift_y + v_prev_y * sf - inPt.y; // Don't normalize!, otherwise sharp corners become ugly - // but prevent crazy spikes - - const v_trans_lensq = v_trans_x * v_trans_x + v_trans_y * v_trans_y; - - if (v_trans_lensq <= 2) { - return new Vector2(v_trans_x, v_trans_y); - } else { - shrink_by = Math.sqrt(v_trans_lensq / 2); - } - } else { - // handle special case of collinear edges - let direction_eq = false; // assumes: opposite - - if (v_prev_x > Number.EPSILON) { - if (v_next_x > Number.EPSILON) { - direction_eq = true; - } - } else { - if (v_prev_x < -Number.EPSILON) { - if (v_next_x < -Number.EPSILON) { - direction_eq = true; - } - } else { - if (Math.sign(v_prev_y) === Math.sign(v_next_y)) { - direction_eq = true; - } - } - } - - if (direction_eq) { - // console.log("Warning: lines are a straight sequence"); - v_trans_x = -v_prev_y; - v_trans_y = v_prev_x; - shrink_by = Math.sqrt(v_prev_lensq); - } else { - // console.log("Warning: lines are a straight spike"); - v_trans_x = v_prev_x; - v_trans_y = v_prev_y; - shrink_by = Math.sqrt(v_prev_lensq / 2); - } - } - - return new Vector2(v_trans_x / shrink_by, v_trans_y / shrink_by); - } - - const contourMovements = []; - - for (let i = 0, il = contour.length, j = il - 1, k = i + 1; i < il; i++, j++, k++) { - if (j === il) j = 0; - if (k === il) k = 0; // (j)---(i)---(k) - // console.log('i,j,k', i, j , k) - - contourMovements[i] = getBevelVec(contour[i], contour[j], contour[k]); - } - - const holesMovements = []; - let oneHoleMovements, - verticesMovements = contourMovements.concat(); - - for (let h = 0, hl = holes.length; h < hl; h++) { - const ahole = holes[h]; - oneHoleMovements = []; - - for (let i = 0, il = ahole.length, j = il - 1, k = i + 1; i < il; i++, j++, k++) { - if (j === il) j = 0; - if (k === il) k = 0; // (j)---(i)---(k) - - oneHoleMovements[i] = getBevelVec(ahole[i], ahole[j], ahole[k]); - } - - holesMovements.push(oneHoleMovements); - verticesMovements = verticesMovements.concat(oneHoleMovements); - } // Loop bevelSegments, 1 for the front, 1 for the back - - - for (let b = 0; b < bevelSegments; b++) { - //for ( b = bevelSegments; b > 0; b -- ) { - const t = b / bevelSegments; - const z = bevelThickness * Math.cos(t * Math.PI / 2); - const bs = bevelSize * Math.sin(t * Math.PI / 2) + bevelOffset; // contract shape - - for (let i = 0, il = contour.length; i < il; i++) { - const vert = scalePt2(contour[i], contourMovements[i], bs); - v(vert.x, vert.y, -z); - } // expand holes - - - for (let h = 0, hl = holes.length; h < hl; h++) { - const ahole = holes[h]; - oneHoleMovements = holesMovements[h]; - - for (let i = 0, il = ahole.length; i < il; i++) { - const vert = scalePt2(ahole[i], oneHoleMovements[i], bs); - v(vert.x, vert.y, -z); - } - } - } - - const bs = bevelSize + bevelOffset; // Back facing vertices - - for (let i = 0; i < vlen; i++) { - const vert = bevelEnabled ? scalePt2(vertices[i], verticesMovements[i], bs) : vertices[i]; - - if (!extrudeByPath) { - v(vert.x, vert.y, 0); - } else { - // v( vert.x, vert.y + extrudePts[ 0 ].y, extrudePts[ 0 ].x ); - normal.copy(splineTube.normals[0]).multiplyScalar(vert.x); - binormal.copy(splineTube.binormals[0]).multiplyScalar(vert.y); - position2.copy(extrudePts[0]).add(normal).add(binormal); - v(position2.x, position2.y, position2.z); - } - } // Add stepped vertices... - // Including front facing vertices - - - for (let s = 1; s <= steps; s++) { - for (let i = 0; i < vlen; i++) { - const vert = bevelEnabled ? scalePt2(vertices[i], verticesMovements[i], bs) : vertices[i]; - - if (!extrudeByPath) { - v(vert.x, vert.y, depth / steps * s); - } else { - // v( vert.x, vert.y + extrudePts[ s - 1 ].y, extrudePts[ s - 1 ].x ); - normal.copy(splineTube.normals[s]).multiplyScalar(vert.x); - binormal.copy(splineTube.binormals[s]).multiplyScalar(vert.y); - position2.copy(extrudePts[s]).add(normal).add(binormal); - v(position2.x, position2.y, position2.z); - } - } - } // Add bevel segments planes - //for ( b = 1; b <= bevelSegments; b ++ ) { - - - for (let b = bevelSegments - 1; b >= 0; b--) { - const t = b / bevelSegments; - const z = bevelThickness * Math.cos(t * Math.PI / 2); - const bs = bevelSize * Math.sin(t * Math.PI / 2) + bevelOffset; // contract shape - - for (let i = 0, il = contour.length; i < il; i++) { - const vert = scalePt2(contour[i], contourMovements[i], bs); - v(vert.x, vert.y, depth + z); - } // expand holes - - - for (let h = 0, hl = holes.length; h < hl; h++) { - const ahole = holes[h]; - oneHoleMovements = holesMovements[h]; - - for (let i = 0, il = ahole.length; i < il; i++) { - const vert = scalePt2(ahole[i], oneHoleMovements[i], bs); - - if (!extrudeByPath) { - v(vert.x, vert.y, depth + z); - } else { - v(vert.x, vert.y + extrudePts[steps - 1].y, extrudePts[steps - 1].x + z); - } - } - } - } - /* Faces */ - // Top and bottom faces - - - buildLidFaces(); // Sides faces - - buildSideFaces(); ///// Internal functions - - function buildLidFaces() { - const start = verticesArray.length / 3; - - if (bevelEnabled) { - let layer = 0; // steps + 1 - - let offset = vlen * layer; // Bottom faces - - for (let i = 0; i < flen; i++) { - const face = faces[i]; - f3(face[2] + offset, face[1] + offset, face[0] + offset); - } - - layer = steps + bevelSegments * 2; - offset = vlen * layer; // Top faces - - for (let i = 0; i < flen; i++) { - const face = faces[i]; - f3(face[0] + offset, face[1] + offset, face[2] + offset); - } - } else { - // Bottom faces - for (let i = 0; i < flen; i++) { - const face = faces[i]; - f3(face[2], face[1], face[0]); - } // Top faces - - - for (let i = 0; i < flen; i++) { - const face = faces[i]; - f3(face[0] + vlen * steps, face[1] + vlen * steps, face[2] + vlen * steps); - } - } - - scope.addGroup(start, verticesArray.length / 3 - start, 0); - } // Create faces for the z-sides of the shape - - - function buildSideFaces() { - const start = verticesArray.length / 3; - let layeroffset = 0; - sidewalls(contour, layeroffset); - layeroffset += contour.length; - - for (let h = 0, hl = holes.length; h < hl; h++) { - const ahole = holes[h]; - sidewalls(ahole, layeroffset); //, true - - layeroffset += ahole.length; - } - - scope.addGroup(start, verticesArray.length / 3 - start, 1); - } - - function sidewalls(contour, layeroffset) { - let i = contour.length; - - while (--i >= 0) { - const j = i; - let k = i - 1; - if (k < 0) k = contour.length - 1; //console.log('b', i,j, i-1, k,vertices.length); - - for (let s = 0, sl = steps + bevelSegments * 2; s < sl; s++) { - const slen1 = vlen * s; - const slen2 = vlen * (s + 1); - const a = layeroffset + j + slen1, - b = layeroffset + k + slen1, - c = layeroffset + k + slen2, - d = layeroffset + j + slen2; - f4(a, b, c, d); - } - } - } - - function v(x, y, z) { - placeholder.push(x); - placeholder.push(y); - placeholder.push(z); - } - - function f3(a, b, c) { - addVertex(a); - addVertex(b); - addVertex(c); - const nextIndex = verticesArray.length / 3; - const uvs = uvgen.generateTopUV(scope, verticesArray, nextIndex - 3, nextIndex - 2, nextIndex - 1); - addUV(uvs[0]); - addUV(uvs[1]); - addUV(uvs[2]); - } - - function f4(a, b, c, d) { - addVertex(a); - addVertex(b); - addVertex(d); - addVertex(b); - addVertex(c); - addVertex(d); - const nextIndex = verticesArray.length / 3; - const uvs = uvgen.generateSideWallUV(scope, verticesArray, nextIndex - 6, nextIndex - 3, nextIndex - 2, nextIndex - 1); - addUV(uvs[0]); - addUV(uvs[1]); - addUV(uvs[3]); - addUV(uvs[1]); - addUV(uvs[2]); - addUV(uvs[3]); - } - - function addVertex(index) { - verticesArray.push(placeholder[index * 3 + 0]); - verticesArray.push(placeholder[index * 3 + 1]); - verticesArray.push(placeholder[index * 3 + 2]); - } - - function addUV(vector2) { - uvArray.push(vector2.x); - uvArray.push(vector2.y); - } - } - } - - toJSON() { - const data = super.toJSON(); - const shapes = this.parameters.shapes; - const options = this.parameters.options; - return toJSON$1(shapes, options, data); - } - - static fromJSON(data, shapes) { - const geometryShapes = []; - - for (let j = 0, jl = data.shapes.length; j < jl; j++) { - const shape = shapes[data.shapes[j]]; - geometryShapes.push(shape); - } - - const extrudePath = data.options.extrudePath; - - if (extrudePath !== undefined) { - data.options.extrudePath = new Curves[extrudePath.type]().fromJSON(extrudePath); - } - - return new ExtrudeGeometry(geometryShapes, data.options); - } - - } - - const WorldUVGenerator = { - generateTopUV: function (geometry, vertices, indexA, indexB, indexC) { - const a_x = vertices[indexA * 3]; - const a_y = vertices[indexA * 3 + 1]; - const b_x = vertices[indexB * 3]; - const b_y = vertices[indexB * 3 + 1]; - const c_x = vertices[indexC * 3]; - const c_y = vertices[indexC * 3 + 1]; - return [new Vector2(a_x, a_y), new Vector2(b_x, b_y), new Vector2(c_x, c_y)]; - }, - generateSideWallUV: function (geometry, vertices, indexA, indexB, indexC, indexD) { - const a_x = vertices[indexA * 3]; - const a_y = vertices[indexA * 3 + 1]; - const a_z = vertices[indexA * 3 + 2]; - const b_x = vertices[indexB * 3]; - const b_y = vertices[indexB * 3 + 1]; - const b_z = vertices[indexB * 3 + 2]; - const c_x = vertices[indexC * 3]; - const c_y = vertices[indexC * 3 + 1]; - const c_z = vertices[indexC * 3 + 2]; - const d_x = vertices[indexD * 3]; - const d_y = vertices[indexD * 3 + 1]; - const d_z = vertices[indexD * 3 + 2]; - - if (Math.abs(a_y - b_y) < Math.abs(a_x - b_x)) { - return [new Vector2(a_x, 1 - a_z), new Vector2(b_x, 1 - b_z), new Vector2(c_x, 1 - c_z), new Vector2(d_x, 1 - d_z)]; - } else { - return [new Vector2(a_y, 1 - a_z), new Vector2(b_y, 1 - b_z), new Vector2(c_y, 1 - c_z), new Vector2(d_y, 1 - d_z)]; - } - } - }; - - function toJSON$1(shapes, options, data) { - data.shapes = []; - - if (Array.isArray(shapes)) { - for (let i = 0, l = shapes.length; i < l; i++) { - const shape = shapes[i]; - data.shapes.push(shape.uuid); - } - } else { - data.shapes.push(shapes.uuid); - } - - if (options.extrudePath !== undefined) data.options.extrudePath = options.extrudePath.toJSON(); - return data; - } - - class IcosahedronGeometry extends PolyhedronGeometry { - constructor(radius = 1, detail = 0) { - const t = (1 + Math.sqrt(5)) / 2; - const vertices = [-1, t, 0, 1, t, 0, -1, -t, 0, 1, -t, 0, 0, -1, t, 0, 1, t, 0, -1, -t, 0, 1, -t, t, 0, -1, t, 0, 1, -t, 0, -1, -t, 0, 1]; - const indices = [0, 11, 5, 0, 5, 1, 0, 1, 7, 0, 7, 10, 0, 10, 11, 1, 5, 9, 5, 11, 4, 11, 10, 2, 10, 7, 6, 7, 1, 8, 3, 9, 4, 3, 4, 2, 3, 2, 6, 3, 6, 8, 3, 8, 9, 4, 9, 5, 2, 4, 11, 6, 2, 10, 8, 6, 7, 9, 8, 1]; - super(vertices, indices, radius, detail); - this.type = 'IcosahedronGeometry'; - this.parameters = { - radius: radius, - detail: detail - }; - } - - static fromJSON(data) { - return new IcosahedronGeometry(data.radius, data.detail); - } - - } - - class OctahedronGeometry extends PolyhedronGeometry { - constructor(radius = 1, detail = 0) { - const vertices = [1, 0, 0, -1, 0, 0, 0, 1, 0, 0, -1, 0, 0, 0, 1, 0, 0, -1]; - const indices = [0, 2, 4, 0, 4, 3, 0, 3, 5, 0, 5, 2, 1, 2, 5, 1, 5, 3, 1, 3, 4, 1, 4, 2]; - super(vertices, indices, radius, detail); - this.type = 'OctahedronGeometry'; - this.parameters = { - radius: radius, - detail: detail - }; - } - - static fromJSON(data) { - return new OctahedronGeometry(data.radius, data.detail); - } - - } - - class RingGeometry extends BufferGeometry { - constructor(innerRadius = 0.5, outerRadius = 1, thetaSegments = 8, phiSegments = 1, thetaStart = 0, thetaLength = Math.PI * 2) { - super(); - this.type = 'RingGeometry'; - this.parameters = { - innerRadius: innerRadius, - outerRadius: outerRadius, - thetaSegments: thetaSegments, - phiSegments: phiSegments, - thetaStart: thetaStart, - thetaLength: thetaLength - }; - thetaSegments = Math.max(3, thetaSegments); - phiSegments = Math.max(1, phiSegments); // buffers - - const indices = []; - const vertices = []; - const normals = []; - const uvs = []; // some helper variables - - let radius = innerRadius; - const radiusStep = (outerRadius - innerRadius) / phiSegments; - const vertex = new Vector3(); - const uv = new Vector2(); // generate vertices, normals and uvs - - for (let j = 0; j <= phiSegments; j++) { - for (let i = 0; i <= thetaSegments; i++) { - // values are generate from the inside of the ring to the outside - const segment = thetaStart + i / thetaSegments * thetaLength; // vertex - - vertex.x = radius * Math.cos(segment); - vertex.y = radius * Math.sin(segment); - vertices.push(vertex.x, vertex.y, vertex.z); // normal - - normals.push(0, 0, 1); // uv - - uv.x = (vertex.x / outerRadius + 1) / 2; - uv.y = (vertex.y / outerRadius + 1) / 2; - uvs.push(uv.x, uv.y); - } // increase the radius for next row of vertices - - - radius += radiusStep; - } // indices - - - for (let j = 0; j < phiSegments; j++) { - const thetaSegmentLevel = j * (thetaSegments + 1); - - for (let i = 0; i < thetaSegments; i++) { - const segment = i + thetaSegmentLevel; - const a = segment; - const b = segment + thetaSegments + 1; - const c = segment + thetaSegments + 2; - const d = segment + 1; // faces - - indices.push(a, b, d); - indices.push(b, c, d); - } - } // build geometry - - - this.setIndex(indices); - this.setAttribute('position', new Float32BufferAttribute(vertices, 3)); - this.setAttribute('normal', new Float32BufferAttribute(normals, 3)); - this.setAttribute('uv', new Float32BufferAttribute(uvs, 2)); - } - - static fromJSON(data) { - return new RingGeometry(data.innerRadius, data.outerRadius, data.thetaSegments, data.phiSegments, data.thetaStart, data.thetaLength); - } - - } - - class ShapeGeometry extends BufferGeometry { - constructor(shapes = new Shape([new Vector2(0, 0.5), new Vector2(-0.5, -0.5), new Vector2(0.5, -0.5)]), curveSegments = 12) { - super(); - this.type = 'ShapeGeometry'; - this.parameters = { - shapes: shapes, - curveSegments: curveSegments - }; // buffers - - const indices = []; - const vertices = []; - const normals = []; - const uvs = []; // helper variables - - let groupStart = 0; - let groupCount = 0; // allow single and array values for "shapes" parameter - - if (Array.isArray(shapes) === false) { - addShape(shapes); - } else { - for (let i = 0; i < shapes.length; i++) { - addShape(shapes[i]); - this.addGroup(groupStart, groupCount, i); // enables MultiMaterial support - - groupStart += groupCount; - groupCount = 0; - } - } // build geometry - - - this.setIndex(indices); - this.setAttribute('position', new Float32BufferAttribute(vertices, 3)); - this.setAttribute('normal', new Float32BufferAttribute(normals, 3)); - this.setAttribute('uv', new Float32BufferAttribute(uvs, 2)); // helper functions - - function addShape(shape) { - const indexOffset = vertices.length / 3; - const points = shape.extractPoints(curveSegments); - let shapeVertices = points.shape; - const shapeHoles = points.holes; // check direction of vertices - - if (ShapeUtils.isClockWise(shapeVertices) === false) { - shapeVertices = shapeVertices.reverse(); - } - - for (let i = 0, l = shapeHoles.length; i < l; i++) { - const shapeHole = shapeHoles[i]; - - if (ShapeUtils.isClockWise(shapeHole) === true) { - shapeHoles[i] = shapeHole.reverse(); - } - } - - const faces = ShapeUtils.triangulateShape(shapeVertices, shapeHoles); // join vertices of inner and outer paths to a single array - - for (let i = 0, l = shapeHoles.length; i < l; i++) { - const shapeHole = shapeHoles[i]; - shapeVertices = shapeVertices.concat(shapeHole); - } // vertices, normals, uvs - - - for (let i = 0, l = shapeVertices.length; i < l; i++) { - const vertex = shapeVertices[i]; - vertices.push(vertex.x, vertex.y, 0); - normals.push(0, 0, 1); - uvs.push(vertex.x, vertex.y); // world uvs - } // incides - - - for (let i = 0, l = faces.length; i < l; i++) { - const face = faces[i]; - const a = face[0] + indexOffset; - const b = face[1] + indexOffset; - const c = face[2] + indexOffset; - indices.push(a, b, c); - groupCount += 3; - } - } - } - - toJSON() { - const data = super.toJSON(); - const shapes = this.parameters.shapes; - return toJSON(shapes, data); - } - - static fromJSON(data, shapes) { - const geometryShapes = []; - - for (let j = 0, jl = data.shapes.length; j < jl; j++) { - const shape = shapes[data.shapes[j]]; - geometryShapes.push(shape); - } - - return new ShapeGeometry(geometryShapes, data.curveSegments); - } - - } - - function toJSON(shapes, data) { - data.shapes = []; - - if (Array.isArray(shapes)) { - for (let i = 0, l = shapes.length; i < l; i++) { - const shape = shapes[i]; - data.shapes.push(shape.uuid); - } - } else { - data.shapes.push(shapes.uuid); - } - - return data; - } - - class SphereGeometry extends BufferGeometry { - constructor(radius = 1, widthSegments = 32, heightSegments = 16, phiStart = 0, phiLength = Math.PI * 2, thetaStart = 0, thetaLength = Math.PI) { - super(); - this.type = 'SphereGeometry'; - this.parameters = { - radius: radius, - widthSegments: widthSegments, - heightSegments: heightSegments, - phiStart: phiStart, - phiLength: phiLength, - thetaStart: thetaStart, - thetaLength: thetaLength - }; - widthSegments = Math.max(3, Math.floor(widthSegments)); - heightSegments = Math.max(2, Math.floor(heightSegments)); - const thetaEnd = Math.min(thetaStart + thetaLength, Math.PI); - let index = 0; - const grid = []; - const vertex = new Vector3(); - const normal = new Vector3(); // buffers - - const indices = []; - const vertices = []; - const normals = []; - const uvs = []; // generate vertices, normals and uvs - - for (let iy = 0; iy <= heightSegments; iy++) { - const verticesRow = []; - const v = iy / heightSegments; // special case for the poles - - let uOffset = 0; - - if (iy == 0 && thetaStart == 0) { - uOffset = 0.5 / widthSegments; - } else if (iy == heightSegments && thetaEnd == Math.PI) { - uOffset = -0.5 / widthSegments; - } - - for (let ix = 0; ix <= widthSegments; ix++) { - const u = ix / widthSegments; // vertex - - vertex.x = -radius * Math.cos(phiStart + u * phiLength) * Math.sin(thetaStart + v * thetaLength); - vertex.y = radius * Math.cos(thetaStart + v * thetaLength); - vertex.z = radius * Math.sin(phiStart + u * phiLength) * Math.sin(thetaStart + v * thetaLength); - vertices.push(vertex.x, vertex.y, vertex.z); // normal - - normal.copy(vertex).normalize(); - normals.push(normal.x, normal.y, normal.z); // uv - - uvs.push(u + uOffset, 1 - v); - verticesRow.push(index++); - } - - grid.push(verticesRow); - } // indices - - - for (let iy = 0; iy < heightSegments; iy++) { - for (let ix = 0; ix < widthSegments; ix++) { - const a = grid[iy][ix + 1]; - const b = grid[iy][ix]; - const c = grid[iy + 1][ix]; - const d = grid[iy + 1][ix + 1]; - if (iy !== 0 || thetaStart > 0) indices.push(a, b, d); - if (iy !== heightSegments - 1 || thetaEnd < Math.PI) indices.push(b, c, d); - } - } // build geometry - - - this.setIndex(indices); - this.setAttribute('position', new Float32BufferAttribute(vertices, 3)); - this.setAttribute('normal', new Float32BufferAttribute(normals, 3)); - this.setAttribute('uv', new Float32BufferAttribute(uvs, 2)); - } - - static fromJSON(data) { - return new SphereGeometry(data.radius, data.widthSegments, data.heightSegments, data.phiStart, data.phiLength, data.thetaStart, data.thetaLength); - } - - } - - class TetrahedronGeometry extends PolyhedronGeometry { - constructor(radius = 1, detail = 0) { - const vertices = [1, 1, 1, -1, -1, 1, -1, 1, -1, 1, -1, -1]; - const indices = [2, 1, 0, 0, 3, 2, 1, 3, 0, 2, 3, 1]; - super(vertices, indices, radius, detail); - this.type = 'TetrahedronGeometry'; - this.parameters = { - radius: radius, - detail: detail - }; - } - - static fromJSON(data) { - return new TetrahedronGeometry(data.radius, data.detail); - } - - } - - class TorusGeometry extends BufferGeometry { - constructor(radius = 1, tube = 0.4, radialSegments = 8, tubularSegments = 6, arc = Math.PI * 2) { - super(); - this.type = 'TorusGeometry'; - this.parameters = { - radius: radius, - tube: tube, - radialSegments: radialSegments, - tubularSegments: tubularSegments, - arc: arc - }; - radialSegments = Math.floor(radialSegments); - tubularSegments = Math.floor(tubularSegments); // buffers - - const indices = []; - const vertices = []; - const normals = []; - const uvs = []; // helper variables - - const center = new Vector3(); - const vertex = new Vector3(); - const normal = new Vector3(); // generate vertices, normals and uvs - - for (let j = 0; j <= radialSegments; j++) { - for (let i = 0; i <= tubularSegments; i++) { - const u = i / tubularSegments * arc; - const v = j / radialSegments * Math.PI * 2; // vertex - - vertex.x = (radius + tube * Math.cos(v)) * Math.cos(u); - vertex.y = (radius + tube * Math.cos(v)) * Math.sin(u); - vertex.z = tube * Math.sin(v); - vertices.push(vertex.x, vertex.y, vertex.z); // normal - - center.x = radius * Math.cos(u); - center.y = radius * Math.sin(u); - normal.subVectors(vertex, center).normalize(); - normals.push(normal.x, normal.y, normal.z); // uv - - uvs.push(i / tubularSegments); - uvs.push(j / radialSegments); - } - } // generate indices - - - for (let j = 1; j <= radialSegments; j++) { - for (let i = 1; i <= tubularSegments; i++) { - // indices - const a = (tubularSegments + 1) * j + i - 1; - const b = (tubularSegments + 1) * (j - 1) + i - 1; - const c = (tubularSegments + 1) * (j - 1) + i; - const d = (tubularSegments + 1) * j + i; // faces - - indices.push(a, b, d); - indices.push(b, c, d); - } - } // build geometry - - - this.setIndex(indices); - this.setAttribute('position', new Float32BufferAttribute(vertices, 3)); - this.setAttribute('normal', new Float32BufferAttribute(normals, 3)); - this.setAttribute('uv', new Float32BufferAttribute(uvs, 2)); - } - - static fromJSON(data) { - return new TorusGeometry(data.radius, data.tube, data.radialSegments, data.tubularSegments, data.arc); - } - - } - - class TorusKnotGeometry extends BufferGeometry { - constructor(radius = 1, tube = 0.4, tubularSegments = 64, radialSegments = 8, p = 2, q = 3) { - super(); - this.type = 'TorusKnotGeometry'; - this.parameters = { - radius: radius, - tube: tube, - tubularSegments: tubularSegments, - radialSegments: radialSegments, - p: p, - q: q - }; - tubularSegments = Math.floor(tubularSegments); - radialSegments = Math.floor(radialSegments); // buffers - - const indices = []; - const vertices = []; - const normals = []; - const uvs = []; // helper variables - - const vertex = new Vector3(); - const normal = new Vector3(); - const P1 = new Vector3(); - const P2 = new Vector3(); - const B = new Vector3(); - const T = new Vector3(); - const N = new Vector3(); // generate vertices, normals and uvs - - for (let i = 0; i <= tubularSegments; ++i) { - // the radian "u" is used to calculate the position on the torus curve of the current tubular segment - const u = i / tubularSegments * p * Math.PI * 2; // now we calculate two points. P1 is our current position on the curve, P2 is a little farther ahead. - // these points are used to create a special "coordinate space", which is necessary to calculate the correct vertex positions - - calculatePositionOnCurve(u, p, q, radius, P1); - calculatePositionOnCurve(u + 0.01, p, q, radius, P2); // calculate orthonormal basis - - T.subVectors(P2, P1); - N.addVectors(P2, P1); - B.crossVectors(T, N); - N.crossVectors(B, T); // normalize B, N. T can be ignored, we don't use it - - B.normalize(); - N.normalize(); - - for (let j = 0; j <= radialSegments; ++j) { - // now calculate the vertices. they are nothing more than an extrusion of the torus curve. - // because we extrude a shape in the xy-plane, there is no need to calculate a z-value. - const v = j / radialSegments * Math.PI * 2; - const cx = -tube * Math.cos(v); - const cy = tube * Math.sin(v); // now calculate the final vertex position. - // first we orient the extrusion with our basis vectors, then we add it to the current position on the curve - - vertex.x = P1.x + (cx * N.x + cy * B.x); - vertex.y = P1.y + (cx * N.y + cy * B.y); - vertex.z = P1.z + (cx * N.z + cy * B.z); - vertices.push(vertex.x, vertex.y, vertex.z); // normal (P1 is always the center/origin of the extrusion, thus we can use it to calculate the normal) - - normal.subVectors(vertex, P1).normalize(); - normals.push(normal.x, normal.y, normal.z); // uv - - uvs.push(i / tubularSegments); - uvs.push(j / radialSegments); - } - } // generate indices - - - for (let j = 1; j <= tubularSegments; j++) { - for (let i = 1; i <= radialSegments; i++) { - // indices - const a = (radialSegments + 1) * (j - 1) + (i - 1); - const b = (radialSegments + 1) * j + (i - 1); - const c = (radialSegments + 1) * j + i; - const d = (radialSegments + 1) * (j - 1) + i; // faces - - indices.push(a, b, d); - indices.push(b, c, d); - } - } // build geometry - - - this.setIndex(indices); - this.setAttribute('position', new Float32BufferAttribute(vertices, 3)); - this.setAttribute('normal', new Float32BufferAttribute(normals, 3)); - this.setAttribute('uv', new Float32BufferAttribute(uvs, 2)); // this function calculates the current position on the torus curve - - function calculatePositionOnCurve(u, p, q, radius, position) { - const cu = Math.cos(u); - const su = Math.sin(u); - const quOverP = q / p * u; - const cs = Math.cos(quOverP); - position.x = radius * (2 + cs) * 0.5 * cu; - position.y = radius * (2 + cs) * su * 0.5; - position.z = radius * Math.sin(quOverP) * 0.5; - } - } - - static fromJSON(data) { - return new TorusKnotGeometry(data.radius, data.tube, data.tubularSegments, data.radialSegments, data.p, data.q); - } - - } - - class TubeGeometry extends BufferGeometry { - constructor(path = new QuadraticBezierCurve3(new Vector3(-1, -1, 0), new Vector3(-1, 1, 0), new Vector3(1, 1, 0)), tubularSegments = 64, radius = 1, radialSegments = 8, closed = false) { - super(); - this.type = 'TubeGeometry'; - this.parameters = { - path: path, - tubularSegments: tubularSegments, - radius: radius, - radialSegments: radialSegments, - closed: closed - }; - const frames = path.computeFrenetFrames(tubularSegments, closed); // expose internals - - this.tangents = frames.tangents; - this.normals = frames.normals; - this.binormals = frames.binormals; // helper variables - - const vertex = new Vector3(); - const normal = new Vector3(); - const uv = new Vector2(); - let P = new Vector3(); // buffer - - const vertices = []; - const normals = []; - const uvs = []; - const indices = []; // create buffer data - - generateBufferData(); // build geometry - - this.setIndex(indices); - this.setAttribute('position', new Float32BufferAttribute(vertices, 3)); - this.setAttribute('normal', new Float32BufferAttribute(normals, 3)); - this.setAttribute('uv', new Float32BufferAttribute(uvs, 2)); // functions - - function generateBufferData() { - for (let i = 0; i < tubularSegments; i++) { - generateSegment(i); - } // if the geometry is not closed, generate the last row of vertices and normals - // at the regular position on the given path - // - // if the geometry is closed, duplicate the first row of vertices and normals (uvs will differ) - - - generateSegment(closed === false ? tubularSegments : 0); // uvs are generated in a separate function. - // this makes it easy compute correct values for closed geometries - - generateUVs(); // finally create faces - - generateIndices(); - } - - function generateSegment(i) { - // we use getPointAt to sample evenly distributed points from the given path - P = path.getPointAt(i / tubularSegments, P); // retrieve corresponding normal and binormal - - const N = frames.normals[i]; - const B = frames.binormals[i]; // generate normals and vertices for the current segment - - for (let j = 0; j <= radialSegments; j++) { - const v = j / radialSegments * Math.PI * 2; - const sin = Math.sin(v); - const cos = -Math.cos(v); // normal - - normal.x = cos * N.x + sin * B.x; - normal.y = cos * N.y + sin * B.y; - normal.z = cos * N.z + sin * B.z; - normal.normalize(); - normals.push(normal.x, normal.y, normal.z); // vertex - - vertex.x = P.x + radius * normal.x; - vertex.y = P.y + radius * normal.y; - vertex.z = P.z + radius * normal.z; - vertices.push(vertex.x, vertex.y, vertex.z); - } - } - - function generateIndices() { - for (let j = 1; j <= tubularSegments; j++) { - for (let i = 1; i <= radialSegments; i++) { - const a = (radialSegments + 1) * (j - 1) + (i - 1); - const b = (radialSegments + 1) * j + (i - 1); - const c = (radialSegments + 1) * j + i; - const d = (radialSegments + 1) * (j - 1) + i; // faces - - indices.push(a, b, d); - indices.push(b, c, d); - } - } - } - - function generateUVs() { - for (let i = 0; i <= tubularSegments; i++) { - for (let j = 0; j <= radialSegments; j++) { - uv.x = i / tubularSegments; - uv.y = j / radialSegments; - uvs.push(uv.x, uv.y); - } - } - } - } - - toJSON() { - const data = super.toJSON(); - data.path = this.parameters.path.toJSON(); - return data; - } - - static fromJSON(data) { - // This only works for built-in curves (e.g. CatmullRomCurve3). - // User defined curves or instances of CurvePath will not be deserialized. - return new TubeGeometry(new Curves[data.path.type]().fromJSON(data.path), data.tubularSegments, data.radius, data.radialSegments, data.closed); - } - - } - - class WireframeGeometry extends BufferGeometry { - constructor(geometry = null) { - super(); - this.type = 'WireframeGeometry'; - this.parameters = { - geometry: geometry - }; - - if (geometry !== null) { - // buffer - const vertices = []; - const edges = new Set(); // helper variables - - const start = new Vector3(); - const end = new Vector3(); - - if (geometry.index !== null) { - // indexed BufferGeometry - const position = geometry.attributes.position; - const indices = geometry.index; - let groups = geometry.groups; - - if (groups.length === 0) { - groups = [{ - start: 0, - count: indices.count, - materialIndex: 0 - }]; - } // create a data structure that contains all edges without duplicates - - - for (let o = 0, ol = groups.length; o < ol; ++o) { - const group = groups[o]; - const groupStart = group.start; - const groupCount = group.count; - - for (let i = groupStart, l = groupStart + groupCount; i < l; i += 3) { - for (let j = 0; j < 3; j++) { - const index1 = indices.getX(i + j); - const index2 = indices.getX(i + (j + 1) % 3); - start.fromBufferAttribute(position, index1); - end.fromBufferAttribute(position, index2); - - if (isUniqueEdge(start, end, edges) === true) { - vertices.push(start.x, start.y, start.z); - vertices.push(end.x, end.y, end.z); - } - } - } - } - } else { - // non-indexed BufferGeometry - const position = geometry.attributes.position; - - for (let i = 0, l = position.count / 3; i < l; i++) { - for (let j = 0; j < 3; j++) { - // three edges per triangle, an edge is represented as (index1, index2) - // e.g. the first triangle has the following edges: (0,1),(1,2),(2,0) - const index1 = 3 * i + j; - const index2 = 3 * i + (j + 1) % 3; - start.fromBufferAttribute(position, index1); - end.fromBufferAttribute(position, index2); - - if (isUniqueEdge(start, end, edges) === true) { - vertices.push(start.x, start.y, start.z); - vertices.push(end.x, end.y, end.z); - } - } - } - } // build geometry - - - this.setAttribute('position', new Float32BufferAttribute(vertices, 3)); - } - } - - } - - function isUniqueEdge(start, end, edges) { - const hash1 = `${start.x},${start.y},${start.z}-${end.x},${end.y},${end.z}`; - const hash2 = `${end.x},${end.y},${end.z}-${start.x},${start.y},${start.z}`; // coincident edge - - if (edges.has(hash1) === true || edges.has(hash2) === true) { - return false; - } else { - edges.add(hash1); - edges.add(hash2); - return true; - } - } - - var Geometries = /*#__PURE__*/Object.freeze({ - __proto__: null, - BoxGeometry: BoxGeometry, - BoxBufferGeometry: BoxGeometry, - CapsuleGeometry: CapsuleGeometry, - CapsuleBufferGeometry: CapsuleGeometry, - CircleGeometry: CircleGeometry, - CircleBufferGeometry: CircleGeometry, - ConeGeometry: ConeGeometry, - ConeBufferGeometry: ConeGeometry, - CylinderGeometry: CylinderGeometry, - CylinderBufferGeometry: CylinderGeometry, - DodecahedronGeometry: DodecahedronGeometry, - DodecahedronBufferGeometry: DodecahedronGeometry, - EdgesGeometry: EdgesGeometry, - ExtrudeGeometry: ExtrudeGeometry, - ExtrudeBufferGeometry: ExtrudeGeometry, - IcosahedronGeometry: IcosahedronGeometry, - IcosahedronBufferGeometry: IcosahedronGeometry, - LatheGeometry: LatheGeometry, - LatheBufferGeometry: LatheGeometry, - OctahedronGeometry: OctahedronGeometry, - OctahedronBufferGeometry: OctahedronGeometry, - PlaneGeometry: PlaneGeometry, - PlaneBufferGeometry: PlaneGeometry, - PolyhedronGeometry: PolyhedronGeometry, - PolyhedronBufferGeometry: PolyhedronGeometry, - RingGeometry: RingGeometry, - RingBufferGeometry: RingGeometry, - ShapeGeometry: ShapeGeometry, - ShapeBufferGeometry: ShapeGeometry, - SphereGeometry: SphereGeometry, - SphereBufferGeometry: SphereGeometry, - TetrahedronGeometry: TetrahedronGeometry, - TetrahedronBufferGeometry: TetrahedronGeometry, - TorusGeometry: TorusGeometry, - TorusBufferGeometry: TorusGeometry, - TorusKnotGeometry: TorusKnotGeometry, - TorusKnotBufferGeometry: TorusKnotGeometry, - TubeGeometry: TubeGeometry, - TubeBufferGeometry: TubeGeometry, - WireframeGeometry: WireframeGeometry - }); - - class ShadowMaterial extends Material { - constructor(parameters) { - super(); - this.type = 'ShadowMaterial'; - this.color = new Color(0x000000); - this.transparent = true; - this.fog = true; - this.setValues(parameters); - } - - copy(source) { - super.copy(source); - this.color.copy(source.color); - this.fog = source.fog; - return this; - } - - } - - ShadowMaterial.prototype.isShadowMaterial = true; - - class RawShaderMaterial extends ShaderMaterial { - constructor(parameters) { - super(parameters); - this.type = 'RawShaderMaterial'; - } - - } - - RawShaderMaterial.prototype.isRawShaderMaterial = true; - - class MeshStandardMaterial extends Material { - constructor(parameters) { - super(); - this.defines = { - 'STANDARD': '' - }; - this.type = 'MeshStandardMaterial'; - this.color = new Color(0xffffff); // diffuse - - this.roughness = 1.0; - this.metalness = 0.0; - this.map = null; - this.lightMap = null; - this.lightMapIntensity = 1.0; - this.aoMap = null; - this.aoMapIntensity = 1.0; - this.emissive = new Color(0x000000); - this.emissiveIntensity = 1.0; - this.emissiveMap = null; - this.bumpMap = null; - this.bumpScale = 1; - this.normalMap = null; - this.normalMapType = TangentSpaceNormalMap; - this.normalScale = new Vector2(1, 1); - this.displacementMap = null; - this.displacementScale = 1; - this.displacementBias = 0; - this.roughnessMap = null; - this.metalnessMap = null; - this.alphaMap = null; - this.envMap = null; - this.envMapIntensity = 1.0; - this.wireframe = false; - this.wireframeLinewidth = 1; - this.wireframeLinecap = 'round'; - this.wireframeLinejoin = 'round'; - this.flatShading = false; - this.fog = true; - this.setValues(parameters); - } - - copy(source) { - super.copy(source); - this.defines = { - 'STANDARD': '' - }; - this.color.copy(source.color); - this.roughness = source.roughness; - this.metalness = source.metalness; - this.map = source.map; - this.lightMap = source.lightMap; - this.lightMapIntensity = source.lightMapIntensity; - this.aoMap = source.aoMap; - this.aoMapIntensity = source.aoMapIntensity; - this.emissive.copy(source.emissive); - this.emissiveMap = source.emissiveMap; - this.emissiveIntensity = source.emissiveIntensity; - this.bumpMap = source.bumpMap; - this.bumpScale = source.bumpScale; - this.normalMap = source.normalMap; - this.normalMapType = source.normalMapType; - this.normalScale.copy(source.normalScale); - this.displacementMap = source.displacementMap; - this.displacementScale = source.displacementScale; - this.displacementBias = source.displacementBias; - this.roughnessMap = source.roughnessMap; - this.metalnessMap = source.metalnessMap; - this.alphaMap = source.alphaMap; - this.envMap = source.envMap; - this.envMapIntensity = source.envMapIntensity; - this.wireframe = source.wireframe; - this.wireframeLinewidth = source.wireframeLinewidth; - this.wireframeLinecap = source.wireframeLinecap; - this.wireframeLinejoin = source.wireframeLinejoin; - this.flatShading = source.flatShading; - this.fog = source.fog; - return this; - } - - } - - MeshStandardMaterial.prototype.isMeshStandardMaterial = true; - - class MeshPhysicalMaterial extends MeshStandardMaterial { - constructor(parameters) { - super(); - this.defines = { - 'STANDARD': '', - 'PHYSICAL': '' - }; - this.type = 'MeshPhysicalMaterial'; - this.clearcoatMap = null; - this.clearcoatRoughness = 0.0; - this.clearcoatRoughnessMap = null; - this.clearcoatNormalScale = new Vector2(1, 1); - this.clearcoatNormalMap = null; - this.ior = 1.5; - Object.defineProperty(this, 'reflectivity', { - get: function () { - return clamp(2.5 * (this.ior - 1) / (this.ior + 1), 0, 1); - }, - set: function (reflectivity) { - this.ior = (1 + 0.4 * reflectivity) / (1 - 0.4 * reflectivity); - } - }); - this.sheenColor = new Color(0x000000); - this.sheenColorMap = null; - this.sheenRoughness = 1.0; - this.sheenRoughnessMap = null; - this.transmissionMap = null; - this.thickness = 0; - this.thicknessMap = null; - this.attenuationDistance = 0.0; - this.attenuationColor = new Color(1, 1, 1); - this.specularIntensity = 1.0; - this.specularIntensityMap = null; - this.specularColor = new Color(1, 1, 1); - this.specularColorMap = null; - this._sheen = 0.0; - this._clearcoat = 0; - this._transmission = 0; - this.setValues(parameters); - } - - get sheen() { - return this._sheen; - } - - set sheen(value) { - if (this._sheen > 0 !== value > 0) { - this.version++; - } - - this._sheen = value; - } - - get clearcoat() { - return this._clearcoat; - } - - set clearcoat(value) { - if (this._clearcoat > 0 !== value > 0) { - this.version++; - } - - this._clearcoat = value; - } - - get transmission() { - return this._transmission; - } - - set transmission(value) { - if (this._transmission > 0 !== value > 0) { - this.version++; - } - - this._transmission = value; - } - - copy(source) { - super.copy(source); - this.defines = { - 'STANDARD': '', - 'PHYSICAL': '' - }; - this.clearcoat = source.clearcoat; - this.clearcoatMap = source.clearcoatMap; - this.clearcoatRoughness = source.clearcoatRoughness; - this.clearcoatRoughnessMap = source.clearcoatRoughnessMap; - this.clearcoatNormalMap = source.clearcoatNormalMap; - this.clearcoatNormalScale.copy(source.clearcoatNormalScale); - this.ior = source.ior; - this.sheen = source.sheen; - this.sheenColor.copy(source.sheenColor); - this.sheenColorMap = source.sheenColorMap; - this.sheenRoughness = source.sheenRoughness; - this.sheenRoughnessMap = source.sheenRoughnessMap; - this.transmission = source.transmission; - this.transmissionMap = source.transmissionMap; - this.thickness = source.thickness; - this.thicknessMap = source.thicknessMap; - this.attenuationDistance = source.attenuationDistance; - this.attenuationColor.copy(source.attenuationColor); - this.specularIntensity = source.specularIntensity; - this.specularIntensityMap = source.specularIntensityMap; - this.specularColor.copy(source.specularColor); - this.specularColorMap = source.specularColorMap; - return this; - } - - } - - MeshPhysicalMaterial.prototype.isMeshPhysicalMaterial = true; - - class MeshPhongMaterial extends Material { - constructor(parameters) { - super(); - this.type = 'MeshPhongMaterial'; - this.color = new Color(0xffffff); // diffuse - - this.specular = new Color(0x111111); - this.shininess = 30; - this.map = null; - this.lightMap = null; - this.lightMapIntensity = 1.0; - this.aoMap = null; - this.aoMapIntensity = 1.0; - this.emissive = new Color(0x000000); - this.emissiveIntensity = 1.0; - this.emissiveMap = null; - this.bumpMap = null; - this.bumpScale = 1; - this.normalMap = null; - this.normalMapType = TangentSpaceNormalMap; - this.normalScale = new Vector2(1, 1); - this.displacementMap = null; - this.displacementScale = 1; - this.displacementBias = 0; - this.specularMap = null; - this.alphaMap = null; - this.envMap = null; - this.combine = MultiplyOperation; - this.reflectivity = 1; - this.refractionRatio = 0.98; - this.wireframe = false; - this.wireframeLinewidth = 1; - this.wireframeLinecap = 'round'; - this.wireframeLinejoin = 'round'; - this.flatShading = false; - this.fog = true; - this.setValues(parameters); - } - - copy(source) { - super.copy(source); - this.color.copy(source.color); - this.specular.copy(source.specular); - this.shininess = source.shininess; - this.map = source.map; - this.lightMap = source.lightMap; - this.lightMapIntensity = source.lightMapIntensity; - this.aoMap = source.aoMap; - this.aoMapIntensity = source.aoMapIntensity; - this.emissive.copy(source.emissive); - this.emissiveMap = source.emissiveMap; - this.emissiveIntensity = source.emissiveIntensity; - this.bumpMap = source.bumpMap; - this.bumpScale = source.bumpScale; - this.normalMap = source.normalMap; - this.normalMapType = source.normalMapType; - this.normalScale.copy(source.normalScale); - this.displacementMap = source.displacementMap; - this.displacementScale = source.displacementScale; - this.displacementBias = source.displacementBias; - this.specularMap = source.specularMap; - this.alphaMap = source.alphaMap; - this.envMap = source.envMap; - this.combine = source.combine; - this.reflectivity = source.reflectivity; - this.refractionRatio = source.refractionRatio; - this.wireframe = source.wireframe; - this.wireframeLinewidth = source.wireframeLinewidth; - this.wireframeLinecap = source.wireframeLinecap; - this.wireframeLinejoin = source.wireframeLinejoin; - this.flatShading = source.flatShading; - this.fog = source.fog; - return this; - } - - } - - MeshPhongMaterial.prototype.isMeshPhongMaterial = true; - - class MeshToonMaterial extends Material { - constructor(parameters) { - super(); - this.defines = { - 'TOON': '' - }; - this.type = 'MeshToonMaterial'; - this.color = new Color(0xffffff); - this.map = null; - this.gradientMap = null; - this.lightMap = null; - this.lightMapIntensity = 1.0; - this.aoMap = null; - this.aoMapIntensity = 1.0; - this.emissive = new Color(0x000000); - this.emissiveIntensity = 1.0; - this.emissiveMap = null; - this.bumpMap = null; - this.bumpScale = 1; - this.normalMap = null; - this.normalMapType = TangentSpaceNormalMap; - this.normalScale = new Vector2(1, 1); - this.displacementMap = null; - this.displacementScale = 1; - this.displacementBias = 0; - this.alphaMap = null; - this.wireframe = false; - this.wireframeLinewidth = 1; - this.wireframeLinecap = 'round'; - this.wireframeLinejoin = 'round'; - this.fog = true; - this.setValues(parameters); - } - - copy(source) { - super.copy(source); - this.color.copy(source.color); - this.map = source.map; - this.gradientMap = source.gradientMap; - this.lightMap = source.lightMap; - this.lightMapIntensity = source.lightMapIntensity; - this.aoMap = source.aoMap; - this.aoMapIntensity = source.aoMapIntensity; - this.emissive.copy(source.emissive); - this.emissiveMap = source.emissiveMap; - this.emissiveIntensity = source.emissiveIntensity; - this.bumpMap = source.bumpMap; - this.bumpScale = source.bumpScale; - this.normalMap = source.normalMap; - this.normalMapType = source.normalMapType; - this.normalScale.copy(source.normalScale); - this.displacementMap = source.displacementMap; - this.displacementScale = source.displacementScale; - this.displacementBias = source.displacementBias; - this.alphaMap = source.alphaMap; - this.wireframe = source.wireframe; - this.wireframeLinewidth = source.wireframeLinewidth; - this.wireframeLinecap = source.wireframeLinecap; - this.wireframeLinejoin = source.wireframeLinejoin; - this.fog = source.fog; - return this; - } - - } - - MeshToonMaterial.prototype.isMeshToonMaterial = true; - - class MeshNormalMaterial extends Material { - constructor(parameters) { - super(); - this.type = 'MeshNormalMaterial'; - this.bumpMap = null; - this.bumpScale = 1; - this.normalMap = null; - this.normalMapType = TangentSpaceNormalMap; - this.normalScale = new Vector2(1, 1); - this.displacementMap = null; - this.displacementScale = 1; - this.displacementBias = 0; - this.wireframe = false; - this.wireframeLinewidth = 1; - this.flatShading = false; - this.setValues(parameters); - } - - copy(source) { - super.copy(source); - this.bumpMap = source.bumpMap; - this.bumpScale = source.bumpScale; - this.normalMap = source.normalMap; - this.normalMapType = source.normalMapType; - this.normalScale.copy(source.normalScale); - this.displacementMap = source.displacementMap; - this.displacementScale = source.displacementScale; - this.displacementBias = source.displacementBias; - this.wireframe = source.wireframe; - this.wireframeLinewidth = source.wireframeLinewidth; - this.flatShading = source.flatShading; - return this; - } - - } - - MeshNormalMaterial.prototype.isMeshNormalMaterial = true; - - class MeshLambertMaterial extends Material { - constructor(parameters) { - super(); - this.type = 'MeshLambertMaterial'; - this.color = new Color(0xffffff); // diffuse - - this.map = null; - this.lightMap = null; - this.lightMapIntensity = 1.0; - this.aoMap = null; - this.aoMapIntensity = 1.0; - this.emissive = new Color(0x000000); - this.emissiveIntensity = 1.0; - this.emissiveMap = null; - this.specularMap = null; - this.alphaMap = null; - this.envMap = null; - this.combine = MultiplyOperation; - this.reflectivity = 1; - this.refractionRatio = 0.98; - this.wireframe = false; - this.wireframeLinewidth = 1; - this.wireframeLinecap = 'round'; - this.wireframeLinejoin = 'round'; - this.fog = true; - this.setValues(parameters); - } - - copy(source) { - super.copy(source); - this.color.copy(source.color); - this.map = source.map; - this.lightMap = source.lightMap; - this.lightMapIntensity = source.lightMapIntensity; - this.aoMap = source.aoMap; - this.aoMapIntensity = source.aoMapIntensity; - this.emissive.copy(source.emissive); - this.emissiveMap = source.emissiveMap; - this.emissiveIntensity = source.emissiveIntensity; - this.specularMap = source.specularMap; - this.alphaMap = source.alphaMap; - this.envMap = source.envMap; - this.combine = source.combine; - this.reflectivity = source.reflectivity; - this.refractionRatio = source.refractionRatio; - this.wireframe = source.wireframe; - this.wireframeLinewidth = source.wireframeLinewidth; - this.wireframeLinecap = source.wireframeLinecap; - this.wireframeLinejoin = source.wireframeLinejoin; - this.fog = source.fog; - return this; - } - - } - - MeshLambertMaterial.prototype.isMeshLambertMaterial = true; - - class MeshMatcapMaterial extends Material { - constructor(parameters) { - super(); - this.defines = { - 'MATCAP': '' - }; - this.type = 'MeshMatcapMaterial'; - this.color = new Color(0xffffff); // diffuse - - this.matcap = null; - this.map = null; - this.bumpMap = null; - this.bumpScale = 1; - this.normalMap = null; - this.normalMapType = TangentSpaceNormalMap; - this.normalScale = new Vector2(1, 1); - this.displacementMap = null; - this.displacementScale = 1; - this.displacementBias = 0; - this.alphaMap = null; - this.flatShading = false; - this.fog = true; - this.setValues(parameters); - } - - copy(source) { - super.copy(source); - this.defines = { - 'MATCAP': '' - }; - this.color.copy(source.color); - this.matcap = source.matcap; - this.map = source.map; - this.bumpMap = source.bumpMap; - this.bumpScale = source.bumpScale; - this.normalMap = source.normalMap; - this.normalMapType = source.normalMapType; - this.normalScale.copy(source.normalScale); - this.displacementMap = source.displacementMap; - this.displacementScale = source.displacementScale; - this.displacementBias = source.displacementBias; - this.alphaMap = source.alphaMap; - this.flatShading = source.flatShading; - this.fog = source.fog; - return this; - } - - } - - MeshMatcapMaterial.prototype.isMeshMatcapMaterial = true; - - class LineDashedMaterial extends LineBasicMaterial { - constructor(parameters) { - super(); - this.type = 'LineDashedMaterial'; - this.scale = 1; - this.dashSize = 3; - this.gapSize = 1; - this.setValues(parameters); - } - - copy(source) { - super.copy(source); - this.scale = source.scale; - this.dashSize = source.dashSize; - this.gapSize = source.gapSize; - return this; - } - - } - - LineDashedMaterial.prototype.isLineDashedMaterial = true; - - const materialLib = { - ShadowMaterial, - SpriteMaterial, - RawShaderMaterial, - ShaderMaterial, - PointsMaterial, - MeshPhysicalMaterial, - MeshStandardMaterial, - MeshPhongMaterial, - MeshToonMaterial, - MeshNormalMaterial, - MeshLambertMaterial, - MeshDepthMaterial, - MeshDistanceMaterial, - MeshBasicMaterial, - MeshMatcapMaterial, - LineDashedMaterial, - LineBasicMaterial, - Material - }; - - Material.fromType = function (type) { - return new materialLib[type](); - }; - - const AnimationUtils = { - // same as Array.prototype.slice, but also works on typed arrays - arraySlice: function (array, from, to) { - if (AnimationUtils.isTypedArray(array)) { - // in ios9 array.subarray(from, undefined) will return empty array - // but array.subarray(from) or array.subarray(from, len) is correct - return new array.constructor(array.subarray(from, to !== undefined ? to : array.length)); - } - - return array.slice(from, to); - }, - // converts an array to a specific type - convertArray: function (array, type, forceClone) { - if (!array || // let 'undefined' and 'null' pass - !forceClone && array.constructor === type) return array; - - if (typeof type.BYTES_PER_ELEMENT === 'number') { - return new type(array); // create typed array - } - - return Array.prototype.slice.call(array); // create Array - }, - isTypedArray: function (object) { - return ArrayBuffer.isView(object) && !(object instanceof DataView); - }, - // returns an array by which times and values can be sorted - getKeyframeOrder: function (times) { - function compareTime(i, j) { - return times[i] - times[j]; - } - - const n = times.length; - const result = new Array(n); - - for (let i = 0; i !== n; ++i) result[i] = i; - - result.sort(compareTime); - return result; - }, - // uses the array previously returned by 'getKeyframeOrder' to sort data - sortedArray: function (values, stride, order) { - const nValues = values.length; - const result = new values.constructor(nValues); - - for (let i = 0, dstOffset = 0; dstOffset !== nValues; ++i) { - const srcOffset = order[i] * stride; - - for (let j = 0; j !== stride; ++j) { - result[dstOffset++] = values[srcOffset + j]; - } - } - - return result; - }, - // function for parsing AOS keyframe formats - flattenJSON: function (jsonKeys, times, values, valuePropertyName) { - let i = 1, - key = jsonKeys[0]; - - while (key !== undefined && key[valuePropertyName] === undefined) { - key = jsonKeys[i++]; - } - - if (key === undefined) return; // no data - - let value = key[valuePropertyName]; - if (value === undefined) return; // no data - - if (Array.isArray(value)) { - do { - value = key[valuePropertyName]; - - if (value !== undefined) { - times.push(key.time); - values.push.apply(values, value); // push all elements - } - - key = jsonKeys[i++]; - } while (key !== undefined); - } else if (value.toArray !== undefined) { - // ...assume THREE.Math-ish - do { - value = key[valuePropertyName]; - - if (value !== undefined) { - times.push(key.time); - value.toArray(values, values.length); - } - - key = jsonKeys[i++]; - } while (key !== undefined); - } else { - // otherwise push as-is - do { - value = key[valuePropertyName]; - - if (value !== undefined) { - times.push(key.time); - values.push(value); - } - - key = jsonKeys[i++]; - } while (key !== undefined); - } - }, - subclip: function (sourceClip, name, startFrame, endFrame, fps = 30) { - const clip = sourceClip.clone(); - clip.name = name; - const tracks = []; - - for (let i = 0; i < clip.tracks.length; ++i) { - const track = clip.tracks[i]; - const valueSize = track.getValueSize(); - const times = []; - const values = []; - - for (let j = 0; j < track.times.length; ++j) { - const frame = track.times[j] * fps; - if (frame < startFrame || frame >= endFrame) continue; - times.push(track.times[j]); - - for (let k = 0; k < valueSize; ++k) { - values.push(track.values[j * valueSize + k]); - } - } - - if (times.length === 0) continue; - track.times = AnimationUtils.convertArray(times, track.times.constructor); - track.values = AnimationUtils.convertArray(values, track.values.constructor); - tracks.push(track); - } - - clip.tracks = tracks; // find minimum .times value across all tracks in the trimmed clip - - let minStartTime = Infinity; - - for (let i = 0; i < clip.tracks.length; ++i) { - if (minStartTime > clip.tracks[i].times[0]) { - minStartTime = clip.tracks[i].times[0]; - } - } // shift all tracks such that clip begins at t=0 - - - for (let i = 0; i < clip.tracks.length; ++i) { - clip.tracks[i].shift(-1 * minStartTime); - } - - clip.resetDuration(); - return clip; - }, - makeClipAdditive: function (targetClip, referenceFrame = 0, referenceClip = targetClip, fps = 30) { - if (fps <= 0) fps = 30; - const numTracks = referenceClip.tracks.length; - const referenceTime = referenceFrame / fps; // Make each track's values relative to the values at the reference frame - - for (let i = 0; i < numTracks; ++i) { - const referenceTrack = referenceClip.tracks[i]; - const referenceTrackType = referenceTrack.ValueTypeName; // Skip this track if it's non-numeric - - if (referenceTrackType === 'bool' || referenceTrackType === 'string') continue; // Find the track in the target clip whose name and type matches the reference track - - const targetTrack = targetClip.tracks.find(function (track) { - return track.name === referenceTrack.name && track.ValueTypeName === referenceTrackType; - }); - if (targetTrack === undefined) continue; - let referenceOffset = 0; - const referenceValueSize = referenceTrack.getValueSize(); - - if (referenceTrack.createInterpolant.isInterpolantFactoryMethodGLTFCubicSpline) { - referenceOffset = referenceValueSize / 3; - } - - let targetOffset = 0; - const targetValueSize = targetTrack.getValueSize(); - - if (targetTrack.createInterpolant.isInterpolantFactoryMethodGLTFCubicSpline) { - targetOffset = targetValueSize / 3; - } - - const lastIndex = referenceTrack.times.length - 1; - let referenceValue; // Find the value to subtract out of the track - - if (referenceTime <= referenceTrack.times[0]) { - // Reference frame is earlier than the first keyframe, so just use the first keyframe - const startIndex = referenceOffset; - const endIndex = referenceValueSize - referenceOffset; - referenceValue = AnimationUtils.arraySlice(referenceTrack.values, startIndex, endIndex); - } else if (referenceTime >= referenceTrack.times[lastIndex]) { - // Reference frame is after the last keyframe, so just use the last keyframe - const startIndex = lastIndex * referenceValueSize + referenceOffset; - const endIndex = startIndex + referenceValueSize - referenceOffset; - referenceValue = AnimationUtils.arraySlice(referenceTrack.values, startIndex, endIndex); - } else { - // Interpolate to the reference value - const interpolant = referenceTrack.createInterpolant(); - const startIndex = referenceOffset; - const endIndex = referenceValueSize - referenceOffset; - interpolant.evaluate(referenceTime); - referenceValue = AnimationUtils.arraySlice(interpolant.resultBuffer, startIndex, endIndex); - } // Conjugate the quaternion - - - if (referenceTrackType === 'quaternion') { - const referenceQuat = new Quaternion().fromArray(referenceValue).normalize().conjugate(); - referenceQuat.toArray(referenceValue); - } // Subtract the reference value from all of the track values - - - const numTimes = targetTrack.times.length; - - for (let j = 0; j < numTimes; ++j) { - const valueStart = j * targetValueSize + targetOffset; - - if (referenceTrackType === 'quaternion') { - // Multiply the conjugate for quaternion track types - Quaternion.multiplyQuaternionsFlat(targetTrack.values, valueStart, referenceValue, 0, targetTrack.values, valueStart); - } else { - const valueEnd = targetValueSize - targetOffset * 2; // Subtract each value for all other numeric track types - - for (let k = 0; k < valueEnd; ++k) { - targetTrack.values[valueStart + k] -= referenceValue[k]; - } - } - } - } - - targetClip.blendMode = AdditiveAnimationBlendMode; - return targetClip; - } - }; - - /** - * Abstract base class of interpolants over parametric samples. - * - * The parameter domain is one dimensional, typically the time or a path - * along a curve defined by the data. - * - * The sample values can have any dimensionality and derived classes may - * apply special interpretations to the data. - * - * This class provides the interval seek in a Template Method, deferring - * the actual interpolation to derived classes. - * - * Time complexity is O(1) for linear access crossing at most two points - * and O(log N) for random access, where N is the number of positions. - * - * References: - * - * http://www.oodesign.com/template-method-pattern.html - * - */ - class Interpolant { - constructor(parameterPositions, sampleValues, sampleSize, resultBuffer) { - this.parameterPositions = parameterPositions; - this._cachedIndex = 0; - this.resultBuffer = resultBuffer !== undefined ? resultBuffer : new sampleValues.constructor(sampleSize); - this.sampleValues = sampleValues; - this.valueSize = sampleSize; - this.settings = null; - this.DefaultSettings_ = {}; - } - - evaluate(t) { - const pp = this.parameterPositions; - let i1 = this._cachedIndex, - t1 = pp[i1], - t0 = pp[i1 - 1]; - - validate_interval: { - seek: { - let right; - - linear_scan: { - //- See http://jsperf.com/comparison-to-undefined/3 - //- slower code: - //- - //- if ( t >= t1 || t1 === undefined ) { - forward_scan: if (!(t < t1)) { - for (let giveUpAt = i1 + 2;;) { - if (t1 === undefined) { - if (t < t0) break forward_scan; // after end - - i1 = pp.length; - this._cachedIndex = i1; - return this.afterEnd_(i1 - 1, t, t0); - } - - if (i1 === giveUpAt) break; // this loop - - t0 = t1; - t1 = pp[++i1]; - - if (t < t1) { - // we have arrived at the sought interval - break seek; - } - } // prepare binary search on the right side of the index - - - right = pp.length; - break linear_scan; - } //- slower code: - //- if ( t < t0 || t0 === undefined ) { - - - if (!(t >= t0)) { - // looping? - const t1global = pp[1]; - - if (t < t1global) { - i1 = 2; // + 1, using the scan for the details - - t0 = t1global; - } // linear reverse scan - - - for (let giveUpAt = i1 - 2;;) { - if (t0 === undefined) { - // before start - this._cachedIndex = 0; - return this.beforeStart_(0, t, t1); - } - - if (i1 === giveUpAt) break; // this loop - - t1 = t0; - t0 = pp[--i1 - 1]; - - if (t >= t0) { - // we have arrived at the sought interval - break seek; - } - } // prepare binary search on the left side of the index - - - right = i1; - i1 = 0; - break linear_scan; - } // the interval is valid - - - break validate_interval; - } // linear scan - // binary search - - - while (i1 < right) { - const mid = i1 + right >>> 1; - - if (t < pp[mid]) { - right = mid; - } else { - i1 = mid + 1; - } - } - - t1 = pp[i1]; - t0 = pp[i1 - 1]; // check boundary cases, again - - if (t0 === undefined) { - this._cachedIndex = 0; - return this.beforeStart_(0, t, t1); - } - - if (t1 === undefined) { - i1 = pp.length; - this._cachedIndex = i1; - return this.afterEnd_(i1 - 1, t0, t); - } - } // seek - - - this._cachedIndex = i1; - this.intervalChanged_(i1, t0, t1); - } // validate_interval - - - return this.interpolate_(i1, t0, t, t1); - } - - getSettings_() { - return this.settings || this.DefaultSettings_; - } - - copySampleValue_(index) { - // copies a sample value to the result buffer - const result = this.resultBuffer, - values = this.sampleValues, - stride = this.valueSize, - offset = index * stride; - - for (let i = 0; i !== stride; ++i) { - result[i] = values[offset + i]; - } - - return result; - } // Template methods for derived classes: - - - interpolate_() { - throw new Error('call to abstract method'); // implementations shall return this.resultBuffer - } - - intervalChanged_() {// empty - } - - } // ALIAS DEFINITIONS - - - Interpolant.prototype.beforeStart_ = Interpolant.prototype.copySampleValue_; - Interpolant.prototype.afterEnd_ = Interpolant.prototype.copySampleValue_; - - /** - * Fast and simple cubic spline interpolant. - * - * It was derived from a Hermitian construction setting the first derivative - * at each sample position to the linear slope between neighboring positions - * over their parameter interval. - */ - - class CubicInterpolant extends Interpolant { - constructor(parameterPositions, sampleValues, sampleSize, resultBuffer) { - super(parameterPositions, sampleValues, sampleSize, resultBuffer); - this._weightPrev = -0; - this._offsetPrev = -0; - this._weightNext = -0; - this._offsetNext = -0; - this.DefaultSettings_ = { - endingStart: ZeroCurvatureEnding, - endingEnd: ZeroCurvatureEnding - }; - } - - intervalChanged_(i1, t0, t1) { - const pp = this.parameterPositions; - let iPrev = i1 - 2, - iNext = i1 + 1, - tPrev = pp[iPrev], - tNext = pp[iNext]; - - if (tPrev === undefined) { - switch (this.getSettings_().endingStart) { - case ZeroSlopeEnding: - // f'(t0) = 0 - iPrev = i1; - tPrev = 2 * t0 - t1; - break; - - case WrapAroundEnding: - // use the other end of the curve - iPrev = pp.length - 2; - tPrev = t0 + pp[iPrev] - pp[iPrev + 1]; - break; - - default: - // ZeroCurvatureEnding - // f''(t0) = 0 a.k.a. Natural Spline - iPrev = i1; - tPrev = t1; - } - } - - if (tNext === undefined) { - switch (this.getSettings_().endingEnd) { - case ZeroSlopeEnding: - // f'(tN) = 0 - iNext = i1; - tNext = 2 * t1 - t0; - break; - - case WrapAroundEnding: - // use the other end of the curve - iNext = 1; - tNext = t1 + pp[1] - pp[0]; - break; - - default: - // ZeroCurvatureEnding - // f''(tN) = 0, a.k.a. Natural Spline - iNext = i1 - 1; - tNext = t0; - } - } - - const halfDt = (t1 - t0) * 0.5, - stride = this.valueSize; - this._weightPrev = halfDt / (t0 - tPrev); - this._weightNext = halfDt / (tNext - t1); - this._offsetPrev = iPrev * stride; - this._offsetNext = iNext * stride; - } - - interpolate_(i1, t0, t, t1) { - const result = this.resultBuffer, - values = this.sampleValues, - stride = this.valueSize, - o1 = i1 * stride, - o0 = o1 - stride, - oP = this._offsetPrev, - oN = this._offsetNext, - wP = this._weightPrev, - wN = this._weightNext, - p = (t - t0) / (t1 - t0), - pp = p * p, - ppp = pp * p; // evaluate polynomials - - const sP = -wP * ppp + 2 * wP * pp - wP * p; - const s0 = (1 + wP) * ppp + (-1.5 - 2 * wP) * pp + (-0.5 + wP) * p + 1; - const s1 = (-1 - wN) * ppp + (1.5 + wN) * pp + 0.5 * p; - const sN = wN * ppp - wN * pp; // combine data linearly - - for (let i = 0; i !== stride; ++i) { - result[i] = sP * values[oP + i] + s0 * values[o0 + i] + s1 * values[o1 + i] + sN * values[oN + i]; - } - - return result; - } - - } - - class LinearInterpolant extends Interpolant { - constructor(parameterPositions, sampleValues, sampleSize, resultBuffer) { - super(parameterPositions, sampleValues, sampleSize, resultBuffer); - } - - interpolate_(i1, t0, t, t1) { - const result = this.resultBuffer, - values = this.sampleValues, - stride = this.valueSize, - offset1 = i1 * stride, - offset0 = offset1 - stride, - weight1 = (t - t0) / (t1 - t0), - weight0 = 1 - weight1; - - for (let i = 0; i !== stride; ++i) { - result[i] = values[offset0 + i] * weight0 + values[offset1 + i] * weight1; - } - - return result; - } - - } - - /** - * - * Interpolant that evaluates to the sample value at the position preceding - * the parameter. - */ - - class DiscreteInterpolant extends Interpolant { - constructor(parameterPositions, sampleValues, sampleSize, resultBuffer) { - super(parameterPositions, sampleValues, sampleSize, resultBuffer); - } - - interpolate_(i1 - /*, t0, t, t1 */ - ) { - return this.copySampleValue_(i1 - 1); - } - - } - - class KeyframeTrack { - constructor(name, times, values, interpolation) { - if (name === undefined) throw new Error('THREE.KeyframeTrack: track name is undefined'); - if (times === undefined || times.length === 0) throw new Error('THREE.KeyframeTrack: no keyframes in track named ' + name); - this.name = name; - this.times = AnimationUtils.convertArray(times, this.TimeBufferType); - this.values = AnimationUtils.convertArray(values, this.ValueBufferType); - this.setInterpolation(interpolation || this.DefaultInterpolation); - } // Serialization (in static context, because of constructor invocation - // and automatic invocation of .toJSON): - - - static toJSON(track) { - const trackType = track.constructor; - let json; // derived classes can define a static toJSON method - - if (trackType.toJSON !== this.toJSON) { - json = trackType.toJSON(track); - } else { - // by default, we assume the data can be serialized as-is - json = { - 'name': track.name, - 'times': AnimationUtils.convertArray(track.times, Array), - 'values': AnimationUtils.convertArray(track.values, Array) - }; - const interpolation = track.getInterpolation(); - - if (interpolation !== track.DefaultInterpolation) { - json.interpolation = interpolation; - } - } - - json.type = track.ValueTypeName; // mandatory - - return json; - } - - InterpolantFactoryMethodDiscrete(result) { - return new DiscreteInterpolant(this.times, this.values, this.getValueSize(), result); - } - - InterpolantFactoryMethodLinear(result) { - return new LinearInterpolant(this.times, this.values, this.getValueSize(), result); - } - - InterpolantFactoryMethodSmooth(result) { - return new CubicInterpolant(this.times, this.values, this.getValueSize(), result); - } - - setInterpolation(interpolation) { - let factoryMethod; - - switch (interpolation) { - case InterpolateDiscrete: - factoryMethod = this.InterpolantFactoryMethodDiscrete; - break; - - case InterpolateLinear: - factoryMethod = this.InterpolantFactoryMethodLinear; - break; - - case InterpolateSmooth: - factoryMethod = this.InterpolantFactoryMethodSmooth; - break; - } - - if (factoryMethod === undefined) { - const message = 'unsupported interpolation for ' + this.ValueTypeName + ' keyframe track named ' + this.name; - - if (this.createInterpolant === undefined) { - // fall back to default, unless the default itself is messed up - if (interpolation !== this.DefaultInterpolation) { - this.setInterpolation(this.DefaultInterpolation); - } else { - throw new Error(message); // fatal, in this case - } - } - - console.warn('THREE.KeyframeTrack:', message); - return this; - } - - this.createInterpolant = factoryMethod; - return this; - } - - getInterpolation() { - switch (this.createInterpolant) { - case this.InterpolantFactoryMethodDiscrete: - return InterpolateDiscrete; - - case this.InterpolantFactoryMethodLinear: - return InterpolateLinear; - - case this.InterpolantFactoryMethodSmooth: - return InterpolateSmooth; - } - } - - getValueSize() { - return this.values.length / this.times.length; - } // move all keyframes either forwards or backwards in time - - - shift(timeOffset) { - if (timeOffset !== 0.0) { - const times = this.times; - - for (let i = 0, n = times.length; i !== n; ++i) { - times[i] += timeOffset; - } - } - - return this; - } // scale all keyframe times by a factor (useful for frame <-> seconds conversions) - - - scale(timeScale) { - if (timeScale !== 1.0) { - const times = this.times; - - for (let i = 0, n = times.length; i !== n; ++i) { - times[i] *= timeScale; - } - } - - return this; - } // removes keyframes before and after animation without changing any values within the range [startTime, endTime]. - // IMPORTANT: We do not shift around keys to the start of the track time, because for interpolated keys this will change their values - - - trim(startTime, endTime) { - const times = this.times, - nKeys = times.length; - let from = 0, - to = nKeys - 1; - - while (from !== nKeys && times[from] < startTime) { - ++from; - } - - while (to !== -1 && times[to] > endTime) { - --to; - } - - ++to; // inclusive -> exclusive bound - - if (from !== 0 || to !== nKeys) { - // empty tracks are forbidden, so keep at least one keyframe - if (from >= to) { - to = Math.max(to, 1); - from = to - 1; - } - - const stride = this.getValueSize(); - this.times = AnimationUtils.arraySlice(times, from, to); - this.values = AnimationUtils.arraySlice(this.values, from * stride, to * stride); - } - - return this; - } // ensure we do not get a GarbageInGarbageOut situation, make sure tracks are at least minimally viable - - - validate() { - let valid = true; - const valueSize = this.getValueSize(); - - if (valueSize - Math.floor(valueSize) !== 0) { - console.error('THREE.KeyframeTrack: Invalid value size in track.', this); - valid = false; - } - - const times = this.times, - values = this.values, - nKeys = times.length; - - if (nKeys === 0) { - console.error('THREE.KeyframeTrack: Track is empty.', this); - valid = false; - } - - let prevTime = null; - - for (let i = 0; i !== nKeys; i++) { - const currTime = times[i]; - - if (typeof currTime === 'number' && isNaN(currTime)) { - console.error('THREE.KeyframeTrack: Time is not a valid number.', this, i, currTime); - valid = false; - break; - } - - if (prevTime !== null && prevTime > currTime) { - console.error('THREE.KeyframeTrack: Out of order keys.', this, i, currTime, prevTime); - valid = false; - break; - } - - prevTime = currTime; - } - - if (values !== undefined) { - if (AnimationUtils.isTypedArray(values)) { - for (let i = 0, n = values.length; i !== n; ++i) { - const value = values[i]; - - if (isNaN(value)) { - console.error('THREE.KeyframeTrack: Value is not a valid number.', this, i, value); - valid = false; - break; - } - } - } - } - - return valid; - } // removes equivalent sequential keys as common in morph target sequences - // (0,0,0,0,1,1,1,0,0,0,0,0,0,0) --> (0,0,1,1,0,0) - - - optimize() { - // times or values may be shared with other tracks, so overwriting is unsafe - const times = AnimationUtils.arraySlice(this.times), - values = AnimationUtils.arraySlice(this.values), - stride = this.getValueSize(), - smoothInterpolation = this.getInterpolation() === InterpolateSmooth, - lastIndex = times.length - 1; - let writeIndex = 1; - - for (let i = 1; i < lastIndex; ++i) { - let keep = false; - const time = times[i]; - const timeNext = times[i + 1]; // remove adjacent keyframes scheduled at the same time - - if (time !== timeNext && (i !== 1 || time !== times[0])) { - if (!smoothInterpolation) { - // remove unnecessary keyframes same as their neighbors - const offset = i * stride, - offsetP = offset - stride, - offsetN = offset + stride; - - for (let j = 0; j !== stride; ++j) { - const value = values[offset + j]; - - if (value !== values[offsetP + j] || value !== values[offsetN + j]) { - keep = true; - break; - } - } - } else { - keep = true; - } - } // in-place compaction - - - if (keep) { - if (i !== writeIndex) { - times[writeIndex] = times[i]; - const readOffset = i * stride, - writeOffset = writeIndex * stride; - - for (let j = 0; j !== stride; ++j) { - values[writeOffset + j] = values[readOffset + j]; - } - } - - ++writeIndex; - } - } // flush last keyframe (compaction looks ahead) - - - if (lastIndex > 0) { - times[writeIndex] = times[lastIndex]; - - for (let readOffset = lastIndex * stride, writeOffset = writeIndex * stride, j = 0; j !== stride; ++j) { - values[writeOffset + j] = values[readOffset + j]; - } - - ++writeIndex; - } - - if (writeIndex !== times.length) { - this.times = AnimationUtils.arraySlice(times, 0, writeIndex); - this.values = AnimationUtils.arraySlice(values, 0, writeIndex * stride); - } else { - this.times = times; - this.values = values; - } - - return this; - } - - clone() { - const times = AnimationUtils.arraySlice(this.times, 0); - const values = AnimationUtils.arraySlice(this.values, 0); - const TypedKeyframeTrack = this.constructor; - const track = new TypedKeyframeTrack(this.name, times, values); // Interpolant argument to constructor is not saved, so copy the factory method directly. - - track.createInterpolant = this.createInterpolant; - return track; - } - - } - - KeyframeTrack.prototype.TimeBufferType = Float32Array; - KeyframeTrack.prototype.ValueBufferType = Float32Array; - KeyframeTrack.prototype.DefaultInterpolation = InterpolateLinear; - - /** - * A Track of Boolean keyframe values. - */ - - class BooleanKeyframeTrack extends KeyframeTrack {} - - BooleanKeyframeTrack.prototype.ValueTypeName = 'bool'; - BooleanKeyframeTrack.prototype.ValueBufferType = Array; - BooleanKeyframeTrack.prototype.DefaultInterpolation = InterpolateDiscrete; - BooleanKeyframeTrack.prototype.InterpolantFactoryMethodLinear = undefined; - BooleanKeyframeTrack.prototype.InterpolantFactoryMethodSmooth = undefined; // Note: Actually this track could have a optimized / compressed - - /** - * A Track of keyframe values that represent color. - */ - - class ColorKeyframeTrack extends KeyframeTrack {} - - ColorKeyframeTrack.prototype.ValueTypeName = 'color'; // ValueBufferType is inherited - - /** - * A Track of numeric keyframe values. - */ - - class NumberKeyframeTrack extends KeyframeTrack {} - - NumberKeyframeTrack.prototype.ValueTypeName = 'number'; // ValueBufferType is inherited - - /** - * Spherical linear unit quaternion interpolant. - */ - - class QuaternionLinearInterpolant extends Interpolant { - constructor(parameterPositions, sampleValues, sampleSize, resultBuffer) { - super(parameterPositions, sampleValues, sampleSize, resultBuffer); - } - - interpolate_(i1, t0, t, t1) { - const result = this.resultBuffer, - values = this.sampleValues, - stride = this.valueSize, - alpha = (t - t0) / (t1 - t0); - let offset = i1 * stride; - - for (let end = offset + stride; offset !== end; offset += 4) { - Quaternion.slerpFlat(result, 0, values, offset - stride, values, offset, alpha); - } - - return result; - } - - } - - /** - * A Track of quaternion keyframe values. - */ - - class QuaternionKeyframeTrack extends KeyframeTrack { - InterpolantFactoryMethodLinear(result) { - return new QuaternionLinearInterpolant(this.times, this.values, this.getValueSize(), result); - } - - } - - QuaternionKeyframeTrack.prototype.ValueTypeName = 'quaternion'; // ValueBufferType is inherited - - QuaternionKeyframeTrack.prototype.DefaultInterpolation = InterpolateLinear; - QuaternionKeyframeTrack.prototype.InterpolantFactoryMethodSmooth = undefined; - - /** - * A Track that interpolates Strings - */ - - class StringKeyframeTrack extends KeyframeTrack {} - - StringKeyframeTrack.prototype.ValueTypeName = 'string'; - StringKeyframeTrack.prototype.ValueBufferType = Array; - StringKeyframeTrack.prototype.DefaultInterpolation = InterpolateDiscrete; - StringKeyframeTrack.prototype.InterpolantFactoryMethodLinear = undefined; - StringKeyframeTrack.prototype.InterpolantFactoryMethodSmooth = undefined; - - /** - * A Track of vectored keyframe values. - */ - - class VectorKeyframeTrack extends KeyframeTrack {} - - VectorKeyframeTrack.prototype.ValueTypeName = 'vector'; // ValueBufferType is inherited - - class AnimationClip { - constructor(name, duration = -1, tracks, blendMode = NormalAnimationBlendMode) { - this.name = name; - this.tracks = tracks; - this.duration = duration; - this.blendMode = blendMode; - this.uuid = generateUUID(); // this means it should figure out its duration by scanning the tracks - - if (this.duration < 0) { - this.resetDuration(); - } - } - - static parse(json) { - const tracks = [], - jsonTracks = json.tracks, - frameTime = 1.0 / (json.fps || 1.0); - - for (let i = 0, n = jsonTracks.length; i !== n; ++i) { - tracks.push(parseKeyframeTrack(jsonTracks[i]).scale(frameTime)); - } - - const clip = new this(json.name, json.duration, tracks, json.blendMode); - clip.uuid = json.uuid; - return clip; - } - - static toJSON(clip) { - const tracks = [], - clipTracks = clip.tracks; - const json = { - 'name': clip.name, - 'duration': clip.duration, - 'tracks': tracks, - 'uuid': clip.uuid, - 'blendMode': clip.blendMode - }; - - for (let i = 0, n = clipTracks.length; i !== n; ++i) { - tracks.push(KeyframeTrack.toJSON(clipTracks[i])); - } - - return json; - } - - static CreateFromMorphTargetSequence(name, morphTargetSequence, fps, noLoop) { - const numMorphTargets = morphTargetSequence.length; - const tracks = []; - - for (let i = 0; i < numMorphTargets; i++) { - let times = []; - let values = []; - times.push((i + numMorphTargets - 1) % numMorphTargets, i, (i + 1) % numMorphTargets); - values.push(0, 1, 0); - const order = AnimationUtils.getKeyframeOrder(times); - times = AnimationUtils.sortedArray(times, 1, order); - values = AnimationUtils.sortedArray(values, 1, order); // if there is a key at the first frame, duplicate it as the - // last frame as well for perfect loop. - - if (!noLoop && times[0] === 0) { - times.push(numMorphTargets); - values.push(values[0]); - } - - tracks.push(new NumberKeyframeTrack('.morphTargetInfluences[' + morphTargetSequence[i].name + ']', times, values).scale(1.0 / fps)); - } - - return new this(name, -1, tracks); - } - - static findByName(objectOrClipArray, name) { - let clipArray = objectOrClipArray; - - if (!Array.isArray(objectOrClipArray)) { - const o = objectOrClipArray; - clipArray = o.geometry && o.geometry.animations || o.animations; - } - - for (let i = 0; i < clipArray.length; i++) { - if (clipArray[i].name === name) { - return clipArray[i]; - } - } - - return null; - } - - static CreateClipsFromMorphTargetSequences(morphTargets, fps, noLoop) { - const animationToMorphTargets = {}; // tested with https://regex101.com/ on trick sequences - // such flamingo_flyA_003, flamingo_run1_003, crdeath0059 - - const pattern = /^([\w-]*?)([\d]+)$/; // sort morph target names into animation groups based - // patterns like Walk_001, Walk_002, Run_001, Run_002 - - for (let i = 0, il = morphTargets.length; i < il; i++) { - const morphTarget = morphTargets[i]; - const parts = morphTarget.name.match(pattern); - - if (parts && parts.length > 1) { - const name = parts[1]; - let animationMorphTargets = animationToMorphTargets[name]; - - if (!animationMorphTargets) { - animationToMorphTargets[name] = animationMorphTargets = []; - } - - animationMorphTargets.push(morphTarget); - } - } - - const clips = []; - - for (const name in animationToMorphTargets) { - clips.push(this.CreateFromMorphTargetSequence(name, animationToMorphTargets[name], fps, noLoop)); - } - - return clips; - } // parse the animation.hierarchy format - - - static parseAnimation(animation, bones) { - if (!animation) { - console.error('THREE.AnimationClip: No animation in JSONLoader data.'); - return null; - } - - const addNonemptyTrack = function (trackType, trackName, animationKeys, propertyName, destTracks) { - // only return track if there are actually keys. - if (animationKeys.length !== 0) { - const times = []; - const values = []; - AnimationUtils.flattenJSON(animationKeys, times, values, propertyName); // empty keys are filtered out, so check again - - if (times.length !== 0) { - destTracks.push(new trackType(trackName, times, values)); - } - } - }; - - const tracks = []; - const clipName = animation.name || 'default'; - const fps = animation.fps || 30; - const blendMode = animation.blendMode; // automatic length determination in AnimationClip. - - let duration = animation.length || -1; - const hierarchyTracks = animation.hierarchy || []; - - for (let h = 0; h < hierarchyTracks.length; h++) { - const animationKeys = hierarchyTracks[h].keys; // skip empty tracks - - if (!animationKeys || animationKeys.length === 0) continue; // process morph targets - - if (animationKeys[0].morphTargets) { - // figure out all morph targets used in this track - const morphTargetNames = {}; - let k; - - for (k = 0; k < animationKeys.length; k++) { - if (animationKeys[k].morphTargets) { - for (let m = 0; m < animationKeys[k].morphTargets.length; m++) { - morphTargetNames[animationKeys[k].morphTargets[m]] = -1; - } - } - } // create a track for each morph target with all zero - // morphTargetInfluences except for the keys in which - // the morphTarget is named. - - - for (const morphTargetName in morphTargetNames) { - const times = []; - const values = []; - - for (let m = 0; m !== animationKeys[k].morphTargets.length; ++m) { - const animationKey = animationKeys[k]; - times.push(animationKey.time); - values.push(animationKey.morphTarget === morphTargetName ? 1 : 0); - } - - tracks.push(new NumberKeyframeTrack('.morphTargetInfluence[' + morphTargetName + ']', times, values)); - } - - duration = morphTargetNames.length * fps; - } else { - // ...assume skeletal animation - const boneName = '.bones[' + bones[h].name + ']'; - addNonemptyTrack(VectorKeyframeTrack, boneName + '.position', animationKeys, 'pos', tracks); - addNonemptyTrack(QuaternionKeyframeTrack, boneName + '.quaternion', animationKeys, 'rot', tracks); - addNonemptyTrack(VectorKeyframeTrack, boneName + '.scale', animationKeys, 'scl', tracks); - } - } - - if (tracks.length === 0) { - return null; - } - - const clip = new this(clipName, duration, tracks, blendMode); - return clip; - } - - resetDuration() { - const tracks = this.tracks; - let duration = 0; - - for (let i = 0, n = tracks.length; i !== n; ++i) { - const track = this.tracks[i]; - duration = Math.max(duration, track.times[track.times.length - 1]); - } - - this.duration = duration; - return this; - } - - trim() { - for (let i = 0; i < this.tracks.length; i++) { - this.tracks[i].trim(0, this.duration); - } - - return this; - } - - validate() { - let valid = true; - - for (let i = 0; i < this.tracks.length; i++) { - valid = valid && this.tracks[i].validate(); - } - - return valid; - } - - optimize() { - for (let i = 0; i < this.tracks.length; i++) { - this.tracks[i].optimize(); - } - - return this; - } - - clone() { - const tracks = []; - - for (let i = 0; i < this.tracks.length; i++) { - tracks.push(this.tracks[i].clone()); - } - - return new this.constructor(this.name, this.duration, tracks, this.blendMode); - } - - toJSON() { - return this.constructor.toJSON(this); - } - - } - - function getTrackTypeForValueTypeName(typeName) { - switch (typeName.toLowerCase()) { - case 'scalar': - case 'double': - case 'float': - case 'number': - case 'integer': - return NumberKeyframeTrack; - - case 'vector': - case 'vector2': - case 'vector3': - case 'vector4': - return VectorKeyframeTrack; - - case 'color': - return ColorKeyframeTrack; - - case 'quaternion': - return QuaternionKeyframeTrack; - - case 'bool': - case 'boolean': - return BooleanKeyframeTrack; - - case 'string': - return StringKeyframeTrack; - } - - throw new Error('THREE.KeyframeTrack: Unsupported typeName: ' + typeName); - } - - function parseKeyframeTrack(json) { - if (json.type === undefined) { - throw new Error('THREE.KeyframeTrack: track type undefined, can not parse'); - } - - const trackType = getTrackTypeForValueTypeName(json.type); - - if (json.times === undefined) { - const times = [], - values = []; - AnimationUtils.flattenJSON(json.keys, times, values, 'value'); - json.times = times; - json.values = values; - } // derived classes can define a static parse method - - - if (trackType.parse !== undefined) { - return trackType.parse(json); - } else { - // by default, we assume a constructor compatible with the base - return new trackType(json.name, json.times, json.values, json.interpolation); - } - } - - const Cache = { - enabled: false, - files: {}, - add: function (key, file) { - if (this.enabled === false) return; // console.log( 'THREE.Cache', 'Adding key:', key ); - - this.files[key] = file; - }, - get: function (key) { - if (this.enabled === false) return; // console.log( 'THREE.Cache', 'Checking key:', key ); - - return this.files[key]; - }, - remove: function (key) { - delete this.files[key]; - }, - clear: function () { - this.files = {}; - } - }; - - class LoadingManager { - constructor(onLoad, onProgress, onError) { - const scope = this; - let isLoading = false; - let itemsLoaded = 0; - let itemsTotal = 0; - let urlModifier = undefined; - const handlers = []; // Refer to #5689 for the reason why we don't set .onStart - // in the constructor - - this.onStart = undefined; - this.onLoad = onLoad; - this.onProgress = onProgress; - this.onError = onError; - - this.itemStart = function (url) { - itemsTotal++; - - if (isLoading === false) { - if (scope.onStart !== undefined) { - scope.onStart(url, itemsLoaded, itemsTotal); - } - } - - isLoading = true; - }; - - this.itemEnd = function (url) { - itemsLoaded++; - - if (scope.onProgress !== undefined) { - scope.onProgress(url, itemsLoaded, itemsTotal); - } - - if (itemsLoaded === itemsTotal) { - isLoading = false; - - if (scope.onLoad !== undefined) { - scope.onLoad(); - } - } - }; - - this.itemError = function (url) { - if (scope.onError !== undefined) { - scope.onError(url); - } - }; - - this.resolveURL = function (url) { - if (urlModifier) { - return urlModifier(url); - } - - return url; - }; - - this.setURLModifier = function (transform) { - urlModifier = transform; - return this; - }; - - this.addHandler = function (regex, loader) { - handlers.push(regex, loader); - return this; - }; - - this.removeHandler = function (regex) { - const index = handlers.indexOf(regex); - - if (index !== -1) { - handlers.splice(index, 2); - } - - return this; - }; - - this.getHandler = function (file) { - for (let i = 0, l = handlers.length; i < l; i += 2) { - const regex = handlers[i]; - const loader = handlers[i + 1]; - if (regex.global) regex.lastIndex = 0; // see #17920 - - if (regex.test(file)) { - return loader; - } - } - - return null; - }; - } - - } - - const DefaultLoadingManager = new LoadingManager(); - - class Loader { - constructor(manager) { - this.manager = manager !== undefined ? manager : DefaultLoadingManager; - this.crossOrigin = 'anonymous'; - this.withCredentials = false; - this.path = ''; - this.resourcePath = ''; - this.requestHeader = {}; - } - - load() {} - - loadAsync(url, onProgress) { - const scope = this; - return new Promise(function (resolve, reject) { - scope.load(url, resolve, onProgress, reject); - }); - } - - parse() {} - - setCrossOrigin(crossOrigin) { - this.crossOrigin = crossOrigin; - return this; - } - - setWithCredentials(value) { - this.withCredentials = value; - return this; - } - - setPath(path) { - this.path = path; - return this; - } - - setResourcePath(resourcePath) { - this.resourcePath = resourcePath; - return this; - } - - setRequestHeader(requestHeader) { - this.requestHeader = requestHeader; - return this; - } - - } - - const loading = {}; - - class FileLoader extends Loader { - constructor(manager) { - super(manager); - } - - load(url, onLoad, onProgress, onError) { - if (url === undefined) url = ''; - if (this.path !== undefined) url = this.path + url; - url = this.manager.resolveURL(url); - const cached = Cache.get(url); - - if (cached !== undefined) { - this.manager.itemStart(url); - setTimeout(() => { - if (onLoad) onLoad(cached); - this.manager.itemEnd(url); - }, 0); - return cached; - } // Check if request is duplicate - - - if (loading[url] !== undefined) { - loading[url].push({ - onLoad: onLoad, - onProgress: onProgress, - onError: onError - }); - return; - } // Initialise array for duplicate requests - - - loading[url] = []; - loading[url].push({ - onLoad: onLoad, - onProgress: onProgress, - onError: onError - }); // create request - - const req = new Request(url, { - headers: new Headers(this.requestHeader), - credentials: this.withCredentials ? 'include' : 'same-origin' // An abort controller could be added within a future PR - - }); // record states ( avoid data race ) - - const mimeType = this.mimeType; - const responseType = this.responseType; // start the fetch - - fetch(req).then(response => { - if (response.status === 200 || response.status === 0) { - // Some browsers return HTTP Status 0 when using non-http protocol - // e.g. 'file://' or 'data://'. Handle as success. - if (response.status === 0) { - console.warn('THREE.FileLoader: HTTP Status 0 received.'); - } // Workaround: Checking if response.body === undefined for Alipay browser #23548 - - - if (typeof ReadableStream === 'undefined' || response.body === undefined || response.body.getReader === undefined) { - return response; - } - - const callbacks = loading[url]; - const reader = response.body.getReader(); - const contentLength = response.headers.get('Content-Length'); - const total = contentLength ? parseInt(contentLength) : 0; - const lengthComputable = total !== 0; - let loaded = 0; // periodically read data into the new stream tracking while download progress - - const stream = new ReadableStream({ - start(controller) { - readData(); - - function readData() { - reader.read().then(({ - done, - value - }) => { - if (done) { - controller.close(); - } else { - loaded += value.byteLength; - const event = new ProgressEvent('progress', { - lengthComputable, - loaded, - total - }); - - for (let i = 0, il = callbacks.length; i < il; i++) { - const callback = callbacks[i]; - if (callback.onProgress) callback.onProgress(event); - } - - controller.enqueue(value); - readData(); - } - }); - } - } - - }); - return new Response(stream); - } else { - throw Error(`fetch for "${response.url}" responded with ${response.status}: ${response.statusText}`); - } - }).then(response => { - switch (responseType) { - case 'arraybuffer': - return response.arrayBuffer(); - - case 'blob': - return response.blob(); - - case 'document': - return response.text().then(text => { - const parser = new DOMParser(); - return parser.parseFromString(text, mimeType); - }); - - case 'json': - return response.json(); - - default: - if (mimeType === undefined) { - return response.text(); - } else { - // sniff encoding - const re = /charset="?([^;"\s]*)"?/i; - const exec = re.exec(mimeType); - const label = exec && exec[1] ? exec[1].toLowerCase() : undefined; - const decoder = new TextDecoder(label); - return response.arrayBuffer().then(ab => decoder.decode(ab)); - } - - } - }).then(data => { - // Add to cache only on HTTP success, so that we do not cache - // error response bodies as proper responses to requests. - Cache.add(url, data); - const callbacks = loading[url]; - delete loading[url]; - - for (let i = 0, il = callbacks.length; i < il; i++) { - const callback = callbacks[i]; - if (callback.onLoad) callback.onLoad(data); - } - }).catch(err => { - // Abort errors and other errors are handled the same - const callbacks = loading[url]; - - if (callbacks === undefined) { - // When onLoad was called and url was deleted in `loading` - this.manager.itemError(url); - throw err; - } - - delete loading[url]; - - for (let i = 0, il = callbacks.length; i < il; i++) { - const callback = callbacks[i]; - if (callback.onError) callback.onError(err); - } - - this.manager.itemError(url); - }).finally(() => { - this.manager.itemEnd(url); - }); - this.manager.itemStart(url); - } - - setResponseType(value) { - this.responseType = value; - return this; - } - - setMimeType(value) { - this.mimeType = value; - return this; - } - - } - - class AnimationLoader extends Loader { - constructor(manager) { - super(manager); - } - - load(url, onLoad, onProgress, onError) { - const scope = this; - const loader = new FileLoader(this.manager); - loader.setPath(this.path); - loader.setRequestHeader(this.requestHeader); - loader.setWithCredentials(this.withCredentials); - loader.load(url, function (text) { - try { - onLoad(scope.parse(JSON.parse(text))); - } catch (e) { - if (onError) { - onError(e); - } else { - console.error(e); - } - - scope.manager.itemError(url); - } - }, onProgress, onError); - } - - parse(json) { - const animations = []; - - for (let i = 0; i < json.length; i++) { - const clip = AnimationClip.parse(json[i]); - animations.push(clip); - } - - return animations; - } - - } - - /** - * Abstract Base class to block based textures loader (dds, pvr, ...) - * - * Sub classes have to implement the parse() method which will be used in load(). - */ - - class CompressedTextureLoader extends Loader { - constructor(manager) { - super(manager); - } - - load(url, onLoad, onProgress, onError) { - const scope = this; - const images = []; - const texture = new CompressedTexture(); - const loader = new FileLoader(this.manager); - loader.setPath(this.path); - loader.setResponseType('arraybuffer'); - loader.setRequestHeader(this.requestHeader); - loader.setWithCredentials(scope.withCredentials); - let loaded = 0; - - function loadTexture(i) { - loader.load(url[i], function (buffer) { - const texDatas = scope.parse(buffer, true); - images[i] = { - width: texDatas.width, - height: texDatas.height, - format: texDatas.format, - mipmaps: texDatas.mipmaps - }; - loaded += 1; - - if (loaded === 6) { - if (texDatas.mipmapCount === 1) texture.minFilter = LinearFilter; - texture.image = images; - texture.format = texDatas.format; - texture.needsUpdate = true; - if (onLoad) onLoad(texture); - } - }, onProgress, onError); - } - - if (Array.isArray(url)) { - for (let i = 0, il = url.length; i < il; ++i) { - loadTexture(i); - } - } else { - // compressed cubemap texture stored in a single DDS file - loader.load(url, function (buffer) { - const texDatas = scope.parse(buffer, true); - - if (texDatas.isCubemap) { - const faces = texDatas.mipmaps.length / texDatas.mipmapCount; - - for (let f = 0; f < faces; f++) { - images[f] = { - mipmaps: [] - }; - - for (let i = 0; i < texDatas.mipmapCount; i++) { - images[f].mipmaps.push(texDatas.mipmaps[f * texDatas.mipmapCount + i]); - images[f].format = texDatas.format; - images[f].width = texDatas.width; - images[f].height = texDatas.height; - } - } - - texture.image = images; - } else { - texture.image.width = texDatas.width; - texture.image.height = texDatas.height; - texture.mipmaps = texDatas.mipmaps; - } - - if (texDatas.mipmapCount === 1) { - texture.minFilter = LinearFilter; - } - - texture.format = texDatas.format; - texture.needsUpdate = true; - if (onLoad) onLoad(texture); - }, onProgress, onError); - } - - return texture; - } - - } - - class ImageLoader extends Loader { - constructor(manager) { - super(manager); - } - - load(url, onLoad, onProgress, onError) { - if (this.path !== undefined) url = this.path + url; - url = this.manager.resolveURL(url); - const scope = this; - const cached = Cache.get(url); - - if (cached !== undefined) { - scope.manager.itemStart(url); - setTimeout(function () { - if (onLoad) onLoad(cached); - scope.manager.itemEnd(url); - }, 0); - return cached; - } - - const image = createElementNS('img'); - - function onImageLoad() { - removeEventListeners(); - Cache.add(url, this); - if (onLoad) onLoad(this); - scope.manager.itemEnd(url); - } - - function onImageError(event) { - removeEventListeners(); - if (onError) onError(event); - scope.manager.itemError(url); - scope.manager.itemEnd(url); - } - - function removeEventListeners() { - image.removeEventListener('load', onImageLoad, false); - image.removeEventListener('error', onImageError, false); - } - - image.addEventListener('load', onImageLoad, false); - image.addEventListener('error', onImageError, false); - - if (url.slice(0, 5) !== 'data:') { - if (this.crossOrigin !== undefined) image.crossOrigin = this.crossOrigin; - } - - scope.manager.itemStart(url); - image.src = url; - return image; - } - - } - - class CubeTextureLoader extends Loader { - constructor(manager) { - super(manager); - } - - load(urls, onLoad, onProgress, onError) { - const texture = new CubeTexture(); - const loader = new ImageLoader(this.manager); - loader.setCrossOrigin(this.crossOrigin); - loader.setPath(this.path); - let loaded = 0; - - function loadTexture(i) { - loader.load(urls[i], function (image) { - texture.images[i] = image; - loaded++; - - if (loaded === 6) { - texture.needsUpdate = true; - if (onLoad) onLoad(texture); - } - }, undefined, onError); - } - - for (let i = 0; i < urls.length; ++i) { - loadTexture(i); - } - - return texture; - } - - } - - /** - * Abstract Base class to load generic binary textures formats (rgbe, hdr, ...) - * - * Sub classes have to implement the parse() method which will be used in load(). - */ - - class DataTextureLoader extends Loader { - constructor(manager) { - super(manager); - } - - load(url, onLoad, onProgress, onError) { - const scope = this; - const texture = new DataTexture(); - const loader = new FileLoader(this.manager); - loader.setResponseType('arraybuffer'); - loader.setRequestHeader(this.requestHeader); - loader.setPath(this.path); - loader.setWithCredentials(scope.withCredentials); - loader.load(url, function (buffer) { - const texData = scope.parse(buffer); - if (!texData) return; - - if (texData.image !== undefined) { - texture.image = texData.image; - } else if (texData.data !== undefined) { - texture.image.width = texData.width; - texture.image.height = texData.height; - texture.image.data = texData.data; - } - - texture.wrapS = texData.wrapS !== undefined ? texData.wrapS : ClampToEdgeWrapping; - texture.wrapT = texData.wrapT !== undefined ? texData.wrapT : ClampToEdgeWrapping; - texture.magFilter = texData.magFilter !== undefined ? texData.magFilter : LinearFilter; - texture.minFilter = texData.minFilter !== undefined ? texData.minFilter : LinearFilter; - texture.anisotropy = texData.anisotropy !== undefined ? texData.anisotropy : 1; - - if (texData.encoding !== undefined) { - texture.encoding = texData.encoding; - } - - if (texData.flipY !== undefined) { - texture.flipY = texData.flipY; - } - - if (texData.format !== undefined) { - texture.format = texData.format; - } - - if (texData.type !== undefined) { - texture.type = texData.type; - } - - if (texData.mipmaps !== undefined) { - texture.mipmaps = texData.mipmaps; - texture.minFilter = LinearMipmapLinearFilter; // presumably... - } - - if (texData.mipmapCount === 1) { - texture.minFilter = LinearFilter; - } - - if (texData.generateMipmaps !== undefined) { - texture.generateMipmaps = texData.generateMipmaps; - } - - texture.needsUpdate = true; - if (onLoad) onLoad(texture, texData); - }, onProgress, onError); - return texture; - } - - } - - class TextureLoader extends Loader { - constructor(manager) { - super(manager); - } - - load(url, onLoad, onProgress, onError) { - const texture = new Texture(); - const loader = new ImageLoader(this.manager); - loader.setCrossOrigin(this.crossOrigin); - loader.setPath(this.path); - loader.load(url, function (image) { - texture.image = image; - texture.needsUpdate = true; - - if (onLoad !== undefined) { - onLoad(texture); - } - }, onProgress, onError); - return texture; - } - - } - - class Light extends Object3D { - constructor(color, intensity = 1) { - super(); - this.type = 'Light'; - this.color = new Color(color); - this.intensity = intensity; - } - - dispose() {// Empty here in base class; some subclasses override. - } - - copy(source) { - super.copy(source); - this.color.copy(source.color); - this.intensity = source.intensity; - return this; - } - - toJSON(meta) { - const data = super.toJSON(meta); - data.object.color = this.color.getHex(); - data.object.intensity = this.intensity; - if (this.groundColor !== undefined) data.object.groundColor = this.groundColor.getHex(); - if (this.distance !== undefined) data.object.distance = this.distance; - if (this.angle !== undefined) data.object.angle = this.angle; - if (this.decay !== undefined) data.object.decay = this.decay; - if (this.penumbra !== undefined) data.object.penumbra = this.penumbra; - if (this.shadow !== undefined) data.object.shadow = this.shadow.toJSON(); - return data; - } - - } - - Light.prototype.isLight = true; - - class HemisphereLight extends Light { - constructor(skyColor, groundColor, intensity) { - super(skyColor, intensity); - this.type = 'HemisphereLight'; - this.position.copy(Object3D.DefaultUp); - this.updateMatrix(); - this.groundColor = new Color(groundColor); - } - - copy(source) { - Light.prototype.copy.call(this, source); - this.groundColor.copy(source.groundColor); - return this; - } - - } - - HemisphereLight.prototype.isHemisphereLight = true; - - const _projScreenMatrix$1 = /*@__PURE__*/new Matrix4(); - - const _lightPositionWorld$1 = /*@__PURE__*/new Vector3(); - - const _lookTarget$1 = /*@__PURE__*/new Vector3(); - - class LightShadow { - constructor(camera) { - this.camera = camera; - this.bias = 0; - this.normalBias = 0; - this.radius = 1; - this.blurSamples = 8; - this.mapSize = new Vector2(512, 512); - this.map = null; - this.mapPass = null; - this.matrix = new Matrix4(); - this.autoUpdate = true; - this.needsUpdate = false; - this._frustum = new Frustum(); - this._frameExtents = new Vector2(1, 1); - this._viewportCount = 1; - this._viewports = [new Vector4(0, 0, 1, 1)]; - } - - getViewportCount() { - return this._viewportCount; - } - - getFrustum() { - return this._frustum; - } - - updateMatrices(light) { - const shadowCamera = this.camera; - const shadowMatrix = this.matrix; - - _lightPositionWorld$1.setFromMatrixPosition(light.matrixWorld); - - shadowCamera.position.copy(_lightPositionWorld$1); - - _lookTarget$1.setFromMatrixPosition(light.target.matrixWorld); - - shadowCamera.lookAt(_lookTarget$1); - shadowCamera.updateMatrixWorld(); - - _projScreenMatrix$1.multiplyMatrices(shadowCamera.projectionMatrix, shadowCamera.matrixWorldInverse); - - this._frustum.setFromProjectionMatrix(_projScreenMatrix$1); - - shadowMatrix.set(0.5, 0.0, 0.0, 0.5, 0.0, 0.5, 0.0, 0.5, 0.0, 0.0, 0.5, 0.5, 0.0, 0.0, 0.0, 1.0); - shadowMatrix.multiply(shadowCamera.projectionMatrix); - shadowMatrix.multiply(shadowCamera.matrixWorldInverse); - } - - getViewport(viewportIndex) { - return this._viewports[viewportIndex]; - } - - getFrameExtents() { - return this._frameExtents; - } - - dispose() { - if (this.map) { - this.map.dispose(); - } - - if (this.mapPass) { - this.mapPass.dispose(); - } - } - - copy(source) { - this.camera = source.camera.clone(); - this.bias = source.bias; - this.radius = source.radius; - this.mapSize.copy(source.mapSize); - return this; - } - - clone() { - return new this.constructor().copy(this); - } - - toJSON() { - const object = {}; - if (this.bias !== 0) object.bias = this.bias; - if (this.normalBias !== 0) object.normalBias = this.normalBias; - if (this.radius !== 1) object.radius = this.radius; - if (this.mapSize.x !== 512 || this.mapSize.y !== 512) object.mapSize = this.mapSize.toArray(); - object.camera = this.camera.toJSON(false).object; - delete object.camera.matrix; - return object; - } - - } - - class SpotLightShadow extends LightShadow { - constructor() { - super(new PerspectiveCamera(50, 1, 0.5, 500)); - this.focus = 1; - } - - updateMatrices(light) { - const camera = this.camera; - const fov = RAD2DEG * 2 * light.angle * this.focus; - const aspect = this.mapSize.width / this.mapSize.height; - const far = light.distance || camera.far; - - if (fov !== camera.fov || aspect !== camera.aspect || far !== camera.far) { - camera.fov = fov; - camera.aspect = aspect; - camera.far = far; - camera.updateProjectionMatrix(); - } - - super.updateMatrices(light); - } - - copy(source) { - super.copy(source); - this.focus = source.focus; - return this; - } - - } - - SpotLightShadow.prototype.isSpotLightShadow = true; - - class SpotLight extends Light { - constructor(color, intensity, distance = 0, angle = Math.PI / 3, penumbra = 0, decay = 1) { - super(color, intensity); - this.type = 'SpotLight'; - this.position.copy(Object3D.DefaultUp); - this.updateMatrix(); - this.target = new Object3D(); - this.distance = distance; - this.angle = angle; - this.penumbra = penumbra; - this.decay = decay; // for physically correct lights, should be 2. - - this.shadow = new SpotLightShadow(); - } - - get power() { - // compute the light's luminous power (in lumens) from its intensity (in candela) - // by convention for a spotlight, luminous power (lm) = π * luminous intensity (cd) - return this.intensity * Math.PI; - } - - set power(power) { - // set the light's intensity (in candela) from the desired luminous power (in lumens) - this.intensity = power / Math.PI; - } - - dispose() { - this.shadow.dispose(); - } - - copy(source) { - super.copy(source); - this.distance = source.distance; - this.angle = source.angle; - this.penumbra = source.penumbra; - this.decay = source.decay; - this.target = source.target.clone(); - this.shadow = source.shadow.clone(); - return this; - } - - } - - SpotLight.prototype.isSpotLight = true; - - const _projScreenMatrix = /*@__PURE__*/new Matrix4(); - - const _lightPositionWorld = /*@__PURE__*/new Vector3(); - - const _lookTarget = /*@__PURE__*/new Vector3(); - - class PointLightShadow extends LightShadow { - constructor() { - super(new PerspectiveCamera(90, 1, 0.5, 500)); - this._frameExtents = new Vector2(4, 2); - this._viewportCount = 6; - this._viewports = [// These viewports map a cube-map onto a 2D texture with the - // following orientation: - // - // xzXZ - // y Y - // - // X - Positive x direction - // x - Negative x direction - // Y - Positive y direction - // y - Negative y direction - // Z - Positive z direction - // z - Negative z direction - // positive X - new Vector4(2, 1, 1, 1), // negative X - new Vector4(0, 1, 1, 1), // positive Z - new Vector4(3, 1, 1, 1), // negative Z - new Vector4(1, 1, 1, 1), // positive Y - new Vector4(3, 0, 1, 1), // negative Y - new Vector4(1, 0, 1, 1)]; - this._cubeDirections = [new Vector3(1, 0, 0), new Vector3(-1, 0, 0), new Vector3(0, 0, 1), new Vector3(0, 0, -1), new Vector3(0, 1, 0), new Vector3(0, -1, 0)]; - this._cubeUps = [new Vector3(0, 1, 0), new Vector3(0, 1, 0), new Vector3(0, 1, 0), new Vector3(0, 1, 0), new Vector3(0, 0, 1), new Vector3(0, 0, -1)]; - } - - updateMatrices(light, viewportIndex = 0) { - const camera = this.camera; - const shadowMatrix = this.matrix; - const far = light.distance || camera.far; - - if (far !== camera.far) { - camera.far = far; - camera.updateProjectionMatrix(); - } - - _lightPositionWorld.setFromMatrixPosition(light.matrixWorld); - - camera.position.copy(_lightPositionWorld); - - _lookTarget.copy(camera.position); - - _lookTarget.add(this._cubeDirections[viewportIndex]); - - camera.up.copy(this._cubeUps[viewportIndex]); - camera.lookAt(_lookTarget); - camera.updateMatrixWorld(); - shadowMatrix.makeTranslation(-_lightPositionWorld.x, -_lightPositionWorld.y, -_lightPositionWorld.z); - - _projScreenMatrix.multiplyMatrices(camera.projectionMatrix, camera.matrixWorldInverse); - - this._frustum.setFromProjectionMatrix(_projScreenMatrix); - } - - } - - PointLightShadow.prototype.isPointLightShadow = true; - - class PointLight extends Light { - constructor(color, intensity, distance = 0, decay = 1) { - super(color, intensity); - this.type = 'PointLight'; - this.distance = distance; - this.decay = decay; // for physically correct lights, should be 2. - - this.shadow = new PointLightShadow(); - } - - get power() { - // compute the light's luminous power (in lumens) from its intensity (in candela) - // for an isotropic light source, luminous power (lm) = 4 π luminous intensity (cd) - return this.intensity * 4 * Math.PI; - } - - set power(power) { - // set the light's intensity (in candela) from the desired luminous power (in lumens) - this.intensity = power / (4 * Math.PI); - } - - dispose() { - this.shadow.dispose(); - } - - copy(source) { - super.copy(source); - this.distance = source.distance; - this.decay = source.decay; - this.shadow = source.shadow.clone(); - return this; - } - - } - - PointLight.prototype.isPointLight = true; - - class DirectionalLightShadow extends LightShadow { - constructor() { - super(new OrthographicCamera(-5, 5, 5, -5, 0.5, 500)); - } - - } - - DirectionalLightShadow.prototype.isDirectionalLightShadow = true; - - class DirectionalLight extends Light { - constructor(color, intensity) { - super(color, intensity); - this.type = 'DirectionalLight'; - this.position.copy(Object3D.DefaultUp); - this.updateMatrix(); - this.target = new Object3D(); - this.shadow = new DirectionalLightShadow(); - } - - dispose() { - this.shadow.dispose(); - } - - copy(source) { - super.copy(source); - this.target = source.target.clone(); - this.shadow = source.shadow.clone(); - return this; - } - - } - - DirectionalLight.prototype.isDirectionalLight = true; - - class AmbientLight extends Light { - constructor(color, intensity) { - super(color, intensity); - this.type = 'AmbientLight'; - } - - } - - AmbientLight.prototype.isAmbientLight = true; - - class RectAreaLight extends Light { - constructor(color, intensity, width = 10, height = 10) { - super(color, intensity); - this.type = 'RectAreaLight'; - this.width = width; - this.height = height; - } - - get power() { - // compute the light's luminous power (in lumens) from its intensity (in nits) - return this.intensity * this.width * this.height * Math.PI; - } - - set power(power) { - // set the light's intensity (in nits) from the desired luminous power (in lumens) - this.intensity = power / (this.width * this.height * Math.PI); - } - - copy(source) { - super.copy(source); - this.width = source.width; - this.height = source.height; - return this; - } - - toJSON(meta) { - const data = super.toJSON(meta); - data.object.width = this.width; - data.object.height = this.height; - return data; - } - - } - - RectAreaLight.prototype.isRectAreaLight = true; - - /** - * Primary reference: - * https://graphics.stanford.edu/papers/envmap/envmap.pdf - * - * Secondary reference: - * https://www.ppsloan.org/publications/StupidSH36.pdf - */ - // 3-band SH defined by 9 coefficients - - class SphericalHarmonics3 { - constructor() { - this.coefficients = []; - - for (let i = 0; i < 9; i++) { - this.coefficients.push(new Vector3()); - } - } - - set(coefficients) { - for (let i = 0; i < 9; i++) { - this.coefficients[i].copy(coefficients[i]); - } - - return this; - } - - zero() { - for (let i = 0; i < 9; i++) { - this.coefficients[i].set(0, 0, 0); - } - - return this; - } // get the radiance in the direction of the normal - // target is a Vector3 - - - getAt(normal, target) { - // normal is assumed to be unit length - const x = normal.x, - y = normal.y, - z = normal.z; - const coeff = this.coefficients; // band 0 - - target.copy(coeff[0]).multiplyScalar(0.282095); // band 1 - - target.addScaledVector(coeff[1], 0.488603 * y); - target.addScaledVector(coeff[2], 0.488603 * z); - target.addScaledVector(coeff[3], 0.488603 * x); // band 2 - - target.addScaledVector(coeff[4], 1.092548 * (x * y)); - target.addScaledVector(coeff[5], 1.092548 * (y * z)); - target.addScaledVector(coeff[6], 0.315392 * (3.0 * z * z - 1.0)); - target.addScaledVector(coeff[7], 1.092548 * (x * z)); - target.addScaledVector(coeff[8], 0.546274 * (x * x - y * y)); - return target; - } // get the irradiance (radiance convolved with cosine lobe) in the direction of the normal - // target is a Vector3 - // https://graphics.stanford.edu/papers/envmap/envmap.pdf - - - getIrradianceAt(normal, target) { - // normal is assumed to be unit length - const x = normal.x, - y = normal.y, - z = normal.z; - const coeff = this.coefficients; // band 0 - - target.copy(coeff[0]).multiplyScalar(0.886227); // π * 0.282095 - // band 1 - - target.addScaledVector(coeff[1], 2.0 * 0.511664 * y); // ( 2 * π / 3 ) * 0.488603 - - target.addScaledVector(coeff[2], 2.0 * 0.511664 * z); - target.addScaledVector(coeff[3], 2.0 * 0.511664 * x); // band 2 - - target.addScaledVector(coeff[4], 2.0 * 0.429043 * x * y); // ( π / 4 ) * 1.092548 - - target.addScaledVector(coeff[5], 2.0 * 0.429043 * y * z); - target.addScaledVector(coeff[6], 0.743125 * z * z - 0.247708); // ( π / 4 ) * 0.315392 * 3 - - target.addScaledVector(coeff[7], 2.0 * 0.429043 * x * z); - target.addScaledVector(coeff[8], 0.429043 * (x * x - y * y)); // ( π / 4 ) * 0.546274 - - return target; - } - - add(sh) { - for (let i = 0; i < 9; i++) { - this.coefficients[i].add(sh.coefficients[i]); - } - - return this; - } - - addScaledSH(sh, s) { - for (let i = 0; i < 9; i++) { - this.coefficients[i].addScaledVector(sh.coefficients[i], s); - } - - return this; - } - - scale(s) { - for (let i = 0; i < 9; i++) { - this.coefficients[i].multiplyScalar(s); - } - - return this; - } - - lerp(sh, alpha) { - for (let i = 0; i < 9; i++) { - this.coefficients[i].lerp(sh.coefficients[i], alpha); - } - - return this; - } - - equals(sh) { - for (let i = 0; i < 9; i++) { - if (!this.coefficients[i].equals(sh.coefficients[i])) { - return false; - } - } - - return true; - } - - copy(sh) { - return this.set(sh.coefficients); - } - - clone() { - return new this.constructor().copy(this); - } - - fromArray(array, offset = 0) { - const coefficients = this.coefficients; - - for (let i = 0; i < 9; i++) { - coefficients[i].fromArray(array, offset + i * 3); - } - - return this; - } - - toArray(array = [], offset = 0) { - const coefficients = this.coefficients; - - for (let i = 0; i < 9; i++) { - coefficients[i].toArray(array, offset + i * 3); - } - - return array; - } // evaluate the basis functions - // shBasis is an Array[ 9 ] - - - static getBasisAt(normal, shBasis) { - // normal is assumed to be unit length - const x = normal.x, - y = normal.y, - z = normal.z; // band 0 - - shBasis[0] = 0.282095; // band 1 - - shBasis[1] = 0.488603 * y; - shBasis[2] = 0.488603 * z; - shBasis[3] = 0.488603 * x; // band 2 - - shBasis[4] = 1.092548 * x * y; - shBasis[5] = 1.092548 * y * z; - shBasis[6] = 0.315392 * (3 * z * z - 1); - shBasis[7] = 1.092548 * x * z; - shBasis[8] = 0.546274 * (x * x - y * y); - } - - } - - SphericalHarmonics3.prototype.isSphericalHarmonics3 = true; - - class LightProbe extends Light { - constructor(sh = new SphericalHarmonics3(), intensity = 1) { - super(undefined, intensity); - this.sh = sh; - } - - copy(source) { - super.copy(source); - this.sh.copy(source.sh); - return this; - } - - fromJSON(json) { - this.intensity = json.intensity; // TODO: Move this bit to Light.fromJSON(); - - this.sh.fromArray(json.sh); - return this; - } - - toJSON(meta) { - const data = super.toJSON(meta); - data.object.sh = this.sh.toArray(); - return data; - } - - } - - LightProbe.prototype.isLightProbe = true; - - class MaterialLoader extends Loader { - constructor(manager) { - super(manager); - this.textures = {}; - } - - load(url, onLoad, onProgress, onError) { - const scope = this; - const loader = new FileLoader(scope.manager); - loader.setPath(scope.path); - loader.setRequestHeader(scope.requestHeader); - loader.setWithCredentials(scope.withCredentials); - loader.load(url, function (text) { - try { - onLoad(scope.parse(JSON.parse(text))); - } catch (e) { - if (onError) { - onError(e); - } else { - console.error(e); - } - - scope.manager.itemError(url); - } - }, onProgress, onError); - } - - parse(json) { - const textures = this.textures; - - function getTexture(name) { - if (textures[name] === undefined) { - console.warn('THREE.MaterialLoader: Undefined texture', name); - } - - return textures[name]; - } - - const material = Material.fromType(json.type); - if (json.uuid !== undefined) material.uuid = json.uuid; - if (json.name !== undefined) material.name = json.name; - if (json.color !== undefined && material.color !== undefined) material.color.setHex(json.color); - if (json.roughness !== undefined) material.roughness = json.roughness; - if (json.metalness !== undefined) material.metalness = json.metalness; - if (json.sheen !== undefined) material.sheen = json.sheen; - if (json.sheenColor !== undefined) material.sheenColor = new Color().setHex(json.sheenColor); - if (json.sheenRoughness !== undefined) material.sheenRoughness = json.sheenRoughness; - if (json.emissive !== undefined && material.emissive !== undefined) material.emissive.setHex(json.emissive); - if (json.specular !== undefined && material.specular !== undefined) material.specular.setHex(json.specular); - if (json.specularIntensity !== undefined) material.specularIntensity = json.specularIntensity; - if (json.specularColor !== undefined && material.specularColor !== undefined) material.specularColor.setHex(json.specularColor); - if (json.shininess !== undefined) material.shininess = json.shininess; - if (json.clearcoat !== undefined) material.clearcoat = json.clearcoat; - if (json.clearcoatRoughness !== undefined) material.clearcoatRoughness = json.clearcoatRoughness; - if (json.transmission !== undefined) material.transmission = json.transmission; - if (json.thickness !== undefined) material.thickness = json.thickness; - if (json.attenuationDistance !== undefined) material.attenuationDistance = json.attenuationDistance; - if (json.attenuationColor !== undefined && material.attenuationColor !== undefined) material.attenuationColor.setHex(json.attenuationColor); - if (json.fog !== undefined) material.fog = json.fog; - if (json.flatShading !== undefined) material.flatShading = json.flatShading; - if (json.blending !== undefined) material.blending = json.blending; - if (json.combine !== undefined) material.combine = json.combine; - if (json.side !== undefined) material.side = json.side; - if (json.shadowSide !== undefined) material.shadowSide = json.shadowSide; - if (json.opacity !== undefined) material.opacity = json.opacity; - if (json.transparent !== undefined) material.transparent = json.transparent; - if (json.alphaTest !== undefined) material.alphaTest = json.alphaTest; - if (json.depthTest !== undefined) material.depthTest = json.depthTest; - if (json.depthWrite !== undefined) material.depthWrite = json.depthWrite; - if (json.colorWrite !== undefined) material.colorWrite = json.colorWrite; - if (json.stencilWrite !== undefined) material.stencilWrite = json.stencilWrite; - if (json.stencilWriteMask !== undefined) material.stencilWriteMask = json.stencilWriteMask; - if (json.stencilFunc !== undefined) material.stencilFunc = json.stencilFunc; - if (json.stencilRef !== undefined) material.stencilRef = json.stencilRef; - if (json.stencilFuncMask !== undefined) material.stencilFuncMask = json.stencilFuncMask; - if (json.stencilFail !== undefined) material.stencilFail = json.stencilFail; - if (json.stencilZFail !== undefined) material.stencilZFail = json.stencilZFail; - if (json.stencilZPass !== undefined) material.stencilZPass = json.stencilZPass; - if (json.wireframe !== undefined) material.wireframe = json.wireframe; - if (json.wireframeLinewidth !== undefined) material.wireframeLinewidth = json.wireframeLinewidth; - if (json.wireframeLinecap !== undefined) material.wireframeLinecap = json.wireframeLinecap; - if (json.wireframeLinejoin !== undefined) material.wireframeLinejoin = json.wireframeLinejoin; - if (json.rotation !== undefined) material.rotation = json.rotation; - if (json.linewidth !== 1) material.linewidth = json.linewidth; - if (json.dashSize !== undefined) material.dashSize = json.dashSize; - if (json.gapSize !== undefined) material.gapSize = json.gapSize; - if (json.scale !== undefined) material.scale = json.scale; - if (json.polygonOffset !== undefined) material.polygonOffset = json.polygonOffset; - if (json.polygonOffsetFactor !== undefined) material.polygonOffsetFactor = json.polygonOffsetFactor; - if (json.polygonOffsetUnits !== undefined) material.polygonOffsetUnits = json.polygonOffsetUnits; - if (json.dithering !== undefined) material.dithering = json.dithering; - if (json.alphaToCoverage !== undefined) material.alphaToCoverage = json.alphaToCoverage; - if (json.premultipliedAlpha !== undefined) material.premultipliedAlpha = json.premultipliedAlpha; - if (json.visible !== undefined) material.visible = json.visible; - if (json.toneMapped !== undefined) material.toneMapped = json.toneMapped; - if (json.userData !== undefined) material.userData = json.userData; - - if (json.vertexColors !== undefined) { - if (typeof json.vertexColors === 'number') { - material.vertexColors = json.vertexColors > 0 ? true : false; - } else { - material.vertexColors = json.vertexColors; - } - } // Shader Material - - - if (json.uniforms !== undefined) { - for (const name in json.uniforms) { - const uniform = json.uniforms[name]; - material.uniforms[name] = {}; - - switch (uniform.type) { - case 't': - material.uniforms[name].value = getTexture(uniform.value); - break; - - case 'c': - material.uniforms[name].value = new Color().setHex(uniform.value); - break; - - case 'v2': - material.uniforms[name].value = new Vector2().fromArray(uniform.value); - break; - - case 'v3': - material.uniforms[name].value = new Vector3().fromArray(uniform.value); - break; - - case 'v4': - material.uniforms[name].value = new Vector4().fromArray(uniform.value); - break; - - case 'm3': - material.uniforms[name].value = new Matrix3().fromArray(uniform.value); - break; - - case 'm4': - material.uniforms[name].value = new Matrix4().fromArray(uniform.value); - break; - - default: - material.uniforms[name].value = uniform.value; - } - } - } - - if (json.defines !== undefined) material.defines = json.defines; - if (json.vertexShader !== undefined) material.vertexShader = json.vertexShader; - if (json.fragmentShader !== undefined) material.fragmentShader = json.fragmentShader; - - if (json.extensions !== undefined) { - for (const key in json.extensions) { - material.extensions[key] = json.extensions[key]; - } - } // Deprecated - - - if (json.shading !== undefined) material.flatShading = json.shading === 1; // THREE.FlatShading - // for PointsMaterial - - if (json.size !== undefined) material.size = json.size; - if (json.sizeAttenuation !== undefined) material.sizeAttenuation = json.sizeAttenuation; // maps - - if (json.map !== undefined) material.map = getTexture(json.map); - if (json.matcap !== undefined) material.matcap = getTexture(json.matcap); - if (json.alphaMap !== undefined) material.alphaMap = getTexture(json.alphaMap); - if (json.bumpMap !== undefined) material.bumpMap = getTexture(json.bumpMap); - if (json.bumpScale !== undefined) material.bumpScale = json.bumpScale; - if (json.normalMap !== undefined) material.normalMap = getTexture(json.normalMap); - if (json.normalMapType !== undefined) material.normalMapType = json.normalMapType; - - if (json.normalScale !== undefined) { - let normalScale = json.normalScale; - - if (Array.isArray(normalScale) === false) { - // Blender exporter used to export a scalar. See #7459 - normalScale = [normalScale, normalScale]; - } - - material.normalScale = new Vector2().fromArray(normalScale); - } - - if (json.displacementMap !== undefined) material.displacementMap = getTexture(json.displacementMap); - if (json.displacementScale !== undefined) material.displacementScale = json.displacementScale; - if (json.displacementBias !== undefined) material.displacementBias = json.displacementBias; - if (json.roughnessMap !== undefined) material.roughnessMap = getTexture(json.roughnessMap); - if (json.metalnessMap !== undefined) material.metalnessMap = getTexture(json.metalnessMap); - if (json.emissiveMap !== undefined) material.emissiveMap = getTexture(json.emissiveMap); - if (json.emissiveIntensity !== undefined) material.emissiveIntensity = json.emissiveIntensity; - if (json.specularMap !== undefined) material.specularMap = getTexture(json.specularMap); - if (json.specularIntensityMap !== undefined) material.specularIntensityMap = getTexture(json.specularIntensityMap); - if (json.specularColorMap !== undefined) material.specularColorMap = getTexture(json.specularColorMap); - if (json.envMap !== undefined) material.envMap = getTexture(json.envMap); - if (json.envMapIntensity !== undefined) material.envMapIntensity = json.envMapIntensity; - if (json.reflectivity !== undefined) material.reflectivity = json.reflectivity; - if (json.refractionRatio !== undefined) material.refractionRatio = json.refractionRatio; - if (json.lightMap !== undefined) material.lightMap = getTexture(json.lightMap); - if (json.lightMapIntensity !== undefined) material.lightMapIntensity = json.lightMapIntensity; - if (json.aoMap !== undefined) material.aoMap = getTexture(json.aoMap); - if (json.aoMapIntensity !== undefined) material.aoMapIntensity = json.aoMapIntensity; - if (json.gradientMap !== undefined) material.gradientMap = getTexture(json.gradientMap); - if (json.clearcoatMap !== undefined) material.clearcoatMap = getTexture(json.clearcoatMap); - if (json.clearcoatRoughnessMap !== undefined) material.clearcoatRoughnessMap = getTexture(json.clearcoatRoughnessMap); - if (json.clearcoatNormalMap !== undefined) material.clearcoatNormalMap = getTexture(json.clearcoatNormalMap); - if (json.clearcoatNormalScale !== undefined) material.clearcoatNormalScale = new Vector2().fromArray(json.clearcoatNormalScale); - if (json.transmissionMap !== undefined) material.transmissionMap = getTexture(json.transmissionMap); - if (json.thicknessMap !== undefined) material.thicknessMap = getTexture(json.thicknessMap); - if (json.sheenColorMap !== undefined) material.sheenColorMap = getTexture(json.sheenColorMap); - if (json.sheenRoughnessMap !== undefined) material.sheenRoughnessMap = getTexture(json.sheenRoughnessMap); - return material; - } - - setTextures(value) { - this.textures = value; - return this; - } - - } - - class LoaderUtils { - static decodeText(array) { - if (typeof TextDecoder !== 'undefined') { - return new TextDecoder().decode(array); - } // Avoid the String.fromCharCode.apply(null, array) shortcut, which - // throws a "maximum call stack size exceeded" error for large arrays. - - - let s = ''; - - for (let i = 0, il = array.length; i < il; i++) { - // Implicitly assumes little-endian. - s += String.fromCharCode(array[i]); - } - - try { - // merges multi-byte utf-8 characters. - return decodeURIComponent(escape(s)); - } catch (e) { - // see #16358 - return s; - } - } - - static extractUrlBase(url) { - const index = url.lastIndexOf('/'); - if (index === -1) return './'; - return url.slice(0, index + 1); - } - - static resolveURL(url, path) { - // Invalid URL - if (typeof url !== 'string' || url === '') return ''; // Host Relative URL - - if (/^https?:\/\//i.test(path) && /^\//.test(url)) { - path = path.replace(/(^https?:\/\/[^\/]+).*/i, '$1'); - } // Absolute URL http://,https://,// - - - if (/^(https?:)?\/\//i.test(url)) return url; // Data URI - - if (/^data:.*,.*$/i.test(url)) return url; // Blob URL - - if (/^blob:.*$/i.test(url)) return url; // Relative URL - - return path + url; - } - - } - - class InstancedBufferGeometry extends BufferGeometry { - constructor() { - super(); - this.type = 'InstancedBufferGeometry'; - this.instanceCount = Infinity; - } - - copy(source) { - super.copy(source); - this.instanceCount = source.instanceCount; - return this; - } - - clone() { - return new this.constructor().copy(this); - } - - toJSON() { - const data = super.toJSON(this); - data.instanceCount = this.instanceCount; - data.isInstancedBufferGeometry = true; - return data; - } - - } - - InstancedBufferGeometry.prototype.isInstancedBufferGeometry = true; - - class BufferGeometryLoader extends Loader { - constructor(manager) { - super(manager); - } - - load(url, onLoad, onProgress, onError) { - const scope = this; - const loader = new FileLoader(scope.manager); - loader.setPath(scope.path); - loader.setRequestHeader(scope.requestHeader); - loader.setWithCredentials(scope.withCredentials); - loader.load(url, function (text) { - try { - onLoad(scope.parse(JSON.parse(text))); - } catch (e) { - if (onError) { - onError(e); - } else { - console.error(e); - } - - scope.manager.itemError(url); - } - }, onProgress, onError); - } - - parse(json) { - const interleavedBufferMap = {}; - const arrayBufferMap = {}; - - function getInterleavedBuffer(json, uuid) { - if (interleavedBufferMap[uuid] !== undefined) return interleavedBufferMap[uuid]; - const interleavedBuffers = json.interleavedBuffers; - const interleavedBuffer = interleavedBuffers[uuid]; - const buffer = getArrayBuffer(json, interleavedBuffer.buffer); - const array = getTypedArray(interleavedBuffer.type, buffer); - const ib = new InterleavedBuffer(array, interleavedBuffer.stride); - ib.uuid = interleavedBuffer.uuid; - interleavedBufferMap[uuid] = ib; - return ib; - } - - function getArrayBuffer(json, uuid) { - if (arrayBufferMap[uuid] !== undefined) return arrayBufferMap[uuid]; - const arrayBuffers = json.arrayBuffers; - const arrayBuffer = arrayBuffers[uuid]; - const ab = new Uint32Array(arrayBuffer).buffer; - arrayBufferMap[uuid] = ab; - return ab; - } - - const geometry = json.isInstancedBufferGeometry ? new InstancedBufferGeometry() : new BufferGeometry(); - const index = json.data.index; - - if (index !== undefined) { - const typedArray = getTypedArray(index.type, index.array); - geometry.setIndex(new BufferAttribute(typedArray, 1)); - } - - const attributes = json.data.attributes; - - for (const key in attributes) { - const attribute = attributes[key]; - let bufferAttribute; - - if (attribute.isInterleavedBufferAttribute) { - const interleavedBuffer = getInterleavedBuffer(json.data, attribute.data); - bufferAttribute = new InterleavedBufferAttribute(interleavedBuffer, attribute.itemSize, attribute.offset, attribute.normalized); - } else { - const typedArray = getTypedArray(attribute.type, attribute.array); - const bufferAttributeConstr = attribute.isInstancedBufferAttribute ? InstancedBufferAttribute : BufferAttribute; - bufferAttribute = new bufferAttributeConstr(typedArray, attribute.itemSize, attribute.normalized); - } - - if (attribute.name !== undefined) bufferAttribute.name = attribute.name; - if (attribute.usage !== undefined) bufferAttribute.setUsage(attribute.usage); - - if (attribute.updateRange !== undefined) { - bufferAttribute.updateRange.offset = attribute.updateRange.offset; - bufferAttribute.updateRange.count = attribute.updateRange.count; - } - - geometry.setAttribute(key, bufferAttribute); - } - - const morphAttributes = json.data.morphAttributes; - - if (morphAttributes) { - for (const key in morphAttributes) { - const attributeArray = morphAttributes[key]; - const array = []; - - for (let i = 0, il = attributeArray.length; i < il; i++) { - const attribute = attributeArray[i]; - let bufferAttribute; - - if (attribute.isInterleavedBufferAttribute) { - const interleavedBuffer = getInterleavedBuffer(json.data, attribute.data); - bufferAttribute = new InterleavedBufferAttribute(interleavedBuffer, attribute.itemSize, attribute.offset, attribute.normalized); - } else { - const typedArray = getTypedArray(attribute.type, attribute.array); - bufferAttribute = new BufferAttribute(typedArray, attribute.itemSize, attribute.normalized); - } - - if (attribute.name !== undefined) bufferAttribute.name = attribute.name; - array.push(bufferAttribute); - } - - geometry.morphAttributes[key] = array; - } - } - - const morphTargetsRelative = json.data.morphTargetsRelative; - - if (morphTargetsRelative) { - geometry.morphTargetsRelative = true; - } - - const groups = json.data.groups || json.data.drawcalls || json.data.offsets; - - if (groups !== undefined) { - for (let i = 0, n = groups.length; i !== n; ++i) { - const group = groups[i]; - geometry.addGroup(group.start, group.count, group.materialIndex); - } - } - - const boundingSphere = json.data.boundingSphere; - - if (boundingSphere !== undefined) { - const center = new Vector3(); - - if (boundingSphere.center !== undefined) { - center.fromArray(boundingSphere.center); - } - - geometry.boundingSphere = new Sphere(center, boundingSphere.radius); - } - - if (json.name) geometry.name = json.name; - if (json.userData) geometry.userData = json.userData; - return geometry; - } - - } - - class ObjectLoader extends Loader { - constructor(manager) { - super(manager); - } - - load(url, onLoad, onProgress, onError) { - const scope = this; - const path = this.path === '' ? LoaderUtils.extractUrlBase(url) : this.path; - this.resourcePath = this.resourcePath || path; - const loader = new FileLoader(this.manager); - loader.setPath(this.path); - loader.setRequestHeader(this.requestHeader); - loader.setWithCredentials(this.withCredentials); - loader.load(url, function (text) { - let json = null; - - try { - json = JSON.parse(text); - } catch (error) { - if (onError !== undefined) onError(error); - console.error('THREE:ObjectLoader: Can\'t parse ' + url + '.', error.message); - return; - } - - const metadata = json.metadata; - - if (metadata === undefined || metadata.type === undefined || metadata.type.toLowerCase() === 'geometry') { - console.error('THREE.ObjectLoader: Can\'t load ' + url); - return; - } - - scope.parse(json, onLoad); - }, onProgress, onError); - } - - async loadAsync(url, onProgress) { - const scope = this; - const path = this.path === '' ? LoaderUtils.extractUrlBase(url) : this.path; - this.resourcePath = this.resourcePath || path; - const loader = new FileLoader(this.manager); - loader.setPath(this.path); - loader.setRequestHeader(this.requestHeader); - loader.setWithCredentials(this.withCredentials); - const text = await loader.loadAsync(url, onProgress); - const json = JSON.parse(text); - const metadata = json.metadata; - - if (metadata === undefined || metadata.type === undefined || metadata.type.toLowerCase() === 'geometry') { - throw new Error('THREE.ObjectLoader: Can\'t load ' + url); - } - - return await scope.parseAsync(json); - } - - parse(json, onLoad) { - const animations = this.parseAnimations(json.animations); - const shapes = this.parseShapes(json.shapes); - const geometries = this.parseGeometries(json.geometries, shapes); - const images = this.parseImages(json.images, function () { - if (onLoad !== undefined) onLoad(object); - }); - const textures = this.parseTextures(json.textures, images); - const materials = this.parseMaterials(json.materials, textures); - const object = this.parseObject(json.object, geometries, materials, textures, animations); - const skeletons = this.parseSkeletons(json.skeletons, object); - this.bindSkeletons(object, skeletons); // - - if (onLoad !== undefined) { - let hasImages = false; - - for (const uuid in images) { - if (images[uuid] instanceof HTMLImageElement) { - hasImages = true; - break; - } - } - - if (hasImages === false) onLoad(object); - } - - return object; - } - - async parseAsync(json) { - const animations = this.parseAnimations(json.animations); - const shapes = this.parseShapes(json.shapes); - const geometries = this.parseGeometries(json.geometries, shapes); - const images = await this.parseImagesAsync(json.images); - const textures = this.parseTextures(json.textures, images); - const materials = this.parseMaterials(json.materials, textures); - const object = this.parseObject(json.object, geometries, materials, textures, animations); - const skeletons = this.parseSkeletons(json.skeletons, object); - this.bindSkeletons(object, skeletons); - return object; - } - - parseShapes(json) { - const shapes = {}; - - if (json !== undefined) { - for (let i = 0, l = json.length; i < l; i++) { - const shape = new Shape().fromJSON(json[i]); - shapes[shape.uuid] = shape; - } - } - - return shapes; - } - - parseSkeletons(json, object) { - const skeletons = {}; - const bones = {}; // generate bone lookup table - - object.traverse(function (child) { - if (child.isBone) bones[child.uuid] = child; - }); // create skeletons - - if (json !== undefined) { - for (let i = 0, l = json.length; i < l; i++) { - const skeleton = new Skeleton().fromJSON(json[i], bones); - skeletons[skeleton.uuid] = skeleton; - } - } - - return skeletons; - } - - parseGeometries(json, shapes) { - const geometries = {}; - - if (json !== undefined) { - const bufferGeometryLoader = new BufferGeometryLoader(); - - for (let i = 0, l = json.length; i < l; i++) { - let geometry; - const data = json[i]; - - switch (data.type) { - case 'BufferGeometry': - case 'InstancedBufferGeometry': - geometry = bufferGeometryLoader.parse(data); - break; - - case 'Geometry': - console.error('THREE.ObjectLoader: The legacy Geometry type is no longer supported.'); - break; - - default: - if (data.type in Geometries) { - geometry = Geometries[data.type].fromJSON(data, shapes); - } else { - console.warn(`THREE.ObjectLoader: Unsupported geometry type "${data.type}"`); - } - - } - - geometry.uuid = data.uuid; - if (data.name !== undefined) geometry.name = data.name; - if (geometry.isBufferGeometry === true && data.userData !== undefined) geometry.userData = data.userData; - geometries[data.uuid] = geometry; - } - } - - return geometries; - } - - parseMaterials(json, textures) { - const cache = {}; // MultiMaterial - - const materials = {}; - - if (json !== undefined) { - const loader = new MaterialLoader(); - loader.setTextures(textures); - - for (let i = 0, l = json.length; i < l; i++) { - const data = json[i]; - - if (data.type === 'MultiMaterial') { - // Deprecated - const array = []; - - for (let j = 0; j < data.materials.length; j++) { - const material = data.materials[j]; - - if (cache[material.uuid] === undefined) { - cache[material.uuid] = loader.parse(material); - } - - array.push(cache[material.uuid]); - } - - materials[data.uuid] = array; - } else { - if (cache[data.uuid] === undefined) { - cache[data.uuid] = loader.parse(data); - } - - materials[data.uuid] = cache[data.uuid]; - } - } - } - - return materials; - } - - parseAnimations(json) { - const animations = {}; - - if (json !== undefined) { - for (let i = 0; i < json.length; i++) { - const data = json[i]; - const clip = AnimationClip.parse(data); - animations[clip.uuid] = clip; - } - } - - return animations; - } - - parseImages(json, onLoad) { - const scope = this; - const images = {}; - let loader; - - function loadImage(url) { - scope.manager.itemStart(url); - return loader.load(url, function () { - scope.manager.itemEnd(url); - }, undefined, function () { - scope.manager.itemError(url); - scope.manager.itemEnd(url); - }); - } - - function deserializeImage(image) { - if (typeof image === 'string') { - const url = image; - const path = /^(\/\/)|([a-z]+:(\/\/)?)/i.test(url) ? url : scope.resourcePath + url; - return loadImage(path); - } else { - if (image.data) { - return { - data: getTypedArray(image.type, image.data), - width: image.width, - height: image.height - }; - } else { - return null; - } - } - } - - if (json !== undefined && json.length > 0) { - const manager = new LoadingManager(onLoad); - loader = new ImageLoader(manager); - loader.setCrossOrigin(this.crossOrigin); - - for (let i = 0, il = json.length; i < il; i++) { - const image = json[i]; - const url = image.url; - - if (Array.isArray(url)) { - // load array of images e.g CubeTexture - const imageArray = []; - - for (let j = 0, jl = url.length; j < jl; j++) { - const currentUrl = url[j]; - const deserializedImage = deserializeImage(currentUrl); - - if (deserializedImage !== null) { - if (deserializedImage instanceof HTMLImageElement) { - imageArray.push(deserializedImage); - } else { - // special case: handle array of data textures for cube textures - imageArray.push(new DataTexture(deserializedImage.data, deserializedImage.width, deserializedImage.height)); - } - } - } - - images[image.uuid] = new Source(imageArray); - } else { - // load single image - const deserializedImage = deserializeImage(image.url); - images[image.uuid] = new Source(deserializedImage); - } - } - } - - return images; - } - - async parseImagesAsync(json) { - const scope = this; - const images = {}; - let loader; - - async function deserializeImage(image) { - if (typeof image === 'string') { - const url = image; - const path = /^(\/\/)|([a-z]+:(\/\/)?)/i.test(url) ? url : scope.resourcePath + url; - return await loader.loadAsync(path); - } else { - if (image.data) { - return { - data: getTypedArray(image.type, image.data), - width: image.width, - height: image.height - }; - } else { - return null; - } - } - } - - if (json !== undefined && json.length > 0) { - loader = new ImageLoader(this.manager); - loader.setCrossOrigin(this.crossOrigin); - - for (let i = 0, il = json.length; i < il; i++) { - const image = json[i]; - const url = image.url; - - if (Array.isArray(url)) { - // load array of images e.g CubeTexture - const imageArray = []; - - for (let j = 0, jl = url.length; j < jl; j++) { - const currentUrl = url[j]; - const deserializedImage = await deserializeImage(currentUrl); - - if (deserializedImage !== null) { - if (deserializedImage instanceof HTMLImageElement) { - imageArray.push(deserializedImage); - } else { - // special case: handle array of data textures for cube textures - imageArray.push(new DataTexture(deserializedImage.data, deserializedImage.width, deserializedImage.height)); - } - } - } - - images[image.uuid] = new Source(imageArray); - } else { - // load single image - const deserializedImage = await deserializeImage(image.url); - images[image.uuid] = new Source(deserializedImage); - } - } - } - - return images; - } - - parseTextures(json, images) { - function parseConstant(value, type) { - if (typeof value === 'number') return value; - console.warn('THREE.ObjectLoader.parseTexture: Constant should be in numeric form.', value); - return type[value]; - } - - const textures = {}; - - if (json !== undefined) { - for (let i = 0, l = json.length; i < l; i++) { - const data = json[i]; - - if (data.image === undefined) { - console.warn('THREE.ObjectLoader: No "image" specified for', data.uuid); - } - - if (images[data.image] === undefined) { - console.warn('THREE.ObjectLoader: Undefined image', data.image); - } - - const source = images[data.image]; - const image = source.data; - let texture; - - if (Array.isArray(image)) { - texture = new CubeTexture(); - if (image.length === 6) texture.needsUpdate = true; - } else { - if (image && image.data) { - texture = new DataTexture(); - } else { - texture = new Texture(); - } - - if (image) texture.needsUpdate = true; // textures can have undefined image data - } - - texture.source = source; - texture.uuid = data.uuid; - if (data.name !== undefined) texture.name = data.name; - if (data.mapping !== undefined) texture.mapping = parseConstant(data.mapping, TEXTURE_MAPPING); - if (data.offset !== undefined) texture.offset.fromArray(data.offset); - if (data.repeat !== undefined) texture.repeat.fromArray(data.repeat); - if (data.center !== undefined) texture.center.fromArray(data.center); - if (data.rotation !== undefined) texture.rotation = data.rotation; - - if (data.wrap !== undefined) { - texture.wrapS = parseConstant(data.wrap[0], TEXTURE_WRAPPING); - texture.wrapT = parseConstant(data.wrap[1], TEXTURE_WRAPPING); - } - - if (data.format !== undefined) texture.format = data.format; - if (data.type !== undefined) texture.type = data.type; - if (data.encoding !== undefined) texture.encoding = data.encoding; - if (data.minFilter !== undefined) texture.minFilter = parseConstant(data.minFilter, TEXTURE_FILTER); - if (data.magFilter !== undefined) texture.magFilter = parseConstant(data.magFilter, TEXTURE_FILTER); - if (data.anisotropy !== undefined) texture.anisotropy = data.anisotropy; - if (data.flipY !== undefined) texture.flipY = data.flipY; - if (data.premultiplyAlpha !== undefined) texture.premultiplyAlpha = data.premultiplyAlpha; - if (data.unpackAlignment !== undefined) texture.unpackAlignment = data.unpackAlignment; - if (data.userData !== undefined) texture.userData = data.userData; - textures[data.uuid] = texture; - } - } - - return textures; - } - - parseObject(data, geometries, materials, textures, animations) { - let object; - - function getGeometry(name) { - if (geometries[name] === undefined) { - console.warn('THREE.ObjectLoader: Undefined geometry', name); - } - - return geometries[name]; - } - - function getMaterial(name) { - if (name === undefined) return undefined; - - if (Array.isArray(name)) { - const array = []; - - for (let i = 0, l = name.length; i < l; i++) { - const uuid = name[i]; - - if (materials[uuid] === undefined) { - console.warn('THREE.ObjectLoader: Undefined material', uuid); - } - - array.push(materials[uuid]); - } - - return array; - } - - if (materials[name] === undefined) { - console.warn('THREE.ObjectLoader: Undefined material', name); - } - - return materials[name]; - } - - function getTexture(uuid) { - if (textures[uuid] === undefined) { - console.warn('THREE.ObjectLoader: Undefined texture', uuid); - } - - return textures[uuid]; - } - - let geometry, material; - - switch (data.type) { - case 'Scene': - object = new Scene(); - - if (data.background !== undefined) { - if (Number.isInteger(data.background)) { - object.background = new Color(data.background); - } else { - object.background = getTexture(data.background); - } - } - - if (data.environment !== undefined) { - object.environment = getTexture(data.environment); - } - - if (data.fog !== undefined) { - if (data.fog.type === 'Fog') { - object.fog = new Fog(data.fog.color, data.fog.near, data.fog.far); - } else if (data.fog.type === 'FogExp2') { - object.fog = new FogExp2(data.fog.color, data.fog.density); - } - } - - break; - - case 'PerspectiveCamera': - object = new PerspectiveCamera(data.fov, data.aspect, data.near, data.far); - if (data.focus !== undefined) object.focus = data.focus; - if (data.zoom !== undefined) object.zoom = data.zoom; - if (data.filmGauge !== undefined) object.filmGauge = data.filmGauge; - if (data.filmOffset !== undefined) object.filmOffset = data.filmOffset; - if (data.view !== undefined) object.view = Object.assign({}, data.view); - break; - - case 'OrthographicCamera': - object = new OrthographicCamera(data.left, data.right, data.top, data.bottom, data.near, data.far); - if (data.zoom !== undefined) object.zoom = data.zoom; - if (data.view !== undefined) object.view = Object.assign({}, data.view); - break; - - case 'AmbientLight': - object = new AmbientLight(data.color, data.intensity); - break; - - case 'DirectionalLight': - object = new DirectionalLight(data.color, data.intensity); - break; - - case 'PointLight': - object = new PointLight(data.color, data.intensity, data.distance, data.decay); - break; - - case 'RectAreaLight': - object = new RectAreaLight(data.color, data.intensity, data.width, data.height); - break; - - case 'SpotLight': - object = new SpotLight(data.color, data.intensity, data.distance, data.angle, data.penumbra, data.decay); - break; - - case 'HemisphereLight': - object = new HemisphereLight(data.color, data.groundColor, data.intensity); - break; - - case 'LightProbe': - object = new LightProbe().fromJSON(data); - break; - - case 'SkinnedMesh': - geometry = getGeometry(data.geometry); - material = getMaterial(data.material); - object = new SkinnedMesh(geometry, material); - if (data.bindMode !== undefined) object.bindMode = data.bindMode; - if (data.bindMatrix !== undefined) object.bindMatrix.fromArray(data.bindMatrix); - if (data.skeleton !== undefined) object.skeleton = data.skeleton; - break; - - case 'Mesh': - geometry = getGeometry(data.geometry); - material = getMaterial(data.material); - object = new Mesh(geometry, material); - break; - - case 'InstancedMesh': - geometry = getGeometry(data.geometry); - material = getMaterial(data.material); - const count = data.count; - const instanceMatrix = data.instanceMatrix; - const instanceColor = data.instanceColor; - object = new InstancedMesh(geometry, material, count); - object.instanceMatrix = new InstancedBufferAttribute(new Float32Array(instanceMatrix.array), 16); - if (instanceColor !== undefined) object.instanceColor = new InstancedBufferAttribute(new Float32Array(instanceColor.array), instanceColor.itemSize); - break; - - case 'LOD': - object = new LOD(); - break; - - case 'Line': - object = new Line(getGeometry(data.geometry), getMaterial(data.material)); - break; - - case 'LineLoop': - object = new LineLoop(getGeometry(data.geometry), getMaterial(data.material)); - break; - - case 'LineSegments': - object = new LineSegments(getGeometry(data.geometry), getMaterial(data.material)); - break; - - case 'PointCloud': - case 'Points': - object = new Points(getGeometry(data.geometry), getMaterial(data.material)); - break; - - case 'Sprite': - object = new Sprite(getMaterial(data.material)); - break; - - case 'Group': - object = new Group(); - break; - - case 'Bone': - object = new Bone(); - break; - - default: - object = new Object3D(); - } - - object.uuid = data.uuid; - if (data.name !== undefined) object.name = data.name; - - if (data.matrix !== undefined) { - object.matrix.fromArray(data.matrix); - if (data.matrixAutoUpdate !== undefined) object.matrixAutoUpdate = data.matrixAutoUpdate; - if (object.matrixAutoUpdate) object.matrix.decompose(object.position, object.quaternion, object.scale); - } else { - if (data.position !== undefined) object.position.fromArray(data.position); - if (data.rotation !== undefined) object.rotation.fromArray(data.rotation); - if (data.quaternion !== undefined) object.quaternion.fromArray(data.quaternion); - if (data.scale !== undefined) object.scale.fromArray(data.scale); - } - - if (data.castShadow !== undefined) object.castShadow = data.castShadow; - if (data.receiveShadow !== undefined) object.receiveShadow = data.receiveShadow; - - if (data.shadow) { - if (data.shadow.bias !== undefined) object.shadow.bias = data.shadow.bias; - if (data.shadow.normalBias !== undefined) object.shadow.normalBias = data.shadow.normalBias; - if (data.shadow.radius !== undefined) object.shadow.radius = data.shadow.radius; - if (data.shadow.mapSize !== undefined) object.shadow.mapSize.fromArray(data.shadow.mapSize); - if (data.shadow.camera !== undefined) object.shadow.camera = this.parseObject(data.shadow.camera); - } - - if (data.visible !== undefined) object.visible = data.visible; - if (data.frustumCulled !== undefined) object.frustumCulled = data.frustumCulled; - if (data.renderOrder !== undefined) object.renderOrder = data.renderOrder; - if (data.userData !== undefined) object.userData = data.userData; - if (data.layers !== undefined) object.layers.mask = data.layers; - - if (data.children !== undefined) { - const children = data.children; - - for (let i = 0; i < children.length; i++) { - object.add(this.parseObject(children[i], geometries, materials, textures, animations)); - } - } - - if (data.animations !== undefined) { - const objectAnimations = data.animations; - - for (let i = 0; i < objectAnimations.length; i++) { - const uuid = objectAnimations[i]; - object.animations.push(animations[uuid]); - } - } - - if (data.type === 'LOD') { - if (data.autoUpdate !== undefined) object.autoUpdate = data.autoUpdate; - const levels = data.levels; - - for (let l = 0; l < levels.length; l++) { - const level = levels[l]; - const child = object.getObjectByProperty('uuid', level.object); - - if (child !== undefined) { - object.addLevel(child, level.distance); - } - } - } - - return object; - } - - bindSkeletons(object, skeletons) { - if (Object.keys(skeletons).length === 0) return; - object.traverse(function (child) { - if (child.isSkinnedMesh === true && child.skeleton !== undefined) { - const skeleton = skeletons[child.skeleton]; - - if (skeleton === undefined) { - console.warn('THREE.ObjectLoader: No skeleton found with UUID:', child.skeleton); - } else { - child.bind(skeleton, child.bindMatrix); - } - } - }); - } - /* DEPRECATED */ - - - setTexturePath(value) { - console.warn('THREE.ObjectLoader: .setTexturePath() has been renamed to .setResourcePath().'); - return this.setResourcePath(value); - } - - } - - const TEXTURE_MAPPING = { - UVMapping: UVMapping, - CubeReflectionMapping: CubeReflectionMapping, - CubeRefractionMapping: CubeRefractionMapping, - EquirectangularReflectionMapping: EquirectangularReflectionMapping, - EquirectangularRefractionMapping: EquirectangularRefractionMapping, - CubeUVReflectionMapping: CubeUVReflectionMapping - }; - const TEXTURE_WRAPPING = { - RepeatWrapping: RepeatWrapping, - ClampToEdgeWrapping: ClampToEdgeWrapping, - MirroredRepeatWrapping: MirroredRepeatWrapping - }; - const TEXTURE_FILTER = { - NearestFilter: NearestFilter, - NearestMipmapNearestFilter: NearestMipmapNearestFilter, - NearestMipmapLinearFilter: NearestMipmapLinearFilter, - LinearFilter: LinearFilter, - LinearMipmapNearestFilter: LinearMipmapNearestFilter, - LinearMipmapLinearFilter: LinearMipmapLinearFilter - }; - - class ImageBitmapLoader extends Loader { - constructor(manager) { - super(manager); - - if (typeof createImageBitmap === 'undefined') { - console.warn('THREE.ImageBitmapLoader: createImageBitmap() not supported.'); - } - - if (typeof fetch === 'undefined') { - console.warn('THREE.ImageBitmapLoader: fetch() not supported.'); - } - - this.options = { - premultiplyAlpha: 'none' - }; - } - - setOptions(options) { - this.options = options; - return this; - } - - load(url, onLoad, onProgress, onError) { - if (url === undefined) url = ''; - if (this.path !== undefined) url = this.path + url; - url = this.manager.resolveURL(url); - const scope = this; - const cached = Cache.get(url); - - if (cached !== undefined) { - scope.manager.itemStart(url); - setTimeout(function () { - if (onLoad) onLoad(cached); - scope.manager.itemEnd(url); - }, 0); - return cached; - } - - const fetchOptions = {}; - fetchOptions.credentials = this.crossOrigin === 'anonymous' ? 'same-origin' : 'include'; - fetchOptions.headers = this.requestHeader; - fetch(url, fetchOptions).then(function (res) { - return res.blob(); - }).then(function (blob) { - return createImageBitmap(blob, Object.assign(scope.options, { - colorSpaceConversion: 'none' - })); - }).then(function (imageBitmap) { - Cache.add(url, imageBitmap); - if (onLoad) onLoad(imageBitmap); - scope.manager.itemEnd(url); - }).catch(function (e) { - if (onError) onError(e); - scope.manager.itemError(url); - scope.manager.itemEnd(url); - }); - scope.manager.itemStart(url); - } - - } - - ImageBitmapLoader.prototype.isImageBitmapLoader = true; - - let _context; - - const AudioContext = { - getContext: function () { - if (_context === undefined) { - _context = new (window.AudioContext || window.webkitAudioContext)(); - } - - return _context; - }, - setContext: function (value) { - _context = value; - } - }; - - class AudioLoader extends Loader { - constructor(manager) { - super(manager); - } - - load(url, onLoad, onProgress, onError) { - const scope = this; - const loader = new FileLoader(this.manager); - loader.setResponseType('arraybuffer'); - loader.setPath(this.path); - loader.setRequestHeader(this.requestHeader); - loader.setWithCredentials(this.withCredentials); - loader.load(url, function (buffer) { - try { - // Create a copy of the buffer. The `decodeAudioData` method - // detaches the buffer when complete, preventing reuse. - const bufferCopy = buffer.slice(0); - const context = AudioContext.getContext(); - context.decodeAudioData(bufferCopy, function (audioBuffer) { - onLoad(audioBuffer); - }); - } catch (e) { - if (onError) { - onError(e); - } else { - console.error(e); - } - - scope.manager.itemError(url); - } - }, onProgress, onError); - } - - } - - class HemisphereLightProbe extends LightProbe { - constructor(skyColor, groundColor, intensity = 1) { - super(undefined, intensity); - const color1 = new Color().set(skyColor); - const color2 = new Color().set(groundColor); - const sky = new Vector3(color1.r, color1.g, color1.b); - const ground = new Vector3(color2.r, color2.g, color2.b); // without extra factor of PI in the shader, should = 1 / Math.sqrt( Math.PI ); - - const c0 = Math.sqrt(Math.PI); - const c1 = c0 * Math.sqrt(0.75); - this.sh.coefficients[0].copy(sky).add(ground).multiplyScalar(c0); - this.sh.coefficients[1].copy(sky).sub(ground).multiplyScalar(c1); - } - - } - - HemisphereLightProbe.prototype.isHemisphereLightProbe = true; - - class AmbientLightProbe extends LightProbe { - constructor(color, intensity = 1) { - super(undefined, intensity); - const color1 = new Color().set(color); // without extra factor of PI in the shader, would be 2 / Math.sqrt( Math.PI ); - - this.sh.coefficients[0].set(color1.r, color1.g, color1.b).multiplyScalar(2 * Math.sqrt(Math.PI)); - } - - } - - AmbientLightProbe.prototype.isAmbientLightProbe = true; - - const _eyeRight = /*@__PURE__*/new Matrix4(); - - const _eyeLeft = /*@__PURE__*/new Matrix4(); - - const _projectionMatrix = /*@__PURE__*/new Matrix4(); - - class StereoCamera { - constructor() { - this.type = 'StereoCamera'; - this.aspect = 1; - this.eyeSep = 0.064; - this.cameraL = new PerspectiveCamera(); - this.cameraL.layers.enable(1); - this.cameraL.matrixAutoUpdate = false; - this.cameraR = new PerspectiveCamera(); - this.cameraR.layers.enable(2); - this.cameraR.matrixAutoUpdate = false; - this._cache = { - focus: null, - fov: null, - aspect: null, - near: null, - far: null, - zoom: null, - eyeSep: null - }; - } - - update(camera) { - const cache = this._cache; - const needsUpdate = cache.focus !== camera.focus || cache.fov !== camera.fov || cache.aspect !== camera.aspect * this.aspect || cache.near !== camera.near || cache.far !== camera.far || cache.zoom !== camera.zoom || cache.eyeSep !== this.eyeSep; - - if (needsUpdate) { - cache.focus = camera.focus; - cache.fov = camera.fov; - cache.aspect = camera.aspect * this.aspect; - cache.near = camera.near; - cache.far = camera.far; - cache.zoom = camera.zoom; - cache.eyeSep = this.eyeSep; // Off-axis stereoscopic effect based on - // http://paulbourke.net/stereographics/stereorender/ - - _projectionMatrix.copy(camera.projectionMatrix); - - const eyeSepHalf = cache.eyeSep / 2; - const eyeSepOnProjection = eyeSepHalf * cache.near / cache.focus; - const ymax = cache.near * Math.tan(DEG2RAD * cache.fov * 0.5) / cache.zoom; - let xmin, xmax; // translate xOffset - - _eyeLeft.elements[12] = -eyeSepHalf; - _eyeRight.elements[12] = eyeSepHalf; // for left eye - - xmin = -ymax * cache.aspect + eyeSepOnProjection; - xmax = ymax * cache.aspect + eyeSepOnProjection; - _projectionMatrix.elements[0] = 2 * cache.near / (xmax - xmin); - _projectionMatrix.elements[8] = (xmax + xmin) / (xmax - xmin); - this.cameraL.projectionMatrix.copy(_projectionMatrix); // for right eye - - xmin = -ymax * cache.aspect - eyeSepOnProjection; - xmax = ymax * cache.aspect - eyeSepOnProjection; - _projectionMatrix.elements[0] = 2 * cache.near / (xmax - xmin); - _projectionMatrix.elements[8] = (xmax + xmin) / (xmax - xmin); - this.cameraR.projectionMatrix.copy(_projectionMatrix); - } - - this.cameraL.matrixWorld.copy(camera.matrixWorld).multiply(_eyeLeft); - this.cameraR.matrixWorld.copy(camera.matrixWorld).multiply(_eyeRight); - } - - } - - class Clock { - constructor(autoStart = true) { - this.autoStart = autoStart; - this.startTime = 0; - this.oldTime = 0; - this.elapsedTime = 0; - this.running = false; - } - - start() { - this.startTime = now(); - this.oldTime = this.startTime; - this.elapsedTime = 0; - this.running = true; - } - - stop() { - this.getElapsedTime(); - this.running = false; - this.autoStart = false; - } - - getElapsedTime() { - this.getDelta(); - return this.elapsedTime; - } - - getDelta() { - let diff = 0; - - if (this.autoStart && !this.running) { - this.start(); - return 0; - } - - if (this.running) { - const newTime = now(); - diff = (newTime - this.oldTime) / 1000; - this.oldTime = newTime; - this.elapsedTime += diff; - } - - return diff; - } - - } - - function now() { - return (typeof performance === 'undefined' ? Date : performance).now(); // see #10732 - } - - const _position$1 = /*@__PURE__*/new Vector3(); - - const _quaternion$1 = /*@__PURE__*/new Quaternion(); - - const _scale$1 = /*@__PURE__*/new Vector3(); - - const _orientation$1 = /*@__PURE__*/new Vector3(); - - class AudioListener extends Object3D { - constructor() { - super(); - this.type = 'AudioListener'; - this.context = AudioContext.getContext(); - this.gain = this.context.createGain(); - this.gain.connect(this.context.destination); - this.filter = null; - this.timeDelta = 0; // private - - this._clock = new Clock(); - } - - getInput() { - return this.gain; - } - - removeFilter() { - if (this.filter !== null) { - this.gain.disconnect(this.filter); - this.filter.disconnect(this.context.destination); - this.gain.connect(this.context.destination); - this.filter = null; - } - - return this; - } - - getFilter() { - return this.filter; - } - - setFilter(value) { - if (this.filter !== null) { - this.gain.disconnect(this.filter); - this.filter.disconnect(this.context.destination); - } else { - this.gain.disconnect(this.context.destination); - } - - this.filter = value; - this.gain.connect(this.filter); - this.filter.connect(this.context.destination); - return this; - } - - getMasterVolume() { - return this.gain.gain.value; - } - - setMasterVolume(value) { - this.gain.gain.setTargetAtTime(value, this.context.currentTime, 0.01); - return this; - } - - updateMatrixWorld(force) { - super.updateMatrixWorld(force); - const listener = this.context.listener; - const up = this.up; - this.timeDelta = this._clock.getDelta(); - this.matrixWorld.decompose(_position$1, _quaternion$1, _scale$1); - - _orientation$1.set(0, 0, -1).applyQuaternion(_quaternion$1); - - if (listener.positionX) { - // code path for Chrome (see #14393) - const endTime = this.context.currentTime + this.timeDelta; - listener.positionX.linearRampToValueAtTime(_position$1.x, endTime); - listener.positionY.linearRampToValueAtTime(_position$1.y, endTime); - listener.positionZ.linearRampToValueAtTime(_position$1.z, endTime); - listener.forwardX.linearRampToValueAtTime(_orientation$1.x, endTime); - listener.forwardY.linearRampToValueAtTime(_orientation$1.y, endTime); - listener.forwardZ.linearRampToValueAtTime(_orientation$1.z, endTime); - listener.upX.linearRampToValueAtTime(up.x, endTime); - listener.upY.linearRampToValueAtTime(up.y, endTime); - listener.upZ.linearRampToValueAtTime(up.z, endTime); - } else { - listener.setPosition(_position$1.x, _position$1.y, _position$1.z); - listener.setOrientation(_orientation$1.x, _orientation$1.y, _orientation$1.z, up.x, up.y, up.z); - } - } - - } - - class Audio extends Object3D { - constructor(listener) { - super(); - this.type = 'Audio'; - this.listener = listener; - this.context = listener.context; - this.gain = this.context.createGain(); - this.gain.connect(listener.getInput()); - this.autoplay = false; - this.buffer = null; - this.detune = 0; - this.loop = false; - this.loopStart = 0; - this.loopEnd = 0; - this.offset = 0; - this.duration = undefined; - this.playbackRate = 1; - this.isPlaying = false; - this.hasPlaybackControl = true; - this.source = null; - this.sourceType = 'empty'; - this._startedAt = 0; - this._progress = 0; - this._connected = false; - this.filters = []; - } - - getOutput() { - return this.gain; - } - - setNodeSource(audioNode) { - this.hasPlaybackControl = false; - this.sourceType = 'audioNode'; - this.source = audioNode; - this.connect(); - return this; - } - - setMediaElementSource(mediaElement) { - this.hasPlaybackControl = false; - this.sourceType = 'mediaNode'; - this.source = this.context.createMediaElementSource(mediaElement); - this.connect(); - return this; - } - - setMediaStreamSource(mediaStream) { - this.hasPlaybackControl = false; - this.sourceType = 'mediaStreamNode'; - this.source = this.context.createMediaStreamSource(mediaStream); - this.connect(); - return this; - } - - setBuffer(audioBuffer) { - this.buffer = audioBuffer; - this.sourceType = 'buffer'; - if (this.autoplay) this.play(); - return this; - } - - play(delay = 0) { - if (this.isPlaying === true) { - console.warn('THREE.Audio: Audio is already playing.'); - return; - } - - if (this.hasPlaybackControl === false) { - console.warn('THREE.Audio: this Audio has no playback control.'); - return; - } - - this._startedAt = this.context.currentTime + delay; - const source = this.context.createBufferSource(); - source.buffer = this.buffer; - source.loop = this.loop; - source.loopStart = this.loopStart; - source.loopEnd = this.loopEnd; - source.onended = this.onEnded.bind(this); - source.start(this._startedAt, this._progress + this.offset, this.duration); - this.isPlaying = true; - this.source = source; - this.setDetune(this.detune); - this.setPlaybackRate(this.playbackRate); - return this.connect(); - } - - pause() { - if (this.hasPlaybackControl === false) { - console.warn('THREE.Audio: this Audio has no playback control.'); - return; - } - - if (this.isPlaying === true) { - // update current progress - this._progress += Math.max(this.context.currentTime - this._startedAt, 0) * this.playbackRate; - - if (this.loop === true) { - // ensure _progress does not exceed duration with looped audios - this._progress = this._progress % (this.duration || this.buffer.duration); - } - - this.source.stop(); - this.source.onended = null; - this.isPlaying = false; - } - - return this; - } - - stop() { - if (this.hasPlaybackControl === false) { - console.warn('THREE.Audio: this Audio has no playback control.'); - return; - } - - this._progress = 0; - this.source.stop(); - this.source.onended = null; - this.isPlaying = false; - return this; - } - - connect() { - if (this.filters.length > 0) { - this.source.connect(this.filters[0]); - - for (let i = 1, l = this.filters.length; i < l; i++) { - this.filters[i - 1].connect(this.filters[i]); - } - - this.filters[this.filters.length - 1].connect(this.getOutput()); - } else { - this.source.connect(this.getOutput()); - } - - this._connected = true; - return this; - } - - disconnect() { - if (this.filters.length > 0) { - this.source.disconnect(this.filters[0]); - - for (let i = 1, l = this.filters.length; i < l; i++) { - this.filters[i - 1].disconnect(this.filters[i]); - } - - this.filters[this.filters.length - 1].disconnect(this.getOutput()); - } else { - this.source.disconnect(this.getOutput()); - } - - this._connected = false; - return this; - } - - getFilters() { - return this.filters; - } - - setFilters(value) { - if (!value) value = []; - - if (this._connected === true) { - this.disconnect(); - this.filters = value.slice(); - this.connect(); - } else { - this.filters = value.slice(); - } - - return this; - } - - setDetune(value) { - this.detune = value; - if (this.source.detune === undefined) return; // only set detune when available - - if (this.isPlaying === true) { - this.source.detune.setTargetAtTime(this.detune, this.context.currentTime, 0.01); - } - - return this; - } - - getDetune() { - return this.detune; - } - - getFilter() { - return this.getFilters()[0]; - } - - setFilter(filter) { - return this.setFilters(filter ? [filter] : []); - } - - setPlaybackRate(value) { - if (this.hasPlaybackControl === false) { - console.warn('THREE.Audio: this Audio has no playback control.'); - return; - } - - this.playbackRate = value; - - if (this.isPlaying === true) { - this.source.playbackRate.setTargetAtTime(this.playbackRate, this.context.currentTime, 0.01); - } - - return this; - } - - getPlaybackRate() { - return this.playbackRate; - } - - onEnded() { - this.isPlaying = false; - } - - getLoop() { - if (this.hasPlaybackControl === false) { - console.warn('THREE.Audio: this Audio has no playback control.'); - return false; - } - - return this.loop; - } - - setLoop(value) { - if (this.hasPlaybackControl === false) { - console.warn('THREE.Audio: this Audio has no playback control.'); - return; - } - - this.loop = value; - - if (this.isPlaying === true) { - this.source.loop = this.loop; - } - - return this; - } - - setLoopStart(value) { - this.loopStart = value; - return this; - } - - setLoopEnd(value) { - this.loopEnd = value; - return this; - } - - getVolume() { - return this.gain.gain.value; - } - - setVolume(value) { - this.gain.gain.setTargetAtTime(value, this.context.currentTime, 0.01); - return this; - } - - } - - const _position = /*@__PURE__*/new Vector3(); - - const _quaternion = /*@__PURE__*/new Quaternion(); - - const _scale = /*@__PURE__*/new Vector3(); - - const _orientation = /*@__PURE__*/new Vector3(); - - class PositionalAudio extends Audio { - constructor(listener) { - super(listener); - this.panner = this.context.createPanner(); - this.panner.panningModel = 'HRTF'; - this.panner.connect(this.gain); - } - - disconnect() { - super.disconnect(); - this.panner.disconnect(this.gain); - } - - getOutput() { - return this.panner; - } - - getRefDistance() { - return this.panner.refDistance; - } - - setRefDistance(value) { - this.panner.refDistance = value; - return this; - } - - getRolloffFactor() { - return this.panner.rolloffFactor; - } - - setRolloffFactor(value) { - this.panner.rolloffFactor = value; - return this; - } - - getDistanceModel() { - return this.panner.distanceModel; - } - - setDistanceModel(value) { - this.panner.distanceModel = value; - return this; - } - - getMaxDistance() { - return this.panner.maxDistance; - } - - setMaxDistance(value) { - this.panner.maxDistance = value; - return this; - } - - setDirectionalCone(coneInnerAngle, coneOuterAngle, coneOuterGain) { - this.panner.coneInnerAngle = coneInnerAngle; - this.panner.coneOuterAngle = coneOuterAngle; - this.panner.coneOuterGain = coneOuterGain; - return this; - } - - updateMatrixWorld(force) { - super.updateMatrixWorld(force); - if (this.hasPlaybackControl === true && this.isPlaying === false) return; - this.matrixWorld.decompose(_position, _quaternion, _scale); - - _orientation.set(0, 0, 1).applyQuaternion(_quaternion); - - const panner = this.panner; - - if (panner.positionX) { - // code path for Chrome and Firefox (see #14393) - const endTime = this.context.currentTime + this.listener.timeDelta; - panner.positionX.linearRampToValueAtTime(_position.x, endTime); - panner.positionY.linearRampToValueAtTime(_position.y, endTime); - panner.positionZ.linearRampToValueAtTime(_position.z, endTime); - panner.orientationX.linearRampToValueAtTime(_orientation.x, endTime); - panner.orientationY.linearRampToValueAtTime(_orientation.y, endTime); - panner.orientationZ.linearRampToValueAtTime(_orientation.z, endTime); - } else { - panner.setPosition(_position.x, _position.y, _position.z); - panner.setOrientation(_orientation.x, _orientation.y, _orientation.z); - } - } - - } - - class AudioAnalyser { - constructor(audio, fftSize = 2048) { - this.analyser = audio.context.createAnalyser(); - this.analyser.fftSize = fftSize; - this.data = new Uint8Array(this.analyser.frequencyBinCount); - audio.getOutput().connect(this.analyser); - } - - getFrequencyData() { - this.analyser.getByteFrequencyData(this.data); - return this.data; - } - - getAverageFrequency() { - let value = 0; - const data = this.getFrequencyData(); - - for (let i = 0; i < data.length; i++) { - value += data[i]; - } - - return value / data.length; - } - - } - - class PropertyMixer { - constructor(binding, typeName, valueSize) { - this.binding = binding; - this.valueSize = valueSize; - let mixFunction, mixFunctionAdditive, setIdentity; // buffer layout: [ incoming | accu0 | accu1 | orig | addAccu | (optional work) ] - // - // interpolators can use .buffer as their .result - // the data then goes to 'incoming' - // - // 'accu0' and 'accu1' are used frame-interleaved for - // the cumulative result and are compared to detect - // changes - // - // 'orig' stores the original state of the property - // - // 'add' is used for additive cumulative results - // - // 'work' is optional and is only present for quaternion types. It is used - // to store intermediate quaternion multiplication results - - switch (typeName) { - case 'quaternion': - mixFunction = this._slerp; - mixFunctionAdditive = this._slerpAdditive; - setIdentity = this._setAdditiveIdentityQuaternion; - this.buffer = new Float64Array(valueSize * 6); - this._workIndex = 5; - break; - - case 'string': - case 'bool': - mixFunction = this._select; // Use the regular mix function and for additive on these types, - // additive is not relevant for non-numeric types - - mixFunctionAdditive = this._select; - setIdentity = this._setAdditiveIdentityOther; - this.buffer = new Array(valueSize * 5); - break; - - default: - mixFunction = this._lerp; - mixFunctionAdditive = this._lerpAdditive; - setIdentity = this._setAdditiveIdentityNumeric; - this.buffer = new Float64Array(valueSize * 5); - } - - this._mixBufferRegion = mixFunction; - this._mixBufferRegionAdditive = mixFunctionAdditive; - this._setIdentity = setIdentity; - this._origIndex = 3; - this._addIndex = 4; - this.cumulativeWeight = 0; - this.cumulativeWeightAdditive = 0; - this.useCount = 0; - this.referenceCount = 0; - } // accumulate data in the 'incoming' region into 'accu' - - - accumulate(accuIndex, weight) { - // note: happily accumulating nothing when weight = 0, the caller knows - // the weight and shouldn't have made the call in the first place - const buffer = this.buffer, - stride = this.valueSize, - offset = accuIndex * stride + stride; - let currentWeight = this.cumulativeWeight; - - if (currentWeight === 0) { - // accuN := incoming * weight - for (let i = 0; i !== stride; ++i) { - buffer[offset + i] = buffer[i]; - } - - currentWeight = weight; - } else { - // accuN := accuN + incoming * weight - currentWeight += weight; - const mix = weight / currentWeight; - - this._mixBufferRegion(buffer, offset, 0, mix, stride); - } - - this.cumulativeWeight = currentWeight; - } // accumulate data in the 'incoming' region into 'add' - - - accumulateAdditive(weight) { - const buffer = this.buffer, - stride = this.valueSize, - offset = stride * this._addIndex; - - if (this.cumulativeWeightAdditive === 0) { - // add = identity - this._setIdentity(); - } // add := add + incoming * weight - - - this._mixBufferRegionAdditive(buffer, offset, 0, weight, stride); - - this.cumulativeWeightAdditive += weight; - } // apply the state of 'accu' to the binding when accus differ - - - apply(accuIndex) { - const stride = this.valueSize, - buffer = this.buffer, - offset = accuIndex * stride + stride, - weight = this.cumulativeWeight, - weightAdditive = this.cumulativeWeightAdditive, - binding = this.binding; - this.cumulativeWeight = 0; - this.cumulativeWeightAdditive = 0; - - if (weight < 1) { - // accuN := accuN + original * ( 1 - cumulativeWeight ) - const originalValueOffset = stride * this._origIndex; - - this._mixBufferRegion(buffer, offset, originalValueOffset, 1 - weight, stride); - } - - if (weightAdditive > 0) { - // accuN := accuN + additive accuN - this._mixBufferRegionAdditive(buffer, offset, this._addIndex * stride, 1, stride); - } - - for (let i = stride, e = stride + stride; i !== e; ++i) { - if (buffer[i] !== buffer[i + stride]) { - // value has changed -> update scene graph - binding.setValue(buffer, offset); - break; - } - } - } // remember the state of the bound property and copy it to both accus - - - saveOriginalState() { - const binding = this.binding; - const buffer = this.buffer, - stride = this.valueSize, - originalValueOffset = stride * this._origIndex; - binding.getValue(buffer, originalValueOffset); // accu[0..1] := orig -- initially detect changes against the original - - for (let i = stride, e = originalValueOffset; i !== e; ++i) { - buffer[i] = buffer[originalValueOffset + i % stride]; - } // Add to identity for additive - - - this._setIdentity(); - - this.cumulativeWeight = 0; - this.cumulativeWeightAdditive = 0; - } // apply the state previously taken via 'saveOriginalState' to the binding - - - restoreOriginalState() { - const originalValueOffset = this.valueSize * 3; - this.binding.setValue(this.buffer, originalValueOffset); - } - - _setAdditiveIdentityNumeric() { - const startIndex = this._addIndex * this.valueSize; - const endIndex = startIndex + this.valueSize; - - for (let i = startIndex; i < endIndex; i++) { - this.buffer[i] = 0; - } - } - - _setAdditiveIdentityQuaternion() { - this._setAdditiveIdentityNumeric(); - - this.buffer[this._addIndex * this.valueSize + 3] = 1; - } - - _setAdditiveIdentityOther() { - const startIndex = this._origIndex * this.valueSize; - const targetIndex = this._addIndex * this.valueSize; - - for (let i = 0; i < this.valueSize; i++) { - this.buffer[targetIndex + i] = this.buffer[startIndex + i]; - } - } // mix functions - - - _select(buffer, dstOffset, srcOffset, t, stride) { - if (t >= 0.5) { - for (let i = 0; i !== stride; ++i) { - buffer[dstOffset + i] = buffer[srcOffset + i]; - } - } - } - - _slerp(buffer, dstOffset, srcOffset, t) { - Quaternion.slerpFlat(buffer, dstOffset, buffer, dstOffset, buffer, srcOffset, t); - } - - _slerpAdditive(buffer, dstOffset, srcOffset, t, stride) { - const workOffset = this._workIndex * stride; // Store result in intermediate buffer offset - - Quaternion.multiplyQuaternionsFlat(buffer, workOffset, buffer, dstOffset, buffer, srcOffset); // Slerp to the intermediate result - - Quaternion.slerpFlat(buffer, dstOffset, buffer, dstOffset, buffer, workOffset, t); - } - - _lerp(buffer, dstOffset, srcOffset, t, stride) { - const s = 1 - t; - - for (let i = 0; i !== stride; ++i) { - const j = dstOffset + i; - buffer[j] = buffer[j] * s + buffer[srcOffset + i] * t; - } - } - - _lerpAdditive(buffer, dstOffset, srcOffset, t, stride) { - for (let i = 0; i !== stride; ++i) { - const j = dstOffset + i; - buffer[j] = buffer[j] + buffer[srcOffset + i] * t; - } - } - - } - - // Characters [].:/ are reserved for track binding syntax. - const _RESERVED_CHARS_RE = '\\[\\]\\.:\\/'; - - const _reservedRe = new RegExp('[' + _RESERVED_CHARS_RE + ']', 'g'); // Attempts to allow node names from any language. ES5's `\w` regexp matches - // only latin characters, and the unicode \p{L} is not yet supported. So - // instead, we exclude reserved characters and match everything else. - - - const _wordChar = '[^' + _RESERVED_CHARS_RE + ']'; - - const _wordCharOrDot = '[^' + _RESERVED_CHARS_RE.replace('\\.', '') + ']'; // Parent directories, delimited by '/' or ':'. Currently unused, but must - // be matched to parse the rest of the track name. - - - const _directoryRe = /((?:WC+[\/:])*)/.source.replace('WC', _wordChar); // Target node. May contain word characters (a-zA-Z0-9_) and '.' or '-'. - - - const _nodeRe = /(WCOD+)?/.source.replace('WCOD', _wordCharOrDot); // Object on target node, and accessor. May not contain reserved - // characters. Accessor may contain any character except closing bracket. - - - const _objectRe = /(?:\.(WC+)(?:\[(.+)\])?)?/.source.replace('WC', _wordChar); // Property and accessor. May not contain reserved characters. Accessor may - // contain any non-bracket characters. - - - const _propertyRe = /\.(WC+)(?:\[(.+)\])?/.source.replace('WC', _wordChar); - - const _trackRe = new RegExp('' + '^' + _directoryRe + _nodeRe + _objectRe + _propertyRe + '$'); - - const _supportedObjectNames = ['material', 'materials', 'bones']; - - class Composite { - constructor(targetGroup, path, optionalParsedPath) { - const parsedPath = optionalParsedPath || PropertyBinding.parseTrackName(path); - this._targetGroup = targetGroup; - this._bindings = targetGroup.subscribe_(path, parsedPath); - } - - getValue(array, offset) { - this.bind(); // bind all binding - - const firstValidIndex = this._targetGroup.nCachedObjects_, - binding = this._bindings[firstValidIndex]; // and only call .getValue on the first - - if (binding !== undefined) binding.getValue(array, offset); - } - - setValue(array, offset) { - const bindings = this._bindings; - - for (let i = this._targetGroup.nCachedObjects_, n = bindings.length; i !== n; ++i) { - bindings[i].setValue(array, offset); - } - } - - bind() { - const bindings = this._bindings; - - for (let i = this._targetGroup.nCachedObjects_, n = bindings.length; i !== n; ++i) { - bindings[i].bind(); - } - } - - unbind() { - const bindings = this._bindings; - - for (let i = this._targetGroup.nCachedObjects_, n = bindings.length; i !== n; ++i) { - bindings[i].unbind(); - } - } - - } // Note: This class uses a State pattern on a per-method basis: - // 'bind' sets 'this.getValue' / 'setValue' and shadows the - // prototype version of these methods with one that represents - // the bound state. When the property is not found, the methods - // become no-ops. - - - class PropertyBinding { - constructor(rootNode, path, parsedPath) { - this.path = path; - this.parsedPath = parsedPath || PropertyBinding.parseTrackName(path); - this.node = PropertyBinding.findNode(rootNode, this.parsedPath.nodeName) || rootNode; - this.rootNode = rootNode; // initial state of these methods that calls 'bind' - - this.getValue = this._getValue_unbound; - this.setValue = this._setValue_unbound; - } - - static create(root, path, parsedPath) { - if (!(root && root.isAnimationObjectGroup)) { - return new PropertyBinding(root, path, parsedPath); - } else { - return new PropertyBinding.Composite(root, path, parsedPath); - } - } - /** - * Replaces spaces with underscores and removes unsupported characters from - * node names, to ensure compatibility with parseTrackName(). - * - * @param {string} name Node name to be sanitized. - * @return {string} - */ - - - static sanitizeNodeName(name) { - return name.replace(/\s/g, '_').replace(_reservedRe, ''); - } - - static parseTrackName(trackName) { - const matches = _trackRe.exec(trackName); - - if (matches === null) { - throw new Error('PropertyBinding: Cannot parse trackName: ' + trackName); - } - - const results = { - // directoryName: matches[ 1 ], // (tschw) currently unused - nodeName: matches[2], - objectName: matches[3], - objectIndex: matches[4], - propertyName: matches[5], - // required - propertyIndex: matches[6] - }; - const lastDot = results.nodeName && results.nodeName.lastIndexOf('.'); - - if (lastDot !== undefined && lastDot !== -1) { - const objectName = results.nodeName.substring(lastDot + 1); // Object names must be checked against an allowlist. Otherwise, there - // is no way to parse 'foo.bar.baz': 'baz' must be a property, but - // 'bar' could be the objectName, or part of a nodeName (which can - // include '.' characters). - - if (_supportedObjectNames.indexOf(objectName) !== -1) { - results.nodeName = results.nodeName.substring(0, lastDot); - results.objectName = objectName; - } - } - - if (results.propertyName === null || results.propertyName.length === 0) { - throw new Error('PropertyBinding: can not parse propertyName from trackName: ' + trackName); - } - - return results; - } - - static findNode(root, nodeName) { - if (nodeName === undefined || nodeName === '' || nodeName === '.' || nodeName === -1 || nodeName === root.name || nodeName === root.uuid) { - return root; - } // search into skeleton bones. - - - if (root.skeleton) { - const bone = root.skeleton.getBoneByName(nodeName); - - if (bone !== undefined) { - return bone; - } - } // search into node subtree. - - - if (root.children) { - const searchNodeSubtree = function (children) { - for (let i = 0; i < children.length; i++) { - const childNode = children[i]; - - if (childNode.name === nodeName || childNode.uuid === nodeName) { - return childNode; - } - - const result = searchNodeSubtree(childNode.children); - if (result) return result; - } - - return null; - }; - - const subTreeNode = searchNodeSubtree(root.children); - - if (subTreeNode) { - return subTreeNode; - } - } - - return null; - } // these are used to "bind" a nonexistent property - - - _getValue_unavailable() {} - - _setValue_unavailable() {} // Getters - - - _getValue_direct(buffer, offset) { - buffer[offset] = this.targetObject[this.propertyName]; - } - - _getValue_array(buffer, offset) { - const source = this.resolvedProperty; - - for (let i = 0, n = source.length; i !== n; ++i) { - buffer[offset++] = source[i]; - } - } - - _getValue_arrayElement(buffer, offset) { - buffer[offset] = this.resolvedProperty[this.propertyIndex]; - } - - _getValue_toArray(buffer, offset) { - this.resolvedProperty.toArray(buffer, offset); - } // Direct - - - _setValue_direct(buffer, offset) { - this.targetObject[this.propertyName] = buffer[offset]; - } - - _setValue_direct_setNeedsUpdate(buffer, offset) { - this.targetObject[this.propertyName] = buffer[offset]; - this.targetObject.needsUpdate = true; - } - - _setValue_direct_setMatrixWorldNeedsUpdate(buffer, offset) { - this.targetObject[this.propertyName] = buffer[offset]; - this.targetObject.matrixWorldNeedsUpdate = true; - } // EntireArray - - - _setValue_array(buffer, offset) { - const dest = this.resolvedProperty; - - for (let i = 0, n = dest.length; i !== n; ++i) { - dest[i] = buffer[offset++]; - } - } - - _setValue_array_setNeedsUpdate(buffer, offset) { - const dest = this.resolvedProperty; - - for (let i = 0, n = dest.length; i !== n; ++i) { - dest[i] = buffer[offset++]; - } - - this.targetObject.needsUpdate = true; - } - - _setValue_array_setMatrixWorldNeedsUpdate(buffer, offset) { - const dest = this.resolvedProperty; - - for (let i = 0, n = dest.length; i !== n; ++i) { - dest[i] = buffer[offset++]; - } - - this.targetObject.matrixWorldNeedsUpdate = true; - } // ArrayElement - - - _setValue_arrayElement(buffer, offset) { - this.resolvedProperty[this.propertyIndex] = buffer[offset]; - } - - _setValue_arrayElement_setNeedsUpdate(buffer, offset) { - this.resolvedProperty[this.propertyIndex] = buffer[offset]; - this.targetObject.needsUpdate = true; - } - - _setValue_arrayElement_setMatrixWorldNeedsUpdate(buffer, offset) { - this.resolvedProperty[this.propertyIndex] = buffer[offset]; - this.targetObject.matrixWorldNeedsUpdate = true; - } // HasToFromArray - - - _setValue_fromArray(buffer, offset) { - this.resolvedProperty.fromArray(buffer, offset); - } - - _setValue_fromArray_setNeedsUpdate(buffer, offset) { - this.resolvedProperty.fromArray(buffer, offset); - this.targetObject.needsUpdate = true; - } - - _setValue_fromArray_setMatrixWorldNeedsUpdate(buffer, offset) { - this.resolvedProperty.fromArray(buffer, offset); - this.targetObject.matrixWorldNeedsUpdate = true; - } - - _getValue_unbound(targetArray, offset) { - this.bind(); - this.getValue(targetArray, offset); - } - - _setValue_unbound(sourceArray, offset) { - this.bind(); - this.setValue(sourceArray, offset); - } // create getter / setter pair for a property in the scene graph - - - bind() { - let targetObject = this.node; - const parsedPath = this.parsedPath; - const objectName = parsedPath.objectName; - const propertyName = parsedPath.propertyName; - let propertyIndex = parsedPath.propertyIndex; - - if (!targetObject) { - targetObject = PropertyBinding.findNode(this.rootNode, parsedPath.nodeName) || this.rootNode; - this.node = targetObject; - } // set fail state so we can just 'return' on error - - - this.getValue = this._getValue_unavailable; - this.setValue = this._setValue_unavailable; // ensure there is a value node - - if (!targetObject) { - console.error('THREE.PropertyBinding: Trying to update node for track: ' + this.path + ' but it wasn\'t found.'); - return; - } - - if (objectName) { - let objectIndex = parsedPath.objectIndex; // special cases were we need to reach deeper into the hierarchy to get the face materials.... - - switch (objectName) { - case 'materials': - if (!targetObject.material) { - console.error('THREE.PropertyBinding: Can not bind to material as node does not have a material.', this); - return; - } - - if (!targetObject.material.materials) { - console.error('THREE.PropertyBinding: Can not bind to material.materials as node.material does not have a materials array.', this); - return; - } - - targetObject = targetObject.material.materials; - break; - - case 'bones': - if (!targetObject.skeleton) { - console.error('THREE.PropertyBinding: Can not bind to bones as node does not have a skeleton.', this); - return; - } // potential future optimization: skip this if propertyIndex is already an integer - // and convert the integer string to a true integer. - - - targetObject = targetObject.skeleton.bones; // support resolving morphTarget names into indices. - - for (let i = 0; i < targetObject.length; i++) { - if (targetObject[i].name === objectIndex) { - objectIndex = i; - break; - } - } - - break; - - default: - if (targetObject[objectName] === undefined) { - console.error('THREE.PropertyBinding: Can not bind to objectName of node undefined.', this); - return; - } - - targetObject = targetObject[objectName]; - } - - if (objectIndex !== undefined) { - if (targetObject[objectIndex] === undefined) { - console.error('THREE.PropertyBinding: Trying to bind to objectIndex of objectName, but is undefined.', this, targetObject); - return; - } - - targetObject = targetObject[objectIndex]; - } - } // resolve property - - - const nodeProperty = targetObject[propertyName]; - - if (nodeProperty === undefined) { - const nodeName = parsedPath.nodeName; - console.error('THREE.PropertyBinding: Trying to update property for track: ' + nodeName + '.' + propertyName + ' but it wasn\'t found.', targetObject); - return; - } // determine versioning scheme - - - let versioning = this.Versioning.None; - this.targetObject = targetObject; - - if (targetObject.needsUpdate !== undefined) { - // material - versioning = this.Versioning.NeedsUpdate; - } else if (targetObject.matrixWorldNeedsUpdate !== undefined) { - // node transform - versioning = this.Versioning.MatrixWorldNeedsUpdate; - } // determine how the property gets bound - - - let bindingType = this.BindingType.Direct; - - if (propertyIndex !== undefined) { - // access a sub element of the property array (only primitives are supported right now) - if (propertyName === 'morphTargetInfluences') { - // potential optimization, skip this if propertyIndex is already an integer, and convert the integer string to a true integer. - // support resolving morphTarget names into indices. - if (!targetObject.geometry) { - console.error('THREE.PropertyBinding: Can not bind to morphTargetInfluences because node does not have a geometry.', this); - return; - } - - if (targetObject.geometry.isBufferGeometry) { - if (!targetObject.geometry.morphAttributes) { - console.error('THREE.PropertyBinding: Can not bind to morphTargetInfluences because node does not have a geometry.morphAttributes.', this); - return; - } - - if (targetObject.morphTargetDictionary[propertyIndex] !== undefined) { - propertyIndex = targetObject.morphTargetDictionary[propertyIndex]; - } - } else { - console.error('THREE.PropertyBinding: Can not bind to morphTargetInfluences on THREE.Geometry. Use THREE.BufferGeometry instead.', this); - return; - } - } - - bindingType = this.BindingType.ArrayElement; - this.resolvedProperty = nodeProperty; - this.propertyIndex = propertyIndex; - } else if (nodeProperty.fromArray !== undefined && nodeProperty.toArray !== undefined) { - // must use copy for Object3D.Euler/Quaternion - bindingType = this.BindingType.HasFromToArray; - this.resolvedProperty = nodeProperty; - } else if (Array.isArray(nodeProperty)) { - bindingType = this.BindingType.EntireArray; - this.resolvedProperty = nodeProperty; - } else { - this.propertyName = propertyName; - } // select getter / setter - - - this.getValue = this.GetterByBindingType[bindingType]; - this.setValue = this.SetterByBindingTypeAndVersioning[bindingType][versioning]; - } - - unbind() { - this.node = null; // back to the prototype version of getValue / setValue - // note: avoiding to mutate the shape of 'this' via 'delete' - - this.getValue = this._getValue_unbound; - this.setValue = this._setValue_unbound; - } - - } - - PropertyBinding.Composite = Composite; - PropertyBinding.prototype.BindingType = { - Direct: 0, - EntireArray: 1, - ArrayElement: 2, - HasFromToArray: 3 - }; - PropertyBinding.prototype.Versioning = { - None: 0, - NeedsUpdate: 1, - MatrixWorldNeedsUpdate: 2 - }; - PropertyBinding.prototype.GetterByBindingType = [PropertyBinding.prototype._getValue_direct, PropertyBinding.prototype._getValue_array, PropertyBinding.prototype._getValue_arrayElement, PropertyBinding.prototype._getValue_toArray]; - PropertyBinding.prototype.SetterByBindingTypeAndVersioning = [[// Direct - PropertyBinding.prototype._setValue_direct, PropertyBinding.prototype._setValue_direct_setNeedsUpdate, PropertyBinding.prototype._setValue_direct_setMatrixWorldNeedsUpdate], [// EntireArray - PropertyBinding.prototype._setValue_array, PropertyBinding.prototype._setValue_array_setNeedsUpdate, PropertyBinding.prototype._setValue_array_setMatrixWorldNeedsUpdate], [// ArrayElement - PropertyBinding.prototype._setValue_arrayElement, PropertyBinding.prototype._setValue_arrayElement_setNeedsUpdate, PropertyBinding.prototype._setValue_arrayElement_setMatrixWorldNeedsUpdate], [// HasToFromArray - PropertyBinding.prototype._setValue_fromArray, PropertyBinding.prototype._setValue_fromArray_setNeedsUpdate, PropertyBinding.prototype._setValue_fromArray_setMatrixWorldNeedsUpdate]]; - - /** - * - * A group of objects that receives a shared animation state. - * - * Usage: - * - * - Add objects you would otherwise pass as 'root' to the - * constructor or the .clipAction method of AnimationMixer. - * - * - Instead pass this object as 'root'. - * - * - You can also add and remove objects later when the mixer - * is running. - * - * Note: - * - * Objects of this class appear as one object to the mixer, - * so cache control of the individual objects must be done - * on the group. - * - * Limitation: - * - * - The animated properties must be compatible among the - * all objects in the group. - * - * - A single property can either be controlled through a - * target group or directly, but not both. - */ - - class AnimationObjectGroup { - constructor() { - this.uuid = generateUUID(); // cached objects followed by the active ones - - this._objects = Array.prototype.slice.call(arguments); - this.nCachedObjects_ = 0; // threshold - // note: read by PropertyBinding.Composite - - const indices = {}; - this._indicesByUUID = indices; // for bookkeeping - - for (let i = 0, n = arguments.length; i !== n; ++i) { - indices[arguments[i].uuid] = i; - } - - this._paths = []; // inside: string - - this._parsedPaths = []; // inside: { we don't care, here } - - this._bindings = []; // inside: Array< PropertyBinding > - - this._bindingsIndicesByPath = {}; // inside: indices in these arrays - - const scope = this; - this.stats = { - objects: { - get total() { - return scope._objects.length; - }, - - get inUse() { - return this.total - scope.nCachedObjects_; - } - - }, - - get bindingsPerObject() { - return scope._bindings.length; - } - - }; - } - - add() { - const objects = this._objects, - indicesByUUID = this._indicesByUUID, - paths = this._paths, - parsedPaths = this._parsedPaths, - bindings = this._bindings, - nBindings = bindings.length; - let knownObject = undefined, - nObjects = objects.length, - nCachedObjects = this.nCachedObjects_; - - for (let i = 0, n = arguments.length; i !== n; ++i) { - const object = arguments[i], - uuid = object.uuid; - let index = indicesByUUID[uuid]; - - if (index === undefined) { - // unknown object -> add it to the ACTIVE region - index = nObjects++; - indicesByUUID[uuid] = index; - objects.push(object); // accounting is done, now do the same for all bindings - - for (let j = 0, m = nBindings; j !== m; ++j) { - bindings[j].push(new PropertyBinding(object, paths[j], parsedPaths[j])); - } - } else if (index < nCachedObjects) { - knownObject = objects[index]; // move existing object to the ACTIVE region - - const firstActiveIndex = --nCachedObjects, - lastCachedObject = objects[firstActiveIndex]; - indicesByUUID[lastCachedObject.uuid] = index; - objects[index] = lastCachedObject; - indicesByUUID[uuid] = firstActiveIndex; - objects[firstActiveIndex] = object; // accounting is done, now do the same for all bindings - - for (let j = 0, m = nBindings; j !== m; ++j) { - const bindingsForPath = bindings[j], - lastCached = bindingsForPath[firstActiveIndex]; - let binding = bindingsForPath[index]; - bindingsForPath[index] = lastCached; - - if (binding === undefined) { - // since we do not bother to create new bindings - // for objects that are cached, the binding may - // or may not exist - binding = new PropertyBinding(object, paths[j], parsedPaths[j]); - } - - bindingsForPath[firstActiveIndex] = binding; - } - } else if (objects[index] !== knownObject) { - console.error('THREE.AnimationObjectGroup: Different objects with the same UUID ' + 'detected. Clean the caches or recreate your infrastructure when reloading scenes.'); - } // else the object is already where we want it to be - - } // for arguments - - - this.nCachedObjects_ = nCachedObjects; - } - - remove() { - const objects = this._objects, - indicesByUUID = this._indicesByUUID, - bindings = this._bindings, - nBindings = bindings.length; - let nCachedObjects = this.nCachedObjects_; - - for (let i = 0, n = arguments.length; i !== n; ++i) { - const object = arguments[i], - uuid = object.uuid, - index = indicesByUUID[uuid]; - - if (index !== undefined && index >= nCachedObjects) { - // move existing object into the CACHED region - const lastCachedIndex = nCachedObjects++, - firstActiveObject = objects[lastCachedIndex]; - indicesByUUID[firstActiveObject.uuid] = index; - objects[index] = firstActiveObject; - indicesByUUID[uuid] = lastCachedIndex; - objects[lastCachedIndex] = object; // accounting is done, now do the same for all bindings - - for (let j = 0, m = nBindings; j !== m; ++j) { - const bindingsForPath = bindings[j], - firstActive = bindingsForPath[lastCachedIndex], - binding = bindingsForPath[index]; - bindingsForPath[index] = firstActive; - bindingsForPath[lastCachedIndex] = binding; - } - } - } // for arguments - - - this.nCachedObjects_ = nCachedObjects; - } // remove & forget - - - uncache() { - const objects = this._objects, - indicesByUUID = this._indicesByUUID, - bindings = this._bindings, - nBindings = bindings.length; - let nCachedObjects = this.nCachedObjects_, - nObjects = objects.length; - - for (let i = 0, n = arguments.length; i !== n; ++i) { - const object = arguments[i], - uuid = object.uuid, - index = indicesByUUID[uuid]; - - if (index !== undefined) { - delete indicesByUUID[uuid]; - - if (index < nCachedObjects) { - // object is cached, shrink the CACHED region - const firstActiveIndex = --nCachedObjects, - lastCachedObject = objects[firstActiveIndex], - lastIndex = --nObjects, - lastObject = objects[lastIndex]; // last cached object takes this object's place - - indicesByUUID[lastCachedObject.uuid] = index; - objects[index] = lastCachedObject; // last object goes to the activated slot and pop - - indicesByUUID[lastObject.uuid] = firstActiveIndex; - objects[firstActiveIndex] = lastObject; - objects.pop(); // accounting is done, now do the same for all bindings - - for (let j = 0, m = nBindings; j !== m; ++j) { - const bindingsForPath = bindings[j], - lastCached = bindingsForPath[firstActiveIndex], - last = bindingsForPath[lastIndex]; - bindingsForPath[index] = lastCached; - bindingsForPath[firstActiveIndex] = last; - bindingsForPath.pop(); - } - } else { - // object is active, just swap with the last and pop - const lastIndex = --nObjects, - lastObject = objects[lastIndex]; - - if (lastIndex > 0) { - indicesByUUID[lastObject.uuid] = index; - } - - objects[index] = lastObject; - objects.pop(); // accounting is done, now do the same for all bindings - - for (let j = 0, m = nBindings; j !== m; ++j) { - const bindingsForPath = bindings[j]; - bindingsForPath[index] = bindingsForPath[lastIndex]; - bindingsForPath.pop(); - } - } // cached or active - - } // if object is known - - } // for arguments - - - this.nCachedObjects_ = nCachedObjects; - } // Internal interface used by befriended PropertyBinding.Composite: - - - subscribe_(path, parsedPath) { - // returns an array of bindings for the given path that is changed - // according to the contained objects in the group - const indicesByPath = this._bindingsIndicesByPath; - let index = indicesByPath[path]; - const bindings = this._bindings; - if (index !== undefined) return bindings[index]; - const paths = this._paths, - parsedPaths = this._parsedPaths, - objects = this._objects, - nObjects = objects.length, - nCachedObjects = this.nCachedObjects_, - bindingsForPath = new Array(nObjects); - index = bindings.length; - indicesByPath[path] = index; - paths.push(path); - parsedPaths.push(parsedPath); - bindings.push(bindingsForPath); - - for (let i = nCachedObjects, n = objects.length; i !== n; ++i) { - const object = objects[i]; - bindingsForPath[i] = new PropertyBinding(object, path, parsedPath); - } - - return bindingsForPath; - } - - unsubscribe_(path) { - // tells the group to forget about a property path and no longer - // update the array previously obtained with 'subscribe_' - const indicesByPath = this._bindingsIndicesByPath, - index = indicesByPath[path]; - - if (index !== undefined) { - const paths = this._paths, - parsedPaths = this._parsedPaths, - bindings = this._bindings, - lastBindingsIndex = bindings.length - 1, - lastBindings = bindings[lastBindingsIndex], - lastBindingsPath = path[lastBindingsIndex]; - indicesByPath[lastBindingsPath] = index; - bindings[index] = lastBindings; - bindings.pop(); - parsedPaths[index] = parsedPaths[lastBindingsIndex]; - parsedPaths.pop(); - paths[index] = paths[lastBindingsIndex]; - paths.pop(); - } - } - - } - - AnimationObjectGroup.prototype.isAnimationObjectGroup = true; - - class AnimationAction { - constructor(mixer, clip, localRoot = null, blendMode = clip.blendMode) { - this._mixer = mixer; - this._clip = clip; - this._localRoot = localRoot; - this.blendMode = blendMode; - const tracks = clip.tracks, - nTracks = tracks.length, - interpolants = new Array(nTracks); - const interpolantSettings = { - endingStart: ZeroCurvatureEnding, - endingEnd: ZeroCurvatureEnding - }; - - for (let i = 0; i !== nTracks; ++i) { - const interpolant = tracks[i].createInterpolant(null); - interpolants[i] = interpolant; - interpolant.settings = interpolantSettings; - } - - this._interpolantSettings = interpolantSettings; - this._interpolants = interpolants; // bound by the mixer - // inside: PropertyMixer (managed by the mixer) - - this._propertyBindings = new Array(nTracks); - this._cacheIndex = null; // for the memory manager - - this._byClipCacheIndex = null; // for the memory manager - - this._timeScaleInterpolant = null; - this._weightInterpolant = null; - this.loop = LoopRepeat; - this._loopCount = -1; // global mixer time when the action is to be started - // it's set back to 'null' upon start of the action - - this._startTime = null; // scaled local time of the action - // gets clamped or wrapped to 0..clip.duration according to loop - - this.time = 0; - this.timeScale = 1; - this._effectiveTimeScale = 1; - this.weight = 1; - this._effectiveWeight = 1; - this.repetitions = Infinity; // no. of repetitions when looping - - this.paused = false; // true -> zero effective time scale - - this.enabled = true; // false -> zero effective weight - - this.clampWhenFinished = false; // keep feeding the last frame? - - this.zeroSlopeAtStart = true; // for smooth interpolation w/o separate - - this.zeroSlopeAtEnd = true; // clips for start, loop and end - } // State & Scheduling - - - play() { - this._mixer._activateAction(this); - - return this; - } - - stop() { - this._mixer._deactivateAction(this); - - return this.reset(); - } - - reset() { - this.paused = false; - this.enabled = true; - this.time = 0; // restart clip - - this._loopCount = -1; // forget previous loops - - this._startTime = null; // forget scheduling - - return this.stopFading().stopWarping(); - } - - isRunning() { - return this.enabled && !this.paused && this.timeScale !== 0 && this._startTime === null && this._mixer._isActiveAction(this); - } // return true when play has been called - - - isScheduled() { - return this._mixer._isActiveAction(this); - } - - startAt(time) { - this._startTime = time; - return this; - } - - setLoop(mode, repetitions) { - this.loop = mode; - this.repetitions = repetitions; - return this; - } // Weight - // set the weight stopping any scheduled fading - // although .enabled = false yields an effective weight of zero, this - // method does *not* change .enabled, because it would be confusing - - - setEffectiveWeight(weight) { - this.weight = weight; // note: same logic as when updated at runtime - - this._effectiveWeight = this.enabled ? weight : 0; - return this.stopFading(); - } // return the weight considering fading and .enabled - - - getEffectiveWeight() { - return this._effectiveWeight; - } - - fadeIn(duration) { - return this._scheduleFading(duration, 0, 1); - } - - fadeOut(duration) { - return this._scheduleFading(duration, 1, 0); - } - - crossFadeFrom(fadeOutAction, duration, warp) { - fadeOutAction.fadeOut(duration); - this.fadeIn(duration); - - if (warp) { - const fadeInDuration = this._clip.duration, - fadeOutDuration = fadeOutAction._clip.duration, - startEndRatio = fadeOutDuration / fadeInDuration, - endStartRatio = fadeInDuration / fadeOutDuration; - fadeOutAction.warp(1.0, startEndRatio, duration); - this.warp(endStartRatio, 1.0, duration); - } - - return this; - } - - crossFadeTo(fadeInAction, duration, warp) { - return fadeInAction.crossFadeFrom(this, duration, warp); - } - - stopFading() { - const weightInterpolant = this._weightInterpolant; - - if (weightInterpolant !== null) { - this._weightInterpolant = null; - - this._mixer._takeBackControlInterpolant(weightInterpolant); - } - - return this; - } // Time Scale Control - // set the time scale stopping any scheduled warping - // although .paused = true yields an effective time scale of zero, this - // method does *not* change .paused, because it would be confusing - - - setEffectiveTimeScale(timeScale) { - this.timeScale = timeScale; - this._effectiveTimeScale = this.paused ? 0 : timeScale; - return this.stopWarping(); - } // return the time scale considering warping and .paused - - - getEffectiveTimeScale() { - return this._effectiveTimeScale; - } - - setDuration(duration) { - this.timeScale = this._clip.duration / duration; - return this.stopWarping(); - } - - syncWith(action) { - this.time = action.time; - this.timeScale = action.timeScale; - return this.stopWarping(); - } - - halt(duration) { - return this.warp(this._effectiveTimeScale, 0, duration); - } - - warp(startTimeScale, endTimeScale, duration) { - const mixer = this._mixer, - now = mixer.time, - timeScale = this.timeScale; - let interpolant = this._timeScaleInterpolant; - - if (interpolant === null) { - interpolant = mixer._lendControlInterpolant(); - this._timeScaleInterpolant = interpolant; - } - - const times = interpolant.parameterPositions, - values = interpolant.sampleValues; - times[0] = now; - times[1] = now + duration; - values[0] = startTimeScale / timeScale; - values[1] = endTimeScale / timeScale; - return this; - } - - stopWarping() { - const timeScaleInterpolant = this._timeScaleInterpolant; - - if (timeScaleInterpolant !== null) { - this._timeScaleInterpolant = null; - - this._mixer._takeBackControlInterpolant(timeScaleInterpolant); - } - - return this; - } // Object Accessors - - - getMixer() { - return this._mixer; - } - - getClip() { - return this._clip; - } - - getRoot() { - return this._localRoot || this._mixer._root; - } // Interna - - - _update(time, deltaTime, timeDirection, accuIndex) { - // called by the mixer - if (!this.enabled) { - // call ._updateWeight() to update ._effectiveWeight - this._updateWeight(time); - - return; - } - - const startTime = this._startTime; - - if (startTime !== null) { - // check for scheduled start of action - const timeRunning = (time - startTime) * timeDirection; - - if (timeRunning < 0 || timeDirection === 0) { - return; // yet to come / don't decide when delta = 0 - } // start - - - this._startTime = null; // unschedule - - deltaTime = timeDirection * timeRunning; - } // apply time scale and advance time - - - deltaTime *= this._updateTimeScale(time); - - const clipTime = this._updateTime(deltaTime); // note: _updateTime may disable the action resulting in - // an effective weight of 0 - - - const weight = this._updateWeight(time); - - if (weight > 0) { - const interpolants = this._interpolants; - const propertyMixers = this._propertyBindings; - - switch (this.blendMode) { - case AdditiveAnimationBlendMode: - for (let j = 0, m = interpolants.length; j !== m; ++j) { - interpolants[j].evaluate(clipTime); - propertyMixers[j].accumulateAdditive(weight); - } - - break; - - case NormalAnimationBlendMode: - default: - for (let j = 0, m = interpolants.length; j !== m; ++j) { - interpolants[j].evaluate(clipTime); - propertyMixers[j].accumulate(accuIndex, weight); - } - - } - } - } - - _updateWeight(time) { - let weight = 0; - - if (this.enabled) { - weight = this.weight; - const interpolant = this._weightInterpolant; - - if (interpolant !== null) { - const interpolantValue = interpolant.evaluate(time)[0]; - weight *= interpolantValue; - - if (time > interpolant.parameterPositions[1]) { - this.stopFading(); - - if (interpolantValue === 0) { - // faded out, disable - this.enabled = false; - } - } - } - } - - this._effectiveWeight = weight; - return weight; - } - - _updateTimeScale(time) { - let timeScale = 0; - - if (!this.paused) { - timeScale = this.timeScale; - const interpolant = this._timeScaleInterpolant; - - if (interpolant !== null) { - const interpolantValue = interpolant.evaluate(time)[0]; - timeScale *= interpolantValue; - - if (time > interpolant.parameterPositions[1]) { - this.stopWarping(); - - if (timeScale === 0) { - // motion has halted, pause - this.paused = true; - } else { - // warp done - apply final time scale - this.timeScale = timeScale; - } - } - } - } - - this._effectiveTimeScale = timeScale; - return timeScale; - } - - _updateTime(deltaTime) { - const duration = this._clip.duration; - const loop = this.loop; - let time = this.time + deltaTime; - let loopCount = this._loopCount; - const pingPong = loop === LoopPingPong; - - if (deltaTime === 0) { - if (loopCount === -1) return time; - return pingPong && (loopCount & 1) === 1 ? duration - time : time; - } - - if (loop === LoopOnce) { - if (loopCount === -1) { - // just started - this._loopCount = 0; - - this._setEndings(true, true, false); - } - - handle_stop: { - if (time >= duration) { - time = duration; - } else if (time < 0) { - time = 0; - } else { - this.time = time; - break handle_stop; - } - - if (this.clampWhenFinished) this.paused = true;else this.enabled = false; - this.time = time; - - this._mixer.dispatchEvent({ - type: 'finished', - action: this, - direction: deltaTime < 0 ? -1 : 1 - }); - } - } else { - // repetitive Repeat or PingPong - if (loopCount === -1) { - // just started - if (deltaTime >= 0) { - loopCount = 0; - - this._setEndings(true, this.repetitions === 0, pingPong); - } else { - // when looping in reverse direction, the initial - // transition through zero counts as a repetition, - // so leave loopCount at -1 - this._setEndings(this.repetitions === 0, true, pingPong); - } - } - - if (time >= duration || time < 0) { - // wrap around - const loopDelta = Math.floor(time / duration); // signed - - time -= duration * loopDelta; - loopCount += Math.abs(loopDelta); - const pending = this.repetitions - loopCount; - - if (pending <= 0) { - // have to stop (switch state, clamp time, fire event) - if (this.clampWhenFinished) this.paused = true;else this.enabled = false; - time = deltaTime > 0 ? duration : 0; - this.time = time; - - this._mixer.dispatchEvent({ - type: 'finished', - action: this, - direction: deltaTime > 0 ? 1 : -1 - }); - } else { - // keep running - if (pending === 1) { - // entering the last round - const atStart = deltaTime < 0; - - this._setEndings(atStart, !atStart, pingPong); - } else { - this._setEndings(false, false, pingPong); - } - - this._loopCount = loopCount; - this.time = time; - - this._mixer.dispatchEvent({ - type: 'loop', - action: this, - loopDelta: loopDelta - }); - } - } else { - this.time = time; - } - - if (pingPong && (loopCount & 1) === 1) { - // invert time for the "pong round" - return duration - time; - } - } - - return time; - } - - _setEndings(atStart, atEnd, pingPong) { - const settings = this._interpolantSettings; - - if (pingPong) { - settings.endingStart = ZeroSlopeEnding; - settings.endingEnd = ZeroSlopeEnding; - } else { - // assuming for LoopOnce atStart == atEnd == true - if (atStart) { - settings.endingStart = this.zeroSlopeAtStart ? ZeroSlopeEnding : ZeroCurvatureEnding; - } else { - settings.endingStart = WrapAroundEnding; - } - - if (atEnd) { - settings.endingEnd = this.zeroSlopeAtEnd ? ZeroSlopeEnding : ZeroCurvatureEnding; - } else { - settings.endingEnd = WrapAroundEnding; - } - } - } - - _scheduleFading(duration, weightNow, weightThen) { - const mixer = this._mixer, - now = mixer.time; - let interpolant = this._weightInterpolant; - - if (interpolant === null) { - interpolant = mixer._lendControlInterpolant(); - this._weightInterpolant = interpolant; - } - - const times = interpolant.parameterPositions, - values = interpolant.sampleValues; - times[0] = now; - values[0] = weightNow; - times[1] = now + duration; - values[1] = weightThen; - return this; - } - - } - - class AnimationMixer extends EventDispatcher { - constructor(root) { - super(); - this._root = root; - - this._initMemoryManager(); - - this._accuIndex = 0; - this.time = 0; - this.timeScale = 1.0; - } - - _bindAction(action, prototypeAction) { - const root = action._localRoot || this._root, - tracks = action._clip.tracks, - nTracks = tracks.length, - bindings = action._propertyBindings, - interpolants = action._interpolants, - rootUuid = root.uuid, - bindingsByRoot = this._bindingsByRootAndName; - let bindingsByName = bindingsByRoot[rootUuid]; - - if (bindingsByName === undefined) { - bindingsByName = {}; - bindingsByRoot[rootUuid] = bindingsByName; - } - - for (let i = 0; i !== nTracks; ++i) { - const track = tracks[i], - trackName = track.name; - let binding = bindingsByName[trackName]; - - if (binding !== undefined) { - ++binding.referenceCount; - bindings[i] = binding; - } else { - binding = bindings[i]; - - if (binding !== undefined) { - // existing binding, make sure the cache knows - if (binding._cacheIndex === null) { - ++binding.referenceCount; - - this._addInactiveBinding(binding, rootUuid, trackName); - } - - continue; - } - - const path = prototypeAction && prototypeAction._propertyBindings[i].binding.parsedPath; - binding = new PropertyMixer(PropertyBinding.create(root, trackName, path), track.ValueTypeName, track.getValueSize()); - ++binding.referenceCount; - - this._addInactiveBinding(binding, rootUuid, trackName); - - bindings[i] = binding; - } - - interpolants[i].resultBuffer = binding.buffer; - } - } - - _activateAction(action) { - if (!this._isActiveAction(action)) { - if (action._cacheIndex === null) { - // this action has been forgotten by the cache, but the user - // appears to be still using it -> rebind - const rootUuid = (action._localRoot || this._root).uuid, - clipUuid = action._clip.uuid, - actionsForClip = this._actionsByClip[clipUuid]; - - this._bindAction(action, actionsForClip && actionsForClip.knownActions[0]); - - this._addInactiveAction(action, clipUuid, rootUuid); - } - - const bindings = action._propertyBindings; // increment reference counts / sort out state - - for (let i = 0, n = bindings.length; i !== n; ++i) { - const binding = bindings[i]; - - if (binding.useCount++ === 0) { - this._lendBinding(binding); - - binding.saveOriginalState(); - } - } - - this._lendAction(action); - } - } - - _deactivateAction(action) { - if (this._isActiveAction(action)) { - const bindings = action._propertyBindings; // decrement reference counts / sort out state - - for (let i = 0, n = bindings.length; i !== n; ++i) { - const binding = bindings[i]; - - if (--binding.useCount === 0) { - binding.restoreOriginalState(); - - this._takeBackBinding(binding); - } - } - - this._takeBackAction(action); - } - } // Memory manager - - - _initMemoryManager() { - this._actions = []; // 'nActiveActions' followed by inactive ones - - this._nActiveActions = 0; - this._actionsByClip = {}; // inside: - // { - // knownActions: Array< AnimationAction > - used as prototypes - // actionByRoot: AnimationAction - lookup - // } - - this._bindings = []; // 'nActiveBindings' followed by inactive ones - - this._nActiveBindings = 0; - this._bindingsByRootAndName = {}; // inside: Map< name, PropertyMixer > - - this._controlInterpolants = []; // same game as above - - this._nActiveControlInterpolants = 0; - const scope = this; - this.stats = { - actions: { - get total() { - return scope._actions.length; - }, - - get inUse() { - return scope._nActiveActions; - } - - }, - bindings: { - get total() { - return scope._bindings.length; - }, - - get inUse() { - return scope._nActiveBindings; - } - - }, - controlInterpolants: { - get total() { - return scope._controlInterpolants.length; - }, - - get inUse() { - return scope._nActiveControlInterpolants; - } - - } - }; - } // Memory management for AnimationAction objects - - - _isActiveAction(action) { - const index = action._cacheIndex; - return index !== null && index < this._nActiveActions; - } - - _addInactiveAction(action, clipUuid, rootUuid) { - const actions = this._actions, - actionsByClip = this._actionsByClip; - let actionsForClip = actionsByClip[clipUuid]; - - if (actionsForClip === undefined) { - actionsForClip = { - knownActions: [action], - actionByRoot: {} - }; - action._byClipCacheIndex = 0; - actionsByClip[clipUuid] = actionsForClip; - } else { - const knownActions = actionsForClip.knownActions; - action._byClipCacheIndex = knownActions.length; - knownActions.push(action); - } - - action._cacheIndex = actions.length; - actions.push(action); - actionsForClip.actionByRoot[rootUuid] = action; - } - - _removeInactiveAction(action) { - const actions = this._actions, - lastInactiveAction = actions[actions.length - 1], - cacheIndex = action._cacheIndex; - lastInactiveAction._cacheIndex = cacheIndex; - actions[cacheIndex] = lastInactiveAction; - actions.pop(); - action._cacheIndex = null; - const clipUuid = action._clip.uuid, - actionsByClip = this._actionsByClip, - actionsForClip = actionsByClip[clipUuid], - knownActionsForClip = actionsForClip.knownActions, - lastKnownAction = knownActionsForClip[knownActionsForClip.length - 1], - byClipCacheIndex = action._byClipCacheIndex; - lastKnownAction._byClipCacheIndex = byClipCacheIndex; - knownActionsForClip[byClipCacheIndex] = lastKnownAction; - knownActionsForClip.pop(); - action._byClipCacheIndex = null; - const actionByRoot = actionsForClip.actionByRoot, - rootUuid = (action._localRoot || this._root).uuid; - delete actionByRoot[rootUuid]; - - if (knownActionsForClip.length === 0) { - delete actionsByClip[clipUuid]; - } - - this._removeInactiveBindingsForAction(action); - } - - _removeInactiveBindingsForAction(action) { - const bindings = action._propertyBindings; - - for (let i = 0, n = bindings.length; i !== n; ++i) { - const binding = bindings[i]; - - if (--binding.referenceCount === 0) { - this._removeInactiveBinding(binding); - } - } - } - - _lendAction(action) { - // [ active actions | inactive actions ] - // [ active actions >| inactive actions ] - // s a - // <-swap-> - // a s - const actions = this._actions, - prevIndex = action._cacheIndex, - lastActiveIndex = this._nActiveActions++, - firstInactiveAction = actions[lastActiveIndex]; - action._cacheIndex = lastActiveIndex; - actions[lastActiveIndex] = action; - firstInactiveAction._cacheIndex = prevIndex; - actions[prevIndex] = firstInactiveAction; - } - - _takeBackAction(action) { - // [ active actions | inactive actions ] - // [ active actions |< inactive actions ] - // a s - // <-swap-> - // s a - const actions = this._actions, - prevIndex = action._cacheIndex, - firstInactiveIndex = --this._nActiveActions, - lastActiveAction = actions[firstInactiveIndex]; - action._cacheIndex = firstInactiveIndex; - actions[firstInactiveIndex] = action; - lastActiveAction._cacheIndex = prevIndex; - actions[prevIndex] = lastActiveAction; - } // Memory management for PropertyMixer objects - - - _addInactiveBinding(binding, rootUuid, trackName) { - const bindingsByRoot = this._bindingsByRootAndName, - bindings = this._bindings; - let bindingByName = bindingsByRoot[rootUuid]; - - if (bindingByName === undefined) { - bindingByName = {}; - bindingsByRoot[rootUuid] = bindingByName; - } - - bindingByName[trackName] = binding; - binding._cacheIndex = bindings.length; - bindings.push(binding); - } - - _removeInactiveBinding(binding) { - const bindings = this._bindings, - propBinding = binding.binding, - rootUuid = propBinding.rootNode.uuid, - trackName = propBinding.path, - bindingsByRoot = this._bindingsByRootAndName, - bindingByName = bindingsByRoot[rootUuid], - lastInactiveBinding = bindings[bindings.length - 1], - cacheIndex = binding._cacheIndex; - lastInactiveBinding._cacheIndex = cacheIndex; - bindings[cacheIndex] = lastInactiveBinding; - bindings.pop(); - delete bindingByName[trackName]; - - if (Object.keys(bindingByName).length === 0) { - delete bindingsByRoot[rootUuid]; - } - } - - _lendBinding(binding) { - const bindings = this._bindings, - prevIndex = binding._cacheIndex, - lastActiveIndex = this._nActiveBindings++, - firstInactiveBinding = bindings[lastActiveIndex]; - binding._cacheIndex = lastActiveIndex; - bindings[lastActiveIndex] = binding; - firstInactiveBinding._cacheIndex = prevIndex; - bindings[prevIndex] = firstInactiveBinding; - } - - _takeBackBinding(binding) { - const bindings = this._bindings, - prevIndex = binding._cacheIndex, - firstInactiveIndex = --this._nActiveBindings, - lastActiveBinding = bindings[firstInactiveIndex]; - binding._cacheIndex = firstInactiveIndex; - bindings[firstInactiveIndex] = binding; - lastActiveBinding._cacheIndex = prevIndex; - bindings[prevIndex] = lastActiveBinding; - } // Memory management of Interpolants for weight and time scale - - - _lendControlInterpolant() { - const interpolants = this._controlInterpolants, - lastActiveIndex = this._nActiveControlInterpolants++; - let interpolant = interpolants[lastActiveIndex]; - - if (interpolant === undefined) { - interpolant = new LinearInterpolant(new Float32Array(2), new Float32Array(2), 1, this._controlInterpolantsResultBuffer); - interpolant.__cacheIndex = lastActiveIndex; - interpolants[lastActiveIndex] = interpolant; - } - - return interpolant; - } - - _takeBackControlInterpolant(interpolant) { - const interpolants = this._controlInterpolants, - prevIndex = interpolant.__cacheIndex, - firstInactiveIndex = --this._nActiveControlInterpolants, - lastActiveInterpolant = interpolants[firstInactiveIndex]; - interpolant.__cacheIndex = firstInactiveIndex; - interpolants[firstInactiveIndex] = interpolant; - lastActiveInterpolant.__cacheIndex = prevIndex; - interpolants[prevIndex] = lastActiveInterpolant; - } // return an action for a clip optionally using a custom root target - // object (this method allocates a lot of dynamic memory in case a - // previously unknown clip/root combination is specified) - - - clipAction(clip, optionalRoot, blendMode) { - const root = optionalRoot || this._root, - rootUuid = root.uuid; - let clipObject = typeof clip === 'string' ? AnimationClip.findByName(root, clip) : clip; - const clipUuid = clipObject !== null ? clipObject.uuid : clip; - const actionsForClip = this._actionsByClip[clipUuid]; - let prototypeAction = null; - - if (blendMode === undefined) { - if (clipObject !== null) { - blendMode = clipObject.blendMode; - } else { - blendMode = NormalAnimationBlendMode; - } - } - - if (actionsForClip !== undefined) { - const existingAction = actionsForClip.actionByRoot[rootUuid]; - - if (existingAction !== undefined && existingAction.blendMode === blendMode) { - return existingAction; - } // we know the clip, so we don't have to parse all - // the bindings again but can just copy - - - prototypeAction = actionsForClip.knownActions[0]; // also, take the clip from the prototype action - - if (clipObject === null) clipObject = prototypeAction._clip; - } // clip must be known when specified via string - - - if (clipObject === null) return null; // allocate all resources required to run it - - const newAction = new AnimationAction(this, clipObject, optionalRoot, blendMode); - - this._bindAction(newAction, prototypeAction); // and make the action known to the memory manager - - - this._addInactiveAction(newAction, clipUuid, rootUuid); - - return newAction; - } // get an existing action - - - existingAction(clip, optionalRoot) { - const root = optionalRoot || this._root, - rootUuid = root.uuid, - clipObject = typeof clip === 'string' ? AnimationClip.findByName(root, clip) : clip, - clipUuid = clipObject ? clipObject.uuid : clip, - actionsForClip = this._actionsByClip[clipUuid]; - - if (actionsForClip !== undefined) { - return actionsForClip.actionByRoot[rootUuid] || null; - } - - return null; - } // deactivates all previously scheduled actions - - - stopAllAction() { - const actions = this._actions, - nActions = this._nActiveActions; - - for (let i = nActions - 1; i >= 0; --i) { - actions[i].stop(); - } - - return this; - } // advance the time and update apply the animation - - - update(deltaTime) { - deltaTime *= this.timeScale; - const actions = this._actions, - nActions = this._nActiveActions, - time = this.time += deltaTime, - timeDirection = Math.sign(deltaTime), - accuIndex = this._accuIndex ^= 1; // run active actions - - for (let i = 0; i !== nActions; ++i) { - const action = actions[i]; - - action._update(time, deltaTime, timeDirection, accuIndex); - } // update scene graph - - - const bindings = this._bindings, - nBindings = this._nActiveBindings; - - for (let i = 0; i !== nBindings; ++i) { - bindings[i].apply(accuIndex); - } - - return this; - } // Allows you to seek to a specific time in an animation. - - - setTime(timeInSeconds) { - this.time = 0; // Zero out time attribute for AnimationMixer object; - - for (let i = 0; i < this._actions.length; i++) { - this._actions[i].time = 0; // Zero out time attribute for all associated AnimationAction objects. - } - - return this.update(timeInSeconds); // Update used to set exact time. Returns "this" AnimationMixer object. - } // return this mixer's root target object - - - getRoot() { - return this._root; - } // free all resources specific to a particular clip - - - uncacheClip(clip) { - const actions = this._actions, - clipUuid = clip.uuid, - actionsByClip = this._actionsByClip, - actionsForClip = actionsByClip[clipUuid]; - - if (actionsForClip !== undefined) { - // note: just calling _removeInactiveAction would mess up the - // iteration state and also require updating the state we can - // just throw away - const actionsToRemove = actionsForClip.knownActions; - - for (let i = 0, n = actionsToRemove.length; i !== n; ++i) { - const action = actionsToRemove[i]; - - this._deactivateAction(action); - - const cacheIndex = action._cacheIndex, - lastInactiveAction = actions[actions.length - 1]; - action._cacheIndex = null; - action._byClipCacheIndex = null; - lastInactiveAction._cacheIndex = cacheIndex; - actions[cacheIndex] = lastInactiveAction; - actions.pop(); - - this._removeInactiveBindingsForAction(action); - } - - delete actionsByClip[clipUuid]; - } - } // free all resources specific to a particular root target object - - - uncacheRoot(root) { - const rootUuid = root.uuid, - actionsByClip = this._actionsByClip; - - for (const clipUuid in actionsByClip) { - const actionByRoot = actionsByClip[clipUuid].actionByRoot, - action = actionByRoot[rootUuid]; - - if (action !== undefined) { - this._deactivateAction(action); - - this._removeInactiveAction(action); - } - } - - const bindingsByRoot = this._bindingsByRootAndName, - bindingByName = bindingsByRoot[rootUuid]; - - if (bindingByName !== undefined) { - for (const trackName in bindingByName) { - const binding = bindingByName[trackName]; - binding.restoreOriginalState(); - - this._removeInactiveBinding(binding); - } - } - } // remove a targeted clip from the cache - - - uncacheAction(clip, optionalRoot) { - const action = this.existingAction(clip, optionalRoot); - - if (action !== null) { - this._deactivateAction(action); - - this._removeInactiveAction(action); - } - } - - } - - AnimationMixer.prototype._controlInterpolantsResultBuffer = new Float32Array(1); - - class Uniform { - constructor(value) { - if (typeof value === 'string') { - console.warn('THREE.Uniform: Type parameter is no longer needed.'); - value = arguments[1]; - } - - this.value = value; - } - - clone() { - return new Uniform(this.value.clone === undefined ? this.value : this.value.clone()); - } - - } - - class InstancedInterleavedBuffer extends InterleavedBuffer { - constructor(array, stride, meshPerAttribute = 1) { - super(array, stride); - this.meshPerAttribute = meshPerAttribute; - } - - copy(source) { - super.copy(source); - this.meshPerAttribute = source.meshPerAttribute; - return this; - } - - clone(data) { - const ib = super.clone(data); - ib.meshPerAttribute = this.meshPerAttribute; - return ib; - } - - toJSON(data) { - const json = super.toJSON(data); - json.isInstancedInterleavedBuffer = true; - json.meshPerAttribute = this.meshPerAttribute; - return json; - } - - } - - InstancedInterleavedBuffer.prototype.isInstancedInterleavedBuffer = true; - - class GLBufferAttribute { - constructor(buffer, type, itemSize, elementSize, count) { - this.buffer = buffer; - this.type = type; - this.itemSize = itemSize; - this.elementSize = elementSize; - this.count = count; - this.version = 0; - } - - set needsUpdate(value) { - if (value === true) this.version++; - } - - setBuffer(buffer) { - this.buffer = buffer; - return this; - } - - setType(type, elementSize) { - this.type = type; - this.elementSize = elementSize; - return this; - } - - setItemSize(itemSize) { - this.itemSize = itemSize; - return this; - } - - setCount(count) { - this.count = count; - return this; - } - - } - - GLBufferAttribute.prototype.isGLBufferAttribute = true; - - class Raycaster { - constructor(origin, direction, near = 0, far = Infinity) { - this.ray = new Ray(origin, direction); // direction is assumed to be normalized (for accurate distance calculations) - - this.near = near; - this.far = far; - this.camera = null; - this.layers = new Layers(); - this.params = { - Mesh: {}, - Line: { - threshold: 1 - }, - LOD: {}, - Points: { - threshold: 1 - }, - Sprite: {} - }; - } - - set(origin, direction) { - // direction is assumed to be normalized (for accurate distance calculations) - this.ray.set(origin, direction); - } - - setFromCamera(coords, camera) { - if (camera.isPerspectiveCamera) { - this.ray.origin.setFromMatrixPosition(camera.matrixWorld); - this.ray.direction.set(coords.x, coords.y, 0.5).unproject(camera).sub(this.ray.origin).normalize(); - this.camera = camera; - } else if (camera.isOrthographicCamera) { - this.ray.origin.set(coords.x, coords.y, (camera.near + camera.far) / (camera.near - camera.far)).unproject(camera); // set origin in plane of camera - - this.ray.direction.set(0, 0, -1).transformDirection(camera.matrixWorld); - this.camera = camera; - } else { - console.error('THREE.Raycaster: Unsupported camera type: ' + camera.type); - } - } - - intersectObject(object, recursive = true, intersects = []) { - intersectObject(object, this, intersects, recursive); - intersects.sort(ascSort); - return intersects; - } - - intersectObjects(objects, recursive = true, intersects = []) { - for (let i = 0, l = objects.length; i < l; i++) { - intersectObject(objects[i], this, intersects, recursive); - } - - intersects.sort(ascSort); - return intersects; - } - - } - - function ascSort(a, b) { - return a.distance - b.distance; - } - - function intersectObject(object, raycaster, intersects, recursive) { - if (object.layers.test(raycaster.layers)) { - object.raycast(raycaster, intersects); - } - - if (recursive === true) { - const children = object.children; - - for (let i = 0, l = children.length; i < l; i++) { - intersectObject(children[i], raycaster, intersects, true); - } - } - } - - /** - * Ref: https://en.wikipedia.org/wiki/Spherical_coordinate_system - * - * The polar angle (phi) is measured from the positive y-axis. The positive y-axis is up. - * The azimuthal angle (theta) is measured from the positive z-axis. - */ - - class Spherical { - constructor(radius = 1, phi = 0, theta = 0) { - this.radius = radius; - this.phi = phi; // polar angle - - this.theta = theta; // azimuthal angle - - return this; - } - - set(radius, phi, theta) { - this.radius = radius; - this.phi = phi; - this.theta = theta; - return this; - } - - copy(other) { - this.radius = other.radius; - this.phi = other.phi; - this.theta = other.theta; - return this; - } // restrict phi to be between EPS and PI-EPS - - - makeSafe() { - const EPS = 0.000001; - this.phi = Math.max(EPS, Math.min(Math.PI - EPS, this.phi)); - return this; - } - - setFromVector3(v) { - return this.setFromCartesianCoords(v.x, v.y, v.z); - } - - setFromCartesianCoords(x, y, z) { - this.radius = Math.sqrt(x * x + y * y + z * z); - - if (this.radius === 0) { - this.theta = 0; - this.phi = 0; - } else { - this.theta = Math.atan2(x, z); - this.phi = Math.acos(clamp(y / this.radius, -1, 1)); - } - - return this; - } - - clone() { - return new this.constructor().copy(this); - } - - } - - /** - * Ref: https://en.wikipedia.org/wiki/Cylindrical_coordinate_system - */ - class Cylindrical { - constructor(radius = 1, theta = 0, y = 0) { - this.radius = radius; // distance from the origin to a point in the x-z plane - - this.theta = theta; // counterclockwise angle in the x-z plane measured in radians from the positive z-axis - - this.y = y; // height above the x-z plane - - return this; - } - - set(radius, theta, y) { - this.radius = radius; - this.theta = theta; - this.y = y; - return this; - } - - copy(other) { - this.radius = other.radius; - this.theta = other.theta; - this.y = other.y; - return this; - } - - setFromVector3(v) { - return this.setFromCartesianCoords(v.x, v.y, v.z); - } - - setFromCartesianCoords(x, y, z) { - this.radius = Math.sqrt(x * x + z * z); - this.theta = Math.atan2(x, z); - this.y = y; - return this; - } - - clone() { - return new this.constructor().copy(this); - } - - } - - const _vector$4 = /*@__PURE__*/new Vector2(); - - class Box2 { - constructor(min = new Vector2(+Infinity, +Infinity), max = new Vector2(-Infinity, -Infinity)) { - this.min = min; - this.max = max; - } - - set(min, max) { - this.min.copy(min); - this.max.copy(max); - return this; - } - - setFromPoints(points) { - this.makeEmpty(); - - for (let i = 0, il = points.length; i < il; i++) { - this.expandByPoint(points[i]); - } - - return this; - } - - setFromCenterAndSize(center, size) { - const halfSize = _vector$4.copy(size).multiplyScalar(0.5); - - this.min.copy(center).sub(halfSize); - this.max.copy(center).add(halfSize); - return this; - } - - clone() { - return new this.constructor().copy(this); - } - - copy(box) { - this.min.copy(box.min); - this.max.copy(box.max); - return this; - } - - makeEmpty() { - this.min.x = this.min.y = +Infinity; - this.max.x = this.max.y = -Infinity; - return this; - } - - isEmpty() { - // this is a more robust check for empty than ( volume <= 0 ) because volume can get positive with two negative axes - return this.max.x < this.min.x || this.max.y < this.min.y; - } - - getCenter(target) { - return this.isEmpty() ? target.set(0, 0) : target.addVectors(this.min, this.max).multiplyScalar(0.5); - } - - getSize(target) { - return this.isEmpty() ? target.set(0, 0) : target.subVectors(this.max, this.min); - } - - expandByPoint(point) { - this.min.min(point); - this.max.max(point); - return this; - } - - expandByVector(vector) { - this.min.sub(vector); - this.max.add(vector); - return this; - } - - expandByScalar(scalar) { - this.min.addScalar(-scalar); - this.max.addScalar(scalar); - return this; - } - - containsPoint(point) { - return point.x < this.min.x || point.x > this.max.x || point.y < this.min.y || point.y > this.max.y ? false : true; - } - - containsBox(box) { - return this.min.x <= box.min.x && box.max.x <= this.max.x && this.min.y <= box.min.y && box.max.y <= this.max.y; - } - - getParameter(point, target) { - // This can potentially have a divide by zero if the box - // has a size dimension of 0. - return target.set((point.x - this.min.x) / (this.max.x - this.min.x), (point.y - this.min.y) / (this.max.y - this.min.y)); - } - - intersectsBox(box) { - // using 4 splitting planes to rule out intersections - return box.max.x < this.min.x || box.min.x > this.max.x || box.max.y < this.min.y || box.min.y > this.max.y ? false : true; - } - - clampPoint(point, target) { - return target.copy(point).clamp(this.min, this.max); - } - - distanceToPoint(point) { - const clampedPoint = _vector$4.copy(point).clamp(this.min, this.max); - - return clampedPoint.sub(point).length(); - } - - intersect(box) { - this.min.max(box.min); - this.max.min(box.max); - return this; - } - - union(box) { - this.min.min(box.min); - this.max.max(box.max); - return this; - } - - translate(offset) { - this.min.add(offset); - this.max.add(offset); - return this; - } - - equals(box) { - return box.min.equals(this.min) && box.max.equals(this.max); - } - - } - - Box2.prototype.isBox2 = true; - - const _startP = /*@__PURE__*/new Vector3(); - - const _startEnd = /*@__PURE__*/new Vector3(); - - class Line3 { - constructor(start = new Vector3(), end = new Vector3()) { - this.start = start; - this.end = end; - } - - set(start, end) { - this.start.copy(start); - this.end.copy(end); - return this; - } - - copy(line) { - this.start.copy(line.start); - this.end.copy(line.end); - return this; - } - - getCenter(target) { - return target.addVectors(this.start, this.end).multiplyScalar(0.5); - } - - delta(target) { - return target.subVectors(this.end, this.start); - } - - distanceSq() { - return this.start.distanceToSquared(this.end); - } - - distance() { - return this.start.distanceTo(this.end); - } - - at(t, target) { - return this.delta(target).multiplyScalar(t).add(this.start); - } - - closestPointToPointParameter(point, clampToLine) { - _startP.subVectors(point, this.start); - - _startEnd.subVectors(this.end, this.start); - - const startEnd2 = _startEnd.dot(_startEnd); - - const startEnd_startP = _startEnd.dot(_startP); - - let t = startEnd_startP / startEnd2; - - if (clampToLine) { - t = clamp(t, 0, 1); - } - - return t; - } - - closestPointToPoint(point, clampToLine, target) { - const t = this.closestPointToPointParameter(point, clampToLine); - return this.delta(target).multiplyScalar(t).add(this.start); - } - - applyMatrix4(matrix) { - this.start.applyMatrix4(matrix); - this.end.applyMatrix4(matrix); - return this; - } - - equals(line) { - return line.start.equals(this.start) && line.end.equals(this.end); - } - - clone() { - return new this.constructor().copy(this); - } - - } - - const _vector$3 = /*@__PURE__*/new Vector3(); - - class SpotLightHelper extends Object3D { - constructor(light, color) { - super(); - this.light = light; - this.light.updateMatrixWorld(); - this.matrix = light.matrixWorld; - this.matrixAutoUpdate = false; - this.color = color; - const geometry = new BufferGeometry(); - const positions = [0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0, 1, 0, 0, 0, -1, 0, 1, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, -1, 1]; - - for (let i = 0, j = 1, l = 32; i < l; i++, j++) { - const p1 = i / l * Math.PI * 2; - const p2 = j / l * Math.PI * 2; - positions.push(Math.cos(p1), Math.sin(p1), 1, Math.cos(p2), Math.sin(p2), 1); - } - - geometry.setAttribute('position', new Float32BufferAttribute(positions, 3)); - const material = new LineBasicMaterial({ - fog: false, - toneMapped: false - }); - this.cone = new LineSegments(geometry, material); - this.add(this.cone); - this.update(); - } - - dispose() { - this.cone.geometry.dispose(); - this.cone.material.dispose(); - } - - update() { - this.light.updateMatrixWorld(); - const coneLength = this.light.distance ? this.light.distance : 1000; - const coneWidth = coneLength * Math.tan(this.light.angle); - this.cone.scale.set(coneWidth, coneWidth, coneLength); - - _vector$3.setFromMatrixPosition(this.light.target.matrixWorld); - - this.cone.lookAt(_vector$3); - - if (this.color !== undefined) { - this.cone.material.color.set(this.color); - } else { - this.cone.material.color.copy(this.light.color); - } - } - - } - - const _vector$2 = /*@__PURE__*/new Vector3(); - - const _boneMatrix = /*@__PURE__*/new Matrix4(); - - const _matrixWorldInv = /*@__PURE__*/new Matrix4(); - - class SkeletonHelper extends LineSegments { - constructor(object) { - const bones = getBoneList(object); - const geometry = new BufferGeometry(); - const vertices = []; - const colors = []; - const color1 = new Color(0, 0, 1); - const color2 = new Color(0, 1, 0); - - for (let i = 0; i < bones.length; i++) { - const bone = bones[i]; - - if (bone.parent && bone.parent.isBone) { - vertices.push(0, 0, 0); - vertices.push(0, 0, 0); - colors.push(color1.r, color1.g, color1.b); - colors.push(color2.r, color2.g, color2.b); - } - } - - geometry.setAttribute('position', new Float32BufferAttribute(vertices, 3)); - geometry.setAttribute('color', new Float32BufferAttribute(colors, 3)); - const material = new LineBasicMaterial({ - vertexColors: true, - depthTest: false, - depthWrite: false, - toneMapped: false, - transparent: true - }); - super(geometry, material); - this.type = 'SkeletonHelper'; - this.isSkeletonHelper = true; - this.root = object; - this.bones = bones; - this.matrix = object.matrixWorld; - this.matrixAutoUpdate = false; - } - - updateMatrixWorld(force) { - const bones = this.bones; - const geometry = this.geometry; - const position = geometry.getAttribute('position'); - - _matrixWorldInv.copy(this.root.matrixWorld).invert(); - - for (let i = 0, j = 0; i < bones.length; i++) { - const bone = bones[i]; - - if (bone.parent && bone.parent.isBone) { - _boneMatrix.multiplyMatrices(_matrixWorldInv, bone.matrixWorld); - - _vector$2.setFromMatrixPosition(_boneMatrix); - - position.setXYZ(j, _vector$2.x, _vector$2.y, _vector$2.z); - - _boneMatrix.multiplyMatrices(_matrixWorldInv, bone.parent.matrixWorld); - - _vector$2.setFromMatrixPosition(_boneMatrix); - - position.setXYZ(j + 1, _vector$2.x, _vector$2.y, _vector$2.z); - j += 2; - } - } - - geometry.getAttribute('position').needsUpdate = true; - super.updateMatrixWorld(force); - } - - } - - function getBoneList(object) { - const boneList = []; - - if (object.isBone === true) { - boneList.push(object); - } - - for (let i = 0; i < object.children.length; i++) { - boneList.push.apply(boneList, getBoneList(object.children[i])); - } - - return boneList; - } - - class PointLightHelper extends Mesh { - constructor(light, sphereSize, color) { - const geometry = new SphereGeometry(sphereSize, 4, 2); - const material = new MeshBasicMaterial({ - wireframe: true, - fog: false, - toneMapped: false - }); - super(geometry, material); - this.light = light; - this.light.updateMatrixWorld(); - this.color = color; - this.type = 'PointLightHelper'; - this.matrix = this.light.matrixWorld; - this.matrixAutoUpdate = false; - this.update(); - /* - // TODO: delete this comment? - const distanceGeometry = new THREE.IcosahedronGeometry( 1, 2 ); - const distanceMaterial = new THREE.MeshBasicMaterial( { color: hexColor, fog: false, wireframe: true, opacity: 0.1, transparent: true } ); - this.lightSphere = new THREE.Mesh( bulbGeometry, bulbMaterial ); - this.lightDistance = new THREE.Mesh( distanceGeometry, distanceMaterial ); - const d = light.distance; - if ( d === 0.0 ) { - this.lightDistance.visible = false; - } else { - this.lightDistance.scale.set( d, d, d ); - } - this.add( this.lightDistance ); - */ - } - - dispose() { - this.geometry.dispose(); - this.material.dispose(); - } - - update() { - if (this.color !== undefined) { - this.material.color.set(this.color); - } else { - this.material.color.copy(this.light.color); - } - /* - const d = this.light.distance; - if ( d === 0.0 ) { - this.lightDistance.visible = false; - } else { - this.lightDistance.visible = true; - this.lightDistance.scale.set( d, d, d ); - } - */ - - } - - } - - const _vector$1 = /*@__PURE__*/new Vector3(); - - const _color1 = /*@__PURE__*/new Color(); - - const _color2 = /*@__PURE__*/new Color(); - - class HemisphereLightHelper extends Object3D { - constructor(light, size, color) { - super(); - this.light = light; - this.light.updateMatrixWorld(); - this.matrix = light.matrixWorld; - this.matrixAutoUpdate = false; - this.color = color; - const geometry = new OctahedronGeometry(size); - geometry.rotateY(Math.PI * 0.5); - this.material = new MeshBasicMaterial({ - wireframe: true, - fog: false, - toneMapped: false - }); - if (this.color === undefined) this.material.vertexColors = true; - const position = geometry.getAttribute('position'); - const colors = new Float32Array(position.count * 3); - geometry.setAttribute('color', new BufferAttribute(colors, 3)); - this.add(new Mesh(geometry, this.material)); - this.update(); - } - - dispose() { - this.children[0].geometry.dispose(); - this.children[0].material.dispose(); - } - - update() { - const mesh = this.children[0]; - - if (this.color !== undefined) { - this.material.color.set(this.color); - } else { - const colors = mesh.geometry.getAttribute('color'); - - _color1.copy(this.light.color); - - _color2.copy(this.light.groundColor); - - for (let i = 0, l = colors.count; i < l; i++) { - const color = i < l / 2 ? _color1 : _color2; - colors.setXYZ(i, color.r, color.g, color.b); - } - - colors.needsUpdate = true; - } - - mesh.lookAt(_vector$1.setFromMatrixPosition(this.light.matrixWorld).negate()); - } - - } - - class GridHelper extends LineSegments { - constructor(size = 10, divisions = 10, color1 = 0x444444, color2 = 0x888888) { - color1 = new Color(color1); - color2 = new Color(color2); - const center = divisions / 2; - const step = size / divisions; - const halfSize = size / 2; - const vertices = [], - colors = []; - - for (let i = 0, j = 0, k = -halfSize; i <= divisions; i++, k += step) { - vertices.push(-halfSize, 0, k, halfSize, 0, k); - vertices.push(k, 0, -halfSize, k, 0, halfSize); - const color = i === center ? color1 : color2; - color.toArray(colors, j); - j += 3; - color.toArray(colors, j); - j += 3; - color.toArray(colors, j); - j += 3; - color.toArray(colors, j); - j += 3; - } - - const geometry = new BufferGeometry(); - geometry.setAttribute('position', new Float32BufferAttribute(vertices, 3)); - geometry.setAttribute('color', new Float32BufferAttribute(colors, 3)); - const material = new LineBasicMaterial({ - vertexColors: true, - toneMapped: false - }); - super(geometry, material); - this.type = 'GridHelper'; - } - - } - - class PolarGridHelper extends LineSegments { - constructor(radius = 10, radials = 16, circles = 8, divisions = 64, color1 = 0x444444, color2 = 0x888888) { - color1 = new Color(color1); - color2 = new Color(color2); - const vertices = []; - const colors = []; // create the radials - - for (let i = 0; i <= radials; i++) { - const v = i / radials * (Math.PI * 2); - const x = Math.sin(v) * radius; - const z = Math.cos(v) * radius; - vertices.push(0, 0, 0); - vertices.push(x, 0, z); - const color = i & 1 ? color1 : color2; - colors.push(color.r, color.g, color.b); - colors.push(color.r, color.g, color.b); - } // create the circles - - - for (let i = 0; i <= circles; i++) { - const color = i & 1 ? color1 : color2; - const r = radius - radius / circles * i; - - for (let j = 0; j < divisions; j++) { - // first vertex - let v = j / divisions * (Math.PI * 2); - let x = Math.sin(v) * r; - let z = Math.cos(v) * r; - vertices.push(x, 0, z); - colors.push(color.r, color.g, color.b); // second vertex - - v = (j + 1) / divisions * (Math.PI * 2); - x = Math.sin(v) * r; - z = Math.cos(v) * r; - vertices.push(x, 0, z); - colors.push(color.r, color.g, color.b); - } - } - - const geometry = new BufferGeometry(); - geometry.setAttribute('position', new Float32BufferAttribute(vertices, 3)); - geometry.setAttribute('color', new Float32BufferAttribute(colors, 3)); - const material = new LineBasicMaterial({ - vertexColors: true, - toneMapped: false - }); - super(geometry, material); - this.type = 'PolarGridHelper'; - } - - } - - const _v1 = /*@__PURE__*/new Vector3(); - - const _v2 = /*@__PURE__*/new Vector3(); - - const _v3 = /*@__PURE__*/new Vector3(); - - class DirectionalLightHelper extends Object3D { - constructor(light, size, color) { - super(); - this.light = light; - this.light.updateMatrixWorld(); - this.matrix = light.matrixWorld; - this.matrixAutoUpdate = false; - this.color = color; - if (size === undefined) size = 1; - let geometry = new BufferGeometry(); - geometry.setAttribute('position', new Float32BufferAttribute([-size, size, 0, size, size, 0, size, -size, 0, -size, -size, 0, -size, size, 0], 3)); - const material = new LineBasicMaterial({ - fog: false, - toneMapped: false - }); - this.lightPlane = new Line(geometry, material); - this.add(this.lightPlane); - geometry = new BufferGeometry(); - geometry.setAttribute('position', new Float32BufferAttribute([0, 0, 0, 0, 0, 1], 3)); - this.targetLine = new Line(geometry, material); - this.add(this.targetLine); - this.update(); - } - - dispose() { - this.lightPlane.geometry.dispose(); - this.lightPlane.material.dispose(); - this.targetLine.geometry.dispose(); - this.targetLine.material.dispose(); - } - - update() { - _v1.setFromMatrixPosition(this.light.matrixWorld); - - _v2.setFromMatrixPosition(this.light.target.matrixWorld); - - _v3.subVectors(_v2, _v1); - - this.lightPlane.lookAt(_v2); - - if (this.color !== undefined) { - this.lightPlane.material.color.set(this.color); - this.targetLine.material.color.set(this.color); - } else { - this.lightPlane.material.color.copy(this.light.color); - this.targetLine.material.color.copy(this.light.color); - } - - this.targetLine.lookAt(_v2); - this.targetLine.scale.z = _v3.length(); - } - - } - - const _vector = /*@__PURE__*/new Vector3(); - - const _camera = /*@__PURE__*/new Camera(); - /** - * - shows frustum, line of sight and up of the camera - * - suitable for fast updates - * - based on frustum visualization in lightgl.js shadowmap example - * https://github.com/evanw/lightgl.js/blob/master/tests/shadowmap.html - */ - - - class CameraHelper extends LineSegments { - constructor(camera) { - const geometry = new BufferGeometry(); - const material = new LineBasicMaterial({ - color: 0xffffff, - vertexColors: true, - toneMapped: false - }); - const vertices = []; - const colors = []; - const pointMap = {}; // colors - - const colorFrustum = new Color(0xffaa00); - const colorCone = new Color(0xff0000); - const colorUp = new Color(0x00aaff); - const colorTarget = new Color(0xffffff); - const colorCross = new Color(0x333333); // near - - addLine('n1', 'n2', colorFrustum); - addLine('n2', 'n4', colorFrustum); - addLine('n4', 'n3', colorFrustum); - addLine('n3', 'n1', colorFrustum); // far - - addLine('f1', 'f2', colorFrustum); - addLine('f2', 'f4', colorFrustum); - addLine('f4', 'f3', colorFrustum); - addLine('f3', 'f1', colorFrustum); // sides - - addLine('n1', 'f1', colorFrustum); - addLine('n2', 'f2', colorFrustum); - addLine('n3', 'f3', colorFrustum); - addLine('n4', 'f4', colorFrustum); // cone - - addLine('p', 'n1', colorCone); - addLine('p', 'n2', colorCone); - addLine('p', 'n3', colorCone); - addLine('p', 'n4', colorCone); // up - - addLine('u1', 'u2', colorUp); - addLine('u2', 'u3', colorUp); - addLine('u3', 'u1', colorUp); // target - - addLine('c', 't', colorTarget); - addLine('p', 'c', colorCross); // cross - - addLine('cn1', 'cn2', colorCross); - addLine('cn3', 'cn4', colorCross); - addLine('cf1', 'cf2', colorCross); - addLine('cf3', 'cf4', colorCross); - - function addLine(a, b, color) { - addPoint(a, color); - addPoint(b, color); - } - - function addPoint(id, color) { - vertices.push(0, 0, 0); - colors.push(color.r, color.g, color.b); - - if (pointMap[id] === undefined) { - pointMap[id] = []; - } - - pointMap[id].push(vertices.length / 3 - 1); - } - - geometry.setAttribute('position', new Float32BufferAttribute(vertices, 3)); - geometry.setAttribute('color', new Float32BufferAttribute(colors, 3)); - super(geometry, material); - this.type = 'CameraHelper'; - this.camera = camera; - if (this.camera.updateProjectionMatrix) this.camera.updateProjectionMatrix(); - this.matrix = camera.matrixWorld; - this.matrixAutoUpdate = false; - this.pointMap = pointMap; - this.update(); - } - - update() { - const geometry = this.geometry; - const pointMap = this.pointMap; - const w = 1, - h = 1; // we need just camera projection matrix inverse - // world matrix must be identity - - _camera.projectionMatrixInverse.copy(this.camera.projectionMatrixInverse); // center / target - - - setPoint('c', pointMap, geometry, _camera, 0, 0, -1); - setPoint('t', pointMap, geometry, _camera, 0, 0, 1); // near - - setPoint('n1', pointMap, geometry, _camera, -w, -h, -1); - setPoint('n2', pointMap, geometry, _camera, w, -h, -1); - setPoint('n3', pointMap, geometry, _camera, -w, h, -1); - setPoint('n4', pointMap, geometry, _camera, w, h, -1); // far - - setPoint('f1', pointMap, geometry, _camera, -w, -h, 1); - setPoint('f2', pointMap, geometry, _camera, w, -h, 1); - setPoint('f3', pointMap, geometry, _camera, -w, h, 1); - setPoint('f4', pointMap, geometry, _camera, w, h, 1); // up - - setPoint('u1', pointMap, geometry, _camera, w * 0.7, h * 1.1, -1); - setPoint('u2', pointMap, geometry, _camera, -w * 0.7, h * 1.1, -1); - setPoint('u3', pointMap, geometry, _camera, 0, h * 2, -1); // cross - - setPoint('cf1', pointMap, geometry, _camera, -w, 0, 1); - setPoint('cf2', pointMap, geometry, _camera, w, 0, 1); - setPoint('cf3', pointMap, geometry, _camera, 0, -h, 1); - setPoint('cf4', pointMap, geometry, _camera, 0, h, 1); - setPoint('cn1', pointMap, geometry, _camera, -w, 0, -1); - setPoint('cn2', pointMap, geometry, _camera, w, 0, -1); - setPoint('cn3', pointMap, geometry, _camera, 0, -h, -1); - setPoint('cn4', pointMap, geometry, _camera, 0, h, -1); - geometry.getAttribute('position').needsUpdate = true; - } - - dispose() { - this.geometry.dispose(); - this.material.dispose(); - } - - } - - function setPoint(point, pointMap, geometry, camera, x, y, z) { - _vector.set(x, y, z).unproject(camera); - - const points = pointMap[point]; - - if (points !== undefined) { - const position = geometry.getAttribute('position'); - - for (let i = 0, l = points.length; i < l; i++) { - position.setXYZ(points[i], _vector.x, _vector.y, _vector.z); - } - } - } - - const _box = /*@__PURE__*/new Box3(); - - class BoxHelper extends LineSegments { - constructor(object, color = 0xffff00) { - const indices = new Uint16Array([0, 1, 1, 2, 2, 3, 3, 0, 4, 5, 5, 6, 6, 7, 7, 4, 0, 4, 1, 5, 2, 6, 3, 7]); - const positions = new Float32Array(8 * 3); - const geometry = new BufferGeometry(); - geometry.setIndex(new BufferAttribute(indices, 1)); - geometry.setAttribute('position', new BufferAttribute(positions, 3)); - super(geometry, new LineBasicMaterial({ - color: color, - toneMapped: false - })); - this.object = object; - this.type = 'BoxHelper'; - this.matrixAutoUpdate = false; - this.update(); - } - - update(object) { - if (object !== undefined) { - console.warn('THREE.BoxHelper: .update() has no longer arguments.'); - } - - if (this.object !== undefined) { - _box.setFromObject(this.object); - } - - if (_box.isEmpty()) return; - const min = _box.min; - const max = _box.max; - /* - 5____4 - 1/___0/| - | 6__|_7 - 2/___3/ - 0: max.x, max.y, max.z - 1: min.x, max.y, max.z - 2: min.x, min.y, max.z - 3: max.x, min.y, max.z - 4: max.x, max.y, min.z - 5: min.x, max.y, min.z - 6: min.x, min.y, min.z - 7: max.x, min.y, min.z - */ - - const position = this.geometry.attributes.position; - const array = position.array; - array[0] = max.x; - array[1] = max.y; - array[2] = max.z; - array[3] = min.x; - array[4] = max.y; - array[5] = max.z; - array[6] = min.x; - array[7] = min.y; - array[8] = max.z; - array[9] = max.x; - array[10] = min.y; - array[11] = max.z; - array[12] = max.x; - array[13] = max.y; - array[14] = min.z; - array[15] = min.x; - array[16] = max.y; - array[17] = min.z; - array[18] = min.x; - array[19] = min.y; - array[20] = min.z; - array[21] = max.x; - array[22] = min.y; - array[23] = min.z; - position.needsUpdate = true; - this.geometry.computeBoundingSphere(); - } - - setFromObject(object) { - this.object = object; - this.update(); - return this; - } - - copy(source) { - LineSegments.prototype.copy.call(this, source); - this.object = source.object; - return this; - } - - } - - class Box3Helper extends LineSegments { - constructor(box, color = 0xffff00) { - const indices = new Uint16Array([0, 1, 1, 2, 2, 3, 3, 0, 4, 5, 5, 6, 6, 7, 7, 4, 0, 4, 1, 5, 2, 6, 3, 7]); - const positions = [1, 1, 1, -1, 1, 1, -1, -1, 1, 1, -1, 1, 1, 1, -1, -1, 1, -1, -1, -1, -1, 1, -1, -1]; - const geometry = new BufferGeometry(); - geometry.setIndex(new BufferAttribute(indices, 1)); - geometry.setAttribute('position', new Float32BufferAttribute(positions, 3)); - super(geometry, new LineBasicMaterial({ - color: color, - toneMapped: false - })); - this.box = box; - this.type = 'Box3Helper'; - this.geometry.computeBoundingSphere(); - } - - updateMatrixWorld(force) { - const box = this.box; - if (box.isEmpty()) return; - box.getCenter(this.position); - box.getSize(this.scale); - this.scale.multiplyScalar(0.5); - super.updateMatrixWorld(force); - } - - } - - class PlaneHelper extends Line { - constructor(plane, size = 1, hex = 0xffff00) { - const color = hex; - const positions = [1, -1, 1, -1, 1, 1, -1, -1, 1, 1, 1, 1, -1, 1, 1, -1, -1, 1, 1, -1, 1, 1, 1, 1, 0, 0, 1, 0, 0, 0]; - const geometry = new BufferGeometry(); - geometry.setAttribute('position', new Float32BufferAttribute(positions, 3)); - geometry.computeBoundingSphere(); - super(geometry, new LineBasicMaterial({ - color: color, - toneMapped: false - })); - this.type = 'PlaneHelper'; - this.plane = plane; - this.size = size; - const positions2 = [1, 1, 1, -1, 1, 1, -1, -1, 1, 1, 1, 1, -1, -1, 1, 1, -1, 1]; - const geometry2 = new BufferGeometry(); - geometry2.setAttribute('position', new Float32BufferAttribute(positions2, 3)); - geometry2.computeBoundingSphere(); - this.add(new Mesh(geometry2, new MeshBasicMaterial({ - color: color, - opacity: 0.2, - transparent: true, - depthWrite: false, - toneMapped: false - }))); - } - - updateMatrixWorld(force) { - let scale = -this.plane.constant; - if (Math.abs(scale) < 1e-8) scale = 1e-8; // sign does not matter - - this.scale.set(0.5 * this.size, 0.5 * this.size, scale); - this.children[0].material.side = scale < 0 ? BackSide : FrontSide; // renderer flips side when determinant < 0; flipping not wanted here - - this.lookAt(this.plane.normal); - super.updateMatrixWorld(force); - } - - } - - const _axis = /*@__PURE__*/new Vector3(); - - let _lineGeometry, _coneGeometry; - - class ArrowHelper extends Object3D { - // dir is assumed to be normalized - constructor(dir = new Vector3(0, 0, 1), origin = new Vector3(0, 0, 0), length = 1, color = 0xffff00, headLength = length * 0.2, headWidth = headLength * 0.2) { - super(); - this.type = 'ArrowHelper'; - - if (_lineGeometry === undefined) { - _lineGeometry = new BufferGeometry(); - - _lineGeometry.setAttribute('position', new Float32BufferAttribute([0, 0, 0, 0, 1, 0], 3)); - - _coneGeometry = new CylinderGeometry(0, 0.5, 1, 5, 1); - - _coneGeometry.translate(0, -0.5, 0); - } - - this.position.copy(origin); - this.line = new Line(_lineGeometry, new LineBasicMaterial({ - color: color, - toneMapped: false - })); - this.line.matrixAutoUpdate = false; - this.add(this.line); - this.cone = new Mesh(_coneGeometry, new MeshBasicMaterial({ - color: color, - toneMapped: false - })); - this.cone.matrixAutoUpdate = false; - this.add(this.cone); - this.setDirection(dir); - this.setLength(length, headLength, headWidth); - } - - setDirection(dir) { - // dir is assumed to be normalized - if (dir.y > 0.99999) { - this.quaternion.set(0, 0, 0, 1); - } else if (dir.y < -0.99999) { - this.quaternion.set(1, 0, 0, 0); - } else { - _axis.set(dir.z, 0, -dir.x).normalize(); - - const radians = Math.acos(dir.y); - this.quaternion.setFromAxisAngle(_axis, radians); - } - } - - setLength(length, headLength = length * 0.2, headWidth = headLength * 0.2) { - this.line.scale.set(1, Math.max(0.0001, length - headLength), 1); // see #17458 - - this.line.updateMatrix(); - this.cone.scale.set(headWidth, headLength, headWidth); - this.cone.position.y = length; - this.cone.updateMatrix(); - } - - setColor(color) { - this.line.material.color.set(color); - this.cone.material.color.set(color); - } - - copy(source) { - super.copy(source, false); - this.line.copy(source.line); - this.cone.copy(source.cone); - return this; - } - - } - - class AxesHelper extends LineSegments { - constructor(size = 1) { - const vertices = [0, 0, 0, size, 0, 0, 0, 0, 0, 0, size, 0, 0, 0, 0, 0, 0, size]; - const colors = [1, 0, 0, 1, 0.6, 0, 0, 1, 0, 0.6, 1, 0, 0, 0, 1, 0, 0.6, 1]; - const geometry = new BufferGeometry(); - geometry.setAttribute('position', new Float32BufferAttribute(vertices, 3)); - geometry.setAttribute('color', new Float32BufferAttribute(colors, 3)); - const material = new LineBasicMaterial({ - vertexColors: true, - toneMapped: false - }); - super(geometry, material); - this.type = 'AxesHelper'; - } - - setColors(xAxisColor, yAxisColor, zAxisColor) { - const color = new Color(); - const array = this.geometry.attributes.color.array; - color.set(xAxisColor); - color.toArray(array, 0); - color.toArray(array, 3); - color.set(yAxisColor); - color.toArray(array, 6); - color.toArray(array, 9); - color.set(zAxisColor); - color.toArray(array, 12); - color.toArray(array, 15); - this.geometry.attributes.color.needsUpdate = true; - return this; - } - - dispose() { - this.geometry.dispose(); - this.material.dispose(); - } - - } - - class ShapePath { - constructor() { - this.type = 'ShapePath'; - this.color = new Color(); - this.subPaths = []; - this.currentPath = null; - } - - moveTo(x, y) { - this.currentPath = new Path(); - this.subPaths.push(this.currentPath); - this.currentPath.moveTo(x, y); - return this; - } - - lineTo(x, y) { - this.currentPath.lineTo(x, y); - return this; - } - - quadraticCurveTo(aCPx, aCPy, aX, aY) { - this.currentPath.quadraticCurveTo(aCPx, aCPy, aX, aY); - return this; - } - - bezierCurveTo(aCP1x, aCP1y, aCP2x, aCP2y, aX, aY) { - this.currentPath.bezierCurveTo(aCP1x, aCP1y, aCP2x, aCP2y, aX, aY); - return this; - } - - splineThru(pts) { - this.currentPath.splineThru(pts); - return this; - } - - toShapes(isCCW, noHoles) { - function toShapesNoHoles(inSubpaths) { - const shapes = []; - - for (let i = 0, l = inSubpaths.length; i < l; i++) { - const tmpPath = inSubpaths[i]; - const tmpShape = new Shape(); - tmpShape.curves = tmpPath.curves; - shapes.push(tmpShape); - } - - return shapes; - } - - function isPointInsidePolygon(inPt, inPolygon) { - const polyLen = inPolygon.length; // inPt on polygon contour => immediate success or - // toggling of inside/outside at every single! intersection point of an edge - // with the horizontal line through inPt, left of inPt - // not counting lowerY endpoints of edges and whole edges on that line - - let inside = false; - - for (let p = polyLen - 1, q = 0; q < polyLen; p = q++) { - let edgeLowPt = inPolygon[p]; - let edgeHighPt = inPolygon[q]; - let edgeDx = edgeHighPt.x - edgeLowPt.x; - let edgeDy = edgeHighPt.y - edgeLowPt.y; - - if (Math.abs(edgeDy) > Number.EPSILON) { - // not parallel - if (edgeDy < 0) { - edgeLowPt = inPolygon[q]; - edgeDx = -edgeDx; - edgeHighPt = inPolygon[p]; - edgeDy = -edgeDy; - } - - if (inPt.y < edgeLowPt.y || inPt.y > edgeHighPt.y) continue; - - if (inPt.y === edgeLowPt.y) { - if (inPt.x === edgeLowPt.x) return true; // inPt is on contour ? - // continue; // no intersection or edgeLowPt => doesn't count !!! - } else { - const perpEdge = edgeDy * (inPt.x - edgeLowPt.x) - edgeDx * (inPt.y - edgeLowPt.y); - if (perpEdge === 0) return true; // inPt is on contour ? - - if (perpEdge < 0) continue; - inside = !inside; // true intersection left of inPt - } - } else { - // parallel or collinear - if (inPt.y !== edgeLowPt.y) continue; // parallel - // edge lies on the same horizontal line as inPt - - if (edgeHighPt.x <= inPt.x && inPt.x <= edgeLowPt.x || edgeLowPt.x <= inPt.x && inPt.x <= edgeHighPt.x) return true; // inPt: Point on contour ! - // continue; - } - } - - return inside; - } - - const isClockWise = ShapeUtils.isClockWise; - const subPaths = this.subPaths; - if (subPaths.length === 0) return []; - if (noHoles === true) return toShapesNoHoles(subPaths); - let solid, tmpPath, tmpShape; - const shapes = []; - - if (subPaths.length === 1) { - tmpPath = subPaths[0]; - tmpShape = new Shape(); - tmpShape.curves = tmpPath.curves; - shapes.push(tmpShape); - return shapes; - } - - let holesFirst = !isClockWise(subPaths[0].getPoints()); - holesFirst = isCCW ? !holesFirst : holesFirst; // console.log("Holes first", holesFirst); - - const betterShapeHoles = []; - const newShapes = []; - let newShapeHoles = []; - let mainIdx = 0; - let tmpPoints; - newShapes[mainIdx] = undefined; - newShapeHoles[mainIdx] = []; - - for (let i = 0, l = subPaths.length; i < l; i++) { - tmpPath = subPaths[i]; - tmpPoints = tmpPath.getPoints(); - solid = isClockWise(tmpPoints); - solid = isCCW ? !solid : solid; - - if (solid) { - if (!holesFirst && newShapes[mainIdx]) mainIdx++; - newShapes[mainIdx] = { - s: new Shape(), - p: tmpPoints - }; - newShapes[mainIdx].s.curves = tmpPath.curves; - if (holesFirst) mainIdx++; - newShapeHoles[mainIdx] = []; //console.log('cw', i); - } else { - newShapeHoles[mainIdx].push({ - h: tmpPath, - p: tmpPoints[0] - }); //console.log('ccw', i); - } - } // only Holes? -> probably all Shapes with wrong orientation - - - if (!newShapes[0]) return toShapesNoHoles(subPaths); - - if (newShapes.length > 1) { - let ambiguous = false; - let toChange = 0; - - for (let sIdx = 0, sLen = newShapes.length; sIdx < sLen; sIdx++) { - betterShapeHoles[sIdx] = []; - } - - for (let sIdx = 0, sLen = newShapes.length; sIdx < sLen; sIdx++) { - const sho = newShapeHoles[sIdx]; - - for (let hIdx = 0; hIdx < sho.length; hIdx++) { - const ho = sho[hIdx]; - let hole_unassigned = true; - - for (let s2Idx = 0; s2Idx < newShapes.length; s2Idx++) { - if (isPointInsidePolygon(ho.p, newShapes[s2Idx].p)) { - if (sIdx !== s2Idx) toChange++; - - if (hole_unassigned) { - hole_unassigned = false; - betterShapeHoles[s2Idx].push(ho); - } else { - ambiguous = true; - } - } - } - - if (hole_unassigned) { - betterShapeHoles[sIdx].push(ho); - } - } - } - - if (toChange > 0 && ambiguous === false) { - newShapeHoles = betterShapeHoles; - } - } - - let tmpHoles; - - for (let i = 0, il = newShapes.length; i < il; i++) { - tmpShape = newShapes[i].s; - shapes.push(tmpShape); - tmpHoles = newShapeHoles[i]; - - for (let j = 0, jl = tmpHoles.length; j < jl; j++) { - tmpShape.holes.push(tmpHoles[j].h); - } - } //console.log("shape", shapes); - - - return shapes; - } - - } - - class DataUtils { - // float32 to float16 - static toHalfFloat(val) { - if (Math.abs(val) > 65504) console.warn('THREE.DataUtils.toHalfFloat(): Value out of range.'); - val = clamp(val, -65504, 65504); - _floatView[0] = val; - const f = _uint32View[0]; - const e = f >> 23 & 0x1ff; - return _baseTable[e] + ((f & 0x007fffff) >> _shiftTable[e]); - } // float16 to float32 - - - static fromHalfFloat(val) { - const m = val >> 10; - _uint32View[0] = _mantissaTable[_offsetTable[m] + (val & 0x3ff)] + _exponentTable[m]; - return _floatView[0]; - } - - } // float32 to float16 helpers - - - const _buffer = new ArrayBuffer(4); - - const _floatView = new Float32Array(_buffer); - - const _uint32View = new Uint32Array(_buffer); - - const _baseTable = new Uint32Array(512); - - const _shiftTable = new Uint32Array(512); - - for (let i = 0; i < 256; ++i) { - const e = i - 127; // very small number (0, -0) - - if (e < -27) { - _baseTable[i] = 0x0000; - _baseTable[i | 0x100] = 0x8000; - _shiftTable[i] = 24; - _shiftTable[i | 0x100] = 24; // small number (denorm) - } else if (e < -14) { - _baseTable[i] = 0x0400 >> -e - 14; - _baseTable[i | 0x100] = 0x0400 >> -e - 14 | 0x8000; - _shiftTable[i] = -e - 1; - _shiftTable[i | 0x100] = -e - 1; // normal number - } else if (e <= 15) { - _baseTable[i] = e + 15 << 10; - _baseTable[i | 0x100] = e + 15 << 10 | 0x8000; - _shiftTable[i] = 13; - _shiftTable[i | 0x100] = 13; // large number (Infinity, -Infinity) - } else if (e < 128) { - _baseTable[i] = 0x7c00; - _baseTable[i | 0x100] = 0xfc00; - _shiftTable[i] = 24; - _shiftTable[i | 0x100] = 24; // stay (NaN, Infinity, -Infinity) - } else { - _baseTable[i] = 0x7c00; - _baseTable[i | 0x100] = 0xfc00; - _shiftTable[i] = 13; - _shiftTable[i | 0x100] = 13; - } - } // float16 to float32 helpers - - - const _mantissaTable = new Uint32Array(2048); - - const _exponentTable = new Uint32Array(64); - - const _offsetTable = new Uint32Array(64); - - for (let i = 1; i < 1024; ++i) { - let m = i << 13; // zero pad mantissa bits - - let e = 0; // zero exponent - // normalized - - while ((m & 0x00800000) === 0) { - m <<= 1; - e -= 0x00800000; // decrement exponent - } - - m &= ~0x00800000; // clear leading 1 bit - - e += 0x38800000; // adjust bias - - _mantissaTable[i] = m | e; - } - - for (let i = 1024; i < 2048; ++i) { - _mantissaTable[i] = 0x38000000 + (i - 1024 << 13); - } - - for (let i = 1; i < 31; ++i) { - _exponentTable[i] = i << 23; - } - - _exponentTable[31] = 0x47800000; - _exponentTable[32] = 0x80000000; - - for (let i = 33; i < 63; ++i) { - _exponentTable[i] = 0x80000000 + (i - 32 << 23); - } - - _exponentTable[63] = 0xc7800000; - - for (let i = 1; i < 64; ++i) { - if (i !== 32) { - _offsetTable[i] = 1024; - } - } - - const LineStrip = 0; - const LinePieces = 1; - const NoColors = 0; - const FaceColors = 1; - const VertexColors = 2; - function MeshFaceMaterial(materials) { - console.warn('THREE.MeshFaceMaterial has been removed. Use an Array instead.'); - return materials; - } - function MultiMaterial(materials = []) { - console.warn('THREE.MultiMaterial has been removed. Use an Array instead.'); - materials.isMultiMaterial = true; - materials.materials = materials; - - materials.clone = function () { - return materials.slice(); - }; - - return materials; - } - class PointCloud extends Points { - constructor(geometry, material) { - console.warn('THREE.PointCloud has been renamed to THREE.Points.'); - super(geometry, material); - } - - } - class Particle extends Sprite { - constructor(material) { - console.warn('THREE.Particle has been renamed to THREE.Sprite.'); - super(material); - } - - } - class ParticleSystem extends Points { - constructor(geometry, material) { - console.warn('THREE.ParticleSystem has been renamed to THREE.Points.'); - super(geometry, material); - } - - } - class PointCloudMaterial extends PointsMaterial { - constructor(parameters) { - console.warn('THREE.PointCloudMaterial has been renamed to THREE.PointsMaterial.'); - super(parameters); - } - - } - class ParticleBasicMaterial extends PointsMaterial { - constructor(parameters) { - console.warn('THREE.ParticleBasicMaterial has been renamed to THREE.PointsMaterial.'); - super(parameters); - } - - } - class ParticleSystemMaterial extends PointsMaterial { - constructor(parameters) { - console.warn('THREE.ParticleSystemMaterial has been renamed to THREE.PointsMaterial.'); - super(parameters); - } - - } - class Vertex extends Vector3 { - constructor(x, y, z) { - console.warn('THREE.Vertex has been removed. Use THREE.Vector3 instead.'); - super(x, y, z); - } - - } // - - class DynamicBufferAttribute extends BufferAttribute { - constructor(array, itemSize) { - console.warn('THREE.DynamicBufferAttribute has been removed. Use new THREE.BufferAttribute().setUsage( THREE.DynamicDrawUsage ) instead.'); - super(array, itemSize); - this.setUsage(DynamicDrawUsage); - } - - } - class Int8Attribute extends Int8BufferAttribute { - constructor(array, itemSize) { - console.warn('THREE.Int8Attribute has been removed. Use new THREE.Int8BufferAttribute() instead.'); - super(array, itemSize); - } - - } - class Uint8Attribute extends Uint8BufferAttribute { - constructor(array, itemSize) { - console.warn('THREE.Uint8Attribute has been removed. Use new THREE.Uint8BufferAttribute() instead.'); - super(array, itemSize); - } - - } - class Uint8ClampedAttribute extends Uint8ClampedBufferAttribute { - constructor(array, itemSize) { - console.warn('THREE.Uint8ClampedAttribute has been removed. Use new THREE.Uint8ClampedBufferAttribute() instead.'); - super(array, itemSize); - } - - } - class Int16Attribute extends Int16BufferAttribute { - constructor(array, itemSize) { - console.warn('THREE.Int16Attribute has been removed. Use new THREE.Int16BufferAttribute() instead.'); - super(array, itemSize); - } - - } - class Uint16Attribute extends Uint16BufferAttribute { - constructor(array, itemSize) { - console.warn('THREE.Uint16Attribute has been removed. Use new THREE.Uint16BufferAttribute() instead.'); - super(array, itemSize); - } - - } - class Int32Attribute extends Int32BufferAttribute { - constructor(array, itemSize) { - console.warn('THREE.Int32Attribute has been removed. Use new THREE.Int32BufferAttribute() instead.'); - super(array, itemSize); - } - - } - class Uint32Attribute extends Uint32BufferAttribute { - constructor(array, itemSize) { - console.warn('THREE.Uint32Attribute has been removed. Use new THREE.Uint32BufferAttribute() instead.'); - super(array, itemSize); - } - - } - class Float32Attribute extends Float32BufferAttribute { - constructor(array, itemSize) { - console.warn('THREE.Float32Attribute has been removed. Use new THREE.Float32BufferAttribute() instead.'); - super(array, itemSize); - } - - } - class Float64Attribute extends Float64BufferAttribute { - constructor(array, itemSize) { - console.warn('THREE.Float64Attribute has been removed. Use new THREE.Float64BufferAttribute() instead.'); - super(array, itemSize); - } - - } // - - Curve.create = function (construct, getPoint) { - console.log('THREE.Curve.create() has been deprecated'); - construct.prototype = Object.create(Curve.prototype); - construct.prototype.constructor = construct; - construct.prototype.getPoint = getPoint; - return construct; - }; // - - - Path.prototype.fromPoints = function (points) { - console.warn('THREE.Path: .fromPoints() has been renamed to .setFromPoints().'); - return this.setFromPoints(points); - }; // - - - class AxisHelper extends AxesHelper { - constructor(size) { - console.warn('THREE.AxisHelper has been renamed to THREE.AxesHelper.'); - super(size); - } - - } - class BoundingBoxHelper extends BoxHelper { - constructor(object, color) { - console.warn('THREE.BoundingBoxHelper has been deprecated. Creating a THREE.BoxHelper instead.'); - super(object, color); - } - - } - class EdgesHelper extends LineSegments { - constructor(object, hex) { - console.warn('THREE.EdgesHelper has been removed. Use THREE.EdgesGeometry instead.'); - super(new EdgesGeometry(object.geometry), new LineBasicMaterial({ - color: hex !== undefined ? hex : 0xffffff - })); - } - - } - - GridHelper.prototype.setColors = function () { - console.error('THREE.GridHelper: setColors() has been deprecated, pass them in the constructor instead.'); - }; - - SkeletonHelper.prototype.update = function () { - console.error('THREE.SkeletonHelper: update() no longer needs to be called.'); - }; - - class WireframeHelper extends LineSegments { - constructor(object, hex) { - console.warn('THREE.WireframeHelper has been removed. Use THREE.WireframeGeometry instead.'); - super(new WireframeGeometry(object.geometry), new LineBasicMaterial({ - color: hex !== undefined ? hex : 0xffffff - })); - } - - } // - - Loader.prototype.extractUrlBase = function (url) { - console.warn('THREE.Loader: .extractUrlBase() has been deprecated. Use THREE.LoaderUtils.extractUrlBase() instead.'); - return LoaderUtils.extractUrlBase(url); - }; - - Loader.Handlers = { - add: function - /* regex, loader */ - () { - console.error('THREE.Loader: Handlers.add() has been removed. Use LoadingManager.addHandler() instead.'); - }, - get: function - /* file */ - () { - console.error('THREE.Loader: Handlers.get() has been removed. Use LoadingManager.getHandler() instead.'); - } - }; - class XHRLoader extends FileLoader { - constructor(manager) { - console.warn('THREE.XHRLoader has been renamed to THREE.FileLoader.'); - super(manager); - } - - } - class BinaryTextureLoader extends DataTextureLoader { - constructor(manager) { - console.warn('THREE.BinaryTextureLoader has been renamed to THREE.DataTextureLoader.'); - super(manager); - } - - } // - - Box2.prototype.center = function (optionalTarget) { - console.warn('THREE.Box2: .center() has been renamed to .getCenter().'); - return this.getCenter(optionalTarget); - }; - - Box2.prototype.empty = function () { - console.warn('THREE.Box2: .empty() has been renamed to .isEmpty().'); - return this.isEmpty(); - }; - - Box2.prototype.isIntersectionBox = function (box) { - console.warn('THREE.Box2: .isIntersectionBox() has been renamed to .intersectsBox().'); - return this.intersectsBox(box); - }; - - Box2.prototype.size = function (optionalTarget) { - console.warn('THREE.Box2: .size() has been renamed to .getSize().'); - return this.getSize(optionalTarget); - }; // - - - Box3.prototype.center = function (optionalTarget) { - console.warn('THREE.Box3: .center() has been renamed to .getCenter().'); - return this.getCenter(optionalTarget); - }; - - Box3.prototype.empty = function () { - console.warn('THREE.Box3: .empty() has been renamed to .isEmpty().'); - return this.isEmpty(); - }; - - Box3.prototype.isIntersectionBox = function (box) { - console.warn('THREE.Box3: .isIntersectionBox() has been renamed to .intersectsBox().'); - return this.intersectsBox(box); - }; - - Box3.prototype.isIntersectionSphere = function (sphere) { - console.warn('THREE.Box3: .isIntersectionSphere() has been renamed to .intersectsSphere().'); - return this.intersectsSphere(sphere); - }; - - Box3.prototype.size = function (optionalTarget) { - console.warn('THREE.Box3: .size() has been renamed to .getSize().'); - return this.getSize(optionalTarget); - }; // - - - Euler.prototype.toVector3 = function () { - console.error('THREE.Euler: .toVector3() has been removed. Use Vector3.setFromEuler() instead'); - }; // - - - Sphere.prototype.empty = function () { - console.warn('THREE.Sphere: .empty() has been renamed to .isEmpty().'); - return this.isEmpty(); - }; // - - - Frustum.prototype.setFromMatrix = function (m) { - console.warn('THREE.Frustum: .setFromMatrix() has been renamed to .setFromProjectionMatrix().'); - return this.setFromProjectionMatrix(m); - }; // - - - Line3.prototype.center = function (optionalTarget) { - console.warn('THREE.Line3: .center() has been renamed to .getCenter().'); - return this.getCenter(optionalTarget); - }; // - - - Matrix3.prototype.flattenToArrayOffset = function (array, offset) { - console.warn('THREE.Matrix3: .flattenToArrayOffset() has been deprecated. Use .toArray() instead.'); - return this.toArray(array, offset); - }; - - Matrix3.prototype.multiplyVector3 = function (vector) { - console.warn('THREE.Matrix3: .multiplyVector3() has been removed. Use vector.applyMatrix3( matrix ) instead.'); - return vector.applyMatrix3(this); - }; - - Matrix3.prototype.multiplyVector3Array = function - /* a */ - () { - console.error('THREE.Matrix3: .multiplyVector3Array() has been removed.'); - }; - - Matrix3.prototype.applyToBufferAttribute = function (attribute) { - console.warn('THREE.Matrix3: .applyToBufferAttribute() has been removed. Use attribute.applyMatrix3( matrix ) instead.'); - return attribute.applyMatrix3(this); - }; - - Matrix3.prototype.applyToVector3Array = function - /* array, offset, length */ - () { - console.error('THREE.Matrix3: .applyToVector3Array() has been removed.'); - }; - - Matrix3.prototype.getInverse = function (matrix) { - console.warn('THREE.Matrix3: .getInverse() has been removed. Use matrixInv.copy( matrix ).invert(); instead.'); - return this.copy(matrix).invert(); - }; // - - - Matrix4.prototype.extractPosition = function (m) { - console.warn('THREE.Matrix4: .extractPosition() has been renamed to .copyPosition().'); - return this.copyPosition(m); - }; - - Matrix4.prototype.flattenToArrayOffset = function (array, offset) { - console.warn('THREE.Matrix4: .flattenToArrayOffset() has been deprecated. Use .toArray() instead.'); - return this.toArray(array, offset); - }; - - Matrix4.prototype.getPosition = function () { - console.warn('THREE.Matrix4: .getPosition() has been removed. Use Vector3.setFromMatrixPosition( matrix ) instead.'); - return new Vector3().setFromMatrixColumn(this, 3); - }; - - Matrix4.prototype.setRotationFromQuaternion = function (q) { - console.warn('THREE.Matrix4: .setRotationFromQuaternion() has been renamed to .makeRotationFromQuaternion().'); - return this.makeRotationFromQuaternion(q); - }; - - Matrix4.prototype.multiplyToArray = function () { - console.warn('THREE.Matrix4: .multiplyToArray() has been removed.'); - }; - - Matrix4.prototype.multiplyVector3 = function (vector) { - console.warn('THREE.Matrix4: .multiplyVector3() has been removed. Use vector.applyMatrix4( matrix ) instead.'); - return vector.applyMatrix4(this); - }; - - Matrix4.prototype.multiplyVector4 = function (vector) { - console.warn('THREE.Matrix4: .multiplyVector4() has been removed. Use vector.applyMatrix4( matrix ) instead.'); - return vector.applyMatrix4(this); - }; - - Matrix4.prototype.multiplyVector3Array = function - /* a */ - () { - console.error('THREE.Matrix4: .multiplyVector3Array() has been removed.'); - }; - - Matrix4.prototype.rotateAxis = function (v) { - console.warn('THREE.Matrix4: .rotateAxis() has been removed. Use Vector3.transformDirection( matrix ) instead.'); - v.transformDirection(this); - }; - - Matrix4.prototype.crossVector = function (vector) { - console.warn('THREE.Matrix4: .crossVector() has been removed. Use vector.applyMatrix4( matrix ) instead.'); - return vector.applyMatrix4(this); - }; - - Matrix4.prototype.translate = function () { - console.error('THREE.Matrix4: .translate() has been removed.'); - }; - - Matrix4.prototype.rotateX = function () { - console.error('THREE.Matrix4: .rotateX() has been removed.'); - }; - - Matrix4.prototype.rotateY = function () { - console.error('THREE.Matrix4: .rotateY() has been removed.'); - }; - - Matrix4.prototype.rotateZ = function () { - console.error('THREE.Matrix4: .rotateZ() has been removed.'); - }; - - Matrix4.prototype.rotateByAxis = function () { - console.error('THREE.Matrix4: .rotateByAxis() has been removed.'); - }; - - Matrix4.prototype.applyToBufferAttribute = function (attribute) { - console.warn('THREE.Matrix4: .applyToBufferAttribute() has been removed. Use attribute.applyMatrix4( matrix ) instead.'); - return attribute.applyMatrix4(this); - }; - - Matrix4.prototype.applyToVector3Array = function - /* array, offset, length */ - () { - console.error('THREE.Matrix4: .applyToVector3Array() has been removed.'); - }; - - Matrix4.prototype.makeFrustum = function (left, right, bottom, top, near, far) { - console.warn('THREE.Matrix4: .makeFrustum() has been removed. Use .makePerspective( left, right, top, bottom, near, far ) instead.'); - return this.makePerspective(left, right, top, bottom, near, far); - }; - - Matrix4.prototype.getInverse = function (matrix) { - console.warn('THREE.Matrix4: .getInverse() has been removed. Use matrixInv.copy( matrix ).invert(); instead.'); - return this.copy(matrix).invert(); - }; // - - - Plane.prototype.isIntersectionLine = function (line) { - console.warn('THREE.Plane: .isIntersectionLine() has been renamed to .intersectsLine().'); - return this.intersectsLine(line); - }; // - - - Quaternion.prototype.multiplyVector3 = function (vector) { - console.warn('THREE.Quaternion: .multiplyVector3() has been removed. Use is now vector.applyQuaternion( quaternion ) instead.'); - return vector.applyQuaternion(this); - }; - - Quaternion.prototype.inverse = function () { - console.warn('THREE.Quaternion: .inverse() has been renamed to invert().'); - return this.invert(); - }; // - - - Ray.prototype.isIntersectionBox = function (box) { - console.warn('THREE.Ray: .isIntersectionBox() has been renamed to .intersectsBox().'); - return this.intersectsBox(box); - }; - - Ray.prototype.isIntersectionPlane = function (plane) { - console.warn('THREE.Ray: .isIntersectionPlane() has been renamed to .intersectsPlane().'); - return this.intersectsPlane(plane); - }; - - Ray.prototype.isIntersectionSphere = function (sphere) { - console.warn('THREE.Ray: .isIntersectionSphere() has been renamed to .intersectsSphere().'); - return this.intersectsSphere(sphere); - }; // - - - Triangle.prototype.area = function () { - console.warn('THREE.Triangle: .area() has been renamed to .getArea().'); - return this.getArea(); - }; - - Triangle.prototype.barycoordFromPoint = function (point, target) { - console.warn('THREE.Triangle: .barycoordFromPoint() has been renamed to .getBarycoord().'); - return this.getBarycoord(point, target); - }; - - Triangle.prototype.midpoint = function (target) { - console.warn('THREE.Triangle: .midpoint() has been renamed to .getMidpoint().'); - return this.getMidpoint(target); - }; - - Triangle.prototypenormal = function (target) { - console.warn('THREE.Triangle: .normal() has been renamed to .getNormal().'); - return this.getNormal(target); - }; - - Triangle.prototype.plane = function (target) { - console.warn('THREE.Triangle: .plane() has been renamed to .getPlane().'); - return this.getPlane(target); - }; - - Triangle.barycoordFromPoint = function (point, a, b, c, target) { - console.warn('THREE.Triangle: .barycoordFromPoint() has been renamed to .getBarycoord().'); - return Triangle.getBarycoord(point, a, b, c, target); - }; - - Triangle.normal = function (a, b, c, target) { - console.warn('THREE.Triangle: .normal() has been renamed to .getNormal().'); - return Triangle.getNormal(a, b, c, target); - }; // - - - Shape.prototype.extractAllPoints = function (divisions) { - console.warn('THREE.Shape: .extractAllPoints() has been removed. Use .extractPoints() instead.'); - return this.extractPoints(divisions); - }; - - Shape.prototype.extrude = function (options) { - console.warn('THREE.Shape: .extrude() has been removed. Use ExtrudeGeometry() instead.'); - return new ExtrudeGeometry(this, options); - }; - - Shape.prototype.makeGeometry = function (options) { - console.warn('THREE.Shape: .makeGeometry() has been removed. Use ShapeGeometry() instead.'); - return new ShapeGeometry(this, options); - }; // - - - Vector2.prototype.fromAttribute = function (attribute, index, offset) { - console.warn('THREE.Vector2: .fromAttribute() has been renamed to .fromBufferAttribute().'); - return this.fromBufferAttribute(attribute, index, offset); - }; - - Vector2.prototype.distanceToManhattan = function (v) { - console.warn('THREE.Vector2: .distanceToManhattan() has been renamed to .manhattanDistanceTo().'); - return this.manhattanDistanceTo(v); - }; - - Vector2.prototype.lengthManhattan = function () { - console.warn('THREE.Vector2: .lengthManhattan() has been renamed to .manhattanLength().'); - return this.manhattanLength(); - }; // - - - Vector3.prototype.setEulerFromRotationMatrix = function () { - console.error('THREE.Vector3: .setEulerFromRotationMatrix() has been removed. Use Euler.setFromRotationMatrix() instead.'); - }; - - Vector3.prototype.setEulerFromQuaternion = function () { - console.error('THREE.Vector3: .setEulerFromQuaternion() has been removed. Use Euler.setFromQuaternion() instead.'); - }; - - Vector3.prototype.getPositionFromMatrix = function (m) { - console.warn('THREE.Vector3: .getPositionFromMatrix() has been renamed to .setFromMatrixPosition().'); - return this.setFromMatrixPosition(m); - }; - - Vector3.prototype.getScaleFromMatrix = function (m) { - console.warn('THREE.Vector3: .getScaleFromMatrix() has been renamed to .setFromMatrixScale().'); - return this.setFromMatrixScale(m); - }; - - Vector3.prototype.getColumnFromMatrix = function (index, matrix) { - console.warn('THREE.Vector3: .getColumnFromMatrix() has been renamed to .setFromMatrixColumn().'); - return this.setFromMatrixColumn(matrix, index); - }; - - Vector3.prototype.applyProjection = function (m) { - console.warn('THREE.Vector3: .applyProjection() has been removed. Use .applyMatrix4( m ) instead.'); - return this.applyMatrix4(m); - }; - - Vector3.prototype.fromAttribute = function (attribute, index, offset) { - console.warn('THREE.Vector3: .fromAttribute() has been renamed to .fromBufferAttribute().'); - return this.fromBufferAttribute(attribute, index, offset); - }; - - Vector3.prototype.distanceToManhattan = function (v) { - console.warn('THREE.Vector3: .distanceToManhattan() has been renamed to .manhattanDistanceTo().'); - return this.manhattanDistanceTo(v); - }; - - Vector3.prototype.lengthManhattan = function () { - console.warn('THREE.Vector3: .lengthManhattan() has been renamed to .manhattanLength().'); - return this.manhattanLength(); - }; // - - - Vector4.prototype.fromAttribute = function (attribute, index, offset) { - console.warn('THREE.Vector4: .fromAttribute() has been renamed to .fromBufferAttribute().'); - return this.fromBufferAttribute(attribute, index, offset); - }; - - Vector4.prototype.lengthManhattan = function () { - console.warn('THREE.Vector4: .lengthManhattan() has been renamed to .manhattanLength().'); - return this.manhattanLength(); - }; // - - - Object3D.prototype.getChildByName = function (name) { - console.warn('THREE.Object3D: .getChildByName() has been renamed to .getObjectByName().'); - return this.getObjectByName(name); - }; - - Object3D.prototype.renderDepth = function () { - console.warn('THREE.Object3D: .renderDepth has been removed. Use .renderOrder, instead.'); - }; - - Object3D.prototype.translate = function (distance, axis) { - console.warn('THREE.Object3D: .translate() has been removed. Use .translateOnAxis( axis, distance ) instead.'); - return this.translateOnAxis(axis, distance); - }; - - Object3D.prototype.getWorldRotation = function () { - console.error('THREE.Object3D: .getWorldRotation() has been removed. Use THREE.Object3D.getWorldQuaternion( target ) instead.'); - }; - - Object3D.prototype.applyMatrix = function (matrix) { - console.warn('THREE.Object3D: .applyMatrix() has been renamed to .applyMatrix4().'); - return this.applyMatrix4(matrix); - }; - - Object.defineProperties(Object3D.prototype, { - eulerOrder: { - get: function () { - console.warn('THREE.Object3D: .eulerOrder is now .rotation.order.'); - return this.rotation.order; - }, - set: function (value) { - console.warn('THREE.Object3D: .eulerOrder is now .rotation.order.'); - this.rotation.order = value; - } - }, - useQuaternion: { - get: function () { - console.warn('THREE.Object3D: .useQuaternion has been removed. The library now uses quaternions by default.'); - }, - set: function () { - console.warn('THREE.Object3D: .useQuaternion has been removed. The library now uses quaternions by default.'); - } - } - }); - - Mesh.prototype.setDrawMode = function () { - console.error('THREE.Mesh: .setDrawMode() has been removed. The renderer now always assumes THREE.TrianglesDrawMode. Transform your geometry via BufferGeometryUtils.toTrianglesDrawMode() if necessary.'); - }; - - Object.defineProperties(Mesh.prototype, { - drawMode: { - get: function () { - console.error('THREE.Mesh: .drawMode has been removed. The renderer now always assumes THREE.TrianglesDrawMode.'); - return TrianglesDrawMode; - }, - set: function () { - console.error('THREE.Mesh: .drawMode has been removed. The renderer now always assumes THREE.TrianglesDrawMode. Transform your geometry via BufferGeometryUtils.toTrianglesDrawMode() if necessary.'); - } - } - }); - - SkinnedMesh.prototype.initBones = function () { - console.error('THREE.SkinnedMesh: initBones() has been removed.'); - }; // - - - PerspectiveCamera.prototype.setLens = function (focalLength, filmGauge) { - console.warn('THREE.PerspectiveCamera.setLens is deprecated. ' + 'Use .setFocalLength and .filmGauge for a photographic setup.'); - if (filmGauge !== undefined) this.filmGauge = filmGauge; - this.setFocalLength(focalLength); - }; // - - - Object.defineProperties(Light.prototype, { - onlyShadow: { - set: function () { - console.warn('THREE.Light: .onlyShadow has been removed.'); - } - }, - shadowCameraFov: { - set: function (value) { - console.warn('THREE.Light: .shadowCameraFov is now .shadow.camera.fov.'); - this.shadow.camera.fov = value; - } - }, - shadowCameraLeft: { - set: function (value) { - console.warn('THREE.Light: .shadowCameraLeft is now .shadow.camera.left.'); - this.shadow.camera.left = value; - } - }, - shadowCameraRight: { - set: function (value) { - console.warn('THREE.Light: .shadowCameraRight is now .shadow.camera.right.'); - this.shadow.camera.right = value; - } - }, - shadowCameraTop: { - set: function (value) { - console.warn('THREE.Light: .shadowCameraTop is now .shadow.camera.top.'); - this.shadow.camera.top = value; - } - }, - shadowCameraBottom: { - set: function (value) { - console.warn('THREE.Light: .shadowCameraBottom is now .shadow.camera.bottom.'); - this.shadow.camera.bottom = value; - } - }, - shadowCameraNear: { - set: function (value) { - console.warn('THREE.Light: .shadowCameraNear is now .shadow.camera.near.'); - this.shadow.camera.near = value; - } - }, - shadowCameraFar: { - set: function (value) { - console.warn('THREE.Light: .shadowCameraFar is now .shadow.camera.far.'); - this.shadow.camera.far = value; - } - }, - shadowCameraVisible: { - set: function () { - console.warn('THREE.Light: .shadowCameraVisible has been removed. Use new THREE.CameraHelper( light.shadow.camera ) instead.'); - } - }, - shadowBias: { - set: function (value) { - console.warn('THREE.Light: .shadowBias is now .shadow.bias.'); - this.shadow.bias = value; - } - }, - shadowDarkness: { - set: function () { - console.warn('THREE.Light: .shadowDarkness has been removed.'); - } - }, - shadowMapWidth: { - set: function (value) { - console.warn('THREE.Light: .shadowMapWidth is now .shadow.mapSize.width.'); - this.shadow.mapSize.width = value; - } - }, - shadowMapHeight: { - set: function (value) { - console.warn('THREE.Light: .shadowMapHeight is now .shadow.mapSize.height.'); - this.shadow.mapSize.height = value; - } - } - }); // - - Object.defineProperties(BufferAttribute.prototype, { - length: { - get: function () { - console.warn('THREE.BufferAttribute: .length has been deprecated. Use .count instead.'); - return this.array.length; - } - }, - dynamic: { - get: function () { - console.warn('THREE.BufferAttribute: .dynamic has been deprecated. Use .usage instead.'); - return this.usage === DynamicDrawUsage; - }, - set: function - /* value */ - () { - console.warn('THREE.BufferAttribute: .dynamic has been deprecated. Use .usage instead.'); - this.setUsage(DynamicDrawUsage); - } - } - }); - - BufferAttribute.prototype.setDynamic = function (value) { - console.warn('THREE.BufferAttribute: .setDynamic() has been deprecated. Use .setUsage() instead.'); - this.setUsage(value === true ? DynamicDrawUsage : StaticDrawUsage); - return this; - }; - - BufferAttribute.prototype.copyIndicesArray = function - /* indices */ - () { - console.error('THREE.BufferAttribute: .copyIndicesArray() has been removed.'); - }, BufferAttribute.prototype.setArray = function - /* array */ - () { - console.error('THREE.BufferAttribute: .setArray has been removed. Use BufferGeometry .setAttribute to replace/resize attribute buffers'); - }; // - - BufferGeometry.prototype.addIndex = function (index) { - console.warn('THREE.BufferGeometry: .addIndex() has been renamed to .setIndex().'); - this.setIndex(index); - }; - - BufferGeometry.prototype.addAttribute = function (name, attribute) { - console.warn('THREE.BufferGeometry: .addAttribute() has been renamed to .setAttribute().'); - - if (!(attribute && attribute.isBufferAttribute) && !(attribute && attribute.isInterleavedBufferAttribute)) { - console.warn('THREE.BufferGeometry: .addAttribute() now expects ( name, attribute ).'); - return this.setAttribute(name, new BufferAttribute(arguments[1], arguments[2])); - } - - if (name === 'index') { - console.warn('THREE.BufferGeometry.addAttribute: Use .setIndex() for index attribute.'); - this.setIndex(attribute); - return this; - } - - return this.setAttribute(name, attribute); - }; - - BufferGeometry.prototype.addDrawCall = function (start, count, indexOffset) { - if (indexOffset !== undefined) { - console.warn('THREE.BufferGeometry: .addDrawCall() no longer supports indexOffset.'); - } - - console.warn('THREE.BufferGeometry: .addDrawCall() is now .addGroup().'); - this.addGroup(start, count); - }; - - BufferGeometry.prototype.clearDrawCalls = function () { - console.warn('THREE.BufferGeometry: .clearDrawCalls() is now .clearGroups().'); - this.clearGroups(); - }; - - BufferGeometry.prototype.computeOffsets = function () { - console.warn('THREE.BufferGeometry: .computeOffsets() has been removed.'); - }; - - BufferGeometry.prototype.removeAttribute = function (name) { - console.warn('THREE.BufferGeometry: .removeAttribute() has been renamed to .deleteAttribute().'); - return this.deleteAttribute(name); - }; - - BufferGeometry.prototype.applyMatrix = function (matrix) { - console.warn('THREE.BufferGeometry: .applyMatrix() has been renamed to .applyMatrix4().'); - return this.applyMatrix4(matrix); - }; - - Object.defineProperties(BufferGeometry.prototype, { - drawcalls: { - get: function () { - console.error('THREE.BufferGeometry: .drawcalls has been renamed to .groups.'); - return this.groups; - } - }, - offsets: { - get: function () { - console.warn('THREE.BufferGeometry: .offsets has been renamed to .groups.'); - return this.groups; - } - } - }); - - InterleavedBuffer.prototype.setDynamic = function (value) { - console.warn('THREE.InterleavedBuffer: .setDynamic() has been deprecated. Use .setUsage() instead.'); - this.setUsage(value === true ? DynamicDrawUsage : StaticDrawUsage); - return this; - }; - - InterleavedBuffer.prototype.setArray = function - /* array */ - () { - console.error('THREE.InterleavedBuffer: .setArray has been removed. Use BufferGeometry .setAttribute to replace/resize attribute buffers'); - }; // - - - ExtrudeGeometry.prototype.getArrays = function () { - console.error('THREE.ExtrudeGeometry: .getArrays() has been removed.'); - }; - - ExtrudeGeometry.prototype.addShapeList = function () { - console.error('THREE.ExtrudeGeometry: .addShapeList() has been removed.'); - }; - - ExtrudeGeometry.prototype.addShape = function () { - console.error('THREE.ExtrudeGeometry: .addShape() has been removed.'); - }; // - - - Scene.prototype.dispose = function () { - console.error('THREE.Scene: .dispose() has been removed.'); - }; // - - - Uniform.prototype.onUpdate = function () { - console.warn('THREE.Uniform: .onUpdate() has been removed. Use object.onBeforeRender() instead.'); - return this; - }; // - - - Object.defineProperties(Material.prototype, { - wrapAround: { - get: function () { - console.warn('THREE.Material: .wrapAround has been removed.'); - }, - set: function () { - console.warn('THREE.Material: .wrapAround has been removed.'); - } - }, - overdraw: { - get: function () { - console.warn('THREE.Material: .overdraw has been removed.'); - }, - set: function () { - console.warn('THREE.Material: .overdraw has been removed.'); - } - }, - wrapRGB: { - get: function () { - console.warn('THREE.Material: .wrapRGB has been removed.'); - return new Color(); - } - }, - shading: { - get: function () { - console.error('THREE.' + this.type + ': .shading has been removed. Use the boolean .flatShading instead.'); - }, - set: function (value) { - console.warn('THREE.' + this.type + ': .shading has been removed. Use the boolean .flatShading instead.'); - this.flatShading = value === FlatShading; - } - }, - stencilMask: { - get: function () { - console.warn('THREE.' + this.type + ': .stencilMask has been removed. Use .stencilFuncMask instead.'); - return this.stencilFuncMask; - }, - set: function (value) { - console.warn('THREE.' + this.type + ': .stencilMask has been removed. Use .stencilFuncMask instead.'); - this.stencilFuncMask = value; - } - }, - vertexTangents: { - get: function () { - console.warn('THREE.' + this.type + ': .vertexTangents has been removed.'); - }, - set: function () { - console.warn('THREE.' + this.type + ': .vertexTangents has been removed.'); - } - } - }); - Object.defineProperties(ShaderMaterial.prototype, { - derivatives: { - get: function () { - console.warn('THREE.ShaderMaterial: .derivatives has been moved to .extensions.derivatives.'); - return this.extensions.derivatives; - }, - set: function (value) { - console.warn('THREE. ShaderMaterial: .derivatives has been moved to .extensions.derivatives.'); - this.extensions.derivatives = value; - } - } - }); // - - WebGLRenderer.prototype.clearTarget = function (renderTarget, color, depth, stencil) { - console.warn('THREE.WebGLRenderer: .clearTarget() has been deprecated. Use .setRenderTarget() and .clear() instead.'); - this.setRenderTarget(renderTarget); - this.clear(color, depth, stencil); - }; - - WebGLRenderer.prototype.animate = function (callback) { - console.warn('THREE.WebGLRenderer: .animate() is now .setAnimationLoop().'); - this.setAnimationLoop(callback); - }; - - WebGLRenderer.prototype.getCurrentRenderTarget = function () { - console.warn('THREE.WebGLRenderer: .getCurrentRenderTarget() is now .getRenderTarget().'); - return this.getRenderTarget(); - }; - - WebGLRenderer.prototype.getMaxAnisotropy = function () { - console.warn('THREE.WebGLRenderer: .getMaxAnisotropy() is now .capabilities.getMaxAnisotropy().'); - return this.capabilities.getMaxAnisotropy(); - }; - - WebGLRenderer.prototype.getPrecision = function () { - console.warn('THREE.WebGLRenderer: .getPrecision() is now .capabilities.precision.'); - return this.capabilities.precision; - }; - - WebGLRenderer.prototype.resetGLState = function () { - console.warn('THREE.WebGLRenderer: .resetGLState() is now .state.reset().'); - return this.state.reset(); - }; - - WebGLRenderer.prototype.supportsFloatTextures = function () { - console.warn('THREE.WebGLRenderer: .supportsFloatTextures() is now .extensions.get( \'OES_texture_float\' ).'); - return this.extensions.get('OES_texture_float'); - }; - - WebGLRenderer.prototype.supportsHalfFloatTextures = function () { - console.warn('THREE.WebGLRenderer: .supportsHalfFloatTextures() is now .extensions.get( \'OES_texture_half_float\' ).'); - return this.extensions.get('OES_texture_half_float'); - }; - - WebGLRenderer.prototype.supportsStandardDerivatives = function () { - console.warn('THREE.WebGLRenderer: .supportsStandardDerivatives() is now .extensions.get( \'OES_standard_derivatives\' ).'); - return this.extensions.get('OES_standard_derivatives'); - }; - - WebGLRenderer.prototype.supportsCompressedTextureS3TC = function () { - console.warn('THREE.WebGLRenderer: .supportsCompressedTextureS3TC() is now .extensions.get( \'WEBGL_compressed_texture_s3tc\' ).'); - return this.extensions.get('WEBGL_compressed_texture_s3tc'); - }; - - WebGLRenderer.prototype.supportsCompressedTexturePVRTC = function () { - console.warn('THREE.WebGLRenderer: .supportsCompressedTexturePVRTC() is now .extensions.get( \'WEBGL_compressed_texture_pvrtc\' ).'); - return this.extensions.get('WEBGL_compressed_texture_pvrtc'); - }; - - WebGLRenderer.prototype.supportsBlendMinMax = function () { - console.warn('THREE.WebGLRenderer: .supportsBlendMinMax() is now .extensions.get( \'EXT_blend_minmax\' ).'); - return this.extensions.get('EXT_blend_minmax'); - }; - - WebGLRenderer.prototype.supportsVertexTextures = function () { - console.warn('THREE.WebGLRenderer: .supportsVertexTextures() is now .capabilities.vertexTextures.'); - return this.capabilities.vertexTextures; - }; - - WebGLRenderer.prototype.supportsInstancedArrays = function () { - console.warn('THREE.WebGLRenderer: .supportsInstancedArrays() is now .extensions.get( \'ANGLE_instanced_arrays\' ).'); - return this.extensions.get('ANGLE_instanced_arrays'); - }; - - WebGLRenderer.prototype.enableScissorTest = function (boolean) { - console.warn('THREE.WebGLRenderer: .enableScissorTest() is now .setScissorTest().'); - this.setScissorTest(boolean); - }; - - WebGLRenderer.prototype.initMaterial = function () { - console.warn('THREE.WebGLRenderer: .initMaterial() has been removed.'); - }; - - WebGLRenderer.prototype.addPrePlugin = function () { - console.warn('THREE.WebGLRenderer: .addPrePlugin() has been removed.'); - }; - - WebGLRenderer.prototype.addPostPlugin = function () { - console.warn('THREE.WebGLRenderer: .addPostPlugin() has been removed.'); - }; - - WebGLRenderer.prototype.updateShadowMap = function () { - console.warn('THREE.WebGLRenderer: .updateShadowMap() has been removed.'); - }; - - WebGLRenderer.prototype.setFaceCulling = function () { - console.warn('THREE.WebGLRenderer: .setFaceCulling() has been removed.'); - }; - - WebGLRenderer.prototype.allocTextureUnit = function () { - console.warn('THREE.WebGLRenderer: .allocTextureUnit() has been removed.'); - }; - - WebGLRenderer.prototype.setTexture = function () { - console.warn('THREE.WebGLRenderer: .setTexture() has been removed.'); - }; - - WebGLRenderer.prototype.setTexture2D = function () { - console.warn('THREE.WebGLRenderer: .setTexture2D() has been removed.'); - }; - - WebGLRenderer.prototype.setTextureCube = function () { - console.warn('THREE.WebGLRenderer: .setTextureCube() has been removed.'); - }; - - WebGLRenderer.prototype.getActiveMipMapLevel = function () { - console.warn('THREE.WebGLRenderer: .getActiveMipMapLevel() is now .getActiveMipmapLevel().'); - return this.getActiveMipmapLevel(); - }; - - Object.defineProperties(WebGLRenderer.prototype, { - shadowMapEnabled: { - get: function () { - return this.shadowMap.enabled; - }, - set: function (value) { - console.warn('THREE.WebGLRenderer: .shadowMapEnabled is now .shadowMap.enabled.'); - this.shadowMap.enabled = value; - } - }, - shadowMapType: { - get: function () { - return this.shadowMap.type; - }, - set: function (value) { - console.warn('THREE.WebGLRenderer: .shadowMapType is now .shadowMap.type.'); - this.shadowMap.type = value; - } - }, - shadowMapCullFace: { - get: function () { - console.warn('THREE.WebGLRenderer: .shadowMapCullFace has been removed. Set Material.shadowSide instead.'); - return undefined; - }, - set: function - /* value */ - () { - console.warn('THREE.WebGLRenderer: .shadowMapCullFace has been removed. Set Material.shadowSide instead.'); - } - }, - context: { - get: function () { - console.warn('THREE.WebGLRenderer: .context has been removed. Use .getContext() instead.'); - return this.getContext(); - } - }, - vr: { - get: function () { - console.warn('THREE.WebGLRenderer: .vr has been renamed to .xr'); - return this.xr; - } - }, - gammaInput: { - get: function () { - console.warn('THREE.WebGLRenderer: .gammaInput has been removed. Set the encoding for textures via Texture.encoding instead.'); - return false; - }, - set: function () { - console.warn('THREE.WebGLRenderer: .gammaInput has been removed. Set the encoding for textures via Texture.encoding instead.'); - } - }, - gammaOutput: { - get: function () { - console.warn('THREE.WebGLRenderer: .gammaOutput has been removed. Set WebGLRenderer.outputEncoding instead.'); - return false; - }, - set: function (value) { - console.warn('THREE.WebGLRenderer: .gammaOutput has been removed. Set WebGLRenderer.outputEncoding instead.'); - this.outputEncoding = value === true ? sRGBEncoding : LinearEncoding; - } - }, - toneMappingWhitePoint: { - get: function () { - console.warn('THREE.WebGLRenderer: .toneMappingWhitePoint has been removed.'); - return 1.0; - }, - set: function () { - console.warn('THREE.WebGLRenderer: .toneMappingWhitePoint has been removed.'); - } - }, - gammaFactor: { - get: function () { - console.warn('THREE.WebGLRenderer: .gammaFactor has been removed.'); - return 2; - }, - set: function () { - console.warn('THREE.WebGLRenderer: .gammaFactor has been removed.'); - } - } - }); - Object.defineProperties(WebGLShadowMap.prototype, { - cullFace: { - get: function () { - console.warn('THREE.WebGLRenderer: .shadowMap.cullFace has been removed. Set Material.shadowSide instead.'); - return undefined; - }, - set: function - /* cullFace */ - () { - console.warn('THREE.WebGLRenderer: .shadowMap.cullFace has been removed. Set Material.shadowSide instead.'); - } - }, - renderReverseSided: { - get: function () { - console.warn('THREE.WebGLRenderer: .shadowMap.renderReverseSided has been removed. Set Material.shadowSide instead.'); - return undefined; - }, - set: function () { - console.warn('THREE.WebGLRenderer: .shadowMap.renderReverseSided has been removed. Set Material.shadowSide instead.'); - } - }, - renderSingleSided: { - get: function () { - console.warn('THREE.WebGLRenderer: .shadowMap.renderSingleSided has been removed. Set Material.shadowSide instead.'); - return undefined; - }, - set: function () { - console.warn('THREE.WebGLRenderer: .shadowMap.renderSingleSided has been removed. Set Material.shadowSide instead.'); - } - } - }); - class WebGLRenderTargetCube extends WebGLCubeRenderTarget { - constructor(width, height, options) { - console.warn('THREE.WebGLRenderTargetCube( width, height, options ) is now WebGLCubeRenderTarget( size, options ).'); - super(width, options); - } - - } // - - Object.defineProperties(WebGLRenderTarget.prototype, { - wrapS: { - get: function () { - console.warn('THREE.WebGLRenderTarget: .wrapS is now .texture.wrapS.'); - return this.texture.wrapS; - }, - set: function (value) { - console.warn('THREE.WebGLRenderTarget: .wrapS is now .texture.wrapS.'); - this.texture.wrapS = value; - } - }, - wrapT: { - get: function () { - console.warn('THREE.WebGLRenderTarget: .wrapT is now .texture.wrapT.'); - return this.texture.wrapT; - }, - set: function (value) { - console.warn('THREE.WebGLRenderTarget: .wrapT is now .texture.wrapT.'); - this.texture.wrapT = value; - } - }, - magFilter: { - get: function () { - console.warn('THREE.WebGLRenderTarget: .magFilter is now .texture.magFilter.'); - return this.texture.magFilter; - }, - set: function (value) { - console.warn('THREE.WebGLRenderTarget: .magFilter is now .texture.magFilter.'); - this.texture.magFilter = value; - } - }, - minFilter: { - get: function () { - console.warn('THREE.WebGLRenderTarget: .minFilter is now .texture.minFilter.'); - return this.texture.minFilter; - }, - set: function (value) { - console.warn('THREE.WebGLRenderTarget: .minFilter is now .texture.minFilter.'); - this.texture.minFilter = value; - } - }, - anisotropy: { - get: function () { - console.warn('THREE.WebGLRenderTarget: .anisotropy is now .texture.anisotropy.'); - return this.texture.anisotropy; - }, - set: function (value) { - console.warn('THREE.WebGLRenderTarget: .anisotropy is now .texture.anisotropy.'); - this.texture.anisotropy = value; - } - }, - offset: { - get: function () { - console.warn('THREE.WebGLRenderTarget: .offset is now .texture.offset.'); - return this.texture.offset; - }, - set: function (value) { - console.warn('THREE.WebGLRenderTarget: .offset is now .texture.offset.'); - this.texture.offset = value; - } - }, - repeat: { - get: function () { - console.warn('THREE.WebGLRenderTarget: .repeat is now .texture.repeat.'); - return this.texture.repeat; - }, - set: function (value) { - console.warn('THREE.WebGLRenderTarget: .repeat is now .texture.repeat.'); - this.texture.repeat = value; - } - }, - format: { - get: function () { - console.warn('THREE.WebGLRenderTarget: .format is now .texture.format.'); - return this.texture.format; - }, - set: function (value) { - console.warn('THREE.WebGLRenderTarget: .format is now .texture.format.'); - this.texture.format = value; - } - }, - type: { - get: function () { - console.warn('THREE.WebGLRenderTarget: .type is now .texture.type.'); - return this.texture.type; - }, - set: function (value) { - console.warn('THREE.WebGLRenderTarget: .type is now .texture.type.'); - this.texture.type = value; - } - }, - generateMipmaps: { - get: function () { - console.warn('THREE.WebGLRenderTarget: .generateMipmaps is now .texture.generateMipmaps.'); - return this.texture.generateMipmaps; - }, - set: function (value) { - console.warn('THREE.WebGLRenderTarget: .generateMipmaps is now .texture.generateMipmaps.'); - this.texture.generateMipmaps = value; - } - } - }); // - - Audio.prototype.load = function (file) { - console.warn('THREE.Audio: .load has been deprecated. Use THREE.AudioLoader instead.'); - const scope = this; - const audioLoader = new AudioLoader(); - audioLoader.load(file, function (buffer) { - scope.setBuffer(buffer); - }); - return this; - }; - - AudioAnalyser.prototype.getData = function () { - console.warn('THREE.AudioAnalyser: .getData() is now .getFrequencyData().'); - return this.getFrequencyData(); - }; // - - - CubeCamera.prototype.updateCubeMap = function (renderer, scene) { - console.warn('THREE.CubeCamera: .updateCubeMap() is now .update().'); - return this.update(renderer, scene); - }; - - CubeCamera.prototype.clear = function (renderer, color, depth, stencil) { - console.warn('THREE.CubeCamera: .clear() is now .renderTarget.clear().'); - return this.renderTarget.clear(renderer, color, depth, stencil); - }; - - ImageUtils.crossOrigin = undefined; - - ImageUtils.loadTexture = function (url, mapping, onLoad, onError) { - console.warn('THREE.ImageUtils.loadTexture has been deprecated. Use THREE.TextureLoader() instead.'); - const loader = new TextureLoader(); - loader.setCrossOrigin(this.crossOrigin); - const texture = loader.load(url, onLoad, undefined, onError); - if (mapping) texture.mapping = mapping; - return texture; - }; - - ImageUtils.loadTextureCube = function (urls, mapping, onLoad, onError) { - console.warn('THREE.ImageUtils.loadTextureCube has been deprecated. Use THREE.CubeTextureLoader() instead.'); - const loader = new CubeTextureLoader(); - loader.setCrossOrigin(this.crossOrigin); - const texture = loader.load(urls, onLoad, undefined, onError); - if (mapping) texture.mapping = mapping; - return texture; - }; - - ImageUtils.loadCompressedTexture = function () { - console.error('THREE.ImageUtils.loadCompressedTexture has been removed. Use THREE.DDSLoader instead.'); - }; - - ImageUtils.loadCompressedTextureCube = function () { - console.error('THREE.ImageUtils.loadCompressedTextureCube has been removed. Use THREE.DDSLoader instead.'); - }; // - - - function CanvasRenderer() { - console.error('THREE.CanvasRenderer has been removed'); - } // - - function JSONLoader() { - console.error('THREE.JSONLoader has been removed.'); - } // - - const SceneUtils = { - createMultiMaterialObject: function - /* geometry, materials */ - () { - console.error('THREE.SceneUtils has been moved to /examples/jsm/utils/SceneUtils.js'); - }, - detach: function - /* child, parent, scene */ - () { - console.error('THREE.SceneUtils has been moved to /examples/jsm/utils/SceneUtils.js'); - }, - attach: function - /* child, scene, parent */ - () { - console.error('THREE.SceneUtils has been moved to /examples/jsm/utils/SceneUtils.js'); - } - }; // - - function LensFlare() { - console.error('THREE.LensFlare has been moved to /examples/jsm/objects/Lensflare.js'); - } // - - class ParametricGeometry extends BufferGeometry { - constructor() { - console.error('THREE.ParametricGeometry has been moved to /examples/jsm/geometries/ParametricGeometry.js'); - super(); - } - - } - class TextGeometry extends BufferGeometry { - constructor() { - console.error('THREE.TextGeometry has been moved to /examples/jsm/geometries/TextGeometry.js'); - super(); - } - - } - function FontLoader() { - console.error('THREE.FontLoader has been moved to /examples/jsm/loaders/FontLoader.js'); - } - function Font() { - console.error('THREE.Font has been moved to /examples/jsm/loaders/FontLoader.js'); - } - function ImmediateRenderObject() { - console.error('THREE.ImmediateRenderObject has been removed.'); - } - class WebGLMultisampleRenderTarget extends WebGLRenderTarget { - constructor(width, height, options) { - console.error('THREE.WebGLMultisampleRenderTarget has been removed. Use a normal render target and set the "samples" property to greater 0 to enable multisampling.'); - super(width, height, options); - this.samples = 4; - } - - } - class DataTexture2DArray extends DataArrayTexture { - constructor(data, width, height, depth) { - console.warn('THREE.DataTexture2DArray has been renamed to DataArrayTexture.'); - super(data, width, height, depth); - } - - } - class DataTexture3D extends Data3DTexture { - constructor(data, width, height, depth) { - console.warn('THREE.DataTexture3D has been renamed to Data3DTexture.'); - super(data, width, height, depth); - } - - } - - if (typeof __THREE_DEVTOOLS__ !== 'undefined') { - __THREE_DEVTOOLS__.dispatchEvent(new CustomEvent('register', { - detail: { - revision: REVISION - } - })); - } - - if (typeof window !== 'undefined') { - if (window.__THREE__) { - console.warn('WARNING: Multiple instances of Three.js being imported.'); - } else { - window.__THREE__ = REVISION; - } - } - - exports.ACESFilmicToneMapping = ACESFilmicToneMapping; - exports.AddEquation = AddEquation; - exports.AddOperation = AddOperation; - exports.AdditiveAnimationBlendMode = AdditiveAnimationBlendMode; - exports.AdditiveBlending = AdditiveBlending; - exports.AlphaFormat = AlphaFormat; - exports.AlwaysDepth = AlwaysDepth; - exports.AlwaysStencilFunc = AlwaysStencilFunc; - exports.AmbientLight = AmbientLight; - exports.AmbientLightProbe = AmbientLightProbe; - exports.AnimationClip = AnimationClip; - exports.AnimationLoader = AnimationLoader; - exports.AnimationMixer = AnimationMixer; - exports.AnimationObjectGroup = AnimationObjectGroup; - exports.AnimationUtils = AnimationUtils; - exports.ArcCurve = ArcCurve; - exports.ArrayCamera = ArrayCamera; - exports.ArrowHelper = ArrowHelper; - exports.Audio = Audio; - exports.AudioAnalyser = AudioAnalyser; - exports.AudioContext = AudioContext; - exports.AudioListener = AudioListener; - exports.AudioLoader = AudioLoader; - exports.AxesHelper = AxesHelper; - exports.AxisHelper = AxisHelper; - exports.BackSide = BackSide; - exports.BasicDepthPacking = BasicDepthPacking; - exports.BasicShadowMap = BasicShadowMap; - exports.BinaryTextureLoader = BinaryTextureLoader; - exports.Bone = Bone; - exports.BooleanKeyframeTrack = BooleanKeyframeTrack; - exports.BoundingBoxHelper = BoundingBoxHelper; - exports.Box2 = Box2; - exports.Box3 = Box3; - exports.Box3Helper = Box3Helper; - exports.BoxBufferGeometry = BoxGeometry; - exports.BoxGeometry = BoxGeometry; - exports.BoxHelper = BoxHelper; - exports.BufferAttribute = BufferAttribute; - exports.BufferGeometry = BufferGeometry; - exports.BufferGeometryLoader = BufferGeometryLoader; - exports.ByteType = ByteType; - exports.Cache = Cache; - exports.Camera = Camera; - exports.CameraHelper = CameraHelper; - exports.CanvasRenderer = CanvasRenderer; - exports.CanvasTexture = CanvasTexture; - exports.CapsuleBufferGeometry = CapsuleGeometry; - exports.CapsuleGeometry = CapsuleGeometry; - exports.CatmullRomCurve3 = CatmullRomCurve3; - exports.CineonToneMapping = CineonToneMapping; - exports.CircleBufferGeometry = CircleGeometry; - exports.CircleGeometry = CircleGeometry; - exports.ClampToEdgeWrapping = ClampToEdgeWrapping; - exports.Clock = Clock; - exports.Color = Color; - exports.ColorKeyframeTrack = ColorKeyframeTrack; - exports.ColorManagement = ColorManagement; - exports.CompressedTexture = CompressedTexture; - exports.CompressedTextureLoader = CompressedTextureLoader; - exports.ConeBufferGeometry = ConeGeometry; - exports.ConeGeometry = ConeGeometry; - exports.CubeCamera = CubeCamera; - exports.CubeReflectionMapping = CubeReflectionMapping; - exports.CubeRefractionMapping = CubeRefractionMapping; - exports.CubeTexture = CubeTexture; - exports.CubeTextureLoader = CubeTextureLoader; - exports.CubeUVReflectionMapping = CubeUVReflectionMapping; - exports.CubicBezierCurve = CubicBezierCurve; - exports.CubicBezierCurve3 = CubicBezierCurve3; - exports.CubicInterpolant = CubicInterpolant; - exports.CullFaceBack = CullFaceBack; - exports.CullFaceFront = CullFaceFront; - exports.CullFaceFrontBack = CullFaceFrontBack; - exports.CullFaceNone = CullFaceNone; - exports.Curve = Curve; - exports.CurvePath = CurvePath; - exports.CustomBlending = CustomBlending; - exports.CustomToneMapping = CustomToneMapping; - exports.CylinderBufferGeometry = CylinderGeometry; - exports.CylinderGeometry = CylinderGeometry; - exports.Cylindrical = Cylindrical; - exports.Data3DTexture = Data3DTexture; - exports.DataArrayTexture = DataArrayTexture; - exports.DataTexture = DataTexture; - exports.DataTexture2DArray = DataTexture2DArray; - exports.DataTexture3D = DataTexture3D; - exports.DataTextureLoader = DataTextureLoader; - exports.DataUtils = DataUtils; - exports.DecrementStencilOp = DecrementStencilOp; - exports.DecrementWrapStencilOp = DecrementWrapStencilOp; - exports.DefaultLoadingManager = DefaultLoadingManager; - exports.DepthFormat = DepthFormat; - exports.DepthStencilFormat = DepthStencilFormat; - exports.DepthTexture = DepthTexture; - exports.DirectionalLight = DirectionalLight; - exports.DirectionalLightHelper = DirectionalLightHelper; - exports.DiscreteInterpolant = DiscreteInterpolant; - exports.DodecahedronBufferGeometry = DodecahedronGeometry; - exports.DodecahedronGeometry = DodecahedronGeometry; - exports.DoubleSide = DoubleSide; - exports.DstAlphaFactor = DstAlphaFactor; - exports.DstColorFactor = DstColorFactor; - exports.DynamicBufferAttribute = DynamicBufferAttribute; - exports.DynamicCopyUsage = DynamicCopyUsage; - exports.DynamicDrawUsage = DynamicDrawUsage; - exports.DynamicReadUsage = DynamicReadUsage; - exports.EdgesGeometry = EdgesGeometry; - exports.EdgesHelper = EdgesHelper; - exports.EllipseCurve = EllipseCurve; - exports.EqualDepth = EqualDepth; - exports.EqualStencilFunc = EqualStencilFunc; - exports.EquirectangularReflectionMapping = EquirectangularReflectionMapping; - exports.EquirectangularRefractionMapping = EquirectangularRefractionMapping; - exports.Euler = Euler; - exports.EventDispatcher = EventDispatcher; - exports.ExtrudeBufferGeometry = ExtrudeGeometry; - exports.ExtrudeGeometry = ExtrudeGeometry; - exports.FaceColors = FaceColors; - exports.FileLoader = FileLoader; - exports.FlatShading = FlatShading; - exports.Float16BufferAttribute = Float16BufferAttribute; - exports.Float32Attribute = Float32Attribute; - exports.Float32BufferAttribute = Float32BufferAttribute; - exports.Float64Attribute = Float64Attribute; - exports.Float64BufferAttribute = Float64BufferAttribute; - exports.FloatType = FloatType; - exports.Fog = Fog; - exports.FogExp2 = FogExp2; - exports.Font = Font; - exports.FontLoader = FontLoader; - exports.FramebufferTexture = FramebufferTexture; - exports.FrontSide = FrontSide; - exports.Frustum = Frustum; - exports.GLBufferAttribute = GLBufferAttribute; - exports.GLSL1 = GLSL1; - exports.GLSL3 = GLSL3; - exports.GreaterDepth = GreaterDepth; - exports.GreaterEqualDepth = GreaterEqualDepth; - exports.GreaterEqualStencilFunc = GreaterEqualStencilFunc; - exports.GreaterStencilFunc = GreaterStencilFunc; - exports.GridHelper = GridHelper; - exports.Group = Group; - exports.HalfFloatType = HalfFloatType; - exports.HemisphereLight = HemisphereLight; - exports.HemisphereLightHelper = HemisphereLightHelper; - exports.HemisphereLightProbe = HemisphereLightProbe; - exports.IcosahedronBufferGeometry = IcosahedronGeometry; - exports.IcosahedronGeometry = IcosahedronGeometry; - exports.ImageBitmapLoader = ImageBitmapLoader; - exports.ImageLoader = ImageLoader; - exports.ImageUtils = ImageUtils; - exports.ImmediateRenderObject = ImmediateRenderObject; - exports.IncrementStencilOp = IncrementStencilOp; - exports.IncrementWrapStencilOp = IncrementWrapStencilOp; - exports.InstancedBufferAttribute = InstancedBufferAttribute; - exports.InstancedBufferGeometry = InstancedBufferGeometry; - exports.InstancedInterleavedBuffer = InstancedInterleavedBuffer; - exports.InstancedMesh = InstancedMesh; - exports.Int16Attribute = Int16Attribute; - exports.Int16BufferAttribute = Int16BufferAttribute; - exports.Int32Attribute = Int32Attribute; - exports.Int32BufferAttribute = Int32BufferAttribute; - exports.Int8Attribute = Int8Attribute; - exports.Int8BufferAttribute = Int8BufferAttribute; - exports.IntType = IntType; - exports.InterleavedBuffer = InterleavedBuffer; - exports.InterleavedBufferAttribute = InterleavedBufferAttribute; - exports.Interpolant = Interpolant; - exports.InterpolateDiscrete = InterpolateDiscrete; - exports.InterpolateLinear = InterpolateLinear; - exports.InterpolateSmooth = InterpolateSmooth; - exports.InvertStencilOp = InvertStencilOp; - exports.JSONLoader = JSONLoader; - exports.KeepStencilOp = KeepStencilOp; - exports.KeyframeTrack = KeyframeTrack; - exports.LOD = LOD; - exports.LatheBufferGeometry = LatheGeometry; - exports.LatheGeometry = LatheGeometry; - exports.Layers = Layers; - exports.LensFlare = LensFlare; - exports.LessDepth = LessDepth; - exports.LessEqualDepth = LessEqualDepth; - exports.LessEqualStencilFunc = LessEqualStencilFunc; - exports.LessStencilFunc = LessStencilFunc; - exports.Light = Light; - exports.LightProbe = LightProbe; - exports.Line = Line; - exports.Line3 = Line3; - exports.LineBasicMaterial = LineBasicMaterial; - exports.LineCurve = LineCurve; - exports.LineCurve3 = LineCurve3; - exports.LineDashedMaterial = LineDashedMaterial; - exports.LineLoop = LineLoop; - exports.LinePieces = LinePieces; - exports.LineSegments = LineSegments; - exports.LineStrip = LineStrip; - exports.LinearEncoding = LinearEncoding; - exports.LinearFilter = LinearFilter; - exports.LinearInterpolant = LinearInterpolant; - exports.LinearMipMapLinearFilter = LinearMipMapLinearFilter; - exports.LinearMipMapNearestFilter = LinearMipMapNearestFilter; - exports.LinearMipmapLinearFilter = LinearMipmapLinearFilter; - exports.LinearMipmapNearestFilter = LinearMipmapNearestFilter; - exports.LinearSRGBColorSpace = LinearSRGBColorSpace; - exports.LinearToneMapping = LinearToneMapping; - exports.Loader = Loader; - exports.LoaderUtils = LoaderUtils; - exports.LoadingManager = LoadingManager; - exports.LoopOnce = LoopOnce; - exports.LoopPingPong = LoopPingPong; - exports.LoopRepeat = LoopRepeat; - exports.LuminanceAlphaFormat = LuminanceAlphaFormat; - exports.LuminanceFormat = LuminanceFormat; - exports.MOUSE = MOUSE; - exports.Material = Material; - exports.MaterialLoader = MaterialLoader; - exports.Math = MathUtils; - exports.MathUtils = MathUtils; - exports.Matrix3 = Matrix3; - exports.Matrix4 = Matrix4; - exports.MaxEquation = MaxEquation; - exports.Mesh = Mesh; - exports.MeshBasicMaterial = MeshBasicMaterial; - exports.MeshDepthMaterial = MeshDepthMaterial; - exports.MeshDistanceMaterial = MeshDistanceMaterial; - exports.MeshFaceMaterial = MeshFaceMaterial; - exports.MeshLambertMaterial = MeshLambertMaterial; - exports.MeshMatcapMaterial = MeshMatcapMaterial; - exports.MeshNormalMaterial = MeshNormalMaterial; - exports.MeshPhongMaterial = MeshPhongMaterial; - exports.MeshPhysicalMaterial = MeshPhysicalMaterial; - exports.MeshStandardMaterial = MeshStandardMaterial; - exports.MeshToonMaterial = MeshToonMaterial; - exports.MinEquation = MinEquation; - exports.MirroredRepeatWrapping = MirroredRepeatWrapping; - exports.MixOperation = MixOperation; - exports.MultiMaterial = MultiMaterial; - exports.MultiplyBlending = MultiplyBlending; - exports.MultiplyOperation = MultiplyOperation; - exports.NearestFilter = NearestFilter; - exports.NearestMipMapLinearFilter = NearestMipMapLinearFilter; - exports.NearestMipMapNearestFilter = NearestMipMapNearestFilter; - exports.NearestMipmapLinearFilter = NearestMipmapLinearFilter; - exports.NearestMipmapNearestFilter = NearestMipmapNearestFilter; - exports.NeverDepth = NeverDepth; - exports.NeverStencilFunc = NeverStencilFunc; - exports.NoBlending = NoBlending; - exports.NoColorSpace = NoColorSpace; - exports.NoColors = NoColors; - exports.NoToneMapping = NoToneMapping; - exports.NormalAnimationBlendMode = NormalAnimationBlendMode; - exports.NormalBlending = NormalBlending; - exports.NotEqualDepth = NotEqualDepth; - exports.NotEqualStencilFunc = NotEqualStencilFunc; - exports.NumberKeyframeTrack = NumberKeyframeTrack; - exports.Object3D = Object3D; - exports.ObjectLoader = ObjectLoader; - exports.ObjectSpaceNormalMap = ObjectSpaceNormalMap; - exports.OctahedronBufferGeometry = OctahedronGeometry; - exports.OctahedronGeometry = OctahedronGeometry; - exports.OneFactor = OneFactor; - exports.OneMinusDstAlphaFactor = OneMinusDstAlphaFactor; - exports.OneMinusDstColorFactor = OneMinusDstColorFactor; - exports.OneMinusSrcAlphaFactor = OneMinusSrcAlphaFactor; - exports.OneMinusSrcColorFactor = OneMinusSrcColorFactor; - exports.OrthographicCamera = OrthographicCamera; - exports.PCFShadowMap = PCFShadowMap; - exports.PCFSoftShadowMap = PCFSoftShadowMap; - exports.PMREMGenerator = PMREMGenerator; - exports.ParametricGeometry = ParametricGeometry; - exports.Particle = Particle; - exports.ParticleBasicMaterial = ParticleBasicMaterial; - exports.ParticleSystem = ParticleSystem; - exports.ParticleSystemMaterial = ParticleSystemMaterial; - exports.Path = Path; - exports.PerspectiveCamera = PerspectiveCamera; - exports.Plane = Plane; - exports.PlaneBufferGeometry = PlaneGeometry; - exports.PlaneGeometry = PlaneGeometry; - exports.PlaneHelper = PlaneHelper; - exports.PointCloud = PointCloud; - exports.PointCloudMaterial = PointCloudMaterial; - exports.PointLight = PointLight; - exports.PointLightHelper = PointLightHelper; - exports.Points = Points; - exports.PointsMaterial = PointsMaterial; - exports.PolarGridHelper = PolarGridHelper; - exports.PolyhedronBufferGeometry = PolyhedronGeometry; - exports.PolyhedronGeometry = PolyhedronGeometry; - exports.PositionalAudio = PositionalAudio; - exports.PropertyBinding = PropertyBinding; - exports.PropertyMixer = PropertyMixer; - exports.QuadraticBezierCurve = QuadraticBezierCurve; - exports.QuadraticBezierCurve3 = QuadraticBezierCurve3; - exports.Quaternion = Quaternion; - exports.QuaternionKeyframeTrack = QuaternionKeyframeTrack; - exports.QuaternionLinearInterpolant = QuaternionLinearInterpolant; - exports.REVISION = REVISION; - exports.RGBADepthPacking = RGBADepthPacking; - exports.RGBAFormat = RGBAFormat; - exports.RGBAIntegerFormat = RGBAIntegerFormat; - exports.RGBA_ASTC_10x10_Format = RGBA_ASTC_10x10_Format; - exports.RGBA_ASTC_10x5_Format = RGBA_ASTC_10x5_Format; - exports.RGBA_ASTC_10x6_Format = RGBA_ASTC_10x6_Format; - exports.RGBA_ASTC_10x8_Format = RGBA_ASTC_10x8_Format; - exports.RGBA_ASTC_12x10_Format = RGBA_ASTC_12x10_Format; - exports.RGBA_ASTC_12x12_Format = RGBA_ASTC_12x12_Format; - exports.RGBA_ASTC_4x4_Format = RGBA_ASTC_4x4_Format; - exports.RGBA_ASTC_5x4_Format = RGBA_ASTC_5x4_Format; - exports.RGBA_ASTC_5x5_Format = RGBA_ASTC_5x5_Format; - exports.RGBA_ASTC_6x5_Format = RGBA_ASTC_6x5_Format; - exports.RGBA_ASTC_6x6_Format = RGBA_ASTC_6x6_Format; - exports.RGBA_ASTC_8x5_Format = RGBA_ASTC_8x5_Format; - exports.RGBA_ASTC_8x6_Format = RGBA_ASTC_8x6_Format; - exports.RGBA_ASTC_8x8_Format = RGBA_ASTC_8x8_Format; - exports.RGBA_BPTC_Format = RGBA_BPTC_Format; - exports.RGBA_ETC2_EAC_Format = RGBA_ETC2_EAC_Format; - exports.RGBA_PVRTC_2BPPV1_Format = RGBA_PVRTC_2BPPV1_Format; - exports.RGBA_PVRTC_4BPPV1_Format = RGBA_PVRTC_4BPPV1_Format; - exports.RGBA_S3TC_DXT1_Format = RGBA_S3TC_DXT1_Format; - exports.RGBA_S3TC_DXT3_Format = RGBA_S3TC_DXT3_Format; - exports.RGBA_S3TC_DXT5_Format = RGBA_S3TC_DXT5_Format; - exports.RGBFormat = RGBFormat; - exports.RGB_ETC1_Format = RGB_ETC1_Format; - exports.RGB_ETC2_Format = RGB_ETC2_Format; - exports.RGB_PVRTC_2BPPV1_Format = RGB_PVRTC_2BPPV1_Format; - exports.RGB_PVRTC_4BPPV1_Format = RGB_PVRTC_4BPPV1_Format; - exports.RGB_S3TC_DXT1_Format = RGB_S3TC_DXT1_Format; - exports.RGFormat = RGFormat; - exports.RGIntegerFormat = RGIntegerFormat; - exports.RawShaderMaterial = RawShaderMaterial; - exports.Ray = Ray; - exports.Raycaster = Raycaster; - exports.RectAreaLight = RectAreaLight; - exports.RedFormat = RedFormat; - exports.RedIntegerFormat = RedIntegerFormat; - exports.ReinhardToneMapping = ReinhardToneMapping; - exports.RepeatWrapping = RepeatWrapping; - exports.ReplaceStencilOp = ReplaceStencilOp; - exports.ReverseSubtractEquation = ReverseSubtractEquation; - exports.RingBufferGeometry = RingGeometry; - exports.RingGeometry = RingGeometry; - exports.SRGBColorSpace = SRGBColorSpace; - exports.Scene = Scene; - exports.SceneUtils = SceneUtils; - exports.ShaderChunk = ShaderChunk; - exports.ShaderLib = ShaderLib; - exports.ShaderMaterial = ShaderMaterial; - exports.ShadowMaterial = ShadowMaterial; - exports.Shape = Shape; - exports.ShapeBufferGeometry = ShapeGeometry; - exports.ShapeGeometry = ShapeGeometry; - exports.ShapePath = ShapePath; - exports.ShapeUtils = ShapeUtils; - exports.ShortType = ShortType; - exports.Skeleton = Skeleton; - exports.SkeletonHelper = SkeletonHelper; - exports.SkinnedMesh = SkinnedMesh; - exports.SmoothShading = SmoothShading; - exports.Source = Source; - exports.Sphere = Sphere; - exports.SphereBufferGeometry = SphereGeometry; - exports.SphereGeometry = SphereGeometry; - exports.Spherical = Spherical; - exports.SphericalHarmonics3 = SphericalHarmonics3; - exports.SplineCurve = SplineCurve; - exports.SpotLight = SpotLight; - exports.SpotLightHelper = SpotLightHelper; - exports.Sprite = Sprite; - exports.SpriteMaterial = SpriteMaterial; - exports.SrcAlphaFactor = SrcAlphaFactor; - exports.SrcAlphaSaturateFactor = SrcAlphaSaturateFactor; - exports.SrcColorFactor = SrcColorFactor; - exports.StaticCopyUsage = StaticCopyUsage; - exports.StaticDrawUsage = StaticDrawUsage; - exports.StaticReadUsage = StaticReadUsage; - exports.StereoCamera = StereoCamera; - exports.StreamCopyUsage = StreamCopyUsage; - exports.StreamDrawUsage = StreamDrawUsage; - exports.StreamReadUsage = StreamReadUsage; - exports.StringKeyframeTrack = StringKeyframeTrack; - exports.SubtractEquation = SubtractEquation; - exports.SubtractiveBlending = SubtractiveBlending; - exports.TOUCH = TOUCH; - exports.TangentSpaceNormalMap = TangentSpaceNormalMap; - exports.TetrahedronBufferGeometry = TetrahedronGeometry; - exports.TetrahedronGeometry = TetrahedronGeometry; - exports.TextGeometry = TextGeometry; - exports.Texture = Texture; - exports.TextureLoader = TextureLoader; - exports.TorusBufferGeometry = TorusGeometry; - exports.TorusGeometry = TorusGeometry; - exports.TorusKnotBufferGeometry = TorusKnotGeometry; - exports.TorusKnotGeometry = TorusKnotGeometry; - exports.Triangle = Triangle; - exports.TriangleFanDrawMode = TriangleFanDrawMode; - exports.TriangleStripDrawMode = TriangleStripDrawMode; - exports.TrianglesDrawMode = TrianglesDrawMode; - exports.TubeBufferGeometry = TubeGeometry; - exports.TubeGeometry = TubeGeometry; - exports.UVMapping = UVMapping; - exports.Uint16Attribute = Uint16Attribute; - exports.Uint16BufferAttribute = Uint16BufferAttribute; - exports.Uint32Attribute = Uint32Attribute; - exports.Uint32BufferAttribute = Uint32BufferAttribute; - exports.Uint8Attribute = Uint8Attribute; - exports.Uint8BufferAttribute = Uint8BufferAttribute; - exports.Uint8ClampedAttribute = Uint8ClampedAttribute; - exports.Uint8ClampedBufferAttribute = Uint8ClampedBufferAttribute; - exports.Uniform = Uniform; - exports.UniformsLib = UniformsLib; - exports.UniformsUtils = UniformsUtils; - exports.UnsignedByteType = UnsignedByteType; - exports.UnsignedInt248Type = UnsignedInt248Type; - exports.UnsignedIntType = UnsignedIntType; - exports.UnsignedShort4444Type = UnsignedShort4444Type; - exports.UnsignedShort5551Type = UnsignedShort5551Type; - exports.UnsignedShortType = UnsignedShortType; - exports.VSMShadowMap = VSMShadowMap; - exports.Vector2 = Vector2; - exports.Vector3 = Vector3; - exports.Vector4 = Vector4; - exports.VectorKeyframeTrack = VectorKeyframeTrack; - exports.Vertex = Vertex; - exports.VertexColors = VertexColors; - exports.VideoTexture = VideoTexture; - exports.WebGL1Renderer = WebGL1Renderer; - exports.WebGL3DRenderTarget = WebGL3DRenderTarget; - exports.WebGLArrayRenderTarget = WebGLArrayRenderTarget; - exports.WebGLCubeRenderTarget = WebGLCubeRenderTarget; - exports.WebGLMultipleRenderTargets = WebGLMultipleRenderTargets; - exports.WebGLMultisampleRenderTarget = WebGLMultisampleRenderTarget; - exports.WebGLRenderTarget = WebGLRenderTarget; - exports.WebGLRenderTargetCube = WebGLRenderTargetCube; - exports.WebGLRenderer = WebGLRenderer; - exports.WebGLUtils = WebGLUtils; - exports.WireframeGeometry = WireframeGeometry; - exports.WireframeHelper = WireframeHelper; - exports.WrapAroundEnding = WrapAroundEnding; - exports.XHRLoader = XHRLoader; - exports.ZeroCurvatureEnding = ZeroCurvatureEnding; - exports.ZeroFactor = ZeroFactor; - exports.ZeroSlopeEnding = ZeroSlopeEnding; - exports.ZeroStencilOp = ZeroStencilOp; - exports._SRGBAFormat = _SRGBAFormat; - exports.sRGBEncoding = sRGBEncoding; - - Object.defineProperty(exports, '__esModule', { value: true }); - -})); diff --git a/examples/js/three_r140/three.min.js b/examples/js/three_r140/three.min.js deleted file mode 100644 index c948a8b..0000000 --- a/examples/js/three_r140/three.min.js +++ /dev/null @@ -1,6 +0,0 @@ -/** - * @license - * Copyright 2010-2022 Three.js Authors - * SPDX-License-Identifier: MIT - */ -!function(t,e){"object"==typeof exports&&"undefined"!=typeof module?e(exports):"function"==typeof define&&define.amd?define(["exports"],e):e((t="undefined"!=typeof globalThis?globalThis:t||self).THREE={})}(this,(function(t){"use strict";const e="140",n=100,i=300,r=301,s=302,a=303,o=304,l=306,c=1e3,h=1001,u=1002,d=1003,p=1004,m=1005,f=1006,g=1007,v=1008,y=1009,x=1012,_=1014,b=1015,M=1016,w=1020,S=1023,T=1026,E=1027,A=33776,R=33777,C=33778,L=33779,P=35840,D=35841,I=35842,N=35843,B=37492,z=37496,O=37808,U=37809,F=37810,H=37811,G=37812,k=37813,V=37814,W=37815,j=37816,q=37817,X=37818,J=37819,Y=37820,Z=37821,K=36492,Q=2300,$=2301,tt=2302,et=2400,nt=2401,it=2402,rt=2500,st=2501,at=3e3,ot=3001,lt="srgb",ct="srgb-linear",ht=7680,ut=35044,dt=35048,pt="300 es",mt=1035;class ft{addEventListener(t,e){void 0===this._listeners&&(this._listeners={});const n=this._listeners;void 0===n[t]&&(n[t]=[]),-1===n[t].indexOf(e)&&n[t].push(e)}hasEventListener(t,e){if(void 0===this._listeners)return!1;const n=this._listeners;return void 0!==n[t]&&-1!==n[t].indexOf(e)}removeEventListener(t,e){if(void 0===this._listeners)return;const n=this._listeners[t];if(void 0!==n){const t=n.indexOf(e);-1!==t&&n.splice(t,1)}}dispatchEvent(t){if(void 0===this._listeners)return;const e=this._listeners[t.type];if(void 0!==e){t.target=this;const n=e.slice(0);for(let e=0,i=n.length;e>8&255]+gt[t>>16&255]+gt[t>>24&255]+"-"+gt[255&e]+gt[e>>8&255]+"-"+gt[e>>16&15|64]+gt[e>>24&255]+"-"+gt[63&n|128]+gt[n>>8&255]+"-"+gt[n>>16&255]+gt[n>>24&255]+gt[255&i]+gt[i>>8&255]+gt[i>>16&255]+gt[i>>24&255]).toLowerCase()}function bt(t,e,n){return Math.max(e,Math.min(n,t))}function Mt(t,e){return(t%e+e)%e}function wt(t,e,n){return(1-n)*t+n*e}function St(t){return 0==(t&t-1)&&0!==t}function Tt(t){return Math.pow(2,Math.ceil(Math.log(t)/Math.LN2))}function Et(t){return Math.pow(2,Math.floor(Math.log(t)/Math.LN2))}var At=Object.freeze({__proto__:null,DEG2RAD:yt,RAD2DEG:xt,generateUUID:_t,clamp:bt,euclideanModulo:Mt,mapLinear:function(t,e,n,i,r){return i+(t-e)*(r-i)/(n-e)},inverseLerp:function(t,e,n){return t!==e?(n-t)/(e-t):0},lerp:wt,damp:function(t,e,n,i){return wt(t,e,1-Math.exp(-n*i))},pingpong:function(t,e=1){return e-Math.abs(Mt(t,2*e)-e)},smoothstep:function(t,e,n){return t<=e?0:t>=n?1:(t=(t-e)/(n-e))*t*(3-2*t)},smootherstep:function(t,e,n){return t<=e?0:t>=n?1:(t=(t-e)/(n-e))*t*t*(t*(6*t-15)+10)},randInt:function(t,e){return t+Math.floor(Math.random()*(e-t+1))},randFloat:function(t,e){return t+Math.random()*(e-t)},randFloatSpread:function(t){return t*(.5-Math.random())},seededRandom:function(t){void 0!==t&&(vt=t);let e=vt+=1831565813;return e=Math.imul(e^e>>>15,1|e),e^=e+Math.imul(e^e>>>7,61|e),((e^e>>>14)>>>0)/4294967296},degToRad:function(t){return t*yt},radToDeg:function(t){return t*xt},isPowerOfTwo:St,ceilPowerOfTwo:Tt,floorPowerOfTwo:Et,setQuaternionFromProperEuler:function(t,e,n,i,r){const s=Math.cos,a=Math.sin,o=s(n/2),l=a(n/2),c=s((e+i)/2),h=a((e+i)/2),u=s((e-i)/2),d=a((e-i)/2),p=s((i-e)/2),m=a((i-e)/2);switch(r){case"XYX":t.set(o*h,l*u,l*d,o*c);break;case"YZY":t.set(l*d,o*h,l*u,o*c);break;case"ZXZ":t.set(l*u,l*d,o*h,o*c);break;case"XZX":t.set(o*h,l*m,l*p,o*c);break;case"YXY":t.set(l*p,o*h,l*m,o*c);break;case"ZYZ":t.set(l*m,l*p,o*h,o*c);break;default:console.warn("THREE.MathUtils: .setQuaternionFromProperEuler() encountered an unknown order: "+r)}},normalize:function(t,e){switch(e.constructor){case Float32Array:return t;case Uint16Array:return Math.round(65535*t);case Uint8Array:return Math.round(255*t);case Int16Array:return Math.round(32767*t);case Int8Array:return Math.round(127*t);default:throw new Error("Invalid component type.")}},denormalize:function(t,e){switch(e.constructor){case Float32Array:return t;case Uint16Array:return t/65535;case Uint8Array:return t/255;case Int16Array:return Math.max(t/32767,-1);case Int8Array:return Math.max(t/127,-1);default:throw new Error("Invalid component type.")}}});class Rt{constructor(t=0,e=0){this.x=t,this.y=e}get width(){return this.x}set width(t){this.x=t}get height(){return this.y}set height(t){this.y=t}set(t,e){return this.x=t,this.y=e,this}setScalar(t){return this.x=t,this.y=t,this}setX(t){return this.x=t,this}setY(t){return this.y=t,this}setComponent(t,e){switch(t){case 0:this.x=e;break;case 1:this.y=e;break;default:throw new Error("index is out of range: "+t)}return this}getComponent(t){switch(t){case 0:return this.x;case 1:return this.y;default:throw new Error("index is out of range: "+t)}}clone(){return new this.constructor(this.x,this.y)}copy(t){return this.x=t.x,this.y=t.y,this}add(t,e){return void 0!==e?(console.warn("THREE.Vector2: .add() now only accepts one argument. Use .addVectors( a, b ) instead."),this.addVectors(t,e)):(this.x+=t.x,this.y+=t.y,this)}addScalar(t){return this.x+=t,this.y+=t,this}addVectors(t,e){return this.x=t.x+e.x,this.y=t.y+e.y,this}addScaledVector(t,e){return this.x+=t.x*e,this.y+=t.y*e,this}sub(t,e){return void 0!==e?(console.warn("THREE.Vector2: .sub() now only accepts one argument. Use .subVectors( a, b ) instead."),this.subVectors(t,e)):(this.x-=t.x,this.y-=t.y,this)}subScalar(t){return this.x-=t,this.y-=t,this}subVectors(t,e){return this.x=t.x-e.x,this.y=t.y-e.y,this}multiply(t){return this.x*=t.x,this.y*=t.y,this}multiplyScalar(t){return this.x*=t,this.y*=t,this}divide(t){return this.x/=t.x,this.y/=t.y,this}divideScalar(t){return this.multiplyScalar(1/t)}applyMatrix3(t){const e=this.x,n=this.y,i=t.elements;return this.x=i[0]*e+i[3]*n+i[6],this.y=i[1]*e+i[4]*n+i[7],this}min(t){return this.x=Math.min(this.x,t.x),this.y=Math.min(this.y,t.y),this}max(t){return this.x=Math.max(this.x,t.x),this.y=Math.max(this.y,t.y),this}clamp(t,e){return this.x=Math.max(t.x,Math.min(e.x,this.x)),this.y=Math.max(t.y,Math.min(e.y,this.y)),this}clampScalar(t,e){return this.x=Math.max(t,Math.min(e,this.x)),this.y=Math.max(t,Math.min(e,this.y)),this}clampLength(t,e){const n=this.length();return this.divideScalar(n||1).multiplyScalar(Math.max(t,Math.min(e,n)))}floor(){return this.x=Math.floor(this.x),this.y=Math.floor(this.y),this}ceil(){return this.x=Math.ceil(this.x),this.y=Math.ceil(this.y),this}round(){return this.x=Math.round(this.x),this.y=Math.round(this.y),this}roundToZero(){return this.x=this.x<0?Math.ceil(this.x):Math.floor(this.x),this.y=this.y<0?Math.ceil(this.y):Math.floor(this.y),this}negate(){return this.x=-this.x,this.y=-this.y,this}dot(t){return this.x*t.x+this.y*t.y}cross(t){return this.x*t.y-this.y*t.x}lengthSq(){return this.x*this.x+this.y*this.y}length(){return Math.sqrt(this.x*this.x+this.y*this.y)}manhattanLength(){return Math.abs(this.x)+Math.abs(this.y)}normalize(){return this.divideScalar(this.length()||1)}angle(){return Math.atan2(-this.y,-this.x)+Math.PI}distanceTo(t){return Math.sqrt(this.distanceToSquared(t))}distanceToSquared(t){const e=this.x-t.x,n=this.y-t.y;return e*e+n*n}manhattanDistanceTo(t){return Math.abs(this.x-t.x)+Math.abs(this.y-t.y)}setLength(t){return this.normalize().multiplyScalar(t)}lerp(t,e){return this.x+=(t.x-this.x)*e,this.y+=(t.y-this.y)*e,this}lerpVectors(t,e,n){return this.x=t.x+(e.x-t.x)*n,this.y=t.y+(e.y-t.y)*n,this}equals(t){return t.x===this.x&&t.y===this.y}fromArray(t,e=0){return this.x=t[e],this.y=t[e+1],this}toArray(t=[],e=0){return t[e]=this.x,t[e+1]=this.y,t}fromBufferAttribute(t,e,n){return void 0!==n&&console.warn("THREE.Vector2: offset has been removed from .fromBufferAttribute()."),this.x=t.getX(e),this.y=t.getY(e),this}rotateAround(t,e){const n=Math.cos(e),i=Math.sin(e),r=this.x-t.x,s=this.y-t.y;return this.x=r*n-s*i+t.x,this.y=r*i+s*n+t.y,this}random(){return this.x=Math.random(),this.y=Math.random(),this}*[Symbol.iterator](){yield this.x,yield this.y}}Rt.prototype.isVector2=!0;class Ct{constructor(){this.elements=[1,0,0,0,1,0,0,0,1],arguments.length>0&&console.error("THREE.Matrix3: the constructor no longer reads arguments. use .set() instead.")}set(t,e,n,i,r,s,a,o,l){const c=this.elements;return c[0]=t,c[1]=i,c[2]=a,c[3]=e,c[4]=r,c[5]=o,c[6]=n,c[7]=s,c[8]=l,this}identity(){return this.set(1,0,0,0,1,0,0,0,1),this}copy(t){const e=this.elements,n=t.elements;return e[0]=n[0],e[1]=n[1],e[2]=n[2],e[3]=n[3],e[4]=n[4],e[5]=n[5],e[6]=n[6],e[7]=n[7],e[8]=n[8],this}extractBasis(t,e,n){return t.setFromMatrix3Column(this,0),e.setFromMatrix3Column(this,1),n.setFromMatrix3Column(this,2),this}setFromMatrix4(t){const e=t.elements;return this.set(e[0],e[4],e[8],e[1],e[5],e[9],e[2],e[6],e[10]),this}multiply(t){return this.multiplyMatrices(this,t)}premultiply(t){return this.multiplyMatrices(t,this)}multiplyMatrices(t,e){const n=t.elements,i=e.elements,r=this.elements,s=n[0],a=n[3],o=n[6],l=n[1],c=n[4],h=n[7],u=n[2],d=n[5],p=n[8],m=i[0],f=i[3],g=i[6],v=i[1],y=i[4],x=i[7],_=i[2],b=i[5],M=i[8];return r[0]=s*m+a*v+o*_,r[3]=s*f+a*y+o*b,r[6]=s*g+a*x+o*M,r[1]=l*m+c*v+h*_,r[4]=l*f+c*y+h*b,r[7]=l*g+c*x+h*M,r[2]=u*m+d*v+p*_,r[5]=u*f+d*y+p*b,r[8]=u*g+d*x+p*M,this}multiplyScalar(t){const e=this.elements;return e[0]*=t,e[3]*=t,e[6]*=t,e[1]*=t,e[4]*=t,e[7]*=t,e[2]*=t,e[5]*=t,e[8]*=t,this}determinant(){const t=this.elements,e=t[0],n=t[1],i=t[2],r=t[3],s=t[4],a=t[5],o=t[6],l=t[7],c=t[8];return e*s*c-e*a*l-n*r*c+n*a*o+i*r*l-i*s*o}invert(){const t=this.elements,e=t[0],n=t[1],i=t[2],r=t[3],s=t[4],a=t[5],o=t[6],l=t[7],c=t[8],h=c*s-a*l,u=a*o-c*r,d=l*r-s*o,p=e*h+n*u+i*d;if(0===p)return this.set(0,0,0,0,0,0,0,0,0);const m=1/p;return t[0]=h*m,t[1]=(i*l-c*n)*m,t[2]=(a*n-i*s)*m,t[3]=u*m,t[4]=(c*e-i*o)*m,t[5]=(i*r-a*e)*m,t[6]=d*m,t[7]=(n*o-l*e)*m,t[8]=(s*e-n*r)*m,this}transpose(){let t;const e=this.elements;return t=e[1],e[1]=e[3],e[3]=t,t=e[2],e[2]=e[6],e[6]=t,t=e[5],e[5]=e[7],e[7]=t,this}getNormalMatrix(t){return this.setFromMatrix4(t).invert().transpose()}transposeIntoArray(t){const e=this.elements;return t[0]=e[0],t[1]=e[3],t[2]=e[6],t[3]=e[1],t[4]=e[4],t[5]=e[7],t[6]=e[2],t[7]=e[5],t[8]=e[8],this}setUvTransform(t,e,n,i,r,s,a){const o=Math.cos(r),l=Math.sin(r);return this.set(n*o,n*l,-n*(o*s+l*a)+s+t,-i*l,i*o,-i*(-l*s+o*a)+a+e,0,0,1),this}scale(t,e){const n=this.elements;return n[0]*=t,n[3]*=t,n[6]*=t,n[1]*=e,n[4]*=e,n[7]*=e,this}rotate(t){const e=Math.cos(t),n=Math.sin(t),i=this.elements,r=i[0],s=i[3],a=i[6],o=i[1],l=i[4],c=i[7];return i[0]=e*r+n*o,i[3]=e*s+n*l,i[6]=e*a+n*c,i[1]=-n*r+e*o,i[4]=-n*s+e*l,i[7]=-n*a+e*c,this}translate(t,e){const n=this.elements;return n[0]+=t*n[2],n[3]+=t*n[5],n[6]+=t*n[8],n[1]+=e*n[2],n[4]+=e*n[5],n[7]+=e*n[8],this}equals(t){const e=this.elements,n=t.elements;for(let t=0;t<9;t++)if(e[t]!==n[t])return!1;return!0}fromArray(t,e=0){for(let n=0;n<9;n++)this.elements[n]=t[n+e];return this}toArray(t=[],e=0){const n=this.elements;return t[e]=n[0],t[e+1]=n[1],t[e+2]=n[2],t[e+3]=n[3],t[e+4]=n[4],t[e+5]=n[5],t[e+6]=n[6],t[e+7]=n[7],t[e+8]=n[8],t}clone(){return(new this.constructor).fromArray(this.elements)}}function Lt(t){for(let e=t.length-1;e>=0;--e)if(t[e]>65535)return!0;return!1}Ct.prototype.isMatrix3=!0;const Pt={Int8Array:Int8Array,Uint8Array:Uint8Array,Uint8ClampedArray:Uint8ClampedArray,Int16Array:Int16Array,Uint16Array:Uint16Array,Int32Array:Int32Array,Uint32Array:Uint32Array,Float32Array:Float32Array,Float64Array:Float64Array};function Dt(t,e){return new Pt[t](e)}function It(t){return document.createElementNS("http://www.w3.org/1999/xhtml",t)}function Nt(t){return t<.04045?.0773993808*t:Math.pow(.9478672986*t+.0521327014,2.4)}function Bt(t){return t<.0031308?12.92*t:1.055*Math.pow(t,.41666)-.055}const zt={[lt]:{[ct]:Nt},[ct]:{[lt]:Bt}},Ot={legacyMode:!0,get workingColorSpace(){return ct},set workingColorSpace(t){console.warn("THREE.ColorManagement: .workingColorSpace is readonly.")},convert:function(t,e,n){if(this.legacyMode||e===n||!e||!n)return t;if(zt[e]&&void 0!==zt[e][n]){const i=zt[e][n];return t.r=i(t.r),t.g=i(t.g),t.b=i(t.b),t}throw new Error("Unsupported color space conversion.")},fromWorkingColorSpace:function(t,e){return this.convert(t,this.workingColorSpace,e)},toWorkingColorSpace:function(t,e){return this.convert(t,e,this.workingColorSpace)}},Ut={aliceblue:15792383,antiquewhite:16444375,aqua:65535,aquamarine:8388564,azure:15794175,beige:16119260,bisque:16770244,black:0,blanchedalmond:16772045,blue:255,blueviolet:9055202,brown:10824234,burlywood:14596231,cadetblue:6266528,chartreuse:8388352,chocolate:13789470,coral:16744272,cornflowerblue:6591981,cornsilk:16775388,crimson:14423100,cyan:65535,darkblue:139,darkcyan:35723,darkgoldenrod:12092939,darkgray:11119017,darkgreen:25600,darkgrey:11119017,darkkhaki:12433259,darkmagenta:9109643,darkolivegreen:5597999,darkorange:16747520,darkorchid:10040012,darkred:9109504,darksalmon:15308410,darkseagreen:9419919,darkslateblue:4734347,darkslategray:3100495,darkslategrey:3100495,darkturquoise:52945,darkviolet:9699539,deeppink:16716947,deepskyblue:49151,dimgray:6908265,dimgrey:6908265,dodgerblue:2003199,firebrick:11674146,floralwhite:16775920,forestgreen:2263842,fuchsia:16711935,gainsboro:14474460,ghostwhite:16316671,gold:16766720,goldenrod:14329120,gray:8421504,green:32768,greenyellow:11403055,grey:8421504,honeydew:15794160,hotpink:16738740,indianred:13458524,indigo:4915330,ivory:16777200,khaki:15787660,lavender:15132410,lavenderblush:16773365,lawngreen:8190976,lemonchiffon:16775885,lightblue:11393254,lightcoral:15761536,lightcyan:14745599,lightgoldenrodyellow:16448210,lightgray:13882323,lightgreen:9498256,lightgrey:13882323,lightpink:16758465,lightsalmon:16752762,lightseagreen:2142890,lightskyblue:8900346,lightslategray:7833753,lightslategrey:7833753,lightsteelblue:11584734,lightyellow:16777184,lime:65280,limegreen:3329330,linen:16445670,magenta:16711935,maroon:8388608,mediumaquamarine:6737322,mediumblue:205,mediumorchid:12211667,mediumpurple:9662683,mediumseagreen:3978097,mediumslateblue:8087790,mediumspringgreen:64154,mediumturquoise:4772300,mediumvioletred:13047173,midnightblue:1644912,mintcream:16121850,mistyrose:16770273,moccasin:16770229,navajowhite:16768685,navy:128,oldlace:16643558,olive:8421376,olivedrab:7048739,orange:16753920,orangered:16729344,orchid:14315734,palegoldenrod:15657130,palegreen:10025880,paleturquoise:11529966,palevioletred:14381203,papayawhip:16773077,peachpuff:16767673,peru:13468991,pink:16761035,plum:14524637,powderblue:11591910,purple:8388736,rebeccapurple:6697881,red:16711680,rosybrown:12357519,royalblue:4286945,saddlebrown:9127187,salmon:16416882,sandybrown:16032864,seagreen:3050327,seashell:16774638,sienna:10506797,silver:12632256,skyblue:8900331,slateblue:6970061,slategray:7372944,slategrey:7372944,snow:16775930,springgreen:65407,steelblue:4620980,tan:13808780,teal:32896,thistle:14204888,tomato:16737095,turquoise:4251856,violet:15631086,wheat:16113331,white:16777215,whitesmoke:16119285,yellow:16776960,yellowgreen:10145074},Ft={r:0,g:0,b:0},Ht={h:0,s:0,l:0},Gt={h:0,s:0,l:0};function kt(t,e,n){return n<0&&(n+=1),n>1&&(n-=1),n<1/6?t+6*(e-t)*n:n<.5?e:n<2/3?t+6*(e-t)*(2/3-n):t}function Vt(t,e){return e.r=t.r,e.g=t.g,e.b=t.b,e}class Wt{constructor(t,e,n){return void 0===e&&void 0===n?this.set(t):this.setRGB(t,e,n)}set(t){return t&&t.isColor?this.copy(t):"number"==typeof t?this.setHex(t):"string"==typeof t&&this.setStyle(t),this}setScalar(t){return this.r=t,this.g=t,this.b=t,this}setHex(t,e="srgb"){return t=Math.floor(t),this.r=(t>>16&255)/255,this.g=(t>>8&255)/255,this.b=(255&t)/255,Ot.toWorkingColorSpace(this,e),this}setRGB(t,e,n,i="srgb-linear"){return this.r=t,this.g=e,this.b=n,Ot.toWorkingColorSpace(this,i),this}setHSL(t,e,n,i="srgb-linear"){if(t=Mt(t,1),e=bt(e,0,1),n=bt(n,0,1),0===e)this.r=this.g=this.b=n;else{const i=n<=.5?n*(1+e):n+e-n*e,r=2*n-i;this.r=kt(r,i,t+1/3),this.g=kt(r,i,t),this.b=kt(r,i,t-1/3)}return Ot.toWorkingColorSpace(this,i),this}setStyle(t,e="srgb"){function n(e){void 0!==e&&parseFloat(e)<1&&console.warn("THREE.Color: Alpha component of "+t+" will be ignored.")}let i;if(i=/^((?:rgb|hsl)a?)\(([^\)]*)\)/.exec(t)){let t;const r=i[1],s=i[2];switch(r){case"rgb":case"rgba":if(t=/^\s*(\d+)\s*,\s*(\d+)\s*,\s*(\d+)\s*(?:,\s*(\d*\.?\d+)\s*)?$/.exec(s))return this.r=Math.min(255,parseInt(t[1],10))/255,this.g=Math.min(255,parseInt(t[2],10))/255,this.b=Math.min(255,parseInt(t[3],10))/255,Ot.toWorkingColorSpace(this,e),n(t[4]),this;if(t=/^\s*(\d+)\%\s*,\s*(\d+)\%\s*,\s*(\d+)\%\s*(?:,\s*(\d*\.?\d+)\s*)?$/.exec(s))return this.r=Math.min(100,parseInt(t[1],10))/100,this.g=Math.min(100,parseInt(t[2],10))/100,this.b=Math.min(100,parseInt(t[3],10))/100,Ot.toWorkingColorSpace(this,e),n(t[4]),this;break;case"hsl":case"hsla":if(t=/^\s*(\d*\.?\d+)\s*,\s*(\d+)\%\s*,\s*(\d+)\%\s*(?:,\s*(\d*\.?\d+)\s*)?$/.exec(s)){const i=parseFloat(t[1])/360,r=parseInt(t[2],10)/100,s=parseInt(t[3],10)/100;return n(t[4]),this.setHSL(i,r,s,e)}}}else if(i=/^\#([A-Fa-f\d]+)$/.exec(t)){const t=i[1],n=t.length;if(3===n)return this.r=parseInt(t.charAt(0)+t.charAt(0),16)/255,this.g=parseInt(t.charAt(1)+t.charAt(1),16)/255,this.b=parseInt(t.charAt(2)+t.charAt(2),16)/255,Ot.toWorkingColorSpace(this,e),this;if(6===n)return this.r=parseInt(t.charAt(0)+t.charAt(1),16)/255,this.g=parseInt(t.charAt(2)+t.charAt(3),16)/255,this.b=parseInt(t.charAt(4)+t.charAt(5),16)/255,Ot.toWorkingColorSpace(this,e),this}return t&&t.length>0?this.setColorName(t,e):this}setColorName(t,e="srgb"){const n=Ut[t.toLowerCase()];return void 0!==n?this.setHex(n,e):console.warn("THREE.Color: Unknown color "+t),this}clone(){return new this.constructor(this.r,this.g,this.b)}copy(t){return this.r=t.r,this.g=t.g,this.b=t.b,this}copySRGBToLinear(t){return this.r=Nt(t.r),this.g=Nt(t.g),this.b=Nt(t.b),this}copyLinearToSRGB(t){return this.r=Bt(t.r),this.g=Bt(t.g),this.b=Bt(t.b),this}convertSRGBToLinear(){return this.copySRGBToLinear(this),this}convertLinearToSRGB(){return this.copyLinearToSRGB(this),this}getHex(t="srgb"){return Ot.fromWorkingColorSpace(Vt(this,Ft),t),bt(255*Ft.r,0,255)<<16^bt(255*Ft.g,0,255)<<8^bt(255*Ft.b,0,255)<<0}getHexString(t="srgb"){return("000000"+this.getHex(t).toString(16)).slice(-6)}getHSL(t,e="srgb-linear"){Ot.fromWorkingColorSpace(Vt(this,Ft),e);const n=Ft.r,i=Ft.g,r=Ft.b,s=Math.max(n,i,r),a=Math.min(n,i,r);let o,l;const c=(a+s)/2;if(a===s)o=0,l=0;else{const t=s-a;switch(l=c<=.5?t/(s+a):t/(2-s-a),s){case n:o=(i-r)/t+(i2048||e.height>2048?(console.warn("THREE.ImageUtils.getDataURL: Image converted to jpg for performance reasons",t),e.toDataURL("image/jpeg",.6)):e.toDataURL("image/png")}static sRGBToLinear(t){if("undefined"!=typeof HTMLImageElement&&t instanceof HTMLImageElement||"undefined"!=typeof HTMLCanvasElement&&t instanceof HTMLCanvasElement||"undefined"!=typeof ImageBitmap&&t instanceof ImageBitmap){const e=It("canvas");e.width=t.width,e.height=t.height;const n=e.getContext("2d");n.drawImage(t,0,0,t.width,t.height);const i=n.getImageData(0,0,t.width,t.height),r=i.data;for(let t=0;t1)switch(this.wrapS){case c:t.x=t.x-Math.floor(t.x);break;case h:t.x=t.x<0?0:1;break;case u:1===Math.abs(Math.floor(t.x)%2)?t.x=Math.ceil(t.x)-t.x:t.x=t.x-Math.floor(t.x)}if(t.y<0||t.y>1)switch(this.wrapT){case c:t.y=t.y-Math.floor(t.y);break;case h:t.y=t.y<0?0:1;break;case u:1===Math.abs(Math.floor(t.y)%2)?t.y=Math.ceil(t.y)-t.y:t.y=t.y-Math.floor(t.y)}return this.flipY&&(t.y=1-t.y),t}set needsUpdate(t){!0===t&&(this.version++,this.source.needsUpdate=!0)}}Zt.DEFAULT_IMAGE=null,Zt.DEFAULT_MAPPING=i,Zt.prototype.isTexture=!0;class Kt{constructor(t=0,e=0,n=0,i=1){this.x=t,this.y=e,this.z=n,this.w=i}get width(){return this.z}set width(t){this.z=t}get height(){return this.w}set height(t){this.w=t}set(t,e,n,i){return this.x=t,this.y=e,this.z=n,this.w=i,this}setScalar(t){return this.x=t,this.y=t,this.z=t,this.w=t,this}setX(t){return this.x=t,this}setY(t){return this.y=t,this}setZ(t){return this.z=t,this}setW(t){return this.w=t,this}setComponent(t,e){switch(t){case 0:this.x=e;break;case 1:this.y=e;break;case 2:this.z=e;break;case 3:this.w=e;break;default:throw new Error("index is out of range: "+t)}return this}getComponent(t){switch(t){case 0:return this.x;case 1:return this.y;case 2:return this.z;case 3:return this.w;default:throw new Error("index is out of range: "+t)}}clone(){return new this.constructor(this.x,this.y,this.z,this.w)}copy(t){return this.x=t.x,this.y=t.y,this.z=t.z,this.w=void 0!==t.w?t.w:1,this}add(t,e){return void 0!==e?(console.warn("THREE.Vector4: .add() now only accepts one argument. Use .addVectors( a, b ) instead."),this.addVectors(t,e)):(this.x+=t.x,this.y+=t.y,this.z+=t.z,this.w+=t.w,this)}addScalar(t){return this.x+=t,this.y+=t,this.z+=t,this.w+=t,this}addVectors(t,e){return this.x=t.x+e.x,this.y=t.y+e.y,this.z=t.z+e.z,this.w=t.w+e.w,this}addScaledVector(t,e){return this.x+=t.x*e,this.y+=t.y*e,this.z+=t.z*e,this.w+=t.w*e,this}sub(t,e){return void 0!==e?(console.warn("THREE.Vector4: .sub() now only accepts one argument. Use .subVectors( a, b ) instead."),this.subVectors(t,e)):(this.x-=t.x,this.y-=t.y,this.z-=t.z,this.w-=t.w,this)}subScalar(t){return this.x-=t,this.y-=t,this.z-=t,this.w-=t,this}subVectors(t,e){return this.x=t.x-e.x,this.y=t.y-e.y,this.z=t.z-e.z,this.w=t.w-e.w,this}multiply(t){return this.x*=t.x,this.y*=t.y,this.z*=t.z,this.w*=t.w,this}multiplyScalar(t){return this.x*=t,this.y*=t,this.z*=t,this.w*=t,this}applyMatrix4(t){const e=this.x,n=this.y,i=this.z,r=this.w,s=t.elements;return this.x=s[0]*e+s[4]*n+s[8]*i+s[12]*r,this.y=s[1]*e+s[5]*n+s[9]*i+s[13]*r,this.z=s[2]*e+s[6]*n+s[10]*i+s[14]*r,this.w=s[3]*e+s[7]*n+s[11]*i+s[15]*r,this}divideScalar(t){return this.multiplyScalar(1/t)}setAxisAngleFromQuaternion(t){this.w=2*Math.acos(t.w);const e=Math.sqrt(1-t.w*t.w);return e<1e-4?(this.x=1,this.y=0,this.z=0):(this.x=t.x/e,this.y=t.y/e,this.z=t.z/e),this}setAxisAngleFromRotationMatrix(t){let e,n,i,r;const s=.01,a=.1,o=t.elements,l=o[0],c=o[4],h=o[8],u=o[1],d=o[5],p=o[9],m=o[2],f=o[6],g=o[10];if(Math.abs(c-u)o&&t>v?tv?o=0?1:-1,i=1-e*e;if(i>Number.EPSILON){const r=Math.sqrt(i),s=Math.atan2(r,e*n);t=Math.sin(t*s)/r,a=Math.sin(a*s)/r}const r=a*n;if(o=o*t+u*r,l=l*t+d*r,c=c*t+p*r,h=h*t+m*r,t===1-a){const t=1/Math.sqrt(o*o+l*l+c*c+h*h);o*=t,l*=t,c*=t,h*=t}}t[e]=o,t[e+1]=l,t[e+2]=c,t[e+3]=h}static multiplyQuaternionsFlat(t,e,n,i,r,s){const a=n[i],o=n[i+1],l=n[i+2],c=n[i+3],h=r[s],u=r[s+1],d=r[s+2],p=r[s+3];return t[e]=a*p+c*h+o*d-l*u,t[e+1]=o*p+c*u+l*h-a*d,t[e+2]=l*p+c*d+a*u-o*h,t[e+3]=c*p-a*h-o*u-l*d,t}get x(){return this._x}set x(t){this._x=t,this._onChangeCallback()}get y(){return this._y}set y(t){this._y=t,this._onChangeCallback()}get z(){return this._z}set z(t){this._z=t,this._onChangeCallback()}get w(){return this._w}set w(t){this._w=t,this._onChangeCallback()}set(t,e,n,i){return this._x=t,this._y=e,this._z=n,this._w=i,this._onChangeCallback(),this}clone(){return new this.constructor(this._x,this._y,this._z,this._w)}copy(t){return this._x=t.x,this._y=t.y,this._z=t.z,this._w=t.w,this._onChangeCallback(),this}setFromEuler(t,e){if(!t||!t.isEuler)throw new Error("THREE.Quaternion: .setFromEuler() now expects an Euler rotation rather than a Vector3 and order.");const n=t._x,i=t._y,r=t._z,s=t._order,a=Math.cos,o=Math.sin,l=a(n/2),c=a(i/2),h=a(r/2),u=o(n/2),d=o(i/2),p=o(r/2);switch(s){case"XYZ":this._x=u*c*h+l*d*p,this._y=l*d*h-u*c*p,this._z=l*c*p+u*d*h,this._w=l*c*h-u*d*p;break;case"YXZ":this._x=u*c*h+l*d*p,this._y=l*d*h-u*c*p,this._z=l*c*p-u*d*h,this._w=l*c*h+u*d*p;break;case"ZXY":this._x=u*c*h-l*d*p,this._y=l*d*h+u*c*p,this._z=l*c*p+u*d*h,this._w=l*c*h-u*d*p;break;case"ZYX":this._x=u*c*h-l*d*p,this._y=l*d*h+u*c*p,this._z=l*c*p-u*d*h,this._w=l*c*h+u*d*p;break;case"YZX":this._x=u*c*h+l*d*p,this._y=l*d*h+u*c*p,this._z=l*c*p-u*d*h,this._w=l*c*h-u*d*p;break;case"XZY":this._x=u*c*h-l*d*p,this._y=l*d*h-u*c*p,this._z=l*c*p+u*d*h,this._w=l*c*h+u*d*p;break;default:console.warn("THREE.Quaternion: .setFromEuler() encountered an unknown order: "+s)}return!1!==e&&this._onChangeCallback(),this}setFromAxisAngle(t,e){const n=e/2,i=Math.sin(n);return this._x=t.x*i,this._y=t.y*i,this._z=t.z*i,this._w=Math.cos(n),this._onChangeCallback(),this}setFromRotationMatrix(t){const e=t.elements,n=e[0],i=e[4],r=e[8],s=e[1],a=e[5],o=e[9],l=e[2],c=e[6],h=e[10],u=n+a+h;if(u>0){const t=.5/Math.sqrt(u+1);this._w=.25/t,this._x=(c-o)*t,this._y=(r-l)*t,this._z=(s-i)*t}else if(n>a&&n>h){const t=2*Math.sqrt(1+n-a-h);this._w=(c-o)/t,this._x=.25*t,this._y=(i+s)/t,this._z=(r+l)/t}else if(a>h){const t=2*Math.sqrt(1+a-n-h);this._w=(r-l)/t,this._x=(i+s)/t,this._y=.25*t,this._z=(o+c)/t}else{const t=2*Math.sqrt(1+h-n-a);this._w=(s-i)/t,this._x=(r+l)/t,this._y=(o+c)/t,this._z=.25*t}return this._onChangeCallback(),this}setFromUnitVectors(t,e){let n=t.dot(e)+1;return nMath.abs(t.z)?(this._x=-t.y,this._y=t.x,this._z=0,this._w=n):(this._x=0,this._y=-t.z,this._z=t.y,this._w=n)):(this._x=t.y*e.z-t.z*e.y,this._y=t.z*e.x-t.x*e.z,this._z=t.x*e.y-t.y*e.x,this._w=n),this.normalize()}angleTo(t){return 2*Math.acos(Math.abs(bt(this.dot(t),-1,1)))}rotateTowards(t,e){const n=this.angleTo(t);if(0===n)return this;const i=Math.min(1,e/n);return this.slerp(t,i),this}identity(){return this.set(0,0,0,1)}invert(){return this.conjugate()}conjugate(){return this._x*=-1,this._y*=-1,this._z*=-1,this._onChangeCallback(),this}dot(t){return this._x*t._x+this._y*t._y+this._z*t._z+this._w*t._w}lengthSq(){return this._x*this._x+this._y*this._y+this._z*this._z+this._w*this._w}length(){return Math.sqrt(this._x*this._x+this._y*this._y+this._z*this._z+this._w*this._w)}normalize(){let t=this.length();return 0===t?(this._x=0,this._y=0,this._z=0,this._w=1):(t=1/t,this._x=this._x*t,this._y=this._y*t,this._z=this._z*t,this._w=this._w*t),this._onChangeCallback(),this}multiply(t,e){return void 0!==e?(console.warn("THREE.Quaternion: .multiply() now only accepts one argument. Use .multiplyQuaternions( a, b ) instead."),this.multiplyQuaternions(t,e)):this.multiplyQuaternions(this,t)}premultiply(t){return this.multiplyQuaternions(t,this)}multiplyQuaternions(t,e){const n=t._x,i=t._y,r=t._z,s=t._w,a=e._x,o=e._y,l=e._z,c=e._w;return this._x=n*c+s*a+i*l-r*o,this._y=i*c+s*o+r*a-n*l,this._z=r*c+s*l+n*o-i*a,this._w=s*c-n*a-i*o-r*l,this._onChangeCallback(),this}slerp(t,e){if(0===e)return this;if(1===e)return this.copy(t);const n=this._x,i=this._y,r=this._z,s=this._w;let a=s*t._w+n*t._x+i*t._y+r*t._z;if(a<0?(this._w=-t._w,this._x=-t._x,this._y=-t._y,this._z=-t._z,a=-a):this.copy(t),a>=1)return this._w=s,this._x=n,this._y=i,this._z=r,this;const o=1-a*a;if(o<=Number.EPSILON){const t=1-e;return this._w=t*s+e*this._w,this._x=t*n+e*this._x,this._y=t*i+e*this._y,this._z=t*r+e*this._z,this.normalize(),this._onChangeCallback(),this}const l=Math.sqrt(o),c=Math.atan2(l,a),h=Math.sin((1-e)*c)/l,u=Math.sin(e*c)/l;return this._w=s*h+this._w*u,this._x=n*h+this._x*u,this._y=i*h+this._y*u,this._z=r*h+this._z*u,this._onChangeCallback(),this}slerpQuaternions(t,e,n){return this.copy(t).slerp(e,n)}random(){const t=Math.random(),e=Math.sqrt(1-t),n=Math.sqrt(t),i=2*Math.PI*Math.random(),r=2*Math.PI*Math.random();return this.set(e*Math.cos(i),n*Math.sin(r),n*Math.cos(r),e*Math.sin(i))}equals(t){return t._x===this._x&&t._y===this._y&&t._z===this._z&&t._w===this._w}fromArray(t,e=0){return this._x=t[e],this._y=t[e+1],this._z=t[e+2],this._w=t[e+3],this._onChangeCallback(),this}toArray(t=[],e=0){return t[e]=this._x,t[e+1]=this._y,t[e+2]=this._z,t[e+3]=this._w,t}fromBufferAttribute(t,e){return this._x=t.getX(e),this._y=t.getY(e),this._z=t.getZ(e),this._w=t.getW(e),this}_onChange(t){return this._onChangeCallback=t,this}_onChangeCallback(){}*[Symbol.iterator](){yield this._x,yield this._y,yield this._z,yield this._w}}re.prototype.isQuaternion=!0;class se{constructor(t=0,e=0,n=0){this.x=t,this.y=e,this.z=n}set(t,e,n){return void 0===n&&(n=this.z),this.x=t,this.y=e,this.z=n,this}setScalar(t){return this.x=t,this.y=t,this.z=t,this}setX(t){return this.x=t,this}setY(t){return this.y=t,this}setZ(t){return this.z=t,this}setComponent(t,e){switch(t){case 0:this.x=e;break;case 1:this.y=e;break;case 2:this.z=e;break;default:throw new Error("index is out of range: "+t)}return this}getComponent(t){switch(t){case 0:return this.x;case 1:return this.y;case 2:return this.z;default:throw new Error("index is out of range: "+t)}}clone(){return new this.constructor(this.x,this.y,this.z)}copy(t){return this.x=t.x,this.y=t.y,this.z=t.z,this}add(t,e){return void 0!==e?(console.warn("THREE.Vector3: .add() now only accepts one argument. Use .addVectors( a, b ) instead."),this.addVectors(t,e)):(this.x+=t.x,this.y+=t.y,this.z+=t.z,this)}addScalar(t){return this.x+=t,this.y+=t,this.z+=t,this}addVectors(t,e){return this.x=t.x+e.x,this.y=t.y+e.y,this.z=t.z+e.z,this}addScaledVector(t,e){return this.x+=t.x*e,this.y+=t.y*e,this.z+=t.z*e,this}sub(t,e){return void 0!==e?(console.warn("THREE.Vector3: .sub() now only accepts one argument. Use .subVectors( a, b ) instead."),this.subVectors(t,e)):(this.x-=t.x,this.y-=t.y,this.z-=t.z,this)}subScalar(t){return this.x-=t,this.y-=t,this.z-=t,this}subVectors(t,e){return this.x=t.x-e.x,this.y=t.y-e.y,this.z=t.z-e.z,this}multiply(t,e){return void 0!==e?(console.warn("THREE.Vector3: .multiply() now only accepts one argument. Use .multiplyVectors( a, b ) instead."),this.multiplyVectors(t,e)):(this.x*=t.x,this.y*=t.y,this.z*=t.z,this)}multiplyScalar(t){return this.x*=t,this.y*=t,this.z*=t,this}multiplyVectors(t,e){return this.x=t.x*e.x,this.y=t.y*e.y,this.z=t.z*e.z,this}applyEuler(t){return t&&t.isEuler||console.error("THREE.Vector3: .applyEuler() now expects an Euler rotation rather than a Vector3 and order."),this.applyQuaternion(oe.setFromEuler(t))}applyAxisAngle(t,e){return this.applyQuaternion(oe.setFromAxisAngle(t,e))}applyMatrix3(t){const e=this.x,n=this.y,i=this.z,r=t.elements;return this.x=r[0]*e+r[3]*n+r[6]*i,this.y=r[1]*e+r[4]*n+r[7]*i,this.z=r[2]*e+r[5]*n+r[8]*i,this}applyNormalMatrix(t){return this.applyMatrix3(t).normalize()}applyMatrix4(t){const e=this.x,n=this.y,i=this.z,r=t.elements,s=1/(r[3]*e+r[7]*n+r[11]*i+r[15]);return this.x=(r[0]*e+r[4]*n+r[8]*i+r[12])*s,this.y=(r[1]*e+r[5]*n+r[9]*i+r[13])*s,this.z=(r[2]*e+r[6]*n+r[10]*i+r[14])*s,this}applyQuaternion(t){const e=this.x,n=this.y,i=this.z,r=t.x,s=t.y,a=t.z,o=t.w,l=o*e+s*i-a*n,c=o*n+a*e-r*i,h=o*i+r*n-s*e,u=-r*e-s*n-a*i;return this.x=l*o+u*-r+c*-a-h*-s,this.y=c*o+u*-s+h*-r-l*-a,this.z=h*o+u*-a+l*-s-c*-r,this}project(t){return this.applyMatrix4(t.matrixWorldInverse).applyMatrix4(t.projectionMatrix)}unproject(t){return this.applyMatrix4(t.projectionMatrixInverse).applyMatrix4(t.matrixWorld)}transformDirection(t){const e=this.x,n=this.y,i=this.z,r=t.elements;return this.x=r[0]*e+r[4]*n+r[8]*i,this.y=r[1]*e+r[5]*n+r[9]*i,this.z=r[2]*e+r[6]*n+r[10]*i,this.normalize()}divide(t){return this.x/=t.x,this.y/=t.y,this.z/=t.z,this}divideScalar(t){return this.multiplyScalar(1/t)}min(t){return this.x=Math.min(this.x,t.x),this.y=Math.min(this.y,t.y),this.z=Math.min(this.z,t.z),this}max(t){return this.x=Math.max(this.x,t.x),this.y=Math.max(this.y,t.y),this.z=Math.max(this.z,t.z),this}clamp(t,e){return this.x=Math.max(t.x,Math.min(e.x,this.x)),this.y=Math.max(t.y,Math.min(e.y,this.y)),this.z=Math.max(t.z,Math.min(e.z,this.z)),this}clampScalar(t,e){return this.x=Math.max(t,Math.min(e,this.x)),this.y=Math.max(t,Math.min(e,this.y)),this.z=Math.max(t,Math.min(e,this.z)),this}clampLength(t,e){const n=this.length();return this.divideScalar(n||1).multiplyScalar(Math.max(t,Math.min(e,n)))}floor(){return this.x=Math.floor(this.x),this.y=Math.floor(this.y),this.z=Math.floor(this.z),this}ceil(){return this.x=Math.ceil(this.x),this.y=Math.ceil(this.y),this.z=Math.ceil(this.z),this}round(){return this.x=Math.round(this.x),this.y=Math.round(this.y),this.z=Math.round(this.z),this}roundToZero(){return this.x=this.x<0?Math.ceil(this.x):Math.floor(this.x),this.y=this.y<0?Math.ceil(this.y):Math.floor(this.y),this.z=this.z<0?Math.ceil(this.z):Math.floor(this.z),this}negate(){return this.x=-this.x,this.y=-this.y,this.z=-this.z,this}dot(t){return this.x*t.x+this.y*t.y+this.z*t.z}lengthSq(){return this.x*this.x+this.y*this.y+this.z*this.z}length(){return Math.sqrt(this.x*this.x+this.y*this.y+this.z*this.z)}manhattanLength(){return Math.abs(this.x)+Math.abs(this.y)+Math.abs(this.z)}normalize(){return this.divideScalar(this.length()||1)}setLength(t){return this.normalize().multiplyScalar(t)}lerp(t,e){return this.x+=(t.x-this.x)*e,this.y+=(t.y-this.y)*e,this.z+=(t.z-this.z)*e,this}lerpVectors(t,e,n){return this.x=t.x+(e.x-t.x)*n,this.y=t.y+(e.y-t.y)*n,this.z=t.z+(e.z-t.z)*n,this}cross(t,e){return void 0!==e?(console.warn("THREE.Vector3: .cross() now only accepts one argument. Use .crossVectors( a, b ) instead."),this.crossVectors(t,e)):this.crossVectors(this,t)}crossVectors(t,e){const n=t.x,i=t.y,r=t.z,s=e.x,a=e.y,o=e.z;return this.x=i*o-r*a,this.y=r*s-n*o,this.z=n*a-i*s,this}projectOnVector(t){const e=t.lengthSq();if(0===e)return this.set(0,0,0);const n=t.dot(this)/e;return this.copy(t).multiplyScalar(n)}projectOnPlane(t){return ae.copy(this).projectOnVector(t),this.sub(ae)}reflect(t){return this.sub(ae.copy(t).multiplyScalar(2*this.dot(t)))}angleTo(t){const e=Math.sqrt(this.lengthSq()*t.lengthSq());if(0===e)return Math.PI/2;const n=this.dot(t)/e;return Math.acos(bt(n,-1,1))}distanceTo(t){return Math.sqrt(this.distanceToSquared(t))}distanceToSquared(t){const e=this.x-t.x,n=this.y-t.y,i=this.z-t.z;return e*e+n*n+i*i}manhattanDistanceTo(t){return Math.abs(this.x-t.x)+Math.abs(this.y-t.y)+Math.abs(this.z-t.z)}setFromSpherical(t){return this.setFromSphericalCoords(t.radius,t.phi,t.theta)}setFromSphericalCoords(t,e,n){const i=Math.sin(e)*t;return this.x=i*Math.sin(n),this.y=Math.cos(e)*t,this.z=i*Math.cos(n),this}setFromCylindrical(t){return this.setFromCylindricalCoords(t.radius,t.theta,t.y)}setFromCylindricalCoords(t,e,n){return this.x=t*Math.sin(e),this.y=n,this.z=t*Math.cos(e),this}setFromMatrixPosition(t){const e=t.elements;return this.x=e[12],this.y=e[13],this.z=e[14],this}setFromMatrixScale(t){const e=this.setFromMatrixColumn(t,0).length(),n=this.setFromMatrixColumn(t,1).length(),i=this.setFromMatrixColumn(t,2).length();return this.x=e,this.y=n,this.z=i,this}setFromMatrixColumn(t,e){return this.fromArray(t.elements,4*e)}setFromMatrix3Column(t,e){return this.fromArray(t.elements,3*e)}setFromEuler(t){return this.x=t._x,this.y=t._y,this.z=t._z,this}equals(t){return t.x===this.x&&t.y===this.y&&t.z===this.z}fromArray(t,e=0){return this.x=t[e],this.y=t[e+1],this.z=t[e+2],this}toArray(t=[],e=0){return t[e]=this.x,t[e+1]=this.y,t[e+2]=this.z,t}fromBufferAttribute(t,e,n){return void 0!==n&&console.warn("THREE.Vector3: offset has been removed from .fromBufferAttribute()."),this.x=t.getX(e),this.y=t.getY(e),this.z=t.getZ(e),this}random(){return this.x=Math.random(),this.y=Math.random(),this.z=Math.random(),this}randomDirection(){const t=2*(Math.random()-.5),e=Math.random()*Math.PI*2,n=Math.sqrt(1-t**2);return this.x=n*Math.cos(e),this.y=n*Math.sin(e),this.z=t,this}*[Symbol.iterator](){yield this.x,yield this.y,yield this.z}}se.prototype.isVector3=!0;const ae=new se,oe=new re;class le{constructor(t=new se(1/0,1/0,1/0),e=new se(-1/0,-1/0,-1/0)){this.min=t,this.max=e}set(t,e){return this.min.copy(t),this.max.copy(e),this}setFromArray(t){let e=1/0,n=1/0,i=1/0,r=-1/0,s=-1/0,a=-1/0;for(let o=0,l=t.length;or&&(r=l),c>s&&(s=c),h>a&&(a=h)}return this.min.set(e,n,i),this.max.set(r,s,a),this}setFromBufferAttribute(t){let e=1/0,n=1/0,i=1/0,r=-1/0,s=-1/0,a=-1/0;for(let o=0,l=t.count;or&&(r=l),c>s&&(s=c),h>a&&(a=h)}return this.min.set(e,n,i),this.max.set(r,s,a),this}setFromPoints(t){this.makeEmpty();for(let e=0,n=t.length;ethis.max.x||t.ythis.max.y||t.zthis.max.z)}containsBox(t){return this.min.x<=t.min.x&&t.max.x<=this.max.x&&this.min.y<=t.min.y&&t.max.y<=this.max.y&&this.min.z<=t.min.z&&t.max.z<=this.max.z}getParameter(t,e){return e.set((t.x-this.min.x)/(this.max.x-this.min.x),(t.y-this.min.y)/(this.max.y-this.min.y),(t.z-this.min.z)/(this.max.z-this.min.z))}intersectsBox(t){return!(t.max.xthis.max.x||t.max.ythis.max.y||t.max.zthis.max.z)}intersectsSphere(t){return this.clampPoint(t.center,he),he.distanceToSquared(t.center)<=t.radius*t.radius}intersectsPlane(t){let e,n;return t.normal.x>0?(e=t.normal.x*this.min.x,n=t.normal.x*this.max.x):(e=t.normal.x*this.max.x,n=t.normal.x*this.min.x),t.normal.y>0?(e+=t.normal.y*this.min.y,n+=t.normal.y*this.max.y):(e+=t.normal.y*this.max.y,n+=t.normal.y*this.min.y),t.normal.z>0?(e+=t.normal.z*this.min.z,n+=t.normal.z*this.max.z):(e+=t.normal.z*this.max.z,n+=t.normal.z*this.min.z),e<=-t.constant&&n>=-t.constant}intersectsTriangle(t){if(this.isEmpty())return!1;this.getCenter(ye),xe.subVectors(this.max,ye),de.subVectors(t.a,ye),pe.subVectors(t.b,ye),me.subVectors(t.c,ye),fe.subVectors(pe,de),ge.subVectors(me,pe),ve.subVectors(de,me);let e=[0,-fe.z,fe.y,0,-ge.z,ge.y,0,-ve.z,ve.y,fe.z,0,-fe.x,ge.z,0,-ge.x,ve.z,0,-ve.x,-fe.y,fe.x,0,-ge.y,ge.x,0,-ve.y,ve.x,0];return!!Me(e,de,pe,me,xe)&&(e=[1,0,0,0,1,0,0,0,1],!!Me(e,de,pe,me,xe)&&(_e.crossVectors(fe,ge),e=[_e.x,_e.y,_e.z],Me(e,de,pe,me,xe)))}clampPoint(t,e){return e.copy(t).clamp(this.min,this.max)}distanceToPoint(t){return he.copy(t).clamp(this.min,this.max).sub(t).length()}getBoundingSphere(t){return this.getCenter(t.center),t.radius=.5*this.getSize(he).length(),t}intersect(t){return this.min.max(t.min),this.max.min(t.max),this.isEmpty()&&this.makeEmpty(),this}union(t){return this.min.min(t.min),this.max.max(t.max),this}applyMatrix4(t){return this.isEmpty()||(ce[0].set(this.min.x,this.min.y,this.min.z).applyMatrix4(t),ce[1].set(this.min.x,this.min.y,this.max.z).applyMatrix4(t),ce[2].set(this.min.x,this.max.y,this.min.z).applyMatrix4(t),ce[3].set(this.min.x,this.max.y,this.max.z).applyMatrix4(t),ce[4].set(this.max.x,this.min.y,this.min.z).applyMatrix4(t),ce[5].set(this.max.x,this.min.y,this.max.z).applyMatrix4(t),ce[6].set(this.max.x,this.max.y,this.min.z).applyMatrix4(t),ce[7].set(this.max.x,this.max.y,this.max.z).applyMatrix4(t),this.setFromPoints(ce)),this}translate(t){return this.min.add(t),this.max.add(t),this}equals(t){return t.min.equals(this.min)&&t.max.equals(this.max)}}le.prototype.isBox3=!0;const ce=[new se,new se,new se,new se,new se,new se,new se,new se],he=new se,ue=new le,de=new se,pe=new se,me=new se,fe=new se,ge=new se,ve=new se,ye=new se,xe=new se,_e=new se,be=new se;function Me(t,e,n,i,r){for(let s=0,a=t.length-3;s<=a;s+=3){be.fromArray(t,s);const a=r.x*Math.abs(be.x)+r.y*Math.abs(be.y)+r.z*Math.abs(be.z),o=e.dot(be),l=n.dot(be),c=i.dot(be);if(Math.max(-Math.max(o,l,c),Math.min(o,l,c))>a)return!1}return!0}const we=new le,Se=new se,Te=new se,Ee=new se;class Ae{constructor(t=new se,e=-1){this.center=t,this.radius=e}set(t,e){return this.center.copy(t),this.radius=e,this}setFromPoints(t,e){const n=this.center;void 0!==e?n.copy(e):we.setFromPoints(t).getCenter(n);let i=0;for(let e=0,r=t.length;ethis.radius*this.radius&&(e.sub(this.center).normalize(),e.multiplyScalar(this.radius).add(this.center)),e}getBoundingBox(t){return this.isEmpty()?(t.makeEmpty(),t):(t.set(this.center,this.center),t.expandByScalar(this.radius),t)}applyMatrix4(t){return this.center.applyMatrix4(t),this.radius=this.radius*t.getMaxScaleOnAxis(),this}translate(t){return this.center.add(t),this}expandByPoint(t){Ee.subVectors(t,this.center);const e=Ee.lengthSq();if(e>this.radius*this.radius){const t=Math.sqrt(e),n=.5*(t-this.radius);this.center.add(Ee.multiplyScalar(n/t)),this.radius+=n}return this}union(t){return!0===this.center.equals(t.center)?Te.set(0,0,1).multiplyScalar(t.radius):Te.subVectors(t.center,this.center).normalize().multiplyScalar(t.radius),this.expandByPoint(Se.copy(t.center).add(Te)),this.expandByPoint(Se.copy(t.center).sub(Te)),this}equals(t){return t.center.equals(this.center)&&t.radius===this.radius}clone(){return(new this.constructor).copy(this)}}const Re=new se,Ce=new se,Le=new se,Pe=new se,De=new se,Ie=new se,Ne=new se;class Be{constructor(t=new se,e=new se(0,0,-1)){this.origin=t,this.direction=e}set(t,e){return this.origin.copy(t),this.direction.copy(e),this}copy(t){return this.origin.copy(t.origin),this.direction.copy(t.direction),this}at(t,e){return e.copy(this.direction).multiplyScalar(t).add(this.origin)}lookAt(t){return this.direction.copy(t).sub(this.origin).normalize(),this}recast(t){return this.origin.copy(this.at(t,Re)),this}closestPointToPoint(t,e){e.subVectors(t,this.origin);const n=e.dot(this.direction);return n<0?e.copy(this.origin):e.copy(this.direction).multiplyScalar(n).add(this.origin)}distanceToPoint(t){return Math.sqrt(this.distanceSqToPoint(t))}distanceSqToPoint(t){const e=Re.subVectors(t,this.origin).dot(this.direction);return e<0?this.origin.distanceToSquared(t):(Re.copy(this.direction).multiplyScalar(e).add(this.origin),Re.distanceToSquared(t))}distanceSqToSegment(t,e,n,i){Ce.copy(t).add(e).multiplyScalar(.5),Le.copy(e).sub(t).normalize(),Pe.copy(this.origin).sub(Ce);const r=.5*t.distanceTo(e),s=-this.direction.dot(Le),a=Pe.dot(this.direction),o=-Pe.dot(Le),l=Pe.lengthSq(),c=Math.abs(1-s*s);let h,u,d,p;if(c>0)if(h=s*o-a,u=s*a-o,p=r*c,h>=0)if(u>=-p)if(u<=p){const t=1/c;h*=t,u*=t,d=h*(h+s*u+2*a)+u*(s*h+u+2*o)+l}else u=r,h=Math.max(0,-(s*u+a)),d=-h*h+u*(u+2*o)+l;else u=-r,h=Math.max(0,-(s*u+a)),d=-h*h+u*(u+2*o)+l;else u<=-p?(h=Math.max(0,-(-s*r+a)),u=h>0?-r:Math.min(Math.max(-r,-o),r),d=-h*h+u*(u+2*o)+l):u<=p?(h=0,u=Math.min(Math.max(-r,-o),r),d=u*(u+2*o)+l):(h=Math.max(0,-(s*r+a)),u=h>0?r:Math.min(Math.max(-r,-o),r),d=-h*h+u*(u+2*o)+l);else u=s>0?-r:r,h=Math.max(0,-(s*u+a)),d=-h*h+u*(u+2*o)+l;return n&&n.copy(this.direction).multiplyScalar(h).add(this.origin),i&&i.copy(Le).multiplyScalar(u).add(Ce),d}intersectSphere(t,e){Re.subVectors(t.center,this.origin);const n=Re.dot(this.direction),i=Re.dot(Re)-n*n,r=t.radius*t.radius;if(i>r)return null;const s=Math.sqrt(r-i),a=n-s,o=n+s;return a<0&&o<0?null:a<0?this.at(o,e):this.at(a,e)}intersectsSphere(t){return this.distanceSqToPoint(t.center)<=t.radius*t.radius}distanceToPlane(t){const e=t.normal.dot(this.direction);if(0===e)return 0===t.distanceToPoint(this.origin)?0:null;const n=-(this.origin.dot(t.normal)+t.constant)/e;return n>=0?n:null}intersectPlane(t,e){const n=this.distanceToPlane(t);return null===n?null:this.at(n,e)}intersectsPlane(t){const e=t.distanceToPoint(this.origin);if(0===e)return!0;return t.normal.dot(this.direction)*e<0}intersectBox(t,e){let n,i,r,s,a,o;const l=1/this.direction.x,c=1/this.direction.y,h=1/this.direction.z,u=this.origin;return l>=0?(n=(t.min.x-u.x)*l,i=(t.max.x-u.x)*l):(n=(t.max.x-u.x)*l,i=(t.min.x-u.x)*l),c>=0?(r=(t.min.y-u.y)*c,s=(t.max.y-u.y)*c):(r=(t.max.y-u.y)*c,s=(t.min.y-u.y)*c),n>s||r>i?null:((r>n||n!=n)&&(n=r),(s=0?(a=(t.min.z-u.z)*h,o=(t.max.z-u.z)*h):(a=(t.max.z-u.z)*h,o=(t.min.z-u.z)*h),n>o||a>i?null:((a>n||n!=n)&&(n=a),(o=0?n:i,e)))}intersectsBox(t){return null!==this.intersectBox(t,Re)}intersectTriangle(t,e,n,i,r){De.subVectors(e,t),Ie.subVectors(n,t),Ne.crossVectors(De,Ie);let s,a=this.direction.dot(Ne);if(a>0){if(i)return null;s=1}else{if(!(a<0))return null;s=-1,a=-a}Pe.subVectors(this.origin,t);const o=s*this.direction.dot(Ie.crossVectors(Pe,Ie));if(o<0)return null;const l=s*this.direction.dot(De.cross(Pe));if(l<0)return null;if(o+l>a)return null;const c=-s*Pe.dot(Ne);return c<0?null:this.at(c/a,r)}applyMatrix4(t){return this.origin.applyMatrix4(t),this.direction.transformDirection(t),this}equals(t){return t.origin.equals(this.origin)&&t.direction.equals(this.direction)}clone(){return(new this.constructor).copy(this)}}class ze{constructor(){this.elements=[1,0,0,0,0,1,0,0,0,0,1,0,0,0,0,1],arguments.length>0&&console.error("THREE.Matrix4: the constructor no longer reads arguments. use .set() instead.")}set(t,e,n,i,r,s,a,o,l,c,h,u,d,p,m,f){const g=this.elements;return g[0]=t,g[4]=e,g[8]=n,g[12]=i,g[1]=r,g[5]=s,g[9]=a,g[13]=o,g[2]=l,g[6]=c,g[10]=h,g[14]=u,g[3]=d,g[7]=p,g[11]=m,g[15]=f,this}identity(){return this.set(1,0,0,0,0,1,0,0,0,0,1,0,0,0,0,1),this}clone(){return(new ze).fromArray(this.elements)}copy(t){const e=this.elements,n=t.elements;return e[0]=n[0],e[1]=n[1],e[2]=n[2],e[3]=n[3],e[4]=n[4],e[5]=n[5],e[6]=n[6],e[7]=n[7],e[8]=n[8],e[9]=n[9],e[10]=n[10],e[11]=n[11],e[12]=n[12],e[13]=n[13],e[14]=n[14],e[15]=n[15],this}copyPosition(t){const e=this.elements,n=t.elements;return e[12]=n[12],e[13]=n[13],e[14]=n[14],this}setFromMatrix3(t){const e=t.elements;return this.set(e[0],e[3],e[6],0,e[1],e[4],e[7],0,e[2],e[5],e[8],0,0,0,0,1),this}extractBasis(t,e,n){return t.setFromMatrixColumn(this,0),e.setFromMatrixColumn(this,1),n.setFromMatrixColumn(this,2),this}makeBasis(t,e,n){return this.set(t.x,e.x,n.x,0,t.y,e.y,n.y,0,t.z,e.z,n.z,0,0,0,0,1),this}extractRotation(t){const e=this.elements,n=t.elements,i=1/Oe.setFromMatrixColumn(t,0).length(),r=1/Oe.setFromMatrixColumn(t,1).length(),s=1/Oe.setFromMatrixColumn(t,2).length();return e[0]=n[0]*i,e[1]=n[1]*i,e[2]=n[2]*i,e[3]=0,e[4]=n[4]*r,e[5]=n[5]*r,e[6]=n[6]*r,e[7]=0,e[8]=n[8]*s,e[9]=n[9]*s,e[10]=n[10]*s,e[11]=0,e[12]=0,e[13]=0,e[14]=0,e[15]=1,this}makeRotationFromEuler(t){t&&t.isEuler||console.error("THREE.Matrix4: .makeRotationFromEuler() now expects a Euler rotation rather than a Vector3 and order.");const e=this.elements,n=t.x,i=t.y,r=t.z,s=Math.cos(n),a=Math.sin(n),o=Math.cos(i),l=Math.sin(i),c=Math.cos(r),h=Math.sin(r);if("XYZ"===t.order){const t=s*c,n=s*h,i=a*c,r=a*h;e[0]=o*c,e[4]=-o*h,e[8]=l,e[1]=n+i*l,e[5]=t-r*l,e[9]=-a*o,e[2]=r-t*l,e[6]=i+n*l,e[10]=s*o}else if("YXZ"===t.order){const t=o*c,n=o*h,i=l*c,r=l*h;e[0]=t+r*a,e[4]=i*a-n,e[8]=s*l,e[1]=s*h,e[5]=s*c,e[9]=-a,e[2]=n*a-i,e[6]=r+t*a,e[10]=s*o}else if("ZXY"===t.order){const t=o*c,n=o*h,i=l*c,r=l*h;e[0]=t-r*a,e[4]=-s*h,e[8]=i+n*a,e[1]=n+i*a,e[5]=s*c,e[9]=r-t*a,e[2]=-s*l,e[6]=a,e[10]=s*o}else if("ZYX"===t.order){const t=s*c,n=s*h,i=a*c,r=a*h;e[0]=o*c,e[4]=i*l-n,e[8]=t*l+r,e[1]=o*h,e[5]=r*l+t,e[9]=n*l-i,e[2]=-l,e[6]=a*o,e[10]=s*o}else if("YZX"===t.order){const t=s*o,n=s*l,i=a*o,r=a*l;e[0]=o*c,e[4]=r-t*h,e[8]=i*h+n,e[1]=h,e[5]=s*c,e[9]=-a*c,e[2]=-l*c,e[6]=n*h+i,e[10]=t-r*h}else if("XZY"===t.order){const t=s*o,n=s*l,i=a*o,r=a*l;e[0]=o*c,e[4]=-h,e[8]=l*c,e[1]=t*h+r,e[5]=s*c,e[9]=n*h-i,e[2]=i*h-n,e[6]=a*c,e[10]=r*h+t}return e[3]=0,e[7]=0,e[11]=0,e[12]=0,e[13]=0,e[14]=0,e[15]=1,this}makeRotationFromQuaternion(t){return this.compose(Fe,t,He)}lookAt(t,e,n){const i=this.elements;return Ve.subVectors(t,e),0===Ve.lengthSq()&&(Ve.z=1),Ve.normalize(),Ge.crossVectors(n,Ve),0===Ge.lengthSq()&&(1===Math.abs(n.z)?Ve.x+=1e-4:Ve.z+=1e-4,Ve.normalize(),Ge.crossVectors(n,Ve)),Ge.normalize(),ke.crossVectors(Ve,Ge),i[0]=Ge.x,i[4]=ke.x,i[8]=Ve.x,i[1]=Ge.y,i[5]=ke.y,i[9]=Ve.y,i[2]=Ge.z,i[6]=ke.z,i[10]=Ve.z,this}multiply(t,e){return void 0!==e?(console.warn("THREE.Matrix4: .multiply() now only accepts one argument. Use .multiplyMatrices( a, b ) instead."),this.multiplyMatrices(t,e)):this.multiplyMatrices(this,t)}premultiply(t){return this.multiplyMatrices(t,this)}multiplyMatrices(t,e){const n=t.elements,i=e.elements,r=this.elements,s=n[0],a=n[4],o=n[8],l=n[12],c=n[1],h=n[5],u=n[9],d=n[13],p=n[2],m=n[6],f=n[10],g=n[14],v=n[3],y=n[7],x=n[11],_=n[15],b=i[0],M=i[4],w=i[8],S=i[12],T=i[1],E=i[5],A=i[9],R=i[13],C=i[2],L=i[6],P=i[10],D=i[14],I=i[3],N=i[7],B=i[11],z=i[15];return r[0]=s*b+a*T+o*C+l*I,r[4]=s*M+a*E+o*L+l*N,r[8]=s*w+a*A+o*P+l*B,r[12]=s*S+a*R+o*D+l*z,r[1]=c*b+h*T+u*C+d*I,r[5]=c*M+h*E+u*L+d*N,r[9]=c*w+h*A+u*P+d*B,r[13]=c*S+h*R+u*D+d*z,r[2]=p*b+m*T+f*C+g*I,r[6]=p*M+m*E+f*L+g*N,r[10]=p*w+m*A+f*P+g*B,r[14]=p*S+m*R+f*D+g*z,r[3]=v*b+y*T+x*C+_*I,r[7]=v*M+y*E+x*L+_*N,r[11]=v*w+y*A+x*P+_*B,r[15]=v*S+y*R+x*D+_*z,this}multiplyScalar(t){const e=this.elements;return e[0]*=t,e[4]*=t,e[8]*=t,e[12]*=t,e[1]*=t,e[5]*=t,e[9]*=t,e[13]*=t,e[2]*=t,e[6]*=t,e[10]*=t,e[14]*=t,e[3]*=t,e[7]*=t,e[11]*=t,e[15]*=t,this}determinant(){const t=this.elements,e=t[0],n=t[4],i=t[8],r=t[12],s=t[1],a=t[5],o=t[9],l=t[13],c=t[2],h=t[6],u=t[10],d=t[14];return t[3]*(+r*o*h-i*l*h-r*a*u+n*l*u+i*a*d-n*o*d)+t[7]*(+e*o*d-e*l*u+r*s*u-i*s*d+i*l*c-r*o*c)+t[11]*(+e*l*h-e*a*d-r*s*h+n*s*d+r*a*c-n*l*c)+t[15]*(-i*a*c-e*o*h+e*a*u+i*s*h-n*s*u+n*o*c)}transpose(){const t=this.elements;let e;return e=t[1],t[1]=t[4],t[4]=e,e=t[2],t[2]=t[8],t[8]=e,e=t[6],t[6]=t[9],t[9]=e,e=t[3],t[3]=t[12],t[12]=e,e=t[7],t[7]=t[13],t[13]=e,e=t[11],t[11]=t[14],t[14]=e,this}setPosition(t,e,n){const i=this.elements;return t.isVector3?(i[12]=t.x,i[13]=t.y,i[14]=t.z):(i[12]=t,i[13]=e,i[14]=n),this}invert(){const t=this.elements,e=t[0],n=t[1],i=t[2],r=t[3],s=t[4],a=t[5],o=t[6],l=t[7],c=t[8],h=t[9],u=t[10],d=t[11],p=t[12],m=t[13],f=t[14],g=t[15],v=h*f*l-m*u*l+m*o*d-a*f*d-h*o*g+a*u*g,y=p*u*l-c*f*l-p*o*d+s*f*d+c*o*g-s*u*g,x=c*m*l-p*h*l+p*a*d-s*m*d-c*a*g+s*h*g,_=p*h*o-c*m*o-p*a*u+s*m*u+c*a*f-s*h*f,b=e*v+n*y+i*x+r*_;if(0===b)return this.set(0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0);const M=1/b;return t[0]=v*M,t[1]=(m*u*r-h*f*r-m*i*d+n*f*d+h*i*g-n*u*g)*M,t[2]=(a*f*r-m*o*r+m*i*l-n*f*l-a*i*g+n*o*g)*M,t[3]=(h*o*r-a*u*r-h*i*l+n*u*l+a*i*d-n*o*d)*M,t[4]=y*M,t[5]=(c*f*r-p*u*r+p*i*d-e*f*d-c*i*g+e*u*g)*M,t[6]=(p*o*r-s*f*r-p*i*l+e*f*l+s*i*g-e*o*g)*M,t[7]=(s*u*r-c*o*r+c*i*l-e*u*l-s*i*d+e*o*d)*M,t[8]=x*M,t[9]=(p*h*r-c*m*r-p*n*d+e*m*d+c*n*g-e*h*g)*M,t[10]=(s*m*r-p*a*r+p*n*l-e*m*l-s*n*g+e*a*g)*M,t[11]=(c*a*r-s*h*r-c*n*l+e*h*l+s*n*d-e*a*d)*M,t[12]=_*M,t[13]=(c*m*i-p*h*i+p*n*u-e*m*u-c*n*f+e*h*f)*M,t[14]=(p*a*i-s*m*i-p*n*o+e*m*o+s*n*f-e*a*f)*M,t[15]=(s*h*i-c*a*i+c*n*o-e*h*o-s*n*u+e*a*u)*M,this}scale(t){const e=this.elements,n=t.x,i=t.y,r=t.z;return e[0]*=n,e[4]*=i,e[8]*=r,e[1]*=n,e[5]*=i,e[9]*=r,e[2]*=n,e[6]*=i,e[10]*=r,e[3]*=n,e[7]*=i,e[11]*=r,this}getMaxScaleOnAxis(){const t=this.elements,e=t[0]*t[0]+t[1]*t[1]+t[2]*t[2],n=t[4]*t[4]+t[5]*t[5]+t[6]*t[6],i=t[8]*t[8]+t[9]*t[9]+t[10]*t[10];return Math.sqrt(Math.max(e,n,i))}makeTranslation(t,e,n){return this.set(1,0,0,t,0,1,0,e,0,0,1,n,0,0,0,1),this}makeRotationX(t){const e=Math.cos(t),n=Math.sin(t);return this.set(1,0,0,0,0,e,-n,0,0,n,e,0,0,0,0,1),this}makeRotationY(t){const e=Math.cos(t),n=Math.sin(t);return this.set(e,0,n,0,0,1,0,0,-n,0,e,0,0,0,0,1),this}makeRotationZ(t){const e=Math.cos(t),n=Math.sin(t);return this.set(e,-n,0,0,n,e,0,0,0,0,1,0,0,0,0,1),this}makeRotationAxis(t,e){const n=Math.cos(e),i=Math.sin(e),r=1-n,s=t.x,a=t.y,o=t.z,l=r*s,c=r*a;return this.set(l*s+n,l*a-i*o,l*o+i*a,0,l*a+i*o,c*a+n,c*o-i*s,0,l*o-i*a,c*o+i*s,r*o*o+n,0,0,0,0,1),this}makeScale(t,e,n){return this.set(t,0,0,0,0,e,0,0,0,0,n,0,0,0,0,1),this}makeShear(t,e,n,i,r,s){return this.set(1,n,r,0,t,1,s,0,e,i,1,0,0,0,0,1),this}compose(t,e,n){const i=this.elements,r=e._x,s=e._y,a=e._z,o=e._w,l=r+r,c=s+s,h=a+a,u=r*l,d=r*c,p=r*h,m=s*c,f=s*h,g=a*h,v=o*l,y=o*c,x=o*h,_=n.x,b=n.y,M=n.z;return i[0]=(1-(m+g))*_,i[1]=(d+x)*_,i[2]=(p-y)*_,i[3]=0,i[4]=(d-x)*b,i[5]=(1-(u+g))*b,i[6]=(f+v)*b,i[7]=0,i[8]=(p+y)*M,i[9]=(f-v)*M,i[10]=(1-(u+m))*M,i[11]=0,i[12]=t.x,i[13]=t.y,i[14]=t.z,i[15]=1,this}decompose(t,e,n){const i=this.elements;let r=Oe.set(i[0],i[1],i[2]).length();const s=Oe.set(i[4],i[5],i[6]).length(),a=Oe.set(i[8],i[9],i[10]).length();this.determinant()<0&&(r=-r),t.x=i[12],t.y=i[13],t.z=i[14],Ue.copy(this);const o=1/r,l=1/s,c=1/a;return Ue.elements[0]*=o,Ue.elements[1]*=o,Ue.elements[2]*=o,Ue.elements[4]*=l,Ue.elements[5]*=l,Ue.elements[6]*=l,Ue.elements[8]*=c,Ue.elements[9]*=c,Ue.elements[10]*=c,e.setFromRotationMatrix(Ue),n.x=r,n.y=s,n.z=a,this}makePerspective(t,e,n,i,r,s){void 0===s&&console.warn("THREE.Matrix4: .makePerspective() has been redefined and has a new signature. Please check the docs.");const a=this.elements,o=2*r/(e-t),l=2*r/(n-i),c=(e+t)/(e-t),h=(n+i)/(n-i),u=-(s+r)/(s-r),d=-2*s*r/(s-r);return a[0]=o,a[4]=0,a[8]=c,a[12]=0,a[1]=0,a[5]=l,a[9]=h,a[13]=0,a[2]=0,a[6]=0,a[10]=u,a[14]=d,a[3]=0,a[7]=0,a[11]=-1,a[15]=0,this}makeOrthographic(t,e,n,i,r,s){const a=this.elements,o=1/(e-t),l=1/(n-i),c=1/(s-r),h=(e+t)*o,u=(n+i)*l,d=(s+r)*c;return a[0]=2*o,a[4]=0,a[8]=0,a[12]=-h,a[1]=0,a[5]=2*l,a[9]=0,a[13]=-u,a[2]=0,a[6]=0,a[10]=-2*c,a[14]=-d,a[3]=0,a[7]=0,a[11]=0,a[15]=1,this}equals(t){const e=this.elements,n=t.elements;for(let t=0;t<16;t++)if(e[t]!==n[t])return!1;return!0}fromArray(t,e=0){for(let n=0;n<16;n++)this.elements[n]=t[n+e];return this}toArray(t=[],e=0){const n=this.elements;return t[e]=n[0],t[e+1]=n[1],t[e+2]=n[2],t[e+3]=n[3],t[e+4]=n[4],t[e+5]=n[5],t[e+6]=n[6],t[e+7]=n[7],t[e+8]=n[8],t[e+9]=n[9],t[e+10]=n[10],t[e+11]=n[11],t[e+12]=n[12],t[e+13]=n[13],t[e+14]=n[14],t[e+15]=n[15],t}}ze.prototype.isMatrix4=!0;const Oe=new se,Ue=new ze,Fe=new se(0,0,0),He=new se(1,1,1),Ge=new se,ke=new se,Ve=new se,We=new ze,je=new re;class qe{constructor(t=0,e=0,n=0,i=qe.DefaultOrder){this._x=t,this._y=e,this._z=n,this._order=i}get x(){return this._x}set x(t){this._x=t,this._onChangeCallback()}get y(){return this._y}set y(t){this._y=t,this._onChangeCallback()}get z(){return this._z}set z(t){this._z=t,this._onChangeCallback()}get order(){return this._order}set order(t){this._order=t,this._onChangeCallback()}set(t,e,n,i=this._order){return this._x=t,this._y=e,this._z=n,this._order=i,this._onChangeCallback(),this}clone(){return new this.constructor(this._x,this._y,this._z,this._order)}copy(t){return this._x=t._x,this._y=t._y,this._z=t._z,this._order=t._order,this._onChangeCallback(),this}setFromRotationMatrix(t,e=this._order,n=!0){const i=t.elements,r=i[0],s=i[4],a=i[8],o=i[1],l=i[5],c=i[9],h=i[2],u=i[6],d=i[10];switch(e){case"XYZ":this._y=Math.asin(bt(a,-1,1)),Math.abs(a)<.9999999?(this._x=Math.atan2(-c,d),this._z=Math.atan2(-s,r)):(this._x=Math.atan2(u,l),this._z=0);break;case"YXZ":this._x=Math.asin(-bt(c,-1,1)),Math.abs(c)<.9999999?(this._y=Math.atan2(a,d),this._z=Math.atan2(o,l)):(this._y=Math.atan2(-h,r),this._z=0);break;case"ZXY":this._x=Math.asin(bt(u,-1,1)),Math.abs(u)<.9999999?(this._y=Math.atan2(-h,d),this._z=Math.atan2(-s,l)):(this._y=0,this._z=Math.atan2(o,r));break;case"ZYX":this._y=Math.asin(-bt(h,-1,1)),Math.abs(h)<.9999999?(this._x=Math.atan2(u,d),this._z=Math.atan2(o,r)):(this._x=0,this._z=Math.atan2(-s,l));break;case"YZX":this._z=Math.asin(bt(o,-1,1)),Math.abs(o)<.9999999?(this._x=Math.atan2(-c,l),this._y=Math.atan2(-h,r)):(this._x=0,this._y=Math.atan2(a,d));break;case"XZY":this._z=Math.asin(-bt(s,-1,1)),Math.abs(s)<.9999999?(this._x=Math.atan2(u,l),this._y=Math.atan2(a,r)):(this._x=Math.atan2(-c,d),this._y=0);break;default:console.warn("THREE.Euler: .setFromRotationMatrix() encountered an unknown order: "+e)}return this._order=e,!0===n&&this._onChangeCallback(),this}setFromQuaternion(t,e,n){return We.makeRotationFromQuaternion(t),this.setFromRotationMatrix(We,e,n)}setFromVector3(t,e=this._order){return this.set(t.x,t.y,t.z,e)}reorder(t){return je.setFromEuler(this),this.setFromQuaternion(je,t)}equals(t){return t._x===this._x&&t._y===this._y&&t._z===this._z&&t._order===this._order}fromArray(t){return this._x=t[0],this._y=t[1],this._z=t[2],void 0!==t[3]&&(this._order=t[3]),this._onChangeCallback(),this}toArray(t=[],e=0){return t[e]=this._x,t[e+1]=this._y,t[e+2]=this._z,t[e+3]=this._order,t}_onChange(t){return this._onChangeCallback=t,this}_onChangeCallback(){}*[Symbol.iterator](){yield this._x,yield this._y,yield this._z,yield this._order}}qe.prototype.isEuler=!0,qe.DefaultOrder="XYZ",qe.RotationOrders=["XYZ","YZX","ZXY","XZY","YXZ","ZYX"];class Xe{constructor(){this.mask=1}set(t){this.mask=(1<>>0}enable(t){this.mask|=1<1){for(let t=0;t1){for(let t=0;t0){i.children=[];for(let e=0;e0){i.animations=[];for(let e=0;e0&&(n.geometries=e),i.length>0&&(n.materials=i),r.length>0&&(n.textures=r),a.length>0&&(n.images=a),o.length>0&&(n.shapes=o),l.length>0&&(n.skeletons=l),c.length>0&&(n.animations=c),h.length>0&&(n.nodes=h)}return n.object=i,n;function s(t){const e=[];for(const n in t){const i=t[n];delete i.metadata,e.push(i)}return e}}clone(t){return(new this.constructor).copy(this,t)}copy(t,e=!0){if(this.name=t.name,this.up.copy(t.up),this.position.copy(t.position),this.rotation.order=t.rotation.order,this.quaternion.copy(t.quaternion),this.scale.copy(t.scale),this.matrix.copy(t.matrix),this.matrixWorld.copy(t.matrixWorld),this.matrixAutoUpdate=t.matrixAutoUpdate,this.matrixWorldNeedsUpdate=t.matrixWorldNeedsUpdate,this.layers.mask=t.layers.mask,this.visible=t.visible,this.castShadow=t.castShadow,this.receiveShadow=t.receiveShadow,this.frustumCulled=t.frustumCulled,this.renderOrder=t.renderOrder,this.userData=JSON.parse(JSON.stringify(t.userData)),!0===e)for(let e=0;e0?i.multiplyScalar(1/Math.sqrt(r)):i.set(0,0,0)}static getBarycoord(t,e,n,i,r){cn.subVectors(i,e),hn.subVectors(n,e),un.subVectors(t,e);const s=cn.dot(cn),a=cn.dot(hn),o=cn.dot(un),l=hn.dot(hn),c=hn.dot(un),h=s*l-a*a;if(0===h)return r.set(-2,-1,-1);const u=1/h,d=(l*o-a*c)*u,p=(s*c-a*o)*u;return r.set(1-d-p,p,d)}static containsPoint(t,e,n,i){return this.getBarycoord(t,e,n,i,dn),dn.x>=0&&dn.y>=0&&dn.x+dn.y<=1}static getUV(t,e,n,i,r,s,a,o){return this.getBarycoord(t,e,n,i,dn),o.set(0,0),o.addScaledVector(r,dn.x),o.addScaledVector(s,dn.y),o.addScaledVector(a,dn.z),o}static isFrontFacing(t,e,n,i){return cn.subVectors(n,e),hn.subVectors(t,e),cn.cross(hn).dot(i)<0}set(t,e,n){return this.a.copy(t),this.b.copy(e),this.c.copy(n),this}setFromPointsAndIndices(t,e,n,i){return this.a.copy(t[e]),this.b.copy(t[n]),this.c.copy(t[i]),this}setFromAttributeAndIndices(t,e,n,i){return this.a.fromBufferAttribute(t,e),this.b.fromBufferAttribute(t,n),this.c.fromBufferAttribute(t,i),this}clone(){return(new this.constructor).copy(this)}copy(t){return this.a.copy(t.a),this.b.copy(t.b),this.c.copy(t.c),this}getArea(){return cn.subVectors(this.c,this.b),hn.subVectors(this.a,this.b),.5*cn.cross(hn).length()}getMidpoint(t){return t.addVectors(this.a,this.b).add(this.c).multiplyScalar(1/3)}getNormal(t){return xn.getNormal(this.a,this.b,this.c,t)}getPlane(t){return t.setFromCoplanarPoints(this.a,this.b,this.c)}getBarycoord(t,e){return xn.getBarycoord(t,this.a,this.b,this.c,e)}getUV(t,e,n,i,r){return xn.getUV(t,this.a,this.b,this.c,e,n,i,r)}containsPoint(t){return xn.containsPoint(t,this.a,this.b,this.c)}isFrontFacing(t){return xn.isFrontFacing(this.a,this.b,this.c,t)}intersectsBox(t){return t.intersectsTriangle(this)}closestPointToPoint(t,e){const n=this.a,i=this.b,r=this.c;let s,a;pn.subVectors(i,n),mn.subVectors(r,n),gn.subVectors(t,n);const o=pn.dot(gn),l=mn.dot(gn);if(o<=0&&l<=0)return e.copy(n);vn.subVectors(t,i);const c=pn.dot(vn),h=mn.dot(vn);if(c>=0&&h<=c)return e.copy(i);const u=o*h-c*l;if(u<=0&&o>=0&&c<=0)return s=o/(o-c),e.copy(n).addScaledVector(pn,s);yn.subVectors(t,r);const d=pn.dot(yn),p=mn.dot(yn);if(p>=0&&d<=p)return e.copy(r);const m=d*l-o*p;if(m<=0&&l>=0&&p<=0)return a=l/(l-p),e.copy(n).addScaledVector(mn,a);const f=c*p-d*h;if(f<=0&&h-c>=0&&d-p>=0)return fn.subVectors(r,i),a=(h-c)/(h-c+(d-p)),e.copy(i).addScaledVector(fn,a);const g=1/(f+m+u);return s=m*g,a=u*g,e.copy(n).addScaledVector(pn,s).addScaledVector(mn,a)}equals(t){return t.a.equals(this.a)&&t.b.equals(this.b)&&t.c.equals(this.c)}}let _n=0;class bn extends ft{constructor(){super(),Object.defineProperty(this,"id",{value:_n++}),this.uuid=_t(),this.name="",this.type="Material",this.blending=1,this.side=0,this.vertexColors=!1,this.opacity=1,this.transparent=!1,this.blendSrc=204,this.blendDst=205,this.blendEquation=n,this.blendSrcAlpha=null,this.blendDstAlpha=null,this.blendEquationAlpha=null,this.depthFunc=3,this.depthTest=!0,this.depthWrite=!0,this.stencilWriteMask=255,this.stencilFunc=519,this.stencilRef=0,this.stencilFuncMask=255,this.stencilFail=ht,this.stencilZFail=ht,this.stencilZPass=ht,this.stencilWrite=!1,this.clippingPlanes=null,this.clipIntersection=!1,this.clipShadows=!1,this.shadowSide=null,this.colorWrite=!0,this.precision=null,this.polygonOffset=!1,this.polygonOffsetFactor=0,this.polygonOffsetUnits=0,this.dithering=!1,this.alphaToCoverage=!1,this.premultipliedAlpha=!1,this.visible=!0,this.toneMapped=!0,this.userData={},this.version=0,this._alphaTest=0}get alphaTest(){return this._alphaTest}set alphaTest(t){this._alphaTest>0!=t>0&&this.version++,this._alphaTest=t}onBuild(){}onBeforeRender(){}onBeforeCompile(){}customProgramCacheKey(){return this.onBeforeCompile.toString()}setValues(t){if(void 0!==t)for(const e in t){const n=t[e];if(void 0===n){console.warn("THREE.Material: '"+e+"' parameter is undefined.");continue}if("shading"===e){console.warn("THREE."+this.type+": .shading has been removed. Use the boolean .flatShading instead."),this.flatShading=1===n;continue}const i=this[e];void 0!==i?i&&i.isColor?i.set(n):i&&i.isVector3&&n&&n.isVector3?i.copy(n):this[e]=n:console.warn("THREE."+this.type+": '"+e+"' is not a property of this material.")}}toJSON(t){const e=void 0===t||"string"==typeof t;e&&(t={textures:{},images:{}});const n={metadata:{version:4.5,type:"Material",generator:"Material.toJSON"}};function i(t){const e=[];for(const n in t){const i=t[n];delete i.metadata,e.push(i)}return e}if(n.uuid=this.uuid,n.type=this.type,""!==this.name&&(n.name=this.name),this.color&&this.color.isColor&&(n.color=this.color.getHex()),void 0!==this.roughness&&(n.roughness=this.roughness),void 0!==this.metalness&&(n.metalness=this.metalness),void 0!==this.sheen&&(n.sheen=this.sheen),this.sheenColor&&this.sheenColor.isColor&&(n.sheenColor=this.sheenColor.getHex()),void 0!==this.sheenRoughness&&(n.sheenRoughness=this.sheenRoughness),this.emissive&&this.emissive.isColor&&(n.emissive=this.emissive.getHex()),this.emissiveIntensity&&1!==this.emissiveIntensity&&(n.emissiveIntensity=this.emissiveIntensity),this.specular&&this.specular.isColor&&(n.specular=this.specular.getHex()),void 0!==this.specularIntensity&&(n.specularIntensity=this.specularIntensity),this.specularColor&&this.specularColor.isColor&&(n.specularColor=this.specularColor.getHex()),void 0!==this.shininess&&(n.shininess=this.shininess),void 0!==this.clearcoat&&(n.clearcoat=this.clearcoat),void 0!==this.clearcoatRoughness&&(n.clearcoatRoughness=this.clearcoatRoughness),this.clearcoatMap&&this.clearcoatMap.isTexture&&(n.clearcoatMap=this.clearcoatMap.toJSON(t).uuid),this.clearcoatRoughnessMap&&this.clearcoatRoughnessMap.isTexture&&(n.clearcoatRoughnessMap=this.clearcoatRoughnessMap.toJSON(t).uuid),this.clearcoatNormalMap&&this.clearcoatNormalMap.isTexture&&(n.clearcoatNormalMap=this.clearcoatNormalMap.toJSON(t).uuid,n.clearcoatNormalScale=this.clearcoatNormalScale.toArray()),this.map&&this.map.isTexture&&(n.map=this.map.toJSON(t).uuid),this.matcap&&this.matcap.isTexture&&(n.matcap=this.matcap.toJSON(t).uuid),this.alphaMap&&this.alphaMap.isTexture&&(n.alphaMap=this.alphaMap.toJSON(t).uuid),this.lightMap&&this.lightMap.isTexture&&(n.lightMap=this.lightMap.toJSON(t).uuid,n.lightMapIntensity=this.lightMapIntensity),this.aoMap&&this.aoMap.isTexture&&(n.aoMap=this.aoMap.toJSON(t).uuid,n.aoMapIntensity=this.aoMapIntensity),this.bumpMap&&this.bumpMap.isTexture&&(n.bumpMap=this.bumpMap.toJSON(t).uuid,n.bumpScale=this.bumpScale),this.normalMap&&this.normalMap.isTexture&&(n.normalMap=this.normalMap.toJSON(t).uuid,n.normalMapType=this.normalMapType,n.normalScale=this.normalScale.toArray()),this.displacementMap&&this.displacementMap.isTexture&&(n.displacementMap=this.displacementMap.toJSON(t).uuid,n.displacementScale=this.displacementScale,n.displacementBias=this.displacementBias),this.roughnessMap&&this.roughnessMap.isTexture&&(n.roughnessMap=this.roughnessMap.toJSON(t).uuid),this.metalnessMap&&this.metalnessMap.isTexture&&(n.metalnessMap=this.metalnessMap.toJSON(t).uuid),this.emissiveMap&&this.emissiveMap.isTexture&&(n.emissiveMap=this.emissiveMap.toJSON(t).uuid),this.specularMap&&this.specularMap.isTexture&&(n.specularMap=this.specularMap.toJSON(t).uuid),this.specularIntensityMap&&this.specularIntensityMap.isTexture&&(n.specularIntensityMap=this.specularIntensityMap.toJSON(t).uuid),this.specularColorMap&&this.specularColorMap.isTexture&&(n.specularColorMap=this.specularColorMap.toJSON(t).uuid),this.envMap&&this.envMap.isTexture&&(n.envMap=this.envMap.toJSON(t).uuid,void 0!==this.combine&&(n.combine=this.combine)),void 0!==this.envMapIntensity&&(n.envMapIntensity=this.envMapIntensity),void 0!==this.reflectivity&&(n.reflectivity=this.reflectivity),void 0!==this.refractionRatio&&(n.refractionRatio=this.refractionRatio),this.gradientMap&&this.gradientMap.isTexture&&(n.gradientMap=this.gradientMap.toJSON(t).uuid),void 0!==this.transmission&&(n.transmission=this.transmission),this.transmissionMap&&this.transmissionMap.isTexture&&(n.transmissionMap=this.transmissionMap.toJSON(t).uuid),void 0!==this.thickness&&(n.thickness=this.thickness),this.thicknessMap&&this.thicknessMap.isTexture&&(n.thicknessMap=this.thicknessMap.toJSON(t).uuid),void 0!==this.attenuationDistance&&(n.attenuationDistance=this.attenuationDistance),void 0!==this.attenuationColor&&(n.attenuationColor=this.attenuationColor.getHex()),void 0!==this.size&&(n.size=this.size),null!==this.shadowSide&&(n.shadowSide=this.shadowSide),void 0!==this.sizeAttenuation&&(n.sizeAttenuation=this.sizeAttenuation),1!==this.blending&&(n.blending=this.blending),0!==this.side&&(n.side=this.side),this.vertexColors&&(n.vertexColors=!0),this.opacity<1&&(n.opacity=this.opacity),!0===this.transparent&&(n.transparent=this.transparent),n.depthFunc=this.depthFunc,n.depthTest=this.depthTest,n.depthWrite=this.depthWrite,n.colorWrite=this.colorWrite,n.stencilWrite=this.stencilWrite,n.stencilWriteMask=this.stencilWriteMask,n.stencilFunc=this.stencilFunc,n.stencilRef=this.stencilRef,n.stencilFuncMask=this.stencilFuncMask,n.stencilFail=this.stencilFail,n.stencilZFail=this.stencilZFail,n.stencilZPass=this.stencilZPass,void 0!==this.rotation&&0!==this.rotation&&(n.rotation=this.rotation),!0===this.polygonOffset&&(n.polygonOffset=!0),0!==this.polygonOffsetFactor&&(n.polygonOffsetFactor=this.polygonOffsetFactor),0!==this.polygonOffsetUnits&&(n.polygonOffsetUnits=this.polygonOffsetUnits),void 0!==this.linewidth&&1!==this.linewidth&&(n.linewidth=this.linewidth),void 0!==this.dashSize&&(n.dashSize=this.dashSize),void 0!==this.gapSize&&(n.gapSize=this.gapSize),void 0!==this.scale&&(n.scale=this.scale),!0===this.dithering&&(n.dithering=!0),this.alphaTest>0&&(n.alphaTest=this.alphaTest),!0===this.alphaToCoverage&&(n.alphaToCoverage=this.alphaToCoverage),!0===this.premultipliedAlpha&&(n.premultipliedAlpha=this.premultipliedAlpha),!0===this.wireframe&&(n.wireframe=this.wireframe),this.wireframeLinewidth>1&&(n.wireframeLinewidth=this.wireframeLinewidth),"round"!==this.wireframeLinecap&&(n.wireframeLinecap=this.wireframeLinecap),"round"!==this.wireframeLinejoin&&(n.wireframeLinejoin=this.wireframeLinejoin),!0===this.flatShading&&(n.flatShading=this.flatShading),!1===this.visible&&(n.visible=!1),!1===this.toneMapped&&(n.toneMapped=!1),!1===this.fog&&(n.fog=!1),"{}"!==JSON.stringify(this.userData)&&(n.userData=this.userData),e){const e=i(t.textures),r=i(t.images);e.length>0&&(n.textures=e),r.length>0&&(n.images=r)}return n}clone(){return(new this.constructor).copy(this)}copy(t){this.name=t.name,this.blending=t.blending,this.side=t.side,this.vertexColors=t.vertexColors,this.opacity=t.opacity,this.transparent=t.transparent,this.blendSrc=t.blendSrc,this.blendDst=t.blendDst,this.blendEquation=t.blendEquation,this.blendSrcAlpha=t.blendSrcAlpha,this.blendDstAlpha=t.blendDstAlpha,this.blendEquationAlpha=t.blendEquationAlpha,this.depthFunc=t.depthFunc,this.depthTest=t.depthTest,this.depthWrite=t.depthWrite,this.stencilWriteMask=t.stencilWriteMask,this.stencilFunc=t.stencilFunc,this.stencilRef=t.stencilRef,this.stencilFuncMask=t.stencilFuncMask,this.stencilFail=t.stencilFail,this.stencilZFail=t.stencilZFail,this.stencilZPass=t.stencilZPass,this.stencilWrite=t.stencilWrite;const e=t.clippingPlanes;let n=null;if(null!==e){const t=e.length;n=new Array(t);for(let i=0;i!==t;++i)n[i]=e[i].clone()}return this.clippingPlanes=n,this.clipIntersection=t.clipIntersection,this.clipShadows=t.clipShadows,this.shadowSide=t.shadowSide,this.colorWrite=t.colorWrite,this.precision=t.precision,this.polygonOffset=t.polygonOffset,this.polygonOffsetFactor=t.polygonOffsetFactor,this.polygonOffsetUnits=t.polygonOffsetUnits,this.dithering=t.dithering,this.alphaTest=t.alphaTest,this.alphaToCoverage=t.alphaToCoverage,this.premultipliedAlpha=t.premultipliedAlpha,this.visible=t.visible,this.toneMapped=t.toneMapped,this.userData=JSON.parse(JSON.stringify(t.userData)),this}dispose(){this.dispatchEvent({type:"dispose"})}set needsUpdate(t){!0===t&&this.version++}}bn.prototype.isMaterial=!0,bn.fromType=function(){return null};class Mn extends bn{constructor(t){super(),this.type="MeshBasicMaterial",this.color=new Wt(16777215),this.map=null,this.lightMap=null,this.lightMapIntensity=1,this.aoMap=null,this.aoMapIntensity=1,this.specularMap=null,this.alphaMap=null,this.envMap=null,this.combine=0,this.reflectivity=1,this.refractionRatio=.98,this.wireframe=!1,this.wireframeLinewidth=1,this.wireframeLinecap="round",this.wireframeLinejoin="round",this.fog=!0,this.setValues(t)}copy(t){return super.copy(t),this.color.copy(t.color),this.map=t.map,this.lightMap=t.lightMap,this.lightMapIntensity=t.lightMapIntensity,this.aoMap=t.aoMap,this.aoMapIntensity=t.aoMapIntensity,this.specularMap=t.specularMap,this.alphaMap=t.alphaMap,this.envMap=t.envMap,this.combine=t.combine,this.reflectivity=t.reflectivity,this.refractionRatio=t.refractionRatio,this.wireframe=t.wireframe,this.wireframeLinewidth=t.wireframeLinewidth,this.wireframeLinecap=t.wireframeLinecap,this.wireframeLinejoin=t.wireframeLinejoin,this.fog=t.fog,this}}Mn.prototype.isMeshBasicMaterial=!0;const wn=new se,Sn=new Rt;class Tn{constructor(t,e,n){if(Array.isArray(t))throw new TypeError("THREE.BufferAttribute: array should be a Typed Array.");this.name="",this.array=t,this.itemSize=e,this.count=void 0!==t?t.length/e:0,this.normalized=!0===n,this.usage=ut,this.updateRange={offset:0,count:-1},this.version=0}onUploadCallback(){}set needsUpdate(t){!0===t&&this.version++}setUsage(t){return this.usage=t,this}copy(t){return this.name=t.name,this.array=new t.array.constructor(t.array),this.itemSize=t.itemSize,this.count=t.count,this.normalized=t.normalized,this.usage=t.usage,this}copyAt(t,e,n){t*=this.itemSize,n*=e.itemSize;for(let i=0,r=this.itemSize;i0&&(t.userData=this.userData),void 0!==this.parameters){const e=this.parameters;for(const n in e)void 0!==e[n]&&(t[n]=e[n]);return t}t.data={attributes:{}};const e=this.index;null!==e&&(t.data.index={type:e.array.constructor.name,array:Array.prototype.slice.call(e.array)});const n=this.attributes;for(const e in n){const i=n[e];t.data.attributes[e]=i.toJSON(t.data)}const i={};let r=!1;for(const e in this.morphAttributes){const n=this.morphAttributes[e],s=[];for(let e=0,i=n.length;e0&&(i[e]=s,r=!0)}r&&(t.data.morphAttributes=i,t.data.morphTargetsRelative=this.morphTargetsRelative);const s=this.groups;s.length>0&&(t.data.groups=JSON.parse(JSON.stringify(s)));const a=this.boundingSphere;return null!==a&&(t.data.boundingSphere={center:a.center.toArray(),radius:a.radius}),t}clone(){return(new this.constructor).copy(this)}copy(t){this.index=null,this.attributes={},this.morphAttributes={},this.groups=[],this.boundingBox=null,this.boundingSphere=null;const e={};this.name=t.name;const n=t.index;null!==n&&this.setIndex(n.clone(e));const i=t.attributes;for(const t in i){const n=i[t];this.setAttribute(t,n.clone(e))}const r=t.morphAttributes;for(const t in r){const n=[],i=r[t];for(let t=0,r=i.length;t0){const t=e[n[0]];if(void 0!==t){this.morphTargetInfluences=[],this.morphTargetDictionary={};for(let e=0,n=t.length;e0&&console.error("THREE.Mesh.updateMorphTargets() no longer supports THREE.Geometry. Use THREE.BufferGeometry instead.")}}raycast(t,e){const n=this.geometry,i=this.material,r=this.matrixWorld;if(void 0===i)return;if(null===n.boundingSphere&&n.computeBoundingSphere(),qn.copy(n.boundingSphere),qn.applyMatrix4(r),!1===t.ray.intersectsSphere(qn))return;if(Wn.copy(r).invert(),jn.copy(t.ray).applyMatrix4(Wn),null!==n.boundingBox&&!1===jn.intersectsBox(n.boundingBox))return;let s;if(n.isBufferGeometry){const r=n.index,a=n.attributes.position,o=n.morphAttributes.position,l=n.morphTargetsRelative,c=n.attributes.uv,h=n.attributes.uv2,u=n.groups,d=n.drawRange;if(null!==r)if(Array.isArray(i))for(let n=0,p=u.length;nn.far?null:{distance:c,point:ai.clone(),object:t}}(t,e,n,i,Xn,Jn,Yn,si);if(p){o&&(ni.fromBufferAttribute(o,c),ii.fromBufferAttribute(o,h),ri.fromBufferAttribute(o,u),p.uv=xn.getUV(si,Xn,Jn,Yn,ni,ii,ri,new Rt)),l&&(ni.fromBufferAttribute(l,c),ii.fromBufferAttribute(l,h),ri.fromBufferAttribute(l,u),p.uv2=xn.getUV(si,Xn,Jn,Yn,ni,ii,ri,new Rt));const t={a:c,b:h,c:u,normal:new se,materialIndex:0};xn.getNormal(Xn,Jn,Yn,t.normal),p.face=t}return p}oi.prototype.isMesh=!0;class ci extends Vn{constructor(t=1,e=1,n=1,i=1,r=1,s=1){super(),this.type="BoxGeometry",this.parameters={width:t,height:e,depth:n,widthSegments:i,heightSegments:r,depthSegments:s};const a=this;i=Math.floor(i),r=Math.floor(r),s=Math.floor(s);const o=[],l=[],c=[],h=[];let u=0,d=0;function p(t,e,n,i,r,s,p,m,f,g,v){const y=s/f,x=p/g,_=s/2,b=p/2,M=m/2,w=f+1,S=g+1;let T=0,E=0;const A=new se;for(let s=0;s0?1:-1,c.push(A.x,A.y,A.z),h.push(o/f),h.push(1-s/g),T+=1}}for(let t=0;t0&&(e.defines=this.defines),e.vertexShader=this.vertexShader,e.fragmentShader=this.fragmentShader;const n={};for(const t in this.extensions)!0===this.extensions[t]&&(n[t]=!0);return Object.keys(n).length>0&&(e.extensions=n),e}}pi.prototype.isShaderMaterial=!0;class mi extends ln{constructor(){super(),this.type="Camera",this.matrixWorldInverse=new ze,this.projectionMatrix=new ze,this.projectionMatrixInverse=new ze}copy(t,e){return super.copy(t,e),this.matrixWorldInverse.copy(t.matrixWorldInverse),this.projectionMatrix.copy(t.projectionMatrix),this.projectionMatrixInverse.copy(t.projectionMatrixInverse),this}getWorldDirection(t){this.updateWorldMatrix(!0,!1);const e=this.matrixWorld.elements;return t.set(-e[8],-e[9],-e[10]).normalize()}updateMatrixWorld(t){super.updateMatrixWorld(t),this.matrixWorldInverse.copy(this.matrixWorld).invert()}updateWorldMatrix(t,e){super.updateWorldMatrix(t,e),this.matrixWorldInverse.copy(this.matrixWorld).invert()}clone(){return(new this.constructor).copy(this)}}mi.prototype.isCamera=!0;class fi extends mi{constructor(t=50,e=1,n=.1,i=2e3){super(),this.type="PerspectiveCamera",this.fov=t,this.zoom=1,this.near=n,this.far=i,this.focus=10,this.aspect=e,this.view=null,this.filmGauge=35,this.filmOffset=0,this.updateProjectionMatrix()}copy(t,e){return super.copy(t,e),this.fov=t.fov,this.zoom=t.zoom,this.near=t.near,this.far=t.far,this.focus=t.focus,this.aspect=t.aspect,this.view=null===t.view?null:Object.assign({},t.view),this.filmGauge=t.filmGauge,this.filmOffset=t.filmOffset,this}setFocalLength(t){const e=.5*this.getFilmHeight()/t;this.fov=2*xt*Math.atan(e),this.updateProjectionMatrix()}getFocalLength(){const t=Math.tan(.5*yt*this.fov);return.5*this.getFilmHeight()/t}getEffectiveFOV(){return 2*xt*Math.atan(Math.tan(.5*yt*this.fov)/this.zoom)}getFilmWidth(){return this.filmGauge*Math.min(this.aspect,1)}getFilmHeight(){return this.filmGauge/Math.max(this.aspect,1)}setViewOffset(t,e,n,i,r,s){this.aspect=t/e,null===this.view&&(this.view={enabled:!0,fullWidth:1,fullHeight:1,offsetX:0,offsetY:0,width:1,height:1}),this.view.enabled=!0,this.view.fullWidth=t,this.view.fullHeight=e,this.view.offsetX=n,this.view.offsetY=i,this.view.width=r,this.view.height=s,this.updateProjectionMatrix()}clearViewOffset(){null!==this.view&&(this.view.enabled=!1),this.updateProjectionMatrix()}updateProjectionMatrix(){const t=this.near;let e=t*Math.tan(.5*yt*this.fov)/this.zoom,n=2*e,i=this.aspect*n,r=-.5*i;const s=this.view;if(null!==this.view&&this.view.enabled){const t=s.fullWidth,a=s.fullHeight;r+=s.offsetX*i/t,e-=s.offsetY*n/a,i*=s.width/t,n*=s.height/a}const a=this.filmOffset;0!==a&&(r+=t*a/this.getFilmWidth()),this.projectionMatrix.makePerspective(r,r+i,e,e-n,t,this.far),this.projectionMatrixInverse.copy(this.projectionMatrix).invert()}toJSON(t){const e=super.toJSON(t);return e.object.fov=this.fov,e.object.zoom=this.zoom,e.object.near=this.near,e.object.far=this.far,e.object.focus=this.focus,e.object.aspect=this.aspect,null!==this.view&&(e.object.view=Object.assign({},this.view)),e.object.filmGauge=this.filmGauge,e.object.filmOffset=this.filmOffset,e}}fi.prototype.isPerspectiveCamera=!0;const gi=90;class vi extends ln{constructor(t,e,n){if(super(),this.type="CubeCamera",!0!==n.isWebGLCubeRenderTarget)return void console.error("THREE.CubeCamera: The constructor now expects an instance of WebGLCubeRenderTarget as third parameter.");this.renderTarget=n;const i=new fi(gi,1,t,e);i.layers=this.layers,i.up.set(0,-1,0),i.lookAt(new se(1,0,0)),this.add(i);const r=new fi(gi,1,t,e);r.layers=this.layers,r.up.set(0,-1,0),r.lookAt(new se(-1,0,0)),this.add(r);const s=new fi(gi,1,t,e);s.layers=this.layers,s.up.set(0,0,1),s.lookAt(new se(0,1,0)),this.add(s);const a=new fi(gi,1,t,e);a.layers=this.layers,a.up.set(0,0,-1),a.lookAt(new se(0,-1,0)),this.add(a);const o=new fi(gi,1,t,e);o.layers=this.layers,o.up.set(0,-1,0),o.lookAt(new se(0,0,1)),this.add(o);const l=new fi(gi,1,t,e);l.layers=this.layers,l.up.set(0,-1,0),l.lookAt(new se(0,0,-1)),this.add(l)}update(t,e){null===this.parent&&this.updateMatrixWorld();const n=this.renderTarget,[i,r,s,a,o,l]=this.children,c=t.getRenderTarget(),h=t.toneMapping,u=t.xr.enabled;t.toneMapping=0,t.xr.enabled=!1;const d=n.texture.generateMipmaps;n.texture.generateMipmaps=!1,t.setRenderTarget(n,0),t.render(e,i),t.setRenderTarget(n,1),t.render(e,r),t.setRenderTarget(n,2),t.render(e,s),t.setRenderTarget(n,3),t.render(e,a),t.setRenderTarget(n,4),t.render(e,o),n.texture.generateMipmaps=d,t.setRenderTarget(n,5),t.render(e,l),t.setRenderTarget(c),t.toneMapping=h,t.xr.enabled=u,n.texture.needsPMREMUpdate=!0}}class yi extends Zt{constructor(t,e,n,i,s,a,o,l,c,h){super(t=void 0!==t?t:[],e=void 0!==e?e:r,n,i,s,a,o,l,c,h),this.flipY=!1}get images(){return this.image}set images(t){this.image=t}}yi.prototype.isCubeTexture=!0;class xi extends Qt{constructor(t,e={}){super(t,t,e);const n={width:t,height:t,depth:1},i=[n,n,n,n,n,n];this.texture=new yi(i,e.mapping,e.wrapS,e.wrapT,e.magFilter,e.minFilter,e.format,e.type,e.anisotropy,e.encoding),this.texture.isRenderTargetTexture=!0,this.texture.generateMipmaps=void 0!==e.generateMipmaps&&e.generateMipmaps,this.texture.minFilter=void 0!==e.minFilter?e.minFilter:f}fromEquirectangularTexture(t,e){this.texture.type=e.type,this.texture.encoding=e.encoding,this.texture.generateMipmaps=e.generateMipmaps,this.texture.minFilter=e.minFilter,this.texture.magFilter=e.magFilter;const n={uniforms:{tEquirect:{value:null}},vertexShader:"\n\n\t\t\t\tvarying vec3 vWorldDirection;\n\n\t\t\t\tvec3 transformDirection( in vec3 dir, in mat4 matrix ) {\n\n\t\t\t\t\treturn normalize( ( matrix * vec4( dir, 0.0 ) ).xyz );\n\n\t\t\t\t}\n\n\t\t\t\tvoid main() {\n\n\t\t\t\t\tvWorldDirection = transformDirection( position, modelMatrix );\n\n\t\t\t\t\t#include \n\t\t\t\t\t#include \n\n\t\t\t\t}\n\t\t\t",fragmentShader:"\n\n\t\t\t\tuniform sampler2D tEquirect;\n\n\t\t\t\tvarying vec3 vWorldDirection;\n\n\t\t\t\t#include \n\n\t\t\t\tvoid main() {\n\n\t\t\t\t\tvec3 direction = normalize( vWorldDirection );\n\n\t\t\t\t\tvec2 sampleUV = equirectUv( direction );\n\n\t\t\t\t\tgl_FragColor = texture2D( tEquirect, sampleUV );\n\n\t\t\t\t}\n\t\t\t"},i=new ci(5,5,5),r=new pi({name:"CubemapFromEquirect",uniforms:hi(n.uniforms),vertexShader:n.vertexShader,fragmentShader:n.fragmentShader,side:1,blending:0});r.uniforms.tEquirect.value=e;const s=new oi(i,r),a=e.minFilter;e.minFilter===v&&(e.minFilter=f);return new vi(1,10,this).update(t,s),e.minFilter=a,s.geometry.dispose(),s.material.dispose(),this}clear(t,e,n,i){const r=t.getRenderTarget();for(let r=0;r<6;r++)t.setRenderTarget(this,r),t.clear(e,n,i);t.setRenderTarget(r)}}xi.prototype.isWebGLCubeRenderTarget=!0;const _i=new se,bi=new se,Mi=new Ct;class wi{constructor(t=new se(1,0,0),e=0){this.normal=t,this.constant=e}set(t,e){return this.normal.copy(t),this.constant=e,this}setComponents(t,e,n,i){return this.normal.set(t,e,n),this.constant=i,this}setFromNormalAndCoplanarPoint(t,e){return this.normal.copy(t),this.constant=-e.dot(this.normal),this}setFromCoplanarPoints(t,e,n){const i=_i.subVectors(n,e).cross(bi.subVectors(t,e)).normalize();return this.setFromNormalAndCoplanarPoint(i,t),this}copy(t){return this.normal.copy(t.normal),this.constant=t.constant,this}normalize(){const t=1/this.normal.length();return this.normal.multiplyScalar(t),this.constant*=t,this}negate(){return this.constant*=-1,this.normal.negate(),this}distanceToPoint(t){return this.normal.dot(t)+this.constant}distanceToSphere(t){return this.distanceToPoint(t.center)-t.radius}projectPoint(t,e){return e.copy(this.normal).multiplyScalar(-this.distanceToPoint(t)).add(t)}intersectLine(t,e){const n=t.delta(_i),i=this.normal.dot(n);if(0===i)return 0===this.distanceToPoint(t.start)?e.copy(t.start):null;const r=-(t.start.dot(this.normal)+this.constant)/i;return r<0||r>1?null:e.copy(n).multiplyScalar(r).add(t.start)}intersectsLine(t){const e=this.distanceToPoint(t.start),n=this.distanceToPoint(t.end);return e<0&&n>0||n<0&&e>0}intersectsBox(t){return t.intersectsPlane(this)}intersectsSphere(t){return t.intersectsPlane(this)}coplanarPoint(t){return t.copy(this.normal).multiplyScalar(-this.constant)}applyMatrix4(t,e){const n=e||Mi.getNormalMatrix(t),i=this.coplanarPoint(_i).applyMatrix4(t),r=this.normal.applyMatrix3(n).normalize();return this.constant=-i.dot(r),this}translate(t){return this.constant-=t.dot(this.normal),this}equals(t){return t.normal.equals(this.normal)&&t.constant===this.constant}clone(){return(new this.constructor).copy(this)}}wi.prototype.isPlane=!0;const Si=new Ae,Ti=new se;class Ei{constructor(t=new wi,e=new wi,n=new wi,i=new wi,r=new wi,s=new wi){this.planes=[t,e,n,i,r,s]}set(t,e,n,i,r,s){const a=this.planes;return a[0].copy(t),a[1].copy(e),a[2].copy(n),a[3].copy(i),a[4].copy(r),a[5].copy(s),this}copy(t){const e=this.planes;for(let n=0;n<6;n++)e[n].copy(t.planes[n]);return this}setFromProjectionMatrix(t){const e=this.planes,n=t.elements,i=n[0],r=n[1],s=n[2],a=n[3],o=n[4],l=n[5],c=n[6],h=n[7],u=n[8],d=n[9],p=n[10],m=n[11],f=n[12],g=n[13],v=n[14],y=n[15];return e[0].setComponents(a-i,h-o,m-u,y-f).normalize(),e[1].setComponents(a+i,h+o,m+u,y+f).normalize(),e[2].setComponents(a+r,h+l,m+d,y+g).normalize(),e[3].setComponents(a-r,h-l,m-d,y-g).normalize(),e[4].setComponents(a-s,h-c,m-p,y-v).normalize(),e[5].setComponents(a+s,h+c,m+p,y+v).normalize(),this}intersectsObject(t){const e=t.geometry;return null===e.boundingSphere&&e.computeBoundingSphere(),Si.copy(e.boundingSphere).applyMatrix4(t.matrixWorld),this.intersectsSphere(Si)}intersectsSprite(t){return Si.center.set(0,0,0),Si.radius=.7071067811865476,Si.applyMatrix4(t.matrixWorld),this.intersectsSphere(Si)}intersectsSphere(t){const e=this.planes,n=t.center,i=-t.radius;for(let t=0;t<6;t++){if(e[t].distanceToPoint(n)0?t.max.x:t.min.x,Ti.y=i.normal.y>0?t.max.y:t.min.y,Ti.z=i.normal.z>0?t.max.z:t.min.z,i.distanceToPoint(Ti)<0)return!1}return!0}containsPoint(t){const e=this.planes;for(let n=0;n<6;n++)if(e[n].distanceToPoint(t)<0)return!1;return!0}clone(){return(new this.constructor).copy(this)}}function Ai(){let t=null,e=!1,n=null,i=null;function r(e,s){n(e,s),i=t.requestAnimationFrame(r)}return{start:function(){!0!==e&&null!==n&&(i=t.requestAnimationFrame(r),e=!0)},stop:function(){t.cancelAnimationFrame(i),e=!1},setAnimationLoop:function(t){n=t},setContext:function(e){t=e}}}function Ri(t,e){const n=e.isWebGL2,i=new WeakMap;return{get:function(t){return t.isInterleavedBufferAttribute&&(t=t.data),i.get(t)},remove:function(e){e.isInterleavedBufferAttribute&&(e=e.data);const n=i.get(e);n&&(t.deleteBuffer(n.buffer),i.delete(e))},update:function(e,r){if(e.isGLBufferAttribute){const t=i.get(e);return void((!t||t.version 0.0 ) ? v : 0.5 * inversesqrt( max( 1.0 - x * x, 1e-7 ) ) - v;\n\treturn cross( v1, v2 ) * theta_sintheta;\n}\nvec3 LTC_Evaluate( const in vec3 N, const in vec3 V, const in vec3 P, const in mat3 mInv, const in vec3 rectCoords[ 4 ] ) {\n\tvec3 v1 = rectCoords[ 1 ] - rectCoords[ 0 ];\n\tvec3 v2 = rectCoords[ 3 ] - rectCoords[ 0 ];\n\tvec3 lightNormal = cross( v1, v2 );\n\tif( dot( lightNormal, P - rectCoords[ 0 ] ) < 0.0 ) return vec3( 0.0 );\n\tvec3 T1, T2;\n\tT1 = normalize( V - N * dot( V, N ) );\n\tT2 = - cross( N, T1 );\n\tmat3 mat = mInv * transposeMat3( mat3( T1, T2, N ) );\n\tvec3 coords[ 4 ];\n\tcoords[ 0 ] = mat * ( rectCoords[ 0 ] - P );\n\tcoords[ 1 ] = mat * ( rectCoords[ 1 ] - P );\n\tcoords[ 2 ] = mat * ( rectCoords[ 2 ] - P );\n\tcoords[ 3 ] = mat * ( rectCoords[ 3 ] - P );\n\tcoords[ 0 ] = normalize( coords[ 0 ] );\n\tcoords[ 1 ] = normalize( coords[ 1 ] );\n\tcoords[ 2 ] = normalize( coords[ 2 ] );\n\tcoords[ 3 ] = normalize( coords[ 3 ] );\n\tvec3 vectorFormFactor = vec3( 0.0 );\n\tvectorFormFactor += LTC_EdgeVectorFormFactor( coords[ 0 ], coords[ 1 ] );\n\tvectorFormFactor += LTC_EdgeVectorFormFactor( coords[ 1 ], coords[ 2 ] );\n\tvectorFormFactor += LTC_EdgeVectorFormFactor( coords[ 2 ], coords[ 3 ] );\n\tvectorFormFactor += LTC_EdgeVectorFormFactor( coords[ 3 ], coords[ 0 ] );\n\tfloat result = LTC_ClippedSphereFormFactor( vectorFormFactor );\n\treturn vec3( result );\n}\nfloat G_BlinnPhong_Implicit( ) {\n\treturn 0.25;\n}\nfloat D_BlinnPhong( const in float shininess, const in float dotNH ) {\n\treturn RECIPROCAL_PI * ( shininess * 0.5 + 1.0 ) * pow( dotNH, shininess );\n}\nvec3 BRDF_BlinnPhong( const in vec3 lightDir, const in vec3 viewDir, const in vec3 normal, const in vec3 specularColor, const in float shininess ) {\n\tvec3 halfDir = normalize( lightDir + viewDir );\n\tfloat dotNH = saturate( dot( normal, halfDir ) );\n\tfloat dotVH = saturate( dot( viewDir, halfDir ) );\n\tvec3 F = F_Schlick( specularColor, 1.0, dotVH );\n\tfloat G = G_BlinnPhong_Implicit( );\n\tfloat D = D_BlinnPhong( shininess, dotNH );\n\treturn F * ( G * D );\n}\n#if defined( USE_SHEEN )\nfloat D_Charlie( float roughness, float dotNH ) {\n\tfloat alpha = pow2( roughness );\n\tfloat invAlpha = 1.0 / alpha;\n\tfloat cos2h = dotNH * dotNH;\n\tfloat sin2h = max( 1.0 - cos2h, 0.0078125 );\n\treturn ( 2.0 + invAlpha ) * pow( sin2h, invAlpha * 0.5 ) / ( 2.0 * PI );\n}\nfloat V_Neubelt( float dotNV, float dotNL ) {\n\treturn saturate( 1.0 / ( 4.0 * ( dotNL + dotNV - dotNL * dotNV ) ) );\n}\nvec3 BRDF_Sheen( const in vec3 lightDir, const in vec3 viewDir, const in vec3 normal, vec3 sheenColor, const in float sheenRoughness ) {\n\tvec3 halfDir = normalize( lightDir + viewDir );\n\tfloat dotNL = saturate( dot( normal, lightDir ) );\n\tfloat dotNV = saturate( dot( normal, viewDir ) );\n\tfloat dotNH = saturate( dot( normal, halfDir ) );\n\tfloat D = D_Charlie( sheenRoughness, dotNH );\n\tfloat V = V_Neubelt( dotNV, dotNL );\n\treturn sheenColor * ( D * V );\n}\n#endif",bumpmap_pars_fragment:"#ifdef USE_BUMPMAP\n\tuniform sampler2D bumpMap;\n\tuniform float bumpScale;\n\tvec2 dHdxy_fwd() {\n\t\tvec2 dSTdx = dFdx( vUv );\n\t\tvec2 dSTdy = dFdy( vUv );\n\t\tfloat Hll = bumpScale * texture2D( bumpMap, vUv ).x;\n\t\tfloat dBx = bumpScale * texture2D( bumpMap, vUv + dSTdx ).x - Hll;\n\t\tfloat dBy = bumpScale * texture2D( bumpMap, vUv + dSTdy ).x - Hll;\n\t\treturn vec2( dBx, dBy );\n\t}\n\tvec3 perturbNormalArb( vec3 surf_pos, vec3 surf_norm, vec2 dHdxy, float faceDirection ) {\n\t\tvec3 vSigmaX = vec3( dFdx( surf_pos.x ), dFdx( surf_pos.y ), dFdx( surf_pos.z ) );\n\t\tvec3 vSigmaY = vec3( dFdy( surf_pos.x ), dFdy( surf_pos.y ), dFdy( surf_pos.z ) );\n\t\tvec3 vN = surf_norm;\n\t\tvec3 R1 = cross( vSigmaY, vN );\n\t\tvec3 R2 = cross( vN, vSigmaX );\n\t\tfloat fDet = dot( vSigmaX, R1 ) * faceDirection;\n\t\tvec3 vGrad = sign( fDet ) * ( dHdxy.x * R1 + dHdxy.y * R2 );\n\t\treturn normalize( abs( fDet ) * surf_norm - vGrad );\n\t}\n#endif",clipping_planes_fragment:"#if NUM_CLIPPING_PLANES > 0\n\tvec4 plane;\n\t#pragma unroll_loop_start\n\tfor ( int i = 0; i < UNION_CLIPPING_PLANES; i ++ ) {\n\t\tplane = clippingPlanes[ i ];\n\t\tif ( dot( vClipPosition, plane.xyz ) > plane.w ) discard;\n\t}\n\t#pragma unroll_loop_end\n\t#if UNION_CLIPPING_PLANES < NUM_CLIPPING_PLANES\n\t\tbool clipped = true;\n\t\t#pragma unroll_loop_start\n\t\tfor ( int i = UNION_CLIPPING_PLANES; i < NUM_CLIPPING_PLANES; i ++ ) {\n\t\t\tplane = clippingPlanes[ i ];\n\t\t\tclipped = ( dot( vClipPosition, plane.xyz ) > plane.w ) && clipped;\n\t\t}\n\t\t#pragma unroll_loop_end\n\t\tif ( clipped ) discard;\n\t#endif\n#endif",clipping_planes_pars_fragment:"#if NUM_CLIPPING_PLANES > 0\n\tvarying vec3 vClipPosition;\n\tuniform vec4 clippingPlanes[ NUM_CLIPPING_PLANES ];\n#endif",clipping_planes_pars_vertex:"#if NUM_CLIPPING_PLANES > 0\n\tvarying vec3 vClipPosition;\n#endif",clipping_planes_vertex:"#if NUM_CLIPPING_PLANES > 0\n\tvClipPosition = - mvPosition.xyz;\n#endif",color_fragment:"#if defined( USE_COLOR_ALPHA )\n\tdiffuseColor *= vColor;\n#elif defined( USE_COLOR )\n\tdiffuseColor.rgb *= vColor;\n#endif",color_pars_fragment:"#if defined( USE_COLOR_ALPHA )\n\tvarying vec4 vColor;\n#elif defined( USE_COLOR )\n\tvarying vec3 vColor;\n#endif",color_pars_vertex:"#if defined( USE_COLOR_ALPHA )\n\tvarying vec4 vColor;\n#elif defined( USE_COLOR ) || defined( USE_INSTANCING_COLOR )\n\tvarying vec3 vColor;\n#endif",color_vertex:"#if defined( USE_COLOR_ALPHA )\n\tvColor = vec4( 1.0 );\n#elif defined( USE_COLOR ) || defined( USE_INSTANCING_COLOR )\n\tvColor = vec3( 1.0 );\n#endif\n#ifdef USE_COLOR\n\tvColor *= color;\n#endif\n#ifdef USE_INSTANCING_COLOR\n\tvColor.xyz *= instanceColor.xyz;\n#endif",common:"#define PI 3.141592653589793\n#define PI2 6.283185307179586\n#define PI_HALF 1.5707963267948966\n#define RECIPROCAL_PI 0.3183098861837907\n#define RECIPROCAL_PI2 0.15915494309189535\n#define EPSILON 1e-6\n#ifndef saturate\n#define saturate( a ) clamp( a, 0.0, 1.0 )\n#endif\n#define whiteComplement( a ) ( 1.0 - saturate( a ) )\nfloat pow2( const in float x ) { return x*x; }\nfloat pow3( const in float x ) { return x*x*x; }\nfloat pow4( const in float x ) { float x2 = x*x; return x2*x2; }\nfloat max3( const in vec3 v ) { return max( max( v.x, v.y ), v.z ); }\nfloat average( const in vec3 color ) { return dot( color, vec3( 0.3333 ) ); }\nhighp float rand( const in vec2 uv ) {\n\tconst highp float a = 12.9898, b = 78.233, c = 43758.5453;\n\thighp float dt = dot( uv.xy, vec2( a,b ) ), sn = mod( dt, PI );\n\treturn fract( sin( sn ) * c );\n}\n#ifdef HIGH_PRECISION\n\tfloat precisionSafeLength( vec3 v ) { return length( v ); }\n#else\n\tfloat precisionSafeLength( vec3 v ) {\n\t\tfloat maxComponent = max3( abs( v ) );\n\t\treturn length( v / maxComponent ) * maxComponent;\n\t}\n#endif\nstruct IncidentLight {\n\tvec3 color;\n\tvec3 direction;\n\tbool visible;\n};\nstruct ReflectedLight {\n\tvec3 directDiffuse;\n\tvec3 directSpecular;\n\tvec3 indirectDiffuse;\n\tvec3 indirectSpecular;\n};\nstruct GeometricContext {\n\tvec3 position;\n\tvec3 normal;\n\tvec3 viewDir;\n#ifdef USE_CLEARCOAT\n\tvec3 clearcoatNormal;\n#endif\n};\nvec3 transformDirection( in vec3 dir, in mat4 matrix ) {\n\treturn normalize( ( matrix * vec4( dir, 0.0 ) ).xyz );\n}\nvec3 inverseTransformDirection( in vec3 dir, in mat4 matrix ) {\n\treturn normalize( ( vec4( dir, 0.0 ) * matrix ).xyz );\n}\nmat3 transposeMat3( const in mat3 m ) {\n\tmat3 tmp;\n\ttmp[ 0 ] = vec3( m[ 0 ].x, m[ 1 ].x, m[ 2 ].x );\n\ttmp[ 1 ] = vec3( m[ 0 ].y, m[ 1 ].y, m[ 2 ].y );\n\ttmp[ 2 ] = vec3( m[ 0 ].z, m[ 1 ].z, m[ 2 ].z );\n\treturn tmp;\n}\nfloat linearToRelativeLuminance( const in vec3 color ) {\n\tvec3 weights = vec3( 0.2126, 0.7152, 0.0722 );\n\treturn dot( weights, color.rgb );\n}\nbool isPerspectiveMatrix( mat4 m ) {\n\treturn m[ 2 ][ 3 ] == - 1.0;\n}\nvec2 equirectUv( in vec3 dir ) {\n\tfloat u = atan( dir.z, dir.x ) * RECIPROCAL_PI2 + 0.5;\n\tfloat v = asin( clamp( dir.y, - 1.0, 1.0 ) ) * RECIPROCAL_PI + 0.5;\n\treturn vec2( u, v );\n}",cube_uv_reflection_fragment:"#ifdef ENVMAP_TYPE_CUBE_UV\n\t#define cubeUV_minMipLevel 4.0\n\t#define cubeUV_minTileSize 16.0\n\tfloat getFace( vec3 direction ) {\n\t\tvec3 absDirection = abs( direction );\n\t\tfloat face = - 1.0;\n\t\tif ( absDirection.x > absDirection.z ) {\n\t\t\tif ( absDirection.x > absDirection.y )\n\t\t\t\tface = direction.x > 0.0 ? 0.0 : 3.0;\n\t\t\telse\n\t\t\t\tface = direction.y > 0.0 ? 1.0 : 4.0;\n\t\t} else {\n\t\t\tif ( absDirection.z > absDirection.y )\n\t\t\t\tface = direction.z > 0.0 ? 2.0 : 5.0;\n\t\t\telse\n\t\t\t\tface = direction.y > 0.0 ? 1.0 : 4.0;\n\t\t}\n\t\treturn face;\n\t}\n\tvec2 getUV( vec3 direction, float face ) {\n\t\tvec2 uv;\n\t\tif ( face == 0.0 ) {\n\t\t\tuv = vec2( direction.z, direction.y ) / abs( direction.x );\n\t\t} else if ( face == 1.0 ) {\n\t\t\tuv = vec2( - direction.x, - direction.z ) / abs( direction.y );\n\t\t} else if ( face == 2.0 ) {\n\t\t\tuv = vec2( - direction.x, direction.y ) / abs( direction.z );\n\t\t} else if ( face == 3.0 ) {\n\t\t\tuv = vec2( - direction.z, direction.y ) / abs( direction.x );\n\t\t} else if ( face == 4.0 ) {\n\t\t\tuv = vec2( - direction.x, direction.z ) / abs( direction.y );\n\t\t} else {\n\t\t\tuv = vec2( direction.x, direction.y ) / abs( direction.z );\n\t\t}\n\t\treturn 0.5 * ( uv + 1.0 );\n\t}\n\tvec3 bilinearCubeUV( sampler2D envMap, vec3 direction, float mipInt ) {\n\t\tfloat face = getFace( direction );\n\t\tfloat filterInt = max( cubeUV_minMipLevel - mipInt, 0.0 );\n\t\tmipInt = max( mipInt, cubeUV_minMipLevel );\n\t\tfloat faceSize = exp2( mipInt );\n\t\tvec2 uv = getUV( direction, face ) * ( faceSize - 2.0 ) + 1.0;\n\t\tif ( face > 2.0 ) {\n\t\t\tuv.y += faceSize;\n\t\t\tface -= 3.0;\n\t\t}\n\t\tuv.x += face * faceSize;\n\t\tuv.x += filterInt * 3.0 * cubeUV_minTileSize;\n\t\tuv.y += 4.0 * ( exp2( CUBEUV_MAX_MIP ) - faceSize );\n\t\tuv.x *= CUBEUV_TEXEL_WIDTH;\n\t\tuv.y *= CUBEUV_TEXEL_HEIGHT;\n\t\t#ifdef texture2DGradEXT\n\t\t\treturn texture2DGradEXT( envMap, uv, vec2( 0.0 ), vec2( 0.0 ) ).rgb;\n\t\t#else\n\t\t\treturn texture2D( envMap, uv ).rgb;\n\t\t#endif\n\t}\n\t#define r0 1.0\n\t#define v0 0.339\n\t#define m0 - 2.0\n\t#define r1 0.8\n\t#define v1 0.276\n\t#define m1 - 1.0\n\t#define r4 0.4\n\t#define v4 0.046\n\t#define m4 2.0\n\t#define r5 0.305\n\t#define v5 0.016\n\t#define m5 3.0\n\t#define r6 0.21\n\t#define v6 0.0038\n\t#define m6 4.0\n\tfloat roughnessToMip( float roughness ) {\n\t\tfloat mip = 0.0;\n\t\tif ( roughness >= r1 ) {\n\t\t\tmip = ( r0 - roughness ) * ( m1 - m0 ) / ( r0 - r1 ) + m0;\n\t\t} else if ( roughness >= r4 ) {\n\t\t\tmip = ( r1 - roughness ) * ( m4 - m1 ) / ( r1 - r4 ) + m1;\n\t\t} else if ( roughness >= r5 ) {\n\t\t\tmip = ( r4 - roughness ) * ( m5 - m4 ) / ( r4 - r5 ) + m4;\n\t\t} else if ( roughness >= r6 ) {\n\t\t\tmip = ( r5 - roughness ) * ( m6 - m5 ) / ( r5 - r6 ) + m5;\n\t\t} else {\n\t\t\tmip = - 2.0 * log2( 1.16 * roughness );\t\t}\n\t\treturn mip;\n\t}\n\tvec4 textureCubeUV( sampler2D envMap, vec3 sampleDir, float roughness ) {\n\t\tfloat mip = clamp( roughnessToMip( roughness ), m0, CUBEUV_MAX_MIP );\n\t\tfloat mipF = fract( mip );\n\t\tfloat mipInt = floor( mip );\n\t\tvec3 color0 = bilinearCubeUV( envMap, sampleDir, mipInt );\n\t\tif ( mipF == 0.0 ) {\n\t\t\treturn vec4( color0, 1.0 );\n\t\t} else {\n\t\t\tvec3 color1 = bilinearCubeUV( envMap, sampleDir, mipInt + 1.0 );\n\t\t\treturn vec4( mix( color0, color1, mipF ), 1.0 );\n\t\t}\n\t}\n#endif",defaultnormal_vertex:"vec3 transformedNormal = objectNormal;\n#ifdef USE_INSTANCING\n\tmat3 m = mat3( instanceMatrix );\n\ttransformedNormal /= vec3( dot( m[ 0 ], m[ 0 ] ), dot( m[ 1 ], m[ 1 ] ), dot( m[ 2 ], m[ 2 ] ) );\n\ttransformedNormal = m * transformedNormal;\n#endif\ntransformedNormal = normalMatrix * transformedNormal;\n#ifdef FLIP_SIDED\n\ttransformedNormal = - transformedNormal;\n#endif\n#ifdef USE_TANGENT\n\tvec3 transformedTangent = ( modelViewMatrix * vec4( objectTangent, 0.0 ) ).xyz;\n\t#ifdef FLIP_SIDED\n\t\ttransformedTangent = - transformedTangent;\n\t#endif\n#endif",displacementmap_pars_vertex:"#ifdef USE_DISPLACEMENTMAP\n\tuniform sampler2D displacementMap;\n\tuniform float displacementScale;\n\tuniform float displacementBias;\n#endif",displacementmap_vertex:"#ifdef USE_DISPLACEMENTMAP\n\ttransformed += normalize( objectNormal ) * ( texture2D( displacementMap, vUv ).x * displacementScale + displacementBias );\n#endif",emissivemap_fragment:"#ifdef USE_EMISSIVEMAP\n\tvec4 emissiveColor = texture2D( emissiveMap, vUv );\n\ttotalEmissiveRadiance *= emissiveColor.rgb;\n#endif",emissivemap_pars_fragment:"#ifdef USE_EMISSIVEMAP\n\tuniform sampler2D emissiveMap;\n#endif",encodings_fragment:"gl_FragColor = linearToOutputTexel( gl_FragColor );",encodings_pars_fragment:"vec4 LinearToLinear( in vec4 value ) {\n\treturn value;\n}\nvec4 LinearTosRGB( in vec4 value ) {\n\treturn vec4( mix( pow( value.rgb, vec3( 0.41666 ) ) * 1.055 - vec3( 0.055 ), value.rgb * 12.92, vec3( lessThanEqual( value.rgb, vec3( 0.0031308 ) ) ) ), value.a );\n}",envmap_fragment:"#ifdef USE_ENVMAP\n\t#ifdef ENV_WORLDPOS\n\t\tvec3 cameraToFrag;\n\t\tif ( isOrthographic ) {\n\t\t\tcameraToFrag = normalize( vec3( - viewMatrix[ 0 ][ 2 ], - viewMatrix[ 1 ][ 2 ], - viewMatrix[ 2 ][ 2 ] ) );\n\t\t} else {\n\t\t\tcameraToFrag = normalize( vWorldPosition - cameraPosition );\n\t\t}\n\t\tvec3 worldNormal = inverseTransformDirection( normal, viewMatrix );\n\t\t#ifdef ENVMAP_MODE_REFLECTION\n\t\t\tvec3 reflectVec = reflect( cameraToFrag, worldNormal );\n\t\t#else\n\t\t\tvec3 reflectVec = refract( cameraToFrag, worldNormal, refractionRatio );\n\t\t#endif\n\t#else\n\t\tvec3 reflectVec = vReflect;\n\t#endif\n\t#ifdef ENVMAP_TYPE_CUBE\n\t\tvec4 envColor = textureCube( envMap, vec3( flipEnvMap * reflectVec.x, reflectVec.yz ) );\n\t#elif defined( ENVMAP_TYPE_CUBE_UV )\n\t\tvec4 envColor = textureCubeUV( envMap, reflectVec, 0.0 );\n\t#else\n\t\tvec4 envColor = vec4( 0.0 );\n\t#endif\n\t#ifdef ENVMAP_BLENDING_MULTIPLY\n\t\toutgoingLight = mix( outgoingLight, outgoingLight * envColor.xyz, specularStrength * reflectivity );\n\t#elif defined( ENVMAP_BLENDING_MIX )\n\t\toutgoingLight = mix( outgoingLight, envColor.xyz, specularStrength * reflectivity );\n\t#elif defined( ENVMAP_BLENDING_ADD )\n\t\toutgoingLight += envColor.xyz * specularStrength * reflectivity;\n\t#endif\n#endif",envmap_common_pars_fragment:"#ifdef USE_ENVMAP\n\tuniform float envMapIntensity;\n\tuniform float flipEnvMap;\n\t#ifdef ENVMAP_TYPE_CUBE\n\t\tuniform samplerCube envMap;\n\t#else\n\t\tuniform sampler2D envMap;\n\t#endif\n\t\n#endif",envmap_pars_fragment:"#ifdef USE_ENVMAP\n\tuniform float reflectivity;\n\t#if defined( USE_BUMPMAP ) || defined( USE_NORMALMAP ) || defined( PHONG )\n\t\t#define ENV_WORLDPOS\n\t#endif\n\t#ifdef ENV_WORLDPOS\n\t\tvarying vec3 vWorldPosition;\n\t\tuniform float refractionRatio;\n\t#else\n\t\tvarying vec3 vReflect;\n\t#endif\n#endif",envmap_pars_vertex:"#ifdef USE_ENVMAP\n\t#if defined( USE_BUMPMAP ) || defined( USE_NORMALMAP ) ||defined( PHONG )\n\t\t#define ENV_WORLDPOS\n\t#endif\n\t#ifdef ENV_WORLDPOS\n\t\t\n\t\tvarying vec3 vWorldPosition;\n\t#else\n\t\tvarying vec3 vReflect;\n\t\tuniform float refractionRatio;\n\t#endif\n#endif",envmap_physical_pars_fragment:"#if defined( USE_ENVMAP )\n\tvec3 getIBLIrradiance( const in vec3 normal ) {\n\t\t#if defined( ENVMAP_TYPE_CUBE_UV )\n\t\t\tvec3 worldNormal = inverseTransformDirection( normal, viewMatrix );\n\t\t\tvec4 envMapColor = textureCubeUV( envMap, worldNormal, 1.0 );\n\t\t\treturn PI * envMapColor.rgb * envMapIntensity;\n\t\t#else\n\t\t\treturn vec3( 0.0 );\n\t\t#endif\n\t}\n\tvec3 getIBLRadiance( const in vec3 viewDir, const in vec3 normal, const in float roughness ) {\n\t\t#if defined( ENVMAP_TYPE_CUBE_UV )\n\t\t\tvec3 reflectVec = reflect( - viewDir, normal );\n\t\t\treflectVec = normalize( mix( reflectVec, normal, roughness * roughness) );\n\t\t\treflectVec = inverseTransformDirection( reflectVec, viewMatrix );\n\t\t\tvec4 envMapColor = textureCubeUV( envMap, reflectVec, roughness );\n\t\t\treturn envMapColor.rgb * envMapIntensity;\n\t\t#else\n\t\t\treturn vec3( 0.0 );\n\t\t#endif\n\t}\n#endif",envmap_vertex:"#ifdef USE_ENVMAP\n\t#ifdef ENV_WORLDPOS\n\t\tvWorldPosition = worldPosition.xyz;\n\t#else\n\t\tvec3 cameraToVertex;\n\t\tif ( isOrthographic ) {\n\t\t\tcameraToVertex = normalize( vec3( - viewMatrix[ 0 ][ 2 ], - viewMatrix[ 1 ][ 2 ], - viewMatrix[ 2 ][ 2 ] ) );\n\t\t} else {\n\t\t\tcameraToVertex = normalize( worldPosition.xyz - cameraPosition );\n\t\t}\n\t\tvec3 worldNormal = inverseTransformDirection( transformedNormal, viewMatrix );\n\t\t#ifdef ENVMAP_MODE_REFLECTION\n\t\t\tvReflect = reflect( cameraToVertex, worldNormal );\n\t\t#else\n\t\t\tvReflect = refract( cameraToVertex, worldNormal, refractionRatio );\n\t\t#endif\n\t#endif\n#endif",fog_vertex:"#ifdef USE_FOG\n\tvFogDepth = - mvPosition.z;\n#endif",fog_pars_vertex:"#ifdef USE_FOG\n\tvarying float vFogDepth;\n#endif",fog_fragment:"#ifdef USE_FOG\n\t#ifdef FOG_EXP2\n\t\tfloat fogFactor = 1.0 - exp( - fogDensity * fogDensity * vFogDepth * vFogDepth );\n\t#else\n\t\tfloat fogFactor = smoothstep( fogNear, fogFar, vFogDepth );\n\t#endif\n\tgl_FragColor.rgb = mix( gl_FragColor.rgb, fogColor, fogFactor );\n#endif",fog_pars_fragment:"#ifdef USE_FOG\n\tuniform vec3 fogColor;\n\tvarying float vFogDepth;\n\t#ifdef FOG_EXP2\n\t\tuniform float fogDensity;\n\t#else\n\t\tuniform float fogNear;\n\t\tuniform float fogFar;\n\t#endif\n#endif",gradientmap_pars_fragment:"#ifdef USE_GRADIENTMAP\n\tuniform sampler2D gradientMap;\n#endif\nvec3 getGradientIrradiance( vec3 normal, vec3 lightDirection ) {\n\tfloat dotNL = dot( normal, lightDirection );\n\tvec2 coord = vec2( dotNL * 0.5 + 0.5, 0.0 );\n\t#ifdef USE_GRADIENTMAP\n\t\treturn vec3( texture2D( gradientMap, coord ).r );\n\t#else\n\t\treturn ( coord.x < 0.7 ) ? vec3( 0.7 ) : vec3( 1.0 );\n\t#endif\n}",lightmap_fragment:"#ifdef USE_LIGHTMAP\n\tvec4 lightMapTexel = texture2D( lightMap, vUv2 );\n\tvec3 lightMapIrradiance = lightMapTexel.rgb * lightMapIntensity;\n\treflectedLight.indirectDiffuse += lightMapIrradiance;\n#endif",lightmap_pars_fragment:"#ifdef USE_LIGHTMAP\n\tuniform sampler2D lightMap;\n\tuniform float lightMapIntensity;\n#endif",lights_lambert_vertex:"vec3 diffuse = vec3( 1.0 );\nGeometricContext geometry;\ngeometry.position = mvPosition.xyz;\ngeometry.normal = normalize( transformedNormal );\ngeometry.viewDir = ( isOrthographic ) ? vec3( 0, 0, 1 ) : normalize( -mvPosition.xyz );\nGeometricContext backGeometry;\nbackGeometry.position = geometry.position;\nbackGeometry.normal = -geometry.normal;\nbackGeometry.viewDir = geometry.viewDir;\nvLightFront = vec3( 0.0 );\nvIndirectFront = vec3( 0.0 );\n#ifdef DOUBLE_SIDED\n\tvLightBack = vec3( 0.0 );\n\tvIndirectBack = vec3( 0.0 );\n#endif\nIncidentLight directLight;\nfloat dotNL;\nvec3 directLightColor_Diffuse;\nvIndirectFront += getAmbientLightIrradiance( ambientLightColor );\nvIndirectFront += getLightProbeIrradiance( lightProbe, geometry.normal );\n#ifdef DOUBLE_SIDED\n\tvIndirectBack += getAmbientLightIrradiance( ambientLightColor );\n\tvIndirectBack += getLightProbeIrradiance( lightProbe, backGeometry.normal );\n#endif\n#if NUM_POINT_LIGHTS > 0\n\t#pragma unroll_loop_start\n\tfor ( int i = 0; i < NUM_POINT_LIGHTS; i ++ ) {\n\t\tgetPointLightInfo( pointLights[ i ], geometry, directLight );\n\t\tdotNL = dot( geometry.normal, directLight.direction );\n\t\tdirectLightColor_Diffuse = directLight.color;\n\t\tvLightFront += saturate( dotNL ) * directLightColor_Diffuse;\n\t\t#ifdef DOUBLE_SIDED\n\t\t\tvLightBack += saturate( - dotNL ) * directLightColor_Diffuse;\n\t\t#endif\n\t}\n\t#pragma unroll_loop_end\n#endif\n#if NUM_SPOT_LIGHTS > 0\n\t#pragma unroll_loop_start\n\tfor ( int i = 0; i < NUM_SPOT_LIGHTS; i ++ ) {\n\t\tgetSpotLightInfo( spotLights[ i ], geometry, directLight );\n\t\tdotNL = dot( geometry.normal, directLight.direction );\n\t\tdirectLightColor_Diffuse = directLight.color;\n\t\tvLightFront += saturate( dotNL ) * directLightColor_Diffuse;\n\t\t#ifdef DOUBLE_SIDED\n\t\t\tvLightBack += saturate( - dotNL ) * directLightColor_Diffuse;\n\t\t#endif\n\t}\n\t#pragma unroll_loop_end\n#endif\n#if NUM_DIR_LIGHTS > 0\n\t#pragma unroll_loop_start\n\tfor ( int i = 0; i < NUM_DIR_LIGHTS; i ++ ) {\n\t\tgetDirectionalLightInfo( directionalLights[ i ], geometry, directLight );\n\t\tdotNL = dot( geometry.normal, directLight.direction );\n\t\tdirectLightColor_Diffuse = directLight.color;\n\t\tvLightFront += saturate( dotNL ) * directLightColor_Diffuse;\n\t\t#ifdef DOUBLE_SIDED\n\t\t\tvLightBack += saturate( - dotNL ) * directLightColor_Diffuse;\n\t\t#endif\n\t}\n\t#pragma unroll_loop_end\n#endif\n#if NUM_HEMI_LIGHTS > 0\n\t#pragma unroll_loop_start\n\tfor ( int i = 0; i < NUM_HEMI_LIGHTS; i ++ ) {\n\t\tvIndirectFront += getHemisphereLightIrradiance( hemisphereLights[ i ], geometry.normal );\n\t\t#ifdef DOUBLE_SIDED\n\t\t\tvIndirectBack += getHemisphereLightIrradiance( hemisphereLights[ i ], backGeometry.normal );\n\t\t#endif\n\t}\n\t#pragma unroll_loop_end\n#endif",lights_pars_begin:"uniform bool receiveShadow;\nuniform vec3 ambientLightColor;\nuniform vec3 lightProbe[ 9 ];\nvec3 shGetIrradianceAt( in vec3 normal, in vec3 shCoefficients[ 9 ] ) {\n\tfloat x = normal.x, y = normal.y, z = normal.z;\n\tvec3 result = shCoefficients[ 0 ] * 0.886227;\n\tresult += shCoefficients[ 1 ] * 2.0 * 0.511664 * y;\n\tresult += shCoefficients[ 2 ] * 2.0 * 0.511664 * z;\n\tresult += shCoefficients[ 3 ] * 2.0 * 0.511664 * x;\n\tresult += shCoefficients[ 4 ] * 2.0 * 0.429043 * x * y;\n\tresult += shCoefficients[ 5 ] * 2.0 * 0.429043 * y * z;\n\tresult += shCoefficients[ 6 ] * ( 0.743125 * z * z - 0.247708 );\n\tresult += shCoefficients[ 7 ] * 2.0 * 0.429043 * x * z;\n\tresult += shCoefficients[ 8 ] * 0.429043 * ( x * x - y * y );\n\treturn result;\n}\nvec3 getLightProbeIrradiance( const in vec3 lightProbe[ 9 ], const in vec3 normal ) {\n\tvec3 worldNormal = inverseTransformDirection( normal, viewMatrix );\n\tvec3 irradiance = shGetIrradianceAt( worldNormal, lightProbe );\n\treturn irradiance;\n}\nvec3 getAmbientLightIrradiance( const in vec3 ambientLightColor ) {\n\tvec3 irradiance = ambientLightColor;\n\treturn irradiance;\n}\nfloat getDistanceAttenuation( const in float lightDistance, const in float cutoffDistance, const in float decayExponent ) {\n\t#if defined ( PHYSICALLY_CORRECT_LIGHTS )\n\t\tfloat distanceFalloff = 1.0 / max( pow( lightDistance, decayExponent ), 0.01 );\n\t\tif ( cutoffDistance > 0.0 ) {\n\t\t\tdistanceFalloff *= pow2( saturate( 1.0 - pow4( lightDistance / cutoffDistance ) ) );\n\t\t}\n\t\treturn distanceFalloff;\n\t#else\n\t\tif ( cutoffDistance > 0.0 && decayExponent > 0.0 ) {\n\t\t\treturn pow( saturate( - lightDistance / cutoffDistance + 1.0 ), decayExponent );\n\t\t}\n\t\treturn 1.0;\n\t#endif\n}\nfloat getSpotAttenuation( const in float coneCosine, const in float penumbraCosine, const in float angleCosine ) {\n\treturn smoothstep( coneCosine, penumbraCosine, angleCosine );\n}\n#if NUM_DIR_LIGHTS > 0\n\tstruct DirectionalLight {\n\t\tvec3 direction;\n\t\tvec3 color;\n\t};\n\tuniform DirectionalLight directionalLights[ NUM_DIR_LIGHTS ];\n\tvoid getDirectionalLightInfo( const in DirectionalLight directionalLight, const in GeometricContext geometry, out IncidentLight light ) {\n\t\tlight.color = directionalLight.color;\n\t\tlight.direction = directionalLight.direction;\n\t\tlight.visible = true;\n\t}\n#endif\n#if NUM_POINT_LIGHTS > 0\n\tstruct PointLight {\n\t\tvec3 position;\n\t\tvec3 color;\n\t\tfloat distance;\n\t\tfloat decay;\n\t};\n\tuniform PointLight pointLights[ NUM_POINT_LIGHTS ];\n\tvoid getPointLightInfo( const in PointLight pointLight, const in GeometricContext geometry, out IncidentLight light ) {\n\t\tvec3 lVector = pointLight.position - geometry.position;\n\t\tlight.direction = normalize( lVector );\n\t\tfloat lightDistance = length( lVector );\n\t\tlight.color = pointLight.color;\n\t\tlight.color *= getDistanceAttenuation( lightDistance, pointLight.distance, pointLight.decay );\n\t\tlight.visible = ( light.color != vec3( 0.0 ) );\n\t}\n#endif\n#if NUM_SPOT_LIGHTS > 0\n\tstruct SpotLight {\n\t\tvec3 position;\n\t\tvec3 direction;\n\t\tvec3 color;\n\t\tfloat distance;\n\t\tfloat decay;\n\t\tfloat coneCos;\n\t\tfloat penumbraCos;\n\t};\n\tuniform SpotLight spotLights[ NUM_SPOT_LIGHTS ];\n\tvoid getSpotLightInfo( const in SpotLight spotLight, const in GeometricContext geometry, out IncidentLight light ) {\n\t\tvec3 lVector = spotLight.position - geometry.position;\n\t\tlight.direction = normalize( lVector );\n\t\tfloat angleCos = dot( light.direction, spotLight.direction );\n\t\tfloat spotAttenuation = getSpotAttenuation( spotLight.coneCos, spotLight.penumbraCos, angleCos );\n\t\tif ( spotAttenuation > 0.0 ) {\n\t\t\tfloat lightDistance = length( lVector );\n\t\t\tlight.color = spotLight.color * spotAttenuation;\n\t\t\tlight.color *= getDistanceAttenuation( lightDistance, spotLight.distance, spotLight.decay );\n\t\t\tlight.visible = ( light.color != vec3( 0.0 ) );\n\t\t} else {\n\t\t\tlight.color = vec3( 0.0 );\n\t\t\tlight.visible = false;\n\t\t}\n\t}\n#endif\n#if NUM_RECT_AREA_LIGHTS > 0\n\tstruct RectAreaLight {\n\t\tvec3 color;\n\t\tvec3 position;\n\t\tvec3 halfWidth;\n\t\tvec3 halfHeight;\n\t};\n\tuniform sampler2D ltc_1;\tuniform sampler2D ltc_2;\n\tuniform RectAreaLight rectAreaLights[ NUM_RECT_AREA_LIGHTS ];\n#endif\n#if NUM_HEMI_LIGHTS > 0\n\tstruct HemisphereLight {\n\t\tvec3 direction;\n\t\tvec3 skyColor;\n\t\tvec3 groundColor;\n\t};\n\tuniform HemisphereLight hemisphereLights[ NUM_HEMI_LIGHTS ];\n\tvec3 getHemisphereLightIrradiance( const in HemisphereLight hemiLight, const in vec3 normal ) {\n\t\tfloat dotNL = dot( normal, hemiLight.direction );\n\t\tfloat hemiDiffuseWeight = 0.5 * dotNL + 0.5;\n\t\tvec3 irradiance = mix( hemiLight.groundColor, hemiLight.skyColor, hemiDiffuseWeight );\n\t\treturn irradiance;\n\t}\n#endif",lights_toon_fragment:"ToonMaterial material;\nmaterial.diffuseColor = diffuseColor.rgb;",lights_toon_pars_fragment:"varying vec3 vViewPosition;\nstruct ToonMaterial {\n\tvec3 diffuseColor;\n};\nvoid RE_Direct_Toon( const in IncidentLight directLight, const in GeometricContext geometry, const in ToonMaterial material, inout ReflectedLight reflectedLight ) {\n\tvec3 irradiance = getGradientIrradiance( geometry.normal, directLight.direction ) * directLight.color;\n\treflectedLight.directDiffuse += irradiance * BRDF_Lambert( material.diffuseColor );\n}\nvoid RE_IndirectDiffuse_Toon( const in vec3 irradiance, const in GeometricContext geometry, const in ToonMaterial material, inout ReflectedLight reflectedLight ) {\n\treflectedLight.indirectDiffuse += irradiance * BRDF_Lambert( material.diffuseColor );\n}\n#define RE_Direct\t\t\t\tRE_Direct_Toon\n#define RE_IndirectDiffuse\t\tRE_IndirectDiffuse_Toon\n#define Material_LightProbeLOD( material )\t(0)",lights_phong_fragment:"BlinnPhongMaterial material;\nmaterial.diffuseColor = diffuseColor.rgb;\nmaterial.specularColor = specular;\nmaterial.specularShininess = shininess;\nmaterial.specularStrength = specularStrength;",lights_phong_pars_fragment:"varying vec3 vViewPosition;\nstruct BlinnPhongMaterial {\n\tvec3 diffuseColor;\n\tvec3 specularColor;\n\tfloat specularShininess;\n\tfloat specularStrength;\n};\nvoid RE_Direct_BlinnPhong( const in IncidentLight directLight, const in GeometricContext geometry, const in BlinnPhongMaterial material, inout ReflectedLight reflectedLight ) {\n\tfloat dotNL = saturate( dot( geometry.normal, directLight.direction ) );\n\tvec3 irradiance = dotNL * directLight.color;\n\treflectedLight.directDiffuse += irradiance * BRDF_Lambert( material.diffuseColor );\n\treflectedLight.directSpecular += irradiance * BRDF_BlinnPhong( directLight.direction, geometry.viewDir, geometry.normal, material.specularColor, material.specularShininess ) * material.specularStrength;\n}\nvoid RE_IndirectDiffuse_BlinnPhong( const in vec3 irradiance, const in GeometricContext geometry, const in BlinnPhongMaterial material, inout ReflectedLight reflectedLight ) {\n\treflectedLight.indirectDiffuse += irradiance * BRDF_Lambert( material.diffuseColor );\n}\n#define RE_Direct\t\t\t\tRE_Direct_BlinnPhong\n#define RE_IndirectDiffuse\t\tRE_IndirectDiffuse_BlinnPhong\n#define Material_LightProbeLOD( material )\t(0)",lights_physical_fragment:"PhysicalMaterial material;\nmaterial.diffuseColor = diffuseColor.rgb * ( 1.0 - metalnessFactor );\nvec3 dxy = max( abs( dFdx( geometryNormal ) ), abs( dFdy( geometryNormal ) ) );\nfloat geometryRoughness = max( max( dxy.x, dxy.y ), dxy.z );\nmaterial.roughness = max( roughnessFactor, 0.0525 );material.roughness += geometryRoughness;\nmaterial.roughness = min( material.roughness, 1.0 );\n#ifdef IOR\n\t#ifdef SPECULAR\n\t\tfloat specularIntensityFactor = specularIntensity;\n\t\tvec3 specularColorFactor = specularColor;\n\t\t#ifdef USE_SPECULARINTENSITYMAP\n\t\t\tspecularIntensityFactor *= texture2D( specularIntensityMap, vUv ).a;\n\t\t#endif\n\t\t#ifdef USE_SPECULARCOLORMAP\n\t\t\tspecularColorFactor *= texture2D( specularColorMap, vUv ).rgb;\n\t\t#endif\n\t\tmaterial.specularF90 = mix( specularIntensityFactor, 1.0, metalnessFactor );\n\t#else\n\t\tfloat specularIntensityFactor = 1.0;\n\t\tvec3 specularColorFactor = vec3( 1.0 );\n\t\tmaterial.specularF90 = 1.0;\n\t#endif\n\tmaterial.specularColor = mix( min( pow2( ( ior - 1.0 ) / ( ior + 1.0 ) ) * specularColorFactor, vec3( 1.0 ) ) * specularIntensityFactor, diffuseColor.rgb, metalnessFactor );\n#else\n\tmaterial.specularColor = mix( vec3( 0.04 ), diffuseColor.rgb, metalnessFactor );\n\tmaterial.specularF90 = 1.0;\n#endif\n#ifdef USE_CLEARCOAT\n\tmaterial.clearcoat = clearcoat;\n\tmaterial.clearcoatRoughness = clearcoatRoughness;\n\tmaterial.clearcoatF0 = vec3( 0.04 );\n\tmaterial.clearcoatF90 = 1.0;\n\t#ifdef USE_CLEARCOATMAP\n\t\tmaterial.clearcoat *= texture2D( clearcoatMap, vUv ).x;\n\t#endif\n\t#ifdef USE_CLEARCOAT_ROUGHNESSMAP\n\t\tmaterial.clearcoatRoughness *= texture2D( clearcoatRoughnessMap, vUv ).y;\n\t#endif\n\tmaterial.clearcoat = saturate( material.clearcoat );\tmaterial.clearcoatRoughness = max( material.clearcoatRoughness, 0.0525 );\n\tmaterial.clearcoatRoughness += geometryRoughness;\n\tmaterial.clearcoatRoughness = min( material.clearcoatRoughness, 1.0 );\n#endif\n#ifdef USE_SHEEN\n\tmaterial.sheenColor = sheenColor;\n\t#ifdef USE_SHEENCOLORMAP\n\t\tmaterial.sheenColor *= texture2D( sheenColorMap, vUv ).rgb;\n\t#endif\n\tmaterial.sheenRoughness = clamp( sheenRoughness, 0.07, 1.0 );\n\t#ifdef USE_SHEENROUGHNESSMAP\n\t\tmaterial.sheenRoughness *= texture2D( sheenRoughnessMap, vUv ).a;\n\t#endif\n#endif",lights_physical_pars_fragment:"struct PhysicalMaterial {\n\tvec3 diffuseColor;\n\tfloat roughness;\n\tvec3 specularColor;\n\tfloat specularF90;\n\t#ifdef USE_CLEARCOAT\n\t\tfloat clearcoat;\n\t\tfloat clearcoatRoughness;\n\t\tvec3 clearcoatF0;\n\t\tfloat clearcoatF90;\n\t#endif\n\t#ifdef USE_SHEEN\n\t\tvec3 sheenColor;\n\t\tfloat sheenRoughness;\n\t#endif\n};\nvec3 clearcoatSpecular = vec3( 0.0 );\nvec3 sheenSpecular = vec3( 0.0 );\nfloat IBLSheenBRDF( const in vec3 normal, const in vec3 viewDir, const in float roughness) {\n\tfloat dotNV = saturate( dot( normal, viewDir ) );\n\tfloat r2 = roughness * roughness;\n\tfloat a = roughness < 0.25 ? -339.2 * r2 + 161.4 * roughness - 25.9 : -8.48 * r2 + 14.3 * roughness - 9.95;\n\tfloat b = roughness < 0.25 ? 44.0 * r2 - 23.7 * roughness + 3.26 : 1.97 * r2 - 3.27 * roughness + 0.72;\n\tfloat DG = exp( a * dotNV + b ) + ( roughness < 0.25 ? 0.0 : 0.1 * ( roughness - 0.25 ) );\n\treturn saturate( DG * RECIPROCAL_PI );\n}\nvec2 DFGApprox( const in vec3 normal, const in vec3 viewDir, const in float roughness ) {\n\tfloat dotNV = saturate( dot( normal, viewDir ) );\n\tconst vec4 c0 = vec4( - 1, - 0.0275, - 0.572, 0.022 );\n\tconst vec4 c1 = vec4( 1, 0.0425, 1.04, - 0.04 );\n\tvec4 r = roughness * c0 + c1;\n\tfloat a004 = min( r.x * r.x, exp2( - 9.28 * dotNV ) ) * r.x + r.y;\n\tvec2 fab = vec2( - 1.04, 1.04 ) * a004 + r.zw;\n\treturn fab;\n}\nvec3 EnvironmentBRDF( const in vec3 normal, const in vec3 viewDir, const in vec3 specularColor, const in float specularF90, const in float roughness ) {\n\tvec2 fab = DFGApprox( normal, viewDir, roughness );\n\treturn specularColor * fab.x + specularF90 * fab.y;\n}\nvoid computeMultiscattering( const in vec3 normal, const in vec3 viewDir, const in vec3 specularColor, const in float specularF90, const in float roughness, inout vec3 singleScatter, inout vec3 multiScatter ) {\n\tvec2 fab = DFGApprox( normal, viewDir, roughness );\n\tvec3 FssEss = specularColor * fab.x + specularF90 * fab.y;\n\tfloat Ess = fab.x + fab.y;\n\tfloat Ems = 1.0 - Ess;\n\tvec3 Favg = specularColor + ( 1.0 - specularColor ) * 0.047619;\tvec3 Fms = FssEss * Favg / ( 1.0 - Ems * Favg );\n\tsingleScatter += FssEss;\n\tmultiScatter += Fms * Ems;\n}\n#if NUM_RECT_AREA_LIGHTS > 0\n\tvoid RE_Direct_RectArea_Physical( const in RectAreaLight rectAreaLight, const in GeometricContext geometry, const in PhysicalMaterial material, inout ReflectedLight reflectedLight ) {\n\t\tvec3 normal = geometry.normal;\n\t\tvec3 viewDir = geometry.viewDir;\n\t\tvec3 position = geometry.position;\n\t\tvec3 lightPos = rectAreaLight.position;\n\t\tvec3 halfWidth = rectAreaLight.halfWidth;\n\t\tvec3 halfHeight = rectAreaLight.halfHeight;\n\t\tvec3 lightColor = rectAreaLight.color;\n\t\tfloat roughness = material.roughness;\n\t\tvec3 rectCoords[ 4 ];\n\t\trectCoords[ 0 ] = lightPos + halfWidth - halfHeight;\t\trectCoords[ 1 ] = lightPos - halfWidth - halfHeight;\n\t\trectCoords[ 2 ] = lightPos - halfWidth + halfHeight;\n\t\trectCoords[ 3 ] = lightPos + halfWidth + halfHeight;\n\t\tvec2 uv = LTC_Uv( normal, viewDir, roughness );\n\t\tvec4 t1 = texture2D( ltc_1, uv );\n\t\tvec4 t2 = texture2D( ltc_2, uv );\n\t\tmat3 mInv = mat3(\n\t\t\tvec3( t1.x, 0, t1.y ),\n\t\t\tvec3(\t\t0, 1,\t\t0 ),\n\t\t\tvec3( t1.z, 0, t1.w )\n\t\t);\n\t\tvec3 fresnel = ( material.specularColor * t2.x + ( vec3( 1.0 ) - material.specularColor ) * t2.y );\n\t\treflectedLight.directSpecular += lightColor * fresnel * LTC_Evaluate( normal, viewDir, position, mInv, rectCoords );\n\t\treflectedLight.directDiffuse += lightColor * material.diffuseColor * LTC_Evaluate( normal, viewDir, position, mat3( 1.0 ), rectCoords );\n\t}\n#endif\nvoid RE_Direct_Physical( const in IncidentLight directLight, const in GeometricContext geometry, const in PhysicalMaterial material, inout ReflectedLight reflectedLight ) {\n\tfloat dotNL = saturate( dot( geometry.normal, directLight.direction ) );\n\tvec3 irradiance = dotNL * directLight.color;\n\t#ifdef USE_CLEARCOAT\n\t\tfloat dotNLcc = saturate( dot( geometry.clearcoatNormal, directLight.direction ) );\n\t\tvec3 ccIrradiance = dotNLcc * directLight.color;\n\t\tclearcoatSpecular += ccIrradiance * BRDF_GGX( directLight.direction, geometry.viewDir, geometry.clearcoatNormal, material.clearcoatF0, material.clearcoatF90, material.clearcoatRoughness );\n\t#endif\n\t#ifdef USE_SHEEN\n\t\tsheenSpecular += irradiance * BRDF_Sheen( directLight.direction, geometry.viewDir, geometry.normal, material.sheenColor, material.sheenRoughness );\n\t#endif\n\treflectedLight.directSpecular += irradiance * BRDF_GGX( directLight.direction, geometry.viewDir, geometry.normal, material.specularColor, material.specularF90, material.roughness );\n\treflectedLight.directDiffuse += irradiance * BRDF_Lambert( material.diffuseColor );\n}\nvoid RE_IndirectDiffuse_Physical( const in vec3 irradiance, const in GeometricContext geometry, const in PhysicalMaterial material, inout ReflectedLight reflectedLight ) {\n\treflectedLight.indirectDiffuse += irradiance * BRDF_Lambert( material.diffuseColor );\n}\nvoid RE_IndirectSpecular_Physical( const in vec3 radiance, const in vec3 irradiance, const in vec3 clearcoatRadiance, const in GeometricContext geometry, const in PhysicalMaterial material, inout ReflectedLight reflectedLight) {\n\t#ifdef USE_CLEARCOAT\n\t\tclearcoatSpecular += clearcoatRadiance * EnvironmentBRDF( geometry.clearcoatNormal, geometry.viewDir, material.clearcoatF0, material.clearcoatF90, material.clearcoatRoughness );\n\t#endif\n\t#ifdef USE_SHEEN\n\t\tsheenSpecular += irradiance * material.sheenColor * IBLSheenBRDF( geometry.normal, geometry.viewDir, material.sheenRoughness );\n\t#endif\n\tvec3 singleScattering = vec3( 0.0 );\n\tvec3 multiScattering = vec3( 0.0 );\n\tvec3 cosineWeightedIrradiance = irradiance * RECIPROCAL_PI;\n\tcomputeMultiscattering( geometry.normal, geometry.viewDir, material.specularColor, material.specularF90, material.roughness, singleScattering, multiScattering );\n\tvec3 diffuse = material.diffuseColor * ( 1.0 - ( singleScattering + multiScattering ) );\n\treflectedLight.indirectSpecular += radiance * singleScattering;\n\treflectedLight.indirectSpecular += multiScattering * cosineWeightedIrradiance;\n\treflectedLight.indirectDiffuse += diffuse * cosineWeightedIrradiance;\n}\n#define RE_Direct\t\t\t\tRE_Direct_Physical\n#define RE_Direct_RectArea\t\tRE_Direct_RectArea_Physical\n#define RE_IndirectDiffuse\t\tRE_IndirectDiffuse_Physical\n#define RE_IndirectSpecular\t\tRE_IndirectSpecular_Physical\nfloat computeSpecularOcclusion( const in float dotNV, const in float ambientOcclusion, const in float roughness ) {\n\treturn saturate( pow( dotNV + ambientOcclusion, exp2( - 16.0 * roughness - 1.0 ) ) - 1.0 + ambientOcclusion );\n}",lights_fragment_begin:"\nGeometricContext geometry;\ngeometry.position = - vViewPosition;\ngeometry.normal = normal;\ngeometry.viewDir = ( isOrthographic ) ? vec3( 0, 0, 1 ) : normalize( vViewPosition );\n#ifdef USE_CLEARCOAT\n\tgeometry.clearcoatNormal = clearcoatNormal;\n#endif\nIncidentLight directLight;\n#if ( NUM_POINT_LIGHTS > 0 ) && defined( RE_Direct )\n\tPointLight pointLight;\n\t#if defined( USE_SHADOWMAP ) && NUM_POINT_LIGHT_SHADOWS > 0\n\tPointLightShadow pointLightShadow;\n\t#endif\n\t#pragma unroll_loop_start\n\tfor ( int i = 0; i < NUM_POINT_LIGHTS; i ++ ) {\n\t\tpointLight = pointLights[ i ];\n\t\tgetPointLightInfo( pointLight, geometry, directLight );\n\t\t#if defined( USE_SHADOWMAP ) && ( UNROLLED_LOOP_INDEX < NUM_POINT_LIGHT_SHADOWS )\n\t\tpointLightShadow = pointLightShadows[ i ];\n\t\tdirectLight.color *= all( bvec2( directLight.visible, receiveShadow ) ) ? getPointShadow( pointShadowMap[ i ], pointLightShadow.shadowMapSize, pointLightShadow.shadowBias, pointLightShadow.shadowRadius, vPointShadowCoord[ i ], pointLightShadow.shadowCameraNear, pointLightShadow.shadowCameraFar ) : 1.0;\n\t\t#endif\n\t\tRE_Direct( directLight, geometry, material, reflectedLight );\n\t}\n\t#pragma unroll_loop_end\n#endif\n#if ( NUM_SPOT_LIGHTS > 0 ) && defined( RE_Direct )\n\tSpotLight spotLight;\n\t#if defined( USE_SHADOWMAP ) && NUM_SPOT_LIGHT_SHADOWS > 0\n\tSpotLightShadow spotLightShadow;\n\t#endif\n\t#pragma unroll_loop_start\n\tfor ( int i = 0; i < NUM_SPOT_LIGHTS; i ++ ) {\n\t\tspotLight = spotLights[ i ];\n\t\tgetSpotLightInfo( spotLight, geometry, directLight );\n\t\t#if defined( USE_SHADOWMAP ) && ( UNROLLED_LOOP_INDEX < NUM_SPOT_LIGHT_SHADOWS )\n\t\tspotLightShadow = spotLightShadows[ i ];\n\t\tdirectLight.color *= all( bvec2( directLight.visible, receiveShadow ) ) ? getShadow( spotShadowMap[ i ], spotLightShadow.shadowMapSize, spotLightShadow.shadowBias, spotLightShadow.shadowRadius, vSpotShadowCoord[ i ] ) : 1.0;\n\t\t#endif\n\t\tRE_Direct( directLight, geometry, material, reflectedLight );\n\t}\n\t#pragma unroll_loop_end\n#endif\n#if ( NUM_DIR_LIGHTS > 0 ) && defined( RE_Direct )\n\tDirectionalLight directionalLight;\n\t#if defined( USE_SHADOWMAP ) && NUM_DIR_LIGHT_SHADOWS > 0\n\tDirectionalLightShadow directionalLightShadow;\n\t#endif\n\t#pragma unroll_loop_start\n\tfor ( int i = 0; i < NUM_DIR_LIGHTS; i ++ ) {\n\t\tdirectionalLight = directionalLights[ i ];\n\t\tgetDirectionalLightInfo( directionalLight, geometry, directLight );\n\t\t#if defined( USE_SHADOWMAP ) && ( UNROLLED_LOOP_INDEX < NUM_DIR_LIGHT_SHADOWS )\n\t\tdirectionalLightShadow = directionalLightShadows[ i ];\n\t\tdirectLight.color *= all( bvec2( directLight.visible, receiveShadow ) ) ? getShadow( directionalShadowMap[ i ], directionalLightShadow.shadowMapSize, directionalLightShadow.shadowBias, directionalLightShadow.shadowRadius, vDirectionalShadowCoord[ i ] ) : 1.0;\n\t\t#endif\n\t\tRE_Direct( directLight, geometry, material, reflectedLight );\n\t}\n\t#pragma unroll_loop_end\n#endif\n#if ( NUM_RECT_AREA_LIGHTS > 0 ) && defined( RE_Direct_RectArea )\n\tRectAreaLight rectAreaLight;\n\t#pragma unroll_loop_start\n\tfor ( int i = 0; i < NUM_RECT_AREA_LIGHTS; i ++ ) {\n\t\trectAreaLight = rectAreaLights[ i ];\n\t\tRE_Direct_RectArea( rectAreaLight, geometry, material, reflectedLight );\n\t}\n\t#pragma unroll_loop_end\n#endif\n#if defined( RE_IndirectDiffuse )\n\tvec3 iblIrradiance = vec3( 0.0 );\n\tvec3 irradiance = getAmbientLightIrradiance( ambientLightColor );\n\tirradiance += getLightProbeIrradiance( lightProbe, geometry.normal );\n\t#if ( NUM_HEMI_LIGHTS > 0 )\n\t\t#pragma unroll_loop_start\n\t\tfor ( int i = 0; i < NUM_HEMI_LIGHTS; i ++ ) {\n\t\t\tirradiance += getHemisphereLightIrradiance( hemisphereLights[ i ], geometry.normal );\n\t\t}\n\t\t#pragma unroll_loop_end\n\t#endif\n#endif\n#if defined( RE_IndirectSpecular )\n\tvec3 radiance = vec3( 0.0 );\n\tvec3 clearcoatRadiance = vec3( 0.0 );\n#endif",lights_fragment_maps:"#if defined( RE_IndirectDiffuse )\n\t#ifdef USE_LIGHTMAP\n\t\tvec4 lightMapTexel = texture2D( lightMap, vUv2 );\n\t\tvec3 lightMapIrradiance = lightMapTexel.rgb * lightMapIntensity;\n\t\tirradiance += lightMapIrradiance;\n\t#endif\n\t#if defined( USE_ENVMAP ) && defined( STANDARD ) && defined( ENVMAP_TYPE_CUBE_UV )\n\t\tiblIrradiance += getIBLIrradiance( geometry.normal );\n\t#endif\n#endif\n#if defined( USE_ENVMAP ) && defined( RE_IndirectSpecular )\n\tradiance += getIBLRadiance( geometry.viewDir, geometry.normal, material.roughness );\n\t#ifdef USE_CLEARCOAT\n\t\tclearcoatRadiance += getIBLRadiance( geometry.viewDir, geometry.clearcoatNormal, material.clearcoatRoughness );\n\t#endif\n#endif",lights_fragment_end:"#if defined( RE_IndirectDiffuse )\n\tRE_IndirectDiffuse( irradiance, geometry, material, reflectedLight );\n#endif\n#if defined( RE_IndirectSpecular )\n\tRE_IndirectSpecular( radiance, iblIrradiance, clearcoatRadiance, geometry, material, reflectedLight );\n#endif",logdepthbuf_fragment:"#if defined( USE_LOGDEPTHBUF ) && defined( USE_LOGDEPTHBUF_EXT )\n\tgl_FragDepthEXT = vIsPerspective == 0.0 ? gl_FragCoord.z : log2( vFragDepth ) * logDepthBufFC * 0.5;\n#endif",logdepthbuf_pars_fragment:"#if defined( USE_LOGDEPTHBUF ) && defined( USE_LOGDEPTHBUF_EXT )\n\tuniform float logDepthBufFC;\n\tvarying float vFragDepth;\n\tvarying float vIsPerspective;\n#endif",logdepthbuf_pars_vertex:"#ifdef USE_LOGDEPTHBUF\n\t#ifdef USE_LOGDEPTHBUF_EXT\n\t\tvarying float vFragDepth;\n\t\tvarying float vIsPerspective;\n\t#else\n\t\tuniform float logDepthBufFC;\n\t#endif\n#endif",logdepthbuf_vertex:"#ifdef USE_LOGDEPTHBUF\n\t#ifdef USE_LOGDEPTHBUF_EXT\n\t\tvFragDepth = 1.0 + gl_Position.w;\n\t\tvIsPerspective = float( isPerspectiveMatrix( projectionMatrix ) );\n\t#else\n\t\tif ( isPerspectiveMatrix( projectionMatrix ) ) {\n\t\t\tgl_Position.z = log2( max( EPSILON, gl_Position.w + 1.0 ) ) * logDepthBufFC - 1.0;\n\t\t\tgl_Position.z *= gl_Position.w;\n\t\t}\n\t#endif\n#endif",map_fragment:"#ifdef USE_MAP\n\tvec4 sampledDiffuseColor = texture2D( map, vUv );\n\t#ifdef DECODE_VIDEO_TEXTURE\n\t\tsampledDiffuseColor = vec4( mix( pow( sampledDiffuseColor.rgb * 0.9478672986 + vec3( 0.0521327014 ), vec3( 2.4 ) ), sampledDiffuseColor.rgb * 0.0773993808, vec3( lessThanEqual( sampledDiffuseColor.rgb, vec3( 0.04045 ) ) ) ), sampledDiffuseColor.w );\n\t#endif\n\tdiffuseColor *= sampledDiffuseColor;\n#endif",map_pars_fragment:"#ifdef USE_MAP\n\tuniform sampler2D map;\n#endif",map_particle_fragment:"#if defined( USE_MAP ) || defined( USE_ALPHAMAP )\n\tvec2 uv = ( uvTransform * vec3( gl_PointCoord.x, 1.0 - gl_PointCoord.y, 1 ) ).xy;\n#endif\n#ifdef USE_MAP\n\tdiffuseColor *= texture2D( map, uv );\n#endif\n#ifdef USE_ALPHAMAP\n\tdiffuseColor.a *= texture2D( alphaMap, uv ).g;\n#endif",map_particle_pars_fragment:"#if defined( USE_MAP ) || defined( USE_ALPHAMAP )\n\tuniform mat3 uvTransform;\n#endif\n#ifdef USE_MAP\n\tuniform sampler2D map;\n#endif\n#ifdef USE_ALPHAMAP\n\tuniform sampler2D alphaMap;\n#endif",metalnessmap_fragment:"float metalnessFactor = metalness;\n#ifdef USE_METALNESSMAP\n\tvec4 texelMetalness = texture2D( metalnessMap, vUv );\n\tmetalnessFactor *= texelMetalness.b;\n#endif",metalnessmap_pars_fragment:"#ifdef USE_METALNESSMAP\n\tuniform sampler2D metalnessMap;\n#endif",morphcolor_vertex:"#if defined( USE_MORPHCOLORS ) && defined( MORPHTARGETS_TEXTURE )\n\tvColor *= morphTargetBaseInfluence;\n\tfor ( int i = 0; i < MORPHTARGETS_COUNT; i ++ ) {\n\t\t#if defined( USE_COLOR_ALPHA )\n\t\t\tif ( morphTargetInfluences[ i ] != 0.0 ) vColor += getMorph( gl_VertexID, i, 2 ) * morphTargetInfluences[ i ];\n\t\t#elif defined( USE_COLOR )\n\t\t\tif ( morphTargetInfluences[ i ] != 0.0 ) vColor += getMorph( gl_VertexID, i, 2 ).rgb * morphTargetInfluences[ i ];\n\t\t#endif\n\t}\n#endif",morphnormal_vertex:"#ifdef USE_MORPHNORMALS\n\tobjectNormal *= morphTargetBaseInfluence;\n\t#ifdef MORPHTARGETS_TEXTURE\n\t\tfor ( int i = 0; i < MORPHTARGETS_COUNT; i ++ ) {\n\t\t\tif ( morphTargetInfluences[ i ] != 0.0 ) objectNormal += getMorph( gl_VertexID, i, 1 ).xyz * morphTargetInfluences[ i ];\n\t\t}\n\t#else\n\t\tobjectNormal += morphNormal0 * morphTargetInfluences[ 0 ];\n\t\tobjectNormal += morphNormal1 * morphTargetInfluences[ 1 ];\n\t\tobjectNormal += morphNormal2 * morphTargetInfluences[ 2 ];\n\t\tobjectNormal += morphNormal3 * morphTargetInfluences[ 3 ];\n\t#endif\n#endif",morphtarget_pars_vertex:"#ifdef USE_MORPHTARGETS\n\tuniform float morphTargetBaseInfluence;\n\t#ifdef MORPHTARGETS_TEXTURE\n\t\tuniform float morphTargetInfluences[ MORPHTARGETS_COUNT ];\n\t\tuniform sampler2DArray morphTargetsTexture;\n\t\tuniform ivec2 morphTargetsTextureSize;\n\t\tvec4 getMorph( const in int vertexIndex, const in int morphTargetIndex, const in int offset ) {\n\t\t\tint texelIndex = vertexIndex * MORPHTARGETS_TEXTURE_STRIDE + offset;\n\t\t\tint y = texelIndex / morphTargetsTextureSize.x;\n\t\t\tint x = texelIndex - y * morphTargetsTextureSize.x;\n\t\t\tivec3 morphUV = ivec3( x, y, morphTargetIndex );\n\t\t\treturn texelFetch( morphTargetsTexture, morphUV, 0 );\n\t\t}\n\t#else\n\t\t#ifndef USE_MORPHNORMALS\n\t\t\tuniform float morphTargetInfluences[ 8 ];\n\t\t#else\n\t\t\tuniform float morphTargetInfluences[ 4 ];\n\t\t#endif\n\t#endif\n#endif",morphtarget_vertex:"#ifdef USE_MORPHTARGETS\n\ttransformed *= morphTargetBaseInfluence;\n\t#ifdef MORPHTARGETS_TEXTURE\n\t\tfor ( int i = 0; i < MORPHTARGETS_COUNT; i ++ ) {\n\t\t\tif ( morphTargetInfluences[ i ] != 0.0 ) transformed += getMorph( gl_VertexID, i, 0 ).xyz * morphTargetInfluences[ i ];\n\t\t}\n\t#else\n\t\ttransformed += morphTarget0 * morphTargetInfluences[ 0 ];\n\t\ttransformed += morphTarget1 * morphTargetInfluences[ 1 ];\n\t\ttransformed += morphTarget2 * morphTargetInfluences[ 2 ];\n\t\ttransformed += morphTarget3 * morphTargetInfluences[ 3 ];\n\t\t#ifndef USE_MORPHNORMALS\n\t\t\ttransformed += morphTarget4 * morphTargetInfluences[ 4 ];\n\t\t\ttransformed += morphTarget5 * morphTargetInfluences[ 5 ];\n\t\t\ttransformed += morphTarget6 * morphTargetInfluences[ 6 ];\n\t\t\ttransformed += morphTarget7 * morphTargetInfluences[ 7 ];\n\t\t#endif\n\t#endif\n#endif",normal_fragment_begin:"float faceDirection = gl_FrontFacing ? 1.0 : - 1.0;\n#ifdef FLAT_SHADED\n\tvec3 fdx = vec3( dFdx( vViewPosition.x ), dFdx( vViewPosition.y ), dFdx( vViewPosition.z ) );\n\tvec3 fdy = vec3( dFdy( vViewPosition.x ), dFdy( vViewPosition.y ), dFdy( vViewPosition.z ) );\n\tvec3 normal = normalize( cross( fdx, fdy ) );\n#else\n\tvec3 normal = normalize( vNormal );\n\t#ifdef DOUBLE_SIDED\n\t\tnormal = normal * faceDirection;\n\t#endif\n\t#ifdef USE_TANGENT\n\t\tvec3 tangent = normalize( vTangent );\n\t\tvec3 bitangent = normalize( vBitangent );\n\t\t#ifdef DOUBLE_SIDED\n\t\t\ttangent = tangent * faceDirection;\n\t\t\tbitangent = bitangent * faceDirection;\n\t\t#endif\n\t\t#if defined( TANGENTSPACE_NORMALMAP ) || defined( USE_CLEARCOAT_NORMALMAP )\n\t\t\tmat3 vTBN = mat3( tangent, bitangent, normal );\n\t\t#endif\n\t#endif\n#endif\nvec3 geometryNormal = normal;",normal_fragment_maps:"#ifdef OBJECTSPACE_NORMALMAP\n\tnormal = texture2D( normalMap, vUv ).xyz * 2.0 - 1.0;\n\t#ifdef FLIP_SIDED\n\t\tnormal = - normal;\n\t#endif\n\t#ifdef DOUBLE_SIDED\n\t\tnormal = normal * faceDirection;\n\t#endif\n\tnormal = normalize( normalMatrix * normal );\n#elif defined( TANGENTSPACE_NORMALMAP )\n\tvec3 mapN = texture2D( normalMap, vUv ).xyz * 2.0 - 1.0;\n\tmapN.xy *= normalScale;\n\t#ifdef USE_TANGENT\n\t\tnormal = normalize( vTBN * mapN );\n\t#else\n\t\tnormal = perturbNormal2Arb( - vViewPosition, normal, mapN, faceDirection );\n\t#endif\n#elif defined( USE_BUMPMAP )\n\tnormal = perturbNormalArb( - vViewPosition, normal, dHdxy_fwd(), faceDirection );\n#endif",normal_pars_fragment:"#ifndef FLAT_SHADED\n\tvarying vec3 vNormal;\n\t#ifdef USE_TANGENT\n\t\tvarying vec3 vTangent;\n\t\tvarying vec3 vBitangent;\n\t#endif\n#endif",normal_pars_vertex:"#ifndef FLAT_SHADED\n\tvarying vec3 vNormal;\n\t#ifdef USE_TANGENT\n\t\tvarying vec3 vTangent;\n\t\tvarying vec3 vBitangent;\n\t#endif\n#endif",normal_vertex:"#ifndef FLAT_SHADED\n\tvNormal = normalize( transformedNormal );\n\t#ifdef USE_TANGENT\n\t\tvTangent = normalize( transformedTangent );\n\t\tvBitangent = normalize( cross( vNormal, vTangent ) * tangent.w );\n\t#endif\n#endif",normalmap_pars_fragment:"#ifdef USE_NORMALMAP\n\tuniform sampler2D normalMap;\n\tuniform vec2 normalScale;\n#endif\n#ifdef OBJECTSPACE_NORMALMAP\n\tuniform mat3 normalMatrix;\n#endif\n#if ! defined ( USE_TANGENT ) && ( defined ( TANGENTSPACE_NORMALMAP ) || defined ( USE_CLEARCOAT_NORMALMAP ) )\n\tvec3 perturbNormal2Arb( vec3 eye_pos, vec3 surf_norm, vec3 mapN, float faceDirection ) {\n\t\tvec3 q0 = vec3( dFdx( eye_pos.x ), dFdx( eye_pos.y ), dFdx( eye_pos.z ) );\n\t\tvec3 q1 = vec3( dFdy( eye_pos.x ), dFdy( eye_pos.y ), dFdy( eye_pos.z ) );\n\t\tvec2 st0 = dFdx( vUv.st );\n\t\tvec2 st1 = dFdy( vUv.st );\n\t\tvec3 N = surf_norm;\n\t\tvec3 q1perp = cross( q1, N );\n\t\tvec3 q0perp = cross( N, q0 );\n\t\tvec3 T = q1perp * st0.x + q0perp * st1.x;\n\t\tvec3 B = q1perp * st0.y + q0perp * st1.y;\n\t\tfloat det = max( dot( T, T ), dot( B, B ) );\n\t\tfloat scale = ( det == 0.0 ) ? 0.0 : faceDirection * inversesqrt( det );\n\t\treturn normalize( T * ( mapN.x * scale ) + B * ( mapN.y * scale ) + N * mapN.z );\n\t}\n#endif",clearcoat_normal_fragment_begin:"#ifdef USE_CLEARCOAT\n\tvec3 clearcoatNormal = geometryNormal;\n#endif",clearcoat_normal_fragment_maps:"#ifdef USE_CLEARCOAT_NORMALMAP\n\tvec3 clearcoatMapN = texture2D( clearcoatNormalMap, vUv ).xyz * 2.0 - 1.0;\n\tclearcoatMapN.xy *= clearcoatNormalScale;\n\t#ifdef USE_TANGENT\n\t\tclearcoatNormal = normalize( vTBN * clearcoatMapN );\n\t#else\n\t\tclearcoatNormal = perturbNormal2Arb( - vViewPosition, clearcoatNormal, clearcoatMapN, faceDirection );\n\t#endif\n#endif",clearcoat_pars_fragment:"#ifdef USE_CLEARCOATMAP\n\tuniform sampler2D clearcoatMap;\n#endif\n#ifdef USE_CLEARCOAT_ROUGHNESSMAP\n\tuniform sampler2D clearcoatRoughnessMap;\n#endif\n#ifdef USE_CLEARCOAT_NORMALMAP\n\tuniform sampler2D clearcoatNormalMap;\n\tuniform vec2 clearcoatNormalScale;\n#endif",output_fragment:"#ifdef OPAQUE\ndiffuseColor.a = 1.0;\n#endif\n#ifdef USE_TRANSMISSION\ndiffuseColor.a *= transmissionAlpha + 0.1;\n#endif\ngl_FragColor = vec4( outgoingLight, diffuseColor.a );",packing:"vec3 packNormalToRGB( const in vec3 normal ) {\n\treturn normalize( normal ) * 0.5 + 0.5;\n}\nvec3 unpackRGBToNormal( const in vec3 rgb ) {\n\treturn 2.0 * rgb.xyz - 1.0;\n}\nconst float PackUpscale = 256. / 255.;const float UnpackDownscale = 255. / 256.;\nconst vec3 PackFactors = vec3( 256. * 256. * 256., 256. * 256., 256. );\nconst vec4 UnpackFactors = UnpackDownscale / vec4( PackFactors, 1. );\nconst float ShiftRight8 = 1. / 256.;\nvec4 packDepthToRGBA( const in float v ) {\n\tvec4 r = vec4( fract( v * PackFactors ), v );\n\tr.yzw -= r.xyz * ShiftRight8;\treturn r * PackUpscale;\n}\nfloat unpackRGBAToDepth( const in vec4 v ) {\n\treturn dot( v, UnpackFactors );\n}\nvec4 pack2HalfToRGBA( vec2 v ) {\n\tvec4 r = vec4( v.x, fract( v.x * 255.0 ), v.y, fract( v.y * 255.0 ) );\n\treturn vec4( r.x - r.y / 255.0, r.y, r.z - r.w / 255.0, r.w );\n}\nvec2 unpackRGBATo2Half( vec4 v ) {\n\treturn vec2( v.x + ( v.y / 255.0 ), v.z + ( v.w / 255.0 ) );\n}\nfloat viewZToOrthographicDepth( const in float viewZ, const in float near, const in float far ) {\n\treturn ( viewZ + near ) / ( near - far );\n}\nfloat orthographicDepthToViewZ( const in float linearClipZ, const in float near, const in float far ) {\n\treturn linearClipZ * ( near - far ) - near;\n}\nfloat viewZToPerspectiveDepth( const in float viewZ, const in float near, const in float far ) {\n\treturn ( ( near + viewZ ) * far ) / ( ( far - near ) * viewZ );\n}\nfloat perspectiveDepthToViewZ( const in float invClipZ, const in float near, const in float far ) {\n\treturn ( near * far ) / ( ( far - near ) * invClipZ - far );\n}",premultiplied_alpha_fragment:"#ifdef PREMULTIPLIED_ALPHA\n\tgl_FragColor.rgb *= gl_FragColor.a;\n#endif",project_vertex:"vec4 mvPosition = vec4( transformed, 1.0 );\n#ifdef USE_INSTANCING\n\tmvPosition = instanceMatrix * mvPosition;\n#endif\nmvPosition = modelViewMatrix * mvPosition;\ngl_Position = projectionMatrix * mvPosition;",dithering_fragment:"#ifdef DITHERING\n\tgl_FragColor.rgb = dithering( gl_FragColor.rgb );\n#endif",dithering_pars_fragment:"#ifdef DITHERING\n\tvec3 dithering( vec3 color ) {\n\t\tfloat grid_position = rand( gl_FragCoord.xy );\n\t\tvec3 dither_shift_RGB = vec3( 0.25 / 255.0, -0.25 / 255.0, 0.25 / 255.0 );\n\t\tdither_shift_RGB = mix( 2.0 * dither_shift_RGB, -2.0 * dither_shift_RGB, grid_position );\n\t\treturn color + dither_shift_RGB;\n\t}\n#endif",roughnessmap_fragment:"float roughnessFactor = roughness;\n#ifdef USE_ROUGHNESSMAP\n\tvec4 texelRoughness = texture2D( roughnessMap, vUv );\n\troughnessFactor *= texelRoughness.g;\n#endif",roughnessmap_pars_fragment:"#ifdef USE_ROUGHNESSMAP\n\tuniform sampler2D roughnessMap;\n#endif",shadowmap_pars_fragment:"#ifdef USE_SHADOWMAP\n\t#if NUM_DIR_LIGHT_SHADOWS > 0\n\t\tuniform sampler2D directionalShadowMap[ NUM_DIR_LIGHT_SHADOWS ];\n\t\tvarying vec4 vDirectionalShadowCoord[ NUM_DIR_LIGHT_SHADOWS ];\n\t\tstruct DirectionalLightShadow {\n\t\t\tfloat shadowBias;\n\t\t\tfloat shadowNormalBias;\n\t\t\tfloat shadowRadius;\n\t\t\tvec2 shadowMapSize;\n\t\t};\n\t\tuniform DirectionalLightShadow directionalLightShadows[ NUM_DIR_LIGHT_SHADOWS ];\n\t#endif\n\t#if NUM_SPOT_LIGHT_SHADOWS > 0\n\t\tuniform sampler2D spotShadowMap[ NUM_SPOT_LIGHT_SHADOWS ];\n\t\tvarying vec4 vSpotShadowCoord[ NUM_SPOT_LIGHT_SHADOWS ];\n\t\tstruct SpotLightShadow {\n\t\t\tfloat shadowBias;\n\t\t\tfloat shadowNormalBias;\n\t\t\tfloat shadowRadius;\n\t\t\tvec2 shadowMapSize;\n\t\t};\n\t\tuniform SpotLightShadow spotLightShadows[ NUM_SPOT_LIGHT_SHADOWS ];\n\t#endif\n\t#if NUM_POINT_LIGHT_SHADOWS > 0\n\t\tuniform sampler2D pointShadowMap[ NUM_POINT_LIGHT_SHADOWS ];\n\t\tvarying vec4 vPointShadowCoord[ NUM_POINT_LIGHT_SHADOWS ];\n\t\tstruct PointLightShadow {\n\t\t\tfloat shadowBias;\n\t\t\tfloat shadowNormalBias;\n\t\t\tfloat shadowRadius;\n\t\t\tvec2 shadowMapSize;\n\t\t\tfloat shadowCameraNear;\n\t\t\tfloat shadowCameraFar;\n\t\t};\n\t\tuniform PointLightShadow pointLightShadows[ NUM_POINT_LIGHT_SHADOWS ];\n\t#endif\n\tfloat texture2DCompare( sampler2D depths, vec2 uv, float compare ) {\n\t\treturn step( compare, unpackRGBAToDepth( texture2D( depths, uv ) ) );\n\t}\n\tvec2 texture2DDistribution( sampler2D shadow, vec2 uv ) {\n\t\treturn unpackRGBATo2Half( texture2D( shadow, uv ) );\n\t}\n\tfloat VSMShadow (sampler2D shadow, vec2 uv, float compare ){\n\t\tfloat occlusion = 1.0;\n\t\tvec2 distribution = texture2DDistribution( shadow, uv );\n\t\tfloat hard_shadow = step( compare , distribution.x );\n\t\tif (hard_shadow != 1.0 ) {\n\t\t\tfloat distance = compare - distribution.x ;\n\t\t\tfloat variance = max( 0.00000, distribution.y * distribution.y );\n\t\t\tfloat softness_probability = variance / (variance + distance * distance );\t\t\tsoftness_probability = clamp( ( softness_probability - 0.3 ) / ( 0.95 - 0.3 ), 0.0, 1.0 );\t\t\tocclusion = clamp( max( hard_shadow, softness_probability ), 0.0, 1.0 );\n\t\t}\n\t\treturn occlusion;\n\t}\n\tfloat getShadow( sampler2D shadowMap, vec2 shadowMapSize, float shadowBias, float shadowRadius, vec4 shadowCoord ) {\n\t\tfloat shadow = 1.0;\n\t\tshadowCoord.xyz /= shadowCoord.w;\n\t\tshadowCoord.z += shadowBias;\n\t\tbvec4 inFrustumVec = bvec4 ( shadowCoord.x >= 0.0, shadowCoord.x <= 1.0, shadowCoord.y >= 0.0, shadowCoord.y <= 1.0 );\n\t\tbool inFrustum = all( inFrustumVec );\n\t\tbvec2 frustumTestVec = bvec2( inFrustum, shadowCoord.z <= 1.0 );\n\t\tbool frustumTest = all( frustumTestVec );\n\t\tif ( frustumTest ) {\n\t\t#if defined( SHADOWMAP_TYPE_PCF )\n\t\t\tvec2 texelSize = vec2( 1.0 ) / shadowMapSize;\n\t\t\tfloat dx0 = - texelSize.x * shadowRadius;\n\t\t\tfloat dy0 = - texelSize.y * shadowRadius;\n\t\t\tfloat dx1 = + texelSize.x * shadowRadius;\n\t\t\tfloat dy1 = + texelSize.y * shadowRadius;\n\t\t\tfloat dx2 = dx0 / 2.0;\n\t\t\tfloat dy2 = dy0 / 2.0;\n\t\t\tfloat dx3 = dx1 / 2.0;\n\t\t\tfloat dy3 = dy1 / 2.0;\n\t\t\tshadow = (\n\t\t\t\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( dx0, dy0 ), shadowCoord.z ) +\n\t\t\t\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( 0.0, dy0 ), shadowCoord.z ) +\n\t\t\t\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( dx1, dy0 ), shadowCoord.z ) +\n\t\t\t\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( dx2, dy2 ), shadowCoord.z ) +\n\t\t\t\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( 0.0, dy2 ), shadowCoord.z ) +\n\t\t\t\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( dx3, dy2 ), shadowCoord.z ) +\n\t\t\t\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( dx0, 0.0 ), shadowCoord.z ) +\n\t\t\t\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( dx2, 0.0 ), shadowCoord.z ) +\n\t\t\t\ttexture2DCompare( shadowMap, shadowCoord.xy, shadowCoord.z ) +\n\t\t\t\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( dx3, 0.0 ), shadowCoord.z ) +\n\t\t\t\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( dx1, 0.0 ), shadowCoord.z ) +\n\t\t\t\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( dx2, dy3 ), shadowCoord.z ) +\n\t\t\t\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( 0.0, dy3 ), shadowCoord.z ) +\n\t\t\t\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( dx3, dy3 ), shadowCoord.z ) +\n\t\t\t\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( dx0, dy1 ), shadowCoord.z ) +\n\t\t\t\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( 0.0, dy1 ), shadowCoord.z ) +\n\t\t\t\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( dx1, dy1 ), shadowCoord.z )\n\t\t\t) * ( 1.0 / 17.0 );\n\t\t#elif defined( SHADOWMAP_TYPE_PCF_SOFT )\n\t\t\tvec2 texelSize = vec2( 1.0 ) / shadowMapSize;\n\t\t\tfloat dx = texelSize.x;\n\t\t\tfloat dy = texelSize.y;\n\t\t\tvec2 uv = shadowCoord.xy;\n\t\t\tvec2 f = fract( uv * shadowMapSize + 0.5 );\n\t\t\tuv -= f * texelSize;\n\t\t\tshadow = (\n\t\t\t\ttexture2DCompare( shadowMap, uv, shadowCoord.z ) +\n\t\t\t\ttexture2DCompare( shadowMap, uv + vec2( dx, 0.0 ), shadowCoord.z ) +\n\t\t\t\ttexture2DCompare( shadowMap, uv + vec2( 0.0, dy ), shadowCoord.z ) +\n\t\t\t\ttexture2DCompare( shadowMap, uv + texelSize, shadowCoord.z ) +\n\t\t\t\tmix( texture2DCompare( shadowMap, uv + vec2( -dx, 0.0 ), shadowCoord.z ), \n\t\t\t\t\t texture2DCompare( shadowMap, uv + vec2( 2.0 * dx, 0.0 ), shadowCoord.z ),\n\t\t\t\t\t f.x ) +\n\t\t\t\tmix( texture2DCompare( shadowMap, uv + vec2( -dx, dy ), shadowCoord.z ), \n\t\t\t\t\t texture2DCompare( shadowMap, uv + vec2( 2.0 * dx, dy ), shadowCoord.z ),\n\t\t\t\t\t f.x ) +\n\t\t\t\tmix( texture2DCompare( shadowMap, uv + vec2( 0.0, -dy ), shadowCoord.z ), \n\t\t\t\t\t texture2DCompare( shadowMap, uv + vec2( 0.0, 2.0 * dy ), shadowCoord.z ),\n\t\t\t\t\t f.y ) +\n\t\t\t\tmix( texture2DCompare( shadowMap, uv + vec2( dx, -dy ), shadowCoord.z ), \n\t\t\t\t\t texture2DCompare( shadowMap, uv + vec2( dx, 2.0 * dy ), shadowCoord.z ),\n\t\t\t\t\t f.y ) +\n\t\t\t\tmix( mix( texture2DCompare( shadowMap, uv + vec2( -dx, -dy ), shadowCoord.z ), \n\t\t\t\t\t\t\ttexture2DCompare( shadowMap, uv + vec2( 2.0 * dx, -dy ), shadowCoord.z ),\n\t\t\t\t\t\t\tf.x ),\n\t\t\t\t\t mix( texture2DCompare( shadowMap, uv + vec2( -dx, 2.0 * dy ), shadowCoord.z ), \n\t\t\t\t\t\t\ttexture2DCompare( shadowMap, uv + vec2( 2.0 * dx, 2.0 * dy ), shadowCoord.z ),\n\t\t\t\t\t\t\tf.x ),\n\t\t\t\t\t f.y )\n\t\t\t) * ( 1.0 / 9.0 );\n\t\t#elif defined( SHADOWMAP_TYPE_VSM )\n\t\t\tshadow = VSMShadow( shadowMap, shadowCoord.xy, shadowCoord.z );\n\t\t#else\n\t\t\tshadow = texture2DCompare( shadowMap, shadowCoord.xy, shadowCoord.z );\n\t\t#endif\n\t\t}\n\t\treturn shadow;\n\t}\n\tvec2 cubeToUV( vec3 v, float texelSizeY ) {\n\t\tvec3 absV = abs( v );\n\t\tfloat scaleToCube = 1.0 / max( absV.x, max( absV.y, absV.z ) );\n\t\tabsV *= scaleToCube;\n\t\tv *= scaleToCube * ( 1.0 - 2.0 * texelSizeY );\n\t\tvec2 planar = v.xy;\n\t\tfloat almostATexel = 1.5 * texelSizeY;\n\t\tfloat almostOne = 1.0 - almostATexel;\n\t\tif ( absV.z >= almostOne ) {\n\t\t\tif ( v.z > 0.0 )\n\t\t\t\tplanar.x = 4.0 - v.x;\n\t\t} else if ( absV.x >= almostOne ) {\n\t\t\tfloat signX = sign( v.x );\n\t\t\tplanar.x = v.z * signX + 2.0 * signX;\n\t\t} else if ( absV.y >= almostOne ) {\n\t\t\tfloat signY = sign( v.y );\n\t\t\tplanar.x = v.x + 2.0 * signY + 2.0;\n\t\t\tplanar.y = v.z * signY - 2.0;\n\t\t}\n\t\treturn vec2( 0.125, 0.25 ) * planar + vec2( 0.375, 0.75 );\n\t}\n\tfloat getPointShadow( sampler2D shadowMap, vec2 shadowMapSize, float shadowBias, float shadowRadius, vec4 shadowCoord, float shadowCameraNear, float shadowCameraFar ) {\n\t\tvec2 texelSize = vec2( 1.0 ) / ( shadowMapSize * vec2( 4.0, 2.0 ) );\n\t\tvec3 lightToPosition = shadowCoord.xyz;\n\t\tfloat dp = ( length( lightToPosition ) - shadowCameraNear ) / ( shadowCameraFar - shadowCameraNear );\t\tdp += shadowBias;\n\t\tvec3 bd3D = normalize( lightToPosition );\n\t\t#if defined( SHADOWMAP_TYPE_PCF ) || defined( SHADOWMAP_TYPE_PCF_SOFT ) || defined( SHADOWMAP_TYPE_VSM )\n\t\t\tvec2 offset = vec2( - 1, 1 ) * shadowRadius * texelSize.y;\n\t\t\treturn (\n\t\t\t\ttexture2DCompare( shadowMap, cubeToUV( bd3D + offset.xyy, texelSize.y ), dp ) +\n\t\t\t\ttexture2DCompare( shadowMap, cubeToUV( bd3D + offset.yyy, texelSize.y ), dp ) +\n\t\t\t\ttexture2DCompare( shadowMap, cubeToUV( bd3D + offset.xyx, texelSize.y ), dp ) +\n\t\t\t\ttexture2DCompare( shadowMap, cubeToUV( bd3D + offset.yyx, texelSize.y ), dp ) +\n\t\t\t\ttexture2DCompare( shadowMap, cubeToUV( bd3D, texelSize.y ), dp ) +\n\t\t\t\ttexture2DCompare( shadowMap, cubeToUV( bd3D + offset.xxy, texelSize.y ), dp ) +\n\t\t\t\ttexture2DCompare( shadowMap, cubeToUV( bd3D + offset.yxy, texelSize.y ), dp ) +\n\t\t\t\ttexture2DCompare( shadowMap, cubeToUV( bd3D + offset.xxx, texelSize.y ), dp ) +\n\t\t\t\ttexture2DCompare( shadowMap, cubeToUV( bd3D + offset.yxx, texelSize.y ), dp )\n\t\t\t) * ( 1.0 / 9.0 );\n\t\t#else\n\t\t\treturn texture2DCompare( shadowMap, cubeToUV( bd3D, texelSize.y ), dp );\n\t\t#endif\n\t}\n#endif",shadowmap_pars_vertex:"#ifdef USE_SHADOWMAP\n\t#if NUM_DIR_LIGHT_SHADOWS > 0\n\t\tuniform mat4 directionalShadowMatrix[ NUM_DIR_LIGHT_SHADOWS ];\n\t\tvarying vec4 vDirectionalShadowCoord[ NUM_DIR_LIGHT_SHADOWS ];\n\t\tstruct DirectionalLightShadow {\n\t\t\tfloat shadowBias;\n\t\t\tfloat shadowNormalBias;\n\t\t\tfloat shadowRadius;\n\t\t\tvec2 shadowMapSize;\n\t\t};\n\t\tuniform DirectionalLightShadow directionalLightShadows[ NUM_DIR_LIGHT_SHADOWS ];\n\t#endif\n\t#if NUM_SPOT_LIGHT_SHADOWS > 0\n\t\tuniform mat4 spotShadowMatrix[ NUM_SPOT_LIGHT_SHADOWS ];\n\t\tvarying vec4 vSpotShadowCoord[ NUM_SPOT_LIGHT_SHADOWS ];\n\t\tstruct SpotLightShadow {\n\t\t\tfloat shadowBias;\n\t\t\tfloat shadowNormalBias;\n\t\t\tfloat shadowRadius;\n\t\t\tvec2 shadowMapSize;\n\t\t};\n\t\tuniform SpotLightShadow spotLightShadows[ NUM_SPOT_LIGHT_SHADOWS ];\n\t#endif\n\t#if NUM_POINT_LIGHT_SHADOWS > 0\n\t\tuniform mat4 pointShadowMatrix[ NUM_POINT_LIGHT_SHADOWS ];\n\t\tvarying vec4 vPointShadowCoord[ NUM_POINT_LIGHT_SHADOWS ];\n\t\tstruct PointLightShadow {\n\t\t\tfloat shadowBias;\n\t\t\tfloat shadowNormalBias;\n\t\t\tfloat shadowRadius;\n\t\t\tvec2 shadowMapSize;\n\t\t\tfloat shadowCameraNear;\n\t\t\tfloat shadowCameraFar;\n\t\t};\n\t\tuniform PointLightShadow pointLightShadows[ NUM_POINT_LIGHT_SHADOWS ];\n\t#endif\n#endif",shadowmap_vertex:"#ifdef USE_SHADOWMAP\n\t#if NUM_DIR_LIGHT_SHADOWS > 0 || NUM_SPOT_LIGHT_SHADOWS > 0 || NUM_POINT_LIGHT_SHADOWS > 0\n\t\tvec3 shadowWorldNormal = inverseTransformDirection( transformedNormal, viewMatrix );\n\t\tvec4 shadowWorldPosition;\n\t#endif\n\t#if NUM_DIR_LIGHT_SHADOWS > 0\n\t#pragma unroll_loop_start\n\tfor ( int i = 0; i < NUM_DIR_LIGHT_SHADOWS; i ++ ) {\n\t\tshadowWorldPosition = worldPosition + vec4( shadowWorldNormal * directionalLightShadows[ i ].shadowNormalBias, 0 );\n\t\tvDirectionalShadowCoord[ i ] = directionalShadowMatrix[ i ] * shadowWorldPosition;\n\t}\n\t#pragma unroll_loop_end\n\t#endif\n\t#if NUM_SPOT_LIGHT_SHADOWS > 0\n\t#pragma unroll_loop_start\n\tfor ( int i = 0; i < NUM_SPOT_LIGHT_SHADOWS; i ++ ) {\n\t\tshadowWorldPosition = worldPosition + vec4( shadowWorldNormal * spotLightShadows[ i ].shadowNormalBias, 0 );\n\t\tvSpotShadowCoord[ i ] = spotShadowMatrix[ i ] * shadowWorldPosition;\n\t}\n\t#pragma unroll_loop_end\n\t#endif\n\t#if NUM_POINT_LIGHT_SHADOWS > 0\n\t#pragma unroll_loop_start\n\tfor ( int i = 0; i < NUM_POINT_LIGHT_SHADOWS; i ++ ) {\n\t\tshadowWorldPosition = worldPosition + vec4( shadowWorldNormal * pointLightShadows[ i ].shadowNormalBias, 0 );\n\t\tvPointShadowCoord[ i ] = pointShadowMatrix[ i ] * shadowWorldPosition;\n\t}\n\t#pragma unroll_loop_end\n\t#endif\n#endif",shadowmask_pars_fragment:"float getShadowMask() {\n\tfloat shadow = 1.0;\n\t#ifdef USE_SHADOWMAP\n\t#if NUM_DIR_LIGHT_SHADOWS > 0\n\tDirectionalLightShadow directionalLight;\n\t#pragma unroll_loop_start\n\tfor ( int i = 0; i < NUM_DIR_LIGHT_SHADOWS; i ++ ) {\n\t\tdirectionalLight = directionalLightShadows[ i ];\n\t\tshadow *= receiveShadow ? getShadow( directionalShadowMap[ i ], directionalLight.shadowMapSize, directionalLight.shadowBias, directionalLight.shadowRadius, vDirectionalShadowCoord[ i ] ) : 1.0;\n\t}\n\t#pragma unroll_loop_end\n\t#endif\n\t#if NUM_SPOT_LIGHT_SHADOWS > 0\n\tSpotLightShadow spotLight;\n\t#pragma unroll_loop_start\n\tfor ( int i = 0; i < NUM_SPOT_LIGHT_SHADOWS; i ++ ) {\n\t\tspotLight = spotLightShadows[ i ];\n\t\tshadow *= receiveShadow ? getShadow( spotShadowMap[ i ], spotLight.shadowMapSize, spotLight.shadowBias, spotLight.shadowRadius, vSpotShadowCoord[ i ] ) : 1.0;\n\t}\n\t#pragma unroll_loop_end\n\t#endif\n\t#if NUM_POINT_LIGHT_SHADOWS > 0\n\tPointLightShadow pointLight;\n\t#pragma unroll_loop_start\n\tfor ( int i = 0; i < NUM_POINT_LIGHT_SHADOWS; i ++ ) {\n\t\tpointLight = pointLightShadows[ i ];\n\t\tshadow *= receiveShadow ? getPointShadow( pointShadowMap[ i ], pointLight.shadowMapSize, pointLight.shadowBias, pointLight.shadowRadius, vPointShadowCoord[ i ], pointLight.shadowCameraNear, pointLight.shadowCameraFar ) : 1.0;\n\t}\n\t#pragma unroll_loop_end\n\t#endif\n\t#endif\n\treturn shadow;\n}",skinbase_vertex:"#ifdef USE_SKINNING\n\tmat4 boneMatX = getBoneMatrix( skinIndex.x );\n\tmat4 boneMatY = getBoneMatrix( skinIndex.y );\n\tmat4 boneMatZ = getBoneMatrix( skinIndex.z );\n\tmat4 boneMatW = getBoneMatrix( skinIndex.w );\n#endif",skinning_pars_vertex:"#ifdef USE_SKINNING\n\tuniform mat4 bindMatrix;\n\tuniform mat4 bindMatrixInverse;\n\tuniform highp sampler2D boneTexture;\n\tuniform int boneTextureSize;\n\tmat4 getBoneMatrix( const in float i ) {\n\t\tfloat j = i * 4.0;\n\t\tfloat x = mod( j, float( boneTextureSize ) );\n\t\tfloat y = floor( j / float( boneTextureSize ) );\n\t\tfloat dx = 1.0 / float( boneTextureSize );\n\t\tfloat dy = 1.0 / float( boneTextureSize );\n\t\ty = dy * ( y + 0.5 );\n\t\tvec4 v1 = texture2D( boneTexture, vec2( dx * ( x + 0.5 ), y ) );\n\t\tvec4 v2 = texture2D( boneTexture, vec2( dx * ( x + 1.5 ), y ) );\n\t\tvec4 v3 = texture2D( boneTexture, vec2( dx * ( x + 2.5 ), y ) );\n\t\tvec4 v4 = texture2D( boneTexture, vec2( dx * ( x + 3.5 ), y ) );\n\t\tmat4 bone = mat4( v1, v2, v3, v4 );\n\t\treturn bone;\n\t}\n#endif",skinning_vertex:"#ifdef USE_SKINNING\n\tvec4 skinVertex = bindMatrix * vec4( transformed, 1.0 );\n\tvec4 skinned = vec4( 0.0 );\n\tskinned += boneMatX * skinVertex * skinWeight.x;\n\tskinned += boneMatY * skinVertex * skinWeight.y;\n\tskinned += boneMatZ * skinVertex * skinWeight.z;\n\tskinned += boneMatW * skinVertex * skinWeight.w;\n\ttransformed = ( bindMatrixInverse * skinned ).xyz;\n#endif",skinnormal_vertex:"#ifdef USE_SKINNING\n\tmat4 skinMatrix = mat4( 0.0 );\n\tskinMatrix += skinWeight.x * boneMatX;\n\tskinMatrix += skinWeight.y * boneMatY;\n\tskinMatrix += skinWeight.z * boneMatZ;\n\tskinMatrix += skinWeight.w * boneMatW;\n\tskinMatrix = bindMatrixInverse * skinMatrix * bindMatrix;\n\tobjectNormal = vec4( skinMatrix * vec4( objectNormal, 0.0 ) ).xyz;\n\t#ifdef USE_TANGENT\n\t\tobjectTangent = vec4( skinMatrix * vec4( objectTangent, 0.0 ) ).xyz;\n\t#endif\n#endif",specularmap_fragment:"float specularStrength;\n#ifdef USE_SPECULARMAP\n\tvec4 texelSpecular = texture2D( specularMap, vUv );\n\tspecularStrength = texelSpecular.r;\n#else\n\tspecularStrength = 1.0;\n#endif",specularmap_pars_fragment:"#ifdef USE_SPECULARMAP\n\tuniform sampler2D specularMap;\n#endif",tonemapping_fragment:"#if defined( TONE_MAPPING )\n\tgl_FragColor.rgb = toneMapping( gl_FragColor.rgb );\n#endif",tonemapping_pars_fragment:"#ifndef saturate\n#define saturate( a ) clamp( a, 0.0, 1.0 )\n#endif\nuniform float toneMappingExposure;\nvec3 LinearToneMapping( vec3 color ) {\n\treturn toneMappingExposure * color;\n}\nvec3 ReinhardToneMapping( vec3 color ) {\n\tcolor *= toneMappingExposure;\n\treturn saturate( color / ( vec3( 1.0 ) + color ) );\n}\nvec3 OptimizedCineonToneMapping( vec3 color ) {\n\tcolor *= toneMappingExposure;\n\tcolor = max( vec3( 0.0 ), color - 0.004 );\n\treturn pow( ( color * ( 6.2 * color + 0.5 ) ) / ( color * ( 6.2 * color + 1.7 ) + 0.06 ), vec3( 2.2 ) );\n}\nvec3 RRTAndODTFit( vec3 v ) {\n\tvec3 a = v * ( v + 0.0245786 ) - 0.000090537;\n\tvec3 b = v * ( 0.983729 * v + 0.4329510 ) + 0.238081;\n\treturn a / b;\n}\nvec3 ACESFilmicToneMapping( vec3 color ) {\n\tconst mat3 ACESInputMat = mat3(\n\t\tvec3( 0.59719, 0.07600, 0.02840 ),\t\tvec3( 0.35458, 0.90834, 0.13383 ),\n\t\tvec3( 0.04823, 0.01566, 0.83777 )\n\t);\n\tconst mat3 ACESOutputMat = mat3(\n\t\tvec3(\t1.60475, -0.10208, -0.00327 ),\t\tvec3( -0.53108,\t1.10813, -0.07276 ),\n\t\tvec3( -0.07367, -0.00605,\t1.07602 )\n\t);\n\tcolor *= toneMappingExposure / 0.6;\n\tcolor = ACESInputMat * color;\n\tcolor = RRTAndODTFit( color );\n\tcolor = ACESOutputMat * color;\n\treturn saturate( color );\n}\nvec3 CustomToneMapping( vec3 color ) { return color; }",transmission_fragment:"#ifdef USE_TRANSMISSION\n\tfloat transmissionAlpha = 1.0;\n\tfloat transmissionFactor = transmission;\n\tfloat thicknessFactor = thickness;\n\t#ifdef USE_TRANSMISSIONMAP\n\t\ttransmissionFactor *= texture2D( transmissionMap, vUv ).r;\n\t#endif\n\t#ifdef USE_THICKNESSMAP\n\t\tthicknessFactor *= texture2D( thicknessMap, vUv ).g;\n\t#endif\n\tvec3 pos = vWorldPosition;\n\tvec3 v = normalize( cameraPosition - pos );\n\tvec3 n = inverseTransformDirection( normal, viewMatrix );\n\tvec4 transmission = getIBLVolumeRefraction(\n\t\tn, v, roughnessFactor, material.diffuseColor, material.specularColor, material.specularF90,\n\t\tpos, modelMatrix, viewMatrix, projectionMatrix, ior, thicknessFactor,\n\t\tattenuationColor, attenuationDistance );\n\ttotalDiffuse = mix( totalDiffuse, transmission.rgb, transmissionFactor );\n\ttransmissionAlpha = mix( transmissionAlpha, transmission.a, transmissionFactor );\n#endif",transmission_pars_fragment:"#ifdef USE_TRANSMISSION\n\tuniform float transmission;\n\tuniform float thickness;\n\tuniform float attenuationDistance;\n\tuniform vec3 attenuationColor;\n\t#ifdef USE_TRANSMISSIONMAP\n\t\tuniform sampler2D transmissionMap;\n\t#endif\n\t#ifdef USE_THICKNESSMAP\n\t\tuniform sampler2D thicknessMap;\n\t#endif\n\tuniform vec2 transmissionSamplerSize;\n\tuniform sampler2D transmissionSamplerMap;\n\tuniform mat4 modelMatrix;\n\tuniform mat4 projectionMatrix;\n\tvarying vec3 vWorldPosition;\n\tvec3 getVolumeTransmissionRay( const in vec3 n, const in vec3 v, const in float thickness, const in float ior, const in mat4 modelMatrix ) {\n\t\tvec3 refractionVector = refract( - v, normalize( n ), 1.0 / ior );\n\t\tvec3 modelScale;\n\t\tmodelScale.x = length( vec3( modelMatrix[ 0 ].xyz ) );\n\t\tmodelScale.y = length( vec3( modelMatrix[ 1 ].xyz ) );\n\t\tmodelScale.z = length( vec3( modelMatrix[ 2 ].xyz ) );\n\t\treturn normalize( refractionVector ) * thickness * modelScale;\n\t}\n\tfloat applyIorToRoughness( const in float roughness, const in float ior ) {\n\t\treturn roughness * clamp( ior * 2.0 - 2.0, 0.0, 1.0 );\n\t}\n\tvec4 getTransmissionSample( const in vec2 fragCoord, const in float roughness, const in float ior ) {\n\t\tfloat framebufferLod = log2( transmissionSamplerSize.x ) * applyIorToRoughness( roughness, ior );\n\t\t#ifdef texture2DLodEXT\n\t\t\treturn texture2DLodEXT( transmissionSamplerMap, fragCoord.xy, framebufferLod );\n\t\t#else\n\t\t\treturn texture2D( transmissionSamplerMap, fragCoord.xy, framebufferLod );\n\t\t#endif\n\t}\n\tvec3 applyVolumeAttenuation( const in vec3 radiance, const in float transmissionDistance, const in vec3 attenuationColor, const in float attenuationDistance ) {\n\t\tif ( attenuationDistance == 0.0 ) {\n\t\t\treturn radiance;\n\t\t} else {\n\t\t\tvec3 attenuationCoefficient = -log( attenuationColor ) / attenuationDistance;\n\t\t\tvec3 transmittance = exp( - attenuationCoefficient * transmissionDistance );\t\t\treturn transmittance * radiance;\n\t\t}\n\t}\n\tvec4 getIBLVolumeRefraction( const in vec3 n, const in vec3 v, const in float roughness, const in vec3 diffuseColor,\n\t\tconst in vec3 specularColor, const in float specularF90, const in vec3 position, const in mat4 modelMatrix,\n\t\tconst in mat4 viewMatrix, const in mat4 projMatrix, const in float ior, const in float thickness,\n\t\tconst in vec3 attenuationColor, const in float attenuationDistance ) {\n\t\tvec3 transmissionRay = getVolumeTransmissionRay( n, v, thickness, ior, modelMatrix );\n\t\tvec3 refractedRayExit = position + transmissionRay;\n\t\tvec4 ndcPos = projMatrix * viewMatrix * vec4( refractedRayExit, 1.0 );\n\t\tvec2 refractionCoords = ndcPos.xy / ndcPos.w;\n\t\trefractionCoords += 1.0;\n\t\trefractionCoords /= 2.0;\n\t\tvec4 transmittedLight = getTransmissionSample( refractionCoords, roughness, ior );\n\t\tvec3 attenuatedColor = applyVolumeAttenuation( transmittedLight.rgb, length( transmissionRay ), attenuationColor, attenuationDistance );\n\t\tvec3 F = EnvironmentBRDF( n, v, specularColor, specularF90, roughness );\n\t\treturn vec4( ( 1.0 - F ) * attenuatedColor * diffuseColor, transmittedLight.a );\n\t}\n#endif",uv_pars_fragment:"#if ( defined( USE_UV ) && ! defined( UVS_VERTEX_ONLY ) )\n\tvarying vec2 vUv;\n#endif",uv_pars_vertex:"#ifdef USE_UV\n\t#ifdef UVS_VERTEX_ONLY\n\t\tvec2 vUv;\n\t#else\n\t\tvarying vec2 vUv;\n\t#endif\n\tuniform mat3 uvTransform;\n#endif",uv_vertex:"#ifdef USE_UV\n\tvUv = ( uvTransform * vec3( uv, 1 ) ).xy;\n#endif",uv2_pars_fragment:"#if defined( USE_LIGHTMAP ) || defined( USE_AOMAP )\n\tvarying vec2 vUv2;\n#endif",uv2_pars_vertex:"#if defined( USE_LIGHTMAP ) || defined( USE_AOMAP )\n\tattribute vec2 uv2;\n\tvarying vec2 vUv2;\n\tuniform mat3 uv2Transform;\n#endif",uv2_vertex:"#if defined( USE_LIGHTMAP ) || defined( USE_AOMAP )\n\tvUv2 = ( uv2Transform * vec3( uv2, 1 ) ).xy;\n#endif",worldpos_vertex:"#if defined( USE_ENVMAP ) || defined( DISTANCE ) || defined ( USE_SHADOWMAP ) || defined ( USE_TRANSMISSION )\n\tvec4 worldPosition = vec4( transformed, 1.0 );\n\t#ifdef USE_INSTANCING\n\t\tworldPosition = instanceMatrix * worldPosition;\n\t#endif\n\tworldPosition = modelMatrix * worldPosition;\n#endif",background_vert:"varying vec2 vUv;\nuniform mat3 uvTransform;\nvoid main() {\n\tvUv = ( uvTransform * vec3( uv, 1 ) ).xy;\n\tgl_Position = vec4( position.xy, 1.0, 1.0 );\n}",background_frag:"uniform sampler2D t2D;\nvarying vec2 vUv;\nvoid main() {\n\tgl_FragColor = texture2D( t2D, vUv );\n\t#ifdef DECODE_VIDEO_TEXTURE\n\t\tgl_FragColor = vec4( mix( pow( gl_FragColor.rgb * 0.9478672986 + vec3( 0.0521327014 ), vec3( 2.4 ) ), gl_FragColor.rgb * 0.0773993808, vec3( lessThanEqual( gl_FragColor.rgb, vec3( 0.04045 ) ) ) ), gl_FragColor.w );\n\t#endif\n\t#include \n\t#include \n}",cube_vert:"varying vec3 vWorldDirection;\n#include \nvoid main() {\n\tvWorldDirection = transformDirection( position, modelMatrix );\n\t#include \n\t#include \n\tgl_Position.z = gl_Position.w;\n}",cube_frag:"#include \nuniform float opacity;\nvarying vec3 vWorldDirection;\n#include \nvoid main() {\n\tvec3 vReflect = vWorldDirection;\n\t#include \n\tgl_FragColor = envColor;\n\tgl_FragColor.a *= opacity;\n\t#include \n\t#include \n}",depth_vert:"#include \n#include \n#include \n#include \n#include \n#include \n#include \nvarying vec2 vHighPrecisionZW;\nvoid main() {\n\t#include \n\t#include \n\t#ifdef USE_DISPLACEMENTMAP\n\t\t#include \n\t\t#include \n\t\t#include \n\t#endif\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\tvHighPrecisionZW = gl_Position.zw;\n}",depth_frag:"#if DEPTH_PACKING == 3200\n\tuniform float opacity;\n#endif\n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \nvarying vec2 vHighPrecisionZW;\nvoid main() {\n\t#include \n\tvec4 diffuseColor = vec4( 1.0 );\n\t#if DEPTH_PACKING == 3200\n\t\tdiffuseColor.a = opacity;\n\t#endif\n\t#include \n\t#include \n\t#include \n\t#include \n\tfloat fragCoordZ = 0.5 * vHighPrecisionZW[0] / vHighPrecisionZW[1] + 0.5;\n\t#if DEPTH_PACKING == 3200\n\t\tgl_FragColor = vec4( vec3( 1.0 - fragCoordZ ), opacity );\n\t#elif DEPTH_PACKING == 3201\n\t\tgl_FragColor = packDepthToRGBA( fragCoordZ );\n\t#endif\n}",distanceRGBA_vert:"#define DISTANCE\nvarying vec3 vWorldPosition;\n#include \n#include \n#include \n#include \n#include \n#include \nvoid main() {\n\t#include \n\t#include \n\t#ifdef USE_DISPLACEMENTMAP\n\t\t#include \n\t\t#include \n\t\t#include \n\t#endif\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\tvWorldPosition = worldPosition.xyz;\n}",distanceRGBA_frag:"#define DISTANCE\nuniform vec3 referencePosition;\nuniform float nearDistance;\nuniform float farDistance;\nvarying vec3 vWorldPosition;\n#include \n#include \n#include \n#include \n#include \n#include \n#include \nvoid main () {\n\t#include \n\tvec4 diffuseColor = vec4( 1.0 );\n\t#include \n\t#include \n\t#include \n\tfloat dist = length( vWorldPosition - referencePosition );\n\tdist = ( dist - nearDistance ) / ( farDistance - nearDistance );\n\tdist = saturate( dist );\n\tgl_FragColor = packDepthToRGBA( dist );\n}",equirect_vert:"varying vec3 vWorldDirection;\n#include \nvoid main() {\n\tvWorldDirection = transformDirection( position, modelMatrix );\n\t#include \n\t#include \n}",equirect_frag:"uniform sampler2D tEquirect;\nvarying vec3 vWorldDirection;\n#include \nvoid main() {\n\tvec3 direction = normalize( vWorldDirection );\n\tvec2 sampleUV = equirectUv( direction );\n\tgl_FragColor = texture2D( tEquirect, sampleUV );\n\t#include \n\t#include \n}",linedashed_vert:"uniform float scale;\nattribute float lineDistance;\nvarying float vLineDistance;\n#include \n#include \n#include \n#include \n#include \n#include \nvoid main() {\n\tvLineDistance = scale * lineDistance;\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n}",linedashed_frag:"uniform vec3 diffuse;\nuniform float opacity;\nuniform float dashSize;\nuniform float totalSize;\nvarying float vLineDistance;\n#include \n#include \n#include \n#include \n#include \nvoid main() {\n\t#include \n\tif ( mod( vLineDistance, totalSize ) > dashSize ) {\n\t\tdiscard;\n\t}\n\tvec3 outgoingLight = vec3( 0.0 );\n\tvec4 diffuseColor = vec4( diffuse, opacity );\n\t#include \n\t#include \n\toutgoingLight = diffuseColor.rgb;\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n}",meshbasic_vert:"#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \nvoid main() {\n\t#include \n\t#include \n\t#include \n\t#include \n\t#if defined ( USE_ENVMAP ) || defined ( USE_SKINNING )\n\t\t#include \n\t\t#include \n\t\t#include \n\t\t#include \n\t\t#include \n\t#endif\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n}",meshbasic_frag:"uniform vec3 diffuse;\nuniform float opacity;\n#ifndef FLAT_SHADED\n\tvarying vec3 vNormal;\n#endif\n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \nvoid main() {\n\t#include \n\tvec4 diffuseColor = vec4( diffuse, opacity );\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\tReflectedLight reflectedLight = ReflectedLight( vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ) );\n\t#ifdef USE_LIGHTMAP\n\t\tvec4 lightMapTexel = texture2D( lightMap, vUv2 );\n\t\treflectedLight.indirectDiffuse += lightMapTexel.rgb * lightMapIntensity * RECIPROCAL_PI;\n\t#else\n\t\treflectedLight.indirectDiffuse += vec3( 1.0 );\n\t#endif\n\t#include \n\treflectedLight.indirectDiffuse *= diffuseColor.rgb;\n\tvec3 outgoingLight = reflectedLight.indirectDiffuse;\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n}",meshlambert_vert:"#define LAMBERT\nvarying vec3 vLightFront;\nvarying vec3 vIndirectFront;\n#ifdef DOUBLE_SIDED\n\tvarying vec3 vLightBack;\n\tvarying vec3 vIndirectBack;\n#endif\n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \nvoid main() {\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n}",meshlambert_frag:"uniform vec3 diffuse;\nuniform vec3 emissive;\nuniform float opacity;\nvarying vec3 vLightFront;\nvarying vec3 vIndirectFront;\n#ifdef DOUBLE_SIDED\n\tvarying vec3 vLightBack;\n\tvarying vec3 vIndirectBack;\n#endif\n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \nvoid main() {\n\t#include \n\tvec4 diffuseColor = vec4( diffuse, opacity );\n\tReflectedLight reflectedLight = ReflectedLight( vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ) );\n\tvec3 totalEmissiveRadiance = emissive;\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#ifdef DOUBLE_SIDED\n\t\treflectedLight.indirectDiffuse += ( gl_FrontFacing ) ? vIndirectFront : vIndirectBack;\n\t#else\n\t\treflectedLight.indirectDiffuse += vIndirectFront;\n\t#endif\n\t#include \n\treflectedLight.indirectDiffuse *= BRDF_Lambert( diffuseColor.rgb );\n\t#ifdef DOUBLE_SIDED\n\t\treflectedLight.directDiffuse = ( gl_FrontFacing ) ? vLightFront : vLightBack;\n\t#else\n\t\treflectedLight.directDiffuse = vLightFront;\n\t#endif\n\treflectedLight.directDiffuse *= BRDF_Lambert( diffuseColor.rgb ) * getShadowMask();\n\t#include \n\tvec3 outgoingLight = reflectedLight.directDiffuse + reflectedLight.indirectDiffuse + totalEmissiveRadiance;\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n}",meshmatcap_vert:"#define MATCAP\nvarying vec3 vViewPosition;\n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \nvoid main() {\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\tvViewPosition = - mvPosition.xyz;\n}",meshmatcap_frag:"#define MATCAP\nuniform vec3 diffuse;\nuniform float opacity;\nuniform sampler2D matcap;\nvarying vec3 vViewPosition;\n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \nvoid main() {\n\t#include \n\tvec4 diffuseColor = vec4( diffuse, opacity );\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\tvec3 viewDir = normalize( vViewPosition );\n\tvec3 x = normalize( vec3( viewDir.z, 0.0, - viewDir.x ) );\n\tvec3 y = cross( viewDir, x );\n\tvec2 uv = vec2( dot( x, normal ), dot( y, normal ) ) * 0.495 + 0.5;\n\t#ifdef USE_MATCAP\n\t\tvec4 matcapColor = texture2D( matcap, uv );\n\t#else\n\t\tvec4 matcapColor = vec4( vec3( mix( 0.2, 0.8, uv.y ) ), 1.0 );\n\t#endif\n\tvec3 outgoingLight = diffuseColor.rgb * matcapColor.rgb;\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n}",meshnormal_vert:"#define NORMAL\n#if defined( FLAT_SHADED ) || defined( USE_BUMPMAP ) || defined( TANGENTSPACE_NORMALMAP )\n\tvarying vec3 vViewPosition;\n#endif\n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \nvoid main() {\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n#if defined( FLAT_SHADED ) || defined( USE_BUMPMAP ) || defined( TANGENTSPACE_NORMALMAP )\n\tvViewPosition = - mvPosition.xyz;\n#endif\n}",meshnormal_frag:"#define NORMAL\nuniform float opacity;\n#if defined( FLAT_SHADED ) || defined( USE_BUMPMAP ) || defined( TANGENTSPACE_NORMALMAP )\n\tvarying vec3 vViewPosition;\n#endif\n#include \n#include \n#include \n#include \n#include \n#include \n#include \nvoid main() {\n\t#include \n\t#include \n\t#include \n\t#include \n\tgl_FragColor = vec4( packNormalToRGB( normal ), opacity );\n\t#ifdef OPAQUE\n\t\tgl_FragColor.a = 1.0;\n\t#endif\n}",meshphong_vert:"#define PHONG\nvarying vec3 vViewPosition;\n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \nvoid main() {\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\tvViewPosition = - mvPosition.xyz;\n\t#include \n\t#include \n\t#include \n\t#include \n}",meshphong_frag:"#define PHONG\nuniform vec3 diffuse;\nuniform vec3 emissive;\nuniform vec3 specular;\nuniform float shininess;\nuniform float opacity;\n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \nvoid main() {\n\t#include \n\tvec4 diffuseColor = vec4( diffuse, opacity );\n\tReflectedLight reflectedLight = ReflectedLight( vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ) );\n\tvec3 totalEmissiveRadiance = emissive;\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\tvec3 outgoingLight = reflectedLight.directDiffuse + reflectedLight.indirectDiffuse + reflectedLight.directSpecular + reflectedLight.indirectSpecular + totalEmissiveRadiance;\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n}",meshphysical_vert:"#define STANDARD\nvarying vec3 vViewPosition;\n#ifdef USE_TRANSMISSION\n\tvarying vec3 vWorldPosition;\n#endif\n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \nvoid main() {\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\tvViewPosition = - mvPosition.xyz;\n\t#include \n\t#include \n\t#include \n#ifdef USE_TRANSMISSION\n\tvWorldPosition = worldPosition.xyz;\n#endif\n}",meshphysical_frag:"#define STANDARD\n#ifdef PHYSICAL\n\t#define IOR\n\t#define SPECULAR\n#endif\nuniform vec3 diffuse;\nuniform vec3 emissive;\nuniform float roughness;\nuniform float metalness;\nuniform float opacity;\n#ifdef IOR\n\tuniform float ior;\n#endif\n#ifdef SPECULAR\n\tuniform float specularIntensity;\n\tuniform vec3 specularColor;\n\t#ifdef USE_SPECULARINTENSITYMAP\n\t\tuniform sampler2D specularIntensityMap;\n\t#endif\n\t#ifdef USE_SPECULARCOLORMAP\n\t\tuniform sampler2D specularColorMap;\n\t#endif\n#endif\n#ifdef USE_CLEARCOAT\n\tuniform float clearcoat;\n\tuniform float clearcoatRoughness;\n#endif\n#ifdef USE_SHEEN\n\tuniform vec3 sheenColor;\n\tuniform float sheenRoughness;\n\t#ifdef USE_SHEENCOLORMAP\n\t\tuniform sampler2D sheenColorMap;\n\t#endif\n\t#ifdef USE_SHEENROUGHNESSMAP\n\t\tuniform sampler2D sheenRoughnessMap;\n\t#endif\n#endif\nvarying vec3 vViewPosition;\n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \nvoid main() {\n\t#include \n\tvec4 diffuseColor = vec4( diffuse, opacity );\n\tReflectedLight reflectedLight = ReflectedLight( vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ) );\n\tvec3 totalEmissiveRadiance = emissive;\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\tvec3 totalDiffuse = reflectedLight.directDiffuse + reflectedLight.indirectDiffuse;\n\tvec3 totalSpecular = reflectedLight.directSpecular + reflectedLight.indirectSpecular;\n\t#include \n\tvec3 outgoingLight = totalDiffuse + totalSpecular + totalEmissiveRadiance;\n\t#ifdef USE_SHEEN\n\t\tfloat sheenEnergyComp = 1.0 - 0.157 * max3( material.sheenColor );\n\t\toutgoingLight = outgoingLight * sheenEnergyComp + sheenSpecular;\n\t#endif\n\t#ifdef USE_CLEARCOAT\n\t\tfloat dotNVcc = saturate( dot( geometry.clearcoatNormal, geometry.viewDir ) );\n\t\tvec3 Fcc = F_Schlick( material.clearcoatF0, material.clearcoatF90, dotNVcc );\n\t\toutgoingLight = outgoingLight * ( 1.0 - material.clearcoat * Fcc ) + clearcoatSpecular * material.clearcoat;\n\t#endif\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n}",meshtoon_vert:"#define TOON\nvarying vec3 vViewPosition;\n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \nvoid main() {\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\tvViewPosition = - mvPosition.xyz;\n\t#include \n\t#include \n\t#include \n}",meshtoon_frag:"#define TOON\nuniform vec3 diffuse;\nuniform vec3 emissive;\nuniform float opacity;\n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \nvoid main() {\n\t#include \n\tvec4 diffuseColor = vec4( diffuse, opacity );\n\tReflectedLight reflectedLight = ReflectedLight( vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ) );\n\tvec3 totalEmissiveRadiance = emissive;\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\tvec3 outgoingLight = reflectedLight.directDiffuse + reflectedLight.indirectDiffuse + totalEmissiveRadiance;\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n}",points_vert:"uniform float size;\nuniform float scale;\n#include \n#include \n#include \n#include \n#include \n#include \nvoid main() {\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\tgl_PointSize = size;\n\t#ifdef USE_SIZEATTENUATION\n\t\tbool isPerspective = isPerspectiveMatrix( projectionMatrix );\n\t\tif ( isPerspective ) gl_PointSize *= ( scale / - mvPosition.z );\n\t#endif\n\t#include \n\t#include \n\t#include \n\t#include \n}",points_frag:"uniform vec3 diffuse;\nuniform float opacity;\n#include \n#include \n#include \n#include \n#include \n#include \n#include \nvoid main() {\n\t#include \n\tvec3 outgoingLight = vec3( 0.0 );\n\tvec4 diffuseColor = vec4( diffuse, opacity );\n\t#include \n\t#include \n\t#include \n\t#include \n\toutgoingLight = diffuseColor.rgb;\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n}",shadow_vert:"#include \n#include \n#include \n#include \n#include \nvoid main() {\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n}",shadow_frag:"uniform vec3 color;\nuniform float opacity;\n#include \n#include \n#include \n#include \n#include \n#include \n#include \nvoid main() {\n\tgl_FragColor = vec4( color, opacity * ( 1.0 - getShadowMask() ) );\n\t#include \n\t#include \n\t#include \n}",sprite_vert:"uniform float rotation;\nuniform vec2 center;\n#include \n#include \n#include \n#include \n#include \nvoid main() {\n\t#include \n\tvec4 mvPosition = modelViewMatrix * vec4( 0.0, 0.0, 0.0, 1.0 );\n\tvec2 scale;\n\tscale.x = length( vec3( modelMatrix[ 0 ].x, modelMatrix[ 0 ].y, modelMatrix[ 0 ].z ) );\n\tscale.y = length( vec3( modelMatrix[ 1 ].x, modelMatrix[ 1 ].y, modelMatrix[ 1 ].z ) );\n\t#ifndef USE_SIZEATTENUATION\n\t\tbool isPerspective = isPerspectiveMatrix( projectionMatrix );\n\t\tif ( isPerspective ) scale *= - mvPosition.z;\n\t#endif\n\tvec2 alignedPosition = ( position.xy - ( center - vec2( 0.5 ) ) ) * scale;\n\tvec2 rotatedPosition;\n\trotatedPosition.x = cos( rotation ) * alignedPosition.x - sin( rotation ) * alignedPosition.y;\n\trotatedPosition.y = sin( rotation ) * alignedPosition.x + cos( rotation ) * alignedPosition.y;\n\tmvPosition.xy += rotatedPosition;\n\tgl_Position = projectionMatrix * mvPosition;\n\t#include \n\t#include \n\t#include \n}",sprite_frag:"uniform vec3 diffuse;\nuniform float opacity;\n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \nvoid main() {\n\t#include \n\tvec3 outgoingLight = vec3( 0.0 );\n\tvec4 diffuseColor = vec4( diffuse, opacity );\n\t#include \n\t#include \n\t#include \n\t#include \n\toutgoingLight = diffuseColor.rgb;\n\t#include \n\t#include \n\t#include \n\t#include \n}"},Pi={common:{diffuse:{value:new Wt(16777215)},opacity:{value:1},map:{value:null},uvTransform:{value:new Ct},uv2Transform:{value:new Ct},alphaMap:{value:null},alphaTest:{value:0}},specularmap:{specularMap:{value:null}},envmap:{envMap:{value:null},flipEnvMap:{value:-1},reflectivity:{value:1},ior:{value:1.5},refractionRatio:{value:.98}},aomap:{aoMap:{value:null},aoMapIntensity:{value:1}},lightmap:{lightMap:{value:null},lightMapIntensity:{value:1}},emissivemap:{emissiveMap:{value:null}},bumpmap:{bumpMap:{value:null},bumpScale:{value:1}},normalmap:{normalMap:{value:null},normalScale:{value:new Rt(1,1)}},displacementmap:{displacementMap:{value:null},displacementScale:{value:1},displacementBias:{value:0}},roughnessmap:{roughnessMap:{value:null}},metalnessmap:{metalnessMap:{value:null}},gradientmap:{gradientMap:{value:null}},fog:{fogDensity:{value:25e-5},fogNear:{value:1},fogFar:{value:2e3},fogColor:{value:new Wt(16777215)}},lights:{ambientLightColor:{value:[]},lightProbe:{value:[]},directionalLights:{value:[],properties:{direction:{},color:{}}},directionalLightShadows:{value:[],properties:{shadowBias:{},shadowNormalBias:{},shadowRadius:{},shadowMapSize:{}}},directionalShadowMap:{value:[]},directionalShadowMatrix:{value:[]},spotLights:{value:[],properties:{color:{},position:{},direction:{},distance:{},coneCos:{},penumbraCos:{},decay:{}}},spotLightShadows:{value:[],properties:{shadowBias:{},shadowNormalBias:{},shadowRadius:{},shadowMapSize:{}}},spotShadowMap:{value:[]},spotShadowMatrix:{value:[]},pointLights:{value:[],properties:{color:{},position:{},decay:{},distance:{}}},pointLightShadows:{value:[],properties:{shadowBias:{},shadowNormalBias:{},shadowRadius:{},shadowMapSize:{},shadowCameraNear:{},shadowCameraFar:{}}},pointShadowMap:{value:[]},pointShadowMatrix:{value:[]},hemisphereLights:{value:[],properties:{direction:{},skyColor:{},groundColor:{}}},rectAreaLights:{value:[],properties:{color:{},position:{},width:{},height:{}}},ltc_1:{value:null},ltc_2:{value:null}},points:{diffuse:{value:new Wt(16777215)},opacity:{value:1},size:{value:1},scale:{value:1},map:{value:null},alphaMap:{value:null},alphaTest:{value:0},uvTransform:{value:new Ct}},sprite:{diffuse:{value:new Wt(16777215)},opacity:{value:1},center:{value:new Rt(.5,.5)},rotation:{value:0},map:{value:null},alphaMap:{value:null},alphaTest:{value:0},uvTransform:{value:new Ct}}},Di={basic:{uniforms:ui([Pi.common,Pi.specularmap,Pi.envmap,Pi.aomap,Pi.lightmap,Pi.fog]),vertexShader:Li.meshbasic_vert,fragmentShader:Li.meshbasic_frag},lambert:{uniforms:ui([Pi.common,Pi.specularmap,Pi.envmap,Pi.aomap,Pi.lightmap,Pi.emissivemap,Pi.fog,Pi.lights,{emissive:{value:new Wt(0)}}]),vertexShader:Li.meshlambert_vert,fragmentShader:Li.meshlambert_frag},phong:{uniforms:ui([Pi.common,Pi.specularmap,Pi.envmap,Pi.aomap,Pi.lightmap,Pi.emissivemap,Pi.bumpmap,Pi.normalmap,Pi.displacementmap,Pi.fog,Pi.lights,{emissive:{value:new Wt(0)},specular:{value:new Wt(1118481)},shininess:{value:30}}]),vertexShader:Li.meshphong_vert,fragmentShader:Li.meshphong_frag},standard:{uniforms:ui([Pi.common,Pi.envmap,Pi.aomap,Pi.lightmap,Pi.emissivemap,Pi.bumpmap,Pi.normalmap,Pi.displacementmap,Pi.roughnessmap,Pi.metalnessmap,Pi.fog,Pi.lights,{emissive:{value:new Wt(0)},roughness:{value:1},metalness:{value:0},envMapIntensity:{value:1}}]),vertexShader:Li.meshphysical_vert,fragmentShader:Li.meshphysical_frag},toon:{uniforms:ui([Pi.common,Pi.aomap,Pi.lightmap,Pi.emissivemap,Pi.bumpmap,Pi.normalmap,Pi.displacementmap,Pi.gradientmap,Pi.fog,Pi.lights,{emissive:{value:new Wt(0)}}]),vertexShader:Li.meshtoon_vert,fragmentShader:Li.meshtoon_frag},matcap:{uniforms:ui([Pi.common,Pi.bumpmap,Pi.normalmap,Pi.displacementmap,Pi.fog,{matcap:{value:null}}]),vertexShader:Li.meshmatcap_vert,fragmentShader:Li.meshmatcap_frag},points:{uniforms:ui([Pi.points,Pi.fog]),vertexShader:Li.points_vert,fragmentShader:Li.points_frag},dashed:{uniforms:ui([Pi.common,Pi.fog,{scale:{value:1},dashSize:{value:1},totalSize:{value:2}}]),vertexShader:Li.linedashed_vert,fragmentShader:Li.linedashed_frag},depth:{uniforms:ui([Pi.common,Pi.displacementmap]),vertexShader:Li.depth_vert,fragmentShader:Li.depth_frag},normal:{uniforms:ui([Pi.common,Pi.bumpmap,Pi.normalmap,Pi.displacementmap,{opacity:{value:1}}]),vertexShader:Li.meshnormal_vert,fragmentShader:Li.meshnormal_frag},sprite:{uniforms:ui([Pi.sprite,Pi.fog]),vertexShader:Li.sprite_vert,fragmentShader:Li.sprite_frag},background:{uniforms:{uvTransform:{value:new Ct},t2D:{value:null}},vertexShader:Li.background_vert,fragmentShader:Li.background_frag},cube:{uniforms:ui([Pi.envmap,{opacity:{value:1}}]),vertexShader:Li.cube_vert,fragmentShader:Li.cube_frag},equirect:{uniforms:{tEquirect:{value:null}},vertexShader:Li.equirect_vert,fragmentShader:Li.equirect_frag},distanceRGBA:{uniforms:ui([Pi.common,Pi.displacementmap,{referencePosition:{value:new se},nearDistance:{value:1},farDistance:{value:1e3}}]),vertexShader:Li.distanceRGBA_vert,fragmentShader:Li.distanceRGBA_frag},shadow:{uniforms:ui([Pi.lights,Pi.fog,{color:{value:new Wt(0)},opacity:{value:1}}]),vertexShader:Li.shadow_vert,fragmentShader:Li.shadow_frag}};function Ii(t,e,n,i,r,s){const a=new Wt(0);let o,c,h=!0===r?0:1,u=null,d=0,p=null;function m(t,e){n.buffers.color.setClear(t.r,t.g,t.b,e,s)}return{getClearColor:function(){return a},setClearColor:function(t,e=1){a.set(t),h=e,m(a,h)},getClearAlpha:function(){return h},setClearAlpha:function(t){h=t,m(a,h)},render:function(n,r){let s=!1,f=!0===r.isScene?r.background:null;f&&f.isTexture&&(f=e.get(f));const g=t.xr,v=g.getSession&&g.getSession();v&&"additive"===v.environmentBlendMode&&(f=null),null===f?m(a,h):f&&f.isColor&&(m(f,1),s=!0),(t.autoClear||s)&&t.clear(t.autoClearColor,t.autoClearDepth,t.autoClearStencil),f&&(f.isCubeTexture||f.mapping===l)?(void 0===c&&(c=new oi(new ci(1,1,1),new pi({name:"BackgroundCubeMaterial",uniforms:hi(Di.cube.uniforms),vertexShader:Di.cube.vertexShader,fragmentShader:Di.cube.fragmentShader,side:1,depthTest:!1,depthWrite:!1,fog:!1})),c.geometry.deleteAttribute("normal"),c.geometry.deleteAttribute("uv"),c.onBeforeRender=function(t,e,n){this.matrixWorld.copyPosition(n.matrixWorld)},Object.defineProperty(c.material,"envMap",{get:function(){return this.uniforms.envMap.value}}),i.update(c)),c.material.uniforms.envMap.value=f,c.material.uniforms.flipEnvMap.value=f.isCubeTexture&&!1===f.isRenderTargetTexture?-1:1,u===f&&d===f.version&&p===t.toneMapping||(c.material.needsUpdate=!0,u=f,d=f.version,p=t.toneMapping),c.layers.enableAll(),n.unshift(c,c.geometry,c.material,0,0,null)):f&&f.isTexture&&(void 0===o&&(o=new oi(new Ci(2,2),new pi({name:"BackgroundMaterial",uniforms:hi(Di.background.uniforms),vertexShader:Di.background.vertexShader,fragmentShader:Di.background.fragmentShader,side:0,depthTest:!1,depthWrite:!1,fog:!1})),o.geometry.deleteAttribute("normal"),Object.defineProperty(o.material,"map",{get:function(){return this.uniforms.t2D.value}}),i.update(o)),o.material.uniforms.t2D.value=f,!0===f.matrixAutoUpdate&&f.updateMatrix(),o.material.uniforms.uvTransform.value.copy(f.matrix),u===f&&d===f.version&&p===t.toneMapping||(o.material.needsUpdate=!0,u=f,d=f.version,p=t.toneMapping),o.layers.enableAll(),n.unshift(o,o.geometry,o.material,0,0,null))}}}function Ni(t,e,n,i){const r=t.getParameter(34921),s=i.isWebGL2?null:e.get("OES_vertex_array_object"),a=i.isWebGL2||null!==s,o={},l=p(null);let c=l,h=!1;function u(e){return i.isWebGL2?t.bindVertexArray(e):s.bindVertexArrayOES(e)}function d(e){return i.isWebGL2?t.deleteVertexArray(e):s.deleteVertexArrayOES(e)}function p(t){const e=[],n=[],i=[];for(let t=0;t=0){const n=r[e];let i=s[e];if(void 0===i&&("instanceMatrix"===e&&t.instanceMatrix&&(i=t.instanceMatrix),"instanceColor"===e&&t.instanceColor&&(i=t.instanceColor)),void 0===n)return!0;if(n.attribute!==i)return!0;if(i&&n.data!==i.data)return!0;a++}}return c.attributesNum!==a||c.index!==i}(r,x,d,_),b&&function(t,e,n,i){const r={},s=e.attributes;let a=0;const o=n.getAttributes();for(const e in o){if(o[e].location>=0){let n=s[e];void 0===n&&("instanceMatrix"===e&&t.instanceMatrix&&(n=t.instanceMatrix),"instanceColor"===e&&t.instanceColor&&(n=t.instanceColor));const i={};i.attribute=n,n&&n.data&&(i.data=n.data),r[e]=i,a++}}c.attributes=r,c.attributesNum=a,c.index=i}(r,x,d,_)}else{const t=!0===l.wireframe;c.geometry===x.id&&c.program===d.id&&c.wireframe===t||(c.geometry=x.id,c.program=d.id,c.wireframe=t,b=!0)}null!==_&&n.update(_,34963),(b||h)&&(h=!1,function(r,s,a,o){if(!1===i.isWebGL2&&(r.isInstancedMesh||o.isInstancedBufferGeometry)&&null===e.get("ANGLE_instanced_arrays"))return;m();const l=o.attributes,c=a.getAttributes(),h=s.defaultAttributeValues;for(const e in c){const i=c[e];if(i.location>=0){let s=l[e];if(void 0===s&&("instanceMatrix"===e&&r.instanceMatrix&&(s=r.instanceMatrix),"instanceColor"===e&&r.instanceColor&&(s=r.instanceColor)),void 0!==s){const e=s.normalized,a=s.itemSize,l=n.get(s);if(void 0===l)continue;const c=l.buffer,h=l.type,u=l.bytesPerElement;if(s.isInterleavedBufferAttribute){const n=s.data,l=n.stride,d=s.offset;if(n.isInstancedInterleavedBuffer){for(let t=0;t0&&t.getShaderPrecisionFormat(35632,36338).precision>0)return"highp";e="mediump"}return"mediump"===e&&t.getShaderPrecisionFormat(35633,36337).precision>0&&t.getShaderPrecisionFormat(35632,36337).precision>0?"mediump":"lowp"}const s="undefined"!=typeof WebGL2RenderingContext&&t instanceof WebGL2RenderingContext||"undefined"!=typeof WebGL2ComputeRenderingContext&&t instanceof WebGL2ComputeRenderingContext;let a=void 0!==n.precision?n.precision:"highp";const o=r(a);o!==a&&(console.warn("THREE.WebGLRenderer:",a,"not supported, using",o,"instead."),a=o);const l=s||e.has("WEBGL_draw_buffers"),c=!0===n.logarithmicDepthBuffer,h=t.getParameter(34930),u=t.getParameter(35660),d=t.getParameter(3379),p=t.getParameter(34076),m=t.getParameter(34921),f=t.getParameter(36347),g=t.getParameter(36348),v=t.getParameter(36349),y=u>0,x=s||e.has("OES_texture_float");return{isWebGL2:s,drawBuffers:l,getMaxAnisotropy:function(){if(void 0!==i)return i;if(!0===e.has("EXT_texture_filter_anisotropic")){const n=e.get("EXT_texture_filter_anisotropic");i=t.getParameter(n.MAX_TEXTURE_MAX_ANISOTROPY_EXT)}else i=0;return i},getMaxPrecision:r,precision:a,logarithmicDepthBuffer:c,maxTextures:h,maxVertexTextures:u,maxTextureSize:d,maxCubemapSize:p,maxAttributes:m,maxVertexUniforms:f,maxVaryings:g,maxFragmentUniforms:v,vertexTextures:y,floatFragmentTextures:x,floatVertexTextures:y&&x,maxSamples:s?t.getParameter(36183):0}}function Oi(t){const e=this;let n=null,i=0,r=!1,s=!1;const a=new wi,o=new Ct,l={value:null,needsUpdate:!1};function c(){l.value!==n&&(l.value=n,l.needsUpdate=i>0),e.numPlanes=i,e.numIntersection=0}function h(t,n,i,r){const s=null!==t?t.length:0;let c=null;if(0!==s){if(c=l.value,!0!==r||null===c){const e=i+4*s,r=n.matrixWorldInverse;o.getNormalMatrix(r),(null===c||c.length0){const a=new xi(s.height/2);return a.fromEquirectangularTexture(t,r),e.set(r,a),r.addEventListener("dispose",i),n(a.texture,r.mapping)}return null}}}return r},dispose:function(){e=new WeakMap}}}Di.physical={uniforms:ui([Di.standard.uniforms,{clearcoat:{value:0},clearcoatMap:{value:null},clearcoatRoughness:{value:0},clearcoatRoughnessMap:{value:null},clearcoatNormalScale:{value:new Rt(1,1)},clearcoatNormalMap:{value:null},sheen:{value:0},sheenColor:{value:new Wt(0)},sheenColorMap:{value:null},sheenRoughness:{value:1},sheenRoughnessMap:{value:null},transmission:{value:0},transmissionMap:{value:null},transmissionSamplerSize:{value:new Rt},transmissionSamplerMap:{value:null},thickness:{value:0},thicknessMap:{value:null},attenuationDistance:{value:0},attenuationColor:{value:new Wt(0)},specularIntensity:{value:1},specularIntensityMap:{value:null},specularColor:{value:new Wt(1,1,1)},specularColorMap:{value:null}}]),vertexShader:Li.meshphysical_vert,fragmentShader:Li.meshphysical_frag};class Fi extends mi{constructor(t=-1,e=1,n=1,i=-1,r=.1,s=2e3){super(),this.type="OrthographicCamera",this.zoom=1,this.view=null,this.left=t,this.right=e,this.top=n,this.bottom=i,this.near=r,this.far=s,this.updateProjectionMatrix()}copy(t,e){return super.copy(t,e),this.left=t.left,this.right=t.right,this.top=t.top,this.bottom=t.bottom,this.near=t.near,this.far=t.far,this.zoom=t.zoom,this.view=null===t.view?null:Object.assign({},t.view),this}setViewOffset(t,e,n,i,r,s){null===this.view&&(this.view={enabled:!0,fullWidth:1,fullHeight:1,offsetX:0,offsetY:0,width:1,height:1}),this.view.enabled=!0,this.view.fullWidth=t,this.view.fullHeight=e,this.view.offsetX=n,this.view.offsetY=i,this.view.width=r,this.view.height=s,this.updateProjectionMatrix()}clearViewOffset(){null!==this.view&&(this.view.enabled=!1),this.updateProjectionMatrix()}updateProjectionMatrix(){const t=(this.right-this.left)/(2*this.zoom),e=(this.top-this.bottom)/(2*this.zoom),n=(this.right+this.left)/2,i=(this.top+this.bottom)/2;let r=n-t,s=n+t,a=i+e,o=i-e;if(null!==this.view&&this.view.enabled){const t=(this.right-this.left)/this.view.fullWidth/this.zoom,e=(this.top-this.bottom)/this.view.fullHeight/this.zoom;r+=t*this.view.offsetX,s=r+t*this.view.width,a-=e*this.view.offsetY,o=a-e*this.view.height}this.projectionMatrix.makeOrthographic(r,s,a,o,this.near,this.far),this.projectionMatrixInverse.copy(this.projectionMatrix).invert()}toJSON(t){const e=super.toJSON(t);return e.object.zoom=this.zoom,e.object.left=this.left,e.object.right=this.right,e.object.top=this.top,e.object.bottom=this.bottom,e.object.near=this.near,e.object.far=this.far,null!==this.view&&(e.object.view=Object.assign({},this.view)),e}}Fi.prototype.isOrthographicCamera=!0;const Hi=[.125,.215,.35,.446,.526,.582],Gi=20,ki=new Fi,Vi=new Wt;let Wi=null;const ji=(1+Math.sqrt(5))/2,qi=1/ji,Xi=[new se(1,1,1),new se(-1,1,1),new se(1,1,-1),new se(-1,1,-1),new se(0,ji,qi),new se(0,ji,-qi),new se(qi,0,ji),new se(-qi,0,ji),new se(ji,qi,0),new se(-ji,qi,0)];class Ji{constructor(t){this._renderer=t,this._pingPongRenderTarget=null,this._lodMax=0,this._cubeSize=0,this._lodPlanes=[],this._sizeLods=[],this._sigmas=[],this._blurMaterial=null,this._cubemapMaterial=null,this._equirectMaterial=null,this._compileMaterial(this._blurMaterial)}fromScene(t,e=0,n=.1,i=100){Wi=this._renderer.getRenderTarget(),this._setSize(256);const r=this._allocateTargets();return r.depthBuffer=!0,this._sceneToCubeUV(t,n,i,r),e>0&&this._blur(r,0,0,e),this._applyPMREM(r),this._cleanup(r),r}fromEquirectangular(t,e=null){return this._fromTexture(t,e)}fromCubemap(t,e=null){return this._fromTexture(t,e)}compileCubemapShader(){null===this._cubemapMaterial&&(this._cubemapMaterial=Qi(),this._compileMaterial(this._cubemapMaterial))}compileEquirectangularShader(){null===this._equirectMaterial&&(this._equirectMaterial=Ki(),this._compileMaterial(this._equirectMaterial))}dispose(){this._dispose(),null!==this._cubemapMaterial&&this._cubemapMaterial.dispose(),null!==this._equirectMaterial&&this._equirectMaterial.dispose()}_setSize(t){this._lodMax=Math.floor(Math.log2(t)),this._cubeSize=Math.pow(2,this._lodMax)}_dispose(){null!==this._blurMaterial&&this._blurMaterial.dispose(),null!==this._pingPongRenderTarget&&this._pingPongRenderTarget.dispose();for(let t=0;tt-4?o=Hi[a-t+4-1]:0===a&&(o=0),i.push(o);const l=1/(s-2),c=-l,h=1+l,u=[c,c,h,c,h,h,c,c,h,h,c,h],d=6,p=6,m=3,f=2,g=1,v=new Float32Array(m*p*d),y=new Float32Array(f*p*d),x=new Float32Array(g*p*d);for(let t=0;t2?0:-1,i=[e,n,0,e+2/3,n,0,e+2/3,n+1,0,e,n,0,e+2/3,n+1,0,e,n+1,0];v.set(i,m*p*t),y.set(u,f*p*t);const r=[t,t,t,t,t,t];x.set(r,g*p*t)}const _=new Vn;_.setAttribute("position",new Tn(v,m)),_.setAttribute("uv",new Tn(y,f)),_.setAttribute("faceIndex",new Tn(x,g)),e.push(_),r>4&&r--}return{lodPlanes:e,sizeLods:n,sigmas:i}}(i)),this._blurMaterial=function(t,e,n){const i=new Float32Array(Gi),r=new se(0,1,0);return new pi({name:"SphericalGaussianBlur",defines:{n:Gi,CUBEUV_TEXEL_WIDTH:1/e,CUBEUV_TEXEL_HEIGHT:1/n,CUBEUV_MAX_MIP:`${t}.0`},uniforms:{envMap:{value:null},samples:{value:1},weights:{value:i},latitudinal:{value:!1},dTheta:{value:0},mipInt:{value:0},poleAxis:{value:r}},vertexShader:$i(),fragmentShader:"\n\n\t\t\tprecision mediump float;\n\t\t\tprecision mediump int;\n\n\t\t\tvarying vec3 vOutputDirection;\n\n\t\t\tuniform sampler2D envMap;\n\t\t\tuniform int samples;\n\t\t\tuniform float weights[ n ];\n\t\t\tuniform bool latitudinal;\n\t\t\tuniform float dTheta;\n\t\t\tuniform float mipInt;\n\t\t\tuniform vec3 poleAxis;\n\n\t\t\t#define ENVMAP_TYPE_CUBE_UV\n\t\t\t#include \n\n\t\t\tvec3 getSample( float theta, vec3 axis ) {\n\n\t\t\t\tfloat cosTheta = cos( theta );\n\t\t\t\t// Rodrigues' axis-angle rotation\n\t\t\t\tvec3 sampleDirection = vOutputDirection * cosTheta\n\t\t\t\t\t+ cross( axis, vOutputDirection ) * sin( theta )\n\t\t\t\t\t+ axis * dot( axis, vOutputDirection ) * ( 1.0 - cosTheta );\n\n\t\t\t\treturn bilinearCubeUV( envMap, sampleDirection, mipInt );\n\n\t\t\t}\n\n\t\t\tvoid main() {\n\n\t\t\t\tvec3 axis = latitudinal ? poleAxis : cross( poleAxis, vOutputDirection );\n\n\t\t\t\tif ( all( equal( axis, vec3( 0.0 ) ) ) ) {\n\n\t\t\t\t\taxis = vec3( vOutputDirection.z, 0.0, - vOutputDirection.x );\n\n\t\t\t\t}\n\n\t\t\t\taxis = normalize( axis );\n\n\t\t\t\tgl_FragColor = vec4( 0.0, 0.0, 0.0, 1.0 );\n\t\t\t\tgl_FragColor.rgb += weights[ 0 ] * getSample( 0.0, axis );\n\n\t\t\t\tfor ( int i = 1; i < n; i++ ) {\n\n\t\t\t\t\tif ( i >= samples ) {\n\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\t}\n\n\t\t\t\t\tfloat theta = dTheta * float( i );\n\t\t\t\t\tgl_FragColor.rgb += weights[ i ] * getSample( -1.0 * theta, axis );\n\t\t\t\t\tgl_FragColor.rgb += weights[ i ] * getSample( theta, axis );\n\n\t\t\t\t}\n\n\t\t\t}\n\t\t",blending:0,depthTest:!1,depthWrite:!1})}(i,t,e)}return i}_compileMaterial(t){const e=new oi(this._lodPlanes[0],t);this._renderer.compile(e,ki)}_sceneToCubeUV(t,e,n,i){const r=new fi(90,1,e,n),s=[1,-1,1,1,1,1],a=[1,1,1,-1,-1,-1],o=this._renderer,l=o.autoClear,c=o.toneMapping;o.getClearColor(Vi),o.toneMapping=0,o.autoClear=!1;const h=new Mn({name:"PMREM.Background",side:1,depthWrite:!1,depthTest:!1}),u=new oi(new ci,h);let d=!1;const p=t.background;p?p.isColor&&(h.color.copy(p),t.background=null,d=!0):(h.color.copy(Vi),d=!0);for(let e=0;e<6;e++){const n=e%3;0===n?(r.up.set(0,s[e],0),r.lookAt(a[e],0,0)):1===n?(r.up.set(0,0,s[e]),r.lookAt(0,a[e],0)):(r.up.set(0,s[e],0),r.lookAt(0,0,a[e]));const l=this._cubeSize;Zi(i,n*l,e>2?l:0,l,l),o.setRenderTarget(i),d&&o.render(u,r),o.render(t,r)}u.geometry.dispose(),u.material.dispose(),o.toneMapping=c,o.autoClear=l,t.background=p}_textureToCubeUV(t,e){const n=this._renderer,i=t.mapping===r||t.mapping===s;i?(null===this._cubemapMaterial&&(this._cubemapMaterial=Qi()),this._cubemapMaterial.uniforms.flipEnvMap.value=!1===t.isRenderTargetTexture?-1:1):null===this._equirectMaterial&&(this._equirectMaterial=Ki());const a=i?this._cubemapMaterial:this._equirectMaterial,o=new oi(this._lodPlanes[0],a);a.uniforms.envMap.value=t;const l=this._cubeSize;Zi(e,0,0,3*l,2*l),n.setRenderTarget(e),n.render(o,ki)}_applyPMREM(t){const e=this._renderer,n=e.autoClear;e.autoClear=!1;for(let e=1;eGi&&console.warn(`sigmaRadians, ${r}, is too large and will clip, as it requested ${m} samples when the maximum is set to 20`);const f=[];let g=0;for(let t=0;tv-4?i-v+4:0),4*(this._cubeSize-y),3*y,2*y),o.setRenderTarget(e),o.render(c,ki)}}function Yi(t,e,n){const i=new Qt(t,e,n);return i.texture.mapping=l,i.texture.name="PMREM.cubeUv",i.scissorTest=!0,i}function Zi(t,e,n,i,r){t.viewport.set(e,n,i,r),t.scissor.set(e,n,i,r)}function Ki(){return new pi({name:"EquirectangularToCubeUV",uniforms:{envMap:{value:null}},vertexShader:$i(),fragmentShader:"\n\n\t\t\tprecision mediump float;\n\t\t\tprecision mediump int;\n\n\t\t\tvarying vec3 vOutputDirection;\n\n\t\t\tuniform sampler2D envMap;\n\n\t\t\t#include \n\n\t\t\tvoid main() {\n\n\t\t\t\tvec3 outputDirection = normalize( vOutputDirection );\n\t\t\t\tvec2 uv = equirectUv( outputDirection );\n\n\t\t\t\tgl_FragColor = vec4( texture2D ( envMap, uv ).rgb, 1.0 );\n\n\t\t\t}\n\t\t",blending:0,depthTest:!1,depthWrite:!1})}function Qi(){return new pi({name:"CubemapToCubeUV",uniforms:{envMap:{value:null},flipEnvMap:{value:-1}},vertexShader:$i(),fragmentShader:"\n\n\t\t\tprecision mediump float;\n\t\t\tprecision mediump int;\n\n\t\t\tuniform float flipEnvMap;\n\n\t\t\tvarying vec3 vOutputDirection;\n\n\t\t\tuniform samplerCube envMap;\n\n\t\t\tvoid main() {\n\n\t\t\t\tgl_FragColor = textureCube( envMap, vec3( flipEnvMap * vOutputDirection.x, vOutputDirection.yz ) );\n\n\t\t\t}\n\t\t",blending:0,depthTest:!1,depthWrite:!1})}function $i(){return"\n\n\t\tprecision mediump float;\n\t\tprecision mediump int;\n\n\t\tattribute float faceIndex;\n\n\t\tvarying vec3 vOutputDirection;\n\n\t\t// RH coordinate system; PMREM face-indexing convention\n\t\tvec3 getDirection( vec2 uv, float face ) {\n\n\t\t\tuv = 2.0 * uv - 1.0;\n\n\t\t\tvec3 direction = vec3( uv, 1.0 );\n\n\t\t\tif ( face == 0.0 ) {\n\n\t\t\t\tdirection = direction.zyx; // ( 1, v, u ) pos x\n\n\t\t\t} else if ( face == 1.0 ) {\n\n\t\t\t\tdirection = direction.xzy;\n\t\t\t\tdirection.xz *= -1.0; // ( -u, 1, -v ) pos y\n\n\t\t\t} else if ( face == 2.0 ) {\n\n\t\t\t\tdirection.x *= -1.0; // ( -u, v, 1 ) pos z\n\n\t\t\t} else if ( face == 3.0 ) {\n\n\t\t\t\tdirection = direction.zyx;\n\t\t\t\tdirection.xz *= -1.0; // ( -1, v, -u ) neg x\n\n\t\t\t} else if ( face == 4.0 ) {\n\n\t\t\t\tdirection = direction.xzy;\n\t\t\t\tdirection.xy *= -1.0; // ( -u, -1, v ) neg y\n\n\t\t\t} else if ( face == 5.0 ) {\n\n\t\t\t\tdirection.z *= -1.0; // ( u, v, -1 ) neg z\n\n\t\t\t}\n\n\t\t\treturn direction;\n\n\t\t}\n\n\t\tvoid main() {\n\n\t\t\tvOutputDirection = getDirection( uv, faceIndex );\n\t\t\tgl_Position = vec4( position, 1.0 );\n\n\t\t}\n\t"}function tr(t){let e=new WeakMap,n=null;function i(t){const n=t.target;n.removeEventListener("dispose",i);const r=e.get(n);void 0!==r&&(e.delete(n),r.dispose())}return{get:function(l){if(l&&l.isTexture){const c=l.mapping,h=c===a||c===o,u=c===r||c===s;if(h||u){if(l.isRenderTargetTexture&&!0===l.needsPMREMUpdate){l.needsPMREMUpdate=!1;let i=e.get(l);return null===n&&(n=new Ji(t)),i=h?n.fromEquirectangular(l,i):n.fromCubemap(l,i),e.set(l,i),i.texture}if(e.has(l))return e.get(l).texture;{const r=l.image;if(h&&r&&r.height>0||u&&r&&function(t){let e=0;const n=6;for(let i=0;ie.maxTextureSize&&(A=Math.ceil(E/e.maxTextureSize),E=e.maxTextureSize);const R=new Float32Array(E*A*4*m),C=new $t(R,E,A,m);C.type=b,C.needsUpdate=!0;const L=4*T;for(let D=0;D0)return t;const r=e*n;let s=mr[r];if(void 0===s&&(s=new Float32Array(r),mr[r]=s),0!==e){i.toArray(s,0);for(let i=1,r=0;i!==e;++i)r+=n,t[i].toArray(s,r)}return s}function _r(t,e){if(t.length!==e.length)return!1;for(let n=0,i=t.length;n/gm;function ws(t){return t.replace(Ms,Ss)}function Ss(t,e){const n=Li[e];if(void 0===n)throw new Error("Can not resolve #include <"+e+">");return ws(n)}const Ts=/#pragma unroll_loop[\s]+?for \( int i \= (\d+)\; i < (\d+)\; i \+\+ \) \{([\s\S]+?)(?=\})\}/g,Es=/#pragma unroll_loop_start\s+for\s*\(\s*int\s+i\s*=\s*(\d+)\s*;\s*i\s*<\s*(\d+)\s*;\s*i\s*\+\+\s*\)\s*{([\s\S]+?)}\s+#pragma unroll_loop_end/g;function As(t){return t.replace(Es,Cs).replace(Ts,Rs)}function Rs(t,e,n,i){return console.warn("WebGLProgram: #pragma unroll_loop shader syntax is deprecated. Please use #pragma unroll_loop_start syntax instead."),Cs(t,e,n,i)}function Cs(t,e,n,i){let r="";for(let t=parseInt(e);t0&&(x+="\n"),_=[g,v].filter(xs).join("\n"),_.length>0&&(_+="\n")):(x=[Ls(n),"#define SHADER_NAME "+n.shaderName,v,n.instancing?"#define USE_INSTANCING":"",n.instancingColor?"#define USE_INSTANCING_COLOR":"",n.supportsVertexTextures?"#define VERTEX_TEXTURES":"",n.useFog&&n.fog?"#define USE_FOG":"",n.useFog&&n.fogExp2?"#define FOG_EXP2":"",n.map?"#define USE_MAP":"",n.envMap?"#define USE_ENVMAP":"",n.envMap?"#define "+p:"",n.lightMap?"#define USE_LIGHTMAP":"",n.aoMap?"#define USE_AOMAP":"",n.emissiveMap?"#define USE_EMISSIVEMAP":"",n.bumpMap?"#define USE_BUMPMAP":"",n.normalMap?"#define USE_NORMALMAP":"",n.normalMap&&n.objectSpaceNormalMap?"#define OBJECTSPACE_NORMALMAP":"",n.normalMap&&n.tangentSpaceNormalMap?"#define TANGENTSPACE_NORMALMAP":"",n.clearcoatMap?"#define USE_CLEARCOATMAP":"",n.clearcoatRoughnessMap?"#define USE_CLEARCOAT_ROUGHNESSMAP":"",n.clearcoatNormalMap?"#define USE_CLEARCOAT_NORMALMAP":"",n.displacementMap&&n.supportsVertexTextures?"#define USE_DISPLACEMENTMAP":"",n.specularMap?"#define USE_SPECULARMAP":"",n.specularIntensityMap?"#define USE_SPECULARINTENSITYMAP":"",n.specularColorMap?"#define USE_SPECULARCOLORMAP":"",n.roughnessMap?"#define USE_ROUGHNESSMAP":"",n.metalnessMap?"#define USE_METALNESSMAP":"",n.alphaMap?"#define USE_ALPHAMAP":"",n.transmission?"#define USE_TRANSMISSION":"",n.transmissionMap?"#define USE_TRANSMISSIONMAP":"",n.thicknessMap?"#define USE_THICKNESSMAP":"",n.sheenColorMap?"#define USE_SHEENCOLORMAP":"",n.sheenRoughnessMap?"#define USE_SHEENROUGHNESSMAP":"",n.vertexTangents?"#define USE_TANGENT":"",n.vertexColors?"#define USE_COLOR":"",n.vertexAlphas?"#define USE_COLOR_ALPHA":"",n.vertexUvs?"#define USE_UV":"",n.uvsVertexOnly?"#define UVS_VERTEX_ONLY":"",n.flatShading?"#define FLAT_SHADED":"",n.skinning?"#define USE_SKINNING":"",n.morphTargets?"#define USE_MORPHTARGETS":"",n.morphNormals&&!1===n.flatShading?"#define USE_MORPHNORMALS":"",n.morphColors&&n.isWebGL2?"#define USE_MORPHCOLORS":"",n.morphTargetsCount>0&&n.isWebGL2?"#define MORPHTARGETS_TEXTURE":"",n.morphTargetsCount>0&&n.isWebGL2?"#define MORPHTARGETS_TEXTURE_STRIDE "+n.morphTextureStride:"",n.morphTargetsCount>0&&n.isWebGL2?"#define MORPHTARGETS_COUNT "+n.morphTargetsCount:"",n.doubleSided?"#define DOUBLE_SIDED":"",n.flipSided?"#define FLIP_SIDED":"",n.shadowMapEnabled?"#define USE_SHADOWMAP":"",n.shadowMapEnabled?"#define "+u:"",n.sizeAttenuation?"#define USE_SIZEATTENUATION":"",n.logarithmicDepthBuffer?"#define USE_LOGDEPTHBUF":"",n.logarithmicDepthBuffer&&n.rendererExtensionFragDepth?"#define USE_LOGDEPTHBUF_EXT":"","uniform mat4 modelMatrix;","uniform mat4 modelViewMatrix;","uniform mat4 projectionMatrix;","uniform mat4 viewMatrix;","uniform mat3 normalMatrix;","uniform vec3 cameraPosition;","uniform bool isOrthographic;","#ifdef USE_INSTANCING","\tattribute mat4 instanceMatrix;","#endif","#ifdef USE_INSTANCING_COLOR","\tattribute vec3 instanceColor;","#endif","attribute vec3 position;","attribute vec3 normal;","attribute vec2 uv;","#ifdef USE_TANGENT","\tattribute vec4 tangent;","#endif","#if defined( USE_COLOR_ALPHA )","\tattribute vec4 color;","#elif defined( USE_COLOR )","\tattribute vec3 color;","#endif","#if ( defined( USE_MORPHTARGETS ) && ! defined( MORPHTARGETS_TEXTURE ) )","\tattribute vec3 morphTarget0;","\tattribute vec3 morphTarget1;","\tattribute vec3 morphTarget2;","\tattribute vec3 morphTarget3;","\t#ifdef USE_MORPHNORMALS","\t\tattribute vec3 morphNormal0;","\t\tattribute vec3 morphNormal1;","\t\tattribute vec3 morphNormal2;","\t\tattribute vec3 morphNormal3;","\t#else","\t\tattribute vec3 morphTarget4;","\t\tattribute vec3 morphTarget5;","\t\tattribute vec3 morphTarget6;","\t\tattribute vec3 morphTarget7;","\t#endif","#endif","#ifdef USE_SKINNING","\tattribute vec4 skinIndex;","\tattribute vec4 skinWeight;","#endif","\n"].filter(xs).join("\n"),_=[g,Ls(n),"#define SHADER_NAME "+n.shaderName,v,n.useFog&&n.fog?"#define USE_FOG":"",n.useFog&&n.fogExp2?"#define FOG_EXP2":"",n.map?"#define USE_MAP":"",n.matcap?"#define USE_MATCAP":"",n.envMap?"#define USE_ENVMAP":"",n.envMap?"#define "+d:"",n.envMap?"#define "+p:"",n.envMap?"#define "+m:"",f?"#define CUBEUV_TEXEL_WIDTH "+f.texelWidth:"",f?"#define CUBEUV_TEXEL_HEIGHT "+f.texelHeight:"",f?"#define CUBEUV_MAX_MIP "+f.maxMip+".0":"",n.lightMap?"#define USE_LIGHTMAP":"",n.aoMap?"#define USE_AOMAP":"",n.emissiveMap?"#define USE_EMISSIVEMAP":"",n.bumpMap?"#define USE_BUMPMAP":"",n.normalMap?"#define USE_NORMALMAP":"",n.normalMap&&n.objectSpaceNormalMap?"#define OBJECTSPACE_NORMALMAP":"",n.normalMap&&n.tangentSpaceNormalMap?"#define TANGENTSPACE_NORMALMAP":"",n.clearcoat?"#define USE_CLEARCOAT":"",n.clearcoatMap?"#define USE_CLEARCOATMAP":"",n.clearcoatRoughnessMap?"#define USE_CLEARCOAT_ROUGHNESSMAP":"",n.clearcoatNormalMap?"#define USE_CLEARCOAT_NORMALMAP":"",n.specularMap?"#define USE_SPECULARMAP":"",n.specularIntensityMap?"#define USE_SPECULARINTENSITYMAP":"",n.specularColorMap?"#define USE_SPECULARCOLORMAP":"",n.roughnessMap?"#define USE_ROUGHNESSMAP":"",n.metalnessMap?"#define USE_METALNESSMAP":"",n.alphaMap?"#define USE_ALPHAMAP":"",n.alphaTest?"#define USE_ALPHATEST":"",n.sheen?"#define USE_SHEEN":"",n.sheenColorMap?"#define USE_SHEENCOLORMAP":"",n.sheenRoughnessMap?"#define USE_SHEENROUGHNESSMAP":"",n.transmission?"#define USE_TRANSMISSION":"",n.transmissionMap?"#define USE_TRANSMISSIONMAP":"",n.thicknessMap?"#define USE_THICKNESSMAP":"",n.decodeVideoTexture?"#define DECODE_VIDEO_TEXTURE":"",n.vertexTangents?"#define USE_TANGENT":"",n.vertexColors||n.instancingColor?"#define USE_COLOR":"",n.vertexAlphas?"#define USE_COLOR_ALPHA":"",n.vertexUvs?"#define USE_UV":"",n.uvsVertexOnly?"#define UVS_VERTEX_ONLY":"",n.gradientMap?"#define USE_GRADIENTMAP":"",n.flatShading?"#define FLAT_SHADED":"",n.doubleSided?"#define DOUBLE_SIDED":"",n.flipSided?"#define FLIP_SIDED":"",n.shadowMapEnabled?"#define USE_SHADOWMAP":"",n.shadowMapEnabled?"#define "+u:"",n.premultipliedAlpha?"#define PREMULTIPLIED_ALPHA":"",n.physicallyCorrectLights?"#define PHYSICALLY_CORRECT_LIGHTS":"",n.logarithmicDepthBuffer?"#define USE_LOGDEPTHBUF":"",n.logarithmicDepthBuffer&&n.rendererExtensionFragDepth?"#define USE_LOGDEPTHBUF_EXT":"","uniform mat4 viewMatrix;","uniform vec3 cameraPosition;","uniform bool isOrthographic;",0!==n.toneMapping?"#define TONE_MAPPING":"",0!==n.toneMapping?Li.tonemapping_pars_fragment:"",0!==n.toneMapping?ys("toneMapping",n.toneMapping):"",n.dithering?"#define DITHERING":"",n.opaque?"#define OPAQUE":"",Li.encodings_pars_fragment,vs("linearToOutputTexel",n.outputEncoding),n.useDepthPacking?"#define DEPTH_PACKING "+n.depthPacking:"","\n"].filter(xs).join("\n")),c=ws(c),c=_s(c,n),c=bs(c,n),h=ws(h),h=_s(h,n),h=bs(h,n),c=As(c),h=As(h),n.isWebGL2&&!0!==n.isRawShaderMaterial&&(b="#version 300 es\n",x=["precision mediump sampler2DArray;","#define attribute in","#define varying out","#define texture2D texture"].join("\n")+"\n"+x,_=["#define varying in",n.glslVersion===pt?"":"layout(location = 0) out highp vec4 pc_fragColor;",n.glslVersion===pt?"":"#define gl_FragColor pc_fragColor","#define gl_FragDepthEXT gl_FragDepth","#define texture2D texture","#define textureCube texture","#define texture2DProj textureProj","#define texture2DLodEXT textureLod","#define texture2DProjLodEXT textureProjLod","#define textureCubeLodEXT textureLod","#define texture2DGradEXT textureGrad","#define texture2DProjGradEXT textureProjGrad","#define textureCubeGradEXT textureGrad"].join("\n")+"\n"+_);const M=b+_+h,w=ms(a,35633,b+x+c),S=ms(a,35632,M);if(a.attachShader(y,w),a.attachShader(y,S),void 0!==n.index0AttributeName?a.bindAttribLocation(y,0,n.index0AttributeName):!0===n.morphTargets&&a.bindAttribLocation(y,0,"position"),a.linkProgram(y),t.debug.checkShaderErrors){const t=a.getProgramInfoLog(y).trim(),e=a.getShaderInfoLog(w).trim(),n=a.getShaderInfoLog(S).trim();let i=!0,r=!0;if(!1===a.getProgramParameter(y,35714)){i=!1;const e=gs(a,w,"vertex"),n=gs(a,S,"fragment");console.error("THREE.WebGLProgram: Shader Error "+a.getError()+" - VALIDATE_STATUS "+a.getProgramParameter(y,35715)+"\n\nProgram Info Log: "+t+"\n"+e+"\n"+n)}else""!==t?console.warn("THREE.WebGLProgram: Program Info Log:",t):""!==e&&""!==n||(r=!1);r&&(this.diagnostics={runnable:i,programLog:t,vertexShader:{log:e,prefix:x},fragmentShader:{log:n,prefix:_}})}let T,E;return a.deleteShader(w),a.deleteShader(S),this.getUniforms=function(){return void 0===T&&(T=new ps(a,y)),T},this.getAttributes=function(){return void 0===E&&(E=function(t,e){const n={},i=t.getProgramParameter(e,35721);for(let r=0;r0,I=s.clearcoat>0;return{isWebGL2:u,shaderID:w,shaderName:s.type,vertexShader:E,fragmentShader:A,defines:s.defines,customVertexShaderID:R,customFragmentShaderID:C,isRawShaderMaterial:!0===s.isRawShaderMaterial,glslVersion:s.glslVersion,precision:m,instancing:!0===v.isInstancedMesh,instancingColor:!0===v.isInstancedMesh&&null!==v.instanceColor,supportsVertexTextures:p,outputEncoding:null===P?t.outputEncoding:!0===P.isXRRenderTarget?P.texture.encoding:at,map:!!s.map,matcap:!!s.matcap,envMap:!!b,envMapMode:b&&b.mapping,envMapCubeUVHeight:M,lightMap:!!s.lightMap,aoMap:!!s.aoMap,emissiveMap:!!s.emissiveMap,bumpMap:!!s.bumpMap,normalMap:!!s.normalMap,objectSpaceNormalMap:1===s.normalMapType,tangentSpaceNormalMap:0===s.normalMapType,decodeVideoTexture:!!s.map&&!0===s.map.isVideoTexture&&s.map.encoding===ot,clearcoat:I,clearcoatMap:I&&!!s.clearcoatMap,clearcoatRoughnessMap:I&&!!s.clearcoatRoughnessMap,clearcoatNormalMap:I&&!!s.clearcoatNormalMap,displacementMap:!!s.displacementMap,roughnessMap:!!s.roughnessMap,metalnessMap:!!s.metalnessMap,specularMap:!!s.specularMap,specularIntensityMap:!!s.specularIntensityMap,specularColorMap:!!s.specularColorMap,opaque:!1===s.transparent&&1===s.blending,alphaMap:!!s.alphaMap,alphaTest:D,gradientMap:!!s.gradientMap,sheen:s.sheen>0,sheenColorMap:!!s.sheenColorMap,sheenRoughnessMap:!!s.sheenRoughnessMap,transmission:s.transmission>0,transmissionMap:!!s.transmissionMap,thicknessMap:!!s.thicknessMap,combine:s.combine,vertexTangents:!!s.normalMap&&!!x.attributes.tangent,vertexColors:s.vertexColors,vertexAlphas:!0===s.vertexColors&&!!x.attributes.color&&4===x.attributes.color.itemSize,vertexUvs:!!(s.map||s.bumpMap||s.normalMap||s.specularMap||s.alphaMap||s.emissiveMap||s.roughnessMap||s.metalnessMap||s.clearcoatMap||s.clearcoatRoughnessMap||s.clearcoatNormalMap||s.displacementMap||s.transmissionMap||s.thicknessMap||s.specularIntensityMap||s.specularColorMap||s.sheenColorMap||s.sheenRoughnessMap),uvsVertexOnly:!(s.map||s.bumpMap||s.normalMap||s.specularMap||s.alphaMap||s.emissiveMap||s.roughnessMap||s.metalnessMap||s.clearcoatNormalMap||s.transmission>0||s.transmissionMap||s.thicknessMap||s.specularIntensityMap||s.specularColorMap||s.sheen>0||s.sheenColorMap||s.sheenRoughnessMap||!s.displacementMap),fog:!!y,useFog:!0===s.fog,fogExp2:y&&y.isFogExp2,flatShading:!!s.flatShading,sizeAttenuation:s.sizeAttenuation,logarithmicDepthBuffer:d,skinning:!0===v.isSkinnedMesh,morphTargets:void 0!==x.morphAttributes.position,morphNormals:void 0!==x.morphAttributes.normal,morphColors:void 0!==x.morphAttributes.color,morphTargetsCount:T,morphTextureStride:L,numDirLights:o.directional.length,numPointLights:o.point.length,numSpotLights:o.spot.length,numRectAreaLights:o.rectArea.length,numHemiLights:o.hemi.length,numDirLightShadows:o.directionalShadowMap.length,numPointLightShadows:o.pointShadowMap.length,numSpotLightShadows:o.spotShadowMap.length,numClippingPlanes:a.numPlanes,numClipIntersection:a.numIntersection,dithering:s.dithering,shadowMapEnabled:t.shadowMap.enabled&&h.length>0,shadowMapType:t.shadowMap.type,toneMapping:s.toneMapped?t.toneMapping:0,physicallyCorrectLights:t.physicallyCorrectLights,premultipliedAlpha:s.premultipliedAlpha,doubleSided:2===s.side,flipSided:1===s.side,useDepthPacking:!!s.depthPacking,depthPacking:s.depthPacking||0,index0AttributeName:s.index0AttributeName,extensionDerivatives:s.extensions&&s.extensions.derivatives,extensionFragDepth:s.extensions&&s.extensions.fragDepth,extensionDrawBuffers:s.extensions&&s.extensions.drawBuffers,extensionShaderTextureLOD:s.extensions&&s.extensions.shaderTextureLOD,rendererExtensionFragDepth:u||i.has("EXT_frag_depth"),rendererExtensionDrawBuffers:u||i.has("WEBGL_draw_buffers"),rendererExtensionShaderTextureLod:u||i.has("EXT_shader_texture_lod"),customProgramCacheKey:s.customProgramCacheKey()}},getProgramCacheKey:function(e){const n=[];if(e.shaderID?n.push(e.shaderID):(n.push(e.customVertexShaderID),n.push(e.customFragmentShaderID)),void 0!==e.defines)for(const t in e.defines)n.push(t),n.push(e.defines[t]);return!1===e.isRawShaderMaterial&&(!function(t,e){t.push(e.precision),t.push(e.outputEncoding),t.push(e.envMapMode),t.push(e.envMapCubeUVHeight),t.push(e.combine),t.push(e.vertexUvs),t.push(e.fogExp2),t.push(e.sizeAttenuation),t.push(e.morphTargetsCount),t.push(e.morphAttributeCount),t.push(e.numDirLights),t.push(e.numPointLights),t.push(e.numSpotLights),t.push(e.numHemiLights),t.push(e.numRectAreaLights),t.push(e.numDirLightShadows),t.push(e.numPointLightShadows),t.push(e.numSpotLightShadows),t.push(e.shadowMapType),t.push(e.toneMapping),t.push(e.numClippingPlanes),t.push(e.numClipIntersection),t.push(e.depthPacking)}(n,e),function(t,e){o.disableAll(),e.isWebGL2&&o.enable(0);e.supportsVertexTextures&&o.enable(1);e.instancing&&o.enable(2);e.instancingColor&&o.enable(3);e.map&&o.enable(4);e.matcap&&o.enable(5);e.envMap&&o.enable(6);e.lightMap&&o.enable(7);e.aoMap&&o.enable(8);e.emissiveMap&&o.enable(9);e.bumpMap&&o.enable(10);e.normalMap&&o.enable(11);e.objectSpaceNormalMap&&o.enable(12);e.tangentSpaceNormalMap&&o.enable(13);e.clearcoat&&o.enable(14);e.clearcoatMap&&o.enable(15);e.clearcoatRoughnessMap&&o.enable(16);e.clearcoatNormalMap&&o.enable(17);e.displacementMap&&o.enable(18);e.specularMap&&o.enable(19);e.roughnessMap&&o.enable(20);e.metalnessMap&&o.enable(21);e.gradientMap&&o.enable(22);e.alphaMap&&o.enable(23);e.alphaTest&&o.enable(24);e.vertexColors&&o.enable(25);e.vertexAlphas&&o.enable(26);e.vertexUvs&&o.enable(27);e.vertexTangents&&o.enable(28);e.uvsVertexOnly&&o.enable(29);e.fog&&o.enable(30);t.push(o.mask),o.disableAll(),e.useFog&&o.enable(0);e.flatShading&&o.enable(1);e.logarithmicDepthBuffer&&o.enable(2);e.skinning&&o.enable(3);e.morphTargets&&o.enable(4);e.morphNormals&&o.enable(5);e.morphColors&&o.enable(6);e.premultipliedAlpha&&o.enable(7);e.shadowMapEnabled&&o.enable(8);e.physicallyCorrectLights&&o.enable(9);e.doubleSided&&o.enable(10);e.flipSided&&o.enable(11);e.useDepthPacking&&o.enable(12);e.dithering&&o.enable(13);e.specularIntensityMap&&o.enable(14);e.specularColorMap&&o.enable(15);e.transmission&&o.enable(16);e.transmissionMap&&o.enable(17);e.thicknessMap&&o.enable(18);e.sheen&&o.enable(19);e.sheenColorMap&&o.enable(20);e.sheenRoughnessMap&&o.enable(21);e.decodeVideoTexture&&o.enable(22);e.opaque&&o.enable(23);t.push(o.mask)}(n,e),n.push(t.outputEncoding)),n.push(e.customProgramCacheKey),n.join()},getUniforms:function(t){const e=f[t.type];let n;if(e){const t=Di[e];n=di.clone(t.uniforms)}else n=t.uniforms;return n},acquireProgram:function(e,n){let i;for(let t=0,e=h.length;t0?i.push(h):!0===a.transparent?r.push(h):n.push(h)},unshift:function(t,e,a,o,l,c){const h=s(t,e,a,o,l,c);a.transmission>0?i.unshift(h):!0===a.transparent?r.unshift(h):n.unshift(h)},finish:function(){for(let n=e,i=t.length;n1&&n.sort(t||Os),i.length>1&&i.sort(e||Us),r.length>1&&r.sort(e||Us)}}}function Hs(){let t=new WeakMap;return{get:function(e,n){let i;return!1===t.has(e)?(i=new Fs,t.set(e,[i])):n>=t.get(e).length?(i=new Fs,t.get(e).push(i)):i=t.get(e)[n],i},dispose:function(){t=new WeakMap}}}function Gs(){const t={};return{get:function(e){if(void 0!==t[e.id])return t[e.id];let n;switch(e.type){case"DirectionalLight":n={direction:new se,color:new Wt};break;case"SpotLight":n={position:new se,direction:new se,color:new Wt,distance:0,coneCos:0,penumbraCos:0,decay:0};break;case"PointLight":n={position:new se,color:new Wt,distance:0,decay:0};break;case"HemisphereLight":n={direction:new se,skyColor:new Wt,groundColor:new Wt};break;case"RectAreaLight":n={color:new Wt,position:new se,halfWidth:new se,halfHeight:new se}}return t[e.id]=n,n}}}let ks=0;function Vs(t,e){return(e.castShadow?1:0)-(t.castShadow?1:0)}function Ws(t,e){const n=new Gs,i=function(){const t={};return{get:function(e){if(void 0!==t[e.id])return t[e.id];let n;switch(e.type){case"DirectionalLight":case"SpotLight":n={shadowBias:0,shadowNormalBias:0,shadowRadius:1,shadowMapSize:new Rt};break;case"PointLight":n={shadowBias:0,shadowNormalBias:0,shadowRadius:1,shadowMapSize:new Rt,shadowCameraNear:1,shadowCameraFar:1e3}}return t[e.id]=n,n}}}(),r={version:0,hash:{directionalLength:-1,pointLength:-1,spotLength:-1,rectAreaLength:-1,hemiLength:-1,numDirectionalShadows:-1,numPointShadows:-1,numSpotShadows:-1},ambient:[0,0,0],probe:[],directional:[],directionalShadow:[],directionalShadowMap:[],directionalShadowMatrix:[],spot:[],spotShadow:[],spotShadowMap:[],spotShadowMatrix:[],rectArea:[],rectAreaLTC1:null,rectAreaLTC2:null,point:[],pointShadow:[],pointShadowMap:[],pointShadowMatrix:[],hemi:[]};for(let t=0;t<9;t++)r.probe.push(new se);const s=new se,a=new ze,o=new ze;return{setup:function(s,a){let o=0,l=0,c=0;for(let t=0;t<9;t++)r.probe[t].set(0,0,0);let h=0,u=0,d=0,p=0,m=0,f=0,g=0,v=0;s.sort(Vs);const y=!0!==a?Math.PI:1;for(let t=0,e=s.length;t0&&(e.isWebGL2||!0===t.has("OES_texture_float_linear")?(r.rectAreaLTC1=Pi.LTC_FLOAT_1,r.rectAreaLTC2=Pi.LTC_FLOAT_2):!0===t.has("OES_texture_half_float_linear")?(r.rectAreaLTC1=Pi.LTC_HALF_1,r.rectAreaLTC2=Pi.LTC_HALF_2):console.error("THREE.WebGLRenderer: Unable to use RectAreaLight. Missing WebGL extensions.")),r.ambient[0]=o,r.ambient[1]=l,r.ambient[2]=c;const x=r.hash;x.directionalLength===h&&x.pointLength===u&&x.spotLength===d&&x.rectAreaLength===p&&x.hemiLength===m&&x.numDirectionalShadows===f&&x.numPointShadows===g&&x.numSpotShadows===v||(r.directional.length=h,r.spot.length=d,r.rectArea.length=p,r.point.length=u,r.hemi.length=m,r.directionalShadow.length=f,r.directionalShadowMap.length=f,r.pointShadow.length=g,r.pointShadowMap.length=g,r.spotShadow.length=v,r.spotShadowMap.length=v,r.directionalShadowMatrix.length=f,r.pointShadowMatrix.length=g,r.spotShadowMatrix.length=v,x.directionalLength=h,x.pointLength=u,x.spotLength=d,x.rectAreaLength=p,x.hemiLength=m,x.numDirectionalShadows=f,x.numPointShadows=g,x.numSpotShadows=v,r.version=ks++)},setupView:function(t,e){let n=0,i=0,l=0,c=0,h=0;const u=e.matrixWorldInverse;for(let e=0,d=t.length;e=n.get(i).length?(s=new js(t,e),n.get(i).push(s)):s=n.get(i)[r],s},dispose:function(){n=new WeakMap}}}class Xs extends bn{constructor(t){super(),this.type="MeshDepthMaterial",this.depthPacking=3200,this.map=null,this.alphaMap=null,this.displacementMap=null,this.displacementScale=1,this.displacementBias=0,this.wireframe=!1,this.wireframeLinewidth=1,this.setValues(t)}copy(t){return super.copy(t),this.depthPacking=t.depthPacking,this.map=t.map,this.alphaMap=t.alphaMap,this.displacementMap=t.displacementMap,this.displacementScale=t.displacementScale,this.displacementBias=t.displacementBias,this.wireframe=t.wireframe,this.wireframeLinewidth=t.wireframeLinewidth,this}}Xs.prototype.isMeshDepthMaterial=!0;class Js extends bn{constructor(t){super(),this.type="MeshDistanceMaterial",this.referencePosition=new se,this.nearDistance=1,this.farDistance=1e3,this.map=null,this.alphaMap=null,this.displacementMap=null,this.displacementScale=1,this.displacementBias=0,this.setValues(t)}copy(t){return super.copy(t),this.referencePosition.copy(t.referencePosition),this.nearDistance=t.nearDistance,this.farDistance=t.farDistance,this.map=t.map,this.alphaMap=t.alphaMap,this.displacementMap=t.displacementMap,this.displacementScale=t.displacementScale,this.displacementBias=t.displacementBias,this}}Js.prototype.isMeshDistanceMaterial=!0;function Ys(t,e,n){let i=new Ei;const r=new Rt,s=new Rt,a=new Kt,o=new Xs({depthPacking:3201}),l=new Js,c={},h=n.maxTextureSize,u={0:1,1:0,2:2},p=new pi({defines:{VSM_SAMPLES:8},uniforms:{shadow_pass:{value:null},resolution:{value:new Rt},radius:{value:4}},vertexShader:"void main() {\n\tgl_Position = vec4( position, 1.0 );\n}",fragmentShader:"uniform sampler2D shadow_pass;\nuniform vec2 resolution;\nuniform float radius;\n#include \nvoid main() {\n\tconst float samples = float( VSM_SAMPLES );\n\tfloat mean = 0.0;\n\tfloat squared_mean = 0.0;\n\tfloat uvStride = samples <= 1.0 ? 0.0 : 2.0 / ( samples - 1.0 );\n\tfloat uvStart = samples <= 1.0 ? 0.0 : - 1.0;\n\tfor ( float i = 0.0; i < samples; i ++ ) {\n\t\tfloat uvOffset = uvStart + i * uvStride;\n\t\t#ifdef HORIZONTAL_PASS\n\t\t\tvec2 distribution = unpackRGBATo2Half( texture2D( shadow_pass, ( gl_FragCoord.xy + vec2( uvOffset, 0.0 ) * radius ) / resolution ) );\n\t\t\tmean += distribution.x;\n\t\t\tsquared_mean += distribution.y * distribution.y + distribution.x * distribution.x;\n\t\t#else\n\t\t\tfloat depth = unpackRGBAToDepth( texture2D( shadow_pass, ( gl_FragCoord.xy + vec2( 0.0, uvOffset ) * radius ) / resolution ) );\n\t\t\tmean += depth;\n\t\t\tsquared_mean += depth * depth;\n\t\t#endif\n\t}\n\tmean = mean / samples;\n\tsquared_mean = squared_mean / samples;\n\tfloat std_dev = sqrt( squared_mean - mean * mean );\n\tgl_FragColor = pack2HalfToRGBA( vec2( mean, std_dev ) );\n}"}),m=p.clone();m.defines.HORIZONTAL_PASS=1;const f=new Vn;f.setAttribute("position",new Tn(new Float32Array([-1,-1,.5,3,-1,.5,-1,3,.5]),3));const g=new oi(f,p),v=this;function y(n,i){const r=e.update(g);p.defines.VSM_SAMPLES!==n.blurSamples&&(p.defines.VSM_SAMPLES=n.blurSamples,m.defines.VSM_SAMPLES=n.blurSamples,p.needsUpdate=!0,m.needsUpdate=!0),p.uniforms.shadow_pass.value=n.map.texture,p.uniforms.resolution.value=n.mapSize,p.uniforms.radius.value=n.radius,t.setRenderTarget(n.mapPass),t.clear(),t.renderBufferDirect(i,null,r,p,g,null),m.uniforms.shadow_pass.value=n.mapPass.texture,m.uniforms.resolution.value=n.mapSize,m.uniforms.radius.value=n.radius,t.setRenderTarget(n.map),t.clear(),t.renderBufferDirect(i,null,r,m,g,null)}function x(e,n,i,r,s,a){let h=null;const d=!0===i.isPointLight?e.customDistanceMaterial:e.customDepthMaterial;if(h=void 0!==d?d:!0===i.isPointLight?l:o,t.localClippingEnabled&&!0===n.clipShadows&&0!==n.clippingPlanes.length||n.displacementMap&&0!==n.displacementScale||n.alphaMap&&n.alphaTest>0){const t=h.uuid,e=n.uuid;let i=c[t];void 0===i&&(i={},c[t]=i);let r=i[e];void 0===r&&(r=h.clone(),i[e]=r),h=r}return h.visible=n.visible,h.wireframe=n.wireframe,h.side=3===a?null!==n.shadowSide?n.shadowSide:n.side:null!==n.shadowSide?n.shadowSide:u[n.side],h.alphaMap=n.alphaMap,h.alphaTest=n.alphaTest,h.clipShadows=n.clipShadows,h.clippingPlanes=n.clippingPlanes,h.clipIntersection=n.clipIntersection,h.displacementMap=n.displacementMap,h.displacementScale=n.displacementScale,h.displacementBias=n.displacementBias,h.wireframeLinewidth=n.wireframeLinewidth,h.linewidth=n.linewidth,!0===i.isPointLight&&!0===h.isMeshDistanceMaterial&&(h.referencePosition.setFromMatrixPosition(i.matrixWorld),h.nearDistance=r,h.farDistance=s),h}function _(n,r,s,a,o){if(!1===n.visible)return;if(n.layers.test(r.layers)&&(n.isMesh||n.isLine||n.isPoints)&&(n.castShadow||n.receiveShadow&&3===o)&&(!n.frustumCulled||i.intersectsObject(n))){n.modelViewMatrix.multiplyMatrices(s.matrixWorldInverse,n.matrixWorld);const i=e.update(n),r=n.material;if(Array.isArray(r)){const e=i.groups;for(let l=0,c=e.length;lh||r.y>h)&&(r.x>h&&(s.x=Math.floor(h/m.x),r.x=s.x*m.x,u.mapSize.x=s.x),r.y>h&&(s.y=Math.floor(h/m.y),r.y=s.y*m.y,u.mapSize.y=s.y)),null!==u.map||u.isPointLightShadow||3!==this.type||(u.map=new Qt(r.x,r.y),u.map.texture.name=c.name+".shadowMap",u.mapPass=new Qt(r.x,r.y),u.camera.updateProjectionMatrix()),null===u.map){const t={minFilter:d,magFilter:d,format:S};u.map=new Qt(r.x,r.y,t),u.map.texture.name=c.name+".shadowMap",u.camera.updateProjectionMatrix()}t.setRenderTarget(u.map),t.clear();const f=u.getViewportCount();for(let t=0;t=1):-1!==L.indexOf("OpenGL ES")&&(C=parseFloat(/^OpenGL ES (\d)/.exec(L)[1]),R=C>=2);let P=null,D={};const I=t.getParameter(3088),N=t.getParameter(2978),B=(new Kt).fromArray(I),z=(new Kt).fromArray(N);function O(e,n,i){const r=new Uint8Array(4),s=t.createTexture();t.bindTexture(e,s),t.texParameteri(e,10241,9728),t.texParameteri(e,10240,9728);for(let e=0;ei||t.height>i)&&(r=i/Math.max(t.width,t.height)),r<1||!0===e){if("undefined"!=typeof HTMLImageElement&&t instanceof HTMLImageElement||"undefined"!=typeof HTMLCanvasElement&&t instanceof HTMLCanvasElement||"undefined"!=typeof ImageBitmap&&t instanceof ImageBitmap){const i=e?Et:Math.floor,s=i(r*t.width),a=i(r*t.height);void 0===I&&(I=z(s,a));const o=n?z(s,a):I;o.width=s,o.height=a;return o.getContext("2d").drawImage(t,0,0,s,a),console.warn("THREE.WebGLRenderer: Texture has been resized from ("+t.width+"x"+t.height+") to ("+s+"x"+a+")."),o}return"data"in t&&console.warn("THREE.WebGLRenderer: Image in DataTexture is too big ("+t.width+"x"+t.height+")."),t}return t}function U(t){return St(t.width)&&St(t.height)}function F(t,e){return t.generateMipmaps&&e&&t.minFilter!==d&&t.minFilter!==f}function H(e){t.generateMipmap(e)}function G(n,i,r,s,a=!1){if(!1===o)return i;if(null!==n){if(void 0!==t[n])return t[n];console.warn("THREE.WebGLRenderer: Attempt to use non-existing WebGL internal format '"+n+"'")}let l=i;return 6403===i&&(5126===r&&(l=33326),5131===r&&(l=33325),5121===r&&(l=33321)),33319===i&&(5126===r&&(l=33328),5131===r&&(l=33327),5121===r&&(l=33323)),6408===i&&(5126===r&&(l=34836),5131===r&&(l=34842),5121===r&&(l=s===ot&&!1===a?35907:32856),32819===r&&(l=32854),32820===r&&(l=32855)),33325!==l&&33326!==l&&33327!==l&&33328!==l&&34842!==l&&34836!==l||e.get("EXT_color_buffer_float"),l}function k(t,e,n){return!0===F(t,n)||t.isFramebufferTexture&&t.minFilter!==d&&t.minFilter!==f?Math.log2(Math.max(e.width,e.height))+1:void 0!==t.mipmaps&&t.mipmaps.length>0?t.mipmaps.length:t.isCompressedTexture&&Array.isArray(t.image)?e.mipmaps.length:1}function V(t){return t===d||t===p||t===m?9728:9729}function W(t){const e=t.target;e.removeEventListener("dispose",W),function(t){const e=i.get(t);if(void 0===e.__webglInit)return;const n=t.source,r=N.get(n);if(r){const i=r[e.__cacheKey];i.usedTimes--,0===i.usedTimes&&q(t),0===Object.keys(r).length&&N.delete(n)}i.remove(t)}(e),e.isVideoTexture&&D.delete(e)}function j(e){const n=e.target;n.removeEventListener("dispose",j),function(e){const n=e.texture,r=i.get(e),s=i.get(n);void 0!==s.__webglTexture&&(t.deleteTexture(s.__webglTexture),a.memory.textures--);e.depthTexture&&e.depthTexture.dispose();if(e.isWebGLCubeRenderTarget)for(let e=0;e<6;e++)t.deleteFramebuffer(r.__webglFramebuffer[e]),r.__webglDepthbuffer&&t.deleteRenderbuffer(r.__webglDepthbuffer[e]);else t.deleteFramebuffer(r.__webglFramebuffer),r.__webglDepthbuffer&&t.deleteRenderbuffer(r.__webglDepthbuffer),r.__webglMultisampledFramebuffer&&t.deleteFramebuffer(r.__webglMultisampledFramebuffer),r.__webglColorRenderbuffer&&t.deleteRenderbuffer(r.__webglColorRenderbuffer),r.__webglDepthRenderbuffer&&t.deleteRenderbuffer(r.__webglDepthRenderbuffer);if(e.isWebGLMultipleRenderTargets)for(let e=0,r=n.length;e0&&r.__version!==t.version){const n=t.image;if(null===n)console.warn("THREE.WebGLRenderer: Texture marked for update but no image data found.");else{if(!1!==n.complete)return void $(r,t,e);console.warn("THREE.WebGLRenderer: Texture marked for update but image is incomplete")}}n.activeTexture(33984+e),n.bindTexture(3553,r.__webglTexture)}const Y={[c]:10497,[h]:33071,[u]:33648},Z={[d]:9728,[p]:9984,[m]:9986,[f]:9729,[g]:9985,[v]:9987};function K(n,s,a){if(a?(t.texParameteri(n,10242,Y[s.wrapS]),t.texParameteri(n,10243,Y[s.wrapT]),32879!==n&&35866!==n||t.texParameteri(n,32882,Y[s.wrapR]),t.texParameteri(n,10240,Z[s.magFilter]),t.texParameteri(n,10241,Z[s.minFilter])):(t.texParameteri(n,10242,33071),t.texParameteri(n,10243,33071),32879!==n&&35866!==n||t.texParameteri(n,32882,33071),s.wrapS===h&&s.wrapT===h||console.warn("THREE.WebGLRenderer: Texture is not power of two. Texture.wrapS and Texture.wrapT should be set to THREE.ClampToEdgeWrapping."),t.texParameteri(n,10240,V(s.magFilter)),t.texParameteri(n,10241,V(s.minFilter)),s.minFilter!==d&&s.minFilter!==f&&console.warn("THREE.WebGLRenderer: Texture is not power of two. Texture.minFilter should be set to THREE.NearestFilter or THREE.LinearFilter.")),!0===e.has("EXT_texture_filter_anisotropic")){const a=e.get("EXT_texture_filter_anisotropic");if(s.type===b&&!1===e.has("OES_texture_float_linear"))return;if(!1===o&&s.type===M&&!1===e.has("OES_texture_half_float_linear"))return;(s.anisotropy>1||i.get(s).__currentAnisotropy)&&(t.texParameterf(n,a.TEXTURE_MAX_ANISOTROPY_EXT,Math.min(s.anisotropy,r.getMaxAnisotropy())),i.get(s).__currentAnisotropy=s.anisotropy)}}function Q(e,n){let i=!1;void 0===e.__webglInit&&(e.__webglInit=!0,n.addEventListener("dispose",W));const r=n.source;let s=N.get(r);void 0===s&&(s={},N.set(r,s));const o=function(t){const e=[];return e.push(t.wrapS),e.push(t.wrapT),e.push(t.magFilter),e.push(t.minFilter),e.push(t.anisotropy),e.push(t.internalFormat),e.push(t.format),e.push(t.type),e.push(t.generateMipmaps),e.push(t.premultiplyAlpha),e.push(t.flipY),e.push(t.unpackAlignment),e.push(t.encoding),e.join()}(n);if(o!==e.__cacheKey){void 0===s[o]&&(s[o]={texture:t.createTexture(),usedTimes:0},a.memory.textures++,i=!0),s[o].usedTimes++;const r=s[e.__cacheKey];void 0!==r&&(s[e.__cacheKey].usedTimes--,0===r.usedTimes&&q(n)),e.__cacheKey=o,e.__webglTexture=s[o].texture}return i}function $(e,i,r){let a=3553;i.isDataArrayTexture&&(a=35866),i.isData3DTexture&&(a=32879);const l=Q(e,i),c=i.source;if(n.activeTexture(33984+r),n.bindTexture(a,e.__webglTexture),c.version!==c.__currentVersion||!0===l){t.pixelStorei(37440,i.flipY),t.pixelStorei(37441,i.premultiplyAlpha),t.pixelStorei(3317,i.unpackAlignment),t.pixelStorei(37443,0);const r=function(t){return!o&&(t.wrapS!==h||t.wrapT!==h||t.minFilter!==d&&t.minFilter!==f)}(i)&&!1===U(i.image);let u=O(i.image,r,!1,R);u=st(i,u);const p=U(u)||o,m=s.convert(i.format,i.encoding);let g,v=s.convert(i.type),y=G(i.internalFormat,m,v,i.encoding,i.isVideoTexture);K(a,i,p);const M=i.mipmaps,A=o&&!0!==i.isVideoTexture,C=void 0===e.__version||!0===l,L=k(i,u,p);if(i.isDepthTexture)y=6402,o?y=i.type===b?36012:i.type===_?33190:i.type===w?35056:33189:i.type===b&&console.error("WebGLRenderer: Floating point depth texture requires WebGL2."),i.format===T&&6402===y&&i.type!==x&&i.type!==_&&(console.warn("THREE.WebGLRenderer: Use UnsignedShortType or UnsignedIntType for DepthFormat DepthTexture."),i.type=x,v=s.convert(i.type)),i.format===E&&6402===y&&(y=34041,i.type!==w&&(console.warn("THREE.WebGLRenderer: Use UnsignedInt248Type for DepthStencilFormat DepthTexture."),i.type=w,v=s.convert(i.type))),C&&(A?n.texStorage2D(3553,1,y,u.width,u.height):n.texImage2D(3553,0,y,u.width,u.height,0,m,v,null));else if(i.isDataTexture)if(M.length>0&&p){A&&C&&n.texStorage2D(3553,L,y,M[0].width,M[0].height);for(let t=0,e=M.length;t>=1,e>>=1}}else if(M.length>0&&p){A&&C&&n.texStorage2D(3553,L,y,M[0].width,M[0].height);for(let t=0,e=M.length;t0&&!0===e.has("WEBGL_multisampled_render_to_texture")&&!1!==n.__useRenderToTexture}function st(t,n){const i=t.encoding,r=t.format,s=t.type;return!0===t.isCompressedTexture||!0===t.isVideoTexture||t.format===mt||i!==at&&(i===ot?!1===o?!0===e.has("EXT_sRGB")&&r===S?(t.format=mt,t.minFilter=f,t.generateMipmaps=!1):n=qt.sRGBToLinear(n):r===S&&s===y||console.warn("THREE.WebGLTextures: sRGB encoded textures have to use RGBAFormat and UnsignedByteType."):console.error("THREE.WebGLTextures: Unsupported texture encoding:",i)),n}this.allocateTextureUnit=function(){const t=X;return t>=l&&console.warn("THREE.WebGLTextures: Trying to use "+t+" texture units while this GPU supports only "+l),X+=1,t},this.resetTextureUnits=function(){X=0},this.setTexture2D=J,this.setTexture2DArray=function(t,e){const r=i.get(t);t.version>0&&r.__version!==t.version?$(r,t,e):(n.activeTexture(33984+e),n.bindTexture(35866,r.__webglTexture))},this.setTexture3D=function(t,e){const r=i.get(t);t.version>0&&r.__version!==t.version?$(r,t,e):(n.activeTexture(33984+e),n.bindTexture(32879,r.__webglTexture))},this.setTextureCube=function(e,r){const a=i.get(e);e.version>0&&a.__version!==e.version?function(e,i,r){if(6!==i.image.length)return;const a=Q(e,i),l=i.source;if(n.activeTexture(33984+r),n.bindTexture(34067,e.__webglTexture),l.version!==l.__currentVersion||!0===a){t.pixelStorei(37440,i.flipY),t.pixelStorei(37441,i.premultiplyAlpha),t.pixelStorei(3317,i.unpackAlignment),t.pixelStorei(37443,0);const r=i.isCompressedTexture||i.image[0].isCompressedTexture,a=i.image[0]&&i.image[0].isDataTexture,c=[];for(let t=0;t<6;t++)c[t]=r||a?a?i.image[t].image:i.image[t]:O(i.image[t],!1,!0,A),c[t]=st(i,c[t]);const h=c[0],u=U(h)||o,d=s.convert(i.format,i.encoding),p=s.convert(i.type),m=G(i.internalFormat,d,p,i.encoding),f=o&&!0!==i.isVideoTexture,g=void 0===e.__version;let v,y=k(i,h,u);if(K(34067,i,u),r){f&&g&&n.texStorage2D(34067,y,m,h.width,h.height);for(let t=0;t<6;t++){v=c[t].mipmaps;for(let e=0;e0&&y++,n.texStorage2D(34067,y,m,c[0].width,c[0].height));for(let t=0;t<6;t++)if(a){f?n.texSubImage2D(34069+t,0,0,0,c[t].width,c[t].height,d,p,c[t].data):n.texImage2D(34069+t,0,m,c[t].width,c[t].height,0,d,p,c[t].data);for(let e=0;e0&&!1===rt(e)){c.__webglMultisampledFramebuffer=t.createFramebuffer(),c.__webglColorRenderbuffer=t.createRenderbuffer(),t.bindRenderbuffer(36161,c.__webglColorRenderbuffer);const i=s.convert(l.format,l.encoding),r=s.convert(l.type),a=G(l.internalFormat,i,r,l.encoding),o=it(e);t.renderbufferStorageMultisample(36161,o,a,e.width,e.height),n.bindFramebuffer(36160,c.__webglMultisampledFramebuffer),t.framebufferRenderbuffer(36160,36064,36161,c.__webglColorRenderbuffer),t.bindRenderbuffer(36161,null),e.depthBuffer&&(c.__webglDepthRenderbuffer=t.createRenderbuffer(),et(c.__webglDepthRenderbuffer,e,!0)),n.bindFramebuffer(36160,null)}if(u){n.bindTexture(34067,h.__webglTexture),K(34067,l,p);for(let t=0;t<6;t++)tt(c.__webglFramebuffer[t],e,l,36064,34069+t);F(l,p)&&H(34067),n.unbindTexture()}else if(d){const t=e.texture;for(let r=0,s=t.length;r0&&!1===rt(e)){const r=e.width,s=e.height;let a=16384;const o=[36064],l=e.stencilBuffer?33306:36096;e.depthBuffer&&o.push(l);const c=i.get(e),h=void 0!==c.__ignoreDepthValues&&c.__ignoreDepthValues;!1===h&&(e.depthBuffer&&(a|=256),e.stencilBuffer&&(a|=1024)),n.bindFramebuffer(36008,c.__webglMultisampledFramebuffer),n.bindFramebuffer(36009,c.__webglFramebuffer),!0===h&&(t.invalidateFramebuffer(36008,[l]),t.invalidateFramebuffer(36009,[l])),t.blitFramebuffer(0,0,r,s,0,0,r,s,a,9728),P&&t.invalidateFramebuffer(36008,o),n.bindFramebuffer(36008,null),n.bindFramebuffer(36009,c.__webglMultisampledFramebuffer)}},this.setupDepthRenderbuffer=nt,this.setupFrameBufferTexture=tt,this.useMultisampledRTT=rt}function Qs(t,e,n){const i=n.isWebGL2;return{convert:function(n,r=null){let s;if(n===y)return 5121;if(1017===n)return 32819;if(1018===n)return 32820;if(1010===n)return 5120;if(1011===n)return 5122;if(n===x)return 5123;if(1013===n)return 5124;if(n===_)return 5125;if(n===b)return 5126;if(n===M)return i?5131:(s=e.get("OES_texture_half_float"),null!==s?s.HALF_FLOAT_OES:null);if(1021===n)return 6406;if(n===S)return 6408;if(1024===n)return 6409;if(1025===n)return 6410;if(n===T)return 6402;if(n===E)return 34041;if(1028===n)return 6403;if(1022===n)return console.warn("THREE.WebGLRenderer: THREE.RGBFormat has been removed. Use THREE.RGBAFormat instead. https://github.com/mrdoob/three.js/pull/23228"),6408;if(n===mt)return s=e.get("EXT_sRGB"),null!==s?s.SRGB_ALPHA_EXT:null;if(1029===n)return 36244;if(1030===n)return 33319;if(1031===n)return 33320;if(1033===n)return 36249;if(n===A||n===R||n===C||n===L)if(r===ot){if(s=e.get("WEBGL_compressed_texture_s3tc_srgb"),null===s)return null;if(n===A)return s.COMPRESSED_SRGB_S3TC_DXT1_EXT;if(n===R)return s.COMPRESSED_SRGB_ALPHA_S3TC_DXT1_EXT;if(n===C)return s.COMPRESSED_SRGB_ALPHA_S3TC_DXT3_EXT;if(n===L)return s.COMPRESSED_SRGB_ALPHA_S3TC_DXT5_EXT}else{if(s=e.get("WEBGL_compressed_texture_s3tc"),null===s)return null;if(n===A)return s.COMPRESSED_RGB_S3TC_DXT1_EXT;if(n===R)return s.COMPRESSED_RGBA_S3TC_DXT1_EXT;if(n===C)return s.COMPRESSED_RGBA_S3TC_DXT3_EXT;if(n===L)return s.COMPRESSED_RGBA_S3TC_DXT5_EXT}if(n===P||n===D||n===I||n===N){if(s=e.get("WEBGL_compressed_texture_pvrtc"),null===s)return null;if(n===P)return s.COMPRESSED_RGB_PVRTC_4BPPV1_IMG;if(n===D)return s.COMPRESSED_RGB_PVRTC_2BPPV1_IMG;if(n===I)return s.COMPRESSED_RGBA_PVRTC_4BPPV1_IMG;if(n===N)return s.COMPRESSED_RGBA_PVRTC_2BPPV1_IMG}if(36196===n)return s=e.get("WEBGL_compressed_texture_etc1"),null!==s?s.COMPRESSED_RGB_ETC1_WEBGL:null;if(n===B||n===z){if(s=e.get("WEBGL_compressed_texture_etc"),null===s)return null;if(n===B)return r===ot?s.COMPRESSED_SRGB8_ETC2:s.COMPRESSED_RGB8_ETC2;if(n===z)return r===ot?s.COMPRESSED_SRGB8_ALPHA8_ETC2_EAC:s.COMPRESSED_RGBA8_ETC2_EAC}if(n===O||n===U||n===F||n===H||n===G||n===k||n===V||n===W||n===j||n===q||n===X||n===J||n===Y||n===Z){if(s=e.get("WEBGL_compressed_texture_astc"),null===s)return null;if(n===O)return r===ot?s.COMPRESSED_SRGB8_ALPHA8_ASTC_4x4_KHR:s.COMPRESSED_RGBA_ASTC_4x4_KHR;if(n===U)return r===ot?s.COMPRESSED_SRGB8_ALPHA8_ASTC_5x4_KHR:s.COMPRESSED_RGBA_ASTC_5x4_KHR;if(n===F)return r===ot?s.COMPRESSED_SRGB8_ALPHA8_ASTC_5x5_KHR:s.COMPRESSED_RGBA_ASTC_5x5_KHR;if(n===H)return r===ot?s.COMPRESSED_SRGB8_ALPHA8_ASTC_6x5_KHR:s.COMPRESSED_RGBA_ASTC_6x5_KHR;if(n===G)return r===ot?s.COMPRESSED_SRGB8_ALPHA8_ASTC_6x6_KHR:s.COMPRESSED_RGBA_ASTC_6x6_KHR;if(n===k)return r===ot?s.COMPRESSED_SRGB8_ALPHA8_ASTC_8x5_KHR:s.COMPRESSED_RGBA_ASTC_8x5_KHR;if(n===V)return r===ot?s.COMPRESSED_SRGB8_ALPHA8_ASTC_8x6_KHR:s.COMPRESSED_RGBA_ASTC_8x6_KHR;if(n===W)return r===ot?s.COMPRESSED_SRGB8_ALPHA8_ASTC_8x8_KHR:s.COMPRESSED_RGBA_ASTC_8x8_KHR;if(n===j)return r===ot?s.COMPRESSED_SRGB8_ALPHA8_ASTC_10x5_KHR:s.COMPRESSED_RGBA_ASTC_10x5_KHR;if(n===q)return r===ot?s.COMPRESSED_SRGB8_ALPHA8_ASTC_10x6_KHR:s.COMPRESSED_RGBA_ASTC_10x6_KHR;if(n===X)return r===ot?s.COMPRESSED_SRGB8_ALPHA8_ASTC_10x8_KHR:s.COMPRESSED_RGBA_ASTC_10x8_KHR;if(n===J)return r===ot?s.COMPRESSED_SRGB8_ALPHA8_ASTC_10x10_KHR:s.COMPRESSED_RGBA_ASTC_10x10_KHR;if(n===Y)return r===ot?s.COMPRESSED_SRGB8_ALPHA8_ASTC_12x10_KHR:s.COMPRESSED_RGBA_ASTC_12x10_KHR;if(n===Z)return r===ot?s.COMPRESSED_SRGB8_ALPHA8_ASTC_12x12_KHR:s.COMPRESSED_RGBA_ASTC_12x12_KHR}if(n===K){if(s=e.get("EXT_texture_compression_bptc"),null===s)return null;if(n===K)return r===ot?s.COMPRESSED_SRGB_ALPHA_BPTC_UNORM_EXT:s.COMPRESSED_RGBA_BPTC_UNORM_EXT}return n===w?i?34042:(s=e.get("WEBGL_depth_texture"),null!==s?s.UNSIGNED_INT_24_8_WEBGL:null):void 0!==t[n]?t[n]:null}}}class $s extends fi{constructor(t=[]){super(),this.cameras=t}}$s.prototype.isArrayCamera=!0;class ta extends ln{constructor(){super(),this.type="Group"}}ta.prototype.isGroup=!0;const ea={type:"move"};class na{constructor(){this._targetRay=null,this._grip=null,this._hand=null}getHandSpace(){return null===this._hand&&(this._hand=new ta,this._hand.matrixAutoUpdate=!1,this._hand.visible=!1,this._hand.joints={},this._hand.inputState={pinching:!1}),this._hand}getTargetRaySpace(){return null===this._targetRay&&(this._targetRay=new ta,this._targetRay.matrixAutoUpdate=!1,this._targetRay.visible=!1,this._targetRay.hasLinearVelocity=!1,this._targetRay.linearVelocity=new se,this._targetRay.hasAngularVelocity=!1,this._targetRay.angularVelocity=new se),this._targetRay}getGripSpace(){return null===this._grip&&(this._grip=new ta,this._grip.matrixAutoUpdate=!1,this._grip.visible=!1,this._grip.hasLinearVelocity=!1,this._grip.linearVelocity=new se,this._grip.hasAngularVelocity=!1,this._grip.angularVelocity=new se),this._grip}dispatchEvent(t){return null!==this._targetRay&&this._targetRay.dispatchEvent(t),null!==this._grip&&this._grip.dispatchEvent(t),null!==this._hand&&this._hand.dispatchEvent(t),this}disconnect(t){return this.dispatchEvent({type:"disconnected",data:t}),null!==this._targetRay&&(this._targetRay.visible=!1),null!==this._grip&&(this._grip.visible=!1),null!==this._hand&&(this._hand.visible=!1),this}update(t,e,n){let i=null,r=null,s=null;const a=this._targetRay,o=this._grip,l=this._hand;if(t&&"visible-blurred"!==e.session.visibilityState)if(null!==a&&(i=e.getPose(t.targetRaySpace,n),null!==i&&(a.matrix.fromArray(i.transform.matrix),a.matrix.decompose(a.position,a.rotation,a.scale),i.linearVelocity?(a.hasLinearVelocity=!0,a.linearVelocity.copy(i.linearVelocity)):a.hasLinearVelocity=!1,i.angularVelocity?(a.hasAngularVelocity=!0,a.angularVelocity.copy(i.angularVelocity)):a.hasAngularVelocity=!1,this.dispatchEvent(ea))),l&&t.hand){s=!0;for(const i of t.hand.values()){const t=e.getJointPose(i,n);if(void 0===l.joints[i.jointName]){const t=new ta;t.matrixAutoUpdate=!1,t.visible=!1,l.joints[i.jointName]=t,l.add(t)}const r=l.joints[i.jointName];null!==t&&(r.matrix.fromArray(t.transform.matrix),r.matrix.decompose(r.position,r.rotation,r.scale),r.jointRadius=t.radius),r.visible=null!==t}const i=l.joints["index-finger-tip"],r=l.joints["thumb-tip"],a=i.position.distanceTo(r.position),o=.02,c=.005;l.inputState.pinching&&a>o+c?(l.inputState.pinching=!1,this.dispatchEvent({type:"pinchend",handedness:t.handedness,target:this})):!l.inputState.pinching&&a<=o-c&&(l.inputState.pinching=!0,this.dispatchEvent({type:"pinchstart",handedness:t.handedness,target:this}))}else null!==o&&t.gripSpace&&(r=e.getPose(t.gripSpace,n),null!==r&&(o.matrix.fromArray(r.transform.matrix),o.matrix.decompose(o.position,o.rotation,o.scale),r.linearVelocity?(o.hasLinearVelocity=!0,o.linearVelocity.copy(r.linearVelocity)):o.hasLinearVelocity=!1,r.angularVelocity?(o.hasAngularVelocity=!0,o.angularVelocity.copy(r.angularVelocity)):o.hasAngularVelocity=!1));return null!==a&&(a.visible=null!==i),null!==o&&(o.visible=null!==r),null!==l&&(l.visible=null!==s),this}}class ia extends Zt{constructor(t,e,n,i,r,s,a,o,l,c){if((c=void 0!==c?c:T)!==T&&c!==E)throw new Error("DepthTexture format must be either THREE.DepthFormat or THREE.DepthStencilFormat");void 0===n&&c===T&&(n=x),void 0===n&&c===E&&(n=w),super(null,i,r,s,a,o,c,n,l),this.image={width:t,height:e},this.magFilter=void 0!==a?a:d,this.minFilter=void 0!==o?o:d,this.flipY=!1,this.generateMipmaps=!1}}ia.prototype.isDepthTexture=!0;class ra extends ft{constructor(t,e){super();const n=this;let i=null,r=1,s=null,a="local-floor",o=null,l=null,c=null,h=null,u=null,d=null;const p=e.getContextAttributes();let m=null,f=null;const g=[],v=new Map,_=new fi;_.layers.enable(1),_.viewport=new Kt;const b=new fi;b.layers.enable(2),b.viewport=new Kt;const M=[_,b],A=new $s;A.layers.enable(1),A.layers.enable(2);let R=null,C=null;function L(t){const e=v.get(t.inputSource);e&&e.dispatchEvent({type:t.type,data:t.inputSource})}function P(){v.forEach((function(t,e){t.disconnect(e)})),v.clear(),R=null,C=null,t.setRenderTarget(m),u=null,h=null,c=null,i=null,f=null,O.stop(),n.isPresenting=!1,n.dispatchEvent({type:"sessionend"})}function D(t){const e=i.inputSources;for(let t=0;t0&&(n.alphaTest.value=i.alphaTest);const r=e.get(i).envMap;if(r&&(n.envMap.value=r,n.flipEnvMap.value=r.isCubeTexture&&!1===r.isRenderTargetTexture?-1:1,n.reflectivity.value=i.reflectivity,n.ior.value=i.ior,n.refractionRatio.value=i.refractionRatio),i.lightMap){n.lightMap.value=i.lightMap;const e=!0!==t.physicallyCorrectLights?Math.PI:1;n.lightMapIntensity.value=i.lightMapIntensity*e}let s,a;i.aoMap&&(n.aoMap.value=i.aoMap,n.aoMapIntensity.value=i.aoMapIntensity),i.map?s=i.map:i.specularMap?s=i.specularMap:i.displacementMap?s=i.displacementMap:i.normalMap?s=i.normalMap:i.bumpMap?s=i.bumpMap:i.roughnessMap?s=i.roughnessMap:i.metalnessMap?s=i.metalnessMap:i.alphaMap?s=i.alphaMap:i.emissiveMap?s=i.emissiveMap:i.clearcoatMap?s=i.clearcoatMap:i.clearcoatNormalMap?s=i.clearcoatNormalMap:i.clearcoatRoughnessMap?s=i.clearcoatRoughnessMap:i.specularIntensityMap?s=i.specularIntensityMap:i.specularColorMap?s=i.specularColorMap:i.transmissionMap?s=i.transmissionMap:i.thicknessMap?s=i.thicknessMap:i.sheenColorMap?s=i.sheenColorMap:i.sheenRoughnessMap&&(s=i.sheenRoughnessMap),void 0!==s&&(s.isWebGLRenderTarget&&(s=s.texture),!0===s.matrixAutoUpdate&&s.updateMatrix(),n.uvTransform.value.copy(s.matrix)),i.aoMap?a=i.aoMap:i.lightMap&&(a=i.lightMap),void 0!==a&&(a.isWebGLRenderTarget&&(a=a.texture),!0===a.matrixAutoUpdate&&a.updateMatrix(),n.uv2Transform.value.copy(a.matrix))}return{refreshFogUniforms:function(t,e){t.fogColor.value.copy(e.color),e.isFog?(t.fogNear.value=e.near,t.fogFar.value=e.far):e.isFogExp2&&(t.fogDensity.value=e.density)},refreshMaterialUniforms:function(t,i,r,s,a){i.isMeshBasicMaterial||i.isMeshLambertMaterial?n(t,i):i.isMeshToonMaterial?(n(t,i),function(t,e){e.gradientMap&&(t.gradientMap.value=e.gradientMap)}(t,i)):i.isMeshPhongMaterial?(n(t,i),function(t,e){t.specular.value.copy(e.specular),t.shininess.value=Math.max(e.shininess,1e-4)}(t,i)):i.isMeshStandardMaterial?(n(t,i),function(t,n){t.roughness.value=n.roughness,t.metalness.value=n.metalness,n.roughnessMap&&(t.roughnessMap.value=n.roughnessMap);n.metalnessMap&&(t.metalnessMap.value=n.metalnessMap);e.get(n).envMap&&(t.envMapIntensity.value=n.envMapIntensity)}(t,i),i.isMeshPhysicalMaterial&&function(t,e,n){t.ior.value=e.ior,e.sheen>0&&(t.sheenColor.value.copy(e.sheenColor).multiplyScalar(e.sheen),t.sheenRoughness.value=e.sheenRoughness,e.sheenColorMap&&(t.sheenColorMap.value=e.sheenColorMap),e.sheenRoughnessMap&&(t.sheenRoughnessMap.value=e.sheenRoughnessMap));e.clearcoat>0&&(t.clearcoat.value=e.clearcoat,t.clearcoatRoughness.value=e.clearcoatRoughness,e.clearcoatMap&&(t.clearcoatMap.value=e.clearcoatMap),e.clearcoatRoughnessMap&&(t.clearcoatRoughnessMap.value=e.clearcoatRoughnessMap),e.clearcoatNormalMap&&(t.clearcoatNormalScale.value.copy(e.clearcoatNormalScale),t.clearcoatNormalMap.value=e.clearcoatNormalMap,1===e.side&&t.clearcoatNormalScale.value.negate()));e.transmission>0&&(t.transmission.value=e.transmission,t.transmissionSamplerMap.value=n.texture,t.transmissionSamplerSize.value.set(n.width,n.height),e.transmissionMap&&(t.transmissionMap.value=e.transmissionMap),t.thickness.value=e.thickness,e.thicknessMap&&(t.thicknessMap.value=e.thicknessMap),t.attenuationDistance.value=e.attenuationDistance,t.attenuationColor.value.copy(e.attenuationColor));t.specularIntensity.value=e.specularIntensity,t.specularColor.value.copy(e.specularColor),e.specularIntensityMap&&(t.specularIntensityMap.value=e.specularIntensityMap);e.specularColorMap&&(t.specularColorMap.value=e.specularColorMap)}(t,i,a)):i.isMeshMatcapMaterial?(n(t,i),function(t,e){e.matcap&&(t.matcap.value=e.matcap)}(t,i)):i.isMeshDepthMaterial?n(t,i):i.isMeshDistanceMaterial?(n(t,i),function(t,e){t.referencePosition.value.copy(e.referencePosition),t.nearDistance.value=e.nearDistance,t.farDistance.value=e.farDistance}(t,i)):i.isMeshNormalMaterial?n(t,i):i.isLineBasicMaterial?(function(t,e){t.diffuse.value.copy(e.color),t.opacity.value=e.opacity}(t,i),i.isLineDashedMaterial&&function(t,e){t.dashSize.value=e.dashSize,t.totalSize.value=e.dashSize+e.gapSize,t.scale.value=e.scale}(t,i)):i.isPointsMaterial?function(t,e,n,i){t.diffuse.value.copy(e.color),t.opacity.value=e.opacity,t.size.value=e.size*n,t.scale.value=.5*i,e.map&&(t.map.value=e.map);e.alphaMap&&(t.alphaMap.value=e.alphaMap);e.alphaTest>0&&(t.alphaTest.value=e.alphaTest);let r;e.map?r=e.map:e.alphaMap&&(r=e.alphaMap);void 0!==r&&(!0===r.matrixAutoUpdate&&r.updateMatrix(),t.uvTransform.value.copy(r.matrix))}(t,i,r,s):i.isSpriteMaterial?function(t,e){t.diffuse.value.copy(e.color),t.opacity.value=e.opacity,t.rotation.value=e.rotation,e.map&&(t.map.value=e.map);e.alphaMap&&(t.alphaMap.value=e.alphaMap);e.alphaTest>0&&(t.alphaTest.value=e.alphaTest);let n;e.map?n=e.map:e.alphaMap&&(n=e.alphaMap);void 0!==n&&(!0===n.matrixAutoUpdate&&n.updateMatrix(),t.uvTransform.value.copy(n.matrix))}(t,i):i.isShadowMaterial?(t.color.value.copy(i.color),t.opacity.value=i.opacity):i.isShaderMaterial&&(i.uniformsNeedUpdate=!1)}}}function aa(t={}){const e=void 0!==t.canvas?t.canvas:function(){const t=It("canvas");return t.style.display="block",t}(),n=void 0!==t.context?t.context:null,i=void 0===t.depth||t.depth,r=void 0===t.stencil||t.stencil,s=void 0!==t.antialias&&t.antialias,a=void 0===t.premultipliedAlpha||t.premultipliedAlpha,o=void 0!==t.preserveDrawingBuffer&&t.preserveDrawingBuffer,l=void 0!==t.powerPreference?t.powerPreference:"default",c=void 0!==t.failIfMajorPerformanceCaveat&&t.failIfMajorPerformanceCaveat;let h;h=null!==n?n.getContextAttributes().alpha:void 0!==t.alpha&&t.alpha;let u=null,d=null;const p=[],m=[];this.domElement=e,this.debug={checkShaderErrors:!0},this.autoClear=!0,this.autoClearColor=!0,this.autoClearDepth=!0,this.autoClearStencil=!0,this.sortObjects=!0,this.clippingPlanes=[],this.localClippingEnabled=!1,this.outputEncoding=at,this.physicallyCorrectLights=!1,this.toneMapping=0,this.toneMappingExposure=1;const f=this;let g=!1,x=0,_=0,w=null,T=-1,E=null;const A=new Kt,R=new Kt;let C=null,L=e.width,P=e.height,D=1,I=null,N=null;const B=new Kt(0,0,L,P),z=new Kt(0,0,L,P);let O=!1;const U=new Ei;let F=!1,H=!1,G=null;const k=new ze,V=new Rt,W=new se,j={background:null,fog:null,environment:null,overrideMaterial:null,isScene:!0};function q(){return null===w?D:1}let X,J,Y,Z,K,Q,$,tt,et,nt,it,rt,st,ot,lt,ct,ht,ut,dt,pt,mt,ft,gt,vt=n;function yt(t,n){for(let i=0;i0&&function(t,e,n){const i=J.isWebGL2;null===G&&(G=new Qt(1,1,{generateMipmaps:!0,type:X.has("EXT_color_buffer_half_float")?M:y,minFilter:v,samples:i&&!0===s?4:0}));f.getDrawingBufferSize(V),i?G.setSize(V.x,V.y):G.setSize(Et(V.x),Et(V.y));const r=f.getRenderTarget();f.setRenderTarget(G),f.clear();const a=f.toneMapping;f.toneMapping=0,Dt(t,e,n),f.toneMapping=a,Q.updateMultisampleRenderTarget(G),Q.updateRenderTargetMipmap(G),f.setRenderTarget(r)}(r,e,n),i&&Y.viewport(A.copy(i)),r.length>0&&Dt(r,e,n),a.length>0&&Dt(a,e,n),o.length>0&&Dt(o,e,n),Y.buffers.depth.setTest(!0),Y.buffers.depth.setMask(!0),Y.buffers.color.setMask(!0),Y.setPolygonOffset(!1)}function Dt(t,e,n){const i=!0===e.isScene?e.overrideMaterial:null;for(let r=0,s=t.length;r0?m[m.length-1]:null,p.pop(),u=p.length>0?p[p.length-1]:null},this.getActiveCubeFace=function(){return x},this.getActiveMipmapLevel=function(){return _},this.getRenderTarget=function(){return w},this.setRenderTargetTextures=function(t,e,n){K.get(t.texture).__webglTexture=e,K.get(t.depthTexture).__webglTexture=n;const i=K.get(t);i.__hasExternalTextures=!0,i.__hasExternalTextures&&(i.__autoAllocateDepthBuffer=void 0===n,i.__autoAllocateDepthBuffer||!0===X.has("WEBGL_multisampled_render_to_texture")&&(console.warn("THREE.WebGLRenderer: Render-to-texture extension was disabled because an external texture was provided"),i.__useRenderToTexture=!1))},this.setRenderTargetFramebuffer=function(t,e){const n=K.get(t);n.__webglFramebuffer=e,n.__useDefaultFramebuffer=void 0===e},this.setRenderTarget=function(t,e=0,n=0){w=t,x=e,_=n;let i=!0;if(t){const e=K.get(t);void 0!==e.__useDefaultFramebuffer?(Y.bindFramebuffer(36160,null),i=!1):void 0===e.__webglFramebuffer?Q.setupRenderTarget(t):e.__hasExternalTextures&&Q.rebindTextures(t,K.get(t.texture).__webglTexture,K.get(t.depthTexture).__webglTexture)}let r=null,s=!1,a=!1;if(t){const n=t.texture;(n.isData3DTexture||n.isDataArrayTexture)&&(a=!0);const i=K.get(t).__webglFramebuffer;t.isWebGLCubeRenderTarget?(r=i[e],s=!0):r=J.isWebGL2&&t.samples>0&&!1===Q.useMultisampledRTT(t)?K.get(t).__webglMultisampledFramebuffer:i,A.copy(t.viewport),R.copy(t.scissor),C=t.scissorTest}else A.copy(B).multiplyScalar(D).floor(),R.copy(z).multiplyScalar(D).floor(),C=O;if(Y.bindFramebuffer(36160,r)&&J.drawBuffers&&i&&Y.drawBuffers(t,r),Y.viewport(A),Y.scissor(R),Y.setScissorTest(C),s){const i=K.get(t.texture);vt.framebufferTexture2D(36160,36064,34069+e,i.__webglTexture,n)}else if(a){const i=K.get(t.texture),r=e||0;vt.framebufferTextureLayer(36160,36064,i.__webglTexture,n||0,r)}T=-1},this.readRenderTargetPixels=function(t,e,n,i,r,s,a){if(!t||!t.isWebGLRenderTarget)return void console.error("THREE.WebGLRenderer.readRenderTargetPixels: renderTarget is not THREE.WebGLRenderTarget.");let o=K.get(t).__webglFramebuffer;if(t.isWebGLCubeRenderTarget&&void 0!==a&&(o=o[a]),o){Y.bindFramebuffer(36160,o);try{const a=t.texture,o=a.format,l=a.type;if(o!==S&&ft.convert(o)!==vt.getParameter(35739))return void console.error("THREE.WebGLRenderer.readRenderTargetPixels: renderTarget is not in RGBA or implementation defined format.");const c=l===M&&(X.has("EXT_color_buffer_half_float")||J.isWebGL2&&X.has("EXT_color_buffer_float"));if(!(l===y||ft.convert(l)===vt.getParameter(35738)||l===b&&(J.isWebGL2||X.has("OES_texture_float")||X.has("WEBGL_color_buffer_float"))||c))return void console.error("THREE.WebGLRenderer.readRenderTargetPixels: renderTarget is not in UnsignedByteType or implementation defined type.");e>=0&&e<=t.width-i&&n>=0&&n<=t.height-r&&vt.readPixels(e,n,i,r,ft.convert(o),ft.convert(l),s)}finally{const t=null!==w?K.get(w).__webglFramebuffer:null;Y.bindFramebuffer(36160,t)}}},this.copyFramebufferToTexture=function(t,e,n=0){if(!0!==e.isFramebufferTexture)return void console.error("THREE.WebGLRenderer: copyFramebufferToTexture() can only be used with FramebufferTexture.");const i=Math.pow(2,-n),r=Math.floor(e.image.width*i),s=Math.floor(e.image.height*i);Q.setTexture2D(e,0),vt.copyTexSubImage2D(3553,n,0,0,t.x,t.y,r,s),Y.unbindTexture()},this.copyTextureToTexture=function(t,e,n,i=0){const r=e.image.width,s=e.image.height,a=ft.convert(n.format),o=ft.convert(n.type);Q.setTexture2D(n,0),vt.pixelStorei(37440,n.flipY),vt.pixelStorei(37441,n.premultiplyAlpha),vt.pixelStorei(3317,n.unpackAlignment),e.isDataTexture?vt.texSubImage2D(3553,i,t.x,t.y,r,s,a,o,e.image.data):e.isCompressedTexture?vt.compressedTexSubImage2D(3553,i,t.x,t.y,e.mipmaps[0].width,e.mipmaps[0].height,a,e.mipmaps[0].data):vt.texSubImage2D(3553,i,t.x,t.y,a,o,e.image),0===i&&n.generateMipmaps&&vt.generateMipmap(3553),Y.unbindTexture()},this.copyTextureToTexture3D=function(t,e,n,i,r=0){if(f.isWebGL1Renderer)return void console.warn("THREE.WebGLRenderer.copyTextureToTexture3D: can only be used with WebGL2.");const s=t.max.x-t.min.x+1,a=t.max.y-t.min.y+1,o=t.max.z-t.min.z+1,l=ft.convert(i.format),c=ft.convert(i.type);let h;if(i.isData3DTexture)Q.setTexture3D(i,0),h=32879;else{if(!i.isDataArrayTexture)return void console.warn("THREE.WebGLRenderer.copyTextureToTexture3D: only supports THREE.DataTexture3D and THREE.DataTexture2DArray.");Q.setTexture2DArray(i,0),h=35866}vt.pixelStorei(37440,i.flipY),vt.pixelStorei(37441,i.premultiplyAlpha),vt.pixelStorei(3317,i.unpackAlignment);const u=vt.getParameter(3314),d=vt.getParameter(32878),p=vt.getParameter(3316),m=vt.getParameter(3315),g=vt.getParameter(32877),v=n.isCompressedTexture?n.mipmaps[0]:n.image;vt.pixelStorei(3314,v.width),vt.pixelStorei(32878,v.height),vt.pixelStorei(3316,t.min.x),vt.pixelStorei(3315,t.min.y),vt.pixelStorei(32877,t.min.z),n.isDataTexture||n.isData3DTexture?vt.texSubImage3D(h,r,e.x,e.y,e.z,s,a,o,l,c,v.data):n.isCompressedTexture?(console.warn("THREE.WebGLRenderer.copyTextureToTexture3D: untested support for compressed srcTexture."),vt.compressedTexSubImage3D(h,r,e.x,e.y,e.z,s,a,o,l,v.data)):vt.texSubImage3D(h,r,e.x,e.y,e.z,s,a,o,l,c,v),vt.pixelStorei(3314,u),vt.pixelStorei(32878,d),vt.pixelStorei(3316,p),vt.pixelStorei(3315,m),vt.pixelStorei(32877,g),0===r&&i.generateMipmaps&&vt.generateMipmap(h),Y.unbindTexture()},this.initTexture=function(t){Q.setTexture2D(t,0),Y.unbindTexture()},this.resetState=function(){x=0,_=0,w=null,Y.reset(),gt.reset()},"undefined"!=typeof __THREE_DEVTOOLS__&&__THREE_DEVTOOLS__.dispatchEvent(new CustomEvent("observe",{detail:this}))}aa.prototype.isWebGLRenderer=!0;class oa extends aa{}oa.prototype.isWebGL1Renderer=!0;class la{constructor(t,e=25e-5){this.name="",this.color=new Wt(t),this.density=e}clone(){return new la(this.color,this.density)}toJSON(){return{type:"FogExp2",color:this.color.getHex(),density:this.density}}}la.prototype.isFogExp2=!0;class ca{constructor(t,e=1,n=1e3){this.name="",this.color=new Wt(t),this.near=e,this.far=n}clone(){return new ca(this.color,this.near,this.far)}toJSON(){return{type:"Fog",color:this.color.getHex(),near:this.near,far:this.far}}}ca.prototype.isFog=!0;class ha extends ln{constructor(){super(),this.type="Scene",this.background=null,this.environment=null,this.fog=null,this.overrideMaterial=null,this.autoUpdate=!0,"undefined"!=typeof __THREE_DEVTOOLS__&&__THREE_DEVTOOLS__.dispatchEvent(new CustomEvent("observe",{detail:this}))}copy(t,e){return super.copy(t,e),null!==t.background&&(this.background=t.background.clone()),null!==t.environment&&(this.environment=t.environment.clone()),null!==t.fog&&(this.fog=t.fog.clone()),null!==t.overrideMaterial&&(this.overrideMaterial=t.overrideMaterial.clone()),this.autoUpdate=t.autoUpdate,this.matrixAutoUpdate=t.matrixAutoUpdate,this}toJSON(t){const e=super.toJSON(t);return null!==this.fog&&(e.object.fog=this.fog.toJSON()),e}}ha.prototype.isScene=!0;class ua{constructor(t,e){this.array=t,this.stride=e,this.count=void 0!==t?t.length/e:0,this.usage=ut,this.updateRange={offset:0,count:-1},this.version=0,this.uuid=_t()}onUploadCallback(){}set needsUpdate(t){!0===t&&this.version++}setUsage(t){return this.usage=t,this}copy(t){return this.array=new t.array.constructor(t.array),this.count=t.count,this.stride=t.stride,this.usage=t.usage,this}copyAt(t,e,n){t*=this.stride,n*=e.stride;for(let i=0,r=this.stride;it.far||e.push({distance:o,point:ga.clone(),uv:xn.getUV(ga,Ma,wa,Sa,Ta,Ea,Aa,new Rt),face:null,object:this})}copy(t){return super.copy(t),void 0!==t.center&&this.center.copy(t.center),this.material=t.material,this}}function Ca(t,e,n,i,r,s){xa.subVectors(t,n).addScalar(.5).multiply(i),void 0!==r?(_a.x=s*xa.x-r*xa.y,_a.y=r*xa.x+s*xa.y):_a.copy(xa),t.copy(e),t.x+=_a.x,t.y+=_a.y,t.applyMatrix4(ba)}Ra.prototype.isSprite=!0;const La=new se,Pa=new se;class Da extends ln{constructor(){super(),this._currentLevel=0,this.type="LOD",Object.defineProperties(this,{levels:{enumerable:!0,value:[]},isLOD:{value:!0}}),this.autoUpdate=!0}copy(t){super.copy(t,!1);const e=t.levels;for(let t=0,n=e.length;t0){let n,i;for(n=1,i=e.length;n0){La.setFromMatrixPosition(this.matrixWorld);const n=t.ray.origin.distanceTo(La);this.getObjectForDistance(n).raycast(t,e)}}update(t){const e=this.levels;if(e.length>1){La.setFromMatrixPosition(t.matrixWorld),Pa.setFromMatrixPosition(this.matrixWorld);const n=La.distanceTo(Pa)/t.zoom;let i,r;for(e[0].object.visible=!0,i=1,r=e.length;i=e[i].distance;i++)e[i-1].object.visible=!1,e[i].object.visible=!0;for(this._currentLevel=i-1;io)continue;u.applyMatrix4(this.matrixWorld);const d=t.ray.origin.distanceTo(u);dt.far||e.push({distance:d,point:h.clone().applyMatrix4(this.matrixWorld),index:n,face:null,faceIndex:null,object:this})}}else{for(let n=Math.max(0,s.start),i=Math.min(r.count,s.start+s.count)-1;no)continue;u.applyMatrix4(this.matrixWorld);const i=t.ray.origin.distanceTo(u);it.far||e.push({distance:i,point:h.clone().applyMatrix4(this.matrixWorld),index:n,face:null,faceIndex:null,object:this})}}}else n.isGeometry&&console.error("THREE.Line.raycast() no longer supports THREE.Geometry. Use THREE.BufferGeometry instead.")}updateMorphTargets(){const t=this.geometry;if(t.isBufferGeometry){const e=t.morphAttributes,n=Object.keys(e);if(n.length>0){const t=e[n[0]];if(void 0!==t){this.morphTargetInfluences=[],this.morphTargetDictionary={};for(let e=0,n=t.length;e0&&console.error("THREE.Line.updateMorphTargets() does not support THREE.Geometry. Use THREE.BufferGeometry instead.")}}}no.prototype.isLine=!0;const io=new se,ro=new se;class so extends no{constructor(t,e){super(t,e),this.type="LineSegments"}computeLineDistances(){const t=this.geometry;if(t.isBufferGeometry)if(null===t.index){const e=t.attributes.position,n=[];for(let t=0,i=e.count;t0){const t=e[n[0]];if(void 0!==t){this.morphTargetInfluences=[],this.morphTargetDictionary={};for(let e=0,n=t.length;e0&&console.error("THREE.Points.updateMorphTargets() does not support THREE.Geometry. Use THREE.BufferGeometry instead.")}}}function mo(t,e,n,i,r,s,a){const o=co.distanceSqToPoint(t);if(or.far)return;s.push({distance:l,distanceToRay:Math.sqrt(o),point:n,index:e,face:null,object:a})}}po.prototype.isPoints=!0;class fo extends Zt{constructor(t,e,n,i,r,s,a,o,l){super(t,e,n,i,r,s,a,o,l),this.minFilter=void 0!==s?s:f,this.magFilter=void 0!==r?r:f,this.generateMipmaps=!1;const c=this;"requestVideoFrameCallback"in t&&t.requestVideoFrameCallback((function e(){c.needsUpdate=!0,t.requestVideoFrameCallback(e)}))}clone(){return new this.constructor(this.image).copy(this)}update(){const t=this.image;!1==="requestVideoFrameCallback"in t&&t.readyState>=t.HAVE_CURRENT_DATA&&(this.needsUpdate=!0)}}fo.prototype.isVideoTexture=!0;class go extends Zt{constructor(t,e,n){super({width:t,height:e}),this.format=n,this.magFilter=d,this.minFilter=d,this.generateMipmaps=!1,this.needsUpdate=!0}}go.prototype.isFramebufferTexture=!0;class vo extends Zt{constructor(t,e,n,i,r,s,a,o,l,c,h,u){super(null,s,a,o,l,c,i,r,h,u),this.image={width:e,height:n},this.mipmaps=t,this.flipY=!1,this.generateMipmaps=!1}}vo.prototype.isCompressedTexture=!0;class yo extends Zt{constructor(t,e,n,i,r,s,a,o,l){super(t,e,n,i,r,s,a,o,l),this.needsUpdate=!0}}yo.prototype.isCanvasTexture=!0;class xo{constructor(){this.type="Curve",this.arcLengthDivisions=200}getPoint(){return console.warn("THREE.Curve: .getPoint() not implemented."),null}getPointAt(t,e){const n=this.getUtoTmapping(t);return this.getPoint(n,e)}getPoints(t=5){const e=[];for(let n=0;n<=t;n++)e.push(this.getPoint(n/t));return e}getSpacedPoints(t=5){const e=[];for(let n=0;n<=t;n++)e.push(this.getPointAt(n/t));return e}getLength(){const t=this.getLengths();return t[t.length-1]}getLengths(t=this.arcLengthDivisions){if(this.cacheArcLengths&&this.cacheArcLengths.length===t+1&&!this.needsUpdate)return this.cacheArcLengths;this.needsUpdate=!1;const e=[];let n,i=this.getPoint(0),r=0;e.push(0);for(let s=1;s<=t;s++)n=this.getPoint(s/t),r+=n.distanceTo(i),e.push(r),i=n;return this.cacheArcLengths=e,e}updateArcLengths(){this.needsUpdate=!0,this.getLengths()}getUtoTmapping(t,e){const n=this.getLengths();let i=0;const r=n.length;let s;s=e||t*n[r-1];let a,o=0,l=r-1;for(;o<=l;)if(i=Math.floor(o+(l-o)/2),a=n[i]-s,a<0)o=i+1;else{if(!(a>0)){l=i;break}l=i-1}if(i=l,n[i]===s)return i/(r-1);const c=n[i];return(i+(s-c)/(n[i+1]-c))/(r-1)}getTangent(t,e){const n=1e-4;let i=t-n,r=t+n;i<0&&(i=0),r>1&&(r=1);const s=this.getPoint(i),a=this.getPoint(r),o=e||(s.isVector2?new Rt:new se);return o.copy(a).sub(s).normalize(),o}getTangentAt(t,e){const n=this.getUtoTmapping(t);return this.getTangent(n,e)}computeFrenetFrames(t,e){const n=new se,i=[],r=[],s=[],a=new se,o=new ze;for(let e=0;e<=t;e++){const n=e/t;i[e]=this.getTangentAt(n,new se)}r[0]=new se,s[0]=new se;let l=Number.MAX_VALUE;const c=Math.abs(i[0].x),h=Math.abs(i[0].y),u=Math.abs(i[0].z);c<=l&&(l=c,n.set(1,0,0)),h<=l&&(l=h,n.set(0,1,0)),u<=l&&n.set(0,0,1),a.crossVectors(i[0],n).normalize(),r[0].crossVectors(i[0],a),s[0].crossVectors(i[0],r[0]);for(let e=1;e<=t;e++){if(r[e]=r[e-1].clone(),s[e]=s[e-1].clone(),a.crossVectors(i[e-1],i[e]),a.length()>Number.EPSILON){a.normalize();const t=Math.acos(bt(i[e-1].dot(i[e]),-1,1));r[e].applyMatrix4(o.makeRotationAxis(a,t))}s[e].crossVectors(i[e],r[e])}if(!0===e){let e=Math.acos(bt(r[0].dot(r[t]),-1,1));e/=t,i[0].dot(a.crossVectors(r[0],r[t]))>0&&(e=-e);for(let n=1;n<=t;n++)r[n].applyMatrix4(o.makeRotationAxis(i[n],e*n)),s[n].crossVectors(i[n],r[n])}return{tangents:i,normals:r,binormals:s}}clone(){return(new this.constructor).copy(this)}copy(t){return this.arcLengthDivisions=t.arcLengthDivisions,this}toJSON(){const t={metadata:{version:4.5,type:"Curve",generator:"Curve.toJSON"}};return t.arcLengthDivisions=this.arcLengthDivisions,t.type=this.type,t}fromJSON(t){return this.arcLengthDivisions=t.arcLengthDivisions,this}}class _o extends xo{constructor(t=0,e=0,n=1,i=1,r=0,s=2*Math.PI,a=!1,o=0){super(),this.type="EllipseCurve",this.aX=t,this.aY=e,this.xRadius=n,this.yRadius=i,this.aStartAngle=r,this.aEndAngle=s,this.aClockwise=a,this.aRotation=o}getPoint(t,e){const n=e||new Rt,i=2*Math.PI;let r=this.aEndAngle-this.aStartAngle;const s=Math.abs(r)i;)r-=i;r0?0:(Math.floor(Math.abs(l)/r)+1)*r:0===c&&l===r-1&&(l=r-2,c=1),this.closed||l>0?a=i[(l-1)%r]:(wo.subVectors(i[0],i[1]).add(i[0]),a=wo);const h=i[l%r],u=i[(l+1)%r];if(this.closed||l+2i.length-2?i.length-1:s+1],h=i[s>i.length-3?i.length-1:s+2];return n.set(Ro(a,o.x,l.x,c.x,h.x),Ro(a,o.y,l.y,c.y,h.y)),n}copy(t){super.copy(t),this.points=[];for(let e=0,n=t.points.length;e=n){const t=i[r]-n,s=this.curves[r],a=s.getLength(),o=0===a?0:1-t/a;return s.getPointAt(o,e)}r++}return null}getLength(){const t=this.getCurveLengths();return t[t.length-1]}updateArcLengths(){this.needsUpdate=!0,this.cacheLengths=null,this.getCurveLengths()}getCurveLengths(){if(this.cacheLengths&&this.cacheLengths.length===this.curves.length)return this.cacheLengths;const t=[];let e=0;for(let n=0,i=this.curves.length;n1&&!e[e.length-1].equals(e[0])&&e.push(e[0]),e}copy(t){super.copy(t),this.curves=[];for(let e=0,n=t.curves.length;e0){const t=l.getPoint(0);t.equals(this.currentPoint)||this.lineTo(t.x,t.y)}this.curves.push(l);const c=l.getPoint(1);return this.currentPoint.copy(c),this}copy(t){return super.copy(t),this.currentPoint.copy(t.currentPoint),this}toJSON(){const t=super.toJSON();return t.currentPoint=this.currentPoint.toArray(),t}fromJSON(t){return super.fromJSON(t),this.currentPoint.fromArray(t.currentPoint),this}}class Go extends Vn{constructor(t=[new Rt(0,.5),new Rt(.5,0),new Rt(0,-.5)],e=12,n=0,i=2*Math.PI){super(),this.type="LatheGeometry",this.parameters={points:t,segments:e,phiStart:n,phiLength:i},e=Math.floor(e),i=bt(i,0,2*Math.PI);const r=[],s=[],a=[],o=[],l=[],c=1/e,h=new se,u=new Rt,d=new se,p=new se,m=new se;let f=0,g=0;for(let e=0;e<=t.length-1;e++)switch(e){case 0:f=t[e+1].x-t[e].x,g=t[e+1].y-t[e].y,d.x=1*g,d.y=-f,d.z=0*g,m.copy(d),d.normalize(),o.push(d.x,d.y,d.z);break;case t.length-1:o.push(m.x,m.y,m.z);break;default:f=t[e+1].x-t[e].x,g=t[e+1].y-t[e].y,d.x=1*g,d.y=-f,d.z=0*g,p.copy(d),d.x+=m.x,d.y+=m.y,d.z+=m.z,d.normalize(),o.push(d.x,d.y,d.z),m.copy(p)}for(let r=0;r<=e;r++){const d=n+r*c*i,p=Math.sin(d),m=Math.cos(d);for(let n=0;n<=t.length-1;n++){h.x=t[n].x*p,h.y=t[n].y,h.z=t[n].x*m,s.push(h.x,h.y,h.z),u.x=r/e,u.y=n/(t.length-1),a.push(u.x,u.y);const i=o[3*n+0]*p,c=o[3*n+1],d=o[3*n+0]*m;l.push(i,c,d)}}for(let n=0;n0&&v(!0),e>0&&v(!1)),this.setIndex(c),this.setAttribute("position",new Nn(h,3)),this.setAttribute("normal",new Nn(u,3)),this.setAttribute("uv",new Nn(d,2))}static fromJSON(t){return new Wo(t.radiusTop,t.radiusBottom,t.height,t.radialSegments,t.heightSegments,t.openEnded,t.thetaStart,t.thetaLength)}}class jo extends Wo{constructor(t=1,e=1,n=8,i=1,r=!1,s=0,a=2*Math.PI){super(0,t,e,n,i,r,s,a),this.type="ConeGeometry",this.parameters={radius:t,height:e,radialSegments:n,heightSegments:i,openEnded:r,thetaStart:s,thetaLength:a}}static fromJSON(t){return new jo(t.radius,t.height,t.radialSegments,t.heightSegments,t.openEnded,t.thetaStart,t.thetaLength)}}class qo extends Vn{constructor(t=[],e=[],n=1,i=0){super(),this.type="PolyhedronGeometry",this.parameters={vertices:t,indices:e,radius:n,detail:i};const r=[],s=[];function a(t,e,n,i){const r=i+1,s=[];for(let i=0;i<=r;i++){s[i]=[];const a=t.clone().lerp(n,i/r),o=e.clone().lerp(n,i/r),l=r-i;for(let t=0;t<=l;t++)s[i][t]=0===t&&i===r?a:a.clone().lerp(o,t/l)}for(let t=0;t.9&&a<.1&&(e<.2&&(s[t+0]+=1),n<.2&&(s[t+2]+=1),i<.2&&(s[t+4]+=1))}}()}(),this.setAttribute("position",new Nn(r,3)),this.setAttribute("normal",new Nn(r.slice(),3)),this.setAttribute("uv",new Nn(s,2)),0===i?this.computeVertexNormals():this.normalizeNormals()}static fromJSON(t){return new qo(t.vertices,t.indices,t.radius,t.details)}}class Xo extends qo{constructor(t=1,e=0){const n=(1+Math.sqrt(5))/2,i=1/n;super([-1,-1,-1,-1,-1,1,-1,1,-1,-1,1,1,1,-1,-1,1,-1,1,1,1,-1,1,1,1,0,-i,-n,0,-i,n,0,i,-n,0,i,n,-i,-n,0,-i,n,0,i,-n,0,i,n,0,-n,0,-i,n,0,-i,-n,0,i,n,0,i],[3,11,7,3,7,15,3,15,13,7,19,17,7,17,6,7,6,15,17,4,8,17,8,10,17,10,6,8,0,16,8,16,2,8,2,10,0,12,1,0,1,18,0,18,16,6,10,2,6,2,13,6,13,15,2,16,18,2,18,3,2,3,13,18,1,9,18,9,11,18,11,3,4,14,12,4,12,0,4,0,8,11,9,5,11,5,19,11,19,7,19,5,14,19,14,4,19,4,17,1,12,14,1,14,5,1,5,9],t,e),this.type="DodecahedronGeometry",this.parameters={radius:t,detail:e}}static fromJSON(t){return new Xo(t.radius,t.detail)}}const Jo=new se,Yo=new se,Zo=new se,Ko=new xn;class Qo extends Vn{constructor(t=null,e=1){if(super(),this.type="EdgesGeometry",this.parameters={geometry:t,thresholdAngle:e},null!==t){const n=4,i=Math.pow(10,n),r=Math.cos(yt*e),s=t.getIndex(),a=t.getAttribute("position"),o=s?s.count:a.count,l=[0,0,0],c=["a","b","c"],h=new Array(3),u={},d=[];for(let t=0;t80*n){o=c=t[0],l=h=t[1];for(let e=n;ec&&(c=u),d>h&&(h=d);p=Math.max(c-o,h-l),p=0!==p?1/p:0}return il(s,a,n,o,l,p),a};function el(t,e,n,i,r){let s,a;if(r===function(t,e,n,i){let r=0;for(let s=e,a=n-i;s0)for(s=e;s=e;s-=i)a=Ml(s,t[s],t[s+1],a);return a&&gl(a,a.next)&&(wl(a),a=a.next),a}function nl(t,e){if(!t)return t;e||(e=t);let n,i=t;do{if(n=!1,i.steiner||!gl(i,i.next)&&0!==fl(i.prev,i,i.next))i=i.next;else{if(wl(i),i=e=i.prev,i===i.next)break;n=!0}}while(n||i!==e);return e}function il(t,e,n,i,r,s,a){if(!t)return;!a&&s&&function(t,e,n,i){let r=t;do{null===r.z&&(r.z=ul(r.x,r.y,e,n,i)),r.prevZ=r.prev,r.nextZ=r.next,r=r.next}while(r!==t);r.prevZ.nextZ=null,r.prevZ=null,function(t){let e,n,i,r,s,a,o,l,c=1;do{for(n=t,t=null,s=null,a=0;n;){for(a++,i=n,o=0,e=0;e0||l>0&&i;)0!==o&&(0===l||!i||n.z<=i.z)?(r=n,n=n.nextZ,o--):(r=i,i=i.nextZ,l--),s?s.nextZ=r:t=r,r.prevZ=s,s=r;n=i}s.nextZ=null,c*=2}while(a>1)}(r)}(t,i,r,s);let o,l,c=t;for(;t.prev!==t.next;)if(o=t.prev,l=t.next,s?sl(t,i,r,s):rl(t))e.push(o.i/n),e.push(t.i/n),e.push(l.i/n),wl(t),t=l.next,c=l.next;else if((t=l)===c){a?1===a?il(t=al(nl(t),e,n),e,n,i,r,s,2):2===a&&ol(t,e,n,i,r,s):il(nl(t),e,n,i,r,s,1);break}}function rl(t){const e=t.prev,n=t,i=t.next;if(fl(e,n,i)>=0)return!1;let r=t.next.next;for(;r!==t.prev;){if(pl(e.x,e.y,n.x,n.y,i.x,i.y,r.x,r.y)&&fl(r.prev,r,r.next)>=0)return!1;r=r.next}return!0}function sl(t,e,n,i){const r=t.prev,s=t,a=t.next;if(fl(r,s,a)>=0)return!1;const o=r.xs.x?r.x>a.x?r.x:a.x:s.x>a.x?s.x:a.x,h=r.y>s.y?r.y>a.y?r.y:a.y:s.y>a.y?s.y:a.y,u=ul(o,l,e,n,i),d=ul(c,h,e,n,i);let p=t.prevZ,m=t.nextZ;for(;p&&p.z>=u&&m&&m.z<=d;){if(p!==t.prev&&p!==t.next&&pl(r.x,r.y,s.x,s.y,a.x,a.y,p.x,p.y)&&fl(p.prev,p,p.next)>=0)return!1;if(p=p.prevZ,m!==t.prev&&m!==t.next&&pl(r.x,r.y,s.x,s.y,a.x,a.y,m.x,m.y)&&fl(m.prev,m,m.next)>=0)return!1;m=m.nextZ}for(;p&&p.z>=u;){if(p!==t.prev&&p!==t.next&&pl(r.x,r.y,s.x,s.y,a.x,a.y,p.x,p.y)&&fl(p.prev,p,p.next)>=0)return!1;p=p.prevZ}for(;m&&m.z<=d;){if(m!==t.prev&&m!==t.next&&pl(r.x,r.y,s.x,s.y,a.x,a.y,m.x,m.y)&&fl(m.prev,m,m.next)>=0)return!1;m=m.nextZ}return!0}function al(t,e,n){let i=t;do{const r=i.prev,s=i.next.next;!gl(r,s)&&vl(r,i,i.next,s)&&_l(r,s)&&_l(s,r)&&(e.push(r.i/n),e.push(i.i/n),e.push(s.i/n),wl(i),wl(i.next),i=t=s),i=i.next}while(i!==t);return nl(i)}function ol(t,e,n,i,r,s){let a=t;do{let t=a.next.next;for(;t!==a.prev;){if(a.i!==t.i&&ml(a,t)){let o=bl(a,t);return a=nl(a,a.next),o=nl(o,o.next),il(a,e,n,i,r,s),void il(o,e,n,i,r,s)}t=t.next}a=a.next}while(a!==t)}function ll(t,e){return t.x-e.x}function cl(t,e){if(e=function(t,e){let n=e;const i=t.x,r=t.y;let s,a=-1/0;do{if(r<=n.y&&r>=n.next.y&&n.next.y!==n.y){const t=n.x+(r-n.y)*(n.next.x-n.x)/(n.next.y-n.y);if(t<=i&&t>a){if(a=t,t===i){if(r===n.y)return n;if(r===n.next.y)return n.next}s=n.x=n.x&&n.x>=l&&i!==n.x&&pl(rs.x||n.x===s.x&&hl(s,n)))&&(s=n,u=h)),n=n.next}while(n!==o);return s}(t,e),e){const n=bl(e,t);nl(e,e.next),nl(n,n.next)}}function hl(t,e){return fl(t.prev,t,e.prev)<0&&fl(e.next,t,t.next)<0}function ul(t,e,n,i,r){return(t=1431655765&((t=858993459&((t=252645135&((t=16711935&((t=32767*(t-n)*r)|t<<8))|t<<4))|t<<2))|t<<1))|(e=1431655765&((e=858993459&((e=252645135&((e=16711935&((e=32767*(e-i)*r)|e<<8))|e<<4))|e<<2))|e<<1))<<1}function dl(t){let e=t,n=t;do{(e.x=0&&(t-a)*(i-o)-(n-a)*(e-o)>=0&&(n-a)*(s-o)-(r-a)*(i-o)>=0}function ml(t,e){return t.next.i!==e.i&&t.prev.i!==e.i&&!function(t,e){let n=t;do{if(n.i!==t.i&&n.next.i!==t.i&&n.i!==e.i&&n.next.i!==e.i&&vl(n,n.next,t,e))return!0;n=n.next}while(n!==t);return!1}(t,e)&&(_l(t,e)&&_l(e,t)&&function(t,e){let n=t,i=!1;const r=(t.x+e.x)/2,s=(t.y+e.y)/2;do{n.y>s!=n.next.y>s&&n.next.y!==n.y&&r<(n.next.x-n.x)*(s-n.y)/(n.next.y-n.y)+n.x&&(i=!i),n=n.next}while(n!==t);return i}(t,e)&&(fl(t.prev,t,e.prev)||fl(t,e.prev,e))||gl(t,e)&&fl(t.prev,t,t.next)>0&&fl(e.prev,e,e.next)>0)}function fl(t,e,n){return(e.y-t.y)*(n.x-e.x)-(e.x-t.x)*(n.y-e.y)}function gl(t,e){return t.x===e.x&&t.y===e.y}function vl(t,e,n,i){const r=xl(fl(t,e,n)),s=xl(fl(t,e,i)),a=xl(fl(n,i,t)),o=xl(fl(n,i,e));return r!==s&&a!==o||(!(0!==r||!yl(t,n,e))||(!(0!==s||!yl(t,i,e))||(!(0!==a||!yl(n,t,i))||!(0!==o||!yl(n,e,i)))))}function yl(t,e,n){return e.x<=Math.max(t.x,n.x)&&e.x>=Math.min(t.x,n.x)&&e.y<=Math.max(t.y,n.y)&&e.y>=Math.min(t.y,n.y)}function xl(t){return t>0?1:t<0?-1:0}function _l(t,e){return fl(t.prev,t,t.next)<0?fl(t,e,t.next)>=0&&fl(t,t.prev,e)>=0:fl(t,e,t.prev)<0||fl(t,t.next,e)<0}function bl(t,e){const n=new Sl(t.i,t.x,t.y),i=new Sl(e.i,e.x,e.y),r=t.next,s=e.prev;return t.next=e,e.prev=t,n.next=r,r.prev=n,i.next=n,n.prev=i,s.next=i,i.prev=s,i}function Ml(t,e,n,i){const r=new Sl(t,e,n);return i?(r.next=i.next,r.prev=i,i.next.prev=r,i.next=r):(r.prev=r,r.next=r),r}function wl(t){t.next.prev=t.prev,t.prev.next=t.next,t.prevZ&&(t.prevZ.nextZ=t.nextZ),t.nextZ&&(t.nextZ.prevZ=t.prevZ)}function Sl(t,e,n){this.i=t,this.x=e,this.y=n,this.prev=null,this.next=null,this.z=null,this.prevZ=null,this.nextZ=null,this.steiner=!1}class Tl{static area(t){const e=t.length;let n=0;for(let i=e-1,r=0;r2&&t[e-1].equals(t[0])&&t.pop()}function Al(t,e){for(let n=0;nNumber.EPSILON){const u=Math.sqrt(h),d=Math.sqrt(l*l+c*c),p=e.x-o/u,m=e.y+a/u,f=((n.x-c/d-p)*c-(n.y+l/d-m)*l)/(a*c-o*l);i=p+a*f-t.x,r=m+o*f-t.y;const g=i*i+r*r;if(g<=2)return new Rt(i,r);s=Math.sqrt(g/2)}else{let t=!1;a>Number.EPSILON?l>Number.EPSILON&&(t=!0):a<-Number.EPSILON?l<-Number.EPSILON&&(t=!0):Math.sign(o)===Math.sign(c)&&(t=!0),t?(i=-o,r=a,s=Math.sqrt(h)):(i=a,r=o,s=Math.sqrt(h/2))}return new Rt(i/s,r/s)}const P=[];for(let t=0,e=E.length,n=e-1,i=t+1;t=0;t--){const e=t/p,n=h*Math.cos(e*Math.PI/2),i=u*Math.sin(e*Math.PI/2)+d;for(let t=0,e=E.length;t=0;){const i=n;let r=n-1;r<0&&(r=t.length-1);for(let t=0,n=o+2*p;t0)&&d.push(e,r,l),(t!==n-1||o0!=t>0&&this.version++,this._sheen=t}get clearcoat(){return this._clearcoat}set clearcoat(t){this._clearcoat>0!=t>0&&this.version++,this._clearcoat=t}get transmission(){return this._transmission}set transmission(t){this._transmission>0!=t>0&&this.version++,this._transmission=t}copy(t){return super.copy(t),this.defines={STANDARD:"",PHYSICAL:""},this.clearcoat=t.clearcoat,this.clearcoatMap=t.clearcoatMap,this.clearcoatRoughness=t.clearcoatRoughness,this.clearcoatRoughnessMap=t.clearcoatRoughnessMap,this.clearcoatNormalMap=t.clearcoatNormalMap,this.clearcoatNormalScale.copy(t.clearcoatNormalScale),this.ior=t.ior,this.sheen=t.sheen,this.sheenColor.copy(t.sheenColor),this.sheenColorMap=t.sheenColorMap,this.sheenRoughness=t.sheenRoughness,this.sheenRoughnessMap=t.sheenRoughnessMap,this.transmission=t.transmission,this.transmissionMap=t.transmissionMap,this.thickness=t.thickness,this.thicknessMap=t.thicknessMap,this.attenuationDistance=t.attenuationDistance,this.attenuationColor.copy(t.attenuationColor),this.specularIntensity=t.specularIntensity,this.specularIntensityMap=t.specularIntensityMap,this.specularColor.copy(t.specularColor),this.specularColorMap=t.specularColorMap,this}}jl.prototype.isMeshPhysicalMaterial=!0;class ql extends bn{constructor(t){super(),this.type="MeshPhongMaterial",this.color=new Wt(16777215),this.specular=new Wt(1118481),this.shininess=30,this.map=null,this.lightMap=null,this.lightMapIntensity=1,this.aoMap=null,this.aoMapIntensity=1,this.emissive=new Wt(0),this.emissiveIntensity=1,this.emissiveMap=null,this.bumpMap=null,this.bumpScale=1,this.normalMap=null,this.normalMapType=0,this.normalScale=new Rt(1,1),this.displacementMap=null,this.displacementScale=1,this.displacementBias=0,this.specularMap=null,this.alphaMap=null,this.envMap=null,this.combine=0,this.reflectivity=1,this.refractionRatio=.98,this.wireframe=!1,this.wireframeLinewidth=1,this.wireframeLinecap="round",this.wireframeLinejoin="round",this.flatShading=!1,this.fog=!0,this.setValues(t)}copy(t){return super.copy(t),this.color.copy(t.color),this.specular.copy(t.specular),this.shininess=t.shininess,this.map=t.map,this.lightMap=t.lightMap,this.lightMapIntensity=t.lightMapIntensity,this.aoMap=t.aoMap,this.aoMapIntensity=t.aoMapIntensity,this.emissive.copy(t.emissive),this.emissiveMap=t.emissiveMap,this.emissiveIntensity=t.emissiveIntensity,this.bumpMap=t.bumpMap,this.bumpScale=t.bumpScale,this.normalMap=t.normalMap,this.normalMapType=t.normalMapType,this.normalScale.copy(t.normalScale),this.displacementMap=t.displacementMap,this.displacementScale=t.displacementScale,this.displacementBias=t.displacementBias,this.specularMap=t.specularMap,this.alphaMap=t.alphaMap,this.envMap=t.envMap,this.combine=t.combine,this.reflectivity=t.reflectivity,this.refractionRatio=t.refractionRatio,this.wireframe=t.wireframe,this.wireframeLinewidth=t.wireframeLinewidth,this.wireframeLinecap=t.wireframeLinecap,this.wireframeLinejoin=t.wireframeLinejoin,this.flatShading=t.flatShading,this.fog=t.fog,this}}ql.prototype.isMeshPhongMaterial=!0;class Xl extends bn{constructor(t){super(),this.defines={TOON:""},this.type="MeshToonMaterial",this.color=new Wt(16777215),this.map=null,this.gradientMap=null,this.lightMap=null,this.lightMapIntensity=1,this.aoMap=null,this.aoMapIntensity=1,this.emissive=new Wt(0),this.emissiveIntensity=1,this.emissiveMap=null,this.bumpMap=null,this.bumpScale=1,this.normalMap=null,this.normalMapType=0,this.normalScale=new Rt(1,1),this.displacementMap=null,this.displacementScale=1,this.displacementBias=0,this.alphaMap=null,this.wireframe=!1,this.wireframeLinewidth=1,this.wireframeLinecap="round",this.wireframeLinejoin="round",this.fog=!0,this.setValues(t)}copy(t){return super.copy(t),this.color.copy(t.color),this.map=t.map,this.gradientMap=t.gradientMap,this.lightMap=t.lightMap,this.lightMapIntensity=t.lightMapIntensity,this.aoMap=t.aoMap,this.aoMapIntensity=t.aoMapIntensity,this.emissive.copy(t.emissive),this.emissiveMap=t.emissiveMap,this.emissiveIntensity=t.emissiveIntensity,this.bumpMap=t.bumpMap,this.bumpScale=t.bumpScale,this.normalMap=t.normalMap,this.normalMapType=t.normalMapType,this.normalScale.copy(t.normalScale),this.displacementMap=t.displacementMap,this.displacementScale=t.displacementScale,this.displacementBias=t.displacementBias,this.alphaMap=t.alphaMap,this.wireframe=t.wireframe,this.wireframeLinewidth=t.wireframeLinewidth,this.wireframeLinecap=t.wireframeLinecap,this.wireframeLinejoin=t.wireframeLinejoin,this.fog=t.fog,this}}Xl.prototype.isMeshToonMaterial=!0;class Jl extends bn{constructor(t){super(),this.type="MeshNormalMaterial",this.bumpMap=null,this.bumpScale=1,this.normalMap=null,this.normalMapType=0,this.normalScale=new Rt(1,1),this.displacementMap=null,this.displacementScale=1,this.displacementBias=0,this.wireframe=!1,this.wireframeLinewidth=1,this.flatShading=!1,this.setValues(t)}copy(t){return super.copy(t),this.bumpMap=t.bumpMap,this.bumpScale=t.bumpScale,this.normalMap=t.normalMap,this.normalMapType=t.normalMapType,this.normalScale.copy(t.normalScale),this.displacementMap=t.displacementMap,this.displacementScale=t.displacementScale,this.displacementBias=t.displacementBias,this.wireframe=t.wireframe,this.wireframeLinewidth=t.wireframeLinewidth,this.flatShading=t.flatShading,this}}Jl.prototype.isMeshNormalMaterial=!0;class Yl extends bn{constructor(t){super(),this.type="MeshLambertMaterial",this.color=new Wt(16777215),this.map=null,this.lightMap=null,this.lightMapIntensity=1,this.aoMap=null,this.aoMapIntensity=1,this.emissive=new Wt(0),this.emissiveIntensity=1,this.emissiveMap=null,this.specularMap=null,this.alphaMap=null,this.envMap=null,this.combine=0,this.reflectivity=1,this.refractionRatio=.98,this.wireframe=!1,this.wireframeLinewidth=1,this.wireframeLinecap="round",this.wireframeLinejoin="round",this.fog=!0,this.setValues(t)}copy(t){return super.copy(t),this.color.copy(t.color),this.map=t.map,this.lightMap=t.lightMap,this.lightMapIntensity=t.lightMapIntensity,this.aoMap=t.aoMap,this.aoMapIntensity=t.aoMapIntensity,this.emissive.copy(t.emissive),this.emissiveMap=t.emissiveMap,this.emissiveIntensity=t.emissiveIntensity,this.specularMap=t.specularMap,this.alphaMap=t.alphaMap,this.envMap=t.envMap,this.combine=t.combine,this.reflectivity=t.reflectivity,this.refractionRatio=t.refractionRatio,this.wireframe=t.wireframe,this.wireframeLinewidth=t.wireframeLinewidth,this.wireframeLinecap=t.wireframeLinecap,this.wireframeLinejoin=t.wireframeLinejoin,this.fog=t.fog,this}}Yl.prototype.isMeshLambertMaterial=!0;class Zl extends bn{constructor(t){super(),this.defines={MATCAP:""},this.type="MeshMatcapMaterial",this.color=new Wt(16777215),this.matcap=null,this.map=null,this.bumpMap=null,this.bumpScale=1,this.normalMap=null,this.normalMapType=0,this.normalScale=new Rt(1,1),this.displacementMap=null,this.displacementScale=1,this.displacementBias=0,this.alphaMap=null,this.flatShading=!1,this.fog=!0,this.setValues(t)}copy(t){return super.copy(t),this.defines={MATCAP:""},this.color.copy(t.color),this.matcap=t.matcap,this.map=t.map,this.bumpMap=t.bumpMap,this.bumpScale=t.bumpScale,this.normalMap=t.normalMap,this.normalMapType=t.normalMapType,this.normalScale.copy(t.normalScale),this.displacementMap=t.displacementMap,this.displacementScale=t.displacementScale,this.displacementBias=t.displacementBias,this.alphaMap=t.alphaMap,this.flatShading=t.flatShading,this.fog=t.fog,this}}Zl.prototype.isMeshMatcapMaterial=!0;class Kl extends Za{constructor(t){super(),this.type="LineDashedMaterial",this.scale=1,this.dashSize=3,this.gapSize=1,this.setValues(t)}copy(t){return super.copy(t),this.scale=t.scale,this.dashSize=t.dashSize,this.gapSize=t.gapSize,this}}Kl.prototype.isLineDashedMaterial=!0;const Ql={ShadowMaterial:kl,SpriteMaterial:ma,RawShaderMaterial:Vl,ShaderMaterial:pi,PointsMaterial:oo,MeshPhysicalMaterial:jl,MeshStandardMaterial:Wl,MeshPhongMaterial:ql,MeshToonMaterial:Xl,MeshNormalMaterial:Jl,MeshLambertMaterial:Yl,MeshDepthMaterial:Xs,MeshDistanceMaterial:Js,MeshBasicMaterial:Mn,MeshMatcapMaterial:Zl,LineDashedMaterial:Kl,LineBasicMaterial:Za,Material:bn};bn.fromType=function(t){return new Ql[t]};const $l={arraySlice:function(t,e,n){return $l.isTypedArray(t)?new t.constructor(t.subarray(e,void 0!==n?n:t.length)):t.slice(e,n)},convertArray:function(t,e,n){return!t||!n&&t.constructor===e?t:"number"==typeof e.BYTES_PER_ELEMENT?new e(t):Array.prototype.slice.call(t)},isTypedArray:function(t){return ArrayBuffer.isView(t)&&!(t instanceof DataView)},getKeyframeOrder:function(t){const e=t.length,n=new Array(e);for(let t=0;t!==e;++t)n[t]=t;return n.sort((function(e,n){return t[e]-t[n]})),n},sortedArray:function(t,e,n){const i=t.length,r=new t.constructor(i);for(let s=0,a=0;a!==i;++s){const i=n[s]*e;for(let n=0;n!==e;++n)r[a++]=t[i+n]}return r},flattenJSON:function(t,e,n,i){let r=1,s=t[0];for(;void 0!==s&&void 0===s[i];)s=t[r++];if(void 0===s)return;let a=s[i];if(void 0!==a)if(Array.isArray(a))do{a=s[i],void 0!==a&&(e.push(s.time),n.push.apply(n,a)),s=t[r++]}while(void 0!==s);else if(void 0!==a.toArray)do{a=s[i],void 0!==a&&(e.push(s.time),a.toArray(n,n.length)),s=t[r++]}while(void 0!==s);else do{a=s[i],void 0!==a&&(e.push(s.time),n.push(a)),s=t[r++]}while(void 0!==s)},subclip:function(t,e,n,i,r=30){const s=t.clone();s.name=e;const a=[];for(let t=0;t=i)){l.push(e.times[t]);for(let n=0;ns.tracks[t].times[0]&&(o=s.tracks[t].times[0]);for(let t=0;t=i.times[u]){const t=u*l+o,e=t+l-o;d=$l.arraySlice(i.values,t,e)}else{const t=i.createInterpolant(),e=o,n=l-o;t.evaluate(s),d=$l.arraySlice(t.resultBuffer,e,n)}if("quaternion"===r){(new re).fromArray(d).normalize().conjugate().toArray(d)}const p=a.times.length;for(let t=0;t=r)break t;{const a=e[1];t=r)break e}s=n,n=0}}for(;n>>1;te;)--s;if(++s,0!==r||s!==i){r>=s&&(s=Math.max(s,1),r=s-1);const t=this.getValueSize();this.times=$l.arraySlice(n,r,s),this.values=$l.arraySlice(this.values,r*t,s*t)}return this}validate(){let t=!0;const e=this.getValueSize();e-Math.floor(e)!=0&&(console.error("THREE.KeyframeTrack: Invalid value size in track.",this),t=!1);const n=this.times,i=this.values,r=n.length;0===r&&(console.error("THREE.KeyframeTrack: Track is empty.",this),t=!1);let s=null;for(let e=0;e!==r;e++){const i=n[e];if("number"==typeof i&&isNaN(i)){console.error("THREE.KeyframeTrack: Time is not a valid number.",this,e,i),t=!1;break}if(null!==s&&s>i){console.error("THREE.KeyframeTrack: Out of order keys.",this,e,i,s),t=!1;break}s=i}if(void 0!==i&&$l.isTypedArray(i))for(let e=0,n=i.length;e!==n;++e){const n=i[e];if(isNaN(n)){console.error("THREE.KeyframeTrack: Value is not a valid number.",this,e,n),t=!1;break}}return t}optimize(){const t=$l.arraySlice(this.times),e=$l.arraySlice(this.values),n=this.getValueSize(),i=this.getInterpolation()===tt,r=t.length-1;let s=1;for(let a=1;a0){t[s]=t[r];for(let t=r*n,i=s*n,a=0;a!==n;++a)e[i+a]=e[t+a];++s}return s!==t.length?(this.times=$l.arraySlice(t,0,s),this.values=$l.arraySlice(e,0,s*n)):(this.times=t,this.values=e),this}clone(){const t=$l.arraySlice(this.times,0),e=$l.arraySlice(this.values,0),n=new(0,this.constructor)(this.name,t,e);return n.createInterpolant=this.createInterpolant,n}}rc.prototype.TimeBufferType=Float32Array,rc.prototype.ValueBufferType=Float32Array,rc.prototype.DefaultInterpolation=$;class sc extends rc{}sc.prototype.ValueTypeName="bool",sc.prototype.ValueBufferType=Array,sc.prototype.DefaultInterpolation=Q,sc.prototype.InterpolantFactoryMethodLinear=void 0,sc.prototype.InterpolantFactoryMethodSmooth=void 0;class ac extends rc{}ac.prototype.ValueTypeName="color";class oc extends rc{}oc.prototype.ValueTypeName="number";class lc extends tc{constructor(t,e,n,i){super(t,e,n,i)}interpolate_(t,e,n,i){const r=this.resultBuffer,s=this.sampleValues,a=this.valueSize,o=(n-e)/(i-e);let l=t*a;for(let t=l+a;l!==t;l+=4)re.slerpFlat(r,0,s,l-a,s,l,o);return r}}class cc extends rc{InterpolantFactoryMethodLinear(t){return new lc(this.times,this.values,this.getValueSize(),t)}}cc.prototype.ValueTypeName="quaternion",cc.prototype.DefaultInterpolation=$,cc.prototype.InterpolantFactoryMethodSmooth=void 0;class hc extends rc{}hc.prototype.ValueTypeName="string",hc.prototype.ValueBufferType=Array,hc.prototype.DefaultInterpolation=Q,hc.prototype.InterpolantFactoryMethodLinear=void 0,hc.prototype.InterpolantFactoryMethodSmooth=void 0;class uc extends rc{}uc.prototype.ValueTypeName="vector";class dc{constructor(t,e=-1,n,i=2500){this.name=t,this.tracks=n,this.duration=e,this.blendMode=i,this.uuid=_t(),this.duration<0&&this.resetDuration()}static parse(t){const e=[],n=t.tracks,i=1/(t.fps||1);for(let t=0,r=n.length;t!==r;++t)e.push(pc(n[t]).scale(i));const r=new this(t.name,t.duration,e,t.blendMode);return r.uuid=t.uuid,r}static toJSON(t){const e=[],n=t.tracks,i={name:t.name,duration:t.duration,tracks:e,uuid:t.uuid,blendMode:t.blendMode};for(let t=0,i=n.length;t!==i;++t)e.push(rc.toJSON(n[t]));return i}static CreateFromMorphTargetSequence(t,e,n,i){const r=e.length,s=[];for(let t=0;t1){const t=s[1];let e=i[t];e||(i[t]=e=[]),e.push(n)}}const s=[];for(const t in i)s.push(this.CreateFromMorphTargetSequence(t,i[t],e,n));return s}static parseAnimation(t,e){if(!t)return console.error("THREE.AnimationClip: No animation in JSONLoader data."),null;const n=function(t,e,n,i,r){if(0!==n.length){const s=[],a=[];$l.flattenJSON(n,s,a,i),0!==s.length&&r.push(new t(e,s,a))}},i=[],r=t.name||"default",s=t.fps||30,a=t.blendMode;let o=t.length||-1;const l=t.hierarchy||[];for(let t=0;t{e&&e(r),this.manager.itemEnd(t)}),0),r;if(void 0!==yc[t])return void yc[t].push({onLoad:e,onProgress:n,onError:i});yc[t]=[],yc[t].push({onLoad:e,onProgress:n,onError:i});const s=new Request(t,{headers:new Headers(this.requestHeader),credentials:this.withCredentials?"include":"same-origin"}),a=this.mimeType,o=this.responseType;fetch(s).then((e=>{if(200===e.status||0===e.status){if(0===e.status&&console.warn("THREE.FileLoader: HTTP Status 0 received."),"undefined"==typeof ReadableStream||void 0===e.body||void 0===e.body.getReader)return e;const n=yc[t],i=e.body.getReader(),r=e.headers.get("Content-Length"),s=r?parseInt(r):0,a=0!==s;let o=0;const l=new ReadableStream({start(t){!function e(){i.read().then((({done:i,value:r})=>{if(i)t.close();else{o+=r.byteLength;const i=new ProgressEvent("progress",{lengthComputable:a,loaded:o,total:s});for(let t=0,e=n.length;t{switch(o){case"arraybuffer":return t.arrayBuffer();case"blob":return t.blob();case"document":return t.text().then((t=>(new DOMParser).parseFromString(t,a)));case"json":return t.json();default:if(void 0===a)return t.text();{const e=/charset="?([^;"\s]*)"?/i.exec(a),n=e&&e[1]?e[1].toLowerCase():void 0,i=new TextDecoder(n);return t.arrayBuffer().then((t=>i.decode(t)))}}})).then((e=>{mc.add(t,e);const n=yc[t];delete yc[t];for(let t=0,i=n.length;t{const n=yc[t];if(void 0===n)throw this.manager.itemError(t),e;delete yc[t];for(let t=0,i=n.length;t{this.manager.itemEnd(t)})),this.manager.itemStart(t)}setResponseType(t){return this.responseType=t,this}setMimeType(t){return this.mimeType=t,this}}class _c extends vc{constructor(t){super(t)}load(t,e,n,i){void 0!==this.path&&(t=this.path+t),t=this.manager.resolveURL(t);const r=this,s=mc.get(t);if(void 0!==s)return r.manager.itemStart(t),setTimeout((function(){e&&e(s),r.manager.itemEnd(t)}),0),s;const a=It("img");function o(){c(),mc.add(t,this),e&&e(this),r.manager.itemEnd(t)}function l(e){c(),i&&i(e),r.manager.itemError(t),r.manager.itemEnd(t)}function c(){a.removeEventListener("load",o,!1),a.removeEventListener("error",l,!1)}return a.addEventListener("load",o,!1),a.addEventListener("error",l,!1),"data:"!==t.slice(0,5)&&void 0!==this.crossOrigin&&(a.crossOrigin=this.crossOrigin),r.manager.itemStart(t),a.src=t,a}}class bc extends vc{constructor(t){super(t)}load(t,e,n,i){const r=new yi,s=new _c(this.manager);s.setCrossOrigin(this.crossOrigin),s.setPath(this.path);let a=0;function o(n){s.load(t[n],(function(t){r.images[n]=t,a++,6===a&&(r.needsUpdate=!0,e&&e(r))}),void 0,i)}for(let e=0;e0:i.vertexColors=t.vertexColors),void 0!==t.uniforms)for(const e in t.uniforms){const r=t.uniforms[e];switch(i.uniforms[e]={},r.type){case"t":i.uniforms[e].value=n(r.value);break;case"c":i.uniforms[e].value=(new Wt).setHex(r.value);break;case"v2":i.uniforms[e].value=(new Rt).fromArray(r.value);break;case"v3":i.uniforms[e].value=(new se).fromArray(r.value);break;case"v4":i.uniforms[e].value=(new Kt).fromArray(r.value);break;case"m3":i.uniforms[e].value=(new Ct).fromArray(r.value);break;case"m4":i.uniforms[e].value=(new ze).fromArray(r.value);break;default:i.uniforms[e].value=r.value}}if(void 0!==t.defines&&(i.defines=t.defines),void 0!==t.vertexShader&&(i.vertexShader=t.vertexShader),void 0!==t.fragmentShader&&(i.fragmentShader=t.fragmentShader),void 0!==t.extensions)for(const e in t.extensions)i.extensions[e]=t.extensions[e];if(void 0!==t.shading&&(i.flatShading=1===t.shading),void 0!==t.size&&(i.size=t.size),void 0!==t.sizeAttenuation&&(i.sizeAttenuation=t.sizeAttenuation),void 0!==t.map&&(i.map=n(t.map)),void 0!==t.matcap&&(i.matcap=n(t.matcap)),void 0!==t.alphaMap&&(i.alphaMap=n(t.alphaMap)),void 0!==t.bumpMap&&(i.bumpMap=n(t.bumpMap)),void 0!==t.bumpScale&&(i.bumpScale=t.bumpScale),void 0!==t.normalMap&&(i.normalMap=n(t.normalMap)),void 0!==t.normalMapType&&(i.normalMapType=t.normalMapType),void 0!==t.normalScale){let e=t.normalScale;!1===Array.isArray(e)&&(e=[e,e]),i.normalScale=(new Rt).fromArray(e)}return void 0!==t.displacementMap&&(i.displacementMap=n(t.displacementMap)),void 0!==t.displacementScale&&(i.displacementScale=t.displacementScale),void 0!==t.displacementBias&&(i.displacementBias=t.displacementBias),void 0!==t.roughnessMap&&(i.roughnessMap=n(t.roughnessMap)),void 0!==t.metalnessMap&&(i.metalnessMap=n(t.metalnessMap)),void 0!==t.emissiveMap&&(i.emissiveMap=n(t.emissiveMap)),void 0!==t.emissiveIntensity&&(i.emissiveIntensity=t.emissiveIntensity),void 0!==t.specularMap&&(i.specularMap=n(t.specularMap)),void 0!==t.specularIntensityMap&&(i.specularIntensityMap=n(t.specularIntensityMap)),void 0!==t.specularColorMap&&(i.specularColorMap=n(t.specularColorMap)),void 0!==t.envMap&&(i.envMap=n(t.envMap)),void 0!==t.envMapIntensity&&(i.envMapIntensity=t.envMapIntensity),void 0!==t.reflectivity&&(i.reflectivity=t.reflectivity),void 0!==t.refractionRatio&&(i.refractionRatio=t.refractionRatio),void 0!==t.lightMap&&(i.lightMap=n(t.lightMap)),void 0!==t.lightMapIntensity&&(i.lightMapIntensity=t.lightMapIntensity),void 0!==t.aoMap&&(i.aoMap=n(t.aoMap)),void 0!==t.aoMapIntensity&&(i.aoMapIntensity=t.aoMapIntensity),void 0!==t.gradientMap&&(i.gradientMap=n(t.gradientMap)),void 0!==t.clearcoatMap&&(i.clearcoatMap=n(t.clearcoatMap)),void 0!==t.clearcoatRoughnessMap&&(i.clearcoatRoughnessMap=n(t.clearcoatRoughnessMap)),void 0!==t.clearcoatNormalMap&&(i.clearcoatNormalMap=n(t.clearcoatNormalMap)),void 0!==t.clearcoatNormalScale&&(i.clearcoatNormalScale=(new Rt).fromArray(t.clearcoatNormalScale)),void 0!==t.transmissionMap&&(i.transmissionMap=n(t.transmissionMap)),void 0!==t.thicknessMap&&(i.thicknessMap=n(t.thicknessMap)),void 0!==t.sheenColorMap&&(i.sheenColorMap=n(t.sheenColorMap)),void 0!==t.sheenRoughnessMap&&(i.sheenRoughnessMap=n(t.sheenRoughnessMap)),i}setTextures(t){return this.textures=t,this}}class Wc{static decodeText(t){if("undefined"!=typeof TextDecoder)return(new TextDecoder).decode(t);let e="";for(let n=0,i=t.length;n0){this.source.connect(this.filters[0]);for(let t=1,e=this.filters.length;t0){this.source.disconnect(this.filters[0]);for(let t=1,e=this.filters.length;t0&&this._mixBufferRegionAdditive(n,i,this._addIndex*e,1,e);for(let t=e,r=e+e;t!==r;++t)if(n[t]!==n[t+e]){a.setValue(n,i);break}}saveOriginalState(){const t=this.binding,e=this.buffer,n=this.valueSize,i=n*this._origIndex;t.getValue(e,i);for(let t=n,r=i;t!==r;++t)e[t]=e[i+t%n];this._setIdentity(),this.cumulativeWeight=0,this.cumulativeWeightAdditive=0}restoreOriginalState(){const t=3*this.valueSize;this.binding.setValue(this.buffer,t)}_setAdditiveIdentityNumeric(){const t=this._addIndex*this.valueSize,e=t+this.valueSize;for(let n=t;n=.5)for(let i=0;i!==r;++i)t[e+i]=t[n+i]}_slerp(t,e,n,i){re.slerpFlat(t,e,t,e,t,n,i)}_slerpAdditive(t,e,n,i,r){const s=this._workIndex*r;re.multiplyQuaternionsFlat(t,s,t,e,t,n),re.slerpFlat(t,e,t,e,t,s,i)}_lerp(t,e,n,i,r){const s=1-i;for(let a=0;a!==r;++a){const r=e+a;t[r]=t[r]*s+t[n+a]*i}}_lerpAdditive(t,e,n,i,r){for(let s=0;s!==r;++s){const r=e+s;t[r]=t[r]+t[n+s]*i}}}const yh="\\[\\]\\.:\\/",xh=new RegExp("[\\[\\]\\.:\\/]","g"),_h="[^\\[\\]\\.:\\/]",bh="[^"+yh.replace("\\.","")+"]",Mh=/((?:WC+[\/:])*)/.source.replace("WC",_h),wh=/(WCOD+)?/.source.replace("WCOD",bh),Sh=/(?:\.(WC+)(?:\[(.+)\])?)?/.source.replace("WC",_h),Th=/\.(WC+)(?:\[(.+)\])?/.source.replace("WC",_h),Eh=new RegExp("^"+Mh+wh+Sh+Th+"$"),Ah=["material","materials","bones"];class Rh{constructor(t,e,n){this.path=e,this.parsedPath=n||Rh.parseTrackName(e),this.node=Rh.findNode(t,this.parsedPath.nodeName)||t,this.rootNode=t,this.getValue=this._getValue_unbound,this.setValue=this._setValue_unbound}static create(t,e,n){return t&&t.isAnimationObjectGroup?new Rh.Composite(t,e,n):new Rh(t,e,n)}static sanitizeNodeName(t){return t.replace(/\s/g,"_").replace(xh,"")}static parseTrackName(t){const e=Eh.exec(t);if(null===e)throw new Error("PropertyBinding: Cannot parse trackName: "+t);const n={nodeName:e[2],objectName:e[3],objectIndex:e[4],propertyName:e[5],propertyIndex:e[6]},i=n.nodeName&&n.nodeName.lastIndexOf(".");if(void 0!==i&&-1!==i){const t=n.nodeName.substring(i+1);-1!==Ah.indexOf(t)&&(n.nodeName=n.nodeName.substring(0,i),n.objectName=t)}if(null===n.propertyName||0===n.propertyName.length)throw new Error("PropertyBinding: can not parse propertyName from trackName: "+t);return n}static findNode(t,e){if(void 0===e||""===e||"."===e||-1===e||e===t.name||e===t.uuid)return t;if(t.skeleton){const n=t.skeleton.getBoneByName(e);if(void 0!==n)return n}if(t.children){const n=function(t){for(let i=0;i=r){const s=r++,c=t[s];e[c.uuid]=l,t[l]=c,e[o]=s,t[s]=a;for(let t=0,e=i;t!==e;++t){const e=n[t],i=e[s],r=e[l];e[l]=i,e[s]=r}}}this.nCachedObjects_=r}uncache(){const t=this._objects,e=this._indicesByUUID,n=this._bindings,i=n.length;let r=this.nCachedObjects_,s=t.length;for(let a=0,o=arguments.length;a!==o;++a){const o=arguments[a].uuid,l=e[o];if(void 0!==l)if(delete e[o],l0&&(e[a.uuid]=l),t[l]=a,t.pop();for(let t=0,e=i;t!==e;++t){const e=n[t];e[l]=e[r],e.pop()}}}this.nCachedObjects_=r}subscribe_(t,e){const n=this._bindingsIndicesByPath;let i=n[t];const r=this._bindings;if(void 0!==i)return r[i];const s=this._paths,a=this._parsedPaths,o=this._objects,l=o.length,c=this.nCachedObjects_,h=new Array(l);i=r.length,n[t]=i,s.push(t),a.push(e),r.push(h);for(let n=c,i=o.length;n!==i;++n){const i=o[n];h[n]=new Rh(i,t,e)}return h}unsubscribe_(t){const e=this._bindingsIndicesByPath,n=e[t];if(void 0!==n){const i=this._paths,r=this._parsedPaths,s=this._bindings,a=s.length-1,o=s[a];e[t[a]]=n,s[n]=o,s.pop(),r[n]=r[a],r.pop(),i[n]=i[a],i.pop()}}}Ch.prototype.isAnimationObjectGroup=!0;class Lh{constructor(t,e,n=null,i=e.blendMode){this._mixer=t,this._clip=e,this._localRoot=n,this.blendMode=i;const r=e.tracks,s=r.length,a=new Array(s),o={endingStart:et,endingEnd:et};for(let t=0;t!==s;++t){const e=r[t].createInterpolant(null);a[t]=e,e.settings=o}this._interpolantSettings=o,this._interpolants=a,this._propertyBindings=new Array(s),this._cacheIndex=null,this._byClipCacheIndex=null,this._timeScaleInterpolant=null,this._weightInterpolant=null,this.loop=2201,this._loopCount=-1,this._startTime=null,this.time=0,this.timeScale=1,this._effectiveTimeScale=1,this.weight=1,this._effectiveWeight=1,this.repetitions=1/0,this.paused=!1,this.enabled=!0,this.clampWhenFinished=!1,this.zeroSlopeAtStart=!0,this.zeroSlopeAtEnd=!0}play(){return this._mixer._activateAction(this),this}stop(){return this._mixer._deactivateAction(this),this.reset()}reset(){return this.paused=!1,this.enabled=!0,this.time=0,this._loopCount=-1,this._startTime=null,this.stopFading().stopWarping()}isRunning(){return this.enabled&&!this.paused&&0!==this.timeScale&&null===this._startTime&&this._mixer._isActiveAction(this)}isScheduled(){return this._mixer._isActiveAction(this)}startAt(t){return this._startTime=t,this}setLoop(t,e){return this.loop=t,this.repetitions=e,this}setEffectiveWeight(t){return this.weight=t,this._effectiveWeight=this.enabled?t:0,this.stopFading()}getEffectiveWeight(){return this._effectiveWeight}fadeIn(t){return this._scheduleFading(t,0,1)}fadeOut(t){return this._scheduleFading(t,1,0)}crossFadeFrom(t,e,n){if(t.fadeOut(e),this.fadeIn(e),n){const n=this._clip.duration,i=t._clip.duration,r=i/n,s=n/i;t.warp(1,r,e),this.warp(s,1,e)}return this}crossFadeTo(t,e,n){return t.crossFadeFrom(this,e,n)}stopFading(){const t=this._weightInterpolant;return null!==t&&(this._weightInterpolant=null,this._mixer._takeBackControlInterpolant(t)),this}setEffectiveTimeScale(t){return this.timeScale=t,this._effectiveTimeScale=this.paused?0:t,this.stopWarping()}getEffectiveTimeScale(){return this._effectiveTimeScale}setDuration(t){return this.timeScale=this._clip.duration/t,this.stopWarping()}syncWith(t){return this.time=t.time,this.timeScale=t.timeScale,this.stopWarping()}halt(t){return this.warp(this._effectiveTimeScale,0,t)}warp(t,e,n){const i=this._mixer,r=i.time,s=this.timeScale;let a=this._timeScaleInterpolant;null===a&&(a=i._lendControlInterpolant(),this._timeScaleInterpolant=a);const o=a.parameterPositions,l=a.sampleValues;return o[0]=r,o[1]=r+n,l[0]=t/s,l[1]=e/s,this}stopWarping(){const t=this._timeScaleInterpolant;return null!==t&&(this._timeScaleInterpolant=null,this._mixer._takeBackControlInterpolant(t)),this}getMixer(){return this._mixer}getClip(){return this._clip}getRoot(){return this._localRoot||this._mixer._root}_update(t,e,n,i){if(!this.enabled)return void this._updateWeight(t);const r=this._startTime;if(null!==r){const i=(t-r)*n;if(i<0||0===n)return;this._startTime=null,e=n*i}e*=this._updateTimeScale(t);const s=this._updateTime(e),a=this._updateWeight(t);if(a>0){const t=this._interpolants,e=this._propertyBindings;if(this.blendMode===st)for(let n=0,i=t.length;n!==i;++n)t[n].evaluate(s),e[n].accumulateAdditive(a);else for(let n=0,r=t.length;n!==r;++n)t[n].evaluate(s),e[n].accumulate(i,a)}}_updateWeight(t){let e=0;if(this.enabled){e=this.weight;const n=this._weightInterpolant;if(null!==n){const i=n.evaluate(t)[0];e*=i,t>n.parameterPositions[1]&&(this.stopFading(),0===i&&(this.enabled=!1))}}return this._effectiveWeight=e,e}_updateTimeScale(t){let e=0;if(!this.paused){e=this.timeScale;const n=this._timeScaleInterpolant;if(null!==n){e*=n.evaluate(t)[0],t>n.parameterPositions[1]&&(this.stopWarping(),0===e?this.paused=!0:this.timeScale=e)}}return this._effectiveTimeScale=e,e}_updateTime(t){const e=this._clip.duration,n=this.loop;let i=this.time+t,r=this._loopCount;const s=2202===n;if(0===t)return-1===r?i:s&&1==(1&r)?e-i:i;if(2200===n){-1===r&&(this._loopCount=0,this._setEndings(!0,!0,!1));t:{if(i>=e)i=e;else{if(!(i<0)){this.time=i;break t}i=0}this.clampWhenFinished?this.paused=!0:this.enabled=!1,this.time=i,this._mixer.dispatchEvent({type:"finished",action:this,direction:t<0?-1:1})}}else{if(-1===r&&(t>=0?(r=0,this._setEndings(!0,0===this.repetitions,s)):this._setEndings(0===this.repetitions,!0,s)),i>=e||i<0){const n=Math.floor(i/e);i-=e*n,r+=Math.abs(n);const a=this.repetitions-r;if(a<=0)this.clampWhenFinished?this.paused=!0:this.enabled=!1,i=t>0?e:0,this.time=i,this._mixer.dispatchEvent({type:"finished",action:this,direction:t>0?1:-1});else{if(1===a){const e=t<0;this._setEndings(e,!e,s)}else this._setEndings(!1,!1,s);this._loopCount=r,this.time=i,this._mixer.dispatchEvent({type:"loop",action:this,loopDelta:n})}}else this.time=i;if(s&&1==(1&r))return e-i}return i}_setEndings(t,e,n){const i=this._interpolantSettings;n?(i.endingStart=nt,i.endingEnd=nt):(i.endingStart=t?this.zeroSlopeAtStart?nt:et:it,i.endingEnd=e?this.zeroSlopeAtEnd?nt:et:it)}_scheduleFading(t,e,n){const i=this._mixer,r=i.time;let s=this._weightInterpolant;null===s&&(s=i._lendControlInterpolant(),this._weightInterpolant=s);const a=s.parameterPositions,o=s.sampleValues;return a[0]=r,o[0]=e,a[1]=r+t,o[1]=n,this}}class Ph extends ft{constructor(t){super(),this._root=t,this._initMemoryManager(),this._accuIndex=0,this.time=0,this.timeScale=1}_bindAction(t,e){const n=t._localRoot||this._root,i=t._clip.tracks,r=i.length,s=t._propertyBindings,a=t._interpolants,o=n.uuid,l=this._bindingsByRootAndName;let c=l[o];void 0===c&&(c={},l[o]=c);for(let t=0;t!==r;++t){const r=i[t],l=r.name;let h=c[l];if(void 0!==h)++h.referenceCount,s[t]=h;else{if(h=s[t],void 0!==h){null===h._cacheIndex&&(++h.referenceCount,this._addInactiveBinding(h,o,l));continue}const i=e&&e._propertyBindings[t].binding.parsedPath;h=new vh(Rh.create(n,l,i),r.ValueTypeName,r.getValueSize()),++h.referenceCount,this._addInactiveBinding(h,o,l),s[t]=h}a[t].resultBuffer=h.buffer}}_activateAction(t){if(!this._isActiveAction(t)){if(null===t._cacheIndex){const e=(t._localRoot||this._root).uuid,n=t._clip.uuid,i=this._actionsByClip[n];this._bindAction(t,i&&i.knownActions[0]),this._addInactiveAction(t,n,e)}const e=t._propertyBindings;for(let t=0,n=e.length;t!==n;++t){const n=e[t];0==n.useCount++&&(this._lendBinding(n),n.saveOriginalState())}this._lendAction(t)}}_deactivateAction(t){if(this._isActiveAction(t)){const e=t._propertyBindings;for(let t=0,n=e.length;t!==n;++t){const n=e[t];0==--n.useCount&&(n.restoreOriginalState(),this._takeBackBinding(n))}this._takeBackAction(t)}}_initMemoryManager(){this._actions=[],this._nActiveActions=0,this._actionsByClip={},this._bindings=[],this._nActiveBindings=0,this._bindingsByRootAndName={},this._controlInterpolants=[],this._nActiveControlInterpolants=0;const t=this;this.stats={actions:{get total(){return t._actions.length},get inUse(){return t._nActiveActions}},bindings:{get total(){return t._bindings.length},get inUse(){return t._nActiveBindings}},controlInterpolants:{get total(){return t._controlInterpolants.length},get inUse(){return t._nActiveControlInterpolants}}}}_isActiveAction(t){const e=t._cacheIndex;return null!==e&&e=0;--e)t[e].stop();return this}update(t){t*=this.timeScale;const e=this._actions,n=this._nActiveActions,i=this.time+=t,r=Math.sign(t),s=this._accuIndex^=1;for(let a=0;a!==n;++a){e[a]._update(i,t,r,s)}const a=this._bindings,o=this._nActiveBindings;for(let t=0;t!==o;++t)a[t].apply(s);return this}setTime(t){this.time=0;for(let t=0;tthis.max.x||t.ythis.max.y)}containsBox(t){return this.min.x<=t.min.x&&t.max.x<=this.max.x&&this.min.y<=t.min.y&&t.max.y<=this.max.y}getParameter(t,e){return e.set((t.x-this.min.x)/(this.max.x-this.min.x),(t.y-this.min.y)/(this.max.y-this.min.y))}intersectsBox(t){return!(t.max.xthis.max.x||t.max.ythis.max.y)}clampPoint(t,e){return e.copy(t).clamp(this.min,this.max)}distanceToPoint(t){return Oh.copy(t).clamp(this.min,this.max).sub(t).length()}intersect(t){return this.min.max(t.min),this.max.min(t.max),this}union(t){return this.min.min(t.min),this.max.max(t.max),this}translate(t){return this.min.add(t),this.max.add(t),this}equals(t){return t.min.equals(this.min)&&t.max.equals(this.max)}}Uh.prototype.isBox2=!0;const Fh=new se,Hh=new se;class Gh{constructor(t=new se,e=new se){this.start=t,this.end=e}set(t,e){return this.start.copy(t),this.end.copy(e),this}copy(t){return this.start.copy(t.start),this.end.copy(t.end),this}getCenter(t){return t.addVectors(this.start,this.end).multiplyScalar(.5)}delta(t){return t.subVectors(this.end,this.start)}distanceSq(){return this.start.distanceToSquared(this.end)}distance(){return this.start.distanceTo(this.end)}at(t,e){return this.delta(e).multiplyScalar(t).add(this.start)}closestPointToPointParameter(t,e){Fh.subVectors(t,this.start),Hh.subVectors(this.end,this.start);const n=Hh.dot(Hh);let i=Hh.dot(Fh)/n;return e&&(i=bt(i,0,1)),i}closestPointToPoint(t,e,n){const i=this.closestPointToPointParameter(t,e);return this.delta(n).multiplyScalar(i).add(this.start)}applyMatrix4(t){return this.start.applyMatrix4(t),this.end.applyMatrix4(t),this}equals(t){return t.start.equals(this.start)&&t.end.equals(this.end)}clone(){return(new this.constructor).copy(this)}}const kh=new se;const Vh=new se,Wh=new ze,jh=new ze;class qh extends so{constructor(t){const e=Xh(t),n=new Vn,i=[],r=[],s=new Wt(0,0,1),a=new Wt(0,1,0);for(let t=0;t>-e-14,pu[256|t]=1024>>-e-14|32768,mu[t]=-e-1,mu[256|t]=-e-1):e<=15?(pu[t]=e+15<<10,pu[256|t]=e+15<<10|32768,mu[t]=13,mu[256|t]=13):e<128?(pu[t]=31744,pu[256|t]=64512,mu[t]=24,mu[256|t]=24):(pu[t]=31744,pu[256|t]=64512,mu[t]=13,mu[256|t]=13)}const fu=new Uint32Array(2048),gu=new Uint32Array(64),vu=new Uint32Array(64);for(let t=1;t<1024;++t){let e=t<<13,n=0;for(;0==(8388608&e);)e<<=1,n-=8388608;e&=-8388609,n+=947912704,fu[t]=e|n}for(let t=1024;t<2048;++t)fu[t]=939524096+(t-1024<<13);for(let t=1;t<31;++t)gu[t]=t<<23;gu[31]=1199570944,gu[32]=2147483648;for(let t=33;t<63;++t)gu[t]=2147483648+(t-32<<23);gu[63]=3347054592;for(let t=1;t<64;++t)32!==t&&(vu[t]=1024);xo.create=function(t,e){return console.log("THREE.Curve.create() has been deprecated"),t.prototype=Object.create(xo.prototype),t.prototype.constructor=t,t.prototype.getPoint=e,t},Ho.prototype.fromPoints=function(t){return console.warn("THREE.Path: .fromPoints() has been renamed to .setFromPoints()."),this.setFromPoints(t)};Kh.prototype.setColors=function(){console.error("THREE.GridHelper: setColors() has been deprecated, pass them in the constructor instead.")},qh.prototype.update=function(){console.error("THREE.SkeletonHelper: update() no longer needs to be called.")};vc.prototype.extractUrlBase=function(t){return console.warn("THREE.Loader: .extractUrlBase() has been deprecated. Use THREE.LoaderUtils.extractUrlBase() instead."),Wc.extractUrlBase(t)},vc.Handlers={add:function(){console.error("THREE.Loader: Handlers.add() has been removed. Use LoadingManager.addHandler() instead.")},get:function(){console.error("THREE.Loader: Handlers.get() has been removed. Use LoadingManager.getHandler() instead.")}};Uh.prototype.center=function(t){return console.warn("THREE.Box2: .center() has been renamed to .getCenter()."),this.getCenter(t)},Uh.prototype.empty=function(){return console.warn("THREE.Box2: .empty() has been renamed to .isEmpty()."),this.isEmpty()},Uh.prototype.isIntersectionBox=function(t){return console.warn("THREE.Box2: .isIntersectionBox() has been renamed to .intersectsBox()."),this.intersectsBox(t)},Uh.prototype.size=function(t){return console.warn("THREE.Box2: .size() has been renamed to .getSize()."),this.getSize(t)},le.prototype.center=function(t){return console.warn("THREE.Box3: .center() has been renamed to .getCenter()."),this.getCenter(t)},le.prototype.empty=function(){return console.warn("THREE.Box3: .empty() has been renamed to .isEmpty()."),this.isEmpty()},le.prototype.isIntersectionBox=function(t){return console.warn("THREE.Box3: .isIntersectionBox() has been renamed to .intersectsBox()."),this.intersectsBox(t)},le.prototype.isIntersectionSphere=function(t){return console.warn("THREE.Box3: .isIntersectionSphere() has been renamed to .intersectsSphere()."),this.intersectsSphere(t)},le.prototype.size=function(t){return console.warn("THREE.Box3: .size() has been renamed to .getSize()."),this.getSize(t)},qe.prototype.toVector3=function(){console.error("THREE.Euler: .toVector3() has been removed. Use Vector3.setFromEuler() instead")},Ae.prototype.empty=function(){return console.warn("THREE.Sphere: .empty() has been renamed to .isEmpty()."),this.isEmpty()},Ei.prototype.setFromMatrix=function(t){return console.warn("THREE.Frustum: .setFromMatrix() has been renamed to .setFromProjectionMatrix()."),this.setFromProjectionMatrix(t)},Gh.prototype.center=function(t){return console.warn("THREE.Line3: .center() has been renamed to .getCenter()."),this.getCenter(t)},Ct.prototype.flattenToArrayOffset=function(t,e){return console.warn("THREE.Matrix3: .flattenToArrayOffset() has been deprecated. Use .toArray() instead."),this.toArray(t,e)},Ct.prototype.multiplyVector3=function(t){return console.warn("THREE.Matrix3: .multiplyVector3() has been removed. Use vector.applyMatrix3( matrix ) instead."),t.applyMatrix3(this)},Ct.prototype.multiplyVector3Array=function(){console.error("THREE.Matrix3: .multiplyVector3Array() has been removed.")},Ct.prototype.applyToBufferAttribute=function(t){return console.warn("THREE.Matrix3: .applyToBufferAttribute() has been removed. Use attribute.applyMatrix3( matrix ) instead."),t.applyMatrix3(this)},Ct.prototype.applyToVector3Array=function(){console.error("THREE.Matrix3: .applyToVector3Array() has been removed.")},Ct.prototype.getInverse=function(t){return console.warn("THREE.Matrix3: .getInverse() has been removed. Use matrixInv.copy( matrix ).invert(); instead."),this.copy(t).invert()},ze.prototype.extractPosition=function(t){return console.warn("THREE.Matrix4: .extractPosition() has been renamed to .copyPosition()."),this.copyPosition(t)},ze.prototype.flattenToArrayOffset=function(t,e){return console.warn("THREE.Matrix4: .flattenToArrayOffset() has been deprecated. Use .toArray() instead."),this.toArray(t,e)},ze.prototype.getPosition=function(){return console.warn("THREE.Matrix4: .getPosition() has been removed. Use Vector3.setFromMatrixPosition( matrix ) instead."),(new se).setFromMatrixColumn(this,3)},ze.prototype.setRotationFromQuaternion=function(t){return console.warn("THREE.Matrix4: .setRotationFromQuaternion() has been renamed to .makeRotationFromQuaternion()."),this.makeRotationFromQuaternion(t)},ze.prototype.multiplyToArray=function(){console.warn("THREE.Matrix4: .multiplyToArray() has been removed.")},ze.prototype.multiplyVector3=function(t){return console.warn("THREE.Matrix4: .multiplyVector3() has been removed. Use vector.applyMatrix4( matrix ) instead."),t.applyMatrix4(this)},ze.prototype.multiplyVector4=function(t){return console.warn("THREE.Matrix4: .multiplyVector4() has been removed. Use vector.applyMatrix4( matrix ) instead."),t.applyMatrix4(this)},ze.prototype.multiplyVector3Array=function(){console.error("THREE.Matrix4: .multiplyVector3Array() has been removed.")},ze.prototype.rotateAxis=function(t){console.warn("THREE.Matrix4: .rotateAxis() has been removed. Use Vector3.transformDirection( matrix ) instead."),t.transformDirection(this)},ze.prototype.crossVector=function(t){return console.warn("THREE.Matrix4: .crossVector() has been removed. Use vector.applyMatrix4( matrix ) instead."),t.applyMatrix4(this)},ze.prototype.translate=function(){console.error("THREE.Matrix4: .translate() has been removed.")},ze.prototype.rotateX=function(){console.error("THREE.Matrix4: .rotateX() has been removed.")},ze.prototype.rotateY=function(){console.error("THREE.Matrix4: .rotateY() has been removed.")},ze.prototype.rotateZ=function(){console.error("THREE.Matrix4: .rotateZ() has been removed.")},ze.prototype.rotateByAxis=function(){console.error("THREE.Matrix4: .rotateByAxis() has been removed.")},ze.prototype.applyToBufferAttribute=function(t){return console.warn("THREE.Matrix4: .applyToBufferAttribute() has been removed. Use attribute.applyMatrix4( matrix ) instead."),t.applyMatrix4(this)},ze.prototype.applyToVector3Array=function(){console.error("THREE.Matrix4: .applyToVector3Array() has been removed.")},ze.prototype.makeFrustum=function(t,e,n,i,r,s){return console.warn("THREE.Matrix4: .makeFrustum() has been removed. Use .makePerspective( left, right, top, bottom, near, far ) instead."),this.makePerspective(t,e,i,n,r,s)},ze.prototype.getInverse=function(t){return console.warn("THREE.Matrix4: .getInverse() has been removed. Use matrixInv.copy( matrix ).invert(); instead."),this.copy(t).invert()},wi.prototype.isIntersectionLine=function(t){return console.warn("THREE.Plane: .isIntersectionLine() has been renamed to .intersectsLine()."),this.intersectsLine(t)},re.prototype.multiplyVector3=function(t){return console.warn("THREE.Quaternion: .multiplyVector3() has been removed. Use is now vector.applyQuaternion( quaternion ) instead."),t.applyQuaternion(this)},re.prototype.inverse=function(){return console.warn("THREE.Quaternion: .inverse() has been renamed to invert()."),this.invert()},Be.prototype.isIntersectionBox=function(t){return console.warn("THREE.Ray: .isIntersectionBox() has been renamed to .intersectsBox()."),this.intersectsBox(t)},Be.prototype.isIntersectionPlane=function(t){return console.warn("THREE.Ray: .isIntersectionPlane() has been renamed to .intersectsPlane()."),this.intersectsPlane(t)},Be.prototype.isIntersectionSphere=function(t){return console.warn("THREE.Ray: .isIntersectionSphere() has been renamed to .intersectsSphere()."),this.intersectsSphere(t)},xn.prototype.area=function(){return console.warn("THREE.Triangle: .area() has been renamed to .getArea()."),this.getArea()},xn.prototype.barycoordFromPoint=function(t,e){return console.warn("THREE.Triangle: .barycoordFromPoint() has been renamed to .getBarycoord()."),this.getBarycoord(t,e)},xn.prototype.midpoint=function(t){return console.warn("THREE.Triangle: .midpoint() has been renamed to .getMidpoint()."),this.getMidpoint(t)},xn.prototypenormal=function(t){return console.warn("THREE.Triangle: .normal() has been renamed to .getNormal()."),this.getNormal(t)},xn.prototype.plane=function(t){return console.warn("THREE.Triangle: .plane() has been renamed to .getPlane()."),this.getPlane(t)},xn.barycoordFromPoint=function(t,e,n,i,r){return console.warn("THREE.Triangle: .barycoordFromPoint() has been renamed to .getBarycoord()."),xn.getBarycoord(t,e,n,i,r)},xn.normal=function(t,e,n,i){return console.warn("THREE.Triangle: .normal() has been renamed to .getNormal()."),xn.getNormal(t,e,n,i)},$o.prototype.extractAllPoints=function(t){return console.warn("THREE.Shape: .extractAllPoints() has been removed. Use .extractPoints() instead."),this.extractPoints(t)},$o.prototype.extrude=function(t){return console.warn("THREE.Shape: .extrude() has been removed. Use ExtrudeGeometry() instead."),new Rl(this,t)},$o.prototype.makeGeometry=function(t){return console.warn("THREE.Shape: .makeGeometry() has been removed. Use ShapeGeometry() instead."),new Il(this,t)},Rt.prototype.fromAttribute=function(t,e,n){return console.warn("THREE.Vector2: .fromAttribute() has been renamed to .fromBufferAttribute()."),this.fromBufferAttribute(t,e,n)},Rt.prototype.distanceToManhattan=function(t){return console.warn("THREE.Vector2: .distanceToManhattan() has been renamed to .manhattanDistanceTo()."),this.manhattanDistanceTo(t)},Rt.prototype.lengthManhattan=function(){return console.warn("THREE.Vector2: .lengthManhattan() has been renamed to .manhattanLength()."),this.manhattanLength()},se.prototype.setEulerFromRotationMatrix=function(){console.error("THREE.Vector3: .setEulerFromRotationMatrix() has been removed. Use Euler.setFromRotationMatrix() instead.")},se.prototype.setEulerFromQuaternion=function(){console.error("THREE.Vector3: .setEulerFromQuaternion() has been removed. Use Euler.setFromQuaternion() instead.")},se.prototype.getPositionFromMatrix=function(t){return console.warn("THREE.Vector3: .getPositionFromMatrix() has been renamed to .setFromMatrixPosition()."),this.setFromMatrixPosition(t)},se.prototype.getScaleFromMatrix=function(t){return console.warn("THREE.Vector3: .getScaleFromMatrix() has been renamed to .setFromMatrixScale()."),this.setFromMatrixScale(t)},se.prototype.getColumnFromMatrix=function(t,e){return console.warn("THREE.Vector3: .getColumnFromMatrix() has been renamed to .setFromMatrixColumn()."),this.setFromMatrixColumn(e,t)},se.prototype.applyProjection=function(t){return console.warn("THREE.Vector3: .applyProjection() has been removed. Use .applyMatrix4( m ) instead."),this.applyMatrix4(t)},se.prototype.fromAttribute=function(t,e,n){return console.warn("THREE.Vector3: .fromAttribute() has been renamed to .fromBufferAttribute()."),this.fromBufferAttribute(t,e,n)},se.prototype.distanceToManhattan=function(t){return console.warn("THREE.Vector3: .distanceToManhattan() has been renamed to .manhattanDistanceTo()."),this.manhattanDistanceTo(t)},se.prototype.lengthManhattan=function(){return console.warn("THREE.Vector3: .lengthManhattan() has been renamed to .manhattanLength()."),this.manhattanLength()},Kt.prototype.fromAttribute=function(t,e,n){return console.warn("THREE.Vector4: .fromAttribute() has been renamed to .fromBufferAttribute()."),this.fromBufferAttribute(t,e,n)},Kt.prototype.lengthManhattan=function(){return console.warn("THREE.Vector4: .lengthManhattan() has been renamed to .manhattanLength()."),this.manhattanLength()},ln.prototype.getChildByName=function(t){return console.warn("THREE.Object3D: .getChildByName() has been renamed to .getObjectByName()."),this.getObjectByName(t)},ln.prototype.renderDepth=function(){console.warn("THREE.Object3D: .renderDepth has been removed. Use .renderOrder, instead.")},ln.prototype.translate=function(t,e){return console.warn("THREE.Object3D: .translate() has been removed. Use .translateOnAxis( axis, distance ) instead."),this.translateOnAxis(e,t)},ln.prototype.getWorldRotation=function(){console.error("THREE.Object3D: .getWorldRotation() has been removed. Use THREE.Object3D.getWorldQuaternion( target ) instead.")},ln.prototype.applyMatrix=function(t){return console.warn("THREE.Object3D: .applyMatrix() has been renamed to .applyMatrix4()."),this.applyMatrix4(t)},Object.defineProperties(ln.prototype,{eulerOrder:{get:function(){return console.warn("THREE.Object3D: .eulerOrder is now .rotation.order."),this.rotation.order},set:function(t){console.warn("THREE.Object3D: .eulerOrder is now .rotation.order."),this.rotation.order=t}},useQuaternion:{get:function(){console.warn("THREE.Object3D: .useQuaternion has been removed. The library now uses quaternions by default.")},set:function(){console.warn("THREE.Object3D: .useQuaternion has been removed. The library now uses quaternions by default.")}}}),oi.prototype.setDrawMode=function(){console.error("THREE.Mesh: .setDrawMode() has been removed. The renderer now always assumes THREE.TrianglesDrawMode. Transform your geometry via BufferGeometryUtils.toTrianglesDrawMode() if necessary.")},Object.defineProperties(oi.prototype,{drawMode:{get:function(){return console.error("THREE.Mesh: .drawMode has been removed. The renderer now always assumes THREE.TrianglesDrawMode."),0},set:function(){console.error("THREE.Mesh: .drawMode has been removed. The renderer now always assumes THREE.TrianglesDrawMode. Transform your geometry via BufferGeometryUtils.toTrianglesDrawMode() if necessary.")}}}),Ua.prototype.initBones=function(){console.error("THREE.SkinnedMesh: initBones() has been removed.")},fi.prototype.setLens=function(t,e){console.warn("THREE.PerspectiveCamera.setLens is deprecated. Use .setFocalLength and .filmGauge for a photographic setup."),void 0!==e&&(this.filmGauge=e),this.setFocalLength(t)},Object.defineProperties(Sc.prototype,{onlyShadow:{set:function(){console.warn("THREE.Light: .onlyShadow has been removed.")}},shadowCameraFov:{set:function(t){console.warn("THREE.Light: .shadowCameraFov is now .shadow.camera.fov."),this.shadow.camera.fov=t}},shadowCameraLeft:{set:function(t){console.warn("THREE.Light: .shadowCameraLeft is now .shadow.camera.left."),this.shadow.camera.left=t}},shadowCameraRight:{set:function(t){console.warn("THREE.Light: .shadowCameraRight is now .shadow.camera.right."),this.shadow.camera.right=t}},shadowCameraTop:{set:function(t){console.warn("THREE.Light: .shadowCameraTop is now .shadow.camera.top."),this.shadow.camera.top=t}},shadowCameraBottom:{set:function(t){console.warn("THREE.Light: .shadowCameraBottom is now .shadow.camera.bottom."),this.shadow.camera.bottom=t}},shadowCameraNear:{set:function(t){console.warn("THREE.Light: .shadowCameraNear is now .shadow.camera.near."),this.shadow.camera.near=t}},shadowCameraFar:{set:function(t){console.warn("THREE.Light: .shadowCameraFar is now .shadow.camera.far."),this.shadow.camera.far=t}},shadowCameraVisible:{set:function(){console.warn("THREE.Light: .shadowCameraVisible has been removed. Use new THREE.CameraHelper( light.shadow.camera ) instead.")}},shadowBias:{set:function(t){console.warn("THREE.Light: .shadowBias is now .shadow.bias."),this.shadow.bias=t}},shadowDarkness:{set:function(){console.warn("THREE.Light: .shadowDarkness has been removed.")}},shadowMapWidth:{set:function(t){console.warn("THREE.Light: .shadowMapWidth is now .shadow.mapSize.width."),this.shadow.mapSize.width=t}},shadowMapHeight:{set:function(t){console.warn("THREE.Light: .shadowMapHeight is now .shadow.mapSize.height."),this.shadow.mapSize.height=t}}}),Object.defineProperties(Tn.prototype,{length:{get:function(){return console.warn("THREE.BufferAttribute: .length has been deprecated. Use .count instead."),this.array.length}},dynamic:{get:function(){return console.warn("THREE.BufferAttribute: .dynamic has been deprecated. Use .usage instead."),this.usage===dt},set:function(){console.warn("THREE.BufferAttribute: .dynamic has been deprecated. Use .usage instead."),this.setUsage(dt)}}}),Tn.prototype.setDynamic=function(t){return console.warn("THREE.BufferAttribute: .setDynamic() has been deprecated. Use .setUsage() instead."),this.setUsage(!0===t?dt:ut),this},Tn.prototype.copyIndicesArray=function(){console.error("THREE.BufferAttribute: .copyIndicesArray() has been removed.")},Tn.prototype.setArray=function(){console.error("THREE.BufferAttribute: .setArray has been removed. Use BufferGeometry .setAttribute to replace/resize attribute buffers")},Vn.prototype.addIndex=function(t){console.warn("THREE.BufferGeometry: .addIndex() has been renamed to .setIndex()."),this.setIndex(t)},Vn.prototype.addAttribute=function(t,e){return console.warn("THREE.BufferGeometry: .addAttribute() has been renamed to .setAttribute()."),e&&e.isBufferAttribute||e&&e.isInterleavedBufferAttribute?"index"===t?(console.warn("THREE.BufferGeometry.addAttribute: Use .setIndex() for index attribute."),this.setIndex(e),this):this.setAttribute(t,e):(console.warn("THREE.BufferGeometry: .addAttribute() now expects ( name, attribute )."),this.setAttribute(t,new Tn(arguments[1],arguments[2])))},Vn.prototype.addDrawCall=function(t,e,n){void 0!==n&&console.warn("THREE.BufferGeometry: .addDrawCall() no longer supports indexOffset."),console.warn("THREE.BufferGeometry: .addDrawCall() is now .addGroup()."),this.addGroup(t,e)},Vn.prototype.clearDrawCalls=function(){console.warn("THREE.BufferGeometry: .clearDrawCalls() is now .clearGroups()."),this.clearGroups()},Vn.prototype.computeOffsets=function(){console.warn("THREE.BufferGeometry: .computeOffsets() has been removed.")},Vn.prototype.removeAttribute=function(t){return console.warn("THREE.BufferGeometry: .removeAttribute() has been renamed to .deleteAttribute()."),this.deleteAttribute(t)},Vn.prototype.applyMatrix=function(t){return console.warn("THREE.BufferGeometry: .applyMatrix() has been renamed to .applyMatrix4()."),this.applyMatrix4(t)},Object.defineProperties(Vn.prototype,{drawcalls:{get:function(){return console.error("THREE.BufferGeometry: .drawcalls has been renamed to .groups."),this.groups}},offsets:{get:function(){return console.warn("THREE.BufferGeometry: .offsets has been renamed to .groups."),this.groups}}}),ua.prototype.setDynamic=function(t){return console.warn("THREE.InterleavedBuffer: .setDynamic() has been deprecated. Use .setUsage() instead."),this.setUsage(!0===t?dt:ut),this},ua.prototype.setArray=function(){console.error("THREE.InterleavedBuffer: .setArray has been removed. Use BufferGeometry .setAttribute to replace/resize attribute buffers")},Rl.prototype.getArrays=function(){console.error("THREE.ExtrudeGeometry: .getArrays() has been removed.")},Rl.prototype.addShapeList=function(){console.error("THREE.ExtrudeGeometry: .addShapeList() has been removed.")},Rl.prototype.addShape=function(){console.error("THREE.ExtrudeGeometry: .addShape() has been removed.")},ha.prototype.dispose=function(){console.error("THREE.Scene: .dispose() has been removed.")},Dh.prototype.onUpdate=function(){return console.warn("THREE.Uniform: .onUpdate() has been removed. Use object.onBeforeRender() instead."),this},Object.defineProperties(bn.prototype,{wrapAround:{get:function(){console.warn("THREE.Material: .wrapAround has been removed.")},set:function(){console.warn("THREE.Material: .wrapAround has been removed.")}},overdraw:{get:function(){console.warn("THREE.Material: .overdraw has been removed.")},set:function(){console.warn("THREE.Material: .overdraw has been removed.")}},wrapRGB:{get:function(){return console.warn("THREE.Material: .wrapRGB has been removed."),new Wt}},shading:{get:function(){console.error("THREE."+this.type+": .shading has been removed. Use the boolean .flatShading instead.")},set:function(t){console.warn("THREE."+this.type+": .shading has been removed. Use the boolean .flatShading instead."),this.flatShading=1===t}},stencilMask:{get:function(){return console.warn("THREE."+this.type+": .stencilMask has been removed. Use .stencilFuncMask instead."),this.stencilFuncMask},set:function(t){console.warn("THREE."+this.type+": .stencilMask has been removed. Use .stencilFuncMask instead."),this.stencilFuncMask=t}},vertexTangents:{get:function(){console.warn("THREE."+this.type+": .vertexTangents has been removed.")},set:function(){console.warn("THREE."+this.type+": .vertexTangents has been removed.")}}}),Object.defineProperties(pi.prototype,{derivatives:{get:function(){return console.warn("THREE.ShaderMaterial: .derivatives has been moved to .extensions.derivatives."),this.extensions.derivatives},set:function(t){console.warn("THREE. ShaderMaterial: .derivatives has been moved to .extensions.derivatives."),this.extensions.derivatives=t}}}),aa.prototype.clearTarget=function(t,e,n,i){console.warn("THREE.WebGLRenderer: .clearTarget() has been deprecated. Use .setRenderTarget() and .clear() instead."),this.setRenderTarget(t),this.clear(e,n,i)},aa.prototype.animate=function(t){console.warn("THREE.WebGLRenderer: .animate() is now .setAnimationLoop()."),this.setAnimationLoop(t)},aa.prototype.getCurrentRenderTarget=function(){return console.warn("THREE.WebGLRenderer: .getCurrentRenderTarget() is now .getRenderTarget()."),this.getRenderTarget()},aa.prototype.getMaxAnisotropy=function(){return console.warn("THREE.WebGLRenderer: .getMaxAnisotropy() is now .capabilities.getMaxAnisotropy()."),this.capabilities.getMaxAnisotropy()},aa.prototype.getPrecision=function(){return console.warn("THREE.WebGLRenderer: .getPrecision() is now .capabilities.precision."),this.capabilities.precision},aa.prototype.resetGLState=function(){return console.warn("THREE.WebGLRenderer: .resetGLState() is now .state.reset()."),this.state.reset()},aa.prototype.supportsFloatTextures=function(){return console.warn("THREE.WebGLRenderer: .supportsFloatTextures() is now .extensions.get( 'OES_texture_float' )."),this.extensions.get("OES_texture_float")},aa.prototype.supportsHalfFloatTextures=function(){return console.warn("THREE.WebGLRenderer: .supportsHalfFloatTextures() is now .extensions.get( 'OES_texture_half_float' )."),this.extensions.get("OES_texture_half_float")},aa.prototype.supportsStandardDerivatives=function(){return console.warn("THREE.WebGLRenderer: .supportsStandardDerivatives() is now .extensions.get( 'OES_standard_derivatives' )."),this.extensions.get("OES_standard_derivatives")},aa.prototype.supportsCompressedTextureS3TC=function(){return console.warn("THREE.WebGLRenderer: .supportsCompressedTextureS3TC() is now .extensions.get( 'WEBGL_compressed_texture_s3tc' )."),this.extensions.get("WEBGL_compressed_texture_s3tc")},aa.prototype.supportsCompressedTexturePVRTC=function(){return console.warn("THREE.WebGLRenderer: .supportsCompressedTexturePVRTC() is now .extensions.get( 'WEBGL_compressed_texture_pvrtc' )."),this.extensions.get("WEBGL_compressed_texture_pvrtc")},aa.prototype.supportsBlendMinMax=function(){return console.warn("THREE.WebGLRenderer: .supportsBlendMinMax() is now .extensions.get( 'EXT_blend_minmax' )."),this.extensions.get("EXT_blend_minmax")},aa.prototype.supportsVertexTextures=function(){return console.warn("THREE.WebGLRenderer: .supportsVertexTextures() is now .capabilities.vertexTextures."),this.capabilities.vertexTextures},aa.prototype.supportsInstancedArrays=function(){return console.warn("THREE.WebGLRenderer: .supportsInstancedArrays() is now .extensions.get( 'ANGLE_instanced_arrays' )."),this.extensions.get("ANGLE_instanced_arrays")},aa.prototype.enableScissorTest=function(t){console.warn("THREE.WebGLRenderer: .enableScissorTest() is now .setScissorTest()."),this.setScissorTest(t)},aa.prototype.initMaterial=function(){console.warn("THREE.WebGLRenderer: .initMaterial() has been removed.")},aa.prototype.addPrePlugin=function(){console.warn("THREE.WebGLRenderer: .addPrePlugin() has been removed.")},aa.prototype.addPostPlugin=function(){console.warn("THREE.WebGLRenderer: .addPostPlugin() has been removed.")},aa.prototype.updateShadowMap=function(){console.warn("THREE.WebGLRenderer: .updateShadowMap() has been removed.")},aa.prototype.setFaceCulling=function(){console.warn("THREE.WebGLRenderer: .setFaceCulling() has been removed.")},aa.prototype.allocTextureUnit=function(){console.warn("THREE.WebGLRenderer: .allocTextureUnit() has been removed.")},aa.prototype.setTexture=function(){console.warn("THREE.WebGLRenderer: .setTexture() has been removed.")},aa.prototype.setTexture2D=function(){console.warn("THREE.WebGLRenderer: .setTexture2D() has been removed.")},aa.prototype.setTextureCube=function(){console.warn("THREE.WebGLRenderer: .setTextureCube() has been removed.")},aa.prototype.getActiveMipMapLevel=function(){return console.warn("THREE.WebGLRenderer: .getActiveMipMapLevel() is now .getActiveMipmapLevel()."),this.getActiveMipmapLevel()},Object.defineProperties(aa.prototype,{shadowMapEnabled:{get:function(){return this.shadowMap.enabled},set:function(t){console.warn("THREE.WebGLRenderer: .shadowMapEnabled is now .shadowMap.enabled."),this.shadowMap.enabled=t}},shadowMapType:{get:function(){return this.shadowMap.type},set:function(t){console.warn("THREE.WebGLRenderer: .shadowMapType is now .shadowMap.type."),this.shadowMap.type=t}},shadowMapCullFace:{get:function(){console.warn("THREE.WebGLRenderer: .shadowMapCullFace has been removed. Set Material.shadowSide instead.")},set:function(){console.warn("THREE.WebGLRenderer: .shadowMapCullFace has been removed. Set Material.shadowSide instead.")}},context:{get:function(){return console.warn("THREE.WebGLRenderer: .context has been removed. Use .getContext() instead."),this.getContext()}},vr:{get:function(){return console.warn("THREE.WebGLRenderer: .vr has been renamed to .xr"),this.xr}},gammaInput:{get:function(){return console.warn("THREE.WebGLRenderer: .gammaInput has been removed. Set the encoding for textures via Texture.encoding instead."),!1},set:function(){console.warn("THREE.WebGLRenderer: .gammaInput has been removed. Set the encoding for textures via Texture.encoding instead.")}},gammaOutput:{get:function(){return console.warn("THREE.WebGLRenderer: .gammaOutput has been removed. Set WebGLRenderer.outputEncoding instead."),!1},set:function(t){console.warn("THREE.WebGLRenderer: .gammaOutput has been removed. Set WebGLRenderer.outputEncoding instead."),this.outputEncoding=!0===t?ot:at}},toneMappingWhitePoint:{get:function(){return console.warn("THREE.WebGLRenderer: .toneMappingWhitePoint has been removed."),1},set:function(){console.warn("THREE.WebGLRenderer: .toneMappingWhitePoint has been removed.")}},gammaFactor:{get:function(){return console.warn("THREE.WebGLRenderer: .gammaFactor has been removed."),2},set:function(){console.warn("THREE.WebGLRenderer: .gammaFactor has been removed.")}}}),Object.defineProperties(Ys.prototype,{cullFace:{get:function(){console.warn("THREE.WebGLRenderer: .shadowMap.cullFace has been removed. Set Material.shadowSide instead.")},set:function(){console.warn("THREE.WebGLRenderer: .shadowMap.cullFace has been removed. Set Material.shadowSide instead.")}},renderReverseSided:{get:function(){console.warn("THREE.WebGLRenderer: .shadowMap.renderReverseSided has been removed. Set Material.shadowSide instead.")},set:function(){console.warn("THREE.WebGLRenderer: .shadowMap.renderReverseSided has been removed. Set Material.shadowSide instead.")}},renderSingleSided:{get:function(){console.warn("THREE.WebGLRenderer: .shadowMap.renderSingleSided has been removed. Set Material.shadowSide instead.")},set:function(){console.warn("THREE.WebGLRenderer: .shadowMap.renderSingleSided has been removed. Set Material.shadowSide instead.")}}});Object.defineProperties(Qt.prototype,{wrapS:{get:function(){return console.warn("THREE.WebGLRenderTarget: .wrapS is now .texture.wrapS."),this.texture.wrapS},set:function(t){console.warn("THREE.WebGLRenderTarget: .wrapS is now .texture.wrapS."),this.texture.wrapS=t}},wrapT:{get:function(){return console.warn("THREE.WebGLRenderTarget: .wrapT is now .texture.wrapT."),this.texture.wrapT},set:function(t){console.warn("THREE.WebGLRenderTarget: .wrapT is now .texture.wrapT."),this.texture.wrapT=t}},magFilter:{get:function(){return console.warn("THREE.WebGLRenderTarget: .magFilter is now .texture.magFilter."),this.texture.magFilter},set:function(t){console.warn("THREE.WebGLRenderTarget: .magFilter is now .texture.magFilter."),this.texture.magFilter=t}},minFilter:{get:function(){return console.warn("THREE.WebGLRenderTarget: .minFilter is now .texture.minFilter."),this.texture.minFilter},set:function(t){console.warn("THREE.WebGLRenderTarget: .minFilter is now .texture.minFilter."),this.texture.minFilter=t}},anisotropy:{get:function(){return console.warn("THREE.WebGLRenderTarget: .anisotropy is now .texture.anisotropy."),this.texture.anisotropy},set:function(t){console.warn("THREE.WebGLRenderTarget: .anisotropy is now .texture.anisotropy."),this.texture.anisotropy=t}},offset:{get:function(){return console.warn("THREE.WebGLRenderTarget: .offset is now .texture.offset."),this.texture.offset},set:function(t){console.warn("THREE.WebGLRenderTarget: .offset is now .texture.offset."),this.texture.offset=t}},repeat:{get:function(){return console.warn("THREE.WebGLRenderTarget: .repeat is now .texture.repeat."),this.texture.repeat},set:function(t){console.warn("THREE.WebGLRenderTarget: .repeat is now .texture.repeat."),this.texture.repeat=t}},format:{get:function(){return console.warn("THREE.WebGLRenderTarget: .format is now .texture.format."),this.texture.format},set:function(t){console.warn("THREE.WebGLRenderTarget: .format is now .texture.format."),this.texture.format=t}},type:{get:function(){return console.warn("THREE.WebGLRenderTarget: .type is now .texture.type."),this.texture.type},set:function(t){console.warn("THREE.WebGLRenderTarget: .type is now .texture.type."),this.texture.type=t}},generateMipmaps:{get:function(){return console.warn("THREE.WebGLRenderTarget: .generateMipmaps is now .texture.generateMipmaps."),this.texture.generateMipmaps},set:function(t){console.warn("THREE.WebGLRenderTarget: .generateMipmaps is now .texture.generateMipmaps."),this.texture.generateMipmaps=t}}}),uh.prototype.load=function(t){console.warn("THREE.Audio: .load has been deprecated. Use THREE.AudioLoader instead.");const e=this;return(new $c).load(t,(function(t){e.setBuffer(t)})),this},gh.prototype.getData=function(){return console.warn("THREE.AudioAnalyser: .getData() is now .getFrequencyData()."),this.getFrequencyData()},vi.prototype.updateCubeMap=function(t,e){return console.warn("THREE.CubeCamera: .updateCubeMap() is now .update()."),this.update(t,e)},vi.prototype.clear=function(t,e,n,i){return console.warn("THREE.CubeCamera: .clear() is now .renderTarget.clear()."),this.renderTarget.clear(t,e,n,i)},qt.crossOrigin=void 0,qt.loadTexture=function(t,e,n,i){console.warn("THREE.ImageUtils.loadTexture has been deprecated. Use THREE.TextureLoader() instead.");const r=new wc;r.setCrossOrigin(this.crossOrigin);const s=r.load(t,n,void 0,i);return e&&(s.mapping=e),s},qt.loadTextureCube=function(t,e,n,i){console.warn("THREE.ImageUtils.loadTextureCube has been deprecated. Use THREE.CubeTextureLoader() instead.");const r=new bc;r.setCrossOrigin(this.crossOrigin);const s=r.load(t,n,void 0,i);return e&&(s.mapping=e),s},qt.loadCompressedTexture=function(){console.error("THREE.ImageUtils.loadCompressedTexture has been removed. Use THREE.DDSLoader instead.")},qt.loadCompressedTextureCube=function(){console.error("THREE.ImageUtils.loadCompressedTextureCube has been removed. Use THREE.DDSLoader instead.")};const yu={createMultiMaterialObject:function(){console.error("THREE.SceneUtils has been moved to /examples/jsm/utils/SceneUtils.js")},detach:function(){console.error("THREE.SceneUtils has been moved to /examples/jsm/utils/SceneUtils.js")},attach:function(){console.error("THREE.SceneUtils has been moved to /examples/jsm/utils/SceneUtils.js")}};"undefined"!=typeof __THREE_DEVTOOLS__&&__THREE_DEVTOOLS__.dispatchEvent(new CustomEvent("register",{detail:{revision:e}})),"undefined"!=typeof window&&(window.__THREE__?console.warn("WARNING: Multiple instances of Three.js being imported."):window.__THREE__=e),t.ACESFilmicToneMapping=4,t.AddEquation=n,t.AddOperation=2,t.AdditiveAnimationBlendMode=st,t.AdditiveBlending=2,t.AlphaFormat=1021,t.AlwaysDepth=1,t.AlwaysStencilFunc=519,t.AmbientLight=Fc,t.AmbientLightProbe=eh,t.AnimationClip=dc,t.AnimationLoader=class extends vc{constructor(t){super(t)}load(t,e,n,i){const r=this,s=new xc(this.manager);s.setPath(this.path),s.setRequestHeader(this.requestHeader),s.setWithCredentials(this.withCredentials),s.load(t,(function(n){try{e(r.parse(JSON.parse(n)))}catch(e){i?i(e):console.error(e),r.manager.itemError(t)}}),n,i)}parse(t){const e=[];for(let n=0;n.99999)this.quaternion.set(0,0,0,1);else if(t.y<-.99999)this.quaternion.set(1,0,0,0);else{au.set(t.z,0,-t.x).normalize();const e=Math.acos(t.y);this.quaternion.setFromAxisAngle(au,e)}}setLength(t,e=.2*t,n=.2*e){this.line.scale.set(1,Math.max(1e-4,t-e),1),this.line.updateMatrix(),this.cone.scale.set(n,e,n),this.cone.position.y=t,this.cone.updateMatrix()}setColor(t){this.line.material.color.set(t),this.cone.material.color.set(t)}copy(t){return super.copy(t,!1),this.line.copy(t.line),this.cone.copy(t.cone),this}},t.Audio=uh,t.AudioAnalyser=gh,t.AudioContext=Qc,t.AudioListener=class extends ln{constructor(){super(),this.type="AudioListener",this.context=Qc.getContext(),this.gain=this.context.createGain(),this.gain.connect(this.context.destination),this.filter=null,this.timeDelta=0,this._clock=new sh}getInput(){return this.gain}removeFilter(){return null!==this.filter&&(this.gain.disconnect(this.filter),this.filter.disconnect(this.context.destination),this.gain.connect(this.context.destination),this.filter=null),this}getFilter(){return this.filter}setFilter(t){return null!==this.filter?(this.gain.disconnect(this.filter),this.filter.disconnect(this.context.destination)):this.gain.disconnect(this.context.destination),this.filter=t,this.gain.connect(this.filter),this.filter.connect(this.context.destination),this}getMasterVolume(){return this.gain.gain.value}setMasterVolume(t){return this.gain.gain.setTargetAtTime(t,this.context.currentTime,.01),this}updateMatrixWorld(t){super.updateMatrixWorld(t);const e=this.context.listener,n=this.up;if(this.timeDelta=this._clock.getDelta(),this.matrixWorld.decompose(oh,lh,ch),hh.set(0,0,-1).applyQuaternion(lh),e.positionX){const t=this.context.currentTime+this.timeDelta;e.positionX.linearRampToValueAtTime(oh.x,t),e.positionY.linearRampToValueAtTime(oh.y,t),e.positionZ.linearRampToValueAtTime(oh.z,t),e.forwardX.linearRampToValueAtTime(hh.x,t),e.forwardY.linearRampToValueAtTime(hh.y,t),e.forwardZ.linearRampToValueAtTime(hh.z,t),e.upX.linearRampToValueAtTime(n.x,t),e.upY.linearRampToValueAtTime(n.y,t),e.upZ.linearRampToValueAtTime(n.z,t)}else e.setPosition(oh.x,oh.y,oh.z),e.setOrientation(hh.x,hh.y,hh.z,n.x,n.y,n.z)}},t.AudioLoader=$c,t.AxesHelper=cu,t.AxisHelper=class extends cu{constructor(t){console.warn("THREE.AxisHelper has been renamed to THREE.AxesHelper."),super(t)}},t.BackSide=1,t.BasicDepthPacking=3200,t.BasicShadowMap=0,t.BinaryTextureLoader=class extends Mc{constructor(t){console.warn("THREE.BinaryTextureLoader has been renamed to THREE.DataTextureLoader."),super(t)}},t.Bone=Fa,t.BooleanKeyframeTrack=sc,t.BoundingBoxHelper=class extends su{constructor(t,e){console.warn("THREE.BoundingBoxHelper has been deprecated. Creating a THREE.BoxHelper instead."),super(t,e)}},t.Box2=Uh,t.Box3=le,t.Box3Helper=class extends so{constructor(t,e=16776960){const n=new Uint16Array([0,1,1,2,2,3,3,0,4,5,5,6,6,7,7,4,0,4,1,5,2,6,3,7]),i=new Vn;i.setIndex(new Tn(n,1)),i.setAttribute("position",new Nn([1,1,1,-1,1,1,-1,-1,1,1,-1,1,1,1,-1,-1,1,-1,-1,-1,-1,1,-1,-1],3)),super(i,new Za({color:e,toneMapped:!1})),this.box=t,this.type="Box3Helper",this.geometry.computeBoundingSphere()}updateMatrixWorld(t){const e=this.box;e.isEmpty()||(e.getCenter(this.position),e.getSize(this.scale),this.scale.multiplyScalar(.5),super.updateMatrixWorld(t))}},t.BoxBufferGeometry=ci,t.BoxGeometry=ci,t.BoxHelper=su,t.BufferAttribute=Tn,t.BufferGeometry=Vn,t.BufferGeometryLoader=qc,t.ByteType=1010,t.Cache=mc,t.Camera=mi,t.CameraHelper=class extends so{constructor(t){const e=new Vn,n=new Za({color:16777215,vertexColors:!0,toneMapped:!1}),i=[],r=[],s={},a=new Wt(16755200),o=new Wt(16711680),l=new Wt(43775),c=new Wt(16777215),h=new Wt(3355443);function u(t,e,n){d(t,n),d(e,n)}function d(t,e){i.push(0,0,0),r.push(e.r,e.g,e.b),void 0===s[t]&&(s[t]=[]),s[t].push(i.length/3-1)}u("n1","n2",a),u("n2","n4",a),u("n4","n3",a),u("n3","n1",a),u("f1","f2",a),u("f2","f4",a),u("f4","f3",a),u("f3","f1",a),u("n1","f1",a),u("n2","f2",a),u("n3","f3",a),u("n4","f4",a),u("p","n1",o),u("p","n2",o),u("p","n3",o),u("p","n4",o),u("u1","u2",l),u("u2","u3",l),u("u3","u1",l),u("c","t",c),u("p","c",h),u("cn1","cn2",h),u("cn3","cn4",h),u("cf1","cf2",h),u("cf3","cf4",h),e.setAttribute("position",new Nn(i,3)),e.setAttribute("color",new Nn(r,3)),super(e,n),this.type="CameraHelper",this.camera=t,this.camera.updateProjectionMatrix&&this.camera.updateProjectionMatrix(),this.matrix=t.matrixWorld,this.matrixAutoUpdate=!1,this.pointMap=s,this.update()}update(){const t=this.geometry,e=this.pointMap;nu.projectionMatrixInverse.copy(this.camera.projectionMatrixInverse),iu("c",e,t,nu,0,0,-1),iu("t",e,t,nu,0,0,1),iu("n1",e,t,nu,-1,-1,-1),iu("n2",e,t,nu,1,-1,-1),iu("n3",e,t,nu,-1,1,-1),iu("n4",e,t,nu,1,1,-1),iu("f1",e,t,nu,-1,-1,1),iu("f2",e,t,nu,1,-1,1),iu("f3",e,t,nu,-1,1,1),iu("f4",e,t,nu,1,1,1),iu("u1",e,t,nu,.7,1.1,-1),iu("u2",e,t,nu,-.7,1.1,-1),iu("u3",e,t,nu,0,2,-1),iu("cf1",e,t,nu,-1,0,1),iu("cf2",e,t,nu,1,0,1),iu("cf3",e,t,nu,0,-1,1),iu("cf4",e,t,nu,0,1,1),iu("cn1",e,t,nu,-1,0,-1),iu("cn2",e,t,nu,1,0,-1),iu("cn3",e,t,nu,0,-1,-1),iu("cn4",e,t,nu,0,1,-1),t.getAttribute("position").needsUpdate=!0}dispose(){this.geometry.dispose(),this.material.dispose()}},t.CanvasRenderer=function(){console.error("THREE.CanvasRenderer has been removed")},t.CanvasTexture=yo,t.CapsuleBufferGeometry=ko,t.CapsuleGeometry=ko,t.CatmullRomCurve3=Ao,t.CineonToneMapping=3,t.CircleBufferGeometry=Vo,t.CircleGeometry=Vo,t.ClampToEdgeWrapping=h,t.Clock=sh,t.Color=Wt,t.ColorKeyframeTrack=ac,t.ColorManagement=Ot,t.CompressedTexture=vo,t.CompressedTextureLoader=class extends vc{constructor(t){super(t)}load(t,e,n,i){const r=this,s=[],a=new vo,o=new xc(this.manager);o.setPath(this.path),o.setResponseType("arraybuffer"),o.setRequestHeader(this.requestHeader),o.setWithCredentials(r.withCredentials);let l=0;function c(c){o.load(t[c],(function(t){const n=r.parse(t,!0);s[c]={width:n.width,height:n.height,format:n.format,mipmaps:n.mipmaps},l+=1,6===l&&(1===n.mipmapCount&&(a.minFilter=f),a.image=s,a.format=n.format,a.needsUpdate=!0,e&&e(a))}),n,i)}if(Array.isArray(t))for(let e=0,n=t.length;e65504&&console.warn("THREE.DataUtils.toHalfFloat(): Value out of range."),t=bt(t,-65504,65504),uu[0]=t;const e=du[0],n=e>>23&511;return pu[n]+((8388607&e)>>mu[n])}static fromHalfFloat(t){const e=t>>10;return du[0]=fu[vu[e]+(1023&t)]+gu[e],uu[0]}},t.DecrementStencilOp=7683,t.DecrementWrapStencilOp=34056,t.DefaultLoadingManager=gc,t.DepthFormat=T,t.DepthStencilFormat=E,t.DepthTexture=ia,t.DirectionalLight=Uc,t.DirectionalLightHelper=class extends ln{constructor(t,e,n){super(),this.light=t,this.light.updateMatrixWorld(),this.matrix=t.matrixWorld,this.matrixAutoUpdate=!1,this.color=n,void 0===e&&(e=1);let i=new Vn;i.setAttribute("position",new Nn([-e,e,0,e,e,0,e,-e,0,-e,-e,0,-e,e,0],3));const r=new Za({fog:!1,toneMapped:!1});this.lightPlane=new no(i,r),this.add(this.lightPlane),i=new Vn,i.setAttribute("position",new Nn([0,0,0,0,0,1],3)),this.targetLine=new no(i,r),this.add(this.targetLine),this.update()}dispose(){this.lightPlane.geometry.dispose(),this.lightPlane.material.dispose(),this.targetLine.geometry.dispose(),this.targetLine.material.dispose()}update(){Qh.setFromMatrixPosition(this.light.matrixWorld),$h.setFromMatrixPosition(this.light.target.matrixWorld),tu.subVectors($h,Qh),this.lightPlane.lookAt($h),void 0!==this.color?(this.lightPlane.material.color.set(this.color),this.targetLine.material.color.set(this.color)):(this.lightPlane.material.color.copy(this.light.color),this.targetLine.material.color.copy(this.light.color)),this.targetLine.lookAt($h),this.targetLine.scale.z=tu.length()}},t.DiscreteInterpolant=ic,t.DodecahedronBufferGeometry=Xo,t.DodecahedronGeometry=Xo,t.DoubleSide=2,t.DstAlphaFactor=206,t.DstColorFactor=208,t.DynamicBufferAttribute=class extends Tn{constructor(t,e){console.warn("THREE.DynamicBufferAttribute has been removed. Use new THREE.BufferAttribute().setUsage( THREE.DynamicDrawUsage ) instead."),super(t,e),this.setUsage(dt)}},t.DynamicCopyUsage=35050,t.DynamicDrawUsage=dt,t.DynamicReadUsage=35049,t.EdgesGeometry=Qo,t.EdgesHelper=class extends so{constructor(t,e){console.warn("THREE.EdgesHelper has been removed. Use THREE.EdgesGeometry instead."),super(new Qo(t.geometry),new Za({color:void 0!==e?e:16777215}))}},t.EllipseCurve=_o,t.EqualDepth=4,t.EqualStencilFunc=514,t.EquirectangularReflectionMapping=a,t.EquirectangularRefractionMapping=o,t.Euler=qe,t.EventDispatcher=ft,t.ExtrudeBufferGeometry=Rl,t.ExtrudeGeometry=Rl,t.FaceColors=1,t.FileLoader=xc,t.FlatShading=1,t.Float16BufferAttribute=In,t.Float32Attribute=class extends Nn{constructor(t,e){console.warn("THREE.Float32Attribute has been removed. Use new THREE.Float32BufferAttribute() instead."),super(t,e)}},t.Float32BufferAttribute=Nn,t.Float64Attribute=class extends Bn{constructor(t,e){console.warn("THREE.Float64Attribute has been removed. Use new THREE.Float64BufferAttribute() instead."),super(t,e)}},t.Float64BufferAttribute=Bn,t.FloatType=b,t.Fog=ca,t.FogExp2=la,t.Font=function(){console.error("THREE.Font has been moved to /examples/jsm/loaders/FontLoader.js")},t.FontLoader=function(){console.error("THREE.FontLoader has been moved to /examples/jsm/loaders/FontLoader.js")},t.FramebufferTexture=go,t.FrontSide=0,t.Frustum=Ei,t.GLBufferAttribute=Nh,t.GLSL1="100",t.GLSL3=pt,t.GreaterDepth=6,t.GreaterEqualDepth=5,t.GreaterEqualStencilFunc=518,t.GreaterStencilFunc=516,t.GridHelper=Kh,t.Group=ta,t.HalfFloatType=M,t.HemisphereLight=Tc,t.HemisphereLightHelper=class extends ln{constructor(t,e,n){super(),this.light=t,this.light.updateMatrixWorld(),this.matrix=t.matrixWorld,this.matrixAutoUpdate=!1,this.color=n;const i=new Pl(e);i.rotateY(.5*Math.PI),this.material=new Mn({wireframe:!0,fog:!1,toneMapped:!1}),void 0===this.color&&(this.material.vertexColors=!0);const r=i.getAttribute("position"),s=new Float32Array(3*r.count);i.setAttribute("color",new Tn(s,3)),this.add(new oi(i,this.material)),this.update()}dispose(){this.children[0].geometry.dispose(),this.children[0].material.dispose()}update(){const t=this.children[0];if(void 0!==this.color)this.material.color.set(this.color);else{const e=t.geometry.getAttribute("color");Yh.copy(this.light.color),Zh.copy(this.light.groundColor);for(let t=0,n=e.count;t0){const n=new fc(e);r=new _c(n),r.setCrossOrigin(this.crossOrigin);for(let e=0,n=t.length;e0){i=new _c(this.manager),i.setCrossOrigin(this.crossOrigin);for(let e=0,i=t.length;eNumber.EPSILON){if(l<0&&(n=e[s],o=-o,a=e[r],l=-l),t.ya.y)continue;if(t.y===n.y){if(t.x===n.x)return!0}else{const e=l*(t.x-n.x)-o*(t.y-n.y);if(0===e)return!0;if(e<0)continue;i=!i}}else{if(t.y!==n.y)continue;if(a.x<=t.x&&t.x<=n.x||n.x<=t.x&&t.x<=a.x)return!0}}return i}const r=Tl.isClockWise,s=this.subPaths;if(0===s.length)return[];if(!0===e)return n(s);let a,o,l;const c=[];if(1===s.length)return o=s[0],l=new $o,l.curves=o.curves,c.push(l),c;let h=!r(s[0].getPoints());h=t?!h:h;const u=[],d=[];let p,m,f=[],g=0;d[g]=void 0,f[g]=[];for(let e=0,n=s.length;e1){let t=!1,e=0;for(let t=0,e=d.length;t0&&!1===t&&(f=u)}for(let t=0,e=d.length;t> 8 & 0xff ] + _lut[ d0 >> 16 & 0xff ] + _lut[ d0 >> 24 & 0xff ] + '-' + - _lut[ d1 & 0xff ] + _lut[ d1 >> 8 & 0xff ] + '-' + _lut[ d1 >> 16 & 0x0f | 0x40 ] + _lut[ d1 >> 24 & 0xff ] + '-' + - _lut[ d2 & 0x3f | 0x80 ] + _lut[ d2 >> 8 & 0xff ] + '-' + _lut[ d2 >> 16 & 0xff ] + _lut[ d2 >> 24 & 0xff ] + - _lut[ d3 & 0xff ] + _lut[ d3 >> 8 & 0xff ] + _lut[ d3 >> 16 & 0xff ] + _lut[ d3 >> 24 & 0xff ]; - - // .toLowerCase() here flattens concatenated strings to save heap memory space. - return uuid.toLowerCase(); - - } - - function clamp( value, min, max ) { - - return Math.max( min, Math.min( max, value ) ); - - } - - // compute euclidean modulo of m % n - // https://en.wikipedia.org/wiki/Modulo_operation - function euclideanModulo( n, m ) { - - return ( ( n % m ) + m ) % m; - - } - - // Linear mapping from range to range - function mapLinear( x, a1, a2, b1, b2 ) { - - return b1 + ( x - a1 ) * ( b2 - b1 ) / ( a2 - a1 ); - - } - - // https://www.gamedev.net/tutorials/programming/general-and-gameplay-programming/inverse-lerp-a-super-useful-yet-often-overlooked-function-r5230/ - function inverseLerp( x, y, value ) { - - if ( x !== y ) { - - return ( value - x ) / ( y - x ); - - } else { - - return 0; - - } - - } - - // https://en.wikipedia.org/wiki/Linear_interpolation - function lerp( x, y, t ) { - - return ( 1 - t ) * x + t * y; - - } - - // http://www.rorydriscoll.com/2016/03/07/frame-rate-independent-damping-using-lerp/ - function damp( x, y, lambda, dt ) { - - return lerp( x, y, 1 - Math.exp( - lambda * dt ) ); - - } - - // https://www.desmos.com/calculator/vcsjnyz7x4 - function pingpong( x, length = 1 ) { - - return length - Math.abs( euclideanModulo( x, length * 2 ) - length ); - - } - - // http://en.wikipedia.org/wiki/Smoothstep - function smoothstep( x, min, max ) { - - if ( x <= min ) return 0; - if ( x >= max ) return 1; - - x = ( x - min ) / ( max - min ); - - return x * x * ( 3 - 2 * x ); - - } - - function smootherstep( x, min, max ) { - - if ( x <= min ) return 0; - if ( x >= max ) return 1; - - x = ( x - min ) / ( max - min ); - - return x * x * x * ( x * ( x * 6 - 15 ) + 10 ); - - } - - // Random integer from interval - function randInt( low, high ) { - - return low + Math.floor( Math.random() * ( high - low + 1 ) ); - - } - - // Random float from interval - function randFloat( low, high ) { - - return low + Math.random() * ( high - low ); - - } - - // Random float from <-range/2, range/2> interval - function randFloatSpread( range ) { - - return range * ( 0.5 - Math.random() ); - - } - - // Deterministic pseudo-random float in the interval [ 0, 1 ] - function seededRandom( s ) { - - if ( s !== undefined ) _seed = s; - - // Mulberry32 generator - - let t = _seed += 0x6D2B79F5; - - t = Math.imul( t ^ t >>> 15, t | 1 ); - - t ^= t + Math.imul( t ^ t >>> 7, t | 61 ); - - return ( ( t ^ t >>> 14 ) >>> 0 ) / 4294967296; - - } - - function degToRad( degrees ) { - - return degrees * DEG2RAD; - - } - - function radToDeg( radians ) { - - return radians * RAD2DEG; - - } - - function isPowerOfTwo( value ) { - - return ( value & ( value - 1 ) ) === 0 && value !== 0; - - } - - function ceilPowerOfTwo( value ) { - - return Math.pow( 2, Math.ceil( Math.log( value ) / Math.LN2 ) ); - - } - - function floorPowerOfTwo( value ) { - - return Math.pow( 2, Math.floor( Math.log( value ) / Math.LN2 ) ); - - } - - function setQuaternionFromProperEuler( q, a, b, c, order ) { - - // Intrinsic Proper Euler Angles - see https://en.wikipedia.org/wiki/Euler_angles - - // rotations are applied to the axes in the order specified by 'order' - // rotation by angle 'a' is applied first, then by angle 'b', then by angle 'c' - // angles are in radians - - const cos = Math.cos; - const sin = Math.sin; - - const c2 = cos( b / 2 ); - const s2 = sin( b / 2 ); - - const c13 = cos( ( a + c ) / 2 ); - const s13 = sin( ( a + c ) / 2 ); - - const c1_3 = cos( ( a - c ) / 2 ); - const s1_3 = sin( ( a - c ) / 2 ); - - const c3_1 = cos( ( c - a ) / 2 ); - const s3_1 = sin( ( c - a ) / 2 ); - - switch ( order ) { - - case 'XYX': - q.set( c2 * s13, s2 * c1_3, s2 * s1_3, c2 * c13 ); - break; - - case 'YZY': - q.set( s2 * s1_3, c2 * s13, s2 * c1_3, c2 * c13 ); - break; - - case 'ZXZ': - q.set( s2 * c1_3, s2 * s1_3, c2 * s13, c2 * c13 ); - break; - - case 'XZX': - q.set( c2 * s13, s2 * s3_1, s2 * c3_1, c2 * c13 ); - break; - - case 'YXY': - q.set( s2 * c3_1, c2 * s13, s2 * s3_1, c2 * c13 ); - break; - - case 'ZYZ': - q.set( s2 * s3_1, s2 * c3_1, c2 * s13, c2 * c13 ); - break; - - default: - console.warn( 'THREE.MathUtils: .setQuaternionFromProperEuler() encountered an unknown order: ' + order ); - - } - - } - - function denormalize( value, array ) { - - switch ( array.constructor ) { - - case Float32Array: - - return value; - - case Uint16Array: - - return value / 65535.0; - - case Uint8Array: - - return value / 255.0; - - case Int16Array: - - return Math.max( value / 32767.0, - 1.0 ); - - case Int8Array: - - return Math.max( value / 127.0, - 1.0 ); - - default: - - throw new Error( 'Invalid component type.' ); - - } - - } - - function normalize( value, array ) { - - switch ( array.constructor ) { - - case Float32Array: - - return value; - - case Uint16Array: - - return Math.round( value * 65535.0 ); - - case Uint8Array: - - return Math.round( value * 255.0 ); - - case Int16Array: - - return Math.round( value * 32767.0 ); - - case Int8Array: - - return Math.round( value * 127.0 ); - - default: - - throw new Error( 'Invalid component type.' ); - - } - - } - - const MathUtils = { - DEG2RAD: DEG2RAD, - RAD2DEG: RAD2DEG, - generateUUID: generateUUID, - clamp: clamp, - euclideanModulo: euclideanModulo, - mapLinear: mapLinear, - inverseLerp: inverseLerp, - lerp: lerp, - damp: damp, - pingpong: pingpong, - smoothstep: smoothstep, - smootherstep: smootherstep, - randInt: randInt, - randFloat: randFloat, - randFloatSpread: randFloatSpread, - seededRandom: seededRandom, - degToRad: degToRad, - radToDeg: radToDeg, - isPowerOfTwo: isPowerOfTwo, - ceilPowerOfTwo: ceilPowerOfTwo, - floorPowerOfTwo: floorPowerOfTwo, - setQuaternionFromProperEuler: setQuaternionFromProperEuler, - normalize: normalize, - denormalize: denormalize - }; - - class Vector2 { - - constructor( x = 0, y = 0 ) { - - Vector2.prototype.isVector2 = true; - - this.x = x; - this.y = y; - - } - - get width() { - - return this.x; - - } - - set width( value ) { - - this.x = value; - - } - - get height() { - - return this.y; - - } - - set height( value ) { - - this.y = value; - - } - - set( x, y ) { - - this.x = x; - this.y = y; - - return this; - - } - - setScalar( scalar ) { - - this.x = scalar; - this.y = scalar; - - return this; - - } - - setX( x ) { - - this.x = x; - - return this; - - } - - setY( y ) { - - this.y = y; - - return this; - - } - - setComponent( index, value ) { - - switch ( index ) { - - case 0: this.x = value; break; - case 1: this.y = value; break; - default: throw new Error( 'index is out of range: ' + index ); - - } - - return this; - - } - - getComponent( index ) { - - switch ( index ) { - - case 0: return this.x; - case 1: return this.y; - default: throw new Error( 'index is out of range: ' + index ); - - } - - } - - clone() { - - return new this.constructor( this.x, this.y ); - - } - - copy( v ) { - - this.x = v.x; - this.y = v.y; - - return this; - - } - - add( v ) { - - this.x += v.x; - this.y += v.y; - - return this; - - } - - addScalar( s ) { - - this.x += s; - this.y += s; - - return this; - - } - - addVectors( a, b ) { - - this.x = a.x + b.x; - this.y = a.y + b.y; - - return this; - - } - - addScaledVector( v, s ) { - - this.x += v.x * s; - this.y += v.y * s; - - return this; - - } - - sub( v ) { - - this.x -= v.x; - this.y -= v.y; - - return this; - - } - - subScalar( s ) { - - this.x -= s; - this.y -= s; - - return this; - - } - - subVectors( a, b ) { - - this.x = a.x - b.x; - this.y = a.y - b.y; - - return this; - - } - - multiply( v ) { - - this.x *= v.x; - this.y *= v.y; - - return this; - - } - - multiplyScalar( scalar ) { - - this.x *= scalar; - this.y *= scalar; - - return this; - - } - - divide( v ) { - - this.x /= v.x; - this.y /= v.y; - - return this; - - } - - divideScalar( scalar ) { - - return this.multiplyScalar( 1 / scalar ); - - } - - applyMatrix3( m ) { - - const x = this.x, y = this.y; - const e = m.elements; - - this.x = e[ 0 ] * x + e[ 3 ] * y + e[ 6 ]; - this.y = e[ 1 ] * x + e[ 4 ] * y + e[ 7 ]; - - return this; - - } - - min( v ) { - - this.x = Math.min( this.x, v.x ); - this.y = Math.min( this.y, v.y ); - - return this; - - } - - max( v ) { - - this.x = Math.max( this.x, v.x ); - this.y = Math.max( this.y, v.y ); - - return this; - - } - - clamp( min, max ) { - - // assumes min < max, componentwise - - this.x = Math.max( min.x, Math.min( max.x, this.x ) ); - this.y = Math.max( min.y, Math.min( max.y, this.y ) ); - - return this; - - } - - clampScalar( minVal, maxVal ) { - - this.x = Math.max( minVal, Math.min( maxVal, this.x ) ); - this.y = Math.max( minVal, Math.min( maxVal, this.y ) ); - - return this; - - } - - clampLength( min, max ) { - - const length = this.length(); - - return this.divideScalar( length || 1 ).multiplyScalar( Math.max( min, Math.min( max, length ) ) ); - - } - - floor() { - - this.x = Math.floor( this.x ); - this.y = Math.floor( this.y ); - - return this; - - } - - ceil() { - - this.x = Math.ceil( this.x ); - this.y = Math.ceil( this.y ); - - return this; - - } - - round() { - - this.x = Math.round( this.x ); - this.y = Math.round( this.y ); - - return this; - - } - - roundToZero() { - - this.x = ( this.x < 0 ) ? Math.ceil( this.x ) : Math.floor( this.x ); - this.y = ( this.y < 0 ) ? Math.ceil( this.y ) : Math.floor( this.y ); - - return this; - - } - - negate() { - - this.x = - this.x; - this.y = - this.y; - - return this; - - } - - dot( v ) { - - return this.x * v.x + this.y * v.y; - - } - - cross( v ) { - - return this.x * v.y - this.y * v.x; - - } - - lengthSq() { - - return this.x * this.x + this.y * this.y; - - } - - length() { - - return Math.sqrt( this.x * this.x + this.y * this.y ); - - } - - manhattanLength() { - - return Math.abs( this.x ) + Math.abs( this.y ); - - } - - normalize() { - - return this.divideScalar( this.length() || 1 ); - - } - - angle() { - - // computes the angle in radians with respect to the positive x-axis - - const angle = Math.atan2( - this.y, - this.x ) + Math.PI; - - return angle; - - } - - distanceTo( v ) { - - return Math.sqrt( this.distanceToSquared( v ) ); - - } - - distanceToSquared( v ) { - - const dx = this.x - v.x, dy = this.y - v.y; - return dx * dx + dy * dy; - - } - - manhattanDistanceTo( v ) { - - return Math.abs( this.x - v.x ) + Math.abs( this.y - v.y ); - - } - - setLength( length ) { - - return this.normalize().multiplyScalar( length ); - - } - - lerp( v, alpha ) { - - this.x += ( v.x - this.x ) * alpha; - this.y += ( v.y - this.y ) * alpha; - - return this; - - } - - lerpVectors( v1, v2, alpha ) { - - this.x = v1.x + ( v2.x - v1.x ) * alpha; - this.y = v1.y + ( v2.y - v1.y ) * alpha; - - return this; - - } - - equals( v ) { - - return ( ( v.x === this.x ) && ( v.y === this.y ) ); - - } - - fromArray( array, offset = 0 ) { - - this.x = array[ offset ]; - this.y = array[ offset + 1 ]; - - return this; - - } - - toArray( array = [], offset = 0 ) { - - array[ offset ] = this.x; - array[ offset + 1 ] = this.y; - - return array; - - } - - fromBufferAttribute( attribute, index ) { - - this.x = attribute.getX( index ); - this.y = attribute.getY( index ); - - return this; - - } - - rotateAround( center, angle ) { - - const c = Math.cos( angle ), s = Math.sin( angle ); - - const x = this.x - center.x; - const y = this.y - center.y; - - this.x = x * c - y * s + center.x; - this.y = x * s + y * c + center.y; - - return this; - - } - - random() { - - this.x = Math.random(); - this.y = Math.random(); - - return this; - - } - - *[ Symbol.iterator ]() { - - yield this.x; - yield this.y; - - } - - } - - class Matrix3 { - - constructor() { - - Matrix3.prototype.isMatrix3 = true; - - this.elements = [ - - 1, 0, 0, - 0, 1, 0, - 0, 0, 1 - - ]; - - } - - set( n11, n12, n13, n21, n22, n23, n31, n32, n33 ) { - - const te = this.elements; - - te[ 0 ] = n11; te[ 1 ] = n21; te[ 2 ] = n31; - te[ 3 ] = n12; te[ 4 ] = n22; te[ 5 ] = n32; - te[ 6 ] = n13; te[ 7 ] = n23; te[ 8 ] = n33; - - return this; - - } - - identity() { - - this.set( - - 1, 0, 0, - 0, 1, 0, - 0, 0, 1 - - ); - - return this; - - } - - copy( m ) { - - const te = this.elements; - const me = m.elements; - - te[ 0 ] = me[ 0 ]; te[ 1 ] = me[ 1 ]; te[ 2 ] = me[ 2 ]; - te[ 3 ] = me[ 3 ]; te[ 4 ] = me[ 4 ]; te[ 5 ] = me[ 5 ]; - te[ 6 ] = me[ 6 ]; te[ 7 ] = me[ 7 ]; te[ 8 ] = me[ 8 ]; - - return this; - - } - - extractBasis( xAxis, yAxis, zAxis ) { - - xAxis.setFromMatrix3Column( this, 0 ); - yAxis.setFromMatrix3Column( this, 1 ); - zAxis.setFromMatrix3Column( this, 2 ); - - return this; - - } - - setFromMatrix4( m ) { - - const me = m.elements; - - this.set( - - me[ 0 ], me[ 4 ], me[ 8 ], - me[ 1 ], me[ 5 ], me[ 9 ], - me[ 2 ], me[ 6 ], me[ 10 ] - - ); - - return this; - - } - - multiply( m ) { - - return this.multiplyMatrices( this, m ); - - } - - premultiply( m ) { - - return this.multiplyMatrices( m, this ); - - } - - multiplyMatrices( a, b ) { - - const ae = a.elements; - const be = b.elements; - const te = this.elements; - - const a11 = ae[ 0 ], a12 = ae[ 3 ], a13 = ae[ 6 ]; - const a21 = ae[ 1 ], a22 = ae[ 4 ], a23 = ae[ 7 ]; - const a31 = ae[ 2 ], a32 = ae[ 5 ], a33 = ae[ 8 ]; - - const b11 = be[ 0 ], b12 = be[ 3 ], b13 = be[ 6 ]; - const b21 = be[ 1 ], b22 = be[ 4 ], b23 = be[ 7 ]; - const b31 = be[ 2 ], b32 = be[ 5 ], b33 = be[ 8 ]; - - te[ 0 ] = a11 * b11 + a12 * b21 + a13 * b31; - te[ 3 ] = a11 * b12 + a12 * b22 + a13 * b32; - te[ 6 ] = a11 * b13 + a12 * b23 + a13 * b33; - - te[ 1 ] = a21 * b11 + a22 * b21 + a23 * b31; - te[ 4 ] = a21 * b12 + a22 * b22 + a23 * b32; - te[ 7 ] = a21 * b13 + a22 * b23 + a23 * b33; - - te[ 2 ] = a31 * b11 + a32 * b21 + a33 * b31; - te[ 5 ] = a31 * b12 + a32 * b22 + a33 * b32; - te[ 8 ] = a31 * b13 + a32 * b23 + a33 * b33; - - return this; - - } - - multiplyScalar( s ) { - - const te = this.elements; - - te[ 0 ] *= s; te[ 3 ] *= s; te[ 6 ] *= s; - te[ 1 ] *= s; te[ 4 ] *= s; te[ 7 ] *= s; - te[ 2 ] *= s; te[ 5 ] *= s; te[ 8 ] *= s; - - return this; - - } - - determinant() { - - const te = this.elements; - - const a = te[ 0 ], b = te[ 1 ], c = te[ 2 ], - d = te[ 3 ], e = te[ 4 ], f = te[ 5 ], - g = te[ 6 ], h = te[ 7 ], i = te[ 8 ]; - - return a * e * i - a * f * h - b * d * i + b * f * g + c * d * h - c * e * g; - - } - - invert() { - - const te = this.elements, - - n11 = te[ 0 ], n21 = te[ 1 ], n31 = te[ 2 ], - n12 = te[ 3 ], n22 = te[ 4 ], n32 = te[ 5 ], - n13 = te[ 6 ], n23 = te[ 7 ], n33 = te[ 8 ], - - t11 = n33 * n22 - n32 * n23, - t12 = n32 * n13 - n33 * n12, - t13 = n23 * n12 - n22 * n13, - - det = n11 * t11 + n21 * t12 + n31 * t13; - - if ( det === 0 ) return this.set( 0, 0, 0, 0, 0, 0, 0, 0, 0 ); - - const detInv = 1 / det; - - te[ 0 ] = t11 * detInv; - te[ 1 ] = ( n31 * n23 - n33 * n21 ) * detInv; - te[ 2 ] = ( n32 * n21 - n31 * n22 ) * detInv; - - te[ 3 ] = t12 * detInv; - te[ 4 ] = ( n33 * n11 - n31 * n13 ) * detInv; - te[ 5 ] = ( n31 * n12 - n32 * n11 ) * detInv; - - te[ 6 ] = t13 * detInv; - te[ 7 ] = ( n21 * n13 - n23 * n11 ) * detInv; - te[ 8 ] = ( n22 * n11 - n21 * n12 ) * detInv; - - return this; - - } - - transpose() { - - let tmp; - const m = this.elements; - - tmp = m[ 1 ]; m[ 1 ] = m[ 3 ]; m[ 3 ] = tmp; - tmp = m[ 2 ]; m[ 2 ] = m[ 6 ]; m[ 6 ] = tmp; - tmp = m[ 5 ]; m[ 5 ] = m[ 7 ]; m[ 7 ] = tmp; - - return this; - - } - - getNormalMatrix( matrix4 ) { - - return this.setFromMatrix4( matrix4 ).invert().transpose(); - - } - - transposeIntoArray( r ) { - - const m = this.elements; - - r[ 0 ] = m[ 0 ]; - r[ 1 ] = m[ 3 ]; - r[ 2 ] = m[ 6 ]; - r[ 3 ] = m[ 1 ]; - r[ 4 ] = m[ 4 ]; - r[ 5 ] = m[ 7 ]; - r[ 6 ] = m[ 2 ]; - r[ 7 ] = m[ 5 ]; - r[ 8 ] = m[ 8 ]; - - return this; - - } - - setUvTransform( tx, ty, sx, sy, rotation, cx, cy ) { - - const c = Math.cos( rotation ); - const s = Math.sin( rotation ); - - this.set( - sx * c, sx * s, - sx * ( c * cx + s * cy ) + cx + tx, - - sy * s, sy * c, - sy * ( - s * cx + c * cy ) + cy + ty, - 0, 0, 1 - ); - - return this; - - } - - // - - scale( sx, sy ) { - - this.premultiply( _m3.makeScale( sx, sy ) ); - - return this; - - } - - rotate( theta ) { - - this.premultiply( _m3.makeRotation( - theta ) ); - - return this; - - } - - translate( tx, ty ) { - - this.premultiply( _m3.makeTranslation( tx, ty ) ); - - return this; - - } - - // for 2D Transforms - - makeTranslation( x, y ) { - - this.set( - - 1, 0, x, - 0, 1, y, - 0, 0, 1 - - ); - - return this; - - } - - makeRotation( theta ) { - - // counterclockwise - - const c = Math.cos( theta ); - const s = Math.sin( theta ); - - this.set( - - c, - s, 0, - s, c, 0, - 0, 0, 1 - - ); - - return this; - - } - - makeScale( x, y ) { - - this.set( - - x, 0, 0, - 0, y, 0, - 0, 0, 1 - - ); - - return this; - - } - - // - - equals( matrix ) { - - const te = this.elements; - const me = matrix.elements; - - for ( let i = 0; i < 9; i ++ ) { - - if ( te[ i ] !== me[ i ] ) return false; - - } - - return true; - - } - - fromArray( array, offset = 0 ) { - - for ( let i = 0; i < 9; i ++ ) { - - this.elements[ i ] = array[ i + offset ]; - - } - - return this; - - } - - toArray( array = [], offset = 0 ) { - - const te = this.elements; - - array[ offset ] = te[ 0 ]; - array[ offset + 1 ] = te[ 1 ]; - array[ offset + 2 ] = te[ 2 ]; - - array[ offset + 3 ] = te[ 3 ]; - array[ offset + 4 ] = te[ 4 ]; - array[ offset + 5 ] = te[ 5 ]; - - array[ offset + 6 ] = te[ 6 ]; - array[ offset + 7 ] = te[ 7 ]; - array[ offset + 8 ] = te[ 8 ]; - - return array; - - } - - clone() { - - return new this.constructor().fromArray( this.elements ); - - } - - } - - const _m3 = /*@__PURE__*/ new Matrix3(); - - function arrayNeedsUint32( array ) { - - // assumes larger values usually on last - - for ( let i = array.length - 1; i >= 0; -- i ) { - - if ( array[ i ] >= 65535 ) return true; // account for PRIMITIVE_RESTART_FIXED_INDEX, #24565 - - } - - return false; - - } - - const TYPED_ARRAYS = { - Int8Array: Int8Array, - Uint8Array: Uint8Array, - Uint8ClampedArray: Uint8ClampedArray, - Int16Array: Int16Array, - Uint16Array: Uint16Array, - Int32Array: Int32Array, - Uint32Array: Uint32Array, - Float32Array: Float32Array, - Float64Array: Float64Array - }; - - function getTypedArray( type, buffer ) { - - return new TYPED_ARRAYS[ type ]( buffer ); - - } - - function createElementNS( name ) { - - return document.createElementNS( 'http://www.w3.org/1999/xhtml', name ); - - } - - class Quaternion { - - constructor( x = 0, y = 0, z = 0, w = 1 ) { - - this.isQuaternion = true; - - this._x = x; - this._y = y; - this._z = z; - this._w = w; - - } - - static slerpFlat( dst, dstOffset, src0, srcOffset0, src1, srcOffset1, t ) { - - // fuzz-free, array-based Quaternion SLERP operation - - let x0 = src0[ srcOffset0 + 0 ], - y0 = src0[ srcOffset0 + 1 ], - z0 = src0[ srcOffset0 + 2 ], - w0 = src0[ srcOffset0 + 3 ]; - - const x1 = src1[ srcOffset1 + 0 ], - y1 = src1[ srcOffset1 + 1 ], - z1 = src1[ srcOffset1 + 2 ], - w1 = src1[ srcOffset1 + 3 ]; - - if ( t === 0 ) { - - dst[ dstOffset + 0 ] = x0; - dst[ dstOffset + 1 ] = y0; - dst[ dstOffset + 2 ] = z0; - dst[ dstOffset + 3 ] = w0; - return; - - } - - if ( t === 1 ) { - - dst[ dstOffset + 0 ] = x1; - dst[ dstOffset + 1 ] = y1; - dst[ dstOffset + 2 ] = z1; - dst[ dstOffset + 3 ] = w1; - return; - - } - - if ( w0 !== w1 || x0 !== x1 || y0 !== y1 || z0 !== z1 ) { - - let s = 1 - t; - const cos = x0 * x1 + y0 * y1 + z0 * z1 + w0 * w1, - dir = ( cos >= 0 ? 1 : - 1 ), - sqrSin = 1 - cos * cos; - - // Skip the Slerp for tiny steps to avoid numeric problems: - if ( sqrSin > Number.EPSILON ) { - - const sin = Math.sqrt( sqrSin ), - len = Math.atan2( sin, cos * dir ); - - s = Math.sin( s * len ) / sin; - t = Math.sin( t * len ) / sin; - - } - - const tDir = t * dir; - - x0 = x0 * s + x1 * tDir; - y0 = y0 * s + y1 * tDir; - z0 = z0 * s + z1 * tDir; - w0 = w0 * s + w1 * tDir; - - // Normalize in case we just did a lerp: - if ( s === 1 - t ) { - - const f = 1 / Math.sqrt( x0 * x0 + y0 * y0 + z0 * z0 + w0 * w0 ); - - x0 *= f; - y0 *= f; - z0 *= f; - w0 *= f; - - } - - } - - dst[ dstOffset ] = x0; - dst[ dstOffset + 1 ] = y0; - dst[ dstOffset + 2 ] = z0; - dst[ dstOffset + 3 ] = w0; - - } - - static multiplyQuaternionsFlat( dst, dstOffset, src0, srcOffset0, src1, srcOffset1 ) { - - const x0 = src0[ srcOffset0 ]; - const y0 = src0[ srcOffset0 + 1 ]; - const z0 = src0[ srcOffset0 + 2 ]; - const w0 = src0[ srcOffset0 + 3 ]; - - const x1 = src1[ srcOffset1 ]; - const y1 = src1[ srcOffset1 + 1 ]; - const z1 = src1[ srcOffset1 + 2 ]; - const w1 = src1[ srcOffset1 + 3 ]; - - dst[ dstOffset ] = x0 * w1 + w0 * x1 + y0 * z1 - z0 * y1; - dst[ dstOffset + 1 ] = y0 * w1 + w0 * y1 + z0 * x1 - x0 * z1; - dst[ dstOffset + 2 ] = z0 * w1 + w0 * z1 + x0 * y1 - y0 * x1; - dst[ dstOffset + 3 ] = w0 * w1 - x0 * x1 - y0 * y1 - z0 * z1; - - return dst; - - } - - get x() { - - return this._x; - - } - - set x( value ) { - - this._x = value; - this._onChangeCallback(); - - } - - get y() { - - return this._y; - - } - - set y( value ) { - - this._y = value; - this._onChangeCallback(); - - } - - get z() { - - return this._z; - - } - - set z( value ) { - - this._z = value; - this._onChangeCallback(); - - } - - get w() { - - return this._w; - - } - - set w( value ) { - - this._w = value; - this._onChangeCallback(); - - } - - set( x, y, z, w ) { - - this._x = x; - this._y = y; - this._z = z; - this._w = w; - - this._onChangeCallback(); - - return this; - - } - - clone() { - - return new this.constructor( this._x, this._y, this._z, this._w ); - - } - - copy( quaternion ) { - - this._x = quaternion.x; - this._y = quaternion.y; - this._z = quaternion.z; - this._w = quaternion.w; - - this._onChangeCallback(); - - return this; - - } - - setFromEuler( euler, update ) { - - const x = euler._x, y = euler._y, z = euler._z, order = euler._order; - - // http://www.mathworks.com/matlabcentral/fileexchange/ - // 20696-function-to-convert-between-dcm-euler-angles-quaternions-and-euler-vectors/ - // content/SpinCalc.m - - const cos = Math.cos; - const sin = Math.sin; - - const c1 = cos( x / 2 ); - const c2 = cos( y / 2 ); - const c3 = cos( z / 2 ); - - const s1 = sin( x / 2 ); - const s2 = sin( y / 2 ); - const s3 = sin( z / 2 ); - - switch ( order ) { - - case 'XYZ': - this._x = s1 * c2 * c3 + c1 * s2 * s3; - this._y = c1 * s2 * c3 - s1 * c2 * s3; - this._z = c1 * c2 * s3 + s1 * s2 * c3; - this._w = c1 * c2 * c3 - s1 * s2 * s3; - break; - - case 'YXZ': - this._x = s1 * c2 * c3 + c1 * s2 * s3; - this._y = c1 * s2 * c3 - s1 * c2 * s3; - this._z = c1 * c2 * s3 - s1 * s2 * c3; - this._w = c1 * c2 * c3 + s1 * s2 * s3; - break; - - case 'ZXY': - this._x = s1 * c2 * c3 - c1 * s2 * s3; - this._y = c1 * s2 * c3 + s1 * c2 * s3; - this._z = c1 * c2 * s3 + s1 * s2 * c3; - this._w = c1 * c2 * c3 - s1 * s2 * s3; - break; - - case 'ZYX': - this._x = s1 * c2 * c3 - c1 * s2 * s3; - this._y = c1 * s2 * c3 + s1 * c2 * s3; - this._z = c1 * c2 * s3 - s1 * s2 * c3; - this._w = c1 * c2 * c3 + s1 * s2 * s3; - break; - - case 'YZX': - this._x = s1 * c2 * c3 + c1 * s2 * s3; - this._y = c1 * s2 * c3 + s1 * c2 * s3; - this._z = c1 * c2 * s3 - s1 * s2 * c3; - this._w = c1 * c2 * c3 - s1 * s2 * s3; - break; - - case 'XZY': - this._x = s1 * c2 * c3 - c1 * s2 * s3; - this._y = c1 * s2 * c3 - s1 * c2 * s3; - this._z = c1 * c2 * s3 + s1 * s2 * c3; - this._w = c1 * c2 * c3 + s1 * s2 * s3; - break; - - default: - console.warn( 'THREE.Quaternion: .setFromEuler() encountered an unknown order: ' + order ); - - } - - if ( update !== false ) this._onChangeCallback(); - - return this; - - } - - setFromAxisAngle( axis, angle ) { - - // http://www.euclideanspace.com/maths/geometry/rotations/conversions/angleToQuaternion/index.htm - - // assumes axis is normalized - - const halfAngle = angle / 2, s = Math.sin( halfAngle ); - - this._x = axis.x * s; - this._y = axis.y * s; - this._z = axis.z * s; - this._w = Math.cos( halfAngle ); - - this._onChangeCallback(); - - return this; - - } - - setFromRotationMatrix( m ) { - - // http://www.euclideanspace.com/maths/geometry/rotations/conversions/matrixToQuaternion/index.htm - - // assumes the upper 3x3 of m is a pure rotation matrix (i.e, unscaled) - - const te = m.elements, - - m11 = te[ 0 ], m12 = te[ 4 ], m13 = te[ 8 ], - m21 = te[ 1 ], m22 = te[ 5 ], m23 = te[ 9 ], - m31 = te[ 2 ], m32 = te[ 6 ], m33 = te[ 10 ], - - trace = m11 + m22 + m33; - - if ( trace > 0 ) { - - const s = 0.5 / Math.sqrt( trace + 1.0 ); - - this._w = 0.25 / s; - this._x = ( m32 - m23 ) * s; - this._y = ( m13 - m31 ) * s; - this._z = ( m21 - m12 ) * s; - - } else if ( m11 > m22 && m11 > m33 ) { - - const s = 2.0 * Math.sqrt( 1.0 + m11 - m22 - m33 ); - - this._w = ( m32 - m23 ) / s; - this._x = 0.25 * s; - this._y = ( m12 + m21 ) / s; - this._z = ( m13 + m31 ) / s; - - } else if ( m22 > m33 ) { - - const s = 2.0 * Math.sqrt( 1.0 + m22 - m11 - m33 ); - - this._w = ( m13 - m31 ) / s; - this._x = ( m12 + m21 ) / s; - this._y = 0.25 * s; - this._z = ( m23 + m32 ) / s; - - } else { - - const s = 2.0 * Math.sqrt( 1.0 + m33 - m11 - m22 ); - - this._w = ( m21 - m12 ) / s; - this._x = ( m13 + m31 ) / s; - this._y = ( m23 + m32 ) / s; - this._z = 0.25 * s; - - } - - this._onChangeCallback(); - - return this; - - } - - setFromUnitVectors( vFrom, vTo ) { - - // assumes direction vectors vFrom and vTo are normalized - - let r = vFrom.dot( vTo ) + 1; - - if ( r < Number.EPSILON ) { - - // vFrom and vTo point in opposite directions - - r = 0; - - if ( Math.abs( vFrom.x ) > Math.abs( vFrom.z ) ) { - - this._x = - vFrom.y; - this._y = vFrom.x; - this._z = 0; - this._w = r; - - } else { - - this._x = 0; - this._y = - vFrom.z; - this._z = vFrom.y; - this._w = r; - - } - - } else { - - // crossVectors( vFrom, vTo ); // inlined to avoid cyclic dependency on Vector3 - - this._x = vFrom.y * vTo.z - vFrom.z * vTo.y; - this._y = vFrom.z * vTo.x - vFrom.x * vTo.z; - this._z = vFrom.x * vTo.y - vFrom.y * vTo.x; - this._w = r; - - } - - return this.normalize(); - - } - - angleTo( q ) { - - return 2 * Math.acos( Math.abs( clamp( this.dot( q ), - 1, 1 ) ) ); - - } - - rotateTowards( q, step ) { - - const angle = this.angleTo( q ); - - if ( angle === 0 ) return this; - - const t = Math.min( 1, step / angle ); - - this.slerp( q, t ); - - return this; - - } - - identity() { - - return this.set( 0, 0, 0, 1 ); - - } - - invert() { - - // quaternion is assumed to have unit length - - return this.conjugate(); - - } - - conjugate() { - - this._x *= - 1; - this._y *= - 1; - this._z *= - 1; - - this._onChangeCallback(); - - return this; - - } - - dot( v ) { - - return this._x * v._x + this._y * v._y + this._z * v._z + this._w * v._w; - - } - - lengthSq() { - - return this._x * this._x + this._y * this._y + this._z * this._z + this._w * this._w; - - } - - length() { - - return Math.sqrt( this._x * this._x + this._y * this._y + this._z * this._z + this._w * this._w ); - - } - - normalize() { - - let l = this.length(); - - if ( l === 0 ) { - - this._x = 0; - this._y = 0; - this._z = 0; - this._w = 1; - - } else { - - l = 1 / l; - - this._x = this._x * l; - this._y = this._y * l; - this._z = this._z * l; - this._w = this._w * l; - - } - - this._onChangeCallback(); - - return this; - - } - - multiply( q ) { - - return this.multiplyQuaternions( this, q ); - - } - - premultiply( q ) { - - return this.multiplyQuaternions( q, this ); - - } - - multiplyQuaternions( a, b ) { - - // from http://www.euclideanspace.com/maths/algebra/realNormedAlgebra/quaternions/code/index.htm - - const qax = a._x, qay = a._y, qaz = a._z, qaw = a._w; - const qbx = b._x, qby = b._y, qbz = b._z, qbw = b._w; - - this._x = qax * qbw + qaw * qbx + qay * qbz - qaz * qby; - this._y = qay * qbw + qaw * qby + qaz * qbx - qax * qbz; - this._z = qaz * qbw + qaw * qbz + qax * qby - qay * qbx; - this._w = qaw * qbw - qax * qbx - qay * qby - qaz * qbz; - - this._onChangeCallback(); - - return this; - - } - - slerp( qb, t ) { - - if ( t === 0 ) return this; - if ( t === 1 ) return this.copy( qb ); - - const x = this._x, y = this._y, z = this._z, w = this._w; - - // http://www.euclideanspace.com/maths/algebra/realNormedAlgebra/quaternions/slerp/ - - let cosHalfTheta = w * qb._w + x * qb._x + y * qb._y + z * qb._z; - - if ( cosHalfTheta < 0 ) { - - this._w = - qb._w; - this._x = - qb._x; - this._y = - qb._y; - this._z = - qb._z; - - cosHalfTheta = - cosHalfTheta; - - } else { - - this.copy( qb ); - - } - - if ( cosHalfTheta >= 1.0 ) { - - this._w = w; - this._x = x; - this._y = y; - this._z = z; - - return this; - - } - - const sqrSinHalfTheta = 1.0 - cosHalfTheta * cosHalfTheta; - - if ( sqrSinHalfTheta <= Number.EPSILON ) { - - const s = 1 - t; - this._w = s * w + t * this._w; - this._x = s * x + t * this._x; - this._y = s * y + t * this._y; - this._z = s * z + t * this._z; - - this.normalize(); - this._onChangeCallback(); - - return this; - - } - - const sinHalfTheta = Math.sqrt( sqrSinHalfTheta ); - const halfTheta = Math.atan2( sinHalfTheta, cosHalfTheta ); - const ratioA = Math.sin( ( 1 - t ) * halfTheta ) / sinHalfTheta, - ratioB = Math.sin( t * halfTheta ) / sinHalfTheta; - - this._w = ( w * ratioA + this._w * ratioB ); - this._x = ( x * ratioA + this._x * ratioB ); - this._y = ( y * ratioA + this._y * ratioB ); - this._z = ( z * ratioA + this._z * ratioB ); - - this._onChangeCallback(); - - return this; - - } - - slerpQuaternions( qa, qb, t ) { - - return this.copy( qa ).slerp( qb, t ); - - } - - random() { - - // Derived from http://planning.cs.uiuc.edu/node198.html - // Note, this source uses w, x, y, z ordering, - // so we swap the order below. - - const u1 = Math.random(); - const sqrt1u1 = Math.sqrt( 1 - u1 ); - const sqrtu1 = Math.sqrt( u1 ); - - const u2 = 2 * Math.PI * Math.random(); - - const u3 = 2 * Math.PI * Math.random(); - - return this.set( - sqrt1u1 * Math.cos( u2 ), - sqrtu1 * Math.sin( u3 ), - sqrtu1 * Math.cos( u3 ), - sqrt1u1 * Math.sin( u2 ), - ); - - } - - equals( quaternion ) { - - return ( quaternion._x === this._x ) && ( quaternion._y === this._y ) && ( quaternion._z === this._z ) && ( quaternion._w === this._w ); - - } - - fromArray( array, offset = 0 ) { - - this._x = array[ offset ]; - this._y = array[ offset + 1 ]; - this._z = array[ offset + 2 ]; - this._w = array[ offset + 3 ]; - - this._onChangeCallback(); - - return this; - - } - - toArray( array = [], offset = 0 ) { - - array[ offset ] = this._x; - array[ offset + 1 ] = this._y; - array[ offset + 2 ] = this._z; - array[ offset + 3 ] = this._w; - - return array; - - } - - fromBufferAttribute( attribute, index ) { - - this._x = attribute.getX( index ); - this._y = attribute.getY( index ); - this._z = attribute.getZ( index ); - this._w = attribute.getW( index ); - - return this; - - } - - _onChange( callback ) { - - this._onChangeCallback = callback; - - return this; - - } - - _onChangeCallback() {} - - *[ Symbol.iterator ]() { - - yield this._x; - yield this._y; - yield this._z; - yield this._w; - - } - - } - - class Vector3 { - - constructor( x = 0, y = 0, z = 0 ) { - - Vector3.prototype.isVector3 = true; - - this.x = x; - this.y = y; - this.z = z; - - } - - set( x, y, z ) { - - if ( z === undefined ) z = this.z; // sprite.scale.set(x,y) - - this.x = x; - this.y = y; - this.z = z; - - return this; - - } - - setScalar( scalar ) { - - this.x = scalar; - this.y = scalar; - this.z = scalar; - - return this; - - } - - setX( x ) { - - this.x = x; - - return this; - - } - - setY( y ) { - - this.y = y; - - return this; - - } - - setZ( z ) { - - this.z = z; - - return this; - - } - - setComponent( index, value ) { - - switch ( index ) { - - case 0: this.x = value; break; - case 1: this.y = value; break; - case 2: this.z = value; break; - default: throw new Error( 'index is out of range: ' + index ); - - } - - return this; - - } - - getComponent( index ) { - - switch ( index ) { - - case 0: return this.x; - case 1: return this.y; - case 2: return this.z; - default: throw new Error( 'index is out of range: ' + index ); - - } - - } - - clone() { - - return new this.constructor( this.x, this.y, this.z ); - - } - - copy( v ) { - - this.x = v.x; - this.y = v.y; - this.z = v.z; - - return this; - - } - - add( v ) { - - this.x += v.x; - this.y += v.y; - this.z += v.z; - - return this; - - } - - addScalar( s ) { - - this.x += s; - this.y += s; - this.z += s; - - return this; - - } - - addVectors( a, b ) { - - this.x = a.x + b.x; - this.y = a.y + b.y; - this.z = a.z + b.z; - - return this; - - } - - addScaledVector( v, s ) { - - this.x += v.x * s; - this.y += v.y * s; - this.z += v.z * s; - - return this; - - } - - sub( v ) { - - this.x -= v.x; - this.y -= v.y; - this.z -= v.z; - - return this; - - } - - subScalar( s ) { - - this.x -= s; - this.y -= s; - this.z -= s; - - return this; - - } - - subVectors( a, b ) { - - this.x = a.x - b.x; - this.y = a.y - b.y; - this.z = a.z - b.z; - - return this; - - } - - multiply( v ) { - - this.x *= v.x; - this.y *= v.y; - this.z *= v.z; - - return this; - - } - - multiplyScalar( scalar ) { - - this.x *= scalar; - this.y *= scalar; - this.z *= scalar; - - return this; - - } - - multiplyVectors( a, b ) { - - this.x = a.x * b.x; - this.y = a.y * b.y; - this.z = a.z * b.z; - - return this; - - } - - applyEuler( euler ) { - - return this.applyQuaternion( _quaternion$4.setFromEuler( euler ) ); - - } - - applyAxisAngle( axis, angle ) { - - return this.applyQuaternion( _quaternion$4.setFromAxisAngle( axis, angle ) ); - - } - - applyMatrix3( m ) { - - const x = this.x, y = this.y, z = this.z; - const e = m.elements; - - this.x = e[ 0 ] * x + e[ 3 ] * y + e[ 6 ] * z; - this.y = e[ 1 ] * x + e[ 4 ] * y + e[ 7 ] * z; - this.z = e[ 2 ] * x + e[ 5 ] * y + e[ 8 ] * z; - - return this; - - } - - applyNormalMatrix( m ) { - - return this.applyMatrix3( m ).normalize(); - - } - - applyMatrix4( m ) { - - const x = this.x, y = this.y, z = this.z; - const e = m.elements; - - const w = 1 / ( e[ 3 ] * x + e[ 7 ] * y + e[ 11 ] * z + e[ 15 ] ); - - this.x = ( e[ 0 ] * x + e[ 4 ] * y + e[ 8 ] * z + e[ 12 ] ) * w; - this.y = ( e[ 1 ] * x + e[ 5 ] * y + e[ 9 ] * z + e[ 13 ] ) * w; - this.z = ( e[ 2 ] * x + e[ 6 ] * y + e[ 10 ] * z + e[ 14 ] ) * w; - - return this; - - } - - applyQuaternion( q ) { - - const x = this.x, y = this.y, z = this.z; - const qx = q.x, qy = q.y, qz = q.z, qw = q.w; - - // calculate quat * vector - - const ix = qw * x + qy * z - qz * y; - const iy = qw * y + qz * x - qx * z; - const iz = qw * z + qx * y - qy * x; - const iw = - qx * x - qy * y - qz * z; - - // calculate result * inverse quat - - this.x = ix * qw + iw * - qx + iy * - qz - iz * - qy; - this.y = iy * qw + iw * - qy + iz * - qx - ix * - qz; - this.z = iz * qw + iw * - qz + ix * - qy - iy * - qx; - - return this; - - } - - project( camera ) { - - return this.applyMatrix4( camera.matrixWorldInverse ).applyMatrix4( camera.projectionMatrix ); - - } - - unproject( camera ) { - - return this.applyMatrix4( camera.projectionMatrixInverse ).applyMatrix4( camera.matrixWorld ); - - } - - transformDirection( m ) { - - // input: THREE.Matrix4 affine matrix - // vector interpreted as a direction - - const x = this.x, y = this.y, z = this.z; - const e = m.elements; - - this.x = e[ 0 ] * x + e[ 4 ] * y + e[ 8 ] * z; - this.y = e[ 1 ] * x + e[ 5 ] * y + e[ 9 ] * z; - this.z = e[ 2 ] * x + e[ 6 ] * y + e[ 10 ] * z; - - return this.normalize(); - - } - - divide( v ) { - - this.x /= v.x; - this.y /= v.y; - this.z /= v.z; - - return this; - - } - - divideScalar( scalar ) { - - return this.multiplyScalar( 1 / scalar ); - - } - - min( v ) { - - this.x = Math.min( this.x, v.x ); - this.y = Math.min( this.y, v.y ); - this.z = Math.min( this.z, v.z ); - - return this; - - } - - max( v ) { - - this.x = Math.max( this.x, v.x ); - this.y = Math.max( this.y, v.y ); - this.z = Math.max( this.z, v.z ); - - return this; - - } - - clamp( min, max ) { - - // assumes min < max, componentwise - - this.x = Math.max( min.x, Math.min( max.x, this.x ) ); - this.y = Math.max( min.y, Math.min( max.y, this.y ) ); - this.z = Math.max( min.z, Math.min( max.z, this.z ) ); - - return this; - - } - - clampScalar( minVal, maxVal ) { - - this.x = Math.max( minVal, Math.min( maxVal, this.x ) ); - this.y = Math.max( minVal, Math.min( maxVal, this.y ) ); - this.z = Math.max( minVal, Math.min( maxVal, this.z ) ); - - return this; - - } - - clampLength( min, max ) { - - const length = this.length(); - - return this.divideScalar( length || 1 ).multiplyScalar( Math.max( min, Math.min( max, length ) ) ); - - } - - floor() { - - this.x = Math.floor( this.x ); - this.y = Math.floor( this.y ); - this.z = Math.floor( this.z ); - - return this; - - } - - ceil() { - - this.x = Math.ceil( this.x ); - this.y = Math.ceil( this.y ); - this.z = Math.ceil( this.z ); - - return this; - - } - - round() { - - this.x = Math.round( this.x ); - this.y = Math.round( this.y ); - this.z = Math.round( this.z ); - - return this; - - } - - roundToZero() { - - this.x = ( this.x < 0 ) ? Math.ceil( this.x ) : Math.floor( this.x ); - this.y = ( this.y < 0 ) ? Math.ceil( this.y ) : Math.floor( this.y ); - this.z = ( this.z < 0 ) ? Math.ceil( this.z ) : Math.floor( this.z ); - - return this; - - } - - negate() { - - this.x = - this.x; - this.y = - this.y; - this.z = - this.z; - - return this; - - } - - dot( v ) { - - return this.x * v.x + this.y * v.y + this.z * v.z; - - } - - // TODO lengthSquared? - - lengthSq() { - - return this.x * this.x + this.y * this.y + this.z * this.z; - - } - - length() { - - return Math.sqrt( this.x * this.x + this.y * this.y + this.z * this.z ); - - } - - manhattanLength() { - - return Math.abs( this.x ) + Math.abs( this.y ) + Math.abs( this.z ); - - } - - normalize() { - - return this.divideScalar( this.length() || 1 ); - - } - - setLength( length ) { - - return this.normalize().multiplyScalar( length ); - - } - - lerp( v, alpha ) { - - this.x += ( v.x - this.x ) * alpha; - this.y += ( v.y - this.y ) * alpha; - this.z += ( v.z - this.z ) * alpha; - - return this; - - } - - lerpVectors( v1, v2, alpha ) { - - this.x = v1.x + ( v2.x - v1.x ) * alpha; - this.y = v1.y + ( v2.y - v1.y ) * alpha; - this.z = v1.z + ( v2.z - v1.z ) * alpha; - - return this; - - } - - cross( v ) { - - return this.crossVectors( this, v ); - - } - - crossVectors( a, b ) { - - const ax = a.x, ay = a.y, az = a.z; - const bx = b.x, by = b.y, bz = b.z; - - this.x = ay * bz - az * by; - this.y = az * bx - ax * bz; - this.z = ax * by - ay * bx; - - return this; - - } - - projectOnVector( v ) { - - const denominator = v.lengthSq(); - - if ( denominator === 0 ) return this.set( 0, 0, 0 ); - - const scalar = v.dot( this ) / denominator; - - return this.copy( v ).multiplyScalar( scalar ); - - } - - projectOnPlane( planeNormal ) { - - _vector$d.copy( this ).projectOnVector( planeNormal ); - - return this.sub( _vector$d ); - - } - - reflect( normal ) { - - // reflect incident vector off plane orthogonal to normal - // normal is assumed to have unit length - - return this.sub( _vector$d.copy( normal ).multiplyScalar( 2 * this.dot( normal ) ) ); - - } - - angleTo( v ) { - - const denominator = Math.sqrt( this.lengthSq() * v.lengthSq() ); - - if ( denominator === 0 ) return Math.PI / 2; - - const theta = this.dot( v ) / denominator; - - // clamp, to handle numerical problems - - return Math.acos( clamp( theta, - 1, 1 ) ); - - } - - distanceTo( v ) { - - return Math.sqrt( this.distanceToSquared( v ) ); - - } - - distanceToSquared( v ) { - - const dx = this.x - v.x, dy = this.y - v.y, dz = this.z - v.z; - - return dx * dx + dy * dy + dz * dz; - - } - - manhattanDistanceTo( v ) { - - return Math.abs( this.x - v.x ) + Math.abs( this.y - v.y ) + Math.abs( this.z - v.z ); - - } - - setFromSpherical( s ) { - - return this.setFromSphericalCoords( s.radius, s.phi, s.theta ); - - } - - setFromSphericalCoords( radius, phi, theta ) { - - const sinPhiRadius = Math.sin( phi ) * radius; - - this.x = sinPhiRadius * Math.sin( theta ); - this.y = Math.cos( phi ) * radius; - this.z = sinPhiRadius * Math.cos( theta ); - - return this; - - } - - setFromCylindrical( c ) { - - return this.setFromCylindricalCoords( c.radius, c.theta, c.y ); - - } - - setFromCylindricalCoords( radius, theta, y ) { - - this.x = radius * Math.sin( theta ); - this.y = y; - this.z = radius * Math.cos( theta ); - - return this; - - } - - setFromMatrixPosition( m ) { - - const e = m.elements; - - this.x = e[ 12 ]; - this.y = e[ 13 ]; - this.z = e[ 14 ]; - - return this; - - } - - setFromMatrixScale( m ) { - - const sx = this.setFromMatrixColumn( m, 0 ).length(); - const sy = this.setFromMatrixColumn( m, 1 ).length(); - const sz = this.setFromMatrixColumn( m, 2 ).length(); - - this.x = sx; - this.y = sy; - this.z = sz; - - return this; - - } - - setFromMatrixColumn( m, index ) { - - return this.fromArray( m.elements, index * 4 ); - - } - - setFromMatrix3Column( m, index ) { - - return this.fromArray( m.elements, index * 3 ); - - } - - setFromEuler( e ) { - - this.x = e._x; - this.y = e._y; - this.z = e._z; - - return this; - - } - - equals( v ) { - - return ( ( v.x === this.x ) && ( v.y === this.y ) && ( v.z === this.z ) ); - - } - - fromArray( array, offset = 0 ) { - - this.x = array[ offset ]; - this.y = array[ offset + 1 ]; - this.z = array[ offset + 2 ]; - - return this; - - } - - toArray( array = [], offset = 0 ) { - - array[ offset ] = this.x; - array[ offset + 1 ] = this.y; - array[ offset + 2 ] = this.z; - - return array; - - } - - fromBufferAttribute( attribute, index ) { - - this.x = attribute.getX( index ); - this.y = attribute.getY( index ); - this.z = attribute.getZ( index ); - - return this; - - } - - random() { - - this.x = Math.random(); - this.y = Math.random(); - this.z = Math.random(); - - return this; - - } - - randomDirection() { - - // Derived from https://mathworld.wolfram.com/SpherePointPicking.html - - const u = ( Math.random() - 0.5 ) * 2; - const t = Math.random() * Math.PI * 2; - const f = Math.sqrt( 1 - u ** 2 ); - - this.x = f * Math.cos( t ); - this.y = f * Math.sin( t ); - this.z = u; - - return this; - - } - - *[ Symbol.iterator ]() { - - yield this.x; - yield this.y; - yield this.z; - - } - - } - - const _vector$d = /*@__PURE__*/ new Vector3(); - const _quaternion$4 = /*@__PURE__*/ new Quaternion(); - - function SRGBToLinear( c ) { - - return ( c < 0.04045 ) ? c * 0.0773993808 : Math.pow( c * 0.9478672986 + 0.0521327014, 2.4 ); - - } - - function LinearToSRGB( c ) { - - return ( c < 0.0031308 ) ? c * 12.92 : 1.055 * ( Math.pow( c, 0.41666 ) ) - 0.055; - - } - - - /** - * Matrices converting P3 <-> Rec. 709 primaries, without gamut mapping - * or clipping. Based on W3C specifications for sRGB and Display P3, - * and ICC specifications for the D50 connection space. Values in/out - * are _linear_ sRGB and _linear_ Display P3. - * - * Note that both sRGB and Display P3 use the sRGB transfer functions. - * - * Reference: - * - http://www.russellcottrell.com/photo/matrixCalculator.htm - */ - - const LINEAR_SRGB_TO_LINEAR_DISPLAY_P3 = new Matrix3().fromArray( [ - 0.8224621, 0.0331941, 0.0170827, - 0.1775380, 0.9668058, 0.0723974, - - 0.0000001, 0.0000001, 0.9105199 - ] ); - - const LINEAR_DISPLAY_P3_TO_LINEAR_SRGB = new Matrix3().fromArray( [ - 1.2249401, - 0.0420569, - 0.0196376, - - 0.2249404, 1.0420571, - 0.0786361, - 0.0000001, 0.0000000, 1.0982735 - ] ); - - const _vector$c = new Vector3(); - - function DisplayP3ToLinearSRGB( color ) { - - color.convertSRGBToLinear(); - - _vector$c.set( color.r, color.g, color.b ).applyMatrix3( LINEAR_DISPLAY_P3_TO_LINEAR_SRGB ); - - return color.setRGB( _vector$c.x, _vector$c.y, _vector$c.z ); - - } - - function LinearSRGBToDisplayP3( color ) { - - _vector$c.set( color.r, color.g, color.b ).applyMatrix3( LINEAR_SRGB_TO_LINEAR_DISPLAY_P3 ); - - return color.setRGB( _vector$c.x, _vector$c.y, _vector$c.z ).convertLinearToSRGB(); - - } - - // Conversions from to Linear-sRGB reference space. - const TO_LINEAR = { - [ LinearSRGBColorSpace ]: ( color ) => color, - [ SRGBColorSpace ]: ( color ) => color.convertSRGBToLinear(), - [ DisplayP3ColorSpace ]: DisplayP3ToLinearSRGB, - }; - - // Conversions to from Linear-sRGB reference space. - const FROM_LINEAR = { - [ LinearSRGBColorSpace ]: ( color ) => color, - [ SRGBColorSpace ]: ( color ) => color.convertLinearToSRGB(), - [ DisplayP3ColorSpace ]: LinearSRGBToDisplayP3, - }; - - const ColorManagement = { - - enabled: false, - - get legacyMode() { - - console.warn( 'THREE.ColorManagement: .legacyMode=false renamed to .enabled=true in r150.' ); - - return ! this.enabled; - - }, - - set legacyMode( legacyMode ) { - - console.warn( 'THREE.ColorManagement: .legacyMode=false renamed to .enabled=true in r150.' ); - - this.enabled = ! legacyMode; - - }, - - get workingColorSpace() { - - return LinearSRGBColorSpace; - - }, - - set workingColorSpace( colorSpace ) { - - console.warn( 'THREE.ColorManagement: .workingColorSpace is readonly.' ); - - }, - - convert: function ( color, sourceColorSpace, targetColorSpace ) { - - if ( this.enabled === false || sourceColorSpace === targetColorSpace || ! sourceColorSpace || ! targetColorSpace ) { - - return color; - - } - - const sourceToLinear = TO_LINEAR[ sourceColorSpace ]; - const targetFromLinear = FROM_LINEAR[ targetColorSpace ]; - - if ( sourceToLinear === undefined || targetFromLinear === undefined ) { - - throw new Error( `Unsupported color space conversion, "${ sourceColorSpace }" to "${ targetColorSpace }".` ); - - } - - return targetFromLinear( sourceToLinear( color ) ); - - }, - - fromWorkingColorSpace: function ( color, targetColorSpace ) { - - return this.convert( color, this.workingColorSpace, targetColorSpace ); - - }, - - toWorkingColorSpace: function ( color, sourceColorSpace ) { - - return this.convert( color, sourceColorSpace, this.workingColorSpace ); - - }, - - }; - - let _canvas; - - class ImageUtils { - - static getDataURL( image ) { - - if ( /^data:/i.test( image.src ) ) { - - return image.src; - - } - - if ( typeof HTMLCanvasElement == 'undefined' ) { - - return image.src; - - } - - let canvas; - - if ( image instanceof HTMLCanvasElement ) { - - canvas = image; - - } else { - - if ( _canvas === undefined ) _canvas = createElementNS( 'canvas' ); - - _canvas.width = image.width; - _canvas.height = image.height; - - const context = _canvas.getContext( '2d' ); - - if ( image instanceof ImageData ) { - - context.putImageData( image, 0, 0 ); - - } else { - - context.drawImage( image, 0, 0, image.width, image.height ); - - } - - canvas = _canvas; - - } - - if ( canvas.width > 2048 || canvas.height > 2048 ) { - - console.warn( 'THREE.ImageUtils.getDataURL: Image converted to jpg for performance reasons', image ); - - return canvas.toDataURL( 'image/jpeg', 0.6 ); - - } else { - - return canvas.toDataURL( 'image/png' ); - - } - - } - - static sRGBToLinear( image ) { - - if ( ( typeof HTMLImageElement !== 'undefined' && image instanceof HTMLImageElement ) || - ( typeof HTMLCanvasElement !== 'undefined' && image instanceof HTMLCanvasElement ) || - ( typeof ImageBitmap !== 'undefined' && image instanceof ImageBitmap ) ) { - - const canvas = createElementNS( 'canvas' ); - - canvas.width = image.width; - canvas.height = image.height; - - const context = canvas.getContext( '2d' ); - context.drawImage( image, 0, 0, image.width, image.height ); - - const imageData = context.getImageData( 0, 0, image.width, image.height ); - const data = imageData.data; - - for ( let i = 0; i < data.length; i ++ ) { - - data[ i ] = SRGBToLinear( data[ i ] / 255 ) * 255; - - } - - context.putImageData( imageData, 0, 0 ); - - return canvas; - - } else if ( image.data ) { - - const data = image.data.slice( 0 ); - - for ( let i = 0; i < data.length; i ++ ) { - - if ( data instanceof Uint8Array || data instanceof Uint8ClampedArray ) { - - data[ i ] = Math.floor( SRGBToLinear( data[ i ] / 255 ) * 255 ); - - } else { - - // assuming float - - data[ i ] = SRGBToLinear( data[ i ] ); - - } - - } - - return { - data: data, - width: image.width, - height: image.height - }; - - } else { - - console.warn( 'THREE.ImageUtils.sRGBToLinear(): Unsupported image type. No color space conversion applied.' ); - return image; - - } - - } - - } - - class Source { - - constructor( data = null ) { - - this.isSource = true; - - this.uuid = generateUUID(); - - this.data = data; - - this.version = 0; - - } - - set needsUpdate( value ) { - - if ( value === true ) this.version ++; - - } - - toJSON( meta ) { - - const isRootObject = ( meta === undefined || typeof meta === 'string' ); - - if ( ! isRootObject && meta.images[ this.uuid ] !== undefined ) { - - return meta.images[ this.uuid ]; - - } - - const output = { - uuid: this.uuid, - url: '' - }; - - const data = this.data; - - if ( data !== null ) { - - let url; - - if ( Array.isArray( data ) ) { - - // cube texture - - url = []; - - for ( let i = 0, l = data.length; i < l; i ++ ) { - - if ( data[ i ].isDataTexture ) { - - url.push( serializeImage( data[ i ].image ) ); - - } else { - - url.push( serializeImage( data[ i ] ) ); - - } - - } - - } else { - - // texture - - url = serializeImage( data ); - - } - - output.url = url; - - } - - if ( ! isRootObject ) { - - meta.images[ this.uuid ] = output; - - } - - return output; - - } - - } - - function serializeImage( image ) { - - if ( ( typeof HTMLImageElement !== 'undefined' && image instanceof HTMLImageElement ) || - ( typeof HTMLCanvasElement !== 'undefined' && image instanceof HTMLCanvasElement ) || - ( typeof ImageBitmap !== 'undefined' && image instanceof ImageBitmap ) ) { - - // default images - - return ImageUtils.getDataURL( image ); - - } else { - - if ( image.data ) { - - // images of DataTexture - - return { - data: Array.from( image.data ), - width: image.width, - height: image.height, - type: image.data.constructor.name - }; - - } else { - - console.warn( 'THREE.Texture: Unable to serialize Texture.' ); - return {}; - - } - - } - - } - - let textureId = 0; - - class Texture extends EventDispatcher { - - constructor( image = Texture.DEFAULT_IMAGE, mapping = Texture.DEFAULT_MAPPING, wrapS = ClampToEdgeWrapping, wrapT = ClampToEdgeWrapping, magFilter = LinearFilter, minFilter = LinearMipmapLinearFilter, format = RGBAFormat, type = UnsignedByteType, anisotropy = Texture.DEFAULT_ANISOTROPY, encoding = LinearEncoding ) { - - super(); - - this.isTexture = true; - - Object.defineProperty( this, 'id', { value: textureId ++ } ); - - this.uuid = generateUUID(); - - this.name = ''; - - this.source = new Source( image ); - this.mipmaps = []; - - this.mapping = mapping; - - this.wrapS = wrapS; - this.wrapT = wrapT; - - this.magFilter = magFilter; - this.minFilter = minFilter; - - this.anisotropy = anisotropy; - - this.format = format; - this.internalFormat = null; - this.type = type; - - this.offset = new Vector2( 0, 0 ); - this.repeat = new Vector2( 1, 1 ); - this.center = new Vector2( 0, 0 ); - this.rotation = 0; - - this.matrixAutoUpdate = true; - this.matrix = new Matrix3(); - - this.generateMipmaps = true; - this.premultiplyAlpha = false; - this.flipY = true; - this.unpackAlignment = 4; // valid values: 1, 2, 4, 8 (see http://www.khronos.org/opengles/sdk/docs/man/xhtml/glPixelStorei.xml) - - // Values of encoding !== THREE.LinearEncoding only supported on map, envMap and emissiveMap. - // - // Also changing the encoding after already used by a Material will not automatically make the Material - // update. You need to explicitly call Material.needsUpdate to trigger it to recompile. - this.encoding = encoding; - - this.userData = {}; - - this.version = 0; - this.onUpdate = null; - - this.isRenderTargetTexture = false; // indicates whether a texture belongs to a render target or not - this.needsPMREMUpdate = false; // indicates whether this texture should be processed by PMREMGenerator or not (only relevant for render target textures) - - } - - get image() { - - return this.source.data; - - } - - set image( value = null ) { - - this.source.data = value; - - } - - updateMatrix() { - - this.matrix.setUvTransform( this.offset.x, this.offset.y, this.repeat.x, this.repeat.y, this.rotation, this.center.x, this.center.y ); - - } - - clone() { - - return new this.constructor().copy( this ); - - } - - copy( source ) { - - this.name = source.name; - - this.source = source.source; - this.mipmaps = source.mipmaps.slice( 0 ); - - this.mapping = source.mapping; - - this.wrapS = source.wrapS; - this.wrapT = source.wrapT; - - this.magFilter = source.magFilter; - this.minFilter = source.minFilter; - - this.anisotropy = source.anisotropy; - - this.format = source.format; - this.internalFormat = source.internalFormat; - this.type = source.type; - - this.offset.copy( source.offset ); - this.repeat.copy( source.repeat ); - this.center.copy( source.center ); - this.rotation = source.rotation; - - this.matrixAutoUpdate = source.matrixAutoUpdate; - this.matrix.copy( source.matrix ); - - this.generateMipmaps = source.generateMipmaps; - this.premultiplyAlpha = source.premultiplyAlpha; - this.flipY = source.flipY; - this.unpackAlignment = source.unpackAlignment; - this.encoding = source.encoding; - - this.userData = JSON.parse( JSON.stringify( source.userData ) ); - - this.needsUpdate = true; - - return this; - - } - - toJSON( meta ) { - - const isRootObject = ( meta === undefined || typeof meta === 'string' ); - - if ( ! isRootObject && meta.textures[ this.uuid ] !== undefined ) { - - return meta.textures[ this.uuid ]; - - } - - const output = { - - metadata: { - version: 4.5, - type: 'Texture', - generator: 'Texture.toJSON' - }, - - uuid: this.uuid, - name: this.name, - - image: this.source.toJSON( meta ).uuid, - - mapping: this.mapping, - - repeat: [ this.repeat.x, this.repeat.y ], - offset: [ this.offset.x, this.offset.y ], - center: [ this.center.x, this.center.y ], - rotation: this.rotation, - - wrap: [ this.wrapS, this.wrapT ], - - format: this.format, - internalFormat: this.internalFormat, - type: this.type, - encoding: this.encoding, - - minFilter: this.minFilter, - magFilter: this.magFilter, - anisotropy: this.anisotropy, - - flipY: this.flipY, - - generateMipmaps: this.generateMipmaps, - premultiplyAlpha: this.premultiplyAlpha, - unpackAlignment: this.unpackAlignment - - }; - - if ( Object.keys( this.userData ).length > 0 ) output.userData = this.userData; - - if ( ! isRootObject ) { - - meta.textures[ this.uuid ] = output; - - } - - return output; - - } - - dispose() { - - this.dispatchEvent( { type: 'dispose' } ); - - } - - transformUv( uv ) { - - if ( this.mapping !== UVMapping ) return uv; - - uv.applyMatrix3( this.matrix ); - - if ( uv.x < 0 || uv.x > 1 ) { - - switch ( this.wrapS ) { - - case RepeatWrapping: - - uv.x = uv.x - Math.floor( uv.x ); - break; - - case ClampToEdgeWrapping: - - uv.x = uv.x < 0 ? 0 : 1; - break; - - case MirroredRepeatWrapping: - - if ( Math.abs( Math.floor( uv.x ) % 2 ) === 1 ) { - - uv.x = Math.ceil( uv.x ) - uv.x; - - } else { - - uv.x = uv.x - Math.floor( uv.x ); - - } - - break; - - } - - } - - if ( uv.y < 0 || uv.y > 1 ) { - - switch ( this.wrapT ) { - - case RepeatWrapping: - - uv.y = uv.y - Math.floor( uv.y ); - break; - - case ClampToEdgeWrapping: - - uv.y = uv.y < 0 ? 0 : 1; - break; - - case MirroredRepeatWrapping: - - if ( Math.abs( Math.floor( uv.y ) % 2 ) === 1 ) { - - uv.y = Math.ceil( uv.y ) - uv.y; - - } else { - - uv.y = uv.y - Math.floor( uv.y ); - - } - - break; - - } - - } - - if ( this.flipY ) { - - uv.y = 1 - uv.y; - - } - - return uv; - - } - - set needsUpdate( value ) { - - if ( value === true ) { - - this.version ++; - this.source.needsUpdate = true; - - } - - } - - } - - Texture.DEFAULT_IMAGE = null; - Texture.DEFAULT_MAPPING = UVMapping; - Texture.DEFAULT_ANISOTROPY = 1; - - class Vector4 { - - constructor( x = 0, y = 0, z = 0, w = 1 ) { - - Vector4.prototype.isVector4 = true; - - this.x = x; - this.y = y; - this.z = z; - this.w = w; - - } - - get width() { - - return this.z; - - } - - set width( value ) { - - this.z = value; - - } - - get height() { - - return this.w; - - } - - set height( value ) { - - this.w = value; - - } - - set( x, y, z, w ) { - - this.x = x; - this.y = y; - this.z = z; - this.w = w; - - return this; - - } - - setScalar( scalar ) { - - this.x = scalar; - this.y = scalar; - this.z = scalar; - this.w = scalar; - - return this; - - } - - setX( x ) { - - this.x = x; - - return this; - - } - - setY( y ) { - - this.y = y; - - return this; - - } - - setZ( z ) { - - this.z = z; - - return this; - - } - - setW( w ) { - - this.w = w; - - return this; - - } - - setComponent( index, value ) { - - switch ( index ) { - - case 0: this.x = value; break; - case 1: this.y = value; break; - case 2: this.z = value; break; - case 3: this.w = value; break; - default: throw new Error( 'index is out of range: ' + index ); - - } - - return this; - - } - - getComponent( index ) { - - switch ( index ) { - - case 0: return this.x; - case 1: return this.y; - case 2: return this.z; - case 3: return this.w; - default: throw new Error( 'index is out of range: ' + index ); - - } - - } - - clone() { - - return new this.constructor( this.x, this.y, this.z, this.w ); - - } - - copy( v ) { - - this.x = v.x; - this.y = v.y; - this.z = v.z; - this.w = ( v.w !== undefined ) ? v.w : 1; - - return this; - - } - - add( v ) { - - this.x += v.x; - this.y += v.y; - this.z += v.z; - this.w += v.w; - - return this; - - } - - addScalar( s ) { - - this.x += s; - this.y += s; - this.z += s; - this.w += s; - - return this; - - } - - addVectors( a, b ) { - - this.x = a.x + b.x; - this.y = a.y + b.y; - this.z = a.z + b.z; - this.w = a.w + b.w; - - return this; - - } - - addScaledVector( v, s ) { - - this.x += v.x * s; - this.y += v.y * s; - this.z += v.z * s; - this.w += v.w * s; - - return this; - - } - - sub( v ) { - - this.x -= v.x; - this.y -= v.y; - this.z -= v.z; - this.w -= v.w; - - return this; - - } - - subScalar( s ) { - - this.x -= s; - this.y -= s; - this.z -= s; - this.w -= s; - - return this; - - } - - subVectors( a, b ) { - - this.x = a.x - b.x; - this.y = a.y - b.y; - this.z = a.z - b.z; - this.w = a.w - b.w; - - return this; - - } - - multiply( v ) { - - this.x *= v.x; - this.y *= v.y; - this.z *= v.z; - this.w *= v.w; - - return this; - - } - - multiplyScalar( scalar ) { - - this.x *= scalar; - this.y *= scalar; - this.z *= scalar; - this.w *= scalar; - - return this; - - } - - applyMatrix4( m ) { - - const x = this.x, y = this.y, z = this.z, w = this.w; - const e = m.elements; - - this.x = e[ 0 ] * x + e[ 4 ] * y + e[ 8 ] * z + e[ 12 ] * w; - this.y = e[ 1 ] * x + e[ 5 ] * y + e[ 9 ] * z + e[ 13 ] * w; - this.z = e[ 2 ] * x + e[ 6 ] * y + e[ 10 ] * z + e[ 14 ] * w; - this.w = e[ 3 ] * x + e[ 7 ] * y + e[ 11 ] * z + e[ 15 ] * w; - - return this; - - } - - divideScalar( scalar ) { - - return this.multiplyScalar( 1 / scalar ); - - } - - setAxisAngleFromQuaternion( q ) { - - // http://www.euclideanspace.com/maths/geometry/rotations/conversions/quaternionToAngle/index.htm - - // q is assumed to be normalized - - this.w = 2 * Math.acos( q.w ); - - const s = Math.sqrt( 1 - q.w * q.w ); - - if ( s < 0.0001 ) { - - this.x = 1; - this.y = 0; - this.z = 0; - - } else { - - this.x = q.x / s; - this.y = q.y / s; - this.z = q.z / s; - - } - - return this; - - } - - setAxisAngleFromRotationMatrix( m ) { - - // http://www.euclideanspace.com/maths/geometry/rotations/conversions/matrixToAngle/index.htm - - // assumes the upper 3x3 of m is a pure rotation matrix (i.e, unscaled) - - let angle, x, y, z; // variables for result - const epsilon = 0.01, // margin to allow for rounding errors - epsilon2 = 0.1, // margin to distinguish between 0 and 180 degrees - - te = m.elements, - - m11 = te[ 0 ], m12 = te[ 4 ], m13 = te[ 8 ], - m21 = te[ 1 ], m22 = te[ 5 ], m23 = te[ 9 ], - m31 = te[ 2 ], m32 = te[ 6 ], m33 = te[ 10 ]; - - if ( ( Math.abs( m12 - m21 ) < epsilon ) && - ( Math.abs( m13 - m31 ) < epsilon ) && - ( Math.abs( m23 - m32 ) < epsilon ) ) { - - // singularity found - // first check for identity matrix which must have +1 for all terms - // in leading diagonal and zero in other terms - - if ( ( Math.abs( m12 + m21 ) < epsilon2 ) && - ( Math.abs( m13 + m31 ) < epsilon2 ) && - ( Math.abs( m23 + m32 ) < epsilon2 ) && - ( Math.abs( m11 + m22 + m33 - 3 ) < epsilon2 ) ) { - - // this singularity is identity matrix so angle = 0 - - this.set( 1, 0, 0, 0 ); - - return this; // zero angle, arbitrary axis - - } - - // otherwise this singularity is angle = 180 - - angle = Math.PI; - - const xx = ( m11 + 1 ) / 2; - const yy = ( m22 + 1 ) / 2; - const zz = ( m33 + 1 ) / 2; - const xy = ( m12 + m21 ) / 4; - const xz = ( m13 + m31 ) / 4; - const yz = ( m23 + m32 ) / 4; - - if ( ( xx > yy ) && ( xx > zz ) ) { - - // m11 is the largest diagonal term - - if ( xx < epsilon ) { - - x = 0; - y = 0.707106781; - z = 0.707106781; - - } else { - - x = Math.sqrt( xx ); - y = xy / x; - z = xz / x; - - } - - } else if ( yy > zz ) { - - // m22 is the largest diagonal term - - if ( yy < epsilon ) { - - x = 0.707106781; - y = 0; - z = 0.707106781; - - } else { - - y = Math.sqrt( yy ); - x = xy / y; - z = yz / y; - - } - - } else { - - // m33 is the largest diagonal term so base result on this - - if ( zz < epsilon ) { - - x = 0.707106781; - y = 0.707106781; - z = 0; - - } else { - - z = Math.sqrt( zz ); - x = xz / z; - y = yz / z; - - } - - } - - this.set( x, y, z, angle ); - - return this; // return 180 deg rotation - - } - - // as we have reached here there are no singularities so we can handle normally - - let s = Math.sqrt( ( m32 - m23 ) * ( m32 - m23 ) + - ( m13 - m31 ) * ( m13 - m31 ) + - ( m21 - m12 ) * ( m21 - m12 ) ); // used to normalize - - if ( Math.abs( s ) < 0.001 ) s = 1; - - // prevent divide by zero, should not happen if matrix is orthogonal and should be - // caught by singularity test above, but I've left it in just in case - - this.x = ( m32 - m23 ) / s; - this.y = ( m13 - m31 ) / s; - this.z = ( m21 - m12 ) / s; - this.w = Math.acos( ( m11 + m22 + m33 - 1 ) / 2 ); - - return this; - - } - - min( v ) { - - this.x = Math.min( this.x, v.x ); - this.y = Math.min( this.y, v.y ); - this.z = Math.min( this.z, v.z ); - this.w = Math.min( this.w, v.w ); - - return this; - - } - - max( v ) { - - this.x = Math.max( this.x, v.x ); - this.y = Math.max( this.y, v.y ); - this.z = Math.max( this.z, v.z ); - this.w = Math.max( this.w, v.w ); - - return this; - - } - - clamp( min, max ) { - - // assumes min < max, componentwise - - this.x = Math.max( min.x, Math.min( max.x, this.x ) ); - this.y = Math.max( min.y, Math.min( max.y, this.y ) ); - this.z = Math.max( min.z, Math.min( max.z, this.z ) ); - this.w = Math.max( min.w, Math.min( max.w, this.w ) ); - - return this; - - } - - clampScalar( minVal, maxVal ) { - - this.x = Math.max( minVal, Math.min( maxVal, this.x ) ); - this.y = Math.max( minVal, Math.min( maxVal, this.y ) ); - this.z = Math.max( minVal, Math.min( maxVal, this.z ) ); - this.w = Math.max( minVal, Math.min( maxVal, this.w ) ); - - return this; - - } - - clampLength( min, max ) { - - const length = this.length(); - - return this.divideScalar( length || 1 ).multiplyScalar( Math.max( min, Math.min( max, length ) ) ); - - } - - floor() { - - this.x = Math.floor( this.x ); - this.y = Math.floor( this.y ); - this.z = Math.floor( this.z ); - this.w = Math.floor( this.w ); - - return this; - - } - - ceil() { - - this.x = Math.ceil( this.x ); - this.y = Math.ceil( this.y ); - this.z = Math.ceil( this.z ); - this.w = Math.ceil( this.w ); - - return this; - - } - - round() { - - this.x = Math.round( this.x ); - this.y = Math.round( this.y ); - this.z = Math.round( this.z ); - this.w = Math.round( this.w ); - - return this; - - } - - roundToZero() { - - this.x = ( this.x < 0 ) ? Math.ceil( this.x ) : Math.floor( this.x ); - this.y = ( this.y < 0 ) ? Math.ceil( this.y ) : Math.floor( this.y ); - this.z = ( this.z < 0 ) ? Math.ceil( this.z ) : Math.floor( this.z ); - this.w = ( this.w < 0 ) ? Math.ceil( this.w ) : Math.floor( this.w ); - - return this; - - } - - negate() { - - this.x = - this.x; - this.y = - this.y; - this.z = - this.z; - this.w = - this.w; - - return this; - - } - - dot( v ) { - - return this.x * v.x + this.y * v.y + this.z * v.z + this.w * v.w; - - } - - lengthSq() { - - return this.x * this.x + this.y * this.y + this.z * this.z + this.w * this.w; - - } - - length() { - - return Math.sqrt( this.x * this.x + this.y * this.y + this.z * this.z + this.w * this.w ); - - } - - manhattanLength() { - - return Math.abs( this.x ) + Math.abs( this.y ) + Math.abs( this.z ) + Math.abs( this.w ); - - } - - normalize() { - - return this.divideScalar( this.length() || 1 ); - - } - - setLength( length ) { - - return this.normalize().multiplyScalar( length ); - - } - - lerp( v, alpha ) { - - this.x += ( v.x - this.x ) * alpha; - this.y += ( v.y - this.y ) * alpha; - this.z += ( v.z - this.z ) * alpha; - this.w += ( v.w - this.w ) * alpha; - - return this; - - } - - lerpVectors( v1, v2, alpha ) { - - this.x = v1.x + ( v2.x - v1.x ) * alpha; - this.y = v1.y + ( v2.y - v1.y ) * alpha; - this.z = v1.z + ( v2.z - v1.z ) * alpha; - this.w = v1.w + ( v2.w - v1.w ) * alpha; - - return this; - - } - - equals( v ) { - - return ( ( v.x === this.x ) && ( v.y === this.y ) && ( v.z === this.z ) && ( v.w === this.w ) ); - - } - - fromArray( array, offset = 0 ) { - - this.x = array[ offset ]; - this.y = array[ offset + 1 ]; - this.z = array[ offset + 2 ]; - this.w = array[ offset + 3 ]; - - return this; - - } - - toArray( array = [], offset = 0 ) { - - array[ offset ] = this.x; - array[ offset + 1 ] = this.y; - array[ offset + 2 ] = this.z; - array[ offset + 3 ] = this.w; - - return array; - - } - - fromBufferAttribute( attribute, index ) { - - this.x = attribute.getX( index ); - this.y = attribute.getY( index ); - this.z = attribute.getZ( index ); - this.w = attribute.getW( index ); - - return this; - - } - - random() { - - this.x = Math.random(); - this.y = Math.random(); - this.z = Math.random(); - this.w = Math.random(); - - return this; - - } - - *[ Symbol.iterator ]() { - - yield this.x; - yield this.y; - yield this.z; - yield this.w; - - } - - } - - /* - In options, we can specify: - * Texture parameters for an auto-generated target texture - * depthBuffer/stencilBuffer: Booleans to indicate if we should generate these buffers - */ - class WebGLRenderTarget extends EventDispatcher { - - constructor( width = 1, height = 1, options = {} ) { - - super(); - - this.isWebGLRenderTarget = true; - - this.width = width; - this.height = height; - this.depth = 1; - - this.scissor = new Vector4( 0, 0, width, height ); - this.scissorTest = false; - - this.viewport = new Vector4( 0, 0, width, height ); - - const image = { width: width, height: height, depth: 1 }; - - this.texture = new Texture( image, options.mapping, options.wrapS, options.wrapT, options.magFilter, options.minFilter, options.format, options.type, options.anisotropy, options.encoding ); - this.texture.isRenderTargetTexture = true; - - this.texture.flipY = false; - this.texture.generateMipmaps = options.generateMipmaps !== undefined ? options.generateMipmaps : false; - this.texture.internalFormat = options.internalFormat !== undefined ? options.internalFormat : null; - this.texture.minFilter = options.minFilter !== undefined ? options.minFilter : LinearFilter; - - this.depthBuffer = options.depthBuffer !== undefined ? options.depthBuffer : true; - this.stencilBuffer = options.stencilBuffer !== undefined ? options.stencilBuffer : false; - - this.depthTexture = options.depthTexture !== undefined ? options.depthTexture : null; - - this.samples = options.samples !== undefined ? options.samples : 0; - - } - - setSize( width, height, depth = 1 ) { - - if ( this.width !== width || this.height !== height || this.depth !== depth ) { - - this.width = width; - this.height = height; - this.depth = depth; - - this.texture.image.width = width; - this.texture.image.height = height; - this.texture.image.depth = depth; - - this.dispose(); - - } - - this.viewport.set( 0, 0, width, height ); - this.scissor.set( 0, 0, width, height ); - - } - - clone() { - - return new this.constructor().copy( this ); - - } - - copy( source ) { - - this.width = source.width; - this.height = source.height; - this.depth = source.depth; - - this.viewport.copy( source.viewport ); - - this.texture = source.texture.clone(); - this.texture.isRenderTargetTexture = true; - - // ensure image object is not shared, see #20328 - - const image = Object.assign( {}, source.texture.image ); - this.texture.source = new Source( image ); - - this.depthBuffer = source.depthBuffer; - this.stencilBuffer = source.stencilBuffer; - - if ( source.depthTexture !== null ) this.depthTexture = source.depthTexture.clone(); - - this.samples = source.samples; - - return this; - - } - - dispose() { - - this.dispatchEvent( { type: 'dispose' } ); - - } - - } - - class DataArrayTexture extends Texture { - - constructor( data = null, width = 1, height = 1, depth = 1 ) { - - super( null ); - - this.isDataArrayTexture = true; - - this.image = { data, width, height, depth }; - - this.magFilter = NearestFilter; - this.minFilter = NearestFilter; - - this.wrapR = ClampToEdgeWrapping; - - this.generateMipmaps = false; - this.flipY = false; - this.unpackAlignment = 1; - - } - - } - - class WebGLArrayRenderTarget extends WebGLRenderTarget { - - constructor( width = 1, height = 1, depth = 1 ) { - - super( width, height ); - - this.isWebGLArrayRenderTarget = true; - - this.depth = depth; - - this.texture = new DataArrayTexture( null, width, height, depth ); - - this.texture.isRenderTargetTexture = true; - - } - - } - - class Data3DTexture extends Texture { - - constructor( data = null, width = 1, height = 1, depth = 1 ) { - - // We're going to add .setXXX() methods for setting properties later. - // Users can still set in DataTexture3D directly. - // - // const texture = new THREE.DataTexture3D( data, width, height, depth ); - // texture.anisotropy = 16; - // - // See #14839 - - super( null ); - - this.isData3DTexture = true; - - this.image = { data, width, height, depth }; - - this.magFilter = NearestFilter; - this.minFilter = NearestFilter; - - this.wrapR = ClampToEdgeWrapping; - - this.generateMipmaps = false; - this.flipY = false; - this.unpackAlignment = 1; - - } - - } - - class WebGL3DRenderTarget extends WebGLRenderTarget { - - constructor( width = 1, height = 1, depth = 1 ) { - - super( width, height ); - - this.isWebGL3DRenderTarget = true; - - this.depth = depth; - - this.texture = new Data3DTexture( null, width, height, depth ); - - this.texture.isRenderTargetTexture = true; - - } - - } - - class WebGLMultipleRenderTargets extends WebGLRenderTarget { - - constructor( width = 1, height = 1, count = 1, options = {} ) { - - super( width, height, options ); - - this.isWebGLMultipleRenderTargets = true; - - const texture = this.texture; - - this.texture = []; - - for ( let i = 0; i < count; i ++ ) { - - this.texture[ i ] = texture.clone(); - this.texture[ i ].isRenderTargetTexture = true; - - } - - } - - setSize( width, height, depth = 1 ) { - - if ( this.width !== width || this.height !== height || this.depth !== depth ) { - - this.width = width; - this.height = height; - this.depth = depth; - - for ( let i = 0, il = this.texture.length; i < il; i ++ ) { - - this.texture[ i ].image.width = width; - this.texture[ i ].image.height = height; - this.texture[ i ].image.depth = depth; - - } - - this.dispose(); - - } - - this.viewport.set( 0, 0, width, height ); - this.scissor.set( 0, 0, width, height ); - - return this; - - } - - copy( source ) { - - this.dispose(); - - this.width = source.width; - this.height = source.height; - this.depth = source.depth; - - this.viewport.set( 0, 0, this.width, this.height ); - this.scissor.set( 0, 0, this.width, this.height ); - - this.depthBuffer = source.depthBuffer; - this.stencilBuffer = source.stencilBuffer; - - if ( source.depthTexture !== null ) this.depthTexture = source.depthTexture.clone(); - - this.texture.length = 0; - - for ( let i = 0, il = source.texture.length; i < il; i ++ ) { - - this.texture[ i ] = source.texture[ i ].clone(); - this.texture[ i ].isRenderTargetTexture = true; - - } - - return this; - - } - - } - - class Box3 { - - constructor( min = new Vector3( + Infinity, + Infinity, + Infinity ), max = new Vector3( - Infinity, - Infinity, - Infinity ) ) { - - this.isBox3 = true; - - this.min = min; - this.max = max; - - } - - set( min, max ) { - - this.min.copy( min ); - this.max.copy( max ); - - return this; - - } - - setFromArray( array ) { - - let minX = + Infinity; - let minY = + Infinity; - let minZ = + Infinity; - - let maxX = - Infinity; - let maxY = - Infinity; - let maxZ = - Infinity; - - for ( let i = 0, l = array.length; i < l; i += 3 ) { - - const x = array[ i ]; - const y = array[ i + 1 ]; - const z = array[ i + 2 ]; - - if ( x < minX ) minX = x; - if ( y < minY ) minY = y; - if ( z < minZ ) minZ = z; - - if ( x > maxX ) maxX = x; - if ( y > maxY ) maxY = y; - if ( z > maxZ ) maxZ = z; - - } - - this.min.set( minX, minY, minZ ); - this.max.set( maxX, maxY, maxZ ); - - return this; - - } - - setFromBufferAttribute( attribute ) { - - let minX = + Infinity; - let minY = + Infinity; - let minZ = + Infinity; - - let maxX = - Infinity; - let maxY = - Infinity; - let maxZ = - Infinity; - - for ( let i = 0, l = attribute.count; i < l; i ++ ) { - - const x = attribute.getX( i ); - const y = attribute.getY( i ); - const z = attribute.getZ( i ); - - if ( x < minX ) minX = x; - if ( y < minY ) minY = y; - if ( z < minZ ) minZ = z; - - if ( x > maxX ) maxX = x; - if ( y > maxY ) maxY = y; - if ( z > maxZ ) maxZ = z; - - } - - this.min.set( minX, minY, minZ ); - this.max.set( maxX, maxY, maxZ ); - - return this; - - } - - setFromPoints( points ) { - - this.makeEmpty(); - - for ( let i = 0, il = points.length; i < il; i ++ ) { - - this.expandByPoint( points[ i ] ); - - } - - return this; - - } - - setFromCenterAndSize( center, size ) { - - const halfSize = _vector$b.copy( size ).multiplyScalar( 0.5 ); - - this.min.copy( center ).sub( halfSize ); - this.max.copy( center ).add( halfSize ); - - return this; - - } - - setFromObject( object, precise = false ) { - - this.makeEmpty(); - - return this.expandByObject( object, precise ); - - } - - clone() { - - return new this.constructor().copy( this ); - - } - - copy( box ) { - - this.min.copy( box.min ); - this.max.copy( box.max ); - - return this; - - } - - makeEmpty() { - - this.min.x = this.min.y = this.min.z = + Infinity; - this.max.x = this.max.y = this.max.z = - Infinity; - - return this; - - } - - isEmpty() { - - // this is a more robust check for empty than ( volume <= 0 ) because volume can get positive with two negative axes - - return ( this.max.x < this.min.x ) || ( this.max.y < this.min.y ) || ( this.max.z < this.min.z ); - - } - - getCenter( target ) { - - return this.isEmpty() ? target.set( 0, 0, 0 ) : target.addVectors( this.min, this.max ).multiplyScalar( 0.5 ); - - } - - getSize( target ) { - - return this.isEmpty() ? target.set( 0, 0, 0 ) : target.subVectors( this.max, this.min ); - - } - - expandByPoint( point ) { - - this.min.min( point ); - this.max.max( point ); - - return this; - - } - - expandByVector( vector ) { - - this.min.sub( vector ); - this.max.add( vector ); - - return this; - - } - - expandByScalar( scalar ) { - - this.min.addScalar( - scalar ); - this.max.addScalar( scalar ); - - return this; - - } - - expandByObject( object, precise = false ) { - - // Computes the world-axis-aligned bounding box of an object (including its children), - // accounting for both the object's, and children's, world transforms - - object.updateWorldMatrix( false, false ); - - const geometry = object.geometry; - - if ( geometry !== undefined ) { - - if ( precise && geometry.attributes != undefined && geometry.attributes.position !== undefined ) { - - const position = geometry.attributes.position; - for ( let i = 0, l = position.count; i < l; i ++ ) { - - _vector$b.fromBufferAttribute( position, i ).applyMatrix4( object.matrixWorld ); - this.expandByPoint( _vector$b ); - - } - - } else { - - if ( geometry.boundingBox === null ) { - - geometry.computeBoundingBox(); - - } - - _box$3.copy( geometry.boundingBox ); - _box$3.applyMatrix4( object.matrixWorld ); - - this.union( _box$3 ); - - } - - } - - const children = object.children; - - for ( let i = 0, l = children.length; i < l; i ++ ) { - - this.expandByObject( children[ i ], precise ); - - } - - return this; - - } - - containsPoint( point ) { - - return point.x < this.min.x || point.x > this.max.x || - point.y < this.min.y || point.y > this.max.y || - point.z < this.min.z || point.z > this.max.z ? false : true; - - } - - containsBox( box ) { - - return this.min.x <= box.min.x && box.max.x <= this.max.x && - this.min.y <= box.min.y && box.max.y <= this.max.y && - this.min.z <= box.min.z && box.max.z <= this.max.z; - - } - - getParameter( point, target ) { - - // This can potentially have a divide by zero if the box - // has a size dimension of 0. - - return target.set( - ( point.x - this.min.x ) / ( this.max.x - this.min.x ), - ( point.y - this.min.y ) / ( this.max.y - this.min.y ), - ( point.z - this.min.z ) / ( this.max.z - this.min.z ) - ); - - } - - intersectsBox( box ) { - - // using 6 splitting planes to rule out intersections. - return box.max.x < this.min.x || box.min.x > this.max.x || - box.max.y < this.min.y || box.min.y > this.max.y || - box.max.z < this.min.z || box.min.z > this.max.z ? false : true; - - } - - intersectsSphere( sphere ) { - - // Find the point on the AABB closest to the sphere center. - this.clampPoint( sphere.center, _vector$b ); - - // If that point is inside the sphere, the AABB and sphere intersect. - return _vector$b.distanceToSquared( sphere.center ) <= ( sphere.radius * sphere.radius ); - - } - - intersectsPlane( plane ) { - - // We compute the minimum and maximum dot product values. If those values - // are on the same side (back or front) of the plane, then there is no intersection. - - let min, max; - - if ( plane.normal.x > 0 ) { - - min = plane.normal.x * this.min.x; - max = plane.normal.x * this.max.x; - - } else { - - min = plane.normal.x * this.max.x; - max = plane.normal.x * this.min.x; - - } - - if ( plane.normal.y > 0 ) { - - min += plane.normal.y * this.min.y; - max += plane.normal.y * this.max.y; - - } else { - - min += plane.normal.y * this.max.y; - max += plane.normal.y * this.min.y; - - } - - if ( plane.normal.z > 0 ) { - - min += plane.normal.z * this.min.z; - max += plane.normal.z * this.max.z; - - } else { - - min += plane.normal.z * this.max.z; - max += plane.normal.z * this.min.z; - - } - - return ( min <= - plane.constant && max >= - plane.constant ); - - } - - intersectsTriangle( triangle ) { - - if ( this.isEmpty() ) { - - return false; - - } - - // compute box center and extents - this.getCenter( _center ); - _extents.subVectors( this.max, _center ); - - // translate triangle to aabb origin - _v0$2.subVectors( triangle.a, _center ); - _v1$7.subVectors( triangle.b, _center ); - _v2$4.subVectors( triangle.c, _center ); - - // compute edge vectors for triangle - _f0.subVectors( _v1$7, _v0$2 ); - _f1.subVectors( _v2$4, _v1$7 ); - _f2.subVectors( _v0$2, _v2$4 ); - - // test against axes that are given by cross product combinations of the edges of the triangle and the edges of the aabb - // make an axis testing of each of the 3 sides of the aabb against each of the 3 sides of the triangle = 9 axis of separation - // axis_ij = u_i x f_j (u0, u1, u2 = face normals of aabb = x,y,z axes vectors since aabb is axis aligned) - let axes = [ - 0, - _f0.z, _f0.y, 0, - _f1.z, _f1.y, 0, - _f2.z, _f2.y, - _f0.z, 0, - _f0.x, _f1.z, 0, - _f1.x, _f2.z, 0, - _f2.x, - - _f0.y, _f0.x, 0, - _f1.y, _f1.x, 0, - _f2.y, _f2.x, 0 - ]; - if ( ! satForAxes( axes, _v0$2, _v1$7, _v2$4, _extents ) ) { - - return false; - - } - - // test 3 face normals from the aabb - axes = [ 1, 0, 0, 0, 1, 0, 0, 0, 1 ]; - if ( ! satForAxes( axes, _v0$2, _v1$7, _v2$4, _extents ) ) { - - return false; - - } - - // finally testing the face normal of the triangle - // use already existing triangle edge vectors here - _triangleNormal.crossVectors( _f0, _f1 ); - axes = [ _triangleNormal.x, _triangleNormal.y, _triangleNormal.z ]; - - return satForAxes( axes, _v0$2, _v1$7, _v2$4, _extents ); - - } - - clampPoint( point, target ) { - - return target.copy( point ).clamp( this.min, this.max ); - - } - - distanceToPoint( point ) { - - return this.clampPoint( point, _vector$b ).distanceTo( point ); - - } - - getBoundingSphere( target ) { - - if ( this.isEmpty() ) { - - target.makeEmpty(); - - } else { - - this.getCenter( target.center ); - - target.radius = this.getSize( _vector$b ).length() * 0.5; - - } - - return target; - - } - - intersect( box ) { - - this.min.max( box.min ); - this.max.min( box.max ); - - // ensure that if there is no overlap, the result is fully empty, not slightly empty with non-inf/+inf values that will cause subsequence intersects to erroneously return valid values. - if ( this.isEmpty() ) this.makeEmpty(); - - return this; - - } - - union( box ) { - - this.min.min( box.min ); - this.max.max( box.max ); - - return this; - - } - - applyMatrix4( matrix ) { - - // transform of empty box is an empty box. - if ( this.isEmpty() ) return this; - - // NOTE: I am using a binary pattern to specify all 2^3 combinations below - _points[ 0 ].set( this.min.x, this.min.y, this.min.z ).applyMatrix4( matrix ); // 000 - _points[ 1 ].set( this.min.x, this.min.y, this.max.z ).applyMatrix4( matrix ); // 001 - _points[ 2 ].set( this.min.x, this.max.y, this.min.z ).applyMatrix4( matrix ); // 010 - _points[ 3 ].set( this.min.x, this.max.y, this.max.z ).applyMatrix4( matrix ); // 011 - _points[ 4 ].set( this.max.x, this.min.y, this.min.z ).applyMatrix4( matrix ); // 100 - _points[ 5 ].set( this.max.x, this.min.y, this.max.z ).applyMatrix4( matrix ); // 101 - _points[ 6 ].set( this.max.x, this.max.y, this.min.z ).applyMatrix4( matrix ); // 110 - _points[ 7 ].set( this.max.x, this.max.y, this.max.z ).applyMatrix4( matrix ); // 111 - - this.setFromPoints( _points ); - - return this; - - } - - translate( offset ) { - - this.min.add( offset ); - this.max.add( offset ); - - return this; - - } - - equals( box ) { - - return box.min.equals( this.min ) && box.max.equals( this.max ); - - } - - } - - const _points = [ - /*@__PURE__*/ new Vector3(), - /*@__PURE__*/ new Vector3(), - /*@__PURE__*/ new Vector3(), - /*@__PURE__*/ new Vector3(), - /*@__PURE__*/ new Vector3(), - /*@__PURE__*/ new Vector3(), - /*@__PURE__*/ new Vector3(), - /*@__PURE__*/ new Vector3() - ]; - - const _vector$b = /*@__PURE__*/ new Vector3(); - - const _box$3 = /*@__PURE__*/ new Box3(); - - // triangle centered vertices - - const _v0$2 = /*@__PURE__*/ new Vector3(); - const _v1$7 = /*@__PURE__*/ new Vector3(); - const _v2$4 = /*@__PURE__*/ new Vector3(); - - // triangle edge vectors - - const _f0 = /*@__PURE__*/ new Vector3(); - const _f1 = /*@__PURE__*/ new Vector3(); - const _f2 = /*@__PURE__*/ new Vector3(); - - const _center = /*@__PURE__*/ new Vector3(); - const _extents = /*@__PURE__*/ new Vector3(); - const _triangleNormal = /*@__PURE__*/ new Vector3(); - const _testAxis = /*@__PURE__*/ new Vector3(); - - function satForAxes( axes, v0, v1, v2, extents ) { - - for ( let i = 0, j = axes.length - 3; i <= j; i += 3 ) { - - _testAxis.fromArray( axes, i ); - // project the aabb onto the separating axis - const r = extents.x * Math.abs( _testAxis.x ) + extents.y * Math.abs( _testAxis.y ) + extents.z * Math.abs( _testAxis.z ); - // project all 3 vertices of the triangle onto the separating axis - const p0 = v0.dot( _testAxis ); - const p1 = v1.dot( _testAxis ); - const p2 = v2.dot( _testAxis ); - // actual test, basically see if either of the most extreme of the triangle points intersects r - if ( Math.max( - Math.max( p0, p1, p2 ), Math.min( p0, p1, p2 ) ) > r ) { - - // points of the projected triangle are outside the projected half-length of the aabb - // the axis is separating and we can exit - return false; - - } - - } - - return true; - - } - - const _box$2 = /*@__PURE__*/ new Box3(); - const _v1$6 = /*@__PURE__*/ new Vector3(); - const _v2$3 = /*@__PURE__*/ new Vector3(); - - class Sphere { - - constructor( center = new Vector3(), radius = - 1 ) { - - this.center = center; - this.radius = radius; - - } - - set( center, radius ) { - - this.center.copy( center ); - this.radius = radius; - - return this; - - } - - setFromPoints( points, optionalCenter ) { - - const center = this.center; - - if ( optionalCenter !== undefined ) { - - center.copy( optionalCenter ); - - } else { - - _box$2.setFromPoints( points ).getCenter( center ); - - } - - let maxRadiusSq = 0; - - for ( let i = 0, il = points.length; i < il; i ++ ) { - - maxRadiusSq = Math.max( maxRadiusSq, center.distanceToSquared( points[ i ] ) ); - - } - - this.radius = Math.sqrt( maxRadiusSq ); - - return this; - - } - - copy( sphere ) { - - this.center.copy( sphere.center ); - this.radius = sphere.radius; - - return this; - - } - - isEmpty() { - - return ( this.radius < 0 ); - - } - - makeEmpty() { - - this.center.set( 0, 0, 0 ); - this.radius = - 1; - - return this; - - } - - containsPoint( point ) { - - return ( point.distanceToSquared( this.center ) <= ( this.radius * this.radius ) ); - - } - - distanceToPoint( point ) { - - return ( point.distanceTo( this.center ) - this.radius ); - - } - - intersectsSphere( sphere ) { - - const radiusSum = this.radius + sphere.radius; - - return sphere.center.distanceToSquared( this.center ) <= ( radiusSum * radiusSum ); - - } - - intersectsBox( box ) { - - return box.intersectsSphere( this ); - - } - - intersectsPlane( plane ) { - - return Math.abs( plane.distanceToPoint( this.center ) ) <= this.radius; - - } - - clampPoint( point, target ) { - - const deltaLengthSq = this.center.distanceToSquared( point ); - - target.copy( point ); - - if ( deltaLengthSq > ( this.radius * this.radius ) ) { - - target.sub( this.center ).normalize(); - target.multiplyScalar( this.radius ).add( this.center ); - - } - - return target; - - } - - getBoundingBox( target ) { - - if ( this.isEmpty() ) { - - // Empty sphere produces empty bounding box - target.makeEmpty(); - return target; - - } - - target.set( this.center, this.center ); - target.expandByScalar( this.radius ); - - return target; - - } - - applyMatrix4( matrix ) { - - this.center.applyMatrix4( matrix ); - this.radius = this.radius * matrix.getMaxScaleOnAxis(); - - return this; - - } - - translate( offset ) { - - this.center.add( offset ); - - return this; - - } - - expandByPoint( point ) { - - if ( this.isEmpty() ) { - - this.center.copy( point ); - - this.radius = 0; - - return this; - - } - - _v1$6.subVectors( point, this.center ); - - const lengthSq = _v1$6.lengthSq(); - - if ( lengthSq > ( this.radius * this.radius ) ) { - - // calculate the minimal sphere - - const length = Math.sqrt( lengthSq ); - - const delta = ( length - this.radius ) * 0.5; - - this.center.addScaledVector( _v1$6, delta / length ); - - this.radius += delta; - - } - - return this; - - } - - union( sphere ) { - - if ( sphere.isEmpty() ) { - - return this; - - } - - if ( this.isEmpty() ) { - - this.copy( sphere ); - - return this; - - } - - if ( this.center.equals( sphere.center ) === true ) { - - this.radius = Math.max( this.radius, sphere.radius ); - - } else { - - _v2$3.subVectors( sphere.center, this.center ).setLength( sphere.radius ); - - this.expandByPoint( _v1$6.copy( sphere.center ).add( _v2$3 ) ); - - this.expandByPoint( _v1$6.copy( sphere.center ).sub( _v2$3 ) ); - - } - - return this; - - } - - equals( sphere ) { - - return sphere.center.equals( this.center ) && ( sphere.radius === this.radius ); - - } - - clone() { - - return new this.constructor().copy( this ); - - } - - } - - const _vector$a = /*@__PURE__*/ new Vector3(); - const _segCenter = /*@__PURE__*/ new Vector3(); - const _segDir = /*@__PURE__*/ new Vector3(); - const _diff = /*@__PURE__*/ new Vector3(); - - const _edge1 = /*@__PURE__*/ new Vector3(); - const _edge2 = /*@__PURE__*/ new Vector3(); - const _normal$1 = /*@__PURE__*/ new Vector3(); - - class Ray { - - constructor( origin = new Vector3(), direction = new Vector3( 0, 0, - 1 ) ) { - - this.origin = origin; - this.direction = direction; - - } - - set( origin, direction ) { - - this.origin.copy( origin ); - this.direction.copy( direction ); - - return this; - - } - - copy( ray ) { - - this.origin.copy( ray.origin ); - this.direction.copy( ray.direction ); - - return this; - - } - - at( t, target ) { - - return target.copy( this.origin ).addScaledVector( this.direction, t ); - - } - - lookAt( v ) { - - this.direction.copy( v ).sub( this.origin ).normalize(); - - return this; - - } - - recast( t ) { - - this.origin.copy( this.at( t, _vector$a ) ); - - return this; - - } - - closestPointToPoint( point, target ) { - - target.subVectors( point, this.origin ); - - const directionDistance = target.dot( this.direction ); - - if ( directionDistance < 0 ) { - - return target.copy( this.origin ); - - } - - return target.copy( this.origin ).addScaledVector( this.direction, directionDistance ); - - } - - distanceToPoint( point ) { - - return Math.sqrt( this.distanceSqToPoint( point ) ); - - } - - distanceSqToPoint( point ) { - - const directionDistance = _vector$a.subVectors( point, this.origin ).dot( this.direction ); - - // point behind the ray - - if ( directionDistance < 0 ) { - - return this.origin.distanceToSquared( point ); - - } - - _vector$a.copy( this.origin ).addScaledVector( this.direction, directionDistance ); - - return _vector$a.distanceToSquared( point ); - - } - - distanceSqToSegment( v0, v1, optionalPointOnRay, optionalPointOnSegment ) { - - // from https://github.com/pmjoniak/GeometricTools/blob/master/GTEngine/Include/Mathematics/GteDistRaySegment.h - // It returns the min distance between the ray and the segment - // defined by v0 and v1 - // It can also set two optional targets : - // - The closest point on the ray - // - The closest point on the segment - - _segCenter.copy( v0 ).add( v1 ).multiplyScalar( 0.5 ); - _segDir.copy( v1 ).sub( v0 ).normalize(); - _diff.copy( this.origin ).sub( _segCenter ); - - const segExtent = v0.distanceTo( v1 ) * 0.5; - const a01 = - this.direction.dot( _segDir ); - const b0 = _diff.dot( this.direction ); - const b1 = - _diff.dot( _segDir ); - const c = _diff.lengthSq(); - const det = Math.abs( 1 - a01 * a01 ); - let s0, s1, sqrDist, extDet; - - if ( det > 0 ) { - - // The ray and segment are not parallel. - - s0 = a01 * b1 - b0; - s1 = a01 * b0 - b1; - extDet = segExtent * det; - - if ( s0 >= 0 ) { - - if ( s1 >= - extDet ) { - - if ( s1 <= extDet ) { - - // region 0 - // Minimum at interior points of ray and segment. - - const invDet = 1 / det; - s0 *= invDet; - s1 *= invDet; - sqrDist = s0 * ( s0 + a01 * s1 + 2 * b0 ) + s1 * ( a01 * s0 + s1 + 2 * b1 ) + c; - - } else { - - // region 1 - - s1 = segExtent; - s0 = Math.max( 0, - ( a01 * s1 + b0 ) ); - sqrDist = - s0 * s0 + s1 * ( s1 + 2 * b1 ) + c; - - } - - } else { - - // region 5 - - s1 = - segExtent; - s0 = Math.max( 0, - ( a01 * s1 + b0 ) ); - sqrDist = - s0 * s0 + s1 * ( s1 + 2 * b1 ) + c; - - } - - } else { - - if ( s1 <= - extDet ) { - - // region 4 - - s0 = Math.max( 0, - ( - a01 * segExtent + b0 ) ); - s1 = ( s0 > 0 ) ? - segExtent : Math.min( Math.max( - segExtent, - b1 ), segExtent ); - sqrDist = - s0 * s0 + s1 * ( s1 + 2 * b1 ) + c; - - } else if ( s1 <= extDet ) { - - // region 3 - - s0 = 0; - s1 = Math.min( Math.max( - segExtent, - b1 ), segExtent ); - sqrDist = s1 * ( s1 + 2 * b1 ) + c; - - } else { - - // region 2 - - s0 = Math.max( 0, - ( a01 * segExtent + b0 ) ); - s1 = ( s0 > 0 ) ? segExtent : Math.min( Math.max( - segExtent, - b1 ), segExtent ); - sqrDist = - s0 * s0 + s1 * ( s1 + 2 * b1 ) + c; - - } - - } - - } else { - - // Ray and segment are parallel. - - s1 = ( a01 > 0 ) ? - segExtent : segExtent; - s0 = Math.max( 0, - ( a01 * s1 + b0 ) ); - sqrDist = - s0 * s0 + s1 * ( s1 + 2 * b1 ) + c; - - } - - if ( optionalPointOnRay ) { - - optionalPointOnRay.copy( this.origin ).addScaledVector( this.direction, s0 ); - - } - - if ( optionalPointOnSegment ) { - - optionalPointOnSegment.copy( _segCenter ).addScaledVector( _segDir, s1 ); - - } - - return sqrDist; - - } - - intersectSphere( sphere, target ) { - - _vector$a.subVectors( sphere.center, this.origin ); - const tca = _vector$a.dot( this.direction ); - const d2 = _vector$a.dot( _vector$a ) - tca * tca; - const radius2 = sphere.radius * sphere.radius; - - if ( d2 > radius2 ) return null; - - const thc = Math.sqrt( radius2 - d2 ); - - // t0 = first intersect point - entrance on front of sphere - const t0 = tca - thc; - - // t1 = second intersect point - exit point on back of sphere - const t1 = tca + thc; - - // test to see if t1 is behind the ray - if so, return null - if ( t1 < 0 ) return null; - - // test to see if t0 is behind the ray: - // if it is, the ray is inside the sphere, so return the second exit point scaled by t1, - // in order to always return an intersect point that is in front of the ray. - if ( t0 < 0 ) return this.at( t1, target ); - - // else t0 is in front of the ray, so return the first collision point scaled by t0 - return this.at( t0, target ); - - } - - intersectsSphere( sphere ) { - - return this.distanceSqToPoint( sphere.center ) <= ( sphere.radius * sphere.radius ); - - } - - distanceToPlane( plane ) { - - const denominator = plane.normal.dot( this.direction ); - - if ( denominator === 0 ) { - - // line is coplanar, return origin - if ( plane.distanceToPoint( this.origin ) === 0 ) { - - return 0; - - } - - // Null is preferable to undefined since undefined means.... it is undefined - - return null; - - } - - const t = - ( this.origin.dot( plane.normal ) + plane.constant ) / denominator; - - // Return if the ray never intersects the plane - - return t >= 0 ? t : null; - - } - - intersectPlane( plane, target ) { - - const t = this.distanceToPlane( plane ); - - if ( t === null ) { - - return null; - - } - - return this.at( t, target ); - - } - - intersectsPlane( plane ) { - - // check if the ray lies on the plane first - - const distToPoint = plane.distanceToPoint( this.origin ); - - if ( distToPoint === 0 ) { - - return true; - - } - - const denominator = plane.normal.dot( this.direction ); - - if ( denominator * distToPoint < 0 ) { - - return true; - - } - - // ray origin is behind the plane (and is pointing behind it) - - return false; - - } - - intersectBox( box, target ) { - - let tmin, tmax, tymin, tymax, tzmin, tzmax; - - const invdirx = 1 / this.direction.x, - invdiry = 1 / this.direction.y, - invdirz = 1 / this.direction.z; - - const origin = this.origin; - - if ( invdirx >= 0 ) { - - tmin = ( box.min.x - origin.x ) * invdirx; - tmax = ( box.max.x - origin.x ) * invdirx; - - } else { - - tmin = ( box.max.x - origin.x ) * invdirx; - tmax = ( box.min.x - origin.x ) * invdirx; - - } - - if ( invdiry >= 0 ) { - - tymin = ( box.min.y - origin.y ) * invdiry; - tymax = ( box.max.y - origin.y ) * invdiry; - - } else { - - tymin = ( box.max.y - origin.y ) * invdiry; - tymax = ( box.min.y - origin.y ) * invdiry; - - } - - if ( ( tmin > tymax ) || ( tymin > tmax ) ) return null; - - if ( tymin > tmin || isNaN( tmin ) ) tmin = tymin; - - if ( tymax < tmax || isNaN( tmax ) ) tmax = tymax; - - if ( invdirz >= 0 ) { - - tzmin = ( box.min.z - origin.z ) * invdirz; - tzmax = ( box.max.z - origin.z ) * invdirz; - - } else { - - tzmin = ( box.max.z - origin.z ) * invdirz; - tzmax = ( box.min.z - origin.z ) * invdirz; - - } - - if ( ( tmin > tzmax ) || ( tzmin > tmax ) ) return null; - - if ( tzmin > tmin || tmin !== tmin ) tmin = tzmin; - - if ( tzmax < tmax || tmax !== tmax ) tmax = tzmax; - - //return point closest to the ray (positive side) - - if ( tmax < 0 ) return null; - - return this.at( tmin >= 0 ? tmin : tmax, target ); - - } - - intersectsBox( box ) { - - return this.intersectBox( box, _vector$a ) !== null; - - } - - intersectTriangle( a, b, c, backfaceCulling, target ) { - - // Compute the offset origin, edges, and normal. - - // from https://github.com/pmjoniak/GeometricTools/blob/master/GTEngine/Include/Mathematics/GteIntrRay3Triangle3.h - - _edge1.subVectors( b, a ); - _edge2.subVectors( c, a ); - _normal$1.crossVectors( _edge1, _edge2 ); - - // Solve Q + t*D = b1*E1 + b2*E2 (Q = kDiff, D = ray direction, - // E1 = kEdge1, E2 = kEdge2, N = Cross(E1,E2)) by - // |Dot(D,N)|*b1 = sign(Dot(D,N))*Dot(D,Cross(Q,E2)) - // |Dot(D,N)|*b2 = sign(Dot(D,N))*Dot(D,Cross(E1,Q)) - // |Dot(D,N)|*t = -sign(Dot(D,N))*Dot(Q,N) - let DdN = this.direction.dot( _normal$1 ); - let sign; - - if ( DdN > 0 ) { - - if ( backfaceCulling ) return null; - sign = 1; - - } else if ( DdN < 0 ) { - - sign = - 1; - DdN = - DdN; - - } else { - - return null; - - } - - _diff.subVectors( this.origin, a ); - const DdQxE2 = sign * this.direction.dot( _edge2.crossVectors( _diff, _edge2 ) ); - - // b1 < 0, no intersection - if ( DdQxE2 < 0 ) { - - return null; - - } - - const DdE1xQ = sign * this.direction.dot( _edge1.cross( _diff ) ); - - // b2 < 0, no intersection - if ( DdE1xQ < 0 ) { - - return null; - - } - - // b1+b2 > 1, no intersection - if ( DdQxE2 + DdE1xQ > DdN ) { - - return null; - - } - - // Line intersects triangle, check if ray does. - const QdN = - sign * _diff.dot( _normal$1 ); - - // t < 0, no intersection - if ( QdN < 0 ) { - - return null; - - } - - // Ray intersects triangle. - return this.at( QdN / DdN, target ); - - } - - applyMatrix4( matrix4 ) { - - this.origin.applyMatrix4( matrix4 ); - this.direction.transformDirection( matrix4 ); - - return this; - - } - - equals( ray ) { - - return ray.origin.equals( this.origin ) && ray.direction.equals( this.direction ); - - } - - clone() { - - return new this.constructor().copy( this ); - - } - - } - - class Matrix4 { - - constructor() { - - Matrix4.prototype.isMatrix4 = true; - - this.elements = [ - - 1, 0, 0, 0, - 0, 1, 0, 0, - 0, 0, 1, 0, - 0, 0, 0, 1 - - ]; - - } - - set( n11, n12, n13, n14, n21, n22, n23, n24, n31, n32, n33, n34, n41, n42, n43, n44 ) { - - const te = this.elements; - - te[ 0 ] = n11; te[ 4 ] = n12; te[ 8 ] = n13; te[ 12 ] = n14; - te[ 1 ] = n21; te[ 5 ] = n22; te[ 9 ] = n23; te[ 13 ] = n24; - te[ 2 ] = n31; te[ 6 ] = n32; te[ 10 ] = n33; te[ 14 ] = n34; - te[ 3 ] = n41; te[ 7 ] = n42; te[ 11 ] = n43; te[ 15 ] = n44; - - return this; - - } - - identity() { - - this.set( - - 1, 0, 0, 0, - 0, 1, 0, 0, - 0, 0, 1, 0, - 0, 0, 0, 1 - - ); - - return this; - - } - - clone() { - - return new Matrix4().fromArray( this.elements ); - - } - - copy( m ) { - - const te = this.elements; - const me = m.elements; - - te[ 0 ] = me[ 0 ]; te[ 1 ] = me[ 1 ]; te[ 2 ] = me[ 2 ]; te[ 3 ] = me[ 3 ]; - te[ 4 ] = me[ 4 ]; te[ 5 ] = me[ 5 ]; te[ 6 ] = me[ 6 ]; te[ 7 ] = me[ 7 ]; - te[ 8 ] = me[ 8 ]; te[ 9 ] = me[ 9 ]; te[ 10 ] = me[ 10 ]; te[ 11 ] = me[ 11 ]; - te[ 12 ] = me[ 12 ]; te[ 13 ] = me[ 13 ]; te[ 14 ] = me[ 14 ]; te[ 15 ] = me[ 15 ]; - - return this; - - } - - copyPosition( m ) { - - const te = this.elements, me = m.elements; - - te[ 12 ] = me[ 12 ]; - te[ 13 ] = me[ 13 ]; - te[ 14 ] = me[ 14 ]; - - return this; - - } - - setFromMatrix3( m ) { - - const me = m.elements; - - this.set( - - me[ 0 ], me[ 3 ], me[ 6 ], 0, - me[ 1 ], me[ 4 ], me[ 7 ], 0, - me[ 2 ], me[ 5 ], me[ 8 ], 0, - 0, 0, 0, 1 - - ); - - return this; - - } - - extractBasis( xAxis, yAxis, zAxis ) { - - xAxis.setFromMatrixColumn( this, 0 ); - yAxis.setFromMatrixColumn( this, 1 ); - zAxis.setFromMatrixColumn( this, 2 ); - - return this; - - } - - makeBasis( xAxis, yAxis, zAxis ) { - - this.set( - xAxis.x, yAxis.x, zAxis.x, 0, - xAxis.y, yAxis.y, zAxis.y, 0, - xAxis.z, yAxis.z, zAxis.z, 0, - 0, 0, 0, 1 - ); - - return this; - - } - - extractRotation( m ) { - - // this method does not support reflection matrices - - const te = this.elements; - const me = m.elements; - - const scaleX = 1 / _v1$5.setFromMatrixColumn( m, 0 ).length(); - const scaleY = 1 / _v1$5.setFromMatrixColumn( m, 1 ).length(); - const scaleZ = 1 / _v1$5.setFromMatrixColumn( m, 2 ).length(); - - te[ 0 ] = me[ 0 ] * scaleX; - te[ 1 ] = me[ 1 ] * scaleX; - te[ 2 ] = me[ 2 ] * scaleX; - te[ 3 ] = 0; - - te[ 4 ] = me[ 4 ] * scaleY; - te[ 5 ] = me[ 5 ] * scaleY; - te[ 6 ] = me[ 6 ] * scaleY; - te[ 7 ] = 0; - - te[ 8 ] = me[ 8 ] * scaleZ; - te[ 9 ] = me[ 9 ] * scaleZ; - te[ 10 ] = me[ 10 ] * scaleZ; - te[ 11 ] = 0; - - te[ 12 ] = 0; - te[ 13 ] = 0; - te[ 14 ] = 0; - te[ 15 ] = 1; - - return this; - - } - - makeRotationFromEuler( euler ) { - - const te = this.elements; - - const x = euler.x, y = euler.y, z = euler.z; - const a = Math.cos( x ), b = Math.sin( x ); - const c = Math.cos( y ), d = Math.sin( y ); - const e = Math.cos( z ), f = Math.sin( z ); - - if ( euler.order === 'XYZ' ) { - - const ae = a * e, af = a * f, be = b * e, bf = b * f; - - te[ 0 ] = c * e; - te[ 4 ] = - c * f; - te[ 8 ] = d; - - te[ 1 ] = af + be * d; - te[ 5 ] = ae - bf * d; - te[ 9 ] = - b * c; - - te[ 2 ] = bf - ae * d; - te[ 6 ] = be + af * d; - te[ 10 ] = a * c; - - } else if ( euler.order === 'YXZ' ) { - - const ce = c * e, cf = c * f, de = d * e, df = d * f; - - te[ 0 ] = ce + df * b; - te[ 4 ] = de * b - cf; - te[ 8 ] = a * d; - - te[ 1 ] = a * f; - te[ 5 ] = a * e; - te[ 9 ] = - b; - - te[ 2 ] = cf * b - de; - te[ 6 ] = df + ce * b; - te[ 10 ] = a * c; - - } else if ( euler.order === 'ZXY' ) { - - const ce = c * e, cf = c * f, de = d * e, df = d * f; - - te[ 0 ] = ce - df * b; - te[ 4 ] = - a * f; - te[ 8 ] = de + cf * b; - - te[ 1 ] = cf + de * b; - te[ 5 ] = a * e; - te[ 9 ] = df - ce * b; - - te[ 2 ] = - a * d; - te[ 6 ] = b; - te[ 10 ] = a * c; - - } else if ( euler.order === 'ZYX' ) { - - const ae = a * e, af = a * f, be = b * e, bf = b * f; - - te[ 0 ] = c * e; - te[ 4 ] = be * d - af; - te[ 8 ] = ae * d + bf; - - te[ 1 ] = c * f; - te[ 5 ] = bf * d + ae; - te[ 9 ] = af * d - be; - - te[ 2 ] = - d; - te[ 6 ] = b * c; - te[ 10 ] = a * c; - - } else if ( euler.order === 'YZX' ) { - - const ac = a * c, ad = a * d, bc = b * c, bd = b * d; - - te[ 0 ] = c * e; - te[ 4 ] = bd - ac * f; - te[ 8 ] = bc * f + ad; - - te[ 1 ] = f; - te[ 5 ] = a * e; - te[ 9 ] = - b * e; - - te[ 2 ] = - d * e; - te[ 6 ] = ad * f + bc; - te[ 10 ] = ac - bd * f; - - } else if ( euler.order === 'XZY' ) { - - const ac = a * c, ad = a * d, bc = b * c, bd = b * d; - - te[ 0 ] = c * e; - te[ 4 ] = - f; - te[ 8 ] = d * e; - - te[ 1 ] = ac * f + bd; - te[ 5 ] = a * e; - te[ 9 ] = ad * f - bc; - - te[ 2 ] = bc * f - ad; - te[ 6 ] = b * e; - te[ 10 ] = bd * f + ac; - - } - - // bottom row - te[ 3 ] = 0; - te[ 7 ] = 0; - te[ 11 ] = 0; - - // last column - te[ 12 ] = 0; - te[ 13 ] = 0; - te[ 14 ] = 0; - te[ 15 ] = 1; - - return this; - - } - - makeRotationFromQuaternion( q ) { - - return this.compose( _zero, q, _one ); - - } - - lookAt( eye, target, up ) { - - const te = this.elements; - - _z.subVectors( eye, target ); - - if ( _z.lengthSq() === 0 ) { - - // eye and target are in the same position - - _z.z = 1; - - } - - _z.normalize(); - _x.crossVectors( up, _z ); - - if ( _x.lengthSq() === 0 ) { - - // up and z are parallel - - if ( Math.abs( up.z ) === 1 ) { - - _z.x += 0.0001; - - } else { - - _z.z += 0.0001; - - } - - _z.normalize(); - _x.crossVectors( up, _z ); - - } - - _x.normalize(); - _y.crossVectors( _z, _x ); - - te[ 0 ] = _x.x; te[ 4 ] = _y.x; te[ 8 ] = _z.x; - te[ 1 ] = _x.y; te[ 5 ] = _y.y; te[ 9 ] = _z.y; - te[ 2 ] = _x.z; te[ 6 ] = _y.z; te[ 10 ] = _z.z; - - return this; - - } - - multiply( m ) { - - return this.multiplyMatrices( this, m ); - - } - - premultiply( m ) { - - return this.multiplyMatrices( m, this ); - - } - - multiplyMatrices( a, b ) { - - const ae = a.elements; - const be = b.elements; - const te = this.elements; - - const a11 = ae[ 0 ], a12 = ae[ 4 ], a13 = ae[ 8 ], a14 = ae[ 12 ]; - const a21 = ae[ 1 ], a22 = ae[ 5 ], a23 = ae[ 9 ], a24 = ae[ 13 ]; - const a31 = ae[ 2 ], a32 = ae[ 6 ], a33 = ae[ 10 ], a34 = ae[ 14 ]; - const a41 = ae[ 3 ], a42 = ae[ 7 ], a43 = ae[ 11 ], a44 = ae[ 15 ]; - - const b11 = be[ 0 ], b12 = be[ 4 ], b13 = be[ 8 ], b14 = be[ 12 ]; - const b21 = be[ 1 ], b22 = be[ 5 ], b23 = be[ 9 ], b24 = be[ 13 ]; - const b31 = be[ 2 ], b32 = be[ 6 ], b33 = be[ 10 ], b34 = be[ 14 ]; - const b41 = be[ 3 ], b42 = be[ 7 ], b43 = be[ 11 ], b44 = be[ 15 ]; - - te[ 0 ] = a11 * b11 + a12 * b21 + a13 * b31 + a14 * b41; - te[ 4 ] = a11 * b12 + a12 * b22 + a13 * b32 + a14 * b42; - te[ 8 ] = a11 * b13 + a12 * b23 + a13 * b33 + a14 * b43; - te[ 12 ] = a11 * b14 + a12 * b24 + a13 * b34 + a14 * b44; - - te[ 1 ] = a21 * b11 + a22 * b21 + a23 * b31 + a24 * b41; - te[ 5 ] = a21 * b12 + a22 * b22 + a23 * b32 + a24 * b42; - te[ 9 ] = a21 * b13 + a22 * b23 + a23 * b33 + a24 * b43; - te[ 13 ] = a21 * b14 + a22 * b24 + a23 * b34 + a24 * b44; - - te[ 2 ] = a31 * b11 + a32 * b21 + a33 * b31 + a34 * b41; - te[ 6 ] = a31 * b12 + a32 * b22 + a33 * b32 + a34 * b42; - te[ 10 ] = a31 * b13 + a32 * b23 + a33 * b33 + a34 * b43; - te[ 14 ] = a31 * b14 + a32 * b24 + a33 * b34 + a34 * b44; - - te[ 3 ] = a41 * b11 + a42 * b21 + a43 * b31 + a44 * b41; - te[ 7 ] = a41 * b12 + a42 * b22 + a43 * b32 + a44 * b42; - te[ 11 ] = a41 * b13 + a42 * b23 + a43 * b33 + a44 * b43; - te[ 15 ] = a41 * b14 + a42 * b24 + a43 * b34 + a44 * b44; - - return this; - - } - - multiplyScalar( s ) { - - const te = this.elements; - - te[ 0 ] *= s; te[ 4 ] *= s; te[ 8 ] *= s; te[ 12 ] *= s; - te[ 1 ] *= s; te[ 5 ] *= s; te[ 9 ] *= s; te[ 13 ] *= s; - te[ 2 ] *= s; te[ 6 ] *= s; te[ 10 ] *= s; te[ 14 ] *= s; - te[ 3 ] *= s; te[ 7 ] *= s; te[ 11 ] *= s; te[ 15 ] *= s; - - return this; - - } - - determinant() { - - const te = this.elements; - - const n11 = te[ 0 ], n12 = te[ 4 ], n13 = te[ 8 ], n14 = te[ 12 ]; - const n21 = te[ 1 ], n22 = te[ 5 ], n23 = te[ 9 ], n24 = te[ 13 ]; - const n31 = te[ 2 ], n32 = te[ 6 ], n33 = te[ 10 ], n34 = te[ 14 ]; - const n41 = te[ 3 ], n42 = te[ 7 ], n43 = te[ 11 ], n44 = te[ 15 ]; - - //TODO: make this more efficient - //( based on http://www.euclideanspace.com/maths/algebra/matrix/functions/inverse/fourD/index.htm ) - - return ( - n41 * ( - + n14 * n23 * n32 - - n13 * n24 * n32 - - n14 * n22 * n33 - + n12 * n24 * n33 - + n13 * n22 * n34 - - n12 * n23 * n34 - ) + - n42 * ( - + n11 * n23 * n34 - - n11 * n24 * n33 - + n14 * n21 * n33 - - n13 * n21 * n34 - + n13 * n24 * n31 - - n14 * n23 * n31 - ) + - n43 * ( - + n11 * n24 * n32 - - n11 * n22 * n34 - - n14 * n21 * n32 - + n12 * n21 * n34 - + n14 * n22 * n31 - - n12 * n24 * n31 - ) + - n44 * ( - - n13 * n22 * n31 - - n11 * n23 * n32 - + n11 * n22 * n33 - + n13 * n21 * n32 - - n12 * n21 * n33 - + n12 * n23 * n31 - ) - - ); - - } - - transpose() { - - const te = this.elements; - let tmp; - - tmp = te[ 1 ]; te[ 1 ] = te[ 4 ]; te[ 4 ] = tmp; - tmp = te[ 2 ]; te[ 2 ] = te[ 8 ]; te[ 8 ] = tmp; - tmp = te[ 6 ]; te[ 6 ] = te[ 9 ]; te[ 9 ] = tmp; - - tmp = te[ 3 ]; te[ 3 ] = te[ 12 ]; te[ 12 ] = tmp; - tmp = te[ 7 ]; te[ 7 ] = te[ 13 ]; te[ 13 ] = tmp; - tmp = te[ 11 ]; te[ 11 ] = te[ 14 ]; te[ 14 ] = tmp; - - return this; - - } - - setPosition( x, y, z ) { - - const te = this.elements; - - if ( x.isVector3 ) { - - te[ 12 ] = x.x; - te[ 13 ] = x.y; - te[ 14 ] = x.z; - - } else { - - te[ 12 ] = x; - te[ 13 ] = y; - te[ 14 ] = z; - - } - - return this; - - } - - invert() { - - // based on http://www.euclideanspace.com/maths/algebra/matrix/functions/inverse/fourD/index.htm - const te = this.elements, - - n11 = te[ 0 ], n21 = te[ 1 ], n31 = te[ 2 ], n41 = te[ 3 ], - n12 = te[ 4 ], n22 = te[ 5 ], n32 = te[ 6 ], n42 = te[ 7 ], - n13 = te[ 8 ], n23 = te[ 9 ], n33 = te[ 10 ], n43 = te[ 11 ], - n14 = te[ 12 ], n24 = te[ 13 ], n34 = te[ 14 ], n44 = te[ 15 ], - - t11 = n23 * n34 * n42 - n24 * n33 * n42 + n24 * n32 * n43 - n22 * n34 * n43 - n23 * n32 * n44 + n22 * n33 * n44, - t12 = n14 * n33 * n42 - n13 * n34 * n42 - n14 * n32 * n43 + n12 * n34 * n43 + n13 * n32 * n44 - n12 * n33 * n44, - t13 = n13 * n24 * n42 - n14 * n23 * n42 + n14 * n22 * n43 - n12 * n24 * n43 - n13 * n22 * n44 + n12 * n23 * n44, - t14 = n14 * n23 * n32 - n13 * n24 * n32 - n14 * n22 * n33 + n12 * n24 * n33 + n13 * n22 * n34 - n12 * n23 * n34; - - const det = n11 * t11 + n21 * t12 + n31 * t13 + n41 * t14; - - if ( det === 0 ) return this.set( 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 ); - - const detInv = 1 / det; - - te[ 0 ] = t11 * detInv; - te[ 1 ] = ( n24 * n33 * n41 - n23 * n34 * n41 - n24 * n31 * n43 + n21 * n34 * n43 + n23 * n31 * n44 - n21 * n33 * n44 ) * detInv; - te[ 2 ] = ( n22 * n34 * n41 - n24 * n32 * n41 + n24 * n31 * n42 - n21 * n34 * n42 - n22 * n31 * n44 + n21 * n32 * n44 ) * detInv; - te[ 3 ] = ( n23 * n32 * n41 - n22 * n33 * n41 - n23 * n31 * n42 + n21 * n33 * n42 + n22 * n31 * n43 - n21 * n32 * n43 ) * detInv; - - te[ 4 ] = t12 * detInv; - te[ 5 ] = ( n13 * n34 * n41 - n14 * n33 * n41 + n14 * n31 * n43 - n11 * n34 * n43 - n13 * n31 * n44 + n11 * n33 * n44 ) * detInv; - te[ 6 ] = ( n14 * n32 * n41 - n12 * n34 * n41 - n14 * n31 * n42 + n11 * n34 * n42 + n12 * n31 * n44 - n11 * n32 * n44 ) * detInv; - te[ 7 ] = ( n12 * n33 * n41 - n13 * n32 * n41 + n13 * n31 * n42 - n11 * n33 * n42 - n12 * n31 * n43 + n11 * n32 * n43 ) * detInv; - - te[ 8 ] = t13 * detInv; - te[ 9 ] = ( n14 * n23 * n41 - n13 * n24 * n41 - n14 * n21 * n43 + n11 * n24 * n43 + n13 * n21 * n44 - n11 * n23 * n44 ) * detInv; - te[ 10 ] = ( n12 * n24 * n41 - n14 * n22 * n41 + n14 * n21 * n42 - n11 * n24 * n42 - n12 * n21 * n44 + n11 * n22 * n44 ) * detInv; - te[ 11 ] = ( n13 * n22 * n41 - n12 * n23 * n41 - n13 * n21 * n42 + n11 * n23 * n42 + n12 * n21 * n43 - n11 * n22 * n43 ) * detInv; - - te[ 12 ] = t14 * detInv; - te[ 13 ] = ( n13 * n24 * n31 - n14 * n23 * n31 + n14 * n21 * n33 - n11 * n24 * n33 - n13 * n21 * n34 + n11 * n23 * n34 ) * detInv; - te[ 14 ] = ( n14 * n22 * n31 - n12 * n24 * n31 - n14 * n21 * n32 + n11 * n24 * n32 + n12 * n21 * n34 - n11 * n22 * n34 ) * detInv; - te[ 15 ] = ( n12 * n23 * n31 - n13 * n22 * n31 + n13 * n21 * n32 - n11 * n23 * n32 - n12 * n21 * n33 + n11 * n22 * n33 ) * detInv; - - return this; - - } - - scale( v ) { - - const te = this.elements; - const x = v.x, y = v.y, z = v.z; - - te[ 0 ] *= x; te[ 4 ] *= y; te[ 8 ] *= z; - te[ 1 ] *= x; te[ 5 ] *= y; te[ 9 ] *= z; - te[ 2 ] *= x; te[ 6 ] *= y; te[ 10 ] *= z; - te[ 3 ] *= x; te[ 7 ] *= y; te[ 11 ] *= z; - - return this; - - } - - getMaxScaleOnAxis() { - - const te = this.elements; - - const scaleXSq = te[ 0 ] * te[ 0 ] + te[ 1 ] * te[ 1 ] + te[ 2 ] * te[ 2 ]; - const scaleYSq = te[ 4 ] * te[ 4 ] + te[ 5 ] * te[ 5 ] + te[ 6 ] * te[ 6 ]; - const scaleZSq = te[ 8 ] * te[ 8 ] + te[ 9 ] * te[ 9 ] + te[ 10 ] * te[ 10 ]; - - return Math.sqrt( Math.max( scaleXSq, scaleYSq, scaleZSq ) ); - - } - - makeTranslation( x, y, z ) { - - this.set( - - 1, 0, 0, x, - 0, 1, 0, y, - 0, 0, 1, z, - 0, 0, 0, 1 - - ); - - return this; - - } - - makeRotationX( theta ) { - - const c = Math.cos( theta ), s = Math.sin( theta ); - - this.set( - - 1, 0, 0, 0, - 0, c, - s, 0, - 0, s, c, 0, - 0, 0, 0, 1 - - ); - - return this; - - } - - makeRotationY( theta ) { - - const c = Math.cos( theta ), s = Math.sin( theta ); - - this.set( - - c, 0, s, 0, - 0, 1, 0, 0, - - s, 0, c, 0, - 0, 0, 0, 1 - - ); - - return this; - - } - - makeRotationZ( theta ) { - - const c = Math.cos( theta ), s = Math.sin( theta ); - - this.set( - - c, - s, 0, 0, - s, c, 0, 0, - 0, 0, 1, 0, - 0, 0, 0, 1 - - ); - - return this; - - } - - makeRotationAxis( axis, angle ) { - - // Based on http://www.gamedev.net/reference/articles/article1199.asp - - const c = Math.cos( angle ); - const s = Math.sin( angle ); - const t = 1 - c; - const x = axis.x, y = axis.y, z = axis.z; - const tx = t * x, ty = t * y; - - this.set( - - tx * x + c, tx * y - s * z, tx * z + s * y, 0, - tx * y + s * z, ty * y + c, ty * z - s * x, 0, - tx * z - s * y, ty * z + s * x, t * z * z + c, 0, - 0, 0, 0, 1 - - ); - - return this; - - } - - makeScale( x, y, z ) { - - this.set( - - x, 0, 0, 0, - 0, y, 0, 0, - 0, 0, z, 0, - 0, 0, 0, 1 - - ); - - return this; - - } - - makeShear( xy, xz, yx, yz, zx, zy ) { - - this.set( - - 1, yx, zx, 0, - xy, 1, zy, 0, - xz, yz, 1, 0, - 0, 0, 0, 1 - - ); - - return this; - - } - - compose( position, quaternion, scale ) { - - const te = this.elements; - - const x = quaternion._x, y = quaternion._y, z = quaternion._z, w = quaternion._w; - const x2 = x + x, y2 = y + y, z2 = z + z; - const xx = x * x2, xy = x * y2, xz = x * z2; - const yy = y * y2, yz = y * z2, zz = z * z2; - const wx = w * x2, wy = w * y2, wz = w * z2; - - const sx = scale.x, sy = scale.y, sz = scale.z; - - te[ 0 ] = ( 1 - ( yy + zz ) ) * sx; - te[ 1 ] = ( xy + wz ) * sx; - te[ 2 ] = ( xz - wy ) * sx; - te[ 3 ] = 0; - - te[ 4 ] = ( xy - wz ) * sy; - te[ 5 ] = ( 1 - ( xx + zz ) ) * sy; - te[ 6 ] = ( yz + wx ) * sy; - te[ 7 ] = 0; - - te[ 8 ] = ( xz + wy ) * sz; - te[ 9 ] = ( yz - wx ) * sz; - te[ 10 ] = ( 1 - ( xx + yy ) ) * sz; - te[ 11 ] = 0; - - te[ 12 ] = position.x; - te[ 13 ] = position.y; - te[ 14 ] = position.z; - te[ 15 ] = 1; - - return this; - - } - - decompose( position, quaternion, scale ) { - - const te = this.elements; - - let sx = _v1$5.set( te[ 0 ], te[ 1 ], te[ 2 ] ).length(); - const sy = _v1$5.set( te[ 4 ], te[ 5 ], te[ 6 ] ).length(); - const sz = _v1$5.set( te[ 8 ], te[ 9 ], te[ 10 ] ).length(); - - // if determine is negative, we need to invert one scale - const det = this.determinant(); - if ( det < 0 ) sx = - sx; - - position.x = te[ 12 ]; - position.y = te[ 13 ]; - position.z = te[ 14 ]; - - // scale the rotation part - _m1$2.copy( this ); - - const invSX = 1 / sx; - const invSY = 1 / sy; - const invSZ = 1 / sz; - - _m1$2.elements[ 0 ] *= invSX; - _m1$2.elements[ 1 ] *= invSX; - _m1$2.elements[ 2 ] *= invSX; - - _m1$2.elements[ 4 ] *= invSY; - _m1$2.elements[ 5 ] *= invSY; - _m1$2.elements[ 6 ] *= invSY; - - _m1$2.elements[ 8 ] *= invSZ; - _m1$2.elements[ 9 ] *= invSZ; - _m1$2.elements[ 10 ] *= invSZ; - - quaternion.setFromRotationMatrix( _m1$2 ); - - scale.x = sx; - scale.y = sy; - scale.z = sz; - - return this; - - } - - makePerspective( left, right, top, bottom, near, far ) { - - const te = this.elements; - const x = 2 * near / ( right - left ); - const y = 2 * near / ( top - bottom ); - - const a = ( right + left ) / ( right - left ); - const b = ( top + bottom ) / ( top - bottom ); - const c = - ( far + near ) / ( far - near ); - const d = - 2 * far * near / ( far - near ); - - te[ 0 ] = x; te[ 4 ] = 0; te[ 8 ] = a; te[ 12 ] = 0; - te[ 1 ] = 0; te[ 5 ] = y; te[ 9 ] = b; te[ 13 ] = 0; - te[ 2 ] = 0; te[ 6 ] = 0; te[ 10 ] = c; te[ 14 ] = d; - te[ 3 ] = 0; te[ 7 ] = 0; te[ 11 ] = - 1; te[ 15 ] = 0; - - return this; - - } - - makeOrthographic( left, right, top, bottom, near, far ) { - - const te = this.elements; - const w = 1.0 / ( right - left ); - const h = 1.0 / ( top - bottom ); - const p = 1.0 / ( far - near ); - - const x = ( right + left ) * w; - const y = ( top + bottom ) * h; - const z = ( far + near ) * p; - - te[ 0 ] = 2 * w; te[ 4 ] = 0; te[ 8 ] = 0; te[ 12 ] = - x; - te[ 1 ] = 0; te[ 5 ] = 2 * h; te[ 9 ] = 0; te[ 13 ] = - y; - te[ 2 ] = 0; te[ 6 ] = 0; te[ 10 ] = - 2 * p; te[ 14 ] = - z; - te[ 3 ] = 0; te[ 7 ] = 0; te[ 11 ] = 0; te[ 15 ] = 1; - - return this; - - } - - equals( matrix ) { - - const te = this.elements; - const me = matrix.elements; - - for ( let i = 0; i < 16; i ++ ) { - - if ( te[ i ] !== me[ i ] ) return false; - - } - - return true; - - } - - fromArray( array, offset = 0 ) { - - for ( let i = 0; i < 16; i ++ ) { - - this.elements[ i ] = array[ i + offset ]; - - } - - return this; - - } - - toArray( array = [], offset = 0 ) { - - const te = this.elements; - - array[ offset ] = te[ 0 ]; - array[ offset + 1 ] = te[ 1 ]; - array[ offset + 2 ] = te[ 2 ]; - array[ offset + 3 ] = te[ 3 ]; - - array[ offset + 4 ] = te[ 4 ]; - array[ offset + 5 ] = te[ 5 ]; - array[ offset + 6 ] = te[ 6 ]; - array[ offset + 7 ] = te[ 7 ]; - - array[ offset + 8 ] = te[ 8 ]; - array[ offset + 9 ] = te[ 9 ]; - array[ offset + 10 ] = te[ 10 ]; - array[ offset + 11 ] = te[ 11 ]; - - array[ offset + 12 ] = te[ 12 ]; - array[ offset + 13 ] = te[ 13 ]; - array[ offset + 14 ] = te[ 14 ]; - array[ offset + 15 ] = te[ 15 ]; - - return array; - - } - - } - - const _v1$5 = /*@__PURE__*/ new Vector3(); - const _m1$2 = /*@__PURE__*/ new Matrix4(); - const _zero = /*@__PURE__*/ new Vector3( 0, 0, 0 ); - const _one = /*@__PURE__*/ new Vector3( 1, 1, 1 ); - const _x = /*@__PURE__*/ new Vector3(); - const _y = /*@__PURE__*/ new Vector3(); - const _z = /*@__PURE__*/ new Vector3(); - - const _matrix$1 = /*@__PURE__*/ new Matrix4(); - const _quaternion$3 = /*@__PURE__*/ new Quaternion(); - - class Euler { - - constructor( x = 0, y = 0, z = 0, order = Euler.DEFAULT_ORDER ) { - - this.isEuler = true; - - this._x = x; - this._y = y; - this._z = z; - this._order = order; - - } - - get x() { - - return this._x; - - } - - set x( value ) { - - this._x = value; - this._onChangeCallback(); - - } - - get y() { - - return this._y; - - } - - set y( value ) { - - this._y = value; - this._onChangeCallback(); - - } - - get z() { - - return this._z; - - } - - set z( value ) { - - this._z = value; - this._onChangeCallback(); - - } - - get order() { - - return this._order; - - } - - set order( value ) { - - this._order = value; - this._onChangeCallback(); - - } - - set( x, y, z, order = this._order ) { - - this._x = x; - this._y = y; - this._z = z; - this._order = order; - - this._onChangeCallback(); - - return this; - - } - - clone() { - - return new this.constructor( this._x, this._y, this._z, this._order ); - - } - - copy( euler ) { - - this._x = euler._x; - this._y = euler._y; - this._z = euler._z; - this._order = euler._order; - - this._onChangeCallback(); - - return this; - - } - - setFromRotationMatrix( m, order = this._order, update = true ) { - - // assumes the upper 3x3 of m is a pure rotation matrix (i.e, unscaled) - - const te = m.elements; - const m11 = te[ 0 ], m12 = te[ 4 ], m13 = te[ 8 ]; - const m21 = te[ 1 ], m22 = te[ 5 ], m23 = te[ 9 ]; - const m31 = te[ 2 ], m32 = te[ 6 ], m33 = te[ 10 ]; - - switch ( order ) { - - case 'XYZ': - - this._y = Math.asin( clamp( m13, - 1, 1 ) ); - - if ( Math.abs( m13 ) < 0.9999999 ) { - - this._x = Math.atan2( - m23, m33 ); - this._z = Math.atan2( - m12, m11 ); - - } else { - - this._x = Math.atan2( m32, m22 ); - this._z = 0; - - } - - break; - - case 'YXZ': - - this._x = Math.asin( - clamp( m23, - 1, 1 ) ); - - if ( Math.abs( m23 ) < 0.9999999 ) { - - this._y = Math.atan2( m13, m33 ); - this._z = Math.atan2( m21, m22 ); - - } else { - - this._y = Math.atan2( - m31, m11 ); - this._z = 0; - - } - - break; - - case 'ZXY': - - this._x = Math.asin( clamp( m32, - 1, 1 ) ); - - if ( Math.abs( m32 ) < 0.9999999 ) { - - this._y = Math.atan2( - m31, m33 ); - this._z = Math.atan2( - m12, m22 ); - - } else { - - this._y = 0; - this._z = Math.atan2( m21, m11 ); - - } - - break; - - case 'ZYX': - - this._y = Math.asin( - clamp( m31, - 1, 1 ) ); - - if ( Math.abs( m31 ) < 0.9999999 ) { - - this._x = Math.atan2( m32, m33 ); - this._z = Math.atan2( m21, m11 ); - - } else { - - this._x = 0; - this._z = Math.atan2( - m12, m22 ); - - } - - break; - - case 'YZX': - - this._z = Math.asin( clamp( m21, - 1, 1 ) ); - - if ( Math.abs( m21 ) < 0.9999999 ) { - - this._x = Math.atan2( - m23, m22 ); - this._y = Math.atan2( - m31, m11 ); - - } else { - - this._x = 0; - this._y = Math.atan2( m13, m33 ); - - } - - break; - - case 'XZY': - - this._z = Math.asin( - clamp( m12, - 1, 1 ) ); - - if ( Math.abs( m12 ) < 0.9999999 ) { - - this._x = Math.atan2( m32, m22 ); - this._y = Math.atan2( m13, m11 ); - - } else { - - this._x = Math.atan2( - m23, m33 ); - this._y = 0; - - } - - break; - - default: - - console.warn( 'THREE.Euler: .setFromRotationMatrix() encountered an unknown order: ' + order ); - - } - - this._order = order; - - if ( update === true ) this._onChangeCallback(); - - return this; - - } - - setFromQuaternion( q, order, update ) { - - _matrix$1.makeRotationFromQuaternion( q ); - - return this.setFromRotationMatrix( _matrix$1, order, update ); - - } - - setFromVector3( v, order = this._order ) { - - return this.set( v.x, v.y, v.z, order ); - - } - - reorder( newOrder ) { - - // WARNING: this discards revolution information -bhouston - - _quaternion$3.setFromEuler( this ); - - return this.setFromQuaternion( _quaternion$3, newOrder ); - - } - - equals( euler ) { - - return ( euler._x === this._x ) && ( euler._y === this._y ) && ( euler._z === this._z ) && ( euler._order === this._order ); - - } - - fromArray( array ) { - - this._x = array[ 0 ]; - this._y = array[ 1 ]; - this._z = array[ 2 ]; - if ( array[ 3 ] !== undefined ) this._order = array[ 3 ]; - - this._onChangeCallback(); - - return this; - - } - - toArray( array = [], offset = 0 ) { - - array[ offset ] = this._x; - array[ offset + 1 ] = this._y; - array[ offset + 2 ] = this._z; - array[ offset + 3 ] = this._order; - - return array; - - } - - _onChange( callback ) { - - this._onChangeCallback = callback; - - return this; - - } - - _onChangeCallback() {} - - *[ Symbol.iterator ]() { - - yield this._x; - yield this._y; - yield this._z; - yield this._order; - - } - - } - - Euler.DEFAULT_ORDER = 'XYZ'; - - class Layers { - - constructor() { - - this.mask = 1 | 0; - - } - - set( channel ) { - - this.mask = ( 1 << channel | 0 ) >>> 0; - - } - - enable( channel ) { - - this.mask |= 1 << channel | 0; - - } - - enableAll() { - - this.mask = 0xffffffff | 0; - - } - - toggle( channel ) { - - this.mask ^= 1 << channel | 0; - - } - - disable( channel ) { - - this.mask &= ~ ( 1 << channel | 0 ); - - } - - disableAll() { - - this.mask = 0; - - } - - test( layers ) { - - return ( this.mask & layers.mask ) !== 0; - - } - - isEnabled( channel ) { - - return ( this.mask & ( 1 << channel | 0 ) ) !== 0; - - } - - } - - let _object3DId = 0; - - const _v1$4 = /*@__PURE__*/ new Vector3(); - const _q1 = /*@__PURE__*/ new Quaternion(); - const _m1$1 = /*@__PURE__*/ new Matrix4(); - const _target = /*@__PURE__*/ new Vector3(); - - const _position$3 = /*@__PURE__*/ new Vector3(); - const _scale$2 = /*@__PURE__*/ new Vector3(); - const _quaternion$2 = /*@__PURE__*/ new Quaternion(); - - const _xAxis = /*@__PURE__*/ new Vector3( 1, 0, 0 ); - const _yAxis = /*@__PURE__*/ new Vector3( 0, 1, 0 ); - const _zAxis = /*@__PURE__*/ new Vector3( 0, 0, 1 ); - - const _addedEvent = { type: 'added' }; - const _removedEvent = { type: 'removed' }; - - class Object3D extends EventDispatcher { - - constructor() { - - super(); - - this.isObject3D = true; - - Object.defineProperty( this, 'id', { value: _object3DId ++ } ); - - this.uuid = generateUUID(); - - this.name = ''; - this.type = 'Object3D'; - - this.parent = null; - this.children = []; - - this.up = Object3D.DEFAULT_UP.clone(); - - const position = new Vector3(); - const rotation = new Euler(); - const quaternion = new Quaternion(); - const scale = new Vector3( 1, 1, 1 ); - - function onRotationChange() { - - quaternion.setFromEuler( rotation, false ); - - } - - function onQuaternionChange() { - - rotation.setFromQuaternion( quaternion, undefined, false ); - - } - - rotation._onChange( onRotationChange ); - quaternion._onChange( onQuaternionChange ); - - Object.defineProperties( this, { - position: { - configurable: true, - enumerable: true, - value: position - }, - rotation: { - configurable: true, - enumerable: true, - value: rotation - }, - quaternion: { - configurable: true, - enumerable: true, - value: quaternion - }, - scale: { - configurable: true, - enumerable: true, - value: scale - }, - modelViewMatrix: { - value: new Matrix4() - }, - normalMatrix: { - value: new Matrix3() - } - } ); - - this.matrix = new Matrix4(); - this.matrixWorld = new Matrix4(); - - this.matrixAutoUpdate = Object3D.DEFAULT_MATRIX_AUTO_UPDATE; - this.matrixWorldNeedsUpdate = false; - - this.matrixWorldAutoUpdate = Object3D.DEFAULT_MATRIX_WORLD_AUTO_UPDATE; // checked by the renderer - - this.layers = new Layers(); - this.visible = true; - - this.castShadow = false; - this.receiveShadow = false; - - this.frustumCulled = true; - this.renderOrder = 0; - - this.animations = []; - - this.userData = {}; - - } - - onBeforeRender( /* renderer, scene, camera, geometry, material, group */ ) {} - - onAfterRender( /* renderer, scene, camera, geometry, material, group */ ) {} - - applyMatrix4( matrix ) { - - if ( this.matrixAutoUpdate ) this.updateMatrix(); - - this.matrix.premultiply( matrix ); - - this.matrix.decompose( this.position, this.quaternion, this.scale ); - - } - - applyQuaternion( q ) { - - this.quaternion.premultiply( q ); - - return this; - - } - - setRotationFromAxisAngle( axis, angle ) { - - // assumes axis is normalized - - this.quaternion.setFromAxisAngle( axis, angle ); - - } - - setRotationFromEuler( euler ) { - - this.quaternion.setFromEuler( euler, true ); - - } - - setRotationFromMatrix( m ) { - - // assumes the upper 3x3 of m is a pure rotation matrix (i.e, unscaled) - - this.quaternion.setFromRotationMatrix( m ); - - } - - setRotationFromQuaternion( q ) { - - // assumes q is normalized - - this.quaternion.copy( q ); - - } - - rotateOnAxis( axis, angle ) { - - // rotate object on axis in object space - // axis is assumed to be normalized - - _q1.setFromAxisAngle( axis, angle ); - - this.quaternion.multiply( _q1 ); - - return this; - - } - - rotateOnWorldAxis( axis, angle ) { - - // rotate object on axis in world space - // axis is assumed to be normalized - // method assumes no rotated parent - - _q1.setFromAxisAngle( axis, angle ); - - this.quaternion.premultiply( _q1 ); - - return this; - - } - - rotateX( angle ) { - - return this.rotateOnAxis( _xAxis, angle ); - - } - - rotateY( angle ) { - - return this.rotateOnAxis( _yAxis, angle ); - - } - - rotateZ( angle ) { - - return this.rotateOnAxis( _zAxis, angle ); - - } - - translateOnAxis( axis, distance ) { - - // translate object by distance along axis in object space - // axis is assumed to be normalized - - _v1$4.copy( axis ).applyQuaternion( this.quaternion ); - - this.position.add( _v1$4.multiplyScalar( distance ) ); - - return this; - - } - - translateX( distance ) { - - return this.translateOnAxis( _xAxis, distance ); - - } - - translateY( distance ) { - - return this.translateOnAxis( _yAxis, distance ); - - } - - translateZ( distance ) { - - return this.translateOnAxis( _zAxis, distance ); - - } - - localToWorld( vector ) { - - this.updateWorldMatrix( true, false ); - - return vector.applyMatrix4( this.matrixWorld ); - - } - - worldToLocal( vector ) { - - this.updateWorldMatrix( true, false ); - - return vector.applyMatrix4( _m1$1.copy( this.matrixWorld ).invert() ); - - } - - lookAt( x, y, z ) { - - // This method does not support objects having non-uniformly-scaled parent(s) - - if ( x.isVector3 ) { - - _target.copy( x ); - - } else { - - _target.set( x, y, z ); - - } - - const parent = this.parent; - - this.updateWorldMatrix( true, false ); - - _position$3.setFromMatrixPosition( this.matrixWorld ); - - if ( this.isCamera || this.isLight ) { - - _m1$1.lookAt( _position$3, _target, this.up ); - - } else { - - _m1$1.lookAt( _target, _position$3, this.up ); - - } - - this.quaternion.setFromRotationMatrix( _m1$1 ); - - if ( parent ) { - - _m1$1.extractRotation( parent.matrixWorld ); - _q1.setFromRotationMatrix( _m1$1 ); - this.quaternion.premultiply( _q1.invert() ); - - } - - } - - add( object ) { - - if ( arguments.length > 1 ) { - - for ( let i = 0; i < arguments.length; i ++ ) { - - this.add( arguments[ i ] ); - - } - - return this; - - } - - if ( object === this ) { - - console.error( 'THREE.Object3D.add: object can\'t be added as a child of itself.', object ); - return this; - - } - - if ( object && object.isObject3D ) { - - if ( object.parent !== null ) { - - object.parent.remove( object ); - - } - - object.parent = this; - this.children.push( object ); - - object.dispatchEvent( _addedEvent ); - - } else { - - console.error( 'THREE.Object3D.add: object not an instance of THREE.Object3D.', object ); - - } - - return this; - - } - - remove( object ) { - - if ( arguments.length > 1 ) { - - for ( let i = 0; i < arguments.length; i ++ ) { - - this.remove( arguments[ i ] ); - - } - - return this; - - } - - const index = this.children.indexOf( object ); - - if ( index !== - 1 ) { - - object.parent = null; - this.children.splice( index, 1 ); - - object.dispatchEvent( _removedEvent ); - - } - - return this; - - } - - removeFromParent() { - - const parent = this.parent; - - if ( parent !== null ) { - - parent.remove( this ); - - } - - return this; - - } - - clear() { - - for ( let i = 0; i < this.children.length; i ++ ) { - - const object = this.children[ i ]; - - object.parent = null; - - object.dispatchEvent( _removedEvent ); - - } - - this.children.length = 0; - - return this; - - - } - - attach( object ) { - - // adds object as a child of this, while maintaining the object's world transform - - // Note: This method does not support scene graphs having non-uniformly-scaled nodes(s) - - this.updateWorldMatrix( true, false ); - - _m1$1.copy( this.matrixWorld ).invert(); - - if ( object.parent !== null ) { - - object.parent.updateWorldMatrix( true, false ); - - _m1$1.multiply( object.parent.matrixWorld ); - - } - - object.applyMatrix4( _m1$1 ); - - this.add( object ); - - object.updateWorldMatrix( false, true ); - - return this; - - } - - getObjectById( id ) { - - return this.getObjectByProperty( 'id', id ); - - } - - getObjectByName( name ) { - - return this.getObjectByProperty( 'name', name ); - - } - - getObjectByProperty( name, value ) { - - if ( this[ name ] === value ) return this; - - for ( let i = 0, l = this.children.length; i < l; i ++ ) { - - const child = this.children[ i ]; - const object = child.getObjectByProperty( name, value ); - - if ( object !== undefined ) { - - return object; - - } - - } - - return undefined; - - } - - getObjectsByProperty( name, value ) { - - let result = []; - - if ( this[ name ] === value ) result.push( this ); - - for ( let i = 0, l = this.children.length; i < l; i ++ ) { - - const childResult = this.children[ i ].getObjectsByProperty( name, value ); - - if ( childResult.length > 0 ) { - - result = result.concat( childResult ); - - } - - } - - return result; - - } - - getWorldPosition( target ) { - - this.updateWorldMatrix( true, false ); - - return target.setFromMatrixPosition( this.matrixWorld ); - - } - - getWorldQuaternion( target ) { - - this.updateWorldMatrix( true, false ); - - this.matrixWorld.decompose( _position$3, target, _scale$2 ); - - return target; - - } - - getWorldScale( target ) { - - this.updateWorldMatrix( true, false ); - - this.matrixWorld.decompose( _position$3, _quaternion$2, target ); - - return target; - - } - - getWorldDirection( target ) { - - this.updateWorldMatrix( true, false ); - - const e = this.matrixWorld.elements; - - return target.set( e[ 8 ], e[ 9 ], e[ 10 ] ).normalize(); - - } - - raycast( /* raycaster, intersects */ ) {} - - traverse( callback ) { - - callback( this ); - - const children = this.children; - - for ( let i = 0, l = children.length; i < l; i ++ ) { - - children[ i ].traverse( callback ); - - } - - } - - traverseVisible( callback ) { - - if ( this.visible === false ) return; - - callback( this ); - - const children = this.children; - - for ( let i = 0, l = children.length; i < l; i ++ ) { - - children[ i ].traverseVisible( callback ); - - } - - } - - traverseAncestors( callback ) { - - const parent = this.parent; - - if ( parent !== null ) { - - callback( parent ); - - parent.traverseAncestors( callback ); - - } - - } - - updateMatrix() { - - this.matrix.compose( this.position, this.quaternion, this.scale ); - - this.matrixWorldNeedsUpdate = true; - - } - - updateMatrixWorld( force ) { - - if ( this.matrixAutoUpdate ) this.updateMatrix(); - - if ( this.matrixWorldNeedsUpdate || force ) { - - if ( this.parent === null ) { - - this.matrixWorld.copy( this.matrix ); - - } else { - - this.matrixWorld.multiplyMatrices( this.parent.matrixWorld, this.matrix ); - - } - - this.matrixWorldNeedsUpdate = false; - - force = true; - - } - - // update children - - const children = this.children; - - for ( let i = 0, l = children.length; i < l; i ++ ) { - - const child = children[ i ]; - - if ( child.matrixWorldAutoUpdate === true || force === true ) { - - child.updateMatrixWorld( force ); - - } - - } - - } - - updateWorldMatrix( updateParents, updateChildren ) { - - const parent = this.parent; - - if ( updateParents === true && parent !== null && parent.matrixWorldAutoUpdate === true ) { - - parent.updateWorldMatrix( true, false ); - - } - - if ( this.matrixAutoUpdate ) this.updateMatrix(); - - if ( this.parent === null ) { - - this.matrixWorld.copy( this.matrix ); - - } else { - - this.matrixWorld.multiplyMatrices( this.parent.matrixWorld, this.matrix ); - - } - - // update children - - if ( updateChildren === true ) { - - const children = this.children; - - for ( let i = 0, l = children.length; i < l; i ++ ) { - - const child = children[ i ]; - - if ( child.matrixWorldAutoUpdate === true ) { - - child.updateWorldMatrix( false, true ); - - } - - } - - } - - } - - toJSON( meta ) { - - // meta is a string when called from JSON.stringify - const isRootObject = ( meta === undefined || typeof meta === 'string' ); - - const output = {}; - - // meta is a hash used to collect geometries, materials. - // not providing it implies that this is the root object - // being serialized. - if ( isRootObject ) { - - // initialize meta obj - meta = { - geometries: {}, - materials: {}, - textures: {}, - images: {}, - shapes: {}, - skeletons: {}, - animations: {}, - nodes: {} - }; - - output.metadata = { - version: 4.5, - type: 'Object', - generator: 'Object3D.toJSON' - }; - - } - - // standard Object3D serialization - - const object = {}; - - object.uuid = this.uuid; - object.type = this.type; - - if ( this.name !== '' ) object.name = this.name; - if ( this.castShadow === true ) object.castShadow = true; - if ( this.receiveShadow === true ) object.receiveShadow = true; - if ( this.visible === false ) object.visible = false; - if ( this.frustumCulled === false ) object.frustumCulled = false; - if ( this.renderOrder !== 0 ) object.renderOrder = this.renderOrder; - if ( Object.keys( this.userData ).length > 0 ) object.userData = this.userData; - - object.layers = this.layers.mask; - object.matrix = this.matrix.toArray(); - - if ( this.matrixAutoUpdate === false ) object.matrixAutoUpdate = false; - - // object specific properties - - if ( this.isInstancedMesh ) { - - object.type = 'InstancedMesh'; - object.count = this.count; - object.instanceMatrix = this.instanceMatrix.toJSON(); - if ( this.instanceColor !== null ) object.instanceColor = this.instanceColor.toJSON(); - - } - - // - - function serialize( library, element ) { - - if ( library[ element.uuid ] === undefined ) { - - library[ element.uuid ] = element.toJSON( meta ); - - } - - return element.uuid; - - } - - if ( this.isScene ) { - - if ( this.background ) { - - if ( this.background.isColor ) { - - object.background = this.background.toJSON(); - - } else if ( this.background.isTexture ) { - - object.background = this.background.toJSON( meta ).uuid; - - } - - } - - if ( this.environment && this.environment.isTexture && this.environment.isRenderTargetTexture !== true ) { - - object.environment = this.environment.toJSON( meta ).uuid; - - } - - } else if ( this.isMesh || this.isLine || this.isPoints ) { - - object.geometry = serialize( meta.geometries, this.geometry ); - - const parameters = this.geometry.parameters; - - if ( parameters !== undefined && parameters.shapes !== undefined ) { - - const shapes = parameters.shapes; - - if ( Array.isArray( shapes ) ) { - - for ( let i = 0, l = shapes.length; i < l; i ++ ) { - - const shape = shapes[ i ]; - - serialize( meta.shapes, shape ); - - } - - } else { - - serialize( meta.shapes, shapes ); - - } - - } - - } - - if ( this.isSkinnedMesh ) { - - object.bindMode = this.bindMode; - object.bindMatrix = this.bindMatrix.toArray(); - - if ( this.skeleton !== undefined ) { - - serialize( meta.skeletons, this.skeleton ); - - object.skeleton = this.skeleton.uuid; - - } - - } - - if ( this.material !== undefined ) { - - if ( Array.isArray( this.material ) ) { - - const uuids = []; - - for ( let i = 0, l = this.material.length; i < l; i ++ ) { - - uuids.push( serialize( meta.materials, this.material[ i ] ) ); - - } - - object.material = uuids; - - } else { - - object.material = serialize( meta.materials, this.material ); - - } - - } - - // - - if ( this.children.length > 0 ) { - - object.children = []; - - for ( let i = 0; i < this.children.length; i ++ ) { - - object.children.push( this.children[ i ].toJSON( meta ).object ); - - } - - } - - // - - if ( this.animations.length > 0 ) { - - object.animations = []; - - for ( let i = 0; i < this.animations.length; i ++ ) { - - const animation = this.animations[ i ]; - - object.animations.push( serialize( meta.animations, animation ) ); - - } - - } - - if ( isRootObject ) { - - const geometries = extractFromCache( meta.geometries ); - const materials = extractFromCache( meta.materials ); - const textures = extractFromCache( meta.textures ); - const images = extractFromCache( meta.images ); - const shapes = extractFromCache( meta.shapes ); - const skeletons = extractFromCache( meta.skeletons ); - const animations = extractFromCache( meta.animations ); - const nodes = extractFromCache( meta.nodes ); - - if ( geometries.length > 0 ) output.geometries = geometries; - if ( materials.length > 0 ) output.materials = materials; - if ( textures.length > 0 ) output.textures = textures; - if ( images.length > 0 ) output.images = images; - if ( shapes.length > 0 ) output.shapes = shapes; - if ( skeletons.length > 0 ) output.skeletons = skeletons; - if ( animations.length > 0 ) output.animations = animations; - if ( nodes.length > 0 ) output.nodes = nodes; - - } - - output.object = object; - - return output; - - // extract data from the cache hash - // remove metadata on each item - // and return as array - function extractFromCache( cache ) { - - const values = []; - for ( const key in cache ) { - - const data = cache[ key ]; - delete data.metadata; - values.push( data ); - - } - - return values; - - } - - } - - clone( recursive ) { - - return new this.constructor().copy( this, recursive ); - - } - - copy( source, recursive = true ) { - - this.name = source.name; - - this.up.copy( source.up ); - - this.position.copy( source.position ); - this.rotation.order = source.rotation.order; - this.quaternion.copy( source.quaternion ); - this.scale.copy( source.scale ); - - this.matrix.copy( source.matrix ); - this.matrixWorld.copy( source.matrixWorld ); - - this.matrixAutoUpdate = source.matrixAutoUpdate; - this.matrixWorldNeedsUpdate = source.matrixWorldNeedsUpdate; - - this.matrixWorldAutoUpdate = source.matrixWorldAutoUpdate; - - this.layers.mask = source.layers.mask; - this.visible = source.visible; - - this.castShadow = source.castShadow; - this.receiveShadow = source.receiveShadow; - - this.frustumCulled = source.frustumCulled; - this.renderOrder = source.renderOrder; - - this.userData = JSON.parse( JSON.stringify( source.userData ) ); - - if ( recursive === true ) { - - for ( let i = 0; i < source.children.length; i ++ ) { - - const child = source.children[ i ]; - this.add( child.clone() ); - - } - - } - - return this; - - } - - } - - Object3D.DEFAULT_UP = /*@__PURE__*/ new Vector3( 0, 1, 0 ); - Object3D.DEFAULT_MATRIX_AUTO_UPDATE = true; - Object3D.DEFAULT_MATRIX_WORLD_AUTO_UPDATE = true; - - const _v0$1 = /*@__PURE__*/ new Vector3(); - const _v1$3 = /*@__PURE__*/ new Vector3(); - const _v2$2 = /*@__PURE__*/ new Vector3(); - const _v3$1 = /*@__PURE__*/ new Vector3(); - - const _vab = /*@__PURE__*/ new Vector3(); - const _vac = /*@__PURE__*/ new Vector3(); - const _vbc = /*@__PURE__*/ new Vector3(); - const _vap = /*@__PURE__*/ new Vector3(); - const _vbp = /*@__PURE__*/ new Vector3(); - const _vcp = /*@__PURE__*/ new Vector3(); - - class Triangle { - - constructor( a = new Vector3(), b = new Vector3(), c = new Vector3() ) { - - this.a = a; - this.b = b; - this.c = c; - - } - - static getNormal( a, b, c, target ) { - - target.subVectors( c, b ); - _v0$1.subVectors( a, b ); - target.cross( _v0$1 ); - - const targetLengthSq = target.lengthSq(); - if ( targetLengthSq > 0 ) { - - return target.multiplyScalar( 1 / Math.sqrt( targetLengthSq ) ); - - } - - return target.set( 0, 0, 0 ); - - } - - // static/instance method to calculate barycentric coordinates - // based on: http://www.blackpawn.com/texts/pointinpoly/default.html - static getBarycoord( point, a, b, c, target ) { - - _v0$1.subVectors( c, a ); - _v1$3.subVectors( b, a ); - _v2$2.subVectors( point, a ); - - const dot00 = _v0$1.dot( _v0$1 ); - const dot01 = _v0$1.dot( _v1$3 ); - const dot02 = _v0$1.dot( _v2$2 ); - const dot11 = _v1$3.dot( _v1$3 ); - const dot12 = _v1$3.dot( _v2$2 ); - - const denom = ( dot00 * dot11 - dot01 * dot01 ); - - // collinear or singular triangle - if ( denom === 0 ) { - - // arbitrary location outside of triangle? - // not sure if this is the best idea, maybe should be returning undefined - return target.set( - 2, - 1, - 1 ); - - } - - const invDenom = 1 / denom; - const u = ( dot11 * dot02 - dot01 * dot12 ) * invDenom; - const v = ( dot00 * dot12 - dot01 * dot02 ) * invDenom; - - // barycentric coordinates must always sum to 1 - return target.set( 1 - u - v, v, u ); - - } - - static containsPoint( point, a, b, c ) { - - this.getBarycoord( point, a, b, c, _v3$1 ); - - return ( _v3$1.x >= 0 ) && ( _v3$1.y >= 0 ) && ( ( _v3$1.x + _v3$1.y ) <= 1 ); - - } - - static getUV( point, p1, p2, p3, uv1, uv2, uv3, target ) { - - this.getBarycoord( point, p1, p2, p3, _v3$1 ); - - target.set( 0, 0 ); - target.addScaledVector( uv1, _v3$1.x ); - target.addScaledVector( uv2, _v3$1.y ); - target.addScaledVector( uv3, _v3$1.z ); - - return target; - - } - - static isFrontFacing( a, b, c, direction ) { - - _v0$1.subVectors( c, b ); - _v1$3.subVectors( a, b ); - - // strictly front facing - return ( _v0$1.cross( _v1$3 ).dot( direction ) < 0 ) ? true : false; - - } - - set( a, b, c ) { - - this.a.copy( a ); - this.b.copy( b ); - this.c.copy( c ); - - return this; - - } - - setFromPointsAndIndices( points, i0, i1, i2 ) { - - this.a.copy( points[ i0 ] ); - this.b.copy( points[ i1 ] ); - this.c.copy( points[ i2 ] ); - - return this; - - } - - setFromAttributeAndIndices( attribute, i0, i1, i2 ) { - - this.a.fromBufferAttribute( attribute, i0 ); - this.b.fromBufferAttribute( attribute, i1 ); - this.c.fromBufferAttribute( attribute, i2 ); - - return this; - - } - - clone() { - - return new this.constructor().copy( this ); - - } - - copy( triangle ) { - - this.a.copy( triangle.a ); - this.b.copy( triangle.b ); - this.c.copy( triangle.c ); - - return this; - - } - - getArea() { - - _v0$1.subVectors( this.c, this.b ); - _v1$3.subVectors( this.a, this.b ); - - return _v0$1.cross( _v1$3 ).length() * 0.5; - - } - - getMidpoint( target ) { - - return target.addVectors( this.a, this.b ).add( this.c ).multiplyScalar( 1 / 3 ); - - } - - getNormal( target ) { - - return Triangle.getNormal( this.a, this.b, this.c, target ); - - } - - getPlane( target ) { - - return target.setFromCoplanarPoints( this.a, this.b, this.c ); - - } - - getBarycoord( point, target ) { - - return Triangle.getBarycoord( point, this.a, this.b, this.c, target ); - - } - - getUV( point, uv1, uv2, uv3, target ) { - - return Triangle.getUV( point, this.a, this.b, this.c, uv1, uv2, uv3, target ); - - } - - containsPoint( point ) { - - return Triangle.containsPoint( point, this.a, this.b, this.c ); - - } - - isFrontFacing( direction ) { - - return Triangle.isFrontFacing( this.a, this.b, this.c, direction ); - - } - - intersectsBox( box ) { - - return box.intersectsTriangle( this ); - - } - - closestPointToPoint( p, target ) { - - const a = this.a, b = this.b, c = this.c; - let v, w; - - // algorithm thanks to Real-Time Collision Detection by Christer Ericson, - // published by Morgan Kaufmann Publishers, (c) 2005 Elsevier Inc., - // under the accompanying license; see chapter 5.1.5 for detailed explanation. - // basically, we're distinguishing which of the voronoi regions of the triangle - // the point lies in with the minimum amount of redundant computation. - - _vab.subVectors( b, a ); - _vac.subVectors( c, a ); - _vap.subVectors( p, a ); - const d1 = _vab.dot( _vap ); - const d2 = _vac.dot( _vap ); - if ( d1 <= 0 && d2 <= 0 ) { - - // vertex region of A; barycentric coords (1, 0, 0) - return target.copy( a ); - - } - - _vbp.subVectors( p, b ); - const d3 = _vab.dot( _vbp ); - const d4 = _vac.dot( _vbp ); - if ( d3 >= 0 && d4 <= d3 ) { - - // vertex region of B; barycentric coords (0, 1, 0) - return target.copy( b ); - - } - - const vc = d1 * d4 - d3 * d2; - if ( vc <= 0 && d1 >= 0 && d3 <= 0 ) { - - v = d1 / ( d1 - d3 ); - // edge region of AB; barycentric coords (1-v, v, 0) - return target.copy( a ).addScaledVector( _vab, v ); - - } - - _vcp.subVectors( p, c ); - const d5 = _vab.dot( _vcp ); - const d6 = _vac.dot( _vcp ); - if ( d6 >= 0 && d5 <= d6 ) { - - // vertex region of C; barycentric coords (0, 0, 1) - return target.copy( c ); - - } - - const vb = d5 * d2 - d1 * d6; - if ( vb <= 0 && d2 >= 0 && d6 <= 0 ) { - - w = d2 / ( d2 - d6 ); - // edge region of AC; barycentric coords (1-w, 0, w) - return target.copy( a ).addScaledVector( _vac, w ); - - } - - const va = d3 * d6 - d5 * d4; - if ( va <= 0 && ( d4 - d3 ) >= 0 && ( d5 - d6 ) >= 0 ) { - - _vbc.subVectors( c, b ); - w = ( d4 - d3 ) / ( ( d4 - d3 ) + ( d5 - d6 ) ); - // edge region of BC; barycentric coords (0, 1-w, w) - return target.copy( b ).addScaledVector( _vbc, w ); // edge region of BC - - } - - // face region - const denom = 1 / ( va + vb + vc ); - // u = va * denom - v = vb * denom; - w = vc * denom; - - return target.copy( a ).addScaledVector( _vab, v ).addScaledVector( _vac, w ); - - } - - equals( triangle ) { - - return triangle.a.equals( this.a ) && triangle.b.equals( this.b ) && triangle.c.equals( this.c ); - - } - - } - - let materialId = 0; - - class Material extends EventDispatcher { - - constructor() { - - super(); - - this.isMaterial = true; - - Object.defineProperty( this, 'id', { value: materialId ++ } ); - - this.uuid = generateUUID(); - - this.name = ''; - this.type = 'Material'; - - this.blending = NormalBlending; - this.side = FrontSide; - this.vertexColors = false; - - this.opacity = 1; - this.transparent = false; - - this.blendSrc = SrcAlphaFactor; - this.blendDst = OneMinusSrcAlphaFactor; - this.blendEquation = AddEquation; - this.blendSrcAlpha = null; - this.blendDstAlpha = null; - this.blendEquationAlpha = null; - - this.depthFunc = LessEqualDepth; - this.depthTest = true; - this.depthWrite = true; - - this.stencilWriteMask = 0xff; - this.stencilFunc = AlwaysStencilFunc; - this.stencilRef = 0; - this.stencilFuncMask = 0xff; - this.stencilFail = KeepStencilOp; - this.stencilZFail = KeepStencilOp; - this.stencilZPass = KeepStencilOp; - this.stencilWrite = false; - - this.clippingPlanes = null; - this.clipIntersection = false; - this.clipShadows = false; - - this.shadowSide = null; - - this.colorWrite = true; - - this.precision = null; // override the renderer's default precision for this material - - this.polygonOffset = false; - this.polygonOffsetFactor = 0; - this.polygonOffsetUnits = 0; - - this.dithering = false; - - this.alphaToCoverage = false; - this.premultipliedAlpha = false; - this.forceSinglePass = false; - - this.visible = true; - - this.toneMapped = true; - - this.userData = {}; - - this.version = 0; - - this._alphaTest = 0; - - } - - get alphaTest() { - - return this._alphaTest; - - } - - set alphaTest( value ) { - - if ( this._alphaTest > 0 !== value > 0 ) { - - this.version ++; - - } - - this._alphaTest = value; - - } - - onBuild( /* shaderobject, renderer */ ) {} - - onBeforeRender( /* renderer, scene, camera, geometry, object, group */ ) {} - - onBeforeCompile( /* shaderobject, renderer */ ) {} - - customProgramCacheKey() { - - return this.onBeforeCompile.toString(); - - } - - setValues( values ) { - - if ( values === undefined ) return; - - for ( const key in values ) { - - const newValue = values[ key ]; - - if ( newValue === undefined ) { - - console.warn( 'THREE.Material: \'' + key + '\' parameter is undefined.' ); - continue; - - } - - const currentValue = this[ key ]; - - if ( currentValue === undefined ) { - - console.warn( 'THREE.' + this.type + ': \'' + key + '\' is not a property of this material.' ); - continue; - - } - - if ( currentValue && currentValue.isColor ) { - - currentValue.set( newValue ); - - } else if ( ( currentValue && currentValue.isVector3 ) && ( newValue && newValue.isVector3 ) ) { - - currentValue.copy( newValue ); - - } else { - - this[ key ] = newValue; - - } - - } - - } - - toJSON( meta ) { - - const isRootObject = ( meta === undefined || typeof meta === 'string' ); - - if ( isRootObject ) { - - meta = { - textures: {}, - images: {} - }; - - } - - const data = { - metadata: { - version: 4.5, - type: 'Material', - generator: 'Material.toJSON' - } - }; - - // standard Material serialization - data.uuid = this.uuid; - data.type = this.type; - - if ( this.name !== '' ) data.name = this.name; - - if ( this.color && this.color.isColor ) data.color = this.color.getHex(); - - if ( this.roughness !== undefined ) data.roughness = this.roughness; - if ( this.metalness !== undefined ) data.metalness = this.metalness; - - if ( this.sheen !== undefined ) data.sheen = this.sheen; - if ( this.sheenColor && this.sheenColor.isColor ) data.sheenColor = this.sheenColor.getHex(); - if ( this.sheenRoughness !== undefined ) data.sheenRoughness = this.sheenRoughness; - if ( this.emissive && this.emissive.isColor ) data.emissive = this.emissive.getHex(); - if ( this.emissiveIntensity && this.emissiveIntensity !== 1 ) data.emissiveIntensity = this.emissiveIntensity; - - if ( this.specular && this.specular.isColor ) data.specular = this.specular.getHex(); - if ( this.specularIntensity !== undefined ) data.specularIntensity = this.specularIntensity; - if ( this.specularColor && this.specularColor.isColor ) data.specularColor = this.specularColor.getHex(); - if ( this.shininess !== undefined ) data.shininess = this.shininess; - if ( this.clearcoat !== undefined ) data.clearcoat = this.clearcoat; - if ( this.clearcoatRoughness !== undefined ) data.clearcoatRoughness = this.clearcoatRoughness; - - if ( this.clearcoatMap && this.clearcoatMap.isTexture ) { - - data.clearcoatMap = this.clearcoatMap.toJSON( meta ).uuid; - - } - - if ( this.clearcoatRoughnessMap && this.clearcoatRoughnessMap.isTexture ) { - - data.clearcoatRoughnessMap = this.clearcoatRoughnessMap.toJSON( meta ).uuid; - - } - - if ( this.clearcoatNormalMap && this.clearcoatNormalMap.isTexture ) { - - data.clearcoatNormalMap = this.clearcoatNormalMap.toJSON( meta ).uuid; - data.clearcoatNormalScale = this.clearcoatNormalScale.toArray(); - - } - - if ( this.iridescence !== undefined ) data.iridescence = this.iridescence; - if ( this.iridescenceIOR !== undefined ) data.iridescenceIOR = this.iridescenceIOR; - if ( this.iridescenceThicknessRange !== undefined ) data.iridescenceThicknessRange = this.iridescenceThicknessRange; - - if ( this.iridescenceMap && this.iridescenceMap.isTexture ) { - - data.iridescenceMap = this.iridescenceMap.toJSON( meta ).uuid; - - } - - if ( this.iridescenceThicknessMap && this.iridescenceThicknessMap.isTexture ) { - - data.iridescenceThicknessMap = this.iridescenceThicknessMap.toJSON( meta ).uuid; - - } - - if ( this.map && this.map.isTexture ) data.map = this.map.toJSON( meta ).uuid; - if ( this.matcap && this.matcap.isTexture ) data.matcap = this.matcap.toJSON( meta ).uuid; - if ( this.alphaMap && this.alphaMap.isTexture ) data.alphaMap = this.alphaMap.toJSON( meta ).uuid; - - if ( this.lightMap && this.lightMap.isTexture ) { - - data.lightMap = this.lightMap.toJSON( meta ).uuid; - data.lightMapIntensity = this.lightMapIntensity; - - } - - if ( this.aoMap && this.aoMap.isTexture ) { - - data.aoMap = this.aoMap.toJSON( meta ).uuid; - data.aoMapIntensity = this.aoMapIntensity; - - } - - if ( this.bumpMap && this.bumpMap.isTexture ) { - - data.bumpMap = this.bumpMap.toJSON( meta ).uuid; - data.bumpScale = this.bumpScale; - - } - - if ( this.normalMap && this.normalMap.isTexture ) { - - data.normalMap = this.normalMap.toJSON( meta ).uuid; - data.normalMapType = this.normalMapType; - data.normalScale = this.normalScale.toArray(); - - } - - if ( this.displacementMap && this.displacementMap.isTexture ) { - - data.displacementMap = this.displacementMap.toJSON( meta ).uuid; - data.displacementScale = this.displacementScale; - data.displacementBias = this.displacementBias; - - } - - if ( this.roughnessMap && this.roughnessMap.isTexture ) data.roughnessMap = this.roughnessMap.toJSON( meta ).uuid; - if ( this.metalnessMap && this.metalnessMap.isTexture ) data.metalnessMap = this.metalnessMap.toJSON( meta ).uuid; - - if ( this.emissiveMap && this.emissiveMap.isTexture ) data.emissiveMap = this.emissiveMap.toJSON( meta ).uuid; - if ( this.specularMap && this.specularMap.isTexture ) data.specularMap = this.specularMap.toJSON( meta ).uuid; - if ( this.specularIntensityMap && this.specularIntensityMap.isTexture ) data.specularIntensityMap = this.specularIntensityMap.toJSON( meta ).uuid; - if ( this.specularColorMap && this.specularColorMap.isTexture ) data.specularColorMap = this.specularColorMap.toJSON( meta ).uuid; - - if ( this.envMap && this.envMap.isTexture ) { - - data.envMap = this.envMap.toJSON( meta ).uuid; - - if ( this.combine !== undefined ) data.combine = this.combine; - - } - - if ( this.envMapIntensity !== undefined ) data.envMapIntensity = this.envMapIntensity; - if ( this.reflectivity !== undefined ) data.reflectivity = this.reflectivity; - if ( this.refractionRatio !== undefined ) data.refractionRatio = this.refractionRatio; - - if ( this.gradientMap && this.gradientMap.isTexture ) { - - data.gradientMap = this.gradientMap.toJSON( meta ).uuid; - - } - - if ( this.transmission !== undefined ) data.transmission = this.transmission; - if ( this.transmissionMap && this.transmissionMap.isTexture ) data.transmissionMap = this.transmissionMap.toJSON( meta ).uuid; - if ( this.thickness !== undefined ) data.thickness = this.thickness; - if ( this.thicknessMap && this.thicknessMap.isTexture ) data.thicknessMap = this.thicknessMap.toJSON( meta ).uuid; - if ( this.attenuationDistance !== undefined && this.attenuationDistance !== Infinity ) data.attenuationDistance = this.attenuationDistance; - if ( this.attenuationColor !== undefined ) data.attenuationColor = this.attenuationColor.getHex(); - - if ( this.size !== undefined ) data.size = this.size; - if ( this.shadowSide !== null ) data.shadowSide = this.shadowSide; - if ( this.sizeAttenuation !== undefined ) data.sizeAttenuation = this.sizeAttenuation; - - if ( this.blending !== NormalBlending ) data.blending = this.blending; - if ( this.side !== FrontSide ) data.side = this.side; - if ( this.vertexColors ) data.vertexColors = true; - - if ( this.opacity < 1 ) data.opacity = this.opacity; - if ( this.transparent === true ) data.transparent = this.transparent; - - data.depthFunc = this.depthFunc; - data.depthTest = this.depthTest; - data.depthWrite = this.depthWrite; - data.colorWrite = this.colorWrite; - - data.stencilWrite = this.stencilWrite; - data.stencilWriteMask = this.stencilWriteMask; - data.stencilFunc = this.stencilFunc; - data.stencilRef = this.stencilRef; - data.stencilFuncMask = this.stencilFuncMask; - data.stencilFail = this.stencilFail; - data.stencilZFail = this.stencilZFail; - data.stencilZPass = this.stencilZPass; - - // rotation (SpriteMaterial) - if ( this.rotation !== undefined && this.rotation !== 0 ) data.rotation = this.rotation; - - if ( this.polygonOffset === true ) data.polygonOffset = true; - if ( this.polygonOffsetFactor !== 0 ) data.polygonOffsetFactor = this.polygonOffsetFactor; - if ( this.polygonOffsetUnits !== 0 ) data.polygonOffsetUnits = this.polygonOffsetUnits; - - if ( this.linewidth !== undefined && this.linewidth !== 1 ) data.linewidth = this.linewidth; - if ( this.dashSize !== undefined ) data.dashSize = this.dashSize; - if ( this.gapSize !== undefined ) data.gapSize = this.gapSize; - if ( this.scale !== undefined ) data.scale = this.scale; - - if ( this.dithering === true ) data.dithering = true; - - if ( this.alphaTest > 0 ) data.alphaTest = this.alphaTest; - if ( this.alphaToCoverage === true ) data.alphaToCoverage = this.alphaToCoverage; - if ( this.premultipliedAlpha === true ) data.premultipliedAlpha = this.premultipliedAlpha; - if ( this.forceSinglePass === true ) data.forceSinglePass = this.forceSinglePass; - - if ( this.wireframe === true ) data.wireframe = this.wireframe; - if ( this.wireframeLinewidth > 1 ) data.wireframeLinewidth = this.wireframeLinewidth; - if ( this.wireframeLinecap !== 'round' ) data.wireframeLinecap = this.wireframeLinecap; - if ( this.wireframeLinejoin !== 'round' ) data.wireframeLinejoin = this.wireframeLinejoin; - - if ( this.flatShading === true ) data.flatShading = this.flatShading; - - if ( this.visible === false ) data.visible = false; - - if ( this.toneMapped === false ) data.toneMapped = false; - - if ( this.fog === false ) data.fog = false; - - if ( Object.keys( this.userData ).length > 0 ) data.userData = this.userData; - - // TODO: Copied from Object3D.toJSON - - function extractFromCache( cache ) { - - const values = []; - - for ( const key in cache ) { - - const data = cache[ key ]; - delete data.metadata; - values.push( data ); - - } - - return values; - - } - - if ( isRootObject ) { - - const textures = extractFromCache( meta.textures ); - const images = extractFromCache( meta.images ); - - if ( textures.length > 0 ) data.textures = textures; - if ( images.length > 0 ) data.images = images; - - } - - return data; - - } - - clone() { - - return new this.constructor().copy( this ); - - } - - copy( source ) { - - this.name = source.name; - - this.blending = source.blending; - this.side = source.side; - this.vertexColors = source.vertexColors; - - this.opacity = source.opacity; - this.transparent = source.transparent; - - this.blendSrc = source.blendSrc; - this.blendDst = source.blendDst; - this.blendEquation = source.blendEquation; - this.blendSrcAlpha = source.blendSrcAlpha; - this.blendDstAlpha = source.blendDstAlpha; - this.blendEquationAlpha = source.blendEquationAlpha; - - this.depthFunc = source.depthFunc; - this.depthTest = source.depthTest; - this.depthWrite = source.depthWrite; - - this.stencilWriteMask = source.stencilWriteMask; - this.stencilFunc = source.stencilFunc; - this.stencilRef = source.stencilRef; - this.stencilFuncMask = source.stencilFuncMask; - this.stencilFail = source.stencilFail; - this.stencilZFail = source.stencilZFail; - this.stencilZPass = source.stencilZPass; - this.stencilWrite = source.stencilWrite; - - const srcPlanes = source.clippingPlanes; - let dstPlanes = null; - - if ( srcPlanes !== null ) { - - const n = srcPlanes.length; - dstPlanes = new Array( n ); - - for ( let i = 0; i !== n; ++ i ) { - - dstPlanes[ i ] = srcPlanes[ i ].clone(); - - } - - } - - this.clippingPlanes = dstPlanes; - this.clipIntersection = source.clipIntersection; - this.clipShadows = source.clipShadows; - - this.shadowSide = source.shadowSide; - - this.colorWrite = source.colorWrite; - - this.precision = source.precision; - - this.polygonOffset = source.polygonOffset; - this.polygonOffsetFactor = source.polygonOffsetFactor; - this.polygonOffsetUnits = source.polygonOffsetUnits; - - this.dithering = source.dithering; - - this.alphaTest = source.alphaTest; - this.alphaToCoverage = source.alphaToCoverage; - this.premultipliedAlpha = source.premultipliedAlpha; - this.forceSinglePass = source.forceSinglePass; - - this.visible = source.visible; - - this.toneMapped = source.toneMapped; - - this.userData = JSON.parse( JSON.stringify( source.userData ) ); - - return this; - - } - - dispose() { - - this.dispatchEvent( { type: 'dispose' } ); - - } - - set needsUpdate( value ) { - - if ( value === true ) this.version ++; - - } - - } - - const _colorKeywords = { 'aliceblue': 0xF0F8FF, 'antiquewhite': 0xFAEBD7, 'aqua': 0x00FFFF, 'aquamarine': 0x7FFFD4, 'azure': 0xF0FFFF, - 'beige': 0xF5F5DC, 'bisque': 0xFFE4C4, 'black': 0x000000, 'blanchedalmond': 0xFFEBCD, 'blue': 0x0000FF, 'blueviolet': 0x8A2BE2, - 'brown': 0xA52A2A, 'burlywood': 0xDEB887, 'cadetblue': 0x5F9EA0, 'chartreuse': 0x7FFF00, 'chocolate': 0xD2691E, 'coral': 0xFF7F50, - 'cornflowerblue': 0x6495ED, 'cornsilk': 0xFFF8DC, 'crimson': 0xDC143C, 'cyan': 0x00FFFF, 'darkblue': 0x00008B, 'darkcyan': 0x008B8B, - 'darkgoldenrod': 0xB8860B, 'darkgray': 0xA9A9A9, 'darkgreen': 0x006400, 'darkgrey': 0xA9A9A9, 'darkkhaki': 0xBDB76B, 'darkmagenta': 0x8B008B, - 'darkolivegreen': 0x556B2F, 'darkorange': 0xFF8C00, 'darkorchid': 0x9932CC, 'darkred': 0x8B0000, 'darksalmon': 0xE9967A, 'darkseagreen': 0x8FBC8F, - 'darkslateblue': 0x483D8B, 'darkslategray': 0x2F4F4F, 'darkslategrey': 0x2F4F4F, 'darkturquoise': 0x00CED1, 'darkviolet': 0x9400D3, - 'deeppink': 0xFF1493, 'deepskyblue': 0x00BFFF, 'dimgray': 0x696969, 'dimgrey': 0x696969, 'dodgerblue': 0x1E90FF, 'firebrick': 0xB22222, - 'floralwhite': 0xFFFAF0, 'forestgreen': 0x228B22, 'fuchsia': 0xFF00FF, 'gainsboro': 0xDCDCDC, 'ghostwhite': 0xF8F8FF, 'gold': 0xFFD700, - 'goldenrod': 0xDAA520, 'gray': 0x808080, 'green': 0x008000, 'greenyellow': 0xADFF2F, 'grey': 0x808080, 'honeydew': 0xF0FFF0, 'hotpink': 0xFF69B4, - 'indianred': 0xCD5C5C, 'indigo': 0x4B0082, 'ivory': 0xFFFFF0, 'khaki': 0xF0E68C, 'lavender': 0xE6E6FA, 'lavenderblush': 0xFFF0F5, 'lawngreen': 0x7CFC00, - 'lemonchiffon': 0xFFFACD, 'lightblue': 0xADD8E6, 'lightcoral': 0xF08080, 'lightcyan': 0xE0FFFF, 'lightgoldenrodyellow': 0xFAFAD2, 'lightgray': 0xD3D3D3, - 'lightgreen': 0x90EE90, 'lightgrey': 0xD3D3D3, 'lightpink': 0xFFB6C1, 'lightsalmon': 0xFFA07A, 'lightseagreen': 0x20B2AA, 'lightskyblue': 0x87CEFA, - 'lightslategray': 0x778899, 'lightslategrey': 0x778899, 'lightsteelblue': 0xB0C4DE, 'lightyellow': 0xFFFFE0, 'lime': 0x00FF00, 'limegreen': 0x32CD32, - 'linen': 0xFAF0E6, 'magenta': 0xFF00FF, 'maroon': 0x800000, 'mediumaquamarine': 0x66CDAA, 'mediumblue': 0x0000CD, 'mediumorchid': 0xBA55D3, - 'mediumpurple': 0x9370DB, 'mediumseagreen': 0x3CB371, 'mediumslateblue': 0x7B68EE, 'mediumspringgreen': 0x00FA9A, 'mediumturquoise': 0x48D1CC, - 'mediumvioletred': 0xC71585, 'midnightblue': 0x191970, 'mintcream': 0xF5FFFA, 'mistyrose': 0xFFE4E1, 'moccasin': 0xFFE4B5, 'navajowhite': 0xFFDEAD, - 'navy': 0x000080, 'oldlace': 0xFDF5E6, 'olive': 0x808000, 'olivedrab': 0x6B8E23, 'orange': 0xFFA500, 'orangered': 0xFF4500, 'orchid': 0xDA70D6, - 'palegoldenrod': 0xEEE8AA, 'palegreen': 0x98FB98, 'paleturquoise': 0xAFEEEE, 'palevioletred': 0xDB7093, 'papayawhip': 0xFFEFD5, 'peachpuff': 0xFFDAB9, - 'peru': 0xCD853F, 'pink': 0xFFC0CB, 'plum': 0xDDA0DD, 'powderblue': 0xB0E0E6, 'purple': 0x800080, 'rebeccapurple': 0x663399, 'red': 0xFF0000, 'rosybrown': 0xBC8F8F, - 'royalblue': 0x4169E1, 'saddlebrown': 0x8B4513, 'salmon': 0xFA8072, 'sandybrown': 0xF4A460, 'seagreen': 0x2E8B57, 'seashell': 0xFFF5EE, - 'sienna': 0xA0522D, 'silver': 0xC0C0C0, 'skyblue': 0x87CEEB, 'slateblue': 0x6A5ACD, 'slategray': 0x708090, 'slategrey': 0x708090, 'snow': 0xFFFAFA, - 'springgreen': 0x00FF7F, 'steelblue': 0x4682B4, 'tan': 0xD2B48C, 'teal': 0x008080, 'thistle': 0xD8BFD8, 'tomato': 0xFF6347, 'turquoise': 0x40E0D0, - 'violet': 0xEE82EE, 'wheat': 0xF5DEB3, 'white': 0xFFFFFF, 'whitesmoke': 0xF5F5F5, 'yellow': 0xFFFF00, 'yellowgreen': 0x9ACD32 }; - - const _hslA = { h: 0, s: 0, l: 0 }; - const _hslB = { h: 0, s: 0, l: 0 }; - - function hue2rgb( p, q, t ) { - - if ( t < 0 ) t += 1; - if ( t > 1 ) t -= 1; - if ( t < 1 / 6 ) return p + ( q - p ) * 6 * t; - if ( t < 1 / 2 ) return q; - if ( t < 2 / 3 ) return p + ( q - p ) * 6 * ( 2 / 3 - t ); - return p; - - } - - class Color { - - constructor( r, g, b ) { - - this.isColor = true; - - this.r = 1; - this.g = 1; - this.b = 1; - - if ( g === undefined && b === undefined ) { - - // r is THREE.Color, hex or string - return this.set( r ); - - } - - return this.setRGB( r, g, b ); - - } - - set( value ) { - - if ( value && value.isColor ) { - - this.copy( value ); - - } else if ( typeof value === 'number' ) { - - this.setHex( value ); - - } else if ( typeof value === 'string' ) { - - this.setStyle( value ); - - } - - return this; - - } - - setScalar( scalar ) { - - this.r = scalar; - this.g = scalar; - this.b = scalar; - - return this; - - } - - setHex( hex, colorSpace = SRGBColorSpace ) { - - hex = Math.floor( hex ); - - this.r = ( hex >> 16 & 255 ) / 255; - this.g = ( hex >> 8 & 255 ) / 255; - this.b = ( hex & 255 ) / 255; - - ColorManagement.toWorkingColorSpace( this, colorSpace ); - - return this; - - } - - setRGB( r, g, b, colorSpace = ColorManagement.workingColorSpace ) { - - this.r = r; - this.g = g; - this.b = b; - - ColorManagement.toWorkingColorSpace( this, colorSpace ); - - return this; - - } - - setHSL( h, s, l, colorSpace = ColorManagement.workingColorSpace ) { - - // h,s,l ranges are in 0.0 - 1.0 - h = euclideanModulo( h, 1 ); - s = clamp( s, 0, 1 ); - l = clamp( l, 0, 1 ); - - if ( s === 0 ) { - - this.r = this.g = this.b = l; - - } else { - - const p = l <= 0.5 ? l * ( 1 + s ) : l + s - ( l * s ); - const q = ( 2 * l ) - p; - - this.r = hue2rgb( q, p, h + 1 / 3 ); - this.g = hue2rgb( q, p, h ); - this.b = hue2rgb( q, p, h - 1 / 3 ); - - } - - ColorManagement.toWorkingColorSpace( this, colorSpace ); - - return this; - - } - - setStyle( style, colorSpace = SRGBColorSpace ) { - - function handleAlpha( string ) { - - if ( string === undefined ) return; - - if ( parseFloat( string ) < 1 ) { - - console.warn( 'THREE.Color: Alpha component of ' + style + ' will be ignored.' ); - - } - - } - - - let m; - - if ( m = /^(\w+)\(([^\)]*)\)/.exec( style ) ) { - - // rgb / hsl - - let color; - const name = m[ 1 ]; - const components = m[ 2 ]; - - switch ( name ) { - - case 'rgb': - case 'rgba': - - if ( color = /^\s*(\d+)\s*,\s*(\d+)\s*,\s*(\d+)\s*(?:,\s*(\d*\.?\d+)\s*)?$/.exec( components ) ) { - - // rgb(255,0,0) rgba(255,0,0,0.5) - this.r = Math.min( 255, parseInt( color[ 1 ], 10 ) ) / 255; - this.g = Math.min( 255, parseInt( color[ 2 ], 10 ) ) / 255; - this.b = Math.min( 255, parseInt( color[ 3 ], 10 ) ) / 255; - - ColorManagement.toWorkingColorSpace( this, colorSpace ); - - handleAlpha( color[ 4 ] ); - - return this; - - } - - if ( color = /^\s*(\d+)\%\s*,\s*(\d+)\%\s*,\s*(\d+)\%\s*(?:,\s*(\d*\.?\d+)\s*)?$/.exec( components ) ) { - - // rgb(100%,0%,0%) rgba(100%,0%,0%,0.5) - this.r = Math.min( 100, parseInt( color[ 1 ], 10 ) ) / 100; - this.g = Math.min( 100, parseInt( color[ 2 ], 10 ) ) / 100; - this.b = Math.min( 100, parseInt( color[ 3 ], 10 ) ) / 100; - - ColorManagement.toWorkingColorSpace( this, colorSpace ); - - handleAlpha( color[ 4 ] ); - - return this; - - } - - break; - - case 'hsl': - case 'hsla': - - if ( color = /^\s*(\d*\.?\d+)\s*,\s*(\d*\.?\d+)\%\s*,\s*(\d*\.?\d+)\%\s*(?:,\s*(\d*\.?\d+)\s*)?$/.exec( components ) ) { - - // hsl(120,50%,50%) hsla(120,50%,50%,0.5) - const h = parseFloat( color[ 1 ] ) / 360; - const s = parseFloat( color[ 2 ] ) / 100; - const l = parseFloat( color[ 3 ] ) / 100; - - handleAlpha( color[ 4 ] ); - - return this.setHSL( h, s, l, colorSpace ); - - } - - break; - - default: - - console.warn( 'THREE.Color: Unknown color model ' + style ); - - } - - } else if ( m = /^\#([A-Fa-f\d]+)$/.exec( style ) ) { - - // hex color - - const hex = m[ 1 ]; - const size = hex.length; - - if ( size === 3 ) { - - // #ff0 - this.r = parseInt( hex.charAt( 0 ) + hex.charAt( 0 ), 16 ) / 255; - this.g = parseInt( hex.charAt( 1 ) + hex.charAt( 1 ), 16 ) / 255; - this.b = parseInt( hex.charAt( 2 ) + hex.charAt( 2 ), 16 ) / 255; - - ColorManagement.toWorkingColorSpace( this, colorSpace ); - - return this; - - } else if ( size === 6 ) { - - // #ff0000 - this.r = parseInt( hex.charAt( 0 ) + hex.charAt( 1 ), 16 ) / 255; - this.g = parseInt( hex.charAt( 2 ) + hex.charAt( 3 ), 16 ) / 255; - this.b = parseInt( hex.charAt( 4 ) + hex.charAt( 5 ), 16 ) / 255; - - ColorManagement.toWorkingColorSpace( this, colorSpace ); - - return this; - - } else { - - console.warn( 'THREE.Color: Invalid hex color ' + style ); - - } - - } else if ( style && style.length > 0 ) { - - return this.setColorName( style, colorSpace ); - - } - - return this; - - } - - setColorName( style, colorSpace = SRGBColorSpace ) { - - // color keywords - const hex = _colorKeywords[ style.toLowerCase() ]; - - if ( hex !== undefined ) { - - // red - this.setHex( hex, colorSpace ); - - } else { - - // unknown color - console.warn( 'THREE.Color: Unknown color ' + style ); - - } - - return this; - - } - - clone() { - - return new this.constructor( this.r, this.g, this.b ); - - } - - copy( color ) { - - this.r = color.r; - this.g = color.g; - this.b = color.b; - - return this; - - } - - copySRGBToLinear( color ) { - - this.r = SRGBToLinear( color.r ); - this.g = SRGBToLinear( color.g ); - this.b = SRGBToLinear( color.b ); - - return this; - - } - - copyLinearToSRGB( color ) { - - this.r = LinearToSRGB( color.r ); - this.g = LinearToSRGB( color.g ); - this.b = LinearToSRGB( color.b ); - - return this; - - } - - convertSRGBToLinear() { - - this.copySRGBToLinear( this ); - - return this; - - } - - convertLinearToSRGB() { - - this.copyLinearToSRGB( this ); - - return this; - - } - - getHex( colorSpace = SRGBColorSpace ) { - - ColorManagement.fromWorkingColorSpace( _color.copy( this ), colorSpace ); - - return clamp( _color.r * 255, 0, 255 ) << 16 ^ clamp( _color.g * 255, 0, 255 ) << 8 ^ clamp( _color.b * 255, 0, 255 ) << 0; - - } - - getHexString( colorSpace = SRGBColorSpace ) { - - return ( '000000' + this.getHex( colorSpace ).toString( 16 ) ).slice( - 6 ); - - } - - getHSL( target, colorSpace = ColorManagement.workingColorSpace ) { - - // h,s,l ranges are in 0.0 - 1.0 - - ColorManagement.fromWorkingColorSpace( _color.copy( this ), colorSpace ); - - const r = _color.r, g = _color.g, b = _color.b; - - const max = Math.max( r, g, b ); - const min = Math.min( r, g, b ); - - let hue, saturation; - const lightness = ( min + max ) / 2.0; - - if ( min === max ) { - - hue = 0; - saturation = 0; - - } else { - - const delta = max - min; - - saturation = lightness <= 0.5 ? delta / ( max + min ) : delta / ( 2 - max - min ); - - switch ( max ) { - - case r: hue = ( g - b ) / delta + ( g < b ? 6 : 0 ); break; - case g: hue = ( b - r ) / delta + 2; break; - case b: hue = ( r - g ) / delta + 4; break; - - } - - hue /= 6; - - } - - target.h = hue; - target.s = saturation; - target.l = lightness; - - return target; - - } - - getRGB( target, colorSpace = ColorManagement.workingColorSpace ) { - - ColorManagement.fromWorkingColorSpace( _color.copy( this ), colorSpace ); - - target.r = _color.r; - target.g = _color.g; - target.b = _color.b; - - return target; - - } - - getStyle( colorSpace = SRGBColorSpace ) { - - ColorManagement.fromWorkingColorSpace( _color.copy( this ), colorSpace ); - - const r = _color.r, g = _color.g, b = _color.b; - - if ( colorSpace !== SRGBColorSpace ) { - - // Requires CSS Color Module Level 4 (https://www.w3.org/TR/css-color-4/). - return `color(${ colorSpace } ${ r.toFixed( 3 ) } ${ g.toFixed( 3 ) } ${ b.toFixed( 3 ) })`; - - } - - return `rgb(${( r * 255 ) | 0},${( g * 255 ) | 0},${( b * 255 ) | 0})`; - - } - - offsetHSL( h, s, l ) { - - this.getHSL( _hslA ); - - _hslA.h += h; _hslA.s += s; _hslA.l += l; - - this.setHSL( _hslA.h, _hslA.s, _hslA.l ); - - return this; - - } - - add( color ) { - - this.r += color.r; - this.g += color.g; - this.b += color.b; - - return this; - - } - - addColors( color1, color2 ) { - - this.r = color1.r + color2.r; - this.g = color1.g + color2.g; - this.b = color1.b + color2.b; - - return this; - - } - - addScalar( s ) { - - this.r += s; - this.g += s; - this.b += s; - - return this; - - } - - sub( color ) { - - this.r = Math.max( 0, this.r - color.r ); - this.g = Math.max( 0, this.g - color.g ); - this.b = Math.max( 0, this.b - color.b ); - - return this; - - } - - multiply( color ) { - - this.r *= color.r; - this.g *= color.g; - this.b *= color.b; - - return this; - - } - - multiplyScalar( s ) { - - this.r *= s; - this.g *= s; - this.b *= s; - - return this; - - } - - lerp( color, alpha ) { - - this.r += ( color.r - this.r ) * alpha; - this.g += ( color.g - this.g ) * alpha; - this.b += ( color.b - this.b ) * alpha; - - return this; - - } - - lerpColors( color1, color2, alpha ) { - - this.r = color1.r + ( color2.r - color1.r ) * alpha; - this.g = color1.g + ( color2.g - color1.g ) * alpha; - this.b = color1.b + ( color2.b - color1.b ) * alpha; - - return this; - - } - - lerpHSL( color, alpha ) { - - this.getHSL( _hslA ); - color.getHSL( _hslB ); - - const h = lerp( _hslA.h, _hslB.h, alpha ); - const s = lerp( _hslA.s, _hslB.s, alpha ); - const l = lerp( _hslA.l, _hslB.l, alpha ); - - this.setHSL( h, s, l ); - - return this; - - } - - equals( c ) { - - return ( c.r === this.r ) && ( c.g === this.g ) && ( c.b === this.b ); - - } - - fromArray( array, offset = 0 ) { - - this.r = array[ offset ]; - this.g = array[ offset + 1 ]; - this.b = array[ offset + 2 ]; - - return this; - - } - - toArray( array = [], offset = 0 ) { - - array[ offset ] = this.r; - array[ offset + 1 ] = this.g; - array[ offset + 2 ] = this.b; - - return array; - - } - - fromBufferAttribute( attribute, index ) { - - this.r = attribute.getX( index ); - this.g = attribute.getY( index ); - this.b = attribute.getZ( index ); - - return this; - - } - - toJSON() { - - return this.getHex(); - - } - - *[ Symbol.iterator ]() { - - yield this.r; - yield this.g; - yield this.b; - - } - - } - - const _color = new Color(); - - Color.NAMES = _colorKeywords; - - class MeshBasicMaterial extends Material { - - constructor( parameters ) { - - super(); - - this.isMeshBasicMaterial = true; - - this.type = 'MeshBasicMaterial'; - - this.color = new Color( 0xffffff ); // emissive - - this.map = null; - - this.lightMap = null; - this.lightMapIntensity = 1.0; - - this.aoMap = null; - this.aoMapIntensity = 1.0; - - this.specularMap = null; - - this.alphaMap = null; - - this.envMap = null; - this.combine = MultiplyOperation; - this.reflectivity = 1; - this.refractionRatio = 0.98; - - this.wireframe = false; - this.wireframeLinewidth = 1; - this.wireframeLinecap = 'round'; - this.wireframeLinejoin = 'round'; - - this.fog = true; - - this.setValues( parameters ); - - } - - copy( source ) { - - super.copy( source ); - - this.color.copy( source.color ); - - this.map = source.map; - - this.lightMap = source.lightMap; - this.lightMapIntensity = source.lightMapIntensity; - - this.aoMap = source.aoMap; - this.aoMapIntensity = source.aoMapIntensity; - - this.specularMap = source.specularMap; - - this.alphaMap = source.alphaMap; - - this.envMap = source.envMap; - this.combine = source.combine; - this.reflectivity = source.reflectivity; - this.refractionRatio = source.refractionRatio; - - this.wireframe = source.wireframe; - this.wireframeLinewidth = source.wireframeLinewidth; - this.wireframeLinecap = source.wireframeLinecap; - this.wireframeLinejoin = source.wireframeLinejoin; - - this.fog = source.fog; - - return this; - - } - - } - - const _vector$9 = /*@__PURE__*/ new Vector3(); - const _vector2$1 = /*@__PURE__*/ new Vector2(); - - class BufferAttribute { - - constructor( array, itemSize, normalized = false ) { - - if ( Array.isArray( array ) ) { - - throw new TypeError( 'THREE.BufferAttribute: array should be a Typed Array.' ); - - } - - this.isBufferAttribute = true; - - this.name = ''; - - this.array = array; - this.itemSize = itemSize; - this.count = array !== undefined ? array.length / itemSize : 0; - this.normalized = normalized; - - this.usage = StaticDrawUsage; - this.updateRange = { offset: 0, count: - 1 }; - - this.version = 0; - - } - - onUploadCallback() {} - - set needsUpdate( value ) { - - if ( value === true ) this.version ++; - - } - - setUsage( value ) { - - this.usage = value; - - return this; - - } - - copy( source ) { - - this.name = source.name; - this.array = new source.array.constructor( source.array ); - this.itemSize = source.itemSize; - this.count = source.count; - this.normalized = source.normalized; - - this.usage = source.usage; - - return this; - - } - - copyAt( index1, attribute, index2 ) { - - index1 *= this.itemSize; - index2 *= attribute.itemSize; - - for ( let i = 0, l = this.itemSize; i < l; i ++ ) { - - this.array[ index1 + i ] = attribute.array[ index2 + i ]; - - } - - return this; - - } - - copyArray( array ) { - - this.array.set( array ); - - return this; - - } - - applyMatrix3( m ) { - - if ( this.itemSize === 2 ) { - - for ( let i = 0, l = this.count; i < l; i ++ ) { - - _vector2$1.fromBufferAttribute( this, i ); - _vector2$1.applyMatrix3( m ); - - this.setXY( i, _vector2$1.x, _vector2$1.y ); - - } - - } else if ( this.itemSize === 3 ) { - - for ( let i = 0, l = this.count; i < l; i ++ ) { - - _vector$9.fromBufferAttribute( this, i ); - _vector$9.applyMatrix3( m ); - - this.setXYZ( i, _vector$9.x, _vector$9.y, _vector$9.z ); - - } - - } - - return this; - - } - - applyMatrix4( m ) { - - for ( let i = 0, l = this.count; i < l; i ++ ) { - - _vector$9.fromBufferAttribute( this, i ); - - _vector$9.applyMatrix4( m ); - - this.setXYZ( i, _vector$9.x, _vector$9.y, _vector$9.z ); - - } - - return this; - - } - - applyNormalMatrix( m ) { - - for ( let i = 0, l = this.count; i < l; i ++ ) { - - _vector$9.fromBufferAttribute( this, i ); - - _vector$9.applyNormalMatrix( m ); - - this.setXYZ( i, _vector$9.x, _vector$9.y, _vector$9.z ); - - } - - return this; - - } - - transformDirection( m ) { - - for ( let i = 0, l = this.count; i < l; i ++ ) { - - _vector$9.fromBufferAttribute( this, i ); - - _vector$9.transformDirection( m ); - - this.setXYZ( i, _vector$9.x, _vector$9.y, _vector$9.z ); - - } - - return this; - - } - - set( value, offset = 0 ) { - - // Matching BufferAttribute constructor, do not normalize the array. - this.array.set( value, offset ); - - return this; - - } - - getX( index ) { - - let x = this.array[ index * this.itemSize ]; - - if ( this.normalized ) x = denormalize( x, this.array ); - - return x; - - } - - setX( index, x ) { - - if ( this.normalized ) x = normalize( x, this.array ); - - this.array[ index * this.itemSize ] = x; - - return this; - - } - - getY( index ) { - - let y = this.array[ index * this.itemSize + 1 ]; - - if ( this.normalized ) y = denormalize( y, this.array ); - - return y; - - } - - setY( index, y ) { - - if ( this.normalized ) y = normalize( y, this.array ); - - this.array[ index * this.itemSize + 1 ] = y; - - return this; - - } - - getZ( index ) { - - let z = this.array[ index * this.itemSize + 2 ]; - - if ( this.normalized ) z = denormalize( z, this.array ); - - return z; - - } - - setZ( index, z ) { - - if ( this.normalized ) z = normalize( z, this.array ); - - this.array[ index * this.itemSize + 2 ] = z; - - return this; - - } - - getW( index ) { - - let w = this.array[ index * this.itemSize + 3 ]; - - if ( this.normalized ) w = denormalize( w, this.array ); - - return w; - - } - - setW( index, w ) { - - if ( this.normalized ) w = normalize( w, this.array ); - - this.array[ index * this.itemSize + 3 ] = w; - - return this; - - } - - setXY( index, x, y ) { - - index *= this.itemSize; - - if ( this.normalized ) { - - x = normalize( x, this.array ); - y = normalize( y, this.array ); - - } - - this.array[ index + 0 ] = x; - this.array[ index + 1 ] = y; - - return this; - - } - - setXYZ( index, x, y, z ) { - - index *= this.itemSize; - - if ( this.normalized ) { - - x = normalize( x, this.array ); - y = normalize( y, this.array ); - z = normalize( z, this.array ); - - } - - this.array[ index + 0 ] = x; - this.array[ index + 1 ] = y; - this.array[ index + 2 ] = z; - - return this; - - } - - setXYZW( index, x, y, z, w ) { - - index *= this.itemSize; - - if ( this.normalized ) { - - x = normalize( x, this.array ); - y = normalize( y, this.array ); - z = normalize( z, this.array ); - w = normalize( w, this.array ); - - } - - this.array[ index + 0 ] = x; - this.array[ index + 1 ] = y; - this.array[ index + 2 ] = z; - this.array[ index + 3 ] = w; - - return this; - - } - - onUpload( callback ) { - - this.onUploadCallback = callback; - - return this; - - } - - clone() { - - return new this.constructor( this.array, this.itemSize ).copy( this ); - - } - - toJSON() { - - const data = { - itemSize: this.itemSize, - type: this.array.constructor.name, - array: Array.from( this.array ), - normalized: this.normalized - }; - - if ( this.name !== '' ) data.name = this.name; - if ( this.usage !== StaticDrawUsage ) data.usage = this.usage; - if ( this.updateRange.offset !== 0 || this.updateRange.count !== - 1 ) data.updateRange = this.updateRange; - - return data; - - } - - // @deprecated - - copyColorsArray() { - - console.error( 'THREE.BufferAttribute: copyColorsArray() was removed in r144.' ); - - } - - copyVector2sArray() { - - console.error( 'THREE.BufferAttribute: copyVector2sArray() was removed in r144.' ); - - } - - copyVector3sArray() { - - console.error( 'THREE.BufferAttribute: copyVector3sArray() was removed in r144.' ); - - } - - copyVector4sArray() { - - console.error( 'THREE.BufferAttribute: copyVector4sArray() was removed in r144.' ); - - } - - } - - // - - class Int8BufferAttribute extends BufferAttribute { - - constructor( array, itemSize, normalized ) { - - super( new Int8Array( array ), itemSize, normalized ); - - } - - } - - class Uint8BufferAttribute extends BufferAttribute { - - constructor( array, itemSize, normalized ) { - - super( new Uint8Array( array ), itemSize, normalized ); - - } - - } - - class Uint8ClampedBufferAttribute extends BufferAttribute { - - constructor( array, itemSize, normalized ) { - - super( new Uint8ClampedArray( array ), itemSize, normalized ); - - } - - } - - class Int16BufferAttribute extends BufferAttribute { - - constructor( array, itemSize, normalized ) { - - super( new Int16Array( array ), itemSize, normalized ); - - } - - } - - class Uint16BufferAttribute extends BufferAttribute { - - constructor( array, itemSize, normalized ) { - - super( new Uint16Array( array ), itemSize, normalized ); - - } - - } - - class Int32BufferAttribute extends BufferAttribute { - - constructor( array, itemSize, normalized ) { - - super( new Int32Array( array ), itemSize, normalized ); - - } - - } - - class Uint32BufferAttribute extends BufferAttribute { - - constructor( array, itemSize, normalized ) { - - super( new Uint32Array( array ), itemSize, normalized ); - - } - - } - - class Float16BufferAttribute extends BufferAttribute { - - constructor( array, itemSize, normalized ) { - - super( new Uint16Array( array ), itemSize, normalized ); - - this.isFloat16BufferAttribute = true; - - } - - } - - - class Float32BufferAttribute extends BufferAttribute { - - constructor( array, itemSize, normalized ) { - - super( new Float32Array( array ), itemSize, normalized ); - - } - - } - - class Float64BufferAttribute extends BufferAttribute { - - constructor( array, itemSize, normalized ) { - - super( new Float64Array( array ), itemSize, normalized ); - - } - - } - - let _id$1 = 0; - - const _m1 = /*@__PURE__*/ new Matrix4(); - const _obj = /*@__PURE__*/ new Object3D(); - const _offset = /*@__PURE__*/ new Vector3(); - const _box$1 = /*@__PURE__*/ new Box3(); - const _boxMorphTargets = /*@__PURE__*/ new Box3(); - const _vector$8 = /*@__PURE__*/ new Vector3(); - - class BufferGeometry extends EventDispatcher { - - constructor() { - - super(); - - this.isBufferGeometry = true; - - Object.defineProperty( this, 'id', { value: _id$1 ++ } ); - - this.uuid = generateUUID(); - - this.name = ''; - this.type = 'BufferGeometry'; - - this.index = null; - this.attributes = {}; - - this.morphAttributes = {}; - this.morphTargetsRelative = false; - - this.groups = []; - - this.boundingBox = null; - this.boundingSphere = null; - - this.drawRange = { start: 0, count: Infinity }; - - this.userData = {}; - - } - - getIndex() { - - return this.index; - - } - - setIndex( index ) { - - if ( Array.isArray( index ) ) { - - this.index = new ( arrayNeedsUint32( index ) ? Uint32BufferAttribute : Uint16BufferAttribute )( index, 1 ); - - } else { - - this.index = index; - - } - - return this; - - } - - getAttribute( name ) { - - return this.attributes[ name ]; - - } - - setAttribute( name, attribute ) { - - this.attributes[ name ] = attribute; - - return this; - - } - - deleteAttribute( name ) { - - delete this.attributes[ name ]; - - return this; - - } - - hasAttribute( name ) { - - return this.attributes[ name ] !== undefined; - - } - - addGroup( start, count, materialIndex = 0 ) { - - this.groups.push( { - - start: start, - count: count, - materialIndex: materialIndex - - } ); - - } - - clearGroups() { - - this.groups = []; - - } - - setDrawRange( start, count ) { - - this.drawRange.start = start; - this.drawRange.count = count; - - } - - applyMatrix4( matrix ) { - - const position = this.attributes.position; - - if ( position !== undefined ) { - - position.applyMatrix4( matrix ); - - position.needsUpdate = true; - - } - - const normal = this.attributes.normal; - - if ( normal !== undefined ) { - - const normalMatrix = new Matrix3().getNormalMatrix( matrix ); - - normal.applyNormalMatrix( normalMatrix ); - - normal.needsUpdate = true; - - } - - const tangent = this.attributes.tangent; - - if ( tangent !== undefined ) { - - tangent.transformDirection( matrix ); - - tangent.needsUpdate = true; - - } - - if ( this.boundingBox !== null ) { - - this.computeBoundingBox(); - - } - - if ( this.boundingSphere !== null ) { - - this.computeBoundingSphere(); - - } - - return this; - - } - - applyQuaternion( q ) { - - _m1.makeRotationFromQuaternion( q ); - - this.applyMatrix4( _m1 ); - - return this; - - } - - rotateX( angle ) { - - // rotate geometry around world x-axis - - _m1.makeRotationX( angle ); - - this.applyMatrix4( _m1 ); - - return this; - - } - - rotateY( angle ) { - - // rotate geometry around world y-axis - - _m1.makeRotationY( angle ); - - this.applyMatrix4( _m1 ); - - return this; - - } - - rotateZ( angle ) { - - // rotate geometry around world z-axis - - _m1.makeRotationZ( angle ); - - this.applyMatrix4( _m1 ); - - return this; - - } - - translate( x, y, z ) { - - // translate geometry - - _m1.makeTranslation( x, y, z ); - - this.applyMatrix4( _m1 ); - - return this; - - } - - scale( x, y, z ) { - - // scale geometry - - _m1.makeScale( x, y, z ); - - this.applyMatrix4( _m1 ); - - return this; - - } - - lookAt( vector ) { - - _obj.lookAt( vector ); - - _obj.updateMatrix(); - - this.applyMatrix4( _obj.matrix ); - - return this; - - } - - center() { - - this.computeBoundingBox(); - - this.boundingBox.getCenter( _offset ).negate(); - - this.translate( _offset.x, _offset.y, _offset.z ); - - return this; - - } - - setFromPoints( points ) { - - const position = []; - - for ( let i = 0, l = points.length; i < l; i ++ ) { - - const point = points[ i ]; - position.push( point.x, point.y, point.z || 0 ); - - } - - this.setAttribute( 'position', new Float32BufferAttribute( position, 3 ) ); - - return this; - - } - - computeBoundingBox() { - - if ( this.boundingBox === null ) { - - this.boundingBox = new Box3(); - - } - - const position = this.attributes.position; - const morphAttributesPosition = this.morphAttributes.position; - - if ( position && position.isGLBufferAttribute ) { - - console.error( 'THREE.BufferGeometry.computeBoundingBox(): GLBufferAttribute requires a manual bounding box. Alternatively set "mesh.frustumCulled" to "false".', this ); - - this.boundingBox.set( - new Vector3( - Infinity, - Infinity, - Infinity ), - new Vector3( + Infinity, + Infinity, + Infinity ) - ); - - return; - - } - - if ( position !== undefined ) { - - this.boundingBox.setFromBufferAttribute( position ); - - // process morph attributes if present - - if ( morphAttributesPosition ) { - - for ( let i = 0, il = morphAttributesPosition.length; i < il; i ++ ) { - - const morphAttribute = morphAttributesPosition[ i ]; - _box$1.setFromBufferAttribute( morphAttribute ); - - if ( this.morphTargetsRelative ) { - - _vector$8.addVectors( this.boundingBox.min, _box$1.min ); - this.boundingBox.expandByPoint( _vector$8 ); - - _vector$8.addVectors( this.boundingBox.max, _box$1.max ); - this.boundingBox.expandByPoint( _vector$8 ); - - } else { - - this.boundingBox.expandByPoint( _box$1.min ); - this.boundingBox.expandByPoint( _box$1.max ); - - } - - } - - } - - } else { - - this.boundingBox.makeEmpty(); - - } - - if ( isNaN( this.boundingBox.min.x ) || isNaN( this.boundingBox.min.y ) || isNaN( this.boundingBox.min.z ) ) { - - console.error( 'THREE.BufferGeometry.computeBoundingBox(): Computed min/max have NaN values. The "position" attribute is likely to have NaN values.', this ); - - } - - } - - computeBoundingSphere() { - - if ( this.boundingSphere === null ) { - - this.boundingSphere = new Sphere(); - - } - - const position = this.attributes.position; - const morphAttributesPosition = this.morphAttributes.position; - - if ( position && position.isGLBufferAttribute ) { - - console.error( 'THREE.BufferGeometry.computeBoundingSphere(): GLBufferAttribute requires a manual bounding sphere. Alternatively set "mesh.frustumCulled" to "false".', this ); - - this.boundingSphere.set( new Vector3(), Infinity ); - - return; - - } - - if ( position ) { - - // first, find the center of the bounding sphere - - const center = this.boundingSphere.center; - - _box$1.setFromBufferAttribute( position ); - - // process morph attributes if present - - if ( morphAttributesPosition ) { - - for ( let i = 0, il = morphAttributesPosition.length; i < il; i ++ ) { - - const morphAttribute = morphAttributesPosition[ i ]; - _boxMorphTargets.setFromBufferAttribute( morphAttribute ); - - if ( this.morphTargetsRelative ) { - - _vector$8.addVectors( _box$1.min, _boxMorphTargets.min ); - _box$1.expandByPoint( _vector$8 ); - - _vector$8.addVectors( _box$1.max, _boxMorphTargets.max ); - _box$1.expandByPoint( _vector$8 ); - - } else { - - _box$1.expandByPoint( _boxMorphTargets.min ); - _box$1.expandByPoint( _boxMorphTargets.max ); - - } - - } - - } - - _box$1.getCenter( center ); - - // second, try to find a boundingSphere with a radius smaller than the - // boundingSphere of the boundingBox: sqrt(3) smaller in the best case - - let maxRadiusSq = 0; - - for ( let i = 0, il = position.count; i < il; i ++ ) { - - _vector$8.fromBufferAttribute( position, i ); - - maxRadiusSq = Math.max( maxRadiusSq, center.distanceToSquared( _vector$8 ) ); - - } - - // process morph attributes if present - - if ( morphAttributesPosition ) { - - for ( let i = 0, il = morphAttributesPosition.length; i < il; i ++ ) { - - const morphAttribute = morphAttributesPosition[ i ]; - const morphTargetsRelative = this.morphTargetsRelative; - - for ( let j = 0, jl = morphAttribute.count; j < jl; j ++ ) { - - _vector$8.fromBufferAttribute( morphAttribute, j ); - - if ( morphTargetsRelative ) { - - _offset.fromBufferAttribute( position, j ); - _vector$8.add( _offset ); - - } - - maxRadiusSq = Math.max( maxRadiusSq, center.distanceToSquared( _vector$8 ) ); - - } - - } - - } - - this.boundingSphere.radius = Math.sqrt( maxRadiusSq ); - - if ( isNaN( this.boundingSphere.radius ) ) { - - console.error( 'THREE.BufferGeometry.computeBoundingSphere(): Computed radius is NaN. The "position" attribute is likely to have NaN values.', this ); - - } - - } - - } - - computeTangents() { - - const index = this.index; - const attributes = this.attributes; - - // based on http://www.terathon.com/code/tangent.html - // (per vertex tangents) - - if ( index === null || - attributes.position === undefined || - attributes.normal === undefined || - attributes.uv === undefined ) { - - console.error( 'THREE.BufferGeometry: .computeTangents() failed. Missing required attributes (index, position, normal or uv)' ); - return; - - } - - const indices = index.array; - const positions = attributes.position.array; - const normals = attributes.normal.array; - const uvs = attributes.uv.array; - - const nVertices = positions.length / 3; - - if ( this.hasAttribute( 'tangent' ) === false ) { - - this.setAttribute( 'tangent', new BufferAttribute( new Float32Array( 4 * nVertices ), 4 ) ); - - } - - const tangents = this.getAttribute( 'tangent' ).array; - - const tan1 = [], tan2 = []; - - for ( let i = 0; i < nVertices; i ++ ) { - - tan1[ i ] = new Vector3(); - tan2[ i ] = new Vector3(); - - } - - const vA = new Vector3(), - vB = new Vector3(), - vC = new Vector3(), - - uvA = new Vector2(), - uvB = new Vector2(), - uvC = new Vector2(), - - sdir = new Vector3(), - tdir = new Vector3(); - - function handleTriangle( a, b, c ) { - - vA.fromArray( positions, a * 3 ); - vB.fromArray( positions, b * 3 ); - vC.fromArray( positions, c * 3 ); - - uvA.fromArray( uvs, a * 2 ); - uvB.fromArray( uvs, b * 2 ); - uvC.fromArray( uvs, c * 2 ); - - vB.sub( vA ); - vC.sub( vA ); - - uvB.sub( uvA ); - uvC.sub( uvA ); - - const r = 1.0 / ( uvB.x * uvC.y - uvC.x * uvB.y ); - - // silently ignore degenerate uv triangles having coincident or colinear vertices - - if ( ! isFinite( r ) ) return; - - sdir.copy( vB ).multiplyScalar( uvC.y ).addScaledVector( vC, - uvB.y ).multiplyScalar( r ); - tdir.copy( vC ).multiplyScalar( uvB.x ).addScaledVector( vB, - uvC.x ).multiplyScalar( r ); - - tan1[ a ].add( sdir ); - tan1[ b ].add( sdir ); - tan1[ c ].add( sdir ); - - tan2[ a ].add( tdir ); - tan2[ b ].add( tdir ); - tan2[ c ].add( tdir ); - - } - - let groups = this.groups; - - if ( groups.length === 0 ) { - - groups = [ { - start: 0, - count: indices.length - } ]; - - } - - for ( let i = 0, il = groups.length; i < il; ++ i ) { - - const group = groups[ i ]; - - const start = group.start; - const count = group.count; - - for ( let j = start, jl = start + count; j < jl; j += 3 ) { - - handleTriangle( - indices[ j + 0 ], - indices[ j + 1 ], - indices[ j + 2 ] - ); - - } - - } - - const tmp = new Vector3(), tmp2 = new Vector3(); - const n = new Vector3(), n2 = new Vector3(); - - function handleVertex( v ) { - - n.fromArray( normals, v * 3 ); - n2.copy( n ); - - const t = tan1[ v ]; - - // Gram-Schmidt orthogonalize - - tmp.copy( t ); - tmp.sub( n.multiplyScalar( n.dot( t ) ) ).normalize(); - - // Calculate handedness - - tmp2.crossVectors( n2, t ); - const test = tmp2.dot( tan2[ v ] ); - const w = ( test < 0.0 ) ? - 1.0 : 1.0; - - tangents[ v * 4 ] = tmp.x; - tangents[ v * 4 + 1 ] = tmp.y; - tangents[ v * 4 + 2 ] = tmp.z; - tangents[ v * 4 + 3 ] = w; - - } - - for ( let i = 0, il = groups.length; i < il; ++ i ) { - - const group = groups[ i ]; - - const start = group.start; - const count = group.count; - - for ( let j = start, jl = start + count; j < jl; j += 3 ) { - - handleVertex( indices[ j + 0 ] ); - handleVertex( indices[ j + 1 ] ); - handleVertex( indices[ j + 2 ] ); - - } - - } - - } - - computeVertexNormals() { - - const index = this.index; - const positionAttribute = this.getAttribute( 'position' ); - - if ( positionAttribute !== undefined ) { - - let normalAttribute = this.getAttribute( 'normal' ); - - if ( normalAttribute === undefined ) { - - normalAttribute = new BufferAttribute( new Float32Array( positionAttribute.count * 3 ), 3 ); - this.setAttribute( 'normal', normalAttribute ); - - } else { - - // reset existing normals to zero - - for ( let i = 0, il = normalAttribute.count; i < il; i ++ ) { - - normalAttribute.setXYZ( i, 0, 0, 0 ); - - } - - } - - const pA = new Vector3(), pB = new Vector3(), pC = new Vector3(); - const nA = new Vector3(), nB = new Vector3(), nC = new Vector3(); - const cb = new Vector3(), ab = new Vector3(); - - // indexed elements - - if ( index ) { - - for ( let i = 0, il = index.count; i < il; i += 3 ) { - - const vA = index.getX( i + 0 ); - const vB = index.getX( i + 1 ); - const vC = index.getX( i + 2 ); - - pA.fromBufferAttribute( positionAttribute, vA ); - pB.fromBufferAttribute( positionAttribute, vB ); - pC.fromBufferAttribute( positionAttribute, vC ); - - cb.subVectors( pC, pB ); - ab.subVectors( pA, pB ); - cb.cross( ab ); - - nA.fromBufferAttribute( normalAttribute, vA ); - nB.fromBufferAttribute( normalAttribute, vB ); - nC.fromBufferAttribute( normalAttribute, vC ); - - nA.add( cb ); - nB.add( cb ); - nC.add( cb ); - - normalAttribute.setXYZ( vA, nA.x, nA.y, nA.z ); - normalAttribute.setXYZ( vB, nB.x, nB.y, nB.z ); - normalAttribute.setXYZ( vC, nC.x, nC.y, nC.z ); - - } - - } else { - - // non-indexed elements (unconnected triangle soup) - - for ( let i = 0, il = positionAttribute.count; i < il; i += 3 ) { - - pA.fromBufferAttribute( positionAttribute, i + 0 ); - pB.fromBufferAttribute( positionAttribute, i + 1 ); - pC.fromBufferAttribute( positionAttribute, i + 2 ); - - cb.subVectors( pC, pB ); - ab.subVectors( pA, pB ); - cb.cross( ab ); - - normalAttribute.setXYZ( i + 0, cb.x, cb.y, cb.z ); - normalAttribute.setXYZ( i + 1, cb.x, cb.y, cb.z ); - normalAttribute.setXYZ( i + 2, cb.x, cb.y, cb.z ); - - } - - } - - this.normalizeNormals(); - - normalAttribute.needsUpdate = true; - - } - - } - - // @deprecated since r144 - - merge() { - - console.error( 'THREE.BufferGeometry.merge() has been removed. Use THREE.BufferGeometryUtils.mergeBufferGeometries() instead.' ); - return this; - - } - - normalizeNormals() { - - const normals = this.attributes.normal; - - for ( let i = 0, il = normals.count; i < il; i ++ ) { - - _vector$8.fromBufferAttribute( normals, i ); - - _vector$8.normalize(); - - normals.setXYZ( i, _vector$8.x, _vector$8.y, _vector$8.z ); - - } - - } - - toNonIndexed() { - - function convertBufferAttribute( attribute, indices ) { - - const array = attribute.array; - const itemSize = attribute.itemSize; - const normalized = attribute.normalized; - - const array2 = new array.constructor( indices.length * itemSize ); - - let index = 0, index2 = 0; - - for ( let i = 0, l = indices.length; i < l; i ++ ) { - - if ( attribute.isInterleavedBufferAttribute ) { - - index = indices[ i ] * attribute.data.stride + attribute.offset; - - } else { - - index = indices[ i ] * itemSize; - - } - - for ( let j = 0; j < itemSize; j ++ ) { - - array2[ index2 ++ ] = array[ index ++ ]; - - } - - } - - return new BufferAttribute( array2, itemSize, normalized ); - - } - - // - - if ( this.index === null ) { - - console.warn( 'THREE.BufferGeometry.toNonIndexed(): BufferGeometry is already non-indexed.' ); - return this; - - } - - const geometry2 = new BufferGeometry(); - - const indices = this.index.array; - const attributes = this.attributes; - - // attributes - - for ( const name in attributes ) { - - const attribute = attributes[ name ]; - - const newAttribute = convertBufferAttribute( attribute, indices ); - - geometry2.setAttribute( name, newAttribute ); - - } - - // morph attributes - - const morphAttributes = this.morphAttributes; - - for ( const name in morphAttributes ) { - - const morphArray = []; - const morphAttribute = morphAttributes[ name ]; // morphAttribute: array of Float32BufferAttributes - - for ( let i = 0, il = morphAttribute.length; i < il; i ++ ) { - - const attribute = morphAttribute[ i ]; - - const newAttribute = convertBufferAttribute( attribute, indices ); - - morphArray.push( newAttribute ); - - } - - geometry2.morphAttributes[ name ] = morphArray; - - } - - geometry2.morphTargetsRelative = this.morphTargetsRelative; - - // groups - - const groups = this.groups; - - for ( let i = 0, l = groups.length; i < l; i ++ ) { - - const group = groups[ i ]; - geometry2.addGroup( group.start, group.count, group.materialIndex ); - - } - - return geometry2; - - } - - toJSON() { - - const data = { - metadata: { - version: 4.5, - type: 'BufferGeometry', - generator: 'BufferGeometry.toJSON' - } - }; - - // standard BufferGeometry serialization - - data.uuid = this.uuid; - data.type = this.type; - if ( this.name !== '' ) data.name = this.name; - if ( Object.keys( this.userData ).length > 0 ) data.userData = this.userData; - - if ( this.parameters !== undefined ) { - - const parameters = this.parameters; - - for ( const key in parameters ) { - - if ( parameters[ key ] !== undefined ) data[ key ] = parameters[ key ]; - - } - - return data; - - } - - // for simplicity the code assumes attributes are not shared across geometries, see #15811 - - data.data = { attributes: {} }; - - const index = this.index; - - if ( index !== null ) { - - data.data.index = { - type: index.array.constructor.name, - array: Array.prototype.slice.call( index.array ) - }; - - } - - const attributes = this.attributes; - - for ( const key in attributes ) { - - const attribute = attributes[ key ]; - - data.data.attributes[ key ] = attribute.toJSON( data.data ); - - } - - const morphAttributes = {}; - let hasMorphAttributes = false; - - for ( const key in this.morphAttributes ) { - - const attributeArray = this.morphAttributes[ key ]; - - const array = []; - - for ( let i = 0, il = attributeArray.length; i < il; i ++ ) { - - const attribute = attributeArray[ i ]; - - array.push( attribute.toJSON( data.data ) ); - - } - - if ( array.length > 0 ) { - - morphAttributes[ key ] = array; - - hasMorphAttributes = true; - - } - - } - - if ( hasMorphAttributes ) { - - data.data.morphAttributes = morphAttributes; - data.data.morphTargetsRelative = this.morphTargetsRelative; - - } - - const groups = this.groups; - - if ( groups.length > 0 ) { - - data.data.groups = JSON.parse( JSON.stringify( groups ) ); - - } - - const boundingSphere = this.boundingSphere; - - if ( boundingSphere !== null ) { - - data.data.boundingSphere = { - center: boundingSphere.center.toArray(), - radius: boundingSphere.radius - }; - - } - - return data; - - } - - clone() { - - return new this.constructor().copy( this ); - - } - - copy( source ) { - - // reset - - this.index = null; - this.attributes = {}; - this.morphAttributes = {}; - this.groups = []; - this.boundingBox = null; - this.boundingSphere = null; - - // used for storing cloned, shared data - - const data = {}; - - // name - - this.name = source.name; - - // index - - const index = source.index; - - if ( index !== null ) { - - this.setIndex( index.clone( data ) ); - - } - - // attributes - - const attributes = source.attributes; - - for ( const name in attributes ) { - - const attribute = attributes[ name ]; - this.setAttribute( name, attribute.clone( data ) ); - - } - - // morph attributes - - const morphAttributes = source.morphAttributes; - - for ( const name in morphAttributes ) { - - const array = []; - const morphAttribute = morphAttributes[ name ]; // morphAttribute: array of Float32BufferAttributes - - for ( let i = 0, l = morphAttribute.length; i < l; i ++ ) { - - array.push( morphAttribute[ i ].clone( data ) ); - - } - - this.morphAttributes[ name ] = array; - - } - - this.morphTargetsRelative = source.morphTargetsRelative; - - // groups - - const groups = source.groups; - - for ( let i = 0, l = groups.length; i < l; i ++ ) { - - const group = groups[ i ]; - this.addGroup( group.start, group.count, group.materialIndex ); - - } - - // bounding box - - const boundingBox = source.boundingBox; - - if ( boundingBox !== null ) { - - this.boundingBox = boundingBox.clone(); - - } - - // bounding sphere - - const boundingSphere = source.boundingSphere; - - if ( boundingSphere !== null ) { - - this.boundingSphere = boundingSphere.clone(); - - } - - // draw range - - this.drawRange.start = source.drawRange.start; - this.drawRange.count = source.drawRange.count; - - // user data - - this.userData = source.userData; - - return this; - - } - - dispose() { - - this.dispatchEvent( { type: 'dispose' } ); - - } - - } - - const _inverseMatrix$2 = /*@__PURE__*/ new Matrix4(); - const _ray$2 = /*@__PURE__*/ new Ray(); - const _sphere$3 = /*@__PURE__*/ new Sphere(); - const _sphereHitAt = /*@__PURE__*/ new Vector3(); - - const _vA$1 = /*@__PURE__*/ new Vector3(); - const _vB$1 = /*@__PURE__*/ new Vector3(); - const _vC$1 = /*@__PURE__*/ new Vector3(); - - const _tempA = /*@__PURE__*/ new Vector3(); - const _morphA = /*@__PURE__*/ new Vector3(); - - const _uvA$1 = /*@__PURE__*/ new Vector2(); - const _uvB$1 = /*@__PURE__*/ new Vector2(); - const _uvC$1 = /*@__PURE__*/ new Vector2(); - - const _intersectionPoint = /*@__PURE__*/ new Vector3(); - const _intersectionPointWorld = /*@__PURE__*/ new Vector3(); - - class Mesh extends Object3D { - - constructor( geometry = new BufferGeometry(), material = new MeshBasicMaterial() ) { - - super(); - - this.isMesh = true; - - this.type = 'Mesh'; - - this.geometry = geometry; - this.material = material; - - this.updateMorphTargets(); - - } - - copy( source, recursive ) { - - super.copy( source, recursive ); - - if ( source.morphTargetInfluences !== undefined ) { - - this.morphTargetInfluences = source.morphTargetInfluences.slice(); - - } - - if ( source.morphTargetDictionary !== undefined ) { - - this.morphTargetDictionary = Object.assign( {}, source.morphTargetDictionary ); - - } - - this.material = source.material; - this.geometry = source.geometry; - - return this; - - } - - updateMorphTargets() { - - const geometry = this.geometry; - - const morphAttributes = geometry.morphAttributes; - const keys = Object.keys( morphAttributes ); - - if ( keys.length > 0 ) { - - const morphAttribute = morphAttributes[ keys[ 0 ] ]; - - if ( morphAttribute !== undefined ) { - - this.morphTargetInfluences = []; - this.morphTargetDictionary = {}; - - for ( let m = 0, ml = morphAttribute.length; m < ml; m ++ ) { - - const name = morphAttribute[ m ].name || String( m ); - - this.morphTargetInfluences.push( 0 ); - this.morphTargetDictionary[ name ] = m; - - } - - } - - } - - } - - getVertexPosition( index, target ) { - - const geometry = this.geometry; - const position = geometry.attributes.position; - const morphPosition = geometry.morphAttributes.position; - const morphTargetsRelative = geometry.morphTargetsRelative; - - target.fromBufferAttribute( position, index ); - - const morphInfluences = this.morphTargetInfluences; - - if ( morphPosition && morphInfluences ) { - - _morphA.set( 0, 0, 0 ); - - for ( let i = 0, il = morphPosition.length; i < il; i ++ ) { - - const influence = morphInfluences[ i ]; - const morphAttribute = morphPosition[ i ]; - - if ( influence === 0 ) continue; - - _tempA.fromBufferAttribute( morphAttribute, index ); - - if ( morphTargetsRelative ) { - - _morphA.addScaledVector( _tempA, influence ); - - } else { - - _morphA.addScaledVector( _tempA.sub( target ), influence ); - - } - - } - - target.add( _morphA ); - - } - - if ( this.isSkinnedMesh ) { - - this.boneTransform( index, target ); - - } - - return target; - - } - - raycast( raycaster, intersects ) { - - const geometry = this.geometry; - const material = this.material; - const matrixWorld = this.matrixWorld; - - if ( material === undefined ) return; - - // Checking boundingSphere distance to ray - - if ( geometry.boundingSphere === null ) geometry.computeBoundingSphere(); - - _sphere$3.copy( geometry.boundingSphere ); - _sphere$3.applyMatrix4( matrixWorld ); - - _ray$2.copy( raycaster.ray ).recast( raycaster.near ); - - if ( _sphere$3.containsPoint( _ray$2.origin ) === false ) { - - if ( _ray$2.intersectSphere( _sphere$3, _sphereHitAt ) === null ) return; - - if ( _ray$2.origin.distanceToSquared( _sphereHitAt ) > ( raycaster.far - raycaster.near ) ** 2 ) return; - - } - - // - - _inverseMatrix$2.copy( matrixWorld ).invert(); - _ray$2.copy( raycaster.ray ).applyMatrix4( _inverseMatrix$2 ); - - // Check boundingBox before continuing - - if ( geometry.boundingBox !== null ) { - - if ( _ray$2.intersectsBox( geometry.boundingBox ) === false ) return; - - } - - let intersection; - - const index = geometry.index; - const position = geometry.attributes.position; - const uv = geometry.attributes.uv; - const uv2 = geometry.attributes.uv2; - const groups = geometry.groups; - const drawRange = geometry.drawRange; - - if ( index !== null ) { - - // indexed buffer geometry - - if ( Array.isArray( material ) ) { - - for ( let i = 0, il = groups.length; i < il; i ++ ) { - - const group = groups[ i ]; - const groupMaterial = material[ group.materialIndex ]; - - const start = Math.max( group.start, drawRange.start ); - const end = Math.min( index.count, Math.min( ( group.start + group.count ), ( drawRange.start + drawRange.count ) ) ); - - for ( let j = start, jl = end; j < jl; j += 3 ) { - - const a = index.getX( j ); - const b = index.getX( j + 1 ); - const c = index.getX( j + 2 ); - - intersection = checkBufferGeometryIntersection( this, groupMaterial, raycaster, _ray$2, uv, uv2, a, b, c ); - - if ( intersection ) { - - intersection.faceIndex = Math.floor( j / 3 ); // triangle number in indexed buffer semantics - intersection.face.materialIndex = group.materialIndex; - intersects.push( intersection ); - - } - - } - - } - - } else { - - const start = Math.max( 0, drawRange.start ); - const end = Math.min( index.count, ( drawRange.start + drawRange.count ) ); - - for ( let i = start, il = end; i < il; i += 3 ) { - - const a = index.getX( i ); - const b = index.getX( i + 1 ); - const c = index.getX( i + 2 ); - - intersection = checkBufferGeometryIntersection( this, material, raycaster, _ray$2, uv, uv2, a, b, c ); - - if ( intersection ) { - - intersection.faceIndex = Math.floor( i / 3 ); // triangle number in indexed buffer semantics - intersects.push( intersection ); - - } - - } - - } - - } else if ( position !== undefined ) { - - // non-indexed buffer geometry - - if ( Array.isArray( material ) ) { - - for ( let i = 0, il = groups.length; i < il; i ++ ) { - - const group = groups[ i ]; - const groupMaterial = material[ group.materialIndex ]; - - const start = Math.max( group.start, drawRange.start ); - const end = Math.min( position.count, Math.min( ( group.start + group.count ), ( drawRange.start + drawRange.count ) ) ); - - for ( let j = start, jl = end; j < jl; j += 3 ) { - - const a = j; - const b = j + 1; - const c = j + 2; - - intersection = checkBufferGeometryIntersection( this, groupMaterial, raycaster, _ray$2, uv, uv2, a, b, c ); - - if ( intersection ) { - - intersection.faceIndex = Math.floor( j / 3 ); // triangle number in non-indexed buffer semantics - intersection.face.materialIndex = group.materialIndex; - intersects.push( intersection ); - - } - - } - - } - - } else { - - const start = Math.max( 0, drawRange.start ); - const end = Math.min( position.count, ( drawRange.start + drawRange.count ) ); - - for ( let i = start, il = end; i < il; i += 3 ) { - - const a = i; - const b = i + 1; - const c = i + 2; - - intersection = checkBufferGeometryIntersection( this, material, raycaster, _ray$2, uv, uv2, a, b, c ); - - if ( intersection ) { - - intersection.faceIndex = Math.floor( i / 3 ); // triangle number in non-indexed buffer semantics - intersects.push( intersection ); - - } - - } - - } - - } - - } - - } - - function checkIntersection( object, material, raycaster, ray, pA, pB, pC, point ) { - - let intersect; - - if ( material.side === BackSide ) { - - intersect = ray.intersectTriangle( pC, pB, pA, true, point ); - - } else { - - intersect = ray.intersectTriangle( pA, pB, pC, ( material.side === FrontSide ), point ); - - } - - if ( intersect === null ) return null; - - _intersectionPointWorld.copy( point ); - _intersectionPointWorld.applyMatrix4( object.matrixWorld ); - - const distance = raycaster.ray.origin.distanceTo( _intersectionPointWorld ); - - if ( distance < raycaster.near || distance > raycaster.far ) return null; - - return { - distance: distance, - point: _intersectionPointWorld.clone(), - object: object - }; - - } - - function checkBufferGeometryIntersection( object, material, raycaster, ray, uv, uv2, a, b, c ) { - - object.getVertexPosition( a, _vA$1 ); - object.getVertexPosition( b, _vB$1 ); - object.getVertexPosition( c, _vC$1 ); - - const intersection = checkIntersection( object, material, raycaster, ray, _vA$1, _vB$1, _vC$1, _intersectionPoint ); - - if ( intersection ) { - - if ( uv ) { - - _uvA$1.fromBufferAttribute( uv, a ); - _uvB$1.fromBufferAttribute( uv, b ); - _uvC$1.fromBufferAttribute( uv, c ); - - intersection.uv = Triangle.getUV( _intersectionPoint, _vA$1, _vB$1, _vC$1, _uvA$1, _uvB$1, _uvC$1, new Vector2() ); - - } - - if ( uv2 ) { - - _uvA$1.fromBufferAttribute( uv2, a ); - _uvB$1.fromBufferAttribute( uv2, b ); - _uvC$1.fromBufferAttribute( uv2, c ); - - intersection.uv2 = Triangle.getUV( _intersectionPoint, _vA$1, _vB$1, _vC$1, _uvA$1, _uvB$1, _uvC$1, new Vector2() ); - - } - - const face = { - a: a, - b: b, - c: c, - normal: new Vector3(), - materialIndex: 0 - }; - - Triangle.getNormal( _vA$1, _vB$1, _vC$1, face.normal ); - - intersection.face = face; - - } - - return intersection; - - } - - class BoxGeometry extends BufferGeometry { - - constructor( width = 1, height = 1, depth = 1, widthSegments = 1, heightSegments = 1, depthSegments = 1 ) { - - super(); - - this.type = 'BoxGeometry'; - - this.parameters = { - width: width, - height: height, - depth: depth, - widthSegments: widthSegments, - heightSegments: heightSegments, - depthSegments: depthSegments - }; - - const scope = this; - - // segments - - widthSegments = Math.floor( widthSegments ); - heightSegments = Math.floor( heightSegments ); - depthSegments = Math.floor( depthSegments ); - - // buffers - - const indices = []; - const vertices = []; - const normals = []; - const uvs = []; - - // helper variables - - let numberOfVertices = 0; - let groupStart = 0; - - // build each side of the box geometry - - buildPlane( 'z', 'y', 'x', - 1, - 1, depth, height, width, depthSegments, heightSegments, 0 ); // px - buildPlane( 'z', 'y', 'x', 1, - 1, depth, height, - width, depthSegments, heightSegments, 1 ); // nx - buildPlane( 'x', 'z', 'y', 1, 1, width, depth, height, widthSegments, depthSegments, 2 ); // py - buildPlane( 'x', 'z', 'y', 1, - 1, width, depth, - height, widthSegments, depthSegments, 3 ); // ny - buildPlane( 'x', 'y', 'z', 1, - 1, width, height, depth, widthSegments, heightSegments, 4 ); // pz - buildPlane( 'x', 'y', 'z', - 1, - 1, width, height, - depth, widthSegments, heightSegments, 5 ); // nz - - // build geometry - - this.setIndex( indices ); - this.setAttribute( 'position', new Float32BufferAttribute( vertices, 3 ) ); - this.setAttribute( 'normal', new Float32BufferAttribute( normals, 3 ) ); - this.setAttribute( 'uv', new Float32BufferAttribute( uvs, 2 ) ); - - function buildPlane( u, v, w, udir, vdir, width, height, depth, gridX, gridY, materialIndex ) { - - const segmentWidth = width / gridX; - const segmentHeight = height / gridY; - - const widthHalf = width / 2; - const heightHalf = height / 2; - const depthHalf = depth / 2; - - const gridX1 = gridX + 1; - const gridY1 = gridY + 1; - - let vertexCounter = 0; - let groupCount = 0; - - const vector = new Vector3(); - - // generate vertices, normals and uvs - - for ( let iy = 0; iy < gridY1; iy ++ ) { - - const y = iy * segmentHeight - heightHalf; - - for ( let ix = 0; ix < gridX1; ix ++ ) { - - const x = ix * segmentWidth - widthHalf; - - // set values to correct vector component - - vector[ u ] = x * udir; - vector[ v ] = y * vdir; - vector[ w ] = depthHalf; - - // now apply vector to vertex buffer - - vertices.push( vector.x, vector.y, vector.z ); - - // set values to correct vector component - - vector[ u ] = 0; - vector[ v ] = 0; - vector[ w ] = depth > 0 ? 1 : - 1; - - // now apply vector to normal buffer - - normals.push( vector.x, vector.y, vector.z ); - - // uvs - - uvs.push( ix / gridX ); - uvs.push( 1 - ( iy / gridY ) ); - - // counters - - vertexCounter += 1; - - } - - } - - // indices - - // 1. you need three indices to draw a single face - // 2. a single segment consists of two faces - // 3. so we need to generate six (2*3) indices per segment - - for ( let iy = 0; iy < gridY; iy ++ ) { - - for ( let ix = 0; ix < gridX; ix ++ ) { - - const a = numberOfVertices + ix + gridX1 * iy; - const b = numberOfVertices + ix + gridX1 * ( iy + 1 ); - const c = numberOfVertices + ( ix + 1 ) + gridX1 * ( iy + 1 ); - const d = numberOfVertices + ( ix + 1 ) + gridX1 * iy; - - // faces - - indices.push( a, b, d ); - indices.push( b, c, d ); - - // increase counter - - groupCount += 6; - - } - - } - - // add a group to the geometry. this will ensure multi material support - - scope.addGroup( groupStart, groupCount, materialIndex ); - - // calculate new start value for groups - - groupStart += groupCount; - - // update total number of vertices - - numberOfVertices += vertexCounter; - - } - - } - - copy( source ) { - - super.copy( source ); - - this.parameters = Object.assign( {}, source.parameters ); - - return this; - - } - - static fromJSON( data ) { - - return new BoxGeometry( data.width, data.height, data.depth, data.widthSegments, data.heightSegments, data.depthSegments ); - - } - - } - - /** - * Uniform Utilities - */ - - function cloneUniforms( src ) { - - const dst = {}; - - for ( const u in src ) { - - dst[ u ] = {}; - - for ( const p in src[ u ] ) { - - const property = src[ u ][ p ]; - - if ( property && ( property.isColor || - property.isMatrix3 || property.isMatrix4 || - property.isVector2 || property.isVector3 || property.isVector4 || - property.isTexture || property.isQuaternion ) ) { - - dst[ u ][ p ] = property.clone(); - - } else if ( Array.isArray( property ) ) { - - dst[ u ][ p ] = property.slice(); - - } else { - - dst[ u ][ p ] = property; - - } - - } - - } - - return dst; - - } - - function mergeUniforms( uniforms ) { - - const merged = {}; - - for ( let u = 0; u < uniforms.length; u ++ ) { - - const tmp = cloneUniforms( uniforms[ u ] ); - - for ( const p in tmp ) { - - merged[ p ] = tmp[ p ]; - - } - - } - - return merged; - - } - - function cloneUniformsGroups( src ) { - - const dst = []; - - for ( let u = 0; u < src.length; u ++ ) { - - dst.push( src[ u ].clone() ); - - } - - return dst; - - } - - function getUnlitUniformColorSpace( renderer ) { - - if ( renderer.getRenderTarget() === null ) { - - // https://github.com/mrdoob/three.js/pull/23937#issuecomment-1111067398 - return renderer.outputEncoding === sRGBEncoding ? SRGBColorSpace : LinearSRGBColorSpace; - - } - - return LinearSRGBColorSpace; - - } - - // Legacy - - const UniformsUtils = { clone: cloneUniforms, merge: mergeUniforms }; - - var default_vertex = "void main() {\n\tgl_Position = projectionMatrix * modelViewMatrix * vec4( position, 1.0 );\n}"; - - var default_fragment = "void main() {\n\tgl_FragColor = vec4( 1.0, 0.0, 0.0, 1.0 );\n}"; - - class ShaderMaterial extends Material { - - constructor( parameters ) { - - super(); - - this.isShaderMaterial = true; - - this.type = 'ShaderMaterial'; - - this.defines = {}; - this.uniforms = {}; - this.uniformsGroups = []; - - this.vertexShader = default_vertex; - this.fragmentShader = default_fragment; - - this.linewidth = 1; - - this.wireframe = false; - this.wireframeLinewidth = 1; - - this.fog = false; // set to use scene fog - this.lights = false; // set to use scene lights - this.clipping = false; // set to use user-defined clipping planes - - this.extensions = { - derivatives: false, // set to use derivatives - fragDepth: false, // set to use fragment depth values - drawBuffers: false, // set to use draw buffers - shaderTextureLOD: false // set to use shader texture LOD - }; - - // When rendered geometry doesn't include these attributes but the material does, - // use these default values in WebGL. This avoids errors when buffer data is missing. - this.defaultAttributeValues = { - 'color': [ 1, 1, 1 ], - 'uv': [ 0, 0 ], - 'uv2': [ 0, 0 ] - }; - - this.index0AttributeName = undefined; - this.uniformsNeedUpdate = false; - - this.glslVersion = null; - - if ( parameters !== undefined ) { - - this.setValues( parameters ); - - } - - } - - copy( source ) { - - super.copy( source ); - - this.fragmentShader = source.fragmentShader; - this.vertexShader = source.vertexShader; - - this.uniforms = cloneUniforms( source.uniforms ); - this.uniformsGroups = cloneUniformsGroups( source.uniformsGroups ); - - this.defines = Object.assign( {}, source.defines ); - - this.wireframe = source.wireframe; - this.wireframeLinewidth = source.wireframeLinewidth; - - this.fog = source.fog; - this.lights = source.lights; - this.clipping = source.clipping; - - this.extensions = Object.assign( {}, source.extensions ); - - this.glslVersion = source.glslVersion; - - return this; - - } - - toJSON( meta ) { - - const data = super.toJSON( meta ); - - data.glslVersion = this.glslVersion; - data.uniforms = {}; - - for ( const name in this.uniforms ) { - - const uniform = this.uniforms[ name ]; - const value = uniform.value; - - if ( value && value.isTexture ) { - - data.uniforms[ name ] = { - type: 't', - value: value.toJSON( meta ).uuid - }; - - } else if ( value && value.isColor ) { - - data.uniforms[ name ] = { - type: 'c', - value: value.getHex() - }; - - } else if ( value && value.isVector2 ) { - - data.uniforms[ name ] = { - type: 'v2', - value: value.toArray() - }; - - } else if ( value && value.isVector3 ) { - - data.uniforms[ name ] = { - type: 'v3', - value: value.toArray() - }; - - } else if ( value && value.isVector4 ) { - - data.uniforms[ name ] = { - type: 'v4', - value: value.toArray() - }; - - } else if ( value && value.isMatrix3 ) { - - data.uniforms[ name ] = { - type: 'm3', - value: value.toArray() - }; - - } else if ( value && value.isMatrix4 ) { - - data.uniforms[ name ] = { - type: 'm4', - value: value.toArray() - }; - - } else { - - data.uniforms[ name ] = { - value: value - }; - - // note: the array variants v2v, v3v, v4v, m4v and tv are not supported so far - - } - - } - - if ( Object.keys( this.defines ).length > 0 ) data.defines = this.defines; - - data.vertexShader = this.vertexShader; - data.fragmentShader = this.fragmentShader; - - const extensions = {}; - - for ( const key in this.extensions ) { - - if ( this.extensions[ key ] === true ) extensions[ key ] = true; - - } - - if ( Object.keys( extensions ).length > 0 ) data.extensions = extensions; - - return data; - - } - - } - - class Camera extends Object3D { - - constructor() { - - super(); - - this.isCamera = true; - - this.type = 'Camera'; - - this.matrixWorldInverse = new Matrix4(); - - this.projectionMatrix = new Matrix4(); - this.projectionMatrixInverse = new Matrix4(); - - } - - copy( source, recursive ) { - - super.copy( source, recursive ); - - this.matrixWorldInverse.copy( source.matrixWorldInverse ); - - this.projectionMatrix.copy( source.projectionMatrix ); - this.projectionMatrixInverse.copy( source.projectionMatrixInverse ); - - return this; - - } - - getWorldDirection( target ) { - - this.updateWorldMatrix( true, false ); - - const e = this.matrixWorld.elements; - - return target.set( - e[ 8 ], - e[ 9 ], - e[ 10 ] ).normalize(); - - } - - updateMatrixWorld( force ) { - - super.updateMatrixWorld( force ); - - this.matrixWorldInverse.copy( this.matrixWorld ).invert(); - - } - - updateWorldMatrix( updateParents, updateChildren ) { - - super.updateWorldMatrix( updateParents, updateChildren ); - - this.matrixWorldInverse.copy( this.matrixWorld ).invert(); - - } - - clone() { - - return new this.constructor().copy( this ); - - } - - } - - class PerspectiveCamera extends Camera { - - constructor( fov = 50, aspect = 1, near = 0.1, far = 2000 ) { - - super(); - - this.isPerspectiveCamera = true; - - this.type = 'PerspectiveCamera'; - - this.fov = fov; - this.zoom = 1; - - this.near = near; - this.far = far; - this.focus = 10; - - this.aspect = aspect; - this.view = null; - - this.filmGauge = 35; // width of the film (default in millimeters) - this.filmOffset = 0; // horizontal film offset (same unit as gauge) - - this.updateProjectionMatrix(); - - } - - copy( source, recursive ) { - - super.copy( source, recursive ); - - this.fov = source.fov; - this.zoom = source.zoom; - - this.near = source.near; - this.far = source.far; - this.focus = source.focus; - - this.aspect = source.aspect; - this.view = source.view === null ? null : Object.assign( {}, source.view ); - - this.filmGauge = source.filmGauge; - this.filmOffset = source.filmOffset; - - return this; - - } - - /** - * Sets the FOV by focal length in respect to the current .filmGauge. - * - * The default film gauge is 35, so that the focal length can be specified for - * a 35mm (full frame) camera. - * - * Values for focal length and film gauge must have the same unit. - */ - setFocalLength( focalLength ) { - - /** see {@link http://www.bobatkins.com/photography/technical/field_of_view.html} */ - const vExtentSlope = 0.5 * this.getFilmHeight() / focalLength; - - this.fov = RAD2DEG * 2 * Math.atan( vExtentSlope ); - this.updateProjectionMatrix(); - - } - - /** - * Calculates the focal length from the current .fov and .filmGauge. - */ - getFocalLength() { - - const vExtentSlope = Math.tan( DEG2RAD * 0.5 * this.fov ); - - return 0.5 * this.getFilmHeight() / vExtentSlope; - - } - - getEffectiveFOV() { - - return RAD2DEG * 2 * Math.atan( - Math.tan( DEG2RAD * 0.5 * this.fov ) / this.zoom ); - - } - - getFilmWidth() { - - // film not completely covered in portrait format (aspect < 1) - return this.filmGauge * Math.min( this.aspect, 1 ); - - } - - getFilmHeight() { - - // film not completely covered in landscape format (aspect > 1) - return this.filmGauge / Math.max( this.aspect, 1 ); - - } - - /** - * Sets an offset in a larger frustum. This is useful for multi-window or - * multi-monitor/multi-machine setups. - * - * For example, if you have 3x2 monitors and each monitor is 1920x1080 and - * the monitors are in grid like this - * - * +---+---+---+ - * | A | B | C | - * +---+---+---+ - * | D | E | F | - * +---+---+---+ - * - * then for each monitor you would call it like this - * - * const w = 1920; - * const h = 1080; - * const fullWidth = w * 3; - * const fullHeight = h * 2; - * - * --A-- - * camera.setViewOffset( fullWidth, fullHeight, w * 0, h * 0, w, h ); - * --B-- - * camera.setViewOffset( fullWidth, fullHeight, w * 1, h * 0, w, h ); - * --C-- - * camera.setViewOffset( fullWidth, fullHeight, w * 2, h * 0, w, h ); - * --D-- - * camera.setViewOffset( fullWidth, fullHeight, w * 0, h * 1, w, h ); - * --E-- - * camera.setViewOffset( fullWidth, fullHeight, w * 1, h * 1, w, h ); - * --F-- - * camera.setViewOffset( fullWidth, fullHeight, w * 2, h * 1, w, h ); - * - * Note there is no reason monitors have to be the same size or in a grid. - */ - setViewOffset( fullWidth, fullHeight, x, y, width, height ) { - - this.aspect = fullWidth / fullHeight; - - if ( this.view === null ) { - - this.view = { - enabled: true, - fullWidth: 1, - fullHeight: 1, - offsetX: 0, - offsetY: 0, - width: 1, - height: 1 - }; - - } - - this.view.enabled = true; - this.view.fullWidth = fullWidth; - this.view.fullHeight = fullHeight; - this.view.offsetX = x; - this.view.offsetY = y; - this.view.width = width; - this.view.height = height; - - this.updateProjectionMatrix(); - - } - - clearViewOffset() { - - if ( this.view !== null ) { - - this.view.enabled = false; - - } - - this.updateProjectionMatrix(); - - } - - updateProjectionMatrix() { - - const near = this.near; - let top = near * Math.tan( DEG2RAD * 0.5 * this.fov ) / this.zoom; - let height = 2 * top; - let width = this.aspect * height; - let left = - 0.5 * width; - const view = this.view; - - if ( this.view !== null && this.view.enabled ) { - - const fullWidth = view.fullWidth, - fullHeight = view.fullHeight; - - left += view.offsetX * width / fullWidth; - top -= view.offsetY * height / fullHeight; - width *= view.width / fullWidth; - height *= view.height / fullHeight; - - } - - const skew = this.filmOffset; - if ( skew !== 0 ) left += near * skew / this.getFilmWidth(); - - this.projectionMatrix.makePerspective( left, left + width, top, top - height, near, this.far ); - - this.projectionMatrixInverse.copy( this.projectionMatrix ).invert(); - - } - - toJSON( meta ) { - - const data = super.toJSON( meta ); - - data.object.fov = this.fov; - data.object.zoom = this.zoom; - - data.object.near = this.near; - data.object.far = this.far; - data.object.focus = this.focus; - - data.object.aspect = this.aspect; - - if ( this.view !== null ) data.object.view = Object.assign( {}, this.view ); - - data.object.filmGauge = this.filmGauge; - data.object.filmOffset = this.filmOffset; - - return data; - - } - - } - - const fov = - 90; // negative fov is not an error - const aspect = 1; - - class CubeCamera extends Object3D { - - constructor( near, far, renderTarget ) { - - super(); - - this.type = 'CubeCamera'; - - this.renderTarget = renderTarget; - - const cameraPX = new PerspectiveCamera( fov, aspect, near, far ); - cameraPX.layers = this.layers; - cameraPX.up.set( 0, 1, 0 ); - cameraPX.lookAt( 1, 0, 0 ); - this.add( cameraPX ); - - const cameraNX = new PerspectiveCamera( fov, aspect, near, far ); - cameraNX.layers = this.layers; - cameraNX.up.set( 0, 1, 0 ); - cameraNX.lookAt( - 1, 0, 0 ); - this.add( cameraNX ); - - const cameraPY = new PerspectiveCamera( fov, aspect, near, far ); - cameraPY.layers = this.layers; - cameraPY.up.set( 0, 0, - 1 ); - cameraPY.lookAt( 0, 1, 0 ); - this.add( cameraPY ); - - const cameraNY = new PerspectiveCamera( fov, aspect, near, far ); - cameraNY.layers = this.layers; - cameraNY.up.set( 0, 0, 1 ); - cameraNY.lookAt( 0, - 1, 0 ); - this.add( cameraNY ); - - const cameraPZ = new PerspectiveCamera( fov, aspect, near, far ); - cameraPZ.layers = this.layers; - cameraPZ.up.set( 0, 1, 0 ); - cameraPZ.lookAt( 0, 0, 1 ); - this.add( cameraPZ ); - - const cameraNZ = new PerspectiveCamera( fov, aspect, near, far ); - cameraNZ.layers = this.layers; - cameraNZ.up.set( 0, 1, 0 ); - cameraNZ.lookAt( 0, 0, - 1 ); - this.add( cameraNZ ); - - } - - update( renderer, scene ) { - - if ( this.parent === null ) this.updateMatrixWorld(); - - const renderTarget = this.renderTarget; - - const [ cameraPX, cameraNX, cameraPY, cameraNY, cameraPZ, cameraNZ ] = this.children; - - const currentRenderTarget = renderer.getRenderTarget(); - - const currentToneMapping = renderer.toneMapping; - const currentXrEnabled = renderer.xr.enabled; - - renderer.toneMapping = NoToneMapping; - renderer.xr.enabled = false; - - const generateMipmaps = renderTarget.texture.generateMipmaps; - - renderTarget.texture.generateMipmaps = false; - - renderer.setRenderTarget( renderTarget, 0 ); - renderer.render( scene, cameraPX ); - - renderer.setRenderTarget( renderTarget, 1 ); - renderer.render( scene, cameraNX ); - - renderer.setRenderTarget( renderTarget, 2 ); - renderer.render( scene, cameraPY ); - - renderer.setRenderTarget( renderTarget, 3 ); - renderer.render( scene, cameraNY ); - - renderer.setRenderTarget( renderTarget, 4 ); - renderer.render( scene, cameraPZ ); - - renderTarget.texture.generateMipmaps = generateMipmaps; - - renderer.setRenderTarget( renderTarget, 5 ); - renderer.render( scene, cameraNZ ); - - renderer.setRenderTarget( currentRenderTarget ); - - renderer.toneMapping = currentToneMapping; - renderer.xr.enabled = currentXrEnabled; - - renderTarget.texture.needsPMREMUpdate = true; - - } - - } - - class CubeTexture extends Texture { - - constructor( images, mapping, wrapS, wrapT, magFilter, minFilter, format, type, anisotropy, encoding ) { - - images = images !== undefined ? images : []; - mapping = mapping !== undefined ? mapping : CubeReflectionMapping; - - super( images, mapping, wrapS, wrapT, magFilter, minFilter, format, type, anisotropy, encoding ); - - this.isCubeTexture = true; - - this.flipY = false; - - } - - get images() { - - return this.image; - - } - - set images( value ) { - - this.image = value; - - } - - } - - class WebGLCubeRenderTarget extends WebGLRenderTarget { - - constructor( size = 1, options = {} ) { - - super( size, size, options ); - - this.isWebGLCubeRenderTarget = true; - - const image = { width: size, height: size, depth: 1 }; - const images = [ image, image, image, image, image, image ]; - - this.texture = new CubeTexture( images, options.mapping, options.wrapS, options.wrapT, options.magFilter, options.minFilter, options.format, options.type, options.anisotropy, options.encoding ); - - // By convention -- likely based on the RenderMan spec from the 1990's -- cube maps are specified by WebGL (and three.js) - // in a coordinate system in which positive-x is to the right when looking up the positive-z axis -- in other words, - // in a left-handed coordinate system. By continuing this convention, preexisting cube maps continued to render correctly. - - // three.js uses a right-handed coordinate system. So environment maps used in three.js appear to have px and nx swapped - // and the flag isRenderTargetTexture controls this conversion. The flip is not required when using WebGLCubeRenderTarget.texture - // as a cube texture (this is detected when isRenderTargetTexture is set to true for cube textures). - - this.texture.isRenderTargetTexture = true; - - this.texture.generateMipmaps = options.generateMipmaps !== undefined ? options.generateMipmaps : false; - this.texture.minFilter = options.minFilter !== undefined ? options.minFilter : LinearFilter; - - } - - fromEquirectangularTexture( renderer, texture ) { - - this.texture.type = texture.type; - this.texture.encoding = texture.encoding; - - this.texture.generateMipmaps = texture.generateMipmaps; - this.texture.minFilter = texture.minFilter; - this.texture.magFilter = texture.magFilter; - - const shader = { - - uniforms: { - tEquirect: { value: null }, - }, - - vertexShader: /* glsl */` - - varying vec3 vWorldDirection; - - vec3 transformDirection( in vec3 dir, in mat4 matrix ) { - - return normalize( ( matrix * vec4( dir, 0.0 ) ).xyz ); - - } - - void main() { - - vWorldDirection = transformDirection( position, modelMatrix ); - - #include - #include - - } - `, - - fragmentShader: /* glsl */` - - uniform sampler2D tEquirect; - - varying vec3 vWorldDirection; - - #include - - void main() { - - vec3 direction = normalize( vWorldDirection ); - - vec2 sampleUV = equirectUv( direction ); - - gl_FragColor = texture2D( tEquirect, sampleUV ); - - } - ` - }; - - const geometry = new BoxGeometry( 5, 5, 5 ); - - const material = new ShaderMaterial( { - - name: 'CubemapFromEquirect', - - uniforms: cloneUniforms( shader.uniforms ), - vertexShader: shader.vertexShader, - fragmentShader: shader.fragmentShader, - side: BackSide, - blending: NoBlending - - } ); - - material.uniforms.tEquirect.value = texture; - - const mesh = new Mesh( geometry, material ); - - const currentMinFilter = texture.minFilter; - - // Avoid blurred poles - if ( texture.minFilter === LinearMipmapLinearFilter ) texture.minFilter = LinearFilter; - - const camera = new CubeCamera( 1, 10, this ); - camera.update( renderer, mesh ); - - texture.minFilter = currentMinFilter; - - mesh.geometry.dispose(); - mesh.material.dispose(); - - return this; - - } - - clear( renderer, color, depth, stencil ) { - - const currentRenderTarget = renderer.getRenderTarget(); - - for ( let i = 0; i < 6; i ++ ) { - - renderer.setRenderTarget( this, i ); - - renderer.clear( color, depth, stencil ); - - } - - renderer.setRenderTarget( currentRenderTarget ); - - } - - } - - const _vector1 = /*@__PURE__*/ new Vector3(); - const _vector2 = /*@__PURE__*/ new Vector3(); - const _normalMatrix = /*@__PURE__*/ new Matrix3(); - - class Plane { - - constructor( normal = new Vector3( 1, 0, 0 ), constant = 0 ) { - - this.isPlane = true; - - // normal is assumed to be normalized - - this.normal = normal; - this.constant = constant; - - } - - set( normal, constant ) { - - this.normal.copy( normal ); - this.constant = constant; - - return this; - - } - - setComponents( x, y, z, w ) { - - this.normal.set( x, y, z ); - this.constant = w; - - return this; - - } - - setFromNormalAndCoplanarPoint( normal, point ) { - - this.normal.copy( normal ); - this.constant = - point.dot( this.normal ); - - return this; - - } - - setFromCoplanarPoints( a, b, c ) { - - const normal = _vector1.subVectors( c, b ).cross( _vector2.subVectors( a, b ) ).normalize(); - - // Q: should an error be thrown if normal is zero (e.g. degenerate plane)? - - this.setFromNormalAndCoplanarPoint( normal, a ); - - return this; - - } - - copy( plane ) { - - this.normal.copy( plane.normal ); - this.constant = plane.constant; - - return this; - - } - - normalize() { - - // Note: will lead to a divide by zero if the plane is invalid. - - const inverseNormalLength = 1.0 / this.normal.length(); - this.normal.multiplyScalar( inverseNormalLength ); - this.constant *= inverseNormalLength; - - return this; - - } - - negate() { - - this.constant *= - 1; - this.normal.negate(); - - return this; - - } - - distanceToPoint( point ) { - - return this.normal.dot( point ) + this.constant; - - } - - distanceToSphere( sphere ) { - - return this.distanceToPoint( sphere.center ) - sphere.radius; - - } - - projectPoint( point, target ) { - - return target.copy( point ).addScaledVector( this.normal, - this.distanceToPoint( point ) ); - - } - - intersectLine( line, target ) { - - const direction = line.delta( _vector1 ); - - const denominator = this.normal.dot( direction ); - - if ( denominator === 0 ) { - - // line is coplanar, return origin - if ( this.distanceToPoint( line.start ) === 0 ) { - - return target.copy( line.start ); - - } - - // Unsure if this is the correct method to handle this case. - return null; - - } - - const t = - ( line.start.dot( this.normal ) + this.constant ) / denominator; - - if ( t < 0 || t > 1 ) { - - return null; - - } - - return target.copy( line.start ).addScaledVector( direction, t ); - - } - - intersectsLine( line ) { - - // Note: this tests if a line intersects the plane, not whether it (or its end-points) are coplanar with it. - - const startSign = this.distanceToPoint( line.start ); - const endSign = this.distanceToPoint( line.end ); - - return ( startSign < 0 && endSign > 0 ) || ( endSign < 0 && startSign > 0 ); - - } - - intersectsBox( box ) { - - return box.intersectsPlane( this ); - - } - - intersectsSphere( sphere ) { - - return sphere.intersectsPlane( this ); - - } - - coplanarPoint( target ) { - - return target.copy( this.normal ).multiplyScalar( - this.constant ); - - } - - applyMatrix4( matrix, optionalNormalMatrix ) { - - const normalMatrix = optionalNormalMatrix || _normalMatrix.getNormalMatrix( matrix ); - - const referencePoint = this.coplanarPoint( _vector1 ).applyMatrix4( matrix ); - - const normal = this.normal.applyMatrix3( normalMatrix ).normalize(); - - this.constant = - referencePoint.dot( normal ); - - return this; - - } - - translate( offset ) { - - this.constant -= offset.dot( this.normal ); - - return this; - - } - - equals( plane ) { - - return plane.normal.equals( this.normal ) && ( plane.constant === this.constant ); - - } - - clone() { - - return new this.constructor().copy( this ); - - } - - } - - const _sphere$2 = /*@__PURE__*/ new Sphere(); - const _vector$7 = /*@__PURE__*/ new Vector3(); - - class Frustum { - - constructor( p0 = new Plane(), p1 = new Plane(), p2 = new Plane(), p3 = new Plane(), p4 = new Plane(), p5 = new Plane() ) { - - this.planes = [ p0, p1, p2, p3, p4, p5 ]; - - } - - set( p0, p1, p2, p3, p4, p5 ) { - - const planes = this.planes; - - planes[ 0 ].copy( p0 ); - planes[ 1 ].copy( p1 ); - planes[ 2 ].copy( p2 ); - planes[ 3 ].copy( p3 ); - planes[ 4 ].copy( p4 ); - planes[ 5 ].copy( p5 ); - - return this; - - } - - copy( frustum ) { - - const planes = this.planes; - - for ( let i = 0; i < 6; i ++ ) { - - planes[ i ].copy( frustum.planes[ i ] ); - - } - - return this; - - } - - setFromProjectionMatrix( m ) { - - const planes = this.planes; - const me = m.elements; - const me0 = me[ 0 ], me1 = me[ 1 ], me2 = me[ 2 ], me3 = me[ 3 ]; - const me4 = me[ 4 ], me5 = me[ 5 ], me6 = me[ 6 ], me7 = me[ 7 ]; - const me8 = me[ 8 ], me9 = me[ 9 ], me10 = me[ 10 ], me11 = me[ 11 ]; - const me12 = me[ 12 ], me13 = me[ 13 ], me14 = me[ 14 ], me15 = me[ 15 ]; - - planes[ 0 ].setComponents( me3 - me0, me7 - me4, me11 - me8, me15 - me12 ).normalize(); - planes[ 1 ].setComponents( me3 + me0, me7 + me4, me11 + me8, me15 + me12 ).normalize(); - planes[ 2 ].setComponents( me3 + me1, me7 + me5, me11 + me9, me15 + me13 ).normalize(); - planes[ 3 ].setComponents( me3 - me1, me7 - me5, me11 - me9, me15 - me13 ).normalize(); - planes[ 4 ].setComponents( me3 - me2, me7 - me6, me11 - me10, me15 - me14 ).normalize(); - planes[ 5 ].setComponents( me3 + me2, me7 + me6, me11 + me10, me15 + me14 ).normalize(); - - return this; - - } - - intersectsObject( object ) { - - const geometry = object.geometry; - - if ( geometry.boundingSphere === null ) geometry.computeBoundingSphere(); - - _sphere$2.copy( geometry.boundingSphere ).applyMatrix4( object.matrixWorld ); - - return this.intersectsSphere( _sphere$2 ); - - } - - intersectsSprite( sprite ) { - - _sphere$2.center.set( 0, 0, 0 ); - _sphere$2.radius = 0.7071067811865476; - _sphere$2.applyMatrix4( sprite.matrixWorld ); - - return this.intersectsSphere( _sphere$2 ); - - } - - intersectsSphere( sphere ) { - - const planes = this.planes; - const center = sphere.center; - const negRadius = - sphere.radius; - - for ( let i = 0; i < 6; i ++ ) { - - const distance = planes[ i ].distanceToPoint( center ); - - if ( distance < negRadius ) { - - return false; - - } - - } - - return true; - - } - - intersectsBox( box ) { - - const planes = this.planes; - - for ( let i = 0; i < 6; i ++ ) { - - const plane = planes[ i ]; - - // corner at max distance - - _vector$7.x = plane.normal.x > 0 ? box.max.x : box.min.x; - _vector$7.y = plane.normal.y > 0 ? box.max.y : box.min.y; - _vector$7.z = plane.normal.z > 0 ? box.max.z : box.min.z; - - if ( plane.distanceToPoint( _vector$7 ) < 0 ) { - - return false; - - } - - } - - return true; - - } - - containsPoint( point ) { - - const planes = this.planes; - - for ( let i = 0; i < 6; i ++ ) { - - if ( planes[ i ].distanceToPoint( point ) < 0 ) { - - return false; - - } - - } - - return true; - - } - - clone() { - - return new this.constructor().copy( this ); - - } - - } - - function WebGLAnimation() { - - let context = null; - let isAnimating = false; - let animationLoop = null; - let requestId = null; - - function onAnimationFrame( time, frame ) { - - animationLoop( time, frame ); - - requestId = context.requestAnimationFrame( onAnimationFrame ); - - } - - return { - - start: function () { - - if ( isAnimating === true ) return; - if ( animationLoop === null ) return; - - requestId = context.requestAnimationFrame( onAnimationFrame ); - - isAnimating = true; - - }, - - stop: function () { - - context.cancelAnimationFrame( requestId ); - - isAnimating = false; - - }, - - setAnimationLoop: function ( callback ) { - - animationLoop = callback; - - }, - - setContext: function ( value ) { - - context = value; - - } - - }; - - } - - function WebGLAttributes( gl, capabilities ) { - - const isWebGL2 = capabilities.isWebGL2; - - const buffers = new WeakMap(); - - function createBuffer( attribute, bufferType ) { - - const array = attribute.array; - const usage = attribute.usage; - - const buffer = gl.createBuffer(); - - gl.bindBuffer( bufferType, buffer ); - gl.bufferData( bufferType, array, usage ); - - attribute.onUploadCallback(); - - let type; - - if ( array instanceof Float32Array ) { - - type = gl.FLOAT; - - } else if ( array instanceof Uint16Array ) { - - if ( attribute.isFloat16BufferAttribute ) { - - if ( isWebGL2 ) { - - type = gl.HALF_FLOAT; - - } else { - - throw new Error( 'THREE.WebGLAttributes: Usage of Float16BufferAttribute requires WebGL2.' ); - - } - - } else { - - type = gl.UNSIGNED_SHORT; - - } - - } else if ( array instanceof Int16Array ) { - - type = gl.SHORT; - - } else if ( array instanceof Uint32Array ) { - - type = gl.UNSIGNED_INT; - - } else if ( array instanceof Int32Array ) { - - type = gl.INT; - - } else if ( array instanceof Int8Array ) { - - type = gl.BYTE; - - } else if ( array instanceof Uint8Array ) { - - type = gl.UNSIGNED_BYTE; - - } else if ( array instanceof Uint8ClampedArray ) { - - type = gl.UNSIGNED_BYTE; - - } else { - - throw new Error( 'THREE.WebGLAttributes: Unsupported buffer data format: ' + array ); - - } - - return { - buffer: buffer, - type: type, - bytesPerElement: array.BYTES_PER_ELEMENT, - version: attribute.version - }; - - } - - function updateBuffer( buffer, attribute, bufferType ) { - - const array = attribute.array; - const updateRange = attribute.updateRange; - - gl.bindBuffer( bufferType, buffer ); - - if ( updateRange.count === - 1 ) { - - // Not using update ranges - - gl.bufferSubData( bufferType, 0, array ); - - } else { - - if ( isWebGL2 ) { - - gl.bufferSubData( bufferType, updateRange.offset * array.BYTES_PER_ELEMENT, - array, updateRange.offset, updateRange.count ); - - } else { - - gl.bufferSubData( bufferType, updateRange.offset * array.BYTES_PER_ELEMENT, - array.subarray( updateRange.offset, updateRange.offset + updateRange.count ) ); - - } - - updateRange.count = - 1; // reset range - - } - - attribute.onUploadCallback(); - - } - - // - - function get( attribute ) { - - if ( attribute.isInterleavedBufferAttribute ) attribute = attribute.data; - - return buffers.get( attribute ); - - } - - function remove( attribute ) { - - if ( attribute.isInterleavedBufferAttribute ) attribute = attribute.data; - - const data = buffers.get( attribute ); - - if ( data ) { - - gl.deleteBuffer( data.buffer ); - - buffers.delete( attribute ); - - } - - } - - function update( attribute, bufferType ) { - - if ( attribute.isGLBufferAttribute ) { - - const cached = buffers.get( attribute ); - - if ( ! cached || cached.version < attribute.version ) { - - buffers.set( attribute, { - buffer: attribute.buffer, - type: attribute.type, - bytesPerElement: attribute.elementSize, - version: attribute.version - } ); - - } - - return; - - } - - if ( attribute.isInterleavedBufferAttribute ) attribute = attribute.data; - - const data = buffers.get( attribute ); - - if ( data === undefined ) { - - buffers.set( attribute, createBuffer( attribute, bufferType ) ); - - } else if ( data.version < attribute.version ) { - - updateBuffer( data.buffer, attribute, bufferType ); - - data.version = attribute.version; - - } - - } - - return { - - get: get, - remove: remove, - update: update - - }; - - } - - class PlaneGeometry extends BufferGeometry { - - constructor( width = 1, height = 1, widthSegments = 1, heightSegments = 1 ) { - - super(); - - this.type = 'PlaneGeometry'; - - this.parameters = { - width: width, - height: height, - widthSegments: widthSegments, - heightSegments: heightSegments - }; - - const width_half = width / 2; - const height_half = height / 2; - - const gridX = Math.floor( widthSegments ); - const gridY = Math.floor( heightSegments ); - - const gridX1 = gridX + 1; - const gridY1 = gridY + 1; - - const segment_width = width / gridX; - const segment_height = height / gridY; - - // - - const indices = []; - const vertices = []; - const normals = []; - const uvs = []; - - for ( let iy = 0; iy < gridY1; iy ++ ) { - - const y = iy * segment_height - height_half; - - for ( let ix = 0; ix < gridX1; ix ++ ) { - - const x = ix * segment_width - width_half; - - vertices.push( x, - y, 0 ); - - normals.push( 0, 0, 1 ); - - uvs.push( ix / gridX ); - uvs.push( 1 - ( iy / gridY ) ); - - } - - } - - for ( let iy = 0; iy < gridY; iy ++ ) { - - for ( let ix = 0; ix < gridX; ix ++ ) { - - const a = ix + gridX1 * iy; - const b = ix + gridX1 * ( iy + 1 ); - const c = ( ix + 1 ) + gridX1 * ( iy + 1 ); - const d = ( ix + 1 ) + gridX1 * iy; - - indices.push( a, b, d ); - indices.push( b, c, d ); - - } - - } - - this.setIndex( indices ); - this.setAttribute( 'position', new Float32BufferAttribute( vertices, 3 ) ); - this.setAttribute( 'normal', new Float32BufferAttribute( normals, 3 ) ); - this.setAttribute( 'uv', new Float32BufferAttribute( uvs, 2 ) ); - - } - - copy( source ) { - - super.copy( source ); - - this.parameters = Object.assign( {}, source.parameters ); - - return this; - - } - - static fromJSON( data ) { - - return new PlaneGeometry( data.width, data.height, data.widthSegments, data.heightSegments ); - - } - - } - - var alphamap_fragment = "#ifdef USE_ALPHAMAP\n\tdiffuseColor.a *= texture2D( alphaMap, vUv ).g;\n#endif"; - - var alphamap_pars_fragment = "#ifdef USE_ALPHAMAP\n\tuniform sampler2D alphaMap;\n#endif"; - - var alphatest_fragment = "#ifdef USE_ALPHATEST\n\tif ( diffuseColor.a < alphaTest ) discard;\n#endif"; - - var alphatest_pars_fragment = "#ifdef USE_ALPHATEST\n\tuniform float alphaTest;\n#endif"; - - var aomap_fragment = "#ifdef USE_AOMAP\n\tfloat ambientOcclusion = ( texture2D( aoMap, vUv2 ).r - 1.0 ) * aoMapIntensity + 1.0;\n\treflectedLight.indirectDiffuse *= ambientOcclusion;\n\t#if defined( USE_ENVMAP ) && defined( STANDARD )\n\t\tfloat dotNV = saturate( dot( geometry.normal, geometry.viewDir ) );\n\t\treflectedLight.indirectSpecular *= computeSpecularOcclusion( dotNV, ambientOcclusion, material.roughness );\n\t#endif\n#endif"; - - var aomap_pars_fragment = "#ifdef USE_AOMAP\n\tuniform sampler2D aoMap;\n\tuniform float aoMapIntensity;\n#endif"; - - var begin_vertex = "vec3 transformed = vec3( position );"; - - var beginnormal_vertex = "vec3 objectNormal = vec3( normal );\n#ifdef USE_TANGENT\n\tvec3 objectTangent = vec3( tangent.xyz );\n#endif"; - - var bsdfs = "vec3 BRDF_Lambert( const in vec3 diffuseColor ) {\n\treturn RECIPROCAL_PI * diffuseColor;\n}\nvec3 F_Schlick( const in vec3 f0, const in float f90, const in float dotVH ) {\n\tfloat fresnel = exp2( ( - 5.55473 * dotVH - 6.98316 ) * dotVH );\n\treturn f0 * ( 1.0 - fresnel ) + ( f90 * fresnel );\n}\nfloat F_Schlick( const in float f0, const in float f90, const in float dotVH ) {\n\tfloat fresnel = exp2( ( - 5.55473 * dotVH - 6.98316 ) * dotVH );\n\treturn f0 * ( 1.0 - fresnel ) + ( f90 * fresnel );\n}\nvec3 Schlick_to_F0( const in vec3 f, const in float f90, const in float dotVH ) {\n float x = clamp( 1.0 - dotVH, 0.0, 1.0 );\n float x2 = x * x;\n float x5 = clamp( x * x2 * x2, 0.0, 0.9999 );\n return ( f - vec3( f90 ) * x5 ) / ( 1.0 - x5 );\n}\nfloat V_GGX_SmithCorrelated( const in float alpha, const in float dotNL, const in float dotNV ) {\n\tfloat a2 = pow2( alpha );\n\tfloat gv = dotNL * sqrt( a2 + ( 1.0 - a2 ) * pow2( dotNV ) );\n\tfloat gl = dotNV * sqrt( a2 + ( 1.0 - a2 ) * pow2( dotNL ) );\n\treturn 0.5 / max( gv + gl, EPSILON );\n}\nfloat D_GGX( const in float alpha, const in float dotNH ) {\n\tfloat a2 = pow2( alpha );\n\tfloat denom = pow2( dotNH ) * ( a2 - 1.0 ) + 1.0;\n\treturn RECIPROCAL_PI * a2 / pow2( denom );\n}\nvec3 BRDF_GGX( const in vec3 lightDir, const in vec3 viewDir, const in vec3 normal, const in vec3 f0, const in float f90, const in float roughness ) {\n\tfloat alpha = pow2( roughness );\n\tvec3 halfDir = normalize( lightDir + viewDir );\n\tfloat dotNL = saturate( dot( normal, lightDir ) );\n\tfloat dotNV = saturate( dot( normal, viewDir ) );\n\tfloat dotNH = saturate( dot( normal, halfDir ) );\n\tfloat dotVH = saturate( dot( viewDir, halfDir ) );\n\tvec3 F = F_Schlick( f0, f90, dotVH );\n\tfloat V = V_GGX_SmithCorrelated( alpha, dotNL, dotNV );\n\tfloat D = D_GGX( alpha, dotNH );\n\treturn F * ( V * D );\n}\n#ifdef USE_IRIDESCENCE\n\tvec3 BRDF_GGX_Iridescence( const in vec3 lightDir, const in vec3 viewDir, const in vec3 normal, const in vec3 f0, const in float f90, const in float iridescence, const in vec3 iridescenceFresnel, const in float roughness ) {\n\t\tfloat alpha = pow2( roughness );\n\t\tvec3 halfDir = normalize( lightDir + viewDir );\n\t\tfloat dotNL = saturate( dot( normal, lightDir ) );\n\t\tfloat dotNV = saturate( dot( normal, viewDir ) );\n\t\tfloat dotNH = saturate( dot( normal, halfDir ) );\n\t\tfloat dotVH = saturate( dot( viewDir, halfDir ) );\n\t\tvec3 F = mix( F_Schlick( f0, f90, dotVH ), iridescenceFresnel, iridescence );\n\t\tfloat V = V_GGX_SmithCorrelated( alpha, dotNL, dotNV );\n\t\tfloat D = D_GGX( alpha, dotNH );\n\t\treturn F * ( V * D );\n\t}\n#endif\nvec2 LTC_Uv( const in vec3 N, const in vec3 V, const in float roughness ) {\n\tconst float LUT_SIZE = 64.0;\n\tconst float LUT_SCALE = ( LUT_SIZE - 1.0 ) / LUT_SIZE;\n\tconst float LUT_BIAS = 0.5 / LUT_SIZE;\n\tfloat dotNV = saturate( dot( N, V ) );\n\tvec2 uv = vec2( roughness, sqrt( 1.0 - dotNV ) );\n\tuv = uv * LUT_SCALE + LUT_BIAS;\n\treturn uv;\n}\nfloat LTC_ClippedSphereFormFactor( const in vec3 f ) {\n\tfloat l = length( f );\n\treturn max( ( l * l + f.z ) / ( l + 1.0 ), 0.0 );\n}\nvec3 LTC_EdgeVectorFormFactor( const in vec3 v1, const in vec3 v2 ) {\n\tfloat x = dot( v1, v2 );\n\tfloat y = abs( x );\n\tfloat a = 0.8543985 + ( 0.4965155 + 0.0145206 * y ) * y;\n\tfloat b = 3.4175940 + ( 4.1616724 + y ) * y;\n\tfloat v = a / b;\n\tfloat theta_sintheta = ( x > 0.0 ) ? v : 0.5 * inversesqrt( max( 1.0 - x * x, 1e-7 ) ) - v;\n\treturn cross( v1, v2 ) * theta_sintheta;\n}\nvec3 LTC_Evaluate( const in vec3 N, const in vec3 V, const in vec3 P, const in mat3 mInv, const in vec3 rectCoords[ 4 ] ) {\n\tvec3 v1 = rectCoords[ 1 ] - rectCoords[ 0 ];\n\tvec3 v2 = rectCoords[ 3 ] - rectCoords[ 0 ];\n\tvec3 lightNormal = cross( v1, v2 );\n\tif( dot( lightNormal, P - rectCoords[ 0 ] ) < 0.0 ) return vec3( 0.0 );\n\tvec3 T1, T2;\n\tT1 = normalize( V - N * dot( V, N ) );\n\tT2 = - cross( N, T1 );\n\tmat3 mat = mInv * transposeMat3( mat3( T1, T2, N ) );\n\tvec3 coords[ 4 ];\n\tcoords[ 0 ] = mat * ( rectCoords[ 0 ] - P );\n\tcoords[ 1 ] = mat * ( rectCoords[ 1 ] - P );\n\tcoords[ 2 ] = mat * ( rectCoords[ 2 ] - P );\n\tcoords[ 3 ] = mat * ( rectCoords[ 3 ] - P );\n\tcoords[ 0 ] = normalize( coords[ 0 ] );\n\tcoords[ 1 ] = normalize( coords[ 1 ] );\n\tcoords[ 2 ] = normalize( coords[ 2 ] );\n\tcoords[ 3 ] = normalize( coords[ 3 ] );\n\tvec3 vectorFormFactor = vec3( 0.0 );\n\tvectorFormFactor += LTC_EdgeVectorFormFactor( coords[ 0 ], coords[ 1 ] );\n\tvectorFormFactor += LTC_EdgeVectorFormFactor( coords[ 1 ], coords[ 2 ] );\n\tvectorFormFactor += LTC_EdgeVectorFormFactor( coords[ 2 ], coords[ 3 ] );\n\tvectorFormFactor += LTC_EdgeVectorFormFactor( coords[ 3 ], coords[ 0 ] );\n\tfloat result = LTC_ClippedSphereFormFactor( vectorFormFactor );\n\treturn vec3( result );\n}\nfloat G_BlinnPhong_Implicit( ) {\n\treturn 0.25;\n}\nfloat D_BlinnPhong( const in float shininess, const in float dotNH ) {\n\treturn RECIPROCAL_PI * ( shininess * 0.5 + 1.0 ) * pow( dotNH, shininess );\n}\nvec3 BRDF_BlinnPhong( const in vec3 lightDir, const in vec3 viewDir, const in vec3 normal, const in vec3 specularColor, const in float shininess ) {\n\tvec3 halfDir = normalize( lightDir + viewDir );\n\tfloat dotNH = saturate( dot( normal, halfDir ) );\n\tfloat dotVH = saturate( dot( viewDir, halfDir ) );\n\tvec3 F = F_Schlick( specularColor, 1.0, dotVH );\n\tfloat G = G_BlinnPhong_Implicit( );\n\tfloat D = D_BlinnPhong( shininess, dotNH );\n\treturn F * ( G * D );\n}\n#if defined( USE_SHEEN )\nfloat D_Charlie( float roughness, float dotNH ) {\n\tfloat alpha = pow2( roughness );\n\tfloat invAlpha = 1.0 / alpha;\n\tfloat cos2h = dotNH * dotNH;\n\tfloat sin2h = max( 1.0 - cos2h, 0.0078125 );\n\treturn ( 2.0 + invAlpha ) * pow( sin2h, invAlpha * 0.5 ) / ( 2.0 * PI );\n}\nfloat V_Neubelt( float dotNV, float dotNL ) {\n\treturn saturate( 1.0 / ( 4.0 * ( dotNL + dotNV - dotNL * dotNV ) ) );\n}\nvec3 BRDF_Sheen( const in vec3 lightDir, const in vec3 viewDir, const in vec3 normal, vec3 sheenColor, const in float sheenRoughness ) {\n\tvec3 halfDir = normalize( lightDir + viewDir );\n\tfloat dotNL = saturate( dot( normal, lightDir ) );\n\tfloat dotNV = saturate( dot( normal, viewDir ) );\n\tfloat dotNH = saturate( dot( normal, halfDir ) );\n\tfloat D = D_Charlie( sheenRoughness, dotNH );\n\tfloat V = V_Neubelt( dotNV, dotNL );\n\treturn sheenColor * ( D * V );\n}\n#endif"; - - var iridescence_fragment = "#ifdef USE_IRIDESCENCE\n\tconst mat3 XYZ_TO_REC709 = mat3(\n\t\t 3.2404542, -0.9692660, 0.0556434,\n\t\t-1.5371385, 1.8760108, -0.2040259,\n\t\t-0.4985314, 0.0415560, 1.0572252\n\t);\n\tvec3 Fresnel0ToIor( vec3 fresnel0 ) {\n\t\tvec3 sqrtF0 = sqrt( fresnel0 );\n\t\treturn ( vec3( 1.0 ) + sqrtF0 ) / ( vec3( 1.0 ) - sqrtF0 );\n\t}\n\tvec3 IorToFresnel0( vec3 transmittedIor, float incidentIor ) {\n\t\treturn pow2( ( transmittedIor - vec3( incidentIor ) ) / ( transmittedIor + vec3( incidentIor ) ) );\n\t}\n\tfloat IorToFresnel0( float transmittedIor, float incidentIor ) {\n\t\treturn pow2( ( transmittedIor - incidentIor ) / ( transmittedIor + incidentIor ));\n\t}\n\tvec3 evalSensitivity( float OPD, vec3 shift ) {\n\t\tfloat phase = 2.0 * PI * OPD * 1.0e-9;\n\t\tvec3 val = vec3( 5.4856e-13, 4.4201e-13, 5.2481e-13 );\n\t\tvec3 pos = vec3( 1.6810e+06, 1.7953e+06, 2.2084e+06 );\n\t\tvec3 var = vec3( 4.3278e+09, 9.3046e+09, 6.6121e+09 );\n\t\tvec3 xyz = val * sqrt( 2.0 * PI * var ) * cos( pos * phase + shift ) * exp( - pow2( phase ) * var );\n\t\txyz.x += 9.7470e-14 * sqrt( 2.0 * PI * 4.5282e+09 ) * cos( 2.2399e+06 * phase + shift[ 0 ] ) * exp( - 4.5282e+09 * pow2( phase ) );\n\t\txyz /= 1.0685e-7;\n\t\tvec3 rgb = XYZ_TO_REC709 * xyz;\n\t\treturn rgb;\n\t}\n\tvec3 evalIridescence( float outsideIOR, float eta2, float cosTheta1, float thinFilmThickness, vec3 baseF0 ) {\n\t\tvec3 I;\n\t\tfloat iridescenceIOR = mix( outsideIOR, eta2, smoothstep( 0.0, 0.03, thinFilmThickness ) );\n\t\tfloat sinTheta2Sq = pow2( outsideIOR / iridescenceIOR ) * ( 1.0 - pow2( cosTheta1 ) );\n\t\tfloat cosTheta2Sq = 1.0 - sinTheta2Sq;\n\t\tif ( cosTheta2Sq < 0.0 ) {\n\t\t\t return vec3( 1.0 );\n\t\t}\n\t\tfloat cosTheta2 = sqrt( cosTheta2Sq );\n\t\tfloat R0 = IorToFresnel0( iridescenceIOR, outsideIOR );\n\t\tfloat R12 = F_Schlick( R0, 1.0, cosTheta1 );\n\t\tfloat R21 = R12;\n\t\tfloat T121 = 1.0 - R12;\n\t\tfloat phi12 = 0.0;\n\t\tif ( iridescenceIOR < outsideIOR ) phi12 = PI;\n\t\tfloat phi21 = PI - phi12;\n\t\tvec3 baseIOR = Fresnel0ToIor( clamp( baseF0, 0.0, 0.9999 ) );\t\tvec3 R1 = IorToFresnel0( baseIOR, iridescenceIOR );\n\t\tvec3 R23 = F_Schlick( R1, 1.0, cosTheta2 );\n\t\tvec3 phi23 = vec3( 0.0 );\n\t\tif ( baseIOR[ 0 ] < iridescenceIOR ) phi23[ 0 ] = PI;\n\t\tif ( baseIOR[ 1 ] < iridescenceIOR ) phi23[ 1 ] = PI;\n\t\tif ( baseIOR[ 2 ] < iridescenceIOR ) phi23[ 2 ] = PI;\n\t\tfloat OPD = 2.0 * iridescenceIOR * thinFilmThickness * cosTheta2;\n\t\tvec3 phi = vec3( phi21 ) + phi23;\n\t\tvec3 R123 = clamp( R12 * R23, 1e-5, 0.9999 );\n\t\tvec3 r123 = sqrt( R123 );\n\t\tvec3 Rs = pow2( T121 ) * R23 / ( vec3( 1.0 ) - R123 );\n\t\tvec3 C0 = R12 + Rs;\n\t\tI = C0;\n\t\tvec3 Cm = Rs - T121;\n\t\tfor ( int m = 1; m <= 2; ++ m ) {\n\t\t\tCm *= r123;\n\t\t\tvec3 Sm = 2.0 * evalSensitivity( float( m ) * OPD, float( m ) * phi );\n\t\t\tI += Cm * Sm;\n\t\t}\n\t\treturn max( I, vec3( 0.0 ) );\n\t}\n#endif"; - - var bumpmap_pars_fragment = "#ifdef USE_BUMPMAP\n\tuniform sampler2D bumpMap;\n\tuniform float bumpScale;\n\tvec2 dHdxy_fwd() {\n\t\tvec2 dSTdx = dFdx( vUv );\n\t\tvec2 dSTdy = dFdy( vUv );\n\t\tfloat Hll = bumpScale * texture2D( bumpMap, vUv ).x;\n\t\tfloat dBx = bumpScale * texture2D( bumpMap, vUv + dSTdx ).x - Hll;\n\t\tfloat dBy = bumpScale * texture2D( bumpMap, vUv + dSTdy ).x - Hll;\n\t\treturn vec2( dBx, dBy );\n\t}\n\tvec3 perturbNormalArb( vec3 surf_pos, vec3 surf_norm, vec2 dHdxy, float faceDirection ) {\n\t\tvec3 vSigmaX = dFdx( surf_pos.xyz );\n\t\tvec3 vSigmaY = dFdy( surf_pos.xyz );\n\t\tvec3 vN = surf_norm;\n\t\tvec3 R1 = cross( vSigmaY, vN );\n\t\tvec3 R2 = cross( vN, vSigmaX );\n\t\tfloat fDet = dot( vSigmaX, R1 ) * faceDirection;\n\t\tvec3 vGrad = sign( fDet ) * ( dHdxy.x * R1 + dHdxy.y * R2 );\n\t\treturn normalize( abs( fDet ) * surf_norm - vGrad );\n\t}\n#endif"; - - var clipping_planes_fragment = "#if NUM_CLIPPING_PLANES > 0\n\tvec4 plane;\n\t#pragma unroll_loop_start\n\tfor ( int i = 0; i < UNION_CLIPPING_PLANES; i ++ ) {\n\t\tplane = clippingPlanes[ i ];\n\t\tif ( dot( vClipPosition, plane.xyz ) > plane.w ) discard;\n\t}\n\t#pragma unroll_loop_end\n\t#if UNION_CLIPPING_PLANES < NUM_CLIPPING_PLANES\n\t\tbool clipped = true;\n\t\t#pragma unroll_loop_start\n\t\tfor ( int i = UNION_CLIPPING_PLANES; i < NUM_CLIPPING_PLANES; i ++ ) {\n\t\t\tplane = clippingPlanes[ i ];\n\t\t\tclipped = ( dot( vClipPosition, plane.xyz ) > plane.w ) && clipped;\n\t\t}\n\t\t#pragma unroll_loop_end\n\t\tif ( clipped ) discard;\n\t#endif\n#endif"; - - var clipping_planes_pars_fragment = "#if NUM_CLIPPING_PLANES > 0\n\tvarying vec3 vClipPosition;\n\tuniform vec4 clippingPlanes[ NUM_CLIPPING_PLANES ];\n#endif"; - - var clipping_planes_pars_vertex = "#if NUM_CLIPPING_PLANES > 0\n\tvarying vec3 vClipPosition;\n#endif"; - - var clipping_planes_vertex = "#if NUM_CLIPPING_PLANES > 0\n\tvClipPosition = - mvPosition.xyz;\n#endif"; - - var color_fragment = "#if defined( USE_COLOR_ALPHA )\n\tdiffuseColor *= vColor;\n#elif defined( USE_COLOR )\n\tdiffuseColor.rgb *= vColor;\n#endif"; - - var color_pars_fragment = "#if defined( USE_COLOR_ALPHA )\n\tvarying vec4 vColor;\n#elif defined( USE_COLOR )\n\tvarying vec3 vColor;\n#endif"; - - var color_pars_vertex = "#if defined( USE_COLOR_ALPHA )\n\tvarying vec4 vColor;\n#elif defined( USE_COLOR ) || defined( USE_INSTANCING_COLOR )\n\tvarying vec3 vColor;\n#endif"; - - var color_vertex = "#if defined( USE_COLOR_ALPHA )\n\tvColor = vec4( 1.0 );\n#elif defined( USE_COLOR ) || defined( USE_INSTANCING_COLOR )\n\tvColor = vec3( 1.0 );\n#endif\n#ifdef USE_COLOR\n\tvColor *= color;\n#endif\n#ifdef USE_INSTANCING_COLOR\n\tvColor.xyz *= instanceColor.xyz;\n#endif"; - - var common = "#define PI 3.141592653589793\n#define PI2 6.283185307179586\n#define PI_HALF 1.5707963267948966\n#define RECIPROCAL_PI 0.3183098861837907\n#define RECIPROCAL_PI2 0.15915494309189535\n#define EPSILON 1e-6\n#ifndef saturate\n#define saturate( a ) clamp( a, 0.0, 1.0 )\n#endif\n#define whiteComplement( a ) ( 1.0 - saturate( a ) )\nfloat pow2( const in float x ) { return x*x; }\nvec3 pow2( const in vec3 x ) { return x*x; }\nfloat pow3( const in float x ) { return x*x*x; }\nfloat pow4( const in float x ) { float x2 = x*x; return x2*x2; }\nfloat max3( const in vec3 v ) { return max( max( v.x, v.y ), v.z ); }\nfloat average( const in vec3 v ) { return dot( v, vec3( 0.3333333 ) ); }\nhighp float rand( const in vec2 uv ) {\n\tconst highp float a = 12.9898, b = 78.233, c = 43758.5453;\n\thighp float dt = dot( uv.xy, vec2( a,b ) ), sn = mod( dt, PI );\n\treturn fract( sin( sn ) * c );\n}\n#ifdef HIGH_PRECISION\n\tfloat precisionSafeLength( vec3 v ) { return length( v ); }\n#else\n\tfloat precisionSafeLength( vec3 v ) {\n\t\tfloat maxComponent = max3( abs( v ) );\n\t\treturn length( v / maxComponent ) * maxComponent;\n\t}\n#endif\nstruct IncidentLight {\n\tvec3 color;\n\tvec3 direction;\n\tbool visible;\n};\nstruct ReflectedLight {\n\tvec3 directDiffuse;\n\tvec3 directSpecular;\n\tvec3 indirectDiffuse;\n\tvec3 indirectSpecular;\n};\nstruct GeometricContext {\n\tvec3 position;\n\tvec3 normal;\n\tvec3 viewDir;\n#ifdef USE_CLEARCOAT\n\tvec3 clearcoatNormal;\n#endif\n};\nvec3 transformDirection( in vec3 dir, in mat4 matrix ) {\n\treturn normalize( ( matrix * vec4( dir, 0.0 ) ).xyz );\n}\nvec3 inverseTransformDirection( in vec3 dir, in mat4 matrix ) {\n\treturn normalize( ( vec4( dir, 0.0 ) * matrix ).xyz );\n}\nmat3 transposeMat3( const in mat3 m ) {\n\tmat3 tmp;\n\ttmp[ 0 ] = vec3( m[ 0 ].x, m[ 1 ].x, m[ 2 ].x );\n\ttmp[ 1 ] = vec3( m[ 0 ].y, m[ 1 ].y, m[ 2 ].y );\n\ttmp[ 2 ] = vec3( m[ 0 ].z, m[ 1 ].z, m[ 2 ].z );\n\treturn tmp;\n}\nfloat luminance( const in vec3 rgb ) {\n\tconst vec3 weights = vec3( 0.2126729, 0.7151522, 0.0721750 );\n\treturn dot( weights, rgb );\n}\nbool isPerspectiveMatrix( mat4 m ) {\n\treturn m[ 2 ][ 3 ] == - 1.0;\n}\nvec2 equirectUv( in vec3 dir ) {\n\tfloat u = atan( dir.z, dir.x ) * RECIPROCAL_PI2 + 0.5;\n\tfloat v = asin( clamp( dir.y, - 1.0, 1.0 ) ) * RECIPROCAL_PI + 0.5;\n\treturn vec2( u, v );\n}\nfloat w0( float a ) {\n\treturn ( 1.0 / 6.0 ) * ( a * ( a * ( - a + 3.0 ) - 3.0 ) + 1.0 );\n}\nfloat w1( float a ) {\n\treturn ( 1.0 / 6.0 ) * ( a * a * ( 3.0 * a - 6.0 ) + 4.0 );\n}\nfloat w2( float a ){\n return ( 1.0 / 6.0 ) * ( a * ( a * ( - 3.0 * a + 3.0 ) + 3.0 ) + 1.0 );\n}\nfloat w3( float a ) {\n\treturn ( 1.0 / 6.0 ) * ( a * a * a );\n}\nfloat g0( float a ) {\n\treturn w0( a ) + w1( a );\n}\nfloat g1( float a ) {\n\treturn w2( a ) + w3( a );\n}\nfloat h0( float a ) {\n\treturn - 1.0 + w1( a ) / ( w0( a ) + w1( a ) );\n}\nfloat h1( float a ) {\n return 1.0 + w3( a ) / ( w2( a ) + w3( a ) );\n}\nvec4 bicubic( sampler2D tex, vec2 uv, vec4 texelSize, vec2 fullSize, float lod ) {\n\tuv = uv * texelSize.zw + 0.5;\n\tvec2 iuv = floor( uv );\n vec2 fuv = fract( uv );\n float g0x = g0( fuv.x );\n float g1x = g1( fuv.x );\n float h0x = h0( fuv.x );\n float h1x = h1( fuv.x );\n float h0y = h0( fuv.y );\n float h1y = h1( fuv.y );\n vec2 p0 = ( vec2( iuv.x + h0x, iuv.y + h0y ) - 0.5 ) * texelSize.xy;\n vec2 p1 = ( vec2( iuv.x + h1x, iuv.y + h0y ) - 0.5 ) * texelSize.xy;\n vec2 p2 = ( vec2( iuv.x + h0x, iuv.y + h1y ) - 0.5 ) * texelSize.xy;\n vec2 p3 = ( vec2( iuv.x + h1x, iuv.y + h1y ) - 0.5 ) * texelSize.xy;\n \n vec2 lodFudge = pow( 1.95, lod ) / fullSize;\n\treturn g0( fuv.y ) * ( g0x * textureLod( tex, p0, lod ) + g1x * textureLod( tex, p1, lod ) ) +\n\t\t g1( fuv.y ) * ( g0x * textureLod( tex, p2, lod ) + g1x * textureLod( tex, p3, lod ) );\n}\nvec4 textureBicubic( sampler2D sampler, vec2 uv, float lod ) {\n\tvec2 fLodSize = vec2( textureSize( sampler, int( lod ) ) );\n\tvec2 cLodSize = vec2( textureSize( sampler, int( lod + 1.0 ) ) );\n\tvec2 fLodSizeInv = 1.0 / fLodSize;\n\tvec2 cLodSizeInv = 1.0 / cLodSize;\n\tvec2 fullSize = vec2( textureSize( sampler, 0 ) );\n\tvec4 fSample = bicubic( sampler, uv, vec4( fLodSizeInv, fLodSize ), fullSize, floor( lod ) );\n\tvec4 cSample = bicubic( sampler, uv, vec4( cLodSizeInv, cLodSize ), fullSize, ceil( lod ) );\n\treturn mix( fSample, cSample, fract( lod ) );\n}"; - - var cube_uv_reflection_fragment = "#ifdef ENVMAP_TYPE_CUBE_UV\n\t#define cubeUV_minMipLevel 4.0\n\t#define cubeUV_minTileSize 16.0\n\tfloat getFace( vec3 direction ) {\n\t\tvec3 absDirection = abs( direction );\n\t\tfloat face = - 1.0;\n\t\tif ( absDirection.x > absDirection.z ) {\n\t\t\tif ( absDirection.x > absDirection.y )\n\t\t\t\tface = direction.x > 0.0 ? 0.0 : 3.0;\n\t\t\telse\n\t\t\t\tface = direction.y > 0.0 ? 1.0 : 4.0;\n\t\t} else {\n\t\t\tif ( absDirection.z > absDirection.y )\n\t\t\t\tface = direction.z > 0.0 ? 2.0 : 5.0;\n\t\t\telse\n\t\t\t\tface = direction.y > 0.0 ? 1.0 : 4.0;\n\t\t}\n\t\treturn face;\n\t}\n\tvec2 getUV( vec3 direction, float face ) {\n\t\tvec2 uv;\n\t\tif ( face == 0.0 ) {\n\t\t\tuv = vec2( direction.z, direction.y ) / abs( direction.x );\n\t\t} else if ( face == 1.0 ) {\n\t\t\tuv = vec2( - direction.x, - direction.z ) / abs( direction.y );\n\t\t} else if ( face == 2.0 ) {\n\t\t\tuv = vec2( - direction.x, direction.y ) / abs( direction.z );\n\t\t} else if ( face == 3.0 ) {\n\t\t\tuv = vec2( - direction.z, direction.y ) / abs( direction.x );\n\t\t} else if ( face == 4.0 ) {\n\t\t\tuv = vec2( - direction.x, direction.z ) / abs( direction.y );\n\t\t} else {\n\t\t\tuv = vec2( direction.x, direction.y ) / abs( direction.z );\n\t\t}\n\t\treturn 0.5 * ( uv + 1.0 );\n\t}\n\tvec3 bilinearCubeUV( sampler2D envMap, vec3 direction, float mipInt ) {\n\t\tfloat face = getFace( direction );\n\t\tfloat filterInt = max( cubeUV_minMipLevel - mipInt, 0.0 );\n\t\tmipInt = max( mipInt, cubeUV_minMipLevel );\n\t\tfloat faceSize = exp2( mipInt );\n\t\thighp vec2 uv = getUV( direction, face ) * ( faceSize - 2.0 ) + 1.0;\n\t\tif ( face > 2.0 ) {\n\t\t\tuv.y += faceSize;\n\t\t\tface -= 3.0;\n\t\t}\n\t\tuv.x += face * faceSize;\n\t\tuv.x += filterInt * 3.0 * cubeUV_minTileSize;\n\t\tuv.y += 4.0 * ( exp2( CUBEUV_MAX_MIP ) - faceSize );\n\t\tuv.x *= CUBEUV_TEXEL_WIDTH;\n\t\tuv.y *= CUBEUV_TEXEL_HEIGHT;\n\t\t#ifdef texture2DGradEXT\n\t\t\treturn texture2DGradEXT( envMap, uv, vec2( 0.0 ), vec2( 0.0 ) ).rgb;\n\t\t#else\n\t\t\treturn texture2D( envMap, uv ).rgb;\n\t\t#endif\n\t}\n\t#define cubeUV_r0 1.0\n\t#define cubeUV_v0 0.339\n\t#define cubeUV_m0 - 2.0\n\t#define cubeUV_r1 0.8\n\t#define cubeUV_v1 0.276\n\t#define cubeUV_m1 - 1.0\n\t#define cubeUV_r4 0.4\n\t#define cubeUV_v4 0.046\n\t#define cubeUV_m4 2.0\n\t#define cubeUV_r5 0.305\n\t#define cubeUV_v5 0.016\n\t#define cubeUV_m5 3.0\n\t#define cubeUV_r6 0.21\n\t#define cubeUV_v6 0.0038\n\t#define cubeUV_m6 4.0\n\tfloat roughnessToMip( float roughness ) {\n\t\tfloat mip = 0.0;\n\t\tif ( roughness >= cubeUV_r1 ) {\n\t\t\tmip = ( cubeUV_r0 - roughness ) * ( cubeUV_m1 - cubeUV_m0 ) / ( cubeUV_r0 - cubeUV_r1 ) + cubeUV_m0;\n\t\t} else if ( roughness >= cubeUV_r4 ) {\n\t\t\tmip = ( cubeUV_r1 - roughness ) * ( cubeUV_m4 - cubeUV_m1 ) / ( cubeUV_r1 - cubeUV_r4 ) + cubeUV_m1;\n\t\t} else if ( roughness >= cubeUV_r5 ) {\n\t\t\tmip = ( cubeUV_r4 - roughness ) * ( cubeUV_m5 - cubeUV_m4 ) / ( cubeUV_r4 - cubeUV_r5 ) + cubeUV_m4;\n\t\t} else if ( roughness >= cubeUV_r6 ) {\n\t\t\tmip = ( cubeUV_r5 - roughness ) * ( cubeUV_m6 - cubeUV_m5 ) / ( cubeUV_r5 - cubeUV_r6 ) + cubeUV_m5;\n\t\t} else {\n\t\t\tmip = - 2.0 * log2( 1.16 * roughness );\t\t}\n\t\treturn mip;\n\t}\n\tvec4 textureCubeUV( sampler2D envMap, vec3 sampleDir, float roughness ) {\n\t\tfloat mip = clamp( roughnessToMip( roughness ), cubeUV_m0, CUBEUV_MAX_MIP );\n\t\tfloat mipF = fract( mip );\n\t\tfloat mipInt = floor( mip );\n\t\tvec3 color0 = bilinearCubeUV( envMap, sampleDir, mipInt );\n\t\tif ( mipF == 0.0 ) {\n\t\t\treturn vec4( color0, 1.0 );\n\t\t} else {\n\t\t\tvec3 color1 = bilinearCubeUV( envMap, sampleDir, mipInt + 1.0 );\n\t\t\treturn vec4( mix( color0, color1, mipF ), 1.0 );\n\t\t}\n\t}\n#endif"; - - var defaultnormal_vertex = "vec3 transformedNormal = objectNormal;\n#ifdef USE_INSTANCING\n\tmat3 m = mat3( instanceMatrix );\n\ttransformedNormal /= vec3( dot( m[ 0 ], m[ 0 ] ), dot( m[ 1 ], m[ 1 ] ), dot( m[ 2 ], m[ 2 ] ) );\n\ttransformedNormal = m * transformedNormal;\n#endif\ntransformedNormal = normalMatrix * transformedNormal;\n#ifdef FLIP_SIDED\n\ttransformedNormal = - transformedNormal;\n#endif\n#ifdef USE_TANGENT\n\tvec3 transformedTangent = ( modelViewMatrix * vec4( objectTangent, 0.0 ) ).xyz;\n\t#ifdef FLIP_SIDED\n\t\ttransformedTangent = - transformedTangent;\n\t#endif\n#endif"; - - var displacementmap_pars_vertex = "#ifdef USE_DISPLACEMENTMAP\n\tuniform sampler2D displacementMap;\n\tuniform float displacementScale;\n\tuniform float displacementBias;\n#endif"; - - var displacementmap_vertex = "#ifdef USE_DISPLACEMENTMAP\n\ttransformed += normalize( objectNormal ) * ( texture2D( displacementMap, vUv ).x * displacementScale + displacementBias );\n#endif"; - - var emissivemap_fragment = "#ifdef USE_EMISSIVEMAP\n\tvec4 emissiveColor = texture2D( emissiveMap, vUv );\n\ttotalEmissiveRadiance *= emissiveColor.rgb;\n#endif"; - - var emissivemap_pars_fragment = "#ifdef USE_EMISSIVEMAP\n\tuniform sampler2D emissiveMap;\n#endif"; - - var encodings_fragment = "gl_FragColor = linearToOutputTexel( gl_FragColor );"; - - var encodings_pars_fragment = "vec4 LinearToLinear( in vec4 value ) {\n\treturn value;\n}\nvec4 LinearTosRGB( in vec4 value ) {\n\treturn vec4( mix( pow( value.rgb, vec3( 0.41666 ) ) * 1.055 - vec3( 0.055 ), value.rgb * 12.92, vec3( lessThanEqual( value.rgb, vec3( 0.0031308 ) ) ) ), value.a );\n}"; - - var envmap_fragment = "#ifdef USE_ENVMAP\n\t#ifdef ENV_WORLDPOS\n\t\tvec3 cameraToFrag;\n\t\tif ( isOrthographic ) {\n\t\t\tcameraToFrag = normalize( vec3( - viewMatrix[ 0 ][ 2 ], - viewMatrix[ 1 ][ 2 ], - viewMatrix[ 2 ][ 2 ] ) );\n\t\t} else {\n\t\t\tcameraToFrag = normalize( vWorldPosition - cameraPosition );\n\t\t}\n\t\tvec3 worldNormal = inverseTransformDirection( normal, viewMatrix );\n\t\t#ifdef ENVMAP_MODE_REFLECTION\n\t\t\tvec3 reflectVec = reflect( cameraToFrag, worldNormal );\n\t\t#else\n\t\t\tvec3 reflectVec = refract( cameraToFrag, worldNormal, refractionRatio );\n\t\t#endif\n\t#else\n\t\tvec3 reflectVec = vReflect;\n\t#endif\n\t#ifdef ENVMAP_TYPE_CUBE\n\t\tvec4 envColor = textureCube( envMap, vec3( flipEnvMap * reflectVec.x, reflectVec.yz ) );\n\t#else\n\t\tvec4 envColor = vec4( 0.0 );\n\t#endif\n\t#ifdef ENVMAP_BLENDING_MULTIPLY\n\t\toutgoingLight = mix( outgoingLight, outgoingLight * envColor.xyz, specularStrength * reflectivity );\n\t#elif defined( ENVMAP_BLENDING_MIX )\n\t\toutgoingLight = mix( outgoingLight, envColor.xyz, specularStrength * reflectivity );\n\t#elif defined( ENVMAP_BLENDING_ADD )\n\t\toutgoingLight += envColor.xyz * specularStrength * reflectivity;\n\t#endif\n#endif"; - - var envmap_common_pars_fragment = "#ifdef USE_ENVMAP\n\tuniform float envMapIntensity;\n\tuniform float flipEnvMap;\n\t#ifdef ENVMAP_TYPE_CUBE\n\t\tuniform samplerCube envMap;\n\t#else\n\t\tuniform sampler2D envMap;\n\t#endif\n\t\n#endif"; - - var envmap_pars_fragment = "#ifdef USE_ENVMAP\n\tuniform float reflectivity;\n\t#if defined( USE_BUMPMAP ) || defined( USE_NORMALMAP ) || defined( PHONG ) || defined( LAMBERT )\n\t\t#define ENV_WORLDPOS\n\t#endif\n\t#ifdef ENV_WORLDPOS\n\t\tvarying vec3 vWorldPosition;\n\t\tuniform float refractionRatio;\n\t#else\n\t\tvarying vec3 vReflect;\n\t#endif\n#endif"; - - var envmap_pars_vertex = "#ifdef USE_ENVMAP\n\t#if defined( USE_BUMPMAP ) || defined( USE_NORMALMAP ) || defined( PHONG ) || defined( LAMBERT )\n\t\t#define ENV_WORLDPOS\n\t#endif\n\t#ifdef ENV_WORLDPOS\n\t\t\n\t\tvarying vec3 vWorldPosition;\n\t#else\n\t\tvarying vec3 vReflect;\n\t\tuniform float refractionRatio;\n\t#endif\n#endif"; - - var envmap_vertex = "#ifdef USE_ENVMAP\n\t#ifdef ENV_WORLDPOS\n\t\tvWorldPosition = worldPosition.xyz;\n\t#else\n\t\tvec3 cameraToVertex;\n\t\tif ( isOrthographic ) {\n\t\t\tcameraToVertex = normalize( vec3( - viewMatrix[ 0 ][ 2 ], - viewMatrix[ 1 ][ 2 ], - viewMatrix[ 2 ][ 2 ] ) );\n\t\t} else {\n\t\t\tcameraToVertex = normalize( worldPosition.xyz - cameraPosition );\n\t\t}\n\t\tvec3 worldNormal = inverseTransformDirection( transformedNormal, viewMatrix );\n\t\t#ifdef ENVMAP_MODE_REFLECTION\n\t\t\tvReflect = reflect( cameraToVertex, worldNormal );\n\t\t#else\n\t\t\tvReflect = refract( cameraToVertex, worldNormal, refractionRatio );\n\t\t#endif\n\t#endif\n#endif"; - - var fog_vertex = "#ifdef USE_FOG\n\tvFogDepth = - mvPosition.z;\n#endif"; - - var fog_pars_vertex = "#ifdef USE_FOG\n\tvarying float vFogDepth;\n#endif"; - - var fog_fragment = "#ifdef USE_FOG\n\t#ifdef FOG_EXP2\n\t\tfloat fogFactor = 1.0 - exp( - fogDensity * fogDensity * vFogDepth * vFogDepth );\n\t#else\n\t\tfloat fogFactor = smoothstep( fogNear, fogFar, vFogDepth );\n\t#endif\n\tgl_FragColor.rgb = mix( gl_FragColor.rgb, fogColor, fogFactor );\n#endif"; - - var fog_pars_fragment = "#ifdef USE_FOG\n\tuniform vec3 fogColor;\n\tvarying float vFogDepth;\n\t#ifdef FOG_EXP2\n\t\tuniform float fogDensity;\n\t#else\n\t\tuniform float fogNear;\n\t\tuniform float fogFar;\n\t#endif\n#endif"; - - var gradientmap_pars_fragment = "#ifdef USE_GRADIENTMAP\n\tuniform sampler2D gradientMap;\n#endif\nvec3 getGradientIrradiance( vec3 normal, vec3 lightDirection ) {\n\tfloat dotNL = dot( normal, lightDirection );\n\tvec2 coord = vec2( dotNL * 0.5 + 0.5, 0.0 );\n\t#ifdef USE_GRADIENTMAP\n\t\treturn vec3( texture2D( gradientMap, coord ).r );\n\t#else\n\t\tvec2 fw = fwidth( coord ) * 0.5;\n\t\treturn mix( vec3( 0.7 ), vec3( 1.0 ), smoothstep( 0.7 - fw.x, 0.7 + fw.x, coord.x ) );\n\t#endif\n}"; - - var lightmap_fragment = "#ifdef USE_LIGHTMAP\n\tvec4 lightMapTexel = texture2D( lightMap, vUv2 );\n\tvec3 lightMapIrradiance = lightMapTexel.rgb * lightMapIntensity;\n\treflectedLight.indirectDiffuse += lightMapIrradiance;\n#endif"; - - var lightmap_pars_fragment = "#ifdef USE_LIGHTMAP\n\tuniform sampler2D lightMap;\n\tuniform float lightMapIntensity;\n#endif"; - - var lights_lambert_fragment = "LambertMaterial material;\nmaterial.diffuseColor = diffuseColor.rgb;\nmaterial.specularStrength = specularStrength;"; - - var lights_lambert_pars_fragment = "varying vec3 vViewPosition;\nstruct LambertMaterial {\n\tvec3 diffuseColor;\n\tfloat specularStrength;\n};\nvoid RE_Direct_Lambert( const in IncidentLight directLight, const in GeometricContext geometry, const in LambertMaterial material, inout ReflectedLight reflectedLight ) {\n\tfloat dotNL = saturate( dot( geometry.normal, directLight.direction ) );\n\tvec3 irradiance = dotNL * directLight.color;\n\treflectedLight.directDiffuse += irradiance * BRDF_Lambert( material.diffuseColor );\n}\nvoid RE_IndirectDiffuse_Lambert( const in vec3 irradiance, const in GeometricContext geometry, const in LambertMaterial material, inout ReflectedLight reflectedLight ) {\n\treflectedLight.indirectDiffuse += irradiance * BRDF_Lambert( material.diffuseColor );\n}\n#define RE_Direct\t\t\t\tRE_Direct_Lambert\n#define RE_IndirectDiffuse\t\tRE_IndirectDiffuse_Lambert"; - - var lights_pars_begin = "uniform bool receiveShadow;\nuniform vec3 ambientLightColor;\nuniform vec3 lightProbe[ 9 ];\nvec3 shGetIrradianceAt( in vec3 normal, in vec3 shCoefficients[ 9 ] ) {\n\tfloat x = normal.x, y = normal.y, z = normal.z;\n\tvec3 result = shCoefficients[ 0 ] * 0.886227;\n\tresult += shCoefficients[ 1 ] * 2.0 * 0.511664 * y;\n\tresult += shCoefficients[ 2 ] * 2.0 * 0.511664 * z;\n\tresult += shCoefficients[ 3 ] * 2.0 * 0.511664 * x;\n\tresult += shCoefficients[ 4 ] * 2.0 * 0.429043 * x * y;\n\tresult += shCoefficients[ 5 ] * 2.0 * 0.429043 * y * z;\n\tresult += shCoefficients[ 6 ] * ( 0.743125 * z * z - 0.247708 );\n\tresult += shCoefficients[ 7 ] * 2.0 * 0.429043 * x * z;\n\tresult += shCoefficients[ 8 ] * 0.429043 * ( x * x - y * y );\n\treturn result;\n}\nvec3 getLightProbeIrradiance( const in vec3 lightProbe[ 9 ], const in vec3 normal ) {\n\tvec3 worldNormal = inverseTransformDirection( normal, viewMatrix );\n\tvec3 irradiance = shGetIrradianceAt( worldNormal, lightProbe );\n\treturn irradiance;\n}\nvec3 getAmbientLightIrradiance( const in vec3 ambientLightColor ) {\n\tvec3 irradiance = ambientLightColor;\n\treturn irradiance;\n}\nfloat getDistanceAttenuation( const in float lightDistance, const in float cutoffDistance, const in float decayExponent ) {\n\t#if defined ( LEGACY_LIGHTS )\n\t\tif ( cutoffDistance > 0.0 && decayExponent > 0.0 ) {\n\t\t\treturn pow( saturate( - lightDistance / cutoffDistance + 1.0 ), decayExponent );\n\t\t}\n\t\treturn 1.0;\n\t#else\n\t\tfloat distanceFalloff = 1.0 / max( pow( lightDistance, decayExponent ), 0.01 );\n\t\tif ( cutoffDistance > 0.0 ) {\n\t\t\tdistanceFalloff *= pow2( saturate( 1.0 - pow4( lightDistance / cutoffDistance ) ) );\n\t\t}\n\t\treturn distanceFalloff;\n\t#endif\n}\nfloat getSpotAttenuation( const in float coneCosine, const in float penumbraCosine, const in float angleCosine ) {\n\treturn smoothstep( coneCosine, penumbraCosine, angleCosine );\n}\n#if NUM_DIR_LIGHTS > 0\n\tstruct DirectionalLight {\n\t\tvec3 direction;\n\t\tvec3 color;\n\t};\n\tuniform DirectionalLight directionalLights[ NUM_DIR_LIGHTS ];\n\tvoid getDirectionalLightInfo( const in DirectionalLight directionalLight, const in GeometricContext geometry, out IncidentLight light ) {\n\t\tlight.color = directionalLight.color;\n\t\tlight.direction = directionalLight.direction;\n\t\tlight.visible = true;\n\t}\n#endif\n#if NUM_POINT_LIGHTS > 0\n\tstruct PointLight {\n\t\tvec3 position;\n\t\tvec3 color;\n\t\tfloat distance;\n\t\tfloat decay;\n\t};\n\tuniform PointLight pointLights[ NUM_POINT_LIGHTS ];\n\tvoid getPointLightInfo( const in PointLight pointLight, const in GeometricContext geometry, out IncidentLight light ) {\n\t\tvec3 lVector = pointLight.position - geometry.position;\n\t\tlight.direction = normalize( lVector );\n\t\tfloat lightDistance = length( lVector );\n\t\tlight.color = pointLight.color;\n\t\tlight.color *= getDistanceAttenuation( lightDistance, pointLight.distance, pointLight.decay );\n\t\tlight.visible = ( light.color != vec3( 0.0 ) );\n\t}\n#endif\n#if NUM_SPOT_LIGHTS > 0\n\tstruct SpotLight {\n\t\tvec3 position;\n\t\tvec3 direction;\n\t\tvec3 color;\n\t\tfloat distance;\n\t\tfloat decay;\n\t\tfloat coneCos;\n\t\tfloat penumbraCos;\n\t};\n\tuniform SpotLight spotLights[ NUM_SPOT_LIGHTS ];\n\tvoid getSpotLightInfo( const in SpotLight spotLight, const in GeometricContext geometry, out IncidentLight light ) {\n\t\tvec3 lVector = spotLight.position - geometry.position;\n\t\tlight.direction = normalize( lVector );\n\t\tfloat angleCos = dot( light.direction, spotLight.direction );\n\t\tfloat spotAttenuation = getSpotAttenuation( spotLight.coneCos, spotLight.penumbraCos, angleCos );\n\t\tif ( spotAttenuation > 0.0 ) {\n\t\t\tfloat lightDistance = length( lVector );\n\t\t\tlight.color = spotLight.color * spotAttenuation;\n\t\t\tlight.color *= getDistanceAttenuation( lightDistance, spotLight.distance, spotLight.decay );\n\t\t\tlight.visible = ( light.color != vec3( 0.0 ) );\n\t\t} else {\n\t\t\tlight.color = vec3( 0.0 );\n\t\t\tlight.visible = false;\n\t\t}\n\t}\n#endif\n#if NUM_RECT_AREA_LIGHTS > 0\n\tstruct RectAreaLight {\n\t\tvec3 color;\n\t\tvec3 position;\n\t\tvec3 halfWidth;\n\t\tvec3 halfHeight;\n\t};\n\tuniform sampler2D ltc_1;\tuniform sampler2D ltc_2;\n\tuniform RectAreaLight rectAreaLights[ NUM_RECT_AREA_LIGHTS ];\n#endif\n#if NUM_HEMI_LIGHTS > 0\n\tstruct HemisphereLight {\n\t\tvec3 direction;\n\t\tvec3 skyColor;\n\t\tvec3 groundColor;\n\t};\n\tuniform HemisphereLight hemisphereLights[ NUM_HEMI_LIGHTS ];\n\tvec3 getHemisphereLightIrradiance( const in HemisphereLight hemiLight, const in vec3 normal ) {\n\t\tfloat dotNL = dot( normal, hemiLight.direction );\n\t\tfloat hemiDiffuseWeight = 0.5 * dotNL + 0.5;\n\t\tvec3 irradiance = mix( hemiLight.groundColor, hemiLight.skyColor, hemiDiffuseWeight );\n\t\treturn irradiance;\n\t}\n#endif"; - - var envmap_physical_pars_fragment = "#if defined( USE_ENVMAP )\n\tvec3 getIBLIrradiance( const in vec3 normal ) {\n\t\t#if defined( ENVMAP_TYPE_CUBE_UV )\n\t\t\tvec3 worldNormal = inverseTransformDirection( normal, viewMatrix );\n\t\t\tvec4 envMapColor = textureCubeUV( envMap, worldNormal, 1.0 );\n\t\t\treturn PI * envMapColor.rgb * envMapIntensity;\n\t\t#else\n\t\t\treturn vec3( 0.0 );\n\t\t#endif\n\t}\n\tvec3 getIBLRadiance( const in vec3 viewDir, const in vec3 normal, const in float roughness ) {\n\t\t#if defined( ENVMAP_TYPE_CUBE_UV )\n\t\t\tvec3 reflectVec = reflect( - viewDir, normal );\n\t\t\treflectVec = normalize( mix( reflectVec, normal, roughness * roughness) );\n\t\t\treflectVec = inverseTransformDirection( reflectVec, viewMatrix );\n\t\t\tvec4 envMapColor = textureCubeUV( envMap, reflectVec, roughness );\n\t\t\treturn envMapColor.rgb * envMapIntensity;\n\t\t#else\n\t\t\treturn vec3( 0.0 );\n\t\t#endif\n\t}\n#endif"; - - var lights_toon_fragment = "ToonMaterial material;\nmaterial.diffuseColor = diffuseColor.rgb;"; - - var lights_toon_pars_fragment = "varying vec3 vViewPosition;\nstruct ToonMaterial {\n\tvec3 diffuseColor;\n};\nvoid RE_Direct_Toon( const in IncidentLight directLight, const in GeometricContext geometry, const in ToonMaterial material, inout ReflectedLight reflectedLight ) {\n\tvec3 irradiance = getGradientIrradiance( geometry.normal, directLight.direction ) * directLight.color;\n\treflectedLight.directDiffuse += irradiance * BRDF_Lambert( material.diffuseColor );\n}\nvoid RE_IndirectDiffuse_Toon( const in vec3 irradiance, const in GeometricContext geometry, const in ToonMaterial material, inout ReflectedLight reflectedLight ) {\n\treflectedLight.indirectDiffuse += irradiance * BRDF_Lambert( material.diffuseColor );\n}\n#define RE_Direct\t\t\t\tRE_Direct_Toon\n#define RE_IndirectDiffuse\t\tRE_IndirectDiffuse_Toon"; - - var lights_phong_fragment = "BlinnPhongMaterial material;\nmaterial.diffuseColor = diffuseColor.rgb;\nmaterial.specularColor = specular;\nmaterial.specularShininess = shininess;\nmaterial.specularStrength = specularStrength;"; - - var lights_phong_pars_fragment = "varying vec3 vViewPosition;\nstruct BlinnPhongMaterial {\n\tvec3 diffuseColor;\n\tvec3 specularColor;\n\tfloat specularShininess;\n\tfloat specularStrength;\n};\nvoid RE_Direct_BlinnPhong( const in IncidentLight directLight, const in GeometricContext geometry, const in BlinnPhongMaterial material, inout ReflectedLight reflectedLight ) {\n\tfloat dotNL = saturate( dot( geometry.normal, directLight.direction ) );\n\tvec3 irradiance = dotNL * directLight.color;\n\treflectedLight.directDiffuse += irradiance * BRDF_Lambert( material.diffuseColor );\n\treflectedLight.directSpecular += irradiance * BRDF_BlinnPhong( directLight.direction, geometry.viewDir, geometry.normal, material.specularColor, material.specularShininess ) * material.specularStrength;\n}\nvoid RE_IndirectDiffuse_BlinnPhong( const in vec3 irradiance, const in GeometricContext geometry, const in BlinnPhongMaterial material, inout ReflectedLight reflectedLight ) {\n\treflectedLight.indirectDiffuse += irradiance * BRDF_Lambert( material.diffuseColor );\n}\n#define RE_Direct\t\t\t\tRE_Direct_BlinnPhong\n#define RE_IndirectDiffuse\t\tRE_IndirectDiffuse_BlinnPhong"; - - var lights_physical_fragment = "PhysicalMaterial material;\nmaterial.diffuseColor = diffuseColor.rgb * ( 1.0 - metalnessFactor );\nvec3 dxy = max( abs( dFdx( geometryNormal ) ), abs( dFdy( geometryNormal ) ) );\nfloat geometryRoughness = max( max( dxy.x, dxy.y ), dxy.z );\nmaterial.roughness = max( roughnessFactor, 0.0525 );material.roughness += geometryRoughness;\nmaterial.roughness = min( material.roughness, 1.0 );\n#ifdef IOR\n\tmaterial.ior = ior;\n\t#ifdef SPECULAR\n\t\tfloat specularIntensityFactor = specularIntensity;\n\t\tvec3 specularColorFactor = specularColor;\n\t\t#ifdef USE_SPECULARINTENSITYMAP\n\t\t\tspecularIntensityFactor *= texture2D( specularIntensityMap, vUv ).a;\n\t\t#endif\n\t\t#ifdef USE_SPECULARCOLORMAP\n\t\t\tspecularColorFactor *= texture2D( specularColorMap, vUv ).rgb;\n\t\t#endif\n\t\tmaterial.specularF90 = mix( specularIntensityFactor, 1.0, metalnessFactor );\n\t#else\n\t\tfloat specularIntensityFactor = 1.0;\n\t\tvec3 specularColorFactor = vec3( 1.0 );\n\t\tmaterial.specularF90 = 1.0;\n\t#endif\n\tmaterial.specularColor = mix( min( pow2( ( material.ior - 1.0 ) / ( material.ior + 1.0 ) ) * specularColorFactor, vec3( 1.0 ) ) * specularIntensityFactor, diffuseColor.rgb, metalnessFactor );\n#else\n\tmaterial.specularColor = mix( vec3( 0.04 ), diffuseColor.rgb, metalnessFactor );\n\tmaterial.specularF90 = 1.0;\n#endif\n#ifdef USE_CLEARCOAT\n\tmaterial.clearcoat = clearcoat;\n\tmaterial.clearcoatRoughness = clearcoatRoughness;\n\tmaterial.clearcoatF0 = vec3( 0.04 );\n\tmaterial.clearcoatF90 = 1.0;\n\t#ifdef USE_CLEARCOATMAP\n\t\tmaterial.clearcoat *= texture2D( clearcoatMap, vUv ).x;\n\t#endif\n\t#ifdef USE_CLEARCOAT_ROUGHNESSMAP\n\t\tmaterial.clearcoatRoughness *= texture2D( clearcoatRoughnessMap, vUv ).y;\n\t#endif\n\tmaterial.clearcoat = saturate( material.clearcoat );\tmaterial.clearcoatRoughness = max( material.clearcoatRoughness, 0.0525 );\n\tmaterial.clearcoatRoughness += geometryRoughness;\n\tmaterial.clearcoatRoughness = min( material.clearcoatRoughness, 1.0 );\n#endif\n#ifdef USE_IRIDESCENCE\n\tmaterial.iridescence = iridescence;\n\tmaterial.iridescenceIOR = iridescenceIOR;\n\t#ifdef USE_IRIDESCENCEMAP\n\t\tmaterial.iridescence *= texture2D( iridescenceMap, vUv ).r;\n\t#endif\n\t#ifdef USE_IRIDESCENCE_THICKNESSMAP\n\t\tmaterial.iridescenceThickness = (iridescenceThicknessMaximum - iridescenceThicknessMinimum) * texture2D( iridescenceThicknessMap, vUv ).g + iridescenceThicknessMinimum;\n\t#else\n\t\tmaterial.iridescenceThickness = iridescenceThicknessMaximum;\n\t#endif\n#endif\n#ifdef USE_SHEEN\n\tmaterial.sheenColor = sheenColor;\n\t#ifdef USE_SHEENCOLORMAP\n\t\tmaterial.sheenColor *= texture2D( sheenColorMap, vUv ).rgb;\n\t#endif\n\tmaterial.sheenRoughness = clamp( sheenRoughness, 0.07, 1.0 );\n\t#ifdef USE_SHEENROUGHNESSMAP\n\t\tmaterial.sheenRoughness *= texture2D( sheenRoughnessMap, vUv ).a;\n\t#endif\n#endif"; - - var lights_physical_pars_fragment = "struct PhysicalMaterial {\n\tvec3 diffuseColor;\n\tfloat roughness;\n\tvec3 specularColor;\n\tfloat specularF90;\n\t#ifdef USE_CLEARCOAT\n\t\tfloat clearcoat;\n\t\tfloat clearcoatRoughness;\n\t\tvec3 clearcoatF0;\n\t\tfloat clearcoatF90;\n\t#endif\n\t#ifdef USE_IRIDESCENCE\n\t\tfloat iridescence;\n\t\tfloat iridescenceIOR;\n\t\tfloat iridescenceThickness;\n\t\tvec3 iridescenceFresnel;\n\t\tvec3 iridescenceF0;\n\t#endif\n\t#ifdef USE_SHEEN\n\t\tvec3 sheenColor;\n\t\tfloat sheenRoughness;\n\t#endif\n\t#ifdef IOR\n\t\tfloat ior;\n\t#endif\n\t#ifdef USE_TRANSMISSION\n\t\tfloat transmission;\n\t\tfloat transmissionAlpha;\n\t\tfloat thickness;\n\t\tfloat attenuationDistance;\n\t\tvec3 attenuationColor;\n\t#endif\n};\nvec3 clearcoatSpecular = vec3( 0.0 );\nvec3 sheenSpecular = vec3( 0.0 );\nfloat IBLSheenBRDF( const in vec3 normal, const in vec3 viewDir, const in float roughness ) {\n\tfloat dotNV = saturate( dot( normal, viewDir ) );\n\tfloat r2 = roughness * roughness;\n\tfloat a = roughness < 0.25 ? -339.2 * r2 + 161.4 * roughness - 25.9 : -8.48 * r2 + 14.3 * roughness - 9.95;\n\tfloat b = roughness < 0.25 ? 44.0 * r2 - 23.7 * roughness + 3.26 : 1.97 * r2 - 3.27 * roughness + 0.72;\n\tfloat DG = exp( a * dotNV + b ) + ( roughness < 0.25 ? 0.0 : 0.1 * ( roughness - 0.25 ) );\n\treturn saturate( DG * RECIPROCAL_PI );\n}\nvec2 DFGApprox( const in vec3 normal, const in vec3 viewDir, const in float roughness ) {\n\tfloat dotNV = saturate( dot( normal, viewDir ) );\n\tconst vec4 c0 = vec4( - 1, - 0.0275, - 0.572, 0.022 );\n\tconst vec4 c1 = vec4( 1, 0.0425, 1.04, - 0.04 );\n\tvec4 r = roughness * c0 + c1;\n\tfloat a004 = min( r.x * r.x, exp2( - 9.28 * dotNV ) ) * r.x + r.y;\n\tvec2 fab = vec2( - 1.04, 1.04 ) * a004 + r.zw;\n\treturn fab;\n}\nvec3 EnvironmentBRDF( const in vec3 normal, const in vec3 viewDir, const in vec3 specularColor, const in float specularF90, const in float roughness ) {\n\tvec2 fab = DFGApprox( normal, viewDir, roughness );\n\treturn specularColor * fab.x + specularF90 * fab.y;\n}\n#ifdef USE_IRIDESCENCE\nvoid computeMultiscatteringIridescence( const in vec3 normal, const in vec3 viewDir, const in vec3 specularColor, const in float specularF90, const in float iridescence, const in vec3 iridescenceF0, const in float roughness, inout vec3 singleScatter, inout vec3 multiScatter ) {\n#else\nvoid computeMultiscattering( const in vec3 normal, const in vec3 viewDir, const in vec3 specularColor, const in float specularF90, const in float roughness, inout vec3 singleScatter, inout vec3 multiScatter ) {\n#endif\n\tvec2 fab = DFGApprox( normal, viewDir, roughness );\n\t#ifdef USE_IRIDESCENCE\n\t\tvec3 Fr = mix( specularColor, iridescenceF0, iridescence );\n\t#else\n\t\tvec3 Fr = specularColor;\n\t#endif\n\tvec3 FssEss = Fr * fab.x + specularF90 * fab.y;\n\tfloat Ess = fab.x + fab.y;\n\tfloat Ems = 1.0 - Ess;\n\tvec3 Favg = Fr + ( 1.0 - Fr ) * 0.047619;\tvec3 Fms = FssEss * Favg / ( 1.0 - Ems * Favg );\n\tsingleScatter += FssEss;\n\tmultiScatter += Fms * Ems;\n}\n#if NUM_RECT_AREA_LIGHTS > 0\n\tvoid RE_Direct_RectArea_Physical( const in RectAreaLight rectAreaLight, const in GeometricContext geometry, const in PhysicalMaterial material, inout ReflectedLight reflectedLight ) {\n\t\tvec3 normal = geometry.normal;\n\t\tvec3 viewDir = geometry.viewDir;\n\t\tvec3 position = geometry.position;\n\t\tvec3 lightPos = rectAreaLight.position;\n\t\tvec3 halfWidth = rectAreaLight.halfWidth;\n\t\tvec3 halfHeight = rectAreaLight.halfHeight;\n\t\tvec3 lightColor = rectAreaLight.color;\n\t\tfloat roughness = material.roughness;\n\t\tvec3 rectCoords[ 4 ];\n\t\trectCoords[ 0 ] = lightPos + halfWidth - halfHeight;\t\trectCoords[ 1 ] = lightPos - halfWidth - halfHeight;\n\t\trectCoords[ 2 ] = lightPos - halfWidth + halfHeight;\n\t\trectCoords[ 3 ] = lightPos + halfWidth + halfHeight;\n\t\tvec2 uv = LTC_Uv( normal, viewDir, roughness );\n\t\tvec4 t1 = texture2D( ltc_1, uv );\n\t\tvec4 t2 = texture2D( ltc_2, uv );\n\t\tmat3 mInv = mat3(\n\t\t\tvec3( t1.x, 0, t1.y ),\n\t\t\tvec3( 0, 1, 0 ),\n\t\t\tvec3( t1.z, 0, t1.w )\n\t\t);\n\t\tvec3 fresnel = ( material.specularColor * t2.x + ( vec3( 1.0 ) - material.specularColor ) * t2.y );\n\t\treflectedLight.directSpecular += lightColor * fresnel * LTC_Evaluate( normal, viewDir, position, mInv, rectCoords );\n\t\treflectedLight.directDiffuse += lightColor * material.diffuseColor * LTC_Evaluate( normal, viewDir, position, mat3( 1.0 ), rectCoords );\n\t}\n#endif\nvoid RE_Direct_Physical( const in IncidentLight directLight, const in GeometricContext geometry, const in PhysicalMaterial material, inout ReflectedLight reflectedLight ) {\n\tfloat dotNL = saturate( dot( geometry.normal, directLight.direction ) );\n\tvec3 irradiance = dotNL * directLight.color;\n\t#ifdef USE_CLEARCOAT\n\t\tfloat dotNLcc = saturate( dot( geometry.clearcoatNormal, directLight.direction ) );\n\t\tvec3 ccIrradiance = dotNLcc * directLight.color;\n\t\tclearcoatSpecular += ccIrradiance * BRDF_GGX( directLight.direction, geometry.viewDir, geometry.clearcoatNormal, material.clearcoatF0, material.clearcoatF90, material.clearcoatRoughness );\n\t#endif\n\t#ifdef USE_SHEEN\n\t\tsheenSpecular += irradiance * BRDF_Sheen( directLight.direction, geometry.viewDir, geometry.normal, material.sheenColor, material.sheenRoughness );\n\t#endif\n\t#ifdef USE_IRIDESCENCE\n\t\treflectedLight.directSpecular += irradiance * BRDF_GGX_Iridescence( directLight.direction, geometry.viewDir, geometry.normal, material.specularColor, material.specularF90, material.iridescence, material.iridescenceFresnel, material.roughness );\n\t#else\n\t\treflectedLight.directSpecular += irradiance * BRDF_GGX( directLight.direction, geometry.viewDir, geometry.normal, material.specularColor, material.specularF90, material.roughness );\n\t#endif\n\treflectedLight.directDiffuse += irradiance * BRDF_Lambert( material.diffuseColor );\n}\nvoid RE_IndirectDiffuse_Physical( const in vec3 irradiance, const in GeometricContext geometry, const in PhysicalMaterial material, inout ReflectedLight reflectedLight ) {\n\treflectedLight.indirectDiffuse += irradiance * BRDF_Lambert( material.diffuseColor );\n}\nvoid RE_IndirectSpecular_Physical( const in vec3 radiance, const in vec3 irradiance, const in vec3 clearcoatRadiance, const in GeometricContext geometry, const in PhysicalMaterial material, inout ReflectedLight reflectedLight) {\n\t#ifdef USE_CLEARCOAT\n\t\tclearcoatSpecular += clearcoatRadiance * EnvironmentBRDF( geometry.clearcoatNormal, geometry.viewDir, material.clearcoatF0, material.clearcoatF90, material.clearcoatRoughness );\n\t#endif\n\t#ifdef USE_SHEEN\n\t\tsheenSpecular += irradiance * material.sheenColor * IBLSheenBRDF( geometry.normal, geometry.viewDir, material.sheenRoughness );\n\t#endif\n\tvec3 singleScattering = vec3( 0.0 );\n\tvec3 multiScattering = vec3( 0.0 );\n\tvec3 cosineWeightedIrradiance = irradiance * RECIPROCAL_PI;\n\t#ifdef USE_IRIDESCENCE\n\t\tcomputeMultiscatteringIridescence( geometry.normal, geometry.viewDir, material.specularColor, material.specularF90, material.iridescence, material.iridescenceFresnel, material.roughness, singleScattering, multiScattering );\n\t#else\n\t\tcomputeMultiscattering( geometry.normal, geometry.viewDir, material.specularColor, material.specularF90, material.roughness, singleScattering, multiScattering );\n\t#endif\n\tvec3 totalScattering = singleScattering + multiScattering;\n\tvec3 diffuse = material.diffuseColor * ( 1.0 - max( max( totalScattering.r, totalScattering.g ), totalScattering.b ) );\n\treflectedLight.indirectSpecular += radiance * singleScattering;\n\treflectedLight.indirectSpecular += multiScattering * cosineWeightedIrradiance;\n\treflectedLight.indirectDiffuse += diffuse * cosineWeightedIrradiance;\n}\n#define RE_Direct\t\t\t\tRE_Direct_Physical\n#define RE_Direct_RectArea\t\tRE_Direct_RectArea_Physical\n#define RE_IndirectDiffuse\t\tRE_IndirectDiffuse_Physical\n#define RE_IndirectSpecular\t\tRE_IndirectSpecular_Physical\nfloat computeSpecularOcclusion( const in float dotNV, const in float ambientOcclusion, const in float roughness ) {\n\treturn saturate( pow( dotNV + ambientOcclusion, exp2( - 16.0 * roughness - 1.0 ) ) - 1.0 + ambientOcclusion );\n}"; - - var lights_fragment_begin = "\nGeometricContext geometry;\ngeometry.position = - vViewPosition;\ngeometry.normal = normal;\ngeometry.viewDir = ( isOrthographic ) ? vec3( 0, 0, 1 ) : normalize( vViewPosition );\n#ifdef USE_CLEARCOAT\n\tgeometry.clearcoatNormal = clearcoatNormal;\n#endif\n#ifdef USE_IRIDESCENCE\n\tfloat dotNVi = saturate( dot( normal, geometry.viewDir ) );\n\tif ( material.iridescenceThickness == 0.0 ) {\n\t\tmaterial.iridescence = 0.0;\n\t} else {\n\t\tmaterial.iridescence = saturate( material.iridescence );\n\t}\n\tif ( material.iridescence > 0.0 ) {\n\t\tmaterial.iridescenceFresnel = evalIridescence( 1.0, material.iridescenceIOR, dotNVi, material.iridescenceThickness, material.specularColor );\n\t\tmaterial.iridescenceF0 = Schlick_to_F0( material.iridescenceFresnel, 1.0, dotNVi );\n\t}\n#endif\nIncidentLight directLight;\n#if ( NUM_POINT_LIGHTS > 0 ) && defined( RE_Direct )\n\tPointLight pointLight;\n\t#if defined( USE_SHADOWMAP ) && NUM_POINT_LIGHT_SHADOWS > 0\n\tPointLightShadow pointLightShadow;\n\t#endif\n\t#pragma unroll_loop_start\n\tfor ( int i = 0; i < NUM_POINT_LIGHTS; i ++ ) {\n\t\tpointLight = pointLights[ i ];\n\t\tgetPointLightInfo( pointLight, geometry, directLight );\n\t\t#if defined( USE_SHADOWMAP ) && ( UNROLLED_LOOP_INDEX < NUM_POINT_LIGHT_SHADOWS )\n\t\tpointLightShadow = pointLightShadows[ i ];\n\t\tdirectLight.color *= ( directLight.visible && receiveShadow ) ? getPointShadow( pointShadowMap[ i ], pointLightShadow.shadowMapSize, pointLightShadow.shadowBias, pointLightShadow.shadowRadius, vPointShadowCoord[ i ], pointLightShadow.shadowCameraNear, pointLightShadow.shadowCameraFar ) : 1.0;\n\t\t#endif\n\t\tRE_Direct( directLight, geometry, material, reflectedLight );\n\t}\n\t#pragma unroll_loop_end\n#endif\n#if ( NUM_SPOT_LIGHTS > 0 ) && defined( RE_Direct )\n\tSpotLight spotLight;\n\tvec4 spotColor;\n\tvec3 spotLightCoord;\n\tbool inSpotLightMap;\n\t#if defined( USE_SHADOWMAP ) && NUM_SPOT_LIGHT_SHADOWS > 0\n\tSpotLightShadow spotLightShadow;\n\t#endif\n\t#pragma unroll_loop_start\n\tfor ( int i = 0; i < NUM_SPOT_LIGHTS; i ++ ) {\n\t\tspotLight = spotLights[ i ];\n\t\tgetSpotLightInfo( spotLight, geometry, directLight );\n\t\t#if ( UNROLLED_LOOP_INDEX < NUM_SPOT_LIGHT_SHADOWS_WITH_MAPS )\n\t\t#define SPOT_LIGHT_MAP_INDEX UNROLLED_LOOP_INDEX\n\t\t#elif ( UNROLLED_LOOP_INDEX < NUM_SPOT_LIGHT_SHADOWS )\n\t\t#define SPOT_LIGHT_MAP_INDEX NUM_SPOT_LIGHT_MAPS\n\t\t#else\n\t\t#define SPOT_LIGHT_MAP_INDEX ( UNROLLED_LOOP_INDEX - NUM_SPOT_LIGHT_SHADOWS + NUM_SPOT_LIGHT_SHADOWS_WITH_MAPS )\n\t\t#endif\n\t\t#if ( SPOT_LIGHT_MAP_INDEX < NUM_SPOT_LIGHT_MAPS )\n\t\t\tspotLightCoord = vSpotLightCoord[ i ].xyz / vSpotLightCoord[ i ].w;\n\t\t\tinSpotLightMap = all( lessThan( abs( spotLightCoord * 2. - 1. ), vec3( 1.0 ) ) );\n\t\t\tspotColor = texture2D( spotLightMap[ SPOT_LIGHT_MAP_INDEX ], spotLightCoord.xy );\n\t\t\tdirectLight.color = inSpotLightMap ? directLight.color * spotColor.rgb : directLight.color;\n\t\t#endif\n\t\t#undef SPOT_LIGHT_MAP_INDEX\n\t\t#if defined( USE_SHADOWMAP ) && ( UNROLLED_LOOP_INDEX < NUM_SPOT_LIGHT_SHADOWS )\n\t\tspotLightShadow = spotLightShadows[ i ];\n\t\tdirectLight.color *= ( directLight.visible && receiveShadow ) ? getShadow( spotShadowMap[ i ], spotLightShadow.shadowMapSize, spotLightShadow.shadowBias, spotLightShadow.shadowRadius, vSpotLightCoord[ i ] ) : 1.0;\n\t\t#endif\n\t\tRE_Direct( directLight, geometry, material, reflectedLight );\n\t}\n\t#pragma unroll_loop_end\n#endif\n#if ( NUM_DIR_LIGHTS > 0 ) && defined( RE_Direct )\n\tDirectionalLight directionalLight;\n\t#if defined( USE_SHADOWMAP ) && NUM_DIR_LIGHT_SHADOWS > 0\n\tDirectionalLightShadow directionalLightShadow;\n\t#endif\n\t#pragma unroll_loop_start\n\tfor ( int i = 0; i < NUM_DIR_LIGHTS; i ++ ) {\n\t\tdirectionalLight = directionalLights[ i ];\n\t\tgetDirectionalLightInfo( directionalLight, geometry, directLight );\n\t\t#if defined( USE_SHADOWMAP ) && ( UNROLLED_LOOP_INDEX < NUM_DIR_LIGHT_SHADOWS )\n\t\tdirectionalLightShadow = directionalLightShadows[ i ];\n\t\tdirectLight.color *= ( directLight.visible && receiveShadow ) ? getShadow( directionalShadowMap[ i ], directionalLightShadow.shadowMapSize, directionalLightShadow.shadowBias, directionalLightShadow.shadowRadius, vDirectionalShadowCoord[ i ] ) : 1.0;\n\t\t#endif\n\t\tRE_Direct( directLight, geometry, material, reflectedLight );\n\t}\n\t#pragma unroll_loop_end\n#endif\n#if ( NUM_RECT_AREA_LIGHTS > 0 ) && defined( RE_Direct_RectArea )\n\tRectAreaLight rectAreaLight;\n\t#pragma unroll_loop_start\n\tfor ( int i = 0; i < NUM_RECT_AREA_LIGHTS; i ++ ) {\n\t\trectAreaLight = rectAreaLights[ i ];\n\t\tRE_Direct_RectArea( rectAreaLight, geometry, material, reflectedLight );\n\t}\n\t#pragma unroll_loop_end\n#endif\n#if defined( RE_IndirectDiffuse )\n\tvec3 iblIrradiance = vec3( 0.0 );\n\tvec3 irradiance = getAmbientLightIrradiance( ambientLightColor );\n\tirradiance += getLightProbeIrradiance( lightProbe, geometry.normal );\n\t#if ( NUM_HEMI_LIGHTS > 0 )\n\t\t#pragma unroll_loop_start\n\t\tfor ( int i = 0; i < NUM_HEMI_LIGHTS; i ++ ) {\n\t\t\tirradiance += getHemisphereLightIrradiance( hemisphereLights[ i ], geometry.normal );\n\t\t}\n\t\t#pragma unroll_loop_end\n\t#endif\n#endif\n#if defined( RE_IndirectSpecular )\n\tvec3 radiance = vec3( 0.0 );\n\tvec3 clearcoatRadiance = vec3( 0.0 );\n#endif"; - - var lights_fragment_maps = "#if defined( RE_IndirectDiffuse )\n\t#ifdef USE_LIGHTMAP\n\t\tvec4 lightMapTexel = texture2D( lightMap, vUv2 );\n\t\tvec3 lightMapIrradiance = lightMapTexel.rgb * lightMapIntensity;\n\t\tirradiance += lightMapIrradiance;\n\t#endif\n\t#if defined( USE_ENVMAP ) && defined( STANDARD ) && defined( ENVMAP_TYPE_CUBE_UV )\n\t\tiblIrradiance += getIBLIrradiance( geometry.normal );\n\t#endif\n#endif\n#if defined( USE_ENVMAP ) && defined( RE_IndirectSpecular )\n\tradiance += getIBLRadiance( geometry.viewDir, geometry.normal, material.roughness );\n\t#ifdef USE_CLEARCOAT\n\t\tclearcoatRadiance += getIBLRadiance( geometry.viewDir, geometry.clearcoatNormal, material.clearcoatRoughness );\n\t#endif\n#endif"; - - var lights_fragment_end = "#if defined( RE_IndirectDiffuse )\n\tRE_IndirectDiffuse( irradiance, geometry, material, reflectedLight );\n#endif\n#if defined( RE_IndirectSpecular )\n\tRE_IndirectSpecular( radiance, iblIrradiance, clearcoatRadiance, geometry, material, reflectedLight );\n#endif"; - - var logdepthbuf_fragment = "#if defined( USE_LOGDEPTHBUF ) && defined( USE_LOGDEPTHBUF_EXT )\n\tgl_FragDepthEXT = vIsPerspective == 0.0 ? gl_FragCoord.z : log2( vFragDepth ) * logDepthBufFC * 0.5;\n#endif"; - - var logdepthbuf_pars_fragment = "#if defined( USE_LOGDEPTHBUF ) && defined( USE_LOGDEPTHBUF_EXT )\n\tuniform float logDepthBufFC;\n\tvarying float vFragDepth;\n\tvarying float vIsPerspective;\n#endif"; - - var logdepthbuf_pars_vertex = "#ifdef USE_LOGDEPTHBUF\n\t#ifdef USE_LOGDEPTHBUF_EXT\n\t\tvarying float vFragDepth;\n\t\tvarying float vIsPerspective;\n\t#else\n\t\tuniform float logDepthBufFC;\n\t#endif\n#endif"; - - var logdepthbuf_vertex = "#ifdef USE_LOGDEPTHBUF\n\t#ifdef USE_LOGDEPTHBUF_EXT\n\t\tvFragDepth = 1.0 + gl_Position.w;\n\t\tvIsPerspective = float( isPerspectiveMatrix( projectionMatrix ) );\n\t#else\n\t\tif ( isPerspectiveMatrix( projectionMatrix ) ) {\n\t\t\tgl_Position.z = log2( max( EPSILON, gl_Position.w + 1.0 ) ) * logDepthBufFC - 1.0;\n\t\t\tgl_Position.z *= gl_Position.w;\n\t\t}\n\t#endif\n#endif"; - - var map_fragment = "#ifdef USE_MAP\n\tvec4 sampledDiffuseColor = texture2D( map, vUv );\n\t#ifdef DECODE_VIDEO_TEXTURE\n\t\tsampledDiffuseColor = vec4( mix( pow( sampledDiffuseColor.rgb * 0.9478672986 + vec3( 0.0521327014 ), vec3( 2.4 ) ), sampledDiffuseColor.rgb * 0.0773993808, vec3( lessThanEqual( sampledDiffuseColor.rgb, vec3( 0.04045 ) ) ) ), sampledDiffuseColor.w );\n\t#endif\n\tdiffuseColor *= sampledDiffuseColor;\n#endif"; - - var map_pars_fragment = "#ifdef USE_MAP\n\tuniform sampler2D map;\n#endif"; - - var map_particle_fragment = "#if defined( USE_MAP ) || defined( USE_ALPHAMAP )\n\tvec2 uv = ( uvTransform * vec3( gl_PointCoord.x, 1.0 - gl_PointCoord.y, 1 ) ).xy;\n#endif\n#ifdef USE_MAP\n\tdiffuseColor *= texture2D( map, uv );\n#endif\n#ifdef USE_ALPHAMAP\n\tdiffuseColor.a *= texture2D( alphaMap, uv ).g;\n#endif"; - - var map_particle_pars_fragment = "#if defined( USE_MAP ) || defined( USE_ALPHAMAP )\n\tuniform mat3 uvTransform;\n#endif\n#ifdef USE_MAP\n\tuniform sampler2D map;\n#endif\n#ifdef USE_ALPHAMAP\n\tuniform sampler2D alphaMap;\n#endif"; - - var metalnessmap_fragment = "float metalnessFactor = metalness;\n#ifdef USE_METALNESSMAP\n\tvec4 texelMetalness = texture2D( metalnessMap, vUv );\n\tmetalnessFactor *= texelMetalness.b;\n#endif"; - - var metalnessmap_pars_fragment = "#ifdef USE_METALNESSMAP\n\tuniform sampler2D metalnessMap;\n#endif"; - - var morphcolor_vertex = "#if defined( USE_MORPHCOLORS ) && defined( MORPHTARGETS_TEXTURE )\n\tvColor *= morphTargetBaseInfluence;\n\tfor ( int i = 0; i < MORPHTARGETS_COUNT; i ++ ) {\n\t\t#if defined( USE_COLOR_ALPHA )\n\t\t\tif ( morphTargetInfluences[ i ] != 0.0 ) vColor += getMorph( gl_VertexID, i, 2 ) * morphTargetInfluences[ i ];\n\t\t#elif defined( USE_COLOR )\n\t\t\tif ( morphTargetInfluences[ i ] != 0.0 ) vColor += getMorph( gl_VertexID, i, 2 ).rgb * morphTargetInfluences[ i ];\n\t\t#endif\n\t}\n#endif"; - - var morphnormal_vertex = "#ifdef USE_MORPHNORMALS\n\tobjectNormal *= morphTargetBaseInfluence;\n\t#ifdef MORPHTARGETS_TEXTURE\n\t\tfor ( int i = 0; i < MORPHTARGETS_COUNT; i ++ ) {\n\t\t\tif ( morphTargetInfluences[ i ] != 0.0 ) objectNormal += getMorph( gl_VertexID, i, 1 ).xyz * morphTargetInfluences[ i ];\n\t\t}\n\t#else\n\t\tobjectNormal += morphNormal0 * morphTargetInfluences[ 0 ];\n\t\tobjectNormal += morphNormal1 * morphTargetInfluences[ 1 ];\n\t\tobjectNormal += morphNormal2 * morphTargetInfluences[ 2 ];\n\t\tobjectNormal += morphNormal3 * morphTargetInfluences[ 3 ];\n\t#endif\n#endif"; - - var morphtarget_pars_vertex = "#ifdef USE_MORPHTARGETS\n\tuniform float morphTargetBaseInfluence;\n\t#ifdef MORPHTARGETS_TEXTURE\n\t\tuniform float morphTargetInfluences[ MORPHTARGETS_COUNT ];\n\t\tuniform sampler2DArray morphTargetsTexture;\n\t\tuniform ivec2 morphTargetsTextureSize;\n\t\tvec4 getMorph( const in int vertexIndex, const in int morphTargetIndex, const in int offset ) {\n\t\t\tint texelIndex = vertexIndex * MORPHTARGETS_TEXTURE_STRIDE + offset;\n\t\t\tint y = texelIndex / morphTargetsTextureSize.x;\n\t\t\tint x = texelIndex - y * morphTargetsTextureSize.x;\n\t\t\tivec3 morphUV = ivec3( x, y, morphTargetIndex );\n\t\t\treturn texelFetch( morphTargetsTexture, morphUV, 0 );\n\t\t}\n\t#else\n\t\t#ifndef USE_MORPHNORMALS\n\t\t\tuniform float morphTargetInfluences[ 8 ];\n\t\t#else\n\t\t\tuniform float morphTargetInfluences[ 4 ];\n\t\t#endif\n\t#endif\n#endif"; - - var morphtarget_vertex = "#ifdef USE_MORPHTARGETS\n\ttransformed *= morphTargetBaseInfluence;\n\t#ifdef MORPHTARGETS_TEXTURE\n\t\tfor ( int i = 0; i < MORPHTARGETS_COUNT; i ++ ) {\n\t\t\tif ( morphTargetInfluences[ i ] != 0.0 ) transformed += getMorph( gl_VertexID, i, 0 ).xyz * morphTargetInfluences[ i ];\n\t\t}\n\t#else\n\t\ttransformed += morphTarget0 * morphTargetInfluences[ 0 ];\n\t\ttransformed += morphTarget1 * morphTargetInfluences[ 1 ];\n\t\ttransformed += morphTarget2 * morphTargetInfluences[ 2 ];\n\t\ttransformed += morphTarget3 * morphTargetInfluences[ 3 ];\n\t\t#ifndef USE_MORPHNORMALS\n\t\t\ttransformed += morphTarget4 * morphTargetInfluences[ 4 ];\n\t\t\ttransformed += morphTarget5 * morphTargetInfluences[ 5 ];\n\t\t\ttransformed += morphTarget6 * morphTargetInfluences[ 6 ];\n\t\t\ttransformed += morphTarget7 * morphTargetInfluences[ 7 ];\n\t\t#endif\n\t#endif\n#endif"; - - var normal_fragment_begin = "float faceDirection = gl_FrontFacing ? 1.0 : - 1.0;\n#ifdef FLAT_SHADED\n\tvec3 fdx = dFdx( vViewPosition );\n\tvec3 fdy = dFdy( vViewPosition );\n\tvec3 normal = normalize( cross( fdx, fdy ) );\n#else\n\tvec3 normal = normalize( vNormal );\n\t#ifdef DOUBLE_SIDED\n\t\tnormal = normal * faceDirection;\n\t#endif\n\t#ifdef USE_TANGENT\n\t\tvec3 tangent = normalize( vTangent );\n\t\tvec3 bitangent = normalize( vBitangent );\n\t\t#ifdef DOUBLE_SIDED\n\t\t\ttangent = tangent * faceDirection;\n\t\t\tbitangent = bitangent * faceDirection;\n\t\t#endif\n\t\t#if defined( TANGENTSPACE_NORMALMAP ) || defined( USE_CLEARCOAT_NORMALMAP )\n\t\t\tmat3 vTBN = mat3( tangent, bitangent, normal );\n\t\t#endif\n\t#endif\n#endif\nvec3 geometryNormal = normal;"; - - var normal_fragment_maps = "#ifdef OBJECTSPACE_NORMALMAP\n\tnormal = texture2D( normalMap, vUv ).xyz * 2.0 - 1.0;\n\t#ifdef FLIP_SIDED\n\t\tnormal = - normal;\n\t#endif\n\t#ifdef DOUBLE_SIDED\n\t\tnormal = normal * faceDirection;\n\t#endif\n\tnormal = normalize( normalMatrix * normal );\n#elif defined( TANGENTSPACE_NORMALMAP )\n\tvec3 mapN = texture2D( normalMap, vUv ).xyz * 2.0 - 1.0;\n\tmapN.xy *= normalScale;\n\t#ifdef USE_TANGENT\n\t\tnormal = normalize( vTBN * mapN );\n\t#else\n\t\tnormal = perturbNormal2Arb( - vViewPosition, normal, mapN, faceDirection );\n\t#endif\n#elif defined( USE_BUMPMAP )\n\tnormal = perturbNormalArb( - vViewPosition, normal, dHdxy_fwd(), faceDirection );\n#endif"; - - var normal_pars_fragment = "#ifndef FLAT_SHADED\n\tvarying vec3 vNormal;\n\t#ifdef USE_TANGENT\n\t\tvarying vec3 vTangent;\n\t\tvarying vec3 vBitangent;\n\t#endif\n#endif"; - - var normal_pars_vertex = "#ifndef FLAT_SHADED\n\tvarying vec3 vNormal;\n\t#ifdef USE_TANGENT\n\t\tvarying vec3 vTangent;\n\t\tvarying vec3 vBitangent;\n\t#endif\n#endif"; - - var normal_vertex = "#ifndef FLAT_SHADED\n\tvNormal = normalize( transformedNormal );\n\t#ifdef USE_TANGENT\n\t\tvTangent = normalize( transformedTangent );\n\t\tvBitangent = normalize( cross( vNormal, vTangent ) * tangent.w );\n\t#endif\n#endif"; - - var normalmap_pars_fragment = "#ifdef USE_NORMALMAP\n\tuniform sampler2D normalMap;\n\tuniform vec2 normalScale;\n#endif\n#ifdef OBJECTSPACE_NORMALMAP\n\tuniform mat3 normalMatrix;\n#endif\n#if ! defined ( USE_TANGENT ) && ( defined ( TANGENTSPACE_NORMALMAP ) || defined ( USE_CLEARCOAT_NORMALMAP ) )\n\tvec3 perturbNormal2Arb( vec3 eye_pos, vec3 surf_norm, vec3 mapN, float faceDirection ) {\n\t\tvec3 q0 = dFdx( eye_pos.xyz );\n\t\tvec3 q1 = dFdy( eye_pos.xyz );\n\t\tvec2 st0 = dFdx( vUv.st );\n\t\tvec2 st1 = dFdy( vUv.st );\n\t\tvec3 N = surf_norm;\n\t\tvec3 q1perp = cross( q1, N );\n\t\tvec3 q0perp = cross( N, q0 );\n\t\tvec3 T = q1perp * st0.x + q0perp * st1.x;\n\t\tvec3 B = q1perp * st0.y + q0perp * st1.y;\n\t\tfloat det = max( dot( T, T ), dot( B, B ) );\n\t\tfloat scale = ( det == 0.0 ) ? 0.0 : faceDirection * inversesqrt( det );\n\t\treturn normalize( T * ( mapN.x * scale ) + B * ( mapN.y * scale ) + N * mapN.z );\n\t}\n#endif"; - - var clearcoat_normal_fragment_begin = "#ifdef USE_CLEARCOAT\n\tvec3 clearcoatNormal = geometryNormal;\n#endif"; - - var clearcoat_normal_fragment_maps = "#ifdef USE_CLEARCOAT_NORMALMAP\n\tvec3 clearcoatMapN = texture2D( clearcoatNormalMap, vUv ).xyz * 2.0 - 1.0;\n\tclearcoatMapN.xy *= clearcoatNormalScale;\n\t#ifdef USE_TANGENT\n\t\tclearcoatNormal = normalize( vTBN * clearcoatMapN );\n\t#else\n\t\tclearcoatNormal = perturbNormal2Arb( - vViewPosition, clearcoatNormal, clearcoatMapN, faceDirection );\n\t#endif\n#endif"; - - var clearcoat_pars_fragment = "#ifdef USE_CLEARCOATMAP\n\tuniform sampler2D clearcoatMap;\n#endif\n#ifdef USE_CLEARCOAT_ROUGHNESSMAP\n\tuniform sampler2D clearcoatRoughnessMap;\n#endif\n#ifdef USE_CLEARCOAT_NORMALMAP\n\tuniform sampler2D clearcoatNormalMap;\n\tuniform vec2 clearcoatNormalScale;\n#endif"; - - var iridescence_pars_fragment = "#ifdef USE_IRIDESCENCEMAP\n\tuniform sampler2D iridescenceMap;\n#endif\n#ifdef USE_IRIDESCENCE_THICKNESSMAP\n\tuniform sampler2D iridescenceThicknessMap;\n#endif"; - - var output_fragment = "#ifdef OPAQUE\ndiffuseColor.a = 1.0;\n#endif\n#ifdef USE_TRANSMISSION\ndiffuseColor.a *= material.transmissionAlpha + 0.1;\n#endif\ngl_FragColor = vec4( outgoingLight, diffuseColor.a );"; - - var packing = "vec3 packNormalToRGB( const in vec3 normal ) {\n\treturn normalize( normal ) * 0.5 + 0.5;\n}\nvec3 unpackRGBToNormal( const in vec3 rgb ) {\n\treturn 2.0 * rgb.xyz - 1.0;\n}\nconst float PackUpscale = 256. / 255.;const float UnpackDownscale = 255. / 256.;\nconst vec3 PackFactors = vec3( 256. * 256. * 256., 256. * 256., 256. );\nconst vec4 UnpackFactors = UnpackDownscale / vec4( PackFactors, 1. );\nconst float ShiftRight8 = 1. / 256.;\nvec4 packDepthToRGBA( const in float v ) {\n\tvec4 r = vec4( fract( v * PackFactors ), v );\n\tr.yzw -= r.xyz * ShiftRight8;\treturn r * PackUpscale;\n}\nfloat unpackRGBAToDepth( const in vec4 v ) {\n\treturn dot( v, UnpackFactors );\n}\nvec2 packDepthToRG( in highp float v ) {\n\treturn packDepthToRGBA( v ).yx;\n}\nfloat unpackRGToDepth( const in highp vec2 v ) {\n\treturn unpackRGBAToDepth( vec4( v.xy, 0.0, 0.0 ) );\n}\nvec4 pack2HalfToRGBA( vec2 v ) {\n\tvec4 r = vec4( v.x, fract( v.x * 255.0 ), v.y, fract( v.y * 255.0 ) );\n\treturn vec4( r.x - r.y / 255.0, r.y, r.z - r.w / 255.0, r.w );\n}\nvec2 unpackRGBATo2Half( vec4 v ) {\n\treturn vec2( v.x + ( v.y / 255.0 ), v.z + ( v.w / 255.0 ) );\n}\nfloat viewZToOrthographicDepth( const in float viewZ, const in float near, const in float far ) {\n\treturn ( viewZ + near ) / ( near - far );\n}\nfloat orthographicDepthToViewZ( const in float linearClipZ, const in float near, const in float far ) {\n\treturn linearClipZ * ( near - far ) - near;\n}\nfloat viewZToPerspectiveDepth( const in float viewZ, const in float near, const in float far ) {\n\treturn ( ( near + viewZ ) * far ) / ( ( far - near ) * viewZ );\n}\nfloat perspectiveDepthToViewZ( const in float invClipZ, const in float near, const in float far ) {\n\treturn ( near * far ) / ( ( far - near ) * invClipZ - far );\n}"; - - var premultiplied_alpha_fragment = "#ifdef PREMULTIPLIED_ALPHA\n\tgl_FragColor.rgb *= gl_FragColor.a;\n#endif"; - - var project_vertex = "vec4 mvPosition = vec4( transformed, 1.0 );\n#ifdef USE_INSTANCING\n\tmvPosition = instanceMatrix * mvPosition;\n#endif\nmvPosition = modelViewMatrix * mvPosition;\ngl_Position = projectionMatrix * mvPosition;"; - - var dithering_fragment = "#ifdef DITHERING\n\tgl_FragColor.rgb = dithering( gl_FragColor.rgb );\n#endif"; - - var dithering_pars_fragment = "#ifdef DITHERING\n\tvec3 dithering( vec3 color ) {\n\t\tfloat grid_position = rand( gl_FragCoord.xy );\n\t\tvec3 dither_shift_RGB = vec3( 0.25 / 255.0, -0.25 / 255.0, 0.25 / 255.0 );\n\t\tdither_shift_RGB = mix( 2.0 * dither_shift_RGB, -2.0 * dither_shift_RGB, grid_position );\n\t\treturn color + dither_shift_RGB;\n\t}\n#endif"; - - var roughnessmap_fragment = "float roughnessFactor = roughness;\n#ifdef USE_ROUGHNESSMAP\n\tvec4 texelRoughness = texture2D( roughnessMap, vUv );\n\troughnessFactor *= texelRoughness.g;\n#endif"; - - var roughnessmap_pars_fragment = "#ifdef USE_ROUGHNESSMAP\n\tuniform sampler2D roughnessMap;\n#endif"; - - var shadowmap_pars_fragment = "#if NUM_SPOT_LIGHT_COORDS > 0\n\tvarying vec4 vSpotLightCoord[ NUM_SPOT_LIGHT_COORDS ];\n#endif\n#if NUM_SPOT_LIGHT_MAPS > 0\n\tuniform sampler2D spotLightMap[ NUM_SPOT_LIGHT_MAPS ];\n#endif\n#ifdef USE_SHADOWMAP\n\t#if NUM_DIR_LIGHT_SHADOWS > 0\n\t\tuniform sampler2D directionalShadowMap[ NUM_DIR_LIGHT_SHADOWS ];\n\t\tvarying vec4 vDirectionalShadowCoord[ NUM_DIR_LIGHT_SHADOWS ];\n\t\tstruct DirectionalLightShadow {\n\t\t\tfloat shadowBias;\n\t\t\tfloat shadowNormalBias;\n\t\t\tfloat shadowRadius;\n\t\t\tvec2 shadowMapSize;\n\t\t};\n\t\tuniform DirectionalLightShadow directionalLightShadows[ NUM_DIR_LIGHT_SHADOWS ];\n\t#endif\n\t#if NUM_SPOT_LIGHT_SHADOWS > 0\n\t\tuniform sampler2D spotShadowMap[ NUM_SPOT_LIGHT_SHADOWS ];\n\t\tstruct SpotLightShadow {\n\t\t\tfloat shadowBias;\n\t\t\tfloat shadowNormalBias;\n\t\t\tfloat shadowRadius;\n\t\t\tvec2 shadowMapSize;\n\t\t};\n\t\tuniform SpotLightShadow spotLightShadows[ NUM_SPOT_LIGHT_SHADOWS ];\n\t#endif\n\t#if NUM_POINT_LIGHT_SHADOWS > 0\n\t\tuniform sampler2D pointShadowMap[ NUM_POINT_LIGHT_SHADOWS ];\n\t\tvarying vec4 vPointShadowCoord[ NUM_POINT_LIGHT_SHADOWS ];\n\t\tstruct PointLightShadow {\n\t\t\tfloat shadowBias;\n\t\t\tfloat shadowNormalBias;\n\t\t\tfloat shadowRadius;\n\t\t\tvec2 shadowMapSize;\n\t\t\tfloat shadowCameraNear;\n\t\t\tfloat shadowCameraFar;\n\t\t};\n\t\tuniform PointLightShadow pointLightShadows[ NUM_POINT_LIGHT_SHADOWS ];\n\t#endif\n\tfloat texture2DCompare( sampler2D depths, vec2 uv, float compare ) {\n\t\treturn step( compare, unpackRGBAToDepth( texture2D( depths, uv ) ) );\n\t}\n\tvec2 texture2DDistribution( sampler2D shadow, vec2 uv ) {\n\t\treturn unpackRGBATo2Half( texture2D( shadow, uv ) );\n\t}\n\tfloat VSMShadow (sampler2D shadow, vec2 uv, float compare ){\n\t\tfloat occlusion = 1.0;\n\t\tvec2 distribution = texture2DDistribution( shadow, uv );\n\t\tfloat hard_shadow = step( compare , distribution.x );\n\t\tif (hard_shadow != 1.0 ) {\n\t\t\tfloat distance = compare - distribution.x ;\n\t\t\tfloat variance = max( 0.00000, distribution.y * distribution.y );\n\t\t\tfloat softness_probability = variance / (variance + distance * distance );\t\t\tsoftness_probability = clamp( ( softness_probability - 0.3 ) / ( 0.95 - 0.3 ), 0.0, 1.0 );\t\t\tocclusion = clamp( max( hard_shadow, softness_probability ), 0.0, 1.0 );\n\t\t}\n\t\treturn occlusion;\n\t}\n\tfloat getShadow( sampler2D shadowMap, vec2 shadowMapSize, float shadowBias, float shadowRadius, vec4 shadowCoord ) {\n\t\tfloat shadow = 1.0;\n\t\tshadowCoord.xyz /= shadowCoord.w;\n\t\tshadowCoord.z += shadowBias;\n\t\tbool inFrustum = shadowCoord.x >= 0.0 && shadowCoord.x <= 1.0 && shadowCoord.y >= 0.0 && shadowCoord.y <= 1.0;\n\t\tbool frustumTest = inFrustum && shadowCoord.z <= 1.0;\n\t\tif ( frustumTest ) {\n\t\t#if defined( SHADOWMAP_TYPE_PCF )\n\t\t\tvec2 texelSize = vec2( 1.0 ) / shadowMapSize;\n\t\t\tfloat dx0 = - texelSize.x * shadowRadius;\n\t\t\tfloat dy0 = - texelSize.y * shadowRadius;\n\t\t\tfloat dx1 = + texelSize.x * shadowRadius;\n\t\t\tfloat dy1 = + texelSize.y * shadowRadius;\n\t\t\tfloat dx2 = dx0 / 2.0;\n\t\t\tfloat dy2 = dy0 / 2.0;\n\t\t\tfloat dx3 = dx1 / 2.0;\n\t\t\tfloat dy3 = dy1 / 2.0;\n\t\t\tshadow = (\n\t\t\t\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( dx0, dy0 ), shadowCoord.z ) +\n\t\t\t\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( 0.0, dy0 ), shadowCoord.z ) +\n\t\t\t\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( dx1, dy0 ), shadowCoord.z ) +\n\t\t\t\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( dx2, dy2 ), shadowCoord.z ) +\n\t\t\t\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( 0.0, dy2 ), shadowCoord.z ) +\n\t\t\t\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( dx3, dy2 ), shadowCoord.z ) +\n\t\t\t\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( dx0, 0.0 ), shadowCoord.z ) +\n\t\t\t\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( dx2, 0.0 ), shadowCoord.z ) +\n\t\t\t\ttexture2DCompare( shadowMap, shadowCoord.xy, shadowCoord.z ) +\n\t\t\t\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( dx3, 0.0 ), shadowCoord.z ) +\n\t\t\t\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( dx1, 0.0 ), shadowCoord.z ) +\n\t\t\t\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( dx2, dy3 ), shadowCoord.z ) +\n\t\t\t\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( 0.0, dy3 ), shadowCoord.z ) +\n\t\t\t\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( dx3, dy3 ), shadowCoord.z ) +\n\t\t\t\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( dx0, dy1 ), shadowCoord.z ) +\n\t\t\t\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( 0.0, dy1 ), shadowCoord.z ) +\n\t\t\t\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( dx1, dy1 ), shadowCoord.z )\n\t\t\t) * ( 1.0 / 17.0 );\n\t\t#elif defined( SHADOWMAP_TYPE_PCF_SOFT )\n\t\t\tvec2 texelSize = vec2( 1.0 ) / shadowMapSize;\n\t\t\tfloat dx = texelSize.x;\n\t\t\tfloat dy = texelSize.y;\n\t\t\tvec2 uv = shadowCoord.xy;\n\t\t\tvec2 f = fract( uv * shadowMapSize + 0.5 );\n\t\t\tuv -= f * texelSize;\n\t\t\tshadow = (\n\t\t\t\ttexture2DCompare( shadowMap, uv, shadowCoord.z ) +\n\t\t\t\ttexture2DCompare( shadowMap, uv + vec2( dx, 0.0 ), shadowCoord.z ) +\n\t\t\t\ttexture2DCompare( shadowMap, uv + vec2( 0.0, dy ), shadowCoord.z ) +\n\t\t\t\ttexture2DCompare( shadowMap, uv + texelSize, shadowCoord.z ) +\n\t\t\t\tmix( texture2DCompare( shadowMap, uv + vec2( -dx, 0.0 ), shadowCoord.z ),\n\t\t\t\t\t texture2DCompare( shadowMap, uv + vec2( 2.0 * dx, 0.0 ), shadowCoord.z ),\n\t\t\t\t\t f.x ) +\n\t\t\t\tmix( texture2DCompare( shadowMap, uv + vec2( -dx, dy ), shadowCoord.z ),\n\t\t\t\t\t texture2DCompare( shadowMap, uv + vec2( 2.0 * dx, dy ), shadowCoord.z ),\n\t\t\t\t\t f.x ) +\n\t\t\t\tmix( texture2DCompare( shadowMap, uv + vec2( 0.0, -dy ), shadowCoord.z ),\n\t\t\t\t\t texture2DCompare( shadowMap, uv + vec2( 0.0, 2.0 * dy ), shadowCoord.z ),\n\t\t\t\t\t f.y ) +\n\t\t\t\tmix( texture2DCompare( shadowMap, uv + vec2( dx, -dy ), shadowCoord.z ),\n\t\t\t\t\t texture2DCompare( shadowMap, uv + vec2( dx, 2.0 * dy ), shadowCoord.z ),\n\t\t\t\t\t f.y ) +\n\t\t\t\tmix( mix( texture2DCompare( shadowMap, uv + vec2( -dx, -dy ), shadowCoord.z ),\n\t\t\t\t\t\t texture2DCompare( shadowMap, uv + vec2( 2.0 * dx, -dy ), shadowCoord.z ),\n\t\t\t\t\t\t f.x ),\n\t\t\t\t\t mix( texture2DCompare( shadowMap, uv + vec2( -dx, 2.0 * dy ), shadowCoord.z ),\n\t\t\t\t\t\t texture2DCompare( shadowMap, uv + vec2( 2.0 * dx, 2.0 * dy ), shadowCoord.z ),\n\t\t\t\t\t\t f.x ),\n\t\t\t\t\t f.y )\n\t\t\t) * ( 1.0 / 9.0 );\n\t\t#elif defined( SHADOWMAP_TYPE_VSM )\n\t\t\tshadow = VSMShadow( shadowMap, shadowCoord.xy, shadowCoord.z );\n\t\t#else\n\t\t\tshadow = texture2DCompare( shadowMap, shadowCoord.xy, shadowCoord.z );\n\t\t#endif\n\t\t}\n\t\treturn shadow;\n\t}\n\tvec2 cubeToUV( vec3 v, float texelSizeY ) {\n\t\tvec3 absV = abs( v );\n\t\tfloat scaleToCube = 1.0 / max( absV.x, max( absV.y, absV.z ) );\n\t\tabsV *= scaleToCube;\n\t\tv *= scaleToCube * ( 1.0 - 2.0 * texelSizeY );\n\t\tvec2 planar = v.xy;\n\t\tfloat almostATexel = 1.5 * texelSizeY;\n\t\tfloat almostOne = 1.0 - almostATexel;\n\t\tif ( absV.z >= almostOne ) {\n\t\t\tif ( v.z > 0.0 )\n\t\t\t\tplanar.x = 4.0 - v.x;\n\t\t} else if ( absV.x >= almostOne ) {\n\t\t\tfloat signX = sign( v.x );\n\t\t\tplanar.x = v.z * signX + 2.0 * signX;\n\t\t} else if ( absV.y >= almostOne ) {\n\t\t\tfloat signY = sign( v.y );\n\t\t\tplanar.x = v.x + 2.0 * signY + 2.0;\n\t\t\tplanar.y = v.z * signY - 2.0;\n\t\t}\n\t\treturn vec2( 0.125, 0.25 ) * planar + vec2( 0.375, 0.75 );\n\t}\n\tfloat getPointShadow( sampler2D shadowMap, vec2 shadowMapSize, float shadowBias, float shadowRadius, vec4 shadowCoord, float shadowCameraNear, float shadowCameraFar ) {\n\t\tvec2 texelSize = vec2( 1.0 ) / ( shadowMapSize * vec2( 4.0, 2.0 ) );\n\t\tvec3 lightToPosition = shadowCoord.xyz;\n\t\tfloat dp = ( length( lightToPosition ) - shadowCameraNear ) / ( shadowCameraFar - shadowCameraNear );\t\tdp += shadowBias;\n\t\tvec3 bd3D = normalize( lightToPosition );\n\t\t#if defined( SHADOWMAP_TYPE_PCF ) || defined( SHADOWMAP_TYPE_PCF_SOFT ) || defined( SHADOWMAP_TYPE_VSM )\n\t\t\tvec2 offset = vec2( - 1, 1 ) * shadowRadius * texelSize.y;\n\t\t\treturn (\n\t\t\t\ttexture2DCompare( shadowMap, cubeToUV( bd3D + offset.xyy, texelSize.y ), dp ) +\n\t\t\t\ttexture2DCompare( shadowMap, cubeToUV( bd3D + offset.yyy, texelSize.y ), dp ) +\n\t\t\t\ttexture2DCompare( shadowMap, cubeToUV( bd3D + offset.xyx, texelSize.y ), dp ) +\n\t\t\t\ttexture2DCompare( shadowMap, cubeToUV( bd3D + offset.yyx, texelSize.y ), dp ) +\n\t\t\t\ttexture2DCompare( shadowMap, cubeToUV( bd3D, texelSize.y ), dp ) +\n\t\t\t\ttexture2DCompare( shadowMap, cubeToUV( bd3D + offset.xxy, texelSize.y ), dp ) +\n\t\t\t\ttexture2DCompare( shadowMap, cubeToUV( bd3D + offset.yxy, texelSize.y ), dp ) +\n\t\t\t\ttexture2DCompare( shadowMap, cubeToUV( bd3D + offset.xxx, texelSize.y ), dp ) +\n\t\t\t\ttexture2DCompare( shadowMap, cubeToUV( bd3D + offset.yxx, texelSize.y ), dp )\n\t\t\t) * ( 1.0 / 9.0 );\n\t\t#else\n\t\t\treturn texture2DCompare( shadowMap, cubeToUV( bd3D, texelSize.y ), dp );\n\t\t#endif\n\t}\n#endif"; - - var shadowmap_pars_vertex = "#if NUM_SPOT_LIGHT_COORDS > 0\n\tuniform mat4 spotLightMatrix[ NUM_SPOT_LIGHT_COORDS ];\n\tvarying vec4 vSpotLightCoord[ NUM_SPOT_LIGHT_COORDS ];\n#endif\n#ifdef USE_SHADOWMAP\n\t#if NUM_DIR_LIGHT_SHADOWS > 0\n\t\tuniform mat4 directionalShadowMatrix[ NUM_DIR_LIGHT_SHADOWS ];\n\t\tvarying vec4 vDirectionalShadowCoord[ NUM_DIR_LIGHT_SHADOWS ];\n\t\tstruct DirectionalLightShadow {\n\t\t\tfloat shadowBias;\n\t\t\tfloat shadowNormalBias;\n\t\t\tfloat shadowRadius;\n\t\t\tvec2 shadowMapSize;\n\t\t};\n\t\tuniform DirectionalLightShadow directionalLightShadows[ NUM_DIR_LIGHT_SHADOWS ];\n\t#endif\n\t#if NUM_SPOT_LIGHT_SHADOWS > 0\n\t\tstruct SpotLightShadow {\n\t\t\tfloat shadowBias;\n\t\t\tfloat shadowNormalBias;\n\t\t\tfloat shadowRadius;\n\t\t\tvec2 shadowMapSize;\n\t\t};\n\t\tuniform SpotLightShadow spotLightShadows[ NUM_SPOT_LIGHT_SHADOWS ];\n\t#endif\n\t#if NUM_POINT_LIGHT_SHADOWS > 0\n\t\tuniform mat4 pointShadowMatrix[ NUM_POINT_LIGHT_SHADOWS ];\n\t\tvarying vec4 vPointShadowCoord[ NUM_POINT_LIGHT_SHADOWS ];\n\t\tstruct PointLightShadow {\n\t\t\tfloat shadowBias;\n\t\t\tfloat shadowNormalBias;\n\t\t\tfloat shadowRadius;\n\t\t\tvec2 shadowMapSize;\n\t\t\tfloat shadowCameraNear;\n\t\t\tfloat shadowCameraFar;\n\t\t};\n\t\tuniform PointLightShadow pointLightShadows[ NUM_POINT_LIGHT_SHADOWS ];\n\t#endif\n#endif"; - - var shadowmap_vertex = "#if ( defined( USE_SHADOWMAP ) && ( NUM_DIR_LIGHT_SHADOWS > 0 || NUM_POINT_LIGHT_SHADOWS > 0 ) ) || ( NUM_SPOT_LIGHT_COORDS > 0 )\n\tvec3 shadowWorldNormal = inverseTransformDirection( transformedNormal, viewMatrix );\n\tvec4 shadowWorldPosition;\n#endif\n#if defined( USE_SHADOWMAP )\n\t#if NUM_DIR_LIGHT_SHADOWS > 0\n\t\t#pragma unroll_loop_start\n\t\tfor ( int i = 0; i < NUM_DIR_LIGHT_SHADOWS; i ++ ) {\n\t\t\tshadowWorldPosition = worldPosition + vec4( shadowWorldNormal * directionalLightShadows[ i ].shadowNormalBias, 0 );\n\t\t\tvDirectionalShadowCoord[ i ] = directionalShadowMatrix[ i ] * shadowWorldPosition;\n\t\t}\n\t\t#pragma unroll_loop_end\n\t#endif\n\t#if NUM_POINT_LIGHT_SHADOWS > 0\n\t\t#pragma unroll_loop_start\n\t\tfor ( int i = 0; i < NUM_POINT_LIGHT_SHADOWS; i ++ ) {\n\t\t\tshadowWorldPosition = worldPosition + vec4( shadowWorldNormal * pointLightShadows[ i ].shadowNormalBias, 0 );\n\t\t\tvPointShadowCoord[ i ] = pointShadowMatrix[ i ] * shadowWorldPosition;\n\t\t}\n\t\t#pragma unroll_loop_end\n\t#endif\n#endif\n#if NUM_SPOT_LIGHT_COORDS > 0\n\t#pragma unroll_loop_start\n\tfor ( int i = 0; i < NUM_SPOT_LIGHT_COORDS; i ++ ) {\n\t\tshadowWorldPosition = worldPosition;\n\t\t#if ( defined( USE_SHADOWMAP ) && UNROLLED_LOOP_INDEX < NUM_SPOT_LIGHT_SHADOWS )\n\t\t\tshadowWorldPosition.xyz += shadowWorldNormal * spotLightShadows[ i ].shadowNormalBias;\n\t\t#endif\n\t\tvSpotLightCoord[ i ] = spotLightMatrix[ i ] * shadowWorldPosition;\n\t}\n\t#pragma unroll_loop_end\n#endif"; - - var shadowmask_pars_fragment = "float getShadowMask() {\n\tfloat shadow = 1.0;\n\t#ifdef USE_SHADOWMAP\n\t#if NUM_DIR_LIGHT_SHADOWS > 0\n\tDirectionalLightShadow directionalLight;\n\t#pragma unroll_loop_start\n\tfor ( int i = 0; i < NUM_DIR_LIGHT_SHADOWS; i ++ ) {\n\t\tdirectionalLight = directionalLightShadows[ i ];\n\t\tshadow *= receiveShadow ? getShadow( directionalShadowMap[ i ], directionalLight.shadowMapSize, directionalLight.shadowBias, directionalLight.shadowRadius, vDirectionalShadowCoord[ i ] ) : 1.0;\n\t}\n\t#pragma unroll_loop_end\n\t#endif\n\t#if NUM_SPOT_LIGHT_SHADOWS > 0\n\tSpotLightShadow spotLight;\n\t#pragma unroll_loop_start\n\tfor ( int i = 0; i < NUM_SPOT_LIGHT_SHADOWS; i ++ ) {\n\t\tspotLight = spotLightShadows[ i ];\n\t\tshadow *= receiveShadow ? getShadow( spotShadowMap[ i ], spotLight.shadowMapSize, spotLight.shadowBias, spotLight.shadowRadius, vSpotLightCoord[ i ] ) : 1.0;\n\t}\n\t#pragma unroll_loop_end\n\t#endif\n\t#if NUM_POINT_LIGHT_SHADOWS > 0\n\tPointLightShadow pointLight;\n\t#pragma unroll_loop_start\n\tfor ( int i = 0; i < NUM_POINT_LIGHT_SHADOWS; i ++ ) {\n\t\tpointLight = pointLightShadows[ i ];\n\t\tshadow *= receiveShadow ? getPointShadow( pointShadowMap[ i ], pointLight.shadowMapSize, pointLight.shadowBias, pointLight.shadowRadius, vPointShadowCoord[ i ], pointLight.shadowCameraNear, pointLight.shadowCameraFar ) : 1.0;\n\t}\n\t#pragma unroll_loop_end\n\t#endif\n\t#endif\n\treturn shadow;\n}"; - - var skinbase_vertex = "#ifdef USE_SKINNING\n\tmat4 boneMatX = getBoneMatrix( skinIndex.x );\n\tmat4 boneMatY = getBoneMatrix( skinIndex.y );\n\tmat4 boneMatZ = getBoneMatrix( skinIndex.z );\n\tmat4 boneMatW = getBoneMatrix( skinIndex.w );\n#endif"; - - var skinning_pars_vertex = "#ifdef USE_SKINNING\n\tuniform mat4 bindMatrix;\n\tuniform mat4 bindMatrixInverse;\n\tuniform highp sampler2D boneTexture;\n\tuniform int boneTextureSize;\n\tmat4 getBoneMatrix( const in float i ) {\n\t\tfloat j = i * 4.0;\n\t\tfloat x = mod( j, float( boneTextureSize ) );\n\t\tfloat y = floor( j / float( boneTextureSize ) );\n\t\tfloat dx = 1.0 / float( boneTextureSize );\n\t\tfloat dy = 1.0 / float( boneTextureSize );\n\t\ty = dy * ( y + 0.5 );\n\t\tvec4 v1 = texture2D( boneTexture, vec2( dx * ( x + 0.5 ), y ) );\n\t\tvec4 v2 = texture2D( boneTexture, vec2( dx * ( x + 1.5 ), y ) );\n\t\tvec4 v3 = texture2D( boneTexture, vec2( dx * ( x + 2.5 ), y ) );\n\t\tvec4 v4 = texture2D( boneTexture, vec2( dx * ( x + 3.5 ), y ) );\n\t\tmat4 bone = mat4( v1, v2, v3, v4 );\n\t\treturn bone;\n\t}\n#endif"; - - var skinning_vertex = "#ifdef USE_SKINNING\n\tvec4 skinVertex = bindMatrix * vec4( transformed, 1.0 );\n\tvec4 skinned = vec4( 0.0 );\n\tskinned += boneMatX * skinVertex * skinWeight.x;\n\tskinned += boneMatY * skinVertex * skinWeight.y;\n\tskinned += boneMatZ * skinVertex * skinWeight.z;\n\tskinned += boneMatW * skinVertex * skinWeight.w;\n\ttransformed = ( bindMatrixInverse * skinned ).xyz;\n#endif"; - - var skinnormal_vertex = "#ifdef USE_SKINNING\n\tmat4 skinMatrix = mat4( 0.0 );\n\tskinMatrix += skinWeight.x * boneMatX;\n\tskinMatrix += skinWeight.y * boneMatY;\n\tskinMatrix += skinWeight.z * boneMatZ;\n\tskinMatrix += skinWeight.w * boneMatW;\n\tskinMatrix = bindMatrixInverse * skinMatrix * bindMatrix;\n\tobjectNormal = vec4( skinMatrix * vec4( objectNormal, 0.0 ) ).xyz;\n\t#ifdef USE_TANGENT\n\t\tobjectTangent = vec4( skinMatrix * vec4( objectTangent, 0.0 ) ).xyz;\n\t#endif\n#endif"; - - var specularmap_fragment = "float specularStrength;\n#ifdef USE_SPECULARMAP\n\tvec4 texelSpecular = texture2D( specularMap, vUv );\n\tspecularStrength = texelSpecular.r;\n#else\n\tspecularStrength = 1.0;\n#endif"; - - var specularmap_pars_fragment = "#ifdef USE_SPECULARMAP\n\tuniform sampler2D specularMap;\n#endif"; - - var tonemapping_fragment = "#if defined( TONE_MAPPING )\n\tgl_FragColor.rgb = toneMapping( gl_FragColor.rgb );\n#endif"; - - var tonemapping_pars_fragment = "#ifndef saturate\n#define saturate( a ) clamp( a, 0.0, 1.0 )\n#endif\nuniform float toneMappingExposure;\nvec3 LinearToneMapping( vec3 color ) {\n\treturn toneMappingExposure * color;\n}\nvec3 ReinhardToneMapping( vec3 color ) {\n\tcolor *= toneMappingExposure;\n\treturn saturate( color / ( vec3( 1.0 ) + color ) );\n}\nvec3 OptimizedCineonToneMapping( vec3 color ) {\n\tcolor *= toneMappingExposure;\n\tcolor = max( vec3( 0.0 ), color - 0.004 );\n\treturn pow( ( color * ( 6.2 * color + 0.5 ) ) / ( color * ( 6.2 * color + 1.7 ) + 0.06 ), vec3( 2.2 ) );\n}\nvec3 RRTAndODTFit( vec3 v ) {\n\tvec3 a = v * ( v + 0.0245786 ) - 0.000090537;\n\tvec3 b = v * ( 0.983729 * v + 0.4329510 ) + 0.238081;\n\treturn a / b;\n}\nvec3 ACESFilmicToneMapping( vec3 color ) {\n\tconst mat3 ACESInputMat = mat3(\n\t\tvec3( 0.59719, 0.07600, 0.02840 ),\t\tvec3( 0.35458, 0.90834, 0.13383 ),\n\t\tvec3( 0.04823, 0.01566, 0.83777 )\n\t);\n\tconst mat3 ACESOutputMat = mat3(\n\t\tvec3( 1.60475, -0.10208, -0.00327 ),\t\tvec3( -0.53108, 1.10813, -0.07276 ),\n\t\tvec3( -0.07367, -0.00605, 1.07602 )\n\t);\n\tcolor *= toneMappingExposure / 0.6;\n\tcolor = ACESInputMat * color;\n\tcolor = RRTAndODTFit( color );\n\tcolor = ACESOutputMat * color;\n\treturn saturate( color );\n}\nvec3 CustomToneMapping( vec3 color ) { return color; }"; - - var transmission_fragment = "#ifdef USE_TRANSMISSION\n\tmaterial.transmission = transmission;\n\tmaterial.transmissionAlpha = 1.0;\n\tmaterial.thickness = thickness;\n\tmaterial.attenuationDistance = attenuationDistance;\n\tmaterial.attenuationColor = attenuationColor;\n\t#ifdef USE_TRANSMISSIONMAP\n\t\tmaterial.transmission *= texture2D( transmissionMap, vUv ).r;\n\t#endif\n\t#ifdef USE_THICKNESSMAP\n\t\tmaterial.thickness *= texture2D( thicknessMap, vUv ).g;\n\t#endif\n\tvec3 pos = vWorldPosition;\n\tvec3 v = normalize( cameraPosition - pos );\n\tvec3 n = inverseTransformDirection( normal, viewMatrix );\n\tvec4 transmission = getIBLVolumeRefraction(\n\t\tn, v, material.roughness, material.diffuseColor, material.specularColor, material.specularF90,\n\t\tpos, modelMatrix, viewMatrix, projectionMatrix, material.ior, material.thickness,\n\t\tmaterial.attenuationColor, material.attenuationDistance );\n\tmaterial.transmissionAlpha = mix( material.transmissionAlpha, transmission.a, material.transmission );\n\ttotalDiffuse = mix( totalDiffuse, transmission.rgb, material.transmission );\n#endif"; - - var transmission_pars_fragment = "#ifdef USE_TRANSMISSION\n\tuniform float transmission;\n\tuniform float thickness;\n\tuniform float attenuationDistance;\n\tuniform vec3 attenuationColor;\n\t#ifdef USE_TRANSMISSIONMAP\n\t\tuniform sampler2D transmissionMap;\n\t#endif\n\t#ifdef USE_THICKNESSMAP\n\t\tuniform sampler2D thicknessMap;\n\t#endif\n\tuniform vec2 transmissionSamplerSize;\n\tuniform sampler2D transmissionSamplerMap;\n\tuniform mat4 modelMatrix;\n\tuniform mat4 projectionMatrix;\n\tvarying vec3 vWorldPosition;\n\tvec3 getVolumeTransmissionRay( const in vec3 n, const in vec3 v, const in float thickness, const in float ior, const in mat4 modelMatrix ) {\n\t\tvec3 refractionVector = refract( - v, normalize( n ), 1.0 / ior );\n\t\tvec3 modelScale;\n\t\tmodelScale.x = length( vec3( modelMatrix[ 0 ].xyz ) );\n\t\tmodelScale.y = length( vec3( modelMatrix[ 1 ].xyz ) );\n\t\tmodelScale.z = length( vec3( modelMatrix[ 2 ].xyz ) );\n\t\treturn normalize( refractionVector ) * thickness * modelScale;\n\t}\n\tfloat applyIorToRoughness( const in float roughness, const in float ior ) {\n\t\treturn roughness * clamp( ior * 2.0 - 2.0, 0.0, 1.0 );\n\t}\n\tvec4 getTransmissionSample( const in vec2 fragCoord, const in float roughness, const in float ior ) {\n\t\tfloat lod = log2( transmissionSamplerSize.x ) * applyIorToRoughness( roughness, ior );\n\t\treturn textureBicubic( transmissionSamplerMap, fragCoord.xy, lod );\n\t}\n\tvec3 applyVolumeAttenuation( const in vec3 radiance, const in float transmissionDistance, const in vec3 attenuationColor, const in float attenuationDistance ) {\n\t\tif ( isinf( attenuationDistance ) ) {\n\t\t\treturn radiance;\n\t\t} else {\n\t\t\tvec3 attenuationCoefficient = -log( attenuationColor ) / attenuationDistance;\n\t\t\tvec3 transmittance = exp( - attenuationCoefficient * transmissionDistance );\t\t\treturn transmittance * radiance;\n\t\t}\n\t}\n\tvec4 getIBLVolumeRefraction( const in vec3 n, const in vec3 v, const in float roughness, const in vec3 diffuseColor,\n\t\tconst in vec3 specularColor, const in float specularF90, const in vec3 position, const in mat4 modelMatrix,\n\t\tconst in mat4 viewMatrix, const in mat4 projMatrix, const in float ior, const in float thickness,\n\t\tconst in vec3 attenuationColor, const in float attenuationDistance ) {\n\t\tvec3 transmissionRay = getVolumeTransmissionRay( n, v, thickness, ior, modelMatrix );\n\t\tvec3 refractedRayExit = position + transmissionRay;\n\t\tvec4 ndcPos = projMatrix * viewMatrix * vec4( refractedRayExit, 1.0 );\n\t\tvec2 refractionCoords = ndcPos.xy / ndcPos.w;\n\t\trefractionCoords += 1.0;\n\t\trefractionCoords /= 2.0;\n\t\tvec4 transmittedLight = getTransmissionSample( refractionCoords, roughness, ior );\n\t\tvec3 attenuatedColor = applyVolumeAttenuation( transmittedLight.rgb, length( transmissionRay ), attenuationColor, attenuationDistance );\n\t\tvec3 F = EnvironmentBRDF( n, v, specularColor, specularF90, roughness );\n\t\treturn vec4( ( 1.0 - F ) * attenuatedColor * diffuseColor, transmittedLight.a );\n\t}\n#endif"; - - var uv_pars_fragment = "#if ( defined( USE_UV ) && ! defined( UVS_VERTEX_ONLY ) )\n\tvarying vec2 vUv;\n#endif"; - - var uv_pars_vertex = "#ifdef USE_UV\n\t#ifdef UVS_VERTEX_ONLY\n\t\tvec2 vUv;\n\t#else\n\t\tvarying vec2 vUv;\n\t#endif\n\tuniform mat3 uvTransform;\n#endif"; - - var uv_vertex = "#ifdef USE_UV\n\tvUv = ( uvTransform * vec3( uv, 1 ) ).xy;\n#endif"; - - var uv2_pars_fragment = "#if defined( USE_LIGHTMAP ) || defined( USE_AOMAP )\n\tvarying vec2 vUv2;\n#endif"; - - var uv2_pars_vertex = "#if defined( USE_LIGHTMAP ) || defined( USE_AOMAP )\n\tattribute vec2 uv2;\n\tvarying vec2 vUv2;\n\tuniform mat3 uv2Transform;\n#endif"; - - var uv2_vertex = "#if defined( USE_LIGHTMAP ) || defined( USE_AOMAP )\n\tvUv2 = ( uv2Transform * vec3( uv2, 1 ) ).xy;\n#endif"; - - var worldpos_vertex = "#if defined( USE_ENVMAP ) || defined( DISTANCE ) || defined ( USE_SHADOWMAP ) || defined ( USE_TRANSMISSION ) || NUM_SPOT_LIGHT_COORDS > 0\n\tvec4 worldPosition = vec4( transformed, 1.0 );\n\t#ifdef USE_INSTANCING\n\t\tworldPosition = instanceMatrix * worldPosition;\n\t#endif\n\tworldPosition = modelMatrix * worldPosition;\n#endif"; - - const vertex$h = "varying vec2 vUv;\nuniform mat3 uvTransform;\nvoid main() {\n\tvUv = ( uvTransform * vec3( uv, 1 ) ).xy;\n\tgl_Position = vec4( position.xy, 1.0, 1.0 );\n}"; - - const fragment$h = "uniform sampler2D t2D;\nuniform float backgroundIntensity;\nvarying vec2 vUv;\nvoid main() {\n\tvec4 texColor = texture2D( t2D, vUv );\n\t#ifdef DECODE_VIDEO_TEXTURE\n\t\ttexColor = vec4( mix( pow( texColor.rgb * 0.9478672986 + vec3( 0.0521327014 ), vec3( 2.4 ) ), texColor.rgb * 0.0773993808, vec3( lessThanEqual( texColor.rgb, vec3( 0.04045 ) ) ) ), texColor.w );\n\t#endif\n\ttexColor.rgb *= backgroundIntensity;\n\tgl_FragColor = texColor;\n\t#include \n\t#include \n}"; - - const vertex$g = "varying vec3 vWorldDirection;\n#include \nvoid main() {\n\tvWorldDirection = transformDirection( position, modelMatrix );\n\t#include \n\t#include \n\tgl_Position.z = gl_Position.w;\n}"; - - const fragment$g = "#ifdef ENVMAP_TYPE_CUBE\n\tuniform samplerCube envMap;\n#elif defined( ENVMAP_TYPE_CUBE_UV )\n\tuniform sampler2D envMap;\n#endif\nuniform float flipEnvMap;\nuniform float backgroundBlurriness;\nuniform float backgroundIntensity;\nvarying vec3 vWorldDirection;\n#include \nvoid main() {\n\t#ifdef ENVMAP_TYPE_CUBE\n\t\tvec4 texColor = textureCube( envMap, vec3( flipEnvMap * vWorldDirection.x, vWorldDirection.yz ) );\n\t#elif defined( ENVMAP_TYPE_CUBE_UV )\n\t\tvec4 texColor = textureCubeUV( envMap, vWorldDirection, backgroundBlurriness );\n\t#else\n\t\tvec4 texColor = vec4( 0.0, 0.0, 0.0, 1.0 );\n\t#endif\n\ttexColor.rgb *= backgroundIntensity;\n\tgl_FragColor = texColor;\n\t#include \n\t#include \n}"; - - const vertex$f = "varying vec3 vWorldDirection;\n#include \nvoid main() {\n\tvWorldDirection = transformDirection( position, modelMatrix );\n\t#include \n\t#include \n\tgl_Position.z = gl_Position.w;\n}"; - - const fragment$f = "uniform samplerCube tCube;\nuniform float tFlip;\nuniform float opacity;\nvarying vec3 vWorldDirection;\nvoid main() {\n\tvec4 texColor = textureCube( tCube, vec3( tFlip * vWorldDirection.x, vWorldDirection.yz ) );\n\tgl_FragColor = texColor;\n\tgl_FragColor.a *= opacity;\n\t#include \n\t#include \n}"; - - const vertex$e = "#include \n#include \n#include \n#include \n#include \n#include \n#include \nvarying vec2 vHighPrecisionZW;\nvoid main() {\n\t#include \n\t#include \n\t#ifdef USE_DISPLACEMENTMAP\n\t\t#include \n\t\t#include \n\t\t#include \n\t#endif\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\tvHighPrecisionZW = gl_Position.zw;\n}"; - - const fragment$e = "#if DEPTH_PACKING == 3200\n\tuniform float opacity;\n#endif\n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \nvarying vec2 vHighPrecisionZW;\nvoid main() {\n\t#include \n\tvec4 diffuseColor = vec4( 1.0 );\n\t#if DEPTH_PACKING == 3200\n\t\tdiffuseColor.a = opacity;\n\t#endif\n\t#include \n\t#include \n\t#include \n\t#include \n\tfloat fragCoordZ = 0.5 * vHighPrecisionZW[0] / vHighPrecisionZW[1] + 0.5;\n\t#if DEPTH_PACKING == 3200\n\t\tgl_FragColor = vec4( vec3( 1.0 - fragCoordZ ), opacity );\n\t#elif DEPTH_PACKING == 3201\n\t\tgl_FragColor = packDepthToRGBA( fragCoordZ );\n\t#endif\n}"; - - const vertex$d = "#define DISTANCE\nvarying vec3 vWorldPosition;\n#include \n#include \n#include \n#include \n#include \n#include \nvoid main() {\n\t#include \n\t#include \n\t#ifdef USE_DISPLACEMENTMAP\n\t\t#include \n\t\t#include \n\t\t#include \n\t#endif\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\tvWorldPosition = worldPosition.xyz;\n}"; - - const fragment$d = "#define DISTANCE\nuniform vec3 referencePosition;\nuniform float nearDistance;\nuniform float farDistance;\nvarying vec3 vWorldPosition;\n#include \n#include \n#include \n#include \n#include \n#include \n#include \nvoid main () {\n\t#include \n\tvec4 diffuseColor = vec4( 1.0 );\n\t#include \n\t#include \n\t#include \n\tfloat dist = length( vWorldPosition - referencePosition );\n\tdist = ( dist - nearDistance ) / ( farDistance - nearDistance );\n\tdist = saturate( dist );\n\tgl_FragColor = packDepthToRGBA( dist );\n}"; - - const vertex$c = "varying vec3 vWorldDirection;\n#include \nvoid main() {\n\tvWorldDirection = transformDirection( position, modelMatrix );\n\t#include \n\t#include \n}"; - - const fragment$c = "uniform sampler2D tEquirect;\nvarying vec3 vWorldDirection;\n#include \nvoid main() {\n\tvec3 direction = normalize( vWorldDirection );\n\tvec2 sampleUV = equirectUv( direction );\n\tgl_FragColor = texture2D( tEquirect, sampleUV );\n\t#include \n\t#include \n}"; - - const vertex$b = "uniform float scale;\nattribute float lineDistance;\nvarying float vLineDistance;\n#include \n#include \n#include \n#include \n#include \n#include \nvoid main() {\n\tvLineDistance = scale * lineDistance;\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n}"; - - const fragment$b = "uniform vec3 diffuse;\nuniform float opacity;\nuniform float dashSize;\nuniform float totalSize;\nvarying float vLineDistance;\n#include \n#include \n#include \n#include \n#include \nvoid main() {\n\t#include \n\tif ( mod( vLineDistance, totalSize ) > dashSize ) {\n\t\tdiscard;\n\t}\n\tvec3 outgoingLight = vec3( 0.0 );\n\tvec4 diffuseColor = vec4( diffuse, opacity );\n\t#include \n\t#include \n\toutgoingLight = diffuseColor.rgb;\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n}"; - - const vertex$a = "#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \nvoid main() {\n\t#include \n\t#include \n\t#include \n\t#include \n\t#if defined ( USE_ENVMAP ) || defined ( USE_SKINNING )\n\t\t#include \n\t\t#include \n\t\t#include \n\t\t#include \n\t\t#include \n\t#endif\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n}"; - - const fragment$a = "uniform vec3 diffuse;\nuniform float opacity;\n#ifndef FLAT_SHADED\n\tvarying vec3 vNormal;\n#endif\n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \nvoid main() {\n\t#include \n\tvec4 diffuseColor = vec4( diffuse, opacity );\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\tReflectedLight reflectedLight = ReflectedLight( vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ) );\n\t#ifdef USE_LIGHTMAP\n\t\tvec4 lightMapTexel = texture2D( lightMap, vUv2 );\n\t\treflectedLight.indirectDiffuse += lightMapTexel.rgb * lightMapIntensity * RECIPROCAL_PI;\n\t#else\n\t\treflectedLight.indirectDiffuse += vec3( 1.0 );\n\t#endif\n\t#include \n\treflectedLight.indirectDiffuse *= diffuseColor.rgb;\n\tvec3 outgoingLight = reflectedLight.indirectDiffuse;\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n}"; - - const vertex$9 = "#define LAMBERT\nvarying vec3 vViewPosition;\n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \nvoid main() {\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\tvViewPosition = - mvPosition.xyz;\n\t#include \n\t#include \n\t#include \n\t#include \n}"; - - const fragment$9 = "#define LAMBERT\nuniform vec3 diffuse;\nuniform vec3 emissive;\nuniform float opacity;\n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \nvoid main() {\n\t#include \n\tvec4 diffuseColor = vec4( diffuse, opacity );\n\tReflectedLight reflectedLight = ReflectedLight( vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ) );\n\tvec3 totalEmissiveRadiance = emissive;\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\tvec3 outgoingLight = reflectedLight.directDiffuse + reflectedLight.indirectDiffuse + totalEmissiveRadiance;\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n}"; - - const vertex$8 = "#define MATCAP\nvarying vec3 vViewPosition;\n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \nvoid main() {\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\tvViewPosition = - mvPosition.xyz;\n}"; - - const fragment$8 = "#define MATCAP\nuniform vec3 diffuse;\nuniform float opacity;\nuniform sampler2D matcap;\nvarying vec3 vViewPosition;\n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \nvoid main() {\n\t#include \n\tvec4 diffuseColor = vec4( diffuse, opacity );\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\tvec3 viewDir = normalize( vViewPosition );\n\tvec3 x = normalize( vec3( viewDir.z, 0.0, - viewDir.x ) );\n\tvec3 y = cross( viewDir, x );\n\tvec2 uv = vec2( dot( x, normal ), dot( y, normal ) ) * 0.495 + 0.5;\n\t#ifdef USE_MATCAP\n\t\tvec4 matcapColor = texture2D( matcap, uv );\n\t#else\n\t\tvec4 matcapColor = vec4( vec3( mix( 0.2, 0.8, uv.y ) ), 1.0 );\n\t#endif\n\tvec3 outgoingLight = diffuseColor.rgb * matcapColor.rgb;\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n}"; - - const vertex$7 = "#define NORMAL\n#if defined( FLAT_SHADED ) || defined( USE_BUMPMAP ) || defined( TANGENTSPACE_NORMALMAP )\n\tvarying vec3 vViewPosition;\n#endif\n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \nvoid main() {\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n#if defined( FLAT_SHADED ) || defined( USE_BUMPMAP ) || defined( TANGENTSPACE_NORMALMAP )\n\tvViewPosition = - mvPosition.xyz;\n#endif\n}"; - - const fragment$7 = "#define NORMAL\nuniform float opacity;\n#if defined( FLAT_SHADED ) || defined( USE_BUMPMAP ) || defined( TANGENTSPACE_NORMALMAP )\n\tvarying vec3 vViewPosition;\n#endif\n#include \n#include \n#include \n#include \n#include \n#include \n#include \nvoid main() {\n\t#include \n\t#include \n\t#include \n\t#include \n\tgl_FragColor = vec4( packNormalToRGB( normal ), opacity );\n\t#ifdef OPAQUE\n\t\tgl_FragColor.a = 1.0;\n\t#endif\n}"; - - const vertex$6 = "#define PHONG\nvarying vec3 vViewPosition;\n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \nvoid main() {\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\tvViewPosition = - mvPosition.xyz;\n\t#include \n\t#include \n\t#include \n\t#include \n}"; - - const fragment$6 = "#define PHONG\nuniform vec3 diffuse;\nuniform vec3 emissive;\nuniform vec3 specular;\nuniform float shininess;\nuniform float opacity;\n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \nvoid main() {\n\t#include \n\tvec4 diffuseColor = vec4( diffuse, opacity );\n\tReflectedLight reflectedLight = ReflectedLight( vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ) );\n\tvec3 totalEmissiveRadiance = emissive;\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\tvec3 outgoingLight = reflectedLight.directDiffuse + reflectedLight.indirectDiffuse + reflectedLight.directSpecular + reflectedLight.indirectSpecular + totalEmissiveRadiance;\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n}"; - - const vertex$5 = "#define STANDARD\nvarying vec3 vViewPosition;\n#ifdef USE_TRANSMISSION\n\tvarying vec3 vWorldPosition;\n#endif\n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \nvoid main() {\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\tvViewPosition = - mvPosition.xyz;\n\t#include \n\t#include \n\t#include \n#ifdef USE_TRANSMISSION\n\tvWorldPosition = worldPosition.xyz;\n#endif\n}"; - - const fragment$5 = "#define STANDARD\n#ifdef PHYSICAL\n\t#define IOR\n\t#define SPECULAR\n#endif\nuniform vec3 diffuse;\nuniform vec3 emissive;\nuniform float roughness;\nuniform float metalness;\nuniform float opacity;\n#ifdef IOR\n\tuniform float ior;\n#endif\n#ifdef SPECULAR\n\tuniform float specularIntensity;\n\tuniform vec3 specularColor;\n\t#ifdef USE_SPECULARINTENSITYMAP\n\t\tuniform sampler2D specularIntensityMap;\n\t#endif\n\t#ifdef USE_SPECULARCOLORMAP\n\t\tuniform sampler2D specularColorMap;\n\t#endif\n#endif\n#ifdef USE_CLEARCOAT\n\tuniform float clearcoat;\n\tuniform float clearcoatRoughness;\n#endif\n#ifdef USE_IRIDESCENCE\n\tuniform float iridescence;\n\tuniform float iridescenceIOR;\n\tuniform float iridescenceThicknessMinimum;\n\tuniform float iridescenceThicknessMaximum;\n#endif\n#ifdef USE_SHEEN\n\tuniform vec3 sheenColor;\n\tuniform float sheenRoughness;\n\t#ifdef USE_SHEENCOLORMAP\n\t\tuniform sampler2D sheenColorMap;\n\t#endif\n\t#ifdef USE_SHEENROUGHNESSMAP\n\t\tuniform sampler2D sheenRoughnessMap;\n\t#endif\n#endif\nvarying vec3 vViewPosition;\n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \nvoid main() {\n\t#include \n\tvec4 diffuseColor = vec4( diffuse, opacity );\n\tReflectedLight reflectedLight = ReflectedLight( vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ) );\n\tvec3 totalEmissiveRadiance = emissive;\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\tvec3 totalDiffuse = reflectedLight.directDiffuse + reflectedLight.indirectDiffuse;\n\tvec3 totalSpecular = reflectedLight.directSpecular + reflectedLight.indirectSpecular;\n\t#include \n\tvec3 outgoingLight = totalDiffuse + totalSpecular + totalEmissiveRadiance;\n\t#ifdef USE_SHEEN\n\t\tfloat sheenEnergyComp = 1.0 - 0.157 * max3( material.sheenColor );\n\t\toutgoingLight = outgoingLight * sheenEnergyComp + sheenSpecular;\n\t#endif\n\t#ifdef USE_CLEARCOAT\n\t\tfloat dotNVcc = saturate( dot( geometry.clearcoatNormal, geometry.viewDir ) );\n\t\tvec3 Fcc = F_Schlick( material.clearcoatF0, material.clearcoatF90, dotNVcc );\n\t\toutgoingLight = outgoingLight * ( 1.0 - material.clearcoat * Fcc ) + clearcoatSpecular * material.clearcoat;\n\t#endif\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n}"; - - const vertex$4 = "#define TOON\nvarying vec3 vViewPosition;\n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \nvoid main() {\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\tvViewPosition = - mvPosition.xyz;\n\t#include \n\t#include \n\t#include \n}"; - - const fragment$4 = "#define TOON\nuniform vec3 diffuse;\nuniform vec3 emissive;\nuniform float opacity;\n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \nvoid main() {\n\t#include \n\tvec4 diffuseColor = vec4( diffuse, opacity );\n\tReflectedLight reflectedLight = ReflectedLight( vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ) );\n\tvec3 totalEmissiveRadiance = emissive;\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\tvec3 outgoingLight = reflectedLight.directDiffuse + reflectedLight.indirectDiffuse + totalEmissiveRadiance;\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n}"; - - const vertex$3 = "uniform float size;\nuniform float scale;\n#include \n#include \n#include \n#include \n#include \n#include \nvoid main() {\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\tgl_PointSize = size;\n\t#ifdef USE_SIZEATTENUATION\n\t\tbool isPerspective = isPerspectiveMatrix( projectionMatrix );\n\t\tif ( isPerspective ) gl_PointSize *= ( scale / - mvPosition.z );\n\t#endif\n\t#include \n\t#include \n\t#include \n\t#include \n}"; - - const fragment$3 = "uniform vec3 diffuse;\nuniform float opacity;\n#include \n#include \n#include \n#include \n#include \n#include \n#include \nvoid main() {\n\t#include \n\tvec3 outgoingLight = vec3( 0.0 );\n\tvec4 diffuseColor = vec4( diffuse, opacity );\n\t#include \n\t#include \n\t#include \n\t#include \n\toutgoingLight = diffuseColor.rgb;\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n}"; - - const vertex$2 = "#include \n#include \n#include \n#include \n#include \n#include \nvoid main() {\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n}"; - - const fragment$2 = "uniform vec3 color;\nuniform float opacity;\n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \nvoid main() {\n\t#include \n\tgl_FragColor = vec4( color, opacity * ( 1.0 - getShadowMask() ) );\n\t#include \n\t#include \n\t#include \n}"; - - const vertex$1 = "uniform float rotation;\nuniform vec2 center;\n#include \n#include \n#include \n#include \n#include \nvoid main() {\n\t#include \n\tvec4 mvPosition = modelViewMatrix * vec4( 0.0, 0.0, 0.0, 1.0 );\n\tvec2 scale;\n\tscale.x = length( vec3( modelMatrix[ 0 ].x, modelMatrix[ 0 ].y, modelMatrix[ 0 ].z ) );\n\tscale.y = length( vec3( modelMatrix[ 1 ].x, modelMatrix[ 1 ].y, modelMatrix[ 1 ].z ) );\n\t#ifndef USE_SIZEATTENUATION\n\t\tbool isPerspective = isPerspectiveMatrix( projectionMatrix );\n\t\tif ( isPerspective ) scale *= - mvPosition.z;\n\t#endif\n\tvec2 alignedPosition = ( position.xy - ( center - vec2( 0.5 ) ) ) * scale;\n\tvec2 rotatedPosition;\n\trotatedPosition.x = cos( rotation ) * alignedPosition.x - sin( rotation ) * alignedPosition.y;\n\trotatedPosition.y = sin( rotation ) * alignedPosition.x + cos( rotation ) * alignedPosition.y;\n\tmvPosition.xy += rotatedPosition;\n\tgl_Position = projectionMatrix * mvPosition;\n\t#include \n\t#include \n\t#include \n}"; - - const fragment$1 = "uniform vec3 diffuse;\nuniform float opacity;\n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \nvoid main() {\n\t#include \n\tvec3 outgoingLight = vec3( 0.0 );\n\tvec4 diffuseColor = vec4( diffuse, opacity );\n\t#include \n\t#include \n\t#include \n\t#include \n\toutgoingLight = diffuseColor.rgb;\n\t#include \n\t#include \n\t#include \n\t#include \n}"; - - const ShaderChunk = { - alphamap_fragment: alphamap_fragment, - alphamap_pars_fragment: alphamap_pars_fragment, - alphatest_fragment: alphatest_fragment, - alphatest_pars_fragment: alphatest_pars_fragment, - aomap_fragment: aomap_fragment, - aomap_pars_fragment: aomap_pars_fragment, - begin_vertex: begin_vertex, - beginnormal_vertex: beginnormal_vertex, - bsdfs: bsdfs, - iridescence_fragment: iridescence_fragment, - bumpmap_pars_fragment: bumpmap_pars_fragment, - clipping_planes_fragment: clipping_planes_fragment, - clipping_planes_pars_fragment: clipping_planes_pars_fragment, - clipping_planes_pars_vertex: clipping_planes_pars_vertex, - clipping_planes_vertex: clipping_planes_vertex, - color_fragment: color_fragment, - color_pars_fragment: color_pars_fragment, - color_pars_vertex: color_pars_vertex, - color_vertex: color_vertex, - common: common, - cube_uv_reflection_fragment: cube_uv_reflection_fragment, - defaultnormal_vertex: defaultnormal_vertex, - displacementmap_pars_vertex: displacementmap_pars_vertex, - displacementmap_vertex: displacementmap_vertex, - emissivemap_fragment: emissivemap_fragment, - emissivemap_pars_fragment: emissivemap_pars_fragment, - encodings_fragment: encodings_fragment, - encodings_pars_fragment: encodings_pars_fragment, - envmap_fragment: envmap_fragment, - envmap_common_pars_fragment: envmap_common_pars_fragment, - envmap_pars_fragment: envmap_pars_fragment, - envmap_pars_vertex: envmap_pars_vertex, - envmap_physical_pars_fragment: envmap_physical_pars_fragment, - envmap_vertex: envmap_vertex, - fog_vertex: fog_vertex, - fog_pars_vertex: fog_pars_vertex, - fog_fragment: fog_fragment, - fog_pars_fragment: fog_pars_fragment, - gradientmap_pars_fragment: gradientmap_pars_fragment, - lightmap_fragment: lightmap_fragment, - lightmap_pars_fragment: lightmap_pars_fragment, - lights_lambert_fragment: lights_lambert_fragment, - lights_lambert_pars_fragment: lights_lambert_pars_fragment, - lights_pars_begin: lights_pars_begin, - lights_toon_fragment: lights_toon_fragment, - lights_toon_pars_fragment: lights_toon_pars_fragment, - lights_phong_fragment: lights_phong_fragment, - lights_phong_pars_fragment: lights_phong_pars_fragment, - lights_physical_fragment: lights_physical_fragment, - lights_physical_pars_fragment: lights_physical_pars_fragment, - lights_fragment_begin: lights_fragment_begin, - lights_fragment_maps: lights_fragment_maps, - lights_fragment_end: lights_fragment_end, - logdepthbuf_fragment: logdepthbuf_fragment, - logdepthbuf_pars_fragment: logdepthbuf_pars_fragment, - logdepthbuf_pars_vertex: logdepthbuf_pars_vertex, - logdepthbuf_vertex: logdepthbuf_vertex, - map_fragment: map_fragment, - map_pars_fragment: map_pars_fragment, - map_particle_fragment: map_particle_fragment, - map_particle_pars_fragment: map_particle_pars_fragment, - metalnessmap_fragment: metalnessmap_fragment, - metalnessmap_pars_fragment: metalnessmap_pars_fragment, - morphcolor_vertex: morphcolor_vertex, - morphnormal_vertex: morphnormal_vertex, - morphtarget_pars_vertex: morphtarget_pars_vertex, - morphtarget_vertex: morphtarget_vertex, - normal_fragment_begin: normal_fragment_begin, - normal_fragment_maps: normal_fragment_maps, - normal_pars_fragment: normal_pars_fragment, - normal_pars_vertex: normal_pars_vertex, - normal_vertex: normal_vertex, - normalmap_pars_fragment: normalmap_pars_fragment, - clearcoat_normal_fragment_begin: clearcoat_normal_fragment_begin, - clearcoat_normal_fragment_maps: clearcoat_normal_fragment_maps, - clearcoat_pars_fragment: clearcoat_pars_fragment, - iridescence_pars_fragment: iridescence_pars_fragment, - output_fragment: output_fragment, - packing: packing, - premultiplied_alpha_fragment: premultiplied_alpha_fragment, - project_vertex: project_vertex, - dithering_fragment: dithering_fragment, - dithering_pars_fragment: dithering_pars_fragment, - roughnessmap_fragment: roughnessmap_fragment, - roughnessmap_pars_fragment: roughnessmap_pars_fragment, - shadowmap_pars_fragment: shadowmap_pars_fragment, - shadowmap_pars_vertex: shadowmap_pars_vertex, - shadowmap_vertex: shadowmap_vertex, - shadowmask_pars_fragment: shadowmask_pars_fragment, - skinbase_vertex: skinbase_vertex, - skinning_pars_vertex: skinning_pars_vertex, - skinning_vertex: skinning_vertex, - skinnormal_vertex: skinnormal_vertex, - specularmap_fragment: specularmap_fragment, - specularmap_pars_fragment: specularmap_pars_fragment, - tonemapping_fragment: tonemapping_fragment, - tonemapping_pars_fragment: tonemapping_pars_fragment, - transmission_fragment: transmission_fragment, - transmission_pars_fragment: transmission_pars_fragment, - uv_pars_fragment: uv_pars_fragment, - uv_pars_vertex: uv_pars_vertex, - uv_vertex: uv_vertex, - uv2_pars_fragment: uv2_pars_fragment, - uv2_pars_vertex: uv2_pars_vertex, - uv2_vertex: uv2_vertex, - worldpos_vertex: worldpos_vertex, - - background_vert: vertex$h, - background_frag: fragment$h, - backgroundCube_vert: vertex$g, - backgroundCube_frag: fragment$g, - cube_vert: vertex$f, - cube_frag: fragment$f, - depth_vert: vertex$e, - depth_frag: fragment$e, - distanceRGBA_vert: vertex$d, - distanceRGBA_frag: fragment$d, - equirect_vert: vertex$c, - equirect_frag: fragment$c, - linedashed_vert: vertex$b, - linedashed_frag: fragment$b, - meshbasic_vert: vertex$a, - meshbasic_frag: fragment$a, - meshlambert_vert: vertex$9, - meshlambert_frag: fragment$9, - meshmatcap_vert: vertex$8, - meshmatcap_frag: fragment$8, - meshnormal_vert: vertex$7, - meshnormal_frag: fragment$7, - meshphong_vert: vertex$6, - meshphong_frag: fragment$6, - meshphysical_vert: vertex$5, - meshphysical_frag: fragment$5, - meshtoon_vert: vertex$4, - meshtoon_frag: fragment$4, - points_vert: vertex$3, - points_frag: fragment$3, - shadow_vert: vertex$2, - shadow_frag: fragment$2, - sprite_vert: vertex$1, - sprite_frag: fragment$1 - }; - - /** - * Uniforms library for shared webgl shaders - */ - - const UniformsLib = { - - common: { - - diffuse: { value: /*@__PURE__*/ new Color( 0xffffff ) }, - opacity: { value: 1.0 }, - - map: { value: null }, - uvTransform: { value: /*@__PURE__*/ new Matrix3() }, - uv2Transform: { value: /*@__PURE__*/ new Matrix3() }, - - alphaMap: { value: null }, - alphaTest: { value: 0 } - - }, - - specularmap: { - - specularMap: { value: null }, - - }, - - envmap: { - - envMap: { value: null }, - flipEnvMap: { value: - 1 }, - reflectivity: { value: 1.0 }, // basic, lambert, phong - ior: { value: 1.5 }, // physical - refractionRatio: { value: 0.98 }, // basic, lambert, phong - - }, - - aomap: { - - aoMap: { value: null }, - aoMapIntensity: { value: 1 } - - }, - - lightmap: { - - lightMap: { value: null }, - lightMapIntensity: { value: 1 } - - }, - - emissivemap: { - - emissiveMap: { value: null } - - }, - - bumpmap: { - - bumpMap: { value: null }, - bumpScale: { value: 1 } - - }, - - normalmap: { - - normalMap: { value: null }, - normalScale: { value: /*@__PURE__*/ new Vector2( 1, 1 ) } - - }, - - displacementmap: { - - displacementMap: { value: null }, - displacementScale: { value: 1 }, - displacementBias: { value: 0 } - - }, - - roughnessmap: { - - roughnessMap: { value: null } - - }, - - metalnessmap: { - - metalnessMap: { value: null } - - }, - - gradientmap: { - - gradientMap: { value: null } - - }, - - fog: { - - fogDensity: { value: 0.00025 }, - fogNear: { value: 1 }, - fogFar: { value: 2000 }, - fogColor: { value: /*@__PURE__*/ new Color( 0xffffff ) } - - }, - - lights: { - - ambientLightColor: { value: [] }, - - lightProbe: { value: [] }, - - directionalLights: { value: [], properties: { - direction: {}, - color: {} - } }, - - directionalLightShadows: { value: [], properties: { - shadowBias: {}, - shadowNormalBias: {}, - shadowRadius: {}, - shadowMapSize: {} - } }, - - directionalShadowMap: { value: [] }, - directionalShadowMatrix: { value: [] }, - - spotLights: { value: [], properties: { - color: {}, - position: {}, - direction: {}, - distance: {}, - coneCos: {}, - penumbraCos: {}, - decay: {} - } }, - - spotLightShadows: { value: [], properties: { - shadowBias: {}, - shadowNormalBias: {}, - shadowRadius: {}, - shadowMapSize: {} - } }, - - spotLightMap: { value: [] }, - spotShadowMap: { value: [] }, - spotLightMatrix: { value: [] }, - - pointLights: { value: [], properties: { - color: {}, - position: {}, - decay: {}, - distance: {} - } }, - - pointLightShadows: { value: [], properties: { - shadowBias: {}, - shadowNormalBias: {}, - shadowRadius: {}, - shadowMapSize: {}, - shadowCameraNear: {}, - shadowCameraFar: {} - } }, - - pointShadowMap: { value: [] }, - pointShadowMatrix: { value: [] }, - - hemisphereLights: { value: [], properties: { - direction: {}, - skyColor: {}, - groundColor: {} - } }, - - // TODO (abelnation): RectAreaLight BRDF data needs to be moved from example to main src - rectAreaLights: { value: [], properties: { - color: {}, - position: {}, - width: {}, - height: {} - } }, - - ltc_1: { value: null }, - ltc_2: { value: null } - - }, - - points: { - - diffuse: { value: /*@__PURE__*/ new Color( 0xffffff ) }, - opacity: { value: 1.0 }, - size: { value: 1.0 }, - scale: { value: 1.0 }, - map: { value: null }, - alphaMap: { value: null }, - alphaTest: { value: 0 }, - uvTransform: { value: /*@__PURE__*/ new Matrix3() } - - }, - - sprite: { - - diffuse: { value: /*@__PURE__*/ new Color( 0xffffff ) }, - opacity: { value: 1.0 }, - center: { value: /*@__PURE__*/ new Vector2( 0.5, 0.5 ) }, - rotation: { value: 0.0 }, - map: { value: null }, - alphaMap: { value: null }, - alphaTest: { value: 0 }, - uvTransform: { value: /*@__PURE__*/ new Matrix3() } - - } - - }; - - const ShaderLib = { - - basic: { - - uniforms: /*@__PURE__*/ mergeUniforms( [ - UniformsLib.common, - UniformsLib.specularmap, - UniformsLib.envmap, - UniformsLib.aomap, - UniformsLib.lightmap, - UniformsLib.fog - ] ), - - vertexShader: ShaderChunk.meshbasic_vert, - fragmentShader: ShaderChunk.meshbasic_frag - - }, - - lambert: { - - uniforms: /*@__PURE__*/ mergeUniforms( [ - UniformsLib.common, - UniformsLib.specularmap, - UniformsLib.envmap, - UniformsLib.aomap, - UniformsLib.lightmap, - UniformsLib.emissivemap, - UniformsLib.bumpmap, - UniformsLib.normalmap, - UniformsLib.displacementmap, - UniformsLib.fog, - UniformsLib.lights, - { - emissive: { value: /*@__PURE__*/ new Color( 0x000000 ) } - } - ] ), - - vertexShader: ShaderChunk.meshlambert_vert, - fragmentShader: ShaderChunk.meshlambert_frag - - }, - - phong: { - - uniforms: /*@__PURE__*/ mergeUniforms( [ - UniformsLib.common, - UniformsLib.specularmap, - UniformsLib.envmap, - UniformsLib.aomap, - UniformsLib.lightmap, - UniformsLib.emissivemap, - UniformsLib.bumpmap, - UniformsLib.normalmap, - UniformsLib.displacementmap, - UniformsLib.fog, - UniformsLib.lights, - { - emissive: { value: /*@__PURE__*/ new Color( 0x000000 ) }, - specular: { value: /*@__PURE__*/ new Color( 0x111111 ) }, - shininess: { value: 30 } - } - ] ), - - vertexShader: ShaderChunk.meshphong_vert, - fragmentShader: ShaderChunk.meshphong_frag - - }, - - standard: { - - uniforms: /*@__PURE__*/ mergeUniforms( [ - UniformsLib.common, - UniformsLib.envmap, - UniformsLib.aomap, - UniformsLib.lightmap, - UniformsLib.emissivemap, - UniformsLib.bumpmap, - UniformsLib.normalmap, - UniformsLib.displacementmap, - UniformsLib.roughnessmap, - UniformsLib.metalnessmap, - UniformsLib.fog, - UniformsLib.lights, - { - emissive: { value: /*@__PURE__*/ new Color( 0x000000 ) }, - roughness: { value: 1.0 }, - metalness: { value: 0.0 }, - envMapIntensity: { value: 1 } // temporary - } - ] ), - - vertexShader: ShaderChunk.meshphysical_vert, - fragmentShader: ShaderChunk.meshphysical_frag - - }, - - toon: { - - uniforms: /*@__PURE__*/ mergeUniforms( [ - UniformsLib.common, - UniformsLib.aomap, - UniformsLib.lightmap, - UniformsLib.emissivemap, - UniformsLib.bumpmap, - UniformsLib.normalmap, - UniformsLib.displacementmap, - UniformsLib.gradientmap, - UniformsLib.fog, - UniformsLib.lights, - { - emissive: { value: /*@__PURE__*/ new Color( 0x000000 ) } - } - ] ), - - vertexShader: ShaderChunk.meshtoon_vert, - fragmentShader: ShaderChunk.meshtoon_frag - - }, - - matcap: { - - uniforms: /*@__PURE__*/ mergeUniforms( [ - UniformsLib.common, - UniformsLib.bumpmap, - UniformsLib.normalmap, - UniformsLib.displacementmap, - UniformsLib.fog, - { - matcap: { value: null } - } - ] ), - - vertexShader: ShaderChunk.meshmatcap_vert, - fragmentShader: ShaderChunk.meshmatcap_frag - - }, - - points: { - - uniforms: /*@__PURE__*/ mergeUniforms( [ - UniformsLib.points, - UniformsLib.fog - ] ), - - vertexShader: ShaderChunk.points_vert, - fragmentShader: ShaderChunk.points_frag - - }, - - dashed: { - - uniforms: /*@__PURE__*/ mergeUniforms( [ - UniformsLib.common, - UniformsLib.fog, - { - scale: { value: 1 }, - dashSize: { value: 1 }, - totalSize: { value: 2 } - } - ] ), - - vertexShader: ShaderChunk.linedashed_vert, - fragmentShader: ShaderChunk.linedashed_frag - - }, - - depth: { - - uniforms: /*@__PURE__*/ mergeUniforms( [ - UniformsLib.common, - UniformsLib.displacementmap - ] ), - - vertexShader: ShaderChunk.depth_vert, - fragmentShader: ShaderChunk.depth_frag - - }, - - normal: { - - uniforms: /*@__PURE__*/ mergeUniforms( [ - UniformsLib.common, - UniformsLib.bumpmap, - UniformsLib.normalmap, - UniformsLib.displacementmap, - { - opacity: { value: 1.0 } - } - ] ), - - vertexShader: ShaderChunk.meshnormal_vert, - fragmentShader: ShaderChunk.meshnormal_frag - - }, - - sprite: { - - uniforms: /*@__PURE__*/ mergeUniforms( [ - UniformsLib.sprite, - UniformsLib.fog - ] ), - - vertexShader: ShaderChunk.sprite_vert, - fragmentShader: ShaderChunk.sprite_frag - - }, - - background: { - - uniforms: { - uvTransform: { value: /*@__PURE__*/ new Matrix3() }, - t2D: { value: null }, - backgroundIntensity: { value: 1 } - }, - - vertexShader: ShaderChunk.background_vert, - fragmentShader: ShaderChunk.background_frag - - }, - - backgroundCube: { - - uniforms: { - envMap: { value: null }, - flipEnvMap: { value: - 1 }, - backgroundBlurriness: { value: 0 }, - backgroundIntensity: { value: 1 } - }, - - vertexShader: ShaderChunk.backgroundCube_vert, - fragmentShader: ShaderChunk.backgroundCube_frag - - }, - - cube: { - - uniforms: { - tCube: { value: null }, - tFlip: { value: - 1 }, - opacity: { value: 1.0 } - }, - - vertexShader: ShaderChunk.cube_vert, - fragmentShader: ShaderChunk.cube_frag - - }, - - equirect: { - - uniforms: { - tEquirect: { value: null }, - }, - - vertexShader: ShaderChunk.equirect_vert, - fragmentShader: ShaderChunk.equirect_frag - - }, - - distanceRGBA: { - - uniforms: /*@__PURE__*/ mergeUniforms( [ - UniformsLib.common, - UniformsLib.displacementmap, - { - referencePosition: { value: /*@__PURE__*/ new Vector3() }, - nearDistance: { value: 1 }, - farDistance: { value: 1000 } - } - ] ), - - vertexShader: ShaderChunk.distanceRGBA_vert, - fragmentShader: ShaderChunk.distanceRGBA_frag - - }, - - shadow: { - - uniforms: /*@__PURE__*/ mergeUniforms( [ - UniformsLib.lights, - UniformsLib.fog, - { - color: { value: /*@__PURE__*/ new Color( 0x00000 ) }, - opacity: { value: 1.0 } - }, - ] ), - - vertexShader: ShaderChunk.shadow_vert, - fragmentShader: ShaderChunk.shadow_frag - - } - - }; - - ShaderLib.physical = { - - uniforms: /*@__PURE__*/ mergeUniforms( [ - ShaderLib.standard.uniforms, - { - clearcoat: { value: 0 }, - clearcoatMap: { value: null }, - clearcoatRoughness: { value: 0 }, - clearcoatRoughnessMap: { value: null }, - clearcoatNormalScale: { value: /*@__PURE__*/ new Vector2( 1, 1 ) }, - clearcoatNormalMap: { value: null }, - iridescence: { value: 0 }, - iridescenceMap: { value: null }, - iridescenceIOR: { value: 1.3 }, - iridescenceThicknessMinimum: { value: 100 }, - iridescenceThicknessMaximum: { value: 400 }, - iridescenceThicknessMap: { value: null }, - sheen: { value: 0 }, - sheenColor: { value: /*@__PURE__*/ new Color( 0x000000 ) }, - sheenColorMap: { value: null }, - sheenRoughness: { value: 1 }, - sheenRoughnessMap: { value: null }, - transmission: { value: 0 }, - transmissionMap: { value: null }, - transmissionSamplerSize: { value: /*@__PURE__*/ new Vector2() }, - transmissionSamplerMap: { value: null }, - thickness: { value: 0 }, - thicknessMap: { value: null }, - attenuationDistance: { value: 0 }, - attenuationColor: { value: /*@__PURE__*/ new Color( 0x000000 ) }, - specularIntensity: { value: 1 }, - specularIntensityMap: { value: null }, - specularColor: { value: /*@__PURE__*/ new Color( 1, 1, 1 ) }, - specularColorMap: { value: null }, - } - ] ), - - vertexShader: ShaderChunk.meshphysical_vert, - fragmentShader: ShaderChunk.meshphysical_frag - - }; - - const _rgb = { r: 0, b: 0, g: 0 }; - - function WebGLBackground( renderer, cubemaps, cubeuvmaps, state, objects, alpha, premultipliedAlpha ) { - - const clearColor = new Color( 0x000000 ); - let clearAlpha = alpha === true ? 0 : 1; - - let planeMesh; - let boxMesh; - - let currentBackground = null; - let currentBackgroundVersion = 0; - let currentTonemapping = null; - - function render( renderList, scene ) { - - let forceClear = false; - let background = scene.isScene === true ? scene.background : null; - - if ( background && background.isTexture ) { - - const usePMREM = scene.backgroundBlurriness > 0; // use PMREM if the user wants to blur the background - background = ( usePMREM ? cubeuvmaps : cubemaps ).get( background ); - - } - - // Ignore background in AR - // TODO: Reconsider this. - - const xr = renderer.xr; - const session = xr.getSession && xr.getSession(); - - if ( session && session.environmentBlendMode === 'additive' ) { - - background = null; - - } - - if ( background === null ) { - - setClear( clearColor, clearAlpha ); - - } else if ( background && background.isColor ) { - - setClear( background, 1 ); - forceClear = true; - - } - - if ( renderer.autoClear || forceClear ) { - - renderer.clear( renderer.autoClearColor, renderer.autoClearDepth, renderer.autoClearStencil ); - - } - - if ( background && ( background.isCubeTexture || background.mapping === CubeUVReflectionMapping ) ) { - - if ( boxMesh === undefined ) { - - boxMesh = new Mesh( - new BoxGeometry( 1, 1, 1 ), - new ShaderMaterial( { - name: 'BackgroundCubeMaterial', - uniforms: cloneUniforms( ShaderLib.backgroundCube.uniforms ), - vertexShader: ShaderLib.backgroundCube.vertexShader, - fragmentShader: ShaderLib.backgroundCube.fragmentShader, - side: BackSide, - depthTest: false, - depthWrite: false, - fog: false - } ) - ); - - boxMesh.geometry.deleteAttribute( 'normal' ); - boxMesh.geometry.deleteAttribute( 'uv' ); - - boxMesh.onBeforeRender = function ( renderer, scene, camera ) { - - this.matrixWorld.copyPosition( camera.matrixWorld ); - - }; - - // add "envMap" material property so the renderer can evaluate it like for built-in materials - Object.defineProperty( boxMesh.material, 'envMap', { - - get: function () { - - return this.uniforms.envMap.value; - - } - - } ); - - objects.update( boxMesh ); - - } - - boxMesh.material.uniforms.envMap.value = background; - boxMesh.material.uniforms.flipEnvMap.value = ( background.isCubeTexture && background.isRenderTargetTexture === false ) ? - 1 : 1; - boxMesh.material.uniforms.backgroundBlurriness.value = scene.backgroundBlurriness; - boxMesh.material.uniforms.backgroundIntensity.value = scene.backgroundIntensity; - boxMesh.material.toneMapped = ( background.encoding === sRGBEncoding ) ? false : true; - - if ( currentBackground !== background || - currentBackgroundVersion !== background.version || - currentTonemapping !== renderer.toneMapping ) { - - boxMesh.material.needsUpdate = true; - - currentBackground = background; - currentBackgroundVersion = background.version; - currentTonemapping = renderer.toneMapping; - - } - - boxMesh.layers.enableAll(); - - // push to the pre-sorted opaque render list - renderList.unshift( boxMesh, boxMesh.geometry, boxMesh.material, 0, 0, null ); - - } else if ( background && background.isTexture ) { - - if ( planeMesh === undefined ) { - - planeMesh = new Mesh( - new PlaneGeometry( 2, 2 ), - new ShaderMaterial( { - name: 'BackgroundMaterial', - uniforms: cloneUniforms( ShaderLib.background.uniforms ), - vertexShader: ShaderLib.background.vertexShader, - fragmentShader: ShaderLib.background.fragmentShader, - side: FrontSide, - depthTest: false, - depthWrite: false, - fog: false - } ) - ); - - planeMesh.geometry.deleteAttribute( 'normal' ); - - // add "map" material property so the renderer can evaluate it like for built-in materials - Object.defineProperty( planeMesh.material, 'map', { - - get: function () { - - return this.uniforms.t2D.value; - - } - - } ); - - objects.update( planeMesh ); - - } - - planeMesh.material.uniforms.t2D.value = background; - planeMesh.material.uniforms.backgroundIntensity.value = scene.backgroundIntensity; - planeMesh.material.toneMapped = ( background.encoding === sRGBEncoding ) ? false : true; - - if ( background.matrixAutoUpdate === true ) { - - background.updateMatrix(); - - } - - planeMesh.material.uniforms.uvTransform.value.copy( background.matrix ); - - if ( currentBackground !== background || - currentBackgroundVersion !== background.version || - currentTonemapping !== renderer.toneMapping ) { - - planeMesh.material.needsUpdate = true; - - currentBackground = background; - currentBackgroundVersion = background.version; - currentTonemapping = renderer.toneMapping; - - } - - planeMesh.layers.enableAll(); - - // push to the pre-sorted opaque render list - renderList.unshift( planeMesh, planeMesh.geometry, planeMesh.material, 0, 0, null ); - - } - - } - - function setClear( color, alpha ) { - - color.getRGB( _rgb, getUnlitUniformColorSpace( renderer ) ); - - state.buffers.color.setClear( _rgb.r, _rgb.g, _rgb.b, alpha, premultipliedAlpha ); - - } - - return { - - getClearColor: function () { - - return clearColor; - - }, - setClearColor: function ( color, alpha = 1 ) { - - clearColor.set( color ); - clearAlpha = alpha; - setClear( clearColor, clearAlpha ); - - }, - getClearAlpha: function () { - - return clearAlpha; - - }, - setClearAlpha: function ( alpha ) { - - clearAlpha = alpha; - setClear( clearColor, clearAlpha ); - - }, - render: render - - }; - - } - - function WebGLBindingStates( gl, extensions, attributes, capabilities ) { - - const maxVertexAttributes = gl.getParameter( gl.MAX_VERTEX_ATTRIBS ); - - const extension = capabilities.isWebGL2 ? null : extensions.get( 'OES_vertex_array_object' ); - const vaoAvailable = capabilities.isWebGL2 || extension !== null; - - const bindingStates = {}; - - const defaultState = createBindingState( null ); - let currentState = defaultState; - let forceUpdate = false; - - function setup( object, material, program, geometry, index ) { - - let updateBuffers = false; - - if ( vaoAvailable ) { - - const state = getBindingState( geometry, program, material ); - - if ( currentState !== state ) { - - currentState = state; - bindVertexArrayObject( currentState.object ); - - } - - updateBuffers = needsUpdate( object, geometry, program, index ); - - if ( updateBuffers ) saveCache( object, geometry, program, index ); - - } else { - - const wireframe = ( material.wireframe === true ); - - if ( currentState.geometry !== geometry.id || - currentState.program !== program.id || - currentState.wireframe !== wireframe ) { - - currentState.geometry = geometry.id; - currentState.program = program.id; - currentState.wireframe = wireframe; - - updateBuffers = true; - - } - - } - - if ( index !== null ) { - - attributes.update( index, gl.ELEMENT_ARRAY_BUFFER ); - - } - - if ( updateBuffers || forceUpdate ) { - - forceUpdate = false; - - setupVertexAttributes( object, material, program, geometry ); - - if ( index !== null ) { - - gl.bindBuffer( gl.ELEMENT_ARRAY_BUFFER, attributes.get( index ).buffer ); - - } - - } - - } - - function createVertexArrayObject() { - - if ( capabilities.isWebGL2 ) return gl.createVertexArray(); - - return extension.createVertexArrayOES(); - - } - - function bindVertexArrayObject( vao ) { - - if ( capabilities.isWebGL2 ) return gl.bindVertexArray( vao ); - - return extension.bindVertexArrayOES( vao ); - - } - - function deleteVertexArrayObject( vao ) { - - if ( capabilities.isWebGL2 ) return gl.deleteVertexArray( vao ); - - return extension.deleteVertexArrayOES( vao ); - - } - - function getBindingState( geometry, program, material ) { - - const wireframe = ( material.wireframe === true ); - - let programMap = bindingStates[ geometry.id ]; - - if ( programMap === undefined ) { - - programMap = {}; - bindingStates[ geometry.id ] = programMap; - - } - - let stateMap = programMap[ program.id ]; - - if ( stateMap === undefined ) { - - stateMap = {}; - programMap[ program.id ] = stateMap; - - } - - let state = stateMap[ wireframe ]; - - if ( state === undefined ) { - - state = createBindingState( createVertexArrayObject() ); - stateMap[ wireframe ] = state; - - } - - return state; - - } - - function createBindingState( vao ) { - - const newAttributes = []; - const enabledAttributes = []; - const attributeDivisors = []; - - for ( let i = 0; i < maxVertexAttributes; i ++ ) { - - newAttributes[ i ] = 0; - enabledAttributes[ i ] = 0; - attributeDivisors[ i ] = 0; - - } - - return { - - // for backward compatibility on non-VAO support browser - geometry: null, - program: null, - wireframe: false, - - newAttributes: newAttributes, - enabledAttributes: enabledAttributes, - attributeDivisors: attributeDivisors, - object: vao, - attributes: {}, - index: null - - }; - - } - - function needsUpdate( object, geometry, program, index ) { - - const cachedAttributes = currentState.attributes; - const geometryAttributes = geometry.attributes; - - let attributesNum = 0; - - const programAttributes = program.getAttributes(); - - for ( const name in programAttributes ) { - - const programAttribute = programAttributes[ name ]; - - if ( programAttribute.location >= 0 ) { - - const cachedAttribute = cachedAttributes[ name ]; - let geometryAttribute = geometryAttributes[ name ]; - - if ( geometryAttribute === undefined ) { - - if ( name === 'instanceMatrix' && object.instanceMatrix ) geometryAttribute = object.instanceMatrix; - if ( name === 'instanceColor' && object.instanceColor ) geometryAttribute = object.instanceColor; - - } - - if ( cachedAttribute === undefined ) return true; - - if ( cachedAttribute.attribute !== geometryAttribute ) return true; - - if ( geometryAttribute && cachedAttribute.data !== geometryAttribute.data ) return true; - - attributesNum ++; - - } - - } - - if ( currentState.attributesNum !== attributesNum ) return true; - - if ( currentState.index !== index ) return true; - - return false; - - } - - function saveCache( object, geometry, program, index ) { - - const cache = {}; - const attributes = geometry.attributes; - let attributesNum = 0; - - const programAttributes = program.getAttributes(); - - for ( const name in programAttributes ) { - - const programAttribute = programAttributes[ name ]; - - if ( programAttribute.location >= 0 ) { - - let attribute = attributes[ name ]; - - if ( attribute === undefined ) { - - if ( name === 'instanceMatrix' && object.instanceMatrix ) attribute = object.instanceMatrix; - if ( name === 'instanceColor' && object.instanceColor ) attribute = object.instanceColor; - - } - - const data = {}; - data.attribute = attribute; - - if ( attribute && attribute.data ) { - - data.data = attribute.data; - - } - - cache[ name ] = data; - - attributesNum ++; - - } - - } - - currentState.attributes = cache; - currentState.attributesNum = attributesNum; - - currentState.index = index; - - } - - function initAttributes() { - - const newAttributes = currentState.newAttributes; - - for ( let i = 0, il = newAttributes.length; i < il; i ++ ) { - - newAttributes[ i ] = 0; - - } - - } - - function enableAttribute( attribute ) { - - enableAttributeAndDivisor( attribute, 0 ); - - } - - function enableAttributeAndDivisor( attribute, meshPerAttribute ) { - - const newAttributes = currentState.newAttributes; - const enabledAttributes = currentState.enabledAttributes; - const attributeDivisors = currentState.attributeDivisors; - - newAttributes[ attribute ] = 1; - - if ( enabledAttributes[ attribute ] === 0 ) { - - gl.enableVertexAttribArray( attribute ); - enabledAttributes[ attribute ] = 1; - - } - - if ( attributeDivisors[ attribute ] !== meshPerAttribute ) { - - const extension = capabilities.isWebGL2 ? gl : extensions.get( 'ANGLE_instanced_arrays' ); - - extension[ capabilities.isWebGL2 ? 'vertexAttribDivisor' : 'vertexAttribDivisorANGLE' ]( attribute, meshPerAttribute ); - attributeDivisors[ attribute ] = meshPerAttribute; - - } - - } - - function disableUnusedAttributes() { - - const newAttributes = currentState.newAttributes; - const enabledAttributes = currentState.enabledAttributes; - - for ( let i = 0, il = enabledAttributes.length; i < il; i ++ ) { - - if ( enabledAttributes[ i ] !== newAttributes[ i ] ) { - - gl.disableVertexAttribArray( i ); - enabledAttributes[ i ] = 0; - - } - - } - - } - - function vertexAttribPointer( index, size, type, normalized, stride, offset ) { - - if ( capabilities.isWebGL2 === true && ( type === gl.INT || type === gl.UNSIGNED_INT ) ) { - - gl.vertexAttribIPointer( index, size, type, stride, offset ); - - } else { - - gl.vertexAttribPointer( index, size, type, normalized, stride, offset ); - - } - - } - - function setupVertexAttributes( object, material, program, geometry ) { - - if ( capabilities.isWebGL2 === false && ( object.isInstancedMesh || geometry.isInstancedBufferGeometry ) ) { - - if ( extensions.get( 'ANGLE_instanced_arrays' ) === null ) return; - - } - - initAttributes(); - - const geometryAttributes = geometry.attributes; - - const programAttributes = program.getAttributes(); - - const materialDefaultAttributeValues = material.defaultAttributeValues; - - for ( const name in programAttributes ) { - - const programAttribute = programAttributes[ name ]; - - if ( programAttribute.location >= 0 ) { - - let geometryAttribute = geometryAttributes[ name ]; - - if ( geometryAttribute === undefined ) { - - if ( name === 'instanceMatrix' && object.instanceMatrix ) geometryAttribute = object.instanceMatrix; - if ( name === 'instanceColor' && object.instanceColor ) geometryAttribute = object.instanceColor; - - } - - if ( geometryAttribute !== undefined ) { - - const normalized = geometryAttribute.normalized; - const size = geometryAttribute.itemSize; - - const attribute = attributes.get( geometryAttribute ); - - // TODO Attribute may not be available on context restore - - if ( attribute === undefined ) continue; - - const buffer = attribute.buffer; - const type = attribute.type; - const bytesPerElement = attribute.bytesPerElement; - - if ( geometryAttribute.isInterleavedBufferAttribute ) { - - const data = geometryAttribute.data; - const stride = data.stride; - const offset = geometryAttribute.offset; - - if ( data.isInstancedInterleavedBuffer ) { - - for ( let i = 0; i < programAttribute.locationSize; i ++ ) { - - enableAttributeAndDivisor( programAttribute.location + i, data.meshPerAttribute ); - - } - - if ( object.isInstancedMesh !== true && geometry._maxInstanceCount === undefined ) { - - geometry._maxInstanceCount = data.meshPerAttribute * data.count; - - } - - } else { - - for ( let i = 0; i < programAttribute.locationSize; i ++ ) { - - enableAttribute( programAttribute.location + i ); - - } - - } - - gl.bindBuffer( gl.ARRAY_BUFFER, buffer ); - - for ( let i = 0; i < programAttribute.locationSize; i ++ ) { - - vertexAttribPointer( - programAttribute.location + i, - size / programAttribute.locationSize, - type, - normalized, - stride * bytesPerElement, - ( offset + ( size / programAttribute.locationSize ) * i ) * bytesPerElement - ); - - } - - } else { - - if ( geometryAttribute.isInstancedBufferAttribute ) { - - for ( let i = 0; i < programAttribute.locationSize; i ++ ) { - - enableAttributeAndDivisor( programAttribute.location + i, geometryAttribute.meshPerAttribute ); - - } - - if ( object.isInstancedMesh !== true && geometry._maxInstanceCount === undefined ) { - - geometry._maxInstanceCount = geometryAttribute.meshPerAttribute * geometryAttribute.count; - - } - - } else { - - for ( let i = 0; i < programAttribute.locationSize; i ++ ) { - - enableAttribute( programAttribute.location + i ); - - } - - } - - gl.bindBuffer( gl.ARRAY_BUFFER, buffer ); - - for ( let i = 0; i < programAttribute.locationSize; i ++ ) { - - vertexAttribPointer( - programAttribute.location + i, - size / programAttribute.locationSize, - type, - normalized, - size * bytesPerElement, - ( size / programAttribute.locationSize ) * i * bytesPerElement - ); - - } - - } - - } else if ( materialDefaultAttributeValues !== undefined ) { - - const value = materialDefaultAttributeValues[ name ]; - - if ( value !== undefined ) { - - switch ( value.length ) { - - case 2: - gl.vertexAttrib2fv( programAttribute.location, value ); - break; - - case 3: - gl.vertexAttrib3fv( programAttribute.location, value ); - break; - - case 4: - gl.vertexAttrib4fv( programAttribute.location, value ); - break; - - default: - gl.vertexAttrib1fv( programAttribute.location, value ); - - } - - } - - } - - } - - } - - disableUnusedAttributes(); - - } - - function dispose() { - - reset(); - - for ( const geometryId in bindingStates ) { - - const programMap = bindingStates[ geometryId ]; - - for ( const programId in programMap ) { - - const stateMap = programMap[ programId ]; - - for ( const wireframe in stateMap ) { - - deleteVertexArrayObject( stateMap[ wireframe ].object ); - - delete stateMap[ wireframe ]; - - } - - delete programMap[ programId ]; - - } - - delete bindingStates[ geometryId ]; - - } - - } - - function releaseStatesOfGeometry( geometry ) { - - if ( bindingStates[ geometry.id ] === undefined ) return; - - const programMap = bindingStates[ geometry.id ]; - - for ( const programId in programMap ) { - - const stateMap = programMap[ programId ]; - - for ( const wireframe in stateMap ) { - - deleteVertexArrayObject( stateMap[ wireframe ].object ); - - delete stateMap[ wireframe ]; - - } - - delete programMap[ programId ]; - - } - - delete bindingStates[ geometry.id ]; - - } - - function releaseStatesOfProgram( program ) { - - for ( const geometryId in bindingStates ) { - - const programMap = bindingStates[ geometryId ]; - - if ( programMap[ program.id ] === undefined ) continue; - - const stateMap = programMap[ program.id ]; - - for ( const wireframe in stateMap ) { - - deleteVertexArrayObject( stateMap[ wireframe ].object ); - - delete stateMap[ wireframe ]; - - } - - delete programMap[ program.id ]; - - } - - } - - function reset() { - - resetDefaultState(); - forceUpdate = true; - - if ( currentState === defaultState ) return; - - currentState = defaultState; - bindVertexArrayObject( currentState.object ); - - } - - // for backward-compatibility - - function resetDefaultState() { - - defaultState.geometry = null; - defaultState.program = null; - defaultState.wireframe = false; - - } - - return { - - setup: setup, - reset: reset, - resetDefaultState: resetDefaultState, - dispose: dispose, - releaseStatesOfGeometry: releaseStatesOfGeometry, - releaseStatesOfProgram: releaseStatesOfProgram, - - initAttributes: initAttributes, - enableAttribute: enableAttribute, - disableUnusedAttributes: disableUnusedAttributes - - }; - - } - - function WebGLBufferRenderer( gl, extensions, info, capabilities ) { - - const isWebGL2 = capabilities.isWebGL2; - - let mode; - - function setMode( value ) { - - mode = value; - - } - - function render( start, count ) { - - gl.drawArrays( mode, start, count ); - - info.update( count, mode, 1 ); - - } - - function renderInstances( start, count, primcount ) { - - if ( primcount === 0 ) return; - - let extension, methodName; - - if ( isWebGL2 ) { - - extension = gl; - methodName = 'drawArraysInstanced'; - - } else { - - extension = extensions.get( 'ANGLE_instanced_arrays' ); - methodName = 'drawArraysInstancedANGLE'; - - if ( extension === null ) { - - console.error( 'THREE.WebGLBufferRenderer: using THREE.InstancedBufferGeometry but hardware does not support extension ANGLE_instanced_arrays.' ); - return; - - } - - } - - extension[ methodName ]( mode, start, count, primcount ); - - info.update( count, mode, primcount ); - - } - - // - - this.setMode = setMode; - this.render = render; - this.renderInstances = renderInstances; - - } - - function WebGLCapabilities( gl, extensions, parameters ) { - - let maxAnisotropy; - - function getMaxAnisotropy() { - - if ( maxAnisotropy !== undefined ) return maxAnisotropy; - - if ( extensions.has( 'EXT_texture_filter_anisotropic' ) === true ) { - - const extension = extensions.get( 'EXT_texture_filter_anisotropic' ); - - maxAnisotropy = gl.getParameter( extension.MAX_TEXTURE_MAX_ANISOTROPY_EXT ); - - } else { - - maxAnisotropy = 0; - - } - - return maxAnisotropy; - - } - - function getMaxPrecision( precision ) { - - if ( precision === 'highp' ) { - - if ( gl.getShaderPrecisionFormat( gl.VERTEX_SHADER, gl.HIGH_FLOAT ).precision > 0 && - gl.getShaderPrecisionFormat( gl.FRAGMENT_SHADER, gl.HIGH_FLOAT ).precision > 0 ) { - - return 'highp'; - - } - - precision = 'mediump'; - - } - - if ( precision === 'mediump' ) { - - if ( gl.getShaderPrecisionFormat( gl.VERTEX_SHADER, gl.MEDIUM_FLOAT ).precision > 0 && - gl.getShaderPrecisionFormat( gl.FRAGMENT_SHADER, gl.MEDIUM_FLOAT ).precision > 0 ) { - - return 'mediump'; - - } - - } - - return 'lowp'; - - } - - const isWebGL2 = typeof WebGL2RenderingContext !== 'undefined' && gl instanceof WebGL2RenderingContext; - - let precision = parameters.precision !== undefined ? parameters.precision : 'highp'; - const maxPrecision = getMaxPrecision( precision ); - - if ( maxPrecision !== precision ) { - - console.warn( 'THREE.WebGLRenderer:', precision, 'not supported, using', maxPrecision, 'instead.' ); - precision = maxPrecision; - - } - - const drawBuffers = isWebGL2 || extensions.has( 'WEBGL_draw_buffers' ); - - const logarithmicDepthBuffer = parameters.logarithmicDepthBuffer === true; - - const maxTextures = gl.getParameter( gl.MAX_TEXTURE_IMAGE_UNITS ); - const maxVertexTextures = gl.getParameter( gl.MAX_VERTEX_TEXTURE_IMAGE_UNITS ); - const maxTextureSize = gl.getParameter( gl.MAX_TEXTURE_SIZE ); - const maxCubemapSize = gl.getParameter( gl.MAX_CUBE_MAP_TEXTURE_SIZE ); - - const maxAttributes = gl.getParameter( gl.MAX_VERTEX_ATTRIBS ); - const maxVertexUniforms = gl.getParameter( gl.MAX_VERTEX_UNIFORM_VECTORS ); - const maxVaryings = gl.getParameter( gl.MAX_VARYING_VECTORS ); - const maxFragmentUniforms = gl.getParameter( gl.MAX_FRAGMENT_UNIFORM_VECTORS ); - - const vertexTextures = maxVertexTextures > 0; - const floatFragmentTextures = isWebGL2 || extensions.has( 'OES_texture_float' ); - const floatVertexTextures = vertexTextures && floatFragmentTextures; - - const maxSamples = isWebGL2 ? gl.getParameter( gl.MAX_SAMPLES ) : 0; - - return { - - isWebGL2: isWebGL2, - - drawBuffers: drawBuffers, - - getMaxAnisotropy: getMaxAnisotropy, - getMaxPrecision: getMaxPrecision, - - precision: precision, - logarithmicDepthBuffer: logarithmicDepthBuffer, - - maxTextures: maxTextures, - maxVertexTextures: maxVertexTextures, - maxTextureSize: maxTextureSize, - maxCubemapSize: maxCubemapSize, - - maxAttributes: maxAttributes, - maxVertexUniforms: maxVertexUniforms, - maxVaryings: maxVaryings, - maxFragmentUniforms: maxFragmentUniforms, - - vertexTextures: vertexTextures, - floatFragmentTextures: floatFragmentTextures, - floatVertexTextures: floatVertexTextures, - - maxSamples: maxSamples - - }; - - } - - function WebGLClipping( properties ) { - - const scope = this; - - let globalState = null, - numGlobalPlanes = 0, - localClippingEnabled = false, - renderingShadows = false; - - const plane = new Plane(), - viewNormalMatrix = new Matrix3(), - - uniform = { value: null, needsUpdate: false }; - - this.uniform = uniform; - this.numPlanes = 0; - this.numIntersection = 0; - - this.init = function ( planes, enableLocalClipping ) { - - const enabled = - planes.length !== 0 || - enableLocalClipping || - // enable state of previous frame - the clipping code has to - // run another frame in order to reset the state: - numGlobalPlanes !== 0 || - localClippingEnabled; - - localClippingEnabled = enableLocalClipping; - - numGlobalPlanes = planes.length; - - return enabled; - - }; - - this.beginShadows = function () { - - renderingShadows = true; - projectPlanes( null ); - - }; - - this.endShadows = function () { - - renderingShadows = false; - - }; - - this.setGlobalState = function ( planes, camera ) { - - globalState = projectPlanes( planes, camera, 0 ); - - }; - - this.setState = function ( material, camera, useCache ) { - - const planes = material.clippingPlanes, - clipIntersection = material.clipIntersection, - clipShadows = material.clipShadows; - - const materialProperties = properties.get( material ); - - if ( ! localClippingEnabled || planes === null || planes.length === 0 || renderingShadows && ! clipShadows ) { - - // there's no local clipping - - if ( renderingShadows ) { - - // there's no global clipping - - projectPlanes( null ); - - } else { - - resetGlobalState(); - - } - - } else { - - const nGlobal = renderingShadows ? 0 : numGlobalPlanes, - lGlobal = nGlobal * 4; - - let dstArray = materialProperties.clippingState || null; - - uniform.value = dstArray; // ensure unique state - - dstArray = projectPlanes( planes, camera, lGlobal, useCache ); - - for ( let i = 0; i !== lGlobal; ++ i ) { - - dstArray[ i ] = globalState[ i ]; - - } - - materialProperties.clippingState = dstArray; - this.numIntersection = clipIntersection ? this.numPlanes : 0; - this.numPlanes += nGlobal; - - } - - - }; - - function resetGlobalState() { - - if ( uniform.value !== globalState ) { - - uniform.value = globalState; - uniform.needsUpdate = numGlobalPlanes > 0; - - } - - scope.numPlanes = numGlobalPlanes; - scope.numIntersection = 0; - - } - - function projectPlanes( planes, camera, dstOffset, skipTransform ) { - - const nPlanes = planes !== null ? planes.length : 0; - let dstArray = null; - - if ( nPlanes !== 0 ) { - - dstArray = uniform.value; - - if ( skipTransform !== true || dstArray === null ) { - - const flatSize = dstOffset + nPlanes * 4, - viewMatrix = camera.matrixWorldInverse; - - viewNormalMatrix.getNormalMatrix( viewMatrix ); - - if ( dstArray === null || dstArray.length < flatSize ) { - - dstArray = new Float32Array( flatSize ); - - } - - for ( let i = 0, i4 = dstOffset; i !== nPlanes; ++ i, i4 += 4 ) { - - plane.copy( planes[ i ] ).applyMatrix4( viewMatrix, viewNormalMatrix ); - - plane.normal.toArray( dstArray, i4 ); - dstArray[ i4 + 3 ] = plane.constant; - - } - - } - - uniform.value = dstArray; - uniform.needsUpdate = true; - - } - - scope.numPlanes = nPlanes; - scope.numIntersection = 0; - - return dstArray; - - } - - } - - function WebGLCubeMaps( renderer ) { - - let cubemaps = new WeakMap(); - - function mapTextureMapping( texture, mapping ) { - - if ( mapping === EquirectangularReflectionMapping ) { - - texture.mapping = CubeReflectionMapping; - - } else if ( mapping === EquirectangularRefractionMapping ) { - - texture.mapping = CubeRefractionMapping; - - } - - return texture; - - } - - function get( texture ) { - - if ( texture && texture.isTexture && texture.isRenderTargetTexture === false ) { - - const mapping = texture.mapping; - - if ( mapping === EquirectangularReflectionMapping || mapping === EquirectangularRefractionMapping ) { - - if ( cubemaps.has( texture ) ) { - - const cubemap = cubemaps.get( texture ).texture; - return mapTextureMapping( cubemap, texture.mapping ); - - } else { - - const image = texture.image; - - if ( image && image.height > 0 ) { - - const renderTarget = new WebGLCubeRenderTarget( image.height / 2 ); - renderTarget.fromEquirectangularTexture( renderer, texture ); - cubemaps.set( texture, renderTarget ); - - texture.addEventListener( 'dispose', onTextureDispose ); - - return mapTextureMapping( renderTarget.texture, texture.mapping ); - - } else { - - // image not yet ready. try the conversion next frame - - return null; - - } - - } - - } - - } - - return texture; - - } - - function onTextureDispose( event ) { - - const texture = event.target; - - texture.removeEventListener( 'dispose', onTextureDispose ); - - const cubemap = cubemaps.get( texture ); - - if ( cubemap !== undefined ) { - - cubemaps.delete( texture ); - cubemap.dispose(); - - } - - } - - function dispose() { - - cubemaps = new WeakMap(); - - } - - return { - get: get, - dispose: dispose - }; - - } - - class OrthographicCamera extends Camera { - - constructor( left = - 1, right = 1, top = 1, bottom = - 1, near = 0.1, far = 2000 ) { - - super(); - - this.isOrthographicCamera = true; - - this.type = 'OrthographicCamera'; - - this.zoom = 1; - this.view = null; - - this.left = left; - this.right = right; - this.top = top; - this.bottom = bottom; - - this.near = near; - this.far = far; - - this.updateProjectionMatrix(); - - } - - copy( source, recursive ) { - - super.copy( source, recursive ); - - this.left = source.left; - this.right = source.right; - this.top = source.top; - this.bottom = source.bottom; - this.near = source.near; - this.far = source.far; - - this.zoom = source.zoom; - this.view = source.view === null ? null : Object.assign( {}, source.view ); - - return this; - - } - - setViewOffset( fullWidth, fullHeight, x, y, width, height ) { - - if ( this.view === null ) { - - this.view = { - enabled: true, - fullWidth: 1, - fullHeight: 1, - offsetX: 0, - offsetY: 0, - width: 1, - height: 1 - }; - - } - - this.view.enabled = true; - this.view.fullWidth = fullWidth; - this.view.fullHeight = fullHeight; - this.view.offsetX = x; - this.view.offsetY = y; - this.view.width = width; - this.view.height = height; - - this.updateProjectionMatrix(); - - } - - clearViewOffset() { - - if ( this.view !== null ) { - - this.view.enabled = false; - - } - - this.updateProjectionMatrix(); - - } - - updateProjectionMatrix() { - - const dx = ( this.right - this.left ) / ( 2 * this.zoom ); - const dy = ( this.top - this.bottom ) / ( 2 * this.zoom ); - const cx = ( this.right + this.left ) / 2; - const cy = ( this.top + this.bottom ) / 2; - - let left = cx - dx; - let right = cx + dx; - let top = cy + dy; - let bottom = cy - dy; - - if ( this.view !== null && this.view.enabled ) { - - const scaleW = ( this.right - this.left ) / this.view.fullWidth / this.zoom; - const scaleH = ( this.top - this.bottom ) / this.view.fullHeight / this.zoom; - - left += scaleW * this.view.offsetX; - right = left + scaleW * this.view.width; - top -= scaleH * this.view.offsetY; - bottom = top - scaleH * this.view.height; - - } - - this.projectionMatrix.makeOrthographic( left, right, top, bottom, this.near, this.far ); - - this.projectionMatrixInverse.copy( this.projectionMatrix ).invert(); - - } - - toJSON( meta ) { - - const data = super.toJSON( meta ); - - data.object.zoom = this.zoom; - data.object.left = this.left; - data.object.right = this.right; - data.object.top = this.top; - data.object.bottom = this.bottom; - data.object.near = this.near; - data.object.far = this.far; - - if ( this.view !== null ) data.object.view = Object.assign( {}, this.view ); - - return data; - - } - - } - - const LOD_MIN = 4; - - // The standard deviations (radians) associated with the extra mips. These are - // chosen to approximate a Trowbridge-Reitz distribution function times the - // geometric shadowing function. These sigma values squared must match the - // variance #defines in cube_uv_reflection_fragment.glsl.js. - const EXTRA_LOD_SIGMA = [ 0.125, 0.215, 0.35, 0.446, 0.526, 0.582 ]; - - // The maximum length of the blur for loop. Smaller sigmas will use fewer - // samples and exit early, but not recompile the shader. - const MAX_SAMPLES = 20; - - const _flatCamera = /*@__PURE__*/ new OrthographicCamera(); - const _clearColor = /*@__PURE__*/ new Color(); - let _oldTarget = null; - - // Golden Ratio - const PHI = ( 1 + Math.sqrt( 5 ) ) / 2; - const INV_PHI = 1 / PHI; - - // Vertices of a dodecahedron (except the opposites, which represent the - // same axis), used as axis directions evenly spread on a sphere. - const _axisDirections = [ - /*@__PURE__*/ new Vector3( 1, 1, 1 ), - /*@__PURE__*/ new Vector3( - 1, 1, 1 ), - /*@__PURE__*/ new Vector3( 1, 1, - 1 ), - /*@__PURE__*/ new Vector3( - 1, 1, - 1 ), - /*@__PURE__*/ new Vector3( 0, PHI, INV_PHI ), - /*@__PURE__*/ new Vector3( 0, PHI, - INV_PHI ), - /*@__PURE__*/ new Vector3( INV_PHI, 0, PHI ), - /*@__PURE__*/ new Vector3( - INV_PHI, 0, PHI ), - /*@__PURE__*/ new Vector3( PHI, INV_PHI, 0 ), - /*@__PURE__*/ new Vector3( - PHI, INV_PHI, 0 ) ]; - - /** - * This class generates a Prefiltered, Mipmapped Radiance Environment Map - * (PMREM) from a cubeMap environment texture. This allows different levels of - * blur to be quickly accessed based on material roughness. It is packed into a - * special CubeUV format that allows us to perform custom interpolation so that - * we can support nonlinear formats such as RGBE. Unlike a traditional mipmap - * chain, it only goes down to the LOD_MIN level (above), and then creates extra - * even more filtered 'mips' at the same LOD_MIN resolution, associated with - * higher roughness levels. In this way we maintain resolution to smoothly - * interpolate diffuse lighting while limiting sampling computation. - * - * Paper: Fast, Accurate Image-Based Lighting - * https://drive.google.com/file/d/15y8r_UpKlU9SvV4ILb0C3qCPecS8pvLz/view - */ - - class PMREMGenerator { - - constructor( renderer ) { - - this._renderer = renderer; - this._pingPongRenderTarget = null; - - this._lodMax = 0; - this._cubeSize = 0; - this._lodPlanes = []; - this._sizeLods = []; - this._sigmas = []; - - this._blurMaterial = null; - this._cubemapMaterial = null; - this._equirectMaterial = null; - - this._compileMaterial( this._blurMaterial ); - - } - - /** - * Generates a PMREM from a supplied Scene, which can be faster than using an - * image if networking bandwidth is low. Optional sigma specifies a blur radius - * in radians to be applied to the scene before PMREM generation. Optional near - * and far planes ensure the scene is rendered in its entirety (the cubeCamera - * is placed at the origin). - */ - fromScene( scene, sigma = 0, near = 0.1, far = 100 ) { - - _oldTarget = this._renderer.getRenderTarget(); - - this._setSize( 256 ); - - const cubeUVRenderTarget = this._allocateTargets(); - cubeUVRenderTarget.depthBuffer = true; - - this._sceneToCubeUV( scene, near, far, cubeUVRenderTarget ); - - if ( sigma > 0 ) { - - this._blur( cubeUVRenderTarget, 0, 0, sigma ); - - } - - this._applyPMREM( cubeUVRenderTarget ); - this._cleanup( cubeUVRenderTarget ); - - return cubeUVRenderTarget; - - } - - /** - * Generates a PMREM from an equirectangular texture, which can be either LDR - * or HDR. The ideal input image size is 1k (1024 x 512), - * as this matches best with the 256 x 256 cubemap output. - */ - fromEquirectangular( equirectangular, renderTarget = null ) { - - return this._fromTexture( equirectangular, renderTarget ); - - } - - /** - * Generates a PMREM from an cubemap texture, which can be either LDR - * or HDR. The ideal input cube size is 256 x 256, - * as this matches best with the 256 x 256 cubemap output. - */ - fromCubemap( cubemap, renderTarget = null ) { - - return this._fromTexture( cubemap, renderTarget ); - - } - - /** - * Pre-compiles the cubemap shader. You can get faster start-up by invoking this method during - * your texture's network fetch for increased concurrency. - */ - compileCubemapShader() { - - if ( this._cubemapMaterial === null ) { - - this._cubemapMaterial = _getCubemapMaterial(); - this._compileMaterial( this._cubemapMaterial ); - - } - - } - - /** - * Pre-compiles the equirectangular shader. You can get faster start-up by invoking this method during - * your texture's network fetch for increased concurrency. - */ - compileEquirectangularShader() { - - if ( this._equirectMaterial === null ) { - - this._equirectMaterial = _getEquirectMaterial(); - this._compileMaterial( this._equirectMaterial ); - - } - - } - - /** - * Disposes of the PMREMGenerator's internal memory. Note that PMREMGenerator is a static class, - * so you should not need more than one PMREMGenerator object. If you do, calling dispose() on - * one of them will cause any others to also become unusable. - */ - dispose() { - - this._dispose(); - - if ( this._cubemapMaterial !== null ) this._cubemapMaterial.dispose(); - if ( this._equirectMaterial !== null ) this._equirectMaterial.dispose(); - - } - - // private interface - - _setSize( cubeSize ) { - - this._lodMax = Math.floor( Math.log2( cubeSize ) ); - this._cubeSize = Math.pow( 2, this._lodMax ); - - } - - _dispose() { - - if ( this._blurMaterial !== null ) this._blurMaterial.dispose(); - - if ( this._pingPongRenderTarget !== null ) this._pingPongRenderTarget.dispose(); - - for ( let i = 0; i < this._lodPlanes.length; i ++ ) { - - this._lodPlanes[ i ].dispose(); - - } - - } - - _cleanup( outputTarget ) { - - this._renderer.setRenderTarget( _oldTarget ); - outputTarget.scissorTest = false; - _setViewport( outputTarget, 0, 0, outputTarget.width, outputTarget.height ); - - } - - _fromTexture( texture, renderTarget ) { - - if ( texture.mapping === CubeReflectionMapping || texture.mapping === CubeRefractionMapping ) { - - this._setSize( texture.image.length === 0 ? 16 : ( texture.image[ 0 ].width || texture.image[ 0 ].image.width ) ); - - } else { // Equirectangular - - this._setSize( texture.image.width / 4 ); - - } - - _oldTarget = this._renderer.getRenderTarget(); - - const cubeUVRenderTarget = renderTarget || this._allocateTargets(); - this._textureToCubeUV( texture, cubeUVRenderTarget ); - this._applyPMREM( cubeUVRenderTarget ); - this._cleanup( cubeUVRenderTarget ); - - return cubeUVRenderTarget; - - } - - _allocateTargets() { - - const width = 3 * Math.max( this._cubeSize, 16 * 7 ); - const height = 4 * this._cubeSize; - - const params = { - magFilter: LinearFilter, - minFilter: LinearFilter, - generateMipmaps: false, - type: HalfFloatType, - format: RGBAFormat, - encoding: LinearEncoding, - depthBuffer: false - }; - - const cubeUVRenderTarget = _createRenderTarget( width, height, params ); - - if ( this._pingPongRenderTarget === null || this._pingPongRenderTarget.width !== width || this._pingPongRenderTarget.height !== height ) { - - if ( this._pingPongRenderTarget !== null ) { - - this._dispose(); - - } - - this._pingPongRenderTarget = _createRenderTarget( width, height, params ); - - const { _lodMax } = this; - ( { sizeLods: this._sizeLods, lodPlanes: this._lodPlanes, sigmas: this._sigmas } = _createPlanes( _lodMax ) ); - - this._blurMaterial = _getBlurShader( _lodMax, width, height ); - - } - - return cubeUVRenderTarget; - - } - - _compileMaterial( material ) { - - const tmpMesh = new Mesh( this._lodPlanes[ 0 ], material ); - this._renderer.compile( tmpMesh, _flatCamera ); - - } - - _sceneToCubeUV( scene, near, far, cubeUVRenderTarget ) { - - const fov = 90; - const aspect = 1; - const cubeCamera = new PerspectiveCamera( fov, aspect, near, far ); - const upSign = [ 1, - 1, 1, 1, 1, 1 ]; - const forwardSign = [ 1, 1, 1, - 1, - 1, - 1 ]; - const renderer = this._renderer; - - const originalAutoClear = renderer.autoClear; - const toneMapping = renderer.toneMapping; - renderer.getClearColor( _clearColor ); - - renderer.toneMapping = NoToneMapping; - renderer.autoClear = false; - - const backgroundMaterial = new MeshBasicMaterial( { - name: 'PMREM.Background', - side: BackSide, - depthWrite: false, - depthTest: false, - } ); - - const backgroundBox = new Mesh( new BoxGeometry(), backgroundMaterial ); - - let useSolidColor = false; - const background = scene.background; - - if ( background ) { - - if ( background.isColor ) { - - backgroundMaterial.color.copy( background ); - scene.background = null; - useSolidColor = true; - - } - - } else { - - backgroundMaterial.color.copy( _clearColor ); - useSolidColor = true; - - } - - for ( let i = 0; i < 6; i ++ ) { - - const col = i % 3; - - if ( col === 0 ) { - - cubeCamera.up.set( 0, upSign[ i ], 0 ); - cubeCamera.lookAt( forwardSign[ i ], 0, 0 ); - - } else if ( col === 1 ) { - - cubeCamera.up.set( 0, 0, upSign[ i ] ); - cubeCamera.lookAt( 0, forwardSign[ i ], 0 ); - - } else { - - cubeCamera.up.set( 0, upSign[ i ], 0 ); - cubeCamera.lookAt( 0, 0, forwardSign[ i ] ); - - } - - const size = this._cubeSize; - - _setViewport( cubeUVRenderTarget, col * size, i > 2 ? size : 0, size, size ); - - renderer.setRenderTarget( cubeUVRenderTarget ); - - if ( useSolidColor ) { - - renderer.render( backgroundBox, cubeCamera ); - - } - - renderer.render( scene, cubeCamera ); - - } - - backgroundBox.geometry.dispose(); - backgroundBox.material.dispose(); - - renderer.toneMapping = toneMapping; - renderer.autoClear = originalAutoClear; - scene.background = background; - - } - - _textureToCubeUV( texture, cubeUVRenderTarget ) { - - const renderer = this._renderer; - - const isCubeTexture = ( texture.mapping === CubeReflectionMapping || texture.mapping === CubeRefractionMapping ); - - if ( isCubeTexture ) { - - if ( this._cubemapMaterial === null ) { - - this._cubemapMaterial = _getCubemapMaterial(); - - } - - this._cubemapMaterial.uniforms.flipEnvMap.value = ( texture.isRenderTargetTexture === false ) ? - 1 : 1; - - } else { - - if ( this._equirectMaterial === null ) { - - this._equirectMaterial = _getEquirectMaterial(); - - } - - } - - const material = isCubeTexture ? this._cubemapMaterial : this._equirectMaterial; - const mesh = new Mesh( this._lodPlanes[ 0 ], material ); - - const uniforms = material.uniforms; - - uniforms[ 'envMap' ].value = texture; - - const size = this._cubeSize; - - _setViewport( cubeUVRenderTarget, 0, 0, 3 * size, 2 * size ); - - renderer.setRenderTarget( cubeUVRenderTarget ); - renderer.render( mesh, _flatCamera ); - - } - - _applyPMREM( cubeUVRenderTarget ) { - - const renderer = this._renderer; - const autoClear = renderer.autoClear; - renderer.autoClear = false; - - for ( let i = 1; i < this._lodPlanes.length; i ++ ) { - - const sigma = Math.sqrt( this._sigmas[ i ] * this._sigmas[ i ] - this._sigmas[ i - 1 ] * this._sigmas[ i - 1 ] ); - - const poleAxis = _axisDirections[ ( i - 1 ) % _axisDirections.length ]; - - this._blur( cubeUVRenderTarget, i - 1, i, sigma, poleAxis ); - - } - - renderer.autoClear = autoClear; - - } - - /** - * This is a two-pass Gaussian blur for a cubemap. Normally this is done - * vertically and horizontally, but this breaks down on a cube. Here we apply - * the blur latitudinally (around the poles), and then longitudinally (towards - * the poles) to approximate the orthogonally-separable blur. It is least - * accurate at the poles, but still does a decent job. - */ - _blur( cubeUVRenderTarget, lodIn, lodOut, sigma, poleAxis ) { - - const pingPongRenderTarget = this._pingPongRenderTarget; - - this._halfBlur( - cubeUVRenderTarget, - pingPongRenderTarget, - lodIn, - lodOut, - sigma, - 'latitudinal', - poleAxis ); - - this._halfBlur( - pingPongRenderTarget, - cubeUVRenderTarget, - lodOut, - lodOut, - sigma, - 'longitudinal', - poleAxis ); - - } - - _halfBlur( targetIn, targetOut, lodIn, lodOut, sigmaRadians, direction, poleAxis ) { - - const renderer = this._renderer; - const blurMaterial = this._blurMaterial; - - if ( direction !== 'latitudinal' && direction !== 'longitudinal' ) { - - console.error( - 'blur direction must be either latitudinal or longitudinal!' ); - - } - - // Number of standard deviations at which to cut off the discrete approximation. - const STANDARD_DEVIATIONS = 3; - - const blurMesh = new Mesh( this._lodPlanes[ lodOut ], blurMaterial ); - const blurUniforms = blurMaterial.uniforms; - - const pixels = this._sizeLods[ lodIn ] - 1; - const radiansPerPixel = isFinite( sigmaRadians ) ? Math.PI / ( 2 * pixels ) : 2 * Math.PI / ( 2 * MAX_SAMPLES - 1 ); - const sigmaPixels = sigmaRadians / radiansPerPixel; - const samples = isFinite( sigmaRadians ) ? 1 + Math.floor( STANDARD_DEVIATIONS * sigmaPixels ) : MAX_SAMPLES; - - if ( samples > MAX_SAMPLES ) { - - console.warn( `sigmaRadians, ${ - sigmaRadians}, is too large and will clip, as it requested ${ - samples} samples when the maximum is set to ${MAX_SAMPLES}` ); - - } - - const weights = []; - let sum = 0; - - for ( let i = 0; i < MAX_SAMPLES; ++ i ) { - - const x = i / sigmaPixels; - const weight = Math.exp( - x * x / 2 ); - weights.push( weight ); - - if ( i === 0 ) { - - sum += weight; - - } else if ( i < samples ) { - - sum += 2 * weight; - - } - - } - - for ( let i = 0; i < weights.length; i ++ ) { - - weights[ i ] = weights[ i ] / sum; - - } - - blurUniforms[ 'envMap' ].value = targetIn.texture; - blurUniforms[ 'samples' ].value = samples; - blurUniforms[ 'weights' ].value = weights; - blurUniforms[ 'latitudinal' ].value = direction === 'latitudinal'; - - if ( poleAxis ) { - - blurUniforms[ 'poleAxis' ].value = poleAxis; - - } - - const { _lodMax } = this; - blurUniforms[ 'dTheta' ].value = radiansPerPixel; - blurUniforms[ 'mipInt' ].value = _lodMax - lodIn; - - const outputSize = this._sizeLods[ lodOut ]; - const x = 3 * outputSize * ( lodOut > _lodMax - LOD_MIN ? lodOut - _lodMax + LOD_MIN : 0 ); - const y = 4 * ( this._cubeSize - outputSize ); - - _setViewport( targetOut, x, y, 3 * outputSize, 2 * outputSize ); - renderer.setRenderTarget( targetOut ); - renderer.render( blurMesh, _flatCamera ); - - } - - } - - - - function _createPlanes( lodMax ) { - - const lodPlanes = []; - const sizeLods = []; - const sigmas = []; - - let lod = lodMax; - - const totalLods = lodMax - LOD_MIN + 1 + EXTRA_LOD_SIGMA.length; - - for ( let i = 0; i < totalLods; i ++ ) { - - const sizeLod = Math.pow( 2, lod ); - sizeLods.push( sizeLod ); - let sigma = 1.0 / sizeLod; - - if ( i > lodMax - LOD_MIN ) { - - sigma = EXTRA_LOD_SIGMA[ i - lodMax + LOD_MIN - 1 ]; - - } else if ( i === 0 ) { - - sigma = 0; - - } - - sigmas.push( sigma ); - - const texelSize = 1.0 / ( sizeLod - 2 ); - const min = - texelSize; - const max = 1 + texelSize; - const uv1 = [ min, min, max, min, max, max, min, min, max, max, min, max ]; - - const cubeFaces = 6; - const vertices = 6; - const positionSize = 3; - const uvSize = 2; - const faceIndexSize = 1; - - const position = new Float32Array( positionSize * vertices * cubeFaces ); - const uv = new Float32Array( uvSize * vertices * cubeFaces ); - const faceIndex = new Float32Array( faceIndexSize * vertices * cubeFaces ); - - for ( let face = 0; face < cubeFaces; face ++ ) { - - const x = ( face % 3 ) * 2 / 3 - 1; - const y = face > 2 ? 0 : - 1; - const coordinates = [ - x, y, 0, - x + 2 / 3, y, 0, - x + 2 / 3, y + 1, 0, - x, y, 0, - x + 2 / 3, y + 1, 0, - x, y + 1, 0 - ]; - position.set( coordinates, positionSize * vertices * face ); - uv.set( uv1, uvSize * vertices * face ); - const fill = [ face, face, face, face, face, face ]; - faceIndex.set( fill, faceIndexSize * vertices * face ); - - } - - const planes = new BufferGeometry(); - planes.setAttribute( 'position', new BufferAttribute( position, positionSize ) ); - planes.setAttribute( 'uv', new BufferAttribute( uv, uvSize ) ); - planes.setAttribute( 'faceIndex', new BufferAttribute( faceIndex, faceIndexSize ) ); - lodPlanes.push( planes ); - - if ( lod > LOD_MIN ) { - - lod --; - - } - - } - - return { lodPlanes, sizeLods, sigmas }; - - } - - function _createRenderTarget( width, height, params ) { - - const cubeUVRenderTarget = new WebGLRenderTarget( width, height, params ); - cubeUVRenderTarget.texture.mapping = CubeUVReflectionMapping; - cubeUVRenderTarget.texture.name = 'PMREM.cubeUv'; - cubeUVRenderTarget.scissorTest = true; - return cubeUVRenderTarget; - - } - - function _setViewport( target, x, y, width, height ) { - - target.viewport.set( x, y, width, height ); - target.scissor.set( x, y, width, height ); - - } - - function _getBlurShader( lodMax, width, height ) { - - const weights = new Float32Array( MAX_SAMPLES ); - const poleAxis = new Vector3( 0, 1, 0 ); - const shaderMaterial = new ShaderMaterial( { - - name: 'SphericalGaussianBlur', - - defines: { - 'n': MAX_SAMPLES, - 'CUBEUV_TEXEL_WIDTH': 1.0 / width, - 'CUBEUV_TEXEL_HEIGHT': 1.0 / height, - 'CUBEUV_MAX_MIP': `${lodMax}.0`, - }, - - uniforms: { - 'envMap': { value: null }, - 'samples': { value: 1 }, - 'weights': { value: weights }, - 'latitudinal': { value: false }, - 'dTheta': { value: 0 }, - 'mipInt': { value: 0 }, - 'poleAxis': { value: poleAxis } - }, - - vertexShader: _getCommonVertexShader(), - - fragmentShader: /* glsl */` - - precision mediump float; - precision mediump int; - - varying vec3 vOutputDirection; - - uniform sampler2D envMap; - uniform int samples; - uniform float weights[ n ]; - uniform bool latitudinal; - uniform float dTheta; - uniform float mipInt; - uniform vec3 poleAxis; - - #define ENVMAP_TYPE_CUBE_UV - #include - - vec3 getSample( float theta, vec3 axis ) { - - float cosTheta = cos( theta ); - // Rodrigues' axis-angle rotation - vec3 sampleDirection = vOutputDirection * cosTheta - + cross( axis, vOutputDirection ) * sin( theta ) - + axis * dot( axis, vOutputDirection ) * ( 1.0 - cosTheta ); - - return bilinearCubeUV( envMap, sampleDirection, mipInt ); - - } - - void main() { - - vec3 axis = latitudinal ? poleAxis : cross( poleAxis, vOutputDirection ); - - if ( all( equal( axis, vec3( 0.0 ) ) ) ) { - - axis = vec3( vOutputDirection.z, 0.0, - vOutputDirection.x ); - - } - - axis = normalize( axis ); - - gl_FragColor = vec4( 0.0, 0.0, 0.0, 1.0 ); - gl_FragColor.rgb += weights[ 0 ] * getSample( 0.0, axis ); - - for ( int i = 1; i < n; i++ ) { - - if ( i >= samples ) { - - break; - - } - - float theta = dTheta * float( i ); - gl_FragColor.rgb += weights[ i ] * getSample( -1.0 * theta, axis ); - gl_FragColor.rgb += weights[ i ] * getSample( theta, axis ); - - } - - } - `, - - blending: NoBlending, - depthTest: false, - depthWrite: false - - } ); - - return shaderMaterial; - - } - - function _getEquirectMaterial() { - - return new ShaderMaterial( { - - name: 'EquirectangularToCubeUV', - - uniforms: { - 'envMap': { value: null } - }, - - vertexShader: _getCommonVertexShader(), - - fragmentShader: /* glsl */` - - precision mediump float; - precision mediump int; - - varying vec3 vOutputDirection; - - uniform sampler2D envMap; - - #include - - void main() { - - vec3 outputDirection = normalize( vOutputDirection ); - vec2 uv = equirectUv( outputDirection ); - - gl_FragColor = vec4( texture2D ( envMap, uv ).rgb, 1.0 ); - - } - `, - - blending: NoBlending, - depthTest: false, - depthWrite: false - - } ); - - } - - function _getCubemapMaterial() { - - return new ShaderMaterial( { - - name: 'CubemapToCubeUV', - - uniforms: { - 'envMap': { value: null }, - 'flipEnvMap': { value: - 1 } - }, - - vertexShader: _getCommonVertexShader(), - - fragmentShader: /* glsl */` - - precision mediump float; - precision mediump int; - - uniform float flipEnvMap; - - varying vec3 vOutputDirection; - - uniform samplerCube envMap; - - void main() { - - gl_FragColor = textureCube( envMap, vec3( flipEnvMap * vOutputDirection.x, vOutputDirection.yz ) ); - - } - `, - - blending: NoBlending, - depthTest: false, - depthWrite: false - - } ); - - } - - function _getCommonVertexShader() { - - return /* glsl */` - - precision mediump float; - precision mediump int; - - attribute float faceIndex; - - varying vec3 vOutputDirection; - - // RH coordinate system; PMREM face-indexing convention - vec3 getDirection( vec2 uv, float face ) { - - uv = 2.0 * uv - 1.0; - - vec3 direction = vec3( uv, 1.0 ); - - if ( face == 0.0 ) { - - direction = direction.zyx; // ( 1, v, u ) pos x - - } else if ( face == 1.0 ) { - - direction = direction.xzy; - direction.xz *= -1.0; // ( -u, 1, -v ) pos y - - } else if ( face == 2.0 ) { - - direction.x *= -1.0; // ( -u, v, 1 ) pos z - - } else if ( face == 3.0 ) { - - direction = direction.zyx; - direction.xz *= -1.0; // ( -1, v, -u ) neg x - - } else if ( face == 4.0 ) { - - direction = direction.xzy; - direction.xy *= -1.0; // ( -u, -1, v ) neg y - - } else if ( face == 5.0 ) { - - direction.z *= -1.0; // ( u, v, -1 ) neg z - - } - - return direction; - - } - - void main() { - - vOutputDirection = getDirection( uv, faceIndex ); - gl_Position = vec4( position, 1.0 ); - - } - `; - - } - - function WebGLCubeUVMaps( renderer ) { - - let cubeUVmaps = new WeakMap(); - - let pmremGenerator = null; - - function get( texture ) { - - if ( texture && texture.isTexture ) { - - const mapping = texture.mapping; - - const isEquirectMap = ( mapping === EquirectangularReflectionMapping || mapping === EquirectangularRefractionMapping ); - const isCubeMap = ( mapping === CubeReflectionMapping || mapping === CubeRefractionMapping ); - - // equirect/cube map to cubeUV conversion - - if ( isEquirectMap || isCubeMap ) { - - if ( texture.isRenderTargetTexture && texture.needsPMREMUpdate === true ) { - - texture.needsPMREMUpdate = false; - - let renderTarget = cubeUVmaps.get( texture ); - - if ( pmremGenerator === null ) pmremGenerator = new PMREMGenerator( renderer ); - - renderTarget = isEquirectMap ? pmremGenerator.fromEquirectangular( texture, renderTarget ) : pmremGenerator.fromCubemap( texture, renderTarget ); - cubeUVmaps.set( texture, renderTarget ); - - return renderTarget.texture; - - } else { - - if ( cubeUVmaps.has( texture ) ) { - - return cubeUVmaps.get( texture ).texture; - - } else { - - const image = texture.image; - - if ( ( isEquirectMap && image && image.height > 0 ) || ( isCubeMap && image && isCubeTextureComplete( image ) ) ) { - - if ( pmremGenerator === null ) pmremGenerator = new PMREMGenerator( renderer ); - - const renderTarget = isEquirectMap ? pmremGenerator.fromEquirectangular( texture ) : pmremGenerator.fromCubemap( texture ); - cubeUVmaps.set( texture, renderTarget ); - - texture.addEventListener( 'dispose', onTextureDispose ); - - return renderTarget.texture; - - } else { - - // image not yet ready. try the conversion next frame - - return null; - - } - - } - - } - - } - - } - - return texture; - - } - - function isCubeTextureComplete( image ) { - - let count = 0; - const length = 6; - - for ( let i = 0; i < length; i ++ ) { - - if ( image[ i ] !== undefined ) count ++; - - } - - return count === length; - - - } - - function onTextureDispose( event ) { - - const texture = event.target; - - texture.removeEventListener( 'dispose', onTextureDispose ); - - const cubemapUV = cubeUVmaps.get( texture ); - - if ( cubemapUV !== undefined ) { - - cubeUVmaps.delete( texture ); - cubemapUV.dispose(); - - } - - } - - function dispose() { - - cubeUVmaps = new WeakMap(); - - if ( pmremGenerator !== null ) { - - pmremGenerator.dispose(); - pmremGenerator = null; - - } - - } - - return { - get: get, - dispose: dispose - }; - - } - - function WebGLExtensions( gl ) { - - const extensions = {}; - - function getExtension( name ) { - - if ( extensions[ name ] !== undefined ) { - - return extensions[ name ]; - - } - - let extension; - - switch ( name ) { - - case 'WEBGL_depth_texture': - extension = gl.getExtension( 'WEBGL_depth_texture' ) || gl.getExtension( 'MOZ_WEBGL_depth_texture' ) || gl.getExtension( 'WEBKIT_WEBGL_depth_texture' ); - break; - - case 'EXT_texture_filter_anisotropic': - extension = gl.getExtension( 'EXT_texture_filter_anisotropic' ) || gl.getExtension( 'MOZ_EXT_texture_filter_anisotropic' ) || gl.getExtension( 'WEBKIT_EXT_texture_filter_anisotropic' ); - break; - - case 'WEBGL_compressed_texture_s3tc': - extension = gl.getExtension( 'WEBGL_compressed_texture_s3tc' ) || gl.getExtension( 'MOZ_WEBGL_compressed_texture_s3tc' ) || gl.getExtension( 'WEBKIT_WEBGL_compressed_texture_s3tc' ); - break; - - case 'WEBGL_compressed_texture_pvrtc': - extension = gl.getExtension( 'WEBGL_compressed_texture_pvrtc' ) || gl.getExtension( 'WEBKIT_WEBGL_compressed_texture_pvrtc' ); - break; - - default: - extension = gl.getExtension( name ); - - } - - extensions[ name ] = extension; - - return extension; - - } - - return { - - has: function ( name ) { - - return getExtension( name ) !== null; - - }, - - init: function ( capabilities ) { - - if ( capabilities.isWebGL2 ) { - - getExtension( 'EXT_color_buffer_float' ); - - } else { - - getExtension( 'WEBGL_depth_texture' ); - getExtension( 'OES_texture_float' ); - getExtension( 'OES_texture_half_float' ); - getExtension( 'OES_texture_half_float_linear' ); - getExtension( 'OES_standard_derivatives' ); - getExtension( 'OES_element_index_uint' ); - getExtension( 'OES_vertex_array_object' ); - getExtension( 'ANGLE_instanced_arrays' ); - - } - - getExtension( 'OES_texture_float_linear' ); - getExtension( 'EXT_color_buffer_half_float' ); - getExtension( 'WEBGL_multisampled_render_to_texture' ); - - }, - - get: function ( name ) { - - const extension = getExtension( name ); - - if ( extension === null ) { - - console.warn( 'THREE.WebGLRenderer: ' + name + ' extension not supported.' ); - - } - - return extension; - - } - - }; - - } - - function WebGLGeometries( gl, attributes, info, bindingStates ) { - - const geometries = {}; - const wireframeAttributes = new WeakMap(); - - function onGeometryDispose( event ) { - - const geometry = event.target; - - if ( geometry.index !== null ) { - - attributes.remove( geometry.index ); - - } - - for ( const name in geometry.attributes ) { - - attributes.remove( geometry.attributes[ name ] ); - - } - - geometry.removeEventListener( 'dispose', onGeometryDispose ); - - delete geometries[ geometry.id ]; - - const attribute = wireframeAttributes.get( geometry ); - - if ( attribute ) { - - attributes.remove( attribute ); - wireframeAttributes.delete( geometry ); - - } - - bindingStates.releaseStatesOfGeometry( geometry ); - - if ( geometry.isInstancedBufferGeometry === true ) { - - delete geometry._maxInstanceCount; - - } - - // - - info.memory.geometries --; - - } - - function get( object, geometry ) { - - if ( geometries[ geometry.id ] === true ) return geometry; - - geometry.addEventListener( 'dispose', onGeometryDispose ); - - geometries[ geometry.id ] = true; - - info.memory.geometries ++; - - return geometry; - - } - - function update( geometry ) { - - const geometryAttributes = geometry.attributes; - - // Updating index buffer in VAO now. See WebGLBindingStates. - - for ( const name in geometryAttributes ) { - - attributes.update( geometryAttributes[ name ], gl.ARRAY_BUFFER ); - - } - - // morph targets - - const morphAttributes = geometry.morphAttributes; - - for ( const name in morphAttributes ) { - - const array = morphAttributes[ name ]; - - for ( let i = 0, l = array.length; i < l; i ++ ) { - - attributes.update( array[ i ], gl.ARRAY_BUFFER ); - - } - - } - - } - - function updateWireframeAttribute( geometry ) { - - const indices = []; - - const geometryIndex = geometry.index; - const geometryPosition = geometry.attributes.position; - let version = 0; - - if ( geometryIndex !== null ) { - - const array = geometryIndex.array; - version = geometryIndex.version; - - for ( let i = 0, l = array.length; i < l; i += 3 ) { - - const a = array[ i + 0 ]; - const b = array[ i + 1 ]; - const c = array[ i + 2 ]; - - indices.push( a, b, b, c, c, a ); - - } - - } else { - - const array = geometryPosition.array; - version = geometryPosition.version; - - for ( let i = 0, l = ( array.length / 3 ) - 1; i < l; i += 3 ) { - - const a = i + 0; - const b = i + 1; - const c = i + 2; - - indices.push( a, b, b, c, c, a ); - - } - - } - - const attribute = new ( arrayNeedsUint32( indices ) ? Uint32BufferAttribute : Uint16BufferAttribute )( indices, 1 ); - attribute.version = version; - - // Updating index buffer in VAO now. See WebGLBindingStates - - // - - const previousAttribute = wireframeAttributes.get( geometry ); - - if ( previousAttribute ) attributes.remove( previousAttribute ); - - // - - wireframeAttributes.set( geometry, attribute ); - - } - - function getWireframeAttribute( geometry ) { - - const currentAttribute = wireframeAttributes.get( geometry ); - - if ( currentAttribute ) { - - const geometryIndex = geometry.index; - - if ( geometryIndex !== null ) { - - // if the attribute is obsolete, create a new one - - if ( currentAttribute.version < geometryIndex.version ) { - - updateWireframeAttribute( geometry ); - - } - - } - - } else { - - updateWireframeAttribute( geometry ); - - } - - return wireframeAttributes.get( geometry ); - - } - - return { - - get: get, - update: update, - - getWireframeAttribute: getWireframeAttribute - - }; - - } - - function WebGLIndexedBufferRenderer( gl, extensions, info, capabilities ) { - - const isWebGL2 = capabilities.isWebGL2; - - let mode; - - function setMode( value ) { - - mode = value; - - } - - let type, bytesPerElement; - - function setIndex( value ) { - - type = value.type; - bytesPerElement = value.bytesPerElement; - - } - - function render( start, count ) { - - gl.drawElements( mode, count, type, start * bytesPerElement ); - - info.update( count, mode, 1 ); - - } - - function renderInstances( start, count, primcount ) { - - if ( primcount === 0 ) return; - - let extension, methodName; - - if ( isWebGL2 ) { - - extension = gl; - methodName = 'drawElementsInstanced'; - - } else { - - extension = extensions.get( 'ANGLE_instanced_arrays' ); - methodName = 'drawElementsInstancedANGLE'; - - if ( extension === null ) { - - console.error( 'THREE.WebGLIndexedBufferRenderer: using THREE.InstancedBufferGeometry but hardware does not support extension ANGLE_instanced_arrays.' ); - return; - - } - - } - - extension[ methodName ]( mode, count, type, start * bytesPerElement, primcount ); - - info.update( count, mode, primcount ); - - } - - // - - this.setMode = setMode; - this.setIndex = setIndex; - this.render = render; - this.renderInstances = renderInstances; - - } - - function WebGLInfo( gl ) { - - const memory = { - geometries: 0, - textures: 0 - }; - - const render = { - frame: 0, - calls: 0, - triangles: 0, - points: 0, - lines: 0 - }; - - function update( count, mode, instanceCount ) { - - render.calls ++; - - switch ( mode ) { - - case gl.TRIANGLES: - render.triangles += instanceCount * ( count / 3 ); - break; - - case gl.LINES: - render.lines += instanceCount * ( count / 2 ); - break; - - case gl.LINE_STRIP: - render.lines += instanceCount * ( count - 1 ); - break; - - case gl.LINE_LOOP: - render.lines += instanceCount * count; - break; - - case gl.POINTS: - render.points += instanceCount * count; - break; - - default: - console.error( 'THREE.WebGLInfo: Unknown draw mode:', mode ); - break; - - } - - } - - function reset() { - - render.frame ++; - render.calls = 0; - render.triangles = 0; - render.points = 0; - render.lines = 0; - - } - - return { - memory: memory, - render: render, - programs: null, - autoReset: true, - reset: reset, - update: update - }; - - } - - function numericalSort( a, b ) { - - return a[ 0 ] - b[ 0 ]; - - } - - function absNumericalSort( a, b ) { - - return Math.abs( b[ 1 ] ) - Math.abs( a[ 1 ] ); - - } - - function WebGLMorphtargets( gl, capabilities, textures ) { - - const influencesList = {}; - const morphInfluences = new Float32Array( 8 ); - const morphTextures = new WeakMap(); - const morph = new Vector4(); - - const workInfluences = []; - - for ( let i = 0; i < 8; i ++ ) { - - workInfluences[ i ] = [ i, 0 ]; - - } - - function update( object, geometry, program ) { - - const objectInfluences = object.morphTargetInfluences; - - if ( capabilities.isWebGL2 === true ) { - - // instead of using attributes, the WebGL 2 code path encodes morph targets - // into an array of data textures. Each layer represents a single morph target. - - const morphAttribute = geometry.morphAttributes.position || geometry.morphAttributes.normal || geometry.morphAttributes.color; - const morphTargetsCount = ( morphAttribute !== undefined ) ? morphAttribute.length : 0; - - let entry = morphTextures.get( geometry ); - - if ( entry === undefined || entry.count !== morphTargetsCount ) { - - if ( entry !== undefined ) entry.texture.dispose(); - - const hasMorphPosition = geometry.morphAttributes.position !== undefined; - const hasMorphNormals = geometry.morphAttributes.normal !== undefined; - const hasMorphColors = geometry.morphAttributes.color !== undefined; - - const morphTargets = geometry.morphAttributes.position || []; - const morphNormals = geometry.morphAttributes.normal || []; - const morphColors = geometry.morphAttributes.color || []; - - let vertexDataCount = 0; - - if ( hasMorphPosition === true ) vertexDataCount = 1; - if ( hasMorphNormals === true ) vertexDataCount = 2; - if ( hasMorphColors === true ) vertexDataCount = 3; - - let width = geometry.attributes.position.count * vertexDataCount; - let height = 1; - - if ( width > capabilities.maxTextureSize ) { - - height = Math.ceil( width / capabilities.maxTextureSize ); - width = capabilities.maxTextureSize; - - } - - const buffer = new Float32Array( width * height * 4 * morphTargetsCount ); - - const texture = new DataArrayTexture( buffer, width, height, morphTargetsCount ); - texture.type = FloatType; - texture.needsUpdate = true; - - // fill buffer - - const vertexDataStride = vertexDataCount * 4; - - for ( let i = 0; i < morphTargetsCount; i ++ ) { - - const morphTarget = morphTargets[ i ]; - const morphNormal = morphNormals[ i ]; - const morphColor = morphColors[ i ]; - - const offset = width * height * 4 * i; - - for ( let j = 0; j < morphTarget.count; j ++ ) { - - const stride = j * vertexDataStride; - - if ( hasMorphPosition === true ) { - - morph.fromBufferAttribute( morphTarget, j ); - - buffer[ offset + stride + 0 ] = morph.x; - buffer[ offset + stride + 1 ] = morph.y; - buffer[ offset + stride + 2 ] = morph.z; - buffer[ offset + stride + 3 ] = 0; - - } - - if ( hasMorphNormals === true ) { - - morph.fromBufferAttribute( morphNormal, j ); - - buffer[ offset + stride + 4 ] = morph.x; - buffer[ offset + stride + 5 ] = morph.y; - buffer[ offset + stride + 6 ] = morph.z; - buffer[ offset + stride + 7 ] = 0; - - } - - if ( hasMorphColors === true ) { - - morph.fromBufferAttribute( morphColor, j ); - - buffer[ offset + stride + 8 ] = morph.x; - buffer[ offset + stride + 9 ] = morph.y; - buffer[ offset + stride + 10 ] = morph.z; - buffer[ offset + stride + 11 ] = ( morphColor.itemSize === 4 ) ? morph.w : 1; - - } - - } - - } - - entry = { - count: morphTargetsCount, - texture: texture, - size: new Vector2( width, height ) - }; - - morphTextures.set( geometry, entry ); - - function disposeTexture() { - - texture.dispose(); - - morphTextures.delete( geometry ); - - geometry.removeEventListener( 'dispose', disposeTexture ); - - } - - geometry.addEventListener( 'dispose', disposeTexture ); - - } - - // - - let morphInfluencesSum = 0; - - for ( let i = 0; i < objectInfluences.length; i ++ ) { - - morphInfluencesSum += objectInfluences[ i ]; - - } - - const morphBaseInfluence = geometry.morphTargetsRelative ? 1 : 1 - morphInfluencesSum; - - program.getUniforms().setValue( gl, 'morphTargetBaseInfluence', morphBaseInfluence ); - program.getUniforms().setValue( gl, 'morphTargetInfluences', objectInfluences ); - - program.getUniforms().setValue( gl, 'morphTargetsTexture', entry.texture, textures ); - program.getUniforms().setValue( gl, 'morphTargetsTextureSize', entry.size ); - - - } else { - - // When object doesn't have morph target influences defined, we treat it as a 0-length array - // This is important to make sure we set up morphTargetBaseInfluence / morphTargetInfluences - - const length = objectInfluences === undefined ? 0 : objectInfluences.length; - - let influences = influencesList[ geometry.id ]; - - if ( influences === undefined || influences.length !== length ) { - - // initialise list - - influences = []; - - for ( let i = 0; i < length; i ++ ) { - - influences[ i ] = [ i, 0 ]; - - } - - influencesList[ geometry.id ] = influences; - - } - - // Collect influences - - for ( let i = 0; i < length; i ++ ) { - - const influence = influences[ i ]; - - influence[ 0 ] = i; - influence[ 1 ] = objectInfluences[ i ]; - - } - - influences.sort( absNumericalSort ); - - for ( let i = 0; i < 8; i ++ ) { - - if ( i < length && influences[ i ][ 1 ] ) { - - workInfluences[ i ][ 0 ] = influences[ i ][ 0 ]; - workInfluences[ i ][ 1 ] = influences[ i ][ 1 ]; - - } else { - - workInfluences[ i ][ 0 ] = Number.MAX_SAFE_INTEGER; - workInfluences[ i ][ 1 ] = 0; - - } - - } - - workInfluences.sort( numericalSort ); - - const morphTargets = geometry.morphAttributes.position; - const morphNormals = geometry.morphAttributes.normal; - - let morphInfluencesSum = 0; - - for ( let i = 0; i < 8; i ++ ) { - - const influence = workInfluences[ i ]; - const index = influence[ 0 ]; - const value = influence[ 1 ]; - - if ( index !== Number.MAX_SAFE_INTEGER && value ) { - - if ( morphTargets && geometry.getAttribute( 'morphTarget' + i ) !== morphTargets[ index ] ) { - - geometry.setAttribute( 'morphTarget' + i, morphTargets[ index ] ); - - } - - if ( morphNormals && geometry.getAttribute( 'morphNormal' + i ) !== morphNormals[ index ] ) { - - geometry.setAttribute( 'morphNormal' + i, morphNormals[ index ] ); - - } - - morphInfluences[ i ] = value; - morphInfluencesSum += value; - - } else { - - if ( morphTargets && geometry.hasAttribute( 'morphTarget' + i ) === true ) { - - geometry.deleteAttribute( 'morphTarget' + i ); - - } - - if ( morphNormals && geometry.hasAttribute( 'morphNormal' + i ) === true ) { - - geometry.deleteAttribute( 'morphNormal' + i ); - - } - - morphInfluences[ i ] = 0; - - } - - } - - // GLSL shader uses formula baseinfluence * base + sum(target * influence) - // This allows us to switch between absolute morphs and relative morphs without changing shader code - // When baseinfluence = 1 - sum(influence), the above is equivalent to sum((target - base) * influence) - const morphBaseInfluence = geometry.morphTargetsRelative ? 1 : 1 - morphInfluencesSum; - - program.getUniforms().setValue( gl, 'morphTargetBaseInfluence', morphBaseInfluence ); - program.getUniforms().setValue( gl, 'morphTargetInfluences', morphInfluences ); - - } - - } - - return { - - update: update - - }; - - } - - function WebGLObjects( gl, geometries, attributes, info ) { - - let updateMap = new WeakMap(); - - function update( object ) { - - const frame = info.render.frame; - - const geometry = object.geometry; - const buffergeometry = geometries.get( object, geometry ); - - // Update once per frame - - if ( updateMap.get( buffergeometry ) !== frame ) { - - geometries.update( buffergeometry ); - - updateMap.set( buffergeometry, frame ); - - } - - if ( object.isInstancedMesh ) { - - if ( object.hasEventListener( 'dispose', onInstancedMeshDispose ) === false ) { - - object.addEventListener( 'dispose', onInstancedMeshDispose ); - - } - - attributes.update( object.instanceMatrix, gl.ARRAY_BUFFER ); - - if ( object.instanceColor !== null ) { - - attributes.update( object.instanceColor, gl.ARRAY_BUFFER ); - - } - - } - - return buffergeometry; - - } - - function dispose() { - - updateMap = new WeakMap(); - - } - - function onInstancedMeshDispose( event ) { - - const instancedMesh = event.target; - - instancedMesh.removeEventListener( 'dispose', onInstancedMeshDispose ); - - attributes.remove( instancedMesh.instanceMatrix ); - - if ( instancedMesh.instanceColor !== null ) attributes.remove( instancedMesh.instanceColor ); - - } - - return { - - update: update, - dispose: dispose - - }; - - } - - /** - * Uniforms of a program. - * Those form a tree structure with a special top-level container for the root, - * which you get by calling 'new WebGLUniforms( gl, program )'. - * - * - * Properties of inner nodes including the top-level container: - * - * .seq - array of nested uniforms - * .map - nested uniforms by name - * - * - * Methods of all nodes except the top-level container: - * - * .setValue( gl, value, [textures] ) - * - * uploads a uniform value(s) - * the 'textures' parameter is needed for sampler uniforms - * - * - * Static methods of the top-level container (textures factorizations): - * - * .upload( gl, seq, values, textures ) - * - * sets uniforms in 'seq' to 'values[id].value' - * - * .seqWithValue( seq, values ) : filteredSeq - * - * filters 'seq' entries with corresponding entry in values - * - * - * Methods of the top-level container (textures factorizations): - * - * .setValue( gl, name, value, textures ) - * - * sets uniform with name 'name' to 'value' - * - * .setOptional( gl, obj, prop ) - * - * like .set for an optional property of the object - * - */ - - const emptyTexture = /*@__PURE__*/ new Texture(); - const emptyArrayTexture = /*@__PURE__*/ new DataArrayTexture(); - const empty3dTexture = /*@__PURE__*/ new Data3DTexture(); - const emptyCubeTexture = /*@__PURE__*/ new CubeTexture(); - - // --- Utilities --- - - // Array Caches (provide typed arrays for temporary by size) - - const arrayCacheF32 = []; - const arrayCacheI32 = []; - - // Float32Array caches used for uploading Matrix uniforms - - const mat4array = new Float32Array( 16 ); - const mat3array = new Float32Array( 9 ); - const mat2array = new Float32Array( 4 ); - - // Flattening for arrays of vectors and matrices - - function flatten( array, nBlocks, blockSize ) { - - const firstElem = array[ 0 ]; - - if ( firstElem <= 0 || firstElem > 0 ) return array; - // unoptimized: ! isNaN( firstElem ) - // see http://jacksondunstan.com/articles/983 - - const n = nBlocks * blockSize; - let r = arrayCacheF32[ n ]; - - if ( r === undefined ) { - - r = new Float32Array( n ); - arrayCacheF32[ n ] = r; - - } - - if ( nBlocks !== 0 ) { - - firstElem.toArray( r, 0 ); - - for ( let i = 1, offset = 0; i !== nBlocks; ++ i ) { - - offset += blockSize; - array[ i ].toArray( r, offset ); - - } - - } - - return r; - - } - - function arraysEqual( a, b ) { - - if ( a.length !== b.length ) return false; - - for ( let i = 0, l = a.length; i < l; i ++ ) { - - if ( a[ i ] !== b[ i ] ) return false; - - } - - return true; - - } - - function copyArray( a, b ) { - - for ( let i = 0, l = b.length; i < l; i ++ ) { - - a[ i ] = b[ i ]; - - } - - } - - // Texture unit allocation - - function allocTexUnits( textures, n ) { - - let r = arrayCacheI32[ n ]; - - if ( r === undefined ) { - - r = new Int32Array( n ); - arrayCacheI32[ n ] = r; - - } - - for ( let i = 0; i !== n; ++ i ) { - - r[ i ] = textures.allocateTextureUnit(); - - } - - return r; - - } - - // --- Setters --- - - // Note: Defining these methods externally, because they come in a bunch - // and this way their names minify. - - // Single scalar - - function setValueV1f( gl, v ) { - - const cache = this.cache; - - if ( cache[ 0 ] === v ) return; - - gl.uniform1f( this.addr, v ); - - cache[ 0 ] = v; - - } - - // Single float vector (from flat array or THREE.VectorN) - - function setValueV2f( gl, v ) { - - const cache = this.cache; - - if ( v.x !== undefined ) { - - if ( cache[ 0 ] !== v.x || cache[ 1 ] !== v.y ) { - - gl.uniform2f( this.addr, v.x, v.y ); - - cache[ 0 ] = v.x; - cache[ 1 ] = v.y; - - } - - } else { - - if ( arraysEqual( cache, v ) ) return; - - gl.uniform2fv( this.addr, v ); - - copyArray( cache, v ); - - } - - } - - function setValueV3f( gl, v ) { - - const cache = this.cache; - - if ( v.x !== undefined ) { - - if ( cache[ 0 ] !== v.x || cache[ 1 ] !== v.y || cache[ 2 ] !== v.z ) { - - gl.uniform3f( this.addr, v.x, v.y, v.z ); - - cache[ 0 ] = v.x; - cache[ 1 ] = v.y; - cache[ 2 ] = v.z; - - } - - } else if ( v.r !== undefined ) { - - if ( cache[ 0 ] !== v.r || cache[ 1 ] !== v.g || cache[ 2 ] !== v.b ) { - - gl.uniform3f( this.addr, v.r, v.g, v.b ); - - cache[ 0 ] = v.r; - cache[ 1 ] = v.g; - cache[ 2 ] = v.b; - - } - - } else { - - if ( arraysEqual( cache, v ) ) return; - - gl.uniform3fv( this.addr, v ); - - copyArray( cache, v ); - - } - - } - - function setValueV4f( gl, v ) { - - const cache = this.cache; - - if ( v.x !== undefined ) { - - if ( cache[ 0 ] !== v.x || cache[ 1 ] !== v.y || cache[ 2 ] !== v.z || cache[ 3 ] !== v.w ) { - - gl.uniform4f( this.addr, v.x, v.y, v.z, v.w ); - - cache[ 0 ] = v.x; - cache[ 1 ] = v.y; - cache[ 2 ] = v.z; - cache[ 3 ] = v.w; - - } - - } else { - - if ( arraysEqual( cache, v ) ) return; - - gl.uniform4fv( this.addr, v ); - - copyArray( cache, v ); - - } - - } - - // Single matrix (from flat array or THREE.MatrixN) - - function setValueM2( gl, v ) { - - const cache = this.cache; - const elements = v.elements; - - if ( elements === undefined ) { - - if ( arraysEqual( cache, v ) ) return; - - gl.uniformMatrix2fv( this.addr, false, v ); - - copyArray( cache, v ); - - } else { - - if ( arraysEqual( cache, elements ) ) return; - - mat2array.set( elements ); - - gl.uniformMatrix2fv( this.addr, false, mat2array ); - - copyArray( cache, elements ); - - } - - } - - function setValueM3( gl, v ) { - - const cache = this.cache; - const elements = v.elements; - - if ( elements === undefined ) { - - if ( arraysEqual( cache, v ) ) return; - - gl.uniformMatrix3fv( this.addr, false, v ); - - copyArray( cache, v ); - - } else { - - if ( arraysEqual( cache, elements ) ) return; - - mat3array.set( elements ); - - gl.uniformMatrix3fv( this.addr, false, mat3array ); - - copyArray( cache, elements ); - - } - - } - - function setValueM4( gl, v ) { - - const cache = this.cache; - const elements = v.elements; - - if ( elements === undefined ) { - - if ( arraysEqual( cache, v ) ) return; - - gl.uniformMatrix4fv( this.addr, false, v ); - - copyArray( cache, v ); - - } else { - - if ( arraysEqual( cache, elements ) ) return; - - mat4array.set( elements ); - - gl.uniformMatrix4fv( this.addr, false, mat4array ); - - copyArray( cache, elements ); - - } - - } - - // Single integer / boolean - - function setValueV1i( gl, v ) { - - const cache = this.cache; - - if ( cache[ 0 ] === v ) return; - - gl.uniform1i( this.addr, v ); - - cache[ 0 ] = v; - - } - - // Single integer / boolean vector (from flat array or THREE.VectorN) - - function setValueV2i( gl, v ) { - - const cache = this.cache; - - if ( v.x !== undefined ) { - - if ( cache[ 0 ] !== v.x || cache[ 1 ] !== v.y ) { - - gl.uniform2i( this.addr, v.x, v.y ); - - cache[ 0 ] = v.x; - cache[ 1 ] = v.y; - - } - - } else { - - if ( arraysEqual( cache, v ) ) return; - - gl.uniform2iv( this.addr, v ); - - copyArray( cache, v ); - - } - - } - - function setValueV3i( gl, v ) { - - const cache = this.cache; - - if ( v.x !== undefined ) { - - if ( cache[ 0 ] !== v.x || cache[ 1 ] !== v.y || cache[ 2 ] !== v.z ) { - - gl.uniform3i( this.addr, v.x, v.y, v.z ); - - cache[ 0 ] = v.x; - cache[ 1 ] = v.y; - cache[ 2 ] = v.z; - - } - - } else { - - if ( arraysEqual( cache, v ) ) return; - - gl.uniform3iv( this.addr, v ); - - copyArray( cache, v ); - - } - - } - - function setValueV4i( gl, v ) { - - const cache = this.cache; - - if ( v.x !== undefined ) { - - if ( cache[ 0 ] !== v.x || cache[ 1 ] !== v.y || cache[ 2 ] !== v.z || cache[ 3 ] !== v.w ) { - - gl.uniform4i( this.addr, v.x, v.y, v.z, v.w ); - - cache[ 0 ] = v.x; - cache[ 1 ] = v.y; - cache[ 2 ] = v.z; - cache[ 3 ] = v.w; - - } - - } else { - - if ( arraysEqual( cache, v ) ) return; - - gl.uniform4iv( this.addr, v ); - - copyArray( cache, v ); - - } - - } - - // Single unsigned integer - - function setValueV1ui( gl, v ) { - - const cache = this.cache; - - if ( cache[ 0 ] === v ) return; - - gl.uniform1ui( this.addr, v ); - - cache[ 0 ] = v; - - } - - // Single unsigned integer vector (from flat array or THREE.VectorN) - - function setValueV2ui( gl, v ) { - - const cache = this.cache; - - if ( v.x !== undefined ) { - - if ( cache[ 0 ] !== v.x || cache[ 1 ] !== v.y ) { - - gl.uniform2ui( this.addr, v.x, v.y ); - - cache[ 0 ] = v.x; - cache[ 1 ] = v.y; - - } - - } else { - - if ( arraysEqual( cache, v ) ) return; - - gl.uniform2uiv( this.addr, v ); - - copyArray( cache, v ); - - } - - } - - function setValueV3ui( gl, v ) { - - const cache = this.cache; - - if ( v.x !== undefined ) { - - if ( cache[ 0 ] !== v.x || cache[ 1 ] !== v.y || cache[ 2 ] !== v.z ) { - - gl.uniform3ui( this.addr, v.x, v.y, v.z ); - - cache[ 0 ] = v.x; - cache[ 1 ] = v.y; - cache[ 2 ] = v.z; - - } - - } else { - - if ( arraysEqual( cache, v ) ) return; - - gl.uniform3uiv( this.addr, v ); - - copyArray( cache, v ); - - } - - } - - function setValueV4ui( gl, v ) { - - const cache = this.cache; - - if ( v.x !== undefined ) { - - if ( cache[ 0 ] !== v.x || cache[ 1 ] !== v.y || cache[ 2 ] !== v.z || cache[ 3 ] !== v.w ) { - - gl.uniform4ui( this.addr, v.x, v.y, v.z, v.w ); - - cache[ 0 ] = v.x; - cache[ 1 ] = v.y; - cache[ 2 ] = v.z; - cache[ 3 ] = v.w; - - } - - } else { - - if ( arraysEqual( cache, v ) ) return; - - gl.uniform4uiv( this.addr, v ); - - copyArray( cache, v ); - - } - - } - - - // Single texture (2D / Cube) - - function setValueT1( gl, v, textures ) { - - const cache = this.cache; - const unit = textures.allocateTextureUnit(); - - if ( cache[ 0 ] !== unit ) { - - gl.uniform1i( this.addr, unit ); - cache[ 0 ] = unit; - - } - - textures.setTexture2D( v || emptyTexture, unit ); - - } - - function setValueT3D1( gl, v, textures ) { - - const cache = this.cache; - const unit = textures.allocateTextureUnit(); - - if ( cache[ 0 ] !== unit ) { - - gl.uniform1i( this.addr, unit ); - cache[ 0 ] = unit; - - } - - textures.setTexture3D( v || empty3dTexture, unit ); - - } - - function setValueT6( gl, v, textures ) { - - const cache = this.cache; - const unit = textures.allocateTextureUnit(); - - if ( cache[ 0 ] !== unit ) { - - gl.uniform1i( this.addr, unit ); - cache[ 0 ] = unit; - - } - - textures.setTextureCube( v || emptyCubeTexture, unit ); - - } - - function setValueT2DArray1( gl, v, textures ) { - - const cache = this.cache; - const unit = textures.allocateTextureUnit(); - - if ( cache[ 0 ] !== unit ) { - - gl.uniform1i( this.addr, unit ); - cache[ 0 ] = unit; - - } - - textures.setTexture2DArray( v || emptyArrayTexture, unit ); - - } - - // Helper to pick the right setter for the singular case - - function getSingularSetter( type ) { - - switch ( type ) { - - case 0x1406: return setValueV1f; // FLOAT - case 0x8b50: return setValueV2f; // _VEC2 - case 0x8b51: return setValueV3f; // _VEC3 - case 0x8b52: return setValueV4f; // _VEC4 - - case 0x8b5a: return setValueM2; // _MAT2 - case 0x8b5b: return setValueM3; // _MAT3 - case 0x8b5c: return setValueM4; // _MAT4 - - case 0x1404: case 0x8b56: return setValueV1i; // INT, BOOL - case 0x8b53: case 0x8b57: return setValueV2i; // _VEC2 - case 0x8b54: case 0x8b58: return setValueV3i; // _VEC3 - case 0x8b55: case 0x8b59: return setValueV4i; // _VEC4 - - case 0x1405: return setValueV1ui; // UINT - case 0x8dc6: return setValueV2ui; // _VEC2 - case 0x8dc7: return setValueV3ui; // _VEC3 - case 0x8dc8: return setValueV4ui; // _VEC4 - - case 0x8b5e: // SAMPLER_2D - case 0x8d66: // SAMPLER_EXTERNAL_OES - case 0x8dca: // INT_SAMPLER_2D - case 0x8dd2: // UNSIGNED_INT_SAMPLER_2D - case 0x8b62: // SAMPLER_2D_SHADOW - return setValueT1; - - case 0x8b5f: // SAMPLER_3D - case 0x8dcb: // INT_SAMPLER_3D - case 0x8dd3: // UNSIGNED_INT_SAMPLER_3D - return setValueT3D1; - - case 0x8b60: // SAMPLER_CUBE - case 0x8dcc: // INT_SAMPLER_CUBE - case 0x8dd4: // UNSIGNED_INT_SAMPLER_CUBE - case 0x8dc5: // SAMPLER_CUBE_SHADOW - return setValueT6; - - case 0x8dc1: // SAMPLER_2D_ARRAY - case 0x8dcf: // INT_SAMPLER_2D_ARRAY - case 0x8dd7: // UNSIGNED_INT_SAMPLER_2D_ARRAY - case 0x8dc4: // SAMPLER_2D_ARRAY_SHADOW - return setValueT2DArray1; - - } - - } - - - // Array of scalars - - function setValueV1fArray( gl, v ) { - - gl.uniform1fv( this.addr, v ); - - } - - // Array of vectors (from flat array or array of THREE.VectorN) - - function setValueV2fArray( gl, v ) { - - const data = flatten( v, this.size, 2 ); - - gl.uniform2fv( this.addr, data ); - - } - - function setValueV3fArray( gl, v ) { - - const data = flatten( v, this.size, 3 ); - - gl.uniform3fv( this.addr, data ); - - } - - function setValueV4fArray( gl, v ) { - - const data = flatten( v, this.size, 4 ); - - gl.uniform4fv( this.addr, data ); - - } - - // Array of matrices (from flat array or array of THREE.MatrixN) - - function setValueM2Array( gl, v ) { - - const data = flatten( v, this.size, 4 ); - - gl.uniformMatrix2fv( this.addr, false, data ); - - } - - function setValueM3Array( gl, v ) { - - const data = flatten( v, this.size, 9 ); - - gl.uniformMatrix3fv( this.addr, false, data ); - - } - - function setValueM4Array( gl, v ) { - - const data = flatten( v, this.size, 16 ); - - gl.uniformMatrix4fv( this.addr, false, data ); - - } - - // Array of integer / boolean - - function setValueV1iArray( gl, v ) { - - gl.uniform1iv( this.addr, v ); - - } - - // Array of integer / boolean vectors (from flat array) - - function setValueV2iArray( gl, v ) { - - gl.uniform2iv( this.addr, v ); - - } - - function setValueV3iArray( gl, v ) { - - gl.uniform3iv( this.addr, v ); - - } - - function setValueV4iArray( gl, v ) { - - gl.uniform4iv( this.addr, v ); - - } - - // Array of unsigned integer - - function setValueV1uiArray( gl, v ) { - - gl.uniform1uiv( this.addr, v ); - - } - - // Array of unsigned integer vectors (from flat array) - - function setValueV2uiArray( gl, v ) { - - gl.uniform2uiv( this.addr, v ); - - } - - function setValueV3uiArray( gl, v ) { - - gl.uniform3uiv( this.addr, v ); - - } - - function setValueV4uiArray( gl, v ) { - - gl.uniform4uiv( this.addr, v ); - - } - - - // Array of textures (2D / 3D / Cube / 2DArray) - - function setValueT1Array( gl, v, textures ) { - - const cache = this.cache; - - const n = v.length; - - const units = allocTexUnits( textures, n ); - - if ( ! arraysEqual( cache, units ) ) { - - gl.uniform1iv( this.addr, units ); - - copyArray( cache, units ); - - } - - for ( let i = 0; i !== n; ++ i ) { - - textures.setTexture2D( v[ i ] || emptyTexture, units[ i ] ); - - } - - } - - function setValueT3DArray( gl, v, textures ) { - - const cache = this.cache; - - const n = v.length; - - const units = allocTexUnits( textures, n ); - - if ( ! arraysEqual( cache, units ) ) { - - gl.uniform1iv( this.addr, units ); - - copyArray( cache, units ); - - } - - for ( let i = 0; i !== n; ++ i ) { - - textures.setTexture3D( v[ i ] || empty3dTexture, units[ i ] ); - - } - - } - - function setValueT6Array( gl, v, textures ) { - - const cache = this.cache; - - const n = v.length; - - const units = allocTexUnits( textures, n ); - - if ( ! arraysEqual( cache, units ) ) { - - gl.uniform1iv( this.addr, units ); - - copyArray( cache, units ); - - } - - for ( let i = 0; i !== n; ++ i ) { - - textures.setTextureCube( v[ i ] || emptyCubeTexture, units[ i ] ); - - } - - } - - function setValueT2DArrayArray( gl, v, textures ) { - - const cache = this.cache; - - const n = v.length; - - const units = allocTexUnits( textures, n ); - - if ( ! arraysEqual( cache, units ) ) { - - gl.uniform1iv( this.addr, units ); - - copyArray( cache, units ); - - } - - for ( let i = 0; i !== n; ++ i ) { - - textures.setTexture2DArray( v[ i ] || emptyArrayTexture, units[ i ] ); - - } - - } - - - // Helper to pick the right setter for a pure (bottom-level) array - - function getPureArraySetter( type ) { - - switch ( type ) { - - case 0x1406: return setValueV1fArray; // FLOAT - case 0x8b50: return setValueV2fArray; // _VEC2 - case 0x8b51: return setValueV3fArray; // _VEC3 - case 0x8b52: return setValueV4fArray; // _VEC4 - - case 0x8b5a: return setValueM2Array; // _MAT2 - case 0x8b5b: return setValueM3Array; // _MAT3 - case 0x8b5c: return setValueM4Array; // _MAT4 - - case 0x1404: case 0x8b56: return setValueV1iArray; // INT, BOOL - case 0x8b53: case 0x8b57: return setValueV2iArray; // _VEC2 - case 0x8b54: case 0x8b58: return setValueV3iArray; // _VEC3 - case 0x8b55: case 0x8b59: return setValueV4iArray; // _VEC4 - - case 0x1405: return setValueV1uiArray; // UINT - case 0x8dc6: return setValueV2uiArray; // _VEC2 - case 0x8dc7: return setValueV3uiArray; // _VEC3 - case 0x8dc8: return setValueV4uiArray; // _VEC4 - - case 0x8b5e: // SAMPLER_2D - case 0x8d66: // SAMPLER_EXTERNAL_OES - case 0x8dca: // INT_SAMPLER_2D - case 0x8dd2: // UNSIGNED_INT_SAMPLER_2D - case 0x8b62: // SAMPLER_2D_SHADOW - return setValueT1Array; - - case 0x8b5f: // SAMPLER_3D - case 0x8dcb: // INT_SAMPLER_3D - case 0x8dd3: // UNSIGNED_INT_SAMPLER_3D - return setValueT3DArray; - - case 0x8b60: // SAMPLER_CUBE - case 0x8dcc: // INT_SAMPLER_CUBE - case 0x8dd4: // UNSIGNED_INT_SAMPLER_CUBE - case 0x8dc5: // SAMPLER_CUBE_SHADOW - return setValueT6Array; - - case 0x8dc1: // SAMPLER_2D_ARRAY - case 0x8dcf: // INT_SAMPLER_2D_ARRAY - case 0x8dd7: // UNSIGNED_INT_SAMPLER_2D_ARRAY - case 0x8dc4: // SAMPLER_2D_ARRAY_SHADOW - return setValueT2DArrayArray; - - } - - } - - // --- Uniform Classes --- - - class SingleUniform { - - constructor( id, activeInfo, addr ) { - - this.id = id; - this.addr = addr; - this.cache = []; - this.setValue = getSingularSetter( activeInfo.type ); - - // this.path = activeInfo.name; // DEBUG - - } - - } - - class PureArrayUniform { - - constructor( id, activeInfo, addr ) { - - this.id = id; - this.addr = addr; - this.cache = []; - this.size = activeInfo.size; - this.setValue = getPureArraySetter( activeInfo.type ); - - // this.path = activeInfo.name; // DEBUG - - } - - } - - class StructuredUniform { - - constructor( id ) { - - this.id = id; - - this.seq = []; - this.map = {}; - - } - - setValue( gl, value, textures ) { - - const seq = this.seq; - - for ( let i = 0, n = seq.length; i !== n; ++ i ) { - - const u = seq[ i ]; - u.setValue( gl, value[ u.id ], textures ); - - } - - } - - } - - // --- Top-level --- - - // Parser - builds up the property tree from the path strings - - const RePathPart = /(\w+)(\])?(\[|\.)?/g; - - // extracts - // - the identifier (member name or array index) - // - followed by an optional right bracket (found when array index) - // - followed by an optional left bracket or dot (type of subscript) - // - // Note: These portions can be read in a non-overlapping fashion and - // allow straightforward parsing of the hierarchy that WebGL encodes - // in the uniform names. - - function addUniform( container, uniformObject ) { - - container.seq.push( uniformObject ); - container.map[ uniformObject.id ] = uniformObject; - - } - - function parseUniform( activeInfo, addr, container ) { - - const path = activeInfo.name, - pathLength = path.length; - - // reset RegExp object, because of the early exit of a previous run - RePathPart.lastIndex = 0; - - while ( true ) { - - const match = RePathPart.exec( path ), - matchEnd = RePathPart.lastIndex; - - let id = match[ 1 ]; - const idIsIndex = match[ 2 ] === ']', - subscript = match[ 3 ]; - - if ( idIsIndex ) id = id | 0; // convert to integer - - if ( subscript === undefined || subscript === '[' && matchEnd + 2 === pathLength ) { - - // bare name or "pure" bottom-level array "[0]" suffix - - addUniform( container, subscript === undefined ? - new SingleUniform( id, activeInfo, addr ) : - new PureArrayUniform( id, activeInfo, addr ) ); - - break; - - } else { - - // step into inner node / create it in case it doesn't exist - - const map = container.map; - let next = map[ id ]; - - if ( next === undefined ) { - - next = new StructuredUniform( id ); - addUniform( container, next ); - - } - - container = next; - - } - - } - - } - - // Root Container - - class WebGLUniforms { - - constructor( gl, program ) { - - this.seq = []; - this.map = {}; - - const n = gl.getProgramParameter( program, gl.ACTIVE_UNIFORMS ); - - for ( let i = 0; i < n; ++ i ) { - - const info = gl.getActiveUniform( program, i ), - addr = gl.getUniformLocation( program, info.name ); - - parseUniform( info, addr, this ); - - } - - } - - setValue( gl, name, value, textures ) { - - const u = this.map[ name ]; - - if ( u !== undefined ) u.setValue( gl, value, textures ); - - } - - setOptional( gl, object, name ) { - - const v = object[ name ]; - - if ( v !== undefined ) this.setValue( gl, name, v ); - - } - - static upload( gl, seq, values, textures ) { - - for ( let i = 0, n = seq.length; i !== n; ++ i ) { - - const u = seq[ i ], - v = values[ u.id ]; - - if ( v.needsUpdate !== false ) { - - // note: always updating when .needsUpdate is undefined - u.setValue( gl, v.value, textures ); - - } - - } - - } - - static seqWithValue( seq, values ) { - - const r = []; - - for ( let i = 0, n = seq.length; i !== n; ++ i ) { - - const u = seq[ i ]; - if ( u.id in values ) r.push( u ); - - } - - return r; - - } - - } - - function WebGLShader( gl, type, string ) { - - const shader = gl.createShader( type ); - - gl.shaderSource( shader, string ); - gl.compileShader( shader ); - - return shader; - - } - - let programIdCount = 0; - - function handleSource( string, errorLine ) { - - const lines = string.split( '\n' ); - const lines2 = []; - - const from = Math.max( errorLine - 6, 0 ); - const to = Math.min( errorLine + 6, lines.length ); - - for ( let i = from; i < to; i ++ ) { - - const line = i + 1; - lines2.push( `${line === errorLine ? '>' : ' '} ${line}: ${lines[ i ]}` ); - - } - - return lines2.join( '\n' ); - - } - - function getEncodingComponents( encoding ) { - - switch ( encoding ) { - - case LinearEncoding: - return [ 'Linear', '( value )' ]; - case sRGBEncoding: - return [ 'sRGB', '( value )' ]; - default: - console.warn( 'THREE.WebGLProgram: Unsupported encoding:', encoding ); - return [ 'Linear', '( value )' ]; - - } - - } - - function getShaderErrors( gl, shader, type ) { - - const status = gl.getShaderParameter( shader, gl.COMPILE_STATUS ); - const errors = gl.getShaderInfoLog( shader ).trim(); - - if ( status && errors === '' ) return ''; - - const errorMatches = /ERROR: 0:(\d+)/.exec( errors ); - if ( errorMatches ) { - - // --enable-privileged-webgl-extension - // console.log( '**' + type + '**', gl.getExtension( 'WEBGL_debug_shaders' ).getTranslatedShaderSource( shader ) ); - - const errorLine = parseInt( errorMatches[ 1 ] ); - return type.toUpperCase() + '\n\n' + errors + '\n\n' + handleSource( gl.getShaderSource( shader ), errorLine ); - - } else { - - return errors; - - } - - } - - function getTexelEncodingFunction( functionName, encoding ) { - - const components = getEncodingComponents( encoding ); - return 'vec4 ' + functionName + '( vec4 value ) { return LinearTo' + components[ 0 ] + components[ 1 ] + '; }'; - - } - - function getToneMappingFunction( functionName, toneMapping ) { - - let toneMappingName; - - switch ( toneMapping ) { - - case LinearToneMapping: - toneMappingName = 'Linear'; - break; - - case ReinhardToneMapping: - toneMappingName = 'Reinhard'; - break; - - case CineonToneMapping: - toneMappingName = 'OptimizedCineon'; - break; - - case ACESFilmicToneMapping: - toneMappingName = 'ACESFilmic'; - break; - - case CustomToneMapping: - toneMappingName = 'Custom'; - break; - - default: - console.warn( 'THREE.WebGLProgram: Unsupported toneMapping:', toneMapping ); - toneMappingName = 'Linear'; - - } - - return 'vec3 ' + functionName + '( vec3 color ) { return ' + toneMappingName + 'ToneMapping( color ); }'; - - } - - function generateExtensions( parameters ) { - - const chunks = [ - ( parameters.extensionDerivatives || !! parameters.envMapCubeUVHeight || parameters.bumpMap || parameters.tangentSpaceNormalMap || parameters.clearcoatNormalMap || parameters.flatShading || parameters.shaderID === 'physical' ) ? '#extension GL_OES_standard_derivatives : enable' : '', - ( parameters.extensionFragDepth || parameters.logarithmicDepthBuffer ) && parameters.rendererExtensionFragDepth ? '#extension GL_EXT_frag_depth : enable' : '', - ( parameters.extensionDrawBuffers && parameters.rendererExtensionDrawBuffers ) ? '#extension GL_EXT_draw_buffers : require' : '', - ( parameters.extensionShaderTextureLOD || parameters.envMap || parameters.transmission ) && parameters.rendererExtensionShaderTextureLod ? '#extension GL_EXT_shader_texture_lod : enable' : '' - ]; - - return chunks.filter( filterEmptyLine ).join( '\n' ); - - } - - function generateDefines( defines ) { - - const chunks = []; - - for ( const name in defines ) { - - const value = defines[ name ]; - - if ( value === false ) continue; - - chunks.push( '#define ' + name + ' ' + value ); - - } - - return chunks.join( '\n' ); - - } - - function fetchAttributeLocations( gl, program ) { - - const attributes = {}; - - const n = gl.getProgramParameter( program, gl.ACTIVE_ATTRIBUTES ); - - for ( let i = 0; i < n; i ++ ) { - - const info = gl.getActiveAttrib( program, i ); - const name = info.name; - - let locationSize = 1; - if ( info.type === gl.FLOAT_MAT2 ) locationSize = 2; - if ( info.type === gl.FLOAT_MAT3 ) locationSize = 3; - if ( info.type === gl.FLOAT_MAT4 ) locationSize = 4; - - // console.log( 'THREE.WebGLProgram: ACTIVE VERTEX ATTRIBUTE:', name, i ); - - attributes[ name ] = { - type: info.type, - location: gl.getAttribLocation( program, name ), - locationSize: locationSize - }; - - } - - return attributes; - - } - - function filterEmptyLine( string ) { - - return string !== ''; - - } - - function replaceLightNums( string, parameters ) { - - const numSpotLightCoords = parameters.numSpotLightShadows + parameters.numSpotLightMaps - parameters.numSpotLightShadowsWithMaps; - - return string - .replace( /NUM_DIR_LIGHTS/g, parameters.numDirLights ) - .replace( /NUM_SPOT_LIGHTS/g, parameters.numSpotLights ) - .replace( /NUM_SPOT_LIGHT_MAPS/g, parameters.numSpotLightMaps ) - .replace( /NUM_SPOT_LIGHT_COORDS/g, numSpotLightCoords ) - .replace( /NUM_RECT_AREA_LIGHTS/g, parameters.numRectAreaLights ) - .replace( /NUM_POINT_LIGHTS/g, parameters.numPointLights ) - .replace( /NUM_HEMI_LIGHTS/g, parameters.numHemiLights ) - .replace( /NUM_DIR_LIGHT_SHADOWS/g, parameters.numDirLightShadows ) - .replace( /NUM_SPOT_LIGHT_SHADOWS_WITH_MAPS/g, parameters.numSpotLightShadowsWithMaps ) - .replace( /NUM_SPOT_LIGHT_SHADOWS/g, parameters.numSpotLightShadows ) - .replace( /NUM_POINT_LIGHT_SHADOWS/g, parameters.numPointLightShadows ); - - } - - function replaceClippingPlaneNums( string, parameters ) { - - return string - .replace( /NUM_CLIPPING_PLANES/g, parameters.numClippingPlanes ) - .replace( /UNION_CLIPPING_PLANES/g, ( parameters.numClippingPlanes - parameters.numClipIntersection ) ); - - } - - // Resolve Includes - - const includePattern = /^[ \t]*#include +<([\w\d./]+)>/gm; - - function resolveIncludes( string ) { - - return string.replace( includePattern, includeReplacer ); - - } - - function includeReplacer( match, include ) { - - const string = ShaderChunk[ include ]; - - if ( string === undefined ) { - - throw new Error( 'Can not resolve #include <' + include + '>' ); - - } - - return resolveIncludes( string ); - - } - - // Unroll Loops - - const unrollLoopPattern = /#pragma unroll_loop_start\s+for\s*\(\s*int\s+i\s*=\s*(\d+)\s*;\s*i\s*<\s*(\d+)\s*;\s*i\s*\+\+\s*\)\s*{([\s\S]+?)}\s+#pragma unroll_loop_end/g; - - function unrollLoops( string ) { - - return string.replace( unrollLoopPattern, loopReplacer ); - - } - - function loopReplacer( match, start, end, snippet ) { - - let string = ''; - - for ( let i = parseInt( start ); i < parseInt( end ); i ++ ) { - - string += snippet - .replace( /\[\s*i\s*\]/g, '[ ' + i + ' ]' ) - .replace( /UNROLLED_LOOP_INDEX/g, i ); - - } - - return string; - - } - - // - - function generatePrecision( parameters ) { - - let precisionstring = 'precision ' + parameters.precision + ' float;\nprecision ' + parameters.precision + ' int;'; - - if ( parameters.precision === 'highp' ) { - - precisionstring += '\n#define HIGH_PRECISION'; - - } else if ( parameters.precision === 'mediump' ) { - - precisionstring += '\n#define MEDIUM_PRECISION'; - - } else if ( parameters.precision === 'lowp' ) { - - precisionstring += '\n#define LOW_PRECISION'; - - } - - return precisionstring; - - } - - function generateShadowMapTypeDefine( parameters ) { - - let shadowMapTypeDefine = 'SHADOWMAP_TYPE_BASIC'; - - if ( parameters.shadowMapType === PCFShadowMap ) { - - shadowMapTypeDefine = 'SHADOWMAP_TYPE_PCF'; - - } else if ( parameters.shadowMapType === PCFSoftShadowMap ) { - - shadowMapTypeDefine = 'SHADOWMAP_TYPE_PCF_SOFT'; - - } else if ( parameters.shadowMapType === VSMShadowMap ) { - - shadowMapTypeDefine = 'SHADOWMAP_TYPE_VSM'; - - } - - return shadowMapTypeDefine; - - } - - function generateEnvMapTypeDefine( parameters ) { - - let envMapTypeDefine = 'ENVMAP_TYPE_CUBE'; - - if ( parameters.envMap ) { - - switch ( parameters.envMapMode ) { - - case CubeReflectionMapping: - case CubeRefractionMapping: - envMapTypeDefine = 'ENVMAP_TYPE_CUBE'; - break; - - case CubeUVReflectionMapping: - envMapTypeDefine = 'ENVMAP_TYPE_CUBE_UV'; - break; - - } - - } - - return envMapTypeDefine; - - } - - function generateEnvMapModeDefine( parameters ) { - - let envMapModeDefine = 'ENVMAP_MODE_REFLECTION'; - - if ( parameters.envMap ) { - - switch ( parameters.envMapMode ) { - - case CubeRefractionMapping: - - envMapModeDefine = 'ENVMAP_MODE_REFRACTION'; - break; - - } - - } - - return envMapModeDefine; - - } - - function generateEnvMapBlendingDefine( parameters ) { - - let envMapBlendingDefine = 'ENVMAP_BLENDING_NONE'; - - if ( parameters.envMap ) { - - switch ( parameters.combine ) { - - case MultiplyOperation: - envMapBlendingDefine = 'ENVMAP_BLENDING_MULTIPLY'; - break; - - case MixOperation: - envMapBlendingDefine = 'ENVMAP_BLENDING_MIX'; - break; - - case AddOperation: - envMapBlendingDefine = 'ENVMAP_BLENDING_ADD'; - break; - - } - - } - - return envMapBlendingDefine; - - } - - function generateCubeUVSize( parameters ) { - - const imageHeight = parameters.envMapCubeUVHeight; - - if ( imageHeight === null ) return null; - - const maxMip = Math.log2( imageHeight ) - 2; - - const texelHeight = 1.0 / imageHeight; - - const texelWidth = 1.0 / ( 3 * Math.max( Math.pow( 2, maxMip ), 7 * 16 ) ); - - return { texelWidth, texelHeight, maxMip }; - - } - - function WebGLProgram( renderer, cacheKey, parameters, bindingStates ) { - - // TODO Send this event to Three.js DevTools - // console.log( 'WebGLProgram', cacheKey ); - - const gl = renderer.getContext(); - - const defines = parameters.defines; - - let vertexShader = parameters.vertexShader; - let fragmentShader = parameters.fragmentShader; - - const shadowMapTypeDefine = generateShadowMapTypeDefine( parameters ); - const envMapTypeDefine = generateEnvMapTypeDefine( parameters ); - const envMapModeDefine = generateEnvMapModeDefine( parameters ); - const envMapBlendingDefine = generateEnvMapBlendingDefine( parameters ); - const envMapCubeUVSize = generateCubeUVSize( parameters ); - - const customExtensions = parameters.isWebGL2 ? '' : generateExtensions( parameters ); - - const customDefines = generateDefines( defines ); - - const program = gl.createProgram(); - - let prefixVertex, prefixFragment; - let versionString = parameters.glslVersion ? '#version ' + parameters.glslVersion + '\n' : ''; - - if ( parameters.isRawShaderMaterial ) { - - prefixVertex = [ - - customDefines - - ].filter( filterEmptyLine ).join( '\n' ); - - if ( prefixVertex.length > 0 ) { - - prefixVertex += '\n'; - - } - - prefixFragment = [ - - customExtensions, - customDefines - - ].filter( filterEmptyLine ).join( '\n' ); - - if ( prefixFragment.length > 0 ) { - - prefixFragment += '\n'; - - } - - } else { - - prefixVertex = [ - - generatePrecision( parameters ), - - '#define SHADER_NAME ' + parameters.shaderName, - - customDefines, - - parameters.instancing ? '#define USE_INSTANCING' : '', - parameters.instancingColor ? '#define USE_INSTANCING_COLOR' : '', - - parameters.supportsVertexTextures ? '#define VERTEX_TEXTURES' : '', - - ( parameters.useFog && parameters.fog ) ? '#define USE_FOG' : '', - ( parameters.useFog && parameters.fogExp2 ) ? '#define FOG_EXP2' : '', - - parameters.map ? '#define USE_MAP' : '', - parameters.envMap ? '#define USE_ENVMAP' : '', - parameters.envMap ? '#define ' + envMapModeDefine : '', - parameters.lightMap ? '#define USE_LIGHTMAP' : '', - parameters.aoMap ? '#define USE_AOMAP' : '', - parameters.emissiveMap ? '#define USE_EMISSIVEMAP' : '', - parameters.bumpMap ? '#define USE_BUMPMAP' : '', - parameters.normalMap ? '#define USE_NORMALMAP' : '', - ( parameters.normalMap && parameters.objectSpaceNormalMap ) ? '#define OBJECTSPACE_NORMALMAP' : '', - ( parameters.normalMap && parameters.tangentSpaceNormalMap ) ? '#define TANGENTSPACE_NORMALMAP' : '', - - parameters.clearcoatMap ? '#define USE_CLEARCOATMAP' : '', - parameters.clearcoatRoughnessMap ? '#define USE_CLEARCOAT_ROUGHNESSMAP' : '', - parameters.clearcoatNormalMap ? '#define USE_CLEARCOAT_NORMALMAP' : '', - - parameters.iridescenceMap ? '#define USE_IRIDESCENCEMAP' : '', - parameters.iridescenceThicknessMap ? '#define USE_IRIDESCENCE_THICKNESSMAP' : '', - - parameters.displacementMap && parameters.supportsVertexTextures ? '#define USE_DISPLACEMENTMAP' : '', - - parameters.specularMap ? '#define USE_SPECULARMAP' : '', - parameters.specularIntensityMap ? '#define USE_SPECULARINTENSITYMAP' : '', - parameters.specularColorMap ? '#define USE_SPECULARCOLORMAP' : '', - - parameters.roughnessMap ? '#define USE_ROUGHNESSMAP' : '', - parameters.metalnessMap ? '#define USE_METALNESSMAP' : '', - parameters.alphaMap ? '#define USE_ALPHAMAP' : '', - - parameters.transmission ? '#define USE_TRANSMISSION' : '', - parameters.transmissionMap ? '#define USE_TRANSMISSIONMAP' : '', - parameters.thicknessMap ? '#define USE_THICKNESSMAP' : '', - - parameters.sheenColorMap ? '#define USE_SHEENCOLORMAP' : '', - parameters.sheenRoughnessMap ? '#define USE_SHEENROUGHNESSMAP' : '', - - parameters.vertexTangents ? '#define USE_TANGENT' : '', - parameters.vertexColors ? '#define USE_COLOR' : '', - parameters.vertexAlphas ? '#define USE_COLOR_ALPHA' : '', - parameters.vertexUvs ? '#define USE_UV' : '', - parameters.uvsVertexOnly ? '#define UVS_VERTEX_ONLY' : '', - - parameters.flatShading ? '#define FLAT_SHADED' : '', - - parameters.skinning ? '#define USE_SKINNING' : '', - - parameters.morphTargets ? '#define USE_MORPHTARGETS' : '', - parameters.morphNormals && parameters.flatShading === false ? '#define USE_MORPHNORMALS' : '', - ( parameters.morphColors && parameters.isWebGL2 ) ? '#define USE_MORPHCOLORS' : '', - ( parameters.morphTargetsCount > 0 && parameters.isWebGL2 ) ? '#define MORPHTARGETS_TEXTURE' : '', - ( parameters.morphTargetsCount > 0 && parameters.isWebGL2 ) ? '#define MORPHTARGETS_TEXTURE_STRIDE ' + parameters.morphTextureStride : '', - ( parameters.morphTargetsCount > 0 && parameters.isWebGL2 ) ? '#define MORPHTARGETS_COUNT ' + parameters.morphTargetsCount : '', - parameters.doubleSided ? '#define DOUBLE_SIDED' : '', - parameters.flipSided ? '#define FLIP_SIDED' : '', - - parameters.shadowMapEnabled ? '#define USE_SHADOWMAP' : '', - parameters.shadowMapEnabled ? '#define ' + shadowMapTypeDefine : '', - - parameters.sizeAttenuation ? '#define USE_SIZEATTENUATION' : '', - - parameters.logarithmicDepthBuffer ? '#define USE_LOGDEPTHBUF' : '', - ( parameters.logarithmicDepthBuffer && parameters.rendererExtensionFragDepth ) ? '#define USE_LOGDEPTHBUF_EXT' : '', - - 'uniform mat4 modelMatrix;', - 'uniform mat4 modelViewMatrix;', - 'uniform mat4 projectionMatrix;', - 'uniform mat4 viewMatrix;', - 'uniform mat3 normalMatrix;', - 'uniform vec3 cameraPosition;', - 'uniform bool isOrthographic;', - - '#ifdef USE_INSTANCING', - - ' attribute mat4 instanceMatrix;', - - '#endif', - - '#ifdef USE_INSTANCING_COLOR', - - ' attribute vec3 instanceColor;', - - '#endif', - - 'attribute vec3 position;', - 'attribute vec3 normal;', - 'attribute vec2 uv;', - - '#ifdef USE_TANGENT', - - ' attribute vec4 tangent;', - - '#endif', - - '#if defined( USE_COLOR_ALPHA )', - - ' attribute vec4 color;', - - '#elif defined( USE_COLOR )', - - ' attribute vec3 color;', - - '#endif', - - '#if ( defined( USE_MORPHTARGETS ) && ! defined( MORPHTARGETS_TEXTURE ) )', - - ' attribute vec3 morphTarget0;', - ' attribute vec3 morphTarget1;', - ' attribute vec3 morphTarget2;', - ' attribute vec3 morphTarget3;', - - ' #ifdef USE_MORPHNORMALS', - - ' attribute vec3 morphNormal0;', - ' attribute vec3 morphNormal1;', - ' attribute vec3 morphNormal2;', - ' attribute vec3 morphNormal3;', - - ' #else', - - ' attribute vec3 morphTarget4;', - ' attribute vec3 morphTarget5;', - ' attribute vec3 morphTarget6;', - ' attribute vec3 morphTarget7;', - - ' #endif', - - '#endif', - - '#ifdef USE_SKINNING', - - ' attribute vec4 skinIndex;', - ' attribute vec4 skinWeight;', - - '#endif', - - '\n' - - ].filter( filterEmptyLine ).join( '\n' ); - - prefixFragment = [ - - customExtensions, - - generatePrecision( parameters ), - - '#define SHADER_NAME ' + parameters.shaderName, - - customDefines, - - ( parameters.useFog && parameters.fog ) ? '#define USE_FOG' : '', - ( parameters.useFog && parameters.fogExp2 ) ? '#define FOG_EXP2' : '', - - parameters.map ? '#define USE_MAP' : '', - parameters.matcap ? '#define USE_MATCAP' : '', - parameters.envMap ? '#define USE_ENVMAP' : '', - parameters.envMap ? '#define ' + envMapTypeDefine : '', - parameters.envMap ? '#define ' + envMapModeDefine : '', - parameters.envMap ? '#define ' + envMapBlendingDefine : '', - envMapCubeUVSize ? '#define CUBEUV_TEXEL_WIDTH ' + envMapCubeUVSize.texelWidth : '', - envMapCubeUVSize ? '#define CUBEUV_TEXEL_HEIGHT ' + envMapCubeUVSize.texelHeight : '', - envMapCubeUVSize ? '#define CUBEUV_MAX_MIP ' + envMapCubeUVSize.maxMip + '.0' : '', - parameters.lightMap ? '#define USE_LIGHTMAP' : '', - parameters.aoMap ? '#define USE_AOMAP' : '', - parameters.emissiveMap ? '#define USE_EMISSIVEMAP' : '', - parameters.bumpMap ? '#define USE_BUMPMAP' : '', - parameters.normalMap ? '#define USE_NORMALMAP' : '', - ( parameters.normalMap && parameters.objectSpaceNormalMap ) ? '#define OBJECTSPACE_NORMALMAP' : '', - ( parameters.normalMap && parameters.tangentSpaceNormalMap ) ? '#define TANGENTSPACE_NORMALMAP' : '', - - parameters.clearcoat ? '#define USE_CLEARCOAT' : '', - parameters.clearcoatMap ? '#define USE_CLEARCOATMAP' : '', - parameters.clearcoatRoughnessMap ? '#define USE_CLEARCOAT_ROUGHNESSMAP' : '', - parameters.clearcoatNormalMap ? '#define USE_CLEARCOAT_NORMALMAP' : '', - - parameters.iridescence ? '#define USE_IRIDESCENCE' : '', - parameters.iridescenceMap ? '#define USE_IRIDESCENCEMAP' : '', - parameters.iridescenceThicknessMap ? '#define USE_IRIDESCENCE_THICKNESSMAP' : '', - - parameters.specularMap ? '#define USE_SPECULARMAP' : '', - parameters.specularIntensityMap ? '#define USE_SPECULARINTENSITYMAP' : '', - parameters.specularColorMap ? '#define USE_SPECULARCOLORMAP' : '', - parameters.roughnessMap ? '#define USE_ROUGHNESSMAP' : '', - parameters.metalnessMap ? '#define USE_METALNESSMAP' : '', - - parameters.alphaMap ? '#define USE_ALPHAMAP' : '', - parameters.alphaTest ? '#define USE_ALPHATEST' : '', - - parameters.sheen ? '#define USE_SHEEN' : '', - parameters.sheenColorMap ? '#define USE_SHEENCOLORMAP' : '', - parameters.sheenRoughnessMap ? '#define USE_SHEENROUGHNESSMAP' : '', - - parameters.transmission ? '#define USE_TRANSMISSION' : '', - parameters.transmissionMap ? '#define USE_TRANSMISSIONMAP' : '', - parameters.thicknessMap ? '#define USE_THICKNESSMAP' : '', - - parameters.decodeVideoTexture ? '#define DECODE_VIDEO_TEXTURE' : '', - - parameters.vertexTangents ? '#define USE_TANGENT' : '', - parameters.vertexColors || parameters.instancingColor ? '#define USE_COLOR' : '', - parameters.vertexAlphas ? '#define USE_COLOR_ALPHA' : '', - parameters.vertexUvs ? '#define USE_UV' : '', - parameters.uvsVertexOnly ? '#define UVS_VERTEX_ONLY' : '', - - parameters.gradientMap ? '#define USE_GRADIENTMAP' : '', - - parameters.flatShading ? '#define FLAT_SHADED' : '', - - parameters.doubleSided ? '#define DOUBLE_SIDED' : '', - parameters.flipSided ? '#define FLIP_SIDED' : '', - - parameters.shadowMapEnabled ? '#define USE_SHADOWMAP' : '', - parameters.shadowMapEnabled ? '#define ' + shadowMapTypeDefine : '', - - parameters.premultipliedAlpha ? '#define PREMULTIPLIED_ALPHA' : '', - - parameters.useLegacyLights ? '#define LEGACY_LIGHTS' : '', - - parameters.logarithmicDepthBuffer ? '#define USE_LOGDEPTHBUF' : '', - ( parameters.logarithmicDepthBuffer && parameters.rendererExtensionFragDepth ) ? '#define USE_LOGDEPTHBUF_EXT' : '', - - 'uniform mat4 viewMatrix;', - 'uniform vec3 cameraPosition;', - 'uniform bool isOrthographic;', - - ( parameters.toneMapping !== NoToneMapping ) ? '#define TONE_MAPPING' : '', - ( parameters.toneMapping !== NoToneMapping ) ? ShaderChunk[ 'tonemapping_pars_fragment' ] : '', // this code is required here because it is used by the toneMapping() function defined below - ( parameters.toneMapping !== NoToneMapping ) ? getToneMappingFunction( 'toneMapping', parameters.toneMapping ) : '', - - parameters.dithering ? '#define DITHERING' : '', - parameters.opaque ? '#define OPAQUE' : '', - - ShaderChunk[ 'encodings_pars_fragment' ], // this code is required here because it is used by the various encoding/decoding function defined below - getTexelEncodingFunction( 'linearToOutputTexel', parameters.outputEncoding ), - - parameters.useDepthPacking ? '#define DEPTH_PACKING ' + parameters.depthPacking : '', - - '\n' - - ].filter( filterEmptyLine ).join( '\n' ); - - } - - vertexShader = resolveIncludes( vertexShader ); - vertexShader = replaceLightNums( vertexShader, parameters ); - vertexShader = replaceClippingPlaneNums( vertexShader, parameters ); - - fragmentShader = resolveIncludes( fragmentShader ); - fragmentShader = replaceLightNums( fragmentShader, parameters ); - fragmentShader = replaceClippingPlaneNums( fragmentShader, parameters ); - - vertexShader = unrollLoops( vertexShader ); - fragmentShader = unrollLoops( fragmentShader ); - - if ( parameters.isWebGL2 && parameters.isRawShaderMaterial !== true ) { - - // GLSL 3.0 conversion for built-in materials and ShaderMaterial - - versionString = '#version 300 es\n'; - - prefixVertex = [ - 'precision mediump sampler2DArray;', - '#define attribute in', - '#define varying out', - '#define texture2D texture' - ].join( '\n' ) + '\n' + prefixVertex; - - prefixFragment = [ - '#define varying in', - ( parameters.glslVersion === GLSL3 ) ? '' : 'layout(location = 0) out highp vec4 pc_fragColor;', - ( parameters.glslVersion === GLSL3 ) ? '' : '#define gl_FragColor pc_fragColor', - '#define gl_FragDepthEXT gl_FragDepth', - '#define texture2D texture', - '#define textureCube texture', - '#define texture2DProj textureProj', - '#define texture2DLodEXT textureLod', - '#define texture2DProjLodEXT textureProjLod', - '#define textureCubeLodEXT textureLod', - '#define texture2DGradEXT textureGrad', - '#define texture2DProjGradEXT textureProjGrad', - '#define textureCubeGradEXT textureGrad' - ].join( '\n' ) + '\n' + prefixFragment; - - } - - const vertexGlsl = versionString + prefixVertex + vertexShader; - const fragmentGlsl = versionString + prefixFragment + fragmentShader; - - // console.log( '*VERTEX*', vertexGlsl ); - // console.log( '*FRAGMENT*', fragmentGlsl ); - - const glVertexShader = WebGLShader( gl, gl.VERTEX_SHADER, vertexGlsl ); - const glFragmentShader = WebGLShader( gl, gl.FRAGMENT_SHADER, fragmentGlsl ); - - gl.attachShader( program, glVertexShader ); - gl.attachShader( program, glFragmentShader ); - - // Force a particular attribute to index 0. - - if ( parameters.index0AttributeName !== undefined ) { - - gl.bindAttribLocation( program, 0, parameters.index0AttributeName ); - - } else if ( parameters.morphTargets === true ) { - - // programs with morphTargets displace position out of attribute 0 - gl.bindAttribLocation( program, 0, 'position' ); - - } - - gl.linkProgram( program ); - - // check for link errors - if ( renderer.debug.checkShaderErrors ) { - - const programLog = gl.getProgramInfoLog( program ).trim(); - const vertexLog = gl.getShaderInfoLog( glVertexShader ).trim(); - const fragmentLog = gl.getShaderInfoLog( glFragmentShader ).trim(); - - let runnable = true; - let haveDiagnostics = true; - - if ( gl.getProgramParameter( program, gl.LINK_STATUS ) === false ) { - - runnable = false; - - const vertexErrors = getShaderErrors( gl, glVertexShader, 'vertex' ); - const fragmentErrors = getShaderErrors( gl, glFragmentShader, 'fragment' ); - - console.error( - 'THREE.WebGLProgram: Shader Error ' + gl.getError() + ' - ' + - 'VALIDATE_STATUS ' + gl.getProgramParameter( program, gl.VALIDATE_STATUS ) + '\n\n' + - 'Program Info Log: ' + programLog + '\n' + - vertexErrors + '\n' + - fragmentErrors - ); - - } else if ( programLog !== '' ) { - - console.warn( 'THREE.WebGLProgram: Program Info Log:', programLog ); - - } else if ( vertexLog === '' || fragmentLog === '' ) { - - haveDiagnostics = false; - - } - - if ( haveDiagnostics ) { - - this.diagnostics = { - - runnable: runnable, - - programLog: programLog, - - vertexShader: { - - log: vertexLog, - prefix: prefixVertex - - }, - - fragmentShader: { - - log: fragmentLog, - prefix: prefixFragment - - } - - }; - - } - - } - - // Clean up - - // Crashes in iOS9 and iOS10. #18402 - // gl.detachShader( program, glVertexShader ); - // gl.detachShader( program, glFragmentShader ); - - gl.deleteShader( glVertexShader ); - gl.deleteShader( glFragmentShader ); - - // set up caching for uniform locations - - let cachedUniforms; - - this.getUniforms = function () { - - if ( cachedUniforms === undefined ) { - - cachedUniforms = new WebGLUniforms( gl, program ); - - } - - return cachedUniforms; - - }; - - // set up caching for attribute locations - - let cachedAttributes; - - this.getAttributes = function () { - - if ( cachedAttributes === undefined ) { - - cachedAttributes = fetchAttributeLocations( gl, program ); - - } - - return cachedAttributes; - - }; - - // free resource - - this.destroy = function () { - - bindingStates.releaseStatesOfProgram( this ); - - gl.deleteProgram( program ); - this.program = undefined; - - }; - - // - - this.name = parameters.shaderName; - this.id = programIdCount ++; - this.cacheKey = cacheKey; - this.usedTimes = 1; - this.program = program; - this.vertexShader = glVertexShader; - this.fragmentShader = glFragmentShader; - - return this; - - } - - let _id = 0; - - class WebGLShaderCache { - - constructor() { - - this.shaderCache = new Map(); - this.materialCache = new Map(); - - } - - update( material ) { - - const vertexShader = material.vertexShader; - const fragmentShader = material.fragmentShader; - - const vertexShaderStage = this._getShaderStage( vertexShader ); - const fragmentShaderStage = this._getShaderStage( fragmentShader ); - - const materialShaders = this._getShaderCacheForMaterial( material ); - - if ( materialShaders.has( vertexShaderStage ) === false ) { - - materialShaders.add( vertexShaderStage ); - vertexShaderStage.usedTimes ++; - - } - - if ( materialShaders.has( fragmentShaderStage ) === false ) { - - materialShaders.add( fragmentShaderStage ); - fragmentShaderStage.usedTimes ++; - - } - - return this; - - } - - remove( material ) { - - const materialShaders = this.materialCache.get( material ); - - for ( const shaderStage of materialShaders ) { - - shaderStage.usedTimes --; - - if ( shaderStage.usedTimes === 0 ) this.shaderCache.delete( shaderStage.code ); - - } - - this.materialCache.delete( material ); - - return this; - - } - - getVertexShaderID( material ) { - - return this._getShaderStage( material.vertexShader ).id; - - } - - getFragmentShaderID( material ) { - - return this._getShaderStage( material.fragmentShader ).id; - - } - - dispose() { - - this.shaderCache.clear(); - this.materialCache.clear(); - - } - - _getShaderCacheForMaterial( material ) { - - const cache = this.materialCache; - let set = cache.get( material ); - - if ( set === undefined ) { - - set = new Set(); - cache.set( material, set ); - - } - - return set; - - } - - _getShaderStage( code ) { - - const cache = this.shaderCache; - let stage = cache.get( code ); - - if ( stage === undefined ) { - - stage = new WebGLShaderStage( code ); - cache.set( code, stage ); - - } - - return stage; - - } - - } - - class WebGLShaderStage { - - constructor( code ) { - - this.id = _id ++; - - this.code = code; - this.usedTimes = 0; - - } - - } - - function WebGLPrograms( renderer, cubemaps, cubeuvmaps, extensions, capabilities, bindingStates, clipping ) { - - const _programLayers = new Layers(); - const _customShaders = new WebGLShaderCache(); - const programs = []; - - const isWebGL2 = capabilities.isWebGL2; - const logarithmicDepthBuffer = capabilities.logarithmicDepthBuffer; - const vertexTextures = capabilities.vertexTextures; - let precision = capabilities.precision; - - const shaderIDs = { - MeshDepthMaterial: 'depth', - MeshDistanceMaterial: 'distanceRGBA', - MeshNormalMaterial: 'normal', - MeshBasicMaterial: 'basic', - MeshLambertMaterial: 'lambert', - MeshPhongMaterial: 'phong', - MeshToonMaterial: 'toon', - MeshStandardMaterial: 'physical', - MeshPhysicalMaterial: 'physical', - MeshMatcapMaterial: 'matcap', - LineBasicMaterial: 'basic', - LineDashedMaterial: 'dashed', - PointsMaterial: 'points', - ShadowMaterial: 'shadow', - SpriteMaterial: 'sprite' - }; - - function getParameters( material, lights, shadows, scene, object ) { - - const fog = scene.fog; - const geometry = object.geometry; - const environment = material.isMeshStandardMaterial ? scene.environment : null; - - const envMap = ( material.isMeshStandardMaterial ? cubeuvmaps : cubemaps ).get( material.envMap || environment ); - const envMapCubeUVHeight = ( !! envMap ) && ( envMap.mapping === CubeUVReflectionMapping ) ? envMap.image.height : null; - - const shaderID = shaderIDs[ material.type ]; - - // heuristics to create shader parameters according to lights in the scene - // (not to blow over maxLights budget) - - if ( material.precision !== null ) { - - precision = capabilities.getMaxPrecision( material.precision ); - - if ( precision !== material.precision ) { - - console.warn( 'THREE.WebGLProgram.getParameters:', material.precision, 'not supported, using', precision, 'instead.' ); - - } - - } - - // - - const morphAttribute = geometry.morphAttributes.position || geometry.morphAttributes.normal || geometry.morphAttributes.color; - const morphTargetsCount = ( morphAttribute !== undefined ) ? morphAttribute.length : 0; - - let morphTextureStride = 0; - - if ( geometry.morphAttributes.position !== undefined ) morphTextureStride = 1; - if ( geometry.morphAttributes.normal !== undefined ) morphTextureStride = 2; - if ( geometry.morphAttributes.color !== undefined ) morphTextureStride = 3; - - // - - let vertexShader, fragmentShader; - let customVertexShaderID, customFragmentShaderID; - - if ( shaderID ) { - - const shader = ShaderLib[ shaderID ]; - - vertexShader = shader.vertexShader; - fragmentShader = shader.fragmentShader; - - } else { - - vertexShader = material.vertexShader; - fragmentShader = material.fragmentShader; - - _customShaders.update( material ); - - customVertexShaderID = _customShaders.getVertexShaderID( material ); - customFragmentShaderID = _customShaders.getFragmentShaderID( material ); - - } - - const currentRenderTarget = renderer.getRenderTarget(); - - const useAlphaTest = material.alphaTest > 0; - const useClearcoat = material.clearcoat > 0; - const useIridescence = material.iridescence > 0; - - const parameters = { - - isWebGL2: isWebGL2, - - shaderID: shaderID, - shaderName: material.type, - - vertexShader: vertexShader, - fragmentShader: fragmentShader, - defines: material.defines, - - customVertexShaderID: customVertexShaderID, - customFragmentShaderID: customFragmentShaderID, - - isRawShaderMaterial: material.isRawShaderMaterial === true, - glslVersion: material.glslVersion, - - precision: precision, - - instancing: object.isInstancedMesh === true, - instancingColor: object.isInstancedMesh === true && object.instanceColor !== null, - - supportsVertexTextures: vertexTextures, - outputEncoding: ( currentRenderTarget === null ) ? renderer.outputEncoding : ( currentRenderTarget.isXRRenderTarget === true ? currentRenderTarget.texture.encoding : LinearEncoding ), - map: !! material.map, - matcap: !! material.matcap, - envMap: !! envMap, - envMapMode: envMap && envMap.mapping, - envMapCubeUVHeight: envMapCubeUVHeight, - lightMap: !! material.lightMap, - aoMap: !! material.aoMap, - emissiveMap: !! material.emissiveMap, - bumpMap: !! material.bumpMap, - normalMap: !! material.normalMap, - objectSpaceNormalMap: material.normalMapType === ObjectSpaceNormalMap, - tangentSpaceNormalMap: material.normalMapType === TangentSpaceNormalMap, - - decodeVideoTexture: !! material.map && ( material.map.isVideoTexture === true ) && ( material.map.encoding === sRGBEncoding ), - - clearcoat: useClearcoat, - clearcoatMap: useClearcoat && !! material.clearcoatMap, - clearcoatRoughnessMap: useClearcoat && !! material.clearcoatRoughnessMap, - clearcoatNormalMap: useClearcoat && !! material.clearcoatNormalMap, - - iridescence: useIridescence, - iridescenceMap: useIridescence && !! material.iridescenceMap, - iridescenceThicknessMap: useIridescence && !! material.iridescenceThicknessMap, - - displacementMap: !! material.displacementMap, - roughnessMap: !! material.roughnessMap, - metalnessMap: !! material.metalnessMap, - specularMap: !! material.specularMap, - specularIntensityMap: !! material.specularIntensityMap, - specularColorMap: !! material.specularColorMap, - - opaque: material.transparent === false && material.blending === NormalBlending, - - alphaMap: !! material.alphaMap, - alphaTest: useAlphaTest, - - gradientMap: !! material.gradientMap, - - sheen: material.sheen > 0, - sheenColorMap: !! material.sheenColorMap, - sheenRoughnessMap: !! material.sheenRoughnessMap, - - transmission: material.transmission > 0, - transmissionMap: !! material.transmissionMap, - thicknessMap: !! material.thicknessMap, - - combine: material.combine, - - vertexTangents: ( !! material.normalMap && !! geometry.attributes.tangent ), - vertexColors: material.vertexColors, - vertexAlphas: material.vertexColors === true && !! geometry.attributes.color && geometry.attributes.color.itemSize === 4, - vertexUvs: !! material.map || !! material.bumpMap || !! material.normalMap || !! material.specularMap || !! material.alphaMap || !! material.emissiveMap || !! material.roughnessMap || !! material.metalnessMap || !! material.clearcoatMap || !! material.clearcoatRoughnessMap || !! material.clearcoatNormalMap || !! material.iridescenceMap || !! material.iridescenceThicknessMap || !! material.displacementMap || !! material.transmissionMap || !! material.thicknessMap || !! material.specularIntensityMap || !! material.specularColorMap || !! material.sheenColorMap || !! material.sheenRoughnessMap, - uvsVertexOnly: ! ( !! material.map || !! material.bumpMap || !! material.normalMap || !! material.specularMap || !! material.alphaMap || !! material.emissiveMap || !! material.roughnessMap || !! material.metalnessMap || !! material.clearcoatNormalMap || !! material.iridescenceMap || !! material.iridescenceThicknessMap || material.transmission > 0 || !! material.transmissionMap || !! material.thicknessMap || !! material.specularIntensityMap || !! material.specularColorMap || material.sheen > 0 || !! material.sheenColorMap || !! material.sheenRoughnessMap ) && !! material.displacementMap, - - fog: !! fog, - useFog: material.fog === true, - fogExp2: ( fog && fog.isFogExp2 ), - - flatShading: !! material.flatShading, - - sizeAttenuation: material.sizeAttenuation, - logarithmicDepthBuffer: logarithmicDepthBuffer, - - skinning: object.isSkinnedMesh === true, - - morphTargets: geometry.morphAttributes.position !== undefined, - morphNormals: geometry.morphAttributes.normal !== undefined, - morphColors: geometry.morphAttributes.color !== undefined, - morphTargetsCount: morphTargetsCount, - morphTextureStride: morphTextureStride, - - numDirLights: lights.directional.length, - numPointLights: lights.point.length, - numSpotLights: lights.spot.length, - numSpotLightMaps: lights.spotLightMap.length, - numRectAreaLights: lights.rectArea.length, - numHemiLights: lights.hemi.length, - - numDirLightShadows: lights.directionalShadowMap.length, - numPointLightShadows: lights.pointShadowMap.length, - numSpotLightShadows: lights.spotShadowMap.length, - numSpotLightShadowsWithMaps: lights.numSpotLightShadowsWithMaps, - - numClippingPlanes: clipping.numPlanes, - numClipIntersection: clipping.numIntersection, - - dithering: material.dithering, - - shadowMapEnabled: renderer.shadowMap.enabled && shadows.length > 0, - shadowMapType: renderer.shadowMap.type, - - toneMapping: material.toneMapped ? renderer.toneMapping : NoToneMapping, - useLegacyLights: renderer.useLegacyLights, - - premultipliedAlpha: material.premultipliedAlpha, - - doubleSided: material.side === DoubleSide, - flipSided: material.side === BackSide, - - useDepthPacking: !! material.depthPacking, - depthPacking: material.depthPacking || 0, - - index0AttributeName: material.index0AttributeName, - - extensionDerivatives: material.extensions && material.extensions.derivatives, - extensionFragDepth: material.extensions && material.extensions.fragDepth, - extensionDrawBuffers: material.extensions && material.extensions.drawBuffers, - extensionShaderTextureLOD: material.extensions && material.extensions.shaderTextureLOD, - - rendererExtensionFragDepth: isWebGL2 || extensions.has( 'EXT_frag_depth' ), - rendererExtensionDrawBuffers: isWebGL2 || extensions.has( 'WEBGL_draw_buffers' ), - rendererExtensionShaderTextureLod: isWebGL2 || extensions.has( 'EXT_shader_texture_lod' ), - - customProgramCacheKey: material.customProgramCacheKey() - - }; - - return parameters; - - } - - function getProgramCacheKey( parameters ) { - - const array = []; - - if ( parameters.shaderID ) { - - array.push( parameters.shaderID ); - - } else { - - array.push( parameters.customVertexShaderID ); - array.push( parameters.customFragmentShaderID ); - - } - - if ( parameters.defines !== undefined ) { - - for ( const name in parameters.defines ) { - - array.push( name ); - array.push( parameters.defines[ name ] ); - - } - - } - - if ( parameters.isRawShaderMaterial === false ) { - - getProgramCacheKeyParameters( array, parameters ); - getProgramCacheKeyBooleans( array, parameters ); - array.push( renderer.outputEncoding ); - - } - - array.push( parameters.customProgramCacheKey ); - - return array.join(); - - } - - function getProgramCacheKeyParameters( array, parameters ) { - - array.push( parameters.precision ); - array.push( parameters.outputEncoding ); - array.push( parameters.envMapMode ); - array.push( parameters.envMapCubeUVHeight ); - array.push( parameters.combine ); - array.push( parameters.vertexUvs ); - array.push( parameters.fogExp2 ); - array.push( parameters.sizeAttenuation ); - array.push( parameters.morphTargetsCount ); - array.push( parameters.morphAttributeCount ); - array.push( parameters.numDirLights ); - array.push( parameters.numPointLights ); - array.push( parameters.numSpotLights ); - array.push( parameters.numSpotLightMaps ); - array.push( parameters.numHemiLights ); - array.push( parameters.numRectAreaLights ); - array.push( parameters.numDirLightShadows ); - array.push( parameters.numPointLightShadows ); - array.push( parameters.numSpotLightShadows ); - array.push( parameters.numSpotLightShadowsWithMaps ); - array.push( parameters.shadowMapType ); - array.push( parameters.toneMapping ); - array.push( parameters.numClippingPlanes ); - array.push( parameters.numClipIntersection ); - array.push( parameters.depthPacking ); - - } - - function getProgramCacheKeyBooleans( array, parameters ) { - - _programLayers.disableAll(); - - if ( parameters.isWebGL2 ) - _programLayers.enable( 0 ); - if ( parameters.supportsVertexTextures ) - _programLayers.enable( 1 ); - if ( parameters.instancing ) - _programLayers.enable( 2 ); - if ( parameters.instancingColor ) - _programLayers.enable( 3 ); - if ( parameters.map ) - _programLayers.enable( 4 ); - if ( parameters.matcap ) - _programLayers.enable( 5 ); - if ( parameters.envMap ) - _programLayers.enable( 6 ); - if ( parameters.lightMap ) - _programLayers.enable( 7 ); - if ( parameters.aoMap ) - _programLayers.enable( 8 ); - if ( parameters.emissiveMap ) - _programLayers.enable( 9 ); - if ( parameters.bumpMap ) - _programLayers.enable( 10 ); - if ( parameters.normalMap ) - _programLayers.enable( 11 ); - if ( parameters.objectSpaceNormalMap ) - _programLayers.enable( 12 ); - if ( parameters.tangentSpaceNormalMap ) - _programLayers.enable( 13 ); - if ( parameters.clearcoat ) - _programLayers.enable( 14 ); - if ( parameters.clearcoatMap ) - _programLayers.enable( 15 ); - if ( parameters.clearcoatRoughnessMap ) - _programLayers.enable( 16 ); - if ( parameters.clearcoatNormalMap ) - _programLayers.enable( 17 ); - if ( parameters.iridescence ) - _programLayers.enable( 18 ); - if ( parameters.iridescenceMap ) - _programLayers.enable( 19 ); - if ( parameters.iridescenceThicknessMap ) - _programLayers.enable( 20 ); - if ( parameters.displacementMap ) - _programLayers.enable( 21 ); - if ( parameters.specularMap ) - _programLayers.enable( 22 ); - if ( parameters.roughnessMap ) - _programLayers.enable( 23 ); - if ( parameters.metalnessMap ) - _programLayers.enable( 24 ); - if ( parameters.gradientMap ) - _programLayers.enable( 25 ); - if ( parameters.alphaMap ) - _programLayers.enable( 26 ); - if ( parameters.alphaTest ) - _programLayers.enable( 27 ); - if ( parameters.vertexColors ) - _programLayers.enable( 28 ); - if ( parameters.vertexAlphas ) - _programLayers.enable( 29 ); - if ( parameters.vertexUvs ) - _programLayers.enable( 30 ); - if ( parameters.vertexTangents ) - _programLayers.enable( 31 ); - if ( parameters.uvsVertexOnly ) - _programLayers.enable( 32 ); - - array.push( _programLayers.mask ); - _programLayers.disableAll(); - - if ( parameters.fog ) - _programLayers.enable( 0 ); - if ( parameters.useFog ) - _programLayers.enable( 1 ); - if ( parameters.flatShading ) - _programLayers.enable( 2 ); - if ( parameters.logarithmicDepthBuffer ) - _programLayers.enable( 3 ); - if ( parameters.skinning ) - _programLayers.enable( 4 ); - if ( parameters.morphTargets ) - _programLayers.enable( 5 ); - if ( parameters.morphNormals ) - _programLayers.enable( 6 ); - if ( parameters.morphColors ) - _programLayers.enable( 7 ); - if ( parameters.premultipliedAlpha ) - _programLayers.enable( 8 ); - if ( parameters.shadowMapEnabled ) - _programLayers.enable( 9 ); - if ( parameters.useLegacyLights ) - _programLayers.enable( 10 ); - if ( parameters.doubleSided ) - _programLayers.enable( 11 ); - if ( parameters.flipSided ) - _programLayers.enable( 12 ); - if ( parameters.useDepthPacking ) - _programLayers.enable( 13 ); - if ( parameters.dithering ) - _programLayers.enable( 14 ); - if ( parameters.specularIntensityMap ) - _programLayers.enable( 15 ); - if ( parameters.specularColorMap ) - _programLayers.enable( 16 ); - if ( parameters.transmission ) - _programLayers.enable( 17 ); - if ( parameters.transmissionMap ) - _programLayers.enable( 18 ); - if ( parameters.thicknessMap ) - _programLayers.enable( 19 ); - if ( parameters.sheen ) - _programLayers.enable( 20 ); - if ( parameters.sheenColorMap ) - _programLayers.enable( 21 ); - if ( parameters.sheenRoughnessMap ) - _programLayers.enable( 22 ); - if ( parameters.decodeVideoTexture ) - _programLayers.enable( 23 ); - if ( parameters.opaque ) - _programLayers.enable( 24 ); - - array.push( _programLayers.mask ); - - } - - function getUniforms( material ) { - - const shaderID = shaderIDs[ material.type ]; - let uniforms; - - if ( shaderID ) { - - const shader = ShaderLib[ shaderID ]; - uniforms = UniformsUtils.clone( shader.uniforms ); - - } else { - - uniforms = material.uniforms; - - } - - return uniforms; - - } - - function acquireProgram( parameters, cacheKey ) { - - let program; - - // Check if code has been already compiled - for ( let p = 0, pl = programs.length; p < pl; p ++ ) { - - const preexistingProgram = programs[ p ]; - - if ( preexistingProgram.cacheKey === cacheKey ) { - - program = preexistingProgram; - ++ program.usedTimes; - - break; - - } - - } - - if ( program === undefined ) { - - program = new WebGLProgram( renderer, cacheKey, parameters, bindingStates ); - programs.push( program ); - - } - - return program; - - } - - function releaseProgram( program ) { - - if ( -- program.usedTimes === 0 ) { - - // Remove from unordered set - const i = programs.indexOf( program ); - programs[ i ] = programs[ programs.length - 1 ]; - programs.pop(); - - // Free WebGL resources - program.destroy(); - - } - - } - - function releaseShaderCache( material ) { - - _customShaders.remove( material ); - - } - - function dispose() { - - _customShaders.dispose(); - - } - - return { - getParameters: getParameters, - getProgramCacheKey: getProgramCacheKey, - getUniforms: getUniforms, - acquireProgram: acquireProgram, - releaseProgram: releaseProgram, - releaseShaderCache: releaseShaderCache, - // Exposed for resource monitoring & error feedback via renderer.info: - programs: programs, - dispose: dispose - }; - - } - - function WebGLProperties() { - - let properties = new WeakMap(); - - function get( object ) { - - let map = properties.get( object ); - - if ( map === undefined ) { - - map = {}; - properties.set( object, map ); - - } - - return map; - - } - - function remove( object ) { - - properties.delete( object ); - - } - - function update( object, key, value ) { - - properties.get( object )[ key ] = value; - - } - - function dispose() { - - properties = new WeakMap(); - - } - - return { - get: get, - remove: remove, - update: update, - dispose: dispose - }; - - } - - function painterSortStable( a, b ) { - - if ( a.groupOrder !== b.groupOrder ) { - - return a.groupOrder - b.groupOrder; - - } else if ( a.renderOrder !== b.renderOrder ) { - - return a.renderOrder - b.renderOrder; - - } else if ( a.material.id !== b.material.id ) { - - return a.material.id - b.material.id; - - } else if ( a.z !== b.z ) { - - return a.z - b.z; - - } else { - - return a.id - b.id; - - } - - } - - function reversePainterSortStable( a, b ) { - - if ( a.groupOrder !== b.groupOrder ) { - - return a.groupOrder - b.groupOrder; - - } else if ( a.renderOrder !== b.renderOrder ) { - - return a.renderOrder - b.renderOrder; - - } else if ( a.z !== b.z ) { - - return b.z - a.z; - - } else { - - return a.id - b.id; - - } - - } - - - function WebGLRenderList() { - - const renderItems = []; - let renderItemsIndex = 0; - - const opaque = []; - const transmissive = []; - const transparent = []; - - function init() { - - renderItemsIndex = 0; - - opaque.length = 0; - transmissive.length = 0; - transparent.length = 0; - - } - - function getNextRenderItem( object, geometry, material, groupOrder, z, group ) { - - let renderItem = renderItems[ renderItemsIndex ]; - - if ( renderItem === undefined ) { - - renderItem = { - id: object.id, - object: object, - geometry: geometry, - material: material, - groupOrder: groupOrder, - renderOrder: object.renderOrder, - z: z, - group: group - }; - - renderItems[ renderItemsIndex ] = renderItem; - - } else { - - renderItem.id = object.id; - renderItem.object = object; - renderItem.geometry = geometry; - renderItem.material = material; - renderItem.groupOrder = groupOrder; - renderItem.renderOrder = object.renderOrder; - renderItem.z = z; - renderItem.group = group; - - } - - renderItemsIndex ++; - - return renderItem; - - } - - function push( object, geometry, material, groupOrder, z, group ) { - - const renderItem = getNextRenderItem( object, geometry, material, groupOrder, z, group ); - - if ( material.transmission > 0.0 ) { - - transmissive.push( renderItem ); - - } else if ( material.transparent === true ) { - - transparent.push( renderItem ); - - } else { - - opaque.push( renderItem ); - - } - - } - - function unshift( object, geometry, material, groupOrder, z, group ) { - - const renderItem = getNextRenderItem( object, geometry, material, groupOrder, z, group ); - - if ( material.transmission > 0.0 ) { - - transmissive.unshift( renderItem ); - - } else if ( material.transparent === true ) { - - transparent.unshift( renderItem ); - - } else { - - opaque.unshift( renderItem ); - - } - - } - - function sort( customOpaqueSort, customTransparentSort ) { - - if ( opaque.length > 1 ) opaque.sort( customOpaqueSort || painterSortStable ); - if ( transmissive.length > 1 ) transmissive.sort( customTransparentSort || reversePainterSortStable ); - if ( transparent.length > 1 ) transparent.sort( customTransparentSort || reversePainterSortStable ); - - } - - function finish() { - - // Clear references from inactive renderItems in the list - - for ( let i = renderItemsIndex, il = renderItems.length; i < il; i ++ ) { - - const renderItem = renderItems[ i ]; - - if ( renderItem.id === null ) break; - - renderItem.id = null; - renderItem.object = null; - renderItem.geometry = null; - renderItem.material = null; - renderItem.group = null; - - } - - } - - return { - - opaque: opaque, - transmissive: transmissive, - transparent: transparent, - - init: init, - push: push, - unshift: unshift, - finish: finish, - - sort: sort - }; - - } - - function WebGLRenderLists() { - - let lists = new WeakMap(); - - function get( scene, renderCallDepth ) { - - const listArray = lists.get( scene ); - let list; - - if ( listArray === undefined ) { - - list = new WebGLRenderList(); - lists.set( scene, [ list ] ); - - } else { - - if ( renderCallDepth >= listArray.length ) { - - list = new WebGLRenderList(); - listArray.push( list ); - - } else { - - list = listArray[ renderCallDepth ]; - - } - - } - - return list; - - } - - function dispose() { - - lists = new WeakMap(); - - } - - return { - get: get, - dispose: dispose - }; - - } - - function UniformsCache() { - - const lights = {}; - - return { - - get: function ( light ) { - - if ( lights[ light.id ] !== undefined ) { - - return lights[ light.id ]; - - } - - let uniforms; - - switch ( light.type ) { - - case 'DirectionalLight': - uniforms = { - direction: new Vector3(), - color: new Color() - }; - break; - - case 'SpotLight': - uniforms = { - position: new Vector3(), - direction: new Vector3(), - color: new Color(), - distance: 0, - coneCos: 0, - penumbraCos: 0, - decay: 0 - }; - break; - - case 'PointLight': - uniforms = { - position: new Vector3(), - color: new Color(), - distance: 0, - decay: 0 - }; - break; - - case 'HemisphereLight': - uniforms = { - direction: new Vector3(), - skyColor: new Color(), - groundColor: new Color() - }; - break; - - case 'RectAreaLight': - uniforms = { - color: new Color(), - position: new Vector3(), - halfWidth: new Vector3(), - halfHeight: new Vector3() - }; - break; - - } - - lights[ light.id ] = uniforms; - - return uniforms; - - } - - }; - - } - - function ShadowUniformsCache() { - - const lights = {}; - - return { - - get: function ( light ) { - - if ( lights[ light.id ] !== undefined ) { - - return lights[ light.id ]; - - } - - let uniforms; - - switch ( light.type ) { - - case 'DirectionalLight': - uniforms = { - shadowBias: 0, - shadowNormalBias: 0, - shadowRadius: 1, - shadowMapSize: new Vector2() - }; - break; - - case 'SpotLight': - uniforms = { - shadowBias: 0, - shadowNormalBias: 0, - shadowRadius: 1, - shadowMapSize: new Vector2() - }; - break; - - case 'PointLight': - uniforms = { - shadowBias: 0, - shadowNormalBias: 0, - shadowRadius: 1, - shadowMapSize: new Vector2(), - shadowCameraNear: 1, - shadowCameraFar: 1000 - }; - break; - - // TODO (abelnation): set RectAreaLight shadow uniforms - - } - - lights[ light.id ] = uniforms; - - return uniforms; - - } - - }; - - } - - - - let nextVersion = 0; - - function shadowCastingAndTexturingLightsFirst( lightA, lightB ) { - - return ( lightB.castShadow ? 2 : 0 ) - ( lightA.castShadow ? 2 : 0 ) + ( lightB.map ? 1 : 0 ) - ( lightA.map ? 1 : 0 ); - - } - - function WebGLLights( extensions, capabilities ) { - - const cache = new UniformsCache(); - - const shadowCache = ShadowUniformsCache(); - - const state = { - - version: 0, - - hash: { - directionalLength: - 1, - pointLength: - 1, - spotLength: - 1, - rectAreaLength: - 1, - hemiLength: - 1, - - numDirectionalShadows: - 1, - numPointShadows: - 1, - numSpotShadows: - 1, - numSpotMaps: - 1 - }, - - ambient: [ 0, 0, 0 ], - probe: [], - directional: [], - directionalShadow: [], - directionalShadowMap: [], - directionalShadowMatrix: [], - spot: [], - spotLightMap: [], - spotShadow: [], - spotShadowMap: [], - spotLightMatrix: [], - rectArea: [], - rectAreaLTC1: null, - rectAreaLTC2: null, - point: [], - pointShadow: [], - pointShadowMap: [], - pointShadowMatrix: [], - hemi: [], - numSpotLightShadowsWithMaps: 0 - - }; - - for ( let i = 0; i < 9; i ++ ) state.probe.push( new Vector3() ); - - const vector3 = new Vector3(); - const matrix4 = new Matrix4(); - const matrix42 = new Matrix4(); - - function setup( lights, useLegacyLights ) { - - let r = 0, g = 0, b = 0; - - for ( let i = 0; i < 9; i ++ ) state.probe[ i ].set( 0, 0, 0 ); - - let directionalLength = 0; - let pointLength = 0; - let spotLength = 0; - let rectAreaLength = 0; - let hemiLength = 0; - - let numDirectionalShadows = 0; - let numPointShadows = 0; - let numSpotShadows = 0; - let numSpotMaps = 0; - let numSpotShadowsWithMaps = 0; - - // ordering : [shadow casting + map texturing, map texturing, shadow casting, none ] - lights.sort( shadowCastingAndTexturingLightsFirst ); - - // artist-friendly light intensity scaling factor - const scaleFactor = ( useLegacyLights === true ) ? Math.PI : 1; - - for ( let i = 0, l = lights.length; i < l; i ++ ) { - - const light = lights[ i ]; - - const color = light.color; - const intensity = light.intensity; - const distance = light.distance; - - const shadowMap = ( light.shadow && light.shadow.map ) ? light.shadow.map.texture : null; - - if ( light.isAmbientLight ) { - - r += color.r * intensity * scaleFactor; - g += color.g * intensity * scaleFactor; - b += color.b * intensity * scaleFactor; - - } else if ( light.isLightProbe ) { - - for ( let j = 0; j < 9; j ++ ) { - - state.probe[ j ].addScaledVector( light.sh.coefficients[ j ], intensity ); - - } - - } else if ( light.isDirectionalLight ) { - - const uniforms = cache.get( light ); - - uniforms.color.copy( light.color ).multiplyScalar( light.intensity * scaleFactor ); - - if ( light.castShadow ) { - - const shadow = light.shadow; - - const shadowUniforms = shadowCache.get( light ); - - shadowUniforms.shadowBias = shadow.bias; - shadowUniforms.shadowNormalBias = shadow.normalBias; - shadowUniforms.shadowRadius = shadow.radius; - shadowUniforms.shadowMapSize = shadow.mapSize; - - state.directionalShadow[ directionalLength ] = shadowUniforms; - state.directionalShadowMap[ directionalLength ] = shadowMap; - state.directionalShadowMatrix[ directionalLength ] = light.shadow.matrix; - - numDirectionalShadows ++; - - } - - state.directional[ directionalLength ] = uniforms; - - directionalLength ++; - - } else if ( light.isSpotLight ) { - - const uniforms = cache.get( light ); - - uniforms.position.setFromMatrixPosition( light.matrixWorld ); - - uniforms.color.copy( color ).multiplyScalar( intensity * scaleFactor ); - uniforms.distance = distance; - - uniforms.coneCos = Math.cos( light.angle ); - uniforms.penumbraCos = Math.cos( light.angle * ( 1 - light.penumbra ) ); - uniforms.decay = light.decay; - - state.spot[ spotLength ] = uniforms; - - const shadow = light.shadow; - - if ( light.map ) { - - state.spotLightMap[ numSpotMaps ] = light.map; - numSpotMaps ++; - - // make sure the lightMatrix is up to date - // TODO : do it if required only - shadow.updateMatrices( light ); - - if ( light.castShadow ) numSpotShadowsWithMaps ++; - - } - - state.spotLightMatrix[ spotLength ] = shadow.matrix; - - if ( light.castShadow ) { - - const shadowUniforms = shadowCache.get( light ); - - shadowUniforms.shadowBias = shadow.bias; - shadowUniforms.shadowNormalBias = shadow.normalBias; - shadowUniforms.shadowRadius = shadow.radius; - shadowUniforms.shadowMapSize = shadow.mapSize; - - state.spotShadow[ spotLength ] = shadowUniforms; - state.spotShadowMap[ spotLength ] = shadowMap; - - numSpotShadows ++; - - } - - spotLength ++; - - } else if ( light.isRectAreaLight ) { - - const uniforms = cache.get( light ); - - uniforms.color.copy( color ).multiplyScalar( intensity ); - - uniforms.halfWidth.set( light.width * 0.5, 0.0, 0.0 ); - uniforms.halfHeight.set( 0.0, light.height * 0.5, 0.0 ); - - state.rectArea[ rectAreaLength ] = uniforms; - - rectAreaLength ++; - - } else if ( light.isPointLight ) { - - const uniforms = cache.get( light ); - - uniforms.color.copy( light.color ).multiplyScalar( light.intensity * scaleFactor ); - uniforms.distance = light.distance; - uniforms.decay = light.decay; - - if ( light.castShadow ) { - - const shadow = light.shadow; - - const shadowUniforms = shadowCache.get( light ); - - shadowUniforms.shadowBias = shadow.bias; - shadowUniforms.shadowNormalBias = shadow.normalBias; - shadowUniforms.shadowRadius = shadow.radius; - shadowUniforms.shadowMapSize = shadow.mapSize; - shadowUniforms.shadowCameraNear = shadow.camera.near; - shadowUniforms.shadowCameraFar = shadow.camera.far; - - state.pointShadow[ pointLength ] = shadowUniforms; - state.pointShadowMap[ pointLength ] = shadowMap; - state.pointShadowMatrix[ pointLength ] = light.shadow.matrix; - - numPointShadows ++; - - } - - state.point[ pointLength ] = uniforms; - - pointLength ++; - - } else if ( light.isHemisphereLight ) { - - const uniforms = cache.get( light ); - - uniforms.skyColor.copy( light.color ).multiplyScalar( intensity * scaleFactor ); - uniforms.groundColor.copy( light.groundColor ).multiplyScalar( intensity * scaleFactor ); - - state.hemi[ hemiLength ] = uniforms; - - hemiLength ++; - - } - - } - - if ( rectAreaLength > 0 ) { - - if ( capabilities.isWebGL2 ) { - - // WebGL 2 - - state.rectAreaLTC1 = UniformsLib.LTC_FLOAT_1; - state.rectAreaLTC2 = UniformsLib.LTC_FLOAT_2; - - } else { - - // WebGL 1 - - if ( extensions.has( 'OES_texture_float_linear' ) === true ) { - - state.rectAreaLTC1 = UniformsLib.LTC_FLOAT_1; - state.rectAreaLTC2 = UniformsLib.LTC_FLOAT_2; - - } else if ( extensions.has( 'OES_texture_half_float_linear' ) === true ) { - - state.rectAreaLTC1 = UniformsLib.LTC_HALF_1; - state.rectAreaLTC2 = UniformsLib.LTC_HALF_2; - - } else { - - console.error( 'THREE.WebGLRenderer: Unable to use RectAreaLight. Missing WebGL extensions.' ); - - } - - } - - } - - state.ambient[ 0 ] = r; - state.ambient[ 1 ] = g; - state.ambient[ 2 ] = b; - - const hash = state.hash; - - if ( hash.directionalLength !== directionalLength || - hash.pointLength !== pointLength || - hash.spotLength !== spotLength || - hash.rectAreaLength !== rectAreaLength || - hash.hemiLength !== hemiLength || - hash.numDirectionalShadows !== numDirectionalShadows || - hash.numPointShadows !== numPointShadows || - hash.numSpotShadows !== numSpotShadows || - hash.numSpotMaps !== numSpotMaps ) { - - state.directional.length = directionalLength; - state.spot.length = spotLength; - state.rectArea.length = rectAreaLength; - state.point.length = pointLength; - state.hemi.length = hemiLength; - - state.directionalShadow.length = numDirectionalShadows; - state.directionalShadowMap.length = numDirectionalShadows; - state.pointShadow.length = numPointShadows; - state.pointShadowMap.length = numPointShadows; - state.spotShadow.length = numSpotShadows; - state.spotShadowMap.length = numSpotShadows; - state.directionalShadowMatrix.length = numDirectionalShadows; - state.pointShadowMatrix.length = numPointShadows; - state.spotLightMatrix.length = numSpotShadows + numSpotMaps - numSpotShadowsWithMaps; - state.spotLightMap.length = numSpotMaps; - state.numSpotLightShadowsWithMaps = numSpotShadowsWithMaps; - - hash.directionalLength = directionalLength; - hash.pointLength = pointLength; - hash.spotLength = spotLength; - hash.rectAreaLength = rectAreaLength; - hash.hemiLength = hemiLength; - - hash.numDirectionalShadows = numDirectionalShadows; - hash.numPointShadows = numPointShadows; - hash.numSpotShadows = numSpotShadows; - hash.numSpotMaps = numSpotMaps; - - state.version = nextVersion ++; - - } - - } - - function setupView( lights, camera ) { - - let directionalLength = 0; - let pointLength = 0; - let spotLength = 0; - let rectAreaLength = 0; - let hemiLength = 0; - - const viewMatrix = camera.matrixWorldInverse; - - for ( let i = 0, l = lights.length; i < l; i ++ ) { - - const light = lights[ i ]; - - if ( light.isDirectionalLight ) { - - const uniforms = state.directional[ directionalLength ]; - - uniforms.direction.setFromMatrixPosition( light.matrixWorld ); - vector3.setFromMatrixPosition( light.target.matrixWorld ); - uniforms.direction.sub( vector3 ); - uniforms.direction.transformDirection( viewMatrix ); - - directionalLength ++; - - } else if ( light.isSpotLight ) { - - const uniforms = state.spot[ spotLength ]; - - uniforms.position.setFromMatrixPosition( light.matrixWorld ); - uniforms.position.applyMatrix4( viewMatrix ); - - uniforms.direction.setFromMatrixPosition( light.matrixWorld ); - vector3.setFromMatrixPosition( light.target.matrixWorld ); - uniforms.direction.sub( vector3 ); - uniforms.direction.transformDirection( viewMatrix ); - - spotLength ++; - - } else if ( light.isRectAreaLight ) { - - const uniforms = state.rectArea[ rectAreaLength ]; - - uniforms.position.setFromMatrixPosition( light.matrixWorld ); - uniforms.position.applyMatrix4( viewMatrix ); - - // extract local rotation of light to derive width/height half vectors - matrix42.identity(); - matrix4.copy( light.matrixWorld ); - matrix4.premultiply( viewMatrix ); - matrix42.extractRotation( matrix4 ); - - uniforms.halfWidth.set( light.width * 0.5, 0.0, 0.0 ); - uniforms.halfHeight.set( 0.0, light.height * 0.5, 0.0 ); - - uniforms.halfWidth.applyMatrix4( matrix42 ); - uniforms.halfHeight.applyMatrix4( matrix42 ); - - rectAreaLength ++; - - } else if ( light.isPointLight ) { - - const uniforms = state.point[ pointLength ]; - - uniforms.position.setFromMatrixPosition( light.matrixWorld ); - uniforms.position.applyMatrix4( viewMatrix ); - - pointLength ++; - - } else if ( light.isHemisphereLight ) { - - const uniforms = state.hemi[ hemiLength ]; - - uniforms.direction.setFromMatrixPosition( light.matrixWorld ); - uniforms.direction.transformDirection( viewMatrix ); - - hemiLength ++; - - } - - } - - } - - return { - setup: setup, - setupView: setupView, - state: state - }; - - } - - function WebGLRenderState( extensions, capabilities ) { - - const lights = new WebGLLights( extensions, capabilities ); - - const lightsArray = []; - const shadowsArray = []; - - function init() { - - lightsArray.length = 0; - shadowsArray.length = 0; - - } - - function pushLight( light ) { - - lightsArray.push( light ); - - } - - function pushShadow( shadowLight ) { - - shadowsArray.push( shadowLight ); - - } - - function setupLights( useLegacyLights ) { - - lights.setup( lightsArray, useLegacyLights ); - - } - - function setupLightsView( camera ) { - - lights.setupView( lightsArray, camera ); - - } - - const state = { - lightsArray: lightsArray, - shadowsArray: shadowsArray, - - lights: lights - }; - - return { - init: init, - state: state, - setupLights: setupLights, - setupLightsView: setupLightsView, - - pushLight: pushLight, - pushShadow: pushShadow - }; - - } - - function WebGLRenderStates( extensions, capabilities ) { - - let renderStates = new WeakMap(); - - function get( scene, renderCallDepth = 0 ) { - - const renderStateArray = renderStates.get( scene ); - let renderState; - - if ( renderStateArray === undefined ) { - - renderState = new WebGLRenderState( extensions, capabilities ); - renderStates.set( scene, [ renderState ] ); - - } else { - - if ( renderCallDepth >= renderStateArray.length ) { - - renderState = new WebGLRenderState( extensions, capabilities ); - renderStateArray.push( renderState ); - - } else { - - renderState = renderStateArray[ renderCallDepth ]; - - } - - } - - return renderState; - - } - - function dispose() { - - renderStates = new WeakMap(); - - } - - return { - get: get, - dispose: dispose - }; - - } - - class MeshDepthMaterial extends Material { - - constructor( parameters ) { - - super(); - - this.isMeshDepthMaterial = true; - - this.type = 'MeshDepthMaterial'; - - this.depthPacking = BasicDepthPacking; - - this.map = null; - - this.alphaMap = null; - - this.displacementMap = null; - this.displacementScale = 1; - this.displacementBias = 0; - - this.wireframe = false; - this.wireframeLinewidth = 1; - - this.setValues( parameters ); - - } - - copy( source ) { - - super.copy( source ); - - this.depthPacking = source.depthPacking; - - this.map = source.map; - - this.alphaMap = source.alphaMap; - - this.displacementMap = source.displacementMap; - this.displacementScale = source.displacementScale; - this.displacementBias = source.displacementBias; - - this.wireframe = source.wireframe; - this.wireframeLinewidth = source.wireframeLinewidth; - - return this; - - } - - } - - class MeshDistanceMaterial extends Material { - - constructor( parameters ) { - - super(); - - this.isMeshDistanceMaterial = true; - - this.type = 'MeshDistanceMaterial'; - - this.referencePosition = new Vector3(); - this.nearDistance = 1; - this.farDistance = 1000; - - this.map = null; - - this.alphaMap = null; - - this.displacementMap = null; - this.displacementScale = 1; - this.displacementBias = 0; - - this.setValues( parameters ); - - } - - copy( source ) { - - super.copy( source ); - - this.referencePosition.copy( source.referencePosition ); - this.nearDistance = source.nearDistance; - this.farDistance = source.farDistance; - - this.map = source.map; - - this.alphaMap = source.alphaMap; - - this.displacementMap = source.displacementMap; - this.displacementScale = source.displacementScale; - this.displacementBias = source.displacementBias; - - return this; - - } - - } - - const vertex = "void main() {\n\tgl_Position = vec4( position, 1.0 );\n}"; - - const fragment = "uniform sampler2D shadow_pass;\nuniform vec2 resolution;\nuniform float radius;\n#include \nvoid main() {\n\tconst float samples = float( VSM_SAMPLES );\n\tfloat mean = 0.0;\n\tfloat squared_mean = 0.0;\n\tfloat uvStride = samples <= 1.0 ? 0.0 : 2.0 / ( samples - 1.0 );\n\tfloat uvStart = samples <= 1.0 ? 0.0 : - 1.0;\n\tfor ( float i = 0.0; i < samples; i ++ ) {\n\t\tfloat uvOffset = uvStart + i * uvStride;\n\t\t#ifdef HORIZONTAL_PASS\n\t\t\tvec2 distribution = unpackRGBATo2Half( texture2D( shadow_pass, ( gl_FragCoord.xy + vec2( uvOffset, 0.0 ) * radius ) / resolution ) );\n\t\t\tmean += distribution.x;\n\t\t\tsquared_mean += distribution.y * distribution.y + distribution.x * distribution.x;\n\t\t#else\n\t\t\tfloat depth = unpackRGBAToDepth( texture2D( shadow_pass, ( gl_FragCoord.xy + vec2( 0.0, uvOffset ) * radius ) / resolution ) );\n\t\t\tmean += depth;\n\t\t\tsquared_mean += depth * depth;\n\t\t#endif\n\t}\n\tmean = mean / samples;\n\tsquared_mean = squared_mean / samples;\n\tfloat std_dev = sqrt( squared_mean - mean * mean );\n\tgl_FragColor = pack2HalfToRGBA( vec2( mean, std_dev ) );\n}"; - - function WebGLShadowMap( _renderer, _objects, _capabilities ) { - - let _frustum = new Frustum(); - - const _shadowMapSize = new Vector2(), - _viewportSize = new Vector2(), - - _viewport = new Vector4(), - - _depthMaterial = new MeshDepthMaterial( { depthPacking: RGBADepthPacking } ), - _distanceMaterial = new MeshDistanceMaterial(), - - _materialCache = {}, - - _maxTextureSize = _capabilities.maxTextureSize; - - const shadowSide = { [ FrontSide ]: BackSide, [ BackSide ]: FrontSide, [ DoubleSide ]: DoubleSide }; - - const shadowMaterialVertical = new ShaderMaterial( { - defines: { - VSM_SAMPLES: 8 - }, - uniforms: { - shadow_pass: { value: null }, - resolution: { value: new Vector2() }, - radius: { value: 4.0 } - }, - - vertexShader: vertex, - fragmentShader: fragment - - } ); - - const shadowMaterialHorizontal = shadowMaterialVertical.clone(); - shadowMaterialHorizontal.defines.HORIZONTAL_PASS = 1; - - const fullScreenTri = new BufferGeometry(); - fullScreenTri.setAttribute( - 'position', - new BufferAttribute( - new Float32Array( [ - 1, - 1, 0.5, 3, - 1, 0.5, - 1, 3, 0.5 ] ), - 3 - ) - ); - - const fullScreenMesh = new Mesh( fullScreenTri, shadowMaterialVertical ); - - const scope = this; - - this.enabled = false; - - this.autoUpdate = true; - this.needsUpdate = false; - - this.type = PCFShadowMap; - - this.render = function ( lights, scene, camera ) { - - if ( scope.enabled === false ) return; - if ( scope.autoUpdate === false && scope.needsUpdate === false ) return; - - if ( lights.length === 0 ) return; - - const currentRenderTarget = _renderer.getRenderTarget(); - const activeCubeFace = _renderer.getActiveCubeFace(); - const activeMipmapLevel = _renderer.getActiveMipmapLevel(); - - const _state = _renderer.state; - - // Set GL state for depth map. - _state.setBlending( NoBlending ); - _state.buffers.color.setClear( 1, 1, 1, 1 ); - _state.buffers.depth.setTest( true ); - _state.setScissorTest( false ); - - // render depth map - - for ( let i = 0, il = lights.length; i < il; i ++ ) { - - const light = lights[ i ]; - const shadow = light.shadow; - - if ( shadow === undefined ) { - - console.warn( 'THREE.WebGLShadowMap:', light, 'has no shadow.' ); - continue; - - } - - if ( shadow.autoUpdate === false && shadow.needsUpdate === false ) continue; - - _shadowMapSize.copy( shadow.mapSize ); - - const shadowFrameExtents = shadow.getFrameExtents(); - - _shadowMapSize.multiply( shadowFrameExtents ); - - _viewportSize.copy( shadow.mapSize ); - - if ( _shadowMapSize.x > _maxTextureSize || _shadowMapSize.y > _maxTextureSize ) { - - if ( _shadowMapSize.x > _maxTextureSize ) { - - _viewportSize.x = Math.floor( _maxTextureSize / shadowFrameExtents.x ); - _shadowMapSize.x = _viewportSize.x * shadowFrameExtents.x; - shadow.mapSize.x = _viewportSize.x; - - } - - if ( _shadowMapSize.y > _maxTextureSize ) { - - _viewportSize.y = Math.floor( _maxTextureSize / shadowFrameExtents.y ); - _shadowMapSize.y = _viewportSize.y * shadowFrameExtents.y; - shadow.mapSize.y = _viewportSize.y; - - } - - } - - if ( shadow.map === null ) { - - const pars = ( this.type !== VSMShadowMap ) ? { minFilter: NearestFilter, magFilter: NearestFilter } : {}; - - shadow.map = new WebGLRenderTarget( _shadowMapSize.x, _shadowMapSize.y, pars ); - shadow.map.texture.name = light.name + '.shadowMap'; - - shadow.camera.updateProjectionMatrix(); - - } - - _renderer.setRenderTarget( shadow.map ); - _renderer.clear(); - - const viewportCount = shadow.getViewportCount(); - - for ( let vp = 0; vp < viewportCount; vp ++ ) { - - const viewport = shadow.getViewport( vp ); - - _viewport.set( - _viewportSize.x * viewport.x, - _viewportSize.y * viewport.y, - _viewportSize.x * viewport.z, - _viewportSize.y * viewport.w - ); - - _state.viewport( _viewport ); - - shadow.updateMatrices( light, vp ); - - _frustum = shadow.getFrustum(); - - renderObject( scene, camera, shadow.camera, light, this.type ); - - } - - // do blur pass for VSM - - if ( shadow.isPointLightShadow !== true && this.type === VSMShadowMap ) { - - VSMPass( shadow, camera ); - - } - - shadow.needsUpdate = false; - - } - - scope.needsUpdate = false; - - _renderer.setRenderTarget( currentRenderTarget, activeCubeFace, activeMipmapLevel ); - - }; - - function VSMPass( shadow, camera ) { - - const geometry = _objects.update( fullScreenMesh ); - - if ( shadowMaterialVertical.defines.VSM_SAMPLES !== shadow.blurSamples ) { - - shadowMaterialVertical.defines.VSM_SAMPLES = shadow.blurSamples; - shadowMaterialHorizontal.defines.VSM_SAMPLES = shadow.blurSamples; - - shadowMaterialVertical.needsUpdate = true; - shadowMaterialHorizontal.needsUpdate = true; - - } - - if ( shadow.mapPass === null ) { - - shadow.mapPass = new WebGLRenderTarget( _shadowMapSize.x, _shadowMapSize.y ); - - } - - // vertical pass - - shadowMaterialVertical.uniforms.shadow_pass.value = shadow.map.texture; - shadowMaterialVertical.uniforms.resolution.value = shadow.mapSize; - shadowMaterialVertical.uniforms.radius.value = shadow.radius; - _renderer.setRenderTarget( shadow.mapPass ); - _renderer.clear(); - _renderer.renderBufferDirect( camera, null, geometry, shadowMaterialVertical, fullScreenMesh, null ); - - // horizontal pass - - shadowMaterialHorizontal.uniforms.shadow_pass.value = shadow.mapPass.texture; - shadowMaterialHorizontal.uniforms.resolution.value = shadow.mapSize; - shadowMaterialHorizontal.uniforms.radius.value = shadow.radius; - _renderer.setRenderTarget( shadow.map ); - _renderer.clear(); - _renderer.renderBufferDirect( camera, null, geometry, shadowMaterialHorizontal, fullScreenMesh, null ); - - } - - function getDepthMaterial( object, material, light, shadowCameraNear, shadowCameraFar, type ) { - - let result = null; - - const customMaterial = ( light.isPointLight === true ) ? object.customDistanceMaterial : object.customDepthMaterial; - - if ( customMaterial !== undefined ) { - - result = customMaterial; - - } else { - - result = ( light.isPointLight === true ) ? _distanceMaterial : _depthMaterial; - - if ( ( _renderer.localClippingEnabled && material.clipShadows === true && Array.isArray( material.clippingPlanes ) && material.clippingPlanes.length !== 0 ) || - ( material.displacementMap && material.displacementScale !== 0 ) || - ( material.alphaMap && material.alphaTest > 0 ) || - ( material.map && material.alphaTest > 0 ) ) { - - // in this case we need a unique material instance reflecting the - // appropriate state - - const keyA = result.uuid, keyB = material.uuid; - - let materialsForVariant = _materialCache[ keyA ]; - - if ( materialsForVariant === undefined ) { - - materialsForVariant = {}; - _materialCache[ keyA ] = materialsForVariant; - - } - - let cachedMaterial = materialsForVariant[ keyB ]; - - if ( cachedMaterial === undefined ) { - - cachedMaterial = result.clone(); - materialsForVariant[ keyB ] = cachedMaterial; - - } - - result = cachedMaterial; - - } - - } - - result.visible = material.visible; - result.wireframe = material.wireframe; - - if ( type === VSMShadowMap ) { - - result.side = ( material.shadowSide !== null ) ? material.shadowSide : material.side; - - } else { - - result.side = ( material.shadowSide !== null ) ? material.shadowSide : shadowSide[ material.side ]; - - } - - result.alphaMap = material.alphaMap; - result.alphaTest = material.alphaTest; - result.map = material.map; - - result.clipShadows = material.clipShadows; - result.clippingPlanes = material.clippingPlanes; - result.clipIntersection = material.clipIntersection; - - result.displacementMap = material.displacementMap; - result.displacementScale = material.displacementScale; - result.displacementBias = material.displacementBias; - - result.wireframeLinewidth = material.wireframeLinewidth; - result.linewidth = material.linewidth; - - if ( light.isPointLight === true && result.isMeshDistanceMaterial === true ) { - - result.referencePosition.setFromMatrixPosition( light.matrixWorld ); - result.nearDistance = shadowCameraNear; - result.farDistance = shadowCameraFar; - - } - - return result; - - } - - function renderObject( object, camera, shadowCamera, light, type ) { - - if ( object.visible === false ) return; - - const visible = object.layers.test( camera.layers ); - - if ( visible && ( object.isMesh || object.isLine || object.isPoints ) ) { - - if ( ( object.castShadow || ( object.receiveShadow && type === VSMShadowMap ) ) && ( ! object.frustumCulled || _frustum.intersectsObject( object ) ) ) { - - object.modelViewMatrix.multiplyMatrices( shadowCamera.matrixWorldInverse, object.matrixWorld ); - - const geometry = _objects.update( object ); - const material = object.material; - - if ( Array.isArray( material ) ) { - - const groups = geometry.groups; - - for ( let k = 0, kl = groups.length; k < kl; k ++ ) { - - const group = groups[ k ]; - const groupMaterial = material[ group.materialIndex ]; - - if ( groupMaterial && groupMaterial.visible ) { - - const depthMaterial = getDepthMaterial( object, groupMaterial, light, shadowCamera.near, shadowCamera.far, type ); - - _renderer.renderBufferDirect( shadowCamera, null, geometry, depthMaterial, object, group ); - - } - - } - - } else if ( material.visible ) { - - const depthMaterial = getDepthMaterial( object, material, light, shadowCamera.near, shadowCamera.far, type ); - - _renderer.renderBufferDirect( shadowCamera, null, geometry, depthMaterial, object, null ); - - } - - } - - } - - const children = object.children; - - for ( let i = 0, l = children.length; i < l; i ++ ) { - - renderObject( children[ i ], camera, shadowCamera, light, type ); - - } - - } - - } - - function WebGLState( gl, extensions, capabilities ) { - - const isWebGL2 = capabilities.isWebGL2; - - function ColorBuffer() { - - let locked = false; - - const color = new Vector4(); - let currentColorMask = null; - const currentColorClear = new Vector4( 0, 0, 0, 0 ); - - return { - - setMask: function ( colorMask ) { - - if ( currentColorMask !== colorMask && ! locked ) { - - gl.colorMask( colorMask, colorMask, colorMask, colorMask ); - currentColorMask = colorMask; - - } - - }, - - setLocked: function ( lock ) { - - locked = lock; - - }, - - setClear: function ( r, g, b, a, premultipliedAlpha ) { - - if ( premultipliedAlpha === true ) { - - r *= a; g *= a; b *= a; - - } - - color.set( r, g, b, a ); - - if ( currentColorClear.equals( color ) === false ) { - - gl.clearColor( r, g, b, a ); - currentColorClear.copy( color ); - - } - - }, - - reset: function () { - - locked = false; - - currentColorMask = null; - currentColorClear.set( - 1, 0, 0, 0 ); // set to invalid state - - } - - }; - - } - - function DepthBuffer() { - - let locked = false; - - let currentDepthMask = null; - let currentDepthFunc = null; - let currentDepthClear = null; - - return { - - setTest: function ( depthTest ) { - - if ( depthTest ) { - - enable( gl.DEPTH_TEST ); - - } else { - - disable( gl.DEPTH_TEST ); - - } - - }, - - setMask: function ( depthMask ) { - - if ( currentDepthMask !== depthMask && ! locked ) { - - gl.depthMask( depthMask ); - currentDepthMask = depthMask; - - } - - }, - - setFunc: function ( depthFunc ) { - - if ( currentDepthFunc !== depthFunc ) { - - switch ( depthFunc ) { - - case NeverDepth: - - gl.depthFunc( gl.NEVER ); - break; - - case AlwaysDepth: - - gl.depthFunc( gl.ALWAYS ); - break; - - case LessDepth: - - gl.depthFunc( gl.LESS ); - break; - - case LessEqualDepth: - - gl.depthFunc( gl.LEQUAL ); - break; - - case EqualDepth: - - gl.depthFunc( gl.EQUAL ); - break; - - case GreaterEqualDepth: - - gl.depthFunc( gl.GEQUAL ); - break; - - case GreaterDepth: - - gl.depthFunc( gl.GREATER ); - break; - - case NotEqualDepth: - - gl.depthFunc( gl.NOTEQUAL ); - break; - - default: - - gl.depthFunc( gl.LEQUAL ); - - } - - currentDepthFunc = depthFunc; - - } - - }, - - setLocked: function ( lock ) { - - locked = lock; - - }, - - setClear: function ( depth ) { - - if ( currentDepthClear !== depth ) { - - gl.clearDepth( depth ); - currentDepthClear = depth; - - } - - }, - - reset: function () { - - locked = false; - - currentDepthMask = null; - currentDepthFunc = null; - currentDepthClear = null; - - } - - }; - - } - - function StencilBuffer() { - - let locked = false; - - let currentStencilMask = null; - let currentStencilFunc = null; - let currentStencilRef = null; - let currentStencilFuncMask = null; - let currentStencilFail = null; - let currentStencilZFail = null; - let currentStencilZPass = null; - let currentStencilClear = null; - - return { - - setTest: function ( stencilTest ) { - - if ( ! locked ) { - - if ( stencilTest ) { - - enable( gl.STENCIL_TEST ); - - } else { - - disable( gl.STENCIL_TEST ); - - } - - } - - }, - - setMask: function ( stencilMask ) { - - if ( currentStencilMask !== stencilMask && ! locked ) { - - gl.stencilMask( stencilMask ); - currentStencilMask = stencilMask; - - } - - }, - - setFunc: function ( stencilFunc, stencilRef, stencilMask ) { - - if ( currentStencilFunc !== stencilFunc || - currentStencilRef !== stencilRef || - currentStencilFuncMask !== stencilMask ) { - - gl.stencilFunc( stencilFunc, stencilRef, stencilMask ); - - currentStencilFunc = stencilFunc; - currentStencilRef = stencilRef; - currentStencilFuncMask = stencilMask; - - } - - }, - - setOp: function ( stencilFail, stencilZFail, stencilZPass ) { - - if ( currentStencilFail !== stencilFail || - currentStencilZFail !== stencilZFail || - currentStencilZPass !== stencilZPass ) { - - gl.stencilOp( stencilFail, stencilZFail, stencilZPass ); - - currentStencilFail = stencilFail; - currentStencilZFail = stencilZFail; - currentStencilZPass = stencilZPass; - - } - - }, - - setLocked: function ( lock ) { - - locked = lock; - - }, - - setClear: function ( stencil ) { - - if ( currentStencilClear !== stencil ) { - - gl.clearStencil( stencil ); - currentStencilClear = stencil; - - } - - }, - - reset: function () { - - locked = false; - - currentStencilMask = null; - currentStencilFunc = null; - currentStencilRef = null; - currentStencilFuncMask = null; - currentStencilFail = null; - currentStencilZFail = null; - currentStencilZPass = null; - currentStencilClear = null; - - } - - }; - - } - - // - - const colorBuffer = new ColorBuffer(); - const depthBuffer = new DepthBuffer(); - const stencilBuffer = new StencilBuffer(); - - const uboBindings = new WeakMap(); - const uboProgramMap = new WeakMap(); - - let enabledCapabilities = {}; - - let currentBoundFramebuffers = {}; - let currentDrawbuffers = new WeakMap(); - let defaultDrawbuffers = []; - - let currentProgram = null; - - let currentBlendingEnabled = false; - let currentBlending = null; - let currentBlendEquation = null; - let currentBlendSrc = null; - let currentBlendDst = null; - let currentBlendEquationAlpha = null; - let currentBlendSrcAlpha = null; - let currentBlendDstAlpha = null; - let currentPremultipledAlpha = false; - - let currentFlipSided = null; - let currentCullFace = null; - - let currentLineWidth = null; - - let currentPolygonOffsetFactor = null; - let currentPolygonOffsetUnits = null; - - const maxTextures = gl.getParameter( gl.MAX_COMBINED_TEXTURE_IMAGE_UNITS ); - - let lineWidthAvailable = false; - let version = 0; - const glVersion = gl.getParameter( gl.VERSION ); - - if ( glVersion.indexOf( 'WebGL' ) !== - 1 ) { - - version = parseFloat( /^WebGL (\d)/.exec( glVersion )[ 1 ] ); - lineWidthAvailable = ( version >= 1.0 ); - - } else if ( glVersion.indexOf( 'OpenGL ES' ) !== - 1 ) { - - version = parseFloat( /^OpenGL ES (\d)/.exec( glVersion )[ 1 ] ); - lineWidthAvailable = ( version >= 2.0 ); - - } - - let currentTextureSlot = null; - let currentBoundTextures = {}; - - const scissorParam = gl.getParameter( gl.SCISSOR_BOX ); - const viewportParam = gl.getParameter( gl.VIEWPORT ); - - const currentScissor = new Vector4().fromArray( scissorParam ); - const currentViewport = new Vector4().fromArray( viewportParam ); - - function createTexture( type, target, count ) { - - const data = new Uint8Array( 4 ); // 4 is required to match default unpack alignment of 4. - const texture = gl.createTexture(); - - gl.bindTexture( type, texture ); - gl.texParameteri( type, gl.TEXTURE_MIN_FILTER, gl.NEAREST ); - gl.texParameteri( type, gl.TEXTURE_MAG_FILTER, gl.NEAREST ); - - for ( let i = 0; i < count; i ++ ) { - - gl.texImage2D( target + i, 0, gl.RGBA, 1, 1, 0, gl.RGBA, gl.UNSIGNED_BYTE, data ); - - } - - return texture; - - } - - const emptyTextures = {}; - emptyTextures[ gl.TEXTURE_2D ] = createTexture( gl.TEXTURE_2D, gl.TEXTURE_2D, 1 ); - emptyTextures[ gl.TEXTURE_CUBE_MAP ] = createTexture( gl.TEXTURE_CUBE_MAP, gl.TEXTURE_CUBE_MAP_POSITIVE_X, 6 ); - - // init - - colorBuffer.setClear( 0, 0, 0, 1 ); - depthBuffer.setClear( 1 ); - stencilBuffer.setClear( 0 ); - - enable( gl.DEPTH_TEST ); - depthBuffer.setFunc( LessEqualDepth ); - - setFlipSided( false ); - setCullFace( CullFaceBack ); - enable( gl.CULL_FACE ); - - setBlending( NoBlending ); - - // - - function enable( id ) { - - if ( enabledCapabilities[ id ] !== true ) { - - gl.enable( id ); - enabledCapabilities[ id ] = true; - - } - - } - - function disable( id ) { - - if ( enabledCapabilities[ id ] !== false ) { - - gl.disable( id ); - enabledCapabilities[ id ] = false; - - } - - } - - function bindFramebuffer( target, framebuffer ) { - - if ( currentBoundFramebuffers[ target ] !== framebuffer ) { - - gl.bindFramebuffer( target, framebuffer ); - - currentBoundFramebuffers[ target ] = framebuffer; - - if ( isWebGL2 ) { - - // gl.DRAW_FRAMEBUFFER is equivalent to gl.FRAMEBUFFER - - if ( target === gl.DRAW_FRAMEBUFFER ) { - - currentBoundFramebuffers[ gl.FRAMEBUFFER ] = framebuffer; - - } - - if ( target === gl.FRAMEBUFFER ) { - - currentBoundFramebuffers[ gl.DRAW_FRAMEBUFFER ] = framebuffer; - - } - - } - - return true; - - } - - return false; - - } - - function drawBuffers( renderTarget, framebuffer ) { - - let drawBuffers = defaultDrawbuffers; - - let needsUpdate = false; - - if ( renderTarget ) { - - drawBuffers = currentDrawbuffers.get( framebuffer ); - - if ( drawBuffers === undefined ) { - - drawBuffers = []; - currentDrawbuffers.set( framebuffer, drawBuffers ); - - } - - if ( renderTarget.isWebGLMultipleRenderTargets ) { - - const textures = renderTarget.texture; - - if ( drawBuffers.length !== textures.length || drawBuffers[ 0 ] !== gl.COLOR_ATTACHMENT0 ) { - - for ( let i = 0, il = textures.length; i < il; i ++ ) { - - drawBuffers[ i ] = gl.COLOR_ATTACHMENT0 + i; - - } - - drawBuffers.length = textures.length; - - needsUpdate = true; - - } - - } else { - - if ( drawBuffers[ 0 ] !== gl.COLOR_ATTACHMENT0 ) { - - drawBuffers[ 0 ] = gl.COLOR_ATTACHMENT0; - - needsUpdate = true; - - } - - } - - } else { - - if ( drawBuffers[ 0 ] !== gl.BACK ) { - - drawBuffers[ 0 ] = gl.BACK; - - needsUpdate = true; - - } - - } - - if ( needsUpdate ) { - - if ( capabilities.isWebGL2 ) { - - gl.drawBuffers( drawBuffers ); - - } else { - - extensions.get( 'WEBGL_draw_buffers' ).drawBuffersWEBGL( drawBuffers ); - - } - - } - - - } - - function useProgram( program ) { - - if ( currentProgram !== program ) { - - gl.useProgram( program ); - - currentProgram = program; - - return true; - - } - - return false; - - } - - const equationToGL = { - [ AddEquation ]: gl.FUNC_ADD, - [ SubtractEquation ]: gl.FUNC_SUBTRACT, - [ ReverseSubtractEquation ]: gl.FUNC_REVERSE_SUBTRACT - }; - - if ( isWebGL2 ) { - - equationToGL[ MinEquation ] = gl.MIN; - equationToGL[ MaxEquation ] = gl.MAX; - - } else { - - const extension = extensions.get( 'EXT_blend_minmax' ); - - if ( extension !== null ) { - - equationToGL[ MinEquation ] = extension.MIN_EXT; - equationToGL[ MaxEquation ] = extension.MAX_EXT; - - } - - } - - const factorToGL = { - [ ZeroFactor ]: gl.ZERO, - [ OneFactor ]: gl.ONE, - [ SrcColorFactor ]: gl.SRC_COLOR, - [ SrcAlphaFactor ]: gl.SRC_ALPHA, - [ SrcAlphaSaturateFactor ]: gl.SRC_ALPHA_SATURATE, - [ DstColorFactor ]: gl.DST_COLOR, - [ DstAlphaFactor ]: gl.DST_ALPHA, - [ OneMinusSrcColorFactor ]: gl.ONE_MINUS_SRC_COLOR, - [ OneMinusSrcAlphaFactor ]: gl.ONE_MINUS_SRC_ALPHA, - [ OneMinusDstColorFactor ]: gl.ONE_MINUS_DST_COLOR, - [ OneMinusDstAlphaFactor ]: gl.ONE_MINUS_DST_ALPHA - }; - - function setBlending( blending, blendEquation, blendSrc, blendDst, blendEquationAlpha, blendSrcAlpha, blendDstAlpha, premultipliedAlpha ) { - - if ( blending === NoBlending ) { - - if ( currentBlendingEnabled === true ) { - - disable( gl.BLEND ); - currentBlendingEnabled = false; - - } - - return; - - } - - if ( currentBlendingEnabled === false ) { - - enable( gl.BLEND ); - currentBlendingEnabled = true; - - } - - if ( blending !== CustomBlending ) { - - if ( blending !== currentBlending || premultipliedAlpha !== currentPremultipledAlpha ) { - - if ( currentBlendEquation !== AddEquation || currentBlendEquationAlpha !== AddEquation ) { - - gl.blendEquation( gl.FUNC_ADD ); - - currentBlendEquation = AddEquation; - currentBlendEquationAlpha = AddEquation; - - } - - if ( premultipliedAlpha ) { - - switch ( blending ) { - - case NormalBlending: - gl.blendFuncSeparate( gl.ONE, gl.ONE_MINUS_SRC_ALPHA, gl.ONE, gl.ONE_MINUS_SRC_ALPHA ); - break; - - case AdditiveBlending: - gl.blendFunc( gl.ONE, gl.ONE ); - break; - - case SubtractiveBlending: - gl.blendFuncSeparate( gl.ZERO, gl.ONE_MINUS_SRC_COLOR, gl.ZERO, gl.ONE ); - break; - - case MultiplyBlending: - gl.blendFuncSeparate( gl.ZERO, gl.SRC_COLOR, gl.ZERO, gl.SRC_ALPHA ); - break; - - default: - console.error( 'THREE.WebGLState: Invalid blending: ', blending ); - break; - - } - - } else { - - switch ( blending ) { - - case NormalBlending: - gl.blendFuncSeparate( gl.SRC_ALPHA, gl.ONE_MINUS_SRC_ALPHA, gl.ONE, gl.ONE_MINUS_SRC_ALPHA ); - break; - - case AdditiveBlending: - gl.blendFunc( gl.SRC_ALPHA, gl.ONE ); - break; - - case SubtractiveBlending: - gl.blendFuncSeparate( gl.ZERO, gl.ONE_MINUS_SRC_COLOR, gl.ZERO, gl.ONE ); - break; - - case MultiplyBlending: - gl.blendFunc( gl.ZERO, gl.SRC_COLOR ); - break; - - default: - console.error( 'THREE.WebGLState: Invalid blending: ', blending ); - break; - - } - - } - - currentBlendSrc = null; - currentBlendDst = null; - currentBlendSrcAlpha = null; - currentBlendDstAlpha = null; - - currentBlending = blending; - currentPremultipledAlpha = premultipliedAlpha; - - } - - return; - - } - - // custom blending - - blendEquationAlpha = blendEquationAlpha || blendEquation; - blendSrcAlpha = blendSrcAlpha || blendSrc; - blendDstAlpha = blendDstAlpha || blendDst; - - if ( blendEquation !== currentBlendEquation || blendEquationAlpha !== currentBlendEquationAlpha ) { - - gl.blendEquationSeparate( equationToGL[ blendEquation ], equationToGL[ blendEquationAlpha ] ); - - currentBlendEquation = blendEquation; - currentBlendEquationAlpha = blendEquationAlpha; - - } - - if ( blendSrc !== currentBlendSrc || blendDst !== currentBlendDst || blendSrcAlpha !== currentBlendSrcAlpha || blendDstAlpha !== currentBlendDstAlpha ) { - - gl.blendFuncSeparate( factorToGL[ blendSrc ], factorToGL[ blendDst ], factorToGL[ blendSrcAlpha ], factorToGL[ blendDstAlpha ] ); - - currentBlendSrc = blendSrc; - currentBlendDst = blendDst; - currentBlendSrcAlpha = blendSrcAlpha; - currentBlendDstAlpha = blendDstAlpha; - - } - - currentBlending = blending; - currentPremultipledAlpha = false; - - } - - function setMaterial( material, frontFaceCW ) { - - material.side === DoubleSide - ? disable( gl.CULL_FACE ) - : enable( gl.CULL_FACE ); - - let flipSided = ( material.side === BackSide ); - if ( frontFaceCW ) flipSided = ! flipSided; - - setFlipSided( flipSided ); - - ( material.blending === NormalBlending && material.transparent === false ) - ? setBlending( NoBlending ) - : setBlending( material.blending, material.blendEquation, material.blendSrc, material.blendDst, material.blendEquationAlpha, material.blendSrcAlpha, material.blendDstAlpha, material.premultipliedAlpha ); - - depthBuffer.setFunc( material.depthFunc ); - depthBuffer.setTest( material.depthTest ); - depthBuffer.setMask( material.depthWrite ); - colorBuffer.setMask( material.colorWrite ); - - const stencilWrite = material.stencilWrite; - stencilBuffer.setTest( stencilWrite ); - if ( stencilWrite ) { - - stencilBuffer.setMask( material.stencilWriteMask ); - stencilBuffer.setFunc( material.stencilFunc, material.stencilRef, material.stencilFuncMask ); - stencilBuffer.setOp( material.stencilFail, material.stencilZFail, material.stencilZPass ); - - } - - setPolygonOffset( material.polygonOffset, material.polygonOffsetFactor, material.polygonOffsetUnits ); - - material.alphaToCoverage === true - ? enable( gl.SAMPLE_ALPHA_TO_COVERAGE ) - : disable( gl.SAMPLE_ALPHA_TO_COVERAGE ); - - } - - // - - function setFlipSided( flipSided ) { - - if ( currentFlipSided !== flipSided ) { - - if ( flipSided ) { - - gl.frontFace( gl.CW ); - - } else { - - gl.frontFace( gl.CCW ); - - } - - currentFlipSided = flipSided; - - } - - } - - function setCullFace( cullFace ) { - - if ( cullFace !== CullFaceNone ) { - - enable( gl.CULL_FACE ); - - if ( cullFace !== currentCullFace ) { - - if ( cullFace === CullFaceBack ) { - - gl.cullFace( gl.BACK ); - - } else if ( cullFace === CullFaceFront ) { - - gl.cullFace( gl.FRONT ); - - } else { - - gl.cullFace( gl.FRONT_AND_BACK ); - - } - - } - - } else { - - disable( gl.CULL_FACE ); - - } - - currentCullFace = cullFace; - - } - - function setLineWidth( width ) { - - if ( width !== currentLineWidth ) { - - if ( lineWidthAvailable ) gl.lineWidth( width ); - - currentLineWidth = width; - - } - - } - - function setPolygonOffset( polygonOffset, factor, units ) { - - if ( polygonOffset ) { - - enable( gl.POLYGON_OFFSET_FILL ); - - if ( currentPolygonOffsetFactor !== factor || currentPolygonOffsetUnits !== units ) { - - gl.polygonOffset( factor, units ); - - currentPolygonOffsetFactor = factor; - currentPolygonOffsetUnits = units; - - } - - } else { - - disable( gl.POLYGON_OFFSET_FILL ); - - } - - } - - function setScissorTest( scissorTest ) { - - if ( scissorTest ) { - - enable( gl.SCISSOR_TEST ); - - } else { - - disable( gl.SCISSOR_TEST ); - - } - - } - - // texture - - function activeTexture( webglSlot ) { - - if ( webglSlot === undefined ) webglSlot = gl.TEXTURE0 + maxTextures - 1; - - if ( currentTextureSlot !== webglSlot ) { - - gl.activeTexture( webglSlot ); - currentTextureSlot = webglSlot; - - } - - } - - function bindTexture( webglType, webglTexture, webglSlot ) { - - if ( webglSlot === undefined ) { - - if ( currentTextureSlot === null ) { - - webglSlot = gl.TEXTURE0 + maxTextures - 1; - - } else { - - webglSlot = currentTextureSlot; - - } - - } - - let boundTexture = currentBoundTextures[ webglSlot ]; - - if ( boundTexture === undefined ) { - - boundTexture = { type: undefined, texture: undefined }; - currentBoundTextures[ webglSlot ] = boundTexture; - - } - - if ( boundTexture.type !== webglType || boundTexture.texture !== webglTexture ) { - - if ( currentTextureSlot !== webglSlot ) { - - gl.activeTexture( webglSlot ); - currentTextureSlot = webglSlot; - - } - - gl.bindTexture( webglType, webglTexture || emptyTextures[ webglType ] ); - - boundTexture.type = webglType; - boundTexture.texture = webglTexture; - - } - - } - - function unbindTexture() { - - const boundTexture = currentBoundTextures[ currentTextureSlot ]; - - if ( boundTexture !== undefined && boundTexture.type !== undefined ) { - - gl.bindTexture( boundTexture.type, null ); - - boundTexture.type = undefined; - boundTexture.texture = undefined; - - } - - } - - function compressedTexImage2D() { - - try { - - gl.compressedTexImage2D.apply( gl, arguments ); - - } catch ( error ) { - - console.error( 'THREE.WebGLState:', error ); - - } - - } - - function compressedTexImage3D() { - - try { - - gl.compressedTexImage3D.apply( gl, arguments ); - - } catch ( error ) { - - console.error( 'THREE.WebGLState:', error ); - - } - - } - - function texSubImage2D() { - - try { - - gl.texSubImage2D.apply( gl, arguments ); - - } catch ( error ) { - - console.error( 'THREE.WebGLState:', error ); - - } - - } - - function texSubImage3D() { - - try { - - gl.texSubImage3D.apply( gl, arguments ); - - } catch ( error ) { - - console.error( 'THREE.WebGLState:', error ); - - } - - } - - function compressedTexSubImage2D() { - - try { - - gl.compressedTexSubImage2D.apply( gl, arguments ); - - } catch ( error ) { - - console.error( 'THREE.WebGLState:', error ); - - } - - } - - function compressedTexSubImage3D() { - - try { - - gl.compressedTexSubImage3D.apply( gl, arguments ); - - } catch ( error ) { - - console.error( 'THREE.WebGLState:', error ); - - } - - } - - function texStorage2D() { - - try { - - gl.texStorage2D.apply( gl, arguments ); - - } catch ( error ) { - - console.error( 'THREE.WebGLState:', error ); - - } - - } - - function texStorage3D() { - - try { - - gl.texStorage3D.apply( gl, arguments ); - - } catch ( error ) { - - console.error( 'THREE.WebGLState:', error ); - - } - - } - - function texImage2D() { - - try { - - gl.texImage2D.apply( gl, arguments ); - - } catch ( error ) { - - console.error( 'THREE.WebGLState:', error ); - - } - - } - - function texImage3D() { - - try { - - gl.texImage3D.apply( gl, arguments ); - - } catch ( error ) { - - console.error( 'THREE.WebGLState:', error ); - - } - - } - - // - - function scissor( scissor ) { - - if ( currentScissor.equals( scissor ) === false ) { - - gl.scissor( scissor.x, scissor.y, scissor.z, scissor.w ); - currentScissor.copy( scissor ); - - } - - } - - function viewport( viewport ) { - - if ( currentViewport.equals( viewport ) === false ) { - - gl.viewport( viewport.x, viewport.y, viewport.z, viewport.w ); - currentViewport.copy( viewport ); - - } - - } - - function updateUBOMapping( uniformsGroup, program ) { - - let mapping = uboProgramMap.get( program ); - - if ( mapping === undefined ) { - - mapping = new WeakMap(); - - uboProgramMap.set( program, mapping ); - - } - - let blockIndex = mapping.get( uniformsGroup ); - - if ( blockIndex === undefined ) { - - blockIndex = gl.getUniformBlockIndex( program, uniformsGroup.name ); - - mapping.set( uniformsGroup, blockIndex ); - - } - - } - - function uniformBlockBinding( uniformsGroup, program ) { - - const mapping = uboProgramMap.get( program ); - const blockIndex = mapping.get( uniformsGroup ); - - if ( uboBindings.get( program ) !== blockIndex ) { - - // bind shader specific block index to global block point - gl.uniformBlockBinding( program, blockIndex, uniformsGroup.__bindingPointIndex ); - - uboBindings.set( program, blockIndex ); - - } - - } - - // - - function reset() { - - // reset state - - gl.disable( gl.BLEND ); - gl.disable( gl.CULL_FACE ); - gl.disable( gl.DEPTH_TEST ); - gl.disable( gl.POLYGON_OFFSET_FILL ); - gl.disable( gl.SCISSOR_TEST ); - gl.disable( gl.STENCIL_TEST ); - gl.disable( gl.SAMPLE_ALPHA_TO_COVERAGE ); - - gl.blendEquation( gl.FUNC_ADD ); - gl.blendFunc( gl.ONE, gl.ZERO ); - gl.blendFuncSeparate( gl.ONE, gl.ZERO, gl.ONE, gl.ZERO ); - - gl.colorMask( true, true, true, true ); - gl.clearColor( 0, 0, 0, 0 ); - - gl.depthMask( true ); - gl.depthFunc( gl.LESS ); - gl.clearDepth( 1 ); - - gl.stencilMask( 0xffffffff ); - gl.stencilFunc( gl.ALWAYS, 0, 0xffffffff ); - gl.stencilOp( gl.KEEP, gl.KEEP, gl.KEEP ); - gl.clearStencil( 0 ); - - gl.cullFace( gl.BACK ); - gl.frontFace( gl.CCW ); - - gl.polygonOffset( 0, 0 ); - - gl.activeTexture( gl.TEXTURE0 ); - - gl.bindFramebuffer( gl.FRAMEBUFFER, null ); - - if ( isWebGL2 === true ) { - - gl.bindFramebuffer( gl.DRAW_FRAMEBUFFER, null ); - gl.bindFramebuffer( gl.READ_FRAMEBUFFER, null ); - - } - - gl.useProgram( null ); - - gl.lineWidth( 1 ); - - gl.scissor( 0, 0, gl.canvas.width, gl.canvas.height ); - gl.viewport( 0, 0, gl.canvas.width, gl.canvas.height ); - - // reset internals - - enabledCapabilities = {}; - - currentTextureSlot = null; - currentBoundTextures = {}; - - currentBoundFramebuffers = {}; - currentDrawbuffers = new WeakMap(); - defaultDrawbuffers = []; - - currentProgram = null; - - currentBlendingEnabled = false; - currentBlending = null; - currentBlendEquation = null; - currentBlendSrc = null; - currentBlendDst = null; - currentBlendEquationAlpha = null; - currentBlendSrcAlpha = null; - currentBlendDstAlpha = null; - currentPremultipledAlpha = false; - - currentFlipSided = null; - currentCullFace = null; - - currentLineWidth = null; - - currentPolygonOffsetFactor = null; - currentPolygonOffsetUnits = null; - - currentScissor.set( 0, 0, gl.canvas.width, gl.canvas.height ); - currentViewport.set( 0, 0, gl.canvas.width, gl.canvas.height ); - - colorBuffer.reset(); - depthBuffer.reset(); - stencilBuffer.reset(); - - } - - return { - - buffers: { - color: colorBuffer, - depth: depthBuffer, - stencil: stencilBuffer - }, - - enable: enable, - disable: disable, - - bindFramebuffer: bindFramebuffer, - drawBuffers: drawBuffers, - - useProgram: useProgram, - - setBlending: setBlending, - setMaterial: setMaterial, - - setFlipSided: setFlipSided, - setCullFace: setCullFace, - - setLineWidth: setLineWidth, - setPolygonOffset: setPolygonOffset, - - setScissorTest: setScissorTest, - - activeTexture: activeTexture, - bindTexture: bindTexture, - unbindTexture: unbindTexture, - compressedTexImage2D: compressedTexImage2D, - compressedTexImage3D: compressedTexImage3D, - texImage2D: texImage2D, - texImage3D: texImage3D, - - updateUBOMapping: updateUBOMapping, - uniformBlockBinding: uniformBlockBinding, - - texStorage2D: texStorage2D, - texStorage3D: texStorage3D, - texSubImage2D: texSubImage2D, - texSubImage3D: texSubImage3D, - compressedTexSubImage2D: compressedTexSubImage2D, - compressedTexSubImage3D: compressedTexSubImage3D, - - scissor: scissor, - viewport: viewport, - - reset: reset - - }; - - } - - function WebGLTextures( _gl, extensions, state, properties, capabilities, utils, info ) { - - const isWebGL2 = capabilities.isWebGL2; - const maxTextures = capabilities.maxTextures; - const maxCubemapSize = capabilities.maxCubemapSize; - const maxTextureSize = capabilities.maxTextureSize; - const maxSamples = capabilities.maxSamples; - const multisampledRTTExt = extensions.has( 'WEBGL_multisampled_render_to_texture' ) ? extensions.get( 'WEBGL_multisampled_render_to_texture' ) : null; - const supportsInvalidateFramebuffer = typeof navigator === 'undefined' ? false : /OculusBrowser/g.test( navigator.userAgent ); - - const _videoTextures = new WeakMap(); - let _canvas; - - const _sources = new WeakMap(); // maps WebglTexture objects to instances of Source - - // cordova iOS (as of 5.0) still uses UIWebView, which provides OffscreenCanvas, - // also OffscreenCanvas.getContext("webgl"), but not OffscreenCanvas.getContext("2d")! - // Some implementations may only implement OffscreenCanvas partially (e.g. lacking 2d). - - let useOffscreenCanvas = false; - - try { - - useOffscreenCanvas = typeof OffscreenCanvas !== 'undefined' - // eslint-disable-next-line compat/compat - && ( new OffscreenCanvas( 1, 1 ).getContext( '2d' ) ) !== null; - - } catch ( err ) { - - // Ignore any errors - - } - - function createCanvas( width, height ) { - - // Use OffscreenCanvas when available. Specially needed in web workers - - return useOffscreenCanvas ? - // eslint-disable-next-line compat/compat - new OffscreenCanvas( width, height ) : createElementNS( 'canvas' ); - - } - - function resizeImage( image, needsPowerOfTwo, needsNewCanvas, maxSize ) { - - let scale = 1; - - // handle case if texture exceeds max size - - if ( image.width > maxSize || image.height > maxSize ) { - - scale = maxSize / Math.max( image.width, image.height ); - - } - - // only perform resize if necessary - - if ( scale < 1 || needsPowerOfTwo === true ) { - - // only perform resize for certain image types - - if ( ( typeof HTMLImageElement !== 'undefined' && image instanceof HTMLImageElement ) || - ( typeof HTMLCanvasElement !== 'undefined' && image instanceof HTMLCanvasElement ) || - ( typeof ImageBitmap !== 'undefined' && image instanceof ImageBitmap ) ) { - - const floor = needsPowerOfTwo ? floorPowerOfTwo : Math.floor; - - const width = floor( scale * image.width ); - const height = floor( scale * image.height ); - - if ( _canvas === undefined ) _canvas = createCanvas( width, height ); - - // cube textures can't reuse the same canvas - - const canvas = needsNewCanvas ? createCanvas( width, height ) : _canvas; - - canvas.width = width; - canvas.height = height; - - const context = canvas.getContext( '2d' ); - context.drawImage( image, 0, 0, width, height ); - - console.warn( 'THREE.WebGLRenderer: Texture has been resized from (' + image.width + 'x' + image.height + ') to (' + width + 'x' + height + ').' ); - - return canvas; - - } else { - - if ( 'data' in image ) { - - console.warn( 'THREE.WebGLRenderer: Image in DataTexture is too big (' + image.width + 'x' + image.height + ').' ); - - } - - return image; - - } - - } - - return image; - - } - - function isPowerOfTwo$1( image ) { - - return isPowerOfTwo( image.width ) && isPowerOfTwo( image.height ); - - } - - function textureNeedsPowerOfTwo( texture ) { - - if ( isWebGL2 ) return false; - - return ( texture.wrapS !== ClampToEdgeWrapping || texture.wrapT !== ClampToEdgeWrapping ) || - ( texture.minFilter !== NearestFilter && texture.minFilter !== LinearFilter ); - - } - - function textureNeedsGenerateMipmaps( texture, supportsMips ) { - - return texture.generateMipmaps && supportsMips && - texture.minFilter !== NearestFilter && texture.minFilter !== LinearFilter; - - } - - function generateMipmap( target ) { - - _gl.generateMipmap( target ); - - } - - function getInternalFormat( internalFormatName, glFormat, glType, encoding, forceLinearEncoding = false ) { - - if ( isWebGL2 === false ) return glFormat; - - if ( internalFormatName !== null ) { - - if ( _gl[ internalFormatName ] !== undefined ) return _gl[ internalFormatName ]; - - console.warn( 'THREE.WebGLRenderer: Attempt to use non-existing WebGL internal format \'' + internalFormatName + '\'' ); - - } - - let internalFormat = glFormat; - - if ( glFormat === _gl.RED ) { - - if ( glType === _gl.FLOAT ) internalFormat = _gl.R32F; - if ( glType === _gl.HALF_FLOAT ) internalFormat = _gl.R16F; - if ( glType === _gl.UNSIGNED_BYTE ) internalFormat = _gl.R8; - - } - - if ( glFormat === _gl.RG ) { - - if ( glType === _gl.FLOAT ) internalFormat = _gl.RG32F; - if ( glType === _gl.HALF_FLOAT ) internalFormat = _gl.RG16F; - if ( glType === _gl.UNSIGNED_BYTE ) internalFormat = _gl.RG8; - - } - - if ( glFormat === _gl.RGBA ) { - - if ( glType === _gl.FLOAT ) internalFormat = _gl.RGBA32F; - if ( glType === _gl.HALF_FLOAT ) internalFormat = _gl.RGBA16F; - if ( glType === _gl.UNSIGNED_BYTE ) internalFormat = ( encoding === sRGBEncoding && forceLinearEncoding === false ) ? _gl.SRGB8_ALPHA8 : _gl.RGBA8; - if ( glType === _gl.UNSIGNED_SHORT_4_4_4_4 ) internalFormat = _gl.RGBA4; - if ( glType === _gl.UNSIGNED_SHORT_5_5_5_1 ) internalFormat = _gl.RGB5_A1; - - } - - if ( internalFormat === _gl.R16F || internalFormat === _gl.R32F || - internalFormat === _gl.RG16F || internalFormat === _gl.RG32F || - internalFormat === _gl.RGBA16F || internalFormat === _gl.RGBA32F ) { - - extensions.get( 'EXT_color_buffer_float' ); - - } - - return internalFormat; - - } - - function getMipLevels( texture, image, supportsMips ) { - - if ( textureNeedsGenerateMipmaps( texture, supportsMips ) === true || ( texture.isFramebufferTexture && texture.minFilter !== NearestFilter && texture.minFilter !== LinearFilter ) ) { - - return Math.log2( Math.max( image.width, image.height ) ) + 1; - - } else if ( texture.mipmaps !== undefined && texture.mipmaps.length > 0 ) { - - // user-defined mipmaps - - return texture.mipmaps.length; - - } else if ( texture.isCompressedTexture && Array.isArray( texture.image ) ) { - - return image.mipmaps.length; - - } else { - - // texture without mipmaps (only base level) - - return 1; - - } - - } - - // Fallback filters for non-power-of-2 textures - - function filterFallback( f ) { - - if ( f === NearestFilter || f === NearestMipmapNearestFilter || f === NearestMipmapLinearFilter ) { - - return _gl.NEAREST; - - } - - return _gl.LINEAR; - - } - - // - - function onTextureDispose( event ) { - - const texture = event.target; - - texture.removeEventListener( 'dispose', onTextureDispose ); - - deallocateTexture( texture ); - - if ( texture.isVideoTexture ) { - - _videoTextures.delete( texture ); - - } - - } - - function onRenderTargetDispose( event ) { - - const renderTarget = event.target; - - renderTarget.removeEventListener( 'dispose', onRenderTargetDispose ); - - deallocateRenderTarget( renderTarget ); - - } - - // - - function deallocateTexture( texture ) { - - const textureProperties = properties.get( texture ); - - if ( textureProperties.__webglInit === undefined ) return; - - // check if it's necessary to remove the WebGLTexture object - - const source = texture.source; - const webglTextures = _sources.get( source ); - - if ( webglTextures ) { - - const webglTexture = webglTextures[ textureProperties.__cacheKey ]; - webglTexture.usedTimes --; - - // the WebGLTexture object is not used anymore, remove it - - if ( webglTexture.usedTimes === 0 ) { - - deleteTexture( texture ); - - } - - // remove the weak map entry if no WebGLTexture uses the source anymore - - if ( Object.keys( webglTextures ).length === 0 ) { - - _sources.delete( source ); - - } - - } - - properties.remove( texture ); - - } - - function deleteTexture( texture ) { - - const textureProperties = properties.get( texture ); - _gl.deleteTexture( textureProperties.__webglTexture ); - - const source = texture.source; - const webglTextures = _sources.get( source ); - delete webglTextures[ textureProperties.__cacheKey ]; - - info.memory.textures --; - - } - - function deallocateRenderTarget( renderTarget ) { - - const texture = renderTarget.texture; - - const renderTargetProperties = properties.get( renderTarget ); - const textureProperties = properties.get( texture ); - - if ( textureProperties.__webglTexture !== undefined ) { - - _gl.deleteTexture( textureProperties.__webglTexture ); - - info.memory.textures --; - - } - - if ( renderTarget.depthTexture ) { - - renderTarget.depthTexture.dispose(); - - } - - if ( renderTarget.isWebGLCubeRenderTarget ) { - - for ( let i = 0; i < 6; i ++ ) { - - _gl.deleteFramebuffer( renderTargetProperties.__webglFramebuffer[ i ] ); - if ( renderTargetProperties.__webglDepthbuffer ) _gl.deleteRenderbuffer( renderTargetProperties.__webglDepthbuffer[ i ] ); - - } - - } else { - - _gl.deleteFramebuffer( renderTargetProperties.__webglFramebuffer ); - if ( renderTargetProperties.__webglDepthbuffer ) _gl.deleteRenderbuffer( renderTargetProperties.__webglDepthbuffer ); - if ( renderTargetProperties.__webglMultisampledFramebuffer ) _gl.deleteFramebuffer( renderTargetProperties.__webglMultisampledFramebuffer ); - - if ( renderTargetProperties.__webglColorRenderbuffer ) { - - for ( let i = 0; i < renderTargetProperties.__webglColorRenderbuffer.length; i ++ ) { - - if ( renderTargetProperties.__webglColorRenderbuffer[ i ] ) _gl.deleteRenderbuffer( renderTargetProperties.__webglColorRenderbuffer[ i ] ); - - } - - } - - if ( renderTargetProperties.__webglDepthRenderbuffer ) _gl.deleteRenderbuffer( renderTargetProperties.__webglDepthRenderbuffer ); - - } - - if ( renderTarget.isWebGLMultipleRenderTargets ) { - - for ( let i = 0, il = texture.length; i < il; i ++ ) { - - const attachmentProperties = properties.get( texture[ i ] ); - - if ( attachmentProperties.__webglTexture ) { - - _gl.deleteTexture( attachmentProperties.__webglTexture ); - - info.memory.textures --; - - } - - properties.remove( texture[ i ] ); - - } - - } - - properties.remove( texture ); - properties.remove( renderTarget ); - - } - - // - - let textureUnits = 0; - - function resetTextureUnits() { - - textureUnits = 0; - - } - - function allocateTextureUnit() { - - const textureUnit = textureUnits; - - if ( textureUnit >= maxTextures ) { - - console.warn( 'THREE.WebGLTextures: Trying to use ' + textureUnit + ' texture units while this GPU supports only ' + maxTextures ); - - } - - textureUnits += 1; - - return textureUnit; - - } - - function getTextureCacheKey( texture ) { - - const array = []; - - array.push( texture.wrapS ); - array.push( texture.wrapT ); - array.push( texture.wrapR || 0 ); - array.push( texture.magFilter ); - array.push( texture.minFilter ); - array.push( texture.anisotropy ); - array.push( texture.internalFormat ); - array.push( texture.format ); - array.push( texture.type ); - array.push( texture.generateMipmaps ); - array.push( texture.premultiplyAlpha ); - array.push( texture.flipY ); - array.push( texture.unpackAlignment ); - array.push( texture.encoding ); - - return array.join(); - - } - - // - - function setTexture2D( texture, slot ) { - - const textureProperties = properties.get( texture ); - - if ( texture.isVideoTexture ) updateVideoTexture( texture ); - - if ( texture.isRenderTargetTexture === false && texture.version > 0 && textureProperties.__version !== texture.version ) { - - const image = texture.image; - - if ( image === null ) { - - console.warn( 'THREE.WebGLRenderer: Texture marked for update but no image data found.' ); - - } else if ( image.complete === false ) { - - console.warn( 'THREE.WebGLRenderer: Texture marked for update but image is incomplete' ); - - } else { - - uploadTexture( textureProperties, texture, slot ); - return; - - } - - } - - state.bindTexture( _gl.TEXTURE_2D, textureProperties.__webglTexture, _gl.TEXTURE0 + slot ); - - } - - function setTexture2DArray( texture, slot ) { - - const textureProperties = properties.get( texture ); - - if ( texture.version > 0 && textureProperties.__version !== texture.version ) { - - uploadTexture( textureProperties, texture, slot ); - return; - - } - - state.bindTexture( _gl.TEXTURE_2D_ARRAY, textureProperties.__webglTexture, _gl.TEXTURE0 + slot ); - - } - - function setTexture3D( texture, slot ) { - - const textureProperties = properties.get( texture ); - - if ( texture.version > 0 && textureProperties.__version !== texture.version ) { - - uploadTexture( textureProperties, texture, slot ); - return; - - } - - state.bindTexture( _gl.TEXTURE_3D, textureProperties.__webglTexture, _gl.TEXTURE0 + slot ); - - } - - function setTextureCube( texture, slot ) { - - const textureProperties = properties.get( texture ); - - if ( texture.version > 0 && textureProperties.__version !== texture.version ) { - - uploadCubeTexture( textureProperties, texture, slot ); - return; - - } - - state.bindTexture( _gl.TEXTURE_CUBE_MAP, textureProperties.__webglTexture, _gl.TEXTURE0 + slot ); - - } - - const wrappingToGL = { - [ RepeatWrapping ]: _gl.REPEAT, - [ ClampToEdgeWrapping ]: _gl.CLAMP_TO_EDGE, - [ MirroredRepeatWrapping ]: _gl.MIRRORED_REPEAT - }; - - const filterToGL = { - [ NearestFilter ]: _gl.NEAREST, - [ NearestMipmapNearestFilter ]: _gl.NEAREST_MIPMAP_NEAREST, - [ NearestMipmapLinearFilter ]: _gl.NEAREST_MIPMAP_LINEAR, - - [ LinearFilter ]: _gl.LINEAR, - [ LinearMipmapNearestFilter ]: _gl.LINEAR_MIPMAP_NEAREST, - [ LinearMipmapLinearFilter ]: _gl.LINEAR_MIPMAP_LINEAR - }; - - function setTextureParameters( textureType, texture, supportsMips ) { - - if ( supportsMips ) { - - _gl.texParameteri( textureType, _gl.TEXTURE_WRAP_S, wrappingToGL[ texture.wrapS ] ); - _gl.texParameteri( textureType, _gl.TEXTURE_WRAP_T, wrappingToGL[ texture.wrapT ] ); - - if ( textureType === _gl.TEXTURE_3D || textureType === _gl.TEXTURE_2D_ARRAY ) { - - _gl.texParameteri( textureType, _gl.TEXTURE_WRAP_R, wrappingToGL[ texture.wrapR ] ); - - } - - _gl.texParameteri( textureType, _gl.TEXTURE_MAG_FILTER, filterToGL[ texture.magFilter ] ); - _gl.texParameteri( textureType, _gl.TEXTURE_MIN_FILTER, filterToGL[ texture.minFilter ] ); - - } else { - - _gl.texParameteri( textureType, _gl.TEXTURE_WRAP_S, _gl.CLAMP_TO_EDGE ); - _gl.texParameteri( textureType, _gl.TEXTURE_WRAP_T, _gl.CLAMP_TO_EDGE ); - - if ( textureType === _gl.TEXTURE_3D || textureType === _gl.TEXTURE_2D_ARRAY ) { - - _gl.texParameteri( textureType, _gl.TEXTURE_WRAP_R, _gl.CLAMP_TO_EDGE ); - - } - - if ( texture.wrapS !== ClampToEdgeWrapping || texture.wrapT !== ClampToEdgeWrapping ) { - - console.warn( 'THREE.WebGLRenderer: Texture is not power of two. Texture.wrapS and Texture.wrapT should be set to THREE.ClampToEdgeWrapping.' ); - - } - - _gl.texParameteri( textureType, _gl.TEXTURE_MAG_FILTER, filterFallback( texture.magFilter ) ); - _gl.texParameteri( textureType, _gl.TEXTURE_MIN_FILTER, filterFallback( texture.minFilter ) ); - - if ( texture.minFilter !== NearestFilter && texture.minFilter !== LinearFilter ) { - - console.warn( 'THREE.WebGLRenderer: Texture is not power of two. Texture.minFilter should be set to THREE.NearestFilter or THREE.LinearFilter.' ); - - } - - } - - if ( extensions.has( 'EXT_texture_filter_anisotropic' ) === true ) { - - const extension = extensions.get( 'EXT_texture_filter_anisotropic' ); - - if ( texture.magFilter === NearestFilter ) return; - if ( texture.minFilter !== NearestMipmapLinearFilter && texture.minFilter !== LinearMipmapLinearFilter ) return; - if ( texture.type === FloatType && extensions.has( 'OES_texture_float_linear' ) === false ) return; // verify extension for WebGL 1 and WebGL 2 - if ( isWebGL2 === false && ( texture.type === HalfFloatType && extensions.has( 'OES_texture_half_float_linear' ) === false ) ) return; // verify extension for WebGL 1 only - - if ( texture.anisotropy > 1 || properties.get( texture ).__currentAnisotropy ) { - - _gl.texParameterf( textureType, extension.TEXTURE_MAX_ANISOTROPY_EXT, Math.min( texture.anisotropy, capabilities.getMaxAnisotropy() ) ); - properties.get( texture ).__currentAnisotropy = texture.anisotropy; - - } - - } - - } - - function initTexture( textureProperties, texture ) { - - let forceUpload = false; - - if ( textureProperties.__webglInit === undefined ) { - - textureProperties.__webglInit = true; - - texture.addEventListener( 'dispose', onTextureDispose ); - - } - - // create Source <-> WebGLTextures mapping if necessary - - const source = texture.source; - let webglTextures = _sources.get( source ); - - if ( webglTextures === undefined ) { - - webglTextures = {}; - _sources.set( source, webglTextures ); - - } - - // check if there is already a WebGLTexture object for the given texture parameters - - const textureCacheKey = getTextureCacheKey( texture ); - - if ( textureCacheKey !== textureProperties.__cacheKey ) { - - // if not, create a new instance of WebGLTexture - - if ( webglTextures[ textureCacheKey ] === undefined ) { - - // create new entry - - webglTextures[ textureCacheKey ] = { - texture: _gl.createTexture(), - usedTimes: 0 - }; - - info.memory.textures ++; - - // when a new instance of WebGLTexture was created, a texture upload is required - // even if the image contents are identical - - forceUpload = true; - - } - - webglTextures[ textureCacheKey ].usedTimes ++; - - // every time the texture cache key changes, it's necessary to check if an instance of - // WebGLTexture can be deleted in order to avoid a memory leak. - - const webglTexture = webglTextures[ textureProperties.__cacheKey ]; - - if ( webglTexture !== undefined ) { - - webglTextures[ textureProperties.__cacheKey ].usedTimes --; - - if ( webglTexture.usedTimes === 0 ) { - - deleteTexture( texture ); - - } - - } - - // store references to cache key and WebGLTexture object - - textureProperties.__cacheKey = textureCacheKey; - textureProperties.__webglTexture = webglTextures[ textureCacheKey ].texture; - - } - - return forceUpload; - - } - - function uploadTexture( textureProperties, texture, slot ) { - - let textureType = _gl.TEXTURE_2D; - - if ( texture.isDataArrayTexture || texture.isCompressedArrayTexture ) textureType = _gl.TEXTURE_2D_ARRAY; - if ( texture.isData3DTexture ) textureType = _gl.TEXTURE_3D; - - const forceUpload = initTexture( textureProperties, texture ); - const source = texture.source; - - state.bindTexture( textureType, textureProperties.__webglTexture, _gl.TEXTURE0 + slot ); - - const sourceProperties = properties.get( source ); - - if ( source.version !== sourceProperties.__version || forceUpload === true ) { - - state.activeTexture( _gl.TEXTURE0 + slot ); - - _gl.pixelStorei( _gl.UNPACK_FLIP_Y_WEBGL, texture.flipY ); - _gl.pixelStorei( _gl.UNPACK_PREMULTIPLY_ALPHA_WEBGL, texture.premultiplyAlpha ); - _gl.pixelStorei( _gl.UNPACK_ALIGNMENT, texture.unpackAlignment ); - _gl.pixelStorei( _gl.UNPACK_COLORSPACE_CONVERSION_WEBGL, _gl.NONE ); - - const needsPowerOfTwo = textureNeedsPowerOfTwo( texture ) && isPowerOfTwo$1( texture.image ) === false; - let image = resizeImage( texture.image, needsPowerOfTwo, false, maxTextureSize ); - image = verifyColorSpace( texture, image ); - - const supportsMips = isPowerOfTwo$1( image ) || isWebGL2, - glFormat = utils.convert( texture.format, texture.encoding ); - - let glType = utils.convert( texture.type ), - glInternalFormat = getInternalFormat( texture.internalFormat, glFormat, glType, texture.encoding, texture.isVideoTexture ); - - setTextureParameters( textureType, texture, supportsMips ); - - let mipmap; - const mipmaps = texture.mipmaps; - - const useTexStorage = ( isWebGL2 && texture.isVideoTexture !== true ); - const allocateMemory = ( sourceProperties.__version === undefined ) || ( forceUpload === true ); - const levels = getMipLevels( texture, image, supportsMips ); - - if ( texture.isDepthTexture ) { - - // populate depth texture with dummy data - - glInternalFormat = _gl.DEPTH_COMPONENT; - - if ( isWebGL2 ) { - - if ( texture.type === FloatType ) { - - glInternalFormat = _gl.DEPTH_COMPONENT32F; - - } else if ( texture.type === UnsignedIntType ) { - - glInternalFormat = _gl.DEPTH_COMPONENT24; - - } else if ( texture.type === UnsignedInt248Type ) { - - glInternalFormat = _gl.DEPTH24_STENCIL8; - - } else { - - glInternalFormat = _gl.DEPTH_COMPONENT16; // WebGL2 requires sized internalformat for glTexImage2D - - } - - } else { - - if ( texture.type === FloatType ) { - - console.error( 'WebGLRenderer: Floating point depth texture requires WebGL2.' ); - - } - - } - - // validation checks for WebGL 1 - - if ( texture.format === DepthFormat && glInternalFormat === _gl.DEPTH_COMPONENT ) { - - // The error INVALID_OPERATION is generated by texImage2D if format and internalformat are - // DEPTH_COMPONENT and type is not UNSIGNED_SHORT or UNSIGNED_INT - // (https://www.khronos.org/registry/webgl/extensions/WEBGL_depth_texture/) - if ( texture.type !== UnsignedShortType && texture.type !== UnsignedIntType ) { - - console.warn( 'THREE.WebGLRenderer: Use UnsignedShortType or UnsignedIntType for DepthFormat DepthTexture.' ); - - texture.type = UnsignedIntType; - glType = utils.convert( texture.type ); - - } - - } - - if ( texture.format === DepthStencilFormat && glInternalFormat === _gl.DEPTH_COMPONENT ) { - - // Depth stencil textures need the DEPTH_STENCIL internal format - // (https://www.khronos.org/registry/webgl/extensions/WEBGL_depth_texture/) - glInternalFormat = _gl.DEPTH_STENCIL; - - // The error INVALID_OPERATION is generated by texImage2D if format and internalformat are - // DEPTH_STENCIL and type is not UNSIGNED_INT_24_8_WEBGL. - // (https://www.khronos.org/registry/webgl/extensions/WEBGL_depth_texture/) - if ( texture.type !== UnsignedInt248Type ) { - - console.warn( 'THREE.WebGLRenderer: Use UnsignedInt248Type for DepthStencilFormat DepthTexture.' ); - - texture.type = UnsignedInt248Type; - glType = utils.convert( texture.type ); - - } - - } - - // - - if ( allocateMemory ) { - - if ( useTexStorage ) { - - state.texStorage2D( _gl.TEXTURE_2D, 1, glInternalFormat, image.width, image.height ); - - } else { - - state.texImage2D( _gl.TEXTURE_2D, 0, glInternalFormat, image.width, image.height, 0, glFormat, glType, null ); - - } - - } - - } else if ( texture.isDataTexture ) { - - // use manually created mipmaps if available - // if there are no manual mipmaps - // set 0 level mipmap and then use GL to generate other mipmap levels - - if ( mipmaps.length > 0 && supportsMips ) { - - if ( useTexStorage && allocateMemory ) { - - state.texStorage2D( _gl.TEXTURE_2D, levels, glInternalFormat, mipmaps[ 0 ].width, mipmaps[ 0 ].height ); - - } - - for ( let i = 0, il = mipmaps.length; i < il; i ++ ) { - - mipmap = mipmaps[ i ]; - - if ( useTexStorage ) { - - state.texSubImage2D( _gl.TEXTURE_2D, i, 0, 0, mipmap.width, mipmap.height, glFormat, glType, mipmap.data ); - - } else { - - state.texImage2D( _gl.TEXTURE_2D, i, glInternalFormat, mipmap.width, mipmap.height, 0, glFormat, glType, mipmap.data ); - - } - - } - - texture.generateMipmaps = false; - - } else { - - if ( useTexStorage ) { - - if ( allocateMemory ) { - - state.texStorage2D( _gl.TEXTURE_2D, levels, glInternalFormat, image.width, image.height ); - - } - - state.texSubImage2D( _gl.TEXTURE_2D, 0, 0, 0, image.width, image.height, glFormat, glType, image.data ); - - } else { - - state.texImage2D( _gl.TEXTURE_2D, 0, glInternalFormat, image.width, image.height, 0, glFormat, glType, image.data ); - - } - - } - - } else if ( texture.isCompressedTexture ) { - - if ( texture.isCompressedArrayTexture ) { - - if ( useTexStorage && allocateMemory ) { - - state.texStorage3D( _gl.TEXTURE_2D_ARRAY, levels, glInternalFormat, mipmaps[ 0 ].width, mipmaps[ 0 ].height, image.depth ); - - } - - for ( let i = 0, il = mipmaps.length; i < il; i ++ ) { - - mipmap = mipmaps[ i ]; - - if ( texture.format !== RGBAFormat ) { - - if ( glFormat !== null ) { - - if ( useTexStorage ) { - - state.compressedTexSubImage3D( _gl.TEXTURE_2D_ARRAY, i, 0, 0, 0, mipmap.width, mipmap.height, image.depth, glFormat, mipmap.data, 0, 0 ); - - } else { - - state.compressedTexImage3D( _gl.TEXTURE_2D_ARRAY, i, glInternalFormat, mipmap.width, mipmap.height, image.depth, 0, mipmap.data, 0, 0 ); - - } - - } else { - - console.warn( 'THREE.WebGLRenderer: Attempt to load unsupported compressed texture format in .uploadTexture()' ); - - } - - } else { - - if ( useTexStorage ) { - - state.texSubImage3D( _gl.TEXTURE_2D_ARRAY, i, 0, 0, 0, mipmap.width, mipmap.height, image.depth, glFormat, glType, mipmap.data ); - - } else { - - state.texImage3D( _gl.TEXTURE_2D_ARRAY, i, glInternalFormat, mipmap.width, mipmap.height, image.depth, 0, glFormat, glType, mipmap.data ); - - } - - } - - } - - } else { - - if ( useTexStorage && allocateMemory ) { - - state.texStorage2D( _gl.TEXTURE_2D, levels, glInternalFormat, mipmaps[ 0 ].width, mipmaps[ 0 ].height ); - - } - - for ( let i = 0, il = mipmaps.length; i < il; i ++ ) { - - mipmap = mipmaps[ i ]; - - if ( texture.format !== RGBAFormat ) { - - if ( glFormat !== null ) { - - if ( useTexStorage ) { - - state.compressedTexSubImage2D( _gl.TEXTURE_2D, i, 0, 0, mipmap.width, mipmap.height, glFormat, mipmap.data ); - - } else { - - state.compressedTexImage2D( _gl.TEXTURE_2D, i, glInternalFormat, mipmap.width, mipmap.height, 0, mipmap.data ); - - } - - } else { - - console.warn( 'THREE.WebGLRenderer: Attempt to load unsupported compressed texture format in .uploadTexture()' ); - - } - - } else { - - if ( useTexStorage ) { - - state.texSubImage2D( _gl.TEXTURE_2D, i, 0, 0, mipmap.width, mipmap.height, glFormat, glType, mipmap.data ); - - } else { - - state.texImage2D( _gl.TEXTURE_2D, i, glInternalFormat, mipmap.width, mipmap.height, 0, glFormat, glType, mipmap.data ); - - } - - } - - } - - } - - } else if ( texture.isDataArrayTexture ) { - - if ( useTexStorage ) { - - if ( allocateMemory ) { - - state.texStorage3D( _gl.TEXTURE_2D_ARRAY, levels, glInternalFormat, image.width, image.height, image.depth ); - - } - - state.texSubImage3D( _gl.TEXTURE_2D_ARRAY, 0, 0, 0, 0, image.width, image.height, image.depth, glFormat, glType, image.data ); - - } else { - - state.texImage3D( _gl.TEXTURE_2D_ARRAY, 0, glInternalFormat, image.width, image.height, image.depth, 0, glFormat, glType, image.data ); - - } - - } else if ( texture.isData3DTexture ) { - - if ( useTexStorage ) { - - if ( allocateMemory ) { - - state.texStorage3D( _gl.TEXTURE_3D, levels, glInternalFormat, image.width, image.height, image.depth ); - - } - - state.texSubImage3D( _gl.TEXTURE_3D, 0, 0, 0, 0, image.width, image.height, image.depth, glFormat, glType, image.data ); - - } else { - - state.texImage3D( _gl.TEXTURE_3D, 0, glInternalFormat, image.width, image.height, image.depth, 0, glFormat, glType, image.data ); - - } - - } else if ( texture.isFramebufferTexture ) { - - if ( allocateMemory ) { - - if ( useTexStorage ) { - - state.texStorage2D( _gl.TEXTURE_2D, levels, glInternalFormat, image.width, image.height ); - - } else { - - let width = image.width, height = image.height; - - for ( let i = 0; i < levels; i ++ ) { - - state.texImage2D( _gl.TEXTURE_2D, i, glInternalFormat, width, height, 0, glFormat, glType, null ); - - width >>= 1; - height >>= 1; - - } - - } - - } - - } else { - - // regular Texture (image, video, canvas) - - // use manually created mipmaps if available - // if there are no manual mipmaps - // set 0 level mipmap and then use GL to generate other mipmap levels - - if ( mipmaps.length > 0 && supportsMips ) { - - if ( useTexStorage && allocateMemory ) { - - state.texStorage2D( _gl.TEXTURE_2D, levels, glInternalFormat, mipmaps[ 0 ].width, mipmaps[ 0 ].height ); - - } - - for ( let i = 0, il = mipmaps.length; i < il; i ++ ) { - - mipmap = mipmaps[ i ]; - - if ( useTexStorage ) { - - state.texSubImage2D( _gl.TEXTURE_2D, i, 0, 0, glFormat, glType, mipmap ); - - } else { - - state.texImage2D( _gl.TEXTURE_2D, i, glInternalFormat, glFormat, glType, mipmap ); - - } - - } - - texture.generateMipmaps = false; - - } else { - - if ( useTexStorage ) { - - if ( allocateMemory ) { - - state.texStorage2D( _gl.TEXTURE_2D, levels, glInternalFormat, image.width, image.height ); - - } - - state.texSubImage2D( _gl.TEXTURE_2D, 0, 0, 0, glFormat, glType, image ); - - } else { - - state.texImage2D( _gl.TEXTURE_2D, 0, glInternalFormat, glFormat, glType, image ); - - } - - } - - } - - if ( textureNeedsGenerateMipmaps( texture, supportsMips ) ) { - - generateMipmap( textureType ); - - } - - sourceProperties.__version = source.version; - - if ( texture.onUpdate ) texture.onUpdate( texture ); - - } - - textureProperties.__version = texture.version; - - } - - function uploadCubeTexture( textureProperties, texture, slot ) { - - if ( texture.image.length !== 6 ) return; - - const forceUpload = initTexture( textureProperties, texture ); - const source = texture.source; - - state.bindTexture( _gl.TEXTURE_CUBE_MAP, textureProperties.__webglTexture, _gl.TEXTURE0 + slot ); - - const sourceProperties = properties.get( source ); - - if ( source.version !== sourceProperties.__version || forceUpload === true ) { - - state.activeTexture( _gl.TEXTURE0 + slot ); - - _gl.pixelStorei( _gl.UNPACK_FLIP_Y_WEBGL, texture.flipY ); - _gl.pixelStorei( _gl.UNPACK_PREMULTIPLY_ALPHA_WEBGL, texture.premultiplyAlpha ); - _gl.pixelStorei( _gl.UNPACK_ALIGNMENT, texture.unpackAlignment ); - _gl.pixelStorei( _gl.UNPACK_COLORSPACE_CONVERSION_WEBGL, _gl.NONE ); - - const isCompressed = ( texture.isCompressedTexture || texture.image[ 0 ].isCompressedTexture ); - const isDataTexture = ( texture.image[ 0 ] && texture.image[ 0 ].isDataTexture ); - - const cubeImage = []; - - for ( let i = 0; i < 6; i ++ ) { - - if ( ! isCompressed && ! isDataTexture ) { - - cubeImage[ i ] = resizeImage( texture.image[ i ], false, true, maxCubemapSize ); - - } else { - - cubeImage[ i ] = isDataTexture ? texture.image[ i ].image : texture.image[ i ]; - - } - - cubeImage[ i ] = verifyColorSpace( texture, cubeImage[ i ] ); - - } - - const image = cubeImage[ 0 ], - supportsMips = isPowerOfTwo$1( image ) || isWebGL2, - glFormat = utils.convert( texture.format, texture.encoding ), - glType = utils.convert( texture.type ), - glInternalFormat = getInternalFormat( texture.internalFormat, glFormat, glType, texture.encoding ); - - const useTexStorage = ( isWebGL2 && texture.isVideoTexture !== true ); - const allocateMemory = ( sourceProperties.__version === undefined ) || ( forceUpload === true ); - let levels = getMipLevels( texture, image, supportsMips ); - - setTextureParameters( _gl.TEXTURE_CUBE_MAP, texture, supportsMips ); - - let mipmaps; - - if ( isCompressed ) { - - if ( useTexStorage && allocateMemory ) { - - state.texStorage2D( _gl.TEXTURE_CUBE_MAP, levels, glInternalFormat, image.width, image.height ); - - } - - for ( let i = 0; i < 6; i ++ ) { - - mipmaps = cubeImage[ i ].mipmaps; - - for ( let j = 0; j < mipmaps.length; j ++ ) { - - const mipmap = mipmaps[ j ]; - - if ( texture.format !== RGBAFormat ) { - - if ( glFormat !== null ) { - - if ( useTexStorage ) { - - state.compressedTexSubImage2D( _gl.TEXTURE_CUBE_MAP_POSITIVE_X + i, j, 0, 0, mipmap.width, mipmap.height, glFormat, mipmap.data ); - - } else { - - state.compressedTexImage2D( _gl.TEXTURE_CUBE_MAP_POSITIVE_X + i, j, glInternalFormat, mipmap.width, mipmap.height, 0, mipmap.data ); - - } - - } else { - - console.warn( 'THREE.WebGLRenderer: Attempt to load unsupported compressed texture format in .setTextureCube()' ); - - } - - } else { - - if ( useTexStorage ) { - - state.texSubImage2D( _gl.TEXTURE_CUBE_MAP_POSITIVE_X + i, j, 0, 0, mipmap.width, mipmap.height, glFormat, glType, mipmap.data ); - - } else { - - state.texImage2D( _gl.TEXTURE_CUBE_MAP_POSITIVE_X + i, j, glInternalFormat, mipmap.width, mipmap.height, 0, glFormat, glType, mipmap.data ); - - } - - } - - } - - } - - } else { - - mipmaps = texture.mipmaps; - - if ( useTexStorage && allocateMemory ) { - - // TODO: Uniformly handle mipmap definitions - // Normal textures and compressed cube textures define base level + mips with their mipmap array - // Uncompressed cube textures use their mipmap array only for mips (no base level) - - if ( mipmaps.length > 0 ) levels ++; - - state.texStorage2D( _gl.TEXTURE_CUBE_MAP, levels, glInternalFormat, cubeImage[ 0 ].width, cubeImage[ 0 ].height ); - - } - - for ( let i = 0; i < 6; i ++ ) { - - if ( isDataTexture ) { - - if ( useTexStorage ) { - - state.texSubImage2D( _gl.TEXTURE_CUBE_MAP_POSITIVE_X + i, 0, 0, 0, cubeImage[ i ].width, cubeImage[ i ].height, glFormat, glType, cubeImage[ i ].data ); - - } else { - - state.texImage2D( _gl.TEXTURE_CUBE_MAP_POSITIVE_X + i, 0, glInternalFormat, cubeImage[ i ].width, cubeImage[ i ].height, 0, glFormat, glType, cubeImage[ i ].data ); - - } - - for ( let j = 0; j < mipmaps.length; j ++ ) { - - const mipmap = mipmaps[ j ]; - const mipmapImage = mipmap.image[ i ].image; - - if ( useTexStorage ) { - - state.texSubImage2D( _gl.TEXTURE_CUBE_MAP_POSITIVE_X + i, j + 1, 0, 0, mipmapImage.width, mipmapImage.height, glFormat, glType, mipmapImage.data ); - - } else { - - state.texImage2D( _gl.TEXTURE_CUBE_MAP_POSITIVE_X + i, j + 1, glInternalFormat, mipmapImage.width, mipmapImage.height, 0, glFormat, glType, mipmapImage.data ); - - } - - } - - } else { - - if ( useTexStorage ) { - - state.texSubImage2D( _gl.TEXTURE_CUBE_MAP_POSITIVE_X + i, 0, 0, 0, glFormat, glType, cubeImage[ i ] ); - - } else { - - state.texImage2D( _gl.TEXTURE_CUBE_MAP_POSITIVE_X + i, 0, glInternalFormat, glFormat, glType, cubeImage[ i ] ); - - } - - for ( let j = 0; j < mipmaps.length; j ++ ) { - - const mipmap = mipmaps[ j ]; - - if ( useTexStorage ) { - - state.texSubImage2D( _gl.TEXTURE_CUBE_MAP_POSITIVE_X + i, j + 1, 0, 0, glFormat, glType, mipmap.image[ i ] ); - - } else { - - state.texImage2D( _gl.TEXTURE_CUBE_MAP_POSITIVE_X + i, j + 1, glInternalFormat, glFormat, glType, mipmap.image[ i ] ); - - } - - } - - } - - } - - } - - if ( textureNeedsGenerateMipmaps( texture, supportsMips ) ) { - - // We assume images for cube map have the same size. - generateMipmap( _gl.TEXTURE_CUBE_MAP ); - - } - - sourceProperties.__version = source.version; - - if ( texture.onUpdate ) texture.onUpdate( texture ); - - } - - textureProperties.__version = texture.version; - - } - - // Render targets - - // Setup storage for target texture and bind it to correct framebuffer - function setupFrameBufferTexture( framebuffer, renderTarget, texture, attachment, textureTarget ) { - - const glFormat = utils.convert( texture.format, texture.encoding ); - const glType = utils.convert( texture.type ); - const glInternalFormat = getInternalFormat( texture.internalFormat, glFormat, glType, texture.encoding ); - const renderTargetProperties = properties.get( renderTarget ); - - if ( ! renderTargetProperties.__hasExternalTextures ) { - - if ( textureTarget === _gl.TEXTURE_3D || textureTarget === _gl.TEXTURE_2D_ARRAY ) { - - state.texImage3D( textureTarget, 0, glInternalFormat, renderTarget.width, renderTarget.height, renderTarget.depth, 0, glFormat, glType, null ); - - } else { - - state.texImage2D( textureTarget, 0, glInternalFormat, renderTarget.width, renderTarget.height, 0, glFormat, glType, null ); - - } - - } - - state.bindFramebuffer( _gl.FRAMEBUFFER, framebuffer ); - - if ( useMultisampledRTT( renderTarget ) ) { - - multisampledRTTExt.framebufferTexture2DMultisampleEXT( _gl.FRAMEBUFFER, attachment, textureTarget, properties.get( texture ).__webglTexture, 0, getRenderTargetSamples( renderTarget ) ); - - } else if ( textureTarget === _gl.TEXTURE_2D || ( textureTarget >= _gl.TEXTURE_CUBE_MAP_POSITIVE_X && textureTarget <= _gl.TEXTURE_CUBE_MAP_NEGATIVE_Z ) ) { // see #24753 - - _gl.framebufferTexture2D( _gl.FRAMEBUFFER, attachment, textureTarget, properties.get( texture ).__webglTexture, 0 ); - - } - - state.bindFramebuffer( _gl.FRAMEBUFFER, null ); - - } - - - // Setup storage for internal depth/stencil buffers and bind to correct framebuffer - function setupRenderBufferStorage( renderbuffer, renderTarget, isMultisample ) { - - _gl.bindRenderbuffer( _gl.RENDERBUFFER, renderbuffer ); - - if ( renderTarget.depthBuffer && ! renderTarget.stencilBuffer ) { - - let glInternalFormat = _gl.DEPTH_COMPONENT16; - - if ( isMultisample || useMultisampledRTT( renderTarget ) ) { - - const depthTexture = renderTarget.depthTexture; - - if ( depthTexture && depthTexture.isDepthTexture ) { - - if ( depthTexture.type === FloatType ) { - - glInternalFormat = _gl.DEPTH_COMPONENT32F; - - } else if ( depthTexture.type === UnsignedIntType ) { - - glInternalFormat = _gl.DEPTH_COMPONENT24; - - } - - } - - const samples = getRenderTargetSamples( renderTarget ); - - if ( useMultisampledRTT( renderTarget ) ) { - - multisampledRTTExt.renderbufferStorageMultisampleEXT( _gl.RENDERBUFFER, samples, glInternalFormat, renderTarget.width, renderTarget.height ); - - } else { - - _gl.renderbufferStorageMultisample( _gl.RENDERBUFFER, samples, glInternalFormat, renderTarget.width, renderTarget.height ); - - } - - } else { - - _gl.renderbufferStorage( _gl.RENDERBUFFER, glInternalFormat, renderTarget.width, renderTarget.height ); - - } - - _gl.framebufferRenderbuffer( _gl.FRAMEBUFFER, _gl.DEPTH_ATTACHMENT, _gl.RENDERBUFFER, renderbuffer ); - - } else if ( renderTarget.depthBuffer && renderTarget.stencilBuffer ) { - - const samples = getRenderTargetSamples( renderTarget ); - - if ( isMultisample && useMultisampledRTT( renderTarget ) === false ) { - - _gl.renderbufferStorageMultisample( _gl.RENDERBUFFER, samples, _gl.DEPTH24_STENCIL8, renderTarget.width, renderTarget.height ); - - } else if ( useMultisampledRTT( renderTarget ) ) { - - multisampledRTTExt.renderbufferStorageMultisampleEXT( _gl.RENDERBUFFER, samples, _gl.DEPTH24_STENCIL8, renderTarget.width, renderTarget.height ); - - } else { - - _gl.renderbufferStorage( _gl.RENDERBUFFER, _gl.DEPTH_STENCIL, renderTarget.width, renderTarget.height ); - - } - - - _gl.framebufferRenderbuffer( _gl.FRAMEBUFFER, _gl.DEPTH_STENCIL_ATTACHMENT, _gl.RENDERBUFFER, renderbuffer ); - - } else { - - const textures = renderTarget.isWebGLMultipleRenderTargets === true ? renderTarget.texture : [ renderTarget.texture ]; - - for ( let i = 0; i < textures.length; i ++ ) { - - const texture = textures[ i ]; - - const glFormat = utils.convert( texture.format, texture.encoding ); - const glType = utils.convert( texture.type ); - const glInternalFormat = getInternalFormat( texture.internalFormat, glFormat, glType, texture.encoding ); - const samples = getRenderTargetSamples( renderTarget ); - - if ( isMultisample && useMultisampledRTT( renderTarget ) === false ) { - - _gl.renderbufferStorageMultisample( _gl.RENDERBUFFER, samples, glInternalFormat, renderTarget.width, renderTarget.height ); - - } else if ( useMultisampledRTT( renderTarget ) ) { - - multisampledRTTExt.renderbufferStorageMultisampleEXT( _gl.RENDERBUFFER, samples, glInternalFormat, renderTarget.width, renderTarget.height ); - - } else { - - _gl.renderbufferStorage( _gl.RENDERBUFFER, glInternalFormat, renderTarget.width, renderTarget.height ); - - } - - } - - } - - _gl.bindRenderbuffer( _gl.RENDERBUFFER, null ); - - } - - // Setup resources for a Depth Texture for a FBO (needs an extension) - function setupDepthTexture( framebuffer, renderTarget ) { - - const isCube = ( renderTarget && renderTarget.isWebGLCubeRenderTarget ); - if ( isCube ) throw new Error( 'Depth Texture with cube render targets is not supported' ); - - state.bindFramebuffer( _gl.FRAMEBUFFER, framebuffer ); - - if ( ! ( renderTarget.depthTexture && renderTarget.depthTexture.isDepthTexture ) ) { - - throw new Error( 'renderTarget.depthTexture must be an instance of THREE.DepthTexture' ); - - } - - // upload an empty depth texture with framebuffer size - if ( ! properties.get( renderTarget.depthTexture ).__webglTexture || - renderTarget.depthTexture.image.width !== renderTarget.width || - renderTarget.depthTexture.image.height !== renderTarget.height ) { - - renderTarget.depthTexture.image.width = renderTarget.width; - renderTarget.depthTexture.image.height = renderTarget.height; - renderTarget.depthTexture.needsUpdate = true; - - } - - setTexture2D( renderTarget.depthTexture, 0 ); - - const webglDepthTexture = properties.get( renderTarget.depthTexture ).__webglTexture; - const samples = getRenderTargetSamples( renderTarget ); - - if ( renderTarget.depthTexture.format === DepthFormat ) { - - if ( useMultisampledRTT( renderTarget ) ) { - - multisampledRTTExt.framebufferTexture2DMultisampleEXT( _gl.FRAMEBUFFER, _gl.DEPTH_ATTACHMENT, _gl.TEXTURE_2D, webglDepthTexture, 0, samples ); - - } else { - - _gl.framebufferTexture2D( _gl.FRAMEBUFFER, _gl.DEPTH_ATTACHMENT, _gl.TEXTURE_2D, webglDepthTexture, 0 ); - - } - - } else if ( renderTarget.depthTexture.format === DepthStencilFormat ) { - - if ( useMultisampledRTT( renderTarget ) ) { - - multisampledRTTExt.framebufferTexture2DMultisampleEXT( _gl.FRAMEBUFFER, _gl.DEPTH_STENCIL_ATTACHMENT, _gl.TEXTURE_2D, webglDepthTexture, 0, samples ); - - } else { - - _gl.framebufferTexture2D( _gl.FRAMEBUFFER, _gl.DEPTH_STENCIL_ATTACHMENT, _gl.TEXTURE_2D, webglDepthTexture, 0 ); - - } - - } else { - - throw new Error( 'Unknown depthTexture format' ); - - } - - } - - // Setup GL resources for a non-texture depth buffer - function setupDepthRenderbuffer( renderTarget ) { - - const renderTargetProperties = properties.get( renderTarget ); - const isCube = ( renderTarget.isWebGLCubeRenderTarget === true ); - - if ( renderTarget.depthTexture && ! renderTargetProperties.__autoAllocateDepthBuffer ) { - - if ( isCube ) throw new Error( 'target.depthTexture not supported in Cube render targets' ); - - setupDepthTexture( renderTargetProperties.__webglFramebuffer, renderTarget ); - - } else { - - if ( isCube ) { - - renderTargetProperties.__webglDepthbuffer = []; - - for ( let i = 0; i < 6; i ++ ) { - - state.bindFramebuffer( _gl.FRAMEBUFFER, renderTargetProperties.__webglFramebuffer[ i ] ); - renderTargetProperties.__webglDepthbuffer[ i ] = _gl.createRenderbuffer(); - setupRenderBufferStorage( renderTargetProperties.__webglDepthbuffer[ i ], renderTarget, false ); - - } - - } else { - - state.bindFramebuffer( _gl.FRAMEBUFFER, renderTargetProperties.__webglFramebuffer ); - renderTargetProperties.__webglDepthbuffer = _gl.createRenderbuffer(); - setupRenderBufferStorage( renderTargetProperties.__webglDepthbuffer, renderTarget, false ); - - } - - } - - state.bindFramebuffer( _gl.FRAMEBUFFER, null ); - - } - - // rebind framebuffer with external textures - function rebindTextures( renderTarget, colorTexture, depthTexture ) { - - const renderTargetProperties = properties.get( renderTarget ); - - if ( colorTexture !== undefined ) { - - setupFrameBufferTexture( renderTargetProperties.__webglFramebuffer, renderTarget, renderTarget.texture, _gl.COLOR_ATTACHMENT0, _gl.TEXTURE_2D ); - - } - - if ( depthTexture !== undefined ) { - - setupDepthRenderbuffer( renderTarget ); - - } - - } - - // Set up GL resources for the render target - function setupRenderTarget( renderTarget ) { - - const texture = renderTarget.texture; - - const renderTargetProperties = properties.get( renderTarget ); - const textureProperties = properties.get( texture ); - - renderTarget.addEventListener( 'dispose', onRenderTargetDispose ); - - if ( renderTarget.isWebGLMultipleRenderTargets !== true ) { - - if ( textureProperties.__webglTexture === undefined ) { - - textureProperties.__webglTexture = _gl.createTexture(); - - } - - textureProperties.__version = texture.version; - info.memory.textures ++; - - } - - const isCube = ( renderTarget.isWebGLCubeRenderTarget === true ); - const isMultipleRenderTargets = ( renderTarget.isWebGLMultipleRenderTargets === true ); - const supportsMips = isPowerOfTwo$1( renderTarget ) || isWebGL2; - - // Setup framebuffer - - if ( isCube ) { - - renderTargetProperties.__webglFramebuffer = []; - - for ( let i = 0; i < 6; i ++ ) { - - renderTargetProperties.__webglFramebuffer[ i ] = _gl.createFramebuffer(); - - } - - } else { - - renderTargetProperties.__webglFramebuffer = _gl.createFramebuffer(); - - if ( isMultipleRenderTargets ) { - - if ( capabilities.drawBuffers ) { - - const textures = renderTarget.texture; - - for ( let i = 0, il = textures.length; i < il; i ++ ) { - - const attachmentProperties = properties.get( textures[ i ] ); - - if ( attachmentProperties.__webglTexture === undefined ) { - - attachmentProperties.__webglTexture = _gl.createTexture(); - - info.memory.textures ++; - - } - - } - - } else { - - console.warn( 'THREE.WebGLRenderer: WebGLMultipleRenderTargets can only be used with WebGL2 or WEBGL_draw_buffers extension.' ); - - } - - } - - if ( ( isWebGL2 && renderTarget.samples > 0 ) && useMultisampledRTT( renderTarget ) === false ) { - - const textures = isMultipleRenderTargets ? texture : [ texture ]; - - renderTargetProperties.__webglMultisampledFramebuffer = _gl.createFramebuffer(); - renderTargetProperties.__webglColorRenderbuffer = []; - - state.bindFramebuffer( _gl.FRAMEBUFFER, renderTargetProperties.__webglMultisampledFramebuffer ); - - for ( let i = 0; i < textures.length; i ++ ) { - - const texture = textures[ i ]; - renderTargetProperties.__webglColorRenderbuffer[ i ] = _gl.createRenderbuffer(); - - _gl.bindRenderbuffer( _gl.RENDERBUFFER, renderTargetProperties.__webglColorRenderbuffer[ i ] ); - - const glFormat = utils.convert( texture.format, texture.encoding ); - const glType = utils.convert( texture.type ); - const glInternalFormat = getInternalFormat( texture.internalFormat, glFormat, glType, texture.encoding, renderTarget.isXRRenderTarget === true ); - const samples = getRenderTargetSamples( renderTarget ); - _gl.renderbufferStorageMultisample( _gl.RENDERBUFFER, samples, glInternalFormat, renderTarget.width, renderTarget.height ); - - _gl.framebufferRenderbuffer( _gl.FRAMEBUFFER, _gl.COLOR_ATTACHMENT0 + i, _gl.RENDERBUFFER, renderTargetProperties.__webglColorRenderbuffer[ i ] ); - - } - - _gl.bindRenderbuffer( _gl.RENDERBUFFER, null ); - - if ( renderTarget.depthBuffer ) { - - renderTargetProperties.__webglDepthRenderbuffer = _gl.createRenderbuffer(); - setupRenderBufferStorage( renderTargetProperties.__webglDepthRenderbuffer, renderTarget, true ); - - } - - state.bindFramebuffer( _gl.FRAMEBUFFER, null ); - - } - - } - - // Setup color buffer - - if ( isCube ) { - - state.bindTexture( _gl.TEXTURE_CUBE_MAP, textureProperties.__webglTexture ); - setTextureParameters( _gl.TEXTURE_CUBE_MAP, texture, supportsMips ); - - for ( let i = 0; i < 6; i ++ ) { - - setupFrameBufferTexture( renderTargetProperties.__webglFramebuffer[ i ], renderTarget, texture, _gl.COLOR_ATTACHMENT0, _gl.TEXTURE_CUBE_MAP_POSITIVE_X + i ); - - } - - if ( textureNeedsGenerateMipmaps( texture, supportsMips ) ) { - - generateMipmap( _gl.TEXTURE_CUBE_MAP ); - - } - - state.unbindTexture(); - - } else if ( isMultipleRenderTargets ) { - - const textures = renderTarget.texture; - - for ( let i = 0, il = textures.length; i < il; i ++ ) { - - const attachment = textures[ i ]; - const attachmentProperties = properties.get( attachment ); - - state.bindTexture( _gl.TEXTURE_2D, attachmentProperties.__webglTexture ); - setTextureParameters( _gl.TEXTURE_2D, attachment, supportsMips ); - setupFrameBufferTexture( renderTargetProperties.__webglFramebuffer, renderTarget, attachment, _gl.COLOR_ATTACHMENT0 + i, _gl.TEXTURE_2D ); - - if ( textureNeedsGenerateMipmaps( attachment, supportsMips ) ) { - - generateMipmap( _gl.TEXTURE_2D ); - - } - - } - - state.unbindTexture(); - - } else { - - let glTextureType = _gl.TEXTURE_2D; - - if ( renderTarget.isWebGL3DRenderTarget || renderTarget.isWebGLArrayRenderTarget ) { - - if ( isWebGL2 ) { - - glTextureType = renderTarget.isWebGL3DRenderTarget ? _gl.TEXTURE_3D : _gl.TEXTURE_2D_ARRAY; - - } else { - - console.error( 'THREE.WebGLTextures: THREE.Data3DTexture and THREE.DataArrayTexture only supported with WebGL2.' ); - - } - - } - - state.bindTexture( glTextureType, textureProperties.__webglTexture ); - setTextureParameters( glTextureType, texture, supportsMips ); - setupFrameBufferTexture( renderTargetProperties.__webglFramebuffer, renderTarget, texture, _gl.COLOR_ATTACHMENT0, glTextureType ); - - if ( textureNeedsGenerateMipmaps( texture, supportsMips ) ) { - - generateMipmap( glTextureType ); - - } - - state.unbindTexture(); - - } - - // Setup depth and stencil buffers - - if ( renderTarget.depthBuffer ) { - - setupDepthRenderbuffer( renderTarget ); - - } - - } - - function updateRenderTargetMipmap( renderTarget ) { - - const supportsMips = isPowerOfTwo$1( renderTarget ) || isWebGL2; - - const textures = renderTarget.isWebGLMultipleRenderTargets === true ? renderTarget.texture : [ renderTarget.texture ]; - - for ( let i = 0, il = textures.length; i < il; i ++ ) { - - const texture = textures[ i ]; - - if ( textureNeedsGenerateMipmaps( texture, supportsMips ) ) { - - const target = renderTarget.isWebGLCubeRenderTarget ? _gl.TEXTURE_CUBE_MAP : _gl.TEXTURE_2D; - const webglTexture = properties.get( texture ).__webglTexture; - - state.bindTexture( target, webglTexture ); - generateMipmap( target ); - state.unbindTexture(); - - } - - } - - } - - function updateMultisampleRenderTarget( renderTarget ) { - - if ( ( isWebGL2 && renderTarget.samples > 0 ) && useMultisampledRTT( renderTarget ) === false ) { - - const textures = renderTarget.isWebGLMultipleRenderTargets ? renderTarget.texture : [ renderTarget.texture ]; - const width = renderTarget.width; - const height = renderTarget.height; - let mask = _gl.COLOR_BUFFER_BIT; - const invalidationArray = []; - const depthStyle = renderTarget.stencilBuffer ? _gl.DEPTH_STENCIL_ATTACHMENT : _gl.DEPTH_ATTACHMENT; - const renderTargetProperties = properties.get( renderTarget ); - const isMultipleRenderTargets = ( renderTarget.isWebGLMultipleRenderTargets === true ); - - // If MRT we need to remove FBO attachments - if ( isMultipleRenderTargets ) { - - for ( let i = 0; i < textures.length; i ++ ) { - - state.bindFramebuffer( _gl.FRAMEBUFFER, renderTargetProperties.__webglMultisampledFramebuffer ); - _gl.framebufferRenderbuffer( _gl.FRAMEBUFFER, _gl.COLOR_ATTACHMENT0 + i, _gl.RENDERBUFFER, null ); - - state.bindFramebuffer( _gl.FRAMEBUFFER, renderTargetProperties.__webglFramebuffer ); - _gl.framebufferTexture2D( _gl.DRAW_FRAMEBUFFER, _gl.COLOR_ATTACHMENT0 + i, _gl.TEXTURE_2D, null, 0 ); - - } - - } - - state.bindFramebuffer( _gl.READ_FRAMEBUFFER, renderTargetProperties.__webglMultisampledFramebuffer ); - state.bindFramebuffer( _gl.DRAW_FRAMEBUFFER, renderTargetProperties.__webglFramebuffer ); - - for ( let i = 0; i < textures.length; i ++ ) { - - invalidationArray.push( _gl.COLOR_ATTACHMENT0 + i ); - - if ( renderTarget.depthBuffer ) { - - invalidationArray.push( depthStyle ); - - } - - const ignoreDepthValues = ( renderTargetProperties.__ignoreDepthValues !== undefined ) ? renderTargetProperties.__ignoreDepthValues : false; - - if ( ignoreDepthValues === false ) { - - if ( renderTarget.depthBuffer ) mask |= _gl.DEPTH_BUFFER_BIT; - if ( renderTarget.stencilBuffer ) mask |= _gl.STENCIL_BUFFER_BIT; - - } - - if ( isMultipleRenderTargets ) { - - _gl.framebufferRenderbuffer( _gl.READ_FRAMEBUFFER, _gl.COLOR_ATTACHMENT0, _gl.RENDERBUFFER, renderTargetProperties.__webglColorRenderbuffer[ i ] ); - - } - - if ( ignoreDepthValues === true ) { - - _gl.invalidateFramebuffer( _gl.READ_FRAMEBUFFER, [ depthStyle ] ); - _gl.invalidateFramebuffer( _gl.DRAW_FRAMEBUFFER, [ depthStyle ] ); - - } - - if ( isMultipleRenderTargets ) { - - const webglTexture = properties.get( textures[ i ] ).__webglTexture; - _gl.framebufferTexture2D( _gl.DRAW_FRAMEBUFFER, _gl.COLOR_ATTACHMENT0, _gl.TEXTURE_2D, webglTexture, 0 ); - - } - - _gl.blitFramebuffer( 0, 0, width, height, 0, 0, width, height, mask, _gl.NEAREST ); - - if ( supportsInvalidateFramebuffer ) { - - _gl.invalidateFramebuffer( _gl.READ_FRAMEBUFFER, invalidationArray ); - - } - - - } - - state.bindFramebuffer( _gl.READ_FRAMEBUFFER, null ); - state.bindFramebuffer( _gl.DRAW_FRAMEBUFFER, null ); - - // If MRT since pre-blit we removed the FBO we need to reconstruct the attachments - if ( isMultipleRenderTargets ) { - - for ( let i = 0; i < textures.length; i ++ ) { - - state.bindFramebuffer( _gl.FRAMEBUFFER, renderTargetProperties.__webglMultisampledFramebuffer ); - _gl.framebufferRenderbuffer( _gl.FRAMEBUFFER, _gl.COLOR_ATTACHMENT0 + i, _gl.RENDERBUFFER, renderTargetProperties.__webglColorRenderbuffer[ i ] ); - - const webglTexture = properties.get( textures[ i ] ).__webglTexture; - - state.bindFramebuffer( _gl.FRAMEBUFFER, renderTargetProperties.__webglFramebuffer ); - _gl.framebufferTexture2D( _gl.DRAW_FRAMEBUFFER, _gl.COLOR_ATTACHMENT0 + i, _gl.TEXTURE_2D, webglTexture, 0 ); - - } - - } - - state.bindFramebuffer( _gl.DRAW_FRAMEBUFFER, renderTargetProperties.__webglMultisampledFramebuffer ); - - } - - } - - function getRenderTargetSamples( renderTarget ) { - - return Math.min( maxSamples, renderTarget.samples ); - - } - - function useMultisampledRTT( renderTarget ) { - - const renderTargetProperties = properties.get( renderTarget ); - - return isWebGL2 && renderTarget.samples > 0 && extensions.has( 'WEBGL_multisampled_render_to_texture' ) === true && renderTargetProperties.__useRenderToTexture !== false; - - } - - function updateVideoTexture( texture ) { - - const frame = info.render.frame; - - // Check the last frame we updated the VideoTexture - - if ( _videoTextures.get( texture ) !== frame ) { - - _videoTextures.set( texture, frame ); - texture.update(); - - } - - } - - function verifyColorSpace( texture, image ) { - - const encoding = texture.encoding; - const format = texture.format; - const type = texture.type; - - if ( texture.isCompressedTexture === true || texture.isVideoTexture === true || texture.format === _SRGBAFormat ) return image; - - if ( encoding !== LinearEncoding ) { - - // sRGB - - if ( encoding === sRGBEncoding ) { - - if ( isWebGL2 === false ) { - - // in WebGL 1, try to use EXT_sRGB extension and unsized formats - - if ( extensions.has( 'EXT_sRGB' ) === true && format === RGBAFormat ) { - - texture.format = _SRGBAFormat; - - // it's not possible to generate mips in WebGL 1 with this extension - - texture.minFilter = LinearFilter; - texture.generateMipmaps = false; - - } else { - - // slow fallback (CPU decode) - - image = ImageUtils.sRGBToLinear( image ); - - } - - } else { - - // in WebGL 2 uncompressed textures can only be sRGB encoded if they have the RGBA8 format - - if ( format !== RGBAFormat || type !== UnsignedByteType ) { - - console.warn( 'THREE.WebGLTextures: sRGB encoded textures have to use RGBAFormat and UnsignedByteType.' ); - - } - - } - - } else { - - console.error( 'THREE.WebGLTextures: Unsupported texture encoding:', encoding ); - - } - - } - - return image; - - } - - // - - this.allocateTextureUnit = allocateTextureUnit; - this.resetTextureUnits = resetTextureUnits; - - this.setTexture2D = setTexture2D; - this.setTexture2DArray = setTexture2DArray; - this.setTexture3D = setTexture3D; - this.setTextureCube = setTextureCube; - this.rebindTextures = rebindTextures; - this.setupRenderTarget = setupRenderTarget; - this.updateRenderTargetMipmap = updateRenderTargetMipmap; - this.updateMultisampleRenderTarget = updateMultisampleRenderTarget; - this.setupDepthRenderbuffer = setupDepthRenderbuffer; - this.setupFrameBufferTexture = setupFrameBufferTexture; - this.useMultisampledRTT = useMultisampledRTT; - - } - - function WebGLUtils( gl, extensions, capabilities ) { - - const isWebGL2 = capabilities.isWebGL2; - - function convert( p, encoding = null ) { - - let extension; - - if ( p === UnsignedByteType ) return gl.UNSIGNED_BYTE; - if ( p === UnsignedShort4444Type ) return gl.UNSIGNED_SHORT_4_4_4_4; - if ( p === UnsignedShort5551Type ) return gl.UNSIGNED_SHORT_5_5_5_1; - - if ( p === ByteType ) return gl.BYTE; - if ( p === ShortType ) return gl.SHORT; - if ( p === UnsignedShortType ) return gl.UNSIGNED_SHORT; - if ( p === IntType ) return gl.INT; - if ( p === UnsignedIntType ) return gl.UNSIGNED_INT; - if ( p === FloatType ) return gl.FLOAT; - - if ( p === HalfFloatType ) { - - if ( isWebGL2 ) return gl.HALF_FLOAT; - - extension = extensions.get( 'OES_texture_half_float' ); - - if ( extension !== null ) { - - return extension.HALF_FLOAT_OES; - - } else { - - return null; - - } - - } - - if ( p === AlphaFormat ) return gl.ALPHA; - if ( p === RGBAFormat ) return gl.RGBA; - if ( p === LuminanceFormat ) return gl.LUMINANCE; - if ( p === LuminanceAlphaFormat ) return gl.LUMINANCE_ALPHA; - if ( p === DepthFormat ) return gl.DEPTH_COMPONENT; - if ( p === DepthStencilFormat ) return gl.DEPTH_STENCIL; - - // WebGL 1 sRGB fallback - - if ( p === _SRGBAFormat ) { - - extension = extensions.get( 'EXT_sRGB' ); - - if ( extension !== null ) { - - return extension.SRGB_ALPHA_EXT; - - } else { - - return null; - - } - - } - - // WebGL2 formats. - - if ( p === RedFormat ) return gl.RED; - if ( p === RedIntegerFormat ) return gl.RED_INTEGER; - if ( p === RGFormat ) return gl.RG; - if ( p === RGIntegerFormat ) return gl.RG_INTEGER; - if ( p === RGBAIntegerFormat ) return gl.RGBA_INTEGER; - - // S3TC - - if ( p === RGB_S3TC_DXT1_Format || p === RGBA_S3TC_DXT1_Format || p === RGBA_S3TC_DXT3_Format || p === RGBA_S3TC_DXT5_Format ) { - - if ( encoding === sRGBEncoding ) { - - extension = extensions.get( 'WEBGL_compressed_texture_s3tc_srgb' ); - - if ( extension !== null ) { - - if ( p === RGB_S3TC_DXT1_Format ) return extension.COMPRESSED_SRGB_S3TC_DXT1_EXT; - if ( p === RGBA_S3TC_DXT1_Format ) return extension.COMPRESSED_SRGB_ALPHA_S3TC_DXT1_EXT; - if ( p === RGBA_S3TC_DXT3_Format ) return extension.COMPRESSED_SRGB_ALPHA_S3TC_DXT3_EXT; - if ( p === RGBA_S3TC_DXT5_Format ) return extension.COMPRESSED_SRGB_ALPHA_S3TC_DXT5_EXT; - - } else { - - return null; - - } - - } else { - - extension = extensions.get( 'WEBGL_compressed_texture_s3tc' ); - - if ( extension !== null ) { - - if ( p === RGB_S3TC_DXT1_Format ) return extension.COMPRESSED_RGB_S3TC_DXT1_EXT; - if ( p === RGBA_S3TC_DXT1_Format ) return extension.COMPRESSED_RGBA_S3TC_DXT1_EXT; - if ( p === RGBA_S3TC_DXT3_Format ) return extension.COMPRESSED_RGBA_S3TC_DXT3_EXT; - if ( p === RGBA_S3TC_DXT5_Format ) return extension.COMPRESSED_RGBA_S3TC_DXT5_EXT; - - } else { - - return null; - - } - - } - - } - - // PVRTC - - if ( p === RGB_PVRTC_4BPPV1_Format || p === RGB_PVRTC_2BPPV1_Format || p === RGBA_PVRTC_4BPPV1_Format || p === RGBA_PVRTC_2BPPV1_Format ) { - - extension = extensions.get( 'WEBGL_compressed_texture_pvrtc' ); - - if ( extension !== null ) { - - if ( p === RGB_PVRTC_4BPPV1_Format ) return extension.COMPRESSED_RGB_PVRTC_4BPPV1_IMG; - if ( p === RGB_PVRTC_2BPPV1_Format ) return extension.COMPRESSED_RGB_PVRTC_2BPPV1_IMG; - if ( p === RGBA_PVRTC_4BPPV1_Format ) return extension.COMPRESSED_RGBA_PVRTC_4BPPV1_IMG; - if ( p === RGBA_PVRTC_2BPPV1_Format ) return extension.COMPRESSED_RGBA_PVRTC_2BPPV1_IMG; - - } else { - - return null; - - } - - } - - // ETC1 - - if ( p === RGB_ETC1_Format ) { - - extension = extensions.get( 'WEBGL_compressed_texture_etc1' ); - - if ( extension !== null ) { - - return extension.COMPRESSED_RGB_ETC1_WEBGL; - - } else { - - return null; - - } - - } - - // ETC2 - - if ( p === RGB_ETC2_Format || p === RGBA_ETC2_EAC_Format ) { - - extension = extensions.get( 'WEBGL_compressed_texture_etc' ); - - if ( extension !== null ) { - - if ( p === RGB_ETC2_Format ) return ( encoding === sRGBEncoding ) ? extension.COMPRESSED_SRGB8_ETC2 : extension.COMPRESSED_RGB8_ETC2; - if ( p === RGBA_ETC2_EAC_Format ) return ( encoding === sRGBEncoding ) ? extension.COMPRESSED_SRGB8_ALPHA8_ETC2_EAC : extension.COMPRESSED_RGBA8_ETC2_EAC; - - } else { - - return null; - - } - - } - - // ASTC - - if ( p === RGBA_ASTC_4x4_Format || p === RGBA_ASTC_5x4_Format || p === RGBA_ASTC_5x5_Format || - p === RGBA_ASTC_6x5_Format || p === RGBA_ASTC_6x6_Format || p === RGBA_ASTC_8x5_Format || - p === RGBA_ASTC_8x6_Format || p === RGBA_ASTC_8x8_Format || p === RGBA_ASTC_10x5_Format || - p === RGBA_ASTC_10x6_Format || p === RGBA_ASTC_10x8_Format || p === RGBA_ASTC_10x10_Format || - p === RGBA_ASTC_12x10_Format || p === RGBA_ASTC_12x12_Format ) { - - extension = extensions.get( 'WEBGL_compressed_texture_astc' ); - - if ( extension !== null ) { - - if ( p === RGBA_ASTC_4x4_Format ) return ( encoding === sRGBEncoding ) ? extension.COMPRESSED_SRGB8_ALPHA8_ASTC_4x4_KHR : extension.COMPRESSED_RGBA_ASTC_4x4_KHR; - if ( p === RGBA_ASTC_5x4_Format ) return ( encoding === sRGBEncoding ) ? extension.COMPRESSED_SRGB8_ALPHA8_ASTC_5x4_KHR : extension.COMPRESSED_RGBA_ASTC_5x4_KHR; - if ( p === RGBA_ASTC_5x5_Format ) return ( encoding === sRGBEncoding ) ? extension.COMPRESSED_SRGB8_ALPHA8_ASTC_5x5_KHR : extension.COMPRESSED_RGBA_ASTC_5x5_KHR; - if ( p === RGBA_ASTC_6x5_Format ) return ( encoding === sRGBEncoding ) ? extension.COMPRESSED_SRGB8_ALPHA8_ASTC_6x5_KHR : extension.COMPRESSED_RGBA_ASTC_6x5_KHR; - if ( p === RGBA_ASTC_6x6_Format ) return ( encoding === sRGBEncoding ) ? extension.COMPRESSED_SRGB8_ALPHA8_ASTC_6x6_KHR : extension.COMPRESSED_RGBA_ASTC_6x6_KHR; - if ( p === RGBA_ASTC_8x5_Format ) return ( encoding === sRGBEncoding ) ? extension.COMPRESSED_SRGB8_ALPHA8_ASTC_8x5_KHR : extension.COMPRESSED_RGBA_ASTC_8x5_KHR; - if ( p === RGBA_ASTC_8x6_Format ) return ( encoding === sRGBEncoding ) ? extension.COMPRESSED_SRGB8_ALPHA8_ASTC_8x6_KHR : extension.COMPRESSED_RGBA_ASTC_8x6_KHR; - if ( p === RGBA_ASTC_8x8_Format ) return ( encoding === sRGBEncoding ) ? extension.COMPRESSED_SRGB8_ALPHA8_ASTC_8x8_KHR : extension.COMPRESSED_RGBA_ASTC_8x8_KHR; - if ( p === RGBA_ASTC_10x5_Format ) return ( encoding === sRGBEncoding ) ? extension.COMPRESSED_SRGB8_ALPHA8_ASTC_10x5_KHR : extension.COMPRESSED_RGBA_ASTC_10x5_KHR; - if ( p === RGBA_ASTC_10x6_Format ) return ( encoding === sRGBEncoding ) ? extension.COMPRESSED_SRGB8_ALPHA8_ASTC_10x6_KHR : extension.COMPRESSED_RGBA_ASTC_10x6_KHR; - if ( p === RGBA_ASTC_10x8_Format ) return ( encoding === sRGBEncoding ) ? extension.COMPRESSED_SRGB8_ALPHA8_ASTC_10x8_KHR : extension.COMPRESSED_RGBA_ASTC_10x8_KHR; - if ( p === RGBA_ASTC_10x10_Format ) return ( encoding === sRGBEncoding ) ? extension.COMPRESSED_SRGB8_ALPHA8_ASTC_10x10_KHR : extension.COMPRESSED_RGBA_ASTC_10x10_KHR; - if ( p === RGBA_ASTC_12x10_Format ) return ( encoding === sRGBEncoding ) ? extension.COMPRESSED_SRGB8_ALPHA8_ASTC_12x10_KHR : extension.COMPRESSED_RGBA_ASTC_12x10_KHR; - if ( p === RGBA_ASTC_12x12_Format ) return ( encoding === sRGBEncoding ) ? extension.COMPRESSED_SRGB8_ALPHA8_ASTC_12x12_KHR : extension.COMPRESSED_RGBA_ASTC_12x12_KHR; - - } else { - - return null; - - } - - } - - // BPTC - - if ( p === RGBA_BPTC_Format ) { - - extension = extensions.get( 'EXT_texture_compression_bptc' ); - - if ( extension !== null ) { - - if ( p === RGBA_BPTC_Format ) return ( encoding === sRGBEncoding ) ? extension.COMPRESSED_SRGB_ALPHA_BPTC_UNORM_EXT : extension.COMPRESSED_RGBA_BPTC_UNORM_EXT; - - } else { - - return null; - - } - - } - - // RGTC - - if ( p === RED_RGTC1_Format || p === SIGNED_RED_RGTC1_Format || p === RED_GREEN_RGTC2_Format || p === SIGNED_RED_GREEN_RGTC2_Format ) { - - extension = extensions.get( 'EXT_texture_compression_rgtc' ); - - if ( extension !== null ) { - - if ( p === RGBA_BPTC_Format ) return extension.COMPRESSED_RED_RGTC1_EXT; - if ( p === SIGNED_RED_RGTC1_Format ) return extension.COMPRESSED_SIGNED_RED_RGTC1_EXT; - if ( p === RED_GREEN_RGTC2_Format ) return extension.COMPRESSED_RED_GREEN_RGTC2_EXT; - if ( p === SIGNED_RED_GREEN_RGTC2_Format ) return extension.COMPRESSED_SIGNED_RED_GREEN_RGTC2_EXT; - - } else { - - return null; - - } - - } - - // - - if ( p === UnsignedInt248Type ) { - - if ( isWebGL2 ) return gl.UNSIGNED_INT_24_8; - - extension = extensions.get( 'WEBGL_depth_texture' ); - - if ( extension !== null ) { - - return extension.UNSIGNED_INT_24_8_WEBGL; - - } else { - - return null; - - } - - } - - // if "p" can't be resolved, assume the user defines a WebGL constant as a string (fallback/workaround for packed RGB formats) - - return ( gl[ p ] !== undefined ) ? gl[ p ] : null; - - } - - return { convert: convert }; - - } - - class ArrayCamera extends PerspectiveCamera { - - constructor( array = [] ) { - - super(); - - this.isArrayCamera = true; - - this.cameras = array; - - } - - } - - class Group extends Object3D { - - constructor() { - - super(); - - this.isGroup = true; - - this.type = 'Group'; - - } - - } - - const _moveEvent = { type: 'move' }; - - class WebXRController { - - constructor() { - - this._targetRay = null; - this._grip = null; - this._hand = null; - - } - - getHandSpace() { - - if ( this._hand === null ) { - - this._hand = new Group(); - this._hand.matrixAutoUpdate = false; - this._hand.visible = false; - - this._hand.joints = {}; - this._hand.inputState = { pinching: false }; - - } - - return this._hand; - - } - - getTargetRaySpace() { - - if ( this._targetRay === null ) { - - this._targetRay = new Group(); - this._targetRay.matrixAutoUpdate = false; - this._targetRay.visible = false; - this._targetRay.hasLinearVelocity = false; - this._targetRay.linearVelocity = new Vector3(); - this._targetRay.hasAngularVelocity = false; - this._targetRay.angularVelocity = new Vector3(); - - } - - return this._targetRay; - - } - - getGripSpace() { - - if ( this._grip === null ) { - - this._grip = new Group(); - this._grip.matrixAutoUpdate = false; - this._grip.visible = false; - this._grip.hasLinearVelocity = false; - this._grip.linearVelocity = new Vector3(); - this._grip.hasAngularVelocity = false; - this._grip.angularVelocity = new Vector3(); - - } - - return this._grip; - - } - - dispatchEvent( event ) { - - if ( this._targetRay !== null ) { - - this._targetRay.dispatchEvent( event ); - - } - - if ( this._grip !== null ) { - - this._grip.dispatchEvent( event ); - - } - - if ( this._hand !== null ) { - - this._hand.dispatchEvent( event ); - - } - - return this; - - } - - connect( inputSource ) { - - if ( inputSource && inputSource.hand ) { - - const hand = this._hand; - - if ( hand ) { - - for ( const inputjoint of inputSource.hand.values() ) { - - // Initialize hand with joints when connected - this._getHandJoint( hand, inputjoint ); - - } - - } - - } - - this.dispatchEvent( { type: 'connected', data: inputSource } ); - - return this; - - } - - disconnect( inputSource ) { - - this.dispatchEvent( { type: 'disconnected', data: inputSource } ); - - if ( this._targetRay !== null ) { - - this._targetRay.visible = false; - - } - - if ( this._grip !== null ) { - - this._grip.visible = false; - - } - - if ( this._hand !== null ) { - - this._hand.visible = false; - - } - - return this; - - } - - update( inputSource, frame, referenceSpace ) { - - let inputPose = null; - let gripPose = null; - let handPose = null; - - const targetRay = this._targetRay; - const grip = this._grip; - const hand = this._hand; - - if ( inputSource && frame.session.visibilityState !== 'visible-blurred' ) { - - if ( hand && inputSource.hand ) { - - handPose = true; - - for ( const inputjoint of inputSource.hand.values() ) { - - // Update the joints groups with the XRJoint poses - const jointPose = frame.getJointPose( inputjoint, referenceSpace ); - - // The transform of this joint will be updated with the joint pose on each frame - const joint = this._getHandJoint( hand, inputjoint ); - - if ( jointPose !== null ) { - - joint.matrix.fromArray( jointPose.transform.matrix ); - joint.matrix.decompose( joint.position, joint.rotation, joint.scale ); - joint.jointRadius = jointPose.radius; - - } - - joint.visible = jointPose !== null; - - } - - // Custom events - - // Check pinchz - const indexTip = hand.joints[ 'index-finger-tip' ]; - const thumbTip = hand.joints[ 'thumb-tip' ]; - const distance = indexTip.position.distanceTo( thumbTip.position ); - - const distanceToPinch = 0.02; - const threshold = 0.005; - - if ( hand.inputState.pinching && distance > distanceToPinch + threshold ) { - - hand.inputState.pinching = false; - this.dispatchEvent( { - type: 'pinchend', - handedness: inputSource.handedness, - target: this - } ); - - } else if ( ! hand.inputState.pinching && distance <= distanceToPinch - threshold ) { - - hand.inputState.pinching = true; - this.dispatchEvent( { - type: 'pinchstart', - handedness: inputSource.handedness, - target: this - } ); - - } - - } else { - - if ( grip !== null && inputSource.gripSpace ) { - - gripPose = frame.getPose( inputSource.gripSpace, referenceSpace ); - - if ( gripPose !== null ) { - - grip.matrix.fromArray( gripPose.transform.matrix ); - grip.matrix.decompose( grip.position, grip.rotation, grip.scale ); - - if ( gripPose.linearVelocity ) { - - grip.hasLinearVelocity = true; - grip.linearVelocity.copy( gripPose.linearVelocity ); - - } else { - - grip.hasLinearVelocity = false; - - } - - if ( gripPose.angularVelocity ) { - - grip.hasAngularVelocity = true; - grip.angularVelocity.copy( gripPose.angularVelocity ); - - } else { - - grip.hasAngularVelocity = false; - - } - - } - - } - - } - - if ( targetRay !== null ) { - - inputPose = frame.getPose( inputSource.targetRaySpace, referenceSpace ); - - // Some runtimes (namely Vive Cosmos with Vive OpenXR Runtime) have only grip space and ray space is equal to it - if ( inputPose === null && gripPose !== null ) { - - inputPose = gripPose; - - } - - if ( inputPose !== null ) { - - targetRay.matrix.fromArray( inputPose.transform.matrix ); - targetRay.matrix.decompose( targetRay.position, targetRay.rotation, targetRay.scale ); - - if ( inputPose.linearVelocity ) { - - targetRay.hasLinearVelocity = true; - targetRay.linearVelocity.copy( inputPose.linearVelocity ); - - } else { - - targetRay.hasLinearVelocity = false; - - } - - if ( inputPose.angularVelocity ) { - - targetRay.hasAngularVelocity = true; - targetRay.angularVelocity.copy( inputPose.angularVelocity ); - - } else { - - targetRay.hasAngularVelocity = false; - - } - - this.dispatchEvent( _moveEvent ); - - } - - } - - - } - - if ( targetRay !== null ) { - - targetRay.visible = ( inputPose !== null ); - - } - - if ( grip !== null ) { - - grip.visible = ( gripPose !== null ); - - } - - if ( hand !== null ) { - - hand.visible = ( handPose !== null ); - - } - - return this; - - } - - // private method - - _getHandJoint( hand, inputjoint ) { - - if ( hand.joints[ inputjoint.jointName ] === undefined ) { - - const joint = new Group(); - joint.matrixAutoUpdate = false; - joint.visible = false; - hand.joints[ inputjoint.jointName ] = joint; - - hand.add( joint ); - - } - - return hand.joints[ inputjoint.jointName ]; - - } - - } - - class DepthTexture extends Texture { - - constructor( width, height, type, mapping, wrapS, wrapT, magFilter, minFilter, anisotropy, format ) { - - format = format !== undefined ? format : DepthFormat; - - if ( format !== DepthFormat && format !== DepthStencilFormat ) { - - throw new Error( 'DepthTexture format must be either THREE.DepthFormat or THREE.DepthStencilFormat' ); - - } - - if ( type === undefined && format === DepthFormat ) type = UnsignedIntType; - if ( type === undefined && format === DepthStencilFormat ) type = UnsignedInt248Type; - - super( null, mapping, wrapS, wrapT, magFilter, minFilter, format, type, anisotropy ); - - this.isDepthTexture = true; - - this.image = { width: width, height: height }; - - this.magFilter = magFilter !== undefined ? magFilter : NearestFilter; - this.minFilter = minFilter !== undefined ? minFilter : NearestFilter; - - this.flipY = false; - this.generateMipmaps = false; - - } - - - } - - class WebXRManager extends EventDispatcher { - - constructor( renderer, gl ) { - - super(); - - const scope = this; - - let session = null; - let framebufferScaleFactor = 1.0; - - let referenceSpace = null; - let referenceSpaceType = 'local-floor'; - // Set default foveation to maximum. - let foveation = 1.0; - let customReferenceSpace = null; - - let pose = null; - let glBinding = null; - let glProjLayer = null; - let glBaseLayer = null; - let xrFrame = null; - const attributes = gl.getContextAttributes(); - let initialRenderTarget = null; - let newRenderTarget = null; - - const controllers = []; - const controllerInputSources = []; - - const planes = new Set(); - const planesLastChangedTimes = new Map(); - - // - - const cameraL = new PerspectiveCamera(); - cameraL.layers.enable( 1 ); - cameraL.viewport = new Vector4(); - - const cameraR = new PerspectiveCamera(); - cameraR.layers.enable( 2 ); - cameraR.viewport = new Vector4(); - - const cameras = [ cameraL, cameraR ]; - - const cameraVR = new ArrayCamera(); - cameraVR.layers.enable( 1 ); - cameraVR.layers.enable( 2 ); - - let _currentDepthNear = null; - let _currentDepthFar = null; - - // - - this.cameraAutoUpdate = true; - this.enabled = false; - - this.isPresenting = false; - - this.getController = function ( index ) { - - let controller = controllers[ index ]; - - if ( controller === undefined ) { - - controller = new WebXRController(); - controllers[ index ] = controller; - - } - - return controller.getTargetRaySpace(); - - }; - - this.getControllerGrip = function ( index ) { - - let controller = controllers[ index ]; - - if ( controller === undefined ) { - - controller = new WebXRController(); - controllers[ index ] = controller; - - } - - return controller.getGripSpace(); - - }; - - this.getHand = function ( index ) { - - let controller = controllers[ index ]; - - if ( controller === undefined ) { - - controller = new WebXRController(); - controllers[ index ] = controller; - - } - - return controller.getHandSpace(); - - }; - - // - - function onSessionEvent( event ) { - - const controllerIndex = controllerInputSources.indexOf( event.inputSource ); - - if ( controllerIndex === - 1 ) { - - return; - - } - - const controller = controllers[ controllerIndex ]; - - if ( controller !== undefined ) { - - controller.dispatchEvent( { type: event.type, data: event.inputSource } ); - - } - - } - - function onSessionEnd() { - - session.removeEventListener( 'select', onSessionEvent ); - session.removeEventListener( 'selectstart', onSessionEvent ); - session.removeEventListener( 'selectend', onSessionEvent ); - session.removeEventListener( 'squeeze', onSessionEvent ); - session.removeEventListener( 'squeezestart', onSessionEvent ); - session.removeEventListener( 'squeezeend', onSessionEvent ); - session.removeEventListener( 'end', onSessionEnd ); - session.removeEventListener( 'inputsourceschange', onInputSourcesChange ); - - for ( let i = 0; i < controllers.length; i ++ ) { - - const inputSource = controllerInputSources[ i ]; - - if ( inputSource === null ) continue; - - controllerInputSources[ i ] = null; - - controllers[ i ].disconnect( inputSource ); - - } - - _currentDepthNear = null; - _currentDepthFar = null; - - // restore framebuffer/rendering state - - renderer.setRenderTarget( initialRenderTarget ); - - glBaseLayer = null; - glProjLayer = null; - glBinding = null; - session = null; - newRenderTarget = null; - - // - - animation.stop(); - - scope.isPresenting = false; - - scope.dispatchEvent( { type: 'sessionend' } ); - - } - - this.setFramebufferScaleFactor = function ( value ) { - - framebufferScaleFactor = value; - - if ( scope.isPresenting === true ) { - - console.warn( 'THREE.WebXRManager: Cannot change framebuffer scale while presenting.' ); - - } - - }; - - this.setReferenceSpaceType = function ( value ) { - - referenceSpaceType = value; - - if ( scope.isPresenting === true ) { - - console.warn( 'THREE.WebXRManager: Cannot change reference space type while presenting.' ); - - } - - }; - - this.getReferenceSpace = function () { - - return customReferenceSpace || referenceSpace; - - }; - - this.setReferenceSpace = function ( space ) { - - customReferenceSpace = space; - - }; - - this.getBaseLayer = function () { - - return glProjLayer !== null ? glProjLayer : glBaseLayer; - - }; - - this.getBinding = function () { - - return glBinding; - - }; - - this.getFrame = function () { - - return xrFrame; - - }; - - this.getSession = function () { - - return session; - - }; - - this.setSession = async function ( value ) { - - session = value; - - if ( session !== null ) { - - initialRenderTarget = renderer.getRenderTarget(); - - session.addEventListener( 'select', onSessionEvent ); - session.addEventListener( 'selectstart', onSessionEvent ); - session.addEventListener( 'selectend', onSessionEvent ); - session.addEventListener( 'squeeze', onSessionEvent ); - session.addEventListener( 'squeezestart', onSessionEvent ); - session.addEventListener( 'squeezeend', onSessionEvent ); - session.addEventListener( 'end', onSessionEnd ); - session.addEventListener( 'inputsourceschange', onInputSourcesChange ); - - if ( attributes.xrCompatible !== true ) { - - await gl.makeXRCompatible(); - - } - - if ( ( session.renderState.layers === undefined ) || ( renderer.capabilities.isWebGL2 === false ) ) { - - const layerInit = { - antialias: ( session.renderState.layers === undefined ) ? attributes.antialias : true, - alpha: attributes.alpha, - depth: attributes.depth, - stencil: attributes.stencil, - framebufferScaleFactor: framebufferScaleFactor - }; - - glBaseLayer = new XRWebGLLayer( session, gl, layerInit ); - - session.updateRenderState( { baseLayer: glBaseLayer } ); - - newRenderTarget = new WebGLRenderTarget( - glBaseLayer.framebufferWidth, - glBaseLayer.framebufferHeight, - { - format: RGBAFormat, - type: UnsignedByteType, - encoding: renderer.outputEncoding, - stencilBuffer: attributes.stencil - } - ); - - } else { - - let depthFormat = null; - let depthType = null; - let glDepthFormat = null; - - if ( attributes.depth ) { - - glDepthFormat = attributes.stencil ? gl.DEPTH24_STENCIL8 : gl.DEPTH_COMPONENT24; - depthFormat = attributes.stencil ? DepthStencilFormat : DepthFormat; - depthType = attributes.stencil ? UnsignedInt248Type : UnsignedIntType; - - } - - const projectionlayerInit = { - colorFormat: gl.RGBA8, - depthFormat: glDepthFormat, - scaleFactor: framebufferScaleFactor - }; - - glBinding = new XRWebGLBinding( session, gl ); - - glProjLayer = glBinding.createProjectionLayer( projectionlayerInit ); - - session.updateRenderState( { layers: [ glProjLayer ] } ); - - newRenderTarget = new WebGLRenderTarget( - glProjLayer.textureWidth, - glProjLayer.textureHeight, - { - format: RGBAFormat, - type: UnsignedByteType, - depthTexture: new DepthTexture( glProjLayer.textureWidth, glProjLayer.textureHeight, depthType, undefined, undefined, undefined, undefined, undefined, undefined, depthFormat ), - stencilBuffer: attributes.stencil, - encoding: renderer.outputEncoding, - samples: attributes.antialias ? 4 : 0 - } ); - - const renderTargetProperties = renderer.properties.get( newRenderTarget ); - renderTargetProperties.__ignoreDepthValues = glProjLayer.ignoreDepthValues; - - } - - newRenderTarget.isXRRenderTarget = true; // TODO Remove this when possible, see #23278 - - this.setFoveation( foveation ); - - customReferenceSpace = null; - referenceSpace = await session.requestReferenceSpace( referenceSpaceType ); - - animation.setContext( session ); - animation.start(); - - scope.isPresenting = true; - - scope.dispatchEvent( { type: 'sessionstart' } ); - - } - - }; - - function onInputSourcesChange( event ) { - - // Notify disconnected - - for ( let i = 0; i < event.removed.length; i ++ ) { - - const inputSource = event.removed[ i ]; - const index = controllerInputSources.indexOf( inputSource ); - - if ( index >= 0 ) { - - controllerInputSources[ index ] = null; - controllers[ index ].disconnect( inputSource ); - - } - - } - - // Notify connected - - for ( let i = 0; i < event.added.length; i ++ ) { - - const inputSource = event.added[ i ]; - - let controllerIndex = controllerInputSources.indexOf( inputSource ); - - if ( controllerIndex === - 1 ) { - - // Assign input source a controller that currently has no input source - - for ( let i = 0; i < controllers.length; i ++ ) { - - if ( i >= controllerInputSources.length ) { - - controllerInputSources.push( inputSource ); - controllerIndex = i; - break; - - } else if ( controllerInputSources[ i ] === null ) { - - controllerInputSources[ i ] = inputSource; - controllerIndex = i; - break; - - } - - } - - // If all controllers do currently receive input we ignore new ones - - if ( controllerIndex === - 1 ) break; - - } - - const controller = controllers[ controllerIndex ]; - - if ( controller ) { - - controller.connect( inputSource ); - - } - - } - - } - - // - - const cameraLPos = new Vector3(); - const cameraRPos = new Vector3(); - - /** - * Assumes 2 cameras that are parallel and share an X-axis, and that - * the cameras' projection and world matrices have already been set. - * And that near and far planes are identical for both cameras. - * Visualization of this technique: https://computergraphics.stackexchange.com/a/4765 - */ - function setProjectionFromUnion( camera, cameraL, cameraR ) { - - cameraLPos.setFromMatrixPosition( cameraL.matrixWorld ); - cameraRPos.setFromMatrixPosition( cameraR.matrixWorld ); - - const ipd = cameraLPos.distanceTo( cameraRPos ); - - const projL = cameraL.projectionMatrix.elements; - const projR = cameraR.projectionMatrix.elements; - - // VR systems will have identical far and near planes, and - // most likely identical top and bottom frustum extents. - // Use the left camera for these values. - const near = projL[ 14 ] / ( projL[ 10 ] - 1 ); - const far = projL[ 14 ] / ( projL[ 10 ] + 1 ); - const topFov = ( projL[ 9 ] + 1 ) / projL[ 5 ]; - const bottomFov = ( projL[ 9 ] - 1 ) / projL[ 5 ]; - - const leftFov = ( projL[ 8 ] - 1 ) / projL[ 0 ]; - const rightFov = ( projR[ 8 ] + 1 ) / projR[ 0 ]; - const left = near * leftFov; - const right = near * rightFov; - - // Calculate the new camera's position offset from the - // left camera. xOffset should be roughly half `ipd`. - const zOffset = ipd / ( - leftFov + rightFov ); - const xOffset = zOffset * - leftFov; - - // TODO: Better way to apply this offset? - cameraL.matrixWorld.decompose( camera.position, camera.quaternion, camera.scale ); - camera.translateX( xOffset ); - camera.translateZ( zOffset ); - camera.matrixWorld.compose( camera.position, camera.quaternion, camera.scale ); - camera.matrixWorldInverse.copy( camera.matrixWorld ).invert(); - - // Find the union of the frustum values of the cameras and scale - // the values so that the near plane's position does not change in world space, - // although must now be relative to the new union camera. - const near2 = near + zOffset; - const far2 = far + zOffset; - const left2 = left - xOffset; - const right2 = right + ( ipd - xOffset ); - const top2 = topFov * far / far2 * near2; - const bottom2 = bottomFov * far / far2 * near2; - - camera.projectionMatrix.makePerspective( left2, right2, top2, bottom2, near2, far2 ); - - } - - function updateCamera( camera, parent ) { - - if ( parent === null ) { - - camera.matrixWorld.copy( camera.matrix ); - - } else { - - camera.matrixWorld.multiplyMatrices( parent.matrixWorld, camera.matrix ); - - } - - camera.matrixWorldInverse.copy( camera.matrixWorld ).invert(); - - } - - this.updateCamera = function ( camera ) { - - if ( session === null ) return; - - cameraVR.near = cameraR.near = cameraL.near = camera.near; - cameraVR.far = cameraR.far = cameraL.far = camera.far; - - if ( _currentDepthNear !== cameraVR.near || _currentDepthFar !== cameraVR.far ) { - - // Note that the new renderState won't apply until the next frame. See #18320 - - session.updateRenderState( { - depthNear: cameraVR.near, - depthFar: cameraVR.far - } ); - - _currentDepthNear = cameraVR.near; - _currentDepthFar = cameraVR.far; - - } - - const parent = camera.parent; - const cameras = cameraVR.cameras; - - updateCamera( cameraVR, parent ); - - for ( let i = 0; i < cameras.length; i ++ ) { - - updateCamera( cameras[ i ], parent ); - - } - - cameraVR.matrixWorld.decompose( cameraVR.position, cameraVR.quaternion, cameraVR.scale ); - - // update user camera and its children - - camera.matrix.copy( cameraVR.matrix ); - camera.matrix.decompose( camera.position, camera.quaternion, camera.scale ); - - const children = camera.children; - - for ( let i = 0, l = children.length; i < l; i ++ ) { - - children[ i ].updateMatrixWorld( true ); - - } - - // update projection matrix for proper view frustum culling - - if ( cameras.length === 2 ) { - - setProjectionFromUnion( cameraVR, cameraL, cameraR ); - - } else { - - // assume single camera setup (AR) - - cameraVR.projectionMatrix.copy( cameraL.projectionMatrix ); - - } - - }; - - this.getCamera = function () { - - return cameraVR; - - }; - - this.getFoveation = function () { - - if ( glProjLayer === null && glBaseLayer === null ) { - - return undefined; - - } - - return foveation; - - }; - - this.setFoveation = function ( value ) { - - // 0 = no foveation = full resolution - // 1 = maximum foveation = the edges render at lower resolution - - foveation = value; - - if ( glProjLayer !== null ) { - - glProjLayer.fixedFoveation = value; - - } - - if ( glBaseLayer !== null && glBaseLayer.fixedFoveation !== undefined ) { - - glBaseLayer.fixedFoveation = value; - - } - - }; - - this.getPlanes = function () { - - return planes; - - }; - - // Animation Loop - - let onAnimationFrameCallback = null; - - function onAnimationFrame( time, frame ) { - - pose = frame.getViewerPose( customReferenceSpace || referenceSpace ); - xrFrame = frame; - - if ( pose !== null ) { - - const views = pose.views; - - if ( glBaseLayer !== null ) { - - renderer.setRenderTargetFramebuffer( newRenderTarget, glBaseLayer.framebuffer ); - renderer.setRenderTarget( newRenderTarget ); - - } - - let cameraVRNeedsUpdate = false; - - // check if it's necessary to rebuild cameraVR's camera list - - if ( views.length !== cameraVR.cameras.length ) { - - cameraVR.cameras.length = 0; - cameraVRNeedsUpdate = true; - - } - - for ( let i = 0; i < views.length; i ++ ) { - - const view = views[ i ]; - - let viewport = null; - - if ( glBaseLayer !== null ) { - - viewport = glBaseLayer.getViewport( view ); - - } else { - - const glSubImage = glBinding.getViewSubImage( glProjLayer, view ); - viewport = glSubImage.viewport; - - // For side-by-side projection, we only produce a single texture for both eyes. - if ( i === 0 ) { - - renderer.setRenderTargetTextures( - newRenderTarget, - glSubImage.colorTexture, - glProjLayer.ignoreDepthValues ? undefined : glSubImage.depthStencilTexture ); - - renderer.setRenderTarget( newRenderTarget ); - - } - - } - - let camera = cameras[ i ]; - - if ( camera === undefined ) { - - camera = new PerspectiveCamera(); - camera.layers.enable( i ); - camera.viewport = new Vector4(); - cameras[ i ] = camera; - - } - - camera.matrix.fromArray( view.transform.matrix ); - camera.projectionMatrix.fromArray( view.projectionMatrix ); - camera.viewport.set( viewport.x, viewport.y, viewport.width, viewport.height ); - - if ( i === 0 ) { - - cameraVR.matrix.copy( camera.matrix ); - - } - - if ( cameraVRNeedsUpdate === true ) { - - cameraVR.cameras.push( camera ); - - } - - } - - } - - // - - for ( let i = 0; i < controllers.length; i ++ ) { - - const inputSource = controllerInputSources[ i ]; - const controller = controllers[ i ]; - - if ( inputSource !== null && controller !== undefined ) { - - controller.update( inputSource, frame, customReferenceSpace || referenceSpace ); - - } - - } - - if ( onAnimationFrameCallback ) onAnimationFrameCallback( time, frame ); - - if ( frame.detectedPlanes ) { - - scope.dispatchEvent( { type: 'planesdetected', data: frame.detectedPlanes } ); - - let planesToRemove = null; - - for ( const plane of planes ) { - - if ( ! frame.detectedPlanes.has( plane ) ) { - - if ( planesToRemove === null ) { - - planesToRemove = []; - - } - - planesToRemove.push( plane ); - - } - - } - - if ( planesToRemove !== null ) { - - for ( const plane of planesToRemove ) { - - planes.delete( plane ); - planesLastChangedTimes.delete( plane ); - scope.dispatchEvent( { type: 'planeremoved', data: plane } ); - - } - - } - - for ( const plane of frame.detectedPlanes ) { - - if ( ! planes.has( plane ) ) { - - planes.add( plane ); - planesLastChangedTimes.set( plane, frame.lastChangedTime ); - scope.dispatchEvent( { type: 'planeadded', data: plane } ); - - } else { - - const lastKnownTime = planesLastChangedTimes.get( plane ); - - if ( plane.lastChangedTime > lastKnownTime ) { - - planesLastChangedTimes.set( plane, plane.lastChangedTime ); - scope.dispatchEvent( { type: 'planechanged', data: plane } ); - - } - - } - - } - - } - - xrFrame = null; - - } - - const animation = new WebGLAnimation(); - - animation.setAnimationLoop( onAnimationFrame ); - - this.setAnimationLoop = function ( callback ) { - - onAnimationFrameCallback = callback; - - }; - - this.dispose = function () {}; - - } - - } - - function WebGLMaterials( renderer, properties ) { - - function refreshFogUniforms( uniforms, fog ) { - - fog.color.getRGB( uniforms.fogColor.value, getUnlitUniformColorSpace( renderer ) ); - - if ( fog.isFog ) { - - uniforms.fogNear.value = fog.near; - uniforms.fogFar.value = fog.far; - - } else if ( fog.isFogExp2 ) { - - uniforms.fogDensity.value = fog.density; - - } - - } - - function refreshMaterialUniforms( uniforms, material, pixelRatio, height, transmissionRenderTarget ) { - - if ( material.isMeshBasicMaterial ) { - - refreshUniformsCommon( uniforms, material ); - - } else if ( material.isMeshLambertMaterial ) { - - refreshUniformsCommon( uniforms, material ); - - } else if ( material.isMeshToonMaterial ) { - - refreshUniformsCommon( uniforms, material ); - refreshUniformsToon( uniforms, material ); - - } else if ( material.isMeshPhongMaterial ) { - - refreshUniformsCommon( uniforms, material ); - refreshUniformsPhong( uniforms, material ); - - } else if ( material.isMeshStandardMaterial ) { - - refreshUniformsCommon( uniforms, material ); - refreshUniformsStandard( uniforms, material ); - - if ( material.isMeshPhysicalMaterial ) { - - refreshUniformsPhysical( uniforms, material, transmissionRenderTarget ); - - } - - } else if ( material.isMeshMatcapMaterial ) { - - refreshUniformsCommon( uniforms, material ); - refreshUniformsMatcap( uniforms, material ); - - } else if ( material.isMeshDepthMaterial ) { - - refreshUniformsCommon( uniforms, material ); - - } else if ( material.isMeshDistanceMaterial ) { - - refreshUniformsCommon( uniforms, material ); - refreshUniformsDistance( uniforms, material ); - - } else if ( material.isMeshNormalMaterial ) { - - refreshUniformsCommon( uniforms, material ); - - } else if ( material.isLineBasicMaterial ) { - - refreshUniformsLine( uniforms, material ); - - if ( material.isLineDashedMaterial ) { - - refreshUniformsDash( uniforms, material ); - - } - - } else if ( material.isPointsMaterial ) { - - refreshUniformsPoints( uniforms, material, pixelRatio, height ); - - } else if ( material.isSpriteMaterial ) { - - refreshUniformsSprites( uniforms, material ); - - } else if ( material.isShadowMaterial ) { - - uniforms.color.value.copy( material.color ); - uniforms.opacity.value = material.opacity; - - } else if ( material.isShaderMaterial ) { - - material.uniformsNeedUpdate = false; // #15581 - - } - - } - - function refreshUniformsCommon( uniforms, material ) { - - uniforms.opacity.value = material.opacity; - - if ( material.color ) { - - uniforms.diffuse.value.copy( material.color ); - - } - - if ( material.emissive ) { - - uniforms.emissive.value.copy( material.emissive ).multiplyScalar( material.emissiveIntensity ); - - } - - if ( material.map ) { - - uniforms.map.value = material.map; - - } - - if ( material.alphaMap ) { - - uniforms.alphaMap.value = material.alphaMap; - - } - - if ( material.bumpMap ) { - - uniforms.bumpMap.value = material.bumpMap; - uniforms.bumpScale.value = material.bumpScale; - if ( material.side === BackSide ) uniforms.bumpScale.value *= - 1; - - } - - if ( material.displacementMap ) { - - uniforms.displacementMap.value = material.displacementMap; - uniforms.displacementScale.value = material.displacementScale; - uniforms.displacementBias.value = material.displacementBias; - - } - - if ( material.emissiveMap ) { - - uniforms.emissiveMap.value = material.emissiveMap; - - } - - if ( material.normalMap ) { - - uniforms.normalMap.value = material.normalMap; - uniforms.normalScale.value.copy( material.normalScale ); - if ( material.side === BackSide ) uniforms.normalScale.value.negate(); - - } - - if ( material.specularMap ) { - - uniforms.specularMap.value = material.specularMap; - - } - - if ( material.alphaTest > 0 ) { - - uniforms.alphaTest.value = material.alphaTest; - - } - - const envMap = properties.get( material ).envMap; - - if ( envMap ) { - - uniforms.envMap.value = envMap; - - uniforms.flipEnvMap.value = ( envMap.isCubeTexture && envMap.isRenderTargetTexture === false ) ? - 1 : 1; - - uniforms.reflectivity.value = material.reflectivity; - uniforms.ior.value = material.ior; - uniforms.refractionRatio.value = material.refractionRatio; - - } - - if ( material.lightMap ) { - - uniforms.lightMap.value = material.lightMap; - - // artist-friendly light intensity scaling factor - const scaleFactor = ( renderer.useLegacyLights === true ) ? Math.PI : 1; - - uniforms.lightMapIntensity.value = material.lightMapIntensity * scaleFactor; - - } - - if ( material.aoMap ) { - - uniforms.aoMap.value = material.aoMap; - uniforms.aoMapIntensity.value = material.aoMapIntensity; - - } - - // uv repeat and offset setting priorities - // 1. color map - // 2. specular map - // 3. displacementMap map - // 4. normal map - // 5. bump map - // 6. roughnessMap map - // 7. metalnessMap map - // 8. alphaMap map - // 9. emissiveMap map - // 10. clearcoat map - // 11. clearcoat normal map - // 12. clearcoat roughnessMap map - // 13. iridescence map - // 14. iridescence thickness map - // 15. specular intensity map - // 16. specular tint map - // 17. transmission map - // 18. thickness map - - let uvScaleMap; - - if ( material.map ) { - - uvScaleMap = material.map; - - } else if ( material.specularMap ) { - - uvScaleMap = material.specularMap; - - } else if ( material.displacementMap ) { - - uvScaleMap = material.displacementMap; - - } else if ( material.normalMap ) { - - uvScaleMap = material.normalMap; - - } else if ( material.bumpMap ) { - - uvScaleMap = material.bumpMap; - - } else if ( material.roughnessMap ) { - - uvScaleMap = material.roughnessMap; - - } else if ( material.metalnessMap ) { - - uvScaleMap = material.metalnessMap; - - } else if ( material.alphaMap ) { - - uvScaleMap = material.alphaMap; - - } else if ( material.emissiveMap ) { - - uvScaleMap = material.emissiveMap; - - } else if ( material.clearcoatMap ) { - - uvScaleMap = material.clearcoatMap; - - } else if ( material.clearcoatNormalMap ) { - - uvScaleMap = material.clearcoatNormalMap; - - } else if ( material.clearcoatRoughnessMap ) { - - uvScaleMap = material.clearcoatRoughnessMap; - - } else if ( material.iridescenceMap ) { - - uvScaleMap = material.iridescenceMap; - - } else if ( material.iridescenceThicknessMap ) { - - uvScaleMap = material.iridescenceThicknessMap; - - } else if ( material.specularIntensityMap ) { - - uvScaleMap = material.specularIntensityMap; - - } else if ( material.specularColorMap ) { - - uvScaleMap = material.specularColorMap; - - } else if ( material.transmissionMap ) { - - uvScaleMap = material.transmissionMap; - - } else if ( material.thicknessMap ) { - - uvScaleMap = material.thicknessMap; - - } else if ( material.sheenColorMap ) { - - uvScaleMap = material.sheenColorMap; - - } else if ( material.sheenRoughnessMap ) { - - uvScaleMap = material.sheenRoughnessMap; - - } - - if ( uvScaleMap !== undefined ) { - - // backwards compatibility - if ( uvScaleMap.isWebGLRenderTarget ) { - - uvScaleMap = uvScaleMap.texture; - - } - - if ( uvScaleMap.matrixAutoUpdate === true ) { - - uvScaleMap.updateMatrix(); - - } - - uniforms.uvTransform.value.copy( uvScaleMap.matrix ); - - } - - // uv repeat and offset setting priorities for uv2 - // 1. ao map - // 2. light map - - let uv2ScaleMap; - - if ( material.aoMap ) { - - uv2ScaleMap = material.aoMap; - - } else if ( material.lightMap ) { - - uv2ScaleMap = material.lightMap; - - } - - if ( uv2ScaleMap !== undefined ) { - - // backwards compatibility - if ( uv2ScaleMap.isWebGLRenderTarget ) { - - uv2ScaleMap = uv2ScaleMap.texture; - - } - - if ( uv2ScaleMap.matrixAutoUpdate === true ) { - - uv2ScaleMap.updateMatrix(); - - } - - uniforms.uv2Transform.value.copy( uv2ScaleMap.matrix ); - - } - - } - - function refreshUniformsLine( uniforms, material ) { - - uniforms.diffuse.value.copy( material.color ); - uniforms.opacity.value = material.opacity; - - } - - function refreshUniformsDash( uniforms, material ) { - - uniforms.dashSize.value = material.dashSize; - uniforms.totalSize.value = material.dashSize + material.gapSize; - uniforms.scale.value = material.scale; - - } - - function refreshUniformsPoints( uniforms, material, pixelRatio, height ) { - - uniforms.diffuse.value.copy( material.color ); - uniforms.opacity.value = material.opacity; - uniforms.size.value = material.size * pixelRatio; - uniforms.scale.value = height * 0.5; - - if ( material.map ) { - - uniforms.map.value = material.map; - - } - - if ( material.alphaMap ) { - - uniforms.alphaMap.value = material.alphaMap; - - } - - if ( material.alphaTest > 0 ) { - - uniforms.alphaTest.value = material.alphaTest; - - } - - // uv repeat and offset setting priorities - // 1. color map - // 2. alpha map - - let uvScaleMap; - - if ( material.map ) { - - uvScaleMap = material.map; - - } else if ( material.alphaMap ) { - - uvScaleMap = material.alphaMap; - - } - - if ( uvScaleMap !== undefined ) { - - if ( uvScaleMap.matrixAutoUpdate === true ) { - - uvScaleMap.updateMatrix(); - - } - - uniforms.uvTransform.value.copy( uvScaleMap.matrix ); - - } - - } - - function refreshUniformsSprites( uniforms, material ) { - - uniforms.diffuse.value.copy( material.color ); - uniforms.opacity.value = material.opacity; - uniforms.rotation.value = material.rotation; - - if ( material.map ) { - - uniforms.map.value = material.map; - - } - - if ( material.alphaMap ) { - - uniforms.alphaMap.value = material.alphaMap; - - } - - if ( material.alphaTest > 0 ) { - - uniforms.alphaTest.value = material.alphaTest; - - } - - // uv repeat and offset setting priorities - // 1. color map - // 2. alpha map - - let uvScaleMap; - - if ( material.map ) { - - uvScaleMap = material.map; - - } else if ( material.alphaMap ) { - - uvScaleMap = material.alphaMap; - - } - - if ( uvScaleMap !== undefined ) { - - if ( uvScaleMap.matrixAutoUpdate === true ) { - - uvScaleMap.updateMatrix(); - - } - - uniforms.uvTransform.value.copy( uvScaleMap.matrix ); - - } - - } - - function refreshUniformsPhong( uniforms, material ) { - - uniforms.specular.value.copy( material.specular ); - uniforms.shininess.value = Math.max( material.shininess, 1e-4 ); // to prevent pow( 0.0, 0.0 ) - - } - - function refreshUniformsToon( uniforms, material ) { - - if ( material.gradientMap ) { - - uniforms.gradientMap.value = material.gradientMap; - - } - - } - - function refreshUniformsStandard( uniforms, material ) { - - uniforms.roughness.value = material.roughness; - uniforms.metalness.value = material.metalness; - - if ( material.roughnessMap ) { - - uniforms.roughnessMap.value = material.roughnessMap; - - } - - if ( material.metalnessMap ) { - - uniforms.metalnessMap.value = material.metalnessMap; - - } - - const envMap = properties.get( material ).envMap; - - if ( envMap ) { - - //uniforms.envMap.value = material.envMap; // part of uniforms common - uniforms.envMapIntensity.value = material.envMapIntensity; - - } - - } - - function refreshUniformsPhysical( uniforms, material, transmissionRenderTarget ) { - - uniforms.ior.value = material.ior; // also part of uniforms common - - if ( material.sheen > 0 ) { - - uniforms.sheenColor.value.copy( material.sheenColor ).multiplyScalar( material.sheen ); - - uniforms.sheenRoughness.value = material.sheenRoughness; - - if ( material.sheenColorMap ) { - - uniforms.sheenColorMap.value = material.sheenColorMap; - - } - - if ( material.sheenRoughnessMap ) { - - uniforms.sheenRoughnessMap.value = material.sheenRoughnessMap; - - } - - } - - if ( material.clearcoat > 0 ) { - - uniforms.clearcoat.value = material.clearcoat; - uniforms.clearcoatRoughness.value = material.clearcoatRoughness; - - if ( material.clearcoatMap ) { - - uniforms.clearcoatMap.value = material.clearcoatMap; - - } - - if ( material.clearcoatRoughnessMap ) { - - uniforms.clearcoatRoughnessMap.value = material.clearcoatRoughnessMap; - - } - - if ( material.clearcoatNormalMap ) { - - uniforms.clearcoatNormalScale.value.copy( material.clearcoatNormalScale ); - uniforms.clearcoatNormalMap.value = material.clearcoatNormalMap; - - if ( material.side === BackSide ) { - - uniforms.clearcoatNormalScale.value.negate(); - - } - - } - - } - - if ( material.iridescence > 0 ) { - - uniforms.iridescence.value = material.iridescence; - uniforms.iridescenceIOR.value = material.iridescenceIOR; - uniforms.iridescenceThicknessMinimum.value = material.iridescenceThicknessRange[ 0 ]; - uniforms.iridescenceThicknessMaximum.value = material.iridescenceThicknessRange[ 1 ]; - - if ( material.iridescenceMap ) { - - uniforms.iridescenceMap.value = material.iridescenceMap; - - } - - if ( material.iridescenceThicknessMap ) { - - uniforms.iridescenceThicknessMap.value = material.iridescenceThicknessMap; - - } - - } - - if ( material.transmission > 0 ) { - - uniforms.transmission.value = material.transmission; - uniforms.transmissionSamplerMap.value = transmissionRenderTarget.texture; - uniforms.transmissionSamplerSize.value.set( transmissionRenderTarget.width, transmissionRenderTarget.height ); - - if ( material.transmissionMap ) { - - uniforms.transmissionMap.value = material.transmissionMap; - - } - - uniforms.thickness.value = material.thickness; - - if ( material.thicknessMap ) { - - uniforms.thicknessMap.value = material.thicknessMap; - - } - - uniforms.attenuationDistance.value = material.attenuationDistance; - uniforms.attenuationColor.value.copy( material.attenuationColor ); - - } - - uniforms.specularIntensity.value = material.specularIntensity; - uniforms.specularColor.value.copy( material.specularColor ); - - if ( material.specularIntensityMap ) { - - uniforms.specularIntensityMap.value = material.specularIntensityMap; - - } - - if ( material.specularColorMap ) { - - uniforms.specularColorMap.value = material.specularColorMap; - - } - - } - - function refreshUniformsMatcap( uniforms, material ) { - - if ( material.matcap ) { - - uniforms.matcap.value = material.matcap; - - } - - } - - function refreshUniformsDistance( uniforms, material ) { - - uniforms.referencePosition.value.copy( material.referencePosition ); - uniforms.nearDistance.value = material.nearDistance; - uniforms.farDistance.value = material.farDistance; - - } - - return { - refreshFogUniforms: refreshFogUniforms, - refreshMaterialUniforms: refreshMaterialUniforms - }; - - } - - function WebGLUniformsGroups( gl, info, capabilities, state ) { - - let buffers = {}; - let updateList = {}; - let allocatedBindingPoints = []; - - const maxBindingPoints = ( capabilities.isWebGL2 ) ? gl.getParameter( gl.MAX_UNIFORM_BUFFER_BINDINGS ) : 0; // binding points are global whereas block indices are per shader program - - function bind( uniformsGroup, program ) { - - const webglProgram = program.program; - state.uniformBlockBinding( uniformsGroup, webglProgram ); - - } - - function update( uniformsGroup, program ) { - - let buffer = buffers[ uniformsGroup.id ]; - - if ( buffer === undefined ) { - - prepareUniformsGroup( uniformsGroup ); - - buffer = createBuffer( uniformsGroup ); - buffers[ uniformsGroup.id ] = buffer; - - uniformsGroup.addEventListener( 'dispose', onUniformsGroupsDispose ); - - } - - // ensure to update the binding points/block indices mapping for this program - - const webglProgram = program.program; - state.updateUBOMapping( uniformsGroup, webglProgram ); - - // update UBO once per frame - - const frame = info.render.frame; - - if ( updateList[ uniformsGroup.id ] !== frame ) { - - updateBufferData( uniformsGroup ); - - updateList[ uniformsGroup.id ] = frame; - - } - - } - - function createBuffer( uniformsGroup ) { - - // the setup of an UBO is independent of a particular shader program but global - - const bindingPointIndex = allocateBindingPointIndex(); - uniformsGroup.__bindingPointIndex = bindingPointIndex; - - const buffer = gl.createBuffer(); - const size = uniformsGroup.__size; - const usage = uniformsGroup.usage; - - gl.bindBuffer( gl.UNIFORM_BUFFER, buffer ); - gl.bufferData( gl.UNIFORM_BUFFER, size, usage ); - gl.bindBuffer( gl.UNIFORM_BUFFER, null ); - gl.bindBufferBase( gl.UNIFORM_BUFFER, bindingPointIndex, buffer ); - - return buffer; - - } - - function allocateBindingPointIndex() { - - for ( let i = 0; i < maxBindingPoints; i ++ ) { - - if ( allocatedBindingPoints.indexOf( i ) === - 1 ) { - - allocatedBindingPoints.push( i ); - return i; - - } - - } - - console.error( 'THREE.WebGLRenderer: Maximum number of simultaneously usable uniforms groups reached.' ); - - return 0; - - } - - function updateBufferData( uniformsGroup ) { - - const buffer = buffers[ uniformsGroup.id ]; - const uniforms = uniformsGroup.uniforms; - const cache = uniformsGroup.__cache; - - gl.bindBuffer( gl.UNIFORM_BUFFER, buffer ); - - for ( let i = 0, il = uniforms.length; i < il; i ++ ) { - - const uniform = uniforms[ i ]; - - // partly update the buffer if necessary - - if ( hasUniformChanged( uniform, i, cache ) === true ) { - - const offset = uniform.__offset; - - const values = Array.isArray( uniform.value ) ? uniform.value : [ uniform.value ]; - - let arrayOffset = 0; - - for ( let i = 0; i < values.length; i ++ ) { - - const value = values[ i ]; - - const info = getUniformSize( value ); - - if ( typeof value === 'number' ) { - - uniform.__data[ 0 ] = value; - gl.bufferSubData( gl.UNIFORM_BUFFER, offset + arrayOffset, uniform.__data ); - - } else if ( value.isMatrix3 ) { - - // manually converting 3x3 to 3x4 - - uniform.__data[ 0 ] = value.elements[ 0 ]; - uniform.__data[ 1 ] = value.elements[ 1 ]; - uniform.__data[ 2 ] = value.elements[ 2 ]; - uniform.__data[ 3 ] = value.elements[ 0 ]; - uniform.__data[ 4 ] = value.elements[ 3 ]; - uniform.__data[ 5 ] = value.elements[ 4 ]; - uniform.__data[ 6 ] = value.elements[ 5 ]; - uniform.__data[ 7 ] = value.elements[ 0 ]; - uniform.__data[ 8 ] = value.elements[ 6 ]; - uniform.__data[ 9 ] = value.elements[ 7 ]; - uniform.__data[ 10 ] = value.elements[ 8 ]; - uniform.__data[ 11 ] = value.elements[ 0 ]; - - } else { - - value.toArray( uniform.__data, arrayOffset ); - - arrayOffset += info.storage / Float32Array.BYTES_PER_ELEMENT; - - } - - } - - gl.bufferSubData( gl.UNIFORM_BUFFER, offset, uniform.__data ); - - } - - } - - gl.bindBuffer( gl.UNIFORM_BUFFER, null ); - - } - - function hasUniformChanged( uniform, index, cache ) { - - const value = uniform.value; - - if ( cache[ index ] === undefined ) { - - // cache entry does not exist so far - - if ( typeof value === 'number' ) { - - cache[ index ] = value; - - } else { - - const values = Array.isArray( value ) ? value : [ value ]; - - const tempValues = []; - - for ( let i = 0; i < values.length; i ++ ) { - - tempValues.push( values[ i ].clone() ); - - } - - cache[ index ] = tempValues; - - } - - return true; - - } else { - - // compare current value with cached entry - - if ( typeof value === 'number' ) { - - if ( cache[ index ] !== value ) { - - cache[ index ] = value; - return true; - - } - - } else { - - const cachedObjects = Array.isArray( cache[ index ] ) ? cache[ index ] : [ cache[ index ] ]; - const values = Array.isArray( value ) ? value : [ value ]; - - for ( let i = 0; i < cachedObjects.length; i ++ ) { - - const cachedObject = cachedObjects[ i ]; - - if ( cachedObject.equals( values[ i ] ) === false ) { - - cachedObject.copy( values[ i ] ); - return true; - - } - - } - - } - - } - - return false; - - } - - function prepareUniformsGroup( uniformsGroup ) { - - // determine total buffer size according to the STD140 layout - // Hint: STD140 is the only supported layout in WebGL 2 - - const uniforms = uniformsGroup.uniforms; - - let offset = 0; // global buffer offset in bytes - const chunkSize = 16; // size of a chunk in bytes - let chunkOffset = 0; // offset within a single chunk in bytes - - for ( let i = 0, l = uniforms.length; i < l; i ++ ) { - - const uniform = uniforms[ i ]; - - const infos = { - boundary: 0, // bytes - storage: 0 // bytes - }; - - const values = Array.isArray( uniform.value ) ? uniform.value : [ uniform.value ]; - - for ( let j = 0, jl = values.length; j < jl; j ++ ) { - - const value = values[ j ]; - - const info = getUniformSize( value ); - - infos.boundary += info.boundary; - infos.storage += info.storage; - - } - - // the following two properties will be used for partial buffer updates - - uniform.__data = new Float32Array( infos.storage / Float32Array.BYTES_PER_ELEMENT ); - uniform.__offset = offset; - - // - - if ( i > 0 ) { - - chunkOffset = offset % chunkSize; - - const remainingSizeInChunk = chunkSize - chunkOffset; - - // check for chunk overflow - - if ( chunkOffset !== 0 && ( remainingSizeInChunk - infos.boundary ) < 0 ) { - - // add padding and adjust offset - - offset += ( chunkSize - chunkOffset ); - uniform.__offset = offset; - - } - - } - - offset += infos.storage; - - } - - // ensure correct final padding - - chunkOffset = offset % chunkSize; - - if ( chunkOffset > 0 ) offset += ( chunkSize - chunkOffset ); - - // - - uniformsGroup.__size = offset; - uniformsGroup.__cache = {}; - - return this; - - } - - function getUniformSize( value ) { - - const info = { - boundary: 0, // bytes - storage: 0 // bytes - }; - - // determine sizes according to STD140 - - if ( typeof value === 'number' ) { - - // float/int - - info.boundary = 4; - info.storage = 4; - - } else if ( value.isVector2 ) { - - // vec2 - - info.boundary = 8; - info.storage = 8; - - } else if ( value.isVector3 || value.isColor ) { - - // vec3 - - info.boundary = 16; - info.storage = 12; // evil: vec3 must start on a 16-byte boundary but it only consumes 12 bytes - - } else if ( value.isVector4 ) { - - // vec4 - - info.boundary = 16; - info.storage = 16; - - } else if ( value.isMatrix3 ) { - - // mat3 (in STD140 a 3x3 matrix is represented as 3x4) - - info.boundary = 48; - info.storage = 48; - - } else if ( value.isMatrix4 ) { - - // mat4 - - info.boundary = 64; - info.storage = 64; - - } else if ( value.isTexture ) { - - console.warn( 'THREE.WebGLRenderer: Texture samplers can not be part of an uniforms group.' ); - - } else { - - console.warn( 'THREE.WebGLRenderer: Unsupported uniform value type.', value ); - - } - - return info; - - } - - function onUniformsGroupsDispose( event ) { - - const uniformsGroup = event.target; - - uniformsGroup.removeEventListener( 'dispose', onUniformsGroupsDispose ); - - const index = allocatedBindingPoints.indexOf( uniformsGroup.__bindingPointIndex ); - allocatedBindingPoints.splice( index, 1 ); - - gl.deleteBuffer( buffers[ uniformsGroup.id ] ); - - delete buffers[ uniformsGroup.id ]; - delete updateList[ uniformsGroup.id ]; - - } - - function dispose() { - - for ( const id in buffers ) { - - gl.deleteBuffer( buffers[ id ] ); - - } - - allocatedBindingPoints = []; - buffers = {}; - updateList = {}; - - } - - return { - - bind: bind, - update: update, - - dispose: dispose - - }; - - } - - function createCanvasElement() { - - const canvas = createElementNS( 'canvas' ); - canvas.style.display = 'block'; - return canvas; - - } - - function WebGLRenderer( parameters = {} ) { - - this.isWebGLRenderer = true; - - const _canvas = parameters.canvas !== undefined ? parameters.canvas : createCanvasElement(), - _context = parameters.context !== undefined ? parameters.context : null, - - _depth = parameters.depth !== undefined ? parameters.depth : true, - _stencil = parameters.stencil !== undefined ? parameters.stencil : true, - _antialias = parameters.antialias !== undefined ? parameters.antialias : false, - _premultipliedAlpha = parameters.premultipliedAlpha !== undefined ? parameters.premultipliedAlpha : true, - _preserveDrawingBuffer = parameters.preserveDrawingBuffer !== undefined ? parameters.preserveDrawingBuffer : false, - _powerPreference = parameters.powerPreference !== undefined ? parameters.powerPreference : 'default', - _failIfMajorPerformanceCaveat = parameters.failIfMajorPerformanceCaveat !== undefined ? parameters.failIfMajorPerformanceCaveat : false; - - let _alpha; - - if ( _context !== null ) { - - _alpha = _context.getContextAttributes().alpha; - - } else { - - _alpha = parameters.alpha !== undefined ? parameters.alpha : false; - - } - - let currentRenderList = null; - let currentRenderState = null; - - // render() can be called from within a callback triggered by another render. - // We track this so that the nested render call gets its list and state isolated from the parent render call. - - const renderListStack = []; - const renderStateStack = []; - - // public properties - - this.domElement = _canvas; - - // Debug configuration container - this.debug = { - - /** - * Enables error checking and reporting when shader programs are being compiled - * @type {boolean} - */ - checkShaderErrors: true - }; - - // clearing - - this.autoClear = true; - this.autoClearColor = true; - this.autoClearDepth = true; - this.autoClearStencil = true; - - // scene graph - - this.sortObjects = true; - - // user-defined clipping - - this.clippingPlanes = []; - this.localClippingEnabled = false; - - // physically based shading - - this.outputEncoding = LinearEncoding; - - // physical lights - - this.useLegacyLights = true; - - // tone mapping - - this.toneMapping = NoToneMapping; - this.toneMappingExposure = 1.0; - - // internal properties - - const _this = this; - - let _isContextLost = false; - - // internal state cache - - let _currentActiveCubeFace = 0; - let _currentActiveMipmapLevel = 0; - let _currentRenderTarget = null; - let _currentMaterialId = - 1; - - let _currentCamera = null; - - const _currentViewport = new Vector4(); - const _currentScissor = new Vector4(); - let _currentScissorTest = null; - - // - - let _width = _canvas.width; - let _height = _canvas.height; - - let _pixelRatio = 1; - let _opaqueSort = null; - let _transparentSort = null; - - const _viewport = new Vector4( 0, 0, _width, _height ); - const _scissor = new Vector4( 0, 0, _width, _height ); - let _scissorTest = false; - - // frustum - - const _frustum = new Frustum(); - - // clipping - - let _clippingEnabled = false; - let _localClippingEnabled = false; - - // transmission - - let _transmissionRenderTarget = null; - - // camera matrices cache - - const _projScreenMatrix = new Matrix4(); - - const _vector3 = new Vector3(); - - const _emptyScene = { background: null, fog: null, environment: null, overrideMaterial: null, isScene: true }; - - function getTargetPixelRatio() { - - return _currentRenderTarget === null ? _pixelRatio : 1; - - } - - // initialize - - let _gl = _context; - - function getContext( contextNames, contextAttributes ) { - - for ( let i = 0; i < contextNames.length; i ++ ) { - - const contextName = contextNames[ i ]; - const context = _canvas.getContext( contextName, contextAttributes ); - if ( context !== null ) return context; - - } - - return null; - - } - - try { - - const contextAttributes = { - alpha: true, - depth: _depth, - stencil: _stencil, - antialias: _antialias, - premultipliedAlpha: _premultipliedAlpha, - preserveDrawingBuffer: _preserveDrawingBuffer, - powerPreference: _powerPreference, - failIfMajorPerformanceCaveat: _failIfMajorPerformanceCaveat - }; - - // OffscreenCanvas does not have setAttribute, see #22811 - if ( 'setAttribute' in _canvas ) _canvas.setAttribute( 'data-engine', `three.js r${REVISION}` ); - - // event listeners must be registered before WebGL context is created, see #12753 - _canvas.addEventListener( 'webglcontextlost', onContextLost, false ); - _canvas.addEventListener( 'webglcontextrestored', onContextRestore, false ); - _canvas.addEventListener( 'webglcontextcreationerror', onContextCreationError, false ); - - if ( _gl === null ) { - - const contextNames = [ 'webgl2', 'webgl', 'experimental-webgl' ]; - - if ( _this.isWebGL1Renderer === true ) { - - contextNames.shift(); - - } - - _gl = getContext( contextNames, contextAttributes ); - - if ( _gl === null ) { - - if ( getContext( contextNames ) ) { - - throw new Error( 'Error creating WebGL context with your selected attributes.' ); - - } else { - - throw new Error( 'Error creating WebGL context.' ); - - } - - } - - } - - // Some experimental-webgl implementations do not have getShaderPrecisionFormat - - if ( _gl.getShaderPrecisionFormat === undefined ) { - - _gl.getShaderPrecisionFormat = function () { - - return { 'rangeMin': 1, 'rangeMax': 1, 'precision': 1 }; - - }; - - } - - } catch ( error ) { - - console.error( 'THREE.WebGLRenderer: ' + error.message ); - throw error; - - } - - let extensions, capabilities, state, info; - let properties, textures, cubemaps, cubeuvmaps, attributes, geometries, objects; - let programCache, materials, renderLists, renderStates, clipping, shadowMap; - - let background, morphtargets, bufferRenderer, indexedBufferRenderer; - - let utils, bindingStates, uniformsGroups; - - function initGLContext() { - - extensions = new WebGLExtensions( _gl ); - - capabilities = new WebGLCapabilities( _gl, extensions, parameters ); - - extensions.init( capabilities ); - - utils = new WebGLUtils( _gl, extensions, capabilities ); - - state = new WebGLState( _gl, extensions, capabilities ); - - info = new WebGLInfo( _gl ); - properties = new WebGLProperties(); - textures = new WebGLTextures( _gl, extensions, state, properties, capabilities, utils, info ); - cubemaps = new WebGLCubeMaps( _this ); - cubeuvmaps = new WebGLCubeUVMaps( _this ); - attributes = new WebGLAttributes( _gl, capabilities ); - bindingStates = new WebGLBindingStates( _gl, extensions, attributes, capabilities ); - geometries = new WebGLGeometries( _gl, attributes, info, bindingStates ); - objects = new WebGLObjects( _gl, geometries, attributes, info ); - morphtargets = new WebGLMorphtargets( _gl, capabilities, textures ); - clipping = new WebGLClipping( properties ); - programCache = new WebGLPrograms( _this, cubemaps, cubeuvmaps, extensions, capabilities, bindingStates, clipping ); - materials = new WebGLMaterials( _this, properties ); - renderLists = new WebGLRenderLists(); - renderStates = new WebGLRenderStates( extensions, capabilities ); - background = new WebGLBackground( _this, cubemaps, cubeuvmaps, state, objects, _alpha, _premultipliedAlpha ); - shadowMap = new WebGLShadowMap( _this, objects, capabilities ); - uniformsGroups = new WebGLUniformsGroups( _gl, info, capabilities, state ); - - bufferRenderer = new WebGLBufferRenderer( _gl, extensions, info, capabilities ); - indexedBufferRenderer = new WebGLIndexedBufferRenderer( _gl, extensions, info, capabilities ); - - info.programs = programCache.programs; - - _this.capabilities = capabilities; - _this.extensions = extensions; - _this.properties = properties; - _this.renderLists = renderLists; - _this.shadowMap = shadowMap; - _this.state = state; - _this.info = info; - - } - - initGLContext(); - - // xr - - const xr = new WebXRManager( _this, _gl ); - - this.xr = xr; - - // API - - this.getContext = function () { - - return _gl; - - }; - - this.getContextAttributes = function () { - - return _gl.getContextAttributes(); - - }; - - this.forceContextLoss = function () { - - const extension = extensions.get( 'WEBGL_lose_context' ); - if ( extension ) extension.loseContext(); - - }; - - this.forceContextRestore = function () { - - const extension = extensions.get( 'WEBGL_lose_context' ); - if ( extension ) extension.restoreContext(); - - }; - - this.getPixelRatio = function () { - - return _pixelRatio; - - }; - - this.setPixelRatio = function ( value ) { - - if ( value === undefined ) return; - - _pixelRatio = value; - - this.setSize( _width, _height, false ); - - }; - - this.getSize = function ( target ) { - - return target.set( _width, _height ); - - }; - - this.setSize = function ( width, height, updateStyle = true ) { - - if ( xr.isPresenting ) { - - console.warn( 'THREE.WebGLRenderer: Can\'t change size while VR device is presenting.' ); - return; - - } - - _width = width; - _height = height; - - _canvas.width = Math.floor( width * _pixelRatio ); - _canvas.height = Math.floor( height * _pixelRatio ); - - if ( updateStyle === true ) { - - _canvas.style.width = width + 'px'; - _canvas.style.height = height + 'px'; - - } - - this.setViewport( 0, 0, width, height ); - - }; - - this.getDrawingBufferSize = function ( target ) { - - return target.set( _width * _pixelRatio, _height * _pixelRatio ).floor(); - - }; - - this.setDrawingBufferSize = function ( width, height, pixelRatio ) { - - _width = width; - _height = height; - - _pixelRatio = pixelRatio; - - _canvas.width = Math.floor( width * pixelRatio ); - _canvas.height = Math.floor( height * pixelRatio ); - - this.setViewport( 0, 0, width, height ); - - }; - - this.getCurrentViewport = function ( target ) { - - return target.copy( _currentViewport ); - - }; - - this.getViewport = function ( target ) { - - return target.copy( _viewport ); - - }; - - this.setViewport = function ( x, y, width, height ) { - - if ( x.isVector4 ) { - - _viewport.set( x.x, x.y, x.z, x.w ); - - } else { - - _viewport.set( x, y, width, height ); - - } - - state.viewport( _currentViewport.copy( _viewport ).multiplyScalar( _pixelRatio ).floor() ); - - }; - - this.getScissor = function ( target ) { - - return target.copy( _scissor ); - - }; - - this.setScissor = function ( x, y, width, height ) { - - if ( x.isVector4 ) { - - _scissor.set( x.x, x.y, x.z, x.w ); - - } else { - - _scissor.set( x, y, width, height ); - - } - - state.scissor( _currentScissor.copy( _scissor ).multiplyScalar( _pixelRatio ).floor() ); - - }; - - this.getScissorTest = function () { - - return _scissorTest; - - }; - - this.setScissorTest = function ( boolean ) { - - state.setScissorTest( _scissorTest = boolean ); - - }; - - this.setOpaqueSort = function ( method ) { - - _opaqueSort = method; - - }; - - this.setTransparentSort = function ( method ) { - - _transparentSort = method; - - }; - - // Clearing - - this.getClearColor = function ( target ) { - - return target.copy( background.getClearColor() ); - - }; - - this.setClearColor = function () { - - background.setClearColor.apply( background, arguments ); - - }; - - this.getClearAlpha = function () { - - return background.getClearAlpha(); - - }; - - this.setClearAlpha = function () { - - background.setClearAlpha.apply( background, arguments ); - - }; - - this.clear = function ( color = true, depth = true, stencil = true ) { - - let bits = 0; - - if ( color ) bits |= _gl.COLOR_BUFFER_BIT; - if ( depth ) bits |= _gl.DEPTH_BUFFER_BIT; - if ( stencil ) bits |= _gl.STENCIL_BUFFER_BIT; - - _gl.clear( bits ); - - }; - - this.clearColor = function () { - - this.clear( true, false, false ); - - }; - - this.clearDepth = function () { - - this.clear( false, true, false ); - - }; - - this.clearStencil = function () { - - this.clear( false, false, true ); - - }; - - // - - this.dispose = function () { - - _canvas.removeEventListener( 'webglcontextlost', onContextLost, false ); - _canvas.removeEventListener( 'webglcontextrestored', onContextRestore, false ); - _canvas.removeEventListener( 'webglcontextcreationerror', onContextCreationError, false ); - - renderLists.dispose(); - renderStates.dispose(); - properties.dispose(); - cubemaps.dispose(); - cubeuvmaps.dispose(); - objects.dispose(); - bindingStates.dispose(); - uniformsGroups.dispose(); - programCache.dispose(); - - xr.dispose(); - - xr.removeEventListener( 'sessionstart', onXRSessionStart ); - xr.removeEventListener( 'sessionend', onXRSessionEnd ); - - if ( _transmissionRenderTarget ) { - - _transmissionRenderTarget.dispose(); - _transmissionRenderTarget = null; - - } - - animation.stop(); - - }; - - // Events - - function onContextLost( event ) { - - event.preventDefault(); - - console.log( 'THREE.WebGLRenderer: Context Lost.' ); - - _isContextLost = true; - - } - - function onContextRestore( /* event */ ) { - - console.log( 'THREE.WebGLRenderer: Context Restored.' ); - - _isContextLost = false; - - const infoAutoReset = info.autoReset; - const shadowMapEnabled = shadowMap.enabled; - const shadowMapAutoUpdate = shadowMap.autoUpdate; - const shadowMapNeedsUpdate = shadowMap.needsUpdate; - const shadowMapType = shadowMap.type; - - initGLContext(); - - info.autoReset = infoAutoReset; - shadowMap.enabled = shadowMapEnabled; - shadowMap.autoUpdate = shadowMapAutoUpdate; - shadowMap.needsUpdate = shadowMapNeedsUpdate; - shadowMap.type = shadowMapType; - - } - - function onContextCreationError( event ) { - - console.error( 'THREE.WebGLRenderer: A WebGL context could not be created. Reason: ', event.statusMessage ); - - } - - function onMaterialDispose( event ) { - - const material = event.target; - - material.removeEventListener( 'dispose', onMaterialDispose ); - - deallocateMaterial( material ); - - } - - // Buffer deallocation - - function deallocateMaterial( material ) { - - releaseMaterialProgramReferences( material ); - - properties.remove( material ); - - } - - - function releaseMaterialProgramReferences( material ) { - - const programs = properties.get( material ).programs; - - if ( programs !== undefined ) { - - programs.forEach( function ( program ) { - - programCache.releaseProgram( program ); - - } ); - - if ( material.isShaderMaterial ) { - - programCache.releaseShaderCache( material ); - - } - - } - - } - - // Buffer rendering - - this.renderBufferDirect = function ( camera, scene, geometry, material, object, group ) { - - if ( scene === null ) scene = _emptyScene; // renderBufferDirect second parameter used to be fog (could be null) - - const frontFaceCW = ( object.isMesh && object.matrixWorld.determinant() < 0 ); - - const program = setProgram( camera, scene, geometry, material, object ); - - state.setMaterial( material, frontFaceCW ); - - // - - let index = geometry.index; - let rangeFactor = 1; - - if ( material.wireframe === true ) { - - index = geometries.getWireframeAttribute( geometry ); - rangeFactor = 2; - - } - - // - - const drawRange = geometry.drawRange; - const position = geometry.attributes.position; - - let drawStart = drawRange.start * rangeFactor; - let drawEnd = ( drawRange.start + drawRange.count ) * rangeFactor; - - if ( group !== null ) { - - drawStart = Math.max( drawStart, group.start * rangeFactor ); - drawEnd = Math.min( drawEnd, ( group.start + group.count ) * rangeFactor ); - - } - - if ( index !== null ) { - - drawStart = Math.max( drawStart, 0 ); - drawEnd = Math.min( drawEnd, index.count ); - - } else if ( position !== undefined && position !== null ) { - - drawStart = Math.max( drawStart, 0 ); - drawEnd = Math.min( drawEnd, position.count ); - - } - - const drawCount = drawEnd - drawStart; - - if ( drawCount < 0 || drawCount === Infinity ) return; - - // - - bindingStates.setup( object, material, program, geometry, index ); - - let attribute; - let renderer = bufferRenderer; - - if ( index !== null ) { - - attribute = attributes.get( index ); - - renderer = indexedBufferRenderer; - renderer.setIndex( attribute ); - - } - - // - - if ( object.isMesh ) { - - if ( material.wireframe === true ) { - - state.setLineWidth( material.wireframeLinewidth * getTargetPixelRatio() ); - renderer.setMode( _gl.LINES ); - - } else { - - renderer.setMode( _gl.TRIANGLES ); - - } - - } else if ( object.isLine ) { - - let lineWidth = material.linewidth; - - if ( lineWidth === undefined ) lineWidth = 1; // Not using Line*Material - - state.setLineWidth( lineWidth * getTargetPixelRatio() ); - - if ( object.isLineSegments ) { - - renderer.setMode( _gl.LINES ); - - } else if ( object.isLineLoop ) { - - renderer.setMode( _gl.LINE_LOOP ); - - } else { - - renderer.setMode( _gl.LINE_STRIP ); - - } - - } else if ( object.isPoints ) { - - renderer.setMode( _gl.POINTS ); - - } else if ( object.isSprite ) { - - renderer.setMode( _gl.TRIANGLES ); - - } - - if ( object.isInstancedMesh ) { - - renderer.renderInstances( drawStart, drawCount, object.count ); - - } else if ( geometry.isInstancedBufferGeometry ) { - - const maxInstanceCount = geometry._maxInstanceCount !== undefined ? geometry._maxInstanceCount : Infinity; - const instanceCount = Math.min( geometry.instanceCount, maxInstanceCount ); - - renderer.renderInstances( drawStart, drawCount, instanceCount ); - - } else { - - renderer.render( drawStart, drawCount ); - - } - - }; - - // Compile - - this.compile = function ( scene, camera ) { - - function prepare( material, scene, object ) { - - if ( material.transparent === true && material.side === DoubleSide && material.forceSinglePass === false ) { - - material.side = BackSide; - material.needsUpdate = true; - getProgram( material, scene, object ); - - material.side = FrontSide; - material.needsUpdate = true; - getProgram( material, scene, object ); - - material.side = DoubleSide; - - } else { - - getProgram( material, scene, object ); - - } - - } - - currentRenderState = renderStates.get( scene ); - currentRenderState.init(); - - renderStateStack.push( currentRenderState ); - - scene.traverseVisible( function ( object ) { - - if ( object.isLight && object.layers.test( camera.layers ) ) { - - currentRenderState.pushLight( object ); - - if ( object.castShadow ) { - - currentRenderState.pushShadow( object ); - - } - - } - - } ); - - currentRenderState.setupLights( _this.useLegacyLights ); - - scene.traverse( function ( object ) { - - const material = object.material; - - if ( material ) { - - if ( Array.isArray( material ) ) { - - for ( let i = 0; i < material.length; i ++ ) { - - const material2 = material[ i ]; - - prepare( material2, scene, object ); - - } - - } else { - - prepare( material, scene, object ); - - } - - } - - } ); - - renderStateStack.pop(); - currentRenderState = null; - - }; - - // Animation Loop - - let onAnimationFrameCallback = null; - - function onAnimationFrame( time ) { - - if ( onAnimationFrameCallback ) onAnimationFrameCallback( time ); - - } - - function onXRSessionStart() { - - animation.stop(); - - } - - function onXRSessionEnd() { - - animation.start(); - - } - - const animation = new WebGLAnimation(); - animation.setAnimationLoop( onAnimationFrame ); - - if ( typeof self !== 'undefined' ) animation.setContext( self ); - - this.setAnimationLoop = function ( callback ) { - - onAnimationFrameCallback = callback; - xr.setAnimationLoop( callback ); - - ( callback === null ) ? animation.stop() : animation.start(); - - }; - - xr.addEventListener( 'sessionstart', onXRSessionStart ); - xr.addEventListener( 'sessionend', onXRSessionEnd ); - - // Rendering - - this.render = function ( scene, camera ) { - - if ( camera !== undefined && camera.isCamera !== true ) { - - console.error( 'THREE.WebGLRenderer.render: camera is not an instance of THREE.Camera.' ); - return; - - } - - if ( _isContextLost === true ) return; - - // update scene graph - - if ( scene.matrixWorldAutoUpdate === true ) scene.updateMatrixWorld(); - - // update camera matrices and frustum - - if ( camera.parent === null && camera.matrixWorldAutoUpdate === true ) camera.updateMatrixWorld(); - - if ( xr.enabled === true && xr.isPresenting === true ) { - - if ( xr.cameraAutoUpdate === true ) xr.updateCamera( camera ); - - camera = xr.getCamera(); // use XR camera for rendering - - } - - // - if ( scene.isScene === true ) scene.onBeforeRender( _this, scene, camera, _currentRenderTarget ); - - currentRenderState = renderStates.get( scene, renderStateStack.length ); - currentRenderState.init(); - - renderStateStack.push( currentRenderState ); - - _projScreenMatrix.multiplyMatrices( camera.projectionMatrix, camera.matrixWorldInverse ); - _frustum.setFromProjectionMatrix( _projScreenMatrix ); - - _localClippingEnabled = this.localClippingEnabled; - _clippingEnabled = clipping.init( this.clippingPlanes, _localClippingEnabled ); - - currentRenderList = renderLists.get( scene, renderListStack.length ); - currentRenderList.init(); - - renderListStack.push( currentRenderList ); - - projectObject( scene, camera, 0, _this.sortObjects ); - - currentRenderList.finish(); - - if ( _this.sortObjects === true ) { - - currentRenderList.sort( _opaqueSort, _transparentSort ); - - } - - // - - if ( _clippingEnabled === true ) clipping.beginShadows(); - - const shadowsArray = currentRenderState.state.shadowsArray; - - shadowMap.render( shadowsArray, scene, camera ); - - if ( _clippingEnabled === true ) clipping.endShadows(); - - // - - if ( this.info.autoReset === true ) this.info.reset(); - - // - - background.render( currentRenderList, scene ); - - // render scene - - currentRenderState.setupLights( _this.useLegacyLights ); - - if ( camera.isArrayCamera ) { - - const cameras = camera.cameras; - - for ( let i = 0, l = cameras.length; i < l; i ++ ) { - - const camera2 = cameras[ i ]; - - renderScene( currentRenderList, scene, camera2, camera2.viewport ); - - } - - } else { - - renderScene( currentRenderList, scene, camera ); - - } - - // - - if ( _currentRenderTarget !== null ) { - - // resolve multisample renderbuffers to a single-sample texture if necessary - - textures.updateMultisampleRenderTarget( _currentRenderTarget ); - - // Generate mipmap if we're using any kind of mipmap filtering - - textures.updateRenderTargetMipmap( _currentRenderTarget ); - - } - - // - - if ( scene.isScene === true ) scene.onAfterRender( _this, scene, camera ); - - // _gl.finish(); - - bindingStates.resetDefaultState(); - _currentMaterialId = - 1; - _currentCamera = null; - - renderStateStack.pop(); - - if ( renderStateStack.length > 0 ) { - - currentRenderState = renderStateStack[ renderStateStack.length - 1 ]; - - } else { - - currentRenderState = null; - - } - - renderListStack.pop(); - - if ( renderListStack.length > 0 ) { - - currentRenderList = renderListStack[ renderListStack.length - 1 ]; - - } else { - - currentRenderList = null; - - } - - }; - - function projectObject( object, camera, groupOrder, sortObjects ) { - - if ( object.visible === false ) return; - - const visible = object.layers.test( camera.layers ); - - if ( visible ) { - - if ( object.isGroup ) { - - groupOrder = object.renderOrder; - - } else if ( object.isLOD ) { - - if ( object.autoUpdate === true ) object.update( camera ); - - } else if ( object.isLight ) { - - currentRenderState.pushLight( object ); - - if ( object.castShadow ) { - - currentRenderState.pushShadow( object ); - - } - - } else if ( object.isSprite ) { - - if ( ! object.frustumCulled || _frustum.intersectsSprite( object ) ) { - - if ( sortObjects ) { - - _vector3.setFromMatrixPosition( object.matrixWorld ) - .applyMatrix4( _projScreenMatrix ); - - } - - const geometry = objects.update( object ); - const material = object.material; - - if ( material.visible ) { - - currentRenderList.push( object, geometry, material, groupOrder, _vector3.z, null ); - - } - - } - - } else if ( object.isMesh || object.isLine || object.isPoints ) { - - if ( object.isSkinnedMesh ) { - - // update skeleton only once in a frame - - if ( object.skeleton.frame !== info.render.frame ) { - - object.skeleton.update(); - object.skeleton.frame = info.render.frame; - - } - - } - - if ( ! object.frustumCulled || _frustum.intersectsObject( object ) ) { - - if ( sortObjects ) { - - _vector3.setFromMatrixPosition( object.matrixWorld ) - .applyMatrix4( _projScreenMatrix ); - - } - - const geometry = objects.update( object ); - const material = object.material; - - if ( Array.isArray( material ) ) { - - const groups = geometry.groups; - - for ( let i = 0, l = groups.length; i < l; i ++ ) { - - const group = groups[ i ]; - const groupMaterial = material[ group.materialIndex ]; - - if ( groupMaterial && groupMaterial.visible ) { - - currentRenderList.push( object, geometry, groupMaterial, groupOrder, _vector3.z, group ); - - } - - } - - } else if ( material.visible ) { - - currentRenderList.push( object, geometry, material, groupOrder, _vector3.z, null ); - - } - - } - - } - - } - - const children = object.children; - - for ( let i = 0, l = children.length; i < l; i ++ ) { - - projectObject( children[ i ], camera, groupOrder, sortObjects ); - - } - - } - - function renderScene( currentRenderList, scene, camera, viewport ) { - - const opaqueObjects = currentRenderList.opaque; - const transmissiveObjects = currentRenderList.transmissive; - const transparentObjects = currentRenderList.transparent; - - currentRenderState.setupLightsView( camera ); - - if ( _clippingEnabled === true ) clipping.setGlobalState( _this.clippingPlanes, camera ); - - if ( transmissiveObjects.length > 0 ) renderTransmissionPass( opaqueObjects, scene, camera ); - - if ( viewport ) state.viewport( _currentViewport.copy( viewport ) ); - - if ( opaqueObjects.length > 0 ) renderObjects( opaqueObjects, scene, camera ); - if ( transmissiveObjects.length > 0 ) renderObjects( transmissiveObjects, scene, camera ); - if ( transparentObjects.length > 0 ) renderObjects( transparentObjects, scene, camera ); - - // Ensure depth buffer writing is enabled so it can be cleared on next render - - state.buffers.depth.setTest( true ); - state.buffers.depth.setMask( true ); - state.buffers.color.setMask( true ); - - state.setPolygonOffset( false ); - - } - - function renderTransmissionPass( opaqueObjects, scene, camera ) { - - const isWebGL2 = capabilities.isWebGL2; - - if ( _transmissionRenderTarget === null ) { - - _transmissionRenderTarget = new WebGLRenderTarget( 1024, 1024, { - generateMipmaps: true, - type: extensions.has( 'EXT_color_buffer_half_float' ) ? HalfFloatType : UnsignedByteType, - minFilter: LinearMipmapLinearFilter, - samples: ( isWebGL2 && _antialias === true ) ? 4 : 0 - } ); - - } - - // - - const currentRenderTarget = _this.getRenderTarget(); - _this.setRenderTarget( _transmissionRenderTarget ); - _this.clear(); - - // Turn off the features which can affect the frag color for opaque objects pass. - // Otherwise they are applied twice in opaque objects pass and transmission objects pass. - const currentToneMapping = _this.toneMapping; - _this.toneMapping = NoToneMapping; - - renderObjects( opaqueObjects, scene, camera ); - - _this.toneMapping = currentToneMapping; - - textures.updateMultisampleRenderTarget( _transmissionRenderTarget ); - textures.updateRenderTargetMipmap( _transmissionRenderTarget ); - - _this.setRenderTarget( currentRenderTarget ); - - } - - function renderObjects( renderList, scene, camera ) { - - const overrideMaterial = scene.isScene === true ? scene.overrideMaterial : null; - - for ( let i = 0, l = renderList.length; i < l; i ++ ) { - - const renderItem = renderList[ i ]; - - const object = renderItem.object; - const geometry = renderItem.geometry; - const material = overrideMaterial === null ? renderItem.material : overrideMaterial; - const group = renderItem.group; - - if ( object.layers.test( camera.layers ) ) { - - renderObject( object, scene, camera, geometry, material, group ); - - } - - } - - } - - function renderObject( object, scene, camera, geometry, material, group ) { - - object.onBeforeRender( _this, scene, camera, geometry, material, group ); - - object.modelViewMatrix.multiplyMatrices( camera.matrixWorldInverse, object.matrixWorld ); - object.normalMatrix.getNormalMatrix( object.modelViewMatrix ); - - material.onBeforeRender( _this, scene, camera, geometry, object, group ); - - if ( material.transparent === true && material.side === DoubleSide && material.forceSinglePass === false ) { - - material.side = BackSide; - material.needsUpdate = true; - _this.renderBufferDirect( camera, scene, geometry, material, object, group ); - - material.side = FrontSide; - material.needsUpdate = true; - _this.renderBufferDirect( camera, scene, geometry, material, object, group ); - - material.side = DoubleSide; - - } else { - - _this.renderBufferDirect( camera, scene, geometry, material, object, group ); - - } - - object.onAfterRender( _this, scene, camera, geometry, material, group ); - - } - - function getProgram( material, scene, object ) { - - if ( scene.isScene !== true ) scene = _emptyScene; // scene could be a Mesh, Line, Points, ... - - const materialProperties = properties.get( material ); - - const lights = currentRenderState.state.lights; - const shadowsArray = currentRenderState.state.shadowsArray; - - const lightsStateVersion = lights.state.version; - - const parameters = programCache.getParameters( material, lights.state, shadowsArray, scene, object ); - const programCacheKey = programCache.getProgramCacheKey( parameters ); - - let programs = materialProperties.programs; - - // always update environment and fog - changing these trigger an getProgram call, but it's possible that the program doesn't change - - materialProperties.environment = material.isMeshStandardMaterial ? scene.environment : null; - materialProperties.fog = scene.fog; - materialProperties.envMap = ( material.isMeshStandardMaterial ? cubeuvmaps : cubemaps ).get( material.envMap || materialProperties.environment ); - - if ( programs === undefined ) { - - // new material - - material.addEventListener( 'dispose', onMaterialDispose ); - - programs = new Map(); - materialProperties.programs = programs; - - } - - let program = programs.get( programCacheKey ); - - if ( program !== undefined ) { - - // early out if program and light state is identical - - if ( materialProperties.currentProgram === program && materialProperties.lightsStateVersion === lightsStateVersion ) { - - updateCommonMaterialProperties( material, parameters ); - - return program; - - } - - } else { - - parameters.uniforms = programCache.getUniforms( material ); - - material.onBuild( object, parameters, _this ); - - material.onBeforeCompile( parameters, _this ); - - program = programCache.acquireProgram( parameters, programCacheKey ); - programs.set( programCacheKey, program ); - - materialProperties.uniforms = parameters.uniforms; - - } - - const uniforms = materialProperties.uniforms; - - if ( ( ! material.isShaderMaterial && ! material.isRawShaderMaterial ) || material.clipping === true ) { - - uniforms.clippingPlanes = clipping.uniform; - - } - - updateCommonMaterialProperties( material, parameters ); - - // store the light setup it was created for - - materialProperties.needsLights = materialNeedsLights( material ); - materialProperties.lightsStateVersion = lightsStateVersion; - - if ( materialProperties.needsLights ) { - - // wire up the material to this renderer's lighting state - - uniforms.ambientLightColor.value = lights.state.ambient; - uniforms.lightProbe.value = lights.state.probe; - uniforms.directionalLights.value = lights.state.directional; - uniforms.directionalLightShadows.value = lights.state.directionalShadow; - uniforms.spotLights.value = lights.state.spot; - uniforms.spotLightShadows.value = lights.state.spotShadow; - uniforms.rectAreaLights.value = lights.state.rectArea; - uniforms.ltc_1.value = lights.state.rectAreaLTC1; - uniforms.ltc_2.value = lights.state.rectAreaLTC2; - uniforms.pointLights.value = lights.state.point; - uniforms.pointLightShadows.value = lights.state.pointShadow; - uniforms.hemisphereLights.value = lights.state.hemi; - - uniforms.directionalShadowMap.value = lights.state.directionalShadowMap; - uniforms.directionalShadowMatrix.value = lights.state.directionalShadowMatrix; - uniforms.spotShadowMap.value = lights.state.spotShadowMap; - uniforms.spotLightMatrix.value = lights.state.spotLightMatrix; - uniforms.spotLightMap.value = lights.state.spotLightMap; - uniforms.pointShadowMap.value = lights.state.pointShadowMap; - uniforms.pointShadowMatrix.value = lights.state.pointShadowMatrix; - // TODO (abelnation): add area lights shadow info to uniforms - - } - - const progUniforms = program.getUniforms(); - const uniformsList = WebGLUniforms.seqWithValue( progUniforms.seq, uniforms ); - - materialProperties.currentProgram = program; - materialProperties.uniformsList = uniformsList; - - return program; - - } - - function updateCommonMaterialProperties( material, parameters ) { - - const materialProperties = properties.get( material ); - - materialProperties.outputEncoding = parameters.outputEncoding; - materialProperties.instancing = parameters.instancing; - materialProperties.skinning = parameters.skinning; - materialProperties.morphTargets = parameters.morphTargets; - materialProperties.morphNormals = parameters.morphNormals; - materialProperties.morphColors = parameters.morphColors; - materialProperties.morphTargetsCount = parameters.morphTargetsCount; - materialProperties.numClippingPlanes = parameters.numClippingPlanes; - materialProperties.numIntersection = parameters.numClipIntersection; - materialProperties.vertexAlphas = parameters.vertexAlphas; - materialProperties.vertexTangents = parameters.vertexTangents; - materialProperties.toneMapping = parameters.toneMapping; - - } - - function setProgram( camera, scene, geometry, material, object ) { - - if ( scene.isScene !== true ) scene = _emptyScene; // scene could be a Mesh, Line, Points, ... - - textures.resetTextureUnits(); - - const fog = scene.fog; - const environment = material.isMeshStandardMaterial ? scene.environment : null; - const encoding = ( _currentRenderTarget === null ) ? _this.outputEncoding : ( _currentRenderTarget.isXRRenderTarget === true ? _currentRenderTarget.texture.encoding : LinearEncoding ); - const envMap = ( material.isMeshStandardMaterial ? cubeuvmaps : cubemaps ).get( material.envMap || environment ); - const vertexAlphas = material.vertexColors === true && !! geometry.attributes.color && geometry.attributes.color.itemSize === 4; - const vertexTangents = !! material.normalMap && !! geometry.attributes.tangent; - const morphTargets = !! geometry.morphAttributes.position; - const morphNormals = !! geometry.morphAttributes.normal; - const morphColors = !! geometry.morphAttributes.color; - const toneMapping = material.toneMapped ? _this.toneMapping : NoToneMapping; - - const morphAttribute = geometry.morphAttributes.position || geometry.morphAttributes.normal || geometry.morphAttributes.color; - const morphTargetsCount = ( morphAttribute !== undefined ) ? morphAttribute.length : 0; - - const materialProperties = properties.get( material ); - const lights = currentRenderState.state.lights; - - if ( _clippingEnabled === true ) { - - if ( _localClippingEnabled === true || camera !== _currentCamera ) { - - const useCache = - camera === _currentCamera && - material.id === _currentMaterialId; - - // we might want to call this function with some ClippingGroup - // object instead of the material, once it becomes feasible - // (#8465, #8379) - clipping.setState( material, camera, useCache ); - - } - - } - - // - - let needsProgramChange = false; - - if ( material.version === materialProperties.__version ) { - - if ( materialProperties.needsLights && ( materialProperties.lightsStateVersion !== lights.state.version ) ) { - - needsProgramChange = true; - - } else if ( materialProperties.outputEncoding !== encoding ) { - - needsProgramChange = true; - - } else if ( object.isInstancedMesh && materialProperties.instancing === false ) { - - needsProgramChange = true; - - } else if ( ! object.isInstancedMesh && materialProperties.instancing === true ) { - - needsProgramChange = true; - - } else if ( object.isSkinnedMesh && materialProperties.skinning === false ) { - - needsProgramChange = true; - - } else if ( ! object.isSkinnedMesh && materialProperties.skinning === true ) { - - needsProgramChange = true; - - } else if ( materialProperties.envMap !== envMap ) { - - needsProgramChange = true; - - } else if ( material.fog === true && materialProperties.fog !== fog ) { - - needsProgramChange = true; - - } else if ( materialProperties.numClippingPlanes !== undefined && - ( materialProperties.numClippingPlanes !== clipping.numPlanes || - materialProperties.numIntersection !== clipping.numIntersection ) ) { - - needsProgramChange = true; - - } else if ( materialProperties.vertexAlphas !== vertexAlphas ) { - - needsProgramChange = true; - - } else if ( materialProperties.vertexTangents !== vertexTangents ) { - - needsProgramChange = true; - - } else if ( materialProperties.morphTargets !== morphTargets ) { - - needsProgramChange = true; - - } else if ( materialProperties.morphNormals !== morphNormals ) { - - needsProgramChange = true; - - } else if ( materialProperties.morphColors !== morphColors ) { - - needsProgramChange = true; - - } else if ( materialProperties.toneMapping !== toneMapping ) { - - needsProgramChange = true; - - } else if ( capabilities.isWebGL2 === true && materialProperties.morphTargetsCount !== morphTargetsCount ) { - - needsProgramChange = true; - - } - - } else { - - needsProgramChange = true; - materialProperties.__version = material.version; - - } - - // - - let program = materialProperties.currentProgram; - - if ( needsProgramChange === true ) { - - program = getProgram( material, scene, object ); - - } - - let refreshProgram = false; - let refreshMaterial = false; - let refreshLights = false; - - const p_uniforms = program.getUniforms(), - m_uniforms = materialProperties.uniforms; - - if ( state.useProgram( program.program ) ) { - - refreshProgram = true; - refreshMaterial = true; - refreshLights = true; - - } - - if ( material.id !== _currentMaterialId ) { - - _currentMaterialId = material.id; - - refreshMaterial = true; - - } - - if ( refreshProgram || _currentCamera !== camera ) { - - p_uniforms.setValue( _gl, 'projectionMatrix', camera.projectionMatrix ); - - if ( capabilities.logarithmicDepthBuffer ) { - - p_uniforms.setValue( _gl, 'logDepthBufFC', - 2.0 / ( Math.log( camera.far + 1.0 ) / Math.LN2 ) ); - - } - - if ( _currentCamera !== camera ) { - - _currentCamera = camera; - - // lighting uniforms depend on the camera so enforce an update - // now, in case this material supports lights - or later, when - // the next material that does gets activated: - - refreshMaterial = true; // set to true on material change - refreshLights = true; // remains set until update done - - } - - // load material specific uniforms - // (shader material also gets them for the sake of genericity) - - if ( material.isShaderMaterial || - material.isMeshPhongMaterial || - material.isMeshToonMaterial || - material.isMeshStandardMaterial || - material.envMap ) { - - const uCamPos = p_uniforms.map.cameraPosition; - - if ( uCamPos !== undefined ) { - - uCamPos.setValue( _gl, - _vector3.setFromMatrixPosition( camera.matrixWorld ) ); - - } - - } - - if ( material.isMeshPhongMaterial || - material.isMeshToonMaterial || - material.isMeshLambertMaterial || - material.isMeshBasicMaterial || - material.isMeshStandardMaterial || - material.isShaderMaterial ) { - - p_uniforms.setValue( _gl, 'isOrthographic', camera.isOrthographicCamera === true ); - - } - - if ( material.isMeshPhongMaterial || - material.isMeshToonMaterial || - material.isMeshLambertMaterial || - material.isMeshBasicMaterial || - material.isMeshStandardMaterial || - material.isShaderMaterial || - material.isShadowMaterial || - object.isSkinnedMesh ) { - - p_uniforms.setValue( _gl, 'viewMatrix', camera.matrixWorldInverse ); - - } - - } - - // skinning and morph target uniforms must be set even if material didn't change - // auto-setting of texture unit for bone and morph texture must go before other textures - // otherwise textures used for skinning and morphing can take over texture units reserved for other material textures - - if ( object.isSkinnedMesh ) { - - p_uniforms.setOptional( _gl, object, 'bindMatrix' ); - p_uniforms.setOptional( _gl, object, 'bindMatrixInverse' ); - - const skeleton = object.skeleton; - - if ( skeleton ) { - - if ( capabilities.floatVertexTextures ) { - - if ( skeleton.boneTexture === null ) skeleton.computeBoneTexture(); - - p_uniforms.setValue( _gl, 'boneTexture', skeleton.boneTexture, textures ); - p_uniforms.setValue( _gl, 'boneTextureSize', skeleton.boneTextureSize ); - - } else { - - console.warn( 'THREE.WebGLRenderer: SkinnedMesh can only be used with WebGL 2. With WebGL 1 OES_texture_float and vertex textures support is required.' ); - - } - - } - - } - - const morphAttributes = geometry.morphAttributes; - - if ( morphAttributes.position !== undefined || morphAttributes.normal !== undefined || ( morphAttributes.color !== undefined && capabilities.isWebGL2 === true ) ) { - - morphtargets.update( object, geometry, program ); - - } - - if ( refreshMaterial || materialProperties.receiveShadow !== object.receiveShadow ) { - - materialProperties.receiveShadow = object.receiveShadow; - p_uniforms.setValue( _gl, 'receiveShadow', object.receiveShadow ); - - } - - // https://github.com/mrdoob/three.js/pull/24467#issuecomment-1209031512 - - if ( material.isMeshGouraudMaterial && material.envMap !== null ) { - - m_uniforms.envMap.value = envMap; - - m_uniforms.flipEnvMap.value = ( envMap.isCubeTexture && envMap.isRenderTargetTexture === false ) ? - 1 : 1; - - } - - if ( refreshMaterial ) { - - p_uniforms.setValue( _gl, 'toneMappingExposure', _this.toneMappingExposure ); - - if ( materialProperties.needsLights ) { - - // the current material requires lighting info - - // note: all lighting uniforms are always set correctly - // they simply reference the renderer's state for their - // values - // - // use the current material's .needsUpdate flags to set - // the GL state when required - - markUniformsLightsNeedsUpdate( m_uniforms, refreshLights ); - - } - - // refresh uniforms common to several materials - - if ( fog && material.fog === true ) { - - materials.refreshFogUniforms( m_uniforms, fog ); - - } - - materials.refreshMaterialUniforms( m_uniforms, material, _pixelRatio, _height, _transmissionRenderTarget ); - - WebGLUniforms.upload( _gl, materialProperties.uniformsList, m_uniforms, textures ); - - } - - if ( material.isShaderMaterial && material.uniformsNeedUpdate === true ) { - - WebGLUniforms.upload( _gl, materialProperties.uniformsList, m_uniforms, textures ); - material.uniformsNeedUpdate = false; - - } - - if ( material.isSpriteMaterial ) { - - p_uniforms.setValue( _gl, 'center', object.center ); - - } - - // common matrices - - p_uniforms.setValue( _gl, 'modelViewMatrix', object.modelViewMatrix ); - p_uniforms.setValue( _gl, 'normalMatrix', object.normalMatrix ); - p_uniforms.setValue( _gl, 'modelMatrix', object.matrixWorld ); - - // UBOs - - if ( material.isShaderMaterial || material.isRawShaderMaterial ) { - - const groups = material.uniformsGroups; - - for ( let i = 0, l = groups.length; i < l; i ++ ) { - - if ( capabilities.isWebGL2 ) { - - const group = groups[ i ]; - - uniformsGroups.update( group, program ); - uniformsGroups.bind( group, program ); - - } else { - - console.warn( 'THREE.WebGLRenderer: Uniform Buffer Objects can only be used with WebGL 2.' ); - - } - - } - - } - - return program; - - } - - // If uniforms are marked as clean, they don't need to be loaded to the GPU. - - function markUniformsLightsNeedsUpdate( uniforms, value ) { - - uniforms.ambientLightColor.needsUpdate = value; - uniforms.lightProbe.needsUpdate = value; - - uniforms.directionalLights.needsUpdate = value; - uniforms.directionalLightShadows.needsUpdate = value; - uniforms.pointLights.needsUpdate = value; - uniforms.pointLightShadows.needsUpdate = value; - uniforms.spotLights.needsUpdate = value; - uniforms.spotLightShadows.needsUpdate = value; - uniforms.rectAreaLights.needsUpdate = value; - uniforms.hemisphereLights.needsUpdate = value; - - } - - function materialNeedsLights( material ) { - - return material.isMeshLambertMaterial || material.isMeshToonMaterial || material.isMeshPhongMaterial || - material.isMeshStandardMaterial || material.isShadowMaterial || - ( material.isShaderMaterial && material.lights === true ); - - } - - this.getActiveCubeFace = function () { - - return _currentActiveCubeFace; - - }; - - this.getActiveMipmapLevel = function () { - - return _currentActiveMipmapLevel; - - }; - - this.getRenderTarget = function () { - - return _currentRenderTarget; - - }; - - this.setRenderTargetTextures = function ( renderTarget, colorTexture, depthTexture ) { - - properties.get( renderTarget.texture ).__webglTexture = colorTexture; - properties.get( renderTarget.depthTexture ).__webglTexture = depthTexture; - - const renderTargetProperties = properties.get( renderTarget ); - renderTargetProperties.__hasExternalTextures = true; - - if ( renderTargetProperties.__hasExternalTextures ) { - - renderTargetProperties.__autoAllocateDepthBuffer = depthTexture === undefined; - - if ( ! renderTargetProperties.__autoAllocateDepthBuffer ) { - - // The multisample_render_to_texture extension doesn't work properly if there - // are midframe flushes and an external depth buffer. Disable use of the extension. - if ( extensions.has( 'WEBGL_multisampled_render_to_texture' ) === true ) { - - console.warn( 'THREE.WebGLRenderer: Render-to-texture extension was disabled because an external texture was provided' ); - renderTargetProperties.__useRenderToTexture = false; - - } - - } - - } - - }; - - this.setRenderTargetFramebuffer = function ( renderTarget, defaultFramebuffer ) { - - const renderTargetProperties = properties.get( renderTarget ); - renderTargetProperties.__webglFramebuffer = defaultFramebuffer; - renderTargetProperties.__useDefaultFramebuffer = defaultFramebuffer === undefined; - - }; - - this.setRenderTarget = function ( renderTarget, activeCubeFace = 0, activeMipmapLevel = 0 ) { - - _currentRenderTarget = renderTarget; - _currentActiveCubeFace = activeCubeFace; - _currentActiveMipmapLevel = activeMipmapLevel; - - let useDefaultFramebuffer = true; - let framebuffer = null; - let isCube = false; - let isRenderTarget3D = false; - - if ( renderTarget ) { - - const renderTargetProperties = properties.get( renderTarget ); - - if ( renderTargetProperties.__useDefaultFramebuffer !== undefined ) { - - // We need to make sure to rebind the framebuffer. - state.bindFramebuffer( _gl.FRAMEBUFFER, null ); - useDefaultFramebuffer = false; - - } else if ( renderTargetProperties.__webglFramebuffer === undefined ) { - - textures.setupRenderTarget( renderTarget ); - - } else if ( renderTargetProperties.__hasExternalTextures ) { - - // Color and depth texture must be rebound in order for the swapchain to update. - textures.rebindTextures( renderTarget, properties.get( renderTarget.texture ).__webglTexture, properties.get( renderTarget.depthTexture ).__webglTexture ); - - } - - const texture = renderTarget.texture; - - if ( texture.isData3DTexture || texture.isDataArrayTexture || texture.isCompressedArrayTexture ) { - - isRenderTarget3D = true; - - } - - const __webglFramebuffer = properties.get( renderTarget ).__webglFramebuffer; - - if ( renderTarget.isWebGLCubeRenderTarget ) { - - framebuffer = __webglFramebuffer[ activeCubeFace ]; - isCube = true; - - } else if ( ( capabilities.isWebGL2 && renderTarget.samples > 0 ) && textures.useMultisampledRTT( renderTarget ) === false ) { - - framebuffer = properties.get( renderTarget ).__webglMultisampledFramebuffer; - - } else { - - framebuffer = __webglFramebuffer; - - } - - _currentViewport.copy( renderTarget.viewport ); - _currentScissor.copy( renderTarget.scissor ); - _currentScissorTest = renderTarget.scissorTest; - - } else { - - _currentViewport.copy( _viewport ).multiplyScalar( _pixelRatio ).floor(); - _currentScissor.copy( _scissor ).multiplyScalar( _pixelRatio ).floor(); - _currentScissorTest = _scissorTest; - - } - - const framebufferBound = state.bindFramebuffer( _gl.FRAMEBUFFER, framebuffer ); - - if ( framebufferBound && capabilities.drawBuffers && useDefaultFramebuffer ) { - - state.drawBuffers( renderTarget, framebuffer ); - - } - - state.viewport( _currentViewport ); - state.scissor( _currentScissor ); - state.setScissorTest( _currentScissorTest ); - - if ( isCube ) { - - const textureProperties = properties.get( renderTarget.texture ); - _gl.framebufferTexture2D( _gl.FRAMEBUFFER, _gl.COLOR_ATTACHMENT0, _gl.TEXTURE_CUBE_MAP_POSITIVE_X + activeCubeFace, textureProperties.__webglTexture, activeMipmapLevel ); - - } else if ( isRenderTarget3D ) { - - const textureProperties = properties.get( renderTarget.texture ); - const layer = activeCubeFace || 0; - _gl.framebufferTextureLayer( _gl.FRAMEBUFFER, _gl.COLOR_ATTACHMENT0, textureProperties.__webglTexture, activeMipmapLevel || 0, layer ); - - } - - _currentMaterialId = - 1; // reset current material to ensure correct uniform bindings - - }; - - this.readRenderTargetPixels = function ( renderTarget, x, y, width, height, buffer, activeCubeFaceIndex ) { - - if ( ! ( renderTarget && renderTarget.isWebGLRenderTarget ) ) { - - console.error( 'THREE.WebGLRenderer.readRenderTargetPixels: renderTarget is not THREE.WebGLRenderTarget.' ); - return; - - } - - let framebuffer = properties.get( renderTarget ).__webglFramebuffer; - - if ( renderTarget.isWebGLCubeRenderTarget && activeCubeFaceIndex !== undefined ) { - - framebuffer = framebuffer[ activeCubeFaceIndex ]; - - } - - if ( framebuffer ) { - - state.bindFramebuffer( _gl.FRAMEBUFFER, framebuffer ); - - try { - - const texture = renderTarget.texture; - const textureFormat = texture.format; - const textureType = texture.type; - - if ( textureFormat !== RGBAFormat && utils.convert( textureFormat ) !== _gl.getParameter( _gl.IMPLEMENTATION_COLOR_READ_FORMAT ) ) { - - console.error( 'THREE.WebGLRenderer.readRenderTargetPixels: renderTarget is not in RGBA or implementation defined format.' ); - return; - - } - - const halfFloatSupportedByExt = ( textureType === HalfFloatType ) && ( extensions.has( 'EXT_color_buffer_half_float' ) || ( capabilities.isWebGL2 && extensions.has( 'EXT_color_buffer_float' ) ) ); - - if ( textureType !== UnsignedByteType && utils.convert( textureType ) !== _gl.getParameter( _gl.IMPLEMENTATION_COLOR_READ_TYPE ) && // Edge and Chrome Mac < 52 (#9513) - ! ( textureType === FloatType && ( capabilities.isWebGL2 || extensions.has( 'OES_texture_float' ) || extensions.has( 'WEBGL_color_buffer_float' ) ) ) && // Chrome Mac >= 52 and Firefox - ! halfFloatSupportedByExt ) { - - console.error( 'THREE.WebGLRenderer.readRenderTargetPixels: renderTarget is not in UnsignedByteType or implementation defined type.' ); - return; - - } - - // the following if statement ensures valid read requests (no out-of-bounds pixels, see #8604) - - if ( ( x >= 0 && x <= ( renderTarget.width - width ) ) && ( y >= 0 && y <= ( renderTarget.height - height ) ) ) { - - _gl.readPixels( x, y, width, height, utils.convert( textureFormat ), utils.convert( textureType ), buffer ); - - } - - } finally { - - // restore framebuffer of current render target if necessary - - const framebuffer = ( _currentRenderTarget !== null ) ? properties.get( _currentRenderTarget ).__webglFramebuffer : null; - state.bindFramebuffer( _gl.FRAMEBUFFER, framebuffer ); - - } - - } - - }; - - this.copyFramebufferToTexture = function ( position, texture, level = 0 ) { - - const levelScale = Math.pow( 2, - level ); - const width = Math.floor( texture.image.width * levelScale ); - const height = Math.floor( texture.image.height * levelScale ); - - textures.setTexture2D( texture, 0 ); - - _gl.copyTexSubImage2D( _gl.TEXTURE_2D, level, 0, 0, position.x, position.y, width, height ); - - state.unbindTexture(); - - }; - - this.copyTextureToTexture = function ( position, srcTexture, dstTexture, level = 0 ) { - - const width = srcTexture.image.width; - const height = srcTexture.image.height; - const glFormat = utils.convert( dstTexture.format ); - const glType = utils.convert( dstTexture.type ); - - textures.setTexture2D( dstTexture, 0 ); - - // As another texture upload may have changed pixelStorei - // parameters, make sure they are correct for the dstTexture - _gl.pixelStorei( _gl.UNPACK_FLIP_Y_WEBGL, dstTexture.flipY ); - _gl.pixelStorei( _gl.UNPACK_PREMULTIPLY_ALPHA_WEBGL, dstTexture.premultiplyAlpha ); - _gl.pixelStorei( _gl.UNPACK_ALIGNMENT, dstTexture.unpackAlignment ); - - if ( srcTexture.isDataTexture ) { - - _gl.texSubImage2D( _gl.TEXTURE_2D, level, position.x, position.y, width, height, glFormat, glType, srcTexture.image.data ); - - } else { - - if ( srcTexture.isCompressedTexture ) { - - _gl.compressedTexSubImage2D( _gl.TEXTURE_2D, level, position.x, position.y, srcTexture.mipmaps[ 0 ].width, srcTexture.mipmaps[ 0 ].height, glFormat, srcTexture.mipmaps[ 0 ].data ); - - } else { - - _gl.texSubImage2D( _gl.TEXTURE_2D, level, position.x, position.y, glFormat, glType, srcTexture.image ); - - } - - } - - // Generate mipmaps only when copying level 0 - if ( level === 0 && dstTexture.generateMipmaps ) _gl.generateMipmap( _gl.TEXTURE_2D ); - - state.unbindTexture(); - - }; - - this.copyTextureToTexture3D = function ( sourceBox, position, srcTexture, dstTexture, level = 0 ) { - - if ( _this.isWebGL1Renderer ) { - - console.warn( 'THREE.WebGLRenderer.copyTextureToTexture3D: can only be used with WebGL2.' ); - return; - - } - - const width = sourceBox.max.x - sourceBox.min.x + 1; - const height = sourceBox.max.y - sourceBox.min.y + 1; - const depth = sourceBox.max.z - sourceBox.min.z + 1; - const glFormat = utils.convert( dstTexture.format ); - const glType = utils.convert( dstTexture.type ); - let glTarget; - - if ( dstTexture.isData3DTexture ) { - - textures.setTexture3D( dstTexture, 0 ); - glTarget = _gl.TEXTURE_3D; - - } else if ( dstTexture.isDataArrayTexture ) { - - textures.setTexture2DArray( dstTexture, 0 ); - glTarget = _gl.TEXTURE_2D_ARRAY; - - } else { - - console.warn( 'THREE.WebGLRenderer.copyTextureToTexture3D: only supports THREE.DataTexture3D and THREE.DataTexture2DArray.' ); - return; - - } - - _gl.pixelStorei( _gl.UNPACK_FLIP_Y_WEBGL, dstTexture.flipY ); - _gl.pixelStorei( _gl.UNPACK_PREMULTIPLY_ALPHA_WEBGL, dstTexture.premultiplyAlpha ); - _gl.pixelStorei( _gl.UNPACK_ALIGNMENT, dstTexture.unpackAlignment ); - - const unpackRowLen = _gl.getParameter( _gl.UNPACK_ROW_LENGTH ); - const unpackImageHeight = _gl.getParameter( _gl.UNPACK_IMAGE_HEIGHT ); - const unpackSkipPixels = _gl.getParameter( _gl.UNPACK_SKIP_PIXELS ); - const unpackSkipRows = _gl.getParameter( _gl.UNPACK_SKIP_ROWS ); - const unpackSkipImages = _gl.getParameter( _gl.UNPACK_SKIP_IMAGES ); - - const image = srcTexture.isCompressedTexture ? srcTexture.mipmaps[ 0 ] : srcTexture.image; - - _gl.pixelStorei( _gl.UNPACK_ROW_LENGTH, image.width ); - _gl.pixelStorei( _gl.UNPACK_IMAGE_HEIGHT, image.height ); - _gl.pixelStorei( _gl.UNPACK_SKIP_PIXELS, sourceBox.min.x ); - _gl.pixelStorei( _gl.UNPACK_SKIP_ROWS, sourceBox.min.y ); - _gl.pixelStorei( _gl.UNPACK_SKIP_IMAGES, sourceBox.min.z ); - - if ( srcTexture.isDataTexture || srcTexture.isData3DTexture ) { - - _gl.texSubImage3D( glTarget, level, position.x, position.y, position.z, width, height, depth, glFormat, glType, image.data ); - - } else { - - if ( srcTexture.isCompressedArrayTexture ) { - - console.warn( 'THREE.WebGLRenderer.copyTextureToTexture3D: untested support for compressed srcTexture.' ); - _gl.compressedTexSubImage3D( glTarget, level, position.x, position.y, position.z, width, height, depth, glFormat, image.data ); - - } else { - - _gl.texSubImage3D( glTarget, level, position.x, position.y, position.z, width, height, depth, glFormat, glType, image ); - - } - - } - - _gl.pixelStorei( _gl.UNPACK_ROW_LENGTH, unpackRowLen ); - _gl.pixelStorei( _gl.UNPACK_IMAGE_HEIGHT, unpackImageHeight ); - _gl.pixelStorei( _gl.UNPACK_SKIP_PIXELS, unpackSkipPixels ); - _gl.pixelStorei( _gl.UNPACK_SKIP_ROWS, unpackSkipRows ); - _gl.pixelStorei( _gl.UNPACK_SKIP_IMAGES, unpackSkipImages ); - - // Generate mipmaps only when copying level 0 - if ( level === 0 && dstTexture.generateMipmaps ) _gl.generateMipmap( glTarget ); - - state.unbindTexture(); - - }; - - this.initTexture = function ( texture ) { - - if ( texture.isCubeTexture ) { - - textures.setTextureCube( texture, 0 ); - - } else if ( texture.isData3DTexture ) { - - textures.setTexture3D( texture, 0 ); - - } else if ( texture.isDataArrayTexture || texture.isCompressedArrayTexture ) { - - textures.setTexture2DArray( texture, 0 ); - - } else { - - textures.setTexture2D( texture, 0 ); - - } - - state.unbindTexture(); - - }; - - this.resetState = function () { - - _currentActiveCubeFace = 0; - _currentActiveMipmapLevel = 0; - _currentRenderTarget = null; - - state.reset(); - bindingStates.reset(); - - }; - - if ( typeof __THREE_DEVTOOLS__ !== 'undefined' ) { - - __THREE_DEVTOOLS__.dispatchEvent( new CustomEvent( 'observe', { detail: this } ) ); - - } - - } - - Object.defineProperties( WebGLRenderer.prototype, { - - // @deprecated since r150 - - physicallyCorrectLights: { - - get: function () { - - console.warn( 'THREE.WebGLRenderer: the property .physicallyCorrectLights has been removed. Set renderer.useLegacyLights instead.' ); - return ! this.useLegacyLights; - - }, - - set: function ( value ) { - - console.warn( 'THREE.WebGLRenderer: the property .physicallyCorrectLights has been removed. Set renderer.useLegacyLights instead.' ); - this.useLegacyLights = ! value; - - } - - } - - } ); - - class WebGL1Renderer extends WebGLRenderer {} - - WebGL1Renderer.prototype.isWebGL1Renderer = true; - - class FogExp2 { - - constructor( color, density = 0.00025 ) { - - this.isFogExp2 = true; - - this.name = ''; - - this.color = new Color( color ); - this.density = density; - - } - - clone() { - - return new FogExp2( this.color, this.density ); - - } - - toJSON( /* meta */ ) { - - return { - type: 'FogExp2', - color: this.color.getHex(), - density: this.density - }; - - } - - } - - class Fog { - - constructor( color, near = 1, far = 1000 ) { - - this.isFog = true; - - this.name = ''; - - this.color = new Color( color ); - - this.near = near; - this.far = far; - - } - - clone() { - - return new Fog( this.color, this.near, this.far ); - - } - - toJSON( /* meta */ ) { - - return { - type: 'Fog', - color: this.color.getHex(), - near: this.near, - far: this.far - }; - - } - - } - - class Scene extends Object3D { - - constructor() { - - super(); - - this.isScene = true; - - this.type = 'Scene'; - - this.background = null; - this.environment = null; - this.fog = null; - - this.backgroundBlurriness = 0; - this.backgroundIntensity = 1; - - this.overrideMaterial = null; - - if ( typeof __THREE_DEVTOOLS__ !== 'undefined' ) { - - __THREE_DEVTOOLS__.dispatchEvent( new CustomEvent( 'observe', { detail: this } ) ); - - } - - } - - copy( source, recursive ) { - - super.copy( source, recursive ); - - if ( source.background !== null ) this.background = source.background.clone(); - if ( source.environment !== null ) this.environment = source.environment.clone(); - if ( source.fog !== null ) this.fog = source.fog.clone(); - - this.backgroundBlurriness = source.backgroundBlurriness; - this.backgroundIntensity = source.backgroundIntensity; - - if ( source.overrideMaterial !== null ) this.overrideMaterial = source.overrideMaterial.clone(); - - this.matrixAutoUpdate = source.matrixAutoUpdate; - - return this; - - } - - toJSON( meta ) { - - const data = super.toJSON( meta ); - - if ( this.fog !== null ) data.object.fog = this.fog.toJSON(); - if ( this.backgroundBlurriness > 0 ) data.object.backgroundBlurriness = this.backgroundBlurriness; - if ( this.backgroundIntensity !== 1 ) data.object.backgroundIntensity = this.backgroundIntensity; - - return data; - - } - - // @deprecated - - get autoUpdate() { - - console.warn( 'THREE.Scene: autoUpdate was renamed to matrixWorldAutoUpdate in r144.' ); - return this.matrixWorldAutoUpdate; - - } - - set autoUpdate( value ) { - - console.warn( 'THREE.Scene: autoUpdate was renamed to matrixWorldAutoUpdate in r144.' ); - this.matrixWorldAutoUpdate = value; - - } - - } - - class InterleavedBuffer { - - constructor( array, stride ) { - - this.isInterleavedBuffer = true; - - this.array = array; - this.stride = stride; - this.count = array !== undefined ? array.length / stride : 0; - - this.usage = StaticDrawUsage; - this.updateRange = { offset: 0, count: - 1 }; - - this.version = 0; - - this.uuid = generateUUID(); - - } - - onUploadCallback() {} - - set needsUpdate( value ) { - - if ( value === true ) this.version ++; - - } - - setUsage( value ) { - - this.usage = value; - - return this; - - } - - copy( source ) { - - this.array = new source.array.constructor( source.array ); - this.count = source.count; - this.stride = source.stride; - this.usage = source.usage; - - return this; - - } - - copyAt( index1, attribute, index2 ) { - - index1 *= this.stride; - index2 *= attribute.stride; - - for ( let i = 0, l = this.stride; i < l; i ++ ) { - - this.array[ index1 + i ] = attribute.array[ index2 + i ]; - - } - - return this; - - } - - set( value, offset = 0 ) { - - this.array.set( value, offset ); - - return this; - - } - - clone( data ) { - - if ( data.arrayBuffers === undefined ) { - - data.arrayBuffers = {}; - - } - - if ( this.array.buffer._uuid === undefined ) { - - this.array.buffer._uuid = generateUUID(); - - } - - if ( data.arrayBuffers[ this.array.buffer._uuid ] === undefined ) { - - data.arrayBuffers[ this.array.buffer._uuid ] = this.array.slice( 0 ).buffer; - - } - - const array = new this.array.constructor( data.arrayBuffers[ this.array.buffer._uuid ] ); - - const ib = new this.constructor( array, this.stride ); - ib.setUsage( this.usage ); - - return ib; - - } - - onUpload( callback ) { - - this.onUploadCallback = callback; - - return this; - - } - - toJSON( data ) { - - if ( data.arrayBuffers === undefined ) { - - data.arrayBuffers = {}; - - } - - // generate UUID for array buffer if necessary - - if ( this.array.buffer._uuid === undefined ) { - - this.array.buffer._uuid = generateUUID(); - - } - - if ( data.arrayBuffers[ this.array.buffer._uuid ] === undefined ) { - - data.arrayBuffers[ this.array.buffer._uuid ] = Array.from( new Uint32Array( this.array.buffer ) ); - - } - - // - - return { - uuid: this.uuid, - buffer: this.array.buffer._uuid, - type: this.array.constructor.name, - stride: this.stride - }; - - } - - } - - const _vector$6 = /*@__PURE__*/ new Vector3(); - - class InterleavedBufferAttribute { - - constructor( interleavedBuffer, itemSize, offset, normalized = false ) { - - this.isInterleavedBufferAttribute = true; - - this.name = ''; - - this.data = interleavedBuffer; - this.itemSize = itemSize; - this.offset = offset; - - this.normalized = normalized; - - } - - get count() { - - return this.data.count; - - } - - get array() { - - return this.data.array; - - } - - set needsUpdate( value ) { - - this.data.needsUpdate = value; - - } - - applyMatrix4( m ) { - - for ( let i = 0, l = this.data.count; i < l; i ++ ) { - - _vector$6.fromBufferAttribute( this, i ); - - _vector$6.applyMatrix4( m ); - - this.setXYZ( i, _vector$6.x, _vector$6.y, _vector$6.z ); - - } - - return this; - - } - - applyNormalMatrix( m ) { - - for ( let i = 0, l = this.count; i < l; i ++ ) { - - _vector$6.fromBufferAttribute( this, i ); - - _vector$6.applyNormalMatrix( m ); - - this.setXYZ( i, _vector$6.x, _vector$6.y, _vector$6.z ); - - } - - return this; - - } - - transformDirection( m ) { - - for ( let i = 0, l = this.count; i < l; i ++ ) { - - _vector$6.fromBufferAttribute( this, i ); - - _vector$6.transformDirection( m ); - - this.setXYZ( i, _vector$6.x, _vector$6.y, _vector$6.z ); - - } - - return this; - - } - - setX( index, x ) { - - if ( this.normalized ) x = normalize( x, this.array ); - - this.data.array[ index * this.data.stride + this.offset ] = x; - - return this; - - } - - setY( index, y ) { - - if ( this.normalized ) y = normalize( y, this.array ); - - this.data.array[ index * this.data.stride + this.offset + 1 ] = y; - - return this; - - } - - setZ( index, z ) { - - if ( this.normalized ) z = normalize( z, this.array ); - - this.data.array[ index * this.data.stride + this.offset + 2 ] = z; - - return this; - - } - - setW( index, w ) { - - if ( this.normalized ) w = normalize( w, this.array ); - - this.data.array[ index * this.data.stride + this.offset + 3 ] = w; - - return this; - - } - - getX( index ) { - - let x = this.data.array[ index * this.data.stride + this.offset ]; - - if ( this.normalized ) x = denormalize( x, this.array ); - - return x; - - } - - getY( index ) { - - let y = this.data.array[ index * this.data.stride + this.offset + 1 ]; - - if ( this.normalized ) y = denormalize( y, this.array ); - - return y; - - } - - getZ( index ) { - - let z = this.data.array[ index * this.data.stride + this.offset + 2 ]; - - if ( this.normalized ) z = denormalize( z, this.array ); - - return z; - - } - - getW( index ) { - - let w = this.data.array[ index * this.data.stride + this.offset + 3 ]; - - if ( this.normalized ) w = denormalize( w, this.array ); - - return w; - - } - - setXY( index, x, y ) { - - index = index * this.data.stride + this.offset; - - if ( this.normalized ) { - - x = normalize( x, this.array ); - y = normalize( y, this.array ); - - } - - this.data.array[ index + 0 ] = x; - this.data.array[ index + 1 ] = y; - - return this; - - } - - setXYZ( index, x, y, z ) { - - index = index * this.data.stride + this.offset; - - if ( this.normalized ) { - - x = normalize( x, this.array ); - y = normalize( y, this.array ); - z = normalize( z, this.array ); - - } - - this.data.array[ index + 0 ] = x; - this.data.array[ index + 1 ] = y; - this.data.array[ index + 2 ] = z; - - return this; - - } - - setXYZW( index, x, y, z, w ) { - - index = index * this.data.stride + this.offset; - - if ( this.normalized ) { - - x = normalize( x, this.array ); - y = normalize( y, this.array ); - z = normalize( z, this.array ); - w = normalize( w, this.array ); - - } - - this.data.array[ index + 0 ] = x; - this.data.array[ index + 1 ] = y; - this.data.array[ index + 2 ] = z; - this.data.array[ index + 3 ] = w; - - return this; - - } - - clone( data ) { - - if ( data === undefined ) { - - console.log( 'THREE.InterleavedBufferAttribute.clone(): Cloning an interleaved buffer attribute will de-interleave buffer data.' ); - - const array = []; - - for ( let i = 0; i < this.count; i ++ ) { - - const index = i * this.data.stride + this.offset; - - for ( let j = 0; j < this.itemSize; j ++ ) { - - array.push( this.data.array[ index + j ] ); - - } - - } - - return new BufferAttribute( new this.array.constructor( array ), this.itemSize, this.normalized ); - - } else { - - if ( data.interleavedBuffers === undefined ) { - - data.interleavedBuffers = {}; - - } - - if ( data.interleavedBuffers[ this.data.uuid ] === undefined ) { - - data.interleavedBuffers[ this.data.uuid ] = this.data.clone( data ); - - } - - return new InterleavedBufferAttribute( data.interleavedBuffers[ this.data.uuid ], this.itemSize, this.offset, this.normalized ); - - } - - } - - toJSON( data ) { - - if ( data === undefined ) { - - console.log( 'THREE.InterleavedBufferAttribute.toJSON(): Serializing an interleaved buffer attribute will de-interleave buffer data.' ); - - const array = []; - - for ( let i = 0; i < this.count; i ++ ) { - - const index = i * this.data.stride + this.offset; - - for ( let j = 0; j < this.itemSize; j ++ ) { - - array.push( this.data.array[ index + j ] ); - - } - - } - - // de-interleave data and save it as an ordinary buffer attribute for now - - return { - itemSize: this.itemSize, - type: this.array.constructor.name, - array: array, - normalized: this.normalized - }; - - } else { - - // save as true interleaved attribute - - if ( data.interleavedBuffers === undefined ) { - - data.interleavedBuffers = {}; - - } - - if ( data.interleavedBuffers[ this.data.uuid ] === undefined ) { - - data.interleavedBuffers[ this.data.uuid ] = this.data.toJSON( data ); - - } - - return { - isInterleavedBufferAttribute: true, - itemSize: this.itemSize, - data: this.data.uuid, - offset: this.offset, - normalized: this.normalized - }; - - } - - } - - } - - class SpriteMaterial extends Material { - - constructor( parameters ) { - - super(); - - this.isSpriteMaterial = true; - - this.type = 'SpriteMaterial'; - - this.color = new Color( 0xffffff ); - - this.map = null; - - this.alphaMap = null; - - this.rotation = 0; - - this.sizeAttenuation = true; - - this.transparent = true; - - this.fog = true; - - this.setValues( parameters ); - - } - - copy( source ) { - - super.copy( source ); - - this.color.copy( source.color ); - - this.map = source.map; - - this.alphaMap = source.alphaMap; - - this.rotation = source.rotation; - - this.sizeAttenuation = source.sizeAttenuation; - - this.fog = source.fog; - - return this; - - } - - } - - let _geometry; - - const _intersectPoint = /*@__PURE__*/ new Vector3(); - const _worldScale = /*@__PURE__*/ new Vector3(); - const _mvPosition = /*@__PURE__*/ new Vector3(); - - const _alignedPosition = /*@__PURE__*/ new Vector2(); - const _rotatedPosition = /*@__PURE__*/ new Vector2(); - const _viewWorldMatrix = /*@__PURE__*/ new Matrix4(); - - const _vA = /*@__PURE__*/ new Vector3(); - const _vB = /*@__PURE__*/ new Vector3(); - const _vC = /*@__PURE__*/ new Vector3(); - - const _uvA = /*@__PURE__*/ new Vector2(); - const _uvB = /*@__PURE__*/ new Vector2(); - const _uvC = /*@__PURE__*/ new Vector2(); - - class Sprite extends Object3D { - - constructor( material ) { - - super(); - - this.isSprite = true; - - this.type = 'Sprite'; - - if ( _geometry === undefined ) { - - _geometry = new BufferGeometry(); - - const float32Array = new Float32Array( [ - - 0.5, - 0.5, 0, 0, 0, - 0.5, - 0.5, 0, 1, 0, - 0.5, 0.5, 0, 1, 1, - - 0.5, 0.5, 0, 0, 1 - ] ); - - const interleavedBuffer = new InterleavedBuffer( float32Array, 5 ); - - _geometry.setIndex( [ 0, 1, 2, 0, 2, 3 ] ); - _geometry.setAttribute( 'position', new InterleavedBufferAttribute( interleavedBuffer, 3, 0, false ) ); - _geometry.setAttribute( 'uv', new InterleavedBufferAttribute( interleavedBuffer, 2, 3, false ) ); - - } - - this.geometry = _geometry; - this.material = ( material !== undefined ) ? material : new SpriteMaterial(); - - this.center = new Vector2( 0.5, 0.5 ); - - } - - raycast( raycaster, intersects ) { - - if ( raycaster.camera === null ) { - - console.error( 'THREE.Sprite: "Raycaster.camera" needs to be set in order to raycast against sprites.' ); - - } - - _worldScale.setFromMatrixScale( this.matrixWorld ); - - _viewWorldMatrix.copy( raycaster.camera.matrixWorld ); - this.modelViewMatrix.multiplyMatrices( raycaster.camera.matrixWorldInverse, this.matrixWorld ); - - _mvPosition.setFromMatrixPosition( this.modelViewMatrix ); - - if ( raycaster.camera.isPerspectiveCamera && this.material.sizeAttenuation === false ) { - - _worldScale.multiplyScalar( - _mvPosition.z ); - - } - - const rotation = this.material.rotation; - let sin, cos; - - if ( rotation !== 0 ) { - - cos = Math.cos( rotation ); - sin = Math.sin( rotation ); - - } - - const center = this.center; - - transformVertex( _vA.set( - 0.5, - 0.5, 0 ), _mvPosition, center, _worldScale, sin, cos ); - transformVertex( _vB.set( 0.5, - 0.5, 0 ), _mvPosition, center, _worldScale, sin, cos ); - transformVertex( _vC.set( 0.5, 0.5, 0 ), _mvPosition, center, _worldScale, sin, cos ); - - _uvA.set( 0, 0 ); - _uvB.set( 1, 0 ); - _uvC.set( 1, 1 ); - - // check first triangle - let intersect = raycaster.ray.intersectTriangle( _vA, _vB, _vC, false, _intersectPoint ); - - if ( intersect === null ) { - - // check second triangle - transformVertex( _vB.set( - 0.5, 0.5, 0 ), _mvPosition, center, _worldScale, sin, cos ); - _uvB.set( 0, 1 ); - - intersect = raycaster.ray.intersectTriangle( _vA, _vC, _vB, false, _intersectPoint ); - if ( intersect === null ) { - - return; - - } - - } - - const distance = raycaster.ray.origin.distanceTo( _intersectPoint ); - - if ( distance < raycaster.near || distance > raycaster.far ) return; - - intersects.push( { - - distance: distance, - point: _intersectPoint.clone(), - uv: Triangle.getUV( _intersectPoint, _vA, _vB, _vC, _uvA, _uvB, _uvC, new Vector2() ), - face: null, - object: this - - } ); - - } - - copy( source, recursive ) { - - super.copy( source, recursive ); - - if ( source.center !== undefined ) this.center.copy( source.center ); - - this.material = source.material; - - return this; - - } - - } - - function transformVertex( vertexPosition, mvPosition, center, scale, sin, cos ) { - - // compute position in camera space - _alignedPosition.subVectors( vertexPosition, center ).addScalar( 0.5 ).multiply( scale ); - - // to check if rotation is not zero - if ( sin !== undefined ) { - - _rotatedPosition.x = ( cos * _alignedPosition.x ) - ( sin * _alignedPosition.y ); - _rotatedPosition.y = ( sin * _alignedPosition.x ) + ( cos * _alignedPosition.y ); - - } else { - - _rotatedPosition.copy( _alignedPosition ); - - } - - - vertexPosition.copy( mvPosition ); - vertexPosition.x += _rotatedPosition.x; - vertexPosition.y += _rotatedPosition.y; - - // transform to world space - vertexPosition.applyMatrix4( _viewWorldMatrix ); - - } - - const _v1$2 = /*@__PURE__*/ new Vector3(); - const _v2$1 = /*@__PURE__*/ new Vector3(); - - class LOD extends Object3D { - - constructor() { - - super(); - - this._currentLevel = 0; - - this.type = 'LOD'; - - Object.defineProperties( this, { - levels: { - enumerable: true, - value: [] - }, - isLOD: { - value: true, - } - } ); - - this.autoUpdate = true; - - } - - copy( source ) { - - super.copy( source, false ); - - const levels = source.levels; - - for ( let i = 0, l = levels.length; i < l; i ++ ) { - - const level = levels[ i ]; - - this.addLevel( level.object.clone(), level.distance, level.hysteresis ); - - } - - this.autoUpdate = source.autoUpdate; - - return this; - - } - - addLevel( object, distance = 0, hysteresis = 0 ) { - - distance = Math.abs( distance ); - - const levels = this.levels; - - let l; - - for ( l = 0; l < levels.length; l ++ ) { - - if ( distance < levels[ l ].distance ) { - - break; - - } - - } - - levels.splice( l, 0, { distance: distance, hysteresis: hysteresis, object: object } ); - - this.add( object ); - - return this; - - } - - getCurrentLevel() { - - return this._currentLevel; - - } - - - - getObjectForDistance( distance ) { - - const levels = this.levels; - - if ( levels.length > 0 ) { - - let i, l; - - for ( i = 1, l = levels.length; i < l; i ++ ) { - - let levelDistance = levels[ i ].distance; - - if ( levels[ i ].object.visible ) { - - levelDistance -= levelDistance * levels[ i ].hysteresis; - - } - - if ( distance < levelDistance ) { - - break; - - } - - } - - return levels[ i - 1 ].object; - - } - - return null; - - } - - raycast( raycaster, intersects ) { - - const levels = this.levels; - - if ( levels.length > 0 ) { - - _v1$2.setFromMatrixPosition( this.matrixWorld ); - - const distance = raycaster.ray.origin.distanceTo( _v1$2 ); - - this.getObjectForDistance( distance ).raycast( raycaster, intersects ); - - } - - } - - update( camera ) { - - const levels = this.levels; - - if ( levels.length > 1 ) { - - _v1$2.setFromMatrixPosition( camera.matrixWorld ); - _v2$1.setFromMatrixPosition( this.matrixWorld ); - - const distance = _v1$2.distanceTo( _v2$1 ) / camera.zoom; - - levels[ 0 ].object.visible = true; - - let i, l; - - for ( i = 1, l = levels.length; i < l; i ++ ) { - - let levelDistance = levels[ i ].distance; - - if ( levels[ i ].object.visible ) { - - levelDistance -= levelDistance * levels[ i ].hysteresis; - - } - - if ( distance >= levelDistance ) { - - levels[ i - 1 ].object.visible = false; - levels[ i ].object.visible = true; - - } else { - - break; - - } - - } - - this._currentLevel = i - 1; - - for ( ; i < l; i ++ ) { - - levels[ i ].object.visible = false; - - } - - } - - } - - toJSON( meta ) { - - const data = super.toJSON( meta ); - - if ( this.autoUpdate === false ) data.object.autoUpdate = false; - - data.object.levels = []; - - const levels = this.levels; - - for ( let i = 0, l = levels.length; i < l; i ++ ) { - - const level = levels[ i ]; - - data.object.levels.push( { - object: level.object.uuid, - distance: level.distance, - hysteresis: level.hysteresis - } ); - - } - - return data; - - } - - } - - const _basePosition = /*@__PURE__*/ new Vector3(); - - const _skinIndex = /*@__PURE__*/ new Vector4(); - const _skinWeight = /*@__PURE__*/ new Vector4(); - - const _vector$5 = /*@__PURE__*/ new Vector3(); - const _matrix = /*@__PURE__*/ new Matrix4(); - - class SkinnedMesh extends Mesh { - - constructor( geometry, material ) { - - super( geometry, material ); - - this.isSkinnedMesh = true; - - this.type = 'SkinnedMesh'; - - this.bindMode = 'attached'; - this.bindMatrix = new Matrix4(); - this.bindMatrixInverse = new Matrix4(); - - } - - copy( source, recursive ) { - - super.copy( source, recursive ); - - this.bindMode = source.bindMode; - this.bindMatrix.copy( source.bindMatrix ); - this.bindMatrixInverse.copy( source.bindMatrixInverse ); - - this.skeleton = source.skeleton; - - return this; - - } - - bind( skeleton, bindMatrix ) { - - this.skeleton = skeleton; - - if ( bindMatrix === undefined ) { - - this.updateMatrixWorld( true ); - - this.skeleton.calculateInverses(); - - bindMatrix = this.matrixWorld; - - } - - this.bindMatrix.copy( bindMatrix ); - this.bindMatrixInverse.copy( bindMatrix ).invert(); - - } - - pose() { - - this.skeleton.pose(); - - } - - normalizeSkinWeights() { - - const vector = new Vector4(); - - const skinWeight = this.geometry.attributes.skinWeight; - - for ( let i = 0, l = skinWeight.count; i < l; i ++ ) { - - vector.fromBufferAttribute( skinWeight, i ); - - const scale = 1.0 / vector.manhattanLength(); - - if ( scale !== Infinity ) { - - vector.multiplyScalar( scale ); - - } else { - - vector.set( 1, 0, 0, 0 ); // do something reasonable - - } - - skinWeight.setXYZW( i, vector.x, vector.y, vector.z, vector.w ); - - } - - } - - updateMatrixWorld( force ) { - - super.updateMatrixWorld( force ); - - if ( this.bindMode === 'attached' ) { - - this.bindMatrixInverse.copy( this.matrixWorld ).invert(); - - } else if ( this.bindMode === 'detached' ) { - - this.bindMatrixInverse.copy( this.bindMatrix ).invert(); - - } else { - - console.warn( 'THREE.SkinnedMesh: Unrecognized bindMode: ' + this.bindMode ); - - } - - } - - boneTransform( index, target ) { - - const skeleton = this.skeleton; - const geometry = this.geometry; - - _skinIndex.fromBufferAttribute( geometry.attributes.skinIndex, index ); - _skinWeight.fromBufferAttribute( geometry.attributes.skinWeight, index ); - - _basePosition.copy( target ).applyMatrix4( this.bindMatrix ); - - target.set( 0, 0, 0 ); - - for ( let i = 0; i < 4; i ++ ) { - - const weight = _skinWeight.getComponent( i ); - - if ( weight !== 0 ) { - - const boneIndex = _skinIndex.getComponent( i ); - - _matrix.multiplyMatrices( skeleton.bones[ boneIndex ].matrixWorld, skeleton.boneInverses[ boneIndex ] ); - - target.addScaledVector( _vector$5.copy( _basePosition ).applyMatrix4( _matrix ), weight ); - - } - - } - - return target.applyMatrix4( this.bindMatrixInverse ); - - } - - } - - class Bone extends Object3D { - - constructor() { - - super(); - - this.isBone = true; - - this.type = 'Bone'; - - } - - } - - class DataTexture extends Texture { - - constructor( data = null, width = 1, height = 1, format, type, mapping, wrapS, wrapT, magFilter = NearestFilter, minFilter = NearestFilter, anisotropy, encoding ) { - - super( null, mapping, wrapS, wrapT, magFilter, minFilter, format, type, anisotropy, encoding ); - - this.isDataTexture = true; - - this.image = { data: data, width: width, height: height }; - - this.generateMipmaps = false; - this.flipY = false; - this.unpackAlignment = 1; - - } - - } - - const _offsetMatrix = /*@__PURE__*/ new Matrix4(); - const _identityMatrix = /*@__PURE__*/ new Matrix4(); - - class Skeleton { - - constructor( bones = [], boneInverses = [] ) { - - this.uuid = generateUUID(); - - this.bones = bones.slice( 0 ); - this.boneInverses = boneInverses; - this.boneMatrices = null; - - this.boneTexture = null; - this.boneTextureSize = 0; - - this.frame = - 1; - - this.init(); - - } - - init() { - - const bones = this.bones; - const boneInverses = this.boneInverses; - - this.boneMatrices = new Float32Array( bones.length * 16 ); - - // calculate inverse bone matrices if necessary - - if ( boneInverses.length === 0 ) { - - this.calculateInverses(); - - } else { - - // handle special case - - if ( bones.length !== boneInverses.length ) { - - console.warn( 'THREE.Skeleton: Number of inverse bone matrices does not match amount of bones.' ); - - this.boneInverses = []; - - for ( let i = 0, il = this.bones.length; i < il; i ++ ) { - - this.boneInverses.push( new Matrix4() ); - - } - - } - - } - - } - - calculateInverses() { - - this.boneInverses.length = 0; - - for ( let i = 0, il = this.bones.length; i < il; i ++ ) { - - const inverse = new Matrix4(); - - if ( this.bones[ i ] ) { - - inverse.copy( this.bones[ i ].matrixWorld ).invert(); - - } - - this.boneInverses.push( inverse ); - - } - - } - - pose() { - - // recover the bind-time world matrices - - for ( let i = 0, il = this.bones.length; i < il; i ++ ) { - - const bone = this.bones[ i ]; - - if ( bone ) { - - bone.matrixWorld.copy( this.boneInverses[ i ] ).invert(); - - } - - } - - // compute the local matrices, positions, rotations and scales - - for ( let i = 0, il = this.bones.length; i < il; i ++ ) { - - const bone = this.bones[ i ]; - - if ( bone ) { - - if ( bone.parent && bone.parent.isBone ) { - - bone.matrix.copy( bone.parent.matrixWorld ).invert(); - bone.matrix.multiply( bone.matrixWorld ); - - } else { - - bone.matrix.copy( bone.matrixWorld ); - - } - - bone.matrix.decompose( bone.position, bone.quaternion, bone.scale ); - - } - - } - - } - - update() { - - const bones = this.bones; - const boneInverses = this.boneInverses; - const boneMatrices = this.boneMatrices; - const boneTexture = this.boneTexture; - - // flatten bone matrices to array - - for ( let i = 0, il = bones.length; i < il; i ++ ) { - - // compute the offset between the current and the original transform - - const matrix = bones[ i ] ? bones[ i ].matrixWorld : _identityMatrix; - - _offsetMatrix.multiplyMatrices( matrix, boneInverses[ i ] ); - _offsetMatrix.toArray( boneMatrices, i * 16 ); - - } - - if ( boneTexture !== null ) { - - boneTexture.needsUpdate = true; - - } - - } - - clone() { - - return new Skeleton( this.bones, this.boneInverses ); - - } - - computeBoneTexture() { - - // layout (1 matrix = 4 pixels) - // RGBA RGBA RGBA RGBA (=> column1, column2, column3, column4) - // with 8x8 pixel texture max 16 bones * 4 pixels = (8 * 8) - // 16x16 pixel texture max 64 bones * 4 pixels = (16 * 16) - // 32x32 pixel texture max 256 bones * 4 pixels = (32 * 32) - // 64x64 pixel texture max 1024 bones * 4 pixels = (64 * 64) - - let size = Math.sqrt( this.bones.length * 4 ); // 4 pixels needed for 1 matrix - size = ceilPowerOfTwo( size ); - size = Math.max( size, 4 ); - - const boneMatrices = new Float32Array( size * size * 4 ); // 4 floats per RGBA pixel - boneMatrices.set( this.boneMatrices ); // copy current values - - const boneTexture = new DataTexture( boneMatrices, size, size, RGBAFormat, FloatType ); - boneTexture.needsUpdate = true; - - this.boneMatrices = boneMatrices; - this.boneTexture = boneTexture; - this.boneTextureSize = size; - - return this; - - } - - getBoneByName( name ) { - - for ( let i = 0, il = this.bones.length; i < il; i ++ ) { - - const bone = this.bones[ i ]; - - if ( bone.name === name ) { - - return bone; - - } - - } - - return undefined; - - } - - dispose( ) { - - if ( this.boneTexture !== null ) { - - this.boneTexture.dispose(); - - this.boneTexture = null; - - } - - } - - fromJSON( json, bones ) { - - this.uuid = json.uuid; - - for ( let i = 0, l = json.bones.length; i < l; i ++ ) { - - const uuid = json.bones[ i ]; - let bone = bones[ uuid ]; - - if ( bone === undefined ) { - - console.warn( 'THREE.Skeleton: No bone found with UUID:', uuid ); - bone = new Bone(); - - } - - this.bones.push( bone ); - this.boneInverses.push( new Matrix4().fromArray( json.boneInverses[ i ] ) ); - - } - - this.init(); - - return this; - - } - - toJSON() { - - const data = { - metadata: { - version: 4.5, - type: 'Skeleton', - generator: 'Skeleton.toJSON' - }, - bones: [], - boneInverses: [] - }; - - data.uuid = this.uuid; - - const bones = this.bones; - const boneInverses = this.boneInverses; - - for ( let i = 0, l = bones.length; i < l; i ++ ) { - - const bone = bones[ i ]; - data.bones.push( bone.uuid ); - - const boneInverse = boneInverses[ i ]; - data.boneInverses.push( boneInverse.toArray() ); - - } - - return data; - - } - - } - - class InstancedBufferAttribute extends BufferAttribute { - - constructor( array, itemSize, normalized, meshPerAttribute = 1 ) { - - super( array, itemSize, normalized ); - - this.isInstancedBufferAttribute = true; - - this.meshPerAttribute = meshPerAttribute; - - } - - copy( source ) { - - super.copy( source ); - - this.meshPerAttribute = source.meshPerAttribute; - - return this; - - } - - toJSON() { - - const data = super.toJSON(); - - data.meshPerAttribute = this.meshPerAttribute; - - data.isInstancedBufferAttribute = true; - - return data; - - } - - } - - const _instanceLocalMatrix = /*@__PURE__*/ new Matrix4(); - const _instanceWorldMatrix = /*@__PURE__*/ new Matrix4(); - - const _instanceIntersects = []; - - const _identity = /*@__PURE__*/ new Matrix4(); - const _mesh = /*@__PURE__*/ new Mesh(); - - class InstancedMesh extends Mesh { - - constructor( geometry, material, count ) { - - super( geometry, material ); - - this.isInstancedMesh = true; - - this.instanceMatrix = new InstancedBufferAttribute( new Float32Array( count * 16 ), 16 ); - this.instanceColor = null; - - this.count = count; - - this.frustumCulled = false; - - for ( let i = 0; i < count; i ++ ) { - - this.setMatrixAt( i, _identity ); - - } - - } - - copy( source, recursive ) { - - super.copy( source, recursive ); - - this.instanceMatrix.copy( source.instanceMatrix ); - - if ( source.instanceColor !== null ) this.instanceColor = source.instanceColor.clone(); - - this.count = source.count; - - return this; - - } - - getColorAt( index, color ) { - - color.fromArray( this.instanceColor.array, index * 3 ); - - } - - getMatrixAt( index, matrix ) { - - matrix.fromArray( this.instanceMatrix.array, index * 16 ); - - } - - raycast( raycaster, intersects ) { - - const matrixWorld = this.matrixWorld; - const raycastTimes = this.count; - - _mesh.geometry = this.geometry; - _mesh.material = this.material; - - if ( _mesh.material === undefined ) return; - - for ( let instanceId = 0; instanceId < raycastTimes; instanceId ++ ) { - - // calculate the world matrix for each instance - - this.getMatrixAt( instanceId, _instanceLocalMatrix ); - - _instanceWorldMatrix.multiplyMatrices( matrixWorld, _instanceLocalMatrix ); - - // the mesh represents this single instance - - _mesh.matrixWorld = _instanceWorldMatrix; - - _mesh.raycast( raycaster, _instanceIntersects ); - - // process the result of raycast - - for ( let i = 0, l = _instanceIntersects.length; i < l; i ++ ) { - - const intersect = _instanceIntersects[ i ]; - intersect.instanceId = instanceId; - intersect.object = this; - intersects.push( intersect ); - - } - - _instanceIntersects.length = 0; - - } - - } - - setColorAt( index, color ) { - - if ( this.instanceColor === null ) { - - this.instanceColor = new InstancedBufferAttribute( new Float32Array( this.instanceMatrix.count * 3 ), 3 ); - - } - - color.toArray( this.instanceColor.array, index * 3 ); - - } - - setMatrixAt( index, matrix ) { - - matrix.toArray( this.instanceMatrix.array, index * 16 ); - - } - - updateMorphTargets() { - - } - - dispose() { - - this.dispatchEvent( { type: 'dispose' } ); - - } - - } - - class LineBasicMaterial extends Material { - - constructor( parameters ) { - - super(); - - this.isLineBasicMaterial = true; - - this.type = 'LineBasicMaterial'; - - this.color = new Color( 0xffffff ); - - this.linewidth = 1; - this.linecap = 'round'; - this.linejoin = 'round'; - - this.fog = true; - - this.setValues( parameters ); - - } - - - copy( source ) { - - super.copy( source ); - - this.color.copy( source.color ); - - this.linewidth = source.linewidth; - this.linecap = source.linecap; - this.linejoin = source.linejoin; - - this.fog = source.fog; - - return this; - - } - - } - - const _start$1 = /*@__PURE__*/ new Vector3(); - const _end$1 = /*@__PURE__*/ new Vector3(); - const _inverseMatrix$1 = /*@__PURE__*/ new Matrix4(); - const _ray$1 = /*@__PURE__*/ new Ray(); - const _sphere$1 = /*@__PURE__*/ new Sphere(); - - class Line extends Object3D { - - constructor( geometry = new BufferGeometry(), material = new LineBasicMaterial() ) { - - super(); - - this.isLine = true; - - this.type = 'Line'; - - this.geometry = geometry; - this.material = material; - - this.updateMorphTargets(); - - } - - copy( source, recursive ) { - - super.copy( source, recursive ); - - this.material = source.material; - this.geometry = source.geometry; - - return this; - - } - - computeLineDistances() { - - const geometry = this.geometry; - - // we assume non-indexed geometry - - if ( geometry.index === null ) { - - const positionAttribute = geometry.attributes.position; - const lineDistances = [ 0 ]; - - for ( let i = 1, l = positionAttribute.count; i < l; i ++ ) { - - _start$1.fromBufferAttribute( positionAttribute, i - 1 ); - _end$1.fromBufferAttribute( positionAttribute, i ); - - lineDistances[ i ] = lineDistances[ i - 1 ]; - lineDistances[ i ] += _start$1.distanceTo( _end$1 ); - - } - - geometry.setAttribute( 'lineDistance', new Float32BufferAttribute( lineDistances, 1 ) ); - - } else { - - console.warn( 'THREE.Line.computeLineDistances(): Computation only possible with non-indexed BufferGeometry.' ); - - } - - return this; - - } - - raycast( raycaster, intersects ) { - - const geometry = this.geometry; - const matrixWorld = this.matrixWorld; - const threshold = raycaster.params.Line.threshold; - const drawRange = geometry.drawRange; - - // Checking boundingSphere distance to ray - - if ( geometry.boundingSphere === null ) geometry.computeBoundingSphere(); - - _sphere$1.copy( geometry.boundingSphere ); - _sphere$1.applyMatrix4( matrixWorld ); - _sphere$1.radius += threshold; - - if ( raycaster.ray.intersectsSphere( _sphere$1 ) === false ) return; - - // - - _inverseMatrix$1.copy( matrixWorld ).invert(); - _ray$1.copy( raycaster.ray ).applyMatrix4( _inverseMatrix$1 ); - - const localThreshold = threshold / ( ( this.scale.x + this.scale.y + this.scale.z ) / 3 ); - const localThresholdSq = localThreshold * localThreshold; - - const vStart = new Vector3(); - const vEnd = new Vector3(); - const interSegment = new Vector3(); - const interRay = new Vector3(); - const step = this.isLineSegments ? 2 : 1; - - const index = geometry.index; - const attributes = geometry.attributes; - const positionAttribute = attributes.position; - - if ( index !== null ) { - - const start = Math.max( 0, drawRange.start ); - const end = Math.min( index.count, ( drawRange.start + drawRange.count ) ); - - for ( let i = start, l = end - 1; i < l; i += step ) { - - const a = index.getX( i ); - const b = index.getX( i + 1 ); - - vStart.fromBufferAttribute( positionAttribute, a ); - vEnd.fromBufferAttribute( positionAttribute, b ); - - const distSq = _ray$1.distanceSqToSegment( vStart, vEnd, interRay, interSegment ); - - if ( distSq > localThresholdSq ) continue; - - interRay.applyMatrix4( this.matrixWorld ); //Move back to world space for distance calculation - - const distance = raycaster.ray.origin.distanceTo( interRay ); - - if ( distance < raycaster.near || distance > raycaster.far ) continue; - - intersects.push( { - - distance: distance, - // What do we want? intersection point on the ray or on the segment?? - // point: raycaster.ray.at( distance ), - point: interSegment.clone().applyMatrix4( this.matrixWorld ), - index: i, - face: null, - faceIndex: null, - object: this - - } ); - - } - - } else { - - const start = Math.max( 0, drawRange.start ); - const end = Math.min( positionAttribute.count, ( drawRange.start + drawRange.count ) ); - - for ( let i = start, l = end - 1; i < l; i += step ) { - - vStart.fromBufferAttribute( positionAttribute, i ); - vEnd.fromBufferAttribute( positionAttribute, i + 1 ); - - const distSq = _ray$1.distanceSqToSegment( vStart, vEnd, interRay, interSegment ); - - if ( distSq > localThresholdSq ) continue; - - interRay.applyMatrix4( this.matrixWorld ); //Move back to world space for distance calculation - - const distance = raycaster.ray.origin.distanceTo( interRay ); - - if ( distance < raycaster.near || distance > raycaster.far ) continue; - - intersects.push( { - - distance: distance, - // What do we want? intersection point on the ray or on the segment?? - // point: raycaster.ray.at( distance ), - point: interSegment.clone().applyMatrix4( this.matrixWorld ), - index: i, - face: null, - faceIndex: null, - object: this - - } ); - - } - - } - - } - - updateMorphTargets() { - - const geometry = this.geometry; - - const morphAttributes = geometry.morphAttributes; - const keys = Object.keys( morphAttributes ); - - if ( keys.length > 0 ) { - - const morphAttribute = morphAttributes[ keys[ 0 ] ]; - - if ( morphAttribute !== undefined ) { - - this.morphTargetInfluences = []; - this.morphTargetDictionary = {}; - - for ( let m = 0, ml = morphAttribute.length; m < ml; m ++ ) { - - const name = morphAttribute[ m ].name || String( m ); - - this.morphTargetInfluences.push( 0 ); - this.morphTargetDictionary[ name ] = m; - - } - - } - - } - - } - - } - - const _start = /*@__PURE__*/ new Vector3(); - const _end = /*@__PURE__*/ new Vector3(); - - class LineSegments extends Line { - - constructor( geometry, material ) { - - super( geometry, material ); - - this.isLineSegments = true; - - this.type = 'LineSegments'; - - } - - computeLineDistances() { - - const geometry = this.geometry; - - // we assume non-indexed geometry - - if ( geometry.index === null ) { - - const positionAttribute = geometry.attributes.position; - const lineDistances = []; - - for ( let i = 0, l = positionAttribute.count; i < l; i += 2 ) { - - _start.fromBufferAttribute( positionAttribute, i ); - _end.fromBufferAttribute( positionAttribute, i + 1 ); - - lineDistances[ i ] = ( i === 0 ) ? 0 : lineDistances[ i - 1 ]; - lineDistances[ i + 1 ] = lineDistances[ i ] + _start.distanceTo( _end ); - - } - - geometry.setAttribute( 'lineDistance', new Float32BufferAttribute( lineDistances, 1 ) ); - - } else { - - console.warn( 'THREE.LineSegments.computeLineDistances(): Computation only possible with non-indexed BufferGeometry.' ); - - } - - return this; - - } - - } - - class LineLoop extends Line { - - constructor( geometry, material ) { - - super( geometry, material ); - - this.isLineLoop = true; - - this.type = 'LineLoop'; - - } - - } - - class PointsMaterial extends Material { - - constructor( parameters ) { - - super(); - - this.isPointsMaterial = true; - - this.type = 'PointsMaterial'; - - this.color = new Color( 0xffffff ); - - this.map = null; - - this.alphaMap = null; - - this.size = 1; - this.sizeAttenuation = true; - - this.fog = true; - - this.setValues( parameters ); - - } - - copy( source ) { - - super.copy( source ); - - this.color.copy( source.color ); - - this.map = source.map; - - this.alphaMap = source.alphaMap; - - this.size = source.size; - this.sizeAttenuation = source.sizeAttenuation; - - this.fog = source.fog; - - return this; - - } - - } - - const _inverseMatrix = /*@__PURE__*/ new Matrix4(); - const _ray = /*@__PURE__*/ new Ray(); - const _sphere = /*@__PURE__*/ new Sphere(); - const _position$2 = /*@__PURE__*/ new Vector3(); - - class Points extends Object3D { - - constructor( geometry = new BufferGeometry(), material = new PointsMaterial() ) { - - super(); - - this.isPoints = true; - - this.type = 'Points'; - - this.geometry = geometry; - this.material = material; - - this.updateMorphTargets(); - - } - - copy( source, recursive ) { - - super.copy( source, recursive ); - - this.material = source.material; - this.geometry = source.geometry; - - return this; - - } - - raycast( raycaster, intersects ) { - - const geometry = this.geometry; - const matrixWorld = this.matrixWorld; - const threshold = raycaster.params.Points.threshold; - const drawRange = geometry.drawRange; - - // Checking boundingSphere distance to ray - - if ( geometry.boundingSphere === null ) geometry.computeBoundingSphere(); - - _sphere.copy( geometry.boundingSphere ); - _sphere.applyMatrix4( matrixWorld ); - _sphere.radius += threshold; - - if ( raycaster.ray.intersectsSphere( _sphere ) === false ) return; - - // - - _inverseMatrix.copy( matrixWorld ).invert(); - _ray.copy( raycaster.ray ).applyMatrix4( _inverseMatrix ); - - const localThreshold = threshold / ( ( this.scale.x + this.scale.y + this.scale.z ) / 3 ); - const localThresholdSq = localThreshold * localThreshold; - - const index = geometry.index; - const attributes = geometry.attributes; - const positionAttribute = attributes.position; - - if ( index !== null ) { - - const start = Math.max( 0, drawRange.start ); - const end = Math.min( index.count, ( drawRange.start + drawRange.count ) ); - - for ( let i = start, il = end; i < il; i ++ ) { - - const a = index.getX( i ); - - _position$2.fromBufferAttribute( positionAttribute, a ); - - testPoint( _position$2, a, localThresholdSq, matrixWorld, raycaster, intersects, this ); - - } - - } else { - - const start = Math.max( 0, drawRange.start ); - const end = Math.min( positionAttribute.count, ( drawRange.start + drawRange.count ) ); - - for ( let i = start, l = end; i < l; i ++ ) { - - _position$2.fromBufferAttribute( positionAttribute, i ); - - testPoint( _position$2, i, localThresholdSq, matrixWorld, raycaster, intersects, this ); - - } - - } - - } - - updateMorphTargets() { - - const geometry = this.geometry; - - const morphAttributes = geometry.morphAttributes; - const keys = Object.keys( morphAttributes ); - - if ( keys.length > 0 ) { - - const morphAttribute = morphAttributes[ keys[ 0 ] ]; - - if ( morphAttribute !== undefined ) { - - this.morphTargetInfluences = []; - this.morphTargetDictionary = {}; - - for ( let m = 0, ml = morphAttribute.length; m < ml; m ++ ) { - - const name = morphAttribute[ m ].name || String( m ); - - this.morphTargetInfluences.push( 0 ); - this.morphTargetDictionary[ name ] = m; - - } - - } - - } - - } - - } - - function testPoint( point, index, localThresholdSq, matrixWorld, raycaster, intersects, object ) { - - const rayPointDistanceSq = _ray.distanceSqToPoint( point ); - - if ( rayPointDistanceSq < localThresholdSq ) { - - const intersectPoint = new Vector3(); - - _ray.closestPointToPoint( point, intersectPoint ); - intersectPoint.applyMatrix4( matrixWorld ); - - const distance = raycaster.ray.origin.distanceTo( intersectPoint ); - - if ( distance < raycaster.near || distance > raycaster.far ) return; - - intersects.push( { - - distance: distance, - distanceToRay: Math.sqrt( rayPointDistanceSq ), - point: intersectPoint, - index: index, - face: null, - object: object - - } ); - - } - - } - - class VideoTexture extends Texture { - - constructor( video, mapping, wrapS, wrapT, magFilter, minFilter, format, type, anisotropy ) { - - super( video, mapping, wrapS, wrapT, magFilter, minFilter, format, type, anisotropy ); - - this.isVideoTexture = true; - - this.minFilter = minFilter !== undefined ? minFilter : LinearFilter; - this.magFilter = magFilter !== undefined ? magFilter : LinearFilter; - - this.generateMipmaps = false; - - const scope = this; - - function updateVideo() { - - scope.needsUpdate = true; - video.requestVideoFrameCallback( updateVideo ); - - } - - if ( 'requestVideoFrameCallback' in video ) { - - video.requestVideoFrameCallback( updateVideo ); - - } - - } - - clone() { - - return new this.constructor( this.image ).copy( this ); - - } - - update() { - - const video = this.image; - const hasVideoFrameCallback = 'requestVideoFrameCallback' in video; - - if ( hasVideoFrameCallback === false && video.readyState >= video.HAVE_CURRENT_DATA ) { - - this.needsUpdate = true; - - } - - } - - } - - class FramebufferTexture extends Texture { - - constructor( width, height, format ) { - - super( { width, height } ); - - this.isFramebufferTexture = true; - - this.format = format; - - this.magFilter = NearestFilter; - this.minFilter = NearestFilter; - - this.generateMipmaps = false; - - this.needsUpdate = true; - - } - - } - - class CompressedTexture extends Texture { - - constructor( mipmaps, width, height, format, type, mapping, wrapS, wrapT, magFilter, minFilter, anisotropy, encoding ) { - - super( null, mapping, wrapS, wrapT, magFilter, minFilter, format, type, anisotropy, encoding ); - - this.isCompressedTexture = true; - - this.image = { width: width, height: height }; - this.mipmaps = mipmaps; - - // no flipping for cube textures - // (also flipping doesn't work for compressed textures ) - - this.flipY = false; - - // can't generate mipmaps for compressed textures - // mips must be embedded in DDS files - - this.generateMipmaps = false; - - } - - } - - class CompressedArrayTexture extends CompressedTexture { - - constructor( mipmaps, width, height, depth, format, type ) { - - super( mipmaps, width, height, format, type ); - - this.isCompressedArrayTexture = true; - this.image.depth = depth; - this.wrapR = ClampToEdgeWrapping; - - } - - } - - class CanvasTexture extends Texture { - - constructor( canvas, mapping, wrapS, wrapT, magFilter, minFilter, format, type, anisotropy ) { - - super( canvas, mapping, wrapS, wrapT, magFilter, minFilter, format, type, anisotropy ); - - this.isCanvasTexture = true; - - this.needsUpdate = true; - - } - - } - - /** - * Extensible curve object. - * - * Some common of curve methods: - * .getPoint( t, optionalTarget ), .getTangent( t, optionalTarget ) - * .getPointAt( u, optionalTarget ), .getTangentAt( u, optionalTarget ) - * .getPoints(), .getSpacedPoints() - * .getLength() - * .updateArcLengths() - * - * This following curves inherit from THREE.Curve: - * - * -- 2D curves -- - * THREE.ArcCurve - * THREE.CubicBezierCurve - * THREE.EllipseCurve - * THREE.LineCurve - * THREE.QuadraticBezierCurve - * THREE.SplineCurve - * - * -- 3D curves -- - * THREE.CatmullRomCurve3 - * THREE.CubicBezierCurve3 - * THREE.LineCurve3 - * THREE.QuadraticBezierCurve3 - * - * A series of curves can be represented as a THREE.CurvePath. - * - **/ - - class Curve { - - constructor() { - - this.type = 'Curve'; - - this.arcLengthDivisions = 200; - - } - - // Virtual base class method to overwrite and implement in subclasses - // - t [0 .. 1] - - getPoint( /* t, optionalTarget */ ) { - - console.warn( 'THREE.Curve: .getPoint() not implemented.' ); - return null; - - } - - // Get point at relative position in curve according to arc length - // - u [0 .. 1] - - getPointAt( u, optionalTarget ) { - - const t = this.getUtoTmapping( u ); - return this.getPoint( t, optionalTarget ); - - } - - // Get sequence of points using getPoint( t ) - - getPoints( divisions = 5 ) { - - const points = []; - - for ( let d = 0; d <= divisions; d ++ ) { - - points.push( this.getPoint( d / divisions ) ); - - } - - return points; - - } - - // Get sequence of points using getPointAt( u ) - - getSpacedPoints( divisions = 5 ) { - - const points = []; - - for ( let d = 0; d <= divisions; d ++ ) { - - points.push( this.getPointAt( d / divisions ) ); - - } - - return points; - - } - - // Get total curve arc length - - getLength() { - - const lengths = this.getLengths(); - return lengths[ lengths.length - 1 ]; - - } - - // Get list of cumulative segment lengths - - getLengths( divisions = this.arcLengthDivisions ) { - - if ( this.cacheArcLengths && - ( this.cacheArcLengths.length === divisions + 1 ) && - ! this.needsUpdate ) { - - return this.cacheArcLengths; - - } - - this.needsUpdate = false; - - const cache = []; - let current, last = this.getPoint( 0 ); - let sum = 0; - - cache.push( 0 ); - - for ( let p = 1; p <= divisions; p ++ ) { - - current = this.getPoint( p / divisions ); - sum += current.distanceTo( last ); - cache.push( sum ); - last = current; - - } - - this.cacheArcLengths = cache; - - return cache; // { sums: cache, sum: sum }; Sum is in the last element. - - } - - updateArcLengths() { - - this.needsUpdate = true; - this.getLengths(); - - } - - // Given u ( 0 .. 1 ), get a t to find p. This gives you points which are equidistant - - getUtoTmapping( u, distance ) { - - const arcLengths = this.getLengths(); - - let i = 0; - const il = arcLengths.length; - - let targetArcLength; // The targeted u distance value to get - - if ( distance ) { - - targetArcLength = distance; - - } else { - - targetArcLength = u * arcLengths[ il - 1 ]; - - } - - // binary search for the index with largest value smaller than target u distance - - let low = 0, high = il - 1, comparison; - - while ( low <= high ) { - - i = Math.floor( low + ( high - low ) / 2 ); // less likely to overflow, though probably not issue here, JS doesn't really have integers, all numbers are floats - - comparison = arcLengths[ i ] - targetArcLength; - - if ( comparison < 0 ) { - - low = i + 1; - - } else if ( comparison > 0 ) { - - high = i - 1; - - } else { - - high = i; - break; - - // DONE - - } - - } - - i = high; - - if ( arcLengths[ i ] === targetArcLength ) { - - return i / ( il - 1 ); - - } - - // we could get finer grain at lengths, or use simple interpolation between two points - - const lengthBefore = arcLengths[ i ]; - const lengthAfter = arcLengths[ i + 1 ]; - - const segmentLength = lengthAfter - lengthBefore; - - // determine where we are between the 'before' and 'after' points - - const segmentFraction = ( targetArcLength - lengthBefore ) / segmentLength; - - // add that fractional amount to t - - const t = ( i + segmentFraction ) / ( il - 1 ); - - return t; - - } - - // Returns a unit vector tangent at t - // In case any sub curve does not implement its tangent derivation, - // 2 points a small delta apart will be used to find its gradient - // which seems to give a reasonable approximation - - getTangent( t, optionalTarget ) { - - const delta = 0.0001; - let t1 = t - delta; - let t2 = t + delta; - - // Capping in case of danger - - if ( t1 < 0 ) t1 = 0; - if ( t2 > 1 ) t2 = 1; - - const pt1 = this.getPoint( t1 ); - const pt2 = this.getPoint( t2 ); - - const tangent = optionalTarget || ( ( pt1.isVector2 ) ? new Vector2() : new Vector3() ); - - tangent.copy( pt2 ).sub( pt1 ).normalize(); - - return tangent; - - } - - getTangentAt( u, optionalTarget ) { - - const t = this.getUtoTmapping( u ); - return this.getTangent( t, optionalTarget ); - - } - - computeFrenetFrames( segments, closed ) { - - // see http://www.cs.indiana.edu/pub/techreports/TR425.pdf - - const normal = new Vector3(); - - const tangents = []; - const normals = []; - const binormals = []; - - const vec = new Vector3(); - const mat = new Matrix4(); - - // compute the tangent vectors for each segment on the curve - - for ( let i = 0; i <= segments; i ++ ) { - - const u = i / segments; - - tangents[ i ] = this.getTangentAt( u, new Vector3() ); - - } - - // select an initial normal vector perpendicular to the first tangent vector, - // and in the direction of the minimum tangent xyz component - - normals[ 0 ] = new Vector3(); - binormals[ 0 ] = new Vector3(); - let min = Number.MAX_VALUE; - const tx = Math.abs( tangents[ 0 ].x ); - const ty = Math.abs( tangents[ 0 ].y ); - const tz = Math.abs( tangents[ 0 ].z ); - - if ( tx <= min ) { - - min = tx; - normal.set( 1, 0, 0 ); - - } - - if ( ty <= min ) { - - min = ty; - normal.set( 0, 1, 0 ); - - } - - if ( tz <= min ) { - - normal.set( 0, 0, 1 ); - - } - - vec.crossVectors( tangents[ 0 ], normal ).normalize(); - - normals[ 0 ].crossVectors( tangents[ 0 ], vec ); - binormals[ 0 ].crossVectors( tangents[ 0 ], normals[ 0 ] ); - - - // compute the slowly-varying normal and binormal vectors for each segment on the curve - - for ( let i = 1; i <= segments; i ++ ) { - - normals[ i ] = normals[ i - 1 ].clone(); - - binormals[ i ] = binormals[ i - 1 ].clone(); - - vec.crossVectors( tangents[ i - 1 ], tangents[ i ] ); - - if ( vec.length() > Number.EPSILON ) { - - vec.normalize(); - - const theta = Math.acos( clamp( tangents[ i - 1 ].dot( tangents[ i ] ), - 1, 1 ) ); // clamp for floating pt errors - - normals[ i ].applyMatrix4( mat.makeRotationAxis( vec, theta ) ); - - } - - binormals[ i ].crossVectors( tangents[ i ], normals[ i ] ); - - } - - // if the curve is closed, postprocess the vectors so the first and last normal vectors are the same - - if ( closed === true ) { - - let theta = Math.acos( clamp( normals[ 0 ].dot( normals[ segments ] ), - 1, 1 ) ); - theta /= segments; - - if ( tangents[ 0 ].dot( vec.crossVectors( normals[ 0 ], normals[ segments ] ) ) > 0 ) { - - theta = - theta; - - } - - for ( let i = 1; i <= segments; i ++ ) { - - // twist a little... - normals[ i ].applyMatrix4( mat.makeRotationAxis( tangents[ i ], theta * i ) ); - binormals[ i ].crossVectors( tangents[ i ], normals[ i ] ); - - } - - } - - return { - tangents: tangents, - normals: normals, - binormals: binormals - }; - - } - - clone() { - - return new this.constructor().copy( this ); - - } - - copy( source ) { - - this.arcLengthDivisions = source.arcLengthDivisions; - - return this; - - } - - toJSON() { - - const data = { - metadata: { - version: 4.5, - type: 'Curve', - generator: 'Curve.toJSON' - } - }; - - data.arcLengthDivisions = this.arcLengthDivisions; - data.type = this.type; - - return data; - - } - - fromJSON( json ) { - - this.arcLengthDivisions = json.arcLengthDivisions; - - return this; - - } - - } - - class EllipseCurve extends Curve { - - constructor( aX = 0, aY = 0, xRadius = 1, yRadius = 1, aStartAngle = 0, aEndAngle = Math.PI * 2, aClockwise = false, aRotation = 0 ) { - - super(); - - this.isEllipseCurve = true; - - this.type = 'EllipseCurve'; - - this.aX = aX; - this.aY = aY; - - this.xRadius = xRadius; - this.yRadius = yRadius; - - this.aStartAngle = aStartAngle; - this.aEndAngle = aEndAngle; - - this.aClockwise = aClockwise; - - this.aRotation = aRotation; - - } - - getPoint( t, optionalTarget ) { - - const point = optionalTarget || new Vector2(); - - const twoPi = Math.PI * 2; - let deltaAngle = this.aEndAngle - this.aStartAngle; - const samePoints = Math.abs( deltaAngle ) < Number.EPSILON; - - // ensures that deltaAngle is 0 .. 2 PI - while ( deltaAngle < 0 ) deltaAngle += twoPi; - while ( deltaAngle > twoPi ) deltaAngle -= twoPi; - - if ( deltaAngle < Number.EPSILON ) { - - if ( samePoints ) { - - deltaAngle = 0; - - } else { - - deltaAngle = twoPi; - - } - - } - - if ( this.aClockwise === true && ! samePoints ) { - - if ( deltaAngle === twoPi ) { - - deltaAngle = - twoPi; - - } else { - - deltaAngle = deltaAngle - twoPi; - - } - - } - - const angle = this.aStartAngle + t * deltaAngle; - let x = this.aX + this.xRadius * Math.cos( angle ); - let y = this.aY + this.yRadius * Math.sin( angle ); - - if ( this.aRotation !== 0 ) { - - const cos = Math.cos( this.aRotation ); - const sin = Math.sin( this.aRotation ); - - const tx = x - this.aX; - const ty = y - this.aY; - - // Rotate the point about the center of the ellipse. - x = tx * cos - ty * sin + this.aX; - y = tx * sin + ty * cos + this.aY; - - } - - return point.set( x, y ); - - } - - copy( source ) { - - super.copy( source ); - - this.aX = source.aX; - this.aY = source.aY; - - this.xRadius = source.xRadius; - this.yRadius = source.yRadius; - - this.aStartAngle = source.aStartAngle; - this.aEndAngle = source.aEndAngle; - - this.aClockwise = source.aClockwise; - - this.aRotation = source.aRotation; - - return this; - - } - - toJSON() { - - const data = super.toJSON(); - - data.aX = this.aX; - data.aY = this.aY; - - data.xRadius = this.xRadius; - data.yRadius = this.yRadius; - - data.aStartAngle = this.aStartAngle; - data.aEndAngle = this.aEndAngle; - - data.aClockwise = this.aClockwise; - - data.aRotation = this.aRotation; - - return data; - - } - - fromJSON( json ) { - - super.fromJSON( json ); - - this.aX = json.aX; - this.aY = json.aY; - - this.xRadius = json.xRadius; - this.yRadius = json.yRadius; - - this.aStartAngle = json.aStartAngle; - this.aEndAngle = json.aEndAngle; - - this.aClockwise = json.aClockwise; - - this.aRotation = json.aRotation; - - return this; - - } - - } - - class ArcCurve extends EllipseCurve { - - constructor( aX, aY, aRadius, aStartAngle, aEndAngle, aClockwise ) { - - super( aX, aY, aRadius, aRadius, aStartAngle, aEndAngle, aClockwise ); - - this.isArcCurve = true; - - this.type = 'ArcCurve'; - - } - - } - - /** - * Centripetal CatmullRom Curve - which is useful for avoiding - * cusps and self-intersections in non-uniform catmull rom curves. - * http://www.cemyuksel.com/research/catmullrom_param/catmullrom.pdf - * - * curve.type accepts centripetal(default), chordal and catmullrom - * curve.tension is used for catmullrom which defaults to 0.5 - */ - - - /* - Based on an optimized c++ solution in - - http://stackoverflow.com/questions/9489736/catmull-rom-curve-with-no-cusps-and-no-self-intersections/ - - http://ideone.com/NoEbVM - - This CubicPoly class could be used for reusing some variables and calculations, - but for three.js curve use, it could be possible inlined and flatten into a single function call - which can be placed in CurveUtils. - */ - - function CubicPoly() { - - let c0 = 0, c1 = 0, c2 = 0, c3 = 0; - - /* - * Compute coefficients for a cubic polynomial - * p(s) = c0 + c1*s + c2*s^2 + c3*s^3 - * such that - * p(0) = x0, p(1) = x1 - * and - * p'(0) = t0, p'(1) = t1. - */ - function init( x0, x1, t0, t1 ) { - - c0 = x0; - c1 = t0; - c2 = - 3 * x0 + 3 * x1 - 2 * t0 - t1; - c3 = 2 * x0 - 2 * x1 + t0 + t1; - - } - - return { - - initCatmullRom: function ( x0, x1, x2, x3, tension ) { - - init( x1, x2, tension * ( x2 - x0 ), tension * ( x3 - x1 ) ); - - }, - - initNonuniformCatmullRom: function ( x0, x1, x2, x3, dt0, dt1, dt2 ) { - - // compute tangents when parameterized in [t1,t2] - let t1 = ( x1 - x0 ) / dt0 - ( x2 - x0 ) / ( dt0 + dt1 ) + ( x2 - x1 ) / dt1; - let t2 = ( x2 - x1 ) / dt1 - ( x3 - x1 ) / ( dt1 + dt2 ) + ( x3 - x2 ) / dt2; - - // rescale tangents for parametrization in [0,1] - t1 *= dt1; - t2 *= dt1; - - init( x1, x2, t1, t2 ); - - }, - - calc: function ( t ) { - - const t2 = t * t; - const t3 = t2 * t; - return c0 + c1 * t + c2 * t2 + c3 * t3; - - } - - }; - - } - - // - - const tmp = /*@__PURE__*/ new Vector3(); - const px = /*@__PURE__*/ new CubicPoly(); - const py = /*@__PURE__*/ new CubicPoly(); - const pz = /*@__PURE__*/ new CubicPoly(); - - class CatmullRomCurve3 extends Curve { - - constructor( points = [], closed = false, curveType = 'centripetal', tension = 0.5 ) { - - super(); - - this.isCatmullRomCurve3 = true; - - this.type = 'CatmullRomCurve3'; - - this.points = points; - this.closed = closed; - this.curveType = curveType; - this.tension = tension; - - } - - getPoint( t, optionalTarget = new Vector3() ) { - - const point = optionalTarget; - - const points = this.points; - const l = points.length; - - const p = ( l - ( this.closed ? 0 : 1 ) ) * t; - let intPoint = Math.floor( p ); - let weight = p - intPoint; - - if ( this.closed ) { - - intPoint += intPoint > 0 ? 0 : ( Math.floor( Math.abs( intPoint ) / l ) + 1 ) * l; - - } else if ( weight === 0 && intPoint === l - 1 ) { - - intPoint = l - 2; - weight = 1; - - } - - let p0, p3; // 4 points (p1 & p2 defined below) - - if ( this.closed || intPoint > 0 ) { - - p0 = points[ ( intPoint - 1 ) % l ]; - - } else { - - // extrapolate first point - tmp.subVectors( points[ 0 ], points[ 1 ] ).add( points[ 0 ] ); - p0 = tmp; - - } - - const p1 = points[ intPoint % l ]; - const p2 = points[ ( intPoint + 1 ) % l ]; - - if ( this.closed || intPoint + 2 < l ) { - - p3 = points[ ( intPoint + 2 ) % l ]; - - } else { - - // extrapolate last point - tmp.subVectors( points[ l - 1 ], points[ l - 2 ] ).add( points[ l - 1 ] ); - p3 = tmp; - - } - - if ( this.curveType === 'centripetal' || this.curveType === 'chordal' ) { - - // init Centripetal / Chordal Catmull-Rom - const pow = this.curveType === 'chordal' ? 0.5 : 0.25; - let dt0 = Math.pow( p0.distanceToSquared( p1 ), pow ); - let dt1 = Math.pow( p1.distanceToSquared( p2 ), pow ); - let dt2 = Math.pow( p2.distanceToSquared( p3 ), pow ); - - // safety check for repeated points - if ( dt1 < 1e-4 ) dt1 = 1.0; - if ( dt0 < 1e-4 ) dt0 = dt1; - if ( dt2 < 1e-4 ) dt2 = dt1; - - px.initNonuniformCatmullRom( p0.x, p1.x, p2.x, p3.x, dt0, dt1, dt2 ); - py.initNonuniformCatmullRom( p0.y, p1.y, p2.y, p3.y, dt0, dt1, dt2 ); - pz.initNonuniformCatmullRom( p0.z, p1.z, p2.z, p3.z, dt0, dt1, dt2 ); - - } else if ( this.curveType === 'catmullrom' ) { - - px.initCatmullRom( p0.x, p1.x, p2.x, p3.x, this.tension ); - py.initCatmullRom( p0.y, p1.y, p2.y, p3.y, this.tension ); - pz.initCatmullRom( p0.z, p1.z, p2.z, p3.z, this.tension ); - - } - - point.set( - px.calc( weight ), - py.calc( weight ), - pz.calc( weight ) - ); - - return point; - - } - - copy( source ) { - - super.copy( source ); - - this.points = []; - - for ( let i = 0, l = source.points.length; i < l; i ++ ) { - - const point = source.points[ i ]; - - this.points.push( point.clone() ); - - } - - this.closed = source.closed; - this.curveType = source.curveType; - this.tension = source.tension; - - return this; - - } - - toJSON() { - - const data = super.toJSON(); - - data.points = []; - - for ( let i = 0, l = this.points.length; i < l; i ++ ) { - - const point = this.points[ i ]; - data.points.push( point.toArray() ); - - } - - data.closed = this.closed; - data.curveType = this.curveType; - data.tension = this.tension; - - return data; - - } - - fromJSON( json ) { - - super.fromJSON( json ); - - this.points = []; - - for ( let i = 0, l = json.points.length; i < l; i ++ ) { - - const point = json.points[ i ]; - this.points.push( new Vector3().fromArray( point ) ); - - } - - this.closed = json.closed; - this.curveType = json.curveType; - this.tension = json.tension; - - return this; - - } - - } - - /** - * Bezier Curves formulas obtained from - * https://en.wikipedia.org/wiki/B%C3%A9zier_curve - */ - - function CatmullRom( t, p0, p1, p2, p3 ) { - - const v0 = ( p2 - p0 ) * 0.5; - const v1 = ( p3 - p1 ) * 0.5; - const t2 = t * t; - const t3 = t * t2; - return ( 2 * p1 - 2 * p2 + v0 + v1 ) * t3 + ( - 3 * p1 + 3 * p2 - 2 * v0 - v1 ) * t2 + v0 * t + p1; - - } - - // - - function QuadraticBezierP0( t, p ) { - - const k = 1 - t; - return k * k * p; - - } - - function QuadraticBezierP1( t, p ) { - - return 2 * ( 1 - t ) * t * p; - - } - - function QuadraticBezierP2( t, p ) { - - return t * t * p; - - } - - function QuadraticBezier( t, p0, p1, p2 ) { - - return QuadraticBezierP0( t, p0 ) + QuadraticBezierP1( t, p1 ) + - QuadraticBezierP2( t, p2 ); - - } - - // - - function CubicBezierP0( t, p ) { - - const k = 1 - t; - return k * k * k * p; - - } - - function CubicBezierP1( t, p ) { - - const k = 1 - t; - return 3 * k * k * t * p; - - } - - function CubicBezierP2( t, p ) { - - return 3 * ( 1 - t ) * t * t * p; - - } - - function CubicBezierP3( t, p ) { - - return t * t * t * p; - - } - - function CubicBezier( t, p0, p1, p2, p3 ) { - - return CubicBezierP0( t, p0 ) + CubicBezierP1( t, p1 ) + CubicBezierP2( t, p2 ) + - CubicBezierP3( t, p3 ); - - } - - class CubicBezierCurve extends Curve { - - constructor( v0 = new Vector2(), v1 = new Vector2(), v2 = new Vector2(), v3 = new Vector2() ) { - - super(); - - this.isCubicBezierCurve = true; - - this.type = 'CubicBezierCurve'; - - this.v0 = v0; - this.v1 = v1; - this.v2 = v2; - this.v3 = v3; - - } - - getPoint( t, optionalTarget = new Vector2() ) { - - const point = optionalTarget; - - const v0 = this.v0, v1 = this.v1, v2 = this.v2, v3 = this.v3; - - point.set( - CubicBezier( t, v0.x, v1.x, v2.x, v3.x ), - CubicBezier( t, v0.y, v1.y, v2.y, v3.y ) - ); - - return point; - - } - - copy( source ) { - - super.copy( source ); - - this.v0.copy( source.v0 ); - this.v1.copy( source.v1 ); - this.v2.copy( source.v2 ); - this.v3.copy( source.v3 ); - - return this; - - } - - toJSON() { - - const data = super.toJSON(); - - data.v0 = this.v0.toArray(); - data.v1 = this.v1.toArray(); - data.v2 = this.v2.toArray(); - data.v3 = this.v3.toArray(); - - return data; - - } - - fromJSON( json ) { - - super.fromJSON( json ); - - this.v0.fromArray( json.v0 ); - this.v1.fromArray( json.v1 ); - this.v2.fromArray( json.v2 ); - this.v3.fromArray( json.v3 ); - - return this; - - } - - } - - class CubicBezierCurve3 extends Curve { - - constructor( v0 = new Vector3(), v1 = new Vector3(), v2 = new Vector3(), v3 = new Vector3() ) { - - super(); - - this.isCubicBezierCurve3 = true; - - this.type = 'CubicBezierCurve3'; - - this.v0 = v0; - this.v1 = v1; - this.v2 = v2; - this.v3 = v3; - - } - - getPoint( t, optionalTarget = new Vector3() ) { - - const point = optionalTarget; - - const v0 = this.v0, v1 = this.v1, v2 = this.v2, v3 = this.v3; - - point.set( - CubicBezier( t, v0.x, v1.x, v2.x, v3.x ), - CubicBezier( t, v0.y, v1.y, v2.y, v3.y ), - CubicBezier( t, v0.z, v1.z, v2.z, v3.z ) - ); - - return point; - - } - - copy( source ) { - - super.copy( source ); - - this.v0.copy( source.v0 ); - this.v1.copy( source.v1 ); - this.v2.copy( source.v2 ); - this.v3.copy( source.v3 ); - - return this; - - } - - toJSON() { - - const data = super.toJSON(); - - data.v0 = this.v0.toArray(); - data.v1 = this.v1.toArray(); - data.v2 = this.v2.toArray(); - data.v3 = this.v3.toArray(); - - return data; - - } - - fromJSON( json ) { - - super.fromJSON( json ); - - this.v0.fromArray( json.v0 ); - this.v1.fromArray( json.v1 ); - this.v2.fromArray( json.v2 ); - this.v3.fromArray( json.v3 ); - - return this; - - } - - } - - class LineCurve extends Curve { - - constructor( v1 = new Vector2(), v2 = new Vector2() ) { - - super(); - - this.isLineCurve = true; - - this.type = 'LineCurve'; - - this.v1 = v1; - this.v2 = v2; - - } - - getPoint( t, optionalTarget = new Vector2() ) { - - const point = optionalTarget; - - if ( t === 1 ) { - - point.copy( this.v2 ); - - } else { - - point.copy( this.v2 ).sub( this.v1 ); - point.multiplyScalar( t ).add( this.v1 ); - - } - - return point; - - } - - // Line curve is linear, so we can overwrite default getPointAt - getPointAt( u, optionalTarget ) { - - return this.getPoint( u, optionalTarget ); - - } - - getTangent( t, optionalTarget = new Vector2() ) { - - return optionalTarget.subVectors( this.v2, this.v1 ).normalize(); - - } - - getTangentAt( u, optionalTarget ) { - - return this.getTangent( u, optionalTarget ); - - } - - copy( source ) { - - super.copy( source ); - - this.v1.copy( source.v1 ); - this.v2.copy( source.v2 ); - - return this; - - } - - toJSON() { - - const data = super.toJSON(); - - data.v1 = this.v1.toArray(); - data.v2 = this.v2.toArray(); - - return data; - - } - - fromJSON( json ) { - - super.fromJSON( json ); - - this.v1.fromArray( json.v1 ); - this.v2.fromArray( json.v2 ); - - return this; - - } - - } - - class LineCurve3 extends Curve { - - constructor( v1 = new Vector3(), v2 = new Vector3() ) { - - super(); - - this.isLineCurve3 = true; - - this.type = 'LineCurve3'; - - this.v1 = v1; - this.v2 = v2; - - } - getPoint( t, optionalTarget = new Vector3() ) { - - const point = optionalTarget; - - if ( t === 1 ) { - - point.copy( this.v2 ); - - } else { - - point.copy( this.v2 ).sub( this.v1 ); - point.multiplyScalar( t ).add( this.v1 ); - - } - - return point; - - } - // Line curve is linear, so we can overwrite default getPointAt - getPointAt( u, optionalTarget ) { - - return this.getPoint( u, optionalTarget ); - - } - - getTangent( t, optionalTarget = new Vector3() ) { - - return optionalTarget.subVectors( this.v2, this.v1 ).normalize(); - - } - - getTangentAt( u, optionalTarget ) { - - return this.getTangent( u, optionalTarget ); - - } - - copy( source ) { - - super.copy( source ); - - this.v1.copy( source.v1 ); - this.v2.copy( source.v2 ); - - return this; - - } - toJSON() { - - const data = super.toJSON(); - - data.v1 = this.v1.toArray(); - data.v2 = this.v2.toArray(); - - return data; - - } - fromJSON( json ) { - - super.fromJSON( json ); - - this.v1.fromArray( json.v1 ); - this.v2.fromArray( json.v2 ); - - return this; - - } - - } - - class QuadraticBezierCurve extends Curve { - - constructor( v0 = new Vector2(), v1 = new Vector2(), v2 = new Vector2() ) { - - super(); - - this.isQuadraticBezierCurve = true; - - this.type = 'QuadraticBezierCurve'; - - this.v0 = v0; - this.v1 = v1; - this.v2 = v2; - - } - - getPoint( t, optionalTarget = new Vector2() ) { - - const point = optionalTarget; - - const v0 = this.v0, v1 = this.v1, v2 = this.v2; - - point.set( - QuadraticBezier( t, v0.x, v1.x, v2.x ), - QuadraticBezier( t, v0.y, v1.y, v2.y ) - ); - - return point; - - } - - copy( source ) { - - super.copy( source ); - - this.v0.copy( source.v0 ); - this.v1.copy( source.v1 ); - this.v2.copy( source.v2 ); - - return this; - - } - - toJSON() { - - const data = super.toJSON(); - - data.v0 = this.v0.toArray(); - data.v1 = this.v1.toArray(); - data.v2 = this.v2.toArray(); - - return data; - - } - - fromJSON( json ) { - - super.fromJSON( json ); - - this.v0.fromArray( json.v0 ); - this.v1.fromArray( json.v1 ); - this.v2.fromArray( json.v2 ); - - return this; - - } - - } - - class QuadraticBezierCurve3 extends Curve { - - constructor( v0 = new Vector3(), v1 = new Vector3(), v2 = new Vector3() ) { - - super(); - - this.isQuadraticBezierCurve3 = true; - - this.type = 'QuadraticBezierCurve3'; - - this.v0 = v0; - this.v1 = v1; - this.v2 = v2; - - } - - getPoint( t, optionalTarget = new Vector3() ) { - - const point = optionalTarget; - - const v0 = this.v0, v1 = this.v1, v2 = this.v2; - - point.set( - QuadraticBezier( t, v0.x, v1.x, v2.x ), - QuadraticBezier( t, v0.y, v1.y, v2.y ), - QuadraticBezier( t, v0.z, v1.z, v2.z ) - ); - - return point; - - } - - copy( source ) { - - super.copy( source ); - - this.v0.copy( source.v0 ); - this.v1.copy( source.v1 ); - this.v2.copy( source.v2 ); - - return this; - - } - - toJSON() { - - const data = super.toJSON(); - - data.v0 = this.v0.toArray(); - data.v1 = this.v1.toArray(); - data.v2 = this.v2.toArray(); - - return data; - - } - - fromJSON( json ) { - - super.fromJSON( json ); - - this.v0.fromArray( json.v0 ); - this.v1.fromArray( json.v1 ); - this.v2.fromArray( json.v2 ); - - return this; - - } - - } - - class SplineCurve extends Curve { - - constructor( points = [] ) { - - super(); - - this.isSplineCurve = true; - - this.type = 'SplineCurve'; - - this.points = points; - - } - - getPoint( t, optionalTarget = new Vector2() ) { - - const point = optionalTarget; - - const points = this.points; - const p = ( points.length - 1 ) * t; - - const intPoint = Math.floor( p ); - const weight = p - intPoint; - - const p0 = points[ intPoint === 0 ? intPoint : intPoint - 1 ]; - const p1 = points[ intPoint ]; - const p2 = points[ intPoint > points.length - 2 ? points.length - 1 : intPoint + 1 ]; - const p3 = points[ intPoint > points.length - 3 ? points.length - 1 : intPoint + 2 ]; - - point.set( - CatmullRom( weight, p0.x, p1.x, p2.x, p3.x ), - CatmullRom( weight, p0.y, p1.y, p2.y, p3.y ) - ); - - return point; - - } - - copy( source ) { - - super.copy( source ); - - this.points = []; - - for ( let i = 0, l = source.points.length; i < l; i ++ ) { - - const point = source.points[ i ]; - - this.points.push( point.clone() ); - - } - - return this; - - } - - toJSON() { - - const data = super.toJSON(); - - data.points = []; - - for ( let i = 0, l = this.points.length; i < l; i ++ ) { - - const point = this.points[ i ]; - data.points.push( point.toArray() ); - - } - - return data; - - } - - fromJSON( json ) { - - super.fromJSON( json ); - - this.points = []; - - for ( let i = 0, l = json.points.length; i < l; i ++ ) { - - const point = json.points[ i ]; - this.points.push( new Vector2().fromArray( point ) ); - - } - - return this; - - } - - } - - var Curves = /*#__PURE__*/Object.freeze({ - __proto__: null, - ArcCurve: ArcCurve, - CatmullRomCurve3: CatmullRomCurve3, - CubicBezierCurve: CubicBezierCurve, - CubicBezierCurve3: CubicBezierCurve3, - EllipseCurve: EllipseCurve, - LineCurve: LineCurve, - LineCurve3: LineCurve3, - QuadraticBezierCurve: QuadraticBezierCurve, - QuadraticBezierCurve3: QuadraticBezierCurve3, - SplineCurve: SplineCurve - }); - - /************************************************************** - * Curved Path - a curve path is simply a array of connected - * curves, but retains the api of a curve - **************************************************************/ - - class CurvePath extends Curve { - - constructor() { - - super(); - - this.type = 'CurvePath'; - - this.curves = []; - this.autoClose = false; // Automatically closes the path - - } - - add( curve ) { - - this.curves.push( curve ); - - } - - closePath() { - - // Add a line curve if start and end of lines are not connected - const startPoint = this.curves[ 0 ].getPoint( 0 ); - const endPoint = this.curves[ this.curves.length - 1 ].getPoint( 1 ); - - if ( ! startPoint.equals( endPoint ) ) { - - this.curves.push( new LineCurve( endPoint, startPoint ) ); - - } - - } - - // To get accurate point with reference to - // entire path distance at time t, - // following has to be done: - - // 1. Length of each sub path have to be known - // 2. Locate and identify type of curve - // 3. Get t for the curve - // 4. Return curve.getPointAt(t') - - getPoint( t, optionalTarget ) { - - const d = t * this.getLength(); - const curveLengths = this.getCurveLengths(); - let i = 0; - - // To think about boundaries points. - - while ( i < curveLengths.length ) { - - if ( curveLengths[ i ] >= d ) { - - const diff = curveLengths[ i ] - d; - const curve = this.curves[ i ]; - - const segmentLength = curve.getLength(); - const u = segmentLength === 0 ? 0 : 1 - diff / segmentLength; - - return curve.getPointAt( u, optionalTarget ); - - } - - i ++; - - } - - return null; - - // loop where sum != 0, sum > d , sum+1 1 && ! points[ points.length - 1 ].equals( points[ 0 ] ) ) { - - points.push( points[ 0 ] ); - - } - - return points; - - } - - copy( source ) { - - super.copy( source ); - - this.curves = []; - - for ( let i = 0, l = source.curves.length; i < l; i ++ ) { - - const curve = source.curves[ i ]; - - this.curves.push( curve.clone() ); - - } - - this.autoClose = source.autoClose; - - return this; - - } - - toJSON() { - - const data = super.toJSON(); - - data.autoClose = this.autoClose; - data.curves = []; - - for ( let i = 0, l = this.curves.length; i < l; i ++ ) { - - const curve = this.curves[ i ]; - data.curves.push( curve.toJSON() ); - - } - - return data; - - } - - fromJSON( json ) { - - super.fromJSON( json ); - - this.autoClose = json.autoClose; - this.curves = []; - - for ( let i = 0, l = json.curves.length; i < l; i ++ ) { - - const curve = json.curves[ i ]; - this.curves.push( new Curves[ curve.type ]().fromJSON( curve ) ); - - } - - return this; - - } - - } - - class Path extends CurvePath { - - constructor( points ) { - - super(); - - this.type = 'Path'; - - this.currentPoint = new Vector2(); - - if ( points ) { - - this.setFromPoints( points ); - - } - - } - - setFromPoints( points ) { - - this.moveTo( points[ 0 ].x, points[ 0 ].y ); - - for ( let i = 1, l = points.length; i < l; i ++ ) { - - this.lineTo( points[ i ].x, points[ i ].y ); - - } - - return this; - - } - - moveTo( x, y ) { - - this.currentPoint.set( x, y ); // TODO consider referencing vectors instead of copying? - - return this; - - } - - lineTo( x, y ) { - - const curve = new LineCurve( this.currentPoint.clone(), new Vector2( x, y ) ); - this.curves.push( curve ); - - this.currentPoint.set( x, y ); - - return this; - - } - - quadraticCurveTo( aCPx, aCPy, aX, aY ) { - - const curve = new QuadraticBezierCurve( - this.currentPoint.clone(), - new Vector2( aCPx, aCPy ), - new Vector2( aX, aY ) - ); - - this.curves.push( curve ); - - this.currentPoint.set( aX, aY ); - - return this; - - } - - bezierCurveTo( aCP1x, aCP1y, aCP2x, aCP2y, aX, aY ) { - - const curve = new CubicBezierCurve( - this.currentPoint.clone(), - new Vector2( aCP1x, aCP1y ), - new Vector2( aCP2x, aCP2y ), - new Vector2( aX, aY ) - ); - - this.curves.push( curve ); - - this.currentPoint.set( aX, aY ); - - return this; - - } - - splineThru( pts /*Array of Vector*/ ) { - - const npts = [ this.currentPoint.clone() ].concat( pts ); - - const curve = new SplineCurve( npts ); - this.curves.push( curve ); - - this.currentPoint.copy( pts[ pts.length - 1 ] ); - - return this; - - } - - arc( aX, aY, aRadius, aStartAngle, aEndAngle, aClockwise ) { - - const x0 = this.currentPoint.x; - const y0 = this.currentPoint.y; - - this.absarc( aX + x0, aY + y0, aRadius, - aStartAngle, aEndAngle, aClockwise ); - - return this; - - } - - absarc( aX, aY, aRadius, aStartAngle, aEndAngle, aClockwise ) { - - this.absellipse( aX, aY, aRadius, aRadius, aStartAngle, aEndAngle, aClockwise ); - - return this; - - } - - ellipse( aX, aY, xRadius, yRadius, aStartAngle, aEndAngle, aClockwise, aRotation ) { - - const x0 = this.currentPoint.x; - const y0 = this.currentPoint.y; - - this.absellipse( aX + x0, aY + y0, xRadius, yRadius, aStartAngle, aEndAngle, aClockwise, aRotation ); - - return this; - - } - - absellipse( aX, aY, xRadius, yRadius, aStartAngle, aEndAngle, aClockwise, aRotation ) { - - const curve = new EllipseCurve( aX, aY, xRadius, yRadius, aStartAngle, aEndAngle, aClockwise, aRotation ); - - if ( this.curves.length > 0 ) { - - // if a previous curve is present, attempt to join - const firstPoint = curve.getPoint( 0 ); - - if ( ! firstPoint.equals( this.currentPoint ) ) { - - this.lineTo( firstPoint.x, firstPoint.y ); - - } - - } - - this.curves.push( curve ); - - const lastPoint = curve.getPoint( 1 ); - this.currentPoint.copy( lastPoint ); - - return this; - - } - - copy( source ) { - - super.copy( source ); - - this.currentPoint.copy( source.currentPoint ); - - return this; - - } - - toJSON() { - - const data = super.toJSON(); - - data.currentPoint = this.currentPoint.toArray(); - - return data; - - } - - fromJSON( json ) { - - super.fromJSON( json ); - - this.currentPoint.fromArray( json.currentPoint ); - - return this; - - } - - } - - class LatheGeometry extends BufferGeometry { - - constructor( points = [ new Vector2( 0, - 0.5 ), new Vector2( 0.5, 0 ), new Vector2( 0, 0.5 ) ], segments = 12, phiStart = 0, phiLength = Math.PI * 2 ) { - - super(); - - this.type = 'LatheGeometry'; - - this.parameters = { - points: points, - segments: segments, - phiStart: phiStart, - phiLength: phiLength - }; - - segments = Math.floor( segments ); - - // clamp phiLength so it's in range of [ 0, 2PI ] - - phiLength = clamp( phiLength, 0, Math.PI * 2 ); - - // buffers - - const indices = []; - const vertices = []; - const uvs = []; - const initNormals = []; - const normals = []; - - // helper variables - - const inverseSegments = 1.0 / segments; - const vertex = new Vector3(); - const uv = new Vector2(); - const normal = new Vector3(); - const curNormal = new Vector3(); - const prevNormal = new Vector3(); - let dx = 0; - let dy = 0; - - // pre-compute normals for initial "meridian" - - for ( let j = 0; j <= ( points.length - 1 ); j ++ ) { - - switch ( j ) { - - case 0: // special handling for 1st vertex on path - - dx = points[ j + 1 ].x - points[ j ].x; - dy = points[ j + 1 ].y - points[ j ].y; - - normal.x = dy * 1.0; - normal.y = - dx; - normal.z = dy * 0.0; - - prevNormal.copy( normal ); - - normal.normalize(); - - initNormals.push( normal.x, normal.y, normal.z ); - - break; - - case ( points.length - 1 ): // special handling for last Vertex on path - - initNormals.push( prevNormal.x, prevNormal.y, prevNormal.z ); - - break; - - default: // default handling for all vertices in between - - dx = points[ j + 1 ].x - points[ j ].x; - dy = points[ j + 1 ].y - points[ j ].y; - - normal.x = dy * 1.0; - normal.y = - dx; - normal.z = dy * 0.0; - - curNormal.copy( normal ); - - normal.x += prevNormal.x; - normal.y += prevNormal.y; - normal.z += prevNormal.z; - - normal.normalize(); - - initNormals.push( normal.x, normal.y, normal.z ); - - prevNormal.copy( curNormal ); - - } - - } - - // generate vertices, uvs and normals - - for ( let i = 0; i <= segments; i ++ ) { - - const phi = phiStart + i * inverseSegments * phiLength; - - const sin = Math.sin( phi ); - const cos = Math.cos( phi ); - - for ( let j = 0; j <= ( points.length - 1 ); j ++ ) { - - // vertex - - vertex.x = points[ j ].x * sin; - vertex.y = points[ j ].y; - vertex.z = points[ j ].x * cos; - - vertices.push( vertex.x, vertex.y, vertex.z ); - - // uv - - uv.x = i / segments; - uv.y = j / ( points.length - 1 ); - - uvs.push( uv.x, uv.y ); - - // normal - - const x = initNormals[ 3 * j + 0 ] * sin; - const y = initNormals[ 3 * j + 1 ]; - const z = initNormals[ 3 * j + 0 ] * cos; - - normals.push( x, y, z ); - - } - - } - - // indices - - for ( let i = 0; i < segments; i ++ ) { - - for ( let j = 0; j < ( points.length - 1 ); j ++ ) { - - const base = j + i * points.length; - - const a = base; - const b = base + points.length; - const c = base + points.length + 1; - const d = base + 1; - - // faces - - indices.push( a, b, d ); - indices.push( c, d, b ); - - } - - } - - // build geometry - - this.setIndex( indices ); - this.setAttribute( 'position', new Float32BufferAttribute( vertices, 3 ) ); - this.setAttribute( 'uv', new Float32BufferAttribute( uvs, 2 ) ); - this.setAttribute( 'normal', new Float32BufferAttribute( normals, 3 ) ); - - } - - copy( source ) { - - super.copy( source ); - - this.parameters = Object.assign( {}, source.parameters ); - - return this; - - } - - static fromJSON( data ) { - - return new LatheGeometry( data.points, data.segments, data.phiStart, data.phiLength ); - - } - - } - - class CapsuleGeometry extends LatheGeometry { - - constructor( radius = 1, length = 1, capSegments = 4, radialSegments = 8 ) { - - const path = new Path(); - path.absarc( 0, - length / 2, radius, Math.PI * 1.5, 0 ); - path.absarc( 0, length / 2, radius, 0, Math.PI * 0.5 ); - - super( path.getPoints( capSegments ), radialSegments ); - - this.type = 'CapsuleGeometry'; - - this.parameters = { - radius: radius, - height: length, - capSegments: capSegments, - radialSegments: radialSegments, - }; - - } - - static fromJSON( data ) { - - return new CapsuleGeometry( data.radius, data.length, data.capSegments, data.radialSegments ); - - } - - } - - class CircleGeometry extends BufferGeometry { - - constructor( radius = 1, segments = 32, thetaStart = 0, thetaLength = Math.PI * 2 ) { - - super(); - - this.type = 'CircleGeometry'; - - this.parameters = { - radius: radius, - segments: segments, - thetaStart: thetaStart, - thetaLength: thetaLength - }; - - segments = Math.max( 3, segments ); - - // buffers - - const indices = []; - const vertices = []; - const normals = []; - const uvs = []; - - // helper variables - - const vertex = new Vector3(); - const uv = new Vector2(); - - // center point - - vertices.push( 0, 0, 0 ); - normals.push( 0, 0, 1 ); - uvs.push( 0.5, 0.5 ); - - for ( let s = 0, i = 3; s <= segments; s ++, i += 3 ) { - - const segment = thetaStart + s / segments * thetaLength; - - // vertex - - vertex.x = radius * Math.cos( segment ); - vertex.y = radius * Math.sin( segment ); - - vertices.push( vertex.x, vertex.y, vertex.z ); - - // normal - - normals.push( 0, 0, 1 ); - - // uvs - - uv.x = ( vertices[ i ] / radius + 1 ) / 2; - uv.y = ( vertices[ i + 1 ] / radius + 1 ) / 2; - - uvs.push( uv.x, uv.y ); - - } - - // indices - - for ( let i = 1; i <= segments; i ++ ) { - - indices.push( i, i + 1, 0 ); - - } - - // build geometry - - this.setIndex( indices ); - this.setAttribute( 'position', new Float32BufferAttribute( vertices, 3 ) ); - this.setAttribute( 'normal', new Float32BufferAttribute( normals, 3 ) ); - this.setAttribute( 'uv', new Float32BufferAttribute( uvs, 2 ) ); - - } - - copy( source ) { - - super.copy( source ); - - this.parameters = Object.assign( {}, source.parameters ); - - return this; - - } - - static fromJSON( data ) { - - return new CircleGeometry( data.radius, data.segments, data.thetaStart, data.thetaLength ); - - } - - } - - class CylinderGeometry extends BufferGeometry { - - constructor( radiusTop = 1, radiusBottom = 1, height = 1, radialSegments = 32, heightSegments = 1, openEnded = false, thetaStart = 0, thetaLength = Math.PI * 2 ) { - - super(); - - this.type = 'CylinderGeometry'; - - this.parameters = { - radiusTop: radiusTop, - radiusBottom: radiusBottom, - height: height, - radialSegments: radialSegments, - heightSegments: heightSegments, - openEnded: openEnded, - thetaStart: thetaStart, - thetaLength: thetaLength - }; - - const scope = this; - - radialSegments = Math.floor( radialSegments ); - heightSegments = Math.floor( heightSegments ); - - // buffers - - const indices = []; - const vertices = []; - const normals = []; - const uvs = []; - - // helper variables - - let index = 0; - const indexArray = []; - const halfHeight = height / 2; - let groupStart = 0; - - // generate geometry - - generateTorso(); - - if ( openEnded === false ) { - - if ( radiusTop > 0 ) generateCap( true ); - if ( radiusBottom > 0 ) generateCap( false ); - - } - - // build geometry - - this.setIndex( indices ); - this.setAttribute( 'position', new Float32BufferAttribute( vertices, 3 ) ); - this.setAttribute( 'normal', new Float32BufferAttribute( normals, 3 ) ); - this.setAttribute( 'uv', new Float32BufferAttribute( uvs, 2 ) ); - - function generateTorso() { - - const normal = new Vector3(); - const vertex = new Vector3(); - - let groupCount = 0; - - // this will be used to calculate the normal - const slope = ( radiusBottom - radiusTop ) / height; - - // generate vertices, normals and uvs - - for ( let y = 0; y <= heightSegments; y ++ ) { - - const indexRow = []; - - const v = y / heightSegments; - - // calculate the radius of the current row - - const radius = v * ( radiusBottom - radiusTop ) + radiusTop; - - for ( let x = 0; x <= radialSegments; x ++ ) { - - const u = x / radialSegments; - - const theta = u * thetaLength + thetaStart; - - const sinTheta = Math.sin( theta ); - const cosTheta = Math.cos( theta ); - - // vertex - - vertex.x = radius * sinTheta; - vertex.y = - v * height + halfHeight; - vertex.z = radius * cosTheta; - vertices.push( vertex.x, vertex.y, vertex.z ); - - // normal - - normal.set( sinTheta, slope, cosTheta ).normalize(); - normals.push( normal.x, normal.y, normal.z ); - - // uv - - uvs.push( u, 1 - v ); - - // save index of vertex in respective row - - indexRow.push( index ++ ); - - } - - // now save vertices of the row in our index array - - indexArray.push( indexRow ); - - } - - // generate indices - - for ( let x = 0; x < radialSegments; x ++ ) { - - for ( let y = 0; y < heightSegments; y ++ ) { - - // we use the index array to access the correct indices - - const a = indexArray[ y ][ x ]; - const b = indexArray[ y + 1 ][ x ]; - const c = indexArray[ y + 1 ][ x + 1 ]; - const d = indexArray[ y ][ x + 1 ]; - - // faces - - indices.push( a, b, d ); - indices.push( b, c, d ); - - // update group counter - - groupCount += 6; - - } - - } - - // add a group to the geometry. this will ensure multi material support - - scope.addGroup( groupStart, groupCount, 0 ); - - // calculate new start value for groups - - groupStart += groupCount; - - } - - function generateCap( top ) { - - // save the index of the first center vertex - const centerIndexStart = index; - - const uv = new Vector2(); - const vertex = new Vector3(); - - let groupCount = 0; - - const radius = ( top === true ) ? radiusTop : radiusBottom; - const sign = ( top === true ) ? 1 : - 1; - - // first we generate the center vertex data of the cap. - // because the geometry needs one set of uvs per face, - // we must generate a center vertex per face/segment - - for ( let x = 1; x <= radialSegments; x ++ ) { - - // vertex - - vertices.push( 0, halfHeight * sign, 0 ); - - // normal - - normals.push( 0, sign, 0 ); - - // uv - - uvs.push( 0.5, 0.5 ); - - // increase index - - index ++; - - } - - // save the index of the last center vertex - const centerIndexEnd = index; - - // now we generate the surrounding vertices, normals and uvs - - for ( let x = 0; x <= radialSegments; x ++ ) { - - const u = x / radialSegments; - const theta = u * thetaLength + thetaStart; - - const cosTheta = Math.cos( theta ); - const sinTheta = Math.sin( theta ); - - // vertex - - vertex.x = radius * sinTheta; - vertex.y = halfHeight * sign; - vertex.z = radius * cosTheta; - vertices.push( vertex.x, vertex.y, vertex.z ); - - // normal - - normals.push( 0, sign, 0 ); - - // uv - - uv.x = ( cosTheta * 0.5 ) + 0.5; - uv.y = ( sinTheta * 0.5 * sign ) + 0.5; - uvs.push( uv.x, uv.y ); - - // increase index - - index ++; - - } - - // generate indices - - for ( let x = 0; x < radialSegments; x ++ ) { - - const c = centerIndexStart + x; - const i = centerIndexEnd + x; - - if ( top === true ) { - - // face top - - indices.push( i, i + 1, c ); - - } else { - - // face bottom - - indices.push( i + 1, i, c ); - - } - - groupCount += 3; - - } - - // add a group to the geometry. this will ensure multi material support - - scope.addGroup( groupStart, groupCount, top === true ? 1 : 2 ); - - // calculate new start value for groups - - groupStart += groupCount; - - } - - } - - copy( source ) { - - super.copy( source ); - - this.parameters = Object.assign( {}, source.parameters ); - - return this; - - } - - static fromJSON( data ) { - - return new CylinderGeometry( data.radiusTop, data.radiusBottom, data.height, data.radialSegments, data.heightSegments, data.openEnded, data.thetaStart, data.thetaLength ); - - } - - } - - class ConeGeometry extends CylinderGeometry { - - constructor( radius = 1, height = 1, radialSegments = 32, heightSegments = 1, openEnded = false, thetaStart = 0, thetaLength = Math.PI * 2 ) { - - super( 0, radius, height, radialSegments, heightSegments, openEnded, thetaStart, thetaLength ); - - this.type = 'ConeGeometry'; - - this.parameters = { - radius: radius, - height: height, - radialSegments: radialSegments, - heightSegments: heightSegments, - openEnded: openEnded, - thetaStart: thetaStart, - thetaLength: thetaLength - }; - - } - - static fromJSON( data ) { - - return new ConeGeometry( data.radius, data.height, data.radialSegments, data.heightSegments, data.openEnded, data.thetaStart, data.thetaLength ); - - } - - } - - class PolyhedronGeometry extends BufferGeometry { - - constructor( vertices = [], indices = [], radius = 1, detail = 0 ) { - - super(); - - this.type = 'PolyhedronGeometry'; - - this.parameters = { - vertices: vertices, - indices: indices, - radius: radius, - detail: detail - }; - - // default buffer data - - const vertexBuffer = []; - const uvBuffer = []; - - // the subdivision creates the vertex buffer data - - subdivide( detail ); - - // all vertices should lie on a conceptual sphere with a given radius - - applyRadius( radius ); - - // finally, create the uv data - - generateUVs(); - - // build non-indexed geometry - - this.setAttribute( 'position', new Float32BufferAttribute( vertexBuffer, 3 ) ); - this.setAttribute( 'normal', new Float32BufferAttribute( vertexBuffer.slice(), 3 ) ); - this.setAttribute( 'uv', new Float32BufferAttribute( uvBuffer, 2 ) ); - - if ( detail === 0 ) { - - this.computeVertexNormals(); // flat normals - - } else { - - this.normalizeNormals(); // smooth normals - - } - - // helper functions - - function subdivide( detail ) { - - const a = new Vector3(); - const b = new Vector3(); - const c = new Vector3(); - - // iterate over all faces and apply a subdivision with the given detail value - - for ( let i = 0; i < indices.length; i += 3 ) { - - // get the vertices of the face - - getVertexByIndex( indices[ i + 0 ], a ); - getVertexByIndex( indices[ i + 1 ], b ); - getVertexByIndex( indices[ i + 2 ], c ); - - // perform subdivision - - subdivideFace( a, b, c, detail ); - - } - - } - - function subdivideFace( a, b, c, detail ) { - - const cols = detail + 1; - - // we use this multidimensional array as a data structure for creating the subdivision - - const v = []; - - // construct all of the vertices for this subdivision - - for ( let i = 0; i <= cols; i ++ ) { - - v[ i ] = []; - - const aj = a.clone().lerp( c, i / cols ); - const bj = b.clone().lerp( c, i / cols ); - - const rows = cols - i; - - for ( let j = 0; j <= rows; j ++ ) { - - if ( j === 0 && i === cols ) { - - v[ i ][ j ] = aj; - - } else { - - v[ i ][ j ] = aj.clone().lerp( bj, j / rows ); - - } - - } - - } - - // construct all of the faces - - for ( let i = 0; i < cols; i ++ ) { - - for ( let j = 0; j < 2 * ( cols - i ) - 1; j ++ ) { - - const k = Math.floor( j / 2 ); - - if ( j % 2 === 0 ) { - - pushVertex( v[ i ][ k + 1 ] ); - pushVertex( v[ i + 1 ][ k ] ); - pushVertex( v[ i ][ k ] ); - - } else { - - pushVertex( v[ i ][ k + 1 ] ); - pushVertex( v[ i + 1 ][ k + 1 ] ); - pushVertex( v[ i + 1 ][ k ] ); - - } - - } - - } - - } - - function applyRadius( radius ) { - - const vertex = new Vector3(); - - // iterate over the entire buffer and apply the radius to each vertex - - for ( let i = 0; i < vertexBuffer.length; i += 3 ) { - - vertex.x = vertexBuffer[ i + 0 ]; - vertex.y = vertexBuffer[ i + 1 ]; - vertex.z = vertexBuffer[ i + 2 ]; - - vertex.normalize().multiplyScalar( radius ); - - vertexBuffer[ i + 0 ] = vertex.x; - vertexBuffer[ i + 1 ] = vertex.y; - vertexBuffer[ i + 2 ] = vertex.z; - - } - - } - - function generateUVs() { - - const vertex = new Vector3(); - - for ( let i = 0; i < vertexBuffer.length; i += 3 ) { - - vertex.x = vertexBuffer[ i + 0 ]; - vertex.y = vertexBuffer[ i + 1 ]; - vertex.z = vertexBuffer[ i + 2 ]; - - const u = azimuth( vertex ) / 2 / Math.PI + 0.5; - const v = inclination( vertex ) / Math.PI + 0.5; - uvBuffer.push( u, 1 - v ); - - } - - correctUVs(); - - correctSeam(); - - } - - function correctSeam() { - - // handle case when face straddles the seam, see #3269 - - for ( let i = 0; i < uvBuffer.length; i += 6 ) { - - // uv data of a single face - - const x0 = uvBuffer[ i + 0 ]; - const x1 = uvBuffer[ i + 2 ]; - const x2 = uvBuffer[ i + 4 ]; - - const max = Math.max( x0, x1, x2 ); - const min = Math.min( x0, x1, x2 ); - - // 0.9 is somewhat arbitrary - - if ( max > 0.9 && min < 0.1 ) { - - if ( x0 < 0.2 ) uvBuffer[ i + 0 ] += 1; - if ( x1 < 0.2 ) uvBuffer[ i + 2 ] += 1; - if ( x2 < 0.2 ) uvBuffer[ i + 4 ] += 1; - - } - - } - - } - - function pushVertex( vertex ) { - - vertexBuffer.push( vertex.x, vertex.y, vertex.z ); - - } - - function getVertexByIndex( index, vertex ) { - - const stride = index * 3; - - vertex.x = vertices[ stride + 0 ]; - vertex.y = vertices[ stride + 1 ]; - vertex.z = vertices[ stride + 2 ]; - - } - - function correctUVs() { - - const a = new Vector3(); - const b = new Vector3(); - const c = new Vector3(); - - const centroid = new Vector3(); - - const uvA = new Vector2(); - const uvB = new Vector2(); - const uvC = new Vector2(); - - for ( let i = 0, j = 0; i < vertexBuffer.length; i += 9, j += 6 ) { - - a.set( vertexBuffer[ i + 0 ], vertexBuffer[ i + 1 ], vertexBuffer[ i + 2 ] ); - b.set( vertexBuffer[ i + 3 ], vertexBuffer[ i + 4 ], vertexBuffer[ i + 5 ] ); - c.set( vertexBuffer[ i + 6 ], vertexBuffer[ i + 7 ], vertexBuffer[ i + 8 ] ); - - uvA.set( uvBuffer[ j + 0 ], uvBuffer[ j + 1 ] ); - uvB.set( uvBuffer[ j + 2 ], uvBuffer[ j + 3 ] ); - uvC.set( uvBuffer[ j + 4 ], uvBuffer[ j + 5 ] ); - - centroid.copy( a ).add( b ).add( c ).divideScalar( 3 ); - - const azi = azimuth( centroid ); - - correctUV( uvA, j + 0, a, azi ); - correctUV( uvB, j + 2, b, azi ); - correctUV( uvC, j + 4, c, azi ); - - } - - } - - function correctUV( uv, stride, vector, azimuth ) { - - if ( ( azimuth < 0 ) && ( uv.x === 1 ) ) { - - uvBuffer[ stride ] = uv.x - 1; - - } - - if ( ( vector.x === 0 ) && ( vector.z === 0 ) ) { - - uvBuffer[ stride ] = azimuth / 2 / Math.PI + 0.5; - - } - - } - - // Angle around the Y axis, counter-clockwise when looking from above. - - function azimuth( vector ) { - - return Math.atan2( vector.z, - vector.x ); - - } - - - // Angle above the XZ plane. - - function inclination( vector ) { - - return Math.atan2( - vector.y, Math.sqrt( ( vector.x * vector.x ) + ( vector.z * vector.z ) ) ); - - } - - } - - copy( source ) { - - super.copy( source ); - - this.parameters = Object.assign( {}, source.parameters ); - - return this; - - } - - static fromJSON( data ) { - - return new PolyhedronGeometry( data.vertices, data.indices, data.radius, data.details ); - - } - - } - - class DodecahedronGeometry extends PolyhedronGeometry { - - constructor( radius = 1, detail = 0 ) { - - const t = ( 1 + Math.sqrt( 5 ) ) / 2; - const r = 1 / t; - - const vertices = [ - - // (±1, ±1, ±1) - - 1, - 1, - 1, - 1, - 1, 1, - - 1, 1, - 1, - 1, 1, 1, - 1, - 1, - 1, 1, - 1, 1, - 1, 1, - 1, 1, 1, 1, - - // (0, ±1/φ, ±φ) - 0, - r, - t, 0, - r, t, - 0, r, - t, 0, r, t, - - // (±1/φ, ±φ, 0) - - r, - t, 0, - r, t, 0, - r, - t, 0, r, t, 0, - - // (±φ, 0, ±1/φ) - - t, 0, - r, t, 0, - r, - - t, 0, r, t, 0, r - ]; - - const indices = [ - 3, 11, 7, 3, 7, 15, 3, 15, 13, - 7, 19, 17, 7, 17, 6, 7, 6, 15, - 17, 4, 8, 17, 8, 10, 17, 10, 6, - 8, 0, 16, 8, 16, 2, 8, 2, 10, - 0, 12, 1, 0, 1, 18, 0, 18, 16, - 6, 10, 2, 6, 2, 13, 6, 13, 15, - 2, 16, 18, 2, 18, 3, 2, 3, 13, - 18, 1, 9, 18, 9, 11, 18, 11, 3, - 4, 14, 12, 4, 12, 0, 4, 0, 8, - 11, 9, 5, 11, 5, 19, 11, 19, 7, - 19, 5, 14, 19, 14, 4, 19, 4, 17, - 1, 12, 14, 1, 14, 5, 1, 5, 9 - ]; - - super( vertices, indices, radius, detail ); - - this.type = 'DodecahedronGeometry'; - - this.parameters = { - radius: radius, - detail: detail - }; - - } - - static fromJSON( data ) { - - return new DodecahedronGeometry( data.radius, data.detail ); - - } - - } - - const _v0 = /*@__PURE__*/ new Vector3(); - const _v1$1 = /*@__PURE__*/ new Vector3(); - const _normal = /*@__PURE__*/ new Vector3(); - const _triangle = /*@__PURE__*/ new Triangle(); - - class EdgesGeometry extends BufferGeometry { - - constructor( geometry = null, thresholdAngle = 1 ) { - - super(); - - this.type = 'EdgesGeometry'; - - this.parameters = { - geometry: geometry, - thresholdAngle: thresholdAngle - }; - - if ( geometry !== null ) { - - const precisionPoints = 4; - const precision = Math.pow( 10, precisionPoints ); - const thresholdDot = Math.cos( DEG2RAD * thresholdAngle ); - - const indexAttr = geometry.getIndex(); - const positionAttr = geometry.getAttribute( 'position' ); - const indexCount = indexAttr ? indexAttr.count : positionAttr.count; - - const indexArr = [ 0, 0, 0 ]; - const vertKeys = [ 'a', 'b', 'c' ]; - const hashes = new Array( 3 ); - - const edgeData = {}; - const vertices = []; - for ( let i = 0; i < indexCount; i += 3 ) { - - if ( indexAttr ) { - - indexArr[ 0 ] = indexAttr.getX( i ); - indexArr[ 1 ] = indexAttr.getX( i + 1 ); - indexArr[ 2 ] = indexAttr.getX( i + 2 ); - - } else { - - indexArr[ 0 ] = i; - indexArr[ 1 ] = i + 1; - indexArr[ 2 ] = i + 2; - - } - - const { a, b, c } = _triangle; - a.fromBufferAttribute( positionAttr, indexArr[ 0 ] ); - b.fromBufferAttribute( positionAttr, indexArr[ 1 ] ); - c.fromBufferAttribute( positionAttr, indexArr[ 2 ] ); - _triangle.getNormal( _normal ); - - // create hashes for the edge from the vertices - hashes[ 0 ] = `${ Math.round( a.x * precision ) },${ Math.round( a.y * precision ) },${ Math.round( a.z * precision ) }`; - hashes[ 1 ] = `${ Math.round( b.x * precision ) },${ Math.round( b.y * precision ) },${ Math.round( b.z * precision ) }`; - hashes[ 2 ] = `${ Math.round( c.x * precision ) },${ Math.round( c.y * precision ) },${ Math.round( c.z * precision ) }`; - - // skip degenerate triangles - if ( hashes[ 0 ] === hashes[ 1 ] || hashes[ 1 ] === hashes[ 2 ] || hashes[ 2 ] === hashes[ 0 ] ) { - - continue; - - } - - // iterate over every edge - for ( let j = 0; j < 3; j ++ ) { - - // get the first and next vertex making up the edge - const jNext = ( j + 1 ) % 3; - const vecHash0 = hashes[ j ]; - const vecHash1 = hashes[ jNext ]; - const v0 = _triangle[ vertKeys[ j ] ]; - const v1 = _triangle[ vertKeys[ jNext ] ]; - - const hash = `${ vecHash0 }_${ vecHash1 }`; - const reverseHash = `${ vecHash1 }_${ vecHash0 }`; - - if ( reverseHash in edgeData && edgeData[ reverseHash ] ) { - - // if we found a sibling edge add it into the vertex array if - // it meets the angle threshold and delete the edge from the map. - if ( _normal.dot( edgeData[ reverseHash ].normal ) <= thresholdDot ) { - - vertices.push( v0.x, v0.y, v0.z ); - vertices.push( v1.x, v1.y, v1.z ); - - } - - edgeData[ reverseHash ] = null; - - } else if ( ! ( hash in edgeData ) ) { - - // if we've already got an edge here then skip adding a new one - edgeData[ hash ] = { - - index0: indexArr[ j ], - index1: indexArr[ jNext ], - normal: _normal.clone(), - - }; - - } - - } - - } - - // iterate over all remaining, unmatched edges and add them to the vertex array - for ( const key in edgeData ) { - - if ( edgeData[ key ] ) { - - const { index0, index1 } = edgeData[ key ]; - _v0.fromBufferAttribute( positionAttr, index0 ); - _v1$1.fromBufferAttribute( positionAttr, index1 ); - - vertices.push( _v0.x, _v0.y, _v0.z ); - vertices.push( _v1$1.x, _v1$1.y, _v1$1.z ); - - } - - } - - this.setAttribute( 'position', new Float32BufferAttribute( vertices, 3 ) ); - - } - - } - - copy( source ) { - - super.copy( source ); - - this.parameters = Object.assign( {}, source.parameters ); - - return this; - - } - - } - - class Shape extends Path { - - constructor( points ) { - - super( points ); - - this.uuid = generateUUID(); - - this.type = 'Shape'; - - this.holes = []; - - } - - getPointsHoles( divisions ) { - - const holesPts = []; - - for ( let i = 0, l = this.holes.length; i < l; i ++ ) { - - holesPts[ i ] = this.holes[ i ].getPoints( divisions ); - - } - - return holesPts; - - } - - // get points of shape and holes (keypoints based on segments parameter) - - extractPoints( divisions ) { - - return { - - shape: this.getPoints( divisions ), - holes: this.getPointsHoles( divisions ) - - }; - - } - - copy( source ) { - - super.copy( source ); - - this.holes = []; - - for ( let i = 0, l = source.holes.length; i < l; i ++ ) { - - const hole = source.holes[ i ]; - - this.holes.push( hole.clone() ); - - } - - return this; - - } - - toJSON() { - - const data = super.toJSON(); - - data.uuid = this.uuid; - data.holes = []; - - for ( let i = 0, l = this.holes.length; i < l; i ++ ) { - - const hole = this.holes[ i ]; - data.holes.push( hole.toJSON() ); - - } - - return data; - - } - - fromJSON( json ) { - - super.fromJSON( json ); - - this.uuid = json.uuid; - this.holes = []; - - for ( let i = 0, l = json.holes.length; i < l; i ++ ) { - - const hole = json.holes[ i ]; - this.holes.push( new Path().fromJSON( hole ) ); - - } - - return this; - - } - - } - - /** - * Port from https://github.com/mapbox/earcut (v2.2.4) - */ - - const Earcut = { - - triangulate: function ( data, holeIndices, dim = 2 ) { - - const hasHoles = holeIndices && holeIndices.length; - const outerLen = hasHoles ? holeIndices[ 0 ] * dim : data.length; - let outerNode = linkedList( data, 0, outerLen, dim, true ); - const triangles = []; - - if ( ! outerNode || outerNode.next === outerNode.prev ) return triangles; - - let minX, minY, maxX, maxY, x, y, invSize; - - if ( hasHoles ) outerNode = eliminateHoles( data, holeIndices, outerNode, dim ); - - // if the shape is not too simple, we'll use z-order curve hash later; calculate polygon bbox - if ( data.length > 80 * dim ) { - - minX = maxX = data[ 0 ]; - minY = maxY = data[ 1 ]; - - for ( let i = dim; i < outerLen; i += dim ) { - - x = data[ i ]; - y = data[ i + 1 ]; - if ( x < minX ) minX = x; - if ( y < minY ) minY = y; - if ( x > maxX ) maxX = x; - if ( y > maxY ) maxY = y; - - } - - // minX, minY and invSize are later used to transform coords into integers for z-order calculation - invSize = Math.max( maxX - minX, maxY - minY ); - invSize = invSize !== 0 ? 32767 / invSize : 0; - - } - - earcutLinked( outerNode, triangles, dim, minX, minY, invSize, 0 ); - - return triangles; - - } - - }; - - // create a circular doubly linked list from polygon points in the specified winding order - function linkedList( data, start, end, dim, clockwise ) { - - let i, last; - - if ( clockwise === ( signedArea( data, start, end, dim ) > 0 ) ) { - - for ( i = start; i < end; i += dim ) last = insertNode( i, data[ i ], data[ i + 1 ], last ); - - } else { - - for ( i = end - dim; i >= start; i -= dim ) last = insertNode( i, data[ i ], data[ i + 1 ], last ); - - } - - if ( last && equals( last, last.next ) ) { - - removeNode( last ); - last = last.next; - - } - - return last; - - } - - // eliminate colinear or duplicate points - function filterPoints( start, end ) { - - if ( ! start ) return start; - if ( ! end ) end = start; - - let p = start, - again; - do { - - again = false; - - if ( ! p.steiner && ( equals( p, p.next ) || area( p.prev, p, p.next ) === 0 ) ) { - - removeNode( p ); - p = end = p.prev; - if ( p === p.next ) break; - again = true; - - } else { - - p = p.next; - - } - - } while ( again || p !== end ); - - return end; - - } - - // main ear slicing loop which triangulates a polygon (given as a linked list) - function earcutLinked( ear, triangles, dim, minX, minY, invSize, pass ) { - - if ( ! ear ) return; - - // interlink polygon nodes in z-order - if ( ! pass && invSize ) indexCurve( ear, minX, minY, invSize ); - - let stop = ear, - prev, next; - - // iterate through ears, slicing them one by one - while ( ear.prev !== ear.next ) { - - prev = ear.prev; - next = ear.next; - - if ( invSize ? isEarHashed( ear, minX, minY, invSize ) : isEar( ear ) ) { - - // cut off the triangle - triangles.push( prev.i / dim | 0 ); - triangles.push( ear.i / dim | 0 ); - triangles.push( next.i / dim | 0 ); - - removeNode( ear ); - - // skipping the next vertex leads to less sliver triangles - ear = next.next; - stop = next.next; - - continue; - - } - - ear = next; - - // if we looped through the whole remaining polygon and can't find any more ears - if ( ear === stop ) { - - // try filtering points and slicing again - if ( ! pass ) { - - earcutLinked( filterPoints( ear ), triangles, dim, minX, minY, invSize, 1 ); - - // if this didn't work, try curing all small self-intersections locally - - } else if ( pass === 1 ) { - - ear = cureLocalIntersections( filterPoints( ear ), triangles, dim ); - earcutLinked( ear, triangles, dim, minX, minY, invSize, 2 ); - - // as a last resort, try splitting the remaining polygon into two - - } else if ( pass === 2 ) { - - splitEarcut( ear, triangles, dim, minX, minY, invSize ); - - } - - break; - - } - - } - - } - - // check whether a polygon node forms a valid ear with adjacent nodes - function isEar( ear ) { - - const a = ear.prev, - b = ear, - c = ear.next; - - if ( area( a, b, c ) >= 0 ) return false; // reflex, can't be an ear - - // now make sure we don't have other points inside the potential ear - const ax = a.x, bx = b.x, cx = c.x, ay = a.y, by = b.y, cy = c.y; - - // triangle bbox; min & max are calculated like this for speed - const x0 = ax < bx ? ( ax < cx ? ax : cx ) : ( bx < cx ? bx : cx ), - y0 = ay < by ? ( ay < cy ? ay : cy ) : ( by < cy ? by : cy ), - x1 = ax > bx ? ( ax > cx ? ax : cx ) : ( bx > cx ? bx : cx ), - y1 = ay > by ? ( ay > cy ? ay : cy ) : ( by > cy ? by : cy ); - - let p = c.next; - while ( p !== a ) { - - if ( p.x >= x0 && p.x <= x1 && p.y >= y0 && p.y <= y1 && - pointInTriangle( ax, ay, bx, by, cx, cy, p.x, p.y ) && - area( p.prev, p, p.next ) >= 0 ) return false; - p = p.next; - - } - - return true; - - } - - function isEarHashed( ear, minX, minY, invSize ) { - - const a = ear.prev, - b = ear, - c = ear.next; - - if ( area( a, b, c ) >= 0 ) return false; // reflex, can't be an ear - - const ax = a.x, bx = b.x, cx = c.x, ay = a.y, by = b.y, cy = c.y; - - // triangle bbox; min & max are calculated like this for speed - const x0 = ax < bx ? ( ax < cx ? ax : cx ) : ( bx < cx ? bx : cx ), - y0 = ay < by ? ( ay < cy ? ay : cy ) : ( by < cy ? by : cy ), - x1 = ax > bx ? ( ax > cx ? ax : cx ) : ( bx > cx ? bx : cx ), - y1 = ay > by ? ( ay > cy ? ay : cy ) : ( by > cy ? by : cy ); - - // z-order range for the current triangle bbox; - const minZ = zOrder( x0, y0, minX, minY, invSize ), - maxZ = zOrder( x1, y1, minX, minY, invSize ); - - let p = ear.prevZ, - n = ear.nextZ; - - // look for points inside the triangle in both directions - while ( p && p.z >= minZ && n && n.z <= maxZ ) { - - if ( p.x >= x0 && p.x <= x1 && p.y >= y0 && p.y <= y1 && p !== a && p !== c && - pointInTriangle( ax, ay, bx, by, cx, cy, p.x, p.y ) && area( p.prev, p, p.next ) >= 0 ) return false; - p = p.prevZ; - - if ( n.x >= x0 && n.x <= x1 && n.y >= y0 && n.y <= y1 && n !== a && n !== c && - pointInTriangle( ax, ay, bx, by, cx, cy, n.x, n.y ) && area( n.prev, n, n.next ) >= 0 ) return false; - n = n.nextZ; - - } - - // look for remaining points in decreasing z-order - while ( p && p.z >= minZ ) { - - if ( p.x >= x0 && p.x <= x1 && p.y >= y0 && p.y <= y1 && p !== a && p !== c && - pointInTriangle( ax, ay, bx, by, cx, cy, p.x, p.y ) && area( p.prev, p, p.next ) >= 0 ) return false; - p = p.prevZ; - - } - - // look for remaining points in increasing z-order - while ( n && n.z <= maxZ ) { - - if ( n.x >= x0 && n.x <= x1 && n.y >= y0 && n.y <= y1 && n !== a && n !== c && - pointInTriangle( ax, ay, bx, by, cx, cy, n.x, n.y ) && area( n.prev, n, n.next ) >= 0 ) return false; - n = n.nextZ; - - } - - return true; - - } - - // go through all polygon nodes and cure small local self-intersections - function cureLocalIntersections( start, triangles, dim ) { - - let p = start; - do { - - const a = p.prev, - b = p.next.next; - - if ( ! equals( a, b ) && intersects( a, p, p.next, b ) && locallyInside( a, b ) && locallyInside( b, a ) ) { - - triangles.push( a.i / dim | 0 ); - triangles.push( p.i / dim | 0 ); - triangles.push( b.i / dim | 0 ); - - // remove two nodes involved - removeNode( p ); - removeNode( p.next ); - - p = start = b; - - } - - p = p.next; - - } while ( p !== start ); - - return filterPoints( p ); - - } - - // try splitting polygon into two and triangulate them independently - function splitEarcut( start, triangles, dim, minX, minY, invSize ) { - - // look for a valid diagonal that divides the polygon into two - let a = start; - do { - - let b = a.next.next; - while ( b !== a.prev ) { - - if ( a.i !== b.i && isValidDiagonal( a, b ) ) { - - // split the polygon in two by the diagonal - let c = splitPolygon( a, b ); - - // filter colinear points around the cuts - a = filterPoints( a, a.next ); - c = filterPoints( c, c.next ); - - // run earcut on each half - earcutLinked( a, triangles, dim, minX, minY, invSize, 0 ); - earcutLinked( c, triangles, dim, minX, minY, invSize, 0 ); - return; - - } - - b = b.next; - - } - - a = a.next; - - } while ( a !== start ); - - } - - // link every hole into the outer loop, producing a single-ring polygon without holes - function eliminateHoles( data, holeIndices, outerNode, dim ) { - - const queue = []; - let i, len, start, end, list; - - for ( i = 0, len = holeIndices.length; i < len; i ++ ) { - - start = holeIndices[ i ] * dim; - end = i < len - 1 ? holeIndices[ i + 1 ] * dim : data.length; - list = linkedList( data, start, end, dim, false ); - if ( list === list.next ) list.steiner = true; - queue.push( getLeftmost( list ) ); - - } - - queue.sort( compareX ); - - // process holes from left to right - for ( i = 0; i < queue.length; i ++ ) { - - outerNode = eliminateHole( queue[ i ], outerNode ); - - } - - return outerNode; - - } - - function compareX( a, b ) { - - return a.x - b.x; - - } - - // find a bridge between vertices that connects hole with an outer ring and link it - function eliminateHole( hole, outerNode ) { - - const bridge = findHoleBridge( hole, outerNode ); - if ( ! bridge ) { - - return outerNode; - - } - - const bridgeReverse = splitPolygon( bridge, hole ); - - // filter collinear points around the cuts - filterPoints( bridgeReverse, bridgeReverse.next ); - return filterPoints( bridge, bridge.next ); - - } - - // David Eberly's algorithm for finding a bridge between hole and outer polygon - function findHoleBridge( hole, outerNode ) { - - let p = outerNode, - qx = - Infinity, - m; - - const hx = hole.x, hy = hole.y; - - // find a segment intersected by a ray from the hole's leftmost point to the left; - // segment's endpoint with lesser x will be potential connection point - do { - - if ( hy <= p.y && hy >= p.next.y && p.next.y !== p.y ) { - - const x = p.x + ( hy - p.y ) * ( p.next.x - p.x ) / ( p.next.y - p.y ); - if ( x <= hx && x > qx ) { - - qx = x; - m = p.x < p.next.x ? p : p.next; - if ( x === hx ) return m; // hole touches outer segment; pick leftmost endpoint - - } - - } - - p = p.next; - - } while ( p !== outerNode ); - - if ( ! m ) return null; - - // look for points inside the triangle of hole point, segment intersection and endpoint; - // if there are no points found, we have a valid connection; - // otherwise choose the point of the minimum angle with the ray as connection point - - const stop = m, - mx = m.x, - my = m.y; - let tanMin = Infinity, tan; - - p = m; - - do { - - if ( hx >= p.x && p.x >= mx && hx !== p.x && - pointInTriangle( hy < my ? hx : qx, hy, mx, my, hy < my ? qx : hx, hy, p.x, p.y ) ) { - - tan = Math.abs( hy - p.y ) / ( hx - p.x ); // tangential - - if ( locallyInside( p, hole ) && ( tan < tanMin || ( tan === tanMin && ( p.x > m.x || ( p.x === m.x && sectorContainsSector( m, p ) ) ) ) ) ) { - - m = p; - tanMin = tan; - - } - - } - - p = p.next; - - } while ( p !== stop ); - - return m; - - } - - // whether sector in vertex m contains sector in vertex p in the same coordinates - function sectorContainsSector( m, p ) { - - return area( m.prev, m, p.prev ) < 0 && area( p.next, m, m.next ) < 0; - - } - - // interlink polygon nodes in z-order - function indexCurve( start, minX, minY, invSize ) { - - let p = start; - do { - - if ( p.z === 0 ) p.z = zOrder( p.x, p.y, minX, minY, invSize ); - p.prevZ = p.prev; - p.nextZ = p.next; - p = p.next; - - } while ( p !== start ); - - p.prevZ.nextZ = null; - p.prevZ = null; - - sortLinked( p ); - - } - - // Simon Tatham's linked list merge sort algorithm - // http://www.chiark.greenend.org.uk/~sgtatham/algorithms/listsort.html - function sortLinked( list ) { - - let i, p, q, e, tail, numMerges, pSize, qSize, - inSize = 1; - - do { - - p = list; - list = null; - tail = null; - numMerges = 0; - - while ( p ) { - - numMerges ++; - q = p; - pSize = 0; - for ( i = 0; i < inSize; i ++ ) { - - pSize ++; - q = q.nextZ; - if ( ! q ) break; - - } - - qSize = inSize; - - while ( pSize > 0 || ( qSize > 0 && q ) ) { - - if ( pSize !== 0 && ( qSize === 0 || ! q || p.z <= q.z ) ) { - - e = p; - p = p.nextZ; - pSize --; - - } else { - - e = q; - q = q.nextZ; - qSize --; - - } - - if ( tail ) tail.nextZ = e; - else list = e; - - e.prevZ = tail; - tail = e; - - } - - p = q; - - } - - tail.nextZ = null; - inSize *= 2; - - } while ( numMerges > 1 ); - - return list; - - } - - // z-order of a point given coords and inverse of the longer side of data bbox - function zOrder( x, y, minX, minY, invSize ) { - - // coords are transformed into non-negative 15-bit integer range - x = ( x - minX ) * invSize | 0; - y = ( y - minY ) * invSize | 0; - - x = ( x | ( x << 8 ) ) & 0x00FF00FF; - x = ( x | ( x << 4 ) ) & 0x0F0F0F0F; - x = ( x | ( x << 2 ) ) & 0x33333333; - x = ( x | ( x << 1 ) ) & 0x55555555; - - y = ( y | ( y << 8 ) ) & 0x00FF00FF; - y = ( y | ( y << 4 ) ) & 0x0F0F0F0F; - y = ( y | ( y << 2 ) ) & 0x33333333; - y = ( y | ( y << 1 ) ) & 0x55555555; - - return x | ( y << 1 ); - - } - - // find the leftmost node of a polygon ring - function getLeftmost( start ) { - - let p = start, - leftmost = start; - do { - - if ( p.x < leftmost.x || ( p.x === leftmost.x && p.y < leftmost.y ) ) leftmost = p; - p = p.next; - - } while ( p !== start ); - - return leftmost; - - } - - // check if a point lies within a convex triangle - function pointInTriangle( ax, ay, bx, by, cx, cy, px, py ) { - - return ( cx - px ) * ( ay - py ) >= ( ax - px ) * ( cy - py ) && - ( ax - px ) * ( by - py ) >= ( bx - px ) * ( ay - py ) && - ( bx - px ) * ( cy - py ) >= ( cx - px ) * ( by - py ); - - } - - // check if a diagonal between two polygon nodes is valid (lies in polygon interior) - function isValidDiagonal( a, b ) { - - return a.next.i !== b.i && a.prev.i !== b.i && ! intersectsPolygon( a, b ) && // dones't intersect other edges - ( locallyInside( a, b ) && locallyInside( b, a ) && middleInside( a, b ) && // locally visible - ( area( a.prev, a, b.prev ) || area( a, b.prev, b ) ) || // does not create opposite-facing sectors - equals( a, b ) && area( a.prev, a, a.next ) > 0 && area( b.prev, b, b.next ) > 0 ); // special zero-length case - - } - - // signed area of a triangle - function area( p, q, r ) { - - return ( q.y - p.y ) * ( r.x - q.x ) - ( q.x - p.x ) * ( r.y - q.y ); - - } - - // check if two points are equal - function equals( p1, p2 ) { - - return p1.x === p2.x && p1.y === p2.y; - - } - - // check if two segments intersect - function intersects( p1, q1, p2, q2 ) { - - const o1 = sign( area( p1, q1, p2 ) ); - const o2 = sign( area( p1, q1, q2 ) ); - const o3 = sign( area( p2, q2, p1 ) ); - const o4 = sign( area( p2, q2, q1 ) ); - - if ( o1 !== o2 && o3 !== o4 ) return true; // general case - - if ( o1 === 0 && onSegment( p1, p2, q1 ) ) return true; // p1, q1 and p2 are collinear and p2 lies on p1q1 - if ( o2 === 0 && onSegment( p1, q2, q1 ) ) return true; // p1, q1 and q2 are collinear and q2 lies on p1q1 - if ( o3 === 0 && onSegment( p2, p1, q2 ) ) return true; // p2, q2 and p1 are collinear and p1 lies on p2q2 - if ( o4 === 0 && onSegment( p2, q1, q2 ) ) return true; // p2, q2 and q1 are collinear and q1 lies on p2q2 - - return false; - - } - - // for collinear points p, q, r, check if point q lies on segment pr - function onSegment( p, q, r ) { - - return q.x <= Math.max( p.x, r.x ) && q.x >= Math.min( p.x, r.x ) && q.y <= Math.max( p.y, r.y ) && q.y >= Math.min( p.y, r.y ); - - } - - function sign( num ) { - - return num > 0 ? 1 : num < 0 ? - 1 : 0; - - } - - // check if a polygon diagonal intersects any polygon segments - function intersectsPolygon( a, b ) { - - let p = a; - do { - - if ( p.i !== a.i && p.next.i !== a.i && p.i !== b.i && p.next.i !== b.i && - intersects( p, p.next, a, b ) ) return true; - p = p.next; - - } while ( p !== a ); - - return false; - - } - - // check if a polygon diagonal is locally inside the polygon - function locallyInside( a, b ) { - - return area( a.prev, a, a.next ) < 0 ? - area( a, b, a.next ) >= 0 && area( a, a.prev, b ) >= 0 : - area( a, b, a.prev ) < 0 || area( a, a.next, b ) < 0; - - } - - // check if the middle point of a polygon diagonal is inside the polygon - function middleInside( a, b ) { - - let p = a, - inside = false; - const px = ( a.x + b.x ) / 2, - py = ( a.y + b.y ) / 2; - do { - - if ( ( ( p.y > py ) !== ( p.next.y > py ) ) && p.next.y !== p.y && - ( px < ( p.next.x - p.x ) * ( py - p.y ) / ( p.next.y - p.y ) + p.x ) ) - inside = ! inside; - p = p.next; - - } while ( p !== a ); - - return inside; - - } - - // link two polygon vertices with a bridge; if the vertices belong to the same ring, it splits polygon into two; - // if one belongs to the outer ring and another to a hole, it merges it into a single ring - function splitPolygon( a, b ) { - - const a2 = new Node( a.i, a.x, a.y ), - b2 = new Node( b.i, b.x, b.y ), - an = a.next, - bp = b.prev; - - a.next = b; - b.prev = a; - - a2.next = an; - an.prev = a2; - - b2.next = a2; - a2.prev = b2; - - bp.next = b2; - b2.prev = bp; - - return b2; - - } - - // create a node and optionally link it with previous one (in a circular doubly linked list) - function insertNode( i, x, y, last ) { - - const p = new Node( i, x, y ); - - if ( ! last ) { - - p.prev = p; - p.next = p; - - } else { - - p.next = last.next; - p.prev = last; - last.next.prev = p; - last.next = p; - - } - - return p; - - } - - function removeNode( p ) { - - p.next.prev = p.prev; - p.prev.next = p.next; - - if ( p.prevZ ) p.prevZ.nextZ = p.nextZ; - if ( p.nextZ ) p.nextZ.prevZ = p.prevZ; - - } - - function Node( i, x, y ) { - - // vertex index in coordinates array - this.i = i; - - // vertex coordinates - this.x = x; - this.y = y; - - // previous and next vertex nodes in a polygon ring - this.prev = null; - this.next = null; - - // z-order curve value - this.z = 0; - - // previous and next nodes in z-order - this.prevZ = null; - this.nextZ = null; - - // indicates whether this is a steiner point - this.steiner = false; - - } - - function signedArea( data, start, end, dim ) { - - let sum = 0; - for ( let i = start, j = end - dim; i < end; i += dim ) { - - sum += ( data[ j ] - data[ i ] ) * ( data[ i + 1 ] + data[ j + 1 ] ); - j = i; - - } - - return sum; - - } - - class ShapeUtils { - - // calculate area of the contour polygon - - static area( contour ) { - - const n = contour.length; - let a = 0.0; - - for ( let p = n - 1, q = 0; q < n; p = q ++ ) { - - a += contour[ p ].x * contour[ q ].y - contour[ q ].x * contour[ p ].y; - - } - - return a * 0.5; - - } - - static isClockWise( pts ) { - - return ShapeUtils.area( pts ) < 0; - - } - - static triangulateShape( contour, holes ) { - - const vertices = []; // flat array of vertices like [ x0,y0, x1,y1, x2,y2, ... ] - const holeIndices = []; // array of hole indices - const faces = []; // final array of vertex indices like [ [ a,b,d ], [ b,c,d ] ] - - removeDupEndPts( contour ); - addContour( vertices, contour ); - - // - - let holeIndex = contour.length; - - holes.forEach( removeDupEndPts ); - - for ( let i = 0; i < holes.length; i ++ ) { - - holeIndices.push( holeIndex ); - holeIndex += holes[ i ].length; - addContour( vertices, holes[ i ] ); - - } - - // - - const triangles = Earcut.triangulate( vertices, holeIndices ); - - // - - for ( let i = 0; i < triangles.length; i += 3 ) { - - faces.push( triangles.slice( i, i + 3 ) ); - - } - - return faces; - - } - - } - - function removeDupEndPts( points ) { - - const l = points.length; - - if ( l > 2 && points[ l - 1 ].equals( points[ 0 ] ) ) { - - points.pop(); - - } - - } - - function addContour( vertices, contour ) { - - for ( let i = 0; i < contour.length; i ++ ) { - - vertices.push( contour[ i ].x ); - vertices.push( contour[ i ].y ); - - } - - } - - /** - * Creates extruded geometry from a path shape. - * - * parameters = { - * - * curveSegments: , // number of points on the curves - * steps: , // number of points for z-side extrusions / used for subdividing segments of extrude spline too - * depth: , // Depth to extrude the shape - * - * bevelEnabled: , // turn on bevel - * bevelThickness: , // how deep into the original shape bevel goes - * bevelSize: , // how far from shape outline (including bevelOffset) is bevel - * bevelOffset: , // how far from shape outline does bevel start - * bevelSegments: , // number of bevel layers - * - * extrudePath: // curve to extrude shape along - * - * UVGenerator: // object that provides UV generator functions - * - * } - */ - - class ExtrudeGeometry extends BufferGeometry { - - constructor( shapes = new Shape( [ new Vector2( 0.5, 0.5 ), new Vector2( - 0.5, 0.5 ), new Vector2( - 0.5, - 0.5 ), new Vector2( 0.5, - 0.5 ) ] ), options = {} ) { - - super(); - - this.type = 'ExtrudeGeometry'; - - this.parameters = { - shapes: shapes, - options: options - }; - - shapes = Array.isArray( shapes ) ? shapes : [ shapes ]; - - const scope = this; - - const verticesArray = []; - const uvArray = []; - - for ( let i = 0, l = shapes.length; i < l; i ++ ) { - - const shape = shapes[ i ]; - addShape( shape ); - - } - - // build geometry - - this.setAttribute( 'position', new Float32BufferAttribute( verticesArray, 3 ) ); - this.setAttribute( 'uv', new Float32BufferAttribute( uvArray, 2 ) ); - - this.computeVertexNormals(); - - // functions - - function addShape( shape ) { - - const placeholder = []; - - // options - - const curveSegments = options.curveSegments !== undefined ? options.curveSegments : 12; - const steps = options.steps !== undefined ? options.steps : 1; - const depth = options.depth !== undefined ? options.depth : 1; - - let bevelEnabled = options.bevelEnabled !== undefined ? options.bevelEnabled : true; - let bevelThickness = options.bevelThickness !== undefined ? options.bevelThickness : 0.2; - let bevelSize = options.bevelSize !== undefined ? options.bevelSize : bevelThickness - 0.1; - let bevelOffset = options.bevelOffset !== undefined ? options.bevelOffset : 0; - let bevelSegments = options.bevelSegments !== undefined ? options.bevelSegments : 3; - - const extrudePath = options.extrudePath; - - const uvgen = options.UVGenerator !== undefined ? options.UVGenerator : WorldUVGenerator; - - // - - let extrudePts, extrudeByPath = false; - let splineTube, binormal, normal, position2; - - if ( extrudePath ) { - - extrudePts = extrudePath.getSpacedPoints( steps ); - - extrudeByPath = true; - bevelEnabled = false; // bevels not supported for path extrusion - - // SETUP TNB variables - - // TODO1 - have a .isClosed in spline? - - splineTube = extrudePath.computeFrenetFrames( steps, false ); - - // console.log(splineTube, 'splineTube', splineTube.normals.length, 'steps', steps, 'extrudePts', extrudePts.length); - - binormal = new Vector3(); - normal = new Vector3(); - position2 = new Vector3(); - - } - - // Safeguards if bevels are not enabled - - if ( ! bevelEnabled ) { - - bevelSegments = 0; - bevelThickness = 0; - bevelSize = 0; - bevelOffset = 0; - - } - - // Variables initialization - - const shapePoints = shape.extractPoints( curveSegments ); - - let vertices = shapePoints.shape; - const holes = shapePoints.holes; - - const reverse = ! ShapeUtils.isClockWise( vertices ); - - if ( reverse ) { - - vertices = vertices.reverse(); - - // Maybe we should also check if holes are in the opposite direction, just to be safe ... - - for ( let h = 0, hl = holes.length; h < hl; h ++ ) { - - const ahole = holes[ h ]; - - if ( ShapeUtils.isClockWise( ahole ) ) { - - holes[ h ] = ahole.reverse(); - - } - - } - - } - - - const faces = ShapeUtils.triangulateShape( vertices, holes ); - - /* Vertices */ - - const contour = vertices; // vertices has all points but contour has only points of circumference - - for ( let h = 0, hl = holes.length; h < hl; h ++ ) { - - const ahole = holes[ h ]; - - vertices = vertices.concat( ahole ); - - } - - - function scalePt2( pt, vec, size ) { - - if ( ! vec ) console.error( 'THREE.ExtrudeGeometry: vec does not exist' ); - - return pt.clone().addScaledVector( vec, size ); - - } - - const vlen = vertices.length, flen = faces.length; - - - // Find directions for point movement - - - function getBevelVec( inPt, inPrev, inNext ) { - - // computes for inPt the corresponding point inPt' on a new contour - // shifted by 1 unit (length of normalized vector) to the left - // if we walk along contour clockwise, this new contour is outside the old one - // - // inPt' is the intersection of the two lines parallel to the two - // adjacent edges of inPt at a distance of 1 unit on the left side. - - let v_trans_x, v_trans_y, shrink_by; // resulting translation vector for inPt - - // good reading for geometry algorithms (here: line-line intersection) - // http://geomalgorithms.com/a05-_intersect-1.html - - const v_prev_x = inPt.x - inPrev.x, - v_prev_y = inPt.y - inPrev.y; - const v_next_x = inNext.x - inPt.x, - v_next_y = inNext.y - inPt.y; - - const v_prev_lensq = ( v_prev_x * v_prev_x + v_prev_y * v_prev_y ); - - // check for collinear edges - const collinear0 = ( v_prev_x * v_next_y - v_prev_y * v_next_x ); - - if ( Math.abs( collinear0 ) > Number.EPSILON ) { - - // not collinear - - // length of vectors for normalizing - - const v_prev_len = Math.sqrt( v_prev_lensq ); - const v_next_len = Math.sqrt( v_next_x * v_next_x + v_next_y * v_next_y ); - - // shift adjacent points by unit vectors to the left - - const ptPrevShift_x = ( inPrev.x - v_prev_y / v_prev_len ); - const ptPrevShift_y = ( inPrev.y + v_prev_x / v_prev_len ); - - const ptNextShift_x = ( inNext.x - v_next_y / v_next_len ); - const ptNextShift_y = ( inNext.y + v_next_x / v_next_len ); - - // scaling factor for v_prev to intersection point - - const sf = ( ( ptNextShift_x - ptPrevShift_x ) * v_next_y - - ( ptNextShift_y - ptPrevShift_y ) * v_next_x ) / - ( v_prev_x * v_next_y - v_prev_y * v_next_x ); - - // vector from inPt to intersection point - - v_trans_x = ( ptPrevShift_x + v_prev_x * sf - inPt.x ); - v_trans_y = ( ptPrevShift_y + v_prev_y * sf - inPt.y ); - - // Don't normalize!, otherwise sharp corners become ugly - // but prevent crazy spikes - const v_trans_lensq = ( v_trans_x * v_trans_x + v_trans_y * v_trans_y ); - if ( v_trans_lensq <= 2 ) { - - return new Vector2( v_trans_x, v_trans_y ); - - } else { - - shrink_by = Math.sqrt( v_trans_lensq / 2 ); - - } - - } else { - - // handle special case of collinear edges - - let direction_eq = false; // assumes: opposite - - if ( v_prev_x > Number.EPSILON ) { - - if ( v_next_x > Number.EPSILON ) { - - direction_eq = true; - - } - - } else { - - if ( v_prev_x < - Number.EPSILON ) { - - if ( v_next_x < - Number.EPSILON ) { - - direction_eq = true; - - } - - } else { - - if ( Math.sign( v_prev_y ) === Math.sign( v_next_y ) ) { - - direction_eq = true; - - } - - } - - } - - if ( direction_eq ) { - - // console.log("Warning: lines are a straight sequence"); - v_trans_x = - v_prev_y; - v_trans_y = v_prev_x; - shrink_by = Math.sqrt( v_prev_lensq ); - - } else { - - // console.log("Warning: lines are a straight spike"); - v_trans_x = v_prev_x; - v_trans_y = v_prev_y; - shrink_by = Math.sqrt( v_prev_lensq / 2 ); - - } - - } - - return new Vector2( v_trans_x / shrink_by, v_trans_y / shrink_by ); - - } - - - const contourMovements = []; - - for ( let i = 0, il = contour.length, j = il - 1, k = i + 1; i < il; i ++, j ++, k ++ ) { - - if ( j === il ) j = 0; - if ( k === il ) k = 0; - - // (j)---(i)---(k) - // console.log('i,j,k', i, j , k) - - contourMovements[ i ] = getBevelVec( contour[ i ], contour[ j ], contour[ k ] ); - - } - - const holesMovements = []; - let oneHoleMovements, verticesMovements = contourMovements.concat(); - - for ( let h = 0, hl = holes.length; h < hl; h ++ ) { - - const ahole = holes[ h ]; - - oneHoleMovements = []; - - for ( let i = 0, il = ahole.length, j = il - 1, k = i + 1; i < il; i ++, j ++, k ++ ) { - - if ( j === il ) j = 0; - if ( k === il ) k = 0; - - // (j)---(i)---(k) - oneHoleMovements[ i ] = getBevelVec( ahole[ i ], ahole[ j ], ahole[ k ] ); - - } - - holesMovements.push( oneHoleMovements ); - verticesMovements = verticesMovements.concat( oneHoleMovements ); - - } - - - // Loop bevelSegments, 1 for the front, 1 for the back - - for ( let b = 0; b < bevelSegments; b ++ ) { - - //for ( b = bevelSegments; b > 0; b -- ) { - - const t = b / bevelSegments; - const z = bevelThickness * Math.cos( t * Math.PI / 2 ); - const bs = bevelSize * Math.sin( t * Math.PI / 2 ) + bevelOffset; - - // contract shape - - for ( let i = 0, il = contour.length; i < il; i ++ ) { - - const vert = scalePt2( contour[ i ], contourMovements[ i ], bs ); - - v( vert.x, vert.y, - z ); - - } - - // expand holes - - for ( let h = 0, hl = holes.length; h < hl; h ++ ) { - - const ahole = holes[ h ]; - oneHoleMovements = holesMovements[ h ]; - - for ( let i = 0, il = ahole.length; i < il; i ++ ) { - - const vert = scalePt2( ahole[ i ], oneHoleMovements[ i ], bs ); - - v( vert.x, vert.y, - z ); - - } - - } - - } - - const bs = bevelSize + bevelOffset; - - // Back facing vertices - - for ( let i = 0; i < vlen; i ++ ) { - - const vert = bevelEnabled ? scalePt2( vertices[ i ], verticesMovements[ i ], bs ) : vertices[ i ]; - - if ( ! extrudeByPath ) { - - v( vert.x, vert.y, 0 ); - - } else { - - // v( vert.x, vert.y + extrudePts[ 0 ].y, extrudePts[ 0 ].x ); - - normal.copy( splineTube.normals[ 0 ] ).multiplyScalar( vert.x ); - binormal.copy( splineTube.binormals[ 0 ] ).multiplyScalar( vert.y ); - - position2.copy( extrudePts[ 0 ] ).add( normal ).add( binormal ); - - v( position2.x, position2.y, position2.z ); - - } - - } - - // Add stepped vertices... - // Including front facing vertices - - for ( let s = 1; s <= steps; s ++ ) { - - for ( let i = 0; i < vlen; i ++ ) { - - const vert = bevelEnabled ? scalePt2( vertices[ i ], verticesMovements[ i ], bs ) : vertices[ i ]; - - if ( ! extrudeByPath ) { - - v( vert.x, vert.y, depth / steps * s ); - - } else { - - // v( vert.x, vert.y + extrudePts[ s - 1 ].y, extrudePts[ s - 1 ].x ); - - normal.copy( splineTube.normals[ s ] ).multiplyScalar( vert.x ); - binormal.copy( splineTube.binormals[ s ] ).multiplyScalar( vert.y ); - - position2.copy( extrudePts[ s ] ).add( normal ).add( binormal ); - - v( position2.x, position2.y, position2.z ); - - } - - } - - } - - - // Add bevel segments planes - - //for ( b = 1; b <= bevelSegments; b ++ ) { - for ( let b = bevelSegments - 1; b >= 0; b -- ) { - - const t = b / bevelSegments; - const z = bevelThickness * Math.cos( t * Math.PI / 2 ); - const bs = bevelSize * Math.sin( t * Math.PI / 2 ) + bevelOffset; - - // contract shape - - for ( let i = 0, il = contour.length; i < il; i ++ ) { - - const vert = scalePt2( contour[ i ], contourMovements[ i ], bs ); - v( vert.x, vert.y, depth + z ); - - } - - // expand holes - - for ( let h = 0, hl = holes.length; h < hl; h ++ ) { - - const ahole = holes[ h ]; - oneHoleMovements = holesMovements[ h ]; - - for ( let i = 0, il = ahole.length; i < il; i ++ ) { - - const vert = scalePt2( ahole[ i ], oneHoleMovements[ i ], bs ); - - if ( ! extrudeByPath ) { - - v( vert.x, vert.y, depth + z ); - - } else { - - v( vert.x, vert.y + extrudePts[ steps - 1 ].y, extrudePts[ steps - 1 ].x + z ); - - } - - } - - } - - } - - /* Faces */ - - // Top and bottom faces - - buildLidFaces(); - - // Sides faces - - buildSideFaces(); - - - ///// Internal functions - - function buildLidFaces() { - - const start = verticesArray.length / 3; - - if ( bevelEnabled ) { - - let layer = 0; // steps + 1 - let offset = vlen * layer; - - // Bottom faces - - for ( let i = 0; i < flen; i ++ ) { - - const face = faces[ i ]; - f3( face[ 2 ] + offset, face[ 1 ] + offset, face[ 0 ] + offset ); - - } - - layer = steps + bevelSegments * 2; - offset = vlen * layer; - - // Top faces - - for ( let i = 0; i < flen; i ++ ) { - - const face = faces[ i ]; - f3( face[ 0 ] + offset, face[ 1 ] + offset, face[ 2 ] + offset ); - - } - - } else { - - // Bottom faces - - for ( let i = 0; i < flen; i ++ ) { - - const face = faces[ i ]; - f3( face[ 2 ], face[ 1 ], face[ 0 ] ); - - } - - // Top faces - - for ( let i = 0; i < flen; i ++ ) { - - const face = faces[ i ]; - f3( face[ 0 ] + vlen * steps, face[ 1 ] + vlen * steps, face[ 2 ] + vlen * steps ); - - } - - } - - scope.addGroup( start, verticesArray.length / 3 - start, 0 ); - - } - - // Create faces for the z-sides of the shape - - function buildSideFaces() { - - const start = verticesArray.length / 3; - let layeroffset = 0; - sidewalls( contour, layeroffset ); - layeroffset += contour.length; - - for ( let h = 0, hl = holes.length; h < hl; h ++ ) { - - const ahole = holes[ h ]; - sidewalls( ahole, layeroffset ); - - //, true - layeroffset += ahole.length; - - } - - - scope.addGroup( start, verticesArray.length / 3 - start, 1 ); - - - } - - function sidewalls( contour, layeroffset ) { - - let i = contour.length; - - while ( -- i >= 0 ) { - - const j = i; - let k = i - 1; - if ( k < 0 ) k = contour.length - 1; - - //console.log('b', i,j, i-1, k,vertices.length); - - for ( let s = 0, sl = ( steps + bevelSegments * 2 ); s < sl; s ++ ) { - - const slen1 = vlen * s; - const slen2 = vlen * ( s + 1 ); - - const a = layeroffset + j + slen1, - b = layeroffset + k + slen1, - c = layeroffset + k + slen2, - d = layeroffset + j + slen2; - - f4( a, b, c, d ); - - } - - } - - } - - function v( x, y, z ) { - - placeholder.push( x ); - placeholder.push( y ); - placeholder.push( z ); - - } - - - function f3( a, b, c ) { - - addVertex( a ); - addVertex( b ); - addVertex( c ); - - const nextIndex = verticesArray.length / 3; - const uvs = uvgen.generateTopUV( scope, verticesArray, nextIndex - 3, nextIndex - 2, nextIndex - 1 ); - - addUV( uvs[ 0 ] ); - addUV( uvs[ 1 ] ); - addUV( uvs[ 2 ] ); - - } - - function f4( a, b, c, d ) { - - addVertex( a ); - addVertex( b ); - addVertex( d ); - - addVertex( b ); - addVertex( c ); - addVertex( d ); - - - const nextIndex = verticesArray.length / 3; - const uvs = uvgen.generateSideWallUV( scope, verticesArray, nextIndex - 6, nextIndex - 3, nextIndex - 2, nextIndex - 1 ); - - addUV( uvs[ 0 ] ); - addUV( uvs[ 1 ] ); - addUV( uvs[ 3 ] ); - - addUV( uvs[ 1 ] ); - addUV( uvs[ 2 ] ); - addUV( uvs[ 3 ] ); - - } - - function addVertex( index ) { - - verticesArray.push( placeholder[ index * 3 + 0 ] ); - verticesArray.push( placeholder[ index * 3 + 1 ] ); - verticesArray.push( placeholder[ index * 3 + 2 ] ); - - } - - - function addUV( vector2 ) { - - uvArray.push( vector2.x ); - uvArray.push( vector2.y ); - - } - - } - - } - - copy( source ) { - - super.copy( source ); - - this.parameters = Object.assign( {}, source.parameters ); - - return this; - - } - - toJSON() { - - const data = super.toJSON(); - - const shapes = this.parameters.shapes; - const options = this.parameters.options; - - return toJSON$1( shapes, options, data ); - - } - - static fromJSON( data, shapes ) { - - const geometryShapes = []; - - for ( let j = 0, jl = data.shapes.length; j < jl; j ++ ) { - - const shape = shapes[ data.shapes[ j ] ]; - - geometryShapes.push( shape ); - - } - - const extrudePath = data.options.extrudePath; - - if ( extrudePath !== undefined ) { - - data.options.extrudePath = new Curves[ extrudePath.type ]().fromJSON( extrudePath ); - - } - - return new ExtrudeGeometry( geometryShapes, data.options ); - - } - - } - - const WorldUVGenerator = { - - generateTopUV: function ( geometry, vertices, indexA, indexB, indexC ) { - - const a_x = vertices[ indexA * 3 ]; - const a_y = vertices[ indexA * 3 + 1 ]; - const b_x = vertices[ indexB * 3 ]; - const b_y = vertices[ indexB * 3 + 1 ]; - const c_x = vertices[ indexC * 3 ]; - const c_y = vertices[ indexC * 3 + 1 ]; - - return [ - new Vector2( a_x, a_y ), - new Vector2( b_x, b_y ), - new Vector2( c_x, c_y ) - ]; - - }, - - generateSideWallUV: function ( geometry, vertices, indexA, indexB, indexC, indexD ) { - - const a_x = vertices[ indexA * 3 ]; - const a_y = vertices[ indexA * 3 + 1 ]; - const a_z = vertices[ indexA * 3 + 2 ]; - const b_x = vertices[ indexB * 3 ]; - const b_y = vertices[ indexB * 3 + 1 ]; - const b_z = vertices[ indexB * 3 + 2 ]; - const c_x = vertices[ indexC * 3 ]; - const c_y = vertices[ indexC * 3 + 1 ]; - const c_z = vertices[ indexC * 3 + 2 ]; - const d_x = vertices[ indexD * 3 ]; - const d_y = vertices[ indexD * 3 + 1 ]; - const d_z = vertices[ indexD * 3 + 2 ]; - - if ( Math.abs( a_y - b_y ) < Math.abs( a_x - b_x ) ) { - - return [ - new Vector2( a_x, 1 - a_z ), - new Vector2( b_x, 1 - b_z ), - new Vector2( c_x, 1 - c_z ), - new Vector2( d_x, 1 - d_z ) - ]; - - } else { - - return [ - new Vector2( a_y, 1 - a_z ), - new Vector2( b_y, 1 - b_z ), - new Vector2( c_y, 1 - c_z ), - new Vector2( d_y, 1 - d_z ) - ]; - - } - - } - - }; - - function toJSON$1( shapes, options, data ) { - - data.shapes = []; - - if ( Array.isArray( shapes ) ) { - - for ( let i = 0, l = shapes.length; i < l; i ++ ) { - - const shape = shapes[ i ]; - - data.shapes.push( shape.uuid ); - - } - - } else { - - data.shapes.push( shapes.uuid ); - - } - - data.options = Object.assign( {}, options ); - - if ( options.extrudePath !== undefined ) data.options.extrudePath = options.extrudePath.toJSON(); - - return data; - - } - - class IcosahedronGeometry extends PolyhedronGeometry { - - constructor( radius = 1, detail = 0 ) { - - const t = ( 1 + Math.sqrt( 5 ) ) / 2; - - const vertices = [ - - 1, t, 0, 1, t, 0, - 1, - t, 0, 1, - t, 0, - 0, - 1, t, 0, 1, t, 0, - 1, - t, 0, 1, - t, - t, 0, - 1, t, 0, 1, - t, 0, - 1, - t, 0, 1 - ]; - - const indices = [ - 0, 11, 5, 0, 5, 1, 0, 1, 7, 0, 7, 10, 0, 10, 11, - 1, 5, 9, 5, 11, 4, 11, 10, 2, 10, 7, 6, 7, 1, 8, - 3, 9, 4, 3, 4, 2, 3, 2, 6, 3, 6, 8, 3, 8, 9, - 4, 9, 5, 2, 4, 11, 6, 2, 10, 8, 6, 7, 9, 8, 1 - ]; - - super( vertices, indices, radius, detail ); - - this.type = 'IcosahedronGeometry'; - - this.parameters = { - radius: radius, - detail: detail - }; - - } - - static fromJSON( data ) { - - return new IcosahedronGeometry( data.radius, data.detail ); - - } - - } - - class OctahedronGeometry extends PolyhedronGeometry { - - constructor( radius = 1, detail = 0 ) { - - const vertices = [ - 1, 0, 0, - 1, 0, 0, 0, 1, 0, - 0, - 1, 0, 0, 0, 1, 0, 0, - 1 - ]; - - const indices = [ - 0, 2, 4, 0, 4, 3, 0, 3, 5, - 0, 5, 2, 1, 2, 5, 1, 5, 3, - 1, 3, 4, 1, 4, 2 - ]; - - super( vertices, indices, radius, detail ); - - this.type = 'OctahedronGeometry'; - - this.parameters = { - radius: radius, - detail: detail - }; - - } - - static fromJSON( data ) { - - return new OctahedronGeometry( data.radius, data.detail ); - - } - - } - - class RingGeometry extends BufferGeometry { - - constructor( innerRadius = 0.5, outerRadius = 1, thetaSegments = 32, phiSegments = 1, thetaStart = 0, thetaLength = Math.PI * 2 ) { - - super(); - - this.type = 'RingGeometry'; - - this.parameters = { - innerRadius: innerRadius, - outerRadius: outerRadius, - thetaSegments: thetaSegments, - phiSegments: phiSegments, - thetaStart: thetaStart, - thetaLength: thetaLength - }; - - thetaSegments = Math.max( 3, thetaSegments ); - phiSegments = Math.max( 1, phiSegments ); - - // buffers - - const indices = []; - const vertices = []; - const normals = []; - const uvs = []; - - // some helper variables - - let radius = innerRadius; - const radiusStep = ( ( outerRadius - innerRadius ) / phiSegments ); - const vertex = new Vector3(); - const uv = new Vector2(); - - // generate vertices, normals and uvs - - for ( let j = 0; j <= phiSegments; j ++ ) { - - for ( let i = 0; i <= thetaSegments; i ++ ) { - - // values are generate from the inside of the ring to the outside - - const segment = thetaStart + i / thetaSegments * thetaLength; - - // vertex - - vertex.x = radius * Math.cos( segment ); - vertex.y = radius * Math.sin( segment ); - - vertices.push( vertex.x, vertex.y, vertex.z ); - - // normal - - normals.push( 0, 0, 1 ); - - // uv - - uv.x = ( vertex.x / outerRadius + 1 ) / 2; - uv.y = ( vertex.y / outerRadius + 1 ) / 2; - - uvs.push( uv.x, uv.y ); - - } - - // increase the radius for next row of vertices - - radius += radiusStep; - - } - - // indices - - for ( let j = 0; j < phiSegments; j ++ ) { - - const thetaSegmentLevel = j * ( thetaSegments + 1 ); - - for ( let i = 0; i < thetaSegments; i ++ ) { - - const segment = i + thetaSegmentLevel; - - const a = segment; - const b = segment + thetaSegments + 1; - const c = segment + thetaSegments + 2; - const d = segment + 1; - - // faces - - indices.push( a, b, d ); - indices.push( b, c, d ); - - } - - } - - // build geometry - - this.setIndex( indices ); - this.setAttribute( 'position', new Float32BufferAttribute( vertices, 3 ) ); - this.setAttribute( 'normal', new Float32BufferAttribute( normals, 3 ) ); - this.setAttribute( 'uv', new Float32BufferAttribute( uvs, 2 ) ); - - } - - copy( source ) { - - super.copy( source ); - - this.parameters = Object.assign( {}, source.parameters ); - - return this; - - } - - static fromJSON( data ) { - - return new RingGeometry( data.innerRadius, data.outerRadius, data.thetaSegments, data.phiSegments, data.thetaStart, data.thetaLength ); - - } - - } - - class ShapeGeometry extends BufferGeometry { - - constructor( shapes = new Shape( [ new Vector2( 0, 0.5 ), new Vector2( - 0.5, - 0.5 ), new Vector2( 0.5, - 0.5 ) ] ), curveSegments = 12 ) { - - super(); - - this.type = 'ShapeGeometry'; - - this.parameters = { - shapes: shapes, - curveSegments: curveSegments - }; - - // buffers - - const indices = []; - const vertices = []; - const normals = []; - const uvs = []; - - // helper variables - - let groupStart = 0; - let groupCount = 0; - - // allow single and array values for "shapes" parameter - - if ( Array.isArray( shapes ) === false ) { - - addShape( shapes ); - - } else { - - for ( let i = 0; i < shapes.length; i ++ ) { - - addShape( shapes[ i ] ); - - this.addGroup( groupStart, groupCount, i ); // enables MultiMaterial support - - groupStart += groupCount; - groupCount = 0; - - } - - } - - // build geometry - - this.setIndex( indices ); - this.setAttribute( 'position', new Float32BufferAttribute( vertices, 3 ) ); - this.setAttribute( 'normal', new Float32BufferAttribute( normals, 3 ) ); - this.setAttribute( 'uv', new Float32BufferAttribute( uvs, 2 ) ); - - - // helper functions - - function addShape( shape ) { - - const indexOffset = vertices.length / 3; - const points = shape.extractPoints( curveSegments ); - - let shapeVertices = points.shape; - const shapeHoles = points.holes; - - // check direction of vertices - - if ( ShapeUtils.isClockWise( shapeVertices ) === false ) { - - shapeVertices = shapeVertices.reverse(); - - } - - for ( let i = 0, l = shapeHoles.length; i < l; i ++ ) { - - const shapeHole = shapeHoles[ i ]; - - if ( ShapeUtils.isClockWise( shapeHole ) === true ) { - - shapeHoles[ i ] = shapeHole.reverse(); - - } - - } - - const faces = ShapeUtils.triangulateShape( shapeVertices, shapeHoles ); - - // join vertices of inner and outer paths to a single array - - for ( let i = 0, l = shapeHoles.length; i < l; i ++ ) { - - const shapeHole = shapeHoles[ i ]; - shapeVertices = shapeVertices.concat( shapeHole ); - - } - - // vertices, normals, uvs - - for ( let i = 0, l = shapeVertices.length; i < l; i ++ ) { - - const vertex = shapeVertices[ i ]; - - vertices.push( vertex.x, vertex.y, 0 ); - normals.push( 0, 0, 1 ); - uvs.push( vertex.x, vertex.y ); // world uvs - - } - - // indices - - for ( let i = 0, l = faces.length; i < l; i ++ ) { - - const face = faces[ i ]; - - const a = face[ 0 ] + indexOffset; - const b = face[ 1 ] + indexOffset; - const c = face[ 2 ] + indexOffset; - - indices.push( a, b, c ); - groupCount += 3; - - } - - } - - } - - copy( source ) { - - super.copy( source ); - - this.parameters = Object.assign( {}, source.parameters ); - - return this; - - } - - toJSON() { - - const data = super.toJSON(); - - const shapes = this.parameters.shapes; - - return toJSON( shapes, data ); - - } - - static fromJSON( data, shapes ) { - - const geometryShapes = []; - - for ( let j = 0, jl = data.shapes.length; j < jl; j ++ ) { - - const shape = shapes[ data.shapes[ j ] ]; - - geometryShapes.push( shape ); - - } - - return new ShapeGeometry( geometryShapes, data.curveSegments ); - - } - - } - - function toJSON( shapes, data ) { - - data.shapes = []; - - if ( Array.isArray( shapes ) ) { - - for ( let i = 0, l = shapes.length; i < l; i ++ ) { - - const shape = shapes[ i ]; - - data.shapes.push( shape.uuid ); - - } - - } else { - - data.shapes.push( shapes.uuid ); - - } - - return data; - - } - - class SphereGeometry extends BufferGeometry { - - constructor( radius = 1, widthSegments = 32, heightSegments = 16, phiStart = 0, phiLength = Math.PI * 2, thetaStart = 0, thetaLength = Math.PI ) { - - super(); - - this.type = 'SphereGeometry'; - - this.parameters = { - radius: radius, - widthSegments: widthSegments, - heightSegments: heightSegments, - phiStart: phiStart, - phiLength: phiLength, - thetaStart: thetaStart, - thetaLength: thetaLength - }; - - widthSegments = Math.max( 3, Math.floor( widthSegments ) ); - heightSegments = Math.max( 2, Math.floor( heightSegments ) ); - - const thetaEnd = Math.min( thetaStart + thetaLength, Math.PI ); - - let index = 0; - const grid = []; - - const vertex = new Vector3(); - const normal = new Vector3(); - - // buffers - - const indices = []; - const vertices = []; - const normals = []; - const uvs = []; - - // generate vertices, normals and uvs - - for ( let iy = 0; iy <= heightSegments; iy ++ ) { - - const verticesRow = []; - - const v = iy / heightSegments; - - // special case for the poles - - let uOffset = 0; - - if ( iy == 0 && thetaStart == 0 ) { - - uOffset = 0.5 / widthSegments; - - } else if ( iy == heightSegments && thetaEnd == Math.PI ) { - - uOffset = - 0.5 / widthSegments; - - } - - for ( let ix = 0; ix <= widthSegments; ix ++ ) { - - const u = ix / widthSegments; - - // vertex - - vertex.x = - radius * Math.cos( phiStart + u * phiLength ) * Math.sin( thetaStart + v * thetaLength ); - vertex.y = radius * Math.cos( thetaStart + v * thetaLength ); - vertex.z = radius * Math.sin( phiStart + u * phiLength ) * Math.sin( thetaStart + v * thetaLength ); - - vertices.push( vertex.x, vertex.y, vertex.z ); - - // normal - - normal.copy( vertex ).normalize(); - normals.push( normal.x, normal.y, normal.z ); - - // uv - - uvs.push( u + uOffset, 1 - v ); - - verticesRow.push( index ++ ); - - } - - grid.push( verticesRow ); - - } - - // indices - - for ( let iy = 0; iy < heightSegments; iy ++ ) { - - for ( let ix = 0; ix < widthSegments; ix ++ ) { - - const a = grid[ iy ][ ix + 1 ]; - const b = grid[ iy ][ ix ]; - const c = grid[ iy + 1 ][ ix ]; - const d = grid[ iy + 1 ][ ix + 1 ]; - - if ( iy !== 0 || thetaStart > 0 ) indices.push( a, b, d ); - if ( iy !== heightSegments - 1 || thetaEnd < Math.PI ) indices.push( b, c, d ); - - } - - } - - // build geometry - - this.setIndex( indices ); - this.setAttribute( 'position', new Float32BufferAttribute( vertices, 3 ) ); - this.setAttribute( 'normal', new Float32BufferAttribute( normals, 3 ) ); - this.setAttribute( 'uv', new Float32BufferAttribute( uvs, 2 ) ); - - } - - copy( source ) { - - super.copy( source ); - - this.parameters = Object.assign( {}, source.parameters ); - - return this; - - } - - static fromJSON( data ) { - - return new SphereGeometry( data.radius, data.widthSegments, data.heightSegments, data.phiStart, data.phiLength, data.thetaStart, data.thetaLength ); - - } - - } - - class TetrahedronGeometry extends PolyhedronGeometry { - - constructor( radius = 1, detail = 0 ) { - - const vertices = [ - 1, 1, 1, - 1, - 1, 1, - 1, 1, - 1, 1, - 1, - 1 - ]; - - const indices = [ - 2, 1, 0, 0, 3, 2, 1, 3, 0, 2, 3, 1 - ]; - - super( vertices, indices, radius, detail ); - - this.type = 'TetrahedronGeometry'; - - this.parameters = { - radius: radius, - detail: detail - }; - - } - - static fromJSON( data ) { - - return new TetrahedronGeometry( data.radius, data.detail ); - - } - - } - - class TorusGeometry extends BufferGeometry { - - constructor( radius = 1, tube = 0.4, radialSegments = 12, tubularSegments = 48, arc = Math.PI * 2 ) { - - super(); - - this.type = 'TorusGeometry'; - - this.parameters = { - radius: radius, - tube: tube, - radialSegments: radialSegments, - tubularSegments: tubularSegments, - arc: arc - }; - - radialSegments = Math.floor( radialSegments ); - tubularSegments = Math.floor( tubularSegments ); - - // buffers - - const indices = []; - const vertices = []; - const normals = []; - const uvs = []; - - // helper variables - - const center = new Vector3(); - const vertex = new Vector3(); - const normal = new Vector3(); - - // generate vertices, normals and uvs - - for ( let j = 0; j <= radialSegments; j ++ ) { - - for ( let i = 0; i <= tubularSegments; i ++ ) { - - const u = i / tubularSegments * arc; - const v = j / radialSegments * Math.PI * 2; - - // vertex - - vertex.x = ( radius + tube * Math.cos( v ) ) * Math.cos( u ); - vertex.y = ( radius + tube * Math.cos( v ) ) * Math.sin( u ); - vertex.z = tube * Math.sin( v ); - - vertices.push( vertex.x, vertex.y, vertex.z ); - - // normal - - center.x = radius * Math.cos( u ); - center.y = radius * Math.sin( u ); - normal.subVectors( vertex, center ).normalize(); - - normals.push( normal.x, normal.y, normal.z ); - - // uv - - uvs.push( i / tubularSegments ); - uvs.push( j / radialSegments ); - - } - - } - - // generate indices - - for ( let j = 1; j <= radialSegments; j ++ ) { - - for ( let i = 1; i <= tubularSegments; i ++ ) { - - // indices - - const a = ( tubularSegments + 1 ) * j + i - 1; - const b = ( tubularSegments + 1 ) * ( j - 1 ) + i - 1; - const c = ( tubularSegments + 1 ) * ( j - 1 ) + i; - const d = ( tubularSegments + 1 ) * j + i; - - // faces - - indices.push( a, b, d ); - indices.push( b, c, d ); - - } - - } - - // build geometry - - this.setIndex( indices ); - this.setAttribute( 'position', new Float32BufferAttribute( vertices, 3 ) ); - this.setAttribute( 'normal', new Float32BufferAttribute( normals, 3 ) ); - this.setAttribute( 'uv', new Float32BufferAttribute( uvs, 2 ) ); - - } - - copy( source ) { - - super.copy( source ); - - this.parameters = Object.assign( {}, source.parameters ); - - return this; - - } - - static fromJSON( data ) { - - return new TorusGeometry( data.radius, data.tube, data.radialSegments, data.tubularSegments, data.arc ); - - } - - } - - class TorusKnotGeometry extends BufferGeometry { - - constructor( radius = 1, tube = 0.4, tubularSegments = 64, radialSegments = 8, p = 2, q = 3 ) { - - super(); - - this.type = 'TorusKnotGeometry'; - - this.parameters = { - radius: radius, - tube: tube, - tubularSegments: tubularSegments, - radialSegments: radialSegments, - p: p, - q: q - }; - - tubularSegments = Math.floor( tubularSegments ); - radialSegments = Math.floor( radialSegments ); - - // buffers - - const indices = []; - const vertices = []; - const normals = []; - const uvs = []; - - // helper variables - - const vertex = new Vector3(); - const normal = new Vector3(); - - const P1 = new Vector3(); - const P2 = new Vector3(); - - const B = new Vector3(); - const T = new Vector3(); - const N = new Vector3(); - - // generate vertices, normals and uvs - - for ( let i = 0; i <= tubularSegments; ++ i ) { - - // the radian "u" is used to calculate the position on the torus curve of the current tubular segment - - const u = i / tubularSegments * p * Math.PI * 2; - - // now we calculate two points. P1 is our current position on the curve, P2 is a little farther ahead. - // these points are used to create a special "coordinate space", which is necessary to calculate the correct vertex positions - - calculatePositionOnCurve( u, p, q, radius, P1 ); - calculatePositionOnCurve( u + 0.01, p, q, radius, P2 ); - - // calculate orthonormal basis - - T.subVectors( P2, P1 ); - N.addVectors( P2, P1 ); - B.crossVectors( T, N ); - N.crossVectors( B, T ); - - // normalize B, N. T can be ignored, we don't use it - - B.normalize(); - N.normalize(); - - for ( let j = 0; j <= radialSegments; ++ j ) { - - // now calculate the vertices. they are nothing more than an extrusion of the torus curve. - // because we extrude a shape in the xy-plane, there is no need to calculate a z-value. - - const v = j / radialSegments * Math.PI * 2; - const cx = - tube * Math.cos( v ); - const cy = tube * Math.sin( v ); - - // now calculate the final vertex position. - // first we orient the extrusion with our basis vectors, then we add it to the current position on the curve - - vertex.x = P1.x + ( cx * N.x + cy * B.x ); - vertex.y = P1.y + ( cx * N.y + cy * B.y ); - vertex.z = P1.z + ( cx * N.z + cy * B.z ); - - vertices.push( vertex.x, vertex.y, vertex.z ); - - // normal (P1 is always the center/origin of the extrusion, thus we can use it to calculate the normal) - - normal.subVectors( vertex, P1 ).normalize(); - - normals.push( normal.x, normal.y, normal.z ); - - // uv - - uvs.push( i / tubularSegments ); - uvs.push( j / radialSegments ); - - } - - } - - // generate indices - - for ( let j = 1; j <= tubularSegments; j ++ ) { - - for ( let i = 1; i <= radialSegments; i ++ ) { - - // indices - - const a = ( radialSegments + 1 ) * ( j - 1 ) + ( i - 1 ); - const b = ( radialSegments + 1 ) * j + ( i - 1 ); - const c = ( radialSegments + 1 ) * j + i; - const d = ( radialSegments + 1 ) * ( j - 1 ) + i; - - // faces - - indices.push( a, b, d ); - indices.push( b, c, d ); - - } - - } - - // build geometry - - this.setIndex( indices ); - this.setAttribute( 'position', new Float32BufferAttribute( vertices, 3 ) ); - this.setAttribute( 'normal', new Float32BufferAttribute( normals, 3 ) ); - this.setAttribute( 'uv', new Float32BufferAttribute( uvs, 2 ) ); - - // this function calculates the current position on the torus curve - - function calculatePositionOnCurve( u, p, q, radius, position ) { - - const cu = Math.cos( u ); - const su = Math.sin( u ); - const quOverP = q / p * u; - const cs = Math.cos( quOverP ); - - position.x = radius * ( 2 + cs ) * 0.5 * cu; - position.y = radius * ( 2 + cs ) * su * 0.5; - position.z = radius * Math.sin( quOverP ) * 0.5; - - } - - } - - copy( source ) { - - super.copy( source ); - - this.parameters = Object.assign( {}, source.parameters ); - - return this; - - } - - static fromJSON( data ) { - - return new TorusKnotGeometry( data.radius, data.tube, data.tubularSegments, data.radialSegments, data.p, data.q ); - - } - - } - - class TubeGeometry extends BufferGeometry { - - constructor( path = new QuadraticBezierCurve3( new Vector3( - 1, - 1, 0 ), new Vector3( - 1, 1, 0 ), new Vector3( 1, 1, 0 ) ), tubularSegments = 64, radius = 1, radialSegments = 8, closed = false ) { - - super(); - - this.type = 'TubeGeometry'; - - this.parameters = { - path: path, - tubularSegments: tubularSegments, - radius: radius, - radialSegments: radialSegments, - closed: closed - }; - - const frames = path.computeFrenetFrames( tubularSegments, closed ); - - // expose internals - - this.tangents = frames.tangents; - this.normals = frames.normals; - this.binormals = frames.binormals; - - // helper variables - - const vertex = new Vector3(); - const normal = new Vector3(); - const uv = new Vector2(); - let P = new Vector3(); - - // buffer - - const vertices = []; - const normals = []; - const uvs = []; - const indices = []; - - // create buffer data - - generateBufferData(); - - // build geometry - - this.setIndex( indices ); - this.setAttribute( 'position', new Float32BufferAttribute( vertices, 3 ) ); - this.setAttribute( 'normal', new Float32BufferAttribute( normals, 3 ) ); - this.setAttribute( 'uv', new Float32BufferAttribute( uvs, 2 ) ); - - // functions - - function generateBufferData() { - - for ( let i = 0; i < tubularSegments; i ++ ) { - - generateSegment( i ); - - } - - // if the geometry is not closed, generate the last row of vertices and normals - // at the regular position on the given path - // - // if the geometry is closed, duplicate the first row of vertices and normals (uvs will differ) - - generateSegment( ( closed === false ) ? tubularSegments : 0 ); - - // uvs are generated in a separate function. - // this makes it easy compute correct values for closed geometries - - generateUVs(); - - // finally create faces - - generateIndices(); - - } - - function generateSegment( i ) { - - // we use getPointAt to sample evenly distributed points from the given path - - P = path.getPointAt( i / tubularSegments, P ); - - // retrieve corresponding normal and binormal - - const N = frames.normals[ i ]; - const B = frames.binormals[ i ]; - - // generate normals and vertices for the current segment - - for ( let j = 0; j <= radialSegments; j ++ ) { - - const v = j / radialSegments * Math.PI * 2; - - const sin = Math.sin( v ); - const cos = - Math.cos( v ); - - // normal - - normal.x = ( cos * N.x + sin * B.x ); - normal.y = ( cos * N.y + sin * B.y ); - normal.z = ( cos * N.z + sin * B.z ); - normal.normalize(); - - normals.push( normal.x, normal.y, normal.z ); - - // vertex - - vertex.x = P.x + radius * normal.x; - vertex.y = P.y + radius * normal.y; - vertex.z = P.z + radius * normal.z; - - vertices.push( vertex.x, vertex.y, vertex.z ); - - } - - } - - function generateIndices() { - - for ( let j = 1; j <= tubularSegments; j ++ ) { - - for ( let i = 1; i <= radialSegments; i ++ ) { - - const a = ( radialSegments + 1 ) * ( j - 1 ) + ( i - 1 ); - const b = ( radialSegments + 1 ) * j + ( i - 1 ); - const c = ( radialSegments + 1 ) * j + i; - const d = ( radialSegments + 1 ) * ( j - 1 ) + i; - - // faces - - indices.push( a, b, d ); - indices.push( b, c, d ); - - } - - } - - } - - function generateUVs() { - - for ( let i = 0; i <= tubularSegments; i ++ ) { - - for ( let j = 0; j <= radialSegments; j ++ ) { - - uv.x = i / tubularSegments; - uv.y = j / radialSegments; - - uvs.push( uv.x, uv.y ); - - } - - } - - } - - } - - copy( source ) { - - super.copy( source ); - - this.parameters = Object.assign( {}, source.parameters ); - - return this; - - } - - toJSON() { - - const data = super.toJSON(); - - data.path = this.parameters.path.toJSON(); - - return data; - - } - - static fromJSON( data ) { - - // This only works for built-in curves (e.g. CatmullRomCurve3). - // User defined curves or instances of CurvePath will not be deserialized. - return new TubeGeometry( - new Curves[ data.path.type ]().fromJSON( data.path ), - data.tubularSegments, - data.radius, - data.radialSegments, - data.closed - ); - - } - - } - - class WireframeGeometry extends BufferGeometry { - - constructor( geometry = null ) { - - super(); - - this.type = 'WireframeGeometry'; - - this.parameters = { - geometry: geometry - }; - - if ( geometry !== null ) { - - // buffer - - const vertices = []; - const edges = new Set(); - - // helper variables - - const start = new Vector3(); - const end = new Vector3(); - - if ( geometry.index !== null ) { - - // indexed BufferGeometry - - const position = geometry.attributes.position; - const indices = geometry.index; - let groups = geometry.groups; - - if ( groups.length === 0 ) { - - groups = [ { start: 0, count: indices.count, materialIndex: 0 } ]; - - } - - // create a data structure that contains all edges without duplicates - - for ( let o = 0, ol = groups.length; o < ol; ++ o ) { - - const group = groups[ o ]; - - const groupStart = group.start; - const groupCount = group.count; - - for ( let i = groupStart, l = ( groupStart + groupCount ); i < l; i += 3 ) { - - for ( let j = 0; j < 3; j ++ ) { - - const index1 = indices.getX( i + j ); - const index2 = indices.getX( i + ( j + 1 ) % 3 ); - - start.fromBufferAttribute( position, index1 ); - end.fromBufferAttribute( position, index2 ); - - if ( isUniqueEdge( start, end, edges ) === true ) { - - vertices.push( start.x, start.y, start.z ); - vertices.push( end.x, end.y, end.z ); - - } - - } - - } - - } - - } else { - - // non-indexed BufferGeometry - - const position = geometry.attributes.position; - - for ( let i = 0, l = ( position.count / 3 ); i < l; i ++ ) { - - for ( let j = 0; j < 3; j ++ ) { - - // three edges per triangle, an edge is represented as (index1, index2) - // e.g. the first triangle has the following edges: (0,1),(1,2),(2,0) - - const index1 = 3 * i + j; - const index2 = 3 * i + ( ( j + 1 ) % 3 ); - - start.fromBufferAttribute( position, index1 ); - end.fromBufferAttribute( position, index2 ); - - if ( isUniqueEdge( start, end, edges ) === true ) { - - vertices.push( start.x, start.y, start.z ); - vertices.push( end.x, end.y, end.z ); - - } - - } - - } - - } - - // build geometry - - this.setAttribute( 'position', new Float32BufferAttribute( vertices, 3 ) ); - - } - - } - - copy( source ) { - - super.copy( source ); - - this.parameters = Object.assign( {}, source.parameters ); - - return this; - - } - - } - - function isUniqueEdge( start, end, edges ) { - - const hash1 = `${start.x},${start.y},${start.z}-${end.x},${end.y},${end.z}`; - const hash2 = `${end.x},${end.y},${end.z}-${start.x},${start.y},${start.z}`; // coincident edge - - if ( edges.has( hash1 ) === true || edges.has( hash2 ) === true ) { - - return false; - - } else { - - edges.add( hash1 ); - edges.add( hash2 ); - return true; - - } - - } - - var Geometries = /*#__PURE__*/Object.freeze({ - __proto__: null, - BoxGeometry: BoxGeometry, - CapsuleGeometry: CapsuleGeometry, - CircleGeometry: CircleGeometry, - ConeGeometry: ConeGeometry, - CylinderGeometry: CylinderGeometry, - DodecahedronGeometry: DodecahedronGeometry, - EdgesGeometry: EdgesGeometry, - ExtrudeGeometry: ExtrudeGeometry, - IcosahedronGeometry: IcosahedronGeometry, - LatheGeometry: LatheGeometry, - OctahedronGeometry: OctahedronGeometry, - PlaneGeometry: PlaneGeometry, - PolyhedronGeometry: PolyhedronGeometry, - RingGeometry: RingGeometry, - ShapeGeometry: ShapeGeometry, - SphereGeometry: SphereGeometry, - TetrahedronGeometry: TetrahedronGeometry, - TorusGeometry: TorusGeometry, - TorusKnotGeometry: TorusKnotGeometry, - TubeGeometry: TubeGeometry, - WireframeGeometry: WireframeGeometry - }); - - class ShadowMaterial extends Material { - - constructor( parameters ) { - - super(); - - this.isShadowMaterial = true; - - this.type = 'ShadowMaterial'; - - this.color = new Color( 0x000000 ); - this.transparent = true; - - this.fog = true; - - this.setValues( parameters ); - - } - - copy( source ) { - - super.copy( source ); - - this.color.copy( source.color ); - - this.fog = source.fog; - - return this; - - } - - } - - class RawShaderMaterial extends ShaderMaterial { - - constructor( parameters ) { - - super( parameters ); - - this.isRawShaderMaterial = true; - - this.type = 'RawShaderMaterial'; - - } - - } - - class MeshStandardMaterial extends Material { - - constructor( parameters ) { - - super(); - - this.isMeshStandardMaterial = true; - - this.defines = { 'STANDARD': '' }; - - this.type = 'MeshStandardMaterial'; - - this.color = new Color( 0xffffff ); // diffuse - this.roughness = 1.0; - this.metalness = 0.0; - - this.map = null; - - this.lightMap = null; - this.lightMapIntensity = 1.0; - - this.aoMap = null; - this.aoMapIntensity = 1.0; - - this.emissive = new Color( 0x000000 ); - this.emissiveIntensity = 1.0; - this.emissiveMap = null; - - this.bumpMap = null; - this.bumpScale = 1; - - this.normalMap = null; - this.normalMapType = TangentSpaceNormalMap; - this.normalScale = new Vector2( 1, 1 ); - - this.displacementMap = null; - this.displacementScale = 1; - this.displacementBias = 0; - - this.roughnessMap = null; - - this.metalnessMap = null; - - this.alphaMap = null; - - this.envMap = null; - this.envMapIntensity = 1.0; - - this.wireframe = false; - this.wireframeLinewidth = 1; - this.wireframeLinecap = 'round'; - this.wireframeLinejoin = 'round'; - - this.flatShading = false; - - this.fog = true; - - this.setValues( parameters ); - - } - - copy( source ) { - - super.copy( source ); - - this.defines = { 'STANDARD': '' }; - - this.color.copy( source.color ); - this.roughness = source.roughness; - this.metalness = source.metalness; - - this.map = source.map; - - this.lightMap = source.lightMap; - this.lightMapIntensity = source.lightMapIntensity; - - this.aoMap = source.aoMap; - this.aoMapIntensity = source.aoMapIntensity; - - this.emissive.copy( source.emissive ); - this.emissiveMap = source.emissiveMap; - this.emissiveIntensity = source.emissiveIntensity; - - this.bumpMap = source.bumpMap; - this.bumpScale = source.bumpScale; - - this.normalMap = source.normalMap; - this.normalMapType = source.normalMapType; - this.normalScale.copy( source.normalScale ); - - this.displacementMap = source.displacementMap; - this.displacementScale = source.displacementScale; - this.displacementBias = source.displacementBias; - - this.roughnessMap = source.roughnessMap; - - this.metalnessMap = source.metalnessMap; - - this.alphaMap = source.alphaMap; - - this.envMap = source.envMap; - this.envMapIntensity = source.envMapIntensity; - - this.wireframe = source.wireframe; - this.wireframeLinewidth = source.wireframeLinewidth; - this.wireframeLinecap = source.wireframeLinecap; - this.wireframeLinejoin = source.wireframeLinejoin; - - this.flatShading = source.flatShading; - - this.fog = source.fog; - - return this; - - } - - } - - class MeshPhysicalMaterial extends MeshStandardMaterial { - - constructor( parameters ) { - - super(); - - this.isMeshPhysicalMaterial = true; - - this.defines = { - - 'STANDARD': '', - 'PHYSICAL': '' - - }; - - this.type = 'MeshPhysicalMaterial'; - - this.clearcoatMap = null; - this.clearcoatRoughness = 0.0; - this.clearcoatRoughnessMap = null; - this.clearcoatNormalScale = new Vector2( 1, 1 ); - this.clearcoatNormalMap = null; - - this.ior = 1.5; - - Object.defineProperty( this, 'reflectivity', { - get: function () { - - return ( clamp( 2.5 * ( this.ior - 1 ) / ( this.ior + 1 ), 0, 1 ) ); - - }, - set: function ( reflectivity ) { - - this.ior = ( 1 + 0.4 * reflectivity ) / ( 1 - 0.4 * reflectivity ); - - } - } ); - - this.iridescenceMap = null; - this.iridescenceIOR = 1.3; - this.iridescenceThicknessRange = [ 100, 400 ]; - this.iridescenceThicknessMap = null; - - this.sheenColor = new Color( 0x000000 ); - this.sheenColorMap = null; - this.sheenRoughness = 1.0; - this.sheenRoughnessMap = null; - - this.transmissionMap = null; - - this.thickness = 0; - this.thicknessMap = null; - this.attenuationDistance = Infinity; - this.attenuationColor = new Color( 1, 1, 1 ); - - this.specularIntensity = 1.0; - this.specularIntensityMap = null; - this.specularColor = new Color( 1, 1, 1 ); - this.specularColorMap = null; - - this._sheen = 0.0; - this._clearcoat = 0; - this._iridescence = 0; - this._transmission = 0; - - this.setValues( parameters ); - - } - - get sheen() { - - return this._sheen; - - } - - set sheen( value ) { - - if ( this._sheen > 0 !== value > 0 ) { - - this.version ++; - - } - - this._sheen = value; - - } - - get clearcoat() { - - return this._clearcoat; - - } - - set clearcoat( value ) { - - if ( this._clearcoat > 0 !== value > 0 ) { - - this.version ++; - - } - - this._clearcoat = value; - - } - - get iridescence() { - - return this._iridescence; - - } - - set iridescence( value ) { - - if ( this._iridescence > 0 !== value > 0 ) { - - this.version ++; - - } - - this._iridescence = value; - - } - - get transmission() { - - return this._transmission; - - } - - set transmission( value ) { - - if ( this._transmission > 0 !== value > 0 ) { - - this.version ++; - - } - - this._transmission = value; - - } - - copy( source ) { - - super.copy( source ); - - this.defines = { - - 'STANDARD': '', - 'PHYSICAL': '' - - }; - - this.clearcoat = source.clearcoat; - this.clearcoatMap = source.clearcoatMap; - this.clearcoatRoughness = source.clearcoatRoughness; - this.clearcoatRoughnessMap = source.clearcoatRoughnessMap; - this.clearcoatNormalMap = source.clearcoatNormalMap; - this.clearcoatNormalScale.copy( source.clearcoatNormalScale ); - - this.ior = source.ior; - - this.iridescence = source.iridescence; - this.iridescenceMap = source.iridescenceMap; - this.iridescenceIOR = source.iridescenceIOR; - this.iridescenceThicknessRange = [ ...source.iridescenceThicknessRange ]; - this.iridescenceThicknessMap = source.iridescenceThicknessMap; - - this.sheen = source.sheen; - this.sheenColor.copy( source.sheenColor ); - this.sheenColorMap = source.sheenColorMap; - this.sheenRoughness = source.sheenRoughness; - this.sheenRoughnessMap = source.sheenRoughnessMap; - - this.transmission = source.transmission; - this.transmissionMap = source.transmissionMap; - - this.thickness = source.thickness; - this.thicknessMap = source.thicknessMap; - this.attenuationDistance = source.attenuationDistance; - this.attenuationColor.copy( source.attenuationColor ); - - this.specularIntensity = source.specularIntensity; - this.specularIntensityMap = source.specularIntensityMap; - this.specularColor.copy( source.specularColor ); - this.specularColorMap = source.specularColorMap; - - return this; - - } - - } - - class MeshPhongMaterial extends Material { - - constructor( parameters ) { - - super(); - - this.isMeshPhongMaterial = true; - - this.type = 'MeshPhongMaterial'; - - this.color = new Color( 0xffffff ); // diffuse - this.specular = new Color( 0x111111 ); - this.shininess = 30; - - this.map = null; - - this.lightMap = null; - this.lightMapIntensity = 1.0; - - this.aoMap = null; - this.aoMapIntensity = 1.0; - - this.emissive = new Color( 0x000000 ); - this.emissiveIntensity = 1.0; - this.emissiveMap = null; - - this.bumpMap = null; - this.bumpScale = 1; - - this.normalMap = null; - this.normalMapType = TangentSpaceNormalMap; - this.normalScale = new Vector2( 1, 1 ); - - this.displacementMap = null; - this.displacementScale = 1; - this.displacementBias = 0; - - this.specularMap = null; - - this.alphaMap = null; - - this.envMap = null; - this.combine = MultiplyOperation; - this.reflectivity = 1; - this.refractionRatio = 0.98; - - this.wireframe = false; - this.wireframeLinewidth = 1; - this.wireframeLinecap = 'round'; - this.wireframeLinejoin = 'round'; - - this.flatShading = false; - - this.fog = true; - - this.setValues( parameters ); - - } - - copy( source ) { - - super.copy( source ); - - this.color.copy( source.color ); - this.specular.copy( source.specular ); - this.shininess = source.shininess; - - this.map = source.map; - - this.lightMap = source.lightMap; - this.lightMapIntensity = source.lightMapIntensity; - - this.aoMap = source.aoMap; - this.aoMapIntensity = source.aoMapIntensity; - - this.emissive.copy( source.emissive ); - this.emissiveMap = source.emissiveMap; - this.emissiveIntensity = source.emissiveIntensity; - - this.bumpMap = source.bumpMap; - this.bumpScale = source.bumpScale; - - this.normalMap = source.normalMap; - this.normalMapType = source.normalMapType; - this.normalScale.copy( source.normalScale ); - - this.displacementMap = source.displacementMap; - this.displacementScale = source.displacementScale; - this.displacementBias = source.displacementBias; - - this.specularMap = source.specularMap; - - this.alphaMap = source.alphaMap; - - this.envMap = source.envMap; - this.combine = source.combine; - this.reflectivity = source.reflectivity; - this.refractionRatio = source.refractionRatio; - - this.wireframe = source.wireframe; - this.wireframeLinewidth = source.wireframeLinewidth; - this.wireframeLinecap = source.wireframeLinecap; - this.wireframeLinejoin = source.wireframeLinejoin; - - this.flatShading = source.flatShading; - - this.fog = source.fog; - - return this; - - } - - } - - class MeshToonMaterial extends Material { - - constructor( parameters ) { - - super(); - - this.isMeshToonMaterial = true; - - this.defines = { 'TOON': '' }; - - this.type = 'MeshToonMaterial'; - - this.color = new Color( 0xffffff ); - - this.map = null; - this.gradientMap = null; - - this.lightMap = null; - this.lightMapIntensity = 1.0; - - this.aoMap = null; - this.aoMapIntensity = 1.0; - - this.emissive = new Color( 0x000000 ); - this.emissiveIntensity = 1.0; - this.emissiveMap = null; - - this.bumpMap = null; - this.bumpScale = 1; - - this.normalMap = null; - this.normalMapType = TangentSpaceNormalMap; - this.normalScale = new Vector2( 1, 1 ); - - this.displacementMap = null; - this.displacementScale = 1; - this.displacementBias = 0; - - this.alphaMap = null; - - this.wireframe = false; - this.wireframeLinewidth = 1; - this.wireframeLinecap = 'round'; - this.wireframeLinejoin = 'round'; - - this.fog = true; - - this.setValues( parameters ); - - } - - copy( source ) { - - super.copy( source ); - - this.color.copy( source.color ); - - this.map = source.map; - this.gradientMap = source.gradientMap; - - this.lightMap = source.lightMap; - this.lightMapIntensity = source.lightMapIntensity; - - this.aoMap = source.aoMap; - this.aoMapIntensity = source.aoMapIntensity; - - this.emissive.copy( source.emissive ); - this.emissiveMap = source.emissiveMap; - this.emissiveIntensity = source.emissiveIntensity; - - this.bumpMap = source.bumpMap; - this.bumpScale = source.bumpScale; - - this.normalMap = source.normalMap; - this.normalMapType = source.normalMapType; - this.normalScale.copy( source.normalScale ); - - this.displacementMap = source.displacementMap; - this.displacementScale = source.displacementScale; - this.displacementBias = source.displacementBias; - - this.alphaMap = source.alphaMap; - - this.wireframe = source.wireframe; - this.wireframeLinewidth = source.wireframeLinewidth; - this.wireframeLinecap = source.wireframeLinecap; - this.wireframeLinejoin = source.wireframeLinejoin; - - this.fog = source.fog; - - return this; - - } - - } - - class MeshNormalMaterial extends Material { - - constructor( parameters ) { - - super(); - - this.isMeshNormalMaterial = true; - - this.type = 'MeshNormalMaterial'; - - this.bumpMap = null; - this.bumpScale = 1; - - this.normalMap = null; - this.normalMapType = TangentSpaceNormalMap; - this.normalScale = new Vector2( 1, 1 ); - - this.displacementMap = null; - this.displacementScale = 1; - this.displacementBias = 0; - - this.wireframe = false; - this.wireframeLinewidth = 1; - - this.flatShading = false; - - this.setValues( parameters ); - - } - - copy( source ) { - - super.copy( source ); - - this.bumpMap = source.bumpMap; - this.bumpScale = source.bumpScale; - - this.normalMap = source.normalMap; - this.normalMapType = source.normalMapType; - this.normalScale.copy( source.normalScale ); - - this.displacementMap = source.displacementMap; - this.displacementScale = source.displacementScale; - this.displacementBias = source.displacementBias; - - this.wireframe = source.wireframe; - this.wireframeLinewidth = source.wireframeLinewidth; - - this.flatShading = source.flatShading; - - return this; - - } - - } - - class MeshLambertMaterial extends Material { - - constructor( parameters ) { - - super(); - - this.isMeshLambertMaterial = true; - - this.type = 'MeshLambertMaterial'; - - this.color = new Color( 0xffffff ); // diffuse - - this.map = null; - - this.lightMap = null; - this.lightMapIntensity = 1.0; - - this.aoMap = null; - this.aoMapIntensity = 1.0; - - this.emissive = new Color( 0x000000 ); - this.emissiveIntensity = 1.0; - this.emissiveMap = null; - - this.bumpMap = null; - this.bumpScale = 1; - - this.normalMap = null; - this.normalMapType = TangentSpaceNormalMap; - this.normalScale = new Vector2( 1, 1 ); - - this.displacementMap = null; - this.displacementScale = 1; - this.displacementBias = 0; - - this.specularMap = null; - - this.alphaMap = null; - - this.envMap = null; - this.combine = MultiplyOperation; - this.reflectivity = 1; - this.refractionRatio = 0.98; - - this.wireframe = false; - this.wireframeLinewidth = 1; - this.wireframeLinecap = 'round'; - this.wireframeLinejoin = 'round'; - - this.flatShading = false; - - this.fog = true; - - this.setValues( parameters ); - - } - - copy( source ) { - - super.copy( source ); - - this.color.copy( source.color ); - - this.map = source.map; - - this.lightMap = source.lightMap; - this.lightMapIntensity = source.lightMapIntensity; - - this.aoMap = source.aoMap; - this.aoMapIntensity = source.aoMapIntensity; - - this.emissive.copy( source.emissive ); - this.emissiveMap = source.emissiveMap; - this.emissiveIntensity = source.emissiveIntensity; - - this.bumpMap = source.bumpMap; - this.bumpScale = source.bumpScale; - - this.normalMap = source.normalMap; - this.normalMapType = source.normalMapType; - this.normalScale.copy( source.normalScale ); - - this.displacementMap = source.displacementMap; - this.displacementScale = source.displacementScale; - this.displacementBias = source.displacementBias; - - this.specularMap = source.specularMap; - - this.alphaMap = source.alphaMap; - - this.envMap = source.envMap; - this.combine = source.combine; - this.reflectivity = source.reflectivity; - this.refractionRatio = source.refractionRatio; - - this.wireframe = source.wireframe; - this.wireframeLinewidth = source.wireframeLinewidth; - this.wireframeLinecap = source.wireframeLinecap; - this.wireframeLinejoin = source.wireframeLinejoin; - - this.flatShading = source.flatShading; - - this.fog = source.fog; - - return this; - - } - - } - - class MeshMatcapMaterial extends Material { - - constructor( parameters ) { - - super(); - - this.isMeshMatcapMaterial = true; - - this.defines = { 'MATCAP': '' }; - - this.type = 'MeshMatcapMaterial'; - - this.color = new Color( 0xffffff ); // diffuse - - this.matcap = null; - - this.map = null; - - this.bumpMap = null; - this.bumpScale = 1; - - this.normalMap = null; - this.normalMapType = TangentSpaceNormalMap; - this.normalScale = new Vector2( 1, 1 ); - - this.displacementMap = null; - this.displacementScale = 1; - this.displacementBias = 0; - - this.alphaMap = null; - - this.flatShading = false; - - this.fog = true; - - this.setValues( parameters ); - - } - - - copy( source ) { - - super.copy( source ); - - this.defines = { 'MATCAP': '' }; - - this.color.copy( source.color ); - - this.matcap = source.matcap; - - this.map = source.map; - - this.bumpMap = source.bumpMap; - this.bumpScale = source.bumpScale; - - this.normalMap = source.normalMap; - this.normalMapType = source.normalMapType; - this.normalScale.copy( source.normalScale ); - - this.displacementMap = source.displacementMap; - this.displacementScale = source.displacementScale; - this.displacementBias = source.displacementBias; - - this.alphaMap = source.alphaMap; - - this.flatShading = source.flatShading; - - this.fog = source.fog; - - return this; - - } - - } - - class LineDashedMaterial extends LineBasicMaterial { - - constructor( parameters ) { - - super(); - - this.isLineDashedMaterial = true; - - this.type = 'LineDashedMaterial'; - - this.scale = 1; - this.dashSize = 3; - this.gapSize = 1; - - this.setValues( parameters ); - - } - - copy( source ) { - - super.copy( source ); - - this.scale = source.scale; - this.dashSize = source.dashSize; - this.gapSize = source.gapSize; - - return this; - - } - - } - - // same as Array.prototype.slice, but also works on typed arrays - function arraySlice( array, from, to ) { - - if ( isTypedArray( array ) ) { - - // in ios9 array.subarray(from, undefined) will return empty array - // but array.subarray(from) or array.subarray(from, len) is correct - return new array.constructor( array.subarray( from, to !== undefined ? to : array.length ) ); - - } - - return array.slice( from, to ); - - } - - // converts an array to a specific type - function convertArray( array, type, forceClone ) { - - if ( ! array || // let 'undefined' and 'null' pass - ! forceClone && array.constructor === type ) return array; - - if ( typeof type.BYTES_PER_ELEMENT === 'number' ) { - - return new type( array ); // create typed array - - } - - return Array.prototype.slice.call( array ); // create Array - - } - - function isTypedArray( object ) { - - return ArrayBuffer.isView( object ) && - ! ( object instanceof DataView ); - - } - - // returns an array by which times and values can be sorted - function getKeyframeOrder( times ) { - - function compareTime( i, j ) { - - return times[ i ] - times[ j ]; - - } - - const n = times.length; - const result = new Array( n ); - for ( let i = 0; i !== n; ++ i ) result[ i ] = i; - - result.sort( compareTime ); - - return result; - - } - - // uses the array previously returned by 'getKeyframeOrder' to sort data - function sortedArray( values, stride, order ) { - - const nValues = values.length; - const result = new values.constructor( nValues ); - - for ( let i = 0, dstOffset = 0; dstOffset !== nValues; ++ i ) { - - const srcOffset = order[ i ] * stride; - - for ( let j = 0; j !== stride; ++ j ) { - - result[ dstOffset ++ ] = values[ srcOffset + j ]; - - } - - } - - return result; - - } - - // function for parsing AOS keyframe formats - function flattenJSON( jsonKeys, times, values, valuePropertyName ) { - - let i = 1, key = jsonKeys[ 0 ]; - - while ( key !== undefined && key[ valuePropertyName ] === undefined ) { - - key = jsonKeys[ i ++ ]; - - } - - if ( key === undefined ) return; // no data - - let value = key[ valuePropertyName ]; - if ( value === undefined ) return; // no data - - if ( Array.isArray( value ) ) { - - do { - - value = key[ valuePropertyName ]; - - if ( value !== undefined ) { - - times.push( key.time ); - values.push.apply( values, value ); // push all elements - - } - - key = jsonKeys[ i ++ ]; - - } while ( key !== undefined ); - - } else if ( value.toArray !== undefined ) { - - // ...assume THREE.Math-ish - - do { - - value = key[ valuePropertyName ]; - - if ( value !== undefined ) { - - times.push( key.time ); - value.toArray( values, values.length ); - - } - - key = jsonKeys[ i ++ ]; - - } while ( key !== undefined ); - - } else { - - // otherwise push as-is - - do { - - value = key[ valuePropertyName ]; - - if ( value !== undefined ) { - - times.push( key.time ); - values.push( value ); - - } - - key = jsonKeys[ i ++ ]; - - } while ( key !== undefined ); - - } - - } - - function subclip( sourceClip, name, startFrame, endFrame, fps = 30 ) { - - const clip = sourceClip.clone(); - - clip.name = name; - - const tracks = []; - - for ( let i = 0; i < clip.tracks.length; ++ i ) { - - const track = clip.tracks[ i ]; - const valueSize = track.getValueSize(); - - const times = []; - const values = []; - - for ( let j = 0; j < track.times.length; ++ j ) { - - const frame = track.times[ j ] * fps; - - if ( frame < startFrame || frame >= endFrame ) continue; - - times.push( track.times[ j ] ); - - for ( let k = 0; k < valueSize; ++ k ) { - - values.push( track.values[ j * valueSize + k ] ); - - } - - } - - if ( times.length === 0 ) continue; - - track.times = convertArray( times, track.times.constructor ); - track.values = convertArray( values, track.values.constructor ); - - tracks.push( track ); - - } - - clip.tracks = tracks; - - // find minimum .times value across all tracks in the trimmed clip - - let minStartTime = Infinity; - - for ( let i = 0; i < clip.tracks.length; ++ i ) { - - if ( minStartTime > clip.tracks[ i ].times[ 0 ] ) { - - minStartTime = clip.tracks[ i ].times[ 0 ]; - - } - - } - - // shift all tracks such that clip begins at t=0 - - for ( let i = 0; i < clip.tracks.length; ++ i ) { - - clip.tracks[ i ].shift( - 1 * minStartTime ); - - } - - clip.resetDuration(); - - return clip; - - } - - function makeClipAdditive( targetClip, referenceFrame = 0, referenceClip = targetClip, fps = 30 ) { - - if ( fps <= 0 ) fps = 30; - - const numTracks = referenceClip.tracks.length; - const referenceTime = referenceFrame / fps; - - // Make each track's values relative to the values at the reference frame - for ( let i = 0; i < numTracks; ++ i ) { - - const referenceTrack = referenceClip.tracks[ i ]; - const referenceTrackType = referenceTrack.ValueTypeName; - - // Skip this track if it's non-numeric - if ( referenceTrackType === 'bool' || referenceTrackType === 'string' ) continue; - - // Find the track in the target clip whose name and type matches the reference track - const targetTrack = targetClip.tracks.find( function ( track ) { - - return track.name === referenceTrack.name - && track.ValueTypeName === referenceTrackType; - - } ); - - if ( targetTrack === undefined ) continue; - - let referenceOffset = 0; - const referenceValueSize = referenceTrack.getValueSize(); - - if ( referenceTrack.createInterpolant.isInterpolantFactoryMethodGLTFCubicSpline ) { - - referenceOffset = referenceValueSize / 3; - - } - - let targetOffset = 0; - const targetValueSize = targetTrack.getValueSize(); - - if ( targetTrack.createInterpolant.isInterpolantFactoryMethodGLTFCubicSpline ) { - - targetOffset = targetValueSize / 3; - - } - - const lastIndex = referenceTrack.times.length - 1; - let referenceValue; - - // Find the value to subtract out of the track - if ( referenceTime <= referenceTrack.times[ 0 ] ) { - - // Reference frame is earlier than the first keyframe, so just use the first keyframe - const startIndex = referenceOffset; - const endIndex = referenceValueSize - referenceOffset; - referenceValue = arraySlice( referenceTrack.values, startIndex, endIndex ); - - } else if ( referenceTime >= referenceTrack.times[ lastIndex ] ) { - - // Reference frame is after the last keyframe, so just use the last keyframe - const startIndex = lastIndex * referenceValueSize + referenceOffset; - const endIndex = startIndex + referenceValueSize - referenceOffset; - referenceValue = arraySlice( referenceTrack.values, startIndex, endIndex ); - - } else { - - // Interpolate to the reference value - const interpolant = referenceTrack.createInterpolant(); - const startIndex = referenceOffset; - const endIndex = referenceValueSize - referenceOffset; - interpolant.evaluate( referenceTime ); - referenceValue = arraySlice( interpolant.resultBuffer, startIndex, endIndex ); - - } - - // Conjugate the quaternion - if ( referenceTrackType === 'quaternion' ) { - - const referenceQuat = new Quaternion().fromArray( referenceValue ).normalize().conjugate(); - referenceQuat.toArray( referenceValue ); - - } - - // Subtract the reference value from all of the track values - - const numTimes = targetTrack.times.length; - for ( let j = 0; j < numTimes; ++ j ) { - - const valueStart = j * targetValueSize + targetOffset; - - if ( referenceTrackType === 'quaternion' ) { - - // Multiply the conjugate for quaternion track types - Quaternion.multiplyQuaternionsFlat( - targetTrack.values, - valueStart, - referenceValue, - 0, - targetTrack.values, - valueStart - ); - - } else { - - const valueEnd = targetValueSize - targetOffset * 2; - - // Subtract each value for all other numeric track types - for ( let k = 0; k < valueEnd; ++ k ) { - - targetTrack.values[ valueStart + k ] -= referenceValue[ k ]; - - } - - } - - } - - } - - targetClip.blendMode = AdditiveAnimationBlendMode; - - return targetClip; - - } - - const AnimationUtils = { - arraySlice: arraySlice, - convertArray: convertArray, - isTypedArray: isTypedArray, - getKeyframeOrder: getKeyframeOrder, - sortedArray: sortedArray, - flattenJSON: flattenJSON, - subclip: subclip, - makeClipAdditive: makeClipAdditive - }; - - /** - * Abstract base class of interpolants over parametric samples. - * - * The parameter domain is one dimensional, typically the time or a path - * along a curve defined by the data. - * - * The sample values can have any dimensionality and derived classes may - * apply special interpretations to the data. - * - * This class provides the interval seek in a Template Method, deferring - * the actual interpolation to derived classes. - * - * Time complexity is O(1) for linear access crossing at most two points - * and O(log N) for random access, where N is the number of positions. - * - * References: - * - * http://www.oodesign.com/template-method-pattern.html - * - */ - - class Interpolant { - - constructor( parameterPositions, sampleValues, sampleSize, resultBuffer ) { - - this.parameterPositions = parameterPositions; - this._cachedIndex = 0; - - this.resultBuffer = resultBuffer !== undefined ? - resultBuffer : new sampleValues.constructor( sampleSize ); - this.sampleValues = sampleValues; - this.valueSize = sampleSize; - - this.settings = null; - this.DefaultSettings_ = {}; - - } - - evaluate( t ) { - - const pp = this.parameterPositions; - let i1 = this._cachedIndex, - t1 = pp[ i1 ], - t0 = pp[ i1 - 1 ]; - - validate_interval: { - - seek: { - - let right; - - linear_scan: { - - //- See http://jsperf.com/comparison-to-undefined/3 - //- slower code: - //- - //- if ( t >= t1 || t1 === undefined ) { - forward_scan: if ( ! ( t < t1 ) ) { - - for ( let giveUpAt = i1 + 2; ; ) { - - if ( t1 === undefined ) { - - if ( t < t0 ) break forward_scan; - - // after end - - i1 = pp.length; - this._cachedIndex = i1; - return this.copySampleValue_( i1 - 1 ); - - } - - if ( i1 === giveUpAt ) break; // this loop - - t0 = t1; - t1 = pp[ ++ i1 ]; - - if ( t < t1 ) { - - // we have arrived at the sought interval - break seek; - - } - - } - - // prepare binary search on the right side of the index - right = pp.length; - break linear_scan; - - } - - //- slower code: - //- if ( t < t0 || t0 === undefined ) { - if ( ! ( t >= t0 ) ) { - - // looping? - - const t1global = pp[ 1 ]; - - if ( t < t1global ) { - - i1 = 2; // + 1, using the scan for the details - t0 = t1global; - - } - - // linear reverse scan - - for ( let giveUpAt = i1 - 2; ; ) { - - if ( t0 === undefined ) { - - // before start - - this._cachedIndex = 0; - return this.copySampleValue_( 0 ); - - } - - if ( i1 === giveUpAt ) break; // this loop - - t1 = t0; - t0 = pp[ -- i1 - 1 ]; - - if ( t >= t0 ) { - - // we have arrived at the sought interval - break seek; - - } - - } - - // prepare binary search on the left side of the index - right = i1; - i1 = 0; - break linear_scan; - - } - - // the interval is valid - - break validate_interval; - - } // linear scan - - // binary search - - while ( i1 < right ) { - - const mid = ( i1 + right ) >>> 1; - - if ( t < pp[ mid ] ) { - - right = mid; - - } else { - - i1 = mid + 1; - - } - - } - - t1 = pp[ i1 ]; - t0 = pp[ i1 - 1 ]; - - // check boundary cases, again - - if ( t0 === undefined ) { - - this._cachedIndex = 0; - return this.copySampleValue_( 0 ); - - } - - if ( t1 === undefined ) { - - i1 = pp.length; - this._cachedIndex = i1; - return this.copySampleValue_( i1 - 1 ); - - } - - } // seek - - this._cachedIndex = i1; - - this.intervalChanged_( i1, t0, t1 ); - - } // validate_interval - - return this.interpolate_( i1, t0, t, t1 ); - - } - - getSettings_() { - - return this.settings || this.DefaultSettings_; - - } - - copySampleValue_( index ) { - - // copies a sample value to the result buffer - - const result = this.resultBuffer, - values = this.sampleValues, - stride = this.valueSize, - offset = index * stride; - - for ( let i = 0; i !== stride; ++ i ) { - - result[ i ] = values[ offset + i ]; - - } - - return result; - - } - - // Template methods for derived classes: - - interpolate_( /* i1, t0, t, t1 */ ) { - - throw new Error( 'call to abstract method' ); - // implementations shall return this.resultBuffer - - } - - intervalChanged_( /* i1, t0, t1 */ ) { - - // empty - - } - - } - - /** - * Fast and simple cubic spline interpolant. - * - * It was derived from a Hermitian construction setting the first derivative - * at each sample position to the linear slope between neighboring positions - * over their parameter interval. - */ - - class CubicInterpolant extends Interpolant { - - constructor( parameterPositions, sampleValues, sampleSize, resultBuffer ) { - - super( parameterPositions, sampleValues, sampleSize, resultBuffer ); - - this._weightPrev = - 0; - this._offsetPrev = - 0; - this._weightNext = - 0; - this._offsetNext = - 0; - - this.DefaultSettings_ = { - - endingStart: ZeroCurvatureEnding, - endingEnd: ZeroCurvatureEnding - - }; - - } - - intervalChanged_( i1, t0, t1 ) { - - const pp = this.parameterPositions; - let iPrev = i1 - 2, - iNext = i1 + 1, - - tPrev = pp[ iPrev ], - tNext = pp[ iNext ]; - - if ( tPrev === undefined ) { - - switch ( this.getSettings_().endingStart ) { - - case ZeroSlopeEnding: - - // f'(t0) = 0 - iPrev = i1; - tPrev = 2 * t0 - t1; - - break; - - case WrapAroundEnding: - - // use the other end of the curve - iPrev = pp.length - 2; - tPrev = t0 + pp[ iPrev ] - pp[ iPrev + 1 ]; - - break; - - default: // ZeroCurvatureEnding - - // f''(t0) = 0 a.k.a. Natural Spline - iPrev = i1; - tPrev = t1; - - } - - } - - if ( tNext === undefined ) { - - switch ( this.getSettings_().endingEnd ) { - - case ZeroSlopeEnding: - - // f'(tN) = 0 - iNext = i1; - tNext = 2 * t1 - t0; - - break; - - case WrapAroundEnding: - - // use the other end of the curve - iNext = 1; - tNext = t1 + pp[ 1 ] - pp[ 0 ]; - - break; - - default: // ZeroCurvatureEnding - - // f''(tN) = 0, a.k.a. Natural Spline - iNext = i1 - 1; - tNext = t0; - - } - - } - - const halfDt = ( t1 - t0 ) * 0.5, - stride = this.valueSize; - - this._weightPrev = halfDt / ( t0 - tPrev ); - this._weightNext = halfDt / ( tNext - t1 ); - this._offsetPrev = iPrev * stride; - this._offsetNext = iNext * stride; - - } - - interpolate_( i1, t0, t, t1 ) { - - const result = this.resultBuffer, - values = this.sampleValues, - stride = this.valueSize, - - o1 = i1 * stride, o0 = o1 - stride, - oP = this._offsetPrev, oN = this._offsetNext, - wP = this._weightPrev, wN = this._weightNext, - - p = ( t - t0 ) / ( t1 - t0 ), - pp = p * p, - ppp = pp * p; - - // evaluate polynomials - - const sP = - wP * ppp + 2 * wP * pp - wP * p; - const s0 = ( 1 + wP ) * ppp + ( - 1.5 - 2 * wP ) * pp + ( - 0.5 + wP ) * p + 1; - const s1 = ( - 1 - wN ) * ppp + ( 1.5 + wN ) * pp + 0.5 * p; - const sN = wN * ppp - wN * pp; - - // combine data linearly - - for ( let i = 0; i !== stride; ++ i ) { - - result[ i ] = - sP * values[ oP + i ] + - s0 * values[ o0 + i ] + - s1 * values[ o1 + i ] + - sN * values[ oN + i ]; - - } - - return result; - - } - - } - - class LinearInterpolant extends Interpolant { - - constructor( parameterPositions, sampleValues, sampleSize, resultBuffer ) { - - super( parameterPositions, sampleValues, sampleSize, resultBuffer ); - - } - - interpolate_( i1, t0, t, t1 ) { - - const result = this.resultBuffer, - values = this.sampleValues, - stride = this.valueSize, - - offset1 = i1 * stride, - offset0 = offset1 - stride, - - weight1 = ( t - t0 ) / ( t1 - t0 ), - weight0 = 1 - weight1; - - for ( let i = 0; i !== stride; ++ i ) { - - result[ i ] = - values[ offset0 + i ] * weight0 + - values[ offset1 + i ] * weight1; - - } - - return result; - - } - - } - - /** - * - * Interpolant that evaluates to the sample value at the position preceding - * the parameter. - */ - - class DiscreteInterpolant extends Interpolant { - - constructor( parameterPositions, sampleValues, sampleSize, resultBuffer ) { - - super( parameterPositions, sampleValues, sampleSize, resultBuffer ); - - } - - interpolate_( i1 /*, t0, t, t1 */ ) { - - return this.copySampleValue_( i1 - 1 ); - - } - - } - - class KeyframeTrack { - - constructor( name, times, values, interpolation ) { - - if ( name === undefined ) throw new Error( 'THREE.KeyframeTrack: track name is undefined' ); - if ( times === undefined || times.length === 0 ) throw new Error( 'THREE.KeyframeTrack: no keyframes in track named ' + name ); - - this.name = name; - - this.times = convertArray( times, this.TimeBufferType ); - this.values = convertArray( values, this.ValueBufferType ); - - this.setInterpolation( interpolation || this.DefaultInterpolation ); - - } - - // Serialization (in static context, because of constructor invocation - // and automatic invocation of .toJSON): - - static toJSON( track ) { - - const trackType = track.constructor; - - let json; - - // derived classes can define a static toJSON method - if ( trackType.toJSON !== this.toJSON ) { - - json = trackType.toJSON( track ); - - } else { - - // by default, we assume the data can be serialized as-is - json = { - - 'name': track.name, - 'times': convertArray( track.times, Array ), - 'values': convertArray( track.values, Array ) - - }; - - const interpolation = track.getInterpolation(); - - if ( interpolation !== track.DefaultInterpolation ) { - - json.interpolation = interpolation; - - } - - } - - json.type = track.ValueTypeName; // mandatory - - return json; - - } - - InterpolantFactoryMethodDiscrete( result ) { - - return new DiscreteInterpolant( this.times, this.values, this.getValueSize(), result ); - - } - - InterpolantFactoryMethodLinear( result ) { - - return new LinearInterpolant( this.times, this.values, this.getValueSize(), result ); - - } - - InterpolantFactoryMethodSmooth( result ) { - - return new CubicInterpolant( this.times, this.values, this.getValueSize(), result ); - - } - - setInterpolation( interpolation ) { - - let factoryMethod; - - switch ( interpolation ) { - - case InterpolateDiscrete: - - factoryMethod = this.InterpolantFactoryMethodDiscrete; - - break; - - case InterpolateLinear: - - factoryMethod = this.InterpolantFactoryMethodLinear; - - break; - - case InterpolateSmooth: - - factoryMethod = this.InterpolantFactoryMethodSmooth; - - break; - - } - - if ( factoryMethod === undefined ) { - - const message = 'unsupported interpolation for ' + - this.ValueTypeName + ' keyframe track named ' + this.name; - - if ( this.createInterpolant === undefined ) { - - // fall back to default, unless the default itself is messed up - if ( interpolation !== this.DefaultInterpolation ) { - - this.setInterpolation( this.DefaultInterpolation ); - - } else { - - throw new Error( message ); // fatal, in this case - - } - - } - - console.warn( 'THREE.KeyframeTrack:', message ); - return this; - - } - - this.createInterpolant = factoryMethod; - - return this; - - } - - getInterpolation() { - - switch ( this.createInterpolant ) { - - case this.InterpolantFactoryMethodDiscrete: - - return InterpolateDiscrete; - - case this.InterpolantFactoryMethodLinear: - - return InterpolateLinear; - - case this.InterpolantFactoryMethodSmooth: - - return InterpolateSmooth; - - } - - } - - getValueSize() { - - return this.values.length / this.times.length; - - } - - // move all keyframes either forwards or backwards in time - shift( timeOffset ) { - - if ( timeOffset !== 0.0 ) { - - const times = this.times; - - for ( let i = 0, n = times.length; i !== n; ++ i ) { - - times[ i ] += timeOffset; - - } - - } - - return this; - - } - - // scale all keyframe times by a factor (useful for frame <-> seconds conversions) - scale( timeScale ) { - - if ( timeScale !== 1.0 ) { - - const times = this.times; - - for ( let i = 0, n = times.length; i !== n; ++ i ) { - - times[ i ] *= timeScale; - - } - - } - - return this; - - } - - // removes keyframes before and after animation without changing any values within the range [startTime, endTime]. - // IMPORTANT: We do not shift around keys to the start of the track time, because for interpolated keys this will change their values - trim( startTime, endTime ) { - - const times = this.times, - nKeys = times.length; - - let from = 0, - to = nKeys - 1; - - while ( from !== nKeys && times[ from ] < startTime ) { - - ++ from; - - } - - while ( to !== - 1 && times[ to ] > endTime ) { - - -- to; - - } - - ++ to; // inclusive -> exclusive bound - - if ( from !== 0 || to !== nKeys ) { - - // empty tracks are forbidden, so keep at least one keyframe - if ( from >= to ) { - - to = Math.max( to, 1 ); - from = to - 1; - - } - - const stride = this.getValueSize(); - this.times = arraySlice( times, from, to ); - this.values = arraySlice( this.values, from * stride, to * stride ); - - } - - return this; - - } - - // ensure we do not get a GarbageInGarbageOut situation, make sure tracks are at least minimally viable - validate() { - - let valid = true; - - const valueSize = this.getValueSize(); - if ( valueSize - Math.floor( valueSize ) !== 0 ) { - - console.error( 'THREE.KeyframeTrack: Invalid value size in track.', this ); - valid = false; - - } - - const times = this.times, - values = this.values, - - nKeys = times.length; - - if ( nKeys === 0 ) { - - console.error( 'THREE.KeyframeTrack: Track is empty.', this ); - valid = false; - - } - - let prevTime = null; - - for ( let i = 0; i !== nKeys; i ++ ) { - - const currTime = times[ i ]; - - if ( typeof currTime === 'number' && isNaN( currTime ) ) { - - console.error( 'THREE.KeyframeTrack: Time is not a valid number.', this, i, currTime ); - valid = false; - break; - - } - - if ( prevTime !== null && prevTime > currTime ) { - - console.error( 'THREE.KeyframeTrack: Out of order keys.', this, i, currTime, prevTime ); - valid = false; - break; - - } - - prevTime = currTime; - - } - - if ( values !== undefined ) { - - if ( isTypedArray( values ) ) { - - for ( let i = 0, n = values.length; i !== n; ++ i ) { - - const value = values[ i ]; - - if ( isNaN( value ) ) { - - console.error( 'THREE.KeyframeTrack: Value is not a valid number.', this, i, value ); - valid = false; - break; - - } - - } - - } - - } - - return valid; - - } - - // removes equivalent sequential keys as common in morph target sequences - // (0,0,0,0,1,1,1,0,0,0,0,0,0,0) --> (0,0,1,1,0,0) - optimize() { - - // times or values may be shared with other tracks, so overwriting is unsafe - const times = arraySlice( this.times ), - values = arraySlice( this.values ), - stride = this.getValueSize(), - - smoothInterpolation = this.getInterpolation() === InterpolateSmooth, - - lastIndex = times.length - 1; - - let writeIndex = 1; - - for ( let i = 1; i < lastIndex; ++ i ) { - - let keep = false; - - const time = times[ i ]; - const timeNext = times[ i + 1 ]; - - // remove adjacent keyframes scheduled at the same time - - if ( time !== timeNext && ( i !== 1 || time !== times[ 0 ] ) ) { - - if ( ! smoothInterpolation ) { - - // remove unnecessary keyframes same as their neighbors - - const offset = i * stride, - offsetP = offset - stride, - offsetN = offset + stride; - - for ( let j = 0; j !== stride; ++ j ) { - - const value = values[ offset + j ]; - - if ( value !== values[ offsetP + j ] || - value !== values[ offsetN + j ] ) { - - keep = true; - break; - - } - - } - - } else { - - keep = true; - - } - - } - - // in-place compaction - - if ( keep ) { - - if ( i !== writeIndex ) { - - times[ writeIndex ] = times[ i ]; - - const readOffset = i * stride, - writeOffset = writeIndex * stride; - - for ( let j = 0; j !== stride; ++ j ) { - - values[ writeOffset + j ] = values[ readOffset + j ]; - - } - - } - - ++ writeIndex; - - } - - } - - // flush last keyframe (compaction looks ahead) - - if ( lastIndex > 0 ) { - - times[ writeIndex ] = times[ lastIndex ]; - - for ( let readOffset = lastIndex * stride, writeOffset = writeIndex * stride, j = 0; j !== stride; ++ j ) { - - values[ writeOffset + j ] = values[ readOffset + j ]; - - } - - ++ writeIndex; - - } - - if ( writeIndex !== times.length ) { - - this.times = arraySlice( times, 0, writeIndex ); - this.values = arraySlice( values, 0, writeIndex * stride ); - - } else { - - this.times = times; - this.values = values; - - } - - return this; - - } - - clone() { - - const times = arraySlice( this.times, 0 ); - const values = arraySlice( this.values, 0 ); - - const TypedKeyframeTrack = this.constructor; - const track = new TypedKeyframeTrack( this.name, times, values ); - - // Interpolant argument to constructor is not saved, so copy the factory method directly. - track.createInterpolant = this.createInterpolant; - - return track; - - } - - } - - KeyframeTrack.prototype.TimeBufferType = Float32Array; - KeyframeTrack.prototype.ValueBufferType = Float32Array; - KeyframeTrack.prototype.DefaultInterpolation = InterpolateLinear; - - /** - * A Track of Boolean keyframe values. - */ - class BooleanKeyframeTrack extends KeyframeTrack {} - - BooleanKeyframeTrack.prototype.ValueTypeName = 'bool'; - BooleanKeyframeTrack.prototype.ValueBufferType = Array; - BooleanKeyframeTrack.prototype.DefaultInterpolation = InterpolateDiscrete; - BooleanKeyframeTrack.prototype.InterpolantFactoryMethodLinear = undefined; - BooleanKeyframeTrack.prototype.InterpolantFactoryMethodSmooth = undefined; - - /** - * A Track of keyframe values that represent color. - */ - class ColorKeyframeTrack extends KeyframeTrack {} - - ColorKeyframeTrack.prototype.ValueTypeName = 'color'; - - /** - * A Track of numeric keyframe values. - */ - class NumberKeyframeTrack extends KeyframeTrack {} - - NumberKeyframeTrack.prototype.ValueTypeName = 'number'; - - /** - * Spherical linear unit quaternion interpolant. - */ - - class QuaternionLinearInterpolant extends Interpolant { - - constructor( parameterPositions, sampleValues, sampleSize, resultBuffer ) { - - super( parameterPositions, sampleValues, sampleSize, resultBuffer ); - - } - - interpolate_( i1, t0, t, t1 ) { - - const result = this.resultBuffer, - values = this.sampleValues, - stride = this.valueSize, - - alpha = ( t - t0 ) / ( t1 - t0 ); - - let offset = i1 * stride; - - for ( let end = offset + stride; offset !== end; offset += 4 ) { - - Quaternion.slerpFlat( result, 0, values, offset - stride, values, offset, alpha ); - - } - - return result; - - } - - } - - /** - * A Track of quaternion keyframe values. - */ - class QuaternionKeyframeTrack extends KeyframeTrack { - - InterpolantFactoryMethodLinear( result ) { - - return new QuaternionLinearInterpolant( this.times, this.values, this.getValueSize(), result ); - - } - - } - - QuaternionKeyframeTrack.prototype.ValueTypeName = 'quaternion'; - // ValueBufferType is inherited - QuaternionKeyframeTrack.prototype.DefaultInterpolation = InterpolateLinear; - QuaternionKeyframeTrack.prototype.InterpolantFactoryMethodSmooth = undefined; - - /** - * A Track that interpolates Strings - */ - class StringKeyframeTrack extends KeyframeTrack {} - - StringKeyframeTrack.prototype.ValueTypeName = 'string'; - StringKeyframeTrack.prototype.ValueBufferType = Array; - StringKeyframeTrack.prototype.DefaultInterpolation = InterpolateDiscrete; - StringKeyframeTrack.prototype.InterpolantFactoryMethodLinear = undefined; - StringKeyframeTrack.prototype.InterpolantFactoryMethodSmooth = undefined; - - /** - * A Track of vectored keyframe values. - */ - class VectorKeyframeTrack extends KeyframeTrack {} - - VectorKeyframeTrack.prototype.ValueTypeName = 'vector'; - - class AnimationClip { - - constructor( name, duration = - 1, tracks, blendMode = NormalAnimationBlendMode ) { - - this.name = name; - this.tracks = tracks; - this.duration = duration; - this.blendMode = blendMode; - - this.uuid = generateUUID(); - - // this means it should figure out its duration by scanning the tracks - if ( this.duration < 0 ) { - - this.resetDuration(); - - } - - } - - - static parse( json ) { - - const tracks = [], - jsonTracks = json.tracks, - frameTime = 1.0 / ( json.fps || 1.0 ); - - for ( let i = 0, n = jsonTracks.length; i !== n; ++ i ) { - - tracks.push( parseKeyframeTrack( jsonTracks[ i ] ).scale( frameTime ) ); - - } - - const clip = new this( json.name, json.duration, tracks, json.blendMode ); - clip.uuid = json.uuid; - - return clip; - - } - - static toJSON( clip ) { - - const tracks = [], - clipTracks = clip.tracks; - - const json = { - - 'name': clip.name, - 'duration': clip.duration, - 'tracks': tracks, - 'uuid': clip.uuid, - 'blendMode': clip.blendMode - - }; - - for ( let i = 0, n = clipTracks.length; i !== n; ++ i ) { - - tracks.push( KeyframeTrack.toJSON( clipTracks[ i ] ) ); - - } - - return json; - - } - - static CreateFromMorphTargetSequence( name, morphTargetSequence, fps, noLoop ) { - - const numMorphTargets = morphTargetSequence.length; - const tracks = []; - - for ( let i = 0; i < numMorphTargets; i ++ ) { - - let times = []; - let values = []; - - times.push( - ( i + numMorphTargets - 1 ) % numMorphTargets, - i, - ( i + 1 ) % numMorphTargets ); - - values.push( 0, 1, 0 ); - - const order = getKeyframeOrder( times ); - times = sortedArray( times, 1, order ); - values = sortedArray( values, 1, order ); - - // if there is a key at the first frame, duplicate it as the - // last frame as well for perfect loop. - if ( ! noLoop && times[ 0 ] === 0 ) { - - times.push( numMorphTargets ); - values.push( values[ 0 ] ); - - } - - tracks.push( - new NumberKeyframeTrack( - '.morphTargetInfluences[' + morphTargetSequence[ i ].name + ']', - times, values - ).scale( 1.0 / fps ) ); - - } - - return new this( name, - 1, tracks ); - - } - - static findByName( objectOrClipArray, name ) { - - let clipArray = objectOrClipArray; - - if ( ! Array.isArray( objectOrClipArray ) ) { - - const o = objectOrClipArray; - clipArray = o.geometry && o.geometry.animations || o.animations; - - } - - for ( let i = 0; i < clipArray.length; i ++ ) { - - if ( clipArray[ i ].name === name ) { - - return clipArray[ i ]; - - } - - } - - return null; - - } - - static CreateClipsFromMorphTargetSequences( morphTargets, fps, noLoop ) { - - const animationToMorphTargets = {}; - - // tested with https://regex101.com/ on trick sequences - // such flamingo_flyA_003, flamingo_run1_003, crdeath0059 - const pattern = /^([\w-]*?)([\d]+)$/; - - // sort morph target names into animation groups based - // patterns like Walk_001, Walk_002, Run_001, Run_002 - for ( let i = 0, il = morphTargets.length; i < il; i ++ ) { - - const morphTarget = morphTargets[ i ]; - const parts = morphTarget.name.match( pattern ); - - if ( parts && parts.length > 1 ) { - - const name = parts[ 1 ]; - - let animationMorphTargets = animationToMorphTargets[ name ]; - - if ( ! animationMorphTargets ) { - - animationToMorphTargets[ name ] = animationMorphTargets = []; - - } - - animationMorphTargets.push( morphTarget ); - - } - - } - - const clips = []; - - for ( const name in animationToMorphTargets ) { - - clips.push( this.CreateFromMorphTargetSequence( name, animationToMorphTargets[ name ], fps, noLoop ) ); - - } - - return clips; - - } - - // parse the animation.hierarchy format - static parseAnimation( animation, bones ) { - - if ( ! animation ) { - - console.error( 'THREE.AnimationClip: No animation in JSONLoader data.' ); - return null; - - } - - const addNonemptyTrack = function ( trackType, trackName, animationKeys, propertyName, destTracks ) { - - // only return track if there are actually keys. - if ( animationKeys.length !== 0 ) { - - const times = []; - const values = []; - - flattenJSON( animationKeys, times, values, propertyName ); - - // empty keys are filtered out, so check again - if ( times.length !== 0 ) { - - destTracks.push( new trackType( trackName, times, values ) ); - - } - - } - - }; - - const tracks = []; - - const clipName = animation.name || 'default'; - const fps = animation.fps || 30; - const blendMode = animation.blendMode; - - // automatic length determination in AnimationClip. - let duration = animation.length || - 1; - - const hierarchyTracks = animation.hierarchy || []; - - for ( let h = 0; h < hierarchyTracks.length; h ++ ) { - - const animationKeys = hierarchyTracks[ h ].keys; - - // skip empty tracks - if ( ! animationKeys || animationKeys.length === 0 ) continue; - - // process morph targets - if ( animationKeys[ 0 ].morphTargets ) { - - // figure out all morph targets used in this track - const morphTargetNames = {}; - - let k; - - for ( k = 0; k < animationKeys.length; k ++ ) { - - if ( animationKeys[ k ].morphTargets ) { - - for ( let m = 0; m < animationKeys[ k ].morphTargets.length; m ++ ) { - - morphTargetNames[ animationKeys[ k ].morphTargets[ m ] ] = - 1; - - } - - } - - } - - // create a track for each morph target with all zero - // morphTargetInfluences except for the keys in which - // the morphTarget is named. - for ( const morphTargetName in morphTargetNames ) { - - const times = []; - const values = []; - - for ( let m = 0; m !== animationKeys[ k ].morphTargets.length; ++ m ) { - - const animationKey = animationKeys[ k ]; - - times.push( animationKey.time ); - values.push( ( animationKey.morphTarget === morphTargetName ) ? 1 : 0 ); - - } - - tracks.push( new NumberKeyframeTrack( '.morphTargetInfluence[' + morphTargetName + ']', times, values ) ); - - } - - duration = morphTargetNames.length * fps; - - } else { - - // ...assume skeletal animation - - const boneName = '.bones[' + bones[ h ].name + ']'; - - addNonemptyTrack( - VectorKeyframeTrack, boneName + '.position', - animationKeys, 'pos', tracks ); - - addNonemptyTrack( - QuaternionKeyframeTrack, boneName + '.quaternion', - animationKeys, 'rot', tracks ); - - addNonemptyTrack( - VectorKeyframeTrack, boneName + '.scale', - animationKeys, 'scl', tracks ); - - } - - } - - if ( tracks.length === 0 ) { - - return null; - - } - - const clip = new this( clipName, duration, tracks, blendMode ); - - return clip; - - } - - resetDuration() { - - const tracks = this.tracks; - let duration = 0; - - for ( let i = 0, n = tracks.length; i !== n; ++ i ) { - - const track = this.tracks[ i ]; - - duration = Math.max( duration, track.times[ track.times.length - 1 ] ); - - } - - this.duration = duration; - - return this; - - } - - trim() { - - for ( let i = 0; i < this.tracks.length; i ++ ) { - - this.tracks[ i ].trim( 0, this.duration ); - - } - - return this; - - } - - validate() { - - let valid = true; - - for ( let i = 0; i < this.tracks.length; i ++ ) { - - valid = valid && this.tracks[ i ].validate(); - - } - - return valid; - - } - - optimize() { - - for ( let i = 0; i < this.tracks.length; i ++ ) { - - this.tracks[ i ].optimize(); - - } - - return this; - - } - - clone() { - - const tracks = []; - - for ( let i = 0; i < this.tracks.length; i ++ ) { - - tracks.push( this.tracks[ i ].clone() ); - - } - - return new this.constructor( this.name, this.duration, tracks, this.blendMode ); - - } - - toJSON() { - - return this.constructor.toJSON( this ); - - } - - } - - function getTrackTypeForValueTypeName( typeName ) { - - switch ( typeName.toLowerCase() ) { - - case 'scalar': - case 'double': - case 'float': - case 'number': - case 'integer': - - return NumberKeyframeTrack; - - case 'vector': - case 'vector2': - case 'vector3': - case 'vector4': - - return VectorKeyframeTrack; - - case 'color': - - return ColorKeyframeTrack; - - case 'quaternion': - - return QuaternionKeyframeTrack; - - case 'bool': - case 'boolean': - - return BooleanKeyframeTrack; - - case 'string': - - return StringKeyframeTrack; - - } - - throw new Error( 'THREE.KeyframeTrack: Unsupported typeName: ' + typeName ); - - } - - function parseKeyframeTrack( json ) { - - if ( json.type === undefined ) { - - throw new Error( 'THREE.KeyframeTrack: track type undefined, can not parse' ); - - } - - const trackType = getTrackTypeForValueTypeName( json.type ); - - if ( json.times === undefined ) { - - const times = [], values = []; - - flattenJSON( json.keys, times, values, 'value' ); - - json.times = times; - json.values = values; - - } - - // derived classes can define a static parse method - if ( trackType.parse !== undefined ) { - - return trackType.parse( json ); - - } else { - - // by default, we assume a constructor compatible with the base - return new trackType( json.name, json.times, json.values, json.interpolation ); - - } - - } - - const Cache = { - - enabled: false, - - files: {}, - - add: function ( key, file ) { - - if ( this.enabled === false ) return; - - // console.log( 'THREE.Cache', 'Adding key:', key ); - - this.files[ key ] = file; - - }, - - get: function ( key ) { - - if ( this.enabled === false ) return; - - // console.log( 'THREE.Cache', 'Checking key:', key ); - - return this.files[ key ]; - - }, - - remove: function ( key ) { - - delete this.files[ key ]; - - }, - - clear: function () { - - this.files = {}; - - } - - }; - - class LoadingManager { - - constructor( onLoad, onProgress, onError ) { - - const scope = this; - - let isLoading = false; - let itemsLoaded = 0; - let itemsTotal = 0; - let urlModifier = undefined; - const handlers = []; - - // Refer to #5689 for the reason why we don't set .onStart - // in the constructor - - this.onStart = undefined; - this.onLoad = onLoad; - this.onProgress = onProgress; - this.onError = onError; - - this.itemStart = function ( url ) { - - itemsTotal ++; - - if ( isLoading === false ) { - - if ( scope.onStart !== undefined ) { - - scope.onStart( url, itemsLoaded, itemsTotal ); - - } - - } - - isLoading = true; - - }; - - this.itemEnd = function ( url ) { - - itemsLoaded ++; - - if ( scope.onProgress !== undefined ) { - - scope.onProgress( url, itemsLoaded, itemsTotal ); - - } - - if ( itemsLoaded === itemsTotal ) { - - isLoading = false; - - if ( scope.onLoad !== undefined ) { - - scope.onLoad(); - - } - - } - - }; - - this.itemError = function ( url ) { - - if ( scope.onError !== undefined ) { - - scope.onError( url ); - - } - - }; - - this.resolveURL = function ( url ) { - - if ( urlModifier ) { - - return urlModifier( url ); - - } - - return url; - - }; - - this.setURLModifier = function ( transform ) { - - urlModifier = transform; - - return this; - - }; - - this.addHandler = function ( regex, loader ) { - - handlers.push( regex, loader ); - - return this; - - }; - - this.removeHandler = function ( regex ) { - - const index = handlers.indexOf( regex ); - - if ( index !== - 1 ) { - - handlers.splice( index, 2 ); - - } - - return this; - - }; - - this.getHandler = function ( file ) { - - for ( let i = 0, l = handlers.length; i < l; i += 2 ) { - - const regex = handlers[ i ]; - const loader = handlers[ i + 1 ]; - - if ( regex.global ) regex.lastIndex = 0; // see #17920 - - if ( regex.test( file ) ) { - - return loader; - - } - - } - - return null; - - }; - - } - - } - - const DefaultLoadingManager = /*@__PURE__*/ new LoadingManager(); - - class Loader { - - constructor( manager ) { - - this.manager = ( manager !== undefined ) ? manager : DefaultLoadingManager; - - this.crossOrigin = 'anonymous'; - this.withCredentials = false; - this.path = ''; - this.resourcePath = ''; - this.requestHeader = {}; - - } - - load( /* url, onLoad, onProgress, onError */ ) {} - - loadAsync( url, onProgress ) { - - const scope = this; - - return new Promise( function ( resolve, reject ) { - - scope.load( url, resolve, onProgress, reject ); - - } ); - - } - - parse( /* data */ ) {} - - setCrossOrigin( crossOrigin ) { - - this.crossOrigin = crossOrigin; - return this; - - } - - setWithCredentials( value ) { - - this.withCredentials = value; - return this; - - } - - setPath( path ) { - - this.path = path; - return this; - - } - - setResourcePath( resourcePath ) { - - this.resourcePath = resourcePath; - return this; - - } - - setRequestHeader( requestHeader ) { - - this.requestHeader = requestHeader; - return this; - - } - - } - - const loading = {}; - - class HttpError extends Error { - - constructor( message, response ) { - - super( message ); - this.response = response; - - } - - } - - class FileLoader extends Loader { - - constructor( manager ) { - - super( manager ); - - } - - load( url, onLoad, onProgress, onError ) { - - if ( url === undefined ) url = ''; - - if ( this.path !== undefined ) url = this.path + url; - - url = this.manager.resolveURL( url ); - - const cached = Cache.get( url ); - - if ( cached !== undefined ) { - - this.manager.itemStart( url ); - - setTimeout( () => { - - if ( onLoad ) onLoad( cached ); - - this.manager.itemEnd( url ); - - }, 0 ); - - return cached; - - } - - // Check if request is duplicate - - if ( loading[ url ] !== undefined ) { - - loading[ url ].push( { - - onLoad: onLoad, - onProgress: onProgress, - onError: onError - - } ); - - return; - - } - - // Initialise array for duplicate requests - loading[ url ] = []; - - loading[ url ].push( { - onLoad: onLoad, - onProgress: onProgress, - onError: onError, - } ); - - // create request - const req = new Request( url, { - headers: new Headers( this.requestHeader ), - credentials: this.withCredentials ? 'include' : 'same-origin', - // An abort controller could be added within a future PR - } ); - - // record states ( avoid data race ) - const mimeType = this.mimeType; - const responseType = this.responseType; - - // start the fetch - fetch( req ) - .then( response => { - - if ( response.status === 200 || response.status === 0 ) { - - // Some browsers return HTTP Status 0 when using non-http protocol - // e.g. 'file://' or 'data://'. Handle as success. - - if ( response.status === 0 ) { - - console.warn( 'THREE.FileLoader: HTTP Status 0 received.' ); - - } - - // Workaround: Checking if response.body === undefined for Alipay browser #23548 - - if ( typeof ReadableStream === 'undefined' || response.body === undefined || response.body.getReader === undefined ) { - - return response; - - } - - const callbacks = loading[ url ]; - const reader = response.body.getReader(); - - // Nginx needs X-File-Size check - // https://serverfault.com/questions/482875/why-does-nginx-remove-content-length-header-for-chunked-content - const contentLength = response.headers.get( 'Content-Length' ) || response.headers.get( 'X-File-Size' ); - const total = contentLength ? parseInt( contentLength ) : 0; - const lengthComputable = total !== 0; - let loaded = 0; - - // periodically read data into the new stream tracking while download progress - const stream = new ReadableStream( { - start( controller ) { - - readData(); - - function readData() { - - reader.read().then( ( { done, value } ) => { - - if ( done ) { - - controller.close(); - - } else { - - loaded += value.byteLength; - - const event = new ProgressEvent( 'progress', { lengthComputable, loaded, total } ); - for ( let i = 0, il = callbacks.length; i < il; i ++ ) { - - const callback = callbacks[ i ]; - if ( callback.onProgress ) callback.onProgress( event ); - - } - - controller.enqueue( value ); - readData(); - - } - - } ); - - } - - } - - } ); - - return new Response( stream ); - - } else { - - throw new HttpError( `fetch for "${response.url}" responded with ${response.status}: ${response.statusText}`, response ); - - } - - } ) - .then( response => { - - switch ( responseType ) { - - case 'arraybuffer': - - return response.arrayBuffer(); - - case 'blob': - - return response.blob(); - - case 'document': - - return response.text() - .then( text => { - - const parser = new DOMParser(); - return parser.parseFromString( text, mimeType ); - - } ); - - case 'json': - - return response.json(); - - default: - - if ( mimeType === undefined ) { - - return response.text(); - - } else { - - // sniff encoding - const re = /charset="?([^;"\s]*)"?/i; - const exec = re.exec( mimeType ); - const label = exec && exec[ 1 ] ? exec[ 1 ].toLowerCase() : undefined; - const decoder = new TextDecoder( label ); - return response.arrayBuffer().then( ab => decoder.decode( ab ) ); - - } - - } - - } ) - .then( data => { - - // Add to cache only on HTTP success, so that we do not cache - // error response bodies as proper responses to requests. - Cache.add( url, data ); - - const callbacks = loading[ url ]; - delete loading[ url ]; - - for ( let i = 0, il = callbacks.length; i < il; i ++ ) { - - const callback = callbacks[ i ]; - if ( callback.onLoad ) callback.onLoad( data ); - - } - - } ) - .catch( err => { - - // Abort errors and other errors are handled the same - - const callbacks = loading[ url ]; - - if ( callbacks === undefined ) { - - // When onLoad was called and url was deleted in `loading` - this.manager.itemError( url ); - throw err; - - } - - delete loading[ url ]; - - for ( let i = 0, il = callbacks.length; i < il; i ++ ) { - - const callback = callbacks[ i ]; - if ( callback.onError ) callback.onError( err ); - - } - - this.manager.itemError( url ); - - } ) - .finally( () => { - - this.manager.itemEnd( url ); - - } ); - - this.manager.itemStart( url ); - - } - - setResponseType( value ) { - - this.responseType = value; - return this; - - } - - setMimeType( value ) { - - this.mimeType = value; - return this; - - } - - } - - class AnimationLoader extends Loader { - - constructor( manager ) { - - super( manager ); - - } - - load( url, onLoad, onProgress, onError ) { - - const scope = this; - - const loader = new FileLoader( this.manager ); - loader.setPath( this.path ); - loader.setRequestHeader( this.requestHeader ); - loader.setWithCredentials( this.withCredentials ); - loader.load( url, function ( text ) { - - try { - - onLoad( scope.parse( JSON.parse( text ) ) ); - - } catch ( e ) { - - if ( onError ) { - - onError( e ); - - } else { - - console.error( e ); - - } - - scope.manager.itemError( url ); - - } - - }, onProgress, onError ); - - } - - parse( json ) { - - const animations = []; - - for ( let i = 0; i < json.length; i ++ ) { - - const clip = AnimationClip.parse( json[ i ] ); - - animations.push( clip ); - - } - - return animations; - - } - - } - - /** - * Abstract Base class to block based textures loader (dds, pvr, ...) - * - * Sub classes have to implement the parse() method which will be used in load(). - */ - - class CompressedTextureLoader extends Loader { - - constructor( manager ) { - - super( manager ); - - } - - load( url, onLoad, onProgress, onError ) { - - const scope = this; - - const images = []; - - const texture = new CompressedTexture(); - - const loader = new FileLoader( this.manager ); - loader.setPath( this.path ); - loader.setResponseType( 'arraybuffer' ); - loader.setRequestHeader( this.requestHeader ); - loader.setWithCredentials( scope.withCredentials ); - - let loaded = 0; - - function loadTexture( i ) { - - loader.load( url[ i ], function ( buffer ) { - - const texDatas = scope.parse( buffer, true ); - - images[ i ] = { - width: texDatas.width, - height: texDatas.height, - format: texDatas.format, - mipmaps: texDatas.mipmaps - }; - - loaded += 1; - - if ( loaded === 6 ) { - - if ( texDatas.mipmapCount === 1 ) texture.minFilter = LinearFilter; - - texture.image = images; - texture.format = texDatas.format; - texture.needsUpdate = true; - - if ( onLoad ) onLoad( texture ); - - } - - }, onProgress, onError ); - - } - - if ( Array.isArray( url ) ) { - - for ( let i = 0, il = url.length; i < il; ++ i ) { - - loadTexture( i ); - - } - - } else { - - // compressed cubemap texture stored in a single DDS file - - loader.load( url, function ( buffer ) { - - const texDatas = scope.parse( buffer, true ); - - if ( texDatas.isCubemap ) { - - const faces = texDatas.mipmaps.length / texDatas.mipmapCount; - - for ( let f = 0; f < faces; f ++ ) { - - images[ f ] = { mipmaps: [] }; - - for ( let i = 0; i < texDatas.mipmapCount; i ++ ) { - - images[ f ].mipmaps.push( texDatas.mipmaps[ f * texDatas.mipmapCount + i ] ); - images[ f ].format = texDatas.format; - images[ f ].width = texDatas.width; - images[ f ].height = texDatas.height; - - } - - } - - texture.image = images; - - } else { - - texture.image.width = texDatas.width; - texture.image.height = texDatas.height; - texture.mipmaps = texDatas.mipmaps; - - } - - if ( texDatas.mipmapCount === 1 ) { - - texture.minFilter = LinearFilter; - - } - - texture.format = texDatas.format; - texture.needsUpdate = true; - - if ( onLoad ) onLoad( texture ); - - }, onProgress, onError ); - - } - - return texture; - - } - - } - - class ImageLoader extends Loader { - - constructor( manager ) { - - super( manager ); - - } - - load( url, onLoad, onProgress, onError ) { - - if ( this.path !== undefined ) url = this.path + url; - - url = this.manager.resolveURL( url ); - - const scope = this; - - const cached = Cache.get( url ); - - if ( cached !== undefined ) { - - scope.manager.itemStart( url ); - - setTimeout( function () { - - if ( onLoad ) onLoad( cached ); - - scope.manager.itemEnd( url ); - - }, 0 ); - - return cached; - - } - - const image = createElementNS( 'img' ); - - function onImageLoad() { - - removeEventListeners(); - - Cache.add( url, this ); - - if ( onLoad ) onLoad( this ); - - scope.manager.itemEnd( url ); - - } - - function onImageError( event ) { - - removeEventListeners(); - - if ( onError ) onError( event ); - - scope.manager.itemError( url ); - scope.manager.itemEnd( url ); - - } - - function removeEventListeners() { - - image.removeEventListener( 'load', onImageLoad, false ); - image.removeEventListener( 'error', onImageError, false ); - - } - - image.addEventListener( 'load', onImageLoad, false ); - image.addEventListener( 'error', onImageError, false ); - - if ( url.slice( 0, 5 ) !== 'data:' ) { - - if ( this.crossOrigin !== undefined ) image.crossOrigin = this.crossOrigin; - - } - - scope.manager.itemStart( url ); - - image.src = url; - - return image; - - } - - } - - class CubeTextureLoader extends Loader { - - constructor( manager ) { - - super( manager ); - - } - - load( urls, onLoad, onProgress, onError ) { - - const texture = new CubeTexture(); - - const loader = new ImageLoader( this.manager ); - loader.setCrossOrigin( this.crossOrigin ); - loader.setPath( this.path ); - - let loaded = 0; - - function loadTexture( i ) { - - loader.load( urls[ i ], function ( image ) { - - texture.images[ i ] = image; - - loaded ++; - - if ( loaded === 6 ) { - - texture.needsUpdate = true; - - if ( onLoad ) onLoad( texture ); - - } - - }, undefined, onError ); - - } - - for ( let i = 0; i < urls.length; ++ i ) { - - loadTexture( i ); - - } - - return texture; - - } - - } - - /** - * Abstract Base class to load generic binary textures formats (rgbe, hdr, ...) - * - * Sub classes have to implement the parse() method which will be used in load(). - */ - - class DataTextureLoader extends Loader { - - constructor( manager ) { - - super( manager ); - - } - - load( url, onLoad, onProgress, onError ) { - - const scope = this; - - const texture = new DataTexture(); - - const loader = new FileLoader( this.manager ); - loader.setResponseType( 'arraybuffer' ); - loader.setRequestHeader( this.requestHeader ); - loader.setPath( this.path ); - loader.setWithCredentials( scope.withCredentials ); - loader.load( url, function ( buffer ) { - - const texData = scope.parse( buffer ); - - if ( ! texData ) return; - - if ( texData.image !== undefined ) { - - texture.image = texData.image; - - } else if ( texData.data !== undefined ) { - - texture.image.width = texData.width; - texture.image.height = texData.height; - texture.image.data = texData.data; - - } - - texture.wrapS = texData.wrapS !== undefined ? texData.wrapS : ClampToEdgeWrapping; - texture.wrapT = texData.wrapT !== undefined ? texData.wrapT : ClampToEdgeWrapping; - - texture.magFilter = texData.magFilter !== undefined ? texData.magFilter : LinearFilter; - texture.minFilter = texData.minFilter !== undefined ? texData.minFilter : LinearFilter; - - texture.anisotropy = texData.anisotropy !== undefined ? texData.anisotropy : 1; - - if ( texData.encoding !== undefined ) { - - texture.encoding = texData.encoding; - - } - - if ( texData.flipY !== undefined ) { - - texture.flipY = texData.flipY; - - } - - if ( texData.format !== undefined ) { - - texture.format = texData.format; - - } - - if ( texData.type !== undefined ) { - - texture.type = texData.type; - - } - - if ( texData.mipmaps !== undefined ) { - - texture.mipmaps = texData.mipmaps; - texture.minFilter = LinearMipmapLinearFilter; // presumably... - - } - - if ( texData.mipmapCount === 1 ) { - - texture.minFilter = LinearFilter; - - } - - if ( texData.generateMipmaps !== undefined ) { - - texture.generateMipmaps = texData.generateMipmaps; - - } - - texture.needsUpdate = true; - - if ( onLoad ) onLoad( texture, texData ); - - }, onProgress, onError ); - - - return texture; - - } - - } - - class TextureLoader extends Loader { - - constructor( manager ) { - - super( manager ); - - } - - load( url, onLoad, onProgress, onError ) { - - const texture = new Texture(); - - const loader = new ImageLoader( this.manager ); - loader.setCrossOrigin( this.crossOrigin ); - loader.setPath( this.path ); - - loader.load( url, function ( image ) { - - texture.image = image; - texture.needsUpdate = true; - - if ( onLoad !== undefined ) { - - onLoad( texture ); - - } - - }, onProgress, onError ); - - return texture; - - } - - } - - class Light extends Object3D { - - constructor( color, intensity = 1 ) { - - super(); - - this.isLight = true; - - this.type = 'Light'; - - this.color = new Color( color ); - this.intensity = intensity; - - } - - dispose() { - - // Empty here in base class; some subclasses override. - - } - - copy( source, recursive ) { - - super.copy( source, recursive ); - - this.color.copy( source.color ); - this.intensity = source.intensity; - - return this; - - } - - toJSON( meta ) { - - const data = super.toJSON( meta ); - - data.object.color = this.color.getHex(); - data.object.intensity = this.intensity; - - if ( this.groundColor !== undefined ) data.object.groundColor = this.groundColor.getHex(); - - if ( this.distance !== undefined ) data.object.distance = this.distance; - if ( this.angle !== undefined ) data.object.angle = this.angle; - if ( this.decay !== undefined ) data.object.decay = this.decay; - if ( this.penumbra !== undefined ) data.object.penumbra = this.penumbra; - - if ( this.shadow !== undefined ) data.object.shadow = this.shadow.toJSON(); - - return data; - - } - - } - - class HemisphereLight extends Light { - - constructor( skyColor, groundColor, intensity ) { - - super( skyColor, intensity ); - - this.isHemisphereLight = true; - - this.type = 'HemisphereLight'; - - this.position.copy( Object3D.DEFAULT_UP ); - this.updateMatrix(); - - this.groundColor = new Color( groundColor ); - - } - - copy( source, recursive ) { - - super.copy( source, recursive ); - - this.groundColor.copy( source.groundColor ); - - return this; - - } - - } - - const _projScreenMatrix$1 = /*@__PURE__*/ new Matrix4(); - const _lightPositionWorld$1 = /*@__PURE__*/ new Vector3(); - const _lookTarget$1 = /*@__PURE__*/ new Vector3(); - - class LightShadow { - - constructor( camera ) { - - this.camera = camera; - - this.bias = 0; - this.normalBias = 0; - this.radius = 1; - this.blurSamples = 8; - - this.mapSize = new Vector2( 512, 512 ); - - this.map = null; - this.mapPass = null; - this.matrix = new Matrix4(); - - this.autoUpdate = true; - this.needsUpdate = false; - - this._frustum = new Frustum(); - this._frameExtents = new Vector2( 1, 1 ); - - this._viewportCount = 1; - - this._viewports = [ - - new Vector4( 0, 0, 1, 1 ) - - ]; - - } - - getViewportCount() { - - return this._viewportCount; - - } - - getFrustum() { - - return this._frustum; - - } - - updateMatrices( light ) { - - const shadowCamera = this.camera; - const shadowMatrix = this.matrix; - - _lightPositionWorld$1.setFromMatrixPosition( light.matrixWorld ); - shadowCamera.position.copy( _lightPositionWorld$1 ); - - _lookTarget$1.setFromMatrixPosition( light.target.matrixWorld ); - shadowCamera.lookAt( _lookTarget$1 ); - shadowCamera.updateMatrixWorld(); - - _projScreenMatrix$1.multiplyMatrices( shadowCamera.projectionMatrix, shadowCamera.matrixWorldInverse ); - this._frustum.setFromProjectionMatrix( _projScreenMatrix$1 ); - - shadowMatrix.set( - 0.5, 0.0, 0.0, 0.5, - 0.0, 0.5, 0.0, 0.5, - 0.0, 0.0, 0.5, 0.5, - 0.0, 0.0, 0.0, 1.0 - ); - - shadowMatrix.multiply( _projScreenMatrix$1 ); - - } - - getViewport( viewportIndex ) { - - return this._viewports[ viewportIndex ]; - - } - - getFrameExtents() { - - return this._frameExtents; - - } - - dispose() { - - if ( this.map ) { - - this.map.dispose(); - - } - - if ( this.mapPass ) { - - this.mapPass.dispose(); - - } - - } - - copy( source ) { - - this.camera = source.camera.clone(); - - this.bias = source.bias; - this.radius = source.radius; - - this.mapSize.copy( source.mapSize ); - - return this; - - } - - clone() { - - return new this.constructor().copy( this ); - - } - - toJSON() { - - const object = {}; - - if ( this.bias !== 0 ) object.bias = this.bias; - if ( this.normalBias !== 0 ) object.normalBias = this.normalBias; - if ( this.radius !== 1 ) object.radius = this.radius; - if ( this.mapSize.x !== 512 || this.mapSize.y !== 512 ) object.mapSize = this.mapSize.toArray(); - - object.camera = this.camera.toJSON( false ).object; - delete object.camera.matrix; - - return object; - - } - - } - - class SpotLightShadow extends LightShadow { - - constructor() { - - super( new PerspectiveCamera( 50, 1, 0.5, 500 ) ); - - this.isSpotLightShadow = true; - - this.focus = 1; - - } - - updateMatrices( light ) { - - const camera = this.camera; - - const fov = RAD2DEG * 2 * light.angle * this.focus; - const aspect = this.mapSize.width / this.mapSize.height; - const far = light.distance || camera.far; - - if ( fov !== camera.fov || aspect !== camera.aspect || far !== camera.far ) { - - camera.fov = fov; - camera.aspect = aspect; - camera.far = far; - camera.updateProjectionMatrix(); - - } - - super.updateMatrices( light ); - - } - - copy( source ) { - - super.copy( source ); - - this.focus = source.focus; - - return this; - - } - - } - - class SpotLight extends Light { - - constructor( color, intensity, distance = 0, angle = Math.PI / 3, penumbra = 0, decay = 2 ) { - - super( color, intensity ); - - this.isSpotLight = true; - - this.type = 'SpotLight'; - - this.position.copy( Object3D.DEFAULT_UP ); - this.updateMatrix(); - - this.target = new Object3D(); - - this.distance = distance; - this.angle = angle; - this.penumbra = penumbra; - this.decay = decay; - - this.map = null; - - this.shadow = new SpotLightShadow(); - - } - - get power() { - - // compute the light's luminous power (in lumens) from its intensity (in candela) - // by convention for a spotlight, luminous power (lm) = π * luminous intensity (cd) - return this.intensity * Math.PI; - - } - - set power( power ) { - - // set the light's intensity (in candela) from the desired luminous power (in lumens) - this.intensity = power / Math.PI; - - } - - dispose() { - - this.shadow.dispose(); - - } - - copy( source, recursive ) { - - super.copy( source, recursive ); - - this.distance = source.distance; - this.angle = source.angle; - this.penumbra = source.penumbra; - this.decay = source.decay; - - this.target = source.target.clone(); - - this.shadow = source.shadow.clone(); - - return this; - - } - - } - - const _projScreenMatrix = /*@__PURE__*/ new Matrix4(); - const _lightPositionWorld = /*@__PURE__*/ new Vector3(); - const _lookTarget = /*@__PURE__*/ new Vector3(); - - class PointLightShadow extends LightShadow { - - constructor() { - - super( new PerspectiveCamera( 90, 1, 0.5, 500 ) ); - - this.isPointLightShadow = true; - - this._frameExtents = new Vector2( 4, 2 ); - - this._viewportCount = 6; - - this._viewports = [ - // These viewports map a cube-map onto a 2D texture with the - // following orientation: - // - // xzXZ - // y Y - // - // X - Positive x direction - // x - Negative x direction - // Y - Positive y direction - // y - Negative y direction - // Z - Positive z direction - // z - Negative z direction - - // positive X - new Vector4( 2, 1, 1, 1 ), - // negative X - new Vector4( 0, 1, 1, 1 ), - // positive Z - new Vector4( 3, 1, 1, 1 ), - // negative Z - new Vector4( 1, 1, 1, 1 ), - // positive Y - new Vector4( 3, 0, 1, 1 ), - // negative Y - new Vector4( 1, 0, 1, 1 ) - ]; - - this._cubeDirections = [ - new Vector3( 1, 0, 0 ), new Vector3( - 1, 0, 0 ), new Vector3( 0, 0, 1 ), - new Vector3( 0, 0, - 1 ), new Vector3( 0, 1, 0 ), new Vector3( 0, - 1, 0 ) - ]; - - this._cubeUps = [ - new Vector3( 0, 1, 0 ), new Vector3( 0, 1, 0 ), new Vector3( 0, 1, 0 ), - new Vector3( 0, 1, 0 ), new Vector3( 0, 0, 1 ), new Vector3( 0, 0, - 1 ) - ]; - - } - - updateMatrices( light, viewportIndex = 0 ) { - - const camera = this.camera; - const shadowMatrix = this.matrix; - - const far = light.distance || camera.far; - - if ( far !== camera.far ) { - - camera.far = far; - camera.updateProjectionMatrix(); - - } - - _lightPositionWorld.setFromMatrixPosition( light.matrixWorld ); - camera.position.copy( _lightPositionWorld ); - - _lookTarget.copy( camera.position ); - _lookTarget.add( this._cubeDirections[ viewportIndex ] ); - camera.up.copy( this._cubeUps[ viewportIndex ] ); - camera.lookAt( _lookTarget ); - camera.updateMatrixWorld(); - - shadowMatrix.makeTranslation( - _lightPositionWorld.x, - _lightPositionWorld.y, - _lightPositionWorld.z ); - - _projScreenMatrix.multiplyMatrices( camera.projectionMatrix, camera.matrixWorldInverse ); - this._frustum.setFromProjectionMatrix( _projScreenMatrix ); - - } - - } - - class PointLight extends Light { - - constructor( color, intensity, distance = 0, decay = 2 ) { - - super( color, intensity ); - - this.isPointLight = true; - - this.type = 'PointLight'; - - this.distance = distance; - this.decay = decay; - - this.shadow = new PointLightShadow(); - - } - - get power() { - - // compute the light's luminous power (in lumens) from its intensity (in candela) - // for an isotropic light source, luminous power (lm) = 4 π luminous intensity (cd) - return this.intensity * 4 * Math.PI; - - } - - set power( power ) { - - // set the light's intensity (in candela) from the desired luminous power (in lumens) - this.intensity = power / ( 4 * Math.PI ); - - } - - dispose() { - - this.shadow.dispose(); - - } - - copy( source, recursive ) { - - super.copy( source, recursive ); - - this.distance = source.distance; - this.decay = source.decay; - - this.shadow = source.shadow.clone(); - - return this; - - } - - } - - class DirectionalLightShadow extends LightShadow { - - constructor() { - - super( new OrthographicCamera( - 5, 5, 5, - 5, 0.5, 500 ) ); - - this.isDirectionalLightShadow = true; - - } - - } - - class DirectionalLight extends Light { - - constructor( color, intensity ) { - - super( color, intensity ); - - this.isDirectionalLight = true; - - this.type = 'DirectionalLight'; - - this.position.copy( Object3D.DEFAULT_UP ); - this.updateMatrix(); - - this.target = new Object3D(); - - this.shadow = new DirectionalLightShadow(); - - } - - dispose() { - - this.shadow.dispose(); - - } - - copy( source ) { - - super.copy( source ); - - this.target = source.target.clone(); - this.shadow = source.shadow.clone(); - - return this; - - } - - } - - class AmbientLight extends Light { - - constructor( color, intensity ) { - - super( color, intensity ); - - this.isAmbientLight = true; - - this.type = 'AmbientLight'; - - } - - } - - class RectAreaLight extends Light { - - constructor( color, intensity, width = 10, height = 10 ) { - - super( color, intensity ); - - this.isRectAreaLight = true; - - this.type = 'RectAreaLight'; - - this.width = width; - this.height = height; - - } - - get power() { - - // compute the light's luminous power (in lumens) from its intensity (in nits) - return this.intensity * this.width * this.height * Math.PI; - - } - - set power( power ) { - - // set the light's intensity (in nits) from the desired luminous power (in lumens) - this.intensity = power / ( this.width * this.height * Math.PI ); - - } - - copy( source ) { - - super.copy( source ); - - this.width = source.width; - this.height = source.height; - - return this; - - } - - toJSON( meta ) { - - const data = super.toJSON( meta ); - - data.object.width = this.width; - data.object.height = this.height; - - return data; - - } - - } - - /** - * Primary reference: - * https://graphics.stanford.edu/papers/envmap/envmap.pdf - * - * Secondary reference: - * https://www.ppsloan.org/publications/StupidSH36.pdf - */ - - // 3-band SH defined by 9 coefficients - - class SphericalHarmonics3 { - - constructor() { - - this.isSphericalHarmonics3 = true; - - this.coefficients = []; - - for ( let i = 0; i < 9; i ++ ) { - - this.coefficients.push( new Vector3() ); - - } - - } - - set( coefficients ) { - - for ( let i = 0; i < 9; i ++ ) { - - this.coefficients[ i ].copy( coefficients[ i ] ); - - } - - return this; - - } - - zero() { - - for ( let i = 0; i < 9; i ++ ) { - - this.coefficients[ i ].set( 0, 0, 0 ); - - } - - return this; - - } - - // get the radiance in the direction of the normal - // target is a Vector3 - getAt( normal, target ) { - - // normal is assumed to be unit length - - const x = normal.x, y = normal.y, z = normal.z; - - const coeff = this.coefficients; - - // band 0 - target.copy( coeff[ 0 ] ).multiplyScalar( 0.282095 ); - - // band 1 - target.addScaledVector( coeff[ 1 ], 0.488603 * y ); - target.addScaledVector( coeff[ 2 ], 0.488603 * z ); - target.addScaledVector( coeff[ 3 ], 0.488603 * x ); - - // band 2 - target.addScaledVector( coeff[ 4 ], 1.092548 * ( x * y ) ); - target.addScaledVector( coeff[ 5 ], 1.092548 * ( y * z ) ); - target.addScaledVector( coeff[ 6 ], 0.315392 * ( 3.0 * z * z - 1.0 ) ); - target.addScaledVector( coeff[ 7 ], 1.092548 * ( x * z ) ); - target.addScaledVector( coeff[ 8 ], 0.546274 * ( x * x - y * y ) ); - - return target; - - } - - // get the irradiance (radiance convolved with cosine lobe) in the direction of the normal - // target is a Vector3 - // https://graphics.stanford.edu/papers/envmap/envmap.pdf - getIrradianceAt( normal, target ) { - - // normal is assumed to be unit length - - const x = normal.x, y = normal.y, z = normal.z; - - const coeff = this.coefficients; - - // band 0 - target.copy( coeff[ 0 ] ).multiplyScalar( 0.886227 ); // π * 0.282095 - - // band 1 - target.addScaledVector( coeff[ 1 ], 2.0 * 0.511664 * y ); // ( 2 * π / 3 ) * 0.488603 - target.addScaledVector( coeff[ 2 ], 2.0 * 0.511664 * z ); - target.addScaledVector( coeff[ 3 ], 2.0 * 0.511664 * x ); - - // band 2 - target.addScaledVector( coeff[ 4 ], 2.0 * 0.429043 * x * y ); // ( π / 4 ) * 1.092548 - target.addScaledVector( coeff[ 5 ], 2.0 * 0.429043 * y * z ); - target.addScaledVector( coeff[ 6 ], 0.743125 * z * z - 0.247708 ); // ( π / 4 ) * 0.315392 * 3 - target.addScaledVector( coeff[ 7 ], 2.0 * 0.429043 * x * z ); - target.addScaledVector( coeff[ 8 ], 0.429043 * ( x * x - y * y ) ); // ( π / 4 ) * 0.546274 - - return target; - - } - - add( sh ) { - - for ( let i = 0; i < 9; i ++ ) { - - this.coefficients[ i ].add( sh.coefficients[ i ] ); - - } - - return this; - - } - - addScaledSH( sh, s ) { - - for ( let i = 0; i < 9; i ++ ) { - - this.coefficients[ i ].addScaledVector( sh.coefficients[ i ], s ); - - } - - return this; - - } - - scale( s ) { - - for ( let i = 0; i < 9; i ++ ) { - - this.coefficients[ i ].multiplyScalar( s ); - - } - - return this; - - } - - lerp( sh, alpha ) { - - for ( let i = 0; i < 9; i ++ ) { - - this.coefficients[ i ].lerp( sh.coefficients[ i ], alpha ); - - } - - return this; - - } - - equals( sh ) { - - for ( let i = 0; i < 9; i ++ ) { - - if ( ! this.coefficients[ i ].equals( sh.coefficients[ i ] ) ) { - - return false; - - } - - } - - return true; - - } - - copy( sh ) { - - return this.set( sh.coefficients ); - - } - - clone() { - - return new this.constructor().copy( this ); - - } - - fromArray( array, offset = 0 ) { - - const coefficients = this.coefficients; - - for ( let i = 0; i < 9; i ++ ) { - - coefficients[ i ].fromArray( array, offset + ( i * 3 ) ); - - } - - return this; - - } - - toArray( array = [], offset = 0 ) { - - const coefficients = this.coefficients; - - for ( let i = 0; i < 9; i ++ ) { - - coefficients[ i ].toArray( array, offset + ( i * 3 ) ); - - } - - return array; - - } - - // evaluate the basis functions - // shBasis is an Array[ 9 ] - static getBasisAt( normal, shBasis ) { - - // normal is assumed to be unit length - - const x = normal.x, y = normal.y, z = normal.z; - - // band 0 - shBasis[ 0 ] = 0.282095; - - // band 1 - shBasis[ 1 ] = 0.488603 * y; - shBasis[ 2 ] = 0.488603 * z; - shBasis[ 3 ] = 0.488603 * x; - - // band 2 - shBasis[ 4 ] = 1.092548 * x * y; - shBasis[ 5 ] = 1.092548 * y * z; - shBasis[ 6 ] = 0.315392 * ( 3 * z * z - 1 ); - shBasis[ 7 ] = 1.092548 * x * z; - shBasis[ 8 ] = 0.546274 * ( x * x - y * y ); - - } - - } - - class LightProbe extends Light { - - constructor( sh = new SphericalHarmonics3(), intensity = 1 ) { - - super( undefined, intensity ); - - this.isLightProbe = true; - - this.sh = sh; - - } - - copy( source ) { - - super.copy( source ); - - this.sh.copy( source.sh ); - - return this; - - } - - fromJSON( json ) { - - this.intensity = json.intensity; // TODO: Move this bit to Light.fromJSON(); - this.sh.fromArray( json.sh ); - - return this; - - } - - toJSON( meta ) { - - const data = super.toJSON( meta ); - - data.object.sh = this.sh.toArray(); - - return data; - - } - - } - - class MaterialLoader extends Loader { - - constructor( manager ) { - - super( manager ); - this.textures = {}; - - } - - load( url, onLoad, onProgress, onError ) { - - const scope = this; - - const loader = new FileLoader( scope.manager ); - loader.setPath( scope.path ); - loader.setRequestHeader( scope.requestHeader ); - loader.setWithCredentials( scope.withCredentials ); - loader.load( url, function ( text ) { - - try { - - onLoad( scope.parse( JSON.parse( text ) ) ); - - } catch ( e ) { - - if ( onError ) { - - onError( e ); - - } else { - - console.error( e ); - - } - - scope.manager.itemError( url ); - - } - - }, onProgress, onError ); - - } - - parse( json ) { - - const textures = this.textures; - - function getTexture( name ) { - - if ( textures[ name ] === undefined ) { - - console.warn( 'THREE.MaterialLoader: Undefined texture', name ); - - } - - return textures[ name ]; - - } - - const material = MaterialLoader.createMaterialFromType( json.type ); - - if ( json.uuid !== undefined ) material.uuid = json.uuid; - if ( json.name !== undefined ) material.name = json.name; - if ( json.color !== undefined && material.color !== undefined ) material.color.setHex( json.color ); - if ( json.roughness !== undefined ) material.roughness = json.roughness; - if ( json.metalness !== undefined ) material.metalness = json.metalness; - if ( json.sheen !== undefined ) material.sheen = json.sheen; - if ( json.sheenColor !== undefined ) material.sheenColor = new Color().setHex( json.sheenColor ); - if ( json.sheenRoughness !== undefined ) material.sheenRoughness = json.sheenRoughness; - if ( json.emissive !== undefined && material.emissive !== undefined ) material.emissive.setHex( json.emissive ); - if ( json.specular !== undefined && material.specular !== undefined ) material.specular.setHex( json.specular ); - if ( json.specularIntensity !== undefined ) material.specularIntensity = json.specularIntensity; - if ( json.specularColor !== undefined && material.specularColor !== undefined ) material.specularColor.setHex( json.specularColor ); - if ( json.shininess !== undefined ) material.shininess = json.shininess; - if ( json.clearcoat !== undefined ) material.clearcoat = json.clearcoat; - if ( json.clearcoatRoughness !== undefined ) material.clearcoatRoughness = json.clearcoatRoughness; - if ( json.iridescence !== undefined ) material.iridescence = json.iridescence; - if ( json.iridescenceIOR !== undefined ) material.iridescenceIOR = json.iridescenceIOR; - if ( json.iridescenceThicknessRange !== undefined ) material.iridescenceThicknessRange = json.iridescenceThicknessRange; - if ( json.transmission !== undefined ) material.transmission = json.transmission; - if ( json.thickness !== undefined ) material.thickness = json.thickness; - if ( json.attenuationDistance !== undefined ) material.attenuationDistance = json.attenuationDistance; - if ( json.attenuationColor !== undefined && material.attenuationColor !== undefined ) material.attenuationColor.setHex( json.attenuationColor ); - if ( json.fog !== undefined ) material.fog = json.fog; - if ( json.flatShading !== undefined ) material.flatShading = json.flatShading; - if ( json.blending !== undefined ) material.blending = json.blending; - if ( json.combine !== undefined ) material.combine = json.combine; - if ( json.side !== undefined ) material.side = json.side; - if ( json.shadowSide !== undefined ) material.shadowSide = json.shadowSide; - if ( json.opacity !== undefined ) material.opacity = json.opacity; - if ( json.transparent !== undefined ) material.transparent = json.transparent; - if ( json.alphaTest !== undefined ) material.alphaTest = json.alphaTest; - if ( json.depthTest !== undefined ) material.depthTest = json.depthTest; - if ( json.depthWrite !== undefined ) material.depthWrite = json.depthWrite; - if ( json.colorWrite !== undefined ) material.colorWrite = json.colorWrite; - - if ( json.stencilWrite !== undefined ) material.stencilWrite = json.stencilWrite; - if ( json.stencilWriteMask !== undefined ) material.stencilWriteMask = json.stencilWriteMask; - if ( json.stencilFunc !== undefined ) material.stencilFunc = json.stencilFunc; - if ( json.stencilRef !== undefined ) material.stencilRef = json.stencilRef; - if ( json.stencilFuncMask !== undefined ) material.stencilFuncMask = json.stencilFuncMask; - if ( json.stencilFail !== undefined ) material.stencilFail = json.stencilFail; - if ( json.stencilZFail !== undefined ) material.stencilZFail = json.stencilZFail; - if ( json.stencilZPass !== undefined ) material.stencilZPass = json.stencilZPass; - - if ( json.wireframe !== undefined ) material.wireframe = json.wireframe; - if ( json.wireframeLinewidth !== undefined ) material.wireframeLinewidth = json.wireframeLinewidth; - if ( json.wireframeLinecap !== undefined ) material.wireframeLinecap = json.wireframeLinecap; - if ( json.wireframeLinejoin !== undefined ) material.wireframeLinejoin = json.wireframeLinejoin; - - if ( json.rotation !== undefined ) material.rotation = json.rotation; - - if ( json.linewidth !== 1 ) material.linewidth = json.linewidth; - if ( json.dashSize !== undefined ) material.dashSize = json.dashSize; - if ( json.gapSize !== undefined ) material.gapSize = json.gapSize; - if ( json.scale !== undefined ) material.scale = json.scale; - - if ( json.polygonOffset !== undefined ) material.polygonOffset = json.polygonOffset; - if ( json.polygonOffsetFactor !== undefined ) material.polygonOffsetFactor = json.polygonOffsetFactor; - if ( json.polygonOffsetUnits !== undefined ) material.polygonOffsetUnits = json.polygonOffsetUnits; - - if ( json.dithering !== undefined ) material.dithering = json.dithering; - - if ( json.alphaToCoverage !== undefined ) material.alphaToCoverage = json.alphaToCoverage; - if ( json.premultipliedAlpha !== undefined ) material.premultipliedAlpha = json.premultipliedAlpha; - if ( json.forceSinglePass !== undefined ) material.forceSinglePass = json.forceSinglePass; - - if ( json.visible !== undefined ) material.visible = json.visible; - - if ( json.toneMapped !== undefined ) material.toneMapped = json.toneMapped; - - if ( json.userData !== undefined ) material.userData = json.userData; - - if ( json.vertexColors !== undefined ) { - - if ( typeof json.vertexColors === 'number' ) { - - material.vertexColors = ( json.vertexColors > 0 ) ? true : false; - - } else { - - material.vertexColors = json.vertexColors; - - } - - } - - // Shader Material - - if ( json.uniforms !== undefined ) { - - for ( const name in json.uniforms ) { - - const uniform = json.uniforms[ name ]; - - material.uniforms[ name ] = {}; - - switch ( uniform.type ) { - - case 't': - material.uniforms[ name ].value = getTexture( uniform.value ); - break; - - case 'c': - material.uniforms[ name ].value = new Color().setHex( uniform.value ); - break; - - case 'v2': - material.uniforms[ name ].value = new Vector2().fromArray( uniform.value ); - break; - - case 'v3': - material.uniforms[ name ].value = new Vector3().fromArray( uniform.value ); - break; - - case 'v4': - material.uniforms[ name ].value = new Vector4().fromArray( uniform.value ); - break; - - case 'm3': - material.uniforms[ name ].value = new Matrix3().fromArray( uniform.value ); - break; - - case 'm4': - material.uniforms[ name ].value = new Matrix4().fromArray( uniform.value ); - break; - - default: - material.uniforms[ name ].value = uniform.value; - - } - - } - - } - - if ( json.defines !== undefined ) material.defines = json.defines; - if ( json.vertexShader !== undefined ) material.vertexShader = json.vertexShader; - if ( json.fragmentShader !== undefined ) material.fragmentShader = json.fragmentShader; - if ( json.glslVersion !== undefined ) material.glslVersion = json.glslVersion; - - if ( json.extensions !== undefined ) { - - for ( const key in json.extensions ) { - - material.extensions[ key ] = json.extensions[ key ]; - - } - - } - - // for PointsMaterial - - if ( json.size !== undefined ) material.size = json.size; - if ( json.sizeAttenuation !== undefined ) material.sizeAttenuation = json.sizeAttenuation; - - // maps - - if ( json.map !== undefined ) material.map = getTexture( json.map ); - if ( json.matcap !== undefined ) material.matcap = getTexture( json.matcap ); - - if ( json.alphaMap !== undefined ) material.alphaMap = getTexture( json.alphaMap ); - - if ( json.bumpMap !== undefined ) material.bumpMap = getTexture( json.bumpMap ); - if ( json.bumpScale !== undefined ) material.bumpScale = json.bumpScale; - - if ( json.normalMap !== undefined ) material.normalMap = getTexture( json.normalMap ); - if ( json.normalMapType !== undefined ) material.normalMapType = json.normalMapType; - if ( json.normalScale !== undefined ) { - - let normalScale = json.normalScale; - - if ( Array.isArray( normalScale ) === false ) { - - // Blender exporter used to export a scalar. See #7459 - - normalScale = [ normalScale, normalScale ]; - - } - - material.normalScale = new Vector2().fromArray( normalScale ); - - } - - if ( json.displacementMap !== undefined ) material.displacementMap = getTexture( json.displacementMap ); - if ( json.displacementScale !== undefined ) material.displacementScale = json.displacementScale; - if ( json.displacementBias !== undefined ) material.displacementBias = json.displacementBias; - - if ( json.roughnessMap !== undefined ) material.roughnessMap = getTexture( json.roughnessMap ); - if ( json.metalnessMap !== undefined ) material.metalnessMap = getTexture( json.metalnessMap ); - - if ( json.emissiveMap !== undefined ) material.emissiveMap = getTexture( json.emissiveMap ); - if ( json.emissiveIntensity !== undefined ) material.emissiveIntensity = json.emissiveIntensity; - - if ( json.specularMap !== undefined ) material.specularMap = getTexture( json.specularMap ); - if ( json.specularIntensityMap !== undefined ) material.specularIntensityMap = getTexture( json.specularIntensityMap ); - if ( json.specularColorMap !== undefined ) material.specularColorMap = getTexture( json.specularColorMap ); - - if ( json.envMap !== undefined ) material.envMap = getTexture( json.envMap ); - if ( json.envMapIntensity !== undefined ) material.envMapIntensity = json.envMapIntensity; - - if ( json.reflectivity !== undefined ) material.reflectivity = json.reflectivity; - if ( json.refractionRatio !== undefined ) material.refractionRatio = json.refractionRatio; - - if ( json.lightMap !== undefined ) material.lightMap = getTexture( json.lightMap ); - if ( json.lightMapIntensity !== undefined ) material.lightMapIntensity = json.lightMapIntensity; - - if ( json.aoMap !== undefined ) material.aoMap = getTexture( json.aoMap ); - if ( json.aoMapIntensity !== undefined ) material.aoMapIntensity = json.aoMapIntensity; - - if ( json.gradientMap !== undefined ) material.gradientMap = getTexture( json.gradientMap ); - - if ( json.clearcoatMap !== undefined ) material.clearcoatMap = getTexture( json.clearcoatMap ); - if ( json.clearcoatRoughnessMap !== undefined ) material.clearcoatRoughnessMap = getTexture( json.clearcoatRoughnessMap ); - if ( json.clearcoatNormalMap !== undefined ) material.clearcoatNormalMap = getTexture( json.clearcoatNormalMap ); - if ( json.clearcoatNormalScale !== undefined ) material.clearcoatNormalScale = new Vector2().fromArray( json.clearcoatNormalScale ); - - if ( json.iridescenceMap !== undefined ) material.iridescenceMap = getTexture( json.iridescenceMap ); - if ( json.iridescenceThicknessMap !== undefined ) material.iridescenceThicknessMap = getTexture( json.iridescenceThicknessMap ); - - if ( json.transmissionMap !== undefined ) material.transmissionMap = getTexture( json.transmissionMap ); - if ( json.thicknessMap !== undefined ) material.thicknessMap = getTexture( json.thicknessMap ); - - if ( json.sheenColorMap !== undefined ) material.sheenColorMap = getTexture( json.sheenColorMap ); - if ( json.sheenRoughnessMap !== undefined ) material.sheenRoughnessMap = getTexture( json.sheenRoughnessMap ); - - return material; - - } - - setTextures( value ) { - - this.textures = value; - return this; - - } - - static createMaterialFromType( type ) { - - const materialLib = { - ShadowMaterial, - SpriteMaterial, - RawShaderMaterial, - ShaderMaterial, - PointsMaterial, - MeshPhysicalMaterial, - MeshStandardMaterial, - MeshPhongMaterial, - MeshToonMaterial, - MeshNormalMaterial, - MeshLambertMaterial, - MeshDepthMaterial, - MeshDistanceMaterial, - MeshBasicMaterial, - MeshMatcapMaterial, - LineDashedMaterial, - LineBasicMaterial, - Material - }; - - return new materialLib[ type ](); - - } - - } - - class LoaderUtils { - - static decodeText( array ) { - - if ( typeof TextDecoder !== 'undefined' ) { - - return new TextDecoder().decode( array ); - - } - - // Avoid the String.fromCharCode.apply(null, array) shortcut, which - // throws a "maximum call stack size exceeded" error for large arrays. - - let s = ''; - - for ( let i = 0, il = array.length; i < il; i ++ ) { - - // Implicitly assumes little-endian. - s += String.fromCharCode( array[ i ] ); - - } - - try { - - // merges multi-byte utf-8 characters. - - return decodeURIComponent( escape( s ) ); - - } catch ( e ) { // see #16358 - - return s; - - } - - } - - static extractUrlBase( url ) { - - const index = url.lastIndexOf( '/' ); - - if ( index === - 1 ) return './'; - - return url.slice( 0, index + 1 ); - - } - - static resolveURL( url, path ) { - - // Invalid URL - if ( typeof url !== 'string' || url === '' ) return ''; - - // Host Relative URL - if ( /^https?:\/\//i.test( path ) && /^\//.test( url ) ) { - - path = path.replace( /(^https?:\/\/[^\/]+).*/i, '$1' ); - - } - - // Absolute URL http://,https://,// - if ( /^(https?:)?\/\//i.test( url ) ) return url; - - // Data URI - if ( /^data:.*,.*$/i.test( url ) ) return url; - - // Blob URL - if ( /^blob:.*$/i.test( url ) ) return url; - - // Relative URL - return path + url; - - } - - } - - class InstancedBufferGeometry extends BufferGeometry { - - constructor() { - - super(); - - this.isInstancedBufferGeometry = true; - - this.type = 'InstancedBufferGeometry'; - this.instanceCount = Infinity; - - } - - copy( source ) { - - super.copy( source ); - - this.instanceCount = source.instanceCount; - - return this; - - } - - toJSON() { - - const data = super.toJSON(); - - data.instanceCount = this.instanceCount; - - data.isInstancedBufferGeometry = true; - - return data; - - } - - } - - class BufferGeometryLoader extends Loader { - - constructor( manager ) { - - super( manager ); - - } - - load( url, onLoad, onProgress, onError ) { - - const scope = this; - - const loader = new FileLoader( scope.manager ); - loader.setPath( scope.path ); - loader.setRequestHeader( scope.requestHeader ); - loader.setWithCredentials( scope.withCredentials ); - loader.load( url, function ( text ) { - - try { - - onLoad( scope.parse( JSON.parse( text ) ) ); - - } catch ( e ) { - - if ( onError ) { - - onError( e ); - - } else { - - console.error( e ); - - } - - scope.manager.itemError( url ); - - } - - }, onProgress, onError ); - - } - - parse( json ) { - - const interleavedBufferMap = {}; - const arrayBufferMap = {}; - - function getInterleavedBuffer( json, uuid ) { - - if ( interleavedBufferMap[ uuid ] !== undefined ) return interleavedBufferMap[ uuid ]; - - const interleavedBuffers = json.interleavedBuffers; - const interleavedBuffer = interleavedBuffers[ uuid ]; - - const buffer = getArrayBuffer( json, interleavedBuffer.buffer ); - - const array = getTypedArray( interleavedBuffer.type, buffer ); - const ib = new InterleavedBuffer( array, interleavedBuffer.stride ); - ib.uuid = interleavedBuffer.uuid; - - interleavedBufferMap[ uuid ] = ib; - - return ib; - - } - - function getArrayBuffer( json, uuid ) { - - if ( arrayBufferMap[ uuid ] !== undefined ) return arrayBufferMap[ uuid ]; - - const arrayBuffers = json.arrayBuffers; - const arrayBuffer = arrayBuffers[ uuid ]; - - const ab = new Uint32Array( arrayBuffer ).buffer; - - arrayBufferMap[ uuid ] = ab; - - return ab; - - } - - const geometry = json.isInstancedBufferGeometry ? new InstancedBufferGeometry() : new BufferGeometry(); - - const index = json.data.index; - - if ( index !== undefined ) { - - const typedArray = getTypedArray( index.type, index.array ); - geometry.setIndex( new BufferAttribute( typedArray, 1 ) ); - - } - - const attributes = json.data.attributes; - - for ( const key in attributes ) { - - const attribute = attributes[ key ]; - let bufferAttribute; - - if ( attribute.isInterleavedBufferAttribute ) { - - const interleavedBuffer = getInterleavedBuffer( json.data, attribute.data ); - bufferAttribute = new InterleavedBufferAttribute( interleavedBuffer, attribute.itemSize, attribute.offset, attribute.normalized ); - - } else { - - const typedArray = getTypedArray( attribute.type, attribute.array ); - const bufferAttributeConstr = attribute.isInstancedBufferAttribute ? InstancedBufferAttribute : BufferAttribute; - bufferAttribute = new bufferAttributeConstr( typedArray, attribute.itemSize, attribute.normalized ); - - } - - if ( attribute.name !== undefined ) bufferAttribute.name = attribute.name; - if ( attribute.usage !== undefined ) bufferAttribute.setUsage( attribute.usage ); - - if ( attribute.updateRange !== undefined ) { - - bufferAttribute.updateRange.offset = attribute.updateRange.offset; - bufferAttribute.updateRange.count = attribute.updateRange.count; - - } - - geometry.setAttribute( key, bufferAttribute ); - - } - - const morphAttributes = json.data.morphAttributes; - - if ( morphAttributes ) { - - for ( const key in morphAttributes ) { - - const attributeArray = morphAttributes[ key ]; - - const array = []; - - for ( let i = 0, il = attributeArray.length; i < il; i ++ ) { - - const attribute = attributeArray[ i ]; - let bufferAttribute; - - if ( attribute.isInterleavedBufferAttribute ) { - - const interleavedBuffer = getInterleavedBuffer( json.data, attribute.data ); - bufferAttribute = new InterleavedBufferAttribute( interleavedBuffer, attribute.itemSize, attribute.offset, attribute.normalized ); - - } else { - - const typedArray = getTypedArray( attribute.type, attribute.array ); - bufferAttribute = new BufferAttribute( typedArray, attribute.itemSize, attribute.normalized ); - - } - - if ( attribute.name !== undefined ) bufferAttribute.name = attribute.name; - array.push( bufferAttribute ); - - } - - geometry.morphAttributes[ key ] = array; - - } - - } - - const morphTargetsRelative = json.data.morphTargetsRelative; - - if ( morphTargetsRelative ) { - - geometry.morphTargetsRelative = true; - - } - - const groups = json.data.groups || json.data.drawcalls || json.data.offsets; - - if ( groups !== undefined ) { - - for ( let i = 0, n = groups.length; i !== n; ++ i ) { - - const group = groups[ i ]; - - geometry.addGroup( group.start, group.count, group.materialIndex ); - - } - - } - - const boundingSphere = json.data.boundingSphere; - - if ( boundingSphere !== undefined ) { - - const center = new Vector3(); - - if ( boundingSphere.center !== undefined ) { - - center.fromArray( boundingSphere.center ); - - } - - geometry.boundingSphere = new Sphere( center, boundingSphere.radius ); - - } - - if ( json.name ) geometry.name = json.name; - if ( json.userData ) geometry.userData = json.userData; - - return geometry; - - } - - } - - class ObjectLoader extends Loader { - - constructor( manager ) { - - super( manager ); - - } - - load( url, onLoad, onProgress, onError ) { - - const scope = this; - - const path = ( this.path === '' ) ? LoaderUtils.extractUrlBase( url ) : this.path; - this.resourcePath = this.resourcePath || path; - - const loader = new FileLoader( this.manager ); - loader.setPath( this.path ); - loader.setRequestHeader( this.requestHeader ); - loader.setWithCredentials( this.withCredentials ); - loader.load( url, function ( text ) { - - let json = null; - - try { - - json = JSON.parse( text ); - - } catch ( error ) { - - if ( onError !== undefined ) onError( error ); - - console.error( 'THREE:ObjectLoader: Can\'t parse ' + url + '.', error.message ); - - return; - - } - - const metadata = json.metadata; - - if ( metadata === undefined || metadata.type === undefined || metadata.type.toLowerCase() === 'geometry' ) { - - if ( onError !== undefined ) onError( new Error( 'THREE.ObjectLoader: Can\'t load ' + url ) ); - - console.error( 'THREE.ObjectLoader: Can\'t load ' + url ); - return; - - } - - scope.parse( json, onLoad ); - - }, onProgress, onError ); - - } - - async loadAsync( url, onProgress ) { - - const scope = this; - - const path = ( this.path === '' ) ? LoaderUtils.extractUrlBase( url ) : this.path; - this.resourcePath = this.resourcePath || path; - - const loader = new FileLoader( this.manager ); - loader.setPath( this.path ); - loader.setRequestHeader( this.requestHeader ); - loader.setWithCredentials( this.withCredentials ); - - const text = await loader.loadAsync( url, onProgress ); - - const json = JSON.parse( text ); - - const metadata = json.metadata; - - if ( metadata === undefined || metadata.type === undefined || metadata.type.toLowerCase() === 'geometry' ) { - - throw new Error( 'THREE.ObjectLoader: Can\'t load ' + url ); - - } - - return await scope.parseAsync( json ); - - } - - parse( json, onLoad ) { - - const animations = this.parseAnimations( json.animations ); - const shapes = this.parseShapes( json.shapes ); - const geometries = this.parseGeometries( json.geometries, shapes ); - - const images = this.parseImages( json.images, function () { - - if ( onLoad !== undefined ) onLoad( object ); - - } ); - - const textures = this.parseTextures( json.textures, images ); - const materials = this.parseMaterials( json.materials, textures ); - - const object = this.parseObject( json.object, geometries, materials, textures, animations ); - const skeletons = this.parseSkeletons( json.skeletons, object ); - - this.bindSkeletons( object, skeletons ); - - // - - if ( onLoad !== undefined ) { - - let hasImages = false; - - for ( const uuid in images ) { - - if ( images[ uuid ].data instanceof HTMLImageElement ) { - - hasImages = true; - break; - - } - - } - - if ( hasImages === false ) onLoad( object ); - - } - - return object; - - } - - async parseAsync( json ) { - - const animations = this.parseAnimations( json.animations ); - const shapes = this.parseShapes( json.shapes ); - const geometries = this.parseGeometries( json.geometries, shapes ); - - const images = await this.parseImagesAsync( json.images ); - - const textures = this.parseTextures( json.textures, images ); - const materials = this.parseMaterials( json.materials, textures ); - - const object = this.parseObject( json.object, geometries, materials, textures, animations ); - const skeletons = this.parseSkeletons( json.skeletons, object ); - - this.bindSkeletons( object, skeletons ); - - return object; - - } - - parseShapes( json ) { - - const shapes = {}; - - if ( json !== undefined ) { - - for ( let i = 0, l = json.length; i < l; i ++ ) { - - const shape = new Shape().fromJSON( json[ i ] ); - - shapes[ shape.uuid ] = shape; - - } - - } - - return shapes; - - } - - parseSkeletons( json, object ) { - - const skeletons = {}; - const bones = {}; - - // generate bone lookup table - - object.traverse( function ( child ) { - - if ( child.isBone ) bones[ child.uuid ] = child; - - } ); - - // create skeletons - - if ( json !== undefined ) { - - for ( let i = 0, l = json.length; i < l; i ++ ) { - - const skeleton = new Skeleton().fromJSON( json[ i ], bones ); - - skeletons[ skeleton.uuid ] = skeleton; - - } - - } - - return skeletons; - - } - - parseGeometries( json, shapes ) { - - const geometries = {}; - - if ( json !== undefined ) { - - const bufferGeometryLoader = new BufferGeometryLoader(); - - for ( let i = 0, l = json.length; i < l; i ++ ) { - - let geometry; - const data = json[ i ]; - - switch ( data.type ) { - - case 'BufferGeometry': - case 'InstancedBufferGeometry': - - geometry = bufferGeometryLoader.parse( data ); - break; - - default: - - if ( data.type in Geometries ) { - - geometry = Geometries[ data.type ].fromJSON( data, shapes ); - - } else { - - console.warn( `THREE.ObjectLoader: Unsupported geometry type "${ data.type }"` ); - - } - - } - - geometry.uuid = data.uuid; - - if ( data.name !== undefined ) geometry.name = data.name; - if ( data.userData !== undefined ) geometry.userData = data.userData; - - geometries[ data.uuid ] = geometry; - - } - - } - - return geometries; - - } - - parseMaterials( json, textures ) { - - const cache = {}; // MultiMaterial - const materials = {}; - - if ( json !== undefined ) { - - const loader = new MaterialLoader(); - loader.setTextures( textures ); - - for ( let i = 0, l = json.length; i < l; i ++ ) { - - const data = json[ i ]; - - if ( cache[ data.uuid ] === undefined ) { - - cache[ data.uuid ] = loader.parse( data ); - - } - - materials[ data.uuid ] = cache[ data.uuid ]; - - } - - } - - return materials; - - } - - parseAnimations( json ) { - - const animations = {}; - - if ( json !== undefined ) { - - for ( let i = 0; i < json.length; i ++ ) { - - const data = json[ i ]; - - const clip = AnimationClip.parse( data ); - - animations[ clip.uuid ] = clip; - - } - - } - - return animations; - - } - - parseImages( json, onLoad ) { - - const scope = this; - const images = {}; - - let loader; - - function loadImage( url ) { - - scope.manager.itemStart( url ); - - return loader.load( url, function () { - - scope.manager.itemEnd( url ); - - }, undefined, function () { - - scope.manager.itemError( url ); - scope.manager.itemEnd( url ); - - } ); - - } - - function deserializeImage( image ) { - - if ( typeof image === 'string' ) { - - const url = image; - - const path = /^(\/\/)|([a-z]+:(\/\/)?)/i.test( url ) ? url : scope.resourcePath + url; - - return loadImage( path ); - - } else { - - if ( image.data ) { - - return { - data: getTypedArray( image.type, image.data ), - width: image.width, - height: image.height - }; - - } else { - - return null; - - } - - } - - } - - if ( json !== undefined && json.length > 0 ) { - - const manager = new LoadingManager( onLoad ); - - loader = new ImageLoader( manager ); - loader.setCrossOrigin( this.crossOrigin ); - - for ( let i = 0, il = json.length; i < il; i ++ ) { - - const image = json[ i ]; - const url = image.url; - - if ( Array.isArray( url ) ) { - - // load array of images e.g CubeTexture - - const imageArray = []; - - for ( let j = 0, jl = url.length; j < jl; j ++ ) { - - const currentUrl = url[ j ]; - - const deserializedImage = deserializeImage( currentUrl ); - - if ( deserializedImage !== null ) { - - if ( deserializedImage instanceof HTMLImageElement ) { - - imageArray.push( deserializedImage ); - - } else { - - // special case: handle array of data textures for cube textures - - imageArray.push( new DataTexture( deserializedImage.data, deserializedImage.width, deserializedImage.height ) ); - - } - - } - - } - - images[ image.uuid ] = new Source( imageArray ); - - } else { - - // load single image - - const deserializedImage = deserializeImage( image.url ); - images[ image.uuid ] = new Source( deserializedImage ); - - - } - - } - - } - - return images; - - } - - async parseImagesAsync( json ) { - - const scope = this; - const images = {}; - - let loader; - - async function deserializeImage( image ) { - - if ( typeof image === 'string' ) { - - const url = image; - - const path = /^(\/\/)|([a-z]+:(\/\/)?)/i.test( url ) ? url : scope.resourcePath + url; - - return await loader.loadAsync( path ); - - } else { - - if ( image.data ) { - - return { - data: getTypedArray( image.type, image.data ), - width: image.width, - height: image.height - }; - - } else { - - return null; - - } - - } - - } - - if ( json !== undefined && json.length > 0 ) { - - loader = new ImageLoader( this.manager ); - loader.setCrossOrigin( this.crossOrigin ); - - for ( let i = 0, il = json.length; i < il; i ++ ) { - - const image = json[ i ]; - const url = image.url; - - if ( Array.isArray( url ) ) { - - // load array of images e.g CubeTexture - - const imageArray = []; - - for ( let j = 0, jl = url.length; j < jl; j ++ ) { - - const currentUrl = url[ j ]; - - const deserializedImage = await deserializeImage( currentUrl ); - - if ( deserializedImage !== null ) { - - if ( deserializedImage instanceof HTMLImageElement ) { - - imageArray.push( deserializedImage ); - - } else { - - // special case: handle array of data textures for cube textures - - imageArray.push( new DataTexture( deserializedImage.data, deserializedImage.width, deserializedImage.height ) ); - - } - - } - - } - - images[ image.uuid ] = new Source( imageArray ); - - } else { - - // load single image - - const deserializedImage = await deserializeImage( image.url ); - images[ image.uuid ] = new Source( deserializedImage ); - - } - - } - - } - - return images; - - } - - parseTextures( json, images ) { - - function parseConstant( value, type ) { - - if ( typeof value === 'number' ) return value; - - console.warn( 'THREE.ObjectLoader.parseTexture: Constant should be in numeric form.', value ); - - return type[ value ]; - - } - - const textures = {}; - - if ( json !== undefined ) { - - for ( let i = 0, l = json.length; i < l; i ++ ) { - - const data = json[ i ]; - - if ( data.image === undefined ) { - - console.warn( 'THREE.ObjectLoader: No "image" specified for', data.uuid ); - - } - - if ( images[ data.image ] === undefined ) { - - console.warn( 'THREE.ObjectLoader: Undefined image', data.image ); - - } - - const source = images[ data.image ]; - const image = source.data; - - let texture; - - if ( Array.isArray( image ) ) { - - texture = new CubeTexture(); - - if ( image.length === 6 ) texture.needsUpdate = true; - - } else { - - if ( image && image.data ) { - - texture = new DataTexture(); - - } else { - - texture = new Texture(); - - } - - if ( image ) texture.needsUpdate = true; // textures can have undefined image data - - } - - texture.source = source; - - texture.uuid = data.uuid; - - if ( data.name !== undefined ) texture.name = data.name; - - if ( data.mapping !== undefined ) texture.mapping = parseConstant( data.mapping, TEXTURE_MAPPING ); - - if ( data.offset !== undefined ) texture.offset.fromArray( data.offset ); - if ( data.repeat !== undefined ) texture.repeat.fromArray( data.repeat ); - if ( data.center !== undefined ) texture.center.fromArray( data.center ); - if ( data.rotation !== undefined ) texture.rotation = data.rotation; - - if ( data.wrap !== undefined ) { - - texture.wrapS = parseConstant( data.wrap[ 0 ], TEXTURE_WRAPPING ); - texture.wrapT = parseConstant( data.wrap[ 1 ], TEXTURE_WRAPPING ); - - } - - if ( data.format !== undefined ) texture.format = data.format; - if ( data.internalFormat !== undefined ) texture.internalFormat = data.internalFormat; - if ( data.type !== undefined ) texture.type = data.type; - if ( data.encoding !== undefined ) texture.encoding = data.encoding; - - if ( data.minFilter !== undefined ) texture.minFilter = parseConstant( data.minFilter, TEXTURE_FILTER ); - if ( data.magFilter !== undefined ) texture.magFilter = parseConstant( data.magFilter, TEXTURE_FILTER ); - if ( data.anisotropy !== undefined ) texture.anisotropy = data.anisotropy; - - if ( data.flipY !== undefined ) texture.flipY = data.flipY; - - if ( data.generateMipmaps !== undefined ) texture.generateMipmaps = data.generateMipmaps; - if ( data.premultiplyAlpha !== undefined ) texture.premultiplyAlpha = data.premultiplyAlpha; - if ( data.unpackAlignment !== undefined ) texture.unpackAlignment = data.unpackAlignment; - - if ( data.userData !== undefined ) texture.userData = data.userData; - - textures[ data.uuid ] = texture; - - } - - } - - return textures; - - } - - parseObject( data, geometries, materials, textures, animations ) { - - let object; - - function getGeometry( name ) { - - if ( geometries[ name ] === undefined ) { - - console.warn( 'THREE.ObjectLoader: Undefined geometry', name ); - - } - - return geometries[ name ]; - - } - - function getMaterial( name ) { - - if ( name === undefined ) return undefined; - - if ( Array.isArray( name ) ) { - - const array = []; - - for ( let i = 0, l = name.length; i < l; i ++ ) { - - const uuid = name[ i ]; - - if ( materials[ uuid ] === undefined ) { - - console.warn( 'THREE.ObjectLoader: Undefined material', uuid ); - - } - - array.push( materials[ uuid ] ); - - } - - return array; - - } - - if ( materials[ name ] === undefined ) { - - console.warn( 'THREE.ObjectLoader: Undefined material', name ); - - } - - return materials[ name ]; - - } - - function getTexture( uuid ) { - - if ( textures[ uuid ] === undefined ) { - - console.warn( 'THREE.ObjectLoader: Undefined texture', uuid ); - - } - - return textures[ uuid ]; - - } - - let geometry, material; - - switch ( data.type ) { - - case 'Scene': - - object = new Scene(); - - if ( data.background !== undefined ) { - - if ( Number.isInteger( data.background ) ) { - - object.background = new Color( data.background ); - - } else { - - object.background = getTexture( data.background ); - - } - - } - - if ( data.environment !== undefined ) { - - object.environment = getTexture( data.environment ); - - } - - if ( data.fog !== undefined ) { - - if ( data.fog.type === 'Fog' ) { - - object.fog = new Fog( data.fog.color, data.fog.near, data.fog.far ); - - } else if ( data.fog.type === 'FogExp2' ) { - - object.fog = new FogExp2( data.fog.color, data.fog.density ); - - } - - } - - if ( data.backgroundBlurriness !== undefined ) object.backgroundBlurriness = data.backgroundBlurriness; - if ( data.backgroundIntensity !== undefined ) object.backgroundIntensity = data.backgroundIntensity; - - break; - - case 'PerspectiveCamera': - - object = new PerspectiveCamera( data.fov, data.aspect, data.near, data.far ); - - if ( data.focus !== undefined ) object.focus = data.focus; - if ( data.zoom !== undefined ) object.zoom = data.zoom; - if ( data.filmGauge !== undefined ) object.filmGauge = data.filmGauge; - if ( data.filmOffset !== undefined ) object.filmOffset = data.filmOffset; - if ( data.view !== undefined ) object.view = Object.assign( {}, data.view ); - - break; - - case 'OrthographicCamera': - - object = new OrthographicCamera( data.left, data.right, data.top, data.bottom, data.near, data.far ); - - if ( data.zoom !== undefined ) object.zoom = data.zoom; - if ( data.view !== undefined ) object.view = Object.assign( {}, data.view ); - - break; - - case 'AmbientLight': - - object = new AmbientLight( data.color, data.intensity ); - - break; - - case 'DirectionalLight': - - object = new DirectionalLight( data.color, data.intensity ); - - break; - - case 'PointLight': - - object = new PointLight( data.color, data.intensity, data.distance, data.decay ); - - break; - - case 'RectAreaLight': - - object = new RectAreaLight( data.color, data.intensity, data.width, data.height ); - - break; - - case 'SpotLight': - - object = new SpotLight( data.color, data.intensity, data.distance, data.angle, data.penumbra, data.decay ); - - break; - - case 'HemisphereLight': - - object = new HemisphereLight( data.color, data.groundColor, data.intensity ); - - break; - - case 'LightProbe': - - object = new LightProbe().fromJSON( data ); - - break; - - case 'SkinnedMesh': - - geometry = getGeometry( data.geometry ); - material = getMaterial( data.material ); - - object = new SkinnedMesh( geometry, material ); - - if ( data.bindMode !== undefined ) object.bindMode = data.bindMode; - if ( data.bindMatrix !== undefined ) object.bindMatrix.fromArray( data.bindMatrix ); - if ( data.skeleton !== undefined ) object.skeleton = data.skeleton; - - break; - - case 'Mesh': - - geometry = getGeometry( data.geometry ); - material = getMaterial( data.material ); - - object = new Mesh( geometry, material ); - - break; - - case 'InstancedMesh': - - geometry = getGeometry( data.geometry ); - material = getMaterial( data.material ); - const count = data.count; - const instanceMatrix = data.instanceMatrix; - const instanceColor = data.instanceColor; - - object = new InstancedMesh( geometry, material, count ); - object.instanceMatrix = new InstancedBufferAttribute( new Float32Array( instanceMatrix.array ), 16 ); - if ( instanceColor !== undefined ) object.instanceColor = new InstancedBufferAttribute( new Float32Array( instanceColor.array ), instanceColor.itemSize ); - - break; - - case 'LOD': - - object = new LOD(); - - break; - - case 'Line': - - object = new Line( getGeometry( data.geometry ), getMaterial( data.material ) ); - - break; - - case 'LineLoop': - - object = new LineLoop( getGeometry( data.geometry ), getMaterial( data.material ) ); - - break; - - case 'LineSegments': - - object = new LineSegments( getGeometry( data.geometry ), getMaterial( data.material ) ); - - break; - - case 'PointCloud': - case 'Points': - - object = new Points( getGeometry( data.geometry ), getMaterial( data.material ) ); - - break; - - case 'Sprite': - - object = new Sprite( getMaterial( data.material ) ); - - break; - - case 'Group': - - object = new Group(); - - break; - - case 'Bone': - - object = new Bone(); - - break; - - default: - - object = new Object3D(); - - } - - object.uuid = data.uuid; - - if ( data.name !== undefined ) object.name = data.name; - - if ( data.matrix !== undefined ) { - - object.matrix.fromArray( data.matrix ); - - if ( data.matrixAutoUpdate !== undefined ) object.matrixAutoUpdate = data.matrixAutoUpdate; - if ( object.matrixAutoUpdate ) object.matrix.decompose( object.position, object.quaternion, object.scale ); - - } else { - - if ( data.position !== undefined ) object.position.fromArray( data.position ); - if ( data.rotation !== undefined ) object.rotation.fromArray( data.rotation ); - if ( data.quaternion !== undefined ) object.quaternion.fromArray( data.quaternion ); - if ( data.scale !== undefined ) object.scale.fromArray( data.scale ); - - } - - if ( data.castShadow !== undefined ) object.castShadow = data.castShadow; - if ( data.receiveShadow !== undefined ) object.receiveShadow = data.receiveShadow; - - if ( data.shadow ) { - - if ( data.shadow.bias !== undefined ) object.shadow.bias = data.shadow.bias; - if ( data.shadow.normalBias !== undefined ) object.shadow.normalBias = data.shadow.normalBias; - if ( data.shadow.radius !== undefined ) object.shadow.radius = data.shadow.radius; - if ( data.shadow.mapSize !== undefined ) object.shadow.mapSize.fromArray( data.shadow.mapSize ); - if ( data.shadow.camera !== undefined ) object.shadow.camera = this.parseObject( data.shadow.camera ); - - } - - if ( data.visible !== undefined ) object.visible = data.visible; - if ( data.frustumCulled !== undefined ) object.frustumCulled = data.frustumCulled; - if ( data.renderOrder !== undefined ) object.renderOrder = data.renderOrder; - if ( data.userData !== undefined ) object.userData = data.userData; - if ( data.layers !== undefined ) object.layers.mask = data.layers; - - if ( data.children !== undefined ) { - - const children = data.children; - - for ( let i = 0; i < children.length; i ++ ) { - - object.add( this.parseObject( children[ i ], geometries, materials, textures, animations ) ); - - } - - } - - if ( data.animations !== undefined ) { - - const objectAnimations = data.animations; - - for ( let i = 0; i < objectAnimations.length; i ++ ) { - - const uuid = objectAnimations[ i ]; - - object.animations.push( animations[ uuid ] ); - - } - - } - - if ( data.type === 'LOD' ) { - - if ( data.autoUpdate !== undefined ) object.autoUpdate = data.autoUpdate; - - const levels = data.levels; - - for ( let l = 0; l < levels.length; l ++ ) { - - const level = levels[ l ]; - const child = object.getObjectByProperty( 'uuid', level.object ); - - if ( child !== undefined ) { - - object.addLevel( child, level.distance, level.hysteresis ); - - } - - } - - } - - return object; - - } - - bindSkeletons( object, skeletons ) { - - if ( Object.keys( skeletons ).length === 0 ) return; - - object.traverse( function ( child ) { - - if ( child.isSkinnedMesh === true && child.skeleton !== undefined ) { - - const skeleton = skeletons[ child.skeleton ]; - - if ( skeleton === undefined ) { - - console.warn( 'THREE.ObjectLoader: No skeleton found with UUID:', child.skeleton ); - - } else { - - child.bind( skeleton, child.bindMatrix ); - - } - - } - - } ); - - } - - } - - const TEXTURE_MAPPING = { - UVMapping: UVMapping, - CubeReflectionMapping: CubeReflectionMapping, - CubeRefractionMapping: CubeRefractionMapping, - EquirectangularReflectionMapping: EquirectangularReflectionMapping, - EquirectangularRefractionMapping: EquirectangularRefractionMapping, - CubeUVReflectionMapping: CubeUVReflectionMapping - }; - - const TEXTURE_WRAPPING = { - RepeatWrapping: RepeatWrapping, - ClampToEdgeWrapping: ClampToEdgeWrapping, - MirroredRepeatWrapping: MirroredRepeatWrapping - }; - - const TEXTURE_FILTER = { - NearestFilter: NearestFilter, - NearestMipmapNearestFilter: NearestMipmapNearestFilter, - NearestMipmapLinearFilter: NearestMipmapLinearFilter, - LinearFilter: LinearFilter, - LinearMipmapNearestFilter: LinearMipmapNearestFilter, - LinearMipmapLinearFilter: LinearMipmapLinearFilter - }; - - class ImageBitmapLoader extends Loader { - - constructor( manager ) { - - super( manager ); - - this.isImageBitmapLoader = true; - - if ( typeof createImageBitmap === 'undefined' ) { - - console.warn( 'THREE.ImageBitmapLoader: createImageBitmap() not supported.' ); - - } - - if ( typeof fetch === 'undefined' ) { - - console.warn( 'THREE.ImageBitmapLoader: fetch() not supported.' ); - - } - - this.options = { premultiplyAlpha: 'none' }; - - } - - setOptions( options ) { - - this.options = options; - - return this; - - } - - load( url, onLoad, onProgress, onError ) { - - if ( url === undefined ) url = ''; - - if ( this.path !== undefined ) url = this.path + url; - - url = this.manager.resolveURL( url ); - - const scope = this; - - const cached = Cache.get( url ); - - if ( cached !== undefined ) { - - scope.manager.itemStart( url ); - - setTimeout( function () { - - if ( onLoad ) onLoad( cached ); - - scope.manager.itemEnd( url ); - - }, 0 ); - - return cached; - - } - - const fetchOptions = {}; - fetchOptions.credentials = ( this.crossOrigin === 'anonymous' ) ? 'same-origin' : 'include'; - fetchOptions.headers = this.requestHeader; - - fetch( url, fetchOptions ).then( function ( res ) { - - return res.blob(); - - } ).then( function ( blob ) { - - return createImageBitmap( blob, Object.assign( scope.options, { colorSpaceConversion: 'none' } ) ); - - } ).then( function ( imageBitmap ) { - - Cache.add( url, imageBitmap ); - - if ( onLoad ) onLoad( imageBitmap ); - - scope.manager.itemEnd( url ); - - } ).catch( function ( e ) { - - if ( onError ) onError( e ); - - scope.manager.itemError( url ); - scope.manager.itemEnd( url ); - - } ); - - scope.manager.itemStart( url ); - - } - - } - - let _context; - - class AudioContext { - - static getContext() { - - if ( _context === undefined ) { - - _context = new ( window.AudioContext || window.webkitAudioContext )(); - - } - - return _context; - - } - - static setContext( value ) { - - _context = value; - - } - - } - - class AudioLoader extends Loader { - - constructor( manager ) { - - super( manager ); - - } - - load( url, onLoad, onProgress, onError ) { - - const scope = this; - - const loader = new FileLoader( this.manager ); - loader.setResponseType( 'arraybuffer' ); - loader.setPath( this.path ); - loader.setRequestHeader( this.requestHeader ); - loader.setWithCredentials( this.withCredentials ); - loader.load( url, function ( buffer ) { - - try { - - // Create a copy of the buffer. The `decodeAudioData` method - // detaches the buffer when complete, preventing reuse. - const bufferCopy = buffer.slice( 0 ); - - const context = AudioContext.getContext(); - context.decodeAudioData( bufferCopy, function ( audioBuffer ) { - - onLoad( audioBuffer ); - - } ); - - } catch ( e ) { - - if ( onError ) { - - onError( e ); - - } else { - - console.error( e ); - - } - - scope.manager.itemError( url ); - - } - - }, onProgress, onError ); - - } - - } - - class HemisphereLightProbe extends LightProbe { - - constructor( skyColor, groundColor, intensity = 1 ) { - - super( undefined, intensity ); - - this.isHemisphereLightProbe = true; - - const color1 = new Color().set( skyColor ); - const color2 = new Color().set( groundColor ); - - const sky = new Vector3( color1.r, color1.g, color1.b ); - const ground = new Vector3( color2.r, color2.g, color2.b ); - - // without extra factor of PI in the shader, should = 1 / Math.sqrt( Math.PI ); - const c0 = Math.sqrt( Math.PI ); - const c1 = c0 * Math.sqrt( 0.75 ); - - this.sh.coefficients[ 0 ].copy( sky ).add( ground ).multiplyScalar( c0 ); - this.sh.coefficients[ 1 ].copy( sky ).sub( ground ).multiplyScalar( c1 ); - - } - - } - - class AmbientLightProbe extends LightProbe { - - constructor( color, intensity = 1 ) { - - super( undefined, intensity ); - - this.isAmbientLightProbe = true; - - const color1 = new Color().set( color ); - - // without extra factor of PI in the shader, would be 2 / Math.sqrt( Math.PI ); - this.sh.coefficients[ 0 ].set( color1.r, color1.g, color1.b ).multiplyScalar( 2 * Math.sqrt( Math.PI ) ); - - } - - } - - const _eyeRight = /*@__PURE__*/ new Matrix4(); - const _eyeLeft = /*@__PURE__*/ new Matrix4(); - const _projectionMatrix = /*@__PURE__*/ new Matrix4(); - - class StereoCamera { - - constructor() { - - this.type = 'StereoCamera'; - - this.aspect = 1; - - this.eyeSep = 0.064; - - this.cameraL = new PerspectiveCamera(); - this.cameraL.layers.enable( 1 ); - this.cameraL.matrixAutoUpdate = false; - - this.cameraR = new PerspectiveCamera(); - this.cameraR.layers.enable( 2 ); - this.cameraR.matrixAutoUpdate = false; - - this._cache = { - focus: null, - fov: null, - aspect: null, - near: null, - far: null, - zoom: null, - eyeSep: null - }; - - } - - update( camera ) { - - const cache = this._cache; - - const needsUpdate = cache.focus !== camera.focus || cache.fov !== camera.fov || - cache.aspect !== camera.aspect * this.aspect || cache.near !== camera.near || - cache.far !== camera.far || cache.zoom !== camera.zoom || cache.eyeSep !== this.eyeSep; - - if ( needsUpdate ) { - - cache.focus = camera.focus; - cache.fov = camera.fov; - cache.aspect = camera.aspect * this.aspect; - cache.near = camera.near; - cache.far = camera.far; - cache.zoom = camera.zoom; - cache.eyeSep = this.eyeSep; - - // Off-axis stereoscopic effect based on - // http://paulbourke.net/stereographics/stereorender/ - - _projectionMatrix.copy( camera.projectionMatrix ); - const eyeSepHalf = cache.eyeSep / 2; - const eyeSepOnProjection = eyeSepHalf * cache.near / cache.focus; - const ymax = ( cache.near * Math.tan( DEG2RAD * cache.fov * 0.5 ) ) / cache.zoom; - let xmin, xmax; - - // translate xOffset - - _eyeLeft.elements[ 12 ] = - eyeSepHalf; - _eyeRight.elements[ 12 ] = eyeSepHalf; - - // for left eye - - xmin = - ymax * cache.aspect + eyeSepOnProjection; - xmax = ymax * cache.aspect + eyeSepOnProjection; - - _projectionMatrix.elements[ 0 ] = 2 * cache.near / ( xmax - xmin ); - _projectionMatrix.elements[ 8 ] = ( xmax + xmin ) / ( xmax - xmin ); - - this.cameraL.projectionMatrix.copy( _projectionMatrix ); - - // for right eye - - xmin = - ymax * cache.aspect - eyeSepOnProjection; - xmax = ymax * cache.aspect - eyeSepOnProjection; - - _projectionMatrix.elements[ 0 ] = 2 * cache.near / ( xmax - xmin ); - _projectionMatrix.elements[ 8 ] = ( xmax + xmin ) / ( xmax - xmin ); - - this.cameraR.projectionMatrix.copy( _projectionMatrix ); - - } - - this.cameraL.matrixWorld.copy( camera.matrixWorld ).multiply( _eyeLeft ); - this.cameraR.matrixWorld.copy( camera.matrixWorld ).multiply( _eyeRight ); - - } - - } - - class Clock { - - constructor( autoStart = true ) { - - this.autoStart = autoStart; - - this.startTime = 0; - this.oldTime = 0; - this.elapsedTime = 0; - - this.running = false; - - } - - start() { - - this.startTime = now(); - - this.oldTime = this.startTime; - this.elapsedTime = 0; - this.running = true; - - } - - stop() { - - this.getElapsedTime(); - this.running = false; - this.autoStart = false; - - } - - getElapsedTime() { - - this.getDelta(); - return this.elapsedTime; - - } - - getDelta() { - - let diff = 0; - - if ( this.autoStart && ! this.running ) { - - this.start(); - return 0; - - } - - if ( this.running ) { - - const newTime = now(); - - diff = ( newTime - this.oldTime ) / 1000; - this.oldTime = newTime; - - this.elapsedTime += diff; - - } - - return diff; - - } - - } - - function now() { - - return ( typeof performance === 'undefined' ? Date : performance ).now(); // see #10732 - - } - - const _position$1 = /*@__PURE__*/ new Vector3(); - const _quaternion$1 = /*@__PURE__*/ new Quaternion(); - const _scale$1 = /*@__PURE__*/ new Vector3(); - const _orientation$1 = /*@__PURE__*/ new Vector3(); - - class AudioListener extends Object3D { - - constructor() { - - super(); - - this.type = 'AudioListener'; - - this.context = AudioContext.getContext(); - - this.gain = this.context.createGain(); - this.gain.connect( this.context.destination ); - - this.filter = null; - - this.timeDelta = 0; - - // private - - this._clock = new Clock(); - - } - - getInput() { - - return this.gain; - - } - - removeFilter() { - - if ( this.filter !== null ) { - - this.gain.disconnect( this.filter ); - this.filter.disconnect( this.context.destination ); - this.gain.connect( this.context.destination ); - this.filter = null; - - } - - return this; - - } - - getFilter() { - - return this.filter; - - } - - setFilter( value ) { - - if ( this.filter !== null ) { - - this.gain.disconnect( this.filter ); - this.filter.disconnect( this.context.destination ); - - } else { - - this.gain.disconnect( this.context.destination ); - - } - - this.filter = value; - this.gain.connect( this.filter ); - this.filter.connect( this.context.destination ); - - return this; - - } - - getMasterVolume() { - - return this.gain.gain.value; - - } - - setMasterVolume( value ) { - - this.gain.gain.setTargetAtTime( value, this.context.currentTime, 0.01 ); - - return this; - - } - - updateMatrixWorld( force ) { - - super.updateMatrixWorld( force ); - - const listener = this.context.listener; - const up = this.up; - - this.timeDelta = this._clock.getDelta(); - - this.matrixWorld.decompose( _position$1, _quaternion$1, _scale$1 ); - - _orientation$1.set( 0, 0, - 1 ).applyQuaternion( _quaternion$1 ); - - if ( listener.positionX ) { - - // code path for Chrome (see #14393) - - const endTime = this.context.currentTime + this.timeDelta; - - listener.positionX.linearRampToValueAtTime( _position$1.x, endTime ); - listener.positionY.linearRampToValueAtTime( _position$1.y, endTime ); - listener.positionZ.linearRampToValueAtTime( _position$1.z, endTime ); - listener.forwardX.linearRampToValueAtTime( _orientation$1.x, endTime ); - listener.forwardY.linearRampToValueAtTime( _orientation$1.y, endTime ); - listener.forwardZ.linearRampToValueAtTime( _orientation$1.z, endTime ); - listener.upX.linearRampToValueAtTime( up.x, endTime ); - listener.upY.linearRampToValueAtTime( up.y, endTime ); - listener.upZ.linearRampToValueAtTime( up.z, endTime ); - - } else { - - listener.setPosition( _position$1.x, _position$1.y, _position$1.z ); - listener.setOrientation( _orientation$1.x, _orientation$1.y, _orientation$1.z, up.x, up.y, up.z ); - - } - - } - - } - - class Audio extends Object3D { - - constructor( listener ) { - - super(); - - this.type = 'Audio'; - - this.listener = listener; - this.context = listener.context; - - this.gain = this.context.createGain(); - this.gain.connect( listener.getInput() ); - - this.autoplay = false; - - this.buffer = null; - this.detune = 0; - this.loop = false; - this.loopStart = 0; - this.loopEnd = 0; - this.offset = 0; - this.duration = undefined; - this.playbackRate = 1; - this.isPlaying = false; - this.hasPlaybackControl = true; - this.source = null; - this.sourceType = 'empty'; - - this._startedAt = 0; - this._progress = 0; - this._connected = false; - - this.filters = []; - - } - - getOutput() { - - return this.gain; - - } - - setNodeSource( audioNode ) { - - this.hasPlaybackControl = false; - this.sourceType = 'audioNode'; - this.source = audioNode; - this.connect(); - - return this; - - } - - setMediaElementSource( mediaElement ) { - - this.hasPlaybackControl = false; - this.sourceType = 'mediaNode'; - this.source = this.context.createMediaElementSource( mediaElement ); - this.connect(); - - return this; - - } - - setMediaStreamSource( mediaStream ) { - - this.hasPlaybackControl = false; - this.sourceType = 'mediaStreamNode'; - this.source = this.context.createMediaStreamSource( mediaStream ); - this.connect(); - - return this; - - } - - setBuffer( audioBuffer ) { - - this.buffer = audioBuffer; - this.sourceType = 'buffer'; - - if ( this.autoplay ) this.play(); - - return this; - - } - - play( delay = 0 ) { - - if ( this.isPlaying === true ) { - - console.warn( 'THREE.Audio: Audio is already playing.' ); - return; - - } - - if ( this.hasPlaybackControl === false ) { - - console.warn( 'THREE.Audio: this Audio has no playback control.' ); - return; - - } - - this._startedAt = this.context.currentTime + delay; - - const source = this.context.createBufferSource(); - source.buffer = this.buffer; - source.loop = this.loop; - source.loopStart = this.loopStart; - source.loopEnd = this.loopEnd; - source.onended = this.onEnded.bind( this ); - source.start( this._startedAt, this._progress + this.offset, this.duration ); - - this.isPlaying = true; - - this.source = source; - - this.setDetune( this.detune ); - this.setPlaybackRate( this.playbackRate ); - - return this.connect(); - - } - - pause() { - - if ( this.hasPlaybackControl === false ) { - - console.warn( 'THREE.Audio: this Audio has no playback control.' ); - return; - - } - - if ( this.isPlaying === true ) { - - // update current progress - - this._progress += Math.max( this.context.currentTime - this._startedAt, 0 ) * this.playbackRate; - - if ( this.loop === true ) { - - // ensure _progress does not exceed duration with looped audios - - this._progress = this._progress % ( this.duration || this.buffer.duration ); - - } - - this.source.stop(); - this.source.onended = null; - - this.isPlaying = false; - - } - - return this; - - } - - stop() { - - if ( this.hasPlaybackControl === false ) { - - console.warn( 'THREE.Audio: this Audio has no playback control.' ); - return; - - } - - this._progress = 0; - - if ( this.source !== null ) { - - this.source.stop(); - this.source.onended = null; - - } - - this.isPlaying = false; - - return this; - - } - - connect() { - - if ( this.filters.length > 0 ) { - - this.source.connect( this.filters[ 0 ] ); - - for ( let i = 1, l = this.filters.length; i < l; i ++ ) { - - this.filters[ i - 1 ].connect( this.filters[ i ] ); - - } - - this.filters[ this.filters.length - 1 ].connect( this.getOutput() ); - - } else { - - this.source.connect( this.getOutput() ); - - } - - this._connected = true; - - return this; - - } - - disconnect() { - - if ( this.filters.length > 0 ) { - - this.source.disconnect( this.filters[ 0 ] ); - - for ( let i = 1, l = this.filters.length; i < l; i ++ ) { - - this.filters[ i - 1 ].disconnect( this.filters[ i ] ); - - } - - this.filters[ this.filters.length - 1 ].disconnect( this.getOutput() ); - - } else { - - this.source.disconnect( this.getOutput() ); - - } - - this._connected = false; - - return this; - - } - - getFilters() { - - return this.filters; - - } - - setFilters( value ) { - - if ( ! value ) value = []; - - if ( this._connected === true ) { - - this.disconnect(); - this.filters = value.slice(); - this.connect(); - - } else { - - this.filters = value.slice(); - - } - - return this; - - } - - setDetune( value ) { - - this.detune = value; - - if ( this.source.detune === undefined ) return; // only set detune when available - - if ( this.isPlaying === true ) { - - this.source.detune.setTargetAtTime( this.detune, this.context.currentTime, 0.01 ); - - } - - return this; - - } - - getDetune() { - - return this.detune; - - } - - getFilter() { - - return this.getFilters()[ 0 ]; - - } - - setFilter( filter ) { - - return this.setFilters( filter ? [ filter ] : [] ); - - } - - setPlaybackRate( value ) { - - if ( this.hasPlaybackControl === false ) { - - console.warn( 'THREE.Audio: this Audio has no playback control.' ); - return; - - } - - this.playbackRate = value; - - if ( this.isPlaying === true ) { - - this.source.playbackRate.setTargetAtTime( this.playbackRate, this.context.currentTime, 0.01 ); - - } - - return this; - - } - - getPlaybackRate() { - - return this.playbackRate; - - } - - onEnded() { - - this.isPlaying = false; - - } - - getLoop() { - - if ( this.hasPlaybackControl === false ) { - - console.warn( 'THREE.Audio: this Audio has no playback control.' ); - return false; - - } - - return this.loop; - - } - - setLoop( value ) { - - if ( this.hasPlaybackControl === false ) { - - console.warn( 'THREE.Audio: this Audio has no playback control.' ); - return; - - } - - this.loop = value; - - if ( this.isPlaying === true ) { - - this.source.loop = this.loop; - - } - - return this; - - } - - setLoopStart( value ) { - - this.loopStart = value; - - return this; - - } - - setLoopEnd( value ) { - - this.loopEnd = value; - - return this; - - } - - getVolume() { - - return this.gain.gain.value; - - } - - setVolume( value ) { - - this.gain.gain.setTargetAtTime( value, this.context.currentTime, 0.01 ); - - return this; - - } - - } - - const _position = /*@__PURE__*/ new Vector3(); - const _quaternion = /*@__PURE__*/ new Quaternion(); - const _scale = /*@__PURE__*/ new Vector3(); - const _orientation = /*@__PURE__*/ new Vector3(); - - class PositionalAudio extends Audio { - - constructor( listener ) { - - super( listener ); - - this.panner = this.context.createPanner(); - this.panner.panningModel = 'HRTF'; - this.panner.connect( this.gain ); - - } - - disconnect() { - - super.disconnect(); - - this.panner.disconnect( this.gain ); - - } - - getOutput() { - - return this.panner; - - } - - getRefDistance() { - - return this.panner.refDistance; - - } - - setRefDistance( value ) { - - this.panner.refDistance = value; - - return this; - - } - - getRolloffFactor() { - - return this.panner.rolloffFactor; - - } - - setRolloffFactor( value ) { - - this.panner.rolloffFactor = value; - - return this; - - } - - getDistanceModel() { - - return this.panner.distanceModel; - - } - - setDistanceModel( value ) { - - this.panner.distanceModel = value; - - return this; - - } - - getMaxDistance() { - - return this.panner.maxDistance; - - } - - setMaxDistance( value ) { - - this.panner.maxDistance = value; - - return this; - - } - - setDirectionalCone( coneInnerAngle, coneOuterAngle, coneOuterGain ) { - - this.panner.coneInnerAngle = coneInnerAngle; - this.panner.coneOuterAngle = coneOuterAngle; - this.panner.coneOuterGain = coneOuterGain; - - return this; - - } - - updateMatrixWorld( force ) { - - super.updateMatrixWorld( force ); - - if ( this.hasPlaybackControl === true && this.isPlaying === false ) return; - - this.matrixWorld.decompose( _position, _quaternion, _scale ); - - _orientation.set( 0, 0, 1 ).applyQuaternion( _quaternion ); - - const panner = this.panner; - - if ( panner.positionX ) { - - // code path for Chrome and Firefox (see #14393) - - const endTime = this.context.currentTime + this.listener.timeDelta; - - panner.positionX.linearRampToValueAtTime( _position.x, endTime ); - panner.positionY.linearRampToValueAtTime( _position.y, endTime ); - panner.positionZ.linearRampToValueAtTime( _position.z, endTime ); - panner.orientationX.linearRampToValueAtTime( _orientation.x, endTime ); - panner.orientationY.linearRampToValueAtTime( _orientation.y, endTime ); - panner.orientationZ.linearRampToValueAtTime( _orientation.z, endTime ); - - } else { - - panner.setPosition( _position.x, _position.y, _position.z ); - panner.setOrientation( _orientation.x, _orientation.y, _orientation.z ); - - } - - } - - } - - class AudioAnalyser { - - constructor( audio, fftSize = 2048 ) { - - this.analyser = audio.context.createAnalyser(); - this.analyser.fftSize = fftSize; - - this.data = new Uint8Array( this.analyser.frequencyBinCount ); - - audio.getOutput().connect( this.analyser ); - - } - - - getFrequencyData() { - - this.analyser.getByteFrequencyData( this.data ); - - return this.data; - - } - - getAverageFrequency() { - - let value = 0; - const data = this.getFrequencyData(); - - for ( let i = 0; i < data.length; i ++ ) { - - value += data[ i ]; - - } - - return value / data.length; - - } - - } - - class PropertyMixer { - - constructor( binding, typeName, valueSize ) { - - this.binding = binding; - this.valueSize = valueSize; - - let mixFunction, - mixFunctionAdditive, - setIdentity; - - // buffer layout: [ incoming | accu0 | accu1 | orig | addAccu | (optional work) ] - // - // interpolators can use .buffer as their .result - // the data then goes to 'incoming' - // - // 'accu0' and 'accu1' are used frame-interleaved for - // the cumulative result and are compared to detect - // changes - // - // 'orig' stores the original state of the property - // - // 'add' is used for additive cumulative results - // - // 'work' is optional and is only present for quaternion types. It is used - // to store intermediate quaternion multiplication results - - switch ( typeName ) { - - case 'quaternion': - mixFunction = this._slerp; - mixFunctionAdditive = this._slerpAdditive; - setIdentity = this._setAdditiveIdentityQuaternion; - - this.buffer = new Float64Array( valueSize * 6 ); - this._workIndex = 5; - break; - - case 'string': - case 'bool': - mixFunction = this._select; - - // Use the regular mix function and for additive on these types, - // additive is not relevant for non-numeric types - mixFunctionAdditive = this._select; - - setIdentity = this._setAdditiveIdentityOther; - - this.buffer = new Array( valueSize * 5 ); - break; - - default: - mixFunction = this._lerp; - mixFunctionAdditive = this._lerpAdditive; - setIdentity = this._setAdditiveIdentityNumeric; - - this.buffer = new Float64Array( valueSize * 5 ); - - } - - this._mixBufferRegion = mixFunction; - this._mixBufferRegionAdditive = mixFunctionAdditive; - this._setIdentity = setIdentity; - this._origIndex = 3; - this._addIndex = 4; - - this.cumulativeWeight = 0; - this.cumulativeWeightAdditive = 0; - - this.useCount = 0; - this.referenceCount = 0; - - } - - // accumulate data in the 'incoming' region into 'accu' - accumulate( accuIndex, weight ) { - - // note: happily accumulating nothing when weight = 0, the caller knows - // the weight and shouldn't have made the call in the first place - - const buffer = this.buffer, - stride = this.valueSize, - offset = accuIndex * stride + stride; - - let currentWeight = this.cumulativeWeight; - - if ( currentWeight === 0 ) { - - // accuN := incoming * weight - - for ( let i = 0; i !== stride; ++ i ) { - - buffer[ offset + i ] = buffer[ i ]; - - } - - currentWeight = weight; - - } else { - - // accuN := accuN + incoming * weight - - currentWeight += weight; - const mix = weight / currentWeight; - this._mixBufferRegion( buffer, offset, 0, mix, stride ); - - } - - this.cumulativeWeight = currentWeight; - - } - - // accumulate data in the 'incoming' region into 'add' - accumulateAdditive( weight ) { - - const buffer = this.buffer, - stride = this.valueSize, - offset = stride * this._addIndex; - - if ( this.cumulativeWeightAdditive === 0 ) { - - // add = identity - - this._setIdentity(); - - } - - // add := add + incoming * weight - - this._mixBufferRegionAdditive( buffer, offset, 0, weight, stride ); - this.cumulativeWeightAdditive += weight; - - } - - // apply the state of 'accu' to the binding when accus differ - apply( accuIndex ) { - - const stride = this.valueSize, - buffer = this.buffer, - offset = accuIndex * stride + stride, - - weight = this.cumulativeWeight, - weightAdditive = this.cumulativeWeightAdditive, - - binding = this.binding; - - this.cumulativeWeight = 0; - this.cumulativeWeightAdditive = 0; - - if ( weight < 1 ) { - - // accuN := accuN + original * ( 1 - cumulativeWeight ) - - const originalValueOffset = stride * this._origIndex; - - this._mixBufferRegion( - buffer, offset, originalValueOffset, 1 - weight, stride ); - - } - - if ( weightAdditive > 0 ) { - - // accuN := accuN + additive accuN - - this._mixBufferRegionAdditive( buffer, offset, this._addIndex * stride, 1, stride ); - - } - - for ( let i = stride, e = stride + stride; i !== e; ++ i ) { - - if ( buffer[ i ] !== buffer[ i + stride ] ) { - - // value has changed -> update scene graph - - binding.setValue( buffer, offset ); - break; - - } - - } - - } - - // remember the state of the bound property and copy it to both accus - saveOriginalState() { - - const binding = this.binding; - - const buffer = this.buffer, - stride = this.valueSize, - - originalValueOffset = stride * this._origIndex; - - binding.getValue( buffer, originalValueOffset ); - - // accu[0..1] := orig -- initially detect changes against the original - for ( let i = stride, e = originalValueOffset; i !== e; ++ i ) { - - buffer[ i ] = buffer[ originalValueOffset + ( i % stride ) ]; - - } - - // Add to identity for additive - this._setIdentity(); - - this.cumulativeWeight = 0; - this.cumulativeWeightAdditive = 0; - - } - - // apply the state previously taken via 'saveOriginalState' to the binding - restoreOriginalState() { - - const originalValueOffset = this.valueSize * 3; - this.binding.setValue( this.buffer, originalValueOffset ); - - } - - _setAdditiveIdentityNumeric() { - - const startIndex = this._addIndex * this.valueSize; - const endIndex = startIndex + this.valueSize; - - for ( let i = startIndex; i < endIndex; i ++ ) { - - this.buffer[ i ] = 0; - - } - - } - - _setAdditiveIdentityQuaternion() { - - this._setAdditiveIdentityNumeric(); - this.buffer[ this._addIndex * this.valueSize + 3 ] = 1; - - } - - _setAdditiveIdentityOther() { - - const startIndex = this._origIndex * this.valueSize; - const targetIndex = this._addIndex * this.valueSize; - - for ( let i = 0; i < this.valueSize; i ++ ) { - - this.buffer[ targetIndex + i ] = this.buffer[ startIndex + i ]; - - } - - } - - - // mix functions - - _select( buffer, dstOffset, srcOffset, t, stride ) { - - if ( t >= 0.5 ) { - - for ( let i = 0; i !== stride; ++ i ) { - - buffer[ dstOffset + i ] = buffer[ srcOffset + i ]; - - } - - } - - } - - _slerp( buffer, dstOffset, srcOffset, t ) { - - Quaternion.slerpFlat( buffer, dstOffset, buffer, dstOffset, buffer, srcOffset, t ); - - } - - _slerpAdditive( buffer, dstOffset, srcOffset, t, stride ) { - - const workOffset = this._workIndex * stride; - - // Store result in intermediate buffer offset - Quaternion.multiplyQuaternionsFlat( buffer, workOffset, buffer, dstOffset, buffer, srcOffset ); - - // Slerp to the intermediate result - Quaternion.slerpFlat( buffer, dstOffset, buffer, dstOffset, buffer, workOffset, t ); - - } - - _lerp( buffer, dstOffset, srcOffset, t, stride ) { - - const s = 1 - t; - - for ( let i = 0; i !== stride; ++ i ) { - - const j = dstOffset + i; - - buffer[ j ] = buffer[ j ] * s + buffer[ srcOffset + i ] * t; - - } - - } - - _lerpAdditive( buffer, dstOffset, srcOffset, t, stride ) { - - for ( let i = 0; i !== stride; ++ i ) { - - const j = dstOffset + i; - - buffer[ j ] = buffer[ j ] + buffer[ srcOffset + i ] * t; - - } - - } - - } - - // Characters [].:/ are reserved for track binding syntax. - const _RESERVED_CHARS_RE = '\\[\\]\\.:\\/'; - const _reservedRe = new RegExp( '[' + _RESERVED_CHARS_RE + ']', 'g' ); - - // Attempts to allow node names from any language. ES5's `\w` regexp matches - // only latin characters, and the unicode \p{L} is not yet supported. So - // instead, we exclude reserved characters and match everything else. - const _wordChar = '[^' + _RESERVED_CHARS_RE + ']'; - const _wordCharOrDot = '[^' + _RESERVED_CHARS_RE.replace( '\\.', '' ) + ']'; - - // Parent directories, delimited by '/' or ':'. Currently unused, but must - // be matched to parse the rest of the track name. - const _directoryRe = /*@__PURE__*/ /((?:WC+[\/:])*)/.source.replace( 'WC', _wordChar ); - - // Target node. May contain word characters (a-zA-Z0-9_) and '.' or '-'. - const _nodeRe = /*@__PURE__*/ /(WCOD+)?/.source.replace( 'WCOD', _wordCharOrDot ); - - // Object on target node, and accessor. May not contain reserved - // characters. Accessor may contain any character except closing bracket. - const _objectRe = /*@__PURE__*/ /(?:\.(WC+)(?:\[(.+)\])?)?/.source.replace( 'WC', _wordChar ); - - // Property and accessor. May not contain reserved characters. Accessor may - // contain any non-bracket characters. - const _propertyRe = /*@__PURE__*/ /\.(WC+)(?:\[(.+)\])?/.source.replace( 'WC', _wordChar ); - - const _trackRe = new RegExp( '' - + '^' - + _directoryRe - + _nodeRe - + _objectRe - + _propertyRe - + '$' - ); - - const _supportedObjectNames = [ 'material', 'materials', 'bones', 'map' ]; - - class Composite { - - constructor( targetGroup, path, optionalParsedPath ) { - - const parsedPath = optionalParsedPath || PropertyBinding.parseTrackName( path ); - - this._targetGroup = targetGroup; - this._bindings = targetGroup.subscribe_( path, parsedPath ); - - } - - getValue( array, offset ) { - - this.bind(); // bind all binding - - const firstValidIndex = this._targetGroup.nCachedObjects_, - binding = this._bindings[ firstValidIndex ]; - - // and only call .getValue on the first - if ( binding !== undefined ) binding.getValue( array, offset ); - - } - - setValue( array, offset ) { - - const bindings = this._bindings; - - for ( let i = this._targetGroup.nCachedObjects_, n = bindings.length; i !== n; ++ i ) { - - bindings[ i ].setValue( array, offset ); - - } - - } - - bind() { - - const bindings = this._bindings; - - for ( let i = this._targetGroup.nCachedObjects_, n = bindings.length; i !== n; ++ i ) { - - bindings[ i ].bind(); - - } - - } - - unbind() { - - const bindings = this._bindings; - - for ( let i = this._targetGroup.nCachedObjects_, n = bindings.length; i !== n; ++ i ) { - - bindings[ i ].unbind(); - - } - - } - - } - - // Note: This class uses a State pattern on a per-method basis: - // 'bind' sets 'this.getValue' / 'setValue' and shadows the - // prototype version of these methods with one that represents - // the bound state. When the property is not found, the methods - // become no-ops. - class PropertyBinding { - - constructor( rootNode, path, parsedPath ) { - - this.path = path; - this.parsedPath = parsedPath || PropertyBinding.parseTrackName( path ); - - this.node = PropertyBinding.findNode( rootNode, this.parsedPath.nodeName ); - - this.rootNode = rootNode; - - // initial state of these methods that calls 'bind' - this.getValue = this._getValue_unbound; - this.setValue = this._setValue_unbound; - - } - - - static create( root, path, parsedPath ) { - - if ( ! ( root && root.isAnimationObjectGroup ) ) { - - return new PropertyBinding( root, path, parsedPath ); - - } else { - - return new PropertyBinding.Composite( root, path, parsedPath ); - - } - - } - - /** - * Replaces spaces with underscores and removes unsupported characters from - * node names, to ensure compatibility with parseTrackName(). - * - * @param {string} name Node name to be sanitized. - * @return {string} - */ - static sanitizeNodeName( name ) { - - return name.replace( /\s/g, '_' ).replace( _reservedRe, '' ); - - } - - static parseTrackName( trackName ) { - - const matches = _trackRe.exec( trackName ); - - if ( matches === null ) { - - throw new Error( 'PropertyBinding: Cannot parse trackName: ' + trackName ); - - } - - const results = { - // directoryName: matches[ 1 ], // (tschw) currently unused - nodeName: matches[ 2 ], - objectName: matches[ 3 ], - objectIndex: matches[ 4 ], - propertyName: matches[ 5 ], // required - propertyIndex: matches[ 6 ] - }; - - const lastDot = results.nodeName && results.nodeName.lastIndexOf( '.' ); - - if ( lastDot !== undefined && lastDot !== - 1 ) { - - const objectName = results.nodeName.substring( lastDot + 1 ); - - // Object names must be checked against an allowlist. Otherwise, there - // is no way to parse 'foo.bar.baz': 'baz' must be a property, but - // 'bar' could be the objectName, or part of a nodeName (which can - // include '.' characters). - if ( _supportedObjectNames.indexOf( objectName ) !== - 1 ) { - - results.nodeName = results.nodeName.substring( 0, lastDot ); - results.objectName = objectName; - - } - - } - - if ( results.propertyName === null || results.propertyName.length === 0 ) { - - throw new Error( 'PropertyBinding: can not parse propertyName from trackName: ' + trackName ); - - } - - return results; - - } - - static findNode( root, nodeName ) { - - if ( nodeName === undefined || nodeName === '' || nodeName === '.' || nodeName === - 1 || nodeName === root.name || nodeName === root.uuid ) { - - return root; - - } - - // search into skeleton bones. - if ( root.skeleton ) { - - const bone = root.skeleton.getBoneByName( nodeName ); - - if ( bone !== undefined ) { - - return bone; - - } - - } - - // search into node subtree. - if ( root.children ) { - - const searchNodeSubtree = function ( children ) { - - for ( let i = 0; i < children.length; i ++ ) { - - const childNode = children[ i ]; - - if ( childNode.name === nodeName || childNode.uuid === nodeName ) { - - return childNode; - - } - - const result = searchNodeSubtree( childNode.children ); - - if ( result ) return result; - - } - - return null; - - }; - - const subTreeNode = searchNodeSubtree( root.children ); - - if ( subTreeNode ) { - - return subTreeNode; - - } - - } - - return null; - - } - - // these are used to "bind" a nonexistent property - _getValue_unavailable() {} - _setValue_unavailable() {} - - // Getters - - _getValue_direct( buffer, offset ) { - - buffer[ offset ] = this.targetObject[ this.propertyName ]; - - } - - _getValue_array( buffer, offset ) { - - const source = this.resolvedProperty; - - for ( let i = 0, n = source.length; i !== n; ++ i ) { - - buffer[ offset ++ ] = source[ i ]; - - } - - } - - _getValue_arrayElement( buffer, offset ) { - - buffer[ offset ] = this.resolvedProperty[ this.propertyIndex ]; - - } - - _getValue_toArray( buffer, offset ) { - - this.resolvedProperty.toArray( buffer, offset ); - - } - - // Direct - - _setValue_direct( buffer, offset ) { - - this.targetObject[ this.propertyName ] = buffer[ offset ]; - - } - - _setValue_direct_setNeedsUpdate( buffer, offset ) { - - this.targetObject[ this.propertyName ] = buffer[ offset ]; - this.targetObject.needsUpdate = true; - - } - - _setValue_direct_setMatrixWorldNeedsUpdate( buffer, offset ) { - - this.targetObject[ this.propertyName ] = buffer[ offset ]; - this.targetObject.matrixWorldNeedsUpdate = true; - - } - - // EntireArray - - _setValue_array( buffer, offset ) { - - const dest = this.resolvedProperty; - - for ( let i = 0, n = dest.length; i !== n; ++ i ) { - - dest[ i ] = buffer[ offset ++ ]; - - } - - } - - _setValue_array_setNeedsUpdate( buffer, offset ) { - - const dest = this.resolvedProperty; - - for ( let i = 0, n = dest.length; i !== n; ++ i ) { - - dest[ i ] = buffer[ offset ++ ]; - - } - - this.targetObject.needsUpdate = true; - - } - - _setValue_array_setMatrixWorldNeedsUpdate( buffer, offset ) { - - const dest = this.resolvedProperty; - - for ( let i = 0, n = dest.length; i !== n; ++ i ) { - - dest[ i ] = buffer[ offset ++ ]; - - } - - this.targetObject.matrixWorldNeedsUpdate = true; - - } - - // ArrayElement - - _setValue_arrayElement( buffer, offset ) { - - this.resolvedProperty[ this.propertyIndex ] = buffer[ offset ]; - - } - - _setValue_arrayElement_setNeedsUpdate( buffer, offset ) { - - this.resolvedProperty[ this.propertyIndex ] = buffer[ offset ]; - this.targetObject.needsUpdate = true; - - } - - _setValue_arrayElement_setMatrixWorldNeedsUpdate( buffer, offset ) { - - this.resolvedProperty[ this.propertyIndex ] = buffer[ offset ]; - this.targetObject.matrixWorldNeedsUpdate = true; - - } - - // HasToFromArray - - _setValue_fromArray( buffer, offset ) { - - this.resolvedProperty.fromArray( buffer, offset ); - - } - - _setValue_fromArray_setNeedsUpdate( buffer, offset ) { - - this.resolvedProperty.fromArray( buffer, offset ); - this.targetObject.needsUpdate = true; - - } - - _setValue_fromArray_setMatrixWorldNeedsUpdate( buffer, offset ) { - - this.resolvedProperty.fromArray( buffer, offset ); - this.targetObject.matrixWorldNeedsUpdate = true; - - } - - _getValue_unbound( targetArray, offset ) { - - this.bind(); - this.getValue( targetArray, offset ); - - } - - _setValue_unbound( sourceArray, offset ) { - - this.bind(); - this.setValue( sourceArray, offset ); - - } - - // create getter / setter pair for a property in the scene graph - bind() { - - let targetObject = this.node; - const parsedPath = this.parsedPath; - - const objectName = parsedPath.objectName; - const propertyName = parsedPath.propertyName; - let propertyIndex = parsedPath.propertyIndex; - - if ( ! targetObject ) { - - targetObject = PropertyBinding.findNode( this.rootNode, parsedPath.nodeName ); - - this.node = targetObject; - - } - - // set fail state so we can just 'return' on error - this.getValue = this._getValue_unavailable; - this.setValue = this._setValue_unavailable; - - // ensure there is a value node - if ( ! targetObject ) { - - console.error( 'THREE.PropertyBinding: Trying to update node for track: ' + this.path + ' but it wasn\'t found.' ); - return; - - } - - if ( objectName ) { - - let objectIndex = parsedPath.objectIndex; - - // special cases were we need to reach deeper into the hierarchy to get the face materials.... - switch ( objectName ) { - - case 'materials': - - if ( ! targetObject.material ) { - - console.error( 'THREE.PropertyBinding: Can not bind to material as node does not have a material.', this ); - return; - - } - - if ( ! targetObject.material.materials ) { - - console.error( 'THREE.PropertyBinding: Can not bind to material.materials as node.material does not have a materials array.', this ); - return; - - } - - targetObject = targetObject.material.materials; - - break; - - case 'bones': - - if ( ! targetObject.skeleton ) { - - console.error( 'THREE.PropertyBinding: Can not bind to bones as node does not have a skeleton.', this ); - return; - - } - - // potential future optimization: skip this if propertyIndex is already an integer - // and convert the integer string to a true integer. - - targetObject = targetObject.skeleton.bones; - - // support resolving morphTarget names into indices. - for ( let i = 0; i < targetObject.length; i ++ ) { - - if ( targetObject[ i ].name === objectIndex ) { - - objectIndex = i; - break; - - } - - } - - break; - - case 'map': - - if ( 'map' in targetObject ) { - - targetObject = targetObject.map; - break; - - } - - if ( ! targetObject.material ) { - - console.error( 'THREE.PropertyBinding: Can not bind to material as node does not have a material.', this ); - return; - - } - - if ( ! targetObject.material.map ) { - - console.error( 'THREE.PropertyBinding: Can not bind to material.map as node.material does not have a map.', this ); - return; - - } - - targetObject = targetObject.material.map; - break; - - default: - - if ( targetObject[ objectName ] === undefined ) { - - console.error( 'THREE.PropertyBinding: Can not bind to objectName of node undefined.', this ); - return; - - } - - targetObject = targetObject[ objectName ]; - - } - - - if ( objectIndex !== undefined ) { - - if ( targetObject[ objectIndex ] === undefined ) { - - console.error( 'THREE.PropertyBinding: Trying to bind to objectIndex of objectName, but is undefined.', this, targetObject ); - return; - - } - - targetObject = targetObject[ objectIndex ]; - - } - - } - - // resolve property - const nodeProperty = targetObject[ propertyName ]; - - if ( nodeProperty === undefined ) { - - const nodeName = parsedPath.nodeName; - - console.error( 'THREE.PropertyBinding: Trying to update property for track: ' + nodeName + - '.' + propertyName + ' but it wasn\'t found.', targetObject ); - return; - - } - - // determine versioning scheme - let versioning = this.Versioning.None; - - this.targetObject = targetObject; - - if ( targetObject.needsUpdate !== undefined ) { // material - - versioning = this.Versioning.NeedsUpdate; - - } else if ( targetObject.matrixWorldNeedsUpdate !== undefined ) { // node transform - - versioning = this.Versioning.MatrixWorldNeedsUpdate; - - } - - // determine how the property gets bound - let bindingType = this.BindingType.Direct; - - if ( propertyIndex !== undefined ) { - - // access a sub element of the property array (only primitives are supported right now) - - if ( propertyName === 'morphTargetInfluences' ) { - - // potential optimization, skip this if propertyIndex is already an integer, and convert the integer string to a true integer. - - // support resolving morphTarget names into indices. - if ( ! targetObject.geometry ) { - - console.error( 'THREE.PropertyBinding: Can not bind to morphTargetInfluences because node does not have a geometry.', this ); - return; - - } - - if ( ! targetObject.geometry.morphAttributes ) { - - console.error( 'THREE.PropertyBinding: Can not bind to morphTargetInfluences because node does not have a geometry.morphAttributes.', this ); - return; - - } - - if ( targetObject.morphTargetDictionary[ propertyIndex ] !== undefined ) { - - propertyIndex = targetObject.morphTargetDictionary[ propertyIndex ]; - - } - - } - - bindingType = this.BindingType.ArrayElement; - - this.resolvedProperty = nodeProperty; - this.propertyIndex = propertyIndex; - - } else if ( nodeProperty.fromArray !== undefined && nodeProperty.toArray !== undefined ) { - - // must use copy for Object3D.Euler/Quaternion - - bindingType = this.BindingType.HasFromToArray; - - this.resolvedProperty = nodeProperty; - - } else if ( Array.isArray( nodeProperty ) ) { - - bindingType = this.BindingType.EntireArray; - - this.resolvedProperty = nodeProperty; - - } else { - - this.propertyName = propertyName; - - } - - // select getter / setter - this.getValue = this.GetterByBindingType[ bindingType ]; - this.setValue = this.SetterByBindingTypeAndVersioning[ bindingType ][ versioning ]; - - } - - unbind() { - - this.node = null; - - // back to the prototype version of getValue / setValue - // note: avoiding to mutate the shape of 'this' via 'delete' - this.getValue = this._getValue_unbound; - this.setValue = this._setValue_unbound; - - } - - } - - PropertyBinding.Composite = Composite; - - PropertyBinding.prototype.BindingType = { - Direct: 0, - EntireArray: 1, - ArrayElement: 2, - HasFromToArray: 3 - }; - - PropertyBinding.prototype.Versioning = { - None: 0, - NeedsUpdate: 1, - MatrixWorldNeedsUpdate: 2 - }; - - PropertyBinding.prototype.GetterByBindingType = [ - - PropertyBinding.prototype._getValue_direct, - PropertyBinding.prototype._getValue_array, - PropertyBinding.prototype._getValue_arrayElement, - PropertyBinding.prototype._getValue_toArray, - - ]; - - PropertyBinding.prototype.SetterByBindingTypeAndVersioning = [ - - [ - // Direct - PropertyBinding.prototype._setValue_direct, - PropertyBinding.prototype._setValue_direct_setNeedsUpdate, - PropertyBinding.prototype._setValue_direct_setMatrixWorldNeedsUpdate, - - ], [ - - // EntireArray - - PropertyBinding.prototype._setValue_array, - PropertyBinding.prototype._setValue_array_setNeedsUpdate, - PropertyBinding.prototype._setValue_array_setMatrixWorldNeedsUpdate, - - ], [ - - // ArrayElement - PropertyBinding.prototype._setValue_arrayElement, - PropertyBinding.prototype._setValue_arrayElement_setNeedsUpdate, - PropertyBinding.prototype._setValue_arrayElement_setMatrixWorldNeedsUpdate, - - ], [ - - // HasToFromArray - PropertyBinding.prototype._setValue_fromArray, - PropertyBinding.prototype._setValue_fromArray_setNeedsUpdate, - PropertyBinding.prototype._setValue_fromArray_setMatrixWorldNeedsUpdate, - - ] - - ]; - - /** - * - * A group of objects that receives a shared animation state. - * - * Usage: - * - * - Add objects you would otherwise pass as 'root' to the - * constructor or the .clipAction method of AnimationMixer. - * - * - Instead pass this object as 'root'. - * - * - You can also add and remove objects later when the mixer - * is running. - * - * Note: - * - * Objects of this class appear as one object to the mixer, - * so cache control of the individual objects must be done - * on the group. - * - * Limitation: - * - * - The animated properties must be compatible among the - * all objects in the group. - * - * - A single property can either be controlled through a - * target group or directly, but not both. - */ - - class AnimationObjectGroup { - - constructor() { - - this.isAnimationObjectGroup = true; - - this.uuid = generateUUID(); - - // cached objects followed by the active ones - this._objects = Array.prototype.slice.call( arguments ); - - this.nCachedObjects_ = 0; // threshold - // note: read by PropertyBinding.Composite - - const indices = {}; - this._indicesByUUID = indices; // for bookkeeping - - for ( let i = 0, n = arguments.length; i !== n; ++ i ) { - - indices[ arguments[ i ].uuid ] = i; - - } - - this._paths = []; // inside: string - this._parsedPaths = []; // inside: { we don't care, here } - this._bindings = []; // inside: Array< PropertyBinding > - this._bindingsIndicesByPath = {}; // inside: indices in these arrays - - const scope = this; - - this.stats = { - - objects: { - get total() { - - return scope._objects.length; - - }, - get inUse() { - - return this.total - scope.nCachedObjects_; - - } - }, - get bindingsPerObject() { - - return scope._bindings.length; - - } - - }; - - } - - add() { - - const objects = this._objects, - indicesByUUID = this._indicesByUUID, - paths = this._paths, - parsedPaths = this._parsedPaths, - bindings = this._bindings, - nBindings = bindings.length; - - let knownObject = undefined, - nObjects = objects.length, - nCachedObjects = this.nCachedObjects_; - - for ( let i = 0, n = arguments.length; i !== n; ++ i ) { - - const object = arguments[ i ], - uuid = object.uuid; - let index = indicesByUUID[ uuid ]; - - if ( index === undefined ) { - - // unknown object -> add it to the ACTIVE region - - index = nObjects ++; - indicesByUUID[ uuid ] = index; - objects.push( object ); - - // accounting is done, now do the same for all bindings - - for ( let j = 0, m = nBindings; j !== m; ++ j ) { - - bindings[ j ].push( new PropertyBinding( object, paths[ j ], parsedPaths[ j ] ) ); - - } - - } else if ( index < nCachedObjects ) { - - knownObject = objects[ index ]; - - // move existing object to the ACTIVE region - - const firstActiveIndex = -- nCachedObjects, - lastCachedObject = objects[ firstActiveIndex ]; - - indicesByUUID[ lastCachedObject.uuid ] = index; - objects[ index ] = lastCachedObject; - - indicesByUUID[ uuid ] = firstActiveIndex; - objects[ firstActiveIndex ] = object; - - // accounting is done, now do the same for all bindings - - for ( let j = 0, m = nBindings; j !== m; ++ j ) { - - const bindingsForPath = bindings[ j ], - lastCached = bindingsForPath[ firstActiveIndex ]; - - let binding = bindingsForPath[ index ]; - - bindingsForPath[ index ] = lastCached; - - if ( binding === undefined ) { - - // since we do not bother to create new bindings - // for objects that are cached, the binding may - // or may not exist - - binding = new PropertyBinding( object, paths[ j ], parsedPaths[ j ] ); - - } - - bindingsForPath[ firstActiveIndex ] = binding; - - } - - } else if ( objects[ index ] !== knownObject ) { - - console.error( 'THREE.AnimationObjectGroup: Different objects with the same UUID ' + - 'detected. Clean the caches or recreate your infrastructure when reloading scenes.' ); - - } // else the object is already where we want it to be - - } // for arguments - - this.nCachedObjects_ = nCachedObjects; - - } - - remove() { - - const objects = this._objects, - indicesByUUID = this._indicesByUUID, - bindings = this._bindings, - nBindings = bindings.length; - - let nCachedObjects = this.nCachedObjects_; - - for ( let i = 0, n = arguments.length; i !== n; ++ i ) { - - const object = arguments[ i ], - uuid = object.uuid, - index = indicesByUUID[ uuid ]; - - if ( index !== undefined && index >= nCachedObjects ) { - - // move existing object into the CACHED region - - const lastCachedIndex = nCachedObjects ++, - firstActiveObject = objects[ lastCachedIndex ]; - - indicesByUUID[ firstActiveObject.uuid ] = index; - objects[ index ] = firstActiveObject; - - indicesByUUID[ uuid ] = lastCachedIndex; - objects[ lastCachedIndex ] = object; - - // accounting is done, now do the same for all bindings - - for ( let j = 0, m = nBindings; j !== m; ++ j ) { - - const bindingsForPath = bindings[ j ], - firstActive = bindingsForPath[ lastCachedIndex ], - binding = bindingsForPath[ index ]; - - bindingsForPath[ index ] = firstActive; - bindingsForPath[ lastCachedIndex ] = binding; - - } - - } - - } // for arguments - - this.nCachedObjects_ = nCachedObjects; - - } - - // remove & forget - uncache() { - - const objects = this._objects, - indicesByUUID = this._indicesByUUID, - bindings = this._bindings, - nBindings = bindings.length; - - let nCachedObjects = this.nCachedObjects_, - nObjects = objects.length; - - for ( let i = 0, n = arguments.length; i !== n; ++ i ) { - - const object = arguments[ i ], - uuid = object.uuid, - index = indicesByUUID[ uuid ]; - - if ( index !== undefined ) { - - delete indicesByUUID[ uuid ]; - - if ( index < nCachedObjects ) { - - // object is cached, shrink the CACHED region - - const firstActiveIndex = -- nCachedObjects, - lastCachedObject = objects[ firstActiveIndex ], - lastIndex = -- nObjects, - lastObject = objects[ lastIndex ]; - - // last cached object takes this object's place - indicesByUUID[ lastCachedObject.uuid ] = index; - objects[ index ] = lastCachedObject; - - // last object goes to the activated slot and pop - indicesByUUID[ lastObject.uuid ] = firstActiveIndex; - objects[ firstActiveIndex ] = lastObject; - objects.pop(); - - // accounting is done, now do the same for all bindings - - for ( let j = 0, m = nBindings; j !== m; ++ j ) { - - const bindingsForPath = bindings[ j ], - lastCached = bindingsForPath[ firstActiveIndex ], - last = bindingsForPath[ lastIndex ]; - - bindingsForPath[ index ] = lastCached; - bindingsForPath[ firstActiveIndex ] = last; - bindingsForPath.pop(); - - } - - } else { - - // object is active, just swap with the last and pop - - const lastIndex = -- nObjects, - lastObject = objects[ lastIndex ]; - - if ( lastIndex > 0 ) { - - indicesByUUID[ lastObject.uuid ] = index; - - } - - objects[ index ] = lastObject; - objects.pop(); - - // accounting is done, now do the same for all bindings - - for ( let j = 0, m = nBindings; j !== m; ++ j ) { - - const bindingsForPath = bindings[ j ]; - - bindingsForPath[ index ] = bindingsForPath[ lastIndex ]; - bindingsForPath.pop(); - - } - - } // cached or active - - } // if object is known - - } // for arguments - - this.nCachedObjects_ = nCachedObjects; - - } - - // Internal interface used by befriended PropertyBinding.Composite: - - subscribe_( path, parsedPath ) { - - // returns an array of bindings for the given path that is changed - // according to the contained objects in the group - - const indicesByPath = this._bindingsIndicesByPath; - let index = indicesByPath[ path ]; - const bindings = this._bindings; - - if ( index !== undefined ) return bindings[ index ]; - - const paths = this._paths, - parsedPaths = this._parsedPaths, - objects = this._objects, - nObjects = objects.length, - nCachedObjects = this.nCachedObjects_, - bindingsForPath = new Array( nObjects ); - - index = bindings.length; - - indicesByPath[ path ] = index; - - paths.push( path ); - parsedPaths.push( parsedPath ); - bindings.push( bindingsForPath ); - - for ( let i = nCachedObjects, n = objects.length; i !== n; ++ i ) { - - const object = objects[ i ]; - bindingsForPath[ i ] = new PropertyBinding( object, path, parsedPath ); - - } - - return bindingsForPath; - - } - - unsubscribe_( path ) { - - // tells the group to forget about a property path and no longer - // update the array previously obtained with 'subscribe_' - - const indicesByPath = this._bindingsIndicesByPath, - index = indicesByPath[ path ]; - - if ( index !== undefined ) { - - const paths = this._paths, - parsedPaths = this._parsedPaths, - bindings = this._bindings, - lastBindingsIndex = bindings.length - 1, - lastBindings = bindings[ lastBindingsIndex ], - lastBindingsPath = path[ lastBindingsIndex ]; - - indicesByPath[ lastBindingsPath ] = index; - - bindings[ index ] = lastBindings; - bindings.pop(); - - parsedPaths[ index ] = parsedPaths[ lastBindingsIndex ]; - parsedPaths.pop(); - - paths[ index ] = paths[ lastBindingsIndex ]; - paths.pop(); - - } - - } - - } - - class AnimationAction { - - constructor( mixer, clip, localRoot = null, blendMode = clip.blendMode ) { - - this._mixer = mixer; - this._clip = clip; - this._localRoot = localRoot; - this.blendMode = blendMode; - - const tracks = clip.tracks, - nTracks = tracks.length, - interpolants = new Array( nTracks ); - - const interpolantSettings = { - endingStart: ZeroCurvatureEnding, - endingEnd: ZeroCurvatureEnding - }; - - for ( let i = 0; i !== nTracks; ++ i ) { - - const interpolant = tracks[ i ].createInterpolant( null ); - interpolants[ i ] = interpolant; - interpolant.settings = interpolantSettings; - - } - - this._interpolantSettings = interpolantSettings; - - this._interpolants = interpolants; // bound by the mixer - - // inside: PropertyMixer (managed by the mixer) - this._propertyBindings = new Array( nTracks ); - - this._cacheIndex = null; // for the memory manager - this._byClipCacheIndex = null; // for the memory manager - - this._timeScaleInterpolant = null; - this._weightInterpolant = null; - - this.loop = LoopRepeat; - this._loopCount = - 1; - - // global mixer time when the action is to be started - // it's set back to 'null' upon start of the action - this._startTime = null; - - // scaled local time of the action - // gets clamped or wrapped to 0..clip.duration according to loop - this.time = 0; - - this.timeScale = 1; - this._effectiveTimeScale = 1; - - this.weight = 1; - this._effectiveWeight = 1; - - this.repetitions = Infinity; // no. of repetitions when looping - - this.paused = false; // true -> zero effective time scale - this.enabled = true; // false -> zero effective weight - - this.clampWhenFinished = false;// keep feeding the last frame? - - this.zeroSlopeAtStart = true;// for smooth interpolation w/o separate - this.zeroSlopeAtEnd = true;// clips for start, loop and end - - } - - // State & Scheduling - - play() { - - this._mixer._activateAction( this ); - - return this; - - } - - stop() { - - this._mixer._deactivateAction( this ); - - return this.reset(); - - } - - reset() { - - this.paused = false; - this.enabled = true; - - this.time = 0; // restart clip - this._loopCount = - 1;// forget previous loops - this._startTime = null;// forget scheduling - - return this.stopFading().stopWarping(); - - } - - isRunning() { - - return this.enabled && ! this.paused && this.timeScale !== 0 && - this._startTime === null && this._mixer._isActiveAction( this ); - - } - - // return true when play has been called - isScheduled() { - - return this._mixer._isActiveAction( this ); - - } - - startAt( time ) { - - this._startTime = time; - - return this; - - } - - setLoop( mode, repetitions ) { - - this.loop = mode; - this.repetitions = repetitions; - - return this; - - } - - // Weight - - // set the weight stopping any scheduled fading - // although .enabled = false yields an effective weight of zero, this - // method does *not* change .enabled, because it would be confusing - setEffectiveWeight( weight ) { - - this.weight = weight; - - // note: same logic as when updated at runtime - this._effectiveWeight = this.enabled ? weight : 0; - - return this.stopFading(); - - } - - // return the weight considering fading and .enabled - getEffectiveWeight() { - - return this._effectiveWeight; - - } - - fadeIn( duration ) { - - return this._scheduleFading( duration, 0, 1 ); - - } - - fadeOut( duration ) { - - return this._scheduleFading( duration, 1, 0 ); - - } - - crossFadeFrom( fadeOutAction, duration, warp ) { - - fadeOutAction.fadeOut( duration ); - this.fadeIn( duration ); - - if ( warp ) { - - const fadeInDuration = this._clip.duration, - fadeOutDuration = fadeOutAction._clip.duration, - - startEndRatio = fadeOutDuration / fadeInDuration, - endStartRatio = fadeInDuration / fadeOutDuration; - - fadeOutAction.warp( 1.0, startEndRatio, duration ); - this.warp( endStartRatio, 1.0, duration ); - - } - - return this; - - } - - crossFadeTo( fadeInAction, duration, warp ) { - - return fadeInAction.crossFadeFrom( this, duration, warp ); - - } - - stopFading() { - - const weightInterpolant = this._weightInterpolant; - - if ( weightInterpolant !== null ) { - - this._weightInterpolant = null; - this._mixer._takeBackControlInterpolant( weightInterpolant ); - - } - - return this; - - } - - // Time Scale Control - - // set the time scale stopping any scheduled warping - // although .paused = true yields an effective time scale of zero, this - // method does *not* change .paused, because it would be confusing - setEffectiveTimeScale( timeScale ) { - - this.timeScale = timeScale; - this._effectiveTimeScale = this.paused ? 0 : timeScale; - - return this.stopWarping(); - - } - - // return the time scale considering warping and .paused - getEffectiveTimeScale() { - - return this._effectiveTimeScale; - - } - - setDuration( duration ) { - - this.timeScale = this._clip.duration / duration; - - return this.stopWarping(); - - } - - syncWith( action ) { - - this.time = action.time; - this.timeScale = action.timeScale; - - return this.stopWarping(); - - } - - halt( duration ) { - - return this.warp( this._effectiveTimeScale, 0, duration ); - - } - - warp( startTimeScale, endTimeScale, duration ) { - - const mixer = this._mixer, - now = mixer.time, - timeScale = this.timeScale; - - let interpolant = this._timeScaleInterpolant; - - if ( interpolant === null ) { - - interpolant = mixer._lendControlInterpolant(); - this._timeScaleInterpolant = interpolant; - - } - - const times = interpolant.parameterPositions, - values = interpolant.sampleValues; - - times[ 0 ] = now; - times[ 1 ] = now + duration; - - values[ 0 ] = startTimeScale / timeScale; - values[ 1 ] = endTimeScale / timeScale; - - return this; - - } - - stopWarping() { - - const timeScaleInterpolant = this._timeScaleInterpolant; - - if ( timeScaleInterpolant !== null ) { - - this._timeScaleInterpolant = null; - this._mixer._takeBackControlInterpolant( timeScaleInterpolant ); - - } - - return this; - - } - - // Object Accessors - - getMixer() { - - return this._mixer; - - } - - getClip() { - - return this._clip; - - } - - getRoot() { - - return this._localRoot || this._mixer._root; - - } - - // Interna - - _update( time, deltaTime, timeDirection, accuIndex ) { - - // called by the mixer - - if ( ! this.enabled ) { - - // call ._updateWeight() to update ._effectiveWeight - - this._updateWeight( time ); - return; - - } - - const startTime = this._startTime; - - if ( startTime !== null ) { - - // check for scheduled start of action - - const timeRunning = ( time - startTime ) * timeDirection; - if ( timeRunning < 0 || timeDirection === 0 ) { - - deltaTime = 0; - - } else { - - - this._startTime = null; // unschedule - deltaTime = timeDirection * timeRunning; - - } - - } - - // apply time scale and advance time - - deltaTime *= this._updateTimeScale( time ); - const clipTime = this._updateTime( deltaTime ); - - // note: _updateTime may disable the action resulting in - // an effective weight of 0 - - const weight = this._updateWeight( time ); - - if ( weight > 0 ) { - - const interpolants = this._interpolants; - const propertyMixers = this._propertyBindings; - - switch ( this.blendMode ) { - - case AdditiveAnimationBlendMode: - - for ( let j = 0, m = interpolants.length; j !== m; ++ j ) { - - interpolants[ j ].evaluate( clipTime ); - propertyMixers[ j ].accumulateAdditive( weight ); - - } - - break; - - case NormalAnimationBlendMode: - default: - - for ( let j = 0, m = interpolants.length; j !== m; ++ j ) { - - interpolants[ j ].evaluate( clipTime ); - propertyMixers[ j ].accumulate( accuIndex, weight ); - - } - - } - - } - - } - - _updateWeight( time ) { - - let weight = 0; - - if ( this.enabled ) { - - weight = this.weight; - const interpolant = this._weightInterpolant; - - if ( interpolant !== null ) { - - const interpolantValue = interpolant.evaluate( time )[ 0 ]; - - weight *= interpolantValue; - - if ( time > interpolant.parameterPositions[ 1 ] ) { - - this.stopFading(); - - if ( interpolantValue === 0 ) { - - // faded out, disable - this.enabled = false; - - } - - } - - } - - } - - this._effectiveWeight = weight; - return weight; - - } - - _updateTimeScale( time ) { - - let timeScale = 0; - - if ( ! this.paused ) { - - timeScale = this.timeScale; - - const interpolant = this._timeScaleInterpolant; - - if ( interpolant !== null ) { - - const interpolantValue = interpolant.evaluate( time )[ 0 ]; - - timeScale *= interpolantValue; - - if ( time > interpolant.parameterPositions[ 1 ] ) { - - this.stopWarping(); - - if ( timeScale === 0 ) { - - // motion has halted, pause - this.paused = true; - - } else { - - // warp done - apply final time scale - this.timeScale = timeScale; - - } - - } - - } - - } - - this._effectiveTimeScale = timeScale; - return timeScale; - - } - - _updateTime( deltaTime ) { - - const duration = this._clip.duration; - const loop = this.loop; - - let time = this.time + deltaTime; - let loopCount = this._loopCount; - - const pingPong = ( loop === LoopPingPong ); - - if ( deltaTime === 0 ) { - - if ( loopCount === - 1 ) return time; - - return ( pingPong && ( loopCount & 1 ) === 1 ) ? duration - time : time; - - } - - if ( loop === LoopOnce ) { - - if ( loopCount === - 1 ) { - - // just started - - this._loopCount = 0; - this._setEndings( true, true, false ); - - } - - handle_stop: { - - if ( time >= duration ) { - - time = duration; - - } else if ( time < 0 ) { - - time = 0; - - } else { - - this.time = time; - - break handle_stop; - - } - - if ( this.clampWhenFinished ) this.paused = true; - else this.enabled = false; - - this.time = time; - - this._mixer.dispatchEvent( { - type: 'finished', action: this, - direction: deltaTime < 0 ? - 1 : 1 - } ); - - } - - } else { // repetitive Repeat or PingPong - - if ( loopCount === - 1 ) { - - // just started - - if ( deltaTime >= 0 ) { - - loopCount = 0; - - this._setEndings( true, this.repetitions === 0, pingPong ); - - } else { - - // when looping in reverse direction, the initial - // transition through zero counts as a repetition, - // so leave loopCount at -1 - - this._setEndings( this.repetitions === 0, true, pingPong ); - - } - - } - - if ( time >= duration || time < 0 ) { - - // wrap around - - const loopDelta = Math.floor( time / duration ); // signed - time -= duration * loopDelta; - - loopCount += Math.abs( loopDelta ); - - const pending = this.repetitions - loopCount; - - if ( pending <= 0 ) { - - // have to stop (switch state, clamp time, fire event) - - if ( this.clampWhenFinished ) this.paused = true; - else this.enabled = false; - - time = deltaTime > 0 ? duration : 0; - - this.time = time; - - this._mixer.dispatchEvent( { - type: 'finished', action: this, - direction: deltaTime > 0 ? 1 : - 1 - } ); - - } else { - - // keep running - - if ( pending === 1 ) { - - // entering the last round - - const atStart = deltaTime < 0; - this._setEndings( atStart, ! atStart, pingPong ); - - } else { - - this._setEndings( false, false, pingPong ); - - } - - this._loopCount = loopCount; - - this.time = time; - - this._mixer.dispatchEvent( { - type: 'loop', action: this, loopDelta: loopDelta - } ); - - } - - } else { - - this.time = time; - - } - - if ( pingPong && ( loopCount & 1 ) === 1 ) { - - // invert time for the "pong round" - - return duration - time; - - } - - } - - return time; - - } - - _setEndings( atStart, atEnd, pingPong ) { - - const settings = this._interpolantSettings; - - if ( pingPong ) { - - settings.endingStart = ZeroSlopeEnding; - settings.endingEnd = ZeroSlopeEnding; - - } else { - - // assuming for LoopOnce atStart == atEnd == true - - if ( atStart ) { - - settings.endingStart = this.zeroSlopeAtStart ? ZeroSlopeEnding : ZeroCurvatureEnding; - - } else { - - settings.endingStart = WrapAroundEnding; - - } - - if ( atEnd ) { - - settings.endingEnd = this.zeroSlopeAtEnd ? ZeroSlopeEnding : ZeroCurvatureEnding; - - } else { - - settings.endingEnd = WrapAroundEnding; - - } - - } - - } - - _scheduleFading( duration, weightNow, weightThen ) { - - const mixer = this._mixer, now = mixer.time; - let interpolant = this._weightInterpolant; - - if ( interpolant === null ) { - - interpolant = mixer._lendControlInterpolant(); - this._weightInterpolant = interpolant; - - } - - const times = interpolant.parameterPositions, - values = interpolant.sampleValues; - - times[ 0 ] = now; - values[ 0 ] = weightNow; - times[ 1 ] = now + duration; - values[ 1 ] = weightThen; - - return this; - - } - - } - - const _controlInterpolantsResultBuffer = new Float32Array( 1 ); - - - class AnimationMixer extends EventDispatcher { - - constructor( root ) { - - super(); - - this._root = root; - this._initMemoryManager(); - this._accuIndex = 0; - this.time = 0; - this.timeScale = 1.0; - - } - - _bindAction( action, prototypeAction ) { - - const root = action._localRoot || this._root, - tracks = action._clip.tracks, - nTracks = tracks.length, - bindings = action._propertyBindings, - interpolants = action._interpolants, - rootUuid = root.uuid, - bindingsByRoot = this._bindingsByRootAndName; - - let bindingsByName = bindingsByRoot[ rootUuid ]; - - if ( bindingsByName === undefined ) { - - bindingsByName = {}; - bindingsByRoot[ rootUuid ] = bindingsByName; - - } - - for ( let i = 0; i !== nTracks; ++ i ) { - - const track = tracks[ i ], - trackName = track.name; - - let binding = bindingsByName[ trackName ]; - - if ( binding !== undefined ) { - - ++ binding.referenceCount; - bindings[ i ] = binding; - - } else { - - binding = bindings[ i ]; - - if ( binding !== undefined ) { - - // existing binding, make sure the cache knows - - if ( binding._cacheIndex === null ) { - - ++ binding.referenceCount; - this._addInactiveBinding( binding, rootUuid, trackName ); - - } - - continue; - - } - - const path = prototypeAction && prototypeAction. - _propertyBindings[ i ].binding.parsedPath; - - binding = new PropertyMixer( - PropertyBinding.create( root, trackName, path ), - track.ValueTypeName, track.getValueSize() ); - - ++ binding.referenceCount; - this._addInactiveBinding( binding, rootUuid, trackName ); - - bindings[ i ] = binding; - - } - - interpolants[ i ].resultBuffer = binding.buffer; - - } - - } - - _activateAction( action ) { - - if ( ! this._isActiveAction( action ) ) { - - if ( action._cacheIndex === null ) { - - // this action has been forgotten by the cache, but the user - // appears to be still using it -> rebind - - const rootUuid = ( action._localRoot || this._root ).uuid, - clipUuid = action._clip.uuid, - actionsForClip = this._actionsByClip[ clipUuid ]; - - this._bindAction( action, - actionsForClip && actionsForClip.knownActions[ 0 ] ); - - this._addInactiveAction( action, clipUuid, rootUuid ); - - } - - const bindings = action._propertyBindings; - - // increment reference counts / sort out state - for ( let i = 0, n = bindings.length; i !== n; ++ i ) { - - const binding = bindings[ i ]; - - if ( binding.useCount ++ === 0 ) { - - this._lendBinding( binding ); - binding.saveOriginalState(); - - } - - } - - this._lendAction( action ); - - } - - } - - _deactivateAction( action ) { - - if ( this._isActiveAction( action ) ) { - - const bindings = action._propertyBindings; - - // decrement reference counts / sort out state - for ( let i = 0, n = bindings.length; i !== n; ++ i ) { - - const binding = bindings[ i ]; - - if ( -- binding.useCount === 0 ) { - - binding.restoreOriginalState(); - this._takeBackBinding( binding ); - - } - - } - - this._takeBackAction( action ); - - } - - } - - // Memory manager - - _initMemoryManager() { - - this._actions = []; // 'nActiveActions' followed by inactive ones - this._nActiveActions = 0; - - this._actionsByClip = {}; - // inside: - // { - // knownActions: Array< AnimationAction > - used as prototypes - // actionByRoot: AnimationAction - lookup - // } - - - this._bindings = []; // 'nActiveBindings' followed by inactive ones - this._nActiveBindings = 0; - - this._bindingsByRootAndName = {}; // inside: Map< name, PropertyMixer > - - - this._controlInterpolants = []; // same game as above - this._nActiveControlInterpolants = 0; - - const scope = this; - - this.stats = { - - actions: { - get total() { - - return scope._actions.length; - - }, - get inUse() { - - return scope._nActiveActions; - - } - }, - bindings: { - get total() { - - return scope._bindings.length; - - }, - get inUse() { - - return scope._nActiveBindings; - - } - }, - controlInterpolants: { - get total() { - - return scope._controlInterpolants.length; - - }, - get inUse() { - - return scope._nActiveControlInterpolants; - - } - } - - }; - - } - - // Memory management for AnimationAction objects - - _isActiveAction( action ) { - - const index = action._cacheIndex; - return index !== null && index < this._nActiveActions; - - } - - _addInactiveAction( action, clipUuid, rootUuid ) { - - const actions = this._actions, - actionsByClip = this._actionsByClip; - - let actionsForClip = actionsByClip[ clipUuid ]; - - if ( actionsForClip === undefined ) { - - actionsForClip = { - - knownActions: [ action ], - actionByRoot: {} - - }; - - action._byClipCacheIndex = 0; - - actionsByClip[ clipUuid ] = actionsForClip; - - } else { - - const knownActions = actionsForClip.knownActions; - - action._byClipCacheIndex = knownActions.length; - knownActions.push( action ); - - } - - action._cacheIndex = actions.length; - actions.push( action ); - - actionsForClip.actionByRoot[ rootUuid ] = action; - - } - - _removeInactiveAction( action ) { - - const actions = this._actions, - lastInactiveAction = actions[ actions.length - 1 ], - cacheIndex = action._cacheIndex; - - lastInactiveAction._cacheIndex = cacheIndex; - actions[ cacheIndex ] = lastInactiveAction; - actions.pop(); - - action._cacheIndex = null; - - - const clipUuid = action._clip.uuid, - actionsByClip = this._actionsByClip, - actionsForClip = actionsByClip[ clipUuid ], - knownActionsForClip = actionsForClip.knownActions, - - lastKnownAction = - knownActionsForClip[ knownActionsForClip.length - 1 ], - - byClipCacheIndex = action._byClipCacheIndex; - - lastKnownAction._byClipCacheIndex = byClipCacheIndex; - knownActionsForClip[ byClipCacheIndex ] = lastKnownAction; - knownActionsForClip.pop(); - - action._byClipCacheIndex = null; - - - const actionByRoot = actionsForClip.actionByRoot, - rootUuid = ( action._localRoot || this._root ).uuid; - - delete actionByRoot[ rootUuid ]; - - if ( knownActionsForClip.length === 0 ) { - - delete actionsByClip[ clipUuid ]; - - } - - this._removeInactiveBindingsForAction( action ); - - } - - _removeInactiveBindingsForAction( action ) { - - const bindings = action._propertyBindings; - - for ( let i = 0, n = bindings.length; i !== n; ++ i ) { - - const binding = bindings[ i ]; - - if ( -- binding.referenceCount === 0 ) { - - this._removeInactiveBinding( binding ); - - } - - } - - } - - _lendAction( action ) { - - // [ active actions | inactive actions ] - // [ active actions >| inactive actions ] - // s a - // <-swap-> - // a s - - const actions = this._actions, - prevIndex = action._cacheIndex, - - lastActiveIndex = this._nActiveActions ++, - - firstInactiveAction = actions[ lastActiveIndex ]; - - action._cacheIndex = lastActiveIndex; - actions[ lastActiveIndex ] = action; - - firstInactiveAction._cacheIndex = prevIndex; - actions[ prevIndex ] = firstInactiveAction; - - } - - _takeBackAction( action ) { - - // [ active actions | inactive actions ] - // [ active actions |< inactive actions ] - // a s - // <-swap-> - // s a - - const actions = this._actions, - prevIndex = action._cacheIndex, - - firstInactiveIndex = -- this._nActiveActions, - - lastActiveAction = actions[ firstInactiveIndex ]; - - action._cacheIndex = firstInactiveIndex; - actions[ firstInactiveIndex ] = action; - - lastActiveAction._cacheIndex = prevIndex; - actions[ prevIndex ] = lastActiveAction; - - } - - // Memory management for PropertyMixer objects - - _addInactiveBinding( binding, rootUuid, trackName ) { - - const bindingsByRoot = this._bindingsByRootAndName, - bindings = this._bindings; - - let bindingByName = bindingsByRoot[ rootUuid ]; - - if ( bindingByName === undefined ) { - - bindingByName = {}; - bindingsByRoot[ rootUuid ] = bindingByName; - - } - - bindingByName[ trackName ] = binding; - - binding._cacheIndex = bindings.length; - bindings.push( binding ); - - } - - _removeInactiveBinding( binding ) { - - const bindings = this._bindings, - propBinding = binding.binding, - rootUuid = propBinding.rootNode.uuid, - trackName = propBinding.path, - bindingsByRoot = this._bindingsByRootAndName, - bindingByName = bindingsByRoot[ rootUuid ], - - lastInactiveBinding = bindings[ bindings.length - 1 ], - cacheIndex = binding._cacheIndex; - - lastInactiveBinding._cacheIndex = cacheIndex; - bindings[ cacheIndex ] = lastInactiveBinding; - bindings.pop(); - - delete bindingByName[ trackName ]; - - if ( Object.keys( bindingByName ).length === 0 ) { - - delete bindingsByRoot[ rootUuid ]; - - } - - } - - _lendBinding( binding ) { - - const bindings = this._bindings, - prevIndex = binding._cacheIndex, - - lastActiveIndex = this._nActiveBindings ++, - - firstInactiveBinding = bindings[ lastActiveIndex ]; - - binding._cacheIndex = lastActiveIndex; - bindings[ lastActiveIndex ] = binding; - - firstInactiveBinding._cacheIndex = prevIndex; - bindings[ prevIndex ] = firstInactiveBinding; - - } - - _takeBackBinding( binding ) { - - const bindings = this._bindings, - prevIndex = binding._cacheIndex, - - firstInactiveIndex = -- this._nActiveBindings, - - lastActiveBinding = bindings[ firstInactiveIndex ]; - - binding._cacheIndex = firstInactiveIndex; - bindings[ firstInactiveIndex ] = binding; - - lastActiveBinding._cacheIndex = prevIndex; - bindings[ prevIndex ] = lastActiveBinding; - - } - - - // Memory management of Interpolants for weight and time scale - - _lendControlInterpolant() { - - const interpolants = this._controlInterpolants, - lastActiveIndex = this._nActiveControlInterpolants ++; - - let interpolant = interpolants[ lastActiveIndex ]; - - if ( interpolant === undefined ) { - - interpolant = new LinearInterpolant( - new Float32Array( 2 ), new Float32Array( 2 ), - 1, _controlInterpolantsResultBuffer ); - - interpolant.__cacheIndex = lastActiveIndex; - interpolants[ lastActiveIndex ] = interpolant; - - } - - return interpolant; - - } - - _takeBackControlInterpolant( interpolant ) { - - const interpolants = this._controlInterpolants, - prevIndex = interpolant.__cacheIndex, - - firstInactiveIndex = -- this._nActiveControlInterpolants, - - lastActiveInterpolant = interpolants[ firstInactiveIndex ]; - - interpolant.__cacheIndex = firstInactiveIndex; - interpolants[ firstInactiveIndex ] = interpolant; - - lastActiveInterpolant.__cacheIndex = prevIndex; - interpolants[ prevIndex ] = lastActiveInterpolant; - - } - - // return an action for a clip optionally using a custom root target - // object (this method allocates a lot of dynamic memory in case a - // previously unknown clip/root combination is specified) - clipAction( clip, optionalRoot, blendMode ) { - - const root = optionalRoot || this._root, - rootUuid = root.uuid; - - let clipObject = typeof clip === 'string' ? AnimationClip.findByName( root, clip ) : clip; - - const clipUuid = clipObject !== null ? clipObject.uuid : clip; - - const actionsForClip = this._actionsByClip[ clipUuid ]; - let prototypeAction = null; - - if ( blendMode === undefined ) { - - if ( clipObject !== null ) { - - blendMode = clipObject.blendMode; - - } else { - - blendMode = NormalAnimationBlendMode; - - } - - } - - if ( actionsForClip !== undefined ) { - - const existingAction = actionsForClip.actionByRoot[ rootUuid ]; - - if ( existingAction !== undefined && existingAction.blendMode === blendMode ) { - - return existingAction; - - } - - // we know the clip, so we don't have to parse all - // the bindings again but can just copy - prototypeAction = actionsForClip.knownActions[ 0 ]; - - // also, take the clip from the prototype action - if ( clipObject === null ) - clipObject = prototypeAction._clip; - - } - - // clip must be known when specified via string - if ( clipObject === null ) return null; - - // allocate all resources required to run it - const newAction = new AnimationAction( this, clipObject, optionalRoot, blendMode ); - - this._bindAction( newAction, prototypeAction ); - - // and make the action known to the memory manager - this._addInactiveAction( newAction, clipUuid, rootUuid ); - - return newAction; - - } - - // get an existing action - existingAction( clip, optionalRoot ) { - - const root = optionalRoot || this._root, - rootUuid = root.uuid, - - clipObject = typeof clip === 'string' ? - AnimationClip.findByName( root, clip ) : clip, - - clipUuid = clipObject ? clipObject.uuid : clip, - - actionsForClip = this._actionsByClip[ clipUuid ]; - - if ( actionsForClip !== undefined ) { - - return actionsForClip.actionByRoot[ rootUuid ] || null; - - } - - return null; - - } - - // deactivates all previously scheduled actions - stopAllAction() { - - const actions = this._actions, - nActions = this._nActiveActions; - - for ( let i = nActions - 1; i >= 0; -- i ) { - - actions[ i ].stop(); - - } - - return this; - - } - - // advance the time and update apply the animation - update( deltaTime ) { - - deltaTime *= this.timeScale; - - const actions = this._actions, - nActions = this._nActiveActions, - - time = this.time += deltaTime, - timeDirection = Math.sign( deltaTime ), - - accuIndex = this._accuIndex ^= 1; - - // run active actions - - for ( let i = 0; i !== nActions; ++ i ) { - - const action = actions[ i ]; - - action._update( time, deltaTime, timeDirection, accuIndex ); - - } - - // update scene graph - - const bindings = this._bindings, - nBindings = this._nActiveBindings; - - for ( let i = 0; i !== nBindings; ++ i ) { - - bindings[ i ].apply( accuIndex ); - - } - - return this; - - } - - // Allows you to seek to a specific time in an animation. - setTime( timeInSeconds ) { - - this.time = 0; // Zero out time attribute for AnimationMixer object; - for ( let i = 0; i < this._actions.length; i ++ ) { - - this._actions[ i ].time = 0; // Zero out time attribute for all associated AnimationAction objects. - - } - - return this.update( timeInSeconds ); // Update used to set exact time. Returns "this" AnimationMixer object. - - } - - // return this mixer's root target object - getRoot() { - - return this._root; - - } - - // free all resources specific to a particular clip - uncacheClip( clip ) { - - const actions = this._actions, - clipUuid = clip.uuid, - actionsByClip = this._actionsByClip, - actionsForClip = actionsByClip[ clipUuid ]; - - if ( actionsForClip !== undefined ) { - - // note: just calling _removeInactiveAction would mess up the - // iteration state and also require updating the state we can - // just throw away - - const actionsToRemove = actionsForClip.knownActions; - - for ( let i = 0, n = actionsToRemove.length; i !== n; ++ i ) { - - const action = actionsToRemove[ i ]; - - this._deactivateAction( action ); - - const cacheIndex = action._cacheIndex, - lastInactiveAction = actions[ actions.length - 1 ]; - - action._cacheIndex = null; - action._byClipCacheIndex = null; - - lastInactiveAction._cacheIndex = cacheIndex; - actions[ cacheIndex ] = lastInactiveAction; - actions.pop(); - - this._removeInactiveBindingsForAction( action ); - - } - - delete actionsByClip[ clipUuid ]; - - } - - } - - // free all resources specific to a particular root target object - uncacheRoot( root ) { - - const rootUuid = root.uuid, - actionsByClip = this._actionsByClip; - - for ( const clipUuid in actionsByClip ) { - - const actionByRoot = actionsByClip[ clipUuid ].actionByRoot, - action = actionByRoot[ rootUuid ]; - - if ( action !== undefined ) { - - this._deactivateAction( action ); - this._removeInactiveAction( action ); - - } - - } - - const bindingsByRoot = this._bindingsByRootAndName, - bindingByName = bindingsByRoot[ rootUuid ]; - - if ( bindingByName !== undefined ) { - - for ( const trackName in bindingByName ) { - - const binding = bindingByName[ trackName ]; - binding.restoreOriginalState(); - this._removeInactiveBinding( binding ); - - } - - } - - } - - // remove a targeted clip from the cache - uncacheAction( clip, optionalRoot ) { - - const action = this.existingAction( clip, optionalRoot ); - - if ( action !== null ) { - - this._deactivateAction( action ); - this._removeInactiveAction( action ); - - } - - } - - } - - class Uniform { - - constructor( value ) { - - this.value = value; - - } - - clone() { - - return new Uniform( this.value.clone === undefined ? this.value : this.value.clone() ); - - } - - } - - let id = 0; - - class UniformsGroup extends EventDispatcher { - - constructor() { - - super(); - - this.isUniformsGroup = true; - - Object.defineProperty( this, 'id', { value: id ++ } ); - - this.name = ''; - - this.usage = StaticDrawUsage; - this.uniforms = []; - - } - - add( uniform ) { - - this.uniforms.push( uniform ); - - return this; - - } - - remove( uniform ) { - - const index = this.uniforms.indexOf( uniform ); - - if ( index !== - 1 ) this.uniforms.splice( index, 1 ); - - return this; - - } - - setName( name ) { - - this.name = name; - - return this; - - } - - setUsage( value ) { - - this.usage = value; - - return this; - - } - - dispose() { - - this.dispatchEvent( { type: 'dispose' } ); - - return this; - - } - - copy( source ) { - - this.name = source.name; - this.usage = source.usage; - - const uniformsSource = source.uniforms; - - this.uniforms.length = 0; - - for ( let i = 0, l = uniformsSource.length; i < l; i ++ ) { - - this.uniforms.push( uniformsSource[ i ].clone() ); - - } - - return this; - - } - - clone() { - - return new this.constructor().copy( this ); - - } - - } - - class InstancedInterleavedBuffer extends InterleavedBuffer { - - constructor( array, stride, meshPerAttribute = 1 ) { - - super( array, stride ); - - this.isInstancedInterleavedBuffer = true; - - this.meshPerAttribute = meshPerAttribute; - - } - - copy( source ) { - - super.copy( source ); - - this.meshPerAttribute = source.meshPerAttribute; - - return this; - - } - - clone( data ) { - - const ib = super.clone( data ); - - ib.meshPerAttribute = this.meshPerAttribute; - - return ib; - - } - - toJSON( data ) { - - const json = super.toJSON( data ); - - json.isInstancedInterleavedBuffer = true; - json.meshPerAttribute = this.meshPerAttribute; - - return json; - - } - - } - - class GLBufferAttribute { - - constructor( buffer, type, itemSize, elementSize, count ) { - - this.isGLBufferAttribute = true; - - this.name = ''; - - this.buffer = buffer; - this.type = type; - this.itemSize = itemSize; - this.elementSize = elementSize; - this.count = count; - - this.version = 0; - - } - - set needsUpdate( value ) { - - if ( value === true ) this.version ++; - - } - - setBuffer( buffer ) { - - this.buffer = buffer; - - return this; - - } - - setType( type, elementSize ) { - - this.type = type; - this.elementSize = elementSize; - - return this; - - } - - setItemSize( itemSize ) { - - this.itemSize = itemSize; - - return this; - - } - - setCount( count ) { - - this.count = count; - - return this; - - } - - } - - class Raycaster { - - constructor( origin, direction, near = 0, far = Infinity ) { - - this.ray = new Ray( origin, direction ); - // direction is assumed to be normalized (for accurate distance calculations) - - this.near = near; - this.far = far; - this.camera = null; - this.layers = new Layers(); - - this.params = { - Mesh: {}, - Line: { threshold: 1 }, - LOD: {}, - Points: { threshold: 1 }, - Sprite: {} - }; - - } - - set( origin, direction ) { - - // direction is assumed to be normalized (for accurate distance calculations) - - this.ray.set( origin, direction ); - - } - - setFromCamera( coords, camera ) { - - if ( camera.isPerspectiveCamera ) { - - this.ray.origin.setFromMatrixPosition( camera.matrixWorld ); - this.ray.direction.set( coords.x, coords.y, 0.5 ).unproject( camera ).sub( this.ray.origin ).normalize(); - this.camera = camera; - - } else if ( camera.isOrthographicCamera ) { - - this.ray.origin.set( coords.x, coords.y, ( camera.near + camera.far ) / ( camera.near - camera.far ) ).unproject( camera ); // set origin in plane of camera - this.ray.direction.set( 0, 0, - 1 ).transformDirection( camera.matrixWorld ); - this.camera = camera; - - } else { - - console.error( 'THREE.Raycaster: Unsupported camera type: ' + camera.type ); - - } - - } - - intersectObject( object, recursive = true, intersects = [] ) { - - intersectObject( object, this, intersects, recursive ); - - intersects.sort( ascSort ); - - return intersects; - - } - - intersectObjects( objects, recursive = true, intersects = [] ) { - - for ( let i = 0, l = objects.length; i < l; i ++ ) { - - intersectObject( objects[ i ], this, intersects, recursive ); - - } - - intersects.sort( ascSort ); - - return intersects; - - } - - } - - function ascSort( a, b ) { - - return a.distance - b.distance; - - } - - function intersectObject( object, raycaster, intersects, recursive ) { - - if ( object.layers.test( raycaster.layers ) ) { - - object.raycast( raycaster, intersects ); - - } - - if ( recursive === true ) { - - const children = object.children; - - for ( let i = 0, l = children.length; i < l; i ++ ) { - - intersectObject( children[ i ], raycaster, intersects, true ); - - } - - } - - } - - /** - * Ref: https://en.wikipedia.org/wiki/Spherical_coordinate_system - * - * The polar angle (phi) is measured from the positive y-axis. The positive y-axis is up. - * The azimuthal angle (theta) is measured from the positive z-axis. - */ - - class Spherical { - - constructor( radius = 1, phi = 0, theta = 0 ) { - - this.radius = radius; - this.phi = phi; // polar angle - this.theta = theta; // azimuthal angle - - return this; - - } - - set( radius, phi, theta ) { - - this.radius = radius; - this.phi = phi; - this.theta = theta; - - return this; - - } - - copy( other ) { - - this.radius = other.radius; - this.phi = other.phi; - this.theta = other.theta; - - return this; - - } - - // restrict phi to be between EPS and PI-EPS - makeSafe() { - - const EPS = 0.000001; - this.phi = Math.max( EPS, Math.min( Math.PI - EPS, this.phi ) ); - - return this; - - } - - setFromVector3( v ) { - - return this.setFromCartesianCoords( v.x, v.y, v.z ); - - } - - setFromCartesianCoords( x, y, z ) { - - this.radius = Math.sqrt( x * x + y * y + z * z ); - - if ( this.radius === 0 ) { - - this.theta = 0; - this.phi = 0; - - } else { - - this.theta = Math.atan2( x, z ); - this.phi = Math.acos( clamp( y / this.radius, - 1, 1 ) ); - - } - - return this; - - } - - clone() { - - return new this.constructor().copy( this ); - - } - - } - - /** - * Ref: https://en.wikipedia.org/wiki/Cylindrical_coordinate_system - */ - - class Cylindrical { - - constructor( radius = 1, theta = 0, y = 0 ) { - - this.radius = radius; // distance from the origin to a point in the x-z plane - this.theta = theta; // counterclockwise angle in the x-z plane measured in radians from the positive z-axis - this.y = y; // height above the x-z plane - - return this; - - } - - set( radius, theta, y ) { - - this.radius = radius; - this.theta = theta; - this.y = y; - - return this; - - } - - copy( other ) { - - this.radius = other.radius; - this.theta = other.theta; - this.y = other.y; - - return this; - - } - - setFromVector3( v ) { - - return this.setFromCartesianCoords( v.x, v.y, v.z ); - - } - - setFromCartesianCoords( x, y, z ) { - - this.radius = Math.sqrt( x * x + z * z ); - this.theta = Math.atan2( x, z ); - this.y = y; - - return this; - - } - - clone() { - - return new this.constructor().copy( this ); - - } - - } - - const _vector$4 = /*@__PURE__*/ new Vector2(); - - class Box2 { - - constructor( min = new Vector2( + Infinity, + Infinity ), max = new Vector2( - Infinity, - Infinity ) ) { - - this.isBox2 = true; - - this.min = min; - this.max = max; - - } - - set( min, max ) { - - this.min.copy( min ); - this.max.copy( max ); - - return this; - - } - - setFromPoints( points ) { - - this.makeEmpty(); - - for ( let i = 0, il = points.length; i < il; i ++ ) { - - this.expandByPoint( points[ i ] ); - - } - - return this; - - } - - setFromCenterAndSize( center, size ) { - - const halfSize = _vector$4.copy( size ).multiplyScalar( 0.5 ); - this.min.copy( center ).sub( halfSize ); - this.max.copy( center ).add( halfSize ); - - return this; - - } - - clone() { - - return new this.constructor().copy( this ); - - } - - copy( box ) { - - this.min.copy( box.min ); - this.max.copy( box.max ); - - return this; - - } - - makeEmpty() { - - this.min.x = this.min.y = + Infinity; - this.max.x = this.max.y = - Infinity; - - return this; - - } - - isEmpty() { - - // this is a more robust check for empty than ( volume <= 0 ) because volume can get positive with two negative axes - - return ( this.max.x < this.min.x ) || ( this.max.y < this.min.y ); - - } - - getCenter( target ) { - - return this.isEmpty() ? target.set( 0, 0 ) : target.addVectors( this.min, this.max ).multiplyScalar( 0.5 ); - - } - - getSize( target ) { - - return this.isEmpty() ? target.set( 0, 0 ) : target.subVectors( this.max, this.min ); - - } - - expandByPoint( point ) { - - this.min.min( point ); - this.max.max( point ); - - return this; - - } - - expandByVector( vector ) { - - this.min.sub( vector ); - this.max.add( vector ); - - return this; - - } - - expandByScalar( scalar ) { - - this.min.addScalar( - scalar ); - this.max.addScalar( scalar ); - - return this; - - } - - containsPoint( point ) { - - return point.x < this.min.x || point.x > this.max.x || - point.y < this.min.y || point.y > this.max.y ? false : true; - - } - - containsBox( box ) { - - return this.min.x <= box.min.x && box.max.x <= this.max.x && - this.min.y <= box.min.y && box.max.y <= this.max.y; - - } - - getParameter( point, target ) { - - // This can potentially have a divide by zero if the box - // has a size dimension of 0. - - return target.set( - ( point.x - this.min.x ) / ( this.max.x - this.min.x ), - ( point.y - this.min.y ) / ( this.max.y - this.min.y ) - ); - - } - - intersectsBox( box ) { - - // using 4 splitting planes to rule out intersections - - return box.max.x < this.min.x || box.min.x > this.max.x || - box.max.y < this.min.y || box.min.y > this.max.y ? false : true; - - } - - clampPoint( point, target ) { - - return target.copy( point ).clamp( this.min, this.max ); - - } - - distanceToPoint( point ) { - - return this.clampPoint( point, _vector$4 ).distanceTo( point ); - - } - - intersect( box ) { - - this.min.max( box.min ); - this.max.min( box.max ); - - if ( this.isEmpty() ) this.makeEmpty(); - - return this; - - } - - union( box ) { - - this.min.min( box.min ); - this.max.max( box.max ); - - return this; - - } - - translate( offset ) { - - this.min.add( offset ); - this.max.add( offset ); - - return this; - - } - - equals( box ) { - - return box.min.equals( this.min ) && box.max.equals( this.max ); - - } - - } - - const _startP = /*@__PURE__*/ new Vector3(); - const _startEnd = /*@__PURE__*/ new Vector3(); - - class Line3 { - - constructor( start = new Vector3(), end = new Vector3() ) { - - this.start = start; - this.end = end; - - } - - set( start, end ) { - - this.start.copy( start ); - this.end.copy( end ); - - return this; - - } - - copy( line ) { - - this.start.copy( line.start ); - this.end.copy( line.end ); - - return this; - - } - - getCenter( target ) { - - return target.addVectors( this.start, this.end ).multiplyScalar( 0.5 ); - - } - - delta( target ) { - - return target.subVectors( this.end, this.start ); - - } - - distanceSq() { - - return this.start.distanceToSquared( this.end ); - - } - - distance() { - - return this.start.distanceTo( this.end ); - - } - - at( t, target ) { - - return this.delta( target ).multiplyScalar( t ).add( this.start ); - - } - - closestPointToPointParameter( point, clampToLine ) { - - _startP.subVectors( point, this.start ); - _startEnd.subVectors( this.end, this.start ); - - const startEnd2 = _startEnd.dot( _startEnd ); - const startEnd_startP = _startEnd.dot( _startP ); - - let t = startEnd_startP / startEnd2; - - if ( clampToLine ) { - - t = clamp( t, 0, 1 ); - - } - - return t; - - } - - closestPointToPoint( point, clampToLine, target ) { - - const t = this.closestPointToPointParameter( point, clampToLine ); - - return this.delta( target ).multiplyScalar( t ).add( this.start ); - - } - - applyMatrix4( matrix ) { - - this.start.applyMatrix4( matrix ); - this.end.applyMatrix4( matrix ); - - return this; - - } - - equals( line ) { - - return line.start.equals( this.start ) && line.end.equals( this.end ); - - } - - clone() { - - return new this.constructor().copy( this ); - - } - - } - - const _vector$3 = /*@__PURE__*/ new Vector3(); - - class SpotLightHelper extends Object3D { - - constructor( light, color ) { - - super(); - - this.light = light; - - this.matrix = light.matrixWorld; - this.matrixAutoUpdate = false; - - this.color = color; - - this.type = 'SpotLightHelper'; - - const geometry = new BufferGeometry(); - - const positions = [ - 0, 0, 0, 0, 0, 1, - 0, 0, 0, 1, 0, 1, - 0, 0, 0, - 1, 0, 1, - 0, 0, 0, 0, 1, 1, - 0, 0, 0, 0, - 1, 1 - ]; - - for ( let i = 0, j = 1, l = 32; i < l; i ++, j ++ ) { - - const p1 = ( i / l ) * Math.PI * 2; - const p2 = ( j / l ) * Math.PI * 2; - - positions.push( - Math.cos( p1 ), Math.sin( p1 ), 1, - Math.cos( p2 ), Math.sin( p2 ), 1 - ); - - } - - geometry.setAttribute( 'position', new Float32BufferAttribute( positions, 3 ) ); - - const material = new LineBasicMaterial( { fog: false, toneMapped: false } ); - - this.cone = new LineSegments( geometry, material ); - this.add( this.cone ); - - this.update(); - - } - - dispose() { - - this.cone.geometry.dispose(); - this.cone.material.dispose(); - - } - - update() { - - this.light.updateWorldMatrix( true, false ); - this.light.target.updateWorldMatrix( true, false ); - - const coneLength = this.light.distance ? this.light.distance : 1000; - const coneWidth = coneLength * Math.tan( this.light.angle ); - - this.cone.scale.set( coneWidth, coneWidth, coneLength ); - - _vector$3.setFromMatrixPosition( this.light.target.matrixWorld ); - - this.cone.lookAt( _vector$3 ); - - if ( this.color !== undefined ) { - - this.cone.material.color.set( this.color ); - - } else { - - this.cone.material.color.copy( this.light.color ); - - } - - } - - } - - const _vector$2 = /*@__PURE__*/ new Vector3(); - const _boneMatrix = /*@__PURE__*/ new Matrix4(); - const _matrixWorldInv = /*@__PURE__*/ new Matrix4(); - - - class SkeletonHelper extends LineSegments { - - constructor( object ) { - - const bones = getBoneList( object ); - - const geometry = new BufferGeometry(); - - const vertices = []; - const colors = []; - - const color1 = new Color( 0, 0, 1 ); - const color2 = new Color( 0, 1, 0 ); - - for ( let i = 0; i < bones.length; i ++ ) { - - const bone = bones[ i ]; - - if ( bone.parent && bone.parent.isBone ) { - - vertices.push( 0, 0, 0 ); - vertices.push( 0, 0, 0 ); - colors.push( color1.r, color1.g, color1.b ); - colors.push( color2.r, color2.g, color2.b ); - - } - - } - - geometry.setAttribute( 'position', new Float32BufferAttribute( vertices, 3 ) ); - geometry.setAttribute( 'color', new Float32BufferAttribute( colors, 3 ) ); - - const material = new LineBasicMaterial( { vertexColors: true, depthTest: false, depthWrite: false, toneMapped: false, transparent: true } ); - - super( geometry, material ); - - this.isSkeletonHelper = true; - - this.type = 'SkeletonHelper'; - - this.root = object; - this.bones = bones; - - this.matrix = object.matrixWorld; - this.matrixAutoUpdate = false; - - } - - updateMatrixWorld( force ) { - - const bones = this.bones; - - const geometry = this.geometry; - const position = geometry.getAttribute( 'position' ); - - _matrixWorldInv.copy( this.root.matrixWorld ).invert(); - - for ( let i = 0, j = 0; i < bones.length; i ++ ) { - - const bone = bones[ i ]; - - if ( bone.parent && bone.parent.isBone ) { - - _boneMatrix.multiplyMatrices( _matrixWorldInv, bone.matrixWorld ); - _vector$2.setFromMatrixPosition( _boneMatrix ); - position.setXYZ( j, _vector$2.x, _vector$2.y, _vector$2.z ); - - _boneMatrix.multiplyMatrices( _matrixWorldInv, bone.parent.matrixWorld ); - _vector$2.setFromMatrixPosition( _boneMatrix ); - position.setXYZ( j + 1, _vector$2.x, _vector$2.y, _vector$2.z ); - - j += 2; - - } - - } - - geometry.getAttribute( 'position' ).needsUpdate = true; - - super.updateMatrixWorld( force ); - - } - - dispose() { - - this.geometry.dispose(); - this.material.dispose(); - - } - - } - - - function getBoneList( object ) { - - const boneList = []; - - if ( object.isBone === true ) { - - boneList.push( object ); - - } - - for ( let i = 0; i < object.children.length; i ++ ) { - - boneList.push.apply( boneList, getBoneList( object.children[ i ] ) ); - - } - - return boneList; - - } - - class PointLightHelper extends Mesh { - - constructor( light, sphereSize, color ) { - - const geometry = new SphereGeometry( sphereSize, 4, 2 ); - const material = new MeshBasicMaterial( { wireframe: true, fog: false, toneMapped: false } ); - - super( geometry, material ); - - this.light = light; - - this.color = color; - - this.type = 'PointLightHelper'; - - this.matrix = this.light.matrixWorld; - this.matrixAutoUpdate = false; - - this.update(); - - - /* - // TODO: delete this comment? - const distanceGeometry = new THREE.IcosahedronGeometry( 1, 2 ); - const distanceMaterial = new THREE.MeshBasicMaterial( { color: hexColor, fog: false, wireframe: true, opacity: 0.1, transparent: true } ); - - this.lightSphere = new THREE.Mesh( bulbGeometry, bulbMaterial ); - this.lightDistance = new THREE.Mesh( distanceGeometry, distanceMaterial ); - - const d = light.distance; - - if ( d === 0.0 ) { - - this.lightDistance.visible = false; - - } else { - - this.lightDistance.scale.set( d, d, d ); - - } - - this.add( this.lightDistance ); - */ - - } - - dispose() { - - this.geometry.dispose(); - this.material.dispose(); - - } - - update() { - - this.light.updateWorldMatrix( true, false ); - - if ( this.color !== undefined ) { - - this.material.color.set( this.color ); - - } else { - - this.material.color.copy( this.light.color ); - - } - - /* - const d = this.light.distance; - - if ( d === 0.0 ) { - - this.lightDistance.visible = false; - - } else { - - this.lightDistance.visible = true; - this.lightDistance.scale.set( d, d, d ); - - } - */ - - } - - } - - const _vector$1 = /*@__PURE__*/ new Vector3(); - const _color1 = /*@__PURE__*/ new Color(); - const _color2 = /*@__PURE__*/ new Color(); - - class HemisphereLightHelper extends Object3D { - - constructor( light, size, color ) { - - super(); - - this.light = light; - - this.matrix = light.matrixWorld; - this.matrixAutoUpdate = false; - - this.color = color; - - this.type = 'HemisphereLightHelper'; - - const geometry = new OctahedronGeometry( size ); - geometry.rotateY( Math.PI * 0.5 ); - - this.material = new MeshBasicMaterial( { wireframe: true, fog: false, toneMapped: false } ); - if ( this.color === undefined ) this.material.vertexColors = true; - - const position = geometry.getAttribute( 'position' ); - const colors = new Float32Array( position.count * 3 ); - - geometry.setAttribute( 'color', new BufferAttribute( colors, 3 ) ); - - this.add( new Mesh( geometry, this.material ) ); - - this.update(); - - } - - dispose() { - - this.children[ 0 ].geometry.dispose(); - this.children[ 0 ].material.dispose(); - - } - - update() { - - const mesh = this.children[ 0 ]; - - if ( this.color !== undefined ) { - - this.material.color.set( this.color ); - - } else { - - const colors = mesh.geometry.getAttribute( 'color' ); - - _color1.copy( this.light.color ); - _color2.copy( this.light.groundColor ); - - for ( let i = 0, l = colors.count; i < l; i ++ ) { - - const color = ( i < ( l / 2 ) ) ? _color1 : _color2; - - colors.setXYZ( i, color.r, color.g, color.b ); - - } - - colors.needsUpdate = true; - - } - - this.light.updateWorldMatrix( true, false ); - - mesh.lookAt( _vector$1.setFromMatrixPosition( this.light.matrixWorld ).negate() ); - - } - - } - - class GridHelper extends LineSegments { - - constructor( size = 10, divisions = 10, color1 = 0x444444, color2 = 0x888888 ) { - - color1 = new Color( color1 ); - color2 = new Color( color2 ); - - const center = divisions / 2; - const step = size / divisions; - const halfSize = size / 2; - - const vertices = [], colors = []; - - for ( let i = 0, j = 0, k = - halfSize; i <= divisions; i ++, k += step ) { - - vertices.push( - halfSize, 0, k, halfSize, 0, k ); - vertices.push( k, 0, - halfSize, k, 0, halfSize ); - - const color = i === center ? color1 : color2; - - color.toArray( colors, j ); j += 3; - color.toArray( colors, j ); j += 3; - color.toArray( colors, j ); j += 3; - color.toArray( colors, j ); j += 3; - - } - - const geometry = new BufferGeometry(); - geometry.setAttribute( 'position', new Float32BufferAttribute( vertices, 3 ) ); - geometry.setAttribute( 'color', new Float32BufferAttribute( colors, 3 ) ); - - const material = new LineBasicMaterial( { vertexColors: true, toneMapped: false } ); - - super( geometry, material ); - - this.type = 'GridHelper'; - - } - - dispose() { - - this.geometry.dispose(); - this.material.dispose(); - - } - - } - - class PolarGridHelper extends LineSegments { - - constructor( radius = 10, sectors = 16, rings = 8, divisions = 64, color1 = 0x444444, color2 = 0x888888 ) { - - color1 = new Color( color1 ); - color2 = new Color( color2 ); - - const vertices = []; - const colors = []; - - // create the sectors - - if ( sectors > 1 ) { - - for ( let i = 0; i < sectors; i ++ ) { - - const v = ( i / sectors ) * ( Math.PI * 2 ); - - const x = Math.sin( v ) * radius; - const z = Math.cos( v ) * radius; - - vertices.push( 0, 0, 0 ); - vertices.push( x, 0, z ); - - const color = ( i & 1 ) ? color1 : color2; - - colors.push( color.r, color.g, color.b ); - colors.push( color.r, color.g, color.b ); - - } - - } - - // create the rings - - for ( let i = 0; i < rings; i ++ ) { - - const color = ( i & 1 ) ? color1 : color2; - - const r = radius - ( radius / rings * i ); - - for ( let j = 0; j < divisions; j ++ ) { - - // first vertex - - let v = ( j / divisions ) * ( Math.PI * 2 ); - - let x = Math.sin( v ) * r; - let z = Math.cos( v ) * r; - - vertices.push( x, 0, z ); - colors.push( color.r, color.g, color.b ); - - // second vertex - - v = ( ( j + 1 ) / divisions ) * ( Math.PI * 2 ); - - x = Math.sin( v ) * r; - z = Math.cos( v ) * r; - - vertices.push( x, 0, z ); - colors.push( color.r, color.g, color.b ); - - } - - } - - const geometry = new BufferGeometry(); - geometry.setAttribute( 'position', new Float32BufferAttribute( vertices, 3 ) ); - geometry.setAttribute( 'color', new Float32BufferAttribute( colors, 3 ) ); - - const material = new LineBasicMaterial( { vertexColors: true, toneMapped: false } ); - - super( geometry, material ); - - this.type = 'PolarGridHelper'; - - } - - dispose() { - - this.geometry.dispose(); - this.material.dispose(); - - } - - } - - const _v1 = /*@__PURE__*/ new Vector3(); - const _v2 = /*@__PURE__*/ new Vector3(); - const _v3 = /*@__PURE__*/ new Vector3(); - - class DirectionalLightHelper extends Object3D { - - constructor( light, size, color ) { - - super(); - - this.light = light; - - this.matrix = light.matrixWorld; - this.matrixAutoUpdate = false; - - this.color = color; - - this.type = 'DirectionalLightHelper'; - - if ( size === undefined ) size = 1; - - let geometry = new BufferGeometry(); - geometry.setAttribute( 'position', new Float32BufferAttribute( [ - - size, size, 0, - size, size, 0, - size, - size, 0, - - size, - size, 0, - - size, size, 0 - ], 3 ) ); - - const material = new LineBasicMaterial( { fog: false, toneMapped: false } ); - - this.lightPlane = new Line( geometry, material ); - this.add( this.lightPlane ); - - geometry = new BufferGeometry(); - geometry.setAttribute( 'position', new Float32BufferAttribute( [ 0, 0, 0, 0, 0, 1 ], 3 ) ); - - this.targetLine = new Line( geometry, material ); - this.add( this.targetLine ); - - this.update(); - - } - - dispose() { - - this.lightPlane.geometry.dispose(); - this.lightPlane.material.dispose(); - this.targetLine.geometry.dispose(); - this.targetLine.material.dispose(); - - } - - update() { - - this.light.updateWorldMatrix( true, false ); - this.light.target.updateWorldMatrix( true, false ); - - _v1.setFromMatrixPosition( this.light.matrixWorld ); - _v2.setFromMatrixPosition( this.light.target.matrixWorld ); - _v3.subVectors( _v2, _v1 ); - - this.lightPlane.lookAt( _v2 ); - - if ( this.color !== undefined ) { - - this.lightPlane.material.color.set( this.color ); - this.targetLine.material.color.set( this.color ); - - } else { - - this.lightPlane.material.color.copy( this.light.color ); - this.targetLine.material.color.copy( this.light.color ); - - } - - this.targetLine.lookAt( _v2 ); - this.targetLine.scale.z = _v3.length(); - - } - - } - - const _vector = /*@__PURE__*/ new Vector3(); - const _camera = /*@__PURE__*/ new Camera(); - - /** - * - shows frustum, line of sight and up of the camera - * - suitable for fast updates - * - based on frustum visualization in lightgl.js shadowmap example - * https://github.com/evanw/lightgl.js/blob/master/tests/shadowmap.html - */ - - class CameraHelper extends LineSegments { - - constructor( camera ) { - - const geometry = new BufferGeometry(); - const material = new LineBasicMaterial( { color: 0xffffff, vertexColors: true, toneMapped: false } ); - - const vertices = []; - const colors = []; - - const pointMap = {}; - - // near - - addLine( 'n1', 'n2' ); - addLine( 'n2', 'n4' ); - addLine( 'n4', 'n3' ); - addLine( 'n3', 'n1' ); - - // far - - addLine( 'f1', 'f2' ); - addLine( 'f2', 'f4' ); - addLine( 'f4', 'f3' ); - addLine( 'f3', 'f1' ); - - // sides - - addLine( 'n1', 'f1' ); - addLine( 'n2', 'f2' ); - addLine( 'n3', 'f3' ); - addLine( 'n4', 'f4' ); - - // cone - - addLine( 'p', 'n1' ); - addLine( 'p', 'n2' ); - addLine( 'p', 'n3' ); - addLine( 'p', 'n4' ); - - // up - - addLine( 'u1', 'u2' ); - addLine( 'u2', 'u3' ); - addLine( 'u3', 'u1' ); - - // target - - addLine( 'c', 't' ); - addLine( 'p', 'c' ); - - // cross - - addLine( 'cn1', 'cn2' ); - addLine( 'cn3', 'cn4' ); - - addLine( 'cf1', 'cf2' ); - addLine( 'cf3', 'cf4' ); - - function addLine( a, b ) { - - addPoint( a ); - addPoint( b ); - - } - - function addPoint( id ) { - - vertices.push( 0, 0, 0 ); - colors.push( 0, 0, 0 ); - - if ( pointMap[ id ] === undefined ) { - - pointMap[ id ] = []; - - } - - pointMap[ id ].push( ( vertices.length / 3 ) - 1 ); - - } - - geometry.setAttribute( 'position', new Float32BufferAttribute( vertices, 3 ) ); - geometry.setAttribute( 'color', new Float32BufferAttribute( colors, 3 ) ); - - super( geometry, material ); - - this.type = 'CameraHelper'; - - this.camera = camera; - if ( this.camera.updateProjectionMatrix ) this.camera.updateProjectionMatrix(); - - this.matrix = camera.matrixWorld; - this.matrixAutoUpdate = false; - - this.pointMap = pointMap; - - this.update(); - - // colors - - const colorFrustum = new Color( 0xffaa00 ); - const colorCone = new Color( 0xff0000 ); - const colorUp = new Color( 0x00aaff ); - const colorTarget = new Color( 0xffffff ); - const colorCross = new Color( 0x333333 ); - - this.setColors( colorFrustum, colorCone, colorUp, colorTarget, colorCross ); - - } - - setColors( frustum, cone, up, target, cross ) { - - const geometry = this.geometry; - - const colorAttribute = geometry.getAttribute( 'color' ); - - // near - - colorAttribute.setXYZ( 0, frustum.r, frustum.g, frustum.b ); colorAttribute.setXYZ( 1, frustum.r, frustum.g, frustum.b ); // n1, n2 - colorAttribute.setXYZ( 2, frustum.r, frustum.g, frustum.b ); colorAttribute.setXYZ( 3, frustum.r, frustum.g, frustum.b ); // n2, n4 - colorAttribute.setXYZ( 4, frustum.r, frustum.g, frustum.b ); colorAttribute.setXYZ( 5, frustum.r, frustum.g, frustum.b ); // n4, n3 - colorAttribute.setXYZ( 6, frustum.r, frustum.g, frustum.b ); colorAttribute.setXYZ( 7, frustum.r, frustum.g, frustum.b ); // n3, n1 - - // far - - colorAttribute.setXYZ( 8, frustum.r, frustum.g, frustum.b ); colorAttribute.setXYZ( 9, frustum.r, frustum.g, frustum.b ); // f1, f2 - colorAttribute.setXYZ( 10, frustum.r, frustum.g, frustum.b ); colorAttribute.setXYZ( 11, frustum.r, frustum.g, frustum.b ); // f2, f4 - colorAttribute.setXYZ( 12, frustum.r, frustum.g, frustum.b ); colorAttribute.setXYZ( 13, frustum.r, frustum.g, frustum.b ); // f4, f3 - colorAttribute.setXYZ( 14, frustum.r, frustum.g, frustum.b ); colorAttribute.setXYZ( 15, frustum.r, frustum.g, frustum.b ); // f3, f1 - - // sides - - colorAttribute.setXYZ( 16, frustum.r, frustum.g, frustum.b ); colorAttribute.setXYZ( 17, frustum.r, frustum.g, frustum.b ); // n1, f1 - colorAttribute.setXYZ( 18, frustum.r, frustum.g, frustum.b ); colorAttribute.setXYZ( 19, frustum.r, frustum.g, frustum.b ); // n2, f2 - colorAttribute.setXYZ( 20, frustum.r, frustum.g, frustum.b ); colorAttribute.setXYZ( 21, frustum.r, frustum.g, frustum.b ); // n3, f3 - colorAttribute.setXYZ( 22, frustum.r, frustum.g, frustum.b ); colorAttribute.setXYZ( 23, frustum.r, frustum.g, frustum.b ); // n4, f4 - - // cone - - colorAttribute.setXYZ( 24, cone.r, cone.g, cone.b ); colorAttribute.setXYZ( 25, cone.r, cone.g, cone.b ); // p, n1 - colorAttribute.setXYZ( 26, cone.r, cone.g, cone.b ); colorAttribute.setXYZ( 27, cone.r, cone.g, cone.b ); // p, n2 - colorAttribute.setXYZ( 28, cone.r, cone.g, cone.b ); colorAttribute.setXYZ( 29, cone.r, cone.g, cone.b ); // p, n3 - colorAttribute.setXYZ( 30, cone.r, cone.g, cone.b ); colorAttribute.setXYZ( 31, cone.r, cone.g, cone.b ); // p, n4 - - // up - - colorAttribute.setXYZ( 32, up.r, up.g, up.b ); colorAttribute.setXYZ( 33, up.r, up.g, up.b ); // u1, u2 - colorAttribute.setXYZ( 34, up.r, up.g, up.b ); colorAttribute.setXYZ( 35, up.r, up.g, up.b ); // u2, u3 - colorAttribute.setXYZ( 36, up.r, up.g, up.b ); colorAttribute.setXYZ( 37, up.r, up.g, up.b ); // u3, u1 - - // target - - colorAttribute.setXYZ( 38, target.r, target.g, target.b ); colorAttribute.setXYZ( 39, target.r, target.g, target.b ); // c, t - colorAttribute.setXYZ( 40, cross.r, cross.g, cross.b ); colorAttribute.setXYZ( 41, cross.r, cross.g, cross.b ); // p, c - - // cross - - colorAttribute.setXYZ( 42, cross.r, cross.g, cross.b ); colorAttribute.setXYZ( 43, cross.r, cross.g, cross.b ); // cn1, cn2 - colorAttribute.setXYZ( 44, cross.r, cross.g, cross.b ); colorAttribute.setXYZ( 45, cross.r, cross.g, cross.b ); // cn3, cn4 - - colorAttribute.setXYZ( 46, cross.r, cross.g, cross.b ); colorAttribute.setXYZ( 47, cross.r, cross.g, cross.b ); // cf1, cf2 - colorAttribute.setXYZ( 48, cross.r, cross.g, cross.b ); colorAttribute.setXYZ( 49, cross.r, cross.g, cross.b ); // cf3, cf4 - - colorAttribute.needsUpdate = true; - - } - - update() { - - const geometry = this.geometry; - const pointMap = this.pointMap; - - const w = 1, h = 1; - - // we need just camera projection matrix inverse - // world matrix must be identity - - _camera.projectionMatrixInverse.copy( this.camera.projectionMatrixInverse ); - - // center / target - - setPoint( 'c', pointMap, geometry, _camera, 0, 0, - 1 ); - setPoint( 't', pointMap, geometry, _camera, 0, 0, 1 ); - - // near - - setPoint( 'n1', pointMap, geometry, _camera, - w, - h, - 1 ); - setPoint( 'n2', pointMap, geometry, _camera, w, - h, - 1 ); - setPoint( 'n3', pointMap, geometry, _camera, - w, h, - 1 ); - setPoint( 'n4', pointMap, geometry, _camera, w, h, - 1 ); - - // far - - setPoint( 'f1', pointMap, geometry, _camera, - w, - h, 1 ); - setPoint( 'f2', pointMap, geometry, _camera, w, - h, 1 ); - setPoint( 'f3', pointMap, geometry, _camera, - w, h, 1 ); - setPoint( 'f4', pointMap, geometry, _camera, w, h, 1 ); - - // up - - setPoint( 'u1', pointMap, geometry, _camera, w * 0.7, h * 1.1, - 1 ); - setPoint( 'u2', pointMap, geometry, _camera, - w * 0.7, h * 1.1, - 1 ); - setPoint( 'u3', pointMap, geometry, _camera, 0, h * 2, - 1 ); - - // cross - - setPoint( 'cf1', pointMap, geometry, _camera, - w, 0, 1 ); - setPoint( 'cf2', pointMap, geometry, _camera, w, 0, 1 ); - setPoint( 'cf3', pointMap, geometry, _camera, 0, - h, 1 ); - setPoint( 'cf4', pointMap, geometry, _camera, 0, h, 1 ); - - setPoint( 'cn1', pointMap, geometry, _camera, - w, 0, - 1 ); - setPoint( 'cn2', pointMap, geometry, _camera, w, 0, - 1 ); - setPoint( 'cn3', pointMap, geometry, _camera, 0, - h, - 1 ); - setPoint( 'cn4', pointMap, geometry, _camera, 0, h, - 1 ); - - geometry.getAttribute( 'position' ).needsUpdate = true; - - } - - dispose() { - - this.geometry.dispose(); - this.material.dispose(); - - } - - } - - - function setPoint( point, pointMap, geometry, camera, x, y, z ) { - - _vector.set( x, y, z ).unproject( camera ); - - const points = pointMap[ point ]; - - if ( points !== undefined ) { - - const position = geometry.getAttribute( 'position' ); - - for ( let i = 0, l = points.length; i < l; i ++ ) { - - position.setXYZ( points[ i ], _vector.x, _vector.y, _vector.z ); - - } - - } - - } - - const _box = /*@__PURE__*/ new Box3(); - - class BoxHelper extends LineSegments { - - constructor( object, color = 0xffff00 ) { - - const indices = new Uint16Array( [ 0, 1, 1, 2, 2, 3, 3, 0, 4, 5, 5, 6, 6, 7, 7, 4, 0, 4, 1, 5, 2, 6, 3, 7 ] ); - const positions = new Float32Array( 8 * 3 ); - - const geometry = new BufferGeometry(); - geometry.setIndex( new BufferAttribute( indices, 1 ) ); - geometry.setAttribute( 'position', new BufferAttribute( positions, 3 ) ); - - super( geometry, new LineBasicMaterial( { color: color, toneMapped: false } ) ); - - this.object = object; - this.type = 'BoxHelper'; - - this.matrixAutoUpdate = false; - - this.update(); - - } - - update( object ) { - - if ( object !== undefined ) { - - console.warn( 'THREE.BoxHelper: .update() has no longer arguments.' ); - - } - - if ( this.object !== undefined ) { - - _box.setFromObject( this.object ); - - } - - if ( _box.isEmpty() ) return; - - const min = _box.min; - const max = _box.max; - - /* - 5____4 - 1/___0/| - | 6__|_7 - 2/___3/ - - 0: max.x, max.y, max.z - 1: min.x, max.y, max.z - 2: min.x, min.y, max.z - 3: max.x, min.y, max.z - 4: max.x, max.y, min.z - 5: min.x, max.y, min.z - 6: min.x, min.y, min.z - 7: max.x, min.y, min.z - */ - - const position = this.geometry.attributes.position; - const array = position.array; - - array[ 0 ] = max.x; array[ 1 ] = max.y; array[ 2 ] = max.z; - array[ 3 ] = min.x; array[ 4 ] = max.y; array[ 5 ] = max.z; - array[ 6 ] = min.x; array[ 7 ] = min.y; array[ 8 ] = max.z; - array[ 9 ] = max.x; array[ 10 ] = min.y; array[ 11 ] = max.z; - array[ 12 ] = max.x; array[ 13 ] = max.y; array[ 14 ] = min.z; - array[ 15 ] = min.x; array[ 16 ] = max.y; array[ 17 ] = min.z; - array[ 18 ] = min.x; array[ 19 ] = min.y; array[ 20 ] = min.z; - array[ 21 ] = max.x; array[ 22 ] = min.y; array[ 23 ] = min.z; - - position.needsUpdate = true; - - this.geometry.computeBoundingSphere(); - - } - - setFromObject( object ) { - - this.object = object; - this.update(); - - return this; - - } - - copy( source, recursive ) { - - super.copy( source, recursive ); - - this.object = source.object; - - return this; - - } - - dispose() { - - this.geometry.dispose(); - this.material.dispose(); - - } - - } - - class Box3Helper extends LineSegments { - - constructor( box, color = 0xffff00 ) { - - const indices = new Uint16Array( [ 0, 1, 1, 2, 2, 3, 3, 0, 4, 5, 5, 6, 6, 7, 7, 4, 0, 4, 1, 5, 2, 6, 3, 7 ] ); - - const positions = [ 1, 1, 1, - 1, 1, 1, - 1, - 1, 1, 1, - 1, 1, 1, 1, - 1, - 1, 1, - 1, - 1, - 1, - 1, 1, - 1, - 1 ]; - - const geometry = new BufferGeometry(); - - geometry.setIndex( new BufferAttribute( indices, 1 ) ); - - geometry.setAttribute( 'position', new Float32BufferAttribute( positions, 3 ) ); - - super( geometry, new LineBasicMaterial( { color: color, toneMapped: false } ) ); - - this.box = box; - - this.type = 'Box3Helper'; - - this.geometry.computeBoundingSphere(); - - } - - updateMatrixWorld( force ) { - - const box = this.box; - - if ( box.isEmpty() ) return; - - box.getCenter( this.position ); - - box.getSize( this.scale ); - - this.scale.multiplyScalar( 0.5 ); - - super.updateMatrixWorld( force ); - - } - - dispose() { - - this.geometry.dispose(); - this.material.dispose(); - - } - - } - - class PlaneHelper extends Line { - - constructor( plane, size = 1, hex = 0xffff00 ) { - - const color = hex; - - const positions = [ 1, - 1, 0, - 1, 1, 0, - 1, - 1, 0, 1, 1, 0, - 1, 1, 0, - 1, - 1, 0, 1, - 1, 0, 1, 1, 0 ]; - - const geometry = new BufferGeometry(); - geometry.setAttribute( 'position', new Float32BufferAttribute( positions, 3 ) ); - geometry.computeBoundingSphere(); - - super( geometry, new LineBasicMaterial( { color: color, toneMapped: false } ) ); - - this.type = 'PlaneHelper'; - - this.plane = plane; - - this.size = size; - - const positions2 = [ 1, 1, 0, - 1, 1, 0, - 1, - 1, 0, 1, 1, 0, - 1, - 1, 0, 1, - 1, 0 ]; - - const geometry2 = new BufferGeometry(); - geometry2.setAttribute( 'position', new Float32BufferAttribute( positions2, 3 ) ); - geometry2.computeBoundingSphere(); - - this.add( new Mesh( geometry2, new MeshBasicMaterial( { color: color, opacity: 0.2, transparent: true, depthWrite: false, toneMapped: false } ) ) ); - - } - - updateMatrixWorld( force ) { - - this.position.set( 0, 0, 0 ); - - this.scale.set( 0.5 * this.size, 0.5 * this.size, 1 ); - - this.lookAt( this.plane.normal ); - - this.translateZ( - this.plane.constant ); - - super.updateMatrixWorld( force ); - - } - - dispose() { - - this.geometry.dispose(); - this.material.dispose(); - this.children[ 0 ].geometry.dispose(); - this.children[ 0 ].material.dispose(); - - } - - } - - const _axis = /*@__PURE__*/ new Vector3(); - let _lineGeometry, _coneGeometry; - - class ArrowHelper extends Object3D { - - // dir is assumed to be normalized - - constructor( dir = new Vector3( 0, 0, 1 ), origin = new Vector3( 0, 0, 0 ), length = 1, color = 0xffff00, headLength = length * 0.2, headWidth = headLength * 0.2 ) { - - super(); - - this.type = 'ArrowHelper'; - - if ( _lineGeometry === undefined ) { - - _lineGeometry = new BufferGeometry(); - _lineGeometry.setAttribute( 'position', new Float32BufferAttribute( [ 0, 0, 0, 0, 1, 0 ], 3 ) ); - - _coneGeometry = new CylinderGeometry( 0, 0.5, 1, 5, 1 ); - _coneGeometry.translate( 0, - 0.5, 0 ); - - } - - this.position.copy( origin ); - - this.line = new Line( _lineGeometry, new LineBasicMaterial( { color: color, toneMapped: false } ) ); - this.line.matrixAutoUpdate = false; - this.add( this.line ); - - this.cone = new Mesh( _coneGeometry, new MeshBasicMaterial( { color: color, toneMapped: false } ) ); - this.cone.matrixAutoUpdate = false; - this.add( this.cone ); - - this.setDirection( dir ); - this.setLength( length, headLength, headWidth ); - - } - - setDirection( dir ) { - - // dir is assumed to be normalized - - if ( dir.y > 0.99999 ) { - - this.quaternion.set( 0, 0, 0, 1 ); - - } else if ( dir.y < - 0.99999 ) { - - this.quaternion.set( 1, 0, 0, 0 ); - - } else { - - _axis.set( dir.z, 0, - dir.x ).normalize(); - - const radians = Math.acos( dir.y ); - - this.quaternion.setFromAxisAngle( _axis, radians ); - - } - - } - - setLength( length, headLength = length * 0.2, headWidth = headLength * 0.2 ) { - - this.line.scale.set( 1, Math.max( 0.0001, length - headLength ), 1 ); // see #17458 - this.line.updateMatrix(); - - this.cone.scale.set( headWidth, headLength, headWidth ); - this.cone.position.y = length; - this.cone.updateMatrix(); - - } - - setColor( color ) { - - this.line.material.color.set( color ); - this.cone.material.color.set( color ); - - } - - copy( source ) { - - super.copy( source, false ); - - this.line.copy( source.line ); - this.cone.copy( source.cone ); - - return this; - - } - - dispose() { - - this.line.geometry.dispose(); - this.line.material.dispose(); - this.cone.geometry.dispose(); - this.cone.material.dispose(); - - } - - } - - class AxesHelper extends LineSegments { - - constructor( size = 1 ) { - - const vertices = [ - 0, 0, 0, size, 0, 0, - 0, 0, 0, 0, size, 0, - 0, 0, 0, 0, 0, size - ]; - - const colors = [ - 1, 0, 0, 1, 0.6, 0, - 0, 1, 0, 0.6, 1, 0, - 0, 0, 1, 0, 0.6, 1 - ]; - - const geometry = new BufferGeometry(); - geometry.setAttribute( 'position', new Float32BufferAttribute( vertices, 3 ) ); - geometry.setAttribute( 'color', new Float32BufferAttribute( colors, 3 ) ); - - const material = new LineBasicMaterial( { vertexColors: true, toneMapped: false } ); - - super( geometry, material ); - - this.type = 'AxesHelper'; - - } - - setColors( xAxisColor, yAxisColor, zAxisColor ) { - - const color = new Color(); - const array = this.geometry.attributes.color.array; - - color.set( xAxisColor ); - color.toArray( array, 0 ); - color.toArray( array, 3 ); - - color.set( yAxisColor ); - color.toArray( array, 6 ); - color.toArray( array, 9 ); - - color.set( zAxisColor ); - color.toArray( array, 12 ); - color.toArray( array, 15 ); - - this.geometry.attributes.color.needsUpdate = true; - - return this; - - } - - dispose() { - - this.geometry.dispose(); - this.material.dispose(); - - } - - } - - class ShapePath { - - constructor() { - - this.type = 'ShapePath'; - - this.color = new Color(); - - this.subPaths = []; - this.currentPath = null; - - } - - moveTo( x, y ) { - - this.currentPath = new Path(); - this.subPaths.push( this.currentPath ); - this.currentPath.moveTo( x, y ); - - return this; - - } - - lineTo( x, y ) { - - this.currentPath.lineTo( x, y ); - - return this; - - } - - quadraticCurveTo( aCPx, aCPy, aX, aY ) { - - this.currentPath.quadraticCurveTo( aCPx, aCPy, aX, aY ); - - return this; - - } - - bezierCurveTo( aCP1x, aCP1y, aCP2x, aCP2y, aX, aY ) { - - this.currentPath.bezierCurveTo( aCP1x, aCP1y, aCP2x, aCP2y, aX, aY ); - - return this; - - } - - splineThru( pts ) { - - this.currentPath.splineThru( pts ); - - return this; - - } - - toShapes( isCCW ) { - - function toShapesNoHoles( inSubpaths ) { - - const shapes = []; - - for ( let i = 0, l = inSubpaths.length; i < l; i ++ ) { - - const tmpPath = inSubpaths[ i ]; - - const tmpShape = new Shape(); - tmpShape.curves = tmpPath.curves; - - shapes.push( tmpShape ); - - } - - return shapes; - - } - - function isPointInsidePolygon( inPt, inPolygon ) { - - const polyLen = inPolygon.length; - - // inPt on polygon contour => immediate success or - // toggling of inside/outside at every single! intersection point of an edge - // with the horizontal line through inPt, left of inPt - // not counting lowerY endpoints of edges and whole edges on that line - let inside = false; - for ( let p = polyLen - 1, q = 0; q < polyLen; p = q ++ ) { - - let edgeLowPt = inPolygon[ p ]; - let edgeHighPt = inPolygon[ q ]; - - let edgeDx = edgeHighPt.x - edgeLowPt.x; - let edgeDy = edgeHighPt.y - edgeLowPt.y; - - if ( Math.abs( edgeDy ) > Number.EPSILON ) { - - // not parallel - if ( edgeDy < 0 ) { - - edgeLowPt = inPolygon[ q ]; edgeDx = - edgeDx; - edgeHighPt = inPolygon[ p ]; edgeDy = - edgeDy; - - } - - if ( ( inPt.y < edgeLowPt.y ) || ( inPt.y > edgeHighPt.y ) ) continue; - - if ( inPt.y === edgeLowPt.y ) { - - if ( inPt.x === edgeLowPt.x ) return true; // inPt is on contour ? - // continue; // no intersection or edgeLowPt => doesn't count !!! - - } else { - - const perpEdge = edgeDy * ( inPt.x - edgeLowPt.x ) - edgeDx * ( inPt.y - edgeLowPt.y ); - if ( perpEdge === 0 ) return true; // inPt is on contour ? - if ( perpEdge < 0 ) continue; - inside = ! inside; // true intersection left of inPt - - } - - } else { - - // parallel or collinear - if ( inPt.y !== edgeLowPt.y ) continue; // parallel - // edge lies on the same horizontal line as inPt - if ( ( ( edgeHighPt.x <= inPt.x ) && ( inPt.x <= edgeLowPt.x ) ) || - ( ( edgeLowPt.x <= inPt.x ) && ( inPt.x <= edgeHighPt.x ) ) ) return true; // inPt: Point on contour ! - // continue; - - } - - } - - return inside; - - } - - const isClockWise = ShapeUtils.isClockWise; - - const subPaths = this.subPaths; - if ( subPaths.length === 0 ) return []; - - let solid, tmpPath, tmpShape; - const shapes = []; - - if ( subPaths.length === 1 ) { - - tmpPath = subPaths[ 0 ]; - tmpShape = new Shape(); - tmpShape.curves = tmpPath.curves; - shapes.push( tmpShape ); - return shapes; - - } - - let holesFirst = ! isClockWise( subPaths[ 0 ].getPoints() ); - holesFirst = isCCW ? ! holesFirst : holesFirst; - - // console.log("Holes first", holesFirst); - - const betterShapeHoles = []; - const newShapes = []; - let newShapeHoles = []; - let mainIdx = 0; - let tmpPoints; - - newShapes[ mainIdx ] = undefined; - newShapeHoles[ mainIdx ] = []; - - for ( let i = 0, l = subPaths.length; i < l; i ++ ) { - - tmpPath = subPaths[ i ]; - tmpPoints = tmpPath.getPoints(); - solid = isClockWise( tmpPoints ); - solid = isCCW ? ! solid : solid; - - if ( solid ) { - - if ( ( ! holesFirst ) && ( newShapes[ mainIdx ] ) ) mainIdx ++; - - newShapes[ mainIdx ] = { s: new Shape(), p: tmpPoints }; - newShapes[ mainIdx ].s.curves = tmpPath.curves; - - if ( holesFirst ) mainIdx ++; - newShapeHoles[ mainIdx ] = []; - - //console.log('cw', i); - - } else { - - newShapeHoles[ mainIdx ].push( { h: tmpPath, p: tmpPoints[ 0 ] } ); - - //console.log('ccw', i); - - } - - } - - // only Holes? -> probably all Shapes with wrong orientation - if ( ! newShapes[ 0 ] ) return toShapesNoHoles( subPaths ); - - - if ( newShapes.length > 1 ) { - - let ambiguous = false; - let toChange = 0; - - for ( let sIdx = 0, sLen = newShapes.length; sIdx < sLen; sIdx ++ ) { - - betterShapeHoles[ sIdx ] = []; - - } - - for ( let sIdx = 0, sLen = newShapes.length; sIdx < sLen; sIdx ++ ) { - - const sho = newShapeHoles[ sIdx ]; - - for ( let hIdx = 0; hIdx < sho.length; hIdx ++ ) { - - const ho = sho[ hIdx ]; - let hole_unassigned = true; - - for ( let s2Idx = 0; s2Idx < newShapes.length; s2Idx ++ ) { - - if ( isPointInsidePolygon( ho.p, newShapes[ s2Idx ].p ) ) { - - if ( sIdx !== s2Idx ) toChange ++; - - if ( hole_unassigned ) { - - hole_unassigned = false; - betterShapeHoles[ s2Idx ].push( ho ); - - } else { - - ambiguous = true; - - } - - } - - } - - if ( hole_unassigned ) { - - betterShapeHoles[ sIdx ].push( ho ); - - } - - } - - } - - if ( toChange > 0 && ambiguous === false ) { - - newShapeHoles = betterShapeHoles; - - } - - } - - let tmpHoles; - - for ( let i = 0, il = newShapes.length; i < il; i ++ ) { - - tmpShape = newShapes[ i ].s; - shapes.push( tmpShape ); - tmpHoles = newShapeHoles[ i ]; - - for ( let j = 0, jl = tmpHoles.length; j < jl; j ++ ) { - - tmpShape.holes.push( tmpHoles[ j ].h ); - - } - - } - - //console.log("shape", shapes); - - return shapes; - - } - - } - - // Fast Half Float Conversions, http://www.fox-toolkit.org/ftp/fasthalffloatconversion.pdf - - const _tables = /*@__PURE__*/ _generateTables(); - - function _generateTables() { - - // float32 to float16 helpers - - const buffer = new ArrayBuffer( 4 ); - const floatView = new Float32Array( buffer ); - const uint32View = new Uint32Array( buffer ); - - const baseTable = new Uint32Array( 512 ); - const shiftTable = new Uint32Array( 512 ); - - for ( let i = 0; i < 256; ++ i ) { - - const e = i - 127; - - // very small number (0, -0) - - if ( e < - 27 ) { - - baseTable[ i ] = 0x0000; - baseTable[ i | 0x100 ] = 0x8000; - shiftTable[ i ] = 24; - shiftTable[ i | 0x100 ] = 24; - - // small number (denorm) - - } else if ( e < - 14 ) { - - baseTable[ i ] = 0x0400 >> ( - e - 14 ); - baseTable[ i | 0x100 ] = ( 0x0400 >> ( - e - 14 ) ) | 0x8000; - shiftTable[ i ] = - e - 1; - shiftTable[ i | 0x100 ] = - e - 1; - - // normal number - - } else if ( e <= 15 ) { - - baseTable[ i ] = ( e + 15 ) << 10; - baseTable[ i | 0x100 ] = ( ( e + 15 ) << 10 ) | 0x8000; - shiftTable[ i ] = 13; - shiftTable[ i | 0x100 ] = 13; - - // large number (Infinity, -Infinity) - - } else if ( e < 128 ) { - - baseTable[ i ] = 0x7c00; - baseTable[ i | 0x100 ] = 0xfc00; - shiftTable[ i ] = 24; - shiftTable[ i | 0x100 ] = 24; - - // stay (NaN, Infinity, -Infinity) - - } else { - - baseTable[ i ] = 0x7c00; - baseTable[ i | 0x100 ] = 0xfc00; - shiftTable[ i ] = 13; - shiftTable[ i | 0x100 ] = 13; - - } - - } - - // float16 to float32 helpers - - const mantissaTable = new Uint32Array( 2048 ); - const exponentTable = new Uint32Array( 64 ); - const offsetTable = new Uint32Array( 64 ); - - for ( let i = 1; i < 1024; ++ i ) { - - let m = i << 13; // zero pad mantissa bits - let e = 0; // zero exponent - - // normalized - while ( ( m & 0x00800000 ) === 0 ) { - - m <<= 1; - e -= 0x00800000; // decrement exponent - - } - - m &= ~ 0x00800000; // clear leading 1 bit - e += 0x38800000; // adjust bias - - mantissaTable[ i ] = m | e; - - } - - for ( let i = 1024; i < 2048; ++ i ) { - - mantissaTable[ i ] = 0x38000000 + ( ( i - 1024 ) << 13 ); - - } - - for ( let i = 1; i < 31; ++ i ) { - - exponentTable[ i ] = i << 23; - - } - - exponentTable[ 31 ] = 0x47800000; - exponentTable[ 32 ] = 0x80000000; - - for ( let i = 33; i < 63; ++ i ) { - - exponentTable[ i ] = 0x80000000 + ( ( i - 32 ) << 23 ); - - } - - exponentTable[ 63 ] = 0xc7800000; - - for ( let i = 1; i < 64; ++ i ) { - - if ( i !== 32 ) { - - offsetTable[ i ] = 1024; - - } - - } - - return { - floatView: floatView, - uint32View: uint32View, - baseTable: baseTable, - shiftTable: shiftTable, - mantissaTable: mantissaTable, - exponentTable: exponentTable, - offsetTable: offsetTable - }; - - } - - // float32 to float16 - - function toHalfFloat( val ) { - - if ( Math.abs( val ) > 65504 ) console.warn( 'THREE.DataUtils.toHalfFloat(): Value out of range.' ); - - val = clamp( val, - 65504, 65504 ); - - _tables.floatView[ 0 ] = val; - const f = _tables.uint32View[ 0 ]; - const e = ( f >> 23 ) & 0x1ff; - return _tables.baseTable[ e ] + ( ( f & 0x007fffff ) >> _tables.shiftTable[ e ] ); - - } - - // float16 to float32 - - function fromHalfFloat( val ) { - - const m = val >> 10; - _tables.uint32View[ 0 ] = _tables.mantissaTable[ _tables.offsetTable[ m ] + ( val & 0x3ff ) ] + _tables.exponentTable[ m ]; - return _tables.floatView[ 0 ]; - - } - - const DataUtils = { - toHalfFloat: toHalfFloat, - fromHalfFloat: fromHalfFloat, - }; - - // r144 - - class BoxBufferGeometry extends BoxGeometry { - - constructor( width, height, depth, widthSegments, heightSegments, depthSegments ) { - - console.warn( 'THREE.BoxBufferGeometry has been renamed to THREE.BoxGeometry.' ); - super( width, height, depth, widthSegments, heightSegments, depthSegments ); - - - } - - } - - // r144 - - class CapsuleBufferGeometry extends CapsuleGeometry { - - constructor( radius, length, capSegments, radialSegments ) { - - console.warn( 'THREE.CapsuleBufferGeometry has been renamed to THREE.CapsuleGeometry.' ); - super( radius, length, capSegments, radialSegments ); - - } - - } - - // r144 - - class CircleBufferGeometry extends CircleGeometry { - - constructor( radius, segments, thetaStart, thetaLength ) { - - console.warn( 'THREE.CircleBufferGeometry has been renamed to THREE.CircleGeometry.' ); - super( radius, segments, thetaStart, thetaLength ); - - } - - } - - // r144 - - class ConeBufferGeometry extends ConeGeometry { - - constructor( radius, height, radialSegments, heightSegments, openEnded, thetaStart, thetaLength ) { - - console.warn( 'THREE.ConeBufferGeometry has been renamed to THREE.ConeGeometry.' ); - super( radius, height, radialSegments, heightSegments, openEnded, thetaStart, thetaLength ); - - } - - } - - // r144 - - class CylinderBufferGeometry extends CylinderGeometry { - - constructor( radiusTop, radiusBottom, height, radialSegments, heightSegments, openEnded, thetaStart, thetaLength ) { - - console.warn( 'THREE.CylinderBufferGeometry has been renamed to THREE.CylinderGeometry.' ); - super( radiusTop, radiusBottom, height, radialSegments, heightSegments, openEnded, thetaStart, thetaLength ); - - } - - } - - // r144 - - class DodecahedronBufferGeometry extends DodecahedronGeometry { - - constructor( radius, detail ) { - - console.warn( 'THREE.DodecahedronBufferGeometry has been renamed to THREE.DodecahedronGeometry.' ); - super( radius, detail ); - - } - - } - - // r144 - - class ExtrudeBufferGeometry extends ExtrudeGeometry { - - constructor( shapes, options ) { - - console.warn( 'THREE.ExtrudeBufferGeometry has been renamed to THREE.ExtrudeGeometry.' ); - super( shapes, options ); - - } - - } - - // r144 - - class IcosahedronBufferGeometry extends IcosahedronGeometry { - - constructor( radius, detail ) { - - console.warn( 'THREE.IcosahedronBufferGeometry has been renamed to THREE.IcosahedronGeometry.' ); - super( radius, detail ); - - } - - } - - // r144 - - class LatheBufferGeometry extends LatheGeometry { - - constructor( points, segments, phiStart, phiLength ) { - - console.warn( 'THREE.LatheBufferGeometry has been renamed to THREE.LatheGeometry.' ); - super( points, segments, phiStart, phiLength ); - - } - - } - - // r144 - - class OctahedronBufferGeometry extends OctahedronGeometry { - - constructor( radius, detail ) { - - console.warn( 'THREE.OctahedronBufferGeometry has been renamed to THREE.OctahedronGeometry.' ); - super( radius, detail ); - - } - - } - - // r144 - - class PlaneBufferGeometry extends PlaneGeometry { - - constructor( width, height, widthSegments, heightSegments ) { - - console.warn( 'THREE.PlaneBufferGeometry has been renamed to THREE.PlaneGeometry.' ); - super( width, height, widthSegments, heightSegments ); - - } - - } - - // r144 - - class PolyhedronBufferGeometry extends PolyhedronGeometry { - - constructor( vertices, indices, radius, detail ) { - - console.warn( 'THREE.PolyhedronBufferGeometry has been renamed to THREE.PolyhedronGeometry.' ); - super( vertices, indices, radius, detail ); - - } - - } - - // r144 - - class RingBufferGeometry extends RingGeometry { - - constructor( innerRadius, outerRadius, thetaSegments, phiSegments, thetaStart, thetaLength ) { - - console.warn( 'THREE.RingBufferGeometry has been renamed to THREE.RingGeometry.' ); - super( innerRadius, outerRadius, thetaSegments, phiSegments, thetaStart, thetaLength ); - - } - - } - - // r144 - - class ShapeBufferGeometry extends ShapeGeometry { - - constructor( shapes, curveSegments ) { - - console.warn( 'THREE.ShapeBufferGeometry has been renamed to THREE.ShapeGeometry.' ); - super( shapes, curveSegments ); - - } - - } - - // r144 - - class SphereBufferGeometry extends SphereGeometry { - - constructor( radius, widthSegments, heightSegments, phiStart, phiLength, thetaStart, thetaLength ) { - - console.warn( 'THREE.SphereBufferGeometry has been renamed to THREE.SphereGeometry.' ); - super( radius, widthSegments, heightSegments, phiStart, phiLength, thetaStart, thetaLength ); - - } - - } - - // r144 - - class TetrahedronBufferGeometry extends TetrahedronGeometry { - - constructor( radius, detail ) { - - console.warn( 'THREE.TetrahedronBufferGeometry has been renamed to THREE.TetrahedronGeometry.' ); - super( radius, detail ); - - } - - } - - // r144 - - class TorusBufferGeometry extends TorusGeometry { - - constructor( radius, tube, radialSegments, tubularSegments, arc ) { - - console.warn( 'THREE.TorusBufferGeometry has been renamed to THREE.TorusGeometry.' ); - super( radius, tube, radialSegments, tubularSegments, arc ); - - } - - } - - // r144 - - class TorusKnotBufferGeometry extends TorusKnotGeometry { - - constructor( radius, tube, tubularSegments, radialSegments, p, q ) { - - console.warn( 'THREE.TorusKnotBufferGeometry has been renamed to THREE.TorusKnotGeometry.' ); - super( radius, tube, tubularSegments, radialSegments, p, q ); - - } - - } - - // r144 - - class TubeBufferGeometry extends TubeGeometry { - - constructor( path, tubularSegments, radius, radialSegments, closed ) { - - console.warn( 'THREE.TubeBufferGeometry has been renamed to THREE.TubeGeometry.' ); - super( path, tubularSegments, radius, radialSegments, closed ); - - } - - } - - if ( typeof __THREE_DEVTOOLS__ !== 'undefined' ) { - - __THREE_DEVTOOLS__.dispatchEvent( new CustomEvent( 'register', { detail: { - revision: REVISION, - } } ) ); - - } - - if ( typeof window !== 'undefined' ) { - - if ( window.__THREE__ ) { - - console.warn( 'WARNING: Multiple instances of Three.js being imported.' ); - - } else { - - window.__THREE__ = REVISION; - - } - - } - - exports.ACESFilmicToneMapping = ACESFilmicToneMapping; - exports.AddEquation = AddEquation; - exports.AddOperation = AddOperation; - exports.AdditiveAnimationBlendMode = AdditiveAnimationBlendMode; - exports.AdditiveBlending = AdditiveBlending; - exports.AlphaFormat = AlphaFormat; - exports.AlwaysDepth = AlwaysDepth; - exports.AlwaysStencilFunc = AlwaysStencilFunc; - exports.AmbientLight = AmbientLight; - exports.AmbientLightProbe = AmbientLightProbe; - exports.AnimationClip = AnimationClip; - exports.AnimationLoader = AnimationLoader; - exports.AnimationMixer = AnimationMixer; - exports.AnimationObjectGroup = AnimationObjectGroup; - exports.AnimationUtils = AnimationUtils; - exports.ArcCurve = ArcCurve; - exports.ArrayCamera = ArrayCamera; - exports.ArrowHelper = ArrowHelper; - exports.Audio = Audio; - exports.AudioAnalyser = AudioAnalyser; - exports.AudioContext = AudioContext; - exports.AudioListener = AudioListener; - exports.AudioLoader = AudioLoader; - exports.AxesHelper = AxesHelper; - exports.BackSide = BackSide; - exports.BasicDepthPacking = BasicDepthPacking; - exports.BasicShadowMap = BasicShadowMap; - exports.Bone = Bone; - exports.BooleanKeyframeTrack = BooleanKeyframeTrack; - exports.Box2 = Box2; - exports.Box3 = Box3; - exports.Box3Helper = Box3Helper; - exports.BoxBufferGeometry = BoxBufferGeometry; - exports.BoxGeometry = BoxGeometry; - exports.BoxHelper = BoxHelper; - exports.BufferAttribute = BufferAttribute; - exports.BufferGeometry = BufferGeometry; - exports.BufferGeometryLoader = BufferGeometryLoader; - exports.ByteType = ByteType; - exports.Cache = Cache; - exports.Camera = Camera; - exports.CameraHelper = CameraHelper; - exports.CanvasTexture = CanvasTexture; - exports.CapsuleBufferGeometry = CapsuleBufferGeometry; - exports.CapsuleGeometry = CapsuleGeometry; - exports.CatmullRomCurve3 = CatmullRomCurve3; - exports.CineonToneMapping = CineonToneMapping; - exports.CircleBufferGeometry = CircleBufferGeometry; - exports.CircleGeometry = CircleGeometry; - exports.ClampToEdgeWrapping = ClampToEdgeWrapping; - exports.Clock = Clock; - exports.Color = Color; - exports.ColorKeyframeTrack = ColorKeyframeTrack; - exports.ColorManagement = ColorManagement; - exports.CompressedArrayTexture = CompressedArrayTexture; - exports.CompressedTexture = CompressedTexture; - exports.CompressedTextureLoader = CompressedTextureLoader; - exports.ConeBufferGeometry = ConeBufferGeometry; - exports.ConeGeometry = ConeGeometry; - exports.CubeCamera = CubeCamera; - exports.CubeReflectionMapping = CubeReflectionMapping; - exports.CubeRefractionMapping = CubeRefractionMapping; - exports.CubeTexture = CubeTexture; - exports.CubeTextureLoader = CubeTextureLoader; - exports.CubeUVReflectionMapping = CubeUVReflectionMapping; - exports.CubicBezierCurve = CubicBezierCurve; - exports.CubicBezierCurve3 = CubicBezierCurve3; - exports.CubicInterpolant = CubicInterpolant; - exports.CullFaceBack = CullFaceBack; - exports.CullFaceFront = CullFaceFront; - exports.CullFaceFrontBack = CullFaceFrontBack; - exports.CullFaceNone = CullFaceNone; - exports.Curve = Curve; - exports.CurvePath = CurvePath; - exports.CustomBlending = CustomBlending; - exports.CustomToneMapping = CustomToneMapping; - exports.CylinderBufferGeometry = CylinderBufferGeometry; - exports.CylinderGeometry = CylinderGeometry; - exports.Cylindrical = Cylindrical; - exports.Data3DTexture = Data3DTexture; - exports.DataArrayTexture = DataArrayTexture; - exports.DataTexture = DataTexture; - exports.DataTextureLoader = DataTextureLoader; - exports.DataUtils = DataUtils; - exports.DecrementStencilOp = DecrementStencilOp; - exports.DecrementWrapStencilOp = DecrementWrapStencilOp; - exports.DefaultLoadingManager = DefaultLoadingManager; - exports.DepthFormat = DepthFormat; - exports.DepthStencilFormat = DepthStencilFormat; - exports.DepthTexture = DepthTexture; - exports.DirectionalLight = DirectionalLight; - exports.DirectionalLightHelper = DirectionalLightHelper; - exports.DiscreteInterpolant = DiscreteInterpolant; - exports.DisplayP3ColorSpace = DisplayP3ColorSpace; - exports.DodecahedronBufferGeometry = DodecahedronBufferGeometry; - exports.DodecahedronGeometry = DodecahedronGeometry; - exports.DoubleSide = DoubleSide; - exports.DstAlphaFactor = DstAlphaFactor; - exports.DstColorFactor = DstColorFactor; - exports.DynamicCopyUsage = DynamicCopyUsage; - exports.DynamicDrawUsage = DynamicDrawUsage; - exports.DynamicReadUsage = DynamicReadUsage; - exports.EdgesGeometry = EdgesGeometry; - exports.EllipseCurve = EllipseCurve; - exports.EqualDepth = EqualDepth; - exports.EqualStencilFunc = EqualStencilFunc; - exports.EquirectangularReflectionMapping = EquirectangularReflectionMapping; - exports.EquirectangularRefractionMapping = EquirectangularRefractionMapping; - exports.Euler = Euler; - exports.EventDispatcher = EventDispatcher; - exports.ExtrudeBufferGeometry = ExtrudeBufferGeometry; - exports.ExtrudeGeometry = ExtrudeGeometry; - exports.FileLoader = FileLoader; - exports.Float16BufferAttribute = Float16BufferAttribute; - exports.Float32BufferAttribute = Float32BufferAttribute; - exports.Float64BufferAttribute = Float64BufferAttribute; - exports.FloatType = FloatType; - exports.Fog = Fog; - exports.FogExp2 = FogExp2; - exports.FramebufferTexture = FramebufferTexture; - exports.FrontSide = FrontSide; - exports.Frustum = Frustum; - exports.GLBufferAttribute = GLBufferAttribute; - exports.GLSL1 = GLSL1; - exports.GLSL3 = GLSL3; - exports.GreaterDepth = GreaterDepth; - exports.GreaterEqualDepth = GreaterEqualDepth; - exports.GreaterEqualStencilFunc = GreaterEqualStencilFunc; - exports.GreaterStencilFunc = GreaterStencilFunc; - exports.GridHelper = GridHelper; - exports.Group = Group; - exports.HalfFloatType = HalfFloatType; - exports.HemisphereLight = HemisphereLight; - exports.HemisphereLightHelper = HemisphereLightHelper; - exports.HemisphereLightProbe = HemisphereLightProbe; - exports.IcosahedronBufferGeometry = IcosahedronBufferGeometry; - exports.IcosahedronGeometry = IcosahedronGeometry; - exports.ImageBitmapLoader = ImageBitmapLoader; - exports.ImageLoader = ImageLoader; - exports.ImageUtils = ImageUtils; - exports.IncrementStencilOp = IncrementStencilOp; - exports.IncrementWrapStencilOp = IncrementWrapStencilOp; - exports.InstancedBufferAttribute = InstancedBufferAttribute; - exports.InstancedBufferGeometry = InstancedBufferGeometry; - exports.InstancedInterleavedBuffer = InstancedInterleavedBuffer; - exports.InstancedMesh = InstancedMesh; - exports.Int16BufferAttribute = Int16BufferAttribute; - exports.Int32BufferAttribute = Int32BufferAttribute; - exports.Int8BufferAttribute = Int8BufferAttribute; - exports.IntType = IntType; - exports.InterleavedBuffer = InterleavedBuffer; - exports.InterleavedBufferAttribute = InterleavedBufferAttribute; - exports.Interpolant = Interpolant; - exports.InterpolateDiscrete = InterpolateDiscrete; - exports.InterpolateLinear = InterpolateLinear; - exports.InterpolateSmooth = InterpolateSmooth; - exports.InvertStencilOp = InvertStencilOp; - exports.KeepStencilOp = KeepStencilOp; - exports.KeyframeTrack = KeyframeTrack; - exports.LOD = LOD; - exports.LatheBufferGeometry = LatheBufferGeometry; - exports.LatheGeometry = LatheGeometry; - exports.Layers = Layers; - exports.LessDepth = LessDepth; - exports.LessEqualDepth = LessEqualDepth; - exports.LessEqualStencilFunc = LessEqualStencilFunc; - exports.LessStencilFunc = LessStencilFunc; - exports.Light = Light; - exports.LightProbe = LightProbe; - exports.Line = Line; - exports.Line3 = Line3; - exports.LineBasicMaterial = LineBasicMaterial; - exports.LineCurve = LineCurve; - exports.LineCurve3 = LineCurve3; - exports.LineDashedMaterial = LineDashedMaterial; - exports.LineLoop = LineLoop; - exports.LineSegments = LineSegments; - exports.LinearEncoding = LinearEncoding; - exports.LinearFilter = LinearFilter; - exports.LinearInterpolant = LinearInterpolant; - exports.LinearMipMapLinearFilter = LinearMipMapLinearFilter; - exports.LinearMipMapNearestFilter = LinearMipMapNearestFilter; - exports.LinearMipmapLinearFilter = LinearMipmapLinearFilter; - exports.LinearMipmapNearestFilter = LinearMipmapNearestFilter; - exports.LinearSRGBColorSpace = LinearSRGBColorSpace; - exports.LinearToneMapping = LinearToneMapping; - exports.Loader = Loader; - exports.LoaderUtils = LoaderUtils; - exports.LoadingManager = LoadingManager; - exports.LoopOnce = LoopOnce; - exports.LoopPingPong = LoopPingPong; - exports.LoopRepeat = LoopRepeat; - exports.LuminanceAlphaFormat = LuminanceAlphaFormat; - exports.LuminanceFormat = LuminanceFormat; - exports.MOUSE = MOUSE; - exports.Material = Material; - exports.MaterialLoader = MaterialLoader; - exports.MathUtils = MathUtils; - exports.Matrix3 = Matrix3; - exports.Matrix4 = Matrix4; - exports.MaxEquation = MaxEquation; - exports.Mesh = Mesh; - exports.MeshBasicMaterial = MeshBasicMaterial; - exports.MeshDepthMaterial = MeshDepthMaterial; - exports.MeshDistanceMaterial = MeshDistanceMaterial; - exports.MeshLambertMaterial = MeshLambertMaterial; - exports.MeshMatcapMaterial = MeshMatcapMaterial; - exports.MeshNormalMaterial = MeshNormalMaterial; - exports.MeshPhongMaterial = MeshPhongMaterial; - exports.MeshPhysicalMaterial = MeshPhysicalMaterial; - exports.MeshStandardMaterial = MeshStandardMaterial; - exports.MeshToonMaterial = MeshToonMaterial; - exports.MinEquation = MinEquation; - exports.MirroredRepeatWrapping = MirroredRepeatWrapping; - exports.MixOperation = MixOperation; - exports.MultiplyBlending = MultiplyBlending; - exports.MultiplyOperation = MultiplyOperation; - exports.NearestFilter = NearestFilter; - exports.NearestMipMapLinearFilter = NearestMipMapLinearFilter; - exports.NearestMipMapNearestFilter = NearestMipMapNearestFilter; - exports.NearestMipmapLinearFilter = NearestMipmapLinearFilter; - exports.NearestMipmapNearestFilter = NearestMipmapNearestFilter; - exports.NeverDepth = NeverDepth; - exports.NeverStencilFunc = NeverStencilFunc; - exports.NoBlending = NoBlending; - exports.NoColorSpace = NoColorSpace; - exports.NoToneMapping = NoToneMapping; - exports.NormalAnimationBlendMode = NormalAnimationBlendMode; - exports.NormalBlending = NormalBlending; - exports.NotEqualDepth = NotEqualDepth; - exports.NotEqualStencilFunc = NotEqualStencilFunc; - exports.NumberKeyframeTrack = NumberKeyframeTrack; - exports.Object3D = Object3D; - exports.ObjectLoader = ObjectLoader; - exports.ObjectSpaceNormalMap = ObjectSpaceNormalMap; - exports.OctahedronBufferGeometry = OctahedronBufferGeometry; - exports.OctahedronGeometry = OctahedronGeometry; - exports.OneFactor = OneFactor; - exports.OneMinusDstAlphaFactor = OneMinusDstAlphaFactor; - exports.OneMinusDstColorFactor = OneMinusDstColorFactor; - exports.OneMinusSrcAlphaFactor = OneMinusSrcAlphaFactor; - exports.OneMinusSrcColorFactor = OneMinusSrcColorFactor; - exports.OrthographicCamera = OrthographicCamera; - exports.PCFShadowMap = PCFShadowMap; - exports.PCFSoftShadowMap = PCFSoftShadowMap; - exports.PMREMGenerator = PMREMGenerator; - exports.Path = Path; - exports.PerspectiveCamera = PerspectiveCamera; - exports.Plane = Plane; - exports.PlaneBufferGeometry = PlaneBufferGeometry; - exports.PlaneGeometry = PlaneGeometry; - exports.PlaneHelper = PlaneHelper; - exports.PointLight = PointLight; - exports.PointLightHelper = PointLightHelper; - exports.Points = Points; - exports.PointsMaterial = PointsMaterial; - exports.PolarGridHelper = PolarGridHelper; - exports.PolyhedronBufferGeometry = PolyhedronBufferGeometry; - exports.PolyhedronGeometry = PolyhedronGeometry; - exports.PositionalAudio = PositionalAudio; - exports.PropertyBinding = PropertyBinding; - exports.PropertyMixer = PropertyMixer; - exports.QuadraticBezierCurve = QuadraticBezierCurve; - exports.QuadraticBezierCurve3 = QuadraticBezierCurve3; - exports.Quaternion = Quaternion; - exports.QuaternionKeyframeTrack = QuaternionKeyframeTrack; - exports.QuaternionLinearInterpolant = QuaternionLinearInterpolant; - exports.RED_GREEN_RGTC2_Format = RED_GREEN_RGTC2_Format; - exports.RED_RGTC1_Format = RED_RGTC1_Format; - exports.REVISION = REVISION; - exports.RGBADepthPacking = RGBADepthPacking; - exports.RGBAFormat = RGBAFormat; - exports.RGBAIntegerFormat = RGBAIntegerFormat; - exports.RGBA_ASTC_10x10_Format = RGBA_ASTC_10x10_Format; - exports.RGBA_ASTC_10x5_Format = RGBA_ASTC_10x5_Format; - exports.RGBA_ASTC_10x6_Format = RGBA_ASTC_10x6_Format; - exports.RGBA_ASTC_10x8_Format = RGBA_ASTC_10x8_Format; - exports.RGBA_ASTC_12x10_Format = RGBA_ASTC_12x10_Format; - exports.RGBA_ASTC_12x12_Format = RGBA_ASTC_12x12_Format; - exports.RGBA_ASTC_4x4_Format = RGBA_ASTC_4x4_Format; - exports.RGBA_ASTC_5x4_Format = RGBA_ASTC_5x4_Format; - exports.RGBA_ASTC_5x5_Format = RGBA_ASTC_5x5_Format; - exports.RGBA_ASTC_6x5_Format = RGBA_ASTC_6x5_Format; - exports.RGBA_ASTC_6x6_Format = RGBA_ASTC_6x6_Format; - exports.RGBA_ASTC_8x5_Format = RGBA_ASTC_8x5_Format; - exports.RGBA_ASTC_8x6_Format = RGBA_ASTC_8x6_Format; - exports.RGBA_ASTC_8x8_Format = RGBA_ASTC_8x8_Format; - exports.RGBA_BPTC_Format = RGBA_BPTC_Format; - exports.RGBA_ETC2_EAC_Format = RGBA_ETC2_EAC_Format; - exports.RGBA_PVRTC_2BPPV1_Format = RGBA_PVRTC_2BPPV1_Format; - exports.RGBA_PVRTC_4BPPV1_Format = RGBA_PVRTC_4BPPV1_Format; - exports.RGBA_S3TC_DXT1_Format = RGBA_S3TC_DXT1_Format; - exports.RGBA_S3TC_DXT3_Format = RGBA_S3TC_DXT3_Format; - exports.RGBA_S3TC_DXT5_Format = RGBA_S3TC_DXT5_Format; - exports.RGB_ETC1_Format = RGB_ETC1_Format; - exports.RGB_ETC2_Format = RGB_ETC2_Format; - exports.RGB_PVRTC_2BPPV1_Format = RGB_PVRTC_2BPPV1_Format; - exports.RGB_PVRTC_4BPPV1_Format = RGB_PVRTC_4BPPV1_Format; - exports.RGB_S3TC_DXT1_Format = RGB_S3TC_DXT1_Format; - exports.RGFormat = RGFormat; - exports.RGIntegerFormat = RGIntegerFormat; - exports.RawShaderMaterial = RawShaderMaterial; - exports.Ray = Ray; - exports.Raycaster = Raycaster; - exports.RectAreaLight = RectAreaLight; - exports.RedFormat = RedFormat; - exports.RedIntegerFormat = RedIntegerFormat; - exports.ReinhardToneMapping = ReinhardToneMapping; - exports.RepeatWrapping = RepeatWrapping; - exports.ReplaceStencilOp = ReplaceStencilOp; - exports.ReverseSubtractEquation = ReverseSubtractEquation; - exports.RingBufferGeometry = RingBufferGeometry; - exports.RingGeometry = RingGeometry; - exports.SIGNED_RED_GREEN_RGTC2_Format = SIGNED_RED_GREEN_RGTC2_Format; - exports.SIGNED_RED_RGTC1_Format = SIGNED_RED_RGTC1_Format; - exports.SRGBColorSpace = SRGBColorSpace; - exports.Scene = Scene; - exports.ShaderChunk = ShaderChunk; - exports.ShaderLib = ShaderLib; - exports.ShaderMaterial = ShaderMaterial; - exports.ShadowMaterial = ShadowMaterial; - exports.Shape = Shape; - exports.ShapeBufferGeometry = ShapeBufferGeometry; - exports.ShapeGeometry = ShapeGeometry; - exports.ShapePath = ShapePath; - exports.ShapeUtils = ShapeUtils; - exports.ShortType = ShortType; - exports.Skeleton = Skeleton; - exports.SkeletonHelper = SkeletonHelper; - exports.SkinnedMesh = SkinnedMesh; - exports.Source = Source; - exports.Sphere = Sphere; - exports.SphereBufferGeometry = SphereBufferGeometry; - exports.SphereGeometry = SphereGeometry; - exports.Spherical = Spherical; - exports.SphericalHarmonics3 = SphericalHarmonics3; - exports.SplineCurve = SplineCurve; - exports.SpotLight = SpotLight; - exports.SpotLightHelper = SpotLightHelper; - exports.Sprite = Sprite; - exports.SpriteMaterial = SpriteMaterial; - exports.SrcAlphaFactor = SrcAlphaFactor; - exports.SrcAlphaSaturateFactor = SrcAlphaSaturateFactor; - exports.SrcColorFactor = SrcColorFactor; - exports.StaticCopyUsage = StaticCopyUsage; - exports.StaticDrawUsage = StaticDrawUsage; - exports.StaticReadUsage = StaticReadUsage; - exports.StereoCamera = StereoCamera; - exports.StreamCopyUsage = StreamCopyUsage; - exports.StreamDrawUsage = StreamDrawUsage; - exports.StreamReadUsage = StreamReadUsage; - exports.StringKeyframeTrack = StringKeyframeTrack; - exports.SubtractEquation = SubtractEquation; - exports.SubtractiveBlending = SubtractiveBlending; - exports.TOUCH = TOUCH; - exports.TangentSpaceNormalMap = TangentSpaceNormalMap; - exports.TetrahedronBufferGeometry = TetrahedronBufferGeometry; - exports.TetrahedronGeometry = TetrahedronGeometry; - exports.Texture = Texture; - exports.TextureLoader = TextureLoader; - exports.TorusBufferGeometry = TorusBufferGeometry; - exports.TorusGeometry = TorusGeometry; - exports.TorusKnotBufferGeometry = TorusKnotBufferGeometry; - exports.TorusKnotGeometry = TorusKnotGeometry; - exports.Triangle = Triangle; - exports.TriangleFanDrawMode = TriangleFanDrawMode; - exports.TriangleStripDrawMode = TriangleStripDrawMode; - exports.TrianglesDrawMode = TrianglesDrawMode; - exports.TubeBufferGeometry = TubeBufferGeometry; - exports.TubeGeometry = TubeGeometry; - exports.TwoPassDoubleSide = TwoPassDoubleSide; - exports.UVMapping = UVMapping; - exports.Uint16BufferAttribute = Uint16BufferAttribute; - exports.Uint32BufferAttribute = Uint32BufferAttribute; - exports.Uint8BufferAttribute = Uint8BufferAttribute; - exports.Uint8ClampedBufferAttribute = Uint8ClampedBufferAttribute; - exports.Uniform = Uniform; - exports.UniformsGroup = UniformsGroup; - exports.UniformsLib = UniformsLib; - exports.UniformsUtils = UniformsUtils; - exports.UnsignedByteType = UnsignedByteType; - exports.UnsignedInt248Type = UnsignedInt248Type; - exports.UnsignedIntType = UnsignedIntType; - exports.UnsignedShort4444Type = UnsignedShort4444Type; - exports.UnsignedShort5551Type = UnsignedShort5551Type; - exports.UnsignedShortType = UnsignedShortType; - exports.VSMShadowMap = VSMShadowMap; - exports.Vector2 = Vector2; - exports.Vector3 = Vector3; - exports.Vector4 = Vector4; - exports.VectorKeyframeTrack = VectorKeyframeTrack; - exports.VideoTexture = VideoTexture; - exports.WebGL1Renderer = WebGL1Renderer; - exports.WebGL3DRenderTarget = WebGL3DRenderTarget; - exports.WebGLArrayRenderTarget = WebGLArrayRenderTarget; - exports.WebGLCubeRenderTarget = WebGLCubeRenderTarget; - exports.WebGLMultipleRenderTargets = WebGLMultipleRenderTargets; - exports.WebGLRenderTarget = WebGLRenderTarget; - exports.WebGLRenderer = WebGLRenderer; - exports.WebGLUtils = WebGLUtils; - exports.WireframeGeometry = WireframeGeometry; - exports.WrapAroundEnding = WrapAroundEnding; - exports.ZeroCurvatureEnding = ZeroCurvatureEnding; - exports.ZeroFactor = ZeroFactor; - exports.ZeroSlopeEnding = ZeroSlopeEnding; - exports.ZeroStencilOp = ZeroStencilOp; - exports._SRGBAFormat = _SRGBAFormat; - exports.sRGBEncoding = sRGBEncoding; - -})); diff --git a/examples/js/three_r150/three.min.js b/examples/js/three_r150/three.min.js deleted file mode 100644 index b4ab98d..0000000 --- a/examples/js/three_r150/three.min.js +++ /dev/null @@ -1,7 +0,0 @@ -console.warn( 'Scripts "build/three.js" and "build/three.min.js" are deprecated with r150+, and will be removed with r160. Please use ES Modules or alternatives: https://threejs.org/docs/index.html#manual/en/introduction/Installation' ); -/** - * @license - * Copyright 2010-2023 Three.js Authors - * SPDX-License-Identifier: MIT - */ -!function(t,e){"object"==typeof exports&&"undefined"!=typeof module?e(exports):"function"==typeof define&&define.amd?define(["exports"],e):e((t="undefined"!=typeof globalThis?globalThis:t||self).THREE={})}(this,(function(t){"use strict";const e="150",i=0,n=1,r=2,s=1,a=2,o=3,l=0,c=1,h=2,u=0,d=1,p=2,m=3,f=4,g=5,v=100,x=101,_=102,y=103,M=104,b=200,S=201,w=202,T=203,A=204,E=205,C=206,L=207,R=208,P=209,I=210,D=0,N=1,O=2,z=3,U=4,B=5,F=6,k=7,G=0,V=1,H=2,W=0,j=1,q=2,X=3,Y=4,Z=5,J=300,K=301,$=302,Q=303,tt=304,et=306,it=1e3,nt=1001,rt=1002,st=1003,at=1004,ot=1005,lt=1006,ct=1007,ht=1008,ut=1009,dt=1010,pt=1011,mt=1012,ft=1013,gt=1014,vt=1015,xt=1016,_t=1017,yt=1018,Mt=1020,bt=1021,St=1023,wt=1024,Tt=1025,At=1026,Et=1027,Ct=1028,Lt=1029,Rt=1030,Pt=1031,It=1033,Dt=33776,Nt=33777,Ot=33778,zt=33779,Ut=35840,Bt=35841,Ft=35842,kt=35843,Gt=36196,Vt=37492,Ht=37496,Wt=37808,jt=37809,qt=37810,Xt=37811,Yt=37812,Zt=37813,Jt=37814,Kt=37815,$t=37816,Qt=37817,te=37818,ee=37819,ie=37820,ne=37821,re=36492,se=36283,ae=36284,oe=36285,le=36286,ce=2300,he=2301,ue=2302,de=2400,pe=2401,me=2402,fe=2500,ge=2501,ve=3e3,xe=3001,_e=3201,ye=0,Me=1,be="srgb",Se="srgb-linear",we="display-p3",Te=7680,Ae=35044,Ee="300 es",Ce=1035;class Le{addEventListener(t,e){void 0===this._listeners&&(this._listeners={});const i=this._listeners;void 0===i[t]&&(i[t]=[]),-1===i[t].indexOf(e)&&i[t].push(e)}hasEventListener(t,e){if(void 0===this._listeners)return!1;const i=this._listeners;return void 0!==i[t]&&-1!==i[t].indexOf(e)}removeEventListener(t,e){if(void 0===this._listeners)return;const i=this._listeners[t];if(void 0!==i){const t=i.indexOf(e);-1!==t&&i.splice(t,1)}}dispatchEvent(t){if(void 0===this._listeners)return;const e=this._listeners[t.type];if(void 0!==e){t.target=this;const i=e.slice(0);for(let e=0,n=i.length;e>8&255]+Re[t>>16&255]+Re[t>>24&255]+"-"+Re[255&e]+Re[e>>8&255]+"-"+Re[e>>16&15|64]+Re[e>>24&255]+"-"+Re[63&i|128]+Re[i>>8&255]+"-"+Re[i>>16&255]+Re[i>>24&255]+Re[255&n]+Re[n>>8&255]+Re[n>>16&255]+Re[n>>24&255]).toLowerCase()}function Oe(t,e,i){return Math.max(e,Math.min(i,t))}function ze(t,e){return(t%e+e)%e}function Ue(t,e,i){return(1-i)*t+i*e}function Be(t){return 0==(t&t-1)&&0!==t}function Fe(t){return Math.pow(2,Math.ceil(Math.log(t)/Math.LN2))}function ke(t){return Math.pow(2,Math.floor(Math.log(t)/Math.LN2))}function Ge(t,e){switch(e.constructor){case Float32Array:return t;case Uint16Array:return t/65535;case Uint8Array:return t/255;case Int16Array:return Math.max(t/32767,-1);case Int8Array:return Math.max(t/127,-1);default:throw new Error("Invalid component type.")}}function Ve(t,e){switch(e.constructor){case Float32Array:return t;case Uint16Array:return Math.round(65535*t);case Uint8Array:return Math.round(255*t);case Int16Array:return Math.round(32767*t);case Int8Array:return Math.round(127*t);default:throw new Error("Invalid component type.")}}const He={DEG2RAD:Ie,RAD2DEG:De,generateUUID:Ne,clamp:Oe,euclideanModulo:ze,mapLinear:function(t,e,i,n,r){return n+(t-e)*(r-n)/(i-e)},inverseLerp:function(t,e,i){return t!==e?(i-t)/(e-t):0},lerp:Ue,damp:function(t,e,i,n){return Ue(t,e,1-Math.exp(-i*n))},pingpong:function(t,e=1){return e-Math.abs(ze(t,2*e)-e)},smoothstep:function(t,e,i){return t<=e?0:t>=i?1:(t=(t-e)/(i-e))*t*(3-2*t)},smootherstep:function(t,e,i){return t<=e?0:t>=i?1:(t=(t-e)/(i-e))*t*t*(t*(6*t-15)+10)},randInt:function(t,e){return t+Math.floor(Math.random()*(e-t+1))},randFloat:function(t,e){return t+Math.random()*(e-t)},randFloatSpread:function(t){return t*(.5-Math.random())},seededRandom:function(t){void 0!==t&&(Pe=t);let e=Pe+=1831565813;return e=Math.imul(e^e>>>15,1|e),e^=e+Math.imul(e^e>>>7,61|e),((e^e>>>14)>>>0)/4294967296},degToRad:function(t){return t*Ie},radToDeg:function(t){return t*De},isPowerOfTwo:Be,ceilPowerOfTwo:Fe,floorPowerOfTwo:ke,setQuaternionFromProperEuler:function(t,e,i,n,r){const s=Math.cos,a=Math.sin,o=s(i/2),l=a(i/2),c=s((e+n)/2),h=a((e+n)/2),u=s((e-n)/2),d=a((e-n)/2),p=s((n-e)/2),m=a((n-e)/2);switch(r){case"XYX":t.set(o*h,l*u,l*d,o*c);break;case"YZY":t.set(l*d,o*h,l*u,o*c);break;case"ZXZ":t.set(l*u,l*d,o*h,o*c);break;case"XZX":t.set(o*h,l*m,l*p,o*c);break;case"YXY":t.set(l*p,o*h,l*m,o*c);break;case"ZYZ":t.set(l*m,l*p,o*h,o*c);break;default:console.warn("THREE.MathUtils: .setQuaternionFromProperEuler() encountered an unknown order: "+r)}},normalize:Ve,denormalize:Ge};class We{constructor(t=0,e=0){We.prototype.isVector2=!0,this.x=t,this.y=e}get width(){return this.x}set width(t){this.x=t}get height(){return this.y}set height(t){this.y=t}set(t,e){return this.x=t,this.y=e,this}setScalar(t){return this.x=t,this.y=t,this}setX(t){return this.x=t,this}setY(t){return this.y=t,this}setComponent(t,e){switch(t){case 0:this.x=e;break;case 1:this.y=e;break;default:throw new Error("index is out of range: "+t)}return this}getComponent(t){switch(t){case 0:return this.x;case 1:return this.y;default:throw new Error("index is out of range: "+t)}}clone(){return new this.constructor(this.x,this.y)}copy(t){return this.x=t.x,this.y=t.y,this}add(t){return this.x+=t.x,this.y+=t.y,this}addScalar(t){return this.x+=t,this.y+=t,this}addVectors(t,e){return this.x=t.x+e.x,this.y=t.y+e.y,this}addScaledVector(t,e){return this.x+=t.x*e,this.y+=t.y*e,this}sub(t){return this.x-=t.x,this.y-=t.y,this}subScalar(t){return this.x-=t,this.y-=t,this}subVectors(t,e){return this.x=t.x-e.x,this.y=t.y-e.y,this}multiply(t){return this.x*=t.x,this.y*=t.y,this}multiplyScalar(t){return this.x*=t,this.y*=t,this}divide(t){return this.x/=t.x,this.y/=t.y,this}divideScalar(t){return this.multiplyScalar(1/t)}applyMatrix3(t){const e=this.x,i=this.y,n=t.elements;return this.x=n[0]*e+n[3]*i+n[6],this.y=n[1]*e+n[4]*i+n[7],this}min(t){return this.x=Math.min(this.x,t.x),this.y=Math.min(this.y,t.y),this}max(t){return this.x=Math.max(this.x,t.x),this.y=Math.max(this.y,t.y),this}clamp(t,e){return this.x=Math.max(t.x,Math.min(e.x,this.x)),this.y=Math.max(t.y,Math.min(e.y,this.y)),this}clampScalar(t,e){return this.x=Math.max(t,Math.min(e,this.x)),this.y=Math.max(t,Math.min(e,this.y)),this}clampLength(t,e){const i=this.length();return this.divideScalar(i||1).multiplyScalar(Math.max(t,Math.min(e,i)))}floor(){return this.x=Math.floor(this.x),this.y=Math.floor(this.y),this}ceil(){return this.x=Math.ceil(this.x),this.y=Math.ceil(this.y),this}round(){return this.x=Math.round(this.x),this.y=Math.round(this.y),this}roundToZero(){return this.x=this.x<0?Math.ceil(this.x):Math.floor(this.x),this.y=this.y<0?Math.ceil(this.y):Math.floor(this.y),this}negate(){return this.x=-this.x,this.y=-this.y,this}dot(t){return this.x*t.x+this.y*t.y}cross(t){return this.x*t.y-this.y*t.x}lengthSq(){return this.x*this.x+this.y*this.y}length(){return Math.sqrt(this.x*this.x+this.y*this.y)}manhattanLength(){return Math.abs(this.x)+Math.abs(this.y)}normalize(){return this.divideScalar(this.length()||1)}angle(){return Math.atan2(-this.y,-this.x)+Math.PI}distanceTo(t){return Math.sqrt(this.distanceToSquared(t))}distanceToSquared(t){const e=this.x-t.x,i=this.y-t.y;return e*e+i*i}manhattanDistanceTo(t){return Math.abs(this.x-t.x)+Math.abs(this.y-t.y)}setLength(t){return this.normalize().multiplyScalar(t)}lerp(t,e){return this.x+=(t.x-this.x)*e,this.y+=(t.y-this.y)*e,this}lerpVectors(t,e,i){return this.x=t.x+(e.x-t.x)*i,this.y=t.y+(e.y-t.y)*i,this}equals(t){return t.x===this.x&&t.y===this.y}fromArray(t,e=0){return this.x=t[e],this.y=t[e+1],this}toArray(t=[],e=0){return t[e]=this.x,t[e+1]=this.y,t}fromBufferAttribute(t,e){return this.x=t.getX(e),this.y=t.getY(e),this}rotateAround(t,e){const i=Math.cos(e),n=Math.sin(e),r=this.x-t.x,s=this.y-t.y;return this.x=r*i-s*n+t.x,this.y=r*n+s*i+t.y,this}random(){return this.x=Math.random(),this.y=Math.random(),this}*[Symbol.iterator](){yield this.x,yield this.y}}class je{constructor(){je.prototype.isMatrix3=!0,this.elements=[1,0,0,0,1,0,0,0,1]}set(t,e,i,n,r,s,a,o,l){const c=this.elements;return c[0]=t,c[1]=n,c[2]=a,c[3]=e,c[4]=r,c[5]=o,c[6]=i,c[7]=s,c[8]=l,this}identity(){return this.set(1,0,0,0,1,0,0,0,1),this}copy(t){const e=this.elements,i=t.elements;return e[0]=i[0],e[1]=i[1],e[2]=i[2],e[3]=i[3],e[4]=i[4],e[5]=i[5],e[6]=i[6],e[7]=i[7],e[8]=i[8],this}extractBasis(t,e,i){return t.setFromMatrix3Column(this,0),e.setFromMatrix3Column(this,1),i.setFromMatrix3Column(this,2),this}setFromMatrix4(t){const e=t.elements;return this.set(e[0],e[4],e[8],e[1],e[5],e[9],e[2],e[6],e[10]),this}multiply(t){return this.multiplyMatrices(this,t)}premultiply(t){return this.multiplyMatrices(t,this)}multiplyMatrices(t,e){const i=t.elements,n=e.elements,r=this.elements,s=i[0],a=i[3],o=i[6],l=i[1],c=i[4],h=i[7],u=i[2],d=i[5],p=i[8],m=n[0],f=n[3],g=n[6],v=n[1],x=n[4],_=n[7],y=n[2],M=n[5],b=n[8];return r[0]=s*m+a*v+o*y,r[3]=s*f+a*x+o*M,r[6]=s*g+a*_+o*b,r[1]=l*m+c*v+h*y,r[4]=l*f+c*x+h*M,r[7]=l*g+c*_+h*b,r[2]=u*m+d*v+p*y,r[5]=u*f+d*x+p*M,r[8]=u*g+d*_+p*b,this}multiplyScalar(t){const e=this.elements;return e[0]*=t,e[3]*=t,e[6]*=t,e[1]*=t,e[4]*=t,e[7]*=t,e[2]*=t,e[5]*=t,e[8]*=t,this}determinant(){const t=this.elements,e=t[0],i=t[1],n=t[2],r=t[3],s=t[4],a=t[5],o=t[6],l=t[7],c=t[8];return e*s*c-e*a*l-i*r*c+i*a*o+n*r*l-n*s*o}invert(){const t=this.elements,e=t[0],i=t[1],n=t[2],r=t[3],s=t[4],a=t[5],o=t[6],l=t[7],c=t[8],h=c*s-a*l,u=a*o-c*r,d=l*r-s*o,p=e*h+i*u+n*d;if(0===p)return this.set(0,0,0,0,0,0,0,0,0);const m=1/p;return t[0]=h*m,t[1]=(n*l-c*i)*m,t[2]=(a*i-n*s)*m,t[3]=u*m,t[4]=(c*e-n*o)*m,t[5]=(n*r-a*e)*m,t[6]=d*m,t[7]=(i*o-l*e)*m,t[8]=(s*e-i*r)*m,this}transpose(){let t;const e=this.elements;return t=e[1],e[1]=e[3],e[3]=t,t=e[2],e[2]=e[6],e[6]=t,t=e[5],e[5]=e[7],e[7]=t,this}getNormalMatrix(t){return this.setFromMatrix4(t).invert().transpose()}transposeIntoArray(t){const e=this.elements;return t[0]=e[0],t[1]=e[3],t[2]=e[6],t[3]=e[1],t[4]=e[4],t[5]=e[7],t[6]=e[2],t[7]=e[5],t[8]=e[8],this}setUvTransform(t,e,i,n,r,s,a){const o=Math.cos(r),l=Math.sin(r);return this.set(i*o,i*l,-i*(o*s+l*a)+s+t,-n*l,n*o,-n*(-l*s+o*a)+a+e,0,0,1),this}scale(t,e){return this.premultiply(qe.makeScale(t,e)),this}rotate(t){return this.premultiply(qe.makeRotation(-t)),this}translate(t,e){return this.premultiply(qe.makeTranslation(t,e)),this}makeTranslation(t,e){return this.set(1,0,t,0,1,e,0,0,1),this}makeRotation(t){const e=Math.cos(t),i=Math.sin(t);return this.set(e,-i,0,i,e,0,0,0,1),this}makeScale(t,e){return this.set(t,0,0,0,e,0,0,0,1),this}equals(t){const e=this.elements,i=t.elements;for(let t=0;t<9;t++)if(e[t]!==i[t])return!1;return!0}fromArray(t,e=0){for(let i=0;i<9;i++)this.elements[i]=t[i+e];return this}toArray(t=[],e=0){const i=this.elements;return t[e]=i[0],t[e+1]=i[1],t[e+2]=i[2],t[e+3]=i[3],t[e+4]=i[4],t[e+5]=i[5],t[e+6]=i[6],t[e+7]=i[7],t[e+8]=i[8],t}clone(){return(new this.constructor).fromArray(this.elements)}}const qe=new je;function Xe(t){for(let e=t.length-1;e>=0;--e)if(t[e]>=65535)return!0;return!1}const Ye={Int8Array:Int8Array,Uint8Array:Uint8Array,Uint8ClampedArray:Uint8ClampedArray,Int16Array:Int16Array,Uint16Array:Uint16Array,Int32Array:Int32Array,Uint32Array:Uint32Array,Float32Array:Float32Array,Float64Array:Float64Array};function Ze(t,e){return new Ye[t](e)}function Je(t){return document.createElementNS("http://www.w3.org/1999/xhtml",t)}class Ke{constructor(t=0,e=0,i=0,n=1){this.isQuaternion=!0,this._x=t,this._y=e,this._z=i,this._w=n}static slerpFlat(t,e,i,n,r,s,a){let o=i[n+0],l=i[n+1],c=i[n+2],h=i[n+3];const u=r[s+0],d=r[s+1],p=r[s+2],m=r[s+3];if(0===a)return t[e+0]=o,t[e+1]=l,t[e+2]=c,void(t[e+3]=h);if(1===a)return t[e+0]=u,t[e+1]=d,t[e+2]=p,void(t[e+3]=m);if(h!==m||o!==u||l!==d||c!==p){let t=1-a;const e=o*u+l*d+c*p+h*m,i=e>=0?1:-1,n=1-e*e;if(n>Number.EPSILON){const r=Math.sqrt(n),s=Math.atan2(r,e*i);t=Math.sin(t*s)/r,a=Math.sin(a*s)/r}const r=a*i;if(o=o*t+u*r,l=l*t+d*r,c=c*t+p*r,h=h*t+m*r,t===1-a){const t=1/Math.sqrt(o*o+l*l+c*c+h*h);o*=t,l*=t,c*=t,h*=t}}t[e]=o,t[e+1]=l,t[e+2]=c,t[e+3]=h}static multiplyQuaternionsFlat(t,e,i,n,r,s){const a=i[n],o=i[n+1],l=i[n+2],c=i[n+3],h=r[s],u=r[s+1],d=r[s+2],p=r[s+3];return t[e]=a*p+c*h+o*d-l*u,t[e+1]=o*p+c*u+l*h-a*d,t[e+2]=l*p+c*d+a*u-o*h,t[e+3]=c*p-a*h-o*u-l*d,t}get x(){return this._x}set x(t){this._x=t,this._onChangeCallback()}get y(){return this._y}set y(t){this._y=t,this._onChangeCallback()}get z(){return this._z}set z(t){this._z=t,this._onChangeCallback()}get w(){return this._w}set w(t){this._w=t,this._onChangeCallback()}set(t,e,i,n){return this._x=t,this._y=e,this._z=i,this._w=n,this._onChangeCallback(),this}clone(){return new this.constructor(this._x,this._y,this._z,this._w)}copy(t){return this._x=t.x,this._y=t.y,this._z=t.z,this._w=t.w,this._onChangeCallback(),this}setFromEuler(t,e){const i=t._x,n=t._y,r=t._z,s=t._order,a=Math.cos,o=Math.sin,l=a(i/2),c=a(n/2),h=a(r/2),u=o(i/2),d=o(n/2),p=o(r/2);switch(s){case"XYZ":this._x=u*c*h+l*d*p,this._y=l*d*h-u*c*p,this._z=l*c*p+u*d*h,this._w=l*c*h-u*d*p;break;case"YXZ":this._x=u*c*h+l*d*p,this._y=l*d*h-u*c*p,this._z=l*c*p-u*d*h,this._w=l*c*h+u*d*p;break;case"ZXY":this._x=u*c*h-l*d*p,this._y=l*d*h+u*c*p,this._z=l*c*p+u*d*h,this._w=l*c*h-u*d*p;break;case"ZYX":this._x=u*c*h-l*d*p,this._y=l*d*h+u*c*p,this._z=l*c*p-u*d*h,this._w=l*c*h+u*d*p;break;case"YZX":this._x=u*c*h+l*d*p,this._y=l*d*h+u*c*p,this._z=l*c*p-u*d*h,this._w=l*c*h-u*d*p;break;case"XZY":this._x=u*c*h-l*d*p,this._y=l*d*h-u*c*p,this._z=l*c*p+u*d*h,this._w=l*c*h+u*d*p;break;default:console.warn("THREE.Quaternion: .setFromEuler() encountered an unknown order: "+s)}return!1!==e&&this._onChangeCallback(),this}setFromAxisAngle(t,e){const i=e/2,n=Math.sin(i);return this._x=t.x*n,this._y=t.y*n,this._z=t.z*n,this._w=Math.cos(i),this._onChangeCallback(),this}setFromRotationMatrix(t){const e=t.elements,i=e[0],n=e[4],r=e[8],s=e[1],a=e[5],o=e[9],l=e[2],c=e[6],h=e[10],u=i+a+h;if(u>0){const t=.5/Math.sqrt(u+1);this._w=.25/t,this._x=(c-o)*t,this._y=(r-l)*t,this._z=(s-n)*t}else if(i>a&&i>h){const t=2*Math.sqrt(1+i-a-h);this._w=(c-o)/t,this._x=.25*t,this._y=(n+s)/t,this._z=(r+l)/t}else if(a>h){const t=2*Math.sqrt(1+a-i-h);this._w=(r-l)/t,this._x=(n+s)/t,this._y=.25*t,this._z=(o+c)/t}else{const t=2*Math.sqrt(1+h-i-a);this._w=(s-n)/t,this._x=(r+l)/t,this._y=(o+c)/t,this._z=.25*t}return this._onChangeCallback(),this}setFromUnitVectors(t,e){let i=t.dot(e)+1;return iMath.abs(t.z)?(this._x=-t.y,this._y=t.x,this._z=0,this._w=i):(this._x=0,this._y=-t.z,this._z=t.y,this._w=i)):(this._x=t.y*e.z-t.z*e.y,this._y=t.z*e.x-t.x*e.z,this._z=t.x*e.y-t.y*e.x,this._w=i),this.normalize()}angleTo(t){return 2*Math.acos(Math.abs(Oe(this.dot(t),-1,1)))}rotateTowards(t,e){const i=this.angleTo(t);if(0===i)return this;const n=Math.min(1,e/i);return this.slerp(t,n),this}identity(){return this.set(0,0,0,1)}invert(){return this.conjugate()}conjugate(){return this._x*=-1,this._y*=-1,this._z*=-1,this._onChangeCallback(),this}dot(t){return this._x*t._x+this._y*t._y+this._z*t._z+this._w*t._w}lengthSq(){return this._x*this._x+this._y*this._y+this._z*this._z+this._w*this._w}length(){return Math.sqrt(this._x*this._x+this._y*this._y+this._z*this._z+this._w*this._w)}normalize(){let t=this.length();return 0===t?(this._x=0,this._y=0,this._z=0,this._w=1):(t=1/t,this._x=this._x*t,this._y=this._y*t,this._z=this._z*t,this._w=this._w*t),this._onChangeCallback(),this}multiply(t){return this.multiplyQuaternions(this,t)}premultiply(t){return this.multiplyQuaternions(t,this)}multiplyQuaternions(t,e){const i=t._x,n=t._y,r=t._z,s=t._w,a=e._x,o=e._y,l=e._z,c=e._w;return this._x=i*c+s*a+n*l-r*o,this._y=n*c+s*o+r*a-i*l,this._z=r*c+s*l+i*o-n*a,this._w=s*c-i*a-n*o-r*l,this._onChangeCallback(),this}slerp(t,e){if(0===e)return this;if(1===e)return this.copy(t);const i=this._x,n=this._y,r=this._z,s=this._w;let a=s*t._w+i*t._x+n*t._y+r*t._z;if(a<0?(this._w=-t._w,this._x=-t._x,this._y=-t._y,this._z=-t._z,a=-a):this.copy(t),a>=1)return this._w=s,this._x=i,this._y=n,this._z=r,this;const o=1-a*a;if(o<=Number.EPSILON){const t=1-e;return this._w=t*s+e*this._w,this._x=t*i+e*this._x,this._y=t*n+e*this._y,this._z=t*r+e*this._z,this.normalize(),this._onChangeCallback(),this}const l=Math.sqrt(o),c=Math.atan2(l,a),h=Math.sin((1-e)*c)/l,u=Math.sin(e*c)/l;return this._w=s*h+this._w*u,this._x=i*h+this._x*u,this._y=n*h+this._y*u,this._z=r*h+this._z*u,this._onChangeCallback(),this}slerpQuaternions(t,e,i){return this.copy(t).slerp(e,i)}random(){const t=Math.random(),e=Math.sqrt(1-t),i=Math.sqrt(t),n=2*Math.PI*Math.random(),r=2*Math.PI*Math.random();return this.set(e*Math.cos(n),i*Math.sin(r),i*Math.cos(r),e*Math.sin(n))}equals(t){return t._x===this._x&&t._y===this._y&&t._z===this._z&&t._w===this._w}fromArray(t,e=0){return this._x=t[e],this._y=t[e+1],this._z=t[e+2],this._w=t[e+3],this._onChangeCallback(),this}toArray(t=[],e=0){return t[e]=this._x,t[e+1]=this._y,t[e+2]=this._z,t[e+3]=this._w,t}fromBufferAttribute(t,e){return this._x=t.getX(e),this._y=t.getY(e),this._z=t.getZ(e),this._w=t.getW(e),this}_onChange(t){return this._onChangeCallback=t,this}_onChangeCallback(){}*[Symbol.iterator](){yield this._x,yield this._y,yield this._z,yield this._w}}class $e{constructor(t=0,e=0,i=0){$e.prototype.isVector3=!0,this.x=t,this.y=e,this.z=i}set(t,e,i){return void 0===i&&(i=this.z),this.x=t,this.y=e,this.z=i,this}setScalar(t){return this.x=t,this.y=t,this.z=t,this}setX(t){return this.x=t,this}setY(t){return this.y=t,this}setZ(t){return this.z=t,this}setComponent(t,e){switch(t){case 0:this.x=e;break;case 1:this.y=e;break;case 2:this.z=e;break;default:throw new Error("index is out of range: "+t)}return this}getComponent(t){switch(t){case 0:return this.x;case 1:return this.y;case 2:return this.z;default:throw new Error("index is out of range: "+t)}}clone(){return new this.constructor(this.x,this.y,this.z)}copy(t){return this.x=t.x,this.y=t.y,this.z=t.z,this}add(t){return this.x+=t.x,this.y+=t.y,this.z+=t.z,this}addScalar(t){return this.x+=t,this.y+=t,this.z+=t,this}addVectors(t,e){return this.x=t.x+e.x,this.y=t.y+e.y,this.z=t.z+e.z,this}addScaledVector(t,e){return this.x+=t.x*e,this.y+=t.y*e,this.z+=t.z*e,this}sub(t){return this.x-=t.x,this.y-=t.y,this.z-=t.z,this}subScalar(t){return this.x-=t,this.y-=t,this.z-=t,this}subVectors(t,e){return this.x=t.x-e.x,this.y=t.y-e.y,this.z=t.z-e.z,this}multiply(t){return this.x*=t.x,this.y*=t.y,this.z*=t.z,this}multiplyScalar(t){return this.x*=t,this.y*=t,this.z*=t,this}multiplyVectors(t,e){return this.x=t.x*e.x,this.y=t.y*e.y,this.z=t.z*e.z,this}applyEuler(t){return this.applyQuaternion(ti.setFromEuler(t))}applyAxisAngle(t,e){return this.applyQuaternion(ti.setFromAxisAngle(t,e))}applyMatrix3(t){const e=this.x,i=this.y,n=this.z,r=t.elements;return this.x=r[0]*e+r[3]*i+r[6]*n,this.y=r[1]*e+r[4]*i+r[7]*n,this.z=r[2]*e+r[5]*i+r[8]*n,this}applyNormalMatrix(t){return this.applyMatrix3(t).normalize()}applyMatrix4(t){const e=this.x,i=this.y,n=this.z,r=t.elements,s=1/(r[3]*e+r[7]*i+r[11]*n+r[15]);return this.x=(r[0]*e+r[4]*i+r[8]*n+r[12])*s,this.y=(r[1]*e+r[5]*i+r[9]*n+r[13])*s,this.z=(r[2]*e+r[6]*i+r[10]*n+r[14])*s,this}applyQuaternion(t){const e=this.x,i=this.y,n=this.z,r=t.x,s=t.y,a=t.z,o=t.w,l=o*e+s*n-a*i,c=o*i+a*e-r*n,h=o*n+r*i-s*e,u=-r*e-s*i-a*n;return this.x=l*o+u*-r+c*-a-h*-s,this.y=c*o+u*-s+h*-r-l*-a,this.z=h*o+u*-a+l*-s-c*-r,this}project(t){return this.applyMatrix4(t.matrixWorldInverse).applyMatrix4(t.projectionMatrix)}unproject(t){return this.applyMatrix4(t.projectionMatrixInverse).applyMatrix4(t.matrixWorld)}transformDirection(t){const e=this.x,i=this.y,n=this.z,r=t.elements;return this.x=r[0]*e+r[4]*i+r[8]*n,this.y=r[1]*e+r[5]*i+r[9]*n,this.z=r[2]*e+r[6]*i+r[10]*n,this.normalize()}divide(t){return this.x/=t.x,this.y/=t.y,this.z/=t.z,this}divideScalar(t){return this.multiplyScalar(1/t)}min(t){return this.x=Math.min(this.x,t.x),this.y=Math.min(this.y,t.y),this.z=Math.min(this.z,t.z),this}max(t){return this.x=Math.max(this.x,t.x),this.y=Math.max(this.y,t.y),this.z=Math.max(this.z,t.z),this}clamp(t,e){return this.x=Math.max(t.x,Math.min(e.x,this.x)),this.y=Math.max(t.y,Math.min(e.y,this.y)),this.z=Math.max(t.z,Math.min(e.z,this.z)),this}clampScalar(t,e){return this.x=Math.max(t,Math.min(e,this.x)),this.y=Math.max(t,Math.min(e,this.y)),this.z=Math.max(t,Math.min(e,this.z)),this}clampLength(t,e){const i=this.length();return this.divideScalar(i||1).multiplyScalar(Math.max(t,Math.min(e,i)))}floor(){return this.x=Math.floor(this.x),this.y=Math.floor(this.y),this.z=Math.floor(this.z),this}ceil(){return this.x=Math.ceil(this.x),this.y=Math.ceil(this.y),this.z=Math.ceil(this.z),this}round(){return this.x=Math.round(this.x),this.y=Math.round(this.y),this.z=Math.round(this.z),this}roundToZero(){return this.x=this.x<0?Math.ceil(this.x):Math.floor(this.x),this.y=this.y<0?Math.ceil(this.y):Math.floor(this.y),this.z=this.z<0?Math.ceil(this.z):Math.floor(this.z),this}negate(){return this.x=-this.x,this.y=-this.y,this.z=-this.z,this}dot(t){return this.x*t.x+this.y*t.y+this.z*t.z}lengthSq(){return this.x*this.x+this.y*this.y+this.z*this.z}length(){return Math.sqrt(this.x*this.x+this.y*this.y+this.z*this.z)}manhattanLength(){return Math.abs(this.x)+Math.abs(this.y)+Math.abs(this.z)}normalize(){return this.divideScalar(this.length()||1)}setLength(t){return this.normalize().multiplyScalar(t)}lerp(t,e){return this.x+=(t.x-this.x)*e,this.y+=(t.y-this.y)*e,this.z+=(t.z-this.z)*e,this}lerpVectors(t,e,i){return this.x=t.x+(e.x-t.x)*i,this.y=t.y+(e.y-t.y)*i,this.z=t.z+(e.z-t.z)*i,this}cross(t){return this.crossVectors(this,t)}crossVectors(t,e){const i=t.x,n=t.y,r=t.z,s=e.x,a=e.y,o=e.z;return this.x=n*o-r*a,this.y=r*s-i*o,this.z=i*a-n*s,this}projectOnVector(t){const e=t.lengthSq();if(0===e)return this.set(0,0,0);const i=t.dot(this)/e;return this.copy(t).multiplyScalar(i)}projectOnPlane(t){return Qe.copy(this).projectOnVector(t),this.sub(Qe)}reflect(t){return this.sub(Qe.copy(t).multiplyScalar(2*this.dot(t)))}angleTo(t){const e=Math.sqrt(this.lengthSq()*t.lengthSq());if(0===e)return Math.PI/2;const i=this.dot(t)/e;return Math.acos(Oe(i,-1,1))}distanceTo(t){return Math.sqrt(this.distanceToSquared(t))}distanceToSquared(t){const e=this.x-t.x,i=this.y-t.y,n=this.z-t.z;return e*e+i*i+n*n}manhattanDistanceTo(t){return Math.abs(this.x-t.x)+Math.abs(this.y-t.y)+Math.abs(this.z-t.z)}setFromSpherical(t){return this.setFromSphericalCoords(t.radius,t.phi,t.theta)}setFromSphericalCoords(t,e,i){const n=Math.sin(e)*t;return this.x=n*Math.sin(i),this.y=Math.cos(e)*t,this.z=n*Math.cos(i),this}setFromCylindrical(t){return this.setFromCylindricalCoords(t.radius,t.theta,t.y)}setFromCylindricalCoords(t,e,i){return this.x=t*Math.sin(e),this.y=i,this.z=t*Math.cos(e),this}setFromMatrixPosition(t){const e=t.elements;return this.x=e[12],this.y=e[13],this.z=e[14],this}setFromMatrixScale(t){const e=this.setFromMatrixColumn(t,0).length(),i=this.setFromMatrixColumn(t,1).length(),n=this.setFromMatrixColumn(t,2).length();return this.x=e,this.y=i,this.z=n,this}setFromMatrixColumn(t,e){return this.fromArray(t.elements,4*e)}setFromMatrix3Column(t,e){return this.fromArray(t.elements,3*e)}setFromEuler(t){return this.x=t._x,this.y=t._y,this.z=t._z,this}equals(t){return t.x===this.x&&t.y===this.y&&t.z===this.z}fromArray(t,e=0){return this.x=t[e],this.y=t[e+1],this.z=t[e+2],this}toArray(t=[],e=0){return t[e]=this.x,t[e+1]=this.y,t[e+2]=this.z,t}fromBufferAttribute(t,e){return this.x=t.getX(e),this.y=t.getY(e),this.z=t.getZ(e),this}random(){return this.x=Math.random(),this.y=Math.random(),this.z=Math.random(),this}randomDirection(){const t=2*(Math.random()-.5),e=Math.random()*Math.PI*2,i=Math.sqrt(1-t**2);return this.x=i*Math.cos(e),this.y=i*Math.sin(e),this.z=t,this}*[Symbol.iterator](){yield this.x,yield this.y,yield this.z}}const Qe=new $e,ti=new Ke;function ei(t){return t<.04045?.0773993808*t:Math.pow(.9478672986*t+.0521327014,2.4)}function ii(t){return t<.0031308?12.92*t:1.055*Math.pow(t,.41666)-.055}const ni=(new je).fromArray([.8224621,.0331941,.0170827,.177538,.9668058,.0723974,-1e-7,1e-7,.9105199]),ri=(new je).fromArray([1.2249401,-.0420569,-.0196376,-.2249404,1.0420571,-.0786361,1e-7,0,1.0982735]),si=new $e;const ai={[Se]:t=>t,[be]:t=>t.convertSRGBToLinear(),[we]:function(t){return t.convertSRGBToLinear(),si.set(t.r,t.g,t.b).applyMatrix3(ri),t.setRGB(si.x,si.y,si.z)}},oi={[Se]:t=>t,[be]:t=>t.convertLinearToSRGB(),[we]:function(t){return si.set(t.r,t.g,t.b).applyMatrix3(ni),t.setRGB(si.x,si.y,si.z).convertLinearToSRGB()}},li={enabled:!1,get legacyMode(){return console.warn("THREE.ColorManagement: .legacyMode=false renamed to .enabled=true in r150."),!this.enabled},set legacyMode(t){console.warn("THREE.ColorManagement: .legacyMode=false renamed to .enabled=true in r150."),this.enabled=!t},get workingColorSpace(){return Se},set workingColorSpace(t){console.warn("THREE.ColorManagement: .workingColorSpace is readonly.")},convert:function(t,e,i){if(!1===this.enabled||e===i||!e||!i)return t;const n=ai[e],r=oi[i];if(void 0===n||void 0===r)throw new Error(`Unsupported color space conversion, "${e}" to "${i}".`);return r(n(t))},fromWorkingColorSpace:function(t,e){return this.convert(t,this.workingColorSpace,e)},toWorkingColorSpace:function(t,e){return this.convert(t,e,this.workingColorSpace)}};let ci;class hi{static getDataURL(t){if(/^data:/i.test(t.src))return t.src;if("undefined"==typeof HTMLCanvasElement)return t.src;let e;if(t instanceof HTMLCanvasElement)e=t;else{void 0===ci&&(ci=Je("canvas")),ci.width=t.width,ci.height=t.height;const i=ci.getContext("2d");t instanceof ImageData?i.putImageData(t,0,0):i.drawImage(t,0,0,t.width,t.height),e=ci}return e.width>2048||e.height>2048?(console.warn("THREE.ImageUtils.getDataURL: Image converted to jpg for performance reasons",t),e.toDataURL("image/jpeg",.6)):e.toDataURL("image/png")}static sRGBToLinear(t){if("undefined"!=typeof HTMLImageElement&&t instanceof HTMLImageElement||"undefined"!=typeof HTMLCanvasElement&&t instanceof HTMLCanvasElement||"undefined"!=typeof ImageBitmap&&t instanceof ImageBitmap){const e=Je("canvas");e.width=t.width,e.height=t.height;const i=e.getContext("2d");i.drawImage(t,0,0,t.width,t.height);const n=i.getImageData(0,0,t.width,t.height),r=n.data;for(let t=0;t0&&(i.userData=this.userData),e||(t.textures[this.uuid]=i),i}dispose(){this.dispatchEvent({type:"dispose"})}transformUv(t){if(this.mapping!==J)return t;if(t.applyMatrix3(this.matrix),t.x<0||t.x>1)switch(this.wrapS){case it:t.x=t.x-Math.floor(t.x);break;case nt:t.x=t.x<0?0:1;break;case rt:1===Math.abs(Math.floor(t.x)%2)?t.x=Math.ceil(t.x)-t.x:t.x=t.x-Math.floor(t.x)}if(t.y<0||t.y>1)switch(this.wrapT){case it:t.y=t.y-Math.floor(t.y);break;case nt:t.y=t.y<0?0:1;break;case rt:1===Math.abs(Math.floor(t.y)%2)?t.y=Math.ceil(t.y)-t.y:t.y=t.y-Math.floor(t.y)}return this.flipY&&(t.y=1-t.y),t}set needsUpdate(t){!0===t&&(this.version++,this.source.needsUpdate=!0)}}mi.DEFAULT_IMAGE=null,mi.DEFAULT_MAPPING=J,mi.DEFAULT_ANISOTROPY=1;class fi{constructor(t=0,e=0,i=0,n=1){fi.prototype.isVector4=!0,this.x=t,this.y=e,this.z=i,this.w=n}get width(){return this.z}set width(t){this.z=t}get height(){return this.w}set height(t){this.w=t}set(t,e,i,n){return this.x=t,this.y=e,this.z=i,this.w=n,this}setScalar(t){return this.x=t,this.y=t,this.z=t,this.w=t,this}setX(t){return this.x=t,this}setY(t){return this.y=t,this}setZ(t){return this.z=t,this}setW(t){return this.w=t,this}setComponent(t,e){switch(t){case 0:this.x=e;break;case 1:this.y=e;break;case 2:this.z=e;break;case 3:this.w=e;break;default:throw new Error("index is out of range: "+t)}return this}getComponent(t){switch(t){case 0:return this.x;case 1:return this.y;case 2:return this.z;case 3:return this.w;default:throw new Error("index is out of range: "+t)}}clone(){return new this.constructor(this.x,this.y,this.z,this.w)}copy(t){return this.x=t.x,this.y=t.y,this.z=t.z,this.w=void 0!==t.w?t.w:1,this}add(t){return this.x+=t.x,this.y+=t.y,this.z+=t.z,this.w+=t.w,this}addScalar(t){return this.x+=t,this.y+=t,this.z+=t,this.w+=t,this}addVectors(t,e){return this.x=t.x+e.x,this.y=t.y+e.y,this.z=t.z+e.z,this.w=t.w+e.w,this}addScaledVector(t,e){return this.x+=t.x*e,this.y+=t.y*e,this.z+=t.z*e,this.w+=t.w*e,this}sub(t){return this.x-=t.x,this.y-=t.y,this.z-=t.z,this.w-=t.w,this}subScalar(t){return this.x-=t,this.y-=t,this.z-=t,this.w-=t,this}subVectors(t,e){return this.x=t.x-e.x,this.y=t.y-e.y,this.z=t.z-e.z,this.w=t.w-e.w,this}multiply(t){return this.x*=t.x,this.y*=t.y,this.z*=t.z,this.w*=t.w,this}multiplyScalar(t){return this.x*=t,this.y*=t,this.z*=t,this.w*=t,this}applyMatrix4(t){const e=this.x,i=this.y,n=this.z,r=this.w,s=t.elements;return this.x=s[0]*e+s[4]*i+s[8]*n+s[12]*r,this.y=s[1]*e+s[5]*i+s[9]*n+s[13]*r,this.z=s[2]*e+s[6]*i+s[10]*n+s[14]*r,this.w=s[3]*e+s[7]*i+s[11]*n+s[15]*r,this}divideScalar(t){return this.multiplyScalar(1/t)}setAxisAngleFromQuaternion(t){this.w=2*Math.acos(t.w);const e=Math.sqrt(1-t.w*t.w);return e<1e-4?(this.x=1,this.y=0,this.z=0):(this.x=t.x/e,this.y=t.y/e,this.z=t.z/e),this}setAxisAngleFromRotationMatrix(t){let e,i,n,r;const s=.01,a=.1,o=t.elements,l=o[0],c=o[4],h=o[8],u=o[1],d=o[5],p=o[9],m=o[2],f=o[6],g=o[10];if(Math.abs(c-u)o&&t>v?tv?or&&(r=l),c>s&&(s=c),h>a&&(a=h)}return this.min.set(e,i,n),this.max.set(r,s,a),this}setFromBufferAttribute(t){let e=1/0,i=1/0,n=1/0,r=-1/0,s=-1/0,a=-1/0;for(let o=0,l=t.count;or&&(r=l),c>s&&(s=c),h>a&&(a=h)}return this.min.set(e,i,n),this.max.set(r,s,a),this}setFromPoints(t){this.makeEmpty();for(let e=0,i=t.length;ethis.max.x||t.ythis.max.y||t.zthis.max.z)}containsBox(t){return this.min.x<=t.min.x&&t.max.x<=this.max.x&&this.min.y<=t.min.y&&t.max.y<=this.max.y&&this.min.z<=t.min.z&&t.max.z<=this.max.z}getParameter(t,e){return e.set((t.x-this.min.x)/(this.max.x-this.min.x),(t.y-this.min.y)/(this.max.y-this.min.y),(t.z-this.min.z)/(this.max.z-this.min.z))}intersectsBox(t){return!(t.max.xthis.max.x||t.max.ythis.max.y||t.max.zthis.max.z)}intersectsSphere(t){return this.clampPoint(t.center,Mi),Mi.distanceToSquared(t.center)<=t.radius*t.radius}intersectsPlane(t){let e,i;return t.normal.x>0?(e=t.normal.x*this.min.x,i=t.normal.x*this.max.x):(e=t.normal.x*this.max.x,i=t.normal.x*this.min.x),t.normal.y>0?(e+=t.normal.y*this.min.y,i+=t.normal.y*this.max.y):(e+=t.normal.y*this.max.y,i+=t.normal.y*this.min.y),t.normal.z>0?(e+=t.normal.z*this.min.z,i+=t.normal.z*this.max.z):(e+=t.normal.z*this.max.z,i+=t.normal.z*this.min.z),e<=-t.constant&&i>=-t.constant}intersectsTriangle(t){if(this.isEmpty())return!1;this.getCenter(Li),Ri.subVectors(this.max,Li),Si.subVectors(t.a,Li),wi.subVectors(t.b,Li),Ti.subVectors(t.c,Li),Ai.subVectors(wi,Si),Ei.subVectors(Ti,wi),Ci.subVectors(Si,Ti);let e=[0,-Ai.z,Ai.y,0,-Ei.z,Ei.y,0,-Ci.z,Ci.y,Ai.z,0,-Ai.x,Ei.z,0,-Ei.x,Ci.z,0,-Ci.x,-Ai.y,Ai.x,0,-Ei.y,Ei.x,0,-Ci.y,Ci.x,0];return!!Di(e,Si,wi,Ti,Ri)&&(e=[1,0,0,0,1,0,0,0,1],!!Di(e,Si,wi,Ti,Ri)&&(Pi.crossVectors(Ai,Ei),e=[Pi.x,Pi.y,Pi.z],Di(e,Si,wi,Ti,Ri)))}clampPoint(t,e){return e.copy(t).clamp(this.min,this.max)}distanceToPoint(t){return this.clampPoint(t,Mi).distanceTo(t)}getBoundingSphere(t){return this.isEmpty()?t.makeEmpty():(this.getCenter(t.center),t.radius=.5*this.getSize(Mi).length()),t}intersect(t){return this.min.max(t.min),this.max.min(t.max),this.isEmpty()&&this.makeEmpty(),this}union(t){return this.min.min(t.min),this.max.max(t.max),this}applyMatrix4(t){return this.isEmpty()||(yi[0].set(this.min.x,this.min.y,this.min.z).applyMatrix4(t),yi[1].set(this.min.x,this.min.y,this.max.z).applyMatrix4(t),yi[2].set(this.min.x,this.max.y,this.min.z).applyMatrix4(t),yi[3].set(this.min.x,this.max.y,this.max.z).applyMatrix4(t),yi[4].set(this.max.x,this.min.y,this.min.z).applyMatrix4(t),yi[5].set(this.max.x,this.min.y,this.max.z).applyMatrix4(t),yi[6].set(this.max.x,this.max.y,this.min.z).applyMatrix4(t),yi[7].set(this.max.x,this.max.y,this.max.z).applyMatrix4(t),this.setFromPoints(yi)),this}translate(t){return this.min.add(t),this.max.add(t),this}equals(t){return t.min.equals(this.min)&&t.max.equals(this.max)}}const yi=[new $e,new $e,new $e,new $e,new $e,new $e,new $e,new $e],Mi=new $e,bi=new _i,Si=new $e,wi=new $e,Ti=new $e,Ai=new $e,Ei=new $e,Ci=new $e,Li=new $e,Ri=new $e,Pi=new $e,Ii=new $e;function Di(t,e,i,n,r){for(let s=0,a=t.length-3;s<=a;s+=3){Ii.fromArray(t,s);const a=r.x*Math.abs(Ii.x)+r.y*Math.abs(Ii.y)+r.z*Math.abs(Ii.z),o=e.dot(Ii),l=i.dot(Ii),c=n.dot(Ii);if(Math.max(-Math.max(o,l,c),Math.min(o,l,c))>a)return!1}return!0}const Ni=new _i,Oi=new $e,zi=new $e;class Ui{constructor(t=new $e,e=-1){this.center=t,this.radius=e}set(t,e){return this.center.copy(t),this.radius=e,this}setFromPoints(t,e){const i=this.center;void 0!==e?i.copy(e):Ni.setFromPoints(t).getCenter(i);let n=0;for(let e=0,r=t.length;ethis.radius*this.radius&&(e.sub(this.center).normalize(),e.multiplyScalar(this.radius).add(this.center)),e}getBoundingBox(t){return this.isEmpty()?(t.makeEmpty(),t):(t.set(this.center,this.center),t.expandByScalar(this.radius),t)}applyMatrix4(t){return this.center.applyMatrix4(t),this.radius=this.radius*t.getMaxScaleOnAxis(),this}translate(t){return this.center.add(t),this}expandByPoint(t){if(this.isEmpty())return this.center.copy(t),this.radius=0,this;Oi.subVectors(t,this.center);const e=Oi.lengthSq();if(e>this.radius*this.radius){const t=Math.sqrt(e),i=.5*(t-this.radius);this.center.addScaledVector(Oi,i/t),this.radius+=i}return this}union(t){return t.isEmpty()?this:this.isEmpty()?(this.copy(t),this):(!0===this.center.equals(t.center)?this.radius=Math.max(this.radius,t.radius):(zi.subVectors(t.center,this.center).setLength(t.radius),this.expandByPoint(Oi.copy(t.center).add(zi)),this.expandByPoint(Oi.copy(t.center).sub(zi))),this)}equals(t){return t.center.equals(this.center)&&t.radius===this.radius}clone(){return(new this.constructor).copy(this)}}const Bi=new $e,Fi=new $e,ki=new $e,Gi=new $e,Vi=new $e,Hi=new $e,Wi=new $e;class ji{constructor(t=new $e,e=new $e(0,0,-1)){this.origin=t,this.direction=e}set(t,e){return this.origin.copy(t),this.direction.copy(e),this}copy(t){return this.origin.copy(t.origin),this.direction.copy(t.direction),this}at(t,e){return e.copy(this.origin).addScaledVector(this.direction,t)}lookAt(t){return this.direction.copy(t).sub(this.origin).normalize(),this}recast(t){return this.origin.copy(this.at(t,Bi)),this}closestPointToPoint(t,e){e.subVectors(t,this.origin);const i=e.dot(this.direction);return i<0?e.copy(this.origin):e.copy(this.origin).addScaledVector(this.direction,i)}distanceToPoint(t){return Math.sqrt(this.distanceSqToPoint(t))}distanceSqToPoint(t){const e=Bi.subVectors(t,this.origin).dot(this.direction);return e<0?this.origin.distanceToSquared(t):(Bi.copy(this.origin).addScaledVector(this.direction,e),Bi.distanceToSquared(t))}distanceSqToSegment(t,e,i,n){Fi.copy(t).add(e).multiplyScalar(.5),ki.copy(e).sub(t).normalize(),Gi.copy(this.origin).sub(Fi);const r=.5*t.distanceTo(e),s=-this.direction.dot(ki),a=Gi.dot(this.direction),o=-Gi.dot(ki),l=Gi.lengthSq(),c=Math.abs(1-s*s);let h,u,d,p;if(c>0)if(h=s*o-a,u=s*a-o,p=r*c,h>=0)if(u>=-p)if(u<=p){const t=1/c;h*=t,u*=t,d=h*(h+s*u+2*a)+u*(s*h+u+2*o)+l}else u=r,h=Math.max(0,-(s*u+a)),d=-h*h+u*(u+2*o)+l;else u=-r,h=Math.max(0,-(s*u+a)),d=-h*h+u*(u+2*o)+l;else u<=-p?(h=Math.max(0,-(-s*r+a)),u=h>0?-r:Math.min(Math.max(-r,-o),r),d=-h*h+u*(u+2*o)+l):u<=p?(h=0,u=Math.min(Math.max(-r,-o),r),d=u*(u+2*o)+l):(h=Math.max(0,-(s*r+a)),u=h>0?r:Math.min(Math.max(-r,-o),r),d=-h*h+u*(u+2*o)+l);else u=s>0?-r:r,h=Math.max(0,-(s*u+a)),d=-h*h+u*(u+2*o)+l;return i&&i.copy(this.origin).addScaledVector(this.direction,h),n&&n.copy(Fi).addScaledVector(ki,u),d}intersectSphere(t,e){Bi.subVectors(t.center,this.origin);const i=Bi.dot(this.direction),n=Bi.dot(Bi)-i*i,r=t.radius*t.radius;if(n>r)return null;const s=Math.sqrt(r-n),a=i-s,o=i+s;return o<0?null:a<0?this.at(o,e):this.at(a,e)}intersectsSphere(t){return this.distanceSqToPoint(t.center)<=t.radius*t.radius}distanceToPlane(t){const e=t.normal.dot(this.direction);if(0===e)return 0===t.distanceToPoint(this.origin)?0:null;const i=-(this.origin.dot(t.normal)+t.constant)/e;return i>=0?i:null}intersectPlane(t,e){const i=this.distanceToPlane(t);return null===i?null:this.at(i,e)}intersectsPlane(t){const e=t.distanceToPoint(this.origin);if(0===e)return!0;return t.normal.dot(this.direction)*e<0}intersectBox(t,e){let i,n,r,s,a,o;const l=1/this.direction.x,c=1/this.direction.y,h=1/this.direction.z,u=this.origin;return l>=0?(i=(t.min.x-u.x)*l,n=(t.max.x-u.x)*l):(i=(t.max.x-u.x)*l,n=(t.min.x-u.x)*l),c>=0?(r=(t.min.y-u.y)*c,s=(t.max.y-u.y)*c):(r=(t.max.y-u.y)*c,s=(t.min.y-u.y)*c),i>s||r>n?null:((r>i||isNaN(i))&&(i=r),(s=0?(a=(t.min.z-u.z)*h,o=(t.max.z-u.z)*h):(a=(t.max.z-u.z)*h,o=(t.min.z-u.z)*h),i>o||a>n?null:((a>i||i!=i)&&(i=a),(o=0?i:n,e)))}intersectsBox(t){return null!==this.intersectBox(t,Bi)}intersectTriangle(t,e,i,n,r){Vi.subVectors(e,t),Hi.subVectors(i,t),Wi.crossVectors(Vi,Hi);let s,a=this.direction.dot(Wi);if(a>0){if(n)return null;s=1}else{if(!(a<0))return null;s=-1,a=-a}Gi.subVectors(this.origin,t);const o=s*this.direction.dot(Hi.crossVectors(Gi,Hi));if(o<0)return null;const l=s*this.direction.dot(Vi.cross(Gi));if(l<0)return null;if(o+l>a)return null;const c=-s*Gi.dot(Wi);return c<0?null:this.at(c/a,r)}applyMatrix4(t){return this.origin.applyMatrix4(t),this.direction.transformDirection(t),this}equals(t){return t.origin.equals(this.origin)&&t.direction.equals(this.direction)}clone(){return(new this.constructor).copy(this)}}class qi{constructor(){qi.prototype.isMatrix4=!0,this.elements=[1,0,0,0,0,1,0,0,0,0,1,0,0,0,0,1]}set(t,e,i,n,r,s,a,o,l,c,h,u,d,p,m,f){const g=this.elements;return g[0]=t,g[4]=e,g[8]=i,g[12]=n,g[1]=r,g[5]=s,g[9]=a,g[13]=o,g[2]=l,g[6]=c,g[10]=h,g[14]=u,g[3]=d,g[7]=p,g[11]=m,g[15]=f,this}identity(){return this.set(1,0,0,0,0,1,0,0,0,0,1,0,0,0,0,1),this}clone(){return(new qi).fromArray(this.elements)}copy(t){const e=this.elements,i=t.elements;return e[0]=i[0],e[1]=i[1],e[2]=i[2],e[3]=i[3],e[4]=i[4],e[5]=i[5],e[6]=i[6],e[7]=i[7],e[8]=i[8],e[9]=i[9],e[10]=i[10],e[11]=i[11],e[12]=i[12],e[13]=i[13],e[14]=i[14],e[15]=i[15],this}copyPosition(t){const e=this.elements,i=t.elements;return e[12]=i[12],e[13]=i[13],e[14]=i[14],this}setFromMatrix3(t){const e=t.elements;return this.set(e[0],e[3],e[6],0,e[1],e[4],e[7],0,e[2],e[5],e[8],0,0,0,0,1),this}extractBasis(t,e,i){return t.setFromMatrixColumn(this,0),e.setFromMatrixColumn(this,1),i.setFromMatrixColumn(this,2),this}makeBasis(t,e,i){return this.set(t.x,e.x,i.x,0,t.y,e.y,i.y,0,t.z,e.z,i.z,0,0,0,0,1),this}extractRotation(t){const e=this.elements,i=t.elements,n=1/Xi.setFromMatrixColumn(t,0).length(),r=1/Xi.setFromMatrixColumn(t,1).length(),s=1/Xi.setFromMatrixColumn(t,2).length();return e[0]=i[0]*n,e[1]=i[1]*n,e[2]=i[2]*n,e[3]=0,e[4]=i[4]*r,e[5]=i[5]*r,e[6]=i[6]*r,e[7]=0,e[8]=i[8]*s,e[9]=i[9]*s,e[10]=i[10]*s,e[11]=0,e[12]=0,e[13]=0,e[14]=0,e[15]=1,this}makeRotationFromEuler(t){const e=this.elements,i=t.x,n=t.y,r=t.z,s=Math.cos(i),a=Math.sin(i),o=Math.cos(n),l=Math.sin(n),c=Math.cos(r),h=Math.sin(r);if("XYZ"===t.order){const t=s*c,i=s*h,n=a*c,r=a*h;e[0]=o*c,e[4]=-o*h,e[8]=l,e[1]=i+n*l,e[5]=t-r*l,e[9]=-a*o,e[2]=r-t*l,e[6]=n+i*l,e[10]=s*o}else if("YXZ"===t.order){const t=o*c,i=o*h,n=l*c,r=l*h;e[0]=t+r*a,e[4]=n*a-i,e[8]=s*l,e[1]=s*h,e[5]=s*c,e[9]=-a,e[2]=i*a-n,e[6]=r+t*a,e[10]=s*o}else if("ZXY"===t.order){const t=o*c,i=o*h,n=l*c,r=l*h;e[0]=t-r*a,e[4]=-s*h,e[8]=n+i*a,e[1]=i+n*a,e[5]=s*c,e[9]=r-t*a,e[2]=-s*l,e[6]=a,e[10]=s*o}else if("ZYX"===t.order){const t=s*c,i=s*h,n=a*c,r=a*h;e[0]=o*c,e[4]=n*l-i,e[8]=t*l+r,e[1]=o*h,e[5]=r*l+t,e[9]=i*l-n,e[2]=-l,e[6]=a*o,e[10]=s*o}else if("YZX"===t.order){const t=s*o,i=s*l,n=a*o,r=a*l;e[0]=o*c,e[4]=r-t*h,e[8]=n*h+i,e[1]=h,e[5]=s*c,e[9]=-a*c,e[2]=-l*c,e[6]=i*h+n,e[10]=t-r*h}else if("XZY"===t.order){const t=s*o,i=s*l,n=a*o,r=a*l;e[0]=o*c,e[4]=-h,e[8]=l*c,e[1]=t*h+r,e[5]=s*c,e[9]=i*h-n,e[2]=n*h-i,e[6]=a*c,e[10]=r*h+t}return e[3]=0,e[7]=0,e[11]=0,e[12]=0,e[13]=0,e[14]=0,e[15]=1,this}makeRotationFromQuaternion(t){return this.compose(Zi,t,Ji)}lookAt(t,e,i){const n=this.elements;return Qi.subVectors(t,e),0===Qi.lengthSq()&&(Qi.z=1),Qi.normalize(),Ki.crossVectors(i,Qi),0===Ki.lengthSq()&&(1===Math.abs(i.z)?Qi.x+=1e-4:Qi.z+=1e-4,Qi.normalize(),Ki.crossVectors(i,Qi)),Ki.normalize(),$i.crossVectors(Qi,Ki),n[0]=Ki.x,n[4]=$i.x,n[8]=Qi.x,n[1]=Ki.y,n[5]=$i.y,n[9]=Qi.y,n[2]=Ki.z,n[6]=$i.z,n[10]=Qi.z,this}multiply(t){return this.multiplyMatrices(this,t)}premultiply(t){return this.multiplyMatrices(t,this)}multiplyMatrices(t,e){const i=t.elements,n=e.elements,r=this.elements,s=i[0],a=i[4],o=i[8],l=i[12],c=i[1],h=i[5],u=i[9],d=i[13],p=i[2],m=i[6],f=i[10],g=i[14],v=i[3],x=i[7],_=i[11],y=i[15],M=n[0],b=n[4],S=n[8],w=n[12],T=n[1],A=n[5],E=n[9],C=n[13],L=n[2],R=n[6],P=n[10],I=n[14],D=n[3],N=n[7],O=n[11],z=n[15];return r[0]=s*M+a*T+o*L+l*D,r[4]=s*b+a*A+o*R+l*N,r[8]=s*S+a*E+o*P+l*O,r[12]=s*w+a*C+o*I+l*z,r[1]=c*M+h*T+u*L+d*D,r[5]=c*b+h*A+u*R+d*N,r[9]=c*S+h*E+u*P+d*O,r[13]=c*w+h*C+u*I+d*z,r[2]=p*M+m*T+f*L+g*D,r[6]=p*b+m*A+f*R+g*N,r[10]=p*S+m*E+f*P+g*O,r[14]=p*w+m*C+f*I+g*z,r[3]=v*M+x*T+_*L+y*D,r[7]=v*b+x*A+_*R+y*N,r[11]=v*S+x*E+_*P+y*O,r[15]=v*w+x*C+_*I+y*z,this}multiplyScalar(t){const e=this.elements;return e[0]*=t,e[4]*=t,e[8]*=t,e[12]*=t,e[1]*=t,e[5]*=t,e[9]*=t,e[13]*=t,e[2]*=t,e[6]*=t,e[10]*=t,e[14]*=t,e[3]*=t,e[7]*=t,e[11]*=t,e[15]*=t,this}determinant(){const t=this.elements,e=t[0],i=t[4],n=t[8],r=t[12],s=t[1],a=t[5],o=t[9],l=t[13],c=t[2],h=t[6],u=t[10],d=t[14];return t[3]*(+r*o*h-n*l*h-r*a*u+i*l*u+n*a*d-i*o*d)+t[7]*(+e*o*d-e*l*u+r*s*u-n*s*d+n*l*c-r*o*c)+t[11]*(+e*l*h-e*a*d-r*s*h+i*s*d+r*a*c-i*l*c)+t[15]*(-n*a*c-e*o*h+e*a*u+n*s*h-i*s*u+i*o*c)}transpose(){const t=this.elements;let e;return e=t[1],t[1]=t[4],t[4]=e,e=t[2],t[2]=t[8],t[8]=e,e=t[6],t[6]=t[9],t[9]=e,e=t[3],t[3]=t[12],t[12]=e,e=t[7],t[7]=t[13],t[13]=e,e=t[11],t[11]=t[14],t[14]=e,this}setPosition(t,e,i){const n=this.elements;return t.isVector3?(n[12]=t.x,n[13]=t.y,n[14]=t.z):(n[12]=t,n[13]=e,n[14]=i),this}invert(){const t=this.elements,e=t[0],i=t[1],n=t[2],r=t[3],s=t[4],a=t[5],o=t[6],l=t[7],c=t[8],h=t[9],u=t[10],d=t[11],p=t[12],m=t[13],f=t[14],g=t[15],v=h*f*l-m*u*l+m*o*d-a*f*d-h*o*g+a*u*g,x=p*u*l-c*f*l-p*o*d+s*f*d+c*o*g-s*u*g,_=c*m*l-p*h*l+p*a*d-s*m*d-c*a*g+s*h*g,y=p*h*o-c*m*o-p*a*u+s*m*u+c*a*f-s*h*f,M=e*v+i*x+n*_+r*y;if(0===M)return this.set(0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0);const b=1/M;return t[0]=v*b,t[1]=(m*u*r-h*f*r-m*n*d+i*f*d+h*n*g-i*u*g)*b,t[2]=(a*f*r-m*o*r+m*n*l-i*f*l-a*n*g+i*o*g)*b,t[3]=(h*o*r-a*u*r-h*n*l+i*u*l+a*n*d-i*o*d)*b,t[4]=x*b,t[5]=(c*f*r-p*u*r+p*n*d-e*f*d-c*n*g+e*u*g)*b,t[6]=(p*o*r-s*f*r-p*n*l+e*f*l+s*n*g-e*o*g)*b,t[7]=(s*u*r-c*o*r+c*n*l-e*u*l-s*n*d+e*o*d)*b,t[8]=_*b,t[9]=(p*h*r-c*m*r-p*i*d+e*m*d+c*i*g-e*h*g)*b,t[10]=(s*m*r-p*a*r+p*i*l-e*m*l-s*i*g+e*a*g)*b,t[11]=(c*a*r-s*h*r-c*i*l+e*h*l+s*i*d-e*a*d)*b,t[12]=y*b,t[13]=(c*m*n-p*h*n+p*i*u-e*m*u-c*i*f+e*h*f)*b,t[14]=(p*a*n-s*m*n-p*i*o+e*m*o+s*i*f-e*a*f)*b,t[15]=(s*h*n-c*a*n+c*i*o-e*h*o-s*i*u+e*a*u)*b,this}scale(t){const e=this.elements,i=t.x,n=t.y,r=t.z;return e[0]*=i,e[4]*=n,e[8]*=r,e[1]*=i,e[5]*=n,e[9]*=r,e[2]*=i,e[6]*=n,e[10]*=r,e[3]*=i,e[7]*=n,e[11]*=r,this}getMaxScaleOnAxis(){const t=this.elements,e=t[0]*t[0]+t[1]*t[1]+t[2]*t[2],i=t[4]*t[4]+t[5]*t[5]+t[6]*t[6],n=t[8]*t[8]+t[9]*t[9]+t[10]*t[10];return Math.sqrt(Math.max(e,i,n))}makeTranslation(t,e,i){return this.set(1,0,0,t,0,1,0,e,0,0,1,i,0,0,0,1),this}makeRotationX(t){const e=Math.cos(t),i=Math.sin(t);return this.set(1,0,0,0,0,e,-i,0,0,i,e,0,0,0,0,1),this}makeRotationY(t){const e=Math.cos(t),i=Math.sin(t);return this.set(e,0,i,0,0,1,0,0,-i,0,e,0,0,0,0,1),this}makeRotationZ(t){const e=Math.cos(t),i=Math.sin(t);return this.set(e,-i,0,0,i,e,0,0,0,0,1,0,0,0,0,1),this}makeRotationAxis(t,e){const i=Math.cos(e),n=Math.sin(e),r=1-i,s=t.x,a=t.y,o=t.z,l=r*s,c=r*a;return this.set(l*s+i,l*a-n*o,l*o+n*a,0,l*a+n*o,c*a+i,c*o-n*s,0,l*o-n*a,c*o+n*s,r*o*o+i,0,0,0,0,1),this}makeScale(t,e,i){return this.set(t,0,0,0,0,e,0,0,0,0,i,0,0,0,0,1),this}makeShear(t,e,i,n,r,s){return this.set(1,i,r,0,t,1,s,0,e,n,1,0,0,0,0,1),this}compose(t,e,i){const n=this.elements,r=e._x,s=e._y,a=e._z,o=e._w,l=r+r,c=s+s,h=a+a,u=r*l,d=r*c,p=r*h,m=s*c,f=s*h,g=a*h,v=o*l,x=o*c,_=o*h,y=i.x,M=i.y,b=i.z;return n[0]=(1-(m+g))*y,n[1]=(d+_)*y,n[2]=(p-x)*y,n[3]=0,n[4]=(d-_)*M,n[5]=(1-(u+g))*M,n[6]=(f+v)*M,n[7]=0,n[8]=(p+x)*b,n[9]=(f-v)*b,n[10]=(1-(u+m))*b,n[11]=0,n[12]=t.x,n[13]=t.y,n[14]=t.z,n[15]=1,this}decompose(t,e,i){const n=this.elements;let r=Xi.set(n[0],n[1],n[2]).length();const s=Xi.set(n[4],n[5],n[6]).length(),a=Xi.set(n[8],n[9],n[10]).length();this.determinant()<0&&(r=-r),t.x=n[12],t.y=n[13],t.z=n[14],Yi.copy(this);const o=1/r,l=1/s,c=1/a;return Yi.elements[0]*=o,Yi.elements[1]*=o,Yi.elements[2]*=o,Yi.elements[4]*=l,Yi.elements[5]*=l,Yi.elements[6]*=l,Yi.elements[8]*=c,Yi.elements[9]*=c,Yi.elements[10]*=c,e.setFromRotationMatrix(Yi),i.x=r,i.y=s,i.z=a,this}makePerspective(t,e,i,n,r,s){const a=this.elements,o=2*r/(e-t),l=2*r/(i-n),c=(e+t)/(e-t),h=(i+n)/(i-n),u=-(s+r)/(s-r),d=-2*s*r/(s-r);return a[0]=o,a[4]=0,a[8]=c,a[12]=0,a[1]=0,a[5]=l,a[9]=h,a[13]=0,a[2]=0,a[6]=0,a[10]=u,a[14]=d,a[3]=0,a[7]=0,a[11]=-1,a[15]=0,this}makeOrthographic(t,e,i,n,r,s){const a=this.elements,o=1/(e-t),l=1/(i-n),c=1/(s-r),h=(e+t)*o,u=(i+n)*l,d=(s+r)*c;return a[0]=2*o,a[4]=0,a[8]=0,a[12]=-h,a[1]=0,a[5]=2*l,a[9]=0,a[13]=-u,a[2]=0,a[6]=0,a[10]=-2*c,a[14]=-d,a[3]=0,a[7]=0,a[11]=0,a[15]=1,this}equals(t){const e=this.elements,i=t.elements;for(let t=0;t<16;t++)if(e[t]!==i[t])return!1;return!0}fromArray(t,e=0){for(let i=0;i<16;i++)this.elements[i]=t[i+e];return this}toArray(t=[],e=0){const i=this.elements;return t[e]=i[0],t[e+1]=i[1],t[e+2]=i[2],t[e+3]=i[3],t[e+4]=i[4],t[e+5]=i[5],t[e+6]=i[6],t[e+7]=i[7],t[e+8]=i[8],t[e+9]=i[9],t[e+10]=i[10],t[e+11]=i[11],t[e+12]=i[12],t[e+13]=i[13],t[e+14]=i[14],t[e+15]=i[15],t}}const Xi=new $e,Yi=new qi,Zi=new $e(0,0,0),Ji=new $e(1,1,1),Ki=new $e,$i=new $e,Qi=new $e,tn=new qi,en=new Ke;class nn{constructor(t=0,e=0,i=0,n=nn.DEFAULT_ORDER){this.isEuler=!0,this._x=t,this._y=e,this._z=i,this._order=n}get x(){return this._x}set x(t){this._x=t,this._onChangeCallback()}get y(){return this._y}set y(t){this._y=t,this._onChangeCallback()}get z(){return this._z}set z(t){this._z=t,this._onChangeCallback()}get order(){return this._order}set order(t){this._order=t,this._onChangeCallback()}set(t,e,i,n=this._order){return this._x=t,this._y=e,this._z=i,this._order=n,this._onChangeCallback(),this}clone(){return new this.constructor(this._x,this._y,this._z,this._order)}copy(t){return this._x=t._x,this._y=t._y,this._z=t._z,this._order=t._order,this._onChangeCallback(),this}setFromRotationMatrix(t,e=this._order,i=!0){const n=t.elements,r=n[0],s=n[4],a=n[8],o=n[1],l=n[5],c=n[9],h=n[2],u=n[6],d=n[10];switch(e){case"XYZ":this._y=Math.asin(Oe(a,-1,1)),Math.abs(a)<.9999999?(this._x=Math.atan2(-c,d),this._z=Math.atan2(-s,r)):(this._x=Math.atan2(u,l),this._z=0);break;case"YXZ":this._x=Math.asin(-Oe(c,-1,1)),Math.abs(c)<.9999999?(this._y=Math.atan2(a,d),this._z=Math.atan2(o,l)):(this._y=Math.atan2(-h,r),this._z=0);break;case"ZXY":this._x=Math.asin(Oe(u,-1,1)),Math.abs(u)<.9999999?(this._y=Math.atan2(-h,d),this._z=Math.atan2(-s,l)):(this._y=0,this._z=Math.atan2(o,r));break;case"ZYX":this._y=Math.asin(-Oe(h,-1,1)),Math.abs(h)<.9999999?(this._x=Math.atan2(u,d),this._z=Math.atan2(o,r)):(this._x=0,this._z=Math.atan2(-s,l));break;case"YZX":this._z=Math.asin(Oe(o,-1,1)),Math.abs(o)<.9999999?(this._x=Math.atan2(-c,l),this._y=Math.atan2(-h,r)):(this._x=0,this._y=Math.atan2(a,d));break;case"XZY":this._z=Math.asin(-Oe(s,-1,1)),Math.abs(s)<.9999999?(this._x=Math.atan2(u,l),this._y=Math.atan2(a,r)):(this._x=Math.atan2(-c,d),this._y=0);break;default:console.warn("THREE.Euler: .setFromRotationMatrix() encountered an unknown order: "+e)}return this._order=e,!0===i&&this._onChangeCallback(),this}setFromQuaternion(t,e,i){return tn.makeRotationFromQuaternion(t),this.setFromRotationMatrix(tn,e,i)}setFromVector3(t,e=this._order){return this.set(t.x,t.y,t.z,e)}reorder(t){return en.setFromEuler(this),this.setFromQuaternion(en,t)}equals(t){return t._x===this._x&&t._y===this._y&&t._z===this._z&&t._order===this._order}fromArray(t){return this._x=t[0],this._y=t[1],this._z=t[2],void 0!==t[3]&&(this._order=t[3]),this._onChangeCallback(),this}toArray(t=[],e=0){return t[e]=this._x,t[e+1]=this._y,t[e+2]=this._z,t[e+3]=this._order,t}_onChange(t){return this._onChangeCallback=t,this}_onChangeCallback(){}*[Symbol.iterator](){yield this._x,yield this._y,yield this._z,yield this._order}}nn.DEFAULT_ORDER="XYZ";class rn{constructor(){this.mask=1}set(t){this.mask=(1<>>0}enable(t){this.mask|=1<1){for(let t=0;t1){for(let t=0;t0&&(i=i.concat(r))}return i}getWorldPosition(t){return this.updateWorldMatrix(!0,!1),t.setFromMatrixPosition(this.matrixWorld)}getWorldQuaternion(t){return this.updateWorldMatrix(!0,!1),this.matrixWorld.decompose(hn,t,un),t}getWorldScale(t){return this.updateWorldMatrix(!0,!1),this.matrixWorld.decompose(hn,dn,t),t}getWorldDirection(t){this.updateWorldMatrix(!0,!1);const e=this.matrixWorld.elements;return t.set(e[8],e[9],e[10]).normalize()}raycast(){}traverse(t){t(this);const e=this.children;for(let i=0,n=e.length;i0&&(n.userData=this.userData),n.layers=this.layers.mask,n.matrix=this.matrix.toArray(),!1===this.matrixAutoUpdate&&(n.matrixAutoUpdate=!1),this.isInstancedMesh&&(n.type="InstancedMesh",n.count=this.count,n.instanceMatrix=this.instanceMatrix.toJSON(),null!==this.instanceColor&&(n.instanceColor=this.instanceColor.toJSON())),this.isScene)this.background&&(this.background.isColor?n.background=this.background.toJSON():this.background.isTexture&&(n.background=this.background.toJSON(t).uuid)),this.environment&&this.environment.isTexture&&!0!==this.environment.isRenderTargetTexture&&(n.environment=this.environment.toJSON(t).uuid);else if(this.isMesh||this.isLine||this.isPoints){n.geometry=r(t.geometries,this.geometry);const e=this.geometry.parameters;if(void 0!==e&&void 0!==e.shapes){const i=e.shapes;if(Array.isArray(i))for(let e=0,n=i.length;e0){n.children=[];for(let e=0;e0){n.animations=[];for(let e=0;e0&&(i.geometries=e),n.length>0&&(i.materials=n),r.length>0&&(i.textures=r),a.length>0&&(i.images=a),o.length>0&&(i.shapes=o),l.length>0&&(i.skeletons=l),c.length>0&&(i.animations=c),h.length>0&&(i.nodes=h)}return i.object=n,i;function s(t){const e=[];for(const i in t){const n=t[i];delete n.metadata,e.push(n)}return e}}clone(t){return(new this.constructor).copy(this,t)}copy(t,e=!0){if(this.name=t.name,this.up.copy(t.up),this.position.copy(t.position),this.rotation.order=t.rotation.order,this.quaternion.copy(t.quaternion),this.scale.copy(t.scale),this.matrix.copy(t.matrix),this.matrixWorld.copy(t.matrixWorld),this.matrixAutoUpdate=t.matrixAutoUpdate,this.matrixWorldNeedsUpdate=t.matrixWorldNeedsUpdate,this.matrixWorldAutoUpdate=t.matrixWorldAutoUpdate,this.layers.mask=t.layers.mask,this.visible=t.visible,this.castShadow=t.castShadow,this.receiveShadow=t.receiveShadow,this.frustumCulled=t.frustumCulled,this.renderOrder=t.renderOrder,this.userData=JSON.parse(JSON.stringify(t.userData)),!0===e)for(let e=0;e0?n.multiplyScalar(1/Math.sqrt(r)):n.set(0,0,0)}static getBarycoord(t,e,i,n,r){_n.subVectors(n,e),yn.subVectors(i,e),Mn.subVectors(t,e);const s=_n.dot(_n),a=_n.dot(yn),o=_n.dot(Mn),l=yn.dot(yn),c=yn.dot(Mn),h=s*l-a*a;if(0===h)return r.set(-2,-1,-1);const u=1/h,d=(l*o-a*c)*u,p=(s*c-a*o)*u;return r.set(1-d-p,p,d)}static containsPoint(t,e,i,n){return this.getBarycoord(t,e,i,n,bn),bn.x>=0&&bn.y>=0&&bn.x+bn.y<=1}static getUV(t,e,i,n,r,s,a,o){return this.getBarycoord(t,e,i,n,bn),o.set(0,0),o.addScaledVector(r,bn.x),o.addScaledVector(s,bn.y),o.addScaledVector(a,bn.z),o}static isFrontFacing(t,e,i,n){return _n.subVectors(i,e),yn.subVectors(t,e),_n.cross(yn).dot(n)<0}set(t,e,i){return this.a.copy(t),this.b.copy(e),this.c.copy(i),this}setFromPointsAndIndices(t,e,i,n){return this.a.copy(t[e]),this.b.copy(t[i]),this.c.copy(t[n]),this}setFromAttributeAndIndices(t,e,i,n){return this.a.fromBufferAttribute(t,e),this.b.fromBufferAttribute(t,i),this.c.fromBufferAttribute(t,n),this}clone(){return(new this.constructor).copy(this)}copy(t){return this.a.copy(t.a),this.b.copy(t.b),this.c.copy(t.c),this}getArea(){return _n.subVectors(this.c,this.b),yn.subVectors(this.a,this.b),.5*_n.cross(yn).length()}getMidpoint(t){return t.addVectors(this.a,this.b).add(this.c).multiplyScalar(1/3)}getNormal(t){return Ln.getNormal(this.a,this.b,this.c,t)}getPlane(t){return t.setFromCoplanarPoints(this.a,this.b,this.c)}getBarycoord(t,e){return Ln.getBarycoord(t,this.a,this.b,this.c,e)}getUV(t,e,i,n,r){return Ln.getUV(t,this.a,this.b,this.c,e,i,n,r)}containsPoint(t){return Ln.containsPoint(t,this.a,this.b,this.c)}isFrontFacing(t){return Ln.isFrontFacing(this.a,this.b,this.c,t)}intersectsBox(t){return t.intersectsTriangle(this)}closestPointToPoint(t,e){const i=this.a,n=this.b,r=this.c;let s,a;Sn.subVectors(n,i),wn.subVectors(r,i),An.subVectors(t,i);const o=Sn.dot(An),l=wn.dot(An);if(o<=0&&l<=0)return e.copy(i);En.subVectors(t,n);const c=Sn.dot(En),h=wn.dot(En);if(c>=0&&h<=c)return e.copy(n);const u=o*h-c*l;if(u<=0&&o>=0&&c<=0)return s=o/(o-c),e.copy(i).addScaledVector(Sn,s);Cn.subVectors(t,r);const d=Sn.dot(Cn),p=wn.dot(Cn);if(p>=0&&d<=p)return e.copy(r);const m=d*l-o*p;if(m<=0&&l>=0&&p<=0)return a=l/(l-p),e.copy(i).addScaledVector(wn,a);const f=c*p-d*h;if(f<=0&&h-c>=0&&d-p>=0)return Tn.subVectors(r,n),a=(h-c)/(h-c+(d-p)),e.copy(n).addScaledVector(Tn,a);const g=1/(f+m+u);return s=m*g,a=u*g,e.copy(i).addScaledVector(Sn,s).addScaledVector(wn,a)}equals(t){return t.a.equals(this.a)&&t.b.equals(this.b)&&t.c.equals(this.c)}}let Rn=0;class Pn extends Le{constructor(){super(),this.isMaterial=!0,Object.defineProperty(this,"id",{value:Rn++}),this.uuid=Ne(),this.name="",this.type="Material",this.blending=d,this.side=l,this.vertexColors=!1,this.opacity=1,this.transparent=!1,this.blendSrc=A,this.blendDst=E,this.blendEquation=v,this.blendSrcAlpha=null,this.blendDstAlpha=null,this.blendEquationAlpha=null,this.depthFunc=z,this.depthTest=!0,this.depthWrite=!0,this.stencilWriteMask=255,this.stencilFunc=519,this.stencilRef=0,this.stencilFuncMask=255,this.stencilFail=Te,this.stencilZFail=Te,this.stencilZPass=Te,this.stencilWrite=!1,this.clippingPlanes=null,this.clipIntersection=!1,this.clipShadows=!1,this.shadowSide=null,this.colorWrite=!0,this.precision=null,this.polygonOffset=!1,this.polygonOffsetFactor=0,this.polygonOffsetUnits=0,this.dithering=!1,this.alphaToCoverage=!1,this.premultipliedAlpha=!1,this.forceSinglePass=!1,this.visible=!0,this.toneMapped=!0,this.userData={},this.version=0,this._alphaTest=0}get alphaTest(){return this._alphaTest}set alphaTest(t){this._alphaTest>0!=t>0&&this.version++,this._alphaTest=t}onBuild(){}onBeforeRender(){}onBeforeCompile(){}customProgramCacheKey(){return this.onBeforeCompile.toString()}setValues(t){if(void 0!==t)for(const e in t){const i=t[e];if(void 0===i){console.warn("THREE.Material: '"+e+"' parameter is undefined.");continue}const n=this[e];void 0!==n?n&&n.isColor?n.set(i):n&&n.isVector3&&i&&i.isVector3?n.copy(i):this[e]=i:console.warn("THREE."+this.type+": '"+e+"' is not a property of this material.")}}toJSON(t){const e=void 0===t||"string"==typeof t;e&&(t={textures:{},images:{}});const i={metadata:{version:4.5,type:"Material",generator:"Material.toJSON"}};function n(t){const e=[];for(const i in t){const n=t[i];delete n.metadata,e.push(n)}return e}if(i.uuid=this.uuid,i.type=this.type,""!==this.name&&(i.name=this.name),this.color&&this.color.isColor&&(i.color=this.color.getHex()),void 0!==this.roughness&&(i.roughness=this.roughness),void 0!==this.metalness&&(i.metalness=this.metalness),void 0!==this.sheen&&(i.sheen=this.sheen),this.sheenColor&&this.sheenColor.isColor&&(i.sheenColor=this.sheenColor.getHex()),void 0!==this.sheenRoughness&&(i.sheenRoughness=this.sheenRoughness),this.emissive&&this.emissive.isColor&&(i.emissive=this.emissive.getHex()),this.emissiveIntensity&&1!==this.emissiveIntensity&&(i.emissiveIntensity=this.emissiveIntensity),this.specular&&this.specular.isColor&&(i.specular=this.specular.getHex()),void 0!==this.specularIntensity&&(i.specularIntensity=this.specularIntensity),this.specularColor&&this.specularColor.isColor&&(i.specularColor=this.specularColor.getHex()),void 0!==this.shininess&&(i.shininess=this.shininess),void 0!==this.clearcoat&&(i.clearcoat=this.clearcoat),void 0!==this.clearcoatRoughness&&(i.clearcoatRoughness=this.clearcoatRoughness),this.clearcoatMap&&this.clearcoatMap.isTexture&&(i.clearcoatMap=this.clearcoatMap.toJSON(t).uuid),this.clearcoatRoughnessMap&&this.clearcoatRoughnessMap.isTexture&&(i.clearcoatRoughnessMap=this.clearcoatRoughnessMap.toJSON(t).uuid),this.clearcoatNormalMap&&this.clearcoatNormalMap.isTexture&&(i.clearcoatNormalMap=this.clearcoatNormalMap.toJSON(t).uuid,i.clearcoatNormalScale=this.clearcoatNormalScale.toArray()),void 0!==this.iridescence&&(i.iridescence=this.iridescence),void 0!==this.iridescenceIOR&&(i.iridescenceIOR=this.iridescenceIOR),void 0!==this.iridescenceThicknessRange&&(i.iridescenceThicknessRange=this.iridescenceThicknessRange),this.iridescenceMap&&this.iridescenceMap.isTexture&&(i.iridescenceMap=this.iridescenceMap.toJSON(t).uuid),this.iridescenceThicknessMap&&this.iridescenceThicknessMap.isTexture&&(i.iridescenceThicknessMap=this.iridescenceThicknessMap.toJSON(t).uuid),this.map&&this.map.isTexture&&(i.map=this.map.toJSON(t).uuid),this.matcap&&this.matcap.isTexture&&(i.matcap=this.matcap.toJSON(t).uuid),this.alphaMap&&this.alphaMap.isTexture&&(i.alphaMap=this.alphaMap.toJSON(t).uuid),this.lightMap&&this.lightMap.isTexture&&(i.lightMap=this.lightMap.toJSON(t).uuid,i.lightMapIntensity=this.lightMapIntensity),this.aoMap&&this.aoMap.isTexture&&(i.aoMap=this.aoMap.toJSON(t).uuid,i.aoMapIntensity=this.aoMapIntensity),this.bumpMap&&this.bumpMap.isTexture&&(i.bumpMap=this.bumpMap.toJSON(t).uuid,i.bumpScale=this.bumpScale),this.normalMap&&this.normalMap.isTexture&&(i.normalMap=this.normalMap.toJSON(t).uuid,i.normalMapType=this.normalMapType,i.normalScale=this.normalScale.toArray()),this.displacementMap&&this.displacementMap.isTexture&&(i.displacementMap=this.displacementMap.toJSON(t).uuid,i.displacementScale=this.displacementScale,i.displacementBias=this.displacementBias),this.roughnessMap&&this.roughnessMap.isTexture&&(i.roughnessMap=this.roughnessMap.toJSON(t).uuid),this.metalnessMap&&this.metalnessMap.isTexture&&(i.metalnessMap=this.metalnessMap.toJSON(t).uuid),this.emissiveMap&&this.emissiveMap.isTexture&&(i.emissiveMap=this.emissiveMap.toJSON(t).uuid),this.specularMap&&this.specularMap.isTexture&&(i.specularMap=this.specularMap.toJSON(t).uuid),this.specularIntensityMap&&this.specularIntensityMap.isTexture&&(i.specularIntensityMap=this.specularIntensityMap.toJSON(t).uuid),this.specularColorMap&&this.specularColorMap.isTexture&&(i.specularColorMap=this.specularColorMap.toJSON(t).uuid),this.envMap&&this.envMap.isTexture&&(i.envMap=this.envMap.toJSON(t).uuid,void 0!==this.combine&&(i.combine=this.combine)),void 0!==this.envMapIntensity&&(i.envMapIntensity=this.envMapIntensity),void 0!==this.reflectivity&&(i.reflectivity=this.reflectivity),void 0!==this.refractionRatio&&(i.refractionRatio=this.refractionRatio),this.gradientMap&&this.gradientMap.isTexture&&(i.gradientMap=this.gradientMap.toJSON(t).uuid),void 0!==this.transmission&&(i.transmission=this.transmission),this.transmissionMap&&this.transmissionMap.isTexture&&(i.transmissionMap=this.transmissionMap.toJSON(t).uuid),void 0!==this.thickness&&(i.thickness=this.thickness),this.thicknessMap&&this.thicknessMap.isTexture&&(i.thicknessMap=this.thicknessMap.toJSON(t).uuid),void 0!==this.attenuationDistance&&this.attenuationDistance!==1/0&&(i.attenuationDistance=this.attenuationDistance),void 0!==this.attenuationColor&&(i.attenuationColor=this.attenuationColor.getHex()),void 0!==this.size&&(i.size=this.size),null!==this.shadowSide&&(i.shadowSide=this.shadowSide),void 0!==this.sizeAttenuation&&(i.sizeAttenuation=this.sizeAttenuation),this.blending!==d&&(i.blending=this.blending),this.side!==l&&(i.side=this.side),this.vertexColors&&(i.vertexColors=!0),this.opacity<1&&(i.opacity=this.opacity),!0===this.transparent&&(i.transparent=this.transparent),i.depthFunc=this.depthFunc,i.depthTest=this.depthTest,i.depthWrite=this.depthWrite,i.colorWrite=this.colorWrite,i.stencilWrite=this.stencilWrite,i.stencilWriteMask=this.stencilWriteMask,i.stencilFunc=this.stencilFunc,i.stencilRef=this.stencilRef,i.stencilFuncMask=this.stencilFuncMask,i.stencilFail=this.stencilFail,i.stencilZFail=this.stencilZFail,i.stencilZPass=this.stencilZPass,void 0!==this.rotation&&0!==this.rotation&&(i.rotation=this.rotation),!0===this.polygonOffset&&(i.polygonOffset=!0),0!==this.polygonOffsetFactor&&(i.polygonOffsetFactor=this.polygonOffsetFactor),0!==this.polygonOffsetUnits&&(i.polygonOffsetUnits=this.polygonOffsetUnits),void 0!==this.linewidth&&1!==this.linewidth&&(i.linewidth=this.linewidth),void 0!==this.dashSize&&(i.dashSize=this.dashSize),void 0!==this.gapSize&&(i.gapSize=this.gapSize),void 0!==this.scale&&(i.scale=this.scale),!0===this.dithering&&(i.dithering=!0),this.alphaTest>0&&(i.alphaTest=this.alphaTest),!0===this.alphaToCoverage&&(i.alphaToCoverage=this.alphaToCoverage),!0===this.premultipliedAlpha&&(i.premultipliedAlpha=this.premultipliedAlpha),!0===this.forceSinglePass&&(i.forceSinglePass=this.forceSinglePass),!0===this.wireframe&&(i.wireframe=this.wireframe),this.wireframeLinewidth>1&&(i.wireframeLinewidth=this.wireframeLinewidth),"round"!==this.wireframeLinecap&&(i.wireframeLinecap=this.wireframeLinecap),"round"!==this.wireframeLinejoin&&(i.wireframeLinejoin=this.wireframeLinejoin),!0===this.flatShading&&(i.flatShading=this.flatShading),!1===this.visible&&(i.visible=!1),!1===this.toneMapped&&(i.toneMapped=!1),!1===this.fog&&(i.fog=!1),Object.keys(this.userData).length>0&&(i.userData=this.userData),e){const e=n(t.textures),r=n(t.images);e.length>0&&(i.textures=e),r.length>0&&(i.images=r)}return i}clone(){return(new this.constructor).copy(this)}copy(t){this.name=t.name,this.blending=t.blending,this.side=t.side,this.vertexColors=t.vertexColors,this.opacity=t.opacity,this.transparent=t.transparent,this.blendSrc=t.blendSrc,this.blendDst=t.blendDst,this.blendEquation=t.blendEquation,this.blendSrcAlpha=t.blendSrcAlpha,this.blendDstAlpha=t.blendDstAlpha,this.blendEquationAlpha=t.blendEquationAlpha,this.depthFunc=t.depthFunc,this.depthTest=t.depthTest,this.depthWrite=t.depthWrite,this.stencilWriteMask=t.stencilWriteMask,this.stencilFunc=t.stencilFunc,this.stencilRef=t.stencilRef,this.stencilFuncMask=t.stencilFuncMask,this.stencilFail=t.stencilFail,this.stencilZFail=t.stencilZFail,this.stencilZPass=t.stencilZPass,this.stencilWrite=t.stencilWrite;const e=t.clippingPlanes;let i=null;if(null!==e){const t=e.length;i=new Array(t);for(let n=0;n!==t;++n)i[n]=e[n].clone()}return this.clippingPlanes=i,this.clipIntersection=t.clipIntersection,this.clipShadows=t.clipShadows,this.shadowSide=t.shadowSide,this.colorWrite=t.colorWrite,this.precision=t.precision,this.polygonOffset=t.polygonOffset,this.polygonOffsetFactor=t.polygonOffsetFactor,this.polygonOffsetUnits=t.polygonOffsetUnits,this.dithering=t.dithering,this.alphaTest=t.alphaTest,this.alphaToCoverage=t.alphaToCoverage,this.premultipliedAlpha=t.premultipliedAlpha,this.forceSinglePass=t.forceSinglePass,this.visible=t.visible,this.toneMapped=t.toneMapped,this.userData=JSON.parse(JSON.stringify(t.userData)),this}dispose(){this.dispatchEvent({type:"dispose"})}set needsUpdate(t){!0===t&&this.version++}}const In={aliceblue:15792383,antiquewhite:16444375,aqua:65535,aquamarine:8388564,azure:15794175,beige:16119260,bisque:16770244,black:0,blanchedalmond:16772045,blue:255,blueviolet:9055202,brown:10824234,burlywood:14596231,cadetblue:6266528,chartreuse:8388352,chocolate:13789470,coral:16744272,cornflowerblue:6591981,cornsilk:16775388,crimson:14423100,cyan:65535,darkblue:139,darkcyan:35723,darkgoldenrod:12092939,darkgray:11119017,darkgreen:25600,darkgrey:11119017,darkkhaki:12433259,darkmagenta:9109643,darkolivegreen:5597999,darkorange:16747520,darkorchid:10040012,darkred:9109504,darksalmon:15308410,darkseagreen:9419919,darkslateblue:4734347,darkslategray:3100495,darkslategrey:3100495,darkturquoise:52945,darkviolet:9699539,deeppink:16716947,deepskyblue:49151,dimgray:6908265,dimgrey:6908265,dodgerblue:2003199,firebrick:11674146,floralwhite:16775920,forestgreen:2263842,fuchsia:16711935,gainsboro:14474460,ghostwhite:16316671,gold:16766720,goldenrod:14329120,gray:8421504,green:32768,greenyellow:11403055,grey:8421504,honeydew:15794160,hotpink:16738740,indianred:13458524,indigo:4915330,ivory:16777200,khaki:15787660,lavender:15132410,lavenderblush:16773365,lawngreen:8190976,lemonchiffon:16775885,lightblue:11393254,lightcoral:15761536,lightcyan:14745599,lightgoldenrodyellow:16448210,lightgray:13882323,lightgreen:9498256,lightgrey:13882323,lightpink:16758465,lightsalmon:16752762,lightseagreen:2142890,lightskyblue:8900346,lightslategray:7833753,lightslategrey:7833753,lightsteelblue:11584734,lightyellow:16777184,lime:65280,limegreen:3329330,linen:16445670,magenta:16711935,maroon:8388608,mediumaquamarine:6737322,mediumblue:205,mediumorchid:12211667,mediumpurple:9662683,mediumseagreen:3978097,mediumslateblue:8087790,mediumspringgreen:64154,mediumturquoise:4772300,mediumvioletred:13047173,midnightblue:1644912,mintcream:16121850,mistyrose:16770273,moccasin:16770229,navajowhite:16768685,navy:128,oldlace:16643558,olive:8421376,olivedrab:7048739,orange:16753920,orangered:16729344,orchid:14315734,palegoldenrod:15657130,palegreen:10025880,paleturquoise:11529966,palevioletred:14381203,papayawhip:16773077,peachpuff:16767673,peru:13468991,pink:16761035,plum:14524637,powderblue:11591910,purple:8388736,rebeccapurple:6697881,red:16711680,rosybrown:12357519,royalblue:4286945,saddlebrown:9127187,salmon:16416882,sandybrown:16032864,seagreen:3050327,seashell:16774638,sienna:10506797,silver:12632256,skyblue:8900331,slateblue:6970061,slategray:7372944,slategrey:7372944,snow:16775930,springgreen:65407,steelblue:4620980,tan:13808780,teal:32896,thistle:14204888,tomato:16737095,turquoise:4251856,violet:15631086,wheat:16113331,white:16777215,whitesmoke:16119285,yellow:16776960,yellowgreen:10145074},Dn={h:0,s:0,l:0},Nn={h:0,s:0,l:0};function On(t,e,i){return i<0&&(i+=1),i>1&&(i-=1),i<1/6?t+6*(e-t)*i:i<.5?e:i<2/3?t+6*(e-t)*(2/3-i):t}class zn{constructor(t,e,i){return this.isColor=!0,this.r=1,this.g=1,this.b=1,void 0===e&&void 0===i?this.set(t):this.setRGB(t,e,i)}set(t){return t&&t.isColor?this.copy(t):"number"==typeof t?this.setHex(t):"string"==typeof t&&this.setStyle(t),this}setScalar(t){return this.r=t,this.g=t,this.b=t,this}setHex(t,e=be){return t=Math.floor(t),this.r=(t>>16&255)/255,this.g=(t>>8&255)/255,this.b=(255&t)/255,li.toWorkingColorSpace(this,e),this}setRGB(t,e,i,n=li.workingColorSpace){return this.r=t,this.g=e,this.b=i,li.toWorkingColorSpace(this,n),this}setHSL(t,e,i,n=li.workingColorSpace){if(t=ze(t,1),e=Oe(e,0,1),i=Oe(i,0,1),0===e)this.r=this.g=this.b=i;else{const n=i<=.5?i*(1+e):i+e-i*e,r=2*i-n;this.r=On(r,n,t+1/3),this.g=On(r,n,t),this.b=On(r,n,t-1/3)}return li.toWorkingColorSpace(this,n),this}setStyle(t,e=be){function i(e){void 0!==e&&parseFloat(e)<1&&console.warn("THREE.Color: Alpha component of "+t+" will be ignored.")}let n;if(n=/^(\w+)\(([^\)]*)\)/.exec(t)){let r;const s=n[1],a=n[2];switch(s){case"rgb":case"rgba":if(r=/^\s*(\d+)\s*,\s*(\d+)\s*,\s*(\d+)\s*(?:,\s*(\d*\.?\d+)\s*)?$/.exec(a))return this.r=Math.min(255,parseInt(r[1],10))/255,this.g=Math.min(255,parseInt(r[2],10))/255,this.b=Math.min(255,parseInt(r[3],10))/255,li.toWorkingColorSpace(this,e),i(r[4]),this;if(r=/^\s*(\d+)\%\s*,\s*(\d+)\%\s*,\s*(\d+)\%\s*(?:,\s*(\d*\.?\d+)\s*)?$/.exec(a))return this.r=Math.min(100,parseInt(r[1],10))/100,this.g=Math.min(100,parseInt(r[2],10))/100,this.b=Math.min(100,parseInt(r[3],10))/100,li.toWorkingColorSpace(this,e),i(r[4]),this;break;case"hsl":case"hsla":if(r=/^\s*(\d*\.?\d+)\s*,\s*(\d*\.?\d+)\%\s*,\s*(\d*\.?\d+)\%\s*(?:,\s*(\d*\.?\d+)\s*)?$/.exec(a)){const t=parseFloat(r[1])/360,n=parseFloat(r[2])/100,s=parseFloat(r[3])/100;return i(r[4]),this.setHSL(t,n,s,e)}break;default:console.warn("THREE.Color: Unknown color model "+t)}}else if(n=/^\#([A-Fa-f\d]+)$/.exec(t)){const i=n[1],r=i.length;if(3===r)return this.r=parseInt(i.charAt(0)+i.charAt(0),16)/255,this.g=parseInt(i.charAt(1)+i.charAt(1),16)/255,this.b=parseInt(i.charAt(2)+i.charAt(2),16)/255,li.toWorkingColorSpace(this,e),this;if(6===r)return this.r=parseInt(i.charAt(0)+i.charAt(1),16)/255,this.g=parseInt(i.charAt(2)+i.charAt(3),16)/255,this.b=parseInt(i.charAt(4)+i.charAt(5),16)/255,li.toWorkingColorSpace(this,e),this;console.warn("THREE.Color: Invalid hex color "+t)}else if(t&&t.length>0)return this.setColorName(t,e);return this}setColorName(t,e=be){const i=In[t.toLowerCase()];return void 0!==i?this.setHex(i,e):console.warn("THREE.Color: Unknown color "+t),this}clone(){return new this.constructor(this.r,this.g,this.b)}copy(t){return this.r=t.r,this.g=t.g,this.b=t.b,this}copySRGBToLinear(t){return this.r=ei(t.r),this.g=ei(t.g),this.b=ei(t.b),this}copyLinearToSRGB(t){return this.r=ii(t.r),this.g=ii(t.g),this.b=ii(t.b),this}convertSRGBToLinear(){return this.copySRGBToLinear(this),this}convertLinearToSRGB(){return this.copyLinearToSRGB(this),this}getHex(t=be){return li.fromWorkingColorSpace(Un.copy(this),t),Oe(255*Un.r,0,255)<<16^Oe(255*Un.g,0,255)<<8^Oe(255*Un.b,0,255)<<0}getHexString(t=be){return("000000"+this.getHex(t).toString(16)).slice(-6)}getHSL(t,e=li.workingColorSpace){li.fromWorkingColorSpace(Un.copy(this),e);const i=Un.r,n=Un.g,r=Un.b,s=Math.max(i,n,r),a=Math.min(i,n,r);let o,l;const c=(a+s)/2;if(a===s)o=0,l=0;else{const t=s-a;switch(l=c<=.5?t/(s+a):t/(2-s-a),s){case i:o=(n-r)/t+(n0&&(t.userData=this.userData),void 0!==this.parameters){const e=this.parameters;for(const i in e)void 0!==e[i]&&(t[i]=e[i]);return t}t.data={attributes:{}};const e=this.index;null!==e&&(t.data.index={type:e.array.constructor.name,array:Array.prototype.slice.call(e.array)});const i=this.attributes;for(const e in i){const n=i[e];t.data.attributes[e]=n.toJSON(t.data)}const n={};let r=!1;for(const e in this.morphAttributes){const i=this.morphAttributes[e],s=[];for(let e=0,n=i.length;e0&&(n[e]=s,r=!0)}r&&(t.data.morphAttributes=n,t.data.morphTargetsRelative=this.morphTargetsRelative);const s=this.groups;s.length>0&&(t.data.groups=JSON.parse(JSON.stringify(s)));const a=this.boundingSphere;return null!==a&&(t.data.boundingSphere={center:a.center.toArray(),radius:a.radius}),t}clone(){return(new this.constructor).copy(this)}copy(t){this.index=null,this.attributes={},this.morphAttributes={},this.groups=[],this.boundingBox=null,this.boundingSphere=null;const e={};this.name=t.name;const i=t.index;null!==i&&this.setIndex(i.clone(e));const n=t.attributes;for(const t in n){const i=n[t];this.setAttribute(t,i.clone(e))}const r=t.morphAttributes;for(const t in r){const i=[],n=r[t];for(let t=0,r=n.length;t0){const i=t[e[0]];if(void 0!==i){this.morphTargetInfluences=[],this.morphTargetDictionary={};for(let t=0,e=i.length;t(t.far-t.near)**2)return}if(Qn.copy(r).invert(),tr.copy(t.ray).applyMatrix4(Qn),null!==i.boundingBox&&!1===tr.intersectsBox(i.boundingBox))return;let s;const a=i.index,o=i.attributes.position,l=i.attributes.uv,c=i.attributes.uv2,h=i.groups,u=i.drawRange;if(null!==a)if(Array.isArray(n))for(let i=0,r=h.length;ii.far?null:{distance:u,point:dr.clone(),object:t}}(t,e,i,n,nr,rr,sr,ur);if(u){r&&(lr.fromBufferAttribute(r,a),cr.fromBufferAttribute(r,o),hr.fromBufferAttribute(r,h),u.uv=Ln.getUV(ur,nr,rr,sr,lr,cr,hr,new We)),s&&(lr.fromBufferAttribute(s,a),cr.fromBufferAttribute(s,o),hr.fromBufferAttribute(s,h),u.uv2=Ln.getUV(ur,nr,rr,sr,lr,cr,hr,new We));const t={a:a,b:o,c:h,normal:new $e,materialIndex:0};Ln.getNormal(nr,rr,sr,t.normal),u.face=t}return u}class fr extends $n{constructor(t=1,e=1,i=1,n=1,r=1,s=1){super(),this.type="BoxGeometry",this.parameters={width:t,height:e,depth:i,widthSegments:n,heightSegments:r,depthSegments:s};const a=this;n=Math.floor(n),r=Math.floor(r),s=Math.floor(s);const o=[],l=[],c=[],h=[];let u=0,d=0;function p(t,e,i,n,r,s,p,m,f,g,v){const x=s/f,_=p/g,y=s/2,M=p/2,b=m/2,S=f+1,w=g+1;let T=0,A=0;const E=new $e;for(let s=0;s0?1:-1,c.push(E.x,E.y,E.z),h.push(o/f),h.push(1-s/g),T+=1}}for(let t=0;t0&&(e.defines=this.defines),e.vertexShader=this.vertexShader,e.fragmentShader=this.fragmentShader;const i={};for(const t in this.extensions)!0===this.extensions[t]&&(i[t]=!0);return Object.keys(i).length>0&&(e.extensions=i),e}}class Mr extends xn{constructor(){super(),this.isCamera=!0,this.type="Camera",this.matrixWorldInverse=new qi,this.projectionMatrix=new qi,this.projectionMatrixInverse=new qi}copy(t,e){return super.copy(t,e),this.matrixWorldInverse.copy(t.matrixWorldInverse),this.projectionMatrix.copy(t.projectionMatrix),this.projectionMatrixInverse.copy(t.projectionMatrixInverse),this}getWorldDirection(t){this.updateWorldMatrix(!0,!1);const e=this.matrixWorld.elements;return t.set(-e[8],-e[9],-e[10]).normalize()}updateMatrixWorld(t){super.updateMatrixWorld(t),this.matrixWorldInverse.copy(this.matrixWorld).invert()}updateWorldMatrix(t,e){super.updateWorldMatrix(t,e),this.matrixWorldInverse.copy(this.matrixWorld).invert()}clone(){return(new this.constructor).copy(this)}}class br extends Mr{constructor(t=50,e=1,i=.1,n=2e3){super(),this.isPerspectiveCamera=!0,this.type="PerspectiveCamera",this.fov=t,this.zoom=1,this.near=i,this.far=n,this.focus=10,this.aspect=e,this.view=null,this.filmGauge=35,this.filmOffset=0,this.updateProjectionMatrix()}copy(t,e){return super.copy(t,e),this.fov=t.fov,this.zoom=t.zoom,this.near=t.near,this.far=t.far,this.focus=t.focus,this.aspect=t.aspect,this.view=null===t.view?null:Object.assign({},t.view),this.filmGauge=t.filmGauge,this.filmOffset=t.filmOffset,this}setFocalLength(t){const e=.5*this.getFilmHeight()/t;this.fov=2*De*Math.atan(e),this.updateProjectionMatrix()}getFocalLength(){const t=Math.tan(.5*Ie*this.fov);return.5*this.getFilmHeight()/t}getEffectiveFOV(){return 2*De*Math.atan(Math.tan(.5*Ie*this.fov)/this.zoom)}getFilmWidth(){return this.filmGauge*Math.min(this.aspect,1)}getFilmHeight(){return this.filmGauge/Math.max(this.aspect,1)}setViewOffset(t,e,i,n,r,s){this.aspect=t/e,null===this.view&&(this.view={enabled:!0,fullWidth:1,fullHeight:1,offsetX:0,offsetY:0,width:1,height:1}),this.view.enabled=!0,this.view.fullWidth=t,this.view.fullHeight=e,this.view.offsetX=i,this.view.offsetY=n,this.view.width=r,this.view.height=s,this.updateProjectionMatrix()}clearViewOffset(){null!==this.view&&(this.view.enabled=!1),this.updateProjectionMatrix()}updateProjectionMatrix(){const t=this.near;let e=t*Math.tan(.5*Ie*this.fov)/this.zoom,i=2*e,n=this.aspect*i,r=-.5*n;const s=this.view;if(null!==this.view&&this.view.enabled){const t=s.fullWidth,a=s.fullHeight;r+=s.offsetX*n/t,e-=s.offsetY*i/a,n*=s.width/t,i*=s.height/a}const a=this.filmOffset;0!==a&&(r+=t*a/this.getFilmWidth()),this.projectionMatrix.makePerspective(r,r+n,e,e-i,t,this.far),this.projectionMatrixInverse.copy(this.projectionMatrix).invert()}toJSON(t){const e=super.toJSON(t);return e.object.fov=this.fov,e.object.zoom=this.zoom,e.object.near=this.near,e.object.far=this.far,e.object.focus=this.focus,e.object.aspect=this.aspect,null!==this.view&&(e.object.view=Object.assign({},this.view)),e.object.filmGauge=this.filmGauge,e.object.filmOffset=this.filmOffset,e}}const Sr=-90;class wr extends xn{constructor(t,e,i){super(),this.type="CubeCamera",this.renderTarget=i;const n=new br(Sr,1,t,e);n.layers=this.layers,n.up.set(0,1,0),n.lookAt(1,0,0),this.add(n);const r=new br(Sr,1,t,e);r.layers=this.layers,r.up.set(0,1,0),r.lookAt(-1,0,0),this.add(r);const s=new br(Sr,1,t,e);s.layers=this.layers,s.up.set(0,0,-1),s.lookAt(0,1,0),this.add(s);const a=new br(Sr,1,t,e);a.layers=this.layers,a.up.set(0,0,1),a.lookAt(0,-1,0),this.add(a);const o=new br(Sr,1,t,e);o.layers=this.layers,o.up.set(0,1,0),o.lookAt(0,0,1),this.add(o);const l=new br(Sr,1,t,e);l.layers=this.layers,l.up.set(0,1,0),l.lookAt(0,0,-1),this.add(l)}update(t,e){null===this.parent&&this.updateMatrixWorld();const i=this.renderTarget,[n,r,s,a,o,l]=this.children,c=t.getRenderTarget(),h=t.toneMapping,u=t.xr.enabled;t.toneMapping=W,t.xr.enabled=!1;const d=i.texture.generateMipmaps;i.texture.generateMipmaps=!1,t.setRenderTarget(i,0),t.render(e,n),t.setRenderTarget(i,1),t.render(e,r),t.setRenderTarget(i,2),t.render(e,s),t.setRenderTarget(i,3),t.render(e,a),t.setRenderTarget(i,4),t.render(e,o),i.texture.generateMipmaps=d,t.setRenderTarget(i,5),t.render(e,l),t.setRenderTarget(c),t.toneMapping=h,t.xr.enabled=u,i.texture.needsPMREMUpdate=!0}}class Tr extends mi{constructor(t,e,i,n,r,s,a,o,l,c){super(t=void 0!==t?t:[],e=void 0!==e?e:K,i,n,r,s,a,o,l,c),this.isCubeTexture=!0,this.flipY=!1}get images(){return this.image}set images(t){this.image=t}}class Ar extends gi{constructor(t=1,e={}){super(t,t,e),this.isWebGLCubeRenderTarget=!0;const i={width:t,height:t,depth:1},n=[i,i,i,i,i,i];this.texture=new Tr(n,e.mapping,e.wrapS,e.wrapT,e.magFilter,e.minFilter,e.format,e.type,e.anisotropy,e.encoding),this.texture.isRenderTargetTexture=!0,this.texture.generateMipmaps=void 0!==e.generateMipmaps&&e.generateMipmaps,this.texture.minFilter=void 0!==e.minFilter?e.minFilter:lt}fromEquirectangularTexture(t,e){this.texture.type=e.type,this.texture.encoding=e.encoding,this.texture.generateMipmaps=e.generateMipmaps,this.texture.minFilter=e.minFilter,this.texture.magFilter=e.magFilter;const i={uniforms:{tEquirect:{value:null}},vertexShader:"\n\n\t\t\t\tvarying vec3 vWorldDirection;\n\n\t\t\t\tvec3 transformDirection( in vec3 dir, in mat4 matrix ) {\n\n\t\t\t\t\treturn normalize( ( matrix * vec4( dir, 0.0 ) ).xyz );\n\n\t\t\t\t}\n\n\t\t\t\tvoid main() {\n\n\t\t\t\t\tvWorldDirection = transformDirection( position, modelMatrix );\n\n\t\t\t\t\t#include \n\t\t\t\t\t#include \n\n\t\t\t\t}\n\t\t\t",fragmentShader:"\n\n\t\t\t\tuniform sampler2D tEquirect;\n\n\t\t\t\tvarying vec3 vWorldDirection;\n\n\t\t\t\t#include \n\n\t\t\t\tvoid main() {\n\n\t\t\t\t\tvec3 direction = normalize( vWorldDirection );\n\n\t\t\t\t\tvec2 sampleUV = equirectUv( direction );\n\n\t\t\t\t\tgl_FragColor = texture2D( tEquirect, sampleUV );\n\n\t\t\t\t}\n\t\t\t"},n=new fr(5,5,5),r=new yr({name:"CubemapFromEquirect",uniforms:gr(i.uniforms),vertexShader:i.vertexShader,fragmentShader:i.fragmentShader,side:c,blending:u});r.uniforms.tEquirect.value=e;const s=new pr(n,r),a=e.minFilter;e.minFilter===ht&&(e.minFilter=lt);return new wr(1,10,this).update(t,s),e.minFilter=a,s.geometry.dispose(),s.material.dispose(),this}clear(t,e,i,n){const r=t.getRenderTarget();for(let r=0;r<6;r++)t.setRenderTarget(this,r),t.clear(e,i,n);t.setRenderTarget(r)}}const Er=new $e,Cr=new $e,Lr=new je;class Rr{constructor(t=new $e(1,0,0),e=0){this.isPlane=!0,this.normal=t,this.constant=e}set(t,e){return this.normal.copy(t),this.constant=e,this}setComponents(t,e,i,n){return this.normal.set(t,e,i),this.constant=n,this}setFromNormalAndCoplanarPoint(t,e){return this.normal.copy(t),this.constant=-e.dot(this.normal),this}setFromCoplanarPoints(t,e,i){const n=Er.subVectors(i,e).cross(Cr.subVectors(t,e)).normalize();return this.setFromNormalAndCoplanarPoint(n,t),this}copy(t){return this.normal.copy(t.normal),this.constant=t.constant,this}normalize(){const t=1/this.normal.length();return this.normal.multiplyScalar(t),this.constant*=t,this}negate(){return this.constant*=-1,this.normal.negate(),this}distanceToPoint(t){return this.normal.dot(t)+this.constant}distanceToSphere(t){return this.distanceToPoint(t.center)-t.radius}projectPoint(t,e){return e.copy(t).addScaledVector(this.normal,-this.distanceToPoint(t))}intersectLine(t,e){const i=t.delta(Er),n=this.normal.dot(i);if(0===n)return 0===this.distanceToPoint(t.start)?e.copy(t.start):null;const r=-(t.start.dot(this.normal)+this.constant)/n;return r<0||r>1?null:e.copy(t.start).addScaledVector(i,r)}intersectsLine(t){const e=this.distanceToPoint(t.start),i=this.distanceToPoint(t.end);return e<0&&i>0||i<0&&e>0}intersectsBox(t){return t.intersectsPlane(this)}intersectsSphere(t){return t.intersectsPlane(this)}coplanarPoint(t){return t.copy(this.normal).multiplyScalar(-this.constant)}applyMatrix4(t,e){const i=e||Lr.getNormalMatrix(t),n=this.coplanarPoint(Er).applyMatrix4(t),r=this.normal.applyMatrix3(i).normalize();return this.constant=-n.dot(r),this}translate(t){return this.constant-=t.dot(this.normal),this}equals(t){return t.normal.equals(this.normal)&&t.constant===this.constant}clone(){return(new this.constructor).copy(this)}}const Pr=new Ui,Ir=new $e;class Dr{constructor(t=new Rr,e=new Rr,i=new Rr,n=new Rr,r=new Rr,s=new Rr){this.planes=[t,e,i,n,r,s]}set(t,e,i,n,r,s){const a=this.planes;return a[0].copy(t),a[1].copy(e),a[2].copy(i),a[3].copy(n),a[4].copy(r),a[5].copy(s),this}copy(t){const e=this.planes;for(let i=0;i<6;i++)e[i].copy(t.planes[i]);return this}setFromProjectionMatrix(t){const e=this.planes,i=t.elements,n=i[0],r=i[1],s=i[2],a=i[3],o=i[4],l=i[5],c=i[6],h=i[7],u=i[8],d=i[9],p=i[10],m=i[11],f=i[12],g=i[13],v=i[14],x=i[15];return e[0].setComponents(a-n,h-o,m-u,x-f).normalize(),e[1].setComponents(a+n,h+o,m+u,x+f).normalize(),e[2].setComponents(a+r,h+l,m+d,x+g).normalize(),e[3].setComponents(a-r,h-l,m-d,x-g).normalize(),e[4].setComponents(a-s,h-c,m-p,x-v).normalize(),e[5].setComponents(a+s,h+c,m+p,x+v).normalize(),this}intersectsObject(t){const e=t.geometry;return null===e.boundingSphere&&e.computeBoundingSphere(),Pr.copy(e.boundingSphere).applyMatrix4(t.matrixWorld),this.intersectsSphere(Pr)}intersectsSprite(t){return Pr.center.set(0,0,0),Pr.radius=.7071067811865476,Pr.applyMatrix4(t.matrixWorld),this.intersectsSphere(Pr)}intersectsSphere(t){const e=this.planes,i=t.center,n=-t.radius;for(let t=0;t<6;t++){if(e[t].distanceToPoint(i)0?t.max.x:t.min.x,Ir.y=n.normal.y>0?t.max.y:t.min.y,Ir.z=n.normal.z>0?t.max.z:t.min.z,n.distanceToPoint(Ir)<0)return!1}return!0}containsPoint(t){const e=this.planes;for(let i=0;i<6;i++)if(e[i].distanceToPoint(t)<0)return!1;return!0}clone(){return(new this.constructor).copy(this)}}function Nr(){let t=null,e=!1,i=null,n=null;function r(e,s){i(e,s),n=t.requestAnimationFrame(r)}return{start:function(){!0!==e&&null!==i&&(n=t.requestAnimationFrame(r),e=!0)},stop:function(){t.cancelAnimationFrame(n),e=!1},setAnimationLoop:function(t){i=t},setContext:function(e){t=e}}}function Or(t,e){const i=e.isWebGL2,n=new WeakMap;return{get:function(t){return t.isInterleavedBufferAttribute&&(t=t.data),n.get(t)},remove:function(e){e.isInterleavedBufferAttribute&&(e=e.data);const i=n.get(e);i&&(t.deleteBuffer(i.buffer),n.delete(e))},update:function(e,r){if(e.isGLBufferAttribute){const t=n.get(e);return void((!t||t.version 0.0 ) ? v : 0.5 * inversesqrt( max( 1.0 - x * x, 1e-7 ) ) - v;\n\treturn cross( v1, v2 ) * theta_sintheta;\n}\nvec3 LTC_Evaluate( const in vec3 N, const in vec3 V, const in vec3 P, const in mat3 mInv, const in vec3 rectCoords[ 4 ] ) {\n\tvec3 v1 = rectCoords[ 1 ] - rectCoords[ 0 ];\n\tvec3 v2 = rectCoords[ 3 ] - rectCoords[ 0 ];\n\tvec3 lightNormal = cross( v1, v2 );\n\tif( dot( lightNormal, P - rectCoords[ 0 ] ) < 0.0 ) return vec3( 0.0 );\n\tvec3 T1, T2;\n\tT1 = normalize( V - N * dot( V, N ) );\n\tT2 = - cross( N, T1 );\n\tmat3 mat = mInv * transposeMat3( mat3( T1, T2, N ) );\n\tvec3 coords[ 4 ];\n\tcoords[ 0 ] = mat * ( rectCoords[ 0 ] - P );\n\tcoords[ 1 ] = mat * ( rectCoords[ 1 ] - P );\n\tcoords[ 2 ] = mat * ( rectCoords[ 2 ] - P );\n\tcoords[ 3 ] = mat * ( rectCoords[ 3 ] - P );\n\tcoords[ 0 ] = normalize( coords[ 0 ] );\n\tcoords[ 1 ] = normalize( coords[ 1 ] );\n\tcoords[ 2 ] = normalize( coords[ 2 ] );\n\tcoords[ 3 ] = normalize( coords[ 3 ] );\n\tvec3 vectorFormFactor = vec3( 0.0 );\n\tvectorFormFactor += LTC_EdgeVectorFormFactor( coords[ 0 ], coords[ 1 ] );\n\tvectorFormFactor += LTC_EdgeVectorFormFactor( coords[ 1 ], coords[ 2 ] );\n\tvectorFormFactor += LTC_EdgeVectorFormFactor( coords[ 2 ], coords[ 3 ] );\n\tvectorFormFactor += LTC_EdgeVectorFormFactor( coords[ 3 ], coords[ 0 ] );\n\tfloat result = LTC_ClippedSphereFormFactor( vectorFormFactor );\n\treturn vec3( result );\n}\nfloat G_BlinnPhong_Implicit( ) {\n\treturn 0.25;\n}\nfloat D_BlinnPhong( const in float shininess, const in float dotNH ) {\n\treturn RECIPROCAL_PI * ( shininess * 0.5 + 1.0 ) * pow( dotNH, shininess );\n}\nvec3 BRDF_BlinnPhong( const in vec3 lightDir, const in vec3 viewDir, const in vec3 normal, const in vec3 specularColor, const in float shininess ) {\n\tvec3 halfDir = normalize( lightDir + viewDir );\n\tfloat dotNH = saturate( dot( normal, halfDir ) );\n\tfloat dotVH = saturate( dot( viewDir, halfDir ) );\n\tvec3 F = F_Schlick( specularColor, 1.0, dotVH );\n\tfloat G = G_BlinnPhong_Implicit( );\n\tfloat D = D_BlinnPhong( shininess, dotNH );\n\treturn F * ( G * D );\n}\n#if defined( USE_SHEEN )\nfloat D_Charlie( float roughness, float dotNH ) {\n\tfloat alpha = pow2( roughness );\n\tfloat invAlpha = 1.0 / alpha;\n\tfloat cos2h = dotNH * dotNH;\n\tfloat sin2h = max( 1.0 - cos2h, 0.0078125 );\n\treturn ( 2.0 + invAlpha ) * pow( sin2h, invAlpha * 0.5 ) / ( 2.0 * PI );\n}\nfloat V_Neubelt( float dotNV, float dotNL ) {\n\treturn saturate( 1.0 / ( 4.0 * ( dotNL + dotNV - dotNL * dotNV ) ) );\n}\nvec3 BRDF_Sheen( const in vec3 lightDir, const in vec3 viewDir, const in vec3 normal, vec3 sheenColor, const in float sheenRoughness ) {\n\tvec3 halfDir = normalize( lightDir + viewDir );\n\tfloat dotNL = saturate( dot( normal, lightDir ) );\n\tfloat dotNV = saturate( dot( normal, viewDir ) );\n\tfloat dotNH = saturate( dot( normal, halfDir ) );\n\tfloat D = D_Charlie( sheenRoughness, dotNH );\n\tfloat V = V_Neubelt( dotNV, dotNL );\n\treturn sheenColor * ( D * V );\n}\n#endif",iridescence_fragment:"#ifdef USE_IRIDESCENCE\n\tconst mat3 XYZ_TO_REC709 = mat3(\n\t\t 3.2404542, -0.9692660, 0.0556434,\n\t\t-1.5371385, 1.8760108, -0.2040259,\n\t\t-0.4985314, 0.0415560, 1.0572252\n\t);\n\tvec3 Fresnel0ToIor( vec3 fresnel0 ) {\n\t\tvec3 sqrtF0 = sqrt( fresnel0 );\n\t\treturn ( vec3( 1.0 ) + sqrtF0 ) / ( vec3( 1.0 ) - sqrtF0 );\n\t}\n\tvec3 IorToFresnel0( vec3 transmittedIor, float incidentIor ) {\n\t\treturn pow2( ( transmittedIor - vec3( incidentIor ) ) / ( transmittedIor + vec3( incidentIor ) ) );\n\t}\n\tfloat IorToFresnel0( float transmittedIor, float incidentIor ) {\n\t\treturn pow2( ( transmittedIor - incidentIor ) / ( transmittedIor + incidentIor ));\n\t}\n\tvec3 evalSensitivity( float OPD, vec3 shift ) {\n\t\tfloat phase = 2.0 * PI * OPD * 1.0e-9;\n\t\tvec3 val = vec3( 5.4856e-13, 4.4201e-13, 5.2481e-13 );\n\t\tvec3 pos = vec3( 1.6810e+06, 1.7953e+06, 2.2084e+06 );\n\t\tvec3 var = vec3( 4.3278e+09, 9.3046e+09, 6.6121e+09 );\n\t\tvec3 xyz = val * sqrt( 2.0 * PI * var ) * cos( pos * phase + shift ) * exp( - pow2( phase ) * var );\n\t\txyz.x += 9.7470e-14 * sqrt( 2.0 * PI * 4.5282e+09 ) * cos( 2.2399e+06 * phase + shift[ 0 ] ) * exp( - 4.5282e+09 * pow2( phase ) );\n\t\txyz /= 1.0685e-7;\n\t\tvec3 rgb = XYZ_TO_REC709 * xyz;\n\t\treturn rgb;\n\t}\n\tvec3 evalIridescence( float outsideIOR, float eta2, float cosTheta1, float thinFilmThickness, vec3 baseF0 ) {\n\t\tvec3 I;\n\t\tfloat iridescenceIOR = mix( outsideIOR, eta2, smoothstep( 0.0, 0.03, thinFilmThickness ) );\n\t\tfloat sinTheta2Sq = pow2( outsideIOR / iridescenceIOR ) * ( 1.0 - pow2( cosTheta1 ) );\n\t\tfloat cosTheta2Sq = 1.0 - sinTheta2Sq;\n\t\tif ( cosTheta2Sq < 0.0 ) {\n\t\t\t return vec3( 1.0 );\n\t\t}\n\t\tfloat cosTheta2 = sqrt( cosTheta2Sq );\n\t\tfloat R0 = IorToFresnel0( iridescenceIOR, outsideIOR );\n\t\tfloat R12 = F_Schlick( R0, 1.0, cosTheta1 );\n\t\tfloat R21 = R12;\n\t\tfloat T121 = 1.0 - R12;\n\t\tfloat phi12 = 0.0;\n\t\tif ( iridescenceIOR < outsideIOR ) phi12 = PI;\n\t\tfloat phi21 = PI - phi12;\n\t\tvec3 baseIOR = Fresnel0ToIor( clamp( baseF0, 0.0, 0.9999 ) );\t\tvec3 R1 = IorToFresnel0( baseIOR, iridescenceIOR );\n\t\tvec3 R23 = F_Schlick( R1, 1.0, cosTheta2 );\n\t\tvec3 phi23 = vec3( 0.0 );\n\t\tif ( baseIOR[ 0 ] < iridescenceIOR ) phi23[ 0 ] = PI;\n\t\tif ( baseIOR[ 1 ] < iridescenceIOR ) phi23[ 1 ] = PI;\n\t\tif ( baseIOR[ 2 ] < iridescenceIOR ) phi23[ 2 ] = PI;\n\t\tfloat OPD = 2.0 * iridescenceIOR * thinFilmThickness * cosTheta2;\n\t\tvec3 phi = vec3( phi21 ) + phi23;\n\t\tvec3 R123 = clamp( R12 * R23, 1e-5, 0.9999 );\n\t\tvec3 r123 = sqrt( R123 );\n\t\tvec3 Rs = pow2( T121 ) * R23 / ( vec3( 1.0 ) - R123 );\n\t\tvec3 C0 = R12 + Rs;\n\t\tI = C0;\n\t\tvec3 Cm = Rs - T121;\n\t\tfor ( int m = 1; m <= 2; ++ m ) {\n\t\t\tCm *= r123;\n\t\t\tvec3 Sm = 2.0 * evalSensitivity( float( m ) * OPD, float( m ) * phi );\n\t\t\tI += Cm * Sm;\n\t\t}\n\t\treturn max( I, vec3( 0.0 ) );\n\t}\n#endif",bumpmap_pars_fragment:"#ifdef USE_BUMPMAP\n\tuniform sampler2D bumpMap;\n\tuniform float bumpScale;\n\tvec2 dHdxy_fwd() {\n\t\tvec2 dSTdx = dFdx( vUv );\n\t\tvec2 dSTdy = dFdy( vUv );\n\t\tfloat Hll = bumpScale * texture2D( bumpMap, vUv ).x;\n\t\tfloat dBx = bumpScale * texture2D( bumpMap, vUv + dSTdx ).x - Hll;\n\t\tfloat dBy = bumpScale * texture2D( bumpMap, vUv + dSTdy ).x - Hll;\n\t\treturn vec2( dBx, dBy );\n\t}\n\tvec3 perturbNormalArb( vec3 surf_pos, vec3 surf_norm, vec2 dHdxy, float faceDirection ) {\n\t\tvec3 vSigmaX = dFdx( surf_pos.xyz );\n\t\tvec3 vSigmaY = dFdy( surf_pos.xyz );\n\t\tvec3 vN = surf_norm;\n\t\tvec3 R1 = cross( vSigmaY, vN );\n\t\tvec3 R2 = cross( vN, vSigmaX );\n\t\tfloat fDet = dot( vSigmaX, R1 ) * faceDirection;\n\t\tvec3 vGrad = sign( fDet ) * ( dHdxy.x * R1 + dHdxy.y * R2 );\n\t\treturn normalize( abs( fDet ) * surf_norm - vGrad );\n\t}\n#endif",clipping_planes_fragment:"#if NUM_CLIPPING_PLANES > 0\n\tvec4 plane;\n\t#pragma unroll_loop_start\n\tfor ( int i = 0; i < UNION_CLIPPING_PLANES; i ++ ) {\n\t\tplane = clippingPlanes[ i ];\n\t\tif ( dot( vClipPosition, plane.xyz ) > plane.w ) discard;\n\t}\n\t#pragma unroll_loop_end\n\t#if UNION_CLIPPING_PLANES < NUM_CLIPPING_PLANES\n\t\tbool clipped = true;\n\t\t#pragma unroll_loop_start\n\t\tfor ( int i = UNION_CLIPPING_PLANES; i < NUM_CLIPPING_PLANES; i ++ ) {\n\t\t\tplane = clippingPlanes[ i ];\n\t\t\tclipped = ( dot( vClipPosition, plane.xyz ) > plane.w ) && clipped;\n\t\t}\n\t\t#pragma unroll_loop_end\n\t\tif ( clipped ) discard;\n\t#endif\n#endif",clipping_planes_pars_fragment:"#if NUM_CLIPPING_PLANES > 0\n\tvarying vec3 vClipPosition;\n\tuniform vec4 clippingPlanes[ NUM_CLIPPING_PLANES ];\n#endif",clipping_planes_pars_vertex:"#if NUM_CLIPPING_PLANES > 0\n\tvarying vec3 vClipPosition;\n#endif",clipping_planes_vertex:"#if NUM_CLIPPING_PLANES > 0\n\tvClipPosition = - mvPosition.xyz;\n#endif",color_fragment:"#if defined( USE_COLOR_ALPHA )\n\tdiffuseColor *= vColor;\n#elif defined( USE_COLOR )\n\tdiffuseColor.rgb *= vColor;\n#endif",color_pars_fragment:"#if defined( USE_COLOR_ALPHA )\n\tvarying vec4 vColor;\n#elif defined( USE_COLOR )\n\tvarying vec3 vColor;\n#endif",color_pars_vertex:"#if defined( USE_COLOR_ALPHA )\n\tvarying vec4 vColor;\n#elif defined( USE_COLOR ) || defined( USE_INSTANCING_COLOR )\n\tvarying vec3 vColor;\n#endif",color_vertex:"#if defined( USE_COLOR_ALPHA )\n\tvColor = vec4( 1.0 );\n#elif defined( USE_COLOR ) || defined( USE_INSTANCING_COLOR )\n\tvColor = vec3( 1.0 );\n#endif\n#ifdef USE_COLOR\n\tvColor *= color;\n#endif\n#ifdef USE_INSTANCING_COLOR\n\tvColor.xyz *= instanceColor.xyz;\n#endif",common:"#define PI 3.141592653589793\n#define PI2 6.283185307179586\n#define PI_HALF 1.5707963267948966\n#define RECIPROCAL_PI 0.3183098861837907\n#define RECIPROCAL_PI2 0.15915494309189535\n#define EPSILON 1e-6\n#ifndef saturate\n#define saturate( a ) clamp( a, 0.0, 1.0 )\n#endif\n#define whiteComplement( a ) ( 1.0 - saturate( a ) )\nfloat pow2( const in float x ) { return x*x; }\nvec3 pow2( const in vec3 x ) { return x*x; }\nfloat pow3( const in float x ) { return x*x*x; }\nfloat pow4( const in float x ) { float x2 = x*x; return x2*x2; }\nfloat max3( const in vec3 v ) { return max( max( v.x, v.y ), v.z ); }\nfloat average( const in vec3 v ) { return dot( v, vec3( 0.3333333 ) ); }\nhighp float rand( const in vec2 uv ) {\n\tconst highp float a = 12.9898, b = 78.233, c = 43758.5453;\n\thighp float dt = dot( uv.xy, vec2( a,b ) ), sn = mod( dt, PI );\n\treturn fract( sin( sn ) * c );\n}\n#ifdef HIGH_PRECISION\n\tfloat precisionSafeLength( vec3 v ) { return length( v ); }\n#else\n\tfloat precisionSafeLength( vec3 v ) {\n\t\tfloat maxComponent = max3( abs( v ) );\n\t\treturn length( v / maxComponent ) * maxComponent;\n\t}\n#endif\nstruct IncidentLight {\n\tvec3 color;\n\tvec3 direction;\n\tbool visible;\n};\nstruct ReflectedLight {\n\tvec3 directDiffuse;\n\tvec3 directSpecular;\n\tvec3 indirectDiffuse;\n\tvec3 indirectSpecular;\n};\nstruct GeometricContext {\n\tvec3 position;\n\tvec3 normal;\n\tvec3 viewDir;\n#ifdef USE_CLEARCOAT\n\tvec3 clearcoatNormal;\n#endif\n};\nvec3 transformDirection( in vec3 dir, in mat4 matrix ) {\n\treturn normalize( ( matrix * vec4( dir, 0.0 ) ).xyz );\n}\nvec3 inverseTransformDirection( in vec3 dir, in mat4 matrix ) {\n\treturn normalize( ( vec4( dir, 0.0 ) * matrix ).xyz );\n}\nmat3 transposeMat3( const in mat3 m ) {\n\tmat3 tmp;\n\ttmp[ 0 ] = vec3( m[ 0 ].x, m[ 1 ].x, m[ 2 ].x );\n\ttmp[ 1 ] = vec3( m[ 0 ].y, m[ 1 ].y, m[ 2 ].y );\n\ttmp[ 2 ] = vec3( m[ 0 ].z, m[ 1 ].z, m[ 2 ].z );\n\treturn tmp;\n}\nfloat luminance( const in vec3 rgb ) {\n\tconst vec3 weights = vec3( 0.2126729, 0.7151522, 0.0721750 );\n\treturn dot( weights, rgb );\n}\nbool isPerspectiveMatrix( mat4 m ) {\n\treturn m[ 2 ][ 3 ] == - 1.0;\n}\nvec2 equirectUv( in vec3 dir ) {\n\tfloat u = atan( dir.z, dir.x ) * RECIPROCAL_PI2 + 0.5;\n\tfloat v = asin( clamp( dir.y, - 1.0, 1.0 ) ) * RECIPROCAL_PI + 0.5;\n\treturn vec2( u, v );\n}\nfloat w0( float a ) {\n\treturn ( 1.0 / 6.0 ) * ( a * ( a * ( - a + 3.0 ) - 3.0 ) + 1.0 );\n}\nfloat w1( float a ) {\n\treturn ( 1.0 / 6.0 ) * ( a * a * ( 3.0 * a - 6.0 ) + 4.0 );\n}\nfloat w2( float a ){\n return ( 1.0 / 6.0 ) * ( a * ( a * ( - 3.0 * a + 3.0 ) + 3.0 ) + 1.0 );\n}\nfloat w3( float a ) {\n\treturn ( 1.0 / 6.0 ) * ( a * a * a );\n}\nfloat g0( float a ) {\n\treturn w0( a ) + w1( a );\n}\nfloat g1( float a ) {\n\treturn w2( a ) + w3( a );\n}\nfloat h0( float a ) {\n\treturn - 1.0 + w1( a ) / ( w0( a ) + w1( a ) );\n}\nfloat h1( float a ) {\n return 1.0 + w3( a ) / ( w2( a ) + w3( a ) );\n}\nvec4 bicubic( sampler2D tex, vec2 uv, vec4 texelSize, vec2 fullSize, float lod ) {\n\tuv = uv * texelSize.zw + 0.5;\n\tvec2 iuv = floor( uv );\n vec2 fuv = fract( uv );\n float g0x = g0( fuv.x );\n float g1x = g1( fuv.x );\n float h0x = h0( fuv.x );\n float h1x = h1( fuv.x );\n float h0y = h0( fuv.y );\n float h1y = h1( fuv.y );\n vec2 p0 = ( vec2( iuv.x + h0x, iuv.y + h0y ) - 0.5 ) * texelSize.xy;\n vec2 p1 = ( vec2( iuv.x + h1x, iuv.y + h0y ) - 0.5 ) * texelSize.xy;\n vec2 p2 = ( vec2( iuv.x + h0x, iuv.y + h1y ) - 0.5 ) * texelSize.xy;\n vec2 p3 = ( vec2( iuv.x + h1x, iuv.y + h1y ) - 0.5 ) * texelSize.xy;\n \n vec2 lodFudge = pow( 1.95, lod ) / fullSize;\n\treturn g0( fuv.y ) * ( g0x * textureLod( tex, p0, lod ) + g1x * textureLod( tex, p1, lod ) ) +\n\t\t g1( fuv.y ) * ( g0x * textureLod( tex, p2, lod ) + g1x * textureLod( tex, p3, lod ) );\n}\nvec4 textureBicubic( sampler2D sampler, vec2 uv, float lod ) {\n\tvec2 fLodSize = vec2( textureSize( sampler, int( lod ) ) );\n\tvec2 cLodSize = vec2( textureSize( sampler, int( lod + 1.0 ) ) );\n\tvec2 fLodSizeInv = 1.0 / fLodSize;\n\tvec2 cLodSizeInv = 1.0 / cLodSize;\n\tvec2 fullSize = vec2( textureSize( sampler, 0 ) );\n\tvec4 fSample = bicubic( sampler, uv, vec4( fLodSizeInv, fLodSize ), fullSize, floor( lod ) );\n\tvec4 cSample = bicubic( sampler, uv, vec4( cLodSizeInv, cLodSize ), fullSize, ceil( lod ) );\n\treturn mix( fSample, cSample, fract( lod ) );\n}",cube_uv_reflection_fragment:"#ifdef ENVMAP_TYPE_CUBE_UV\n\t#define cubeUV_minMipLevel 4.0\n\t#define cubeUV_minTileSize 16.0\n\tfloat getFace( vec3 direction ) {\n\t\tvec3 absDirection = abs( direction );\n\t\tfloat face = - 1.0;\n\t\tif ( absDirection.x > absDirection.z ) {\n\t\t\tif ( absDirection.x > absDirection.y )\n\t\t\t\tface = direction.x > 0.0 ? 0.0 : 3.0;\n\t\t\telse\n\t\t\t\tface = direction.y > 0.0 ? 1.0 : 4.0;\n\t\t} else {\n\t\t\tif ( absDirection.z > absDirection.y )\n\t\t\t\tface = direction.z > 0.0 ? 2.0 : 5.0;\n\t\t\telse\n\t\t\t\tface = direction.y > 0.0 ? 1.0 : 4.0;\n\t\t}\n\t\treturn face;\n\t}\n\tvec2 getUV( vec3 direction, float face ) {\n\t\tvec2 uv;\n\t\tif ( face == 0.0 ) {\n\t\t\tuv = vec2( direction.z, direction.y ) / abs( direction.x );\n\t\t} else if ( face == 1.0 ) {\n\t\t\tuv = vec2( - direction.x, - direction.z ) / abs( direction.y );\n\t\t} else if ( face == 2.0 ) {\n\t\t\tuv = vec2( - direction.x, direction.y ) / abs( direction.z );\n\t\t} else if ( face == 3.0 ) {\n\t\t\tuv = vec2( - direction.z, direction.y ) / abs( direction.x );\n\t\t} else if ( face == 4.0 ) {\n\t\t\tuv = vec2( - direction.x, direction.z ) / abs( direction.y );\n\t\t} else {\n\t\t\tuv = vec2( direction.x, direction.y ) / abs( direction.z );\n\t\t}\n\t\treturn 0.5 * ( uv + 1.0 );\n\t}\n\tvec3 bilinearCubeUV( sampler2D envMap, vec3 direction, float mipInt ) {\n\t\tfloat face = getFace( direction );\n\t\tfloat filterInt = max( cubeUV_minMipLevel - mipInt, 0.0 );\n\t\tmipInt = max( mipInt, cubeUV_minMipLevel );\n\t\tfloat faceSize = exp2( mipInt );\n\t\thighp vec2 uv = getUV( direction, face ) * ( faceSize - 2.0 ) + 1.0;\n\t\tif ( face > 2.0 ) {\n\t\t\tuv.y += faceSize;\n\t\t\tface -= 3.0;\n\t\t}\n\t\tuv.x += face * faceSize;\n\t\tuv.x += filterInt * 3.0 * cubeUV_minTileSize;\n\t\tuv.y += 4.0 * ( exp2( CUBEUV_MAX_MIP ) - faceSize );\n\t\tuv.x *= CUBEUV_TEXEL_WIDTH;\n\t\tuv.y *= CUBEUV_TEXEL_HEIGHT;\n\t\t#ifdef texture2DGradEXT\n\t\t\treturn texture2DGradEXT( envMap, uv, vec2( 0.0 ), vec2( 0.0 ) ).rgb;\n\t\t#else\n\t\t\treturn texture2D( envMap, uv ).rgb;\n\t\t#endif\n\t}\n\t#define cubeUV_r0 1.0\n\t#define cubeUV_v0 0.339\n\t#define cubeUV_m0 - 2.0\n\t#define cubeUV_r1 0.8\n\t#define cubeUV_v1 0.276\n\t#define cubeUV_m1 - 1.0\n\t#define cubeUV_r4 0.4\n\t#define cubeUV_v4 0.046\n\t#define cubeUV_m4 2.0\n\t#define cubeUV_r5 0.305\n\t#define cubeUV_v5 0.016\n\t#define cubeUV_m5 3.0\n\t#define cubeUV_r6 0.21\n\t#define cubeUV_v6 0.0038\n\t#define cubeUV_m6 4.0\n\tfloat roughnessToMip( float roughness ) {\n\t\tfloat mip = 0.0;\n\t\tif ( roughness >= cubeUV_r1 ) {\n\t\t\tmip = ( cubeUV_r0 - roughness ) * ( cubeUV_m1 - cubeUV_m0 ) / ( cubeUV_r0 - cubeUV_r1 ) + cubeUV_m0;\n\t\t} else if ( roughness >= cubeUV_r4 ) {\n\t\t\tmip = ( cubeUV_r1 - roughness ) * ( cubeUV_m4 - cubeUV_m1 ) / ( cubeUV_r1 - cubeUV_r4 ) + cubeUV_m1;\n\t\t} else if ( roughness >= cubeUV_r5 ) {\n\t\t\tmip = ( cubeUV_r4 - roughness ) * ( cubeUV_m5 - cubeUV_m4 ) / ( cubeUV_r4 - cubeUV_r5 ) + cubeUV_m4;\n\t\t} else if ( roughness >= cubeUV_r6 ) {\n\t\t\tmip = ( cubeUV_r5 - roughness ) * ( cubeUV_m6 - cubeUV_m5 ) / ( cubeUV_r5 - cubeUV_r6 ) + cubeUV_m5;\n\t\t} else {\n\t\t\tmip = - 2.0 * log2( 1.16 * roughness );\t\t}\n\t\treturn mip;\n\t}\n\tvec4 textureCubeUV( sampler2D envMap, vec3 sampleDir, float roughness ) {\n\t\tfloat mip = clamp( roughnessToMip( roughness ), cubeUV_m0, CUBEUV_MAX_MIP );\n\t\tfloat mipF = fract( mip );\n\t\tfloat mipInt = floor( mip );\n\t\tvec3 color0 = bilinearCubeUV( envMap, sampleDir, mipInt );\n\t\tif ( mipF == 0.0 ) {\n\t\t\treturn vec4( color0, 1.0 );\n\t\t} else {\n\t\t\tvec3 color1 = bilinearCubeUV( envMap, sampleDir, mipInt + 1.0 );\n\t\t\treturn vec4( mix( color0, color1, mipF ), 1.0 );\n\t\t}\n\t}\n#endif",defaultnormal_vertex:"vec3 transformedNormal = objectNormal;\n#ifdef USE_INSTANCING\n\tmat3 m = mat3( instanceMatrix );\n\ttransformedNormal /= vec3( dot( m[ 0 ], m[ 0 ] ), dot( m[ 1 ], m[ 1 ] ), dot( m[ 2 ], m[ 2 ] ) );\n\ttransformedNormal = m * transformedNormal;\n#endif\ntransformedNormal = normalMatrix * transformedNormal;\n#ifdef FLIP_SIDED\n\ttransformedNormal = - transformedNormal;\n#endif\n#ifdef USE_TANGENT\n\tvec3 transformedTangent = ( modelViewMatrix * vec4( objectTangent, 0.0 ) ).xyz;\n\t#ifdef FLIP_SIDED\n\t\ttransformedTangent = - transformedTangent;\n\t#endif\n#endif",displacementmap_pars_vertex:"#ifdef USE_DISPLACEMENTMAP\n\tuniform sampler2D displacementMap;\n\tuniform float displacementScale;\n\tuniform float displacementBias;\n#endif",displacementmap_vertex:"#ifdef USE_DISPLACEMENTMAP\n\ttransformed += normalize( objectNormal ) * ( texture2D( displacementMap, vUv ).x * displacementScale + displacementBias );\n#endif",emissivemap_fragment:"#ifdef USE_EMISSIVEMAP\n\tvec4 emissiveColor = texture2D( emissiveMap, vUv );\n\ttotalEmissiveRadiance *= emissiveColor.rgb;\n#endif",emissivemap_pars_fragment:"#ifdef USE_EMISSIVEMAP\n\tuniform sampler2D emissiveMap;\n#endif",encodings_fragment:"gl_FragColor = linearToOutputTexel( gl_FragColor );",encodings_pars_fragment:"vec4 LinearToLinear( in vec4 value ) {\n\treturn value;\n}\nvec4 LinearTosRGB( in vec4 value ) {\n\treturn vec4( mix( pow( value.rgb, vec3( 0.41666 ) ) * 1.055 - vec3( 0.055 ), value.rgb * 12.92, vec3( lessThanEqual( value.rgb, vec3( 0.0031308 ) ) ) ), value.a );\n}",envmap_fragment:"#ifdef USE_ENVMAP\n\t#ifdef ENV_WORLDPOS\n\t\tvec3 cameraToFrag;\n\t\tif ( isOrthographic ) {\n\t\t\tcameraToFrag = normalize( vec3( - viewMatrix[ 0 ][ 2 ], - viewMatrix[ 1 ][ 2 ], - viewMatrix[ 2 ][ 2 ] ) );\n\t\t} else {\n\t\t\tcameraToFrag = normalize( vWorldPosition - cameraPosition );\n\t\t}\n\t\tvec3 worldNormal = inverseTransformDirection( normal, viewMatrix );\n\t\t#ifdef ENVMAP_MODE_REFLECTION\n\t\t\tvec3 reflectVec = reflect( cameraToFrag, worldNormal );\n\t\t#else\n\t\t\tvec3 reflectVec = refract( cameraToFrag, worldNormal, refractionRatio );\n\t\t#endif\n\t#else\n\t\tvec3 reflectVec = vReflect;\n\t#endif\n\t#ifdef ENVMAP_TYPE_CUBE\n\t\tvec4 envColor = textureCube( envMap, vec3( flipEnvMap * reflectVec.x, reflectVec.yz ) );\n\t#else\n\t\tvec4 envColor = vec4( 0.0 );\n\t#endif\n\t#ifdef ENVMAP_BLENDING_MULTIPLY\n\t\toutgoingLight = mix( outgoingLight, outgoingLight * envColor.xyz, specularStrength * reflectivity );\n\t#elif defined( ENVMAP_BLENDING_MIX )\n\t\toutgoingLight = mix( outgoingLight, envColor.xyz, specularStrength * reflectivity );\n\t#elif defined( ENVMAP_BLENDING_ADD )\n\t\toutgoingLight += envColor.xyz * specularStrength * reflectivity;\n\t#endif\n#endif",envmap_common_pars_fragment:"#ifdef USE_ENVMAP\n\tuniform float envMapIntensity;\n\tuniform float flipEnvMap;\n\t#ifdef ENVMAP_TYPE_CUBE\n\t\tuniform samplerCube envMap;\n\t#else\n\t\tuniform sampler2D envMap;\n\t#endif\n\t\n#endif",envmap_pars_fragment:"#ifdef USE_ENVMAP\n\tuniform float reflectivity;\n\t#if defined( USE_BUMPMAP ) || defined( USE_NORMALMAP ) || defined( PHONG ) || defined( LAMBERT )\n\t\t#define ENV_WORLDPOS\n\t#endif\n\t#ifdef ENV_WORLDPOS\n\t\tvarying vec3 vWorldPosition;\n\t\tuniform float refractionRatio;\n\t#else\n\t\tvarying vec3 vReflect;\n\t#endif\n#endif",envmap_pars_vertex:"#ifdef USE_ENVMAP\n\t#if defined( USE_BUMPMAP ) || defined( USE_NORMALMAP ) || defined( PHONG ) || defined( LAMBERT )\n\t\t#define ENV_WORLDPOS\n\t#endif\n\t#ifdef ENV_WORLDPOS\n\t\t\n\t\tvarying vec3 vWorldPosition;\n\t#else\n\t\tvarying vec3 vReflect;\n\t\tuniform float refractionRatio;\n\t#endif\n#endif",envmap_physical_pars_fragment:"#if defined( USE_ENVMAP )\n\tvec3 getIBLIrradiance( const in vec3 normal ) {\n\t\t#if defined( ENVMAP_TYPE_CUBE_UV )\n\t\t\tvec3 worldNormal = inverseTransformDirection( normal, viewMatrix );\n\t\t\tvec4 envMapColor = textureCubeUV( envMap, worldNormal, 1.0 );\n\t\t\treturn PI * envMapColor.rgb * envMapIntensity;\n\t\t#else\n\t\t\treturn vec3( 0.0 );\n\t\t#endif\n\t}\n\tvec3 getIBLRadiance( const in vec3 viewDir, const in vec3 normal, const in float roughness ) {\n\t\t#if defined( ENVMAP_TYPE_CUBE_UV )\n\t\t\tvec3 reflectVec = reflect( - viewDir, normal );\n\t\t\treflectVec = normalize( mix( reflectVec, normal, roughness * roughness) );\n\t\t\treflectVec = inverseTransformDirection( reflectVec, viewMatrix );\n\t\t\tvec4 envMapColor = textureCubeUV( envMap, reflectVec, roughness );\n\t\t\treturn envMapColor.rgb * envMapIntensity;\n\t\t#else\n\t\t\treturn vec3( 0.0 );\n\t\t#endif\n\t}\n#endif",envmap_vertex:"#ifdef USE_ENVMAP\n\t#ifdef ENV_WORLDPOS\n\t\tvWorldPosition = worldPosition.xyz;\n\t#else\n\t\tvec3 cameraToVertex;\n\t\tif ( isOrthographic ) {\n\t\t\tcameraToVertex = normalize( vec3( - viewMatrix[ 0 ][ 2 ], - viewMatrix[ 1 ][ 2 ], - viewMatrix[ 2 ][ 2 ] ) );\n\t\t} else {\n\t\t\tcameraToVertex = normalize( worldPosition.xyz - cameraPosition );\n\t\t}\n\t\tvec3 worldNormal = inverseTransformDirection( transformedNormal, viewMatrix );\n\t\t#ifdef ENVMAP_MODE_REFLECTION\n\t\t\tvReflect = reflect( cameraToVertex, worldNormal );\n\t\t#else\n\t\t\tvReflect = refract( cameraToVertex, worldNormal, refractionRatio );\n\t\t#endif\n\t#endif\n#endif",fog_vertex:"#ifdef USE_FOG\n\tvFogDepth = - mvPosition.z;\n#endif",fog_pars_vertex:"#ifdef USE_FOG\n\tvarying float vFogDepth;\n#endif",fog_fragment:"#ifdef USE_FOG\n\t#ifdef FOG_EXP2\n\t\tfloat fogFactor = 1.0 - exp( - fogDensity * fogDensity * vFogDepth * vFogDepth );\n\t#else\n\t\tfloat fogFactor = smoothstep( fogNear, fogFar, vFogDepth );\n\t#endif\n\tgl_FragColor.rgb = mix( gl_FragColor.rgb, fogColor, fogFactor );\n#endif",fog_pars_fragment:"#ifdef USE_FOG\n\tuniform vec3 fogColor;\n\tvarying float vFogDepth;\n\t#ifdef FOG_EXP2\n\t\tuniform float fogDensity;\n\t#else\n\t\tuniform float fogNear;\n\t\tuniform float fogFar;\n\t#endif\n#endif",gradientmap_pars_fragment:"#ifdef USE_GRADIENTMAP\n\tuniform sampler2D gradientMap;\n#endif\nvec3 getGradientIrradiance( vec3 normal, vec3 lightDirection ) {\n\tfloat dotNL = dot( normal, lightDirection );\n\tvec2 coord = vec2( dotNL * 0.5 + 0.5, 0.0 );\n\t#ifdef USE_GRADIENTMAP\n\t\treturn vec3( texture2D( gradientMap, coord ).r );\n\t#else\n\t\tvec2 fw = fwidth( coord ) * 0.5;\n\t\treturn mix( vec3( 0.7 ), vec3( 1.0 ), smoothstep( 0.7 - fw.x, 0.7 + fw.x, coord.x ) );\n\t#endif\n}",lightmap_fragment:"#ifdef USE_LIGHTMAP\n\tvec4 lightMapTexel = texture2D( lightMap, vUv2 );\n\tvec3 lightMapIrradiance = lightMapTexel.rgb * lightMapIntensity;\n\treflectedLight.indirectDiffuse += lightMapIrradiance;\n#endif",lightmap_pars_fragment:"#ifdef USE_LIGHTMAP\n\tuniform sampler2D lightMap;\n\tuniform float lightMapIntensity;\n#endif",lights_lambert_fragment:"LambertMaterial material;\nmaterial.diffuseColor = diffuseColor.rgb;\nmaterial.specularStrength = specularStrength;",lights_lambert_pars_fragment:"varying vec3 vViewPosition;\nstruct LambertMaterial {\n\tvec3 diffuseColor;\n\tfloat specularStrength;\n};\nvoid RE_Direct_Lambert( const in IncidentLight directLight, const in GeometricContext geometry, const in LambertMaterial material, inout ReflectedLight reflectedLight ) {\n\tfloat dotNL = saturate( dot( geometry.normal, directLight.direction ) );\n\tvec3 irradiance = dotNL * directLight.color;\n\treflectedLight.directDiffuse += irradiance * BRDF_Lambert( material.diffuseColor );\n}\nvoid RE_IndirectDiffuse_Lambert( const in vec3 irradiance, const in GeometricContext geometry, const in LambertMaterial material, inout ReflectedLight reflectedLight ) {\n\treflectedLight.indirectDiffuse += irradiance * BRDF_Lambert( material.diffuseColor );\n}\n#define RE_Direct\t\t\t\tRE_Direct_Lambert\n#define RE_IndirectDiffuse\t\tRE_IndirectDiffuse_Lambert",lights_pars_begin:"uniform bool receiveShadow;\nuniform vec3 ambientLightColor;\nuniform vec3 lightProbe[ 9 ];\nvec3 shGetIrradianceAt( in vec3 normal, in vec3 shCoefficients[ 9 ] ) {\n\tfloat x = normal.x, y = normal.y, z = normal.z;\n\tvec3 result = shCoefficients[ 0 ] * 0.886227;\n\tresult += shCoefficients[ 1 ] * 2.0 * 0.511664 * y;\n\tresult += shCoefficients[ 2 ] * 2.0 * 0.511664 * z;\n\tresult += shCoefficients[ 3 ] * 2.0 * 0.511664 * x;\n\tresult += shCoefficients[ 4 ] * 2.0 * 0.429043 * x * y;\n\tresult += shCoefficients[ 5 ] * 2.0 * 0.429043 * y * z;\n\tresult += shCoefficients[ 6 ] * ( 0.743125 * z * z - 0.247708 );\n\tresult += shCoefficients[ 7 ] * 2.0 * 0.429043 * x * z;\n\tresult += shCoefficients[ 8 ] * 0.429043 * ( x * x - y * y );\n\treturn result;\n}\nvec3 getLightProbeIrradiance( const in vec3 lightProbe[ 9 ], const in vec3 normal ) {\n\tvec3 worldNormal = inverseTransformDirection( normal, viewMatrix );\n\tvec3 irradiance = shGetIrradianceAt( worldNormal, lightProbe );\n\treturn irradiance;\n}\nvec3 getAmbientLightIrradiance( const in vec3 ambientLightColor ) {\n\tvec3 irradiance = ambientLightColor;\n\treturn irradiance;\n}\nfloat getDistanceAttenuation( const in float lightDistance, const in float cutoffDistance, const in float decayExponent ) {\n\t#if defined ( LEGACY_LIGHTS )\n\t\tif ( cutoffDistance > 0.0 && decayExponent > 0.0 ) {\n\t\t\treturn pow( saturate( - lightDistance / cutoffDistance + 1.0 ), decayExponent );\n\t\t}\n\t\treturn 1.0;\n\t#else\n\t\tfloat distanceFalloff = 1.0 / max( pow( lightDistance, decayExponent ), 0.01 );\n\t\tif ( cutoffDistance > 0.0 ) {\n\t\t\tdistanceFalloff *= pow2( saturate( 1.0 - pow4( lightDistance / cutoffDistance ) ) );\n\t\t}\n\t\treturn distanceFalloff;\n\t#endif\n}\nfloat getSpotAttenuation( const in float coneCosine, const in float penumbraCosine, const in float angleCosine ) {\n\treturn smoothstep( coneCosine, penumbraCosine, angleCosine );\n}\n#if NUM_DIR_LIGHTS > 0\n\tstruct DirectionalLight {\n\t\tvec3 direction;\n\t\tvec3 color;\n\t};\n\tuniform DirectionalLight directionalLights[ NUM_DIR_LIGHTS ];\n\tvoid getDirectionalLightInfo( const in DirectionalLight directionalLight, const in GeometricContext geometry, out IncidentLight light ) {\n\t\tlight.color = directionalLight.color;\n\t\tlight.direction = directionalLight.direction;\n\t\tlight.visible = true;\n\t}\n#endif\n#if NUM_POINT_LIGHTS > 0\n\tstruct PointLight {\n\t\tvec3 position;\n\t\tvec3 color;\n\t\tfloat distance;\n\t\tfloat decay;\n\t};\n\tuniform PointLight pointLights[ NUM_POINT_LIGHTS ];\n\tvoid getPointLightInfo( const in PointLight pointLight, const in GeometricContext geometry, out IncidentLight light ) {\n\t\tvec3 lVector = pointLight.position - geometry.position;\n\t\tlight.direction = normalize( lVector );\n\t\tfloat lightDistance = length( lVector );\n\t\tlight.color = pointLight.color;\n\t\tlight.color *= getDistanceAttenuation( lightDistance, pointLight.distance, pointLight.decay );\n\t\tlight.visible = ( light.color != vec3( 0.0 ) );\n\t}\n#endif\n#if NUM_SPOT_LIGHTS > 0\n\tstruct SpotLight {\n\t\tvec3 position;\n\t\tvec3 direction;\n\t\tvec3 color;\n\t\tfloat distance;\n\t\tfloat decay;\n\t\tfloat coneCos;\n\t\tfloat penumbraCos;\n\t};\n\tuniform SpotLight spotLights[ NUM_SPOT_LIGHTS ];\n\tvoid getSpotLightInfo( const in SpotLight spotLight, const in GeometricContext geometry, out IncidentLight light ) {\n\t\tvec3 lVector = spotLight.position - geometry.position;\n\t\tlight.direction = normalize( lVector );\n\t\tfloat angleCos = dot( light.direction, spotLight.direction );\n\t\tfloat spotAttenuation = getSpotAttenuation( spotLight.coneCos, spotLight.penumbraCos, angleCos );\n\t\tif ( spotAttenuation > 0.0 ) {\n\t\t\tfloat lightDistance = length( lVector );\n\t\t\tlight.color = spotLight.color * spotAttenuation;\n\t\t\tlight.color *= getDistanceAttenuation( lightDistance, spotLight.distance, spotLight.decay );\n\t\t\tlight.visible = ( light.color != vec3( 0.0 ) );\n\t\t} else {\n\t\t\tlight.color = vec3( 0.0 );\n\t\t\tlight.visible = false;\n\t\t}\n\t}\n#endif\n#if NUM_RECT_AREA_LIGHTS > 0\n\tstruct RectAreaLight {\n\t\tvec3 color;\n\t\tvec3 position;\n\t\tvec3 halfWidth;\n\t\tvec3 halfHeight;\n\t};\n\tuniform sampler2D ltc_1;\tuniform sampler2D ltc_2;\n\tuniform RectAreaLight rectAreaLights[ NUM_RECT_AREA_LIGHTS ];\n#endif\n#if NUM_HEMI_LIGHTS > 0\n\tstruct HemisphereLight {\n\t\tvec3 direction;\n\t\tvec3 skyColor;\n\t\tvec3 groundColor;\n\t};\n\tuniform HemisphereLight hemisphereLights[ NUM_HEMI_LIGHTS ];\n\tvec3 getHemisphereLightIrradiance( const in HemisphereLight hemiLight, const in vec3 normal ) {\n\t\tfloat dotNL = dot( normal, hemiLight.direction );\n\t\tfloat hemiDiffuseWeight = 0.5 * dotNL + 0.5;\n\t\tvec3 irradiance = mix( hemiLight.groundColor, hemiLight.skyColor, hemiDiffuseWeight );\n\t\treturn irradiance;\n\t}\n#endif",lights_toon_fragment:"ToonMaterial material;\nmaterial.diffuseColor = diffuseColor.rgb;",lights_toon_pars_fragment:"varying vec3 vViewPosition;\nstruct ToonMaterial {\n\tvec3 diffuseColor;\n};\nvoid RE_Direct_Toon( const in IncidentLight directLight, const in GeometricContext geometry, const in ToonMaterial material, inout ReflectedLight reflectedLight ) {\n\tvec3 irradiance = getGradientIrradiance( geometry.normal, directLight.direction ) * directLight.color;\n\treflectedLight.directDiffuse += irradiance * BRDF_Lambert( material.diffuseColor );\n}\nvoid RE_IndirectDiffuse_Toon( const in vec3 irradiance, const in GeometricContext geometry, const in ToonMaterial material, inout ReflectedLight reflectedLight ) {\n\treflectedLight.indirectDiffuse += irradiance * BRDF_Lambert( material.diffuseColor );\n}\n#define RE_Direct\t\t\t\tRE_Direct_Toon\n#define RE_IndirectDiffuse\t\tRE_IndirectDiffuse_Toon",lights_phong_fragment:"BlinnPhongMaterial material;\nmaterial.diffuseColor = diffuseColor.rgb;\nmaterial.specularColor = specular;\nmaterial.specularShininess = shininess;\nmaterial.specularStrength = specularStrength;",lights_phong_pars_fragment:"varying vec3 vViewPosition;\nstruct BlinnPhongMaterial {\n\tvec3 diffuseColor;\n\tvec3 specularColor;\n\tfloat specularShininess;\n\tfloat specularStrength;\n};\nvoid RE_Direct_BlinnPhong( const in IncidentLight directLight, const in GeometricContext geometry, const in BlinnPhongMaterial material, inout ReflectedLight reflectedLight ) {\n\tfloat dotNL = saturate( dot( geometry.normal, directLight.direction ) );\n\tvec3 irradiance = dotNL * directLight.color;\n\treflectedLight.directDiffuse += irradiance * BRDF_Lambert( material.diffuseColor );\n\treflectedLight.directSpecular += irradiance * BRDF_BlinnPhong( directLight.direction, geometry.viewDir, geometry.normal, material.specularColor, material.specularShininess ) * material.specularStrength;\n}\nvoid RE_IndirectDiffuse_BlinnPhong( const in vec3 irradiance, const in GeometricContext geometry, const in BlinnPhongMaterial material, inout ReflectedLight reflectedLight ) {\n\treflectedLight.indirectDiffuse += irradiance * BRDF_Lambert( material.diffuseColor );\n}\n#define RE_Direct\t\t\t\tRE_Direct_BlinnPhong\n#define RE_IndirectDiffuse\t\tRE_IndirectDiffuse_BlinnPhong",lights_physical_fragment:"PhysicalMaterial material;\nmaterial.diffuseColor = diffuseColor.rgb * ( 1.0 - metalnessFactor );\nvec3 dxy = max( abs( dFdx( geometryNormal ) ), abs( dFdy( geometryNormal ) ) );\nfloat geometryRoughness = max( max( dxy.x, dxy.y ), dxy.z );\nmaterial.roughness = max( roughnessFactor, 0.0525 );material.roughness += geometryRoughness;\nmaterial.roughness = min( material.roughness, 1.0 );\n#ifdef IOR\n\tmaterial.ior = ior;\n\t#ifdef SPECULAR\n\t\tfloat specularIntensityFactor = specularIntensity;\n\t\tvec3 specularColorFactor = specularColor;\n\t\t#ifdef USE_SPECULARINTENSITYMAP\n\t\t\tspecularIntensityFactor *= texture2D( specularIntensityMap, vUv ).a;\n\t\t#endif\n\t\t#ifdef USE_SPECULARCOLORMAP\n\t\t\tspecularColorFactor *= texture2D( specularColorMap, vUv ).rgb;\n\t\t#endif\n\t\tmaterial.specularF90 = mix( specularIntensityFactor, 1.0, metalnessFactor );\n\t#else\n\t\tfloat specularIntensityFactor = 1.0;\n\t\tvec3 specularColorFactor = vec3( 1.0 );\n\t\tmaterial.specularF90 = 1.0;\n\t#endif\n\tmaterial.specularColor = mix( min( pow2( ( material.ior - 1.0 ) / ( material.ior + 1.0 ) ) * specularColorFactor, vec3( 1.0 ) ) * specularIntensityFactor, diffuseColor.rgb, metalnessFactor );\n#else\n\tmaterial.specularColor = mix( vec3( 0.04 ), diffuseColor.rgb, metalnessFactor );\n\tmaterial.specularF90 = 1.0;\n#endif\n#ifdef USE_CLEARCOAT\n\tmaterial.clearcoat = clearcoat;\n\tmaterial.clearcoatRoughness = clearcoatRoughness;\n\tmaterial.clearcoatF0 = vec3( 0.04 );\n\tmaterial.clearcoatF90 = 1.0;\n\t#ifdef USE_CLEARCOATMAP\n\t\tmaterial.clearcoat *= texture2D( clearcoatMap, vUv ).x;\n\t#endif\n\t#ifdef USE_CLEARCOAT_ROUGHNESSMAP\n\t\tmaterial.clearcoatRoughness *= texture2D( clearcoatRoughnessMap, vUv ).y;\n\t#endif\n\tmaterial.clearcoat = saturate( material.clearcoat );\tmaterial.clearcoatRoughness = max( material.clearcoatRoughness, 0.0525 );\n\tmaterial.clearcoatRoughness += geometryRoughness;\n\tmaterial.clearcoatRoughness = min( material.clearcoatRoughness, 1.0 );\n#endif\n#ifdef USE_IRIDESCENCE\n\tmaterial.iridescence = iridescence;\n\tmaterial.iridescenceIOR = iridescenceIOR;\n\t#ifdef USE_IRIDESCENCEMAP\n\t\tmaterial.iridescence *= texture2D( iridescenceMap, vUv ).r;\n\t#endif\n\t#ifdef USE_IRIDESCENCE_THICKNESSMAP\n\t\tmaterial.iridescenceThickness = (iridescenceThicknessMaximum - iridescenceThicknessMinimum) * texture2D( iridescenceThicknessMap, vUv ).g + iridescenceThicknessMinimum;\n\t#else\n\t\tmaterial.iridescenceThickness = iridescenceThicknessMaximum;\n\t#endif\n#endif\n#ifdef USE_SHEEN\n\tmaterial.sheenColor = sheenColor;\n\t#ifdef USE_SHEENCOLORMAP\n\t\tmaterial.sheenColor *= texture2D( sheenColorMap, vUv ).rgb;\n\t#endif\n\tmaterial.sheenRoughness = clamp( sheenRoughness, 0.07, 1.0 );\n\t#ifdef USE_SHEENROUGHNESSMAP\n\t\tmaterial.sheenRoughness *= texture2D( sheenRoughnessMap, vUv ).a;\n\t#endif\n#endif",lights_physical_pars_fragment:"struct PhysicalMaterial {\n\tvec3 diffuseColor;\n\tfloat roughness;\n\tvec3 specularColor;\n\tfloat specularF90;\n\t#ifdef USE_CLEARCOAT\n\t\tfloat clearcoat;\n\t\tfloat clearcoatRoughness;\n\t\tvec3 clearcoatF0;\n\t\tfloat clearcoatF90;\n\t#endif\n\t#ifdef USE_IRIDESCENCE\n\t\tfloat iridescence;\n\t\tfloat iridescenceIOR;\n\t\tfloat iridescenceThickness;\n\t\tvec3 iridescenceFresnel;\n\t\tvec3 iridescenceF0;\n\t#endif\n\t#ifdef USE_SHEEN\n\t\tvec3 sheenColor;\n\t\tfloat sheenRoughness;\n\t#endif\n\t#ifdef IOR\n\t\tfloat ior;\n\t#endif\n\t#ifdef USE_TRANSMISSION\n\t\tfloat transmission;\n\t\tfloat transmissionAlpha;\n\t\tfloat thickness;\n\t\tfloat attenuationDistance;\n\t\tvec3 attenuationColor;\n\t#endif\n};\nvec3 clearcoatSpecular = vec3( 0.0 );\nvec3 sheenSpecular = vec3( 0.0 );\nfloat IBLSheenBRDF( const in vec3 normal, const in vec3 viewDir, const in float roughness ) {\n\tfloat dotNV = saturate( dot( normal, viewDir ) );\n\tfloat r2 = roughness * roughness;\n\tfloat a = roughness < 0.25 ? -339.2 * r2 + 161.4 * roughness - 25.9 : -8.48 * r2 + 14.3 * roughness - 9.95;\n\tfloat b = roughness < 0.25 ? 44.0 * r2 - 23.7 * roughness + 3.26 : 1.97 * r2 - 3.27 * roughness + 0.72;\n\tfloat DG = exp( a * dotNV + b ) + ( roughness < 0.25 ? 0.0 : 0.1 * ( roughness - 0.25 ) );\n\treturn saturate( DG * RECIPROCAL_PI );\n}\nvec2 DFGApprox( const in vec3 normal, const in vec3 viewDir, const in float roughness ) {\n\tfloat dotNV = saturate( dot( normal, viewDir ) );\n\tconst vec4 c0 = vec4( - 1, - 0.0275, - 0.572, 0.022 );\n\tconst vec4 c1 = vec4( 1, 0.0425, 1.04, - 0.04 );\n\tvec4 r = roughness * c0 + c1;\n\tfloat a004 = min( r.x * r.x, exp2( - 9.28 * dotNV ) ) * r.x + r.y;\n\tvec2 fab = vec2( - 1.04, 1.04 ) * a004 + r.zw;\n\treturn fab;\n}\nvec3 EnvironmentBRDF( const in vec3 normal, const in vec3 viewDir, const in vec3 specularColor, const in float specularF90, const in float roughness ) {\n\tvec2 fab = DFGApprox( normal, viewDir, roughness );\n\treturn specularColor * fab.x + specularF90 * fab.y;\n}\n#ifdef USE_IRIDESCENCE\nvoid computeMultiscatteringIridescence( const in vec3 normal, const in vec3 viewDir, const in vec3 specularColor, const in float specularF90, const in float iridescence, const in vec3 iridescenceF0, const in float roughness, inout vec3 singleScatter, inout vec3 multiScatter ) {\n#else\nvoid computeMultiscattering( const in vec3 normal, const in vec3 viewDir, const in vec3 specularColor, const in float specularF90, const in float roughness, inout vec3 singleScatter, inout vec3 multiScatter ) {\n#endif\n\tvec2 fab = DFGApprox( normal, viewDir, roughness );\n\t#ifdef USE_IRIDESCENCE\n\t\tvec3 Fr = mix( specularColor, iridescenceF0, iridescence );\n\t#else\n\t\tvec3 Fr = specularColor;\n\t#endif\n\tvec3 FssEss = Fr * fab.x + specularF90 * fab.y;\n\tfloat Ess = fab.x + fab.y;\n\tfloat Ems = 1.0 - Ess;\n\tvec3 Favg = Fr + ( 1.0 - Fr ) * 0.047619;\tvec3 Fms = FssEss * Favg / ( 1.0 - Ems * Favg );\n\tsingleScatter += FssEss;\n\tmultiScatter += Fms * Ems;\n}\n#if NUM_RECT_AREA_LIGHTS > 0\n\tvoid RE_Direct_RectArea_Physical( const in RectAreaLight rectAreaLight, const in GeometricContext geometry, const in PhysicalMaterial material, inout ReflectedLight reflectedLight ) {\n\t\tvec3 normal = geometry.normal;\n\t\tvec3 viewDir = geometry.viewDir;\n\t\tvec3 position = geometry.position;\n\t\tvec3 lightPos = rectAreaLight.position;\n\t\tvec3 halfWidth = rectAreaLight.halfWidth;\n\t\tvec3 halfHeight = rectAreaLight.halfHeight;\n\t\tvec3 lightColor = rectAreaLight.color;\n\t\tfloat roughness = material.roughness;\n\t\tvec3 rectCoords[ 4 ];\n\t\trectCoords[ 0 ] = lightPos + halfWidth - halfHeight;\t\trectCoords[ 1 ] = lightPos - halfWidth - halfHeight;\n\t\trectCoords[ 2 ] = lightPos - halfWidth + halfHeight;\n\t\trectCoords[ 3 ] = lightPos + halfWidth + halfHeight;\n\t\tvec2 uv = LTC_Uv( normal, viewDir, roughness );\n\t\tvec4 t1 = texture2D( ltc_1, uv );\n\t\tvec4 t2 = texture2D( ltc_2, uv );\n\t\tmat3 mInv = mat3(\n\t\t\tvec3( t1.x, 0, t1.y ),\n\t\t\tvec3( 0, 1, 0 ),\n\t\t\tvec3( t1.z, 0, t1.w )\n\t\t);\n\t\tvec3 fresnel = ( material.specularColor * t2.x + ( vec3( 1.0 ) - material.specularColor ) * t2.y );\n\t\treflectedLight.directSpecular += lightColor * fresnel * LTC_Evaluate( normal, viewDir, position, mInv, rectCoords );\n\t\treflectedLight.directDiffuse += lightColor * material.diffuseColor * LTC_Evaluate( normal, viewDir, position, mat3( 1.0 ), rectCoords );\n\t}\n#endif\nvoid RE_Direct_Physical( const in IncidentLight directLight, const in GeometricContext geometry, const in PhysicalMaterial material, inout ReflectedLight reflectedLight ) {\n\tfloat dotNL = saturate( dot( geometry.normal, directLight.direction ) );\n\tvec3 irradiance = dotNL * directLight.color;\n\t#ifdef USE_CLEARCOAT\n\t\tfloat dotNLcc = saturate( dot( geometry.clearcoatNormal, directLight.direction ) );\n\t\tvec3 ccIrradiance = dotNLcc * directLight.color;\n\t\tclearcoatSpecular += ccIrradiance * BRDF_GGX( directLight.direction, geometry.viewDir, geometry.clearcoatNormal, material.clearcoatF0, material.clearcoatF90, material.clearcoatRoughness );\n\t#endif\n\t#ifdef USE_SHEEN\n\t\tsheenSpecular += irradiance * BRDF_Sheen( directLight.direction, geometry.viewDir, geometry.normal, material.sheenColor, material.sheenRoughness );\n\t#endif\n\t#ifdef USE_IRIDESCENCE\n\t\treflectedLight.directSpecular += irradiance * BRDF_GGX_Iridescence( directLight.direction, geometry.viewDir, geometry.normal, material.specularColor, material.specularF90, material.iridescence, material.iridescenceFresnel, material.roughness );\n\t#else\n\t\treflectedLight.directSpecular += irradiance * BRDF_GGX( directLight.direction, geometry.viewDir, geometry.normal, material.specularColor, material.specularF90, material.roughness );\n\t#endif\n\treflectedLight.directDiffuse += irradiance * BRDF_Lambert( material.diffuseColor );\n}\nvoid RE_IndirectDiffuse_Physical( const in vec3 irradiance, const in GeometricContext geometry, const in PhysicalMaterial material, inout ReflectedLight reflectedLight ) {\n\treflectedLight.indirectDiffuse += irradiance * BRDF_Lambert( material.diffuseColor );\n}\nvoid RE_IndirectSpecular_Physical( const in vec3 radiance, const in vec3 irradiance, const in vec3 clearcoatRadiance, const in GeometricContext geometry, const in PhysicalMaterial material, inout ReflectedLight reflectedLight) {\n\t#ifdef USE_CLEARCOAT\n\t\tclearcoatSpecular += clearcoatRadiance * EnvironmentBRDF( geometry.clearcoatNormal, geometry.viewDir, material.clearcoatF0, material.clearcoatF90, material.clearcoatRoughness );\n\t#endif\n\t#ifdef USE_SHEEN\n\t\tsheenSpecular += irradiance * material.sheenColor * IBLSheenBRDF( geometry.normal, geometry.viewDir, material.sheenRoughness );\n\t#endif\n\tvec3 singleScattering = vec3( 0.0 );\n\tvec3 multiScattering = vec3( 0.0 );\n\tvec3 cosineWeightedIrradiance = irradiance * RECIPROCAL_PI;\n\t#ifdef USE_IRIDESCENCE\n\t\tcomputeMultiscatteringIridescence( geometry.normal, geometry.viewDir, material.specularColor, material.specularF90, material.iridescence, material.iridescenceFresnel, material.roughness, singleScattering, multiScattering );\n\t#else\n\t\tcomputeMultiscattering( geometry.normal, geometry.viewDir, material.specularColor, material.specularF90, material.roughness, singleScattering, multiScattering );\n\t#endif\n\tvec3 totalScattering = singleScattering + multiScattering;\n\tvec3 diffuse = material.diffuseColor * ( 1.0 - max( max( totalScattering.r, totalScattering.g ), totalScattering.b ) );\n\treflectedLight.indirectSpecular += radiance * singleScattering;\n\treflectedLight.indirectSpecular += multiScattering * cosineWeightedIrradiance;\n\treflectedLight.indirectDiffuse += diffuse * cosineWeightedIrradiance;\n}\n#define RE_Direct\t\t\t\tRE_Direct_Physical\n#define RE_Direct_RectArea\t\tRE_Direct_RectArea_Physical\n#define RE_IndirectDiffuse\t\tRE_IndirectDiffuse_Physical\n#define RE_IndirectSpecular\t\tRE_IndirectSpecular_Physical\nfloat computeSpecularOcclusion( const in float dotNV, const in float ambientOcclusion, const in float roughness ) {\n\treturn saturate( pow( dotNV + ambientOcclusion, exp2( - 16.0 * roughness - 1.0 ) ) - 1.0 + ambientOcclusion );\n}",lights_fragment_begin:"\nGeometricContext geometry;\ngeometry.position = - vViewPosition;\ngeometry.normal = normal;\ngeometry.viewDir = ( isOrthographic ) ? vec3( 0, 0, 1 ) : normalize( vViewPosition );\n#ifdef USE_CLEARCOAT\n\tgeometry.clearcoatNormal = clearcoatNormal;\n#endif\n#ifdef USE_IRIDESCENCE\n\tfloat dotNVi = saturate( dot( normal, geometry.viewDir ) );\n\tif ( material.iridescenceThickness == 0.0 ) {\n\t\tmaterial.iridescence = 0.0;\n\t} else {\n\t\tmaterial.iridescence = saturate( material.iridescence );\n\t}\n\tif ( material.iridescence > 0.0 ) {\n\t\tmaterial.iridescenceFresnel = evalIridescence( 1.0, material.iridescenceIOR, dotNVi, material.iridescenceThickness, material.specularColor );\n\t\tmaterial.iridescenceF0 = Schlick_to_F0( material.iridescenceFresnel, 1.0, dotNVi );\n\t}\n#endif\nIncidentLight directLight;\n#if ( NUM_POINT_LIGHTS > 0 ) && defined( RE_Direct )\n\tPointLight pointLight;\n\t#if defined( USE_SHADOWMAP ) && NUM_POINT_LIGHT_SHADOWS > 0\n\tPointLightShadow pointLightShadow;\n\t#endif\n\t#pragma unroll_loop_start\n\tfor ( int i = 0; i < NUM_POINT_LIGHTS; i ++ ) {\n\t\tpointLight = pointLights[ i ];\n\t\tgetPointLightInfo( pointLight, geometry, directLight );\n\t\t#if defined( USE_SHADOWMAP ) && ( UNROLLED_LOOP_INDEX < NUM_POINT_LIGHT_SHADOWS )\n\t\tpointLightShadow = pointLightShadows[ i ];\n\t\tdirectLight.color *= ( directLight.visible && receiveShadow ) ? getPointShadow( pointShadowMap[ i ], pointLightShadow.shadowMapSize, pointLightShadow.shadowBias, pointLightShadow.shadowRadius, vPointShadowCoord[ i ], pointLightShadow.shadowCameraNear, pointLightShadow.shadowCameraFar ) : 1.0;\n\t\t#endif\n\t\tRE_Direct( directLight, geometry, material, reflectedLight );\n\t}\n\t#pragma unroll_loop_end\n#endif\n#if ( NUM_SPOT_LIGHTS > 0 ) && defined( RE_Direct )\n\tSpotLight spotLight;\n\tvec4 spotColor;\n\tvec3 spotLightCoord;\n\tbool inSpotLightMap;\n\t#if defined( USE_SHADOWMAP ) && NUM_SPOT_LIGHT_SHADOWS > 0\n\tSpotLightShadow spotLightShadow;\n\t#endif\n\t#pragma unroll_loop_start\n\tfor ( int i = 0; i < NUM_SPOT_LIGHTS; i ++ ) {\n\t\tspotLight = spotLights[ i ];\n\t\tgetSpotLightInfo( spotLight, geometry, directLight );\n\t\t#if ( UNROLLED_LOOP_INDEX < NUM_SPOT_LIGHT_SHADOWS_WITH_MAPS )\n\t\t#define SPOT_LIGHT_MAP_INDEX UNROLLED_LOOP_INDEX\n\t\t#elif ( UNROLLED_LOOP_INDEX < NUM_SPOT_LIGHT_SHADOWS )\n\t\t#define SPOT_LIGHT_MAP_INDEX NUM_SPOT_LIGHT_MAPS\n\t\t#else\n\t\t#define SPOT_LIGHT_MAP_INDEX ( UNROLLED_LOOP_INDEX - NUM_SPOT_LIGHT_SHADOWS + NUM_SPOT_LIGHT_SHADOWS_WITH_MAPS )\n\t\t#endif\n\t\t#if ( SPOT_LIGHT_MAP_INDEX < NUM_SPOT_LIGHT_MAPS )\n\t\t\tspotLightCoord = vSpotLightCoord[ i ].xyz / vSpotLightCoord[ i ].w;\n\t\t\tinSpotLightMap = all( lessThan( abs( spotLightCoord * 2. - 1. ), vec3( 1.0 ) ) );\n\t\t\tspotColor = texture2D( spotLightMap[ SPOT_LIGHT_MAP_INDEX ], spotLightCoord.xy );\n\t\t\tdirectLight.color = inSpotLightMap ? directLight.color * spotColor.rgb : directLight.color;\n\t\t#endif\n\t\t#undef SPOT_LIGHT_MAP_INDEX\n\t\t#if defined( USE_SHADOWMAP ) && ( UNROLLED_LOOP_INDEX < NUM_SPOT_LIGHT_SHADOWS )\n\t\tspotLightShadow = spotLightShadows[ i ];\n\t\tdirectLight.color *= ( directLight.visible && receiveShadow ) ? getShadow( spotShadowMap[ i ], spotLightShadow.shadowMapSize, spotLightShadow.shadowBias, spotLightShadow.shadowRadius, vSpotLightCoord[ i ] ) : 1.0;\n\t\t#endif\n\t\tRE_Direct( directLight, geometry, material, reflectedLight );\n\t}\n\t#pragma unroll_loop_end\n#endif\n#if ( NUM_DIR_LIGHTS > 0 ) && defined( RE_Direct )\n\tDirectionalLight directionalLight;\n\t#if defined( USE_SHADOWMAP ) && NUM_DIR_LIGHT_SHADOWS > 0\n\tDirectionalLightShadow directionalLightShadow;\n\t#endif\n\t#pragma unroll_loop_start\n\tfor ( int i = 0; i < NUM_DIR_LIGHTS; i ++ ) {\n\t\tdirectionalLight = directionalLights[ i ];\n\t\tgetDirectionalLightInfo( directionalLight, geometry, directLight );\n\t\t#if defined( USE_SHADOWMAP ) && ( UNROLLED_LOOP_INDEX < NUM_DIR_LIGHT_SHADOWS )\n\t\tdirectionalLightShadow = directionalLightShadows[ i ];\n\t\tdirectLight.color *= ( directLight.visible && receiveShadow ) ? getShadow( directionalShadowMap[ i ], directionalLightShadow.shadowMapSize, directionalLightShadow.shadowBias, directionalLightShadow.shadowRadius, vDirectionalShadowCoord[ i ] ) : 1.0;\n\t\t#endif\n\t\tRE_Direct( directLight, geometry, material, reflectedLight );\n\t}\n\t#pragma unroll_loop_end\n#endif\n#if ( NUM_RECT_AREA_LIGHTS > 0 ) && defined( RE_Direct_RectArea )\n\tRectAreaLight rectAreaLight;\n\t#pragma unroll_loop_start\n\tfor ( int i = 0; i < NUM_RECT_AREA_LIGHTS; i ++ ) {\n\t\trectAreaLight = rectAreaLights[ i ];\n\t\tRE_Direct_RectArea( rectAreaLight, geometry, material, reflectedLight );\n\t}\n\t#pragma unroll_loop_end\n#endif\n#if defined( RE_IndirectDiffuse )\n\tvec3 iblIrradiance = vec3( 0.0 );\n\tvec3 irradiance = getAmbientLightIrradiance( ambientLightColor );\n\tirradiance += getLightProbeIrradiance( lightProbe, geometry.normal );\n\t#if ( NUM_HEMI_LIGHTS > 0 )\n\t\t#pragma unroll_loop_start\n\t\tfor ( int i = 0; i < NUM_HEMI_LIGHTS; i ++ ) {\n\t\t\tirradiance += getHemisphereLightIrradiance( hemisphereLights[ i ], geometry.normal );\n\t\t}\n\t\t#pragma unroll_loop_end\n\t#endif\n#endif\n#if defined( RE_IndirectSpecular )\n\tvec3 radiance = vec3( 0.0 );\n\tvec3 clearcoatRadiance = vec3( 0.0 );\n#endif",lights_fragment_maps:"#if defined( RE_IndirectDiffuse )\n\t#ifdef USE_LIGHTMAP\n\t\tvec4 lightMapTexel = texture2D( lightMap, vUv2 );\n\t\tvec3 lightMapIrradiance = lightMapTexel.rgb * lightMapIntensity;\n\t\tirradiance += lightMapIrradiance;\n\t#endif\n\t#if defined( USE_ENVMAP ) && defined( STANDARD ) && defined( ENVMAP_TYPE_CUBE_UV )\n\t\tiblIrradiance += getIBLIrradiance( geometry.normal );\n\t#endif\n#endif\n#if defined( USE_ENVMAP ) && defined( RE_IndirectSpecular )\n\tradiance += getIBLRadiance( geometry.viewDir, geometry.normal, material.roughness );\n\t#ifdef USE_CLEARCOAT\n\t\tclearcoatRadiance += getIBLRadiance( geometry.viewDir, geometry.clearcoatNormal, material.clearcoatRoughness );\n\t#endif\n#endif",lights_fragment_end:"#if defined( RE_IndirectDiffuse )\n\tRE_IndirectDiffuse( irradiance, geometry, material, reflectedLight );\n#endif\n#if defined( RE_IndirectSpecular )\n\tRE_IndirectSpecular( radiance, iblIrradiance, clearcoatRadiance, geometry, material, reflectedLight );\n#endif",logdepthbuf_fragment:"#if defined( USE_LOGDEPTHBUF ) && defined( USE_LOGDEPTHBUF_EXT )\n\tgl_FragDepthEXT = vIsPerspective == 0.0 ? gl_FragCoord.z : log2( vFragDepth ) * logDepthBufFC * 0.5;\n#endif",logdepthbuf_pars_fragment:"#if defined( USE_LOGDEPTHBUF ) && defined( USE_LOGDEPTHBUF_EXT )\n\tuniform float logDepthBufFC;\n\tvarying float vFragDepth;\n\tvarying float vIsPerspective;\n#endif",logdepthbuf_pars_vertex:"#ifdef USE_LOGDEPTHBUF\n\t#ifdef USE_LOGDEPTHBUF_EXT\n\t\tvarying float vFragDepth;\n\t\tvarying float vIsPerspective;\n\t#else\n\t\tuniform float logDepthBufFC;\n\t#endif\n#endif",logdepthbuf_vertex:"#ifdef USE_LOGDEPTHBUF\n\t#ifdef USE_LOGDEPTHBUF_EXT\n\t\tvFragDepth = 1.0 + gl_Position.w;\n\t\tvIsPerspective = float( isPerspectiveMatrix( projectionMatrix ) );\n\t#else\n\t\tif ( isPerspectiveMatrix( projectionMatrix ) ) {\n\t\t\tgl_Position.z = log2( max( EPSILON, gl_Position.w + 1.0 ) ) * logDepthBufFC - 1.0;\n\t\t\tgl_Position.z *= gl_Position.w;\n\t\t}\n\t#endif\n#endif",map_fragment:"#ifdef USE_MAP\n\tvec4 sampledDiffuseColor = texture2D( map, vUv );\n\t#ifdef DECODE_VIDEO_TEXTURE\n\t\tsampledDiffuseColor = vec4( mix( pow( sampledDiffuseColor.rgb * 0.9478672986 + vec3( 0.0521327014 ), vec3( 2.4 ) ), sampledDiffuseColor.rgb * 0.0773993808, vec3( lessThanEqual( sampledDiffuseColor.rgb, vec3( 0.04045 ) ) ) ), sampledDiffuseColor.w );\n\t#endif\n\tdiffuseColor *= sampledDiffuseColor;\n#endif",map_pars_fragment:"#ifdef USE_MAP\n\tuniform sampler2D map;\n#endif",map_particle_fragment:"#if defined( USE_MAP ) || defined( USE_ALPHAMAP )\n\tvec2 uv = ( uvTransform * vec3( gl_PointCoord.x, 1.0 - gl_PointCoord.y, 1 ) ).xy;\n#endif\n#ifdef USE_MAP\n\tdiffuseColor *= texture2D( map, uv );\n#endif\n#ifdef USE_ALPHAMAP\n\tdiffuseColor.a *= texture2D( alphaMap, uv ).g;\n#endif",map_particle_pars_fragment:"#if defined( USE_MAP ) || defined( USE_ALPHAMAP )\n\tuniform mat3 uvTransform;\n#endif\n#ifdef USE_MAP\n\tuniform sampler2D map;\n#endif\n#ifdef USE_ALPHAMAP\n\tuniform sampler2D alphaMap;\n#endif",metalnessmap_fragment:"float metalnessFactor = metalness;\n#ifdef USE_METALNESSMAP\n\tvec4 texelMetalness = texture2D( metalnessMap, vUv );\n\tmetalnessFactor *= texelMetalness.b;\n#endif",metalnessmap_pars_fragment:"#ifdef USE_METALNESSMAP\n\tuniform sampler2D metalnessMap;\n#endif",morphcolor_vertex:"#if defined( USE_MORPHCOLORS ) && defined( MORPHTARGETS_TEXTURE )\n\tvColor *= morphTargetBaseInfluence;\n\tfor ( int i = 0; i < MORPHTARGETS_COUNT; i ++ ) {\n\t\t#if defined( USE_COLOR_ALPHA )\n\t\t\tif ( morphTargetInfluences[ i ] != 0.0 ) vColor += getMorph( gl_VertexID, i, 2 ) * morphTargetInfluences[ i ];\n\t\t#elif defined( USE_COLOR )\n\t\t\tif ( morphTargetInfluences[ i ] != 0.0 ) vColor += getMorph( gl_VertexID, i, 2 ).rgb * morphTargetInfluences[ i ];\n\t\t#endif\n\t}\n#endif",morphnormal_vertex:"#ifdef USE_MORPHNORMALS\n\tobjectNormal *= morphTargetBaseInfluence;\n\t#ifdef MORPHTARGETS_TEXTURE\n\t\tfor ( int i = 0; i < MORPHTARGETS_COUNT; i ++ ) {\n\t\t\tif ( morphTargetInfluences[ i ] != 0.0 ) objectNormal += getMorph( gl_VertexID, i, 1 ).xyz * morphTargetInfluences[ i ];\n\t\t}\n\t#else\n\t\tobjectNormal += morphNormal0 * morphTargetInfluences[ 0 ];\n\t\tobjectNormal += morphNormal1 * morphTargetInfluences[ 1 ];\n\t\tobjectNormal += morphNormal2 * morphTargetInfluences[ 2 ];\n\t\tobjectNormal += morphNormal3 * morphTargetInfluences[ 3 ];\n\t#endif\n#endif",morphtarget_pars_vertex:"#ifdef USE_MORPHTARGETS\n\tuniform float morphTargetBaseInfluence;\n\t#ifdef MORPHTARGETS_TEXTURE\n\t\tuniform float morphTargetInfluences[ MORPHTARGETS_COUNT ];\n\t\tuniform sampler2DArray morphTargetsTexture;\n\t\tuniform ivec2 morphTargetsTextureSize;\n\t\tvec4 getMorph( const in int vertexIndex, const in int morphTargetIndex, const in int offset ) {\n\t\t\tint texelIndex = vertexIndex * MORPHTARGETS_TEXTURE_STRIDE + offset;\n\t\t\tint y = texelIndex / morphTargetsTextureSize.x;\n\t\t\tint x = texelIndex - y * morphTargetsTextureSize.x;\n\t\t\tivec3 morphUV = ivec3( x, y, morphTargetIndex );\n\t\t\treturn texelFetch( morphTargetsTexture, morphUV, 0 );\n\t\t}\n\t#else\n\t\t#ifndef USE_MORPHNORMALS\n\t\t\tuniform float morphTargetInfluences[ 8 ];\n\t\t#else\n\t\t\tuniform float morphTargetInfluences[ 4 ];\n\t\t#endif\n\t#endif\n#endif",morphtarget_vertex:"#ifdef USE_MORPHTARGETS\n\ttransformed *= morphTargetBaseInfluence;\n\t#ifdef MORPHTARGETS_TEXTURE\n\t\tfor ( int i = 0; i < MORPHTARGETS_COUNT; i ++ ) {\n\t\t\tif ( morphTargetInfluences[ i ] != 0.0 ) transformed += getMorph( gl_VertexID, i, 0 ).xyz * morphTargetInfluences[ i ];\n\t\t}\n\t#else\n\t\ttransformed += morphTarget0 * morphTargetInfluences[ 0 ];\n\t\ttransformed += morphTarget1 * morphTargetInfluences[ 1 ];\n\t\ttransformed += morphTarget2 * morphTargetInfluences[ 2 ];\n\t\ttransformed += morphTarget3 * morphTargetInfluences[ 3 ];\n\t\t#ifndef USE_MORPHNORMALS\n\t\t\ttransformed += morphTarget4 * morphTargetInfluences[ 4 ];\n\t\t\ttransformed += morphTarget5 * morphTargetInfluences[ 5 ];\n\t\t\ttransformed += morphTarget6 * morphTargetInfluences[ 6 ];\n\t\t\ttransformed += morphTarget7 * morphTargetInfluences[ 7 ];\n\t\t#endif\n\t#endif\n#endif",normal_fragment_begin:"float faceDirection = gl_FrontFacing ? 1.0 : - 1.0;\n#ifdef FLAT_SHADED\n\tvec3 fdx = dFdx( vViewPosition );\n\tvec3 fdy = dFdy( vViewPosition );\n\tvec3 normal = normalize( cross( fdx, fdy ) );\n#else\n\tvec3 normal = normalize( vNormal );\n\t#ifdef DOUBLE_SIDED\n\t\tnormal = normal * faceDirection;\n\t#endif\n\t#ifdef USE_TANGENT\n\t\tvec3 tangent = normalize( vTangent );\n\t\tvec3 bitangent = normalize( vBitangent );\n\t\t#ifdef DOUBLE_SIDED\n\t\t\ttangent = tangent * faceDirection;\n\t\t\tbitangent = bitangent * faceDirection;\n\t\t#endif\n\t\t#if defined( TANGENTSPACE_NORMALMAP ) || defined( USE_CLEARCOAT_NORMALMAP )\n\t\t\tmat3 vTBN = mat3( tangent, bitangent, normal );\n\t\t#endif\n\t#endif\n#endif\nvec3 geometryNormal = normal;",normal_fragment_maps:"#ifdef OBJECTSPACE_NORMALMAP\n\tnormal = texture2D( normalMap, vUv ).xyz * 2.0 - 1.0;\n\t#ifdef FLIP_SIDED\n\t\tnormal = - normal;\n\t#endif\n\t#ifdef DOUBLE_SIDED\n\t\tnormal = normal * faceDirection;\n\t#endif\n\tnormal = normalize( normalMatrix * normal );\n#elif defined( TANGENTSPACE_NORMALMAP )\n\tvec3 mapN = texture2D( normalMap, vUv ).xyz * 2.0 - 1.0;\n\tmapN.xy *= normalScale;\n\t#ifdef USE_TANGENT\n\t\tnormal = normalize( vTBN * mapN );\n\t#else\n\t\tnormal = perturbNormal2Arb( - vViewPosition, normal, mapN, faceDirection );\n\t#endif\n#elif defined( USE_BUMPMAP )\n\tnormal = perturbNormalArb( - vViewPosition, normal, dHdxy_fwd(), faceDirection );\n#endif",normal_pars_fragment:"#ifndef FLAT_SHADED\n\tvarying vec3 vNormal;\n\t#ifdef USE_TANGENT\n\t\tvarying vec3 vTangent;\n\t\tvarying vec3 vBitangent;\n\t#endif\n#endif",normal_pars_vertex:"#ifndef FLAT_SHADED\n\tvarying vec3 vNormal;\n\t#ifdef USE_TANGENT\n\t\tvarying vec3 vTangent;\n\t\tvarying vec3 vBitangent;\n\t#endif\n#endif",normal_vertex:"#ifndef FLAT_SHADED\n\tvNormal = normalize( transformedNormal );\n\t#ifdef USE_TANGENT\n\t\tvTangent = normalize( transformedTangent );\n\t\tvBitangent = normalize( cross( vNormal, vTangent ) * tangent.w );\n\t#endif\n#endif",normalmap_pars_fragment:"#ifdef USE_NORMALMAP\n\tuniform sampler2D normalMap;\n\tuniform vec2 normalScale;\n#endif\n#ifdef OBJECTSPACE_NORMALMAP\n\tuniform mat3 normalMatrix;\n#endif\n#if ! defined ( USE_TANGENT ) && ( defined ( TANGENTSPACE_NORMALMAP ) || defined ( USE_CLEARCOAT_NORMALMAP ) )\n\tvec3 perturbNormal2Arb( vec3 eye_pos, vec3 surf_norm, vec3 mapN, float faceDirection ) {\n\t\tvec3 q0 = dFdx( eye_pos.xyz );\n\t\tvec3 q1 = dFdy( eye_pos.xyz );\n\t\tvec2 st0 = dFdx( vUv.st );\n\t\tvec2 st1 = dFdy( vUv.st );\n\t\tvec3 N = surf_norm;\n\t\tvec3 q1perp = cross( q1, N );\n\t\tvec3 q0perp = cross( N, q0 );\n\t\tvec3 T = q1perp * st0.x + q0perp * st1.x;\n\t\tvec3 B = q1perp * st0.y + q0perp * st1.y;\n\t\tfloat det = max( dot( T, T ), dot( B, B ) );\n\t\tfloat scale = ( det == 0.0 ) ? 0.0 : faceDirection * inversesqrt( det );\n\t\treturn normalize( T * ( mapN.x * scale ) + B * ( mapN.y * scale ) + N * mapN.z );\n\t}\n#endif",clearcoat_normal_fragment_begin:"#ifdef USE_CLEARCOAT\n\tvec3 clearcoatNormal = geometryNormal;\n#endif",clearcoat_normal_fragment_maps:"#ifdef USE_CLEARCOAT_NORMALMAP\n\tvec3 clearcoatMapN = texture2D( clearcoatNormalMap, vUv ).xyz * 2.0 - 1.0;\n\tclearcoatMapN.xy *= clearcoatNormalScale;\n\t#ifdef USE_TANGENT\n\t\tclearcoatNormal = normalize( vTBN * clearcoatMapN );\n\t#else\n\t\tclearcoatNormal = perturbNormal2Arb( - vViewPosition, clearcoatNormal, clearcoatMapN, faceDirection );\n\t#endif\n#endif",clearcoat_pars_fragment:"#ifdef USE_CLEARCOATMAP\n\tuniform sampler2D clearcoatMap;\n#endif\n#ifdef USE_CLEARCOAT_ROUGHNESSMAP\n\tuniform sampler2D clearcoatRoughnessMap;\n#endif\n#ifdef USE_CLEARCOAT_NORMALMAP\n\tuniform sampler2D clearcoatNormalMap;\n\tuniform vec2 clearcoatNormalScale;\n#endif",iridescence_pars_fragment:"#ifdef USE_IRIDESCENCEMAP\n\tuniform sampler2D iridescenceMap;\n#endif\n#ifdef USE_IRIDESCENCE_THICKNESSMAP\n\tuniform sampler2D iridescenceThicknessMap;\n#endif",output_fragment:"#ifdef OPAQUE\ndiffuseColor.a = 1.0;\n#endif\n#ifdef USE_TRANSMISSION\ndiffuseColor.a *= material.transmissionAlpha + 0.1;\n#endif\ngl_FragColor = vec4( outgoingLight, diffuseColor.a );",packing:"vec3 packNormalToRGB( const in vec3 normal ) {\n\treturn normalize( normal ) * 0.5 + 0.5;\n}\nvec3 unpackRGBToNormal( const in vec3 rgb ) {\n\treturn 2.0 * rgb.xyz - 1.0;\n}\nconst float PackUpscale = 256. / 255.;const float UnpackDownscale = 255. / 256.;\nconst vec3 PackFactors = vec3( 256. * 256. * 256., 256. * 256., 256. );\nconst vec4 UnpackFactors = UnpackDownscale / vec4( PackFactors, 1. );\nconst float ShiftRight8 = 1. / 256.;\nvec4 packDepthToRGBA( const in float v ) {\n\tvec4 r = vec4( fract( v * PackFactors ), v );\n\tr.yzw -= r.xyz * ShiftRight8;\treturn r * PackUpscale;\n}\nfloat unpackRGBAToDepth( const in vec4 v ) {\n\treturn dot( v, UnpackFactors );\n}\nvec2 packDepthToRG( in highp float v ) {\n\treturn packDepthToRGBA( v ).yx;\n}\nfloat unpackRGToDepth( const in highp vec2 v ) {\n\treturn unpackRGBAToDepth( vec4( v.xy, 0.0, 0.0 ) );\n}\nvec4 pack2HalfToRGBA( vec2 v ) {\n\tvec4 r = vec4( v.x, fract( v.x * 255.0 ), v.y, fract( v.y * 255.0 ) );\n\treturn vec4( r.x - r.y / 255.0, r.y, r.z - r.w / 255.0, r.w );\n}\nvec2 unpackRGBATo2Half( vec4 v ) {\n\treturn vec2( v.x + ( v.y / 255.0 ), v.z + ( v.w / 255.0 ) );\n}\nfloat viewZToOrthographicDepth( const in float viewZ, const in float near, const in float far ) {\n\treturn ( viewZ + near ) / ( near - far );\n}\nfloat orthographicDepthToViewZ( const in float linearClipZ, const in float near, const in float far ) {\n\treturn linearClipZ * ( near - far ) - near;\n}\nfloat viewZToPerspectiveDepth( const in float viewZ, const in float near, const in float far ) {\n\treturn ( ( near + viewZ ) * far ) / ( ( far - near ) * viewZ );\n}\nfloat perspectiveDepthToViewZ( const in float invClipZ, const in float near, const in float far ) {\n\treturn ( near * far ) / ( ( far - near ) * invClipZ - far );\n}",premultiplied_alpha_fragment:"#ifdef PREMULTIPLIED_ALPHA\n\tgl_FragColor.rgb *= gl_FragColor.a;\n#endif",project_vertex:"vec4 mvPosition = vec4( transformed, 1.0 );\n#ifdef USE_INSTANCING\n\tmvPosition = instanceMatrix * mvPosition;\n#endif\nmvPosition = modelViewMatrix * mvPosition;\ngl_Position = projectionMatrix * mvPosition;",dithering_fragment:"#ifdef DITHERING\n\tgl_FragColor.rgb = dithering( gl_FragColor.rgb );\n#endif",dithering_pars_fragment:"#ifdef DITHERING\n\tvec3 dithering( vec3 color ) {\n\t\tfloat grid_position = rand( gl_FragCoord.xy );\n\t\tvec3 dither_shift_RGB = vec3( 0.25 / 255.0, -0.25 / 255.0, 0.25 / 255.0 );\n\t\tdither_shift_RGB = mix( 2.0 * dither_shift_RGB, -2.0 * dither_shift_RGB, grid_position );\n\t\treturn color + dither_shift_RGB;\n\t}\n#endif",roughnessmap_fragment:"float roughnessFactor = roughness;\n#ifdef USE_ROUGHNESSMAP\n\tvec4 texelRoughness = texture2D( roughnessMap, vUv );\n\troughnessFactor *= texelRoughness.g;\n#endif",roughnessmap_pars_fragment:"#ifdef USE_ROUGHNESSMAP\n\tuniform sampler2D roughnessMap;\n#endif",shadowmap_pars_fragment:"#if NUM_SPOT_LIGHT_COORDS > 0\n\tvarying vec4 vSpotLightCoord[ NUM_SPOT_LIGHT_COORDS ];\n#endif\n#if NUM_SPOT_LIGHT_MAPS > 0\n\tuniform sampler2D spotLightMap[ NUM_SPOT_LIGHT_MAPS ];\n#endif\n#ifdef USE_SHADOWMAP\n\t#if NUM_DIR_LIGHT_SHADOWS > 0\n\t\tuniform sampler2D directionalShadowMap[ NUM_DIR_LIGHT_SHADOWS ];\n\t\tvarying vec4 vDirectionalShadowCoord[ NUM_DIR_LIGHT_SHADOWS ];\n\t\tstruct DirectionalLightShadow {\n\t\t\tfloat shadowBias;\n\t\t\tfloat shadowNormalBias;\n\t\t\tfloat shadowRadius;\n\t\t\tvec2 shadowMapSize;\n\t\t};\n\t\tuniform DirectionalLightShadow directionalLightShadows[ NUM_DIR_LIGHT_SHADOWS ];\n\t#endif\n\t#if NUM_SPOT_LIGHT_SHADOWS > 0\n\t\tuniform sampler2D spotShadowMap[ NUM_SPOT_LIGHT_SHADOWS ];\n\t\tstruct SpotLightShadow {\n\t\t\tfloat shadowBias;\n\t\t\tfloat shadowNormalBias;\n\t\t\tfloat shadowRadius;\n\t\t\tvec2 shadowMapSize;\n\t\t};\n\t\tuniform SpotLightShadow spotLightShadows[ NUM_SPOT_LIGHT_SHADOWS ];\n\t#endif\n\t#if NUM_POINT_LIGHT_SHADOWS > 0\n\t\tuniform sampler2D pointShadowMap[ NUM_POINT_LIGHT_SHADOWS ];\n\t\tvarying vec4 vPointShadowCoord[ NUM_POINT_LIGHT_SHADOWS ];\n\t\tstruct PointLightShadow {\n\t\t\tfloat shadowBias;\n\t\t\tfloat shadowNormalBias;\n\t\t\tfloat shadowRadius;\n\t\t\tvec2 shadowMapSize;\n\t\t\tfloat shadowCameraNear;\n\t\t\tfloat shadowCameraFar;\n\t\t};\n\t\tuniform PointLightShadow pointLightShadows[ NUM_POINT_LIGHT_SHADOWS ];\n\t#endif\n\tfloat texture2DCompare( sampler2D depths, vec2 uv, float compare ) {\n\t\treturn step( compare, unpackRGBAToDepth( texture2D( depths, uv ) ) );\n\t}\n\tvec2 texture2DDistribution( sampler2D shadow, vec2 uv ) {\n\t\treturn unpackRGBATo2Half( texture2D( shadow, uv ) );\n\t}\n\tfloat VSMShadow (sampler2D shadow, vec2 uv, float compare ){\n\t\tfloat occlusion = 1.0;\n\t\tvec2 distribution = texture2DDistribution( shadow, uv );\n\t\tfloat hard_shadow = step( compare , distribution.x );\n\t\tif (hard_shadow != 1.0 ) {\n\t\t\tfloat distance = compare - distribution.x ;\n\t\t\tfloat variance = max( 0.00000, distribution.y * distribution.y );\n\t\t\tfloat softness_probability = variance / (variance + distance * distance );\t\t\tsoftness_probability = clamp( ( softness_probability - 0.3 ) / ( 0.95 - 0.3 ), 0.0, 1.0 );\t\t\tocclusion = clamp( max( hard_shadow, softness_probability ), 0.0, 1.0 );\n\t\t}\n\t\treturn occlusion;\n\t}\n\tfloat getShadow( sampler2D shadowMap, vec2 shadowMapSize, float shadowBias, float shadowRadius, vec4 shadowCoord ) {\n\t\tfloat shadow = 1.0;\n\t\tshadowCoord.xyz /= shadowCoord.w;\n\t\tshadowCoord.z += shadowBias;\n\t\tbool inFrustum = shadowCoord.x >= 0.0 && shadowCoord.x <= 1.0 && shadowCoord.y >= 0.0 && shadowCoord.y <= 1.0;\n\t\tbool frustumTest = inFrustum && shadowCoord.z <= 1.0;\n\t\tif ( frustumTest ) {\n\t\t#if defined( SHADOWMAP_TYPE_PCF )\n\t\t\tvec2 texelSize = vec2( 1.0 ) / shadowMapSize;\n\t\t\tfloat dx0 = - texelSize.x * shadowRadius;\n\t\t\tfloat dy0 = - texelSize.y * shadowRadius;\n\t\t\tfloat dx1 = + texelSize.x * shadowRadius;\n\t\t\tfloat dy1 = + texelSize.y * shadowRadius;\n\t\t\tfloat dx2 = dx0 / 2.0;\n\t\t\tfloat dy2 = dy0 / 2.0;\n\t\t\tfloat dx3 = dx1 / 2.0;\n\t\t\tfloat dy3 = dy1 / 2.0;\n\t\t\tshadow = (\n\t\t\t\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( dx0, dy0 ), shadowCoord.z ) +\n\t\t\t\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( 0.0, dy0 ), shadowCoord.z ) +\n\t\t\t\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( dx1, dy0 ), shadowCoord.z ) +\n\t\t\t\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( dx2, dy2 ), shadowCoord.z ) +\n\t\t\t\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( 0.0, dy2 ), shadowCoord.z ) +\n\t\t\t\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( dx3, dy2 ), shadowCoord.z ) +\n\t\t\t\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( dx0, 0.0 ), shadowCoord.z ) +\n\t\t\t\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( dx2, 0.0 ), shadowCoord.z ) +\n\t\t\t\ttexture2DCompare( shadowMap, shadowCoord.xy, shadowCoord.z ) +\n\t\t\t\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( dx3, 0.0 ), shadowCoord.z ) +\n\t\t\t\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( dx1, 0.0 ), shadowCoord.z ) +\n\t\t\t\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( dx2, dy3 ), shadowCoord.z ) +\n\t\t\t\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( 0.0, dy3 ), shadowCoord.z ) +\n\t\t\t\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( dx3, dy3 ), shadowCoord.z ) +\n\t\t\t\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( dx0, dy1 ), shadowCoord.z ) +\n\t\t\t\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( 0.0, dy1 ), shadowCoord.z ) +\n\t\t\t\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( dx1, dy1 ), shadowCoord.z )\n\t\t\t) * ( 1.0 / 17.0 );\n\t\t#elif defined( SHADOWMAP_TYPE_PCF_SOFT )\n\t\t\tvec2 texelSize = vec2( 1.0 ) / shadowMapSize;\n\t\t\tfloat dx = texelSize.x;\n\t\t\tfloat dy = texelSize.y;\n\t\t\tvec2 uv = shadowCoord.xy;\n\t\t\tvec2 f = fract( uv * shadowMapSize + 0.5 );\n\t\t\tuv -= f * texelSize;\n\t\t\tshadow = (\n\t\t\t\ttexture2DCompare( shadowMap, uv, shadowCoord.z ) +\n\t\t\t\ttexture2DCompare( shadowMap, uv + vec2( dx, 0.0 ), shadowCoord.z ) +\n\t\t\t\ttexture2DCompare( shadowMap, uv + vec2( 0.0, dy ), shadowCoord.z ) +\n\t\t\t\ttexture2DCompare( shadowMap, uv + texelSize, shadowCoord.z ) +\n\t\t\t\tmix( texture2DCompare( shadowMap, uv + vec2( -dx, 0.0 ), shadowCoord.z ),\n\t\t\t\t\t texture2DCompare( shadowMap, uv + vec2( 2.0 * dx, 0.0 ), shadowCoord.z ),\n\t\t\t\t\t f.x ) +\n\t\t\t\tmix( texture2DCompare( shadowMap, uv + vec2( -dx, dy ), shadowCoord.z ),\n\t\t\t\t\t texture2DCompare( shadowMap, uv + vec2( 2.0 * dx, dy ), shadowCoord.z ),\n\t\t\t\t\t f.x ) +\n\t\t\t\tmix( texture2DCompare( shadowMap, uv + vec2( 0.0, -dy ), shadowCoord.z ),\n\t\t\t\t\t texture2DCompare( shadowMap, uv + vec2( 0.0, 2.0 * dy ), shadowCoord.z ),\n\t\t\t\t\t f.y ) +\n\t\t\t\tmix( texture2DCompare( shadowMap, uv + vec2( dx, -dy ), shadowCoord.z ),\n\t\t\t\t\t texture2DCompare( shadowMap, uv + vec2( dx, 2.0 * dy ), shadowCoord.z ),\n\t\t\t\t\t f.y ) +\n\t\t\t\tmix( mix( texture2DCompare( shadowMap, uv + vec2( -dx, -dy ), shadowCoord.z ),\n\t\t\t\t\t\t texture2DCompare( shadowMap, uv + vec2( 2.0 * dx, -dy ), shadowCoord.z ),\n\t\t\t\t\t\t f.x ),\n\t\t\t\t\t mix( texture2DCompare( shadowMap, uv + vec2( -dx, 2.0 * dy ), shadowCoord.z ),\n\t\t\t\t\t\t texture2DCompare( shadowMap, uv + vec2( 2.0 * dx, 2.0 * dy ), shadowCoord.z ),\n\t\t\t\t\t\t f.x ),\n\t\t\t\t\t f.y )\n\t\t\t) * ( 1.0 / 9.0 );\n\t\t#elif defined( SHADOWMAP_TYPE_VSM )\n\t\t\tshadow = VSMShadow( shadowMap, shadowCoord.xy, shadowCoord.z );\n\t\t#else\n\t\t\tshadow = texture2DCompare( shadowMap, shadowCoord.xy, shadowCoord.z );\n\t\t#endif\n\t\t}\n\t\treturn shadow;\n\t}\n\tvec2 cubeToUV( vec3 v, float texelSizeY ) {\n\t\tvec3 absV = abs( v );\n\t\tfloat scaleToCube = 1.0 / max( absV.x, max( absV.y, absV.z ) );\n\t\tabsV *= scaleToCube;\n\t\tv *= scaleToCube * ( 1.0 - 2.0 * texelSizeY );\n\t\tvec2 planar = v.xy;\n\t\tfloat almostATexel = 1.5 * texelSizeY;\n\t\tfloat almostOne = 1.0 - almostATexel;\n\t\tif ( absV.z >= almostOne ) {\n\t\t\tif ( v.z > 0.0 )\n\t\t\t\tplanar.x = 4.0 - v.x;\n\t\t} else if ( absV.x >= almostOne ) {\n\t\t\tfloat signX = sign( v.x );\n\t\t\tplanar.x = v.z * signX + 2.0 * signX;\n\t\t} else if ( absV.y >= almostOne ) {\n\t\t\tfloat signY = sign( v.y );\n\t\t\tplanar.x = v.x + 2.0 * signY + 2.0;\n\t\t\tplanar.y = v.z * signY - 2.0;\n\t\t}\n\t\treturn vec2( 0.125, 0.25 ) * planar + vec2( 0.375, 0.75 );\n\t}\n\tfloat getPointShadow( sampler2D shadowMap, vec2 shadowMapSize, float shadowBias, float shadowRadius, vec4 shadowCoord, float shadowCameraNear, float shadowCameraFar ) {\n\t\tvec2 texelSize = vec2( 1.0 ) / ( shadowMapSize * vec2( 4.0, 2.0 ) );\n\t\tvec3 lightToPosition = shadowCoord.xyz;\n\t\tfloat dp = ( length( lightToPosition ) - shadowCameraNear ) / ( shadowCameraFar - shadowCameraNear );\t\tdp += shadowBias;\n\t\tvec3 bd3D = normalize( lightToPosition );\n\t\t#if defined( SHADOWMAP_TYPE_PCF ) || defined( SHADOWMAP_TYPE_PCF_SOFT ) || defined( SHADOWMAP_TYPE_VSM )\n\t\t\tvec2 offset = vec2( - 1, 1 ) * shadowRadius * texelSize.y;\n\t\t\treturn (\n\t\t\t\ttexture2DCompare( shadowMap, cubeToUV( bd3D + offset.xyy, texelSize.y ), dp ) +\n\t\t\t\ttexture2DCompare( shadowMap, cubeToUV( bd3D + offset.yyy, texelSize.y ), dp ) +\n\t\t\t\ttexture2DCompare( shadowMap, cubeToUV( bd3D + offset.xyx, texelSize.y ), dp ) +\n\t\t\t\ttexture2DCompare( shadowMap, cubeToUV( bd3D + offset.yyx, texelSize.y ), dp ) +\n\t\t\t\ttexture2DCompare( shadowMap, cubeToUV( bd3D, texelSize.y ), dp ) +\n\t\t\t\ttexture2DCompare( shadowMap, cubeToUV( bd3D + offset.xxy, texelSize.y ), dp ) +\n\t\t\t\ttexture2DCompare( shadowMap, cubeToUV( bd3D + offset.yxy, texelSize.y ), dp ) +\n\t\t\t\ttexture2DCompare( shadowMap, cubeToUV( bd3D + offset.xxx, texelSize.y ), dp ) +\n\t\t\t\ttexture2DCompare( shadowMap, cubeToUV( bd3D + offset.yxx, texelSize.y ), dp )\n\t\t\t) * ( 1.0 / 9.0 );\n\t\t#else\n\t\t\treturn texture2DCompare( shadowMap, cubeToUV( bd3D, texelSize.y ), dp );\n\t\t#endif\n\t}\n#endif",shadowmap_pars_vertex:"#if NUM_SPOT_LIGHT_COORDS > 0\n\tuniform mat4 spotLightMatrix[ NUM_SPOT_LIGHT_COORDS ];\n\tvarying vec4 vSpotLightCoord[ NUM_SPOT_LIGHT_COORDS ];\n#endif\n#ifdef USE_SHADOWMAP\n\t#if NUM_DIR_LIGHT_SHADOWS > 0\n\t\tuniform mat4 directionalShadowMatrix[ NUM_DIR_LIGHT_SHADOWS ];\n\t\tvarying vec4 vDirectionalShadowCoord[ NUM_DIR_LIGHT_SHADOWS ];\n\t\tstruct DirectionalLightShadow {\n\t\t\tfloat shadowBias;\n\t\t\tfloat shadowNormalBias;\n\t\t\tfloat shadowRadius;\n\t\t\tvec2 shadowMapSize;\n\t\t};\n\t\tuniform DirectionalLightShadow directionalLightShadows[ NUM_DIR_LIGHT_SHADOWS ];\n\t#endif\n\t#if NUM_SPOT_LIGHT_SHADOWS > 0\n\t\tstruct SpotLightShadow {\n\t\t\tfloat shadowBias;\n\t\t\tfloat shadowNormalBias;\n\t\t\tfloat shadowRadius;\n\t\t\tvec2 shadowMapSize;\n\t\t};\n\t\tuniform SpotLightShadow spotLightShadows[ NUM_SPOT_LIGHT_SHADOWS ];\n\t#endif\n\t#if NUM_POINT_LIGHT_SHADOWS > 0\n\t\tuniform mat4 pointShadowMatrix[ NUM_POINT_LIGHT_SHADOWS ];\n\t\tvarying vec4 vPointShadowCoord[ NUM_POINT_LIGHT_SHADOWS ];\n\t\tstruct PointLightShadow {\n\t\t\tfloat shadowBias;\n\t\t\tfloat shadowNormalBias;\n\t\t\tfloat shadowRadius;\n\t\t\tvec2 shadowMapSize;\n\t\t\tfloat shadowCameraNear;\n\t\t\tfloat shadowCameraFar;\n\t\t};\n\t\tuniform PointLightShadow pointLightShadows[ NUM_POINT_LIGHT_SHADOWS ];\n\t#endif\n#endif",shadowmap_vertex:"#if ( defined( USE_SHADOWMAP ) && ( NUM_DIR_LIGHT_SHADOWS > 0 || NUM_POINT_LIGHT_SHADOWS > 0 ) ) || ( NUM_SPOT_LIGHT_COORDS > 0 )\n\tvec3 shadowWorldNormal = inverseTransformDirection( transformedNormal, viewMatrix );\n\tvec4 shadowWorldPosition;\n#endif\n#if defined( USE_SHADOWMAP )\n\t#if NUM_DIR_LIGHT_SHADOWS > 0\n\t\t#pragma unroll_loop_start\n\t\tfor ( int i = 0; i < NUM_DIR_LIGHT_SHADOWS; i ++ ) {\n\t\t\tshadowWorldPosition = worldPosition + vec4( shadowWorldNormal * directionalLightShadows[ i ].shadowNormalBias, 0 );\n\t\t\tvDirectionalShadowCoord[ i ] = directionalShadowMatrix[ i ] * shadowWorldPosition;\n\t\t}\n\t\t#pragma unroll_loop_end\n\t#endif\n\t#if NUM_POINT_LIGHT_SHADOWS > 0\n\t\t#pragma unroll_loop_start\n\t\tfor ( int i = 0; i < NUM_POINT_LIGHT_SHADOWS; i ++ ) {\n\t\t\tshadowWorldPosition = worldPosition + vec4( shadowWorldNormal * pointLightShadows[ i ].shadowNormalBias, 0 );\n\t\t\tvPointShadowCoord[ i ] = pointShadowMatrix[ i ] * shadowWorldPosition;\n\t\t}\n\t\t#pragma unroll_loop_end\n\t#endif\n#endif\n#if NUM_SPOT_LIGHT_COORDS > 0\n\t#pragma unroll_loop_start\n\tfor ( int i = 0; i < NUM_SPOT_LIGHT_COORDS; i ++ ) {\n\t\tshadowWorldPosition = worldPosition;\n\t\t#if ( defined( USE_SHADOWMAP ) && UNROLLED_LOOP_INDEX < NUM_SPOT_LIGHT_SHADOWS )\n\t\t\tshadowWorldPosition.xyz += shadowWorldNormal * spotLightShadows[ i ].shadowNormalBias;\n\t\t#endif\n\t\tvSpotLightCoord[ i ] = spotLightMatrix[ i ] * shadowWorldPosition;\n\t}\n\t#pragma unroll_loop_end\n#endif",shadowmask_pars_fragment:"float getShadowMask() {\n\tfloat shadow = 1.0;\n\t#ifdef USE_SHADOWMAP\n\t#if NUM_DIR_LIGHT_SHADOWS > 0\n\tDirectionalLightShadow directionalLight;\n\t#pragma unroll_loop_start\n\tfor ( int i = 0; i < NUM_DIR_LIGHT_SHADOWS; i ++ ) {\n\t\tdirectionalLight = directionalLightShadows[ i ];\n\t\tshadow *= receiveShadow ? getShadow( directionalShadowMap[ i ], directionalLight.shadowMapSize, directionalLight.shadowBias, directionalLight.shadowRadius, vDirectionalShadowCoord[ i ] ) : 1.0;\n\t}\n\t#pragma unroll_loop_end\n\t#endif\n\t#if NUM_SPOT_LIGHT_SHADOWS > 0\n\tSpotLightShadow spotLight;\n\t#pragma unroll_loop_start\n\tfor ( int i = 0; i < NUM_SPOT_LIGHT_SHADOWS; i ++ ) {\n\t\tspotLight = spotLightShadows[ i ];\n\t\tshadow *= receiveShadow ? getShadow( spotShadowMap[ i ], spotLight.shadowMapSize, spotLight.shadowBias, spotLight.shadowRadius, vSpotLightCoord[ i ] ) : 1.0;\n\t}\n\t#pragma unroll_loop_end\n\t#endif\n\t#if NUM_POINT_LIGHT_SHADOWS > 0\n\tPointLightShadow pointLight;\n\t#pragma unroll_loop_start\n\tfor ( int i = 0; i < NUM_POINT_LIGHT_SHADOWS; i ++ ) {\n\t\tpointLight = pointLightShadows[ i ];\n\t\tshadow *= receiveShadow ? getPointShadow( pointShadowMap[ i ], pointLight.shadowMapSize, pointLight.shadowBias, pointLight.shadowRadius, vPointShadowCoord[ i ], pointLight.shadowCameraNear, pointLight.shadowCameraFar ) : 1.0;\n\t}\n\t#pragma unroll_loop_end\n\t#endif\n\t#endif\n\treturn shadow;\n}",skinbase_vertex:"#ifdef USE_SKINNING\n\tmat4 boneMatX = getBoneMatrix( skinIndex.x );\n\tmat4 boneMatY = getBoneMatrix( skinIndex.y );\n\tmat4 boneMatZ = getBoneMatrix( skinIndex.z );\n\tmat4 boneMatW = getBoneMatrix( skinIndex.w );\n#endif",skinning_pars_vertex:"#ifdef USE_SKINNING\n\tuniform mat4 bindMatrix;\n\tuniform mat4 bindMatrixInverse;\n\tuniform highp sampler2D boneTexture;\n\tuniform int boneTextureSize;\n\tmat4 getBoneMatrix( const in float i ) {\n\t\tfloat j = i * 4.0;\n\t\tfloat x = mod( j, float( boneTextureSize ) );\n\t\tfloat y = floor( j / float( boneTextureSize ) );\n\t\tfloat dx = 1.0 / float( boneTextureSize );\n\t\tfloat dy = 1.0 / float( boneTextureSize );\n\t\ty = dy * ( y + 0.5 );\n\t\tvec4 v1 = texture2D( boneTexture, vec2( dx * ( x + 0.5 ), y ) );\n\t\tvec4 v2 = texture2D( boneTexture, vec2( dx * ( x + 1.5 ), y ) );\n\t\tvec4 v3 = texture2D( boneTexture, vec2( dx * ( x + 2.5 ), y ) );\n\t\tvec4 v4 = texture2D( boneTexture, vec2( dx * ( x + 3.5 ), y ) );\n\t\tmat4 bone = mat4( v1, v2, v3, v4 );\n\t\treturn bone;\n\t}\n#endif",skinning_vertex:"#ifdef USE_SKINNING\n\tvec4 skinVertex = bindMatrix * vec4( transformed, 1.0 );\n\tvec4 skinned = vec4( 0.0 );\n\tskinned += boneMatX * skinVertex * skinWeight.x;\n\tskinned += boneMatY * skinVertex * skinWeight.y;\n\tskinned += boneMatZ * skinVertex * skinWeight.z;\n\tskinned += boneMatW * skinVertex * skinWeight.w;\n\ttransformed = ( bindMatrixInverse * skinned ).xyz;\n#endif",skinnormal_vertex:"#ifdef USE_SKINNING\n\tmat4 skinMatrix = mat4( 0.0 );\n\tskinMatrix += skinWeight.x * boneMatX;\n\tskinMatrix += skinWeight.y * boneMatY;\n\tskinMatrix += skinWeight.z * boneMatZ;\n\tskinMatrix += skinWeight.w * boneMatW;\n\tskinMatrix = bindMatrixInverse * skinMatrix * bindMatrix;\n\tobjectNormal = vec4( skinMatrix * vec4( objectNormal, 0.0 ) ).xyz;\n\t#ifdef USE_TANGENT\n\t\tobjectTangent = vec4( skinMatrix * vec4( objectTangent, 0.0 ) ).xyz;\n\t#endif\n#endif",specularmap_fragment:"float specularStrength;\n#ifdef USE_SPECULARMAP\n\tvec4 texelSpecular = texture2D( specularMap, vUv );\n\tspecularStrength = texelSpecular.r;\n#else\n\tspecularStrength = 1.0;\n#endif",specularmap_pars_fragment:"#ifdef USE_SPECULARMAP\n\tuniform sampler2D specularMap;\n#endif",tonemapping_fragment:"#if defined( TONE_MAPPING )\n\tgl_FragColor.rgb = toneMapping( gl_FragColor.rgb );\n#endif",tonemapping_pars_fragment:"#ifndef saturate\n#define saturate( a ) clamp( a, 0.0, 1.0 )\n#endif\nuniform float toneMappingExposure;\nvec3 LinearToneMapping( vec3 color ) {\n\treturn toneMappingExposure * color;\n}\nvec3 ReinhardToneMapping( vec3 color ) {\n\tcolor *= toneMappingExposure;\n\treturn saturate( color / ( vec3( 1.0 ) + color ) );\n}\nvec3 OptimizedCineonToneMapping( vec3 color ) {\n\tcolor *= toneMappingExposure;\n\tcolor = max( vec3( 0.0 ), color - 0.004 );\n\treturn pow( ( color * ( 6.2 * color + 0.5 ) ) / ( color * ( 6.2 * color + 1.7 ) + 0.06 ), vec3( 2.2 ) );\n}\nvec3 RRTAndODTFit( vec3 v ) {\n\tvec3 a = v * ( v + 0.0245786 ) - 0.000090537;\n\tvec3 b = v * ( 0.983729 * v + 0.4329510 ) + 0.238081;\n\treturn a / b;\n}\nvec3 ACESFilmicToneMapping( vec3 color ) {\n\tconst mat3 ACESInputMat = mat3(\n\t\tvec3( 0.59719, 0.07600, 0.02840 ),\t\tvec3( 0.35458, 0.90834, 0.13383 ),\n\t\tvec3( 0.04823, 0.01566, 0.83777 )\n\t);\n\tconst mat3 ACESOutputMat = mat3(\n\t\tvec3( 1.60475, -0.10208, -0.00327 ),\t\tvec3( -0.53108, 1.10813, -0.07276 ),\n\t\tvec3( -0.07367, -0.00605, 1.07602 )\n\t);\n\tcolor *= toneMappingExposure / 0.6;\n\tcolor = ACESInputMat * color;\n\tcolor = RRTAndODTFit( color );\n\tcolor = ACESOutputMat * color;\n\treturn saturate( color );\n}\nvec3 CustomToneMapping( vec3 color ) { return color; }",transmission_fragment:"#ifdef USE_TRANSMISSION\n\tmaterial.transmission = transmission;\n\tmaterial.transmissionAlpha = 1.0;\n\tmaterial.thickness = thickness;\n\tmaterial.attenuationDistance = attenuationDistance;\n\tmaterial.attenuationColor = attenuationColor;\n\t#ifdef USE_TRANSMISSIONMAP\n\t\tmaterial.transmission *= texture2D( transmissionMap, vUv ).r;\n\t#endif\n\t#ifdef USE_THICKNESSMAP\n\t\tmaterial.thickness *= texture2D( thicknessMap, vUv ).g;\n\t#endif\n\tvec3 pos = vWorldPosition;\n\tvec3 v = normalize( cameraPosition - pos );\n\tvec3 n = inverseTransformDirection( normal, viewMatrix );\n\tvec4 transmission = getIBLVolumeRefraction(\n\t\tn, v, material.roughness, material.diffuseColor, material.specularColor, material.specularF90,\n\t\tpos, modelMatrix, viewMatrix, projectionMatrix, material.ior, material.thickness,\n\t\tmaterial.attenuationColor, material.attenuationDistance );\n\tmaterial.transmissionAlpha = mix( material.transmissionAlpha, transmission.a, material.transmission );\n\ttotalDiffuse = mix( totalDiffuse, transmission.rgb, material.transmission );\n#endif",transmission_pars_fragment:"#ifdef USE_TRANSMISSION\n\tuniform float transmission;\n\tuniform float thickness;\n\tuniform float attenuationDistance;\n\tuniform vec3 attenuationColor;\n\t#ifdef USE_TRANSMISSIONMAP\n\t\tuniform sampler2D transmissionMap;\n\t#endif\n\t#ifdef USE_THICKNESSMAP\n\t\tuniform sampler2D thicknessMap;\n\t#endif\n\tuniform vec2 transmissionSamplerSize;\n\tuniform sampler2D transmissionSamplerMap;\n\tuniform mat4 modelMatrix;\n\tuniform mat4 projectionMatrix;\n\tvarying vec3 vWorldPosition;\n\tvec3 getVolumeTransmissionRay( const in vec3 n, const in vec3 v, const in float thickness, const in float ior, const in mat4 modelMatrix ) {\n\t\tvec3 refractionVector = refract( - v, normalize( n ), 1.0 / ior );\n\t\tvec3 modelScale;\n\t\tmodelScale.x = length( vec3( modelMatrix[ 0 ].xyz ) );\n\t\tmodelScale.y = length( vec3( modelMatrix[ 1 ].xyz ) );\n\t\tmodelScale.z = length( vec3( modelMatrix[ 2 ].xyz ) );\n\t\treturn normalize( refractionVector ) * thickness * modelScale;\n\t}\n\tfloat applyIorToRoughness( const in float roughness, const in float ior ) {\n\t\treturn roughness * clamp( ior * 2.0 - 2.0, 0.0, 1.0 );\n\t}\n\tvec4 getTransmissionSample( const in vec2 fragCoord, const in float roughness, const in float ior ) {\n\t\tfloat lod = log2( transmissionSamplerSize.x ) * applyIorToRoughness( roughness, ior );\n\t\treturn textureBicubic( transmissionSamplerMap, fragCoord.xy, lod );\n\t}\n\tvec3 applyVolumeAttenuation( const in vec3 radiance, const in float transmissionDistance, const in vec3 attenuationColor, const in float attenuationDistance ) {\n\t\tif ( isinf( attenuationDistance ) ) {\n\t\t\treturn radiance;\n\t\t} else {\n\t\t\tvec3 attenuationCoefficient = -log( attenuationColor ) / attenuationDistance;\n\t\t\tvec3 transmittance = exp( - attenuationCoefficient * transmissionDistance );\t\t\treturn transmittance * radiance;\n\t\t}\n\t}\n\tvec4 getIBLVolumeRefraction( const in vec3 n, const in vec3 v, const in float roughness, const in vec3 diffuseColor,\n\t\tconst in vec3 specularColor, const in float specularF90, const in vec3 position, const in mat4 modelMatrix,\n\t\tconst in mat4 viewMatrix, const in mat4 projMatrix, const in float ior, const in float thickness,\n\t\tconst in vec3 attenuationColor, const in float attenuationDistance ) {\n\t\tvec3 transmissionRay = getVolumeTransmissionRay( n, v, thickness, ior, modelMatrix );\n\t\tvec3 refractedRayExit = position + transmissionRay;\n\t\tvec4 ndcPos = projMatrix * viewMatrix * vec4( refractedRayExit, 1.0 );\n\t\tvec2 refractionCoords = ndcPos.xy / ndcPos.w;\n\t\trefractionCoords += 1.0;\n\t\trefractionCoords /= 2.0;\n\t\tvec4 transmittedLight = getTransmissionSample( refractionCoords, roughness, ior );\n\t\tvec3 attenuatedColor = applyVolumeAttenuation( transmittedLight.rgb, length( transmissionRay ), attenuationColor, attenuationDistance );\n\t\tvec3 F = EnvironmentBRDF( n, v, specularColor, specularF90, roughness );\n\t\treturn vec4( ( 1.0 - F ) * attenuatedColor * diffuseColor, transmittedLight.a );\n\t}\n#endif",uv_pars_fragment:"#if ( defined( USE_UV ) && ! defined( UVS_VERTEX_ONLY ) )\n\tvarying vec2 vUv;\n#endif",uv_pars_vertex:"#ifdef USE_UV\n\t#ifdef UVS_VERTEX_ONLY\n\t\tvec2 vUv;\n\t#else\n\t\tvarying vec2 vUv;\n\t#endif\n\tuniform mat3 uvTransform;\n#endif",uv_vertex:"#ifdef USE_UV\n\tvUv = ( uvTransform * vec3( uv, 1 ) ).xy;\n#endif",uv2_pars_fragment:"#if defined( USE_LIGHTMAP ) || defined( USE_AOMAP )\n\tvarying vec2 vUv2;\n#endif",uv2_pars_vertex:"#if defined( USE_LIGHTMAP ) || defined( USE_AOMAP )\n\tattribute vec2 uv2;\n\tvarying vec2 vUv2;\n\tuniform mat3 uv2Transform;\n#endif",uv2_vertex:"#if defined( USE_LIGHTMAP ) || defined( USE_AOMAP )\n\tvUv2 = ( uv2Transform * vec3( uv2, 1 ) ).xy;\n#endif",worldpos_vertex:"#if defined( USE_ENVMAP ) || defined( DISTANCE ) || defined ( USE_SHADOWMAP ) || defined ( USE_TRANSMISSION ) || NUM_SPOT_LIGHT_COORDS > 0\n\tvec4 worldPosition = vec4( transformed, 1.0 );\n\t#ifdef USE_INSTANCING\n\t\tworldPosition = instanceMatrix * worldPosition;\n\t#endif\n\tworldPosition = modelMatrix * worldPosition;\n#endif",background_vert:"varying vec2 vUv;\nuniform mat3 uvTransform;\nvoid main() {\n\tvUv = ( uvTransform * vec3( uv, 1 ) ).xy;\n\tgl_Position = vec4( position.xy, 1.0, 1.0 );\n}",background_frag:"uniform sampler2D t2D;\nuniform float backgroundIntensity;\nvarying vec2 vUv;\nvoid main() {\n\tvec4 texColor = texture2D( t2D, vUv );\n\t#ifdef DECODE_VIDEO_TEXTURE\n\t\ttexColor = vec4( mix( pow( texColor.rgb * 0.9478672986 + vec3( 0.0521327014 ), vec3( 2.4 ) ), texColor.rgb * 0.0773993808, vec3( lessThanEqual( texColor.rgb, vec3( 0.04045 ) ) ) ), texColor.w );\n\t#endif\n\ttexColor.rgb *= backgroundIntensity;\n\tgl_FragColor = texColor;\n\t#include \n\t#include \n}",backgroundCube_vert:"varying vec3 vWorldDirection;\n#include \nvoid main() {\n\tvWorldDirection = transformDirection( position, modelMatrix );\n\t#include \n\t#include \n\tgl_Position.z = gl_Position.w;\n}",backgroundCube_frag:"#ifdef ENVMAP_TYPE_CUBE\n\tuniform samplerCube envMap;\n#elif defined( ENVMAP_TYPE_CUBE_UV )\n\tuniform sampler2D envMap;\n#endif\nuniform float flipEnvMap;\nuniform float backgroundBlurriness;\nuniform float backgroundIntensity;\nvarying vec3 vWorldDirection;\n#include \nvoid main() {\n\t#ifdef ENVMAP_TYPE_CUBE\n\t\tvec4 texColor = textureCube( envMap, vec3( flipEnvMap * vWorldDirection.x, vWorldDirection.yz ) );\n\t#elif defined( ENVMAP_TYPE_CUBE_UV )\n\t\tvec4 texColor = textureCubeUV( envMap, vWorldDirection, backgroundBlurriness );\n\t#else\n\t\tvec4 texColor = vec4( 0.0, 0.0, 0.0, 1.0 );\n\t#endif\n\ttexColor.rgb *= backgroundIntensity;\n\tgl_FragColor = texColor;\n\t#include \n\t#include \n}",cube_vert:"varying vec3 vWorldDirection;\n#include \nvoid main() {\n\tvWorldDirection = transformDirection( position, modelMatrix );\n\t#include \n\t#include \n\tgl_Position.z = gl_Position.w;\n}",cube_frag:"uniform samplerCube tCube;\nuniform float tFlip;\nuniform float opacity;\nvarying vec3 vWorldDirection;\nvoid main() {\n\tvec4 texColor = textureCube( tCube, vec3( tFlip * vWorldDirection.x, vWorldDirection.yz ) );\n\tgl_FragColor = texColor;\n\tgl_FragColor.a *= opacity;\n\t#include \n\t#include \n}",depth_vert:"#include \n#include \n#include \n#include \n#include \n#include \n#include \nvarying vec2 vHighPrecisionZW;\nvoid main() {\n\t#include \n\t#include \n\t#ifdef USE_DISPLACEMENTMAP\n\t\t#include \n\t\t#include \n\t\t#include \n\t#endif\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\tvHighPrecisionZW = gl_Position.zw;\n}",depth_frag:"#if DEPTH_PACKING == 3200\n\tuniform float opacity;\n#endif\n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \nvarying vec2 vHighPrecisionZW;\nvoid main() {\n\t#include \n\tvec4 diffuseColor = vec4( 1.0 );\n\t#if DEPTH_PACKING == 3200\n\t\tdiffuseColor.a = opacity;\n\t#endif\n\t#include \n\t#include \n\t#include \n\t#include \n\tfloat fragCoordZ = 0.5 * vHighPrecisionZW[0] / vHighPrecisionZW[1] + 0.5;\n\t#if DEPTH_PACKING == 3200\n\t\tgl_FragColor = vec4( vec3( 1.0 - fragCoordZ ), opacity );\n\t#elif DEPTH_PACKING == 3201\n\t\tgl_FragColor = packDepthToRGBA( fragCoordZ );\n\t#endif\n}",distanceRGBA_vert:"#define DISTANCE\nvarying vec3 vWorldPosition;\n#include \n#include \n#include \n#include \n#include \n#include \nvoid main() {\n\t#include \n\t#include \n\t#ifdef USE_DISPLACEMENTMAP\n\t\t#include \n\t\t#include \n\t\t#include \n\t#endif\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\tvWorldPosition = worldPosition.xyz;\n}",distanceRGBA_frag:"#define DISTANCE\nuniform vec3 referencePosition;\nuniform float nearDistance;\nuniform float farDistance;\nvarying vec3 vWorldPosition;\n#include \n#include \n#include \n#include \n#include \n#include \n#include \nvoid main () {\n\t#include \n\tvec4 diffuseColor = vec4( 1.0 );\n\t#include \n\t#include \n\t#include \n\tfloat dist = length( vWorldPosition - referencePosition );\n\tdist = ( dist - nearDistance ) / ( farDistance - nearDistance );\n\tdist = saturate( dist );\n\tgl_FragColor = packDepthToRGBA( dist );\n}",equirect_vert:"varying vec3 vWorldDirection;\n#include \nvoid main() {\n\tvWorldDirection = transformDirection( position, modelMatrix );\n\t#include \n\t#include \n}",equirect_frag:"uniform sampler2D tEquirect;\nvarying vec3 vWorldDirection;\n#include \nvoid main() {\n\tvec3 direction = normalize( vWorldDirection );\n\tvec2 sampleUV = equirectUv( direction );\n\tgl_FragColor = texture2D( tEquirect, sampleUV );\n\t#include \n\t#include \n}",linedashed_vert:"uniform float scale;\nattribute float lineDistance;\nvarying float vLineDistance;\n#include \n#include \n#include \n#include \n#include \n#include \nvoid main() {\n\tvLineDistance = scale * lineDistance;\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n}",linedashed_frag:"uniform vec3 diffuse;\nuniform float opacity;\nuniform float dashSize;\nuniform float totalSize;\nvarying float vLineDistance;\n#include \n#include \n#include \n#include \n#include \nvoid main() {\n\t#include \n\tif ( mod( vLineDistance, totalSize ) > dashSize ) {\n\t\tdiscard;\n\t}\n\tvec3 outgoingLight = vec3( 0.0 );\n\tvec4 diffuseColor = vec4( diffuse, opacity );\n\t#include \n\t#include \n\toutgoingLight = diffuseColor.rgb;\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n}",meshbasic_vert:"#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \nvoid main() {\n\t#include \n\t#include \n\t#include \n\t#include \n\t#if defined ( USE_ENVMAP ) || defined ( USE_SKINNING )\n\t\t#include \n\t\t#include \n\t\t#include \n\t\t#include \n\t\t#include \n\t#endif\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n}",meshbasic_frag:"uniform vec3 diffuse;\nuniform float opacity;\n#ifndef FLAT_SHADED\n\tvarying vec3 vNormal;\n#endif\n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \nvoid main() {\n\t#include \n\tvec4 diffuseColor = vec4( diffuse, opacity );\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\tReflectedLight reflectedLight = ReflectedLight( vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ) );\n\t#ifdef USE_LIGHTMAP\n\t\tvec4 lightMapTexel = texture2D( lightMap, vUv2 );\n\t\treflectedLight.indirectDiffuse += lightMapTexel.rgb * lightMapIntensity * RECIPROCAL_PI;\n\t#else\n\t\treflectedLight.indirectDiffuse += vec3( 1.0 );\n\t#endif\n\t#include \n\treflectedLight.indirectDiffuse *= diffuseColor.rgb;\n\tvec3 outgoingLight = reflectedLight.indirectDiffuse;\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n}",meshlambert_vert:"#define LAMBERT\nvarying vec3 vViewPosition;\n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \nvoid main() {\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\tvViewPosition = - mvPosition.xyz;\n\t#include \n\t#include \n\t#include \n\t#include \n}",meshlambert_frag:"#define LAMBERT\nuniform vec3 diffuse;\nuniform vec3 emissive;\nuniform float opacity;\n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \nvoid main() {\n\t#include \n\tvec4 diffuseColor = vec4( diffuse, opacity );\n\tReflectedLight reflectedLight = ReflectedLight( vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ) );\n\tvec3 totalEmissiveRadiance = emissive;\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\tvec3 outgoingLight = reflectedLight.directDiffuse + reflectedLight.indirectDiffuse + totalEmissiveRadiance;\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n}",meshmatcap_vert:"#define MATCAP\nvarying vec3 vViewPosition;\n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \nvoid main() {\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\tvViewPosition = - mvPosition.xyz;\n}",meshmatcap_frag:"#define MATCAP\nuniform vec3 diffuse;\nuniform float opacity;\nuniform sampler2D matcap;\nvarying vec3 vViewPosition;\n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \nvoid main() {\n\t#include \n\tvec4 diffuseColor = vec4( diffuse, opacity );\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\tvec3 viewDir = normalize( vViewPosition );\n\tvec3 x = normalize( vec3( viewDir.z, 0.0, - viewDir.x ) );\n\tvec3 y = cross( viewDir, x );\n\tvec2 uv = vec2( dot( x, normal ), dot( y, normal ) ) * 0.495 + 0.5;\n\t#ifdef USE_MATCAP\n\t\tvec4 matcapColor = texture2D( matcap, uv );\n\t#else\n\t\tvec4 matcapColor = vec4( vec3( mix( 0.2, 0.8, uv.y ) ), 1.0 );\n\t#endif\n\tvec3 outgoingLight = diffuseColor.rgb * matcapColor.rgb;\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n}",meshnormal_vert:"#define NORMAL\n#if defined( FLAT_SHADED ) || defined( USE_BUMPMAP ) || defined( TANGENTSPACE_NORMALMAP )\n\tvarying vec3 vViewPosition;\n#endif\n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \nvoid main() {\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n#if defined( FLAT_SHADED ) || defined( USE_BUMPMAP ) || defined( TANGENTSPACE_NORMALMAP )\n\tvViewPosition = - mvPosition.xyz;\n#endif\n}",meshnormal_frag:"#define NORMAL\nuniform float opacity;\n#if defined( FLAT_SHADED ) || defined( USE_BUMPMAP ) || defined( TANGENTSPACE_NORMALMAP )\n\tvarying vec3 vViewPosition;\n#endif\n#include \n#include \n#include \n#include \n#include \n#include \n#include \nvoid main() {\n\t#include \n\t#include \n\t#include \n\t#include \n\tgl_FragColor = vec4( packNormalToRGB( normal ), opacity );\n\t#ifdef OPAQUE\n\t\tgl_FragColor.a = 1.0;\n\t#endif\n}",meshphong_vert:"#define PHONG\nvarying vec3 vViewPosition;\n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \nvoid main() {\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\tvViewPosition = - mvPosition.xyz;\n\t#include \n\t#include \n\t#include \n\t#include \n}",meshphong_frag:"#define PHONG\nuniform vec3 diffuse;\nuniform vec3 emissive;\nuniform vec3 specular;\nuniform float shininess;\nuniform float opacity;\n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \nvoid main() {\n\t#include \n\tvec4 diffuseColor = vec4( diffuse, opacity );\n\tReflectedLight reflectedLight = ReflectedLight( vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ) );\n\tvec3 totalEmissiveRadiance = emissive;\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\tvec3 outgoingLight = reflectedLight.directDiffuse + reflectedLight.indirectDiffuse + reflectedLight.directSpecular + reflectedLight.indirectSpecular + totalEmissiveRadiance;\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n}",meshphysical_vert:"#define STANDARD\nvarying vec3 vViewPosition;\n#ifdef USE_TRANSMISSION\n\tvarying vec3 vWorldPosition;\n#endif\n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \nvoid main() {\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\tvViewPosition = - mvPosition.xyz;\n\t#include \n\t#include \n\t#include \n#ifdef USE_TRANSMISSION\n\tvWorldPosition = worldPosition.xyz;\n#endif\n}",meshphysical_frag:"#define STANDARD\n#ifdef PHYSICAL\n\t#define IOR\n\t#define SPECULAR\n#endif\nuniform vec3 diffuse;\nuniform vec3 emissive;\nuniform float roughness;\nuniform float metalness;\nuniform float opacity;\n#ifdef IOR\n\tuniform float ior;\n#endif\n#ifdef SPECULAR\n\tuniform float specularIntensity;\n\tuniform vec3 specularColor;\n\t#ifdef USE_SPECULARINTENSITYMAP\n\t\tuniform sampler2D specularIntensityMap;\n\t#endif\n\t#ifdef USE_SPECULARCOLORMAP\n\t\tuniform sampler2D specularColorMap;\n\t#endif\n#endif\n#ifdef USE_CLEARCOAT\n\tuniform float clearcoat;\n\tuniform float clearcoatRoughness;\n#endif\n#ifdef USE_IRIDESCENCE\n\tuniform float iridescence;\n\tuniform float iridescenceIOR;\n\tuniform float iridescenceThicknessMinimum;\n\tuniform float iridescenceThicknessMaximum;\n#endif\n#ifdef USE_SHEEN\n\tuniform vec3 sheenColor;\n\tuniform float sheenRoughness;\n\t#ifdef USE_SHEENCOLORMAP\n\t\tuniform sampler2D sheenColorMap;\n\t#endif\n\t#ifdef USE_SHEENROUGHNESSMAP\n\t\tuniform sampler2D sheenRoughnessMap;\n\t#endif\n#endif\nvarying vec3 vViewPosition;\n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \nvoid main() {\n\t#include \n\tvec4 diffuseColor = vec4( diffuse, opacity );\n\tReflectedLight reflectedLight = ReflectedLight( vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ) );\n\tvec3 totalEmissiveRadiance = emissive;\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\tvec3 totalDiffuse = reflectedLight.directDiffuse + reflectedLight.indirectDiffuse;\n\tvec3 totalSpecular = reflectedLight.directSpecular + reflectedLight.indirectSpecular;\n\t#include \n\tvec3 outgoingLight = totalDiffuse + totalSpecular + totalEmissiveRadiance;\n\t#ifdef USE_SHEEN\n\t\tfloat sheenEnergyComp = 1.0 - 0.157 * max3( material.sheenColor );\n\t\toutgoingLight = outgoingLight * sheenEnergyComp + sheenSpecular;\n\t#endif\n\t#ifdef USE_CLEARCOAT\n\t\tfloat dotNVcc = saturate( dot( geometry.clearcoatNormal, geometry.viewDir ) );\n\t\tvec3 Fcc = F_Schlick( material.clearcoatF0, material.clearcoatF90, dotNVcc );\n\t\toutgoingLight = outgoingLight * ( 1.0 - material.clearcoat * Fcc ) + clearcoatSpecular * material.clearcoat;\n\t#endif\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n}",meshtoon_vert:"#define TOON\nvarying vec3 vViewPosition;\n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \nvoid main() {\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\tvViewPosition = - mvPosition.xyz;\n\t#include \n\t#include \n\t#include \n}",meshtoon_frag:"#define TOON\nuniform vec3 diffuse;\nuniform vec3 emissive;\nuniform float opacity;\n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \nvoid main() {\n\t#include \n\tvec4 diffuseColor = vec4( diffuse, opacity );\n\tReflectedLight reflectedLight = ReflectedLight( vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ) );\n\tvec3 totalEmissiveRadiance = emissive;\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\tvec3 outgoingLight = reflectedLight.directDiffuse + reflectedLight.indirectDiffuse + totalEmissiveRadiance;\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n}",points_vert:"uniform float size;\nuniform float scale;\n#include \n#include \n#include \n#include \n#include \n#include \nvoid main() {\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\tgl_PointSize = size;\n\t#ifdef USE_SIZEATTENUATION\n\t\tbool isPerspective = isPerspectiveMatrix( projectionMatrix );\n\t\tif ( isPerspective ) gl_PointSize *= ( scale / - mvPosition.z );\n\t#endif\n\t#include \n\t#include \n\t#include \n\t#include \n}",points_frag:"uniform vec3 diffuse;\nuniform float opacity;\n#include \n#include \n#include \n#include \n#include \n#include \n#include \nvoid main() {\n\t#include \n\tvec3 outgoingLight = vec3( 0.0 );\n\tvec4 diffuseColor = vec4( diffuse, opacity );\n\t#include \n\t#include \n\t#include \n\t#include \n\toutgoingLight = diffuseColor.rgb;\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n}",shadow_vert:"#include \n#include \n#include \n#include \n#include \n#include \nvoid main() {\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n}",shadow_frag:"uniform vec3 color;\nuniform float opacity;\n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \nvoid main() {\n\t#include \n\tgl_FragColor = vec4( color, opacity * ( 1.0 - getShadowMask() ) );\n\t#include \n\t#include \n\t#include \n}",sprite_vert:"uniform float rotation;\nuniform vec2 center;\n#include \n#include \n#include \n#include \n#include \nvoid main() {\n\t#include \n\tvec4 mvPosition = modelViewMatrix * vec4( 0.0, 0.0, 0.0, 1.0 );\n\tvec2 scale;\n\tscale.x = length( vec3( modelMatrix[ 0 ].x, modelMatrix[ 0 ].y, modelMatrix[ 0 ].z ) );\n\tscale.y = length( vec3( modelMatrix[ 1 ].x, modelMatrix[ 1 ].y, modelMatrix[ 1 ].z ) );\n\t#ifndef USE_SIZEATTENUATION\n\t\tbool isPerspective = isPerspectiveMatrix( projectionMatrix );\n\t\tif ( isPerspective ) scale *= - mvPosition.z;\n\t#endif\n\tvec2 alignedPosition = ( position.xy - ( center - vec2( 0.5 ) ) ) * scale;\n\tvec2 rotatedPosition;\n\trotatedPosition.x = cos( rotation ) * alignedPosition.x - sin( rotation ) * alignedPosition.y;\n\trotatedPosition.y = sin( rotation ) * alignedPosition.x + cos( rotation ) * alignedPosition.y;\n\tmvPosition.xy += rotatedPosition;\n\tgl_Position = projectionMatrix * mvPosition;\n\t#include \n\t#include \n\t#include \n}",sprite_frag:"uniform vec3 diffuse;\nuniform float opacity;\n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \nvoid main() {\n\t#include \n\tvec3 outgoingLight = vec3( 0.0 );\n\tvec4 diffuseColor = vec4( diffuse, opacity );\n\t#include \n\t#include \n\t#include \n\t#include \n\toutgoingLight = diffuseColor.rgb;\n\t#include \n\t#include \n\t#include \n\t#include \n}"},Br={common:{diffuse:{value:new zn(16777215)},opacity:{value:1},map:{value:null},uvTransform:{value:new je},uv2Transform:{value:new je},alphaMap:{value:null},alphaTest:{value:0}},specularmap:{specularMap:{value:null}},envmap:{envMap:{value:null},flipEnvMap:{value:-1},reflectivity:{value:1},ior:{value:1.5},refractionRatio:{value:.98}},aomap:{aoMap:{value:null},aoMapIntensity:{value:1}},lightmap:{lightMap:{value:null},lightMapIntensity:{value:1}},emissivemap:{emissiveMap:{value:null}},bumpmap:{bumpMap:{value:null},bumpScale:{value:1}},normalmap:{normalMap:{value:null},normalScale:{value:new We(1,1)}},displacementmap:{displacementMap:{value:null},displacementScale:{value:1},displacementBias:{value:0}},roughnessmap:{roughnessMap:{value:null}},metalnessmap:{metalnessMap:{value:null}},gradientmap:{gradientMap:{value:null}},fog:{fogDensity:{value:25e-5},fogNear:{value:1},fogFar:{value:2e3},fogColor:{value:new zn(16777215)}},lights:{ambientLightColor:{value:[]},lightProbe:{value:[]},directionalLights:{value:[],properties:{direction:{},color:{}}},directionalLightShadows:{value:[],properties:{shadowBias:{},shadowNormalBias:{},shadowRadius:{},shadowMapSize:{}}},directionalShadowMap:{value:[]},directionalShadowMatrix:{value:[]},spotLights:{value:[],properties:{color:{},position:{},direction:{},distance:{},coneCos:{},penumbraCos:{},decay:{}}},spotLightShadows:{value:[],properties:{shadowBias:{},shadowNormalBias:{},shadowRadius:{},shadowMapSize:{}}},spotLightMap:{value:[]},spotShadowMap:{value:[]},spotLightMatrix:{value:[]},pointLights:{value:[],properties:{color:{},position:{},decay:{},distance:{}}},pointLightShadows:{value:[],properties:{shadowBias:{},shadowNormalBias:{},shadowRadius:{},shadowMapSize:{},shadowCameraNear:{},shadowCameraFar:{}}},pointShadowMap:{value:[]},pointShadowMatrix:{value:[]},hemisphereLights:{value:[],properties:{direction:{},skyColor:{},groundColor:{}}},rectAreaLights:{value:[],properties:{color:{},position:{},width:{},height:{}}},ltc_1:{value:null},ltc_2:{value:null}},points:{diffuse:{value:new zn(16777215)},opacity:{value:1},size:{value:1},scale:{value:1},map:{value:null},alphaMap:{value:null},alphaTest:{value:0},uvTransform:{value:new je}},sprite:{diffuse:{value:new zn(16777215)},opacity:{value:1},center:{value:new We(.5,.5)},rotation:{value:0},map:{value:null},alphaMap:{value:null},alphaTest:{value:0},uvTransform:{value:new je}}},Fr={basic:{uniforms:vr([Br.common,Br.specularmap,Br.envmap,Br.aomap,Br.lightmap,Br.fog]),vertexShader:Ur.meshbasic_vert,fragmentShader:Ur.meshbasic_frag},lambert:{uniforms:vr([Br.common,Br.specularmap,Br.envmap,Br.aomap,Br.lightmap,Br.emissivemap,Br.bumpmap,Br.normalmap,Br.displacementmap,Br.fog,Br.lights,{emissive:{value:new zn(0)}}]),vertexShader:Ur.meshlambert_vert,fragmentShader:Ur.meshlambert_frag},phong:{uniforms:vr([Br.common,Br.specularmap,Br.envmap,Br.aomap,Br.lightmap,Br.emissivemap,Br.bumpmap,Br.normalmap,Br.displacementmap,Br.fog,Br.lights,{emissive:{value:new zn(0)},specular:{value:new zn(1118481)},shininess:{value:30}}]),vertexShader:Ur.meshphong_vert,fragmentShader:Ur.meshphong_frag},standard:{uniforms:vr([Br.common,Br.envmap,Br.aomap,Br.lightmap,Br.emissivemap,Br.bumpmap,Br.normalmap,Br.displacementmap,Br.roughnessmap,Br.metalnessmap,Br.fog,Br.lights,{emissive:{value:new zn(0)},roughness:{value:1},metalness:{value:0},envMapIntensity:{value:1}}]),vertexShader:Ur.meshphysical_vert,fragmentShader:Ur.meshphysical_frag},toon:{uniforms:vr([Br.common,Br.aomap,Br.lightmap,Br.emissivemap,Br.bumpmap,Br.normalmap,Br.displacementmap,Br.gradientmap,Br.fog,Br.lights,{emissive:{value:new zn(0)}}]),vertexShader:Ur.meshtoon_vert,fragmentShader:Ur.meshtoon_frag},matcap:{uniforms:vr([Br.common,Br.bumpmap,Br.normalmap,Br.displacementmap,Br.fog,{matcap:{value:null}}]),vertexShader:Ur.meshmatcap_vert,fragmentShader:Ur.meshmatcap_frag},points:{uniforms:vr([Br.points,Br.fog]),vertexShader:Ur.points_vert,fragmentShader:Ur.points_frag},dashed:{uniforms:vr([Br.common,Br.fog,{scale:{value:1},dashSize:{value:1},totalSize:{value:2}}]),vertexShader:Ur.linedashed_vert,fragmentShader:Ur.linedashed_frag},depth:{uniforms:vr([Br.common,Br.displacementmap]),vertexShader:Ur.depth_vert,fragmentShader:Ur.depth_frag},normal:{uniforms:vr([Br.common,Br.bumpmap,Br.normalmap,Br.displacementmap,{opacity:{value:1}}]),vertexShader:Ur.meshnormal_vert,fragmentShader:Ur.meshnormal_frag},sprite:{uniforms:vr([Br.sprite,Br.fog]),vertexShader:Ur.sprite_vert,fragmentShader:Ur.sprite_frag},background:{uniforms:{uvTransform:{value:new je},t2D:{value:null},backgroundIntensity:{value:1}},vertexShader:Ur.background_vert,fragmentShader:Ur.background_frag},backgroundCube:{uniforms:{envMap:{value:null},flipEnvMap:{value:-1},backgroundBlurriness:{value:0},backgroundIntensity:{value:1}},vertexShader:Ur.backgroundCube_vert,fragmentShader:Ur.backgroundCube_frag},cube:{uniforms:{tCube:{value:null},tFlip:{value:-1},opacity:{value:1}},vertexShader:Ur.cube_vert,fragmentShader:Ur.cube_frag},equirect:{uniforms:{tEquirect:{value:null}},vertexShader:Ur.equirect_vert,fragmentShader:Ur.equirect_frag},distanceRGBA:{uniforms:vr([Br.common,Br.displacementmap,{referencePosition:{value:new $e},nearDistance:{value:1},farDistance:{value:1e3}}]),vertexShader:Ur.distanceRGBA_vert,fragmentShader:Ur.distanceRGBA_frag},shadow:{uniforms:vr([Br.lights,Br.fog,{color:{value:new zn(0)},opacity:{value:1}}]),vertexShader:Ur.shadow_vert,fragmentShader:Ur.shadow_frag}};Fr.physical={uniforms:vr([Fr.standard.uniforms,{clearcoat:{value:0},clearcoatMap:{value:null},clearcoatRoughness:{value:0},clearcoatRoughnessMap:{value:null},clearcoatNormalScale:{value:new We(1,1)},clearcoatNormalMap:{value:null},iridescence:{value:0},iridescenceMap:{value:null},iridescenceIOR:{value:1.3},iridescenceThicknessMinimum:{value:100},iridescenceThicknessMaximum:{value:400},iridescenceThicknessMap:{value:null},sheen:{value:0},sheenColor:{value:new zn(0)},sheenColorMap:{value:null},sheenRoughness:{value:1},sheenRoughnessMap:{value:null},transmission:{value:0},transmissionMap:{value:null},transmissionSamplerSize:{value:new We},transmissionSamplerMap:{value:null},thickness:{value:0},thicknessMap:{value:null},attenuationDistance:{value:0},attenuationColor:{value:new zn(0)},specularIntensity:{value:1},specularIntensityMap:{value:null},specularColor:{value:new zn(1,1,1)},specularColorMap:{value:null}}]),vertexShader:Ur.meshphysical_vert,fragmentShader:Ur.meshphysical_frag};const kr={r:0,b:0,g:0};function Gr(t,e,i,n,r,s,a){const o=new zn(0);let h,u,d=!0===s?0:1,p=null,m=0,f=null;function g(e,i){e.getRGB(kr,xr(t)),n.buffers.color.setClear(kr.r,kr.g,kr.b,i,a)}return{getClearColor:function(){return o},setClearColor:function(t,e=1){o.set(t),d=e,g(o,d)},getClearAlpha:function(){return d},setClearAlpha:function(t){d=t,g(o,d)},render:function(n,s){let a=!1,v=!0===s.isScene?s.background:null;if(v&&v.isTexture){v=(s.backgroundBlurriness>0?i:e).get(v)}const x=t.xr,_=x.getSession&&x.getSession();_&&"additive"===_.environmentBlendMode&&(v=null),null===v?g(o,d):v&&v.isColor&&(g(v,1),a=!0),(t.autoClear||a)&&t.clear(t.autoClearColor,t.autoClearDepth,t.autoClearStencil),v&&(v.isCubeTexture||v.mapping===et)?(void 0===u&&(u=new pr(new fr(1,1,1),new yr({name:"BackgroundCubeMaterial",uniforms:gr(Fr.backgroundCube.uniforms),vertexShader:Fr.backgroundCube.vertexShader,fragmentShader:Fr.backgroundCube.fragmentShader,side:c,depthTest:!1,depthWrite:!1,fog:!1})),u.geometry.deleteAttribute("normal"),u.geometry.deleteAttribute("uv"),u.onBeforeRender=function(t,e,i){this.matrixWorld.copyPosition(i.matrixWorld)},Object.defineProperty(u.material,"envMap",{get:function(){return this.uniforms.envMap.value}}),r.update(u)),u.material.uniforms.envMap.value=v,u.material.uniforms.flipEnvMap.value=v.isCubeTexture&&!1===v.isRenderTargetTexture?-1:1,u.material.uniforms.backgroundBlurriness.value=s.backgroundBlurriness,u.material.uniforms.backgroundIntensity.value=s.backgroundIntensity,u.material.toneMapped=v.encoding!==xe,p===v&&m===v.version&&f===t.toneMapping||(u.material.needsUpdate=!0,p=v,m=v.version,f=t.toneMapping),u.layers.enableAll(),n.unshift(u,u.geometry,u.material,0,0,null)):v&&v.isTexture&&(void 0===h&&(h=new pr(new zr(2,2),new yr({name:"BackgroundMaterial",uniforms:gr(Fr.background.uniforms),vertexShader:Fr.background.vertexShader,fragmentShader:Fr.background.fragmentShader,side:l,depthTest:!1,depthWrite:!1,fog:!1})),h.geometry.deleteAttribute("normal"),Object.defineProperty(h.material,"map",{get:function(){return this.uniforms.t2D.value}}),r.update(h)),h.material.uniforms.t2D.value=v,h.material.uniforms.backgroundIntensity.value=s.backgroundIntensity,h.material.toneMapped=v.encoding!==xe,!0===v.matrixAutoUpdate&&v.updateMatrix(),h.material.uniforms.uvTransform.value.copy(v.matrix),p===v&&m===v.version&&f===t.toneMapping||(h.material.needsUpdate=!0,p=v,m=v.version,f=t.toneMapping),h.layers.enableAll(),n.unshift(h,h.geometry,h.material,0,0,null))}}}function Vr(t,e,i,n){const r=t.getParameter(34921),s=n.isWebGL2?null:e.get("OES_vertex_array_object"),a=n.isWebGL2||null!==s,o={},l=p(null);let c=l,h=!1;function u(e){return n.isWebGL2?t.bindVertexArray(e):s.bindVertexArrayOES(e)}function d(e){return n.isWebGL2?t.deleteVertexArray(e):s.deleteVertexArrayOES(e)}function p(t){const e=[],i=[],n=[];for(let t=0;t=0){const i=r[e];let n=s[e];if(void 0===n&&("instanceMatrix"===e&&t.instanceMatrix&&(n=t.instanceMatrix),"instanceColor"===e&&t.instanceColor&&(n=t.instanceColor)),void 0===i)return!0;if(i.attribute!==n)return!0;if(n&&i.data!==n.data)return!0;a++}}return c.attributesNum!==a||c.index!==n}(r,_,d,y),M&&function(t,e,i,n){const r={},s=e.attributes;let a=0;const o=i.getAttributes();for(const e in o){if(o[e].location>=0){let i=s[e];void 0===i&&("instanceMatrix"===e&&t.instanceMatrix&&(i=t.instanceMatrix),"instanceColor"===e&&t.instanceColor&&(i=t.instanceColor));const n={};n.attribute=i,i&&i.data&&(n.data=i.data),r[e]=n,a++}}c.attributes=r,c.attributesNum=a,c.index=n}(r,_,d,y)}else{const t=!0===l.wireframe;c.geometry===_.id&&c.program===d.id&&c.wireframe===t||(c.geometry=_.id,c.program=d.id,c.wireframe=t,M=!0)}null!==y&&i.update(y,34963),(M||h)&&(h=!1,function(r,s,a,o){if(!1===n.isWebGL2&&(r.isInstancedMesh||o.isInstancedBufferGeometry)&&null===e.get("ANGLE_instanced_arrays"))return;m();const l=o.attributes,c=a.getAttributes(),h=s.defaultAttributeValues;for(const e in c){const n=c[e];if(n.location>=0){let s=l[e];if(void 0===s&&("instanceMatrix"===e&&r.instanceMatrix&&(s=r.instanceMatrix),"instanceColor"===e&&r.instanceColor&&(s=r.instanceColor)),void 0!==s){const e=s.normalized,a=s.itemSize,l=i.get(s);if(void 0===l)continue;const c=l.buffer,h=l.type,u=l.bytesPerElement;if(s.isInterleavedBufferAttribute){const i=s.data,l=i.stride,d=s.offset;if(i.isInstancedInterleavedBuffer){for(let t=0;t0&&t.getShaderPrecisionFormat(35632,36338).precision>0)return"highp";e="mediump"}return"mediump"===e&&t.getShaderPrecisionFormat(35633,36337).precision>0&&t.getShaderPrecisionFormat(35632,36337).precision>0?"mediump":"lowp"}const s="undefined"!=typeof WebGL2RenderingContext&&t instanceof WebGL2RenderingContext;let a=void 0!==i.precision?i.precision:"highp";const o=r(a);o!==a&&(console.warn("THREE.WebGLRenderer:",a,"not supported, using",o,"instead."),a=o);const l=s||e.has("WEBGL_draw_buffers"),c=!0===i.logarithmicDepthBuffer,h=t.getParameter(34930),u=t.getParameter(35660),d=t.getParameter(3379),p=t.getParameter(34076),m=t.getParameter(34921),f=t.getParameter(36347),g=t.getParameter(36348),v=t.getParameter(36349),x=u>0,_=s||e.has("OES_texture_float");return{isWebGL2:s,drawBuffers:l,getMaxAnisotropy:function(){if(void 0!==n)return n;if(!0===e.has("EXT_texture_filter_anisotropic")){const i=e.get("EXT_texture_filter_anisotropic");n=t.getParameter(i.MAX_TEXTURE_MAX_ANISOTROPY_EXT)}else n=0;return n},getMaxPrecision:r,precision:a,logarithmicDepthBuffer:c,maxTextures:h,maxVertexTextures:u,maxTextureSize:d,maxCubemapSize:p,maxAttributes:m,maxVertexUniforms:f,maxVaryings:g,maxFragmentUniforms:v,vertexTextures:x,floatFragmentTextures:_,floatVertexTextures:x&&_,maxSamples:s?t.getParameter(36183):0}}function jr(t){const e=this;let i=null,n=0,r=!1,s=!1;const a=new Rr,o=new je,l={value:null,needsUpdate:!1};function c(t,i,n,r){const s=null!==t?t.length:0;let c=null;if(0!==s){if(c=l.value,!0!==r||null===c){const e=n+4*s,r=i.matrixWorldInverse;o.getNormalMatrix(r),(null===c||c.length0);e.numPlanes=n,e.numIntersection=0}();else{const t=s?0:n,e=4*t;let r=m.clippingState||null;l.value=r,r=c(u,o,e,h);for(let t=0;t!==e;++t)r[t]=i[t];m.clippingState=r,this.numIntersection=d?this.numPlanes:0,this.numPlanes+=t}}}function qr(t){let e=new WeakMap;function i(t,e){return e===Q?t.mapping=K:e===tt&&(t.mapping=$),t}function n(t){const i=t.target;i.removeEventListener("dispose",n);const r=e.get(i);void 0!==r&&(e.delete(i),r.dispose())}return{get:function(r){if(r&&r.isTexture&&!1===r.isRenderTargetTexture){const s=r.mapping;if(s===Q||s===tt){if(e.has(r)){return i(e.get(r).texture,r.mapping)}{const s=r.image;if(s&&s.height>0){const a=new Ar(s.height/2);return a.fromEquirectangularTexture(t,r),e.set(r,a),r.addEventListener("dispose",n),i(a.texture,r.mapping)}return null}}}return r},dispose:function(){e=new WeakMap}}}class Xr extends Mr{constructor(t=-1,e=1,i=1,n=-1,r=.1,s=2e3){super(),this.isOrthographicCamera=!0,this.type="OrthographicCamera",this.zoom=1,this.view=null,this.left=t,this.right=e,this.top=i,this.bottom=n,this.near=r,this.far=s,this.updateProjectionMatrix()}copy(t,e){return super.copy(t,e),this.left=t.left,this.right=t.right,this.top=t.top,this.bottom=t.bottom,this.near=t.near,this.far=t.far,this.zoom=t.zoom,this.view=null===t.view?null:Object.assign({},t.view),this}setViewOffset(t,e,i,n,r,s){null===this.view&&(this.view={enabled:!0,fullWidth:1,fullHeight:1,offsetX:0,offsetY:0,width:1,height:1}),this.view.enabled=!0,this.view.fullWidth=t,this.view.fullHeight=e,this.view.offsetX=i,this.view.offsetY=n,this.view.width=r,this.view.height=s,this.updateProjectionMatrix()}clearViewOffset(){null!==this.view&&(this.view.enabled=!1),this.updateProjectionMatrix()}updateProjectionMatrix(){const t=(this.right-this.left)/(2*this.zoom),e=(this.top-this.bottom)/(2*this.zoom),i=(this.right+this.left)/2,n=(this.top+this.bottom)/2;let r=i-t,s=i+t,a=n+e,o=n-e;if(null!==this.view&&this.view.enabled){const t=(this.right-this.left)/this.view.fullWidth/this.zoom,e=(this.top-this.bottom)/this.view.fullHeight/this.zoom;r+=t*this.view.offsetX,s=r+t*this.view.width,a-=e*this.view.offsetY,o=a-e*this.view.height}this.projectionMatrix.makeOrthographic(r,s,a,o,this.near,this.far),this.projectionMatrixInverse.copy(this.projectionMatrix).invert()}toJSON(t){const e=super.toJSON(t);return e.object.zoom=this.zoom,e.object.left=this.left,e.object.right=this.right,e.object.top=this.top,e.object.bottom=this.bottom,e.object.near=this.near,e.object.far=this.far,null!==this.view&&(e.object.view=Object.assign({},this.view)),e}}const Yr=4,Zr=[.125,.215,.35,.446,.526,.582],Jr=20,Kr=new Xr,$r=new zn;let Qr=null;const ts=(1+Math.sqrt(5))/2,es=1/ts,is=[new $e(1,1,1),new $e(-1,1,1),new $e(1,1,-1),new $e(-1,1,-1),new $e(0,ts,es),new $e(0,ts,-es),new $e(es,0,ts),new $e(-es,0,ts),new $e(ts,es,0),new $e(-ts,es,0)];class ns{constructor(t){this._renderer=t,this._pingPongRenderTarget=null,this._lodMax=0,this._cubeSize=0,this._lodPlanes=[],this._sizeLods=[],this._sigmas=[],this._blurMaterial=null,this._cubemapMaterial=null,this._equirectMaterial=null,this._compileMaterial(this._blurMaterial)}fromScene(t,e=0,i=.1,n=100){Qr=this._renderer.getRenderTarget(),this._setSize(256);const r=this._allocateTargets();return r.depthBuffer=!0,this._sceneToCubeUV(t,i,n,r),e>0&&this._blur(r,0,0,e),this._applyPMREM(r),this._cleanup(r),r}fromEquirectangular(t,e=null){return this._fromTexture(t,e)}fromCubemap(t,e=null){return this._fromTexture(t,e)}compileCubemapShader(){null===this._cubemapMaterial&&(this._cubemapMaterial=os(),this._compileMaterial(this._cubemapMaterial))}compileEquirectangularShader(){null===this._equirectMaterial&&(this._equirectMaterial=as(),this._compileMaterial(this._equirectMaterial))}dispose(){this._dispose(),null!==this._cubemapMaterial&&this._cubemapMaterial.dispose(),null!==this._equirectMaterial&&this._equirectMaterial.dispose()}_setSize(t){this._lodMax=Math.floor(Math.log2(t)),this._cubeSize=Math.pow(2,this._lodMax)}_dispose(){null!==this._blurMaterial&&this._blurMaterial.dispose(),null!==this._pingPongRenderTarget&&this._pingPongRenderTarget.dispose();for(let t=0;tt-Yr?o=Zr[a-t+Yr-1]:0===a&&(o=0),n.push(o);const l=1/(s-2),c=-l,h=1+l,u=[c,c,h,c,h,h,c,c,h,h,c,h],d=6,p=6,m=3,f=2,g=1,v=new Float32Array(m*p*d),x=new Float32Array(f*p*d),_=new Float32Array(g*p*d);for(let t=0;t2?0:-1,n=[e,i,0,e+2/3,i,0,e+2/3,i+1,0,e,i,0,e+2/3,i+1,0,e,i+1,0];v.set(n,m*p*t),x.set(u,f*p*t);const r=[t,t,t,t,t,t];_.set(r,g*p*t)}const y=new $n;y.setAttribute("position",new Gn(v,m)),y.setAttribute("uv",new Gn(x,f)),y.setAttribute("faceIndex",new Gn(_,g)),e.push(y),r>Yr&&r--}return{lodPlanes:e,sizeLods:i,sigmas:n}}(n)),this._blurMaterial=function(t,e,i){const n=new Float32Array(Jr),r=new $e(0,1,0),s=new yr({name:"SphericalGaussianBlur",defines:{n:Jr,CUBEUV_TEXEL_WIDTH:1/e,CUBEUV_TEXEL_HEIGHT:1/i,CUBEUV_MAX_MIP:`${t}.0`},uniforms:{envMap:{value:null},samples:{value:1},weights:{value:n},latitudinal:{value:!1},dTheta:{value:0},mipInt:{value:0},poleAxis:{value:r}},vertexShader:ls(),fragmentShader:"\n\n\t\t\tprecision mediump float;\n\t\t\tprecision mediump int;\n\n\t\t\tvarying vec3 vOutputDirection;\n\n\t\t\tuniform sampler2D envMap;\n\t\t\tuniform int samples;\n\t\t\tuniform float weights[ n ];\n\t\t\tuniform bool latitudinal;\n\t\t\tuniform float dTheta;\n\t\t\tuniform float mipInt;\n\t\t\tuniform vec3 poleAxis;\n\n\t\t\t#define ENVMAP_TYPE_CUBE_UV\n\t\t\t#include \n\n\t\t\tvec3 getSample( float theta, vec3 axis ) {\n\n\t\t\t\tfloat cosTheta = cos( theta );\n\t\t\t\t// Rodrigues' axis-angle rotation\n\t\t\t\tvec3 sampleDirection = vOutputDirection * cosTheta\n\t\t\t\t\t+ cross( axis, vOutputDirection ) * sin( theta )\n\t\t\t\t\t+ axis * dot( axis, vOutputDirection ) * ( 1.0 - cosTheta );\n\n\t\t\t\treturn bilinearCubeUV( envMap, sampleDirection, mipInt );\n\n\t\t\t}\n\n\t\t\tvoid main() {\n\n\t\t\t\tvec3 axis = latitudinal ? poleAxis : cross( poleAxis, vOutputDirection );\n\n\t\t\t\tif ( all( equal( axis, vec3( 0.0 ) ) ) ) {\n\n\t\t\t\t\taxis = vec3( vOutputDirection.z, 0.0, - vOutputDirection.x );\n\n\t\t\t\t}\n\n\t\t\t\taxis = normalize( axis );\n\n\t\t\t\tgl_FragColor = vec4( 0.0, 0.0, 0.0, 1.0 );\n\t\t\t\tgl_FragColor.rgb += weights[ 0 ] * getSample( 0.0, axis );\n\n\t\t\t\tfor ( int i = 1; i < n; i++ ) {\n\n\t\t\t\t\tif ( i >= samples ) {\n\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\t}\n\n\t\t\t\t\tfloat theta = dTheta * float( i );\n\t\t\t\t\tgl_FragColor.rgb += weights[ i ] * getSample( -1.0 * theta, axis );\n\t\t\t\t\tgl_FragColor.rgb += weights[ i ] * getSample( theta, axis );\n\n\t\t\t\t}\n\n\t\t\t}\n\t\t",blending:u,depthTest:!1,depthWrite:!1});return s}(n,t,e)}return n}_compileMaterial(t){const e=new pr(this._lodPlanes[0],t);this._renderer.compile(e,Kr)}_sceneToCubeUV(t,e,i,n){const r=new br(90,1,e,i),s=[1,-1,1,1,1,1],a=[1,1,1,-1,-1,-1],o=this._renderer,l=o.autoClear,h=o.toneMapping;o.getClearColor($r),o.toneMapping=W,o.autoClear=!1;const u=new Bn({name:"PMREM.Background",side:c,depthWrite:!1,depthTest:!1}),d=new pr(new fr,u);let p=!1;const m=t.background;m?m.isColor&&(u.color.copy(m),t.background=null,p=!0):(u.color.copy($r),p=!0);for(let e=0;e<6;e++){const i=e%3;0===i?(r.up.set(0,s[e],0),r.lookAt(a[e],0,0)):1===i?(r.up.set(0,0,s[e]),r.lookAt(0,a[e],0)):(r.up.set(0,s[e],0),r.lookAt(0,0,a[e]));const l=this._cubeSize;ss(n,i*l,e>2?l:0,l,l),o.setRenderTarget(n),p&&o.render(d,r),o.render(t,r)}d.geometry.dispose(),d.material.dispose(),o.toneMapping=h,o.autoClear=l,t.background=m}_textureToCubeUV(t,e){const i=this._renderer,n=t.mapping===K||t.mapping===$;n?(null===this._cubemapMaterial&&(this._cubemapMaterial=os()),this._cubemapMaterial.uniforms.flipEnvMap.value=!1===t.isRenderTargetTexture?-1:1):null===this._equirectMaterial&&(this._equirectMaterial=as());const r=n?this._cubemapMaterial:this._equirectMaterial,s=new pr(this._lodPlanes[0],r);r.uniforms.envMap.value=t;const a=this._cubeSize;ss(e,0,0,3*a,2*a),i.setRenderTarget(e),i.render(s,Kr)}_applyPMREM(t){const e=this._renderer,i=e.autoClear;e.autoClear=!1;for(let e=1;eJr&&console.warn(`sigmaRadians, ${r}, is too large and will clip, as it requested ${m} samples when the maximum is set to ${Jr}`);const f=[];let g=0;for(let t=0;tv-Yr?n-v+Yr:0),4*(this._cubeSize-x),3*x,2*x),o.setRenderTarget(e),o.render(c,Kr)}}function rs(t,e,i){const n=new gi(t,e,i);return n.texture.mapping=et,n.texture.name="PMREM.cubeUv",n.scissorTest=!0,n}function ss(t,e,i,n,r){t.viewport.set(e,i,n,r),t.scissor.set(e,i,n,r)}function as(){return new yr({name:"EquirectangularToCubeUV",uniforms:{envMap:{value:null}},vertexShader:ls(),fragmentShader:"\n\n\t\t\tprecision mediump float;\n\t\t\tprecision mediump int;\n\n\t\t\tvarying vec3 vOutputDirection;\n\n\t\t\tuniform sampler2D envMap;\n\n\t\t\t#include \n\n\t\t\tvoid main() {\n\n\t\t\t\tvec3 outputDirection = normalize( vOutputDirection );\n\t\t\t\tvec2 uv = equirectUv( outputDirection );\n\n\t\t\t\tgl_FragColor = vec4( texture2D ( envMap, uv ).rgb, 1.0 );\n\n\t\t\t}\n\t\t",blending:u,depthTest:!1,depthWrite:!1})}function os(){return new yr({name:"CubemapToCubeUV",uniforms:{envMap:{value:null},flipEnvMap:{value:-1}},vertexShader:ls(),fragmentShader:"\n\n\t\t\tprecision mediump float;\n\t\t\tprecision mediump int;\n\n\t\t\tuniform float flipEnvMap;\n\n\t\t\tvarying vec3 vOutputDirection;\n\n\t\t\tuniform samplerCube envMap;\n\n\t\t\tvoid main() {\n\n\t\t\t\tgl_FragColor = textureCube( envMap, vec3( flipEnvMap * vOutputDirection.x, vOutputDirection.yz ) );\n\n\t\t\t}\n\t\t",blending:u,depthTest:!1,depthWrite:!1})}function ls(){return"\n\n\t\tprecision mediump float;\n\t\tprecision mediump int;\n\n\t\tattribute float faceIndex;\n\n\t\tvarying vec3 vOutputDirection;\n\n\t\t// RH coordinate system; PMREM face-indexing convention\n\t\tvec3 getDirection( vec2 uv, float face ) {\n\n\t\t\tuv = 2.0 * uv - 1.0;\n\n\t\t\tvec3 direction = vec3( uv, 1.0 );\n\n\t\t\tif ( face == 0.0 ) {\n\n\t\t\t\tdirection = direction.zyx; // ( 1, v, u ) pos x\n\n\t\t\t} else if ( face == 1.0 ) {\n\n\t\t\t\tdirection = direction.xzy;\n\t\t\t\tdirection.xz *= -1.0; // ( -u, 1, -v ) pos y\n\n\t\t\t} else if ( face == 2.0 ) {\n\n\t\t\t\tdirection.x *= -1.0; // ( -u, v, 1 ) pos z\n\n\t\t\t} else if ( face == 3.0 ) {\n\n\t\t\t\tdirection = direction.zyx;\n\t\t\t\tdirection.xz *= -1.0; // ( -1, v, -u ) neg x\n\n\t\t\t} else if ( face == 4.0 ) {\n\n\t\t\t\tdirection = direction.xzy;\n\t\t\t\tdirection.xy *= -1.0; // ( -u, -1, v ) neg y\n\n\t\t\t} else if ( face == 5.0 ) {\n\n\t\t\t\tdirection.z *= -1.0; // ( u, v, -1 ) neg z\n\n\t\t\t}\n\n\t\t\treturn direction;\n\n\t\t}\n\n\t\tvoid main() {\n\n\t\t\tvOutputDirection = getDirection( uv, faceIndex );\n\t\t\tgl_Position = vec4( position, 1.0 );\n\n\t\t}\n\t"}function cs(t){let e=new WeakMap,i=null;function n(t){const i=t.target;i.removeEventListener("dispose",n);const r=e.get(i);void 0!==r&&(e.delete(i),r.dispose())}return{get:function(r){if(r&&r.isTexture){const s=r.mapping,a=s===Q||s===tt,o=s===K||s===$;if(a||o){if(r.isRenderTargetTexture&&!0===r.needsPMREMUpdate){r.needsPMREMUpdate=!1;let n=e.get(r);return null===i&&(i=new ns(t)),n=a?i.fromEquirectangular(r,n):i.fromCubemap(r,n),e.set(r,n),n.texture}if(e.has(r))return e.get(r).texture;{const s=r.image;if(a&&s&&s.height>0||o&&s&&function(t){let e=0;const i=6;for(let n=0;ne.maxTextureSize&&(T=Math.ceil(w/e.maxTextureSize),w=e.maxTextureSize);const A=new Float32Array(w*T*4*p),E=new vi(A,w,T,p);E.type=vt,E.needsUpdate=!0;const C=4*S;for(let R=0;R0)return t;const r=e*i;let s=bs[r];if(void 0===s&&(s=new Float32Array(r),bs[r]=s),0!==e){n.toArray(s,0);for(let n=1,r=0;n!==e;++n)r+=i,t[n].toArray(s,r)}return s}function Cs(t,e){if(t.length!==e.length)return!1;for(let i=0,n=t.length;i":" "} ${r}: ${i[t]}`)}return n.join("\n")}(t.getShaderSource(e),n)}return r}function Ta(t,e){const i=function(t){switch(t){case ve:return["Linear","( value )"];case xe:return["sRGB","( value )"];default:return console.warn("THREE.WebGLProgram: Unsupported encoding:",t),["Linear","( value )"]}}(e);return"vec4 "+t+"( vec4 value ) { return LinearTo"+i[0]+i[1]+"; }"}function Aa(t,e){let i;switch(e){case j:i="Linear";break;case q:i="Reinhard";break;case X:i="OptimizedCineon";break;case Y:i="ACESFilmic";break;case Z:i="Custom";break;default:console.warn("THREE.WebGLProgram: Unsupported toneMapping:",e),i="Linear"}return"vec3 "+t+"( vec3 color ) { return "+i+"ToneMapping( color ); }"}function Ea(t){return""!==t}function Ca(t,e){const i=e.numSpotLightShadows+e.numSpotLightMaps-e.numSpotLightShadowsWithMaps;return t.replace(/NUM_DIR_LIGHTS/g,e.numDirLights).replace(/NUM_SPOT_LIGHTS/g,e.numSpotLights).replace(/NUM_SPOT_LIGHT_MAPS/g,e.numSpotLightMaps).replace(/NUM_SPOT_LIGHT_COORDS/g,i).replace(/NUM_RECT_AREA_LIGHTS/g,e.numRectAreaLights).replace(/NUM_POINT_LIGHTS/g,e.numPointLights).replace(/NUM_HEMI_LIGHTS/g,e.numHemiLights).replace(/NUM_DIR_LIGHT_SHADOWS/g,e.numDirLightShadows).replace(/NUM_SPOT_LIGHT_SHADOWS_WITH_MAPS/g,e.numSpotLightShadowsWithMaps).replace(/NUM_SPOT_LIGHT_SHADOWS/g,e.numSpotLightShadows).replace(/NUM_POINT_LIGHT_SHADOWS/g,e.numPointLightShadows)}function La(t,e){return t.replace(/NUM_CLIPPING_PLANES/g,e.numClippingPlanes).replace(/UNION_CLIPPING_PLANES/g,e.numClippingPlanes-e.numClipIntersection)}const Ra=/^[ \t]*#include +<([\w\d./]+)>/gm;function Pa(t){return t.replace(Ra,Ia)}function Ia(t,e){const i=Ur[e];if(void 0===i)throw new Error("Can not resolve #include <"+e+">");return Pa(i)}const Da=/#pragma unroll_loop_start\s+for\s*\(\s*int\s+i\s*=\s*(\d+)\s*;\s*i\s*<\s*(\d+)\s*;\s*i\s*\+\+\s*\)\s*{([\s\S]+?)}\s+#pragma unroll_loop_end/g;function Na(t){return t.replace(Da,Oa)}function Oa(t,e,i,n){let r="";for(let t=parseInt(e);t0&&(_+="\n"),y=[g,v].filter(Ea).join("\n"),y.length>0&&(y+="\n")):(_=[za(i),"#define SHADER_NAME "+i.shaderName,v,i.instancing?"#define USE_INSTANCING":"",i.instancingColor?"#define USE_INSTANCING_COLOR":"",i.supportsVertexTextures?"#define VERTEX_TEXTURES":"",i.useFog&&i.fog?"#define USE_FOG":"",i.useFog&&i.fogExp2?"#define FOG_EXP2":"",i.map?"#define USE_MAP":"",i.envMap?"#define USE_ENVMAP":"",i.envMap?"#define "+p:"",i.lightMap?"#define USE_LIGHTMAP":"",i.aoMap?"#define USE_AOMAP":"",i.emissiveMap?"#define USE_EMISSIVEMAP":"",i.bumpMap?"#define USE_BUMPMAP":"",i.normalMap?"#define USE_NORMALMAP":"",i.normalMap&&i.objectSpaceNormalMap?"#define OBJECTSPACE_NORMALMAP":"",i.normalMap&&i.tangentSpaceNormalMap?"#define TANGENTSPACE_NORMALMAP":"",i.clearcoatMap?"#define USE_CLEARCOATMAP":"",i.clearcoatRoughnessMap?"#define USE_CLEARCOAT_ROUGHNESSMAP":"",i.clearcoatNormalMap?"#define USE_CLEARCOAT_NORMALMAP":"",i.iridescenceMap?"#define USE_IRIDESCENCEMAP":"",i.iridescenceThicknessMap?"#define USE_IRIDESCENCE_THICKNESSMAP":"",i.displacementMap&&i.supportsVertexTextures?"#define USE_DISPLACEMENTMAP":"",i.specularMap?"#define USE_SPECULARMAP":"",i.specularIntensityMap?"#define USE_SPECULARINTENSITYMAP":"",i.specularColorMap?"#define USE_SPECULARCOLORMAP":"",i.roughnessMap?"#define USE_ROUGHNESSMAP":"",i.metalnessMap?"#define USE_METALNESSMAP":"",i.alphaMap?"#define USE_ALPHAMAP":"",i.transmission?"#define USE_TRANSMISSION":"",i.transmissionMap?"#define USE_TRANSMISSIONMAP":"",i.thicknessMap?"#define USE_THICKNESSMAP":"",i.sheenColorMap?"#define USE_SHEENCOLORMAP":"",i.sheenRoughnessMap?"#define USE_SHEENROUGHNESSMAP":"",i.vertexTangents?"#define USE_TANGENT":"",i.vertexColors?"#define USE_COLOR":"",i.vertexAlphas?"#define USE_COLOR_ALPHA":"",i.vertexUvs?"#define USE_UV":"",i.uvsVertexOnly?"#define UVS_VERTEX_ONLY":"",i.flatShading?"#define FLAT_SHADED":"",i.skinning?"#define USE_SKINNING":"",i.morphTargets?"#define USE_MORPHTARGETS":"",i.morphNormals&&!1===i.flatShading?"#define USE_MORPHNORMALS":"",i.morphColors&&i.isWebGL2?"#define USE_MORPHCOLORS":"",i.morphTargetsCount>0&&i.isWebGL2?"#define MORPHTARGETS_TEXTURE":"",i.morphTargetsCount>0&&i.isWebGL2?"#define MORPHTARGETS_TEXTURE_STRIDE "+i.morphTextureStride:"",i.morphTargetsCount>0&&i.isWebGL2?"#define MORPHTARGETS_COUNT "+i.morphTargetsCount:"",i.doubleSided?"#define DOUBLE_SIDED":"",i.flipSided?"#define FLIP_SIDED":"",i.shadowMapEnabled?"#define USE_SHADOWMAP":"",i.shadowMapEnabled?"#define "+u:"",i.sizeAttenuation?"#define USE_SIZEATTENUATION":"",i.logarithmicDepthBuffer?"#define USE_LOGDEPTHBUF":"",i.logarithmicDepthBuffer&&i.rendererExtensionFragDepth?"#define USE_LOGDEPTHBUF_EXT":"","uniform mat4 modelMatrix;","uniform mat4 modelViewMatrix;","uniform mat4 projectionMatrix;","uniform mat4 viewMatrix;","uniform mat3 normalMatrix;","uniform vec3 cameraPosition;","uniform bool isOrthographic;","#ifdef USE_INSTANCING","\tattribute mat4 instanceMatrix;","#endif","#ifdef USE_INSTANCING_COLOR","\tattribute vec3 instanceColor;","#endif","attribute vec3 position;","attribute vec3 normal;","attribute vec2 uv;","#ifdef USE_TANGENT","\tattribute vec4 tangent;","#endif","#if defined( USE_COLOR_ALPHA )","\tattribute vec4 color;","#elif defined( USE_COLOR )","\tattribute vec3 color;","#endif","#if ( defined( USE_MORPHTARGETS ) && ! defined( MORPHTARGETS_TEXTURE ) )","\tattribute vec3 morphTarget0;","\tattribute vec3 morphTarget1;","\tattribute vec3 morphTarget2;","\tattribute vec3 morphTarget3;","\t#ifdef USE_MORPHNORMALS","\t\tattribute vec3 morphNormal0;","\t\tattribute vec3 morphNormal1;","\t\tattribute vec3 morphNormal2;","\t\tattribute vec3 morphNormal3;","\t#else","\t\tattribute vec3 morphTarget4;","\t\tattribute vec3 morphTarget5;","\t\tattribute vec3 morphTarget6;","\t\tattribute vec3 morphTarget7;","\t#endif","#endif","#ifdef USE_SKINNING","\tattribute vec4 skinIndex;","\tattribute vec4 skinWeight;","#endif","\n"].filter(Ea).join("\n"),y=[g,za(i),"#define SHADER_NAME "+i.shaderName,v,i.useFog&&i.fog?"#define USE_FOG":"",i.useFog&&i.fogExp2?"#define FOG_EXP2":"",i.map?"#define USE_MAP":"",i.matcap?"#define USE_MATCAP":"",i.envMap?"#define USE_ENVMAP":"",i.envMap?"#define "+d:"",i.envMap?"#define "+p:"",i.envMap?"#define "+m:"",f?"#define CUBEUV_TEXEL_WIDTH "+f.texelWidth:"",f?"#define CUBEUV_TEXEL_HEIGHT "+f.texelHeight:"",f?"#define CUBEUV_MAX_MIP "+f.maxMip+".0":"",i.lightMap?"#define USE_LIGHTMAP":"",i.aoMap?"#define USE_AOMAP":"",i.emissiveMap?"#define USE_EMISSIVEMAP":"",i.bumpMap?"#define USE_BUMPMAP":"",i.normalMap?"#define USE_NORMALMAP":"",i.normalMap&&i.objectSpaceNormalMap?"#define OBJECTSPACE_NORMALMAP":"",i.normalMap&&i.tangentSpaceNormalMap?"#define TANGENTSPACE_NORMALMAP":"",i.clearcoat?"#define USE_CLEARCOAT":"",i.clearcoatMap?"#define USE_CLEARCOATMAP":"",i.clearcoatRoughnessMap?"#define USE_CLEARCOAT_ROUGHNESSMAP":"",i.clearcoatNormalMap?"#define USE_CLEARCOAT_NORMALMAP":"",i.iridescence?"#define USE_IRIDESCENCE":"",i.iridescenceMap?"#define USE_IRIDESCENCEMAP":"",i.iridescenceThicknessMap?"#define USE_IRIDESCENCE_THICKNESSMAP":"",i.specularMap?"#define USE_SPECULARMAP":"",i.specularIntensityMap?"#define USE_SPECULARINTENSITYMAP":"",i.specularColorMap?"#define USE_SPECULARCOLORMAP":"",i.roughnessMap?"#define USE_ROUGHNESSMAP":"",i.metalnessMap?"#define USE_METALNESSMAP":"",i.alphaMap?"#define USE_ALPHAMAP":"",i.alphaTest?"#define USE_ALPHATEST":"",i.sheen?"#define USE_SHEEN":"",i.sheenColorMap?"#define USE_SHEENCOLORMAP":"",i.sheenRoughnessMap?"#define USE_SHEENROUGHNESSMAP":"",i.transmission?"#define USE_TRANSMISSION":"",i.transmissionMap?"#define USE_TRANSMISSIONMAP":"",i.thicknessMap?"#define USE_THICKNESSMAP":"",i.decodeVideoTexture?"#define DECODE_VIDEO_TEXTURE":"",i.vertexTangents?"#define USE_TANGENT":"",i.vertexColors||i.instancingColor?"#define USE_COLOR":"",i.vertexAlphas?"#define USE_COLOR_ALPHA":"",i.vertexUvs?"#define USE_UV":"",i.uvsVertexOnly?"#define UVS_VERTEX_ONLY":"",i.gradientMap?"#define USE_GRADIENTMAP":"",i.flatShading?"#define FLAT_SHADED":"",i.doubleSided?"#define DOUBLE_SIDED":"",i.flipSided?"#define FLIP_SIDED":"",i.shadowMapEnabled?"#define USE_SHADOWMAP":"",i.shadowMapEnabled?"#define "+u:"",i.premultipliedAlpha?"#define PREMULTIPLIED_ALPHA":"",i.useLegacyLights?"#define LEGACY_LIGHTS":"",i.logarithmicDepthBuffer?"#define USE_LOGDEPTHBUF":"",i.logarithmicDepthBuffer&&i.rendererExtensionFragDepth?"#define USE_LOGDEPTHBUF_EXT":"","uniform mat4 viewMatrix;","uniform vec3 cameraPosition;","uniform bool isOrthographic;",i.toneMapping!==W?"#define TONE_MAPPING":"",i.toneMapping!==W?Ur.tonemapping_pars_fragment:"",i.toneMapping!==W?Aa("toneMapping",i.toneMapping):"",i.dithering?"#define DITHERING":"",i.opaque?"#define OPAQUE":"",Ur.encodings_pars_fragment,Ta("linearToOutputTexel",i.outputEncoding),i.useDepthPacking?"#define DEPTH_PACKING "+i.depthPacking:"","\n"].filter(Ea).join("\n")),c=Pa(c),c=Ca(c,i),c=La(c,i),h=Pa(h),h=Ca(h,i),h=La(h,i),c=Na(c),h=Na(h),i.isWebGL2&&!0!==i.isRawShaderMaterial&&(M="#version 300 es\n",_=["precision mediump sampler2DArray;","#define attribute in","#define varying out","#define texture2D texture"].join("\n")+"\n"+_,y=["#define varying in",i.glslVersion===Ee?"":"layout(location = 0) out highp vec4 pc_fragColor;",i.glslVersion===Ee?"":"#define gl_FragColor pc_fragColor","#define gl_FragDepthEXT gl_FragDepth","#define texture2D texture","#define textureCube texture","#define texture2DProj textureProj","#define texture2DLodEXT textureLod","#define texture2DProjLodEXT textureProjLod","#define textureCubeLodEXT textureLod","#define texture2DGradEXT textureGrad","#define texture2DProjGradEXT textureProjGrad","#define textureCubeGradEXT textureGrad"].join("\n")+"\n"+y);const b=M+y+h,S=ba(r,35633,M+_+c),w=ba(r,35632,b);if(r.attachShader(x,S),r.attachShader(x,w),void 0!==i.index0AttributeName?r.bindAttribLocation(x,0,i.index0AttributeName):!0===i.morphTargets&&r.bindAttribLocation(x,0,"position"),r.linkProgram(x),t.debug.checkShaderErrors){const t=r.getProgramInfoLog(x).trim(),e=r.getShaderInfoLog(S).trim(),i=r.getShaderInfoLog(w).trim();let n=!0,s=!0;if(!1===r.getProgramParameter(x,35714)){n=!1;const e=wa(r,S,"vertex"),i=wa(r,w,"fragment");console.error("THREE.WebGLProgram: Shader Error "+r.getError()+" - VALIDATE_STATUS "+r.getProgramParameter(x,35715)+"\n\nProgram Info Log: "+t+"\n"+e+"\n"+i)}else""!==t?console.warn("THREE.WebGLProgram: Program Info Log:",t):""!==e&&""!==i||(s=!1);s&&(this.diagnostics={runnable:n,programLog:t,vertexShader:{log:e,prefix:_},fragmentShader:{log:i,prefix:y}})}let T,A;return r.deleteShader(S),r.deleteShader(w),this.getUniforms=function(){return void 0===T&&(T=new Ma(r,x)),T},this.getAttributes=function(){return void 0===A&&(A=function(t,e){const i={},n=t.getProgramParameter(e,35721);for(let r=0;r0,O=s.clearcoat>0,z=s.iridescence>0;return{isWebGL2:p,shaderID:T,shaderName:s.type,vertexShader:C,fragmentShader:L,defines:s.defines,customVertexShaderID:R,customFragmentShaderID:P,isRawShaderMaterial:!0===s.isRawShaderMaterial,glslVersion:s.glslVersion,precision:g,instancing:!0===_.isInstancedMesh,instancingColor:!0===_.isInstancedMesh&&null!==_.instanceColor,supportsVertexTextures:f,outputEncoding:null===D?t.outputEncoding:!0===D.isXRRenderTarget?D.texture.encoding:ve,map:!!s.map,matcap:!!s.matcap,envMap:!!S,envMapMode:S&&S.mapping,envMapCubeUVHeight:w,lightMap:!!s.lightMap,aoMap:!!s.aoMap,emissiveMap:!!s.emissiveMap,bumpMap:!!s.bumpMap,normalMap:!!s.normalMap,objectSpaceNormalMap:s.normalMapType===Me,tangentSpaceNormalMap:s.normalMapType===ye,decodeVideoTexture:!!s.map&&!0===s.map.isVideoTexture&&s.map.encoding===xe,clearcoat:O,clearcoatMap:O&&!!s.clearcoatMap,clearcoatRoughnessMap:O&&!!s.clearcoatRoughnessMap,clearcoatNormalMap:O&&!!s.clearcoatNormalMap,iridescence:z,iridescenceMap:z&&!!s.iridescenceMap,iridescenceThicknessMap:z&&!!s.iridescenceThicknessMap,displacementMap:!!s.displacementMap,roughnessMap:!!s.roughnessMap,metalnessMap:!!s.metalnessMap,specularMap:!!s.specularMap,specularIntensityMap:!!s.specularIntensityMap,specularColorMap:!!s.specularColorMap,opaque:!1===s.transparent&&s.blending===d,alphaMap:!!s.alphaMap,alphaTest:N,gradientMap:!!s.gradientMap,sheen:s.sheen>0,sheenColorMap:!!s.sheenColorMap,sheenRoughnessMap:!!s.sheenRoughnessMap,transmission:s.transmission>0,transmissionMap:!!s.transmissionMap,thicknessMap:!!s.thicknessMap,combine:s.combine,vertexTangents:!!s.normalMap&&!!M.attributes.tangent,vertexColors:s.vertexColors,vertexAlphas:!0===s.vertexColors&&!!M.attributes.color&&4===M.attributes.color.itemSize,vertexUvs:!!(s.map||s.bumpMap||s.normalMap||s.specularMap||s.alphaMap||s.emissiveMap||s.roughnessMap||s.metalnessMap||s.clearcoatMap||s.clearcoatRoughnessMap||s.clearcoatNormalMap||s.iridescenceMap||s.iridescenceThicknessMap||s.displacementMap||s.transmissionMap||s.thicknessMap||s.specularIntensityMap||s.specularColorMap||s.sheenColorMap||s.sheenRoughnessMap),uvsVertexOnly:!(s.map||s.bumpMap||s.normalMap||s.specularMap||s.alphaMap||s.emissiveMap||s.roughnessMap||s.metalnessMap||s.clearcoatNormalMap||s.iridescenceMap||s.iridescenceThicknessMap||s.transmission>0||s.transmissionMap||s.thicknessMap||s.specularIntensityMap||s.specularColorMap||s.sheen>0||s.sheenColorMap||s.sheenRoughnessMap||!s.displacementMap),fog:!!y,useFog:!0===s.fog,fogExp2:y&&y.isFogExp2,flatShading:!!s.flatShading,sizeAttenuation:s.sizeAttenuation,logarithmicDepthBuffer:m,skinning:!0===_.isSkinnedMesh,morphTargets:void 0!==M.morphAttributes.position,morphNormals:void 0!==M.morphAttributes.normal,morphColors:void 0!==M.morphAttributes.color,morphTargetsCount:E,morphTextureStride:I,numDirLights:o.directional.length,numPointLights:o.point.length,numSpotLights:o.spot.length,numSpotLightMaps:o.spotLightMap.length,numRectAreaLights:o.rectArea.length,numHemiLights:o.hemi.length,numDirLightShadows:o.directionalShadowMap.length,numPointLightShadows:o.pointShadowMap.length,numSpotLightShadows:o.spotShadowMap.length,numSpotLightShadowsWithMaps:o.numSpotLightShadowsWithMaps,numClippingPlanes:a.numPlanes,numClipIntersection:a.numIntersection,dithering:s.dithering,shadowMapEnabled:t.shadowMap.enabled&&u.length>0,shadowMapType:t.shadowMap.type,toneMapping:s.toneMapped?t.toneMapping:W,useLegacyLights:t.useLegacyLights,premultipliedAlpha:s.premultipliedAlpha,doubleSided:s.side===h,flipSided:s.side===c,useDepthPacking:!!s.depthPacking,depthPacking:s.depthPacking||0,index0AttributeName:s.index0AttributeName,extensionDerivatives:s.extensions&&s.extensions.derivatives,extensionFragDepth:s.extensions&&s.extensions.fragDepth,extensionDrawBuffers:s.extensions&&s.extensions.drawBuffers,extensionShaderTextureLOD:s.extensions&&s.extensions.shaderTextureLOD,rendererExtensionFragDepth:p||n.has("EXT_frag_depth"),rendererExtensionDrawBuffers:p||n.has("WEBGL_draw_buffers"),rendererExtensionShaderTextureLod:p||n.has("EXT_shader_texture_lod"),customProgramCacheKey:s.customProgramCacheKey()}},getProgramCacheKey:function(e){const i=[];if(e.shaderID?i.push(e.shaderID):(i.push(e.customVertexShaderID),i.push(e.customFragmentShaderID)),void 0!==e.defines)for(const t in e.defines)i.push(t),i.push(e.defines[t]);return!1===e.isRawShaderMaterial&&(!function(t,e){t.push(e.precision),t.push(e.outputEncoding),t.push(e.envMapMode),t.push(e.envMapCubeUVHeight),t.push(e.combine),t.push(e.vertexUvs),t.push(e.fogExp2),t.push(e.sizeAttenuation),t.push(e.morphTargetsCount),t.push(e.morphAttributeCount),t.push(e.numDirLights),t.push(e.numPointLights),t.push(e.numSpotLights),t.push(e.numSpotLightMaps),t.push(e.numHemiLights),t.push(e.numRectAreaLights),t.push(e.numDirLightShadows),t.push(e.numPointLightShadows),t.push(e.numSpotLightShadows),t.push(e.numSpotLightShadowsWithMaps),t.push(e.shadowMapType),t.push(e.toneMapping),t.push(e.numClippingPlanes),t.push(e.numClipIntersection),t.push(e.depthPacking)}(i,e),function(t,e){o.disableAll(),e.isWebGL2&&o.enable(0);e.supportsVertexTextures&&o.enable(1);e.instancing&&o.enable(2);e.instancingColor&&o.enable(3);e.map&&o.enable(4);e.matcap&&o.enable(5);e.envMap&&o.enable(6);e.lightMap&&o.enable(7);e.aoMap&&o.enable(8);e.emissiveMap&&o.enable(9);e.bumpMap&&o.enable(10);e.normalMap&&o.enable(11);e.objectSpaceNormalMap&&o.enable(12);e.tangentSpaceNormalMap&&o.enable(13);e.clearcoat&&o.enable(14);e.clearcoatMap&&o.enable(15);e.clearcoatRoughnessMap&&o.enable(16);e.clearcoatNormalMap&&o.enable(17);e.iridescence&&o.enable(18);e.iridescenceMap&&o.enable(19);e.iridescenceThicknessMap&&o.enable(20);e.displacementMap&&o.enable(21);e.specularMap&&o.enable(22);e.roughnessMap&&o.enable(23);e.metalnessMap&&o.enable(24);e.gradientMap&&o.enable(25);e.alphaMap&&o.enable(26);e.alphaTest&&o.enable(27);e.vertexColors&&o.enable(28);e.vertexAlphas&&o.enable(29);e.vertexUvs&&o.enable(30);e.vertexTangents&&o.enable(31);e.uvsVertexOnly&&o.enable(32);t.push(o.mask),o.disableAll(),e.fog&&o.enable(0);e.useFog&&o.enable(1);e.flatShading&&o.enable(2);e.logarithmicDepthBuffer&&o.enable(3);e.skinning&&o.enable(4);e.morphTargets&&o.enable(5);e.morphNormals&&o.enable(6);e.morphColors&&o.enable(7);e.premultipliedAlpha&&o.enable(8);e.shadowMapEnabled&&o.enable(9);e.useLegacyLights&&o.enable(10);e.doubleSided&&o.enable(11);e.flipSided&&o.enable(12);e.useDepthPacking&&o.enable(13);e.dithering&&o.enable(14);e.specularIntensityMap&&o.enable(15);e.specularColorMap&&o.enable(16);e.transmission&&o.enable(17);e.transmissionMap&&o.enable(18);e.thicknessMap&&o.enable(19);e.sheen&&o.enable(20);e.sheenColorMap&&o.enable(21);e.sheenRoughnessMap&&o.enable(22);e.decodeVideoTexture&&o.enable(23);e.opaque&&o.enable(24);t.push(o.mask)}(i,e),i.push(t.outputEncoding)),i.push(e.customProgramCacheKey),i.join()},getUniforms:function(t){const e=v[t.type];let i;if(e){const t=Fr[e];i=_r.clone(t.uniforms)}else i=t.uniforms;return i},acquireProgram:function(e,i){let n;for(let t=0,e=u.length;t0?n.push(h):!0===a.transparent?r.push(h):i.push(h)},unshift:function(t,e,a,o,l,c){const h=s(t,e,a,o,l,c);a.transmission>0?n.unshift(h):!0===a.transparent?r.unshift(h):i.unshift(h)},finish:function(){for(let i=e,n=t.length;i1&&i.sort(t||Ha),n.length>1&&n.sort(e||Wa),r.length>1&&r.sort(e||Wa)}}}function qa(){let t=new WeakMap;return{get:function(e,i){const n=t.get(e);let r;return void 0===n?(r=new ja,t.set(e,[r])):i>=n.length?(r=new ja,n.push(r)):r=n[i],r},dispose:function(){t=new WeakMap}}}function Xa(){const t={};return{get:function(e){if(void 0!==t[e.id])return t[e.id];let i;switch(e.type){case"DirectionalLight":i={direction:new $e,color:new zn};break;case"SpotLight":i={position:new $e,direction:new $e,color:new zn,distance:0,coneCos:0,penumbraCos:0,decay:0};break;case"PointLight":i={position:new $e,color:new zn,distance:0,decay:0};break;case"HemisphereLight":i={direction:new $e,skyColor:new zn,groundColor:new zn};break;case"RectAreaLight":i={color:new zn,position:new $e,halfWidth:new $e,halfHeight:new $e}}return t[e.id]=i,i}}}let Ya=0;function Za(t,e){return(e.castShadow?2:0)-(t.castShadow?2:0)+(e.map?1:0)-(t.map?1:0)}function Ja(t,e){const i=new Xa,n=function(){const t={};return{get:function(e){if(void 0!==t[e.id])return t[e.id];let i;switch(e.type){case"DirectionalLight":case"SpotLight":i={shadowBias:0,shadowNormalBias:0,shadowRadius:1,shadowMapSize:new We};break;case"PointLight":i={shadowBias:0,shadowNormalBias:0,shadowRadius:1,shadowMapSize:new We,shadowCameraNear:1,shadowCameraFar:1e3}}return t[e.id]=i,i}}}(),r={version:0,hash:{directionalLength:-1,pointLength:-1,spotLength:-1,rectAreaLength:-1,hemiLength:-1,numDirectionalShadows:-1,numPointShadows:-1,numSpotShadows:-1,numSpotMaps:-1},ambient:[0,0,0],probe:[],directional:[],directionalShadow:[],directionalShadowMap:[],directionalShadowMatrix:[],spot:[],spotLightMap:[],spotShadow:[],spotShadowMap:[],spotLightMatrix:[],rectArea:[],rectAreaLTC1:null,rectAreaLTC2:null,point:[],pointShadow:[],pointShadowMap:[],pointShadowMatrix:[],hemi:[],numSpotLightShadowsWithMaps:0};for(let t=0;t<9;t++)r.probe.push(new $e);const s=new $e,a=new qi,o=new qi;return{setup:function(s,a){let o=0,l=0,c=0;for(let t=0;t<9;t++)r.probe[t].set(0,0,0);let h=0,u=0,d=0,p=0,m=0,f=0,g=0,v=0,x=0,_=0;s.sort(Za);const y=!0===a?Math.PI:1;for(let t=0,e=s.length;t0&&(e.isWebGL2||!0===t.has("OES_texture_float_linear")?(r.rectAreaLTC1=Br.LTC_FLOAT_1,r.rectAreaLTC2=Br.LTC_FLOAT_2):!0===t.has("OES_texture_half_float_linear")?(r.rectAreaLTC1=Br.LTC_HALF_1,r.rectAreaLTC2=Br.LTC_HALF_2):console.error("THREE.WebGLRenderer: Unable to use RectAreaLight. Missing WebGL extensions.")),r.ambient[0]=o,r.ambient[1]=l,r.ambient[2]=c;const M=r.hash;M.directionalLength===h&&M.pointLength===u&&M.spotLength===d&&M.rectAreaLength===p&&M.hemiLength===m&&M.numDirectionalShadows===f&&M.numPointShadows===g&&M.numSpotShadows===v&&M.numSpotMaps===x||(r.directional.length=h,r.spot.length=d,r.rectArea.length=p,r.point.length=u,r.hemi.length=m,r.directionalShadow.length=f,r.directionalShadowMap.length=f,r.pointShadow.length=g,r.pointShadowMap.length=g,r.spotShadow.length=v,r.spotShadowMap.length=v,r.directionalShadowMatrix.length=f,r.pointShadowMatrix.length=g,r.spotLightMatrix.length=v+x-_,r.spotLightMap.length=x,r.numSpotLightShadowsWithMaps=_,M.directionalLength=h,M.pointLength=u,M.spotLength=d,M.rectAreaLength=p,M.hemiLength=m,M.numDirectionalShadows=f,M.numPointShadows=g,M.numSpotShadows=v,M.numSpotMaps=x,r.version=Ya++)},setupView:function(t,e){let i=0,n=0,l=0,c=0,h=0;const u=e.matrixWorldInverse;for(let e=0,d=t.length;e=s.length?(a=new Ka(t,e),s.push(a)):a=s[r],a},dispose:function(){i=new WeakMap}}}class Qa extends Pn{constructor(t){super(),this.isMeshDepthMaterial=!0,this.type="MeshDepthMaterial",this.depthPacking=3200,this.map=null,this.alphaMap=null,this.displacementMap=null,this.displacementScale=1,this.displacementBias=0,this.wireframe=!1,this.wireframeLinewidth=1,this.setValues(t)}copy(t){return super.copy(t),this.depthPacking=t.depthPacking,this.map=t.map,this.alphaMap=t.alphaMap,this.displacementMap=t.displacementMap,this.displacementScale=t.displacementScale,this.displacementBias=t.displacementBias,this.wireframe=t.wireframe,this.wireframeLinewidth=t.wireframeLinewidth,this}}class to extends Pn{constructor(t){super(),this.isMeshDistanceMaterial=!0,this.type="MeshDistanceMaterial",this.referencePosition=new $e,this.nearDistance=1,this.farDistance=1e3,this.map=null,this.alphaMap=null,this.displacementMap=null,this.displacementScale=1,this.displacementBias=0,this.setValues(t)}copy(t){return super.copy(t),this.referencePosition.copy(t.referencePosition),this.nearDistance=t.nearDistance,this.farDistance=t.farDistance,this.map=t.map,this.alphaMap=t.alphaMap,this.displacementMap=t.displacementMap,this.displacementScale=t.displacementScale,this.displacementBias=t.displacementBias,this}}const eo="void main() {\n\tgl_Position = vec4( position, 1.0 );\n}",io="uniform sampler2D shadow_pass;\nuniform vec2 resolution;\nuniform float radius;\n#include \nvoid main() {\n\tconst float samples = float( VSM_SAMPLES );\n\tfloat mean = 0.0;\n\tfloat squared_mean = 0.0;\n\tfloat uvStride = samples <= 1.0 ? 0.0 : 2.0 / ( samples - 1.0 );\n\tfloat uvStart = samples <= 1.0 ? 0.0 : - 1.0;\n\tfor ( float i = 0.0; i < samples; i ++ ) {\n\t\tfloat uvOffset = uvStart + i * uvStride;\n\t\t#ifdef HORIZONTAL_PASS\n\t\t\tvec2 distribution = unpackRGBATo2Half( texture2D( shadow_pass, ( gl_FragCoord.xy + vec2( uvOffset, 0.0 ) * radius ) / resolution ) );\n\t\t\tmean += distribution.x;\n\t\t\tsquared_mean += distribution.y * distribution.y + distribution.x * distribution.x;\n\t\t#else\n\t\t\tfloat depth = unpackRGBAToDepth( texture2D( shadow_pass, ( gl_FragCoord.xy + vec2( 0.0, uvOffset ) * radius ) / resolution ) );\n\t\t\tmean += depth;\n\t\t\tsquared_mean += depth * depth;\n\t\t#endif\n\t}\n\tmean = mean / samples;\n\tsquared_mean = squared_mean / samples;\n\tfloat std_dev = sqrt( squared_mean - mean * mean );\n\tgl_FragColor = pack2HalfToRGBA( vec2( mean, std_dev ) );\n}";function no(t,e,i){let n=new Dr;const r=new We,a=new We,d=new fi,p=new Qa({depthPacking:_e}),m=new to,f={},g=i.maxTextureSize,v={[l]:c,[c]:l,[h]:h},x=new yr({defines:{VSM_SAMPLES:8},uniforms:{shadow_pass:{value:null},resolution:{value:new We},radius:{value:4}},vertexShader:eo,fragmentShader:io}),_=x.clone();_.defines.HORIZONTAL_PASS=1;const y=new $n;y.setAttribute("position",new Gn(new Float32Array([-1,-1,.5,3,-1,.5,-1,3,.5]),3));const M=new pr(y,x),b=this;function S(i,n){const s=e.update(M);x.defines.VSM_SAMPLES!==i.blurSamples&&(x.defines.VSM_SAMPLES=i.blurSamples,_.defines.VSM_SAMPLES=i.blurSamples,x.needsUpdate=!0,_.needsUpdate=!0),null===i.mapPass&&(i.mapPass=new gi(r.x,r.y)),x.uniforms.shadow_pass.value=i.map.texture,x.uniforms.resolution.value=i.mapSize,x.uniforms.radius.value=i.radius,t.setRenderTarget(i.mapPass),t.clear(),t.renderBufferDirect(n,null,s,x,M,null),_.uniforms.shadow_pass.value=i.mapPass.texture,_.uniforms.resolution.value=i.mapSize,_.uniforms.radius.value=i.radius,t.setRenderTarget(i.map),t.clear(),t.renderBufferDirect(n,null,s,_,M,null)}function w(e,i,n,r,s,a){let l=null;const c=!0===n.isPointLight?e.customDistanceMaterial:e.customDepthMaterial;if(void 0!==c)l=c;else if(l=!0===n.isPointLight?m:p,t.localClippingEnabled&&!0===i.clipShadows&&Array.isArray(i.clippingPlanes)&&0!==i.clippingPlanes.length||i.displacementMap&&0!==i.displacementScale||i.alphaMap&&i.alphaTest>0||i.map&&i.alphaTest>0){const t=l.uuid,e=i.uuid;let n=f[t];void 0===n&&(n={},f[t]=n);let r=n[e];void 0===r&&(r=l.clone(),n[e]=r),l=r}return l.visible=i.visible,l.wireframe=i.wireframe,l.side=a===o?null!==i.shadowSide?i.shadowSide:i.side:null!==i.shadowSide?i.shadowSide:v[i.side],l.alphaMap=i.alphaMap,l.alphaTest=i.alphaTest,l.map=i.map,l.clipShadows=i.clipShadows,l.clippingPlanes=i.clippingPlanes,l.clipIntersection=i.clipIntersection,l.displacementMap=i.displacementMap,l.displacementScale=i.displacementScale,l.displacementBias=i.displacementBias,l.wireframeLinewidth=i.wireframeLinewidth,l.linewidth=i.linewidth,!0===n.isPointLight&&!0===l.isMeshDistanceMaterial&&(l.referencePosition.setFromMatrixPosition(n.matrixWorld),l.nearDistance=r,l.farDistance=s),l}function T(i,r,s,a,l){if(!1===i.visible)return;if(i.layers.test(r.layers)&&(i.isMesh||i.isLine||i.isPoints)&&(i.castShadow||i.receiveShadow&&l===o)&&(!i.frustumCulled||n.intersectsObject(i))){i.modelViewMatrix.multiplyMatrices(s.matrixWorldInverse,i.matrixWorld);const n=e.update(i),r=i.material;if(Array.isArray(r)){const e=n.groups;for(let o=0,c=e.length;og||r.y>g)&&(r.x>g&&(a.x=Math.floor(g/u.x),r.x=a.x*u.x,h.mapSize.x=a.x),r.y>g&&(a.y=Math.floor(g/u.y),r.y=a.y*u.y,h.mapSize.y=a.y)),null===h.map){const t=this.type!==o?{minFilter:st,magFilter:st}:{};h.map=new gi(r.x,r.y,t),h.map.texture.name=c.name+".shadowMap",h.camera.updateProjectionMatrix()}t.setRenderTarget(h.map),t.clear();const m=h.getViewportCount();for(let t=0;t=1):-1!==dt.indexOf("OpenGL ES")&&(ut=parseFloat(/^OpenGL ES (\d)/.exec(dt)[1]),ht=ut>=2);let pt=null,mt={};const ft=t.getParameter(3088),gt=t.getParameter(2978),vt=(new fi).fromArray(ft),xt=(new fi).fromArray(gt);function _t(e,i,n){const r=new Uint8Array(4),s=t.createTexture();t.bindTexture(e,s),t.texParameteri(e,10241,9728),t.texParameteri(e,10240,9728);for(let e=0;en||t.height>n)&&(r=n/Math.max(t.width,t.height)),r<1||!0===e){if("undefined"!=typeof HTMLImageElement&&t instanceof HTMLImageElement||"undefined"!=typeof HTMLCanvasElement&&t instanceof HTMLCanvasElement||"undefined"!=typeof ImageBitmap&&t instanceof ImageBitmap){const n=e?ke:Math.floor,s=n(r*t.width),a=n(r*t.height);void 0===f&&(f=x(s,a));const o=i?x(s,a):f;o.width=s,o.height=a;return o.getContext("2d").drawImage(t,0,0,s,a),console.warn("THREE.WebGLRenderer: Texture has been resized from ("+t.width+"x"+t.height+") to ("+s+"x"+a+")."),o}return"data"in t&&console.warn("THREE.WebGLRenderer: Image in DataTexture is too big ("+t.width+"x"+t.height+")."),t}return t}function y(t){return Be(t.width)&&Be(t.height)}function M(t,e){return t.generateMipmaps&&e&&t.minFilter!==st&&t.minFilter!==lt}function b(e){t.generateMipmap(e)}function S(i,n,r,s,a=!1){if(!1===o)return n;if(null!==i){if(void 0!==t[i])return t[i];console.warn("THREE.WebGLRenderer: Attempt to use non-existing WebGL internal format '"+i+"'")}let l=n;return 6403===n&&(5126===r&&(l=33326),5131===r&&(l=33325),5121===r&&(l=33321)),33319===n&&(5126===r&&(l=33328),5131===r&&(l=33327),5121===r&&(l=33323)),6408===n&&(5126===r&&(l=34836),5131===r&&(l=34842),5121===r&&(l=s===xe&&!1===a?35907:32856),32819===r&&(l=32854),32820===r&&(l=32855)),33325!==l&&33326!==l&&33327!==l&&33328!==l&&34842!==l&&34836!==l||e.get("EXT_color_buffer_float"),l}function w(t,e,i){return!0===M(t,i)||t.isFramebufferTexture&&t.minFilter!==st&&t.minFilter!==lt?Math.log2(Math.max(e.width,e.height))+1:void 0!==t.mipmaps&&t.mipmaps.length>0?t.mipmaps.length:t.isCompressedTexture&&Array.isArray(t.image)?e.mipmaps.length:1}function T(t){return t===st||t===at||t===ot?9728:9729}function A(t){const e=t.target;e.removeEventListener("dispose",A),function(t){const e=n.get(t);if(void 0===e.__webglInit)return;const i=t.source,r=g.get(i);if(r){const n=r[e.__cacheKey];n.usedTimes--,0===n.usedTimes&&C(t),0===Object.keys(r).length&&g.delete(i)}n.remove(t)}(e),e.isVideoTexture&&m.delete(e)}function E(e){const i=e.target;i.removeEventListener("dispose",E),function(e){const i=e.texture,r=n.get(e),s=n.get(i);void 0!==s.__webglTexture&&(t.deleteTexture(s.__webglTexture),a.memory.textures--);e.depthTexture&&e.depthTexture.dispose();if(e.isWebGLCubeRenderTarget)for(let e=0;e<6;e++)t.deleteFramebuffer(r.__webglFramebuffer[e]),r.__webglDepthbuffer&&t.deleteRenderbuffer(r.__webglDepthbuffer[e]);else{if(t.deleteFramebuffer(r.__webglFramebuffer),r.__webglDepthbuffer&&t.deleteRenderbuffer(r.__webglDepthbuffer),r.__webglMultisampledFramebuffer&&t.deleteFramebuffer(r.__webglMultisampledFramebuffer),r.__webglColorRenderbuffer)for(let e=0;e0&&r.__version!==t.version){const i=t.image;if(null===i)console.warn("THREE.WebGLRenderer: Texture marked for update but no image data found.");else{if(!1!==i.complete)return void O(r,t,e);console.warn("THREE.WebGLRenderer: Texture marked for update but image is incomplete")}}i.bindTexture(3553,r.__webglTexture,33984+e)}const P={[it]:10497,[nt]:33071,[rt]:33648},I={[st]:9728,[at]:9984,[ot]:9986,[lt]:9729,[ct]:9985,[ht]:9987};function D(i,s,a){if(a?(t.texParameteri(i,10242,P[s.wrapS]),t.texParameteri(i,10243,P[s.wrapT]),32879!==i&&35866!==i||t.texParameteri(i,32882,P[s.wrapR]),t.texParameteri(i,10240,I[s.magFilter]),t.texParameteri(i,10241,I[s.minFilter])):(t.texParameteri(i,10242,33071),t.texParameteri(i,10243,33071),32879!==i&&35866!==i||t.texParameteri(i,32882,33071),s.wrapS===nt&&s.wrapT===nt||console.warn("THREE.WebGLRenderer: Texture is not power of two. Texture.wrapS and Texture.wrapT should be set to THREE.ClampToEdgeWrapping."),t.texParameteri(i,10240,T(s.magFilter)),t.texParameteri(i,10241,T(s.minFilter)),s.minFilter!==st&&s.minFilter!==lt&&console.warn("THREE.WebGLRenderer: Texture is not power of two. Texture.minFilter should be set to THREE.NearestFilter or THREE.LinearFilter.")),!0===e.has("EXT_texture_filter_anisotropic")){const a=e.get("EXT_texture_filter_anisotropic");if(s.magFilter===st)return;if(s.minFilter!==ot&&s.minFilter!==ht)return;if(s.type===vt&&!1===e.has("OES_texture_float_linear"))return;if(!1===o&&s.type===xt&&!1===e.has("OES_texture_half_float_linear"))return;(s.anisotropy>1||n.get(s).__currentAnisotropy)&&(t.texParameterf(i,a.TEXTURE_MAX_ANISOTROPY_EXT,Math.min(s.anisotropy,r.getMaxAnisotropy())),n.get(s).__currentAnisotropy=s.anisotropy)}}function N(e,i){let n=!1;void 0===e.__webglInit&&(e.__webglInit=!0,i.addEventListener("dispose",A));const r=i.source;let s=g.get(r);void 0===s&&(s={},g.set(r,s));const o=function(t){const e=[];return e.push(t.wrapS),e.push(t.wrapT),e.push(t.wrapR||0),e.push(t.magFilter),e.push(t.minFilter),e.push(t.anisotropy),e.push(t.internalFormat),e.push(t.format),e.push(t.type),e.push(t.generateMipmaps),e.push(t.premultiplyAlpha),e.push(t.flipY),e.push(t.unpackAlignment),e.push(t.encoding),e.join()}(i);if(o!==e.__cacheKey){void 0===s[o]&&(s[o]={texture:t.createTexture(),usedTimes:0},a.memory.textures++,n=!0),s[o].usedTimes++;const r=s[e.__cacheKey];void 0!==r&&(s[e.__cacheKey].usedTimes--,0===r.usedTimes&&C(i)),e.__cacheKey=o,e.__webglTexture=s[o].texture}return n}function O(e,r,a){let l=3553;(r.isDataArrayTexture||r.isCompressedArrayTexture)&&(l=35866),r.isData3DTexture&&(l=32879);const c=N(e,r),u=r.source;i.bindTexture(l,e.__webglTexture,33984+a);const d=n.get(u);if(u.version!==d.__version||!0===c){i.activeTexture(33984+a),t.pixelStorei(37440,r.flipY),t.pixelStorei(37441,r.premultiplyAlpha),t.pixelStorei(3317,r.unpackAlignment),t.pixelStorei(37443,0);const e=function(t){return!o&&(t.wrapS!==nt||t.wrapT!==nt||t.minFilter!==st&&t.minFilter!==lt)}(r)&&!1===y(r.image);let n=_(r.image,e,!1,h);n=G(r,n);const p=y(n)||o,m=s.convert(r.format,r.encoding);let f,g=s.convert(r.type),v=S(r.internalFormat,m,g,r.encoding,r.isVideoTexture);D(l,r,p);const x=r.mipmaps,T=o&&!0!==r.isVideoTexture,A=void 0===d.__version||!0===c,E=w(r,n,p);if(r.isDepthTexture)v=6402,o?v=r.type===vt?36012:r.type===gt?33190:r.type===Mt?35056:33189:r.type===vt&&console.error("WebGLRenderer: Floating point depth texture requires WebGL2."),r.format===At&&6402===v&&r.type!==mt&&r.type!==gt&&(console.warn("THREE.WebGLRenderer: Use UnsignedShortType or UnsignedIntType for DepthFormat DepthTexture."),r.type=gt,g=s.convert(r.type)),r.format===Et&&6402===v&&(v=34041,r.type!==Mt&&(console.warn("THREE.WebGLRenderer: Use UnsignedInt248Type for DepthStencilFormat DepthTexture."),r.type=Mt,g=s.convert(r.type))),A&&(T?i.texStorage2D(3553,1,v,n.width,n.height):i.texImage2D(3553,0,v,n.width,n.height,0,m,g,null));else if(r.isDataTexture)if(x.length>0&&p){T&&A&&i.texStorage2D(3553,E,v,x[0].width,x[0].height);for(let t=0,e=x.length;t>=1,e>>=1}}else if(x.length>0&&p){T&&A&&i.texStorage2D(3553,E,v,x[0].width,x[0].height);for(let t=0,e=x.length;t=34069&&l<=34074)&&t.framebufferTexture2D(36160,o,l,n.get(a).__webglTexture,0),i.bindFramebuffer(36160,null)}function U(e,i,n){if(t.bindRenderbuffer(36161,e),i.depthBuffer&&!i.stencilBuffer){let r=33189;if(n||k(i)){const e=i.depthTexture;e&&e.isDepthTexture&&(e.type===vt?r=36012:e.type===gt&&(r=33190));const n=F(i);k(i)?d.renderbufferStorageMultisampleEXT(36161,n,r,i.width,i.height):t.renderbufferStorageMultisample(36161,n,r,i.width,i.height)}else t.renderbufferStorage(36161,r,i.width,i.height);t.framebufferRenderbuffer(36160,36096,36161,e)}else if(i.depthBuffer&&i.stencilBuffer){const r=F(i);n&&!1===k(i)?t.renderbufferStorageMultisample(36161,r,35056,i.width,i.height):k(i)?d.renderbufferStorageMultisampleEXT(36161,r,35056,i.width,i.height):t.renderbufferStorage(36161,34041,i.width,i.height),t.framebufferRenderbuffer(36160,33306,36161,e)}else{const e=!0===i.isWebGLMultipleRenderTargets?i.texture:[i.texture];for(let r=0;r0&&!0===e.has("WEBGL_multisampled_render_to_texture")&&!1!==i.__useRenderToTexture}function G(t,i){const n=t.encoding,r=t.format,s=t.type;return!0===t.isCompressedTexture||!0===t.isVideoTexture||t.format===Ce||n!==ve&&(n===xe?!1===o?!0===e.has("EXT_sRGB")&&r===St?(t.format=Ce,t.minFilter=lt,t.generateMipmaps=!1):i=hi.sRGBToLinear(i):r===St&&s===ut||console.warn("THREE.WebGLTextures: sRGB encoded textures have to use RGBAFormat and UnsignedByteType."):console.error("THREE.WebGLTextures: Unsupported texture encoding:",n)),i}this.allocateTextureUnit=function(){const t=L;return t>=l&&console.warn("THREE.WebGLTextures: Trying to use "+t+" texture units while this GPU supports only "+l),L+=1,t},this.resetTextureUnits=function(){L=0},this.setTexture2D=R,this.setTexture2DArray=function(t,e){const r=n.get(t);t.version>0&&r.__version!==t.version?O(r,t,e):i.bindTexture(35866,r.__webglTexture,33984+e)},this.setTexture3D=function(t,e){const r=n.get(t);t.version>0&&r.__version!==t.version?O(r,t,e):i.bindTexture(32879,r.__webglTexture,33984+e)},this.setTextureCube=function(e,r){const a=n.get(e);e.version>0&&a.__version!==e.version?function(e,r,a){if(6!==r.image.length)return;const l=N(e,r),h=r.source;i.bindTexture(34067,e.__webglTexture,33984+a);const u=n.get(h);if(h.version!==u.__version||!0===l){i.activeTexture(33984+a),t.pixelStorei(37440,r.flipY),t.pixelStorei(37441,r.premultiplyAlpha),t.pixelStorei(3317,r.unpackAlignment),t.pixelStorei(37443,0);const e=r.isCompressedTexture||r.image[0].isCompressedTexture,n=r.image[0]&&r.image[0].isDataTexture,d=[];for(let t=0;t<6;t++)d[t]=e||n?n?r.image[t].image:r.image[t]:_(r.image[t],!1,!0,c),d[t]=G(r,d[t]);const p=d[0],m=y(p)||o,f=s.convert(r.format,r.encoding),g=s.convert(r.type),v=S(r.internalFormat,f,g,r.encoding),x=o&&!0!==r.isVideoTexture,T=void 0===u.__version||!0===l;let A,E=w(r,p,m);if(D(34067,r,m),e){x&&T&&i.texStorage2D(34067,E,v,p.width,p.height);for(let t=0;t<6;t++){A=d[t].mipmaps;for(let e=0;e0&&E++,i.texStorage2D(34067,E,v,d[0].width,d[0].height));for(let t=0;t<6;t++)if(n){x?i.texSubImage2D(34069+t,0,0,0,d[t].width,d[t].height,f,g,d[t].data):i.texImage2D(34069+t,0,v,d[t].width,d[t].height,0,f,g,d[t].data);for(let e=0;e0&&!1===k(e)){const n=d?l:[l];c.__webglMultisampledFramebuffer=t.createFramebuffer(),c.__webglColorRenderbuffer=[],i.bindFramebuffer(36160,c.__webglMultisampledFramebuffer);for(let i=0;i0&&!1===k(e)){const r=e.isWebGLMultipleRenderTargets?e.texture:[e.texture],s=e.width,a=e.height;let o=16384;const l=[],c=e.stencilBuffer?33306:36096,h=n.get(e),u=!0===e.isWebGLMultipleRenderTargets;if(u)for(let e=0;eo+c?(l.inputState.pinching=!1,this.dispatchEvent({type:"pinchend",handedness:t.handedness,target:this})):!l.inputState.pinching&&a<=o-c&&(l.inputState.pinching=!0,this.dispatchEvent({type:"pinchstart",handedness:t.handedness,target:this}))}else null!==o&&t.gripSpace&&(r=e.getPose(t.gripSpace,i),null!==r&&(o.matrix.fromArray(r.transform.matrix),o.matrix.decompose(o.position,o.rotation,o.scale),r.linearVelocity?(o.hasLinearVelocity=!0,o.linearVelocity.copy(r.linearVelocity)):o.hasLinearVelocity=!1,r.angularVelocity?(o.hasAngularVelocity=!0,o.angularVelocity.copy(r.angularVelocity)):o.hasAngularVelocity=!1));null!==a&&(n=e.getPose(t.targetRaySpace,i),null===n&&null!==r&&(n=r),null!==n&&(a.matrix.fromArray(n.transform.matrix),a.matrix.decompose(a.position,a.rotation,a.scale),n.linearVelocity?(a.hasLinearVelocity=!0,a.linearVelocity.copy(n.linearVelocity)):a.hasLinearVelocity=!1,n.angularVelocity?(a.hasAngularVelocity=!0,a.angularVelocity.copy(n.angularVelocity)):a.hasAngularVelocity=!1,this.dispatchEvent(co)))}return null!==a&&(a.visible=null!==n),null!==o&&(o.visible=null!==r),null!==l&&(l.visible=null!==s),this}_getHandJoint(t,e){if(void 0===t.joints[e.jointName]){const i=new lo;i.matrixAutoUpdate=!1,i.visible=!1,t.joints[e.jointName]=i,t.add(i)}return t.joints[e.jointName]}}class uo extends mi{constructor(t,e,i,n,r,s,a,o,l,c){if((c=void 0!==c?c:At)!==At&&c!==Et)throw new Error("DepthTexture format must be either THREE.DepthFormat or THREE.DepthStencilFormat");void 0===i&&c===At&&(i=gt),void 0===i&&c===Et&&(i=Mt),super(null,n,r,s,a,o,c,i,l),this.isDepthTexture=!0,this.image={width:t,height:e},this.magFilter=void 0!==a?a:st,this.minFilter=void 0!==o?o:st,this.flipY=!1,this.generateMipmaps=!1}}class po extends Le{constructor(t,e){super();const i=this;let n=null,r=1,s=null,a="local-floor",o=1,l=null,c=null,h=null,u=null,d=null,p=null;const m=e.getContextAttributes();let f=null,g=null;const v=[],x=[],_=new Set,y=new Map,M=new br;M.layers.enable(1),M.viewport=new fi;const b=new br;b.layers.enable(2),b.viewport=new fi;const S=[M,b],w=new oo;w.layers.enable(1),w.layers.enable(2);let T=null,A=null;function E(t){const e=x.indexOf(t.inputSource);if(-1===e)return;const i=v[e];void 0!==i&&i.dispatchEvent({type:t.type,data:t.inputSource})}function C(){n.removeEventListener("select",E),n.removeEventListener("selectstart",E),n.removeEventListener("selectend",E),n.removeEventListener("squeeze",E),n.removeEventListener("squeezestart",E),n.removeEventListener("squeezeend",E),n.removeEventListener("end",C),n.removeEventListener("inputsourceschange",L);for(let t=0;t=0&&(x[n]=null,v[n].disconnect(i))}for(let e=0;e=x.length){x.push(i),n=t;break}if(null===x[t]){x[t]=i,n=t;break}}if(-1===n)break}const r=v[n];r&&r.connect(i)}}this.cameraAutoUpdate=!0,this.enabled=!1,this.isPresenting=!1,this.getController=function(t){let e=v[t];return void 0===e&&(e=new ho,v[t]=e),e.getTargetRaySpace()},this.getControllerGrip=function(t){let e=v[t];return void 0===e&&(e=new ho,v[t]=e),e.getGripSpace()},this.getHand=function(t){let e=v[t];return void 0===e&&(e=new ho,v[t]=e),e.getHandSpace()},this.setFramebufferScaleFactor=function(t){r=t,!0===i.isPresenting&&console.warn("THREE.WebXRManager: Cannot change framebuffer scale while presenting.")},this.setReferenceSpaceType=function(t){a=t,!0===i.isPresenting&&console.warn("THREE.WebXRManager: Cannot change reference space type while presenting.")},this.getReferenceSpace=function(){return l||s},this.setReferenceSpace=function(t){l=t},this.getBaseLayer=function(){return null!==u?u:d},this.getBinding=function(){return h},this.getFrame=function(){return p},this.getSession=function(){return n},this.setSession=async function(c){if(n=c,null!==n){if(f=t.getRenderTarget(),n.addEventListener("select",E),n.addEventListener("selectstart",E),n.addEventListener("selectend",E),n.addEventListener("squeeze",E),n.addEventListener("squeezestart",E),n.addEventListener("squeezeend",E),n.addEventListener("end",C),n.addEventListener("inputsourceschange",L),!0!==m.xrCompatible&&await e.makeXRCompatible(),void 0===n.renderState.layers||!1===t.capabilities.isWebGL2){const i={antialias:void 0!==n.renderState.layers||m.antialias,alpha:m.alpha,depth:m.depth,stencil:m.stencil,framebufferScaleFactor:r};d=new XRWebGLLayer(n,e,i),n.updateRenderState({baseLayer:d}),g=new gi(d.framebufferWidth,d.framebufferHeight,{format:St,type:ut,encoding:t.outputEncoding,stencilBuffer:m.stencil})}else{let i=null,s=null,a=null;m.depth&&(a=m.stencil?35056:33190,i=m.stencil?Et:At,s=m.stencil?Mt:gt);const o={colorFormat:32856,depthFormat:a,scaleFactor:r};h=new XRWebGLBinding(n,e),u=h.createProjectionLayer(o),n.updateRenderState({layers:[u]}),g=new gi(u.textureWidth,u.textureHeight,{format:St,type:ut,depthTexture:new uo(u.textureWidth,u.textureHeight,s,void 0,void 0,void 0,void 0,void 0,void 0,i),stencilBuffer:m.stencil,encoding:t.outputEncoding,samples:m.antialias?4:0});t.properties.get(g).__ignoreDepthValues=u.ignoreDepthValues}g.isXRRenderTarget=!0,this.setFoveation(o),l=null,s=await n.requestReferenceSpace(a),N.setContext(n),N.start(),i.isPresenting=!0,i.dispatchEvent({type:"sessionstart"})}};const R=new $e,P=new $e;function I(t,e){null===e?t.matrixWorld.copy(t.matrix):t.matrixWorld.multiplyMatrices(e.matrixWorld,t.matrix),t.matrixWorldInverse.copy(t.matrixWorld).invert()}this.updateCamera=function(t){if(null===n)return;w.near=b.near=M.near=t.near,w.far=b.far=M.far=t.far,T===w.near&&A===w.far||(n.updateRenderState({depthNear:w.near,depthFar:w.far}),T=w.near,A=w.far);const e=t.parent,i=w.cameras;I(w,e);for(let t=0;te&&(y.set(t,t.lastChangedTime),i.dispatchEvent({type:"planechanged",data:t}))}else _.add(t),y.set(t,n.lastChangedTime),i.dispatchEvent({type:"planeadded",data:t})}p=null})),this.setAnimationLoop=function(t){D=t},this.dispose=function(){}}}function mo(t,e){function i(i,n){i.opacity.value=n.opacity,n.color&&i.diffuse.value.copy(n.color),n.emissive&&i.emissive.value.copy(n.emissive).multiplyScalar(n.emissiveIntensity),n.map&&(i.map.value=n.map),n.alphaMap&&(i.alphaMap.value=n.alphaMap),n.bumpMap&&(i.bumpMap.value=n.bumpMap,i.bumpScale.value=n.bumpScale,n.side===c&&(i.bumpScale.value*=-1)),n.displacementMap&&(i.displacementMap.value=n.displacementMap,i.displacementScale.value=n.displacementScale,i.displacementBias.value=n.displacementBias),n.emissiveMap&&(i.emissiveMap.value=n.emissiveMap),n.normalMap&&(i.normalMap.value=n.normalMap,i.normalScale.value.copy(n.normalScale),n.side===c&&i.normalScale.value.negate()),n.specularMap&&(i.specularMap.value=n.specularMap),n.alphaTest>0&&(i.alphaTest.value=n.alphaTest);const r=e.get(n).envMap;if(r&&(i.envMap.value=r,i.flipEnvMap.value=r.isCubeTexture&&!1===r.isRenderTargetTexture?-1:1,i.reflectivity.value=n.reflectivity,i.ior.value=n.ior,i.refractionRatio.value=n.refractionRatio),n.lightMap){i.lightMap.value=n.lightMap;const e=!0===t.useLegacyLights?Math.PI:1;i.lightMapIntensity.value=n.lightMapIntensity*e}let s,a;n.aoMap&&(i.aoMap.value=n.aoMap,i.aoMapIntensity.value=n.aoMapIntensity),n.map?s=n.map:n.specularMap?s=n.specularMap:n.displacementMap?s=n.displacementMap:n.normalMap?s=n.normalMap:n.bumpMap?s=n.bumpMap:n.roughnessMap?s=n.roughnessMap:n.metalnessMap?s=n.metalnessMap:n.alphaMap?s=n.alphaMap:n.emissiveMap?s=n.emissiveMap:n.clearcoatMap?s=n.clearcoatMap:n.clearcoatNormalMap?s=n.clearcoatNormalMap:n.clearcoatRoughnessMap?s=n.clearcoatRoughnessMap:n.iridescenceMap?s=n.iridescenceMap:n.iridescenceThicknessMap?s=n.iridescenceThicknessMap:n.specularIntensityMap?s=n.specularIntensityMap:n.specularColorMap?s=n.specularColorMap:n.transmissionMap?s=n.transmissionMap:n.thicknessMap?s=n.thicknessMap:n.sheenColorMap?s=n.sheenColorMap:n.sheenRoughnessMap&&(s=n.sheenRoughnessMap),void 0!==s&&(s.isWebGLRenderTarget&&(s=s.texture),!0===s.matrixAutoUpdate&&s.updateMatrix(),i.uvTransform.value.copy(s.matrix)),n.aoMap?a=n.aoMap:n.lightMap&&(a=n.lightMap),void 0!==a&&(a.isWebGLRenderTarget&&(a=a.texture),!0===a.matrixAutoUpdate&&a.updateMatrix(),i.uv2Transform.value.copy(a.matrix))}return{refreshFogUniforms:function(e,i){i.color.getRGB(e.fogColor.value,xr(t)),i.isFog?(e.fogNear.value=i.near,e.fogFar.value=i.far):i.isFogExp2&&(e.fogDensity.value=i.density)},refreshMaterialUniforms:function(t,n,r,s,a){n.isMeshBasicMaterial||n.isMeshLambertMaterial?i(t,n):n.isMeshToonMaterial?(i(t,n),function(t,e){e.gradientMap&&(t.gradientMap.value=e.gradientMap)}(t,n)):n.isMeshPhongMaterial?(i(t,n),function(t,e){t.specular.value.copy(e.specular),t.shininess.value=Math.max(e.shininess,1e-4)}(t,n)):n.isMeshStandardMaterial?(i(t,n),function(t,i){t.roughness.value=i.roughness,t.metalness.value=i.metalness,i.roughnessMap&&(t.roughnessMap.value=i.roughnessMap);i.metalnessMap&&(t.metalnessMap.value=i.metalnessMap);const n=e.get(i).envMap;n&&(t.envMapIntensity.value=i.envMapIntensity)}(t,n),n.isMeshPhysicalMaterial&&function(t,e,i){t.ior.value=e.ior,e.sheen>0&&(t.sheenColor.value.copy(e.sheenColor).multiplyScalar(e.sheen),t.sheenRoughness.value=e.sheenRoughness,e.sheenColorMap&&(t.sheenColorMap.value=e.sheenColorMap),e.sheenRoughnessMap&&(t.sheenRoughnessMap.value=e.sheenRoughnessMap));e.clearcoat>0&&(t.clearcoat.value=e.clearcoat,t.clearcoatRoughness.value=e.clearcoatRoughness,e.clearcoatMap&&(t.clearcoatMap.value=e.clearcoatMap),e.clearcoatRoughnessMap&&(t.clearcoatRoughnessMap.value=e.clearcoatRoughnessMap),e.clearcoatNormalMap&&(t.clearcoatNormalScale.value.copy(e.clearcoatNormalScale),t.clearcoatNormalMap.value=e.clearcoatNormalMap,e.side===c&&t.clearcoatNormalScale.value.negate()));e.iridescence>0&&(t.iridescence.value=e.iridescence,t.iridescenceIOR.value=e.iridescenceIOR,t.iridescenceThicknessMinimum.value=e.iridescenceThicknessRange[0],t.iridescenceThicknessMaximum.value=e.iridescenceThicknessRange[1],e.iridescenceMap&&(t.iridescenceMap.value=e.iridescenceMap),e.iridescenceThicknessMap&&(t.iridescenceThicknessMap.value=e.iridescenceThicknessMap));e.transmission>0&&(t.transmission.value=e.transmission,t.transmissionSamplerMap.value=i.texture,t.transmissionSamplerSize.value.set(i.width,i.height),e.transmissionMap&&(t.transmissionMap.value=e.transmissionMap),t.thickness.value=e.thickness,e.thicknessMap&&(t.thicknessMap.value=e.thicknessMap),t.attenuationDistance.value=e.attenuationDistance,t.attenuationColor.value.copy(e.attenuationColor));t.specularIntensity.value=e.specularIntensity,t.specularColor.value.copy(e.specularColor),e.specularIntensityMap&&(t.specularIntensityMap.value=e.specularIntensityMap);e.specularColorMap&&(t.specularColorMap.value=e.specularColorMap)}(t,n,a)):n.isMeshMatcapMaterial?(i(t,n),function(t,e){e.matcap&&(t.matcap.value=e.matcap)}(t,n)):n.isMeshDepthMaterial?i(t,n):n.isMeshDistanceMaterial?(i(t,n),function(t,e){t.referencePosition.value.copy(e.referencePosition),t.nearDistance.value=e.nearDistance,t.farDistance.value=e.farDistance}(t,n)):n.isMeshNormalMaterial?i(t,n):n.isLineBasicMaterial?(function(t,e){t.diffuse.value.copy(e.color),t.opacity.value=e.opacity}(t,n),n.isLineDashedMaterial&&function(t,e){t.dashSize.value=e.dashSize,t.totalSize.value=e.dashSize+e.gapSize,t.scale.value=e.scale}(t,n)):n.isPointsMaterial?function(t,e,i,n){t.diffuse.value.copy(e.color),t.opacity.value=e.opacity,t.size.value=e.size*i,t.scale.value=.5*n,e.map&&(t.map.value=e.map);e.alphaMap&&(t.alphaMap.value=e.alphaMap);e.alphaTest>0&&(t.alphaTest.value=e.alphaTest);let r;e.map?r=e.map:e.alphaMap&&(r=e.alphaMap);void 0!==r&&(!0===r.matrixAutoUpdate&&r.updateMatrix(),t.uvTransform.value.copy(r.matrix))}(t,n,r,s):n.isSpriteMaterial?function(t,e){t.diffuse.value.copy(e.color),t.opacity.value=e.opacity,t.rotation.value=e.rotation,e.map&&(t.map.value=e.map);e.alphaMap&&(t.alphaMap.value=e.alphaMap);e.alphaTest>0&&(t.alphaTest.value=e.alphaTest);let i;e.map?i=e.map:e.alphaMap&&(i=e.alphaMap);void 0!==i&&(!0===i.matrixAutoUpdate&&i.updateMatrix(),t.uvTransform.value.copy(i.matrix))}(t,n):n.isShadowMaterial?(t.color.value.copy(n.color),t.opacity.value=n.opacity):n.isShaderMaterial&&(n.uniformsNeedUpdate=!1)}}}function fo(t,e,i,n){let r={},s={},a=[];const o=i.isWebGL2?t.getParameter(35375):0;function l(t,e,i){const n=t.value;if(void 0===i[e]){if("number"==typeof n)i[e]=n;else{const t=Array.isArray(n)?n:[n],r=[];for(let e=0;e0){r=i%n;0!==r&&n-r-a.boundary<0&&(i+=n-r,s.__offset=i)}i+=a.storage}r=i%n,r>0&&(i+=n-r);t.__size=i,t.__cache={}}(i),d=function(e){const i=function(){for(let t=0;t0&&function(t,e,i){const n=X.isWebGL2;null===k&&(k=new gi(1024,1024,{generateMipmaps:!0,type:q.has("EXT_color_buffer_half_float")?xt:ut,minFilter:ht,samples:n&&!0===a?4:0}));const r=_.getRenderTarget();_.setRenderTarget(k),_.clear();const s=_.toneMapping;_.toneMapping=W,Ot(t,e,i),_.toneMapping=s,K.updateMultisampleRenderTarget(k),K.updateRenderTargetMipmap(k),_.setRenderTarget(r)}(r,e,i),n&&Y.viewport(A.copy(n)),r.length>0&&Ot(r,e,i),s.length>0&&Ot(s,e,i),o.length>0&&Ot(o,e,i),Y.buffers.depth.setTest(!0),Y.buffers.depth.setMask(!0),Y.buffers.color.setMask(!0),Y.setPolygonOffset(!1)}function Ot(t,e,i){const n=!0===e.isScene?e.overrideMaterial:null;for(let r=0,s=t.length;r0?x[x.length-1]:null,v.pop(),f=v.length>0?v[v.length-1]:null},this.getActiveCubeFace=function(){return M},this.getActiveMipmapLevel=function(){return b},this.getRenderTarget=function(){return S},this.setRenderTargetTextures=function(t,e,i){J.get(t.texture).__webglTexture=e,J.get(t.depthTexture).__webglTexture=i;const n=J.get(t);n.__hasExternalTextures=!0,n.__hasExternalTextures&&(n.__autoAllocateDepthBuffer=void 0===i,n.__autoAllocateDepthBuffer||!0===q.has("WEBGL_multisampled_render_to_texture")&&(console.warn("THREE.WebGLRenderer: Render-to-texture extension was disabled because an external texture was provided"),n.__useRenderToTexture=!1))},this.setRenderTargetFramebuffer=function(t,e){const i=J.get(t);i.__webglFramebuffer=e,i.__useDefaultFramebuffer=void 0===e},this.setRenderTarget=function(t,e=0,i=0){S=t,M=e,b=i;let n=!0,r=null,s=!1,a=!1;if(t){const i=J.get(t);void 0!==i.__useDefaultFramebuffer?(Y.bindFramebuffer(36160,null),n=!1):void 0===i.__webglFramebuffer?K.setupRenderTarget(t):i.__hasExternalTextures&&K.rebindTextures(t,J.get(t.texture).__webglTexture,J.get(t.depthTexture).__webglTexture);const o=t.texture;(o.isData3DTexture||o.isDataArrayTexture||o.isCompressedArrayTexture)&&(a=!0);const l=J.get(t).__webglFramebuffer;t.isWebGLCubeRenderTarget?(r=l[e],s=!0):r=X.isWebGL2&&t.samples>0&&!1===K.useMultisampledRTT(t)?J.get(t).__webglMultisampledFramebuffer:l,A.copy(t.viewport),E.copy(t.scissor),C=t.scissorTest}else A.copy(N).multiplyScalar(P).floor(),E.copy(O).multiplyScalar(P).floor(),C=z;if(Y.bindFramebuffer(36160,r)&&X.drawBuffers&&n&&Y.drawBuffers(t,r),Y.viewport(A),Y.scissor(E),Y.setScissorTest(C),s){const n=J.get(t.texture);yt.framebufferTexture2D(36160,36064,34069+e,n.__webglTexture,i)}else if(a){const n=J.get(t.texture),r=e||0;yt.framebufferTextureLayer(36160,36064,n.__webglTexture,i||0,r)}w=-1},this.readRenderTargetPixels=function(t,e,i,n,r,s,a){if(!t||!t.isWebGLRenderTarget)return void console.error("THREE.WebGLRenderer.readRenderTargetPixels: renderTarget is not THREE.WebGLRenderTarget.");let o=J.get(t).__webglFramebuffer;if(t.isWebGLCubeRenderTarget&&void 0!==a&&(o=o[a]),o){Y.bindFramebuffer(36160,o);try{const a=t.texture,o=a.format,l=a.type;if(o!==St&&ft.convert(o)!==yt.getParameter(35739))return void console.error("THREE.WebGLRenderer.readRenderTargetPixels: renderTarget is not in RGBA or implementation defined format.");const c=l===xt&&(q.has("EXT_color_buffer_half_float")||X.isWebGL2&&q.has("EXT_color_buffer_float"));if(!(l===ut||ft.convert(l)===yt.getParameter(35738)||l===vt&&(X.isWebGL2||q.has("OES_texture_float")||q.has("WEBGL_color_buffer_float"))||c))return void console.error("THREE.WebGLRenderer.readRenderTargetPixels: renderTarget is not in UnsignedByteType or implementation defined type.");e>=0&&e<=t.width-n&&i>=0&&i<=t.height-r&&yt.readPixels(e,i,n,r,ft.convert(o),ft.convert(l),s)}finally{const t=null!==S?J.get(S).__webglFramebuffer:null;Y.bindFramebuffer(36160,t)}}},this.copyFramebufferToTexture=function(t,e,i=0){const n=Math.pow(2,-i),r=Math.floor(e.image.width*n),s=Math.floor(e.image.height*n);K.setTexture2D(e,0),yt.copyTexSubImage2D(3553,i,0,0,t.x,t.y,r,s),Y.unbindTexture()},this.copyTextureToTexture=function(t,e,i,n=0){const r=e.image.width,s=e.image.height,a=ft.convert(i.format),o=ft.convert(i.type);K.setTexture2D(i,0),yt.pixelStorei(37440,i.flipY),yt.pixelStorei(37441,i.premultiplyAlpha),yt.pixelStorei(3317,i.unpackAlignment),e.isDataTexture?yt.texSubImage2D(3553,n,t.x,t.y,r,s,a,o,e.image.data):e.isCompressedTexture?yt.compressedTexSubImage2D(3553,n,t.x,t.y,e.mipmaps[0].width,e.mipmaps[0].height,a,e.mipmaps[0].data):yt.texSubImage2D(3553,n,t.x,t.y,a,o,e.image),0===n&&i.generateMipmaps&&yt.generateMipmap(3553),Y.unbindTexture()},this.copyTextureToTexture3D=function(t,e,i,n,r=0){if(_.isWebGL1Renderer)return void console.warn("THREE.WebGLRenderer.copyTextureToTexture3D: can only be used with WebGL2.");const s=t.max.x-t.min.x+1,a=t.max.y-t.min.y+1,o=t.max.z-t.min.z+1,l=ft.convert(n.format),c=ft.convert(n.type);let h;if(n.isData3DTexture)K.setTexture3D(n,0),h=32879;else{if(!n.isDataArrayTexture)return void console.warn("THREE.WebGLRenderer.copyTextureToTexture3D: only supports THREE.DataTexture3D and THREE.DataTexture2DArray.");K.setTexture2DArray(n,0),h=35866}yt.pixelStorei(37440,n.flipY),yt.pixelStorei(37441,n.premultiplyAlpha),yt.pixelStorei(3317,n.unpackAlignment);const u=yt.getParameter(3314),d=yt.getParameter(32878),p=yt.getParameter(3316),m=yt.getParameter(3315),f=yt.getParameter(32877),g=i.isCompressedTexture?i.mipmaps[0]:i.image;yt.pixelStorei(3314,g.width),yt.pixelStorei(32878,g.height),yt.pixelStorei(3316,t.min.x),yt.pixelStorei(3315,t.min.y),yt.pixelStorei(32877,t.min.z),i.isDataTexture||i.isData3DTexture?yt.texSubImage3D(h,r,e.x,e.y,e.z,s,a,o,l,c,g.data):i.isCompressedArrayTexture?(console.warn("THREE.WebGLRenderer.copyTextureToTexture3D: untested support for compressed srcTexture."),yt.compressedTexSubImage3D(h,r,e.x,e.y,e.z,s,a,o,l,g.data)):yt.texSubImage3D(h,r,e.x,e.y,e.z,s,a,o,l,c,g),yt.pixelStorei(3314,u),yt.pixelStorei(32878,d),yt.pixelStorei(3316,p),yt.pixelStorei(3315,m),yt.pixelStorei(32877,f),0===r&&n.generateMipmaps&&yt.generateMipmap(h),Y.unbindTexture()},this.initTexture=function(t){t.isCubeTexture?K.setTextureCube(t,0):t.isData3DTexture?K.setTexture3D(t,0):t.isDataArrayTexture||t.isCompressedArrayTexture?K.setTexture2DArray(t,0):K.setTexture2D(t,0),Y.unbindTexture()},this.resetState=function(){M=0,b=0,S=null,Y.reset(),gt.reset()},"undefined"!=typeof __THREE_DEVTOOLS__&&__THREE_DEVTOOLS__.dispatchEvent(new CustomEvent("observe",{detail:this}))}Object.defineProperties(go.prototype,{physicallyCorrectLights:{get:function(){return console.warn("THREE.WebGLRenderer: the property .physicallyCorrectLights has been removed. Set renderer.useLegacyLights instead."),!this.useLegacyLights},set:function(t){console.warn("THREE.WebGLRenderer: the property .physicallyCorrectLights has been removed. Set renderer.useLegacyLights instead."),this.useLegacyLights=!t}}});class vo extends go{}vo.prototype.isWebGL1Renderer=!0;class xo{constructor(t,e=25e-5){this.isFogExp2=!0,this.name="",this.color=new zn(t),this.density=e}clone(){return new xo(this.color,this.density)}toJSON(){return{type:"FogExp2",color:this.color.getHex(),density:this.density}}}class _o{constructor(t,e=1,i=1e3){this.isFog=!0,this.name="",this.color=new zn(t),this.near=e,this.far=i}clone(){return new _o(this.color,this.near,this.far)}toJSON(){return{type:"Fog",color:this.color.getHex(),near:this.near,far:this.far}}}class yo extends xn{constructor(){super(),this.isScene=!0,this.type="Scene",this.background=null,this.environment=null,this.fog=null,this.backgroundBlurriness=0,this.backgroundIntensity=1,this.overrideMaterial=null,"undefined"!=typeof __THREE_DEVTOOLS__&&__THREE_DEVTOOLS__.dispatchEvent(new CustomEvent("observe",{detail:this}))}copy(t,e){return super.copy(t,e),null!==t.background&&(this.background=t.background.clone()),null!==t.environment&&(this.environment=t.environment.clone()),null!==t.fog&&(this.fog=t.fog.clone()),this.backgroundBlurriness=t.backgroundBlurriness,this.backgroundIntensity=t.backgroundIntensity,null!==t.overrideMaterial&&(this.overrideMaterial=t.overrideMaterial.clone()),this.matrixAutoUpdate=t.matrixAutoUpdate,this}toJSON(t){const e=super.toJSON(t);return null!==this.fog&&(e.object.fog=this.fog.toJSON()),this.backgroundBlurriness>0&&(e.object.backgroundBlurriness=this.backgroundBlurriness),1!==this.backgroundIntensity&&(e.object.backgroundIntensity=this.backgroundIntensity),e}get autoUpdate(){return console.warn("THREE.Scene: autoUpdate was renamed to matrixWorldAutoUpdate in r144."),this.matrixWorldAutoUpdate}set autoUpdate(t){console.warn("THREE.Scene: autoUpdate was renamed to matrixWorldAutoUpdate in r144."),this.matrixWorldAutoUpdate=t}}class Mo{constructor(t,e){this.isInterleavedBuffer=!0,this.array=t,this.stride=e,this.count=void 0!==t?t.length/e:0,this.usage=Ae,this.updateRange={offset:0,count:-1},this.version=0,this.uuid=Ne()}onUploadCallback(){}set needsUpdate(t){!0===t&&this.version++}setUsage(t){return this.usage=t,this}copy(t){return this.array=new t.array.constructor(t.array),this.count=t.count,this.stride=t.stride,this.usage=t.usage,this}copyAt(t,e,i){t*=this.stride,i*=e.stride;for(let n=0,r=this.stride;nt.far||e.push({distance:o,point:Ao.clone(),uv:Ln.getUV(Ao,Io,Do,No,Oo,zo,Uo,new We),face:null,object:this})}copy(t,e){return super.copy(t,e),void 0!==t.center&&this.center.copy(t.center),this.material=t.material,this}}function Fo(t,e,i,n,r,s){Lo.subVectors(t,i).addScalar(.5).multiply(n),void 0!==r?(Ro.x=s*Lo.x-r*Lo.y,Ro.y=r*Lo.x+s*Lo.y):Ro.copy(Lo),t.copy(e),t.x+=Ro.x,t.y+=Ro.y,t.applyMatrix4(Po)}const ko=new $e,Go=new $e;class Vo extends xn{constructor(){super(),this._currentLevel=0,this.type="LOD",Object.defineProperties(this,{levels:{enumerable:!0,value:[]},isLOD:{value:!0}}),this.autoUpdate=!0}copy(t){super.copy(t,!1);const e=t.levels;for(let t=0,i=e.length;t0){let i,n;for(i=1,n=e.length;i0){ko.setFromMatrixPosition(this.matrixWorld);const i=t.ray.origin.distanceTo(ko);this.getObjectForDistance(i).raycast(t,e)}}update(t){const e=this.levels;if(e.length>1){ko.setFromMatrixPosition(t.matrixWorld),Go.setFromMatrixPosition(this.matrixWorld);const i=ko.distanceTo(Go)/t.zoom;let n,r;for(e[0].object.visible=!0,n=1,r=e.length;n=t))break;e[n-1].object.visible=!1,e[n].object.visible=!0}for(this._currentLevel=n-1;no)continue;u.applyMatrix4(this.matrixWorld);const s=t.ray.origin.distanceTo(u);st.far||e.push({distance:s,point:h.clone().applyMatrix4(this.matrixWorld),index:i,face:null,faceIndex:null,object:this})}}else{for(let i=Math.max(0,s.start),n=Math.min(m.count,s.start+s.count)-1;io)continue;u.applyMatrix4(this.matrixWorld);const n=t.ray.origin.distanceTo(u);nt.far||e.push({distance:n,point:h.clone().applyMatrix4(this.matrixWorld),index:i,face:null,faceIndex:null,object:this})}}}updateMorphTargets(){const t=this.geometry.morphAttributes,e=Object.keys(t);if(e.length>0){const i=t[e[0]];if(void 0!==i){this.morphTargetInfluences=[],this.morphTargetDictionary={};for(let t=0,e=i.length;t0){const i=t[e[0]];if(void 0!==i){this.morphTargetInfluences=[],this.morphTargetDictionary={};for(let t=0,e=i.length;tr.far)return;s.push({distance:l,distanceToRay:Math.sqrt(o),point:i,index:e,face:null,object:a})}}class Tl extends mi{constructor(t,e,i,n,r,s,a,o,l,c,h,u){super(null,s,a,o,l,c,n,r,h,u),this.isCompressedTexture=!0,this.image={width:e,height:i},this.mipmaps=t,this.flipY=!1,this.generateMipmaps=!1}}class Al{constructor(){this.type="Curve",this.arcLengthDivisions=200}getPoint(){return console.warn("THREE.Curve: .getPoint() not implemented."),null}getPointAt(t,e){const i=this.getUtoTmapping(t);return this.getPoint(i,e)}getPoints(t=5){const e=[];for(let i=0;i<=t;i++)e.push(this.getPoint(i/t));return e}getSpacedPoints(t=5){const e=[];for(let i=0;i<=t;i++)e.push(this.getPointAt(i/t));return e}getLength(){const t=this.getLengths();return t[t.length-1]}getLengths(t=this.arcLengthDivisions){if(this.cacheArcLengths&&this.cacheArcLengths.length===t+1&&!this.needsUpdate)return this.cacheArcLengths;this.needsUpdate=!1;const e=[];let i,n=this.getPoint(0),r=0;e.push(0);for(let s=1;s<=t;s++)i=this.getPoint(s/t),r+=i.distanceTo(n),e.push(r),n=i;return this.cacheArcLengths=e,e}updateArcLengths(){this.needsUpdate=!0,this.getLengths()}getUtoTmapping(t,e){const i=this.getLengths();let n=0;const r=i.length;let s;s=e||t*i[r-1];let a,o=0,l=r-1;for(;o<=l;)if(n=Math.floor(o+(l-o)/2),a=i[n]-s,a<0)o=n+1;else{if(!(a>0)){l=n;break}l=n-1}if(n=l,i[n]===s)return n/(r-1);const c=i[n];return(n+(s-c)/(i[n+1]-c))/(r-1)}getTangent(t,e){const i=1e-4;let n=t-i,r=t+i;n<0&&(n=0),r>1&&(r=1);const s=this.getPoint(n),a=this.getPoint(r),o=e||(s.isVector2?new We:new $e);return o.copy(a).sub(s).normalize(),o}getTangentAt(t,e){const i=this.getUtoTmapping(t);return this.getTangent(i,e)}computeFrenetFrames(t,e){const i=new $e,n=[],r=[],s=[],a=new $e,o=new qi;for(let e=0;e<=t;e++){const i=e/t;n[e]=this.getTangentAt(i,new $e)}r[0]=new $e,s[0]=new $e;let l=Number.MAX_VALUE;const c=Math.abs(n[0].x),h=Math.abs(n[0].y),u=Math.abs(n[0].z);c<=l&&(l=c,i.set(1,0,0)),h<=l&&(l=h,i.set(0,1,0)),u<=l&&i.set(0,0,1),a.crossVectors(n[0],i).normalize(),r[0].crossVectors(n[0],a),s[0].crossVectors(n[0],r[0]);for(let e=1;e<=t;e++){if(r[e]=r[e-1].clone(),s[e]=s[e-1].clone(),a.crossVectors(n[e-1],n[e]),a.length()>Number.EPSILON){a.normalize();const t=Math.acos(Oe(n[e-1].dot(n[e]),-1,1));r[e].applyMatrix4(o.makeRotationAxis(a,t))}s[e].crossVectors(n[e],r[e])}if(!0===e){let e=Math.acos(Oe(r[0].dot(r[t]),-1,1));e/=t,n[0].dot(a.crossVectors(r[0],r[t]))>0&&(e=-e);for(let i=1;i<=t;i++)r[i].applyMatrix4(o.makeRotationAxis(n[i],e*i)),s[i].crossVectors(n[i],r[i])}return{tangents:n,normals:r,binormals:s}}clone(){return(new this.constructor).copy(this)}copy(t){return this.arcLengthDivisions=t.arcLengthDivisions,this}toJSON(){const t={metadata:{version:4.5,type:"Curve",generator:"Curve.toJSON"}};return t.arcLengthDivisions=this.arcLengthDivisions,t.type=this.type,t}fromJSON(t){return this.arcLengthDivisions=t.arcLengthDivisions,this}}class El extends Al{constructor(t=0,e=0,i=1,n=1,r=0,s=2*Math.PI,a=!1,o=0){super(),this.isEllipseCurve=!0,this.type="EllipseCurve",this.aX=t,this.aY=e,this.xRadius=i,this.yRadius=n,this.aStartAngle=r,this.aEndAngle=s,this.aClockwise=a,this.aRotation=o}getPoint(t,e){const i=e||new We,n=2*Math.PI;let r=this.aEndAngle-this.aStartAngle;const s=Math.abs(r)n;)r-=n;r0?0:(Math.floor(Math.abs(l)/r)+1)*r:0===c&&l===r-1&&(l=r-2,c=1),this.closed||l>0?a=n[(l-1)%r]:(Rl.subVectors(n[0],n[1]).add(n[0]),a=Rl);const h=n[l%r],u=n[(l+1)%r];if(this.closed||l+2n.length-2?n.length-1:s+1],h=n[s>n.length-3?n.length-1:s+2];return i.set(Ol(a,o.x,l.x,c.x,h.x),Ol(a,o.y,l.y,c.y,h.y)),i}copy(t){super.copy(t),this.points=[];for(let e=0,i=t.points.length;e=i){const t=n[r]-i,s=this.curves[r],a=s.getLength(),o=0===a?0:1-t/a;return s.getPointAt(o,e)}r++}return null}getLength(){const t=this.getCurveLengths();return t[t.length-1]}updateArcLengths(){this.needsUpdate=!0,this.cacheLengths=null,this.getCurveLengths()}getCurveLengths(){if(this.cacheLengths&&this.cacheLengths.length===this.curves.length)return this.cacheLengths;const t=[];let e=0;for(let i=0,n=this.curves.length;i1&&!e[e.length-1].equals(e[0])&&e.push(e[0]),e}copy(t){super.copy(t),this.curves=[];for(let e=0,i=t.curves.length;e0){const t=l.getPoint(0);t.equals(this.currentPoint)||this.lineTo(t.x,t.y)}this.curves.push(l);const c=l.getPoint(1);return this.currentPoint.copy(c),this}copy(t){return super.copy(t),this.currentPoint.copy(t.currentPoint),this}toJSON(){const t=super.toJSON();return t.currentPoint=this.currentPoint.toArray(),t}fromJSON(t){return super.fromJSON(t),this.currentPoint.fromArray(t.currentPoint),this}}class Yl extends $n{constructor(t=[new We(0,-.5),new We(.5,0),new We(0,.5)],e=12,i=0,n=2*Math.PI){super(),this.type="LatheGeometry",this.parameters={points:t,segments:e,phiStart:i,phiLength:n},e=Math.floor(e),n=Oe(n,0,2*Math.PI);const r=[],s=[],a=[],o=[],l=[],c=1/e,h=new $e,u=new We,d=new $e,p=new $e,m=new $e;let f=0,g=0;for(let e=0;e<=t.length-1;e++)switch(e){case 0:f=t[e+1].x-t[e].x,g=t[e+1].y-t[e].y,d.x=1*g,d.y=-f,d.z=0*g,m.copy(d),d.normalize(),o.push(d.x,d.y,d.z);break;case t.length-1:o.push(m.x,m.y,m.z);break;default:f=t[e+1].x-t[e].x,g=t[e+1].y-t[e].y,d.x=1*g,d.y=-f,d.z=0*g,p.copy(d),d.x+=m.x,d.y+=m.y,d.z+=m.z,d.normalize(),o.push(d.x,d.y,d.z),m.copy(p)}for(let r=0;r<=e;r++){const d=i+r*c*n,p=Math.sin(d),m=Math.cos(d);for(let i=0;i<=t.length-1;i++){h.x=t[i].x*p,h.y=t[i].y,h.z=t[i].x*m,s.push(h.x,h.y,h.z),u.x=r/e,u.y=i/(t.length-1),a.push(u.x,u.y);const n=o[3*i+0]*p,c=o[3*i+1],d=o[3*i+0]*m;l.push(n,c,d)}}for(let i=0;i0&&v(!0),e>0&&v(!1)),this.setIndex(c),this.setAttribute("position",new Wn(h,3)),this.setAttribute("normal",new Wn(u,3)),this.setAttribute("uv",new Wn(d,2))}copy(t){return super.copy(t),this.parameters=Object.assign({},t.parameters),this}static fromJSON(t){return new Kl(t.radiusTop,t.radiusBottom,t.height,t.radialSegments,t.heightSegments,t.openEnded,t.thetaStart,t.thetaLength)}}class $l extends Kl{constructor(t=1,e=1,i=32,n=1,r=!1,s=0,a=2*Math.PI){super(0,t,e,i,n,r,s,a),this.type="ConeGeometry",this.parameters={radius:t,height:e,radialSegments:i,heightSegments:n,openEnded:r,thetaStart:s,thetaLength:a}}static fromJSON(t){return new $l(t.radius,t.height,t.radialSegments,t.heightSegments,t.openEnded,t.thetaStart,t.thetaLength)}}class Ql extends $n{constructor(t=[],e=[],i=1,n=0){super(),this.type="PolyhedronGeometry",this.parameters={vertices:t,indices:e,radius:i,detail:n};const r=[],s=[];function a(t,e,i,n){const r=n+1,s=[];for(let n=0;n<=r;n++){s[n]=[];const a=t.clone().lerp(i,n/r),o=e.clone().lerp(i,n/r),l=r-n;for(let t=0;t<=l;t++)s[n][t]=0===t&&n===r?a:a.clone().lerp(o,t/l)}for(let t=0;t.9&&a<.1&&(e<.2&&(s[t+0]+=1),i<.2&&(s[t+2]+=1),n<.2&&(s[t+4]+=1))}}()}(),this.setAttribute("position",new Wn(r,3)),this.setAttribute("normal",new Wn(r.slice(),3)),this.setAttribute("uv",new Wn(s,2)),0===n?this.computeVertexNormals():this.normalizeNormals()}copy(t){return super.copy(t),this.parameters=Object.assign({},t.parameters),this}static fromJSON(t){return new Ql(t.vertices,t.indices,t.radius,t.details)}}class tc extends Ql{constructor(t=1,e=0){const i=(1+Math.sqrt(5))/2,n=1/i;super([-1,-1,-1,-1,-1,1,-1,1,-1,-1,1,1,1,-1,-1,1,-1,1,1,1,-1,1,1,1,0,-n,-i,0,-n,i,0,n,-i,0,n,i,-n,-i,0,-n,i,0,n,-i,0,n,i,0,-i,0,-n,i,0,-n,-i,0,n,i,0,n],[3,11,7,3,7,15,3,15,13,7,19,17,7,17,6,7,6,15,17,4,8,17,8,10,17,10,6,8,0,16,8,16,2,8,2,10,0,12,1,0,1,18,0,18,16,6,10,2,6,2,13,6,13,15,2,16,18,2,18,3,2,3,13,18,1,9,18,9,11,18,11,3,4,14,12,4,12,0,4,0,8,11,9,5,11,5,19,11,19,7,19,5,14,19,14,4,19,4,17,1,12,14,1,14,5,1,5,9],t,e),this.type="DodecahedronGeometry",this.parameters={radius:t,detail:e}}static fromJSON(t){return new tc(t.radius,t.detail)}}const ec=new $e,ic=new $e,nc=new $e,rc=new Ln;class sc extends $n{constructor(t=null,e=1){if(super(),this.type="EdgesGeometry",this.parameters={geometry:t,thresholdAngle:e},null!==t){const i=4,n=Math.pow(10,i),r=Math.cos(Ie*e),s=t.getIndex(),a=t.getAttribute("position"),o=s?s.count:a.count,l=[0,0,0],c=["a","b","c"],h=new Array(3),u={},d=[];for(let t=0;t80*i){o=c=t[0],l=h=t[1];for(let e=i;ec&&(c=u),d>h&&(h=d);p=Math.max(c-o,h-l),p=0!==p?32767/p:0}return hc(s,a,i,o,l,p,0),a};function lc(t,e,i,n,r){let s,a;if(r===function(t,e,i,n){let r=0;for(let s=e,a=i-n;s0)for(s=e;s=e;s-=n)a=Lc(s,t[s],t[s+1],a);return a&&Sc(a,a.next)&&(Rc(a),a=a.next),a}function cc(t,e){if(!t)return t;e||(e=t);let i,n=t;do{if(i=!1,n.steiner||!Sc(n,n.next)&&0!==bc(n.prev,n,n.next))n=n.next;else{if(Rc(n),n=e=n.prev,n===n.next)break;i=!0}}while(i||n!==e);return e}function hc(t,e,i,n,r,s,a){if(!t)return;!a&&s&&function(t,e,i,n){let r=t;do{0===r.z&&(r.z=xc(r.x,r.y,e,i,n)),r.prevZ=r.prev,r.nextZ=r.next,r=r.next}while(r!==t);r.prevZ.nextZ=null,r.prevZ=null,function(t){let e,i,n,r,s,a,o,l,c=1;do{for(i=t,t=null,s=null,a=0;i;){for(a++,n=i,o=0,e=0;e0||l>0&&n;)0!==o&&(0===l||!n||i.z<=n.z)?(r=i,i=i.nextZ,o--):(r=n,n=n.nextZ,l--),s?s.nextZ=r:t=r,r.prevZ=s,s=r;i=n}s.nextZ=null,c*=2}while(a>1)}(r)}(t,n,r,s);let o,l,c=t;for(;t.prev!==t.next;)if(o=t.prev,l=t.next,s?dc(t,n,r,s):uc(t))e.push(o.i/i|0),e.push(t.i/i|0),e.push(l.i/i|0),Rc(t),t=l.next,c=l.next;else if((t=l)===c){a?1===a?hc(t=pc(cc(t),e,i),e,i,n,r,s,2):2===a&&mc(t,e,i,n,r,s):hc(cc(t),e,i,n,r,s,1);break}}function uc(t){const e=t.prev,i=t,n=t.next;if(bc(e,i,n)>=0)return!1;const r=e.x,s=i.x,a=n.x,o=e.y,l=i.y,c=n.y,h=rs?r>a?r:a:s>a?s:a,p=o>l?o>c?o:c:l>c?l:c;let m=n.next;for(;m!==e;){if(m.x>=h&&m.x<=d&&m.y>=u&&m.y<=p&&yc(r,o,s,l,a,c,m.x,m.y)&&bc(m.prev,m,m.next)>=0)return!1;m=m.next}return!0}function dc(t,e,i,n){const r=t.prev,s=t,a=t.next;if(bc(r,s,a)>=0)return!1;const o=r.x,l=s.x,c=a.x,h=r.y,u=s.y,d=a.y,p=ol?o>c?o:c:l>c?l:c,g=h>u?h>d?h:d:u>d?u:d,v=xc(p,m,e,i,n),x=xc(f,g,e,i,n);let _=t.prevZ,y=t.nextZ;for(;_&&_.z>=v&&y&&y.z<=x;){if(_.x>=p&&_.x<=f&&_.y>=m&&_.y<=g&&_!==r&&_!==a&&yc(o,h,l,u,c,d,_.x,_.y)&&bc(_.prev,_,_.next)>=0)return!1;if(_=_.prevZ,y.x>=p&&y.x<=f&&y.y>=m&&y.y<=g&&y!==r&&y!==a&&yc(o,h,l,u,c,d,y.x,y.y)&&bc(y.prev,y,y.next)>=0)return!1;y=y.nextZ}for(;_&&_.z>=v;){if(_.x>=p&&_.x<=f&&_.y>=m&&_.y<=g&&_!==r&&_!==a&&yc(o,h,l,u,c,d,_.x,_.y)&&bc(_.prev,_,_.next)>=0)return!1;_=_.prevZ}for(;y&&y.z<=x;){if(y.x>=p&&y.x<=f&&y.y>=m&&y.y<=g&&y!==r&&y!==a&&yc(o,h,l,u,c,d,y.x,y.y)&&bc(y.prev,y,y.next)>=0)return!1;y=y.nextZ}return!0}function pc(t,e,i){let n=t;do{const r=n.prev,s=n.next.next;!Sc(r,s)&&wc(r,n,n.next,s)&&Ec(r,s)&&Ec(s,r)&&(e.push(r.i/i|0),e.push(n.i/i|0),e.push(s.i/i|0),Rc(n),Rc(n.next),n=t=s),n=n.next}while(n!==t);return cc(n)}function mc(t,e,i,n,r,s){let a=t;do{let t=a.next.next;for(;t!==a.prev;){if(a.i!==t.i&&Mc(a,t)){let o=Cc(a,t);return a=cc(a,a.next),o=cc(o,o.next),hc(a,e,i,n,r,s,0),void hc(o,e,i,n,r,s,0)}t=t.next}a=a.next}while(a!==t)}function fc(t,e){return t.x-e.x}function gc(t,e){const i=function(t,e){let i,n=e,r=-1/0;const s=t.x,a=t.y;do{if(a<=n.y&&a>=n.next.y&&n.next.y!==n.y){const t=n.x+(a-n.y)*(n.next.x-n.x)/(n.next.y-n.y);if(t<=s&&t>r&&(r=t,i=n.x=n.x&&n.x>=l&&s!==n.x&&yc(ai.x||n.x===i.x&&vc(i,n)))&&(i=n,u=h)),n=n.next}while(n!==o);return i}(t,e);if(!i)return e;const n=Cc(i,t);return cc(n,n.next),cc(i,i.next)}function vc(t,e){return bc(t.prev,t,e.prev)<0&&bc(e.next,t,t.next)<0}function xc(t,e,i,n,r){return(t=1431655765&((t=858993459&((t=252645135&((t=16711935&((t=(t-i)*r|0)|t<<8))|t<<4))|t<<2))|t<<1))|(e=1431655765&((e=858993459&((e=252645135&((e=16711935&((e=(e-n)*r|0)|e<<8))|e<<4))|e<<2))|e<<1))<<1}function _c(t){let e=t,i=t;do{(e.x=(t-a)*(s-o)&&(t-a)*(n-o)>=(i-a)*(e-o)&&(i-a)*(s-o)>=(r-a)*(n-o)}function Mc(t,e){return t.next.i!==e.i&&t.prev.i!==e.i&&!function(t,e){let i=t;do{if(i.i!==t.i&&i.next.i!==t.i&&i.i!==e.i&&i.next.i!==e.i&&wc(i,i.next,t,e))return!0;i=i.next}while(i!==t);return!1}(t,e)&&(Ec(t,e)&&Ec(e,t)&&function(t,e){let i=t,n=!1;const r=(t.x+e.x)/2,s=(t.y+e.y)/2;do{i.y>s!=i.next.y>s&&i.next.y!==i.y&&r<(i.next.x-i.x)*(s-i.y)/(i.next.y-i.y)+i.x&&(n=!n),i=i.next}while(i!==t);return n}(t,e)&&(bc(t.prev,t,e.prev)||bc(t,e.prev,e))||Sc(t,e)&&bc(t.prev,t,t.next)>0&&bc(e.prev,e,e.next)>0)}function bc(t,e,i){return(e.y-t.y)*(i.x-e.x)-(e.x-t.x)*(i.y-e.y)}function Sc(t,e){return t.x===e.x&&t.y===e.y}function wc(t,e,i,n){const r=Ac(bc(t,e,i)),s=Ac(bc(t,e,n)),a=Ac(bc(i,n,t)),o=Ac(bc(i,n,e));return r!==s&&a!==o||(!(0!==r||!Tc(t,i,e))||(!(0!==s||!Tc(t,n,e))||(!(0!==a||!Tc(i,t,n))||!(0!==o||!Tc(i,e,n)))))}function Tc(t,e,i){return e.x<=Math.max(t.x,i.x)&&e.x>=Math.min(t.x,i.x)&&e.y<=Math.max(t.y,i.y)&&e.y>=Math.min(t.y,i.y)}function Ac(t){return t>0?1:t<0?-1:0}function Ec(t,e){return bc(t.prev,t,t.next)<0?bc(t,e,t.next)>=0&&bc(t,t.prev,e)>=0:bc(t,e,t.prev)<0||bc(t,t.next,e)<0}function Cc(t,e){const i=new Pc(t.i,t.x,t.y),n=new Pc(e.i,e.x,e.y),r=t.next,s=e.prev;return t.next=e,e.prev=t,i.next=r,r.prev=i,n.next=i,i.prev=n,s.next=n,n.prev=s,n}function Lc(t,e,i,n){const r=new Pc(t,e,i);return n?(r.next=n.next,r.prev=n,n.next.prev=r,n.next=r):(r.prev=r,r.next=r),r}function Rc(t){t.next.prev=t.prev,t.prev.next=t.next,t.prevZ&&(t.prevZ.nextZ=t.nextZ),t.nextZ&&(t.nextZ.prevZ=t.prevZ)}function Pc(t,e,i){this.i=t,this.x=e,this.y=i,this.prev=null,this.next=null,this.z=0,this.prevZ=null,this.nextZ=null,this.steiner=!1}class Ic{static area(t){const e=t.length;let i=0;for(let n=e-1,r=0;r2&&t[e-1].equals(t[0])&&t.pop()}function Nc(t,e){for(let i=0;iNumber.EPSILON){const u=Math.sqrt(h),d=Math.sqrt(l*l+c*c),p=e.x-o/u,m=e.y+a/u,f=((i.x-c/d-p)*c-(i.y+l/d-m)*l)/(a*c-o*l);n=p+a*f-t.x,r=m+o*f-t.y;const g=n*n+r*r;if(g<=2)return new We(n,r);s=Math.sqrt(g/2)}else{let t=!1;a>Number.EPSILON?l>Number.EPSILON&&(t=!0):a<-Number.EPSILON?l<-Number.EPSILON&&(t=!0):Math.sign(o)===Math.sign(c)&&(t=!0),t?(n=-o,r=a,s=Math.sqrt(h)):(n=a,r=o,s=Math.sqrt(h/2))}return new We(n/s,r/s)}const P=[];for(let t=0,e=A.length,i=e-1,n=t+1;t=0;t--){const e=t/p,i=h*Math.cos(e*Math.PI/2),n=u*Math.sin(e*Math.PI/2)+d;for(let t=0,e=A.length;t=0;){const n=i;let r=i-1;r<0&&(r=t.length-1);for(let t=0,i=o+2*p;t0)&&d.push(e,r,l),(t!==i-1||o0!=t>0&&this.version++,this._sheen=t}get clearcoat(){return this._clearcoat}set clearcoat(t){this._clearcoat>0!=t>0&&this.version++,this._clearcoat=t}get iridescence(){return this._iridescence}set iridescence(t){this._iridescence>0!=t>0&&this.version++,this._iridescence=t}get transmission(){return this._transmission}set transmission(t){this._transmission>0!=t>0&&this.version++,this._transmission=t}copy(t){return super.copy(t),this.defines={STANDARD:"",PHYSICAL:""},this.clearcoat=t.clearcoat,this.clearcoatMap=t.clearcoatMap,this.clearcoatRoughness=t.clearcoatRoughness,this.clearcoatRoughnessMap=t.clearcoatRoughnessMap,this.clearcoatNormalMap=t.clearcoatNormalMap,this.clearcoatNormalScale.copy(t.clearcoatNormalScale),this.ior=t.ior,this.iridescence=t.iridescence,this.iridescenceMap=t.iridescenceMap,this.iridescenceIOR=t.iridescenceIOR,this.iridescenceThicknessRange=[...t.iridescenceThicknessRange],this.iridescenceThicknessMap=t.iridescenceThicknessMap,this.sheen=t.sheen,this.sheenColor.copy(t.sheenColor),this.sheenColorMap=t.sheenColorMap,this.sheenRoughness=t.sheenRoughness,this.sheenRoughnessMap=t.sheenRoughnessMap,this.transmission=t.transmission,this.transmissionMap=t.transmissionMap,this.thickness=t.thickness,this.thicknessMap=t.thicknessMap,this.attenuationDistance=t.attenuationDistance,this.attenuationColor.copy(t.attenuationColor),this.specularIntensity=t.specularIntensity,this.specularIntensityMap=t.specularIntensityMap,this.specularColor.copy(t.specularColor),this.specularColorMap=t.specularColorMap,this}}class Qc extends Pn{constructor(t){super(),this.isMeshPhongMaterial=!0,this.type="MeshPhongMaterial",this.color=new zn(16777215),this.specular=new zn(1118481),this.shininess=30,this.map=null,this.lightMap=null,this.lightMapIntensity=1,this.aoMap=null,this.aoMapIntensity=1,this.emissive=new zn(0),this.emissiveIntensity=1,this.emissiveMap=null,this.bumpMap=null,this.bumpScale=1,this.normalMap=null,this.normalMapType=ye,this.normalScale=new We(1,1),this.displacementMap=null,this.displacementScale=1,this.displacementBias=0,this.specularMap=null,this.alphaMap=null,this.envMap=null,this.combine=G,this.reflectivity=1,this.refractionRatio=.98,this.wireframe=!1,this.wireframeLinewidth=1,this.wireframeLinecap="round",this.wireframeLinejoin="round",this.flatShading=!1,this.fog=!0,this.setValues(t)}copy(t){return super.copy(t),this.color.copy(t.color),this.specular.copy(t.specular),this.shininess=t.shininess,this.map=t.map,this.lightMap=t.lightMap,this.lightMapIntensity=t.lightMapIntensity,this.aoMap=t.aoMap,this.aoMapIntensity=t.aoMapIntensity,this.emissive.copy(t.emissive),this.emissiveMap=t.emissiveMap,this.emissiveIntensity=t.emissiveIntensity,this.bumpMap=t.bumpMap,this.bumpScale=t.bumpScale,this.normalMap=t.normalMap,this.normalMapType=t.normalMapType,this.normalScale.copy(t.normalScale),this.displacementMap=t.displacementMap,this.displacementScale=t.displacementScale,this.displacementBias=t.displacementBias,this.specularMap=t.specularMap,this.alphaMap=t.alphaMap,this.envMap=t.envMap,this.combine=t.combine,this.reflectivity=t.reflectivity,this.refractionRatio=t.refractionRatio,this.wireframe=t.wireframe,this.wireframeLinewidth=t.wireframeLinewidth,this.wireframeLinecap=t.wireframeLinecap,this.wireframeLinejoin=t.wireframeLinejoin,this.flatShading=t.flatShading,this.fog=t.fog,this}}class th extends Pn{constructor(t){super(),this.isMeshToonMaterial=!0,this.defines={TOON:""},this.type="MeshToonMaterial",this.color=new zn(16777215),this.map=null,this.gradientMap=null,this.lightMap=null,this.lightMapIntensity=1,this.aoMap=null,this.aoMapIntensity=1,this.emissive=new zn(0),this.emissiveIntensity=1,this.emissiveMap=null,this.bumpMap=null,this.bumpScale=1,this.normalMap=null,this.normalMapType=ye,this.normalScale=new We(1,1),this.displacementMap=null,this.displacementScale=1,this.displacementBias=0,this.alphaMap=null,this.wireframe=!1,this.wireframeLinewidth=1,this.wireframeLinecap="round",this.wireframeLinejoin="round",this.fog=!0,this.setValues(t)}copy(t){return super.copy(t),this.color.copy(t.color),this.map=t.map,this.gradientMap=t.gradientMap,this.lightMap=t.lightMap,this.lightMapIntensity=t.lightMapIntensity,this.aoMap=t.aoMap,this.aoMapIntensity=t.aoMapIntensity,this.emissive.copy(t.emissive),this.emissiveMap=t.emissiveMap,this.emissiveIntensity=t.emissiveIntensity,this.bumpMap=t.bumpMap,this.bumpScale=t.bumpScale,this.normalMap=t.normalMap,this.normalMapType=t.normalMapType,this.normalScale.copy(t.normalScale),this.displacementMap=t.displacementMap,this.displacementScale=t.displacementScale,this.displacementBias=t.displacementBias,this.alphaMap=t.alphaMap,this.wireframe=t.wireframe,this.wireframeLinewidth=t.wireframeLinewidth,this.wireframeLinecap=t.wireframeLinecap,this.wireframeLinejoin=t.wireframeLinejoin,this.fog=t.fog,this}}class eh extends Pn{constructor(t){super(),this.isMeshNormalMaterial=!0,this.type="MeshNormalMaterial",this.bumpMap=null,this.bumpScale=1,this.normalMap=null,this.normalMapType=ye,this.normalScale=new We(1,1),this.displacementMap=null,this.displacementScale=1,this.displacementBias=0,this.wireframe=!1,this.wireframeLinewidth=1,this.flatShading=!1,this.setValues(t)}copy(t){return super.copy(t),this.bumpMap=t.bumpMap,this.bumpScale=t.bumpScale,this.normalMap=t.normalMap,this.normalMapType=t.normalMapType,this.normalScale.copy(t.normalScale),this.displacementMap=t.displacementMap,this.displacementScale=t.displacementScale,this.displacementBias=t.displacementBias,this.wireframe=t.wireframe,this.wireframeLinewidth=t.wireframeLinewidth,this.flatShading=t.flatShading,this}}class ih extends Pn{constructor(t){super(),this.isMeshLambertMaterial=!0,this.type="MeshLambertMaterial",this.color=new zn(16777215),this.map=null,this.lightMap=null,this.lightMapIntensity=1,this.aoMap=null,this.aoMapIntensity=1,this.emissive=new zn(0),this.emissiveIntensity=1,this.emissiveMap=null,this.bumpMap=null,this.bumpScale=1,this.normalMap=null,this.normalMapType=ye,this.normalScale=new We(1,1),this.displacementMap=null,this.displacementScale=1,this.displacementBias=0,this.specularMap=null,this.alphaMap=null,this.envMap=null,this.combine=G,this.reflectivity=1,this.refractionRatio=.98,this.wireframe=!1,this.wireframeLinewidth=1,this.wireframeLinecap="round",this.wireframeLinejoin="round",this.flatShading=!1,this.fog=!0,this.setValues(t)}copy(t){return super.copy(t),this.color.copy(t.color),this.map=t.map,this.lightMap=t.lightMap,this.lightMapIntensity=t.lightMapIntensity,this.aoMap=t.aoMap,this.aoMapIntensity=t.aoMapIntensity,this.emissive.copy(t.emissive),this.emissiveMap=t.emissiveMap,this.emissiveIntensity=t.emissiveIntensity,this.bumpMap=t.bumpMap,this.bumpScale=t.bumpScale,this.normalMap=t.normalMap,this.normalMapType=t.normalMapType,this.normalScale.copy(t.normalScale),this.displacementMap=t.displacementMap,this.displacementScale=t.displacementScale,this.displacementBias=t.displacementBias,this.specularMap=t.specularMap,this.alphaMap=t.alphaMap,this.envMap=t.envMap,this.combine=t.combine,this.reflectivity=t.reflectivity,this.refractionRatio=t.refractionRatio,this.wireframe=t.wireframe,this.wireframeLinewidth=t.wireframeLinewidth,this.wireframeLinecap=t.wireframeLinecap,this.wireframeLinejoin=t.wireframeLinejoin,this.flatShading=t.flatShading,this.fog=t.fog,this}}class nh extends Pn{constructor(t){super(),this.isMeshMatcapMaterial=!0,this.defines={MATCAP:""},this.type="MeshMatcapMaterial",this.color=new zn(16777215),this.matcap=null,this.map=null,this.bumpMap=null,this.bumpScale=1,this.normalMap=null,this.normalMapType=ye,this.normalScale=new We(1,1),this.displacementMap=null,this.displacementScale=1,this.displacementBias=0,this.alphaMap=null,this.flatShading=!1,this.fog=!0,this.setValues(t)}copy(t){return super.copy(t),this.defines={MATCAP:""},this.color.copy(t.color),this.matcap=t.matcap,this.map=t.map,this.bumpMap=t.bumpMap,this.bumpScale=t.bumpScale,this.normalMap=t.normalMap,this.normalMapType=t.normalMapType,this.normalScale.copy(t.normalScale),this.displacementMap=t.displacementMap,this.displacementScale=t.displacementScale,this.displacementBias=t.displacementBias,this.alphaMap=t.alphaMap,this.flatShading=t.flatShading,this.fog=t.fog,this}}class rh extends ol{constructor(t){super(),this.isLineDashedMaterial=!0,this.type="LineDashedMaterial",this.scale=1,this.dashSize=3,this.gapSize=1,this.setValues(t)}copy(t){return super.copy(t),this.scale=t.scale,this.dashSize=t.dashSize,this.gapSize=t.gapSize,this}}function sh(t,e,i){return oh(t)?new t.constructor(t.subarray(e,void 0!==i?i:t.length)):t.slice(e,i)}function ah(t,e,i){return!t||!i&&t.constructor===e?t:"number"==typeof e.BYTES_PER_ELEMENT?new e(t):Array.prototype.slice.call(t)}function oh(t){return ArrayBuffer.isView(t)&&!(t instanceof DataView)}function lh(t){const e=t.length,i=new Array(e);for(let t=0;t!==e;++t)i[t]=t;return i.sort((function(e,i){return t[e]-t[i]})),i}function ch(t,e,i){const n=t.length,r=new t.constructor(n);for(let s=0,a=0;a!==n;++s){const n=i[s]*e;for(let i=0;i!==e;++i)r[a++]=t[n+i]}return r}function hh(t,e,i,n){let r=1,s=t[0];for(;void 0!==s&&void 0===s[n];)s=t[r++];if(void 0===s)return;let a=s[n];if(void 0!==a)if(Array.isArray(a))do{a=s[n],void 0!==a&&(e.push(s.time),i.push.apply(i,a)),s=t[r++]}while(void 0!==s);else if(void 0!==a.toArray)do{a=s[n],void 0!==a&&(e.push(s.time),a.toArray(i,i.length)),s=t[r++]}while(void 0!==s);else do{a=s[n],void 0!==a&&(e.push(s.time),i.push(a)),s=t[r++]}while(void 0!==s)}const uh={arraySlice:sh,convertArray:ah,isTypedArray:oh,getKeyframeOrder:lh,sortedArray:ch,flattenJSON:hh,subclip:function(t,e,i,n,r=30){const s=t.clone();s.name=e;const a=[];for(let t=0;t=n)){l.push(e.times[t]);for(let i=0;is.tracks[t].times[0]&&(o=s.tracks[t].times[0]);for(let t=0;t=n.times[u]){const t=u*l+o,e=t+l-o;d=sh(n.values,t,e)}else{const t=n.createInterpolant(),e=o,i=l-o;t.evaluate(s),d=sh(t.resultBuffer,e,i)}if("quaternion"===r){(new Ke).fromArray(d).normalize().conjugate().toArray(d)}const p=a.times.length;for(let t=0;t=r)break t;{const a=e[1];t=r)break e}s=i,i=0}}for(;i>>1;te;)--s;if(++s,0!==r||s!==n){r>=s&&(s=Math.max(s,1),r=s-1);const t=this.getValueSize();this.times=sh(i,r,s),this.values=sh(this.values,r*t,s*t)}return this}validate(){let t=!0;const e=this.getValueSize();e-Math.floor(e)!=0&&(console.error("THREE.KeyframeTrack: Invalid value size in track.",this),t=!1);const i=this.times,n=this.values,r=i.length;0===r&&(console.error("THREE.KeyframeTrack: Track is empty.",this),t=!1);let s=null;for(let e=0;e!==r;e++){const n=i[e];if("number"==typeof n&&isNaN(n)){console.error("THREE.KeyframeTrack: Time is not a valid number.",this,e,n),t=!1;break}if(null!==s&&s>n){console.error("THREE.KeyframeTrack: Out of order keys.",this,e,n,s),t=!1;break}s=n}if(void 0!==n&&oh(n))for(let e=0,i=n.length;e!==i;++e){const i=n[e];if(isNaN(i)){console.error("THREE.KeyframeTrack: Value is not a valid number.",this,e,i),t=!1;break}}return t}optimize(){const t=sh(this.times),e=sh(this.values),i=this.getValueSize(),n=this.getInterpolation()===ue,r=t.length-1;let s=1;for(let a=1;a0){t[s]=t[r];for(let t=r*i,n=s*i,a=0;a!==i;++a)e[n+a]=e[t+a];++s}return s!==t.length?(this.times=sh(t,0,s),this.values=sh(e,0,s*i)):(this.times=t,this.values=e),this}clone(){const t=sh(this.times,0),e=sh(this.values,0),i=new(0,this.constructor)(this.name,t,e);return i.createInterpolant=this.createInterpolant,i}}gh.prototype.TimeBufferType=Float32Array,gh.prototype.ValueBufferType=Float32Array,gh.prototype.DefaultInterpolation=he;class vh extends gh{}vh.prototype.ValueTypeName="bool",vh.prototype.ValueBufferType=Array,vh.prototype.DefaultInterpolation=ce,vh.prototype.InterpolantFactoryMethodLinear=void 0,vh.prototype.InterpolantFactoryMethodSmooth=void 0;class xh extends gh{}xh.prototype.ValueTypeName="color";class _h extends gh{}_h.prototype.ValueTypeName="number";class yh extends dh{constructor(t,e,i,n){super(t,e,i,n)}interpolate_(t,e,i,n){const r=this.resultBuffer,s=this.sampleValues,a=this.valueSize,o=(i-e)/(n-e);let l=t*a;for(let t=l+a;l!==t;l+=4)Ke.slerpFlat(r,0,s,l-a,s,l,o);return r}}class Mh extends gh{InterpolantFactoryMethodLinear(t){return new yh(this.times,this.values,this.getValueSize(),t)}}Mh.prototype.ValueTypeName="quaternion",Mh.prototype.DefaultInterpolation=he,Mh.prototype.InterpolantFactoryMethodSmooth=void 0;class bh extends gh{}bh.prototype.ValueTypeName="string",bh.prototype.ValueBufferType=Array,bh.prototype.DefaultInterpolation=ce,bh.prototype.InterpolantFactoryMethodLinear=void 0,bh.prototype.InterpolantFactoryMethodSmooth=void 0;class Sh extends gh{}Sh.prototype.ValueTypeName="vector";class wh{constructor(t,e=-1,i,n=2500){this.name=t,this.tracks=i,this.duration=e,this.blendMode=n,this.uuid=Ne(),this.duration<0&&this.resetDuration()}static parse(t){const e=[],i=t.tracks,n=1/(t.fps||1);for(let t=0,r=i.length;t!==r;++t)e.push(Th(i[t]).scale(n));const r=new this(t.name,t.duration,e,t.blendMode);return r.uuid=t.uuid,r}static toJSON(t){const e=[],i=t.tracks,n={name:t.name,duration:t.duration,tracks:e,uuid:t.uuid,blendMode:t.blendMode};for(let t=0,n=i.length;t!==n;++t)e.push(gh.toJSON(i[t]));return n}static CreateFromMorphTargetSequence(t,e,i,n){const r=e.length,s=[];for(let t=0;t1){const t=s[1];let e=n[t];e||(n[t]=e=[]),e.push(i)}}const s=[];for(const t in n)s.push(this.CreateFromMorphTargetSequence(t,n[t],e,i));return s}static parseAnimation(t,e){if(!t)return console.error("THREE.AnimationClip: No animation in JSONLoader data."),null;const i=function(t,e,i,n,r){if(0!==i.length){const s=[],a=[];hh(i,s,a,n),0!==s.length&&r.push(new t(e,s,a))}},n=[],r=t.name||"default",s=t.fps||30,a=t.blendMode;let o=t.length||-1;const l=t.hierarchy||[];for(let t=0;t{e&&e(r),this.manager.itemEnd(t)}),0),r;if(void 0!==Rh[t])return void Rh[t].push({onLoad:e,onProgress:i,onError:n});Rh[t]=[],Rh[t].push({onLoad:e,onProgress:i,onError:n});const s=new Request(t,{headers:new Headers(this.requestHeader),credentials:this.withCredentials?"include":"same-origin"}),a=this.mimeType,o=this.responseType;fetch(s).then((e=>{if(200===e.status||0===e.status){if(0===e.status&&console.warn("THREE.FileLoader: HTTP Status 0 received."),"undefined"==typeof ReadableStream||void 0===e.body||void 0===e.body.getReader)return e;const i=Rh[t],n=e.body.getReader(),r=e.headers.get("Content-Length")||e.headers.get("X-File-Size"),s=r?parseInt(r):0,a=0!==s;let o=0;const l=new ReadableStream({start(t){!function e(){n.read().then((({done:n,value:r})=>{if(n)t.close();else{o+=r.byteLength;const n=new ProgressEvent("progress",{lengthComputable:a,loaded:o,total:s});for(let t=0,e=i.length;t{switch(o){case"arraybuffer":return t.arrayBuffer();case"blob":return t.blob();case"document":return t.text().then((t=>(new DOMParser).parseFromString(t,a)));case"json":return t.json();default:if(void 0===a)return t.text();{const e=/charset="?([^;"\s]*)"?/i.exec(a),i=e&&e[1]?e[1].toLowerCase():void 0,n=new TextDecoder(i);return t.arrayBuffer().then((t=>n.decode(t)))}}})).then((e=>{Ah.add(t,e);const i=Rh[t];delete Rh[t];for(let t=0,n=i.length;t{const i=Rh[t];if(void 0===i)throw this.manager.itemError(t),e;delete Rh[t];for(let t=0,n=i.length;t{this.manager.itemEnd(t)})),this.manager.itemStart(t)}setResponseType(t){return this.responseType=t,this}setMimeType(t){return this.mimeType=t,this}}class Dh extends Lh{constructor(t){super(t)}load(t,e,i,n){void 0!==this.path&&(t=this.path+t),t=this.manager.resolveURL(t);const r=this,s=Ah.get(t);if(void 0!==s)return r.manager.itemStart(t),setTimeout((function(){e&&e(s),r.manager.itemEnd(t)}),0),s;const a=Je("img");function o(){c(),Ah.add(t,this),e&&e(this),r.manager.itemEnd(t)}function l(e){c(),n&&n(e),r.manager.itemError(t),r.manager.itemEnd(t)}function c(){a.removeEventListener("load",o,!1),a.removeEventListener("error",l,!1)}return a.addEventListener("load",o,!1),a.addEventListener("error",l,!1),"data:"!==t.slice(0,5)&&void 0!==this.crossOrigin&&(a.crossOrigin=this.crossOrigin),r.manager.itemStart(t),a.src=t,a}}class Nh extends xn{constructor(t,e=1){super(),this.isLight=!0,this.type="Light",this.color=new zn(t),this.intensity=e}dispose(){}copy(t,e){return super.copy(t,e),this.color.copy(t.color),this.intensity=t.intensity,this}toJSON(t){const e=super.toJSON(t);return e.object.color=this.color.getHex(),e.object.intensity=this.intensity,void 0!==this.groundColor&&(e.object.groundColor=this.groundColor.getHex()),void 0!==this.distance&&(e.object.distance=this.distance),void 0!==this.angle&&(e.object.angle=this.angle),void 0!==this.decay&&(e.object.decay=this.decay),void 0!==this.penumbra&&(e.object.penumbra=this.penumbra),void 0!==this.shadow&&(e.object.shadow=this.shadow.toJSON()),e}}class Oh extends Nh{constructor(t,e,i){super(t,i),this.isHemisphereLight=!0,this.type="HemisphereLight",this.position.copy(xn.DEFAULT_UP),this.updateMatrix(),this.groundColor=new zn(e)}copy(t,e){return super.copy(t,e),this.groundColor.copy(t.groundColor),this}}const zh=new qi,Uh=new $e,Bh=new $e;class Fh{constructor(t){this.camera=t,this.bias=0,this.normalBias=0,this.radius=1,this.blurSamples=8,this.mapSize=new We(512,512),this.map=null,this.mapPass=null,this.matrix=new qi,this.autoUpdate=!0,this.needsUpdate=!1,this._frustum=new Dr,this._frameExtents=new We(1,1),this._viewportCount=1,this._viewports=[new fi(0,0,1,1)]}getViewportCount(){return this._viewportCount}getFrustum(){return this._frustum}updateMatrices(t){const e=this.camera,i=this.matrix;Uh.setFromMatrixPosition(t.matrixWorld),e.position.copy(Uh),Bh.setFromMatrixPosition(t.target.matrixWorld),e.lookAt(Bh),e.updateMatrixWorld(),zh.multiplyMatrices(e.projectionMatrix,e.matrixWorldInverse),this._frustum.setFromProjectionMatrix(zh),i.set(.5,0,0,.5,0,.5,0,.5,0,0,.5,.5,0,0,0,1),i.multiply(zh)}getViewport(t){return this._viewports[t]}getFrameExtents(){return this._frameExtents}dispose(){this.map&&this.map.dispose(),this.mapPass&&this.mapPass.dispose()}copy(t){return this.camera=t.camera.clone(),this.bias=t.bias,this.radius=t.radius,this.mapSize.copy(t.mapSize),this}clone(){return(new this.constructor).copy(this)}toJSON(){const t={};return 0!==this.bias&&(t.bias=this.bias),0!==this.normalBias&&(t.normalBias=this.normalBias),1!==this.radius&&(t.radius=this.radius),512===this.mapSize.x&&512===this.mapSize.y||(t.mapSize=this.mapSize.toArray()),t.camera=this.camera.toJSON(!1).object,delete t.camera.matrix,t}}class kh extends Fh{constructor(){super(new br(50,1,.5,500)),this.isSpotLightShadow=!0,this.focus=1}updateMatrices(t){const e=this.camera,i=2*De*t.angle*this.focus,n=this.mapSize.width/this.mapSize.height,r=t.distance||e.far;i===e.fov&&n===e.aspect&&r===e.far||(e.fov=i,e.aspect=n,e.far=r,e.updateProjectionMatrix()),super.updateMatrices(t)}copy(t){return super.copy(t),this.focus=t.focus,this}}class Gh extends Nh{constructor(t,e,i=0,n=Math.PI/3,r=0,s=2){super(t,e),this.isSpotLight=!0,this.type="SpotLight",this.position.copy(xn.DEFAULT_UP),this.updateMatrix(),this.target=new xn,this.distance=i,this.angle=n,this.penumbra=r,this.decay=s,this.map=null,this.shadow=new kh}get power(){return this.intensity*Math.PI}set power(t){this.intensity=t/Math.PI}dispose(){this.shadow.dispose()}copy(t,e){return super.copy(t,e),this.distance=t.distance,this.angle=t.angle,this.penumbra=t.penumbra,this.decay=t.decay,this.target=t.target.clone(),this.shadow=t.shadow.clone(),this}}const Vh=new qi,Hh=new $e,Wh=new $e;class jh extends Fh{constructor(){super(new br(90,1,.5,500)),this.isPointLightShadow=!0,this._frameExtents=new We(4,2),this._viewportCount=6,this._viewports=[new fi(2,1,1,1),new fi(0,1,1,1),new fi(3,1,1,1),new fi(1,1,1,1),new fi(3,0,1,1),new fi(1,0,1,1)],this._cubeDirections=[new $e(1,0,0),new $e(-1,0,0),new $e(0,0,1),new $e(0,0,-1),new $e(0,1,0),new $e(0,-1,0)],this._cubeUps=[new $e(0,1,0),new $e(0,1,0),new $e(0,1,0),new $e(0,1,0),new $e(0,0,1),new $e(0,0,-1)]}updateMatrices(t,e=0){const i=this.camera,n=this.matrix,r=t.distance||i.far;r!==i.far&&(i.far=r,i.updateProjectionMatrix()),Hh.setFromMatrixPosition(t.matrixWorld),i.position.copy(Hh),Wh.copy(i.position),Wh.add(this._cubeDirections[e]),i.up.copy(this._cubeUps[e]),i.lookAt(Wh),i.updateMatrixWorld(),n.makeTranslation(-Hh.x,-Hh.y,-Hh.z),Vh.multiplyMatrices(i.projectionMatrix,i.matrixWorldInverse),this._frustum.setFromProjectionMatrix(Vh)}}class qh extends Nh{constructor(t,e,i=0,n=2){super(t,e),this.isPointLight=!0,this.type="PointLight",this.distance=i,this.decay=n,this.shadow=new jh}get power(){return 4*this.intensity*Math.PI}set power(t){this.intensity=t/(4*Math.PI)}dispose(){this.shadow.dispose()}copy(t,e){return super.copy(t,e),this.distance=t.distance,this.decay=t.decay,this.shadow=t.shadow.clone(),this}}class Xh extends Fh{constructor(){super(new Xr(-5,5,5,-5,.5,500)),this.isDirectionalLightShadow=!0}}class Yh extends Nh{constructor(t,e){super(t,e),this.isDirectionalLight=!0,this.type="DirectionalLight",this.position.copy(xn.DEFAULT_UP),this.updateMatrix(),this.target=new xn,this.shadow=new Xh}dispose(){this.shadow.dispose()}copy(t){return super.copy(t),this.target=t.target.clone(),this.shadow=t.shadow.clone(),this}}class Zh extends Nh{constructor(t,e){super(t,e),this.isAmbientLight=!0,this.type="AmbientLight"}}class Jh extends Nh{constructor(t,e,i=10,n=10){super(t,e),this.isRectAreaLight=!0,this.type="RectAreaLight",this.width=i,this.height=n}get power(){return this.intensity*this.width*this.height*Math.PI}set power(t){this.intensity=t/(this.width*this.height*Math.PI)}copy(t){return super.copy(t),this.width=t.width,this.height=t.height,this}toJSON(t){const e=super.toJSON(t);return e.object.width=this.width,e.object.height=this.height,e}}class Kh{constructor(){this.isSphericalHarmonics3=!0,this.coefficients=[];for(let t=0;t<9;t++)this.coefficients.push(new $e)}set(t){for(let e=0;e<9;e++)this.coefficients[e].copy(t[e]);return this}zero(){for(let t=0;t<9;t++)this.coefficients[t].set(0,0,0);return this}getAt(t,e){const i=t.x,n=t.y,r=t.z,s=this.coefficients;return e.copy(s[0]).multiplyScalar(.282095),e.addScaledVector(s[1],.488603*n),e.addScaledVector(s[2],.488603*r),e.addScaledVector(s[3],.488603*i),e.addScaledVector(s[4],i*n*1.092548),e.addScaledVector(s[5],n*r*1.092548),e.addScaledVector(s[6],.315392*(3*r*r-1)),e.addScaledVector(s[7],i*r*1.092548),e.addScaledVector(s[8],.546274*(i*i-n*n)),e}getIrradianceAt(t,e){const i=t.x,n=t.y,r=t.z,s=this.coefficients;return e.copy(s[0]).multiplyScalar(.886227),e.addScaledVector(s[1],1.023328*n),e.addScaledVector(s[2],1.023328*r),e.addScaledVector(s[3],1.023328*i),e.addScaledVector(s[4],.858086*i*n),e.addScaledVector(s[5],.858086*n*r),e.addScaledVector(s[6],.743125*r*r-.247708),e.addScaledVector(s[7],.858086*i*r),e.addScaledVector(s[8],.429043*(i*i-n*n)),e}add(t){for(let e=0;e<9;e++)this.coefficients[e].add(t.coefficients[e]);return this}addScaledSH(t,e){for(let i=0;i<9;i++)this.coefficients[i].addScaledVector(t.coefficients[i],e);return this}scale(t){for(let e=0;e<9;e++)this.coefficients[e].multiplyScalar(t);return this}lerp(t,e){for(let i=0;i<9;i++)this.coefficients[i].lerp(t.coefficients[i],e);return this}equals(t){for(let e=0;e<9;e++)if(!this.coefficients[e].equals(t.coefficients[e]))return!1;return!0}copy(t){return this.set(t.coefficients)}clone(){return(new this.constructor).copy(this)}fromArray(t,e=0){const i=this.coefficients;for(let n=0;n<9;n++)i[n].fromArray(t,e+3*n);return this}toArray(t=[],e=0){const i=this.coefficients;for(let n=0;n<9;n++)i[n].toArray(t,e+3*n);return t}static getBasisAt(t,e){const i=t.x,n=t.y,r=t.z;e[0]=.282095,e[1]=.488603*n,e[2]=.488603*r,e[3]=.488603*i,e[4]=1.092548*i*n,e[5]=1.092548*n*r,e[6]=.315392*(3*r*r-1),e[7]=1.092548*i*r,e[8]=.546274*(i*i-n*n)}}class $h extends Nh{constructor(t=new Kh,e=1){super(void 0,e),this.isLightProbe=!0,this.sh=t}copy(t){return super.copy(t),this.sh.copy(t.sh),this}fromJSON(t){return this.intensity=t.intensity,this.sh.fromArray(t.sh),this}toJSON(t){const e=super.toJSON(t);return e.object.sh=this.sh.toArray(),e}}class Qh extends Lh{constructor(t){super(t),this.textures={}}load(t,e,i,n){const r=this,s=new Ih(r.manager);s.setPath(r.path),s.setRequestHeader(r.requestHeader),s.setWithCredentials(r.withCredentials),s.load(t,(function(i){try{e(r.parse(JSON.parse(i)))}catch(e){n?n(e):console.error(e),r.manager.itemError(t)}}),i,n)}parse(t){const e=this.textures;function i(t){return void 0===e[t]&&console.warn("THREE.MaterialLoader: Undefined texture",t),e[t]}const n=Qh.createMaterialFromType(t.type);if(void 0!==t.uuid&&(n.uuid=t.uuid),void 0!==t.name&&(n.name=t.name),void 0!==t.color&&void 0!==n.color&&n.color.setHex(t.color),void 0!==t.roughness&&(n.roughness=t.roughness),void 0!==t.metalness&&(n.metalness=t.metalness),void 0!==t.sheen&&(n.sheen=t.sheen),void 0!==t.sheenColor&&(n.sheenColor=(new zn).setHex(t.sheenColor)),void 0!==t.sheenRoughness&&(n.sheenRoughness=t.sheenRoughness),void 0!==t.emissive&&void 0!==n.emissive&&n.emissive.setHex(t.emissive),void 0!==t.specular&&void 0!==n.specular&&n.specular.setHex(t.specular),void 0!==t.specularIntensity&&(n.specularIntensity=t.specularIntensity),void 0!==t.specularColor&&void 0!==n.specularColor&&n.specularColor.setHex(t.specularColor),void 0!==t.shininess&&(n.shininess=t.shininess),void 0!==t.clearcoat&&(n.clearcoat=t.clearcoat),void 0!==t.clearcoatRoughness&&(n.clearcoatRoughness=t.clearcoatRoughness),void 0!==t.iridescence&&(n.iridescence=t.iridescence),void 0!==t.iridescenceIOR&&(n.iridescenceIOR=t.iridescenceIOR),void 0!==t.iridescenceThicknessRange&&(n.iridescenceThicknessRange=t.iridescenceThicknessRange),void 0!==t.transmission&&(n.transmission=t.transmission),void 0!==t.thickness&&(n.thickness=t.thickness),void 0!==t.attenuationDistance&&(n.attenuationDistance=t.attenuationDistance),void 0!==t.attenuationColor&&void 0!==n.attenuationColor&&n.attenuationColor.setHex(t.attenuationColor),void 0!==t.fog&&(n.fog=t.fog),void 0!==t.flatShading&&(n.flatShading=t.flatShading),void 0!==t.blending&&(n.blending=t.blending),void 0!==t.combine&&(n.combine=t.combine),void 0!==t.side&&(n.side=t.side),void 0!==t.shadowSide&&(n.shadowSide=t.shadowSide),void 0!==t.opacity&&(n.opacity=t.opacity),void 0!==t.transparent&&(n.transparent=t.transparent),void 0!==t.alphaTest&&(n.alphaTest=t.alphaTest),void 0!==t.depthTest&&(n.depthTest=t.depthTest),void 0!==t.depthWrite&&(n.depthWrite=t.depthWrite),void 0!==t.colorWrite&&(n.colorWrite=t.colorWrite),void 0!==t.stencilWrite&&(n.stencilWrite=t.stencilWrite),void 0!==t.stencilWriteMask&&(n.stencilWriteMask=t.stencilWriteMask),void 0!==t.stencilFunc&&(n.stencilFunc=t.stencilFunc),void 0!==t.stencilRef&&(n.stencilRef=t.stencilRef),void 0!==t.stencilFuncMask&&(n.stencilFuncMask=t.stencilFuncMask),void 0!==t.stencilFail&&(n.stencilFail=t.stencilFail),void 0!==t.stencilZFail&&(n.stencilZFail=t.stencilZFail),void 0!==t.stencilZPass&&(n.stencilZPass=t.stencilZPass),void 0!==t.wireframe&&(n.wireframe=t.wireframe),void 0!==t.wireframeLinewidth&&(n.wireframeLinewidth=t.wireframeLinewidth),void 0!==t.wireframeLinecap&&(n.wireframeLinecap=t.wireframeLinecap),void 0!==t.wireframeLinejoin&&(n.wireframeLinejoin=t.wireframeLinejoin),void 0!==t.rotation&&(n.rotation=t.rotation),1!==t.linewidth&&(n.linewidth=t.linewidth),void 0!==t.dashSize&&(n.dashSize=t.dashSize),void 0!==t.gapSize&&(n.gapSize=t.gapSize),void 0!==t.scale&&(n.scale=t.scale),void 0!==t.polygonOffset&&(n.polygonOffset=t.polygonOffset),void 0!==t.polygonOffsetFactor&&(n.polygonOffsetFactor=t.polygonOffsetFactor),void 0!==t.polygonOffsetUnits&&(n.polygonOffsetUnits=t.polygonOffsetUnits),void 0!==t.dithering&&(n.dithering=t.dithering),void 0!==t.alphaToCoverage&&(n.alphaToCoverage=t.alphaToCoverage),void 0!==t.premultipliedAlpha&&(n.premultipliedAlpha=t.premultipliedAlpha),void 0!==t.forceSinglePass&&(n.forceSinglePass=t.forceSinglePass),void 0!==t.visible&&(n.visible=t.visible),void 0!==t.toneMapped&&(n.toneMapped=t.toneMapped),void 0!==t.userData&&(n.userData=t.userData),void 0!==t.vertexColors&&("number"==typeof t.vertexColors?n.vertexColors=t.vertexColors>0:n.vertexColors=t.vertexColors),void 0!==t.uniforms)for(const e in t.uniforms){const r=t.uniforms[e];switch(n.uniforms[e]={},r.type){case"t":n.uniforms[e].value=i(r.value);break;case"c":n.uniforms[e].value=(new zn).setHex(r.value);break;case"v2":n.uniforms[e].value=(new We).fromArray(r.value);break;case"v3":n.uniforms[e].value=(new $e).fromArray(r.value);break;case"v4":n.uniforms[e].value=(new fi).fromArray(r.value);break;case"m3":n.uniforms[e].value=(new je).fromArray(r.value);break;case"m4":n.uniforms[e].value=(new qi).fromArray(r.value);break;default:n.uniforms[e].value=r.value}}if(void 0!==t.defines&&(n.defines=t.defines),void 0!==t.vertexShader&&(n.vertexShader=t.vertexShader),void 0!==t.fragmentShader&&(n.fragmentShader=t.fragmentShader),void 0!==t.glslVersion&&(n.glslVersion=t.glslVersion),void 0!==t.extensions)for(const e in t.extensions)n.extensions[e]=t.extensions[e];if(void 0!==t.size&&(n.size=t.size),void 0!==t.sizeAttenuation&&(n.sizeAttenuation=t.sizeAttenuation),void 0!==t.map&&(n.map=i(t.map)),void 0!==t.matcap&&(n.matcap=i(t.matcap)),void 0!==t.alphaMap&&(n.alphaMap=i(t.alphaMap)),void 0!==t.bumpMap&&(n.bumpMap=i(t.bumpMap)),void 0!==t.bumpScale&&(n.bumpScale=t.bumpScale),void 0!==t.normalMap&&(n.normalMap=i(t.normalMap)),void 0!==t.normalMapType&&(n.normalMapType=t.normalMapType),void 0!==t.normalScale){let e=t.normalScale;!1===Array.isArray(e)&&(e=[e,e]),n.normalScale=(new We).fromArray(e)}return void 0!==t.displacementMap&&(n.displacementMap=i(t.displacementMap)),void 0!==t.displacementScale&&(n.displacementScale=t.displacementScale),void 0!==t.displacementBias&&(n.displacementBias=t.displacementBias),void 0!==t.roughnessMap&&(n.roughnessMap=i(t.roughnessMap)),void 0!==t.metalnessMap&&(n.metalnessMap=i(t.metalnessMap)),void 0!==t.emissiveMap&&(n.emissiveMap=i(t.emissiveMap)),void 0!==t.emissiveIntensity&&(n.emissiveIntensity=t.emissiveIntensity),void 0!==t.specularMap&&(n.specularMap=i(t.specularMap)),void 0!==t.specularIntensityMap&&(n.specularIntensityMap=i(t.specularIntensityMap)),void 0!==t.specularColorMap&&(n.specularColorMap=i(t.specularColorMap)),void 0!==t.envMap&&(n.envMap=i(t.envMap)),void 0!==t.envMapIntensity&&(n.envMapIntensity=t.envMapIntensity),void 0!==t.reflectivity&&(n.reflectivity=t.reflectivity),void 0!==t.refractionRatio&&(n.refractionRatio=t.refractionRatio),void 0!==t.lightMap&&(n.lightMap=i(t.lightMap)),void 0!==t.lightMapIntensity&&(n.lightMapIntensity=t.lightMapIntensity),void 0!==t.aoMap&&(n.aoMap=i(t.aoMap)),void 0!==t.aoMapIntensity&&(n.aoMapIntensity=t.aoMapIntensity),void 0!==t.gradientMap&&(n.gradientMap=i(t.gradientMap)),void 0!==t.clearcoatMap&&(n.clearcoatMap=i(t.clearcoatMap)),void 0!==t.clearcoatRoughnessMap&&(n.clearcoatRoughnessMap=i(t.clearcoatRoughnessMap)),void 0!==t.clearcoatNormalMap&&(n.clearcoatNormalMap=i(t.clearcoatNormalMap)),void 0!==t.clearcoatNormalScale&&(n.clearcoatNormalScale=(new We).fromArray(t.clearcoatNormalScale)),void 0!==t.iridescenceMap&&(n.iridescenceMap=i(t.iridescenceMap)),void 0!==t.iridescenceThicknessMap&&(n.iridescenceThicknessMap=i(t.iridescenceThicknessMap)),void 0!==t.transmissionMap&&(n.transmissionMap=i(t.transmissionMap)),void 0!==t.thicknessMap&&(n.thicknessMap=i(t.thicknessMap)),void 0!==t.sheenColorMap&&(n.sheenColorMap=i(t.sheenColorMap)),void 0!==t.sheenRoughnessMap&&(n.sheenRoughnessMap=i(t.sheenRoughnessMap)),n}setTextures(t){return this.textures=t,this}static createMaterialFromType(t){return new{ShadowMaterial:Zc,SpriteMaterial:wo,RawShaderMaterial:Jc,ShaderMaterial:yr,PointsMaterial:xl,MeshPhysicalMaterial:$c,MeshStandardMaterial:Kc,MeshPhongMaterial:Qc,MeshToonMaterial:th,MeshNormalMaterial:eh,MeshLambertMaterial:ih,MeshDepthMaterial:Qa,MeshDistanceMaterial:to,MeshBasicMaterial:Bn,MeshMatcapMaterial:nh,LineDashedMaterial:rh,LineBasicMaterial:ol,Material:Pn}[t]}}class tu{static decodeText(t){if("undefined"!=typeof TextDecoder)return(new TextDecoder).decode(t);let e="";for(let i=0,n=t.length;i0){this.source.connect(this.filters[0]);for(let t=1,e=this.filters.length;t0){this.source.disconnect(this.filters[0]);for(let t=1,e=this.filters.length;t0&&this._mixBufferRegionAdditive(i,n,this._addIndex*e,1,e);for(let t=e,r=e+e;t!==r;++t)if(i[t]!==i[t+e]){a.setValue(i,n);break}}saveOriginalState(){const t=this.binding,e=this.buffer,i=this.valueSize,n=i*this._origIndex;t.getValue(e,n);for(let t=i,r=n;t!==r;++t)e[t]=e[n+t%i];this._setIdentity(),this.cumulativeWeight=0,this.cumulativeWeightAdditive=0}restoreOriginalState(){const t=3*this.valueSize;this.binding.setValue(this.buffer,t)}_setAdditiveIdentityNumeric(){const t=this._addIndex*this.valueSize,e=t+this.valueSize;for(let i=t;i=.5)for(let n=0;n!==r;++n)t[e+n]=t[i+n]}_slerp(t,e,i,n){Ke.slerpFlat(t,e,t,e,t,i,n)}_slerpAdditive(t,e,i,n,r){const s=this._workIndex*r;Ke.multiplyQuaternionsFlat(t,s,t,e,t,i),Ke.slerpFlat(t,e,t,e,t,s,n)}_lerp(t,e,i,n,r){const s=1-n;for(let a=0;a!==r;++a){const r=e+a;t[r]=t[r]*s+t[i+a]*n}}_lerpAdditive(t,e,i,n,r){for(let s=0;s!==r;++s){const r=e+s;t[r]=t[r]+t[i+s]*n}}}const Su="\\[\\]\\.:\\/",wu=new RegExp("["+Su+"]","g"),Tu="[^"+Su+"]",Au="[^"+Su.replace("\\.","")+"]",Eu=new RegExp("^"+/((?:WC+[\/:])*)/.source.replace("WC",Tu)+/(WCOD+)?/.source.replace("WCOD",Au)+/(?:\.(WC+)(?:\[(.+)\])?)?/.source.replace("WC",Tu)+/\.(WC+)(?:\[(.+)\])?/.source.replace("WC",Tu)+"$"),Cu=["material","materials","bones","map"];class Lu{constructor(t,e,i){this.path=e,this.parsedPath=i||Lu.parseTrackName(e),this.node=Lu.findNode(t,this.parsedPath.nodeName),this.rootNode=t,this.getValue=this._getValue_unbound,this.setValue=this._setValue_unbound}static create(t,e,i){return t&&t.isAnimationObjectGroup?new Lu.Composite(t,e,i):new Lu(t,e,i)}static sanitizeNodeName(t){return t.replace(/\s/g,"_").replace(wu,"")}static parseTrackName(t){const e=Eu.exec(t);if(null===e)throw new Error("PropertyBinding: Cannot parse trackName: "+t);const i={nodeName:e[2],objectName:e[3],objectIndex:e[4],propertyName:e[5],propertyIndex:e[6]},n=i.nodeName&&i.nodeName.lastIndexOf(".");if(void 0!==n&&-1!==n){const t=i.nodeName.substring(n+1);-1!==Cu.indexOf(t)&&(i.nodeName=i.nodeName.substring(0,n),i.objectName=t)}if(null===i.propertyName||0===i.propertyName.length)throw new Error("PropertyBinding: can not parse propertyName from trackName: "+t);return i}static findNode(t,e){if(void 0===e||""===e||"."===e||-1===e||e===t.name||e===t.uuid)return t;if(t.skeleton){const i=t.skeleton.getBoneByName(e);if(void 0!==i)return i}if(t.children){const i=function(t){for(let n=0;n0){const t=this._interpolants,e=this._propertyBindings;if(this.blendMode===ge)for(let i=0,n=t.length;i!==n;++i)t[i].evaluate(s),e[i].accumulateAdditive(a);else for(let i=0,r=t.length;i!==r;++i)t[i].evaluate(s),e[i].accumulate(n,a)}}_updateWeight(t){let e=0;if(this.enabled){e=this.weight;const i=this._weightInterpolant;if(null!==i){const n=i.evaluate(t)[0];e*=n,t>i.parameterPositions[1]&&(this.stopFading(),0===n&&(this.enabled=!1))}}return this._effectiveWeight=e,e}_updateTimeScale(t){let e=0;if(!this.paused){e=this.timeScale;const i=this._timeScaleInterpolant;if(null!==i){e*=i.evaluate(t)[0],t>i.parameterPositions[1]&&(this.stopWarping(),0===e?this.paused=!0:this.timeScale=e)}}return this._effectiveTimeScale=e,e}_updateTime(t){const e=this._clip.duration,i=this.loop;let n=this.time+t,r=this._loopCount;const s=2202===i;if(0===t)return-1===r?n:s&&1==(1&r)?e-n:n;if(2200===i){-1===r&&(this._loopCount=0,this._setEndings(!0,!0,!1));t:{if(n>=e)n=e;else{if(!(n<0)){this.time=n;break t}n=0}this.clampWhenFinished?this.paused=!0:this.enabled=!1,this.time=n,this._mixer.dispatchEvent({type:"finished",action:this,direction:t<0?-1:1})}}else{if(-1===r&&(t>=0?(r=0,this._setEndings(!0,0===this.repetitions,s)):this._setEndings(0===this.repetitions,!0,s)),n>=e||n<0){const i=Math.floor(n/e);n-=e*i,r+=Math.abs(i);const a=this.repetitions-r;if(a<=0)this.clampWhenFinished?this.paused=!0:this.enabled=!1,n=t>0?e:0,this.time=n,this._mixer.dispatchEvent({type:"finished",action:this,direction:t>0?1:-1});else{if(1===a){const e=t<0;this._setEndings(e,!e,s)}else this._setEndings(!1,!1,s);this._loopCount=r,this.time=n,this._mixer.dispatchEvent({type:"loop",action:this,loopDelta:i})}}else this.time=n;if(s&&1==(1&r))return e-n}return n}_setEndings(t,e,i){const n=this._interpolantSettings;i?(n.endingStart=pe,n.endingEnd=pe):(n.endingStart=t?this.zeroSlopeAtStart?pe:de:me,n.endingEnd=e?this.zeroSlopeAtEnd?pe:de:me)}_scheduleFading(t,e,i){const n=this._mixer,r=n.time;let s=this._weightInterpolant;null===s&&(s=n._lendControlInterpolant(),this._weightInterpolant=s);const a=s.parameterPositions,o=s.sampleValues;return a[0]=r,o[0]=e,a[1]=r+t,o[1]=i,this}}const Pu=new Float32Array(1);class Iu{constructor(t){this.value=t}clone(){return new Iu(void 0===this.value.clone?this.value:this.value.clone())}}let Du=0;function Nu(t,e){return t.distance-e.distance}function Ou(t,e,i,n){if(t.layers.test(e.layers)&&t.raycast(e,i),!0===n){const n=t.children;for(let t=0,r=n.length;t>-e-14,n[256|t]=1024>>-e-14|32768,r[t]=-e-1,r[256|t]=-e-1):e<=15?(n[t]=e+15<<10,n[256|t]=e+15<<10|32768,r[t]=13,r[256|t]=13):e<128?(n[t]=31744,n[256|t]=64512,r[t]=24,r[256|t]=24):(n[t]=31744,n[256|t]=64512,r[t]=13,r[256|t]=13)}const s=new Uint32Array(2048),a=new Uint32Array(64),o=new Uint32Array(64);for(let t=1;t<1024;++t){let e=t<<13,i=0;for(;0==(8388608&e);)e<<=1,i-=8388608;e&=-8388609,i+=947912704,s[t]=e|i}for(let t=1024;t<2048;++t)s[t]=939524096+(t-1024<<13);for(let t=1;t<31;++t)a[t]=t<<23;a[31]=1199570944,a[32]=2147483648;for(let t=33;t<63;++t)a[t]=2147483648+(t-32<<23);a[63]=3347054592;for(let t=1;t<64;++t)32!==t&&(o[t]=1024);return{floatView:e,uint32View:i,baseTable:n,shiftTable:r,mantissaTable:s,exponentTable:a,offsetTable:o}}const sd={toHalfFloat:function(t){Math.abs(t)>65504&&console.warn("THREE.DataUtils.toHalfFloat(): Value out of range."),t=Oe(t,-65504,65504),nd.floatView[0]=t;const e=nd.uint32View[0],i=e>>23&511;return nd.baseTable[i]+((8388607&e)>>nd.shiftTable[i])},fromHalfFloat:function(t){const e=t>>10;return nd.uint32View[0]=nd.mantissaTable[nd.offsetTable[e]+(1023&t)]+nd.exponentTable[e],nd.floatView[0]}};"undefined"!=typeof __THREE_DEVTOOLS__&&__THREE_DEVTOOLS__.dispatchEvent(new CustomEvent("register",{detail:{revision:e}})),"undefined"!=typeof window&&(window.__THREE__?console.warn("WARNING: Multiple instances of Three.js being imported."):window.__THREE__=e),t.ACESFilmicToneMapping=Y,t.AddEquation=v,t.AddOperation=H,t.AdditiveAnimationBlendMode=ge,t.AdditiveBlending=p,t.AlphaFormat=bt,t.AlwaysDepth=N,t.AlwaysStencilFunc=519,t.AmbientLight=Zh,t.AmbientLightProbe=class extends $h{constructor(t,e=1){super(void 0,e),this.isAmbientLightProbe=!0;const i=(new zn).set(t);this.sh.coefficients[0].set(i.r,i.g,i.b).multiplyScalar(2*Math.sqrt(Math.PI))}},t.AnimationClip=wh,t.AnimationLoader=class extends Lh{constructor(t){super(t)}load(t,e,i,n){const r=this,s=new Ih(this.manager);s.setPath(this.path),s.setRequestHeader(this.requestHeader),s.setWithCredentials(this.withCredentials),s.load(t,(function(i){try{e(r.parse(JSON.parse(i)))}catch(e){n?n(e):console.error(e),r.manager.itemError(t)}}),i,n)}parse(t){const e=[];for(let i=0;i=0;--e)t[e].stop();return this}update(t){t*=this.timeScale;const e=this._actions,i=this._nActiveActions,n=this.time+=t,r=Math.sign(t),s=this._accuIndex^=1;for(let a=0;a!==i;++a){e[a]._update(n,t,r,s)}const a=this._bindings,o=this._nActiveBindings;for(let t=0;t!==o;++t)a[t].apply(s);return this}setTime(t){this.time=0;for(let t=0;t=r){const s=r++,c=t[s];e[c.uuid]=l,t[l]=c,e[o]=s,t[s]=a;for(let t=0,e=n;t!==e;++t){const e=i[t],n=e[s],r=e[l];e[l]=n,e[s]=r}}}this.nCachedObjects_=r}uncache(){const t=this._objects,e=this._indicesByUUID,i=this._bindings,n=i.length;let r=this.nCachedObjects_,s=t.length;for(let a=0,o=arguments.length;a!==o;++a){const o=arguments[a].uuid,l=e[o];if(void 0!==l)if(delete e[o],l0&&(e[a.uuid]=l),t[l]=a,t.pop();for(let t=0,e=n;t!==e;++t){const e=i[t];e[l]=e[r],e.pop()}}}this.nCachedObjects_=r}subscribe_(t,e){const i=this._bindingsIndicesByPath;let n=i[t];const r=this._bindings;if(void 0!==n)return r[n];const s=this._paths,a=this._parsedPaths,o=this._objects,l=o.length,c=this.nCachedObjects_,h=new Array(l);n=r.length,i[t]=n,s.push(t),a.push(e),r.push(h);for(let i=c,n=o.length;i!==n;++i){const n=o[i];h[i]=new Lu(n,t,e)}return h}unsubscribe_(t){const e=this._bindingsIndicesByPath,i=e[t];if(void 0!==i){const n=this._paths,r=this._parsedPaths,s=this._bindings,a=s.length-1,o=s[a];e[t[a]]=i,s[i]=o,s.pop(),r[i]=r[a],r.pop(),n[i]=n[a],n.pop()}}},t.AnimationUtils=uh,t.ArcCurve=Cl,t.ArrayCamera=oo,t.ArrowHelper=class extends xn{constructor(t=new $e(0,0,1),e=new $e(0,0,0),i=1,n=16776960,r=.2*i,s=.2*r){super(),this.type="ArrowHelper",void 0===ed&&(ed=new $n,ed.setAttribute("position",new Wn([0,0,0,0,1,0],3)),id=new Kl(0,.5,1,5,1),id.translate(0,-.5,0)),this.position.copy(e),this.line=new pl(ed,new ol({color:n,toneMapped:!1})),this.line.matrixAutoUpdate=!1,this.add(this.line),this.cone=new pr(id,new Bn({color:n,toneMapped:!1})),this.cone.matrixAutoUpdate=!1,this.add(this.cone),this.setDirection(t),this.setLength(i,r,s)}setDirection(t){if(t.y>.99999)this.quaternion.set(0,0,0,1);else if(t.y<-.99999)this.quaternion.set(1,0,0,0);else{td.set(t.z,0,-t.x).normalize();const e=Math.acos(t.y);this.quaternion.setFromAxisAngle(td,e)}}setLength(t,e=.2*t,i=.2*e){this.line.scale.set(1,Math.max(1e-4,t-e),1),this.line.updateMatrix(),this.cone.scale.set(i,e,i),this.cone.position.y=t,this.cone.updateMatrix()}setColor(t){this.line.material.color.set(t),this.cone.material.color.set(t)}copy(t){return super.copy(t,!1),this.line.copy(t.line),this.cone.copy(t.cone),this}dispose(){this.line.geometry.dispose(),this.line.material.dispose(),this.cone.geometry.dispose(),this.cone.material.dispose()}},t.Audio=vu,t.AudioAnalyser=class{constructor(t,e=2048){this.analyser=t.context.createAnalyser(),this.analyser.fftSize=e,this.data=new Uint8Array(this.analyser.frequencyBinCount),t.getOutput().connect(this.analyser)}getFrequencyData(){return this.analyser.getByteFrequencyData(this.data),this.data}getAverageFrequency(){let t=0;const e=this.getFrequencyData();for(let i=0;ithis.max.x||t.ythis.max.y)}containsBox(t){return this.min.x<=t.min.x&&t.max.x<=this.max.x&&this.min.y<=t.min.y&&t.max.y<=this.max.y}getParameter(t,e){return e.set((t.x-this.min.x)/(this.max.x-this.min.x),(t.y-this.min.y)/(this.max.y-this.min.y))}intersectsBox(t){return!(t.max.xthis.max.x||t.max.ythis.max.y)}clampPoint(t,e){return e.copy(t).clamp(this.min,this.max)}distanceToPoint(t){return this.clampPoint(t,zu).distanceTo(t)}intersect(t){return this.min.max(t.min),this.max.min(t.max),this.isEmpty()&&this.makeEmpty(),this}union(t){return this.min.min(t.min),this.max.max(t.max),this}translate(t){return this.min.add(t),this.max.add(t),this}equals(t){return t.min.equals(this.min)&&t.max.equals(this.max)}},t.Box3=_i,t.Box3Helper=class extends gl{constructor(t,e=16776960){const i=new Uint16Array([0,1,1,2,2,3,3,0,4,5,5,6,6,7,7,4,0,4,1,5,2,6,3,7]),n=new $n;n.setIndex(new Gn(i,1)),n.setAttribute("position",new Wn([1,1,1,-1,1,1,-1,-1,1,1,-1,1,1,1,-1,-1,1,-1,-1,-1,-1,1,-1,-1],3)),super(n,new ol({color:e,toneMapped:!1})),this.box=t,this.type="Box3Helper",this.geometry.computeBoundingSphere()}updateMatrixWorld(t){const e=this.box;e.isEmpty()||(e.getCenter(this.position),e.getSize(this.scale),this.scale.multiplyScalar(.5),super.updateMatrixWorld(t))}dispose(){this.geometry.dispose(),this.material.dispose()}},t.BoxBufferGeometry=class extends fr{constructor(t,e,i,n,r,s){console.warn("THREE.BoxBufferGeometry has been renamed to THREE.BoxGeometry."),super(t,e,i,n,r,s)}},t.BoxGeometry=fr,t.BoxHelper=class extends gl{constructor(t,e=16776960){const i=new Uint16Array([0,1,1,2,2,3,3,0,4,5,5,6,6,7,7,4,0,4,1,5,2,6,3,7]),n=new Float32Array(24),r=new $n;r.setIndex(new Gn(i,1)),r.setAttribute("position",new Gn(n,3)),super(r,new ol({color:e,toneMapped:!1})),this.object=t,this.type="BoxHelper",this.matrixAutoUpdate=!1,this.update()}update(t){if(void 0!==t&&console.warn("THREE.BoxHelper: .update() has no longer arguments."),void 0!==this.object&&Qu.setFromObject(this.object),Qu.isEmpty())return;const e=Qu.min,i=Qu.max,n=this.geometry.attributes.position,r=n.array;r[0]=i.x,r[1]=i.y,r[2]=i.z,r[3]=e.x,r[4]=i.y,r[5]=i.z,r[6]=e.x,r[7]=e.y,r[8]=i.z,r[9]=i.x,r[10]=e.y,r[11]=i.z,r[12]=i.x,r[13]=i.y,r[14]=e.z,r[15]=e.x,r[16]=i.y,r[17]=e.z,r[18]=e.x,r[19]=e.y,r[20]=e.z,r[21]=i.x,r[22]=e.y,r[23]=e.z,n.needsUpdate=!0,this.geometry.computeBoundingSphere()}setFromObject(t){return this.object=t,this.update(),this}copy(t,e){return super.copy(t,e),this.object=t.object,this}dispose(){this.geometry.dispose(),this.material.dispose()}},t.BufferAttribute=Gn,t.BufferGeometry=$n,t.BufferGeometryLoader=iu,t.ByteType=dt,t.Cache=Ah,t.Camera=Mr,t.CameraHelper=class extends gl{constructor(t){const e=new $n,i=new ol({color:16777215,vertexColors:!0,toneMapped:!1}),n=[],r=[],s={};function a(t,e){o(t),o(e)}function o(t){n.push(0,0,0),r.push(0,0,0),void 0===s[t]&&(s[t]=[]),s[t].push(n.length/3-1)}a("n1","n2"),a("n2","n4"),a("n4","n3"),a("n3","n1"),a("f1","f2"),a("f2","f4"),a("f4","f3"),a("f3","f1"),a("n1","f1"),a("n2","f2"),a("n3","f3"),a("n4","f4"),a("p","n1"),a("p","n2"),a("p","n3"),a("p","n4"),a("u1","u2"),a("u2","u3"),a("u3","u1"),a("c","t"),a("p","c"),a("cn1","cn2"),a("cn3","cn4"),a("cf1","cf2"),a("cf3","cf4"),e.setAttribute("position",new Wn(n,3)),e.setAttribute("color",new Wn(r,3)),super(e,i),this.type="CameraHelper",this.camera=t,this.camera.updateProjectionMatrix&&this.camera.updateProjectionMatrix(),this.matrix=t.matrixWorld,this.matrixAutoUpdate=!1,this.pointMap=s,this.update();const l=new zn(16755200),c=new zn(16711680),h=new zn(43775),u=new zn(16777215),d=new zn(3355443);this.setColors(l,c,h,u,d)}setColors(t,e,i,n,r){const s=this.geometry.getAttribute("color");s.setXYZ(0,t.r,t.g,t.b),s.setXYZ(1,t.r,t.g,t.b),s.setXYZ(2,t.r,t.g,t.b),s.setXYZ(3,t.r,t.g,t.b),s.setXYZ(4,t.r,t.g,t.b),s.setXYZ(5,t.r,t.g,t.b),s.setXYZ(6,t.r,t.g,t.b),s.setXYZ(7,t.r,t.g,t.b),s.setXYZ(8,t.r,t.g,t.b),s.setXYZ(9,t.r,t.g,t.b),s.setXYZ(10,t.r,t.g,t.b),s.setXYZ(11,t.r,t.g,t.b),s.setXYZ(12,t.r,t.g,t.b),s.setXYZ(13,t.r,t.g,t.b),s.setXYZ(14,t.r,t.g,t.b),s.setXYZ(15,t.r,t.g,t.b),s.setXYZ(16,t.r,t.g,t.b),s.setXYZ(17,t.r,t.g,t.b),s.setXYZ(18,t.r,t.g,t.b),s.setXYZ(19,t.r,t.g,t.b),s.setXYZ(20,t.r,t.g,t.b),s.setXYZ(21,t.r,t.g,t.b),s.setXYZ(22,t.r,t.g,t.b),s.setXYZ(23,t.r,t.g,t.b),s.setXYZ(24,e.r,e.g,e.b),s.setXYZ(25,e.r,e.g,e.b),s.setXYZ(26,e.r,e.g,e.b),s.setXYZ(27,e.r,e.g,e.b),s.setXYZ(28,e.r,e.g,e.b),s.setXYZ(29,e.r,e.g,e.b),s.setXYZ(30,e.r,e.g,e.b),s.setXYZ(31,e.r,e.g,e.b),s.setXYZ(32,i.r,i.g,i.b),s.setXYZ(33,i.r,i.g,i.b),s.setXYZ(34,i.r,i.g,i.b),s.setXYZ(35,i.r,i.g,i.b),s.setXYZ(36,i.r,i.g,i.b),s.setXYZ(37,i.r,i.g,i.b),s.setXYZ(38,n.r,n.g,n.b),s.setXYZ(39,n.r,n.g,n.b),s.setXYZ(40,r.r,r.g,r.b),s.setXYZ(41,r.r,r.g,r.b),s.setXYZ(42,r.r,r.g,r.b),s.setXYZ(43,r.r,r.g,r.b),s.setXYZ(44,r.r,r.g,r.b),s.setXYZ(45,r.r,r.g,r.b),s.setXYZ(46,r.r,r.g,r.b),s.setXYZ(47,r.r,r.g,r.b),s.setXYZ(48,r.r,r.g,r.b),s.setXYZ(49,r.r,r.g,r.b),s.needsUpdate=!0}update(){const t=this.geometry,e=this.pointMap;Ku.projectionMatrixInverse.copy(this.camera.projectionMatrixInverse),$u("c",e,t,Ku,0,0,-1),$u("t",e,t,Ku,0,0,1),$u("n1",e,t,Ku,-1,-1,-1),$u("n2",e,t,Ku,1,-1,-1),$u("n3",e,t,Ku,-1,1,-1),$u("n4",e,t,Ku,1,1,-1),$u("f1",e,t,Ku,-1,-1,1),$u("f2",e,t,Ku,1,-1,1),$u("f3",e,t,Ku,-1,1,1),$u("f4",e,t,Ku,1,1,1),$u("u1",e,t,Ku,.7,1.1,-1),$u("u2",e,t,Ku,-.7,1.1,-1),$u("u3",e,t,Ku,0,2,-1),$u("cf1",e,t,Ku,-1,0,1),$u("cf2",e,t,Ku,1,0,1),$u("cf3",e,t,Ku,0,-1,1),$u("cf4",e,t,Ku,0,1,1),$u("cn1",e,t,Ku,-1,0,-1),$u("cn2",e,t,Ku,1,0,-1),$u("cn3",e,t,Ku,0,-1,-1),$u("cn4",e,t,Ku,0,1,-1),t.getAttribute("position").needsUpdate=!0}dispose(){this.geometry.dispose(),this.material.dispose()}},t.CanvasTexture=class extends mi{constructor(t,e,i,n,r,s,a,o,l){super(t,e,i,n,r,s,a,o,l),this.isCanvasTexture=!0,this.needsUpdate=!0}},t.CapsuleBufferGeometry=class extends Zl{constructor(t,e,i,n){console.warn("THREE.CapsuleBufferGeometry has been renamed to THREE.CapsuleGeometry."),super(t,e,i,n)}},t.CapsuleGeometry=Zl,t.CatmullRomCurve3=Nl,t.CineonToneMapping=X,t.CircleBufferGeometry=class extends Jl{constructor(t,e,i,n){console.warn("THREE.CircleBufferGeometry has been renamed to THREE.CircleGeometry."),super(t,e,i,n)}},t.CircleGeometry=Jl,t.ClampToEdgeWrapping=nt,t.Clock=uu,t.Color=zn,t.ColorKeyframeTrack=xh,t.ColorManagement=li,t.CompressedArrayTexture=class extends Tl{constructor(t,e,i,n,r,s){super(t,e,i,r,s),this.isCompressedArrayTexture=!0,this.image.depth=n,this.wrapR=nt}},t.CompressedTexture=Tl,t.CompressedTextureLoader=class extends Lh{constructor(t){super(t)}load(t,e,i,n){const r=this,s=[],a=new Tl,o=new Ih(this.manager);o.setPath(this.path),o.setResponseType("arraybuffer"),o.setRequestHeader(this.requestHeader),o.setWithCredentials(r.withCredentials);let l=0;function c(c){o.load(t[c],(function(t){const i=r.parse(t,!0);s[c]={width:i.width,height:i.height,format:i.format,mipmaps:i.mipmaps},l+=1,6===l&&(1===i.mipmapCount&&(a.minFilter=lt),a.image=s,a.format=i.format,a.needsUpdate=!0,e&&e(a))}),i,n)}if(Array.isArray(t))for(let e=0,i=t.length;e0){const i=new Eh(e);r=new Dh(i),r.setCrossOrigin(this.crossOrigin);for(let e=0,i=t.length;e0){n=new Dh(this.manager),n.setCrossOrigin(this.crossOrigin);for(let e=0,n=t.length;e1)for(let i=0;iNumber.EPSILON){if(l<0&&(i=e[s],o=-o,a=e[r],l=-l),t.ya.y)continue;if(t.y===i.y){if(t.x===i.x)return!0}else{const e=l*(t.x-i.x)-o*(t.y-i.y);if(0===e)return!0;if(e<0)continue;n=!n}}else{if(t.y!==i.y)continue;if(a.x<=t.x&&t.x<=i.x||i.x<=t.x&&t.x<=a.x)return!0}}return n}const i=Ic.isClockWise,n=this.subPaths;if(0===n.length)return[];let r,s,a;const o=[];if(1===n.length)return s=n[0],a=new ac,a.curves=s.curves,o.push(a),o;let l=!i(n[0].getPoints());l=t?!l:l;const c=[],h=[];let u,d,p=[],m=0;h[m]=void 0,p[m]=[];for(let e=0,a=n.length;e1){let t=!1,i=0;for(let t=0,e=h.length;t0&&!1===t&&(p=c)}for(let t=0,e=h.length;t=t.HAVE_CURRENT_DATA&&(this.needsUpdate=!0)}},t.WebGL1Renderer=vo,t.WebGL3DRenderTarget=class extends gi{constructor(t=1,e=1,i=1){super(t,e),this.isWebGL3DRenderTarget=!0,this.depth=i,this.texture=new xi(null,t,e,i),this.texture.isRenderTargetTexture=!0}},t.WebGLArrayRenderTarget=class extends gi{constructor(t=1,e=1,i=1){super(t,e),this.isWebGLArrayRenderTarget=!0,this.depth=i,this.texture=new vi(null,t,e,i),this.texture.isRenderTargetTexture=!0}},t.WebGLCubeRenderTarget=Ar,t.WebGLMultipleRenderTargets=class extends gi{constructor(t=1,e=1,i=1,n={}){super(t,e,n),this.isWebGLMultipleRenderTargets=!0;const r=this.texture;this.texture=[];for(let t=0;tExamples runtimeChanging - + diff --git a/examples/multipleEmitters.html b/examples/multipleEmitters.html index 938e8ed..0f88ac8 100644 --- a/examples/multipleEmitters.html +++ b/examples/multipleEmitters.html @@ -24,7 +24,7 @@

                      Examples

                      runtimeChanging - + diff --git a/examples/orbit.html b/examples/orbit.html index e8b9e21..db2f1a2 100644 --- a/examples/orbit.html +++ b/examples/orbit.html @@ -21,7 +21,7 @@

                      Examples

                      runtimeChanging - + diff --git a/examples/pool.html b/examples/pool.html index c9b9645..1dd2f3f 100644 --- a/examples/pool.html +++ b/examples/pool.html @@ -24,7 +24,7 @@

                      Examples

                      runtimeChanging - + diff --git a/examples/rotation.html b/examples/rotation.html index a4581fe..599d8f2 100644 --- a/examples/rotation.html +++ b/examples/rotation.html @@ -21,7 +21,7 @@

                      Examples

                      runtimeChanging - + diff --git a/examples/runtimeChanging.html b/examples/runtimeChanging.html index 739a6b7..a863e62 100644 --- a/examples/runtimeChanging.html +++ b/examples/runtimeChanging.html @@ -36,7 +36,7 @@

                      Examples

                      - + diff --git a/src/core/SPE.Emitter.js b/src/core/SPE.Emitter.js index 904a303..c843dd8 100644 --- a/src/core/SPE.Emitter.js +++ b/src/core/SPE.Emitter.js @@ -176,7 +176,7 @@ SPE.Emitter = function (options) { console.warn("onParticleSpawn has been removed. Please set properties directly to alter values at runtime."); } - this.uuid = THREE.Math.generateUUID(); + this.uuid = SPE.utils.generateUUID(); this.type = utils.ensureTypedArg(options.type, types.NUMBER, SPE.distributions.BOX); @@ -960,8 +960,8 @@ SPE.Emitter.prototype.reset = function (force) { array[index + 1] = 0.0; } - attr.updateRange.offset = 0; - attr.updateRange.count = -1; + attr.addUpdateRange.offset = 0; + attr.addUpdateRange.count = -1; attr.needsUpdate = true; } diff --git a/src/core/SPE.Group.js b/src/core/SPE.Group.js index 89e17aa..81abacf 100644 --- a/src/core/SPE.Group.js +++ b/src/core/SPE.Group.js @@ -67,7 +67,7 @@ SPE.Group = function (options) { options.texture = utils.ensureTypedArg(options.texture, types.OBJECT, {}); // Assign a UUID to this instance - this.uuid = THREE.Math.generateUUID(); + this.uuid = SPE.utils.generateUUID(); // If no `deltaTime` value is passed to the `SPE.Group.tick` function, // the value of this property will be used to advance the simulation. diff --git a/src/core/SPE.utils.js b/src/core/SPE.utils.js index f30eedd..a006b5c 100644 --- a/src/core/SPE.utils.js +++ b/src/core/SPE.utils.js @@ -36,6 +36,16 @@ SPE.utils = { OBJECT: "object", }, + /** random 128-bit number in canonical uuid format. all bits are random. */ + generateUUID: function() { + function random16Hex() { return (0x10000 | Math.random() * 0x10000).toString(16).substr(1); } + return random16Hex() + random16Hex() + + "-" + random16Hex() + + "-" + random16Hex() + + "-" + random16Hex() + + "-" + random16Hex() + random16Hex() + random16Hex(); + }, + /** * Given a value, a type, and a default value to fallback to, * ensure the given argument adheres to the type requesting, diff --git a/src/helpers/SPE.ShaderAttribute.js b/src/helpers/SPE.ShaderAttribute.js index 9043fb4..6c0ac77 100644 --- a/src/helpers/SPE.ShaderAttribute.js +++ b/src/helpers/SPE.ShaderAttribute.js @@ -95,7 +95,7 @@ SPE.ShaderAttribute.prototype.flagUpdate = function () { "use strict"; let attr = this.bufferAttribute; - let range = attr.updateRange; + let range = attr.addUpdateRange; range.offset = this.updateMin; range.count = Math.min(this.updateMax - this.updateMin + this.componentSize, this.typedArray.array.length); @@ -136,8 +136,8 @@ SPE.ShaderAttribute.prototype.forceUpdateAll = function () { "use strict"; this.bufferAttribute.array = this.typedArray.array; - this.bufferAttribute.updateRange.offset = 0; - this.bufferAttribute.updateRange.count = -1; + this.bufferAttribute.addUpdateRange.offset = 0; + this.bufferAttribute.addUpdateRange.count = -1; this.bufferAttribute.usage = THREE.StaticDrawUsage; this.bufferAttribute.needsUpdate = true; From 4c54108b0cf514a6b87684f94bb2cb1045943eb8 Mon Sep 17 00:00:00 2001 From: KellyCode Date: Fri, 7 Mar 2025 17:12:25 -0600 Subject: [PATCH 16/25] example script resources now use modules --- Gruntfile.js | 4 +-- build/SPE.js | 5 ++-- build/SPE.min.js | 4 +-- examples/activeMultiplier.html | 41 +++++++++++++++++++++-------- examples/basic.html | 38 ++++++++++++++++++++------- examples/clock.html | 38 ++++++++++++++++++++------- examples/clouds.html | 44 +++++++++++++++++++++---------- examples/distributions.html | 41 ++++++++++++++++++++--------- examples/explosion.html | 36 ++++++++++++++++++------- examples/fog.html | 43 +++++++++++++++++++++--------- examples/js/basicScene.js | 5 +++- examples/mouseFollow.html | 48 +++++++++++++++++++++++----------- examples/multipleEmitters.html | 45 ++++++++++++++++++++++--------- examples/orbit.html | 38 +++++++++++++++++++-------- examples/pool.html | 36 ++++++++++++++++++------- examples/rotation.html | 37 ++++++++++++++++++-------- examples/runtimeChanging.html | 44 +++++++++++++++++++++++-------- 17 files changed, 389 insertions(+), 158 deletions(-) diff --git a/Gruntfile.js b/Gruntfile.js index 9bda61c..1e6eb8c 100644 --- a/Gruntfile.js +++ b/Gruntfile.js @@ -2,7 +2,7 @@ module.exports = function( grunt ) { 'use strict'; var packageJSON = grunt.file.readJSON( 'package.json' ); - var addHeader = '//import * as THREE from "three";'; + var addHeader = 'import * as THREE from "three";'; var licenseBanner = addHeader + '\n' + '\n' + @@ -56,7 +56,7 @@ module.exports = function( grunt ) { options: { separator: '\n\n', banner: licenseBanner, - footer: '\n// export default SPE;' + footer: 'export default SPE;' }, dist: { src: files, diff --git a/build/SPE.js b/build/SPE.js index e398ac5..83145f9 100644 --- a/build/SPE.js +++ b/build/SPE.js @@ -1,4 +1,4 @@ -//import * as THREE from "three"; +import * as THREE from "three"; /* shader-particle-engine 1.1.0 * @@ -3597,5 +3597,4 @@ SPE.Emitter.prototype.remove = function () { return this; }; - -// export default SPE; \ No newline at end of file +export default SPE; \ No newline at end of file diff --git a/build/SPE.min.js b/build/SPE.min.js index bb19d47..da248be 100644 --- a/build/SPE.min.js +++ b/build/SPE.min.js @@ -1,4 +1,4 @@ -//import * as THREE from "three"; +import * as THREE from "three"; /* shader-particle-engine 1.1.0 * @@ -7,4 +7,4 @@ * * shader-particle-engine may be freely distributed under the MIT license (See LICENSE at root of this repository.) */ -var SPE={distributions:{BOX:1,SPHERE:2,DISC:3,LINE:4},valueOverLifetimeLength:4};"function"==typeof define&&define.amd?define("spe",SPE):"undefined"!=typeof exports&&"undefined"!=typeof module&&(module.exports=SPE),SPE.TypedArrayHelper=function(e,t,r,i){this.componentSize=r||1,this.size=t||1,this.TypedArrayConstructor=e||Float32Array,this.array=new e(t*this.componentSize),this.indexOffset=i||0},SPE.TypedArrayHelper.constructor=SPE.TypedArrayHelper,SPE.TypedArrayHelper.prototype.setSize=function(e,t){var r=this.array.length;return t||(e*=this.componentSize),e=r)&&i.push(a[e]);return this.setFromArray(0,i),this},SPE.TypedArrayHelper.prototype.setFromArray=function(e,t){var r=e+t.length;return r>this.array.length?this.grow(r):r= float(VEC4_SIZE - 1)) return attr[VEC4_SIZE - 1];",""," for( int i = 0; i < VEC4_SIZE - 1; ++i ) {"," float fIndex = float( i );"," float shouldApplyValue = and( when_gt( deltaAge, fIndex ), when_le( deltaAge, fIndex + 1.0 ) );"," if(i <= 3) {"," value += shouldApplyValue * mix( attr[ i ], attr[ i + 1 ], deltaAge - fIndex );"," }"," }",""," return value;","}"].join("\n"),colorOverLifetime:["vec3 getColorOverLifetime( in float positionInTime, in vec3 color1, in vec3 color2, in vec3 color3, in vec3 color4 ) {"," vec3 value = vec3( 0.0 );"," value.x = getFloatOverLifetime( positionInTime, vec4( color1.x, color2.x, color3.x, color4.x ) );"," value.y = getFloatOverLifetime( positionInTime, vec4( color1.y, color2.y, color3.y, color4.y ) );"," value.z = getFloatOverLifetime( positionInTime, vec4( color1.z, color2.z, color3.z, color4.z ) );"," return value;","}"].join("\n"),paramFetchingFunctions:["float getAlive() {"," return params.x;","}","float getAge() {"," return params.y;","}","float getMaxAge() {"," return params.z;","}","float getWiggle() {"," return params.w;","}"].join("\n"),forceFetchingFunctions:["vec4 getPosition( in float age ) {"," return modelViewMatrix * vec4( position, 1.0 );","}","vec3 getVelocity( in float age ) {"," return velocity * age;","}","vec3 getAcceleration( in float age ) {"," return acceleration.xyz * age;","}"].join("\n"),rotationFunctions:["#ifdef SHOULD_ROTATE_PARTICLES"," mat4 getRotationMatrix( in vec3 axis, in float angle) {"," axis = normalize(axis);"," float s = sin(angle);"," float c = cos(angle);"," float oc = 1.0 - c;",""," return mat4(oc * axis.x * axis.x + c, oc * axis.x * axis.y - axis.z * s, oc * axis.z * axis.x + axis.y * s, 0.0,"," oc * axis.x * axis.y + axis.z * s, oc * axis.y * axis.y + c, oc * axis.y * axis.z - axis.x * s, 0.0,"," oc * axis.z * axis.x - axis.y * s, oc * axis.y * axis.z + axis.x * s, oc * axis.z * axis.z + c, 0.0,"," 0.0, 0.0, 0.0, 1.0);"," }",""," vec3 getRotation( in vec3 pos, in float positionInTime ) {"," if( rotation.y == 0.0 ) {"," return pos;"," }",""," vec3 axis = unpackRotationAxis( rotation.x );"," vec3 center = rotationCenter;"," vec3 translated;"," mat4 rotationMatrix;"," float angle = 0.0;"," angle += when_eq( rotation.z, 0.0 ) * rotation.y;"," angle += when_gt( rotation.z, 0.0 ) * mix( 0.0, rotation.y, positionInTime );"," translated = rotationCenter - pos;"," rotationMatrix = getRotationMatrix( axis, angle );"," return center - vec3( rotationMatrix * vec4( translated, 0.0 ) );"," }","#endif"].join("\n"),rotateTexture:[" vec2 vUv = vec2( gl_PointCoord.x, 1.0 - gl_PointCoord.y );",""," #ifdef SHOULD_ROTATE_TEXTURE"," float x = gl_PointCoord.x - 0.5;"," float y = 1.0 - gl_PointCoord.y - 0.5;"," float c = cos( -vAngle );"," float s = sin( -vAngle );"," vUv = vec2( c * x + s * y + 0.5, c * y - s * x + 0.5 );"," #endif",""," #ifdef SHOULD_CALCULATE_SPRITE"," float framesX = vSpriteSheet.x;"," float framesY = vSpriteSheet.y;"," float columnNorm = vSpriteSheet.z;"," float rowNorm = vSpriteSheet.w;"," vUv.x = gl_PointCoord.x * framesX + columnNorm;"," vUv.y = 1.0 - (gl_PointCoord.y * framesY + rowNorm);"," #endif",""," vec4 rotatedTexture = texture2D( tex, vUv );"].join("\n")},SPE.shaders={vertex:[SPE.shaderChunks.defines,SPE.shaderChunks.uniforms,SPE.shaderChunks.attributes,SPE.shaderChunks.varyings,THREE.ShaderChunk.common,THREE.ShaderChunk.logdepthbuf_pars_vertex,THREE.ShaderChunk.fog_pars_vertex,SPE.shaderChunks.branchAvoidanceFunctions,SPE.shaderChunks.unpackColor,SPE.shaderChunks.unpackRotationAxis,SPE.shaderChunks.floatOverLifetime,SPE.shaderChunks.colorOverLifetime,SPE.shaderChunks.paramFetchingFunctions,SPE.shaderChunks.forceFetchingFunctions,SPE.shaderChunks.rotationFunctions,"void main() {"," highp float age = getAge();"," highp float alive = getAlive();"," highp float maxAge = getMaxAge();"," highp float positionInTime = (age / maxAge);"," highp float isAlive = when_gt( alive, 0.0 );"," #ifdef SHOULD_WIGGLE_PARTICLES"," float wiggleAmount = positionInTime * getWiggle();"," float wiggleSin = isAlive * sin( wiggleAmount );"," float wiggleCos = isAlive * cos( wiggleAmount );"," #endif"," vec3 vel = getVelocity( age );"," vec3 accel = getAcceleration( age );"," vec3 force = vec3( 0.0 );"," vec3 pos = vec3( position );"," float drag = 1.0 - (positionInTime * 0.5) * acceleration.w;"," force += vel;"," force *= drag;"," force += accel * age;"," pos += force;"," #ifdef SHOULD_WIGGLE_PARTICLES"," pos.x += wiggleSin;"," pos.y += wiggleCos;"," pos.z += wiggleSin;"," #endif"," #ifdef SHOULD_ROTATE_PARTICLES"," pos = getRotation( pos, positionInTime );"," #endif"," vec4 mvPosition = modelViewMatrix * vec4( pos, 1.0 );"," highp float pointSize = getFloatOverLifetime( positionInTime, size ) * isAlive;"," #ifdef HAS_PERSPECTIVE"," float perspective = scale / length( mvPosition.xyz );"," #else"," float perspective = 1.0;"," #endif"," float pointSizePerspective = pointSize * perspective;"," #ifdef COLORIZE"," vec3 c = isAlive * getColorOverLifetime("," positionInTime,"," unpackColor( color.x ),"," unpackColor( color.y ),"," unpackColor( color.z ),"," unpackColor( color.w )"," );"," #else"," vec3 c = vec3(1.0);"," #endif"," float o = isAlive * getFloatOverLifetime( positionInTime, opacity );"," vColor = vec4( c, o );"," #ifdef SHOULD_ROTATE_TEXTURE"," vAngle = isAlive * getFloatOverLifetime( positionInTime, angle );"," #endif"," #ifdef SHOULD_CALCULATE_SPRITE"," float framesX = textureAnimation.x;"," float framesY = textureAnimation.y;"," float loopCount = textureAnimation.w;"," float totalFrames = textureAnimation.z;"," float frameNumber = mod( (positionInTime * loopCount) * totalFrames, totalFrames );"," float column = floor(mod( frameNumber, framesX ));"," float row = floor( (frameNumber - column) / framesX );"," float columnNorm = column / framesX;"," float rowNorm = row / framesY;"," vSpriteSheet.x = 1.0 / framesX;"," vSpriteSheet.y = 1.0 / framesY;"," vSpriteSheet.z = columnNorm;"," vSpriteSheet.w = rowNorm;"," #endif"," gl_PointSize = pointSizePerspective;"," gl_Position = projectionMatrix * mvPosition;",THREE.ShaderChunk.logdepthbuf_vertex,THREE.ShaderChunk.fog_vertex,"}"].join("\n"),fragment:[SPE.shaderChunks.uniforms,THREE.ShaderChunk.common,THREE.ShaderChunk.fog_pars_fragment,THREE.ShaderChunk.logdepthbuf_pars_fragment,SPE.shaderChunks.varyings,SPE.shaderChunks.branchAvoidanceFunctions,"void main() {"," vec3 outgoingLight = vColor.xyz;"," "," #ifdef ALPHATEST"," if ( vColor.w < float(ALPHATEST) ) discard;"," #endif",SPE.shaderChunks.rotateTexture,THREE.ShaderChunk.logdepthbuf_fragment," outgoingLight = vColor.xyz * rotatedTexture.xyz;"," gl_FragColor = vec4( outgoingLight.xyz, rotatedTexture.w * vColor.w );",THREE.ShaderChunk.fog_fragment,"}"].join("\n")},SPE.utils={types:{BOOLEAN:"boolean",STRING:"string",NUMBER:"number",OBJECT:"object"},generateUUID:function(){function e(){return(65536|65536*Math.random()).toString(16).substr(1)}return e()+e()+"-"+e()+"-"+e()+"-"+e()+"-"+e()+e()+e()},ensureTypedArg:function(e,t,r){return typeof e===t?e:r},ensureArrayTypedArg:function(t,r,i){if(Array.isArray(t)){for(let e=t.length-1;0<=e;--e)if(typeof t[e]!==r)return i;return t}return this.ensureTypedArg(t,r,i)},ensureInstanceOf:function(e,t,r){return void 0!==t&&e instanceof t?e:r},ensureArrayInstanceOf:function(t,r,i){if(Array.isArray(t)){for(let e=t.length-1;0<=e;--e)if(void 0!==r&&t[e]instanceof r==!1)return i;return t}return this.ensureInstanceOf(t,r,i)},ensureValueOverLifetimeCompliance:function(e,t,r){t=t||3,r=r||3,!1===Array.isArray(e._value)&&(e._value=[e._value]),!1===Array.isArray(e._spread)&&(e._spread=[e._spread]);var i=this.clamp(e._value.length,t,r),t=this.clamp(e._spread.length,t,r),r=Math.max(i,t);e._value.length!==r&&(e._value=this.interpolateArray(e._value,r)),e._spread.length!==r&&(e._spread=this.interpolateArray(e._spread,r))},interpolateArray:function(t,r){var e=t.length,i=["function"==typeof t[0].clone?t[0].clone():t[0]],a=(e-1)/(r-1);for(let e=1;e{let s=new THREE.Color;return function(e,t,r,i){var a=r.length,o=[];for(let e=0;e{let u=new THREE.Vector3;return function(e,t,r,i,a,o,n,s){u.copy(o),u.x-=r,u.y-=i,u.z-=a,u.normalize().multiplyScalar(-this.randomFloat(n,s)),e.typedArray.setVec3Components(t,u.x,u.y,u.z)}})(),randomDirectionVector3OnDisc:(()=>{let u=new THREE.Vector3;return function(e,t,r,i,a,o,n,s){u.copy(o),u.x-=r,u.y-=i,u.z-=a,u.normalize().multiplyScalar(-this.randomFloat(n,s)),e.typedArray.setVec3Components(t,u.x,u.y,0)}})(),getPackedRotationAxis:(()=>{let r=new THREE.Vector3,i=new THREE.Vector3,a=new THREE.Color,o=new THREE.Vector3(1,1,1);return function(e,t){return r.copy(e).normalize(),i.copy(t).normalize(),r.x+=.5*-t.x+Math.random()*t.x,r.y+=.5*-t.y+Math.random()*t.y,r.z+=.5*-t.z+Math.random()*t.z,r.normalize().add(o).multiplyScalar(.5),a.setRGB(r.x,r.y,r.z),a.getHex()}})()},SPE.Group=function(e){var t=SPE.utils,r=t.types;(e=t.ensureTypedArg(e,r.OBJECT,{})).texture=t.ensureTypedArg(e.texture,r.OBJECT,{}),this.uuid=SPE.utils.generateUUID(),this.fixedTimeStep=t.ensureTypedArg(e.fixedTimeStep,r.NUMBER,.016),this.texture=t.ensureInstanceOf(e.texture.value,THREE.Texture,null),this.textureFrames=t.ensureInstanceOf(e.texture.frames,THREE.Vector2,new THREE.Vector2(1,1)),this.textureFrameCount=t.ensureTypedArg(e.texture.frameCount,r.NUMBER,this.textureFrames.x*this.textureFrames.y),this.textureLoop=t.ensureTypedArg(e.texture.loop,r.NUMBER,1),this.textureFrames.max(new THREE.Vector2(1,1)),this.hasPerspective=t.ensureTypedArg(e.hasPerspective,r.BOOLEAN,!0),this.colorize=t.ensureTypedArg(e.colorize,r.BOOLEAN,!0),this.maxParticleCount=t.ensureTypedArg(e.maxParticleCount,r.NUMBER,null),this.blending=t.ensureTypedArg(e.blending,r.NUMBER,THREE.AdditiveBlending),this.transparent=t.ensureTypedArg(e.transparent,r.BOOLEAN,!0),this.alphaTest=parseFloat(t.ensureTypedArg(e.alphaTest,r.NUMBER,0)),this.depthWrite=t.ensureTypedArg(e.depthWrite,r.BOOLEAN,!1),this.depthTest=t.ensureTypedArg(e.depthTest,r.BOOLEAN,!0),this.fog=t.ensureTypedArg(e.fog,r.BOOLEAN,!0),this.scale=t.ensureTypedArg(e.scale,r.NUMBER,300),this.emitters=[],this.emitterIDs=[],this._pool=[],this._poolCreationSettings=null,this._createNewWhenPoolEmpty=0,this._attributesNeedRefresh=!1,this._attributesNeedDynamicReset=!1,this.particleCount=0,this.uniforms={tex:{type:"t",value:this.texture},textureAnimation:{type:"v4",value:new THREE.Vector4(this.textureFrames.x,this.textureFrames.y,this.textureFrameCount,Math.max(Math.abs(this.textureLoop),1))},fogColor:{type:"c",value:this.fog?new THREE.Color:null},fogNear:{type:"f",value:10},fogFar:{type:"f",value:200},fogDensity:{type:"f",value:.5},deltaTime:{type:"f",value:0},runTime:{type:"f",value:0},scale:{type:"f",value:this.scale}},this.defines={HAS_PERSPECTIVE:this.hasPerspective,COLORIZE:this.colorize,VALUE_OVER_LIFETIME_LENGTH:SPE.valueOverLifetimeLength,SHOULD_ROTATE_TEXTURE:!1,SHOULD_ROTATE_PARTICLES:!1,SHOULD_WIGGLE_PARTICLES:!1,SHOULD_CALCULATE_SPRITE:1this.maxParticleCount&&console.warn("SPE.Group: maxParticleCount exceeded. Requesting",this.particleCount,"particles, can support only",this.maxParticleCount),t._calculatePPSValue(t.maxAge._value+t.maxAge._spread),t._setBufferUpdateRanges(this.attributeKeys),t._setAttributeOffset(i),t.group=this,t.attributes=this.attributes,r)r.hasOwnProperty(e)&&r[e]._createBufferAttribute(null!==this.maxParticleCount?this.maxParticleCount:this.particleCount);for(let e=i;efunction(){return this[e]})(t),set:(a=>function(e){var t=n.updateMap[o],r=this[a],i=SPE.valueOverLifetimeLength;"_rotationCenter"===a?(n.updateFlags.rotationCenter=!0,n.updateCounts.rotationCenter=0):"_randomise"===a?n.resetFlags[t]=e:(n.updateFlags[t]=!0,n.updateCounts[t]=0),n.group._updateDefines(),this[a]=e,Array.isArray(r)&&SPE.utils.ensureValueOverLifetimeCompliance(n[o],i,i)})(t)}))}},SPE.Emitter.prototype._setBufferUpdateRanges=function(t){this.attributeKeys=t,this.attributeCount=t.length;for(let e=this.attributeCount-1;0<=e;--e)this.bufferUpdateRanges[t[e]]={min:Number.POSITIVE_INFINITY,max:Number.NEGATIVE_INFINITY}},SPE.Emitter.prototype._calculatePPSValue=function(e){var t=this.particleCount;this.duration?this.particlesPerSecond=t/(e=t;--e)o=4*e,0!==(u=i[o])&&(s=i[1+o],n=i[2+o],1===this.direction?(s+=a)>=n&&(s=0,u=0,this._decrementParticleCount()):(s-=a)<=0&&(s=n,u=0,this._decrementParticleCount()),i[o]=u,i[1+o]=s,this._updateAttributeUpdateRange("params",e))},SPE.Emitter.prototype._activateParticles=function(t,r,i,a){var o,n,s=this.direction;for(let e=t;ethis.duration?(this.alive=!1,this.age=0):(o=1===this.particleCount?o:0|o,s=(n=Math.min(o+a,this.activationEnd))-this.activationIndex|0,this._activateParticles(o,n,i,0r&&(this.activationIndex=t),this.age+=e))},SPE.Emitter.prototype.reset=function(t){if(this.age=0,!(this.alive=!1)===t){var r,i=this.attributeOffset,t=i+this.particleCount,a=this.paramsArray,e=this.attributes.params.bufferAttribute;for(let e=t-1;e>=i;--e)a[r=4*e]=0,a[1+r]=0;e.addUpdateRange.offset=0,e.addUpdateRange.count=-1,e.needsUpdate=!0}return this},SPE.Emitter.prototype.enable=function(){return this.alive=!0,this},SPE.Emitter.prototype.disable=function(){return this.alive=!1,this},SPE.Emitter.prototype.remove=function(){return null!==this.group?this.group.removeEmitter(this):console.error("Emitter does not belong to a group, cannot remove."),this}; \ No newline at end of file +import*as THREE from"three";var SPE={distributions:{BOX:1,SPHERE:2,DISC:3,LINE:4},valueOverLifetimeLength:4};"function"==typeof define&&define.amd?define("spe",SPE):"undefined"!=typeof exports&&"undefined"!=typeof module&&(module.exports=SPE),SPE.TypedArrayHelper=function(e,t,r,i){this.componentSize=r||1,this.size=t||1,this.TypedArrayConstructor=e||Float32Array,this.array=new e(t*this.componentSize),this.indexOffset=i||0},SPE.TypedArrayHelper.constructor=SPE.TypedArrayHelper,SPE.TypedArrayHelper.prototype.setSize=function(e,t){var r=this.array.length;return t||(e*=this.componentSize),e=r)&&i.push(a[e]);return this.setFromArray(0,i),this},SPE.TypedArrayHelper.prototype.setFromArray=function(e,t){var r=e+t.length;return r>this.array.length?this.grow(r):r= float(VEC4_SIZE - 1)) return attr[VEC4_SIZE - 1];",""," for( int i = 0; i < VEC4_SIZE - 1; ++i ) {"," float fIndex = float( i );"," float shouldApplyValue = and( when_gt( deltaAge, fIndex ), when_le( deltaAge, fIndex + 1.0 ) );"," if(i <= 3) {"," value += shouldApplyValue * mix( attr[ i ], attr[ i + 1 ], deltaAge - fIndex );"," }"," }",""," return value;","}"].join("\n"),colorOverLifetime:["vec3 getColorOverLifetime( in float positionInTime, in vec3 color1, in vec3 color2, in vec3 color3, in vec3 color4 ) {"," vec3 value = vec3( 0.0 );"," value.x = getFloatOverLifetime( positionInTime, vec4( color1.x, color2.x, color3.x, color4.x ) );"," value.y = getFloatOverLifetime( positionInTime, vec4( color1.y, color2.y, color3.y, color4.y ) );"," value.z = getFloatOverLifetime( positionInTime, vec4( color1.z, color2.z, color3.z, color4.z ) );"," return value;","}"].join("\n"),paramFetchingFunctions:["float getAlive() {"," return params.x;","}","float getAge() {"," return params.y;","}","float getMaxAge() {"," return params.z;","}","float getWiggle() {"," return params.w;","}"].join("\n"),forceFetchingFunctions:["vec4 getPosition( in float age ) {"," return modelViewMatrix * vec4( position, 1.0 );","}","vec3 getVelocity( in float age ) {"," return velocity * age;","}","vec3 getAcceleration( in float age ) {"," return acceleration.xyz * age;","}"].join("\n"),rotationFunctions:["#ifdef SHOULD_ROTATE_PARTICLES"," mat4 getRotationMatrix( in vec3 axis, in float angle) {"," axis = normalize(axis);"," float s = sin(angle);"," float c = cos(angle);"," float oc = 1.0 - c;",""," return mat4(oc * axis.x * axis.x + c, oc * axis.x * axis.y - axis.z * s, oc * axis.z * axis.x + axis.y * s, 0.0,"," oc * axis.x * axis.y + axis.z * s, oc * axis.y * axis.y + c, oc * axis.y * axis.z - axis.x * s, 0.0,"," oc * axis.z * axis.x - axis.y * s, oc * axis.y * axis.z + axis.x * s, oc * axis.z * axis.z + c, 0.0,"," 0.0, 0.0, 0.0, 1.0);"," }",""," vec3 getRotation( in vec3 pos, in float positionInTime ) {"," if( rotation.y == 0.0 ) {"," return pos;"," }",""," vec3 axis = unpackRotationAxis( rotation.x );"," vec3 center = rotationCenter;"," vec3 translated;"," mat4 rotationMatrix;"," float angle = 0.0;"," angle += when_eq( rotation.z, 0.0 ) * rotation.y;"," angle += when_gt( rotation.z, 0.0 ) * mix( 0.0, rotation.y, positionInTime );"," translated = rotationCenter - pos;"," rotationMatrix = getRotationMatrix( axis, angle );"," return center - vec3( rotationMatrix * vec4( translated, 0.0 ) );"," }","#endif"].join("\n"),rotateTexture:[" vec2 vUv = vec2( gl_PointCoord.x, 1.0 - gl_PointCoord.y );",""," #ifdef SHOULD_ROTATE_TEXTURE"," float x = gl_PointCoord.x - 0.5;"," float y = 1.0 - gl_PointCoord.y - 0.5;"," float c = cos( -vAngle );"," float s = sin( -vAngle );"," vUv = vec2( c * x + s * y + 0.5, c * y - s * x + 0.5 );"," #endif",""," #ifdef SHOULD_CALCULATE_SPRITE"," float framesX = vSpriteSheet.x;"," float framesY = vSpriteSheet.y;"," float columnNorm = vSpriteSheet.z;"," float rowNorm = vSpriteSheet.w;"," vUv.x = gl_PointCoord.x * framesX + columnNorm;"," vUv.y = 1.0 - (gl_PointCoord.y * framesY + rowNorm);"," #endif",""," vec4 rotatedTexture = texture2D( tex, vUv );"].join("\n")},SPE.shaders={vertex:[SPE.shaderChunks.defines,SPE.shaderChunks.uniforms,SPE.shaderChunks.attributes,SPE.shaderChunks.varyings,THREE.ShaderChunk.common,THREE.ShaderChunk.logdepthbuf_pars_vertex,THREE.ShaderChunk.fog_pars_vertex,SPE.shaderChunks.branchAvoidanceFunctions,SPE.shaderChunks.unpackColor,SPE.shaderChunks.unpackRotationAxis,SPE.shaderChunks.floatOverLifetime,SPE.shaderChunks.colorOverLifetime,SPE.shaderChunks.paramFetchingFunctions,SPE.shaderChunks.forceFetchingFunctions,SPE.shaderChunks.rotationFunctions,"void main() {"," highp float age = getAge();"," highp float alive = getAlive();"," highp float maxAge = getMaxAge();"," highp float positionInTime = (age / maxAge);"," highp float isAlive = when_gt( alive, 0.0 );"," #ifdef SHOULD_WIGGLE_PARTICLES"," float wiggleAmount = positionInTime * getWiggle();"," float wiggleSin = isAlive * sin( wiggleAmount );"," float wiggleCos = isAlive * cos( wiggleAmount );"," #endif"," vec3 vel = getVelocity( age );"," vec3 accel = getAcceleration( age );"," vec3 force = vec3( 0.0 );"," vec3 pos = vec3( position );"," float drag = 1.0 - (positionInTime * 0.5) * acceleration.w;"," force += vel;"," force *= drag;"," force += accel * age;"," pos += force;"," #ifdef SHOULD_WIGGLE_PARTICLES"," pos.x += wiggleSin;"," pos.y += wiggleCos;"," pos.z += wiggleSin;"," #endif"," #ifdef SHOULD_ROTATE_PARTICLES"," pos = getRotation( pos, positionInTime );"," #endif"," vec4 mvPosition = modelViewMatrix * vec4( pos, 1.0 );"," highp float pointSize = getFloatOverLifetime( positionInTime, size ) * isAlive;"," #ifdef HAS_PERSPECTIVE"," float perspective = scale / length( mvPosition.xyz );"," #else"," float perspective = 1.0;"," #endif"," float pointSizePerspective = pointSize * perspective;"," #ifdef COLORIZE"," vec3 c = isAlive * getColorOverLifetime("," positionInTime,"," unpackColor( color.x ),"," unpackColor( color.y ),"," unpackColor( color.z ),"," unpackColor( color.w )"," );"," #else"," vec3 c = vec3(1.0);"," #endif"," float o = isAlive * getFloatOverLifetime( positionInTime, opacity );"," vColor = vec4( c, o );"," #ifdef SHOULD_ROTATE_TEXTURE"," vAngle = isAlive * getFloatOverLifetime( positionInTime, angle );"," #endif"," #ifdef SHOULD_CALCULATE_SPRITE"," float framesX = textureAnimation.x;"," float framesY = textureAnimation.y;"," float loopCount = textureAnimation.w;"," float totalFrames = textureAnimation.z;"," float frameNumber = mod( (positionInTime * loopCount) * totalFrames, totalFrames );"," float column = floor(mod( frameNumber, framesX ));"," float row = floor( (frameNumber - column) / framesX );"," float columnNorm = column / framesX;"," float rowNorm = row / framesY;"," vSpriteSheet.x = 1.0 / framesX;"," vSpriteSheet.y = 1.0 / framesY;"," vSpriteSheet.z = columnNorm;"," vSpriteSheet.w = rowNorm;"," #endif"," gl_PointSize = pointSizePerspective;"," gl_Position = projectionMatrix * mvPosition;",THREE.ShaderChunk.logdepthbuf_vertex,THREE.ShaderChunk.fog_vertex,"}"].join("\n"),fragment:[SPE.shaderChunks.uniforms,THREE.ShaderChunk.common,THREE.ShaderChunk.fog_pars_fragment,THREE.ShaderChunk.logdepthbuf_pars_fragment,SPE.shaderChunks.varyings,SPE.shaderChunks.branchAvoidanceFunctions,"void main() {"," vec3 outgoingLight = vColor.xyz;"," "," #ifdef ALPHATEST"," if ( vColor.w < float(ALPHATEST) ) discard;"," #endif",SPE.shaderChunks.rotateTexture,THREE.ShaderChunk.logdepthbuf_fragment," outgoingLight = vColor.xyz * rotatedTexture.xyz;"," gl_FragColor = vec4( outgoingLight.xyz, rotatedTexture.w * vColor.w );",THREE.ShaderChunk.fog_fragment,"}"].join("\n")},SPE.utils={types:{BOOLEAN:"boolean",STRING:"string",NUMBER:"number",OBJECT:"object"},generateUUID:function(){function e(){return(65536|65536*Math.random()).toString(16).substr(1)}return e()+e()+"-"+e()+"-"+e()+"-"+e()+"-"+e()+e()+e()},ensureTypedArg:function(e,t,r){return typeof e===t?e:r},ensureArrayTypedArg:function(t,r,i){if(Array.isArray(t)){for(let e=t.length-1;0<=e;--e)if(typeof t[e]!==r)return i;return t}return this.ensureTypedArg(t,r,i)},ensureInstanceOf:function(e,t,r){return void 0!==t&&e instanceof t?e:r},ensureArrayInstanceOf:function(t,r,i){if(Array.isArray(t)){for(let e=t.length-1;0<=e;--e)if(void 0!==r&&t[e]instanceof r==!1)return i;return t}return this.ensureInstanceOf(t,r,i)},ensureValueOverLifetimeCompliance:function(e,t,r){t=t||3,r=r||3,!1===Array.isArray(e._value)&&(e._value=[e._value]),!1===Array.isArray(e._spread)&&(e._spread=[e._spread]);var i=this.clamp(e._value.length,t,r),t=this.clamp(e._spread.length,t,r),r=Math.max(i,t);e._value.length!==r&&(e._value=this.interpolateArray(e._value,r)),e._spread.length!==r&&(e._spread=this.interpolateArray(e._spread,r))},interpolateArray:function(t,r){var e=t.length,i=["function"==typeof t[0].clone?t[0].clone():t[0]],a=(e-1)/(r-1);for(let e=1;e{let s=new THREE.Color;return function(e,t,r,i){var a=r.length,o=[];for(let e=0;e{let u=new THREE.Vector3;return function(e,t,r,i,a,o,n,s){u.copy(o),u.x-=r,u.y-=i,u.z-=a,u.normalize().multiplyScalar(-this.randomFloat(n,s)),e.typedArray.setVec3Components(t,u.x,u.y,u.z)}})(),randomDirectionVector3OnDisc:(()=>{let u=new THREE.Vector3;return function(e,t,r,i,a,o,n,s){u.copy(o),u.x-=r,u.y-=i,u.z-=a,u.normalize().multiplyScalar(-this.randomFloat(n,s)),e.typedArray.setVec3Components(t,u.x,u.y,0)}})(),getPackedRotationAxis:(()=>{let r=new THREE.Vector3,i=new THREE.Vector3,a=new THREE.Color,o=new THREE.Vector3(1,1,1);return function(e,t){return r.copy(e).normalize(),i.copy(t).normalize(),r.x+=.5*-t.x+Math.random()*t.x,r.y+=.5*-t.y+Math.random()*t.y,r.z+=.5*-t.z+Math.random()*t.z,r.normalize().add(o).multiplyScalar(.5),a.setRGB(r.x,r.y,r.z),a.getHex()}})()},SPE.Group=function(e){var t=SPE.utils,r=t.types;(e=t.ensureTypedArg(e,r.OBJECT,{})).texture=t.ensureTypedArg(e.texture,r.OBJECT,{}),this.uuid=SPE.utils.generateUUID(),this.fixedTimeStep=t.ensureTypedArg(e.fixedTimeStep,r.NUMBER,.016),this.texture=t.ensureInstanceOf(e.texture.value,THREE.Texture,null),this.textureFrames=t.ensureInstanceOf(e.texture.frames,THREE.Vector2,new THREE.Vector2(1,1)),this.textureFrameCount=t.ensureTypedArg(e.texture.frameCount,r.NUMBER,this.textureFrames.x*this.textureFrames.y),this.textureLoop=t.ensureTypedArg(e.texture.loop,r.NUMBER,1),this.textureFrames.max(new THREE.Vector2(1,1)),this.hasPerspective=t.ensureTypedArg(e.hasPerspective,r.BOOLEAN,!0),this.colorize=t.ensureTypedArg(e.colorize,r.BOOLEAN,!0),this.maxParticleCount=t.ensureTypedArg(e.maxParticleCount,r.NUMBER,null),this.blending=t.ensureTypedArg(e.blending,r.NUMBER,THREE.AdditiveBlending),this.transparent=t.ensureTypedArg(e.transparent,r.BOOLEAN,!0),this.alphaTest=parseFloat(t.ensureTypedArg(e.alphaTest,r.NUMBER,0)),this.depthWrite=t.ensureTypedArg(e.depthWrite,r.BOOLEAN,!1),this.depthTest=t.ensureTypedArg(e.depthTest,r.BOOLEAN,!0),this.fog=t.ensureTypedArg(e.fog,r.BOOLEAN,!0),this.scale=t.ensureTypedArg(e.scale,r.NUMBER,300),this.emitters=[],this.emitterIDs=[],this._pool=[],this._poolCreationSettings=null,this._createNewWhenPoolEmpty=0,this._attributesNeedRefresh=!1,this._attributesNeedDynamicReset=!1,this.particleCount=0,this.uniforms={tex:{type:"t",value:this.texture},textureAnimation:{type:"v4",value:new THREE.Vector4(this.textureFrames.x,this.textureFrames.y,this.textureFrameCount,Math.max(Math.abs(this.textureLoop),1))},fogColor:{type:"c",value:this.fog?new THREE.Color:null},fogNear:{type:"f",value:10},fogFar:{type:"f",value:200},fogDensity:{type:"f",value:.5},deltaTime:{type:"f",value:0},runTime:{type:"f",value:0},scale:{type:"f",value:this.scale}},this.defines={HAS_PERSPECTIVE:this.hasPerspective,COLORIZE:this.colorize,VALUE_OVER_LIFETIME_LENGTH:SPE.valueOverLifetimeLength,SHOULD_ROTATE_TEXTURE:!1,SHOULD_ROTATE_PARTICLES:!1,SHOULD_WIGGLE_PARTICLES:!1,SHOULD_CALCULATE_SPRITE:1this.maxParticleCount&&console.warn("SPE.Group: maxParticleCount exceeded. Requesting",this.particleCount,"particles, can support only",this.maxParticleCount),t._calculatePPSValue(t.maxAge._value+t.maxAge._spread),t._setBufferUpdateRanges(this.attributeKeys),t._setAttributeOffset(i),t.group=this,t.attributes=this.attributes,r)r.hasOwnProperty(e)&&r[e]._createBufferAttribute(null!==this.maxParticleCount?this.maxParticleCount:this.particleCount);for(let e=i;efunction(){return this[e]})(t),set:(a=>function(e){var t=n.updateMap[o],r=this[a],i=SPE.valueOverLifetimeLength;"_rotationCenter"===a?(n.updateFlags.rotationCenter=!0,n.updateCounts.rotationCenter=0):"_randomise"===a?n.resetFlags[t]=e:(n.updateFlags[t]=!0,n.updateCounts[t]=0),n.group._updateDefines(),this[a]=e,Array.isArray(r)&&SPE.utils.ensureValueOverLifetimeCompliance(n[o],i,i)})(t)}))}},SPE.Emitter.prototype._setBufferUpdateRanges=function(t){this.attributeKeys=t,this.attributeCount=t.length;for(let e=this.attributeCount-1;0<=e;--e)this.bufferUpdateRanges[t[e]]={min:Number.POSITIVE_INFINITY,max:Number.NEGATIVE_INFINITY}},SPE.Emitter.prototype._calculatePPSValue=function(e){var t=this.particleCount;this.duration?this.particlesPerSecond=t/(e=t;--e)o=4*e,0!==(u=i[o])&&(s=i[1+o],n=i[2+o],1===this.direction?(s+=a)>=n&&(s=0,u=0,this._decrementParticleCount()):(s-=a)<=0&&(s=n,u=0,this._decrementParticleCount()),i[o]=u,i[1+o]=s,this._updateAttributeUpdateRange("params",e))},SPE.Emitter.prototype._activateParticles=function(t,r,i,a){var o,n,s=this.direction;for(let e=t;ethis.duration?(this.alive=!1,this.age=0):(o=1===this.particleCount?o:0|o,s=(n=Math.min(o+a,this.activationEnd))-this.activationIndex|0,this._activateParticles(o,n,i,0r&&(this.activationIndex=t),this.age+=e))},SPE.Emitter.prototype.reset=function(t){if(this.age=0,!(this.alive=!1)===t){var r,i=this.attributeOffset,t=i+this.particleCount,a=this.paramsArray,e=this.attributes.params.bufferAttribute;for(let e=t-1;e>=i;--e)a[r=4*e]=0,a[1+r]=0;e.addUpdateRange.offset=0,e.addUpdateRange.count=-1,e.needsUpdate=!0}return this},SPE.Emitter.prototype.enable=function(){return this.alive=!0,this},SPE.Emitter.prototype.disable=function(){return this.alive=!1,this},SPE.Emitter.prototype.remove=function(){return null!==this.group?this.group.removeEmitter(this):console.error("Emitter does not belong to a group, cannot remove."),this};export default SPE; \ No newline at end of file diff --git a/examples/activeMultiplier.html b/examples/activeMultiplier.html index 5bddadb..17ed5a5 100644 --- a/examples/activeMultiplier.html +++ b/examples/activeMultiplier.html @@ -3,6 +3,15 @@ SPE: ActiveMultiplier + +

                      @@ -30,24 +39,34 @@

                      Examples

                      runtimeChanging - - - - + + +

                      @@ -23,21 +32,30 @@

                      Examples

                      runtimeChanging - - - - + - let emitter, particleGroup; + - - - - +

                      @@ -24,28 +32,36 @@

                      Examples

                      runtimeChanging - - - - - + - let allIn = function (loaded) { - initExample(loaded); + - > - - - + - let allIn = function (loaded) { - initExample(loaded); + - - - - + + +

                      @@ -24,23 +33,31 @@

                      Examples

                      runtimeChanging - - - - - - - let allIn = function (loaded) { - initExample(loaded); +

                      @@ -24,27 +32,37 @@

                      Examples

                      runtimeChanging - - - - + - // Mouse co-ords - let mouseX, - mouseY, +

                      @@ -24,24 +32,35 @@

                      Examples

                      runtimeChanging - - - - + + + - - - - +

                      Click mouse or press any key to trigger an explosion.

                      @@ -24,18 +32,28 @@

                      Examples

                      runtimeChanging - - - - + + + - - - - + + + - - - - - + + + + + + + + + + + + + + + +

                      +
                      +

                      Change value below to change number of particles

                      +

                      0 = No particles; 1 = 100% of emitter's particle count

                      + +
                      + + + + diff --git a/examples/js/Stats.min.js b/examples/js/Stats.min.js deleted file mode 100644 index 73744ef..0000000 --- a/examples/js/Stats.min.js +++ /dev/null @@ -1,6 +0,0 @@ -// stats.js - http://github.com/mrdoob/stats.js -var Stats=function(){var l=Date.now(),m=l,g=0,n=Infinity,o=0,h=0,p=Infinity,q=0,r=0,s=0,f=document.createElement("div");f.id="stats";f.addEventListener("mousedown",function(b){b.preventDefault();t(++s%2)},!1);f.style.cssText="width:80px;opacity:0.9;cursor:pointer";var a=document.createElement("div");a.id="fps";a.style.cssText="padding:0 0 3px 3px;text-align:left;background-color:#002";f.appendChild(a);var i=document.createElement("div");i.id="fpsText";i.style.cssText="color:#0ff;font-family:Helvetica,Arial,sans-serif;font-size:9px;font-weight:bold;line-height:15px"; -i.innerHTML="FPS";a.appendChild(i);var c=document.createElement("div");c.id="fpsGraph";c.style.cssText="position:relative;width:74px;height:30px;background-color:#0ff";for(a.appendChild(c);74>c.children.length;){var j=document.createElement("span");j.style.cssText="width:1px;height:30px;float:left;background-color:#113";c.appendChild(j)}var d=document.createElement("div");d.id="ms";d.style.cssText="padding:0 0 3px 3px;text-align:left;background-color:#020;display:none";f.appendChild(d);var k=document.createElement("div"); -k.id="msText";k.style.cssText="color:#0f0;font-family:Helvetica,Arial,sans-serif;font-size:9px;font-weight:bold;line-height:15px";k.innerHTML="MS";d.appendChild(k);var e=document.createElement("div");e.id="msGraph";e.style.cssText="position:relative;width:74px;height:30px;background-color:#0f0";for(d.appendChild(e);74>e.children.length;)j=document.createElement("span"),j.style.cssText="width:1px;height:30px;float:left;background-color:#131",e.appendChild(j);var t=function(b){s=b;switch(s){case 0:a.style.display= -"block";d.style.display="none";break;case 1:a.style.display="none",d.style.display="block"}};return{REVISION:11,domElement:f,setMode:t,begin:function(){l=Date.now()},end:function(){var b=Date.now();g=b-l;n=Math.min(n,g);o=Math.max(o,g);k.textContent=g+" MS ("+n+"-"+o+")";var a=Math.min(30,30-30*(g/200));e.appendChild(e.firstChild).style.height=a+"px";r++;b>m+1E3&&(h=Math.round(1E3*r/(b-m)),p=Math.min(p,h),q=Math.max(q,h),i.textContent=h+" FPS ("+p+"-"+q+")",a=Math.min(30,30-30*(h/100)),c.appendChild(c.firstChild).style.height= -a+"px",m=b,r=0);return b},update:function(){l=this.end()}}}; diff --git a/examples/js/basicScene.js b/examples/js/basicScene.js index b2db18a..9350be4 100644 --- a/examples/js/basicScene.js +++ b/examples/js/basicScene.js @@ -5,21 +5,33 @@ export class BasicScene { constructor(fov) { this.scene = new THREE.Scene(); this.camera = new THREE.PerspectiveCamera(fov, window.innerWidth / window.innerHeight, 0.1, 10000); + this.clock = new THREE.Clock(); + // remove any previous renderer.domElement + this.renderCanvasCheck = document.getElementById("RENDER_CANVAS"); + if(this.renderCanvasCheck){ + this.renderCanvasCheck.remove(); + } this.renderer = new THREE.WebGLRenderer({ antialias: true, }); this.renderer.onShaderError = this.shaderErrorLog; this.renderer.debug.checkShaderErrors = false; - - this.stats = new Stats(); - this.clock = new THREE.Clock(); - + this.renderer.domElement.id = "RENDER_CANVAS"; document.body.appendChild(this.renderer.domElement); - document.body.appendChild(this.stats.domElement); + + // remove any previous stats.domElement + this.statsCheck = document.getElementById("STATS_ELEM"); + if(this.statsCheck) { + this.statsCheck.remove(); + } + this.stats = new Stats(); this.stats.domElement.style.position = "absolute"; this.stats.domElement.style.top = "0"; + this.stats.domElement.id = "STATS_ELEM"; + document.body.appendChild(this.stats.domElement); + window.addEventListener( "resize", @@ -40,7 +52,7 @@ export class BasicScene { this.renderer.render(this.scene, this.camera); } - safeLoad(textureUrlArray, callback) { + textureLoad(textureUrlArray, callback) { const textureLoader = new THREE.TextureLoader(); let loadedCount = 0; let loadedTextures = {}; diff --git a/examples/js/dat.gui.min.js b/examples/js/dat.gui.min.js deleted file mode 100644 index 17e4a3c..0000000 --- a/examples/js/dat.gui.min.js +++ /dev/null @@ -1,94 +0,0 @@ -/** - * dat-gui JavaScript Controller Library - * http://code.google.com/p/dat-gui - * - * Copyright 2011 Data Arts Team, Google Creative Lab - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - */ -var dat=dat||{};dat.gui=dat.gui||{};dat.utils=dat.utils||{};dat.controllers=dat.controllers||{};dat.dom=dat.dom||{};dat.color=dat.color||{};dat.utils.css=function(){return{load:function(e,a){var a=a||document,c=a.createElement("link");c.type="text/css";c.rel="stylesheet";c.href=e;a.getElementsByTagName("head")[0].appendChild(c)},inject:function(e,a){var a=a||document,c=document.createElement("style");c.type="text/css";c.innerHTML=e;a.getElementsByTagName("head")[0].appendChild(c)}}}(); -dat.utils.common=function(){var e=Array.prototype.forEach,a=Array.prototype.slice;return{BREAK:{},extend:function(c){this.each(a.call(arguments,1),function(a){for(var f in a)this.isUndefined(a[f])||(c[f]=a[f])},this);return c},defaults:function(c){this.each(a.call(arguments,1),function(a){for(var f in a)this.isUndefined(c[f])&&(c[f]=a[f])},this);return c},compose:function(){var c=a.call(arguments);return function(){for(var d=a.call(arguments),f=c.length-1;f>=0;f--)d=[c[f].apply(this,d)];return d[0]}}, -each:function(a,d,f){if(e&&a.forEach===e)a.forEach(d,f);else if(a.length===a.length+0)for(var b=0,n=a.length;b-1?d.length-d.indexOf(".")-1:0};c.superclass=e;a.extend(c.prototype,e.prototype,{setValue:function(a){if(this.__min!==void 0&&athis.__max)a=this.__max;this.__step!==void 0&&a%this.__step!=0&&(a=Math.round(a/this.__step)*this.__step);return c.superclass.prototype.setValue.call(this,a)},min:function(a){this.__min=a;return this},max:function(a){this.__max=a;return this},step:function(a){this.__step=a;return this}});return c}(dat.controllers.Controller,dat.utils.common); -dat.controllers.NumberControllerBox=function(e,a,c){var d=function(f,b,e){function h(){var a=parseFloat(l.__input.value);c.isNaN(a)||l.setValue(a)}function j(a){var b=o-a.clientY;l.setValue(l.getValue()+b*l.__impliedStep);o=a.clientY}function m(){a.unbind(window,"mousemove",j);a.unbind(window,"mouseup",m)}this.__truncationSuspended=false;d.superclass.call(this,f,b,e);var l=this,o;this.__input=document.createElement("input");this.__input.setAttribute("type","text");a.bind(this.__input,"change",h); -a.bind(this.__input,"blur",function(){h();l.__onFinishChange&&l.__onFinishChange.call(l,l.getValue())});a.bind(this.__input,"mousedown",function(b){a.bind(window,"mousemove",j);a.bind(window,"mouseup",m);o=b.clientY});a.bind(this.__input,"keydown",function(a){if(a.keyCode===13)l.__truncationSuspended=true,this.blur(),l.__truncationSuspended=false});this.updateDisplay();this.domElement.appendChild(this.__input)};d.superclass=e;c.extend(d.prototype,e.prototype,{updateDisplay:function(){var a=this.__input, -b;if(this.__truncationSuspended)b=this.getValue();else{b=this.getValue();var c=Math.pow(10,this.__precision);b=Math.round(b*c)/c}a.value=b;return d.superclass.prototype.updateDisplay.call(this)}});return d}(dat.controllers.NumberController,dat.dom.dom,dat.utils.common); -dat.controllers.NumberControllerSlider=function(e,a,c,d,f){var b=function(d,c,f,e,l){function o(b){b.preventDefault();var d=a.getOffset(g.__background),c=a.getWidth(g.__background);g.setValue(g.__min+(g.__max-g.__min)*((b.clientX-d.left)/(d.left+c-d.left)));return false}function y(){a.unbind(window,"mousemove",o);a.unbind(window,"mouseup",y);g.__onFinishChange&&g.__onFinishChange.call(g,g.getValue())}b.superclass.call(this,d,c,{min:f,max:e,step:l});var g=this;this.__background=document.createElement("div"); -this.__foreground=document.createElement("div");a.bind(this.__background,"mousedown",function(b){a.bind(window,"mousemove",o);a.bind(window,"mouseup",y);o(b)});a.addClass(this.__background,"slider");a.addClass(this.__foreground,"slider-fg");this.updateDisplay();this.__background.appendChild(this.__foreground);this.domElement.appendChild(this.__background)};b.superclass=e;b.useDefaultStyles=function(){c.inject(f)};d.extend(b.prototype,e.prototype,{updateDisplay:function(){this.__foreground.style.width= -(this.getValue()-this.__min)/(this.__max-this.__min)*100+"%";return b.superclass.prototype.updateDisplay.call(this)}});return b}(dat.controllers.NumberController,dat.dom.dom,dat.utils.css,dat.utils.common,".slider {\n box-shadow: inset 0 2px 4px rgba(0,0,0,0.15);\n height: 1em;\n border-radius: 1em;\n background-color: #eee;\n padding: 0 0.5em;\n overflow: hidden;\n}\n\n.slider-fg {\n padding: 1px 0 2px 0;\n background-color: #aaa;\n height: 1em;\n margin-left: -0.5em;\n padding-right: 0.5em;\n border-radius: 1em 0 0 1em;\n}\n\n.slider-fg:after {\n display: inline-block;\n border-radius: 1em;\n background-color: #fff;\n border: 1px solid #aaa;\n content: '';\n float: right;\n margin-right: -1em;\n margin-top: -1px;\n height: 0.9em;\n width: 0.9em;\n}"); -dat.controllers.FunctionController=function(e,a,c){var d=function(c,b,e){d.superclass.call(this,c,b);var h=this;this.__button=document.createElement("div");this.__button.innerHTML=e===void 0?"Fire":e;a.bind(this.__button,"click",function(a){a.preventDefault();h.fire();return false});a.addClass(this.__button,"button");this.domElement.appendChild(this.__button)};d.superclass=e;c.extend(d.prototype,e.prototype,{fire:function(){this.__onChange&&this.__onChange.call(this);this.__onFinishChange&&this.__onFinishChange.call(this, -this.getValue());this.getValue().call(this.object)}});return d}(dat.controllers.Controller,dat.dom.dom,dat.utils.common); -dat.controllers.BooleanController=function(e,a,c){var d=function(c,b){d.superclass.call(this,c,b);var e=this;this.__prev=this.getValue();this.__checkbox=document.createElement("input");this.__checkbox.setAttribute("type","checkbox");a.bind(this.__checkbox,"change",function(){e.setValue(!e.__prev)},false);this.domElement.appendChild(this.__checkbox);this.updateDisplay()};d.superclass=e;c.extend(d.prototype,e.prototype,{setValue:function(a){a=d.superclass.prototype.setValue.call(this,a);this.__onFinishChange&& -this.__onFinishChange.call(this,this.getValue());this.__prev=this.getValue();return a},updateDisplay:function(){this.getValue()===true?(this.__checkbox.setAttribute("checked","checked"),this.__checkbox.checked=true):this.__checkbox.checked=false;return d.superclass.prototype.updateDisplay.call(this)}});return d}(dat.controllers.Controller,dat.dom.dom,dat.utils.common); -dat.color.toString=function(e){return function(a){if(a.a==1||e.isUndefined(a.a)){for(a=a.hex.toString(16);a.length<6;)a="0"+a;return"#"+a}else return"rgba("+Math.round(a.r)+","+Math.round(a.g)+","+Math.round(a.b)+","+a.a+")"}}(dat.utils.common); -dat.color.interpret=function(e,a){var c,d,f=[{litmus:a.isString,conversions:{THREE_CHAR_HEX:{read:function(a){a=a.match(/^#([A-F0-9])([A-F0-9])([A-F0-9])$/i);return a===null?false:{space:"HEX",hex:parseInt("0x"+a[1].toString()+a[1].toString()+a[2].toString()+a[2].toString()+a[3].toString()+a[3].toString())}},write:e},SIX_CHAR_HEX:{read:function(a){a=a.match(/^#([A-F0-9]{6})$/i);return a===null?false:{space:"HEX",hex:parseInt("0x"+a[1].toString())}},write:e},CSS_RGB:{read:function(a){a=a.match(/^rgb\(\s*(.+)\s*,\s*(.+)\s*,\s*(.+)\s*\)/); -return a===null?false:{space:"RGB",r:parseFloat(a[1]),g:parseFloat(a[2]),b:parseFloat(a[3])}},write:e},CSS_RGBA:{read:function(a){a=a.match(/^rgba\(\s*(.+)\s*,\s*(.+)\s*,\s*(.+)\s*\,\s*(.+)\s*\)/);return a===null?false:{space:"RGB",r:parseFloat(a[1]),g:parseFloat(a[2]),b:parseFloat(a[3]),a:parseFloat(a[4])}},write:e}}},{litmus:a.isNumber,conversions:{HEX:{read:function(a){return{space:"HEX",hex:a,conversionName:"HEX"}},write:function(a){return a.hex}}}},{litmus:a.isArray,conversions:{RGB_ARRAY:{read:function(a){return a.length!= -3?false:{space:"RGB",r:a[0],g:a[1],b:a[2]}},write:function(a){return[a.r,a.g,a.b]}},RGBA_ARRAY:{read:function(a){return a.length!=4?false:{space:"RGB",r:a[0],g:a[1],b:a[2],a:a[3]}},write:function(a){return[a.r,a.g,a.b,a.a]}}}},{litmus:a.isObject,conversions:{RGBA_OBJ:{read:function(b){return a.isNumber(b.r)&&a.isNumber(b.g)&&a.isNumber(b.b)&&a.isNumber(b.a)?{space:"RGB",r:b.r,g:b.g,b:b.b,a:b.a}:false},write:function(a){return{r:a.r,g:a.g,b:a.b,a:a.a}}},RGB_OBJ:{read:function(b){return a.isNumber(b.r)&& -a.isNumber(b.g)&&a.isNumber(b.b)?{space:"RGB",r:b.r,g:b.g,b:b.b}:false},write:function(a){return{r:a.r,g:a.g,b:a.b}}},HSVA_OBJ:{read:function(b){return a.isNumber(b.h)&&a.isNumber(b.s)&&a.isNumber(b.v)&&a.isNumber(b.a)?{space:"HSV",h:b.h,s:b.s,v:b.v,a:b.a}:false},write:function(a){return{h:a.h,s:a.s,v:a.v,a:a.a}}},HSV_OBJ:{read:function(b){return a.isNumber(b.h)&&a.isNumber(b.s)&&a.isNumber(b.v)?{space:"HSV",h:b.h,s:b.s,v:b.v}:false},write:function(a){return{h:a.h,s:a.s,v:a.v}}}}}];return function(){d= -false;var b=arguments.length>1?a.toArray(arguments):arguments[0];a.each(f,function(e){if(e.litmus(b))return a.each(e.conversions,function(e,f){c=e.read(b);if(d===false&&c!==false)return d=c,c.conversionName=f,c.conversion=e,a.BREAK}),a.BREAK});return d}}(dat.color.toString,dat.utils.common); -dat.GUI=dat.gui.GUI=function(e,a,c,d,f,b,n,h,j,m,l,o,y,g,i){function q(a,b,r,c){if(b[r]===void 0)throw Error("Object "+b+' has no property "'+r+'"');c.color?b=new l(b,r):(b=[b,r].concat(c.factoryArgs),b=d.apply(a,b));if(c.before instanceof f)c.before=c.before.__li;t(a,b);g.addClass(b.domElement,"c");r=document.createElement("span");g.addClass(r,"property-name");r.innerHTML=b.property;var e=document.createElement("div");e.appendChild(r);e.appendChild(b.domElement);c=s(a,e,c.before);g.addClass(c,k.CLASS_CONTROLLER_ROW); -g.addClass(c,typeof b.getValue());p(a,c,b);a.__controllers.push(b);return b}function s(a,b,d){var c=document.createElement("li");b&&c.appendChild(b);d?a.__ul.insertBefore(c,params.before):a.__ul.appendChild(c);a.onResize();return c}function p(a,d,c){c.__li=d;c.__gui=a;i.extend(c,{options:function(b){if(arguments.length>1)return c.remove(),q(a,c.object,c.property,{before:c.__li.nextElementSibling,factoryArgs:[i.toArray(arguments)]});if(i.isArray(b)||i.isObject(b))return c.remove(),q(a,c.object,c.property, -{before:c.__li.nextElementSibling,factoryArgs:[b]})},name:function(a){c.__li.firstElementChild.firstElementChild.innerHTML=a;return c},listen:function(){c.__gui.listen(c);return c},remove:function(){c.__gui.remove(c);return c}});if(c instanceof j){var e=new h(c.object,c.property,{min:c.__min,max:c.__max,step:c.__step});i.each(["updateDisplay","onChange","onFinishChange"],function(a){var b=c[a],H=e[a];c[a]=e[a]=function(){var a=Array.prototype.slice.call(arguments);b.apply(c,a);return H.apply(e,a)}}); -g.addClass(d,"has-slider");c.domElement.insertBefore(e.domElement,c.domElement.firstElementChild)}else if(c instanceof h){var f=function(b){return i.isNumber(c.__min)&&i.isNumber(c.__max)?(c.remove(),q(a,c.object,c.property,{before:c.__li.nextElementSibling,factoryArgs:[c.__min,c.__max,c.__step]})):b};c.min=i.compose(f,c.min);c.max=i.compose(f,c.max)}else if(c instanceof b)g.bind(d,"click",function(){g.fakeEvent(c.__checkbox,"click")}),g.bind(c.__checkbox,"click",function(a){a.stopPropagation()}); -else if(c instanceof n)g.bind(d,"click",function(){g.fakeEvent(c.__button,"click")}),g.bind(d,"mouseover",function(){g.addClass(c.__button,"hover")}),g.bind(d,"mouseout",function(){g.removeClass(c.__button,"hover")});else if(c instanceof l)g.addClass(d,"color"),c.updateDisplay=i.compose(function(a){d.style.borderLeftColor=c.__color.toString();return a},c.updateDisplay),c.updateDisplay();c.setValue=i.compose(function(b){a.getRoot().__preset_select&&c.isModified()&&B(a.getRoot(),true);return b},c.setValue)} -function t(a,b){var c=a.getRoot(),d=c.__rememberedObjects.indexOf(b.object);if(d!=-1){var e=c.__rememberedObjectIndecesToControllers[d];e===void 0&&(e={},c.__rememberedObjectIndecesToControllers[d]=e);e[b.property]=b;if(c.load&&c.load.remembered){c=c.load.remembered;if(c[a.preset])c=c[a.preset];else if(c[w])c=c[w];else return;if(c[d]&&c[d][b.property]!==void 0)d=c[d][b.property],b.initialValue=d,b.setValue(d)}}}function I(a){var b=a.__save_row=document.createElement("li");g.addClass(a.domElement, -"has-save");a.__ul.insertBefore(b,a.__ul.firstChild);g.addClass(b,"save-row");var c=document.createElement("span");c.innerHTML=" ";g.addClass(c,"button gears");var d=document.createElement("span");d.innerHTML="Save";g.addClass(d,"button");g.addClass(d,"save");var e=document.createElement("span");e.innerHTML="New";g.addClass(e,"button");g.addClass(e,"save-as");var f=document.createElement("span");f.innerHTML="Revert";g.addClass(f,"button");g.addClass(f,"revert");var m=a.__preset_select=document.createElement("select"); -a.load&&a.load.remembered?i.each(a.load.remembered,function(b,c){C(a,c,c==a.preset)}):C(a,w,false);g.bind(m,"change",function(){for(var b=0;b0){a.preset=this.preset;if(!a.remembered)a.remembered={};a.remembered[this.preset]=z(this)}a.folders={};i.each(this.__folders,function(b, -c){a.folders[c]=b.getSaveObject()});return a},save:function(){if(!this.load.remembered)this.load.remembered={};this.load.remembered[this.preset]=z(this);B(this,false)},saveAs:function(a){if(!this.load.remembered)this.load.remembered={},this.load.remembered[w]=z(this,true);this.load.remembered[a]=z(this);this.preset=a;C(this,a,true)},revert:function(a){i.each(this.__controllers,function(b){this.getRoot().load.remembered?t(a||this.getRoot(),b):b.setValue(b.initialValue)},this);i.each(this.__folders, -function(a){a.revert(a)});a||B(this.getRoot(),false)},listen:function(a){var b=this.__listening.length==0;this.__listening.push(a);b&&E(this.__listening)}});return k}(dat.utils.css,'
                      \n\n Here\'s the new load parameter for your GUI\'s constructor:\n\n \n\n
                      \n\n Automatically save\n values to localStorage on exit.\n\n
                      The values saved to localStorage will\n override those passed to dat.GUI\'s constructor. This makes it\n easier to work incrementally, but localStorage is fragile,\n and your friends may not see the same values you do.\n \n
                      \n \n
                      \n\n
                      ', -".dg ul{list-style:none;margin:0;padding:0;width:100%;clear:both}.dg.ac{position:fixed;top:0;left:0;right:0;height:0;z-index:0}.dg:not(.ac) .main{overflow:hidden}.dg.main{-webkit-transition:opacity 0.1s linear;-o-transition:opacity 0.1s linear;-moz-transition:opacity 0.1s linear;transition:opacity 0.1s linear}.dg.main.taller-than-window{overflow-y:auto}.dg.main.taller-than-window .close-button{opacity:1;margin-top:-1px;border-top:1px solid #2c2c2c}.dg.main ul.closed .close-button{opacity:1 !important}.dg.main:hover .close-button,.dg.main .close-button.drag{opacity:1}.dg.main .close-button{-webkit-transition:opacity 0.1s linear;-o-transition:opacity 0.1s linear;-moz-transition:opacity 0.1s linear;transition:opacity 0.1s linear;border:0;position:absolute;line-height:19px;height:20px;cursor:pointer;text-align:center;background-color:#000}.dg.main .close-button:hover{background-color:#111}.dg.a{float:right;margin-right:15px;overflow-x:hidden}.dg.a.has-save ul{margin-top:27px}.dg.a.has-save ul.closed{margin-top:0}.dg.a .save-row{position:fixed;top:0;z-index:1002}.dg li{-webkit-transition:height 0.1s ease-out;-o-transition:height 0.1s ease-out;-moz-transition:height 0.1s ease-out;transition:height 0.1s ease-out}.dg li:not(.folder){cursor:auto;height:27px;line-height:27px;overflow:hidden;padding:0 4px 0 5px}.dg li.folder{padding:0;border-left:4px solid rgba(0,0,0,0)}.dg li.title{cursor:pointer;margin-left:-4px}.dg .closed li:not(.title),.dg .closed ul li,.dg .closed ul li > *{height:0;overflow:hidden;border:0}.dg .cr{clear:both;padding-left:3px;height:27px}.dg .property-name{cursor:default;float:left;clear:left;width:40%;overflow:hidden;text-overflow:ellipsis}.dg .c{float:left;width:60%}.dg .c input[type=text]{border:0;margin-top:4px;padding:3px;width:100%;float:right}.dg .has-slider input[type=text]{width:30%;margin-left:0}.dg .slider{float:left;width:66%;margin-left:-5px;margin-right:0;height:19px;margin-top:4px}.dg .slider-fg{height:100%}.dg .c input[type=checkbox]{margin-top:9px}.dg .c select{margin-top:5px}.dg .cr.function,.dg .cr.function .property-name,.dg .cr.function *,.dg .cr.boolean,.dg .cr.boolean *{cursor:pointer}.dg .selector{display:none;position:absolute;margin-left:-9px;margin-top:23px;z-index:10}.dg .c:hover .selector,.dg .selector.drag{display:block}.dg li.save-row{padding:0}.dg li.save-row .button{display:inline-block;padding:0px 6px}.dg.dialogue{background-color:#222;width:460px;padding:15px;font-size:13px;line-height:15px}#dg-new-constructor{padding:10px;color:#222;font-family:Monaco, monospace;font-size:10px;border:0;resize:none;box-shadow:inset 1px 1px 1px #888;word-wrap:break-word;margin:12px 0;display:block;width:440px;overflow-y:scroll;height:100px;position:relative}#dg-local-explain{display:none;font-size:11px;line-height:17px;border-radius:3px;background-color:#333;padding:8px;margin-top:10px}#dg-local-explain code{font-size:10px}#dat-gui-save-locally{display:none}.dg{color:#eee;font:11px 'Lucida Grande', sans-serif;text-shadow:0 -1px 0 #111}.dg.main::-webkit-scrollbar{width:5px;background:#1a1a1a}.dg.main::-webkit-scrollbar-corner{height:0;display:none}.dg.main::-webkit-scrollbar-thumb{border-radius:5px;background:#676767}.dg li:not(.folder){background:#1a1a1a;border-bottom:1px solid #2c2c2c}.dg li.save-row{line-height:25px;background:#dad5cb;border:0}.dg li.save-row select{margin-left:5px;width:108px}.dg li.save-row .button{margin-left:5px;margin-top:1px;border-radius:2px;font-size:9px;line-height:7px;padding:4px 4px 5px 4px;background:#c5bdad;color:#fff;text-shadow:0 1px 0 #b0a58f;box-shadow:0 -1px 0 #b0a58f;cursor:pointer}.dg li.save-row .button.gears{background:#c5bdad url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAsAAAANCAYAAAB/9ZQ7AAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAQJJREFUeNpiYKAU/P//PwGIC/ApCABiBSAW+I8AClAcgKxQ4T9hoMAEUrxx2QSGN6+egDX+/vWT4e7N82AMYoPAx/evwWoYoSYbACX2s7KxCxzcsezDh3evFoDEBYTEEqycggWAzA9AuUSQQgeYPa9fPv6/YWm/Acx5IPb7ty/fw+QZblw67vDs8R0YHyQhgObx+yAJkBqmG5dPPDh1aPOGR/eugW0G4vlIoTIfyFcA+QekhhHJhPdQxbiAIguMBTQZrPD7108M6roWYDFQiIAAv6Aow/1bFwXgis+f2LUAynwoIaNcz8XNx3Dl7MEJUDGQpx9gtQ8YCueB+D26OECAAQDadt7e46D42QAAAABJRU5ErkJggg==) 2px 1px no-repeat;height:7px;width:8px}.dg li.save-row .button:hover{background-color:#bab19e;box-shadow:0 -1px 0 #b0a58f}.dg li.folder{border-bottom:0}.dg li.title{padding-left:16px;background:#000 url(data:image/gif;base64,R0lGODlhBQAFAJEAAP////Pz8////////yH5BAEAAAIALAAAAAAFAAUAAAIIlI+hKgFxoCgAOw==) 6px 10px no-repeat;cursor:pointer;border-bottom:1px solid rgba(255,255,255,0.2)}.dg .closed li.title{background-image:url(data:image/gif;base64,R0lGODlhBQAFAJEAAP////Pz8////////yH5BAEAAAIALAAAAAAFAAUAAAIIlGIWqMCbWAEAOw==)}.dg .cr.boolean{border-left:3px solid #806787}.dg .cr.function{border-left:3px solid #e61d5f}.dg .cr.number{border-left:3px solid #2fa1d6}.dg .cr.number input[type=text]{color:#2fa1d6}.dg .cr.string{border-left:3px solid #1ed36f}.dg .cr.string input[type=text]{color:#1ed36f}.dg .cr.function:hover,.dg .cr.boolean:hover{background:#111}.dg .c input[type=text]{background:#303030;outline:none}.dg .c input[type=text]:hover{background:#3c3c3c}.dg .c input[type=text]:focus{background:#494949;color:#fff}.dg .c .slider{background:#303030;cursor:ew-resize}.dg .c .slider-fg{background:#2fa1d6}.dg .c .slider:hover{background:#3c3c3c}.dg .c .slider:hover .slider-fg{background:#44abda}\n", -dat.controllers.factory=function(e,a,c,d,f,b,n){return function(h,j,m,l){var o=h[j];if(n.isArray(m)||n.isObject(m))return new e(h,j,m);if(n.isNumber(o))return n.isNumber(m)&&n.isNumber(l)?new c(h,j,m,l):new a(h,j,{min:m,max:l});if(n.isString(o))return new d(h,j);if(n.isFunction(o))return new f(h,j,"");if(n.isBoolean(o))return new b(h,j)}}(dat.controllers.OptionController,dat.controllers.NumberControllerBox,dat.controllers.NumberControllerSlider,dat.controllers.StringController=function(e,a,c){var d= -function(c,b){function e(){h.setValue(h.__input.value)}d.superclass.call(this,c,b);var h=this;this.__input=document.createElement("input");this.__input.setAttribute("type","text");a.bind(this.__input,"keyup",e);a.bind(this.__input,"change",e);a.bind(this.__input,"blur",function(){h.__onFinishChange&&h.__onFinishChange.call(h,h.getValue())});a.bind(this.__input,"keydown",function(a){a.keyCode===13&&this.blur()});this.updateDisplay();this.domElement.appendChild(this.__input)};d.superclass=e;c.extend(d.prototype, -e.prototype,{updateDisplay:function(){if(!a.isActive(this.__input))this.__input.value=this.getValue();return d.superclass.prototype.updateDisplay.call(this)}});return d}(dat.controllers.Controller,dat.dom.dom,dat.utils.common),dat.controllers.FunctionController,dat.controllers.BooleanController,dat.utils.common),dat.controllers.Controller,dat.controllers.BooleanController,dat.controllers.FunctionController,dat.controllers.NumberControllerBox,dat.controllers.NumberControllerSlider,dat.controllers.OptionController, -dat.controllers.ColorController=function(e,a,c,d,f){function b(a,b,c,d){a.style.background="";f.each(j,function(e){a.style.cssText+="background: "+e+"linear-gradient("+b+", "+c+" 0%, "+d+" 100%); "})}function n(a){a.style.background="";a.style.cssText+="background: -moz-linear-gradient(top, #ff0000 0%, #ff00ff 17%, #0000ff 34%, #00ffff 50%, #00ff00 67%, #ffff00 84%, #ff0000 100%);";a.style.cssText+="background: -webkit-linear-gradient(top, #ff0000 0%,#ff00ff 17%,#0000ff 34%,#00ffff 50%,#00ff00 67%,#ffff00 84%,#ff0000 100%);"; -a.style.cssText+="background: -o-linear-gradient(top, #ff0000 0%,#ff00ff 17%,#0000ff 34%,#00ffff 50%,#00ff00 67%,#ffff00 84%,#ff0000 100%);";a.style.cssText+="background: -ms-linear-gradient(top, #ff0000 0%,#ff00ff 17%,#0000ff 34%,#00ffff 50%,#00ff00 67%,#ffff00 84%,#ff0000 100%);";a.style.cssText+="background: linear-gradient(top, #ff0000 0%,#ff00ff 17%,#0000ff 34%,#00ffff 50%,#00ff00 67%,#ffff00 84%,#ff0000 100%);"}var h=function(e,l){function o(b){q(b);a.bind(window,"mousemove",q);a.bind(window, -"mouseup",j)}function j(){a.unbind(window,"mousemove",q);a.unbind(window,"mouseup",j)}function g(){var a=d(this.value);a!==false?(p.__color.__state=a,p.setValue(p.__color.toOriginal())):this.value=p.__color.toString()}function i(){a.unbind(window,"mousemove",s);a.unbind(window,"mouseup",i)}function q(b){b.preventDefault();var c=a.getWidth(p.__saturation_field),d=a.getOffset(p.__saturation_field),e=(b.clientX-d.left+document.body.scrollLeft)/c,b=1-(b.clientY-d.top+document.body.scrollTop)/c;b>1?b= -1:b<0&&(b=0);e>1?e=1:e<0&&(e=0);p.__color.v=b;p.__color.s=e;p.setValue(p.__color.toOriginal());return false}function s(b){b.preventDefault();var c=a.getHeight(p.__hue_field),d=a.getOffset(p.__hue_field),b=1-(b.clientY-d.top+document.body.scrollTop)/c;b>1?b=1:b<0&&(b=0);p.__color.h=b*360;p.setValue(p.__color.toOriginal());return false}h.superclass.call(this,e,l);this.__color=new c(this.getValue());this.__temp=new c(0);var p=this;this.domElement=document.createElement("div");a.makeSelectable(this.domElement, -false);this.__selector=document.createElement("div");this.__selector.className="selector";this.__saturation_field=document.createElement("div");this.__saturation_field.className="saturation-field";this.__field_knob=document.createElement("div");this.__field_knob.className="field-knob";this.__field_knob_border="2px solid ";this.__hue_knob=document.createElement("div");this.__hue_knob.className="hue-knob";this.__hue_field=document.createElement("div");this.__hue_field.className="hue-field";this.__input= -document.createElement("input");this.__input.type="text";this.__input_textShadow="0 1px 1px ";a.bind(this.__input,"keydown",function(a){a.keyCode===13&&g.call(this)});a.bind(this.__input,"blur",g);a.bind(this.__selector,"mousedown",function(){a.addClass(this,"drag").bind(window,"mouseup",function(){a.removeClass(p.__selector,"drag")})});var t=document.createElement("div");f.extend(this.__selector.style,{width:"122px",height:"102px",padding:"3px",backgroundColor:"#222",boxShadow:"0px 1px 3px rgba(0,0,0,0.3)"}); -f.extend(this.__field_knob.style,{position:"absolute",width:"12px",height:"12px",border:this.__field_knob_border+(this.__color.v<0.5?"#fff":"#000"),boxShadow:"0px 1px 3px rgba(0,0,0,0.5)",borderRadius:"12px",zIndex:1});f.extend(this.__hue_knob.style,{position:"absolute",width:"15px",height:"2px",borderRight:"4px solid #fff",zIndex:1});f.extend(this.__saturation_field.style,{width:"100px",height:"100px",border:"1px solid #555",marginRight:"3px",display:"inline-block",cursor:"pointer"});f.extend(t.style, -{width:"100%",height:"100%",background:"none"});b(t,"top","rgba(0,0,0,0)","#000");f.extend(this.__hue_field.style,{width:"15px",height:"100px",display:"inline-block",border:"1px solid #555",cursor:"ns-resize"});n(this.__hue_field);f.extend(this.__input.style,{outline:"none",textAlign:"center",color:"#fff",border:0,fontWeight:"bold",textShadow:this.__input_textShadow+"rgba(0,0,0,0.7)"});a.bind(this.__saturation_field,"mousedown",o);a.bind(this.__field_knob,"mousedown",o);a.bind(this.__hue_field,"mousedown", -function(b){s(b);a.bind(window,"mousemove",s);a.bind(window,"mouseup",i)});this.__saturation_field.appendChild(t);this.__selector.appendChild(this.__field_knob);this.__selector.appendChild(this.__saturation_field);this.__selector.appendChild(this.__hue_field);this.__hue_field.appendChild(this.__hue_knob);this.domElement.appendChild(this.__input);this.domElement.appendChild(this.__selector);this.updateDisplay()};h.superclass=e;f.extend(h.prototype,e.prototype,{updateDisplay:function(){var a=d(this.getValue()); -if(a!==false){var e=false;f.each(c.COMPONENTS,function(b){if(!f.isUndefined(a[b])&&!f.isUndefined(this.__color.__state[b])&&a[b]!==this.__color.__state[b])return e=true,{}},this);e&&f.extend(this.__color.__state,a)}f.extend(this.__temp.__state,this.__color.__state);this.__temp.a=1;var h=this.__color.v<0.5||this.__color.s>0.5?255:0,j=255-h;f.extend(this.__field_knob.style,{marginLeft:100*this.__color.s-7+"px",marginTop:100*(1-this.__color.v)-7+"px",backgroundColor:this.__temp.toString(),border:this.__field_knob_border+ -"rgb("+h+","+h+","+h+")"});this.__hue_knob.style.marginTop=(1-this.__color.h/360)*100+"px";this.__temp.s=1;this.__temp.v=1;b(this.__saturation_field,"left","#fff",this.__temp.toString());f.extend(this.__input.style,{backgroundColor:this.__input.value=this.__color.toString(),color:"rgb("+h+","+h+","+h+")",textShadow:this.__input_textShadow+"rgba("+j+","+j+","+j+",.7)"})}});var j=["-moz-","-o-","-webkit-","-ms-",""];return h}(dat.controllers.Controller,dat.dom.dom,dat.color.Color=function(e,a,c,d){function f(a, -b,c){Object.defineProperty(a,b,{get:function(){if(this.__state.space==="RGB")return this.__state[b];n(this,b,c);return this.__state[b]},set:function(a){if(this.__state.space!=="RGB")n(this,b,c),this.__state.space="RGB";this.__state[b]=a}})}function b(a,b){Object.defineProperty(a,b,{get:function(){if(this.__state.space==="HSV")return this.__state[b];h(this);return this.__state[b]},set:function(a){if(this.__state.space!=="HSV")h(this),this.__state.space="HSV";this.__state[b]=a}})}function n(b,c,e){if(b.__state.space=== -"HEX")b.__state[c]=a.component_from_hex(b.__state.hex,e);else if(b.__state.space==="HSV")d.extend(b.__state,a.hsv_to_rgb(b.__state.h,b.__state.s,b.__state.v));else throw"Corrupted color state";}function h(b){var c=a.rgb_to_hsv(b.r,b.g,b.b);d.extend(b.__state,{s:c.s,v:c.v});if(d.isNaN(c.h)){if(d.isUndefined(b.__state.h))b.__state.h=0}else b.__state.h=c.h}var j=function(){this.__state=e.apply(this,arguments);if(this.__state===false)throw"Failed to interpret color arguments";this.__state.a=this.__state.a|| -1};j.COMPONENTS="r,g,b,h,s,v,hex,a".split(",");d.extend(j.prototype,{toString:function(){return c(this)},toOriginal:function(){return this.__state.conversion.write(this)}});f(j.prototype,"r",2);f(j.prototype,"g",1);f(j.prototype,"b",0);b(j.prototype,"h");b(j.prototype,"s");b(j.prototype,"v");Object.defineProperty(j.prototype,"a",{get:function(){return this.__state.a},set:function(a){this.__state.a=a}});Object.defineProperty(j.prototype,"hex",{get:function(){if(!this.__state.space!=="HEX")this.__state.hex= -a.rgb_to_hex(this.r,this.g,this.b);return this.__state.hex},set:function(a){this.__state.space="HEX";this.__state.hex=a}});return j}(dat.color.interpret,dat.color.math=function(){var e;return{hsv_to_rgb:function(a,c,d){var e=a/60-Math.floor(a/60),b=d*(1-c),n=d*(1-e*c),c=d*(1-(1-e)*c),a=[[d,c,b],[n,d,b],[b,d,c],[b,n,d],[c,b,d],[d,b,n]][Math.floor(a/60)%6];return{r:a[0]*255,g:a[1]*255,b:a[2]*255}},rgb_to_hsv:function(a,c,d){var e=Math.min(a,c,d),b=Math.max(a,c,d),e=b-e;if(b==0)return{h:NaN,s:0,v:0}; -a=a==b?(c-d)/e:c==b?2+(d-a)/e:4+(a-c)/e;a/=6;a<0&&(a+=1);return{h:a*360,s:e/b,v:b/255}},rgb_to_hex:function(a,c,d){a=this.hex_with_component(0,2,a);a=this.hex_with_component(a,1,c);return a=this.hex_with_component(a,0,d)},component_from_hex:function(a,c){return a>>c*8&255},hex_with_component:function(a,c,d){return d<<(e=c*8)|a&~(255< { - loadedTextures[url] = textureLoader.load( - url, - checkAllLoaded, - (xhr) => console.log(`${url}: ${(xhr.loaded / xhr.total) * 100}% loaded`), - (error) => { - hasError = true; - console.error(`Error loading texture ${url}:`, error); - } - ); - }); - } catch (error) { - hasError = true; - console.error("Texture loading failed:", error); - } -}; - -/* -let safeLoad = function (textureUrlArray, callback) { - const textureLoader = new THREE.TextureLoader(); - let loadedCount = 0; //textureUrlArray.length; - let loadedTextures = {}; - - function checkAllLoaded() { - loadedCount++; - if (loadedCount === textureUrlArray.length) { - callback(loadedTextures); - } - } - - try { - textureUrlArray.forEach((url) => { - loadedTextures[url] = textureLoader.load( - url, - checkAllLoaded, - (xhr) => console.log(`Texture 1: ${(xhr.loaded / xhr.total) * 100}% loaded`), - (error) => console.error("Error loading texture 1:", error) - ); - }); - } catch (error) { - console.error("Texture loading failed:", error); - } -}; -*/ From a636ac3d7e571349a21e7ee27c48c6e0bfce6596 Mon Sep 17 00:00:00 2001 From: KellyCode Date: Sat, 8 Mar 2025 14:24:30 -0600 Subject: [PATCH 20/25] three r174, examples cleaned up --- examples/examples.html | 102 ++++++++++++++++++++++------------------- 1 file changed, 55 insertions(+), 47 deletions(-) diff --git a/examples/examples.html b/examples/examples.html index 85a205a..4852a53 100644 --- a/examples/examples.html +++ b/examples/examples.html @@ -4,69 +4,75 @@ + - + + let modules = {}; - - @@ -82,23 +88,25 @@ From b046d611ea4b014b221643397b5fec8b03c47a02 Mon Sep 17 00:00:00 2001 From: KellyCode Date: Sat, 8 Mar 2025 14:26:00 -0600 Subject: [PATCH 21/25] Update README.md --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index aa3b46b..5a68f5d 100644 --- a/README.md +++ b/README.md @@ -1,4 +1,4 @@ -Now at THREE r160 +Upgraded to THREE r174, examples are all modules in one page Shader Particle Engine v1.0.6 ![](https://travis-ci.org/squarefeet/ShaderParticleEngine.svg?branch=master) ============================= From e59d428f027fd9cf0db562d3fb983950ee506118 Mon Sep 17 00:00:00 2001 From: KellyCode Date: Sat, 8 Mar 2025 14:26:38 -0600 Subject: [PATCH 22/25] Update README.md --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 5a68f5d..a737949 100644 --- a/README.md +++ b/README.md @@ -1,4 +1,4 @@ -Upgraded to THREE r174, examples are all modules in one page +March 8, `25: Upgraded to THREE r174, examples are all modules in one page Shader Particle Engine v1.0.6 ![](https://travis-ci.org/squarefeet/ShaderParticleEngine.svg?branch=master) ============================= From bd5ce7932bfb1c93c75b1f64ce496f3703092f29 Mon Sep 17 00:00:00 2001 From: KellyCode Date: Sun, 16 Mar 2025 07:43:17 -0500 Subject: [PATCH 23/25] cleanup --- examples/archive/activeMultiplier.html | 158 -------- examples/archive/basic.html | 131 ------ examples/archive/clock.html | 208 ---------- examples/archive/clouds.html | 139 ------- examples/archive/distributions.html | 256 ------------ examples/archive/explosion.html | 249 ------------ examples/archive/fog.html | 134 ------- examples/archive/mouseFollow.html | 159 -------- examples/archive/multipleEmitters.html | 182 --------- examples/archive/orbit.html | 134 ------- examples/archive/pool.html | 171 -------- examples/archive/rotation.html | 277 ------------- examples/archive/runtimeChanging.html | 379 ------------------ examples/archive/style.css | 46 --- examples/img/Corel Auto-Preserve/bullet.png | Bin 662 -> 0 bytes examples/img/Corel Auto-Preserve/bullet2.png | Bin 1800 -> 0 bytes examples/img/Corel Auto-Preserve/cloud.png | Bin 113120 -> 0 bytes examples/img/Corel Auto-Preserve/cloudSml.png | Bin 11119 -> 0 bytes examples/img/Corel Auto-Preserve/flames.jpg | Bin 742500 -> 0 bytes .../img/Corel Auto-Preserve/shockwave.png | Bin 62207 -> 0 bytes .../img/Corel Auto-Preserve/smokeparticle.png | Bin 15427 -> 0 bytes .../Corel Auto-Preserve/smokeparticle_2.png | Bin 31377 -> 0 bytes .../img/Corel Auto-Preserve/sprite-1x4.jpg | Bin 11798 -> 0 bytes .../img/Corel Auto-Preserve/sprite-2x2.jpg | Bin 10990 -> 0 bytes .../img/Corel Auto-Preserve/sprite-3x3.jpg | Bin 39125 -> 0 bytes .../img/Corel Auto-Preserve/sprite-4x1.jpg | Bin 12054 -> 0 bytes .../Corel Auto-Preserve/sprite-explosion.png | Bin 115671 -> 0 bytes .../Corel Auto-Preserve/sprite-explosion2.png | Bin 138117 -> 0 bytes .../img/Corel Auto-Preserve/sprite-flame.jpg | Bin 39405 -> 0 bytes .../img/Corel Auto-Preserve/sprite-flame2.jpg | Bin 190868 -> 0 bytes .../img/Corel Auto-Preserve/sprite-smoke.jpg | Bin 112582 -> 0 bytes examples/img/Corel Auto-Preserve/star.png | Bin 8018 -> 0 bytes 32 files changed, 2623 deletions(-) delete mode 100644 examples/archive/activeMultiplier.html delete mode 100644 examples/archive/basic.html delete mode 100644 examples/archive/clock.html delete mode 100644 examples/archive/clouds.html delete mode 100644 examples/archive/distributions.html delete mode 100644 examples/archive/explosion.html delete mode 100644 examples/archive/fog.html delete mode 100644 examples/archive/mouseFollow.html delete mode 100644 examples/archive/multipleEmitters.html delete mode 100644 examples/archive/orbit.html delete mode 100644 examples/archive/pool.html delete mode 100644 examples/archive/rotation.html delete mode 100644 examples/archive/runtimeChanging.html delete mode 100644 examples/archive/style.css delete mode 100644 examples/img/Corel Auto-Preserve/bullet.png delete mode 100644 examples/img/Corel Auto-Preserve/bullet2.png delete mode 100644 examples/img/Corel Auto-Preserve/cloud.png delete mode 100644 examples/img/Corel Auto-Preserve/cloudSml.png delete mode 100644 examples/img/Corel Auto-Preserve/flames.jpg delete mode 100644 examples/img/Corel Auto-Preserve/shockwave.png delete mode 100644 examples/img/Corel Auto-Preserve/smokeparticle.png delete mode 100644 examples/img/Corel Auto-Preserve/smokeparticle_2.png delete mode 100644 examples/img/Corel Auto-Preserve/sprite-1x4.jpg delete mode 100644 examples/img/Corel Auto-Preserve/sprite-2x2.jpg delete mode 100644 examples/img/Corel Auto-Preserve/sprite-3x3.jpg delete mode 100644 examples/img/Corel Auto-Preserve/sprite-4x1.jpg delete mode 100644 examples/img/Corel Auto-Preserve/sprite-explosion.png delete mode 100644 examples/img/Corel Auto-Preserve/sprite-explosion2.png delete mode 100644 examples/img/Corel Auto-Preserve/sprite-flame.jpg delete mode 100644 examples/img/Corel Auto-Preserve/sprite-flame2.jpg delete mode 100644 examples/img/Corel Auto-Preserve/sprite-smoke.jpg delete mode 100644 examples/img/Corel Auto-Preserve/star.png diff --git a/examples/archive/activeMultiplier.html b/examples/archive/activeMultiplier.html deleted file mode 100644 index 59a840e..0000000 --- a/examples/archive/activeMultiplier.html +++ /dev/null @@ -1,158 +0,0 @@ - - - SPE: ActiveMultiplier - - - - - - -

                      - -
                      -

                      Change value below to change number of particles

                      -

                      0 = No particles; 1 = 100% of emitter's particle count

                      - -
                      - - - - - - - - diff --git a/examples/archive/basic.html b/examples/archive/basic.html deleted file mode 100644 index 9d3a5e7..0000000 --- a/examples/archive/basic.html +++ /dev/null @@ -1,131 +0,0 @@ - - - SPE: Basic - - - - - -

                      - - - - - - - - diff --git a/examples/archive/clock.html b/examples/archive/clock.html deleted file mode 100644 index 36e6495..0000000 --- a/examples/archive/clock.html +++ /dev/null @@ -1,208 +0,0 @@ - - - - SPE: Clock - - - - - - - - - - - - - diff --git a/examples/archive/clouds.html b/examples/archive/clouds.html deleted file mode 100644 index 68003af..0000000 --- a/examples/archive/clouds.html +++ /dev/null @@ -1,139 +0,0 @@ - - - SPE: Clouds - - - - - -

                      - - - - - - - - diff --git a/examples/archive/distributions.html b/examples/archive/distributions.html deleted file mode 100644 index 24f5881..0000000 --- a/examples/archive/distributions.html +++ /dev/null @@ -1,256 +0,0 @@ - - - SPE: Distribution types - - - - - - - - - - - diff --git a/examples/archive/explosion.html b/examples/archive/explosion.html deleted file mode 100644 index 2de4d06..0000000 --- a/examples/archive/explosion.html +++ /dev/null @@ -1,249 +0,0 @@ - - - - SPE: Explosion - - - - - - - - - - - - diff --git a/examples/archive/fog.html b/examples/archive/fog.html deleted file mode 100644 index 74c19b9..0000000 --- a/examples/archive/fog.html +++ /dev/null @@ -1,134 +0,0 @@ - - - SPE: Fog support - - - - - - -

                      - - - - - - - - diff --git a/examples/archive/mouseFollow.html b/examples/archive/mouseFollow.html deleted file mode 100644 index 2237d5a..0000000 --- a/examples/archive/mouseFollow.html +++ /dev/null @@ -1,159 +0,0 @@ - - - SPE: Mouse follow - - - - - -

                      - - - - - - - - diff --git a/examples/archive/multipleEmitters.html b/examples/archive/multipleEmitters.html deleted file mode 100644 index 036bec7..0000000 --- a/examples/archive/multipleEmitters.html +++ /dev/null @@ -1,182 +0,0 @@ - - - SPE: Multiple Emitters - - - - - -

                      - - - - - - - - diff --git a/examples/archive/orbit.html b/examples/archive/orbit.html deleted file mode 100644 index e888ee9..0000000 --- a/examples/archive/orbit.html +++ /dev/null @@ -1,134 +0,0 @@ - - - SPE: Distribution types - - - - - - - - - - - diff --git a/examples/archive/pool.html b/examples/archive/pool.html deleted file mode 100644 index be94b2a..0000000 --- a/examples/archive/pool.html +++ /dev/null @@ -1,171 +0,0 @@ - - - SPE: Emitter pooling - - - - - -

                      Click mouse or press any key to trigger an explosion.

                      - - - - - - - - diff --git a/examples/archive/rotation.html b/examples/archive/rotation.html deleted file mode 100644 index 8222825..0000000 --- a/examples/archive/rotation.html +++ /dev/null @@ -1,277 +0,0 @@ - - - SPE: Distribution types - - - - - - - - - - - diff --git a/examples/archive/runtimeChanging.html b/examples/archive/runtimeChanging.html deleted file mode 100644 index 80bb0a6..0000000 --- a/examples/archive/runtimeChanging.html +++ /dev/null @@ -1,379 +0,0 @@ - - - - SPE: Dynamic properties - - - - - - - - - - - - - - - - diff --git a/examples/archive/style.css b/examples/archive/style.css deleted file mode 100644 index b8151f0..0000000 --- a/examples/archive/style.css +++ /dev/null @@ -1,46 +0,0 @@ -* { - margin: 0; - padding: 0; -} - -body { - color: white; - font-family: sans-serif; - overflow: hidden; - margin: 0; -} - -p { - margin: 0.2em 0; -} - -p.small { - font-size: 0.8em; -} - -.numParticles { - position: absolute; - bottom: 10px; - left: 10px; - color: white; - text-shadow: 0 0 3px rgba(0, 0, 0, 0.8); -} - -.alive-wrapper { - position: absolute; - top: 2em; - width: 25em; - left: 50%; - margin-left: -12.5em; - text-align: center; - padding: 1em; - background-color: rgba( 255, 255, 255, 0.15 ); - border-radius: 1em; - border: 1px solid rgba( 255, 255, 255, 0.3 ); -} - -#stats { - position: absolute; - top: 0; - z-index: 2; -} \ No newline at end of file diff --git a/examples/img/Corel Auto-Preserve/bullet.png b/examples/img/Corel Auto-Preserve/bullet.png deleted file mode 100644 index 8310ac5b911b86feae2e3445f08033e5a19924bb..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 662 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%0A*(L5nOHI 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 pKZeD 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 Ml2Mkfku(PX4>Ny4?EnA( diff --git a/examples/img/Corel Auto-Preserve/flames.jpg b/examples/img/Corel Auto-Preserve/flames.jpg deleted file mode 100644 index 5f36e642d90409033f38502d87700448df9469d0..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 742500 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 ew}Qjl^(TV4FvxH5^Y6SqEag} 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

                      e~A*nDeA7 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�lYHV{SoB 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

                      i<-ie_W8>To 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 qD@zlgKsnN#_>cqoH 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

                      AT!=j<6ke^k`i^0ibx4`@1L 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%0D>wQ0uWm5{dSjaL9NO^k#uJR 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 diff --git a/examples/img/Corel Auto-Preserve/smokeparticle.png b/examples/img/Corel Auto-Preserve/smokeparticle.png deleted file mode 100644 index 7bad8c685f636179ff1ce401869188bae2d2225a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 15427 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 diff --git a/examples/img/Corel Auto-Preserve/smokeparticle_2.png b/examples/img/Corel Auto-Preserve/smokeparticle_2.png deleted file mode 100644 index 723d87ed2edd4f01f1be9111797e5fb16e2db7c1..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 31377 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 diff --git a/examples/img/Corel Auto-Preserve/sprite-1x4.jpg b/examples/img/Corel Auto-Preserve/sprite-1x4.jpg deleted file mode 100644 index 38e9dc3fc052bbf28441a61258f321d416d1fa15..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 11798 zcmbVy1z1&Gx9-}(X4BoZ>F!3QJES|LrMnvhL_!+r21!AXR!IRxK{^B^rBtL95boak z|KInWbMNu~&lwNAyladx=Nx0qxz?U@ZLa68R{?T`07rWOP*LFk;K1K<{TU#T_qA~j z1V8{3skQ}x>osg66*;*(S~{AFD(VUV2m}Dw%Ic18?qGZXaCP(X(ovE{7#W)&&_@9< zfC0b&egLqt@%GTrRn$Xut)d`@@J2fQJq)sU;B*Fs05Hj|tc5`Q!}gz00viu69{>Pp zA)N(n?YwP}JQ~Se{Czx7`fo^1Z0(HVU{oH&UdRBEoE*jP{^nf2e13Cj6t{JCL*@%c z#q440YK!6nNFL|sYlq|zbtI4VbF}kE@+l-|a`AO_MDp)QPV8!DUF>{( zxV5ZooUOcU5pwRX9#(FF$cg!tGpZFph^j3DS!5A@aS;)20Ul)e|B^o%|ML1XLCx)N zk0b40a|R-P`?v1zwtwr~O94Ra1X-Juzjf9*0MHf#0OSjQ>zIlG052K)<5Fl(y_C*^Rjb84rPE`WsYulk<;yF>*(X??uKx5`=4g` zf7$FGF`(%0b&VuM^umFfzA<_c+Yu?l`3;@)fXGpj8d)*^B z(*6to3xJc6mtb$ly9kt8PDc-6ddf1!w>!fCmr*6aX#22(SU%fB+y0+yJBj z1wa+h1oQx7zyh!V8~|6q3-AX*fJh(~NB~lROduC10?L7E;0e$Kv;oh7USJRy0p0`C zzz1Lj*aY@~Z@?*V0Rn;0K{y~H5Cw=1#0=sD34p{vk{|_;I!Fg(46+2>1-XHIK_Q@f zpaf7FC>K-$ss=p;b%1(7uR-IWdC)3o2XqKJ2SdQvU}7*0m<7xW76Z$G)xdgSbMRfT zCpZWk4SopD2A6{Cz^&k3@CbMsyaL_>pFjWz7K9W+58;N0LF6Es5EF4(D*`JUs}XA$YZdDUHX$|#wj8z@wlDTW?8n$W*z?#&I5;>gIMO&K zI6gQJajJ3pah7qu;}YTW;Hu!-;)dhq;kM#V;C{u!z+=Xf!Lz^%!pp*I#v8-?jE{lO zf-i?}g&&5Whu?uei+@5uM8Hp=N#IJ5NKixYnqZp{osfl4fzXyPny`$ppKzTBLc~ZU zM`S~EkEopJ711U!jF^>Jh1iKWfw-P{l=vG7A&C%)0Z9N!9?1)m6;cQ(3#kgJ3u!WG z6X^`;IT;O^44EC-1F|P%6J%%PROHg+cI5Ho4dm10=M)GE1qx@1REjo=B}ynI2c21E6UGQ#8fw^Y^dU?ny412!PFeoI@H0`Wz=t}PiSaqlxRF?a%lQ#KGTxYO4B;g zX3)N*-Jv6*lcaN`%b@F~+eMHdWDqWhY{UTK8$C6>GQBT-3H>Pj1p_OCK0_2k1H%#{ zCZiamJ!1xAALBPBIwlRK5T;tD1!fFpF=hwmN6bUaXDqBNhAj74+E}(($yrrcgIH@> z7uj&wq}V*!O4+8^VeDe;&g=#3?>WF6!W<49c^qS$U``QEN6rGyaV|72aV|HmQm$EU zY;GBDKki!YRUT3vb)G1mHlDA%OuQz%sk}qHSA4>JE_~&DANUFRRr#a%JNXX^{?1T!1=7foaHH7aA_X+SVsk^2vJ1w#c5zNyvrD^~giymE_~)M->Pa z^c8XymK7Nk?<&?Rep3=w3Rdb-MpIT(PF0>&p;56>saE->DykZ)I-rKFrmL2#wx-UZ z?xo(T0oG8}NY_}r&3xPKcAF-ksiK*#xunIa<*C)B4b#@r&eQ&+!><#fGo(wTdq=lM z_f$_-FIn${KAXO;exCuJftf+I!I`1FVVdEJ5wB6G(TFjnv7>Rj3A%}aNu|k&se);y z>86>mS*+QNIjebq`D+VG3m1zQcku35-D$Q&voy4v?{eau~xCpxBg}$XY


                      OU7-R?t-+)TaoW%G^k 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 diff --git a/examples/img/Corel Auto-Preserve/sprite-3x3.jpg b/examples/img/Corel Auto-Preserve/sprite-3x3.jpg deleted file mode 100644 index ec23489d5f45d85a79e863366462b30e16a551e4..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 39125 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∋*)iyNiq$(-=W9%p#+WTjTJe7*|-9uwYv2 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 Dfr1=2 diff --git a/examples/img/Corel Auto-Preserve/sprite-4x1.jpg b/examples/img/Corel Auto-Preserve/sprite-4x1.jpg deleted file mode 100644 index c30b196b8f0eedcd00585870056c177eb4bff3a5..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 12054 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�O{?vJqsvv=C)Y}h^KsSQa0>Vzft`B--MGTMQaM0g;s2R8Utcq@+A3GbYfiQJ z<$`U&W}CJBlz6By0=5ndrb$j}DKM~;7;+)NCO4o3;uyg&)X zG%rNX|4RbxYH-%IR;r>(Xc&cxD6kO*zFK=FqEGzJIq4KCcp+**!BN zrfTfRMBl2 z_-JJW$0*a7OBDgsD@8b!Gkg&E$%-thtdBbo|aRjSwTC6mYd=@Hrt~dPo|9L zIs5Yz*Hi2!ia4I|%B`4&kbLoW%IlN2ekYZCu?t|ymt5*7HtLF2-70$nZ4>4Gk;Z*fe+|qCg2egJm7+;=nWg>Weq>)Nc z^DJ(SbFNQ8Dn+3blbVYq49Bek%U0}93a-3G9o&omt`0uXcR1d1m}^15VPSg~eD)YL zGSCy46yS&VO#Av3o}wB{U5&3*Wrp@Wfib8^qE>w_E5FoF%i3_NV5}KlpKvR&X$20i z4Kj2Nlf2;8T(CWdsNrxh&Db5J+!$(Xr8pSneETh|g1))mxzvFYu;@w7w;hIQLEE#5 zEy-d%D0>*?!7q+lI&5Fv;NjXb1=dWHzJ*vV>JF*cqi<8D_{-lWK`0%a_Mmau6H7 zy_4|zLB{2S3||QjGRabCVF|cBEq-tU{Qm4OvIU=Bge1!tI02i@s;6zqgXUrdFsUxz zuN3flWdPmEncI~CELE@jl|o(w9;)8IU6DhtBF_wx19&xoTQQ_C+|9V17((CS>bT%e z0!e1T64*-tlhk0RhR9WHk28c2+??sRO#qQCSq}sk+BO-2?Wy7TvWI;vf~Qx&k1GeK zBJ(@tA^`2m2^v*hY+e!L$?wZ{vr2b%_1vqK4p+;+Wdv9E;H&$1zQJ*KK&PsaOsK(vs}V za^|td0v3{@+`QiP!2N60Ct6iNZ&o(GS3O>?yy=5gVC)0mezO$9d9cQn4}~T6+(5&D zg95g4qIt>-J1NV7#!}!p4$@Uj3sIJZY99aQ<#Nuu5-K8F5jl!+nsa^p_V8y0d`s}e zf?$>zra6R`CUk9%FSu|g1y8}TC!iix0j*ov{@w94l^?8Dubl)gR>{y-#RD~1&`{*y z+hrYaD~GyYZX76l%p~L6yD^!isL7OC;E+2uIpDj3)pp2>TV>7ne8*+I>2j>?a%Y^< za24Cr;s+zZ?^i<06`X4;Fa>Fr6Q`1uCl=s|jeF`mvda1%sIncqBDz-f`)>Vj@2+W8 zgDASnbN+6=HAhy7W>!7L|Ik{1T> z!fsBi;l{Lh+XMhmvjh*fB&inI0@iu~;erG07PO;^z_>>jE7fCNWrD5B=^NExi!%M^ zcJ=-{72faOqaUx**$l1?;2<=}Q@Ls;p;T z1%f5uTxA1xrIX8*ueg;BEmwc8lGK-c_FYY#i_1C(-PPx8)Y}h ztsAh`xMwEVsBHQ!w)55Fs3O9{DlqO;?^`W(X1S2uDI4d58XT%}rF>c-T}3?AWJckt z0_j+IzM|n<1fEMfu-NE&eDq|Ul?8|8x`inO!z9I)hMFVaIsr-nE0G08;0aA^6unNs z#)TT3s(Rg+SESXwXT>wBjK1@IS8r7Ve6k{dz3TIKDq=_~Z)rQxH`P-iUNg-%Bl8ZG#l54(lCu2C% zT=Fbb(=JnY?yh13hG3irU8mSq4(LoF)HAYa+Wo)z30X*MIn&NQd)S=b_{*$7!} z*le~kF0>td+bSEjZAgopR5^GQgueUM3DA;)j;|29z*Q2h!Ll75T5urFVZBw=a{Mau zam!Ub{L0YnYHHi8t~jkg-?*niv0q)|JCy+>RRk%j_gm#&$wnKtQ=}Fs-=W#Eacs>f z&lnCf)h0hWi)|=8?%Bu%lXtpU1Y<+IaxXF z-HgYt{{K#ep=x-g>JcNa4E&%f5iC>&@~gnNs`qbIhEo}g&Y)=3*K_E#T((9TsWwz*cvd+_yPEE=S0wNW;0qNI_>~^U@Wx@eWhxY~J0smr zm}#&bgWIeVh7P?*v+To0M{>5~kr#%In&QqV#jzy5t)M8VyOJAkkpPSVOBhysL0lO2 zVoh8~e)4>mdPhLtfs6fehl?BDQ_5JYh#;?YkXEIUq_Y32=Evg|-k%44uL=xK`Q_;d zUYx*qR%ZYEQ^M2`&try}#IqH~^JqnIs%=9Z>5Y+Z1m4YucE8I2$K-|h)Z6MKQ^xKFmy7iDp`W|Z!H%kIMyIdK%ss?*j6*uQqy(6!P zZTX%R;Jf_^ZdDiRRT*Dgk!bqniYUdKP1T(meB(Q)Ea1iD&(Xlkd)ZqiKt~CBfnqn-BuG44@~M*{7rQp{Q~)Ph z&^cd?x2}k-Ue)?e0>5=nUH5L5f2-2RVYL$cwd%R8>KfBZ7qV;)zBvQefu@I*X@Y6N z&BL6yu-Mw2u;S;S4MkDji8)I&8&1KvFhn&QjKL@i+x2;AYxb7#hmIt$74tmj`V1z8 z;8!m-dHT_Id3T?6A69E%8IVPV-KlKW2EJ6;f>#k=yCT8Y?`aj;trkRHsr+YH5{1%b zyH(AB75-0l)xtS+G6V#Mym}FPF2YgEZO&_YU2JI%A z4Jb>X`)&Z+cA?|vOH!^i>D4UBzcr--2;@49<(c?JnGzZoJmxAaO6HuKF>Efw`Iwt8 z4M?<@wgLVuL?va^Pep_l2P`TXk)q>z2@M+-)=Et8yG+B!$AzXqqG$}_jByBSbpC(^-&CnHk#O~gEgIfuwLL#TwG#%t z&tKvEW<^+i-H|etqztLN=wtcwWw{Ow`TMrCc3mlJTNaGI27F6ijHl)IWBI<8JV>!z zmogj$1fE7I3NeF($pB`7hi4cN#;hs<-`okQl?{wcLr)V1vji`V`MD?B{P7!)N1Yy} zf}wY@Rc5_y^Pm6Z7MB+_n782G2rjgs)RZZVaiOr2=epJldA~dbQjzlgO=%=<$hEmG z|6Y~*o~H*gX)tUUhTNK&n2yhq0k$8p-_b~tl&0dcS}_PUm0M{-$xKK$8?2ftlUpuf znmx7waH5n4j>472DkVSU{Av@kYC&^O^uN2(@NdsaCEb^MUy(U2UCI{9=NnS?c^UTp zu3Ve{p^zKQAyE<@wzLdO74iEQyWE+oD51`}7NaW`V<*JP6qHOQh+;0*6z(J$TFE3$ z!B=%+OC#v{k1cwDvgRp*;IL>Gvm`&n_%m3djubzhs}oE|7B^=@5^(4OQyTZ zQm#><82BFn|5Tot`#hZ4R#oMF3Pl@eRfDkwVHxw;O>GrZbUtr;mu-Zsq**=aIImmQrG#&R)awhP(AQrp$ymO1Qw7?9^#f1 zq%SSsFU!z(S1N)}%GX{6UXz|*o)_DbN}(a2za#TQk-PvEp)}(VZg=rrms*5KNLKsgy>Ls1nEVFED%r8|)+>~_1MsI1frhSH!2>m^#_r2SrY$#k? zsqz!o7WwI?7P-DyL0@dbgMDb}aO}ZWEUkC7fC4b(A#X@;XDSc)-v?fnM(|(C3lm9? zP?4{X=Be@XL&!AZn|&7bm^XSctvQSBMg=8s>3A7$k3$9l z-1jp&0c` z*F)*)_X_w}Mauu5O0VCN%0DeY=xXB3%wm!AWKOUE8M4JTEyJq^Ov4x>f#r%pwPdhj zs~mM_+#5x_(2H3tsi>yP!Cu7Kd6kl$QLS1u)9mpS;73+;t}GZ>nakk#g!oEb;F7lI z;jk;19X?(zl>4tpfTtxlR0BRM4@L3ulvHpd>GfFO_xBG=#WxiS;?4A{KDJ>HL@_6!M%_@^(BU`kB`h^WR9k$w10Z!$`%{}+0fKN+VJel`;Amv|^ zhS8HzLT&_Jm!Xj+UONVkB`eT3_E8t>RCavk>o#WSk|ha|o^j|U47`jUDR+Gh`!HtC zN+8n7GMz+KDXH-z?S1~ZKCiM;(^#$>#JhriDiKK?MG4+ICYU6g3<8!LB`ib1@yBRp!u~kn z?O}+eDV%HBOciLf4Gc?RJjs>us;T`GX$<2k7;?uyG| zOvKvUb3r%IDs@JF#KeHjH0Dx6W0>jedK%VIjG85=dm)FTh}}`lAV~4j$GiNW-ZV+$ z7)wd1m@&i2h{~`7i&ZL{^St@Oi0c>U;3S5nZXtxfB-h|)q^w^9enKj{3o+qJ8Ka~pLL-JCTr3XC{XJnYdoe8`=gr+GNhmwS~g)*B} zIPS&l&)}=Qm`;>YPg4{fo<3XSWEQZnR>hmdXrq*JRRhH=fY#sp@!9h>o)?L1m6~EJ z5!dPoPLfbsYC(4_2n)I)q+L-3#wZl9`tm&dx~y>iZ?fQXUmAeFkn1&)YnAs9J9158 z=uhBV_t|^PLtn0P`^^)U0*$*)!e%MMv=zo)!p#YMa~NZkRqPZJE91&qh3O=uR8oma z=}cnW#47aUzW3uNE>=l{h$MG;U3las<}F^n6!KVFf{v_yF8=`Khy1rxxgZhfCBc%BWbpDn4@L?* zlax4B=~*VjeUCG16+U&Lf>u$m%#8jZg{nz;5@1C!U$_@NviJA7CmPsEf*!+P|M9b& zT`(wxA)8N?MbGNli0hxP!RI!mwU+H$*izYjQ7Sh@D*7)0^N}NhZAm(b-sS!@IuGuT1%x}GDs^5tre4DKg1{-xM@N-jj=3+ zdTjFYtw&=A_}Obs%4vkAWEh&p*~Kc$2GsotBp!?947ZfRPc}qoMpqu-W#AtI|4tt4 zJn#EY<@f(W%DyHI<6o1Z@4CDc`%($s7Oyude?4>4EEvA_zsJcqKTB2Ri==FwN zt_8$?$d|u$$WMKG3(hqJUW9EaS1gs_u}lF~fd5mT|9>O*c(ITtRAj{PElx=?HbjKf zQ=y;ISSj&fGR9Cset*y7i-!^GlNrt3jB%`SJoPzp5;p5P^D7l@I2r9^%;p)JR8{cQ z26e;0n#HGuhWC-*Ai>n2R5Gw_i;cMwpI=uvIyh$a+OoLPD{Z*8RscS)%2dy?Omiht z5By`P1M-kJFZ5lO-~T-Dh11TFatt@8aK|IMH|CpnMl5eN`1YMXx&wD6DRoQ38zsz{ zaNxkij~N9S+M>nEe1kW;4%6L$Pd&H5w9zD*=;-z%cz~*^^0z;{$Z9ELy#n=y!Uapi zSgOJ&+oCt-A-LHB{vPlRDbT)DZqLd?{f7Li6tG`KFt8`#4-M%FAr}F8nD&Gh`Q@9? z&|&1jLW}+TeZJ9m*cnB9_FS22txW0#Y_3A$>nKTzmw_`CJ;G*WJ+kEoD62ZFWsN76 zZOU3e9RtHi1>^0u3GFs~&IEo{R(91wapyI8v2V)5@U)cs%hLK8r|nL>F2m<_SusOi zoJfYmF_a#_&4?G?=wQuUlxe`7slw}%go$Z_9y3#QuAgb~y@A7WGUVb$g*1xjxeA>? zrQ?;zR0@TN_wanr)-X_*vvfXkxx$t0CaZ>yLCD%C7r_ibaoPI6t^@xE@K2;t%X?tI zDi5|yU+^ip$B~rvt~3N!=sRMD{wg|+26*1#o0p;onMS2g~>mmRj8 zjO(9S!*ex~VMe2+N#pYFkLQ+j=B$h~gtewlZN0)`q|h?qZji7X3^Dg3__hBD?AJJD zajMENHkPt{M9TPUz<)0dU`ww5u3V?KT*I4%YH=B67U>snpw5?w;)JbLlc_i5qnjoN z$1$ZH2;!K!sbJ^^%QcO~d7JLgBSJ^jGA=Hb`1WqXZ+?BmXFk(rqFSInLMz;}TQz>} z=>?Q1<%xNnPyEa__R}rFQ1Qf;py$Ds8`_YYnIqrxww_&??^uwp(WKxz1w|Ri3$h}g z_X<_jv``VdL;T`^c&6YFRCWV}?Ug3a-ydTeI%gM3oLj5&2X73hmsA#)O7s+qPHb_r zo8V;@55~zO&j|Uie{6vZt5x(k=GpZ!=RdN_T9QziE5XzAu(2dRU%jxAD>9GKl$Se{ z%5Nq^{GL>HIS6!GDEs?z{nq6A980BnB9%jg^Nk&jCIQ1q%ClEicx#;U#&L*QvM`m5 zs%^2>)@j=C8?Ve*U!5blw93e664mCIuht7;QxDa~?;xtdB%PZ* z$`?w5&?%rE_6iCAcjVc~VNrQsbQ^BH1zjH}$mn=6uH&&#E3;TFapS9RkH<8Y@&Ri%0>xWKt?ysH#S@YT~B`Cnr8; z$w0B~_f~+PxZLK))@{}-IJ;o7UR79|(_qt*`pyR&&WgIOJTZ&@GejE zUM%3ma$dlvr1D%YRLUZ$9EZRG>VAl}*dXKp0QS^S}CJw7K3TRgYNr7U_NuH$+g82Yqr8x%jCkG#nyHio@~SC&Vm|2B`$=j z%hKANk$Ie{4Dnx*hq*2fe@++nj8q6Yyd^InsS*r)BG>L|xlRXg>jr}x9woEHie+H7 zs+9GFre)A^Q=B-X*(_5rRSYFzu~Fs=Z#yhsSZA0Rc+-@6yUsuVy_ert{=fZni}MR5 zRvH$Ya|Y+?7RzOYl{0np&u@x37aNiQm8$&QdF5Wx{j(?c?VfziXQV8}9`8J4ils7C zZMlo%YFyY^R@q6#>{atKuanWL9xyfR~V6$P;BI5ET722Hu03ZNKL_t(sh1Mrq zqUiHXRm|=vwF@YQW}(X??`?0%bN{UTsuyzNOFU%zAu7Ov{L}Do!%ru2hFNkbMqb%k;)01m3lQQQl-b8`Qi zh4#jFp-Ntsd!Lh}0JlI$zf_@Ife-!1aQo}@0*!C)ObDZdwU*A%k7?^7ujghKTD?p~ z%jisFR8>P!6jD@Xp~4_haW##@6OUeZiV}M7t^j}L6X!U0c7Zh`qpD{-`}7$upRd5Y zEh;;+8Kj|*5v|bb6-(iMLMpr`rPnhr4@i+IIPdjMq~P1~_s9jwX@h3co$d>dDg^c> z=(fw~a7vV^Y|rbwc@z+15*rqVY2d{=fu|C-<{5WA>WvzA_eXs3yLaFB^8d}Bzs|*$ zjh;ko&X+lRsm-O9in3M_4eyBv{ir8}Hnk#%Gw%t$ATR%_T!V^KkQ*{I%oW20sUU6O zZ^^aDsjyy@7b*nzHq{c$g-|Es&e4d4rbb9 zkEK@|NW(UVAj`NV!+TSnAw?$1zazcDU8zK6uI`UsqiUNplYk~E4~7AD$>PGY&O1jl zP9`CiWiSpCG)-qX4H>EiZmO_%;*!n+%!i@&PcU!&JLHu2@<^`Fk4Z0AIR$nT%8sF9d6sfT z@g10SxcAaAPb`%%Jr`R|*gXtr)+#)GuEi?{V>CU*_aYQsWe}z$hQ`$K*&X;ex=wHC zGo1J+zRQ=M-+5R0|KaB@vAtZ!N>j#O%63CTQ!=&|%3OV}0ZkREmgvb}KyWt(p%`MM zgoS!Qo@cDfHMmpgb$+@~{L0Bv4rLK6CrZgjN_+)gKH|WKqh3H8kEL=7nuTqYSe+|# zIEsnYl!~1Z`4K4!QxrViz)e$jJ2SrVdWX))<#_0FcYpjI3h*=6nBQ9G*$s`CJEzNOsQGHYR)n0Px#H>e}B*C=YR4F z8)sL!a(!uhFdaed{`(S`R37FFr>~@R3m+;mk!BI85Bw?pBqn{~6 zAv`#lp{Eg{@AEHz_oerg|5tzM8P1+v;_7yjZ8c^ZCVco@gOx2?3~1`RpgM5k332A~ zkq0@MMIPe*s!V8qjZ+RdyHMD9Rqkn2Pymkf04_>}xh?;_u{b}MYtVJkIx~#TGVMq~ zRYmS+F!9(Qr>GSRN7V@ooq^-CdoW`#i<$W`K@gI79)I@TcL#y~qrdf0E}dQE!g_;7 zr&;ImQi_C0wYLTMb!a?cZK zG#vSw95=WJJIBnK8l|bn{o6w>E}E>>RhH@|UZT?JI&}L!AsVJ_qgHJ~O=sw*bO!;? zzt!Pn?9myz+&Osn2)bSHl~_4NZ4;AfuM;@ZV!On=0OuFUh1 z<&1B?al#W%)kQ@nPGPYoFo5NX7;&kmQlJNN(|oDzcjTcs;*`}yDOiXa4=1KQ^bQiK zIHbq-FkiMQ7sVAbQ}4OV4jmfXbJ&JSKZI8feRfY~bWS`bLCVP_Af9-Th5Y(&zwk(T zzhC|QQ)r>j#d(dZ7wg=;(c#HuD1EFZn!GVU4`HPN4}3AS#nh!T>la`kU75%(%P`25 zzqh3#oEGGtN+ns7O2n0GG?t0+L!nr8F+`e^8Dt@L07})w9XT-9;AooR$Iy2YI(?r` z*CS3d6f&Ht!({5Sdpvzl`Tx$(T%jI1Y_611(g@RYdFqUccD5#<9)<#@3bPb^UF3sR z#Qyms&|`VPOERzJ7K&Xfa{osKZ0Aho{6gs&=j0E%e4jL!;|}a6un<8KLXe_43FTUb zrGk^GoJRs}1|@coqGDB{~UyBrN%wwKF%_g0TP`|p1FKlPzae*Ee@t;oTzSZG0j znFW0IVuiVnt-!(@=&roOp*Xe+V)!>k4qeLGzPF{3%axxe!(FrB-A@ZjqKNlvNiQhR zEqB0=U@w4?!?NLv0%WQ{NyS!Svt`i@GTuD)$SP%$1k_ku{Lw6AFbm%I?Emz0+ib3u zSy4l}x?n#)?#{SAuk+N|IdSimRP6D|3_Jx?7pjJEjMNyc8t}7)LPoOy=FjtdN&y~} z&&kOt(0sWDIa7F7oPoPTmc5iw5YyIUs$s%#8Zlq7F={rOb&Zpui<9acc?lsZVWyDA z3B!@c>pOon-2Z_J@Doq2vs_o%T(G!m`y^(_$I20CCTzFFq_;2-vs$Z>7<@cu6fC?} z=wD0<&HkGFUYCk4l?z}>clfS66gLYYuT$u$txE-ALfIhsy&DWOmDEWwER#7S<7;mY z*y(umrV*B@V(J-Re(jL5lCXF3{*Z@He`u5KC7X?!!sR&_>oHH25`O1}BR;xTgOUZA z2TlT+BA9;-1#FqToeaQQ=9Kv>#(HhrxME2aql`VQ=lpdEu+FZ9G) za{ncs?_pY?TJRdr7mR-%1>^=&6Apwsg!@z2s6gK(3Ny5-DQ4yv33l6La5&@TZo>YF zhaaZInu0U+d2@ICNXGx-LYZ0|vc70i!9%aYi{I<<)7vJ^k1vZ(j9Da%UpEsUZ@Vn! zTDvYduDB1@9;b}v9Zs2#47ul;)D<}yaGnn~3Q>VBmE%~Po4pZbqr~OyDmRaOUbr{o z$$68?ssWjbQGpFZ;VZiVV?Sl&rS!%DL7GxCRPO(P`~L$K;MK)4+GNI4hRb=chjKE+ zF2{n2;ejvcsg(e34@65+tO_N#xKu#C=P`Y)5Z>5wbBA(qwxot1B3M%T(o>wt=b}_1 zCk0Z4ZTXzxJpTq|TPF$vq9CBIhy2b99d7jk+%UoOBMt^0LG)852sb(IZK38KfRIytP@v#pxm`q_Dit~JH0^4=LQu3D=T$)k=~8g z(5x7!8Te6#8$25O&$W4t)R}S4@K_DU1cNa(DfP&G`b_7k_zo+nOpnsU-bLLW|^f@OgRl%$Xv?a6lF5wnKLD_Oks7iA$d3* zp#;scxV}LqQUR(e=+MsCpyUki!D%t$FHxHKD2rt;^D-rhg8^qSN6n~3Q5j&`BBcx zT-Oaw*`V{r|10Pht?MXSN^h#L-ZuE;^?9NA>;#Tn(S~WL zVm{3z6vKNIO?YR@T%pBLD?|Z##N*4m5XiO3S&%w~PvaH}Lpf>aSa1P4Dc=17|K{}> zFFtU1`(VaiXUwGMGnqtu6_hdW0OH}@XR`@1wJ#$B9UvRN&w*kuK0221lM zA6cr1K3@`WLI@Jkju;!l7|c8|{Jdg`>2}1B9Dl1cH{N9^m?hXRJ`5JiJ z*Fq9FlZozBdIn#U!sc^B=H=zkIh~VnU%c;y+r03g&&xOa)NtABq_j1K-@P5so5rLc za0;fL_#~l@U9%xoIhsYJ8hr0-9iD8Pu&%?tAsWeBreG$XO@&vy*+F<8VWH|RSdcI5aDmzgo!6ENKlb@FgfFy zQUMN8m!a{OIVB1`DCEaBC2HVb%lF*klu|z*BRYkJ1!#3Szg*_+9fv=;qwreUwixp;WOv}nBnHrsANa|zaFu_`0fq4b)jzv4-k`0O~a>Jt- zZaAW6b?D1J*u42a=d)apMX*oH{oa#CeIy-$Uj%+zD$0D0OzAWQbisr;z&`TnO^&IW zFxD+@j3T~#D`2B(^Cve(IEDRJRrTRW&v)(fKV#xX8DlqPFpUWfg@&nNWf@zB2vf72 z5y~VJ1rRqB-e9H)B{y~9wMZDKO$BhKC5{v- zio(@7lfz!XnTEk!twcFY&|9Whgd`A^(6t4qrb5`IJefT&pCPAX@S0K)=51oR{_RU| zCoc>P>u{JR@D{+2wPxBLoZdv_OvV2B!?l6TvxY&GEf&3^^J`I9`Z4XQJsEMv|~M zO?kZ&@cpO${qDi#)iSmMTP=h3g29#vyC(s*qL4)?nxC;d4p}_Y60FZ?0s&$8plcAR zf(Nh{Lq7&5gYAk)kvyCceNDV&aiD4zxyuN?Xm#Z?sLUFH8P9$=rio>E!RxVKVf!SJzESZ#qnN@1c3>hIYU z`aU>{U@3|7GIps@+0Cnb6S>(r93-y<9dJqkl+Q=a`2%&iAbBomPF$XjN9V0WUcNcN z%OFF+E@`|tj2MS0KgPx!*EbQ$lP5er{gna27C0;c99?y&~wiY+y@) zM1}JWh&!O?c)pzBH&1BCg?`T=r=t;Ph2n@-0M9lGIZ{U&fU^L^uN-qc@d;B6ci>}` zHO4dOcq#D*T!4DjLJuQW7j)vSDrJ9yGSm2}Mn-2m#Yrt(%VVo;3*~QHFdV?mi5TBF zuZY>LuAB+-(1RHk!odTn`0f>&{$2TdPb#{+mFy0u)8Qkr>uY@K`XcY#KZFyP z!!RRDGVY8Mq7UHyCx$`8R;Z{cOKWAyi#po9kTWYPm)Z&sjsm8s#&XL-xjzxDn3@82 zI-)REtAZ{2)OQgBd`@&&j|=$F92uZWk1y{Nt`vwMx`o1_D>0IK;cRR`E8)qX{WxE} z`z7|qQ~ZI?i3e$-(48hE-zWZ~7=TRCF%1PRNtth1bOMj9mO)L2t(MNNn^LV+a0Vfj zN-X4$0s(UqY)_VO=u# zram-nVf|AR?#^IoQ_739WOktqYQX8FxLE-Vo)3j-oMN6%4q$Oj<~}v){RO}t(Qm!Q zAK&cr#-YPIM*)35!%`F`Zc31RaP=Rn29~KZ8^zR4Cd6utGmANn0bNHo43?D$LK8OX zP>Z2ff|&}fOpsG-tO&&)M$!Px3M2^0_f`2ua=+t3aVRWwkhC}@RXtZoo_Be3Z_KN` zfF0k&b37)Qik+$48HA60`2n84JLU6N=Ww$OZ{IHB=Kl85wHy+h#Y8_MXlgrUwnQR77Lv)cA+Yqo$>_qW07CKn9q}z5Tp4s zV8(1+Ym)r&171IxF`9^QyJV>-k4g6a19O03q+%E*lPF*~jHt}ptgcky$z@nrhIt8l z(GQ{D6&GMw1Je+V>aH)8;zQiiDyQTBdQuVOeZFxa&(V{YA}^UMh44U9XZL+>9nP4{ zGQM*^plYeK>pFvJiW{Xrl=2hr)v-z%!@$QMCmdTAsjkvXRVunpD@)<-6qaJ>dt&<4 zc|-7|hl-eA5S+krtI*L>DL_7Q7)pNd=L$*hoFxY_U-ltWc3mEjI&ehKiFkW&%x``5 zh{-IZW^2?-D#w%Lu@C-VQvQlUrL1FWDN{E?F?A}I%0ZN{-7FI-2Bn3X_-v`9YHz4e ztq6WbM}>QmviynslB)%XLsm$2(P&X-{>DI8Nr}#n4Ttyd|;^>3#ecOVDp`h9Z{ZM7jGPySmshBB7*<>6?Xr2RUQ-u4L4@*sf z1PD{%1s%E&1aPSgreDZ!=GEAr`+;1ib>Upt zA?jwv=Jq__y47XkC8Sx#yrPh#KLQ1K(D(T8iUF$1Ze}qX1lVPZ+3S~uD zx;W10jUo=E<@;fjA3)%^=yerrlLxWRd=hfLX);u8)*DsP0=3-~EpWyJJQuR6P=pN~ z?jC?)Lwf>74uO$j8%>$u^$V4*oEas*BuPOz*itd(muL@O?vN4@Cow1EfFMjM8!Dq& zLT4QQP;1cXPpLF?{D#R6*)IuqC{9Q;uMDlro0Vs|DysucO2xkB>14$%=We(3>w_j{Zij+nSHDj7+f z5vKf52B0(a(CQjJ(||PQB#Mc`l#2~`wgCe-X{j?U5Hv zSk`0_WL}=@dcn)h!`*VBRZgzUYjO=n8hp$wUR&9l@&N!gSrac0XP~Q1p=EDc%lLt1>h$z zpTk~Sg$+N3uqQl5F=va1)KHlm2!5PEO)YGZatau|Js|5$d2rUw7W=GAn?CCH^r{AufwtT2(>BG&#}25Wet$Ge*WM_XoUwZ_Ln%XqI&9 zmhtfLf6z5ptcc+}UX+n#3X!fd_CV2ee(~8kR8%Ua#nG`#dl*8;hpGdsrYHtgWOv81 zC91*;87T7wXh%iBXY{xLgrA(|fW0Y9VyQd~sF%R5@NhVoRfbzLdVhR_$w`lczQbX6 zMw~#!&`B~Fc`<34K6df%XqK>4(J31$Zj_N)DsHII_u+{}14GwH6b;2TINKR z20k=G0f^Tl(G_%M5gL{#5Y0_R7;USIKoj!DZ(O_{Hi$;T$3d9po zOR(RA;~`+oImBNHdfSYPw3ti5^S-ckKl>RTW)TDQghM3XU7`?HfZTn$7-6 z$mN|AICg~!yu zI7sCLzO~DjzT4;CkxSLodE#9W^gq6N^ z3>&(r^o0prX+k#wtpcSQEN&H`E4O5qM@29hD|v`7lilH1z(~@Xuz-yQr}SY}Svgce z^C|f$c98Jm{V8djQ86@b^_(Bc8dMB1PP1xgq-jb&$Z%tgQMu06`Z9CpH{nbh+Pdg| znPlKZupdetor=)_ZUk#FT42mK~wYol>EsL%gRfUUnFf@3%19!%P(Yaj~{!h6o z^g@3o+G~kL^Q`9tNfBJZH zUfxv!cD;lf!SSS?$ zz`9Ik=iy&NCir7Iwhi zkM2`eQvUq@gdg?eV3x3A>r^y_w@*T1KjF7t8Stf-_WAiwU1I0$W0D((w0s{nnxLDY z>oD>KNPKkx^fD~2%FupPQ0R(CkSmI0(UOWV3Bjuh*59Tg@<^q!2!q3Y@!H52Rd-Y# zygA}8-t1A=GQPe${gKJuaTC@nI!T(bKaQC=F@Jb#MyqUL*6TQ-hTR)eaa;-8stRv# z7e+7+p>7EUqPB&n;JeU| zU=$GFJYg~pdE>#9C`@ST8P6ZNKN9&jss>(|(RD-w@bz7vy>Z0H&$ZC%4c5+`p|w5- zOI1iF0t}pFq9dejgYV1PnN3)z!<+lUIQTPI)I{ZY=!m(wn#`kxBNzu@S3$MmrYiu& z8Uk)sEyK+txN!nUE~*jpum0pd-4ll>NXX)hhL&-26#Y=LH%*N+%@_q4vmoJxBLN^@ zshN!26kFA3=mrCjCHZX9xWFyhNE@3FHxBAmE5L55An*ABhMmic`N zQI|>@wwiI`CL~G1SME>v`t3f?Eb8D#ymK7Dk;ih7ibm~{DufuOP^z4w!Wn?m5yOoi zmh}teeocBqK`OkdrQG#*#Uaov(Rz1q40n9K^kR?SzBT1P)MIBFvtHKdc?n^Zav+n- zS`ecK5xc!9eaGkgP`2`1se|vpRELvDRK?a+Q1blWSoBI7It)WOH=!^ZP-}@2e?NxZ zp)3r~1h#S(iu{^tfR{1(jaT@}TO;;*9y^nWj+gvMWuG%uECqUAj31?R{EQn%GisW` zxwSd=$3A*zM62tF!3H-Vcocw&)y+e3mx;SYD5ADQe6rb1nZQIPObVQ~CvvxMC& zGqP&T`V-c41p-HOK1~8}beN`~E3n!SYv5S$#0tbyVbJzxaC-th4=%JNmM(>ZsR;Qi zEulPpAF5T@T!fMd{X`Vlx)JKY;pMlw+&%DcdJa_$!c61e{|MG##a3CdAW0Lx+dHi$ zw@WH18EUmcWqX-(n+>$(8q7Kn$FM#J$38R^v3E;tu;+yVSggTGUnsIW6X>`iLa0mV zOQH&gr>w%lqQDgPVrW&tQp8MPM}-%MaQg&*6ksb6zxfx(9QOiLKW53+IriZGEdJ3e zz_tM^w!&&DBTC?|BV6o;sj^+mNKpuajCXDaTn!{%ODRLM3TIcv#y&U!FNIfoa5kqy z$|;m&{C_-#IYkUWS+Gp@b(02;PZzs^>}9(^FlZHk;}bUQduxz*~*xP83(?Q z{f+$zZ9Qe#)OhE9m*b&}e&RDX3&deJ3{VXC@P-)OsWqVI!tn&|4q&+k^9Hm^!fRCJ zK1;Mw8+W-&)%EGTAE$=eZM_@^O?_`@2$D3s;h@; zlFcSt5>1H~9ovcpTegEta2yCh0>kmE9~{7baU#G#;J^<~tO!AXD2S(6N(51$B2kn? zQ55H9v%7k%uDR}f=JQQ^?>v0Bn{Ani*xl76o2msI+^U0naL<2#YybBe_o|xKv!HRU z>q*Y6)O_{klu#*t`Hcr-{q8Oul^66v#f{l_4%NG}nhPrl+v_bl!!EDf9MfG^wDy-! z2hBkAiER$6N!?ho{T_^_CstwI?17GHT>7gk&AK=RujJr#a{!Jt9FCi-##9QuVPhlR zn8OmPS}~hBuDvnh>$jKWrQo=N|Kn!;FbO5`%ZwbOe}?07^4}6g6&MQkt!DRoXUanHTP$Zwt}0t zN_tk3^wN`uwrt8}?$;;vo@Han2-C#2f~2tuMoZXRG_jB1B!uu}3%bMa#7m z+Ib=;nk&MrgrmAq=xaw12v|(u&Jtn?8!f2wW|ZhsG;1(*@YQkCX1N(Ov7eo=i784C zdq?o<625WBFMeT=6ix6I4HUv;qjaRc=KsSNa819Tu>YmHyH3nW?z}*R$ zuxU3;>ZZrGl{8jXs^I>T>2b*~efg08{gnw{8$DS3$EBkiX?EYjZg{jG;GJ!T&1W$| z67kLJNBo;F-Dh!_b18|MiEx(&&0)7tO-%6iwAs&91a|(92O9tv=Ak>F$!NT;kn)B#_2B|!#xK_75~H6ru?VBeEs`Ees9%B6^>4%`Q~B8 z-GyT{mdtC9MR0E^*l0`Iy_iX>!|Nl9y*Ht}GiCqAgwe|f^tU#fu)z2v+gV%q;slI^ z>kAlL7|UkhO&m5R|Dl7vXr`bsh0pB6S4Plb3O3^AR+*V>tfr2J&)xKptEm0hy+m8MAeXx4Oz2taA*#f{s)E8w7LF4M?FqYsLv zeXOUNgvp|8DlGyDpLv~Y&+YQ}K68)%?HhaV-*bN(_LdQ3rg2in^MbFxv(E62e! zClv*YZ?ZPdmo35Wq+-Nn^luM%|h5+vbZ_NR1V6p zx$bOt3bUfojVl|CXAlV9xL@#J{L1wQg7r;b?0u6D^)y#D+x&O`-XrX+7obYGJz`!< zjw-0FXLYSbI?%8YlD~Gu?SU?Z*1s4w?>=dD$e-x+j73mnO|s zV^(uCDfkCpnDS3P|NYm4vmL``D_~aEBv^*Mh>eaREtUjYv(YxRl9bTE&HX8N=QSTa zy~f{otPNM9rf&9&C-ZGKgN7_Gw@KOpd13`Vmp8Dz6vGULiNKs{L*F)*(0$t^ ziw0q18Qjcq6U(i+=6A0j@jriS$?v{={6mHLW7`q!c8Elg;Mf~4sJ-AzcboX^FaP;f z{^M=WQ6VUeVdOzb&$&&5X~%FnYC3B6d}AS=GmR&3uVVJayOb`#YsJ?OmVEjbZ~Q>9 zUTAA}TAI(@X=*Nid?R491+@whp5PU^4WX*#?iXyiy9HG~jgC5G%C*sIu%JWuVU-1DB_yHW59zqS8?#{S`zh-X(df9I(d{a(WDnWrTS z?$~#KO1|*o0m4XL zoYegOtskv5`Kk4U3yJ5`I}v|41C<$Mpc&{IS$T9-^Tb*RJ;QUmHNW=lIluMFvMCl z>G2m%8G1pQwS<5)x5)`FEc*V7YlF#3m@DD%t;EjMEI061? zmw$gVqLz~1xV`vOh5MO)z$exMZsyQV6_rwKcSG{h@$&5naUhrjzy8{f=DPfyiwXBD zNw;grh2~UO(KV8=DA-H{MQV6uRPn`I6~A$9{3C_^KRF$N(zrOuJvVMxv5`n3BRMEMzkg@`fq%$<(tL`K4+9i};~HKV6+AVF=tmN*1fRV*|B=N0=KE4g z9`72?B$7qx_<#1kbGPBss}T;t*Y=j*^ICooLBOC)Z=nB$6^OIQE7lR0uq&fjAD) zO7X^|<0$FloBZgb#4EDje^IA5zad_ux>16VX1Y1QWCr)(#=4o*CsWujLHub{_o{`ZFVAJ zCD6hXN?4OM^U{G1@UkHgtpwBB^YW-7|1LAH-z)y_`98q!ReGI-PHISuBrhFO3cLp) z#9ObQ+=_4lyl^DcSOK%zq7^tDB7=ZYUQs!Z@il=I9GCwtcp=0C8;0~?NM9hOU}M-~ zb0x*sHAU@_Lc-hde`qbi0!mAif>1ar4~x3SC?JRtTCuD>v4W7A-Tb@b{9#;!&?vT7 z+ib6;6h%etnzL4jh7`BE5v@Q`A!(%=tpr+FYG7$Cp%R2iidGV@1T7_Swq{cOaN`FE z1C95demiD+tyzQFyu>=*!rzTG!_+XXJW5MCsYXi>Gh)$z-YzRT8BY9X0;nKTU1!*ky6r4G+C(ez_NCjK+%phQhEfQ!huqaci4(G!z93Z zIQTB3AKu(k?{*FJgHn6|B?Xtx4(YT*#(N_=Nsd;M`{M%dJb{*cc)QK@-6<ru{9yNbIb%l^XBQI@@BGxhATp5oib)d}eDSeHL&x8P0eaiEb>@ad19WlnS5 zk@22EtEQ+O2h##A1RL#u{bh{@qDKl}3=UHbiu?TrpI=b4RWtj$YSaZDC9lSRd9W++Na={(X3y22nLMVNr8JXL9t z-g7w5nV$?Cb5%t*klbGU@ZtyPC5E$`J=Qilc&VtB0f);*ca#!r!~*XG_rJ?Q_`|RV1P~j^W-p@OYtdV2QF=j* z;PCc7!*rzG!yz(63sNP-kQzxLlFaf z^Wm>_Vm5{?o_XpNGv~27V0JLWp{OmyS|O$2>Q-YNde!3I@q#2#gkeA^9ec+$y+onB zA@PpX2#%JHN!9#&Fi3dTcwWgBi@e4GS*Tc6j_IQ0%66OW)s*9L!Ixh<`o1c^mV(E3 zx~y+>30fgu2#^}@4=8PO33L)@Hd>lqra8Tl@r~kJS~GW!eyEsMj=f2V^&agVZ4Gzc zviu-WlFO$$R8`F~uUYQ~*vcZkBa026ec?~OH}YM(z;7zQ6mV%Z<k za+X91`hlb!C?ccSSWUPvh?rKM^PENOD5Bt{xIQ6Pq94+XtyI)GDR9_)>{#Y5}fO3 zE@p=Fy@*tScaFA}3`5E3Oj1~n15R(Y*a$oep&7KAwK7_PfFLq-)1ZkbX-TZ$qi5Un zGQ-XH>G=yGcx0gIgo0Fi(oj%UHNDi3b^_vd$mITnUZnW&R>W2c-AuFI4tVl(#%edl zyJlp{dS-}}q8l3`Ejb%YcG>|ek>u8_Vp@5+iKZVbgi&ZEF-jr@C?!#$p&K<`h!N0= z13rAd%k#IU@1NBt1l>fj)i!wR35_I*B!O^rGELMCF?EHV=6q}?p{pG09m%j`cx)qP zeULCO9L_dGqO~FoHD@x-#X-bYtXWvW?!07H);J+(Y01)w=5LuMZ=mCVx^`5RBh*a@ zCQCvtuZEl*guJ?+zdsgWs01I{FsvpuqoZS5v1ho}LJc&py*OtjQ?xrFMd*3rQWq%| zhlfk%1|~(tiwB;|J1unO_?b1!WUnNo#UI@~W?e!#h#8f(Vf#4Z{D;o+d|}AceSYWK zA)%3U6T|&uSRJ%zN0Lu{XoJyc!J?GJMzGb5kgCgXzc_l}O0bbh)?!abJ7QH*RhHi3 zm>@~vJJX8DD3U;uWg+d@pcH)Ku@$PaMoUjO3F&rYK50Fle|h}C zH$XR5tYr#sYmk!lRFUX{czHz7YxA|;5g*wIS?dNoyAgA0C*fW$*qs%8;o1x>0$PDY zE=oSS7Vu+TN4-!ycWk(JTu?iU6`BvN#N4P9@i6Aju4Y2XsB~nZCJZEfW zFe2SZ*`Il??JZa?OT-{xRXUzs)1*pqHkC}~OI{jTtgrB`m|-mW_F+ZT4iKS2@0RS( zYm|gm5|Skbt-wbLpXV4M=orvd&foah8iA~N?#7Hix?4PO{HMAhfwv4Y4N@`)HE}4= zWgBl7xyl3TOw4B#aSx3EnnyOk9D`igu{^n;&j*?Ow$n-pe11 z1^DIyJh`ffgeQ$8tEpt5D~2McuXA3zIp^7Fc&ExWcD!`K)A>M)#l0i4(R7=xWCG9##*A=__3x4K| z=I{UX7FP$7tnG->fGAMdMb5qBl8Yb*v_Wem|fGbVA5l231s$=UnN+fAeQLoX%pbvUCP9 zWnE*Jj@w5$&u+$OA=pYiZBaAOo=iE$xnnLutQQbyF07}V+3s;?Z$VKyL=q4PM=LXU zqfk?!RWvD9`8L*tp&6~jq#TCwUBlw39TneCEiK` zUl8H>Z-2VQ)@BRs1bHACWSaZan%C|wd1j+U>S_`ycDeyZz{QrJ6$HF+Tr{4bg!Ahu zYn|rq%+NuJAPgi)E5sp)jclI1Y!ZiM?GfG+;&CT~(_i>56ZGCO0lvBUpFS0nXo+&3 zEHZ4i3@aT)Bq6pX15tCOYxu99%8(t+VBpz`p<9=Pb&V5}r#BOx-bo=-gjHkdQ0L@c zurr7-zM_`~#Df7@q{$P_sg5L%B-gI(vE4NcQ$wT-MP9PV3zE7<)s|kW85luNTeJ|Y z4`S8=%e8~*fso%br!x{Q=xG>sHA5xo8jtQo*rlVbOP*Z~`T3{XAWCM1Wo;uQEOYd< zWR{nl?x#Gu7PGP5A(R#`6h&F!jAkX#3<5`-rey1V%21J)CEcv16AHfc`j~TVO)m)u z5lm+}!q$joK`RinG?bM?ctJZ5^fSq$Ey-8zmk(s~KYJ=g2}y)wXFZ^wDNJQCS}-pK z?a1@t6~%w{Q|k~xYAregUDrfq$;)>a3|odQGCZ-J(2W%HWsUX~PRi!+3Jo{s6?L3& z@l22LWJb3ilR8ITHm+tXFlgtQ&T?d3Aze*NS(cTfa-eY}!ebn$%JKZsgL(cJx{B3A zl4(yT5cE%Hm_^C)v?2-=-oX=V0e|uF9xG3FkY2G8Ij-lPl}K@SRInN=$P*h0AG^8%rKKGU z_HqkZhQhM$Eh^B>K8^%hN&3bjW;1Rr;J6aJJgP`TP1bMIU+*)Jj>Bb*YK63wAW@R} zqC{GYt!mmKR9>*C1c3r0EqPgUf9W|thv>KC#MER|X(FR0VW3aTa1GbF}cRMhYoC15pv!3Y}=8yg+M5(h8BCF5N-Q`dYwb zyx@0UJH{3Ts-CkQ<$U|bvPM=?001BWNkl;!1=9`hjQbLYu@{_KqsnJ1JQh@gF_YA^+?o(X9$ZP*f>&NW1XnVM zzzRiOHZhReI{K-kMldNLG0-xed}=YZbj{8=yU^+3hN-0o=`dN92E!z-+B)O_*UFk306}{ zqM_Sr;&f_RP*t9le#AF!7F=CVxV##0b!&);11L)FjV)A;YF=|Hl^_L+TJYrA0Fyv$ zzc!~j5<^K>3yuoF1oY#8wZzcg>~my2+Lx?tw>f7@#)}H&OTs`?Tc|2aRYRyGVcU>| z23I?ld4<%D{e?ps&8x@Nd$#_CfPSP%3?!kUooOg7c3Bg*4M!8plWPf2pJ_3OG#5G% z^TKlDC}&1ezFEhRY57hXALm_;N;ArnKYCCj{KS~x_kNlcSJdQSxSrUDES#da^mc+Yks=wIy6 zsw|<7c?;8z8Qu*6NJ5hl?xqKYlkt4VcURF(2`&+<&k4tDQsO6 zY#P`~7%U4)3-iT-V)`85J-pvM=`h5 zi<JN3o2o#g`|D1i`t6W@)fV$oiG|t3GxMJ$XQa29cTNXImDPs*a=a8!^P&t^wb)q;BI880Qmdt{(Ff3`!n ztyxp><<}4JRl!g!SW9Z6<&qbV9KAH)Xj(GQYfRWA#k>9VG<5Cop%63!1I zUOg(`6Zxk`(hI?8Nn#YS0UcI_KMlA&s@^qzC15R*v_nA>D6IFi1BnxYVHU8Q7F^kC zbGEG*EgT=(i0JiGyoU+_LUL4;q(-xs3uNus876G@45LYbQ3jMEuS(Vu&81<;=1NLl zTT~#3IwA3L!OOdI&UQ7kykfF+thWQ&alrAsMmj-Nmej7sC=W?MVLiX~^8DSqz;6$H zUg$_RBN%3qwicvC$(dHj)yLO}Lc>;Hf$G4)A*?$XN$3QSJBR}~KR`c{(3$11B4J>_ zIj|lj0s<$9S_(`B`3#Wcg{DQ#NC-v~%hd}lE`*A&+^@Jl&e@+;bRtbCBu9&yRuU2m z$9!2*mlaCZTsx>)%M9Omhu4k2J?_;cKNPX{WNAdFtrz3}8C7 zT-q|YIoz0d_9sjBXEps)qY+FNmQ)L-^MXJ)aw~9&qN+S9P`tQbzH9OW=me5ZC~-i` zNcvg8=+b`%C!Dc5U?rXxl zuX=hYUkSM{8V~e+*tLIzXD-`{< zfh1&5JNnP`SsZ)nTH>sw6$(6#1i`JNl3u20`;wJzO4?O)5_svxF|t^a6gg#4a=tIP zIgzv@!>juXmZc?)HGy|%S5p@SM~fN(7%j+a&;R}W{9TjZo3(y}P|yjQ!v4}iJ5y*a z*<9@qw-c7Rr9x5(2@cL~#oV9PX-f3wfrw5A_5 zL9 zSz`+bs{mEzym3%)Z(ed|Y6*oSk)F2k)XOCYvl5RZihwMlc8>AV^ZH@=uE{Tyu$?M; zvBD#0C7LT+UD8&_xb{SmL}|&L`!j~C0o#ves7KmxsSl|@Uya~&0A8|sI-<9xV7i12 zf$R$gyEEcIAi5#w8tOSr1wsYXrNb*Y8e7)Wn8Z7#lZrdjg8TEP;L_lTg~M9QxNuk} zh>c=d)cl)o&fXLGNdar2APXdu(qp9O%yyd#r&owuDN0Lh5^_4$I0b=meB^ve|4a&J zQ&>&WQ3+cq=^$ZaXgD2sdSyxHOh{IjY_uX)r6Wx>!dY}wftQSm#`==RQ!Ser%3Wvq z=AAjUwcMLoY-Le^w>2KY@82r8FfdeJaJcyH1n^Gqi<8Qa^#~4fPo$c7+owKqj<}nW zwKM8P&gJbE)+ns6SY1nbW+$e9I)au&gc4#&)XsR~bcaq=kqEfZ)2xMp7|#j zm9Vp&5L(C04i^qrI|QDxc2o%NPA#jQfZu(6@&Ack zzjHGfiW({phm(Rovk_3_6*80zGtH&m5+)-!pTa1IQwD+v&c~pdm>f|BWd$7tAKL<| z=KUAP@WLUqV@MOQ0?Gn99{y~fl`kH!GBfNwKj&zF&I`vLTRTiBISWh|6$Fl6=&77z zvUCWqSm{VABugWiEvPk9>lL@O&b>UO14K}A> ze*w`PtcA;Ib11A1;a~<|nnNk54;JW_g}Mbv1v3Hb2{H&cT^6*)j(gNB#|w@Zo&Z5N zF+3t_YVX0rXj!48;Bz-i{_3L%wpPpzmi(XJoV_Q@PYYNH1q!$^wrpgQ&6Z@bSTJ1_ zoITegj2xG@GWKsCadkU|j|^a4!a~DB!a#$a!qaO|#IOg{9_~+Jx+GsZA_Wv4qPoG4 zrz2~M0B-FqDGNBL1*)jopA;m4|4ng1 zkV(&|@MtNR&n%Ns!JuWx5(!yMG_Gg`0nco;VHm=htQqpYSHMmL$pS8PA?U)r1o10( zV9`{JAK#rZ>?8!rke4&44ZFJwBJU}kWihQdnnS;`%qA6yYwF`pwglusrn7=8J6$ezTU-G^a8xMP+nU2=#nM@9={O#1;@Y#A*F;9K z)p8iwcu2KZjPs_N;7d0a@4XQE&9t}oo=^!kQ^jhcc=lXM5DIW0!;p{fw1`&%NNVVL zAc99?AO$IbPV*i+kmV=*yKJnyb(+m^T*6c5VSEV6LMdQ9Zay|HVBzTIB{vtA*QSD_ z$}tQC2*=sB;^Jz=!NQRQf`9emlE3y?My4hCvf}y_e)HP&9V>uy4(}UW!TH%^`nZXw-UUB zfANiXR}lMl>sLxaE0C;(Fe*J4Iv#3|mx7&4aMmoi)Pv#ah+(COuV!#*1#T^2Qb5na zRs>l9WT1;CG_st-(!w~Wypv;o;t|MdC~Dk9AvyuU>6Bhr6XbBZE4eYM`Q|~%jcJXu zj#vp=0cZ)zNSqg3KdyM~sN(hakokW*et(hxiIf26=x2&ddq#_jjnJ~ywrE)*XB9ub z6ViEl3r=-mQNiI7G7XQ$upL7bH*s-QHerr~CG0LZI4J0S#INx{7Gv|>d&kQi@S z>jw;4o)CxjmQOs=;@tWGF7)Ae3VGe&KP8*zeldbp0P7LtIUJO<#yR_A$L5uF!j%@Y z-7%4ex~{?11X3cFCCd`t7}YFF%c$_pr3rXKA(#}NL`eb(*T;Xd#rux4z{60`3lu2L zW~R~Bv9=PjrWKELJ^aK9TwG~fx;r^s{%gSaWckhk-4j)+00Wdj3+TbwO$ZNQy$5?o zjir>TCVm!&aJ>STQ!gA}JBE9?YeI*$=Txj&I7Jdb;4QmL&*^T!(b8gpiJh`G7RWPeOop#Kbwq|=p64rutY>B;s zE1PicFGBSOjB0p%2yC7leAS5_1hCPDa}qxMVa#?7_mAM#7`#L{4{e~YVN#){B{r{l zbzJk@q$!=SUU4Qf^y7fTg(U*Cf)@`fe(qw*#jfU5+wl7Mox6ZCdl(kn^=A-Fv%`09~GN$5s~tt7xA>6+$p04W-G_2U~M+bzv{ zJLJZ=e9r{vXbzcPC^+3#q=Ba`EnB)`Q&*f_HDp?IWe}p<8XkWPUcS{-gKTMNc~}i0 zYBhUbYq&RqtVaCU)2t0@c=ZoIGsfJ-YOuY8x#&pRf-^+dB1!{wC_qa@>LL9ZV|JK%gI5oa^l zvyd6+w_$Yw%ufPZ(aENtp1jvSA;0*947<=egg-cjQ=P_bm=~}b!Bzm{5|*BP>iE{! zGq-RmGd!`K;c8DBNXAQx(u%@K{?&^!t{qf#0?FaD#(B?`m6%uFQ$chSi+N@vW?VR0 zfne)=n}PTEqGsz%1``j11hNcfUvJ`n{Z2#j)F;dS=9{Kr)(m7uartK-fiwakA=2=zFTuo~!~l~M(tC4LneS{XV_|s= zUpZ>Lg-#5yhh79j-F(ao%u;f5>bW+mxKl!+1s6MpxrO!Auo`*hUSXwVyQ^^sMkPd{ z;mNg-)zq-l4!Aif-xU!eMAQ4dYOqcaYROt8=m((FkjJ(Mh>pQ71!1hU?wPe`^F?1F<4C3bh(TqG49UyyE&qGFw)>II20YkcFB-Xehm4 zJ5>b2H8F1~aULqAsJ!ILTFB+qh(~$>n~CD}@39i#-#P%j$9aKAaH%f|C8UvNHPxh{ zr>+IPP|*$*OK)h2n&r1|5n2mRZ@?B11TZ{_@gw2r2(FL8D)`1;qyH-*(4#yg7%B;Ew<6_$(Z2`}#E zyfLmh-8ST2atN>}@$bzofy;t+n zxMnZ+;2a-2712?SNd=*@C@m0aLRDLIU~mX7_GD9Q)-|Nkvl2K)rROMr=QoQuFQ`0R zUW*tQIJe#OGZzcXAT+#kH|OFfpCXJb93D1?z_Xihb^S#D7blzFe}@eH4AubKfzrV+ zfJ@JZ zWqUj)cNptx4#E@)?lW=#8@uI?_Mm04-;&Aj&Y5&963-N_-@T{Q(H zZspC)%8EB4&Uwx`&w0+`*%7gng4lz#rWJARMv|T{P^D%#sG;!q#&7&IgM7mAX$n$N z`>7VJcyP4|GJ$+y>jKmvD50SsmY}44KUUDg7E3R7@LP4JM@xD&j}ni^iAH%Ir=|U| zehdbK?^$kTt~I`IEA;EFkky*RQ--L>8Hj=_-IzbyO`pyHenx(@AKJjpZb0k{w30O2 z5p`eS7bVYiedyF-YXGYaxV#48s{1v{AwJ;_K+C-_$c1EFx=lN{3JYKsP^ZZK4TEnLsD@MzV)rQZ` zGZ3QBo`XT~^3bQ{Rjjvtx=o)ruUJk~JWsHy0t@L^>)?lQW6L^xx>y%DwP7#H8NV|m z@DJ?gN?GK%mfKL_LLHVR_!_1addD!HmptDpX!{CG=83QsqWDUJ?>|M z?UU>$T7NtCxjqQ#Mv~Qyh|n{Xi;9k?C@R5~V#?{FWc8I*YL`QMNVZ4IW%qT!=ccAq31Ib#1@N=gHlVo5uMNg=6>;WQWQCmMyO z7b&Vz)2b`9&@`k~8Il6>Qu5usr!;`)a{y;m;BKT?ty!^wKuJPbQI(pLMaAV_U@!FE z60Wq}A#XU(Uw0Qiak;SixsUtqH;gP26a!$z9+-z?n|K&*z(E1?3M!vLq_{sVS&ajB z=9W|%MjmykxiD-JC_y(g+**s-7=*0E5?NKuN?XNRZTLL;g1pd=a{#q*Ek-`H0?DwU zXb14s=lYE2DVHvE;l@Q+2JH%)*0|fUrwfBzF$4)5yRi7cZi_4-Xh1%LkH?S) zkSRp&(^4MYz^Y-4l7b~Z%TkaPhPtO|hnD)`d5V54xY~h+XXpy31&XCnB-*gntv$6; z&Ur`Jk0dK$MXerkp%>tnnyc$|dPr_;4G7=34$^~5JqQJ;%vN;Co%2)fSyWh8zu^qy zj(binN0!gwRAYq!6&$227MiuDPg84-GR;Y@@B@!!DexprlagU1X?RwPZnns|)|P~2 z!4Hmvyxc_rSM3K z3MIfZntl|Zg=7$GVl=)nbRyfL_u(k#$-;1<|C5oTZwzDFu}4)@43$ADLsb|;->}(l zap~$R$be{>LEu~T-ti#Hpx&`gUKr@F0XN*am;!t7a1Lb#(m<8zP-<~sWb+`D!A;ER`wTHlU;2#4YLvU(o z5x1wX5!GQ9r(ZfR-;9#EMJ{)?x`5x^<72hcQ7rgiOQ5Cfw?Rzxr8t%R~1p)`5XTemU^G z`#f~(KSK%s5`sIhyKm9Mof&+ok7opWq}iUsWRkN?D^Ai1qbnq^-Ut|U0vaqC_=Y^K zXr&1kRl&txjSmkK_7<94!^1B?K|k&Q0GfeSvTpf`(3ezI$#hZThd!IbCVo4%oRlkV zTm9XvgHAyt*jR7q44-y6;Hxei^qjM3S%*;nuVHi7Qlq9hJjrNW@6z1pP>lhK7VMN6z?dIppuT{ck&P&<9Q+GWOX~hvsiV zbPs|WJU%5E<#ZYz7h5$R94(m_@X=Ap!K7rCmZTN<7%nt@x(!J$vXq_W(rQT7J)acG zzA+B4l%4SxowCtjWupmKJ8->i{oAW`@O<#v zkZ61Lx#afScV{87G$|(l!Nva^@{i#`0;ZxTB~mJkfyun$;c3n%N19n;$P3LZs|c0k zawni3Xu36zqR?a&L{bnMSk^s`1D||RFi*>8H-M|5pc4p=6GN;FX=!2h&u-Q6sBGS% zAuZ%BbIWrh0)EluKMtM8uiW8J+^aZu85Ho_z<;#HAl49jwv^uS;X)gB7I0dy5gHzz zBuvu^r3Bq(M7tAG4@4f-FWU2wA}h*_petD4fKGo0PovNvDJcE zZu5!50KxzGJ-~^81!O10WwJ`@`6cXz({f<*q&F+eFa)GTUOlr z0&?u%>Hq>k!%Q8&}xAAAAu(h<(?V(_Blgv zhKdF7s(bITbr9DZurq^pWF5<-{hb9r$EeBGUy4`6O!TEN~IzY{~R4!s89tl-hK zXee%8Y9n9TggAnhO9Sw$;B7nPd$!int-I+yPeApd_7w;!-~oL97}`CUCeVUfF6cLX zc1|-MoD@7bu|gxl7^G6P0ztiIJ5?sBp)e47J}qT1MzgonBy&w-1fF`v5LjR=>fVY~;K z0N;nb6t?G}3!;uh&I)!;3dUJQqC%FHVm8Z}O*7K0WPh#^!ehG3ky7&RG(~MT@IAqD zlJnvC*$lui5cERHlSM^VYII?^*!75n;Kj87;YkP;TnIr|&{yus-3PYMRf5luXX*@K z+Zlj|z+3M5ESym^uo^<_TSPSjOi6QEpo@x~NzPGH;Dso|dGQ;a1OMbFIPUn(dDcywa|_YoOb8`}}Pe z<_hQagQ)%T}Tw#=QERVwFWB+dI97CLsM{kT=H;Q zVzSI~_4 zVL7!vFwU9orhGgz+&j)`C>!=7q|K8iCHwP|Spjhruo`=WWyvJ)xqn#U%{sN9u7#DE4ZS&x*z!pfRnlP?$`zYswgN&vx@ui(Y=6N1zQM%NY!6=V`CusSC zD)xDIHzW2y`HEcs1UbM$+bg*e7@jONyNimO!#WL5^8A($Z}e@)N4*Z0L)-F34|v&m zI-D0gaE9Q%yX0pn$x~+lmAwebG2}TE(o$h`0n5}l2AnIV@3gCVUXNdbZ9 zBaNi;B1EZ~-*<`s8Np3MLRO49NTZ3UBD^YKYZy&iDA6Y@Irl4!Up`Jag+kaz)PN`O+Sq0oj|ror=Q zcs?t&kd5a%aJdP$YS0>B8SazMC?8DSrT5%rAKTmy+wM1H&Iy#jW$PSIu-Wfe!UM;V zoM&t{JWO8kXj(EU4D-TpxHP0iNh~Fir|3i>Sz3^lhP@oJ((218Pf_`j5BIY#O#1&d zGB{9Ef`%tKN-C5wB$Z~g6kO~Dys{eDD(-9s7a|Bl_frX^i9Nsm&>^0Mdp6tWBBC** zWAGL>ES5gZT@SfbaFjsm(X8M`C*Y%lC90~JR))Ej%yW1$FKH`7BMgWGA4)?~8h*H6 z;CX^ZLn4%9mT2yNL0jaHuiy4V3tGON{1`~V%a>xL7x2o^=UU%`Vh*QMxX`fSd^xei z%z0udJ*^dI?9Qs;XU@RY3bM@ReFLE0hKaO=p~DnbV@ToMJ98c_3@7t~zHcaXMX7v} z(lAXc&<1G)q4X&cB!%I-J1LF2N7(W}8R|M2H^o;1^zp?$T{#M7YZF&h>LUvVdg@gC9n^C#~MK;U@(NbZy!$Iw|%t6 zhXWtesPU*UJjg<3nWiHR4dt^^YhWtD=_KR(2L&HYHIs>bI6BotO48~CJnQ-=h2|)O zN(idT@UvH%pe5S(*iRG;+Mul`My|M=&p&hqZSD--nc*9`;>THN{F+08u|>?uTX27D z?WPyoWH^N#vQbyiZc;Vsgs~xyB7#6rqvCo!pc{mErDn3oIb0eJGQoShw))#>NTNv5 z2-P#MKhrQNpyL^IRdIO`VT=F-2c8E{a(FORQseWaGO0-xzTW1PW$ z29G8NKlF$P5n)YIme1Z6siXxVq0ks@*y#8)8#P+3IwM_!FoszQkC*Vn_uN`vg*3Nh zXdO7`e^wMb>oFOB)|r}D&T)j08jFJ79l?i(a8SbI1?i&X?VTwvuh$TP$DrkNb0E0f zGTdl|B!xm2n*Gz1_YP8a<`tn*XdyAmL!qfReu;EZ54(c zcx?q570mBLoWbx7*g3K2$@iSYOI^ex-QSPw-kTC0lyF=@^P;7~j0<>}*lwBkXJ90) zy5!aMfJho@p@$!M1ft+VN3z)p5ynGk!K0G}fAx65N28p6?Aw8AnZ^$V(XjpOy}$-o zXxMD{{M=TT7cRB=rI%K@wiQ`ngWC&;wC(?lQW$;${Gl^;HHU&ichSedKLXx$2IBYJ z*KWA)&tVzD?PIvA>?O%E2pf(*7x2^Hyv#>Ow>i!Y%Ty6G6`PHS78(0h$>V9k@lx~B zO2{V*!_BQ4o-fE}#?oq@nFnS|;gwW$o08WqwduEfp1%;&4FcGnLhd?UPTzx9Q-^w< zoD2I?_qufSkGszM{a>y~5L-i0DA1AhobNogVetJ75)TpunFpaqty5<@H>gYyi-On_ zG(t$SjN?Vgy-CHDj>n5D5eXF{@{v_ZVZ<}9KdlVQN-(YzN*dOh5#M}qg}N%ZcB5yD zVAH7$b?!WZ*JdF1tW#6TxkEp4r|BCm*VzXCz!`x6wvXUcz(Z~GXnRXA5|SKdRyo9r z8!S~pDg+^tpxY%ooKX)Hx+=JPSnzmJk{2+n30_#MQA&+YDg=hcY6m`ew!ulIhH-9? z0#*V|URw3yFTJ?RaI?u&RkXqk`X$st_}~FtK7yohl%B3zkW>}#?Tj%-5;P++rO-yBO99e#Ybe3~BIC}iLK?v!mTatqh?>Ns zgieGKO=ozX?N6ixfiNh~;QNYsR?&<+T3N#59mz#wpkpBQ;P!o3duaD=U0NGKbS~_@ z1^mD|y$?Qse%qG0H(M~yVW)t-1d0Si4%3uR#sxokG^Zb1F^bt~g76gOvSdEXX@n8u z+;CKtOv?%%$tX3f*92M$v?tM>7DhF{*Z`ider>fqx}l~U8CIG;k*B%2;uA(1`YlkQ zjqO*R2Ao_vBljmR_csFmxyuK>>GEMu918d;7al4X3XJSQ2^a9;0`5rotrwxE;hkga zDdr{Y9Wz>1oGc4eUU7Sra22o{|4Q*gCo|qZtQbvmmdg^QE0o9y6-+C`X%3;$ z%*u*x!**SXvV>Md&}zZk&o(RLwF?oVthiK%jb_A)>xvs|F<<+IS74(L#UTt=VEV*{ ztN+Igo?pOPW^=;)qPuiIa>j7%E<@KjhO5>oM2c%YkFGLw ze8W#&j_Gvjytp}F^OYV{OS_(Q1|QDhIENn`!A%KY+i(SrrMvVAaL=9l3-)zlpu1*6 z-CE0WKr=8Jw4hify!oW0-;8;bC>|$@yO~F}NJ+FLPcozt_`=|O1`|r85M)ZSGl%g} zLLB)FE`*e=`cH%aHwFJN5dCS3HE!@UWNJh-Ufn`@xH z=}__a-5vh~P73G_p>Ybc(xUuQzz2tLklLK#q~!P{;m&@+ahg*j=Opt8gl4CZq*=~F zdt}QBp;NRr1fIcH5+fvq6pX8Y$s*^$Ns97Hu3a=wj{v`Rt!ef378w!&o~A8w>Qb{g ztiwtSttN;9uAh;g@3}+%#Cg0S@P7mUE$~;4{QR*y_&)@$Idm|vf(bl<*(qEJEfRV> zg(s5ow8HCzJidL%4?a2J$z1c!u?-FT4Na8fl%?h*gV-~~fzMv02#)5g4t=V)2F(V3 zRfF&CKh^rbv{|Pe3#zoB$TjoAQ0kJ?`GUP^#`Sp$t6Q)?h4mF^Zdg6Uz(6tuHFF5? z{{;RkcLDyM%YiO{+iv{>7ap&HpTglW^kMeijON#Tm^LW`iNDt1M}Kw)B{B|{Iqw{1 zh)UBB1hvRO4oP8Wi}WMKGODrrq#!ABzVuw5#l|Z7u~=bj7rOeTNUu&$exG(5~63i>RIdrWkbi5DZp1T7??m!XZ}bXhXb z45limN-GB!1%|v7Oj4_i{@lQ4y;rA^NFGf~-u-w&uTwtt`dg7=y(VclBdSW16`CRt z^y)qreZ%(l3BR({uxYhT$-1evi3RzXGcNG{b zW&c9Y!w&>CUD0@B&0g|{Gx(Wxc;V+^F}8)Vc47^>r)))(nR^aXXYkIDf8;oEBRD>Q zFr@w@<<0FSmwGKGiKG-BonFizzr90J=DfANu+@GHk#AcS1s>zn_U`7!suy?blGUci zupM*fFsGblJUV(hiLmGUKHW&*0iD1Q*F0*WPrnf`jG@_Y(Chdxn!qfBjR;>?95t2gW;vN#`KzL|h08S$TF18QB|ow#@zb_IZTsD?-?Wb4 z-jt92>^}eT2S=RNV}7{siNXlKGzeX>C<~IZ;)8>nMWLBxn#yP*&+d0xNwko3Y94Ps zN!aMs5XvJL0Sn;md*d%QfUmCj3?i)jyQsK$tx4Y#Tn+@!uPL&k;N@#Ry#6{YPplG5 zHnLve)8yucJ3la~0 z{|9^2e8sz?f<>X}h9Hfh9w?$XpwkQprNH-nntsKguIM&ne(*4%RvApQ&5u6Z`P_|v zaS+gp1ijD@iHggEfc9$4TBTWU3a<15u07v{=X>xc_h7vV-qbcIQaWza97GpH?D&9Z zG!N;>;F)^{-*h?9{{W9Zwu$pa35S~6g$BF(8TDjFSPS^`4<7RuADs|r!&`e9N2x{w zEze-Ip%Z)5TQwq2;weQC`*_08s0Tp|uYDmNS69TkBaxT%2>5580*n+!<1URMjRNv^X>yqCne)a&V!SJ?MX?YEeJy!8i61RecG)Ufk6fVDhMc5 z$U;j>Pw}1i_nzwVzdQ_RM}k%(q$w-bdI51KB+fM#T7rM_E3e{LCxmfqWz9xYxZH=U zH{pc}mwAWHE;RlTl%IT706kjRURbot2Oh(n+wkTN98Tfp3SALVOHv*t6|ZdeC`-Y? z=$KiqIZ0B!dvDJ1LX%h4;45RODor=`38D}ccnB##`IOS_A3lBV?^e&J5eQnb zN2})1_6)5H4cb~W2n_$^*Iwgr|A1~?5p`nNom%CWuV1k(v4aj=j%`)^;%`894~`4V z?L5t(Uxy?Ef77PW-rs{iJcL9uczKnVS32B3SP;YkH|rr^8U#E!o^V_$Qt9#T&Vv0} zNm&`EFd!%^ZTX7ICyqmg?EtMI*Mg+1`0j_tPuB|f{4k&sOD+szHfoYft06CL)aW%L z`kjy!Pq06p(to@S4GmixAWv<}2*we62aXC;o@)h5oX5+Y5m4^^rh6S(^fO5z)tua2 zQXABf3cmO71Wy{?SoOKQ5>xXfhbIXNLqC!%jBO1I0w1jeUJ#(dkU~W)j3O=J@xg+{ z$&}sW&qn~SY(zu~)`xX2H5L83$FQfk*==#D0lQO;Nv90&9@y&aD{D}jLol@lfagH; z-7{Em`Of@YF`#gNR}Kj)`}Gd?Vw`9g=NvwmQ}`b9Ny3txOjj(YIoDSsZlC6C)FpXV z(()k=6w^wPmjW4h7-3Oy=>?3JniCA)zkT#n#_t`?W72$k@d7LZp0>3Qz(LsDq|?VEdS zA3PoM`Z4VbjAi8l_8$q++ul&{QcbGn!cri#gnCz_psa5Bvg%g9?V3lw9U(EaBdB{4QD!U` zhF)N}uwvLhT=L?jCUQChRlu#j4SiR>1+@?CSy&Bi#FHgZdA2YlN{jYNVOw5v&#Fj0 znp$npVT)u`;8zt#CZZ_{9^Bbwt!I0v_fM95`$58@FrR96DrxA4fK<#~Ct_I|q$m0A zCu6pclc$rz`saUti?y0y*oj&1$8=%^^Ngs3{xBv;;p)$<(0{RIf6HbFRp!XQmAmjK z=Ttue;D2(YSmC^V>8fEj+%jF zOOS%7UPIJlnw}L2P)d=N6{S#|EHZY-3E#PW#KGzE3yt6Je077@E;mq0adi;UiWON> zV&)~?e#kVH{QBjX)h~Cr{r)M#>rFUW!oWbk?~MNFT$e)z{I4$b#~H)YIfARs_-p4l zwB=AOGsp$?FI}Vkt!wcy4&CX-sQ#@ zwy=?umeLg(R|u0}3OLTdC}`Fo^YKE%mH*@xzyAmCBXrJeX&7aavaC2*RwTx7qvzon zLs=QZ$R}>qXhl$#6&g^r04+WK>Vv1-|JQmRCW^VR(&Xw!jYw*`kt8cMe0cTOUgTf>-kWqi%R%%F98U{A8Kq2e*k~y(w(+ z-r?e)&d$-|^9|s?_|;q7ywb;{1&d6xQd3YATMs4l9gq{31MxoV4hSRo@JDR_#UbC{NqMxNqGUnC z7sRnoJZKW+CG%7ehCafBI5OzG#0W_i_+*~Pq7;1hDL4Or`;F)6t@k)B6>(J{6qu}_ z9SGK1A-{E_!3!7a$f0Gh4+l+neHA7%i(Uq2?OpLXl-C75a(SP`t$*a!*>vBRy65KF zquPCoB=*Pb{qa5Cd6M(dgA*3o&~JvEmT-O5rx8n%Wrb2cwI~4J5GgyD2hT$_Vk#ud z)O?}g2l%I7y}?fT zguJ-!^JJ3K2qb|Y5=S0JYHG4V8%a=$5Xys6^XMtj-+%MVFQ7V2TFscne1WO#m`Pn$ z^dpZi_X57YS>xI;#FK(fBi> znx3KQRjjVZ3_Q)Ryi}*LQMaVVZUh}|hlF%Id)KA0QdVK;I6g~vumhL(o4Szq&{c;E zXAqi>ASoOgY`Fr-(7rd>Xa4>%-+A|d$w|U$P4Y@d(xo8Em#jBKF0}>k?G>EPa#UH7 z8;KuB$T-9|Fq;?bJVny`KmFPjUcS^~KPl;SLV`S}Rrk2q_qpB_d~>T#FbH8aurgiC z((;_z$`(T0G&39Wm2TaELpWzepVGZ9T`p|q3`EoYT=v<|WHWf{F&}+A;qLZ?G%cwI zf|i6x=Uiy}Y^=n1Ny^^5A}IumML~eELMmZEsT86pnaooTPCs7&;x}Kv$cxvzEYpHg zSgJso7ObztcxA=UJ=fx;wTO$okg62y+@I0zdRFu8a?KV2>KW8M$WK8n&QV?Z?s<&d zUY{Agvpm?Ed%a|zLFidN*hdHa?q43T%nD}9irs0B(Smtt=r(L?y*ueXWD;Ks7Q18q z{QVK3Dai`MJG)D2q0i1qMz^WhYD(hRV_FFEOyem?b3;{VqR8hYElHLofA#SQfUn*h zusiy@!{Bed&_{S4r$|y=5*S0ZEaOM*tr(8S3wpg8(aWp0Tcy>oMsKwV zy9qRe?Fu_Og^k3NB!;p2O!6iLE6A0N|E6}qf= zI4UTS9Lx%YhK?^twZZFz$O_6r<4H+gX*?lNzG9YFJoz#8pTA)MfBxl*T&^^>J&g^ugs}aPdEp>+iHtN9t;6j~achJuSwS#ls@Z_8t zOxK0UIG)^DJ6vS*MrBU^_71YpTlS^AQ0$(^nc4S2g+QMG` zu(1E#K?se1>GEB7&awW_gkR^bIJAGR%i6eSHFpTPaGzK9*`CZfxP8n#t=Q^$+}TaJ ze_XIp6Ew;awa9p-=aVBiURE>%iIg6bLNiY*#-|y}%1{d=JI9}&|M|*=m~@$=8zClE zC|$6e=KL4W*ZK8p0sVSJr{j~C8smE?QxL6t_8<=%HUz%%TXtQ`C-zLxcQl{GQD1h? zk)Z>39uCfNBOhBQp&IbPF7pRd_Qxrs)0{y|F-Zh(KTc@`7HmaH36lh&1j4h5Aq`)k zrKLhFGRi9_UGilURn*vmMO+p)LTBaPK~2SCw%Qfz(0Pm!Ih3A?1n5# z!6?y~qGVW?c#&}Zs=&{F6;4Cgc>>MY%0PXpcr>wRJUz7i-I#NckcQy1DVXFM&xh5^HLHMAm+<9l zFpc5EJ&Oce6|4}_6Y{bo%_}@#68MrLEl{SUUsHsEL?LO0f@LMhOT*Smjm>WS>2vrS2JqIsocJNObLhYVA?7=w&j17nW&K`bz zt_O1DjD$Q_5IGASPT()^Qu75@LysH%kYnNV@83UVsNgHBl3MH%sYY>_T8*$tQeG!7 zcmMz(07*naR8dOBWKl4mWehqY_xC>^0lu;B6X_iC6eTO#aYi;RSdBEVf3tNaKWlrO z50_A-mh%)zt8>epSktc&UJ@4^600k$-!q@iNziGqg`sE z!YehGIsv`aHs8NDVV+bx-;sDpNu(u@=8y^xBQ#5+m?Ro6P)I46&N5=(W9M@Y|1Vq) ziG4$;GwM2HtzOab1?6nPZ-33sW(lN5R~1WRn2qNop`aCqR<)<0Z1HFLA^g#gteSJD z=IAd=7w+fI;GH3%vsSn>XN1`>8YHJxT0N^{LXbd1YG(7 z?GTRV8F>Y%4~MB{D^$>ltYpw1e*ky4?OYg>!J6-!{HZf`1?(KyXG4CjFgOSQrj4Wm zColKb1D0upZzOA-h(%cA!G6NQBxN+sSn8a-5Ol(TyGI3{kVJup@_kAm!y_v-O2B3> z;_>+JjsRX5_^if~xF)$!Qv^lIR#dPRz_q&OO9M%#8xw1oWhEy@(r5>yMZuP_0JuO$ zzrcf}gbyCV?ja0o5LFiSb=7D6WJf#jU}UF9;#xeZ?BDwWOl0Q(NjUxFkdO8jc+$=x zKP)A0KT0^5WXv;7AvIYk*lhVcIxd+nHFe)3@D#%L$qbarC(8={;@;#_;|D)B7W121 z5gnN^^ueEw@MoIVQt_+L`MhzxXUA0*OPHp%-Alwa{F?~au0S;H@S7mFqYqWX9q77) z_L&QPYkW2%5|Q! zTWZa$kX-UTj7-^147I?sA%84v<-Qa!jIDEQx{;{Od$y=Iuk6zO#yQ95x?;=%#A8Q} zRuJrg(5#^eSA1q^iEl~{#tX`-#Fubl0+OU)f05FP6j}hvFiJF~O#x$c#lzEzM_+*c zBV`AkUkDZJElI8fQC{*|4}=!PJ`5X%9V2d)UH9S$nKpIwj7fo zjP2yN69ez;gQ;6%=(+Y*>NX-89l2u3RcK3Scc62E`~zrsmfsl|L6jC0Ns2Kg!WZQA znE5PYd%GgdG+hB0gAtn3tmI&3!PNL~83FLA0lYQvNb{0eB1rm*b|i`Filftt|LmvQ zbftkqZAxYUz+RsTB3tDl=@7`T-q2-fl!MEQZ zKV8LZJ;WG0XQZYS5r$UVXEZguIt+Mat8ZtLw@*{+A?EiNf*gS_acHLUQwM{s1 z!T_&J@Hd<@I4k&^jRolP*+_uj<atD|$6WE%5l^qth>3|5vu^h^nIH!%!MTQL@_g8K;s6$&FqFGvDsX zIAy6NX{qpipF|33v9xn5rc*oRuJ2n!e18V(3R;)k{-5zb)j29q+jU3$yL0-8ho2ei zer72Y!XtiCFy205)6eS6!g*_{k#DK zWho7jGBM&~Ei}UNizp+9OOl^2b3cEA75wNn%VWDaJlKs6o*PEK(KPVVB6rMI5 zXNFm7$aBNttRSxpfu}f5Dwf&P_q?}4#f#S)v?|SfUeIXyG!HùqHUG89>G=@_KS0Dh+l#JpIU&y%tisn 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 Date: Mon, 17 Mar 2025 14:45:05 -0500 Subject: [PATCH 24/25] Update README.md --- README.md | 1 + 1 file changed, 1 insertion(+) diff --git a/README.md b/README.md index a737949..de85038 100644 --- a/README.md +++ b/README.md @@ -1,4 +1,5 @@ March 8, `25: Upgraded to THREE r174, examples are all modules in one page +Project seems to be abandoned Shader Particle Engine v1.0.6 ![](https://travis-ci.org/squarefeet/ShaderParticleEngine.svg?branch=master) ============================= From 9abd96c646b52d076101381c8b6549c42df85bd6 Mon Sep 17 00:00:00 2001 From: KellyCode Date: Mon, 17 Mar 2025 14:53:05 -0500 Subject: [PATCH 25/25] Update README.md --- README.md | 3 --- 1 file changed, 3 deletions(-) diff --git a/README.md b/README.md index de85038..0f50733 100644 --- a/README.md +++ b/README.md @@ -1,6 +1,3 @@ -March 8, `25: Upgraded to THREE r174, examples are all modules in one page -Project seems to be abandoned - Shader Particle Engine v1.0.6 ![](https://travis-ci.org/squarefeet/ShaderParticleEngine.svg?branch=master) =============================

                      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 D=3#l% diff --git a/examples/img/Corel Auto-Preserve/sprite-flame.jpg b/examples/img/Corel Auto-Preserve/sprite-flame.jpg deleted file mode 100644 index d357ce99b1a4e08bb4eee09e308dcd0b864fef26..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 39405 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 JkiCCr{s(=7${+v$ diff --git a/examples/img/Corel Auto-Preserve/sprite-flame2.jpg b/examples/img/Corel Auto-Preserve/sprite-flame2.jpg deleted file mode 100644 index e682457aac623a0b518c2d69064f59a3772cb54d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 190868 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

                      ?a;JM`)1lFuRy(HN+Y1s}X1n9B3I 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И1QTnM!&F z60By3bsKu>HXV~T0ZPn7{i=0YZZY@5F1RfGI%|OB8GXBkzgM=t+*q~AXS}UD@qnmb4}{$!0G8KEQ%z{q_NMymM|m%UbzOR>dnC3cxSEb$T^Mo(Y%Atc6QIiSi8fOg=UC&TYvY(`xof_0Ewu@p4V3C zvwXpDr+Tgz*-olc6(=!q`Hie&2#6jW_yhjB@f@*vrJ~jg%E=(Rp>}n((kx&DBUdEa zAu3*7N5S*Z>k`#mH-dJP&x8>O)DC-}Ubd{y08dVKP(bR~DZrg-^jn;NfD?N>E3%;G z#8TJKLJQ%ypH3TbUWynKFv(OL*qsLHBxJ~P^V0h*2{n0mMx!YLgH-qLkV`(ZbRh_r zpa+(<;E3l)0tor`*vK+so(s)KoA^uPVDNbNLGdqj_4(kq)IUa~iS7t~uU`e`#PQ-9 z#(P;ltRk%MFKux8oAf&LCrp}R!`PzSNCnfge7BtHxgTs=%yW&f*NYFasnXK?CSiLK zUG`>uTp!*@+!(Q$*i`Y$)Ap50MTDPAmNykpZgsy;mUGeqyNtr-BsySch1C-7gD6z` zR~SJK(w^37Sq3RQpCTRm8o(i_}7`76}l{V8|G{?0cla3WR7ujkqT4QH!*Q9(G0x#%;;{p2gn{|Z{! zrLQwX;-$le=1ib`u^O~K2B|$UQD#XQ3&*WOt?6SP$$nHjpU$c9oOEf~+T{E)q-|S! zRmCwuT7JPPb2j47qw2C%CZW5$bTvViutUjy(1TI#ucio36*sYmBjY!=pQ`U1YzElP z`WZX8`%Er^6{@-zl$u?BT0jc1SHpBG80Q*SxIP0x{;d(!597b&7g>H-%CjPX7+}J$ zhYMx29p~?0P#bDKGv_91%}vK~K9d!h83FQNL4XEGFW`XWD&xFW6ufWa*QcHJCY>hA zZBRgMg1K2alB#WUom|*y#%+TzAp{AqCHTKfd>smv`x#Plt^NH(xNOocpjh7r0S0pw z7iA~cskjKl`^O3d8NAHhdME)wnQ&qF=h*3ckrdDK=baE-EnhnLrNoTaOmP-m_};8Y zpWA8Tw6|Hcrd>&^^GfVEdT#(~Z#io72KR3|f#lgKB3D2qejBM5Z{1T;6O51j#{XNV zQc?4&)WF7SBSG;<%^(l>Iir<4Nj|*(F%ya%YkY?XQ<-&juX z5~uV_V~OnlJ`6$D*1&x&xLMR=`F_(HyHCxu;PtHdz7_IMfzD)Nk0W{Pd&S5UlA&pzJn!MVkGHCKohGdlxZw*N^<^ z<#b|FR!#dcu|neLC{pWPk1zQ|!bEi1#gk@phP_(d9NMy$AZLY)wy%beb} zu4M`~gxqhYx`7%K9lY+Wa4m`=U-T!Jnb>cJiE!nAqWvKH;D@{Tq$u|l8Pep*&U4y| zrAozw0qr}ce!mM-AMCfM6{c~II2<~6XSDO;(V^L(0{5Ed(lhQ#$^sZbL)j*``S(

                    • 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�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%0D?~pnQi;wN1d5+sZxp{%ZjpSj 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�n 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 diff --git a/examples/img/sprite-flame.jpg b/examples/img/sprite-flame.jpg index d357ce99b1a4e08bb4eee09e308dcd0b864fef26..4ba57aa1cddfd7b2505d0451571785a6328d5c4c 100644 GIT binary patch literal 181568 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¨`Zk-+i+JXmf7t* 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%0Dtuh8@?ZIy9aI#!QziE|UYS80 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 literal 39405 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 JkiCCr{s(=7${+v$ diff --git a/examples/img/sprite-flame2.jpg b/examples/img/sprite-flame2.jpg index e682457aac623a0b518c2d69064f59a3772cb54d..bad00ec3619951f4d29a1eaccdb6f7250bd2285c 100644 GIT binary patch literal 217310 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⩔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

                      ?a;JM`)1lFuRy(HN+Y1s}X1n9B3I zsvl;lmtHkt^Og6Xz}m_qOhBm4X~bO!APfwU@JkW5lpC>R=OG3TAt#vI(;0c*;j2gO zBi_*B?RePdJD57LM(0hr?u~|LNoUb8 zuj%EpXdl1lr%C$enOf4#Q;N>bElYdK8guJ7H%k4&<~{@PL%g|mG-;lxVD%5#-%cv)iwy|_E(f%z2Ivv zR{+6H{&RN>LatuZovZGu(3M_W3BU_KEZ4}_ z!Ox(m%?m56wg#qNp{OOt!clOd_K|Lq**Gtn6E&*wvdHbm9kj-RCb zWn=3}tcF}E?!1z_j?w;OwHIB9P0D=h-Xm1ltHKS)WHv+V@{wAB`I}XY|KqWWWe?Kh z`X1d^U)_n)R^kO$IIoyn@VKO8%X&fT@C*vOtrOCv%mxKvD|)ywk9i=$miCvyvP7}3 zpU>_GxQ6ylDhK;xTqzdf`qtm@XVHR%f4#lj=9?e#N$7Yy?Y{{oX_;=?F+!tzS zamAvr)a=w4$AMoKY9YZ6D@kKvS<@5KM@B*XPHq)(3w>)ype@Gc-aWl3`CEjnf?mhm z7DvapzqL>9BbAoidDD0I2Du;(GM3LJJ2^@g2vRq|s;dGcDCdih@mFMLPtq8nH#$ux z+X^E&xs+9i=YFWQlyaH>3uh=@oc%S6G43OcRt@bUB#U0Kl_&z?T>N3TK?;@q`-oEC zp+85)0v=0Eu5g=beMl$FoL|g5xpT&rB4l3@7W?N2p{I4vd{)u)GYjB^9k%!D-Q-H} zFeGz!_8=b*@MX(o{L(e?)!Xb2m|5&-K%J{k`)2uric}WT+C}^fRg@13f6=Ei_A)8? zLS%ee2~xdDcK@mQc3%F-k#>T8Bp${Iy%Sw@LCHGty!E4!2g@O?Q7H&=&({)1zT}q( zy9TFM^fD<)#(gJog|SVe*X9}-QplItdAKq$Rcne6(0@P7N)&ZjziGJyx&djmU;R>2 z{bI!>k>e-5gb(7;Lw;4Xu+>u0-{0FL10kTHjQ!VBS+ZCO%&V{cu7b9@?!YnZLu$Wb z9nZO{Tn%xCYU0Pj_G=Zh^F$-t@~ZJy!|iFO@P%n?uSk>D*}EI#b8|Q~YHhGdgM%v+ zgQSAreSB=iT-chVam0q9%EY3>(u}%aZ|XfWIO&1?mecWytkmOKYa#=stkow1BT7>F zb6WHARf~M|KR9 z_N-c)oNI0f+aX-C0x!j_z7(fQ$!=e`?PxMdZ8uPsEXaBOZ0O0Y!LVeNt>c=KwPn3& zzzd$DZl_69r}XK~9w1Ig%Lu$_Y!!6=Us?KO3RtgazUpTf0`jXtT~Vy(D!qL#cPN)uiJ#Qfvl@Qc^Xu`JoJenIg%F3A7)v)b4 zPn)Zj`*S4m6T>d1wT2aL4Oo?gWHV>C(utvp0wP@&xA)H@hCf{G+L2pU%CksP$>`i0K18+*n9>Xbl3cxf*H~=%`y7h9dD4{E`jtW_0{vt z5q(-bZ&UVMyVl1VAuNRcTD19HtxF_$(LKkL!0mW`-(wqnGiM^Ce`E9!^6MMS-eEQj z(#`7Q;&ufA2_3l7J z(S_heg$HLpXZ2m@;u>k-8FIQ4fk7&vRCUjtae>LG)@Hyjt4E!==uLk2W6I|}KC0O6 zIgiM(b@9_t@?nWDtRXhBrKrTSz}Z+n_gRh6D<4nj=#v$uc(1h+<9gJ8E;m%R+I{Cr z@cixCf5#)!HdZT`OdjocDkbAqzWxek2^os1@ZB&5UGPUD`dAxN#1h=TX?M!D@;)}W zEhX}-yXBJNQ!hOK!rAYyLB{5$y@KO0Xg&BTq!%{C$mvNwwOd0JK{end`kij%kwBlExPqqI)_mF;nc+lC{Dm-sARv z8T5Uz)kiIVLhBR1v+q^gVc7Dt(}_75?PsO#Lm8MGJlomX-qxEX1fB-GEpy7xyf%iB zZQp#{ycLqLVr$a76nIw#6W~8mxNj%ZdFDYz^=#ku@bkBaR%mkZ&s`TUE!!4`s z)b{;<2fT}Ov-3$N%N}?%?ex#IAzhWbvnL6aHFR17)5_)4o#mu&HR?B~I^ol}a~Hn3 z>7oSy60wMEs3q-|5EnH&e?jup?Y}hP1*AYUJzyuinMU}u`#}_s3h5#V&y5}3bJw{< z#Y9SwYKO0tDh_@w~bdft{BhHpZj5z=~g&ft)}*D|x&@zpRJ z{YzaeUKCfhgG3eN=9I9q1neLs-|+WAFvHt>l97?pn${o~tXk1fF1&B8cI~A; zgpu1}QM~X9uV^76T$>v@bbwfWnCM|>r-reJTU`cWo>W{DC$jI4S@X2YxdVKFp9GRB zbM6_+;Q~k73rSM-y=$gc6^^8!yM{W<^6o-j1}0>yli%7pENjP}j}7M3&;X`v6C|<* z6qC}=W+ecY0VE^^hle79Wye$ADO`t;W$R(8F4icv2{s||$xcZG8-)G#NrFQ;6osr) zRKoanvSpzpXi%6T{xYuqdUEZHzWleXAu@G1%TkmmgYQIvbSqVd?|YK0@_t6jq!(4T*?r~=LD&) zmH3`sZVp^$AeEUIZ#k!N?N72XA8AQ-pH zj!0t)ar7Gteq$REfqJAyiA^ME2O<@_HROr)Sem{TMRJDGFB|!H#!Lv8-n1iXfnIQrg?JZbsQ*0f*=}Lqey& zpQ&GUiuim_z>@*@VnwAb>s~t=_Y&8G`ZW^-0Jarj6GpjHGxxmC#{I;_)*~%eGj5F> zxC6X(a}w!XZ$Dog*wVD!8^H}-!S8Aw^Aj>84#TYZu;*6q zg;fwzV^?9wLSe6!u;G3PVUB5|@DL+su>gGieM6FtL7X|I-@W`o-I%XFE0+{&`KKTN zXftBjb8E!gt2aL%ao0Fyl;BCpHYE}ygJLTMi(9-SnGJYo`Wt#Wut!q_hha(njE6In zJ+@X5ps8*o8Tm4iWIx)FQuMl{>Go6>c^^8nl#ZuBW>_oA-iNJM&COBWLO1Ov;q3ERDTT_em_vN*6A{Qi-{fG>W7XfE%mC# zSS@eSqaU;Ya;HmC?Gl{zftR=w>OH66r-3_2ocWjZ`Rx!*y>vzQ%RLJ^aa%35vQ9WS z`#o>AQhm?ZFo=etTpaHJ$=Z~Qss6q{J30m;cZOT=lT%uKQ(8ZV@2O4K8PMRARi1}D z#C_#^WB}Km{E<5tFQ zPLi<8Li)P4C4DsU>^-#m(Ni}?9_R8gw#JAas+{9r>)7K+e(#^=l!M5K9JNv-!Kr1E zXD@Ys+-JwJPO+(s)lI-bXj}DVQ+&y;>Y(IG6qsEqN#>r6U22%rW%PIK_~ z8b+8(g6F=ftrA#Id2exofX$blU$;JpVFfs=&qf_mZjuzjZciTMOyg#srMO z(}CU2C*LQGT)8?e_~Ty_wXSd6zgu;!!V|i|0logJg^n}u5*=o@8QR{u=3eE!E@Kyi0^bo=%h5?dtIL#Bl$0x z7q0tmdmwK6otx3%|G{jCv9B0D^~!v19zjU*Ts5od$f|hRlxBKSgd)lal+#2on`q@t ztP$t?jU48#x9rM)xt!sQE;p$B?Lt&qlj8F4ND+}A3))MyxX63pAMw@q$HlyC2e~%S z%O@)*<^)x;gPo!~FOQw#HcoSz!kR$p8!fN>Gq8Gw05HWrB!U0nqLIzw5(a<^k=Hzf z23DOXb3!DN%I^AYROy<1bCKq%;igTu&GcGrgMZccj=)~b7~%&mTW0IhPO;I~9_=NG zg0{vmb6gHiSvnZPDq4{1H^uDQCbo#?+(Z0Ewace4eAg-G?Mu2zT#YKcqDN?I8e zla|06N}q6Jbs$@pWpS3#&4bn4BBhbq}Po&_8xa?n8UcgOU))fHCbJq z$~T&&{nu26o47oo$iX69r_+DUO}T3r{Kb9r;=!+K0N}Cx&*C|N_Ytd;_<4W+;CFcK zR!Y5y~m-d+9B=ZnV~TW@7r3MXxfs42j_2BL~qOaXIks5=Zwoi6%Z5Is!9 zxQUDy{iVr05ePCiGy>2W(x>aHgKk7so-j!nrCVVHk*#%)^dVnY4Wnd`U=GQzBnh{} zvZ}3+y!68BncHm&Rwf9vYi}|?;db9=wL!G)R4$V{Zp~x9#L$s- zc`p!7IKsuu*B=$ab&i>hNvwdQ}l~mxJ~m^ z)*=7lVYpejoc4>3PgN--=W*jx|2qL~u{PKXvpNzzuMQ%S-0cxo?+3R5A34ed5DO9s zJ_qsB85m$)LIuLY?;KZ`6(*MJThUvbK4R3{%Lm$uTz)_l0>A@dQ0FE$t7J?rI$v)c z(%}xhvK^7pAahk1SNA3LEN(Xj2s0OBu37s<9)YnR)MduXFI#7NU3vT0?-n1zNloZa z@TN;DB`C>uxiaDX+_r}2wjerj)NZ`hI>$(G??pAy1vS}*!%15pvrr!Jo{cUm!+yJ3 z$m>@@Cj~koBI_}?q(6}!nd(%xjoxhd--)i-B`7N5ooeFoLQu8y@R8yUFNCnw?(~nl zsfpv~t?lVTYFKft`R}a|Fv>n-|C7$0Eo^@foe+&cE#@y9)>&}pb~kqW&C-9DT}Jr9 zPWsvnAxCq%EX0^JA#sH|M+LsZ*TTzm@r%(HY3GZ3N2MBB168sS1L@lQu)=HxkJ#A^pSZ78M+bLzRI7b zjluSLd$#@qFzW(CB?$JH!1*!>VfjUq?D$kj#p{L3Vo){?chbZ#?v)C4rIL@C4HJUM8?&+bg zZ%ngqVxPx;&)1Aq&lmN@p2QmO&S-V$vwN!e7UwDWh{n$N0MB1bGO9FSX$1j2s;Bh| zi7+c{wEZSGMQFZXPPlPmHS0RVjPx6LwkI1xO8S#BgICS)chvcMJA1c14p)C?)#lFG zN_(8pdcTkBc~0wrS=Q2!mnPWwHNP`TPxQ<9^ftZP5aSp>b?t4pL`lCfh@={2u3aKf zce!^^2Kfl4tkC9W{y3Hc$brOJUCi8CES)d-{$i8y`qe-8 zItU-6+}vrB{`KUwF?JYoV6OUTXHfw=;+?cxmtnjNlewf3vR0w8lb9slLv4-fr90vD#X0V9Ws^C=i2R^Br5bg zBwo8m6&NGR{59(4xu$@Cz&AE{{_!&XTT))< z)89E-P@d>IYF|4}&Hpt2d!eMt9Y^4Ldzut%gyd6x z3f_3Xb6`v1nVX+OH`Ver>zJc@kA~rO9V%rKZlbz5Z;z%$@*}Imn?e~B2u2!cIoV@> zGWMgJ$o)Zi?}K}fV4mT6LBV_hMo*)2(qDB~*Gwa<5++gyo~>jgPS>a8MB*tWk$jIU zq1k5D!#rJX_df+;{|Mn*^N()qlK%7Z9u0k!Hn&&?2KHD3`|INhA}Zb*GynC{LoXBZ zQ?poE^6P@Z5S&XZ`F|(AoMm?lm$nY^O{Uso1_QU3RG|?9PG9^{SRpwMy#$2bloebH zamkV8`F%TL=$vM1G7{mQY;X}@aB242cdKNE%|oo_`1oT{UBe;;r7y3CgUGMwz>}QNfmFs4H!djNp=(&-Ujz(mulaFIC=t_vgu= zEf((>P5E~8o!55rU38|^nm+!<-8Hx%(!rx$;b?7PEG*r_;Lt;#81mdm zC8)=n-_4;c&haSR|K2bDPFVcPvugt@8Ps>)ru8?(LZ|mW6+=P?QZ#(FAH^|`6t7{J z7y;azthZH@1A@mjOeGSEY6@OEPxjF1mm8fiy9CWEU#EOXpknCt=4X*495mgC-YM6$KuuAcB5Uhuj9~96gkbm zfd1?aU;>YB<8hS~g5UuR@n*LCqu|Var3x1}_EMvWLMG~f855e$JD+4fQL?h}otB+> zfKYLC`YBC?oZ8W;SEZg4Qy($X1Wi84XR0u) z`Hmpc3A?vQey`hAd;jEBk>$idq8{VUntGx04Pm5B;W%3d_~%Hc!tX#szh=6aN0ZMz zq8s)&+q&q!U?yR7dc@=lced=Kvz0Wgvoi=plvJUr@L4mf{eGPNSPcK)32jCo-<_rN zUMkO7A%M>vFD(uT&2)b*;%(N0->wGkE_V99HxZ(7zp$-vW+qvFlm8BNej}n8eC_RiB=2vkd*Q>B-(}+=SNPO0R0h zH$$vx31qAu7Lq7#KCtdJKE;0%Hoi38^wg zJG+aU)YyGTtj(}R8f&1LKcTh)jU&_E$^m#xK&tB&rdNLy?5``@{4Z&ujb+R3+#d+q zco+_4+8A8`zBLzwHY^lf;Q#!{FlfO0B|=|6HitBGCh*1n%d1bV<8{jy@Hhkx{<$%W zavdE-PFCc5ROCltI3y(xW*e?9q+7*($Q|n|QCGG(A@lP_@<%88HGw~r?`c{JczKhp z)*QcugNIWugBu1F-=JdCMat_;D~HbR$sS#OZ&H|DGAv&hQm1F=4H1xk>W1+H=eT=|Lw?(?bdxquJ-N72;W0m92^Rwee?SFGZ9)Q8E*4Bc# zDwlKwS`0IBg^bE@<0Il6dxSqYlZ^jiz=vT%GjIg|nlT9!<>Lq^Pj$Zv`qTAH#Ka!s zvWCM#nc%9<=K#_oav*jrLY-Z=e#C&)8l%KOUdib7N2zt+uiEB*w8Y819}XS_9* zIxj)uenrT31o@|qfVZlUx&IP|V9uorgOFYU#|mazzHYCPF#EJqu9MXXsyVDboXT)p zcdL@-T)k)|>;|gjut{w;@F6>%YW(C@z&X~-Y+{tV2G}#Nr(e!SQ{qsA-?Jl=!v3i$@prSX`$2yT$_8k}K<9%{A zSy+KJ+kGj%XVP#K#@}qp$w~-JANg`CKyT>mzTf)ismrEgZV&=$)O{4DyHO^_tj6?q zBW$VbtBSVE8!S&@7G`sSFFOeoN0rMyB2Y%KU*}6I;A%)c0%yrZ9L78zRRA*`@TIS; zX$;%?FfnZO5$SPJpVofk#REluq#LztbiUi91Wvlw6sW8YdgDdE9A*4qB(go!ssdET zYgp-xlnCoy@*q8GA0}W$eisdr6$i|4ux}Vj0Ql!w#|qEtW=Vwodgy zD(+;(l)990@53LJ#iK4Iys`WOv(kE_t|yUK2IGg!|02ri^-+_A^i|RG-x<{hEg!CH zgWwys>9vlSuu>9TYeJvrJ5-HYQ-H+5N&f5?gl`>^*tn_c(Tb_?ET4ptot6OAg8J*L znDFfWwCB;7${*ZkC!MXV03H>;#jDxSkOh0vv}e4^abdmbAzKF9iWBo&@$#C_@IFP&VAsR5itopR`vhLi2h}CvaT+AE+bosUf5iRskKx9?>&W8m8dJaFW zg@NfA9pywJ6XpZMC*?*1kTti6p`xBA;ixRi1h?CeB!ga~g?{7aj*(`AB;q0X*(+m6 z$HB3EJ<2IEeuKN_qPlN4X(?1kYNRBKCEaf&E@MHi8yA_d|7kNZ4_C`~-Oh(I+c5_S zt>~IN_3lv!1usWQX!EvOzW2ZMy|$@m#0pECoQ3mi8F4hxe?3^%<`I^MnDSu z2Vf-o24pZO<{990;~;|_1SMJkI0|7lKb;%T;F*8z!#a;#cS8@u^|L0crfwyTtb6-_ zrdvFq>%-D9@7;7&wrAch68?8WH9u=Iw|R2%nKl5#Xmh|Cs9n52EOX@sUg9sXGL`GM zqm-@Dp=(o&;0`oSBBQD!Gw8=duXm8z(}ev3m)75@e#rBwTGNW|{@0&^(=$8%aa7&z zMHSyYZ)M-K{-NRR#Rr*@@v#86Ein1Zb#jE7)61GK`DMNO?_au|*=e|zX_wKWWPtM5 zDptFY@lEpDhqsx4N?JxNk+)0F4tRBK`|A83U3*E8z84fT@EDnPtMZ#H1g7xwd-Lp! z{m6C%kBXgIqeSpd0}!qM(~T;{De?SuOoW&1k+?xyUN5i2VZ~3ipLh24b(Qrw0rn@I zmTxOW-IX7*{%YJuIO0lYvwhOGuyxb!Y31*f{W}d5JkjOQB0ecK>0$Lkx<9041gETT@UoQ7b{txaKqe&+y}i&} zhkht+=K6KK!K{398Mn$k0O&!?+U!|ENO!$;bt8WLi_5-Njs@CH-GQ7cer7a^*%@f> zQoJi-V%T}#oUSChp3V@s7VwPOtNZtLOi$Ad4+@<)OLAf>hM!}#Lh61;{aY)nSwDL8 zNPf`U8IRGL(%V2{+$ys#QwA?qUsdtxfSaYB(2Kbz@^_2zD<01O51yz9jvGVTgv^{`yDC_~kCag*Oe9Qs%E9iL>N{%WA$bJJnT zg9<(y)B_mOh2yF1=p=s#+1Pl+FP&ILUjqd;A{W`5>n2WHpu<3v!KU}7S9p7W5Sw*b z#w{|((_$+>Jq^#LscavYB}Ft;Fv0U-nGI3zP3sCEgMkR?YQblKZf79njwJgB5VMgj zUOVa;m|w4!q5rVPi$KKSY6(|awct&D6nOl~nS*?-p!}!#iQ5ofv<0Feq%VR?*W4*L zC|_rJ&xLy64)gN90kv%BUh58m5HISn%=L_Ylm6J6kjOfjTik^TSI7MJQKPT^z%VI( zHOmC0Q55QT?d^9&q$DGSg?BXS^QAE~(CX*8f`o_%>Qn(ukK+mp8UHEFRJitNt0nK0+b3$KUaQ|Frd8xb#_&m-TJ!z-@}S-LI^aZ z)})a38ehWaSec%QOET~1K$zFIFFRAw&LycH0&(BiuWG(^mOw?ewV!C0_kXZ{+qckiX@%q*H%q1S2b4i6~8LV6Q zRuqDVzu?^5Nd**KEVnBJonIf?nb&*heod#1T4#vRbQ`37y{G#+GnQ8Rk02xD^{>5R zVcY-Jpe@yVBM4mr^ux2UQYoVl06X#v#XUJ>|K}h%8QF$t?+`gCoh36aBzt>JIi*`!o{69tK;?MN|{^5>PKBz=WD(A2{B_SjzU_v^l&&+E#e8AY3dUBlSxxy@Z{CbT^bi&@wH6|nkOsc)7&R$DC$)leunqU(ARr3PI{ zTIFif7opMq5!f2)S|_vqtS(GXo#-ttE-pmK>X|-Qi)DYvtyt^KnYl#hl7N=QB0Jx# z-Aw00B!3d9hI5@SL&XWW3HbW?O{B&x&VlFASo_0BlsijFcx+Pst8I~)oMKGMk#VlF zU|RqT+v+``$l$I_TcD3YrY-ezEF1VqbaMxd`5 zME6c(Z4)O2xN{Tij5CU}-PD)+T3T90Id*N*2+u19x(z#-*@S>aw}?pznp&Ju%~^kO?*jKQBGqu=1z15rKarp~E~3_6`y9ky)~ z>Jy{iTBsR4u^$fPiu2#z`5KG`;S5FPY){cZ|qe5kKRn|r~)xr3E zSto=B%^iks6We!m)ihlX@0tV?2*j!5I{%X=0_evw69|Hm=+!n&LAjX@KfRKQU;lmP zxg0kuL}Qf(Oa->*mXERpFYP=afNfV=Z^J;1)DdmVdj`o;OxQvSy&Bm+S)Qm-WU=aH zL?=KvpW^a5B*uR`=12B_rPZq9uaH&`*Ys^FerFDAC)I!n0l05Kco2th7!hR1&K=l%X|FIttY=Al)Jj(ecGH;9hhQmX2IF~zORddew=Aa!%8quT1NX>D+kf=c^ID`;`rF>70xZ;dk1X;qpW87eBN9oAp(27Bk$) zDq;vuUbv9&aVH0L;<|KFO@S1-oQ^#kKlks8lC~dS@TE!P)uTUg8{9wQcM@73`&Zd5 zpZ5{GmYWMty7IN(!eOtDo~tnXK|xTOGO&a*nTpwT8}(NZ?kSi$L%sdl_t%b@$%nm5 z4dTY9pM@G78rD#0ptA@1E)#iw?`g@m*6eHy^X0_bo`1Jy5LW)kAzW1cBLBI$bA@5` zszW5418C%_o{fV13)lL`lXg`Z(>SqsRiU2m{7zfwPltJ}Qey(9_dQI8CO%zxZ5N$F z{JBKg-nP;&DDsqS`(Slyw*J>sue#~1;+Ere%0kjUx_ROoW|`3H4S|+~yu*z>XLA;( z(r~TeKQ?byFCWELcm6c~k660gd~+&gp;l`%ynfR|wBwTfknK3FJc3AaZh&_UzFGOe15hqPxw=38E31h@xEF|J+~ zM2RSbd$jM7Sn`WENny3}=Oi;q-j;M1Ia=J(6D)_=UmX<%35N|+DQUn<>r>D6H9*Vz z8X8&6M%IkwCA`DO38b+f|637U=F|)e|F?Si+kR1A0YOTHG}I1FG&P1KD;rQ}Jgpci z?`n|;@3d2dPp{GZZKXEf`oA;~cR}7T{OM*JhEMdIP;8ndlD(w}NgmML`z=JVWYqkn zmC23gYbj2VqH>32SJ+y^HM=nr*qWeoB3?E=JjCf$+}fB)w?$`V>ZC=DSVfm{lGCNv z0{W!pkbF?7z6$s^qQSDlGw|V&ILP$)s6VgP3GFIA(~u!-%!YWM0}u7}suW(lpd2=_ zwAgR=cC=b287Cy0D5k*s_T+_~A(}Ws2$f*~XHlEK_0r4nfL!$SvQamza!6Fm!Z)ckbTVSi#Y;`nFH2AOl%nKL8A``!@Ob==ra zcZB}4VcY`|8^;-co3jY*Ep@YsiK=zyShhqd;<8kGw3U=%)f2QMI{o|zsku-w!asGT zu=euHi}C7-s^(jTDDv!vMJmlxGH=*SjD?m^ z!CZvxiT-{4EtdaXVfW+|1`4*B2=9+9s>o^N3#2YF&|Qwn%iVBerG)u_W6eHgZ14$I zn-nMDz2n{coT`N8@Fd+_-apS-P+;Xu&UokANV=K>E!}#c+pt7cy+*xvJ6jEF+Oh^oLBpP;k3n z;Q6qs$fzU8yxkany#x58hgGwnE?q)jO0?=wS#9jT=vSuzu}t457GEO!ib~i)nGx^(nAqOo+lSWFahIN1>O??ugCh#IttI zVHXut<3GV)hM&*A_854^pm6RVP zf|s&{P{;URMX75Gk)+^3%R<1lu!30L_?<^3rp|BrE0$Ry9lSX@NE6hH1p3<#|@@!$v&1U6!+!crHI$5)AwdmQKHTG5LKzD`^QivHzxDg-(1z8q^(f zvMnU=zW#Fq{VFglAok|iu~_jZ)3z}O`3dN;;r9=PPOOAV-bure7~obBegle+sWH&# zEKZMH{`r2n-yhl)o3TN+k0^2YgY_~Ka~h?w-@>e%$N&2%-5+t&Yq2TX69-bb*oNRk zI*h;F zTj7Mdx$FDk}YC^^JhNwv}2pcF&^}nmhKH_*iGxGl#bO=KTj`YgZ;7b1pMU*0x__iavS2q zgiPgSJ!Fm9<&_1j8Ax?(TY2!Bi7_~^ogPMHshBWrh{L$LjTkDv*U8^u-d$B#w{@t` zDFc`!u-sgSpf@Om!*>*=;#2OE)#GwX&&f6NUm)#~a-&PV{?;*+Yn7E< zp&TUIe2i-ls9Dz5Ana^Lyf`0lY`B_gBGzHD0eI@K#0sY%PS=9>lQBGA11zdvR{?zW z*s~&dTW-f!QVb6oLPY=i5%}%pIPS>NdY}u4fqjrCHGM<%rX{~JowWSIEVhRE*@7!2 z?%eQFcQbM*Z>?^bb3sHCC#Oz(o9xR5{@$!^L&C7WZqdy!l4EthK;G22PeCXLAKn|t zKH^kuXi#xuUijl9wNfu}v~2@lff-9nW1ya(RNyv{)$zi}IuHpb)ZJ97zby>jf9>Ly zowD(@T?btJ^cf8TVRWD&B5AuK7-j->-&QDiqhC-TYoyc>^b!tt6yK(48ah6{ZkewJM0HNK*C5|PxaOr zOmqi~8$E*)^RP6V_^$MajjJK|(b&`KICQ}0XOHCBTXRywJq!wlZstRKRFWQv$aS9j>t97pY&(%}+ zt7R?9v~1+uqRo`WFJc>?KDv*7{QK``4+AO1UGAM>Rji*|*o0=%;+a{NPUJ$)_NR&; zADkpg71RjWzP-%Ii#V3Sq?T2Mp3dS?av+LdDCqv-9*^N@(l-57(F&9bAcobuBmdRO zdvd-LjWg49<~P_7m*#IWd}E;AQ_)_0zf4db`d+U7Nua)~1GRVe9{eYvZmcX<7)Aw@ zQZ1fT+_^FJ&&$lrGIboaX?ih{MO$=W{W=M?iT}QlFxRD9!rH<`?T#wh^P@dSZ1^hl zMXSM$8w8k~2D-Wz{G_sV`BRoMkEYQu76u-0@lfpZ@!dpx6yGG|U;c~(5AM~5{@r*~ zeh_D!jd=UuJtmBz^b0WI+Ef_6#1x@GHOs6-^=eFgO4Gv%Gx$rM;w z=9C~n-HfMhma6vcZgr$p=70jn<484-DS?*yCQ>fQRKUtpg8AN=CIS9a^tRSR@n-~1 zjOb?qU0G)v%VqJB`L#UkIBzvI)tn}3Oib#fe_^}dBI@u8Y8lf{{r}sALoE>4->W#C zo^XL0Sg+%r!ja|vL08k?#rmAzV$f!)WFd4+5aJ|U)2E^3!GEKMhfQhS*FZoY^_E;P zEWgE-!B$b=@8J|T@Q?5$aEb3fL2*y7u0Mb1qf)&V{#-i8M&~Q0VO&|bqi_!qg(Pth z|Jgv#hPu$%G`Fl~_aH#b70~^Wnm>yDJwqd%D_aT>s#9OzJlv~{ZEaB-Z*6+Bpvxj_ z`LK%)I8CJbOgH65N_zbf3%5DXg8hSc$X3K1;vA|%$rkvgZjS6S$pcNO&(7o6$vF3_ zS_^Q)Dxv#8R(EQM+&4XBb$wV!HEv^yAF!Uyx(;WlVA}>1Qvr)(;;^~pz;4y5sX$F- z8*l!ygq(|)KdThf(d1YOvIWW{qt(%5eZhn*fPkb}c`&S+*AyGk%MRiXz0Y=EB$$ccb**I{&K z3OZCGQ~mAUGa+fO-8$nPWfcyk^i1n+9>1rC7fj_v*Vlb~nHD4@Yzp4i5;J1d8nrsT zdOwufSvGlXX%QQ@3|^F01`cp$Gg8#Hv#QV2+sbc0{_aD>!YK(9I(XFbu)>-BW+`On zSex*n$l)NpORIO*Ze6a%eUvy69xStgzZQ4mn(|2p@~`O_KEEHpkYG9Erkc`@b;%5oWE<59JEv<*uJ-wm+*lNes zt)`7V)@usWtg_cs4jcUU@83W9dQ~6-#-i4A_LD+cUi()Tc25Kb+DU6qwBf7gnk93& z`yzcIah(%&Uqm^)pnVfcnXBeGihc%IRvzxLjiC6o0>FxhqxVT(DQX9`wT3h7Cces^ zpk-{@Cnk)BOB7VyC37Zs<_7;_LIp6$Tzm&MY#;BwvuRAW*!Nko=dHY9RN(vOpvd8? zT)~T&Q<9kvjv>gy9Ke{Nvrq=+c~;3-AYCc=Pg7IM`T9Y8y!^Y~BcE zZWWn7Qiwk7Qq7_cbR0!MAEF~!`8hMTwv(%Zd!C&+0kPJ_+$jy-GnEOHJQ|m{uI@iF zEAu(EmgkGY8LoSqbRv78#@0a5WIMCmk8;T`)nPPj#SLwnpuxYM2o5KXoBQ^JMJ?>? z_H7tt_s{_w?=2{$+St9*`vR8HFWr=k=S>7DnASW2Q2oK;9PQTnB3eENpx@Y)ZFYVQ}3TVh&i?D`Eh0X1)_2h9dF z->-eM^aA@=QeY*5wAebtOYWUw;<6}tjb?#bg|(&OYFymK%(I2Xh3FFmY1}7 zl8Mpgna`yByPUR^jvEe?A9F+YlkNyHI}#ym{ojP`eHK`4s${$zgCZmXW!(=G>c-ic z?zgU2&%oy6uhP8E@?QNTq|uY!a8{D#WKb77+NAMhJZSXhBJ3n4QFjXLZ?S@dbS%~* zXjd<=6Jeo3>r!yHV!~bOQU2&`tYLTKI$4@gE)BMJ^9q3%cDK&p%z91r_iMF3eL<=} zpTR@8!AW*B>6tuIlVD_-S*wl!)U+X}j+Q1Xt z*StFzGrK_0lro)e@>E3P$qoAG;mg3`XNd z-;LzVURe!ytgu-V`;}tsZWq6uss8Rp${h>6mKLoatMedYch5-gnhG-Tyzs`|DlpY7 z1ooR-WO(VAcop!A0Eg-2tXoi;i%8XANBak?n1Pq^WGmPX+mhiV1_!gu&=&jaVi2MK ztWCAJ+*E=Wdu8$NkFsbki<(B`26Zk&xWCj!@aqv4w$g)pg#ah^&5R(yUkFIH)^5^> zscw@d9G<0JIRO+{w|Jq1^7@HNQ9m|fqIU;ciR)TmBHOxdgsYO2p*+qyLdws#%LLJ$ zRrr;!;o7I~G|sA^#|?YcBM^S#EX^f(aGO|0_FNWjzV6@3dQL#8nCJB`a~fh{x)hY5 z?d3>UJy^(Hmxmka7lbdBvcQblx)yxUq+x=Ay`0tR)b4{S4^P3cPy1=-8}4^A)b#Uj zNrM(1K;)_SdpsKd)(@1{+%f4;p!J^aHwKq{?vdw#(I5t@YOaiH>)h>ClJerhnC8@^ z;@hviY(+Fh)q3x*ARLRc)0@6?cy-kBR^7-=DKZ?^ynbohCp`97XW6E}!b6Rz#DupS zB)*7d@ky8crE|LG$U{_rXs1#0G(}M+YVD@YhQd zN8m4$MvOYG&$EsL0jQDXyPdMqT8MG5k%NdY{_o`5fAkWZUw$AOIR^S?Ez6~#a1-s@fJXuzpS%WPP=su7+ z>s?d*qxPwv&GkCp`wF&#L=WdDo42!Lw(iOTFQtZfy)-DvPS{Aeg+_Yj37iiJ#yE5r z&g^Q(x%hfDEWWIiEniyhQ29~q1R&&jrX2Y`7JJO6z&-o0>de%)z0Qh$dGAWSJvtE^ z{^S~^bYK!c)Ov5L{8V3m6a^(~we#CCsf%~r1F2tLlOarsX=#vFubI5mZr$4@0Is`PL&~lH99F`^W9oGw zBt*L9w}2aGIs28gwIZ&rn&3m#=j~lDaXWgoR6F-ux?a%%`s$G6a{G;- zuaeP6J;bB|XZXi(MMunVBB7BGSBh#o~BtH>yL?VIv&xsSBfuIrTo`?3Cpk2{y|Znx?Y<1yRN_jOo(9F-uRPRc@%DSfpdt*$%gLVh68Ft+h{7diFV!Fj2* zp)nR*XCr9-K-%~`@_e)1g4{$(wQb>q6~`{K*xoYA|3{Y)+@b0;x}Gl*-tISH%05ASugDOEaf%sUy3&2jmZ>N^)VDZw0g4izf<`U8@+$FR!!c8XMDBe za``gLB1`6X;;NQfc|P6>13-c<015ra^2dU!Eh>LCW$#QZEqyCtxiKQyW(OWSK9F|h z>oDBUksss@n|L0zlSSBoKcXpc z4NR4*V1Lxn^V{mD%3~ZKSi7@L-vx$VXF5tYABL4CjczGXF^ST$4zE}{`KOTOJ?efZ zq0CBoXDW8WXATbAfEzIjiAf=Gwu&rpp9bA+{!iB+JL}^ls+?K4Ka>-dLJz?>VEBno zuJB(*v!6@5iG(5jgl`nqCJcB9D?h3#Tx{X?Ccs&DCPUR?J)%Ojns`#gvc#W`yT1fA8;=XTPf9OGzvA)}6i%o7@ZWiQ;eMxY-6a%K-t$(9vLiq1v z9uBCi5e^zcWgAA4Z(L*@_x9o~e>=0zkfE^>gz5&%(Z{72PzFW(1)UPIP0mT~} zopw&Py+upe#(krkHn0s2d2nU^6{^NK$;nm#oWx8Kih=jr+6j#i*e-$oi;i(Mm( zNzXUx&*Af(2^G{vyefgryI9H2%Wd7OO<}>Dp54ngQcC{d4zR8J!3Z!lnTObjeflH< zl=|%T*2}u26E0sfxso@POk9wDTDO6D)HLO_&o*M~E(j)hLw=99Fav0fUk>vQ;bN{S zHD2olBU?lL;NM;{ShkAg4!BbzxCc(!dgAj|re&zR|2)ze0H$0T(HA5(@XlVbMFA`* z%cg?6pkCA37V(iFN$P)Gwg5B>Py>Aq0M$|EnQl+-tHsV|Vs zYf@)->CQc{xR06H3cu)ZvC~nnrjGIN`F}5{X{Z7k5U@g5u4KMw(?)gXvpk}*yfY&2Cc0#Sq7mrJmP4$y_r6ykp5kG+RS?(#!e|6Q6(|Q9r z$-`g`57$KfpQZ(!jKjO5C1@&pF3zpm*A3Gq*|?ta&_h?*5? zPVPMa!qPvBC#cxl6|VYOVL@JPnZXR0l`u$3i<49L|GLu$WUJFaJc+J9-;iXYji&{f zuD-HaJ2aJ%T6V4ZcE(}wksuO0^u10BRm@7k3NSsAi8jIBQX5QkSQ8;b<0WAOT$VT^ zz($B-*^}%Kzlx81xJ8N~@zK4L}aDzoS1J01d~uWwHDFG8;pl ziak-htPS4<>6=|F(~iOR;5}7)q(AU^pTv-ze_MI>=KoH49NE;EN~27}qNKezvJx8H zTuS9RZi{#Jl2?lq&iee<}%mT$&gs z)FL%L&>DE-rN=q`^XQhTUK^EaVqkMNT6S2+yiVTC$CiMh)sQDA+^nU={LNWn#}H?< zqpHjMYy7qO*-z-2f*usU&umM4w-llks2JNItNieuFDxX8w*tAJNKj+X#KMg}n+-k_ zYo6dd=;Bu0JJ#c`FSpY$cGHz_eu=-KNR9~1R()5W<>~HHVjwFtW0*85G5P8dstaO6 zL2(J6Wcwng_6B4HBg##tz9V7N3VTN*PRxVW{TmCMZaGD?r?DWTy}(>1uIBl7tSzF4 zA`DIv^7t_Q6h8jSBpe?@3qgW+7KEU{-h742F@6;*E+(jmo5Ff8RQ|KQOIFGs1Mdg! zJG^@4XPxr!u-!5t@(iD`0$*Mh;Z!=QLXIw?si+|ltq=Xy)wqv4iZSHL1V$|$TocaBfzI8p6 z{TGCszfXfByMU1xzB+EeyG)iVjIm-VUqi@N58mob^PSnt<2$F}^TGXRmBWV2=K&HtS`@;H%p z0PqpK1oHY;WO+eB+Mb2DEB%B2&3VHT_7Nie0LAjetoSsk^*7BTq0eakDbb6R%gDVA zhfE=5+cJqM@m zhM)$4jIbAG_2IbK)JfiaC~>K#To*VH(&=)QSlFQ}Kk{eGcpcf_>s&XlL}=QFJZqV+ z&29R-QBW|(y4=t5pP|*-*$BrY@{@!F@4gsCwIu4#l>^Rn+9iK?eVJSEx03#MwXdLE zqmim7IjC$XWw89$Gr?M}6BpG^Pnl#All*YcQvDYKOL zjrZc=%%d$uH(b@;3HtC-@zE_Hw$(Z@@R1q^E#+fKyN5J@2#^R@P~YNzJ#e?$d=4gDrNtdktpKTs6(2!sl4H7hmRF|tNfyZyHmcrhwK zo3oQ?nE^;fo?jG}HQK<&zpkGvIfM4C)1-$fHYSC@xe)(l0TzKe2nFKM%G6Oo7BfE+ zY3uO0eDyJghQJ~BpLuxZ=TX?kZC z`6B)%-vV-yA8&n_(2z7Seybgw%7}vdEer_?7f#&2y&EqbpL3XKIukoI&wrOFIM7Cd z4SIIP^T#U<0XBCxnvL2PiN<%$9B=r=g>-?O_1pI7>Od*^Q&$UJ42Ru#lv^ zON^z(rAj$ly_pb%{&HS6`Cbo!v+esnTH2OT3jD#_U|V$^`o!~Oqcr%Jc@K^lP7iBV zs8w#AV{NxB0SgBVVbb@*Tl&N!Gh0?g%|^mLK?uP##*Pp264n4$Y*&!F+Lodv-B_ zCN#S@1bh?FxhDwSiJY#nnZVGGncls`# z1TD_bh__AmX+2xV$BHm^m?huy75oyb8f_+d1MvN9ucdt;L70~G?{ray>h*HZ|M*pE z1!`l2FF4Jq-aNE3ln|;@%f4&IE#pE7BVH^VPX@L=9Ri1|opq17D6XcZdCN)RZ8gRp zRcHLHWCmK_^DX$TE?%Hbjq!ai3;WB=z@IAj!E^qpwc1E0-7jnJv8-T_Z5RKhv}ejq zIt>t5J5xKf+9AP<-G_sX?La-xY|_sVv_Pc5kA!-KuE`zsvwru={?P!Zi0rj1e5Z>K zTCz$6reTZP#-A^D3%#jLt6EuH4hF~ZHF>J9l^mesVe*Nm)D}CCUZ#F_G>FSZdOdjH z)vV2JHS9^(1f$Lkr_%;%J~LqA!ATj)wqk}IMLS@B9cFDb!v)O-{LRO=w|5FE)>Z8~ zh}>fDl@>eUqIxkyxboEw_v+!P0GLTX!c}!Q!(!Mbos7SXJG&lI?RIK|kV)U73ti%E zddzLR)Kx`XO&`lMB6?z83j-B5(>dzASBqPH<`?|-Za31y;`>qF08R_4(p=~F8l^Is z$)KCwKaV9L=CvOcg-hWEirUn6aEaYVkYXRb!=**!xdGwfCPa9$wpy&BVoT@1OU))o zaCX-3Wi5eT#BEP*%1~QwJ|Db6e)38TYyYk)i^ER;AgoIhVSvEYpk!@OMVKUxrzmjx7|)|s$$9a6~+gj?Rj5|>wu`Dx14Vp zhbzt2MjanRc5gZQf5(s=(fMbZcLhBDAV8na+ev34SA&0z7*Vq5#SiMuj0#g_Er7}X zes-iLA){GG4iDwC^HQ|FEA07lGOH<{60gLNU?rw%YDzxQ=x0Kx9I>0r9a$10DrP3+ zq1AC}tjMXVK^_Hw`upKDnGVOf;2O)Vh$C)8 z=Z1PC`MR}3_conlL5m4C8R^85`cLJCF=2SPb9|%3EZ#X8q0cdCV%5amQbX7 zj{4n)UX_^lv^A^RVPwrTSA$(n^4xoWt&B}*?3*rm6WV*8A@2uNph>5D;^%kN1sUA2 z`mwYAJlOULKV$PN9v$DfAF0}k%!81re~(X3G!<1G9aEUw=k*I}75tbOw+wx$wj z>W6urM}eB^NgGBYTV9K@fJGA7R3_BS-ZEp-XClREj>G!0fO;g*)+P|P*}u)a#a1{RKmw<2p<7sKBx}AoBjya6#j6cqZQcp zoyS9?r)|g$i{UL&IfR2Ce*KEAn&$ARj&vikmu6~SG(tJhTOOPa>wLGURp{w8uFD}VMEOGbl_!Vw zCc&-2NcdE8gHw0X2=R4(x7*#`X+@|Sl+fTZ$zd^qMP%$>_rD`E_xH0V2F47XNNfO8 zGpoLd_-)F|*xz@iya4--MT%f785<;?ygxeL@c-f; zzEn^(O0({$)>A%n{<(G0XFcCK87VCMavE)ZfAjXwAq-1+5Y~9{_o{q+cI}OyveM5P zuj_7{mb)Bb7UP_ZxV$bK#jh{VGkwrtUzACp5>}A^k=kp+7KZiDkdxNmlto+pu ztOY?Jsl~;~qCMB7MO`Y8?RK>Zeloy)hlvDzROHy0FJ!b3dXp z_FZ*>l?15DcS~h)sK|ue>hTG=Sj8Ay#-R>2q-NS?|c9R!< z6M4N+uuBlev{(renz~beNTm`_q-MYJ0+CCpax3W>>Hs9ctri)*%-X`Ltu)%IIc7_p3GS21W{p*sU!B2Jo)byzt3;ar(cAFC6F(~ zS}(t_Oe3PGy%m+U`|bZbC3g5HvjAC%zPvN|ujhhj%$c5kw*5Z%%1)X?`4ggDsLn)E zLWAI4SNf9Z4sa6rz2Z^J~*OL{y|7 za@I}kEnIR%UQ($S?bL5+Zw*6UId_V<4iPy!j$g9SV|NTV3S!;u5qp35x@2=)Zn-LK z#=VPzmL+CPP!=^!$M(U*IeZ$@?z(_9FO$}ew2SNtxjh?GueQ?xQN@>6pmk?6~?jae$P@ymy>iusm_kwQLa`xxZ4z;}iP3k)k&EK9* zz#EYIba#EGf+5I+qM~fmYZr3(A0erhD?3Si>j=G{Xm|^}ZSKnf&+~L2TEhf1b>e@g z`dyl>rOnfv>3SLU#*(r~-|Z|l|ew-y7~_?2^jv}BvF+2|`oCl1+N z|KwTqd9%-Quw^uM_3KhGgI4hF>W$b^So})P*(cRC;scR#vQLqE^-tw4f-D|Poww|G ze2!n|%h)sylO?xt=_XMUh4O0Imb>ynh>XbOvn4!{kb+SllE9m-UMfp6 zJ)q|0OPc`i+(RHseDo>NOBd5E>#r2zU1CwruN!`NX?mpjzn5p1C>HZT2G3y**gKsC%BN{H> zqDwoO(nM$5I?A^#$OqDbm&)5)I7i|sEPf_zeyaduG##RRnutA@FaS3FBTNY(cL$*h z9Bl&NC=hXH5*tygJ3EbrOx7flZaukXQ74SW#uD@zFBq@Pevp6nEh1$dd3$wSsE(4E zWWe_Ql;^MiokB6Qad+ri6mtLbbeu$K2SS|MPVnv>Ba)n?dtnU-cv0tj0q-01dC{_# z`m6u2ZbcXxw3zI$y|vD6`}%74EKi+?Su8}Jt_4u(2CA`p-x0??~cpS zTxaa;v8Vc~s;X0pM4@!=AVK1ow9!U1iDvD9BfkIXYG-xMWm{S2u$PP-S`}8tXF|N3 zfw0Di#VQnEMrbPci0U4 zMWql5-|9ffn&$${932ha2tnKP@4c{9vm~%Uq6#}J*KJg@KK{z$m9ZZriuw#I;|C@z zF}|1DgIxka0+8yQyb{Z((A9{edS*Lk`={9Agi)Y@s6X3R-An2hs;vE)@g~&c2)R*p+Y-rh(Kj>dU^GcX&BS69ej3VyyFI0#`6+|>_Fz0n$_2(yLSr6J$m0IpRX5) z6pjuaE4zB?625@qeyRGcK@Fc`_t+ZT8Ff+Q%Yhf@Z2jVAS7;?Ayq{t@aZH*Rrx(zZ zc$ctjSD>$jF3*1v)G_;~Wp%_}X@rVUuI`tbr|_$)-t9 zPDA90;@?$M_Nc6iABfokZwWz=5Rh!7oJS{kD6RAhf#{i)VsFH-MBBxTQUdPwF;&Np z3gE#Rv9y-g&nyI_Ff78q*s~wnuPCgx1_$~T$dAV6;igm z(YC**!hCQdgGmyq~)&E8PPH_=SF&2@ND;aQ+V`RDHK2iDCJ+t z1zM(LUc`82@L7cAn>2a=(l^~)ZB{Z@W;fZ0gah^?5H|3aLQ9L$SEZ!3@7S(6#$2!B)-tvMS8oX`mnWhJX=EJ zWneS`d1}nTCN}oVCPSBi9C&uoLef|o!kN#*NZ7!E3wQ}*e+f0u${(|Hn(tLCSX>v%=HSXs>OpxCE!mnNyB+?hq|3G(q2W7zOP&EwtIG$ zcZxGH9>(>b!oq&vsfe2ms_P5Q_Mc*(>Sz-7&+B{$Nor6Two%Vfi|w*6pmZLI^AJ>JA@N zj87ndqngdsJMY?0J{L%^)q)Yb;a6YQcPLt|n1*K2M=10x7bWTky#_A}?fGX-*Y`1@ zgnTVnmK3FqIzUY-3ktA(^e6#WZQVdhQMQXyo`j84EL<=|#~WYwBFn4O2YYo1Oq=Jk zv>>l(yIuX+9nj>;9_zBHKbBbz{9-gqwZ7RMY7<`@)&#$Vs=GA4l~-dS+>o$8O|@}- z=I6C*n_3+&q*UrzcE;=N&?1swO)I?Snti>cdKwrS0ReTdD;aNpo-%a=9N-22WQeHEp%ku??Kh*}_FIKv>~AB^w@gEH@?O{1O@9U) z=JZbg2yxyR^p-g>Ge>9mL-yNPW=jcsQ#?_j}bx13TQzenw+tL9SlD z9JM4C!5CucNA-~_PGQw>Pygns7Jdhbua#76=*P<*_cu<>3ZOh%vh52xi=$izc$%c@ z4*72 zDO~~rs)(skz0Y$`Cc-nA`IEku6#s_R4qN12Cr%VJD&4&nm$*G6Np_p=;IL>{54pJ+ z1e*EmHWohT98ZL?S}zZ`H@pmXzM(d+UR015 zUOd$yU764v;}8^`_<5{JWY#@pyPNUxFNOSEnQ~sD@W-;<1xw8*>}Zi%5y#wj)t>LV zj?e^bl77%tBhkhZk<0uN8Huqey)Oc4F;Ymlybup*Na3QqTBR}|+Mxsa^3DT0>4;~I zuECTO+bLcLA{GH6JkHdXG5B@@2leKIM-b#XFDOrH03vN=)`CNz7DPCZyml);ojuu9 zlbT7dno^{}lILlVYc-?@TsWArh;8MZ%A2KO>(d96N}U^~#4wsJV~VQ3rY8AZh-EIr z_2`bjKL;80vf9v8?&_r_29fekx{2P>&O1;+rIw@I-!Zr}8*=kNuh3GL0lijtBwyqu z`4*MTflcWtg9CkP){cPO0!@==%Ox3f&!z_9mduOp|Nbib=D6~Tp{~l6C-4d2-pxy#hEtct5&uaL^1Ev_hZ6U z73btVX!kB)Yx%-A9aNkU3*y19w67UPV z=L4qJea$HdsXSRKZ6np6F*7-zuSiSTovP`$=wI-1#M7o(tfDrxctxU>XF~MT=cyX_ zBnvOL&i$}F-}lPd?&sjA`6tQ0QXrsI!Gw4son?64*88r*IP)wqpbXSXWHkUAbZlhETaI*(90q@| z9;H)8=QRt&4r@o=ua(|M_Jzp3ReBQ^;KgCCD%lUQ37FmBpw?R`(PVcHHxP1GS%MZ-Pa8HbXWic*Nc;K+E;EV!XW5751gDeoXAa%Z(E5SHrV~3 zO78OSSX_iL0jsiVMDz}oFk&q4XcEz zEe0&B4nrQ&KWMrit?TCGImc!j_j~FJ>SGe?2c{|B(>8W6m$yr|(3Do9MKl;wU{*~~)Hpv$pDip8nmbV%3QgFtYeI&oW$mDs33(LyMcagYY3q(f##^wJjba2`GjNvltZBN` z%PIM+0dk#xr0ezj4fwuD?G`YD5F+h5kPW>H|r7v>3rN=tKBvl3ZbLs|M>p z$E547&CbpMr`Xht#L2HrG~W;`QXaN5v*eXyLNf*vRz1~NFPD{d-CklTfdqNDyRjq# z>FVsp*0>(^&iFSyp=ov_K3|dGGRiCMR{ox{!%_2~$kacZ%piDrT&tzekphpd6K_<# zKJBIM=V#6>x&wmPx$Pv^>X@oXzctN+lOew2e}=%cy74)r?P1O%e_Pp`i;QyOuFIL; z7of`G}MN?_)jkR&BuFoyf&BQ-#24cPH$;mL)yRkAR*c( z9B|-mOswQ>^^^hul#~)3SA^ACb>1HjF^wnv2+e|{;E?2bXS$$#8?lL|1uLv{^#8`K zEOEYu9r*>IGqXyaKIs4O?OT=J6E@eTeX?!7S^kRj_dh4bkmIq6|AGrchrVkrLK`r_ zp`NDmDo@GKt<=Xwx!Vp8u(i%b(`y+DlO9(UxEw4f5bG>xZh=rv>|sN^v;vln9;H1M z;Wusl4NZ#8kmPH=F18ksuaoBa(k`JxL0aXlb{Fy}R&M@_g=wX0ckZ?w4<0)=U#M_+ z0v>H!`aS0O%gp=N5kYOWHkMJ_=Eq7b-9o*+&{d0zNDf#3{YEG^?O?3{wn@7jP?V+# z+{zG@67Rws9&-Z|>3e@_)iJGm5rqV>okCXx{4BBKrc9zAn6wl)4tK-m`XzC0;9WxF*-*{i;V6VC|zUJMuX&N zB*uUdA`K1%M#uZ@`v>;Rv)#|`>pIWln0V);o7!NkuG5)oX;_QMTpqY;tB?hNIGR&|-YBoWpxqUJ7hX;A}adliT&5lW! zVy!cjULfJYaCl28z?x_o#XET}fuyURgW=zb;b6Euod4u`*^J=2fJ-}@a{(V8tQ2TN zN+ghgj|7#TrEugmza`a67j|z78CZkA0WbqG9(6Gog$k^oLrQE$tT*v+DN@{pyyhF| zGus=2GtXSA>nn0yIu|$dfzo&CTlo%=s9XKEy4+1l$OX0-jbljr8_kMv$C27kZejkJ9+JU)H(nAI)zP-|!XVLEH#Uw`l~XEt6#j3e<8 z&)IW0LQ(muFEsUve(! zE5HdSvWjqxzXG3rR9v^t z1a1CD^5bT2R-otfX&dP*MZ+=mze9?5{K7Oejv(|-FmAMK$1nTp%CupPR-1szsutk< zT7+uwnEoA$B2UMOq>apN@c+9po(68?Sgj-4D5cJ;KzqqFH}%efE<+ z#8tKi^udqxF-9!l8~szdrd!sAQhVo?iJVD1zQ5+o{!X`zJm%YZ@i+EM8QDGbdyi|{uUP7=kpiinm(9xK8fO8%jD_yK-3n# zCgxsKP)H$K%9+R-*!;5=it_|nWV@Q!HD?S}H-ojFy1rA;+9FkJfX>7_pNv%BQ)erVF3*ci@tKzpBVZMGt?9 zCl_@jU=AS=qYKOO^uQ15IDcnS0MjR*i68IqVvLa6Kzk>p4aTepEYEUhMF+lTTW(oR ztSWAQ*hX5S$q}{CXkAqTYQQK{&aUY@xANI z3>vj@*KWBUpIpkzUa@xYB+V%qx%CBq&qfa^%R2?G`;Vk33#vA*B;xWwLw6Sv!qWbv z--1_-kU|qBcGB56HEE8%qI4LJLUr<#78@FZjQ2Y>+Dyni>jkdH{H$O9xHu&gerW24q_;qd&*B&j-SbJmAPM)f2w?#o+-6~)*YMaedM$}bpS*k z-O1uAnS z=3Ek-Uzffub96r>Dn>!{32J3{iA9GIVwr~5Rb{urTtg*78{Jv=-Yet?XR0^Yze zG!LUhnt4$wHAx7azU^zB;b847^-nnFw4zTqRBAB1BJNkLQF*;-?$uIxo_cFJF&pec{*qZbn#oDeYlo(=Kw}e6Vu|*l?(P>FazKSVjE6-sL1+Cj$?FlEjv- zUznkwIPS6GsHCicY!kfwNHK?>sJyJ?ls2qzDJaHt^=W?uURG&-sa}>)A8x3g9#(Uo zpAj9t#1im)B>3h(k|=q~%qi&S@q=lX?fsMS zGi5W2(Y$esxnBw4xDKkVpUz^(#Eo75Mw$?diGUOAyEh?K}t4 zJMG$lW`4w_Px}d7a-?5e(!J@W`8ZggMw{YTz|4|ivk5T3d=*>^5;;_?MIp0GIu|!q z8_VFSe09y)1qH;@S{;?P1O%9*WH%Z23UxWcMm6$ZK%4(M#NXsk{4Mw6s@nvR!2@eI zc=%jeicRk5b0!&VIMA4Qy&wJ}_t~)(YG03avBjat@7#(>v?;qV){RcSN+>Jh%EK<8 zZiBz#gri5ppADjKj`^C}^=iWJJ~fofGIfqy5da%J-Mq;=R@^@37rTga@FUVXP`~2s zz6xz%urzhxuQL6=w^k5_KL^q>%3g}FdsqJvhKhYj&9000Fwkr|w>A=Or0&||ZI!73 z?@Gbd`m6)8ev*!R?aJ3+zW3xsW>nw#@q)JVq)bEJl{k|U*xdv8n8x|3;HIPOP2^v&3X>?0iX3mQO4NDn0GuVH zsc+vtlX`SvqLIY)$us@YJz^oe8gi@D_YQ2Ny;9E6x;(nR;n2l?eoM8Z6WvI2C(e`TL)AS&>_=F0}@`()F;=%SnH2|3fKxx>XcT|U$mq4P$jM1w+k!p*CHSC-JLN!k9nl0 z@&$JK`zmhgrh2Gue(B@wC4nC$L#1pgcsafl@4%)78*dYrFI25Toyke)!EFT4U9^9+ zg@*b28-YQsI>^5IU_WlgAY)jd79zc4*YG=5@dte}=gKP5*{p(C20GUstH9n@&$9IH zA@UmT-0mlv|5J5umTXKjM3wkVqhnK&$GMu|4XyzUi0OGfZg=teFaZatODf#C%QIGg zf?VORLooPBCxCCfJH3Nn@#)W2KsPfisOQ4Yb*HL zMZWQR@m8r=M*Qqi5DU0fpw$`QjCMX(=0gwmSzmpkAACSkw^Grs?8vW{(vcR$u8C0c zd^B16<&DNbJ)$16#9ogc_OPs+8BY(vXSf2tXnbf7 zJzOH=MFyL!pdJ@gS2ic0i)s*sw$aY;0mP}x^1}3PN2k2<#)Ws};_pGo=G&K&k2a!up|;VY zV)K;TJtx(##MkfRQ(+~ujq->_F53)2R={5q(zxUSr(9DRzTjZ{`?p8BdwcNrosm&9HsyW`zjx@vOX*Jq9RKBBO>UA+NkC83^ct33uR8!D1H^En z#=Cj%XIJ-*$)wq3P5Ezwcl0y3+YJ!1(*KdrVLY)@9^H!mw95y0YjO|6M#{Cgg@&r$ zY(kvGhjxCinip3n)kw}rp63pxovz1^EzM_SEODd`m9V~WVX38CN>j8Nd^Ep=@A|p` zCS;GV$+kxuknQqix-J`|h`y#TDn8w~*I8!sD?}_{-bLF|UaG%j6DaQ!URw-;TAe3S zh!e?btGx#`+#AB!TLW8@QQ`{6?rLauaa%K)fObtuW*~4BW1Pfg_uZ(rsp$Lr&zPnl z?TWPvpGpU>S!QVgr!}NAZpcV{?snbC{0U-ueSW^x#RS|hXgqr7F@5zptToua+!(?; z+sSIO2ZMwEBbgr)6mZ+nVSRBtG1xV9;Q4W1430WRGP@%SN({M0R!zkS2LrBYe469g zzB=u%UOsu%>S(*D7%?*yHaO_%!za)Zo$>jdP3@$qjj3K^=^83of@kc4(8~q=TQsuyC9q|@Ix+K*(OMZH_GtRmH5#8YzeihLd5 zj;VsSXH`F-v{M+nFcx$zyWd(U8ZGD-Clk<*$Z^da=|aZLrv=`Tfb4G1JyMqwZx~5w zzAq|mo)w7|Mw>8<&@iQOJCI#Xf~`iR2!U5bX34}=ZUXB|A$n6uG6B%OUh>=`b75>w z{FM5%a=ig(FwwcUT>fioTB)@2L>Ox%ws-c~?8V8<<#VAqyp|nYQw)-ICT0$-$<)%x=!4g{QLgnnjQ0xl zkM9r5;OWt66f)@Vza#e)6DHz(vU?)ALLIx|O>~Yz*Ow)zb&k z1)Up8`j2GU-;=nR!@w0#t1<6obq=Be&P3F>5d%@nP($tUyS3>7f6P2QGSbk)1^`CO z(+$1U_<02GW=fEk&gq^}m_XBfD5y}Z9`nfdSgvrwqc|(F=9SRBUCOz4^OB6#pCQYQ z#<`|Gedg8968+S|@}u_+u@#q3=9?tOb?nQG#ZgQkFfOoM)P9Vy{9E=)NLldC5oD;R z@tg6?+>r~Bi8fEOA8o4lo6tLR8dMY8~s@pl1 z$=_`jSFV~=am}8HGgc4yt|MRGqzIj37@OkA3^zdh!X_Bq;R&VN3zU1>nFL?ob!nd} zabWG&^t{fyvf9~wLb$5x)XuKc4=)D39H13LmRKg}ZeJVVx{r~u`j1Q!k~@@YGUq3% zdQTTh8X*tUU(~j=_E35{f43g#rH{`pgRsA?WR5xjx%e~J_=?x7>sL;X^OVTSivjCQ z7o*E>W@g{l7#4#WszBi>;ThAST)PxI>9|SY@~f%G)w6wgOev3GDYKng;!Dg!EIrvg zsd_%ZEd!A%VrBin24G7ZD8mIHGQR3>cFA(@)+9FPwcEv+eomhyInM3(6x66ueTcyl zHxK~(5hYqqM)5IWr>y{ zs9z>`m^VYFQ&E^Y%`jXkEl){Hg5I$8FTCwtYEk}s3hMOmi+kXg)9^YVWT42f+b+xx z%ciNxt8q(&wL!X7q7R87CxiF^C3Ub^G~ej}w?#`94%r2bF@ zkw$*5t_K3#9vKnq1z|m|g%Ox0CQ$5%f&wRty|v9oavNdw1uw3g@{I_si_rQm2@qho zQE|xRP`>^+OaU^Y3SRWyk=2xZx;%A}C+(8@%^W8npnez7zf+Gb5=C5vTWA#d*^@#Uz>+5xJdHu14wkS`(xK!NtyL!#v8gFIQriqf@Fz`nFOk`8QL-td|u2ewVy}za^fC!mUn(9DeYY=ys6U z+*a}a_Lk-+%_;18y4W_=&Tc{)PE79;}D$ ziu}}nOR1iEv87CfX#Yo|9uzxuK~;ZX@GLk#zM;$;Y4`&_F(VFTsrAa zjpVptx_hz+no|ODJZ8tvnSi5|$EnJEz{}Q8Q-#DxnJaw^ND`g*04vu37<&*pJ)hSQ zRF#C8YKLuH_~c$i3M%CMA&^DAlf`nILwVLuDvMQ#k5sVmsPO)9pSJ)n_=>iZ~vQVk77(r#573;FZR35Siz|eB5x0_SO58#blYxi zwew-Q`yu_jq!Zio3OO5c2O6|7ut)7@^!2dV*dJUfSlHe(3*@TX6EItb&{rthu()TG z#qscSYu6=-y;k!`EzpQFzB)YRTbGWL*x3D2Z&-v~EN7Qg4)Z?gyR7k{^MF5hIp+uL zqXj8SmRJk`k$r9L&tt*0QWoW(lO3FgLY>MT`?7K?@9X$wFmOxFC6Yl!eDd&6t&l4D z(sRE@9u^bkS8m5^f8>g(H7Zrk10n=Xt{bsBg=%;T3{BFIX5F5zA(&lhwth=t=~F0* zjWL@r=5(^J?_lvFVV4*IOdHumi%wjmW}W5n!4?a+de6MR^$|O#ASWl{qqKB8mNbM0VUSI~rY1+oT2BYg@tGUyPc!Q#)1 zbr#g5o!`R0?mA{tzrD0Sl974he7Wxkd9A|NfVZ|`P(VC+22rDSN&Hv^!>8liX?VS` z}`!u`1AvMKyK|UCAa1yYX*Sa zbj7vL-?$om`DZY^!M9wbe`8c{_|ba=7xg|Bq+9P&_4YCBr+;H$l~?e@4yDZU>8n^+r63z1yGe`7 zzmatvsc)8Q@6?JQ$h0Hr%kJ9{GZV6|jz$M@Mi<`Wt%l`OJvho1(7iSa-JFc6eB&a9 z+X||Y+j3)JZBQ1;e)nmJUy^K_5(QWwIA%COwiqh2-=9ksLhIu{SQah8SC1syy$$C(}|o zeF>S{rpE(qdqti9@Wsj^P4Y6g=VQ|9a-e&GRgyT<^Y1UFCSQ}YkQRPCrAZ-6kv4)` zsG|-;b!al=PU%zQH-qT?Za>Jqu51tVk3l)b2n5$1|vt%p5RMCfyAaooZ%zYLfu2ZKwbYKzaif(i$Y=WCFu9 zzNpEnatG*nT0zDh%#IicX9-Yz>U_1^P1<~)4J`d048LmkD4=E#$8RMIb#YR0eKwHP zs}rS5qOYjFs7jBFA-%4QUySt@FUY-{5J)nBd zcHcm>N1$8TO0RJ``S{_(QpLFJ^^Yj=NU4Qf@DgkzF-c^=TRMp&MZ+9ylQs0EWrxxz`q+9ba1^D@=R+q}33pD*$! zmRc&U?(YS6R;)#*k6G0}^chT*l_yZ%FsmILL6$9s(QiC&mU+r&QSZ{*DQd$l{7VTI zglJswTvrQ1(EfJz|K1; zfm@n+`Hsu(_XG7G*hXpireZ)Nd)1tQ8es%FKyALZfq&)j;UPA6omJm^TRG7<5ETiX`Y0_!@V4QNHSv0qa2l+w5_Tw$71JZ+?*Ib_t&g($$= z-JPO5s>}?B!?TTFm?*PLme@#{ZV%IhQViR1%Ls75?)v=%GYtx_GCrW;42{Ud_#W!+ z0NrC1aGd0S*aV;>E7K5jW)w0q$#g*dAs;=pqlsVl?v4kC@r#`&Bk&j<2+T4h(PXp1(MDkJhF) zp|@nWmGWw^P3iRC4JM^ldr5B5F-Q-7?L=wT>tO5|EdUzEgF-(+p%pXGb4B8k6-##Ltw z@h1J3B;pzDm|j$FiP#z{h7glrFu8jrm;~2^h8zClE7^;&_IaebgVQnPaJ~;WrFjiu0=#PdGXloLh zATxzce9Hj_?xw?M-$7WfUA0W-R-i zW_~2-pAK5{Ab)Ighr9xXKstBH9sLNLyJb+e>x$ZYcu^;irjnEiFw}jevyk$+C?r=ABO{ z@s4~LDT@~pGdmbFls{prgDCkbZX=o*#lWpsDd8v6o4NRH}btAZ(*5a2fsSm=w7aK6x(aqrOUs6eF!)0g8d4^ zTiKH*Q*-M~v|vp&%%lolEkul*TT?dImao->J~Hozs8yzUKsTT7=7+}$EM_&Z*xLI( zjPj&vcCR=vNS-w8`D{mwS)d?^cbI|h6)NH}h-_8#yAhj{I#YUVSJ*M?S(@8mZ=CKL8q(BMFBPRgTiM91xGRbaa5;V<2!^Kv((<^ zjZ&5FY!!6%UB~Hvb7&Aw+}DqSe0UfBGM=guZ9*Sk8KKeJq;aE@)~lww(9bPzdlLlN z-M@O)fLtz^4LW|ruZ=%tWW-hwVwwHlh4Y%M)7rqztL?!gyK#T2My(Cbe?(I$InA9~ zLv|3DNJx{)7egyuMt98gopFVXWE83( zY}R91D^{!_`hXdt#FVsEt@@Rd+0)cny2PGV%FqyO_A9c0A1fwyw{SEygET#sgr=#U zg9~IEPE{gd7g+N4vGi&gzn4->jF`dHbkTH7O+c>N_(xuN$XPyW`12}9IN zII`TWWFN+4ILfygEDmcf4>RCrPi-WuY=Zr)ysMlmZv;si(BzZq3PvzKn8Zmy>jHiw z-tC;m-;k-Xs*H@r==KzR@vj(U^YFb&IW{M(B`o%ctMa73Uz2 zN%<^$CIRy`K&03J#3|vqO9i)pUTsW@$KAqG=j_!^Q5j%4Ijs+=oFi*mqz}xSSRPm2 zex*<7sQh;Jsl0XE)JU}=$x=A)f>;ZPpXwV%n_x?ao%Te}uU@~$eU$1cqrxA59dGT! zz(I;6555ix&Ginpj_Sv3PhZ4!Z&=k3hSYOANO&@-OLE?Zlt|;5Qi1NkS^JqAohnn1 z4qwEGzoli^;86jyvQyDG(R3g2sR4SL#b8VGm6cU6;^=xRc{I56`Fd{k<3Xd8J2s=b z;yfyhnL4$tbcvztV1D*^9qg0Y>;D^;ZK6(%WUw0jq_dc;NYeSclbZAtuzy6;}BXf;rRBV z=r-GR1WyQ~v@k%Ux0*8VDg33*pIpth3c(J+re3u~4? z^DEuf%MgCTE=*#q{){!D^PkN>2ea3HWAK~crNvUy8Ht3FCHI7XyZo$4h!Ru&*`$0Q z;rJvRf3`rU@M`>?^ateg+MiRWp4tlpiXw`U_1=TIKFpeKl5L0Kb!RLIkqCC2Y zkY_tH3nua13eDpxLbVbH=vEDBxabUkjsxxtLpYwi?Ew=?=D(DnvhWki$G2aq{5+?{an@8(sEPO$0LC3TMeysheBEO8e zx*8-u*PtQqX{cI)W#YIEBmmK8<3xf5@l;EG`giL z{8i+C7q%rQSe21oG~KfNGP zMBsF;a`TDoQSJ}Qh+4tj8~N%YB1*^iW_5AOLJbw!Xx<|$BaB_7!c&W6}SfxSq z7c+qWk)#caS1yfs-46U1u_$Yv{LNqrwVOT_?cC?2#Q`=hP`!gSU06zp;g5H7*s$VF z3LE;#c6&FuBPV^j-Q!MX6bG3&H91-p=FyR}PrO5`RS2CM&f`Tl?mK_*-lwVj)ERgz z%?X(Y^s@}bFO>)z#jwbqv-)q&KfF8VarMA~hJR>SY6Ve#S&a7@sG5I2^gb)B0Igf_ z6f`;>tVPT@SdP5A$->z^^DcYJ z>OpT!hWJR+J>~EA+dT0m&U?I5&ThtoYmWj$5*l_FZ-g&CKlyH(EW7z{7lSc)1n`t6 zi_gyp=imsY6g@mV&9d};KM_!I#(EH>Yp(r4LlR==AwuTz_myOC&X+0ApOwzO6{ei%sT#Vx8#(7sPK#iJ&q+Rxvo@`ZrnZ4Xx|HJ0%FxUU>OUPJ>u_KpdkUQa=;2%345TIf_=%Qc z!~DZ?<2YYiH)$vJ+*ONT`A$Xk+t+|eeqinJDRqOh?_TvSq^Wu5^S6D88YT8SWmFN>IS_M& z%6Poj@zY%q=S$y;6+pql{{Oa%*0Hhz4n8{@;MkTGrXq8>)CH zb|v2>PxK#5K$3LF_Weq(b|?+Dql9pD2ID&)H&}dL)P4*?RpUq%%}Y$68)OM$6|UKe(U?w@Vsy1oek<~p3|(v>9nMujjsdbRZd5qhAo;Ww&yK&euR3*Y5G+NTur{a z|3z&T-SL+0gE~gvK)wpVi0)BSen`7zJq+0mhE-RC>~jxLZefO2#R)J49@;Z zO>NemvfcSbfAh`(6vMbx)RhNK{&9Oum9^u-*Cv?NV7#HYE=Vpw4pWk-Z-wrzJoQ$G*wxM_!pqJ?*>*Vps+CtiVK zcg(Im(-B(xs$cVZ>1dA*6!{w(W52pnH|H|~rFXFx;Bn?-Jaew>4wqKVT;LlqYdb;( zrtX#~#iu#x_lyqRTGf?=ol({9mA~8$MbT?b-u2t4)_?LZ^7;)rH!G%`mpg5)z94YUzeS=E zOQamoH1XMd)MG)No!yWfl?QQbH2KSa9s7fpmIe|09|EphZ}5!QJcn2TzwfGJGqUFp zLZG!Zz-Z2Fv8B~~r23Y~F)zI{OrlvrciTfBp0MFl_yXq`D+0w_Ekg2}Ax*Fs?m9^4+%AcWA0(n`$6lPg*}c9sVKpd0MH( z@o;<0YaZfQtl7Uc+GYv0mjCQELZNn*68?&(T6*}m3XBn>gU`|MJC<{ea-+FP0S=gy zcvOTM-To;VrXKRz#x%DrHT!na+mE(PHy-YEmK;oCJJEVvmWn&-^reQdwl_kiJ&r7)y$k7K*`WHV-zE840yEDr@3GaE$)qs4*?8xP%_F8+O^iCme#wM$)Y>d3FKZk9pN360vHC;gLy1-0+s=-`Fn zxa#^6$hH9Dm2CUjRA@-FD+Nh9|B3l2Ah4)cX-o z!q*k;5_?>1QH5slPMYxu{t*rM*Rmz>EqQz8CnR4M$&ucND1<^h4!E+OAb3P3*m?Wq zxA`9=yHJ0+QG>Qy8w(MpS-JteW=M*+Q|``D^V zdUmNx)Zg9Qn<(Nu<8HuK`NsJ6o;2FLlfv8PYb?Za5OIC8EBl6%m)ZGf0^uo<322vYA>1^^5WC&Uh35pD zMR`P20@Yvd@!y+jR~?H%^AC&5j=$KK2utj9P-!yH)yHRs{?lD#(mA6QN2H1LGdpm` zo4()A3on@kLu*za@v71-WHdVB+IQ#9OL!!5v^A#PJM`k^C}l63c}LykfB~wFUKDOW z(rqRFVj8)!3~f_fqyP~d&OqukNo~!~#|D&gB4h%-F8gHMMtR);7Lsx4jYdD)j8}GC z?sI#J=l+uNxYbIKkqXI^RT`01ab1fUd2C)o!^M9jX1*~BI6pu9Gp~Ek)S5*YBF%sV z85DH2fM+;9LhksqwJy z2V3-Sy+J1KbaeSRdtIgow!O7RR-Sva6|hE8#vGCUI|2@LFcbgv*()R&u;UUyo{}+S z2LsCr$bHL2{6=6}fU@f_0mkisMw=vU zmwRmU{|Ra@RK=Zb1zns5Q^tL$FOmM7?~1FkJvqH$5p2}--p1z#!#}#8k2}j=jQBlm z9d?dLS%32VKN3d#>P*O?#gh`B+z{X61pYpXXfam{7;Ye^q)#=69ijc<`Zcr9nAH2< zMo(Tj`I~PRm`I<{$vSjAi-~zs1?A4C`Q^7gM&VGpSq|Db35m^H^kycWY_<6Fk?eV+ zj}C2rxJ684OAik&Ef6olYfaaai>BGNY8((3(dKajspc^2}+t<*;RsIH!NxzbwL&$S|=-)O~M7z=3$XN^HO!O>8p&W@ST)?m1v8ZeL(@it)Mpx z!TGcz!~-CvYuH7Iw7h>QUcY|O-j;ZsTn}lON3v)uq6dFvA!L7WX{7_HfzOk$3-Tq` z+FU08TFYa-47}}}C1W+#lzuiZlArwB$3q=OZxzVbCQz72j62#$l&@Y~z1G~*hfpY& z_Mj|x`VwKlMteRSDa+OeLz(fnYz~TwyK~za)W>_?`!kx1QBvjE5T4G)j^X1Y?I9io-pR~8BTCtDSH4QNm*3cMnx7EVjamC(*Z1cR7Jyx$Z zWFE7CMDH9Qb2Uec!ovZkEWB9*Ma^AHbSvZaa=mH3{iQGSeN2D4N<6jK(l9PxFz{`}Pas{6vT^8+!;j}-GV(%LOEexR}}sskAz{`t*Z#s z#bWd{f}0(3`Tc2yZ}#`!X%c)LXWyVEo^f3wp|=FhY2W#Dit zrM)L-fgDetpp~P4YjsG4Yp}+9vqnK~UUB^zJ`a$ul?J(s{s|)lR+3(cTH9jq?-r_e zKQ!+V^tO)x%V|@e>$+O(g!Mt^FIZGL5$qbsCW`=KHkbZ0Hkf1)T=z7#?aE#kE#3Dw@?cw$x|1 z9JqfH1$wI^tM+1|$P|o%{g2+ggcZi=Cd8Gg3O8_ioap7eXujQQJN@W>>%Cx!7#Z6h zAx)*~eJZN)(gUe>uegBE;+FwZD)RC!Ehi@@-g{V$&*H0Qp7{N%PFXoq^xu0v9v;H>r)!FJ zV?NVehBuv^Y5DJS?3sfg3}~Mo2U!L=mweDA4A7B%l?K0f{nD%8q4gUVl!nisSnc5t z>_N=c^WE|`<$h6IwY;Is$Ny1uC5}x0Z(PTh>RTk=3N@<~-wp}!t!Y+KIv=t|*YgnW z?MrRym^APsg|R(EhCK`L1lA)cX4ePT(g(#o8JknPU?!*(*O^p4&s_;bZ;WKi986 z(w$~pArLG}`?e+{K2Ad9pRgwaM@!RFC?j*{YTK#V5s9rLX>0 zz+2Y+qo(x?671o5{J&e)Eqm3irCOC!VgpUOw5h2a^2_U0T}rgPrm* z?@`#0pf4Jy;WWy?Z3V+`?6JxM5D)fpi+o7QHb#ZD zco6bD=;(QTD6WB9^+vt|Z}75<=xcHsQbKZJS|b&TC%lS|vl98sf1bMhclXkUac1q@ z#rtk|TA_~B!ELWHn++#cTVHtb*ks3fx2JDD^xMrAHyD{OpWb?x^(%WpfrYW$(TtP& z*$8jTeOO%mQ^AGCT*I~Y%2Au&FN77j8()xCdq8Ddn_W+Ax~d~}+K9f{ZjjASV#1NG zhWaP!NGjzgP+tH+f`;9q%PQ!52|(k!o_|pzdC}oxjbxwCgdvhr6xM`upkB zS*?RHe({w9gqqB|QwCSrzW+Abch-l;JL^UxY=C`K+K)AJgEH7If9*^8fjE?S?uka> zr{4=xG0?TEWAxHC>uxh&xBcMxpJo2^a|hIdDX*qI)Q=1wn2Hz+2MydbGFrdcG@F$3 z>i2uAe>6}aE3Q&!i-XoV>*rTe}9qPB~=frfhcW{W`7ws(^E!|BWiQf@t8;Z z_yvOU=F#paET0D7PUmB(Azs*w5{Eo4$Z4uYDq)ov=9y$RVn?usaME`p{2t9jCIOhf_euE-|vgTEwm z>lyRig`RV-;p|_SI7^IqRe$Ah%-UvNi5~Jelh642Mj)KWZjtSwFQI^2*c=t=exYlki#(mjge~!Twc-DLE~}E<5w%%}>kfL~VM#{{=Q} z$y;aVuhFje>ha90>P=?M{JpHZz`z3R_RYr%RJpG#5SF-%TemXy{is}oa2p#=&bVKP zOfs^pp?P|}plB=@JXWAEl)EdS!>|tuG(!#wlj+Bzq12r!GgyKpK@9;cP1KVGBH8R# z>CECIy|%hH3Dk=H;W<=irit(VueZ4chuj@mft!LFM4L_;M>JU$`@YQH&C~Av4&7L1 zv|dwxxX5iaT5WypiIZI+cdrs$*(XMO&G160errK5w?bYs*H3^p#EAJ(qmXOweTKSH z(CyKYmY5Cm!~Y%rSHssLW7~PS)?Wj9MrKL0+xvLE+c&nGy-jof|El)a+5&-q8KkV= zi47t*Oh)rTUOcCU4`STtsAla}b!7SMO}7?@V{=P08Sl-j{>9q~btvDDNJ&S?rNM05 z)s|;ELCCGyZ}Q)1?>K)_uf<#=z#8)cMDUnK=E~%Z@uqi9X%=q0rMl9khSpO0RWH%G`8Yf(QIcdy%_S zcE$#~JYa+VxmCHr$*}2_@Xn^(l zh0&!!mI*L83e(+0g|1t|bIC?9lT~9Jdw6K5KN@jN3iqYURM*6q_&(pK#Bxw-{2giO z>eo*W#T#f+7b=FAn<5LvUZXibz1*m)XGa9Vo`C$#ix1Yq2o*2#S-=>>v(ooCh-03TG`cLB=6Sj_ka4k)+{&1hD3}Z(7d9+6k znt1rczcIRN*Q(vP<9XJAaUPdQZ7n-%&@4SN!J7vTuwNZxZAA#_WxFx?>FgrZYlGAI znYx?~9Z;*+zNkt5;nU_(Ql5qRZyu!Ll?m&3xDei>oX;!cAFg$+!wvJ~BnG=I@H*+4 zK-43kQ{~Fa@`N<>oJ3K5-)RtNHjfkyf%8@-Nc38iiGp@kOOwzoBa%};s7GsIQ3jSG zfja0;knRa{y-Ff?gxo*|d@+Olxp95MBXU@;rU$L-!t@CE5`wZW`if zkHsXma-}oVndA9ZVeF2lv)K!*BJSV*_`7rHHyFAeu3@SmCBx-e7$3`$fWky75D9W{&{OV#`P8^FAVW0`Tj+@ z)~CbcThaMU_U^qA^YqZacw7-{AMcE_`K?`UldihEA9+BoUwLQs-T$ATz}l&EOBG&S zcKR1x4-LmeUUy%&Y&($|*c}*1SzC47=fzsWiQa*mi%0rzamTCAYd?rD%>?CLD`Sgx~ylsJ%QKn;nXK;;9;SoMLRhRKMM33fZ zyBuq2W56k=7GsN51Jit(ZzBVz_*EI|@>Trzg5hp)ap0j<%^6izADau4%SLi<2@K2; zlHCu6C{pY2_Q@LOvRmv9Dt49+Fm?o7ejJ3&y-S&_Iu!Fqb-;>Be&=rUjuu6jJG*`ESDX=45vao z6cB8P@5)|)K>&QYfjSTjI7Oug(`=9is`b3HC}Tkqs(eG~Zo{nxLT+NK?|>JxLQYyd zz9q=T!EO7xdmE3LKXwptLU!M^S%!|R$#04YdU9~}*45UweQHkGXFWG}y#Mecu02|> z^Gz(c^Em&l0*E$v%OIClhD@GU(dbpFvGbcW`Vsd~lV1U$$@pr}rAO9uulmmYoC>${ z1{$T&?lxXv&xI~c$#n<9dwU|#kHRY=quS8{%fLdzE&_*buy|n}YHj|PK=DayPb*JgCYGTlds^tN2{ z*2vg<%02_!DVzCy-e3)k%7r?d1!Ol;gDr*IjiI;4-GAp043{sF!t&W9hKR6xfCby9 z@|Mhb9x(E|BN{|%UIJVJ<++m6+^wlJ_wwCApQ7bm*o*(EzDS++P6%6mCfO!Ves|yjt z`bB@Z@@s}KJTdi8t@yui(&Q_)HL`3OvE`Kiu}Rz-?Tt%(@Vd`635>x*jg>G>2Jv}P zi%uq)JYsD>-?@T`j_$5v$*r`s{!x;o8axirX*EqFr zO>p!(Jy~abp_5WMeD0E>kvIZt^lZMi?ZNt0?m%!o>@cNPPdHQe<(;AiCg{EyH>UCO zIsaV+sB-NZP~Hz#*~D(?vl8mXJB9c6c$wSPZL7Q`?Q)y>+ru1x;qza)+lmEeQmnQdrrW|hM^-)f7F0EdJ+INp6~ud3%=@L z|3~dAaix=U2`koVg(r?X)fY|-b{m7{SNP0@xD)K`@C>&t*|U-?i*lwjbS-KdF$)UqTksiE4Jz!2+B7FC$n#(g7 zM#U7v03!D_4Df~1fbCqyY%2GTlVvw{g!DK)w1dQ|ZCGyPve_el)cTRm9J@biV*6G= ziE{Ce+CX^4<(h69hb5EgPc_0VZp}$wl1Alp(3LeIF-tr=0}OI`&@v|>jY9mWuPv0X z6oywrP&`)Q#4={~>|SuHD5-0}{6@X9fC=ebuqF>}f+r5PcPf(!TALnRvn(}7_BI5kY}IUx)UWqH7m z6e?gO^AVhBP+(Uo_SsS>xC;NoE;&lk^!s+{70Vsr00upct5cq(08aR60Kl&l69E-_raKdj%aI0w zP!_=F(^5^^mSM#{IhI18U+3nC`lBY<{YUN3u-dv+YgVhn)L4xoUXkzYRQZFM=|g9= zMpTd=jyA9%e%TBf-(vgjeM>5$f=jRu-eNtqfDaY*W1^q%^999SfyVlL*(zq-aFReU z-#>%eiuh$a#;Sw>y$Zqbec4% zv`5yay@F|~KASazym-rvR{n8j^uBaTHs#E5{g^)AdwGF0m9bul(#D4hdo`ozJ~3S*^=(uXcc{oVedF@u5I+8YwI;Hq0j75}YWMOO-iQ)(CkNB9+ruc@vBD7VlAseIuq0|(B)~y;v6DX<^&Jmkw6JvR~_6WAoL#-dHU`PL`ZL@^J zIfB$9h}Lt#!FNEh)WRh;gW1fq1}<(q@bg7l#)KEwRCbG#!&;b+e66MiU_F24{8;X{O)WGXio z3ljmVs59*`bl=-7-=X|y-nEW*BS$6eD0}Y{H;4oxQF)+c5Gc0r;6;`G&1|~8nB~j` z9sQ56$h1r}80yhaJejY;Qpul~Nj)1$nj=)2bQ&d*+65dm15TNt9dVRHxu7eNHgiBH zx$apEpT#m16LmkljIVB)C_=jTZd;5roDT=0N!%Z`A=g|xq?t$n(~~&_+JKsGAflFvgMK|f#zqr}xpML~xS|*$- zI%5pQGh{PJ3%Q|vLP6i-m_kUVor9`jy9Q+n;3yy)m?1aj=hNBxl^_E;MLO+4xQ`9> z4PA4_#9uQT!5%5hhkMaw27;TfW3dTIUxFr#?)_2Q1b?YCTjA-oaJYh%8C!5h4vo(S zCMIE;xaRP$7I-a&r~5FKi0xb(Q*D-*{|k^BW$C;L$k5(VH-&Mkl|0&tO7YQrv{_4DFR`U zgS<+A(9-}4Ra!RG-j%`1RLX0O8PE>ZHC`dz9UsD>opOikP-pvr(F6O(YfOSccTj#bFx3fbabC_+EooiatP=#($n+d5V0TD|~p0=}K*BI696 zt>pX`x2H@f{-||IXMo*y_EW6OyMR}l@q9hjw^OQWaBb_d$KoG@L8n+Q28j)@P%IdL z=bo||V^|fiO)_q{Q)QYs1qk?)ehV42)@l@fzGr(*f4iX`7Ek4tp;>X~Y`Fz9*}jn! z-%h73Pe)GeY;DeUpi^)k zx}zne9wwYFuXzY(m+W|u<@Pp4#9ctS#x~)9sDK!~Vp%g7i!W z0fX=2mK8Ob(56CZO!X#Q1!Z}u9~d1hHru@dB=PR&yk%gJ(w#uF<(cjJr!Vyj=(9ao z3|a$D_eN)4IZm96OTkYR0WxKv1g5!H<0o%xEU1JL4Qbd-7fj~{-o~@pGS&;u65o7~R z9o4VeE002mfogjN(;+YbQyi#N+4%~_7Z_E7-E`!IJcVcrh2>n_N{jx{ z9}TxXtsAIdTtTG;@Bl=L+cr&tiw|d%-guc&9e^7KPmlt72Yb%KB4xbp4>M?8{7O75 z(JROZpkX6;^f+79HT-PspaL>AZ!mnFR~BibAMe3(w3mQqkxtivlbY~G$7WOj!&4|y zl(3}xEi58W4z)O3NEst&1RKvQKqw$JCQ5j%5FmDve&x3lnv_k{M&Aqw039BM6=`n@ z+2iOSmE8s+H<%&rH6?}<2a|QBbllOwN=o4stfAHv;N86a?C)jOD1*y_D#9wDrJ8q_ zfF{PiEFhGJ<3kgkcB~-9zM5p+S0!Fdoif1X3 znJLiG9pSUQ3eQ;h!T|rFaci;7s4$}Bs=tM>=O5a6(j5R;iLW+cbb#z{xgWnM3)t+I z>kzwppM=kH$g?fojjJQ_Y@ld1C;O%p1c@nZJ(&V%ad#rFv-qy&G;g%c z|KBZUO9Q{GUg3Y9NNmH5sDBJ}A>p|KeJQ_Uj7WV5A#(6k`Kh8SmVj;~WlA(`vBJ}E z!R5HOXC2+~PG&D)#2bv#2I#=XTSX={dpf+9OF?Q$lR&9xd zaL1~a<{+7$r^EFab(Qlym^u|y%!0J%qQO}D#EEF!1@bf&v^C0}xb6l5D zT0<3sHiG|!r(RHl?mbu1!-Xun~&y!Gn?jbDyGWQtr6fuk~fjt3&ZtOY0erCx!UP6 z{x%wgdZAw=QK?qunk^nn@ChljcraJMeR}|~s}Axsl8YT(%MF{cq02#?fHh?nvoGc_i}~c`R<}<%(?KPu}Q_Y!NBeDR&@R zg-nUa>Un0fcs?-qxHVxOYU$4`Yc~V322hC;bC~tYh7KT^Xh`{csgI}Abyz-v3-{xi z8m5y|-QvbSH0@JbQ~&8b)I2(}bU4>cpn_Nsb`;)`&}aL5g};`hzm*$fQGN%8^(@)_;*?ABmiKY;zMvkz@I48S+OR;X? zdSae(rPY+ucz%fH9a8I$)C24UIMNY$WP4t7)os?xXdyavIa_C-85LZ zaXn5pA~(x*o3Rrc0w8~oc&z7AXFy9f{;_Q7x@h2mXOvjk#0gvB(+>|kzx5!)C_472 z<``~%BYGBjd9wmq$bDPk%aUNU@D#y-(Rt%z*;3V9Z*FNkr!bH>MVV#V_>A^)E|Wrm zc1~WFfYnNwo-XI%`o4hH80ZNf_pRSASb;oyap$-&MIu~@3jEvp6GY;5^2;iDOu+D3 zo!viU!=J}!uLPlkCsVqiz4c$Fj2~H~S{_`V0{mOH+}nP>J;~yI{u&|4fI7h%d&geo zTuAZNYcKY4UH4|H8LKoPthszSNbhC%vc`mbDS0w=TPeX|dLL=1NJxg*Q>aV5O_6pO zpnH)xX6zfvuGk8LW3t>CAUUbk@uGe8)CF;P83tJ306kjRDNC6-|58E9D);8A99}=@whpLy zS!y=e4yD3ChMunJ#n{5C*?=ir;a{)p19g}mfR^F?bC%)k1b4N(OJYXeH&!d+ zZI}o@98~dtaB9lc@MX);-AP!Wp|OuI>nsf^`@bDOltVVM^xz5P;*1l}KWbA<^kK8| zhVbG$ur>Nf*ESf9>NWGhx-l?#Ptflx(HIV$qbKT(SqQF+{jhm!?PckM3J*lx0Yi@V zN_$E0S?IFt_606mQ9VbaNk|~e(!R?=U3`K&Pp1Ui*dW>Gw>t(onM|KWn0&pcZUg;B zZ!HI19!=8Id)T@6 zWPj~qae7RatpGgBK|0`<@NoI3u++_Tnj&0&6#Y_BJ(k=*M`8;E`Xjc5m#1mT zV=735i91A`wHL9eftIterG0}#Fqa*SLT`W z$nX&b+P{z0;yktzWY~cH_m7%}T_p3U>XW?vhwZ0em*Kmx7g z7;3ys%h3*b3Y%$5s91D$;Zr69eR%4FfZ zA7l79RRsW2E#v<7I zS$j0`ja95q)apG)tvBVfOI|Q+7C9sRaYu{$AT-2+GQ5E82A-LTX;PYT43uEOj?A*$ z&Grp6Y0-QQiRsiU$Ky_SrRMs9chW-UC?VUTC*zbB zDfl`;aixc3T8twqw;waQ%JwuCUk{VRj#*DKzw!^v8?rLU7A=RUTZ$<6ScCU=s3 z=vPLM3&85uIln55f z=ajM0NSb405-1M1Ng>utBFD8mFsp2M$tqQXvvbHUseru_m2NSf&3j+487F|TcaTXojbb;tq5W|ku*6p=Q50}7uM)u z87~4Dmfi!ZXuEE**}McO@;4ytbbAXsNua;=wKlotZ|o{VDdWdVeTEue-J>^=*qr7M z2)TJc&a_A}8)z?`vE>wGp*mFnE`SdI6D~vg2;d^6Nh=DwEv>eTpJ&48-NA*)H4MqU6gJL?t`PsZ?eg-AX>qrL_*mYWu zK~ug5`(mSG#85=LwM_rSTZeIYXy+-~%i-0b3(~T&;v?}t%Iug|gJBg(ON=jPB=@Sy2_oqS|2#mWQ`flm? zRJ`tu#$1fs@v27Os3RWL;;9>5e*==<(K^!vGX|yBei*3eIyYQ+#UydB*>OkLRLU{U zm!f$ZFxyR7!VY~&ceR#@V-UyEElORQg4`^E+y9zo7H6&h7I}|{$(WmikHIo&7Z0rc z6lMtM&)>dCCdZnB zy(_(w^~$Yd8U2kWue{Ix)PQSoVHpp?mQ^FxMUTbsk$3rB+#`U?jY^@NIWBvDHF}R( zU-+-C_I-|fkGTuw;%z4glX3X3Wm4xFg9!^(Ua9BICZDzohz)BWYmdF;L&^_$j+wSLkr0rmaT8Ir ziY1xK4@fyA74hRO*pSinSKFlRej8)4-agfx8@ueZdjTdG&G9-nT z$Exsl(Z(WapQRu$Ce3?fk&9nD&zmO>`xU$M1+087>^cADrZ?c?Ww1d#zx3}OsohjF zQa0n(CLPP-LFG&QLM1Gl)C1hj%j^|-V=S6-PiDcy?q@{4;2d!^aw@Ik5qm34^dMhS zqEx<(v~vlv^m3o)Dkno-dP0L~=zRkYxq*O%h2HM7rEpE>M1s;_?iTx`PF#JJYFwkN=F-fV_&ta6(z0x3sjd zWBNCGW#?!i%6az5tA?P(Y~C@xt`rk0fdrLjGlPLrve9>{KoL7)84u2QQESPx^upzb zSG-}L#v?!7qZU(LS8 zB<~IgxkOPPO$}b^sXzY7Cv204OY~k0zsu>`oQm?9=-g<2*eSmYQRp#O z==^dkJL|8^;)cNknEUNU=umiw#j{thy=%ylQ%%=G{&OWy?aTJNzR3r_reVS?ZM;+fd|Qa65J>fxdb@*n>YstNB9rz1(jW#++#*S??LMF zh5RvGLP>`i8(i_M=!lIV*w4t%_(=QBX!_k$*Ub9cm2Y4=N90+EpEEnn48aW+B9;Eg z5g8pnHO4J^&BnP#n~@@5k>2nuSR%zMsIzfIBm=nnhJYc9pMvE=k6ynb!F=3^p^T`H zWq+`Px0Z2%2JH1>1D$MH)w}4uG1PwH8k&m^}(EY2AGg1kW8E(@~putq7t zT75D67!zC;iJRD>F&>c6Jym-tHu~b54wXiK?FQ-G=FPIHcf~<_?LSBXuxIRSW1v;7 zu)NhGNFumbX(fsj&H9(pBO4VzT)$$^XH2XXD_>!)60G?)*D;5m z5JLT(DRFK{&{^$hxPZ_6hcFbTzvS~ea!0$(9Yn_!k9R)j&VemE@4xrmUva@zfdY)S zS0jDM+dOq{`<>TC{u;&a`2D`5tH5R92U1 zf9QmHdrx-k=!s9hp}%U9g1s}fmvbqV-n|xk*QM>q9j+;zE^cSibA-l>hB?Yvc2MAM z+waH9S;d9@3s<5fvj^fJEiO6tOWiN7h7YtYe{?Ku<;j{q4xS)bTMHT^dU(Na=lnJ` z{Qm#)@|s(}52DO7VkPf`bQiDwZR%?17Q}o1{qwc{3k>|n*Cy2?yCx6b)~ka2nwaF` zd@io>@ccTy!)-Zg23j(A4~nL@M`H}EXBSVplh0p!cX8I_zYR^%@9;BEeSXG}JUSQ3 zw1aL~Xo3&EsMfV?e#;CyE^5_^%2ZSjemMm6_v({dii(1h+9V3Gr|@9F!x$T2>C_=~ ziYy3^aL&p14ElM`@EC5P+kjiJ&ajabnu5t``rEY;2x_{2)YN?lpc@(RNC8O?Xyg4+ zql~0PT_km(>)vn7$}r?`DljXn87rvngvedTjG%yGaDP^`Q*?X5dRepf=)HE2{{0NL z)o_GVC0SGKYK)BY^}a??%vGP2UYV?yu%mkjzj4qYsu-A+@x zhmt6kmOE@am>JVwFW{@b>&D z#oZQ77}W7hs(-IQrT_ehij&xQB`Qekb+ct^j2Ki+Q;bj1}Y8ADonvKiRSS_<+*vAeCBnaTXSo6Gi_7Ve3wF9n= zs3#{4Xt6>3>V*a)N4IA6=3X|Wz!N^)kl;JHxzTWdV+y)<{|#Uk0e8yhOZN}mwbPru z-e1299|}5bgl3%Q=Kr$=+Mvpbz&j0M+vW#+&iwniXhvbe8>^?jhg@U5swj{wg-xL56g5HC!Np760Ymu@m3Yb)Hl# z?(M2K%9vP+DE&M2$t~Tsw(P|3+;+c#sqwD@t83`QPP~~TlQY#y@mDf`VT(QZrEwXK*1>|hPVrL zpLD8zSoGAc-IKrBK;=>1{;_^r7wq5rm5Lvk)fd+Pn7;4*DfV^J=G3-TekSfC8?{L~ zuo%GQ+dCwO7fq}@DLKm?HL5KRvi8K$wlv1>ITg}wF*ld4*RtGDAapeh!@XUiQ#njj zvyH~rWLPKo`L?H386Dc9G!NW->E*(2m1)rKpXfCTRE9}4P^@Ut939xw2&GR$w-Z1y zrn=op=aPnXLi9v@@n5CmKFcXoPzEE3Sdxsbeu5eLEe-$tV6% zi#ICZ<=%}!x`(l~@hlOxhGCbbfR2uKmu!6o@&#)pO0?Q=Idrb+7;I1@e`eG}M?w!- zc@v0T2SNAeq*di&TScihw^3*HB+}bgz*;PTELwFW2I(EwM8%|N3&tu;)I`Q|aSu2& zqO=~+=odCFD0X5IBVgLeQ=%*-5*V;0SCU3@cgA3FM>T|aHraH2uSGiNI3S7lFpkS6 zZIoB8kT!V+{}d}5f;cjHOikl5val}J0VouQtLum~-1T|9ZwFr)V8=S_AVizZ&H`+tj_ zZ{tlye?+?RCfTJslH&u7y{~+Voro%L3f?zgH<;$p(oo*HWen+sb*&0oeWxz7()j!8 z;2ST_EC`Bl^`)LIu2tfLZlPx|=!enE;n2nMi_WBH*V8iB>HSqU(W2&Ht_$+{8K%wI zV(f%z);ZtHgcpQ`W-@0MvMgV{w(dCdgz>;H1J|l}*3wwzfN#|n` z`!OfaiDXaT!V`>bmKh;ICV@5HL#wUpdBN}VGBX(N;x*hEO^8?ex7|SFLE5SDVcjgYkL|+HRHyo{}q@R${w<&-}8{z&~VB0X5Pbi~lQ(1xwZcQQ(}KE)fXhc(jNeT(bUuH%`}DNTDU zt)Ce?*I~YlF4KK+#6rqr?g;zzLh8`&Y-L$Y)O21Bfha@_;prZ}b9=i$^kK*a=E1>O zYorc7jEpF+I^HiSew%t0O2rU|jmgii11!!|Nfv%Pdl;=THpjGNc!w7!D*#T{7SQ5u z4il=@mzC<%;H__Ye25f#BVKC5$!NZ$I5CV{`QE`T&g$<*oBj$gKDjs6P$6dcC?TlE zZxTs+k`BAPWQ%OZAg7arbv)i8l(aVqr^t4db5N?c4WI`C)hzy%c!L_8Z+!}Qst=@~LT3&AFrq#?J!@$M<`DK6RG6gw^^HiHy^M&TZn zG!N*-tXFpk`HTuDBD4`l;Orlc-5H7J5Qq1ldw;WJXxChA^>xxWgsHc4a9e{%j_YSz zH;~Qc*s>*uDKE=$@zt@Zg9lC8riX)Xf~`0v_dpTM^Aj9eZR@W6et(~-T|FFBIe6_{ zI6*^8%S3qgqR)@|JL8_$6 z&1POr+IdSl9MjO`b6Q8q@8AVt{{1<(|9aIB$3va5=}Ppq z7>*Dev}9GW^ha&aX6IYSLT{<H4`W%wvUH{}jO>{S*_8N8#Am~B)Y7%^oEErVzD{!X5YkRrwyPP@{@ij^qUV4u%7?h^ezy#Z1$ z%w;utf}#nce&>`ts70-S(g z%P@MZa|$z-^Klh3s7wWL=8kAauI1CtGSxA_H?vA5x?Y>OI)u2@+ccxC6om$$T9Z^ZlwccWkzZhtCcMcI=GutL6Px| zu_JHmkJuetvy74jHYOD|a^5t2wM)sTw!!M?wk`)9TaME|@dRnHmO)o)HcZ**fSP#e zg{>|I$Ev^3E;OysQY6wzRG8;e=2G8&tH;D5(=6RxSpuey=abpNHwIwd?l&EM#q9dtW~pV`0SWc71@5O=SuzqY@%*kxG<0pyz`R5{GzQY3-@%tqVc&Jt43fqUhOi=Fx?c zSAc9c^WNIrsbhwPiC#4Y7Rwdk)Mum~e%XuAs4r0n8tCp)*t;g_$>Ywu)7F<;{PZBs z=XM;QzxgDk+t1H=v{M`Tq9EZ5y(_`bUym67vh7p}3)gt(#kH;ubM>p4pW1M_{d*Pi z&CRO8w)WDCt9Q@Q8O-6*QQWi}reiKmng?7c= zf<=ynK;o&mFu}51eA^AQ3#fq}n!RtGC>}oHRD!t-+58@#NGmSv#8ES)s2;>3!a%9n zYmH9?L>7T(2VYpGMlCtI>yhuVkN`*}rGvfaz$ z8e$+$!#sjMRtr-lLy%KzI#kimB2yF)i~yMjC<3)O#q1SnFGGUW;1nAWheWa%aUfx- zYfEel!CH&D&_B_IV4F627_ucXQM~sbBz#ij|Fy^uy5uR?2;)}iZMLh{$b1_%etsZ* zJ8lR(+>I+B?ZjXJF2Bt6g-=hN%oLxHdr!gxlV~1FPC2>Se-DI|fm|4PA9z8c{OE+_ zfQgSwtGiHG_ikWsAa$Y-_8*O0W)GjAYg$3Y#!Qpj2Ygq-qqwFM-l2t?`{}POhIhqF z=yL}>pFB9_wI==0>WhiyWl$80SAw*}_Y;Y;-yCF5jwuAWhI+C#^aDUdT~pLOpyoWP zF{27WDQ(QvfDU2iRpIgO($_n({O{erA>xnaeE`Km+K~z@h9nUJIYkWGbFPKGBeoB7 zwyt?zg7LW!Tx0a4Y+Gk_)TF7|Lz2N{lck_$DvC02!!)UOz2lFPw#TFYt=AX(BusU5 zOvKS%?)#(W5*AR@<@r9i+~=UVz4zO*c3IOC-@cuHj+X4$8uTstS#K%GFS+N*<9+80 ziwUlRNVl}SzMI2Z4$zhH?S61Ns_8z2sr#}#}e#du3p}N=WB)-Iu zoF}y*$M~Sgbs-1Wltxc6hM7(O?Kg~#c)jg?NuyC#-3BY9>wDSju#k`2OhA<}4ElA! zP$$UoUNq_AbiE1B)6O|^|NkgD_jsoM$B%c{MI_&RTtXo}h1^oiWtEV7QSSF)xr|(f z+*XlGVM*?{MDDX(=6*>oOYVkYB<40VGd9L%pWpfY=i%?O_j#Y!<@s{2<6BX{=zI6e zB}|)R{xR$8*ZV*q0w$a!&Pe-8k&29T}+jeS7Dv_L$9<3NX9Y+vEsO1gC;N{hn}r0rO$ zDnNaeP@VqAiwWtTi)td_^~MeZwKTAn0+PM4DngSmAJvyV;VjP3y$3)|p2^B(Orq;E zM3o8%;Pmi~^UX@B9oheLC6#4JM#7zY^83iHO?!Dp4hOePea0!r8 ze_*b#MP`*U0cMa@h$(ja2nyoc6+b(fdWAY#Fm!} zX;ZiMm>YjgQ*l5nuO-OJL;OR*YymnpyQWDSym0WLLW#J@(Tlk<(ugD<9da{S5%9M_ z1dzHt`6VQZ8pObogzKjEeiyIZmK4(pAA!l*Y_6$n4RS_;*1e5KkW^JW^Zpl{ef||B zPhJ%0Uqe1*sE%8-oTX*pd_3+vrm9X5YtNPug_fv#<8ccw23ODZDQyp~bwKP3j720a z8(nrAX?-CfO>}&G4Jqj65y>GXnfCRoJJdc3@>Xh9N&X%q9NUypEGl^k-MU+FQR7_l zxV~e))5K?Nt1wD;y8D0T$KUFI%b#zX&ccyMLt%c)XKLh=2!8kP(r8^L`EOG?AmTgT zj|C+xE?PFZ`$I&1V9GIvBW7+p-_72t^PUtkK*FQ#qiTy7YLQN&pPmuC{!|3V5_od5 zlw{G5fBy*Wxx^rG&vO4XtzdvBR|8LZxJzA%28-HG7CW_c%Rj!JmCwrBfKO;!`s2$} z-dNmCDjxPq^x9jkCgTN!J{)g6FqpFuUXJ0*Oid)BuWaTRxCoWO25Wtv|NPxoaQ`Lm zKMDdK`1-q&FuyYs=k8|as>e;VU43esIFE5NOm!&J`26(NlFE4!Fbt5B-WKI;1=j)K znj8zCDNAwHCl^eSD)l#b?}S#V?GMU49{ZkPj<`K)Xxw9L95Q+C_oFpMhSSMD&4>Oa zZNbl+zkkQ-2|nmiKsr2^|D0~`sw1EQ>1D4yZF>D9XkSY2Od$KtKXOXrFW1Vjrd4JU zUJa|&TS}xikX2HPgp8C@Mvo(ssn$h{UL+PBU5{==M)j=K*NI{|=M9soVMd8#fxj_=d4k6X?1+oVIThC7`Di}N({;&}MRQ;@zfhs5lr z4L3%D2J3v9GfOJh6Kq1hl%YqHkR3EhvP|*xDOe8@3^MjTmz z%!12d9Ugsu!Im`o|Df4VNlUdm%do*; z`{=s7w2LBRev{j)P(=Jb|`ZM#!?pQdA4^cQU{p}wsq<;>x51K;FpCju*mta*wS74-&}1P@$# zYO4QzVBHVt>f-$jQA@vw12H%msreH*zIi=JYyAs%6@NX>US3lBV7_tSP2XgV+H~{1 z`S>i)W~E5mF2PIUti}_c39T;4Wg%GqhFa)_+(g1JyH66qQ=^l_9M{X-kAxYToxXJK z{I-Y>P6}e=E#+^Shp-lSSSz%1oN-4)N$Fhu)hoi^;@4ws0{@-3k-7Wqps22;YFOoj z`#HmXGkH97kZa)4rgtA(3_L za8Fy2mY_|}2-MQtAB}*SMXbNSK;;0>C2c|vwQ@CtLd8c0sYc%y&I@NGIcIEFHgIz~ z#54XHAusZmfa^h-xFQ;MkqTs4!@cL3ozc}TG#L$$=EZ>t2~BM+hPSh9fzZes+7!!NH-9;wtF?~1 zrw`u5gY-d&Z{ziNGHC_AfY)Ug5}pW83`Qb891wNSpQ8WRcdU+V1*Im+YXh*49TIV& zwCAe5Q(%5eHxjjg(_dMkY4W zkn4?ThxS69oxPZ-*(i+$^7@(>*IBN#D7DtrjWh8T+ziZO17^;6-Q z`y;ClLm87lDL%%kF;MjKp6*PZU4dZ9)HFD^ompMv`B2 zA#h6a$w}YuH-%oVNu7+>=PRo;N51So9CqA6zfnS$Oq|-)xqR*fmm%YSH0dC#jF?@m z5ZJYfF3pfMcX@&TDY{QKRnQ#!?QsL=rJO5_bLOk2H`NZ=E8hL4HllmGifM^@hsD#7 zSBA(3_?agd1anXG*D7k|6I5xA_gn=zU*=93v8BDmR50ZeXt@3S<)bk0&2wIV5*e;T zvjc+bCuK_M;SGmQPf1M_Az!Yxl24Xt8rzQdtK)b*S_Dj zl9GI98DRX%_;tH{^Z`AZRAO5S~bqf=6 zqCjpr{wk>P+wxzvHRPw&FwECFC9cnjd120`Jl00A`qax?b+Vr%_&$b(lHcc-zE4-2 zeEPMV=TCFJMi!S${H}JEf{`&k@q?`-x4~HKt!H%?aE@O)N|Vt-;U0KYm_SW%gRp|R z?WmHE@p$I{T_w`)yfs*Rkc~k3td0`q0NL!P(=raT%xH ze&CPRQngc!Cr@5mhkT)9?bjaCdX}Xn{JEKMxBS{rTYNq8CC}is{Zu9Kf1I8czQH~< z2Wz)yodx!yzF0{;i{Jj)_f+Yi`VIvZ+jUt0S~Yxk#J4?cBR5?$kv|-JO!Fv6FIpH8Nn{ z3RLBY5k;>mHNn+zz2L5>q}mY>uA2+BTeYg`adGQzsA8upkL*BAsE zp=#b4im0LBn4~`nt-D8Ira43YOZ1}-S^=`#<}9;@f}hXh`Bk&fxXx*Z?0JfH{1JXQ z9!zG#6DE8{)&K%gqL&WPo&>QvlMDQO3*PWHVof7ENA!vuA`>}$OgI?aEhk=`OKj|9 zSsax)_3^YML3mq%bA+D>k8}L*Sl7hfWT{OSAY<3zAEt`&SB0L5Jc3Kb6WNH^%%KHw z;CTA%Wt$UVDgrBDc!2f@P)aUEgcQ=0%jsqot;>Z^U$SIxj;RHHa=$QIZ? zzoxK6PR&4^XKa(L>WbYQ=~mNX;%;kRzd;&x4a5`CGCS?xc$i`P`=sq{@_`_Gm&LHI zJE_g(8)HN(KF~C8K)rS6+f*6 z5C-HarO^UbJ5`k0<6~0We{=HV?A}j+H)492J@8`xqro`tu9Cf)hA98~VX`^fq!RY= z^jDdq>6EwEvNDSDEVA?SbE-3&*9aE=eGN4Zr6xZNdl>i`QlGdnea}L}xJlOC>)DCc zBJDl+Kxpl`lp%9-sVtRqqG$8j4#!qX6S&y%7Fxgcoy6}91B;;LTB?Y-rF_{!+)!|8 z+(DGMjNVDd)U-}pyn0rjcxLzLX_8u!NQSri_Bwjt;L%i|D8Jo@Y15AWgZ?=FDL9E) zWs}eI8+_xfkon!E({GGTQ&VahI;DM{I|pj1WI6Le%KJAIuup(#ueytc^G5#2K`Z4; z&B54&^(I@J72@Jj^~$y8hg0&a4L2Uy!O!){w-fB(JFyyTegpLzK{pCkgLkOvvhr>) zt{k4OyCPMThU>M456D^$M>le|%;&<*2WM+9IwsT5X|v8MK&CzQO{?9#SHe5yLbX>u z>V5CAk?C|z^P)%%w7A;l#P)+pm#dhmu{xGvBJd+*JET2D>HDo?~ zJ!3_867s^vp-3Yv<;7tB)<}Zz&g*=B-aerBo^s|}VNK@sg!L?Hrqe{C=eMTygNLq? zKth&J4*7b`YC*4W>Wr70!JAz8IfLtYdQ7Lpp!>$a%eMz41F`#y5UVq%BXl=v|9ewk&$rjg5~Jfl}Qd25RUcx0{pKmsD5`!tV}Pyn!aO` zA~zBqgqA5t3DfVKAt79Ab&D6!O>SXK=;av5 z5=wOl^UO!y^G9XibDX)6MG%1rt#0SctB$e5HY7nQo{*>Z+Bv+$2euw0{jo8 zkC*HRovi#n$CUWlK`QogT8E52r*lzfQ07KjyJwsNeui>drl&fzObdY|F(s2)8bT(_ z1ad{*@Slz3P={SzNVt-k2ve!tSedHeJVW`99sxo7`-5-_PUiwP9u&TCDeI}&>yC4F zyRL&LpXZfOZ@m9$bNsB{_~PeUjVs;hu2)}0*{ECto?beAZK<;N-zkA9(u(G!=B?97 zzq9Jev25*hwmp4TQ(ua55WHC?;zbCIx+kYxgf_u;4mrwAU$g2on}Xpx4KOqRn%QIF zWW`j8K8ZlkiuCzh@A$Zo8%tKQs=4PC!lm26#okxbmQaAHeCxPIcs)~Cmc`Fm!WI#%U&dU#PysrXIbu*DCe4_G(uDTUz32GtxoFgpcP z4DlCN3{uWh*128fh=0qQ(_R{6a8{ddHmo1pjQKi45ZwR1|2aiPRPrjl1qEw4{xp~1 zRdnsbbnTDfcB@Jv3x3aZJv!=XcEie0MA_=gWs^XEr?`)(+lfD1blmPX%-qe2U~ZXs z`-(iDjW03ddZER8q>pq^>UC7^(YUYZ?%}?V-0bW4hPE44929(aqPVlB&UAPpKT{slAa8bNXW zjWXXx-rE~Bmd$VG?YQHQrC0LjAF{+z%b|NaFP~r@7SB{#cG!LqxK!2jzdAb*L-S0p zr^54f6>}piSQ4rtW+XkLWqGCZ+fwI@db0}suXpg6o;Sp+G#lk-gs0VdN&zs5=6LsBvOzp*Z+^}2z3%rS(VcHhE zUeyB38-ncYrBTs2lJSV{J(7I{gy{wIyTw6dH12zz;K6YmBER6&nO^d)PGY6;;d6cM z{~cRknn5g>>PZiy@~8Ke$AJyAP1Tnc_mR!&c zjy_Y`_?KK#gENc~6I*C?@TUQIfPMmD;ZUX0R!Xqvw!3xK>)|Dx;^k4m4A-vA)rUna zbG2wd1lfmLK{F6(4c4J+gl5om`DB-vjBh14H>%KU;#9oQI`je<-IFk-lnuf< z#%bjvbrRbFR;k~ZES122=`qfs zPGkxUCG%(~CE&tgHWA}lLeH$NyGGCEXB&;+1Ok_isah7wY;B&&!OJ`57zsrPf6?Ar z7s40QLr|g33ODR5072}@VeofdND#Y3*5)^PoVF$GKUHJ%sSIFydRtd2HgB3h?C(_E z@CwR*r&Ij>Z;#QFPbL97#p*{E;5K71l7l@e@lT<01V*b*8UAbJg(|5@XTb56VBmG} z@+@n!=o~?zC^Zk>;4s#-|5rC;&<}SVIU&Jqn&eY&`Aw>~8oeEVgvs6DE}yrb_p@`m0`38WPu;KAwQIiQ7r;*(YaJo7nrmB)v$g!D~6Di0*!!O4`wX#FU|u zWnf`ZA~y2t2aXzis@*N9;NJUxRJFZT<|Zvt4hJNxyx83Zw?)*yWpr5&wJVhUMXgsY zWw>O(8oQgWzIr44WBC=QYd`8H{oZmik6xRHa&L9g#f*8mk5ZSHIE@r>vkm`u>p4#< zSEn)e9zqkH{d|a^HM(QvyVA06Ungz*X&*EGfZ+85$Cxe} z8G!zn!#9G+Q;tWaY=(84&KM9DXm!;v&AmWjA+Ru|a)U~y5SvAsNvtVZOKj?sc61wI8@@B6A$!b`0F^M~5UW#e+hp*Rm0YP`sr&;vZi z(De{8PAAsGt^R{UC|B>#7;2WUa(H4MfN zd=g8^FUT+^NjD|x8}Cu0msY6faWEl02SP%Az6^P5_>TWLCb-@68R8}SEuA7HT9{nJ zZN_AS+fLMkD_t6iYtj}w2=nlRgtX{)tMSZ(R%qk))M;j3-L|UW{9^tA2V7^~*TpV~ zVI&ew?;~7@my4NNs)`R5X?tu;aw(J5Av9$S1_~RKNx#-aJE3NTMe1k`-y(9CW};eu zk5=vBm`dn`&goR`h_oQ?A`F1ZmeBo)3R530gBywlD(Zce!@HE_`r%pM zS{D@&hxt>PZYGvfH$^^(>6Tf6?`)mv(gqB41#>kmeQ@cQor}%)%um!7n|J@R&hF`T ziBI&7es}A^^oarGv>Ua@W#9HZJC0XHT~LfdK0GG%6Y2D-@|p9kp#P4UN4*YBG}ck} zj(y+5D)bq+3I6?ve>}p$B7W%gK78l(DIu}sHSFz zo3qA`275I09yxuM4itPnxQeiT+c&1o6~iL!gP+k=4KWBwR|!E&+jEbZGF*mY4Brv;F(6hflrTjqEq6p@O-I_ zPMpL1Y)V`vUk(AO_61HS!E%)Zc{YK6tm*`ZK2( z)wGrI&El+W70_6=tg{43ij_`o|Fg2X*f`M85S-&)PyaeGA4^hH5neg0M;%}ZhF4|5R zgmn>4=4a(E)S1+ZDNW?Jw~s{n`cNJ^!w7BIRbxoAuy(48bC=LathQrJ1jzevWD_YW z0=!A6-aG>rD?C2be|sWzfO45^7nhf==y0~7C zUa^hrtD{%@%r}#P49q8$D+Mux!$9hvv`DxNOy02f_0DVs9-d=&S433@E+k*=)OwWP zs!i-ut)a(7^uE7)zftm^3j!DWChtAyC$;;XW*)5Et#{Y05{Yi&=$qJnnVJj>kw9Sg zBP7y*#n7%JxSb<jL-EPw`1S13#%!@x z?A-G^Ty_FMzzF>$2BHmSGMfEi%F-M;o-u3fh_ThQULPEE+z=n^9M7a%hV^7>q~I(oC4lY?_^v_50$!Js>Mb=al-zlijLJd$ zyZZn~PmU1-8I4KKKh1x`Yax`W68mycq2*;3iSP%=45CayGwF~vW5&K{SSTqgElQz% zq;o%%1arx4nto6oS)1RgituTP1sNPaB--dmXc z7h{3eO>l9QxI^0wuuD?3zRga9twt5*NLi5*SE8QaOPBrg|}Fo&Vd(L+Jw_h+=aIL8d~u38 zF7_QUcZ11wCh%OkWEDi}{&IjYx~xrAF1&3p{HwDuSIhv2sd7t6Ia67`dHwHjg{rfZ z$|&~5V@WU8U$Kn(ESg97Wd;3K?sHQPZF4~l=LuRu@%zSd`oO@jQ^1<6+v4K#YfbHV zD6A#JfUDT@#-#j+Z~Bifd(uj`-7ftsb;dL+*m%b0=J9?K>N_#E`YT@-<4;R@*HD!T3J()ttOP z)IdlTGQh(u+uyvvAcs4~R#WQn;PgqwT8RC-z8?+z!$BdkS;up;x|E_P1801#G0ta3 zA%lrigExKBQI!onAck0K1`gK9FXm`)cgtfc_##@w!=uneXnj(%=8U#iBL7M8Dzk2Z zZx{IS%!IL2EiQ}J;f{l&gDgbnLtCGY>kC-4FGn;G)tg<&6P8l&Mmz%<`O4cTe64t2 zBLs=Jl;{=AMn0zq6(BuHi{zu5`lQ3^vrl@HKiYz>q*Z!)%Rg`kxY5R%du5tR%uLWT zuE}_|N~{V&jk5iSz%0sY2*Ff)nftl?%+demE`)*Vj#Vh7c-NlEX=e7Qk_|4C1M^54* zo+xjRBZ}&6k-o3#|9D|S3@Q)J97vz&E*QN@&Hl;H1s5*MspGSekHf^4l(?8)3K}a) zcwUQtSzp1{lP@dSkz-r?q$|}jz%V9wYt)wW#QNi)c-0R*)$2k4!Q)GkYv&(G|mPLGU2KmY+Uzqw5K z-q9gvjYVJH11d}kP6(@orBJh&jUO6e9mf|B`{4Zn90(S@cDUb%=6=_{7S#dFsbbeA z2ySyamz5SI7djB~HWndA-6|{ViNEuvneA%xe}mq{s(gM&;%H$$8uUl+bZMWd8p*BK z_uUy}pX6qyTmXqq7Wmd7$Kg+ybgiOURTmee?~K?V@rze-S)HxS{X{Q~kya+r6vyks zhU{n}Oj`s!WF)0R&6xXGm_RClm^BjDHC`y5!d8_sno?d9q6lrvltvm^BY#7%3<;3e z|K{!KCp4BptX0q%)t0HigFzG}XHqNL zeC8lmQg%%uzN=a-$n_n+GoH)KPTH_VmDdOjRW=Dc^?8=C3meV}2)maWZ;;pOfa%S$ z6R~-$6g2FuU4Zka6}cArsrom3fhAI^o{{Bk-l+DEc>S#+eyKYV-r}B^rLh~J(onk; z1}_+p{XFP#J#-*MMm-Dbbk*z?d&qpUpp00x*ClPNwT6}IKLw;8xEFa(Ac7542VU4e zcrBs@TC4kObYeC5NrV!v(Kl85n4BKe$*|7rZ*tyK(jjNCud}SPJn}i&&f(j?vk}7_ zyP3h)SBM!^awqx4incUm&OJA~C*5_ic60Nwe$bWjGqutVIfYN{w=46lm2YT& zT+SYz6N4VFIQ*bHKbVul9lu3Tkv*Q&a5ae6F6^SGWAg8d-q)tpdhT{LRGXHZiVOk& zBcHF$`q0+eZ}mTaOU#Mle=1uZ;I-QC-LUnIPk3E^{-Z#S6qkD@^nuaA{e2crkSsPW zXD6_k!1caRHkY4O?{rX#?j!&xuonsBO&|-1j$Gx*lex~-sj`^#{8s$ONjKB@Vets) zJcuQ)uD$51k_vZi_-+&PfiLXgqXtk2I43Q0-jg@P58rMdl&X&-ToS*z)nKm%`q+2% z$LHm5XSOtA*JEs(6J+?}Dl7ead9-bdCnPIWRa(IcArRmdWIqMvGg+_12 zxt(c=d3m1lzRjg&*}ETM);oW{&$cG~WKt>DOfB!R&tbxTGa9aY<{Tpu211MS0jH2reV@np3HA^4o9m!sHGr zHO{U?o)skpA+l7H2nBdz;)9Z+tStnuZ_0wHLwkvIm>at@B>AmlL1QOk#8N~^BQ+t7 zGMzdH5-G$tMzG?gC{iKhue1|?J)T{HAjc8h%31-+>nF= z&ZW-Rj4|1Uz@i``0o}NTD+92b<=}PTm&emW7DfnCnBkr4H&Inw=zBP<)v4toj%Q&s?v0X1nf&>{eOYiaB%%`cqW}@r0luj6 z6M5A0aTuXQ79^i6_Tddwd4mk0B!%48a;5hx3cd)R&sd_C=T#kO-A=f-#l2W zYPX>()9tg{&%iF=g*HP&mz0$zKKz-q2zCX*liQ0Hl(CN|PwWbYpLpbKRVg_=NT2kW zL3DSfU!xZMQ~p&+Al)TaF$gK38RZsdCdYYIAHK%;4dt~uZ8($=S8O19I(+}*RV9@p z*`wooAUtx*l5SS9ybQZi^b4OHQ=nCa%bL;fzvU4c=~vCjtqGf=dFMRVER9yJ&*8!t zrc|3sB9n;o-jJeZ()h80n-7b_*Y0o1=eL#?i(aFuQ5JMVr-}X2Kl>+A75AoyD( z%Ko&RlxQT_=_X+ZD;iwxal`ESrIP_qP1ey1q13qXOj>y6%&3vOMwEWhDkHyntz^Td zO<(rKhdkGA-K1Z4-`-RMJXy_pNUD1ix!xR8z4853Zu;kl!Z&`7daYCopQ0(C*5_09 z>Sbaq$=*AcarJ73eB=LSx2&VQXT4pjG@u;=eB1im`Xk&<^FP; z@bH#?(Xak$c`8mcc4q`Irs0@e8y>z*mUiDGA@OL~gHSyXoXyt2cGi;*{qTPz@~g9C zz7-R^Qd{BK>fc*v8YT1&b=$=dRr3p#Ro$W&_!@O#t`aBCzS~Z!6IUATQZtbr zhk1^))AI9V)UYwYU3cIxGmd*nQf(l)xn+B6`Qo6i1qwOJOdhSBsynM+Ilz6ChvBkDEBWWj8Tf_3W`wN~NEckKy3Y zGcsuKTnB!g+P~L^dcSal(M8|jl|P30`RmLqf3t&SM^O@SRX0Ak6rrRpmI{^HAE0VI^E&y||sxMx;}dvvtI45x&|0v({2_p;C!*fDlzWxwt@FWWxu- zF>2jdRr^$-bfp;XF7?Hg6#~}CCdVBZ^el3~*wSwp%t1J2?0`juAs3x%Q`Jjef}8G^ zs=uC8S^ayi0YRw`eI1LqGcF+3p3lJ*+mCGF+x~yAGB|52mo&0>Y^=J)KacCL$x9CK zZD@|*GutFq=OUmoM_iAAtI0eg?T-JECa>AdA}5mm;CA3R!V25QY0m=OY;qZu0}_lZ zeRPQpR_TPAgL5*vOCzGfW|yK9ND9t_q3a{-h&M=x^}*N3Eqkc;k)^lxrKn%nwX*4n zxCTh44N@%5np!qpb)46CK9|X4e1iK39v!j4;HVBqbl6&_E@g{a#a9rrcE~bq^)89U zH3BGu*p-9KoymM))CAT@g9=DPw?u@eIP;PPS)@qU&x65lmM&rI{$8?=lMsqM%%01 zUKNsPGtxrVw}-voFHLE+WAL&x0Sf_EQ_8Fzy?f2M~&*%)h09iK1WZ<@Jqmr05(P^sfa|6}P z2#2#6>X?IGk##gQZ@4x4ZGTDVM!7~Du1#QJ12)!mcuBSFzV9tpy`bkpq;cLTs2o6d z#eT^7gvNCkx4x`Z;~^Ml(I)+DDjj!NHCqKEXniYGH9qNbFBJa8oc-x-@cfkW@`$hl zAQ1(Yn~y3QKrc*JoC--i*KgTiXLDa%Nyxp?qpa8C2E@q@32&E63teq!ce!92^Xk_1 ze@k_~VtHjs7#g>M!aU{3Fy8Wt;Sk#KO+D&~`7~ZO67w+{=4XA=W9qo!WSFgWJvJ8I zWtg%2X?x*L&S#w1)Q$h`32Z!v!qN(q2b8r;`%XZX#!$GSiTpR0v1?j^VxTC(zL^o$uM&${ zuu+EDukvLKeFkCj0wVVhbw+7BPcW1LY~vt74V7$&^1*DH)WV?|E3+tTVR8zg$1 zR(2!G_9f2=#M%5W_XM21vUg+$d*3hRp{*naLghkAc*XHLjcQ@6(Dmyw1j7DCn@owL z(eu+%(hZik($jf{?^7xQY5ug`-Q*B+!t3|B9+aO9gIUGir`QVmh`96&h3B3` zePB=Ja=(|*zjsf_Zx7~BY|PVwPfBk4F3IuXpg@&13+{EUU9?UN9(Rr2gG(oF{ylNSN z0GzfB)ban0HJmaNi16Pg^O`(x+S^W@x{Ay|M+<>i_1!89&A4MwAx&|duAYHQd@f^q zgq#GaZf_-5%RC|rQ>uER!tzWvIbp*!xaUT8A)6dE8f^@Lg5i!S;fm{8`J{vtp~8!p zSF6=gHX)a_+$CyO_j|lBYA?q7R$JSux2k`3=}P{-rSq;*Q@35YM$P@5S0TSOpViBd z0DayfSrf`oMfJ>gOXFwX`E$~)8+TQUH_cA2`d5LLGj;XJ!B}`Jo+y9r9Oq;i+@-J$s-bbhUYs)-1QgjXP zNxm&mRnG?Ck{#TgSqsmNU$yiJhLy+-J_?n2y-`uV(0zH>v=Fbz%1moh)vK%SF6>Ir%}Em{WJcVF`1AAVag1x-q-n}DCM`?Kq~5m+0*`nq7`~YJ zd~hTg)@%1I_^0CcvR<1(E&R)F?;?QdU8&)BdJ`3EtgP2TJaXR~(Q&-(DCE@+Fta-iKiyd9BsiBs?EcTf6#j2 zW5L#5##O*LAA8Hj~>2QVf5i_?4%T53%7kvwgPV$xD)~DgV!j+CXvOkWu zt6r%_83cB7=sr42itJ6S`+S(CKVY^ zA_|h61}ta%o4o7o4t6<)Ke*SUuh&}to|yF>`}y_l^I z_?42{n%RGhp(FO)TQ7GgXi@p`wERj?kmoV#^q*QC{h@Z7-EmybY-- zy`8vh(#(g>y)6<={#dBkrpwrRR4bj@?=UrM8@#sQ<8k)bcKqb;CpIT0W6(No6cOvw z1NJq4U$kzVpLYDJCH*U$zjFhsW8KPiCuwRh`{i3$oAn{U(FK3VZweZ9GRw(vU7 zx#9OYt!6eZJy=NTzL%_f2?(-FIs{6hI)S!hSJedP*%+aE+gl~cx59F46McoJkwO6@ zj(IiUfs#1^LSE*x-v*vT{(?h+@AFiR{F9dxf2Q0Li2J>jq5ir@I1Rc3cB|nyO;bTL zcCXSw3hSalzn6Qs;>f4MTb1xmZjpW$dcq)qzu}kxGZEW|0k9i(U2f^c&`rcE@$v!3 z6Adi|Te|vD5-8MjwBfthhYn83c2?3deA3qkgY%b0BKiDoM}V!v=o!k#lpkFW4V=s$ zbt}l|G9Gz@qSqU%yZ7Vvj>{^Yug)IH<~9wKIgI`)T3QVfid>6{5%M_4j{7%SN>voM zFr>1;-4itTsK+}lHSl|#XHSaHt5kmJ$iZ%&4iXUCbHcWc2fPd@o-n7!%BXo78IOE+ za|Keujtb8<7gyUKH5}%9xSR}$etC?zXit|-I z+jp{BLIq#1{HcZhrv&5cKj5bt^(c07-t|e(38C8t!t_0iZvgD^6Io9ORCnp^>5ELRm?dq!%dH)F-=%`Twq`>8{ZIKBfib^VnN`=UdvbIJH{xW$q zA{2)|1|08evl>7SXZNN5LR#mLZCgmAXGjL&{*~`ORuMnZrGIZ?&7SaI7C@n5F`1}` z-+;gW;vTo7y?hhql_WB~d8D8E3s$Y8Wh!pEi)&b1xb}7Y*Wx{0^PcQwEd`m0ae&fb{V zfxbK7ETR1H7d&z;OE5osc`dQh_m3m;q_bW= z^y^Te@d|y;0#nVAz_eFl-Zmhz>}6oHG=m)gj!^WHGu1j10j=T3Vg*j(e?B_BsoVKnjk{ z==C$lELOGtwp}mH7_fUr7K!Md(tAYLj>|?xYBhPQ9*Gw*Ft-dBzD{56K2=tPR&=2W)3|aaV3{ z+qnR85+bdfxA#+k>?QFprj_2da(lm;hV_e5HvTF}9rujYJR=@JS9Fmnm((smZn(Nc z67YXB-}U}Do{4AtGoSB}PDgk%B8sjgP0;6t^j@adzBa5L_Ym_94-mjm-Lc`ae?uaa zMl&TSTtWRvq*+81#g>y3+3cxNVe!Q(FvaHFPN^rgI5WS4G#n+&|7o%)w)YvD^98!F zT_Ec3G-=t8GX+7y-scOnqiWN$8%w%}R$-^e(W8_$U9Z{6TfGLJwiLoZLplC;^d-z4 zC*1DrpY$PJ*;9-#J;lsE`(iIF_(n3UIpp8tZzZh!wSZ{?EBiek%stGkeE{~?sEeHX zC)4IjeOtTJ^J_Mbn@txHOiD8dKcP3sejQOhdJ=k1i)BqegP zvv##*8aHvsc!koSiZQa#Km`1kZtG`9Y8NCe*SfjPYwQ zYpVy5=t*eMR_6$Dgg*pDu8NCZY~6?3Sx)h{jgS@rrgL~WoKl^?ke{l-h6;ym;U)bF zOuu_w0G1kCRl}szwRZU{5&erkurO(HK}ZL5er%F?6QPQ-@k%)LK(s29k$XmU;J;(n zzcfkBVV>1kz~0s89ZxXgdrDkm!Q}rtHeQc1w6z^=mt9%%N}477=2^&}vN?{gWQCyU zb8XtC$)osB_wYY3kD|K>IO7Q1M@1Rr3xwZB`YlvZqfM$>m6^>3NH)$K3Ek>Md+*6${tU%nbGMSq5g1!iY*2q?CaUnmn$-jJEGa5!Jt+Owx)^ z{-dz^;xIS|T&IS3z=SN6m!~dl4V0Ufe1E`EXhdvnaDW{Sf^JaEg~V0bmiQ;wE8Jq$m>2?fifu}6oF7*ajdJw>u`pNAZ-G(f zssdgbo}HRBW7WchD;tJLR;VNjq|{jyE}nu&Qgc&i6KS#G*OL=X!*1(TEy25b8+Hvp z&a7Why78C-9XvU9(*9~vwtv8L&4z!W4Nzb#;5svPO!zv_jT6uQ$Y4~3^5Ui-SCEnOc>3fI_zKhg>_23&Nz7x zk1nUL?_6=OY8OnH;gO1H{^<(Ict016(pIyH1L91Z#$P_ZG70!C>kWsj)Q5IlV}OW4 zOVyj2S-@+Cq_owgM%qvpip7)_{yAAWZo8K|3`BmS4+}DzNk_cEC~yO|pTvBnyhIHw9P*6^L~bwm4YfY6bh$$OgWd^vl9E3q0gjzqfh!AEP?LtQ>_!X`qG*m zZ_NG{JPP64DhMR{3eRJB{~f3gB>0pyr2HR6=i$xv`}Xl}9Y$5PXk(ABqE;y(qOCn! zYO6g;gxbXFP@`6BZ>9DMA~7RXBejc25TW*}EyVmipXVQNj&ttZpX=2LUCN<{_S~hNAg-ja0$Av zE7Hh6&#(v%*B);q2I{{#=GE+)0ZH)KA>lw^m^9K4`>fADIM9Y`TF7*;@n8pM5|naO zF?o4W?`X(v5G!c~kCTVliC#$hui&}eD=?$X!5~x<-io{ra_e)!#)OwO*kx&P8dbSJ z__FT%He2^if%+?;gY9Fwy7Z_iZ?X5$frTEa(wF>b@N>Hf{?;WYg~cSdj*CgJ+{3ZF z&eAh{JAmLU@O9_xkMHUGL>dxgk9^fj;`xO0my$SlUTaspfamF%UCNV; zJ~PVwM8KbGQk4p3{_UJ)5zKbCt`wTwyd$724Z9Nj>rdh2iVw`cp@q>*!CzqwFCf-j zP4pbCQ>H@g(>O{>=Q6#GyCQ7M9h_0oP%$Tgm6-RdN?TX@gML_6VTHzKT}yUT>SQQ^ zIb-DtAMZT+Wiz*oEEQJt`(nB~pfxr%nSxHeBv_+;PuJ6%v;1?D{LT8Cp9{E^icIU` zNuFwjX31Xw0P%|y{{Q&uuZuOJdCV|mxAX~+?$D#sLh}cV&c%N*l9zlaQw?0=rEO$w z3nIApsG>fQUO%&%u?O5xLVY3}_3k*5=@v#bF2*z` z)})UW&z8p%UtOCJb8J7y(c6im2lTc`J@6W5^I+kh02rgsGT1bZWpulz3>;<;-hp1a z@Am<-c4`MDJm;t+`#hp=JK7nP!r~ytpTBQJ_avVK_$YhTV{Aws=n0ZLm^}#-($Xv> zyp=@egcheLtaIp&Zmk;Pawo#Hc`jrd#?kl|RTgZU1&A^5MH(PY>F?5Pv@+^S1aGpt=6Tv6W z)PHaNrH|G{HrQw&wEXq;4Gy!^prLL2&Y8@gyqFUKL+NNR9?rcq)X?ycz)h48@1jxP z*zw>ycJoH}2z_xXz={7eeSlFopt+=h>ZMDHn@_?*zk3!J9iLAS#hf`;&SYE_t6bb5 z3E@5m2_UyRH_@R4J=9Dw{UIGVZp3eAJyE?wnuRA-Mm^AUtNDJ3x`%SFjt@BV?-H`Q zcEI2p^{Gtcg9Pcvf2En8qhx)1){tv78swR8XwJ8~8)ysNVg_>g@0wq*m~*V9`joiD?^Jl}a)uNpmoFQCjUoM8%9 z15tlZ8n`O3O0#&3sDBye+8wogK{a}vij|`fec&tnrATZ~kcdG$wPb2MKOz7X z-qc{=s)XNfmKEgHyoMF{dGHVcoLrf}BYLVLk(WDy*ZxjS4uWHTz`0qEjz+6SppY;8 zI>|{16dr^oe^V8F(kh)H%=mav3RzD5OcRm17Z^wj5&ZMAwyw3put>!Ds;Db@OIE|V zJIGgZl8=&Oa+GY2tWd{wJUb4@aj&@(f=un?N*>lM(K z?X#_;@3QK2W1SE`eYiKI698`D()P`uHSHYc%df@`#QJRh9SRO;-0u5NPH+Z$J*YpU z=ZKo4psEP8?Du1TEYjCPXb&_^k`dHo@JSo=EFs}sgKFtl6c}QCzi3~^U00oih}W8I zXG4cT=}PN+ugeVSml=!l+Nowxt}C|-0(ux{`7+3@Ns$};rINb-*cnp+BOJGA{T94* zCE}@_b0Lbv0~tcO*FDk~BE{$oqVm;~XiacV#VxTG;tTot{j$mH2}ypYYe# z-AsAJIw|_~^`uUl%cC(+-atc;=}NpSyh}&P6fUkM149W!u_K~wzsC0Ke3O_@8{0Yd znkp9Q4XkRcg)ykJG7M=-u``5_Q+J0%nKJzd?_oBsgfICYBsc=Pyoob2cY?uhS(Ek; zeLBh#)oE*eG5VoxXS!A7%Av(l1gwo>&NW)HSRoLf!+w@j4tPSt;#;fL@rFMHeVI>v zHl;UaN)~BD^IL={&htcP>h@StbdAY0JGhJua;86qO{{E^z&6Vxv}ajnzn3-cM3Ut! z17P*E%PiB*4I4E3Hw@F`t0d$`tZSVgQKU@oSh;u2o@*a6X@bKYcH3K@I7s|;%>9)E z#&@*EUpoCPFK!k$DseQ2l1OSyD8^fkA1iiQJ(z{2umyEo77urN%2FNHjNrT+x%t>i z?=gf3CveGl*VVTCqHAjkojG)un$Fg3EqpF_>$MZ|mC*I1I5$>J{Rqg`N7?~+Eo3ht zI9Q5$h;Jg40LBdv7nUGNQuR~i+zQ(!Or%PV{lhVYs@Dgcf2#;94t_D|lX4DSEG0`9 zC~=Mxc|#^w)>zEeT<`#$jR5iGDFUzNHpjT!h<jYpIY{CUU;`@u?+y?l%%rFSBAz zUd#$So|6xAOr)#N7+M@PS~&JYf;<*$`nOU!%&r)*@zw9k=)tp7|56C(Zxn?O!Gwm0 z%_wv_$RZ@hyuD4#;|XdhCE2i;eGrN7al*Wpa_Y+v^VEpa+^$_3TXpuv!wkJ@?i7>q z%}kM&C-q&m?CT%H5|+7ckV^JX)0i5(y}p=YTgO(2HKai?i{}J~^0Mks5B*;2gjMP- zlR;z5bN#g2y3QqOR`um@Bvc%j-ag}6=8*AL)mR3`#Z#e0J^*h)-emWJ{mb?MTnAVk z)uMnVOTTD-i{Peh89)ebYj?K@v2L`EB;Nff`Y^cdyF-l()0;ONpN+HZ94g6lk@~@) z)*wG+nJ=>kwDY`{*J#a!y8e9yA6nl>+xXF{UZ%*F@i@@(%sChS6-W9;=@S_9smyJ? zG`!jQpl{D)s7$_``PL0PGK zIc&W2yNp%iYmd~Bd*ihi{FA5O677Eu+O9(m)$N*58b*%2*gFy#u|tkFgN;Y!4_-5V zkd8`glbqj5GO|z!_h0?cdBL|Q%1#Gee?z|8R!47M>X*8=aE@+s`UbB<1JKVBJu12$ z^R=wSm$OMT{llTX-!-X-wmBob5EVK>vrOrN+@HoOvkwNkmTUOOO)6#g7T(GW-gjI* zH!$^<&zADrg6MA&h>hDRK(1tS?CDs*GWU`~w@x>N;@h3ADA-fh;Pv78;HJ8_1Mh$~ z{8PTfahT@7>dLfHRiLQVY-W`cuWiAz8;wB-eFM)hOt1OhjopolDdx3JE54ky9Ug^Z zc8^UpGR=R^yIqaIA`VxzNHHJ&J(-IAqF~`hnY9&K>dF^2LlU#qX2l>Z{gN}6MM>80 zfY@-K*74Ig7Wj(+p4zxE7{RMw`wndL;QL+qm$6Y|Dmwd>Qj9mATvZ%epP%8JAc|bx zdI$hZ5I$!zc2Xyy2$nuB)E)#?mYx@UKAjo&j6|-^jJ^ethJfn;w5(}(`t~^&$Wi7i zMG3HU>rhV_u1zOxdy`85j6g}ldNEg*UU5Osdkjx~@Qk=0o$N;eQ&_e3PVMhe0XK)( zYQp=K_`go~B;PKE)79Vc0hgIvZjoa_*?s0v6(VE8RooP z_CA%qD^*cJhq?vcw>+JWYT)7$FncODMYDo*&`}_2y7*$#!5oCO224=48F_9&YH>bFt4EvF+V?QO0b2*NjdMHZ|ENa zr6-lN0HDHbMM3A_oPC?rqTxfd%;YO{Az616=Svqeuw3^el;_N@1*z4wLsOv%8>0=U z)8|k$G_>5R($6*7z|IY=n(ADZC|z|bjJ{m;yv^+2ZTh6?hp6Hf-C2l+P<1f$OQ;Xr ztKR8{eCCp38?A2!LQf|`cxd%f=|R4F)7BWWGj;yHBwJ^t8ki;88>!!CCT_vL`Ijj>>L36ZmrvAC8Br%-H_?_$i#>EwlmPYpS|+Jbc?l^ z=Vqb4VM#MzCy*iP?J9oP>4WqyRud9`!PwOJ-p%KygX6}C;{7%!mISzC62zKoQGc?( zAOD7>E1dDDvol2?*mF~=`9h>eD1Z}cy2&T{t=!t?4@<#cX9#1l^lfYo;_NeULH8!0 zClPRK%-Kk_ZHzfu9XS9p9fg_S-t6tX9gzR`JzG!tf`}3{KYImBelbV$*{YT(=(~of zzT9A)pc~fRP-5k3jD}IgS!6&OH9^2hTfs{4Q{Rdj8% z)^ZCX=|Gh`Jtj$M-_W0~nj2l}d*$qFUFNc}N8E5%fFmYRpZ&~Vl113v4HSKd(feuw zWMhO~G5s^l1t)G2YryJaE&0DXZP~u51kpH4V4)u<_s_d8#w7mHe+3I> z)@#?YL8j?nkIUBEwcBV-u)f}(3g)?{LB>4JM#3QgQQp-14yMsu4V0JxAVZvAcb>E9 z!C?3iu5Slq-orxyJ{~h%_k8+85g+jL<|%21LBOp3mc#{;uRvo9)?Xr%t6C$LK+`9I z*XY6X^Dfj!o|E0j-^`Oh=BAukRia72UU;cNfSC?{X=Y<%x418bA!jm0VwuOnQW!66 z;X9RJwL_@vl%tQSkR`kSyV8H@&N%phGv>Ans*5$&$02;pUrAJng(EsWp^tKQ>@d~} zM1Y6h*q&vo-9?-?=ae*TjL>sZ&=C0O%de}RU|tB$DbtG~kg?~+5fE#;?(@}F0eE;q z#-U;s{c>y1V*3w=+RrjkMt;TcZJSNmasQ#Q{A+&rBrk#WWy-a>p z(6k19633q0!6{Dn_3FlKCC8PFt&;8aQsTtu^=3eBIC&S^IGQ<6N!UDVUZaZy++_(k zj#`yg+zINQsA2D0s99yT_T;pc96WG|? zxIFW^czdqOPK#I}wIqf5*w@UR9w*cAU#yea%AA?K{0?E01`j$PBDIsgpLp;*w9Njv zX*Rf`?kVOfX{Lfo%Rj78&f5#ocg#CH65>4X^kb|oXRTBJK@|@dVy(nj!8tW<8ckT}W(R6UjC@y_H5_109}^3DRsVBx6kRh;HaIaj$Y>1&k7Z`&X|FXl z$t$|Li3+7B{^rkp8|fxDjK_|XJ)#?*1_x1-QR3=WKSq;dWMCl0e&vL$nOEF~b>QU^ z?yYh_q5cn>kAE)6hcd_jGdd*d-;UsARpsxFdoSVF>s(^${WiD9*~(bLo@rx+H(g`( zl3wDJ?Mp*W7Nv`Vl7tM|#q;6-TKaxl!$w=tM{9wj5aA`ZkJBjEeb2v-Ck1C%hkk|3 zq}Jpp0PxPR<>~@j9!ne4ZT$-|xG26{MO(^eb?S7md2zp`s;i?z<6K(|GuiI0c{8<^ zRV&pr^-o`Dz_ADSNDDJ2A~RusB0MIkUWYYE;kV6;1_*iq1`_zK@C z^JwJJq$d4QfrUU7LX!VEt6XMlYR`2YpQm>QrP(srrORvYS2U{CIe-62E{V@YV&BFu zS9NTLv@&(f9KXfb+2cI+B*~oMVBf9Ld_kxasw@@Cay}vzX?o?+bmbadfe|pCGnW_WGa3e6wUlSl|2t@~JIWTrIpP z;s>JgStDq|zM&e1X;f}K4n(o-E|g~eH&}Coa|7|j2^L>J%Pi%}g@zXV zB<-?oZ~}LDf`AQ@w%m1ghCbu7ZR!epX?)4awf)VQdjC=Ux4ghZPIEyrBHkx9gZeN& z$R20fGyKPVJcLQE-!`C0hkb)NzB~d~1YwOT`F~?`cW0Cr5NSzGptraoJj;w+N51MW z5rf!vxykGuhdz2|8To4;*KBF8YyxE;H99zSZMT{R9&DFOd>z8t0i_=z`{=pIce`=;zAsMb8u-uWs$tkY%5bF=^u0TpteD8W(-$eil34wR_8X2CFIY*X$=_bEYr@}Eu4Soph&Z5^` ztdzgSjZwyEKLdt7m2Z@fRuUe1zu?$TzXZ&S$>(G|o(fU_--Q=myMIKC#8yM}naXaH334gp z?l6c^micP)M4xyVXKz1HGSY=O${jz{Z#Z1%6UUL~t2wgON6`5CC|>MN6U$g^|@Q*?+brhh9by;qJ|e; zEAW=i{Q{{kP#i$F)$A98RKLwfCbH-a*irSQ`H^UsUsJQB-lIJ(RpqKJE~A|IKgitC zt3b?`40ay%vd(!vU;l+E^S6xF$g2dI%6ry}ffX%|ZAI@bUY5bjG@oux7+q8AH$0Q> z!duCX`J2`3dXhcgwlOE~?p_vfz9WD6L(v^g$PVA>@Ng{)qcq3QW#q>bY|8;bUDxIe z{I)z0i=Dx%jwK)3DbT%F2}SrPZJa>Wr(NFB#iY$JZCvx2T>NYg4xX?qA_n;; zx|3LxRxS4rIjZE=Hn(khQgT?!aNk}q8FeYIEsy)^i6AV<5ZOv*iJB);1IMKN|1yzW zrium7!p00=IM)IpkX`15!X>JkV*l#gMdj;IqjFK8ar63<62VA6IyOTR+yfyFdfLC?caX zbIa^WYCyH+Oj~4;HJK~51y-_g&|NAjO~PP^UFlrmNpo$}XLA3q(D{AztaRaQ&Q>dm z)7$`OM4CM*(e+sex;W7W*kixbQ)qm|U#8g54x0a{UQ_m%KQg4ecrT6D|}9_esC`EW4Jaq8W~{Dl?jj>9e>-yOh?y%Sqy0|Jg< zB2hCv=0pKnjzWoXGg5rdyd{Hj+TrDBUrE)MYV^i4rR+cKxbbandFvya5PM!~W%K#h zCdsaK>{IdBur74S>q{U;e&;4}e`{iH3xR8MX0xrj-$#tPX*qO8Nr)yy|A$V`?&j5x zEdT}kyeaV9Py4Gi|3fY~lp||QTI%p%2gpt}>u>q)0(j{#F`$YVdhOBp4Ma`Ae2Eo} z_v zFE%x>LnLyoWrO|d4G>$(h#cOalkt9zthv8by_(Kv5XB(pHe{C*3iRU4kOKbM>3n-A z6XKkI95nQ*y$|ntWQP|5MI;53wfsn;&q1F(JCpAJd?sGGFzcX*=Mwlb{xw>0OkD<( z`tUa|eeFax=Ii1r`*u8{7KNmCazfF1SlOD2=xjaX`=a=%< z^WMCeLq;v^lz8hpz33gD>RY3u=7%spxRppdbMs|)g8#iszl|>GA{d?83Jw=!h1jiR zi>fWcvbAH2O2=yg8<>(Tfu)ePzZge<`YyY+(FEr9$2t|A#CL#qU?Sb1BV>c5ANt#Q^6kqd1F*fw0-}Di7nQsYO~}Ja_RKLSFk|QGvjhT0~fLkqb!OZyvU^ z5=C=N(Cyvvwumbp^$=(Gp*$Yzd0F;S$aBQb2jQQ48skYZbP1A-MvG3~5}dk3+`=BG zF5*CGo-z}#s1z3%5u2!OmTsS4ejF-dkP=4>$F>#~!!I_tDX6fD-m6iy($2ypz2Auz zxh7~N===715Kyaj7{;KoJacxOb;yVfh5{B>&GdgmUFRIw;C%a^mVBRwtm)>X$La(< z3Bh4d@=-H7@NPZLcW9A4&p$+$fR7%9cuO7wUGtbqxuNAzDlPMdQM6*nG)n@RRNatb zqj10*R19^}TP;%@>%f#+uzaeBPZaOB4KAS*gY{VHmhH8U!5Rh}b;C^-(J1HtU3jIG zl`=OsC5GuSr;1>MF%&ocBKyKSXmb60)w|1*q%sEyhry+$K^fR&@H@X0awCi+*I)TU z8d>)HvX!L$Oh$4%&{&uIp}1^>aRI_|vvK7wf7vi`c$b{XHbq4`Y_k*_;=KQNL2zn( z>ZC#5Im{&fzpoEqyFUXnx~e!hCTCu{i4q~({gYn$jj@AyPjMM+e8pgyz)NM>zL0;iLwX4wEUJU@FVlNWYIOd0;i(~V>s9qIzA-m7 z&)-aX2K*w)^G`4%_V{n z_}LLGDfi2yCmWbll14A=!EDb_R2H%?I)?{E{?rcSm6{yBJx+F8PfE)QFLRp|r#@xK zZ7CqLONhCo5`NEa4qHA0*5oEsgF%XU)UFh@@fx?{TXfPh{QRj{2DJT7jeF zK|xFvHaupfU4It13dgr+>y5&aCz8N}JPj8GNHs{LWP4wzK1` z*m-GH`Bl~KOfN)`SDZzl|IiC~FxCI{)y)0RY|bXshl?1(>h0%+ey$oFOu;HQ4Ejui zC0HcK!=MkPG@rg#(B6!;qQwuVkJHU#;oP`3crR?DF5q2x5S zq&5YeAk+_svaL0pl1RV`;nh=tnY}c6r!oA?Xq&7!C)*A#Smb@po@N>|m!8bF0=#M|@=PLgTU?GvQ? zPsAUN)hw*JS4=bOHrcah1Jj4K75~1q=NwYfr9u%MuVhL4rb$V`EQHskq<*0EY}#|O zL&fNIovDXD8}lbE#tm*J@g6b@MPmFmDEYGcZ1tywrZQ`1TqXOhV}UBAd+^33_EwA~ zfJUpoeyuT})H-eK)!tyQ5$3s)g(Zt`_I@>7x?1VQ*huRU9QNrslg!wZY}&wMxMle> zkE$5`U3BUrsiWKIx`XzN?$Xw0MpBP>L?y!qTx%aa8q$++BH>Mn(v8?Ygy$w@Ou~+{ zMi8$5yRgfp2{Xnxdt2Nm8=Q$nSLjQ$y-E)WD>%-|eQaS=Ke*fs#IQvmB_MQ?sprnA z5GHT73;` z8^M%IvD)Uoc5~8_`H|abo{`xq}DRh-=lGW3G9UUHbVDZLGCQLmk0bM(IS!PI zRoON=sotiXBePNKAQ^M>c88u%lw0YN@iV;#V@-)IRkwd@=EfO0W?$lq}%#QJwyO7`fL;C5uTkUjkC!e=A{UJzxB>Re~F?=J4%zkPtv- z2T1KM}#A2=)Vz0L-@2Y1Ser*R=q z@OqPVdN_ zFI(&S6W~(~MWsUQuom}Rx1DeIz7F`SMx4g^n|~Jpy}#QnDWmr>ydO47^3OV#DObDS zv!-a(n0@O?c{_6D{FX_Avv}p~e5ByCtJkrEMz{P1WbS#TGvVFKzdzjdwBKAC!yv{U z@r$RzGq`&cE#$@S)jkM-JsPku`E7jpdXo_t7Lx$1cV5Kn4%pneS{J>?D3a~`que}W z`AdTO^^ReLZN^60j zH}5*l-umSt)`Xr>^P!X$&F2?ZCdhc&yaO#oe;I_h;vfHWiLB)O^WY2|uto=)XUXep zu=>Q+@H*Z(@t__AR)430aQrazsbpZe|KPMn-Qzx`SZsC!oSP7t05n&{244&7YYUd) zdk>kOY0#4f^S9?PDJM`0jTuMp(C}M_>+4TM1B6mLV)0@7fy{E zC3BC3l|?{IDGj%o`yl$INkPZL4@OqfC zc24fMGTza9Y|v_%BAZ$iT2%InaC0FG@?-+VlC2XODrG}+R=s5c;wST+Iw^)s&YAZF zp)26;&4(>yrtcUxeZhL~J#G@m1>(E-3=_32DlVccvt%XR$1oh>G1ll}CXyAM;J2Jj}%TmATg7BdksbSsnn_~ZJ<#TvZL zD&8*oZRgicwWnH5X8!Kc-r%BcB>Q6cExo%}IR`IBXaPm#SpCA~xv;6CHG(mj!~I1^ zU(3M6#|aVz%lPMSv-$VZluUoXhAb(~9Od{kDBvVvhJ(kN_1_`1g~E|22(*2$pZQKJ zapVBYG8`?aJ}V&sSQbLq$HLhaPW5tucXu1-20d_v<*1ds@r9ssGw0^KWmmaNK8Ty- zmm5byO9BqvD;{EY&CRpicMNiDrFS=h$d+SKjQKE3=w1)HnFnq8o+x4gdDtJF?V}oq*ou2bh)i|I}Lz?9RE}P?mJx~?L4<7nACa0D0&zOi&S2FFs^qNd& zY)tzgq89$lRYa`PsBPkU=_$!JMzo%)o==sX?Q+*B=62<{G-qAd|zts&6nSB#E@CJlV6M?5b;x!Xde5bujnkz`#sl0>T}@p zHTSA-RKh>{g5AKyG^4;qg`uCqN6@o>vuPfdjhO_QdKGE* zzVO(S&fGqsG=0v+O@gTCzNX1MGvR#-oPNwEWITJm`1RH(-umeB@jAhZusD0-|CFi3 zMxB7jdKj#-f#~?k!CvuocsZ-4LRy*#h>T%t)#D3Rbwe*MGFs8j!C@w+oVXcq?MG?Z z7j$kJv@pMN=J}n&AbTrk5Nb2XkGB79lv(Mp5Npqc9;{Hc7gZ0;MdihVPpE7PC#a*a z`(~O1J&*$t{J#siNn9w}>X*S9=^sW_<@m$(x3T^YL#-%2&36v~h(Ym_l$U=zj{_DM ziCeLev7LAtm)?{S9Q2Ysd+yyl&aKfG6RzC;Q8Kg9Dfs@Kr8kCa@49-x>Ux8g2WMDn z%pK`dsQk7}Pv<}KC_fq68_>A~g?Q~+Ed94Rxes=~UK1I!=;cd-LYV}WT%MzY29$q2 zi1F#lcDBmed}x*3AhV&{QlagLS=w-`VHAPg6Zx!d(T5K+dcALnfxFg_J&dYcl`Y;H zW&K2D!w4n`QUALT`_95m!A+93p~Y`!4`EROR2o1x2!ns6t+ahL%N$o-U<187FDshSRmM8wAKPB4 zvg>Gc#TifMU9^ouF$6_yG!Bv+vTR?=y!aXq|3mBq-O@JS=bRtmsAPY%XT0+|HO|SQ zDy^#WQM^^E=NowHEgc=?>hK{@D7I3*bo zOYhFjOZeO-)(JbG|Kq9+naziU(utqX3 zffgJDyQUPSVxJ#YTa(DtVK*~_ zr}iT8OORIke>3l9aVM=-1!*}&8DBelV*g=mw^xy?TiEQW;B25O^Ek^vpvuke4u+#n z$u(Y?&wA&;tU}~VbyUOdFMw&nL#Gi#S;gI@%SSSzbTntY6p{?njir!#I6}|h(L(Rmh zA}?+9{=RS3I1JzOrl~{QSj^~=f?b=*g+qER+ z=$j_K0aY!&eo4ErPtiK=8u6b8AA`qRXIqs_;|P^%Q_^Ey7W~akT1UlJjrYvF+T|2{ z;5iQ+XE)N*(5iZc;Zn7aeLFpz=3ZEUM1J$7UWq^I$W6#Uuh<_0&S8R9wqJ1lOLOCK zhFv(`{rvSv{l{R1HGk>ZGeCOT8H?=DBIln?dUJ7kkjW}40CGOGIaTVU9<)zeX94%* z;Y$ue?lT?}i(;g|UEdv#aNXB1`Q`g-Pl!vLi!CL;xkMxBvK+;!S|B{h@~|9U*VmoZ zn!@L+&C0fJ6DfRWrAT%(>-G~0FG?0|K>RjI&-@>woLJYoxu@~A^*zyvesOLF@5ZN> zClH7>#BsOC8?=}gIYCmu5AH=&?PpIXRnE<$4|}hoTrhs&-z6K-5o1ikw>b0OR}BfH|?-!ZY5DVR_HeLt+iqm8;895UIjOE3@Fs;|D z^f1l}AHq&pEG-}CiKM{47<5H|f4s?GiYp|Qea=;aj0t;nzWZ|*_Th)Yxoyf*_KXY? z2-dl?YXWOYM0+%MkBN47OVxgv3uQC!wR<2|EV7 z8_Z`F1nYHAx=QM2F-e)@(7gCXn~XqtgMqX&%#D$_%sgSaSfM~6q;ifMwztc2@)uir z^+d`FUG#qrRqAhPmEwK^EAuSlu`W@0eN^D@an1Zdkbm)22JC-`Yz~(jnY0c(X%6?- z*p73Tzo(a!o5$5>s7+Py4dr*9mE0O@T@YXDh_Hitv=~|Z1lY1{oH$(Dx1B@Z&0q#i zF1(Qp$7;@V?ZRRA{G(8cIDPWA{b5chgxa+FJsZ|MzL(=zL z+WC##>a54AUZ;{<^z0oVJKvx!VeQ+?dn*(aZzf3f9O9rP_ zGfT_FS&VF(V~mS#nP&+?nb;+ zteBn!`U8Kt=_mh??&Y_?g=egN+Jdul9G0VQZncYdpdQ-dk<$4M!YuzA5XkN z*ZlP1dKyyxP3dtHr@MAn*$C{-KUGK3)~|STX}2NWS2;Zd{ZL+5q5^%S?nT#SdV0Fx zB@G(xnviQtkS$b+(k3}eGD82`43)Im7_r%2P2VUgul#$l+aZnSd)WVZ4d9N+1E%(< z6?!JR^zo6Z{7_P&Cd_igrzY`uS0di6MwkV|D`kIk z*KE<1#Zmap;DS?|X_indA(|eRIOU&Fy09lK4bgl>|MA=$XnV~G%~^HL7dMOOvU48z zvp%UxLQ<8ohRHF*$9wCBtn*5RpV!zKs>dQ3in@)rUMI&lX?A zE6zN5_Vo7mL1R-=<>Er6cuDP2daY>SjLboi!N}$C)dyH;1*g{4B_yX^k-U-%?Cp`( zHN~cPqfrdurrft~yfj8XzUUr4I8l*i0q@TKjeTJDyhhfINFSSmf(Vrec*IzVDVb%6 zoR*~hc)?RvDZL#k>JTzj3j}Ev9CP!FnsiCr@=~Kh4rXey0PT{I$yDF-+{!=-#T^;E)!Yhu!3+V%B>th~MfSDt2KRr-q}*#3}c$H*mxq4K6~ zceT>lNm9@6f+vz1nieT>zt#!6 z=FphrjuE(L{)u7qb5vS?1;klGif6_>=RhP@z-0n>9x;Au0Nj#fnDTQdv`#76W`U{vrs~T!A{EZa%Hg7@5O&E3EXfB z%d`=jvDVx(dEg4aNo0$>f|C6tP4qP<%x4;l>fq_POk zv3z0S?PX>!$<~cvW5>6?$LncZ(U4zM`eSc5DOx}DLDN=ynHFp_va#10^OADlN}4)@ zQj$@J_yI{SuBQK8Sg>A08sa-v&cs<}2u@b1zBkNaEwc4PTZ4-_(Uj7m#9&2Gb- z{BviCeQJ;`;}>p_f=us1y-oEoCdw`ev>)wnuU4knOUp%;eb{2&%ouu3HdJELr}qy= z?Eltl?w`Nzcev0ER`-a;44(eZrATj|m3e-dKLK)zJD|6zsN7X--fI_f2!IK?@{U<^G zB)#03*`v4G&Sn`T6Q${K!l$x(OiWB3>HmVNzt7>jwN`_@0}X!=uK zE23Dl6HCVf6zBCxPNc?g&%p2Msf&RdOgcIRJrLBbATQPuUIn*A>d{M0t4IyZ^khT9 z{;3%Djr*{LfUCuSoNpVAI44iM3Wgb;wu8jqceVy7s7awH##%2V#w3|hx z^)feEKh~G!Y(ikmQqS$BewtL8H>F%&?06qBh$}0+d3NWMKx7Dw)-F3DNUW#bu-y## z@s1NgE7|kAdHBpT>c)Fg!LmDP<@lzThPHLl+L@4IU-m;bHt>=N2aZm>EWP9*>wu22 zz&$Zaq+E`d{w*sv)fg>l!9U$o%RY-+9CNev;~4-)kbdI7lRbr+az<(Vt3~lUxBr>- z>$a9YYRY~#V<;`;!kyA?V{;TNK^+S%8k5i#-};1%e8XB_;^DEk6RB-w;r{hYnLBER z-ceH$0y5rc^=zCPFTmY8Mbxu zLC%Nm9MfL?1pOhJTBSBXw`ei8Dv8`VT$ypEg;Iil>o=ZdlC6-y_b04F*9`CWcPoJf zw@o_3l^m{3DQ4I9MfC`eUfz?x03K{QqhqMt8FlmMDx#CX(#ePOkV^hiAFi&-N0S@X zzpDJg_f{;XOMFAB_j^sYX1~Y4c;u(ervvmQr9ZDuX2-d-^4J#J95o13ZRzMcqn`>O zjf07w@6%o3~D&*;rNcDjRqcJ7iBQ#}l;fX~PxV9ksi^w4 zugV8}@iHC`X@J|!W5hyIj8;^Gt6tKtSwMBdQrpY~8*5GcKk7NyKgM#&ygjl9z3?gV zSgh10$vG7x&1*e~mpFdbj&&}*R9KHc6W7*#Q}dhqci~NaZ_Bo%q_n;s>29nA9*E5fNw&sDjyJwUoV=$&7Wu$;^6T9s!#8p~n-1>O{EjLRyV1!zBjm)fn zgnKj?q7DJArJ^fSOozU@=yk?v3)*)g1t8aV$uN1R*xp78^AbQWB9H>4d%``ot_qA-84U(FMIV&v&x`)NK8zj7$>tQon{$qJfVlks(ORU zB?c4g6WvSaJ2(V)@M@vPU{Fb)laevdTKEUQGN;I0RVTj`<7)~L8a(ll4C_?!m#?e; z#Fq|^Z49#szKVb3xxLF;`=@M6)jRJ5&>y9V*+#Xk8k7t69(Hu~js3o3je5$pX0a(< z1^4;VYa-QeJK(sdDJ^w)(?{wrKdRlFe_Yi&E^Hj+8_WCQPgE`Y!_KwytkGTfC5K%s z)9lvJaskQFwBIKc{5yzUQ|xdH=Vds0mKHhC)7P_5cv%|8Q~#*fu2=AAGRABDB1MM50yG`<44~Uwli=g_ca&Lvwa=aiq#P^_P#tE z8}ygdOWojP;aoZ0fr8vA9-K32zI}WkCa<;O?hv(-pHb79X1iTxmloW}Xv2?aL~?H#9#=97SZ>6XT- z>JHF|Io$s)XdLBtYRK%{g#?fcdIafz%^ zLuvW)PNPch4QRnfOBc(OBxa?L^{}dIWS9; z@6ZlDG3PrdNuC&*hAE$KZH!Hs7}ocdJ$@N~xkX>T6R)?bhCE#fVi~ zBKC~cmfEAJy^7k2Scy&5h^>SK5o*s+#2&vl@1O7-&v87@eP7q-bDn?KP1cW|lbLcZ z#%b1JyTnC=-q@yM2O=pw1O6@jH)P0ktLx90?m4L=zvBn;I$~`k@0ifiHi49IMArPI z{yPZY>;?VrMpY@*NbzgBl;C!4r;XX=AViLwy4QN~B<$KO@2JV^rCH4brXeOLxhK}o zQ(fol>7}H})BC`5ztlAGE3M;%vdPYpc2O~L7S9p~Morukl>8m9ee((s9+KG1q~BXV zxsTSs(UY3pfmWUjRduphE$lRe=3N$x(8MLD#&{nil-SyksNla&oDxr3c$F1BUa+GFp|CV+In5?n)wSUT(E|WG z|KNc|loO&WPZCj83pAh`0RpDf;a(+fu^fPZuUYcE{~Z7Vsg=MEHr^8aFVHEfQ~0{U znFNo6^H5zO|3tjCprFRa1QwC6Xq4WngORv3Uo^KG_>5>JW3oj*RRIqC5MBSNycLZ5 z+)2Yp+WdIl_I+ip-h8KHt@oVY7wK*Aii{z2?*gBvrrHyK;5Pe*TJZ3uI2GBRFFHCN zfVoB~Eq)yWt(IArhHDM2&3hOa~{|-wR@f0G-x{2i%NB;Y?1 zg3}tgZH#FpnWW7c>@%S~5t}-z;UF&ayD`tJR?jk1-ffp9s}C%43H$cZc{QETP^wS= zn?_snD-D4<-5iw|^fo_YW08~!%luVC!$P!U$p%}O!o zs3$a%vss?2bIKaq(U~+J5*M35bkhQ~R$0}EG%Hfp9rraWlqmdk4J1(x?E3P z8HhvNycrv5?FP`U{bPQ3>mDf^_l=NHZ&_}Wld|hIx$!%@ zv7~wlyO&S`>uMRvht+e1)5L9tK%RO1jB619HakAiy=L03-to21^&LLi#&skNc8>>h zOZ%N%+9`|X*GDx*87@5VgKpJ&gZ@9(AoV?0y2{0sjcd&080Nn}ywxkvl)a6DyFYCiwN;f4(AwLp2*)3HvWK>CUR-q!S-!pqqnW8Z zkYnMozE3>c(oKaOVRdZ!N`2IHEK2;}izba7_Eq)e+eGnLVdzBV4qpc)vXgN*ZGzEZ zX*{BTPKNz(6bhA#B>~f3FmVHkRUVc+81t9c2mgwLL=}(C?312?Yy@}`9eGE{)&m~e zBYEgFzqOzVoz_7#GxMFi=Oa85)Bnj-fw8Nl*s7MP*ZT5Y8HC4C0Ok?|1w^rV5on=YX zuNrzI$kQB@=X5~A<*<*x_>VCSE1950k@P6yN3%p|&=Pz6N2<3_@Ge{RT%i?B<9Qsv zz~qJXJT!vWy~=EMu&mW0`1?9xb4L{T(kqx2PpF5Hl7$_jq__$p+HT8ctI?fVj z*G-Wn8*wCKF6t2zIP#>j|>_0a1J`M1>pez-vSDSA`R>To^?)Q4AAg(jKx zvF$Gx{T}n&=6c9a;G)j1t7N0T#R2Wu8zNNQei>hk<=P7NOrTZilBdt~#xFiYx(x;Z z2^jiE(4Nx(kjmU!XlSU^)%g+}?wHo~mOAxL~o^2r$sB_EJ@HZH~^ zgk)oVhD}fPOl5qzA z*d7n*oII~3ovaXg`wsMZx$!Im_?Jldc)Fd$_}1INl#FG1u>SJlwBy735N>Fx$kq@r zM0#?BHizRa9ns&fxD;$aL626^(7F}4s(DTu=7Pouk-hK{*x^Pn{0Yd&2WrcSA3{P z#@~A==i5Cvdl`eamW!(R&*<8GX^N7-ASvuqp`n`=|IvAr^#t`}jytKswS+zps))9hdzZD1eC z^T>?rv&mi&$8J5*X8ocxYzb>xN&2Z!knj8hz_dH zDY5Kav)5zFZYchI!Du$ux3C3g344n-RU9GOL0lO!VeQt2n?u;uK(EvYy5}X?q`DOG z7--vk_1vRV{JgFVz$u{jhpUO5*4q8d{*9wtqt?EIx&!>Gq^5Blb_9M8INPhzkeJ=G z-bv)zW>aV_1X`w07qH{dmW$|ZE+4sB*I_b1Qm+vbptXBUE;;G01ue-W6EQIGxa6{+ z2?pES$Vc_JLTKBKZgBQ5whQHJDlt(500Mpmf_i50X?F=93h02?T>r+GX5nYhph(UN zoM`iSU2Y6A_v$s;d0S-7pZ4uuX&PnXP^PIsmcGqU%JA8b;;K5@n770rGylLJ4p3W9 zX67smnBL-&L+ROsL#>X)UfpA%1N8>O7{ep1LD9 z=T%64%Xe|<%nUQE_GSX}UbSYf@A)?+TDxjhGC@7DZM=c3!93g_Jo*wcUL5u1=^zpD z{)WMQmHiEkEZf}cdf!S7Mm~lHU3UvY@RY}UP~Ha|YXF}~etf>>WO>1eLYASNkkaM*je%ZWV-WIvf8WEjYAT=WkAoZh@9-G+KwHn;m=sN7roW4@QT^<+ zpg3BmRZq}s%=E;C)b?ox-kE+F)Ki$(P~Lt51UE_JtTMjLrJd)zgc%Hms%0aUD<*1b zAW%}rmWR<2;6KTj6jYF{(?Wz(M`vXqn`6V$g@RnF!tlAU+GC%m zxZiqcc zl-GR~?u8B2(!rSgUqQ<-e`v}B9`_`}<+=T$b(+S|g>*zmnpLrafY=0cO3=l6{l@j;0J=3P z5!2Wp(nCTz^{K(MX((9b)G(_na90zj=i)PlaJ>ho)DJ}}tPA^1wqDW(xj8XG7p*G$ z{ll$QkE`B0ai(*q8%Vzv$W)SEK|H^@O}Hc&ZB%=#J%}xBm+QVlBI&CztlM0_Rs|D_ z6ZM+U!FL0%#03o@?`PlO+iHbo;WjqUqyzmw)LPDiDb9hf0arAVp?Na0Z}NrQ_)TNY zFVj&|mDnOKnH=-dnV~z&1(RVt`JoC%!yR6(lx7l(c91G_Y`cI4qH&D5ru=To2B$%{ zg7&lD5-(7zoUUyizlhZI&$%zyJJLPO-K{|9h0Xt#3cgEu^F z4P+I;{ppZ}4C~rqR(YO=4l_K_47*0`iVdKnA5wW4{gMyC=1LGcZl;6u)-S>y6(=ZN zK(`AKp~a{#635#M9iK%JghKTCrNV7947D$#4TdW9LR?oVdveKDogwZX$5AaKOh}A* zXJGRzFhm86M%&yt*D>Bg!a>;XhKk(G@HZ=EIq4(!x|Qo+#PFsU-;pcQkkgaA%+AqD zVs6LAYv-(%g@0sgBvF|bbY(rwT=XxGEzLvbwV4t81WA6p@7Oq zv{6sMTk7pOMwD{^tvKV9cO!~*PPeDvf-hqt3cLl#=2u#2)>Yj+o?~Z0SGmhKilpev zivSfB0R(_k)m#5^sh5(bN40E_0>I@-&Zk)t(9k5w*fMKcL8 znK9J+RFf;KepoyckfqB0LlraeCLLw#GsIIt*mOOE3pn7tx_{7NbjI9);#pX#tDe=j zMQG*_1comqED&MFcYgUonZ5cimMx+KmuQ5XSiOL9oNKD0V(_iIPQULtsyI5bv;UX! z*lRa4t6b6y8mw3a$5C}cn6`4B_AZ*vkBSup@8;!1n=n?Afb9@w%jrRGg!4f983UnXIyE?SCz~)zcx#0PQYGHz1Y5RGC?Q8;%j`l{7 z^Qb(<*@;unscN(PQOR}K>oC|WCf(aDHb4ARg|4o0G5FU=$pNjc`W0Q9M;^ ziwA~@I1`uDVfhc1*iXrH6M>~6Y85TJot!S);x9fsk$cf=>2^Q+8h>GHMbz}S?@YXY-JjUlFesdbpU+H8Qhma;fvku>~wFOx1M#TNK zlS8dQl5?MfAm*R?HHViUDYc9~JCMa$3E`7Od}kr$F_DS`lb;{DvK75P_2J*`@xMf( zka5^)ucOV?4ZllLo1foMOu@g9bA%vdi4$vA5k+yfCeAq(A8K_SzkGoV@-n3gE2}?` z+9M*a#_xw(Wo__A1dVD;CCpp?@>O=?a982ooT}> zv*9BDA*KY`b#cpBl>*VlhP3!G(;c5Y^NXdTb&>T#cKXW(iqM%c;?y<@94GPF=;lX*!x z`))yDoPQXqd=)dSsQUj}qFM82x>b{`dF7(?k%`bY3ha;s? z(moDYENKD2$k!c{?q8crUXW}jO)`{#n_ie53^&t=@ndayx-C!*&1k!Z)#s778!h}L zdAUe@q@L9C>-Hn`kSi24@9q|%;asq0_w#*j3|z2MDdVO|?{K2Sk9--XMQQ$Zv{cb*LsfBq$h{p{l^kStQvyf(bQul-60-;# zHN!=I1p-ImZ7h`%QoPPw(Jzypx-K)>iXSVqnpKUMEmg}G#c8Q<9TW-f9KHJ94e`_~ ze_I81P{Dt770;s1VLP@Y1qi?sYmZ(-v6B)`|RvIZvTTf^-uXJU1 zUDqsIE7^(Zl6NL0of?HpkDh?X(2gj?mw?sNWZax{y=z%~@txYe$)Qqad3k9b!xr&^ zu7t;%Z`5>r$D0Pp0Y-%aOWl%fG6803t&u(1HB4BaYY*c&`43l0lCMf1V{m`CR;%x< ztBNF~da2kd+Xf1GnUhMiTxYNZeF$=brfW^H}e9!H7Brq z*a-v0zVQWYFmeE4yirbY83Co5BHIT3`=aptf@>Yzb^tN*gN~qPI|7^{ViG<(bP{3>4On&A z=4vrU>RPw#SiW}9u~kj`{pjkABtKMgt=%1;N(wL97cX*;I4#P}^@mLJYd_on=4map zGhRxJ_uXL_&LXms`CPtNI#&Qs8lJ)n6WFS>DD*rCsnblK%-YA-v(zN0jep!U%)}B1 zdw6fv;JFW9h`Q+X{=gaQ8+$>cs~wV9^xiT~C-qo&=TcswG!FS}m`=EZ^Pp#Mk=v@W-`GnP7U3so3GI4 z3+l}@{da$3nOS>S&9IA8;k<>E+@shNI=t!ke$IPp!=H%N^L%!rQqMwZUsi7OvvB(LS-+hH2ceCxzGS!OLH*hk}+~&BFg(?1)0Jj&ANUi`t4uOnvUnLV-s}s zwcB=<;yh`qFQP0P$^3z%U5275Cg-Kte>3>|lTARzrtSvIz7>FoUt*gN9OA~u4|Xdu zDZv>xc{Mg63cl$S6}9_3TF3IYx1t2h=$5}(1$wLL^!Q2b zl%InRoVCi~7&a0RA_pPW)j@&@Gr?0ZCe~egIC3zz-fvtc!d}d|it`V9#2C=45!Ad_ zFq|3r%C63L!q_}2R)hFsB~~pY zeZcV5FS$`HjX59VdNZ}J;cePKjv?lug>F_ozpoYXc5>98niBK(LSaTKzfVu@D1Q+d zCSD#j@RH(x;EI`R@w6PPj{x1B@r7SXx&IAIQT}s+>7b_W_lwEDR`r}2V9!r=Gf)4_ z#9@`1nZM%e>zYt6HRj8IM_Do6UX2>;Ro!QE@HdG`ba{g3*>IgU;{YdXEr!SH+lF^b zpKQpfh8!LmTzFN9^3xK?O1xk?9~!R44iWU@M(O27;UD zDNP?0(RkDlLDTnf>|DlDTM#W^v@S^=GsQx`$POa^B-g>n+4N>^bF)yzoDUGCiehwUVBR(52qCh1Q2Vza5sN zNJ>4R!+s=b3Sv9Df6Ivmu=vC z{r|UUTSFS7l2L?tyM&*b(=)x3jK|O5s9uPvXb?Bn>!aon66xe?6vv>)Hft6-fxtAV{v~F?o#6e zE|BE;dDJHSR89b`Ww7YH6&T3Rqa1a`mEGi#vW~M+mZ(jRLCRO5j&f8%ae4S+C;NZzADQy?j*hbb zr_FX}c|=Bc{~<8d;0eNrv+INQotxp+RR;PQzvR`*SB6~sr0=Os9=r)Jiwt&xF-7xq zI2oA@-eff$b?Rng|50#8KV_+_6;hQR!5BFQf1A+jG{jfDTFbrG`W2~p^$O}n?v&$1eAI`5xc7jyzD85=@($RIv+Qtz1@WU(vpOH zS?~y+#F3DlF~_0Qw4Dbn&^Mp`OVF7r$*WPu2L{=|>}Pi?D;W5dASpnB71lp@vj-i@ zCHC_|tlS#^kXRD=&-Mh7o_4GMUirs!b@c&)QtiQRtT?+H<`ykRSj4sUBM6u# zgv%vWT8yV*s|(EX$sl-qqBFS!PHVMuZAs%E`gtFNb{5e^pya-JSA zQ;jwU%Biulc4V`}Ww^#pvjD6G^AcTnGJEYNu3Bzye3-k_`>mA>O5(qr?$G`Nz$w`Nk6GiC>QnTVG4N6soy4cxf)a7;vA@`j%Z@9 zwDxtlQ_ROKZ2I(j9=}VK<~Lt&64iG-X)rzLIT{OlFw2p;7gb4aw{{XS`uqctCdbA@ zf15d24IuzNp>10JKO8shdWU9xL2kS*HxHFLUXz%#zb*a(^}- zY`f?`C+)TLyuR=DqPr|ba#&c>f%00qfM*| zu+T(ZAw3;`U-ynG50MXoVlEC~alD^3FQQI1_f7EtS`;-EJnz}D3bCn;CBA(0Gu#@u zc{((UR9B_csEQNtDG2_Sy?9i@YsHW8MvcG$z`%;UuOJd^X(%fX>NxkPX&V~p_jx_7 zQpEr(z?e74b+26*Q+$MSLmrsE2YqnA%&=Ysy<8I?7(g>D!7rP?b2t2~<^%)CpX3#- zB2{_Q)A$HTlCTNKGg5COAZI)L<{Df1a)(Jh^U%mqz>w^v(Jd6RrC#5Zrc5GTw~$KL z#q{K!bmnutoiRf);hjg2IDif|88F8L+5X5kMWVDov)_@Q1;3JVNk||$1;Mzr-`w@_ zL2F)(;5#biZDMFKq;v}A-cAI;A(oZIfsQWmaAz=&mxz+xQJnCz0DC zDX%<7&(SlO*-xs<;%PW9DE(&O1=(E7GGWx%=IK_sE+P&!t~HJ%J39G>5I)Sc903|9 z3A*}~fp7~8x8x7~5!1Rq%5rwD>n0D|Sfm7~>A@d`BwoJU`Hk()Gwu|W2NS;t!L$LC9erT=4(yy5fy}2>3@yxWrbaA+{6v=#q49Q> zod4cjDp2{3uZ5!(x-XD)%GaHRJSdq0|BEnTZW=vO?=#~$vn25yJ5Y_WyCd45uta88Xqy{KMZO!^`3C0o`> zKwro5=39hbMfVA{7e0Dh@yN-wQ|xj8;GtEm7BA$P5~$=uZyuq^KS8D@>Yg0Q&Sy(i zT1xEWp|h>!40!Xk-#M;1ibFGvG%rS&wBv{HXQAu`iRneD*jM6=Y6n->#DI<&g`uDR zlXiZToAPTRZNA3{GhNLIsfyRh$XcMAcf&Br^Iu*_0oFWn{c{ljCIh@@OUw5Xzd(zy z?(GsTU#i|>PO9j&OHZ|GZs#{r1%v(UjE=-RFD$;p<2#_g`nVk7u2gH@I6dm4aN5VZ zFYQ)0&G1pj2VQRQ>ebrJcnU}6tQfodb?0239fY5u0Dm9#@6~Ezll9x~Y);8kk(3)6 zaoJ4;8F(t=$CYx`&Wnl~Acach!XYyw9zk!=5#jRK`KzZJ0*QOcVL<_4AQJc|P? z092I|YTiZj3nZ!9a-WGK2-bvhqIL)#n3nA+v6DOh-t zzv(uO>A!2y(jl>bJcN6qyI8!(Zr#zp6LJ8c{f!%|$>+ulajcd87lphXZz)-WNS%5TE0t%4^sigJX_pqiQ(D)ZTWjhslEOgCPX|J9Yimc( ze_Zy4;b%-y_?24A=09!;qwl1Bd72;QUe?|dAN;%fQVvRg_V(HgCB4-*@go1{#ng#! zW?J88q`zU=2RpB$KDH6F{msfBT4FS=$ryxjyfO&vY*=~fvq?5plr}cZ+IrJCZzc|$ zJ6E73D*MG7J9+=aj3rrRKS~G1{o(rBL&ZeIA({^kcbCmkeAvR6h|Xa>ZL|eAVRbnz zyUVVqeCZyG+xEPT_$F+m^lOz2nFMcvR6C?9+yYh%au1)s7hNl1t zl3zH`XWSu;2^6-@M$virD!hFov!1dbq3+=L|H98N)}fW2mt{&1<#M%?r8a!#MqNh7 zoeNuC>5CcGjk1f!;y8`nm z-zuPqILb*QTMXZg!nZShhLGH`vDHI5s%K>IeeDT)MG*xqc@P|PDVb@mzeKx9M(Q=`!)87rfhNPF9CRHBJrWxkBIjqWJ*eu zGYd)oC0*tQ2m8W7N??A?-E#LfWIjv)-x=a%{KIR3OQo&-Gi>;`|Aw-ZoXMRcYLO-x z-{1~83(@7{i?GUzZ@Uk}>*%gE%#3=Fo>`l}aBPC`h=f8T0g|Pi@?q zvxPDbuJ|WSQ+cwxoOAZY+q12Z!&Z65cu|Lh)}mI8Ih72HxnSOKU%OU|BPeMG$1o=+ zu9}0IP7z>a1U&x}vc6sodI{)eHcf%{O>M?#RLgARpny%NkX6^~6R~Nh)^U^b#I`pp zjm%o+b6yhls%>#K8c4uEI0z{XP9<89lOTdYra~W(8h9j9RrKI9Xg>Y7R{Y``fDi;&bcOlBjb-fvMg$kcP;n)378< zx}$3;Tt-==p8q06h_aJ9c{!}-GRd5@OpEaExeS@*L0h|&GzV;wZE$XaxcilPDqWD) z*ybVDmA@gXlL59UBd@^VVp=3@Co7F@OyS6VR!$ab1uQt=?@Na}DiAEk&CHY8x#P?Q zr0b~KMOf_?Fvp+{C2B`+8r@Qb&`x-0FBtEH{ky6}jc3<2h4os!mUxXHVrG4wtHtth zg-%ZhG&qwf&B&CrimM`B9#w1-jpq(_@vC?FAt-nnAI4Ah+a+d8PG(R(xn%+uE5UFp zjS>7YZI~z)Uy4zvN9Zk|f&EtM7vn=sFZ1MVwo~!lW&4vhP%=m}(CxZLo9v}1?I7sN zi!Pt5K$?E+6@sh;b?Pyz8qsxP)ogz0EaACpFC+t;hGy?gM+bJyTG6PD4D=eVHcqh4 z-AViS*1ZoR(ppyP?}bn1knLTRUMu{%o%wu34WU35yje=CwCMi5?W}g5%pMJ%m__J) zz@3!{_x7LmkFnami&Hc5J>h6e?9L{9iq;q@YbLLIF{^?dKh{O0a#_pX(i0Fsba!uS z%6#zzLnE}{;LbH@>L3GT<$xGk%@gL~&N+(MV_jd)w4YF74WcIp9WRi_W6hR^N!hS> zqaRZSj8wM1jj88_RP7d8pI#ToR@A^CV9UaXpzu#b3hkEjOC$Ihzp-txw+~>t>!bHt z&D5c>!2=BL-1@^6s!{P+5-6Nrh^i#Y5+EI@INO#5H?1dGS+)Jz1$@&LGWqZt7L~jZ zc^YG|zV-Et7S~!AU0)x^^dYsMbSGZ+_O9kT2*V+hV-E{{m+hCUM zMTftmy0wZcUkm{{bEl(n^FXGasIs*D4hwR?-C(4--EvfVy#^i=+Z|h{JVZ$F7#Hjq z9u=Xcw0+RD>r=3%%fcyBD}U$a0m(GNsNb%v{OHEy(vrSaECakvWR0<2IG60SGdoAX zTjSyi;xG|^LxjtgmYUv%Zvp;ygY9QB3)snJW=j_u%qjh9oQMq56^1 zYkD_vPbcH<`T@ZBK7ZDyo%W1goRqV{5lLqT*zd{1T~S)G#TemUbPx6fkf3#-MBe0&sN%m&v4|(^Ovab7 z-`!Rm8!%Yvu&=PWaj0Ud*yPS%GM%R$liyr-r0l^It=j_nL5~&XS|WJT($YW-N55p* z)>GubNT#wOhd<{9AYc11KTU5jeAg}OG=`_(?P1m9-c%$7?GsiLzisXJ@uyLT3`__m zsV7qbXRuBkeB%gc(t7ofZ~gA)t~5_8Ew3pj9*bZ)$GaQ8vYZye74QmlE7-jpke0pX zPHAQy_gG^AF|*md1=f|fHdIG$2b=f-(}cVX?r2V>NYbXB1IG^mxRsT)r7|D@&Wd7f zLQ?e_U<+BiY&sd5V-IkjB#hFVR2XJ+qo?o81_rr6v>5nEaY}4vH2cv(hw`x~YdZrGwH@pIvJhT;42}yU*Hp@tA(?DCt zzms<>F??T3sK5NDgxIWhV|z8iZ@yb0Q`P)QPlVEZFL8<>KDV8dn%I^D?`|on)N+$r zsS=FzNYNx&v+IrYC9zAg3Y$eyl_}?bOch}D@o0B|T1E>%$_nTu+h)lZOt`0| zz$+jY!}(LKVpYm8pB_#wlNZ(kM!cKgrmDK7&AbDfsHvN!YuLTXErE9Ea%m^biZAwD z=V)u@+@j5*RFE^UN_(bfrc3&0!F`<_-Zcc06GIKWHI#$4`&{2%EbCk)H+3WHF$VZf z-TmbWx!EYPpBxa<;;bEIowSG3n<29nk_g0I-0U@R)0M3lb2zc`#kQwEhLSTe`@)3q zwpr`np=WwByi}*(3=Sb}Qrqg(=(tE9;4^>aBJjMzEjS+eZBwD+$&?+7f)kIW7%$Nz5MK=V4ipL>5l(0;w}*+Dam-Arv;E; zagBRDNnNX&n-Dasrg>#=@b=c9Zhf-F2aYPV!H`Ttk zp=Lf-)$!|fdcDA@8$bAKL23gz^eDc6#~U)2o&* zktcF3z6JhjLP0(sFUn>D1D8|d+=W>)Aez?yyW!R3_%JZPxyOk{fgXZvh;7w>pOp4) zFM7xC!EQzG)?2<)cEc|h5KJq2sE<+PN%O|Y1k^MC-i{aN4~J!6lsz<3|G38lj&XR!9cq1~S_Qba`}RCF z^4IisUeEfXz)1B>8JTX>PC0>18LOms+&_rCl+vjIOh_!{t-#!fQiGk$1w+qXY`v>p zp#2-_d4YsXa)NyNPmgZTw||!&IH9@p-DN@USUTx&K~s=gL0<3HJzQZVG(jAL!W1 z*HaIa(J9|fzb={*YK~R$XVjb`M;Tbc(hY2t9v_@1hUpo8^DyxS`<<L_N*Y_Oh?3uXq-Gsj z<7Bu1bk~`a8)L^eE)>wP3OcjrUY~7Z%C*~I!B^KzdF0la^7d(0+|c{Be|dZ}f|c{pIXn$c0D=dyb|WqbYV zcA2Yc5Vb|^GY)=z8U7`Eu+-LZ#+=J}?speOk4GtGX5}|UQ6{|L_hvX)JrF-J@gCpn zSPPa3#)tEm=hzMFHodi*+;gwhKbU#Pr{UzUT`zGEmk?6FWAUW6Yva_#H2#Vl;`6la z6m@|Ykor8p^bCp}r2B(~LQjPpGJBi-mXI=cW~H6b%n3E$Mxrmu<`Cj6DW6yZFdiQ% zTum)hJhpcif>v0(p<{*vV=nkZFRQskevz+VnW7q8SXkOZ%4*L><8Dv?<7SIk(>>Sp z+g?1osJ#%!$rFOD!*mfLTF*{E8h;|goX$4jcb)FNJW+HyA$_r>w$hcs#oyYus-$mCh_N%4k1utsoB1p3 zFR2sE|C5eX`l%hWumDHgb`j;STJz4z8!odDV>8PGh7+xlS6d-}JnU@> zAY?v!oFnA)?3^tF;~6#i<#`>^kJiMEvSf%)$2!N_fn-EVl9ass^0lh3Q07OiIY-xk zE!HdiqxjW-kiuTew#4ZJKm&?1H6eQl==B6{%l9o6(Po&Gg2HP`+&Ye{D?#+vyN;l^ z9ie7AX8yF81~H1AJuLNM^~3W-HnHrEAAF;`T4@3!j*aDverC7SMjA4Vm*I?)pXwPB z6D3GU7)xQiva0XU6Myo7C$Y**5GC`F_7AI7wID#I=IEQ`EviB6E!u>TQglvEGB2OR zNU>KBtA{G>37BZ?+ACk6RPz)Cu!)H(P93D(x>8`#$xn@)3#yR%ZWhO_GhtM2^h#z! zD=;$^;ZIL9?0b3&o&atg%pj{!B|`gC!XG-$zD!xXw8>H{?dTpELmQB004&(>b?(Ox z2Tb^lAou&)SvD7)r?ckBk{w1k{8r`fq1D8=t&W9N!A+_3qF(Z3Gl_JmpOUg{I27M_-SRAc zbbIJ>EMpbP@uJbgqG^S61lKg26esVNQx09eQWmT#){FSy6p8}1yw0J$t}_G7tT~V< z&rg|@!<&EGo6a6Ku}GfgK$oW#+h)1~nM9rX&ymoJP4F*VcuxA;FyzsnnMb8C-e>5!0WM-2j7o!oDxs{EQU!Yv_OjC8>dk; z3WX~xq>NQQiw7fE4S{!BCQ?q$yM3Ld|GQBbx?I=ku}-@5U#M7Bua}-#X|MFiXT^nz>$1yuNd(7hdIg;4u&+Sop#2 zMmVH0k@og|=|&b{-`WpDh_gAqYRzl~(wu%rORIsSHTTl~-<6_*P_v~|+0Llv1^JQh zBBHy5g`oA}MvvihR^ za}qB#8sdEC)Ui}koOV=Gd#>aPMt{A#-WI=ueKvn@|J%d6fs*fEPd0Q(pRbG6R$Y!* z#Wi|{BTP!N9DJ?B51EEcT%AT780*EjTjY#!)g%%;>5MI#RQ=l8A(m@-0IW5hT77>7 zwZ|g|J!Tog&)a)WCYYDs?3b(2fnW}7xs!Xeq4_d^RO`0$2P0oyWUak|vuleEgHx3!xM+CG%}2${xMYS-dfx6;m#(Ay2Wtan-pO=CacH6i&LF z^Dn6iZdC=Za?SBNYu(E9uBO>W)C0=qof(dTjX>sYnexTvGZJ1syRTY*+TE+@9vU1k z`H_`7x{)03NByJcUgx>w?$mOK-pfN7SBs7G%bB+SdM+NIJ z9pB{3mW%UFG+M_cuwp@KKV~CsGG@6GfBY-QFhJ}B8jtM$E(xRRda%004Nsf}OU zk=QhO_(@UhPWkpEH09@%#3upU;VgU;ztpUfeS$YI-s<5mgNH_28a~tuf*w80JbKju zvru=f?ohB}nq!CE(Ao+IIvsO2SKcVZeXbcSv9bcm8gXLXXI-PHXf`D`u7{WBjtQw} zjyDP}d=4Zer+;fr-$Cz0RX?TftO(KHlFukd;G4G%A$fDTQ!eO6``ciA9O4UqX>RaO zABOUq#@s2Dbj*jtc{)Ha@t@qm@dTOng6r@FK7FodR~7&rBW{jkm)EG)4;1_@we6IF z2a`f}v%YtWEz(QYC==s(0CvnOJ;U0iFpmSE--753QO>-vq~XtZy0R9RR#!t|>kw3o zTSSM2Z{A=ZRk&TEAk@5Qcn06n`KE;IN<#e*gsF>GndFmQ43xPP9g?ga7Ii3D;Z=C^ zXTioQv(G6%GY4&3+jpC#gnP_(8?;1i(kF8o?kv<%xAte&Z?#*VQOjuen&aZL@S5hy zrlZHy37Gm`Ej+a6L&|UMZ+Uj5y3s8N%9LSUTPJ!&ljfL6btMa{j6YED0koBy*L;XC z@CRpM*6>Mko(I|FpwClAdK9yq6JmN8cH9?ZSy^u1-E?24)0H$<2`i}`7-)6Y8uEYo zB)pSibuFMU#V>751x)TaELuVPY^FYFej&KDZ_H$ktP^~lMjW<-5WVj#&wkLt% zQ#9PJy`yqzuLK=|<`T06(1Q*me(CG%zX(`+y9tk6Rf{7!g=mY?QgJxc0s{D>c#4nM z6$|uY(-_;qL7o%e?rriqo_-It=wn_7_I4TlIp*CQrBlSIu=V`=%R&Nl|Xu{zpw8ZWPw!2M;6 zf7OVask;7Eg8jXnl$6W!YCz&Fu_@HSr261dnD#kv_8&0i*YQL8M&48@`&`@V<|~LN zDFA`J8wI4>%ebcgHjE>p7&LznL_k7NLYYXH3eqs88wo)eAq}Gx zkZz<)ItGl|Xb_2sl+-30A&j0QHyV7-^J1^|X8Y{yoZo$2*ZsX5Ywm2~X7+E*l(4+c z88E|fGF(~;2l|Aw9oYn32PNhsHZRNkCc#2|5&9lDrZp-HkwPajfWgV}&?A@Gmj-=z zGZL5Jsn<>jw{Sai>wL+dNJadicOgKAF&gpA1l*0Ht}Zq660J#X>>~@m3)BTObZKzq zR;Quup~MVo4jb8=Q$KrQCRA(8aKQwBsjg0N#k79KOqDpNLE=giNBfwv(Tel1HfzNf z7aBOXp2=u`|FR$e6V_|ox9UuPAE20p@jzlyFW;&=(M|j$#7%z~8&f`c{bGbuVE(>* zjds!9(#pv-8){9fC;)}TW|CR{kUGh?EpGs|wb*YD|3tcQ%65i&F0WQRaDC&#WX^^# zeX!XojAUQ%=FlU$fRa{U$b;u`MX-Mqq#ayq*Q-|6xxnys0V%o0+oJj)E)&7H!pvzf zwV>ET09P>_Ezb0+{B6Gvh8hkR21dS`&>xj71&qUk1l?M6QhyqpBMb{8uP+>HthO@i&JT?EX(a$zJdbkd(u?0S= z{4Upt6g%X%Rb^y;lrI95YvV|}Gm$Ds-ogJU@Vl6dV%)yfe92(w6W^-FGIw>gvdAvR zL0bUKm~*Cc{EM6yi`dEZkH=Vv_Qaglt-@0d4}iBiO!^kj1S78*B<6HuMdk&E}9Kzw}ZjKgd>Mc-63S)kBkr} zfaZ>;jXe?8;#nLPw*I}WKzK~Mb{lQC$V%69+TlavU>R!gnLzgMJ~%8;H`pJa8{i4s zpRT^v@*?%wy-q`Xlj#k)_0Fz)fhA3MlPZkV1l^%G3$HFJ(S_R`aECb1?_xN9WGs1R zB{Zc8h$@VGE%@{vxvLEx1j92b?o^ScSA4y8#dyscx<)r4FZYc)irE#;=aMp-0Co(;rWTMzF)lB?h(0vS#I$(^t2+jyMm}#5>t^q zPpMK?J@RTjEQfv2i4 zhK48Lh>EDB?a3Vxa0k}fZLc6Lu|U?LF|N4w=Z{q){!vKJJof3mPEV7E*P5jZXSeLl#NpJ`Mh{!zT<2%@=}aqngn?+2)xB8Qr2PP3F;5$sX2AJ_<2t*Rk` z+B_CDP8Np1(^W^zCMBZxe-*XAdmD3>R0{wPH4mULOcV!k|61L^VaCCW|MdH_6PcaN zf2UGQr~FV4JHL@8d-o533*%hJE^FopLd76U2;D8i2)@ zSN4}gBUVekX8ZXN^Q5mD!Hnn{qK`rv7?b>hC9y0! zc>G_8O=c19XuZWck=EZ|S1C$2zxfBa2jJs~zO`@)Vtr1jE=P{LLU z^4_HhyEMp5p-`%IbIDDsNx8lzVs>}*3aoSxg$#%6+9@8FM6K2SM=2OaB7)0E;37gf&Ne! z#i_P>pSm~iO+`(Kz0$-CFJY9PiDkVKG%7G06I`UCA;lMAfWpQ8eV)zgZA8VeelPKp zRZR`v;vdD^Giw+kWFF;OWT2LSTc1bK)|{8QJ0OAQ@xC$cJxYrY!b7avP6=&#DSWN1|gW;V5MSCL5(e-0VorMi9hLJ7I&*xn&$AY z^tb>joU;E>ICME6%sIJ5SY@>b;HqV(${g8)vQ>{?az*x390y1{{iBeZ_LOgF(-(z9 z%*4b}c(uPOG$TLHvj^GLkcR#&2VFHA8D^cd|L?QtXJI@mz(Cec3qc}$4w z)Ki9ft(^qZF0F#X3G8tez=!M)YW>uIbE=Jd+S*6v)`7Jjr_1zKN9||rYd3o`iY-6p z2agvf`AzmHJ*avB@lD9DMIxz-KNmwEjzv=KNE0w(A(jpj8||!3%ub?)jM!3ISW@U; z3>(z4;45Av5k0xxh&}hP3X_yFs?Q+EQj#8ZjLf(~Kx^|6^9mn%7=AYQ&<1sWNaYqS zZyAGHAzGqaX+8GM29H=}QJVeqD!BPP6YLnQt&rcFKiZDo4rv%h3k}ud7Desz%G0x0 zqCSDRGN+TrIo(#j?8nOa_OmAkl`7DBZj;FP(>$a6vqdo_VY5`5IF-XeR+M0Q*=7FW zO5>7xr7OQZ2ZQfs0WJE}sLNF*4*c9tGMUf&%FM8A3mXd_saI_9fx~$;vnGP{ld*O# z$Y53g(p<$bD#bqE!VskWg3>s;ztZi?yXcP4^N-F zOAl1LH4B>p!@2u0xusI1M}k8gnScbyzMl0AgQ`ZE%{Pnn={(i zLVxI*O6nxGU5Fpp#oswhY_BN*!m}Y=r}qne8;HaUESqIu;kfqZ$E-sF=)|#4A4p?& zgod2rWQ&Pq-;3d+H8=^kunN1ZNSzBqPp=>e8TH6idLhHN&8nK8>cG|;8|G8k zY9Fgqnk*=iD^=_+P?&3a>U;#nGbog8MI3$t>SY`hzmf_vxIPtfU2xMvx!XSst0ES( z)2Q1${p*X+FYs%{Zt=Gj_&1ok_GX#vpY4Z9+`~65G0Kei%aZfVwPq@RL%REWpD}6o zrBe{;x{PbC_x;T1@M*YZVECJt!61w7pd^S)z+Z}=Ubf#lURPQyHv)SQ@h~@*k-*cl zl`xyXz)n!%q#}IUV(Bd5$YbUtq)esWHD=xrXYK~`;z3$*>rMSE%g)n|xy_#P>1so` zwKs{5PPG$}9p&wIgAz5(KN6m|Zg`sE=bd^uN9M}^`rJOAF9F&E9@XEHusSO*VSsxz zOb9p_owtZD{-bDk8xymCXs|beDqE-a5vX~aEvL(VU;ZWmeqPl#D7?|VxS?RdrZjt2 zQAX;ssU0oZI(-JQ?Bl0{o5tq1pF>HToYduV)$~0*eHAAmS#`qKR5yYyk(|uR+SqhvbabXiQm`s z9k;;W7|XBWIxoy4T|l>Y3CJGB-`#HYdVV{do~j%#n9EY3 z5NuttQe%dc(S<_CIMC5<1INd3=h0}m3q4Gln(!gkvBdD@l`Iu|RYqEGSh99s*+8Ij_&Bs6oMJDD@bA|p3CCLzD}BOs@NMEK$7K^pjba+ou<3gZLt~>s$GCRiK?Ld)!y#qBVvN0LSoPA$yNu!R%0`Mor|cl zA?64_&T%*Y-1%P;ZZGKro~QZ^Lh)nJL6psY?w@BeP-I|^@EEYCVVRnOxZt# zRt&osi~YnUC9IofYftvQ{_m5-vRB*@S?i6}5o%O2&BKqCIZ<{8u$C4PQI=#FF85UH0 zR9inKB{}~?i|Y;PK&@!L@3Ic>^4mziLG)MedA0wv7xEPDSg7*V2Q5GY&NLT!qv3Shu8H~v>p=# zx$ji=WFQhy%=zf#dB}e*nm4C6kKiw@spl@tr^*T4E&vBf!=_+C8dC*-aJRENE^@{% z6Y*)KZj%7;Vmi|#cpZZXf32PH`f-`ly3W#{>{vIhMfRCx&w=30!Hwy3kGXE4h1hTT zKWvT7S4D7hdKmj<6WEMGrxqqYX~^orQ&ws<2V5yN7}-q)M$~#_-+LIYHV>Oii!-C! zpp9d3hxF3FQ6pMV3IY`|Z@BC${ zEF@EkGnQCthKsv8!!%lKZmads#9V*c!|0LCtz097!nj*9?DMG2#JFUG&a}t$hd(C; z`O_cea#l&T<@NooZ+XJ$wn)8?1*=LMU4s{IYWqZNB{L~gw8_KJUYy1Dp)H@Te!>F;vhYYWmG;j!%zmh}yFA zVnEQ7E-bmAFyw4PGk1&mVI-dNRo<6+9wDtE)Mja9<4m-{cZO|-aA~b8DYpl#MU$SS zC;dmr&}|$MX)jQe>xR6{-NL|F5`GQIEK-te9`0h&ruRJM{6uErG^{hEZ0lzoC`<0H z<4+|c8zB4$XI<(=G-o-q{p_<7xIAe1a&_2ic%2^K`p?WN= zeb2xGV`j_05UCnjU!YMgUHKl+Cv6tXWaBaj)ZB?tWzOn32m5%sIKqa^t(HiX0`cE$ zZeWYEAs9YA$-5>JmKfx?D5R@9u5Z031G}8E_|cm*%zIN|38iBki_v8nvyeFmDV5pd zPnF(xs~4bxDx>A<6K@Whw$Sce;@pL!MhzVmp7x!k`fLSs-6<=pL1;z^8lfR10?HQI zM127AcGa8_I1g$@$Osji`LVJ&=clACOHaM_^Es65cb^g6z&q ztRZJDWvfnGT~bP%Th&+1Y0MsABS6xGC~L>Fqmos3H#f;iBY83+E^M1a+c4c^PSgwD zbh7n3vDZ=dr|>deuK)pD^evx*4M&X2wBXf{Xpp$D&`YlMhgVTz#ylEo80XWZjN5CT-=%a z`HeT7WYMkulD9F3e9y3+xB?c*d#{WB9238+@p&)b2*b$DO;-|wa*s8C57_xmpJA{&*M`R4`ThWv%7GLsxt@gmUy9mMEk-gB|yu z+y6%aU@o?J6@sMzRpniZ<*6{KTWJ(ETTu3MAH5(oyc| zxYodngc@97OpR-v{Fh2n%L8?{j}x_hY@rg|WdGv`8}wHA0j>T|b+ueyudKgGR_%?p z1zdtVF(_TED5am=d1zAKo2Q)eY`aO3*(YCtu0OXXi?hJH&rllYvh64^Zc6_y0q)xd zbCW1bT=;bk9Y-0js=GR&UV2@xcF6^+zkAwsZ9^y`(&uPFJZ_wzhzq&9-S%I@_+}fO z(??$q{b^&@#yf~24vG08>q8kr3cFuI;!f`9TPZbV8q{1!A4F+Cn0gLApm;9`7`xNH z_jhY%t`sQ=t7k{Z@HaAJ%+wh`dF`Zv zv@Pr$R}zt{pu>=Mu4Q$-$+A?3FsxxVv!V1ja{42IdDcO#rdzgD*_0r&?UToTkt68< zhAzbv#t23bLLZnaH-nS3h4G7rH=EOk={ADod<)rUs?(gdz?<}I^e*pTijV}X{Rlhb zI*u$r!&%447L$(p$xC_YS!iPGW!c(ff}z#7ZE%u*bj;ryJJFKi6TJ3xsbhv3I>F&H ztoSFo$_|qP7|81C{2O1hdxla4mNO}5j@1Eid3m-bB`9-$(864*XkP6X;rr(^IBLL+ z7!1v@j~DqFy)tFg;pEUCyXLX_cGr%LD17b$EcoC!c6#hL$JKVYI&1$Q$!wV}aMjAniu;hgD6>=F zD(B4J-s?A?T`&=nu1!xV&8zZDiGE&~FWfR#6GthLajF=mNsx(rxlYV?KMSk%P znio-YaBJbH#i<@udJjzLcUcm7rOfOX!m@welg-i1WPbJsn_BiV-o0bkUS-8rfUq_S z?H^`PAxw{4xN&y&87dvogAgekIxr4Ajh3iw0@1{1w8n}DC-JG~TS|;osdM@&$Ab?K zJ6`N3d@5DYhC>7rHTMl+3r~eK&q@ap6uq;*Uh~+75Z<3sU?z?! zJ|rahD-~c%2r`n!Da*^b06!IZcoBxD>UDVWt(|;s@eT}z?9`}poN47M8@UYE}BM#mllcz7`bZg})m*wX{2a1n$_MV%dt3v+7D4C>$MhwD$i;0j#)xAoKJN zYk7IF>il%QI}H|vz4kTCeF;zJZiC*&NE}cOe{6dE(z)j%Z8ibQrK@3XFkg^yVtPR1 z2HPGv(bH7p-Em}U9O$$azpM#dm9RE7X%uS|u-flU<1Y{NasTl)o0Wed{sxALI(?cwppzKh=z14GZ$0pA1{&YvC-ulLhc-*pRa^$yp{f3%gqGbTEAT-n|*1>Z{G)hPuYr?xjGJ7T*ytu7t~&|-qo{$Z&dsQs6maZM^?EP`v;};DG&Bi? z3h6TUs3~YW-XnKq9Ehwz2TcnLyLrCgu6M5!I4`Z$oF7Y8Z82z%RvUfu<#=VwY*BzD z!%%|@{ph>ZrAT#Aw#wQfmBx1Re=C(NektjE`VA+oHZty*CQ*v> z44D~y2V|6mjQ(;Hhx-2EEGxNDKl$2lh{ns>mJ9gg zEYcL$juz_k{p{*e*BY>!ku4njBVUEMAV{O&)06hml?#+fMFsxO2+a{fZgOS?@lt$P z?~{e|=GMQgqOu=TXutOj!a!%Zce2u@%Xr72 zZf*=P11E*_4rtypA}LlBxCY9(lOGKtq*!3k9Yzja2g!KMM`3=m*IM3nt8*Y;nSrJ$ z^YYwxgR5bbt{p#PQ(7*Bw^Uz97kJ+a#NR3Mdu$-H`ru>iIiuCE7dSlGNq%T=J=NlM=*c z9^0fSRks4g*jpEJ%dR0Ub(Cr>{1o3{COW46Xo@)Yqlao1N@*Boh{kEd-k68tc0O5u zG#syVb$;ro{j%gt=RZI%R+n%M#_`P!UxTAN7 zt-tEcLgUR!fN3Z@>q~U7e`o(Oe==p!u;K~5g_xQKRR;^*fucz^hPwhUta_QVZxa`+ z>sr5(wAvSoGBWb-dW1xNWV#i1bN^(v8q1bz>>_q=T?`0-VjI?2RY%ph)Ih8EWLIPY z7*|~HKqBlpM@?Q60J4Qh`pPm8sX2(~XfT3~2%V2T$otY#u`Ff6%9f|QJR%Cs`s|1@ zI{mDeA1Oclk}LYB_8=eXYZ*QkiNEJ!4dOD7cN11{5@T~2hDDW^9Ul&~gpuCJ_A)Vz zN4B+|NNb%4%Dtqk@-@AI<+NoLP6W4}f?sJ~zzYb*iO5IdBADRr9EK(q`xr8cQ1Z-vgHSP^POGQ;(Q^e?#0BkM|dZI+q`0vm=u5hwlK-q z`u$}oiL2}%Md7B5(+^&>Z|Q{7V|1$?zprXfd1&qB{7}ynbm5AN2vX7Y*Ql0*Ku2OK z8B==}=%SwjSwhan&~vp$oA^OoGl1Rj_mpbB%0gfLvW7={KlpKec(-3+Of}|m=?NA! z8;FUv>M9nA46(4)UXtkDI)04FjZ1AQu_~)_UTBckoU2wUbPYYx-;iz{Zw`F}wR+Ni zYTq*T6}olrvN+?QjEEwLZnYAd9ERWQ6BAUI8ywf>>g-DSsn#pI0ypAPRkWyz#Mb2S zWDig1S(a*=pgSk`r$JKoKzF z6eTs=70MXe;$>KElJ`)-M4iI)fk@8ESp`m7CiFai-7-R_>gRl;IUk8==sc4@^N1>E z*7W*FKyAS+k=}0}W5Q!-s)8(w>QKfRtp|gQex>uSS)FlEA4ZWe!>+6R$x{ zLXoY3)vKX1sd?#uf`dK?Fr){g@tup3l;!uvVZkyzahD3Us*XN@x!HvLFo`l7h>)^V z9=3imy-}uZ^A6=wgE~#+{9v&R^rZa%3V%p~bBnqonM{QFIb6ZwZaJqVs1UpOcfJEQ z!Q?10Hb>Nxc~Q$=Gjyx@b1fWP-Br*;TzE?~Fuf=y$d6dH!;vI5c@Dpv__Fi`tL~c*#v5{ z{4ojIcg7P%z7Ve_9g#!hLw0;?Ml^mGT#6?+1b20ns7r|0isBCT01$R~;1yIjOwihM zJW*Uw)wa`Tg(|P6@hN)-S2)F(J*Ty!5(mm+v^_AaiZ(BQgrCS#0dlg(V(3rPD-N_+ z1c&Xf>jYPk?<}>zNC#TMLPiK*tf0&GY5ZhoI@Uymwn{!I{XhX=Z~hpQb>p7kGj>kC z)oqV*V50%66lCjo8d@UsY^kL`ZL#RRw3SmX%TuE3qRS?Nn8x@@RCL=4uQ`I)`tr2# zcWbk5_9sOtSHv?Wp}Dmj1;(=Xg63^OG%?KCgRMK>4uaIa(BzY@?{WOsd-ldFITny4 zuHsymp=UizKpVQdq!6M`pJ5&Rj{=mD-eid!_^~NkJYUh9X;3}tr~aueE7g_H48cTK ztza2y7Q7yb@t3|_)N^PwP0m5bK3;cxaX`gf_t+{o0Kz8sf^V_sqjF9>;qPV7G&+-< z$5OyFX=0Y1-|>{%pil1(KeVUaYxJY(B?LP~!G_qeuVg-;Wvf${NYIRbxezfFs0`=73pRmTl^)VTKR3Y zTg&C2`gLQnVzre1NBHZ}iP+Wym*tW$4eBf0P=vy(%(Tz2S9RKnXD+O>yv@j&SaL&! z-709JVE)x6n(O#zBjQ5*#O83Y=`GxkDd<6AlpSc%db-D9m8`p9{o)6@DaxI*{o#KB zvb~``(#swu%LR!+nc-q?i{CTP-j<5R_jtai8-eC&^yiotz_dgcIs#p>)SI$}&L=##UVf1@m=~+#P zrAcB#31Jq|G7yA(T`+{i(~my&m4$41SgoqT?AbSwSuM|*7aGSPTf(FT^*B~_MA1;* zi^sn>bkzr271VQM4H5zBtVs91*cBsovx8uYVr|x1X9<2+hsK(lPP?`@C(RrVXz>un z4jC6y*IZw_`t;wJ2F`{YRDo&s2j!EZ)&~ATjhAnqBwhVhaF_rcGy7Y=XUVaH^jw>^ zmT>;BBIhtD)m42Bc#38GXjlmTy}6g2y;FQINW%7M>k;R8D5_<>uIm}0Tw)td>vm~} ztK(ZLO#J9D?v6j%6s)jL3g&W~?~o;RcT51?pfes8U82S#W_8Pbvm!SYx7*i9)}BJ4 zD@x6KnaBzFIb3J8HsHNl4#{zgB>W)UMHc5I^YADYx+ch2@E4`bk>9L22<=}=+}phf zRDYx0D$wns%90f$TMCcZ-CNiLSN^aoYb<^GLWI0+XYF=bO(IvED{2Kx=!NL@U*E}c zRSwLhZ=K{!^2XPnKg;-%`1dS(XFBUw`O4l!ID3+#g~K2Iag)sAY(D7+gt8|IU5;>n zF`3P^ydw~N3w|CtIvk=KiZttnPbIMn-Vu<|`QBi@E&ik+<;r`~nMjm`sM>(DmJCk$g`E4Fp~J3;e-uCdkVOLmf^WCal-Ok?36>)kMNa}? zf-}|7p61}Gsr?TZsMygbDCfMO&ntb_;#}`)0$eSTwTo*IHvvS@+h)#p^)C-|zKvkm zN)3YW2odJ?uhO4XA7~%V>!Wlx( ze)k{6lY_|-S(C$avgA#L#d+?V)2Q9UB;S~e%f&uRi8WC5o`;52P5%>zPzwmfUB~BU zqSkcq&~c@rJq)Q(iuKGBv%QcwQ)>xpnehlPW^AKHGKyR)4eD;0Lf2tW3p}sXiRaXT?r1pkY$+&IF)P}3frl$DCR;J2o!TzzlY1eN3x&ClSC`A>;hjWzSbp z>vWabA&9oQgy;k;W*FXzMZQ_lo%%?)?_Cb63Bz*1zln)GU%)3ElS&assGUuvG7G7^!(&Pj zR6N&RNVD^~lFjafDFLg!2K6JJ=w?^ycqwF~HnAQ>SpIYB#f1<`wLX2D=AfrGeNXe7 zfH0j$)r8s6&Atqr@{Z{yM@m<{q}_sn5H3+uM7HCOXK(?wy~cFOGx3r}))c zoONv}!WBg0s;3b&{Smq(aq;Gma6&}=7|2M~Fn<(lIm9}zVS-4Hb4GHwjq#%F`cwX@ zw`PdLfn2cit+Bx5p6uvB0XqxW`zF6q`*)@&?RD6~9TjmGK%B#|_d8a_AIa&Vzo1ML zyFwV5(R}3EpivBHcgqg8H>ls;+EJn}bi4*#4w6+3l<@sW@$6`iy3%enQr)yq7Et%B z{iTVk0mm)B=bv`~ZEHx4*k? zc+Dy(t-2;EQesnac(bZ$(xdOa#WFBx?_+{@#n6esKFE8a^>_$w87e{8>TF5d#!e87;#%U1ARtrxB`(gH29m|)R02x0-m zC}?Uh*gY=ZEUGV(8^8v!S9K=GY>Ov&?mYu#2Q`ugX;jXl>e~DPArIkvEhdcD?mLCL z?D4I3vSMahlFJi|0da$i3_m6zyr7tYGU$w0jeq2HD3 zgp9sCX&LDnGBu|e=%9(z9cxoemv7$WFL&Kv@7-v98vc1{bqOCflFAZ=a+<-y=+%Dq z(~52!?uit*4L#AT%`1|q|D)D1G-yy+g;_L>B^~MLv466&xJ<{_pqnhJfW0D>=4$M% zUTR|tpQhmsL|o9&ZG)j}nICNK5t4<>Gr%I+tlOqd=4^bFL%*WTMRmdDV9Nxe^Tp?<2PL+reJ2mkc|A(B$5rLlKue33 z!95m)MdE3Ygfq73{FzAV<#u67L0$I*@OR45zcemeNv)j(jDPgGMfT>fmPF8hfvR1C z3n8=b&eY(`6_v}W44rQ9_`O*tPCp}7kCL49g91iOH3Qg~rhDl#<^f}JbdbVvU(`1c zVpC$Bt_Q_1RL}(uxu-UNIbk_-mLP2cF>_lqMTov*xvinkR?nVb9X{=W&Fiz_PyHT! z{GfWKAm#+(f)K}*cHtk(L%p97`|-EAmw=l(=hJoa;qhk8xbEk7hue;efOdD-UQmd( zPMh>xclGt!Gmlr%FgNABv`Vy**f{yZ^~CVavFVRCafZQnvICYLxj%_F*mf&@$7ENn zlGMyOjDy%w-UotxJ!-I2AHsz&Q2C}`0c~JQ6?NOA&HFPmYYH&o;P$~vFJf#M7FrK+rk`mkzwR^3_x;Ufv$;k8znQ@^dhwK@BSjr%4-;OPc4gR+8jBwhS@T)LqaLkFA|JtAx>vzqHuLZ^+6^Q zA3V;K-1QeLnU%6nkB?so-7;=ZX zx1VaWz)S$YyMLA4(@mH$Ou%RO2bcM2q88JVm6kY$IjuxQ<*oVD2an$#Nh0~*^2{H5 zBGWf7tPdf=R!@w5OG$81Eq{{BEGin$__QqzuCs!a+_WW7g@XWJVC`__H7 zfysU9i=eXERncwqnOSpO);Ng_zErSNUI5&&9^5(OyT6A!TxioX67zX2 z@61VN_7Klc`!E&3l9j0LP`gQ}@6>CNcV2i-8-+#sVM7yP9Bj9b2S=Zz=W|Jbc+3nw zKd}Ajlkv2|uK7h^g1^+e+vuPP`-68UKML1hg!@$a>~_~BwuJVXvWE+qE8a&Jipgasc%~EG{}Y$~p~z{oODsxz z+V4w04%YynxW)ZFX?Z{^(LI|{Th6*xuf$7f2fG?OMc_gLvi3L$?QftRXzPZ(@UJ{7 z^zS*8Tk6r?4ux7+&Y4negI(st#bgRJnx*HC=$#a$GpoxNfiTh9HHkN5(2#z0mRZbO z;hT>+aT)wVk{H?m*C98nR}n88(|xPUY9;wOz?psqO8ej%{A%-JZd^iD0Jg}^N86Z@ zPI4ejcI*6}Z>$?QDO?`^1R6phBu3!JO7ZjRRCq^~lv zTuE&9GgxWSjmm_3De#XlUrjTrHA9!ARanqAGVcspQ%hD%=cudN-ncZ~st7ph&sjc` zDq8jLvaZsbLv9Y3n0sQcKmZ8pfv3S}twar$%ta60-10aLMhFk`@97okDoXMrT909< zfgw-7eSQB?jP)^Q%F~nnN%cZ2EqZC*$gtJ}P_B%C*c=+ipY@kyy+)HCedHW9ZHIq! zf?5Y^Ml{WIcii`n{4ke51Ub!&+ZVvOU_9kBew({pZw|ON;!3?l=o05>Ra_bor$S?D z8?H*kVVv=!iWVC!Gg3y4K2a=D#UkW!i!gQwd8 zS3G)PDupd?ggyN}@9bt)d>U-lS>H_;ZZ#yHM`DsinIHzsZzYJDKP9`m4!d=fBOJ@U zF)@jH9*t|0+M|DsfLm*WSY5RS1S=W#V`=Q#w-h-wE~o1q3JNhHZmn0Zs5h`@^~d(B z_Fx-;xO&HUM6O{Sb{N;Yfzt6}`RdW;PomkZkq4vzY(VEpEg@VtbV#!QEq7z*azFR^4yR`z{yuM)mie3a z{@C9~RzaE47{DQ*9i^*3}o>254 zrjLIJ?S-ZdH4KKwO<|HI_V>9;;;C{DFi@i1HC*J>`)g`-Ir=Bz2S)|m@YSLSuBrP9 zr^hJ?J{p^U?@DRM4`B}RAZDziRor%-ukd)^C~8=BaMOR=s<(%*TK;Rpu@1-5G?jrj~% zahp3&xwvwR@I*;xwg$%k1lAQ#m5wd^E^A4O1(!`zbGVLVQU!W-Ib$Y&A*)TFBd1YI zke;6VfsBIE6W%-Ti8cbgdgqagIRlWk=s0o9`{vH}k&=g=-pN173G)?`2YFzruS@M# zzSxYqWnJ|i07J22z$Qlc3@!tJRc539-^w1cRpb6qj5bJ{4k}eD9=V_|OSPFNuxcOM zDt$f@?viknR&Z4#B@3ceqF8VFtzToVav5(0pD2qsh$$F#exlWlHJW#n6wg!SyjZZ3 zE;E8+<$U72`C6sF$hVWJAH1x6BT(jxeASBJy;&Pr`qt+H?DqK8(#qOtBz|OvLoQ3J zxZ#~E-K=kpo2TdzCx1cynN1Qc(~rRqD}$jB&UIPytM`4i)uKW}Lr#3!i>U_^duW*p zLysYAn~O?)2a{K)4v$HbhkL}+jeL{;(psV{0J|$0c)HvJY!Vev@s%UUjPmwyd zzvta}`p`K2qDKh!{ch<56!{K~iA<}1-he3w=ba8)$jr`d*|6Ck4nYExv-bt7yZAA4 zqQh;ttw;Lhf(b|m$Hxw)NGN_ADU3uT6jUjqQX{5ic}VIWqD6UxIJ8;ch(T@l!(rk0 zAx5P^yey_QW2-bsbd%#lzu0PPH70hc- zT>VyRGq12G1Gfxafor&f-N45dd5SevhQ4`-1y*2evKNPRoBe98C#3dLk?hqArk2pX zU#8k|&UpOxannwysNsLDfnCL1i{(Z6`GKK@#3a0di>HG2rRDRa*sb9x9IB$P=`P~I z9NZ+3PJ5v1pdfp*tWEK(6aHyn z{P!Rq_aoP~&DdiFz0eouW9`5egl$=DX@H;4;4Ph$Pd7O<8|1q`ky(IJ0MX)>Evz%~ zW-SaFKlML-q>b;~(Iq?D75E!yIUR@0gukavb1BkWbv0w#UzOn?a`R(74B;Z&l8)xVt ze62zTc?&P?eIaX{y$UiHcNdY1EHV34w~=AOBF5D;g(fc^(HofQj9fgHUcg>Dz}|~Z zhm|{npGd&kM;r3q@tvIwJvPZlkH&!(J8+(CrkNE^o2VaH_(N(V&_mlB2ikof9RziT zjG89Yqp97*Mab-l6R^FEeg!t!)zKc}AZV(i&f0QV6PWXt{g?#^DiQr<+D$Q^#P6;& zs?B%3ma@K_=`}z|4=}8(wOZ{xGSfqjOs|sWy3;b>vF&hv;QWtf#Gl=j{!((893_Ze zT3yww<-5S?LO4*@TKupa^#mI2EFwRDeuqk5rlDcf{xN=zbdgUE#~pi!0*cO ze{L~-S?vn*nn1jj`-c7f-1M1C`IsnjGfq>{+|z8pbpn?uLkoBxyi|~)*Z3>MzVYI|Y_<~h zaiGuMFV&`+Y_y;uMF`itSNT*py~c&Sc%>{vTyf##@@|;5-^%*psW)c2mIJDIcOGF3 zM0m_K5c?Nq_|-2~k*&vVLIv5&I9qhxdax$WQ#)V#CwW_TeOa&biyAjWcI=S&RSNCM z?pU~Jpo~cr(yEcFFN#jaWX$3SWOI}VV!A1y;{i=`a$W$$VrRRammU+mch{|t38$#o z^p^7^TEk5b2)oC#lPa9csE%Ta0=O$2cnr?@woRqar|0z zuLMV3hNvJJ4LB4T6@M%-7`Rzh#lrpjNY1Y9Wb2WCgE9Aie6U3^Wf_$6-|mWOlb(vx zwXNTh*t9!kkq#|owdRI>#--9{nBQH3N<4>kiq88`E7di^sjgRO>8fNUD_)0mowQQh zx{Dqf*leW(AN#|n4N83^g^d=xB*fUMTPpB9v{L9YlO&1J#uYlv#MNd4CMk&+pxrAf z2VPD7PpIj(_BMqYgn^t_qXL-@Mx}Pt4vor$h~+1bYabEo_?;!vvp{>Q;%p$Gm>`Pq z_Wmb`JKM(7{*T|9ME*z7dAPILwqd+mhnl6RQTwe?Bc+5;tx~mW?-(&k(Ava$(OR|l zjJAjsV#TOcqk>o^q;`#1u|i_=e)*0g|G;zPevaq5&+9zTAByV(mOKCX>q`7RL*%ol z6A1IPjYKGdrP5`nQ7Xet#?y^0=@CK$G6AE1wYmM@6@GYz?8!D%Fy{|iEP(3!Z{Ghd z!}GMw8o6S3o|jQ~H=XtE=cKDJ%#jOX_t}!o5f6IM7oJ?9S6&mz{FUoQoZsd~e5bG} z7-h**x3EwiC;Y3x+h;`Q6tPpg1Pn0^b^I(Yl^E4>E|bnZjYKByT;7VLX8DmW+-=_S z2Ho9Y>kkQyDskr!x#Q4~aOOD2JM?!7IP-15?f+fbpc(Wec`d-(^~z5}bvNY+{GOrc zFIW#j`nHN9E^-6zX0-!F#mj4oycF zEh1=P4RL5=2G5u7iAo3ovS26nf~deUtrigJEEV-3%gG{sNLZAIxwV^d61Zmk1HCFB zDI+j!EXel8QtQy|p?-+cx=!l2z`zf2vv(u9Q9E&qT|_@ouNd2KKfmZ%TCJXeuf(lZ z46-e}wXhY#TRVV%m{y{p`^=>B>siSSnzIBx+d#K}G{RH3V}aeQdwxm0o9<{PWVW(P4A`RUJ=rOc1gI2Kz=Sf^mj{=3pd z9Nm}*?tyMhyD}Vy#I3bN$M#IDo1r+lH#q;hQqD9iJWvB*y>)9gSBLMBSlH4^rmLC* zG0HL|B?I+*u3@L-CZKPE{^-PI2r3(yyPa$N)vY)+HFK*SP3Cc@ek>asS`+z&@ae5P z^$u@PVGH1>ZJrP^JOcM|-%PxZ^k=1r&Sq64J$wp5Na}o7LOqd7&YE~+yHxDM zgX&JbhWV-*e6RI~kwYR6yxo}ogZqy&7F6FP$cfH{wfcE!agdf|bHbOR#n9=FLUOK! zc{B8vig67qtOE{Al(^}V&PbOp6x5@{u+dR2@(h#;J z=ang0P=`#mHZxb3MAG)Ykz)mQi$7^8J{Y){SoheRQbLuQenniM3Ui6?G>{WNc}q1CR(2?YkcU0wZoY|)_SVt zZf6iq{%5|{?U9ND*6yF>1Qs6gY?kaZ<*(mcGoUhaVpWEM4mt^*iw~_&o=^UUD_`bP zEWKkAOFFUcbaF-^I>3B>wg`^lf-lmd;1i++g?+e_psPyt75f!2bEe}pq+Fsh#HH?oj znL@9rwb9J(THJ3+=|0fDM@M`m`!>U@YoM&egHt@GiBnSdGAj!8KE#k)AC-kh2-qYf zsz!didi!ak2{PQygAlVl&6%P(rCb>75K_1)7g`1i9ot zK-9zHCoD5pb(H?_U5U09)6!AucSBKa?p4@IH^-&9R@n*B%VSOPZ4?Ql!r6g zt=!)`?apPJ13&IhjHjDGw!z$qy9~&1Ze4mDcPbD&s}GAU&8!5Frc$_c-vaZ4_bBN2}hk-BKK~~bjZ`sgh#sV3f|Up zJI7ENdZ*S6n;Gu;aT1O^%4NkusIdM(;xeO5HjYMpli!ZXBE=m;VIjP1_a` z=?9}85)3X=VbSk$_HCq9OCYemp*0zhFb|jri)csc>c;FG!i(TQ&SR}Wz)rj!0xv~_ zsVt6jlEP!ua5c+$YrWT`7Uz0RYkSAL$(xCu3L!aFc1ZurU}1!Ei)9*$b|T7aRlURj z{dxZ@(*IS@Q>Z@PM%5y}%pZ+)Px@(s?WwA0iv=nyzO_d9Kn#f!C0|rXE|FK{SvWm&AxvO93 zRg)VK=)N=@1UR9l*LMmynRFwA=Zw4-aivV1C~XTJJTkt;sl+`zCgXOzd3zzwP4wnr zZm~ylMmgNPr%k{EWp*Kd0lC434>aGmN=y>!sbk*$rNHp-KF0Hqs?hO_Qq6y@1nGIIZkbYE=+G{i5L}jY3 zR}Hb4{Jg^(wrMkX4Txq>j$1xR zeWW5Qa8-(QW(``=)qO<}Wq$DrJLd66FHW;c$GqLRpP8SPm{9ZM_K}ZgsO}y<(f!nd zeI%=EhwIOstaUcrgO~l>cQMgnY(UUCN{!EkFHi-Y(DvOcON+c(!jYGLUUZb4M*&g= z`8-jZpI_Kwc0{=>A<`=x`{1F-qT^^->Xygt!y2(?9RhAo>=5#zcVy=RTrwh@Z}?;kMNCjFp{MPdCfn9-ODh!4 zD#cdroQ&0#mnvwvvcT)3UlZCs%!0J>6JGl>Da3hv9aMC=c~5~@Pu0!P#=Gs_E@=^Q8Sqf14m3JxJb|76Qz3LKAVUx%ktfZw4~Z{&hKrTCVoYbp59^ zsuQYrafu8&^sdr}uw|7OnF|+lJPE*InU{ij^2(1lPR>{>JlQgt@kfxdPqf~6@`srd z5ad_*F?HOFwCv~a)H!I|jbA94Jbk-E`;B1d=!GvjjtiTZ>}r^i zy2I1GaQ0&}ZE++?E=$h~Itx3Qvqu32dKG3=?%C+4i{jFsoq&S637z~$); zInWyPdH7{)($yphsM~T?q3EX{m0ENxY6$JU%4MGm`A41Sk4hFIUwzT_i@4yiQzN|L|@$hicfYtJ#j>tb?8`{JaEa^Dpw$b-z{F zq2BU4u;Bl$U`-muq_RjGx9l9kl_Q(|1N=3;(qGQN0^`U`!iO73CZ&avsH64X`yXM- z2=nu*=@UO1Q)sdoecVWJD0u&%WMW|hB-d@}wz9ffrYG{6xREP4W#IYmJp%^rb-LX* zM?q8@xIF9CNZpWk!3zNCbNeJ6g&;dhAGuZhW1Pa`h%(snpf@o&>Zdf=2L2WB}PmGaOFsl6sV4&_FL_%4)ahUxJSsrp;&siNgr`;B@#apjk$lC~bEF%y(e`|L8%EW~ zt^4~pBbDM~YDGH!GQU6h!$aPyK0x_Jq%J;aw$l(oK58*xsc z{}Rtyoxt$CT*prg*Wj0_Cx_vHQb55}!6N9tD{t^*{KLXUc!;tE2FlW=`Jj^Ma3E@E z34vy7bEeI*EG}y#r+gi<92l{x?s?%9Ig!z@s*(^nkv7XrxFh87?;PPWjgldhNnHZ~ z8gMa#p;9bcFWb26WG_*&1cETx*x53FE-k)-oE&u+cx3b0=#QPVCY0+DU z8W9-^vQ45UJP?!J~)z|GJ*i@-1)c-#quE-S9in zK|Tq3hGl;+`@9^Uw5+d`N5aCt**tNVyN+$$ujhR1?eVnP|2UvA zg_E|}|5?F>Zv8!(jH6p)B|AZIf4m>R`t;O#`oSWWQr~=*# zz~WRpQN)5KgNfFVipdLQm0x!3!4A!IVA-HwAJ&^LeB9!;fbI{_{^wahF1vR}fd_Iv z@oEY1`O5|RE@2=b|HUPn!v#M|*RO+p8~Jw<=)F-od->u2R;OV6#2zX4B-kgu(`6WX z3%{Ds5-yw1h9_f+SJvjRp^bYju7*XP+Chbm4L?kTWVZ!j#Em`n8sjyIZ1hnJUH*_fi+xl)$EmI9Bx_?oy3Okd>1g+eIl7!3rgnGCWs^RtR`&w@s{zyC zreAgnBO8pBmF*^M!oOm+@k&R%Jgw9kuH4VTG{tB+L~%)K(sb@OmtYyX(Za(Xh?(>_WhfrIm4czMch7j{uk2G!hL}}GUflikra98fTg?hQEXB`ijdBEU^3wO zl(tWI)ew-#D*UZj?)OI|dmNz$(!H9rsU6?;mzbgw7uYTxxJWolEL=Kpv{^qwsbe!} zo6ft(Ppjmrn}P>J{PXC7q;($xdQCDqS)=o${GM`J!P5=CVi8G-baNHlMA%HxCHx3F_wR%UKy_zB1f! z(>zI4U8gKMCSlh<-}CM#(_v3BP43gL`OHt^gL@O73s$IYJZI|h$k9CrFHW!Z%3%q|g>#JUWYADPs@AX&JA8PB6T@bT8wK3CB z)U2GocJX7ln~Jejt~3)6EAWR?M}<+<#B$Bht*XPLRFIOz+A%f*>zoXcf1m^1P| z2`B0RqY0qii|MC0`b)W+CJd^|&jN#f+gLQlcvH_{WI^97(A~y&< zg=9uVVxCt91Z&SIR5cR(-=4SljwgWT+Qh*Y{%pPhkcx)KiO+O6tzHFY7BR>5f-iK2 z6*h6wH(ndlh}kkbu5bOl<%eYb55vz44%&zc{oQqMiJR(Ee*4q zt7kP_=RSIbGD#aqLy#1Hp`y4I0mx1a;OS-?eJ)6XF*8sw9)t9RLTP^u z(8W|{W7H2@w40f047d9yxfD(^>|9%aVL(1+V*#a8lLtM0)vpi?UUmF!>cVWnyc%ap zw@<|-Wbk(tzrrf%SDP@YNJ2_!P-x`H@76`0OkO2Go-zMbyybQ>_|3-d=RVb*<9yI` zsSeGNE+LWDcWX0UG`=&e!Al~+CM=3sEP4I7SC-_V3;t@P(9^BgKUVcD*$#0 zz5GgHGhrJJ(hcxcd+;e}YD529gB`fzna{KPKjbpWiuCTMS1>`#{}<^Vq26DFfl3y* zIZzUUUG;;ZrFjua?AXywC(E?u`blI+a>A$X#6T&O-X=)>=?qEWogzLvi&|$UDI4YL zZ7OpiMP1xdOVA5X+Lya~&CFwGD>vu*58SGaXA;uWbglJktbV=LlMY)2k|SstC84A9 zxa!~lYAic;-qOb_j{Z&7$c)n3+t+Q+XWydCupX44GIi%CZlVQo` z!KOgoMYs}fWQ=4hEJH5#7P_ z2)gML3uvf(8y)?3pMZBOpdPaf>|IIhj(lxDrqy2HWkj(AiBVt5;N+OR(e!JhBaXk~ z) zcJ*ee`-J&$_W8S?Q808XyOvY}$gl8u7s&AaS zC?PU?;BDovUvFg2EN_!=zUL3E&{2CRZC!QB#gCuLTnsLdA^ak;pE^-7^oA-^4aDG_ zR?GTE89#LE2z=bWXi5}n=5TGy{F_0KjAm7yCf;Rnw&}=?1fapR;7lrt9iL8 z(JY%7%T>0X|E`!kc)fI4NS2KYv+y`A>=b*WU@O&pLkRm8mo6}DKcdTB-yC1pv z`IXc?)Q=YpE0xq>!{wTw+~HvLuPjowu><*U*T?IlX?HfV=bqBvjvETN>W=RPObES; zA%c^nA%+nQACkr1s0oj7IdT0FmL()Ltj_qo6fLruw%?JmjX1^hnOo) zL(ChNP2Y4rdE`_toVLz=W1Vsto70*BT zR3fVCv`Ng0_cYA<I> zasz$5q%4p|!o;eTVH>fo-kn@Od`Q^c?FzAfbreJGL*~RYtUWF{G_}qGLoU20LO2eT zsk1?t@tkg;aKfu2@9y$eeUEfu@1WnZB6ozN)af1IA|4-E>#|m4cbrGRay!~i$wxC- zg_5~^gC!bBq*E1S(W#CI38$*?F>vI?eqG$O>QBP#jrB}(?I)F=SMKkU!Dc?-p4(u0_u7bNRZbB@dP_v846_{o&NkbdDOWaxJ+SzQDk`6XK~sSfw*o$HLP8ut7V6m-bIB zzuTXJu!^+4nYz3|K2f<8H`agEG$q-0OuYj!({hWuhf%pQpt^{PVA4f3qBErF7tU9CBL0nG^Hr z{Y_j*z`bimE;8cDq_(u#fe)f_dB@=~I) zUFKP>a^pD~Y}lPi4qS(teP3%dS$J~pbHUuXDSsk&aWiE3Whn!AQoLcNdO~d`XR6{= z5pnY2il$mYV&VSTJ+eg06}*`?lS{aq=k z&QPPCyrpivnx%B1v8Vkix0hnr9drLwMjY)0#xfU|uuL<*9$3UK8FBK4Evi zAKh0avZ(&+x8hCl8!e3=fK#oxUx`-e9EK?~84Ityhh?$mW9EMn()EY5?pItR2Tt7cy^VCbemn7|^*a~s+~WxQk-8Jet&Z=P zQyrl+=Q;}X>3YjW4d`ncbDw67`B-(UgYgO7{p**g5|^c-4*htfLdIE@aU^R+(#UxG zBZihB)-4UmHX;5RR7vdw8k}z?DnzsiG2l8E^ci3^05EB#ie)LMXSQ6W4qO)219Z|~ zokSR~Q2ILKh}2%ni>k>-9bRX_gVUnuwMvp%o;k}kR9>zjw~n&jM!*w{>+iPD)zn!1 z6^mt>IA%mSNFhHEQWkUMy!;Zvz0<}U19NJHZgsdU*10pMwC3g7QcLHeTOucX2QoCm zEPLRI+e$gq%o0ZN1XINGE=FHKg)+)m!UFuj%3Pyctafdl$47oI7h|gCg2&y(Azr?#zkLx-Oj3;ZZ|^UFOGdd%>2%+j z#AW(mUuP|dK607bx7}~{eohdVc@W=rDtAE3%(k0aC8DJx$eXu_`2oAkiR={ty*bR_ zKlcd{O0R*?Nn%3pv5$o3GlShTqD|ooC6;IC+((`i(k_=n!c;`}+Z)+gne05?1(}I% z0R_(+Bb96ayAtG!cPeSryHEl)U;|oSJq@}u5<$WXOLba{JGMJcSg%$#ZQ82dnPJmO zXrre*T!4n^9a^hz(i?1AfT`%{N8=I_@>V~2e_=ktD}9s1##)1h+Wcf34+Z_KW{U`B z1BBf%84OhyH$D_nlITEoltlUFHZ2u7zUu-(xNh5KZKstKE>^ae2o8LzoB5V^oj)V+ zF$zI0mTk4v%jP0Jxwl-;+da{V_}(ob(DveI_Owp$6u&eQMe3nd9i-K=%@Xohz?{VK zK3)UaIqb$yIu!EmTsrIGyM&9@S8k~{sx!|)>fiR*_WExG{*$ZEnH&z}xwE&M@3oyf zRS`356sbj4-Em^lMAea4g}-dl3R^5}l7;*XQoiBudK2Mt0JaU&{IL&X;H6;b%BShgZzx$V}Xc}ZTm5W0wnkuk|J1)V`gUoLZ?(ojM*Q#D|{vdg= zu;G4yTrO^O;qWoxs*p9_;b^j5@BCvkr*`5cz&byO{p{<~r-#j?wIy2egG z;9+M)wvu&{Y#snM87vEE3nB$?5~AsW010os#WT68vGD4cEVeiKUb(;PkAReQ2+CP< zfa0?;wj25bXze*z=^xH)Rhh#bi&su#2JTbwE!vgf zq)FcOY=P{hY0c}P7L5H7|5aSP&Lq@s?qW>*Yn*iR0LV)dJn;^bpk>R)uHo>}k!`s+ zeYtT9j>;nPj#Yys5!6%b#EuE!X`-&UmLaKe68gA0`#FngNmjYNVr}>Go1TYxYh^L; zg1Oj!Qq&?S$cw7T8dTJQ<=nIeTt7 z@>t!m);1o^G<+sk-^dx3QdpD}OM1du3}R zODD<4e&%itl>_r@!yo#~P7^0q+sT}I!@}!CSM}sXHdfrK<$GtetfZ=B6RE7dSfE!1i^m!=dfZyBn(Vo*B+PP*>VNj`k&@kU`|7W8Y<^Kv zOg7!!^hPdu_m@^gOD)$W$G(CmgeuOZSwpgSiA=dfFv9Mdxzq$`SwvW{S;Dl;IVK@h z7`#VgpOy+vJr(_upRSL)#Q{!kSR6vEa$lxg*)xgKHMY`;%1kT`?6HL@=#Mxi#aB<&wsvk z9!`C&x_{J&CK4bG;_N-OPA-NcQ928Gy1~ISr^`Fs(Q;O^-tIW}8#eXkXz_wO)u;?^ zu)AjLT)GYRx0Cl1M(%T+j;|LtUcwg2Y`F6*6*G3ZIEJraua=)UozyC*I6hZlGu_|^ z)feb@=u8%fp;4~s`&mxjPlbz0gdYmt^I&ccFjsLkie-q`UgVnq-Y(%_EjFukn7a|i zs+@cB8l9w~?U}CDJ%N>mlxy`G26=Im{E9hVlUg1Z<$0FnUpjr~&X#x7{;L{EBSktO zX{XjLdST`t3Y1B`dHM#hqwMZvi<4XQOu;j<9sQlCSzXi_{BH>j4`0BxLc{c5qpatu z*=-vt3z@kLL<`*x3UUiUh}-7(PbDNv)=cc5B;k2`M(z(y3~vEI z|3*nodnh@$T51mq0c*wyk^H`o4H}w2TH@jx$8JC3=KE!AZ03Xq&c_zHg6k5;&4R_t zoa;4YJf1#3F;DlckwpcJ%^5c*s#HcZ^T* zngVBCPz6!C9P)hQPOI@^Mh0txnW}8tlgzIs$G$GvRjn!BMa$5W&@8$B}FCs zYehaARTjTfK@eHL(O9p(5Y6bz>egyLB0Pl5u&aM^6!$2~~m#NPbs z*skRx{of0no7jSn=;EH}k(OG%VeXQkLGSEH1%D9u7}deG{HtoqHJVM3ZLsA>XBdR} zD(c6nremv8NdjF~urkY)G@C}+9-pkozdPMUyDcAqFU5A!FZELN?tc(NsqsqP7SO`< zM3jqGS(rD~NkbYnI4RlG5?EM{{4wJDNR-W10jC->*Z+;jMatzwu(ir&liM%1Whs|# zV+9dAK3`;S0OA<(DZ2yb zn&~2U zA;98DMtD090kz(4shCEX!=E&51Rk49+xFw{F|jOG%G*8O*oBvPr|{QDR<&w^gh8i+ zFO{)`daaJ9AoC1K930s#?{vgfyJoFr$&|VXPhFN;UcQx}*Gc1qJfigFrnq5#)G_(=FiM``f@G|S+}n~GX%EL(^Ap!EPOG= zXC-#JzGl=;R9GLIb@bxs!FTiEeG$q)#bA%DX)85_RkB;$mcOW^lBWrnga;9TUP##PQhA`0PE<3;GZX~wX89p)ce)Cg`b zp)PMSU9E@S6^0$Kh_Sl(y6Bp1P1Y|#-_m4KJ?8#~D0qES-1)B>Zs#zcjpksJZ*8^4 z#a=D39w3bvypJLKGVW9bStX2kT7OTD5>!lc`+((~mC(Ng$*mpqf_a8pyTi6FFJPhhWr zssQNU2&`GIJU5y9nJis<5ARO<6e7wPVY1}d8gF=%sQ%sVLBUlu8Ek!cS9YqrC0ywo z6Df0HLF-OYlvy{!_VwLF@cUt>z3{pcrBv^(V0SMm?w6jpdg90r6UV79%FH+tY5W3y zi-Ne+WCdK#|E_el@UHY9hZ3sBWHv4*ezMBT$KrCPeP@OhzUG9_+A3mRTGxhZ<885M zSCjXNAE8iz+VGB~I~KYJZ$1qRXf<__?QJ%rX5?K@dpXmj4n zn`Jg{DH`lsZNjw4KiF8`Q2b868S&)0>gbA7_j?U!!!l9FY9K+pAC~G^Jm7}*T4Y6D zr$_`R6Q=n&%Is!KurH_fx6!S5u1!Yrs*~8Y7#OJs2UCA%#u$y+zB8e{Ff?k%+(p|I zw-h+|(_Ig8S5tVPVc6Jqoqv>DV0Aj<6Z^Z{(b^TXiyq7i7Q+?|W+p%E)S)#3KOOn* zKz8Sgn@y5X4;TPW#a?3~J6>#$^OX=2T(kMfwqE0a3_h6eCQMoPg8}#{$KJ$1WsN1P zcynjt2ctpv-nQqU3ToEIS4?!@%(rMHLrURW@6~bG-0dW#_gP_^Sdf?0E`Is~GLT;R z0b?WJW|1-S=GS3t5nUTkdBu;)ZRm+nZj(pvZDYi)^iK6E#H<$gQ$qLO7e0Ba=O6!+ z+$_EG`2iC^VB{ml#E8m*8gvAbM|4Iv2hFd+R7V1iJJ_Z2|EY`4`pNM{xtv&m8qZ72)%iaTx+70!q z7kSMAVpVL|stt(Ii-*BHJUoo#h^G4m!a>_@mLu7Q7!wmJK3e*hjnv=Ak(Tl_AT$xg z@<^9D?I_5%`I5aNr}nfcG8+N1|6SSfFpHDURHtLd#0jsJuQ8HH+gZBf17g=JGnWTn z{q@tS67bFLoh2spzwB?zj(O!Q@1RJRO%%#)T@$=vbQE@|4jUu@#Acbt4rdS#V54M zmmG{fKj*idZLY)2#2iPK4-T?XmQPlz2M>LGCrx?CWus*`_*8D$rorO}@?nOG(6|_- zHIP#a^_dOVx+JkJOBUVS$8yb0uIbF|r1L#*3;|_!v}>Zj;6WC5vGR}8aw|qL)CoMw z6nX42iSUo)5%c>=IQed)lk+6t)1Bzgc{kO|61wMQ8a>Nmy6d+zug?Q-Pv-(CrkR=EM2=y8CJO^bXz@7kcTVWr%IB zD_yp$ZoQ1ku+#J&8E7_*mKpxQYoGW}%2!4yNxAIKMj&Ao#m%tIL;oo#(BB80KYCU$ z?MEG+;XdnB2w#0xWzhH$Qt#9e(oxmEdm%Vdcd0xJ z;t_tBC+6<#6t8LgGZUI+lLmusw`Zob1RMt|KV*r^1uID)l2TrQ;qN#G-0&=}{@mPL ztqKz1?aUw2vRI{3a$1E&dD8bKz_cW4u}xP-iUBc;!UK^okju6%uMi=R~* z+5~itbh{Kv1~B$H4Pe6UZ`B6xZU<=xh*Bi_3Hi-#&R^`A<>A%Pi(#RLjnrno5H0!+ ztF{hbDva-#VePg1ANslRo?VVJlrVyTKHfMyot$*jt8j}jMogb*sQ(3JiMk}f9KASJm(YA=G(#x+!()cLod2^g^Gl zRRxp!H^uwq6?T#^roC6mikSy{rbue*knYcHK0zW!11?+ZkT~6BKVnU=gczInmA4{X zuIr0_9`WRN+4g)2f9thVy*+D()ZvW{n_B;pr-nFe#|Cv;3jqK>z*ChKvKwJC2A8j} zI>wVRDPLLrL_Cdq-!5MJuH}MT`AVuaX)9#Dr*Ay6zimm_DCay6{OmSX=icnADftR2 zlKM#FH|!5mHx}>bvQv(;oaU{%Q>xSCKhOQ?Mrz}ScMYak0DQWU<^ktX+^Wjm8CNG} zmfN{DkC{iQG+&9jIn?*1vVP)ij`_2agikvsdhRi9JyNtksRHl9MM4g-3=f{BvJx%N zf^}JlFhX*ng;8o@j3R%7Oy?0?;W>G}BQX(YJo6Mlq~s721Xx`WiRO z72m~k{SipQBPyGod$P>l9dfk#~G>HK`m(p20S)pd#c84O*Fv6PHZ$$-hiXUg2u(T%yVGO~bL4?E?t?G0L4pG2H|A zH_|}zxuE{+?Ai~zMjQS??MS3n5u~K3SqYkt@KS!TkFWzSNxAG;Y!g?UwHyAs@`Io@ z=Zha~CgQ)uqo3%!-D(0rdS|^4mVGCgP?>UB6z;?v=YEVM@>8*CPaIrKbP8n!yW}uC zoiE5}l(M2SP$$DsUK>FR0U&$SF-s-2LwgE+k#9veCg% zHmd=utC$@dIadfu@9pi=8a5)(G1(=yw{c-g_|odF=K@XoR% z|CCJsTaW8nELJ_tSJH)xUJm%gFp&aP6OAFXJ`HA_Drb69s#GpMVY8K=)h`x+U~C2?T%g&PEr_*Y|!6h_Vb5cP4(ZgQK< z5m2tbfq)y!Tl3#a4RF?(;bWSY+fr1d^nqLxaS@Kl`~uHtrM-dctHtv?(~+81;1tZg zRu8x%EhVfcNiOgW&~tI(QUK-uda3ae$d^44{r2#P5DBARse;s=86!CTHquAjk28C< z=)a!{i&tWf=vz*Q6;$=RUwsonbBtkG?l@;RG_n!rV9QhRIR)n@=B??P?t?gCCV7Pc z2}o5?FLptC(5h~dA8U5fkTX-3eMs6parqgra9!#6s0UMrQa{|)w3=;g{VZsA zk1_ARD^J9ZU~Ey_%Fq%fPyIxTMX{Ub6IClYv1a?CkD@qdtC@POsCI@}G5NtA4~E|6 z9EKF9qTEWUrOwBaH9VW>xb8`ye~2wZ@(v7zs|-920u=1*PUVNb*(JonG7G{T6=&NE zG85Y1nI0@=+UApOUsTHs`P77_@}5c~kRG$X6Ir|bblfqZt0eHGkx0eD9R6z-5r+yH z+QMY-=Gk-BrAnhL&t{)6pJhiM>v(W;fp{vG315u6q`BzY9FFOLb8XFpF z0`1dkwFP4N7AI_u3dEAxGw0h6yHS1B-)rEk&KosAf0ROsBZCvlnueRc00Bg{@W5P?F`D1D; z*POG}g5}?m*IxpV3P`+{%XW^wfD;49*G~+u^2lcPsr5*Ec;A7QxVw%jmbvB5?rr!~ zkG=edcJU5Y_g}ul8?2D`GI5$G)IJws{dX&8pPL`-Ql4PE5J12=81?+BUHwW?Bydof zlRb`-5H|s}gJtb5(yG)8_|f)S!k&tHp+zw*Scto2ZcedQab(2>*UV_$#{K9TDIMIe_IFPC$BNX8x|>3n^`9MIXQ5RUY9`2 zK=yIU>G#$^)`dCr}9*105N9Sg5GXF78SDi_{wdJ zd3$`UIC1rSe%I@mstlU)y{M4OuG!6JXnEMutpDs=0;3~c#e!vHWd^O2*M#Mv{h*&o zLr2wxgdouv-uQX=nsa}i6m1viVsyRvS71$jm3hUOR|JBa67KXmplSHEM#bCLkXE-j zxfd43);I8|vl2e4DR1tVi@S};#I>^5NnU9qYDaYrZa7{yeAQzZKvJse?lfh&mUi|d z-Q$ZuOoGo5z22M3g}2ve*K#WMlltUNs#Smy87;I;)x6B|SGOlR=OT=kP{p!$CktET zty(>*t#dRQY}Gj^|D)(E{F;2bIE;!4h~y6h=~fyhT_Q+_(hQ_wNJ@+tCEeXEN{j$H!|&ZStN;Wn9h!e-3G5_1=g-Cg)?j6!>rrm1#}++DGF&Cu=VcCf zm^r%I$RbvxD<8GC!6%_A!wwp4HTEVGAjzcYXEj?5o_{=l7K;U@+e~Js>3b1B5wU5v z=5T%Adf5{Ab+C+fKuUtT4L|Y_`e795C$-%YDm$PdBBRHy7`i+I-s@ToIJmme2C+~? zaqYftd~A|_7@W1#0p6*2TEtt9aCy5(l%I#*S#Bwrf8}xNxl|dE4|4o#t9nL&o7C=ypxL0@NLiN?1#?4CO{6F1;?`7YWurGwjFAc zb`v>$29wV{Y5F+D`+4_Tb)hvpEOQZ7LqzlDvs+v$CAucO85XaO;sqxMO4-8A>1dEq zS)s!pWqkJ6lJ6ae*O8pDjdNUX9<>tQ)5%I%(oyJsNw+&H&(vwj^OXF8SZ1=iJ%FN$ z8bNm~$v@;lWLxf$U3vZEyLDOMSi~rjU^+p^wwnHAcVlg{WOS3M{yhVg_daSOS|_T` zs9nm8PrTOG_zQBNN9*lZd9vCeOrp_aQK=Y#hb6@#fQp%NhN;OVrCA6*$`d@Fde%t)H-e^N0Je3oPz2=B)EJo1)>KyblF`0Z9Wnq<- za?_K;tE?l?b?4*cJ;@E_zt@p%2_S#dyxBb=P%&U&3Gp-URSMCpGW`E2%+8%fEB1^6{B3?HfbIxp`~ z8+u=?cTh(fm09K1{bCNop$^f`y{zarB>Uuqq!TTfRhjs16)Ou;)(5fAYsDODFHEUa z`f+PXZ{-%A7l_JuF;xtAY?!y(*fy)ka!@C4L%c8k5oiY8#aR9f8V=8s)$l}(;Pz;9 z52SIlwed4{&dv`j#FiwJ`7a@dv8SN4f{tu6q~Tb!-e`E$oJe$Ct!W-Cy^=8eYTEpT zydXSWj2yj8T}&`41r9K3(yvGYNaC^5QV1_5p8CV2Qtod9jL4593P#T`}t-!&j9Dt%F`t5ut!NPn8^bl{M7Xc+tn?}^c8A*@=WtWe- zGk;yTJgwbq$wJvD=g9P+KJ-6~K}(2fGGy0G(Iw~I^Lj*p+gj>O4%~KDSeMk$1gooVq6aDaFz3i-WEEKblo+Fvi|h_ZE=mz%#U8(2q~G|TS8= zP4(&o&@kMCMUY|%A8Uox{4^7bi#ZHk5;43kqCB8U$D1G$tR7kAm`zw z=q&+=i;WW}WjodIk{tcCj*bRmZ&tu?Rds?)eA4iZ1eNms!Af`11<8pXa3Ys0HdgqC zD0lw?!l>ClX6D4nwRi9Zzb4fS9AO%{j(!@X$_A8o_B5l7i^<~qKAFBnDibf3;yz#k z18u9B3`B|Wc=gGQlUb7g@tzFnKN;$Bxr2lYCV))$%S8i1n6wT0=RoD`kD=k_EKX;c zn;X~mz<&f|TZNhR&x^EY&_UOR>QAH+A(mK6Y!R8ff@=SVmIebs6n(1iTj+N4;6mDc z^$Ptq1l_Qyt%wM5Dk0{LE;Y+WavlI(s?(^hQ-$u`OOKXod^i3u%My^lyhA*LU6&(% zrMRgF315hA45whlCG2{2m~zzE|GA))Cs_lJVlV0He%l}Gi(B_ag!n+aYK#C<9%zQ5 z2+7!eA^r61jJN?x>&D3V$CfX?aMmalzT1S=m|A`JwqyLN4xq_>7zNg}oI7aAsNzO7 z+_Vmwi`BUV#G>VV4F^BX1YAsbCxx!ZNViacsR?aY(`>ul??%CUlBj7Oi`(?a!8`AI z=tr)O)G>QURfjG4^iN@~-y0G3NfSl|X@BP9mGpax$_)0YY~`)MqkW4~!L?4Cob-%t zl=p0i6{D1jFuFgZ8)u^LPy77=V_PjmSH8`_&rnmq|Ezz(pF%m^zbm_@|F&7RebEIH48j+28US zbfUsi=U3#L=eE|}- zfY@j{$a!q?YBee;(5^t8kfCXVrNx}FAW%F_lW%n(Sz^#!RlBb%|G*+U>EbGhx>k{U zoX9}5nlFs8z??Zb`Kgw_S=7PA$y?LqkMI@fX4U&An3xjyiEgfoEomsB&3&)?n#02q zF#g8vI^!B<15dD(4Xs$Pv_RPQGpT5?2dx;%8u}b?3#{%8o6x&)RP3$u!Hf7O_WD_O zcN21`ZHBWQe+!P$W3QaAG!FyMqme<`Ggpxm?%lJ;Zg3;0oA!zxJt;kS2obY@d9>5v znlVKxZ?2ed3ys2QdJ0k*2++mg>B}7#{=bdKY@ndr>?Jw3WC(PzUxDr`$)VS`o$99h^74fOV($-CyA++2x1@I@#dHSjFsr30KDjyh z+8(6L`B~w}FlFW$DHT&F!g-rjFS|iBM%DZg2Nn6LX;BlxJiAKBT+U+&@QzYiSW9@g zc5Um~Bx_{S20%u4yNPab6XJQhaj+7*aqSDu_GOvV#$-t>IOT{K=)1xPBY6)G!l6gl z;)tp5-gkGgH)6%l)&s%7A@H!K!oeX^JRy#YEf!>nZ;86&+hUjI1(te)-w(HZ*|(ZW zcP?#L7+>*iISXY(Mqawk2;;(REPhll{hqsDMK=G)V0Sv3$GA@fa?Ds;YgpB66JUB7 zt}vEPRm6hKqLokn8UmQPlGW-DRj})?Z$5E9Mdy9?wpLnY(q9<>i|rl_$!O5^yHGtwWKm9{SKlK*a;J2NRXLo1Py z=Lycs3ZX3Be;u*R)QHvF)uOLGKd>yr=E2a}WxOGv(Fvv~VC>9C^`4hRp=+H0P?F8WZVUd*9|x8w3cG3 zCEV-ugr{t)X?T?S2Mrl{iFp44={sIJ@2LR%Yqfko@iS@yU< z&|AJ>DLaDgGJ?^$^r|d(y+?D26;{msQa=q2Q{{Y|lbHBP^CQ7TO)GZyiEDOt zGdP(-Rgl=0+9fHTT3GI(Y{-yRPO+av-Fz4af12&xj*uSN4;-UokZKZimj6goZNSu+ zl{`aj785tQL7s6>%|`S(cHefjq5uZ{u?+I=OSGXpkko$!s1uZkh%|{8-eEtNF>*qe zzQK#Rzd6juEAUeip7m$!qr~%mv_89ph{^>L?IU-0^z}IohYcd2p;)BDv-W;fq#yEK%t`Y=Rlg2S=^Yf)vCuX{p36ER}Q^ zFxd!5=gA5jlol=nJhaS`Uj`sTrI@WdN`y*Z|EmUQ8wY?!Lj-gY6Z`{)_5w(cI@Tww8gH$TpZ(5+Qnr+Ra z2;NaU-!D|)+ym8tEZ)cAZ!X>AS!JF*$K1J1{N}UOG(N`rfhtg*neGodEAdMf&*QG3 zc3(8+Ztz@4X>{_!Qh!W8sq}ESHl>)$7F>H%GW!lqex^DvbyvUQzJm+?>g8rewl^zc z?$1x{TK3XRz_j*YSUl7YTTBnhNhc3(s_7nk975LELUk6-MvO3wOO@M#Oqqs56L2w{ zF^h{$qQenVHuxfRiDO|X`Fuvb;PLArSq_TNN$#~ep(3FU;Ni((gYSh6UzG=_<@Y5EN;A5-pBPg=)|#*jm4UKz$w;I454#hZ8H8!-Oix9{>?Q~t&^BD z)&x$W4=_oIv05F5&sz-0QxHFT`@5k>Q8}+&cWeBo6(8rt(01UEn1!37_{n0{n3cPY z$H|<(xpxzA+p9mQJ&V3~4Na>>y-@W_unXgKbCTf8x_C1`HgR}pPtTwQTeALR@!Lkv z%DI*A`R3UTj{NQ3K5*pGijM5DWuI=Q(gYyfTx>%&zcdyA;E+Fkk=9@6#bBmNpAzGv zqc$9xoBczlQ{wAJ^@(MUJhRo59e~#@j4^NPF6S(-b2N8y<7ZUg_ z7H4r;x7OwgltFqPbSb)-CdZk$YPwge>+ zfT(7LXTOj_1}RjWn4a>vpsC|VV?f(lB1o~ZcOFr{4=}JmB%GX<%bXIVN^i8JZ|2JL z5zSC$#A+hkn}UR9@dq{n;FKr0eSQGdJ!+s4{(*kNd4&$|1$xz~5#7q@MnTLfH{{sR zOH37a2Mfv91;2K2849N8yO%g4cb{U%3g(~O_2iW}Mk=@3ug*gb-wQ3;!7}TODWYQU zYX%nScblRuZLWhYEBcl*AsBKmPZiGByUugkuic7U9<1Fb+O~ZuU30vaOinydn6Q;5 z?R2c?IUs0m`;t4vg?~RgD_r2CJL$pQiTsmQi@00=RyU&|uH?*Yvisb=4r*dp?5GU8 zaKz3FSLu9n)!=LJsAWZnI59tm=@e3$0bau_%=vOOs0rOHvKEstHNxg#^z9?+I)uA45 zVDQE8t!5! zz|PS56K?Kb7_U#wWZ_4*(|Fa7x2#5(_ zf_y9#LEJ^RUmw>lmn+EsBj}hr96m(WI)^0X050T&MD$z{Re>c{WF&O++h+uA+ zdpv)4I&}O2!zH!rw!Wp$W!LFoztp-96{|1O>t6`fw5@m}eRfJRA)aQtijX{5A^Ylm zRPBXqgfU8`;CEhwXWI4=mJZkW7C3YgSYY0UU$FUPzid4H|9Pe14T+y&xgZ;_?^%{2|6~M>|((hhyDN&S}Z_hUY*nq zB7J7m33WoxHH&W$(J*dX{}q&`9$H-JQ^9(~RKJnjmy1c6X{k9I`%9r^6`I~guS8oR z_S*v!34I{dC^AbN_{eL^UNt)J1u_C+MoA~S8KW@*29H{30Ab%rflzMKdvI*z{`!7; z>Sl9Js;^0M2CIPFXfX@HddlYRfG@<)`_8--1aG7F%K8*Vc)--T0BLYCrcc73*`@9W zRg54_H+G*(Pu0o0jO0g_50t3DBU3ADl%o6zq2l%9b(;ENb6<+|zH@GwiUy3v{sG@| z1k2Nv1*ujxOpGv+t;JQttRTu0k2*tm7)5$)DXG-pC+S8qC2k2#d#!){s5;`e%buIi zHEKg`QzMqG8Qu6|&^V#ROMjM4PF1!ye@DhlE`7Ai<(>mx1sMHEA(35X1^`2@d zw^!3e4_kzzkB={dREfY-d#*L&7^b)wIweYJd`ShX;cyyShz48c{F&CX_VxAev=5Sa zoM(gc!DBPjYU#e~A&CZXg{_-DCV`D&gIQ%2H6{)Lb^N9Kw5Ne|96ftBzCOc2hWJno zM(&Q^sd>HhL@pe#?sJ>x*T#!ZZ(UOmiU4CT_n5x>rUldAF$H+f-s^5)Xu>eDLwdTT zE68btg3Y)zPAnP@J>G8Am#o2b@1)?5i>~t_vFuq3 z!#`Hl;N6>E{%ryukDv7{Rv3M13MZ>PsGG`(IZoOf(Cq?96Eae`N!#s}i;kozo$M}3 z%FP#Sof1>w`jckl-|vM8(z6kfj)}(8drG_8{LEmtQ9p1H&yU2?J$t@cIXQi;#zGIN z)ZxU^b8+GWqQg;vApQ}9QyEw*Z@CA$UfnPjM6Pumf2$+?d(SPKl7;FgYBrQ(!Lq`N zhyoI8S3U0&@ir;9C|yQj1Lm|UD)vl{&6SceMg3l)hgn)JYh1q56SthtwYq1Gd}iKE z9-cu$6^eh&#Cd6c3*JsphN2bVlRg6bkXp)DR!t+;kkcY8aKUibF@W@ls)s})s47(JyUrj(u;@#D5NSrAy`>y2r zryt?MIJRqI*2IMDKYC#XnciR%(A^y4kg!OCuSHv-nWGW>WWH$LG~P{-cffVH-Eixh z9ul-wK$kO05}`=pZGKzvyTjbjU#bndrM4I63+Z{$Yug3hmBS0$H-(0WX=vR-s{Bb3 z+rM!ZPUT&hTWYttH28l`TyT)B3#4V|F;D(kdu0B4WcID;=a#7Vp7z5CaZF0E##XHd zyJ-&Z$ka~>sY1{H8et(B2RY+g2{@W8Iy4V2K%NC}ND{RAkC57kIoWUT&VOJ>Sm=!! zj`roleZOJt!P*<<_*rYu5JiTX4xzer+gfK`vr&A;5};rTpPBYfIQH;3S-}HY07lOO z!)dH-oEp51!@hZXk? zA?h1-(y2uazTEtcp#}o?IOxz~&%@#TBXhty^d~U~*$K@J!F)rEyWg)|hv1L=Wb>q5 zcrmufVQx%lCP~5&UCyw!k$~PUfbs@0`<~`GOxo?BE<`7MASG+@Fc-e#&CQ=QV4V)F zf4?soBzxPE+H(=ZG-&23V4p8w*z=WxP}MO&NU2UnbLI$b9(b4Ujw&rn(-qFG`F^g@ z%~Me;C0}0&W5PH-i3$5^$8DWe2XU=0>lh|4g|Fq|sexZ38^Rqx73zTMEYlil$u|#| z6X!FV+lB)EaJdHC+rc+^*FfVrvR}czPY~wGOmNfuVOB+!Nl?w0{W2$j>0`h_hsmjt z>xV(#F9QtcQ${5;Op~A^UpJu}cg3~vyT|3~2O{Y2Bcq8BUc=K4oC5M@IU6cEt+a}X zk7=?zhZfFIT4vRWGK*66fziu{5E(t#&gK{Rs`Kn?adF{bnm1asuNcTtf zwm^P|Ecbpi5ZJAe{h>{f=fzdG*{HSqSdaHZy^?f7=G~+SXT))kcKb&y60-?1er7!e zsd$Yculo1FdlSCeXt{mhgIIg3KZouLcq!V=GDmpaA- z@APdn^e!70b)>tmwqAebUoGP^raLF$aUQt&RydWrUr1Tm&&_MS)|MH40AjVlzu+0I0cB=XQMP2R+T!c zBa?sAlh%*KQa%0BOefF%!Dwq}aOI+S+{1{v5^v$EhkIpM@Ir2z@R5A4q!Ch>61KG< zq;&5pYffnN%$jjt)oHFuCZZ4%)^xugioR2ocE>!eXNsb=<(&MITT{-Wr0F$ubwH+0 z+3D8K;K~AEFpax`N4)a-^XJ4k+y}+$APrM&1Qd(3l8V%8?n$olJbp>!TDYl%QseF{ z%^1MUUL|52x5nO@Pq8IWPMgpn5BB+2!3iTmNzH-f0OLbLELmJjk4j3 ziil6KFbN}eSF!ugbCJInTDZ)|;=D6C;VUsRv0+NIQ+saVgV@7id~3kCg6&5Z6~U*! z+cwOletTW5EKoOIch-$~qfE{T|F7^~ih<4|@pPWHnBC|ekJ!VZPQW>yv=eM;scD2P z2zWG`G zgYIot$FL*+sU7HDnP{bdZ5W7fF%ru46(avKwd%=witm5wi$i$hlwFOVPs8wAj$uO* zGjb&|Eqd%sDs`iRcy(Ga{n4T6K`!aI9IE*#rq!kSV%XV{T<%ZmAOGN4wlub*-on#-SWwd;)x(^oo$+~O>dVTm`ab!Dbc zG9W$2eoV?58DExh*R_ST0D||Hw;Z>Vm-oPdhi?{6->Mejz|87WBed~E9i72K1AZN zwEe3LqSsYi{^Y?0ogDbb1Hs_eU#7(|s|UGgwzH+fF}{_=6ZU1ATqW01PNJbKP>59CU?{=^vhRuuciad$dnXm>Jx7pm)*P5M2KSY3+^=Ga9XB9|#jN0BP$bffISK@usBP>64G;56x zFAjkd5<74V8+}A7_a$Fkopc@?KrK_@Zs~uid{O*x?<)UswotT|RD@N`JF2IUU>U;s z&wHAKfs!7~{QZQ2t-C-0Y}e&}>o*|_A@wmeV1oa_#?K4qq)NkkRVKcPo&%Mj_MFGH z;EQ6TO@Clcf|Y1%QYtSLVQ$37svB~jXrHQ0ZpKGSvbM;%h1iK-1v24tscyuazUL=J zr0JVHE|Qaz8_URPdRFuUR{Zzw%d@)`#rnX3%>5O)#k0Hmut|UCkHeNRe^dN!#Lk7< zXZ!ah_x?cg#_?v!p+~NmJ$>v+xD@QW>omjYK#(}ktKKMaixIk~13jfWU9gWFbktRV zU^1Uof_H46 zw;chd-gI=hH{hziG|XVd?4ylq*w9|CgRjYNp{g_Him+iGro8Ps>p;XKk88XFK9>i8 zAV0XhmD$ga>yY)`*m~5D#7Ndgk2~|fu;T=ovjm>4#JfW~CCvO@&zp8uy16=tXZ2VQ zwY4e7YjVXhBPdeN_W3se)%~8$^rDZ565K3F(uD7V^V2$PC+#m^6PqseBYK)xZ3b^I^Yt@=g?Wa=7{_g1II#EPdT zHJQ0|+{pttYWpR^@U=#xXs0Ny=<51-FX(ACbKRaPjN8yrK&@^qFK22NeESifswnYF zNBq%8cr2e9?_EK)r(R)TSAmSMK|Fj|^8LnUqw~`Wik;GK0!D{`=RDad8z-SOF~tEd zY|Emim3{!13IdBg+DytSHKWY4ejAyJ$O$_NX|ynmH&^)r^tzlDp0?K}j^30RUPqHN zwI&-+6cvc0JF=n}CG8zq<8aou;V=H$8dtfvb|m0NUfAcb<`i{FUuFJCzp4=mPPSzt)~}WH z4^o*U?K=N7ab26Ha5hw=l(iydNxa)=uB_GGD43UUX_4Lz*jNQ5#NVT25MN+Ci*C_> z5Y7DCfu1)BJ=mLbIDM&(HfTX$jkhpT7U}f*A76NzKi>#$7Gd&zoC#?Zc&&BOyJ6-r z+h{LwSq?em+oB_7fG{mX_GpDH6bySOIu!+ix%skG=e#-S-|$%aob`|X$Z$8nAV~cy z%GU^EbB6G8O4H^Eqr3No4gc{IE9_Zp>VR(*_Q)(0{&t@@o%lN!c4UyamE}{JjnQoK z*-+BTS-Wcw8Fp=bgP;ykW@uMM^|yU!ys`0v8OE!jNqm|1IlqB$fz$ZM&qQkSnL;O3 z4*(>?uhTr%VwcUG=RSF0(w5FBD^r~Y4qTpAE^tkulR#Th$gMNO`Z=@Am7MOehhBJZ z*MI-1ozhYb`a$`B5nIwq2Y)hSLTC=T53IXTB8T^M-2-pTNm;LC(!<3@AkTjyer&j!99~8GA>SacXBH;#%8-DtGK*1Le(h> zT!j2MS=_4SK3FJf&$9h7zssJ~8XcRUrNctL&2hJqqB+k8j5bZ?4@PlMQ55?q&#sid z0q_jBhgW!lm@?t(#a{}q6^Q!7bj6Gc+6iPR9Zx27C^7sz9S>aI$F=>&{~nr-x9~^k zhCeDS$XKODG5$r8UhEh6AiK&}MPkPs?rTw-Moe2i-%qQc-DHbbW)?{tH3EGp1djlF z(v-7YZXTvA)2mJGtF&TUztQLNh;!U()tu8d>}N_sAyL25ZN+&9btUuLQ+mTVj5eKR z-_gf?-Js_VU;@ndhiGq`O@y!|^BTRif!OI3!mtMcf8a~yryps8H6Ae3u3UuK5vdwV zZY1F)FiQuZO9) zp4ASrmmZ&3M$_-1(*M9btMFIthsLuY1;)O~?)(8fMXu51i>;xQ0MMw~`x&*czcu3% zPC9xX6vX}gkS9ckJ%&}&Y}QO=uGvi&(ryv?k6_(np<)iB@pcw#S+tb>vc)yuXhtta zE5hVKTvNykl#|=LJDaMOM+nl;QycVka+#o~{!1GP-bV|=S4C+?%bL=6(6hVm2q(yP zv&s`a;do$sbz7}=ElH^;_7{%jU1vOp@tC6Muu{1eeRy44YmzMQOJ@uCzBL2wld<;u zB|3XAfnnm!sQU=Yt{ziIZR02MG=~*pMhMO-{58N{&zKhdr8P6z|S|!cO(nh8J{L1goD6 zm`*nEN}!nHVKN=a$f?-DaO7sG7i>9k?$upq*Ymt9`s1KB^4NS!1TRbvSgXI5-Rvb& zr{3UYa+dpj5qyh%8|(Nq;%2Uk8v^&f5@?$;`~UjJkS*p%!` z4&5*qKbUYk+f2Y@HN}9jod$vDTvYS=F4WYim>XB1XS3>%C0q0+bF5EZZ)&GU2$6%kX`L+_%^b0%|t3G-=7rk{y00y)(1kl1+dSp8Eh zT=YDOaJrjgDNEbycKYYB*R7@juOX~;FY7ZbdrO@cMz07J5pNi>@nRvO1_ z9x%3UWDu*7z9l}Q{3}ThUXR=;YkUv?`MPPl=HDwuM^ghiWYhCedMb4Pg<)(wN`%Tr)#104M9D4KH z@Tic5wH9Qv@+I3z#Q3smv;3jv3Gjlx4nt__v1p?%#C(Zf_Pg}of3s4(;65_v{E1J` zLiY7sttLOUWbp9dFr;JE6W4Kb9@&71**LpVYiWYR>xG{>JMk@x7u79k%r?nMqoiR) z_+nrHAL!v#A3_`e;W5qo**gD-WSs#hr9cI=;`Ame}O z(EV$75FULVi`0XIwQ`-SCZ`;14tiC-cN!O*484+p{v%kd>SyeDw%ueUVLW#N5tJs` zKF&Z^jSg=Wq%IAxcC*~eX8N!MUe;5eP5`&Kxb@DR^yt)~lPA+*-vg%kCpHs^*W_ES zlnxnFcW-?p^G!)k4e@^Rr7xOWu+siRCP=;FbU$P@wn@DbK<(u6c}df09ysu;*%=w4 z1<9WBZ#9g7Tjd+^3FLiH34~kyhx686%HI{7kAQJXu!TZ@lq|5{+d3N)@ST$K!XTn}Q$YqhNj?vl!B-hCOFo6c< zl5aA^PDihn!!smJ`7Jr^Bnnhx{5}0DH5WWWitzN7<>1?(_{GDcWYnnQy1+uOqS_r1 zSP@<+7W!j8%HoJ)6hgF+OCAbR1UaobdG=Zu);7}eb++3)FwfXr z;~O6xvFO$qe3zqwqTP!92E&&p3~*T9Vixa<`Bd$Rr|TXf29bdJ_rOvZ9dotow4YbT zeL{<}JIr3{S;zKV6T$f?VtI90cprIk<;J?jAa(`Tm@;z*6}6+a1IoPvfxF$-6Bdi`o3bW&y(` z;b>J$ceyth1Uf0~`_w%+k0kbH`s2MdGKy9m3M`ZB%BQ9k(jh1D$K^IZe?OA`oAgQ% zQO*bW6_%fSK!wA8{Q`%7nC(%yN37c1w6*`J)j~t+-O@sOxr$vN+%q?Z!wgkH9}%Yq zm3;rurwrcri%QHkz34ke+|=fc;nQkwf+&vHD_=OWrZ$!??Le?V0A)oI(H%Y^(ZZx& zIK?SE#*|WiD83T`v^yYB0c^7otG>-E)>2%a`$TCMx#TVLxBr>s_|(oN0c*drTy;NT z+uy;%W0;r3{QOebp;M?~g7Cz^?gqnx1ACd8mfRCL(7=RJq6qc~7{6V+AFMo`?Y!M2 z2Yq!M{C>?n;6JzkP7?K)!HLRu3H=xYoIHwS>W3k>Ilrr z&!l?ddO-JnM2aQ9gyhO*sX)LqQ%dNl_;z@_#dlhTD9q|Q`s_j$9gnvk(Jhr_Rwz)WRz+gl0(FwNa4A97VBFM@KDoJtu8SSE#wchD? zBDgrp6*QncE+Ul~iI;=Lb(ttNVJMp;igHw&d+YVj^8usSyI(M3k4d1(u;DV!B!S$u z65_7&MB|f3??R)#0OT{g=*yan#4mT?+r%lp9|RT$(x0h z<8`=-1dvgkx-e)uX3On^^DuA~gy7lor*Uy_IyK@bX-@R`nTDx78Z(Vg_piG&oc@6C}~awKD%I`pXZLV zTPXYL=A&R~?Rs!=c*DG_rkFB^8fvm+GY7s9FXn_!-jh+`imRmDrcT(>e78|+E5=dj zs{Qjtri>nx*J)BaMskVzb6o1S4MCj`>eKTp!^&e*QL_2tfixDe&yd1b2uirhC+Y`_ zWXUGk)gX%w$--`p0m8LsOA)U1I$y^NA@aZ*SmR9bX2;IS(GulQ_sQy_=3|b@-A?U5 zB(1<+>+g88*RmPuZq5m$`^B+4r;BCWBMp7SPMf1_wj$Jw1%sAVu1Cqf#08@Txk_+< z_ok`$5aAk<1VTE|n~6@`Byetdcr>m(%|z6&03;{V2D0?J1_|AV)bZY00K`c$F;>|` z3Cim4v5A(mUPdoN*cB=L%VI#nn3h1DPTjIC`i;#_y6LeC%hQPg?=uC+bqJt;-%rRw z!=lR!b=C-3g!gfz_sKr6#CN(;%qeAl!CTnYOP_QnM6uW4o?p+Cke0oV6MC&l&yxPL zTlYKd`b5j$&+D+FrkG{;+M5>kGlrk^3H8=*3Q)s_x_~a82A5q4F#n#SMe_W`hfbmi zDjQ%^ZZsX{AHk|h-s!vfn$)$dfkLmOLz;nS6$<1G6UDL*wg(PfnQpQc!<0ehSwTEZ zw{jW>R86s`iGBybl}cf7*i>uH6`nLHh?Z%gRIV}(dIBUQE1jyswl1Ts0v+C1e82lB zWGvYF0PK=3RU443*g4kfEMFH zy!*jT>|(XkbNYI=ND4bP%Y?_Cx!)SimRZmy-y)oHpJ@ zi#YZCZ$s)6yzwEteR57uiS{W9_T~PwD~2oI=!E)brPr2a&6E#sbt(7#jqW$${4cpV zCY=p>>o~Tywk)DePQEA*+q2vKmgp8g&&+~toVpqzkldxpot&48<8#Qx#=R_AJ&ZNd`GhcEp1 zmb7**uqSs!8`o~-9+l8lLtXccvg|)1iE2AKuLP1YwH-O+^x@qf_nC$*J=Qk_gWO*i z185|JKwojbc|+)NYz+*XYF*cQ>;BZH16jd22*IO(8fb_>!!YaLMsu!?B1gQRFSYAC zvdGeYbdqQT#8|1U6Rg>l9QgxhoRiU4K$GnXHfs^0Q8`(yA*~70pyaD>F(jUdT}Y{m z>$Yr@XQ|63zloYJtu(m4<}93H{C!AXC#Th5x&8Ncqi%7@yJO8u|MSDZPG4UU@z1hf z6pbB3_5=(uq1Xf!Q4ul)i;WUDJM{x38Gi3j&g)Sp(TU7~6^NfxNVR9rRaSN)Qprm( zHky^>o=}{txh>%e=0hLpeKL<R`jpFx##-fXL%1>Jq^ZK~AlW>w%E?tv`g* zMy&5uW~xFb&dt1YMpLHqr62a~^e}!4A1?JiRB25vmyI%~GvD|^pDy>sE588GYz88g z8XX**XdOjg4jRwRq|`gy#t`S|B*@pe9K0&5f_tTW1m= zd!H{on(M_dSL=#Wg zMCqnjZG<%V{@X?71*Ki+^LC#fco%2A(9?X4XN^WVst9=m^p zYC32t%7qg5L@3Jj`}m==GTA4jTty1M+{4&mtVeq`yKt)w~i)uAn>Xoxjvk!J! zqNxg#)QAc%{I5}frz`!*0?lXfY^t8tfK9op+M~W8vqh3BVWz^Lv*Lv|a#!`t^Koae zu)RgdLFDJ(si_DvF@NI7!5>O?N*h~{P2~RYByR=qtNqD0xR3cmebwlo#wpVjtR~jM-6rIKTb>WPa+BRY?#@-?7C87LhRgV&?RbP&{iV5B zJID$CoVI!ArSb+b1C`{Rqc!YO)U7-RNf_&N%tN!8=@}A$N zI1i4leR1wW_`opTX06+rjySQ6PP{vRkFum#|AipsOJ_!(_k3}YRWaF9(@H$PiVG` zY00-HJGZLl<22-9-J-8;^TSZ5eK!*L_(}bRcR&t$4t_OTs>3mcW~?Bb5Wqbu;B~83= zfXsOIVn08*@W*^pQUcL7MGWSiY2AIu?P3A)bapuJ`DH=i)GsP7$1nc~0MbQ*8mr-n z)6Dy3w=FwRftr|Ud_JYD)}!7G+nT#}m0!6tY4#RsHIcnUXmC@oxr@wL1l7k5W@fcTW@!95(HciR!==&H@&wePCU0}VEk>6DpX(?`xWTz{{ zxxQjlZQYJr(LAtvTMLTb0z8Ld9vTL84%&NVHsI~Zt>g$1>{uUrgA5i zlrU!S${qM|oo}Jhyk6pH09pNng2P<0ULvYqsy#Co^SeOh#0{&8qEqS~Z^bP_8t|h) z)7z1)g}qMIQu)=sZ$Fm0T47SWTuP%@a)Wu+nwi*8|G0Xtaw1xXR_QajVI@HN&#sEJ zW}HQ>zuOD{M||6+)n;Q93v@)LEj-*eMITOK6QFO@WGL3WiO~A@=k@T+`f6NPOMJ}w zONWkPBc$w@=_2ZF?QDBQyjl>t7=idlfIn1%_-&P{u>8VIcB_{(6`__7Ey&;g=vGQ< zXRshKWLKwj1u?%Ye(HG@EFTcW1l_8cEqO0(G{70|T;z1n4>C6oxYR_amGubx2*bhX z3jl4y<|=$P*KGn=i;hSrgk5a8trm{bs{|MhI3ITX=ty@9Hd~eu9}lnvmwk@m`ASGY z!FF|5NGq!#2QL1-bNu;+{<1ku{ti!jRoy}V5&MkbRv^vwKn45_p}%dchn=8{t=)C^ z2bUj?U6H>JO6Q8V!0{OmAr;l|!S~XZ4eIU?IbCl<&rY3x1md+yV8b!7C@s;k8?HAG zhmvTZLsYdLDOUJdc*4u9hq)hu`tItZBtIH)5(S{%LPRwZtnm%|-728xm7wvYW`0#` zMnCH~x+YC)6i+!+N+Nn;&~x@Vyv1?9(Blet>MH%Yi<00_iJMAvLZyBWI{9N4o?PE>Wprt%8B<4~s%f{(R?kUeKEcK5d-pWkZ^k@m5@Ubvd4@ycOKCDF=^9PJmYO$r$*Lg{GH3<6QoKuy%JP zE-wOu0Tr;uRRFLkZ)ePmLqWh*r6C|gc&D|)sBsL|?67NCKvT^3(0N$=l)tA*!vNX` zsnZdWc(hu1EBhK%t6mjFAxqwT`xDRD(ChGN>g=o^WHeX|W00I&2xY3Qaq4Qh;{dYR z2{`y*CWlaERa~_{E2W%QSX#|uOR%>O^HyLm@kMx<&r3ZYBonfNDebA(B0AFn@Q=VL z?Ouz#`)XZ)3Yqpmz_s1P^_M>d!|XkNefAUT)S;jE4-ppsqv$N-n*7>0ZW1a8A_!6< zB_${bC{^{&2HCgEF}K!!U#U^npPILWWVbWVv#l zgHFDCF?bnAp06;4rB+vcY9=4Lv*36ik&-4)-bIyHijSzG_AV^EGMGQQ@!_urcRzd6 zdHIdeXpgkDUqPhujHf-u$yZmTVJBtO&~Z#3O)fXdla)H;XXn8Lg^%y~JX!kv*ikU< z$6HZMoVn7LTjNHZWkd=4)(woVwep9xcPl;mqgwX|_C*197-u7e-7Pk;w(1w|h!5nE z;NBITeeS)XJN?hQeDXZaebN0_nc~+l%qd#u3f$GT0!fcjekU!u zml#M!O3YYJjsm*rC)SSL>?I&;b^CnkMKH8+aw*l8va7d)Z;TQ<7qx^X&A7W_vN@euqT0CH#&7 z1%m#R7-q$0iIfx}9lc|iTwcmW|FEh>={+g*|1MfC&c9?Vy8##5Ia5n#_CW& z1Ocr5dJ3;VxFB}fNrH?mlk!qs7AY1fJrWB^uqb5t%561C(dab{Qd_+|!Wx&`Pe0EbOkoCHsx}ri{i+iRF)nCs}a`p~p&5 zrS~!50luWy)O` z8N`_fL29>9W`h<>Lm~A2Aa6!_Bf>kl<4j;$CS>+BdR9$Gebi*|+NXxH4bB=$JpgwX zVZh;jn|D@?Z`9aZT{)%BI}Yp)Nt&}uzRYrmbRvnxr_Khh>}N&{H$FZMLr7IG)}M{L z`!N7jlsFy4WvE5e(lh?rh(RE1#!(#aahB0C!R@A_=1jfI_EF4_N5zv{3(C|kY+?fThd-Zoo$7wzDv(GlLw-;sCA&3gubr9Zri=f#&!xx8C|rz zf_w4wdf3CT>PM%44x5IwdH%S~>=%Bnq=X=e1q@$sYWL{v`I zDq*~X>}64#yFGVr)4-+->dn#)Z9pVx(`|PQTH8~&?eW3SDx2Ba=34Y@;&c<^Y?g%< zBxEihOOn4)RG*vCR44JWrd>Zgh^e`Xe$z0y`#CiO--Yblw0dIh-s`_E+}7t2@G^O% ziIdF>#1bFVn6&yM*oN=^f@|H>CaiY~;S6^D*kIV|xS4xebgy)!oR=M<@E4gQepdDy zPJ|@Y|BBREEnCDQ!qWFtioafQvNYe#=BU0!vHIo_? zgD{l+q@bd_{Q3cS+6qOicmRl+(j{!p&%z?wom#=TdCx5Z_Kn;@4ak3T|DrI`gYrND z%E)M9v3~#|w4CMN{i5jz(sOH}@P<$>?>7zF`}4^~S$YS2Bxy*Mw5%=tS%D1dmgj(N z5ArXq8c%15E8l#K`v&+j3|9vMYngaVL~mIDYMPGKjGB2k5s03C|E9S$F;Dz}e5GQD z+>QQ}$kEA(35epk+yTyW96KG_4BmnR`dy!WHK);AUGa)Em~(hovU(WwPwnKr&P6_0 zNNz$6HNpG71QSjLP(iZ?Fc;jdp`#s?jD_8^`l>W9=Cs9Aa?lo%$ZJj7By6482kd99 z$u=*k>F`cg-a%9f1Zj~L#(;-}=x@fR+_jT>ZoOO&p5c@Xpm~-tsd|80+`?`#ajmgJ>gkTSP$9Lr!DY?rv6UjAW*FI!r;d+{d@MACKm` zG8l`4EvnBMQ*n8F#>slw;qGNFD#7PE?Ug;l{b1AZ>Z8NGVB);94o8Glr(!%Yu2y!5 z@=vi)#VBi#g+;=UHZaqF2*VA%ZP6EfzGKkmcje0D-E{5yGkStUdde$W(>wo&W{P(% zXGxE&d{R6tSe39=E`azJG^en<{nmq_X~zlAwQJBmgqcB z)Vq7kET2=v99DzVD>)1I9cl$3lN-xSC-$ID$K{nje`*;L^E`}inl~7*Ev?X~=+>sa z8s_m7mdZ0CB&Glewwdm)Vb%ffTKX8M0-cA7c% zh}dZtIC#2LsnMu>gPH;u&{T)`zgo$zO)l4eD#If^Re)&(Pg<32{WQ6#`jr;Z`Bs)s z8m{7!hChr@3G7WAStf9duHtCya?3zK+Z|MZnD9oz@SLnNLC2{3{sNNls;E(^nD`rN9 z8rIi5j#5hzv*(ygzNRT;*F?;YOZ>cqsaRmaKMd29=iqP+>a&bR-*kjA7h-OU;K})K z<_`k&hql4(8#nh@&F`ndzAV|Gs9;AsrOvCKIqz({P*v%JEKN4nCvAC2^3O_P=qpgz z6+Pt_fAF&X8=KRl*IwJcKrp1#`uXpH?EFpq(z+talpB}yK(?XYv0CJTK)0?(x$teF z-UNB8hMc$vy?Dp)eYqZ0Kvkm<%crU^{h6wO+^ zHZx3DBFzqcUO7iknA%oPC2-ZTi+7q^1)j4lnBub{KYJO1qO$_&r<5;?lD4Bgi5ug^P-Mqa^CCOVSbE2mDu=ju15bI>yaEQCvX%U627*0oE! z;%`^3m2PdSvCcDE`0Y=2Fu)|(vNEU~$gi)v%JWk5U9&uzIzAgXc)nK`Jx$BjKQX56 zTRERU6d)9=TbUAG-BH%OPZ8WQ2KhA%dF38TPy^kKLt6t8Gn56*iCxvt)cbYDAV?lk z_nF{`%#wAY(FU|r*NT7TCN}^qb>-)Tdh$sJD+NkS6G+wNH*MI2F z$flgLhP*d>zfZpq_#|Q4O~|e={Cf7Ag1gI0t5rrIt2d^65U|B;Hq(fhgDowG>y-B$ z3o+qSN4A^#rBl%L>*|<9==W?*nmY-O#?6)2R)$ee7MGE9uw0`T%%-Jl4qKoXZpsa) z>imo~hrFA7PKPc1$q>?Xir?;hfmIg+V>0gdGj^C+N1P%gOXK_A(PT( zdyNUTk;U)Ml}r)8>zp~9gU*D#sxn|s zfQTlFAdQ^EhxM3k2W4&1;l?V{BMuM9Y^5o+*k?Hp1m8(*=LfT{hTc4Zk^xt0#=fUO znqi&d-a=L`c!~l6(ql#q3{7D1x4GlEY~IMXCI1_8KzSu4Q1aJ8EXfzf>4r>Q(#vXc zp4vJ`az}w@|6NMsom1nEKISRk*Zxsyyd5PgWe(J7?P7 zLbEXYZH-Uv2n#ba^^0aGIWxT~vBHhJYG6C=W)VZ8zSvmGsMgzf<*mM^SEFLBJtkR= z?-hr-muLZm>$Y_!dgeLVj9tyByf$dJLA)}h!;AUGqfo6(vH7{B&wN*E+6iC{>yB{Gb zar1+`&s_5yAQQ>`mrR!8i~`5MuSLG1ZnM1hCT9OPTZnk8*r$Q}4hDd&UfX4oB!r$Q z;4E|BpSl)NW5zq2WU_zyKoy~eesHlUH4S(Ywszw9o5R$xj-jPGja+g^m|@F3mQqLf zXfO8>_?0ENHU8L*3p+*>>G@@wSVj^NV&ll_s>3YXM_zmt0g^3G!iiarJ~U%=s+X6p zT=>X#QpWW7V$SWUT@LH3GCj3G++gb^i-x>)G>zWMdT5m&TkNcVV4B=F{WZSY^^4as zyXO1PY;zig#?iEuK!TUOjMN>};QhsQBtut_-g1nGfj6~uetuB2n;`P8Sk$)lW-x%RA9MkGBi5qi1Am*sE;OEygbZqRZvTBF>{3*tz$=D-rdN(I$>`_~cFlM>1Q1(xdq4pBT$D{S?3#)CZ z&3(dZ{&9rzNVtqU3zmQ*c-(O3cIj(9EI8fF^ZMD9c8{aaxjSvH^G6V>HvS(mC!R!0 z5`jl{&f?KL?$eiMCd(qk|X{tgk%=R@SU}0)otB6>bg%}8;)t~d*4nCZ7j&r&D7gTCoqGq z4OB%)qiLiId?Pt=xP_OU81yf3R!?zy*JG-kP-MuT%3}XTPd@|^Yjk~BHz?~kS0pyp zc$Zp^-vyl!^n)Eg%SL=~d;b-QUYG=|SClq;^ozZ3_Co)nrt1;HUe46c;Cl#koBVR) zpodmBq;`#q$>bFtzTcL{&@n^MANH2}T!3Z^VdRxOadWqy?C@E1q6VT%QqS`3$|rzd zw(_zNNPySfnoELs38FKRjYUl87F;j4cn|XO*HmlxuU=!? zBTrQVy+dvX49mpup69=)jmOuVW*A`+;}{!mA!W_@BWpo%-)Kf~0Q}xx z;J0U)<<%r_E_%m@r1SburXHaYfGmduHhr`jeHptrOZ5DN3tvdu{_j#K0%N^r_8!T9 z@eQ_8zkl${`y>dhDUYAn@9&R6CeHJga&xF`1o5q4+H{>pQKxuz*o{qpBZlEmin z7^NBOy2L+L_!Y@Umh#+p-Rlp( zSLLT1j$Jd48aoxguEyi?K!FHEsq&Gb_7gt>PZo6xA`;|pSH32MiEEGOC(S5?L9FLC zBWV>%mrvq^$5(vx5S^xvR0fs<-K?rVNz6-HY$|RzYUf2%^oVXZSv#(9khkpR)%@)B z22N()P*sfDX2Z*NFo9Ud9MWxGhPM20Nbl}U1teZK@rPJr@Pmg`;hfr>AyGeJRs_q; zee085H;p=g%`T~15IT>ZOf3EzLM`n%m*Oj8Mf*Fvg~<=g|<5IU)6ZFDxxEoh&()xD+6*=w1VmmB-c zF_GGvap7#n@TOTSq8EP*$FF&8VzDUy3_J6-^P1P1RqBna!?r)BrQ;K-@q;)ko2v~Y zO{w-~7h48*EE$(JB06b$WtOXB!-Da{4J^VfZqJ;QugOYkx950X_wd~Rhxy*buc#WF z^ATThDha37`P{^@ddw<`J$UgEv|=u6PlqK9*|zphfmxGF9^9d%7TS$H#`u&Y(hzmv zds}zDziX#Bm!R+20AlgvPpmF{GGV2kWELOTT2AhgcX!RwvAOj(@4jTH^!g#=+U;(a zF$PU+D4$h0Q8$pSQ`(Fa1U(_xnWe6NiM1Z2`R`J;S4g*$GNnu0AwDN1fK%(;R9u}D zxBpdYy$iLd$4Jcao14z6AAVN1|3Pm%{=m+_nqu#@vbNu-0Le8=pUs!o5{|xp^H17Cw*>UkC&sWNfJykvI5(Cu z@kb$t6pp6^>pItn8s+k~hHQT6k4&#zV>yyrztgw)vB>D?jR)pwG`S3M&pNuP^t;De z{#h2Fsxp5UxXHjE+l8%@0Kt0Gs8?AK!~MIY2P=35UJ5Nmi}Tu({jEqHiITlA{cvGb1g$G_-0>}Jq&r5B5_k|r5@r41$Fb`&(=I3#wzI1sf?NDpN>BSx=;f>yi zL$jd9yh5e=XS>ek&7L;jIaBI1-CbuU#br{)cIj@A;_&`6XEs?g%s@7bf`mjvZA-n- zrqxr)26p@`3H|u@E!?DpE*l=i@J@pJ!pX@9QKd9o3%Jd$c@~fYXp7hpJ`Dmq6n|G> z{edL&v-8V^Myy5yXSBw@!~HXqr(GrVd)h1IO=zyeSp31oeW&yzl2U|fbevUhoVSL1 z>%ltt&;!WAU2=5MlHL2=k+h=`((%ge$1+m0i?EO152;yNo$IpK?6fmL=S7-L?4DDB z0U@%39a0v4?c*LuZhKX{*Esvfr+X%P7QgB+5Kq(39q@He2z4wKLjYq{ju8OpsP|w$ zj>HR7=3gi?{u`5y*_~*#2@DV6S3i*ROyyr(P$X^>h16ys?9t5!M}4sgNR#n^g~q;e z%lfJ>n%wv{ZD?TX;C65Of^EI!$HHu?oIn>Ldy`vDa`uQSd=($Zq^7GyOP(!F!U+0J+VBE(ep*nJK zrZC{IMZbcnw;!R|fnyS=cO0Z7DrhB(KT9@+wY|UM81C%BDApp}>!wm?+;sDXJTG55 zdUJ>GRX+9uwVL%}YS(9IeyB%rZ1mDJ zrm~qer6MhNQp^c3<&q_khq?U~$t%}{(K`d-j zSXPkImSv4zI_+0yIjOr~_P{`|--AV$xYn*1>aC4FU9Z(6gaif(OTwIM1T+N;bE+*K zx08(*nWv!6CEfS6^aSG+zE?kuNQ9n!WYmQ|E$8&?u4kYrE+OMM#!T z(uKU`A8cfahZa6$Zk1MoZd*27jW?x}_EuNF&-IMCNG=-d5Id(KnaWx!=1FUHzt4T> z*4n^&oBoaYGihy%9cZaeXh*~pg?`Op?fY=Ife=0*`_}*Xb!OF}{NM!oCa{MSt6;Bw zCk$-;ik?^$SPJQ+qCuu}Xr)^kL=oZ1`?P8Xc4O$d!EaVWB7mko{d)4YxaR(m(gqoJ z9Kd$ZqwUtwVzwcr(1*A{ECl&O555kMyqIAX0W^zP5LFNRr1!Pc0`S9UDj8rTXk_npKWXD2~Z$ zMt-{|c|J&On@SD<)l)Ec}VZs%z zL$YlD-XF?nV{YHO$8G1F46HM(os@X5I`+wEssP$LKWhj4h6vft$z#1Sd}FI(ocX&116$XeJPH+q}yn&0S$Z4s(@RcpfvfV@`gI#hZU%-|0* z)wg=CwTZFTOohEgbH2dB*)%fc`yG65A}tPYLfeC9VT}S@exIpfDZLE-X&PtgbCLco ze{4Cym&#ncDJsHp)l0VJ*&BR?T@=s)Sj&3z!8U)%9}FUFP!X>ZB??&4m6wqmH3fyx z29>y`ex-=@lIbP}O>3ub(7F8lrU;(v;Bya5SebsU;Jx8I7$NDG{5UI-qDah>Gq4?a z&Y{bVzc82UZ$^2wgN=v*!Rt)YS}{Rc3@OtLe$XPbPVdJCoSHw&guFtyM@`uPzPpz3 z2q#a`lBR1z(N99zdojW@p)5o^&c<2B6z}?graxHd3hFtt$R^loMM)Gl{uJHyTc{$m zo9VdWoDd7y)b9X(W_7J>haq7fyQ$<;u!=c@?>}hTtDcbb9@PbzR;y)HEpV71>ir4k z6{k_Wf&$lnjrb6EvRW!T7H`agS=2oF^7$Bu=hGM)ORy z=>uB_U#eJM1xZFQM(u3eKrKq%92qvA z`Yz{m`&G07>HdyH3!;f=+mLs+!5nrC(`Za$wHIoR)M_tynCG}s=~CGy0*rqzX@d*nzbv<>?G~j;FE1u|1O+55PN7 zapPMnjpOhOf`Qet_$W5r>tJ(nYwb$Zv(#gf;yE;Y`F?$45HsWNui5-+LMHTM`t5F0 zL?A}Fsk4Z{vmyZkbrXM&JUcs!wtbONQ@?fc-zB#}c2(!*ld~s*SzZ4eMoC+L!34r- zhnlg}X>=jxWUh&HOkz~SoX|bVjgZSRRa&Avh*| z-)F$Pcm}BSF8o)=i4}|ilv-^3ILCQ!E1swvwMT+el*GtBJ)A2-AgQ3_jbH}8AcrR13RWG|Fm44%kAv}4qX%L*;L9^*tf}$m+_bXs_OPzYQ87izf%c6*M#Bt z?^1WiW9pB7!KjOp>9&7|LqUVTAK*D3JIl7xIIFuUcgxj(dIj|Nk2~{rsj6gM=>+M( z#6sy^=2*-Ev6Uu=Ou>JiL&g4Jh5g){z$pm!TqNc%#o=GfqbXoUjbb&9SB=vSXI+10 zwg=P8jFns2-{ocB=+oPoVXWPm^s0X0%%fI3x2qv^r{RHhU$4%O!?5K2oH02vWt4d7 z;BL_<@_EHGnt=ER%AwrzLoVFh%QaVP-;=I%y;HgMr&`O3)y-rm&sDYDS1{Q!b7_{J z$97Ca3NmbXsGnT1fjL)Wh1D!j(dSnL@-0#~gp#N{Aby|Rl&YbrlBtSxwDE6uJ9ygL z|Ca+QlmC6sunf0iCH}Tws}9DqdJIH5C$@%&Su4a&tfs5Zul6E*^t$?-bHL!w5}5R0 z*oSH(iO608x0`L`=+^A)PaG4uwbo4`LB#3eWw5ts)2Gv-tDfZDfa@C^ZqVcOo?60M z4Ntwj1@VTLV(A6sH(hV<{n5=r~4*;EQuI+uNQe`=`-b}h6SQTr;Q@5$x&1uc!0RP6(_ zu+=uTTK#VZVb!~w`)B3-XY`8%1V)b-)*PzjxU7@*ZSv++F|f$`M1vFoNd3nFc zjiXegUH+$nl~A{7$=fxwvgdjYHP%&L>JnyW_(Q9b@#pjvPsyxnkDEiOaXT=1!iSAy z#W2?AF?AV&;{?F!fownWg3cL;K7ISm3ymWKSaM^YImvxhYoLyjfEN~QIuh}p{lo;5 zkf@p{{re4)`R=Q;P*Vk$`NdO207zOcj`ib!oneN!XPbMOod|gWtbdQb-;pCgRzqHX zUvlty-4+!C_#E418UvF)4PFXUQ+w=hTKu%s3)qb&Qs^ty-B4&c8cmzR;*9jR1@L|s zj|aM3ZW#r48zIOa)%^ZMSK=%Fte~R4 zvYLL6`1vcRGf(q(YAdSekQWWDYwP2Oq$J`9#aHcm{jGsR=`|Q$_|jq}@wkfC8h$+j zXJ8JFmdRuf{;r2?hCXiqQ$o|!bwmGZ`iL|!aXeEAQsbRN-~ChE^nC^OGIs{_QXrSn z5HKRQ(M}{zBOrEy!YD{%b&VLFiQ}CkOeeKzlVbc$dMrH0dS@_vD*~k)z64ED16-Y7 z#IqjIa=-J7tDJ-$uaIKk(>FeR=!{t609(7yKD(lZ>TjrYQwE zpVqloa}3V2v6QA9ke0J)nZ!#px!sjA(S#ny!xuWb(%dK9$;~KGP#3nZqdcUfz+Otq zM!P%w{6cnFt@SAO-I;+$5#dA3Y03G0Er$8+T9_$EjLhLqhK&wKW7|@c(!Y1^t?`?F zc#p=xIHZl?K41I};SM+z{YQ0F|LixweKnhSWs6i0Nt*EUlLxO?TtXM4=Mc_8?76Tu zx@G0H{lk4+q#DG!sY&ukcIMwy2&LE2wk4PGUEc^5gt zvLwyztmc>E7{z^iP`rbu@EmZ(-a9uz?oJf#k~8y>GO5__*i+o)yr|0nd$4&#LT6NN zPsVE4&rJ|&^4^=x#}LZ3NK+XvuJpQUJoW-5h2T0KyxM2<2NupKyMCXe}=ULn6~Kkc5JUYyi%OIRDfO`5oA*1NXE<8L;>4+m9JH-l2_ zKdsgG@&ISP4D!XSeoF!)+aJmS@kQxpA*&}okLP0b;!%Z_DAWhq{x>x-Z&r|k66nk@ zW1|&A&Xr0?yJuhK^C(*=d>2Y}r9J^gJ~qXn9KZQNL?8X}(PiW7LN-FTvXPZ=&soAi z!#i9lf~lbR9s9Z>xnR5VZqaZPOK=?wnMUCLcL z-a{@0tfGg3jq98=L6(Lj+}bObYwrr?EWa63oWSSSr>E?BfjSQTK-|7D74N5Rbw@Ye zNKl>t`>T_Q@??cPj<8F$?PZX|?8r+r+#VqmsY|2HpX%8Vn+NOHKWZ6p6f}4py#4UT zEeK2wn0qPu7jAQaCL^Fy1rF3|%|FX)C?$zshW6f*1yuSJxw{w7^vD}qvwI%>(yBb; z(`@qbplv}d_Kt*{*lhXiPH&{~Q#VTe{-*rTg^*l6Z#>WIXMtq%|1Nn?vty|J*Wgxb z<SZ8710upZ3%uiOybZ zey7XGP#NBX?m>8%Tl3)=UHoPaDJP|c0E|(KdF+>*9{%4YUGoOcfXT>zZWvdtrhAG{ z*s9~K;)!At!T|F_w;*k_Yf4Fi%+&FRp@RP|sVe8<7|LUQlNg`BlyCkipk20Uhqn84 zZJlnpd3kIQY1RznvSy=k^Tf5=Gu1oRJbVyzE=#KRi;ULUM0UFP`t4Cg^B%y{s~IG# z&FXJ?K}0dA1-SPar?sTVtfpHDXH_BPdYakbf0xGDRu=s}sMa@&70Cd zlr<`xTGn^dn@+a(%Kzo^4@K?OIFhJm?;c2Dc><%-2UNu5LpDgFG2Ufn%Go9&LM1Gc zR}q+#J2-a#fFm_SX0X8MXd9qMFJLcYbzyEPvkafmxv7AOK#7TRx_mfx4iv}q)8~5C zk#BWMd)7>bgp7t(>kdf|6CqI&3$Jo2)!CVTxp^K#dxM4#(%PYq?d%)&J~kxW)Q}TT zd}ySc?vepGEuZ1^_r2~b&m zfbi8wZfcNj8*p)jASeFJ+hUSbAOq7J&Ou;9Ye6T2$n+1l%PcCM8d_zrCM0grk>ho5 z;dApN6yD}uC;gs%1}IybuD8;I%-%c+_w%>1?eTf%Csh&i=<5vokUv=+j-9;A-PK1< zsS@AMdZd#BVUycDij-t|WG(Mqk1oS+TIeU-`uaY;`^3lO;DX1*Y%>g&30J^4HjX^K zD>&yM_EJ18O1hkd)EwNFmeclC0QCCWb=!_%yfS+8(KUJ944=*(n-G^Dxr=}H_4bd| zEN}CQ0winQVSb6@pX)RR%;%U3H7rJn_xJpNBROKek*Ound;WX7$sfS_%|V+=;+(-B zQddrUM~Kpwng6t`gr&N{LTb+NYw=Y1Tt$~~P1}xzWSKsCw-@3B{X=r}`Jl1v~l_jMP;a+qI!@ zeD)@u$2^aXjYkO5b|Po9inuPP})W8)H9C_Bsj?1pZ)BlAiLWzdEdzPDvhkPa4gih ze2A)CpSscQq+;T;I)-l@t*XAw`4ucYmmJ~5*Z)n7?~nW1p+>z1U8ioD`3AQ&b4GQP zyGL(jf0WW!JU2OnG#L@4Hm~fDe9$cp5OZS}uL%hxSvmI}U<|k27!$kc^FuZgq#4_{ z&L#Rb#81Lc-c2@x6F?=I4AmBm1qGAJLhTbh6vbo7{vkj&e$yHNmwe6xSA6+dZd2|0 z5eY08N^}xUtTWFRsCy|3qZ-H@1dO99z6fGzny=T(W-И1QTnM!&F z60By3bsKu>HXV~T0ZPn7{i=0YZZY@5F1RfGI%|OB8GXBkzgM=t+*q~AXS}UD@qnmb4}{$!0G8KEQ%z{q_NMymM|m%UbzOR>dnC3cxSEb$T^Mo(Y%Atc6QIiSi8fOg=UC&TYvY(`xof_0Ewu@p4V3C zvwXpDr+Tgz*-olc6(=!q`Hie&2#6jW_yhjB@f@*vrJ~jg%E=(Rp>}n((kx&DBUdEa zAu3*7N5S*Z>k`#mH-dJP&x8>O)DC-}Ubd{y08dVKP(bR~DZrg-^jn;NfD?N>E3%;G z#8TJKLJQ%ypH3TbUWynKFv(OL*qsLHBxJ~P^V0h*2{n0mMx!YLgH-qLkV`(ZbRh_r zpa+(<;E3l)0tor`*vK+so(s)KoA^uPVDNbNLGdqj_4(kq)IUa~iS7t~uU`e`#PQ-9 z#(P;ltRk%MFKux8oAf&LCrp}R!`PzSNCnfge7BtHxgTs=%yW&f*NYFasnXK?CSiLK zUG`>uTp!*@+!(Q$*i`Y$)Ap50MTDPAmNykpZgsy;mUGeqyNtr-BsySch1C-7gD6z` zR~SJK(w^37Sq3RQpCTRm8o(i_}7`76}l{V8|G{?0cla3WR7ujkqT4QH!*Q9(G0x#%;;{p2gn{|Z{! zrLQwX;-$le=1ib`u^O~K2B|$UQD#XQ3&*WOt?6SP$$nHjpU$c9oOEf~+T{E)q-|S! zRmCwuT7JPPb2j47qw2C%CZW5$bTvViutUjy(1TI#ucio36*sYmBjY!=pQ`U1YzElP z`WZX8`%Er^6{@-zl$u?BT0jc1SHpBG80Q*SxIP0x{;d(!597b&7g>H-%CjPX7+}J$ zhYMx29p~?0P#bDKGv_91%}vK~K9d!h83FQNL4XEGFW`XWD&xFW6ufWa*QcHJCY>hA zZBRgMg1K2alB#WUom|*y#%+TzAp{AqCHTKfd>smv`x#Plt^NH(xNOocpjh7r0S0pw z7iA~cskjKl`^O3d8NAHhdME)wnQ&qF=h*3ckrdDK=baE-EnhnLrNoTaOmP-m_};8Y zpWA8Tw6|Hcrd>&^^GfVEdT#(~Z#io72KR3|f#lgKB3D2qejBM5Z{1T;6O51j#{XNV zQc?4&)WF7SBSG;<%^(l>Iir<4Nj|*(F%ya%YkY?XQ<-&juX z5~uV_V~OnlJ`6$D*1&x&xLMR=`F_(HyHCxu;PtHdz7_IMfzD)Nk0W{Pd&S5UlA&pzJn!MVkGHCKohGdlxZw*N^<^ z<#b|FR!#dcu|neLC{pWPk1zQ|!bEi1#gk@phP_(d9NMy$AZLY)wy%beb} zu4M`~gxqhYx`7%K9lY+Wa4m`=U-T!Jnb>cJiE!nAqWvKH;D@{Tq$u|l8Pep*&U4y| zrAozw0qr}ce!mM-AMCfM6{c~II2<~6XSDO;(V^L(0{5Ed(lhQ#$^sZbL)j*``S(

                      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 z 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�k<3A5pTDX?6)3bn{Lb8xJD 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 X0D=Sab*VzE00000NkvXXu0mjf21FoR diff --git a/examples/img/bullet2.png b/examples/img/bullet2.png index 651fd98c21daa3a17cde61cd9aff709d5ab0acb6..44d9f2d51e84ac670597d0573455e13d77492d5f 100644 GIT binary patch delta 3067 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 a00RJ(ik?MW{kZ-B0000 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

                      ?a;JM`)1lFuRy(HN+Y1s}X1n9B3I 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И1QTnM!&F z60By3bsKu>HXV~T0ZPn7{i=0YZZY@5F1RfGI%|OB8GXBkzgM=t+*q~AXS}UD@qnmb4}{$!0G8KEQ%z{q_NMymM|m%UbzOR>dnC3cxSEb$T^Mo(Y%Atc6QIiSi8fOg=UC&TYvY(`xof_0Ewu@p4V3C zvwXpDr+Tgz*-olc6(=!q`Hie&2#6jW_yhjB@f@*vrJ~jg%E=(Rp>}n((kx&DBUdEa zAu3*7N5S*Z>k`#mH-dJP&x8>O)DC-}Ubd{y08dVKP(bR~DZrg-^jn;NfD?N>E3%;G z#8TJKLJQ%ypH3TbUWynKFv(OL*qsLHBxJ~P^V0h*2{n0mMx!YLgH-qLkV`(ZbRh_r zpa+(<;E3l)0tor`*vK+so(s)KoA^uPVDNbNLGdqj_4(kq)IUa~iS7t~uU`e`#PQ-9 z#(P;ltRk%MFKux8oAf&LCrp}R!`PzSNCnfge7BtHxgTs=%yW&f*NYFasnXK?CSiLK zUG`>uTp!*@+!(Q$*i`Y$)Ap50MTDPAmNykpZgsy;mUGeqyNtr-BsySch1C-7gD6z` zR~SJK(w^37Sq3RQpCTRm8o(i_}7`76}l{V8|G{?0cla3WR7ujkqT4QH!*Q9(G0x#%;;{p2gn{|Z{! zrLQwX;-$le=1ib`u^O~K2B|$UQD#XQ3&*WOt?6SP$$nHjpU$c9oOEf~+T{E)q-|S! zRmCwuT7JPPb2j47qw2C%CZW5$bTvViutUjy(1TI#ucio36*sYmBjY!=pQ`U1YzElP z`WZX8`%Er^6{@-zl$u?BT0jc1SHpBG80Q*SxIP0x{;d(!597b&7g>H-%CjPX7+}J$ zhYMx29p~?0P#bDKGv_91%}vK~K9d!h83FQNL4XEGFW`XWD&xFW6ufWa*QcHJCY>hA zZBRgMg1K2alB#WUom|*y#%+TzAp{AqCHTKfd>smv`x#Plt^NH(xNOocpjh7r0S0pw z7iA~cskjKl`^O3d8NAHhdME)wnQ&qF=h*3ckrdDK=baE-EnhnLrNoTaOmP-m_};8Y zpWA8Tw6|Hcrd>&^^GfVEdT#(~Z#io72KR3|f#lgKB3D2qejBM5Z{1T;6O51j#{XNV zQc?4&)WF7SBSG;<%^(l>Iir<4Nj|*(F%ya%YkY?XQ<-&juX z5~uV_V~OnlJ`6$D*1&x&xLMR=`F_(HyHCxu;PtHdz7_IMfzD)Nk0W{Pd&S5UlA&pzJn!MVkGHCKohGdlxZw*N^<^ z<#b|FR!#dcu|neLC{pWPk1zQ|!bEi1#gk@phP_(d9NMy$AZLY)wy%beb} zu4M`~gxqhYx`7%K9lY+Wa4m`=U-T!Jnb>cJiE!nAqWvKH;D@{Tq$u|l8Pep*&U4y| zrAozw0qr}ce!mM-AMCfM6{c~II2<~6XSDO;(V^L(0{5Ed(lhQ#$^sZbL)j*``S(

                      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�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%0D?~pnQi;wN1d5+sZxp{%ZjpSj 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�n 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 literal 138117 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 D=3#l% literal 0 HcmV?d00001 diff --git a/examples/img/sprite-explosion.png b/examples/img/sprite-explosion.png index f9fa1d68e9496e72bd6b082feddae08d5aa176c3..8533509f7b06a7d5926f886a9ef5391e1ca41b87 100644 GIT binary patch literal 332684 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 Bd|m5N26^ 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�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ùqHUG89>G=@_KS0Dh+l#JpIU&y%tisn zyYS{A7gr2%8B!T2vx1qI5y_I#LbIlP@@dAw!Z6DXSz583R)jOnqR=1&^IW6N-xT)v zYX)$o89-SPN(k~25{WKz8kL8h3Xn^(cN4;m&<=6#IPJft2gTGH#m5=Q02*zWR4|@6 z1D3gizj3Z8a>;G-F$MXUYMYAJVL?Kn0 z^5Hn;?qSCL;|%i*Vjs0efS(my9{Q}rhBVdGM+Fy~bzZ7RFk09H?iudwJ&Fi;@J%01~&J=UxoX)hJZKqvj)2i;G2ZYpWAzHu%LM3s>4K4lvt`TZf zms}taTtEZrf}({ex~s6u?(#gP)6T(}5gFr&IP>}DJ@2&^7wd~0JXB@anNFu2uM|2b zq%*yHul3IF^UN~ej~9(+|00A>C-7$O=b=*VcR5+SYZNGb7yjXc1OI31&pYeqFnI?U zfDpENu(b()@fyL+C7V6TthA(oLPT(uTh4MvUNyXNTH+iY3E95CbvGduseo}`(AkMO zZ(9zJDv+Ar|HKv@X>m7Bm^sP)ndOsDb?GiG&2mK`Q@^V`T|&_MI-nSNcDJZnBOyPC zJ}<5fUj44fPp-FOSeHZAwV-wiC&rguzOd=Di%CYMBR+kp%fI|d#ukz$x13e2heoej z4l|2eRX-Qa<`>EDU+v?pCDri6lLN#&=VWHcPjj9Md)SrXq|Q;RfZ8f9k3u#g!Tn{0 z)B#s^Vkj#QVleK*Cw5`9@E5uh_)@@$gWa)j0Bo!Q4w~A7Ch*nu`_A9N2b`byuNgRx zC@oUBzU16u#VAoUP9T+HzNlH$a8f!_!0$1?*md z`pBca-)-Qs2EOHkp~%5>4%HepshPtLY<3*&t(K##pr6CQL%)-&auqZ8c>ktSg zwOb?VfVF=E;O*PpkjQgto*xHnKGr33mIO&zHjD$otd!iH*OVu@SF~thI)&3yUjtOy zhyHg;zXbl~(x-!0#_NM#uhU@lE(|dDQ#G(Y@b9lL|9qVaRqH5e!>3N&1kUwXHjaLx zNMlW1!{JfM8w)tDgl8Q#j@G)L0WY8KWVwMf|J}J#lxe##99z(fom)m62Zz^hNFP<9fisY z_RkFWrVXJpjJwjm^VkqX0=LLKWoa0|UIwXz+cR$v#sOR$c@!5$Yu)dxVbVJ5ht z9_xCJmwvlG=M&(0kBe6)YyA^g9Rn};=U_^|KU@{Qfe>kr23}T-R6rwR4s&>OVz@rF zTsx{+EL*D9y{-4d=-;%4Kv*{V0keg{oRvh{;~i#2!@;Csx-#58t*DKKK%(24p==19 zCJZE1X&_tr?Upyrd`CF99?2UAVdb;M`Ut`o;mQS%cC%N(at=Q_@feV^*4I(zm2b9= z3=AduQz;i78xlB6(K=2G%bTYyXC<7i3}xd8mHdTJZa){^>_HRc@o`Ed1&K9mCW76_ zqO_!IS`3aiPaDu7m&OSqwqP3A2%tao(cXjet=Gei=X$~UB)7InkbRHA#}i3S4D9iJ9k;ni6Qe^?zp650qsKG=1= zve@=DfiSMJo1JmoC2RAPf|_b`%E6%BOjQNU^Hz+k5QqS9UrQEd^nq(84i{ zC9B#{SC)(C`{ZSdb`8t6<@4ubma0RjB^?E2S+lGRd1V>4jUV0@fuG@QtuNsy1)uoG zu=l2S3@3ZA*#)XzR6mb{_Lm}Ha6gP!O95!@?Oi{yryj3+rdsC z{oeDkY~Hu-Z>PYiZ5XA{O#|w}a$16^3ryV-_q$|4NGDLpZVG1QhYK4E)dE%}iw62O z08_)>(o@wL5IzXz;X{q-0~y8e7~JvMUU|EyUKgBF%2ejt_${`(gaOhUYM zjzMq5>xUU-ZCMp9qf~jMnuqWJ4`j6}=nX=meoTYqZsyo@B~mKhoVU!E4VN|(q9pbQ zHk2^XU2I}WO3jdEOW!tyFI$s4R?<#YU3zMODB{>;d?#c`;CC}#?mv8S&24=qISfIAz1QfLo>^hD}+V@nH{BR>{3sl4-;8yHmY z8iQFQV3!77Tl$D{=-|l*YjPWY$9!&~pWwutI1p6p3t-pO%CVNe)cZHiF)vy|2})aV z2D_P}t>yZ>B~=oE;EP+5q$40|siuy31@}vbC@L=WLwZjn&DBJ z=6^P~N_cwiQ{$fW8NhMt>&8n1r>&13HzZscKd)qo>%LH;e;G6a{>uC+M9^5R;m_(+1PFWX3VAa(23r zC$#TL*suI7tc?6#_+|&Lf5oTBM*7r$-oQx0tpiZ4j~I_vo=d289({K+gm4YA+>PK1 z=c)h2b)Mc*ynLi-GlLR>%~aDEhju>ed%y4g?Feu)6(mZaqJT&m_7@G#T85G2#pgCD z8|a4t36j`378&!`jZ?A%l(z5uy8c3IGIB@FG&_P9M0e~T@X9| zmsAfj-jKIRUaB*k?(@Ur`t5nHqPFy7O{^8O zqJ298c)$AZqzWkojd2Ji$Q#SBml6h=G!3{vZ@I8FWHji~8Kp4ytZI2rRQY6}Z`R{M#sfa+b#ny`uiW#_C5<3z;qnOb0D>IK70dlz=e(`R1&2GMhYgSV<2Ew7%uFj7%PZ%NEAkF zbQ0d!tJvJ`ane|BowbZph$IZQq<8#D1k=)o7@xb~o!i}VjgI0x=}*6fB|Y%yL8Wm~NRHsnSxH306Qh9Sas-`l9rXcQ5qxSF&T?Px zn^t}@!dS2?IGK7b@owmy#j^BMCC9Dj2N%F7f{n3X8LR_NZZ0{V=S(YKdDu)9aiB<) zr^P&a2*UTb4d7O)Q36(#j~bK`+*>)G---wV#r|2wqyZBsE}ZMah1f&;Y{ZDVChmu1 z`wI#zLJEXZ#0~KIKB&+~I<|#X=`qFM?tYnf5JA3tAMUUBAUAq&`MfWlvfd=nTM%D_ zrh^K5yz)sP%O%p?Ck>R`;P!N6U87@K7EQLtrZ*p8b3M*hHGx(v zMa>n*TI9agK4e7=TVI7;1WPjB>bP9B#t5HG_DnTWn zs0Dd#*bE$%lZ^X{f&djnobPG~7566%v&vwMVO};|KPu3nW>LqCweVmT=YlnnQQ;Zl zioiDoBI_NXj(rAD9>I+%oC-f&Ul!i*UAGX&eqOFD;AX+%ZbgxdxHWAtWywY_^iXI( zDlCVEeJJPmzyKcShET$yaa65fJAqN?*zJbQD+iq}<3WdwP%tf9uAkMMWi9vSm8T_@ zmgNk#)4p$hNCD?MK9f0H!Aa#o5PAxV+*?fW`YsB%w?-4!%JZKj(y!9pYW)~V*}%;u z?eQEd6yLw!5=l!x5C|tw#uDK;DC|QUz*GsWgO?5}ZcQ3)&s#o!P7_$m<#PkF%Fr0e zc0VPc<*k`z*0juvmRAldE^LJKyON;_Kz9Ml?KhST2hw-G8{t#hzJ!kRD{x8V9iVMJ zcy3j$!7;R7r46hvBalE9`^;$CBD0d!BImV}7A+x^2I>~s8l;o#=f8vjJXjf?7-$3n zr3K3t@=`Ew99w~*aT3>9in`?!7rTC@*R6}X&Op@COG37v*=BHMNIXd3={`IidarjX zJgoUV_xr<~4%4S_hYaCfE2$kirzNV^LQXNt#$uk?uPrHW(!VocnxM>-xfUR+g zixRf_G1||Rz?})mE`0C6LmX8WOyT!HvHlspwt&|fKUaBB_~>`L=RIWv1T}~u)P1N@ zdcz^t-q>R~or9C45~OvMb>pG29#a2vsW$-9I{xxz!SzYQW)iU7b^OEU#z?DJ8Ofll zxfC@JDTEfB-%?!Y1;mY|EET7%qm>ceNE5Um>jqvvf+OP>;7^xul>1azhklK+tl(x2 z-&w(a>CcHy;mYnBQAGKXt6OteB}Af+?GD*LUNM``akWLZmZq`90`4pyJ_0(QNXpjn z@=49Txu;U-#hOcf$us8$$S|NA1;omdlnbnixik*w29ACll32(J$w~)gR?|yk?(OG{ zra63b4tG{?y!2Uv!IzMh(!cL<3inrVErTNmhqaHOgEdX)X2&;@Zq4D183%LA{W9V9 z)Q~N6Ow$llHKDWM6nnXOX#Jn)3SRjsg0PKFz!O_3&zYTyP$c!AiBMRJo8arU;9SKso&>?#s>r^#&dzJYOi-1 zcp&8a*59>ROZn<4S+?Y8-tyhMB`1ppWgWI`h>Rr-BsbnC)#uM_f?Vus4ps(X9DjB# z=h~zu(gBOs^2x1)&3?${_K2*MjCBQjQ#hN#^CJ&$v!%V)3Y8CorST}v-hDleD$lZvYZ#Rs{+?pu<*U(>X*|0nVzI*9WS4~Gc$K<-mu+?xH|68NdkIOW3=Lu zDv^VbsBa+Y0*Zd3c&xA4+U)cAZjbITWtNweH3JnfZC*KBHA$GtKYuO!Qldv)pXj1ZlF0REXSpJX#IC%$?HEw z5qhB$g3$ck=QbIHAzElMW4PFb3+MVIVas4RAW#}v)yzuA_Qg#uJ$a6B5RnBTBiE8m zGD6`zLQF^bNY1UBX1$&_euu5!dCqcQCmD|5(ylj{kFQ6AZZE+Oki9LMPLEgLJmm0f zMOlGuERl13`MCb2-v55_v){9m1hhu5ooLcHpf)}+Nz<4ow^M>Zad8|2f|Esq5enVy zl8(Bp8pkRQ*o+`i^?Ke}!p3?iJPCchcWda&;D_tx$*q|mkLh+`yyeI3&d2`$w-(&q zTXK+v?B^k~8kUQUMQL$pR#x(jzk%iOuQhIdm+NWAdMI&3BxF2 zLs+_b<2#g>B`hPjok6$;MKBI_N6>26Zy{g#sBcI6qUIALUn~ub?|dC)o-He{z(yWO zL1>REy*q*{TOgF*IodC%-@L=iZyoVx|K=8p(6DKO=guDpBcYalrK*#_&W4WwZX0+l_i0oZ@}sZ(h||T2*RM}8dCi7!IH|d| zXnraEZ)cV#dy;$kdn3njB)NWE(iMVK3Bsnp3D~&UfklNm$dS7m`Vn*!lC3W4=}Ug4 zwclZ5XbIxhJI6Tih4IZbdmhG*Mie#d)t*OLYnZLmUSs|2+i?wFUqELIbeFn`DV8nY z{r+|CO$w?;cvLAT_~vQ-OX+`5{A|R0ciHgclZtB95IIAU6)ct|7yBWDosM7HpI4;R zY;8vDbVCN64&y<@{Yk|vD>xUlguAgXd&IFn2Se%S;{u>+JnPv>>!IJJ^t>3Y^chyD z;D+((a%Y>R?Xqw&*Y^wV+&t#a$&%Viqzw4d@h_+QFOt1w%PS`p1LfH21Y~)Ic9ILD zke#lkI|@jg;9#=i$^e>5kc676qnPjC&zPNMJRKWPWtkaI8T)tuSBL9q0qZx0_Ke3y zRIR7Lt(@-~3+F+0pWO88m8Xt8*r4caupr{=ukMqVEkY`!kbL*FdT1TrV*nE+c)SDO zIC;m2++Q|ywd4M>VTEL%1utG1z>_IF6ZxGz9YdY@7duQmd{NT(Xt1L75K)=()OHeh zvcGOX8-KXps(q__OM4@CRC$P?4j^pcw_$F=%J^fHjd0%hTV{$ZmE_lHfx9e;$?U&@yNDK4fB;B1eTFM*jWR0 z?xVd^>tF140M8B}P5jXK@ye$?Q4C?@FTaa@bYvs1Klru7nc&7@&SLL`Z~X8+U;W`e zs|qSBnKgnxKm677|7qjrjX=vAlNv1yT`iG~r42NXxd2*)yc+mE)+F=M$}sZa2eT!o zXC;FN!{Ao>vd43Mcs%jO00B;W<~J>To%Fy#tk=4y9z}U+Se;smW6R#LL*xa2_U)TY zW*LX46;cSkbXajCGkh5Gqmz=MUhkGSEv*XqL@)BSySzbc8!(O{14Th}e!y#YW>Az| z7%Dg)_-E2nej{Qx^$v5e-lVdLFC)!!Kjlyfe;-T)qYj)^y!6!-MIKXyU5?6#zj}F( zlW9R+Gzcg7>S4i$B`=>;L<06_CDWoMXbsN~eTMgwJ9Ey*6_ z9a(efVggSjARFJs?O0#(k7K_!xm>pZx^mqd2|VkeTn8aZ4}Lg-GGP(*xmm@W6_RgV zn{aTrKuZtPw`k$0c=+JwJ-fiK&RWmx#(RHI>m@B6n8U+`x*SBP4BU5?HfS4^gEulhATtJb4b^0_jf9v^7aFdqvmFw2gORy34411 znd58`apNT8t)l|FsyJIU6uAW_`O>dw_}MN2uIvB+AOJ~3 zK~xI0uoNQUAN_-KAgBJ|3c=a+6UHYi_2AmQ@ttwk&vfsvd|k5)ec``x z-WbFR?oK_V)G~yXgKKjT0@v&D(q2Z^7Ifo)J2y``J1tPw@Mrfv_{;y|cI3y1oFmba zwMroLF#$A9pcbKUx-A==HsGm{_P3+dat}H>YIx3QW|^F!=+PPmTj# zJ!|;vIOL_Xn!|ZTH&j^B^0mVTHX1J6t{KD*Gl=-fy_`-g>E?oRlA&ykb_#o1BO~qS zWB+#Q&%xOOF1Ee~I@6GfHS${*4vk+WY!!ql$dK7&#SagctRg{?gv`%srptn1H=Q!L0BR&d%5yzn5q5Rt7h+HAi~mYk#eQdFz2d$2~toc6)|MBJxHc^M=D& z!E3jt9AuU+@8=)N<$tWFcxDt3D&d7?M-R3g40#QSN1=62XMSD2^q>G{HlVNR&Z>5ou?Mu zJE)lD4QXvqrSk`&A4B1waLi{F4U#->uvN=TH|Ok~72L@T`&s*;=zmmL4l=`jZaK&e zgHTZ;iTV-g<^UTe%oY{5myY{K8A51I3%Fex_V!m?KPgEvCt1r^?&lxc88}>* z1h!(ukEab~Ybk2WaM)q<$}WeqilYMdP8*uc;;b(jeEGOyH7z-wS5E-N-KbUkC> zjS{l8lbBd;p0pgy8rs4#SyhB#O66k0PK0S14)#~vniOPO@cow$xpjBW>w6P!92NZO z8&ht~8$N7#&=1(pTHZV@cw(FoM*(VU$o`@suOWSsfvc{DS_a+U-7-S&X zRRQ+YATk3MCY9!>mP|6k-D%CitfFouGZ~VR5TzO!2fTGuGqC~lvf>yxKFIjytM~bn z9~|Q~b30TSomC@*XVY=j`oKqqs0o)Dh?gicr$In)rHYE8(=_jav&Y_XC`c=!_$9&{m34gq%6W-dWDg{UvYS z&-kytbnn-y`xnoJSgrWZo{u#C==aX^*-u^OVn1YYaLT=VM=VXt@yzhW4M8IU<_MnM za@baKA&L0(w&u07ob$twt$`%o>G;{crQ_C}DQ6`l(s5yDK&&9{ce!@laAQ%jG>SJ4 zO0reO>8#{`{MG>47(BY`HJKH8H?45ap*{`pcammlRUN^U|PrH zi6+L<;yAw(@yw<|^+N8}F>zaS{jj2{Th5I_k}%@jMu&+Axqf%b8*{@{C{AV#lWED> zqUJANIp(93|M-P%o_K7G4I*q=v#J`hgHtYc9FxjWR2CI_BBgFD8MH07ZP^`aR45pa z0y?8EMPV=v+@DkguI1uZN*V?X$9)c#1@*k*uZ~*kAmGM+#{c&95B}W0ZvzPM{7|zo zi1^x_jL&VybOOh@LCkhy$!eH8!K@L4S`k$xk#i6#E=QJU`XT?|u?{zu4d(}n&E14? zto)>S6#0>oaq7eVz(KB|DYOTqO?#n-Mc`ODW%f9)^*QzQNMoYV^&0mE4H z#b?jcp+YqUKRU{|omsj`NFWtgyNYWk8Jnp?qxr-jSG@@p6J7JV)c7_4*PK=wi zh*+*kW2{FBp4H6emZM5?eQ7za1O<{;ZqE4czI5j!JN$oZ95PA+dP&F&7l(uz4yQ}r zI$LqPYKcR|g?_|QC5T)@FK{>%pB_Z~{%$~=SgIgEhKd)jM64=Mfo3C;q|PD+F|Kml zJ;@l3M%;H1uiTxopTVuYDQ_M({KcyuodNjbZp``3KIeKN{WPGInpf{HD2fc4nyj|S zK%>HdULe_y9n%7y>nXmlE3i?(u~l5%3fPP#ZK&xg$;H?rWQdLhRc&dAxi+&LR+jtI zhFhm4C)1oi`To&Iru*l%V}{*`oixBnN7Cz{x;<{3t(cxJNNh<_w`2`;l7JS;xT{gM z<=+}vE{{Tvkr0QBVoB*N&zw)$at*yOq|*sm8AB9=ymr)ZcWGEz$?ZwSB5%pcmVf!Z zgOAPt{<8AimgX}%DKBm(e0rQPkV~dgGf^QI`m1Wz7cRD0`4D{1hVCNE~#3@L1D>t!eo~5$N%pgK92HV zytu(-Ss*$wrW>;|g2^gpa~$(rs(5Zw(eFk~3(KqbRwTWIdoxSejX7x*%VovhNx?t= z_QA(e|9|?aF2*_f!-%*Oa^tM@>22EqM#%e|9~ zKmEZ6@A&>kUf>U;hLBrcIj;EgTN!_AL({RA+XWO_b8Xr%TbA_7itA?uk&CEKmQ=ar zU~cGY&16;cuU?z;&%U((8~u_`@}J*{zQ1Vs@nONU8xbxmI5CpUNlt1LQQ;(z`a>;IkOn%y+uBx_lfuoDR=TXb2okt$RoI5UdW zwd9SUa+a)gOiPOh6Rw< zAQay_wS4RLihuTRj`_IDOGhPDt9X54xVtb+3qe;H|Tnxd7Qu3BzR4C7Q0JJ?$|awBNbL9x7#rXZ&Qs7@CFK$N& z9dKzBaV~UhD9d;wz-V}L>iF-!b;|F8{AVwY>Dz|$mi7%`t!WJZzYC11H)^W|%^-)jB;^Uw5o=1NMh6H%9zu2y74%}*v3 zfBf~c-)i0ey(c?-`clmK&4?@)Y$Xa|EC)r!8&mk7zH{=S{{D~D06vmO@<<-ZM=A2r zBX}f_$s+^!NFK=}c_fbv;3Ih?kK~a&GJqe{FI_X0 zy>HIm-^K?of46{ePDo zz@s4Gqm_?r4p2(TAlAfMqJ+o7jD=%cw#*tp1-x`t^7J6&+Pwa`5A0!ye}2aW!dt(CV^H2N|09{o$mU>c(L6$APf|Zu?z}ny|3r}adZOKTAmz77$7&0SB5xLl(qStF@9GE0ZK_K=g2EQ-Ujf& z#qWoLjZ~8)5&c1zbeK|FXxo@cxzdl=Tm5|4dLh7=kM=T*6G1nCD2O1?42B(^d2*Y|!iC)~tJ4L_8qxrACzw@` zRV~JXR00ru{&E*-8dT$Wey9*Q(kP%O1<#9w*G`M~M8fa>{G&Do!$i{w9HA5hfySwj z{-}f0nyhT-$d>GENgN1-bW9sTYy^2_all45WV0KP3d_p}@1PuiY9mBTL1p3fN%aez z&ToQT90V9+iL^jz{|wT8f)J8dt{w1&t9?{eGifYoBr%oaX!hG5{XKqZ%+0+sK6|N0 z&^DZv1|{A4+<%M>;DZDB!zgwb(b85Wl?gG{6FO<<`2C9=;=nO)T67NDDJF%* zI>>6nvT&q5MNu1)Kw&Mc>XvEQ5(kQ5C|CrZs~BL^jkvH8FhH^9gz|^qsUvpIaXCmNBaml zZ(4exphi$3(bmz4)O&t+6iAd5Tp7p2T2R$3gCxL8!MCpediQ4^+e`?Aqpn*5DTuTq zYa5KS)J;RuiMdLS9Y^fv4Jwp~5F+WQjG{IU2ULxrm%xkXBHG4cjHg*hB1PgHo)r3> z=f2eo*y@EetsxC0Q5^8?>(gI@oI_&yCx38-D9gEhRMQQ? z#F_yu7e^uYrtgIid*OUUTU*N7prs6to{e9q`IVL?;P&{r>8qzxS6$gYi+9x8Bd6 zOVG}ug&>Xtx{;(4IO0?j4LXGLjHgn;(|yfJR`b|}l*JDC@JZr0liQVD+oIQK^*X;YIt^_u*MQ4Fd8OA2m&owR-PO^4kWv2$faIL zq6BC~UON`GC2PEK?`X)ZVBCw?8OCTOsal5+0wn}VAW1bmwVm>*a}k$P$;}Tr!gzWd zp_D*7M?aA$De1;WUbx^jBG?1L{1w=~I8qW|3 zg4#mXSez8}v|?6Uo;cT|6DjXtl|T#7Qj$o=6PpoFZpS<|)bym_F#qsV%iXR*;whrz zND>B$L`#wYbP}*LPS}bBuB>=^93utPwZRw&0>SaScuk(#P7z4*+L9`PK_Y_yEd_^} zKg(CQyJ!iW*mJi?Ad-SB!;s4x5l@W+b|cBX)vqtDerg;th$OvKp`;)VG@%lNks^u% z1|3ao9ieU6NCaQGk#jB)KNmvniLIDXB-w}s!$2_ZM4ameoaFC4%a3iPAOu&XIy%o{Zf}S$Gd}aX0`C-Juc|$0KBvgu|rxDKK znu>0u=?DYP(~l%Uz(08+1u~*EaRc}-rqRFL?UeqltgvIA3T}z z)Mm)(!HR3Mn%r9I-I!O7aweH%7-^m#MIRrZkd=lb;n>R^d&`E*c_R@hs9Q_f zSh^ig9wghAP(vgf(mEmmG>#C#-#;Jm<^2z@&=Lqs8VHnwbTfu!Lm(Y0lHe+26tE)| z&+nx40=U1wL}IYOEo)dclB-(s%qRk38FwRAMN3gu%uCDNm3IQyCM8b{G+Uj3MOM-2 zL}+bs)?%e4k^*TR#(I9Ps&)htKD!h1(oy-LUVg0viF9;Rg$)$sh9Clg1Kn_?FW7X3 zohu!dtD3S>q=DdY)$$iNaz1xHr58wV)P=-ZLm5Hc!g1CzD;n-C-g$?ub(}0Jw35Wy z^Yg0i+O8_V;X5wD$o_(itIM*(4|=vYh835fF+;T$rOq>b zt_(Ci?dXMqekkbgri4X{#G;b`Weiu4EaG@XZbU);WhZ$AXU@Tl3hU|0$;!enBtXMXVBnb#(jh2E$31n+Yv}0BJno^`4 zWobCeTb>+-+**9_k~<8LNYU#A z3<8O$D%!?#g10SP-HACrjQG7vJw{4VNkwL$Nn@N+JgXZjC;7xU;NG-gkZLv~LElv@ z7CHAaI4d1SYo5M5q|=EQx|U2RDk10u0xbktULjh87M3KDv`*p>v`q`r;&8MGwtFG_ zix18SJT(dkv?K{6y+mRwgQ*Nrq?oNNPi@9Lcd5$@m%3a|1;+Yxu8AYUZp^b?Nt71| z2h*%UVA<*fRE;4p4f9pQz0BA3&JRO6VL&1r-EPFZGNiGhY7DMvF~$&U(2+tQX&PTL zkddYn2`b~*|9~C9lf#hnJ&h59egM`%TeiqhQ8myF0zPpuW}HM^>?t}DmbIhNl8sT9 zPi#d*MZs1akT)$&V-Z4vR7BPw+lKpDLnjaf+B=#~sCjBLVb(fSsHmzIX$%re94mxY zC;?ezu?TcO%Jm$FFjwT5tp#o_wjd5Th3MHpY%M)7>sdTi)u@QkW&|)DD*&Re& z?rCge$!o`|bhH+PQfz2P*;?|-AX>{#su=e|j#e$7-05(fHB6Tk8{H6$B@hlBDFQ7y znAhB2{`ykiD}#VIlt>({wKxMh5-dx&Jc>vY$-%T`Gl3{nR8@nDBm%{`QAk}{oRh3- z!>Y7&LPa-_w8qj@EiHomzs3O0ik7XuMrwr=f|FJA;TS+q5-y09;7VW9k0iB&VJL9U z(bN_p9j1jVqnM|L0lhThbB~QUniZTDj%&vyX)JhQt4m%rSS<+x#kpZXFOuxW5ZRXF zN)aU?r$x)gxW~@+kZv!bEnBdL3xfzN6&eS|@q@bywt6vvR_IV;8-sHeD^LGX zEVZ+24k8wH%P>|v-qUo1#a1m&Dl#WY(}@1KN7FcBEf}PlP7)ygf9Bq+*|O}q()*U% z{`l+fO1dRDjrQWLAN#9dRQvB45rnYnm~}9P?GrW)(CFrd~i9k>SCnVp$ z|K;tDoo0&brDER4R;9`%G6dS*;jBm4Kx^Thos0~SN;1q67JaNxu3E?Sp<=nTXlKcD z#iFw$A#iPA80vuWj!H>Z7RJMz)EGjDO!IV_uxuQe6yO5hL+3yX!M}g7^rMnb37fBo2dwL7+?G+dSCNUh&O4`2Xq7wumd1IK6wjJJj zmaS#eS*&%WTCkldv~Z*WL6+tt$G`M7 zZ#|<-#Z86|I_nTFR_xPKvo%NGcXkSV5L8*<_@v`x<6@;yrW_6&-bsvdw>HK=6WZ+#E6-By5dR2#z2GUMTj42_jf7u6j0|qg5K~;b17)w32I+ zgbYX1JA%|00fVg(qe(?l7>sjh94S2-PZI<`x*wUp?K0)xKU{E-3%>uT=Hc9OZJ_zT zKl^ekpiD~&6&LskA$Tc3=_2%sl#-h}6??OSt98%&w+2+XX4P8KMAI~u-a#D{4oNEo zScgY)eWzq3Jg)7qUXmmUA=PYe4bTF*-jNYVGMl??QKk09`aryaK@34i(V7hj5U*w6wB7KwVk3>%3CAD`J&;(MzOdEfupfTAqd{nbv?avNa-18h8u@d&ets_ z6HI0a=O=4UmmQ-jWxnot@IpfIeA)56qnx^TJbTeHJeq$wZSTtj5JF&_M%ha1;MvAe zCi+FvGgt&pY7(tkbRLsww1Ov#p1tjY+4h+0m7-aj#OPOSfv(3L;3z%t%mV%v95D;js*&P=& zQlOM1DH1MLmgzWSZ?9r2i7o!xIZihbtDL5WL=acW;%VBBASGx+YZ9vI00f*adotnC z!SdEt&PV4h|9`kfsb-YNK$xeRVU@9LJ!PiZ-6?3iqD(YdA~`B0&O7P=&*v>xNEWqY zJ6DuSqEw)@jw}RPCosbt9|W}%JXv(SH8UIz4G*rqc+h|409fcqIV%Di8!??**S9&` z8IZf4dE*#Y8O}QLTu}`Y-rmW%v6XY@AY)u8l5xVQD3}S$VJaw9V82il!BGI$$C_Ie zEUn8t2$41(z$!`Nm-+Ts2pn;-CNkAOJ~3K~#?5JVrum13!8e zgTnpGFDEm;y#GuK3L|N3U~Qo+GsdHmyoN=gH*g2dl z8&-{HTBS@ryobYN0x7K?_j-ySlmGXCi9n6KX+@z(VL1F4Wj3bzMP0b7#sJ0m8C8G9WJ zl;G*pIVbCm{aHn>JXf`6YowVKnv-=$;{t0uS1Y(|6j^6k*A|f|G8HIwY>kwbRLPfD z1-#Vz2_cX|ylATf0l|B3?69*tVlqm}T#pcfYr8pxmKrX4P?W(Qw*$uJ7awm815G?Qza9l>o9pO~2^A=VDb8Y~WA zT72h035<-h#6m<(;PL9q4}dT4ze*&TmI$fX->%r16y$h}7Nn)Yc!yDnBGug7DtT*5 zb2KS=XDj8}B&FIh{&qj*^a94g(FLwK(S~ zGxZ-`NBTP@KgJ2uLNhB2sn!@J&`OY`1}`MzOi>xQHA%>Xq|ky}GsE3UN+El`cP&AC ziFBS+29OGiW|#-U3t7uBmE1WTa=dH_iDFPnD(RWmmd*wa3iXAwj{nI3`1w&Q0R#bB z#DjKyd&sm*7-W*&p<=pQa{Bm+_jVJ$vNz=J_JG}4iCAw?nTOQFu7uSZZsxEDyfcQY z239T2Rl|Di`P!Ws`E1PbvlYTxl!kfd(cV*U9IXv}bkY)BVA%((b$B00rDW3!3I#tr zZokySA3_W);RV){YsumEfUQ}9=vv0Zlu~$vbCfbLtxCRod(7cp9R1ld7FV~Zkpes% zrcgTA&Y=|yLg4tKgRbSBy^6z~E$*MJSZsQ>D+m%6jiX1f>EV~hEi)x(y1=|~QT8Jw z)(eb)Ctq>^e0l#;z`#WD^3fz`XM2Fqib1C6+n#Z%$c(1ans*NhzJ7O$dbMIAJie>R zq$kzDPyrT-jBV*zYywxCj=t`=y~hn&P5#Rz5VFV_^tpnRZjYm~F}on_gA7LrZlan@6Jj!`N( zC^RRv=Y#F^cP{?kAEp$kVLHt4E)YT>D-$#@$rDm3cyqVlV0TES9hp%m7bsIfo_Kae zk7zCXMPMsSs9yL0I2EW8#ojRI{^<&VU{WREdy?Q8`i?}3m;eK;8qbr>?=S$qZ2f*E z{tY0dpwxnEBTZK~RH0*}9TU+|D8Zw%hCg|uVlYUlZXOZNFOWV!N&Guh@YW0l4lZlB zw}MPE`TcjeDI0inOgO9g@S0d!+LCF(WgAFkbe7pJ4TXen z>}9;aZFqaH;La@N<}~4GoblkY<(+BDY3+XN>hJTf`C%n6D*eNu- zso9!)>@2kw9eAnKoJ6`8_%ZkY;2%*f<@<1 zLNZJgTZLhw10U?=+?pi3xtnt|N_lHb^T|d3rE~+sR3W6`&1+MF_vl1Y7{O}YG0PIRh9VP8Qc3R|cg6;07Mc!r4do%=p?k@bvMDhvzMqb>O1) z6b4dk#1|#xx#ZD>C6lo11J5>|OeqFNa(kGvox;&LdPaDQmv49 zcD4qjWlohzLhncfOiINtHB1Xdk|-vV62GY_3&qd~l(!tD5}zqFFH=ITIQ`lCI;6!Y-e${r${BelAO&Q39#s50K7HOTy>uB?q)oG1^DBi4S+9O zzn9rR`uGV3MsRHi*9#crFIZtZd~JFEdWlIjqcY>{e8J;;&)6Dgm~9D_jvsv9!L|ch z`0FR&fpZT(c?w1RRRYJBbF8u?20j;%K{iO?$iNgxJZwBXU4iuQX%A1YKzHc6Wh%f1=#8N79o|7QPS_ntG7*E$ z<3*3qDl+FLY7BGbQ8=trNF|sJG?^gE3Y2GJBE8>8-46tKh?%=$qJ6oXo1>K@1AlU?P zc)Smsy%-f6-NjRmq2u?u*!gerk9&@OwL z^@_#GlDg|jwC22nw)Ye!aK5pudrzTYUVD;6(RYrk-qUzNWfV#X#wO5(fKh>IskuFp z6p7&NvF4W-_De|sKENYme0kLWx*rC_W* zJKH5UcQX_YGD9^oTwS$zx8~}yCJ8agS{JeXQLb>V10j*#LGS6DVBJ|72Z@f!@2F5@ zGU^f^E-nB1X2$K2=Cgl>2>fRQU|+UKa@eY%RIqXp*tqg=P(bKN8^LroW)n0Yo?G0iV?WcZ z1e7{((JQ98Br`+;A_&%AAXSu|43l_R7mX!Xf>W>jYU{Ym>*;?Mu!8)SaLh0NG06yMqtFxD_lAnT#>F_hjJLXyH|4?WSIcI{wb zK^S^3`Q@c&cargsXFZv7WYQCYXI?w3h<<`LcxoFbM&?#Td5#I}6pG+Msz9M6gg`G6 zbY}SYqJ6Ey4^Z2{UMUzFkMN!fM-eQQ4s4f#58itZ<<~sA>`7!`J8_JIV>$q}ts;hU zRKZ~d_m{8{5nHJ(qIHz1V%~$3nzPnpfajZ@*+5}4h3q;Owdbn!SR{c!VWM8_ybb*C zPdeV7NGcP}Bg)b+5P_}_NGbW{Mfci=|K&ByB&GJ)rloL}f$P{UVVFw(><_<9uq)6MiR(Pge08vTpJp04-KEq`!AFLgn&ESC0c?DpncCI z4P?Pn772g)$6u#*9j!6UriugQxK##jjwSEjo-r6^ta?WoJOl?qP^8FX&_etFC^Yco@@diUcUMv2q9t}sTQO%8n}*9jdB5;Lk7V}XzJ4w&KrSJ zaXc#o#dxIP%>uU581!~4sJ5V2&;Z}wgIhxoHQbqi&KYk{`RcV9htmR0plND?QrIAA zeKZmfGBED~<5c5>r1gToeAKX)O9q)@QYtDP=S5u~kO7{rEe~FUIedBli4qh#2G}Z7 zC;~E5_)c(hR={e3m4>aof;YAe|HV5qW&@8ZHGE|P+Xd{FaAjdB;VQt__mS5Ngy|sB z%*H7R8Mn6ve09HMZ6(d7W77t*M3Ly&_LrHYw+^5M&@t6jCT|ZC9L~U(qKS!|j6ayjAh1*AlwU@y_88-q?b1 z0qYgqv(UG2>fp{U#oYme#xjteT53A0nGG{`izpOFYg}g`s5oXOVQr!A;_RbN6n}dh zzw3uf%lo^AOi83t*gh~B7^HV>Ws--lIVtk1ZZHItw}`$&J4>k~!(6d9NI5-U(R+`_ z^Ug@J6FP!WOolmkZw|>a$;q62!aIl-fAcKj4BLSHKm4Q|9BQO<+5?l*UE+KeWtYNi*R00lU z3TG$mHh~LkS$PRsVVxjLG^dT@qJ>0B)>h!GWt=KR2#hmBCSowmwP0v8QVSlhdol%8 zD!6=&R&bDMibQg~lx!cBxYjb?1hxk$d$W?=t%5ghO!?N^TipECA>&C8nFNu5^`H$D zQ@Cg$tKjJx&Ns2Yt{hytm>{l~AUy13?A0xwTy^vgf-&?`lQ_rP!K!yisi}L9v+(J> z=bfpcG6E$fw)Yf?VVo;Wp*UIEFXRw2%Hrh1Bvm9*5PaZ#-Z82&N}VzuWK0jH%!Y<< z-6#pG8qJ}&O072J*G&pt>^gZ z2H`Cr=xnsp+O86&ql&t$Saxx?-)f2Rfj$Uo7iDk$g+k%!=g7Z1BMlyWaOf)G?Qx1W zijO{L4)MwXP)f=JZSOHs za9C+3S+tkBYNJlB$`TA6?KtQ0qNna+27R`EbuwVnd3LIlb?-UK1;zwi@3?z3rkoDR zs)AcbGm0!ktgq-`kPwyA#CCtx#Xy(^kSz>F#6oKu+vC#1pZzg3bNKO!Zq>33o_ssu z@~q=vAX%XK!K0RCC&77EohR4ut=)`i9wiB9wZ}To&?p9##P)%wYtN@&Kp$E6p539r zx)2?EO3AHJ#@1FDZIG&zH+OU1-Ad3yple~Ip|K!3n0Fvd9OYQ9;Vl!NiIx!t7^e}; z`?IfstNF#p8#cA&(`PHpKylebmzz3hetGUVUU)=+rjI(%&*qkI?j-af(Da_pMx%&< z1bP@$hELDG7%4EyGz8eHqLa_gY{=d)rRyx+re!wG`Nq_7EwOkM3685pOEn0v+(0YA z7!oW@d`t|N4)$}{DIihI{@^V%JwJU`4to>>E|TF22iV`nHCYQfjO@fPRvIgcG&bOKdnXdzf_dR!mv?~YfV zc^g=?kVwh#=LnEbt}KV8U}FQJi3SUQ@$u^QN8w(U|GD&3+Ee6)OY4~>immB@x9{%Y z)0Ex45j#f(Bt7h<5%j3!&1|G!P!N}stc&h-~~K> z#Y#v@$vD?+RhmKvnm%w;CLB&O_6~PYWl1IB?TLi_6#5PhO8Cy7Lj4%dEKCHrO>~VI zC>SL$5RnYoO5hv+Wh9AC&fvp2i~B2{EIaDfLuPn>)p9zwd~)Xa(Q!i}1g#B75t!zh zDg_Z7=ZzzHk3_ING)Sj7UG%IR?2eLOO_00}7Bx@1&9w}M3rhXsrjXd9Ejb^>4h0Fo7adcpD+XEauFdR0@` z7NZrb#*r$)#oF@M4;zdW^e$k1V3upXy=PFtv9W>k+EL;ek5iVbz**~9yTGJS9KWW3 zSW3yP(kKDLTycHB;P$NI?%h4Sg0|_&2<)bTol!~hl`+}3zfQF}gRX~bS?q2)AQ3Q2 zV$wGr?hN4eS73Pto1PDU_MDJw&Ne;EMS~52)!Jd4!-l|*jypOVP*UM+BzoT7k{A)N zUa;ys8cCW<<{Qgg!2Uq<=nGC!toy($mzYAaJx^n#KwS>`mG1%2}xLU&E6F6N%u<-pe z*snkY>{UmaDNOH4%bX9-dw%-7B~@{;P9Tt^8iM2L%CqPKrGaT~7^=uB-n;5ZazzMm zUI(7Nf;-IT1>u$S7^6Tdu5Xq6;qTq%=-L)Hh7zv=XOB+V9b{4Kc6I?zK7@4-x``S{ zqhoL!nfMkY@Z?1+eD(k?8n{Z}Cyz;mq8J#?u4*pl4lN{251-6Cp3N;jL;@gDk}MGf zAvmvn^ip#$6aj(a!^@tviL=YS^XzPoczpKibHYLh_A5=M16nKcBIRFy=M9F_0mJUzyYF!c0V5sxK=a;?WSgFmcQMd^`WfuyQ41?XtbWH5oPb4uVFKqhJYT^_ z4`HmJ&-u$AA2TR4pWIt<-p8t|ZXH@n?p?GTFFhJ)eLyJ~W)dynfBLlLley*5%5!_5 zI9&%8FYKa>`r;E(hm#Z$1j>7cnPzWRpheVVPBVCO2ycua6@v5UOBRnFvsWglk&Fs} z@B-r6bddlXB-qOux!AzH;|KvIIY0RLoV~pPjf2mgY*==VL`x0}$;aoGvnJ44M+gC> zBtJQcN&T}$tc0JeBl&Z@b~Fx*f}`z>$1jMm*D^$%x1Ld=s1m`d^@t>4lch{&1HO7Q zfz3P)$$qkc;TTjKKk%&tc1oCLF9aoR3=phh(vYA0E20=9EJn_C{$fmx*@Ff1Iiy)iuA@Tv)* zchP%HwQ=w-&JGTq&B#!zYfz>(Op1@kcg@c<0Zj57lcU^%@A{>wy`0NVa z8^MoH;b&`@D!80;Q3s}#C#R&7f^nhA`i_aw{QN?rB@B%uH3A_eT@UNVGBPl?60GOc zd1}{k;T76LnMsO4O0V))6OAg#OJaQ4^pHrjgf3`Kn;zZwTu(LIQz+Lxle~u_fvZjY z9(EFt0uIZVMPwTxkY^3dB^>7P#KO<6V32}Q{KFGVHLbWC6d!)Hz&p>u(6DKHe!6tO zG9fS$G9#iFViz@OA_}B$kR|x@ zOR7Q6Zl$1*aM{LteJWrg;b;VXbTvY5BJ9x@aFoMm^N15a2oTN@C>|~Y*RGE^dD?Pz zwqhqyT&y}y*MUq1TL1DH#4c^!{W`Awzdh;r$=r!|#1RL-7|6YCeA13RDV}fso*2U`in477V6^ zVq-n+ro*q7=yrh$f|*L-_7+^f1^@6Ew2IZ9)X+Au0(M<&1)Ya%02dp0) zCOZ>GN4q?GwnS@ZN(F3yaJiXkYM8Ny# zKJ`)#v|Xrwati3l+VSL{kpKKv0q{2ifEGkAwh)8gv&)uids9ZaAhA9BzK>Yn!oyE4 z;pszow1S-srY17H%^aRz!sHzY^Oynu<}oY`oZ5Iww^V3Hg zw28R-Wo?-a68ZqWbF3T5*~YW(9sk$!c+&@kL?}2}^&BrftyPeueD>(-w|?or1_KDl zlq8Xk3~)kI22b16>?lQfm_rZlCky21F&x)$a~MDVK@Xo^!2K1xa~HY>WCj25G*$@< z2X%l^3d1Sqr%)J;t6|Z5K0UYGJ82MF@NC&*B-kLS5&->!VA(nzzxWvTOGS&~ zbmjQPNzeIZPrvFoT{N$C|BVaeS}@HemGUG6+D*e|y9NsbkI7_aUDsn#~aViAVX7qwTSXqztvA|BGWS|wN&94W7{c*;$N*JZ$p9}`Ck_37mli)Cq zijYjl)d<*@fq~o$-k4?7wde1jFYq?7HxQUifev(=fT{(&aS)lQQ1ayAIg5=&TFI($ zw4LLuh4CaODJsyK2ao5}b+o#(LUOit7!@tqY9A-njw-|R-_jmSzfSg_Rhm0n2{Yli zHio8C3{=gvY{==obLx#G_a!s|p4YLO+s@&=0c^botl`rif=J==S;WS+wqZPnhb_!4 zEM&yPHglMi;63wI$KO9*^WbESb3NVFW@LW=03ZNKL_t(KpfgQYW_-GA=`q+2u#VOR zQWf~_f#Lg4dm1Sir71g=;K^0Zs_~qE`udyW?#xnl3&D2k={ieTuW@KFlGP%x^V2yP zjp{5sc93f*1bpi)D0}#;AA=ge#|_jD(iEP1Xk>gXiHLHcUN9J>Ff_DE@Ziys=ZlWc z#sTu(amKypO9r{%Sr;WQ(s_D7%m23(x^l3eD6S0?wg)|%knqd~&;pPyW zbKqfrLjibsHi?t^);HBiE^+@ku$Rd9IH}~F?NyVg0_^XfSuU-8q z5f6W=C3}@26P6swV&(B(G8dBfzB#13-0;cqlGVo2;<;H$xO*L}fX(BGg*{!u&yL~X zh_H_GnrxV}UbYmaqVF^d@3}nL@chY&hgTc6rN%1B$4^=s7xDN+MSYxefmP=bQtfU=)EV^l7mVyOe1~2Y8(O2wOPibaO_IU){f?bn|m-*FVNa$ ztYRi6Vjw?y3U937?(f4!!+YO@tEW*D_Tj@=F)9;Prd0>chMzsEd9!V}_wb4zJgK=_ z)a(`->m2u&QR1+4&@01o-ABuD8+RmVDOk5~FwlJeY0Dp_3A0Ku8|KWd;?vJgU+JY! zGRZI%j57ry?z5dvG(iU@mE+D)&d3{zTtOG0lyuKJl9`F+{`qAjIP$MUm%*K{fxL)8 z|NaS_hKP5X1deO|?t#Uc3-+cJA3k02(OHMIJ>9Ay36^IUQ6^Yb8LQsXSWoAm?L2}& zmBLrI6MlBu@$<9z_a|SOAau@O|KsT^ee_C1hu={uNflIiTtqe1g2s80VA;+UuJ(+k zil%mCqGfe%F^Qm@q_A4S;u&238gvig+8t;v;oNiamp`Wqg1xP{cCrE@ND-@TVqxK#NG)UUs5`w2p;O$w$FJ4Gqe)IzG{mvWHS3dNW zj^kNI3343=nTkwN>Bzn}jbnEN1%iWI^5OA@-O!`@Xd--bpri7kK7%{&!l%cueI4d! z^p}CZ`^Bep*7A-0A(@h-S>Oj(E%%*ayR~sMVCTuZfG8rgILU|7U3@unz>_rUKM`Og7$vwpF-%ivf?=l+NCjrqvpQ|b@vLjlPH7lslB-3{ z?2?f&Ak9cd!%W+CWn!art?vA;B{kYTn+?84oqhs^!grVXKl++VXw{-#UVi zPoVYCH?g(5oj`E~MFopZ{J-4{mLjU+O$y(=8?lp*p7Vo`8fpX|x0<=hxLA7<7uR57 zB$HXre|TJT)q3jQ(YUAys|tlg(Rr8+6P{dkJh+NhTdkM;yI;Io0JuKTltxe*C{jgu zv4dl8oRKA(nF$OF!P~Qf>$fKGy%`)1P*2yfn$f_biMU_VK$b`8!&ws;d4PY$@uu(aas2~T{P?$nyXsU1V~fO)1_nH#vKy14LI+qGDRX4jT2nk z%6?^)e*diD-s!6|zXzpekO)!@RT6`scb@&JArX?v#Bgwsb2m%)qj#pH2MH7@tMi^D zktBtJRUPF_7nhLnYewx$JT+ajwpPQi#5qUSV&X%7G9_hQRiduSb8t|P0m4si1@ zrq+9Fc)TL71_-HG>Vi$sxU!_wiu1XpYdZ2opi9HOvxa3KqRzSx5Uu3sUEI~sSi#OH z@=dSN^ zm#ci5e1jm!Z7u?|bKwMNbnLWk*lkO0Nz_1bs3KXzIaOzV$33qh7wbrE#ez*rl+zm^ zctL`!{qD7%^{oH%ABr@}?8b@U@RbSw@=Fh>S6e3D^M$>HP2<^}C9q#o3=T6ysTxwl zmp>ngzOyN;hKT#gTZ(B(myI~Hl8eDmB!bJzvaT#rNRUx}wdy>J z*3-E_?;`z0L?nb#3%rob%Y^Id)8k${Sxh?{T!e397`>#-6s3ZD$2nj5(gQ+OGnyC< z5=oI8zVONvvpeRdv7}m14}!^Tgq|HmJ@~;cSP9*L)&Y;Vs~>*a+|v5Z|PR4 zmSm~q?nLwEo5yV1202Q2wNS`Zab(xVVb!eo-NGu!3K*^+}hW4tgdx}GG3 z+8N$>b)Vz0;->O^|MZ$XxC4f$>TN+QG4EV~F$+1cQ$zvp;+O zvEuiM3gCm0q7|AvQS6NkBOP6lg?A+0VLZHcF!1uK<*R#|;@&8Z_frS^WB7yr5wZ{9 zu!w}{@d7Tpctsp~@D{T4))Axwr{KJc^pwd6?u@xOt&oYK50NiCuWop7kg#%!MkwAs zZMdo3Eg3e}lX(i660~T92n;T8JWV>JNmStO1(X9*i2**Tgpl?I^${L#NcxCOQn$h$L0SMYcP>n47veFHZ` z#7HLs&No!8U^AMMXo>4R#|L9FDJaSeB@#Au$7@rG436{4aZx)qooCg?K|t@~Z!k%S zS2k@ZQ^AX0!3AcV2%HZ%;<_IfnmmDA#4!7Lp(ur;TDROQ44n&Pvw|1ffx}78y+8OD zi1Qb`tOA#H;LhtJvICZVWJQz)wgaQR9GVIiEei}EZUsSUK6ih{L6MM+5>%Sfw3fPe zyg4@@B*A-DLtOjS5aJ}TwcZ~4(1sbzd~lpC{YjsS8a?KooAAwP$U90foY*A z3uu=;2dTz+N0}yEbTBGXe*2r>;Q7lFmfOH}BbgMQqr)jp7s%2WWjiedb1kUXYZ?pJ zC|+zFdj}Ja<^|pd=6OQrJ$)Z@c*aKJf}nRUs!MgmBs&*lRNKM-`d8q$<_Vp3y#8R9 zR}M?|X9h7?5(8c9@j|hy1#hJAwMoL^YX;uAj$`ekEM9k-kKpM|l))WIDE|9u`bYU{iG{5zPg5 z3&UQpd|{$_bDq#Ah9@T#d&);F^W*2R36TpnQ*iuMc=x0KvH|vGB-Y$iu`}9OSO-ov z1DmaYGU4fEOOb1S`^_W%`nw-O-|)@joXI?+)PWzL^;}jCd+Stlcck#n;{xP)LSAYT z6F4q4C!b>ax0`FUmIR^LnHEfEImf#hVi>5K7<@fW6r;B1&OG7Gks_HG`ZQ(g2Fz*= zPhZlu8kI@pG{Ea`!P6Jf3$N7CCFg1zLAFFf1Bp{Sy=keloNeQ{wh9p}UpSic{db>J zn!uNKG9FG~QH2i=MoY92f**ZnrSrRR{H=pqS(`!;Kxj&X1=)ec(4U1kd2+5}Nv_m|scJf=g zi6AB=D#>21xY&NW_wQXG)spTuY<$yu9`5GkM&PU?xPWg1BNf;k8}1g0o1oApC6%6! zU%Uh0%u~L&m-Fp=V;)sKdp9*NyTEiliQ3nC1AA$-y%GW5xde9tJCo>&@<7Jx z;KLMVB|Io%kG=As0*Q}`f%nckzHpdw{`@5Z%T3dxn*rtFMeW#Z23EDhiAc*SjUZ3J zXicIdZ5vIKS_j{Gy!gZ)|BZu!>3qV`y*VOFDT;z>S;y;F@Z2v9ua%mSglQ_s>G<(W z$8?fW>I9vJI6WwDO#t4zf$NW8Jb~Rb!U9bTdmb)2cw+>!5e$xjASPl6gn0|DHP5I`p%K1il?8#2J3jN*&U}G z?vEKw3$js8A_Z;LlP8knOz=i&(7-+A$O_H24?H=k+0>p_b~C`EGlfL(@>$FH>4z}N z;$}}=q=d9B=ph!tGyy#OqlBqcNTWEpskymcvy)mLJ-tQ&V;M-b=IKqxN$q&Ki9;Z* z1hY&qNn{ivsc4DS^#Lv6&Mf7{r|5(q&J*%1;qJkda+Fg{3KH+I)^Wd(9A}C>Wihvw zOyk0^Tw9i_p4SSA7hom@MV9gG`GVx^f~g#$DP`fKF@lM*LWF=JV0%lCph43F#m6sK zoW5MLQv{x#ttn)nw}QmSgZ^p|ta{J3b9mx4eVPgi9SQO=$|dqPAIwuuKZW|~%^kxy zHyliJUcW!*?*5paNs1dBJJK^3fx}!eF^b#><~gV`#Ysc%9Cb4=G6I>W41=IuoY8Gs zroysc2vpmn4@OX1iY#StftB^>RIzOXbz^yURq^t2MJfaJw!u12H3Xb>Ft~`MglLA* z43P^|7#JDJUKvf2-#!23xUc-jN5li0ss#dr9|%FRR~W{*=HYHmVibi8RGno%PmrS# zcMpsBU%lwTYIxQ_T}Mr@_L1=XS_-c|gyJY3(^o!rK5`Vj0N+sXuf73l!{+fNFP~rY z(FbRI_-w&$DOt9Tzd5(OciHmjv?mqtV5}G?3atckoS>CP1xK(^6_6?wQ|mts{*!_q zx?9p`V6Z(0g<_H^jwd-mYc@Xcr8^_0^MaFg1c^6w%c`?b6T2Hb#O`+2MA7152ETm_ zpWlnW(_(-;flfs!U=y}x&|JA#D9cgGJ1<+_ zIjPYq;IkBzhCxs*Y8Yi4mm*&A2OAy1zj6mIsz}~)`K>spi^_oC`6lN#Th?{Uu5=ve zz`Gw`l9vf>XL+*hcz#p!-c8TgNG3^CsdyI)9jU^k@i)m;lthjaiB|Gc{RaCvXm3dw zm=uyp;wXjVl}SR88dkk0SCUl1S?l=VyyfNAVx^=qhIW9_(32=nW;8Fa+F0nmI)ic& z;i9WL5~TA4oFhHVx&OOgB@aEyw(MY;OUI*U3+_xc{oo05;JWL$>OJE`FxUw5SnKh( zAgC%dLMlof{Sq@H`IN8EBoT~EKsie)Jk!*ZslZVxFo|KFE424G=c!%bybip$?73N0 zYzK#yo~urv`ko{VTx@z?DFYAgB}kR9X)W$_15y$~;Q6)(EqL>_&tY&h&A?FC2y1zM zvEgVW5Z)sa!P5FwCh zm`x1(`#J7<#T)yEoteQ(K_4{db)X5JLJJ;#b%%ZkXyxHs55VlfqZe^e-!I@;!I$?y z=EPmzz+wpx_hCAYAo-&;oY!!21&u6k04Xf7A51iXB)CJ%uxKAd0@AMN0zj9YLo zhrEF28?G0QXBPuMdH*F(ZyLI`r?CznJn1xL6g)4kJC>E_-9~WHc@ha0NoQkFy_8WE zG14Gh)Q%e&$>o3Zv+8NoL3Gh;?T3TQLv#TNEM5HE(1gF5eU*m{sRc;mlnW-La|e5UY(~* zjb~2Fz08w2$M3yjD09P}(JXq{ddNlz+os31fjdRYq77uv&$#;Nl5!`D=AZ4Y)m5tE zY2R<*`33A}aU(E9Q-q{}mvz(&Us{wl{KXG0Sgd=dA~4GoT5JB|(T0o4Vx>l=fcQKQio$B;Lj@$0|kLw7mWF60HOy z7ubERfN)EN8W+(XE6d?%1bG(mQu+viZx zxek<>VUkPAOrx|!YssWc7&^9diJE^;nZ+k2Bu>Z;gEv~J-&aD8Zbe?;27r;B}F8=D#5D{ONvr)dC_u^5kKy>iN1HrLZjiYU&cwWwD9^a zQ6$^Ku#VS&nSq@h`20RRTJhd{S7<442$B#8w&y>*zohd%-m;K9T{~W^Etgdc8XrqR zVgx}3uG_#*&l*0wXn67oFt9K08Rk1F6CWs*C(jLq@VqvH#CTpEYj(;M6Cj9yOALuo zNF?7p(#&rIa`!VqaZvK&>4x#(;)mW%p^|XDg{Ftk?Lg?_Z#2`8OW1hWEdar@4>~Tc z*6imR;VcIXTr6t7`@E&H5nA2$@#Nj!W~FpCYL#_}b#~oZF1C*EJ^f^-|JM%_?(ZjL zN?^Pv%O%djt24o68@Qhff=U=0jgZjFKs`j9^GnAmnS|A*p-eQtbFXAYbk62*9H--D z5q&Vq1l~FZTSI>Xvn;v=$(U?63X(th!8La9cpIuIcK z-Fmj2#|44+f!;=MfoIE}4=z5r5$eBvEu+{?k)5Md0w)!-TynV?u!CiqC{m#iNrW7% zkT@6komWbv9auI4gHe>h^QF5PuN{;WlPK?V0%UHYL&NbTw(GKwMKFMzC?3c_?*o7N z-Wn+dtIi``&$b$P_pImf+7hH>*#_2)$9r%gu2lWux^nrISyH8d8{_wSu zFCQ7C06%z=RFX(V-&;&V6_G8gd5PGogE3r)vPu6TGQG0mbiw`P=A@ zeCH6Zs@PsWyW|`DhRb!2FcRPNT-Pn*M6%pEv=!8yWz)pd&^vfsIbJAGYsYr*_#mQQ z)c@0?@!!3l;e22^miVRPX6tyMBwv_iYzD{iZi!OS*-4cGxdjuMw!4|3O1?2>4ZgNxu5FT<;xK9;hQFU0&WbPEn&5R z*S-n*S%g8J*vJf6H@sqctn8!TUDxsFCjb&zszma=XI zo%a+n(A|=-Z>(ZB5!9Q8NtqLJLn>e>3i8w=gkfhdL8VEoJ}QH?hOga+_uqj>E#0C* zJ4Y@AV+q^3BP$GNUEq2-@O!V6{Pen`cQKp$?FL^m>s8Bc;-QzM%CK%M4`zXh z(d@{;_13X}KWC>=gyjZNC2=A?%i$)#aT6!t**q?Ew}4d*tG|j9(CZ3X1)+xzE-AW( zw|1ku^@poScHJUb41%-TA(fyVA^|vh0>*c-K5mSkJ?>Nd4mwq|Xqt6PkxO*%c}2&? zm(Qc}!McH3NURO`wnHn04W9F@=3q~=UN$&uQMrMg5{|Q2u{s0e0Fw+_6G`7)4Hw^u zhv8@vV-d)pZkeWngK9IBd zjxmylr6e7C$QAddg5@@FQ8|nj$lj9UVPZI~1iRkSc3^Tr1MCihiSp3|M2YBjGj`Do z_a`^dY~jy-6ulvf7`*Mh;c#4VSXN*RA6_?%GmTC)s*g=mb^G155=caJrg}^1?9B20G_iu3P#L)jg{9lseMK zS{o=+MXCid1jOx{|D^l==U3qULXjCsnkOV0rdpt!McBX>?<pvDUI3EXq5y)`TD+ zIHt1{Y>bPX28Sqbxosa+(VpW@9w)*w#Q&vG@akJoU&DXCj4sKSEnIl86Zr5dQX~>! z)5S?~?%10poG%^Mjpu`<*$8Z~>t_dm}-qJc}+$ zyIxkF-p4$MR7*ywB2@xSVAKC<-~SirFB3&Ic&v3C<%&!OdgmF96P6pxrVA{3hmnHG zt#`vT&tghkZg_1c<7(@XAu!4n+GuhgA|N*yxOX2`ExgM8{+1h|Z;6mg*PI5)AMU;OaXl_kHf8FQV*7NzfVV+46BgsYv z;bGA_t{clZRTM&yihz)UrXI*M$-y*ZQ3uwwrBo`~#~^vO^;~Zqq14$6vlf7?@4rQBy&6?EUFU`%gb&9a7q&yH-GTo z!QvdAwQ#kFAm|_<0q8#$z|EsG?AbaNzMFN_OWxSX5xZB!O_P`0AC+v{z}pvHWT)F$ zcv5w%PgIgs`>R>~9F-cQ1PFl`9F2>e)WPnE)c~0cs4QVVNm&evsrIZp%WRUP1*9QF zcYB>esnFI(4q&Mx-t)V^59b%r^<}vQ?S4*t=CX?}(ALEQxM*%kvK}+hB)uaOnv;!Z z)x(purSk$8Ak~81k%_#&5Lh(!S6=*=mE-Bk^2XdSgs9BBzn7zpCQUTGgj{MCy<=h& z&U^N!86tr8f&FnpnPtq=IBiXGg;Jm1gyjr4U z}yg83i(4t)Har5@onD^9O! zhV>HTJ>DuZXJMYQ{b0ezAKg&3flS0qY#by;v+XYVqw+~aCkC6?D76j|q^Z{u!sgUH#kqXBo(HzbaCi4-KRI(i$qg-;hlQ9JN zZ@%>nXs=lg5}9~TuN$g$L*fUz&A_bCr1KdcKiTl&#S$dw;91m;kq)FrV_l$g0viOa z7bpRR2H`!*Ig$X^efabR@c!6fJ*26?0nU1imIxzw_09|xq6zB62qq;sG#A@}T*W}3 zb>HEKz)q@3qa86!WxNi*x*u)OfAR>Ptzq5A)_0c1arn&|LLCdmqK!bfmhh~OiE%j67^q%WqLHzyd#PI%2&&k?yFxD6Zvm~kr%2CQ# zOA;9at@kD=9h!C1NAEM?S+@gr2)wnUF{tPtbCgC8K$%3!%MTyHNe`=SjKeHce9yu| z=HSpkJ;caF5n@L2(8Jh3FVRKG&M4z~EjeHJTz8OZ$xaqGg7E?GJo7}c=zcu`{3{d9 z(a4aehWV^OiMZJEM6okTS@a-+B@u!ml?3m=1wMa}u$L!z;?PUaO4KNYZIAojBTi2` zlyzuf5cp^i+qoE)w5#Jmpn7mEliZ*N&_c3l90#M6L@G9Y3<|Hk#7Mz32}mDqaU(cu z{I9+FKU!J-#r>SuW|{~42}UW>LX#`Sq%d>?7(5O^StwM9GR4D@VKg4$Rixqw0lTSS zTlZYP|BN4AMyDD)G<8RTW4-MeButdUzG$(-fb-ErLhNMh8mQ_(ZX~G;EQcui_fn#W z{LEk-SceLM%RYQ21@PNP8E@{T+#AUVFQpQMVlqltHl9pHIokeABSWCjl1XOBwP8bw zFfh*qzVW>Yre){`0)n6<2U8snfJ87c zlEy>rh-)msU;`g625$QBsfyn(6u?wUK3McTT?~ADGcYX-Z%rh}lZ26$3{EjJnrR_$ zNS3$Ryg>?{Ue~B#`Mn2*azBlX7U5&jI?iIy&Dj>t9h|nXX(IYK3}D-M>aTmy8rlxF zAttD0GImg@jxN!!%^}yk{HS4?4ZM5pNu*#W3rG*jI)Z~zE0+DID*(&xzigV*mE~|` zcw@&PwBnV$0u=(e6pV9?OcaBMt0rnqPZte$#-6Xv1UvgVeJ4<%XL&i0jgsj4k!5f; zP@k_c&c%)2`-lZ?J2=@!h``&3m1V?3BE4-xI{{K*(R}}T&3J4$Sy?oYX%C$xah9Q`Gl$j%R4Pzsjmm1Ub92$YjBxRW}Dh$g_ zPvZlZn}HAlP3H(6te1SSaeP+Kt22%8G3?%lm^Cvk63WDY(gg1)bd*d+N|3@i!NLBR zK+nQCictb}$5abUYVd<2(E%gjys=D$B})~}VA<4;OnFk}nJ0oGlg!4FqfAA&cO}S^ zm?>;SU{zbBmOQ@t)l=?%4w)A67f;Q*xeLS_Muj z!QnioQX1~=!&`S?lJV}d7QS~0|NaSl(8Lt9Neg#xyPjnYt1f!r^&-XviV%xMr(=Rx zf9u9q=-3gh9eZPmaGo6#iJrm*Xgi9b=P(I;y!rM0&;IJ9Ve8<{y^I{sruEdl#ShWN zWf-8BhNrD$?G>p`V3soMPSFn!V1JGn<#dnF`Og1y4nMwvzNIKSc%b0G+=Bf&awO9b zC&K*@-~UQRuDD5~i_9d2uis^Scg&ZMa*EL5x`Ddw=~_o`1FeO|hRpP1nG_%rMXn6PrX_8ALfz9e0dGBt3fw6iJG+uMrZI%QX$ASHsj}XASJ6_km$hHI=qw&&LXkkV<48c9<{DXmEf(t zlu*?aSl*axl!}mvlY-~h4GaUafZF%b@~az|W|BiJhsyEQJTd^hsZOzYhtFz&M2x!TE)xLj=HK@EgIfg zIGVc0Sx;vLgO^km&RYMOEPz)g2}k4D{nR$lhZw@MH_h=#mOgNP)6oRUY@#qC+P%%k z3C|V-D9>z~kb6skfKoPts&D&P@EO3FIQ?zogqg8|dnW$~7G+xkI%g6{uO0jf`jTM|PYfLJcj|}-N zXAmIJECvWoOVTv#6oSLCVI*u!1GEko_ee)M;cgCTL2`GG zC+mS~V>!Lv@@!$TJ~|TxVhH?2^Vt=^cdmPmMux*_K?oAzEvW$~1j{P0XdQLeGx)%C zVleX(dQ08GwzY`9#cx_BLbErLd@i^2Au!DYPi`#hY5*%}+JLl?wq%uwTGrch9}!?; zFi6zBITtI>$;xtFcbqOQgALdq*vmD0ndJI2TKhkH-oF`mYcFGD1WB-L27y*^v+Y@T z5dvrj%V?5fkqB$?t!LSE+-y3UYCsFcE3=f`dz^`U;j3!E3BU@BRMvmase*uD2MVYVtz#q zCpKEdzq{n=$%^%=V$n%{aMI%kOEY+cP&grZ`!g&6?_Kv40`|u_trzrzr}?qUE{_Xk$oH zL+t~L%CfF{lnewR={iR#6GRX^dUC_bRYj=-4<=dkrkcsf3dkj4a8*Ti$ADzDJL7WeS=WL8^?O&J$-DiNet>UZ_Wb+D8@_q3z)QhV zk#JB*-WV&=JjHoO)mZSJ{mihe9g|VYpa1lVyleU5fr-4gwvR>ZK@!yueLVe;G8VXP zxW&5G(Iq+`M^aaC@Ky=I;4cQ=zv%h6O?dk-Sc^2Ni1VZZPZ+7ric^*Rcy80wgIPe6;4|WySTn?~1k?^uW;my~ zr~{8LI=q#X%3*_#P;jf!t%xYivkqFzk1q$7t)+FA)0>v>z3jQZHN1RfnsB-uek1Sy z)60%G_Y)3A39T?(I7#mVnUJKZW>QF!#85YmO%r&s8dwbuV+4f|gwC;J1YsC3ndWAI zlLm@$&c~~s(`6UWzF{B;$8?-Ui7v+ozk)S#$yX1g(SeUTW`Kx z-jdofZaT?M)x{3Uj^U_;&A`)igu6Q?EF7ZV@F#!%lz;ikgapsF{mm{07Xqh^qg?a^ zp(xWheLToDkFPr>siQ&h!w*;7n`??3OlHWDG3wC+cT{Zo1`!M5H0SI^jqe9$N}{!Z zM)R_PBOIc#a4zAuj^U>@HZQml9nY-f(c1pKj~M8L_>I2*v&)8ImQj`tij>w`?xYHp z8En<@eBHxw!K2eH(?qaa3Pd6)m0{TjT-R_=YFLHHixdzt&CRCfW$)36BpV!wN!YfY zTuQDQ*!#j9nuh16g2$Iz&Nr5mWyd?$zX;g~ezWgi4e;aZp4nKD=TM_bWngAJP2KXH zYsHF%Rwoa3qg`8RH0Z616sqg%N9S%2`2Dz)o|Tg7L8+VJ)fHe?v8UdK~Z^4 zA~N>og7>aF-tH`I*WznOqT!FurPW z1G9a@e3p>xWlWo%L`B2Pg->|Avi#NKHO=6dXi!S9lNStw;HvSQx1LLpLZ>PAr#z|y z7p-C?a~@w0{9o@}|H7Z|H`V?9{3dYS@!nO>+b=3+Wy=5Y{c}FImyiK3ww9BvW10(= zwI|I5(!s&LVY;73lLHwTW#C5zHyv!9;3sDd-Qdtfd-+V}G+yy?8?eFhVI!H`pVDOs zXBB*O*>SP;{7-*=&VLQhdzUSHWlG}%r>g#i>NA-Mp0@-(G5r?F{x%16x$%k zRN$%$Y^nis%dxCl#ek;m12?^6Z$83}B&}0C-8lMoV7qPkU%q?u&tCvfD#xS6z`-a% zcvv@<_pUldndbQJh;db8iB1epR+eF`xqR8;f?zr?C`BD7!Gi~pz|!&kk1L*Uda~M) zZavaV$P%7g#d&R6v{356$5mjEDT`XNT2wqbt65&JIY=dc{$$NZtNx$mga7Ef;c%4D z_XCdDux>U3-*{z2QW)qQj}{%9%Hp*^D9L6B+?^@(#xiU{mjb-uy0tu6beva#bz|vz z!9>8NH{3YQ_ZODI7`z?$>B{pr7lypZaZd34$Co4letHr!jZZfJJn#SGvxd8+py~#s z_jFQ{qUgM0dN@K^&(oU*>jhb&P>DuuJ7(6=chQs~nVU%xToPv4KGx<5T{`277T>n4yT zn$a|4wQg8U6syj0w&}nHUT!QNK^qhs>oKXJ?mZg}Lz1(U z2~XCJwbE2FrxJ$md~nTwEzie`j{Eb1x`**JXYetzCCd|(5>WLNiK0QW5(zJwsNgwU zcigNUtImTl{J-tJX{@E$b)NU^>6^}Y=UZdX6WJu26iF$RXxf@+S(FSVFp|iC5x@w7 zI0h0VPT(Ig5XT5$8%mHkf^6DOEXbtg2%=z0kp)>66_J!EHPua#-E8*2?yj!!&i9Pp zw5R+yZ4MSiQBrr+?dJCY7bsNKtvcsBd%t(>z1DhHFV z$fS(?pPxQ>O<(`FEP!8m!;^-$?Dkkz7M&R4+K|FWMp|?IxaEmM$Bn6Ds3T<+sJ!4D zo?)Yy2gONgA;9mQ7_^KuR`ASG!>xJ4TqoSBG`Flli8Q_nI=QUQ3uX$__h$Pn3^d#=s{ zFD~K9gO=1N_GgwW(-tQM*IUg^tGRCBbYan2bF&dFf}j` zzh(rVy;bw#Nz3^}GHD~@agV{M;DzIcWoc=HKpBOtBefN*sg+sj^QVF9mE^Z?R9s&Q z>LzmYq@i@4e2{a}L|!fxUpi@+H3E@IZpPG8g4E>`KcZ=LsD>{A%cS}s`IS;OQ7qAD5UczJI^FN;jemGR5N7Yb?z4;PW+ zS;_g0lu~GRwvv^5N0Cu29E)YeAk~a|DO>9~w<<}YEvKiJJ#T2W;xo@p_=VrS!H3>+ zk^lFz*YC&&{ho6@QmwFUL!Kq{Qp4uXh+!((t35B?oMLQEss*i$+_#mHW(nUl5?nc{ zFsVlN6P$qcLeWnQ%Xvkj!3e{kr^)gj^VZVD$mzrphP{>LlUDq_k34lp7y5Ty9I~t$ zo_aOg`hg2M<2*(0Zt}5Df0@VLdXB}>jDhxi?ncdzJUn8Q3EsA5`2D?_-BCiFO8((* z9`Zl`hnG=xLtnwN5e#~oex9;lt$NUBr6Va)mL?@Jilb@EPyNbsoOK?#XM=KD^2$lY zpS?RHQ-X_q&CQu-eJ$Z5Pp+c&zyAF@jANjeDkh7-a4jQPI9vpx_asJ<^;70ZFc~l2 znDNVxzrq`pAH2KZ-(30nYnuQ51DmuKP%EeIX|oz#@Xw#v=fC`(^Q*$?QIBhfEg%2X zmtU9H^~Vyx_g@||(1O-kdYPdz8KKBAX~KN6WICCXhK5Dsc=q_K8Oa}cpwHX;u#l2u zkRh~WS=L;<)aSkoHdDp0mr*+pTGKfA()F4>FW9qiGPC@`Z(YBmAK-h>_vvdv)jAsI zdGhG%kDc%Tj=TBP6IZ_B_kRDybd>-wn$gfuHV&%-51${fBLnxWXREqGA6Uy0UfeG! z+rU$cmDk)q`?afgd;!1jLZ7;II3M`JA2MkBJ#V|nXP^4UpVJTDQ_u*>I9JrRr8h8K z9;93vX*LVPQE3^Ea+Z~2YT?>R!;*xb{^T{@4E(_5oL{?I@xgn0Olr%yQNns5czApD z11{?&2n2^sps78_jlk=KfAOiSyczl7hYHROG$IPt`UyfC%GxpafuH`Jqucg6{@4-V zpOpXT-U6XkMZ{AV$wf<=2rjSZ+&us(SC^k_y_Bg}Ja^Kf@|2UMWpCzKRF+@){J|Uc z1ApJSjI~T+rDkLT-aFR%iu<=yhN)&X+g_tn!}EtNF3qT1h2OpTrdagfce%%} zUtRJe_vM_Fp0{5}xU`-kg`jC8QY)5La;sSh|4|+IrN?i*={En5+?C@bJg}28=qp0I zGBTA)Q98jC#m_yy&zqUQ^yrZ7{%W>!S$c#Nv>t>>_~*ZO`}VoKUH{R?UMl(d7fP-i zHE18`MTwg^+}skPAQYM?B9pq|=AuLrsFxK^DP(YOXz>I1?OQd!{BlWEdsKvba)odL z86>?zQ6d3PX+4b(2-o6cgb?_^!)tGfMgQwpmwe!2L3ELa*A01+Af&)*MUe_}EjXxK z6k)Y6eRxxD{$F~f;@rq!61f^&C1In`EIgbv0V&}xJhuI&7Qi%tmX)*2T2InO!ACwn z;kfa)^>y5~2=L$ML-+J}a45O3lQ9^s$`Pltmc%5qNR}$$v}!r2R<>Nf_{5vHxLWOdHSCDHMT^{`Q+M3i{Fedfb05MJJlJ_GlnTNfiW32U8~y zN-$fteBzmtH>C*tXYXD^ML`=NRf0A|YN43co?rdqoAW(?Er0&OA(;{6TG57x6_Q{4 z!tKp)-!TFFcl_nI4|#Amp>djxbYbcNj!pnOIyyQ!0qp4L=;#Enqobpv z6Tps+j*dgcAsiTN5{9s zYi@?{$aabm5K={~JW>g?5?tEtQH+O}x~3{ES_WM0`1vpX!PyS?ZlnkV3MgBLBJ#@o zoBM=4{DH6L001BWNkl|u}S~xdK*c>VLXP(V|!Y7_R?N(k##~I)?OM+aVSXvip1Jo|k z+CZiy>xsfT&td7=>T9G?)J;G{MPH|+8hV*QM2~fW7y}uRH3Qozv~NIL^biH-dkPmK zm&XZ42~HM~eyYe*^$ox0`|s~{tFfcwjT!+0+_RP-3BYO&>_g}K#1Oc=o}zmx)w0DH zjdPAdO3K>OIEMkZM6`Jt9Otar2E80iGXda--;{ib4y{ZRV6gGBAS5 zI&6si>QjHX<@vidlRq$ZuA`&lwdXax156F{l7xuBIyhRi3{y=snnmTvl_bjq>rt_^ z0Ve{J)={<*>mgH+89@+&HbSB$<_+do{ph)ZvRTb_{rs(xcV8N?Yy*No(1x{KGZyfx z-{5=ScOk>MfRd_PnH?Rs0R{X|uhl=c-8aMtN(xe~$b>+@TJKzzEt|cBVWJo&k~IT0 zkq}_iGgup0PXt>%!+I_lB$7-9T!2R}jkqw%cEnr?-5 zbe#1g@V)C9Ax4Tsk!V3`6j~_?B}k=XYmhMPC-jYCXQ0^{8k)tD-C@S_x0amDJ*Q1z z*;x8{##&}+986{{(j>$r;YtNd52CF(KCLNTV5>;@%=P7&dY}((7Z@!mQjN5ZB7;mT zM*Wnvo}w=yQIS+joOQI7YDS4fOYji}xxsl$VI&&IdZtLV;PTk8RS5b@ zFn5t$z(d=8Z15}=p6RUOq!dI1T7!2H?^=4%N=QFBs$r!3Po>18&_K7MYU7**`=_$voZK#@>y7VLnA`k-9NDR<4 z7QCaEDx!ea!J_eOWs+NE;J%UJVo$T%)9jc2jy}})zh#paiOvi`1O_TH$|Xf2Q9?0H zHHWj71j*J=(^rw>#^M@_bzovd3qfn4_PqLQN87YWB3Y`aTF;`594!5rUSNNe_yK=F z{5m>r7k}a`urvlABgBYTf~~RP;E;D`pDvJOcn+CJAoF7QWxnXCs$I>}) z9?^Q%dx30_Qd9wyV`OViV;~ojqJ^rA-~u_0S}DrL6A)+ugIq$4ymd1{3y?AJxuZK9 z5&hr;1I}-*GhOb}xPXzK7@&-fRA{u094uNAB1>zTmI5IpypkRN;N8iBxOq3J0}#1f-N163>e@aLx8&g?k5 z5nzmwJTqhjj0hB=B^8mow^N!nvMgJoQg|2G2rc&xG)8Iqspg%#Idu?3TQi&05FE!- z$J-wsvz-{Mk0e?%cXAc&CiEux-=lX8xo;!k zp0yO28YYvH#svtTzKmQN8_x9&P2(615;7qW-Z4xCsfsMU=i#kBMk^8@XavmKNJNl{ zz|VcTdyBK*R`=uYTIbytGA@r3-hQD+k*!)Biv)Vc(+J5{ zKLeq_dft96=W?NWwsQ>Xc%AuEWq}{sOj*kmc`7MV!?>4{Yp6@lpr5ckh6e`%kD#%Z zwZ7ru^^A+_DKG6U(82P`)Kg@d9*S2^YR->y4o??6vDebiBqJeN2E}tF984CZN+Ash z7btz?xDHIJh>~DqOz;+VIQc2we#%l?8j}tN} zNP?raEqjYd2m&2F3k!LYax!oD;z3K_z|cgFtm34J%)H|hUoQE+2l{yDXxg)XeEhLT zM{H)2C_orkOC^Pr6iGxxIG#He4WvTgM8rC1JzP0yNE7(w7rVQ_jx!bk0&Mp+5E8m>&v<{jVp7YSHVi~98TT|Bx#Iq}JP7TK+DE={Ye5wPGEF$C0%@X3rnP5o1wIOb03%^*a|0nQN78^QVQoW2NDlO@+)zR6am(9w~lf&{_gGEz1cr6nURnA8=EW#DN4 zkSt32y&l(2<~XIucZZxTBg;j@qH;LvnKgk$9dIF%DZ$*{{=T`?NH7u!V+abKdG#XHY~8!4AIHPs?=ekjn&us3T- zLqO^jSwkx#y90?%5(Zi^x3HUyn9P@)Ok1oE%$gJGpo!ixJt!&5K&v!P!FZsVlyepi zG=l67wa)!lE*+JR*pDnX2_5bT4D%{dIljSM38l)Cc(9i zWgTdijzxV!6$IXUq=pZ^=K^JEshWsvmOOs#?7Cln@PQuET3pmvAMpq-6^fovNIaDj z^a@FEf@K}q?g=U>5zZ29WML!owxkY`DB=D05Bb!WXWfqNcuo0J*=>9!g7e zZqTXbWNA5Bv<%aTHJWT=oqo@7ya-ff;Beu1e!qq&*d6t#8_A@B{e@+^^psZc+;QZE zTNWzGo51k`j!H+}K%Q%c*{Vxur%>PnWg7@>plkxR@wAmA z!FRj0CM0VD4HgedIfywC{?>#<7nh=>gsC>lTA=eo1Jtj+N zY(V#NMuq0s1+0i8xVWI%4p|5HT?Tk;-}&btixwXXFl0N{L|Qc+$@j41wq)eG#B(*(f9% zTHtHP%mt2{h_#MOn>m+u)<}C9N3)vUK|(!qJiS+O)M#Egt+;EPFexQ@7TIe8GYdWn ztWZpY;QDbxrUfEE9iVoB2>7tF(Vw@sR|$vN%JRSVkwF4N1X9&D<;Y7nVhBQPR*Gr zbjfKII6OIFzlsDcK?!z7Dd+o&oy~$143)D?<;odlVil8F%d&Q?^%G9#mf$0G<3Ng4 zNwcXJndH6;>nI~gw8Do#kts$+!a*r;Qm*EN1Tg)Swe3w_nY1LMf~4PL zSO~WIf-DhS+#Im6G32C@Jb7(SX>#(Y$&CRevCbo6q+C=)?-=BYej*`wTm&yQw^Ijp z2ZmuT*8TsnKvHg19>8m0(N`)%q*zSTrCL^q7Sq#QrXC94YSr0 zWhCzxoR*%Mb&PtNL7|XZqJ>~QN+|{@b&Mcd2DxM~O3|sN39{R*9e4f?P%BAdB$*K; z0!Eo8$s^8shQpLzDw)?2gCNNy7w&$5tA{6?)PZRka3W%|l<~kIgGUL8(GlYvby*Pv z+-y8as#)6@5IhW2Bsfo=Ms&191S&?H4b0nB9Uwvw5VQfx=JrH@Yq_GANKy?>u{!Q% z1|`6@&<04iE^;!Rb5aG4ogj&xNfpU*Nnb}af~sy&z`R}6HI_n9>lCRpCJ4rTLv0?3a$sLNm-Yi{{QJ3$D%_ca0RS7mPM{*qbgWZDe6R{Y24t3sEpk z1dR(s?=VKQY&>m{ltOV>3lgO%@|1|+H=aH2c5BC-zXO~%o?A0Zq7(tRF=@HESJTvi zzHM1I5-B5l7EW8mGcR8uNi>a%^anW??z@kqP~1E%u|kqcPfrRik5WWdaM((gA|>nh zu~9JY8AOt>F-#Z_hWMx{lwg=BMwuej@>LuDh=^fjLU5Z9LU6KhoX#6!=~!3LQ;`q? zr`F@7q?#P!;%eGmZUp_U3-res+8BHt=oQeNF}kYXOzPB z`VcK)kVtx3AVNed$wsC)DjiCkodGJ=t@@*nPmgF@hiyGt3RE$`tBgU7$%iIOl zGJ(;GB6xPPz~v&KWWx2M5|bK6N-ztOYm*uwCHLNUAJ-42?A@BOzi6=5Q8$)CMdmI- zBDpndkU^j%EF8GF${v3$_wHnzE?-~Es2{#3$2pHN2~vSDl46w6OEozW7Xzt+L8b}7 zU4>vh6HJ}pXl^M|NLZP?&VoP~$;R$^o_pyQvt`S)vea$F)|SSul19P^ZcZ(Y4WuH{ zGxAI%LO%4!2qhzVZpafw6cSG)k%FF)q={mjX~u{?KC^Y>hJNMa##Zo$}Vr6fXn=9YMmZiPRC^dG8u!G#s8Tx!5R+9ZPP>RSaPV=Rg_gS`{L`Ecmeoqlvk8dNENF88r<~eQx zid8b8vXR;aQls!;B?hmz_yN2yalC8O&;p7`Vico(j_{J3$4f>kLR@8v$GKv+uQ;az zp>gQwS<4kM!ZN~<7aUAmp1*PWYM*c*1d9?9>mx?MGDJS};*vy57HuF^f;7=g&Oov7 z^G6Mjoln`=9P%%J_kb4;DqcBhcs|pbZe6;KD%ClYy+CFmD`96FFHrCNqZ(fobKbT2E#Khf_<_I1bCet(jxm2Ifs* z(uCDOB_+{HqNJd`4R?V*aCeV;Hd0eqXIXMOK_glfFZKJ-lGT} z-&p!-#Mh4gS0?F64r@;{jMiF8_$3X2OAOCX2!O~-lqV+3h6)6N# zz`XTX9}z+j2ulBWhC6@`eL zA0`}^fz!Ds$x%*M$+d0StD86jct* z1tQN`mM!OZH%LW`Z6hi~X6>rP=loD(w8A;hzk2qMc7NH(G?lxv$&k07&k0fR@n^qU zxctIN%QJ^9kKe5Lp1XVO3={IyV2mJ7CBuy|J#G2!O9fSFaW3#w=L6XBI`b`8(DoBS zo`4`Q8YZ+JCN?lMtHNJxG%`tOgvVqWK|m=DI?~#}{W~d@fOgrk+e@jn=2mG*`UTf( zxNH9eO~Om1Wl`10Bqd25F>3^Pd#f`M60tGiLHI#aw76luz7aHL8QTT3y>n3s_(hg%EFw2sUK^oK(Zms1Xo z9WNi3C=prfC)`+i7LDh$^31=5VCY<-kY}JTvh%z9xm(* zSUSOE*-+$~vbCg2(AvnC_FDSmb@rwWr%rHVf5EYr%-YD#X2G&?>@O|Hvz7oXT||e# zqV!xIYIciN$A?mq9ZA8k5L$W?f5Ygg-ARTXT*aS#(Cbi>6D`}NvkZTS~&r#`dF%TlFLhlf`vH0fq zd_5(&Rh@0ul>g#=n|#;B0@Lg9_y6tnuluu4U#ocM`94eU`I#>)y4~6Fy7Mg;Lbp-y zAHQ|LN1s}t5EunQNd$tnbqLpD2yEw)USknI4?VgL zz~BDShZrhBWj#Oft5^QO-~Sume~t?qDeD8%?aYqb!nZUP?mxLN!y?cI#=VqO3$D)` zT1jFQ+%=YX>lha)D8WXrM`a|-#_&>cd9E-bpoAczNHT@+wT$}9cSbS?2srWh)90&i3v>rA0sxvFbR~k zM;b#L0$PSuS46NF>!_zS^JUBB^@QCttTMHI$*54s;8`>cFC8|_rVaC|rd5u`tRXl@ zAz@Q`*4vtq3~UvVQDzWQAn))U`6sR{`3v{u^iqLsBT-69@3ArBoka?d34yw@^b$oX z1Xb&pEL-XzQPT5|pFHJnylzDayb*+wU&Yw z{OcDhvgFR&BmL_aD?E^9f@$MPH6&u?3Fw@sY#r7I%EqyG(jvmj5^LcifA3SPBj8W` z_6g0aEo@4HEK;Np6k3rhK_S7ko}QMh4GkZCX8DF(Xg~9%1qR1Y{@!V~>pIR1-*Op@ z(DLgXd4K-t)iLJB-!UQ$V1(y%;mN(=LLrzf9NqqHQ0008P zNklS?QS6j{ogd@dNl@ zpPZtN#D~=!l=Xf}aFLS+Zq`sr^=-8{|Jq|i{)cz>yItDxy74V#f&VBz^o}(ok%QBQ z^J9&(u$DwJ0q4)%72@HVj7lk|+H37(@?@^?Pj8G?3nyw?1Q{Q$p~=l5%#+pjT3VFLtUW0ZiDBsQ>- z!K9TqZK$I{ib#;~zx?_kzjv$Q{deVf4@;|PLZobA*21ODjMFyo^3<_t0!m2!$#3nQ z*@t;;x^kZR@~i!?&z)GF+-rEpZpw#0w<_%YYaiI*v#)$(A^haknupgD=GL)R7@`oo zJoUUZ^E}h_#ddVO=DeoEBwjvhSl<})o6k+SFf7O8|fA*#)y!uymaO zc64-nn;n5WIyySOZ6m;rj*gB_06RK5I_?1fKXS6{rtM67-ch!TnqLme; z5aICPKtMncWu(PbK|sL%E5Sfup#DowUP~YUC1^Jp1qtYLFicDuc$N>ay#HFTPSV=0 zARtWS{}-TMr9vM6H6biT6huHk8WQ0@jUhpx?=xh?Mby1EuJj@ObXS*w$wX1++N_fZ z$yr$@Wtq7{G6bW>CqvHiU~D5u+;R5VB?=w%b#a?;mz_1bt0J5B`oHK$(sz1x{gqfL zoHuH10dDz@f#pg*NszBwzB502kVY0$aaq6EEJmg>aoJ4&-ws?;EI0^k>|$(BLed|! zOMh2GS5`C%9GAg+c8tisAX*Mi8GXP#?d>_%@|1d43V`3h({jm_$69DcuNz(6r>(7o z+43DL2%i*Kpa!x}XQ!~EBl6kpHPn}XkH*C z2C3fC3wh0Rj|3($%4nI~G1;qoGCxq@I4w1(>$V5_if{uQ>f@vDPFSe7@zZwHk1Zq} ztDA^rS3A%7)AT)p7_c_#v-vvA&*@Y*|6}Cpx}C))_TSBSk+su;^U#TW01pY@TJSL!{2_$;Cx>kS5sdQaF92o+7KAYIedp^pVmqFas7QikBYL>hz zZk^});tHxqi}Y%}i z6Ys|!-M4RO8nMbsdvEwAsrAL9-uKmDt{#3i(42B?!uXVjn8MN=l&|yw$XcDNzb!1| z%`-MW0eX&$OG3{DZDzcaK2rnrH8@z{Xaw?P^8M`Y7Rof$#)*Zqwh}SlDinYC&xL^H z0vKqZA1FCJ_d|mVq}0E?eHRj!tlG0OhlNL4nfPU7J8JVAho`D{-Qv2{3mo9B??~6)pP_YQc+-k4 z0*CL~UfaMSID-xi)z}c=hKcaF?ajXPe`yg5?dtC(l@A4f^Cq_Jcex#hqvee2qkVT~ z4qhJUo^l`WJ%RSn-;rjoeX4ofO$h8t0-$?*uk+vyJ@PaL3bj99T^H1~AzN+b1nV(@ zvt}Vkm#S9#MZr$01VuY8VtvvkjzTBSf}=%4&|tuk3 zHJD~54jP#`!62CCy*#-o`4KzRICa~eV#H%^;g)+r*8b!KU=!ht0RM3ZwP?>*#{$c{ zpb-!eLqokBW^#Ct=_V(GCU)`;K{dWtI);Dl?N`rJxf~zv)mP+ugsyk>Muc`Ke#|(( zox2BT@w2o02-^%n$bDao^RA%;dU|qJqrM2MS3@=}?J`G=-gfxGR&$-%o)#&3_8->j zm#6Kvoix=pF|u7|*}Z33hKKnZk}SI+R;d8PBXkDE(U>S2BC8`a)U6b}on0dMtyC9n zj*#@4wGgrCOTne|>A~jo8Hbmu^=9v?^-rui7Cn)MgMx;Q)ksUme}`YWmR3V=f{8wR zspi&qU^f)53lJY`w~da?s}Q|1sX+SGSC7rs_Bv^QhH) z`A!WCdi@|P^qXOp82*Cq>}@vqhj_$h=<}-^_S1vI zs?$N#sUO~4T(v#UtqgrcYmo=xITVK(ze_nxb7#gu)Tr9EYV_&S8eX4YpZ+RSz~>6d z&Xy?fxJUZ~&S&=jG>1$&-vR<;t%QFF z`(F_Ix^X`$Q7y0W?PN?3)5~}843{nuH7QdSMq+BlwtQw!(oGrBbRS|>gm6b&16C+N z<`U^seyBB$pV%Qu8tz3IhStScBwZAkBW=nWqkug zLK(MP?KrT`5ZiAjf^oBNUo29D9R4pK-!B*(Xs*^Aq`{KcG(g6WQ=+~n)%R+wkqKC> zI_F1zv)rX5DbtCqSoX+@Ol)K~` zvAzu%;b64q%{>Q@5UZ)nW?Dnz$!a~yorl9l8GP%~}5}X+l zgcKTD)ac@LcV}GhX@!IEg6MSFx3=Q&e20V3st0YRq^pK}3WeP}LXi6^AZ6Y@=`R^A3!`uFkQt-Zz6P z2amh*bnJI2$0p$Sf?&{NAr==GcLJ)>VCauS;A@!>KJa^l*k{0k^wBz!BBO}7fc_el z61R&_P3fsjI5JA7Ur)c0w~uu#Nr$4ZpkvO?xhADh+YT!M5=wYYzz*ojpb?>k{DBV& z`gs=K1GEx3xp;sU8t;>k&|t9dw|G1%lnZmE=R&Dm_QT;wrSV;xHY0EPVO7hb+YDz6((@jjY?W(`k%3@NzbcTj@sWwmO0X+8jYQ@jQaA z8LqdGJmd@Q`P!UcTUQS+Uuul-1Fla9`T7(;U+wj)ISZ=*3U33V^;RCZSZ<G?(Y1iTZM>fmQnkN3gHVcGZ#9hb7x>eyd*IWy&0B*O&= zmNT)oF=jK+?cfINq_11&Btw|9$gd3H*>N-+IxyA}wH=Rm+Hcbg(FSau5YG}=-g#8|7u41w&8>Pg_>)VBO9rElCWeBOlNZ!^f*>Fwgb3Ib=@4K3I%`c= zah4tG8}9tkM9b)nu9gXC-HljvVT*mScOME3^=&_5wS-=7fgl7~q{*>Got4}@a6dEx z)BE@6)xBP7zBjY!01h4sPM~GXIEgj$dvgT#Iv;MAN>r7BSu5PMnR0I5x4P}}WYMz! zfYR#={=DksXQJfS&XDQM#!+flc`6Eq_jnYdv1}v#a?;tX2RT4hf9%?s&Za{{`k3#r z5{FL^mu#2<+o+U+1T9yFOiKoaz>0_z?T&ku%~7>b{x{R&ePFU-MmYRicf3|Z4zD{D zyAjLc(6>gd+ug{zExG|t0yblgyjA~hT~`+}0^&7fKtS)}Rd`i5lb_w|Bcxwm5ZN18 zX&jpPdsP&Uqi=BB0lI3kQbdRJn1l+Gx@i%;z@G!@U5zsaKfmC}vs#-#XV0=oGr2gO zMmjxO?UEGP7>+RR;Uwl54frAJgs_SULk2z6I<%GWm@_zL(6kF#)nJ?KCk@q-IzkDb z2^vxPyQq5<(0_yk7-YTT((Af&ob~`HMvX&H{+|=w zFuA&aP+e3C6x>>-c6th|T_o#fFs(z;?tv~~!!W!o54N{wAcWV~1yxNcVj+4t@WAxn zZ<2rm)&yoNfaos+RJu1>m=a>Y6orOb#8w`Q)9xhu^!aUMpZbS(;$ z0Zjc0PhwX(B3GRI!*1O_nI}Oaq0(0P*2<+ru3gzLfg6fB91Z61sM?I=ic9{KD8Q( zv-5OkHn|}>=v74?=G;lP1C(Zkd=iq}DkYI2Bv)2~q$5T_Be#6Z6K0r*YZ2fHmlccgQ%!GMOIlq!t&DOaCd7iTITJ*Vkv9UjWIst#PY*C!Wm=7xq}hwGmy zzQLXnCxU?L$X8GW7zh_qTBind)T96#6JrOI4sKmJDqopOJwqPziRZFgZ445>#*zP+ zEtt|hVA7xR))6VSr{R};E3i+umqMMfZh`K|Jb=|ZxLi5!Kz@t`{0m#>Wr)o zNzt19$8@)e0D-snyOD+lQ$?*V*vrjsU)PFsI^UD5fag)mIPvJ=UO|Rr+ z=kA^LJ7B4NFFHtOvf0YY$Z|ZFY5(fZ4kQvWFWiG`Bd7@4syfIg?Ty6_dt#le&Ii`f z`88tpdbagcokCZ3P-PYPBf{f~+2hM+;*p<|vnCT1U*6HG#q|gm(Tt5f6k#r*(PFy2 z@Zm9Rdv;M(+KjnIk2DB`1FKHKZy88XSyEIhY6`O7>`4b?6s%ie;;g+RyfD!;(5Ojg zROC67IbfuHPY$QI5C~g(90X@KyKHf~lI1)%yR?dN8M z@H{jhxdd<%g^p-^If^U1Y8d|O_y9puC+A2$dND`FxfY)G?;R%WB^l;GI4`NdW_$tL zwluEkUL4 zE05r3K0Fa!O|Fw%cz|trUZ1^OIzZeKCZ3U+v&$l{F&vb0^GZrpKS`f=h%oM zjkB%q^u22*rj`y18;S128^CT->E-OB0t2Fp3In363Ip5{^;M`bb@M!vf1>fqS#_xN zF6^S-tr5w`?TZU!%!MUGN_4eIDlw~6oiQ2|-Y}rtAwpjec<&p)}4#NLB5u#$PTAv*1XEc z$2t(!hsatryuGZrxP#_rI@nJ88j7WYGrD41kUWaY7IX}4{h6S_eIxo9Eghf+yIzBm z{sXeJHzG{9_Wbj4az&XHxGlp?Kg1S*MCx?s=v1gpQzkVaCIJo)$V|Qfbn`rEP(9~V zyNf)&>o?N`k$g(`P{hfak9C$j($-c_pYhb|B6XrEeCZ(8iuJMAx($6~2Wr|l*UXPs z1W;i=&NBV-{xk7P2u3l7ACat>to_3{Nt$2c)sXWiV>n&A%7DHw3XKc0fm2z5fXRuB zSnEuIXxzO#{hwR~nP>LID~4K@R`8LJY~^1TOdjfmgsFSXWK>zAb49R$1V>6=P?8d@ z!auEAWqTVzdvvzpU$v}u`Y*^=P_J9=d}r6hePG>)p>DRedc}-MPm=dgab4N#@-E;8 zx>Tmn6^=HLzApq2V!lwp3&X)|ly%LV)Tu&Ls(q)ER>^hAFc5-tA<_tc&|O)($8iEF zF%Kw8d|ma!9joCndV&2)PZItGL)D3YbUx5ai@~EC+gc&UXO8*C{}rh}w6di6wah4L zoRFuddBK;a^_s|ZAZySWG~+xf@o%b8&^=(qoNXtdbBE;G1BG%&$#BzIna+1wJ1SU{J zepmdPIzi-YG!M|~e?~?KO&L`Jfo5K<^6rPae-CnGE^TO;J*B5C5iU=HZ^nb%-=`U# zFqD7i9oF8!`w8q@2O6}Nr3@Irh1@yj<6*^r3Xgi@Op-jZ zD=FERdRS~SR+LQd9^eHVK+DQR%wb0yMJ^@sVQ--lh^5?AfyJPw zH@M8ZTB`-yYAUk1=vWhdZFhNuVGvtmyQ;*aectuo6t5?aTRpZnx40Ijj^y(7Wph-C zSb1U8pN#3THC(Y44zw+g1%wX2HoC&~J)~9jo7h!884HhgLgtn3nl8;e6oel`=l#sgDAwCrf@}5oa70BbL4bvT9D+o9a#$Ty6Z~RCiK?Ib zljPSb9!((aUPPpOCf3ucA?NQ9RSIOMfZ4T;LHq6=5vxGPhRg6u9^hqeaLP)Q)~do> zq$j&RD?_06aqSimST&SC{*bLqCgJ#vU)&GUA3b%amTb(VIT5v3)>p`Cjn=THYz-kN@PcJ2K=0H_L; zaCCsf{PEQ+fM|)FP}U41aF<#y6r+`OlS>fb%_{t8XA}J@XAHPN=CoFKT&Yk;KH^!s zRch6AKvG$ozDJ{n+X{c+_iU)%lA@|XOqFXJsigF!2OE;g7>Y)!mBHF}phGt}%VoaW z_yyQ$CrjICrc2xCCcz5Cb|jmaHQ0-B+<6zB(M=A~<`$bT|6W9zc@O?Hu#p3%G`VD=6&V}8n)JTC~w&Q{quxV zHDp_5DvoPhJ0PA5pIhQubO25;cBJgds&gs}L)`-kMml^7Puu?{*cD@m8Kkem5!63(-1j9esQc4T7{ze+Z<1&D zzjrwGfaQUii5XDpddl^|&US>>y!EvrJ3E_J!rEUqg73T6>Rjg&wk;k^hdSmuj|?ve zx6pj8_RubsW_ss(y6a8O7J^E`a1da4gDMR{O6{`ZVLI{+c$1R+@^+JKoa^D9jIR$| z8IyW>?GP*WYY<38f?#+ZtR&qD^4EKR>-!K{R(G3`pK>mN%NNfBzQ#X0sP*oXShc2G z9IFD3tlo(S;36R!jB8q`vJCRh)R#qiV*t7B%2Q! zek2B^vy?TJb%jd#*?oMedqBC7fjNq17M4VHFbC2>HVFj3S93JyJ)>(fMQx$)JcSEf zO%uPu(e8*hFP=W_a=ADl1RMR|K%alzO&%zdUc~~p!7w~Rr&o1abbn%>fg~J%ZV8yB zFY3MtGZjB!Ny&<~?65EWIpi;<0Rh)931)}5WWRO+Ro+fE@fo+UjY9vz7bk9ML})R> z`AQ1QwmQtxscTk}+7wNC9lg8~ zki-|*o*EIhbXBWggnl+o0NTi?2rcDV2I{`r9gpvz4c{l2c*`lIHq&hAv(l@RDvmAul z|4%`xHS5u)DedBlmp`m9&d?-T^7*u%7$q`QZ}odlPMMOh~uoissVx^hD8z;Dhm=a5+ytWtw)YX>WBtoBxmez} zH%F2|F_vq=we#`>CHQ2vb-6Hc4emF)1nR-r7WDN`vaj*?WRQ+Ma_w7BMpw4CMwMZN zO2$Y6*#tVfnX3ZAx;n1Nt|}(Qr&CQn3~sYYvydW~lDX`Dk~$A>W|1(p1?}84uE&{p z_jU%Mpht#Jv&TuH@UW1l6$W!^*My@&eMTGPeB(1{s-0ZD_(qZ$Gmln9Qcg}e`ff9s zq@Tkm!@RbC!=0NZhre4vI?+X@5-u0Eaut11)RdFuz^DY7Q$4zgt+~!+@;^chk&yN` z2&d07wSua0?5iQ)+U4{sUwx4vg?m@Tg!*9~{vjf)CU`F|pAD9&BgcN>$WxNyw**$% zy{NRn)VdgHcz4Q>?Q7{kOWab|q(x^zy8Q(!uKA9R-ejS+h;d11(_p zvD5nl7ryC7SISz)rN22p4fD(Q`J4O%JKI;~0iK$fU%-f_G{<<1bpZ}_24D+N+#{eu z)~B9QNi_wNL>ATsi|R7R+Rj+@K3LJrEC{}pWnH$N79@wO=IRJm1`lH<4>7@cp9|f} z%D!K65Lr`00M~}asWZ3=$^>88{S}NbeN&AwFdZgjuZwT`XJYb*J!*e$M7}oV>!FWbRHea0#VrO%X)V zh))M+)r$b)blmTyZ*k*2cp?gOYlAD+w~5aM{N_2i>KdjEh=}ov*d1TY+I!o}`_3E4 z&5;tXnbqPM;*~WdyJ%U-1R%2WSc=m|7>SB&sQutKC9wiUUersl zs#CF6RzTA}Y?}SUDL-~QQ|ok&cy~dZ9!>zlr^3V;&ogjlt&%HFq15zWr}&fETP1DF z^Q}15)alRlx&3#K9gkQbSpyE8??8r;D`9Yv^s2D6tUdV~W;b$2{WH0qdZsWROG}8a zZzRW$d_c}Q(BY}zr+p+Pz%>;4i&_oiYh#Ax!>BP#hnS*-&fSD=R8z!ZdM-)q5q;b) zP-;PcVALo?%1pu+KE%B?gdSq?zg4cx?faW%+n;{@Y~&gX+WepNO0^=|;69lxUEKwG z^35vPtb+-Rmh)J4mFh-%K@27Yw1WF~S?i>2oaEUHOmN1bs`>>3WJSY#|Bi_pVrJo& z6k$9E3uD8jovjdHx^k)s_%IFbS9P%wFbn)S8sbN} z9^%iqfiawP4PvI^({hMa4>W$z__EJh`c4ZcJ7%`IN(CAm+q`bZf5+_F!KDFLvMB=n zZ|&9}2ZxipI%9^pkkw<6+B9L>W)lnO(b&~}{($2iIx10|5y0m1wK72(`H-4-MLA_f31j4j;b%xTX6=fbhy5ms_X;fi_ z`Orq8AX6sc9m!in+E#ekSxfq?!<+i67sW`&ADzSquS-R6LvH1lh>spDr>jLPo&ePJ z_Rpn}CrRUx`OndUZeU?Tlq4hjS5=GmyVmdTQU=7ib@Hq%uqgWG-<|Jn!+#Ykl}HA7 zb8;f&#v)pL2)N6KZV<0@ee`J{Gq2rTf&#uc;z)-uiDca^W~Mwo-}Fj9S{BV;fZVFJ z-A%Om4Xm4n>4f`CGKkKo67OrK$0kzH9kjGbAb(QwI&G=)ocYNiAZQqwpd%BBLHY3T z>l>DAu5k+-zkyumfRo}-B8Y#$!bSe0%cCPlEHhZuY@x;|6R z*^Mk`?fG%}51G~_W^^EFe(+2qyK2nJy|(Rg3r#pU{O#hWACk!?EJej0_Klf9?+JVV z<=|!z$CibDERH47iAF1;2F7y}vm=1Ozdm(hUHwd-I=eKwLhNXN!k&9T%pBgK>Z~V6a-aG_=kzqD;&gRp zT;O=ScR)QoU4!0|_7TmNT?YhvPsBv>Jx&JLxi?=q4nFPgJ#Wrfia$ zC?#1@C8pxtD3} zy(`zhHGvnJuoF;xxWtFvts^8^DN#_`#U#TfV*4&6*2WjUu1La#3+nRjTh6|6s)_8>eWJmw|)Ej=2+I|mxjV!xnz^qAsRG( zyqE*4-y~m%`}ya=d&4?okaMKMuK8x5!7y8Sx37l5Ect%z*PjV zTBuD8E`C|my0rP}R0P*ib`>@SFv$a(*cK0OhMqonbUH%`BoX^Bm_H8GGaMLy8+0mH zzWuvLdp``NY|Ou{P0iWKA^WTNgi;2@GjB~gqpn&&j(c54wY5aXiLcLcop-29JUUDr ztVXSL_+;7Yg^k5JClM3Jif7q)6QgA(>z zR-jt7sev496F)kNska~rZa`|9H|+1@M4gyeM$-;VELTNLHVtK{pFGW}Pr6E&-n_KX zJh}W~0tDIMX{Knaay15<*974n(87vIW(ZtA@TBos;@e-uZgl;NE}qdRP0*)Zy}k|! zi@EqkOP9&)6YrG)F&*09jX5ybGCBDIP+)Y0iN%>OPAF=%ve|LZnkbOYieMdKLIN-- zTCToT*h@hv)QX{0p}|!XjVE^c*CyYNX3JiQzMSuWo>7|KbpUM+P^`zx{QdtzZVyRN z?Wz?ibU2Sw_}Vb$y6|Mhr=KAYmXAprA!!9YT+zDK-J3oM0Q8}HuPb4`{H+`#uLpVR zx$jmEnaAqR4Bdeua39kfc29}V5_e6@uJfgslMJSloWC;CIZ0e|iTZiAv9#Eyv>Fq1 zC7TqB6WJ8|Pm7ha(nNsC}{BXqhRrUoiz4r|EYa>QdRbNly=%gU`6t^O(A+{WgQpl{3&YyWSleR z=N~fHjNfN0oqR;wJb<08j~lpE1C#0E?nyY0Y+=(V( zPDa5%dfs*hTKJjOJ~J`Ei1rm1!Xi*mk@#c& z+(AI}gKHUpt%#AK{KtP|X8(2WOl453pg_RDMuT*Czmqf-z&s%$1~b{Iw4UkKFr`ig zOd^)Z_Z~+aR2%EA`1!k%pWU1vqL|3LJuSO8tD)zxj3paEUQv`rX$RLHh2oo3)cG8o zD|tY|0?*=63m3gjPVAB(c2XHz2%=JcK^K|d`E?`o{vj0uPG@8V0;vBza6!5}UFzZb zFo}GuYb%`-`{tA|;|fp)vV_a-SSw-u6gsxP#fPR9aV0XLeET^f3aqJ%5?}r;m~o#W z2b_$e?C+=s_k^HDtx;s!wx_SlS4Y)5&HeW*vD4>Y{qOZCZ_8|_z-<^1hpmBQq{oKb zr{$fU8OqKL1y^ZUK#M(f*&A9m%9vbpTm5WFI@La4rP)x3LZ$*nINd zFLq|DCDmGdU(0l?onXxIpe|;-r)N=LaDn+9WzQwl5|JL2+Ot{{%cmhQsi!xvW$MJ0 zb)dUz%fU{3bmQ-FqU0^7crT5LDwYjRiAb;Y6x0C4uqcy9A*!IaW#0s55L{gCy}o&| zf|_D*c6P2!*}xjC$;5`)ku;%I8{EedM1-2w6PcB-8aZmy*mSvv3~0$aaI4Ta<_SwOy_?564RpFg*B zTioPr@XCDWvYESowIn1YYOhC7te10KLlfnabUf@O{czYL5e~cKW>Ag)JL6JmWmO#Y z7pO;dthdizL=9-PG#nlM37DEMavQK(KqGD!-^vvI`>8cWf@fz>fVJ6ENUPKC-JE~l z1z2y_I9lLk;PI!gT`s*nL`5-ZQLjPN1~Oa4HG3$YqDcE5 z6AV0YWW}B})QLc-AmF+AIHPbjE)Ui#n+NX!$CdL2tef_MWdpk%KNsmnByq^I$TAtQ zrxvX{C!lgUhq`Ujyy=KU@W2=;)e?Rty2kJ%Y<3{@3L&wpOM~oh+~C_+*Ba?ftc!P5 z%e>lYmv?>J-l>*rD6rk$jr$1$m!idS9KBuY@x+R=ZMjG#H7C@v2V zrpHlh@L{32(yVxI_G1+zt!kjF(__A=LMp+A)@Gaa@^9B({(viiN2=l0NRBIsAiJYEe_Ae0LiQ<=5SgX80P8f z8_WC8NyCNW-u%F0vP3Jkr5#3p`_EQv2C-};U5xxNHEsX1PDmF5JuqB6dRRIY&VcK~ ztrSc&-psZOFmvqX6B*{ust|QFugaV~sg%qzr-N^TQp^3S=$QImpthEM)OGeq&p^YR zvX_B-RF3&vm=|3)L_U@=#Gy&$cW;;ce43t=NKBkU&0EV9ubX`;vpC0C``b)C;C~Hi zLYmR(hNy&;h>d{*hD0m~<^$#1-mGnl*~upWA{fBluNL~agRF)N|-3m*5a*_0}Oz=q~#oOu- zgjYY?%0gXq$Y7_F8#_Bj9t?cr)#AknROlz8rK%spe`rj{Kz|P^ux;S|fDjW&sV+es z3ELXew#lt=!HZd@I$sCl%2-P3gExtlG;nK}zsGkyy*)KG6Uw18O96r1IX}88e{7mBf_DO;t3UfFmd|^4t3E#W209AltOTWQ-q@4{(IhQ? z50B}-RL?oRApZDfn1Sy6SX_&n7`q!pzp1B)+rudep&yj!Vk`=yFL==f(9|bV#N1I# z?q>7uu%wL>47lxP=BiknW;AflZ+#CJX!xbv7N}C;Xlq_DT8370 z`LM1tN=e!O_qTb!hpk-bQOo*Hax%B2vvzfplXYiAE%O}(eNhe!X@5Qx#GTj8%}zmO zC8pc+b0`&7NxY_syP+uQQ`}vSe!HZj7YXa69(y$SBnyfs^ zj4J5<2}RMuC*e6Yoj`bc0#3uRd=5rW4rS9PsT}C;M6>12tV-f{SD*8fN$=#^u&Czb z>EqVinFrUHTZhQf1>8KDCOn->|4RJin&!FUl&?y{-7*dIqz%viq?=Y|=%ypm5!gW3<*K?e2IHq1?h*dFP2bVJszkYKU?`QaAZB2ql zA1f@c4JHcDMruQ2rmRFM-UE+%Wf-Qci71N50pl>R`V8N&kOdEnE0-PbuVK7(O^LsW>M(SpV1g3Mzyvd&+Rnod@1%z|WFvEa@Cg}K{mwVQ zD6-2#r(lkEO`&>Qk3INY5@qI)sKkUgC&5PPcSt2sp+ATX*SzBCUG9ECo(l%d?tt<7 zcJ*^|;(B(w?jgg0AfPL#t&M0_$4$&kf;T_gg-^af$iP7C_acSF!>hp@wvzqzmLlC= z(<1x3n?t^>fm>$946CZIg?;&Sx;>8f=+CormSw`|Q$&IxkcvL}$-qV^n4$}_o2zEs z+uS?@hR?-zR{~n-3x(=)#3HJ+6EZh@BX!otjB*he9vsh1u6|D!3YXWQHE|P?pRsHF z-u*VyQ1@^XMqHNL@JW8%w?_T$e==`Ve5`6u?nCcN??dB7$Xllyt@y?m#AO>hFJ`=M zm;h1Q%dsl>QY3=U$%{sGH(JJ0NB-FCpbP(%vyuT_xuPDvR#OX;R6~oD$}s+nnO5$- za9(Khmux*$FY8)PdfYb5>5j!Cvv0l0vR!q&Yy}HH>f<&AtRp*c@o2o*E@L&Sf<_o+ z$eiE!Fp!RxvO*dT#f}D%`tnqAe#Bg+D1F&_!B{MK+t%`w*U!x{>!gla^~<5k717@- zPi~;p0Z4$5K9RKwXS;7&sVm5bviPB>W_DWsFFA6aScA}%p{Grx`QNXwgzlI*vCNq- zSkggFm}?`H4fEjooq@hmtgskHEUM7~y@^(qVu|!$WjF(|-iBHR@$UkU8dq{>lUtfe zrAMoGs`rm)jg zfYLyXdp~N~gz)x<9`kM|gHj^pdqA!3Nf;03RARj$*QQbf_qIYO_xkT{pLBqedp27O z?{>Ie=GlM-oZdO4k!}zeUpS#wk4JG!Z0-C-gRvN=P8CU8DoYtY`TyOOI~e{dQ6 z-`ho*>${THmns;Htl#iZEjx81wVH%L?^K4UC7Sh<3lySZ7NuEU47R=xsp3?(CKFMM z9fqN(?$B7bWZbt7m1H0jW^vnu#MwFns$Yq;m3M{C+wpennNVJJF;nw&u@5J9lEUOd zbO)|Za8K&&iJAf5JtRI$tPNIZF?B)^A>zsqc2CXylu|!BOYN0>>xq=TJ=NUmHn`i$ z`>B4R+X&kfq-qTFoklc_5H;@kK1nHA4(8JhM#tG>D+_EVqv6YOmAOYcGxnO8Tnl)k zdKU@%?skYxH-l9)bEw9fSo81LG=#EH2FN{yBj|k{!=a^*fd*0HNlRLTsog_&2qYarAE ziVW=wf4l$6_ARS`za(6NUvCrYaTlabLbDiTP&7IBk9fQ`)Aq{I?@cdhb zt{0eHyR)!ao9~DvP_Zmj$ixASC|i0lnT%TVZFRwS!UCeB2q?L~NZtCQ=C(6uaB-VA ztt2;}?^K7GPMDnm`(3d3bHIg_e$4|-);elN$$TsgHm3m0kLvC)Zw880KVTrQ4?io> z4h9hvBB)L?Ti<0$nR1)qY9vpdHl9@?WJVFgxUNPz8VQraJ^GByYw>BR^;i#pHENL0 z1xAT_-_7qZ`;u~qIYuiVNU)}lY5T2BV%qe; zr*e_0oZxyxQ;@@U9<|M4hO82TCM^*mow86n?Z9ysV^ZGjZ31Et@)TU?EcQ^MU~(?# z?F5~ur}?x5^9i#A@v@z0y8AVZJ5j%DAfLtuGRf0fF^s?uo~V*3{Nsxfj@KDksE(kB z)4W8~NzZISHc)HsQ%F~N-Ef-b)*e1PK3HUZ5P`09H!jApsc(UNN=gPgQ#0hXFLJPR zpRto_k`{<~cJrsR!PtH|Qf~P@UEsU&%+2Yk{JO9onF;>hwif0=OB3~=v5{`d__`bB zxXc^%!5y=IA$+~}AV-?oSfvEs-AbFigJRHotFzlC{~huTY|%()&Xi<+X6Qm&@TgPUU|<@uH@U2XG$wNM;CJyUy8gUC zrQq53(Hz(7xoV!Cz2WEkA4kGRy^r+yHd*<*wC0}td>G*QZA4$!G;)bR5R-#H8f)Z^ z(cXO^ncIQs6abl&_nB6daV#Vo1zZ<(&`tt{NgQTc5+#iseoD%M3NyY)ot-l~g5g#? z5bg)_i&7&r-8@nR7u|NTFr7dvy>^uM-{kF}qZ;5gJPddpL_`B?nymWWcD8`BW)XrFr#loA)USTz~JD zv#-t5Xain#TK>%(G52N3KlCYt;}G$g%G#TjaAg2)+eS3xrKP1{Hm+PyMk;}|ajMKO z829?!Sf{4pUWMxC$-GJxl;E9w6@feAF zv!%y{&LH1JJK3j^vAZ1TS=%&Qs3{3_*be=$Gcv(-J};p>+M6W4e)@VAVi=8Y*A z23vI{>WG=0{_UZxLe~=?E=+LyyArN0*O51L2yLrJXxK`bW$i9vKcHLCO%D$F zr(z(HL6EZ}j%Lx=@Hd~Z_ixGqtNr72A&u|aHM4{lPYgSQblIDYObL$a=>o2)XtZT) z2x;D?o+Hni`vyyc>|2;X-9xy*-^bS8m0P=?HYzlaJ^=(D?X01}06CNmUGS{lXB0dg z)U77`0ku&auaj!XJb~GQu36*o(DO=Hn4Rc4|5H>we{{Ciy`XhH*FKZVZO31lui4Y) zRPbsGW|GT%bDF;|vv!A>jPsB)p^2aJrxCnoOz`|ojdhh-_z4a@oeksuHQBl=f|nXx zV1|Etw1oFJZfpsUA20;YcOxkINNA&I-c>G_c32)H4h)*cRZ z0-GLR1*o$0$I+SiBf?GKq0H>S)B0pUSQ?mVrqEZGyL)-_SRBR*cs-8b;`ts*EhFeL z1AE(a%me-|9EUb(8z?!zBYmjJ3A4K@+3|iVNRFSSM01#)9;~upFSHeN$;La`EfYnx z=1Nt(%7i(535dS}A@>K@Cj2ho!vYf0CU}MlJpA;-)28VB^e6Ry;q=9nL(muaeYPKv zg)9e(JH6;4OnK)9Yb*8DCFeDFqkq#ps;=4J_4lQiw!Po9Z57)_Li@KSoNs4n%}8k! z{X=t+dX=Q=Z6s$c@^tv)U|yTAWM7+aAz}Sz@dQ%kZw)*dCOw>=`EOXJgN|qi(P}dq z({N;MjK5T4)~;Y){PxN;XIB@X_S^b;ss+zi=|9PuS48$LU?8moO_d$Ex(zXtARw#u zxcKcv9;rqmB{5q0SK^GZYO(1ff6dG3_0x!3y!i^zMe?T3??_J6m5bh^>yu}R;k9@? zGJv2x$$|rZ>h44VIv)kc;U(C>ZpIIVlh6mQX{*g$l&x73FZ#Sk-FrXcVb|?gVlGp` ztG;HmUHZXK+CKG>dx&3e6BMQ-e?o9vp-cp2B=08KKRXFNZ*c;fhRjHxw9y(r>0siw zPhLGI3HR$*k%xq4_;Z}FyP1#KJLye_9`3Gc<*;2Y3=OdBP3p%yzbE8x7fLI$r;e>} zU~O6X$vDkBE;*+cyz1m!-M2H(PwE**w`&DAf3Kugp|+)cELf&TD!bo5*iH;C@ciC; zi(d4K2eikKufV+bL*zP>ZR$D3@?7@!hmQ8?*u5*=I+Tqmau{wf;7e>`6g!n}<5brJhcGIqrob>8m#X&9h&TqfN+ZrBS|A1L z8vC%Xai91~Aq5<`MhKKyejHM?1+CKjUPhqqb;+B=nHiDM1bh49i6)xMV?HrTLc{(C zNkF#0wD!xMu5^&oGz7>mC<4b%odCv;Hn3Cw!`8umAIg7Rz_oC7v{?DKvvst6ATTiK zsybR0fU&JhT@;ic)I&jJM!JzX(HeSjxU2Ads#1K(;45PuNw+iqp;Be}XsI(A+o*xe zRv(0R1!9C80pX5#22NK<8?zC5xd29one2N13D6?ym%~5e)~#qNnNC) zC@a8G7@(F=GMY~+FnDuR2m~56jTPtBykm<*v;l!&v?Exv4xJX#kpty0g#iMch#O?W6ctp6wJ*DB=&Vylcv^6+R$7s8g3|(+`BD7@z5fz z{qxO%PUb((*TAKA%i(71N;?vE}(3gX*8h{CNtZHMd*foU>+Fc*cU} z9fnNZ0Q>?gv5Oho;Gd$GGq-rmxzz8O%Nz?%L=PoKz{hg6|2~o7`Bqc7>xE@O4o&kT zlsm}Bg6(zX~qkLqP&Y2>07v69J+ew1o zD_@L;iEef#+YzfBy?r1gH1sn0#3o|8DujY11rfxi$|!2*{8-w!G(~)@F<1VZmtxBMY<*z${vW9Z#^w=>LUJg-|{ zL`>6b2p+qL&_iZ~p1Xt~W(|5AE1AQXHev;{6km5@1=5NYNdu-0SkcsBWilUM7hokd zAOB6!D1y0PBAD|jvSfd5`7-STcrp29^g+h+@ULmlFfT>i!#o^(1U{b9W_i76D|)$T zDZF!5=@%nu882^(j5}QEA8IV|@z+;rJxvS4T>2J;sk^5e(%9f|Oh}UGg3O8rC zP@A*d$jl%$!8Sa)l3#3h&Oi*Zx9w=KCU3HyUeh?Q{&Rkfdt^Aiu%+W|M$p*Ohyj2c z@FqKjbCpSK1FTqAA+a(_N^VJ%(p!_2;^XBm@;`6zP%%BeuIP-;-+WRRJ$gc$3x6B8 z1pPb1fZoqMjV_iv1kKgIw7|LlM4uOZi9X1?1epbw%xLW>gpGL4@s@#@4{#7G|4vLD zi1h+sxrP|H9N%Apd4qWY>o6}cKVUKDOCf$-j?gG3ODX<$d=Fx<#$X_Ta`5w91TWs)@~k%G zdKB$QcbV0Y<`mbF=@2qf^a?*l~!uh3hcKGLkJn=!_( zp-(gjeSx1}#Pq2vvV7%?n2#JG^NJe5SL`8r!H!`@q)d-aVrdT*eXI|mFD&$+ zN@JDPTZU0m(3$(CJy{gwWeG+sx`f|NERTSwak z>UZt{4yvn;k>zXDBEgc`;es@sibxGml0{LjbX}~Q@S#c<@z}vI8FOEl@}EyfJ23Cg zc15GBJ@JMJK*$(|P#3oF2eT0xF2#JA57Fu6(9*GyfsH#5x_1{sf3L^zcN;?g-j4aQ z389ZyBlwpU2tA4=+(<2iL)C~mSdQSn0&Ep!;0>4vKP-ztF9zt~eZJmboe9=_bz8g> zd?rWr>4ika@iJ%Gsss;lS(Jw`BgmDmO7bLk&Iu)kHslI?-6YqnJ9kpMf#Wxw2Hk^w zn0Jk!mF*MoBX)Y6Xij9Xo`N^f*A03H`hbV02Pe&@0x@en15ePoaTa-Q|1zr2R3#iR zRY)E^G*AAo(ryv^6c{F@?w^lp9_`e#8RW1gRDMq8^O>{yCW_ZB>tSZWQO z#yq(n@0k}6I`=n(p7;=nW!selI-H>urh2)(&%n{k>qzj_ttN$?2+)m^-#KSLOtfYcqZ6 z4VgZo_Od|9Q;l(UpNu3rTG*QYJ41EmUqr;ff23qHFGbIXFQjaRaBcrrXx(XsslFe5 zTJQ^aan73Ch|0jam-b2u2f$(muAYQ@r5~lk&g#+PwtS~lUYDE^N%?1MSRzi3y zp{%~+Q|?^g9(8(wN8pKte%`k(4sg9=v9H743XNT3o~x|6&|O@g z?Iv8G=12|B4-BCVZdu01V^D zyD@blhG9bi^~i!)FtC&Z0}NV*EN~&FTJ9d=LIf-b$mhHOh)L(jf}fjV6@s5vAoFu^ zXzYC8XYhpXZFtcCx9D)#Q)AsB_xxq4*M+C%Yfe15(re%sYkhbAY@yfkeRHG$5~9=ZQ+3G`8D9giIbem%W6&Pe=ry2f5Qvza2)oY$y!IdW$R|3P})!Dfe{4zCnrGcY!u+`rfh^@``Mh z_83cIjlCeSd+(WV&b&$M*|$rMxZsDWA`s7PrMqbPSxR6K4i8NGzsMU54CGc@SmYWjAJ@49vd)TBQ zSKd09{MEt7aJqx5;c|>UoQ$-7RP1T-b-b4*Bic`u(%w&z-q}kwvzM=Ac6>c?h^va$ zbG+FTYhF3$!It@G;bLamjG0VY_RH~@{|&xnnF^b-_->edKL4-LzuD7l#*g+j6EzFA z6Ms<>BVC=_MZP+{qw>2Moi(?24bYRH2iqAwZsz(Zy_O&MUCTP~pnVIjJTej$P$GfJ zV+l;lCQyPJt7JX$1})2%XvBA3Anc~+00&SpJwalTN>L>CpwgQS96Jx6Z$^c+A7~gF zU?b8Jr0Mwn3`!_gQ?3&jhhQM{97l4G7+}H{&e&rS_qby=x!rL%Tn&$5&$kXYp6b|; z?2ib3v7({(p5b0D2m^ri^B!iZ_e@Xmrv}B^LLq=O7u|+)kF=+D^GV z%1Lu}w2S_Ek+*|!ftMG%H7Jz5*0hzeJiI4oj2sWfJ|7v$z%Pw3bU%8F=Lj45lo(_1 zED;Ms0a8A1)CosDemrw-GrnGk@6W_5@&hQL0U{_G+z7z~MSf5tL?9QRPevMn1}Gk> zFH#?Te*h00I2c1y2b_`g`vY#Z{Rw_(@GTr{ww~;0wv_w0ej&`OH@3X6cET^C1G?=P z;2QpAZ>I)d^>Yo}o#f@Ye}uo&<^(UBr9Is&miF{eFYN2BnAO`?zG`rYG_sbQrfzEN zIZqfqoY}B$6F=B3o#vTyOznJs2LPC6#n7U{lIb(}=#Q=%0O0QzlyeWIxu|cbPTbvF zBpnhgSFDV-*PI*eX8A0`)t=1s@Pw~|LlK;Y!=(oC?A1mE?7i>}gpD~)px<9W!4i7x z9P~vRiDyaql5RR@^j#1P@R1k5`yW;!eU7vU&ou{WGSYY95 zL?rZwpbfs?6xCmSyrQ~djvC@MgkQ1Ia+0K&fJY*cP}e6hiFWL|M$ z5mTpjSY@C8D@I3xHN_8`RQ%MoKR8k9N+x9Z`EH^P%`h9}-kxI$AT^h%)tQXK*ijO33R%nP}Ip6gvl z0*h@~=xN2>i_jT%H&K%nfy%3?_VUFobh1HVR?-kVrC265tLaAPgOo~zn(5xHCzD$+ zmC2w=BrmTjul&C@{*-v+ot148q#PdY&82;`g9pD6Zl=PdR!T)NO&r8a$F-8IPHQh) zncPV6-S9Bg^@(BH@(tno=NEg}v5)$?0GsGdNJ=nzhz$w(q8)*?y#O|hBxG9_A%~|C z_em zJ4+gRYs5}ES@n93SLXzXL`+CvZD#z$DG1*3`6xiHsom_q!k5bX1Hst13FBTjG<=^q zUG@>|WGR}R)Jn3usI%<*ympFXv%9Eou8FcR9O-MzUF_owXFK|`C)?LGUg_MHd(pKA zdVNXgwV-Co{Rq!*B_U~B37LGHkm(NzYlG6LDp(EBMhvMJXLZ2Uo%blz+voj>MEJD0$NFu~IFpts0H>FOOg>~QXBI!mhHjZlOo*?6Cww8bd6=D8oZs47 zvY?}t{EMzus>1^vbobL-t=XBL&fIEWKRDg2Ay*m^Z6J}OSm-yKg~YE2^xjWM>?I&^ z&j1Y#8Xi3Mkw`S0Tx{|#7a?uH*VMp#i$8M)ufLc?W+$?0JrZJR@-_b1K74N%(kcNc z@S$mHh|rjjo=CAs=*hB4`1AeIAoY1co<%<54%E3rmU*2f(`$VPv%=OvN$t7MGXtlb z7#T2PTYrz(?fqOj9!hd=d@j{9==^9e&%;R`jz0|Yus%7`Q@4AVuWChNfMUbw`qFNp zD#_ctOFKJzCZ=yZlbu(DawRMltK6ybexNLek6O|Wkb?YtCVlcGrb&|~jGXSGtZqNh zcGR~v6A!|_Q*UpvEVrRbc_`LOb9=0#zC6R#kt_1>A)kfRBNv)QaL?L|fG5r8!t-X| zaa`Lw1R^=0xqKS3r`|eAF&Te6PcjY9y9looe9`bfswUVXL}$oaqy;8WJPqHQiahxU zX*r(zY+y+t56}Q62@x8g-`^VLtReEF5%Q%q68>Jko?|eOM?IlpM+k5WT>*0JjrZep z&-QiJyx7vk>ek*w_hUbg^xMBL&TGs1?k;l=jPe`*TSiFi<+Q+d`-gbc+uYOM@6ccu zmlMN1Y>tlb*6keXt@?JjpM2vWU#TzO!TAc0_=g5TR2JIfl9@C3{V5+*xe3$#gq9r| zPAfKz(yS9!r?StSVP5n6-PC5{F8(@kehUZbFMU1aWgmqo%Z|2I8y^kV0a>aC_|Xo? zDJLN3(D47^52Q4d5DtwGX@w`-fzVP+fF4M_@p&(#-uN7i5_CuEg47Y;YmL;H013m_ zwSZK319u!xe4+!8KGxjbwifL6Kn*PNSKUc6w-B z@(YV%RJRti)3O`d=wVM=d+z5>uB3F3FTj-AgcLUivN8e%qCYAqgw0=2L&*GD9G5i3$VDd+u2VN) z+qEX;;q{C!VrsDu2Y9k4Iy;f|t!y99ZmvI>(^$JNy^(5tYCT2ohIX=E^_-+rqWmRJ zmQqoTa{^2)g6%qVLKIwto(cliyu2ze5|NuNfOU@y}W-6Lk%9 z6@NCkzU1h{MzUYCn=5~x7oja*)xiq(ws#yHOX2H zFzs9P)Q=D@fd?iKa0qFi zDJ=bk$>_|-pPER$m?uWk;S$G%A2gD-JB^0+8_CtSv)BV|$CJaI5@Byd6t}WjizivZ z^?n}{7;rkp-~Du|zr#TO!`rSu5QdrIY{I&su$D zf{z7P5@-ucYPpf!bpqLk9b0l-WGvpZ*=T$}BP8(c}s!BNIn9|ke)vqN0%?@#p5|31N2vu&8aa&u~3+2CfD67gGd%zT8+LeGyG&oMunkjb}X7BG>WJ5?`Oep#1c&WNJD#o~gNmXd--YT4#aTIHP)wpupF#hMg(xR9CN z0qk1;#^hSl?kwARJdn04fNOf3BTXv!!aVfQ3F&Sst{j7Bmy6G*qbiz<*CnR=eVys7 z4+`=?enk3?kCp-X5@{O&L4$B!6Xe&W~R-Y z%}mbuzyN@Hn|b`aVZp;GnKq5FwXfQpT^(8TMKyLBb5Uy#jd*$^Yw5Lt-g2@fTmgT@ zs!3VAjx}am5%|F#1;Q0i$p;NTdhzAx>2qxbSOtCX1ZlD*8BcQpUeioTGQ0x4j^X2D z07*#wh0oB>k|qGgFd)wYfE@Nf*yV^ffepFa(z0Sxh?W!ttL_YQRji4ymQC#&AQ{!c zOQevzr8@v08R#{vS+z#kxWtFO{=WbK8g4eN?8MiFg#}D-o!W1-no&~A#G>I5!Qvg+ z9iVDeC-^A*+HoGnUqan@NnRwV_3Fb zxRH%&NS?$5SL|)%&2DV!Le{pod$zEZ{*S3mbi2ofs)jeUQ;cclBwIJMmL#r;wOA%K zs~H5~HL_bbX5;#eOjceFla?*)MEJYm%6A21{1mP%Q%ffDW8$RoRnw;`|9(_1R5FpM zrMH!MO)p>Rp+qnFfkY4WfuTMY_fq|B;PW6?@@LBcV(i=my~}6<1BRl9iLPMWHw4lT z5i$coRem{&16uS+NLhHi)T5!sVmBW11(Q)Rng9UQ@IXKSzoP-!Yf1-DW%sGzrNSmt zYJi5Ad%Ped;sQt7o?;Cxe}*e9HX43tKF9Dw>rD6|GO2u7({9fu`?vWs*{l9Mx}QzT!ulS+T=s!|;2qgS6C z;$`__g10@)^ztMJ>((|r4{ysETPBe5MulLE+(Ni`yq^(Cl z?73w~pYVpA<5&|mGl>roM1=6^nsO6(JI6-`fRD^9F{KQ$Of>@|_;56k1ms^d5*nP+ zR#5Q^s=PHWP?2R<%H}wqhhpDf%CZBG?d$Kk?wjszvri54$h?u|Gw`n*|4uhkJR4pZ z;u>&nsH^LrDeks+C;D3aKB1O+e~Q0ibw5{WOINw1vKY|3rV#V^2~2*0P_$V!FXerT zZTZ@PEIutmsYAQ=uTJ@*v)?Hw6EUKp4K(8QJsl;RBQ518V)Uvf6WlD=IsUd}b!|7; z8W;qp16q^ktz$XT9qmGUwAigsKEe$`3tvy9-n@wrLi#8x90g^I1y3KoGeu&~BV9K6 zEq9QvquiXpv;CeAY7%k?pP$C(&v*bwKS%iJOq!`)V;m3A0Ai4$K=4t~XXQErxz!Zd zBS8Rb(G-=~LfJ?iTB{(kyenhKwru6|cXx;j5db+ay=;;DT)#aDT4w5xn#1GQ8xGJ6B4(Ga6brDpoZ#__dl zA6Cg#K1V?+C@5maq>O$e+*}!QcD9y_;+nXKa~s-9eu}q|8NP0!G(3(|KZ6n-8WtVi8|W%8j0?oPZkP>cnB>gC7+)ids6${(D*{D$7q1yX;JZwKZHs^`{}#wfgvAHZ zlfQ#5ilMyHyL|Tt^*&!v!-QJy{53Q>2qboF;b84@mSjvtq&$Wr-C_;UqZ1f(VfiKw|?n*Ybw|}v)iPg#Rfx4MdE~;7GoE2Xt`N-z?@sTv~(TQbp^GXo#iU(n5 zZ^sNyPGNG3rt&o${5<{-ILfpp08m-j#7D=bl`s=0XHWi?Hku#%+FRaAbg+kw0UqR0`%uC~p*zth0m$H7By`V594An6gM+1IyqC^b zFHaMQP%-!ngz!HqG4`gA26)SZ(ErFE`2Vl*)t7wupYYAdaQ&i5WE{mdc;AG zhs4#2?xo zMQ6=dhKhs<;*6P0WM=ND5sRZ-rINMb3fWK5YQ=%>7MdSp9rgDIIXb{ncW?4XxmgDo;NO?#ZKmi{i*+>+0^gzReK2KQ_V6PznIP4GHVt2x(+dqU{&qr*I z@BQ;hp2rUNb=mk^vgf?J`N0$K71Zv3eXM`@*EiRuz*D&eVAS`+}7 zo6E$ED5;)CyrZv+bWc}n#hwU_`ut!=%hEz$JF+I!!*DdHHv6PWTOeH#4fV+f61@#b zr#}dZG*aWwpR@0_ENnQ10ZpBjC7-_uOxRivj#&rMWeA~f>kH@uz}eukXI&!0z` zcwvgB9mnS%@w`AMhUbgWSwL$A2I22bMrenBrHYQgo~sSq{vhDC*8;N88U0Z^;3n9^ zlTi+EBgqNQ^>=`?{cR2B;%t6DJIH>|*`Y4WPY-dOd~C35-y?%uTAm)_9DHS%qx-$# z4t8ZJP8PUu`dY6NptVHpvtU z6Z7+!329RpDxB4MVMeF0i^S$le67S^jBO!3|53F3{)%XoaZ8MrJ>JWTJi@z>Ti^*~ zekdxhmOzTS0r?ouZ!ZF`iwLq#Z3A}W1>m+KJid&``nf@H>fg`!6Y>l=_6lAvqS881 zO33$@2pl{_;Kv;t(Dt<<$h-IngbYk1FeHjKB(^l(=u(FqZS4==N4k}-YHfdZLV$jK zoR@ZG9~afOA%2Qg{oG|!I=M<>8aazqN>SyC)7K_sNtpD^9KlPe3RnII0hwv6X#w(M z_MExQ(BUJhPc1T|d1e_}9Y>W|92aaU+1*_yyOpF>-WqDHxjNF>si|(2{$u~{^%PS2# zN)E;$tTtL*x zVcv~T4)qGWknG`heYCsny)m8^FVcO~_tSh7(^_h!PD-;H!J0~~W+tX*@XNR+o1BpB z-1n^m$mT&A-!h91RoCd~m!M2Q$~*9RkpQ2Ec%C0eW5q5@i5BRT7VS2Qf4|0*@B`MuOfw`vB$TFmKd_ zGz@D3V3lMPfEuCT;HC)>JjT~I@cT>vfTm~&jm}UxL6bvyLnh;=$5%xfXqzW7b_MSD z2Ed)IkC*|?+{c~(#jZf6A`qDB0cDvU@JnwiI2L1BezLFS?+1EX9N*c)a@)>6HpM&o z*bUs)$G*eve)e?_^|$r;Io8VYbZ@=YwceK6+p!kPO|8|kFpZg1^fC?b3IJ%fr>s>O}>8no0JI3zHgt>>(%5QNPJP~yBCSZGigclGt;#?QOHIUW>oVX0U=TIF$fU>`dtZx zFVlR{l8}>Oge>>LQ%A`tvL(+_EX%%+)SOK5Q!eSOm*qxzOTG27nsO@qzb!B%gju*~ z5mPj^kV)s2(}xUE{(XZ(Lus@avk1|6ZecN_t2RhO2yKeY9kdEja(jQt&WSB$S7&xm z+?(G{ZTz~M1^kg{3&!!NC5i%o%xa7R5(Q-ENW4?0138bH=K-GQ({sT6QHsJ~0P?6@ z5RUit{)HSg;U1%q+{afm^n9REyC#;TY!w310*#A1!$-dCUi4Ci*H4a zwWtfNnjNc2!{jdPKG+S5V0te3YW&`I%nN5{)5^NEw0 z;v!*|c~+&H}+%=63y2iMY;xj z_>vkJ^csbd3km|B^NNi8E1vMmk9sw`@fGS#KCDS|o6C^q3oTIu6&%SyehtUhw7R_q z$8!B2a%G99xPu+{z>Ltfkn20ckncbCUVg1U=SO+8ITq(w`(%>4*X0x+$J-Npt?o|p z(_WkCt2{NvUp_a&S!yMFC2aX>n_1idrl`1x2LP3$d;dukp!$k$`d#^jMNDey%M<`_ zWe@|Xq#}`@PAZzv#9Fewr;Y4Tlv;Vbw^n;;gsn}*Ob-|CO0$3p5{W$N7X#ejG=MmC z?c*;JG6;D>2l!M1fJJykY`~)TPfp?4J>`k!`Uyu>Rrx!}3zabn;C|*o08PmdvViyc zxk~S!4|q}#K%+Dx`A|2DYLqK&2JA@$0gL>Bq`5(PiUZsl?8yC|=y?CqV5buoM!K&# zH_9jd^a!v1M+duyA5U@%yE@w4>(*#DhrdR<>C4mHG!^Ntif=kAW$o?I{+hj63`i66 zv~Y9Kkl}oBbQWJ5mG@q9mCdIBvV|6A1Z6$CcQ@Svd{Tyg&=J{6shKz-P%Zf})>(Ee z)=s&zt5&tbG)4I1RUg*?NbAr&URJu-o2T10ysXw8ivE7W9Vm}(40 zMX@s&o+ED_bOf@|4@e1`zUeLiGrfSzbBDt{^su|D710~{M~?rG(}xwG13TL-nx?r@dvhjvQU>PBMuKo4_C zpxR6zH=nA;ma>S3;?KFroqn_&Sj>e_dj>;9HvA2j#a``i9)D{(<;P8{7GUx z$>lYzWQ1L;Fv2bk;VxLB@wda1aYG6)8UGF@<4;d*HquuhRAbO27%e7y`fsF#!nZpn z&RhpR3ChPp=kZ(tpsq^{kkXa_S3-f?iy+`LXJDt>!0-JmN*B~o@91N%Sk=o%Hn5?! zL@qI-V`kn!y?VW#89r(>lV3cInM`xMc`uhO{I85ZX#!-w8*pHdROl6TPqTe_gOByQmk0!Ubm^v*hS4LJs}Ku`7Q;1dY7UMgTXv zh>)qHh%u!%oNd{btgT<~eo>g;(czvhJLBDLzv=I4u{+U2y??N)V*g+d>DRF?k`CTV z@oNK~s({egvE%r??^*ofk(_^QRNhY6LVb*>m@P1v+RY3P}+2Uso`G#UvYL-4120>||S0~x_p zaH)5V2Rfc1Io^9np8pr+g~8MB6^12W9P1aox4(1az47j~jt=&4J3HLN_G+q^#kJAy z>T@HU73;g%OPktC=r+$9yKnl$CouCqn#bpbg+B94MyN9Xd;H4g2bJaU#jJnDo{rA%zR2lA`%5y$i!2_ZKS(m9p&FdXq4Y~)#@%F05GlycI9rg4`jI>EzrR9 z1ui)o`LY=S>z_bq){*)exqJkLqZR#RA091LVGr@VD!qE@InwZd#XHCdse#VPN8%l$jwaeSyq@Che`A!Z^UYz-*5zaDwd{C%Szef2 zQcGh3Yj3ton?*!)Lfwe?tT`A@07(msB2iCoNxYw{-P8sQxgh?Kg!c3i3%rD8vGfgl1kN_aJ@;R;k$L~(ZYer@k6A~Eo zYBUDbnv|x;q>L!iQz|ZKu9hxnE?0csPNV+0kBw#d5?_0`)4_v<0b!`bIsr^Tw|mZX z!fn_Du>Ut2=px)Mr0-F=TtzB_mto7w^Q0_8#l`26--Q% zkE;b(12msaND98!o9}&QAq6V9vA`aU_>0YU{{@Ny_mXL0tBu8Vvz}&!#9c}83qL*F zC+ysCPp_-V9u7Ch`syD|_ScqX`YNvtvy+w7l}UmuXfwo{03c!bFy@QT*D~p}VxJZR z=2niJ{hR#Z_d(?FAc8I`E15lyNlqTcYs*SdCN>iy0D(42NpUM1>G~c{iiNFo>ZL7J z7CR%fw)ZF7xxv{M!A5RC8v@A)k|(3vorPdE=Ne6u2vy~XTM5llBB0_ZUmn7%-hL&2 zYUTl{;vpItLQ@6TO+*8r^m}PKfvPiFUyuy~;K;{M6`E?JlaP7}J?~{PP;s_3up1kI zae63RNwS6Wan{ez$61}f5N~_vN|M8do5?QOX9l~*9!hX(@#}Eg;FAMw+>iCNw0j({ zw|q3nPW?q&ojfgABpu`<7q@Vbi8P`&0YF=H{-&XU$;runxkmjR>`3LsBhV!ubA#`|KyRE7nj-lW0qYZdejDZHAo?=2;Pp3rT_JSGy!BDNhM6<* z@=tvB9m>H5BpNNF0q2eQJv0J9=L%2|Knp<;5R#D~01%purV}5B1B>7p&b5TnMII>D ze(-F(Bb@53hcBaSVOb{|SlP)MzVBoI;KnGIlaD93eR*qw`;1c)eMcNj3+lXQv`5|D z1FXCc_Oo^PD#})$Sx>8p^N}ffx+$c+J=79=DIdA6Y_ol}rTs$~|El@sw0G0AOe3(? zs~(QY=!oQEvAAzz7s+oMyUR)0VI|&`8a#cyFr)`Ok|UJ{mcoAb{2n&|*Q_>^T$}8HJt^f`EsC1kSjTiurbMv8x_FZ>A~BtF63|5hz>L z-BH@oStiyg%&Q+})xUFSax$}I@nQr3w68eJGzshPdnkXKAEpo~^)@L0=+M4xW$wQc zM_2A$5Lw8~#qGSb()Hb~6}M*8Qgi3KSaR$*JC;m$2eLH;6-{d(hIn492$f66KuEd# z2OpIR5e*RgBO>!f=qs&wgunhQA#3*ne6gN|#nU)r@(Awxdfgrr`8E4(tWVIDF+Og; zjrOv=FxuDRZhDaVNkKiu_i;|Lj0QSMpru%3UPBS*MC1=${hDFo)5{9;4UBi zfWO9hIzOG{Ys2RF>Y&(Pb$XzsJTJsd8tW|)`&o!ZYRRj-a&~rRdiPIYvhoV~!9Wyb zXXU(qs;&BvtX$J-RO+oJjTp*!d3#j>0HN~0%v^@dakh|2GMd{+x5T91!$2MU!f@zAm8G#qcPw?lmVYt0;`(NztW&o zKmW@2SU!bAjQjWsbfB{WXyrMfbp*6<4Syvk)M?PRPa*ug0N+F7!zJ^x0XW(j0E2;j zg5tchF&L(Wz=e^naAvRri$LJX?P2y;pQbqME1lpn_fm@I(EUT*+aF7^4cpVp!t3ky zTE`o`E%m>2v(StWR49}D6|&y05{bXcTr4wxGrHCxB7&L5N7izL(ZKI0QrdA{V+ zvCOlWsOYZM17);3!(1U2iENb;adQW$WK4)mURYnQDru_FEo`H+*%D*tdcCAp5O=X- zOV-e{FM&Y_0LFa-B<~ijk)UZSp@)AnK1X@sP<;4W3vTo{P0dUcKma!kDM{EV@U#yY4z>itl2CX! z-VKh%+QZg9F7R256Kw452q#Clvrp2!{wmA#+LGX?o)aQEpjPyUkI#<>&EUaIL@^NB)Xz zwMy~lveb<=>3B$o&pX1(*ZuTS7M0iv?@LSdmqTU(Adru5Mr7% ziAJkG=v0n@1V{ujwE=+#zAXIc4CNDT$o?pcrzLe&e~$N+?~ZelmW10%BK#~wa*5d+ z`Q+xUTQRd2EWtC#XEJkyv9CGrT>$eBjlXFS6ZJN;@^YEH;v%MfhYqg*05mjo6N@>W zabT+!i~D%%WZw_}s;a+ur8|CAThQ;CDcrUB6>{=RQ zL8$Urf}5nG+_PsIIv-RC^?jfaA(Uo_3J!Zo%ezs=tg@ zDnxL^Scx>|4!Y8Y59+!vkDL-7c!ZdnT)M{ z)%agi3P4ykgS-)G6%xtd5S?^yyo=&gvX|ywvWMQV%-?}L@9$LsNp%Pe?TFxKB#@Fh z086$5Z2v8(EmQuHYBL&Mjfk;)&Y5sDTzysm6dcWj(wP7>O>+#t ze+Tb@623%=8n?B4w+11T@ck(~5HP|Bs4yZ>+uIVJP4<9eBfQ`gf`I$uoS`Dk^#Pad ze9VyRvf_G<&$!d+{#`DQb!vDt&cg4zXiMi?gB+~)chzYJ`$$#serkD?i$tn^vuKk) zyN;1jObO~9Aw~0U1A%zspCgPdr?#Z1sE{d|F@tH;s8O|4GT%XNE)gM5WMZ+GPAcu; zEtBUqP^e}!S6QrVZ(;k(Fn71oHT6Ttm54T+u`gY7or|FPYk)a7X%Qyjd;C}8IaL;7 zQd97=007`NyaZvDwJ;U0@r26GbNn7t?FKQmWpW6JIU13nL26oaGat`A1HX+<4xE9{ zQ7#DW4)~aV%?G#1U_Nq2$ROm+C?KW7fZf*)N(+7A^bmLWHo*h7#JjD+Z(jESs z?7`j7a5;5zveTzOCp%Bs9B1EmL!x8L??<=|ce7GICslhl$=l zQ19OhsWwtL2z~psl4Z4Ul6-~5hqNq}+K*P=(Eb}*6EF@%unz&Q4Klno2bVlKW41jx z)*wJ?ug?2kJ z%)9ZaVP5`!j`46QOY^lMIkj{za)MRg_ji!zHBd+syhP$iSGmYm_9_67$>dDaW-Wy^ zusJ!V)Xj(ES*|HHmSys43W|%F;u*7;;Ly})~qCfQbyY*!8z1p>RgIdIE+0UXUmR%`@v7q!-t`|n3XB zTpeJttKK-pMYA+<}7qPiWtd>h8o!n)zue<7%7m|H6rNseO?*gZjU7(`C6JV~- zT{6$}CvL9i+Om0pna}2i#*|O@ZvH6KIq>!vXVqMJJ@eB!X-!TBRnNW@~M%3zt9341aS0H~xQ ziGxZcZR99dj0sh!*R-*){3XfN{>8^lJ;}cCFu2;GgV7i}kb|LkQ)Yb4!Ll1dFqx(m zxACKwIpapY&{Y5el&)2i4Js=)O}YL``7(iEf@jZO2Cm`+{uu2T_>E5^aI|}XPruP1 zDT*ey#xzuD5#Itz=mbH&tA=)jq~UcezhzK(j-VORfqgg_$eP;l$51r<16*NatP^bQ z?+AO7T;TXf7xwIEyX%+6*zG)(>^OaEg7c6qNp2nYr+S7R9qZw_d7y{=i27>F!J%r+ zsJa?OLZCwCs$nV@1buh_K)wIU;y-G1W|mB45(XtQddsRA=P#H2m^0%3bvz{Gvq%}a zIZXM2+n~jRLW2WnZ~zSsU-(D8f7<6yPiVVI>;J2YjDPZ=QbW50XxVfT;Zp&0dLWB` zkB5E)Had}OJ*_J~si%EB!CzTE(OrILl$~UDbCo#AQY@01zp0>fIxUl#K82t2p7S>q z)Ze8{elbz5uxp+cVivCgx>WWW@>Q(GicaQh8B)i2LRO2C`63N5{Xv-Hw&X>z$C%p_oTHv+xHKgBuD)clvlC2m zvofSOY4=2^m9tvg$p-kVB~}u_YcYER0O*+X^i1B_$Tp3deJ`L~Z5{&;$nvt8lIcZE z=g7{Cgdaoj$^bx=6Co<&ppr;Cc&g>=yE~|^7uD0f*b`|@9*%S-#){p(BE@anD|K7*zy(V3-J?61dr3yie}`pQS0@DN69vDpr1YLPq2gAlU<;6x_g;n zzQ;B4k>|HC&$k3-2gH%tKH*T}6-tVH-S4G&*sYDSv7A_6qmJ{JDB?m?(q17JVx9EO zA~QN^vt(+az#o$n^sj1bgq6%fbcRlQoLVx289!m-OT%9U0BB1uEnhMhD<$Rx01unICU9W zW(jcJ4$+l6o(38mXbyB>wooxa<5<+-(D?7atM>o94=RZ?q)j0pZO)~M8FX7X{CgMz z%g8lXQa;uWcGb5qW6)So)x4Q!S zWgw6l&d*?`!&zAFwvJonn_*lO7{kr>ZbC|20=PV97szn4E*)vF-4&rxPH(A~4+v05 zt)(@GmbG-78J=Y!m9J`{<#***rJV2^0CVa06f!YAV;GrS{+iA*=bHc|BFY!3q@kOI zEV-?pVsBOpb@`rHOL#cRjw4gufJ_M_+>qvkB=!Q5Gljsm)c_|?0{Qt7VNrdtv{L`E zsq9jy;wRh_p=bP+0?jADv6t}u%1MnirE}f|E&{LrCdJ|u0V zp6J!l@G!>}4kb9jmOhTKqn{ldA7%^pGVIF?#ZHHeg{~jH$nhBZILEzXd7)RBp*X;6 z{~&vZoR(Jlv5j<^#2~36Ayg^t6=Wf{ki6OsNYPWvw(Xdivu2p;Eb>kA@HU?0R25@p zndW57U$}tjKOn9O0PqvMO`uHZCTGMNshPBvl~mTvSEpRk(@%SMPPjGf>h4TV^!4YC z$221QBckAF+f=v}J)h$;w-eZWgLbhHK5~WU!RPI13WXZ@t7yYF@uPnER2Pr4(5Q11 z092+0DhB~o2LjboI;C;X*`ooPAMd`FN5zusHpvdz3fR0BOS<(A(q^02BbwHYM7BPmM|L2N+iJ?w*Y)3Xqq}%$hr&nK*F@Q|<8z0Fa0nv5&n*`hARx zykdPT<}_#Z7oqgA%kfhFT_ zaU|gf@~ry;@@>75WV&ZZ_%x(0*&5~zo9a0jH#XFhPwQ(+vz-;Yy6I%$uF}fBSh$2qN*eO2M`J3=qyWGQ0a>`8t8`^z zL&d`%;#Azz@j8ynx8Y!^3&7R@)C$c|QT0GC12u%lHQru90QLp2+#Gyo zGs?>rl$WLWUIFiM8b~2<&oklS@(}ng)*04!cZ7|->|je@TR50#^Wx%Y`-7KLofcgj z<1*^{M3>0>neO%PW_bH-kF|9yY-6oYZ*Hj>Sx2rMR!1otSWhppk-fnyv-VNZ%$iR> zpK5jx|>?ly2B)`dHhSj%{(Uo*0|a|~JEViNq?eg$hxKSp53L!levGk#tMt(hSF zDw5N}pe&Xaw$f-81q9URM30_aM53>05SpsLzxd}uz0JF{(;8nA|2^OG?SX{f>X;#n zA12u*%H@Y^vFtb?C!^t6W)K{V^MrNLcCb3q8dh|%h54PV*}_)Zt3@p}`)0S%u2|gB zGJR8wRqS`MHZ8aJu?mYD?s)^)%9GPkB|b<}1a3|HSAB zoBvD;HBcZ6rcGm#h7Nth)Qn|5E^7du;!it)CHPTdd>1p+*8E<{84sTH&qgL?n}u2K0v{Gh-7IFFK9 zh`&d;K1a!omP^=;eko+0duQ&;;QEGLVLoJQT}O6P9X(kQtf|OyR_y7jk+pG?RLw7c zBLxsz8~K&bk4?^c$AYDQNv0yRd|IiF-$(n^XH1*Qe6n&S@S&@+KV>3a!994V6Rv|CbN)7kaNW zx4IaWD0(#aV*q|_1F)+pz^3{@7WzGfnQmvuGM^3Pv%oy~G@w6O;nNzHc?FXte(tvl z0&G9+YG+Ze=(=Fs`m{ zZ|W>F+9u10Y_wu=yHFQtPR}~>AF{($_f~b$8Ta+ICO7&yLwT}4z%&HPg$R^$hNEGb z18@v2$dxN-JW7SU|GPw5=+96;M`+U&^80@`MPnMP%}>?bzG8osgd^GE{}0;cy_d_ z@9uazr`0{3tmZ`8Y15mklw<2FWMi9JNnBNLR+)Qw`!HDrQ<=QNsr<@xVHnVxqqZwS zS#FN7Lxv8@%F8ceLTiV;0?LF4fRIY2wK4$?N=aJpMzXY?jg(u)x755?+uM@+s;3MGfHB?g3>v!EkkmC;ZUY1-AEgg3Z00V0n}sSJ+DTU|K8f$))XeYu80u zfQb?sj&O}7$|gq5dfs(wKH({>l?{eK7>nhH2&7e%J^}J2IkjR+{<*A zO{u4(Im*}3)XNZM_Dc^X_n#V*clB;e{m^u-J&iszY22jx5+<{1hL2Y5h(nyjlA=}? zvMU4hO5?63T4ESw1u)A2;7jys4u|1Q-X0YbjfT+P6}s~3%0JLbALzmIZ95!A?~w5q z7?Tf^i}e>9KXXlmh2GKROTUKfW?x_OiLVnZ^0Q*6dui^BaZr2}rI&T^l1e0^w*Y{U zP`(W;j~_EDbOF52;F321KxMd7*k(rena`a&mvQuRf8G19s*kafizHD2meSqBedO$t z<|^a-W;(;R*4D;~;m!zn{D7O&fN*O&68JF*;L>z}N2t9juA7pN|AR-RqO0tKriyVX zu!b?fUh58Ia}y{n4uCs(esC+>`{|=>=QHed=WoaymziX?YXX_+91ioGL&*`$uX%8l{Cnm<>xvxNI&>uPp{bOD#cOLAc7)#)W-HJsnG}HWwK3GFQ$R-RH_qU3?nNp4 z1~`6Bz;)C8UM6JT`0)NC;j?ey`OBFC1cAi~Fmhv&7lZgc0YWE0l4*M*olZCexX1m0 z-PZx2Bm}q#9&mTG2mCtB3--jh!ei@Z zLbr9-yMNo))^0_VwPkiwwJM{Tr98ibvoxWewS?{%`Ct)%%0e2UZ7P>3E-Yjc1`T9f zoL%X+zv}%X0C3dFC5553vfHbD6y+63Y8DpiQIVm+dEto%hX#kxseiQfk5;a1GjZp? zWpF5*qy6n4Bd_SlCLRE=>{mW4nc~FVjJ7hauA?DKLKIJ?`p62KYb2G^mCR~L0c2+7 zGDQVKjxzTHR+RrM%C4M_Mhg!!Gnrbo0%|liR8T#1V)4MH7SjACYWeQYI@P^x4K0jh zye)xGT!4HNfT*|$-ss&?5K{R@Z=qfCGW^dX051yxSyGN3%@!Iuy9dTmN4fJ2m$2J> z#=tuNuJD;>L+%q7Uv`1J6U_IsD$jJ&o{YCvENo{fi}saB?3LymudN|JJ%=Ho0+aHdxn*DsTZK5I9F`UeB59Q_ucwEo+vD*;q zWU;uby}CGDr%0(Qla6Vm7uUBJzflDEG6Ep1nf-V2Rh5pZ4E>wZWYcHNVkS?nN|C)G zCvpUfp*H5?^l)qG#|hr@&j$OczKQqOU7p^+n)^M$i8BuKA&^s#gEbw2%tCEGsSx0c zt%Te}IjJD;Z^Nq>yZ&>2P@^Ms2T;Fe3E!2$LJ}IFSTNp+Mlr7oPtrVKA9|LHIygd3 zb3Kf&r-6+6%F_AGqr^qseX^!d0lj7p3%z_1Tm=2K< zl~YS!aVF{a>ttr4FgvLv(oZ9c4Y5>AXyc;ZKDw^u)AgP0$S?7(?A@eV{s5DGAfX|o@1fR&5g?{Trou$PM|?rxzi+KY2Zp@}97`hrSkju|`riw0~NzX`QEUQ&E zR~IIkgb@#D;VxO#rIzg2M;=N;dAyduIxAowIidIOgQrIq{?PD$3J9D14#9t}^1r4B z1pq&pes>DtcSSy{Pskx31I%`WzXs?H>+5US6}1$lABD>DTIwV=(wewwThK3^qRAuh3Q!~)gEBE2XJ49 z0({p70YE$o2dzw52}1iH9di9Y^foIi0ca7`PCD-N7GdLm;BK{Ez@Dfxn(PjYg4J#f z$Wmt?vck&|76)2Anc%9~)5B6RwS`L7FHkD!5o#;4l+;iIfB=BDg9!lO9{@If-EWp) zXlOS9zE@N{jfw0MiQbUN>~-bHnA$NzZN!q%^;Oc`R$BRz?slrZsouIfAJwxar=pxW z!!REfrqu(oq7%Rh)D)lO67uO90$&{=@H4t7PuLHU)Bn3%c^Ueo1%bbyr<4Q6yNFXB z41&k|qG4X770hg@d%CWp?(F`qnyu&JbtSjQ*u+_`7nf;cj|Il!_QLKci6Tn+-| z#rp^xKsmY2@qOa&y%_65J}6J#JP}Lr&3(xbN;CQ?Pd>-Wt z(_86bVu%t7!<40K+vyG*?xy?re4JIF9Zj@#+ST9IYE~Pac1k0) zGPkXxtT4)55^67h8vtM?Oqhb_UCh^QWb^jIG`NYTj;Rw#0U6!Mm{-UwTl@*rF1!^g zDaji=p^l4AY9?ynAQ8uhD5PmEwer*^7RsbXHrfq?1FXt+c5#GzgS^U(gKHBqvJD}_ z`VknJ&T{FWBYzGNvi>*1ZF?q6PP_;&r!f*!h#q;xT?N+o6B_2re2+hk0uaIqMS+#)q54*1hyI2%9ma7K^DdeMCIY_&Q=_N9;*@vtFK!#>!@gcQzd_H+{S`F)Fc?D9giC!LQ9>U`%ruwCHUvh_RDw9#Km^r@f1#Vypbp|$0b{y`QZOY@qF07Lnm33>TB z!cKs{2?BTkmX%{FGRxr=-tv!EG40!RU`(@2-{6V8)J#02p;kJgo=QHUsam-p%0ct} z$NS4J2^yN^XjPXXK%PH~ka=5xY`p$5EA!ts{x5k_xg3RhR6D^~ zmImB!odJ$_g0j!TVM8}tnA1%6?2{JCbBDU9*IgNCk$roNZS0c?4y|5Ha0vc$q@DZz z0k*cEM_XAe>Zn&wYp0h_X>B9TYUe19@Q{kcHAMhu3ZUTK`pa`oJ0653Wd;14lBG+Q zFI+NL`~GhSdwTGqlp@O?25wPbLN|K?_$Ng>Hlx@JK5s0ENAYSd8R$%sIMu> z@Y0p$wpYsMcehaP$aB*Dw#wh|YI%TJ<9lItfm0~9E2CCTGktm}yAiu=H(-qEeKF1pNq}#&A zBr{kSYYOj089&*TVD|a-T-&!*r7i{E54Y>SudiW;BYCE6juo}GJ}}zBbL3fF}dW zErK!~)VE&dQc3T2GTH2I7K*)N+Grmd-$wVntkyYs%CxeMb>aT)rIA@e$V_21w+ zEw*?5?om_|3sFXDwgp7`nTdFW2O-u-1)@p^dNB_8YBY_bO`s{?4DJrmgKHT|IM+iL z4kYNqp#*dOLLbX3w+2{!adCjv>Yd$9N>{}iWp3*$y+LgMV*`IKz<(QVzDh+t%~}w<0OD9zf{H$LMCEG< zG~O64$Lhga2j$&~=CU#9ofy2K2Eag_0;s|Zo7Do8{mDsKe|E8nS!L=18+JdVu9h1x zco53Muq6N>aWaugH;izUZ_aX4uJ6-E?+hLw)sbim6&c-%LYW7UmEows(otKCL)k0_ zajf$HS?k~HH(mww@^6I9{hEiK8!7EtNp40BAbZ^+>1HQyvf0&PB4=i5 z)(ik%D~?TdRY+H5xy$l`jFeR|<~r~7X>IUhO-Hk)v%PFpe7*}ni9dz9I101T`(IoJ zuxKTP1qT5(;2vCr|10CqZX!_=yFEn(cplegXlj}WG;I}pz0I>Y7|gS(r; zwZHhfyYcet*%lLTPq0b5Rbbia%1C3kZ%13$e>U90Y)z7(!K_Flox(6th}qE zB*|H)g&F{{%ci=j><>i%ii?|j{>A)rH3HyAsgzY zRFsG6>ukturGL82&*bUiFe~_>r=yAv_9T!S22hYjV9aO=#WN^WZK5#!J4%;7q_C5U zH4*IC@c*fVn)w1K^GFFB-t>Vmh=}rq0A~|{91j7w))nnmI*^Y8;rb{$_^zKFoa|={ zKM%BP`XR&e^2v0|Pp;)V%>K2&am1!1)A&t2js1^|w{tpJ(bnpd$!(3_O*7XU>m$=1 z(ZNJMA=ysqVkUcSDxg#<6Syw2M~~&|>!t~X(Z%XiOp!W5R;sQIsH?5vq9VF98~@kR zF>)YE2GvAT)hBh_NBKM?`1P$2j-?(-RS zzyF&7!1Le2A_|NdlC=ZQ7uho(XW^yN6Ud`J_;D%FG_w_4?XL^p_tJwOdg;RTUNX3! zCWA{!x^Sh3DOC-!y8LLc&4Huc%@?oeVmM)Gv~lnC3C5uxcQbY0mTqCcF4M~Ftv=QU zlR|WKdO2w*a)OLysh;{0xz;}l0Mw|uOf2qTd9@eD%?d>utYyPkU!hf=6)gF2%ODwl zXT5^JUL6WYj40f+z+GsCJHYz?!$D;KWBul=7vm@RZzBL_Q9$c)6;t7R&`4Zfgj{Jw zV7vu|Xd`+(Q5V*_Dz4?2%EkuhNQ_!e0dRWy2Hd16MOxIWZ|r?qV;%=8CXlK^mF z7|`=&cxA4}E1O;A_y0p#{LW3l;tzn{{SL?)Jk9;r@wE3;azCv%{jx(S-Qw&48(kb! zYrV`5XImJ~j?mSe8Dp-Pm1rfK7;Y{xmT9(J1nB846zd7hjekR40^h&TNx(P-DiIJA zqL-;?$=>zyueF>cruXGQO3w&v-0Pk@*SwvZ90BA%*^%JG*8=;b>60%dmHOlcQ(?_3pA7u4>XYt39**g>9tS< zsBa(`kecf9{}};jW|tG9m8|E#s)oxQHIh>(Ta<}l#Mmr`k)dYN@;EE`#1JFp+esF> z2ZpyZx>Ofv&hLt|r#Ca(@qB(q1Z4?8XP}pvk2-4-g0i~Z2mo%0tZ%Gj=9b#P{9mMJ z8iCMrK=`frt2YXyGek8R=(!%iZx05#y(7?l;dq3+;6c7M+{mI@EvM$`nZIZJ(f^>AaX*iNFey_=5wM?U8S6I< z*=nXW2X*`4Hv)wRrHcgSOt_r`^jJKQ1D((f?E>W8P&l9K02_m(uq8|hSJL&Nv9~rf zrW-=j0L#Xv5w^da>2I@ZZJhb^RqywSUewb<;xGmMJ?Uo)Ewo8&MOiRO!^ap#$ zwG-_$6q&yIvM!DaiS(ar0~8ETb6!n7NaaNUz^MU%QYz6Jme5Xm>&uBURl~c=2C_{T z=ouq`1~&S)HHgE182#@65V`;VO8_7en~PrV5|mE?p^%Ew=>+tl8&CJxQ5bHc*-{9cqpGg#+d~~xw8))6VF=Kg9*CC5 zP;&Au+yh2%&1kZ2{|B=8-P;RQ08c2r^aG&_5kmK#PMUg*fGf$#@Of|`*&ooB?CxND zV~Lm9hZ!aYGa~eLrgk!sm&900vx6-qx^DmgZXRA-WknS#qe^kY++REoLid0$r4G*q ze%6>V`7MSsn+=YGsZ_c=%T2a&Ks&{|87?|s4|Oqoyx7}}UdgZ{s;ssY#&ra!Po_|o zjh;d+z+33X>_pAA|1qUoa4XnEzEf&ang0(2#EPQem{8?R&qhMisvuNo5x4lwAz$9B z_F8i>+qvRoKdT`}GR$H=?`z?EaGTm%ziIZZku0w{Y_+5QV-%A4&@g2pKUGVB-4}>W?E(yAO1h$j>B@ zR^1VY&HT^M@IQTPrh8_EYsUr7d&*J(_cB3sC<5rp03dU{fv!vNFE zw4~L^rpmTEPWH2%w=LCj^w!?y-FIe~1@G%^-tLoL=635-EzD*nni@>%q^Fb7MpMz( zT~}5RZ6;}LsQFs>KPE1YTe)m0SAjtIS^J-mA}e`TBg6Pg<}O&oMKK-*jh1D?QZj8V z6wtYl+58Ouu}Otsgf+vt6o?PUC8p_fI&@<==QJjs>b?1O()K{P;NUx2Ywfo3lP z7_yDhtY0Y|L&Z@hjP3=!b)o;Csr+m3oL>2knz*N##E0efn`;DKyvSARJpOTY_W-Z1 z^8Y;nv)n)X9W3p@Ity66IjeJLG{Lj+<uD#g0r`+Y1T_m8mk-8;y}c}s5_tEFjn z#wC%adPBSw+TB`d$g|q(Nh9rL&&F(Pyr_@<4ge4yt0MqRz^{azHPnMwB&nV3r4PO@ zlF`P6$|kx}7vQ9!005`}02u#28~r;7{`&~PLlCD7vX~I7$Ux*s<5A=Rcu}~h$PQ~2 zj5VQ;lJv<=Z|!rVOyt{oJ4y>9tt4iO*M}<%&C24oY+Nt)yfXgx;v%lRIq&sv)c~;m ze>IWD6ui&L&3S3?4_hYsQmy>{!IJy|5z>-@-tuo}$0_g5Ptd!&po?+i)=(?Bn&w3L z{=SsoR_;7QRkfbNrMLqZ0BCbA3N z9pDF_ML0Db=wfxGvaQL6bThqqk%r1K0S5AdNK0wIKnsad+9Ckp+PJz2*DwPBQ%jo% zlKlB-n8=BN#-;*4tFD$Sm@x58#zxCnS0c&o>L*>6<)c{H-%Wc@uCLyW@!rO;HN=YC zALz)FECj}*BLPbKq46)KP_hzW-gba3XIZw2(htzXTZ`gh9TC5v$M=6(aMr8u_WJ`}^naY{X8hzGKP!4D-Vwe@@uJuJ zg;72SorF=N0EX35nz;^O%oh}@uOd)u6x9d|H-C)Sd9T0^FA~fA(OC`ukVJ$o0G0T= zDXV&C0{&<-A@utc)yDpYFuRJusy5!ghhXE(@ z?4nQR+WH;MvUc8;VP&m^2z7dp?C>2+D>X#`S=Ws}{1mLTCB60ss(+ zt5`1nXSCr6l6dxS57fpS)eMgYn`h|&@6{jmVs6M?LW0ay?W4@*5@UZhFmypFmLj-*=LKAdj(*%(BgoDHS3~TdwX*PzXv1Yn?LAuJpUNTu< z51F*Jp2j~r4N!;x2m}u5yeS^aHvj;w1Ya}hjjs!2RJBam2x}1l>^G!v*8(@Y74Cu; zh!KEh%Gv)C05H#%G2F3SH*3mFM=^)v@e?Kf~B_tyORLiK-1$-igxUs`3N(P0LNP5&F2lly8OO~Y7ErZupepJe=~ zuF~~$ddnXj7^MTpvh?|*JxutoVr<}IqANT|4y3BSi2zfw0X8Bm{T{E-n^%C|B+tnh zn?qUuZAeq?`Q!I!x(xKjAwrI=qEKERK zb~VwR9TR|Co|ueaU~Ja8sl+Ef?g#I58L# zb)czNb}>(mthk(%z-tCY8eSfB|==xI~|w;Nbt&2y2&5`&-*=>SJR%E74Sc zOn|m_Z)b@j(^E&5*98aU08ky^qPQ|~!5JVEwO{nNUz`bB(Gi;m*8W=X!QaDHdB@hs~>_Np;+$Z>3 zS0R+21oTt9td_S2)rR)8>2%l2a5VM!)A<3P92;uBYVTmnnvXiGA@47BuGn6HtLlqAfB5ji!){6DMq zXRB1GlPTv4iwZeIGqc~32`3pAWF*}_F+^71qm7~>)?Q~rA4h`=Q(a6|?}u5_?|M7J zwM;K^t#=r?k=BE695j+bZao5k&6Ey8j|W&;FY0b?Qq z+sW4J06?T|^tRTPe7zw z{|UE#nFH{muNT^sN}5Ljm;AX|<$nc;m6xgWop`85jT-e@$l26Dp*5msM@el_nsndt z3`OIiVLEUr*MK}IFoOsAc5r{7J2a%CXVWJQAb%W%#Y-uCehBC{R|(I$BM~JF^p|YQ zSkQzivj5KGq$0K1uXuNY(92s1{d5LEt~;FZrUAGc5JC{yx{vWKpt- zeo2_Vc7dN#p4m<+9T#OS>EUCfCDVF+gfjzB@4UT494u3!rY!xFX#fH2sp~z&3iV2E zRNg4g#nrX>0(mA2rCd{M!k_@j(#mvcd8V)YXi=^PyGWpKH~!?baUj}5t)-lhRY z`H{zcqu^1WzLaK7K>)BA=*VpVgTA6L7y-a25J+7B?GLaV^G*2I2CoSGUJu5hr-_DUOIRbnr^~e`pT?eqJ@LC5SB9-x-`k>kMXJTf z?tL>(<0n~mR`2$*MwrqgEj>KBoa$#)( z0_(b(Y5{x+k(d&(U|9_Rmvhr+&f!>xzzeeAUN|F~`U)*AJqaf%jJ1?~l9@2_W_Lju*VNHoj98H=8=VmxMye-v~30v$8U3OBqWomU|*%O0~)z?b2V)vG_B z1tD|}AaJL`On_C;MCStkTNX4O>VcS`J2cIUgrBQ|RmTbgZk#Ua@XeudUc0wuwOMtj zz+4fl-a@N z@?n97QWsPCYekxW8vqDIKtd6qS^=W>(_#bwL4cisLh?azXIbO9QHrL=We5P~8&JB+ zjM6Xd(GI)A^C3WNG6D<7Gi~DQiDuZHN(6s7WBL5#d>?_+!RA z8K!q`kG=Mc2wnN|bSG()yYy8unP(fCotwu^tF0BnTqVyaO8;E|Ak5BI%R>MFc`pF~ z;d@$}>S&c@$4FM!XUGmN?5=pUySEPfHr{}z_2v|69ngF6qI75^p?xz59auu>?QOm2KsgA%%-jFMw0^psj#C%#G`p_eSR)%?Sx*X z^`=Zalf^x4^lRfybS8DuQS@)CDI3~BM;dA)m8d6ezNDQEGcR+ z1t3P>%AXCEnLTF~H)!yX7K{HndYWj~O-j=m)iXd^-mQ)N{ef+jN5^>UT`lo7=2r$= z(sSvp`KLoYiE2)m|dKMW`IJQ}}jR7rcUh zC!l6?mcz)3Xyeq+$2mrvnqupFw7{;-wk&Jgwf$|(=B8R1P7F8E%?&bCqIW4D8)_`= zU@m=wVbS2a#3pdHwKZJ1z=+xm)I^yu9)|e~7I2A)$uFg2*pf;#G!r|u(#%N>kR*7T zNk?@uldtUUsN6fet?svl?uPg3{LNK0o_6ql2Uj>A*PebI8w2MOGT~10RMM2Pn9|@YdSMsY;}>T$G|#}e zfp7m#%?9}UfbRLfG5~lRzYjaJY_7?2TnJ7c4ugg-5dduM0gbam>CY8`H;xx~IQCsh zhn>Gvc6|3*O+ej`MLq=|^tb9iIou#Q$wd*C9cJpgtJKG3S514nHO2lGizjt3t{Up2 zKPui)yMM5aqHmDBtaq@j#M(geT9M{6ul4U3o|4jHfx?lk%JLQffSOa=Tw5ktkQpGo z{az1w)A@edz~>nNOf&`9V2fx7y=`F*KngBK!^^_)EOGX4<(-*kWX7LCbXKy<24=JL z17jj=kIMyxi{I;xnTr3?kT&M%e7n?AF}I7k?DN8KNt89$(q;-9Ixs7Tn>DRoK)oX6 z<-b1)xVacp2tf+~AeZA_0RWaJI$A};qb2L7^_Cr4)Lqf=SW6fUPm3~R zUPygioml)=Cd%zEMQzwvY@r>tgqu=W#Cf=Tv>4h{DkNHCvLYl~7Y~%}Uzn!2y(L4J z|E!N8+1J&atdF!;y&dR5H~EFbFCBUTNh$#7y#Qdu4)iYB^us5jH!}-W(PB}d!{>Pa zDXve1$3l-Wy#)U&fc8)OpJJZ$!A+n$zCj~+;0cUgPx#!KbhYo8#&>=Dz_}h#a3;?G z?#gzqhjMM~HuSSGpN~eRD8@{8N`#TJq_cs%F3v)l;--+iFtgz$05Cjf6u0E9xA8i! z6mrS}5m^iA8gW9Y7>!}YxS0d`b9x5)oW{$>Mu<*!bkWnATi#DnH8oZCUTKW-o3cQi zGn0G`ZkG6)lJ{e6$;DnS4cEE`(3^>Id{g=W74$(DGJO+;eusD%hQ>edA%)38I~NGN z?qy=%J%|wiO3)!?odNU^@U-cL&NF6I9>JfB*8DZVKp9aDW#eeKqoJuKjhjQS@E=DX zg1y~W)AiwV5C9Z6uIZ3-q|hU6d=1cPYjA{qC>kSXJ z)E?O0M4suZFZDE$NM0DO_1u8VWL!*qGB;^TAyUX((0txZ&HEStdi zYKlx#jsQ75+EJ@?M3^MMM>|t`AJcA7=dzz)V< zU42a3EH3c1Upq6(a^ds@$$c4Nw|I>0|^#HMJC0Y^AUX zJ?A^0({BHkf`g8C=($upQX#Z6}M;rwxxQ$qq7ZuoBsB~tb1Q=FkIpz<=ajydJJF5q{ z0xtuA*A>$9AoO3C+_`UAp_xtKQ%CFc*Y4v&n`LpT$0TUbMx%DF(JIC%8 z^=@}-dxXQ5vF$7t4sL5)*`t--@DMZY>=0x5xNs9GGc1O0I$uU6T+fV5t_Z!z$!gZi za`pJw7G+i@cE*$JFg=AWBx^(imB>DD*J+<#|OwqeBuaoilaqgD) zY64r+U0uBB$>4B$v2!{!rcOWr@D`=%2cRkCC)&{SF7sIk>*W?GOs1e**kd+4lZF2A zk|isEjj$Ha5IZ-`?PkodT*UXXU?(#!eYi?*@nt=OA|bu zd$s9s+#&uz{5pCtZ3fvIGZD6S8KU|qGUb=K9U^KY&HeJD9bA`Ak8{|#s;A}K_3_5j zr$p(O=SS!aPj*#|@8KgG*TYX@p)b<^z8d;BKqqkCocY{B^zd1(zpS)G9R)2B02`aN zF}1jeYvD3J`bkC(fBupbe#B78cafjha$}fcWCY1Kaza9MqVE_`V&tO4b1Zk8p@UgHz z(`7%4au5tYTde4hr2tst69Wg=)e{=o`>v|r!}eU=_NS%@ro!jkf#>xd>^;pB9|2yD z_Na$731@TFJMXJb3pX+3O@R1uceBV1;=sWvLZKugkmqcZe)$yrE zOM|=2NptA1G}FaBJHpyA(c99tte?BZTeS%$HPu}W$_o>9N(-VC6{92NlLrOK@_GhH zI(yh_Nn0R4OYNP(efZJ#zY_r{6-a;t5Fm`8t>hLjdW-9t6fgV&jTeN